From 51db5419dbca800a1a41822535a5e0f3f1f30ea9 Mon Sep 17 00:00:00 2001 From: Gde Mahardhikha Satrigraha Date: Mon, 20 Feb 2017 20:33:24 +0800 Subject: [PATCH 01/21] update to comply with latest interception (git commit hash: 177efe7b255dac9bdcce4a4ae2ffc3d300f598f8) --- Interceptor/Input.cs | 6 +++--- Interceptor/InterceptionDriver.cs | 20 +++++++++++++++----- Interceptor/Interceptor.csproj | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 141b9ba..0fd9973 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -99,8 +99,8 @@ public void Unload() private void DriverCallback() { - InterceptionDriver.SetFilter(context, InterceptionDriver.IsKeyboard, (Int32) KeyboardFilterMode); - InterceptionDriver.SetFilter(context, InterceptionDriver.IsMouse, (Int32) MouseFilterMode); + InterceptionDriver.SetFilter(context, InterceptionDriver.IsKeyboard, (ushort) KeyboardFilterMode); + InterceptionDriver.SetFilter(context, InterceptionDriver.IsMouse, (ushort) MouseFilterMode); Stroke stroke = new Stroke(); @@ -128,7 +128,7 @@ private void DriverCallback() { if (OnKeyPressed != null) { - var args = new KeyPressedEventArgs() { Key = stroke.Key.Code, State = stroke.Key.State}; + var args = new KeyPressedEventArgs() { Key = stroke.Key.Code, State = stroke.Key.State }; OnKeyPressed(this, args); if (args.Handled) diff --git a/Interceptor/InterceptionDriver.cs b/Interceptor/InterceptionDriver.cs index e5c0257..057f19c 100644 --- a/Interceptor/InterceptionDriver.cs +++ b/Interceptor/InterceptionDriver.cs @@ -95,7 +95,7 @@ public struct MouseStroke public Int16 Rolling; public Int32 X; public Int32 Y; - public UInt16 Information; + public UInt32 Information; } [StructLayout(LayoutKind.Sequential)] @@ -132,10 +132,10 @@ public static class InterceptionDriver public static extern void SetPrecedence(IntPtr context, Int32 device, Int32 Precedence); [DllImport("interception.dll", EntryPoint = "interception_get_filter", CallingConvention = CallingConvention.Cdecl)] - public static extern void GetFilter(IntPtr context, Int32 device); + public static extern ushort GetFilter(IntPtr context, Int32 device); [DllImport("interception.dll", EntryPoint = "interception_set_filter", CallingConvention = CallingConvention.Cdecl)] - public static extern void SetFilter(IntPtr context, Predicate predicate, Int32 keyboardFilterMode); + public static extern void SetFilter(IntPtr context, Predicate predicate, ushort keyboardFilterMode); [DllImport("interception.dll", EntryPoint = "interception_wait", CallingConvention = CallingConvention.Cdecl)] public static extern Int32 Wait(IntPtr context); @@ -156,9 +156,19 @@ public static class InterceptionDriver public static extern Int32 IsInvalid(Int32 device); [DllImport("interception.dll", EntryPoint = "interception_is_keyboard", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 IsKeyboard(Int32 device); + private static extern Int32 _IsKeyboard(Int32 device); + + public static Int32 IsKeyboard(Int32 device) + { + return _IsKeyboard(device); + } [DllImport("interception.dll", EntryPoint = "interception_is_mouse", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 IsMouse(Int32 device); + private static extern Int32 _IsMouse(Int32 device); + + public static Int32 IsMouse(Int32 device) + { + return _IsMouse(device); + } } } diff --git a/Interceptor/Interceptor.csproj b/Interceptor/Interceptor.csproj index 801c838..ceed7ab 100644 --- a/Interceptor/Interceptor.csproj +++ b/Interceptor/Interceptor.csproj @@ -21,7 +21,7 @@ DEBUG;TRACE prompt 4 - x64 + AnyCPU pdbonly From 98692713bd5b4b9bac521899c0b9bea1ca0817ab Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 12:25:35 -0400 Subject: [PATCH 02/21] Updated to work with .Net 5.0 (Abort is obsolete) --- Interceptor/Input.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 0fd9973..691c4f9 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -91,9 +91,8 @@ public void Unload() if (context != IntPtr.Zero) { - callbackThread.Abort(); - InterceptionDriver.DestroyContext(context); IsLoaded = false; + InterceptionDriver.DestroyContext(context); } } @@ -143,6 +142,8 @@ private void DriverCallback() InterceptionDriver.Send(context, deviceId, ref stroke, 1); } + if (!IsLoaded) + return; Unload(); throw new Exception("Interception.Receive() failed for an unknown reason. The driver has been unloaded."); } From bcbbb9f210c003dd839f930b661eff97d54f0f6d Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 18:38:35 -0400 Subject: [PATCH 03/21] Making sure to not start a new thread if the other one hasn't finished yet. --- Interceptor/Input.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 691c4f9..a72a842 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -65,6 +65,7 @@ public bool Load() if (context != IntPtr.Zero) { + callbackThread?.Join(); callbackThread = new Thread(new ThreadStart(DriverCallback)); callbackThread.Priority = ThreadPriority.Highest; callbackThread.IsBackground = true; From 29b30e1deccb067b2600740aeaed413bb880ccc6 Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 19:06:20 -0400 Subject: [PATCH 04/21] Refactoring with ReSharper. --- .vs/Interceptor/v16/.suo | Bin 0 -> 61952 bytes .vs/Interceptor_Updated/v16/.suo | Bin 0 -> 22016 bytes .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 8 ++ .vs/slnx.sqlite | Bin 0 -> 229376 bytes Interceptor/Input.cs | 100 ++++++++---------- ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + ...Interceptor.csproj.AssemblyReference.cache | Bin 0 -> 4838 bytes ...Interceptor.csproj.CoreCompileInputs.cache | 1 + ...amework,Version=v4.0.AssemblyAttributes.cs | 4 + 10 files changed, 67 insertions(+), 53 deletions(-) create mode 100644 .vs/Interceptor/v16/.suo create mode 100644 .vs/Interceptor_Updated/v16/.suo create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs create mode 100644 Interceptor/obj/Debug/Interceptor.csproj.AssemblyReference.cache create mode 100644 Interceptor/obj/Debug/Interceptor.csproj.CoreCompileInputs.cache create mode 100644 Interceptor/obj/Release/.NETFramework,Version=v4.0.AssemblyAttributes.cs diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..a4954a33effaf8af0c5f1c6d4fac90c61ff885e7 GIT binary patch literal 61952 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 Z7w#SvU;j^SC^dfOuKM}fG2})6|Nm2?Z599k literal 0 HcmV?d00001 diff --git a/.vs/Interceptor_Updated/v16/.suo b/.vs/Interceptor_Updated/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..08f23cdc776e919ef01d5eb624e95a91fa55a367 GIT binary patch literal 22016 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 U5OEW65vd~LB;r6aH`?L<2izSy{Qv*} literal 0 HcmV?d00001 diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index a72a842..3ecd335 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -1,17 +1,16 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Linq; -using System.Text; using System.Threading; using System.Windows.Forms; +// ReSharper disable UnusedMember.Global namespace Interceptor { public class Input { - private IntPtr context; - private Thread callbackThread; + private IntPtr _context; + private Thread _callbackThread; /// /// Determines whether the driver traps no keyboard events, all events, or a range of events in-between (down only, up only...etc). Set this before loading otherwise the driver will not filter any events and no keypresses can be sent. @@ -40,11 +39,11 @@ public class Input public event EventHandler OnKeyPressed; public event EventHandler OnMousePressed; - private int deviceId; /* Very important; which device the driver sends events to */ + private int _deviceId; /* Very important; which device the driver sends events to */ public Input() { - context = IntPtr.Zero; + _context = IntPtr.Zero; KeyboardFilterMode = KeyboardFilterMode.None; MouseFilterMode = MouseFilterMode.None; @@ -57,30 +56,30 @@ public Input() /* * Attempts to load the driver. You may get an error if the C++ library 'interception.dll' is not in the same folder as the executable and other DLLs. MouseFilterMode and KeyboardFilterMode must be set before Load() is called. Calling Load() twice has no effect if already loaded. */ + // ReSharper disable once UnusedMember.Global public bool Load() { if (IsLoaded) return false; - context = InterceptionDriver.CreateContext(); + _context = InterceptionDriver.CreateContext(); - if (context != IntPtr.Zero) + if (_context != IntPtr.Zero) { - callbackThread?.Join(); - callbackThread = new Thread(new ThreadStart(DriverCallback)); - callbackThread.Priority = ThreadPriority.Highest; - callbackThread.IsBackground = true; - callbackThread.Start(); + _callbackThread?.Join(); + _callbackThread = new Thread(DriverCallback) + { + Priority = ThreadPriority.Highest, IsBackground = true + }; + _callbackThread.Start(); IsLoaded = true; return true; } - else - { - IsLoaded = false; - return false; - } + IsLoaded = false; + + return false; } /* @@ -90,23 +89,22 @@ public void Unload() { if (!IsLoaded) return; - if (context != IntPtr.Zero) - { - IsLoaded = false; - InterceptionDriver.DestroyContext(context); - } + if (_context == IntPtr.Zero) return; + + IsLoaded = false; + InterceptionDriver.DestroyContext(_context); } private void DriverCallback() { - InterceptionDriver.SetFilter(context, InterceptionDriver.IsKeyboard, (ushort) KeyboardFilterMode); - InterceptionDriver.SetFilter(context, InterceptionDriver.IsMouse, (ushort) MouseFilterMode); + InterceptionDriver.SetFilter(_context, InterceptionDriver.IsKeyboard, (ushort) KeyboardFilterMode); + InterceptionDriver.SetFilter(_context, InterceptionDriver.IsMouse, (ushort) MouseFilterMode); Stroke stroke = new Stroke(); - while (InterceptionDriver.Receive(context, deviceId = InterceptionDriver.Wait(context), ref stroke, 1) > 0) + while (InterceptionDriver.Receive(_context, _deviceId = InterceptionDriver.Wait(_context), ref stroke, 1) > 0) { - if (InterceptionDriver.IsMouse(deviceId) > 0) + if (InterceptionDriver.IsMouse(_deviceId) > 0) { if (OnMousePressed != null) { @@ -124,7 +122,7 @@ private void DriverCallback() } } - if (InterceptionDriver.IsKeyboard(deviceId) > 0) + if (InterceptionDriver.IsKeyboard(_deviceId) > 0) { if (OnKeyPressed != null) { @@ -140,7 +138,7 @@ private void DriverCallback() } } - InterceptionDriver.Send(context, deviceId, ref stroke, 1); + InterceptionDriver.Send(_context, _deviceId, ref stroke, 1); } if (!IsLoaded) @@ -152,14 +150,15 @@ private void DriverCallback() public void SendKey(Keys key, KeyState state) { Stroke stroke = new Stroke(); - KeyStroke keyStroke = new KeyStroke(); + KeyStroke keyStroke = new KeyStroke + { + Code = key, State = state + }; - keyStroke.Code = key; - keyStroke.State = state; stroke.Key = keyStroke; - InterceptionDriver.Send(context, deviceId, ref stroke, 1); + InterceptionDriver.Send(_context, _deviceId, ref stroke, 1); if (KeyPressDelay > 0) Thread.Sleep(KeyPressDelay); @@ -192,16 +191,14 @@ public void SendKeys(params Keys[] keys) /// public void SendText(string text) { - foreach (char letter in text) + foreach (var tuple in text.Select(CharacterToKeysEnum)) { - var tuple = CharacterToKeysEnum(letter); - - if (tuple.Item2 == true) // We need to press shift to get the next character + if (tuple.Item2) // We need to press shift to get the next character SendKey(Keys.LeftShift, KeyState.Down); SendKey(tuple.Item1); - if (tuple.Item2 == true) + if (tuple.Item2) SendKey(Keys.LeftShift, KeyState.Up); } } @@ -209,7 +206,7 @@ public void SendText(string text) /// /// Converts a character to a Keys enum and a 'do we need to press shift'. /// - private Tuple CharacterToKeysEnum(char c) + private static Tuple CharacterToKeysEnum(char c) { switch (Char.ToLower(c)) { @@ -355,9 +352,8 @@ private Tuple CharacterToKeysEnum(char c) public void SendMouseEvent(MouseState state) { Stroke stroke = new Stroke(); - MouseStroke mouseStroke = new MouseStroke(); + MouseStroke mouseStroke = new MouseStroke {State = state}; - mouseStroke.State = state; if (state == MouseState.ScrollUp) { @@ -370,7 +366,7 @@ public void SendMouseEvent(MouseState state) stroke.Mouse = mouseStroke; - InterceptionDriver.Send(context, 12, ref stroke, 1); + InterceptionDriver.Send(_context, 12, ref stroke, 1); } public void SendLeftClick() @@ -407,16 +403,16 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) { if (useDriver) { - Stroke stroke = new Stroke(); - MouseStroke mouseStroke = new MouseStroke(); - - mouseStroke.X = deltaX; - mouseStroke.Y = deltaY; + var stroke = new Stroke(); + var mouseStroke = new MouseStroke + { + X = deltaX, Y = deltaY + }; stroke.Mouse = mouseStroke; stroke.Mouse.Flags = MouseFlags.MoveRelative; - InterceptionDriver.Send(context, 12, ref stroke, 1); + InterceptionDriver.Send(_context, 12, ref stroke, 1); } else { @@ -432,16 +428,14 @@ public void MoveMouseTo(int x, int y, bool useDriver = false) { if (useDriver) { - Stroke stroke = new Stroke(); - MouseStroke mouseStroke = new MouseStroke(); + var stroke = new Stroke(); + var mouseStroke = new MouseStroke {X = x, Y = y}; - mouseStroke.X = x; - mouseStroke.Y = y; stroke.Mouse = mouseStroke; stroke.Mouse.Flags = MouseFlags.MoveAbsolute; - InterceptionDriver.Send(context, 12, ref stroke, 1); + InterceptionDriver.Send(_context, 12, ref stroke, 1); } { Cursor.Position = new Point(x, y); diff --git a/Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs new file mode 100644 index 0000000..5d01041 --- /dev/null +++ b/Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/Interceptor/obj/Debug/Interceptor.csproj.AssemblyReference.cache b/Interceptor/obj/Debug/Interceptor.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..0c2dcdce6dae18665316c67461666e962f0dc8ed GIT binary patch literal 4838 zcmd5fgM7|zR=O2>x^yG(HC5hN51Z9=dM8d-Z{6KbZxA!u?_w^()T&UV*zm!0_m z{10yY39j7vDcB*|mL@`q>`3Gg#YyzqexCPz-pBjz24Miu_B;=cgPrJu;1hw8Zl6#r zyU)&Ezj_`G@E8lsV%*)85+_4Su#EOeEV$%j74`N1c)`Uq@(+54SEJKye=|yC%mpPw ze?%#Op2d5z9<;yxY9c4Y6 zCg5yLCUb!l;jC7~?{AMUI=|XGdBk=W@l!%;#VM}LL@Q#9o5Ofdpao%*3aoFKWw^rn z&R=AlqB3m`m5+pt_(J-9T^q6jo4YQtd5~pIMnx@*Rx|Kn7AwT@ToARi3T96l!2R7g z#!`|Yp|;EUU+Wd%MTYud&J;8u*I(e?(8Rg3aGi4F3 zEHvZhN=j>@|DLduifS@FNh^(ubaT@g+~_#KTEg;@2@6lPNQ+bVT6P2E}N$vH3+TOj2oJ@ds_CPbOGNdvT9I!-?bzaTNIsN6=F zvINHsQK4Um=h1yf^X>+jUBxX|g&RdO8>IY%@|k3j+iTm_t*%3Nt(z9 +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] From a5e926e499407ba8b87caeaa1a77fbad3a0ff271 Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 19:12:14 -0400 Subject: [PATCH 05/21] More Auto Refactoring. --- Interceptor/Input.cs | 222 ++++++++++++++++++++++--------------------- 1 file changed, 112 insertions(+), 110 deletions(-) diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 3ecd335..cec6f46 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading; using System.Windows.Forms; + // ReSharper disable UnusedMember.Global namespace Interceptor @@ -13,24 +14,30 @@ public class Input private Thread _callbackThread; /// - /// Determines whether the driver traps no keyboard events, all events, or a range of events in-between (down only, up only...etc). Set this before loading otherwise the driver will not filter any events and no keypresses can be sent. + /// Determines whether the driver traps no keyboard events, all events, or a range of events in-between (down only, up + /// only...etc). Set this before loading otherwise the driver will not filter any events and no keypresses can be sent. /// public KeyboardFilterMode KeyboardFilterMode { get; set; } - + /// - /// Determines whether the driver traps no events, all events, or a range of events in-between. Set this before loading otherwise the driver will not filter any events and no mouse clicks can be sent. + /// Determines whether the driver traps no events, all events, or a range of events in-between. Set this before loading + /// otherwise the driver will not filter any events and no mouse clicks can be sent. /// public MouseFilterMode MouseFilterMode { get; set; } public bool IsLoaded { get; set; } /// - /// Gets or sets the delay in milliseconds after each key stroke down and up. Pressing a key requires both a key stroke down and up. A delay of 0 (inadvisable) may result in no keys being apparently pressed. A delay of 20 - 40 milliseconds makes the key presses visible. + /// Gets or sets the delay in milliseconds after each key stroke down and up. Pressing a key requires both a key stroke + /// down and up. A delay of 0 (inadvisable) may result in no keys being apparently pressed. A delay of 20 - 40 + /// milliseconds makes the key presses visible. /// public int KeyPressDelay { get; set; } /// - /// Gets or sets the delay in milliseconds after each mouse event down and up. 'Clicking' the cursor (whether left or right) requires both a mouse event down and up. A delay of 0 (inadvisable) may result in no apparent click. A delay of 20 - 40 milliseconds makes the clicks apparent. + /// Gets or sets the delay in milliseconds after each mouse event down and up. 'Clicking' the cursor (whether left or + /// right) requires both a mouse event down and up. A delay of 0 (inadvisable) may result in no apparent click. A delay + /// of 20 - 40 milliseconds makes the clicks apparent. /// public int ClickDelay { get; set; } @@ -100,43 +107,38 @@ private void DriverCallback() InterceptionDriver.SetFilter(_context, InterceptionDriver.IsKeyboard, (ushort) KeyboardFilterMode); InterceptionDriver.SetFilter(_context, InterceptionDriver.IsMouse, (ushort) MouseFilterMode); - Stroke stroke = new Stroke(); + var stroke = new Stroke(); - while (InterceptionDriver.Receive(_context, _deviceId = InterceptionDriver.Wait(_context), ref stroke, 1) > 0) + while (InterceptionDriver.Receive(_context, _deviceId = InterceptionDriver.Wait(_context), ref stroke, 1) > + 0) { if (InterceptionDriver.IsMouse(_deviceId) > 0) - { if (OnMousePressed != null) { - var args = new MousePressedEventArgs() { X = stroke.Mouse.X, Y = stroke.Mouse.Y, State = stroke.Mouse.State, Rolling = stroke.Mouse.Rolling }; + var args = new MousePressedEventArgs + { + X = stroke.Mouse.X, Y = stroke.Mouse.Y, State = stroke.Mouse.State, + Rolling = stroke.Mouse.Rolling + }; OnMousePressed(this, args); - if (args.Handled) - { - continue; - } + if (args.Handled) continue; stroke.Mouse.X = args.X; stroke.Mouse.Y = args.Y; stroke.Mouse.State = args.State; stroke.Mouse.Rolling = args.Rolling; } - } if (InterceptionDriver.IsKeyboard(_deviceId) > 0) - { if (OnKeyPressed != null) { - var args = new KeyPressedEventArgs() { Key = stroke.Key.Code, State = stroke.Key.State }; + var args = new KeyPressedEventArgs {Key = stroke.Key.Code, State = stroke.Key.State}; OnKeyPressed(this, args); - if (args.Handled) - { - continue; - } + if (args.Handled) continue; stroke.Key.Code = args.Key; stroke.Key.State = args.State; } - } InterceptionDriver.Send(_context, _deviceId, ref stroke, 1); } @@ -149,8 +151,8 @@ private void DriverCallback() public void SendKey(Keys key, KeyState state) { - Stroke stroke = new Stroke(); - KeyStroke keyStroke = new KeyStroke + var stroke = new Stroke(); + var keyStroke = new KeyStroke { Code = key, State = state }; @@ -165,7 +167,8 @@ public void SendKey(Keys key, KeyState state) } /// - /// Warning: Do not use this overload of SendKey() for non-letter, non-number, or non-ENTER keys. It may require a special KeyState of not KeyState.Down or KeyState.Up, but instead KeyState.E0 and KeyState.E1. + /// Warning: Do not use this overload of SendKey() for non-letter, non-number, or non-ENTER keys. It may require a + /// special KeyState of not KeyState.Down or KeyState.Up, but instead KeyState.E0 and KeyState.E1. /// public void SendKey(Keys key) { @@ -179,14 +182,12 @@ public void SendKey(Keys key) public void SendKeys(params Keys[] keys) { - foreach (Keys key in keys) - { - SendKey(key); - } + foreach (var key in keys) SendKey(key); } /// - /// Warning: Only use this overload for sending letters, numbers, and symbols (those to the right of the letters on a U.S. keyboard and those obtained by pressing shift-#). Do not send special keys like Tab or Control or Enter. + /// Warning: Only use this overload for sending letters, numbers, and symbols (those to the right of the letters on a + /// U.S. keyboard and those obtained by pressing shift-#). Do not send special keys like Tab or Control or Enter. /// /// public void SendText(string text) @@ -204,142 +205,142 @@ public void SendText(string text) } /// - /// Converts a character to a Keys enum and a 'do we need to press shift'. + /// Converts a character to a Keys enum and a 'do we need to press shift'. /// private static Tuple CharacterToKeysEnum(char c) { - switch (Char.ToLower(c)) + switch (char.ToLower(c)) { case 'a': - return new Tuple(Keys.A, false); + return new Tuple(Keys.A, false); case 'b': - return new Tuple(Keys.B, false); + return new Tuple(Keys.B, false); case 'c': - return new Tuple(Keys.C, false); + return new Tuple(Keys.C, false); case 'd': - return new Tuple(Keys.D, false); + return new Tuple(Keys.D, false); case 'e': - return new Tuple(Keys.E, false); + return new Tuple(Keys.E, false); case 'f': - return new Tuple(Keys.F, false); + return new Tuple(Keys.F, false); case 'g': - return new Tuple(Keys.G, false); + return new Tuple(Keys.G, false); case 'h': - return new Tuple(Keys.H, false); + return new Tuple(Keys.H, false); case 'i': - return new Tuple(Keys.I, false); + return new Tuple(Keys.I, false); case 'j': - return new Tuple(Keys.J, false); + return new Tuple(Keys.J, false); case 'k': - return new Tuple(Keys.K, false); + return new Tuple(Keys.K, false); case 'l': - return new Tuple(Keys.L, false); + return new Tuple(Keys.L, false); case 'm': - return new Tuple(Keys.M, false); + return new Tuple(Keys.M, false); case 'n': - return new Tuple(Keys.N, false); + return new Tuple(Keys.N, false); case 'o': - return new Tuple(Keys.O, false); + return new Tuple(Keys.O, false); case 'p': - return new Tuple(Keys.P, false); + return new Tuple(Keys.P, false); case 'q': - return new Tuple(Keys.Q, false); + return new Tuple(Keys.Q, false); case 'r': - return new Tuple(Keys.R, false); + return new Tuple(Keys.R, false); case 's': - return new Tuple(Keys.S, false); + return new Tuple(Keys.S, false); case 't': - return new Tuple(Keys.T, false); + return new Tuple(Keys.T, false); case 'u': - return new Tuple(Keys.U, false); + return new Tuple(Keys.U, false); case 'v': - return new Tuple(Keys.V, false); + return new Tuple(Keys.V, false); case 'w': - return new Tuple(Keys.W, false); + return new Tuple(Keys.W, false); case 'x': - return new Tuple(Keys.X, false); + return new Tuple(Keys.X, false); case 'y': - return new Tuple(Keys.Y, false); + return new Tuple(Keys.Y, false); case 'z': - return new Tuple(Keys.Z, false); + return new Tuple(Keys.Z, false); case '1': - return new Tuple(Keys.One, false); + return new Tuple(Keys.One, false); case '2': - return new Tuple(Keys.Two, false); + return new Tuple(Keys.Two, false); case '3': - return new Tuple(Keys.Three, false); + return new Tuple(Keys.Three, false); case '4': - return new Tuple(Keys.Four, false); + return new Tuple(Keys.Four, false); case '5': - return new Tuple(Keys.Five, false); + return new Tuple(Keys.Five, false); case '6': - return new Tuple(Keys.Six, false); + return new Tuple(Keys.Six, false); case '7': - return new Tuple(Keys.Seven, false); + return new Tuple(Keys.Seven, false); case '8': - return new Tuple(Keys.Eight, false); + return new Tuple(Keys.Eight, false); case '9': - return new Tuple(Keys.Nine, false); + return new Tuple(Keys.Nine, false); case '0': - return new Tuple(Keys.Zero, false); + return new Tuple(Keys.Zero, false); case '-': - return new Tuple(Keys.DashUnderscore, false); + return new Tuple(Keys.DashUnderscore, false); case '+': - return new Tuple(Keys.PlusEquals, false); + return new Tuple(Keys.PlusEquals, false); case '[': - return new Tuple(Keys.OpenBracketBrace, false); + return new Tuple(Keys.OpenBracketBrace, false); case ']': - return new Tuple(Keys.CloseBracketBrace, false); + return new Tuple(Keys.CloseBracketBrace, false); case ';': - return new Tuple(Keys.SemicolonColon, false); + return new Tuple(Keys.SemicolonColon, false); case '\'': - return new Tuple(Keys.SingleDoubleQuote, false); + return new Tuple(Keys.SingleDoubleQuote, false); case ',': - return new Tuple(Keys.CommaLeftArrow, false); + return new Tuple(Keys.CommaLeftArrow, false); case '.': - return new Tuple(Keys.PeriodRightArrow, false); + return new Tuple(Keys.PeriodRightArrow, false); case '/': - return new Tuple(Keys.ForwardSlashQuestionMark, false); + return new Tuple(Keys.ForwardSlashQuestionMark, false); case '{': - return new Tuple(Keys.OpenBracketBrace, true); + return new Tuple(Keys.OpenBracketBrace, true); case '}': - return new Tuple(Keys.CloseBracketBrace, true); + return new Tuple(Keys.CloseBracketBrace, true); case ':': - return new Tuple(Keys.SemicolonColon, true); + return new Tuple(Keys.SemicolonColon, true); case '\"': - return new Tuple(Keys.SingleDoubleQuote, true); + return new Tuple(Keys.SingleDoubleQuote, true); case '<': - return new Tuple(Keys.CommaLeftArrow, true); + return new Tuple(Keys.CommaLeftArrow, true); case '>': - return new Tuple(Keys.PeriodRightArrow, true); + return new Tuple(Keys.PeriodRightArrow, true); case '?': - return new Tuple(Keys.ForwardSlashQuestionMark, true); + return new Tuple(Keys.ForwardSlashQuestionMark, true); case '\\': - return new Tuple(Keys.BackslashPipe, false); + return new Tuple(Keys.BackslashPipe, false); case '|': - return new Tuple(Keys.BackslashPipe, true); + return new Tuple(Keys.BackslashPipe, true); case '`': - return new Tuple(Keys.Tilde, false); + return new Tuple(Keys.Tilde, false); case '~': - return new Tuple(Keys.Tilde, true); + return new Tuple(Keys.Tilde, true); case '!': - return new Tuple(Keys.One, true); + return new Tuple(Keys.One, true); case '@': - return new Tuple(Keys.Two, true); + return new Tuple(Keys.Two, true); case '#': - return new Tuple(Keys.Three, true); + return new Tuple(Keys.Three, true); case '$': - return new Tuple(Keys.Four, true); + return new Tuple(Keys.Four, true); case '%': - return new Tuple(Keys.Five, true); + return new Tuple(Keys.Five, true); case '^': - return new Tuple(Keys.Six, true); + return new Tuple(Keys.Six, true); case '&': - return new Tuple(Keys.Seven, true); + return new Tuple(Keys.Seven, true); case '*': - return new Tuple(Keys.Eight, true); + return new Tuple(Keys.Eight, true); case '(': - return new Tuple(Keys.Nine, true); + return new Tuple(Keys.Nine, true); case ')': return new Tuple(Keys.Zero, true); case ' ': @@ -351,18 +352,13 @@ private static Tuple CharacterToKeysEnum(char c) public void SendMouseEvent(MouseState state) { - Stroke stroke = new Stroke(); - MouseStroke mouseStroke = new MouseStroke {State = state}; + var stroke = new Stroke(); + var mouseStroke = new MouseStroke {State = state}; if (state == MouseState.ScrollUp) - { mouseStroke.Rolling = 120; - } - else if (state == MouseState.ScrollDown) - { - mouseStroke.Rolling = -120; - } + else if (state == MouseState.ScrollDown) mouseStroke.Rolling = -120; stroke.Mouse = mouseStroke; @@ -386,7 +382,7 @@ public void SendRightClick() public void ScrollMouse(ScrollDirection direction) { switch (direction) - { + { case ScrollDirection.Down: SendMouseEvent(MouseState.ScrollDown); break; @@ -397,7 +393,9 @@ public void ScrollMouse(ScrollDirection direction) } /// - /// Warning: This function, if using the driver, does not function reliably and often moves the mouse in unpredictable vectors. An alternate version uses the standard Win32 API to get the current cursor's position, calculates the desired destination's offset, and uses the Win32 API to set the cursor to the new position. + /// Warning: This function, if using the driver, does not function reliably and often moves the mouse in unpredictable + /// vectors. An alternate version uses the standard Win32 API to get the current cursor's position, calculates the + /// desired destination's offset, and uses the Win32 API to set the cursor to the new position. /// public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) { @@ -417,12 +415,16 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) else { var currentPos = Cursor.Position; - Cursor.Position = new Point(currentPos.X + deltaX, currentPos.Y - deltaY); // Coordinate system for y: 0 begins at top, and bottom of screen has the largest number + Cursor.Position = + new Point(currentPos.X + deltaX, + currentPos.Y - + deltaY); // Coordinate system for y: 0 begins at top, and bottom of screen has the largest number } } /// - /// Warning: This function, if using the driver, does not function reliably and often moves the mouse in unpredictable vectors. An alternate version uses the standard Win32 API to set the cursor's position and does not use the driver. + /// Warning: This function, if using the driver, does not function reliably and often moves the mouse in unpredictable + /// vectors. An alternate version uses the standard Win32 API to set the cursor's position and does not use the driver. /// public void MoveMouseTo(int x, int y, bool useDriver = false) { @@ -437,10 +439,10 @@ public void MoveMouseTo(int x, int y, bool useDriver = false) InterceptionDriver.Send(_context, 12, ref stroke, 1); } + { Cursor.Position = new Point(x, y); } } } -} - \ No newline at end of file +} \ No newline at end of file From 3834239c11d154b074e31c5d63379e24b749d1e3 Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 19:17:04 -0400 Subject: [PATCH 06/21] InterceptionDriver.cs Auto/manual Refactoring --- .vs/Interceptor/v16/.suo | Bin 61952 -> 61952 bytes .vs/slnx.sqlite | Bin 229376 -> 233472 bytes Interceptor.sln.DotSettings.user | 3 +- Interceptor/Input.cs | 23 ++++--- Interceptor/InterceptionDriver.cs | 86 ++++++++++++++----------- Interceptor/KeyPressedEventArgs.cs | 4 -- Interceptor/Keys.cs | 7 +- Interceptor/MousePressedEventArgs.cs | 3 - Interceptor/Properties/AssemblyInfo.cs | 1 - Interceptor/ScrollDirection.cs | 7 +- 10 files changed, 66 insertions(+), 68 deletions(-) diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo index a4954a33effaf8af0c5f1c6d4fac90c61ff885e7..7809d9386d1e7d9048fb51c21c8fc184ea23614f 100644 GIT binary patch delta 164 zcmZp8!rbtLd4d5W!$d=AM#jktS%fzx@G!AH2;UK3yt$C6pOKe~fq~)g|NsC00Wlv) zfh33}3KSIvVjvR?Kw=z|Ed}IRnSr9bAa$DySaKLA-w{+<#KyCThiQ=r)1n-vMQkjS zgf1zHMozUWT{bap@|KOi&PX{_aa}0(c$N7%g^N?*x`F)dNCuDrli7rSEt0ze0HX9m A5dZ)H delta 172 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%0DH#}A?+ zu_Goc98azvL>c0$*o^QvlJgKs6SbI(@L1xYv@NP6JcjIf2u&4N#7qj0Cck(HO%#_$ zPYTD8Ym_dFE(nhzlMbOgap~}!a4dPOA7zP4;&Q?x$vH|F106x4!$22CEe{VTHDRlT$Vxg;#^-2ttcE>8&?N!bpV)KVx`AnSLaBBeym31hf1 zYBm|~LosC84iurlI~7rxCg+6_`EUoyp@%`(Ko5f{Vo~I@{s39N6SQ3*7x!-_5A8&S zupdt74)NNgfUx1$8|@h+r9vA5r}7a4L{e=l5}IFF#aQ4+fvG5Bs=RMMfQ z9`fG3P*WPz?n#1@uiO#NcD_*SnX1)tY2A=SvOm2tivEs;0KnimN^z#Ij#hh*@_Ck`5%y1$m7fx%+H$d zH7_@hF@0cq#D;6O3OPe{TG)vE7&`yd@kI+Jtl* zbqPO-*WzjDBHE9tP?X_!hVSkvj}dbF*N|6tp=@a)^rc%NuXKZSC&*d-9wMv(T_r`% z?RS%cHKSj>9oP?;stNjt1%^4^tWkL)=N; z^upAQf|2PUqkSk>iG}J`!O+GulRxc1!-?C6V#Sg2^nQ)(^q~@Qc;t-!cJitZW^NeF zTpNk)-`y6{VT~aO2G~6UqLQXs>Oqr4B{HLbDe?8dVm8Gl_b<`QUQUn{qoptuAmeouO}@AfHsdE_3PYP|da`&w&`o5i zj*4(-BOyAPjzb&B8#*e%q4i|M{m>LGCO5Q>JaRwyFDHPmCBLQgxtQ!wFDZWjw(ci@ z_HcS2rZnUy{s-W;JBDY3d}R8A(3F)ilR{qNc@TDxikP&}8gk%4Xlq_XeyE$Aeh`F| z6H^lM?A-_JDXX|B69jr(9}rAHTpT;%C}FnOubQ$wrC<$bW9B}V6j z?jY&=VY3+>Gd<)aEBC{q9Ti^{>V%=snMd~cK-HUdBoXXI!%P-AId2&!26v3elF7FpL~)XA8I~Msr(XLw^&P96dd>QXlq8iDHhK8d^b%TcYndJwo@qGDbATRfd-9yI+|h zics=0RqCb5qM-=6v&|>}KsVO!gGAXnO@(ud$ zql}i4&_ccL^i)xfDGDvncb=Xinqvz>^YxRb^F&ijS!kaA)#*}JSqoH_C<>Ozp=R<* z5BS?IdUhufu@}V)wV^(;@P7EA`1MqJj7qlU2K!SGSTxag-gd~g+%^^#W4!5#>7?l( zJi10mFG%a8bn$}thVg{g5AFeLJNFOnPACtyasS{>D6N(I2chKJpo94bwylXZ!IdzOH$9(< zn-gaRS8!ip16*FteT8+&rNL!`zCv*6psx^IGUzJ=7Z3Uh!9|0>J=L1RDmOg<$=lvk_KNCIBU>Z2-Xfd3&EN}XCXLq&{+sp4>}9MszGNVSUKn{1S@$CEe%K+Yx=YBl>Pf z^bN!j{$ho4`bvOjFU)4s*tYj@dO z?eidDZ>l}hKHeT}H`%_hU9z3C{mS;d?Qz=y+ugQ4n-e}yTV$JQ%d?Gv&(j3;Q}tc- zb@es%xcYDK%J@DtpnBAmY6E0)5 zFH@tCPT4o}+=p*J_wo&oF6+RjUi5p1 duk`reMBo0d3qsp(f7f;UyRL8gyDluK{|6E{lac@c delta 14290 zcmdU0d3;pWy}xJf+?l!C+yn^wP6C82gaimn2q6oEErBG2J((nzWFVOtW+nl>aC* z>=@vHP=RV?5fnvST4~W*AA+bw#eJ)`TI*7M?Q5-7-|u%$mI+(w^4|Nr{PF$%&hMUk zmftz|+;iuAvu3}0%^LUCZc?Hk2x;4TXOP4P%VLvkr2a%G>Agtg_Pw>6HpI#ffe_+Q zMA7wn&aBbvRWa7ZU3!!2_9xztb#hm1l*_?g-J)C)cWF^BJ9oLGTq1X!xbVP;m>ALc z0$L|@HNG+aWPD-7oak`+1ta43E%8>>1wCP}-v?K_STg}TTipRWmDm7@@hPCt-T2gX zo8wjEHp7&5t4Gu`+C}vdu}tl68zb7ZD*GSQ4aOH@Ses?PUCYq^(->fMaUXR5&b>m} zYOk}M(l;nSmmRj-v?pBu<@#LjtnASixnFlzMf5UljM__iS9w)=LG7%@s){Nqe^dUX ze6DBNOhi`uBF%~iXYp{wW02g`eVx7+Fg=te_6C_4=J_wz3yE7bN!GWmWPTP z#n;8h#02q&+5oMO{=EHR*B)_->qeL9nlHA~FY3$W82evc*{)%(j;?^#O^FAaE zbDtyN-0Ub--*A5FIAuGe-ldFjo_1_=KIFLBe#-HQm?C{F{lz`R<&dU1oQ^)y)6zw0 zwR(?kxVAaoQ)bBx@?m+eyhVOd{)POA{Ac+S`EA862b9iosXRf>*LLZ1ZSUI7X*U^~ z`%d?_?hVFW+8xSDWnDzAH-7CtseLH-R2CU87{|0T+9TpO%1Jfd`L^SJ=M9c&&T7XP zb*l44#{vC2X`oTB;|yY&Y6`wlZ5gTY_!2J=vbG z_f@~rho~v;zWUSBMEh^-XSCzm^Tt$Zq3cc88P^FtSDpW{UZCA$+pDit&bYo)k4wk3 zr|bjl?c8VFbCf~u81)IMk6Y1>NL|&ZbO%lZL1-rquoarV%IW5ka8`}CVi~cu7ZaIl zhQBUk=G2?MFd>b--|ZA3f-d%8mx|1lVd4Ac)HHKdNcc_@yRmDK626U2{0$4t4tnd& zV3wz*rrcApO!!6>yV#0-HGWT}@K;%kvrR|qYenp2%ku^5!opv$@Jh4ZTVdu^3V+5T zBKbbnq=KLs3YnF{f5nOkwtOGd*X;RIjM&dsSP}Hs)MT4Ao>jsh4Y7}nb&IF}6T91d z19yFe73GDnekk+H4&q=Nt0mW46E=f0{FSEghfZQL+|^k1W=ur*0-I9N)Q_U-pb72% z9J^cL_k}SmpS5=4Q*2KjxPujDAnXqczsHPuAy$F#3D#WNocbL$H7^8>EBAYXmBPn( zFI;VLeB>5;*&=zNJYT)1##<@;7W*>U3{QdFD?C9A({Hf&*=B_au@*kWu;S1PA7H0S zJl=4LH(Xuhtu_4+;9uiqbPDfd!G&g+_gHujlTdC`@?Abd!Vu#Mvod1(Doo*>rmDG* zx!z`jY=*)?|EjE}NW6vFvLHfXv)T0~hO#9huuSoJA-v%d+vC6puVeIhd|tyjQV0bu zGlf@qB$q_|!CJn&UBrxqVJKU81-p`kBlR-29g1nX>!qfj(pjm!TjTx%I zqRw^{lWdvcaL`*`7dAs#)gE6J%&liJM032saGeLHXJ}d29}v#q9L7>I%R~Me$SwRw zvu8HU;4lv4GdMH&oMg@WC3I5b4!l!%y7BwhI!A7lGzXKgYpqaj-l;!wEaXTUl9SLMf+MvsenQ zMts5(ESy*oT>UAI1gnGH`V$;WEDbI_j>VwOt~`b#pIK8QJc^?@)9*8dN3Qe`p2P<7 zXPXr(JdE{o2NWiTg%k9>4Pu9g@KEaoR>Ol>AI}K2AIHw~R7;2+xGY5XUm--tE)CJq z%R_XZ9*K_8kv1{%35TOYbf|5J4n~FO-ZmlnF)IaEV?N*S;p@?=A~RSU3f9k=Rsc(? z85Zu26NlQoF#Ve@6jpmG{VRkYp*zZJhNtIb3kPtLgEuEx*xzgp7xp!o5U9Jbt&oAm z@Q2N#w6|rH_B49l>=+U5#KF3>CA%>)ZCkM`+QpkdonovF>fgzDxUd5mYTk}@uxcAI z4$ubP?>jJHu;x_4yoM)b8;nP!buoeEbt{h0%(~iur*ekZR~HhtVC1-?pa#;LTQlU~ zvMg-Ek>?rUbznlN8?oEmGhEovnn)4Wwq-`GYrQl|xV1GgQn;lxkt(cf zO^gxNwkFbqn_Cm3g$A5_ya|~hXr(u_Ot7LF>aF*}TDQh6_92lHuMfr;-x3j*7)NH9 zzPi_G}VRVD_0 z75Xtz99W4akIf3F*q-G0D(kVPDgIis&J_U*ALXztb|UP#4B zBEUJ>&w02HFXxV_Wt3LKX!J5hqn0un>1C8!%_yac(TF9Cl1*%GmM1v?Z|;g^l~{dY zz*AvXpr17)vnE`Qkzk3!YVVS;r@NR=XnKTnj+Au}hmryat-q3I4hH=zO52HvB+Fl0 z>%lH%qHD1v8f3;I#F+~bCoMpnGaoT)9^%}&i1SNg#Q|gzJcywhPpG=U8!+eSVlNgP zR(UZtvB+CfX%@wakt9+GZ;BcSc3pXmIjhbeHVd)#LbKLe;ji)gvJhrt$cPAfp1 znvXbTCgS87h`G}dv!@{zPDRYj!vV(^F6@J*V6AMbPmU9lNLGzMWKIftA{DS+09Tl~ z7>N9U>BCgBGY88l$VSZ1Ld=_lSe%JCZz5t*2IA}qh&kzqCF2oijl=OR@|2Io-m`e% zu#CZxz(+7=IlTQsku>aVHUz5JS7`=A75<<(8Yj+tGw2_M#!Roz9LXAwFO*a^z9#HN zQ?U3#@5&LFDHmRk$;|NA1&6Z$!-mXEVog}#ABLRoGl$|7&Iwg`0_G6RJ5q|~;_<-?u`+=*5%(kUSS>t| z{W^&$r1AY{+h_H?KY>^ zkP=VO2a{_xV@1fmHuA{6%c!l6z$7Ws8y*k%`a!qpw| ziOCOyy|vyO%s3piY_q(ss%TZf?0}h zuEu@uc3j$80XE!$Z7K-*m%_MBuJcw(cvoRXwOQ+dmwpI_($2aT^jFqZgqvI#z-T{NHqG<`32;;j)rNJ8uN@o zV}>!=$TWHwos3vRJ<%s-k~88EiA^T;oa#7*IfXdEqKR3Sa|&?sbAlBUufd9m1S=*I zte8l!Vj{tci3BSq60Dd=uwo*ajtJvQo~+35ty z=JXM#-*Wm5rw=)O;1DBt8mng40u+p5%0z z)6bD2itsa@JjLk=PCw=J6HbqFdW_SfoF3tHlGDSSPH=jN(}SFjb9#W&{hW?5iU>z} z@;**SI34D6h|@t%_j39%r+YZv&FM#+4shDfX&WoHldX#Azd^4V>0c%&CEs#c7Qs z5~4>Ku4Z@>!yhobk>L#tS20}4a0SD9hII@hVMZZ_L59m21{nGo`WV(StYNr};ZlZP zhSdzK7%pLGGOT1+!LXd6hhZ7RQr-jD(m-!uO9Kd78bH|60K%3A5Vkacu%!VkVK|3j zF~cH;g$!YH0(oF_0tlNEK-ioB!sY}JHYb3vIRS*t3E)%-)*qthvBVUHlNshRggpmb zg*^u#>^T5o&jAQ~4nWv*0K%RF5cV8^u;&1TJqO@8hGQ9yVVK5nG{aF0M@q2%5cmxe zZ%AP{f?+bl;S7@)4r4f!;Sh#{84f~>O=LKb;Q)sH5w!${@eKPh?8~qZq8ncGqz`e! zdma)!8TMeNUwv-O_ZU$hI_QSBD3OdG4UQ$JCkQunGsHCOGfe5IUK z_9{MQyyBKG%J<3vIaiKxz2e#lzo@3VMCS$P0cXIO;dDFRb{usqcceLpbVk}Q1*Az* z`>ytn?WgQ_*k{>e#B<{9VgY>6zhT>FtF$FPdS`&NC-n3-k|_0+XIg#e=iA71sgImy z^`;qjkWo@^FniG((Ch_fPkIu~p7MCB2mQkxWUSOfPPMwzq((AA>MoD6y3r+#BvtAr zXINe7zDANRb%~v1b)oM!l8I8BJi+Qr`)?=Xr4C?rqE%?Nmj_xM>7nhUztj%QIQkNr zv0!$f-=P^J53$>z_BrAvYp(>U>LUx(sUM_C4) zzYp5599rh4jX`Kx09vNgvqA9sp%)qzL(mJKJj_z*gb*1b)q<%|KbkdQ%5*=P%fNKe zU!l1aOeeL4!SsUZpeblpgDKHUG^@b0(;a9o0aK*UplO0>qkl%T5@JT^z&eOo1++n+ zRdr;Py&>z*25q6I}a5a6sj`X*e$*DI{dp-C{X30N;Fh$O<|Nt$A|)dTOp9@%Fj$z&g5l1(aMO z4-C`C(V8O<3egW&kb(AMd0>#nt^{9^9KW27UrGAf3+4U+TCo!Doh|qG(~W4&lKcDU zNwf;&_*(i7=F6AkYpApeteJBBGCBmU8FKtmT8P$kIo?ZeKx>*DUri67HC2wUqGxXc zD^HGJLcc_7iX3m!&a1(iEDx`w8LP>#m|S^Kg(8qnV~7l=HDY1o3%`t0*>|F(=g7m$ z=|0G1&z4g?^ulV0RF+&&M&$^ZX`dudETs!0WP&|Y9>19Gi;%JQiE`gX^qmOlZO@SV zE~IBxfi*$yyMTTM*1&YR?|i7sNal6TiTbt}244fAVRIyXyxeyl9eo4bH%{(5mo5Y= zGFH~%(H-CciE->EOsduy+1 zcWMi?Uh41Elj;gJUHMjdQi&*;^4Ic7d6}HxddYQ@E8V3!&pK~+W;?!i-0R43#7b{V zhsERKIx*Y!we2VzE_5I-5@REoO>Dv$;WlW6AoZb7u7SC=Gk&yHvC|?W9gXobta61O zSW2ckwu0BA&@Y#gRL7?HOshCr`E}(sjp3 zj$?|PX=Nz1tQ;aaSuix7SfC62Z?Gl{}L-HIj~NSr;o0O zbuwEXV~wLWEBqjzwZ6#%rJlYxqm%7ZN$F`CltUMim z^e7HUFpI`nY4m{&WQ;UXPPRtV&o)4CGUOC%6z#K-Buf*Zj*+xvBN;7?j~#EN(#DN2 zWzyuaRtmkak)%nZn7H8zoKX%u*q>D*1=9SO_laJpj?ET5?m$t3#xCWvGTgl`ya zznP3zMu2xHv?{TLu0KW+=;_VGLDz03F;X(DdPC^$%}~v7d7?F#zP1?xlmrD1qTRNT zRAm@clL)u=$)``OCw=&>Yqk(g8Vc+8K)P)UtlvXm!5l!(Y=K34usp)*PY-P+!y|)a z-PKP>vwa}A`|E$zpVv3*i}hjJ-?X1;+ci@gtA4HC@4V<-@0{THtK$*J4;(|JucU{J zhv5}G!2Q1aF85;f7PV9zq+;bPwWX5;@^q>F-vS>T0=d3X9qOwzPPl8I@)C?n0J5~rbRo+7+XV#ZrMpP zYz;yB;!cuoYgkSV3KOm@F0Ua#AKeEJ+ph+VXz^xYiZNU`YfxNz!xGweH#BVE*f9+zE#D3EZ9v-S zhDv(ZZZc9z=rFROg1)w!q)7cbjB6;TF?W(Nj-DNo8$8O+axzTm5|`0X26JL?K3%vG z=ER{pNhhgO@0^BG`t+S7OKR6|V#8vp?SYx3cOKEOi01Esh-sbU8y3>Fdq`hNX_wHj zfNcn5m)g8;No?Jsiw{EZR(2U^&7=Dc!tNqCc!)KZo;?V=i@?wURtf$3AW4vX?Z;Vj zXy#gYl$Lf%vWlta5UdT}E<>#%`ruj!Lv`FxtB}5r=92d5)@&NP4mw=kDbbomXRU+a zcseFp1+?@qm}MPDTKROtVd!uvjM`F4?uNXFdrY*vH1lp)h7TrWS=9=4dC5e_fgZV5 zl|pBFNtR<@LZ-Duq0|d`_QvN~rb6HJlHADdct!k1xLN$6WGD8H(rodJcto3axiUcQ zFa1>VH0uJctP0?o0O{pRH38R<1VsL>CcqwVf3~eAz@CJf0DDoiCP3=JH38D{D`*0) zAPKPlmP-O6t(pL7?f;Y};2M&E$p3~W;2M&E$kj9fwlbmpC7J+mbwC$8Uu@C@h~JP( zINOBZjp2-<$d7xR9A8~65#Yi!%*<5+wsXQjOyTu5DuKv#$OND$a=AUF`fmN{ z41h0^SkWvQfK+$hp-;h#joLc?>ym-1Dh47NEYGA zAZsI8h^J^#Z6piuU@l5BAWamcLcF^e1pgtiun#BU@$AWgf zVgW5jNa11uEhi!*UM?1Z46sN0C&dEVO@iZ}5({Ye2z{<17SIjB(JU6wo)S7Yiv_^e ziZZk_u*-lS?olkDeJFG&84u{bnpgnDsm9+C3+R1?c1$b)hJ1-wK+lDj^WPB*=xc?p zsNQT93+USg*L8~pATvzYRi zjZR!IcDh_JVB96NyIe4U$0@UTzphg-05|joNkOz=09)4FV_S?kKn9IPs{&t9z7rZ; z=LzWZUolP@_qm6=&KtXp)y7K0Z$wOEfst=a0`b5=qnqJ2i2IN3kKAv#&$}N7t^E%7 zT6f4@;a=n}R;R0J?yhd#E$CnBzt&&U&+Di4llp$WQD37k*URnnGr>mAjme4)IhTu`1+9#)Ph`<0!_24#&BhLfWu$}}ZW>8ObE=kka08}bGD zIr+5wxcrcOM7~GfDzBHU$@{@Yp)#Aq@dpmGFdI-19=)>P9xhsew9rpC&iZZ{XN!81gG;mUgdYUGMFDCe! zJGUoFM55$!pe&(9w~M_ZxDUUEIvR^88IKLSRJ)5;=FD#vEpq)3C^wjls8!!i;N%vy zQ_Z3zCR1WMFfLfiz(wd^5K%HcvQ0S0^fD1v3#hNK&Z3NH1vP%X@Gapht>*a_l~H_) z)ty;POoyeR*b22{m%oEpKDN&CA%d^F2#UnHMjSsrqEzKD_;&mxZ2n<@_?uJs!vOK2 z0J7<40#X~DsKL;;{ir8PPz@O^{U;_)rNW9xi}s&@Ca_umeg$P6n`msoZdC!Z1~DJ( zE06O6vAm{F2%JArJ0<+sYWbo7^)ae!3+Zn*h{hEp$X61RwN}8UKM7whQo>OzoO-$B z3FFiBN)TR%7L&0Hk!B4xOEo1xZQMo+d70$-$;&)f5<#EFz_ot;u?sOS>x!CO=7=cT*BpTk*Z>$QTuu9PU{{ajYc+!y;H8J z>WtE|GKE*O#uck9$fg%JiIZUsxPl5&XtO*`T1D#EtbwJ74H*9!jOkl(-+;yCXW^{i z9|V^Qj+;I*uuPsIN`V~Vp6n)NZ$Xl#ExK6Xp83t$O!mIwv#023i_8DIVt^fAW>}mbih^zgF c1O5X - False \ No newline at end of file + False + True \ No newline at end of file diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index cec6f46..b43bfa0 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -75,7 +75,8 @@ public bool Load() _callbackThread?.Join(); _callbackThread = new Thread(DriverCallback) { - Priority = ThreadPriority.Highest, IsBackground = true + Priority = ThreadPriority.Highest, + IsBackground = true }; _callbackThread.Start(); @@ -104,8 +105,8 @@ public void Unload() private void DriverCallback() { - InterceptionDriver.SetFilter(_context, InterceptionDriver.IsKeyboard, (ushort) KeyboardFilterMode); - InterceptionDriver.SetFilter(_context, InterceptionDriver.IsMouse, (ushort) MouseFilterMode); + InterceptionDriver.SetFilter(_context, InterceptionDriver.IsKeyboard, (ushort)KeyboardFilterMode); + InterceptionDriver.SetFilter(_context, InterceptionDriver.IsMouse, (ushort)MouseFilterMode); var stroke = new Stroke(); @@ -117,7 +118,9 @@ private void DriverCallback() { var args = new MousePressedEventArgs { - X = stroke.Mouse.X, Y = stroke.Mouse.Y, State = stroke.Mouse.State, + X = stroke.Mouse.X, + Y = stroke.Mouse.Y, + State = stroke.Mouse.State, Rolling = stroke.Mouse.Rolling }; OnMousePressed(this, args); @@ -132,7 +135,7 @@ private void DriverCallback() if (InterceptionDriver.IsKeyboard(_deviceId) > 0) if (OnKeyPressed != null) { - var args = new KeyPressedEventArgs {Key = stroke.Key.Code, State = stroke.Key.State}; + var args = new KeyPressedEventArgs { Key = stroke.Key.Code, State = stroke.Key.State }; OnKeyPressed(this, args); if (args.Handled) continue; @@ -154,7 +157,8 @@ public void SendKey(Keys key, KeyState state) var stroke = new Stroke(); var keyStroke = new KeyStroke { - Code = key, State = state + Code = key, + State = state }; @@ -353,7 +357,7 @@ private static Tuple CharacterToKeysEnum(char c) public void SendMouseEvent(MouseState state) { var stroke = new Stroke(); - var mouseStroke = new MouseStroke {State = state}; + var mouseStroke = new MouseStroke { State = state }; if (state == MouseState.ScrollUp) @@ -404,7 +408,8 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) var stroke = new Stroke(); var mouseStroke = new MouseStroke { - X = deltaX, Y = deltaY + X = deltaX, + Y = deltaY }; stroke.Mouse = mouseStroke; @@ -431,7 +436,7 @@ public void MoveMouseTo(int x, int y, bool useDriver = false) if (useDriver) { var stroke = new Stroke(); - var mouseStroke = new MouseStroke {X = x, Y = y}; + var mouseStroke = new MouseStroke { X = x, Y = y }; stroke.Mouse = mouseStroke; diff --git a/Interceptor/InterceptionDriver.cs b/Interceptor/InterceptionDriver.cs index 057f19c..5fd0e80 100644 --- a/Interceptor/InterceptionDriver.cs +++ b/Interceptor/InterceptionDriver.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; namespace Interceptor { @@ -53,7 +50,7 @@ public enum MouseState : ushort ScrollDown = 0x400, ScrollHorizontal = 0x800, ScrollLeft = 0x800, - ScrollRight = 0x800, + ScrollRight = 0x800 } [Flags] @@ -73,7 +70,7 @@ public enum MouseFilterMode : ushort RightExtraUp = 0x200, MouseWheelVertical = 0x400, MouseWheelHorizontal = 0x800, - MouseMove = 0x1000, + MouseMove = 0x1000 } [Flags] @@ -92,18 +89,18 @@ public struct MouseStroke { public MouseState State; public MouseFlags Flags; - public Int16 Rolling; - public Int32 X; - public Int32 Y; - public UInt32 Information; - } + public short Rolling; + public int X; + public int Y; + public uint Information; + } [StructLayout(LayoutKind.Sequential)] public struct KeyStroke { public Keys Code; public KeyState State; - public UInt32 Information; + public uint Information; } [StructLayout(LayoutKind.Explicit)] @@ -115,60 +112,73 @@ public struct Stroke } /// - /// The .NET wrapper class around the C++ library interception.dll. + /// The .NET wrapper class around the C++ library interception.dll. /// public static class InterceptionDriver { - [DllImport("interception.dll", EntryPoint = "interception_create_context", CallingConvention = CallingConvention.Cdecl)] + [DllImport("interception.dll", EntryPoint = "interception_create_context", + CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr CreateContext(); - [DllImport("interception.dll", EntryPoint = "interception_destroy_context", CallingConvention = CallingConvention.Cdecl)] + [DllImport("interception.dll", EntryPoint = "interception_destroy_context", + CallingConvention = CallingConvention.Cdecl)] public static extern void DestroyContext(IntPtr context); - [DllImport("interception.dll", EntryPoint = "interception_get_precedence", CallingConvention = CallingConvention.Cdecl)] - public static extern void GetPrecedence(IntPtr context, Int32 device); + [DllImport("interception.dll", EntryPoint = "interception_get_precedence", + CallingConvention = CallingConvention.Cdecl)] + public static extern void GetPrecedence(IntPtr context, int device); - [DllImport("interception.dll", EntryPoint = "interception_set_precedence", CallingConvention = CallingConvention.Cdecl)] - public static extern void SetPrecedence(IntPtr context, Int32 device, Int32 Precedence); + [DllImport("interception.dll", EntryPoint = "interception_set_precedence", + CallingConvention = CallingConvention.Cdecl)] + public static extern void SetPrecedence(IntPtr context, int device, int precedence); - [DllImport("interception.dll", EntryPoint = "interception_get_filter", CallingConvention = CallingConvention.Cdecl)] - public static extern ushort GetFilter(IntPtr context, Int32 device); + [DllImport("interception.dll", EntryPoint = "interception_get_filter", + CallingConvention = CallingConvention.Cdecl)] + public static extern ushort GetFilter(IntPtr context, int device); - [DllImport("interception.dll", EntryPoint = "interception_set_filter", CallingConvention = CallingConvention.Cdecl)] + [DllImport("interception.dll", EntryPoint = "interception_set_filter", + CallingConvention = CallingConvention.Cdecl)] public static extern void SetFilter(IntPtr context, Predicate predicate, ushort keyboardFilterMode); [DllImport("interception.dll", EntryPoint = "interception_wait", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 Wait(IntPtr context); + public static extern int Wait(IntPtr context); - [DllImport("interception.dll", EntryPoint = "interception_wait_with_timeout", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 WaitWithTimeout(IntPtr context, UInt64 milliseconds); + [DllImport("interception.dll", EntryPoint = "interception_wait_with_timeout", + CallingConvention = CallingConvention.Cdecl)] + public static extern int WaitWithTimeout(IntPtr context, long milliseconds); [DllImport("interception.dll", EntryPoint = "interception_send", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 Send(IntPtr context, Int32 device, ref Stroke stroke, UInt32 numStrokes); + public static extern int Send(IntPtr context, int device, ref Stroke stroke, uint numStrokes); - [DllImport("interception.dll", EntryPoint = "interception_receive", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 Receive(IntPtr context, Int32 device, ref Stroke stroke, UInt32 numStrokes); + [DllImport("interception.dll", EntryPoint = "interception_receive", + CallingConvention = CallingConvention.Cdecl)] + public static extern int Receive(IntPtr context, int device, ref Stroke stroke, uint numStrokes); - [DllImport("interception.dll", EntryPoint = "interception_get_hardware_id", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 GetHardwareId(IntPtr context, Int32 device, String hardwareIdentifier, UInt32 sizeOfString); + [DllImport("interception.dll", EntryPoint = "interception_get_hardware_id", + CallingConvention = CallingConvention.Cdecl)] + public static extern int GetHardwareId(IntPtr context, int device, string hardwareIdentifier, + uint sizeOfString); - [DllImport("interception.dll", EntryPoint = "interception_is_invalid", CallingConvention = CallingConvention.Cdecl)] - public static extern Int32 IsInvalid(Int32 device); + [DllImport("interception.dll", EntryPoint = "interception_is_invalid", + CallingConvention = CallingConvention.Cdecl)] + public static extern int IsInvalid(int device); - [DllImport("interception.dll", EntryPoint = "interception_is_keyboard", CallingConvention = CallingConvention.Cdecl)] - private static extern Int32 _IsKeyboard(Int32 device); + [DllImport("interception.dll", EntryPoint = "interception_is_keyboard", + CallingConvention = CallingConvention.Cdecl)] + private static extern int _IsKeyboard(int device); - public static Int32 IsKeyboard(Int32 device) + public static int IsKeyboard(int device) { return _IsKeyboard(device); } - [DllImport("interception.dll", EntryPoint = "interception_is_mouse", CallingConvention = CallingConvention.Cdecl)] - private static extern Int32 _IsMouse(Int32 device); + [DllImport("interception.dll", EntryPoint = "interception_is_mouse", + CallingConvention = CallingConvention.Cdecl)] + private static extern int _IsMouse(int device); - public static Int32 IsMouse(Int32 device) + public static int IsMouse(int device) { return _IsMouse(device); } } -} +} \ No newline at end of file diff --git a/Interceptor/KeyPressedEventArgs.cs b/Interceptor/KeyPressedEventArgs.cs index 754cda1..ad07587 100644 --- a/Interceptor/KeyPressedEventArgs.cs +++ b/Interceptor/KeyPressedEventArgs.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; namespace Interceptor { diff --git a/Interceptor/Keys.cs b/Interceptor/Keys.cs index ef33e14..01776d0 100644 --- a/Interceptor/Keys.cs +++ b/Interceptor/Keys.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Interceptor +namespace Interceptor { /// /// A list of scancodes. diff --git a/Interceptor/MousePressedEventArgs.cs b/Interceptor/MousePressedEventArgs.cs index 8884535..47d3701 100644 --- a/Interceptor/MousePressedEventArgs.cs +++ b/Interceptor/MousePressedEventArgs.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Interceptor { diff --git a/Interceptor/Properties/AssemblyInfo.cs b/Interceptor/Properties/AssemblyInfo.cs index 6dab51e..830a9a8 100644 --- a/Interceptor/Properties/AssemblyInfo.cs +++ b/Interceptor/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/Interceptor/ScrollDirection.cs b/Interceptor/ScrollDirection.cs index 2e3f4aa..31b289d 100644 --- a/Interceptor/ScrollDirection.cs +++ b/Interceptor/ScrollDirection.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Interceptor +namespace Interceptor { public enum ScrollDirection { From 07a4c3ea2a1a689e88288cbd46f285416c010faf Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 19:19:40 -0400 Subject: [PATCH 07/21] Last bit of refactoring. --- .vs/Interceptor/v16/.suo | Bin 61952 -> 69120 bytes .vs/slnx.sqlite | Bin 233472 -> 233472 bytes Interceptor.sln.DotSettings.user | 1 + Interceptor/InterceptionDriver.cs | 1 + Interceptor/Keys.cs | 12 +++++++----- Interceptor/bin/Debug/Interceptor.dll | Bin 16896 -> 17408 bytes Interceptor/bin/Debug/Interceptor.pdb | Bin 19968 -> 34304 bytes .../Interceptor.csproj.FileListAbsolute.txt | 6 ++++++ Interceptor/obj/Debug/Interceptor.dll | Bin 16896 -> 17408 bytes Interceptor/obj/Debug/Interceptor.pdb | Bin 19968 -> 34304 bytes 10 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo index 7809d9386d1e7d9048fb51c21c8fc184ea23614f..2dfc415162a70af397362155107501149b3839b4 100644 GIT binary patch delta 3769 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 SuU6@F@Bhi0$&okRO#XL33CP$0 delta 13397 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 MY`k;qkH$Oy2X_zr2mk;8 diff --git a/Interceptor.sln.DotSettings.user b/Interceptor.sln.DotSettings.user index 693f4ff..359f934 100644 --- a/Interceptor.sln.DotSettings.user +++ b/Interceptor.sln.DotSettings.user @@ -1,3 +1,4 @@  False + True True \ No newline at end of file diff --git a/Interceptor/InterceptionDriver.cs b/Interceptor/InterceptionDriver.cs index 5fd0e80..f98cba7 100644 --- a/Interceptor/InterceptionDriver.cs +++ b/Interceptor/InterceptionDriver.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +// ReSharper disable UnusedMember.Global namespace Interceptor { diff --git a/Interceptor/Keys.cs b/Interceptor/Keys.cs index 01776d0..1500e1d 100644 --- a/Interceptor/Keys.cs +++ b/Interceptor/Keys.cs @@ -1,9 +1,11 @@ -namespace Interceptor +// ReSharper disable UnusedMember.Global + +namespace Interceptor { /// - /// A list of scancodes. + /// A list of scan-codes. /// - /// Scancodes change according to keyboard layout...so this may be inaccurate. + /// Scan-codes change according to keyboard layout...so this may be inaccurate. public enum Keys : ushort { Escape = 1, @@ -105,6 +107,6 @@ public enum Keys : ushort NumpadDelete = 83, NumpadEnter = 28, NumpadPlus = 78, - NumpadMinus = 74, + NumpadMinus = 74 } -} +} \ No newline at end of file diff --git a/Interceptor/bin/Debug/Interceptor.dll b/Interceptor/bin/Debug/Interceptor.dll index e2f97370f5d49c039f75dfb5408e5b02aa6bbb51..c8c96112d6ed38a5f6c3ee58230a906b18d8a4e2 100644 GIT binary patch literal 17408 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 Izr6+i2MBe#FOk^!?rU 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 diff --git a/Interceptor/bin/Debug/Interceptor.pdb b/Interceptor/bin/Debug/Interceptor.pdb index 451d6daf10d6b4e5cb4e32f95e69964198f92b71..020ba1ca073de5b8b1caf2d41395ab538ef2a044 100644 GIT binary patch literal 34304 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 literal 19968 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 Izr6+i2MBe#FOk^!?rU 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 diff --git a/Interceptor/obj/Debug/Interceptor.pdb b/Interceptor/obj/Debug/Interceptor.pdb index 451d6daf10d6b4e5cb4e32f95e69964198f92b71..020ba1ca073de5b8b1caf2d41395ab538ef2a044 100644 GIT binary patch literal 34304 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 literal 19968 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 ihBBn1`9ZV#M?E)a Date: Mon, 12 Jul 2021 19:30:42 -0400 Subject: [PATCH 08/21] Mouse Fixes for Windows 10/11 (Maybe 8/8.1 if you still use that) --- .vs/slnx.sqlite | Bin 233472 -> 233472 bytes Interceptor/Input.cs | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 47a5a1598287c4f478fe9e75e91f33d65d8972ae..3844908209503cdd1046040f594588da1a462775 100644 GIT binary patch delta 2185 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 diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index b43bfa0..8e46464 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -12,6 +12,7 @@ public class Input { private IntPtr _context; private Thread _callbackThread; + private int _mouseId; // Default to 11 based on #10 ///

/// Determines whether the driver traps no keyboard events, all events, or a range of events in-between (down only, up @@ -114,6 +115,8 @@ private void DriverCallback() 0) { if (InterceptionDriver.IsMouse(_deviceId) > 0) + { + _mouseId = _deviceId; if (OnMousePressed != null) { var args = new MousePressedEventArgs @@ -131,6 +134,7 @@ private void DriverCallback() stroke.Mouse.State = args.State; stroke.Mouse.Rolling = args.Rolling; } + } if (InterceptionDriver.IsKeyboard(_deviceId) > 0) if (OnKeyPressed != null) @@ -366,7 +370,7 @@ public void SendMouseEvent(MouseState state) stroke.Mouse = mouseStroke; - InterceptionDriver.Send(_context, 12, ref stroke, 1); + InterceptionDriver.Send(_context, _mouseId, ref stroke, 1); } public void SendLeftClick() From 2785d631dec087351b2dac01b7c26a394628c53c Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Mon, 12 Jul 2021 20:16:59 -0400 Subject: [PATCH 09/21] Removed MoveMouseTo and MoveMouseBy Windows Form Usage. --- .vs/Interceptor/v16/.suo | Bin 69120 -> 74240 bytes .vs/Interceptor_Updated/v16/.suo | Bin 22016 -> 23552 bytes .vs/slnx.sqlite | Bin 233472 -> 233472 bytes Interceptor/Input.cs | 22 +++++++++++++++------- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo index 2dfc415162a70af397362155107501149b3839b4..b7dd684d075d27acef79b0be52c13bbb74ab0da1 100644 GIT binary patch delta 2960 zcmc&$4Qx}_6@K^m*>Rj_=f_S6AptuHNuYLOC${qgBu*SCzfDpoV$!q{epQK4w_}p{9bKiZ}vsdt(5t`>FW^f!QLyV1&kE7w_2t!BBG+wj%(x7>3!wohE z8AlZ~@{Me+G^mPU?i6JHh5q!P80@2Y(o)0YShONSg&;p_N!X7^BqE{^#LYmPjG!Fi z5IiCpk%rJA$VY>=4lxyhu~LW&HcDbj*y+b;wceWLa8I}$Uyp;g5nB-rh&R188NRVS z&t@}@%R$USP*zW&H6l!iTtps%cnjKmL_v6LLu*GAhR4NdOAvDy?2dZb>uU2UooYtw zqV-a4;Em3Ny0|Je%R{Chl65>Mz>soOBYQ%)VG#RB# z6Hh}#3ar3!HiBkRBFL9oq`)NlgutPve@E!cup8c4t@l_TSbVC8pk@EHupo4`La1sn-VWohJNGgkkv z(r}ua@hTn~XT0evNrlt|6)Oew4NhoL;H>0LEbfcbou zfj__Ca!Y;Dh@)ckZ{5|Gw%;n;F}6|W-ZwTbOZ#ofhpRYmjTXjEX=qP#O^9H2Xxk`E z%Sk!QG_)M<(yeMJ-*XRU?v-6}{s}6dZxrsq4FAie;~me4_K6sf$BRKN+LY2r`632= zyano<)nY!zqYY28kYMu9ac~TVO-lqT_9oPq>ME<4oE1kmMDu=)&dbML+WgL$Q|C0;!7O8di_$2kYrR_v?Fy%`v6_;lNE*8CzUpThQ;PJj8A z_m92$;<}^@zLiI|Pd)oV*Im(9+Nb7bVcdBUQ%VD+BJ0d_PSQjk)I=KAM)B&dL-Q}o z?kxFXOZ4$A6kgJ2=^1Wt4LGg~5I=MT%KjN(GB|B^t5v8YopdrR{dQPpaX{WjQK0S> z0W3M9#b&e=y|$os)0Xvh_|V99hqsr;a8hUJ$-S5{;u?>&l@7h{`n~ti_>b9_ScMWLu!w z@>EQbF~2w@5-C^;n+B6ey%?*}QW)YJkl&1I78z{?AqJ1A0{>F}>xZH`Y>qY?%}?Uk zzoV-7aw{jjuuxZd6`aZQz%$?DU!n9b=KViXPzByXh3SQ-E5%n;p!s+_>tmf8JX-M7 zh~}QWB|q`ao#9*fZhplbcklc6b=4KiuYKm+`~pMk4Ykaiv$kmVh~FY;r&_GA|4*V<}}YB!kHtl6-}WUZ|= zn~Dny?56cLb8T_)db7>CHecZ2rQRyo--92SJ~J#jaY(&~RhF3X_o~xsv-m$uhwAQK z@Zdx{?ERw#l8^ohZgr}~NB`j)ofX>l)h!1?>Kh2oS*Lw;A zy$oj=ju?gR&k0vCQOppG6>lpIzk>?p>!7qO3ORtozx~jtQJpU*U Oj=L$pOW|2o%)bF;8SF6t delta 3048 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 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 3844908209503cdd1046040f594588da1a462775..a19640ac8dee284ca6532487ff44099ef34d60d5 100644 GIT binary patch delta 1796 zcmZvcTTC2P7{}+E;T(1c_6oxm>9Q=)N=v(4R=Tvbl@g$cCS=$ z1WJr;cc7*1B%WxDX%ioe4;s4At?5Jc#h7Sf?VHgWpA4xl`qKNw!yb3KTAzMr{@-`L z?|&|Hj$bezzhFLF0ikp2+faz}bbh)Ne%%F)+BKKk;PW;&_?x{==~Y+C!XtZH+4eyN z(jwj0lA3M5|E26ms>WP781Sp|$Y_6uWcaBgD_6TQx7}#O{fYRn97+z#$z&vUSn&)i z@mMaWr3!N+V8q(oL2qkiPAzj`u7VaEkfU-ykqx?D`7hm)(|0;C7g(zTGbNgQ&|%X( zw5F)%oPnR7=%sHvt6&oE(<`=gcn5AGO_B6Q=b1u$^2Rd5YdpbNL;hcZ1wXbqZ z)`=6*Eu$&+fuWEA zGa!Zn27!TR00u6Lg1t`|A2U2+c*yX8;XcDXhPw=R7;dLsw{Cn~hKfssO?-PIGA<|D z0?}wN5ITYiGlePG%)@QX_j4bQQ0CovC;_-b$N~(&U2VYU@vvO*fDA3d)J9Zb7F_&LSRRjr6p@9uA(h7y-n>6f3BV}7vObVBw9)+Y$Dk4qG@I2lp)vE;}8JdMU89 z5Xtlu?7`M`zSJ?1d^H8zkY!zM>TPl}1J%f6-;f$7@Cj7&#-fvTS0Gb&g)hENZ*s0S`Ld>JyY)m!VEt=KUx$CAiI&Yux( M^2kDtE((i(12I4M&Hw-a delta 1792 zcmZvcSx{3~7{~8-mtzveu;h|b2r&pP8jT^ciMGH9wNzOu?bM8>_nq(ipXHuI zCzl^Ox%_w`be$;LEOl{?qVK1CT~=5hKV!A&Dr)PhYUblPhrK7={ zweQ7qwpPEH8p$PyD*zpOM+rtcnq}R&=9FAwLtK?!k2<2^Ud0>hRAMoIXs_z%Rl}il zPW=kR1woJEhj%+0i_>bp6>){M;C3aTxK%}`>BaxjjcI*@1##}hDsV6_uIx7FXddc| z{;B`=aK%VEy|@r@cADO(s!Grk7-$LY2|K)MwibVx#alu#CF)fov2fH8@p-hO#RV_M zeSv@$uYZX(&7AL5Bk{Z2%Cb^BQ*B1vPUg2B8yEg zcBQUzHP?AB#;GeUZpzK5s&%#HAg+R1>GVd!fj}I!Wml#=6l5dLMm^BOizv~UUs3sV zqg*56@@OdR>D9FOTWzJ5)WrO(#WT{Qt;&E(H}!eOSX+rRm0?@TTK;Ey=q=HbOAUyt zp+!i?7LeOD*{nyLg~~0VNM9_oc&?6F^7uo~lb0aQ%IVSe=EkPhW=GJM_8)I-FJ6;! zVv*>U(UeRlYF{{==nxUtO2hG~krnTzMT_u1a{{Rg9b0WQ74V2#$>}mnrf22=HAzE` zel;zf>gep2#>Ym3TM|3I8{a^Gu=uU{!4dHp5`fo>PZ^#tJZ5;r@Q~pF!+nN(40jn8 z81694Gu&pl#c-412E%oRhHH#h8Llu~X1K&K$8eG10>gQRa|!FhpI_#S5A%dod{fll zuS7Sy0|AfQyH8w5F2S&xhjVe)g?3(?PkuB8c>w1L8Hep~fh>%}8ki&I321;TWXA;b zz(w-I1pEP4$=EUYvEZ6nsNm`4@`T+{-y8k_{Y6{DK1IAlx+h`i74i0R!OD00lzzWg zY4M4-OoE+n4fm-^M(*X=<4|qmaUZ$#u~3a>MBaq=le42jopgYz5n?<-RlnSV!{nP&uthq*+J!^p@h~{0Uu72#5_^IU&&W<3 zAUz3iNHcV}j}5<~6?)0f3D_j<%U_HAWXUwxCAYi^e@JSk;Z@Wm+wool=^lY{sWQ6~ z?;$6q!6mum*RVobpmnu1*lQrhL8z40nyRpe9Grpm$Zpz*-3D@a z5Ne^6Jeq;Se2?K%4>$}KxgK{LIIy>qU0;BW{5A__sc=Oz{(#KS!e&Wc>B75-GYL*) zlpF9a0~sEIdeMb<8puyWP$87!E;5&d5@~5}8GfI@*HFUi^+(E2L$drdzw9i%#mVZU z0s&sUll&bEZQvFkWC<3&QwjMNp9S&$GNCa2CEm;YxVv~|+C!-W>xe4!f%b_vbA&Rg z(V1!GMz*k$XD?Qh5^xWQ*U7;#p@$crk}G3EFE2hzZW|Yze7^X2vEE|eRK@0gB@`1M Rkxz~ZbG-P3?4J}S{|2 /// Determines whether the driver traps no keyboard events, all events, or a range of events in-between (down only, up @@ -405,7 +407,7 @@ public void ScrollMouse(ScrollDirection direction) /// vectors. An alternate version uses the standard Win32 API to get the current cursor's position, calculates the /// desired destination's offset, and uses the Win32 API to set the cursor to the new position. /// - public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) + public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = true) { if (useDriver) { @@ -421,6 +423,8 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) InterceptionDriver.Send(_context, 12, ref stroke, 1); } + //Uncomment if you're using Windows Form. + /* else { var currentPos = Cursor.Position; @@ -429,13 +433,14 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = false) currentPos.Y - deltaY); // Coordinate system for y: 0 begins at top, and bottom of screen has the largest number } + */ } /// /// Warning: This function, if using the driver, does not function reliably and often moves the mouse in unpredictable /// vectors. An alternate version uses the standard Win32 API to set the cursor's position and does not use the driver. /// - public void MoveMouseTo(int x, int y, bool useDriver = false) + public void MoveMouseTo(int x, int y, bool useDriver = true) { if (useDriver) { @@ -448,10 +453,13 @@ public void MoveMouseTo(int x, int y, bool useDriver = false) InterceptionDriver.Send(_context, 12, ref stroke, 1); } - - { - Cursor.Position = new Point(x, y); - } + //Uncomment if you're using Windows Form. + /* + else + { + Cursor.Position = new Point(x, y); + } + */ } } } \ No newline at end of file From aff5cb023910fdd66e1c7302c821a2b7aff629f4 Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Tue, 13 Jul 2021 09:38:54 -0400 Subject: [PATCH 10/21] Added .gitignore --- .gitignore | 363 ++++++++++++++++++ .vs/Interceptor/v16/.suo | Bin 74240 -> 78336 bytes .vs/Interceptor_Updated/v16/.suo | Bin 23552 -> 24064 bytes .vs/slnx.sqlite | Bin 233472 -> 233472 bytes Interceptor/bin/Debug/Interceptor.dll | Bin 17408 -> 0 bytes Interceptor/bin/Debug/Interceptor.pdb | Bin 34304 -> 0 bytes ...amework,Version=v4.0.AssemblyAttributes.cs | 4 - ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6607 -> 0 bytes ...Interceptor.csproj.AssemblyReference.cache | Bin 4838 -> 0 bytes ...Interceptor.csproj.CoreCompileInputs.cache | 1 - .../Interceptor.csproj.FileListAbsolute.txt | 16 - ...eptor.csprojResolveAssemblyReference.cache | Bin 2059 -> 0 bytes Interceptor/obj/Debug/Interceptor.dll | Bin 17408 -> 0 bytes Interceptor/obj/Debug/Interceptor.pdb | Bin 34304 -> 0 bytes ...amework,Version=v4.0.AssemblyAttributes.cs | 4 - 15 files changed, 363 insertions(+), 25 deletions(-) create mode 100644 .gitignore delete mode 100644 Interceptor/bin/Debug/Interceptor.dll delete mode 100644 Interceptor/bin/Debug/Interceptor.pdb delete mode 100644 Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs delete mode 100644 Interceptor/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 Interceptor/obj/Debug/Interceptor.csproj.AssemblyReference.cache delete mode 100644 Interceptor/obj/Debug/Interceptor.csproj.CoreCompileInputs.cache delete mode 100644 Interceptor/obj/Debug/Interceptor.csproj.FileListAbsolute.txt delete mode 100644 Interceptor/obj/Debug/Interceptor.csprojResolveAssemblyReference.cache delete mode 100644 Interceptor/obj/Debug/Interceptor.dll delete mode 100644 Interceptor/obj/Debug/Interceptor.pdb delete mode 100644 Interceptor/obj/Release/.NETFramework,Version=v4.0.AssemblyAttributes.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo index b7dd684d075d27acef79b0be52c13bbb74ab0da1..e30015a209bec6fec684bf03ec2d17434707d40e 100644 GIT binary patch delta 4041 zcmd5m`LQp zMkt^Iw)$xS-gwNX0|}B8FFk?*A0QSzAA;NJp1K*)F(6D#Cr-DLPFJRhx}Lg~+4Wdj z3VbPug;}4({3&1sz~7>^i&CaHVbTn=0Ik4RfJXt|(AiTrFTD$sjld?L8+ZYD5pV)7 zz^&S^m@g!WUR71b6=P5WEC8$kiy7;&-F2(W>2294Ldc=6QS+rN0R165o-WBTG_XuT zx7FQbMc=9E)~d0{YUJjY*G3+$nA%1?4N=bpn~BX54X{~M0GlNa2$+R0#s>(PCtwy< zIm-<;3m=~~&lX^_@ZN-;x&+}fL71PyRObBuHbH+>x%?0|Q2J~@cjA7nR^pzltx0p; zY^+t6f?y3M+7oK%?M7p59?bp`7P$G$56yfHV}9me2VMeR2DSmbz7zd7f$hK!KaJ_T zFzx}UBCA2mgjX^75#ZgQr4|`X`737Efa|~w;A7x#z~6zJ6kQpc%3PzE-39Iep8{jR zg#Xi6>?dN2cSJW!cvDjKLQ#yR$y?gfTw1<5`!Y9okzFh#M^Uv#Jcj9fAiygsXr#y~ z%E>Xusp7|&8Q~qZsN~)hS=DZD+wio5L`gO|OG;_{R-IA-4&gmfGEej-$`yP@#{Wu5 z3Ks6YGAmUkIe(#oeI;-&|A-OR65W7D`kh$y~AjsmCh8z3#GJBD{S ze!6qv_R&V+B1f)MIf5mb?&K_1mtn;I8IU8&$f1W``I||>bPbK@Yt*?Q%?l!v-B7FG zP)e!AdKGI^C(-DPjp7zLW>#x_Zdw$?FA8X6X0`9}tH|-FQ}qcJ71;9FX^mKbF~^L_ zvxL*g7i!dO^}Jwm7&&rqL{1ZhL3GtsOcG@pEyxNvBLrp0)5&UbXN-ByXVhO4kvk9F zRK2!i;J5R_Uhd2K`ISG-O3qsOldY?6Nj-J3q$(Vx^(S;RV2be^h!870Q999n|A$s3 z=Xqj6M60J&E0XBQNSybT>Ov8+wxfmWk_$4nKs2iixy{$Jd$DUVjoqsUiQ*AA1_bN| zUICH;W=J|x*C*VWgK7?Avw%qjIB6u)DPAPUjB2H1;1yQ$;~1P%)2QL}l$K4~BsP;H z-ET-!&^PI3x=Y+4M}{-zHptlkx2b)jY@V3BUOG7W#Q)LtGX2am_B;jLeMNbXOq6pCPnr+*F(y;iw@?kS;|3-JL( zYFYIk0Neu6qlO0Myx@2dHW4qFhsKOmQ~BR#^5xY2r}FvVfAO?^=bC)X8Si}FvskKN zF9=+7@@3>yJ(OeDk837em%oKztqBCeP@d`70hz+S$)y)RaXp1&Dy}6?*)W~+eYAx_h zuRUtJa3?_;jx^47USNgnNstz8%r#@rAQreSLE-hB)Fy3^x}*m5ZPHrQZv5+z?9ytC z*3tA_gp?c;xt1j&BABTn*@{X@P1;VoyHiWsJF(Q&K)NoymX*dQ;zmz&naJ8uNvFEZ zz1>m0o%-H2Dk|H%jSlxIyxV_lSN6Aehf?>!tu)Y35rVit$J&$W_bZdAyFtySk!V|k znRYL;qCnF@yq@x8wO9S!+nWB@GD9eHZ)&KR5J#84X9@Lf!KRGw7btBw{aSkK;Pc^4 zxM8DIk6#Xsu@ti=o7$gJ9zDCvu(V-r9{x5N zn@p`OEjF9MG{uF#xj%>Gc z`ag6DdhmiZ*tLDCeGlEJ#-t9eiwL!kGKI6lw?}duj>F}W? z9_ut=rC$!u5s#DYoXOJ}DW)kqW;b=*pL!48fJXg`nYqiG<~BMyS~hevKHKuu)ttk) zyyohM%kqB{`hpmfElYzQU^-MHgL3nuSANF!aP4viC8+bT1N+lvT6NY!%;(|I4fvq zDDg95SOkk=tAAEZD+J|BHqe`~`pkpH?DTvji)_69&G#1Y)AU4#iyYdwT*2uOA@a$0 zxhjx6@5#dAzL)LE4-tu8>%C**sL+Y=hzDj)s;`Pa8ZV2i5Yg|uo~KqR)_K;bM3Fc! oN%%JHe>a6z-P?JzDpV9H{h9h%(OWBM+rcbPluE4F6Cqsx0E46rTL1t6 delta 3433 zcmdUxeNa@_6~NzlzFpqJvM4Oz2VX9Jps=ufEv~`%5TdBSvWYTH>lhI*wl$W(uAi7) zn$(&mChnfjye6GV>}nF)PK~miGM#3|b;3V}nrh9MPA74Kb)1YP##GiSG17C^edPUN zn`YYn(aZei-h1xd%em+4zQAQEFf1K%jR;vT5QnE0*<3?#7-c(Eu8H_7Q3-7ERyza-&o;tM*64@;pjbyF=TF;Ao3 zOe7P$k6RXvXAqf062Y>3>Sq$H9O)^Dgo(%{tOW02MZAJw6K2ssJB$}tiR{FtC#cT| zdLA*<(x3@H+nBL_1&!*72I3)NC9#TVBvun^h_wVC*-U*4;U-#%bp-zlt*xhd8?iO$ zS+(ptiN)_yzm1qrY$v`)bQ4b!Jwz|zBc3I85Ic$eK~G`GcvRwliUY<*l#=cQyR9L) z-UMtIHkf90FrrU(%Vi|0)QM5qE8#7<4;`X}fh`jDnRc1k5o}0qA#s}}Fze>m@U0>4 z+n^`IuXipxGnLSs$;M#4S;skq-kC<4FCGk4&+x-|9KD@x?hQ+5c^Ey;wK&|R;3lU+eQmfv9Gu+<5~t|Y zKlRQD7}(8byuExcJdHl3#Sl+;yx3%;z)Z$*B>>~-tMi+0(7qyqTc~zeE~lPDMLP`o zF;?qGucuYElbElrEg3mSUz2g7Y!CbmeU26raG*GKTVNT+94+|vjB+rcuiW4I87*qH zkE2!34`^*a@k8PO!I}92@f`6yagfmVA4-g|A#0ua4Vnxj1d*dzGNg_rX4k0y6whR5 zTVpi3N&KC-McgJLmlx)VC{~c0B9gvE?N8NG-?cfB^u50*&Ccnnp_O((~ zTzt=#@DTb+TTFt3WSpPc_IUE&Ds7V4CS1g)7QAJxl1q1jA&Dkdyj}bb8w$ru;{FaT zm2j86uk|`Da^dBs-Cpbemli9%pT#CfiO-2U#22g(5wA{wcNeYE!prb;5T1FKJezG6Ya5jD}l9{la~=4$)Qxg6%Ws7m!*UCER{QV|~DL0*@H|RT*D$l~Vz8zU}}BdmvQW@HH}N!=03Pp3w2sB9ps8 z4p|!|y|2-0ZN=eC2UT6_MTcROc3w%8%-ZmFBN=-UR~Jre`e+gUnXwPi+T9cFuadzF z1`qVjpd%W&+EPxNBj#P>#o?EYxZ;%qc>IVIdHxq(Lqs`gON!WjwGqmW%9J8x?s*mE zHO{I^XN}!e-Ql!Xbyif_H&=9&+qXC!HIpyJa412L|QD5)Lrn4k&}OF0%N=u3t0EAUp{(6H1&e|s@H z+NOHaVDXW_M}W~-G;~Ed61X%CLsxPl8?Ky%{3nDiI@wEKWgAG19{O5)TzHrs8~)&s zgx}%uW6hj`MR@9JMgCXZMEz+ll&OQM(1I`gb!$owefIST-=?EM4Q4?Ne)OIke=g5e z&rv_l16$HJ{=g|9s3)?)rS=1?LV0ZWk?6;O{bLG_j@9Ae3r&%Of9wT3HI{+FPe$M^ zO(QM}rR*%2Qc@0I$Whw?9%sLyGBP9btxsPQao=@^>af5NMKN7W5QgYC>F}?ML?`aI zE!Eeb*&wQ?Wbmi*L&-_X?%9FOg^D`eOrNALxr)rrB_%aAeJk6y^>%fsPo{$_RV)te zJhOj6{;TJ9C|oj!3X-9K;^S)cji?pGkntzsB#QN|nf-L$_lc*8X9#{^5{b|>6wLx9 vMJ*_THVOs_kNw4r3!L9nM^nH)WVgWiueeL|e^d4Qm1f`!@ec*85J>$8v5-Mj diff --git a/.vs/Interceptor_Updated/v16/.suo b/.vs/Interceptor_Updated/v16/.suo index 8d24b6b51bbe416390165b18187e901f7a9afeca..65b4ad3ae6a33e2c8406887f5f806f2da5e00a75 100644 GIT binary patch delta 2250 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 delta 2057 zcmZ`(du&rx7(ZwC_R`0_=j(G_+x11OAq+}e*cyn0OjyWZkHQcQh|qNxEcBJO5J{i| zF(DBW8JDma_+z3b{2|Yh42^Nd1VVfyLPXSn@s&8^#6*H3VD#L3*HSnA=a-Y;_kF+f zo$vh4*)u}+jF3YvoE&Ois!5{I@{{KV)_L&)Y0T?{=)7n+8u3NLiz01{!m-M@S8v3@ z%AI+{*ozPf>L(EV0@t7d`(OatVHQ})19F|5CkIH8tRQW~CEOFf6Fv}52nU63!Nz~a zU*M1MC4Ro)p5YtA6~lf*($Hlv=_e|F<8i$-vBFC_q*T{fX<>jv39REJT((GaRysRX z+BTCz4y@(Yh?#u6!>0XGrDys%)T+~Q@j`B^m@M^)rBW)pr5M^;%w?-NOMD#4$clS6 zgxft;w$aNW7ZqGBro}{2)Yf>b8p;IV7#>ZXHy|XSH$2PKU5e?BBknc2tjb`rfoRb5+D+nI5OT z)#6rjooa2ceiMfxw4c6YA(xgkJ;qkG2ZxbEe%b@Q!n{~0rNm-Gbt5xy$U;N8{;f4m zTG12msFjU^d{sJbrMR<5XZtASK#xD7ruYr&rc=g5-BQaA>NymnD#P*R*w$O4?K%#* zDczaPZ!guWo3(0F{i*Duz=E&;?~fq(VY5LiraJ5 z%n-|=ZW@-(4f<*>ax?!?lUAIaxv0J7Xy8x)Y3n7cawbf>q@mD`VwKX%FPA@pgxvy$ zKZWyI{1{LqNW?O2UR*Y_&T1dsLQ#mSTkt?K&&&}ayFcwTr2+ho5Je=5t8zpYz^Q_ED zg^jOt%Y%g|f`{-2{6;^2D9`pGKxsTvB+=35b6yAU#I-F+Q`iPACM#uJ#j^WYKv4+l1{{aLnJiY(` diff --git a/Interceptor/bin/Debug/Interceptor.dll b/Interceptor/bin/Debug/Interceptor.dll deleted file mode 100644 index c8c96112d6ed38a5f6c3ee58230a906b18d8a4e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 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 diff --git a/Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs deleted file mode 100644 index 5d01041..0000000 --- a/Interceptor/obj/Debug/.NETFramework,Version=v4.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] diff --git a/Interceptor/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Interceptor/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 8aa715f62baca05c3386f8a4521578bfcfd602ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6607 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 diff --git a/Interceptor/obj/Release/.NETFramework,Version=v4.0.AssemblyAttributes.cs b/Interceptor/obj/Release/.NETFramework,Version=v4.0.AssemblyAttributes.cs deleted file mode 100644 index 5d01041..0000000 --- a/Interceptor/obj/Release/.NETFramework,Version=v4.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")] From 187a4e7d2aa31575e07cc1b427ae3815df10161a Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Tue, 13 Jul 2021 09:49:03 -0400 Subject: [PATCH 11/21] Added functions to expose a bit of the driver thread. --- .vs/Interceptor/v16/.suo | Bin 78336 -> 80384 bytes .vs/Interceptor_Updated/v16/.suo | Bin 24064 -> 23552 bytes .vs/slnx.sqlite | Bin 233472 -> 233472 bytes Interceptor/Input.cs | 17 +++++++++++++++++ 4 files changed, 17 insertions(+) diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo index e30015a209bec6fec684bf03ec2d17434707d40e..823c71d4851986831d2af8ca705263eb2d399a78 100644 GIT binary patch delta 7049 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 N?0q#D^Sq}RqI1a=dGK|vx!>Q~jxW>;frV3Lg* z`N&Fbk@^+(R35QoOTmhDoC4XgvEy_MLmUwUfl8@=IEajPEK0b6$4CGDO7b zOs9AA%e(iyd*40hch5cd+{myL`B>_<;`!}qdYvGY3xbeB7#$lMqlWaHmy{Fb`&kf~Is$3)4Dw{7ufF+Gihe1evcMo4rP zsV);T;xbl4P0$k_kINE$4b+}a$P)yEFpVm#Kn^`w2`(*LZ@n%nn*`&{aqaHHcO=x^ zPSQIFcgDNp>Klr31Jr0H1PLL+{eSAQV0@3MMx!Je(H-7PmBGj zUc7JWj;(9&i)w1|fM`>(30~~f+^k_8Jp?>iX24TocC<%|eWeLQ=H5l$O>I=G`)M+} z%w`sW*-Rxco4JGpn`|pjlwdW%CNrfWB(upHGhs{|v&m!gw%(ct3Uldk2}`->|BShv z+2Xa5r-7*Rpv1N&NX6m18zpbDApGN}>RErr&*%mF(a#CLAZ#W)LEv}K(DO;cQ-r7E zGM0B!eJkNN1gtM;(6R7kYW#ul3L*A#fdu2rzqinYx>9|?MG}8a_=fN;VU#ewmvD6Y zm#R(Fd_6W|R6{h!6f@a(f#NDE5^G~4B{u^Oh*k{eHfVT>dD$+Rms=Jqn)@;I=05^3 z1v{s0#%C5xlQY$jD|f14Gp;?D0TS+C&;{wT58zFuV>);IKVl&^dV?rN&GizyZo;8oput3a_;c4p!;E<6>zD@l z0~gGcUo}FF!g^oC3K78PhV*!9g&s1oM9jN#kv=biRk-6GX<{8?5w8!lHkaG%a;#tM zkFV0srDCtW9;EqfLHyjnuw(h9c+ofF05$0L*UW3Y|HC&w4pqu0(jR$RjXGO1Z-hIR zYj}Csof6|yZ=%MFn%G6p5s;F12oBFHLY+RwAIISt4c{4sw0t7X;D1!EwvCgIyQ^$t z*n$@CGOu00Se=QIZ+)wNh_va=I&bP;e$ zX`#e^87nG%AGCZhBoKAhrok+Fb=lz*b}Fh*a!9!vG}Y950e>~V&KXupEl!hwN^I<2 z5Ti5eB~B+29WXp|NLeeZC`EhnDF8Tez~DvQN(nXfuWP;3mp&nIgu?gho#*sE}XhjrQ$sT z_{;jrMr*m%Y^v>89qwogR<{N_!fpQ5W>Z5))9RMM&B4ybH9rZqRySE4Ay=p>WV1E9 ztbT`It<0O4TjKwghDdc}96qt#9o@c&0;fLO!+#1{Cs%5)p0CMgQ zcr4CJPr%}KHHR!sRknbi{_GyN6NDaEG}lVMi4ngi2m6{9dZx$jclq6Z8qgGKvN-*I ztHo30sI&x$N{=UKbvXleN$A0S2Oh*fpRuBP&!2j`*Q?W3P!7wB9@oa(+uJ|Y%CT4Z zYQPx?IYNPEi`(uZtz4c;i`(O|lWO)Vhui741%k~f`u!GXmCem6dgwczW{bxe2-;oEHn+XWzhM#XJ-E=t58!u8n=X!klvS0CzQ%Zwy8>IqOi)yQE_Bx-#R=HvQlGbprEf7>J z%eGckS%OXefS(9<2LevT?B^#lHZ*SJ2eUHp#G%=7%fn=B2H7aztA;kR_ZCI(NesH9 z?!Qo#E#aIW1o@a6Dkxo4OKd*+_UN(yY#Dlo^zvQlV8+N$E_k`qZ0sLeD9!|gqh0t$ z`xL(Q2;HbX8s^s27NJ#GD|859x;O@ecHDi;xGQoLaOhY8et68NaT1d@!6!tIM=i-n*cW1n~%!6Wr0-mFW{YLR52fTs% z_ADcr7Yhd}($o~p+RFp&HzJ&KV%I_~9)4R5m$hPZ#^w`0=W>`n%-W-{hb8Cd{7~wC zlzO+ogyPtHK7~c^alXE^kZ$1Ep+n7vScm#$x!LL z+44OzprEg{01PSeikz!mCHlO@Fh2!)<&Wk-3+`>tmoqJNtsE4gl(L>|GU265uOc~6 l3ORlLawxvqq^rcqGu@Y*#MS9J@PIPU=SI-UjniT6e*i|q@ZJCb diff --git a/.vs/Interceptor_Updated/v16/.suo b/.vs/Interceptor_Updated/v16/.suo index 65b4ad3ae6a33e2c8406887f5f806f2da5e00a75..0dbb52052148c5a67c6462728748a0ba952ba89b 100644 GIT binary patch delta 1564 zcmb_cOH30{6rDG;bZlpUez3HZe<>9xl=3Ss%tS~qw$c(RDu~J_eiC9#ECFInYTUSR zA#)c*6L)Uh80l+^+3z^OUg4Lfa8Zh&ApkQ~H`{P# zK^#XMLo^^H#6H>JsKB`u9+=#U)dWknV5l64CWIf+j0hlF5J5yMf{fbm+l~;?uxagD zJ5%_1iL?Bvo1tPiNsoqrdf)JCI7SXvA}r)w0|iB{mLVJn;}ls^Nc$_JZGYvu-Eci? z4YKwaO2lJBe38~h$f_Ji)iyXT(m;LwJjQHH7v}-xOE>2bqPT% zvS62Bp?*YSyv`ZNA?G#0UVU7oHlf5HY@{1fg0qMaQ@FT@pz-g)nkiULEmWRml6F}M z${k+nPKwkP)X@g1=H0tYpvPh`(rH{!e`y1l_bue60uY<W4(~>}Wf|taXA~ zIAP(Hhyxr|Yp}_8LB4ADrz)AXDnY>>6DcTq@p_hmO1}UZ$B;-ru)0IuujU;hQ^K2? zo|dxkw#0tT6Xd(}3Pc{;vw=Ydo1QL6w{R8RoRm%RJeUTa zz{ymZ`f+@NsWYh?%pd9P9_Z?g%!c~Aqv24`Oy6uMIv42+O-K4?BjMg?&-6?fLKCBK z>atzBjiO9P2b?({kUF?U?k;ynV>QO2Gw^I;92`>}%A^DT4P#vNx@%*9qc;BH`P{43 N+AjmB0=Fhte*g{94UYf- delta 1678 zcmbVLO>7fa5Pom7OI&+5v113Pu^mEwP$=23{#(aIEe^H;H6dOUCpfW?>e@lA!~v-W ziYlZMs`-BG2s_g<|I?ERe#7ARitwS&|7H2&D;%}@uE8~7 z8d`mZOwm!av{L7w*>A`a0>Lg&rVvne=#{M{#~Rw|yz@7zRp)P0R>lM7Ou@maZf+EI zYewdlKd*4AD2^gxwEbK11n#IOPgRFdIB&NH-{T4=u%}B2 z&9EU)B0!_)TG*}dO%8|0rVcKWEaaj&$i=pS zH>HCnh+sxH!Hk*kKAwJo&YCL7qv+WkeX2jN!0CZSg^7sMl)EwUV{mVvBo87K?t-Bi zEPIB!0BH$@irtRAFk8Auu4icNFk~9_u`bYVjv8F1i%!RgoZ;9ki@nr8B>PFez~QP8 zhi1``sYrCQ-IJ0R1rM~tTTmF+pfz-p>M1$(wA;IT1^#;Fw6v>`ACF^&MR=fXDQqYH z#|_g7u@!$_Hi^#z)=b_B7aL?{hQPn~FYHeN3VWU2+1}I{&JVza^nRJ6&*G7TPOK~$4oHBkr!0L4D*6;>a6#YCIq*#0%7mW2u()s9&SgyR<+32yzs03`pC95mjWUBD2L*C+&sjAo=7HjEnCkf)NCy|tEOu4w3TZukU|CQ$qw_Rri2d zHLbOh?-}b|8q=7H{O_Z(B{t!EG`HuAUk`8m`Th0acgOl&-+lk}4Sm%FIfc#PUBhHO Rhn#0w{2p|kJWFD_{{Vtx9OVE2 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index ff45f74deb34df6237782162cbe4bf340301d97d..6adfa402d7458afaf9af266ee660c75088165285 100644 GIT binary patch delta 3198 zcmZ`*ZERE589whhzW%(|*O}wQiIX^X;)LMD`2Z4@LIdS9DGA}Dg;kW`*oGQX+t^M7 z1(HzuvED!f+>HY(-KwoW)(%m?Kmbj!O&aQ|N&~t|W!ivgYlqryUDqE&8q#)-ZxWnP z63Nedp7Xx%J?A;kx%Ti|*5S9T2VIapRI&)tr#EeML$i9tU8$Sh&^kNwclU@4jhR&a zsI4}HY?fwZX|{YKJ|)hxT(KOp3`p0di_$@j&Bgs%Ck&Y*M z@<+DiZF!(ab~Y6lNKH^qpB_EjnJ0^BWS?U)>AREht&vcAO(dQ6SoEkd`;f`jflw;J z60mKeVWnA*T38P4UIvc&c!Dl8=}~F6G|``CMUxXnSdSjDT=mNiPna*o>(QfWONqv| zqyk%0@z~@840_~d60KgcaB=67!1LjWiBh6Rem0S#M7nwW9J2GF8cjz1jgS7xS_Z!57{}Y$b6m$Mvv?QT#FI$8Dc-QYB!#68@i)>e@ucLG zMDZ(W#QL7}w)LpAUHpOC)LpJF=r(3nch3@QSc&}L4)|D?;-}ZFizm0G62VYpO*)v4 zWKB`2e%#|Pwh|BIWJ_m|fgM!|nGZC$8wyl?&vV}^A}#RkEu3Tyt%Ffnp0eyQ$Kk2Qofz|Vfv(cd1F-*JFq9#gp%>TzQxfbyIs+EjJYF^pW_2J+1Rio z-n&(vT(UisvNEOrGwvpd#b2m@`CWclC?&G^TCT^ni)mr>#q3>NYi8k3+GE=NGqJ(p z-e}A?bvKONo!exfu_=)1kLwv9&gB^=Fs_?f#IueC{wb4vF~YdQ91gRwfxULj@*-rD zTZr5$FPAsS>*UAf)pDnNTs|Tnlok0Uc~IUVC*?kQv%EP|y9wk~atjiCtV*bqmm@-u zNkj2O4K_M3x7W3OP@m}Oso~2$N^x0WphKaW!7yCYN2YcC9 z0vG)@Q4Rg!f${*_QitVPHOPtWON{sToml<>kWps2~~xpahzNG zTrv_2^S5|^O7J>J-4wnf9*qf}F~e(6gRx+zO(W0^m1Fxx;5&eYd`kDjDl9nY=lj8r zg+f|*0NSunOxGWP9xN2liwEEu7F=}Xb+}Y4l<>zg8}`P7$?(!>ANxVm84pJUC+!)9 z-M$JdapRtFWFQ)fw1@jt2CHt_YRmN{DQ^x^yF!17LGX{ zR|0hO6*5ma?3kz2(QB`eR$+v(wN!qUvAZ4Zil4rF29^o`nAxPvq+joW2H{VRCZ&e@ zGc3H}Xi#R*O&JIX@3XL43(v3)RrG2G<_UuZb&8J~&VpY^J8G0l+Hw}E_3IpdrNT^m zhG2$wnQe*UH6v(z3QPb%w3Ev{C3-sp&Ok0>GCfhcQ1P&;x>XNX@iWZUQCw!a_XU_szd8qdiBfDn z(hC8z+tH>Jv1j^M(hbMKLq9wZ#aMCDyXRpkRtjmu7|bF{ftl{v1@rYbXOrSE(_ig^ zdO>zpD*5!!W8lMzox*NQoJS-3-kAv zP$Lr8#7LNtJE-P9Um439raKv7zaztfJCFDn$0{e7G8?JD<39o-eZieVDIFXkL8zy9 nM#wg37+bNQdDKzIoAHNc+btQ0#L_}7J^VVk1p&H!l#Ko#;|D@1 delta 2732 zcmZ`*e{d7W72bDycaqMhTUpZCGO{KA#DKsyHa66uF^n;(V;j3p+hIEVvaN%-$da&) zi}@j&5<(*sMQ3b@zZx)FI|t+{_A^BLmU? zkk%TGZXF(~>g(xyTvLrEE>itY&NRv|0IT>lZ6Mm!GDGX0_F~z{%g>+>2bdW3Uf^n$ z`!a2Lei3hG*r^Wbq`6-WC%*$ubvO??Kx@l%bpIbx$R@xdK)&~2u=x}7P zDjMu{W_2|@m=A_R+4;{^XZBZ;E24!=^|8J|9k2561rGMS{#E%raU-|hxav!uJiBo+ zHnB|`WoJFaW!BT*=qTfj6V*rB{ATc6Td5hGYg2Vcrv==)r*ke}A~MaEPJd;Qz_!3% zb@mp9wnj3FRlJBgSXw_ZRy=bUMfm^pgu+ITc&j&^!YRMfYr2?CyO>S8>SUte z68PMr75bL7vv@n8M#GeqUtr2I`zn-U8nM)a>p?GWcMB!<^XNp{eMQAN*bDa@=Vx^E zUhHFW&=4+MJ~X5a^oB;ewT;@K7Vgtbw->R3`m{ztp$i8fQ`Q>Z7-8?otNaa3>%U!l zwh>8b6RAc~_Ng=DxLJ`en`35iG0yC8>WA0OwvsTiMtZ+R^pDnjrv)Ko?d=a+?br|9 zEz4JQv{VfQE%~_aKIM^xwN>n$iVv>HIH4SO=*P!O^&v{V2<49=;CUCzdgqn-AQdFq~Gwcc8S@qC2Zjj(1m!E&7&2%8SX> zKR;T7E!My4ma7jvy9J*~-o1L+GIhjh5ixK!!Kq)nzGE!coH$G%CMYJ@O^{8GvsRH~he&AAQrsOCmJTbNg{V@4&- zlX$7HTV0w^=*1^-qp+Q^c1rd!cC*@=kg4w^JR;y}h5-jIL}L@U p2ORY31l|m}srLQMGpb^U8H=XnT1K?+uwbW$p2k;z&@GdA@_*bX<4phn diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index f82a5d4..1e0355d 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -51,6 +51,23 @@ public class Input private int _deviceId; /* Very important; which device the driver sends events to */ + ///

+ /// This function calls the Thread.Join() function for the thread currently dealing + /// with the driver. + /// + public void DriverThreadJoin() + { + _callbackThread?.Join(); + } + + /// + /// This function gets the current state of the thread that is dealing with the driver. + /// + public ThreadState? DriverThreadStatus() + { + return _callbackThread?.ThreadState; + } + public Input() { _context = IntPtr.Zero; From 4e890ff50ca26ed235621fb7540f2413e1f8ec52 Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Tue, 13 Jul 2021 09:55:54 -0400 Subject: [PATCH 12/21] IsLoaded should have a private set. --- .vs/Interceptor/v16/.suo | Bin 80384 -> 78336 bytes .vs/VSWorkspaceState.json | 2 +- .vs/slnx.sqlite | Bin 233472 -> 233472 bytes Interceptor/Input.cs | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo index 823c71d4851986831d2af8ca705263eb2d399a78..55685a45799e49b4cfa47a69481f0fa53f2615fc 100644 GIT binary patch delta 3878 zcmd^Cdr(x@8Nc7%yH6J6vET~JV_`*upu6F15iTzU!kjXT9YwN>MJCLwCF_oeY>n~Y(|sL^skna8v?7G#=eI6A-@o=vorP(~;x zR1hi&Qwh@uXd7p))3YbT3Tz8ZJVhBWL%M;AxH!*K}SHV?idu~A9VQ=ON5I?RiUi6gtI(P z(ENPDoz}WTUPC!{i!LpjLdNxm#|*4-AptLqkHgDiw0FOx{>#t|5yGNxa-JyxT0)%{ zM_cdrosM{+zGGXn@7O;SFMd0*KY~7F-?5Q0^9!b}f39)Dw6H(6a+MD|hetDyElG@eU_xB6qdgkl) zE!%VHy*K;bc%tZMJ;eux1gaCLn{cah@)?jUAs^IwY4AbUP&Vj6`N9qhluL*^`PPL_SIcG+Lwy0SD+dEc~dhh90C3r?@C z!oX@w2sr{;&~2M#1P;ZV5IzprJmP?WYZ5n^|3Uom1a6%L<$&EWF4%v8><=kV~gSY?+9On81c2ha7Jjnypp#QLVHAO|aZt>`QE zz&b1~dCR|b9c|qe`M>dOX1UQ{RAWQL*R|2$@i5$wIZMh8;p0H22cAQBR*U&rVsriD z_7G!e{l-v-a`mFuIRG1R(Afgdp!)~24dZAxSBaqAbXo!?*a3VR7O9U76;1|J&?n$$Z!lT6FyCBGq`h*5nzl#FJ zX$wVP78`*>fOCcE^F+53b`W+Fb`dz2_7dW011MNik3chv%g|FE6w3nW=RRO-mk> zoJVJfosV`?Ziz0FmZV^RlE!xurv5iMtM%usI#k#PQfPjf{T0Rk>HEW1;#|f{0dodJ zcP@qQcP)X2RK7>4c^{Tyq1W@h6w~@s42MQfHv(Vc0XGLOacs8EF%%H<>)C0Yt%X40 z42X}-V``<)sMlVkJq~r~N2Jfhfd}V|{~h7a5*(Uz`#;i_6Dk;pVS%(I4)Hpc#Hi6v z-Hh=T(Nlyf5-U{ zZZ>oM;LDD!jXCK(HXa1QZ@OTA8ZWSo>!BOYN;jsr%4e2|MK33TCBTbSIVe|K&{Cag zb&nF62sUgik959F*YIr(dAKmI z&YA06T9D;(*1NKDT=h?7Eq2y9v$6~F>RpTTU9P;k97))Z9ovLCy!!?0I$g_3#FgO6UOTS%JQhpOwBYmCGH`bBXk7BHgKz*Botc3%dg%J?2~&M% zWKb6BVKr_%yYuLKfMLDQrlbc1reBATt24g{*~BEPzbQ}ZApw0ovR^Yi(vz&L)kC6m z`6j(}8+sjdvf0ef&}c%%eyBjX&w_QQGSSl)t8b`lUcP3@WPJ6i1AToyJkb=6JI*(1 zRtxps3-b_~V(~Y9vFQ2O*XB6~ZSvos&GV54-~L!e&nMTDN~y3q>E)kAFNu75{ky35 zI7L+qoh1p%c|Afz{gDQF8$B$n`pwx{KZ;t2EvlQ|_G_)R(5m zv`2#UEw3)sS1iNtM34b@erCm)XA|rX^L!I-`fR-9%+D^s&H3rd`=deb>WqU7NjO_1U4NMXY2scdc-kFcYR{$1 W?YBu#MxTsU7NkOa*NS-XivI?TKhJLf delta 3682 zcmdUydu-F!6~}#k`Ps2!J2>x<7kQY3wV2wmW5)>;hdkOs9(7B378VBwRt;@kNlG9A z|FY7ub)+ReZQT{RF@vINLhFd9Wz#ezjId=J)iyd&RjX*%Ayt~Rl|eE_5XrvRv0Jx= zQP}?3FZ$@7d+xc21)IQTPyvLE4`m0~0{mbh*b26R$AGZu8T8hc?m}fZ z=mmXX57-NefG{HBnci&9)f}To_~#ne1NV|jwH$ar9asVCK?7(6P2fIoKX?GF1gk(Z zXaTLD4b1Se3(OWh=J}8{ zATcaN$cWj6TW=H=`Ophj-vxxLMOY+*cv!SU7GWVigoP$LStkOLUz1J$!%!&3JYo(X z%Kw8Qe$K~OCt^6)kEB~=|P^j#}n+!9s!KCI#17mO0rtCjj{?iK|ROFX$Jif2}ib~uo&4TG*Wxbljjf|hH=KH7&7zGDGBQPO=nsO2g&#&`LIX zn!797wDoAKN$6~l;LO-es^Q`ZlJ8Dz4WjZ65MQvNp6d%+_+W!wM^-2-AifCF@l?a_ zWOr0G7i$Lbh>9yBKK{dpnf&@hTIg<>4vmaul7~V{87ZuI&eBdkSy#jZPCZ||qT_%i zmHW$)br{riZtWYFT?OkI#O$D4A4PH3t22*quBVi7GBRYFGPIU8?Oo zdTys)Bv@esOZYZ})1O$xk9W#GD>Cghq<6F5+G%rH?S4z8-*2-xI$SvyVkY@MA%BNB8kICY&1_!-mX?YMByZ~MV z3kJP8^oL&j1{I~uH zuJMS+nrUrLWW$;vGM!veyL#KZqZhV1L+4U@29hHtrC6e2_?2`T?pF0WI>6 zD4&UyLjGog{4C^ef#<*gcm+HUL{fVR@tyWE1kou2#hR_s<#TMQv|6m4RZfe;<*c^2 zJKcUuwcG93>bBWj9WIAj#V1a;aog!7k?p^Dfxm<%Rj|V4;Sozap z9(eo5;nNiUqlD+mo3lLP`Q?}%wc)=i6j3fKhVZ3S{%|^tk56Pqvn*c9lZyjJBeJ`= zeMxw;pGr)$BY`YBNg+=XjeR0J->M%HbU)jERl{S`dwB2p?2$J#WTzpCB>vvCkKcW- zgq63ABhRPM*OG2vXTtdMU$R104K;t#IAqGD?9j9GsddC}qQgl;Hlmjn(j|QreuBGH zPW)r?NGL6xs(5o*>WHVD#?(V*N(sGhrj;YVDIuqH^Vh^M_nP!I`L^%q#PQj0@%ntm ZK3qyeONfS@p3mkOjJJc^bC$(y{taTRdcFVv diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index 12c8a9e..5508671 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -3,6 +3,6 @@ "", "\\Interceptor" ], - "SelectedNode": "\\Interceptor\\Input.cs", + "SelectedNode": "\\Interceptor.sln", "PreviewInSolutionExplorer": false } \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 6adfa402d7458afaf9af266ee660c75088165285..f2c9fe703103be54550fc92df45c5176e99806dd 100644 GIT binary patch delta 2304 zcmaJ?Yitx%6uxJsGi_(*&TJ{m!=)^3X+g{3XD!1l3^X}j%qciCMU zfzl$#YZoXmu@@3~Bq}D7sB{WN4WfUHCPXwE6O0n|hZ25(B>Ygr5AV!$!&;5m^(W72KHWVzbH!t$#>-&^4oYRo?;`AhOE!^A*;oM#BVJr z`JDKh*d)#qCChJ?Tb7GrRQ^%EF1|0OEFMdp{!=Tfi!^ujufm|1K&AO8hcEAo=iFY! zeq&wZq*Q((%H_*DgNa~gI1*EGrj_t$0(E;8_etC2T8xlw9^~?M;e-q9 z@Ti!IW{_0e$bVYm(Q=yaitLCh?wESsWh*cOQ!tP0G_Y3L887$8ne+zrYgZ9xWT<^> zXO4Sk))p=|xT(23Dlk4D-I2)LHr+}qh8*4=NL4! z@_}`8p!yESLF^IKB9H`Nnu?UQ}JbzHruf-s%ZmOD9#RL+c&dBiB1n zQ^3-1|97>YzIIyqpVEvj6z0)}J$5}c*H{VS17sC%Bk?EkHg1q6;Xm*({4;jq&+v!% ztW<{wBp>dSD%47Mky`D}(dykE(Sb*heL}NX%4JgyZ%0=3Gfz>LgsLZRAVOz|gzkuaTJ9;G*GTI&WVU4yLhVpev_Rq{Hy zQ?8MHa*Ny~Z_V=$YK#NEQ@k=r$i2+EZt!_7Jv~9OCz~3 zTQ`MzC>tTvZKXw^Ziar7TB~6t!_qrQ8PTv7!wS>})C-YCYAEvT96`KHCpOHA=fq+B z6uyVQ#9Q$d%;D2GiF>3HTqikkr6j18Q97|Gomh0HI34dtw#+6Pt-(%|ryl8_!{I+s zBN)S)N-wJY95JZU}3`zPz% zQ@e(?cqEfekLWB+n33KeI0XNmlHM{1Yr_NAD>?4|qn7Wr=Jy7d$`PIgCYKAF(5wD> zclTh(T=baGZ9>q5E)zOU=rBPsAz*^v1fL0B6WUE^GojUl785)sY%^i2)5I+%G@H<5 z!e$dTnb2rLg9-H}Y}6e0-a0oon9n}L)W(8+O032k3i-VL9xgDIoj1-kcEuELpdsN+ z?1*#iaYuG|k$Kj*tTXlVU0DKW|EU+pVqOXA~5>U9!q-_ZLOS}^6VA=voU(m1A1-RD9 zY#C!b0U4=HS5LsDSr8$24zP>(o3$T z3VoRZTuUBXLOHtA9Wxn^l`Uq*Z|Wcv_1^f%mnaC-m% delta 2275 zcma)7Yj6`)6yCEpyKOf62&UU4P4j5dl+v_GTA|howhTorv^2IlIy{6lS+N?Dkc5s{ z+M=LB3Km(1D>I0UAkN4PU{ffL3hE#I;e*GFqce)m$S@s$_!#}+jDNhFZ6)F#XJ^iL z&Uf~lyZ3x|cXu8WcODZDI3V|O^$N(nv+1NHwo%fobV+(kxLc?+wH0bSwI;)^bu6PU zb*xi2SBnKhwF%IOz^QAi-CTNGE*Q&t8%a1>?Xh~3(JhL%-Q(>}&SeD7;~6bjoTq4L zRWG?~nZ@Du#chRIcV2?#LN+vMZj4c8Q!8a^HGR!L%r7-vG95Mz3s;19g#*Gip zZKmH%-TI}5JH3TS=S{A20kD*XDrbYk+467hL)Xj?blChXRYMus;O3#+(B@<+qs(Xc z9A#NzG_sLQ>PaP*8&GmNRqSyw#WJEafIE_pe;u)w?pdB|cxM9__0#7H<*$q%Nu-^;yReoeKS^MSz_I~AY zC8H!`N-!3UJ)y|u(ybNtuOl6BBty&U2YrsYVSLx;Qq#SRn(nEbV^*#4d$jFV3M}Oy z6|0r)St9yB!}0TECX;L2g+F@V2KAGT!ub3yD2nP0kg;?pZ|yRhNNQ>J>b0LqI_M)3 zmZVE6EhXw|BjNa2%FLgp_;2{D;%*@>tl~cw?&MDkHi74V5hlbl!U^$JVJrWN+7j`o zossfFe`Gyxv!DQ!tPms*fF$Gt_4D=KGGU4;BZoqLZNqbF=&|MF;zjD}{OG!qkEh5! z9U52Kfap{u-k_#RIiii7a7RnI|D%VE6b;=f!fP|Mld%$V8UFqP?Gxutq9$FXctai7 z&|bLsSQpf-pv=-;NNSfJkk(6&NcT$pQm=GGIwT#C^3rZ;OnO?%NQpxIraPn-geao{ zQQ()N6jP&lv;i5RRx`!0OyiLB24$id1YmZkU!@v2&83T0J(g zmKYmDjKx5Vh=?)L#27eX7ZECr_@n$GF(!nC3jTTiFFws*=P&c`2y4ZILQdQ+bg1F9 zSM5v_nbI!aUSSAO|Ix{8@KNgC9rXs6VHv2$HrUlYqgz#OtZQ66PW=G4DP?vP*<0h( z->E9`bL#znwbtGwJ7G`$i~T=($u?4!f^Pg^hOR4!|zI}69h z&W0Jo+4nE(EIfK<{BEh4ML-*wunr;h=IqFLP!F1PXw)H~LxT>Bbg0*1p$>IA_;sk& z!KZ^)hZ-F`I=FRk>EP6%xF2# zWL88IiNR>>DW=Yfn&-HOp2#TC_&_e2+m>a#__sYEL(NRtUTC1ff?Fma0<|-{Ccpwv zf$=`*2O0mg4;sOWt^1)9s_>)xVG~s1clW~;aNvoT;5~b_)}MTi22;^Y{Jx3R-NjzJUqsT|HP)O}`()Yjql0@<1$j}#yTwfIy40<@3A8^@vk z&@>ppi@(1Ye>n%w(N)}`K?rhgxg&4qCY~h8S<2s93CBkWvtoO zl9xIB;Ru8n$yS@Mz~9Y49T5pmfcM3^3oui6ftD^q^Gxd=^eTXV=F7dP4>mOj$Vm?< z$+-4^U>5PnF&{DYrNKh&p!6k+LPRnO`A@|e_X6Z69I2dVTxR5>2V$92BGIKJqT3lK u9-BZ>2;mDfoLmz%U^+M>mFD~FY2j%maPUqaU*h__Cn$-e< public MouseFilterMode MouseFilterMode { get; set; } - public bool IsLoaded { get; set; } + public bool IsLoaded { get; private set; } /// /// Gets or sets the delay in milliseconds after each key stroke down and up. Pressing a key requires both a key stroke From 1530a898acd00ec5d0a95d6cdbf4ac578dc2540e Mon Sep 17 00:00:00 2001 From: Kevinf100 Date: Tue, 13 Jul 2021 10:00:53 -0400 Subject: [PATCH 13/21] Updated .gitignore --- .gitignore | 39 +++++++++++++++++++++++++++++-- .vs/Interceptor/v16/.suo | Bin 78336 -> 0 bytes .vs/Interceptor_Updated/v16/.suo | Bin 23552 -> 0 bytes .vs/ProjectSettings.json | 3 --- .vs/VSWorkspaceState.json | 8 ------- .vs/slnx.sqlite | Bin 233472 -> 90112 bytes 6 files changed, 37 insertions(+), 13 deletions(-) delete mode 100644 .vs/Interceptor/v16/.suo delete mode 100644 .vs/Interceptor_Updated/v16/.suo delete mode 100644 .vs/ProjectSettings.json delete mode 100644 .vs/VSWorkspaceState.json diff --git a/.gitignore b/.gitignore index 9491a2f..4a4851a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudio +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio + +### VisualStudio ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## @@ -29,7 +34,6 @@ x86/ bld/ [Bb]in/ [Oo]bj/ -[Oo]ut/ [Ll]og/ [Ll]ogs/ @@ -91,6 +95,7 @@ StyleCopReport.xml *.tmp_proj *_wpftmp.csproj *.log +*.tlog *.vspscc *.vssscc .builds @@ -206,6 +211,9 @@ PublishScripts/ *.nuget.props *.nuget.targets +# Nuget personal access tokens and Credentials +nuget.config + # Microsoft Azure Build Output csx/ *.build.csdef @@ -360,4 +368,31 @@ MigrationBackup/ .ionide/ # Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +.idea/ +*.sln.iml + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/visualstudio \ No newline at end of file diff --git a/.vs/Interceptor/v16/.suo b/.vs/Interceptor/v16/.suo deleted file mode 100644 index 55685a45799e49b4cfa47a69481f0fa53f2615fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78336 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 diff --git a/.vs/Interceptor_Updated/v16/.suo b/.vs/Interceptor_Updated/v16/.suo deleted file mode 100644 index 0dbb52052148c5a67c6462728748a0ba952ba89b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23552 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 literal 233472 zcmeFa31D1R^*=uEz58b7?Md4-w4r2aLzkxFJ?l#Dzsv1VzB*f6l#cX5K7m3JU)GJ1N}H zynD~N_uO-rcei&>|N1qdxLGz5iH`Z>Wetu32gf;1EGu(39Pfkw+u;Ai-%R*H5)Xi! z?e|na-{+`pEEAE~cnfJ}7;mYcQVW#T^2O3c?n5rYxn8)Ge}nJiPns%>!rR!-@b<3IsM#Id)}4#U=;-sc5BSQu zdpdoa%C;O)99uQH4E}n1vgx;$E!>ix?AGf2MVhO)1H@dJTg)E+n3-EReH!6XoYRPe zgj>rxde^MMy!P~VwDqlEbF3?-Jzfv zwR0zE7zq|apRdc;=j-Y4^_Oi)aQMRUP<-Fkg-H*HqB_L_;MvK03_(dC** zz>n>-FS2Lq3?zs;BBK*y;cPlhuHL^yaTRZacD0SRD=KNg9}b(*4u4>Wxh-3C*2*#o z)$~@D89Ze?wlG-v$HupoVdpW>y%u^>=&!IQdL&ozl4|aNL2F_nS&VNRItdRZm~0j6U{Ck@!Q`7K zL6c;%Rj)*tl`(k7Bz&02868P7bb}d2)wY z&{hKz0ro;Vf||!_Mp9swom4klH*GJQNH>|)BVooOTk3KZ`#gyv%dE)T*7>7mIKB+=2;PFL|x==t`gdOlk#w35!|wDo^B za+j4KYY3FdHcf2P=j#?;Q*Y{JmUa5N+6UJRlm#ZDw8h2~-83}vh~O&rmT>z^X*20JNDC$BF&QAn#d z8G#GKQ27@FXZ8M-oU6E`ggao;I4#*M;M3yRV)@#toaOVL)wB)%(FrKWjM_N}bG1TQ z1J|is=`fx*9x^_uwP~~AA^(@xKwblR4dgYD*Fatac@5+>kk>$70~s3Ne&*AKh-oLC7#HnWsW=4g{VRo#ybw z_A}eV`^q}j4OXyxoMn+^=O;bEp&@(fff(lcoeN+~AH~>8g{bI{`=jxRaZ7um)$s-KjmSezw*f ztF!(*h#5{YtbVw$u`M{#>}ekM20dPHu+7ufXaED*c5E=v^F%?dm8Iof*wes(bLjcKT>bj*Ecl>>OHM>O${wgAVjd)+vsWZ zjx+<Z5;mwXtEuY;G|9t@WO^;gQz1;kJOsYzsnibuA5$Tm#D5GF;!%I@06~w0Hu| z^{vedCpZ#lX=?Mf zd0K;h$lY*bz%v|dZ1Q-Un}YSjfsy8sX0OK#wt7M5EuMzDrY28gbHM9q8!_u3cg=x7 zTT??_gSXCOjFEPGd$c>@2P98tE;c83$*#0n>{1-4Z-22;d)O? zu&$Mroxi27%__U$X0x#&;2CLY3beKi*Li}$CQ#-`bDgKH8OkmY90}Gnw?fYA>wzd} zHhax_5I1Og8qIpY$M0=`eAL%_hrKOrpm}q)Kpaa9TF;y{$vbwgVO^r(%8fSCFQB~XzJ1}E@YgN`;+fdu28P_^o z#!83rs_~2wGww208k5FQMpu`A%xfU8fxHIt8pvxPuYtS<@*2o%Ag_VE2J#xnYap)y z)WA$psOD2gNjm*;Klekk>$719=VPHSqQ|P%3oboPVmb zLQV`n%y|>BL|Dd6anytq2}`)FqXEJ!nEPiQ4B!idDk<#{fTrwr6evRu^#{sD#&zm% z)s3oG)s^2Wk1MyR<8UV60rgJxB4tSF#((nnrvLZ$b(81FYap+Iyaw_b$ZH_4fxHIt z8pvzloohfTbj&SxNY2{raNp4Oa3pHFpY9UW-@GI#0mqUSNpf!J-x!JRjE(yPCL92d zo3*FKB4H%rBTJqGBH7PL&h9Y$Dw*$a!>{B?c_jLN!KxF~xZ~KF5LCN6X7ievk?c{G zPDh5<(_P}1x6SH=uWpOHG?8S~wShUj(~+GXrLWSRj^#kVHZl=|dn@4huNn01hN}?T zquXP(ffx@`P{P@o(@_G1a6~=LzfyHN+L-_0*vl2CBTFuNJU^Mj0@>+kv5O8@S#(B2 zyUnOwj$+B_m`AC`C*t;iIR&5-&h3P`(6||mhs>1h^A|wOhbbPK!HROHqX~$txm4mv zexe8|O(ExWq)LZ+6}y~{Qm7PgtyJe)U+q{hp)iMozpe%XY=w-UL)e2eqB^F;>8OFM zwL>9{4Ug{Y4v$12hXsj>05M*KI_wWbBcr38p(uPF0y?skK&uauWGf*NG(KHPCkR(& zlyt&>$>B>nLFPV;l-LsB(zajckkSfzbS9KyWcW0!7_{LWNgbtx5bp;wCAT7-m_~Ao ztY_*vnnO%|KuFv8+0l z7JSy)j2NH_)^ekk>$719=VP zHIUapUIYIF8c^?W7^&r&O7(fi+?;DP3$(i(B^fhy0sLIxr|ohS*n)VcFjIo%8C@vn zY*Fi_j&)NlqUidAjytS{6V3XaW3fcVphQYDg&Np;O)cWUyiGvAjKzVH*@BnLo`n^n zbg7k)0z;T@kBvWCSk6r;tpcaG6VlEV+VFQSX)$HHgzUBjWscC2^0qJG$f__8LfEp6 zq>ra-71?qZ%~3*AVuL$vQKnoIO1b2+iwh?IAF_*s3Io40GZhAYJ8~!tyw}?l29GOp zQ`MwX9StiL#$nY7&FuArI^p+AQ>YVyp0LYrsS~{KOM0iN6GE;}suLbQ466$6Or1E+ zOftiD9M=a4+C5jh`AnGDfU_A2Qg#RmK$mAmaRAUITdz zkk>$71OLq$Fj^d9rP1LK7r?BU2o8=H1c!t_DvePG z!5@Msa2zjF7eXX%0XpRv1Zy9T(+Wz^KwX`>coF|;yh>e#y7*~+ke9$ch0<^0 zk-m>NXynM%#Us~=lxr!ET#Y<()gnbf38gEfZUN(=u0~yzx{9pc1^fRW5!CC{k7#qX z7q#zdCu{d=qIQ+`er=~-sdeioXmz@*4j$=0NI(CV*Fatac@5+>kk>$719=VPHIUap zUIYLC)qo1S#P(fw*v~JSVw+ey*HM((cxJW-1nmSzq1}^rk(mzMy*Eg?!yd7AwL^Qu zF)-z(IIrtBIqpwvi}PCIDaXb*uhKxeB|3}LIPB@;7XU&Lso^sB@e4|hB3>@XPCj2) zK*~AWUOrz?K<1}K${$0PbBB>!BPCo)@}o%`eab006~eZe3*Q!u!?)$UQbJm|R7ULk z(7ddZc^GDWk0I$j89JX!TBIooZ4POYa&PYIq|}kVyMK2oeXDd~lm6OlMS|~SPDMgM zI8Bk@v2`lS&P>V%4!=n-rqMM-DW`M|4fAhP9G{?5>z}7(DWPlN`bH`sUDpuy8Jn)* z@fwbPO^~H8$AMHF>0AGyv;b@Ge<0m+ip~GpOe);{pJVsL?SD76FkC<&Mw!F-ChY5P zf*<+6yaw_b$ZH_4fxHIt8pvxPuYtS<@*2o%Ag_VE2L1;%&`gM9u=+@BFnXJ7y>+!s z4YkenO^vP1V6bnn`baD;X7GVQzrpGwG3S`U2lo92tB=G`Vmcol7a&Ht!zec{H8vaH z`X4Ofe3tVX$ZH_4fxHIt8pvxPuYtS<@*2o%Ag_VE2J#wkI9kYHHTU-C|Ag|r{rSH@ z`QHBgpKk^^rMEx-$Nhg5_y2zncl|$Ve8KnxtOJ~F?1ZxbKBK`X)8EwJ%vXcF2J#xn zYap+Iyaw_b$ZH_4fxHIt8pvxPuYtS<{;M@`EXQ%qGC^=Z?OWgS{Mk1^W@e(-(U#Xw zUR+oRhBMGhAz%sssGcsGC;%fF92j^|2=)2ca zFP(YK68rvG2(|*Kq&&;dg=JS8U{QnvV;Rijg757r0LvJh#5o0)ne+cauM1F(`y9qw z#-ELcjmL~X7!Miu8P6F{8ZQ`6!J5GB#_j*rWtI7Yd z-ccyl4r>S}=m***>ltl-D7<~t?2JqdkDBWzBJpg#EDBL;l8)i^ld@<|5;d<> z(PN`ol|{2k)as;)wKkfSSu`s}ZHZK|#zxbXMbjl}wNk}u8%<{xO{b`Nq>7VlH2qmL z{i3#5s_3@Sv}e(@i&~9Ty9#JZz<4W`ct<202m7yCl$O7!Es_?k1o}h`@u3l!ENbd2 zYSq$;E}%`+kdDzv%v=$LI&8)fvTH~dg{Uo*PV_+>o?a$j@3Wci#i!1Y9&%*EAW(e zu(;QaPQ-k>Cj6tZET&YDsLhp*YXPoA@6rh!=U_N!Mq>f6uARl19xQ5eq=n7ET?7_+ zY5#0SBUwBrgQut+B`s{SQTBww*|DRis1-|#8i6v|dP3WGWcSBD^cA()(xL_%ZNCYI zv$F)CzM@tn9a|5y3ElUH_GVLt_KMmpX`$C9X&2bP<ulQJX0(tg}-_CbFA(7kG-= z3~A94o16nXqGooa)K}CBrDJPtat`dtRw?+2T7h(|$41wiL!sa&YKF9UG0@Ff#>&VS z3;1)q7@4=I>C*ffpf2(-YHa+OxhI-hSh)y@=FjKcSnM_e+fPk%Dod(?tk8Nh502YH zYcp*-4UUV2iqxOP!sjUi_YOH#nL3EfTNuj&2^4RI~QRq~b zR{~kd7ADpze>ga5rkQWbWl_o^Q&g>}Z2_T+Eb6QPnw3^MQ3{f3h^D zV}!^QRVg~L0@xZ>OSD<$NMM?1RB1+KIm9qc39ByUgfbv2*~aAS1FPsT#IZ-7+s2ti zsOb9ahEj;Yurip|(dTB}tmxXThGT3@o2E~1lcKA$PMBvCHAf-lPA^f6x>B_4Xo#TL zss&lan46syq%N0qmH=~0FDsFpw9{roch9Jt3$aX7D!Nmtnge8&m9$j&js9pDN@Wdn zj-&S9ic%(49>wCrdcymn(MYt<9FIifwx5bpDtd~6tfq#=*J+MGM-8K$Sll0u$1)xj z+Byi#U~r8*Ezt(2K!xdsG>Q_2jnN(GWcKB>C;_l*rl zMxmrYb=Gf1DHN*}Agrol`Rodfn(d>Z?cp&q98Y^t6kS{<18EzZ^6*T-T~Ys-xhE3c zxdBECa7SKlUq#WxD#<2L!Wv)?aNB2*fQ~h}8C^C{D2ycI}hppQyqKglvn| zoGsxFm?#$?1gGRe1KhcjCb&mU)=}>vya=S;)pQ416 z&B|(Jxl*spQ{3`j0XUPS!li$mi@H)@&3;E;7 zU&ZfA&qIkaX#g|*LfqXteh_1Pg=x> zMW-|D9C4n)zbU-oJV~r}p6IM`&UH$BkCPYQA};YY@numXx)_5}SA`P3XJTyJA8aFC zsfSkLOFguZ&Y42BMb;jJnQADulXMgcm6l&;Xm==Rk`;zf&TkBbgONQk7*CLPNhspi zn&Am@B8IS0*P2LRCpp22oIV_1Ak632MML2@P?%hs357hw(tw;@-g;8cet3zO{iq{#NYd3tmQZXZwG>;3hhj5XOtFd7P;4ZNC^nF4 ziuGh6MK7tsEOhwCV>GwNqBQ;3Uy(`-pn|oJ#>oQI5q+Y|OJx2$VL9IwiSF@7gZ;Qz zwSK~k#i0{j>yPdv6-9!FUk4=-39=aAy}XB%V>xw1#>V`Z^LFZ2<`fKmEh$ClA;%!B zAoCD5kfRYgND0CwG8f@wGG~TR#iuQTk)w2>lq!>nR*ZR|%U5LfY+(tXwIW4|P>}R> zCNc}7UqfahtR^!MP9lW}t4IODN@5^%5gnnEXbAm8MQA4q)){O4gvclXT^=D4N|3eU zLENaI%vB8H!noEECqgd~5xNOM7$gG1W&);z4Ss;YDJg^RBMtX2#{91Smi!e2F7T!cHq|b+iH?Rugd{_7@{=)gJ@H)*6)==Ruw0htiRroWe z0#i`oH6+C8r0^>J1=B_0PqYYdjwrlBrP&h^{)j(dJ}3MEn+BV$3BN}cXpJ%9WfXq1 z@I4CrFv2F`NeaBbK&a&G1HU<$9y4YMH84yJ#W#lHI|f2yW@I8RJcp5^r|?V6>V{A> z4yy_9p4}Obj0@kw1~51-T)~hZLa_$JqY;0Qk70BJW^^nT-MwM;I=Yx8d=zV*<=MZ( z5B-R6wcX2%ukm#XSCtDsN)-zGNBhm_?ohyt^@CCZrp5GaG>DvgtRbTe{jfH-(-eM8 zbshJ|P2oqWpWjXX3 zelKePVb(f3Mni#}{FwMj|3CHGU6PdyE#I_}%u02~<9Y z2*08c2VlW*6h;m4P{2Pb+(~1heozE=VIRvnVA@>>_oh6kH2hh%E*eA;K8Njxajc3& zL#M-nCd7JAiVC|?;chHOM%5Vt)nNa`pPY&t`e*+>eymWaf-9VDBOro4X#+MlX3d)O z2~XG__yB#t)&Uv$Kl{U{@fAe##Y=&@o@VVf)OHkDx|+!%%yyyTti07LRQrDf|vAQcnarjxQvCeQd7K z!mo|&HnF)wQ}2lQN6lCO=7_>$7$XMtLE*+xA&+2;=tEN;i16p6d92vSpPk@oAC5&v zCqO0NEEc@L0|u)%?l8?%z5Uu8p~>cNt9xH(kphR+e!qj2kw!sh(8A43W+2GCHl05O z%Y%}ln8L$J&aP4a_L%Sutj08$HRiREpecMlhbJGxE`d@CPh$&P8w$cg57fK|)1Gdn z3D7WFogT<|{tPO54R(Z4?2xeWLmce()+(MKU|RGMo4{p92@Uv^ zRWySrb0UEC7dtJvd|u(>iJx`C4cG>OkY?mMOWxrK43BJuc1>=7eh0oAfm!&8^@HDl z(RIgIS-ym_cEbqGA2fsfX;@m_IEJOs3ol^Cx?z!Xw|_Jg6n={(VQ)Z}W_a+yOpmRZ z9-A{g22k*1q{;i_g+r(SdT&3!EA`W4?6{NxO)wG`p33z2K4#BanBq^hKWsvUuS|QD z{mk-O1>RS zN`cN=2%44lq~YMkzS5y${yU;3RMbQ|KP?cdBzPDJZJ&rz9ivzs*fIPNs|S5ov+6pE zRl8${ANJy4ATSVtdK2@7C&u`FI5cgK$D^TP=<;Gf65ehGg-0=Y`?`iyBrM^w)+1b4 zQ`<*Jg)b(4T#L1ITcXash(!)h$!hvM7TLC-i36hUAU{s2159uH$Sj!c&7s{8cDh!- zCrcYR$^E1#A0-#cFsO!I{69;-mwqe#LV8;Ip7faXb?E`=^U`OfPe~t_J}O-%eLy-- zI$PQ!jY}bESlZ(Lx%ed<0ns_s;SFbChD_NuGYc6F)Rpe|M`)nn9R zwLq0r9!?Itro62DM)|q&W93QZQRQpO|0(w>cPO7!ZcwgPKCE1%98}Iyb}JEOhvHXG zR{E7SicdLSX;JEwYNbLcQD!Nc;*|dhbM{x{7v<;VpUOXkx%(sXm*xB9yX9NuPsrEG zACWJSFOc`kr^_*U6wW7{B5#z}$=&h_d70cOd*ox~Qu@uqAK*KO=iobsr{If+$KVSH z{QBV@`0C-4#>b6oj4O;wj0=r(jkAnB#xA%OVJX~+u-K?{zb5rctE6^msnj4XmMW!V zq++Q+k|f^!mO=Et>wnSzpg*ratN%p*zW#0fVf{h<3;Lb5E!4`vqT@_W)kO6l>g(zs z)fd!Xs)y7csNYe)p+2O3QN2t3jCzy$F(YVfH8vQ%#ww%T{Tuho#?eNRfyYepe|Zh$ zHIUapUITdz{I_VpDR8_bMi_({j3MZJ0HKh45kciQA!y_j23r{nG1$W3WCoiVSPUE4 z(*_2E348F_YI}E$A$lwbMKF{D@2A^Ya4}-fI+{NHd2A^ec2ZP%g+{WNm z2A^T@X$GHS@JR-@Fu0k)Cm7ts;6?@?XK(|9>ls|f;93SBV{i?Fk21KL!Bq^dWbhFN zS1`Do!DS3S%-~W4jZlSXgepWMR3RFn3egBvh(@SFG(r`k5vmZ4P=#oODnuhxAsV3y z(Fj$DMyNtGLKUJBst}D(g=mB-L?cuo8lei&2vvwis6sSC6`~QU5RFiUXoM<6BUB+8 zp$gFmRftBYLNr1Zq7kYPjZlSXgepWMR3RFn3egBvh(@SFG-4^_LrgE1Fu0h(2N`^T z!9@(-&)`A^7ciJ)a6W_c7#w79E`tLM_A_`NgL4?1&EPBsXEHd0!RZY4G1$vs4};wd zCK$vS#27>w>|!v^Ai^NbV2r^igPjacV-RAngTZzNBMeLiK?VT^!wmckPGztSI&J(_ zNNDpcB(!-JlKYsq%5TI_mEXW%kih_gj+-e6G)A4LG3xv_=6MQ(t@P~u9O@oL-D2v_ zrfv~+XHj=1b!Skwkh%rbHK?moH|zXAoL#`P{q+1loISwb^!z`Z7r@{2{J&y5|F6*V z{|cV}=Zv@T?S2f*hwEY9`W5{Kn3=BE%e0qazImK_hdM`@lwXtANw-Rs?hm;OU7MZX zaV`_@5|1KR3BMPH`A7H_+%LI}j#nIG7}1n}`#C)0#yR#+K%zvctsS!e2Mg%i;kZZ{ zt}MmM7Vd3rt{z$&f(?vVWF%g;Aryn1rLz9`L@*Q?s;~354dFiLL^u@RH?+2Y#RMF& zAL^KhMqyKBXhkTTVy)fe9~-TW(*r*-62!A|Ai}a-B5dsL>FnLuZ{zLp4Gbj@u?+2Q ztgWkUsB3`4lakeT`s4mu*op)}lBw)>~YnCGf5lDhjbFCB#v9LJ;&l|2-7~YDcni)LNC#I<}J%O~P}CAR08a z_pmCYiI%AR`>XJHBgoSJF3FN?6+^7OTFrGg7#*pD_8K(XVas-3EEKb~AG>!_YiHvz zN~lzkcS+FPJq0MOc03vxkCFYe@hB!}s`R}UV9E+*3FgAnogf(ZpA*cI#J~fjAW7lB zSrY8mBjJ{z?oJ==<0E0%0yD#Se$ZBLhI%GocY?WzLX+^MDoFHhHMLarW{J~ko%F1w zo(Wl+@Hi~Uvi0Aroy>P#_ZXhVwJD~S>5s`V#DZ6tuv28(8XXhW9%#vZ79Pumh6iu* zceS@lY0WM!**^nM{DRtw-{thvhX|GoQ+442o-zid?E6m$mF&DL@E|j&rsZ9dB3UHq zo%dRQ7!KS8ZI#FJsb%MB@hniX-`-!22dF{FrvJ2%9k5j$9nUFa0iN9k8E3vrGTL7* zeUaGcKKp1ip}Y=gkSVnpcupKd`gixGnY{&8`z(M8fQ-0Z_M#lzNM!8eVR8WesDyfV0H@ zm^ozguMLilTHa^2hxc`?8|0T08pTFOWsWH5nS#s+sAqz`M4;?7v;x~xij9UzD=#@D zEX$g-59ZP$48&mgb(&46GLTAW<}A*t={S?pz%+f{0=)lUb_ounS^t$DQ$M8^D68d* zrHkB$T!M4Ga4G)=-^ZUc<%~Wbkk>$#2FP8-8$I0q_3$BpxtD!PM9=Gluqke1Kf~K` znWsCrtveTy(b4B?AMlmIa*S_N*_I=UW2+{Y!C!ArHvQJJg$EATqO_`K(#O z479IUS_D)|~P^WK=FBOy!hAFUTLwjGxs`kEx^-WFHNr5x;nqcXg7#-cW9##@VBOx=G zD}wa$Nbs$OT9VRNBFBl)_5hqfkA;Rqqp%1#HCaX-OsYQ-T`J3V1!6<#-v?jaj3rf= z>4mB+OL4ywUBb61^pIO$WY5$YND#rbA`@fbY&uP@-oHd~6>o!fwT-qbDrvwUhOh2A z{BQt#Tej$|m1PpD>8&g?c*=NeZ7!1s>Rxv0TdU6S#Y?KW0|u>$iDWUpZRjLCm|(J1tb;w> z>j#r>o&-&j$yU7*VOGZA9h2~3B4>0Y$xv&7IIHJB;BdQ&;TzC%m(hBdh>S&_{v@T> z!Sp~|4NL^s3+V`I9;+EifmwD^-E7^oy=)@gWLA%a8H;SG%T?_2B#JDvB5zv)Xmni72Vmx zz%~9@ymuHr(A{mquqf5@TBF6XPG491;F^K50Naq=1{XK5ZW*OSt`|w3)#7 zb8+~nh_-2Kyv=+_dVR{Kqt%EG_Zh=fjkbCn?<|HZ7&g?b+%Hywk0{oNaU*);9_)=&-GS3gWKItJ+J1N&&ZJ6P7< zU$(*zAD!9yo9^J^vZ)#{(p&47jD)?xkp;VnwBY!TvaY_~wOOgAS}u%7dV5ljOv=Q6lxa6is(e56nVO zf_Z0_CXlkLAExywYRF7>uU)p>E)Nb95^9GoN0Sq!+h4nAafaNnWW~_r!wGvNLV~DM z$(CJ4P(fG0G&y%=DeLa11KIrxXS#~FRCD_`XN)TFtjCnIpp<@)Y<7BAnjSc1964Xp z7#()BsW=j9-dcTd?+iMCy|5Uipxt$!IbuR*5HPnTe_?${EIg*_MlyKTRE;G`kvpoK%_YeLYY)laOaPcL z)E7)Abf*dTbOzxDt!adwIla(1qncLe46d!!=a(3+;)Vw9BHL<7x~6mJv|y^{p43Us zHlGa5Zn#G#FM zV{2Kmdzqs1co%z{@Psi4^WNunaIaAATe&jbl-qA|Ozc>U- z>}&k*ZGOlw$M@=onEk)E_bt3>Y%?|+{l;2jrO|FIGn$MgMzt~Dm}e9lg@$5?`aktI z^jGzl_20sm@Q2>>#e{rkk>$719=VPHIUapUITdzL)}Hxt)}im>Q+(rSn5_%cL8sZYgz-q3%5D9!=d6 z>dvL^|1;nJTlW9x{NGR=#@~$BjXxPL8_&aSct10qHhy3{ZafP2;eFZolJR-tF5@=1 z5${H@3viWjnQ<}PiFeRA$2i@XFvj6lyb;513>h1ZK3EG_Wpo(F8*N4-tOhJHDvdIu z#F!210qXxorOW3suYtS<@*2o%Ag_VE2J#xnYap+Iyaw_b$ZO#LeGL%7!FkcCLuUy( zwdi=zS&U8%I*ZV$MrR>9Rp=axP9-`E(3y`;1v=&El%Z3K&N1lBL+5C8O3;~$&Kz`( zLZ=v=+2|CZGYg%W=*&Q;5S;>a40LpKG;~yS6m(>CBy`;9xX^K;Bceml5zyfU!6D)O zf5pa`SUAma|KDGXSHKG3Z;f9XKQ(@2JOL{JUpF2!zG&PH^Z#3n8;p+{m&5G;0^ku2LSda)EwirTz*{*|m+uVOt|J_(wcqkKM6V~bk=9!Gy1*S4Lly6}6k}){9Q2Mi zXuS8Svu`!vCM>vP=RYX`o^_`eM8Y>esY}fM^CJBxb@HD~yEE$F17Dl{M+?9*kXZ|+ z9mit-QAswzy{P}m(!lhg%ionLL=dg^*g9F^`C0p^HEL*i%;*sB0W)X){NL1GHM41#(^}qB(47u;$Vdl(R9|U^cW4dm2WX8a<8m z^^Kn4HW1cq@CE{2e}liF$=i>H0-+tzFM+~wCZ;8PY{fpbxNVd7jE=@8Z+l&x&(qS< z1sd*Z=<=*+@%cRUEu9@L-g;kqgSYvt6a!>2X9dfVRcqu49PINA_?`#`Wf0XCR;TeJ zOo$9WI<&;IWWzd^Vz$E4>I=qVX`IHAtUq|GS9%zvk;aN2X8{FkKZz!ckpLln4x1Kk zT|bsV)*TLvP6W;FFs;ZCSv)#nCIzN3B`j1XVzb7~sV_~=ve8#$TuXLj8L*f#WV2_% z7HzVVpc%!y{#!DU$WJOaiB8Na%8DbbUrB8w_!Ek=)vHua6GYhfKv~`tH)NUG);!WW z$}#{At*ngYp~BXDQa0>pt!1>yYIj7{DtDElwKOGkj>0h# z9A$uSQqJnd3-~1Lfq6M94sfjzvf`bMxmuv+)&CxAt~2Hm4q z>E(KfUIaGrBwf({uD!0kqP+xG@qVs7t$knnj`oQ56|jqUul8B()7nkiwc3?n8Sf(P zJnbB9pBB@`z&4&=+oBC>y;`@{0oL(aG_O{pRcfW$9I%h4X)ev7zM=j}eM$Y5`i%M` z^>Ou^>Q~hJ)qB+2)SK1o)GO5wsTZmT)HBq$I;M`O+tf|!di5l=Lp@GyQft*JwM?C( z&QKMVD1V1r6#k$*uRN>#MESn*ZRKI*LFEg|oyw<`8LenS41{8jl&^5^8+QTm7Uy7Wis1?iX4 zA?XLwccgDf4@qB??vg$u-6VZXx~YNNqm4 zA9a7t{eSLz-FLV@>At~zwfn>Fi`)m@XSsK~Bkmn;zx!l&zk7|_=RV%u;;wU7yDQu! z?pbcl?R5Rq^;g#`t`}X;xqj;Uq3gS@M_gZa-RHX7b*t+Wu4`Q%ab4oNz_s6Xx+~@y zb(yYHTpL~MT-~k}u4S%9m&bLitJHOrtI!44RyzOY{Im1-&fhwJ;e6WpJ?CT2uR9-b ze%|?6=ck+>cYf4)nezkA^PFcp_c+I$A?L7ji*vxa*4gDe!P)BcIu|+TJCAl2Id!MY z=@8!#|0KR7{z`mC{E_&$_)YOE;{D=1;%(y1;&tMc;)lcw#RK9QVq6>(N5pO7CUL!Z zlGq_0CpL+-VwG4X&Jkybib%-c$zRAH$n)e`@)PoX@@?`kd60a8+(|x7ZY0-`%gG1H z`Q#k3m+T^^kpLMYgQSP7Bqx$KQcr5g0y2-xCI)d6PIyyzRrsCoYvE_YQ^FI%w}h_> zUlKlt4HfN)DBKSie4oMh7(B_~2?mcd_%4I*F!(lu#~3`y;9Cs7$>0$N-(c`CgRe9A z8iTJg_zHtBGkA!>gAAz6BZZ?jj}(p?RZ%!%BMqj1#3kHS$CKMF@p{3zU~S!C42kHS$C zKMF@p{3skX@uP6m#E-&J6F&-fBV+hDgBuu76F&+^P5dYvHSwcx)Wna%Q4>E3M@{@F z95wNyaMZ+)!d=POsfizjyMjGk&VZWuQ8;SiN8zZ6ABCePeiV+H_)$1&;z!}Ai64cd zCVmu-n)p#TYT`%XE@Y8W6F&+^P5dYvHSwcx)Wna%Q4>E3M@{@F+yTb0pTYYWP!m52 zM@{@F95wNyaMZ+)!ch}H3P(-+C>%BMqj1#3kHYO??9{}M!cDNJI0I_pN8zZ6ABCeP zeiV+H_)$1&;z!}Ai64cdCVmu-n)p#TYT`%XsEHqi3$e(ki64cdCVmu-n)p#TYT`%X zsEHqiqb7b7jvC}qIBJkb;Z9}j)F6+-QG+}Rx0QJgG1$W3WCoiVY+|sH0k!<2aD(h= zfI&ZlJ_hRpoGC(26Gr3#h{qMYz9RPW-*w_U!v;L8jiV(=h?2N?VxgD)|-pTT_$zR2JU3_j1` zUIw3Ia1VpK8QjI-P6nT4a0i3i8QjL;RtBG8@M#90V(>`@w=lSw!6z8p#Nb8-A7^j_ zgXPp9ra>h7iP9_sF< z?gVw?)QwR$O5I)59j9)Dx?$>$QFoNOJE?mbbwkwMLEY`t9igsC-5_-X)E%a-pSq_~ zcN=w2p)RvFH$;DLq3+4l-Avt0)ZIwk4b&Z^?f`ZBsoO{0_0(NQ-CpYUPMp15anxN#-KErRqi!p8Td3Pi z-6rZbQn!J+_0-Lu|EKo<1Zw|JAgB}A_IEg1SjGR7M$U5_Bf$NCKQumPOu{MtCZj-q zM!#FXP+y~$Yk$>#2=?YL0o(FzT7mkU`epTc^>lT$xW;06_=9H9PR)#LBtjJF=px`b70$u*vUKQv6xF^$(8Q=`y0IwULQ(CuECv!5N!v8F6$*_9U|fHTW?&7-JP}dhD5dU4!Fdp;H2m ztKoRfS{A82t~k_zOdbpu3q|A#K-N1LR|b_mOBq3=P$&f6Dp19I&JEmxjo9{6D^!*r z+yr|hC6>lk!HJmB^a9DXUucmjs#Mf=a3k;+Z?r^=`?G3K)@~zgHN{OubsY2r~~;pAymdqLLF(a2-~vh+C=RnB)iE*)|yS$ zDr((GcBYN2C7Y~8)K($cppC3Ko2*&XRw7xgjjSn~tVz_mkPKQvVdcRAP&chf(An8& zZ9g?tP@q4kfa7OYZDo2}H#((CF-X*QLMq}*nMDEDpn<`M%wCd3Ny9|#G-SLRj=-(7 zmtiLu)XA!Wi9%$7q838dJy7eH+gYp>Yb48bxgw8Okyl zvMWAI0cyV=7=%A$GGsRa#sKZ$RAhKClOek?Fa~H5+mPXdaCXvqOR<1Og_DH5+?xcaDwiQ`trkaCw1Sh+bi`AxrL~RJz_@Ba?qJ>q>wPtuC zD<$+4wJk_`S1JYe4uE^5vh$S+619_&?esJq=HvlYp}(kYMuu)jva?(l4Ta+nqiH7J zhxiVIoW*KwVWPGP84KW`=`xm=Za8}x%^t%rZ&BL_OM-spD@cQXG3^l`ndV+Il2?65g%Wh^`NgcxKa5Ur}3!#GgpTn^SRgSfTYI z>AqC=pF?4&tR5umOXa@Ho85hZpQx=x!fHEVcDL2#g)VE2RE6eSD=TUF@*CkqEet%@ zn7hqU`)@@l6D!fGD!g&<1<%uiHGTAqtnH_wl!_iScnbHdQ!;Am#)R_mlIV10-$E$F!JM~LZ=82_f4Rqc-i^w|L)oY=m94(fkWzN#lM51tR z47bwhDGL0dC?#SIn#}~e8dR>t4z+c{$T|tko)qOMu?o#sPOp?=u@Y@aPN$UFq6h6d z9;s4_#QA7+@$gESC6=NQ#Hp1sQ!Gcjgojhg46#ZDl0-hKy4WR+P*R{n>$jp5iq#4b zR#h?W;l-fsc<62nj=H2hD2gsFlYz92H4vVuG-=G(IzN`%S5Y*vO0o%*IADfnC+xo! zMHQ>@xOqaLzDOjFM6q#yz)X8k6h-v9fON?cCVTt%II~x3M!O;~9gAjpD2go3cLGa# z0bo61wUX5+Nu(#P5@l~Y@nid`C~mPD4?HC#?FZvWV}45wX%C9x5^Dq?P1ez9BsdX> zTeJ|V?MYFbVkr;AiSkcW=mbKx#cIx$aN3!nvSpIG@q6Oc;;=X$_BL-PQBn?jl4l6rLIHn>zkv_&i@8_1 zJGosjkbeoHdx!s+!A5w0!K{$`F*nK8gO%$?9F7%}b*P`jye1HhjE;hO;-P?l)ZSs! z$t0c8ShKhUktlnm<0qFuB$d_#hj!Id%|}@jb`nvplU7XD+N4N@W_Is3Dbk5Vd5Lt~ zqz59IZ%y`Xv)w83VWSY`TIs~e#lT)QNb9ta3_OeoX*8njk(wuKAc}d`AZ%?Y2$Rh8 z*N!a%iC|G)EG?Z}1dQd0xj$t*Ou~$nzUJf_sd2Izm`ki#I@QaRiCUqeyhv)DTnKEX z)>NGa945(RxF}ak^^;Y=I>(xkpc zIYP-Hmd`87#{g?t25aUtF&Ar{D9;1d(sb7Jx{zBLF!GX*h8BAau$F92sx-4kCQE?PYc;g& z1P)(hL@q8|F*z4vsIf{YqmpH?vz{`8MwDklZ;QjrDl6L-LC#v37Db}s&437S*qIqY zu3DEKfmP88rG=9?AT6}!J6W}iabd+O08$)`CP_1El|>2_$pBIuk|s#AY7ryFila-5 zCvk9EWX+&*)EY+2DvBo6OyWRwp0$_-1xJH(>6^$(p=T0Ds-@P<6c*=#Au!;WR!Nec zg6y7CIcW`8-MC0@i`Dj1lSM^)hAe^i6ZV=sC#;R^Hfdir5V6tKvUOowAT0jfU8FrD zyq1G?McPVY2J4D_zcB-~OU_F4WXT#V4-w+^hKbT9PZ-I`{Q2N}P zC7d1(5uAY$EQgAQ??WpB?AH&&p9}`}II#2oNKc;%?%NGRPpB44{TEHN))NpQHF}fr_+vmi7$y7QFkc^;@dBDHu~>inIv%zGi72QcTD?1#4Qc zBF#tc^Ps)7vwk_TNs*n;Lh+b;4`-(j zf@jbu(yaN~Gcd44N$^kD1_RmAVR-Ei?1-BFw3Q83Z!-v7qNE=MQ5>WSu%d{-67Aj` zb#7aLg#eR=Oug{>T>@1P(xs7Si7Y8IfNUXD2HdcqWKbdT)0v2U9axhj<%EL)=!QzH z{h2-(m%}Q8JwmF&ti1z^P|=my4F`uI2E%&MZJwTYv!cth8V>qxT$`rn+N9{xtP>8N zYLhm{{z`6X6FV%ryJ*?LZ4g7TwL_EDL+9qFWQy)8={$G}aJTd_<>w@xHYd6`qw?TZ zh-R9?(QyxepAYXUt2cmmRsF%ez(|{n)zuB;tTEV2Vu&O;9)>MH?wNEZsL^R#GpVi> zLxAZ^$n+_w7x?b8Qi33R-qLu0Ok6?p{gX;TjA5cY+|Yg zNoptnYS;uR?ZBKse-JcxhXP=xD4Qc01kKrtiJWM?eSobuY_C(SK~&QpaIVOKKMD#1g5R|Fv+oG*?pGue+afKk0r*_<;Lv_s#CB;Jo}ka-Dm- zdxN{(?S<3v3cthkCak?2ay>#eyB=`e>AJ~vh3kMT>^j-C#49aU^2rj2x|LJ7|vT8S_9&_X(aY!(YiY{-xf@SDN>*ggwc z!S8Ssq&84UyTjrB4DOGR6XDklY}A1J7~};0M#nM0OCOFe5a#o?%?h$y5$5o0CxRRY zoFj?d2eJ%9*v0}`ioeB z_q&?OV!+3`nn(@c*SZ?XBET17(2bLLkDlnd69Qh<3qAv1yb^3`Mpzz0tvg#hQTBGCUi&sj+ffW2Kr2iVm~z&NS%w0@!@Upv7q?IBpe zgnKncVP)0f?4_H}1a>@}ogJf*n7IN*&aiNTU=lZYdwRiqTAHs5<61|Y;#m$?FA?#n zn-C!72Z?}Bn+Y#gJM;m2QcY-zfY;>~$2Z7ygcwX23rz{7n~1 znX0frg|~p}KHN(8?V9k9#)LPqI69%|2Eigy6mP^Zg*Slaij&P~MEI-tVTarU`y#^Y zvQW(Xa7#(}3k2`(hi#a!@Mlb=KeShP4Qp)|yxfFWA#_t$WFjj334Zn9Xwej2q0;P$ z2!C{*?vQ#RzCU2o@WlfDaZ~s`5LV)QS$G+Km24K^s4QfYAC{fMo0|kUF>COfct1S- z&c5+8r$DIW>>e{_2{o`y6pC*Q#do0Db@(J+cn&2)PvMsk!L1uY@Y%9|6xP{y#v|jx zx4`ep!ExaVmr%$Lj`Kq(7JHfUF$g;&W8FabDAv5RwF2R4yBD3?3s;p3K1vk|`$zl1 z1~I%TWBs6%fXS8*gm2Fk+PK_%4Kk!F^g|umX$n6^wbQ|w@T1hv?%Q76pZ$W8s4rn;;0!YQj8tWFsejFBX0JY?D7T;YZ)nbcV>Ej`>5n01n@SYjRD>!m(%AKav8;D@?nZiLc%prM%6qO|KILs$&hO_I&@7xV~ZQ>rH<1L%uwiu7XzwGEF+A68@94pOsy;q&T2 z2g#rm*JBnarSLSCL}G(PcrfkhR%|D!9T4GxjOWjwEI3mThfzY*GqlqCZNEQ>DWkuS z9hwxroau2p7Fv=5>!0vYw%2Va7gAAz`_i6n!OVb0AnEI|!NAYVF8LGKU{d~82YXY7 zFYB0Z#Nq;4t9$(crbQoNVN$pZn=d?Nt_ARe>h~OO3_xM%d`RrG z0z#UR>nwRQmR5voU`#6m5%^>BiM0>0AKM}L3qP@b@Eb6??iee}mniXAWFiKWE^!b` zt2@S`i3WuiFk{^?=iLog&IEgB{QhkpDBS|`~YSsStpa% z#|VdXteY9@KjHvmAAviB;F^F)Sa>SaumW5VOun}c`iD1c%J^EumbkfSo53$gEl!n~4Vo$wI@(*yO= z%0S-{B5kv@XfMaMfxpQ8w86uuHyYW8eF!W`2+zzEYPgK^B*i)W3N)b<=&TbVv(lb4 z9NgGXI;bd52Q0nC@sJ8l=cffil>`r|yAx2X4mjp4{LsMqky^_XPtIK##SPfWrEbZA zmsc2WZ4n;D;fFaHI;INuH1&M!(gNGD5f zn72mVC&KsJ54!fbYT;zS>F_o64Dn~;E#m27kEoNMkvqtl@bej zpU^*`uhMm)TKfV20)H(GJ`1=`8(OLYb`1`_wu=t6DLmt{&`zq?FaawOlhx_WP+?Ff2SfykV&HK zxO;xbWC)@t$CX$rLZb6ZGUkpXReeB^TT8kocVLG7NkNV<8e26)aXvl2eR4ZQRJt`G zj@5TgD~&}5!rWZZJvjn#RGBOe=!;U_(=_p<(L!7|R4kt~A+AIT^}!$>1`5-}Vo?GA z$12uN;zD;#h{=*M51J;P3~Gq)ii+bWw?KT}?!-F0wZNV%-NQ#I@1C=8@??l$rnM9a z#boDTZ(uwl;F8B{7Ef*l(qe0sGplM@#MIv5amgb^o=NNz5}Tw+L2@#wa&YGIN$eEnTYC{UaqS#bPq}h*YEkthb{B@V4 zQ{{vPy5yk}?_`gShpK)mp8t=%F9DA#s}inCYJ0EhRW(aknx+XmG^EJB5YlwW0s%sR zBrJAltRxkvCP{^=1W41+zE@}fwOz(_+?Q6{cHgyKMjf?vbhKT@ZAM2&XGR^zebjN( z|J-}t{@$&+6$t46ks05i>z;e>x##ZZoO_PiFZV*8ZpgD*6?K~!#K;*Dk1n`xW-sLF z$l@p?$4=ID-cbmpHJ&evU+fq5&+LH;8p!Ga!cI1hy3=Z(hqx2jp0x z+VWA_NTJRQ`m-`r!xALFxLfF*X@~rEV_LVuiT&`&WOCFHQWPx8hVK`1Ds)kAa{0;=`vEu@tCh1 zg6S7Kh1QvSprmVgjn^S`%xs4;^1j9+uMcp*8U1IuqmoyB%`Z~ZiHrM5?Y{b1Mb#CF72VD4J%KrK5^^3Z8LR{S2K?_2`nA?=;ose zJ!voa#dv&Mc!*FFF))`tEy6B-m z89E-6admCi46)D9t_&7=eSvZ;xKP$JR(H)1YYnX|sK=1~7bweu3uP&*ch3-$jg2R8 z9R~%8Nu*JrFe|bkUR=FvWmFYwvO>mv_E zo)W1G|1$j6@YBLQ;k&|q@n6AL-HXK2;$CsRSR#Bgs9L zgflAA6y@ZlWaAZL#%_BZ%ky&axKMkAn6YaQc@6ElqgEq{yp`N=g&4AHkKl-I!;yjf zNZv-)URi6ZL0vQpy<8js9uoU?6Ay`c+fj+CpA>#q>obnTh9N#XCvWJ)7%BsX6n zHt3pYr@+g_qeA5sVqspy%f%y5L%FGj0xuU213IxL*9bxz1VbdwW@fJ0>bd&tS{$hy2V1Ie_sx?>0%R$}2L5(rO)W^V` z@DRRJSaXHE9n{fW9+AQu(hfi)F9>xs`vZ+^yc1rKw!=gtuL!k?rs*UdRci@;sZF@+ z3VBbcy`rUNFb;hBt6$my<%_2B=^+mcWgPfgf?sNdwG7yyua-2$-C2u~ zwieZlm1T6}sF{W6m$nP{TnR#v6{>8^ZmHua%8uZd?uJb#07Yn_E04y1j4sTq(;O-MT&NIU$}RzNB-Asuoc9U^XcR$cL$ zklGwbZN%Tssw*B7l0`H|H}WII!Op7751Ei$z5c*`;POR4nw8t1I-&aV1;|{K-=A9H zuFDTXCT)P{b^KE!?6`a$kgv(}Pqnb^@&izaHcG5ER}TJKll@W^@NpWlYu=OgI&$pw zOO=2`42LzOJr1NjerXFJoi!otb|CHcOL0ItV?x^HK-%S(DgbH9gtXIvw9_wb2Bb+7 zQl|r{(=TlTq^t?4-GS8Zm+k_jj0vgNfz<1lHUiRV6H==KsnsuS5aO3707*L&sb&uj zRP}eiv>t{_8Zv0Zg_=e<(CM#!X&nrgaX{9Fi^F)rk>T)1;`K6VBlrkapJCOSQ zQaK!cwabRZq{OUnU?sFO6L4hK?) zU%CU3$VFU3I_y9??3b1S5>YH^NCzB92mI3Q!n(`kVy+z%!Sc|72EX~GrLbnvd$_70 zp+=mNShWVI&yrA5Mq%j9~k z-B5@{q$3mg(Jz$&D!DytsKjK_fl7Y#OABE_k-M=zp7*=R+o-~ z>92liKJ)=qxT){+z%J8?nmXr~;NjtAqHfcuB?d_jO!A{&f`^BfiKOvH273M?{D?{!7uv5zTLi( z(yx}jsq|cFL#eOi$�soG4l5{g(G--lu?Nzz={dBw66 zUE*Vql`NK8R=gThfu@=D>QfdfFQkc}(|u{#-B-yXIqP?c&oA3{l`NpMe3$r4sGlsY z=K3jZyzdepEbF>Tmfh>|F7c;#RbM5mb5ReE{<*CBDp{?~naE1+!g&y1k`#DF^yRY3 zt7P>q;^EN~kcF(}MPzvwFqf?Cz+CcIYJFJbB+!};505S`s<=v4ecp#hlVuyPQpqgG z!=uAxo34^QfbZea&f7Y!lEq(p&}cS|B_d|4!#Eu2P8>nlvAp#v*$paGy@nZwnAozI zg2uT7LlCx>)m|lALXnT4YRg)#QsJuVB*Oa0$yu>AJs?zXZMsVKjM==Jt!iwzO12QX zLcmDC6@nVHIV(0LhJ`H)>#mahq}W%p6$_iMlI?}A3s55re8Y&&S*ImAEUa4?zp@E( zYbVsX5S7B3eTT7T616Q|c<2lAs;gwbE9TAain8rj$;LPPH@nNrJFb%5P#faF5}VPe zE8A>1VPWy=>Z?Rp2h`J9e|!wBMV+~|6nLRGuk4>K!IjqQf;$2yz~vzJ!TGz`L$2BU3@$JgMZ*flGfSE&(@O zx!qK*U2RLtrK(zR3ApCUQb5(jq*f&@MFhnxI0IaFWeK2ZhjFIsz8*kaY(aFByMo|# zA0RHWAle<45CLr^aR#{NN|}km&L&5*JHhkkUO-!DMr(AUf!1sfpe-#E!z6!Kv@S450Kl z2^ol!Ico;z48#mD3r|3XEshM%!HyYV#E(FRxFdse*kcA5`$@=9;mF{e0GI)0!7yal z?8xAp^q2u={*XZQ|7$#Bp4bzyhhwK>)zP0tKOTK`^fW}^E0=yMeL~t6d0S*@ct-rS zxF6o{uMIsnG%t8G@P$CL|DFCNzL%8#cj;isXG(T>zwbTl`2`e|?@#s;jj`7wPkB6E zUpO8gF#kU|Iy{j{jFpp@CE4-~=Njub8e#9t52dp3vb4N+a%wo09;mLYYJ#`GV`Ed} zsmbYq?p_+ebf9f2LxQjl?0_J_-6^<`XVW8-@goU{Gd-EeoJdY)eZxct4J0(Xk#M+c zUwhBtUQ^zE9eo436UzY_{kW#G1}Zm-r!n4PP5>c#Epmuxti2uuVlCXjmb#I0A5n%w zgW(mslag6A7z_CodvLM&J~* zxgG&irf&vO`r^Hc+`fP{;MrzQSfh7|b@A>_jDsitVbkDIe~F_%ZQ=_=U$^Cz)zLBa0;Cu?$ndn0qt2jdHe`jwum%KzatBk z>DzrdK!!U(3kT%XI5JSd!%(&&MAHwrrMncjB1q9;HLjzgL8NDr!}+yvOrWf(B`?46q&Dp z#zn%NmN3x@0WEWNsnP3KMP{y2EA2WVZy_otpaxFpb9%+nsnX6Dtu0ZB2{ImO*%lW`(Q1|MaKsnJOi%m?HrVDmo$At@$%z(sim zB35SgAuqQQi!7jjuC!vaq~G2==qGH#!6fxDVo`E5llQdHhSVI5n(NgDceO}-BT^5y z$T=DF*Nb|6l2()F#K7*ub40MVeCdR9PEwayVT|*6Frk9{{d4dTw zuF7>mhBdJ2MpH3HyqyEzi3IJ&*WNn~QKiRV(E=I!%_M*tWRMSd7cmYBH=m@N$&;H| zcY7vr7W}^5)D8g4mErVRFwq3xz1f>e$q}%Nx|zK}>W3x&w4I1y;uCwVti{|m1ze^tFfU?t1fu_+nOG{e_()0z6UJAbZEU%BpwR3!lIQ)WTuVZ zrzS@lp%94QWBfJ>o_ygXPizvlHpFZ61YK$m3HSyEv<{|JD8&2&C`DY99y-3NGtvK> zrF78|Oo|-4CP&9{>V@B-0#0%!yyQ#9NAI^eskVy_V){YF4G#}jR1FW; z){l%dHH=g>(LyZ^G8Z>YRa5=VpqdN&>gom?8is1CDw-PVptzcvAt+NuBjLtsU57StQ@MW9cgGvjtmabVQ~TIyy7R0 zCWQV?&x2?)rA@WNHOZRB!HSxZy4s4`>gw8x!6qO!SyMGMRF$Yn)YMh=5>J-US-@a0 z|CvNGRpPTdrgu)IhE4RIZ>z1VYOSp7sAy>D1P*uBbXM$W=;)}ZZfI|7sH*O0t*NTN zU}S(Mx(+axrm81T$kCpJfHEZd2OP?vsC#it(}U`MaGO33F2d-@S7{?-%*d>!S;h+~ zMddgxMIS#zJ7-OU>MdDG+;hOd`J+u?QV1Y+LdBMJRsCo~>lz;#ogz+j=|G0UCNon> zonTs$7FS#=O+7Q?S)5>8FyXJVsU`Uupk}hsW^RJ1SbdQob(23BsMnzpT6>JvXp5NI zm8&?%m(C3>zs5MzxH4L*A(6=k%&IbSLz7{JJd@-dqu2nLXj+e~GEE<2!KI@XarI%x zHLTo+6dk1o(Jq69VyMKahy^Nk3TjOmcbc50! z3tT_T0xgq%6g2rzT=TuKN?!A(Vckf`YGEFRzzuT$k9c0~iM>4-2%Psn;`>VJ?@Avi z`F2US_Y2;2kZ_a#WHi0&uaaYA7j0}z)F+$jhAJA9b&VCZm6eSZO(XEH;o7RIn!3bL zP5sD_Dtb9M1t$4pbce&8Lz{@sbexZ?Iv~2o6hwd+J_L|1tz-?Nd+Zu&de`40gI!Be zRJ5nEiNVoiCq$N*$|SR$AXQM0Qm#a?(U~+hH8sWIe}v47)b_4_qYS-T6qWf%Qq!3A zgEpb6GG0yD6sCrC{Y^3$jTJ?JcB0Hjhz%znL6wx6JE%=ve*<~zQ4}?>Q4_fgeTY(1 z?b=aR6ecYUDGwp&5h$b`EpD~elOteM45h`M>P>NlC`qJsqEVE5|>dk3YC`?;bQ}k*<>CU%Qm=V}* z!^dKT!OvSq91VgD`!yY&jeiv~>{*DaZwaX#qViipY9b}SC8SPgPHEZ`RdaAN#iF-_ z)V1(ha6s*ezi1)#)`{W4^!TVrSX@9ZZIWv1a%uHGc}p@~NHVQ6>W0atO;>$g@KjJb zt&?fGYZDcRdJ-v4K5eC-hrX^L!V5U2T(k57nndpZ%RG;JVx!UTM)yjo$V3vU;n z5N{XWBy0}7D)_I#j=(1ZyZmqS*Zbb$+X!(1mX*8)y!1WlZG>z$^Y1)0;p<C(k(gmtWw$J@u%HDeL7z`;}Sm2!s(&k_sm(XoV}dE2Kgt zB3HE5sQ=8aQWJWVQoFkTwQ?!ZhwzAAXyLunV}o$(aH&>JVb)Bf&!nxoJPZctIcgl& zzaEI-ye5-tdn?flj_FDRP4r_)Vv<1=ia>=NrZ#QGNHb7xr5`h0uPE*~Ok#+_jZkxu zny5i%%;V*QCNCk4w|0g(g;}v_@uJ-DP?Iz02zWKgHySMAy{!~jlDJ6-QUkL7E%H)c z5*#sAtzd^(Hp4>A7nm#-=H0e4$ zt!d248{?Jnn#zXC8ag+YP;W2&9r9Y4g{S(7P z=x+IuyoRKl6{&L>kdm(C<*Y^|S?irkpFNe?3=@SKF%M85Gcd;Cp#mNHf*idl)$Wc_Tz@| zXNvlZ0b;=|3SZx7G=W*3JF$?!Bvu;|7pa$+Vs>S%TK3SShZU+Sbxm}D-ko)6~lGq9*G+>e~j0f!F`D8UnDT|O9mLTy8)Yozr|A~j0P7Oc%+<1rhf z-RR}jZIr5h{-KYdD#7(iY6PChkVcaeB$;nuB}uICoNUg3l|?dt4ko3PcNIG*l}$1j z-|%(5dU99K@#KEzylJ`PFey3T+1gQA+tEhNDm%ffvc0BaM`!I0Fsp2ge3j zc7f7+TPvlvg@1JeTHuWhd2R!Cm5GVOU}`i){JvOwnuW!rSr=2uOYWg06>$|ZSEgGG z;}tLuS$0eg(xTfbY0WbCk-|(`7pTe#Qe{HoAZYE~l%QT2G5nQ+? zGpV7(Xz$d>2nj_)YNnIJ+LIg^n1pJR_rVrQ=6X5IOD0}qRSPUDL6#(D)i8-Q`{vPY zc=I{STlrov&7XqY)_S#HnN_x}rc>&6;zrur-^G8Ghe1MYwzUfIrmLS)tW@O3WzvS` z^%s;S#ACI$zbD5%g4?FDlj$+~U|N5Qh|j`Yg$)JKnIv8ZLmu^H1)5mx`6*b!5c1>r z;9GBi_ONXdefpAqQeePL8zEc^L#7N-0nabWN5 z-;(1O=~3@{>f-6Vk6YFclFX#xdM=pydI<)DCeul6B~X)9dAIhooNjjlal`Kg;dz)> z$ES%9kpiY)d zhTNJQ`m&6Ou`@PlnJIx;=LEhgCz1&t^>ov}iQoEBJB^NKCllk7jI*(t$fUshU>(RH z_y5J7dp*(LN4vrM-;&5o_;=v{?>^z9LV4&MX#ejCe9He$-($X2rT3P6tz?V$G0&d? zo##(pNup|bL3R&rHTaIVZDYgzT_72sOrD!`-lOcP%rjohH%VH)EGweem` zW1S41H27$29UdlU?Y`vL1ia8mW}S4pVHBiQzwNPU^*%-AC-+kbjY#cmYMmwaR3?qM zsL}Oe^-)U07Wn`#zqGnl-$z|GHKZe%NyYj4rrP%QrXBSaI~wcjDr(#6c2u;sH`Y}& z*4Nb4cQmy%Hnywx;?g6O${PNM5H>QLVm}uICZ+0CqWv(X;xs?69QtTF7htY~H~kdI zV|u{UtZTgYWcqCD=qM2i*%pD~^E2CE+~@;`XfrkzBV>U0+b5El&e6n~v`rO6SA0E< zS-q|p#gga|zqFqcvQq&!+2*1bpG$U7)|rzR%gDOeUvKYB*M_Bz=O{{ixf9(;vsrKSKflRo{PRCa*US4ZN% z@J$+0B^+*&!-j2&ZJBYyU{ca?F4+t&F9Bh1K4n!mrLQg5%*#DI zYZ#FQ3f#0@5t($|*yUPZ(6xJ*L9F=>mfcJ5J*&A*JIGPQ)pp60z+?e&Rzj{Hkv+6$ zn)$CE-HCJh#5dJs9ncJ4lQ#dmjMQ;{TNSrzx-ZIy!GbE zk(WJ02XsxwyaNN&uNZA{*%)nc8~?_IDh^d1pf}W|xAPz}+o$aY^6^nhS4Yt=?CpfP z^gzD8Vp2x-hU?1tHK%9`5AYisXd{O>3ZvFzW69wZ9Bf!en!@X9=#Q20X~T^j){Wp| z%P8EM?j&u^dE)<%ZxG~d4g0`QM041M6mCz|Fm2Cq{y~lHF?7N<^Mw2z!jY{o%{4=m z=7hYxxIQo{XLHPr?L7GkQ+;ueQeBMpoAQ!<{jn!AX_&jKkA4c%T-N8&en%6O0mWMc zQX>G9q|Vw$s*KH!#AJqXfnM=cN>B&CpD~mvB{REH!{C>a7zL}hdxu~@l*purQ8DP&Kx=R3SQZ}aCNowXCRJ@<1w2Z3z(w~_a$1Wq z*Tbqhr^c!DpQ_e~6|BvZl}5G`k4e`4OzI4rk0@blk5R&^`Z48 z!mj`)_y2{S&yoB8x1zhGmq#87|1jJnzC!rAusC!$I1+fd{|Vn8eVa>r=A zKlv%LKTPZmJ#UILt?O_6;~MKOC)KeOzViThk{{}lg#;-P3)B75>UX>PVJP5y10mgv1O zFMI4I6mH6(T#6kP<9}Mn(-uvvsi}HNMXyB|uGjhSC8$;bdx@+5lfmbL_-GNxZ*7%A>^;$)&%B3XW&g(U%GWLOPr-s;lgqAf7m4De0^T9(83LFd60J9 zDVaLI=kgunzSlUnUmE$DuU)Ln9Q2>RUi4cRCTjG-y=KD>W?t>}%!TQ1dw|k^n&0-4 zF*M*cqT6ubZvs1i;Z`i2rmfh+FD*7CSE?OPmP_#Fip->s9`HAwqqMd0k8lQUWKFfM zL3t3FH0koPxYia!)g&)IOKI)kS7zI!Yg(C2UIV`y8gl%(u>lqYK=_YwsDFwrwDbrs%iisBV22z z;C0~S)Nm@TkBz;F>GYJ%Y@I6$la+m{%Pu)KNoj51pQ?wudw2K3fFhA%bPBCw%N2!5 z%kIRP1h^1PLD)7>u05Eg1g+(_0XEmhrh{4i;oWLu@cy5n)fZvkrVFlc;LxcCm#ZDg zkie^D_Fa=vUya z1>bq`IC1`=H&rJ>^YunHY}=uUC&$fcepp6N8ASvV=$`k#Q}J zD^yhB*0snO5~GNF2sX}8uvnEzT+QLmT(|+-Welk?ChsY3A(n8Yv_Ykdzb7-m8}C&5V$;|2_n=nUq^mgZQjahuXpCT%{~SikvPJ$(Tw-!5Y)knQ|W1Z?|i7igX)QzNOQ z?X3?JjY*%yu`}5Tl?oZ7d9>uXU+CfEOwci@PtLNczS26-Sy)WkuICuihn@Yc4+e&& zZW1#fbkmz)9%v5A%?6#y5*dSqT&t4^vntohIkvf_%IF)yLSBQ*Nwbp(8AFa-vzLfM z%(1Pxc%r|l+(C-s`oPn)<0kgVJu-$tDMDqD_b6c9IxS4Fj;Ps|!W?M&(d~dN(0f=B za`C*xcI&-sr-mOd>^c!M0Iy>T5qMetL8Z9MOj19(pM z%Ex(6VhoY0MY~MYlSvZy9u%-dpmm)7+d7nHUrxa;A@~2=JumdcRz%08k4R!<3he(S z@wsAHI2Za#s3rK$;D*4n{6F`neBbmPEB$)uk&=&>)Oug;4MC>4`kRoe=#waZXZN_Y zf^^NwIQ?fPA81?#Vv2p6jQ$vk@TCTKHE<)HbX>KqG_bIkBpKE~3uO#(P=qn;@%Ho( zxCR@a)YWxr{Wfa_HXa9Ef*hyQxIr%CoeIb4yKglB0E;9N;n;@4q()!i7swTqm?r)g znmoqL?l??x%#pLH^ijs(2^(dBmqo-lm}OdRO=D6)qf}4iN+)g zo`nym&t}UT;ux@ViM&o-SGeOGS}W~NkEc$#-$FI=Rg^+B=>hLG+WazxUTEOgCs=9g z9R~X{dvHlt6eewSW`|@9wa~yHh{IZo>(gOZ6eb}WQ|8MUd!dD2>tn4bzvMvcGXslB zkvfzphgQlMj-iR)9~n}mOJVbjBRdY0B8wpWv{~*sca(dhM(BPw*s>x^Mw%$XtXVE;Us&c(%Mn#$XQp{L2P-`hwS(X*e--oFnGJ zsYy-Ure6wdGlC}vlVCL>B6-8zOjo)J8N)x^D>w1>AP~SqgLNKpW?~YqFEJG|hIQ!S z4`5`QGV0P?;1ptCrA_EeBFTbXu4gPq;rKBb!!|T1+)wQEBFJ{%1NM2D)UeIK#}$Q1 z7<2CHgKYMiW^(^u>iMcCb~P4`J}muNdPd~`A`gV$B>u11B0N3xpP{|M*MS7!9sd9F zFNXX7b4nMMocI2lw-2)X#r|E8(V57mBJN&O;MtZKQ-gD?QM)%u`U25NWcHIj%EK}` z4=F-@t-W$2#xQ!f+SU$toWkTRl+jzr3jT$yZ8Vt}ciLC!KQk+JMwy6{V)jBD1I;Wo zJ_&(!h{&Z(Mt31aJO*!_noRdYM1bjn>nt0QNxRm6=j2X$3RuDK@Vq^FrepjJZ2H!9 zQ~#M+=Uv2>e+0yT!*@}h?3OY9#A<~*MhHk#$f$8%E=&o``pMctj1;c%fxolcX>00b z3`Vh1@$>FaD$x#B8o$qVTPWoRWDHobQsMSog&UQ#8;sxQnsR#7qY?*eh#nGqmQ1*N zWQ=dIfQzLQ>nnL;qC9whdd7m@T0b^PG%vEsBUk z3jV3E0_TvhBrz+7z1>CP6qL{rM8XQe!Pm)LE z>T$qI_I^h?lQ=p80x|}XD8jWdvcsKg)--0-=3Z8J<})%zekdZKu*v|3%G3CrNq{N* zn;e!gcEcuqb2POEcOKXhnKYQ0U_=mnK*o3sEBPgm$aK~OB){{}K!(GEGR8t!&95?3 zTkEXdl)zhkR<5Rdz*7GC0NO&w$qavER%$*Xl17vJ{~~XLCpH*;EV@j}Mcxpp2)`!0 zP#gjefPV^g2A>EX4SYDT+Mfmef4nqZG7iYM{*)RSJ$3Zvx_Osl?aJDj9);)IS=2F- zS=5_MWQI;UPl+5EnEia-mbnuGPhgE(nc^hfHf*-Gu(mqmLsX-@naEi$puqBijP66W zD^u6ZHtX7NtJ~l%lSMb04|L0EmNkbZX8a zJe$ZsTyDMZP5&&nXcQ><>t%Fn(!d|nK$ms0DR)IFj%bUvjgq=Z#_%Hz{ASIzF@&M@ ztW0)AVUlXY?l?y&+bm&fy_y78bvz2o zi&~JlQTYhkuyHSR?MX1J=mj@O))A-w%&d|Os`D}i8(GgU^VW`PEC_+mK z+jkbUW*LoLt>hX15X8wyXUu(QCc*l;BFGrjqX_#(4)R=4n8b`_Q=@cqsgtFOzh$QK!x^gY4XYF zjK7NCXqje)b!P%*K9dMbItLvKW%QI^#1cvA(Dndy#+GH$Y*FhQm*;gpsA>0qb zD+gGRSYyMM%A{c+GcaCG|L|RtT5PlNJ2loY{WoQZ>A&ggJbO0U>k%2f;TN&+A6KUt zxV|O9(D8t2UsPRjm@TCA5_&F;$mqMi>T*Bt>?1aEv;YR5o#{+E435$Q$*u;+dUEN` znz#uDkP{$D=}c$re1;VI6TPaNa@f~+m(ny(mgXci+n(e!4r)`0>Z~&T0yhx|<)+$% zcDIw=*p%8o4hk8FJO>UXGbmP~uZBz*`n*Vj@7~eW12kQgYQR=x!feYV!8vL#{BIO| z=_Xxqw9+)ynK?gf)T#grtmaJR8hnLi)AYMeyDC<)Q{FW`lu6QuP^0#Vus@xpTJd4p zBU<;;kv}41_<@ZIcUbX!qs*GdF~Y!(85|MAm<8p%sj(W3<>ffp?L$l-&89qbdQ(I# zw+3lTx5yaL;F!#9;DX}~&dXqHJ=!%slFp1#uJeRzDx8bS9sMAcmNDExhr;bs8D_*- zdfYvzr}adT50gpS+=-C!!X*nbhEHhb-+xs(iW&kt+nS|usclO!1BuyCI%Fhygr2{* z^FRA@)T73_EJTimmY1N5GDbcq;&?=cVQPE|Vr^2c*oS~6ky*EXc$OE)7^|RFUctLD zk(Uzs)lHKR69uA;C2Tw z8@$*k z8@$*gce7ki zBa}=La{pi8>G#B{qc4Z%iQl^f(D?r3 z?TVi+Ks))3mDFP`s2ue*D9bpz=SAfhs&Lfo8qZD=OaEc0Z*Lmh`h!JV*31_o&tgW0LM}qz$r5h#s977$6N8wd-x0InE|P2^wz3l~USYE&MTr z%&pLdd;YeXv6xMDoiMs`nrfuUu+6Pf(7XPDr&sW9aq6(qrW)@s%Y)Bsg*KAP%hgKN zo3Bx)X)Po^p1a1uEH|Y|DP7TE)ap7IVk=_1Jn4BfdhIyIMaq7AaGOsi`rr-;OS`$h zjjEf~yy$orVxq%sk`OS7;!IA9hIA zipvO_ic&43cmJMT4=*3p?sg1322};onFJbR9XcMg z*J_QZR++-kL8j4kycdjqCmm$%pvQ%db70#-j-TcXz%V*phIHVidt{6s z&^p8IbYC6L`eZ7w1-amH@JS=GyxjPgCd9Lf{f&uMPM-J`=I-@dZnTLFTcb%2VJ1k$ z(AFD+7pBhBBtCW>oC!rO2JYXkC8$zL8(%cWnaTl2RrCe!=rk@^7{946HJ0p541s4@ zeS0_MQS0u502fB(TG@0FSSDYfJ7W=Xz;(%#RjS6Ac!jW;;|bR&8RIMzu|~m6ryBqj zeldu0$H`AhOvaE2t^5(?VP;#mGzK|ry!<5HA!8JTP4Z6OWmBgI_B%MkSx;`ZL}ump zY_L0&#?lOR<3`$hYh{dYP{(gIgDW3g%t@rGv+2w!2a#?Vg(bCNgPHKm<@5Yc{oSYiXe{S+lkvPV`PCAWghQjP)}Ey za)`0av9Oo~H#-(a@{7KcX*)CC1n~Sow7*(pJF*6m`~N)8X-{l4`t9f{sUvbZ{9)l! zp~pgH{*U?^OCKruWl6dBtmhAaa(({ffP${=Yxw;a!8Q#C3G{aZ*9+pp#5y%x5SUEU zrMJ@xI+gAb;3m7D_@$!rZ#<04i^?QSJGrA>gz?2Tf)>2t%hB1}b7~6AE~$mk{zNugRS2QlgkUhh=&!sb8fbJO z;KX&HRm0NQok)$tXrS5=6G=u5MDk9JF~J!=3YA^aNIBX7Bs*KuAtf=2G}>z_%GNn_ z2{I)^*<=kgvZ~D9n;JStNYt;w28KS~>3TC?(Lw@n>ov{y_dGi_6OB2n^!-{{q+lq3 zWX{Vw*bO0oIy$xPGxih4x>!t3ChZ1)ohLO*nof>JpIv&ZlCR_GT}b*XmsQZ`f9e_B zTbe3TGn%Q@OlzWk1x*S->v5~Nyd2!Q;mSiz7jc~wbPT1NyWR#*kOMTv1GwEW8HOK6 zHyy*4A5{;2s#_Or)X-_VOTlmky)yS6tPAt)dTy3(n zp!e}2yf*fpO2I{DV!D5P=wxCX45=wAtQ5K9FzL}&FD0s=!|_wfDc+ujeM5EnMGpKB z4jf+S4xQ=&eX4fidMP|)*vYmQrBrxmTW-?+wFJBf|Q(N1^`0J4ReYONAO9c^l_R)dQVCKoKD zGqgg@oRIwr`du%=8NDX>uuy7cf-4HM{qzJnqM)nwQ~U;&>d-X5!gP5xz!;=OW@Zwv zaT5k9713#2CMP{2R-`v-4T%oE4GQ{eKak^gwTwj<(Kyx<3Y{4o?a`mE+UuR}8iysp ztib1ErpxHG7Y%}AGq2>u3ObT6BHnl}%nv;LX%hv4_t7UO_HYjQFq!<(R@E~Kx|d%q zbKA?3`e0YtlT1!nr;90pS+B9XcolRlUxaggwE|d9&P}_x&Tu3%snA+4S1ai8Jt1>@ zvp!C$vG)nJmsAA?(D`^WwQ`3)ACv5!kr6WWE-L6Oz6djaT6z2ED9%88=p)i1BavCX z(RcF{^bEh2Ut^$AKo$}g#z6HXg;}>rC=fp~Hfqd;tRApxg@V4{yZHmTXx)g{1zi!| zIysq14Z?B3N@yW$Ch_`kODpK@J*gBK&qXIqHTTnGQ#z$trvlE_sJuCuq?=#tTg|l9 zfCDWwXn>O*@To_}>ZLmr^cP<-)4_XcBg-%dW%Whg+6(qnCh6J=Ohm`Vza4Tz({iq+ zxxFOhI@0jy5KYzTJCoWZ$9{wgJT=vvkr;9HPA0}Cm>AkvwQvgz38&i^4pR%-Xor?bA4-TVw-VS$W(o+*mMsa0gvdy?Fqaigc24I+p%MTUX(~jPypug6m{7)cIFkD48?X6d zhzNO(2ks?+gi)Ws#^u04nzmPKhg#cZ!hz4cMq4mxUv?_!!nf`j{HA&6;EFIie^**C zIC>I}P+Chh>4KTZ<^f`A2%d1%MAPs2iek%PO$8h`VX4LQ$mDjw^EGfc3a-GC8B=L_ z#)e6-N1PezB1qt_Dx5TxLk~?VIoc$k3*K4*0EOZq`}qWd1V z5Gp8DRHswK3w^8q37sPAxu1c=B%5&UAq8U?7vWN!o`;E?mO+LyJud~yP6b02Z@k2B zIg+n>OB%Cktw+o^AN8(43NQ^g#&Zi3hTdZHZ=@7m%d9=qGf(HdvTnQ@kTNtvO=Y9Y z537$7It3Oh7-hMO-?@O^I@P{`F0G87&5z4uH6?AUf-#qS_+z1ipR%E;Ocov!sTXyk zNTUaFvM_-&9qaHfh|VMswA-XahdzpWc_Y*-83kiAAHBqVN6%X*gTZ`xnC;MpiuUr$ zbipu?L|QW#~fhTm09SGKM9WFj-s zlQ}e~cC2+3a6w=;Ns~G%f`Vb?x^mnyezSi1;1u!5PXa5@haVu`w$hXzmq{Mad;CMG z>{Md3ymxYHIF%k4sIIJP8W09P^rQ$yvNR$coU%*ufNa%cdR zM=C)DW7+lcJKQ%n5NpvY(RgAr+TqB+WDAFvg6qH)y6i7iFtlDx5gI&`-2$$^c?N@u zFqchL-6@%TJq!#Wd$cigrm8+(Nd}E!aACrZn}3f_CNd|qadJ{=r^na}mtaNUdlZ4D zqe)^_G6@1&^8OYbt`TP%{PK|`k)9P_3X{#+rc+*S+Pz$V%y-LX->)6wK2tT0TenuP z2I)ZDr(kTsp&YlMQ{V5%(T4i_ppwSIqLLyq{uOg{w}OEUkLS3fY7iwL6}38eh+cLX zhdSqJ`=jHKiO86`0@qG%$ z&CFinJ_z#2zw@$q76tqjb9ldk0Y8&D?kFdDW%qemTTITsVxG=ZFi>e*j@xP-ujHnU zjAiDS2eCMg-N2(0y>GWD7$9}0JjQ!GrB4oq!Jm+cFRV?SIGtmmG8v;D_AE~unq6L+ z&<2z#7%6q9yqvoM%oB>k?-l!00;tRe5W>j)f3fE`p4e3M@#r1WGo?u6nc-K3{bEx1 zs!$Vpe(-0(y1*6x*Zj+Ur%S(HdZ1*d_qBlj*Zn7NR4@$PVY!aCH_SIDd>FTLG(DIY z)l7k?p$S`3z|6wz9ZjAguT(H(TsMCpGYheaGfB;zZeRLfk~jp&_$Cj6qLA_5SgUiAaP6QIk=Dwz#oyi;M0Z@1>??b;ddKn?ydt4b3x>!$Mq+pD>HhJ}IMmVmSeQ6NU!=rASVW62F8zKi~8x)Kt*FU?tN214MAT$(V zIEX${gDG$)mv_jpa&XXEt6+e+1I2jhFeEP!l#d7#rzR#c5W0%E7$rAO_T+QNXVQra zkhyr(3Q?|9j?f!i4gX_GbEoc2pU6+Biom4I>}}R;$~p{zk8BkYch7W(+@N3tyX{51 z%`!>3s5POs7_(VyL7NTzl-7C$!`%(>dv-E6yX(X_m?3tjU`&jk=mNLNMAWQHYVwE} z3uI)r$5Zdr2&-Wy<*K*Rf)Y_A*NV-gQQz;DD@Dh%bCRgpOAM2wJi~$Zgaw(0 zK#XTsM8G{Wfm&_7Q$r-8UH+Nof?SwDNx}GaMLc{p69{U(p(HNsY|fdG3KMjPf-&s6 z_+!{v2uh?zd&brILU-CcbUARD_?%G?keA_rwB z6%2e=!5@&sT%prU-k!>&;l^lY)B_Y*RWB+S2Cs;B9-w;Y&Yl_4^i$SRVM}B-R38Qp zDj4r>BYzB4^0swif?2;Qt#I|Sq+oozBBm|WPb+@_BLB5dWnep@H**Ig+>n?Q=_~Ov z1tZsW@kg$660{et2uudq=rZFLCa+%EO=oQpyRddx!r;l~xd5U8*o8^V3pH|zm4`)S zWD>3qG&!hrQOfK1ec*LvoitlXbi-iMqV+Mk|1a{q#}nHceMfYI^t8y2BiqC84c{p~ zAdG}w75rAM`!Gy1@Qet*I}a2E zkeMynmma6LdwGk3E-#A+7S%d>HZct^1L@l)^rl4!gXpWh#E=IjT6=m7JcC%rFmEm< z$=bM<4=ETia*M+45{WLIeTnQTZGc#5b0jl~0OfHOo~2OhJ3Uu+bGi10tTtXr{%>=+ z>bkIHJUIn6wxgTNsVVFbyvXWHpGuCm)Km?Q)HK%BCx&b4Ym+r~bhMNzr|IIcR$j(? zwI_|z3bi)MoWg968yV*mj7_;(=5|Cu>QY(YBtlJK(xCE;aNwMRK`D!(V~7H@;2{EL>RO7PcxFH8ag0+a8&IjeS-`_QH*5Q!pUoX?_>!_C^%urFBUtK7YYx zD7PsXZLvAWZ5Hn`L!7rc1`?B?>u{;lZP41LG7u_ma$o?0JD6?E_I32>@3-SBlDfK^ zP0r+U1;aTu@C(t%b;~aEvx&=GQJDP5BdDaS-~t8XFShWD(QO1U7IzjFlTz?#Opj8O ztbl@%7>n?sZRQ*F#$Y;|M=YiyFo`j4GV2wL!Pw9Lj?zpC>=neb1@VOd2SY@l zIheHSEB<_Cn4X)q^S`ICR6Id~+qs%4Gtrnt84O&bV64Ui{4YDq8^}4#Q$)TUrHvTv=d((+w z>i;7-o&`nk8L|Sa!M?1#&x6Qpq;}&m-H+%X*`7m}r!D*r4;8~{8ym}HtgDt56L5vi73>GqcjVcvZZ*z7n)6bcv2A7?iS!-vzw3w9tE* z9u>h#hdU0FDA+mBJ>UgJ3rH#Ob{zD%dKvev*>xzWKQimALLD2a@c{*cM6TyoRqaX>Pt-dy>9e5B zu=3oJ#H`+!uFDjR0@(uUy0v^SYsnFnJ|sFp?E^<3?lrw}S_xrcF=^690WJE$*751K z{r%+rU*^erV%wvKrI$p$7O4!M7Vi^ULyLn?3w$TA-~W&PO}_J`-zz;>^3{@7Z!e%; z>z_Q3Ls!aU3ita$-FGDHK$BoQxf47Rom6FUa4gNBb7R)ku-M#84tAUy8l3{$Vxeo&{6 zB`56z^|}Z0-8D}7b96Lmvm71KiumVAjZYYRf)vPN4jmvj@P`541Yy-B~aMKd0_*xR=|; zyBo$0;gxQ`!f-5OBHYBDIQ)D>Z4ZoZIx5K$uf%c~J-8~jo_82^XZy(E2Vy*{#~cT1 z?CF0Ij3K_62w`TfXup}qi`<;U@Wb8m5HCxNAdO~0ExyojifIdBGudSp(ZVStlP1qo zh%k#9ZmI&>l{pMWyoKMYh+I@qE;5>Md06I1W)f%?#tvmCz^ioJk~uzkZjzoXw&yT7 zag)q_$s`5AwI1bzq`^cuYa4p*IK`5y3lB(fq^7;_NWFCs-dREj2E7T*IgIRE$FG7? z$s^k1{0*>R%$j_y6j$;X~rfg*OXjp{v1P2M-7S zKCsMx*7qZb1MrfP@08SgUkV2IhYAY-8<=O-su4fX;EXd^rgGTiCcOr)7W@SvPh&B;V&*>vQN3 zyqDikr>TBj_QFdrE5j@(Z^)qo>;wD`u;J|O9)O*p94d^@q+89Z4mJH{4SGPBpF@|} zRYgb~?Du)w&g;1EXPKm(O^r9h|0>Qk)+1C62E-gX$8M6#cvosV6dYB%3|9wEKI-TR zr96jzvU~VVq>j6jb2v2#(RL?W)3$k35WOIcYjfy;x|iQHv1^yXGA*^*(4>vG1RR@vhkS2!epgX1#{?Axrj%RE-RR=2i-83l;{I$ zUJl~~Z{i>M>QV^j)>Gv0ZRLtBkx2l(flXkvoOmLe1>sKo{%jigGoHiHziXA#MJ-^i z`@d;0v6s^8d4M(v7HHiA1L&z%|2cG;@>&8My$8ui|V+nWj2ZYZ<3RM7e6Hc)U(M_4Ha*4D7 z0)x6t6-)uKb!$%_ZC5OZL5Yi4X>E+syTjTZ78bJ|+FVuc&8?xPZ^tfi$M4a{9Gn~J z>D`d|QQ@rCsa6tsb1_Mtqv@p6MOJb@#JJ}L$z5z<(9!FpS~l9 zp@#SH`v6d#@au;F^;E7NR1R6WS^$~JOn47UMx?SWhY^SmmfZiBdiHo?$>`6cL(-E{b>v0i--Hi{Zxl;}p3tMAQ1E2nbAk1K z+4nVHymY$c$&xs{0r(+gvH!`7a_B{68N3AoONaWw%8|X`J+S-wd+C-wJqN%zm zQIV{z9vZAkG!9i)52=C;lgvAF=mBK~92z(BF;L%k zoGjFn@-PvfM3WG+3^pE2LfD#YQneP5SLDz|$_fY|d_yU0Ctd5_(>4;<#7{aO<4iYU~ed`?U@8zy-x6PbVUw> zs@(92Pvm-hB;KCGP$w&3`?-;f!L{|%q)c~)}^flG4e1fQ(sHNFT7PT9>1SXe4i9cLg9*gg)^yyOaml0E&N zjoO!J4n56R6`?nDkY~LBI|<_@i3*K`90qo8C_?iBo~P+UxeP=g8y^PuLGY@_O4L3# z6eeAoxG0lrqOT8DavO&9PmVOYIYTvmFIcI(IEMk$iwNcEuI47WT%1GhLZM;wqV zau`5m4;amW^rEpbQJ-w88>(nb)-_htR#rAvG>yQ&hHI;;YU&b0HT5GyaF!$%y6H@7 zX6R&U5-h2vGRfAg_AJbLTq=OfJS5;VL2^`Z$gMEW$ufR9>orLGdxtXV(NWdYZF-z7 zP`6RJDTi@TmdQtXg+kXrrFy!Dr|<&Vd?d|H?uHx&M_C5;YMe5xYaq8fJq5?f z42+@VaK{;VO4XV#d!aSnr{ECVBnxu+G}*YcCLE{E|?mhsDfuYrv~+N_zlB!^K? zh|X;8nOHz)W}7=}a~S1>Xw7Z}ZTwm@8=>Vn3~EA_B2H<+HFP)kQe=@DY|LR)6S5G^ zJ&naLL>6M#lp}D6t{~}}|Y)uYBo{%Nzh7iWT1exg+ z;XLyT;YXg>A7a0W{VevQ*uTa8CHD2$ld*q@eJb{`*au_pj=eSZ#@K6OFN?h}_MF(2 zST1%Ub~bi8b}E*P9giK2^~SnmJ7cY}=2%^9OKf9ob!>TTaco{J9P>y29Q}RtSJ9tF z|0DXn=(nR^i+(Zs+2|*uABny{`p)QM(MO`MioP`ZH_>NDXQFcSd~_EqJl z(tD-1OOHyglU^acSb82rGJLx9kTfl2r7`J*l#uR~`lTMJOKOu^qz0)<+9a)&R!B>w z1(GBMB~Rq{kzYoB68S;oUn2h$`C{Y=cnk5N$h#wNi98Z{W#q+?=SHqXl*swWWMnKd z5;-0@5;+jr9chbfi_}Hpk@b=C$kNFCNI2pP|1tbO;h%;7GyJ{qx58fue?I)F@JGY% z55FV)X!y0^mxW&tes=g7;fKQK!l%Rchlj!g;r{Tx@Xqi(;ihnPcvE;yczJkHI2I0t zz2g6hzY_mT{Gs?A@$2H3#LtSK5FZ!cBfeF9gZL`(CF1kMt71-kP@EFS#S`LF#iQau zagW$8wutrO7IA~PQoLPUAVx&L@F(H7!q0^t3EvmK4KW?RAbeW*nD7DNo$$)zb;8Sq z7YYvxGs4q^X(1z=5{89i!XcqY*d??ITZI~7v#?gUQ&=qACI~`F=ntV^hkhFRcaRHx zBlKkGbD>X$J{)>)=xw1lhF%?dY3TW(XNE3?E`-j6(xH=~MCd7@-q7AqN9gWQL#Q&e zF|;bQEVM8rg#y7p2Y(m*MexVLe+&L|@N2<;41Ol~cfk(^-xYi;`1;^0f-ed_CwMt1 z2OkJ#gQLM@@V?;T;QnA&a7VB?SR1Set_!XRE(y*Hiow#r{{?;%`0v1f1pYPf&A^uf z{{Zh*J`#9e;O&7o1zr>Q+rZxho)vg{;9}rxU?PwT31h{a5^o|GaeAMo$?xB0jE>-=&5dVjfpseisd?DzTp==&ev&wT&s`=0MxzOVQ`@B5VR zqrUh1-r;-H_gde}d@t}l+xHCLL%wsq)4uzCL%soDzi*#!r|%wLldsyh$+yP0+_%UV z^M!og(*G^}Rq20~{;>2r5O?!SrJpVRMCs$DYV3_bUD*58K&iJR?EMOYFC%yo!Iuzx z5y3wq_yU5@BlrgdpF{9j1WzFN41!N1_!NS_NAO7mpFr?&1b>I%V+cNq;3Eh=jNowu zA42d!1Rp@~egyAB@LmM(LGW$_??UiS1n)rbb_8!j@KywGLGT!YHzRly!J81g5y2Y} zJc8i$2wsQawFq8=;ME9Th2WJ4UV-4{2wsNZZxOr{!AlUl7{QAWyb!?)5c~~-=OcI? zg6AT54uXdfJR8BY5IhsXRRmWMTt+a1;28*>j^Gl490CP_jNoYq9zt*t!36{lA~=uW z0R+vxBbY#tMlg>5IE>&Bf_?;j2zn75L~sDXegr)T_95s-uouA| z1iKM*A=rgrCxT7{9SGVHv?17mpcTPA2(}}*8$k<#Z3vnXY(>z7pbf_emX2x<}3 zAgD%Ag`g6_76fqw6$myX*o5FN1RD`-K(HRcIs|JGtU<6E!72nR5tJiXf#6OA%Msjx zU>Snj5iCWp1i@kiix89{ScqT&g82yMA-D}e3_%ougdl<-j6g&nAP6A{A_ySxBk&<8 zMNopki@-yH=g$cKgy4?|{tv+)5d1HK-y`@Pg5M(e9|XTa@M{FWLhwrjzd-PF1V2OY z-w1w+;J*<31i_CH{0PB+BKQvk|Bm2?2!4Rz-w=Es!S@jSD}wJL_zr@9LGaHAzK!5p z2)>En8wkFR;GYnD4Z&9td? z3c=qa_#}c)Aow_fzeDgb1Rq845dg0~@fD}uKmcnrat5j=|EO$gqI;0*{KLGXG6uS4)!1g}BxY6P!B@Ja-)K=5(| zFGKLR2wsZdB?w-O;6(^th~NbX{szJG5j+pUa}hiT!NUlijo?`bo{8Wpf-49vBbY(( z3Gu@<-cP?N`aMa%C+K&Cev|Y&Ous|)J4n9?`h6<>9;e^? z==T`?4$$wt^!pV0Jxaev==U)F9-`lV`t76NUiv*qzX#}dKmGR5?>_qNrr*8vyN7;v z({C63?xNqF^xH|l9rW8yzisrpgMM4-_a6G)PQQ24Zwviyqu*xw-Acbr^xH_k4fI=2 zzjgFmOTRVrTTQ=J^jk^4Tj)1VzZLYmnSM9X?_Kn}k$yMO?|S-ON55<7cMbinrr%Zc zyOMs(>30SF-bug9>Gux$T}HpR)9+IHT|&Q$>30$RmeKD*`dvW3^XYdU{oY2uG5U?t zuSCBQ`VG^sNWTL8hUhm)zX9?s_0zA9eoN`M#8>JSz}d3L^Aq83Jh9)$ei{2o><4iB z|EJg&V^73B9{Uj7{ofLMB=*YKi(}7)o4*n}ADfJg#YW)Xe{;xpO1bj`cb&=za#o+^tI8KMPC57{bxiUik^#} zj@}P<{eftIbYFC5^d7kBS4THR*F={`7r{M06!l8~EB#9PFSzA@NBX+-CF!%$C*Y3% z9_g*p8>ClBFM%8WRVgPuC{0P@aKC@5bW}Ph?UCByc3&@Tkv2#xrQ6|dACdf#KSh2U z`FZ3=k?%*o9rM_w0sdE|wWha)qQr$weCnaHWgaO7CzP^2fa zE7BU-8mWnFj;xK`8Ce{;Eh0op!hZ<=I{ee{zlXmY{zmx8@aMvx41XA6CB7~E#_+4d zFAYCG{LJvB@P+W1a5{W4oCrT9+#B8-?g-xG#H=_fCdK>2!{UCiOWYwgi?w2f zxK3OlE)nO6qF5^YpYR*uzlHx0{#E#<@MYm2gufR)BD_y{yYMFAHNxLQx8C}@#erKK zxW$269Js}STO9c7-~hdnc=2}Z#oMtLZ^vG|9eeS1?8V!$7jMU2yd8V-c6>`Z9QNYv z*o(JgFW!#5csusu?bwUAV=vy0y?8tJ;_cXrw_`8fj=gw0_Tuf>i??Gh-j2O^JNDx3 z*o(JgFW!#5csusu?bwUAV=vy0y?8tJ;_cXrw_`8fj=gw0_Tuf>i??Gh-j2O^JNDx3 z*o(JgFW!#5csusu?bwUAV=vy0y?8tJ;_cXrw_`8fj=gw0hM+oBserd*FW!#5Ps1M{ zLU0km1q2TwIFH}~1k(u4AvlZR41y^HlL)d1G6+s1m_U$5Fpgjh!6<@L2<}IaLU0nn z2?Qeuk_d(o3?UdqkU;QM1jiBFhu|230R;CVcnX4}2#z2)jNlN0egu68dJ!B%Z~(!6 z1U(4$A?QZ17r`C`yAgCD*o9yxf=&b-2-*>}A=rVS6~R3Swj;P3K?{Oy2$~UWMbLzx z5kUijdIWU{Y7x{Rs76qQpc26r1aSlv2sR_wgy1d&8xd?kupYrW1ZxqjL9iOZDg-ML zlp|Py;7$a~5!``b8G_ppEJd&c!D0l95R@TUh+qMN`3UAAxD7!JK@@?6Ac7!_Ktv!Q z2q6d}2q5qy@F6HgP=dgVz(c{@NQXt?^`57P)(Wv-z`g&|vG; z+7hh8KI zk4qOo&;Go~rO4SxGW?^+-tbstU1U+j6aIPhwc#&<4*ebBmrFkjUkq;zSAoCTV{xlla)KXB#fMpI+%v{EZ`&v ze(VNcopEOdzqnG^H$xn6RGhLG+IunqPmH;XM0CGc4h0fV87>7TC--)=^A||b{o)Ft zafZZkSlq8u*iluul#VLDcqe2nw`Hy5$Xe+amqS((Z@^S*|3u-e{S$ui4q@922@J68 zs7^46Ku|a{!SajCgxVS6*nhzR%-%XWS|BT6_{H0W`WfPYzpNLt5g+gc@(~ojxK!9a zL;T}cb?M~V22TEBeB$DHJ7$Q-`b}yNo!0o?$mWu`>0Y;VIai-mAE+9 zP#vQPQOUrG3Y%w$kMFYWNPx?zL1Y{#lCWupc)ea;r*|ApwsjZ%%_oNERm>2F&?_1c z8_c+dQ$x1pM*p!?3@u$dLp(6AUhNH$^~qGK>7SD54>w+Vh~Vvna!bfMb|y(zE#h?( zRvzM?1Qs&12sI@Ng7;lzjh9FWEJxNI5N3s$b;mSheF0>>V9JWNlC)lDR#PHmRm$$Z z^dMy2*o_4DCdY>lrcRukYy8`G+s_x!QS5bkG z4qkF#TobAx;cpBBRp*fjE)T;7&9IX)%A^u64#5MO@)%w)U<;l%;Bh=>z-Byaz>|2! zfUS7ifG6;41GeKS1D?W@qp(SLI?*Ayg3bb-$cYv#QYi{NUIa(H2-np`&|bk2dysYx zj(7pCsf(bUgCiO^y9!1{C6ZXb4>lBZ4U6aHq729GB#hh-4~vEuq?`sz7rTak?xmW_ zOoYF=!AYEB0jGi_?Rr!JsBEhpw)J?S(rIChG)X0|U!evF7oZcL$`jeJr_~Ch>xVzm&+l%z_){ z_K*IpIACrYgC)zRos}c%NLxR8SJ+hA@n&#_EsBoRi@~kIw=FEedLm{1X*YX_9nYR;Q_{X>&*g#S*H(#CIMCnW+WXk9 zDiJ-|qrAjkp}!uNp?AdI%ffMk@bAz`tLV~R)e%*sJ+31vxWJ8O?4-an@VyYuDuL8l z7&3u#ra=`cVc8IrEOu*%wzH0yM%uhP!o`HuleNjQ4=%2TM>KvmPJ$&W&qKXjFkC#P z!Fe_qEjSgyrV2@Mgx_*s{iyKt5jz@&jRn_l%9f{JIBjakXYh6Y$7CF*Dy4qg^W`d5 z-XtC9q5L!OXATHo0S@~#zVGtjMERg)PqG!%f{?uQHP){hHYG7iJYxUhF3K5Jq2W=3 z`Tl=sr`Zq`pJKVZ5*{x-XR)3tZAm5J)QX-j5?e|>GAGLM1^@A2cjKFUnZh?5c&I>M z;U6MxJ<|fbM2<+rUECc+foRZZxcUzvxE z4#E0D@4S~ND;Ht?;(Kf0QF8leK9oD-?o256bYlv-uPT$0t-z1NINHH~aH$OAh3tSk zCtoWX$Op~Wtb`7CSfR{jtzb#6&Vw>*s7fI<&SvciDj9Vc-*SenLG2is|3$O?N!QLS zob2DsqxK Date: Tue, 13 Jul 2021 10:01:47 -0400 Subject: [PATCH 14/21] Manual Delete of this folder. --- .vs/slnx.sqlite | Bin 90112 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .vs/slnx.sqlite diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index dfd2968b63416ff1f30750132a82d2d754397d8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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 Date: Tue, 13 Jul 2021 20:52:27 -0400 Subject: [PATCH 15/21] Added preprocessor directives --- Interceptor/Input.cs | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 7303c77..5bff0e8 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -1,10 +1,12 @@ -using System; -// ReSharper disable once RedundantUsingDirective +//#define WINDOWSFORM //Uncomment to enable the use of Windows form functions. (Does not work on Console apps). +using System; +#if WINDOWSFORM using System.Drawing; +using System.Windows.Forms; +#endif using System.Linq; using System.Threading; -// ReSharper disable once RedundantUsingDirective -using System.Windows.Forms; + // ReSharper disable UnusedMember.Global @@ -424,9 +426,15 @@ public void ScrollMouse(ScrollDirection direction) /// vectors. An alternate version uses the standard Win32 API to get the current cursor's position, calculates the /// desired destination's offset, and uses the Win32 API to set the cursor to the new position. /// +#if WINDOWSFORM +#warning Use of none Interception Driver enable! public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = true) { if (useDriver) +#else + public void MoveMouseBy(int deltaX, int deltaY) + { +#endif { var stroke = new Stroke(); var mouseStroke = new MouseStroke @@ -440,8 +448,8 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = true) InterceptionDriver.Send(_context, 12, ref stroke, 1); } - //Uncomment if you're using Windows Form. - /* +#if WINDOWSFORM +#warning Use of none Interception Driver enable! else { var currentPos = Cursor.Position; @@ -450,16 +458,22 @@ public void MoveMouseBy(int deltaX, int deltaY, bool useDriver = true) currentPos.Y - deltaY); // Coordinate system for y: 0 begins at top, and bottom of screen has the largest number } - */ +#endif } /// /// Warning: This function, if using the driver, does not function reliably and often moves the mouse in unpredictable /// vectors. An alternate version uses the standard Win32 API to set the cursor's position and does not use the driver. /// +#if WINDOWSFORM +#warning Use of none Interception Driver enable! public void MoveMouseTo(int x, int y, bool useDriver = true) { if (useDriver) +#else + public void MoveMouseTo(int x, int y) + { +#endif { var stroke = new Stroke(); var mouseStroke = new MouseStroke { X = x, Y = y }; @@ -470,13 +484,13 @@ public void MoveMouseTo(int x, int y, bool useDriver = true) InterceptionDriver.Send(_context, 12, ref stroke, 1); } - //Uncomment if you're using Windows Form. - /* - else - { - Cursor.Position = new Point(x, y); - } - */ +#if WINDOWSFORM +#warning Use of none Interception Driver enable! + else + { + Cursor.Position = new Point(x, y); + } +#endif } } } \ No newline at end of file From 117e712008e38c5dd7dc518a7143790f786da9b2 Mon Sep 17 00:00:00 2001 From: Kevinf100 <12779728+kevinf100@users.noreply.github.com> Date: Tue, 13 Jul 2021 23:12:31 -0400 Subject: [PATCH 16/21] Bug fixes and other late night things I forgot about tbh. This should fully fix Thread.abort() being removed as well as making sure there is no stray threads. --- Interceptor.sln | 15 +++++++++++++-- Interceptor/Input.cs | 31 ++++++++++--------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Interceptor.sln b/Interceptor.sln index 4fd2af3..05750ff 100644 --- a/Interceptor.sln +++ b/Interceptor.sln @@ -1,8 +1,12 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31424.327 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Interceptor", "Interceptor\Interceptor.csproj", "{C451A00E-77F1-4F3F-B7EE-27DC712EA316}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InterSwap", "InterSwap\InterSwap.csproj", "{F0138A26-5D06-4F2E-9A25-2F002598292F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -13,8 +17,15 @@ Global {C451A00E-77F1-4F3F-B7EE-27DC712EA316}.Debug|Any CPU.Build.0 = Debug|Any CPU {C451A00E-77F1-4F3F-B7EE-27DC712EA316}.Release|Any CPU.ActiveCfg = Release|Any CPU {C451A00E-77F1-4F3F-B7EE-27DC712EA316}.Release|Any CPU.Build.0 = Release|Any CPU + {F0138A26-5D06-4F2E-9A25-2F002598292F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0138A26-5D06-4F2E-9A25-2F002598292F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0138A26-5D06-4F2E-9A25-2F002598292F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0138A26-5D06-4F2E-9A25-2F002598292F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A961333F-2674-4778-B44A-2F2F1C3C46B0} + EndGlobalSection EndGlobal diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 5bff0e8..3810de2 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -52,23 +52,7 @@ public class Input public event EventHandler OnMousePressed; private int _deviceId; /* Very important; which device the driver sends events to */ - - /// - /// This function calls the Thread.Join() function for the thread currently dealing - /// with the driver. - /// - public void DriverThreadJoin() - { - _callbackThread?.Join(); - } - - /// - /// This function gets the current state of the thread that is dealing with the driver. - /// - public ThreadState? DriverThreadStatus() - { - return _callbackThread?.ThreadState; - } + public Input() { @@ -122,6 +106,9 @@ public void Unload() if (_context == IntPtr.Zero) return; IsLoaded = false; + InterceptionDriver.SetFilter(_context, InterceptionDriver.IsKeyboard, (ushort) KeyboardFilterMode.All); + InterceptionDriver.SetFilter(_context, InterceptionDriver.IsMouse, (ushort) MouseFilterMode.All); + _callbackThread.Join(); InterceptionDriver.DestroyContext(_context); } @@ -133,7 +120,7 @@ private void DriverCallback() var stroke = new Stroke(); while (InterceptionDriver.Receive(_context, _deviceId = InterceptionDriver.Wait(_context), ref stroke, 1) > - 0) + 0 && IsLoaded) { if (InterceptionDriver.IsMouse(_deviceId) > 0) { @@ -170,7 +157,9 @@ private void DriverCallback() InterceptionDriver.Send(_context, _deviceId, ref stroke, 1); } - +#if DEBUG + Console.WriteLine("DEBUG: DriverCallBack has left the loop."); +#endif if (!IsLoaded) return; Unload(); @@ -446,7 +435,7 @@ public void MoveMouseBy(int deltaX, int deltaY) stroke.Mouse = mouseStroke; stroke.Mouse.Flags = MouseFlags.MoveRelative; - InterceptionDriver.Send(_context, 12, ref stroke, 1); + InterceptionDriver.Send(_context, _mouseId, ref stroke, 1); } #if WINDOWSFORM #warning Use of none Interception Driver enable! @@ -482,7 +471,7 @@ public void MoveMouseTo(int x, int y) stroke.Mouse = mouseStroke; stroke.Mouse.Flags = MouseFlags.MoveAbsolute; - InterceptionDriver.Send(_context, 12, ref stroke, 1); + InterceptionDriver.Send(_context, _mouseId, ref stroke, 1); } #if WINDOWSFORM #warning Use of none Interception Driver enable! From 150cd9651bdc052d779be46261d450888b69ed82 Mon Sep 17 00:00:00 2001 From: Kevinf100 <12779728+kevinf100@users.noreply.github.com> Date: Tue, 13 Jul 2021 23:35:43 -0400 Subject: [PATCH 17/21] Added Mouse Click Swap Example. --- InterSwap/InterSwap.csproj | 12 ++++++ InterSwap/Program.cs | 88 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 InterSwap/InterSwap.csproj create mode 100644 InterSwap/Program.cs diff --git a/InterSwap/InterSwap.csproj b/InterSwap/InterSwap.csproj new file mode 100644 index 0000000..f3a6e13 --- /dev/null +++ b/InterSwap/InterSwap.csproj @@ -0,0 +1,12 @@ + + + + Exe + net5.0 + + + + + + + diff --git a/InterSwap/Program.cs b/InterSwap/Program.cs new file mode 100644 index 0000000..f66039c --- /dev/null +++ b/InterSwap/Program.cs @@ -0,0 +1,88 @@ +using System; +using System.Threading; +using Interceptor; + +namespace InterSwap +{ + class Program + { + private static void FailSafe(object token) + { + var canToken = (CancellationToken)token; + var watch = new System.Diagnostics.Stopwatch(); + watch.Start(); + while (watch.ElapsedMilliseconds < 10000 && !canToken.IsCancellationRequested) { } + if (canToken.IsCancellationRequested) + return; + Console.WriteLine("Forced Ended."); + Environment.Exit(0); + } + static void Main(string[] args) + { + // Setting up fail safe thread. + var source = new CancellationTokenSource(); + var failSafety = new Thread(FailSafe); + // Starting the fail safe thread. + // If for some reason after 10 seconds we are still running + // this thread will kill the program. + // We should never reach this with this program but you may need + // something like this while testing your own programs and you don't + // cause a system soft-lock. + failSafety.Start(source.Token); + // Tell the driver to capture all input. + var input = new Input + { + MouseFilterMode = MouseFilterMode.All, + KeyboardFilterMode = KeyboardFilterMode.All + }; + // Start the driver. + input.Load(); + // Creating and starting our timer. + var watch = new System.Diagnostics.Stopwatch(); + watch.Start(); + // Creating Escape Event. + void EscapeHandler(object sender, KeyPressedEventArgs eventArgs) + { + if (eventArgs.Key != Keys.Escape) return; + input.Unload(); + Console.WriteLine("Forced Stop!"); + } + // Creating Reverse Events. + void Handler(object sender, MousePressedEventArgs eventArgs) + { + switch (eventArgs.State) + { + case MouseState.LeftDown: + eventArgs.State = MouseState.RightDown; + break; + case MouseState.LeftUp: + eventArgs.State = MouseState.RightUp; + break; + case MouseState.RightDown: + eventArgs.State = MouseState.LeftDown; + break; + case MouseState.RightUp: + eventArgs.State = MouseState.LeftUp; + break; + } + } + // Subscribing our events. + input.OnKeyPressed += EscapeHandler; + input.OnMousePressed += Handler; + // Stall the main thread until the driver is unloaded or 5 seconds have passed. + while (input.IsLoaded && watch.ElapsedMilliseconds <= 5000) { } + // Unsubscribe our events. + // You may not need this for every program. + input.OnMousePressed -= Handler; + input.OnKeyPressed -= EscapeHandler; + // Unload the driver. + input.Unload(); + // Canceling our fail safe thread. + // The main thread will wait for all threads to end. + // So we need to end all threads. + source.Cancel(); + Console.WriteLine("Done!"); + } + + } +} From 8a78271ae7cb92a71964e68a5d4cdc9de2445613 Mon Sep 17 00:00:00 2001 From: Kevinf100 <12779728+kevinf100@users.noreply.github.com> Date: Wed, 14 Jul 2021 17:25:53 -0400 Subject: [PATCH 18/21] SendKey fixxed. deviceId is now local to DriverCallBack() --- InterSwap/Program.cs | 24 +++++++++++++++++++++++- Interceptor/Input.cs | 23 +++++++++++++---------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/InterSwap/Program.cs b/InterSwap/Program.cs index f66039c..fc78992 100644 --- a/InterSwap/Program.cs +++ b/InterSwap/Program.cs @@ -19,6 +19,28 @@ private static void FailSafe(object token) } static void Main(string[] args) { + Input input = new Input(); + input.KeyboardFilterMode = KeyboardFilterMode.None; + input.MouseFilterMode = MouseFilterMode.None; + input.Load(); + + Thread.Sleep(2000); + + input.SendLeftClick(); + + Thread.Sleep(2000); + + input.KeyPressDelay = 10; + Console.WriteLine("C Down"); + input.SendKey(Interceptor.Keys.C, KeyState.Down); + Thread.Sleep(2000); + Console.WriteLine("C Up"); + input.SendKey(Interceptor.Keys.C, KeyState.Up); + Console.WriteLine("A"); + input.SendKeys(Interceptor.Keys.A); + + input.Unload(); + return; // Setting up fail safe thread. var source = new CancellationTokenSource(); var failSafety = new Thread(FailSafe); @@ -30,7 +52,7 @@ static void Main(string[] args) // cause a system soft-lock. failSafety.Start(source.Token); // Tell the driver to capture all input. - var input = new Input + var input2 = new Input { MouseFilterMode = MouseFilterMode.All, KeyboardFilterMode = KeyboardFilterMode.All diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index 3810de2..e297afb 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -17,6 +17,7 @@ public class Input private IntPtr _context; private Thread _callbackThread; private int _mouseId = 11; // Default to 11 based on #10 + private int _keyBoardId = 2; /// /// Determines whether the driver traps no keyboard events, all events, or a range of events in-between (down only, up @@ -51,8 +52,6 @@ public class Input public event EventHandler OnKeyPressed; public event EventHandler OnMousePressed; - private int _deviceId; /* Very important; which device the driver sends events to */ - public Input() { @@ -118,13 +117,13 @@ private void DriverCallback() InterceptionDriver.SetFilter(_context, InterceptionDriver.IsMouse, (ushort)MouseFilterMode); var stroke = new Stroke(); - - while (InterceptionDriver.Receive(_context, _deviceId = InterceptionDriver.Wait(_context), ref stroke, 1) > + int deviceId; + while (InterceptionDriver.Receive(_context, deviceId = InterceptionDriver.Wait(_context), ref stroke, 1) > 0 && IsLoaded) { - if (InterceptionDriver.IsMouse(_deviceId) > 0) + if (InterceptionDriver.IsMouse(deviceId) > 0) { - _mouseId = _deviceId; + _mouseId = deviceId; if (OnMousePressed != null) { var args = new MousePressedEventArgs @@ -144,18 +143,22 @@ private void DriverCallback() } } - if (InterceptionDriver.IsKeyboard(_deviceId) > 0) + if (InterceptionDriver.IsKeyboard(deviceId) > 0) + { + _keyBoardId = deviceId; + Console.WriteLine(_keyBoardId); if (OnKeyPressed != null) { - var args = new KeyPressedEventArgs { Key = stroke.Key.Code, State = stroke.Key.State }; + var args = new KeyPressedEventArgs {Key = stroke.Key.Code, State = stroke.Key.State}; OnKeyPressed(this, args); if (args.Handled) continue; stroke.Key.Code = args.Key; stroke.Key.State = args.State; } + } - InterceptionDriver.Send(_context, _deviceId, ref stroke, 1); + InterceptionDriver.Send(_context, deviceId, ref stroke, 1); } #if DEBUG Console.WriteLine("DEBUG: DriverCallBack has left the loop."); @@ -178,7 +181,7 @@ public void SendKey(Keys key, KeyState state) stroke.Key = keyStroke; - InterceptionDriver.Send(_context, _deviceId, ref stroke, 1); + InterceptionDriver.Send(_context, _keyBoardId, ref stroke, 1); if (KeyPressDelay > 0) Thread.Sleep(KeyPressDelay); From c065df13f54f92e55e3d4a4c6e6a522729d0ea1f Mon Sep 17 00:00:00 2001 From: Kevinf100 <12779728+kevinf100@users.noreply.github.com> Date: Wed, 14 Jul 2021 17:32:08 -0400 Subject: [PATCH 19/21] Removed Test Code. --- InterSwap/Program.cs | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/InterSwap/Program.cs b/InterSwap/Program.cs index fc78992..f66039c 100644 --- a/InterSwap/Program.cs +++ b/InterSwap/Program.cs @@ -19,28 +19,6 @@ private static void FailSafe(object token) } static void Main(string[] args) { - Input input = new Input(); - input.KeyboardFilterMode = KeyboardFilterMode.None; - input.MouseFilterMode = MouseFilterMode.None; - input.Load(); - - Thread.Sleep(2000); - - input.SendLeftClick(); - - Thread.Sleep(2000); - - input.KeyPressDelay = 10; - Console.WriteLine("C Down"); - input.SendKey(Interceptor.Keys.C, KeyState.Down); - Thread.Sleep(2000); - Console.WriteLine("C Up"); - input.SendKey(Interceptor.Keys.C, KeyState.Up); - Console.WriteLine("A"); - input.SendKeys(Interceptor.Keys.A); - - input.Unload(); - return; // Setting up fail safe thread. var source = new CancellationTokenSource(); var failSafety = new Thread(FailSafe); @@ -52,7 +30,7 @@ static void Main(string[] args) // cause a system soft-lock. failSafety.Start(source.Token); // Tell the driver to capture all input. - var input2 = new Input + var input = new Input { MouseFilterMode = MouseFilterMode.All, KeyboardFilterMode = KeyboardFilterMode.All From f2da696776fff537e6f59c69caf198873929b8bb Mon Sep 17 00:00:00 2001 From: Kevinf100 <12779728+kevinf100@users.noreply.github.com> Date: Wed, 14 Jul 2021 18:22:43 -0400 Subject: [PATCH 20/21] MouseState for moving added. WaitWithTimeout milliseconds should be ulong. --- InterSwap/Program.cs | 1 + Interceptor/InterceptionDriver.cs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/InterSwap/Program.cs b/InterSwap/Program.cs index f66039c..0b6f378 100644 --- a/InterSwap/Program.cs +++ b/InterSwap/Program.cs @@ -50,6 +50,7 @@ void EscapeHandler(object sender, KeyPressedEventArgs eventArgs) // Creating Reverse Events. void Handler(object sender, MousePressedEventArgs eventArgs) { + Console.WriteLine(eventArgs.State); switch (eventArgs.State) { case MouseState.LeftDown: diff --git a/Interceptor/InterceptionDriver.cs b/Interceptor/InterceptionDriver.cs index f98cba7..5a5eca9 100644 --- a/Interceptor/InterceptionDriver.cs +++ b/Interceptor/InterceptionDriver.cs @@ -36,6 +36,7 @@ public enum KeyboardFilterMode : ushort [Flags] public enum MouseState : ushort { + Moving = 0x00, LeftDown = 0x01, LeftUp = 0x02, RightDown = 0x04, @@ -146,7 +147,7 @@ public static class InterceptionDriver [DllImport("interception.dll", EntryPoint = "interception_wait_with_timeout", CallingConvention = CallingConvention.Cdecl)] - public static extern int WaitWithTimeout(IntPtr context, long milliseconds); + public static extern int WaitWithTimeout(IntPtr context, ulong milliseconds); [DllImport("interception.dll", EntryPoint = "interception_send", CallingConvention = CallingConvention.Cdecl)] public static extern int Send(IntPtr context, int device, ref Stroke stroke, uint numStrokes); From b4c19ecda5ac7de71480d853319d3bdc24c4daee Mon Sep 17 00:00:00 2001 From: Kevinf100 <12779728+kevinf100@users.noreply.github.com> Date: Fri, 14 Jan 2022 22:57:47 -0500 Subject: [PATCH 21/21] Removed all Console.WriteLine functions. --- Interceptor/Input.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Interceptor/Input.cs b/Interceptor/Input.cs index e297afb..155baca 100644 --- a/Interceptor/Input.cs +++ b/Interceptor/Input.cs @@ -146,7 +146,6 @@ private void DriverCallback() if (InterceptionDriver.IsKeyboard(deviceId) > 0) { _keyBoardId = deviceId; - Console.WriteLine(_keyBoardId); if (OnKeyPressed != null) { var args = new KeyPressedEventArgs {Key = stroke.Key.Code, State = stroke.Key.State}; @@ -160,9 +159,6 @@ private void DriverCallback() InterceptionDriver.Send(_context, deviceId, ref stroke, 1); } -#if DEBUG - Console.WriteLine("DEBUG: DriverCallBack has left the loop."); -#endif if (!IsLoaded) return; Unload();