From 2499c1275eea7d44340e3f4f0001e3df7416f5dc Mon Sep 17 00:00:00 2001 From: vineethkuttan <66076509+vineethkuttan@users.noreply.github.com> Date: Sat, 15 Nov 2025 15:36:39 +0530 Subject: [PATCH] Initial Implementation of AccessibilityUnitTest --- .../AccessibilityUnitTest.csproj | 124 ++++++++++++++++++ .../AccessibilityUnitTest/GallerySession.cs | 72 ++++++++++ .../Properties/AssemblyInfo.cs | 20 +++ .../AccessibilityUnitTest/UnitTest1.cs | 116 ++++++++++++++++ .../windows/AccessibilityUnitTest/app.config | 11 ++ .../AccessibilityUnitTest/packages.config | 13 ++ NewArch/windows/NewArch.sln | 76 ++++++++--- 7 files changed, 413 insertions(+), 19 deletions(-) create mode 100644 NewArch/windows/AccessibilityUnitTest/AccessibilityUnitTest.csproj create mode 100644 NewArch/windows/AccessibilityUnitTest/GallerySession.cs create mode 100644 NewArch/windows/AccessibilityUnitTest/Properties/AssemblyInfo.cs create mode 100644 NewArch/windows/AccessibilityUnitTest/UnitTest1.cs create mode 100644 NewArch/windows/AccessibilityUnitTest/app.config create mode 100644 NewArch/windows/AccessibilityUnitTest/packages.config diff --git a/NewArch/windows/AccessibilityUnitTest/AccessibilityUnitTest.csproj b/NewArch/windows/AccessibilityUnitTest/AccessibilityUnitTest.csproj new file mode 100644 index 00000000..053fdbff --- /dev/null +++ b/NewArch/windows/AccessibilityUnitTest/AccessibilityUnitTest.csproj @@ -0,0 +1,124 @@ + + + + + + Debug + AnyCPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC} + Library + Properties + AccessibilityUnitTest + AccessibilityUnitTest + v4.8.1 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 15.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Actions.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Automation.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Core.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Desktop.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Rules.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.RuleSelection.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.SystemAbstractions.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Telemetry.dll + + + ..\packages\Axe.Windows.2.4.2\lib\netstandard20\Axe.Windows.Win32.dll + + + ..\packages\Interop.UIAutomationClient.10.19041.0\lib\net45\Interop.UIAutomationClient.dll + False + + + ..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll + + + ..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll + + + ..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + + + ..\packages\System.Drawing.Common.8.0.10\lib\net462\System.Drawing.Common.dll + + + ..\packages\System.IO.Packaging.8.0.1\lib\net462\System.IO.Packaging.dll + + + ..\packages\System.Security.AccessControl.5.0.0\lib\net461\System.Security.AccessControl.dll + + + ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + \ No newline at end of file diff --git a/NewArch/windows/AccessibilityUnitTest/GallerySession.cs b/NewArch/windows/AccessibilityUnitTest/GallerySession.cs new file mode 100644 index 00000000..9958ec8d --- /dev/null +++ b/NewArch/windows/AccessibilityUnitTest/GallerySession.cs @@ -0,0 +1,72 @@ +using System; +using Axe.Windows.Automation; +using Axe.Windows.Automation.Data; +using Newtonsoft.Json; + +namespace AccessibilityUnitTest +{ + public class GallerySession + { + private const string ApplicationProcessName = "rngallery"; + + public static int GetProcessId() + { + //Code to get the Process ID from the process name + var processes = System.Diagnostics.Process.GetProcessesByName(ApplicationProcessName); + return processes[0].Id; + } + + public static IScanner CreateScanner(int processId) + { + Console.WriteLine("Creating scanner..."); + var configBuilder = Config.Builder.ForProcessId(processId) + .WithOutputFileFormat(OutputFileFormat.None); + var config = configBuilder.Build(); + var scanner = ScannerFactory.CreateScanner(config); + return scanner; + } + + public static ScanOutput GetScanResults(IScanner scanner) + { + Console.WriteLine("Scanning..."); + var scanResults = scanner.Scan(null); + return scanResults; + } + + public static void PrintScanResults(ScanOutput scanResults, bool fullContent) + { + Console.WriteLine("Scan results:"); + Console.WriteLine(); + Console.WriteLine("==========================================="); + if (fullContent) + { + Console.WriteLine(JsonConvert.SerializeObject(scanResults, Formatting.Indented)); + } + else + { + foreach (var scanResult in scanResults.WindowScanOutputs) + { + foreach (var error in scanResult.Errors) + { + Console.WriteLine(error.Rule.Description); + } + } + } + Console.WriteLine("==========================================="); + Console.WriteLine(); + } + public static bool IsErrorPresent(ScanOutput scanResults) + { + bool isError = false; + foreach (var scanResult in scanResults.WindowScanOutputs) + { + foreach (var error in scanResult.Errors) + { + Console.WriteLine($"- {error.Rule.Description}"); + isError = true; + } + } + return isError; + } + } +} diff --git a/NewArch/windows/AccessibilityUnitTest/Properties/AssemblyInfo.cs b/NewArch/windows/AccessibilityUnitTest/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a2016f4a --- /dev/null +++ b/NewArch/windows/AccessibilityUnitTest/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("AccessibilityUnitTest")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AccessibilityUnitTest")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: Guid("4494014e-461b-45a6-bac5-91fcd1936fdc")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/NewArch/windows/AccessibilityUnitTest/UnitTest1.cs b/NewArch/windows/AccessibilityUnitTest/UnitTest1.cs new file mode 100644 index 00000000..c019e357 --- /dev/null +++ b/NewArch/windows/AccessibilityUnitTest/UnitTest1.cs @@ -0,0 +1,116 @@ +using AccessibilityUnitTest; +using Axe.Windows.Automation; +using Axe.Windows.Core.Types; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Windows.Automation; + +namespace AccessibilityUnitTest +{ + [TestClass] + public class UnitTest : GallerySession + { + private static AutomationElement GalleryWindow; + private static IScanner scanner; + + [TestMethod] + public void TestMethod() + { + Condition nameCondition = new PropertyCondition( + AutomationElement.NameProperty, + "Navigation menu"); + var basicInput = GalleryWindow.FindFirst(TreeScope.Subtree, nameCondition); + Assert.IsNotNull(basicInput); + if (basicInput != null) + { + basicInput.TryGetCurrentPattern(System.Windows.Automation.InvokePattern.Pattern, out object pattern); + Assert.IsNotNull(pattern); + pattern.GetType().GetMethod("Invoke").Invoke(pattern, null); + PrintScanResults(GetScanResults(scanner), false); + Assert.IsFalse(IsErrorPresent(GetScanResults(scanner))); + } + } + + [TestMethod] + public void TestAccessibilityElement() + { + Condition nameCondition = new PropertyCondition( + AutomationElement.NameProperty, + "Accessibility"); + var accessibilityElement = GalleryWindow.FindFirst(TreeScope.Subtree, nameCondition); + Assert.IsNotNull(accessibilityElement, "Element with name 'accessibility' was not found"); + + if (accessibilityElement != null) + { + Console.WriteLine($"Found accessibility element: {accessibilityElement.Current.Name}"); + Console.WriteLine($"Control Type: {accessibilityElement.Current.ControlType.LocalizedControlType}"); + + // Try to get the ExpandCollapse pattern + if (accessibilityElement.TryGetCurrentPattern(System.Windows.Automation.ExpandCollapsePattern.Pattern, out object expandCollapsePattern)) + { + var expandCollapse = (System.Windows.Automation.ExpandCollapsePattern)expandCollapsePattern; + Console.WriteLine($"Current ExpandCollapse State: {expandCollapse.Current.ExpandCollapseState}"); + + // Expand if collapsed, collapse if expanded + if (expandCollapse.Current.ExpandCollapseState == ExpandCollapseState.Collapsed) + { + Console.WriteLine("Expanding accessibility element..."); + expandCollapse.Expand(); + System.Threading.Thread.Sleep(1000); // Wait for expansion + Console.WriteLine($"New state after expand: {expandCollapse.Current.ExpandCollapseState}"); + } + else if (expandCollapse.Current.ExpandCollapseState == ExpandCollapseState.Expanded) + { + Console.WriteLine("Collapsing accessibility element..."); + expandCollapse.Collapse(); + System.Threading.Thread.Sleep(1000); // Wait for collapse + Console.WriteLine($"New state after collapse: {expandCollapse.Current.ExpandCollapseState}"); + } + else + { + Console.WriteLine("Element is in a partially expanded state or doesn't support expand/collapse"); + } + } + else + { + Console.WriteLine("ExpandCollapse pattern not supported on this element"); + } + + PrintScanResults(GetScanResults(scanner), false); + } + } + [ClassInitialize] + public static void ClassInitialize(TestContext context) + { + try + { + int processId = GetProcessId(); + scanner = CreateScanner(processId); + //var scanResults = GetScanResults(scanner); + //PrintScanResults(scanResults, false); + + AutomationElement desktop = AutomationElement.RootElement; + + Condition windowCondition = new PropertyCondition( + AutomationElement.ControlTypeProperty, + System.Windows.Automation.ControlType.Window); + + Condition nameCondition = new PropertyCondition( + AutomationElement.NameProperty, + "React Native Gallery"); + + Condition condition = new AndCondition(windowCondition, nameCondition); + + GalleryWindow = desktop.FindFirst( + TreeScope.Children, + condition); + Assert.IsNotNull(GalleryWindow); + } + catch (Exception ex) + { + Console.WriteLine($"Error during accessibility scan: {ex.Message}"); + throw; + } + } + } +} diff --git a/NewArch/windows/AccessibilityUnitTest/app.config b/NewArch/windows/AccessibilityUnitTest/app.config new file mode 100644 index 00000000..4f68486d --- /dev/null +++ b/NewArch/windows/AccessibilityUnitTest/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/NewArch/windows/AccessibilityUnitTest/packages.config b/NewArch/windows/AccessibilityUnitTest/packages.config new file mode 100644 index 00000000..4c697523 --- /dev/null +++ b/NewArch/windows/AccessibilityUnitTest/packages.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/NewArch/windows/NewArch.sln b/NewArch/windows/NewArch.sln index 6c94b9b7..293aeefc 100644 --- a/NewArch/windows/NewArch.sln +++ b/NewArch/windows/NewArch.sln @@ -5,68 +5,106 @@ VisualStudioVersion = 17.3.32929.385 MinimumVisualStudioVersion = 10.0.40219.1 Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "NewArch.Package", "NewArch.Package\NewArch.Package.wapproj", "{18851D30-3C62-41B9-8E0B-3EED85625239}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NewArch", "NewArch\NewArch.vcxproj", "{8481B8D7-6300-4DDF-9104-C7A4F1CAA241}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rngallery", "NewArch\NewArch.vcxproj", "{8481B8D7-6300-4DDF-9104-C7A4F1CAA241}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Clipboard", "..\node_modules\@react-native-clipboard\clipboard\windows\Clipboard\Clipboard.vcxproj", "{90BFF18B-474B-445D-9847-B065853288D8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AccessibilityUnitTest", "AccessibilityUnitTest\AccessibilityUnitTest.csproj", "{4494014E-461B-45A6-BAC5-91FCD1936FDC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Debug|ARM64 = Debug|ARM64 + Release|Any CPU = Release|Any CPU + Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 - Release|ARM64 = Release|ARM64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|Any CPU.ActiveCfg = Debug|x64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|Any CPU.Build.0 = Debug|x64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|Any CPU.Deploy.0 = Debug|x64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|ARM64.Build.0 = Debug|ARM64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|ARM64.Deploy.0 = Debug|ARM64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|x64.ActiveCfg = Debug|x64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|x64.Build.0 = Debug|x64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|x64.Deploy.0 = Debug|x64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|x86.ActiveCfg = Debug|x86 {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|x86.Build.0 = Debug|x86 {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|x86.Deploy.0 = Debug|x86 - {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|ARM64.Build.0 = Debug|ARM64 - {18851D30-3C62-41B9-8E0B-3EED85625239}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|Any CPU.ActiveCfg = Release|x64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|Any CPU.Build.0 = Release|x64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|Any CPU.Deploy.0 = Release|x64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|ARM64.ActiveCfg = Release|ARM64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|ARM64.Build.0 = Release|ARM64 + {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|ARM64.Deploy.0 = Release|ARM64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|x64.ActiveCfg = Release|x64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|x64.Build.0 = Release|x64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|x64.Deploy.0 = Release|x64 {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|x86.ActiveCfg = Release|x86 {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|x86.Build.0 = Release|x86 {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|x86.Deploy.0 = Release|x86 - {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|ARM64.ActiveCfg = Release|ARM64 - {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|ARM64.Build.0 = Release|ARM64 - {18851D30-3C62-41B9-8E0B-3EED85625239}.Release|ARM64.Deploy.0 = Release|ARM64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|Any CPU.Build.0 = Debug|x64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|Any CPU.Deploy.0 = Debug|x64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|ARM64.Build.0 = Debug|ARM64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|ARM64.Deploy.0 = Debug|ARM64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|x64.ActiveCfg = Debug|x64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|x64.Build.0 = Debug|x64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|x64.Deploy.0 = Debug|x64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|x86.ActiveCfg = Debug|Win32 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|x86.Build.0 = Debug|Win32 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|x86.Deploy.0 = Debug|Win32 - {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|ARM64.Build.0 = Debug|ARM64 - {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|Any CPU.ActiveCfg = Release|x64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|Any CPU.Build.0 = Release|x64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|Any CPU.Deploy.0 = Release|x64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|ARM64.ActiveCfg = Release|ARM64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|ARM64.Build.0 = Release|ARM64 + {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|ARM64.Deploy.0 = Release|ARM64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|x64.ActiveCfg = Release|x64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|x64.Build.0 = Release|x64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|x64.Deploy.0 = Release|x64 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|x86.ActiveCfg = Release|Win32 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|x86.Build.0 = Release|Win32 {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|x86.Deploy.0 = Release|Win32 - {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|ARM64.ActiveCfg = Release|ARM64 - {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|ARM64.Build.0 = Release|ARM64 - {8481B8D7-6300-4DDF-9104-C7A4F1CAA241}.Release|ARM64.Deploy.0 = Release|ARM64 + {90BFF18B-474B-445D-9847-B065853288D8}.Debug|Any CPU.ActiveCfg = Debug|x64 + {90BFF18B-474B-445D-9847-B065853288D8}.Debug|Any CPU.Build.0 = Debug|x64 + {90BFF18B-474B-445D-9847-B065853288D8}.Debug|Any CPU.Deploy.0 = Debug|x64 + {90BFF18B-474B-445D-9847-B065853288D8}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {90BFF18B-474B-445D-9847-B065853288D8}.Debug|ARM64.Build.0 = Debug|ARM64 {90BFF18B-474B-445D-9847-B065853288D8}.Debug|x64.ActiveCfg = Debug|x64 {90BFF18B-474B-445D-9847-B065853288D8}.Debug|x64.Build.0 = Debug|x64 {90BFF18B-474B-445D-9847-B065853288D8}.Debug|x86.ActiveCfg = Debug|Win32 {90BFF18B-474B-445D-9847-B065853288D8}.Debug|x86.Build.0 = Debug|Win32 - {90BFF18B-474B-445D-9847-B065853288D8}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {90BFF18B-474B-445D-9847-B065853288D8}.Debug|ARM64.Build.0 = Debug|ARM64 + {90BFF18B-474B-445D-9847-B065853288D8}.Release|Any CPU.ActiveCfg = Release|x64 + {90BFF18B-474B-445D-9847-B065853288D8}.Release|Any CPU.Build.0 = Release|x64 + {90BFF18B-474B-445D-9847-B065853288D8}.Release|Any CPU.Deploy.0 = Release|x64 + {90BFF18B-474B-445D-9847-B065853288D8}.Release|ARM64.ActiveCfg = Release|ARM64 + {90BFF18B-474B-445D-9847-B065853288D8}.Release|ARM64.Build.0 = Release|ARM64 {90BFF18B-474B-445D-9847-B065853288D8}.Release|x64.ActiveCfg = Release|x64 {90BFF18B-474B-445D-9847-B065853288D8}.Release|x64.Build.0 = Release|x64 {90BFF18B-474B-445D-9847-B065853288D8}.Release|x86.ActiveCfg = Release|Win32 {90BFF18B-474B-445D-9847-B065853288D8}.Release|x86.Build.0 = Release|Win32 - {90BFF18B-474B-445D-9847-B065853288D8}.Release|ARM64.ActiveCfg = Release|ARM64 - {90BFF18B-474B-445D-9847-B065853288D8}.Release|ARM64.Build.0 = Release|ARM64 + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|ARM64.Build.0 = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|x64.ActiveCfg = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|x64.Build.0 = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Debug|x86.Build.0 = Debug|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|Any CPU.Build.0 = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|ARM64.ActiveCfg = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|ARM64.Build.0 = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|x64.ActiveCfg = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|x64.Build.0 = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|x86.ActiveCfg = Release|Any CPU + {4494014E-461B-45A6-BAC5-91FCD1936FDC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE