A Data/NosSmooth.Data.Abstractions/IInfoService.cs => Data/NosSmooth.Data.Abstractions/IInfoService.cs +51 -0
@@ 0,0 1,51 @@
+//
+// IInfoService.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using NosSmooth.Data.Abstractions.Infos;
+using Remora.Results;
+
+namespace NosSmooth.Data.Abstractions;
+
+/// <summary>
+/// Service for retrieving information about NosTale objects.
+/// </summary>
+public interface IInfoService
+{
+ /// <summary>
+ /// Gets the information about an item.
+ /// </summary>
+ /// <param name="vnum">The vnum identifier of the item.</param>
+ /// <returns>An item info or an error.</returns>
+ public Result<IItemInfo> GetItemInfo(long vnum);
+
+ /// <summary>
+ /// Gets the information about a map.
+ /// </summary>
+ /// <param name="vnum">The vnum identifier of the map.</param>
+ /// <returns>A map info or an error.</returns>
+ public Result<IMapInfo> GetMapInfo(long vnum);
+
+ /// <summary>
+ /// Gets the information about a monster.
+ /// </summary>
+ /// <param name="vnum">The vnum identifier of the monster.</param>
+ /// <returns>A monster or an error.</returns>
+ public Result<IMonsterInfo> GetMonsterInfo(long vnum);
+
+ /// <summary>
+ /// Gets the information about a skill.
+ /// </summary>
+ /// <param name="vnum">The vnum identifier of the skill.</param>
+ /// <returns>A map or an error.</returns>
+ public Result<ISkillInfo> GetSkillInfo(long vnum);
+
+ /// <summary>
+ /// Gets the information about a card.
+ /// </summary>
+ /// <param name="vnum">The vnum identifier of the card.</param>
+ /// <returns>A card or an error.</returns>
+ public Result<ICardInfo> GetCardInfo(long vnum);
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Infos/ICardInfo.cs => Data/NosSmooth.Data.Abstractions/Infos/ICardInfo.cs +14 -0
@@ 0,0 1,14 @@
+//
+// ICardInfo.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Infos;
+
+/// <summary>
+/// The NosTale card information.
+/// </summary>
+public interface ICardInfo : IVNumInfo
+{
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Infos/IItemInfo.cs => Data/NosSmooth.Data.Abstractions/Infos/IItemInfo.cs +14 -0
@@ 0,0 1,14 @@
+//
+// IItemInfo.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Infos;
+
+/// <summary>
+/// The NosTale item information.
+/// </summary>
+public interface IItemInfo : IVNumInfo
+{
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Infos/IMapInfo.cs => Data/NosSmooth.Data.Abstractions/Infos/IMapInfo.cs +39 -0
@@ 0,0 1,39 @@
+//
+// IMapInfo.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Infos;
+
+/// <summary>
+/// The NosTale map information.
+/// </summary>
+public interface IMapInfo : IVNumInfo
+{
+ /// <summary>
+ /// Gets the width of the grid.
+ /// </summary>
+ public short Width { get; }
+
+ /// <summary>
+ /// Gets the height of the grid.
+ /// </summary>
+ public short Height { get; }
+
+ /// <summary>
+ /// Gets grid data for the given position.
+ /// </summary>
+ /// <param name="x">The x coordinate.</param>
+ /// <param name="y">The y coordinate.</param>
+ /// <returns>The grid value.</returns>
+ public byte GetData(short x, short y);
+
+ /// <summary>
+ /// Gets whether the given position is walkable.
+ /// </summary>
+ /// <param name="x">The x coordinate.</param>
+ /// <param name="y">The y coordinate.</param>
+ /// <returns>Whether the position is walkable.</returns>
+ public bool IsWalkable(short x, short y);
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Infos/IMonsterInfo.cs => Data/NosSmooth.Data.Abstractions/Infos/IMonsterInfo.cs +14 -0
@@ 0,0 1,14 @@
+//
+// IMonsterInfo.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Infos;
+
+/// <summary>
+/// The NosTale monster information.
+/// </summary>
+public interface IMonsterInfo : IVNumInfo
+{
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Infos/ISkillInfo.cs => Data/NosSmooth.Data.Abstractions/Infos/ISkillInfo.cs +14 -0
@@ 0,0 1,14 @@
+//
+// ISkillInfo.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Infos;
+
+/// <summary>
+/// The NosTale skill information.
+/// </summary>
+public interface ISkillInfo
+{
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Infos/IVNumInfo.cs => Data/NosSmooth.Data.Abstractions/Infos/IVNumInfo.cs +18 -0
@@ 0,0 1,18 @@
+//
+// IVNumInfo.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Infos;
+
+/// <summary>
+/// A NosTale info with a vnum key.
+/// </summary>
+public interface IVNumInfo
+{
+ /// <summary>
+ /// Gets the VNum of the info entry.
+ /// </summary>
+ public long VNum { get; }
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Language/ILanguageService.cs => Data/NosSmooth.Data.Abstractions/Language/ILanguageService.cs +29 -0
@@ 0,0 1,29 @@
+//
+// ILanguageService.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Remora.Results;
+
+namespace NosSmooth.Data.Abstractions.Language;
+
+/// <summary>
+/// Service for translating NosTale strings.
+/// </summary>
+public interface ILanguageService
+{
+ /// <summary>
+ /// Gets or sets the current language.
+ /// </summary>
+ public Language CurrentLanguage { get; set; }
+
+ /// <summary>
+ /// Gets the translation of the given key.
+ /// </summary>
+ /// <param name="root">The root type of the key.</param>
+ /// <param name="key">The key to translate.</param>
+ /// <param name="language">The language, <see cref="CurrentLanguage"/> will be used if null.</param>
+ /// <returns>The translated string or an error.</returns>
+ public Result<string> GetTranslation(TranslationRoot root, LanguageKey key, Language? language = default);
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Language/Language.cs => Data/NosSmooth.Data.Abstractions/Language/Language.cs +58 -0
@@ 0,0 1,58 @@
+//
+// Language.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Language;
+
+/// <summary>
+/// Languages supported by NosTale.
+/// </summary>
+public enum Language
+{
+ /// <summary>
+ /// English language.
+ /// </summary>
+ En,
+
+ /// <summary>
+ /// German language.
+ /// </summary>
+ De,
+
+ /// <summary>
+ /// French language.
+ /// </summary>
+ Fr,
+
+ /// <summary>
+ /// Italian language.
+ /// </summary>
+ It,
+
+ /// <summary>
+ /// Polish language.
+ /// </summary>
+ Pl,
+
+ /// <summary>
+ /// Spanish language.
+ /// </summary>
+ Es,
+
+ /// <summary>
+ /// Russian language.
+ /// </summary>
+ Ru,
+
+ /// <summary>
+ /// Czech language.
+ /// </summary>
+ Cs,
+
+ /// <summary>
+ /// Turkish language.
+ /// </summary>
+ Tr
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Language/LanguageKey.cs => Data/NosSmooth.Data.Abstractions/Language/LanguageKey.cs +36 -0
@@ 0,0 1,36 @@
+//
+// LanguageKey.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Language;
+
+/// <summary>
+/// Key for language translation.
+/// </summary>
+public struct LanguageKey
+{
+ /// <summary>
+ /// Initializes a new instance of the <see cref="LanguageKey"/> struct.
+ /// </summary>
+ /// <param name="key">The key num.</param>
+ public LanguageKey(long key)
+ : this($"zts{key}e")
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="LanguageKey"/> struct.
+ /// </summary>
+ /// <param name="key">The key.</param>
+ public LanguageKey(string key)
+ {
+ Key = key;
+ }
+
+ /// <summary>
+ /// Gets the key.
+ /// </summary>
+ public string Key { get; }
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Language/LanguageServiceOptions.cs => Data/NosSmooth.Data.Abstractions/Language/LanguageServiceOptions.cs +18 -0
@@ 0,0 1,18 @@
+//
+// LanguageServiceOptions.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Language;
+
+/// <summary>
+/// Options for <see cref="ILanguageService"/>.
+/// </summary>
+public class LanguageServiceOptions
+{
+ /// <summary>
+ /// Get or sets the default language.
+ /// </summary>
+ public Language Language { get; set; } = Language.En;
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/Language/TranslationRoot.cs => Data/NosSmooth.Data.Abstractions/Language/TranslationRoot.cs +38 -0
@@ 0,0 1,38 @@
+//
+// TranslationRoot.cs
+//
+// Copyright (c) František Boháček. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace NosSmooth.Data.Abstractions.Language;
+
+/// <summary>
+/// Root type of a translation.
+/// </summary>
+public enum TranslationRoot
+{
+ /// <summary>
+ /// The translation is for a card.
+ /// </summary>
+ Card,
+
+ /// <summary>
+ /// The translation is for an item.
+ /// </summary>
+ Item,
+
+ /// <summary>
+ /// The translation is for a monster.
+ /// </summary>
+ Monster,
+
+ /// <summary>
+ /// The translation for a skill.
+ /// </summary>
+ Skill,
+
+ /// <summary>
+ /// The translation for a map.
+ /// </summary>
+ Map
+}<
\ No newline at end of file
A Data/NosSmooth.Data.Abstractions/NosSmooth.Data.Abstractions.csproj => Data/NosSmooth.Data.Abstractions/NosSmooth.Data.Abstractions.csproj +13 -0
@@ 0,0 1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net6.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Remora.Results" Version="7.1.0" />
+ </ItemGroup>
+
+</Project>
A Data/NosSmooth.Data.CLI/NosSmooth.Data.CLI.csproj => Data/NosSmooth.Data.CLI/NosSmooth.Data.CLI.csproj +10 -0
@@ 0,0 1,10 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net6.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ <OutputType>Exe</OutputType>
+ </PropertyGroup>
+
+</Project>
A Data/NosSmooth.Data.Database/NosSmooth.Data.Database.csproj => Data/NosSmooth.Data.Database/NosSmooth.Data.Database.csproj +9 -0
@@ 0,0 1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net6.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+</Project>
A Data/NosSmooth.Data.NOSFiles/NosSmooth.Data.NOSFiles.csproj => Data/NosSmooth.Data.NOSFiles/NosSmooth.Data.NOSFiles.csproj +14 -0
@@ 0,0 1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net6.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Folder Include="Dat" />
+ <Folder Include="Nos" />
+ </ItemGroup>
+
+</Project>
M NosSmooth.sln => NosSmooth.sln +77 -0
@@ 28,6 28,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.Packets", "Packet
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.PacketSerializer.Abstractions", "Packets\NosSmooth.PacketSerializer.Abstractions\NosSmooth.PacketSerializer.Abstractions.csproj", "{CF03BCEA-EB5B-427F-8576-7DA7EB869BDC}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.ChatCommands", "Local\NosSmooth.ChatCommands\NosSmooth.ChatCommands.csproj", "{7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Data", "Data", "{1C785A74-19B9-42D2-93B1-F4EC9D6A8CFD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.Data.Abstractions", "Data\NosSmooth.Data.Abstractions\NosSmooth.Data.Abstractions.csproj", "{7901F7FF-FB76-4A4C-8DCA-F74543624130}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.Data.Database", "Data\NosSmooth.Data.Database\NosSmooth.Data.Database.csproj", "{C4114AC1-72E8-46DA-9B4B-A4C942004492}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.Data.NOSFiles", "Data\NosSmooth.Data.NOSFiles\NosSmooth.Data.NOSFiles.csproj", "{4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosSmooth.Data.CLI", "Data\NosSmooth.Data.CLI\NosSmooth.Data.CLI.csproj", "{F1884ADF-6412-4E9B-81FD-357DC5761ADF}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ 122,6 134,66 @@ Global
{CF03BCEA-EB5B-427F-8576-7DA7EB869BDC}.Release|x64.Build.0 = Release|Any CPU
{CF03BCEA-EB5B-427F-8576-7DA7EB869BDC}.Release|x86.ActiveCfg = Release|Any CPU
{CF03BCEA-EB5B-427F-8576-7DA7EB869BDC}.Release|x86.Build.0 = Release|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Debug|x64.Build.0 = Debug|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Debug|x86.Build.0 = Debug|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Release|x64.ActiveCfg = Release|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Release|x64.Build.0 = Release|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Release|x86.ActiveCfg = Release|Any CPU
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E}.Release|x86.Build.0 = Release|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Debug|x64.Build.0 = Debug|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Debug|x86.Build.0 = Debug|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Release|x64.ActiveCfg = Release|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Release|x64.Build.0 = Release|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Release|x86.ActiveCfg = Release|Any CPU
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130}.Release|x86.Build.0 = Release|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Debug|x64.Build.0 = Debug|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Debug|x86.Build.0 = Debug|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Release|x64.ActiveCfg = Release|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Release|x64.Build.0 = Release|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Release|x86.ActiveCfg = Release|Any CPU
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492}.Release|x86.Build.0 = Release|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Debug|x64.Build.0 = Debug|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Debug|x86.Build.0 = Debug|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Release|x64.ActiveCfg = Release|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Release|x64.Build.0 = Release|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Release|x86.ActiveCfg = Release|Any CPU
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99}.Release|x86.Build.0 = Release|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Debug|x64.Build.0 = Debug|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Debug|x86.Build.0 = Debug|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Release|x64.ActiveCfg = Release|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Release|x64.Build.0 = Release|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Release|x86.ActiveCfg = Release|Any CPU
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ 134,6 206,11 @@ Global
{C4DAFD83-C6DC-4597-AA1F-BA2F3ABB612C} = {54A49AC2-55B3-4156-8023-41C56719EBB5}
{86B4ED0C-CD28-4C6C-B58E-B4B1F7AAD683} = {54A49AC2-55B3-4156-8023-41C56719EBB5}
{CF03BCEA-EB5B-427F-8576-7DA7EB869BDC} = {54A49AC2-55B3-4156-8023-41C56719EBB5}
+ {7DC7FC22-EFA6-4EB0-8E75-99F746E50F6E} = {6078AE6E-7CD0-48E4-84E0-EB164D8881DA}
+ {7901F7FF-FB76-4A4C-8DCA-F74543624130} = {1C785A74-19B9-42D2-93B1-F4EC9D6A8CFD}
+ {C4114AC1-72E8-46DA-9B4B-A4C942004492} = {1C785A74-19B9-42D2-93B1-F4EC9D6A8CFD}
+ {4820B9B7-00E6-4E0C-B93A-83BB98C1EE99} = {1C785A74-19B9-42D2-93B1-F4EC9D6A8CFD}
+ {F1884ADF-6412-4E9B-81FD-357DC5761ADF} = {1C785A74-19B9-42D2-93B1-F4EC9D6A8CFD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C5F46653-4DEC-429B-8580-4ED18ED9B4CA}