├── dependencies └── SharpMonoInjector │ ├── .gitattributes │ ├── src │ ├── SharpMonoInjector.Gui │ │ ├── App.config │ │ ├── Properties │ │ │ ├── Settings.settings │ │ │ ├── Settings.Designer.cs │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ └── Resources.resx │ │ ├── Models │ │ │ ├── MonoProcess.cs │ │ │ └── InjectedAssembly.cs │ │ ├── App.xaml.cs │ │ ├── App.xaml │ │ ├── Views │ │ │ └── MainWindow.xaml.cs │ │ ├── Converters │ │ │ ├── MonoProcessToStringConverter.cs │ │ │ └── InjectedAssemblyToStringConverter.cs │ │ ├── ViewModels │ │ │ ├── ViewModel.cs │ │ │ └── RelayCommand.cs │ │ └── SharpMonoInjector.Gui.csproj │ ├── SharpMonoInjector.Console │ │ ├── App.config │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── CommandLineArguments.cs │ │ ├── SharpMonoInjector.Console.csproj │ │ └── Program.cs │ ├── SharpMonoInjector │ │ ├── MonoImageOpenStatus.cs │ │ ├── ExportedFunction.cs │ │ ├── InjectorException.cs │ │ ├── SharpMonoInjector.csproj │ │ ├── Assembler.cs │ │ ├── Memory.cs │ │ ├── ProcessUtils.cs │ │ └── Native.cs │ ├── ExampleAssembly │ │ ├── Cheat.cs │ │ ├── Loader.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── ExampleAssembly.csproj │ └── SharpMonoInjector.sln │ ├── README.md │ ├── LICENSE │ └── .gitignore ├── IntifaceGameHapticsRouter ├── README.md ├── intiface-ghr-logo-1.ico ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── App.xaml.cs ├── IntifaceGameHapticsRouter.csproj.user ├── HelpControl.xaml.cs ├── HelpControl.xaml ├── App.xaml ├── IntifaceGameHapticsRouterProperties.settings ├── ModControl.xaml ├── packages.config ├── XInputMod.cs ├── UWPInputMod.cs ├── LogControl.xaml ├── AboutControl.xaml.cs ├── App.config ├── GHRProtocol.cs ├── MainWindow.xaml ├── IntifaceGameHapticsRouterProperties.Designer.cs ├── AboutControl.xaml ├── help.md ├── EasyHookMod.cs ├── LogControl.xaml.cs ├── VisualizerControl.xaml ├── IntifaceControl.xaml └── VisualizerControl.xaml.cs ├── icons ├── intiface-ghr-logo-1.bmp ├── intiface-ghr-logo-1.ico └── intiface-ghr-logo-1.png ├── GHRXInputModPayload ├── packages.config ├── Properties │ └── AssemblyInfo.cs └── GHRXInputModPayload.csproj ├── .gitignore ├── GHRUwpGamingInputPayload ├── packages.config ├── Properties │ └── AssemblyInfo.cs ├── GHRUwpGamingInputPayload.cs └── GHRUwpGamingInputPayload.csproj ├── GHRUnityVRModNet35 ├── packages.config ├── ILMergeConfig.json ├── Properties │ └── AssemblyInfo.cs └── GHRUnityVRModNet35.csproj ├── GHRUnityVRModNet45 ├── packages.config ├── Properties │ └── AssemblyInfo.cs └── GHRUnityVRModNet45.csproj ├── IntifaceGameHapticsRouter.sln.DotSettings ├── .github └── workflows │ └── main.yml ├── GHRXInputModInterface ├── Properties │ └── AssemblyInfo.cs ├── GHRXInputModInterface.csproj └── GHRXInputModInterface.cs ├── intiface-ghr-installer.iss ├── CHANGELOG.md ├── README.md └── IntifaceGameHapticsRouter.sln /dependencies/SharpMonoInjector/.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/README.md: -------------------------------------------------------------------------------- 1 | # Intiface Game Vibration Router 2 | 3 | Just like the Buttplug GVR, but better. 4 | -------------------------------------------------------------------------------- /icons/intiface-ghr-logo-1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intiface/intiface-game-haptics-router/HEAD/icons/intiface-ghr-logo-1.bmp -------------------------------------------------------------------------------- /icons/intiface-ghr-logo-1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intiface/intiface-game-haptics-router/HEAD/icons/intiface-ghr-logo-1.ico -------------------------------------------------------------------------------- /icons/intiface-ghr-logo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intiface/intiface-game-haptics-router/HEAD/icons/intiface-ghr-logo-1.png -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/intiface-ghr-logo-1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intiface/intiface-game-haptics-router/HEAD/IntifaceGameHapticsRouter/intiface-ghr-logo-1.ico -------------------------------------------------------------------------------- /GHRXInputModPayload/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/bin/** 2 | **/obj/** 3 | .vs 4 | *.DotSettings.user 5 | packages 6 | **/EasyHook*.dll 7 | **/EasyHook*.exe 8 | **/EasyLoad* 9 | installer 10 | **/BuildDate.txt -------------------------------------------------------------------------------- /GHRUwpGamingInputPayload/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Console/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | namespace IntifaceGameHapticsRouter 4 | { 5 | /// 6 | /// Interaction logic for App.xaml 7 | /// 8 | public partial class App : Application 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector/MonoImageOpenStatus.cs: -------------------------------------------------------------------------------- 1 | namespace SharpMonoInjector 2 | { 3 | public enum MonoImageOpenStatus 4 | { 5 | MONO_IMAGE_OK, 6 | MONO_IMAGE_ERROR_ERRNO, 7 | MONO_IMAGE_MISSING_ASSEMBLYREF, 8 | MONO_IMAGE_IMAGE_INVALID 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /GHRUnityVRModNet35/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /GHRUnityVRModNet45/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/ExampleAssembly/Cheat.cs: -------------------------------------------------------------------------------- 1 | namespace ExampleAssembly 2 | { 3 | public class Cheat : UnityEngine.MonoBehaviour 4 | { 5 | private void OnGUI() 6 | { 7 | UnityEngine.GUI.Label(new UnityEngine.Rect(10, 10, 200, 40), "This is a very useful cheat"); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Models/MonoProcess.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharpMonoInjector.Gui.Models 4 | { 5 | public class MonoProcess 6 | { 7 | public IntPtr MonoModule { get; set; } 8 | 9 | public string Name { get; set; } 10 | 11 | public int Id { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Models/InjectedAssembly.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharpMonoInjector.Gui.Models 4 | { 5 | public class InjectedAssembly 6 | { 7 | public int ProcessId { get; set; } 8 | 9 | public IntPtr Address { get; set; } 10 | 11 | public bool Is64Bit { get; set; } 12 | 13 | public string Name { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector/ExportedFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharpMonoInjector 4 | { 5 | public struct ExportedFunction 6 | { 7 | public string Name; 8 | 9 | public IntPtr Address; 10 | 11 | public ExportedFunction(string name, IntPtr address) 12 | { 13 | Name = name; 14 | Address = address; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector/InjectorException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharpMonoInjector 4 | { 5 | public class InjectorException : Exception 6 | { 7 | public InjectorException(string message) : base(message) 8 | { 9 | } 10 | 11 | public InjectorException(string message, Exception innerException) : base(message, innerException) 12 | { 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace SharpMonoInjector.Gui 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/App.xaml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector/SharpMonoInjector.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | ..\..\build\debug 9 | 10 | 11 | 12 | ..\..\build\release 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/IntifaceGameHapticsRouter.csproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/ExampleAssembly/Loader.cs: -------------------------------------------------------------------------------- 1 | namespace ExampleAssembly 2 | { 3 | public class Loader 4 | { 5 | static UnityEngine.GameObject gameObject; 6 | 7 | public static void Load() 8 | { 9 | gameObject = new UnityEngine.GameObject(); 10 | gameObject.AddComponent(); 11 | UnityEngine.Object.DontDestroyOnLoad(gameObject); 12 | } 13 | 14 | public static void Unload() 15 | { 16 | UnityEngine.Object.Destroy(gameObject); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter.sln.DotSettings: -------------------------------------------------------------------------------- 1 | 2 | True 3 | True 4 | True -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Views/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace SharpMonoInjector.Gui.Views 17 | { 18 | /// 19 | /// Interaction logic for MainWindow.xaml 20 | /// 21 | public partial class MainWindow : Window 22 | { 23 | public MainWindow() 24 | { 25 | InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Converters/MonoProcessToStringConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using SharpMonoInjector.Gui.Models; 5 | 6 | namespace SharpMonoInjector.Gui.Converters 7 | { 8 | public class MonoProcessToStringConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (value == null) 13 | return null; 14 | 15 | MonoProcess mp = (MonoProcess)value; 16 | return $"[{mp.Id}] {mp.Name}"; 17 | } 18 | 19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 20 | { 21 | throw new NotImplementedException(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/ViewModels/ViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Collections.Generic; 3 | using System.Runtime.CompilerServices; 4 | 5 | namespace SharpMonoInjector.Gui.ViewModels 6 | { 7 | public abstract class ViewModel : INotifyPropertyChanged 8 | { 9 | public event PropertyChangedEventHandler PropertyChanged; 10 | 11 | protected void Set(ref T property, T value, [CallerMemberName]string name = null) 12 | { 13 | if (!EqualityComparer.Default.Equals(property, value)) { 14 | property = value; 15 | RaisePropertyChanged(name); 16 | } 17 | } 18 | 19 | protected void RaisePropertyChanged(string name) 20 | { 21 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/HelpControl.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using System.IO; 3 | using System.Linq; 4 | using System.Reflection; 5 | 6 | namespace IntifaceGameHapticsRouter 7 | { 8 | /// 9 | /// Interaction logic for HelpControl.xaml 10 | /// 11 | public partial class HelpControl : UserControl 12 | { 13 | public HelpControl() 14 | { 15 | InitializeComponent(); 16 | var assembly = Assembly.GetExecutingAssembly(); 17 | string resourceName = assembly.GetManifestResourceNames() 18 | .Single(str => str.EndsWith("help.md")); 19 | using (Stream stream = assembly.GetManifestResourceStream(resourceName)) 20 | using (StreamReader reader = new StreamReader(stream)) 21 | { 22 | Markdownview.Markdown = reader.ReadToEnd(); 23 | } 24 | 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/ViewModels/RelayCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Input; 3 | 4 | namespace SharpMonoInjector.Gui.ViewModels 5 | { 6 | public class RelayCommand : ICommand 7 | { 8 | public event EventHandler CanExecuteChanged; 9 | 10 | private readonly Action _execute; 11 | 12 | private readonly Func _canExecute; 13 | 14 | public RelayCommand(Action execute, Func canExecute = null) 15 | { 16 | _execute = execute; 17 | _canExecute = canExecute; 18 | } 19 | 20 | public bool CanExecute(object parameter) => _canExecute == null || _canExecute(parameter); 21 | 22 | public void Execute(object parameter) => _execute(parameter); 23 | 24 | public void RaiseCanExecuteChanged() => CanExecuteChanged?.Invoke(this, EventArgs.Empty); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /GHRUnityVRModNet35/ILMergeConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "General": { 3 | "OutputFile": null, 4 | "TargetPlatform": "v2,C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727", 5 | "KeyFile": null, 6 | "AlternativeILMergePath": null, 7 | "InputAssemblies": [] 8 | }, 9 | "Advanced": { 10 | "AllowDuplicateType": null, 11 | "AllowMultipleAssemblyLevelAttributes": false, 12 | "AllowWildCards": false, 13 | "AllowZeroPeKind": false, 14 | "AttributeFile": null, 15 | "Closed": false, 16 | "CopyAttributes": false, 17 | "DebugInfo": true, 18 | "DelaySign": false, 19 | "ExcludeFile": "", 20 | "FileAlignment": 512, 21 | "Internalize": false, 22 | "Log": false, 23 | "LogFile": null, 24 | "PublicKeyTokens": true, 25 | "SearchDirectories": [], 26 | "TargetKind": null, 27 | "UnionMerge": false, 28 | "Version": null, 29 | "XmlDocumentation": false 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Converters/InjectedAssemblyToStringConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using SharpMonoInjector.Gui.Models; 5 | 6 | namespace SharpMonoInjector.Gui.Converters 7 | { 8 | public class InjectedAssemblyToStringConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (value == null) 13 | return null; 14 | 15 | InjectedAssembly ia = (InjectedAssembly)value; 16 | return $"[{(ia.Is64Bit ? $"0x{ia.Address.ToInt64():X16}" : $"0x{ia.Address.ToInt32():X8}")}] {ia.Name}"; 17 | } 18 | 19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 20 | { 21 | throw new NotImplementedException(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/HelpControl.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/App.xaml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/README.md: -------------------------------------------------------------------------------- 1 | # SharpMonoInjector 2 | SharpMonoInjector is a tool for injecting assemblies into Mono embedded applications, commonly Unity Engine based games. The target process *usually* does not have to be restarted in order to inject an updated version of the assembly. Your unload method must to destroy all of its resources (such as game objects). 3 | 4 | SharpMonoInjector works by dynamically generating machine code, writing it to the target process and executing it using CreateRemoteThread. The code calls functions in the mono embedded API. The return value is obtained with ReadProcessMemory. 5 | 6 | Both x86 and x64 processes are supported. 7 | 8 | In order for the injector to work, the load/unload methods need to match the following method signature: 9 | 10 | static void Method() 11 | 12 | In [releases](https://github.com/warbler/SharpMonoInjector/releases), there is a console application and a GUI application available. 13 | 14 | ![The GUI application](https://i.imgur.com/mPMwlu1.png) 15 | ![The console application](https://i.imgur.com/cz8Gyxa.png) 16 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: GHR CI Build 2 | 3 | on: 4 | push: 5 | branches: 6 | - dev 7 | - master 8 | tags: 9 | - 'v*' 10 | 11 | jobs: 12 | build-stable: 13 | runs-on: ${{ matrix.os }} 14 | strategy: 15 | matrix: 16 | os: [windows-latest] 17 | steps: 18 | - uses: actions/checkout@v2 19 | - name: Add msbuild to PATH 20 | uses: microsoft/setup-msbuild@v1.1 21 | - uses: nuget/setup-nuget@v1 22 | - run: nuget restore IntifaceGameHapticsRouter.sln 23 | - name: Build app for release 24 | run: msbuild IntifaceGameHapticsRouter.sln -t:rebuild -property:Configuration=Release 25 | - name: Build Innosetup Installer 26 | shell: pwsh 27 | env: 28 | BUILD_VERSION: ${{ github.ref_name }} 29 | run: | 30 | iscc .\intiface-ghr-installer.iss 31 | - name: Archive production artifacts 32 | uses: actions/upload-artifact@v4 33 | with: 34 | name: windows-installer 35 | path: | 36 | installer/intiface-game-haptics-router-installer.exe -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Biney 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace IntifaceGameHapticsRouter.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/src/SharpMonoInjector.Gui/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SharpMonoInjector.Gui.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get { 25 | return defaultInstance; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/IntifaceGameHapticsRouterProperties.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | True 7 | 8 | 9 | ws://127.0.0.1:12345 10 | 11 | 12 | 1 13 | 14 | 15 | 100 16 | 17 | 18 | True 19 | 20 | 21 | False 22 | 23 | 24 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/ModControl.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /dependencies/SharpMonoInjector/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | build/ 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015 cache/options directory 29 | .vs/ 30 | # Uncomment if you have tasks that create the project's static files in wwwroot 31 | #wwwroot/ 32 | 33 | # MSTest test Results 34 | [Tt]est[Rr]esult*/ 35 | [Bb]uild[Ll]og.* 36 | 37 | # NUNIT 38 | *.VisualState.xml 39 | TestResult.xml 40 | 41 | # Build Results of an ATL Project 42 | [Dd]ebugPS/ 43 | [Rr]eleasePS/ 44 | dlldata.c 45 | 46 | # Benchmark Results 47 | BenchmarkDotNet.Artifacts/ 48 | 49 | # .NET Core 50 | project.lock.json 51 | project.fragment.lock.json 52 | artifacts/ 53 | **/Properties/launchSettings.json 54 | 55 | *_i.c 56 | *_p.c 57 | *_i.h 58 | *.ilk 59 | *.meta 60 | *.obj 61 | *.pch 62 | *.pdb 63 | *.pgc 64 | *.pgd 65 | *.rsp 66 | *.sbr 67 | *.tlb 68 | *.tli 69 | *.tlh 70 | *.tmp 71 | *.tmp_proj 72 | *.log 73 | *.vspscc 74 | *.vssscc 75 | .builds 76 | *.pidb 77 | *.svclog 78 | *.scc 79 | 80 | # Chutzpah Test files 81 | _Chutzpah* 82 | 83 | # Visual C++ cache files 84 | ipch/ 85 | *.aps 86 | *.ncb 87 | *.opendb 88 | *.opensdf 89 | *.sdf 90 | *.cachefile 91 | *.VC.db 92 | *.VC.VC.opendb 93 | 94 | # Visual Studio profiler 95 | *.psess 96 | *.vsp 97 | *.vspx 98 | *.sap 99 | 100 | # TFS 2012 Local Workspace 101 | $tf/ 102 | 103 | # Guidance Automation Toolkit 104 | *.gpState 105 | 106 | # ReSharper is a .NET coding add-in 107 | _ReSharper*/ 108 | *.[Rr]e[Ss]harper 109 | *.DotSettings.user 110 | 111 | # JustCode is a .NET coding add-in 112 | .JustCode 113 | 114 | # TeamCity is a build add-in 115 | _TeamCity* 116 | 117 | # DotCover is a Code Coverage Tool 118 | *.dotCover 119 | 120 | # AxoCover is a Code Coverage Tool 121 | .axoCover/* 122 | !.axoCover/settings.json 123 | 124 | # Visual Studio code coverage results 125 | *.coverage 126 | *.coveragexml 127 | 128 | # NCrunch 129 | _NCrunch_* 130 | .*crunch*.local.xml 131 | nCrunchTemp_* 132 | 133 | # MightyMoose 134 | *.mm.* 135 | AutoTest.Net/ 136 | 137 | # Web workbench (sass) 138 | .sass-cache/ 139 | 140 | # Installshield output folder 141 | [Ee]xpress/ 142 | 143 | # DocProject is a documentation generator add-in 144 | DocProject/buildhelp/ 145 | DocProject/Help/*.HxT 146 | DocProject/Help/*.HxC 147 | DocProject/Help/*.hhc 148 | DocProject/Help/*.hhk 149 | DocProject/Help/*.hhp 150 | DocProject/Help/Html2 151 | DocProject/Help/html 152 | 153 | # Click-Once directory 154 | publish/ 155 | 156 | # Publish Web Output 157 | *.[Pp]ublish.xml 158 | *.azurePubxml 159 | # Note: Comment the next line if you want to checkin your web deploy settings, 160 | # but database connection strings (with potential passwords) will be unencrypted 161 | *.pubxml 162 | *.publishproj 163 | 164 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 165 | # checkin your Azure Web App publish settings, but sensitive information contained 166 | # in these scripts will be unencrypted 167 | PublishScripts/ 168 | 169 | # NuGet Packages 170 | *.nupkg 171 | # The packages folder can be ignored because of Package Restore 172 | **/packages/* 173 | # except build/, which is used as an MSBuild target. 174 | !**/packages/build/ 175 | # Uncomment if necessary however generally it will be regenerated when needed 176 | #!**/packages/repositories.config 177 | # NuGet v3's project.json files produces more ignorable files 178 | *.nuget.props 179 | *.nuget.targets 180 | 181 | # Microsoft Azure Build Output 182 | csx/ 183 | *.build.csdef 184 | 185 | # Microsoft Azure Emulator 186 | ecf/ 187 | rcf/ 188 | 189 | # Windows Store app package directories and files 190 | AppPackages/ 191 | BundleArtifacts/ 192 | Package.StoreAssociation.xml 193 | _pkginfo.txt 194 | *.appx 195 | 196 | # Visual Studio cache files 197 | # files ending in .cache can be ignored 198 | *.[Cc]ache 199 | # but keep track of directories ending in .cache 200 | !*.[Cc]ache/ 201 | 202 | # Others 203 | ClientBin/ 204 | ~$* 205 | *~ 206 | *.dbmdl 207 | *.dbproj.schemaview 208 | *.jfm 209 | *.pfx 210 | *.publishsettings 211 | orleans.codegen.cs 212 | 213 | # Since there are multiple workflows, uncomment next line to ignore bower_components 214 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 215 | #bower_components/ 216 | 217 | # RIA/Silverlight projects 218 | Generated_Code/ 219 | 220 | # Backup & report files from converting an old project file 221 | # to a newer Visual Studio version. Backup files are not needed, 222 | # because we have git ;-) 223 | _UpgradeReport_Files/ 224 | Backup*/ 225 | UpgradeLog*.XML 226 | UpgradeLog*.htm 227 | 228 | # SQL Server files 229 | *.mdf 230 | *.ldf 231 | *.ndf 232 | 233 | # Business Intelligence projects 234 | *.rdl.data 235 | *.bim.layout 236 | *.bim_*.settings 237 | 238 | # Microsoft Fakes 239 | FakesAssemblies/ 240 | 241 | # GhostDoc plugin setting file 242 | *.GhostDoc.xml 243 | 244 | # Node.js Tools for Visual Studio 245 | .ntvs_analysis.dat 246 | node_modules/ 247 | 248 | # Typescript v1 declaration files 249 | typings/ 250 | 251 | # Visual Studio 6 build log 252 | *.plg 253 | 254 | # Visual Studio 6 workspace options file 255 | *.opt 256 | 257 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 258 | *.vbw 259 | 260 | # Visual Studio LightSwitch build output 261 | **/*.HTMLClient/GeneratedArtifacts 262 | **/*.DesktopClient/GeneratedArtifacts 263 | **/*.DesktopClient/ModelManifest.xml 264 | **/*.Server/GeneratedArtifacts 265 | **/*.Server/ModelManifest.xml 266 | _Pvt_Extensions 267 | 268 | # Paket dependency manager 269 | .paket/paket.exe 270 | paket-files/ 271 | 272 | # FAKE - F# Make 273 | .fake/ 274 | 275 | # JetBrains Rider 276 | .idea/ 277 | *.sln.iml 278 | 279 | # CodeRush 280 | .cr/ 281 | 282 | # Python Tools for Visual Studio (PTVS) 283 | __pycache__/ 284 | *.pyc 285 | 286 | # Cake - Uncomment if you are using it 287 | # tools/** 288 | # !tools/packages.config 289 | 290 | # Tabs Studio 291 | *.tss 292 | 293 | # Telerik's JustMock configuration file 294 | *.jmconfig 295 | 296 | # BizTalk build output 297 | *.btp.cs 298 | *.btm.cs 299 | *.odx.cs 300 | *.xsd.cs 301 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\help.md;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 123 | 124 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/IntifaceControl.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ws://127.0.0.1:12345 43 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter/VisualizerControl.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using System.Timers; 4 | using System.Windows; 5 | using System.Windows.Controls; 6 | using LiveCharts; 7 | using LiveCharts.Wpf; 8 | using System.Text.RegularExpressions; 9 | using System.Windows.Input; 10 | 11 | namespace IntifaceGameHapticsRouter 12 | { 13 | /// 14 | /// Interaction logic for VisualizerControl.xaml 15 | /// 16 | public partial class VisualizerControl : UserControl 17 | { 18 | private readonly ChartValues HighPowerValues; 19 | private readonly ChartValues LowPowerValues; 20 | private uint CurrentLeftMotorSpeed; 21 | private uint CurrentRightMotorSpeed; 22 | private Timer runTimer; 23 | 24 | // Both of these members need to be public, otherwise 25 | // livecharts can't see them to chart them. 26 | // ReSharper disable once MemberCanBePrivate.Global 27 | public SeriesCollection LowPowerSeriesCollection { get; set; } 28 | 29 | // ReSharper disable once MemberCanBePrivate.Global 30 | public SeriesCollection HighPowerSeriesCollection { get; set; } 31 | public event EventHandler MultiplierChanged; 32 | public event EventHandler BaselineChanged; 33 | public event EventHandler PacketGapChanged; 34 | public event EventHandler PassthruChanged; 35 | 36 | public double Multiplier => multiplierSlider.Value; 37 | public double Baseline => baselineSlider.Value; 38 | 39 | public VisualizerControl() 40 | { 41 | InitializeComponent(); 42 | 43 | packetGapSlider.Value = IntifaceGameHapticsRouterProperties.Default.PacketTimingGapInMS; 44 | packetGapSlider.ValueChanged += packetGapSlider_ValueChanged; 45 | 46 | multiplierSlider.Value = IntifaceGameHapticsRouterProperties.Default.VibrationMultiplier; 47 | multiplierSlider.ValueChanged += (object o, RoutedPropertyChangedEventArgs e) => 48 | { 49 | IntifaceGameHapticsRouterProperties.Default.VibrationMultiplier = Multiplier; 50 | IntifaceGameHapticsRouterProperties.Default.Save(); 51 | }; 52 | LowPowerValues = new ChartValues(); 53 | HighPowerValues = new ChartValues(); 54 | for (var i = 0; i < 200; ++i) 55 | { 56 | LowPowerValues.Add(0); 57 | HighPowerValues.Add(0); 58 | } 59 | 60 | LowPowerSeriesCollection = new SeriesCollection 61 | { 62 | new LineSeries 63 | { 64 | Title = "Low Power Vibrator", 65 | Values = LowPowerValues, 66 | PointGeometrySize = 0 67 | } 68 | }; 69 | HighPowerSeriesCollection = new SeriesCollection 70 | { 71 | new LineSeries 72 | { 73 | Title = "High Power Vibrator", 74 | Values = HighPowerValues, 75 | PointGeometrySize = 0 76 | } 77 | }; 78 | DataContext = this; 79 | // The automated updater doesn't seem to run correctly after it loses focus, so we'll 80 | // manually run update steps ourselves. 81 | Dispatcher.Invoke(() => 82 | { 83 | HighPowerChart.UpdaterState = UpdaterState.Paused; 84 | LowPowerChart.UpdaterState = UpdaterState.Paused; 85 | }); 86 | runTimer = new Timer { Interval = 100, AutoReset = true }; 87 | runTimer.Elapsed += AddPoint; 88 | } 89 | 90 | public void StartUpdates() 91 | { 92 | runTimer.Start(); 93 | } 94 | 95 | public void StopUpdates() 96 | { 97 | runTimer.Stop(); 98 | } 99 | 100 | public void AddPoint(object o, ElapsedEventArgs e) 101 | { 102 | AddVibrationValue(CurrentLeftMotorSpeed, CurrentRightMotorSpeed); 103 | } 104 | 105 | public void UpdateVibrationValues(uint aLeftMotor, uint aRightMotor) 106 | { 107 | CurrentLeftMotorSpeed = aLeftMotor; 108 | CurrentRightMotorSpeed = aRightMotor; 109 | } 110 | 111 | public void AddVibrationValue(double aLowPower, double aHighPower) 112 | { 113 | LowPowerValues.RemoveAt(0); 114 | LowPowerValues.Add(aLowPower); 115 | HighPowerValues.RemoveAt(0); 116 | HighPowerValues.Add(aHighPower); 117 | // Manually run chart update 118 | try 119 | { 120 | Dispatcher.Invoke(() => 121 | { 122 | LowPowerChart.Update(false, true); 123 | HighPowerChart.Update(false, true); 124 | }); 125 | } 126 | catch (TaskCanceledException) 127 | { 128 | // Usually means we're shutting down. noop. 129 | } 130 | } 131 | 132 | private void PassthruCheckBox_Changed(object aSender, RoutedEventArgs aArgs) 133 | { 134 | PassthruChanged?.Invoke(this, PassthruCheckBox.IsChecked.Value); 135 | } 136 | 137 | private void BaselineSlider_OnValueChanged(object sender, RoutedPropertyChangedEventArgs e) 138 | { 139 | BaselineChanged?.Invoke(this, Baseline); 140 | } 141 | 142 | 143 | private void MultiplierSlider_OnValueChanged(object sender, RoutedPropertyChangedEventArgs e) 144 | { 145 | MultiplierChanged?.Invoke(this, Multiplier); 146 | } 147 | 148 | private void packetGapSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) 149 | { 150 | IntifaceGameHapticsRouterProperties.Default.PacketTimingGapInMS = (int)packetGapSlider.Value; 151 | IntifaceGameHapticsRouterProperties.Default.Save(); 152 | PacketGapChanged?.Invoke(this, IntifaceGameHapticsRouterProperties.Default.PacketTimingGapInMS); 153 | } 154 | 155 | private void ResetSettings_Click(object sender, RoutedEventArgs e) 156 | { 157 | IntifaceGameHapticsRouterProperties.Default.Reset(); 158 | IntifaceGameHapticsRouterProperties.Default.Save(); 159 | MultiplierChanged?.Invoke(this, IntifaceGameHapticsRouterProperties.Default.VibrationMultiplier); 160 | PacketGapChanged?.Invoke(this, IntifaceGameHapticsRouterProperties.Default.PacketTimingGapInMS); 161 | } 162 | } 163 | } -------------------------------------------------------------------------------- /IntifaceGameHapticsRouter.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.4.33122.133 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMonoInjector", "dependencies\SharpMonoInjector\src\SharpMonoInjector\SharpMonoInjector.csproj", "{B72B6502-E1B3-421A-B723-B294BF5F9E6B}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntifaceGameHapticsRouter", "IntifaceGameHapticsRouter\IntifaceGameHapticsRouter.csproj", "{E77C7F6F-1476-43B9-8F22-A2C907374EA4}" 9 | ProjectSection(ProjectDependencies) = postProject 10 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D} = {DEB31023-7D8F-49F0-8B06-B35BDA37672D} 11 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424} = {09ED6F36-FD6B-4B16-A5C8-95F2E1339424} 12 | EndProjectSection 13 | EndProject 14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHRUnityVRModNet35", "GHRUnityVRModNet35\GHRUnityVRModNet35.csproj", "{DEB31023-7D8F-49F0-8B06-B35BDA37672D}" 15 | EndProject 16 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHRUnityVRModNet45", "GHRUnityVRModNet45\GHRUnityVRModNet45.csproj", "{09ED6F36-FD6B-4B16-A5C8-95F2E1339424}" 17 | EndProject 18 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHRXInputModInterface", "GHRXInputModInterface\GHRXInputModInterface.csproj", "{96EBCD5E-A218-4DDC-A8BE-83E9369F5465}" 19 | EndProject 20 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHRXInputModPayload", "GHRXInputModPayload\GHRXInputModPayload.csproj", "{8DF536FA-A44F-437C-8606-0FC0623588C1}" 21 | EndProject 22 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHRUwpGamingInputPayload", "GHRUwpGamingInputPayload\GHRUwpGamingInputPayload.csproj", "{5AE2A36B-EF88-47F5-A215-56202D557989}" 23 | EndProject 24 | Global 25 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 26 | Debug|Any CPU = Debug|Any CPU 27 | Debug|x64 = Debug|x64 28 | Release|Any CPU = Release|Any CPU 29 | Release|x64 = Release|x64 30 | EndGlobalSection 31 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 32 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Debug|x64.ActiveCfg = Debug|x64 35 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Debug|x64.Build.0 = Debug|x64 36 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Release|Any CPU.ActiveCfg = Release|Any CPU 37 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Release|Any CPU.Build.0 = Release|Any CPU 38 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Release|x64.ActiveCfg = Release|x64 39 | {B72B6502-E1B3-421A-B723-B294BF5F9E6B}.Release|x64.Build.0 = Release|x64 40 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 41 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Debug|Any CPU.Build.0 = Debug|Any CPU 42 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Debug|x64.ActiveCfg = Debug|x64 43 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Debug|x64.Build.0 = Debug|x64 44 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Release|Any CPU.ActiveCfg = Release|Any CPU 45 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Release|Any CPU.Build.0 = Release|Any CPU 46 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Release|x64.ActiveCfg = Release|x64 47 | {E77C7F6F-1476-43B9-8F22-A2C907374EA4}.Release|x64.Build.0 = Release|x64 48 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 49 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Debug|Any CPU.Build.0 = Debug|Any CPU 50 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Debug|x64.ActiveCfg = Debug|x64 51 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Debug|x64.Build.0 = Debug|x64 52 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Release|Any CPU.ActiveCfg = Release|Any CPU 53 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Release|Any CPU.Build.0 = Release|Any CPU 54 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Release|x64.ActiveCfg = Release|x64 55 | {DEB31023-7D8F-49F0-8B06-B35BDA37672D}.Release|x64.Build.0 = Release|x64 56 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 57 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Debug|Any CPU.Build.0 = Debug|Any CPU 58 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Debug|x64.ActiveCfg = Debug|x64 59 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Debug|x64.Build.0 = Debug|x64 60 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Release|Any CPU.ActiveCfg = Release|Any CPU 61 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Release|Any CPU.Build.0 = Release|Any CPU 62 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Release|x64.ActiveCfg = Release|x64 63 | {09ED6F36-FD6B-4B16-A5C8-95F2E1339424}.Release|x64.Build.0 = Release|x64 64 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 65 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Debug|Any CPU.Build.0 = Debug|Any CPU 66 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Debug|x64.ActiveCfg = Debug|x64 67 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Debug|x64.Build.0 = Debug|x64 68 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Release|Any CPU.ActiveCfg = Release|Any CPU 69 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Release|Any CPU.Build.0 = Release|Any CPU 70 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Release|x64.ActiveCfg = Release|x64 71 | {96EBCD5E-A218-4DDC-A8BE-83E9369F5465}.Release|x64.Build.0 = Release|x64 72 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 73 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Debug|Any CPU.Build.0 = Debug|Any CPU 74 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Debug|x64.ActiveCfg = Debug|x64 75 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Debug|x64.Build.0 = Debug|x64 76 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Release|Any CPU.ActiveCfg = Release|Any CPU 77 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Release|Any CPU.Build.0 = Release|Any CPU 78 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Release|x64.ActiveCfg = Release|x64 79 | {8DF536FA-A44F-437C-8606-0FC0623588C1}.Release|x64.Build.0 = Release|x64 80 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 81 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Debug|Any CPU.Build.0 = Debug|Any CPU 82 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Debug|x64.ActiveCfg = Debug|Any CPU 83 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Debug|x64.Build.0 = Debug|Any CPU 84 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Release|Any CPU.ActiveCfg = Release|Any CPU 85 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Release|Any CPU.Build.0 = Release|Any CPU 86 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Release|x64.ActiveCfg = Release|Any CPU 87 | {5AE2A36B-EF88-47F5-A215-56202D557989}.Release|x64.Build.0 = Release|Any CPU 88 | EndGlobalSection 89 | GlobalSection(SolutionProperties) = preSolution 90 | HideSolutionNode = FALSE 91 | EndGlobalSection 92 | GlobalSection(ExtensibilityGlobals) = postSolution 93 | SolutionGuid = {14439514-A42E-4DE1-B6F9-5244F072DE29} 94 | EndGlobalSection 95 | EndGlobal 96 | --------------------------------------------------------------------------------