diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..29af8c97
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,26 @@
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+charset = utf-8
+indent_style = tab
+indent_size = tab
+tab_width = 2
+trim_trailing_whitespace = true
+
+# The property below is not yet universally supported
+[*.md]
+max_line_length = 108
+word_wrap = true
+# Markdown sometimes uses two spaces at the end to
+# mark soft line breaks
+trim_trailing_whitespace = false
+
+[*.yml]
+end_of_line = lf
+charset = utf-8
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
\ No newline at end of file
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 09743197..4b35f456 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -52,8 +52,8 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
+ # - name: Autobuild
+ # uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -62,9 +62,41 @@ jobs:
# and modify them (or add more) to build your code if your project
# uses a compiled language
- #- run: |
- # make bootstrap
- # make release
+ - name: Build cross-platform projects
+ run: |
+ dotnet build PrimMesher/LibreMetaverse.PrimMesher.csproj
+ dotnet build LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj
+ dotnet build LibreMetaverse.Types/LibreMetaverse.Types.csproj
+ dotnet build LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj
+ dotnet build LibreMetaverse/LibreMetaverse.csproj
+ dotnet build LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj
+ dotnet build LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj
+ dotnet build LibreMetaverse.Voice/LibreMetaverse.Voice.csproj
+ dotnet build LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj
+
+ - name: Build cross-platform example projects
+ run: |
+ dotnet build Programs/examples/IRCGateway/IRCGateway.csproj
+ dotnet build Programs/examples/PacketDump/PacketDump.csproj
+ dotnet build Programs/examples/TestClient/TestClient.csproj
+ dotnet build Programs/mapgenerator/mapgenerator.csproj
+ dotnet build Programs/VoiceTest/VoiceTest.csproj
+
+ # These GUI projects fail to build. Disabled for now.
+ # - name: Build GUI projects
+ # run: |
+ # dotnet build LibreMetaverse.GUI/LibreMetaverse.GUI.csproj
+ # dotnet build Programs/Baker/Baker.csproj
+ # dotnet build Programs/examples/Dashboard/Dashboard.csproj
+ # dotnet build Programs/examples/GridAccountant/GridAccountant.csproj
+ # dotnet build Programs/examples/groupmanager/groupmanager.csproj
+ # dotnet build Programs/examples/Heightmap/Heightmap.csproj
+
+ # These projects also have issues.
+ # - name: Build GridProxy projects
+ # run: |
+ # dotnet build Programs/GridProxy/GridProxy.csproj
+ # dotnet build Programs/GridProxy/GridProxyApp.csproj
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
new file mode 100644
index 00000000..bb440220
--- /dev/null
+++ b/.github/workflows/dotnet.yml
@@ -0,0 +1,42 @@
+# A test workflow, which seems to get good results sometimes.
+# (gwyneth 20220418)
+# See https://docs.microsoft.com/en-us/dotnet/devops/dotnet-test-github-action
+name: .NET
+
+on:
+ push:
+ pull_request:
+ branches: [ master ]
+ paths:
+ - '**.cs'
+ - '**.csproj'
+
+env:
+ # We'll stick to net6.0, as 5.0 seems not to work as well as it should
+ # - at least for testing purposes (gwyneth 20220418)
+ DOTNET_VERSION: '6.0.4'
+
+jobs:
+ build:
+
+ name: dotnet-${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 6.0.x
+ - name: Restore dependencies
+ run: dotnet restore LibreMetaverse.ReleaseNoGui.sln
+ - name: Build
+ run: dotnet build --no-restore LibreMetaverse.ReleaseNoGui.sln
+# I have no idea how to pass the avatar password for the GridClientTests, so I'll have to skip this
+# or, alternatively, set up a different account for testing purposes (gwyneth 20220418)
+# - name: Test
+# run: dotnet test --no-build --verbosity normal LibreMetaverse.ReleaseNoGui.sln
+
diff --git a/.gitignore b/.gitignore
index ea09b491..1a2d6eb8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,45 @@
+~*
+# Stupid macOS temporary files
+
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+Icon?
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Stuff from the Nova editor
+.nova
+node_modules
+package.json
+package-lock.json
+.eslintrc.yml
+.prettierrc.json
+
+# Original LibreMetaverse .gitignore follows
compile.bat
*.user
*.userprefs
diff --git a/Directory.Build.props b/Directory.Build.props
index 0ce1c555..5f1c6dba 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,22 +1,22 @@
-
-
- 0.10.0.0
- LibreMetaverse
- Sjofn LLC, OpenMetaverse Developers
- Copyright © OpenMetaverse Developers 2008, 2017. Copyright © Sjofn LLC 2018-2022. All rights reserved.
- LibreMetaverse is a trademark of Sjofn LLC.
- Sjofn LLC
-
-
- 0.10.0.0
- logo.png
- README.md
- BSD-3-Clause
- https://github.com/cinderblocks/libremetaverse
- false
- LMV OMV OpenMetaverse OpenSim Halcyon OpenMetaverseFoundation VirtualWorld VirtualReality 3D Radegast MEGAbolt SecondLife
- https://github.com/cinderblocks/libremetaverse
- git
- master
-
-
+
+
+ 1.9.20.453-gwyn
+ LibreMetaverse
+ Sjofn LLC, OpenMetaverse Developers
+ Copyright © OpenMetaverse Developers 2008, 2017. Copyright © Sjofn LLC 2018-2022. All rights reserved.
+ LibreMetaverse is a trademark of Sjofn LLC.
+ Sjofn LLC
+
+
+ 1.9.20.453-gwyn
+ logo.png
+ README.md
+ BSD-3-Clause
+ https://github.com/cinderblocks/libremetaverse
+ false
+ LMV OMV OpenMetaverse OpenSim Halcyon OpenMetaverseFoundation VirtualWorld VirtualReality 3D Radegast MEGAbolt SecondLife
+ https://github.com/cinderblocks/libremetaverse
+ git
+ master
+
+
diff --git a/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj b/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj
index b3d2f8fd..b3995295 100644
--- a/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj
+++ b/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj
@@ -1,12 +1,12 @@
-
+
- net471;net48;netcoreapp3.1;net5.0-windows
+ net471;net48;netcoreapp3.1;net5.0-windows;net6.0-windows
- net471;netcoreapp3.1
+ net471;netcoreapp3.1;net5.0-linux;net6.0-linux
- net471;netcoreapp3.1
+ net471;netcoreapp3.1;net5.0-linux;net6.0-linux
LibreMetaverse.GUI
diff --git a/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj b/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj
index 64a00680..2b4c2389 100644
--- a/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj
+++ b/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj
@@ -1,6 +1,6 @@
-
+
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
LibreMetaverse.LslTools
LibreMetaverse.LslTools
Lexer for LSL scrripting language
diff --git a/LibreMetaverse.LslTools/Tools/ParserReduce.cs b/LibreMetaverse.LslTools/Tools/ParserReduce.cs
index e64f9825..1bebfbe1 100644
--- a/LibreMetaverse.LslTools/Tools/ParserReduce.cs
+++ b/LibreMetaverse.LslTools/Tools/ParserReduce.cs
@@ -73,7 +73,9 @@ namespace LibreMetaverse.LslTools
Console.WriteLine("about to pop {0} count is {1}", (object) this.m_depth, (object) yyps.m_stack.Count);
yyps.Pop(ref top, this.m_depth, ns);
if (ns.pos == 0)
+ {
ns.pos = top.m_value.pos;
+ }
top.m_value = ns;
}
diff --git a/LibreMetaverse.ReleaseNoGui.sln b/LibreMetaverse.ReleaseNoGui.sln
new file mode 100644
index 00000000..58da55ac
--- /dev/null
+++ b/LibreMetaverse.ReleaseNoGui.sln
@@ -0,0 +1,360 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32002.261
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GridProxy", "Programs\GridProxy\GridProxy.csproj", "{79B51DAA-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRCGateway", "Programs\examples\IRCGateway\IRCGateway.csproj", "{89049BBC-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse", "LibreMetaverse\LibreMetaverse.csproj", "{27C70F3A-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Rendering.Meshmerizer", "LibreMetaverse.Rendering.Meshmerizer\LibreMetaverse.Rendering.Meshmerizer.csproj", "{95479B1D-0000-0000-0000-000000000000}"
+ ProjectSection(ProjectDependencies) = postProject
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6} = {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Rendering.Simple", "LibreMetaverse.Rendering.Simple\LibreMetaverse.Rendering.Simple.csproj", "{29E206AC-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.StructuredData", "LibreMetaverse.StructuredData\LibreMetaverse.StructuredData.csproj", "{89D7A3E5-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Tests", "LibreMetaverse.Tests\LibreMetaverse.Tests.csproj", "{0CCC2C3D-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Utilities", "LibreMetaverse.Utilities\LibreMetaverse.Utilities.csproj", "{1266CE08-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Types", "LibreMetaverse.Types\LibreMetaverse.Types.csproj", "{B37B02AD-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PacketDump", "Programs\examples\PacketDump\PacketDump.csproj", "{58443010-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestClient", "Programs\examples\TestClient\TestClient.csproj", "{9F71FDB3-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoiceTest", "Programs\VoiceTest\VoiceTest.csproj", "{EE4EA934-0000-0000-0000-000000000000}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.PrimMesher", "PrimMesher\LibreMetaverse.PrimMesher.csproj", "{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "mapgenerator", "Programs\mapgenerator\mapgenerator.csproj", "{2867B4B3-0000-0000-0000-000000000000}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F8CE4DE6-82E5-49D1-BCDF-BB3E63A52867}"
+ ProjectSection(SolutionItems) = preProject
+ Directory.Build.props = Directory.Build.props
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utilities", "utilities", "{6EF29E7F-FC69-4269-BDCF-4780D54E299D}"
+ ProjectSection(SolutionItems) = preProject
+ .appveyor.yml = .appveyor.yml
+ util\InstallRemotePfx.ps1 = util\InstallRemotePfx.ps1
+ util\SignPackages.ps1 = util\SignPackages.ps1
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.LslTools", "LibreMetaverse.LslTools\LibreMetaverse.LslTools.csproj", "{989E5E15-D99B-4CF1-AF64-90C568FC979A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Voice", "LibreMetaverse.Voice\LibreMetaverse.Voice.csproj", "{FB07C6DE-F791-4336-B6E2-B32EEAC34792}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ ReleaseNoGui|Any CPU = ReleaseNoGui|Any CPU
+ ReleaseNoGui|x64 = ReleaseNoGui|x64
+ ReleaseNoGui|x86 = ReleaseNoGui|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {79B51DAA-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
+ {79B51DAA-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
+ {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
+ {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64
+ {89049BBC-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
+ {89049BBC-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
+ {89049BBC-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {89049BBC-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
+ {89049BBC-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
+ {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
+ {27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {27C70F3A-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {95479B1D-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {95479B1D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {29E206AC-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {29E206AC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {89D7A3E5-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {89D7A3E5-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
+ {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
+ {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {0CCC2C3D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
+ {0CCC2C3D-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
+ {0CCC2C3D-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
+ {0CCC2C3D-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
+ {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
+ {1266CE08-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {1266CE08-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {1266CE08-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {B37B02AD-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {B37B02AD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {58443010-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {58443010-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {9F71FDB3-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
+ {9F71FDB3-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
+ {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
+ {EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE4EA934-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
+ {EE4EA934-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
+ {EE4EA934-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {EE4EA934-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE4EA934-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
+ {EE4EA934-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
+ {EE4EA934-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
+ {EE4EA934-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
+ {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x64.Build.0 = Debug|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x86.ActiveCfg = Debug|x86
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x86.Build.0 = Debug|x86
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x64.ActiveCfg = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x64.Build.0 = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x86.ActiveCfg = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x86.Build.0 = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
+ {2867B4B3-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {2867B4B3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
+ {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
+ {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x64.Build.0 = Debug|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x86.ActiveCfg = Debug|x86
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x86.Build.0 = Debug|x86
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x64.ActiveCfg = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x64.Build.0 = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x86.ActiveCfg = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x86.Build.0 = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x64.Build.0 = Debug|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x86.Build.0 = Debug|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x64.ActiveCfg = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x64.Build.0 = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x86.ActiveCfg = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x86.Build.0 = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
+ {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {39A7E333-AFC1-4BA8-9EBC-9298791FDC78}
+ EndGlobalSection
+EndGlobal
diff --git a/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj b/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj
index 1f57e152..45a19e72 100644
--- a/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj
+++ b/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj
@@ -1,10 +1,10 @@
-
+
LibreMetaverse.Rendering.Meshmerizer
LibreMetaverse.Rendering.Meshmerizer
Meshmerizer library for rendering mesh assets in LibreMetaverse
LibreMetaverse.Rendering.Meshmerizer
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
Library
true
true
diff --git a/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj b/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj
index f27a8f68..4ffdebd1 100644
--- a/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj
+++ b/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj
@@ -1,9 +1,9 @@
-
+
LibreMetaverse.Rendering.Simple
Simple library for rendering mesh assets in LibreMetaverse
LibreMetaverse.Rendering.Simple
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
Library
LibreMetaverse.Rendering.Simple
true
diff --git a/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj b/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj
index 03797b90..2ea118af 100644
--- a/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj
+++ b/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj
@@ -1,9 +1,9 @@
-
+
LibreMetaverse.StructuredData
LibreMetaverse structured data library
LibreMetaverse.StructuredData
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
Library
LibreMetaverse.StructuredData
true
diff --git a/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj b/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj
index a8967bcc..0d88b65a 100644
--- a/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj
+++ b/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj
@@ -1,7 +1,8 @@
-
+
LibreMetaverse.Tests
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
+
Library
LibreMetaverse.Tests
true
diff --git a/LibreMetaverse.Types/LibreMetaverse.Types.csproj b/LibreMetaverse.Types/LibreMetaverse.Types.csproj
index eae1dd21..98fe6a8f 100644
--- a/LibreMetaverse.Types/LibreMetaverse.Types.csproj
+++ b/LibreMetaverse.Types/LibreMetaverse.Types.csproj
@@ -1,9 +1,9 @@
-
+
LibreMetaverse.Types
LibreMetaverse.Types
LibreMetaverse type library
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
Library
LibreMetaverse
true
diff --git a/LibreMetaverse.Types/Utils.cs b/LibreMetaverse.Types/Utils.cs
index 1f54b75a..d4e7431c 100644
--- a/LibreMetaverse.Types/Utils.cs
+++ b/LibreMetaverse.Types/Utils.cs
@@ -212,13 +212,19 @@ namespace OpenMetaverse
double sSquared = s * s;
if (amount == 0f)
+ {
result = value1;
+ }
else if (amount == 1f)
+ {
result = value2;
+ }
else
+ {
result = (2d * v1 - 2d * v2 + t2 + t1) * sCubed +
(3d * v2 - 3d * v1 - 2d * t1 - t2) * sSquared +
t1 * s + v1;
+ }
return (float)result;
}
@@ -431,7 +437,7 @@ namespace OpenMetaverse
{
return Platform.Windows;
}
- return System.IO.File.Exists(OSX_CHECK_FILE)
+ return System.IO.File.Exists(OSX_CHECK_FILE)
? Platform.OSX : Platform.Linux;
}
diff --git a/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj b/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj
index e7c6489f..b5137570 100644
--- a/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj
+++ b/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj
@@ -1,9 +1,9 @@
-
+
LibreMetaverse.Utilities
LibreMetaverse.Utilities
LibreMetaverse utility library
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
Library
LibreMetaverse.Utilities
true
diff --git a/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj b/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj
index 5f978daa..f263c4c6 100644
--- a/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj
+++ b/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj
@@ -1,4 +1,4 @@
-
+
LibreMetaverse.Voice
LibreMetaverse.Voice
@@ -9,7 +9,7 @@
true
snupkg
0419,1574,1591
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
x64;x86;AnyCPU
..\bin\
diff --git a/LibreMetaverse/Capabilities/EventQueueClient.cs b/LibreMetaverse/Capabilities/EventQueueClient.cs
index 596db752..fcd58092 100644
--- a/LibreMetaverse/Capabilities/EventQueueClient.cs
+++ b/LibreMetaverse/Capabilities/EventQueueClient.cs
@@ -25,6 +25,7 @@
*/
using System;
+using System.Collections;
using System.Net;
using System.Threading;
using OpenMetaverse.StructuredData;
@@ -132,7 +133,7 @@ namespace OpenMetaverse.Http
if (error is WebException webException)
{
- // Filter out some of the status requests to skip handling
+ // Filter out some of the status requests to skip handling
switch (webException.Status)
{
case WebExceptionStatus.RequestCanceled:
@@ -154,12 +155,52 @@ namespace OpenMetaverse.Http
_Dead = true;
break;
case (HttpStatusCode)499: // weird error returned occasionally, ignore for now
+ // I believe this is the timeout error invented by LL for LSL HTTP-out requests (gwyneth 20220413)
+ Logger.Log($"Possible HTTP-out timeout error from {_Address}, no need to continue", Helpers.LogLevel.Debug);
+
+ _Running = false;
+ _Dead = true;
+ break;
+ case HttpStatusCode.InternalServerError:
+ // As per LL's instructions, we ought to consider this a
+ // 'request to close client' (gwyneth 20220413)
+ Logger.Log($"Grid sent a {code} at {_Address}, closing connection", Helpers.LogLevel.Debug);
+
+ // ... but do we happen to have an InnerException? Log it!
+ if (error.InnerException != null)
+ {
+ // unravel the whole inner error message, so we finally figure out what it is!
+ // (gwyneth 20220414)
+ Logger.Log($"Unrecognized internal caps exception from {_Address}: '{error.InnerException.Message}'", Helpers.LogLevel.Warning);
+ Logger.Log("\nMessage ---\n{error.Message}", Helpers.LogLevel.Warning);
+ Logger.Log("\nHelpLink ---\n{ex.HelpLink}", Helpers.LogLevel.Warning);
+ Logger.Log("\nSource ---\n{error.Source}", Helpers.LogLevel.Warning);
+ Logger.Log("\nStackTrace ---\n{error.StackTrace}", Helpers.LogLevel.Warning);
+ Logger.Log("\nTargetSite ---\n{error.TargetSite}", Helpers.LogLevel.Warning);
+ if (error.Data.Count > 0)
+ {
+ Logger.Log(" Extra details:", Helpers.LogLevel.Warning);
+ foreach (DictionaryEntry de in error.Data)
+ Logger.Log(String.Format(" Key: {0,-20} Value: '{1}'",
+ de.Key, de.Value),
+ Helpers.LogLevel.Warning);
+ }
+ // but we'll nevertheless close this connection (gwyneth 20220414)
+ }
+
+ _Running = false;
+ _Dead = true;
+ break;
case HttpStatusCode.BadGateway:
// This is not good (server) protocol design, but it's normal.
// The EventQueue server is a proxy that connects to a Squid
// cache which will time out periodically. The EventQueue server
// interprets this as a generic error and returns a 502 to us
// that we ignore
+ //
+ // Note: if this condition persists, it _might_ be the grid trying to request
+ // that the client closes the connection, as per LL's specs (gwyneth 20220414)
+ Logger.Log($"Grid sent a Bad Gateway Error at {_Address}; probably a time-out from the grid's EventQueue server (normal) -- ignoring and continuing", Helpers.LogLevel.Debug);
break;
default:
++_errorCount;
@@ -167,14 +208,26 @@ namespace OpenMetaverse.Http
// Try to log a meaningful error message
if (code != HttpStatusCode.OK)
{
- Logger.Log($"Unrecognized caps connection problem from {_Address}: {code}",
+ Logger.Log($"Unrecognized caps connection problem from {_Address}: {code}",
Helpers.LogLevel.Warning);
}
else if (error.InnerException != null)
{
- Logger.Log(
- $"Unrecognized internal caps exception from {_Address}: {error.InnerException.Message}",
- Helpers.LogLevel.Warning);
+ // see comment above (gwyneth 20220414)
+ Logger.Log($"Unrecognized internal caps exception from {_Address}: '{error.InnerException.Message}'", Helpers.LogLevel.Warning);
+ Logger.Log("\nMessage ---\n{error.Message}", Helpers.LogLevel.Warning);
+ Logger.Log("\nHelpLink ---\n{ex.HelpLink}", Helpers.LogLevel.Warning);
+ Logger.Log("\nSource ---\n{error.Source}", Helpers.LogLevel.Warning);
+ Logger.Log("\nStackTrace ---\n{error.StackTrace}", Helpers.LogLevel.Warning);
+ Logger.Log("\nTargetSite ---\n{error.TargetSite}", Helpers.LogLevel.Warning);
+ if (error.Data.Count > 0)
+ {
+ Logger.Log(" Extra details:", Helpers.LogLevel.Warning);
+ foreach (DictionaryEntry de in error.Data)
+ Logger.Log(String.Format(" Key: {0,-20} Value: {1}",
+ "'" + de.Key + "'", de.Value),
+ Helpers.LogLevel.Warning);
+ }
}
else
{
@@ -182,7 +235,7 @@ namespace OpenMetaverse.Http
Helpers.LogLevel.Warning);
}
break;
- }
+ } // end switch
#endregion Error handling
}
diff --git a/LibreMetaverse/InternalDictionary.cs b/LibreMetaverse/InternalDictionary.cs
index a9c1cd40..144a11f4 100644
--- a/LibreMetaverse/InternalDictionary.cs
+++ b/LibreMetaverse/InternalDictionary.cs
@@ -31,10 +31,10 @@ namespace OpenMetaverse
{
///
/// The InternalDictionary class is used through the library for storing key/value pairs.
- /// It is intended to be a replacement for the generic Dictionary class and should
+ /// It is intended to be a replacement for the generic Dictionary class and should
/// be used in its place. It contains several methods for allowing access to the data from
/// outside the library that are read only and thread safe.
- ///
+ ///
///
/// Key
/// Value
@@ -57,7 +57,7 @@ namespace OpenMetaverse
public int Count { get { lock (Dictionary) return Dictionary.Count; } }
///
- /// Initializes a new instance of the Class
+ /// Initializes a new instance of the Class
/// with the specified key/value, has the default initial capacity.
///
///
@@ -72,8 +72,8 @@ namespace OpenMetaverse
}
///
- /// Initializes a new instance of the Class
- /// with the specified key/value, has its initial valies copied from the specified
+ /// Initializes a new instance of the Class
+ /// with the specified key/value, has its initial valies copied from the specified
///
///
///
@@ -82,12 +82,12 @@ namespace OpenMetaverse
///
/// // initialize a new InternalDictionary named testAvName with a UUID as the key and an string as the value.
/// // populates with copied values from example KeyNameCache Dictionary.
- ///
+ ///
/// // create source dictionary
/// Dictionary<UUID, string> KeyNameCache = new Dictionary<UUID, string>();
/// KeyNameCache.Add("8300f94a-7970-7810-cf2c-fc9aa6cdda24", "Jack Avatar");
/// KeyNameCache.Add("27ba1e40-13f7-0708-3e98-5819d780bd62", "Jill Avatar");
- ///
+ ///
/// // Initialize new dictionary.
/// public InternalDictionary<UUID, string> testAvName = new InternalDictionary<UUID, string>(KeyNameCache);
///
@@ -98,13 +98,13 @@ namespace OpenMetaverse
}
///
- /// Initializes a new instance of the Class
+ /// Initializes a new instance of the Class
/// with the specified key/value, With its initial capacity specified.
///
/// Initial size of dictionary
///
///
- /// // initialize a new InternalDictionary named testDict with a string as the key and an int as the value,
+ /// // initialize a new InternalDictionary named testDict with a string as the key and an int as the value,
/// // initially allocated room for 10 entries.
/// public InternalDictionary<string, int> testDict = new InternalDictionary<string, int>(10);
///
@@ -115,7 +115,7 @@ namespace OpenMetaverse
}
///
- /// Try to get entry from with specified key
+ /// Try to get entry from with specified key
///
/// Key to use for lookup
/// Value returned
@@ -176,7 +176,7 @@ namespace OpenMetaverse
/// Vector3 pos = prim.Position;
/// return ((prim.ParentID == 0) && (pos != Vector3.Zero) && (Vector3.Distance(pos, location) < radius));
/// }
- /// );
+ /// );
///
///
public List FindAll(Predicate match)
@@ -203,7 +203,7 @@ namespace OpenMetaverse
/// delegate(UUID id) {
/// return myOtherDict.ContainsKey(id);
/// }
- /// );
+ /// );
///
///
public List FindAll(Predicate match)
@@ -230,7 +230,7 @@ namespace OpenMetaverse
/// {
/// if (prim.Text != null)
/// {
- /// Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'",
+ /// Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'",
/// prim.PropertiesFamily.Name, prim.ID, prim.Text);
/// }
/// });
@@ -292,7 +292,7 @@ namespace OpenMetaverse
}
///
- /// Adds the specified key to the dictionary, dictionary locking is not performed,
+ /// Adds the specified key to the dictionary, dictionary locking is not performed,
///
///
/// The key
@@ -300,7 +300,7 @@ namespace OpenMetaverse
internal void Add(TKey key, TValue value)
{
lock (Dictionary)
- Dictionary.Add(key, value);
+ Dictionary[key] = value;
}
///
diff --git a/LibreMetaverse/LibreMetaverse.csproj b/LibreMetaverse/LibreMetaverse.csproj
index 8422941d..ef801ed4 100644
--- a/LibreMetaverse/LibreMetaverse.csproj
+++ b/LibreMetaverse/LibreMetaverse.csproj
@@ -11,7 +11,7 @@
true
snupkg
0419,1574,1591
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
x64;x86;AnyCPU
..\bin\
diff --git a/LibreMetaverse/ObservableDictionary.cs b/LibreMetaverse/ObservableDictionary.cs
index 80061b9b..ec4e2c8f 100644
--- a/LibreMetaverse/ObservableDictionary.cs
+++ b/LibreMetaverse/ObservableDictionary.cs
@@ -32,26 +32,26 @@ namespace OpenMetaverse
{
///
- ///
+ ///
///
public enum DictionaryEventAction
{
///
- ///
+ ///
///
Add,
///
- ///
+ ///
///
Remove,
///
- ///
+ ///
///
Change
}
///
- ///
+ ///
///
///
///
@@ -80,7 +80,7 @@ namespace OpenMetaverse
{
if (Delegates.ContainsKey(action))
{
- Delegates[action].Add(callback);
+ Delegates[action].Add(callback);
}
else
{
@@ -105,13 +105,13 @@ namespace OpenMetaverse
}
///
- ///
+ ///
///
///
///
private void FireChangeEvent(DictionaryEventAction action, DictionaryEntry entry)
{
-
+
if(Delegates.ContainsKey(action))
{
foreach(DictionaryChangeCallback handler in Delegates[action])
@@ -133,7 +133,7 @@ namespace OpenMetaverse
public int Count { get { return Dictionary.Count; } }
///
- /// Initializes a new instance of the Class
+ /// Initializes a new instance of the Class
/// with the specified key/value, has the default initial capacity.
///
///
@@ -149,13 +149,13 @@ namespace OpenMetaverse
}
///
- /// Initializes a new instance of the Class
+ /// Initializes a new instance of the Class
/// with the specified key/value, With its initial capacity specified.
///
/// Initial size of dictionary
///
///
- /// // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value,
+ /// // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value,
/// // initially allocated room for 10 entries.
/// public ObservableDictionary<string, int> testDict = new ObservableDictionary<string, int>(10);
///
@@ -167,7 +167,7 @@ namespace OpenMetaverse
}
///
- /// Try to get entry from the with specified key
+ /// Try to get entry from the with specified key
///
/// Key to use for lookup
/// Value returned
@@ -222,13 +222,13 @@ namespace OpenMetaverse
/// Vector3 pos = prim.Position;
/// return ((prim.ParentID == 0) && (pos != Vector3.Zero) && (Vector3.Distance(pos, location) < radius));
/// }
- /// );
+ /// );
///
///
public List FindAll(Predicate match)
{
List found = new List();
-
+
foreach (KeyValuePair kvp in Dictionary)
{
if (match(kvp.Value))
@@ -247,19 +247,19 @@ namespace OpenMetaverse
/// delegate(UUID id) {
/// return myOtherDict.ContainsKey(id);
/// }
- /// );
+ /// );
///
///
public List FindAll(Predicate match)
{
List found = new List();
-
+
foreach (KeyValuePair kvp in Dictionary)
{
if (match(kvp.Key))
found.Add(kvp.Key);
}
-
+
return found;
}
@@ -268,7 +268,7 @@ namespace OpenMetaverse
/// if found, otherwise
public bool ContainsKey(TKey key)
{
- return Dictionary.ContainsKey(key);
+ return Dictionary.ContainsKey(key);
}
/// Check if Value exists in Dictionary
@@ -276,18 +276,18 @@ namespace OpenMetaverse
/// if found, otherwise
public bool ContainsValue(TValue value)
{
- return Dictionary.ContainsValue(value);
+ return Dictionary.ContainsValue(value);
}
///
- /// Adds the specified key to the dictionary, dictionary locking is not performed,
+ /// Adds the specified key to the dictionary, dictionary locking is not performed,
///
///
/// The key
/// The value
public void Add(TKey key, TValue value)
{
- Dictionary.Add(key, value);
+ Dictionary[key] = value;
FireChangeEvent(DictionaryEventAction.Add, new DictionaryEntry(key, value));
}
diff --git a/PrimMesher/LibreMetaverse.PrimMesher.csproj b/PrimMesher/LibreMetaverse.PrimMesher.csproj
index 3e42971f..20e7d806 100644
--- a/PrimMesher/LibreMetaverse.PrimMesher.csproj
+++ b/PrimMesher/LibreMetaverse.PrimMesher.csproj
@@ -1,10 +1,10 @@
-
+
LibreMetaverse.PrimMesher
LibreMetaverse.PrimMesher
LibreMetaverse.PrimMesher
Library
- netstandard2.0;netstandard2.1;net5.0
+ netstandard2.0;netstandard2.1;net5.0;net6.0
Dhalia Trimble, Sjofn LLC, OpenMetaverse Developers
true
true
diff --git a/Programs/Baker/Baker.csproj b/Programs/Baker/Baker.csproj
index c8c40e08..452e95c1 100644
--- a/Programs/Baker/Baker.csproj
+++ b/Programs/Baker/Baker.csproj
@@ -1,12 +1,12 @@
-
+
- net471;net48;netcoreapp3.1;net5.0-windows
+ net471;net48;netcoreapp3.1;net5.0-windows;net6.0-windows
- netcoreapp3.1
+ net471;netcoreapp3.1;net5.0-linux;net6.0-linux
- netcoreapp3.1
+ net471;netcoreapp3.1;net5.0-osx;net6.0-osx
Baker
diff --git a/Programs/GridProxy/GridProxy.csproj b/Programs/GridProxy/GridProxy.csproj
index de9112d5..2e0e7e7c 100644
--- a/Programs/GridProxy/GridProxy.csproj
+++ b/Programs/GridProxy/GridProxy.csproj
@@ -1,11 +1,11 @@
-
+
GridProxy
GridProxy
Library
GridProxy
true
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
x64;x86
..\..\bin\
false
diff --git a/Programs/VoiceTest/VoiceTest.csproj b/Programs/VoiceTest/VoiceTest.csproj
index 644935e1..40b40a4c 100644
--- a/Programs/VoiceTest/VoiceTest.csproj
+++ b/Programs/VoiceTest/VoiceTest.csproj
@@ -1,10 +1,10 @@
-
+
VoiceTest
Exe
true
..\..\bin\
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
x64;x86;AnyCPU
false
diff --git a/Programs/examples/GridAccountant/GridAccountant.csproj b/Programs/examples/GridAccountant/GridAccountant.csproj
index 1307a2a3..f43f18c3 100644
--- a/Programs/examples/GridAccountant/GridAccountant.csproj
+++ b/Programs/examples/GridAccountant/GridAccountant.csproj
@@ -1,12 +1,12 @@
-
+
- net471;net48;netcoreapp3.1;net5.0-windows
+ net471;netcoreapp3.1;net5.0-windows;net6.0-windows
- netcoreapp3.1
+ net471;netcoreapp3.1;net5.0-linux;net6.0-linux
- netcoreapp3.1
+ net471;netcoreapp3.1;net5.0-osx;net6.0-osx
GridAccountant
diff --git a/Programs/examples/IRCGateway/IRCGateway.csproj b/Programs/examples/IRCGateway/IRCGateway.csproj
index c1a4cd43..c1c22617 100644
--- a/Programs/examples/IRCGateway/IRCGateway.csproj
+++ b/Programs/examples/IRCGateway/IRCGateway.csproj
@@ -1,11 +1,11 @@
-
+
IrcGateway
IrcGateway
true
Exe
..\..\..\bin\
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
x64;x86
false
diff --git a/Programs/examples/PacketDump/PacketDump.csproj b/Programs/examples/PacketDump/PacketDump.csproj
index 379bc26e..309428ee 100644
--- a/Programs/examples/PacketDump/PacketDump.csproj
+++ b/Programs/examples/PacketDump/PacketDump.csproj
@@ -1,11 +1,11 @@
-
+
PacketDump
PacketDump
Exe
true
..\..\..\bin\
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
AnyCPU
true
snupkg
diff --git a/Programs/examples/TestClient/TestClient.csproj b/Programs/examples/TestClient/TestClient.csproj
index 0df1f59f..3819a590 100644
--- a/Programs/examples/TestClient/TestClient.csproj
+++ b/Programs/examples/TestClient/TestClient.csproj
@@ -4,7 +4,7 @@
Exe
true
..\..\..\bin\
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
x64;x86
true
snupkg
diff --git a/Programs/mapgenerator/mapgenerator.csproj b/Programs/mapgenerator/mapgenerator.csproj
index b00377f3..06456fbe 100644
--- a/Programs/mapgenerator/mapgenerator.csproj
+++ b/Programs/mapgenerator/mapgenerator.csproj
@@ -1,11 +1,11 @@
-
+
MapGenerator
Exe
true
..\..\bin\
LibreMetaverse.MapGenerator
- netcoreapp3.1;net5.0
+ netcoreapp3.1;net5.0;net6.0
AnyCPU
true
snupkg
diff --git a/README.md b/README.md
index 3921957c..74b96e0b 100644
--- a/README.md
+++ b/README.md
@@ -4,21 +4,52 @@
| | | '_ \ '_/ -_) |\/| | _| | |/ _ \ V /| _|| /\__ \ _|
|_|_|_.__/_| \___|_| |_|___| |_/_/ \_\_/ |___|_|_\|___/___|
```
-LibreMetaverse
-===============================================================================
+# LibreMetaverse
+
LibreMetaverse is a fork of libOpenMetaverse which in turn was a fork of
libSecondLife, a library for developing Second Life-compatible virtual world
-clients. LibreMetavrse returns the focus to up-to-date Second Life and OpenSim
+clients. LibreMetaverse returns the focus to up-to-date Second Life and OpenSim
compatibility with an eye to performance, multi-threading, and memory management.
The canonical source for LibreMetaverse can be found at:
https://github.com/cinderblocks/libremetaverse
+## Simple installation procedure
+
+### Linux/macOS
+
+- Make sure you have at least `dotnet` installed, with a valid net5.0/net6.0 SDK _and_ runtime available!
+
+- This update includes a solution file to skip the GUI applications (which will run only under Windows anyway). Use `LibreMetaverse.ReleaseNoGUI.sln` instead
+
+- From the root, run `dotnet restore LibreMetaverse.ReleaseNoGUI.sln`. You should get some errors regarding missing Windows libraries; that's ok, you can ignore those, they're to be expected since Linux/macOS do _not_ include such libraries. Some test applications are Windows-only.
+If all goes well, you should now have all dependent packages properly installed.
+
+- From the root, run `dotnet msbuild LibreMetaverse.ReleaseNoGUI.sln`, and enjoy the superfast Roslyn compiler at work 😄 It should finish after a few minutes, depending on the speed of your machine.
+
+- Your binaries will be under `../bin/net5.0` or `../bin/net6.0` (there might be a few more directories under `../bin`), depending on what runtimes you have installed on your system. Make sure you `cd` to the correct directory depending on the runtime you have, and then search for all your binaries there: they should be normal-looking executable files (with the `x` attribute set) and having the name of the appropriate test application (e.g. `TestClient` for the interactive testing tool).
+
+- Unlike OpenSimulator, you don't need to launch the binaries with Mono, they're _directly_ executable; the `dotnet` chain already embeds the small runtime that allows .NET apps to run natively on whatever operating system you've got.
+
+### Windows
+
+For Windows, you should use the default `LibreMetaverse.sln`, just as before (untested). For command-line compilation under Windows, if you wish to skip the GUI applications, the instructions are the same as above. Use the default `LibreMetaverse.sln` if you wish to install those as well.
+
+### GUI support under Linux/macOS
+
+Currently unavailable, although there are some reports that this might be possible using a Windows emulator, such as Mono itself, or possibly Wine. This will require some project configuration changes, and was _not_ tested!
+
+## Note: end-of-life support for .NET 5.0
+
+Microsoft is [dropping support for .NET 5.0](https://devblogs.microsoft.com/dotnet/dotnet-5-end-of-support-update/) as of May 2022, so you should consider using .NET 6.0 instead (or, if you're wild, you can test the prerelease of .NET 7.0). The code runs flawlessly on .NET 6.0 as well (Windows GUI version untested)
+
[](https://www.nuget.org/packages/LibreMetaverse/)
[](https://www.nuget.org/packages/LibreMetaverse/)
[](https://ci.appveyor.com/project/cinderblocks57647/libremetaverse-ksbcr)
[](https://ci.appveyor.com/project/cinderblocks57647/libremetaverse-ksbcr)
[](https://www.codacy.com/gh/cinderblocks/libremetaverse/dashboard?utm_source=github.com&utm_medium=referral&utm_content=cinderblocks/libremetaverse&utm_campaign=Badge_Grade)
+[](https://github.com/cinderblocks/libremetaverse/actions/workflows/dotnet.yml)
+[](https://github.com/cinderblocks/libremetaverse/actions/workflows/codeql-analysis.yml)
[](https://github.com/cinderblocks/libremetaverse/blob/master/LICENSE.txt)
[](https://www.github.com/cinderblocks/libremetaverse/)
[](https://keybase.io/cinder) [](https://keybase.io/cinder)
diff --git a/global.json b/global.json
index ef236746..1b8195c4 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "5.0.101",
- "rollForward": "latestMajor"
+ "version": "6.0.100",
+ "rollForward": "latestMinor"
}
-}
\ No newline at end of file
+}