From ebc71baaf0b55f34c6ab85189af0aac3106503d1 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Mon, 11 Jul 2022 18:35:21 +0200 Subject: [PATCH 01/86] Separation, multiple targets, new SDK --- IncludeToolBox.sln | 61 +++++++-- IncludeToolbox.vsix | 4 +- IncludeToolbox/IncludeToolbox.args.json | 8 -- IncludeToolbox/IncludeToolbox.csproj | 83 +----------- .../Package/IncludeToolboxPackage.cs | 65 --------- IncludeToolbox/license.txt | 9 -- IncludeToolbox16/IncludeToolbox16.csproj | 128 ++++++++++++++++++ IncludeToolbox16/Properties/AssemblyInfo.cs | 22 +++ IncludeToolbox16/source.extension.cs | 18 +++ .../source.extension.vsixmanifest | 21 +++ IncludeToolbox17/IncludeToolbox17.csproj | 121 +++++++++++++++++ IncludeToolbox17/Properties/AssemblyInfo.cs | 22 +++ IncludeToolbox17/source.extension.cs | 18 +++ .../source.extension.vsixmanifest | 23 ++++ .../Commands/CommandBase.cs | 0 .../Commands/CommandSetGuids.cs | 0 .../Commands/FormatIncludes.cs | 0 .../Commands/IncludeGraphToolWindow.cs | 0 .../Commands/IncludeWhatYouUse.cs | 0 .../TrialAndErrorRemoval_CodeWindow.cs | 0 .../Commands/TrialAndErrorRemoval_Project.cs | 0 .../Formatter/IncludeFormatter.cs | 0 .../Formatter/IncludeLineInfo.cs | 0 .../Graph/CompilationBasedGraphParser.cs | 0 .../Graph/CustomGraphParser.cs | 0 .../Graph/DGMLGraph.cs | 0 .../Graph/IncludeGraph.cs | 0 .../Graph/IncludeGraphToDGML.cs | 0 .../Commands/RefreshIncludeGraph.cs | 0 .../Commands/RefreshModeComboBox.cs | 0 .../Commands/RefreshModeComboBoxOptions.cs | 0 .../GraphWindow/Commands/SaveDGML.cs | 0 .../GraphWindow/PropertyChangedBase.cs | 0 .../GraphWindow/View/IncludeGraphControl.xaml | 0 .../View/IncludeGraphControl.xaml.cs | 0 .../View/IncludeGraphToolWindow.cs | 0 .../GraphWindow/View/ToolWindowStyle.xaml | 0 .../ViewModel/FolderIncludeTreeItem.cs | 0 .../ViewModel/HierarchyIncludeTreeViewItem.cs | 0 .../ViewModel/IncludeGraphViewModel.cs | 0 .../ViewModel/IncludeTreeViewItem.cs | 0 .../IWYU}/IWYU.cs | 0 .../IWYU}/IWYUDownload.cs | 2 +- IncludeToolboxShared/IncludeToolboxPackage.cs | 81 +++++++++++ .../IncludeToolboxShared.projitems | 14 ++ .../IncludeToolboxShared.shproj | 13 ++ .../Options/Constants.cs | 0 .../Options/FormatterOptionsPage.cs | 1 + .../Options/IncludeWhatYouUseOptionsPage.cs | 0 .../Options/OptionsPage.cs | 0 .../TrialAndErrorRemovalOptionsPage.cs | 0 .../Options/ViewerOptionsPage.cs | 0 .../Util}/Output.cs | 0 .../Util}/RegexUtils.cs | 0 .../Util}/TrialAndErrorRemoval.cs | 0 .../Util}/Utils.cs | 0 .../Util}/VCHelper.cs | 0 .../Util}/VSUtils.cs | 0 SharedItems/CommandDefinitions.cs | 63 +++++++++ .../CommandDefinitions.vsct | 4 +- .../Resources/IncludeFormatterIcons.pdn | Bin .../Resources/IncludeFormatterIcons.png | Bin .../Resources/IncludeFormatterPackage.png | Bin .../Resources/IncludeGraphToolbarIcons.png | Bin .../Resources/include13.png | Bin .../Resources/include16.png | Bin 66 files changed, 604 insertions(+), 177 deletions(-) delete mode 100644 IncludeToolbox/IncludeToolbox.args.json delete mode 100644 IncludeToolbox/Package/IncludeToolboxPackage.cs delete mode 100644 IncludeToolbox/license.txt create mode 100644 IncludeToolbox16/IncludeToolbox16.csproj create mode 100644 IncludeToolbox16/Properties/AssemblyInfo.cs create mode 100644 IncludeToolbox16/source.extension.cs create mode 100644 IncludeToolbox16/source.extension.vsixmanifest create mode 100644 IncludeToolbox17/IncludeToolbox17.csproj create mode 100644 IncludeToolbox17/Properties/AssemblyInfo.cs create mode 100644 IncludeToolbox17/source.extension.cs create mode 100644 IncludeToolbox17/source.extension.vsixmanifest rename {IncludeToolbox => IncludeToolboxShared}/Commands/CommandBase.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Commands/CommandSetGuids.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Commands/FormatIncludes.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Commands/IncludeGraphToolWindow.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Commands/IncludeWhatYouUse.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Commands/TrialAndErrorRemoval_CodeWindow.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Commands/TrialAndErrorRemoval_Project.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Formatter/IncludeFormatter.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Formatter/IncludeLineInfo.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Graph/CompilationBasedGraphParser.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Graph/CustomGraphParser.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Graph/DGMLGraph.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Graph/IncludeGraph.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Graph/IncludeGraphToDGML.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/Commands/RefreshIncludeGraph.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/Commands/RefreshModeComboBox.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/Commands/RefreshModeComboBoxOptions.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/Commands/SaveDGML.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/PropertyChangedBase.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/View/IncludeGraphControl.xaml (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/View/IncludeGraphControl.xaml.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/View/IncludeGraphToolWindow.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/View/ToolWindowStyle.xaml (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/ViewModel/FolderIncludeTreeItem.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/ViewModel/HierarchyIncludeTreeViewItem.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/ViewModel/IncludeGraphViewModel.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/GraphWindow/ViewModel/IncludeTreeViewItem.cs (100%) rename {IncludeToolbox/IncludeWhatYouUse => IncludeToolboxShared/IWYU}/IWYU.cs (100%) rename {IncludeToolbox/IncludeWhatYouUse => IncludeToolboxShared/IWYU}/IWYUDownload.cs (99%) create mode 100644 IncludeToolboxShared/IncludeToolboxPackage.cs create mode 100644 IncludeToolboxShared/IncludeToolboxShared.projitems create mode 100644 IncludeToolboxShared/IncludeToolboxShared.shproj rename {IncludeToolbox => IncludeToolboxShared}/Options/Constants.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Options/FormatterOptionsPage.cs (99%) rename {IncludeToolbox => IncludeToolboxShared}/Options/IncludeWhatYouUseOptionsPage.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Options/OptionsPage.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Options/TrialAndErrorRemovalOptionsPage.cs (100%) rename {IncludeToolbox => IncludeToolboxShared}/Options/ViewerOptionsPage.cs (100%) rename {IncludeToolbox => IncludeToolboxShared/Util}/Output.cs (100%) rename {IncludeToolbox => IncludeToolboxShared/Util}/RegexUtils.cs (100%) rename {IncludeToolbox => IncludeToolboxShared/Util}/TrialAndErrorRemoval.cs (100%) rename {IncludeToolbox => IncludeToolboxShared/Util}/Utils.cs (100%) rename {IncludeToolbox => IncludeToolboxShared/Util}/VCHelper.cs (100%) rename {IncludeToolbox => IncludeToolboxShared/Util}/VSUtils.cs (100%) create mode 100644 SharedItems/CommandDefinitions.cs rename {IncludeToolbox/Package => SharedItems}/CommandDefinitions.vsct (97%) rename {IncludeToolbox => SharedItems}/Resources/IncludeFormatterIcons.pdn (100%) rename {IncludeToolbox => SharedItems}/Resources/IncludeFormatterIcons.png (100%) rename {IncludeToolbox => SharedItems}/Resources/IncludeFormatterPackage.png (100%) rename {IncludeToolbox => SharedItems}/Resources/IncludeGraphToolbarIcons.png (100%) rename {IncludeToolbox => SharedItems}/Resources/include13.png (100%) rename {IncludeToolbox => SharedItems}/Resources/include16.png (100%) diff --git a/IncludeToolBox.sln b/IncludeToolBox.sln index ac10aa2..7c21b28 100644 --- a/IncludeToolBox.sln +++ b/IncludeToolBox.sln @@ -1,31 +1,76 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.156 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32611.2 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox", "IncludeToolbox\IncludeToolbox.csproj", "{F9E250C6-A7AD-4888-8F17-6876736B8DCF}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{F577F5D2-5E3C-43BE-9030-AF2609A0917A}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedItems", "SharedItems", "{C64DE41F-331D-4FA6-B82D-BDC49107449A}" + ProjectSection(SolutionItems) = preProject + SharedItems\CommandDefinitions.vsct = SharedItems\CommandDefinitions.vsct + EndProjectSection +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IncludeToolboxShared", "IncludeToolboxShared\IncludeToolboxShared.shproj", "{C50C4863-6200-4E51-837A-31FEBC09C8B2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{0FB00D40-06A5-43BC-8898-5EB876CD8F33}" + ProjectSection(SolutionItems) = preProject + SharedItems\Resources\include13.png = SharedItems\Resources\include13.png + SharedItems\Resources\include16.png = SharedItems\Resources\include16.png + SharedItems\Resources\IncludeFormatterIcons.pdn = SharedItems\Resources\IncludeFormatterIcons.pdn + SharedItems\Resources\IncludeFormatterIcons.png = SharedItems\Resources\IncludeFormatterIcons.png + SharedItems\Resources\IncludeFormatterPackage.png = SharedItems\Resources\IncludeFormatterPackage.png + SharedItems\Resources\IncludeGraphToolbarIcons.png = SharedItems\Resources\IncludeGraphToolbarIcons.png + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox16", "IncludeToolbox16\IncludeToolbox16.csproj", "{F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox17", "IncludeToolbox17\IncludeToolbox17.csproj", "{F0B1E969-BB7F-435F-B49E-E2E5018793EE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F9E250C6-A7AD-4888-8F17-6876736B8DCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9E250C6-A7AD-4888-8F17-6876736B8DCF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9E250C6-A7AD-4888-8F17-6876736B8DCF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9E250C6-A7AD-4888-8F17-6876736B8DCF}.Release|Any CPU.Build.0 = Release|Any CPU {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|x86.ActiveCfg = Debug|Any CPU + {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|x86.Build.0 = Debug|Any CPU {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|Any CPU.ActiveCfg = Release|Any CPU {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|Any CPU.Build.0 = Release|Any CPU + {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|x86.ActiveCfg = Release|Any CPU + {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|x86.Build.0 = Release|Any CPU + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|x86.ActiveCfg = Debug|x86 + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|x86.Build.0 = Debug|x86 + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|Any CPU.Build.0 = Release|Any CPU + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|x86.ActiveCfg = Release|x86 + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|x86.Build.0 = Release|x86 + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Debug|x86.ActiveCfg = Debug|x86 + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Debug|x86.Build.0 = Debug|x86 + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Release|Any CPU.Build.0 = Release|Any CPU + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Release|x86.ActiveCfg = Release|x86 + {F0B1E969-BB7F-435F-B49E-E2E5018793EE}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0FB00D40-06A5-43BC-8898-5EB876CD8F33} = {C64DE41F-331D-4FA6-B82D-BDC49107449A} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {87A2994A-8E27-4066-8C05-7E4DD461D23D} EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 + IncludeToolboxShared\IncludeToolboxShared.projitems*{f0b1e969-bb7f-435f-b49e-e2e5018793ee}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{f7c3930f-a0c8-419c-8980-caf98ccad2f8}*SharedItemsImports = 4 + EndGlobalSection EndGlobal diff --git a/IncludeToolbox.vsix b/IncludeToolbox.vsix index 740b214..d2b1839 100644 --- a/IncludeToolbox.vsix +++ b/IncludeToolbox.vsix @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d410334bec97304d46120a2621251cefa9e703237c249f5891d3cac2c4b6eb36 -size 71090 +oid sha256:e1fd22f5f5024fc61a39a1e22090b59da3a1914b9cbddf4bd484f55f20cfe3df +size 178659 diff --git a/IncludeToolbox/IncludeToolbox.args.json b/IncludeToolbox/IncludeToolbox.args.json deleted file mode 100644 index 7c62244..0000000 --- a/IncludeToolbox/IncludeToolbox.args.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "DataCollection": [ - { - "Id": "3856631e-87ac-4b3d-8d21-fccdd977a1ae", - "Command": "/rootsuffix Exp" - } - ] -} \ No newline at end of file diff --git a/IncludeToolbox/IncludeToolbox.csproj b/IncludeToolbox/IncludeToolbox.csproj index 4bb30e5..35d74c9 100644 --- a/IncludeToolbox/IncludeToolbox.csproj +++ b/IncludeToolbox/IncludeToolbox.csproj @@ -50,67 +50,13 @@ 4 - - - Component - - - Component - - - Component - - - Component - - - Component - - - - - - - - - - - - - - - - - - - - - - - IncludeGraphControl.xaml - - - - - - - - - - - - - - - Designer - @@ -137,37 +83,10 @@ all - - - Always - true - - - - - - true - - - - - - Menus.ctmenu - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - + diff --git a/IncludeToolbox/Package/IncludeToolboxPackage.cs b/IncludeToolbox/Package/IncludeToolboxPackage.cs deleted file mode 100644 index 0ed6224..0000000 --- a/IncludeToolbox/Package/IncludeToolboxPackage.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Threading; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using Task = System.Threading.Tasks.Task; - -namespace IncludeToolbox -{ - [ProvideBindingPath(SubPath = "")] // Necessary to find packaged assemblies. - - [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] - [ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)] - [ProvideMenuResource("Menus.ctmenu", 1)] - - [ProvideOptionPage(typeof(FormatterOptionsPage), Options.Constants.Category, FormatterOptionsPage.SubCategory, 1000, 1001, true)] - [ProvideOptionPage(typeof(IncludeWhatYouUseOptionsPage), Options.Constants.Category, IncludeWhatYouUseOptionsPage.SubCategory, 1000, 1002, true)] - [ProvideOptionPage(typeof(TrialAndErrorRemovalOptionsPage), Options.Constants.Category, TrialAndErrorRemovalOptionsPage.SubCategory, 1000, 1003, true)] - [ProvideOptionPage(typeof(ViewerOptionsPage), Options.Constants.Category, ViewerOptionsPage.SubCategory, 1000, 1004, true)] - - [ProvideToolWindow(typeof(GraphWindow.IncludeGraphToolWindow))] - [Guid(IncludeToolboxPackage.PackageGuidString)] - [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")] - [InstalledProductRegistration("#110", "#112", "0.2", IconResourceID = 400)] - public sealed class IncludeToolboxPackage : AsyncPackage - { - /// - /// IncludeToolboxPackage GUID string. - /// - public const string PackageGuidString = "5c2743c4-1b3f-4edd-b6a0-4379f867d47f"; - - static public Package Instance { get; private set; } - - public IncludeToolboxPackage() - { - // Inside this method you can place any initialization code that does not require - // any Visual Studio service because at this point the package object is created but - // not sited yet inside Visual Studio environment. The place to do all the other - // initialization is the Initialize method. - Instance = this; - } - - #region Package Members - - protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) - { - await base.InitializeAsync(cancellationToken, progress); - - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - Commands.IncludeGraphToolWindow.Initialize(this); - Commands.FormatIncludes.Initialize(this); - Commands.IncludeWhatYouUse.Initialize(this); - Commands.TrialAndErrorRemoval_CodeWindow.Initialize(this); - Commands.TrialAndErrorRemoval_Project.Initialize(this); - } - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - } - - #endregion - } -} diff --git a/IncludeToolbox/license.txt b/IncludeToolbox/license.txt deleted file mode 100644 index 3ae5479..0000000 --- a/IncludeToolbox/license.txt +++ /dev/null @@ -1,9 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017-2019 Andreas Reich - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/IncludeToolbox16/IncludeToolbox16.csproj b/IncludeToolbox16/IncludeToolbox16.csproj new file mode 100644 index 0000000..53b89ea --- /dev/null +++ b/IncludeToolbox16/IncludeToolbox16.csproj @@ -0,0 +1,128 @@ + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + latest + + + + + Debug + AnyCPU + 2.0 + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8} + Library + Properties + IncludeToolbox + IncludeToolbox16 + v4.7.2 + true + true + true + true + false + true + true + Program + $(DevEnvDir)devenv.exe + /rootsuffix Exp + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + False + + + + CommandDefinitions.cs + True + True + CommandDefinitions.vsct + + + + True + True + source.extension.vsixmanifest + + + + + Designer + VsixManifestGenerator + source.extension.cs + + + + + + + + + + + 16.0.451 + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + License.txt + Always + true + + + CommandDefinitions.vsct + VsctGenerator + CommandDefinitions.cs + + + Resources\include13.png + true + + + Resources\include16.png + true + + + Resources\IncludeFormatterIcons.png + true + + + Resources\IncludeFormatterPackage.png + true + Always + + + Resources\IncludeGraphToolbarIcons.png + true + + + + + + + \ No newline at end of file diff --git a/IncludeToolbox16/Properties/AssemblyInfo.cs b/IncludeToolbox16/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..69b7933 --- /dev/null +++ b/IncludeToolbox16/Properties/AssemblyInfo.cs @@ -0,0 +1,22 @@ +using IncludeToolbox; +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle(Vsix.Name)] +[assembly: AssemblyDescription(Vsix.Description)] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany(Vsix.Author)] +[assembly: AssemblyProduct(Vsix.Name)] +[assembly: AssemblyCopyright(Vsix.Author)] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: AssemblyVersion(Vsix.Version)] +[assembly: AssemblyFileVersion(Vsix.Version)] + +namespace System.Runtime.CompilerServices +{ + public class IsExternalInit { } +} \ No newline at end of file diff --git a/IncludeToolbox16/source.extension.cs b/IncludeToolbox16/source.extension.cs new file mode 100644 index 0000000..93745fb --- /dev/null +++ b/IncludeToolbox16/source.extension.cs @@ -0,0 +1,18 @@ +// ------------------------------------------------------------------------------ +// +// This file was generated by VSIX Synchronizer +// +// ------------------------------------------------------------------------------ +namespace IncludeToolbox +{ + internal sealed partial class Vsix + { + public const string Id = "IncludeToolbox16.075c2e2b-7b71-45ba-b2e6-c1dadc81cfac"; + public const string Name = "Include Toolbox 2019"; + public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; + public const string Language = "en-US"; + public const string Version = "3.0.0"; + public const string Author = "Ilya Doroshenko"; + public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; + } +} diff --git a/IncludeToolbox16/source.extension.vsixmanifest b/IncludeToolbox16/source.extension.vsixmanifest new file mode 100644 index 0000000..3c9f858 --- /dev/null +++ b/IncludeToolbox16/source.extension.vsixmanifest @@ -0,0 +1,21 @@ + + + + + Include Toolbox 2019 + Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. + https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox + License.txt + IncludeFormatterPackage.png + IncludeFormatterPackage.png + Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal + + + + + + + + + + diff --git a/IncludeToolbox17/IncludeToolbox17.csproj b/IncludeToolbox17/IncludeToolbox17.csproj new file mode 100644 index 0000000..42f9d41 --- /dev/null +++ b/IncludeToolbox17/IncludeToolbox17.csproj @@ -0,0 +1,121 @@ + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + latest + + + + Debug + AnyCPU + 2.0 + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {F0B1E969-BB7F-435F-B49E-E2E5018793EE} + Library + Properties + IncludeToolbox + IncludeToolbox17 + v4.8 + true + true + true + true + false + true + true + Program + $(DevEnvDir)devenv.exe + /rootsuffix Exp + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + CommandDefinitions.cs + True + True + CommandDefinitions.vsct + + + + True + True + source.extension.vsixmanifest + + + + + Designer + VsixManifestGenerator + source.extension.cs + + + + + + + + + + + + + + + License.txt + true + Always + + + CommandDefinitions.vsct + VsctGenerator + CommandDefinitions.cs + + + Resources\include13.png + true + + + Resources\include16.png + true + + + Resources\IncludeFormatterIcons.png + true + + + Resources\IncludeFormatterPackage.png + Always + true + + + Resources\IncludeGraphToolbarIcons.png + true + + + + + + + \ No newline at end of file diff --git a/IncludeToolbox17/Properties/AssemblyInfo.cs b/IncludeToolbox17/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..69b7933 --- /dev/null +++ b/IncludeToolbox17/Properties/AssemblyInfo.cs @@ -0,0 +1,22 @@ +using IncludeToolbox; +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle(Vsix.Name)] +[assembly: AssemblyDescription(Vsix.Description)] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany(Vsix.Author)] +[assembly: AssemblyProduct(Vsix.Name)] +[assembly: AssemblyCopyright(Vsix.Author)] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: AssemblyVersion(Vsix.Version)] +[assembly: AssemblyFileVersion(Vsix.Version)] + +namespace System.Runtime.CompilerServices +{ + public class IsExternalInit { } +} \ No newline at end of file diff --git a/IncludeToolbox17/source.extension.cs b/IncludeToolbox17/source.extension.cs new file mode 100644 index 0000000..401001e --- /dev/null +++ b/IncludeToolbox17/source.extension.cs @@ -0,0 +1,18 @@ +// ------------------------------------------------------------------------------ +// +// This file was generated by VSIX Synchronizer +// +// ------------------------------------------------------------------------------ +namespace IncludeToolbox +{ + internal sealed partial class Vsix + { + public const string Id = "IncludeToolbox17.6ee4e8e8-7145-4098-8319-82b00aa31eab"; + public const string Name = "Include Toolbox 2022"; + public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; + public const string Language = "en-US"; + public const string Version = "3.0.0"; + public const string Author = "Ilya Doroshenko"; + public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; + } +} diff --git a/IncludeToolbox17/source.extension.vsixmanifest b/IncludeToolbox17/source.extension.vsixmanifest new file mode 100644 index 0000000..d347dfd --- /dev/null +++ b/IncludeToolbox17/source.extension.vsixmanifest @@ -0,0 +1,23 @@ + + + + + Include Toolbox 2022 + Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. + https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox + License.txt + IncludeFormatterPackage.png + IncludeFormatterPackage.png + Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal + + + + amd64 + + + + + + + + diff --git a/IncludeToolbox/Commands/CommandBase.cs b/IncludeToolboxShared/Commands/CommandBase.cs similarity index 100% rename from IncludeToolbox/Commands/CommandBase.cs rename to IncludeToolboxShared/Commands/CommandBase.cs diff --git a/IncludeToolbox/Commands/CommandSetGuids.cs b/IncludeToolboxShared/Commands/CommandSetGuids.cs similarity index 100% rename from IncludeToolbox/Commands/CommandSetGuids.cs rename to IncludeToolboxShared/Commands/CommandSetGuids.cs diff --git a/IncludeToolbox/Commands/FormatIncludes.cs b/IncludeToolboxShared/Commands/FormatIncludes.cs similarity index 100% rename from IncludeToolbox/Commands/FormatIncludes.cs rename to IncludeToolboxShared/Commands/FormatIncludes.cs diff --git a/IncludeToolbox/Commands/IncludeGraphToolWindow.cs b/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs similarity index 100% rename from IncludeToolbox/Commands/IncludeGraphToolWindow.cs rename to IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs diff --git a/IncludeToolbox/Commands/IncludeWhatYouUse.cs b/IncludeToolboxShared/Commands/IncludeWhatYouUse.cs similarity index 100% rename from IncludeToolbox/Commands/IncludeWhatYouUse.cs rename to IncludeToolboxShared/Commands/IncludeWhatYouUse.cs diff --git a/IncludeToolbox/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs similarity index 100% rename from IncludeToolbox/Commands/TrialAndErrorRemoval_CodeWindow.cs rename to IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs diff --git a/IncludeToolbox/Commands/TrialAndErrorRemoval_Project.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs similarity index 100% rename from IncludeToolbox/Commands/TrialAndErrorRemoval_Project.cs rename to IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs diff --git a/IncludeToolbox/Formatter/IncludeFormatter.cs b/IncludeToolboxShared/Formatter/IncludeFormatter.cs similarity index 100% rename from IncludeToolbox/Formatter/IncludeFormatter.cs rename to IncludeToolboxShared/Formatter/IncludeFormatter.cs diff --git a/IncludeToolbox/Formatter/IncludeLineInfo.cs b/IncludeToolboxShared/Formatter/IncludeLineInfo.cs similarity index 100% rename from IncludeToolbox/Formatter/IncludeLineInfo.cs rename to IncludeToolboxShared/Formatter/IncludeLineInfo.cs diff --git a/IncludeToolbox/Graph/CompilationBasedGraphParser.cs b/IncludeToolboxShared/Graph/CompilationBasedGraphParser.cs similarity index 100% rename from IncludeToolbox/Graph/CompilationBasedGraphParser.cs rename to IncludeToolboxShared/Graph/CompilationBasedGraphParser.cs diff --git a/IncludeToolbox/Graph/CustomGraphParser.cs b/IncludeToolboxShared/Graph/CustomGraphParser.cs similarity index 100% rename from IncludeToolbox/Graph/CustomGraphParser.cs rename to IncludeToolboxShared/Graph/CustomGraphParser.cs diff --git a/IncludeToolbox/Graph/DGMLGraph.cs b/IncludeToolboxShared/Graph/DGMLGraph.cs similarity index 100% rename from IncludeToolbox/Graph/DGMLGraph.cs rename to IncludeToolboxShared/Graph/DGMLGraph.cs diff --git a/IncludeToolbox/Graph/IncludeGraph.cs b/IncludeToolboxShared/Graph/IncludeGraph.cs similarity index 100% rename from IncludeToolbox/Graph/IncludeGraph.cs rename to IncludeToolboxShared/Graph/IncludeGraph.cs diff --git a/IncludeToolbox/Graph/IncludeGraphToDGML.cs b/IncludeToolboxShared/Graph/IncludeGraphToDGML.cs similarity index 100% rename from IncludeToolbox/Graph/IncludeGraphToDGML.cs rename to IncludeToolboxShared/Graph/IncludeGraphToDGML.cs diff --git a/IncludeToolbox/GraphWindow/Commands/RefreshIncludeGraph.cs b/IncludeToolboxShared/GraphWindow/Commands/RefreshIncludeGraph.cs similarity index 100% rename from IncludeToolbox/GraphWindow/Commands/RefreshIncludeGraph.cs rename to IncludeToolboxShared/GraphWindow/Commands/RefreshIncludeGraph.cs diff --git a/IncludeToolbox/GraphWindow/Commands/RefreshModeComboBox.cs b/IncludeToolboxShared/GraphWindow/Commands/RefreshModeComboBox.cs similarity index 100% rename from IncludeToolbox/GraphWindow/Commands/RefreshModeComboBox.cs rename to IncludeToolboxShared/GraphWindow/Commands/RefreshModeComboBox.cs diff --git a/IncludeToolbox/GraphWindow/Commands/RefreshModeComboBoxOptions.cs b/IncludeToolboxShared/GraphWindow/Commands/RefreshModeComboBoxOptions.cs similarity index 100% rename from IncludeToolbox/GraphWindow/Commands/RefreshModeComboBoxOptions.cs rename to IncludeToolboxShared/GraphWindow/Commands/RefreshModeComboBoxOptions.cs diff --git a/IncludeToolbox/GraphWindow/Commands/SaveDGML.cs b/IncludeToolboxShared/GraphWindow/Commands/SaveDGML.cs similarity index 100% rename from IncludeToolbox/GraphWindow/Commands/SaveDGML.cs rename to IncludeToolboxShared/GraphWindow/Commands/SaveDGML.cs diff --git a/IncludeToolbox/GraphWindow/PropertyChangedBase.cs b/IncludeToolboxShared/GraphWindow/PropertyChangedBase.cs similarity index 100% rename from IncludeToolbox/GraphWindow/PropertyChangedBase.cs rename to IncludeToolboxShared/GraphWindow/PropertyChangedBase.cs diff --git a/IncludeToolbox/GraphWindow/View/IncludeGraphControl.xaml b/IncludeToolboxShared/GraphWindow/View/IncludeGraphControl.xaml similarity index 100% rename from IncludeToolbox/GraphWindow/View/IncludeGraphControl.xaml rename to IncludeToolboxShared/GraphWindow/View/IncludeGraphControl.xaml diff --git a/IncludeToolbox/GraphWindow/View/IncludeGraphControl.xaml.cs b/IncludeToolboxShared/GraphWindow/View/IncludeGraphControl.xaml.cs similarity index 100% rename from IncludeToolbox/GraphWindow/View/IncludeGraphControl.xaml.cs rename to IncludeToolboxShared/GraphWindow/View/IncludeGraphControl.xaml.cs diff --git a/IncludeToolbox/GraphWindow/View/IncludeGraphToolWindow.cs b/IncludeToolboxShared/GraphWindow/View/IncludeGraphToolWindow.cs similarity index 100% rename from IncludeToolbox/GraphWindow/View/IncludeGraphToolWindow.cs rename to IncludeToolboxShared/GraphWindow/View/IncludeGraphToolWindow.cs diff --git a/IncludeToolbox/GraphWindow/View/ToolWindowStyle.xaml b/IncludeToolboxShared/GraphWindow/View/ToolWindowStyle.xaml similarity index 100% rename from IncludeToolbox/GraphWindow/View/ToolWindowStyle.xaml rename to IncludeToolboxShared/GraphWindow/View/ToolWindowStyle.xaml diff --git a/IncludeToolbox/GraphWindow/ViewModel/FolderIncludeTreeItem.cs b/IncludeToolboxShared/GraphWindow/ViewModel/FolderIncludeTreeItem.cs similarity index 100% rename from IncludeToolbox/GraphWindow/ViewModel/FolderIncludeTreeItem.cs rename to IncludeToolboxShared/GraphWindow/ViewModel/FolderIncludeTreeItem.cs diff --git a/IncludeToolbox/GraphWindow/ViewModel/HierarchyIncludeTreeViewItem.cs b/IncludeToolboxShared/GraphWindow/ViewModel/HierarchyIncludeTreeViewItem.cs similarity index 100% rename from IncludeToolbox/GraphWindow/ViewModel/HierarchyIncludeTreeViewItem.cs rename to IncludeToolboxShared/GraphWindow/ViewModel/HierarchyIncludeTreeViewItem.cs diff --git a/IncludeToolbox/GraphWindow/ViewModel/IncludeGraphViewModel.cs b/IncludeToolboxShared/GraphWindow/ViewModel/IncludeGraphViewModel.cs similarity index 100% rename from IncludeToolbox/GraphWindow/ViewModel/IncludeGraphViewModel.cs rename to IncludeToolboxShared/GraphWindow/ViewModel/IncludeGraphViewModel.cs diff --git a/IncludeToolbox/GraphWindow/ViewModel/IncludeTreeViewItem.cs b/IncludeToolboxShared/GraphWindow/ViewModel/IncludeTreeViewItem.cs similarity index 100% rename from IncludeToolbox/GraphWindow/ViewModel/IncludeTreeViewItem.cs rename to IncludeToolboxShared/GraphWindow/ViewModel/IncludeTreeViewItem.cs diff --git a/IncludeToolbox/IncludeWhatYouUse/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs similarity index 100% rename from IncludeToolbox/IncludeWhatYouUse/IWYU.cs rename to IncludeToolboxShared/IWYU/IWYU.cs diff --git a/IncludeToolbox/IncludeWhatYouUse/IWYUDownload.cs b/IncludeToolboxShared/IWYU/IWYUDownload.cs similarity index 99% rename from IncludeToolbox/IncludeWhatYouUse/IWYUDownload.cs rename to IncludeToolboxShared/IWYU/IWYUDownload.cs index 1e3677a..2a993b2 100644 --- a/IncludeToolbox/IncludeWhatYouUse/IWYUDownload.cs +++ b/IncludeToolboxShared/IWYU/IWYUDownload.cs @@ -128,7 +128,7 @@ static public async Task DownloadIWYU(string executablePath, DownloadProgressUpd onProgressUpdate("Unpacking...", "", -1.0f); await Task.Run(() => { - using (var zipArchive = new ZipArchive(File.OpenRead(targetZipFile), ZipArchiveMode.Read)) + using (var zipArchive = new ZipArchive(File.OpenRead(targetZipFile), ZipArchiveMode.Read)) { // Don't want to have the top level folder if any, string topLevelFolderName = ""; diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs new file mode 100644 index 0000000..d0e756b --- /dev/null +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -0,0 +1,81 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.InteropServices; +using System.Threading; +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox +{ + [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] + [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)] + [ProvideMenuResource("Menus.ctmenu", 1)] + [Guid(PackageGuids.guidIncludeToolboxPackageString)] + [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionOpening_string, PackageAutoLoadFlags.BackgroundLoad)] + public sealed class IncludeToolboxPackage : ToolkitPackage + { + + protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) + { + await this.RegisterCommandsAsync(); + } + } + + //[ProvideBindingPath(SubPath = "")] // Necessary to find packaged assemblies. + + //[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] + //[ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)] + //[ProvideMenuResource("Menus.ctmenu", 1)] + + //[ProvideOptionPage(typeof(FormatterOptionsPage), Options.Constants.Category, FormatterOptionsPage.SubCategory, 1000, 1001, true)] + //[ProvideOptionPage(typeof(IncludeWhatYouUseOptionsPage), Options.Constants.Category, IncludeWhatYouUseOptionsPage.SubCategory, 1000, 1002, true)] + //[ProvideOptionPage(typeof(TrialAndErrorRemovalOptionsPage), Options.Constants.Category, TrialAndErrorRemovalOptionsPage.SubCategory, 1000, 1003, true)] + //[ProvideOptionPage(typeof(ViewerOptionsPage), Options.Constants.Category, ViewerOptionsPage.SubCategory, 1000, 1004, true)] + + //[ProvideToolWindow(typeof(GraphWindow.IncludeGraphToolWindow))] + //[Guid(IncludeToolboxPackage.PackageGuidString)] + //[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")] + //[InstalledProductRegistration("#110", "#112", "0.2", IconResourceID = 400)] + //public sealed class IncludeToolboxPackage : AsyncPackage + //{ + // /// + // /// IncludeToolboxPackage GUID string. + // /// + // public const string PackageGuidString = "5c2743c4-1b3f-4edd-b6a0-4379f867d47f"; + + // static public Package Instance { get; private set; } + + // public IncludeToolboxPackage() + // { + // // Inside this method you can place any initialization code that does not require + // // any Visual Studio service because at this point the package object is created but + // // not sited yet inside Visual Studio environment. The place to do all the other + // // initialization is the Initialize method. + // Instance = this; + // } + + // #region Package Members + + // protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) + // { + // await base.InitializeAsync(cancellationToken, progress); + + // await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + // Commands.IncludeGraphToolWindow.Initialize(this); + // Commands.FormatIncludes.Initialize(this); + // Commands.IncludeWhatYouUse.Initialize(this); + // Commands.TrialAndErrorRemoval_CodeWindow.Initialize(this); + // Commands.TrialAndErrorRemoval_Project.Initialize(this); + // } + + // protected override void Dispose(bool disposing) + // { + // base.Dispose(disposing); + // } + + // #endregion + //} +} diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems new file mode 100644 index 0000000..9144e3f --- /dev/null +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + c50c4863-6200-4e51-837a-31febc09c8b2 + + + IncludeToolboxShared + + + + + \ No newline at end of file diff --git a/IncludeToolboxShared/IncludeToolboxShared.shproj b/IncludeToolboxShared/IncludeToolboxShared.shproj new file mode 100644 index 0000000..516a1a2 --- /dev/null +++ b/IncludeToolboxShared/IncludeToolboxShared.shproj @@ -0,0 +1,13 @@ + + + + c50c4863-6200-4e51-837a-31febc09c8b2 + 14.0 + + + + + + + + diff --git a/IncludeToolbox/Options/Constants.cs b/IncludeToolboxShared/Options/Constants.cs similarity index 100% rename from IncludeToolbox/Options/Constants.cs rename to IncludeToolboxShared/Options/Constants.cs diff --git a/IncludeToolbox/Options/FormatterOptionsPage.cs b/IncludeToolboxShared/Options/FormatterOptionsPage.cs similarity index 99% rename from IncludeToolbox/Options/FormatterOptionsPage.cs rename to IncludeToolboxShared/Options/FormatterOptionsPage.cs index 3f2bff5..3e831ec 100644 --- a/IncludeToolbox/Options/FormatterOptionsPage.cs +++ b/IncludeToolboxShared/Options/FormatterOptionsPage.cs @@ -7,6 +7,7 @@ namespace IncludeToolbox { [Guid("B822F53B-32C0-4560-9A84-2F9DA7AB0E4C")] + [ComVisible(true)] public class FormatterOptionsPage : OptionsPage { public const string SubCategory = "Include Formatter"; diff --git a/IncludeToolbox/Options/IncludeWhatYouUseOptionsPage.cs b/IncludeToolboxShared/Options/IncludeWhatYouUseOptionsPage.cs similarity index 100% rename from IncludeToolbox/Options/IncludeWhatYouUseOptionsPage.cs rename to IncludeToolboxShared/Options/IncludeWhatYouUseOptionsPage.cs diff --git a/IncludeToolbox/Options/OptionsPage.cs b/IncludeToolboxShared/Options/OptionsPage.cs similarity index 100% rename from IncludeToolbox/Options/OptionsPage.cs rename to IncludeToolboxShared/Options/OptionsPage.cs diff --git a/IncludeToolbox/Options/TrialAndErrorRemovalOptionsPage.cs b/IncludeToolboxShared/Options/TrialAndErrorRemovalOptionsPage.cs similarity index 100% rename from IncludeToolbox/Options/TrialAndErrorRemovalOptionsPage.cs rename to IncludeToolboxShared/Options/TrialAndErrorRemovalOptionsPage.cs diff --git a/IncludeToolbox/Options/ViewerOptionsPage.cs b/IncludeToolboxShared/Options/ViewerOptionsPage.cs similarity index 100% rename from IncludeToolbox/Options/ViewerOptionsPage.cs rename to IncludeToolboxShared/Options/ViewerOptionsPage.cs diff --git a/IncludeToolbox/Output.cs b/IncludeToolboxShared/Util/Output.cs similarity index 100% rename from IncludeToolbox/Output.cs rename to IncludeToolboxShared/Util/Output.cs diff --git a/IncludeToolbox/RegexUtils.cs b/IncludeToolboxShared/Util/RegexUtils.cs similarity index 100% rename from IncludeToolbox/RegexUtils.cs rename to IncludeToolboxShared/Util/RegexUtils.cs diff --git a/IncludeToolbox/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs similarity index 100% rename from IncludeToolbox/TrialAndErrorRemoval.cs rename to IncludeToolboxShared/Util/TrialAndErrorRemoval.cs diff --git a/IncludeToolbox/Utils.cs b/IncludeToolboxShared/Util/Utils.cs similarity index 100% rename from IncludeToolbox/Utils.cs rename to IncludeToolboxShared/Util/Utils.cs diff --git a/IncludeToolbox/VCHelper.cs b/IncludeToolboxShared/Util/VCHelper.cs similarity index 100% rename from IncludeToolbox/VCHelper.cs rename to IncludeToolboxShared/Util/VCHelper.cs diff --git a/IncludeToolbox/VSUtils.cs b/IncludeToolboxShared/Util/VSUtils.cs similarity index 100% rename from IncludeToolbox/VSUtils.cs rename to IncludeToolboxShared/Util/VSUtils.cs diff --git a/SharedItems/CommandDefinitions.cs b/SharedItems/CommandDefinitions.cs new file mode 100644 index 0000000..6fa40aa --- /dev/null +++ b/SharedItems/CommandDefinitions.cs @@ -0,0 +1,63 @@ +// ------------------------------------------------------------------------------ +// +// This file was generated by VSIX Synchronizer +// +// ------------------------------------------------------------------------------ +namespace IncludeToolbox +{ + using System; + + /// + /// Helper class that exposes all GUIDs used across VS Package. + /// + internal sealed partial class PackageGuids + { + public const string guidIncludeToolboxPackageString = "5c2743c4-1b3f-4edd-b6a0-4379f867d47f"; + public static Guid guidIncludeToolboxPackage = new Guid(guidIncludeToolboxPackageString); + + public const string guidCodeMenuCmdSetString = "aef3a531-8af4-4b7b-800a-e32503dfc6e2"; + public static Guid guidCodeMenuCmdSet = new Guid(guidCodeMenuCmdSetString); + + public const string guidIncludeGraphWindowCmdSetString = "032eb795-1f1c-440d-af98-43cdc1de7a8b"; + public static Guid guidIncludeGraphWindowCmdSet = new Guid(guidIncludeGraphWindowCmdSetString); + + public const string guidProjectMenuCmdSetString = "1970ecf3-6c03-4ccf-b422-8dd07f774ed8"; + public static Guid guidProjectMenuCmdSet = new Guid(guidProjectMenuCmdSetString); + + public const string guidGraphWindowToolbarCmdSetString = "0b242452-870a-489b-8336-88fd01aef0c1"; + public static Guid guidGraphWindowToolbarCmdSet = new Guid(guidGraphWindowToolbarCmdSetString); + + public const string guidIconsGraphWindowToolbarString = "10311b90-33ad-4479-a326-4b40f7f7aca8"; + public static Guid guidIconsGraphWindowToolbar = new Guid(guidIconsGraphWindowToolbarString); + + public const string guidIconsCommonString = "dd14909e-b406-4cfa-b492-08b8127679df"; + public static Guid guidIconsCommon = new Guid(guidIconsCommonString); + } + /// + /// Helper class that encapsulates all CommandIDs uses across VS Package. + /// + internal sealed partial class PackageIds + { + public const int EditMenuGroup = 0x1020; + public const int FormatIncludesId = 0x0100; + public const int IncludeWhatYouUseId = 0x0103; + public const int TrialAndErrorRemovalId = 0x0104; + public const int IncludeGraphToolWindowGroup = 0x1000; + public const int IncludeGraphToolWindowCommandId = 0x0102; + public const int ProjectMenuGroup = 0x1000; + public const int ProjectWideTrialAndErrorRemovalId = 0x0100; + public const int idGraphWindowToolbar = 0x1000; + public const int idGraphWindowToolbarGroupRefresh = 0x1001; + public const int idGraphWindowToolbarGroupSaveGraph = 0x1002; + public const int idGraphWindowRefresh = 0x0101; + public const int idGraphWindowRefreshMode = 0x0102; + public const int idGraphWindowRefreshModeOptions = 0x0103; + public const int idGraphWindowSaveGraph = 0x0104; + public const int iconRefresh = 0x0001; + public const int iconSaveGraph = 0x0002; + public const int iconFormatter = 0x0001; + public const int iconIWYU = 0x0002; + public const int iconTrialAndError = 0x0003; + public const int iconExplorer = 0x0004; + } +} \ No newline at end of file diff --git a/IncludeToolbox/Package/CommandDefinitions.vsct b/SharedItems/CommandDefinitions.vsct similarity index 97% rename from IncludeToolbox/Package/CommandDefinitions.vsct rename to SharedItems/CommandDefinitions.vsct index 7180394..f1d75db 100644 --- a/IncludeToolbox/Package/CommandDefinitions.vsct +++ b/SharedItems/CommandDefinitions.vsct @@ -156,8 +156,8 @@ bitmap strip containing the bitmaps and then there are the numeric ids of the elements used inside a button definition. An important aspect of this declaration is that the element id must be the actual index (1-based) of the bitmap inside the bitmap strip. --> - - + + diff --git a/IncludeToolbox/Resources/IncludeFormatterIcons.pdn b/SharedItems/Resources/IncludeFormatterIcons.pdn similarity index 100% rename from IncludeToolbox/Resources/IncludeFormatterIcons.pdn rename to SharedItems/Resources/IncludeFormatterIcons.pdn diff --git a/IncludeToolbox/Resources/IncludeFormatterIcons.png b/SharedItems/Resources/IncludeFormatterIcons.png similarity index 100% rename from IncludeToolbox/Resources/IncludeFormatterIcons.png rename to SharedItems/Resources/IncludeFormatterIcons.png diff --git a/IncludeToolbox/Resources/IncludeFormatterPackage.png b/SharedItems/Resources/IncludeFormatterPackage.png similarity index 100% rename from IncludeToolbox/Resources/IncludeFormatterPackage.png rename to SharedItems/Resources/IncludeFormatterPackage.png diff --git a/IncludeToolbox/Resources/IncludeGraphToolbarIcons.png b/SharedItems/Resources/IncludeGraphToolbarIcons.png similarity index 100% rename from IncludeToolbox/Resources/IncludeGraphToolbarIcons.png rename to SharedItems/Resources/IncludeGraphToolbarIcons.png diff --git a/IncludeToolbox/Resources/include13.png b/SharedItems/Resources/include13.png similarity index 100% rename from IncludeToolbox/Resources/include13.png rename to SharedItems/Resources/include13.png diff --git a/IncludeToolbox/Resources/include16.png b/SharedItems/Resources/include16.png similarity index 100% rename from IncludeToolbox/Resources/include16.png rename to SharedItems/Resources/include16.png From f1efa4ed0941ced2a5d6dce605c9477dbd9c7f53 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 14 Jul 2022 13:21:33 +0200 Subject: [PATCH 02/86] IWYU complete async with build pipeline --- IncludeToolbox16/IncludeToolbox16.csproj | 3 +- IncludeToolboxShared/Commands/CommandBase.cs | 74 --- .../Commands/CommandSetGuids.cs | 27 -- .../Commands/IncludeWhatYouUse.cs | 209 -------- IncludeToolboxShared/Commands/RunIWYU.cs | 164 +++++++ IncludeToolboxShared/IWYU/IWYU.cs | 458 ++++++------------ IncludeToolboxShared/IWYU/IWYUDownload.cs | 188 ++++--- IncludeToolboxShared/IncludeToolboxPackage.cs | 62 +-- .../IncludeToolboxShared.projitems | 23 + IncludeToolboxShared/Options/IWYUOptions.cs | 123 +++++ IncludeToolboxShared/Util/Output.cs | 113 +---- IncludeToolboxShared/Util/VCUtil.cs | 83 ++++ SharedItems/CommandDefinitions.cs | 14 +- SharedItems/CommandDefinitions.vsct | 40 +- 14 files changed, 688 insertions(+), 893 deletions(-) delete mode 100644 IncludeToolboxShared/Commands/CommandBase.cs delete mode 100644 IncludeToolboxShared/Commands/CommandSetGuids.cs delete mode 100644 IncludeToolboxShared/Commands/IncludeWhatYouUse.cs create mode 100644 IncludeToolboxShared/Commands/RunIWYU.cs create mode 100644 IncludeToolboxShared/Options/IWYUOptions.cs create mode 100644 IncludeToolboxShared/Util/VCUtil.cs diff --git a/IncludeToolbox16/IncludeToolbox16.csproj b/IncludeToolbox16/IncludeToolbox16.csproj index 53b89ea..178a158 100644 --- a/IncludeToolbox16/IncludeToolbox16.csproj +++ b/IncludeToolbox16/IncludeToolbox16.csproj @@ -16,7 +16,7 @@ Properties IncludeToolbox IncludeToolbox16 - v4.7.2 + v4.8 true true true @@ -71,6 +71,7 @@ + diff --git a/IncludeToolboxShared/Commands/CommandBase.cs b/IncludeToolboxShared/Commands/CommandBase.cs deleted file mode 100644 index f8a4c2c..0000000 --- a/IncludeToolboxShared/Commands/CommandBase.cs +++ /dev/null @@ -1,74 +0,0 @@ - -using System; -using System.ComponentModel.Design; -using Microsoft.VisualStudio.Shell; -using Task = System.Threading.Tasks.Task; - -namespace IncludeToolbox.Commands -{ - internal abstract class CommandBase where T : CommandBase, new() - { - /// - /// Initializes the singleton instance of the command. - /// - /// Owner package, not null. - public static void Initialize(Package package) - { - if (package == null) - throw new ArgumentNullException("package"); - ThreadHelper.ThrowIfNotOnUIThread(); - - Instance = new T(); - Instance.Package = package; - Instance.SetupMenuCommand(); - } - - protected virtual void SetupMenuCommand() - { - OleMenuCommandService commandService = ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; - if(commandService == null) - { - Output.Instance.WriteLine("Failed to retrieve MenuCommandService. No commands could be registered!"); - return; - } - - EventHandler callback = async (sender, e) => - { - try - { - await this.MenuItemCallback(sender, e); - } - catch (Exception exception) - { - await Output.Instance.ErrorMsg("Unexpected Error: {0}", exception.ToString()); - } - }; - - menuCommand = new OleMenuCommand(callback, CommandID); - commandService.AddCommand(menuCommand); - } - - - /// - /// Gets the instance of the command. - /// - public static T Instance - { - get; - private set; - } - - /// - /// VS Package that provides this command, not null. - /// - protected Package Package { get; private set; } - - protected IServiceProvider ServiceProvider => Package; - - protected OleMenuCommand menuCommand; - - public abstract CommandID CommandID { get; } - - protected abstract Task MenuItemCallback(object sender, EventArgs e); - } -} diff --git a/IncludeToolboxShared/Commands/CommandSetGuids.cs b/IncludeToolboxShared/Commands/CommandSetGuids.cs deleted file mode 100644 index f68c636..0000000 --- a/IncludeToolboxShared/Commands/CommandSetGuids.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; - -namespace IncludeToolbox.Commands -{ - static class CommandSetGuids - { - /// - /// Command menu group (command set GUID) for document menu. - /// - public static readonly Guid MenuGroup = new Guid("aef3a531-8af4-4b7b-800a-e32503dfc6e2"); - - /// - /// Command menu group (command set GUID) for tool menu. - /// - public static readonly Guid ToolGroup = new Guid("032eb795-1f1c-440d-af98-43cdc1de7a8b"); - - /// - /// Command menu group for commands in the project menu. - /// - public static readonly Guid ProjectGroup = new Guid("1970ECF3-6C03-4CCF-B422-8DD07F774ED8"); - - /// - /// Commandset for all toolbar elements in the include graph toolwindow. - /// - public static readonly Guid GraphWindowToolbarCmdSet = new Guid("0B242452-870A-489B-8336-88FD01AEF0C1"); - } -} diff --git a/IncludeToolboxShared/Commands/IncludeWhatYouUse.cs b/IncludeToolboxShared/Commands/IncludeWhatYouUse.cs deleted file mode 100644 index 2871ff7..0000000 --- a/IncludeToolboxShared/Commands/IncludeWhatYouUse.cs +++ /dev/null @@ -1,209 +0,0 @@ -using IncludeToolbox.IncludeWhatYouUse; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using System; -using System.ComponentModel.Design; -using System.IO; -using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; - -namespace IncludeToolbox.Commands -{ - /// - /// Command handler - /// - internal sealed class IncludeWhatYouUse : CommandBase - { - public override CommandID CommandID => new CommandID(CommandSetGuids.MenuGroup, 0x0103); - - /// - /// Whether we already checked for updates. - /// - private bool checkedForUpdatesThisSession = false; - - public IncludeWhatYouUse() - { - } - - protected override void SetupMenuCommand() - { - base.SetupMenuCommand(); - menuCommand.BeforeQueryStatus += UpdateVisibility; - } - - private void UpdateVisibility(object sender, EventArgs e) - { - // Needs to be part of a VCProject to be applicable. - var document = VSUtils.GetDTE()?.ActiveDocument; - menuCommand.Visible = VSUtils.VCUtils.IsVCProject(document?.ProjectItem?.ContainingProject); - } - - private async Task DownloadIWYUWithProgressBar(string executablePath, IVsThreadedWaitDialogFactory dialogFactory) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - IVsThreadedWaitDialog2 progressDialog; - dialogFactory.CreateInstance(out progressDialog); - if (progressDialog == null) - { - Output.Instance.WriteLine("Failed to get create wait dialog."); - return false; - } - - progressDialog.StartWaitDialogWithPercentageProgress( - szWaitCaption: "Include Toolbox - Downloading include-what-you-use", - szWaitMessage: "", // comes in later. - szProgressText: null, - varStatusBmpAnim: null, - szStatusBarText: "Downloading include-what-you-use", - fIsCancelable: true, - iDelayToShowDialog: 0, - iTotalSteps: 100, - iCurrentStep: 0); - - var cancellationToken = new System.Threading.CancellationTokenSource(); - - try - { - await IWYUDownload.DownloadIWYU(executablePath, delegate (string section, string status, float percentage) - { - ThreadHelper.ThrowIfNotOnUIThread(); - - bool canceled; - progressDialog.UpdateProgress( - szUpdatedWaitMessage: section, - szProgressText: status, - szStatusBarText: $"Downloading include-what-you-use - {section} - {status}", - iCurrentStep: (int)(percentage * 100), - iTotalSteps: 100, - fDisableCancel: true, - pfCanceled: out canceled); - if (canceled) - { - cancellationToken.Cancel(); - } - }, cancellationToken.Token); - } - catch (Exception e) - { - await Output.Instance.ErrorMsg("Failed to download include-what-you-use: {0}", e); - return false; - } - finally - { - progressDialog.EndWaitDialog(); - } - - return true; - } - - private async Task OptionalDownloadOrUpdate(IncludeWhatYouUseOptionsPage settings, IVsThreadedWaitDialogFactory dialogFactory) - { - // Check existence, offer to download if it's not there. - bool downloadedNewIwyu = false; - if (!File.Exists(settings.ExecutablePath)) - { - if (await Output.Instance.YesNoMsg($"Can't find include-what-you-use in '{settings.ExecutablePath}'. Do you want to download it from '{IWYUDownload.DisplayRepositorURL}'?") != Output.MessageResult.Yes) - { - return; - } - - downloadedNewIwyu = await DownloadIWYUWithProgressBar(settings.ExecutablePath, dialogFactory); - if (!downloadedNewIwyu) - return; - } - else if (settings.AutomaticCheckForUpdates && !checkedForUpdatesThisSession) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - IVsThreadedWaitDialog2 dialog = null; - dialogFactory.CreateInstance(out dialog); - dialog?.StartWaitDialog("Include Toolbox", "Running Include-What-You-Use", null, null, "Checking for Updates for include-what-you-use", 0, false, true); - bool newVersionAvailable = await IWYUDownload.IsNewerVersionAvailableOnline(settings.ExecutablePath); - dialog?.EndWaitDialog(); - - if (newVersionAvailable) - { - checkedForUpdatesThisSession = true; - if (await Output.Instance.YesNoMsg($"There is a new version of include-what-you-use available. Do you want to download it from '{IWYUDownload.DisplayRepositorURL}'?") == Output.MessageResult.Yes) - { - downloadedNewIwyu = await DownloadIWYUWithProgressBar(settings.ExecutablePath, dialogFactory); - } - } - } - if (downloadedNewIwyu) - settings.AddMappingFiles(IWYUDownload.GetMappingFilesNextToIwyuPath(settings.ExecutablePath)); - } - - /// - /// This function is the callback used to execute the command when the menu item is clicked. - /// See the constructor to see how the menu item is associated with this function using - /// OleMenuCommandService service and MenuCommand class. - /// - /// Event sender. - /// Event args. - protected override async Task MenuItemCallback(object sender, EventArgs e) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - var settingsIwyu = (IncludeWhatYouUseOptionsPage)Package.GetDialogPage(typeof(IncludeWhatYouUseOptionsPage)); - Output.Instance.Clear(); - - var document = VSUtils.GetDTE().ActiveDocument; - if (document == null) - { - Output.Instance.WriteLine("No active document!"); - return; - } - var project = document.ProjectItem?.ContainingProject; - if (project == null) - { - Output.Instance.WriteLine("The document {0} is not part of a project.", document.Name); - return; - } - - var dialogFactory = ServiceProvider.GetService(typeof(SVsThreadedWaitDialogFactory)) as IVsThreadedWaitDialogFactory; - if (dialogFactory == null) - { - Output.Instance.WriteLine("Failed to get IVsThreadedWaitDialogFactory service."); - return; - } - - await OptionalDownloadOrUpdate(settingsIwyu, dialogFactory); - - // We should really have it now, but just in case our update or download method screwed up. - if (!File.Exists(settingsIwyu.ExecutablePath)) - { - await Output.Instance.ErrorMsg("Unexpected error: Can't find include-what-you-use.exe after download/update."); - return; - } - checkedForUpdatesThisSession = true; - - // Save all documents. - try - { - document.DTE.Documents.SaveAll(); - } - catch(Exception saveException) - { - Output.Instance.WriteLine("Failed to get save all documents: {0}", saveException); - } - - // Start wait dialog. - { - IVsThreadedWaitDialog2 dialog = null; - dialogFactory.CreateInstance(out dialog); - dialog?.StartWaitDialog("Include Toolbox", "Running include-what-you-use", null, null, "Running include-what-you-use", 0, false, true); - - string output = await IWYU.RunIncludeWhatYouUse(document.FullName, project, settingsIwyu); - if (settingsIwyu.ApplyProposal && output != null) - { - var settingsFormatting = (FormatterOptionsPage)Package.GetDialogPage(typeof(FormatterOptionsPage)); - await IWYU.Apply(output, settingsIwyu.RunIncludeFormatter, settingsFormatting); - } - - dialog?.EndWaitDialog(); - } - } - } -} diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs new file mode 100644 index 0000000..e736d46 --- /dev/null +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -0,0 +1,164 @@ +using Community.VisualStudio.Toolkit; +using IncludeToolbox.IncludeWhatYouUse; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using System; +using System.IO; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox.Commands +{ + internal class CancelCallback : IVsThreadedWaitDialogCallback + { + public delegate void Cancel(); + public Cancel cancel; + public CancelCallback(Cancel cancel) + { + this.cancel = cancel; + } + + void IVsThreadedWaitDialogCallback.OnCanceled() + { + cancel(); + } + } + + + [Command(PackageIds.IncludeWhatYouUseId)] + internal sealed class RunIWYU : BaseCommand + { + bool download_required = false; + IWYU proc = new(); + CancelCallback cancelCallback; + + public RunIWYU() + { + cancelCallback = new(delegate { proc.CancelAsync().FireAndForget(); }); + } + + protected override async Task InitializeCompletedAsync() + { + Command.Supported = false; + var settings = await IWYUOptions.GetLiveInstanceAsync(); + if(settings.Executable == IWYUDownload.GetDefaultExecutablePath()) + download_required = await IWYUDownload.IsNewerVersionAvailableOnlineAsync(); + } + + private async Task DownloadAsync(IVsThreadedWaitDialogFactory dialogFactory) + { + if (!await VS.MessageBox.ShowConfirmAsync($"Can't locate include-what-you-use. Do you want to download it from '{IWYUDownload.DisplayRepositorURL}'?")) + return false; + + var downloader = new IWYUDownload(); + + dialogFactory.CreateInstance(out IVsThreadedWaitDialog2 xdialog); + IVsThreadedWaitDialog4 dialog = xdialog as IVsThreadedWaitDialog4; + + downloader.OnProgress += (string section, string status, float percentage) => + { + bool canceled; + dialog.UpdateProgress( + szUpdatedWaitMessage: section, + szProgressText: status, + szStatusBarText: $"Downloading include-what-you-use - {section} - {status}", + iCurrentStep: (int)(percentage * 100), + iTotalSteps: 100, + fDisableCancel: true, + pfCanceled: out canceled); + }; + + dialog.StartWaitDialogWithCallback( + szWaitCaption: "Include Toolbox - Downloading include-what-you-use", + szWaitMessage: "", // comes in later. + szProgressText: null, + varStatusBmpAnim: null, + szStatusBarText: "Downloading include-what-you-use", + fIsCancelable: true, + iDelayToShowDialog: 0, + fShowProgress: true, + iTotalSteps: 100, + iCurrentStep: 0, + new CancelCallback(() => { downloader.Cancel(); })); + + await downloader.DownloadIWYUAsync(); + + if (dialog.EndWaitDialog()) return false; + + var settings = await IWYUOptions.GetLiveInstanceAsync(); + settings.Executable = IWYUDownload.GetDefaultExecutablePath(); + + + return true; + } + + async Task SaveAllDocumentsAsync() + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + try + { + VCUtil.GetDTE().Documents.SaveAll(); + } + catch (Exception e) + { + Output.WriteLineAsync($"Failed to get save all documents: {e.Message}").FireAndForget(); + } + } + + public void MoveHeader(DocumentView view) + { + var buf = view.TextBuffer; + var str = buf.CurrentSnapshot.GetText(); + int begin = str.IndexOf("#include "); + int end = str.LastIndexOf("#include "); + end = str.IndexOf('\n', end); + + + Regex regex = new($"#include\\s[<\"]([\\w\\\\\\/\\.]+{Path.GetFileNameWithoutExtension(view.FilePath)}.h(?:pp|xx)?)[>\"]"); + var match = regex.Match(str, begin, end - begin); + if (!match.Success) return; + var edit = buf.CreateEdit(); + _ = edit.Delete(new(match.Index, match.Length)); + /// TODO: remove, replace with format + edit.Insert(begin, $"#include <{match.Groups[1].Value}>\n"); + edit.Apply(); + } + + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) + { + var settings = await IWYUOptions.GetLiveInstanceAsync(); + var dlg = (IVsThreadedWaitDialogFactory)await VS.Services.GetThreadedWaitDialogAsync(); + + if ((settings.Executable == "" || !File.Exists(settings.Executable) || download_required) + && !await DownloadAsync(dlg)) + { + VS.MessageBox.ShowErrorAsync("IWYU Error", "No executable found, operation cannot be completed").FireAndForget(); + return; + } + + + var doc = await VS.Documents.GetActiveDocumentViewAsync(); + if (doc == null) return; + + + if (settings.Dirty) proc.BuildCommandLine(settings); + if (settings.IgnoreHeader) MoveHeader(doc); + + await SaveAllDocumentsAsync(); + + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + dlg.CreateInstance(out IVsThreadedWaitDialog2 xdialog); + IVsThreadedWaitDialog4 dialog = xdialog as IVsThreadedWaitDialog4; + + dialog.StartWaitDialogWithCallback("Include Minimizer", "Running include-what-you-use", null, null, "Running include-what-you-use", true, 0, true, 0, 0, cancelCallback); + + var result = await proc.StartAsync(doc.FilePath, settings.AlwaysRebuid); + + if (dialog.EndWaitDialog() || result == false) return; + + await proc.ApplyAsync(); + } + } +} diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index 93b2e7d..36f9895 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -1,360 +1,204 @@ -using EnvDTE; +using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; -using System; +using Microsoft.VisualStudio.Text; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; -using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse { - /// - /// Command handler for include what you use. - /// - static public class IWYU + internal class IWYU { - private static readonly Regex RegexRemoveLine = new Regex(@"^-\s+.+\s+\/\/ lines (\d+)-(\d+)$"); + Process process = new Process(); + string output = ""; + string command_line = ""; + string support_path = ""; + string support_cpp_path = ""; - private class FormatTask - { - public override string ToString() - { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.Append("Remove:\n"); - foreach (int i in linesToRemove) - stringBuilder.AppendFormat("{0},", i); - stringBuilder.Append("\nAdd:\n"); - foreach (string s in linesToAdd) - stringBuilder.AppendFormat("{0}\n", s); - return stringBuilder.ToString(); - } + readonly string match = "The full include-list for "; + readonly Regex include = new("#include ([<\"].*[>\"])"); + readonly Regex include_from_file = new("#include(?:(?:\\/\\*.*\\*\\/)|[^\\S\\r\\n])*([<\\\"].*[>\\\"])"); + readonly Regex commentary = new("(?:\\/\\*(?:.|\\r|\\n)*?\\*\\/)|(?:\\/\\/.*?\\n)"); - public readonly HashSet linesToRemove = new HashSet(); - public readonly List linesToAdd = new List(); - }; - - static private Dictionary ParseOutput(string iwyuOutput) + public IWYU() { - Dictionary fileTasks = new Dictionary(); - FormatTask currentTask = null; - bool removeCommands = true; - - //- #include // lines 3-3 + process.EnableRaisingEvents = true; + process.StartInfo.UseShellExecute = false; + process.StartInfo.CreateNoWindow = true; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; - // Parse what to do. - var lines = Regex.Split(iwyuOutput, "\r\n|\r|\n"); - bool lastLineWasEmpty = false; - foreach (string line in lines) + process.OutputDataReceived += (s, args) => { - if (line.Length == 0) - { - if (lastLineWasEmpty) - { - currentTask = null; - } - - lastLineWasEmpty = true; - continue; - } - - int i = line.IndexOf(" should add these lines:"); - if (i < 0) - { - i = line.IndexOf(" should remove these lines:"); - if (i >= 0) - removeCommands = true; - } - else - { - removeCommands = false; - } + output += args.Data + "\n"; + }; + process.ErrorDataReceived += (s, args) => + { + output += args.Data + "\n"; + }; + } - if (i >= 0) - { - string file = line.Substring(0, i); + public void BuildCommandLine(IWYUOptions settings) + { + process.StartInfo.FileName = settings.Executable; - if (!fileTasks.TryGetValue(file, out currentTask)) - { - currentTask = new FormatTask(); - fileTasks.Add(file, currentTask); - } - } - else if (currentTask != null) - { - if (removeCommands) - { - var match = RegexRemoveLine.Match(line); - if (match.Success) - { - int removeStart, removeEnd; - if (int.TryParse(match.Groups[1].Value, out removeStart) && - int.TryParse(match.Groups[2].Value, out removeEnd)) - { - for (int lineIdx = removeStart; lineIdx <= removeEnd; ++lineIdx) - currentTask.linesToRemove.Add(lineIdx - 1); - } - } - else if (lastLineWasEmpty) - { - currentTask = null; - } - } - else - { - if (!string.IsNullOrWhiteSpace(line)) - { - currentTask.linesToAdd.Add(line); - } - else if (lastLineWasEmpty) - { - currentTask = null; - } - } - } + List args = new List(); - lastLineWasEmpty = false; + switch (settings.Comms) + { + case Comment.Always: args.Add("--update_comments"); break; + case Comment.Never: args.Add("--no_comments"); break; + case Comment.Default: break; } - - return fileTasks; + args.Add(string.Format("--verbose={0}", settings.Verbosity)); + + if (settings.Precompiled || settings.IgnoreHeader) + args.Add("--pch_in_code"); + if (settings.Transitives) + args.Add("--transitive_includes_only"); + if (settings.NoDefault) + args.Add("--no_default_mappings"); + if (settings.MappingFile != "") + args.Add(string.Format("--mapping_file=\"{0}\"", settings.MappingFile)); + args.Add("--max_line_length=256"); // output line for commentaries + + command_line = + string.Join(" ", args.Select(x => " -Xiwyu " + x)); + + if (!settings.Warnings) + command_line += " -w"; + + command_line += " -Wno-invalid-token-paste -fms-compatibility -fms-extensions -fdelayed-template-parsing"; + if (settings.ClangOptions != null && settings.ClangOptions?.Count() != 0) + command_line += " " + string.Join(" ", settings.ClangOptions); + if (settings.Options != null && settings.Options.Count() != 0) + command_line += " " + string.Join(" ", settings.Options.Select(x => " -Xiwyu " + x)); + settings.ClearFlag(); } - static private async Task ApplyTasks(Dictionary tasks, bool applyFormatting, FormatterOptionsPage formatSettings) + /// + /// Heavy function for include detection. + /// Inlcude may be inside the commentary or between multiline comms, + /// so the detection should be correctly defined. + /// Still Does not count for prepro + /// + /// + /// Dictionary of valid includes + Dictionary> ParseIncludes(ITextSnapshot snap, out int first_pos) { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + first_pos = 0; + var text = snap.GetText(); + int begin = text.IndexOf("#include"); + int end = text.LastIndexOf("#include"); + text = text.Substring(begin, end - begin); //optimized + + // Get all commentary spans + var comms = commentary.Matches(text).Cast().Select(s => + { var a = s.Captures[0]; return new Span(a.Index, a.Length); }); + + // gather all the includes, that are not commented! + var includes = include_from_file.Matches(text).Cast() + .Where(s => !comms.Any(sp => sp.Contains(s.Captures[0].Index))) + .Select(s => + { + var a = s.Groups[0]; + return new KeyValuePair(s.Groups[1].Value, new Span(a.Index, a.Length)); + }); - var dte = VSUtils.GetDTE(); + if (includes.Count() != 0) + first_pos = includes.First().Value.Start; - foreach (KeyValuePair entry in tasks) + var dict = new Dictionary>(); + foreach (var inc in includes) { - string filename = entry.Key.Replace('/', '\\'); // Classy. But Necessary. - EnvDTE.Window fileWindow = dte.ItemOperations.OpenFile(filename); - if (fileWindow == null) - { - await Output.Instance.ErrorMsg("Failed to open File {0}", filename); - continue; - } - fileWindow.Activate(); - - var viewHost = VSUtils.GetCurrentTextViewHost(); - using (var edit = viewHost.TextView.TextBuffer.CreateEdit()) - { - var originalLines = edit.Snapshot.Lines.ToArray(); + if (!dict.ContainsKey(inc.Key)) + dict[inc.Key] = new List(); + dict[inc.Key].Add(inc.Value); + } - // Determine which line ending to use by majority. - string lineEndingToBeUsed = Utils.GetDominantNewLineSeparator(edit.Snapshot.GetText()); + return dict; + } + public async Task ApplyAsync() + { + if (output == "") return; - // Add lines. - { - // Find last include. - // Will find even if commented out, but we don't care. - int lastIncludeLine = -1; - for (int line = originalLines.Length - 1; line >= 0; --line) - { - if (originalLines[line].GetText().Contains("#include")) - { - lastIncludeLine = line; - break; - } - } + while (true) + { + int pos = output.IndexOf(match); + if (pos == -1) return; - // Build replacement string - StringBuilder stringToInsertBuilder = new StringBuilder(); - foreach (string lineToAdd in entry.Value.linesToAdd) - { - stringToInsertBuilder.Append(lineToAdd); - stringToInsertBuilder.Append(lineEndingToBeUsed); - } - string stringToInsert = stringToInsertBuilder.ToString(); + var tasks = output.Substring(0, pos) + .Split('\n').Select(l => l.Trim()); + pos = pos + match.Length; + string part = output.Substring(pos); + string path = part.Substring(0, part.IndexOf(':', 3)); + var doc = await VS.Documents.OpenAsync(path); + var edit = doc.TextBuffer.CreateEdit(); - // optional, format before adding. - if (applyFormatting) - { - var includeDirectories = VSUtils.GetProjectIncludeDirectories(fileWindow.Document.ProjectItem?.ContainingProject); - stringToInsert = Formatter.IncludeFormatter.FormatIncludes(stringToInsert, fileWindow.Document.FullName, includeDirectories, formatSettings); + var dict = ParseIncludes(doc.TextBuffer.CurrentSnapshot, out int start); - // Add a newline if we removed it. - if (formatSettings.RemoveEmptyLines) - stringToInsert += lineEndingToBeUsed; - } - // Insert. - int insertPosition = 0; - if (lastIncludeLine >= 0 && lastIncludeLine < originalLines.Length) - { - insertPosition = originalLines[lastIncludeLine].EndIncludingLineBreak; - } - edit.Insert(insertPosition, stringToInsert.ToString()); + foreach (var task in tasks) + { + if (task.StartsWith("- #include")) + { + var rem = include.Match(task).Groups[1].Value; + edit.Delete(dict[rem].First()); + dict[rem].RemoveAt(0); } - - // Remove lines. - // It should safe to do that last since we added includes at the bottom, this way there is no confusion with the text snapshot. + if (task.StartsWith("#include")) { - foreach (int lineToRemove in entry.Value.linesToRemove.Reverse()) - { - if (!Formatter.IncludeLineInfo.ContainsPreserveFlag(originalLines[lineToRemove].GetText())) - edit.Delete(originalLines[lineToRemove].ExtentIncludingLineBreak); - } + edit.Insert(start, task); } - - edit.Apply(); } - - // For Debugging: - //Output.Instance.WriteLine(""); - //Output.Instance.WriteLine(entry.Key); - //Output.Instance.WriteLine(entry.Value.ToString()); + edit.Apply(); + output = part.Substring(part.IndexOf("---")); } } - static public async Task Apply(string iwyuOutput, bool applyFormatter, FormatterOptionsPage formatOptions) - { - var tasks = ParseOutput(iwyuOutput); - await ApplyTasks(tasks, applyFormatter, formatOptions); - } - - /// - /// Runs iwyu. Blocks until finished. - /// - static public async Task RunIncludeWhatYouUse(string fullFileName, EnvDTE.Project project, IncludeWhatYouUseOptionsPage settings) + public async Task StartAsync(string file, bool rebuild) { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - string preprocessorDefintions; - try + output = ""; + var cmd = await VCUtil.GetCommandLineAsync(rebuild); + if (cmd == null) return false; + if (cmd != "") { - preprocessorDefintions = VSUtils.VCUtils.GetCompilerSetting_PreprocessorDefinitions(project); + // cache file for reuse + support_path = string.IsNullOrEmpty(support_path) ? Path.GetTempFileName() : support_path; + File.WriteAllText(support_path, cmd); } - catch (VCQueryFailure e) + var ext = Path.GetExtension(file); + if (ext == ".h" || ext == ".hpp") { - await Output.Instance.ErrorMsg("Can't run IWYU: {0}", e.Message); - return null; + if (support_cpp_path == "") { support_cpp_path = Path.ChangeExtension(Path.GetTempFileName(), ".cpp"); } + File.WriteAllText(support_cpp_path, "#include \"" + file + "\""); + file = " -Xiwyu --check_also=" + file; + file += " \"" + support_cpp_path.Replace("\\", "\\\\") + "\""; } + process.StartInfo.Arguments = $"{command_line} \"@{support_path}\" {file}"; - string output = ""; - using (var process = new System.Diagnostics.Process()) - { - process.StartInfo.UseShellExecute = false; - process.StartInfo.CreateNoWindow = true; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.FileName = settings.ExecutablePath; - - // Clang options - var clangOptionList = new List(); - // Disable all diagnostics - clangOptionList.Add("-w"); - // ... despite of that "invalid token paste" comes through a lot. Disable it. - clangOptionList.Add("-Wno-invalid-token-paste"); - // MSVC specific. See https://clang.llvm.org/docs/UsersManual.html#microsoft-extensions - clangOptionList.Add("-fms-compatibility -fms-extensions -fdelayed-template-parsing"); - - // icwyu options - var iwyuOptionList = new List(); - iwyuOptionList.Add("--verbose=" + settings.LogVerbosity); - for (int i = 0; i < settings.MappingFiles.Length; ++i) - iwyuOptionList.Add("--mapping_file=\"" + settings.MappingFiles[i] + "\""); - if (settings.NoDefaultMappings) - iwyuOptionList.Add("--no_default_mappings"); - if (settings.PCHInCode) - iwyuOptionList.Add("--pch_in_code"); - switch (settings.PrefixHeaderIncludes) - { - case IncludeWhatYouUseOptionsPage.PrefixHeaderMode.Add: - iwyuOptionList.Add("--prefix_header_includes=add"); - break; - case IncludeWhatYouUseOptionsPage.PrefixHeaderMode.Remove: - iwyuOptionList.Add("--prefix_header_includes=remove"); - break; - case IncludeWhatYouUseOptionsPage.PrefixHeaderMode.Keep: - iwyuOptionList.Add("--prefix_header_includes=keep"); - break; - } - if (settings.TransitiveIncludesOnly) - iwyuOptionList.Add("--transitive_includes_only"); - - - - // Set max line length so something large so we don't loose comment information. - // Documentation: - // --max_line_length: maximum line length for includes. Note that this only affects comments and alignment thereof, - // the maximum line length can still be exceeded with long file names(default: 80). - iwyuOptionList.Add("--max_line_length=1024"); + Output.WriteLineAsync(string.Format("Running command '{0}' with following arguments:\n{1}\n\n", process.StartInfo.FileName, process.StartInfo.Arguments)).FireAndForget(); - /// write support file with includes, defines and the targetgile. Long argument lists lead to an error. Support files are the solution here. - /// https://github.com/Wumpf/IncludeToolbox/issues/36 - // Include-paths and Preprocessor. - var includes = string.Join(" ", VSUtils.GetProjectIncludeDirectories(project, false).Select(x => "-I \"" + x.Replace("\\", "\\\\") + "\"")); - var defines = preprocessorDefintions.Length == 0 ? "" : string.Join(" ", preprocessorDefintions.Split(';').Select(x => "-D" + x)); - var filename = "\"" + fullFileName.Replace("\\", "\\\\") + "\""; + process.Start(); - var iwyuOptions = string.Join(" ", iwyuOptionList.Select(x => " -Xiwyu " + x)); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + process.WaitForExit(); + process.CancelOutputRead(); + process.CancelErrorRead(); - var ext = Path.GetExtension(fullFileName); - - string co = ""; - switch (settings.Commentary) - { - case Commentaries.Always: co = (" -Xiwyu --update_comments"); break; - case Commentaries.Never: co = (" -Xiwyu --no_comments"); break; - case Commentaries.Default: break; - } - - iwyuOptions += co; - - if (ext == ".h" || ext == ".hpp") - { - var tmp_cpp = Path.GetTempFileName(); - tmp_cpp = Path.ChangeExtension(tmp_cpp, ".cpp"); - File.WriteAllText(tmp_cpp, "#include \"" + fullFileName + "\""); - iwyuOptions += " -Xiwyu --check_also=" + filename; - filename = "\"" + tmp_cpp.Replace("\\", "\\\\") + "\""; - } - else if (settings.HeaderPrefix != "" && Directory.Exists(Path.GetDirectoryName(fullFileName) + settings.HeaderPrefix)) - { - var correspond_h = settings.HeaderPrefix + '\\' + Path.GetFileNameWithoutExtension(fullFileName) + ".h"; - var correspond_hpp = Path.ChangeExtension(correspond_h, ".hpp"); - if (!File.Exists(correspond_h)) - iwyuOptions += " -Xiwyu --check_also=" + "\"" + correspond_h.Replace("\\", "\\\\") + "\""; - else if (!File.Exists(correspond_hpp)) - iwyuOptions += " -Xiwyu --check_also=" + "\"" + correspond_hpp.Replace("\\", "\\\\") + "\""; - } - - var supportFilePath = Path.GetTempFileName(); - File.WriteAllText(supportFilePath, includes + " " + defines + " " + filename); - - var clangOptions = string.Join(" ", clangOptionList); - // each include-what-you-use parameter has an -Xiwyu prefix - process.StartInfo.Arguments = $"{clangOptions} {iwyuOptions} {settings.AdditionalParameters} \"@{supportFilePath}\""; - - Output.Instance.Write("Running command '{0}' with following arguments:\n{1}\n\n", process.StartInfo.FileName, process.StartInfo.Arguments); - - // Start the child process. - process.EnableRaisingEvents = true; - process.OutputDataReceived += (s, args) => - { - Output.Instance.WriteLine(args.Data); - output += args.Data + "\n"; - }; - process.ErrorDataReceived += (s, args) => - { - Output.Instance.WriteLine(args.Data); - output += args.Data + "\n"; - }; - process.Start(); - - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); - process.WaitForExit(); - process.CancelOutputRead(); - process.CancelErrorRead(); - } - - return output; + Output.WriteLineAsync(output).FireAndForget(); + return true; + } + public async Task CancelAsync() + { + await Task.Run(delegate { process.Kill(); }); } } } diff --git a/IncludeToolboxShared/IWYU/IWYUDownload.cs b/IncludeToolboxShared/IWYU/IWYUDownload.cs index 2a993b2..f5987ea 100644 --- a/IncludeToolboxShared/IWYU/IWYUDownload.cs +++ b/IncludeToolboxShared/IWYU/IWYUDownload.cs @@ -6,7 +6,6 @@ using System.Net; using System.Net.Http; using System.Text.RegularExpressions; -using System.Threading; using System.Threading.Tasks; namespace IncludeToolbox.IncludeWhatYouUse @@ -14,13 +13,42 @@ namespace IncludeToolbox.IncludeWhatYouUse /// /// Functions for downloading and versioning of the iwyu installation. /// - static public class IWYUDownload + public class IWYUDownload { - public const string DisplayRepositorURL = @"https://github.com/Wumpf/iwyu_for_vs_includetoolbox"; - private const string DownloadRepositorURL = @"https://github.com/Wumpf/iwyu_for_vs_includetoolbox/archive/master.zip"; - private const string LatestCommitQuery = @"https://api.github.com/repos/Wumpf/iwyu_for_vs_includetoolbox/git/refs/heads/master"; + public static readonly string DisplayRepositorURL = @"https://github.com/Agrael1/BuildIWYU"; + private static readonly string DownloadRepositorURL = @"https://github.com/Agrael1/BuildIWYU/archive/main.zip"; + private static readonly string LatestCommitQuery = @"https://api.github.com/repos/Agrael1/BuildIWYU/git/refs/heads/main"; - private static async Task GetCurrentVersionOnline() + public static string GetDefaultFolder() + { + return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "iwyu"); + } + public static string GetDefaultExecutablePath() + { + return Path.Combine(GetDefaultFolder(), "include-what-you-use.exe"); + } + static public string GetVersionFilePath() + { + return Path.Combine(GetDefaultFolder(), "version"); + } + + public delegate void OnChangeDelegate(string Section, string Status, float percent); + + + + public event OnChangeDelegate OnProgress; + WebClient client; + + protected void OnProgressEvent(string Section, string Status, float percent) + { + OnProgress?.Invoke(Section, Status, percent); + } + + + + + + private static async Task GetVersionOnlineAsync() { using (var httpClient = new HttpClient()) { @@ -35,7 +63,7 @@ private static async Task GetCurrentVersionOnline() } catch (HttpRequestException e) { - Output.Instance.WriteLine($"Failed to query IWYU version from {DownloadRepositorURL}: {e}"); + _ = Output.WriteLineAsync($"Failed to query IWYU version from {DownloadRepositorURL}: {e}"); return ""; } @@ -45,18 +73,12 @@ private static async Task GetCurrentVersionOnline() } } - public static string GetVersionFilePath(string iwyuExectuablePath) - { - string directory = Path.GetDirectoryName(iwyuExectuablePath); - return Path.Combine(directory, "version"); - } - - private static string GetCurrentVersionHarddrive(string iwyuExectuablePath) + private static string GetCurrentVersionHarddrive() { // Read current version. try { - return File.ReadAllText(GetVersionFilePath(iwyuExectuablePath)); + return File.ReadAllText(GetVersionFilePath()); } catch { @@ -64,112 +86,84 @@ private static string GetCurrentVersionHarddrive(string iwyuExectuablePath) } } - public static async Task IsNewerVersionAvailableOnline(string executablePath) + public static async Task IsNewerVersionAvailableOnlineAsync() { - string currentVersion = GetCurrentVersionHarddrive(executablePath); - string onlineVersion = await GetCurrentVersionOnline(); + string currentVersion = GetCurrentVersionHarddrive(); + string onlineVersion = await GetVersionOnlineAsync(); return currentVersion != onlineVersion; } - /// - /// Callback for download progress. - /// - /// General stage. - /// Sub status, may be empty. - /// Progress in percent for current section. -1 is there is none. - public delegate void DownloadProgressUpdate(string section, string status, float percentage); - /// - /// Downloads iwyu from default download repository. - /// - /// - /// Throws an exception if anything goes wrong (and there's a lot that can!) - /// - /// If cancellation token is used. - static public async Task DownloadIWYU(string executablePath, DownloadProgressUpdate onProgressUpdate, CancellationToken cancellationToken) - { - string targetDirectory = Path.GetDirectoryName(executablePath); - Directory.CreateDirectory(targetDirectory); - string targetZipFile = Path.Combine(targetDirectory, "download.zip"); - // Delete existing zip file. - try - { - File.Delete(targetZipFile); - } - catch { } - // Download. - onProgressUpdate("Connecting...", "", -1.0f); - - // In contrast to GetCurrentVersionOnline we're not using HttpClient here since WebClient makes downloading files so much nicer. - // (in HttpClient we would need to do the whole buffering + queuing and file writing ourselves) - using (var client = new WebClient()) + async Task DownloadAsync(string targetZipFile) + { + using (client = new WebClient()) { - var cancelRegistration = cancellationToken.Register(() => - { - client.CancelAsync(); - throw new TaskCanceledException(); - }); - client.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) => { int kbTodo = (int)System.Math.Ceiling((double)e.TotalBytesToReceive / 1024); int kbDownloaded = (int)System.Math.Ceiling((double)e.BytesReceived / 1024); - onProgressUpdate("Downloading", kbTodo > 0 ? $"{kbTodo} / {kbDownloaded} kB" : $"{kbDownloaded} kB", e.ProgressPercentage * 0.01f); + OnProgressEvent("Downloading", kbTodo > 0 ? $"{kbTodo} / {kbDownloaded} kB" : $"{kbDownloaded} kB", e.ProgressPercentage * 0.01f); }; await client.DownloadFileTaskAsync(DownloadRepositorURL, targetZipFile); + client = null; + } + } + + /// + /// Downloads iwyu from default download repository. + /// + public async Task DownloadIWYUAsync() + { + string targetDirectory = GetDefaultFolder(); + Directory.CreateDirectory(targetDirectory); + string targetZipFile = Path.Combine(targetDirectory, "download.zip"); + + // Download. + OnProgressEvent("Connecting...", "", -1.0f); - cancelRegistration.Dispose(); + try + { + await DownloadAsync(targetZipFile); + } + catch (Exception e) + { + _ = Output.WriteLineAsync("Failed to download IWYU with error:" + e.Message); + return; } // Unpacking. Looks like there is no async api, so we're just moving this to a task. - onProgressUpdate("Unpacking...", "", -1.0f); - await Task.Run(() => - { - using (var zipArchive = new ZipArchive(File.OpenRead(targetZipFile), ZipArchiveMode.Read)) - { - // Don't want to have the top level folder if any, - string topLevelFolderName = ""; - - for (int i = 0; i < zipArchive.Entries.Count; ++i) - { - var file = zipArchive.Entries[i]; - - string targetName = file.FullName.Substring(topLevelFolderName.Length); - string completeFileName = Path.Combine(targetDirectory, targetName); - - // If name is empty it should be a directory. - if (file.Name == "") - { - if (i == 0) // We assume that if the first thing we encounter is a folder, it is a toplevel one. - topLevelFolderName = file.FullName; - else - Directory.CreateDirectory(Path.GetDirectoryName(completeFileName)); - } - else - { - using (var destination = File.Open(completeFileName, FileMode.Create, FileAccess.Write, FileShare.None)) - { - using (var stream = file.Open()) - stream.CopyTo(destination); - } - } - - if (cancellationToken.IsCancellationRequested) - return; - } - } + OnProgressEvent("Unpacking...", "", -1.0f); - }, cancellationToken); + try + { + await Task.Run(() => + { + ZipFile.ExtractToDirectory(targetZipFile, GetDefaultFolder()); + }); + } + catch (Exception e) + { + _ = Output.WriteLineAsync("Failed to unpack IWYU with error:" + e.Message); + return; + } // Save version. - onProgressUpdate("Saving Version", "", -1.0f); - string version = await GetCurrentVersionOnline(); - File.WriteAllText(GetVersionFilePath(executablePath), version); + OnProgressEvent("Saving Version", "", -1.0f); + string version = await GetVersionOnlineAsync(); + File.WriteAllText(GetVersionFilePath(), version); + + OnProgressEvent("Clean Up", "", -1.0f); + File.Delete(targetZipFile); + } + public void Cancel() + { + client?.CancelAsync(); } + static public IEnumerable GetMappingFilesNextToIwyuPath(string executablePath) { string targetDirectory = Path.GetDirectoryName(executablePath); diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index d0e756b..7286da6 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -15,67 +15,17 @@ namespace IncludeToolbox [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(PackageGuids.guidIncludeToolboxPackageString)] [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionOpening_string, PackageAutoLoadFlags.BackgroundLoad)] + [ProvideUIContextRule(PackageGuids.GOnlyVCString, "UIOnlyVC", + expression: "one & two", + termNames: new[] { "one", "two" }, + termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(h|hpp|hxx|cpp|c|cxx)$" } +)] public sealed class IncludeToolboxPackage : ToolkitPackage { - protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) { await this.RegisterCommandsAsync(); + await Output.InitializeAsync(); } } - - //[ProvideBindingPath(SubPath = "")] // Necessary to find packaged assemblies. - - //[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] - //[ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)] - //[ProvideMenuResource("Menus.ctmenu", 1)] - - //[ProvideOptionPage(typeof(FormatterOptionsPage), Options.Constants.Category, FormatterOptionsPage.SubCategory, 1000, 1001, true)] - //[ProvideOptionPage(typeof(IncludeWhatYouUseOptionsPage), Options.Constants.Category, IncludeWhatYouUseOptionsPage.SubCategory, 1000, 1002, true)] - //[ProvideOptionPage(typeof(TrialAndErrorRemovalOptionsPage), Options.Constants.Category, TrialAndErrorRemovalOptionsPage.SubCategory, 1000, 1003, true)] - //[ProvideOptionPage(typeof(ViewerOptionsPage), Options.Constants.Category, ViewerOptionsPage.SubCategory, 1000, 1004, true)] - - //[ProvideToolWindow(typeof(GraphWindow.IncludeGraphToolWindow))] - //[Guid(IncludeToolboxPackage.PackageGuidString)] - //[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")] - //[InstalledProductRegistration("#110", "#112", "0.2", IconResourceID = 400)] - //public sealed class IncludeToolboxPackage : AsyncPackage - //{ - // /// - // /// IncludeToolboxPackage GUID string. - // /// - // public const string PackageGuidString = "5c2743c4-1b3f-4edd-b6a0-4379f867d47f"; - - // static public Package Instance { get; private set; } - - // public IncludeToolboxPackage() - // { - // // Inside this method you can place any initialization code that does not require - // // any Visual Studio service because at this point the package object is created but - // // not sited yet inside Visual Studio environment. The place to do all the other - // // initialization is the Initialize method. - // Instance = this; - // } - - // #region Package Members - - // protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) - // { - // await base.InitializeAsync(cancellationToken, progress); - - // await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - // Commands.IncludeGraphToolWindow.Initialize(this); - // Commands.FormatIncludes.Initialize(this); - // Commands.IncludeWhatYouUse.Initialize(this); - // Commands.TrialAndErrorRemoval_CodeWindow.Initialize(this); - // Commands.TrialAndErrorRemoval_Project.Initialize(this); - // } - - // protected override void Dispose(bool disposing) - // { - // base.Dispose(disposing); - // } - - // #endregion - //} } diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index 9144e3f..f62bd3e 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -9,6 +9,29 @@ IncludeToolboxShared + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IncludeToolboxShared/Options/IWYUOptions.cs b/IncludeToolboxShared/Options/IWYUOptions.cs new file mode 100644 index 0000000..8c99920 --- /dev/null +++ b/IncludeToolboxShared/Options/IWYUOptions.cs @@ -0,0 +1,123 @@ +using Community.VisualStudio.Toolkit; +using System; +using System.ComponentModel; +using System.Runtime.InteropServices; + +namespace IncludeToolbox +{ + internal partial class OptionsProvider + { + [ComVisible(true)] + public class XIWYUOptions : BaseOptionPage { } + } + + public class IWYUOptions : BaseOptionModel + { + string exe = ""; + Comment comm = Comment.Default; + uint verbose = 2; + bool pch = false; + bool nodefault = false; + bool transitives = false; + bool warn = false; + bool always = false; + bool header = false; + string mapping = ""; + string[] clang_options = new string[] { }; + string[] iwyu_options = new string[] { }; + + [Browsable(false)] + public bool Dirty { get; private set; } + + [Category("General")] + [DisplayName("IWYU Executable")] + [Description("A path to IWYU executable.")] + [DefaultValue("")] + public string Executable + { + get { return exe; } + set + { + Dirty = true; + exe = value; + } + } + + [Category("General")] + [DisplayName("Print Commentaries")] + [Description("Tells IWYU to show or hide individual commentaries to headers.")] + [DefaultValue(Comment.Default)] + [TypeConverter(typeof(EnumConverter))] + public Comment Comms { get { return comm; } set { Dirty = true; comm = value; } } + + [Category("General")] + [DisplayName("Output Verbosity")] + [Description("Determines how much output needs to be printed. May help in case of error. Max value is 7.")] + [DefaultValue(2)] + public uint Verbosity{ get { return verbose; } set { Dirty = true; verbose = Math.Min(value, 7); } } + + [Category("General")] + [DisplayName("Precompiled Header")] + [Description("Sets if first file in .cpp is precompiled header. Blocks first file from being parsed.")] + [DefaultValue(false)] + public bool Precompiled { get { return pch; } set { Dirty = true; pch = value; } } + + [Category("General")] + [DisplayName("No Default Maps")] + [Description("If true, turns default gcc iwyu STL bindings off. Useful for STL map implementation.")] + [DefaultValue(false)] + public bool NoDefault { get { return nodefault; } set { Dirty = true; nodefault = value; } } + + [Category("General")] + [DisplayName("Only Transitive")] + [Description("Do not suggest that a file add foo.h unless foo.h is already visible in the file's transitive includes.")] + [DefaultValue(false)] + public bool Transitives { get { return transitives; } set { Dirty = true; transitives = value; } } + + [Category("General")] + [DisplayName("Show Warnings")] + [Description("Shows warnings from IWYU compiler.")] + [DefaultValue(false)] + public bool Warnings { get { return warn; } set { Dirty = true; warn = value; } } + + [Category("General")] + [DisplayName("Always Rebuild")] + [Description("Rebuild the project command line on each call. Good for dynamic projects, that may change their options.")] + [DefaultValue(false)] + public bool AlwaysRebuid { get { return always; } set { Dirty = true; always = value; } } + + [Category("Options")] + [DisplayName("IWYU options")] + [Description("IWYU launch options, that determine the flow of include-what-you-use.")] + public string[] Options { get { return iwyu_options; } set { iwyu_options = value; Dirty = true; } } + + [Category("Options")] + [DisplayName("Clang options")] + [Description("Clang launch options, that determine compilation stage flow.")] + public string[] ClangOptions { get { return clang_options; } set { clang_options = value; Dirty = true; } } + + [Category("Options")] + [DisplayName("Mapping File")] + [Description("Specifies the mapping file to use by iwyu.")] + [DefaultValue("")] + public string MappingFile { get { return mapping; } set { mapping = value; Dirty = true; } } + + [Category("Options")] + [DisplayName("Ignore Header")] + [Description("Ignores header of specified .cpp. Tries to find same-named .h in the includes. If it succeeds, the header is moved to the beginning and it is treated as precompiled. Useful when .h file is already refactored.")] + [DefaultValue(false)] + public bool IgnoreHeader { get { return header; } set { header = value; Dirty = true; } } + + public void ClearFlag() + { + Dirty = false; + } + } + + public enum Comment + { + Default, + Always, + Never + } +} diff --git a/IncludeToolboxShared/Util/Output.cs b/IncludeToolboxShared/Util/Output.cs index 630cddc..03394df 100644 --- a/IncludeToolboxShared/Util/Output.cs +++ b/IncludeToolboxShared/Util/Output.cs @@ -1,115 +1,30 @@ -using EnvDTE; -using EnvDTE80; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; +using Community.VisualStudio.Toolkit; using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { - public class Output + internal static class Output { - static public Output Instance { private set; get; } = new Output(); - - public enum MessageResult - { - Yes, - No - } - - private const int VsMessageBoxResult_Yes = 6; - - private Output() - { - } - - private OutputWindowPane outputWindowPane = null; - - private void Init() - { - ThreadHelper.ThrowIfNotOnUIThread(); - - DTE2 dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2; - if (dte == null) - return; - - OutputWindow outputWindow = dte.ToolWindows.OutputWindow; - outputWindowPane = outputWindow.OutputWindowPanes.Add("IncludeToolbox"); - } - - public void Clear() - { - ThreadHelper.ThrowIfNotOnUIThread(); - - if (outputWindowPane == null) - Init(); - outputWindowPane.Clear(); - } - - public async Task WriteInternal(string text) + static private OutputWindowPane pane; + static public async Task InitializeAsync() { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - if (outputWindowPane == null) - Init(); - - if (outputWindowPane != null) - { - System.Diagnostics.Debug.Assert(outputWindowPane != null); - outputWindowPane.OutputString(text); - } - } - - public void Write(string text) - { - // Typically we don't care if the message was already written, so let's move this to a different (main-thread) task. - _ = WriteInternal(text); - } - - public void Write(string text, params object[] stringParams) - { - string output = string.Format(text, stringParams); - Write(output); - } - - public void WriteLine(string line) - { - Write(line + '\n'); + pane = await VS.Windows.CreateOutputWindowPaneAsync("Include Minimizer"); } - - public void WriteLine(string line, params object[] stringParams) + static public async Task WriteLineAsync(string str) { - string output = string.Format(line, stringParams); - WriteLine(output); + await pane.WriteLineAsync(str); } - - public async Task ErrorMsg(string message, params object[] stringParams) + static public void WriteLine(string str) { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - string output = string.Format(message, stringParams); - WriteLine(output); - VsShellUtilities.ShowMessageBox(ServiceProvider.GlobalProvider, output, "Include Toolbox", OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); + pane.WriteLine(str); } - - public async Task InfoMsg(string message, params object[] stringParams) + static public async Task BringForwardAsync() { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - string output = string.Format(message, stringParams); - WriteLine(output); - VsShellUtilities.ShowMessageBox(ServiceProvider.GlobalProvider, output, "Include Toolbox", OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); + await pane.ActivateAsync(); } - - public async Task YesNoMsg(string message) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - int result = VsShellUtilities.ShowMessageBox(ServiceProvider.GlobalProvider, message, "Include Toolbox", OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_YESNO, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); - return result == VsMessageBoxResult_Yes ? MessageResult.Yes : MessageResult.No; - } - - public void OutputToForeground() + static public async Task ClearAsync() { - ThreadHelper.ThrowIfNotOnUIThread(); - outputWindowPane.Activate(); + await pane.ClearAsync(); } } -} +} \ No newline at end of file diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs new file mode 100644 index 0000000..049a9eb --- /dev/null +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -0,0 +1,83 @@ +using Community.VisualStudio.Toolkit; +using EnvDTE; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IncludeToolbox +{ + public class VCUtil + { + static EnvDTE.Project cached_project; + public static EnvDTE80.DTE2 GetDTE() + { + var dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2; + if (dte == null) + { + throw new System.Exception("Failed to retrieve DTE2!"); + } + return dte; + } + public static async Task GetProjectAsync() + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + var doc = GetDTE().ActiveDocument; + return doc.ProjectItem?.ContainingProject; + } + + public static async Task GetCommandLineAsync(bool rebuild) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var prj = await GetProjectAsync(); + + if (cached_project == prj && !rebuild) + return ""; + + cached_project = prj; + + var proj = prj.Object as VCProject; + if (proj == null) { VS.MessageBox.ShowErrorAsync("IWYU Error:", "The project is not a Visual Studio C/C++ type.").FireAndForget(); return null; } + + var cfg = proj.ActiveConfiguration; + var cl = cfg?.Rules; + if (cl == null) { VS.MessageBox.ShowErrorAsync("IWYU Error:", "Failed to gather Compiler info.").FireAndForget(); return null; } + + var com = (IVCRulePropertyStorage2)cl.Item("CL"); + var xstandard = com.GetEvaluatedPropertyValue("LanguageStandard"); + var includes = com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories") + .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)) + .Select(x => "-I\"" + x + '\"'); + var defs = com.GetEvaluatedPropertyValue("PreprocessorDefinitions") + .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)) + .Select(x => "-D" + x); + + string standard; + switch (xstandard) + { + default: + case "stdcpp20": + standard = "-std=c++20"; + break; + case "stdcpp17": + standard = "-std=c++17"; + break; + case "stdcpp14": + case "Default": + standard = "-std=c++14"; + break; + } + + var inc_string = string.Join(" ", includes); + var def_string = string.Join(" ", defs); + + + return inc_string + ' ' + def_string + ' ' + standard; + } + } +} diff --git a/SharedItems/CommandDefinitions.cs b/SharedItems/CommandDefinitions.cs index 6fa40aa..21164cf 100644 --- a/SharedItems/CommandDefinitions.cs +++ b/SharedItems/CommandDefinitions.cs @@ -32,16 +32,22 @@ internal sealed partial class PackageGuids public const string guidIconsCommonString = "dd14909e-b406-4cfa-b492-08b8127679df"; public static Guid guidIconsCommon = new Guid(guidIconsCommonString); + + public const string GHeaderOnlyString = "a34e853e-8679-4a07-918e-982a1b3b0a6b"; + public static Guid GHeaderOnly = new Guid(GHeaderOnlyString); + + public const string GOnlyVCString = "1175290a-3e8f-4718-868c-c08b5d2b09a7"; + public static Guid GOnlyVC = new Guid(GOnlyVCString); } /// /// Helper class that encapsulates all CommandIDs uses across VS Package. /// internal sealed partial class PackageIds { - public const int EditMenuGroup = 0x1020; - public const int FormatIncludesId = 0x0100; - public const int IncludeWhatYouUseId = 0x0103; - public const int TrialAndErrorRemovalId = 0x0104; + public const int ContextMenuGroup = 0x0001; + public const int FormatIncludesId = 0x0010; + public const int IncludeWhatYouUseId = 0x0011; + public const int TrialAndErrorRemovalId = 0x0012; public const int IncludeGraphToolWindowGroup = 0x1000; public const int IncludeGraphToolWindowCommandId = 0x0102; public const int ProjectMenuGroup = 0x1000; diff --git a/SharedItems/CommandDefinitions.vsct b/SharedItems/CommandDefinitions.vsct index f1d75db..2bc5b8e 100644 --- a/SharedItems/CommandDefinitions.vsct +++ b/SharedItems/CommandDefinitions.vsct @@ -47,9 +47,10 @@ - + + @@ -62,28 +63,19 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IncludeToolbox17/source.extension.cs b/IncludeToolbox2022/source.extension.cs similarity index 84% rename from IncludeToolbox17/source.extension.cs rename to IncludeToolbox2022/source.extension.cs index 401001e..8026a33 100644 --- a/IncludeToolbox17/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -7,11 +7,11 @@ namespace IncludeToolbox { internal sealed partial class Vsix { - public const string Id = "IncludeToolbox17.6ee4e8e8-7145-4098-8319-82b00aa31eab"; + public const string Id = "IncludeToolbox2022.d3cba4fe-8d65-479b-8436-18d743ee7b53"; public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.0.0"; + public const string Version = "1.0"; public const string Author = "Ilya Doroshenko"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox17/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest similarity index 71% rename from IncludeToolbox17/source.extension.vsixmanifest rename to IncludeToolbox2022/source.extension.vsixmanifest index d347dfd..f7d5713 100644 --- a/IncludeToolbox17/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,14 +1,15 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox License.txt - IncludeFormatterPackage.png - IncludeFormatterPackage.png + Resources\IncludeFormatterPackage.png + Resources\IncludeFormatterPackage.png Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal + true @@ -19,5 +20,6 @@ + diff --git a/IncludeToolboxShared/Commands/FormatIncludes.cs b/IncludeToolboxShared/Commands/FormatIncludes.cs index 36f25d1..6d3b546 100644 --- a/IncludeToolboxShared/Commands/FormatIncludes.cs +++ b/IncludeToolboxShared/Commands/FormatIncludes.cs @@ -11,7 +11,7 @@ namespace IncludeToolbox.Commands { [Command(PackageIds.FormatIncludesId)] - internal sealed class FormatIncludes : BaseCommand + internal sealed class FormatIncludes : BaseCommand { SnapshotSpan GetSelectionLines(IWpfTextView viewHost) { diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index 896de16..82d3eb5 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -35,14 +35,10 @@ internal sealed class RunIWYU : BaseCommand IWYU proc = new(); CancelCallback cancelCallback; - public RunIWYU() - { - cancelCallback = new(delegate { proc.CancelAsync().FireAndForget(); }); - } protected override async Task InitializeCompletedAsync() { - Command.Supported = false; + cancelCallback = new(delegate { proc.CancelAsync().FireAndForget(); }); var settings = await IWYUOptions.GetLiveInstanceAsync(); if (settings.Executable == IWYUDownload.GetDefaultExecutablePath()) download_required = await IWYUDownload.IsNewerVersionAvailableOnlineAsync(); @@ -69,7 +65,7 @@ private async Task DownloadAsync(IVsThreadedWaitDialogFactory dialogFactor szStatusBarText: $"Downloading include-what-you-use - {section} - {status}", iCurrentStep: (int)(percentage * 100), iTotalSteps: 100, - fDisableCancel: true, + fDisableCancel: false, pfCanceled: out bool canceled); }; diff --git a/IncludeToolboxShared/IWYU/IWYUDownload.cs b/IncludeToolboxShared/IWYU/IWYUDownload.cs index f5987ea..71e1a47 100644 --- a/IncludeToolboxShared/IWYU/IWYUDownload.cs +++ b/IncludeToolboxShared/IWYU/IWYUDownload.cs @@ -33,7 +33,7 @@ static public string GetVersionFilePath() } public delegate void OnChangeDelegate(string Section, string Status, float percent); - + public event OnChangeDelegate OnProgress; @@ -139,10 +139,18 @@ public async Task DownloadIWYUAsync() try { - await Task.Run(() => - { - ZipFile.ExtractToDirectory(targetZipFile, GetDefaultFolder()); - }); + using (ZipArchive archive = ZipFile.OpenRead(targetZipFile)) + { + foreach (ZipArchiveEntry entry in archive.Entries.Where(e => + { + if (e.Name == "LICENSE") return true; + string a = Path.GetExtension(e.FullName); + return a == ".exe" || a == ".txt" || a == ".imp" || a == ".md"; + })) + { + entry.ExtractToFile(Path.Combine(GetDefaultFolder(), entry.Name)); + } + } } catch (Exception e) { diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index 51530b1..904ea34 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -11,16 +11,11 @@ namespace IncludeToolbox [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)] [ProvideMenuResource("Menus.ctmenu", 1)] - [Guid(PackageGuids.guidIncludeToolboxPackageString)] + [Guid(PackageGuids.IncludeToolbox2022String)] [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionOpening_string, PackageAutoLoadFlags.BackgroundLoad)] [ProvideOptionPage(typeof(OptionsProvider.FormatterOptionsPage), "Include Toolbox", "Include Format", 0, 0, true, SupportsProfiles = true)] - [ProvideOptionPage(typeof(OptionsProvider.TrialAndErrorRemovalOptions), "Include Toolbox", "Trial and Error", 0, 0, true, SupportsProfiles = true)] + [ProvideOptionPage(typeof(OptionsProvider.TrialAndErrorRemovalOptionsPage), "Include Toolbox", "Trial and Error", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.IWYUOptionsPage), "Include Toolbox", "Include-What-You-Use", 0, 0, true, SupportsProfiles = true)] - [ProvideUIContextRule(PackageGuids.GOnlyVCString, "UIOnlyVC", - expression: "one & two", - termNames: new[] { "one", "two" }, - termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(h|hpp|hxx|cpp|c|cxx)$" } -)] public sealed class IncludeToolboxPackage : ToolkitPackage { protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) diff --git a/IncludeToolboxShared/Options/FormatterOptions.cs b/IncludeToolboxShared/Options/FormatterOptions.cs index ad5f9fe..86ea5fc 100644 --- a/IncludeToolboxShared/Options/FormatterOptions.cs +++ b/IncludeToolboxShared/Options/FormatterOptions.cs @@ -56,7 +56,8 @@ public class FormatOptions : BaseOptionModel [Category("Sorting")] [DisplayName("Precedence Regexes")] [Description("Earlier match means higher sorting priority.\n\"" + RegexUtils.CurrentFileNameKey + "\" will be replaced with the current file name without extension.")] - public string[] PrecedenceRegexes { + public string[] PrecedenceRegexes + { get { return precedenceRegexes; } set { precedenceRegexes = value.Where(x => x.Length > 0).ToArray(); } // Remove empty lines. } diff --git a/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs b/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs index 1a10712..35eb7e1 100644 --- a/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs +++ b/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs @@ -7,7 +7,7 @@ namespace IncludeToolbox internal partial class OptionsProvider { [ComVisible(true)] - public class TrialAndErrorRemovalOptions : BaseOptionPage { } + public class TrialAndErrorRemovalOptionsPage : BaseOptionPage { } } public class TrialAndErrorRemovalOptions : BaseOptionModel diff --git a/IncludeToolboxShared/Util/Utils.cs b/IncludeToolboxShared/Util/Utils.cs index 489ea0c..d51e190 100644 --- a/IncludeToolboxShared/Util/Utils.cs +++ b/IncludeToolboxShared/Util/Utils.cs @@ -26,7 +26,7 @@ public static string MakeRelative(string absoluteRoot, string absoluteTarget) rootUri = new Uri(absoluteRoot); targetUri = new Uri(absoluteTarget); } - catch(UriFormatException) + catch (UriFormatException) { return absoluteTarget; } diff --git a/SharedItems/CommandDefinitions.cs b/SharedItems/CommandDefinitions.cs index 21164cf..4424ab4 100644 --- a/SharedItems/CommandDefinitions.cs +++ b/SharedItems/CommandDefinitions.cs @@ -12,58 +12,15 @@ namespace IncludeToolbox /// internal sealed partial class PackageGuids { - public const string guidIncludeToolboxPackageString = "5c2743c4-1b3f-4edd-b6a0-4379f867d47f"; - public static Guid guidIncludeToolboxPackage = new Guid(guidIncludeToolboxPackageString); - - public const string guidCodeMenuCmdSetString = "aef3a531-8af4-4b7b-800a-e32503dfc6e2"; - public static Guid guidCodeMenuCmdSet = new Guid(guidCodeMenuCmdSetString); - - public const string guidIncludeGraphWindowCmdSetString = "032eb795-1f1c-440d-af98-43cdc1de7a8b"; - public static Guid guidIncludeGraphWindowCmdSet = new Guid(guidIncludeGraphWindowCmdSetString); - - public const string guidProjectMenuCmdSetString = "1970ecf3-6c03-4ccf-b422-8dd07f774ed8"; - public static Guid guidProjectMenuCmdSet = new Guid(guidProjectMenuCmdSetString); - - public const string guidGraphWindowToolbarCmdSetString = "0b242452-870a-489b-8336-88fd01aef0c1"; - public static Guid guidGraphWindowToolbarCmdSet = new Guid(guidGraphWindowToolbarCmdSetString); - - public const string guidIconsGraphWindowToolbarString = "10311b90-33ad-4479-a326-4b40f7f7aca8"; - public static Guid guidIconsGraphWindowToolbar = new Guid(guidIconsGraphWindowToolbarString); - - public const string guidIconsCommonString = "dd14909e-b406-4cfa-b492-08b8127679df"; - public static Guid guidIconsCommon = new Guid(guidIconsCommonString); - - public const string GHeaderOnlyString = "a34e853e-8679-4a07-918e-982a1b3b0a6b"; - public static Guid GHeaderOnly = new Guid(GHeaderOnlyString); - - public const string GOnlyVCString = "1175290a-3e8f-4718-868c-c08b5d2b09a7"; - public static Guid GOnlyVC = new Guid(GOnlyVCString); + public const string VSIXProject1String = "1296bf3f-d351-4b2e-9f71-a3ed2874cdb5"; + public static Guid VSIXProject1 = new Guid(VSIXProject1String); } /// /// Helper class that encapsulates all CommandIDs uses across VS Package. /// internal sealed partial class PackageIds { - public const int ContextMenuGroup = 0x0001; - public const int FormatIncludesId = 0x0010; - public const int IncludeWhatYouUseId = 0x0011; - public const int TrialAndErrorRemovalId = 0x0012; - public const int IncludeGraphToolWindowGroup = 0x1000; - public const int IncludeGraphToolWindowCommandId = 0x0102; - public const int ProjectMenuGroup = 0x1000; - public const int ProjectWideTrialAndErrorRemovalId = 0x0100; - public const int idGraphWindowToolbar = 0x1000; - public const int idGraphWindowToolbarGroupRefresh = 0x1001; - public const int idGraphWindowToolbarGroupSaveGraph = 0x1002; - public const int idGraphWindowRefresh = 0x0101; - public const int idGraphWindowRefreshMode = 0x0102; - public const int idGraphWindowRefreshModeOptions = 0x0103; - public const int idGraphWindowSaveGraph = 0x0104; - public const int iconRefresh = 0x0001; - public const int iconSaveGraph = 0x0002; - public const int iconFormatter = 0x0001; - public const int iconIWYU = 0x0002; - public const int iconTrialAndError = 0x0003; - public const int iconExplorer = 0x0004; + public const int MyMenuGroup = 0x0001; + public const int MyCommand = 0x0100; } } \ No newline at end of file diff --git a/SharedItems/CommandDefinitions.vsct b/SharedItems/CommandDefinitions.vsct index 582ee81..bdff092 100644 --- a/SharedItems/CommandDefinitions.vsct +++ b/SharedItems/CommandDefinitions.vsct @@ -47,7 +47,7 @@ - + diff --git a/SharedItems/Resources/hash.png b/SharedItems/Resources/hash.png new file mode 100644 index 0000000000000000000000000000000000000000..33218b4040d08b339ba19d6b6df3b03f84b46419 GIT binary patch literal 675 zcmV;U0$lxxP)dH?_b8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10x(HL zK~y-6jgi4?6G0foUy_Z@2J4}5>CR+{&FG;Z=pkFoMK6Ws5F|<4LqX6>!T+H25^wr{ zL?Z}V#6#>wdI&w}AqSBfve^>iCbK(P+e-_jD`7mPgwjOcX}$;FkN3U-uFzmGxIS$j zSExBRmkUQC;c?U6+^pV+$2$+pWfK6Z)v8Yj`MSKk{P;3J(M|KsET!7GdE0gI`}kM| z0LO9Et*xz_>+9>MS0zwRh4?W%KM#!zIWrUg83Ye*scIhp6h&c<<6v=d@%yA2007r@ zwRXGxvejz6%VaXrw(XD2X7iP0S?@EMjI=E4L#NYuF%59HR4Pfvn2g0@k})P3V=|pi zOI1}RV@z&uZwC_rzVFX+&e!(#_P(sHu1eQ+pK{LEYPDK@V`D>d&Y$%A{lewFi|cEe zc0wuLX|-CaVHjtGkk^#b9ox3!l+qJQ>Dy#7`Dr3xtjdC>Y2IiSLZozE=aZ6O0D8S% zVlWu!LI}+;jGho;-uHd#d0rx!Ogch{`GbRlYnK5R-&d(ry1To(sr~(Zn5KzXECv9m z*Xzh;v(R-N<#IVs2>Cn?P)3hbD)nt;WhH1d8h47tq7wwcv7#umjYfkN3WZ7le*^&CZuj}p(vtK%FZ<6M06@FlzL!WOFdPmK0l>1X`-BikDG&b( z03emm=l>Xn;Q~N38Z~mc+!-OnpBjB6DP_d-y!80&y6(cXoxfVT@%MI3n9TqH002ov JPDHLkV1iD;Ht7HW literal 0 HcmV?d00001 From 2f2986c244df2ff5cf27e7429e40d0653d001d5d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 15 Jul 2022 15:14:59 +0200 Subject: [PATCH 06/86] fixed loader --- IncludeToolbox2022/VSCommandTable.vsct | 1 + IncludeToolboxShared/Commands/RunIWYU.cs | 1 + IncludeToolboxShared/IWYU/IWYU.cs | 1 + IncludeToolboxShared/IWYU/IWYUDownload.cs | 12 ++++++++++++ 4 files changed, 15 insertions(+) diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index f94d519..30fc8a3 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -32,6 +32,7 @@ IconIsMoniker DynamicVisibility + DefaultInvisible Format Includes .IncludeToolbox2022.FormatIncludesId diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index 82d3eb5..69acfd2 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -89,6 +89,7 @@ private async Task DownloadAsync(IVsThreadedWaitDialogFactory dialogFactor var settings = await IWYUOptions.GetLiveInstanceAsync(); settings.Executable = IWYUDownload.GetDefaultExecutablePath(); + await settings.SaveAsync(); return true; } diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index bc5d8a1..54f9fd7 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -95,6 +95,7 @@ Dictionary> ParseIncludes(ITextSnapshot snap, out int first_p var text = snap.GetText(); int begin = text.IndexOf("#include"); int end = text.LastIndexOf("#include"); + end = text.IndexOf('\n', end); text = text.Substring(begin, end - begin); //optimized // Get all commentary spans diff --git a/IncludeToolboxShared/IWYU/IWYUDownload.cs b/IncludeToolboxShared/IWYU/IWYUDownload.cs index 71e1a47..a7da5a7 100644 --- a/IncludeToolboxShared/IWYU/IWYUDownload.cs +++ b/IncludeToolboxShared/IWYU/IWYUDownload.cs @@ -119,6 +119,17 @@ public async Task DownloadIWYUAsync() { string targetDirectory = GetDefaultFolder(); Directory.CreateDirectory(targetDirectory); + DirectoryInfo di = new DirectoryInfo(targetDirectory); + + foreach (FileInfo file in di.EnumerateFiles()) + { + file.Delete(); + } + foreach (DirectoryInfo dir in di.EnumerateDirectories()) + { + dir.Delete(true); + } + string targetZipFile = Path.Combine(targetDirectory, "download.zip"); // Download. @@ -155,6 +166,7 @@ public async Task DownloadIWYUAsync() catch (Exception e) { _ = Output.WriteLineAsync("Failed to unpack IWYU with error:" + e.Message); + File.Delete(targetZipFile); return; } From bae27be7832f7433077d981edc1eb6b32b0e2f6d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 15 Jul 2022 16:48:38 +0200 Subject: [PATCH 07/86] Restored all functionality --- IncludeToolbox2022/VSCommandTable.cs | 4 + IncludeToolbox2022/VSCommandTable.vsct | 26 + .../TrialAndErrorRemoval_CodeWindow.cs | 33 +- .../Commands/TrialAndErrorRemoval_Project.cs | 390 ++++++----- IncludeToolboxShared/IncludeToolboxPackage.cs | 10 + .../Util/TrialAndErrorRemoval.cs | 640 +++++++++--------- IncludeToolboxShared/Util/VCHelper.cs | 446 ++++++------ IncludeToolboxShared/Util/VSUtils.cs | 335 +++++---- 8 files changed, 949 insertions(+), 935 deletions(-) diff --git a/IncludeToolbox2022/VSCommandTable.cs b/IncludeToolbox2022/VSCommandTable.cs index c75beae..af4da5b 100644 --- a/IncludeToolbox2022/VSCommandTable.cs +++ b/IncludeToolbox2022/VSCommandTable.cs @@ -20,6 +20,9 @@ internal sealed partial class PackageGuids public const string GOnlyVCString = "1175290a-3e8f-4718-868c-c08b5d2b09a7"; public static Guid GOnlyVC = new Guid(GOnlyVCString); + + public const string GOnlyCppString = "bf397895-9307-431f-a823-1c85d430243a"; + public static Guid GOnlyCpp = new Guid(GOnlyCppString); } /// /// Helper class that encapsulates all CommandIDs uses across VS Package. @@ -29,5 +32,6 @@ internal sealed partial class PackageIds public const int ContextMenuGroup = 0x0001; public const int IncludeWhatYouUseId = 0x0100; public const int FormatIncludesId = 0x0101; + public const int TrialAndError = 0x0102; } } \ No newline at end of file diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index 30fc8a3..b8a8bab 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -38,16 +38,39 @@ .IncludeToolbox2022.FormatIncludesId + + + + + + @@ -55,10 +78,13 @@ + + + diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs index 613cdd8..24be685 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs @@ -1,18 +1,19 @@ -//using Community.VisualStudio.Toolkit; -//using Microsoft.VisualStudio.Shell; -//using Task = System.Threading.Tasks.Task; +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Shell; +using Task = System.Threading.Tasks.Task; -//namespace IncludeToolbox.Commands -//{ -// internal sealed class TrialAndErrorRemoval_CodeWindow : BaseCommand -// { -// TrialAndErrorRemoval impl = new(); +namespace IncludeToolbox.Commands +{ + [Command(PackageIds.TrialAndError)] + internal sealed class TrialAndErrorRemoval_CodeWindow : BaseCommand + { + TrialAndErrorRemoval impl = new(); -// protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) -// { -// var document = VCUtil.GetDTE().ActiveDocument; -// if (document != null) -// await impl.PerformTrialAndErrorIncludeRemovalAsync(document); -// } -// } -//} \ No newline at end of file + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) + { + var document = VCUtil.GetDTE().ActiveDocument; + if (document != null) + await impl.PerformTrialAndErrorIncludeRemovalAsync(document); + } + } +} \ No newline at end of file diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs index 27532a9..31e851c 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs @@ -1,201 +1,189 @@ -//using Community.VisualStudio.Toolkit; -//using EnvDTE; -//using Microsoft.VisualStudio; -//using Microsoft.VisualStudio.Shell; -//using System; -//using System.Collections.Generic; -//using System.ComponentModel.Design; -//using System.Threading.Tasks; -//using Task = System.Threading.Tasks.Task; - -//namespace IncludeToolbox.Commands -//{ -// /// -// /// Command handler -// /// -// internal sealed class TrialAndErrorRemoval_Project : BaseCommand -// { -// private TrialAndErrorRemoval impl; -// private ProjectItems projectItems = null; -// private int numTotalRemovedIncludes = 0; -// private Queue projectFiles; - -// public TrialAndErrorRemoval_Project() -// { -// projectFiles = new Queue(); -// } - -// protected override void SetupMenuCommand() -// { -// base.SetupMenuCommand(); - -// impl = new TrialAndErrorRemoval(); -// impl.OnFileFinished += OnDocumentIncludeRemovalFinished; -// menuCommand.BeforeQueryStatus += UpdateVisibility; - -// settings = (TrialAndErrorRemovalOptionsPage)Package.GetDialogPage(typeof(TrialAndErrorRemovalOptionsPage)); -// } - -// private void OnDocumentIncludeRemovalFinished(int removedIncludes, bool canceled) -// { -// _ = Task.Run(async () => -// { -// numTotalRemovedIncludes += removedIncludes; -// if (canceled || !await ProcessNextFile()) -// { -// _ = Output.Instance.InfoMsg("Removed total of {0} #include directives from project.", numTotalRemovedIncludes); -// numTotalRemovedIncludes = 0; -// } -// }); -// } - -// private void UpdateVisibility(object sender, EventArgs e) -// { -// ThreadHelper.ThrowIfNotOnUIThread(); -// string reason; -// var project = GetSelectedCppProject(out reason); -// menuCommand.Visible = project != null; -// } - -// static Project GetSelectedCppProject(out string reasonForFailure) -// { -// ThreadHelper.ThrowIfNotOnUIThread(); - -// reasonForFailure = ""; - -// var selectedItems = VSUtils.GetDTE().SelectedItems; -// if (selectedItems.Count < 1) -// { -// reasonForFailure = "Selection is empty!"; -// return null; -// } - -// // Reading .Item(object) behaves weird, but iterating works. -// foreach (SelectedItem item in selectedItems) -// { -// Project vcProject = item?.Project; -// if (VSUtils.VCUtils.IsVCProject(vcProject)) -// { -// return vcProject; -// } -// } - -// reasonForFailure = "Selection does not contain a C++ project!"; -// return null; -// } - -// private async Task ProcessNextFile() -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// while (projectFiles.Count > 0) -// { -// ProjectItem projectItem = projectFiles.Dequeue(); - -// Document document = null; -// try -// { -// document = projectItem.Open().Document; -// } -// catch (Exception) -// { -// } -// if (document == null) -// continue; - -// bool started = await impl.PerformTrialAndErrorIncludeRemoval(document, settings); -// if (started) -// return true; -// } -// return false; -// } - -// private static void RecursiveFindFilesInProject(ProjectItems items, ref Queue projectFiles) -// { -// ThreadHelper.ThrowIfNotOnUIThread(); - -// var e = items.GetEnumerator(); -// while (e.MoveNext()) -// { -// var item = e.Current; -// if (item == null) -// continue; -// var projectItem = item as ProjectItem; -// if (projectItem == null) -// continue; - -// Guid projectItemKind = new Guid(projectItem.Kind); -// if (projectItemKind == VSConstants.GUID_ItemType_VirtualFolder || -// projectItemKind == VSConstants.GUID_ItemType_PhysicalFolder) -// { -// RecursiveFindFilesInProject(projectItem.ProjectItems, ref projectFiles); -// } -// else if (projectItemKind == VSConstants.GUID_ItemType_PhysicalFile) -// { -// projectFiles.Enqueue(projectItem); -// } -// else -// { -// Output.Instance.WriteLine("Unexpected Error: Unknown projectItem {0} of Kind {1}", projectItem.Name, projectItem.Kind); -// } -// } -// } - -// private async Task PerformTrialAndErrorRemoval(Project project) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// projectItems = project.ProjectItems; - -// projectFiles.Clear(); -// RecursiveFindFilesInProject(projectItems, ref projectFiles); - -// if (projectFiles.Count > 2) -// { -// if (await Output.Instance.YesNoMsg("Attention! Trial and error include removal on large projects make take up to several hours! In this time you will not be able to use Visual Studio. Are you sure you want to continue?") -// != Output.MessageResult.Yes) -// { -// return; -// } -// } - -// numTotalRemovedIncludes = 0; -// await ProcessNextFile(); -// } - - -// /// -// /// This function is the callback used to execute the command when the menu item is clicked. -// /// See the constructor to see how the menu item is associated with this function using -// /// OleMenuCommandService service and MenuCommand class. -// /// -// /// Event sender. -// /// Event args. -// protected override async Task MenuItemCallback(object sender, EventArgs e) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// if (TrialAndErrorRemoval.WorkInProgress) -// { -// await Output.Instance.ErrorMsg("Trial and error include removal already in progress!"); -// return; -// } - -// try -// { -// Project project = GetSelectedCppProject(out string reasonForFailure); -// if (project == null) -// { -// Output.Instance.WriteLine(reasonForFailure); -// return; -// } - -// await PerformTrialAndErrorRemoval(project); -// } -// finally -// { -// projectItems = null; -// } -// } -// } -//} +using Community.VisualStudio.Toolkit; +using EnvDTE; +using Microsoft.VisualStudio; +using Microsoft.VisualStudio.Shell; +using System; +using System.Collections.Generic; +using System.ComponentModel.Design; +using System.Runtime; +using System.Threading.Tasks; +using static IncludeToolbox.OptionsProvider; +using System.Windows.Forms.Design; +using Task = System.Threading.Tasks.Task; +using Project = EnvDTE.Project; + +namespace IncludeToolbox.Commands +{ + /// + /// Command handler + /// + internal sealed class TrialAndErrorRemoval_Project : BaseCommand + { + private TrialAndErrorRemoval impl; + private ProjectItems projectItems = null; + private int numTotalRemovedIncludes = 0; + private Queue projectFiles = new(); + + protected override Task InitializeCompletedAsync() + { + impl = new TrialAndErrorRemoval(); + impl.OnFileFinished += OnDocumentIncludeRemovalFinished; + return Task.CompletedTask; + } + + + private void OnDocumentIncludeRemovalFinished(int removedIncludes, bool canceled) + { + _ = Task.Run(async () => + { + numTotalRemovedIncludes += removedIncludes; + if (canceled || !await ProcessNextFile()) + { + _ = VS.MessageBox.ShowConfirmAsync(string.Format("Removed total of {0} #include directives from project.", numTotalRemovedIncludes)); + numTotalRemovedIncludes = 0; + } + }); + } + + private void UpdateVisibility(object sender, EventArgs e) + { + ThreadHelper.ThrowIfNotOnUIThread(); + string reason; + var project = GetSelectedCppProject(out reason); + Command.Visible = project != null; + } + + static Project GetSelectedCppProject(out string reasonForFailure) + { + ThreadHelper.ThrowIfNotOnUIThread(); + + reasonForFailure = ""; + + var selectedItems = VSUtils.GetDTE().SelectedItems; + if (selectedItems.Count < 1) + { + reasonForFailure = "Selection is empty!"; + return null; + } + + // Reading .Item(object) behaves weird, but iterating works. + foreach (SelectedItem item in selectedItems) + { + Project vcProject = item?.Project; + if (VSUtils.VCUtils.IsVCProject(vcProject)) + { + return vcProject; + } + } + + reasonForFailure = "Selection does not contain a C++ project!"; + return null; + } + + private async Task ProcessNextFile() + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + while (projectFiles.Count > 0) + { + ProjectItem projectItem = projectFiles.Dequeue(); + + Document document = null; + try + { + document = projectItem.Open().Document; + } + catch (Exception) + { + } + if (document == null) + continue; + + bool started = await impl.PerformTrialAndErrorIncludeRemovalAsync(document); + if (started) + return true; + } + return false; + } + + private static void RecursiveFindFilesInProject(ProjectItems items, ref Queue projectFiles) + { + ThreadHelper.ThrowIfNotOnUIThread(); + + var e = items.GetEnumerator(); + while (e.MoveNext()) + { + var item = e.Current; + if (item == null) + continue; + var projectItem = item as ProjectItem; + if (projectItem == null) + continue; + + Guid projectItemKind = new Guid(projectItem.Kind); + if (projectItemKind == VSConstants.GUID_ItemType_VirtualFolder || + projectItemKind == VSConstants.GUID_ItemType_PhysicalFolder) + { + RecursiveFindFilesInProject(projectItem.ProjectItems, ref projectFiles); + } + else if (projectItemKind == VSConstants.GUID_ItemType_PhysicalFile) + { + projectFiles.Enqueue(projectItem); + } + else + { + _=Output.WriteLineAsync(string.Format("Unexpected Error: Unknown projectItem {0} of Kind {1}", projectItem.Name, projectItem.Kind)); + } + } + } + + private async Task PerformTrialAndErrorRemoval(Project project) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + projectItems = project.ProjectItems; + + projectFiles.Clear(); + RecursiveFindFilesInProject(projectItems, ref projectFiles); + + if (projectFiles.Count > 2) + { + if (!await VS.MessageBox.ShowConfirmAsync("Attention! Trial and error include removal on large projects make take up to several hours! In this time you will not be able to use Visual Studio. Are you sure you want to continue?")) + { + return; + } + } + + numTotalRemovedIncludes = 0; + await ProcessNextFile(); + } + + + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + if (TrialAndErrorRemoval.WorkInProgress) + { + await VS.MessageBox.ShowErrorAsync("Trial and error include removal already in progress!"); + return; + } + + try + { + Project project = GetSelectedCppProject(out string reasonForFailure); + if (project == null) + { + _=Output.WriteLineAsync(reasonForFailure); + return; + } + + await PerformTrialAndErrorRemoval(project); + } + finally + { + projectItems = null; + } + } + } +} diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index 904ea34..fdb9d11 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -16,6 +16,16 @@ namespace IncludeToolbox [ProvideOptionPage(typeof(OptionsProvider.FormatterOptionsPage), "Include Toolbox", "Include Format", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.TrialAndErrorRemovalOptionsPage), "Include Toolbox", "Trial and Error", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.IWYUOptionsPage), "Include Toolbox", "Include-What-You-Use", 0, 0, true, SupportsProfiles = true)] + [ProvideUIContextRule(PackageGuids.GOnlyVCString, "UIOnlyVC", + expression: "one & two", + termNames: new[] { "one", "two" }, + termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(h|hpp|hxx|cpp|c|cxx)$" } +)] + [ProvideUIContextRule(PackageGuids.GOnlyCppString, "UIOnlyCpp", + expression: "one & two", + termNames: new[] { "one", "two" }, + termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(cpp|c|cxx)$" } +)] public sealed class IncludeToolboxPackage : ToolkitPackage { protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) diff --git a/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs index f8f0fb3..37c7e36 100644 --- a/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs @@ -1,319 +1,321 @@ -//using System; -//using System.Linq; -//using System.Threading; -//using System.Windows; -//using Microsoft.VisualStudio.Shell; -//using Microsoft.VisualStudio.Shell.Interop; -//using EnvDTE; -//using Microsoft.VisualStudio.Text; -//using System.Collections.Generic; -//using System.IO; -//using System.Threading.Tasks; -//using Task = System.Threading.Tasks.Task; -//using Community.VisualStudio.Toolkit; -//using BuildEvents = EnvDTE.BuildEvents; - -//namespace IncludeToolbox -//{ -// /// -// /// Command handler for trial and error include removal -// /// -// internal sealed class TrialAndErrorRemoval -// { -// public delegate void FinishedEvent(int numRemovedIncludes, bool canceled); -// public event FinishedEvent OnFileFinished; - -// public static bool WorkInProgress { get; private set; } - -// private volatile bool lastBuildSuccessful; -// private AutoResetEvent outputWaitEvent = new AutoResetEvent(false); -// private const int timeoutMS = 600000; // 600 seconds, 10 minutes per file - -// /// -// /// Need to keep build events object around as long as it is used, otherwise the events may not be fired! -// /// -// private BuildEvents buildEvents; - -// public async Task PerformTrialAndErrorIncludeRemovalAsync(EnvDTE.Document document) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); -// var canCompile = await VSUtils.VCUtils.IsCompilableFile(document); -// if (canCompile.Result == false) -// { -// _ = Output.WriteLineAsync($"Can't compile file '{canCompile.Reason}': {document.Name}"); -// return false; -// } - -// if (WorkInProgress) -// { -// _ = Output.ErrorMsg("Trial and error include removal already in progress!"); -// return false; -// } -// WorkInProgress = true; - -// // Start wait dialog. -// IVsThreadedWaitDialog2 progressDialog = await StartProgressDialog(document.Name); -// if (progressDialog == null) -// return false; - -// // Extract all includes. -// ITextBuffer textBuffer; -// Formatter.IncludeLineInfo[] includeLines; -// try -// { -// ExtractSelectionAndIncludes(document, settings, out textBuffer, out includeLines); -// } -// catch (Exception ex) -// { -// Output.Instance.WriteLine("Unexpected error while extracting include selection: {0}", ex); -// progressDialog.EndWaitDialog(); -// return false; -// } - -// // Hook into build events. -// SubscribeBuildEvents(); - -// // The rest runs in a separate thread since the compile function is non blocking and we want to use BuildEvents -// // We are not using Task, since we want to make use of WaitHandles - using this together with Task is a bit more complicated to get right. -// outputWaitEvent.Reset(); -// var removalThread = new System.Threading.Thread(() => TrialAndErrorRemovalThreadFunc(document, settings, includeLines, progressDialog, textBuffer)); -// removalThread.Start(); -// return true; -// } - -// private async Task StartProgressDialog(string documentName) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// var dialogFactory = Package.GetGlobalService(typeof(SVsThreadedWaitDialogFactory)) as IVsThreadedWaitDialogFactory; -// if (dialogFactory == null) -// { -// Output.Instance.WriteLine("Failed to get Dialog Factory for wait dialog."); -// return null; -// } - -// IVsThreadedWaitDialog2 progressDialog; -// dialogFactory.CreateInstance(out progressDialog); -// if (progressDialog == null) -// { -// Output.Instance.WriteLine("Failed to get create wait dialog."); -// return null; -// } -// string waitMessage = $"Parsing '{documentName}' ... "; -// progressDialog.StartWaitDialogWithPercentageProgress( -// szWaitCaption: "Include Toolbox - Running Trial & Error Include Removal", -// szWaitMessage: waitMessage, -// szProgressText: null, -// varStatusBmpAnim: null, -// szStatusBarText: "Running Trial & Error Removal - " + waitMessage, -// fIsCancelable: true, -// iDelayToShowDialog: 0, -// iTotalSteps: 20, // Will be replaced. -// iCurrentStep: 0); - -// return progressDialog; -// } - -// private void ExtractSelectionAndIncludes(EnvDTE.Document document, TrialAndErrorRemovalOptionsPage settings, -// out ITextBuffer textBuffer, out Formatter.IncludeLineInfo[] includeLinesArray) -// { -// ThreadHelper.ThrowIfNotOnUIThread(); - -// // Parsing. -// document.Activate(); -// var documentTextView = VSUtils.GetCurrentTextViewHost(); -// textBuffer = documentTextView.TextView.TextBuffer; -// string documentText = documentTextView.TextView.TextSnapshot.GetText(); -// IEnumerable includeLines = Formatter.IncludeLineInfo.ParseIncludes(documentText, Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals | Formatter.ParseOptions.KeepOnlyValidIncludes); - -// // Optionally skip top most include. -// if (settings.IgnoreFirstInclude) -// includeLines = includeLines.Skip(1); - -// // Skip everything with preserve flag. -// includeLines = includeLines.Where(x => !x.ShouldBePreserved); - -// // Apply filter ignore regex. -// { -// string documentName = Path.GetFileNameWithoutExtension(document.FullName); -// string[] ignoreRegexList = RegexUtils.FixupRegexes(settings.IgnoreList, documentName); -// includeLines = includeLines.Where(line => !ignoreRegexList.Any(regexPattern => -// new System.Text.RegularExpressions.Regex(regexPattern).Match(line.IncludeContent).Success)); -// } -// // Reverse order if necessary. -// if (settings.RemovalOrder == TrialAndErrorRemovalOptionsPage.IncludeRemovalOrder.BottomToTop) -// includeLines = includeLines.Reverse(); - -// includeLinesArray = includeLines.ToArray(); -// } - -// private void TrialAndErrorRemovalThreadFunc(EnvDTE.Document document, TrialAndErrorRemovalOptionsPage settings, -// Formatter.IncludeLineInfo[] includeLines, IVsThreadedWaitDialog2 progressDialog, ITextBuffer textBuffer) -// { -// int numRemovedIncludes = 0; -// bool canceled = false; - -// try -// { -// int currentProgressStep = 0; - -// // For ever include line.. -// foreach (Formatter.IncludeLineInfo line in includeLines) -// { -// // If we are working from top to bottom, the line number may have changed! -// int currentLine = line.LineNumber; -// if (settings.RemovalOrder == TrialAndErrorRemovalOptionsPage.IncludeRemovalOrder.TopToBottom) -// currentLine -= numRemovedIncludes; - -// ThreadHelper.JoinableTaskFactory.Run(async () => -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// // Update progress. -// string waitMessage = $"Removing #includes from '{document.Name}'"; -// string progressText = $"Trying to remove '{line.IncludeContent}' ..."; -// progressDialog.UpdateProgress( -// szUpdatedWaitMessage: waitMessage, -// szProgressText: progressText, -// szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, -// iCurrentStep: currentProgressStep + 1, -// iTotalSteps: includeLines.Length + 1, -// fDisableCancel: false, -// pfCanceled: out canceled); -// if (!canceled) -// { -// ++currentProgressStep; - -// // Remove include -// using (var edit = textBuffer.CreateEdit()) -// { -// if (settings.KeepLineBreaks) -// edit.Delete(edit.Snapshot.Lines.ElementAt(currentLine).Extent); -// else -// edit.Delete(edit.Snapshot.Lines.ElementAt(currentLine).ExtentIncludingLineBreak); -// edit.Apply(); -// } -// } -// outputWaitEvent.Set(); -// }); -// outputWaitEvent.WaitOne(); - -// if (canceled) -// break; - -// // Compile - In rare cases VS tells us that we are still building which should not be possible because we have received OnBuildFinished -// // As a workaround we just try again a few times. -// ThreadHelper.JoinableTaskFactory.Run(async () => -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// const int maxNumCompileAttempts = 3; -// for (int numCompileFails = 0; numCompileFails < maxNumCompileAttempts; ++numCompileFails) -// { -// // TODO: This happens on the main thread. Making the whole thread thing a bit pointless!!! -// try -// { -// await VSUtils.VCUtils.CompileSingleFile(document); -// } -// catch (Exception e) -// { -// Output.Instance.WriteLine("Compile Failed:\n{0}", e); - -// if (numCompileFails == maxNumCompileAttempts - 1) -// { -// document.Undo(); -// throw e; -// } -// else -// { -// // Try again. -// await System.Threading.Tasks.Task.Delay(100); -// continue; -// } -// } -// break; -// } -// }); - -// // Wait till woken. -// bool noTimeout = outputWaitEvent.WaitOne(timeoutMS); - -// // Undo removal if compilation failed. -// if (!noTimeout || !lastBuildSuccessful) -// { -// Output.Instance.WriteLine("Could not remove #include: '{0}'", line.IncludeContent); -// ThreadHelper.JoinableTaskFactory.Run(async () => -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); -// document.Undo(); -// if (!noTimeout) -// await Output.Instance.ErrorMsg("Compilation of {0} timeouted!", document.Name); -// }); - -// if (!noTimeout) -// break; -// } -// else -// { -// Output.Instance.WriteLine("Successfully removed #include: '{0}'", line.IncludeContent); -// ++numRemovedIncludes; -// } -// } -// } -// catch (Exception ex) -// { -// Output.Instance.WriteLine("Unexpected error: {0}", ex); -// } -// finally -// { -// _ = OnTrialAndErrorRemovalDone(progressDialog, document, numRemovedIncludes, canceled); -// } -// } - -// private async Task OnTrialAndErrorRemovalDone(IVsThreadedWaitDialog2 progressDialog, EnvDTE.Document document, int numRemovedIncludes, bool canceled) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// // Close Progress bar. -// progressDialog.EndWaitDialog(); - -// // Remove build hook again. -// UnsubscribeBuildEvents(); - -// // Message. -// Output.Instance.WriteLine("Removed {0} #include directives from '{1}'", numRemovedIncludes, document.Name); -// Output.Instance.OutputToForeground(); - -// // Notify that we are done. -// WorkInProgress = false; -// OnFileFinished?.Invoke(numRemovedIncludes, canceled); -// } - -// private void SubscribeBuildEvents() -// { -// ThreadHelper.ThrowIfNotOnUIThread(); -// buildEvents = VSUtils.GetDTE().Events.BuildEvents; -// buildEvents.OnBuildDone += OnBuildFinished; -// buildEvents.OnBuildProjConfigDone += OnBuildConfigFinished; -// } - -// private void UnsubscribeBuildEvents() -// { -// buildEvents.OnBuildDone -= OnBuildFinished; -// buildEvents.OnBuildProjConfigDone -= OnBuildConfigFinished; -// buildEvents = null; -// } - -// private void OnBuildFinished(vsBuildScope scope, vsBuildAction action) -// { -// //Output.Instance.WriteLine("OnBuildFinished. scope: {0}, action: {1}", scope, action); -// outputWaitEvent.Set(); -// } - -// private void OnBuildConfigFinished(string project, string projectConfig, string platform, string solutionConfig, bool success) -// { -// //Output.Instance.WriteLine("OnBuildConfigFinished. project {0}, projectConfig {1}, platform {2}, solutionConfig {3}, success {4}", project, projectConfig, platform, solutionConfig, success); -// lastBuildSuccessful = success; -// } -// } -//} \ No newline at end of file +using System; +using System.Linq; +using System.Threading; +using System.Windows; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using EnvDTE; +using Microsoft.VisualStudio.Text; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Task = System.Threading.Tasks.Task; +using Community.VisualStudio.Toolkit; +using BuildEvents = EnvDTE.BuildEvents; + +namespace IncludeToolbox +{ + /// + /// Command handler for trial and error include removal + /// + internal sealed class TrialAndErrorRemoval + { + public delegate void FinishedEvent(int numRemovedIncludes, bool canceled); + public event FinishedEvent OnFileFinished; + + public static bool WorkInProgress { get; private set; } + + private volatile bool lastBuildSuccessful; + private AutoResetEvent outputWaitEvent = new AutoResetEvent(false); + private const int timeoutMS = 600000; // 600 seconds, 10 minutes per file + + /// + /// Need to keep build events object around as long as it is used, otherwise the events may not be fired! + /// + private BuildEvents buildEvents; + + public async Task PerformTrialAndErrorIncludeRemovalAsync(EnvDTE.Document document) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var canCompile = await VSUtils.VCUtils.IsCompilableFile(document); + var settings = await TrialAndErrorRemovalOptions.GetLiveInstanceAsync(); + + if (canCompile.Result == false) + { + _ = Output.WriteLineAsync($"Can't compile file '{canCompile.Reason}': {document.Name}"); + return false; + } + + if (WorkInProgress) + { + _ = VS.MessageBox.ShowErrorAsync("Trial and error include removal already in progress!"); + return false; + } + WorkInProgress = true; + + // Start wait dialog. + IVsThreadedWaitDialog2 progressDialog = await StartProgressDialog(document.Name); + if (progressDialog == null) + return false; + + // Extract all includes. + ITextBuffer textBuffer; + Formatter.IncludeLineInfo[] includeLines; + try + { + ExtractSelectionAndIncludes(document, settings, out textBuffer, out includeLines); + } + catch (Exception ex) + { + _=Output.WriteLineAsync($"Unexpected error while extracting include selection: {ex}"); + progressDialog.EndWaitDialog(); + return false; + } + + // Hook into build events. + SubscribeBuildEvents(); + + // The rest runs in a separate thread since the compile function is non blocking and we want to use BuildEvents + // We are not using Task, since we want to make use of WaitHandles - using this together with Task is a bit more complicated to get right. + outputWaitEvent.Reset(); + var removalThread = new System.Threading.Thread(() => TrialAndErrorRemovalThreadFunc(document, settings, includeLines, progressDialog, textBuffer)); + removalThread.Start(); + return true; + } + + private async Task StartProgressDialog(string documentName) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + var dialogFactory = Package.GetGlobalService(typeof(SVsThreadedWaitDialogFactory)) as IVsThreadedWaitDialogFactory; + if (dialogFactory == null) + { + Output.WriteLine("Failed to get Dialog Factory for wait dialog."); + return null; + } + + IVsThreadedWaitDialog2 progressDialog; + dialogFactory.CreateInstance(out progressDialog); + if (progressDialog == null) + { + Output.WriteLine("Failed to get create wait dialog."); + return null; + } + string waitMessage = $"Parsing '{documentName}' ... "; + progressDialog.StartWaitDialogWithPercentageProgress( + szWaitCaption: "Include Toolbox - Running Trial & Error Include Removal", + szWaitMessage: waitMessage, + szProgressText: null, + varStatusBmpAnim: null, + szStatusBarText: "Running Trial & Error Removal - " + waitMessage, + fIsCancelable: true, + iDelayToShowDialog: 0, + iTotalSteps: 20, // Will be replaced. + iCurrentStep: 0); + + return progressDialog; + } + + private void ExtractSelectionAndIncludes(EnvDTE.Document document, TrialAndErrorRemovalOptions settings, + out ITextBuffer textBuffer, out Formatter.IncludeLineInfo[] includeLinesArray) + { + ThreadHelper.ThrowIfNotOnUIThread(); + + // Parsing. + document.Activate(); + var documentTextView = VSUtils.GetCurrentTextViewHost(); + textBuffer = documentTextView.TextView.TextBuffer; + string documentText = documentTextView.TextView.TextSnapshot.GetText(); + IEnumerable includeLines = Formatter.IncludeLineInfo.ParseIncludes(documentText, Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals | Formatter.ParseOptions.KeepOnlyValidIncludes); + + // Optionally skip top most include. + if (settings.IgnoreFirstInclude) + includeLines = includeLines.Skip(1); + + // Skip everything with preserve flag. + includeLines = includeLines.Where(x => !x.ShouldBePreserved); + + // Apply filter ignore regex. + { + string documentName = Path.GetFileNameWithoutExtension(document.FullName); + string[] ignoreRegexList = RegexUtils.FixupRegexes(settings.IgnoreList, documentName); + includeLines = includeLines.Where(line => !ignoreRegexList.Any(regexPattern => + new System.Text.RegularExpressions.Regex(regexPattern).Match(line.IncludeContent).Success)); + } + // Reverse order if necessary. + if (settings.RemovalOrder == IncludeRemovalOrder.BottomToTop) + includeLines = includeLines.Reverse(); + + includeLinesArray = includeLines.ToArray(); + } + + private void TrialAndErrorRemovalThreadFunc(EnvDTE.Document document, TrialAndErrorRemovalOptions settings, + Formatter.IncludeLineInfo[] includeLines, IVsThreadedWaitDialog2 progressDialog, ITextBuffer textBuffer) + { + int numRemovedIncludes = 0; + bool canceled = false; + + try + { + int currentProgressStep = 0; + + // For ever include line.. + foreach (Formatter.IncludeLineInfo line in includeLines) + { + // If we are working from top to bottom, the line number may have changed! + int currentLine = line.LineNumber; + if (settings.RemovalOrder == IncludeRemovalOrder.TopToBottom) + currentLine -= numRemovedIncludes; + + ThreadHelper.JoinableTaskFactory.Run(async () => + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + // Update progress. + string waitMessage = $"Removing #includes from '{document.Name}'"; + string progressText = $"Trying to remove '{line.IncludeContent}' ..."; + progressDialog.UpdateProgress( + szUpdatedWaitMessage: waitMessage, + szProgressText: progressText, + szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, + iCurrentStep: currentProgressStep + 1, + iTotalSteps: includeLines.Length + 1, + fDisableCancel: false, + pfCanceled: out canceled); + if (!canceled) + { + ++currentProgressStep; + + // Remove include + using (var edit = textBuffer.CreateEdit()) + { + if (settings.KeepLineBreaks) + edit.Delete(edit.Snapshot.Lines.ElementAt(currentLine).Extent); + else + edit.Delete(edit.Snapshot.Lines.ElementAt(currentLine).ExtentIncludingLineBreak); + edit.Apply(); + } + } + outputWaitEvent.Set(); + }); + outputWaitEvent.WaitOne(); + + if (canceled) + break; + + // Compile - In rare cases VS tells us that we are still building which should not be possible because we have received OnBuildFinished + // As a workaround we just try again a few times. + ThreadHelper.JoinableTaskFactory.Run(async () => + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + const int maxNumCompileAttempts = 3; + for (int numCompileFails = 0; numCompileFails < maxNumCompileAttempts; ++numCompileFails) + { + // TODO: This happens on the main thread. Making the whole thread thing a bit pointless!!! + try + { + await VSUtils.VCUtils.CompileSingleFile(document); + } + catch (Exception e) + { + _=Output.WriteLineAsync($"Compile Failed:\n{e}"); + + if (numCompileFails == maxNumCompileAttempts - 1) + { + document.Undo(); + throw e; + } + else + { + // Try again. + await System.Threading.Tasks.Task.Delay(100); + continue; + } + } + break; + } + }); + + // Wait till woken. + bool noTimeout = outputWaitEvent.WaitOne(timeoutMS); + + // Undo removal if compilation failed. + if (!noTimeout || !lastBuildSuccessful) + { + Output.WriteLine($"Could not remove #include: '{line.IncludeContent}'"); + ThreadHelper.JoinableTaskFactory.Run(async () => + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + document.Undo(); + if (!noTimeout) + await VS.MessageBox.ShowErrorAsync($"Compilation of {document.Name} timeouted!"); + }); + + if (!noTimeout) + break; + } + else + { + Output.WriteLine($"Successfully removed #include: '{line.IncludeContent}'"); + ++numRemovedIncludes; + } + } + } + catch (Exception ex) + { + Output.WriteLine($"Unexpected error: {ex}"); + } + finally + { + _ = OnTrialAndErrorRemovalDone(progressDialog, document, numRemovedIncludes, canceled); + } + } + + private async Task OnTrialAndErrorRemovalDone(IVsThreadedWaitDialog2 progressDialog, EnvDTE.Document document, int numRemovedIncludes, bool canceled) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + // Close Progress bar. + progressDialog.EndWaitDialog(); + + // Remove build hook again. + UnsubscribeBuildEvents(); + + // Message. + Output.WriteLine(string.Format("Removed {0} #include directives from '{1}'", numRemovedIncludes, document.Name)); + _=Output.BringForwardAsync(); + + // Notify that we are done. + WorkInProgress = false; + OnFileFinished?.Invoke(numRemovedIncludes, canceled); + } + + private void SubscribeBuildEvents() + { + ThreadHelper.ThrowIfNotOnUIThread(); + buildEvents = VCUtil.GetDTE().Events.BuildEvents; + buildEvents.OnBuildDone += OnBuildFinished; + buildEvents.OnBuildProjConfigDone += OnBuildConfigFinished; + } + + private void UnsubscribeBuildEvents() + { + buildEvents.OnBuildDone -= OnBuildFinished; + buildEvents.OnBuildProjConfigDone -= OnBuildConfigFinished; + buildEvents = null; + } + + private void OnBuildFinished(vsBuildScope scope, vsBuildAction action) + { + //Output.WriteLine("OnBuildFinished. scope: {0}, action: {1}", scope, action); + outputWaitEvent.Set(); + } + + private void OnBuildConfigFinished(string project, string projectConfig, string platform, string solutionConfig, bool success) + { + //Output.WriteLine("OnBuildConfigFinished. project {0}, projectConfig {1}, platform {2}, solutionConfig {3}, success {4}", project, projectConfig, platform, solutionConfig, success); + lastBuildSuccessful = success; + } + } +} \ No newline at end of file diff --git a/IncludeToolboxShared/Util/VCHelper.cs b/IncludeToolboxShared/Util/VCHelper.cs index d433b0d..6b82b52 100644 --- a/IncludeToolboxShared/Util/VCHelper.cs +++ b/IncludeToolboxShared/Util/VCHelper.cs @@ -1,223 +1,223 @@ -//using EnvDTE; -//using Microsoft.VisualStudio.Shell; -//using Microsoft.VisualStudio.VCProjectEngine; -//using System.Threading.Tasks; -//using Task = System.Threading.Tasks.Task; - -//namespace IncludeToolbox -//{ -// public class VCQueryFailure : System.Exception -// { -// public VCQueryFailure(string message) : base(message) -// { -// } -// } - -// public class VCHelper -// { -// public bool IsVCProject(Project project) -// { -// return project?.Object is VCProject; -// } - -// private static async Task GetVCFileConfigForCompilation(Document document) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - -// if (document == null) -// throw new VCQueryFailure("No document."); - -// var vcProject = document.ProjectItem?.ContainingProject?.Object as VCProject; -// if (vcProject == null) -// throw new VCQueryFailure("The given document does not belong to a VC++ Project."); - -// VCFile vcFile = document.ProjectItem?.Object as VCFile; -// if (vcFile == null) -// throw new VCQueryFailure("The given document is not a VC++ file."); - -// if (vcFile.FileType != eFileType.eFileTypeCppCode) -// throw new VCQueryFailure("The given document is not a compileable VC++ file."); - -// IVCCollection fileConfigCollection = vcFile.FileConfigurations as IVCCollection; -// VCFileConfiguration fileConfig = fileConfigCollection?.Item(vcProject.ActiveConfiguration.Name) as VCFileConfiguration; -// if (fileConfig == null) -// throw new VCQueryFailure("Failed to retrieve file config from document."); - -// return fileConfig; -// } - -// private static VCTool GetToolFromActiveConfiguration(Project project) where VCTool: class -// { -// ThreadHelper.ThrowIfNotOnUIThread(); - -// VCProject vcProject = project?.Object as VCProject; -// if (vcProject == null) -// throw new VCQueryFailure($"Failed to retrieve VCCLCompilerTool since project \"{project.Name}\" is not a VCProject."); - -// VCConfiguration activeConfiguration = vcProject.ActiveConfiguration; -// VCTool compilerTool = null; -// foreach (var tool in (IVCCollection)activeConfiguration.Tools) -// { -// compilerTool = tool as VCTool; -// if (compilerTool != null) -// break; -// } - -// if (compilerTool == null) -// throw new VCQueryFailure($"Couldn't find a {typeof(VCTool).Name} in active configuration of VC++ Project \"{vcProject.Name}\""); - -// return compilerTool; -// } - -// public static VCLinkerTool GetLinkerTool(Project project) -// { -// VCProject vcProject = project?.Object as VCProject; -// if (vcProject == null) -// throw new VCQueryFailure("Failed to retrieve VCLinkerTool since project is not a VCProject."); - -// VCConfiguration activeConfiguration = vcProject.ActiveConfiguration; -// var tools = activeConfiguration.Tools; -// VCLinkerTool linkerTool = null; -// foreach (var tool in (IVCCollection)activeConfiguration.Tools) -// { -// linkerTool = tool as VCLinkerTool; -// if (linkerTool != null) -// break; -// } - -// if (linkerTool == null) -// throw new VCQueryFailure("Couldn't file a VCLinkerTool in VC++ Project."); - -// return linkerTool; -// } - -// public async Task IsCompilableFile(Document document) -// { -// try -// { -// await GetVCFileConfigForCompilation(document); -// } -// catch (VCQueryFailure queryFailure) -// { -// return new BoolWithReason() -// { -// Result = false, -// Reason = queryFailure.Message, -// }; -// } - -// return new BoolWithReason() -// { -// Result = true, -// Reason = "", -// }; -// } - -// public async Task CompileSingleFile(Document document) -// { -// var fileConfig = await GetVCFileConfigForCompilation(document); -// if (fileConfig != null) -// fileConfig.Compile(true, false); // WaitOnBuild==true always fails. -// } - -// public string GetCompilerSetting_Includes(Project project) -// { -// VCQueryFailure queryFailure; -// try -// { -// VCCLCompilerTool compilerTool = GetToolFromActiveConfiguration(project); -// if (compilerTool != null) -// return compilerTool.FullIncludePath; -// else -// queryFailure = new VCQueryFailure("Unhandled error"); -// } -// catch (VCQueryFailure e) -// { -// queryFailure = e; -// } - -// // If querying the NMake tool fails, keep old reason for failure, since this is what we usually expect. Using NMake is seen as mere fallback. -// try -// { -// VCNMakeTool nmakeTool = GetToolFromActiveConfiguration(project); -// if (nmakeTool == null) -// throw queryFailure; - -// return nmakeTool.IncludeSearchPath; -// } -// catch -// { -// throw queryFailure; -// } -// } - -// public void SetCompilerSetting_ShowIncludes(Project project, bool show) -// { -// GetToolFromActiveConfiguration(project).ShowIncludes = show; -// } - -// public bool GetCompilerSetting_ShowIncludes(Project project) -// { -// return GetToolFromActiveConfiguration(project).ShowIncludes; -// } - -// public string GetCompilerSetting_PreprocessorDefinitions(Project project) -// { -// VCQueryFailure queryFailure; -// try -// { -// VCCLCompilerTool compilerTool = GetToolFromActiveConfiguration(project); -// if (compilerTool != null) -// return compilerTool.PreprocessorDefinitions.Replace("\\\"$(INHERIT)\\\";", ""); -// else -// queryFailure = new VCQueryFailure("Unhandled error"); -// } -// catch (VCQueryFailure e) -// { -// queryFailure = e; -// } - -// // If querying the NMake tool fails, keep old reason for failure, since this is what we usually expect. Using NMake is seen as mere fallback. -// try -// { -// VCNMakeTool nmakeTool = GetToolFromActiveConfiguration(project); -// if (nmakeTool == null) -// throw queryFailure; - -// return nmakeTool.PreprocessorDefinitions; -// } -// catch -// { -// throw queryFailure; -// } -// } - -// // https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.machinetypeoption.aspx -// public enum TargetMachineType -// { -// NotSet = 0, -// X86 = 1, -// AM33 = 2, -// ARM = 3, -// EBC = 4, -// IA64 = 5, -// M32R = 6, -// MIPS = 7, -// MIPS16 = 8, -// MIPSFPU = 9, -// MIPSFPU16 = 10, -// MIPSR41XX = 11, -// SH3 = 12, -// SH3DSP = 13, -// SH4 = 14, -// SH5 = 15, -// THUMB = 16, -// AMD64 = 17 -// } - -// public TargetMachineType GetLinkerSetting_TargetMachine(EnvDTE.Project project) -// { -// return (TargetMachineType)GetLinkerTool(project).TargetMachine; -// } -// } -//} +using EnvDTE; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; +using System.Threading.Tasks; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox +{ + public class VCQueryFailure : System.Exception + { + public VCQueryFailure(string message) : base(message) + { + } + } + + public class VCHelper + { + public bool IsVCProject(Project project) + { + return project?.Object is VCProject; + } + + private static async Task GetVCFileConfigForCompilation(Document document) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + if (document == null) + throw new VCQueryFailure("No document."); + + var vcProject = document.ProjectItem?.ContainingProject?.Object as VCProject; + if (vcProject == null) + throw new VCQueryFailure("The given document does not belong to a VC++ Project."); + + VCFile vcFile = document.ProjectItem?.Object as VCFile; + if (vcFile == null) + throw new VCQueryFailure("The given document is not a VC++ file."); + + if (vcFile.FileType != eFileType.eFileTypeCppCode) + throw new VCQueryFailure("The given document is not a compileable VC++ file."); + + IVCCollection fileConfigCollection = vcFile.FileConfigurations as IVCCollection; + VCFileConfiguration fileConfig = fileConfigCollection?.Item(vcProject.ActiveConfiguration.Name) as VCFileConfiguration; + if (fileConfig == null) + throw new VCQueryFailure("Failed to retrieve file config from document."); + + return fileConfig; + } + + private static VCTool GetToolFromActiveConfiguration(Project project) where VCTool : class + { + ThreadHelper.ThrowIfNotOnUIThread(); + + VCProject vcProject = project?.Object as VCProject; + if (vcProject == null) + throw new VCQueryFailure($"Failed to retrieve VCCLCompilerTool since project \"{project.Name}\" is not a VCProject."); + + VCConfiguration activeConfiguration = vcProject.ActiveConfiguration; + VCTool compilerTool = null; + foreach (var tool in (IVCCollection)activeConfiguration.Tools) + { + compilerTool = tool as VCTool; + if (compilerTool != null) + break; + } + + if (compilerTool == null) + throw new VCQueryFailure($"Couldn't find a {typeof(VCTool).Name} in active configuration of VC++ Project \"{vcProject.Name}\""); + + return compilerTool; + } + + public static VCLinkerTool GetLinkerTool(Project project) + { + VCProject vcProject = project?.Object as VCProject; + if (vcProject == null) + throw new VCQueryFailure("Failed to retrieve VCLinkerTool since project is not a VCProject."); + + VCConfiguration activeConfiguration = vcProject.ActiveConfiguration; + var tools = activeConfiguration.Tools; + VCLinkerTool linkerTool = null; + foreach (var tool in (IVCCollection)activeConfiguration.Tools) + { + linkerTool = tool as VCLinkerTool; + if (linkerTool != null) + break; + } + + if (linkerTool == null) + throw new VCQueryFailure("Couldn't file a VCLinkerTool in VC++ Project."); + + return linkerTool; + } + + public async Task IsCompilableFile(Document document) + { + try + { + await GetVCFileConfigForCompilation(document); + } + catch (VCQueryFailure queryFailure) + { + return new BoolWithReason() + { + Result = false, + Reason = queryFailure.Message, + }; + } + + return new BoolWithReason() + { + Result = true, + Reason = "", + }; + } + + public async Task CompileSingleFile(Document document) + { + var fileConfig = await GetVCFileConfigForCompilation(document); + if (fileConfig != null) + fileConfig.Compile(true, false); // WaitOnBuild==true always fails. + } + + public string GetCompilerSetting_Includes(Project project) + { + VCQueryFailure queryFailure; + try + { + VCCLCompilerTool compilerTool = GetToolFromActiveConfiguration(project); + if (compilerTool != null) + return compilerTool.FullIncludePath; + else + queryFailure = new VCQueryFailure("Unhandled error"); + } + catch (VCQueryFailure e) + { + queryFailure = e; + } + + // If querying the NMake tool fails, keep old reason for failure, since this is what we usually expect. Using NMake is seen as mere fallback. + try + { + VCNMakeTool nmakeTool = GetToolFromActiveConfiguration(project); + if (nmakeTool == null) + throw queryFailure; + + return nmakeTool.IncludeSearchPath; + } + catch + { + throw queryFailure; + } + } + + public void SetCompilerSetting_ShowIncludes(Project project, bool show) + { + GetToolFromActiveConfiguration(project).ShowIncludes = show; + } + + public bool GetCompilerSetting_ShowIncludes(Project project) + { + return GetToolFromActiveConfiguration(project).ShowIncludes; + } + + public string GetCompilerSetting_PreprocessorDefinitions(Project project) + { + VCQueryFailure queryFailure; + try + { + VCCLCompilerTool compilerTool = GetToolFromActiveConfiguration(project); + if (compilerTool != null) + return compilerTool.PreprocessorDefinitions.Replace("\\\"$(INHERIT)\\\";", ""); + else + queryFailure = new VCQueryFailure("Unhandled error"); + } + catch (VCQueryFailure e) + { + queryFailure = e; + } + + // If querying the NMake tool fails, keep old reason for failure, since this is what we usually expect. Using NMake is seen as mere fallback. + try + { + VCNMakeTool nmakeTool = GetToolFromActiveConfiguration(project); + if (nmakeTool == null) + throw queryFailure; + + return nmakeTool.PreprocessorDefinitions; + } + catch + { + throw queryFailure; + } + } + + // https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.machinetypeoption.aspx + public enum TargetMachineType + { + NotSet = 0, + X86 = 1, + AM33 = 2, + ARM = 3, + EBC = 4, + IA64 = 5, + M32R = 6, + MIPS = 7, + MIPS16 = 8, + MIPSFPU = 9, + MIPSFPU16 = 10, + MIPSR41XX = 11, + SH3 = 12, + SH3DSP = 13, + SH4 = 14, + SH5 = 15, + THUMB = 16, + AMD64 = 17 + } + + public TargetMachineType GetLinkerSetting_TargetMachine(EnvDTE.Project project) + { + return (TargetMachineType)GetLinkerTool(project).TargetMachine; + } + } +} diff --git a/IncludeToolboxShared/Util/VSUtils.cs b/IncludeToolboxShared/Util/VSUtils.cs index 6150f1f..0cdf18f 100644 --- a/IncludeToolboxShared/Util/VSUtils.cs +++ b/IncludeToolboxShared/Util/VSUtils.cs @@ -1,176 +1,159 @@ -//using System; -//using System.Collections.Generic; -//using System.IO; -//using System.Linq; -//using Microsoft.VisualStudio.Editor; -//using Microsoft.VisualStudio.Shell; -//using Microsoft.VisualStudio.Text.Editor; -//using Microsoft.VisualStudio.TextManager.Interop; -//using EnvDTE; -//using Microsoft.VisualStudio; -//using Microsoft.VisualStudio.Shell.Interop; - -//namespace IncludeToolbox -//{ -// public static class VSUtils -// { -// public static EnvDTE80.DTE2 GetDTE() -// { -// var dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2; -// if (dte == null) -// { -// throw new System.Exception("Failed to retrieve DTE2!"); -// } -// return dte; -// } - -// // Historically, the GUIDs of the COM interfaces in VCProject/VCProjectEngine would change from version to version. -// // To work around this we had several builds of VCHelpers that we could choose from, each with a different dependency. -// // With VS2019, the older versions are no longer available and we're stuck with a single version for better or worse. - -// public static VCHelper VCUtils = new VCHelper(); - -// /// -// /// Returns what the C++ macro _MSC_VER should resolve to. -// /// -// /// -// public static string GetMSCVerString() -// { -// // See http://stackoverflow.com/questions/70013/how-to-detect-if-im-compiling-code-with-visual-studio-2008 -// var dte = GetDTE(); -// var dteVersion = dte.Version; -// if (dte.Version.StartsWith("14.")) -// return "1900"; -// else if (dte.Version.StartsWith("15.")) -// return "1915"; -// else if (dte.Version.StartsWith("16.")) -// return "1920"; -// else -// throw new NotImplementedException("Unknown MSVC version!"); -// } - -// /// -// /// Tries to retrieve include directories from a project. -// /// For each encountered path it will try to resolve the paths to absolute paths. -// /// -// /// Empty list if include directory retrieval failed. -// public static List GetProjectIncludeDirectories(EnvDTE.Project project, bool endWithSeparator = true) -// { -// List pathStrings = new List(); -// if (project == null) -// return pathStrings; - -// string projectIncludeDirectories; -// try -// { -// projectIncludeDirectories = VCUtils.GetCompilerSetting_Includes(project); -// } -// catch (VCQueryFailure e) -// { -// Output.Instance.WriteLine(e.Message); -// return pathStrings; -// } - -// ThreadHelper.ThrowIfNotOnUIThread(); -// string projectPath = Path.GetDirectoryName(Path.GetFullPath(project.FileName)); - -// // According to documentation FullIncludePath has resolved macros. - -// pathStrings.AddRange(projectIncludeDirectories.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)); - -// for (int i = pathStrings.Count - 1; i >= 0; --i) -// { -// try -// { -// pathStrings[i] = pathStrings[i].Trim(); -// if (!Path.IsPathRooted(pathStrings[i])) -// { -// pathStrings[i] = Path.Combine(projectPath, pathStrings[i]); -// } -// pathStrings[i] = Utils.GetExactPathName(Path.GetFullPath(pathStrings[i])); - -// if (endWithSeparator) -// pathStrings[i] += Path.DirectorySeparatorChar; -// } -// catch -// { -// pathStrings.RemoveAt(i); -// } -// } -// return pathStrings; -// } - -// public static IWpfTextViewHost GetCurrentTextViewHost() -// { -// IVsTextManager textManager = Package.GetGlobalService(typeof (SVsTextManager)) as IVsTextManager; - -// IVsTextView textView = null; -// textManager.GetActiveView(1, null, out textView); - -// var userData = textView as IVsUserData; -// if (userData == null) -// { -// return null; -// } -// else -// { -// Guid guidViewHost = DefGuidList.guidIWpfTextViewHost; -// object holder; -// userData.GetData(ref guidViewHost, out holder); -// var viewHost = (IWpfTextViewHost) holder; - -// return viewHost; -// } -// } - -// public static EnvDTE.Window OpenFileAndShowDocument(string filePath) -// { -// ThreadHelper.ThrowIfNotOnUIThread(); - -// if (filePath == null) -// return null; - -// var dte = VSUtils.GetDTE(); -// EnvDTE.Window fileWindow = dte.ItemOperations.OpenFile(filePath); -// if (fileWindow == null) -// { -// Output.Instance.WriteLine("Failed to open File {0}", filePath); -// return null; -// } -// fileWindow.Activate(); -// fileWindow.Visible = true; - -// return fileWindow; -// } - -// public static string GetOutputText() -// { -// ThreadHelper.ThrowIfNotOnUIThread(); -// var dte = GetDTE(); -// if (dte == null) -// return ""; - - -// OutputWindowPane buildOutputPane = null; -// foreach (OutputWindowPane pane in dte.ToolWindows.OutputWindow.OutputWindowPanes) -// { -// if (pane.Guid == VSConstants.OutputWindowPaneGuid.BuildOutputPane_string) -// { -// buildOutputPane = pane; -// break; -// } -// } -// if (buildOutputPane == null) -// { -// _ = Output.Instance.ErrorMsg("Failed to query for build output pane!"); -// return null; -// } -// TextSelection sel = buildOutputPane.TextDocument.Selection; - -// sel.StartOfDocument(false); -// sel.EndOfDocument(true); - -// return sel.Text; -// } -// } -//} +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Microsoft.VisualStudio.Editor; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Text.Editor; +using Microsoft.VisualStudio.TextManager.Interop; +using EnvDTE; +using Microsoft.VisualStudio; +using Microsoft.VisualStudio.Shell.Interop; +using Community.VisualStudio.Toolkit; +using OutputWindowPane = EnvDTE.OutputWindowPane; + +namespace IncludeToolbox +{ + public static class VSUtils + { + public static EnvDTE80.DTE2 GetDTE() + { + var dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2; + if (dte == null) + { + throw new System.Exception("Failed to retrieve DTE2!"); + } + return dte; + } + + // Historically, the GUIDs of the COM interfaces in VCProject/VCProjectEngine would change from version to version. + // To work around this we had several builds of VCHelpers that we could choose from, each with a different dependency. + // With VS2019, the older versions are no longer available and we're stuck with a single version for better or worse. + + public static VCHelper VCUtils = new VCHelper(); + + /// + /// Tries to retrieve include directories from a project. + /// For each encountered path it will try to resolve the paths to absolute paths. + /// + /// Empty list if include directory retrieval failed. + public static List GetProjectIncludeDirectories(EnvDTE.Project project, bool endWithSeparator = true) + { + List pathStrings = new List(); + if (project == null) + return pathStrings; + + string projectIncludeDirectories; + try + { + projectIncludeDirectories = VCUtils.GetCompilerSetting_Includes(project); + } + catch (VCQueryFailure e) + { + Output.WriteLine(e.Message); + return pathStrings; + } + + ThreadHelper.ThrowIfNotOnUIThread(); + string projectPath = Path.GetDirectoryName(Path.GetFullPath(project.FileName)); + + // According to documentation FullIncludePath has resolved macros. + + pathStrings.AddRange(projectIncludeDirectories.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); + + for (int i = pathStrings.Count - 1; i >= 0; --i) + { + try + { + pathStrings[i] = pathStrings[i].Trim(); + if (!Path.IsPathRooted(pathStrings[i])) + { + pathStrings[i] = Path.Combine(projectPath, pathStrings[i]); + } + pathStrings[i] = Utils.GetExactPathName(Path.GetFullPath(pathStrings[i])); + + if (endWithSeparator) + pathStrings[i] += Path.DirectorySeparatorChar; + } + catch + { + pathStrings.RemoveAt(i); + } + } + return pathStrings; + } + + public static IWpfTextViewHost GetCurrentTextViewHost() + { + IVsTextManager textManager = Package.GetGlobalService(typeof(SVsTextManager)) as IVsTextManager; + + IVsTextView textView = null; + textManager.GetActiveView(1, null, out textView); + + var userData = textView as IVsUserData; + if (userData == null) + { + return null; + } + else + { + Guid guidViewHost = DefGuidList.guidIWpfTextViewHost; + object holder; + userData.GetData(ref guidViewHost, out holder); + var viewHost = (IWpfTextViewHost)holder; + + return viewHost; + } + } + + public static EnvDTE.Window OpenFileAndShowDocument(string filePath) + { + ThreadHelper.ThrowIfNotOnUIThread(); + + if (filePath == null) + return null; + + var dte = VSUtils.GetDTE(); + EnvDTE.Window fileWindow = dte.ItemOperations.OpenFile(filePath); + if (fileWindow == null) + { + Output.WriteLine($"Failed to open File {filePath}"); + return null; + } + fileWindow.Activate(); + fileWindow.Visible = true; + + return fileWindow; + } + + public static string GetOutputText() + { + ThreadHelper.ThrowIfNotOnUIThread(); + var dte = GetDTE(); + if (dte == null) + return ""; + + + OutputWindowPane buildOutputPane = null; + foreach (OutputWindowPane pane in dte.ToolWindows.OutputWindow.OutputWindowPanes) + { + if (pane.Guid == VSConstants.OutputWindowPaneGuid.BuildOutputPane_string) + { + buildOutputPane = pane; + break; + } + } + if (buildOutputPane == null) + { + _ = VS.MessageBox.ShowErrorAsync("Failed to query for build output pane!"); + return null; + } + TextSelection sel = buildOutputPane.TextDocument.Selection; + + sel.StartOfDocument(false); + sel.EndOfDocument(true); + + return sel.Text; + } + } +} From 25dafd37308705f3f9404b7e368b273f12502a28 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 15 Jul 2022 18:11:32 +0200 Subject: [PATCH 08/86] Cleanup, ready for merge --- IncludeToolBox.sln | 52 +++---- IncludeToolbox.vsix | 3 - IncludeToolbox/IncludeToolbox.csproj | 102 ------------- IncludeToolbox/Package/Key.snk | Bin 596 -> 0 bytes IncludeToolbox/Package/VSPackage.resx | 138 ------------------ .../Package/source.extension.vsixmanifest | 29 ---- IncludeToolbox/Properties/AssemblyInfo.cs | 33 ----- .../IncludeToolbox2019.csproj | 82 ++++++----- IncludeToolbox2019/Monikers.imagemanifest | 73 +++++++++ IncludeToolbox2019/MyImageIds.cs | 34 +++++ IncludeToolbox2019/MyImageIds.vsct | 23 +++ .../Properties/AssemblyInfo.cs | 0 .../Resources/IncludeFormatterIcons.png | Bin 0 -> 910 bytes .../Resources/IncludeFormatterIcons_0.png | Bin 0 -> 407 bytes .../Resources/IncludeFormatterIcons_1.png | Bin 0 -> 384 bytes .../Resources/IncludeFormatterIcons_2.png | Bin 0 -> 403 bytes .../Resources/IncludeFormatterIcons_3.png | Bin 0 -> 518 bytes .../Resources/IncludeFormatterPackage.png | Bin 0 -> 2042 bytes .../Resources/IncludeGraphToolbarIcons.png | Bin 0 -> 586 bytes .../Resources/IncludeGraphToolbarIcons_0.png | Bin 0 -> 397 bytes .../Resources/IncludeGraphToolbarIcons_1.png | Bin 0 -> 246 bytes IncludeToolbox2019/Resources/hash.png | Bin 0 -> 675 bytes IncludeToolbox2019/VSCommandTable.cs | 38 +++++ IncludeToolbox2019/VSCommandTable.vsct | 89 +++++++++++ .../source.extension.cs | 4 +- .../source.extension.vsixmanifest | 7 +- IncludeToolbox2022/VSCommandTable.cs | 5 +- IncludeToolbox2022/VSCommandTable.vsct | 40 ++--- .../source.extension.vsixmanifest | 1 - IncludeToolboxShared/IncludeToolboxPackage.cs | 2 +- Tests/Tests.csproj | 6 +- 31 files changed, 353 insertions(+), 408 deletions(-) delete mode 100644 IncludeToolbox.vsix delete mode 100644 IncludeToolbox/IncludeToolbox.csproj delete mode 100644 IncludeToolbox/Package/Key.snk delete mode 100644 IncludeToolbox/Package/VSPackage.resx delete mode 100644 IncludeToolbox/Package/source.extension.vsixmanifest delete mode 100644 IncludeToolbox/Properties/AssemblyInfo.cs rename IncludeToolbox16/IncludeToolbox16.csproj => IncludeToolbox2019/IncludeToolbox2019.csproj (73%) create mode 100644 IncludeToolbox2019/Monikers.imagemanifest create mode 100644 IncludeToolbox2019/MyImageIds.cs create mode 100644 IncludeToolbox2019/MyImageIds.vsct rename {IncludeToolbox16 => IncludeToolbox2019}/Properties/AssemblyInfo.cs (100%) create mode 100644 IncludeToolbox2019/Resources/IncludeFormatterIcons.png create mode 100644 IncludeToolbox2019/Resources/IncludeFormatterIcons_0.png create mode 100644 IncludeToolbox2019/Resources/IncludeFormatterIcons_1.png create mode 100644 IncludeToolbox2019/Resources/IncludeFormatterIcons_2.png create mode 100644 IncludeToolbox2019/Resources/IncludeFormatterIcons_3.png create mode 100644 IncludeToolbox2019/Resources/IncludeFormatterPackage.png create mode 100644 IncludeToolbox2019/Resources/IncludeGraphToolbarIcons.png create mode 100644 IncludeToolbox2019/Resources/IncludeGraphToolbarIcons_0.png create mode 100644 IncludeToolbox2019/Resources/IncludeGraphToolbarIcons_1.png create mode 100644 IncludeToolbox2019/Resources/hash.png create mode 100644 IncludeToolbox2019/VSCommandTable.cs create mode 100644 IncludeToolbox2019/VSCommandTable.vsct rename {IncludeToolbox16 => IncludeToolbox2019}/source.extension.cs (84%) rename {IncludeToolbox16 => IncludeToolbox2019}/source.extension.vsixmanifest (71%) diff --git a/IncludeToolBox.sln b/IncludeToolBox.sln index 0fc15d6..b8cf73e 100644 --- a/IncludeToolBox.sln +++ b/IncludeToolBox.sln @@ -1,33 +1,22 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32708.82 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32630.194 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{F577F5D2-5E3C-43BE-9030-AF2609A0917A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedItems", "SharedItems", "{C64DE41F-331D-4FA6-B82D-BDC49107449A}" - ProjectSection(SolutionItems) = preProject - SharedItems\CommandDefinitions.vsct = SharedItems\CommandDefinitions.vsct - EndProjectSection -EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IncludeToolboxShared", "IncludeToolboxShared\IncludeToolboxShared.shproj", "{C50C4863-6200-4E51-837A-31FEBC09C8B2}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{0FB00D40-06A5-43BC-8898-5EB876CD8F33}" - ProjectSection(SolutionItems) = preProject - SharedItems\Resources\hash.png = SharedItems\Resources\hash.png - SharedItems\Resources\include13.png = SharedItems\Resources\include13.png - SharedItems\Resources\include16.png = SharedItems\Resources\include16.png - SharedItems\Resources\IncludeFormatterIcons.pdn = SharedItems\Resources\IncludeFormatterIcons.pdn - SharedItems\Resources\IncludeFormatterIcons.png = SharedItems\Resources\IncludeFormatterIcons.png - SharedItems\Resources\IncludeFormatterPackage.png = SharedItems\Resources\IncludeFormatterPackage.png - SharedItems\Resources\IncludeGraphToolbarIcons.png = SharedItems\Resources\IncludeGraphToolbarIcons.png - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox16", "IncludeToolbox16\IncludeToolbox16.csproj", "{F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2022", "IncludeToolbox2022\IncludeToolbox2022.csproj", "{7D29CECE-07D3-4417-9D63-1362852F18F3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2019", "IncludeToolbox2019\IncludeToolbox2019.csproj", "{A81A5332-6A20-4F3B-90B4-E55985B9CF59}" +EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + IncludeToolboxShared\IncludeToolboxShared.projitems*{7d29cece-07d3-4417-9d63-1362852f18f3}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{a81a5332-6a20-4f3b-90b4-e55985b9cf59}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 @@ -43,14 +32,6 @@ Global {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|Any CPU.Build.0 = Release|Any CPU {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|x86.ActiveCfg = Release|Any CPU {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|x86.Build.0 = Release|Any CPU - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|x86.ActiveCfg = Debug|x86 - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Debug|x86.Build.0 = Debug|x86 - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|Any CPU.Build.0 = Release|Any CPU - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|x86.ActiveCfg = Release|x86 - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8}.Release|x86.Build.0 = Release|x86 {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|x86.ActiveCfg = Debug|x86 @@ -59,18 +40,19 @@ Global {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|Any CPU.Build.0 = Release|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|x86.ActiveCfg = Release|x86 {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|x86.Build.0 = Release|x86 + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|x86.ActiveCfg = Debug|x86 + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|x86.Build.0 = Debug|x86 + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|Any CPU.Build.0 = Release|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|x86.ActiveCfg = Release|x86 + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {0FB00D40-06A5-43BC-8898-5EB876CD8F33} = {C64DE41F-331D-4FA6-B82D-BDC49107449A} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {87A2994A-8E27-4066-8C05-7E4DD461D23D} EndGlobalSection - GlobalSection(SharedMSBuildProjectFiles) = preSolution - IncludeToolboxShared\IncludeToolboxShared.projitems*{7d29cece-07d3-4417-9d63-1362852f18f3}*SharedItemsImports = 4 - IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 - EndGlobalSection EndGlobal diff --git a/IncludeToolbox.vsix b/IncludeToolbox.vsix deleted file mode 100644 index d2b1839..0000000 --- a/IncludeToolbox.vsix +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1fd22f5f5024fc61a39a1e22090b59da3a1914b9cbddf4bd484f55f20cfe3df -size 178659 diff --git a/IncludeToolbox/IncludeToolbox.csproj b/IncludeToolbox/IncludeToolbox.csproj deleted file mode 100644 index 35d74c9..0000000 --- a/IncludeToolbox/IncludeToolbox.csproj +++ /dev/null @@ -1,102 +0,0 @@ - - - - 16.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - Debug - AnyCPU - 2.0 - {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {F9E250C6-A7AD-4888-8F17-6876736B8DCF} - Library - Properties - IncludeToolbox - IncludeToolbox - v4.8 - true - true - true - false - false - true - true - Program - $(DevEnvDir)devenv.exe - /rootsuffix Exp - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - False - - - VSTHRD200 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - Designer - - - - - - - - - - - - - - - - - - compile; build; native; contentfiles; analyzers; buildtransitive - - - 17.2.32505.173 - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - - - copy "$(TargetDir)IncludeToolbox.vsix" "$(SolutionDir)IncludeToolbox.vsix" - - - \ No newline at end of file diff --git a/IncludeToolbox/Package/Key.snk b/IncludeToolbox/Package/Key.snk deleted file mode 100644 index f4625de40336d63e70d85da9ba64534ce41c137b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097*Y2yhuJ&+)CO`< zsGBw=a6x-iQUti;&Q~u(!gS;}B}~6#*n7=pPyZW0&q0UB#Wk8j(k6{Y{jxoX z)w$r=z~$c-v{5ye!3n1u!uNJr1C|ZRho?$PiI0aM1fajZSB&N3nu%WIBmf0g z1?$1z`!N$v8cMOjasD_L8-zvC3hthkzbh8H-a_H+5tvSQp~P+#K3G2U2nFVMrs9S5 zn->JqK0@NL*J*7}daL$TRZM*6x*B}7Zagnpt)~0c)!YllGg~uE0$xlZEVmlv1};9{ zohxH_{NGNVy6p0Fgq4my$ZA_`8mavHJbiE0>vne`!H*lKy42M~yI=-OY%i4};;#KD{gyCKq#*;Cv+{LHY3X=3* iR(Yq-a7y-+95`FOR0_)*(q{b~V1zP=K@9HY6pb6vHziE~ diff --git a/IncludeToolbox/Package/VSPackage.resx b/IncludeToolbox/Package/VSPackage.resx deleted file mode 100644 index 04a830f..0000000 --- a/IncludeToolbox/Package/VSPackage.resx +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - IncludeToolbox Extension - - - Tools around C/C++ #includes - - - \ No newline at end of file diff --git a/IncludeToolbox/Package/source.extension.vsixmanifest b/IncludeToolbox/Package/source.extension.vsixmanifest deleted file mode 100644 index 5ef82bd..0000000 --- a/IncludeToolbox/Package/source.extension.vsixmanifest +++ /dev/null @@ -1,29 +0,0 @@ - - - - - IncludeToolbox - Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. - license.txt - Resources\IncludeFormatterPackage.png - Resources\IncludeFormatterPackage.png - Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal - - - - - amd64 - - - - - - - - - - - - - - diff --git a/IncludeToolbox/Properties/AssemblyInfo.cs b/IncludeToolbox/Properties/AssemblyInfo.cs deleted file mode 100644 index e6839c2..0000000 --- a/IncludeToolbox/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IncludeToolbox")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("IncludeToolbox")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/IncludeToolbox16/IncludeToolbox16.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj similarity index 73% rename from IncludeToolbox16/IncludeToolbox16.csproj rename to IncludeToolbox2019/IncludeToolbox2019.csproj index 178a158..ba2436d 100644 --- a/IncludeToolbox16/IncludeToolbox16.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -3,7 +3,6 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) latest - @@ -11,11 +10,11 @@ AnyCPU 2.0 {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {F7C3930F-A0C8-419C-8980-CAF98CCAD2F8} + {A81A5332-6A20-4F3B-90B4-E55985B9CF59} Library Properties IncludeToolbox - IncludeToolbox16 + IncludeToolbox2019 v4.8 true true @@ -44,14 +43,12 @@ TRACE prompt 4 - False - - CommandDefinitions.cs + True True - CommandDefinitions.vsct + MyImageIds.vsct @@ -61,6 +58,37 @@ + + Menus.ctmenu + VsctGenerator + VSCommandTable.cs + + + True + True + VSCommandTable.vsct + + + + + VsctGenerator + MyImageIds.cs + + + + + + + + + + License.txt + true + Always + + + true + Designer VsixManifestGenerator @@ -72,47 +100,29 @@ - 16.0.451 + + + 17.2.32505.173 + runtime; build; native; contentfiles; analyzers; buildtransitive all - - License.txt - Always - true - - - CommandDefinitions.vsct - VsctGenerator - CommandDefinitions.cs - - - Resources\include13.png - true - - - Resources\include16.png - true - - - Resources\IncludeFormatterIcons.png - true - - - Resources\IncludeFormatterPackage.png - true + + + + + + + Always - - - Resources\IncludeGraphToolbarIcons.png true diff --git a/IncludeToolbox2019/Monikers.imagemanifest b/IncludeToolbox2019/Monikers.imagemanifest new file mode 100644 index 0000000..e1f4591 --- /dev/null +++ b/IncludeToolbox2019/Monikers.imagemanifest @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IncludeToolbox2019/MyImageIds.cs b/IncludeToolbox2019/MyImageIds.cs new file mode 100644 index 0000000..20fa28f --- /dev/null +++ b/IncludeToolbox2019/MyImageIds.cs @@ -0,0 +1,34 @@ +// ------------------------------------------------------------------------------ +// +// This file was generated by VSIX Synchronizer +// +// ------------------------------------------------------------------------------ +namespace IncludeToolbox +{ + using System; + + /// + /// Helper class that exposes all GUIDs used across VS Package. + /// + internal sealed partial class PackageGuids + { + public const string MonikersGuidString = "36358583-08b5-4870-b61e-13efcebfd341"; + public static Guid MonikersGuid = new Guid(MonikersGuidString); + } + /// + /// Helper class that encapsulates all CommandIDs uses across VS Package. + /// + internal sealed partial class PackageIds + { + public const int hash = 0x000C; + public const int IncludeFormatterIcons_0 = 0x0001; + public const int IncludeFormatterIcons_1 = 0x0002; + public const int IncludeFormatterIcons_2 = 0x0003; + public const int IncludeFormatterIcons_3 = 0x0004; + public const int IncludeFormatterPackage = 0x0005; + public const int IncludeGraphToolbarIcons_0 = 0x0006; + public const int IncludeGraphToolbarIcons_1 = 0x0007; + public const int IncludeFormatterIcons = 0x0000; + public const int IncludeGraphToolbarIcons = 0x0001; + } +} \ No newline at end of file diff --git a/IncludeToolbox2019/MyImageIds.vsct b/IncludeToolbox2019/MyImageIds.vsct new file mode 100644 index 0000000..ee9a3a5 --- /dev/null +++ b/IncludeToolbox2019/MyImageIds.vsct @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IncludeToolbox16/Properties/AssemblyInfo.cs b/IncludeToolbox2019/Properties/AssemblyInfo.cs similarity index 100% rename from IncludeToolbox16/Properties/AssemblyInfo.cs rename to IncludeToolbox2019/Properties/AssemblyInfo.cs diff --git a/IncludeToolbox2019/Resources/IncludeFormatterIcons.png b/IncludeToolbox2019/Resources/IncludeFormatterIcons.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5a3015625fad5d4c361f945acb369beb0baae2 GIT binary patch literal 910 zcmV;919AL`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Rb0|gTR zI&y;lTL1t68FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0_#acK~z{r z#g;!yn^6?T9Xhtqp;ITP(lMXm1;IGPC?+5%(kh69I`|31qC=%skKrEa2km;j{I2uCLB0dcvN7tB23lGmqM+fCi(V zNxfc|m6erP8?XSeV_EffBX(@m=a19>PyyY`?(VM4&d$pE`ns_f78WF*&r7*nmW_=K z<6{AL0K}eCPsZtgr~oMx3UYdS8reRm%c7s2o_=6p5#%I=N|A7@PIV^mv^tcAU3WZ+BAKm(U8@Tt7eA5U|`UF z1#=)C6@X)Vds~*5m(7JSH#cVz;ODoGm3zeO0pj$&=0O(y!NGx73qnnz9+x2w1F@?g z*Rr&GgVehhCxpY!1y8AjSdW^sbFun{o9dNnfkg zOusk;tau%;Y8?02WK07_~`gZY;ih7oW~1E>CZN{QuA4b8eivXyYS1saV{iqk?Dn{G;IZOtilo k4nbG**UE;vAP6S@0)P9(eZ%zOPyhe`07*qoM6N<$f}9GrdjJ3c literal 0 HcmV?d00001 diff --git a/IncludeToolbox2019/Resources/IncludeFormatterIcons_0.png b/IncludeToolbox2019/Resources/IncludeFormatterIcons_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1620c388b69b1b2a57cbfc0d22ddbbf6734c8b07 GIT binary patch literal 407 zcmV;I0cie-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0W3*GK~y+TrI0;t zgfI|Bw@8^oq)eGJSfYS}KLH)0L{yxChEs5lT!Ai>D)CbPk=L)dhS@NTl`?V= z@TR7M0$xLwWnftr#BnUL=Xs#(Is`!gNs@>)65yQj2Bv93S(Y-ZI0y*d zT=A5)Z9i`tB}Gx-@Ehle=5_+!c<#Dx)imvk*Y70w7)Alsd7h(W;JioyZX}wf0o%4^ zCIQu3$xeWcG)*B4L-Ama9$&$D>IX`1j29=C$+ zA2|qa5_vLZ8pK+81NPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ToF^K~y+Tosd6j zg+LI8Em9_sQ-qvD5Y)ndsGV4fm1poMIYq8uX(@=LR)p{rG)2f{Mly@5`yNS(kDcGl z&Zn%V>-xU|08KeqmIWA9W^M`I@%$Rc@uJF%Qh=Aewr%Gi2rgK^QjfB2+bd^A65vq$ zW?k2irs>s8C81g*ddM5!Dd%NQ}P*s)4rfEuoBVeLgPpo>;zyYLTJ2 ea`0OKK>G&%3{2WxP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0VqjCK~y+TrI0^r zgg_LBw@8^lP7!hrK~M|-p>|>^R-R!i&k=0AL9SqFDTt(2#IOn)NZ6M*vNO!+ECf<~ zy!qbD`#H`@QIvlnZ7$0K6q)k~LcxQdSg*q{Tx8B82muet1mEPI|-*!&s^F z@Pq7{RaHS0MR%Pb4ZsTL^BFA5f;f&h_dE}DU56kDAW4#~cL)Fg;RdE@LRpr~HBA$o za0sB_=88S&y6y|t&wHnX6d?c)y!L&+s;c^f>knl6T2T~Ntl!irEP!veZ40(-Gk<$| zl0x=`0IZOvDTHCTJ(%M-kY$;4m~aT7_`VNyT{F+~9L8~E&cgz3|Nk)0^Y&oVG?6!W x+&ekDhXve1So+@ggA_J=57`ipwE1_G(=SJzCLPjcEmQyi002ovPDHLkV1lPPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0h>ugK~y+TrBbnK z!cY|L(6K{@PMsV(`V9dG9W;sxf+DSgI8+C}KrAku@(2DwMn9pBj*3WyYCwskNl-hK z-rn&lc7eVA#^^Ur(`lo#bS|~ z&8Emn1N22skWQy*G#V*gDwSwDohlvR_Q*hj3kRICUavoxUqf4#MTTLB(;TY*s82W~eRSR#YyRrNQ9DK%!76&}1@Ey3^@UyM``FW*GejZy*1^Y>tQPvQLpP&;%2XPPirwG)=qs24cLV`xuA!)&Kwi07*qo IM6N<$f(0|;ZU6uP literal 0 HcmV?d00001 diff --git a/IncludeToolbox2019/Resources/IncludeFormatterPackage.png b/IncludeToolbox2019/Resources/IncludeFormatterPackage.png new file mode 100644 index 0000000000000000000000000000000000000000..042d01be3aafef2dc20a5ce0fb52d8a5305a09d7 GIT binary patch literal 2042 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Rb0~r7i z77jOb=Kufz8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh2Ukf%K~#8N z?OT0lRb?FZBgDRmpg@w6g8u0bqX>$G(m9+=QkIIt=5Vt$2sS8`O~+KG7CKfAKS(2U zLm4`zPQ^?%b@&<7{Mf|W2NYuB+`9YF`E^gvZ~V^7?>(N~_uO{eJ7W(#+`Dt0=h^fA z?zy|?o_jZ97!L`K_1&-t&A1!ouckk)x>1o1k6>gVRb*J%Rh1aQhj4eis=}v1I51Wm{3!@nHn}>ad`VxXr@P{VoWabdR@>@ZAUh!2L>S z3UNQ~;XYKL$g|$ku}BM|1+ZNK`%1jpSVYbbY_$uNnIwy?U%%d2vu2I6W5*7suCC5$ zZ*SL%gWVX~D7GtL`w^)Nkh6rXc7aFYb6ITOym`*#$&(cu8X9D2;%T;O!1n7>XUf6T zA&ISafdPEymg?x}aHdR|qDoJlI@Rgy?9_^ro~;VlHcn~+=8R*zU7*Zqx739T7gT9t zT3VV`nn*_sTNUWhl$roJ*V$?p^jt=nZnxO}{rk1zOP4P77AH<(y8^Z?k(vNGN7!l? z_-p=}EVg;`X015=EcX-XRfFvcI4a7eCO}RJTkQhHQ)IFH{CutW!Gi~7X*&E{*{T8i z&P$ysht3(;Y8P103R!Ia{P|k(ix)3y#i6fes{)RQG1z`b>H_4v#df>EBeBOV6^TTg zgoFfDn*NH@Uvp3KBDN|ZW1`fUa*%NsLmSI>yFi&1w-~)nyQPV#si~^8;2gFpU;qoG zCO}RDTkRqmjXr|`MBQSC4js~p=jG*ji#xr&y|1%f0U5(n;`R0QzB&`b%AsNKvVwsOenCM<=jn-wiCXa+H*WZ9 zV==58;-C)T(xppU>A7>~`sz#!D~CAX0p#T51m?np3$@}iX3X%_nK+P~ef#!>I{;ba zQQ+3CTZacA`wtIbpaVE_=1d@-JbAM3ij6FD{P=NSZ7dEnr?s^;+yMk-Q&W>xdiLzu zzB&`b%5gbp1E{H~(TeBh=KAVP3@gVa))U_uAsKL5N}uX%1CPdFll(>7w{O>qmz0!f zMWFx3<9B&a>H_4{d;GCj%gYKMcr&t57Aq<$(u!ABR(gv+@Bv0wSJw+tLp0@pFSFe) zu%J3wY|)}cTJf`I&&tv?fLyjJU;qhHLp0=cu+=W`c6KDnMBHLnoHKp;bglT+t5;=l zdM=q+t zXJ>20Pn|lY_Ayi0szBR38dJ_?w%SEB8hw%;4YwFwy^-hcbp77@89qJQY*#?W*HRN8 zXE$5J2c7+aeis%WAc}t~N;!>ig#{tK|CYr|OG|xqCWe(W=mRJyDA0=U-MiOU zXJS}610DcfRFoGPO-xQs){19jWccb#97s;61MnV-j{=7WFg$<|2SD%0{4O^7arNre zT9LxSLSLPU1I-C_0P%3;%9UF2s;Vkqorz)P5C?StnVFedaqm^2pbRUAh_%H3-C?}F zO^1;#g!)}rbXo8DMNU#ul2-iMwQF+!J>gZvz7AKzI#W)Q^qUCJ0$x_Qz>qTBQpA>) z7OiwjN{ZUY{Ee*|Q1VZyGvz=(ldX1vGT+K#wY9Zcaqsne6fa||0^ZL*CpAP<4&LOv z%67XznOa$_tgK8cUR+$P6$ig$s{*}a^Jq*topb?~?RJ4O?V^~oYSk*O_^w^MWO2HF zm&jHH92GfILyVOJ{Ry_(1E^Uyr-Gx?W_v0v7bW)DUCkV2GR8Y8NPy zEK3u;*YB@fxgz)f%~lQA{)^D`F;)%+md#eXzyR`P>9)2utu%e136Hqi5B|hf1w5BW zV?o#zSI&EEw+j^CDM~rb&CPu$FVm(?>nl#*>5==PU&mGj`gW+)5M$*aBMLmtcDq2K z2Dg|bj*Py~^Us|-=iQ#hRt0RIBQ=tKIT%1QTkQge?pTz$D+`;51x;kT0y2vHwEYno zd)R6heDd-QSOaQbXZ0f%dIz2{Y*)bck3o7WH3S(bG%MITw18qS;n7J3^KridWgBrT zzvOV9rTv1Bs<)9rr`L3bNhev_c?R~UuzctPf2FlK=n! literal 0 HcmV?d00001 diff --git a/IncludeToolbox2019/Resources/IncludeGraphToolbarIcons.png b/IncludeToolbox2019/Resources/IncludeGraphToolbarIcons.png new file mode 100644 index 0000000000000000000000000000000000000000..8a857ba71b8f8407d47454d418e049a93712193d GIT binary patch literal 586 zcmV-Q0=4~#P)@{rIJvH|Re@E`1LktuKe-I)JV%Hl7~a@Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0U}96K~y+Tjgp~q zgfI|>?@{^)eS{l4GiPxKJk_XE*bbhVO5_PVXcPv2cmxi+-7k}L0_56?Z%B6c|HE!_ z5s{Z{+jb4beS$$itcWs(@{V8-oIzDpn5@cssO}U1ExuckL{TJpp3AZ<7^TPB-G)40`v=2$h@tnx0vcqej>LuLgElsdBTqE3v-}KAAp6w4!?k z_F-9Fd(=>SG63${T^}dWFStJ=XWzqH&_EL@L*vd7_z<%L-94tA0cZikTf454x~>hZ riIF?j?>0Wxh$jsvp(7alKXUm7S}pgbA46lF00000NkvXXu0mjfRji^p literal 0 HcmV?d00001 diff --git a/IncludeToolbox2019/Resources/IncludeGraphToolbarIcons_1.png b/IncludeToolbox2019/Resources/IncludeGraphToolbarIcons_1.png new file mode 100644 index 0000000000000000000000000000000000000000..dea3f17279e63420b8e97722e2199a5f3d4c3026 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!ER3%#}EtuwG+k!a nXKQUl45Ac@!xwBUKEV8^{oA2k(-wsSoyFkk>gTe~DWM4ft58+S literal 0 HcmV?d00001 diff --git a/IncludeToolbox2019/Resources/hash.png b/IncludeToolbox2019/Resources/hash.png new file mode 100644 index 0000000000000000000000000000000000000000..33218b4040d08b339ba19d6b6df3b03f84b46419 GIT binary patch literal 675 zcmV;U0$lxxP)dH?_b8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10x(HL zK~y-6jgi4?6G0foUy_Z@2J4}5>CR+{&FG;Z=pkFoMK6Ws5F|<4LqX6>!T+H25^wr{ zL?Z}V#6#>wdI&w}AqSBfve^>iCbK(P+e-_jD`7mPgwjOcX}$;FkN3U-uFzmGxIS$j zSExBRmkUQC;c?U6+^pV+$2$+pWfK6Z)v8Yj`MSKk{P;3J(M|KsET!7GdE0gI`}kM| z0LO9Et*xz_>+9>MS0zwRh4?W%KM#!zIWrUg83Ye*scIhp6h&c<<6v=d@%yA2007r@ zwRXGxvejz6%VaXrw(XD2X7iP0S?@EMjI=E4L#NYuF%59HR4Pfvn2g0@k})P3V=|pi zOI1}RV@z&uZwC_rzVFX+&e!(#_P(sHu1eQ+pK{LEYPDK@V`D>d&Y$%A{lewFi|cEe zc0wuLX|-CaVHjtGkk^#b9ox3!l+qJQ>Dy#7`Dr3xtjdC>Y2IiSLZozE=aZ6O0D8S% zVlWu!LI}+;jGho;-uHd#d0rx!Ogch{`GbRlYnK5R-&d(ry1To(sr~(Zn5KzXECv9m z*Xzh;v(R-N<#IVs2>Cn?P)3hbD)nt;WhH1d8h47tq7wwcv7#umjYfkN3WZ7le*^&CZuj}p(vtK%FZ<6M06@FlzL!WOFdPmK0l>1X`-BikDG&b( z03emm=l>Xn;Q~N38Z~mc+!-OnpBjB6DP_d-y!80&y6(cXoxfVT@%MI3n9TqH002ov JPDHLkV1iD;Ht7HW literal 0 HcmV?d00001 diff --git a/IncludeToolbox2019/VSCommandTable.cs b/IncludeToolbox2019/VSCommandTable.cs new file mode 100644 index 0000000..7317e67 --- /dev/null +++ b/IncludeToolbox2019/VSCommandTable.cs @@ -0,0 +1,38 @@ +// ------------------------------------------------------------------------------ +// +// This file was generated by VSIX Synchronizer +// +// ------------------------------------------------------------------------------ +namespace IncludeToolbox +{ + using System; + + /// + /// Helper class that exposes all GUIDs used across VS Package. + /// + internal sealed partial class PackageGuids + { + public const string IncludeToolboxString = "7473f721-f6c8-4e39-98c2-e08d79a89525"; + public static Guid IncludeToolbox = new Guid(IncludeToolboxString); + + public const string GHeaderOnlyString = "a34e853e-8679-4a07-918e-982a1b3b0a6b"; + public static Guid GHeaderOnly = new Guid(GHeaderOnlyString); + + public const string GOnlyVCString = "1175290a-3e8f-4718-868c-c08b5d2b09a7"; + public static Guid GOnlyVC = new Guid(GOnlyVCString); + + public const string GOnlyCppString = "bf397895-9307-431f-a823-1c85d430243a"; + public static Guid GOnlyCpp = new Guid(GOnlyCppString); + } + /// + /// Helper class that encapsulates all CommandIDs uses across VS Package. + /// + internal sealed partial class PackageIds + { + public const int ContextMenuGroup = 0x0001; + public const int IncludeWhatYouUseId = 0x0100; + public const int FormatIncludesId = 0x0101; + public const int TrialAndError = 0x0102; + public const int ProjectWideTrialAndErrorRemoval = 0x0110; + } +} \ No newline at end of file diff --git a/IncludeToolbox2019/VSCommandTable.vsct b/IncludeToolbox2019/VSCommandTable.vsct new file mode 100644 index 0000000..27217f2 --- /dev/null +++ b/IncludeToolbox2019/VSCommandTable.vsct @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IncludeToolbox16/source.extension.cs b/IncludeToolbox2019/source.extension.cs similarity index 84% rename from IncludeToolbox16/source.extension.cs rename to IncludeToolbox2019/source.extension.cs index 93745fb..2881206 100644 --- a/IncludeToolbox16/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -7,11 +7,11 @@ namespace IncludeToolbox { internal sealed partial class Vsix { - public const string Id = "IncludeToolbox16.075c2e2b-7b71-45ba-b2e6-c1dadc81cfac"; + public const string Id = "IncludeToolbox2019.1431faa5-aa04-47af-8289-9d887e0696a4"; public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.0.0"; + public const string Version = "1.0"; public const string Author = "Ilya Doroshenko"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox16/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest similarity index 71% rename from IncludeToolbox16/source.extension.vsixmanifest rename to IncludeToolbox2019/source.extension.vsixmanifest index 3c9f858..2e9dbec 100644 --- a/IncludeToolbox16/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,13 +1,13 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox License.txt - IncludeFormatterPackage.png - IncludeFormatterPackage.png + Resources\IncludeFormatterPackage.png + Resources\IncludeFormatterPackage.png Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal @@ -17,5 +17,6 @@ + diff --git a/IncludeToolbox2022/VSCommandTable.cs b/IncludeToolbox2022/VSCommandTable.cs index af4da5b..401728b 100644 --- a/IncludeToolbox2022/VSCommandTable.cs +++ b/IncludeToolbox2022/VSCommandTable.cs @@ -12,8 +12,8 @@ namespace IncludeToolbox /// internal sealed partial class PackageGuids { - public const string IncludeToolbox2022String = "2e77f2e4-5f04-4052-8e63-ca2b41cd0315"; - public static Guid IncludeToolbox2022 = new Guid(IncludeToolbox2022String); + public const string IncludeToolboxString = "2e77f2e4-5f04-4052-8e63-ca2b41cd0315"; + public static Guid IncludeToolbox = new Guid(IncludeToolboxString); public const string GHeaderOnlyString = "a34e853e-8679-4a07-918e-982a1b3b0a6b"; public static Guid GHeaderOnly = new Guid(GHeaderOnlyString); @@ -33,5 +33,6 @@ internal sealed partial class PackageIds public const int IncludeWhatYouUseId = 0x0100; public const int FormatIncludesId = 0x0101; public const int TrialAndError = 0x0102; + public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index b8a8bab..c1a4314 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -7,9 +7,9 @@ - + - + @@ -17,69 +17,69 @@ - - - - + - - + + - - - + + + - + - + diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index f7d5713..cf0810b 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -9,7 +9,6 @@ Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal - true diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index fdb9d11..765c981 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -11,7 +11,7 @@ namespace IncludeToolbox [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)] [ProvideMenuResource("Menus.ctmenu", 1)] - [Guid(PackageGuids.IncludeToolbox2022String)] + [Guid(PackageGuids.IncludeToolboxString)] [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionOpening_string, PackageAutoLoadFlags.BackgroundLoad)] [ProvideOptionPage(typeof(OptionsProvider.FormatterOptionsPage), "Include Toolbox", "Include Format", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.TrialAndErrorRemovalOptionsPage), "Include Toolbox", "Trial and Error", 0, 0, true, SupportsProfiles = true)] diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index e1955b9..20876e2 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -104,9 +104,9 @@ - - {f0b1e969-bb7f-435f-b49e-e2e5018793ee} - IncludeToolbox17 + + {7d29cece-07d3-4417-9d63-1362852f18f3} + IncludeToolbox2022 From 7ed751343d92586f677b3c34eb6e4ce39236ff7e Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 15 Jul 2022 18:15:21 +0200 Subject: [PATCH 09/86] updated readme --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e07fb76..85225d8 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ -**Project inactive, looking for maintainer!** - # IncludeToolbox Visual Studio extension for managing C/C++ includes: * **Format & Sort:** Format include commands to cleanup large lists of includes according to your preferences * **Purge:** Integrates [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use) and comes with simpler but more reliable _Trial and Error Removal_ tool * **Explore:** _Include Graph_ tool window shows the tree of includes for a given file + +# Plans: +[ ] Refactor modules to use Community SDK +[ ] Add map generator for IWYU +[ ] Repair Graph window +[ ] Add support for preprocessor directives +[ ] Make automatic publishing pipelines +[x] Make pipeline for IWYU and maps +[ ] bugfixes... More information and download on the [Visual Studio Extension Gallery page](https://visualstudiogallery.msdn.microsoft.com/28c36d4f-425a-4bfe-9449-03f07b35f7b0) From a8c52bb417b2ea8713513d5a30fd388f844d79f8 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 15 Jul 2022 18:18:03 +0200 Subject: [PATCH 10/86] version --- IncludeToolbox2019/IncludeToolbox2019.csproj | 14 ++++++++------ IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/IncludeToolbox2019/IncludeToolbox2019.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj index ba2436d..b4bb6fa 100644 --- a/IncludeToolbox2019/IncludeToolbox2019.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -46,9 +46,9 @@ - True - True MyImageIds.vsct + True + True @@ -70,10 +70,6 @@ - - VsctGenerator - MyImageIds.cs - @@ -126,6 +122,12 @@ true + + + VsctGenerator + MyImageIds.cs + + diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 2881206..4d97228 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "1.0"; + public const string Version = "3.0.0"; public const string Author = "Ilya Doroshenko"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 2e9dbec..0942688 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox From 0cb73ee24fc063538accf425f8365856fdc50268 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 15 Jul 2022 19:25:36 +0200 Subject: [PATCH 11/86] fix for property value --- IncludeToolboxShared/Options/IWYUOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IncludeToolboxShared/Options/IWYUOptions.cs b/IncludeToolboxShared/Options/IWYUOptions.cs index 8efd85e..fad4fc5 100644 --- a/IncludeToolboxShared/Options/IWYUOptions.cs +++ b/IncludeToolboxShared/Options/IWYUOptions.cs @@ -27,7 +27,7 @@ public class IWYUOptions : BaseOptionModel string[] iwyu_options = new string[] { }; [Browsable(false)] - public bool Dirty { get; private set; } + public bool Dirty { get; private set; } = true; [Category("General")] [DisplayName("IWYU Executable")] From 9780175c85dabc75d0ff7ef5c4861a30d22c18d4 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sat, 16 Jul 2022 15:26:57 +0200 Subject: [PATCH 12/86] Fixed substitution added options for smart and cheap substitution Fixed commentary option Added a class for smart formatting, allowing substitution extension --- IncludeToolbox2019/IncludeToolbox2019.csproj | 2 + IncludeToolbox2022/IncludeToolbox2022.csproj | 5 +- IncludeToolbox2022/source.extension.cs | 2 +- .../source.extension.vsixmanifest | 2 +- IncludeToolboxShared/Commands/RunIWYU.cs | 2 +- IncludeToolboxShared/IWYU/IWYU.cs | 93 +++-------- IncludeToolboxShared/IWYU/IWYUApply.cs | 149 ++++++++++++++++++ .../IncludeToolboxShared.projitems | 1 + IncludeToolboxShared/Options/IWYUOptions.cs | 25 ++- IncludeToolboxShared/Util/VCUtil.cs | 4 +- 10 files changed, 203 insertions(+), 82 deletions(-) create mode 100644 IncludeToolboxShared/IWYU/IWYUApply.cs diff --git a/IncludeToolbox2019/IncludeToolbox2019.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj index b4bb6fa..208dfb0 100644 --- a/IncludeToolbox2019/IncludeToolbox2019.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -35,6 +35,7 @@ DEBUG;TRACE prompt 4 + False pdbonly @@ -43,6 +44,7 @@ TRACE prompt 4 + False diff --git a/IncludeToolbox2022/IncludeToolbox2022.csproj b/IncludeToolbox2022/IncludeToolbox2022.csproj index e8fcc1c..dd08d61 100644 --- a/IncludeToolbox2022/IncludeToolbox2022.csproj +++ b/IncludeToolbox2022/IncludeToolbox2022.csproj @@ -87,9 +87,10 @@ - + Always - + true + Designer diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 8026a33..e4f19ce 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "1.0"; + public const string Version = "3.0.0"; public const string Author = "Ilya Doroshenko"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index cf0810b..2ad6909 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index 69acfd2..9fb82a5 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -167,7 +167,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) if (dialog.EndWaitDialog() || result == false) return; - await proc.ApplyAsync(); + await proc.ApplyAsync(settings); } } } diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index 54f9fd7..186ac57 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -5,8 +5,11 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Runtime; +using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; +using static System.Net.Mime.MediaTypeNames; using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse @@ -19,10 +22,11 @@ internal class IWYU string support_path = ""; string support_cpp_path = ""; - readonly string match = "The full include-list for "; - readonly Regex include = new("#include ([<\"].*[>\"])"); - readonly Regex include_from_file = new("#include(?:(?:\\/\\*.*\\*\\/)|[^\\S\\r\\n])*([<\\\"].*[>\\\"])"); - readonly Regex commentary = new("(?:\\/\\*(?:.|\\r|\\n)*?\\*\\/)|(?:\\/\\/.*?\\n)"); + static readonly string match = "The full include-list for "; + static readonly Regex include = new("#include ([<\"].*[>\"])"); + static readonly Regex include_from_file = new("#include(?:(?:\\/\\*.*\\*\\/)|[^\\S\\r\\n])*([<\\\"].*[>\\\"])"); + static readonly Regex commentary = new("(?:\\/\\*(?:.|\\r|\\n)*?\\*\\/)|(?:\\/\\/.*?\\n)"); + public IWYU() @@ -48,13 +52,6 @@ public void BuildCommandLine(IWYUOptions settings) process.StartInfo.FileName = settings.Executable; List args = new(); - - switch (settings.Comms) - { - case Comment.Always: args.Add("--update_comments"); break; - case Comment.Never: args.Add("--no_comments"); break; - case Comment.Default: break; - } args.Add(string.Format("--verbose={0}", settings.Verbosity)); if (settings.Precompiled || settings.IgnoreHeader) @@ -81,50 +78,9 @@ public void BuildCommandLine(IWYUOptions settings) settings.ClearFlag(); } - /// - /// Heavy function for include detection. - /// Inlcude may be inside the commentary or between multiline comms, - /// so the detection should be correctly defined. - /// Still Does not count for prepro - /// - /// - /// Dictionary of valid includes - Dictionary> ParseIncludes(ITextSnapshot snap, out int first_pos) - { - first_pos = 0; - var text = snap.GetText(); - int begin = text.IndexOf("#include"); - int end = text.LastIndexOf("#include"); - end = text.IndexOf('\n', end); - text = text.Substring(begin, end - begin); //optimized - - // Get all commentary spans - var comms = commentary.Matches(text).Cast().Select(s => - { var a = s.Captures[0]; return new Span(a.Index, a.Length); }); - - // gather all the includes, that are not commented! - var includes = include_from_file.Matches(text).Cast() - .Where(s => !comms.Any(sp => sp.Contains(s.Captures[0].Index))) - .Select(s => - { - var a = s.Groups[0]; - return new KeyValuePair(s.Groups[1].Value, new Span(a.Index, a.Length)); - }); - - if (includes.Count() != 0) - first_pos = includes.First().Value.Start; - var dict = new Dictionary>(); - foreach (var inc in includes) - { - if (!dict.ContainsKey(inc.Key)) - dict[inc.Key] = new List(); - dict[inc.Key].Add(inc.Value); - } - return dict; - } - public async Task ApplyAsync() + public async Task ApplyAsync(IWYUOptions settings) { if (output == "") return; @@ -133,33 +89,30 @@ public async Task ApplyAsync() int pos = output.IndexOf(match); if (pos == -1) return; - var tasks = output.Substring(0, pos) - .Split('\n').Select(l => l.Trim()); - pos = pos + match.Length; string part = output.Substring(pos); + + int endp = part.IndexOf("---"); string path = part.Substring(0, part.IndexOf(':', 3)); var doc = await VS.Documents.OpenAsync(path); var edit = doc.TextBuffer.CreateEdit(); - var dict = ParseIncludes(doc.TextBuffer.CurrentSnapshot, out int start); - - foreach (var task in tasks) + if (settings.Sub == Substitution.Cheap) { - if (task.StartsWith("- #include")) - { - var rem = include.Match(task).Groups[1].Value; - edit.Delete(dict[rem].First()); - dict[rem].RemoveAt(0); - } - if (task.StartsWith("#include")) - { - edit.Insert(start, task); - } + int endl = part.IndexOf("\n"); + IWYUApply.ApplyCheap(edit, part.Substring(endl, endp - endl), settings.Comms != Comment.No); } + else + { + var tasks = output.Substring(0, pos) + .Split('\n').Select(l => l.Trim()); + IWYUApply.ParseTasks(tasks, settings.Comms != Comment.No) + .Apply(edit); + } + edit.Apply(); - output = part.Substring(part.IndexOf("---")); + output = part.Substring(endp); } } diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs new file mode 100644 index 0000000..197b378 --- /dev/null +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -0,0 +1,149 @@ +using Microsoft.VisualStudio.Text; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace IncludeToolbox +{ + internal static class IWYUApply + { + static readonly Regex pragma = new("#pragma\\s+once"); + static readonly Regex remove = new Regex(@"^-\s+(.+)\s+\/\/ lines (\d+)-(\d+)$"); + public struct AddTask + { + public AddTask(string Info, bool inc = true) + { + this.inc = inc; + this.Info = Info; + } + public bool inc; + public string Info; + } + public struct RemoveTask + { + public bool inc; + public string Info; + public Span LineRange; + + public RemoveTask(bool inc, string Info, Span LineRange) : this() + { + this.inc = inc; + this.Info = Info; + this.LineRange = LineRange; + } + } + public struct ApplyTasks + { + public List add; + public List rem; + + public ApplyTasks(List add, List rem) + { + this.add = add; + this.rem = rem; + rem.Sort((a, b) => { return b.LineRange.Start.CompareTo(a.LineRange.Start); }); + } + public void Apply(ITextEdit edit) + { + int start_pos = 0; + var lines = edit.Snapshot.Lines; + foreach (var line in lines) + { + string text = line.GetText(); + var match = pragma.Match(text); + if (match.Success) + start_pos = match.Index + line.End; + var i = text.IndexOf("#include"); + if (i >= 0) + { + start_pos = i + line.Start; + break; + } + } + + foreach (var (r, l) in from r in rem + let l = lines.Skip(r.LineRange.Start).Take(r.LineRange.Length + 1) + select (r, l)) + { + var first = l.First(); + if (r.inc) + { + int begin = first.Start + first.GetTextIncludingLineBreak().IndexOf("#include"); + edit.Delete(begin, first.End - begin); + } + else + edit.Delete(first.Start, first.End - first.Start); + } + foreach (var a in add) + { + // later namespace parse + edit.Insert(start_pos, a.Info + GetLineBreak(edit)); + } + } + } + + public static string GetLineBreak(ITextEdit edit) + { + return edit.Snapshot.Lines.ElementAt(0).GetLineBreakText(); + } + public static void ApplyCheap(ITextEdit edit, string result, bool commentary) + { + if(!commentary) + { + var lb = edit.Snapshot.Lines.ElementAt(0).GetLineBreakText(); + lb = string.IsNullOrEmpty(lb) ? "\r\n" : lb; + result = string.Join(lb, result.Split('\n') + .Select(s => + { + var str = s.Trim(); + var idx = str.IndexOf("//"); + if (idx >= 0) + return str.Substring(0, idx); + return str; + }).ToArray()); + } + + int[] line = new int[2]; + var lines = edit.Snapshot.GetText(); + line[0] = lines.IndexOf("#include"); //first + line[1] = lines.IndexOf("\n",lines.LastIndexOf("#include")) - line[0]; //last + edit.Replace(line[0], line[1], result); + } + + public static ApplyTasks ParseTasks(IEnumerable tasks, bool commentary) + { + List add = new(); + List rem = new(); + for (int i = 0; i < tasks.Count();i++) + { + var task = tasks.ElementAt(i); + if (task.EndsWith(" should add these lines:")) + { + while (true) + { + task = tasks.ElementAt(++i); + if (string.IsNullOrEmpty(task)) break; + add.Add(new AddTask(commentary ? task : task.Substring(0, task.IndexOf("//")), + inc: task.StartsWith("#include"))); + } + } + if (task.EndsWith(" should remove these lines:")) + { + while (true) + { + task = tasks.ElementAt(++i); + if (string.IsNullOrEmpty(task)) break; + var match = remove.Match(task); + + rem.Add(new RemoveTask(inc: task.StartsWith("- #include"), + Info: match.Groups[1].Value, + LineRange: Span.FromBounds(start:int.Parse(match.Groups[2].Value) - 1, end:int.Parse(match.Groups[3].Value) - 1) //starts from 0 + )); + } + } + } + return new ApplyTasks(add, rem); + } + } +} diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index 4d5f26d..3b132a2 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -18,6 +18,7 @@ + diff --git a/IncludeToolboxShared/Options/IWYUOptions.cs b/IncludeToolboxShared/Options/IWYUOptions.cs index fad4fc5..a694017 100644 --- a/IncludeToolboxShared/Options/IWYUOptions.cs +++ b/IncludeToolboxShared/Options/IWYUOptions.cs @@ -14,7 +14,8 @@ public class IWYUOptionsPage : BaseOptionPage { } public class IWYUOptions : BaseOptionModel { string exe = ""; - Comment comm = Comment.Default; + Comment comm = Comment.Yes; + Substitution subs = Substitution.Cheap; uint verbose = 2; bool pch = false; bool nodefault = false; @@ -27,6 +28,7 @@ public class IWYUOptions : BaseOptionModel string[] iwyu_options = new string[] { }; [Browsable(false)] + [DefaultValue(true)] public bool Dirty { get; private set; } = true; [Category("General")] @@ -46,7 +48,7 @@ public string Executable [Category("General")] [DisplayName("Print Commentaries")] [Description("Tells IWYU to show or hide individual commentaries to headers.")] - [DefaultValue(Comment.Default)] + [DefaultValue(Comment.Yes)] [TypeConverter(typeof(EnumConverter))] public Comment Comms { get { return comm; } set { Dirty = true; comm = value; } } @@ -86,6 +88,13 @@ public string Executable [DefaultValue(false)] public bool AlwaysRebuid { get { return always; } set { Dirty = true; always = value; } } + [Category("General")] + [DisplayName("Substitution Mode")] + [Description("Choose the model of substitution for headers. If includes are scattered across the file, the mode is precise. Cheap is used when includes are a block before any code. If used wrong, Cheap may remove code between first and the last include.")] + [TypeConverter(typeof(EnumConverter))] + public Substitution Sub { get { return subs; } set { subs = value; Dirty = true; } } + + [Category("Options")] [DisplayName("IWYU options")] [Description("IWYU launch options, that determine the flow of include-what-you-use.")] @@ -108,6 +117,8 @@ public string Executable [DefaultValue(false)] public bool IgnoreHeader { get { return header; } set { header = value; Dirty = true; } } + + public void ClearFlag() { Dirty = false; @@ -116,8 +127,12 @@ public void ClearFlag() public enum Comment { - Default, - Always, - Never + Yes, + No + } + public enum Substitution + { + Cheap, + Precise } } diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs index 376d61c..eeb538f 100644 --- a/IncludeToolboxShared/Util/VCUtil.cs +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -42,7 +42,7 @@ public static async Task> GetIncludeDirsAsync() var cl = cfg?.Rules; if (cl == null) { VS.MessageBox.ShowErrorAsync("IWYU Error:", "Failed to gather Compiler info.").FireAndForget(); return null; } var com = (IVCRulePropertyStorage2)cl.Item("CL"); - return com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories") + return com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories").Replace('\\','/') .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)); } @@ -65,7 +65,7 @@ public static async Task GetCommandLineAsync(bool rebuild) var com = (IVCRulePropertyStorage2)cl.Item("CL"); var xstandard = com.GetEvaluatedPropertyValue("LanguageStandard"); - var includes = com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories") + var includes = com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories").Replace('\\', '/') .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)) .Select(x => "-I\"" + x + '\"'); var defs = com.GetEvaluatedPropertyValue("PreprocessorDefinitions") From 026b03fdd07d89157f5b546c443fa493f9744dc9 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Tue, 19 Jul 2022 15:44:24 +0200 Subject: [PATCH 13/86] added formatting option after IWYU --- IncludeToolboxShared/Commands/RunIWYU.cs | 4 +-- IncludeToolboxShared/IWYU/IWYU.cs | 35 ++++++++++++--------- IncludeToolboxShared/IWYU/IWYUApply.cs | 24 ++++++++++---- IncludeToolboxShared/Options/IWYUOptions.cs | 9 ++++-- 4 files changed, 47 insertions(+), 25 deletions(-) diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index 9fb82a5..2b58e05 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -121,8 +121,8 @@ public void MoveHeader(DocumentView view) if (!match.Success) return; var edit = buf.CreateEdit(); _ = edit.Delete(new(match.Index, match.Length)); - /// TODO: remove, replace with format - edit.Insert(begin, $"#include <{match.Groups[1].Value}>\n"); + + edit.Insert(begin, match.Value + IWYUApply.GetLineBreak(edit)); edit.Apply(); } diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index 186ac57..5de2308 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -5,28 +5,20 @@ using System.Diagnostics; using System.IO; using System.Linq; -using System.Runtime; -using System.Text; -using System.Text.RegularExpressions; using System.Threading.Tasks; -using static System.Net.Mime.MediaTypeNames; using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse { internal class IWYU { - Process process = new Process(); + Process process = new(); string output = ""; string command_line = ""; string support_path = ""; string support_cpp_path = ""; static readonly string match = "The full include-list for "; - static readonly Regex include = new("#include ([<\"].*[>\"])"); - static readonly Regex include_from_file = new("#include(?:(?:\\/\\*.*\\*\\/)|[^\\S\\r\\n])*([<\\\"].*[>\\\"])"); - static readonly Regex commentary = new("(?:\\/\\*(?:.|\\r|\\n)*?\\*\\/)|(?:\\/\\/.*?\\n)"); - public IWYU() @@ -80,6 +72,15 @@ public void BuildCommandLine(IWYUOptions settings) + async Task Format(DocumentView doc) + { + using var xedit = doc.TextBuffer.CreateEdit(); + var text = xedit.Snapshot.GetText(); + var span = IWYUApply.GetIncludeSpan(text); + var result = await IWYUApply.PreformatAsync(new SnapshotSpan(xedit.Snapshot, span).GetText(), doc.FilePath); + xedit.Replace(span, result); + xedit.Apply(); + } public async Task ApplyAsync(IWYUOptions settings) { if (output == "") return; @@ -89,29 +90,33 @@ public async Task ApplyAsync(IWYUOptions settings) int pos = output.IndexOf(match); if (pos == -1) return; - pos = pos + match.Length; + pos += match.Length; string part = output.Substring(pos); int endp = part.IndexOf("---"); string path = part.Substring(0, part.IndexOf(':', 3)); var doc = await VS.Documents.OpenAsync(path); - var edit = doc.TextBuffer.CreateEdit(); + using var edit = doc.TextBuffer.CreateEdit(); if (settings.Sub == Substitution.Cheap) { int endl = part.IndexOf("\n"); - IWYUApply.ApplyCheap(edit, part.Substring(endl, endp - endl), settings.Comms != Comment.No); + string result = part.Substring(endl, endp - endl); + IWYUApply.ApplyCheap(edit, + result, + settings.Comms != Comment.No); } else { var tasks = output.Substring(0, pos) .Split('\n').Select(l => l.Trim()); - IWYUApply.ParseTasks(tasks, settings.Comms != Comment.No) - .Apply(edit); - } + IWYUApply.ParseTasks(tasks, settings.Comms != Comment.No).Apply(edit); + } edit.Apply(); + + if (settings.Format) await Format(doc); output = part.Substring(endp); } } diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 197b378..d4f314e 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; +using static System.Net.Mime.MediaTypeNames; namespace IncludeToolbox { @@ -44,6 +45,7 @@ public ApplyTasks(List add, List rem) this.rem = rem; rem.Sort((a, b) => { return b.LineRange.Start.CompareTo(a.LineRange.Start); }); } + public void Apply(ITextEdit edit) { int start_pos = 0; @@ -83,6 +85,14 @@ public void Apply(ITextEdit edit) } } + public static Span GetIncludeSpan(string text) + { + int[] line = new int[2]; + line[0] = text.IndexOf("#include"); //first + line[1] = text.IndexOf("\n", text.LastIndexOf("#include")) - line[0]; //last + return new Span(line[0], line[1]); + } + public static string GetLineBreak(ITextEdit edit) { return edit.Snapshot.Lines.ElementAt(0).GetLineBreakText(); @@ -99,16 +109,18 @@ public static void ApplyCheap(ITextEdit edit, string result, bool commentary) var str = s.Trim(); var idx = str.IndexOf("//"); if (idx >= 0) - return str.Substring(0, idx); + return str.Substring(0, idx).Trim(); return str; }).ToArray()); } + var span = GetIncludeSpan(edit.Snapshot.GetText()); + edit.Replace(span, result); + } - int[] line = new int[2]; - var lines = edit.Snapshot.GetText(); - line[0] = lines.IndexOf("#include"); //first - line[1] = lines.IndexOf("\n",lines.LastIndexOf("#include")) - line[0]; //last - edit.Replace(line[0], line[1], result); + public static async Task PreformatAsync(string text, string file) + { + var include_directories = await VCUtil.GetIncludeDirsAsync(); + return Formatter.IncludeFormatter.FormatIncludes(text, file, include_directories, await FormatOptions.GetLiveInstanceAsync()); } public static ApplyTasks ParseTasks(IEnumerable tasks, bool commentary) diff --git a/IncludeToolboxShared/Options/IWYUOptions.cs b/IncludeToolboxShared/Options/IWYUOptions.cs index a694017..f73d8f2 100644 --- a/IncludeToolboxShared/Options/IWYUOptions.cs +++ b/IncludeToolboxShared/Options/IWYUOptions.cs @@ -23,6 +23,7 @@ public class IWYUOptions : BaseOptionModel bool warn = false; bool always = false; bool header = false; + bool format = false; string mapping = ""; string[] clang_options = new string[] { }; string[] iwyu_options = new string[] { }; @@ -116,8 +117,12 @@ public string Executable [Description("Ignores header of specified .cpp. Tries to find same-named .h in the includes. If it succeeds, the header is moved to the beginning and it is treated as precompiled. Useful when .h file is already refactored.")] [DefaultValue(false)] public bool IgnoreHeader { get { return header; } set { header = value; Dirty = true; } } - - + + [Category("Options")] + [DisplayName("Format After")] + [Description("Uses formatting tool after results of IWYU are applied.")] + [DefaultValue(false)] + public bool Format { get => format; set { format = value; Dirty = true; } } public void ClearFlag() { From c41b8c322f8e7f597ffd8427f67693827a266fd4 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 21 Jul 2022 01:22:06 +0200 Subject: [PATCH 14/86] added selection IWYU for project context menu --- IncludeToolbox2022/VSCommandTable.cs | 2 + IncludeToolbox2022/VSCommandTable.vsct | 17 +++ IncludeToolboxShared/Commands/RunIWYU.cs | 15 +-- .../Commands/RunIWYUProject.cs | 117 ++++++++++++++++++ .../Commands/TrialAndErrorRemoval_Project.cs | 6 +- IncludeToolboxShared/IWYU/IWYU.cs | 25 +++- .../IncludeToolboxShared.projitems | 1 + IncludeToolboxShared/Util/VCUtil.cs | 52 +++++--- 8 files changed, 199 insertions(+), 36 deletions(-) create mode 100644 IncludeToolboxShared/Commands/RunIWYUProject.cs diff --git a/IncludeToolbox2022/VSCommandTable.cs b/IncludeToolbox2022/VSCommandTable.cs index 401728b..22e61a9 100644 --- a/IncludeToolbox2022/VSCommandTable.cs +++ b/IncludeToolbox2022/VSCommandTable.cs @@ -30,9 +30,11 @@ internal sealed partial class PackageGuids internal sealed partial class PackageIds { public const int ContextMenuGroup = 0x0001; + public const int ItemContextGroup = 0x021A; public const int IncludeWhatYouUseId = 0x0100; public const int FormatIncludesId = 0x0101; public const int TrialAndError = 0x0102; + public const int IWYUProjId = 0x0103; public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index c1a4314..3b610de 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -9,6 +9,9 @@ + + + @@ -50,6 +53,18 @@ + + + + + + + + + + - + @@ -75,9 +120,16 @@ + + + + + + + diff --git a/IncludeToolbox2022/VSCommandTable.cs b/IncludeToolbox2022/VSCommandTable.cs index 22e61a9..9ddcc3f 100644 --- a/IncludeToolbox2022/VSCommandTable.cs +++ b/IncludeToolbox2022/VSCommandTable.cs @@ -30,11 +30,14 @@ internal sealed partial class PackageGuids internal sealed partial class PackageIds { public const int ContextMenuGroup = 0x0001; + public const int MapMenuGroup = 0x0002; public const int ItemContextGroup = 0x021A; public const int IncludeWhatYouUseId = 0x0100; public const int FormatIncludesId = 0x0101; public const int TrialAndError = 0x0102; public const int IWYUProjId = 0x0103; + public const int GenMap = 0x0104; + public const int RemMap = 0x0105; public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index 2b83c5c..1fe5e33 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -12,7 +12,10 @@ - + + + + @@ -53,7 +56,32 @@ .IncludeToolbox.TrialAndError + + + + + - - - - - - - - - - - - - - - - - - - - - - - DropDown Combo: - Graph Retrieval Method - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SharedItems/Resources/IncludeFormatterIcons.pdn b/SharedItems/Resources/IncludeFormatterIcons.pdn deleted file mode 100644 index 4619200ce71f14b06b468f16a3e603dbf5e44648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5603 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 HfY$gA_ikIc diff --git a/SharedItems/Resources/IncludeFormatterIcons.png b/SharedItems/Resources/IncludeFormatterIcons.png deleted file mode 100644 index 1b5a3015625fad5d4c361f945acb369beb0baae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmV;919AL`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Rb0|gTR zI&y;lTL1t68FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0_#acK~z{r z#g;!yn^6?T9Xhtqp;ITP(lMXm1;IGPC?+5%(kh69I`|31qC=%skKrEa2km;j{I2uCLB0dcvN7tB23lGmqM+fCi(V zNxfc|m6erP8?XSeV_EffBX(@m=a19>PyyY`?(VM4&d$pE`ns_f78WF*&r7*nmW_=K z<6{AL0K}eCPsZtgr~oMx3UYdS8reRm%c7s2o_=6p5#%I=N|A7@PIV^mv^tcAU3WZ+BAKm(U8@Tt7eA5U|`UF z1#=)C6@X)Vds~*5m(7JSH#cVz;ODoGm3zeO0pj$&=0O(y!NGx73qnnz9+x2w1F@?g z*Rr&GgVehhCxpY!1y8AjSdW^sbFun{o9dNnfkg zOusk;tau%;Y8?02WK07_~`gZY;ih7oW~1E>CZN{QuA4b8eivXyYS1saV{iqk?Dn{G;IZOtilo k4nbG**UE;vAP6S@0)P9(eZ%zOPyhe`07*qoM6N<$f}9GrdjJ3c diff --git a/SharedItems/Resources/IncludeFormatterPackage.png b/SharedItems/Resources/IncludeFormatterPackage.png deleted file mode 100644 index 042d01be3aafef2dc20a5ce0fb52d8a5305a09d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Rb0~r7i z77jOb=Kufz8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh2Ukf%K~#8N z?OT0lRb?FZBgDRmpg@w6g8u0bqX>$G(m9+=QkIIt=5Vt$2sS8`O~+KG7CKfAKS(2U zLm4`zPQ^?%b@&<7{Mf|W2NYuB+`9YF`E^gvZ~V^7?>(N~_uO{eJ7W(#+`Dt0=h^fA z?zy|?o_jZ97!L`K_1&-t&A1!ouckk)x>1o1k6>gVRb*J%Rh1aQhj4eis=}v1I51Wm{3!@nHn}>ad`VxXr@P{VoWabdR@>@ZAUh!2L>S z3UNQ~;XYKL$g|$ku}BM|1+ZNK`%1jpSVYbbY_$uNnIwy?U%%d2vu2I6W5*7suCC5$ zZ*SL%gWVX~D7GtL`w^)Nkh6rXc7aFYb6ITOym`*#$&(cu8X9D2;%T;O!1n7>XUf6T zA&ISafdPEymg?x}aHdR|qDoJlI@Rgy?9_^ro~;VlHcn~+=8R*zU7*Zqx739T7gT9t zT3VV`nn*_sTNUWhl$roJ*V$?p^jt=nZnxO}{rk1zOP4P77AH<(y8^Z?k(vNGN7!l? z_-p=}EVg;`X015=EcX-XRfFvcI4a7eCO}RJTkQhHQ)IFH{CutW!Gi~7X*&E{*{T8i z&P$ysht3(;Y8P103R!Ia{P|k(ix)3y#i6fes{)RQG1z`b>H_4v#df>EBeBOV6^TTg zgoFfDn*NH@Uvp3KBDN|ZW1`fUa*%NsLmSI>yFi&1w-~)nyQPV#si~^8;2gFpU;qoG zCO}RDTkRqmjXr|`MBQSC4js~p=jG*ji#xr&y|1%f0U5(n;`R0QzB&`b%AsNKvVwsOenCM<=jn-wiCXa+H*WZ9 zV==58;-C)T(xppU>A7>~`sz#!D~CAX0p#T51m?np3$@}iX3X%_nK+P~ef#!>I{;ba zQQ+3CTZacA`wtIbpaVE_=1d@-JbAM3ij6FD{P=NSZ7dEnr?s^;+yMk-Q&W>xdiLzu zzB&`b%5gbp1E{H~(TeBh=KAVP3@gVa))U_uAsKL5N}uX%1CPdFll(>7w{O>qmz0!f zMWFx3<9B&a>H_4{d;GCj%gYKMcr&t57Aq<$(u!ABR(gv+@Bv0wSJw+tLp0@pFSFe) zu%J3wY|)}cTJf`I&&tv?fLyjJU;qhHLp0=cu+=W`c6KDnMBHLnoHKp;bglT+t5;=l zdM=q+t zXJ>20Pn|lY_Ayi0szBR38dJ_?w%SEB8hw%;4YwFwy^-hcbp77@89qJQY*#?W*HRN8 zXE$5J2c7+aeis%WAc}t~N;!>ig#{tK|CYr|OG|xqCWe(W=mRJyDA0=U-MiOU zXJS}610DcfRFoGPO-xQs){19jWccb#97s;61MnV-j{=7WFg$<|2SD%0{4O^7arNre zT9LxSLSLPU1I-C_0P%3;%9UF2s;Vkqorz)P5C?StnVFedaqm^2pbRUAh_%H3-C?}F zO^1;#g!)}rbXo8DMNU#ul2-iMwQF+!J>gZvz7AKzI#W)Q^qUCJ0$x_Qz>qTBQpA>) z7OiwjN{ZUY{Ee*|Q1VZyGvz=(ldX1vGT+K#wY9Zcaqsne6fa||0^ZL*CpAP<4&LOv z%67XznOa$_tgK8cUR+$P6$ig$s{*}a^Jq*topb?~?RJ4O?V^~oYSk*O_^w^MWO2HF zm&jHH92GfILyVOJ{Ry_(1E^Uyr-Gx?W_v0v7bW)DUCkV2GR8Y8NPy zEK3u;*YB@fxgz)f%~lQA{)^D`F;)%+md#eXzyR`P>9)2utu%e136Hqi5B|hf1w5BW zV?o#zSI&EEw+j^CDM~rb&CPu$FVm(?>nl#*>5==PU&mGj`gW+)5M$*aBMLmtcDq2K z2Dg|bj*Py~^Us|-=iQ#hRt0RIBQ=tKIT%1QTkQge?pTz$D+`;51x;kT0y2vHwEYno zd)R6heDd-QSOaQbXZ0f%dIz2{Y*)bck3o7WH3S(bG%MITw18qS;n7J3^KridWgBrT zzvOV9rTv1Bs<)9rr`L3bNhev_c?R~UuzctPf2FlK=n! diff --git a/SharedItems/Resources/IncludeGraphToolbarIcons.png b/SharedItems/Resources/IncludeGraphToolbarIcons.png deleted file mode 100644 index 8a857ba71b8f8407d47454d418e049a93712193d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)@{rIJvH|Re@E`1LktuKe-I)JV%Hl7~a@dH?_b8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10x(HL zK~y-6jgi4?6G0foUy_Z@2J4}5>CR+{&FG;Z=pkFoMK6Ws5F|<4LqX6>!T+H25^wr{ zL?Z}V#6#>wdI&w}AqSBfve^>iCbK(P+e-_jD`7mPgwjOcX}$;FkN3U-uFzmGxIS$j zSExBRmkUQC;c?U6+^pV+$2$+pWfK6Z)v8Yj`MSKk{P;3J(M|KsET!7GdE0gI`}kM| z0LO9Et*xz_>+9>MS0zwRh4?W%KM#!zIWrUg83Ye*scIhp6h&c<<6v=d@%yA2007r@ zwRXGxvejz6%VaXrw(XD2X7iP0S?@EMjI=E4L#NYuF%59HR4Pfvn2g0@k})P3V=|pi zOI1}RV@z&uZwC_rzVFX+&e!(#_P(sHu1eQ+pK{LEYPDK@V`D>d&Y$%A{lewFi|cEe zc0wuLX|-CaVHjtGkk^#b9ox3!l+qJQ>Dy#7`Dr3xtjdC>Y2IiSLZozE=aZ6O0D8S% zVlWu!LI}+;jGho;-uHd#d0rx!Ogch{`GbRlYnK5R-&d(ry1To(sr~(Zn5KzXECv9m z*Xzh;v(R-N<#IVs2>Cn?P)3hbD)nt;WhH1d8h47tq7wwcv7#umjYfkN3WZ7le*^&CZuj}p(vtK%FZ<6M06@FlzL!WOFdPmK0l>1X`-BikDG&b( z03emm=l>Xn;Q~N38Z~mc+!-OnpBjB6DP_d-y!80&y6(cXoxfVT@%MI3n9TqH002ov JPDHLkV1iD;Ht7HW diff --git a/SharedItems/Resources/include13.png b/SharedItems/Resources/include13.png deleted file mode 100644 index 6f5e2b4f6d82b6eeb15e31b642e456284416e851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@q#X;^)4C~IxyaaMs(j9#r85lP9 zbN@+X1@buyJR*x37`TN%nDNrxx<5cc_7YEDSM~?YtilXdMNR*sfkKict`Q}{`DrEP ziAAXl1&Nt?C3<9pj<`3hT6Lf__QWQi z3W>IaS!zcLc`E01&k|CSIo`Ny-BRhcg%(OqEc!VWw+(pA>;B!e{<@dF?s(yylGy#9 zKeJ}Pn6=FI1ZV1&eeVx`wmDk3{JWgwA;GRi4Jw{TF712Y&3=$O=XTpBou|rweg})V zUfA~5-Q9)5K4#yvR6+0apL?up-^>0Mhzpi;+L`;FCHc)4rjqkq`b#d`-3EpjgQu&X J%Q~loCID85q&WZp diff --git a/SharedItems/Resources/include16.png b/SharedItems/Resources/include16.png deleted file mode 100644 index da17114f6540fb6cacf0234edd426c7b0578b0d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Rb0|gTR zI&y;lTL1t68FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0Xs=VK~y+T zjgh-*gisKMw@8^HkC6w+6Lf^EA`e+ z{1spqMbW#id&T;hdgRCBapX>H0`PG9pIMec6h*sE2m`PQNs@qNS#Ua?n0uZFx~@YI z1aLl|S#LLhW11$UX*#*4X$vPd0kfcy-cr}~4eN)s^EqJv4$v1ERaO1O`h|MrvMkdV zV9r?t;Nf(&vMj;2?S<10<}<=B=lQM^ zn*a_S;&pFTRlQ^VwD$SzCIAQS`o3oy@4Akbc)#}b!^Bh&^hS=zIlBS> Date: Fri, 5 Aug 2022 15:24:55 +0200 Subject: [PATCH 25/86] Create main.yml --- .github/workflows/main.yml | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..407ac62 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,89 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: "Build" + +on: + push: + branches: [master] + pull_request: + branches: [master] + workflow_dispatch: + +jobs: + build: + outputs: + version: ${{ steps.vsix_version.outputs.version-number }} + name: Build + runs-on: windows-2022 + env: + Configuration: Release + DeployExtension: False + VsixManifestPath: src\MIDL\source.extension.vsixmanifest + VsixManifestSourcePath: src\MIDL\source.extension.cs + + steps: + - uses: actions/checkout@v2 + + - name: Setup .NET build dependencies + uses: timheuer/bootstrap-dotnet@v1 + with: + nuget: 'false' + sdk: 'false' + msbuild: 'true' + + - name: Increment VSIX version + id: vsix_version + uses: timheuer/vsix-version-stamp@v1 + with: + manifest-file: ${{ env.VsixManifestPath }} + vsix-token-source-file: ${{ env.VsixManifestSourcePath }} + + - name: Build + run: msbuild /v:m -restore /p:OutDir=\_built + + # - name: Setup test + # uses: darenm/Setup-VSTest@v1 + # + # - name: Test + # run: vstest.console.exe \_built\*Test.dll + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ github.event.repository.name }}.vsix + path: /_built/**/*.vsix + + publish: + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + needs: build + runs-on: windows-latest + + steps: + - uses: actions/checkout@v2 + + - name: Download Package artifact + uses: actions/download-artifact@v2 + with: + name: ${{ github.event.repository.name }}.vsix + + - name: Upload to Open VSIX + uses: timheuer/openvsixpublish@v1 + with: + vsix-file: ${{ github.event.repository.name }}.vsix + + #- name: Tag and Release + # if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} + # id: tag_release + # uses: softprops/action-gh-release@v1 + # with: + # body: Release ${{ needs.build.outputs.version }} + # tag_name: ${{ needs.build.outputs.version }} + # files: | + # **/*.vsix + + - name: Publish extension to Marketplace + if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} + uses: cezarypiatek/VsixPublisherAction@0.2 + with: + extension-file: '${{ github.event.repository.name }}.vsix' + publish-manifest-file: 'vs-publish.json' + personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} From dd288dc08419a2f07dcc959d04a2c40ac8f9602d Mon Sep 17 00:00:00 2001 From: Agrael Date: Fri, 5 Aug 2022 15:33:44 +0200 Subject: [PATCH 26/86] Update main.yml --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 407ac62..65da6e7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,8 +17,8 @@ jobs: env: Configuration: Release DeployExtension: False - VsixManifestPath: src\MIDL\source.extension.vsixmanifest - VsixManifestSourcePath: src\MIDL\source.extension.cs + VsixManifestPath: IncludeToolbox2022\source.extension.vsixmanifest + VsixManifestSourcePath: IncludeToolbox2022\source.extension.cs steps: - uses: actions/checkout@v2 From db055fef37ae74a928d7083bba732eba436630b1 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 5 Aug 2022 16:51:05 +0200 Subject: [PATCH 27/86] output window renamed --- IncludeToolboxShared/Util/Output.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IncludeToolboxShared/Util/Output.cs b/IncludeToolboxShared/Util/Output.cs index 03394df..433561e 100644 --- a/IncludeToolboxShared/Util/Output.cs +++ b/IncludeToolboxShared/Util/Output.cs @@ -8,7 +8,7 @@ internal static class Output static private OutputWindowPane pane; static public async Task InitializeAsync() { - pane = await VS.Windows.CreateOutputWindowPaneAsync("Include Minimizer"); + pane = await VS.Windows.CreateOutputWindowPaneAsync("Include Toolbox"); } static public async Task WriteLineAsync(string str) { From 924bc53b8fe01a0d15e3b1f61c665bda5fa7fc91 Mon Sep 17 00:00:00 2001 From: Agrael Date: Fri, 5 Aug 2022 17:39:36 +0200 Subject: [PATCH 28/86] Update main.yml --- .github/workflows/main.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 65da6e7..b2b41c4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -70,15 +70,15 @@ jobs: with: vsix-file: ${{ github.event.repository.name }}.vsix - #- name: Tag and Release - # if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} - # id: tag_release - # uses: softprops/action-gh-release@v1 - # with: - # body: Release ${{ needs.build.outputs.version }} - # tag_name: ${{ needs.build.outputs.version }} - # files: | - # **/*.vsix + - name: Tag and Release + if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} + id: tag_release + uses: softprops/action-gh-release@v1 + with: + body: Release ${{ needs.build.outputs.version }} + tag_name: ${{ needs.build.outputs.version }} + files: | + **/*.vsix - name: Publish extension to Marketplace if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} From 51607de9e33198adee5e5939c5c51942e6c3b2f2 Mon Sep 17 00:00:00 2001 From: Agrael Date: Sat, 6 Aug 2022 12:09:57 +0200 Subject: [PATCH 29/86] Create vs-publish.json --- vs-publish.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 vs-publish.json diff --git a/vs-publish.json b/vs-publish.json new file mode 100644 index 0000000..83dbaee --- /dev/null +++ b/vs-publish.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json.schemastore.org/vsix-publish", + "categories": [ "other", "coding", "tools" ], + "identity": { + "internalName": "InsertGuid", + "tags": [ "C", "C++", "include", "iwyu", "formatting", "code", "include what you use"] + }, + "assetFiles": [ + { + } + ], + "overview": "README.md", + "publisher": "Agrael", + "repo": "https://github.com/Agrael1/IncludeToolbox" +} From 9d41c9f854852e2feec941765ddb6a88b39c06bf Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 7 Aug 2022 20:53:58 +0200 Subject: [PATCH 30/86] Update README.md --- README.md | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 199 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 85225d8..4174f2d 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,199 @@ -# IncludeToolbox -Visual Studio extension for managing C/C++ includes: -* **Format & Sort:** Format include commands to cleanup large lists of includes according to your preferences -* **Purge:** Integrates [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use) and comes with simpler but more reliable _Trial and Error Removal_ tool -* **Explore:** _Include Graph_ tool window shows the tree of includes for a given file - -# Plans: -[ ] Refactor modules to use Community SDK -[ ] Add map generator for IWYU -[ ] Repair Graph window -[ ] Add support for preprocessor directives -[ ] Make automatic publishing pipelines -[x] Make pipeline for IWYU and maps -[ ] bugfixes... - -More information and download on the [Visual Studio Extension Gallery page](https://visualstudiogallery.msdn.microsoft.com/28c36d4f-425a-4bfe-9449-03f07b35f7b0) +# Include Toolbox +**_Tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning._** + +Include Toolbox consists of 4 different tools. All of them are only applicable to VC++ projects. + +_![](/256640/1/includetoolbox_format.png) [Command]_ Include Formatter +_![](/256641/1/includetoolbox_prune.png) [Command]_ Trial and Error Include Removal +_![](/256641/1/includetoolbox_prune.png) [Command]_ [Include-What-You-Use](https://include-what-you-use.org/) Integration +_![](/256642/1/includetoolbox_search.png)[Tool Window]_ Include Graph + +# Tools in Detail + +## Include Formatter + +## ![](/256989/1/includeformatter.gif) + +Select a group of includes, right click, select "Format Selected Includes" + +The behavior of this command is controlled by various options which can be configured in _Tools>Options>Include Toolbox>Include Formatter_: + +* Formatting + * Delimiter Mode + Optionally change "" to <> or vice versa + * Slash Mode + Optionally changes / to \ or vice versa + * Remove Empty Lines + Optionally removes empty lines within the selection +* Path Reformatting + * Ignore File Relative + If true, the local file path will not be considered for reformatting the path + * Mode + Configures the strategy that should be used to determine new include paths +* Sorting + The tool will always sort all selected includes alphabeticaly, unless.. + * Precedence Regex + Every line gives a regex - if an include matches a regex, it has precedence over all other includes that do not match any, or a later regex. Multiple includes that match the same regex are still alphabetically sorted. + * Sort by Include Type + Optionally puts all inclues with either quotes or angle brackets first. + +All operations are performed in the order in which they occur on the option page. + +## Trial and Error Include Removal + +The name says it all: This tool will try to remove an include, recompile, see if it works and proceed to the next one accordingly. +The tool can be started an all compilable files in a VC++ by right clicking on the code window. There is also a special version in the Project context menu which will run over every single file in the project (takes very long). + +Obviously the results of this tool are far from optimal and the process can take a while. + +The exact behavior of this command can be controlled in _Tools>Options>Include Toolbox>Trial and Error Include Removal_: + +* Ignore List + A list of regexes. If the content of an include matches any of these, it will never be removed. +* Ignore First Include + If true the top most include will always be ignored +* Removal Order + Wheater the tool should run from top to bottom or bottom to top (this can make a difference on the end result) + +To suppress removal of a single include, add a comment to its line containin_g_ _$include-toolbox-preserve$_ + +## Include-What-You-Use Integration + +Include Toolbox with an integration of the free [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use). By default (see _Tools>Options>Include Toolbox>Include-What-You-Use_) it is downloaded together with a VC++ specific mapping file from [this github repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) upon first use (and whenever there is a newer version available in this repository). + +Again, it can be activated by right clicking on a C++ Code file in a VC++ document. The Option page exposes most of IWYU's command line options and provides the option to directly apply the results. The complete output will be displayed in the Include Toolbox output window. + +IWYU often does not work as expected - for more information look at the [official docs](https://github.com/include-what-you-use/include-what-you-use/tree/master/docs). + +To suppress removal of a single include, add a comment to its line containin_g_ _$include-toolbox-preserve$_ + +## Include Graph + +The Include Graph tool window shows you all (transitive) includes of a file either in a hierarchical view or grouped by folder. You can find it the View menu under _View>Other Windows>Include Graph_. + +![](/265546/1/includegraph.gif) + +There are two modes of parsing to choose from: + +* _Direct Parsing_ (default) + * Uses a simplistic handwritten parser! + * Works on all files! + * Does not further parse any file that is in one of the folder listed in _Tools>Options>Include Toolbox>Include Graph>Graph Endpoint Directories_ + + * (To prevent meaningless drilling down in standard library files) + * Completely Ignores #pragma once and preprocessor! + * If an + * Has information on exact line number an include was done and double click in the hierarchy jumps to the place +* _Compile /showIncludes_ + * Compiles the file with vc.exe /showIncludes and parses the output + * Works only on compilable files + * Output depends on _preprocessed_ file - sticks to currently active preprocessors and pragmas + * No information about #include line numbers, double click jumps to the including file + +The "Grouped by Folder" view shows only unique included files in a minimal folder tree. This can be useful to get a feeling of the modules a file is dependent on. + +# FAQ: + +* Why don't you apply the formatting to all includes within a file? + This may sound desirable, but is very messy if there are optional includes (preprocessor) or specific exceptions where not all includes should be in the same place or in the default order. +* XY didn't work, what is going on? + Look in the output window for Include Toolbox to get more information. + +# Version History +* 2.4.1 + * Fixed crash when opening context menu on some non-project files +* 2.4.0 + * Added support for Visual Studio 2019 + * Dropped support for Visual Studio 2015 + * Made some operations asynchronous under the hood, related bugfixing/checks driven by VS2019's static analysis warnings +* 2.3.0 + * Include Formatter contributions by _[Dakota Hawkins](https://github.com/dakotahawkins)_ + * has now a remove duplicates option which is enabled by default + * Fixed not adding newlines before the last line of a batch + * Fixed TrialAndErrorRemoval stopping when encountering an unsupported document, changed operation timeout to a couple of minutes ([PR by _bytefactory73_](https://github.com/Wumpf/IncludeToolbox/pull/58)) + * Fixed IWYU failing for long command line argument ([PR by _codingdave_](https://github.com/Wumpf/IncludeToolbox/pull/60)) + * Trying now to query NMake settings for include paths if there is no VCCLCompilerTool present (happens if vcxproj is not a standard C++ project) +* 2.2.0 + * IWYU Integration/Trial and Error Include Removal + * Introduced comment-tag to avoid removing include (thx to [_ergins23_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/38)) + * IWYU Integration + * Passes now arch parameter for x64 projects on (thx to [_Fei_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/43)) + * Added option for custom parameters (thx to [_Fei_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/44)) +* 2.1.5 + * [Fixed](https://github.com/Wumpf/IncludeToolbox/issues/41) random timeouts in Trial and Error Include Removal + * Updated internal library references & used VS Extension toolkit +* 2.1 + * DGML graph saving feature improvements + + * Each nodes has information about child count and unique transitive child counts + * Option to color elements by transitive child count + * Option to group by folders, expanded or collapsed + * Messageprompt after graph is saved, allows to open in VS directly + * Other fixes and small improvements + + * Renamed "Try and Error Include Removal" to "_Trial_ and Error Include Removal" (thx to [_steronydh_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/35)) + * Include sorting treats other preprocessor directives as barrier over which includes can't be moved (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/34)) + * Pressing enter on item in Include Graph jumps to include (previously only double click) + * Fixed Include Graph not displaying graph when switching active file while graph is computed +* 2.0.1 + * Fixed bug that BlankAfterRegexGroupMatch option would only work if RemoveEmptyLines was active as well. + * Fixed crash in formatter if delimiter mode not "Unchanged" + "Remove Empty Lines" was false. (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/33)) + * Include Graph folder items end now in slashes. +* 2.0 + * Rewrote Include Graph ("Include Viewer" previously) + * New, improved UI + * Allows to display includes grouped by folder + * Much faster graph bulid up using by direct parsing (as alternative to compile with /showIncludes) + * Double click can navigate to include site + * Graph can be saved as DGML file + * Trial-and-Error-Include-Removal "Ignore List" option does now support "$(currentFilename)" macro + * Default setting include "(\/|\\\\|^)$(currentFilename)\.(h|hpp|hxx|inl|c|cpp|cxx)$" to ignore corresponding header file in removal +* 1.8 + * Include-what-you-use (iwyu): + * Iwyu.exe is no longer part of the package. Instead there is a automatic download and update from a [different repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) on first use. + * iwyu.exe path can be configured by user + * In case of automatic download, mapping files in iwyu path will be added to configuration + * Fixed hardcoded defines being passed to iwyu + * MSVC version is correctly passed to iwyu + * Fixed issues with applying removal/addition of declarations + * Changes can now optionally run through IncludeFormatter (on by default) + * Formatter: + * Include parser recognizes all whitespace-only lines as empty + * No longer resolves includes via file local path if "Ignore File Relative" option is active + * Formatting applied to includes inside preprocessor conditionals again. (Still ignored for include removal though) + * Fixed incorrect include parse behavior for preceding /* */ comment. + * Fixed potential crashes in internal path resolve + * Other: + * New Icons! + * Safer against crashes in commands + * Codebase has now a handful of unit tests +* 1.7 + * .inl and _inl.h are by default ignored for trial-and-error-include-removal (configurable) + * New option for trial-and-error-include-removal to keep line breaks (off by default) + * _Contributed_ by [Adam Skoglund](https://github.com/gulgi): Another fix for folder handling in trial-and-error-include-removal +* 1.6 _- _Contributed_ by [Adam Skoglund](https://github.com/gulgi)_ + + * Basic support for #if/#endif - any include within an #if/#endif block will be ignored. + * Better support for subdirectories in trial-and-error-include-removal on projects. +* 1.5 + * Fixed problems with VCProject runtimes in VS2015 introduced in previous version. + Required suprisingly large internal restructuring to support both VS2015 and VS2017 equally. +* 1.4 + * Support for VS2017 + * "Format Selected Includes" action is now only visible if includes were actually selected. + * "Format Selected Includes" works partially now also on files that are not in the currently loaded project + * Fixed an error in IWYU include removal parsing +* 1.3 - __Contributed_ by [Dakota Hawkins](https://github.com/dakotahawkins)_ + + * Added option to put spaces between precedence regex matches. + * Improved regex sorting via "Schwartzian transform" (= grouping by regex order number before sorting). +* 1.2 _- Contributed by [Dakota Hawkins](https://github.com/dakotahawkins)_ + * Added option to include delimiters in precedence regex to allow more advanced sorting (for a sample see [original pull request](https://github.com/Wumpf/IncludeToolbox/pull/4)). +* 1.1 + * Remove dependency to ezEngine. + * IncludeViewer visualizes now the output of the /showIncludes command instead of trying to run the preprocessor manually. +* 1.01 + * Have includes with quotes or angle brackets first +* 1.0 + * First release. + * Merged two old projects "Include Viewer" and "Include Formatter" to new "Include Toolbox" bundle From 7816a6dd474fee313a3641c26da2a4a472ba1478 Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 7 Aug 2022 20:53:58 +0200 Subject: [PATCH 31/86] Update README.md --- README.md | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 199 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 85225d8..4174f2d 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,199 @@ -# IncludeToolbox -Visual Studio extension for managing C/C++ includes: -* **Format & Sort:** Format include commands to cleanup large lists of includes according to your preferences -* **Purge:** Integrates [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use) and comes with simpler but more reliable _Trial and Error Removal_ tool -* **Explore:** _Include Graph_ tool window shows the tree of includes for a given file - -# Plans: -[ ] Refactor modules to use Community SDK -[ ] Add map generator for IWYU -[ ] Repair Graph window -[ ] Add support for preprocessor directives -[ ] Make automatic publishing pipelines -[x] Make pipeline for IWYU and maps -[ ] bugfixes... - -More information and download on the [Visual Studio Extension Gallery page](https://visualstudiogallery.msdn.microsoft.com/28c36d4f-425a-4bfe-9449-03f07b35f7b0) +# Include Toolbox +**_Tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning._** + +Include Toolbox consists of 4 different tools. All of them are only applicable to VC++ projects. + +_![](/256640/1/includetoolbox_format.png) [Command]_ Include Formatter +_![](/256641/1/includetoolbox_prune.png) [Command]_ Trial and Error Include Removal +_![](/256641/1/includetoolbox_prune.png) [Command]_ [Include-What-You-Use](https://include-what-you-use.org/) Integration +_![](/256642/1/includetoolbox_search.png)[Tool Window]_ Include Graph + +# Tools in Detail + +## Include Formatter + +## ![](/256989/1/includeformatter.gif) + +Select a group of includes, right click, select "Format Selected Includes" + +The behavior of this command is controlled by various options which can be configured in _Tools>Options>Include Toolbox>Include Formatter_: + +* Formatting + * Delimiter Mode + Optionally change "" to <> or vice versa + * Slash Mode + Optionally changes / to \ or vice versa + * Remove Empty Lines + Optionally removes empty lines within the selection +* Path Reformatting + * Ignore File Relative + If true, the local file path will not be considered for reformatting the path + * Mode + Configures the strategy that should be used to determine new include paths +* Sorting + The tool will always sort all selected includes alphabeticaly, unless.. + * Precedence Regex + Every line gives a regex - if an include matches a regex, it has precedence over all other includes that do not match any, or a later regex. Multiple includes that match the same regex are still alphabetically sorted. + * Sort by Include Type + Optionally puts all inclues with either quotes or angle brackets first. + +All operations are performed in the order in which they occur on the option page. + +## Trial and Error Include Removal + +The name says it all: This tool will try to remove an include, recompile, see if it works and proceed to the next one accordingly. +The tool can be started an all compilable files in a VC++ by right clicking on the code window. There is also a special version in the Project context menu which will run over every single file in the project (takes very long). + +Obviously the results of this tool are far from optimal and the process can take a while. + +The exact behavior of this command can be controlled in _Tools>Options>Include Toolbox>Trial and Error Include Removal_: + +* Ignore List + A list of regexes. If the content of an include matches any of these, it will never be removed. +* Ignore First Include + If true the top most include will always be ignored +* Removal Order + Wheater the tool should run from top to bottom or bottom to top (this can make a difference on the end result) + +To suppress removal of a single include, add a comment to its line containin_g_ _$include-toolbox-preserve$_ + +## Include-What-You-Use Integration + +Include Toolbox with an integration of the free [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use). By default (see _Tools>Options>Include Toolbox>Include-What-You-Use_) it is downloaded together with a VC++ specific mapping file from [this github repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) upon first use (and whenever there is a newer version available in this repository). + +Again, it can be activated by right clicking on a C++ Code file in a VC++ document. The Option page exposes most of IWYU's command line options and provides the option to directly apply the results. The complete output will be displayed in the Include Toolbox output window. + +IWYU often does not work as expected - for more information look at the [official docs](https://github.com/include-what-you-use/include-what-you-use/tree/master/docs). + +To suppress removal of a single include, add a comment to its line containin_g_ _$include-toolbox-preserve$_ + +## Include Graph + +The Include Graph tool window shows you all (transitive) includes of a file either in a hierarchical view or grouped by folder. You can find it the View menu under _View>Other Windows>Include Graph_. + +![](/265546/1/includegraph.gif) + +There are two modes of parsing to choose from: + +* _Direct Parsing_ (default) + * Uses a simplistic handwritten parser! + * Works on all files! + * Does not further parse any file that is in one of the folder listed in _Tools>Options>Include Toolbox>Include Graph>Graph Endpoint Directories_ + + * (To prevent meaningless drilling down in standard library files) + * Completely Ignores #pragma once and preprocessor! + * If an + * Has information on exact line number an include was done and double click in the hierarchy jumps to the place +* _Compile /showIncludes_ + * Compiles the file with vc.exe /showIncludes and parses the output + * Works only on compilable files + * Output depends on _preprocessed_ file - sticks to currently active preprocessors and pragmas + * No information about #include line numbers, double click jumps to the including file + +The "Grouped by Folder" view shows only unique included files in a minimal folder tree. This can be useful to get a feeling of the modules a file is dependent on. + +# FAQ: + +* Why don't you apply the formatting to all includes within a file? + This may sound desirable, but is very messy if there are optional includes (preprocessor) or specific exceptions where not all includes should be in the same place or in the default order. +* XY didn't work, what is going on? + Look in the output window for Include Toolbox to get more information. + +# Version History +* 2.4.1 + * Fixed crash when opening context menu on some non-project files +* 2.4.0 + * Added support for Visual Studio 2019 + * Dropped support for Visual Studio 2015 + * Made some operations asynchronous under the hood, related bugfixing/checks driven by VS2019's static analysis warnings +* 2.3.0 + * Include Formatter contributions by _[Dakota Hawkins](https://github.com/dakotahawkins)_ + * has now a remove duplicates option which is enabled by default + * Fixed not adding newlines before the last line of a batch + * Fixed TrialAndErrorRemoval stopping when encountering an unsupported document, changed operation timeout to a couple of minutes ([PR by _bytefactory73_](https://github.com/Wumpf/IncludeToolbox/pull/58)) + * Fixed IWYU failing for long command line argument ([PR by _codingdave_](https://github.com/Wumpf/IncludeToolbox/pull/60)) + * Trying now to query NMake settings for include paths if there is no VCCLCompilerTool present (happens if vcxproj is not a standard C++ project) +* 2.2.0 + * IWYU Integration/Trial and Error Include Removal + * Introduced comment-tag to avoid removing include (thx to [_ergins23_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/38)) + * IWYU Integration + * Passes now arch parameter for x64 projects on (thx to [_Fei_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/43)) + * Added option for custom parameters (thx to [_Fei_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/44)) +* 2.1.5 + * [Fixed](https://github.com/Wumpf/IncludeToolbox/issues/41) random timeouts in Trial and Error Include Removal + * Updated internal library references & used VS Extension toolkit +* 2.1 + * DGML graph saving feature improvements + + * Each nodes has information about child count and unique transitive child counts + * Option to color elements by transitive child count + * Option to group by folders, expanded or collapsed + * Messageprompt after graph is saved, allows to open in VS directly + * Other fixes and small improvements + + * Renamed "Try and Error Include Removal" to "_Trial_ and Error Include Removal" (thx to [_steronydh_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/35)) + * Include sorting treats other preprocessor directives as barrier over which includes can't be moved (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/34)) + * Pressing enter on item in Include Graph jumps to include (previously only double click) + * Fixed Include Graph not displaying graph when switching active file while graph is computed +* 2.0.1 + * Fixed bug that BlankAfterRegexGroupMatch option would only work if RemoveEmptyLines was active as well. + * Fixed crash in formatter if delimiter mode not "Unchanged" + "Remove Empty Lines" was false. (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/33)) + * Include Graph folder items end now in slashes. +* 2.0 + * Rewrote Include Graph ("Include Viewer" previously) + * New, improved UI + * Allows to display includes grouped by folder + * Much faster graph bulid up using by direct parsing (as alternative to compile with /showIncludes) + * Double click can navigate to include site + * Graph can be saved as DGML file + * Trial-and-Error-Include-Removal "Ignore List" option does now support "$(currentFilename)" macro + * Default setting include "(\/|\\\\|^)$(currentFilename)\.(h|hpp|hxx|inl|c|cpp|cxx)$" to ignore corresponding header file in removal +* 1.8 + * Include-what-you-use (iwyu): + * Iwyu.exe is no longer part of the package. Instead there is a automatic download and update from a [different repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) on first use. + * iwyu.exe path can be configured by user + * In case of automatic download, mapping files in iwyu path will be added to configuration + * Fixed hardcoded defines being passed to iwyu + * MSVC version is correctly passed to iwyu + * Fixed issues with applying removal/addition of declarations + * Changes can now optionally run through IncludeFormatter (on by default) + * Formatter: + * Include parser recognizes all whitespace-only lines as empty + * No longer resolves includes via file local path if "Ignore File Relative" option is active + * Formatting applied to includes inside preprocessor conditionals again. (Still ignored for include removal though) + * Fixed incorrect include parse behavior for preceding /* */ comment. + * Fixed potential crashes in internal path resolve + * Other: + * New Icons! + * Safer against crashes in commands + * Codebase has now a handful of unit tests +* 1.7 + * .inl and _inl.h are by default ignored for trial-and-error-include-removal (configurable) + * New option for trial-and-error-include-removal to keep line breaks (off by default) + * _Contributed_ by [Adam Skoglund](https://github.com/gulgi): Another fix for folder handling in trial-and-error-include-removal +* 1.6 _- _Contributed_ by [Adam Skoglund](https://github.com/gulgi)_ + + * Basic support for #if/#endif - any include within an #if/#endif block will be ignored. + * Better support for subdirectories in trial-and-error-include-removal on projects. +* 1.5 + * Fixed problems with VCProject runtimes in VS2015 introduced in previous version. + Required suprisingly large internal restructuring to support both VS2015 and VS2017 equally. +* 1.4 + * Support for VS2017 + * "Format Selected Includes" action is now only visible if includes were actually selected. + * "Format Selected Includes" works partially now also on files that are not in the currently loaded project + * Fixed an error in IWYU include removal parsing +* 1.3 - __Contributed_ by [Dakota Hawkins](https://github.com/dakotahawkins)_ + + * Added option to put spaces between precedence regex matches. + * Improved regex sorting via "Schwartzian transform" (= grouping by regex order number before sorting). +* 1.2 _- Contributed by [Dakota Hawkins](https://github.com/dakotahawkins)_ + * Added option to include delimiters in precedence regex to allow more advanced sorting (for a sample see [original pull request](https://github.com/Wumpf/IncludeToolbox/pull/4)). +* 1.1 + * Remove dependency to ezEngine. + * IncludeViewer visualizes now the output of the /showIncludes command instead of trying to run the preprocessor manually. +* 1.01 + * Have includes with quotes or angle brackets first +* 1.0 + * First release. + * Merged two old projects "Include Viewer" and "Include Formatter" to new "Include Toolbox" bundle From fc1333855476d76010966f90ca2a52537569002d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 7 Aug 2022 22:28:19 +0200 Subject: [PATCH 32/86] ready for publish --- README.md | 71 +++++++++++++++++++++++++-------------- art/AddPageGuides.png | Bin 0 -> 397 bytes art/iformat.png | Bin 0 -> 407 bytes art/igraph.png | Bin 0 -> 518 bytes art/includeformatter.gif | Bin 0 -> 64787 bytes art/itrial.png | Bin 0 -> 384 bytes art/iwyu.gif | Bin 0 -> 1601873 bytes art/iwyu.png | Bin 0 -> 675 bytes vs-publish.json | 26 ++++++++++++++ 9 files changed, 72 insertions(+), 25 deletions(-) create mode 100644 art/AddPageGuides.png create mode 100644 art/iformat.png create mode 100644 art/igraph.png create mode 100644 art/includeformatter.gif create mode 100644 art/itrial.png create mode 100644 art/iwyu.gif create mode 100644 art/iwyu.png diff --git a/README.md b/README.md index 4174f2d..a82a3e8 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,17 @@ Include Toolbox consists of 4 different tools. All of them are only applicable to VC++ projects. -_![](/256640/1/includetoolbox_format.png) [Command]_ Include Formatter -_![](/256641/1/includetoolbox_prune.png) [Command]_ Trial and Error Include Removal -_![](/256641/1/includetoolbox_prune.png) [Command]_ [Include-What-You-Use](https://include-what-you-use.org/) Integration -_![](/256642/1/includetoolbox_search.png)[Tool Window]_ Include Graph +![](/art/iformat.png) **[Command]** Include Formatter +![](/art/itrial.png) **[Command]** Trial and Error Include Removal +![](/art/iwyu.png) **[Command]** [Include-What-You-Use](https://include-what-you-use.org/) Integration +![](/art/AddPageGuides.png) **[Command]** Mapper module for IWYU +![](/art/igraph.png)**[Tool Window]** ~~Include Graph~~ # Tools in Detail ## Include Formatter -## ![](/256989/1/includeformatter.gif) +![Include Format](/art/includeformatter.gif) Select a group of includes, right click, select "Format Selected Includes" @@ -59,38 +60,47 @@ To suppress removal of a single include, add a comment to its line containin_g_ ## Include-What-You-Use Integration -Include Toolbox with an integration of the free [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use). By default (see _Tools>Options>Include Toolbox>Include-What-You-Use_) it is downloaded together with a VC++ specific mapping file from [this github repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) upon first use (and whenever there is a newer version available in this repository). +![Include What You Use](/art/iwyu.gif) + +Include Toolbox with an integration of the free [Include-What-You-Use](https://github.com/include-what-you-use/include-what-you-use). By default (see _Tools>Options>Include Toolbox>Include-What-You-Use_) it is downloaded together with a VC++ specific mapping file from [this github repository](https://github.com/Agrael1/BuildIWYU) upon first use (and whenever there is a newer version available in this repository). New version is automatically built and shipped every month. Again, it can be activated by right clicking on a C++ Code file in a VC++ document. The Option page exposes most of IWYU's command line options and provides the option to directly apply the results. The complete output will be displayed in the Include Toolbox output window. IWYU often does not work as expected - for more information look at the [official docs](https://github.com/include-what-you-use/include-what-you-use/tree/master/docs). -To suppress removal of a single include, add a comment to its line containin_g_ _$include-toolbox-preserve$_ +IWYU has several pragmas, described at [Pragmas](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUPragmas.md), e.g. `//IWYU pragma: keep` works as include removal suppresor. + +Since 3.0.0: +Added mapper support. Maps produced with it are used to make results better, as it describes all include files within mapped file. + +Added cheap and precise modes: cheap mode copies contents of IWYU output, may be undesirable, as it does not account forward declarations, but it is fast. Presice mode uses custom LL1 partial parser, which reads all the information from file and output, combining all the possibilities it allows for additional steps: + - Format all includes + - Extract all forward declarations and place them before code + - Empty namespaces removal, useful combining with previous option + +There is a BETA feature of IWYU usage with several files: + - Select several files in project menu. + - *Right click>Run Include-What-You-Use* + +It is useful for example with several .cpp files, when you are sure, that headers included are fully correct. + +## Map Generator for Include-What-You-Use [beta] + +The feature is tested, but it is useful even within large projects. It makes results of IWYU better. Works only on header files. -## Include Graph +It gets all the #include declarations and writes them as they are to the specified mapping file. Combining several of those files are done using `{ref: }` in the final file. To find more: [](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md) -The Include Graph tool window shows you all (transitive) includes of a file either in a hierarchical view or grouped by folder. You can find it the View menu under _View>Other Windows>Include Graph_. +Configuration is on *Tools>Options>Include Toolbox>Include Mapper* page. -![](/265546/1/includegraph.gif) +Mapper has one option, that specifies separator you would like to use, quotes or angle brackets. This option maps opposite choice as a private header, ultimately forsing IWYU to choose your vision of the file. -There are two modes of parsing to choose from: +To specify relative index use *Relative File Prefix* option. e.g. C:\\users\\map\\a.h with prefix C:\\users will write to the final map. -* _Direct Parsing_ (default) - * Uses a simplistic handwritten parser! - * Works on all files! - * Does not further parse any file that is in one of the folder listed in _Tools>Options>Include Toolbox>Include Graph>Graph Endpoint Directories_ +The feature is in beta. - * (To prevent meaningless drilling down in standard library files) - * Completely Ignores #pragma once and preprocessor! - * If an - * Has information on exact line number an include was done and double click in the hierarchy jumps to the place -* _Compile /showIncludes_ - * Compiles the file with vc.exe /showIncludes and parses the output - * Works only on compilable files - * Output depends on _preprocessed_ file - sticks to currently active preprocessors and pragmas - * No information about #include line numbers, double click jumps to the including file +## ~~Include Graph~~ -The "Grouped by Folder" view shows only unique included files in a minimal folder tree. This can be useful to get a feeling of the modules a file is dependent on. +Requires fixes. # FAQ: @@ -100,6 +110,17 @@ The "Grouped by Folder" view shows only unique included files in a minimal folde Look in the output window for Include Toolbox to get more information. # Version History +* 3.0.0 + * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. + * Refactoring of IWYU, new code and new feature set. + * Some features are dropped for now, until fixed. + * Build pipeline for IWYU, which builds every month at [Build](https://github.com/Agrael1/BuildIWYU)! + * CI/CD for this whole project! + * Added Include mapper[beta] for IWYU, works as public-public include mapping. + * Include What You Use additions: + * Added LL1 partial parser for includes and forward declarations. + * Added forward declaration moving to the beginning of the file, after all the includes. + * Empty namespace removal tool. * 2.4.1 * Fixed crash when opening context menu on some non-project files * 2.4.0 diff --git a/art/AddPageGuides.png b/art/AddPageGuides.png new file mode 100644 index 0000000000000000000000000000000000000000..5d04f59b8dc39d28441dd13634221f1381f891d0 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e4A$20i_elQ2X>tn5e+S^cgL0g zb_vekEN^C$GG)>vp<}A&&z;-XCTPneXJ+Ff7#tGv=l|#D{(>=V3168ut=(ZFEZgzs z&71rWCykSYk37#W(NEaHV0(pgXTt*V6MW1w&bDOCVLOnc<`OK!y@i`ODYjuEpNObv zxPgH|hp>?ZR~!?=sh{R|C8rc61D&Q?;u=wsl30>zm0Xkxq!^40j0|)QEOZS`LX3>8 tOwFte%(V>+tPBkD%JT1_Xvob^$xN%ntwCPPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0W3*GK~y+TrI0;t zgfI|Bw@8^oq)eGJSfYS}KLH)0L{yxChEs5lT!Ai>D)CbPk=L)dhS@NTl`?V= z@TR7M0$xLwWnftr#BnUL=Xs#(Is`!gNs@>)65yQj2Bv93S(Y-ZI0y*d zT=A5)Z9i`tB}Gx-@Ehle=5_+!c<#Dx)imvk*Y70w7)Alsd7h(W;JioyZX}wf0o%4^ zCIQu3$xeWcG)*B4L-Ama9$&$D>IX`1j29=C$+ zA2|qa5_vLZ8pK+81NPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0h>ugK~y+TrBbnK z!cY|L(6K{@PMsV(`V9dG9W;sxf+DSgI8+C}KrAku@(2DwMn9pBj*3WyYCwskNl-hK z-rn&lc7eVA#^^Ur(`lo#bS|~ z&8Emn1N22skWQy*G#V*gDwSwDohlvR_Q*hj3kRICUavoxUqf4#MTTLB(;TY*s82W~eRSR#YyRrNQ9DK%!76&}1@Ey3^@UyM``FW*GejZy*1^Y>tQPvQLpP&;%2XPPirwG)=qs24cLV`xuA!)&Kwi07*qo IM6N<$f(0|;ZU6uP literal 0 HcmV?d00001 diff --git a/art/includeformatter.gif b/art/includeformatter.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5002ff30b63837b3ed8f7815fe2f826bedd23fe GIT binary patch literal 64787 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 ea`0OKK>G&%3{2Wx^XDx%F(9zP>)cN0`rKzo< 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

}(RO+vU2Iq%4( zTeARW7NmvO8fSk?%{Ps<{easD_~++D0D!Cuz#Mm{l3|HE79h}r=D~4U#(XV)UOV)6w3G&*%_E!XrFx<*TEOg z%7arTdJr?PwIdr!>U*fCAtM&tD4S#N3t#JBgq_eu5;(ks!*&oz%$?SB7a%MrWf1hj zelJ-i&RTyDt@%+xZm%6{$Y_M_wws{T2{U4FJN&suzFRh08@sC}y~fZ*A4i2!iyo3hn<9{^VtR7jDI6jO`6HfM`uhk!AcBV!2b>1(h@L&Zn^-3@=S?Ujag zFfxv{2hn{((hYAV4`5?apEksG=wH$H?@?8v$q)6qxFo4=f+=I&i7#fu^i0(zfmO`G zdIGcl5X!Cx&U>dkA%yRQ8T;oT^o6ozbmKU7h>xRAKi#yFZn_LZO91r$adf8fP__Rb zKj+MueK5w@w;74Ck0lXuMz#<`NRoym$uddZ(spL-`%pdnPnA&-uvntOF^zj3A- zBTk}eZxNy;qV;OP(ch1_CFE@RWA52N=ZfqMJJ(EC*FWW$>w=CMF&pYRz?eqe{0nHM zh-=uOJ|M(h?>`eZc*f%wm5I{*=eqgh=EM!ok&Ms`KpmQ&n=p7|1`aL#2PgT*`#eTY z7?|T<5ON;aym-(!8l$7)GnJvPiVWgb(CyyjrR&$M;BR#UtG^ny12AaZUEuzTXWdgU zH%_F@?eRc!nKG^0${GE(p^)#eC%lLj#w*UAu9Ovqb|BUg+z{#PDC)*+;MIKIGE^$& zPpcOf%_D<$Z}*^iG)N=OVqc2Ehjs3%R26s_EcD3Z;tNsxA>19mK`(WhoAQSL#{ppO zfUyBPB{*1*7%s&?OH9|^QBQ~g{)pc6ISoq$05G_56YT%n&T8?_o4Ff8UOC(f@!j4b_wWt9};Zv*u~I z@fb?brUBYJqO!~Qo&FoNPf*x23{1U1I#$lJAI<-GWSyR})hUi#yEHDO&piNxz`d7wGzcba;pI&*W=xie?AtdTGY?`647^wH>}A;Xjkm|@{h z^JqpvT==8LXc?-K`W4XPceGsezp}>4E*YP3>YySz}w}Z&g;WhG( zFeQ|3+~#E%4K%(vD#qz)z#9tQ3@nV%w{~1wp%+k2UHG7l?MW|v+|5hvg}YLZ?_e54 z^0X}m3;Ac)tT&CD>`|c5B^*HY_-d`S)2Xo8z~;;91dnyESUZe~Ss~gHZ?Kp$-fJz- z?3mUJ^)QBDoc+dsQEk+a@j2i8_K&rJpPn!|P1m=Ah^;I-z( ziGcO`x0XkvNMJ%ww)9t}@ouBbW!mDe84pfbcNYvuyx!N|=+QH%!wDb*-l!lIH-2|J7J|4kd#wfB%Hc14|NOIkGF| z;q`3a-@WAvYDCL+-fbcR z!LfBuYV|HFfuBgHM|yd$G!6hrOLJ_+fHti&m1$!oU1_wYgx^nXotGm8+gkIRZLLpS zr8LU>x(+wG^A)X2oz!0ht!`XHEnd|7C8d;RFKE$8cVB36vf6fxiHAre7CO6e+K-@0 z;Y<`+hA8~cud}dQ-DT4xwQ73S+V6GS^` zr)~6JKjylP6>OaM)hqVhH#s^tJ-ziC!cE#^D#rJ&`zfaZBs0{a_-uvpQN_1=p(ihp zo-Z3O)}2m!O(E~h6Nvj)NXE;T2-c*b=7D3fVNw`89({^7}>5ko#PM4Ou-Bxt5j z;)2u-%0o>1^d3>M`cXW)!uVg-@DF3fT^7}-lZ&svcfPNM8I{q{thG4!oZodL4;EO0 z4}CWnKz0NCP`!8=QlM)Yd?D=Z+R6DppWS^0BSx_Eong&n&qG><7lrI1rcvI1Tj#qT zf1&#G<<^S-{{H^_;=liC11bF=P(45D~ zU>d)`_^I@=@e2~kDH^~TTr)U6bH`bak3xEJ_o)q%u60`$P$IdO4-W&yS(TZqCJahE zRNQV~bkL-#l}3e~_t>%=DEs3c>-2WIj6@Ub7Nb1Cy>`z1K7dkO3DFwvHqj94j1*Rh zhm?Su)#Nb8S%83ga=`bZAo0c;fFeJ*|NMp3&|Kv{J1eP(-4i6#kx6W(Wnv;pK=qX; zRInuAmD3PaCm4MlWeM5~CId`Dw08@}&pKZiV48HTwwXck#xo3P{*D_s45qf$Le(fuvngHNwZ7+qi zNwuYgoC+LQ09v};2EU3!PAOA{*@6A!74Iw{Y^;pNybg5w+mnd{#!}0*oDo(n3U4fXIzA3cr0z$gYBK~6}h=G|Hj8(pe z#+IF36@m~3T#L-DB%(Ee>H%HB@E%JUYEFw=e?lgrxk!ty%t>i64Y^Hwuts2P(5CAe z9H}w!=&;k#lUiHR;ga7HJZs!lIA!NMbhnYnr{tm))Y>I!q>GTvB`cU*rsW>*TX9q+3mDVY(e8HhwMGqmjC>^+iq7U zQTYWVPh*x@No7HmC|Ix_37~QBw!>gQSkVMo#s;(RCk-*C#juh1rJ%g!HD}lWG@Xzj)bXl^Op2H>Wuu`4`&V4(UB_i${-z<^`^jyg+B6xS{G}0|0 zv}$IGOF*?iE^c(68P_6ydjXo~^=s`{?#a(1yURtI-w{R+Hau&d1SPvY0r3d0Y5DB_ zxTU*paz@(;o9_3o5b@(?+1Hc7XN5psi}ChSQ9PoJ+r?@o)A(rX+0zgp1IWAUMR-S+ zKl%@7_gybMAe~2Xo0M=%XJv9{}@T;3rrG&|Yuix7ZB*4^^tl4R-!JRj?=G*64 zvY=oT4nc8Q@YP;_Urd4DnKhD75*XDX0|Zdd&_GieQ_9wGW05fylqLvHKQX@xpvE-^ z*jH{yd6hS@CeREc?*~2=qHs4$ue^jANc} z8K{5fqjoMpwEWy_8v$}Z$GD&TmNENux9#_@*N=sqyj8i%DH^M6YrYSS8v$%Wxd5U| zrym3?^PalftI&~+>uig_6>1SADBZ2X_zY;&!Zz{{;iYXgH`|xC4AUG1R8pq#VUf}N zq~(V}x;?;@_E$ZhH0%YLQWh>T)aXvTeJg0xz#5B_%ATGy*GD9zch3?roo;&HCgpXWC2s^@7rAaDXP(t~TmZ~h%r5ra; z8urm<|MelQ45`*VYZ9BbAa`hAlW^n&t2h=Lj1x)Yc!5!s!6D823GKRLh3dj3rR~oC za%%{~{6DQ>27;IB5RG6F?-MyF1nIx`_R_o|-C*{C39?@7_@!VGem_Q@2ED0S zI>Mb+hEM9(pvyZoRmh=s8)Th@<@WVBfE4vPg8@e8dB+d)jN(vrjQscC z&cAvX>>+Z0+T!WXGj3@ng(;vusZJl;gp=!4{Dz7&*HMI87uhDG%?@n{bD-H|fXy^G zxVr___=)v(4_aJOP+R(q&8}G9UWZ#MC3`o|`3@-RQD9O!C;bk-9x>`;&k5mMZ@Ods za_z)e0c3?xH(%$aDM0{*VilJ-Fx0&h*VB!=_-RluPPv-mM23RW5Q6&8!uoZiUVRwL zh3pXm-Bp9Dz(;+gklLk;BUG>SR!X{V;yA?vAvO8uhBxbmkLOxq)Tm0aOUk zX4DtB`%yJ2f9UGB59uEVUv)79MJ*vB#~{#UpOjpvZgX1drC0hzS3uQxhSz$xHK$`U zf5ehc0`3Z&P^8bl%P?`$w{IpI02JjxAP%`1TdV7H>*kq|@AHGzQH|c<)xvFy!9bK+ ziQ?%}S~-GCPsYLO2o-~)6wl}Ycu_%kRZVN01#Cg6l`Mi3AkUkPt4}+>?M9hI1Glr3 zVWdW>?UpyaaTp2VQc@6{`z#7qN{&}h%cUNwtyUE2WimmEmr)58 za(!2T(9@F2_#T+q9b>6HpMU}(^%QaLixy;7O>S8<3&@Yk*xj9_2l(!1u7iedY}*07 zLjLJeyz6E{J#J7TN>FapbjWZ`mXb~(I7k8KW4K;owu>cbIRKwH0-)+Qb7^QgYk?&T zR9b;%;g{}o`9)>myIEkGlpPfYb(g8vAiz-MMl2x#QlM7>_Ogak1?$aGV4H#*JMymg z$mX`zi>72-oHS1?OpeMx_akB;MQHL_|4x6FTal`AY_*bpi=tC0HqS7v-m9hmg3k{ z8O#ziDDD&A?80MGYE&@ZP5qy2C^G=c-{5g>3KCaAs>W{jAY@C3#8*Hc%M+YffJE@3 zPe43?`yDMHy%E#;P%;O>oAp@uKlrODO*ww8!DOm8&iz9d%ng?UCIYBwKq3$b8_(d~ zJZR}-WG)MDz`{{%0DlZP6N9V#L^eWb4cMBMie~~0U#f^c2E8yslE2)?$FcBD3fe}! zsuj|;$EhzG)UYhJawggOuOFCp$mVh-E`hD5N`*Lpyde#Qd4Xw&+1uFA#Xp~=AiFP0 zw`r__lqv!)ZllnX1%*FE8GuDNfU6Uz@iQn4faLUSHVPA@)npc)BqevL6))Uewlw5? zK>g`=;IyB5aBQ&!Bcck}>AJY8xUex{J?vA}~@BU12dnps)(rTFJP9$zw# z{+D8XvK$$};T5TTw;qgK1J!!Eicwnc~%f~q2@>S83f4lwW0b2}!$sRHV*=^^C58ey3&cWNF z4Y*v8bJi!y7=WVjB#a!#0zDMEQqYL*Jj6GII7sN8vlni9p4+wg+_m51B!CMP02WWq zP}g?QjON|x+4AF&E>G*$oqy&ox^?U6S&JF*K|_|RJ?&80$MiD$UT{V;)&R5a^yjpn0A}AkP+j~Ka8PCg& z+s5Mi=RCd`qrmnxoPPfCVkQ&&5B_$MDmRdNRxZYftB%`E9EtgGBvbY{$8?q0J+zz}z(~sJpwz4vF1!{>HPJ8$mk96rm@d;6`@np5N8D^q1k*4d0I0 z`x!shze)@k(Om`lk6tmy-(E2jK{DktpKTMW+Hd2EhCdh%{`J3uE0TM)@VS3mp;d|B z-`;@oL3f`K*R9vKmyMM5MU|UG#{2M_W&ooLpL0!$R~O~Wd%zS=a;!k}Mncx<+#AD& zH_I-JRb5a%?)4EYOZ+tBSr>nP`OKCJ=Wnf6)2|oq*7!U*ZMs;U^tBzatzzX z>gpy|>6Lw%J1=CV#wghHCuVPxpEYTKwnPXH;gw5ooim=>9HXa;Jn&62ew=39ouq!< znuyuB+6X=ObiWmCoDU>=MDaW$}0b|0({_pYWPa`)`Z>`+kbH0>Zs zyG5Q$m+0wNGvBFas+WHae{5KhAGvR3$9`Ze{=;sQhJ-D@s{Wh)MO8D%U|2uH@+w_0`fnpIRf~iK{rQGI$BAW5MEhJ})1$dnQ_u%ho zdMB2h&Eeev$A>EzmLc9Ao4OEn1h=d=L!I%`jFyBoha3utv5k$hl+fA97#Yu~F!CvP zJ9_6(*xq?tDRbKIl{h7ZUnrk*?7{Jb^Z9=%?)H96zW~c#w-0(JPM^08U|1|5EZo5{ zZ|f+Z`~Mv2r;oo~C;6R)RO9)T9-Yaeyh!_PG|#SAS9aPN#|XuR^@|R4zZ(6Lrth>+ z+bXPK*~3p)FFP5Iwyx1R625-wa6*0=eO+1_7gmE%Jd#@joj7>*s^O%kEa zK_?RGg2N1!y8KxFz;XHKs;S*SZ#_9zv)8v~{)NHz_fO7m*ZR++9It65R45gGgn)Bd z3*Rd-$TDTg!;Mcp-y+JVG`)TX0C}e~OCl%=>mW~%zcPbIsv{2E%wC~kdlBQ)! zEMvLN@r}|%%GIAsGR3@xq$>C4r7NrFeHxv`;~1#JAG0m=E0)GF6TzCMm6E08aJ^BB ze;mK!59VpsKU`TKpLJ!`?!;}Lx>USG*>8VZDXwsod{j2`!`s^)i|iMX%?e!RlT!ER zf4Z{zz_##70DpKP#v}SLkH%W6)d7gATxi5uC5|qBsHohYSia_PW7gH9u|G88Cna9d z0~NDF_X`L1@~@UD*6w(0Xt00Z&5*Un&pgk62WeR%cO>&F-&f4`a zSlJObLCNgC6CRqG&kL zjiK-M-Et4hxngyo!-i@TCj`|wqelwKGf&ca**Loc9jT@Kn>>2ctTIRLr?n`z+FquF zXnK8e0MJq!Q%UT?wcl=dZvUuy4EqeG3vVZG*Vs7r_9z_z)o&sQg#)wh;b&Fyzdf0I zF#m_hwhbGA83LYcSADrgoiO z;j1BWjJ4$oe@#-3`u`hsSigJT_=!uJo9i9AmHtzwym$cE;G;V8bp6B3xz8DW?UV?+ zCepv7^uHCoynl8)ANoepl^_uQsVTZZGsEcua$Ku*0K(5v7r;6X)NK3rQzsDchu?#V zsSXB`rwzFBwR2wYa&_jxo!{3L*{QDwTSxt1$z1f9;VSU@+Wj>U+72i*f{8W=F_;US znN8=Bf8T?RWU5~LmRp-~AmdJ=(Ba2XVUhjQMYu$T_^0y}-kvr3X)@Lq?Mx51os@4) z2ZoGTdKqHSp-@!NWNtNu9QmVLeKYq!7OLGjSTC@Da-=E90r^ zT>R;~6Dvbj#hs0c_yz`SYyxo5tR@6(!0^)@Ue$<7*Cb-2q(29F4 zbc0|7KKW0mZZwt?U@+`umaggBG!Fan3$4!dS8tTQ)H%4!YTnJxs&F;+VigClI?L|t zY~RUd0tlQKGDO@db$gfuTCN{aujTbeVj}&#jwOT4HUJ2b961;qg?1TUgY|>`9ZJ`c z9Y?kBfPubN{+9|rxd0-|R{1$_0o}Bhra#aTuj`#9U5 zXjzS4RY@keD=YK+R%!*7UV|IBsDsB!(>qcebeVPWyfd4eItIJTLDE<9tCQl)lbe_1 zIWS3}Tg@~^@Z(aKrSTwF2}p&xzJ##)t{6iz+B+mU3>z{`fvz4!&GMr$6u@oyf zdueKl2dg!w9w=b~psa>lERE!+UA_D98s8O+E@7Z+BfG+EQZZB}3ve#yRVFhnRFJW{ zM($@>k;*)%w`;OnW4`J8$lZ?l_UiQgDpvhZ?gaJzJ_JBz_%%|T5iM@zG@P?ieU+p? zln0t6A~%w*ZFyt8{`y_Z$cm-jVxqTv*wIWo^FIcFud~m$wmAmP&cJCcPaF6jYfd#$ z0O}5ssmD5CcAG+HxS^=bQFuQIo`6}hA*aH~iumbdgKohPX`bR<@^=e^!D%f`Ki0{3 z`;~_2=7C4fwu^thp58>2kO_4{&8iWMl-BfG>#(TWcV~iF$$hS z2e_|u1&q_9XSMQG-_q_%CePtaCncp*^_E-TE#7^>phO_z=D^_KCpP|&~u4}d-bvZ^1%E5Z3oEEux<<8Sj% z9`Wk5j^;@<@}zgmbqS z1#@KE_nh72Y>g&yick5WWiss|ER>C*Di5LQYn(_s&p&8&xUE2xr@-ea$hQE>W)dZT z!v-U6(sTgr&jhI(q3w{8yb*H0lKSH{jwK{tR8W0T@NjYRIc0%6y^zJFUXvxOuUShD z72ZF{NGS}^6MzORcuJ|+!opRag{q00V$*`GM*t@lF7{s0Ut;mf$%;#3)-Vc`aV^aG z5T&O$GY!Z#5a}3f&dn1Em9%M0>zAPF7oxRDfp0>Ae{`Ta8SRXmbZZIKQwf%n3Th;{ znmF$Nq*%o8WlH#WFwqB%@ zEm?qtf^>Cc%RE`BJqcn1YpR7?%O`g2MrfC$JF5}$b~OO9uwK$F(NOKF_h09*2p~O` zXov)07(&Q>1gsDQl*noC>6FcnDz-1&ci)qZ7eI}C>IHdS(K%|Dq(Mgjyo5`t7K&0% zitWFeyPq-xN;Z`0(FpzHkz6n|;5#FRz zZ?RiF(n(zcjk^k3mxRPdpadEDfiioDE>!(`K=ZaHpHgODL$c2RB%AS=L*Hicq~I!v z<`hQep+Ge|+8!i5=H}$dfMC{qLlg|e$dfY7TUe6@cb}W>(H*uXHg0r3Kk8{EY5qLW zT5aZZZmmA*uND`K!dXYkOPb^iJPX#Bwj|PFD->vp@&V=evsVSS5)*xTf)BQn1$3}5 z+{MQ@mU@r^%&`J$7w+OWE(DBN%vJKGThiz6DT0<`^8u z>UNf&c$aQSMCi8T;BQ^BsVqkK%hBc#k-h>i$29UTpL~L8Yzd5uw%)+O!tp}D^I$Yj z4sWdo8AA**K~?VOJXg9Bvf=^=+8OrX$c^?r6ci-40tSJ(j{SjjE0SEMFh#_p zjNJE-1&HU;)0>UcBe}ha)CGmZ3=?A@-L5idXrV)7mx;e0DJg2(oSw54=LM=Hdz&Qx z^0mf4jW$a@F!m!F9CYcY?~65KbqD@19OdT@{5gHw7@z2Mfvf1#!16zB3eCv%@A%Vu zblGP5_>%v2pMSmfVq|25F39wK(!(4xc+?K*7Wdg}bFUsdS5*tyDEjt2IeplU!F|>D z`fYJqrNc3cy|ftok@| z^!(+s_bv-*SI!>0NgmJNps;UI~}sZ%b2v7qGq!WB(dVZEz+J}@+-Zp%=Ox0uEgCCy4U+I9A7Mqec85|nrYtkbN^%#A zdO$(mC;xZ^gtnXcj>J7YdD+ z<0^7MFYj;@hkKb}_pq>Bfdf>cq)l-txqA1rkK0E(JWNjWP?5+b=XS;eb6j46ma>I$ z-d=TX57s0+2d$~PG&x)p5K>Is|2m+3#N1)AKd3v zpfOxD#RziHcqh@k%Oc&skMHt%Ld$$|-zUS&A)pRTJtfs%n?&|PAV&Z#=iCT+DNhJcI$2@Y{fRz^a`No;M0jr-btb7_+^&ow# z=0PsJQTs*Bq8HkZaX+h;6XpVRAz-E?{RPRM80e&&Z;$1}iH{4bo;%gL+DIi2)arCD zeBiG_;xO*IKZ<}sbS6|If8;5-S0z!OP2=XO`D=d<^ka}Kfc9a+*1>c*z z{L24w-OMd0Q*7N-u z$B$$hoQ%M^2=VK+k2!U&fsXfAEa2Vx^a<+pvYxWBKPJ}k+FdO&0^@{lmV1YFw z=ea_R=ev zx0nYQ`YTubGYAzhhNOO+LNJ{NJkavD|bZ zZxEtjmd^gZFm|VQK-cQW+E-6>k>qPTX$yCM?Bhz@x(`hEd}da^SoHAArJH{)x!h9? z9{4jH@p9zAOzw-{_RZb7h%)+Y=oC!1g*BNyL!=7&GO0gVm<;erwP%O7#zjtuDTdJk znY2(uA+Q6gEtlSTb!7)k%8QgDNQGWRRI6|tx=d|yO8=B{8wII)oFd8w1v&t?23L%t zx4W%&HhHdf2j<;-AJeh)bk^&~_dhI=B@I{4UiRSQ((X0)Ppo>P_gW0m_}3kl=3185 zt2Vv;^!mxe&nqyF`>M4qkc@%s?}JmHjyb=y(winoO=<%O&Nm+v)wQ74(5rg0iuIPy zYpJ7<3|L7rLH|hSiO94Vgf)!U_LUCFq^u$xPEbPdvv=b6x1_U=<;#%RW4+?}%Eu*yq=q=6;y5+ey;x@80TFFJh$99$edZhT| zGAn>ZDiSrOiMuE!{CH{m0$!&Q7D|nI(f`Ug+c`j?rpN(iA=0H zqGON%v>zeF3zLuNU1UaC>g9X}+Hbvf@a~)7xLm zUBC1Fbz*WO1C2Lyd;c&qKnk_}lvsh5<06HKY(gRz{rPn5BnJL*rO6O)LveKM-+3|q zIQz+oJ$Z+J`xOvpF@wvjDh;su4Slx@inI}`MiK6(xU|eE!UQV>Q4&f{T}qMyx*0HX zS)|EASn0fjsMvJXp*cqG_8x#c^@Q!!(OK(4TG+n`c{!YiiKYET3m$9=VlJ2vS?{!P z!>AlMk#-Mn-IV7HFm~*uSTP%e>x%R_!FLwpRc78&_l7VN5uE$HEUu^9m4A(8in>W^u?6q+rDWDYBQ7n*JO>e31Eb$p1Ou?azfjX{f7>O&uSb&Cm4+iVF z15hbDwgHO=>Vyqs0K!-WY)873oW4g50Z=)TV<5Y+%(~Gg5jY6x>S35Itr#dEYZQ~< zM&A^J3E0u!g9ie|idN&DaC!^LiScC#(|=;qTP*`4^h_BmaC*G7NGkLLSTJ2ce!sW< zX1)_i&|ms4vFD1lieO8JNDP$plFEtm7%$KYQ5`N{|6Y4lIVZl20GFIBrtg#%>UKAm3p|2#908ajKya|yg7#Xw+*V1T*~)<0;ue@D z0LXhA2wpe8l#ne&u)Y%1A7W`_%4QiaNb1)vl@;aA*loI2Ai{?WMQr*wqzWqipSr>K zBVLsM-wrV|nT6wckCRtO!|j&;w%*lUO>!^eF)t$a|E~IKym<75szsn&_U>#Ej}AkY_$ zCzNvk=PsbE@E9O$k%?Tq3yi-Aj=BTv0)2r(1I4Vp9)KFI25j6ajNk=0izqB{^BvX# zmda3`-}BP+vz%ZZJC}(Ec$(5N!v6x;w8cB*mHC-S^3}6(oAM&N6!+R}%FC ztXZEoK;uXW-jlUmd4iRt`KX_cmEd-+^q|fvI&T{+Mp@CPjTdbKXI(HF{JCb|6vetJ=)yeK9VmgLI_U-hr5idHn0*ljm3$d0JH2P9gM+HYr_K)|x|>M> zsMx?=RF#o(&_qgyaTzJGb=^a-^|Z+Sx$}yR_7U4G6n=9V#$&=sU4q7kq1qdf)xt0k z<&G63_lsWn^2e#QMTAwjiifrc8)TC}_s49?PSHlnm%%b^9s`BXS&9NcJWSrl>DbstQW0NGl5yEh*-q2KH7^ z&%#{50HL$4e;_mCSoHS>%ibBFA}e^pP%0ZBytlK^EfwiZD&Xx-GEoGHMo*?=?B3f| zUVSL(2^yqwyNLow+rbFuN!~m~e_2CR-ht;i{rGyemayYD#O?%ij5zenG@PllZNV^% zicfE~FnuQ_u%vR7%@UD|Jj=i+Nyn^LJgwDZ19}(vg+M6=+o#P=_2g9xC)tDuZoiiL zcXuqB*vx(V2AIi8ylrs*%N7pNqaDHPjUcZBl8!Isp zz^hurWG~8nu>N+{w%k_Zzc6cz=eQ9pTNnrF*Gv30-RMA$ReaCTq3`P+ksDHMc(bNH z_Lc%PEd&;164M}qMgYejxq+WGT61E&R>Qlskvd#z%rxMFx@nzMJ7D0r>g^r;>@f<-hRz=36G3Si`egF*Lc!dW+)3H^a!fhAw2E(rNT3IP4)(P#!q9^c>qNQzzPq` zfdyj2Gq*Lujb8D*3Xd@7+^?v!CKY|{G6E0j2M`Z#IFV~lE)2+u9_ zGubThqi$1fWwFNb+cnOPEPM3DV3KX}vQ0b^qf$9ZW{ijb0d!&ke8YZ#wCKxuB2i-H zj*3%5=0Wxd&KrZ{dxPZo^2dP#L=!Qlp_T_32r zEcjiBETf?qL2yhis&9bCHxQH7fWP>l2Y}COP!+SdD6R)sJ$W8T1Bj!5h8)FDgM&|~ z3}r>(L9w=|AkQ$$1PYSE#4p{=1B%-%TRq1uv*fuVF;){vm}H(DIsDldcoMj zPNt?N#4JGUI6VhM8;>Uedr{Fe2!)js`3)!pK-UZboDzyaiMdL#S{&<=M#y6kZ8?Lk z_s*m#oAeRXypmv7I=JC?sYtfqI!}B$3FI}X4PAuX2110ozKGbcm4&%?)#5_}VnD&= z4HX%pI&@OVJ&4aO8BVre^z?wmG%lNSE_=Gz&h^~hYeSZ}5<4B@NS8QVdbO`Spsy>y zsu29jHnCud^`?i_JhR@k*no9;Ph{YwnNW;&{R9VK1Q#wJD+*EqI+G$*&}h-J;Ooz> zTt2?iEo-Ltk`m(e7~K{+QaQAUwa^-ANd~t-ZTMnN^RgvkW6V^S1f}(Oxr_p{0AQ_z zXDc}XjRIN}OAWfnsABu>rkk zc-}328KBAm2iSl!uNKTBzt0o>H^b;}iZnW|iZqH*d$g}FmxJrSivlrxB3h^gu<@f< zW@~p=6BSm=A3e|;JFThH#?E~4o2S9KlaNK82q(dB^00JOK+vR^Mu)#aco(iXt%Bpj z7in_AR-o`Q@~p4w$bGj6cJEVq;v zyUT-f1tn`5aC&i|)pX$&PKggE*s!twM@Q|?nK~;E)I$kpjltb5G%Jr;YIQ0fFl*)l z@pI7TZ-(Rs0NMp-k^2g*pnTD3?wwVQ2e4+C8#qP-UK1*^P=H-OIi3+>}2Y>-l5QZO`K^6IR7W=Mi z>^x$*XpSpTXB~3{CoSGcKc=%XNd3&S$`e6q4XKp4z9Cv!xIZhHyG2Z#V$@TFK00~D z3qBT7+ZOlrmWz4aPKXlaCl9-J~I@vtT^+`|- zEqa>P$P7q(7#dutH6|jr2X5X_S1%8|>K}FOdj;DAb)}3kqeSJah+ET3Hsldp8%!tw zs?CDMyBzbSgxQFwD7oZY3n4-pq{{-;aWR4s(phlYCX&t?uQeW54_lt1PZutj!`W@B zPPvaPk`wZY10l{ zfS5B`9F9U7ZRCc@Cs{FMkc3O)l=RPDvN|e3H!(@?@}8d(X~LwcXyY^d!7o;uPwPY6 zJJ&P2xA_1wUBDd)Dd#EGeGN4AWl#6jnn#&DLK>4W}fM zm0*~e6dk@QCVVGO2?jP4ZoFS)6#Gb%CHf;D-}<8>Vq;@OEIH`O(~FbhOOepYJ*DjZ z)SkGTdTKq)Yw6pjiZ^K!^OArjC0P#v?Y04FDv?&7=#6>{9r0w;$zRM{=c84uRk;qW z7owSwp!3q214(r!@~W)Ts_;E8AK|ofwoxB)fWBZmYx<7xH?O8Rl)TFb)kLIl0rU|O zU3!3yh*qV(Dz51G&t9|q-72;3lK&B2?EW-Hb4{(;yHgzCAONVvseuA`*L|_3EQldn zwF_G{GPw$B)8DIF^`DZeHW+~YbJ+9WY>x%3S%3};)DbZ7@_1q}<47t%#NOyA_n5wX zbFuCI^cdy!O7w?NtTuzL-NqnJGIdL-4J0|NkZvm0nCD-SoftARN5%SIf#~n_Q^W!yE zLs-GeYq3v;t$Zx@fh3XKq*blf(0WcGb|eoKf;` zdTH7wj5OV#^=D7Xhuw--dq--T9&Sn*-xL{<)VzIj&&VlH8u{?)THEZZ|D)*K-*LuGxa z(X&7EE-%afaAE1kq#rWD#v?&>5LzZuAuW2Ki>@CdxQmSqIP}3IU zTl)=Fc!t$21+)v-y!6`^z~CoMOi{lq39YJA0= zblW%Am;48**VwVf>2oO1rQ8!(17dZvXuqMNKo?W~b|q z=_lvb-G5E*2Q(NquO6P<82qj*WAs;1 zVA366{~V>-DdmFf=2P(-+b-s;&9@uBxfW!JhYK903xmrldBjMN}8DBm+`n@J-1Z)Qa|6SuUz)>&xlny6UQcIEDeYzSu-&47%nUW#Hd7VXkgkon1h=jV?+ zd4D$lMB5b}@zU8xcMUgmNz*RBxs==1OZ3$1=+j&pei|ay%)&(Rr09|C}uv@C{kozFHj9KZCu7#9QK*31Us4!P#EcLLLg zYElPRZ_Yh+I^__+Q|1>Y)b7S@+oAW2(Dtfp;(({Y_I|S~$6?ll`?w67eL^{T{;PiX z`H{ar|DAb!RZEe5akO&b0!Fpiw!2GI@hJA%r^}vu`Nvf&6+-pHGxh$&`6BO!?{g2t zCO+QPQsqiB@)hk{yo)>5M=rVJvE=iM%r`y1{HNQly)Ya)?{8v=WpKY5Kika=9c&J8 zI&Ez@IpT0H`e0zXZN!0{KL>Z(D&b`euywT=?1rGC+KX&VLD5`E5o-_c?ms_$Tz5sT z*s}41kMk4ZzQ8^O`sw#K|A|*iHS0M=79+U08hfZdPl5Wd`b~t7vObAPS!=B$!{yFj zQ8o3##gKZbT>=!FHMGWL{50d28wZ|I0~38cae<_i`rZ-s9TB=OI7A~fhnJ=^ zD^e*;D9I^h>Mp#P@-eefWEvkC`-4sIJ@}TB&l;^E%9{2)(wbDNM5Jg^5GnLbN9yKi zma*>b9@9__k(rdKK6dN!-7SO8HS-PQWb-AwR#?QWoc&$->aGhX+l;-+(_-M*EIZwGs7Or2V; zG%nN#05IKmK1#9#u4Gj;zpPhZ6L}GqNFi;h6bu;)%ERS3_8qn4<7{suO$03DqM#gkgajxeR|+8JPSEAV zLRf%*g?b%c>JLQy2`X;usJB0Ez9KW@0cl==;cD~#xN(`<14yI9)4=j$!^7^bkvh)5 zVJnVJkDP9vtY<1SfjQCwpNJo@z5)nZD+SP23jeB3h5Fjg;6tyy&-ka&Ltacjx$HAp z&z%L0^>}619>$Xoj5hn;Xs!r7^r$IOX_s1iHB3|P)KS`+>@OTHh@6+xj(tGeCK?^Z zrj~$xZsw79kK7LJ|J-gDW0mZ`WTlWj*3nbkXRIf)i^W<(l;PB@+2V)P_1`a)IGj!T z9sm3dbosDFda6zCSFCytV^a?)4APS#o3GxlZoKo!a@&g+4^$Rid%m*)AG~Ct>~XFX zQ!44pSjrVCi`Jc#N}El0@liD~i+C@N+wMFu0BI|m*qzdT7GqUO?BuwH5?Si8@d8k< zl6@fdZ(Lqx*c*&zHDbk)13GrNm^nGEdjQSK8ZOX`?#x`90hAnX(U2Ns$v7#T)y6a9 zv^RkuZAw;D;6#W5T*!t>=A&zPJlVfra%;x8Oj~8b*!bC&qVWh@(+35_SpoU7n0%lo z0x>-1V$AkvtThJN(X5xJLn!eGxmOz51b}4qyy71oPcV6pO zysi&Fn+D`AdHwCCvRVv+l0R)hrG6X7O{YQa)U11>ZQrkrxqm4z&a+?FdAYNDYO|)E z^o?iCwpG89rbP}mV>)lT;;|wCHDK3+=YSBy;OnmcErE7--Jr;r-;- z5Bj^kh1Ndp*N)FDcbLpn-5scN&^W73vv6wsEGbs-Ijd`7&`oKdqnz}L{kG@(L3Grc zt05KxpZ^3Men9wr<*P+zR^8#k6W)u8`|s6?Ye%C$`8{3jP5M~TdI2!Lk%#p}f1A7E zd68kBF4t79awzZX*z!fd>x=pE=fd4)KIboaX}lci$h&8LberG6BY(0b9@%;9y&FH5 zc}S;X@|eu+TCT~%j4DTuFPe)d8kcPFQBgLJ)zEHVHb!Y{HcDoT!U3Gm!!I7Y8_^x_ zf85*dJ6TkyHwQ=fPjm6X_JKN|GEqH$hSS#H*YB}EytL=8cSZK)l?gAjwR3V6 z^t~LBziJ4P0kM-j7X=k)vxQ^{8qhIvFREHST(eZ;1g2PVb#B;q{t?AhGQ*P$F6ZKA zHDo=nehOoqk8@S7-n|;&-=o0=RAUKT86|ghkGm1BeQog(g|CZnX~~d&tig>HYXQa` zNU!=?k7T&0pQw)*8bo-9NTKQhD1?jVaPeJ$)@zBU6<1vjkmz!!^aAG^*hwrSQO7h& z} z7hOF7hX6`QC(Cafw&$Agc`E5VMh?l0BBYT(GAWL|Kc2h);g=Y|BA>e_%a=IGRZjwm z`@Hqf$7#j)S><};qNU!kES022AEjm@fvcH-Jli+n?a@F?m*H3dF5-l_>k0cPKr;u_ z3BYjB&Jphzff7SROPz4t+OTQlSZ|Cp zB=Mkf|CEGU05ut0(47K)%#E68q zHWoa94U*lS4jhr9C#m@}@x&4|NmYs#Agi+)yafn41o7b`#@8F7jo z*m)9E?M6O-GFW@n%=q`oZAk;WUHq(v_$&nw|GdVj!h4-x-#R{k%jz{-Q1FC0N&1W_ z{dA@MNeWa7sczbp+pGEY@k#q%bd9|WQS)Av$5qdh9(*fR*$dFph18%bV$#7M$9BU8K69A)h2*mQV>3j!tUSI$M1ez|$g0wGQ;NvSrJy;5Ph`C7^F|rl0A>={y}g(C1Y|uCSTzGcIw2)r z?wV6T$qB7K`ce1fQ>-uFS^+6n8Z8g0+&*;l(izkW7WEKleK7alfp@vNi5b|kp56k%HR+R_W`RC|>laY(Rv&&xSV z^GmdHSdc$>)1u+I+$2@U1WC2-OR>c&4{m05P1}z^{ptnqzf$FZxitXy-?Xr!crx}P z>LGHDYVYZ=X{)IPDYiHi_ATU60Cpej+NaE87dT@@RT-85gGY<_y=EBRYzMty!XLe<2PRG68yRTp(N30vkt&HOJ=!i8kK0;Y7;~Zp)`# zDwt%M%8&dxC7iW?248-{h5u(K|fVQ9-TJ%%eT#{mVlld z4z$TaKJfgrtyMv&9mD}(<01b1rO%w=bF(TiYp%^WL~i4I8xtX){*$geOZ8#3V&8KJ zI%?!6WX#$8-TBqhauzWPX`MDD2Ho;f^E6-0cW`trNF9CisK;KRhC{k z!evx08BiVoxz`jt^AM0zq-Kqtt^qJ3Z-pLV*60MOjxxK`1qel zZ6-OkN{lM8fTId?um#p`M_7OP9K@>ERZd>hpRc-5;Ilq zlv?nVZqGE%0?eiTfspm6JaI;T@~)+h#(g}$-NZ7A`iEVvzd7@*r)FP=ecnA*Z9BkcV1+oTy~zka zVfiOkjuaE|RekRQ5*Ww7b@SVYKYVL8yn+ZXDnP6#ur&hEMxw7MVO33^Z6}og(#QK^ z%r)8DM(~u| zk_yO|&*RrYEC0!|>Gls?-C->Fj6Qc8GbMfh`4eY^9~80WROoXn-?W#?tH#oEGkBP~ z(Qe5OyG_lV5CUj_k+ZsH)v=4BZ)JLA$(-9^HdjhwgJyeM2j(*km!P%Hn;j*+LpfFd zEm&vo@>JjDf~W>?p+e=&K+1b3e=r5$`W^(UY(o8KHi@R9w>i_4iHB(9&D}<{glA6R zrZm_SUnUW|oU1BRX%3sW{N@wcknvx+axIt!Y+Jc<+mw&3b&Z|z3_zSjc;BSoZf>&q z%eQvBsCA$JeXwot8)6l3`TN3Q+sP1Y03V-OP54h68vw2NDEi6VVw`Gmpr_*x-wT}t zFUb*UPrY&6n`WTLgEKa!9Yu(#GN*)I18HmQpKZ0r)EM|zP?OIz7F3@DawbLlWpOL> z?%|$4I3_<+cx&bL?4LK{xTMCa|Khm%C_YJ*o8lklQpP2cdhOYzGN^UIL1ATWRnXw4 zynebUZz05hX)6wNdx38kk|KBQwXhVKI;Pll=hzNGt0L@dNxhseGpt#uNt46yO$%#M zfkO_2b(Gt%FSu$Jq*?M$t`c!*o=W1VwHJh)9X9goBQ-5v!ddNHa}YPFGQE@CxKo3KB&oAT>SMW!PnD>}bDU&I{kW;!-I zMD#k)q0@sRr^b{fQ#qFVW0nuytG8ltpt3uB>%4`O)+^1DpHg)(zv4=kb?FVfQSUkp+8X!mn3&`5OTwK-6=;Lpw*fbbR}be|mcV zUgN~YiodX392eSm6%L*zn@*KE@)FvpDOb>LjK2NPks`S zC0d2OL4GeinC4!o<(=gE#>j>eWrd&_h@mNy%;0JE)jz`^XcTCW+B@&x>nP?e{rToi z%Th(Sfg*PIHah+|=7H4{l*?n9K^wmSB{xA$w(%kDDlY5pZdz1+Cws8)&@y|k0P|{C3WrkdK{T$5h8Hf@$)QRl`hJu z->v@2(bl)x(Y%bhIksoV@1H;Zp`{CC1vr{>9(_xEf0_28?7#Gkgxd$r!!PCiw!))P zE|~@#MFN(zc-z$c@T2kG7S)KZ^iTE5tZTl$lF$m5{h!eKBeBSvU!ulzj^^b5%~1h# zDx=x?qA^c0EvTY>A^$6LzXp3}rM5>#pXVXQ$~M)NaxZ0@*N;`bIQ5w^Q9oTVm40HO zn56&nJ56LL{fBvU+C$F`D>Fm6iw6su!`4V36mxI7@Tzh$)DrbKm;mG7NPG9%h}%Ef z3ubJp?z(@}}C2s%GdDF&d3b0`zPF2%{Iww8NW_XzA|DD+?mVl>=Lc5t(6n6vM}7)S&noI$Y^ zUS4|UEv)``k|Dw}=#D~^p9^J`myvI0530f?YnXg?3CTi5-%A+?=&&faA}pMjuI`+& zD8CuJu)uo zmiyH5X>9J;PGwGS&NIDvB+S9TrIpU865<#5T+hyF{`})&liKR>QtRvViM_u|A4jUF zPW?oE9KBYBN?z7}uMmpZq2~Oo(EWUb$&rAcD+15sm;f5@yZwFATAkHVNq4-)5S55P zqcF5I=4kkiFZ+JI%!GS{yR}}nJ`o03RzFSNaPi({pp`bYh}oF!R4r(o;~%qK@qpQK zegU0$H*!p6#wKE-`^W2JU#|bVaO^y!*ovSbN#~E@inN~4w`9sAqq8RLzA25Vmo`PrSi zAvawUtcx_@K4z3r0Ql^24x#I9Sq){mW zRV9waAw@er-hMIK_t=V{oL#g{0>UNXe9c;=IyA)Scf1+AB+UmH%`8?t(Ugi8BA2J@zzs^q=BzcjFHzYOa*365rUq}7dE|9Bb0jhJEZ2m7!n^2+9{;0V5e^|h=OO(@#AAblmIdw@jNdOyhN{L;H zA~U^2bYtTV{^)mG)LMBibon(M0|*P z^x-hjp0zq*)se_2-=DmU^A2;(OoV^c%j8mPThblXwGYO_yN;scMX$=NmXTH`=^3eT z#5|AfQIU6IsTa)SMJo0Z^zw*t>LoUc6g-QvjRqD_CDr}b5j#q}6kM29oI*G?ebj(j z0&yCm!;IQN#$QECoCMYor2}?ZJUGnijM>Ow*!w?4M(Lp-04TzLRw|B|MJU0uN;1~+ z6x0c$naG=_r?05*Mwec!h*kY1mLEM_Xx?NR{+W+FMj_yuzjqwG+e@;7CRDu6QDh2!x?w;B`)4rFIm!`g_6zV z+{IYbmH9c=YaFOXTicWusL$RJumit_ZoAW{mMYLaCh2Ya7_=wm`%%sN#TNNQAMNmX zZ_r3wWNWd75dU|ac4!y`A{20>+cjEGlNU2ra>9SUo_0OrrnN%|#vU%>)imhW&@Jgd z<+p{KWZF|xg_L+wGQ39T!}9Py`nTXRPH{Y+{XDT)Sr>Qewe?t zCnEDjNVga~a>OPvu;d5h;BK6{h@>sY&$@$`4xso1URsR+s?2W6A~ zwOB7tpPUcUvL*0L;o5r}Ic;a2M5Uq+&5O-YYXsAE`XtfFD--`SqR1h zL5*WkfI8i@&XGN)v=NZ;{U39Y`HVQal9_O$mVv%*+t~D`b%8zi4DL$ObZvoH43F9dP%~IkNakL;$4RH|i3S4hib<0eMFy z>dr=G9M3OG`FS$$MUGq}C!MAPS`_jz!D7{9Ax3IL&j!f}VzM6i+q7=Jb00s&5Yd8?}6&~ueTBdr?j%~bWtkKJt=2|+X_4+C-N89a@oGebF2jqEss zU3`pQ9rdUYxln?x2h>+@az?CR3obTSp{c0TAC1%hiQum@fWM@8D!1+`PrrRkTS@I` z1k{g9n)S+A{tsEJz0nJmlKZ}rg|qkS0vQ@vJep1%HAP5mwxcZj3TSXR6q45QLM<2| zNsM$#&$H{sfN6k~@<7wA&VG{}Z371tz?iGhc&sCPoe$31@2Bd3Gx+_cyXv%m?ISbl zsGVDstyX#xk#56-_<&|{9NqEW$YcYm?*TbOqQa8GiE-bq?|qfan@HMB^MlDEBRX3K z2L}S3B*PyXZ{FE|t*#^O7c-8ZL*G0Nj0|Dgj0~O|Q3MifwE*`w$TlPxB+1kt@rb7Y ze68T<{?Dup2c0*5x0lx6_mh}>`NCq=_3FhvP6W-ow?J%!Lg+Pnq|RQWL75sesQte9 z1Gu1?SZ;pY{);mS#cdHe;F<$U6{{tq55)&G+Jy$AMij*`HbK*}8WB4S2uDHP1q2`a2p1)F-d4G6 zN0z-ZO`UxZ_K~3CgJ}jvWY(C*?hC*bHmr^NWPyRa1iIWl+!JN1zn{PX)Le|pj!Mi= zWVm0d2hL}zT(h2AAfr-bbGZVHo=oS4rll;H+V@Zc5z?#M$%=(EO!p8bOo~;~Vdz2) z21w2k(rw~U!M1c48!(WoG44RqlhIyk0+{_Y)$gw}K#l8C97&2|iZD4KJws;cz(;i= zJA&HKR0Vhm3cDymWl4Gg{PO@RQ-a9=0yFJnb+|Xg-zksOAs;|@7C;|jpsfJ-yyGKCNG15-B#u>8$;S>Q)3}W`3=OU&Ib8u$KvZt|$80HA z-HGP4B`{X724}q362oj4s*3=~M2vl&jkV&GiItDab%X#VTUw!6Bb?;$HII&I=5aB9 zKEHJ1yvZ}7v4!;OnJd*E(~8GNo-0pxAKmd1RYw?fKiGN)(ZfcFqFY+MnA}H9gYF&S;cBsPz1xz6;2MScr+Dg5AmyyOftyU# zUP|~WPh6>h;!|{@fkJ`c-}dmmw{kR&0ca9WGZCb@rqbrmk?qGdtm0@{!i$}EE!`Km z>vfRBT~2-%{IEU(T{n<8t5E;OAbwV;Pb<{1GR^J~%Mb+D$6w&|LXe=YQUKUUR1t)5 zX%ME!Fy}eOI45R^o}Rml z-Nw3`DFHVV&g!21UVcqN0O$@JjOXK`eKvT+Oy))S9Npg}p&crotpFt}IZ za;Frq0kHLjnIQ^GtB1tRT%0|l;sXS45~$Jv+)!uMe8k_kjCZiA~8{}Lj6pE2Ju!|4u@?G3pmP2YrA4Sw7B)FpjoX72L>#7RbizUOX z#+5+hzi&nFQdb1VUpSYru_oy)_3Z)qgb9|hd+!h`lSfaegS)tERDgD)!8Pe?T%9xB zRnhK#iiArOyMuke;0#;lF)P!>3vtk02w2f-%|}%#RH3upEtlKQ>0T3_@yhZE)DZzm z1h2JH7vTF21hINManezghSh)qSbAdtI@^!(*wLgpLazmZPLSnG~H%yt-nb z?_xdf^R-^Pb(RU}sK#Eguc=cYKkBOKado!O8*2PctYj`K=GH+eM^^`xl z^>j(`?xcY=fX*o)c0bqI&&#q}Vjkz{U2$`FEYqFzHtb$^^33|kj)aj1g%|((0~Xt$ z^MMVJBIy6d+2WD@!pwG2s#Sdg9?1+GvUh2U!XpqzA^fIyI$?eHpPFYIGRvF`L|rHE zU)^)({xM+u@*3e^2dtpJUZ{IWf_r`heEy>*$jj2_Os4AJ;r_nPul2D5eNWL%C{u5nfbKkq*-R^4+^ z>(%x4eAbD0^b=4=3$%PUbDyn-> zu7GedA$7dxZFp^a?!qwc8oCx?Y;_z(H$gsA56gS@cVVX+4DwGm4J}^h)aWsOVd38# zH(QV04p}d!ofd9A`zNDo=h5z+IIe;90HSK~;r^c78 z6R76S81_uuUzjLigqdp;UqB=|8P7cP|hCXi&_ELz$; z%M8rLmWM*Erl5=NVeI=YPMj>*JFDzW2uVbd=8BeT^QD z{d9r9vG3h-qh104!o`e#4Pk$0F5xdiX+u;2hN&O&>o-F2H4-9*j3BI@F9}^xfW@&x zq(JXJEz5)fdW8@tFT;j9K4=;r7wxAGaUMwOjc*=guWpXMeg5Q~!<=;nS=_qB6&RPy zaknP!nEZ&V{(zoeXVZfQ--8x0gPms{oepa7JMI^nEQC~5=>mxW~I2S zZCvJvY82aTOFSp5BjMkyu&9j}e}qM6KHeH0yW_`?aDgiKCKp|slMxX=1wwdbtse^H zt2VaxfhJibg89w>Nj)Ae=0KPT@wgxLv^htbqM{`cfo!ht+U5Fn=?!Gc=uf=)$-U=w zwPo82N1>u*u8+P~9$IC~Fc($<1a7lPm`45X$IH1#3nS2~5yK07eCpLipmOpg7s$3a z;y4!SOm2@VB>SmM@=T7Gn8F_U-dx~zRphCyG_=LoK|;_lK+sGQ3u#G{j>#~$es&Bd zP|~?^Z;#O4oM}4MJl%Zu(sWAh3dgVOK;xWQ8AjhtYzUeaDmG#ba)P)K>#9O2Q7Ij7 zsnN{?-iKpyKJ*`6i{P>~im3dfv5XT|?d8W;?i@r2)_Plbs7Ns%Pjw99fMp)t1IsMi zeYw4;@a-i{FhMyWw%z3IM+DEW6?>^@%<}M75ihx(WV&OCSfUjnMzM!g<;XFwVJd+g zlK}8gI4ja9OsW(EVd|1ZX$0gV6NOoKE(nC6(idfR3||){L)msJP{+-TPRSv7X%K{C z&7O{K@+*tv0wI`o9RT10!bXgi>$4aj2TdoaJ1P^b=A2y8V~n0c=b4i`14dh&YEBvB zHJA@Mi+CEXQJlwmT$6OFhv|-8tVs_RUYb&auqvL2u1$*7%z7Kl&dP_kRP7_u7XcpC z67R&wv!nu5LZwuejP@l7u@IdU0V(_$vTMv508k@$1rKUD6cd}j2Ep%Hh-H%7&av9r~Xoh-Luy5asL#9ONQg z?}+fI-08ydtH)HjI~|So0vHqagJed!dxh{E0F$IdB}H=ffnek0*Qkx3D-bO3Db+$G z*9>N;I0{+tiU{afmZ`>$2Z~ZljvSvTMk}o@D(rMQc|WPpgkiBZHWz`df|`5XKkrN5 z+o1Q}_txpkLRDXSpIK^0nTL-ER!isMz0z?}v-PyA(tZq-aA3M`cbS<%A^uAK43G64}Iy1ZVC%Tv)%EFfyBK?Si7 z6{w~2N9MiO6=)9$pua}|wUpV?;DkDr=a$lCfx&cC2m^NU1*~GXptZZD{#FvD8~Fh~ z_IWybxvv~@K??LHB`OY6CTNzgOsn`lL>-VS6$lq7e~AFD-9Rk?;lYhxCCN2XHCB7j zp0~jSrO$@sIxN(ADLFhm5(^c!Llxd!$f;{wp~^Aa`&SKXN>Xz(VtTN-GAM=1C+{6b z?`Zb*CS8%KWnb~1Yh|eQ7xr7Eq(9P{%0l}pH##7Ji0Oksh3C2Yr~Mu`NBw9%aBZEz z(m0&o6rZ+BHGz;HG~gG)EH4Z3HNIQn>Z?;6c`rCs9R1sHRVYS_~(^w zLT2Z+t!PVQfk}-kf-e3q7 zufjeq>;B*ualqU^J?e-xknX))TA#0pz|DY2@mUaaS;G@A?nK>XKNItfz9 zoU{RzE*TA{hoeaXhfNMIOM~Zm1pGbujx&~P>z@b?x6}yLSQ1M@`a@$4KEg<~3{kt& zbXjxWx@RP`G`O3Y>o~wS4BS%s@F+x`X*m-gSvNMF7zb%j$#+<$l?LZM#jZ?}=4c*G zj!3`y@T8rH#$+@EZoc|x>bOkp-I}Q2k;p!j*S-|{ZQcdj1$3*!~LPNvg$mJ_s-1A5GSqMMUnbIajLP%Mdf{ zPIp_0mW~>#hPB^4u|WdHcNk!tTink-P~f#|g%q0?F~2h;N7~yV({?Z%!FyKOv}EC% zxH=~Rya-sMxV**j*REEnjV8k-$tXFTlpQ;Qag^qt5^u8yz&vhZBw{oDXajXCjOqiY zGtiELwI9auVFDC|6I*Pwf+zu}SRRoi!YKjDTTHb{a`O&>cLIc$Ka=mzZCGgZj_WS; zpm6Ah75)X7+%=2f#+`hLY^T|@@9F*(FaNa%p%;s~C^~k4$1wJal(4Ha&!ExpK5b`;$xcCqD@Cxgf)bw1 zqqeUOKZ0Vv-m~OA4_nJY#c&K)3Nx09^HGO#Ket#C-amXO^l#lM*H zzM@q$;ZRf+4s1LX(Gn6hnU%drQB?OH6HniL>U3enBHK0ws6D*9l@l^v;PI0Q-bEEP z3elPXJ#Tam-?7-{cLnEng-Kkoo4B|v2S^<+E>99iEmf{cKG&8^0vN+^{{%*pfvWU| zV*wy00Urs#*F*7R^FVYuFf_WCDE40l6)c+n|IlZ}C4Uzws6Q|C%|NRkjI26@RswVH zQ{qN%;%%3~4(V%_clotUVl*_WClEjzAV zS_CI}VYeHyR=ag}`W<_=-44oqcr@XrmUX+eL-Ck}x3!Qq3*FNd4(H@X?$$#3x z!{YXy9@;^rY~}Us%@$JBidop{OtD@NgcUoV0HH(caAl6vA7KvGAIO@w5=P%A9IM_! z7NKeYeBhBKwGt&aeakyD>KQhG55h<|c!zXb^>lzL0f^~vV@Ecc3#iTlWI=9YJA~r^ z%^^Bu4(jg6_Mc8Men|lgtxY6lta{eWyaNbdq;v9t4M7ZQGeCWb$JeatbsvNiN%*D9 zV9(*S!#-TTBzWN}is1L2bB;lCX24sTn6|*tWG_!WvC;vQ=C&So(}7*L!q=*lD+)yy z1NCD?oLl}+4>qD2LnKT(g;bC=j~87E=%3s!yPcLDR_=d#|NTi$7M76f2{s=_+qd&c z=^#mra#Uo852r0Xy~y%*#hdMCs*j!t)vER9);e#mHBmVCJcK{}248AAd|iCPdew=i zdrD}Rcdpt^@*F;qM;3M8e^=4tzthI$v1LNXJ%8^x{E;O7R_K5z~KokRszhb&W z7P6R6{Jp)Z9R={oevG9UJXVEPHhQXtXlU445Az0I%R91RY}y$yW$n)PAs+WnAPBtUph- zo-o-c*1pq^Dc{ZdWPEbYZ_%BRfb8Ef;eBb-1sf0D#4Kowp=AgvQX10;sAX@zYUC8F zK3wiC?|Yq%ezZRMRW|;tw5LofxQ7Kg4`Y1CuRPB2#%$LJw?pZOf%_BLKj!g29U~>n z_VgvYIV1JxQ#Pm9!hj_N z^f^?q0(Vj))~*I+K{{)663Vm({kCdpHZ`&y9S*15?e*e{4*K69uuoN!HNQs0W&H7O2b+uAzy?_`$2#ty(mty;4#)qj%ThvA^3^ zZ(vs2OaP&gds%0gDH?aJEhE&1YYsS7A2dT5k!-)a1<*s`tx>QE1HvnSpXVV_vUkOz zAUlq`rDA(y5!zk>1p?Re>9_6OA345auNX#q0oX%Bgq>Nwmj$?5H$p=%p*x*$A!sm4 z0G&}q+q4gEdfZGsy)!7$n#-)k)?5s=TT>Kgru0{N)d6>=QQ5P&4z5b(N5EC&bPT}j zvOxj@5g5VfbZ9Y4$&4|dxVT6=Hz?^}qc?ST%y?EkXEUsaQRb_;cbB)L2#(zEoj;tZ zR=@*WM01b_Y_kK*79=`m61|#zK6OgWO1d#yad*)V$ZGg7-df{zA9RKdz5I@{c^mv= zH#Mo|s;D2z!=iuOgiwm>9t;SaU5Xn%d?m|$s~=40_R8CEUvy=Zyu}-J=-M|lykR2V zChXDZ@mJ+~i+Rc|Gys~t12Yt$iv*+t;O9p8viv$tY19HLttB`9`Df(ckAv-gk4@qp zpMO|V`T$)hNE(0sc(t~s3h9k@I#djxhF*|@JQO&mQu*PeQ6*< zHLUVl$ogH%Q7Dy5ju=0{fbw9_>OQ*CXI=f>gcp$QFkqcQ%dxJusPNy&!JnJunx<Y;ag4P?UmxBxL4m=UuDINpUgU{PR`{zg1*V@x00x#HMS3>42x$T|)xt;~qvI zPK{-*DAwpro}ARNp|H2PGCs5HX0)Q}Xx77e6&mkt+Q+$`!6-3bjmv(jHen%mB9IJ* z0wa$18Q)3aX-9FrJSIzLf;qE20262vQVX_sII)}_vgpT;>$t}Ocg<&1>lXAEon(>) z7|Afskpz+y9*$!s6>?LJ3jY+FEQvF$O^e`G;MV=F~Yj*Cd zs3{KG03QfV@|udi|0(wE`|#kX{ofZwd`_`7Z5Bf6vrr^xI`jIowueVk-PJ|qhEZFz z`ggjIeFgxAHu~IG+}iowhI!#Cqo}c2jxhjoFLj?ae3>^jx3K(8>&(|*`yLy8!3DIp zgxXH7Al#aSV__tQ|GdYRRl-S4jB8G*1Fk6l7c6EDoj??dTF1R`|xT8NY9%1?}m=B z(_X(U=7V@m)4&>z2A2n_Sm`*n&+|W^PEqt+k_6utn736{w#N2HXqw#=>#C)$SWKQ7 zJ*FgxN~9s53NNG?Qjj&$Pm%Si`=e^EGCs#DNf$pKzX<2Nyg;dO#k%Ee2D+B0x#b6h zeM=auvR-?$Ch~jYz2ok?RP>|fk{(J{xtWTiwx*0gsHQN%GZ{+T5k+=v!q@S4s~h<> zCY4(*H!-M6m~qYJ6;;tS`gry6tQFIzwAk}U{`H!vx9Psd`4ewl)ZqQKcIkaZ^Vo&| zF?HtAQ2+72|9oa&EHi_#YcLr5kUccUzGPPj4N;O9OQQ8NV{D1Y5`~5&TZKwOHDf76 zQ50?8Q7TDAtG4OR@7{CIz5mZSbLPx@-t&3C-p}Xbp>nk{H~Hc6+|?xSXLrv06L0H05ocrJAGu->abK-N0G~3F43GjQ&3$d(HeUAK@M-AF zder;_ED{#6d+{m=^VhT_U|2 z(zon9lVcUW>-@P#RG5lgedl`=fq_VNC9rr-c;u?x9F5jF^(-T3_3D2SMnOiJ#vMR` z&ugS{qgcv*W`}yZ{itAi$=}kv59|r*nmMaNUv3GF`}@gYYmWWZCl@j{S-pyVwRC*8 zr5IV=alJUM+o{mc%{H!L%Z{JaT3;nigzQH{;7zjA8h{`$F`6703`4w__HbC*^+ivG ze3X)PLX0iqV~(G@#zrUi)9XV^^Z{m`)TZS{RDwH!|`J1}tnlR)mw`<>D{6~)PI@ZCow>Vbh z`dfTUbllxB>-EXJ&ARf?Yy%-IsnZp2>_%{U>q4r|socu0ULf96e$~_Ex+y~Ofx>^T zHy*UxpZMtZASzEi-><7$_vq7<$NNPW;d-9?tFGyncC=6vR9P^E9)?8EW4?(2s#!%B zZVjfB)Fm1pMoGT+cmr8s!PV5LK1Wqv0HoFz{$%Dko^2UPFFUH}Y4^GG(S#rN+hsR9 zJ7V_V)%!e&~Qxo->|~c9uR9$g$bL6kxCA@m?j2bur`2iD)CAF z=H`oJx1)#3$1o`p>9Ec;J!Ml*^m0dM@y3;sBY(9|5Wn@fJAR)!eni5;NY@f`*R8O~ z*YXi)3WKK$fB;-ch_PSccs^?&Sj02%;dF&b;zYo*`Kx!6G*fCO0-GdNgcF6{+PzqU za~O}*0Bya)A3dnNCe?sT*MinTqLNa95T4(Gpwc;5fYF3D7)7hl8D*H@X(e~`*tY`n zT-5*=1(wgqE-cA;DiB;?_>#h zP;^p_y~AasiRssLDcy7THWh0wV44Yn&4>w~Qw)U3nn>;?^{x7mMc?9#>9gyQ5?2M; zFJkc}(bfhe9u&ce7|u=!>=AhY%7!IA$c!!3LV%Ay`0F;Z{+ z9q_hqSl{TElMsAvEMTJp2Yr3gm72=n8Yj-9-Q&5KQ~)b0si&%Y02h~2tG|?%rkl7d z(mc7)`8irpz;;M+3@S=rcEVlDzH4h}6*546)RCwD5*E%1iCkv3X@~}74>NcaNx8gY zao9*>m7_K(Wsq3$MsMZ^^W1e)ZNG<4|0qFFL8WHi-q@u_HAh3AJbKi9Eo2TBNP*hy ztk4>ZPMCv~FxQBfx)O=iTrx4HI|xAj#JjD|qd^bN1==H1!3H5MTut`;;i-+j)Ay47HNC-hYtVkkYtdS@&)1!*w%Dvs(BYspN(&=vEYK(926UKJh3?DH<#hti;aYs;KNb0l zpl@x72t9RwatNk4J7n2kpEsK{J+Kj#T5{x>g54kb+>QY70>s%5!<_N!;-JxCi{aHO{K-@yq6XG%0IAj?04EduI{!p=rX3Q zIYiKZf)OQ1%`uc6i?CM`?;l)|1$Wk(M>+<98BlQoH`y7i-%!=8jKzmF#vL)5G{pe+5`CbNgi_q9A>snLUt34oLuX1zqM`&V4*}>|-x{ z^5ed|uoq!Mg^N7gI%C7v|E)u3ji|iTbiNkMWgllJ{u%Ms-i$xlUvU1!v$q@3zk)RfH6QonTE5$%*)jLwV>};DsDbSCtTdgQFJ0_)y0ib$)w+B2 z|5_H^@3i!~tA5#ccDq>h+3amwrq1A|L@svr`Tl3G9rqzW_EC?%u*~aEN{4mS7)6RN z;YaUb6N0I5cYmRDPeUor{(}9ErUMH)8-KoO>B4TBe8T5(xxH2WfR!EN^!Ix|#JZ6$ z<=-N#>65$}#SrRvivW4}7Z=rB@%h@FLmyu^dTlq?1iU{KAAjz_h734yT_;=JJ4y^lZm={6rIfHN`-P)g9OM}#yEpc%~z*{w#cqzaS#H~vj>&h!PR1OR2K$J zf(3U~VLBq1aSy_qud#u^1qtB%fb!O=oGjcK83;nLK^Zf}#T{ zKqohIm1e1?E<-Lg_909z(2?!OcE+DlBd!3h^uefR{#HW0h6qrW9Dp)0WJ4!C7YD}$ zY7Y(6T!F$v^ZZLBkWQFy;80kjE5EE@CM&!9G%xEY590w@E>I>6I^AcH5#kbr8lU5L z<<^_sOrhbh;ym@I_to8@dA^y$oYvvQ>Dxz6W2uvEZTlNWiGW-WKoM~deumUV9ov1} zQ2xM;&?^CnC-r!4Cs%kkQ4#Z7(u$6QiJi^bSPYHU_iDR zapy!0HWaE~w0B*#%!WgZ+IQ-)av#wBPCb>Aa4eyO)x;(I#7r;Psy`zkB_d!CgG?eJm#` zpNAj--^y47&Jqs^J9(uIDa}I2u7$+H6<#Bi9e?|`3?v+eg(n=DEKrK`e$O5 zdOz%?&nIm#B?!6)ikC_G3{COqQ*-AFt z&n}Y)ORalq-1$Gi-er3D7hrjwt5J2yEnduv5af7w+^ zm!J}93Q z2`0+T^vK&Y0;hEV4FeAxUO&7xZvxOIf!fJ&PZRYuNVa2AqeHDuljHHA7%}D7mF{-A zzeke}x1(j7uwdHpfWwD}e#n`G0Px03Zt^O5d6h$$t*!`fNmk~#IgmV%0iJt&ymEAZ zjY1Scv4QkV)VG-p@3(WcNeUH$rchv4e=N!ossv34dpH4{x>$ z1Jb$-<@jwtiQ~Sskqo?J)z7h}55MoGEn)t5(*DJ!=VBrW9UjXs(jF_tdj56MXS(_QHqerckp>&@t{*@g-%u zbm!TMO%JjfZNyS5u(-2NN;9R9J>rn880!c7_5-t(BA)ZHf(+3q)KMR((#NsG8r`QR6I z{Mq4R!YpJyi`YX$C$GVtY%RHedG;Za<@mDX5*wIN-zF@g?r`8tLzvkQkr$q0p43jy z-VjGdI2Gltk#82}+fgB82B;@GH*Xx8_SY-Ofujg<7b-xUho8kn<;|d@kFLJ>O|fw7`Y-OwoY!kMYQX&X*@6_oSQ2T$#Rqd`7rLhQ$twq|UU>=kn{sWVOW38fkU#m*p<+p!Kt=M?fRe%!Z8=(&(R_(k zo)RbDosVjU>f)u!MobhkH)viTKW3v)w1_j<^IE3v?8Xw961(^U{RvQ_>?&$=ngsOo zVIP0T^{mCjRPI6tp3_`$GcMt6#b~k&IQ2@P7Z;&XV(Q&2Nm{^~B&-uUq*J<`cVT-D z1)Tfc;w=QE_$OPxm)7|A9J1r!djLFxBOlL^pFE}Gzf-)|YB#u6fM4TqU%)7t(woeC zJGz1N!&XWj9QidlJxPJQ9nzFYAl3$jzK}|#^4h7%EjrhNzE`eO0+Q8X-;}sihAx1S zxKJRRlIlIng4Wvrg1^WLF+9TrP75H-9(glC1P%F4kq$QnNHw%~WADJ79%%o3m_8r& zaRb0Aepik9Xto(NXKff(l%wIu%INVR5~~R8eaVk;9m%?OYrSrm_WgVYOGTCpWYbrX6bB z<_O$#q}(f1mYwCL=jT2%fj!v{P4=~k-lV=R#lEyk^5#n}cU$DY6v#rnrCi>RD0kAx z#}64STt-5d5r?>#>nF&zzn^X2lkNB^%}>OmNC4+_Uff7d#2RwjN=^iXpu__vC5RYG zE(^$wC_xZxIP3g*aVyAhCDb-PFKP|>E`#UB{vTN)%YSb;i>EOOxYqK*{r9p;zIxO5 zdaNL$#Lc{IqP^QB8TMhLsBNgNB?$GZYV-==E@+QZ$_==LSjU>zs6s{oxzX(0O|)!0 z^g_`TE42voXP`6V(U%M1QqB1{RuFrta@)+HdKL@^0QQr)dsYz9SI0IVMJ3yyGa2ak zo>P4`1%M6UaiV%tXr9rIT}Gci)V=?ltEWb%a?i#f+$mqm2Ckl|<3&=;?#y?1DuGWt z5_Wn$sm*zG-ULn*p_mw$PSs7FMF&ZUgt>yyV!iiP%8g=WY$Kppd`WekW8A}wTSJB@ z=0^4KE(RjDtsw(sb6K;?24HvhdbwA_a85F!*HjN~LJe%ppY#n2EKfaB@^E5Q`CdkwK}HsiQq!F~?v@W#9h z2%UuCX|uqa)e=sBu9GOHhtAcP<|T%r{W08z1Fy4a=zTWmjC={}H)s9qvj#d=hXGIs z7oWK0C9PP{_)i|}$jrO*w<6$NgPkrRo_E`;u^Gj^`vmDd30nP^6HJk|j`|$MaD_ zMaJ{O3Aqs>HVcFDVj(mDjOPum=TiOl%8sa_bc@uXW_K}0y@ZQxn{Fmjqi&_X!<24E zAJ4s>JA;dc7@9FdvEP7F+LjA0s+7Os83lKWUAj(<+D(a&lZsNgq#2PQpNJ#(r%Oc6 z`Gsg%CBp2qw2HhU4JS{Jal$I@eu%Lovc9|6Wxf8+06!Z=^=&j&A?Wn-86|ioENn32 z!qav7fqc4+fDgVz;+M>mmeb2+Swwz zU$n+jFFXBn72*5!n<`o+T>!^NWKXR2%3QWdpZ$q!wD5y@1ZI!H$`ZD-Zp8ps?x6TQ zeJ1j}SH{zyVrXI?hao53ImLi`p?0xJLs)C^z)Pee_48d*$I!`aYX4W}xT*Zi183P| z@))eHfHuOJUE(FHq|q%I-aOtl8TXKJnXI)@F@y zmtL{RcOm-c6JS`oU@fV>56m^Z@wyrj%)iLN9n^a+a`xM>V&m$9mreAPaL44$lt8Nd z3QS6GjWB>!W(ak|-~S;xOEDn!rU*HC!EB@+#)*k>T=UOgzX+{&mD*Otf;FUBc7!%X z7dlwY#hpH6^<-C@^t+}_fYa$c^`EOpOqxFO2W196OfCU5fx-KB+_b^mg$DsU)ia)m zQ_zV7{^X$S#vdL@vPx-2h7jf?V$i!#)#vwJvbIMcUJ?QADx}|B7UXLq&AFqdZ><(b zjD*1D!gswZ%)2^nRu%W;!l}C#*PrBayBj#6bcw)z}`OrcGM$uJX2t#R^ zNBp|cyXB=BKF#(Kp!ZI2S;qQ#yxe^&qm%wHy!RS_kk7u#V8ZAN%Y)Udl^k*nQk8iY zCht>{pH4LfFLZi?F_v6nCJU}QJ7m=#kVETW?e>O^J$|G+Ks?dG)3w*c1$hi~-}n$z z|3rW#MHg(fh(Vh^K;HbW3*G#?Y4ep+KJ%$LHc|Q?xBM5zl?xZa6#WHaiLWMtKtFGL z?mlfA+%L{J>EmBy+uaNPDRbKrW9eer_M~1u{o>D#ClP~Z$+tHJ6EHmEqyYTZ#vsL8 zJvr31H`YiA{1l!)Ba20=556- zh#s@|I^RQUfDgG4wA~XHK#W@lOp3}>w)NsUJ<1P6THG;1tO>0|;8D{VCzTZ-{%%w^ zHjx)|(z5L}wwooLFb$#*iE>sir?3WudAX%fcZ-{pY^)96WYhK?7^Wa+XNR+VP(BRV zoeS;eUhXVDWE87yI5%Q7Z<&;>+U(+*8`@Y#?v@ntpJDGud@iZ`enk&Npj~jHC3fGE z!akrEK{Y5Xkmm#Vr4FnPjZq&gPHg_5vdZzg(#GoVc}~xFDlEwFJiDO->AR7i?fIu6 z>We{uto_-*5OMi&i|y;4=Ot>l_Az=u|G!KS}{ zY1QG@sC7#c3mOE|SeZpxPNvB0nRHg2qzUd`oR>G0R2Hla<+NUw%EZghUw{j4+m8px zq(9Tvm>$U{nlm^zALZ1Mri;R-h)PPKB0zU-l;mtPr~akqj-%MDB`j~rny>wcsv#b;YXbBPQLU+`(y4?obU%w?pKUKFMuk6UEfI%$u(a?kc{};&3W1tBRk%Op8d`UD!2QFZ@wNyi zQS{f(RCm6x;nz!|4ZzWocQ|Ih!$s+ChpQrG1r)Wo=uDJkBbfq>$n%tv8CG~im8D^F zmL*6pakF0pWs?A|>W6rD>tbgh-VKh5wiD){{ZWbhY&kjw3UjoV-PfP3F*iE|)Re@K zuPHqtAqK8Yb>=Bet^sHU10KOpOhjFO@%^Ut%`YEjH`Oy_x_X99ymIhSq8O5o?+hCD zo1<(n2bX|&{oKUHJg!DcHRalt{j9Bw7He6M4V#9V3Xg7 z(J>}z)!72HnQUUKeMwra_Q5wp`XGTx`BHlTLad{dE|G4!)fF%hsY6+6P7E^z1fw`m zwtc-agCpmnj)=PR3xKgSzFcWq24|yz2O2=@r5i{ie(t8NE)`s4qtm}jo zuT5_uBC;5;H(R)9`nF#W&mV5bl>j96ncrBJ`13jQjV zN2&{MyO|?n6%rVc1Y7m*v?WsAGaB6wQ$2DQ+{l`qWX&ccw+&ilF(nk3f3)pIZJ*nX zKKB|MgVj8B14w(q(j@tWaItcG|5$4CO9K^#A@lafoa&cSjg@A1oUAxZ6TsOn*2PyR zgsi<~wk(VQ$$8Wig2h`7>xAZ>3;k6hDqj%Aj%gaWA+N+@H3ZZL)QH>XBJRb-5#kzp z7zRnN2?lopNsJ+5chWcQ0P*(S$k@QT&GM;SE1HwZW(L^P7~_8~cJpiavq$ib&{P{v zR6-*?<8^zwu81aZuGBdmsMqG0qs!FG|skQauQY&d#w@aep zs|Kt%iuPEA&8XtQMGQjH1#q@z4=7gMua`0GB)82adhMP)ALo^$w7Kczuxb|LSz}_Z8r`2y4(708us6A>%V8%*Xp(# z;-E4?y-8>5A)&OWHD-1en+Q-?*{^mv>%~I;N``}0?SpnlZ8SMbnc&zi0T?ftaK+&p z0T>^`0>#N)qfy~)0lIH1DnZ2v$e+lNB)s)}21zVv+`tJ{-iQ(jb&rV?dOsT7zi4Owq4_#{RB$Qq#7F)mj% zEIV71{^1UKF~T8W_to&$wo~mJu^glDX1PX4)rf-%1z`D-t!qJ=0Mn~6xQ{Yvjbc^T zy>4^#@AJyh)3~F{By2$l{4skbyWRTU?24_5tuvay+TCs%Z=TZnKsABtRJ7pof;+{6 zhsn4zWJS*W(VwYUV@ot>3o@ZtxohV3AAd=rVKq$>=B?2&~ zYrcVL@SdR+Jiutj@ADi``x~sYz~p@87K<2ie}I&qb8cT5Xej~lAc&d{yC%V(&T^?# zW-EQbXpPw?Dwm}K2$p~}asNRx07P7ws&lrs&$b`Rc6;k&WGMg;k1(Q#{uUsR4gx;M z*T*{R4SDKp>(ae%vFW~e$L`4_xgiOR_Kxv06arw7Ab|RnYhurpp(}s;#*(r5?}4Z; z=&6_Sk1^vkXOqjzCO7%tL-Cd()3z@S7XN&p2( zDwt-xmh@oCIT>n)?}5lI^hKEW^{e#R;ty*B>=nqwMwagHLLVPMBS1oYKFc(Nx+aiq zoXJp-oUgOje-+5Y4jnG~;uQ}f=uQUAP}gl1KrlnEf6%rDzG2AOo;9lB&+#Zr_q-PW zHU=UkGBhKc?UtQtN9Db;FHvq`=vQ94bs^< ze+pfs;nWBht&Siq`+QR>SL;~5sYNz9T|i(sZ6>&ad@E#o_XZx5NO#g~9<=Ad_MGWl z@ANb#767V18Vg?L>?|*jE9!$%{A?=*V~2{J6r~t1zH-z4T{-T<6k;x|gu|HI&IFgJ z?qIcM76KtBe}pK$B`t3Dd~#8Zx^Uo9!of02a0L$4_=N3Ofv2?lfv?{3ki^9$SW{Gz)!wqNQk~}^b8DRPR535 zGUQ85&$zY#ldx0CJ%|?;1I=%lG9BgGE3ox0T!K8nxw-4z%e909+4BBEd?LfR8E)<2 z)IJgr*?g z_IzuId~EV;0z$)eAb^7dFzuxmgAg|uBXqj6W;%qrA~3rCymMQ6@vZDG?>@ABpY@Oc z9|2rFdFAR>Xg3YenpLn{6v{J%CuDwHzjNbR@{1;$RM~?#Gz)V0>7mu}i#ol5nh8m0 zK8WSM9bfx`|83yRXD?VdI_7f*6g3Ao*blk)7Y0<+1^vNB*qcVUG;X~AF5Ua>?>mYg zrbi6zw4cd4oGyMh$yN6dpfHv?YL9!_KQT(*V~#)w9|4NuVrs)ZR^|Pinlb6^!tohE zGC<-V=wXga%n!?t%lC|idhSoJ`9HIHq<5fROc9_gob5B==sm!r(!Vhj!Q63yX6PVz z{Say5#_wDIUK>N$XE*xNB;dJgnDyoD)cGy9>Tdi(4s7~5a@CNOC(SfDuqfc5 z5VA$-Q%I6JVn1Jkevlm4-cwHGYZcN1UA2qtTb%()4Q;ehzMnxU*%X>ODtFq$s8pxM ze_0=~bx7rCo_BuBIW(a%+6%3&Hs@N^(%Rcv8g_GOsjW44HSUD0qeO5|aKSqf)lVc0 zl|~&c9X9E&`Ycs;u4gHSt}gS+)!?>@XSxz|(kU zIw)XM$V^Dso|%wEGJ}$hCv`4VdayC|XpO@|ad~Q9D`0B`#j^_mSM>J}d#_T{+)!x# z1hX-51<=ah-HB`{q+r4dbQOH0uIb8WX|Z^IHP?soh>Xd`YQKY%oXY6@`ka$zA>!?m z5j0za_MU^9O()#OmR*(h9|>zEx~YZbR^=6BrB(NS#5J8%DNx?w-kPf4Re3IRwd*A3 zwLxl2TxCnn7WY)!wUcqj!rsVfk~>%u+4=#>RakB&1?&H07rHJ}RIjJ%%ZE6irct(q zI53yY59aNBkoBf;)5)}tGZ(IZeDeO1P-g3L=V+84(mz`?kmq3}M4nJr3R6D0)hKHL z?rQLE_=KAy;R28?MPaaEx_$+2W|BAN#22$xM&Z538T%ENe2=A zne}ns_G@ZplI99qew+votQ#&pZxEL7ZLX|gY;S&>Jojz$z8BXEVJ86UV#ch~TV=c4 zOb!+Wo7|;`e6cmY$LmaI@h$-b(P^9J2vrQENeM?fT?8L|gpj8&e&EaSpU zlKrAk+oZX0EAN;heCcU2nbadB7Kag2$h-y}&aOi+S<5S$8cS?6Gjm|8x$V<8&NQpx9RtaR&o{w2qHN3un)qrv7KoS!HjGhui-~kA;qZ9;XQK-Cg=rlf& z73uXE+9@yKDnb-92|iHKt>YpgUWo3W8qiqHRDKbmyTwt-3p2h?g_!9^tXn-MYb8*r zJ(s)_=%C7-0$MdG0vJBU7hp@O;>QGmPiIlq{hAnB2V*xO{k37VvUk|M6P1zMx!#VF zJS~f@c&#}{r<=f4bJ0?~hIwJ6)tN0z$L1JBXo6ySX6>MZAye*w0P|orkaNGywxRkqJ^FfWr6oAjw)VELSB;!B8Lo0YPL*b}!XPgjbQcm=G)gX(cKtMH=m5`Q4pAVn?3Y;iG zaESy4QfHBYex|hf){Q&WhR5EdH({NJJt2g)65xmw)KGe&vHA>v8OMbv2pIU<=sXe? zUJXVt^ceAm`s!j!kHDj>PTsedSQ*j7>4p0UYV&g3{xsOZd%LXd#4zNxa)s z%}5FJvsbhwRg2OQW#P0(c7w;T9j@?LTw=07b*o&XsU&-BdKzN{JNR)&>2>~HOfL<% z{dtD~9(CcNPseGU>doCZ!#ZO1-_-`#d10I=u+*}rV~h8yZd-P*7M)IjP$Mi@vVxi; zRv-pG?7s$7IHWY*_Ky1Eb_bMa6D+rTz=-_{XU4PKtT3XS6XT6|F5r6jo2m=4r1EN< zFS`J51bg)Bt7KYhp6S;X)?>GXQL@2n9i{-a7zVr5^~0I+aZRE{1PBfO4z zd&I6Y5zg=M+Kf`XQ_=nPoLTLzU|Z-8PDyZlql5k#1InnO1#r3M&%oCtm$BgDHo3Yf z2?LkIUhf2GI!-;N!&Al)wDr61N9-`F3l1$sLaUdOp0Kn|(AeB!_IQ z&%WPJ=MR7TAc;wxbt9fje~=uf-<;#Oxoy96R2)y6FO+r%HIqUI?Pf~|Mf>_+$*s#8 z^{e|_aqZ7*vt;x{vc{L%Gk??>>-J9_ulw3?-&w=!%&!d|QD5u!{e2(3?!cV*e%<%0 z*ZzJ;IdkCor@9|Ee*FE!S$A+=_RLzr`FnF#_r9>dsA|F{{u6(X>VbYAnn{%Y({`qm zEj$O*XRq9Rbz@`xo#VGwZ@M2`)wz|mVS(_~(!xbE{=dUB_s@vWpWpaSZsY#1pU(XI z`{Um~P$Dj2OHdwwbjQEqOIW@PP%bz@eShn7@l!IRaElL#JkWC$A>)`5&=5aXp<~?1aLJCp2 zlc;V+4EWg8-At$vsfJ{&dzSGgF;vvs@jj9IUQU6y5V5Kd zZAOkuA@AxW?^z|Mm?`c}QOxR8JhZCFF;mJ(Q7Y(EDq2-4HB+{}C{+z$Yo=cAFFrx( zsFT3!jDSxb#!g0)GA+kN?S8W8OR}#11QjXdI3U{(5k^M|t2kuns=8vpYrBAVF1`}_ z11S-VlX#xKqLCR*FrW*TBnh07C=c~0h7e3XRa2}k0NJ-06mzXo9UH45Dr`wpr)$C@ z6-1aUX_J2un3`?3sapVf%*&cM63EizFe5d_p5u!5*2g=NTgiil`%>01thTiOaK@K z0F@vKm=Xj?pb5+GSr@=PtE-QOk93*f8CudjBSQeR@ih5qZv37E)1c7zHo;0>@32eN zzVu4FE!(VR(Cj?i{G7A-*=+OZoGE&m+4_feMqh009%?$u%~@SGbN^!Iz24j}%{=I` z`Iax{mR~GwFIzeUSvi%7tz6}-Jmsu6U6wk{kiNmkJ5oA6eD=pq;ckgIXu>xLpR7`{#ri7Qmp0R6%Q z*uw&}NwjiJz0wXeDU$^lF%a_g`~2U;O7P!JG-5osL*us6jwWgG!@NL0XS@+dxvE~J zRY;Bj(KdX<$Y<#$O;tz9Vx(wWn}=+(jCIY3_1qlHKw^6+L;$g6Z^ahv=p+ds*@GYY zV|%E!0E8X2s|bOEm%^^DM--R?r}%iU*6>XWfH?(DXVr97C`eNPE+9$cla8Xdw^9)( zKK7nvq%tQmOoTa1i3)Jr9uJb3j3*}biVyZGAKn>r&%;FKO|<`x9V#8?X;<-A7-Y4K zWOXaT7zG>&l~Xe6C}92r^KBHsUDi3X}FT zJX1xe?`J8wMqcNWy{tRD23NyI177j0Fy_0&grZ7a4R@?c`>y|pnno=6pBM=OmXyvX z>eiEE!QCKh_aP3^js**)JOBinu(_lms-nEplh|mb4yIRg193k@oU~Nx;j-*$b*Xog zMoG!)k4UMaK-F%^bDacg3GWptHw)z~SW>+d(2lHSdEy%7#}Uv5^4yF>0SJR1#G76g z@}Q?)Jt=9PgFl-b%I&_9)`n7j_ zGv*!!A-@+WR*Wp$mv#NUgc9asGf14gs@VDiZQ-3*ai!66~gaOSbms@wOPAY~`TjCo>v58Q)Nv@d#p z<~)}jO^W?)bp1W@o_UzxzObOjJ1>=IZy+Kurtll2mX?ow|QHJZpKPCKOc1@1+` zaIB-r^>7LwMiI3UP6n#WYnfV5_I#}>wXLqms;<6XUHh}T-uBeFtW)(r?d~ZdfY_p^ zYeh4&l86C1gGFNMlG-!D9>bkKLr(=x96!(vKT^3tRSFzo5L|Gjr>zLRR~lot=wF?J z9psaE93>KGqgV?;?;{;`$+G3c})2mNn<+K9q=!J7tE!Ug&{AxrH(| zn{%R471}Q@@eeWUPjZMS7R=?NqYOF39z8dc@B%)MMG=x>sKoNiXzmuT)M({X^#mWg zrjS!cdu4Y0^=p9O>;c{@rD^;j-m{%eGt3U&z961=z)AMfU3=dkS$n^U#L| zBE4Bmw}%jQy&EPCv%xG{pBxeq9q!lT(mRYFVzdvJwb!$--3)R&C*wtVvWyBMe`k#N z3fd7Ome(tpa4yyEBr7=~a(@vqZ|DZ#L9X@w?vtd1`HtwVo%-@HoG|*(aAz9D!+4iu z^TP&eZMI46GP`p5+ksm@`)>XHeG5EzN>PpyB7(okuBoRUovtc6yVc}nX7!)j8+P=y zW`C}|YynsR1bZPYE6AvB z@_vreF()~BCvpNJZZV`X``UrSdaR@Mk{1&x$Q#HYJX;u@%t_t=y)|b^nTspszNcbV zHr#^u-@WnYuF!sbxaP8L8MYU|kmiZ0PK*o@QOOA{WnX+<)y(Y;(ec&Q57em)vh1y? z);)c~Q;flf0ro%UbQctnyw=G>9%-lmJ#A@R6eVt(T1KwZaCFaQ5_n*7=6d9xpPyR)MtN;pd4(qo3oYuTeDZy2wo1! zJS$arZT9?a!1IUCVdVn64D>vC%Zm^hhqGPSW0VI`fb9fLU+NWH92$W*C`yu__mg(i zNBs6Xt15C3pcw*s`Ff%hye4_UPkKB0UcNP<`~25y2oj%hYp&B%@Uj<>?dGVz5M29s zpsV!8>qznIXva6dx6bt$ozy+0sF6wD;neZ;AUR2>7;8&<5Z~D*0wIi_BuXex}4jkXSnJLGSnFDJ$4pE7Jc~h#OZGj;t!*T2=qIT4)AN zr2*X{_!#VEvJ1L==(9AucOy{veSP;a$3y+KJB2p}F8vY@Sem5C|0NJ(Zn8Fh|M~gb z_FLbHICw4vpbNgg-Ths*^apY5NA!_C91W%WHbvttpVSJYp8u)O|M^$$=ed6=-xu2K zSdu-mNpreVheT24o4$Sk3lwP?v*ac@s(;YGW{&)wyY=_^zrXVv#jlTu-`x^__$OZ7 z`0v}1e?M>i`ztvMz_JA#1YX5HpI$$ZBc*D05M$ObR3L8{-rropxm~2D+#C-xAIv3c zy5z5jgm=isjxffg76J~DbbMBiYXKuy6XD{XLwM_p&#tr4dzc(SVtDVt-#7ORaFOLgUYOA?*fp#q zJrHG+F|K4T!5>wIM!h5ppb5Ayur|(1Vd?rfo^~u!0d{q_S4*w(WK`s+KA}%hEn3$; zKJP#9TP$tgvob$asJgM({`%+Fy>#bskzKnUM?cvx4E{Lo3tDF5J zbj>F`kfRD9r}_a7$!60P#_GeJKlm<15~q2&fv=N}LI^B0r($zNmMccnDKi?SMmpsb zokI@vaLZLm8i~%+NWzThkp?*PdAfCr^U4MnGjA7c>tAcgHLHtvQ?`7PU$1P`9U86d zD8?-0FvC40B1}jesCm@OWHh$S*AW|69_Z^CSFt&&Ag(ezX*BL+)M4z7s+i)r`NOJ* zcuD|{FCmBGXp=mW9u=)Y^s_&)TO}u>15x?ik17Gj|;Sdz=>Ha?&tHb!Do|nbmN!Q=h74E6m=v1h4 z!~M@iU6T&u6HLkmI`3u_ZxQdelrX(ca$oPoKZ|CzvT!?Vz49qF5DYU&68rh243pQZ zjp)`%Y2{N`ky5E6TE~4-Mog;}WFkEvd9|^ZPz&6ITBnOS@I`zw`V`J7zk>IcHTvoU!NF>^c46j?pl zE5$`=?7AiWV{ZG|Rk!EK<3;;k?Ef^e@4v(UYOg)#%KB!`=dLTxe0kLLe^GSaaY;0O z9KSn`jf$eU6%`dXj!exAT)9P4b7g3*%nZv+n+M`djm*kyJh+O+Q&d*k@?2$RhGk_N zP0O~GJy}or{P_LPi#vD$$9=w^@B2Mm^s07=dhujkWJK}QzLmAbuN&757r!~OLw)n~ zPR!w_YmZK47C@bq`)2Qj|F`9HQxx8V--0vOvss>Xc<(`MiQrzJV7uDg{iGDB68mM) z>F(BVpph=;eu?>=&EFrcyxWj?Y3&)0wL+Wza^nY-Kn{nVwg zh(}X z3%e;ff)b+-e0-Djwck9AEzCZX4-pkT+9w31_PI^um4sfsK|z_@sV22`6}?991m)fz znl!HU9(;3c$~w>veFyadZO+P#|CuY%qjB=5W|TEoLTmA71{PVuP2`jTHTv0X0Q2Ef zczW{vgdSPdS zfd5g!LQokN`JxUuC}Dtko@xAj7yEwCA5wtYGm#)MbJ5AEh}75urS1|LR zHzEUQW0Nq3g+PTCfiGgCKx>sGJ4^~dR0go_*ObG?PW?;F`wJHzZy7OB(B4h$#)1r0 zyFSP_AZNqDXCIC(>>>^esx};Ajo!)h2Sn7cbFNGxmk_7~H(kDuQH7f1fBGTJhr25e zerQEovleU_O9^K)qtEtM2-y} zXr^BX64U*ukg>mrenC=dpV_@LWp;vo9(W)Bc@=Pe@Y5b1#WHrRQRmX@^_x=A66@My zkK&*nnjcR@x@X6|u7#danWi=1_d?D3H*MzB9+H&+s;XtQ*4=S(2#2707BqhtG7)N+ zFcDJR-({;UiJGm=q<(0|)Tg z!(4L;2$@zW;gaU%L5n1qTfU7E5x^IIvb@w3F~i}NP}Q=bn|eDpkG48qI38K!YpEjq z{ngROw9Vfcl#O;XW}F=hc@F}^(sVCPbHSd*bnPK}<$QRqOJYklW5%3wRg(guz$Q_A0%;h5!xoZN#LpG~IE#lX7=ToL!HFg6 zUnM)YPI5n<0~~LcB==p$n5zoixyEl#y-w3@pB6&Mw!mGw?@rSSqBh*Q{RoyP4icy}`~DJ_xmMq3_3n%=Q;CA;2oV zb|8?Qn@aq9Wiy7!?r3o`B4@d^=s%q2<6Oa5W z`QSpwZKB|pi$DKfC<>mL(A}F2TQIuGY4IY=VnqNOi6RDir0Mp^0yH|VZLIf$^tyO3 zVf4k$;Au$je3AH}LsSXD?MaXB4Ys;lH92#v2NNO#uvQAdF9@SuT;V`6_*_(PjbMTh zEDN!f0@l`$%_Z_dYbX_fF$#1^Eg>28yl5F=m3=T>|pieVB!KtojUqL?@m35h)204c^GjZlbfO@Si#FMm=tc zlBkDrLif`{6_^}6rISs*$WB+0=*&>U@Itbe67=SXudBv>i1?}klcW%@*+i(4@4T)g z?4?rnE5U03B_XIk|DW=_-@;QYAJ8!Rb*A9*xxmtgc^LS?^VE zNKruJ9<>K`As$N=Q5CxVnlL8RA&;bzJ zS+I8;vlpOTVG|P{5Im`6T9q5mQ&;QhQ?4lqM)L>6KNg6)8I*E4!Lqo{rn3&Ek`w3X zIR&P^RPvBuO()N>Kk^zExZe!TJItw!Io^{}#DO>cGb3?>qQ z)o)<-%E@sR7?EmS3D92ownDxscX!Y}ZaI{xWc#7}z_-NFha%e<2*V&=l}l>nv5BP^ ztxi?uPW}QnSlzSRc&4;;XJ$s#Y7ns8^z zmjG}U6~ktv`9E&NSE&pZHL$e&+)uC++X$emTrU+HDd3Xv%{`qPcCq&5Y&`U8BRz#7 z(Ni2+`}5GqEr>k>=z37*KU}1=O;eCZm`(=e9B`zbO)+>ZJ~r2Udxrchi@aZ2Xq7Q5H9%Q-i}DwW)uqCaocK(kRxFP{c3iqD$0iIm%N z;%qeFd_lLu3^rzv2d6ik7wmb+CnqCdq!c(OSAU_(XZilPoTGQ%ox1xgEnE&1D2eW! z^R;UFgdGEW%v8Kc3E7OQSE(1b#cNls2l!n^I?iSg89KOcP1IIcgr<}YF3O3Lg=PUP zcTk%H-D)Ge`L<-4 z?-4+$Q*fGP+}2-iKgv(P`=uRqLI36V)6`M-_)M7|r{=nKSWjOlQ*~98sB$t)WhO`f zE?R!Uc+<;_0Z_%BP%(RrkTP|8sr^vk&h~fb01XECUp?vM zdu=ymJ4TQeb!CwOpMD@)w(6-U;flWdS@84dl{Xz=#z@JQ!i#1SjI0fG;b~JPAe#r1 zlo+NQjCs5s69*a0L~MvYS?#7O8AF{_n0q_HM_0h`1b8W5?X7|sg~B=j>+hSJzu0v> zw(R`Art8O3KeDuIOEmCtG6Lfseaj8_*jLnY<(NYZpg{$Vc$ld3m&1}UG-;UJE{vng zB`9{~bndfk1k;omSN5MtunRVOz_;epnY^fZ3~$}TBuE2sqRXv|MG%G>eP|?Cpbs z-`lQB%M6xv`Vz0AYPqCiGbq&?+%g`e+z9qgiYikJW^;7YP}!MTt0m5%?)h{qny|tM za2uy-X#?kGtrnf_U7SxBobA?V4cw3(sG$v~0r*k5TDAfX` zjMkydSt~&|EvG(k&FuWpo~;3dpgUJqZOM9@lJbw?U*3Z+DZ_I~g9N#?iO_1z7sIK> z;3eaOBztgy0NWHVP!x!Sd%dm5A2xWEg!2k85X=*6k`Gd^-xj|X&Xjx4$JaP8sxgk&dO<2w`$6;I?#1p+!246Cn1UVK9nz|z^yALL z!8d8~Yr&gLZhqSq;5d{fQTrfKKN|&GwG|w=^Q>#R(HgZUBM#3ovMx}8^=0$hHbS8R zP;mx>G$XU2ed&UPZoY2H8HS?MR_I1>IGP%}D z;$x~>3@Rn@K*h6XncH}W7e80~q};WW@>T{xy43g;J87m=NSA%th7*NV z0P}Nc6EH~vPEBTT~hm@-S zKqj-w;M0?`i$D<2TgfAC(OZ*Z80p0pUqz;<`a}-|Tos^$le$?AN3q~t!aEaoFJ8Pp zWccgKl5aJj<7rLz>$g1BO%`qU!)0{dm8idDU~L#sm)nzo)5;s*^U%EM^6P0U5HOQL zzITDF7N2FRxZoCF;_;B&K~>38AnAA5LE@iw#P`^i*DWTy4D(;-slTBx-kfiOH=g$E zI`-09(s!7OQIqys34j3mY4>fD#^UKN^$(ZZrc;&?>u2hH*?SpsOhDoOwCs7J^btq{ zFg!`RqdaO(>s_nQJEQz}&t_gP_+%^sNPj-Q{6)~pq!PyD>ctG~sx^=<5O!twy?9vJ zo%i|2{4!hRqz(^Pr6g#FKs!3t2E?87kYn}$=_3)+SDQbs+V0zY`lH?ONBi1$%I#JY zd2hUj7x__vbPnO6L~Vxv=Oh8G7;v1!=fH^1LA9S9K7V~NtEp8B0PGe!JhX%d7)uZC zlBO==5vBVvMr_bY(608^M@^?MM5MHW;eK<45a4Nc%w3^*uVCOFF_c>bxMbB&-MXJQ z&u|Z&`F;CLJq0*;!1|Y_5*s;#@e&-lDj{!?kvk=Xm9fy-2T$^t!^9)37Op1?ILgz;H_wM@r<3G;Ong9O%?Az80BM{YQ^W=n1C1$sUYNh9$&heYI z#`QUOHjg$Tfa=8L0>uc3k(dS4G85{AqrN*x63@*6s~Ro`XuXjbQvSSdjvo_5V`l6mO!wxIV&n=RIRa5?r%+Kn2MCD;3}o}0Se;2My|@hu03 zFGoe;^aM7C7usc?S6ld!({x?d1KU=mcW-j^5N+^k|ixY;ijPte5wY8_r$Ef z^~|>5YcQ*&etn4T$ryD@Cy8n)OMTPhDcux7_i21c(RhY#vf%O5z94T_697%PDFbc~ z+VX|R1eoK1&%dM9=jVKAHW*{gj?e`<)M==3wY<{Wz&2j~(OuTiJ{ujj06a-A_|Z9S)sRezXGjq(t!Zg| zI(Q+U=?0BRCk|eoX(lspaujNUIJeSIU%5D#A@8Mc$vwB|<5}w?`ZB5LJ16?g$1}Oc zQeyRXxnWDw&QHqe)=N=win|;?2s8Tn*R2UFPMkULfb-(XngKJXE$avEF8%)c`o+Vo z-`clCOD~!t*XNVOAPJFXuljfXpjEx#-0J7&UwK`v+^8|Yn3OE5+Pdkq^N&B9lqI^` z?T2^nNV3;Xd^RCI5y=of)C%cH9dErb4pWUi5BQyFB<)|!dh+O+P5$4`ul{TmlrP`0 z?VqPh^_L@?{*i&gaj26_5lUMqH~rkTP69Eq@&T& z>K-R5J>A0iXOKKBKVn-ns-e&BNlDOJ9wRh;k^*4#8#Hx}Gc0Yxc9#;EN|<4XViIpv zt_1*zc|w(&{Qu}kE=kX$2LyhGUP}La>x+_f=bGZMboY^xBEv@F)(6Mz-TCpu8;*9l zzlC$tT;n_55wSk{AklE3do%In*Vw`>#z9=9+ak&AHZ0_4IU7s+bR zbeBIrBN1GEu9s%WPPREht4Cq-wpB|ncGPPgLJyE;EZmc%yFH%UZnyd}Z^b%G9geAX z)p_mzhJd3Y8*hBAGJhLOG?!u%WW7dls!cQ&U$}KRTDoXzb>y~pR}LOx0@eUXD4G#o z+pBcC`}E*dZz?1!!OZgHXKChjd|1O*Alk7a#v&pc zj9Zvk_jlof)|F~&f^Yo_EF9Kh+5#NNoB=2BTMXUyc8BMa!mi$kyLi6sV+qd}$D~Zq z+Gpw^wH`LMn-Afhj9w%<6>laF@bWb) z)w`-Zy8e0A+B;iPW{)mxutopQbBH3Ym~+Q}odB6yCr`H8VH&;Yn;|35gT2-!eE;b0`73<6?KFS|#*uN@$X7Vf<3+t69tLQ+2H_ zGLEj_`*-#7gU^=M`eegZo@_{CR5#oc1z{h-#0u{o%)-<5LgLUX6VtJid^ML6Q)=QS zIv+Mv4lfu?Rez6-81%ZfzDaFccKW+X&k&$z`~0RA5XWYH>G( z_{Ov9LELU4D?X{uVSa-Y|9qKCXXWL`^B?n6a$Ia`S&)U%h*>D(!Q;az#YYl{Y50NS z^N&uS9y0xns1-3T0QWraws_|?9b55n%_bi0Q}6rgOIH9qUr0mB(u3@ibR`n6Kx>_M zA=@n9KXCl+N#h;NrCn8OQ~*S#P;GrYNU~vHx%+r~@le(gk8lr^xBKs%OW!k6FjPcE z0}=YiK(S6Zd6(Cp*X+%8GfAI6jPEKq1_^u({T++!LM0Vz8vHc&y!lzSV8_-;>n;aX z(r%s(j=d;bt>vx4E@VfMzsjrd3_Xx2jZR2zn-L3MJT~dByb*IMt@RBB0cz`mpJS8} zOdEj3KVO?C?}q9>dp_Cw-~0}M!l{#2Vi@Ac4(#-OY>J{ZB>R-V1e@4U8qD5ZQYrKJ zS?M`qzS_&I+qKJ%jh$V#q%Nn+f(!aocKx&<=5We4Dsh}5kUZBiZ{Y@>;u^;I=y(9+ z4#a4>+eiU2W&zD2k?EL-R;;VZCp{fIN_*0x%V{$E+N$fZB!*ua8(*r~SMikH{p{&A zZ6l%wig6+!I27QzUN;Q$TQGDrj1=2$U#9DptQ0s0Clqg^?F}} zIdmBxYuDFfuSEXYutes;bxJ>6PavwvfP>Qz8}V>U_6vX3SGnpiz?K>H609Xw&6Orv zY~jNBf+aO+h|lj{&SWKy-L=cM&o3Ptli24_;O_(0jOqV<9qkL7^iMUqVRxG;i9c$z zMO1R46<={=Ize_f!PjTjZwcJT>hsbN>thxz8K==ZWYs6s9CE8x z3WK*ib7qNs{oO4ub_GDj$rg<-l6pA z2r2boEd$VGVU{O_Fr^J+xp$Kc8T(F!H&zE%oZyH@ZoWt!KFFNk$$d)O@w26YaNuON z%I#{-LWC?8O0PnMnQAe*O49Y>5sVad4zG60q?2v9q8 zokb?(h;Yp#d!vbsGUSne&5A`eDcY5_dO$deE0|Zp*ZHC#@95aJbARj+vhuu|hvpyK z6DF(^%_73czkrd<)AnP;pD;6fEXfTubsCF4=?^+_R5yyMJrsyCfZ!HDYz08)LB4yd zFdP-L)Qrp)Ik6$~9YC$a0OrL#kdP!l+n;cRCs#v)DIQDE5w2CW(@a4@frGbbG{qen zd%27US`r{(TZ{gobJ*-rta2yI?$MDoF$NhTXTeAVPpCSO3CXBp8Pp*3sQh^Mt{iAo zj5X^0^~ICP{54X*Dfd*8eSeL{ZhQP~VqnQBfIx-b9KSuTwHl;UPf0=pUMjoea_V?I5A5A3V?o=s%mjdQ_I^%odV8K*tVX z?P7q&0s8Es9?EKzBv6`qM6&}SvxQ(h>#B|cL{PP|A#D61r1VJ_8`P?>)zkwSGrHKZ z3k(8qnlY!69X~?lF#oXvs_BfkgO2X%gr3$1P|g z@Z_&;XNzo}K>fG)e~1)aHTC7R%(WDX@X=8vR3)BBR5#ouq zUD$6jCUTeokGlv-Jhf(q@`N*ZQrm2#%H?$S5rv z-DaJo= z(o#!d|SULd(cfcx%eb$`VUjYWoN?#?GrLi)D8~B=%hDbbl$T{TU=tWZj9fQdQkoV2I($ZWWig z%?ezCVKYR<@UroR+4v$!ndevwjtwpvz^Q#AQs@3p!Az6F?@o$SJKkl=N>it?0YxW5r?Gs-ny`5>N1z)*E$g(xrOjbg4-T3J zO*+Jh74I_`WvLQa6M$5FgG2%@mGSy~MCX>8FWS@c<9O7s#`U z6gaM2pMhfX#{ITlKtwOZ8{^9>YVm~#j;tfnWRnWx z*KVFJBPtLJ1;X(t-;iBi6klFEEjE`V`h^h7pH|=*LWiQVwY=30W-0r(ue;n6Tva?@ z1p?=d8{iePcB5%9S%F>TZeM4&Ye9)zyqjFH49pulvZteRnK4AsgCnH}O%-q|P=@=B zgaEk#Y`sm7K@)+v{Ya@l6%3fc_8x`#W2O3rIMrAuXu6a?M-4<^KA|jR4j5F&>6BL( zPlK)ZKour4b)Ynm@0>DMn#_asH;B!5c=2bjnhZ#*LQFaXFO{uMj4yLx3w1Sc=4YIe zSY@FeLhXi#4fM+Ix&N0%=@gZ$=Hqh!i01KBwVA1_@^Vz*3-sV-6+?YaWL^PsmAJxb zF^iQgJMok@0~dPWZ4vOzC*b4*fWyIWnijkF15RUc=JQHXW&3A{4C?Bg=A3LhHSfOXmgcScZx0UUq& zyD`T#F1Byh8OI zS-Y-6h+_!li~7k($&QB@J=J#UjOn~t2Vy#1wn-0b5%dD^Xo^@WE^0WwOaFUaW^n|H z%a!B&Zmx(d-6%g}XK`{rbqt(4CpIF0!3wt^enoPFGiW{I9TI(!^$(24c+bGu0QNe* zG-3vFulVVF9cHJ(mRT@=4tx5v)5;lacf{{B0U?mJDX?RW`N|)In>MXv;V$5Csj|`= zjo3}g*Q6E}F;9xO{ddL`0E4HoX?(H%BW$-xSt{#;Ly^dV@J(hYOdEk58UTlZ(!S5w zo7T9ri={Q2K=PlW-GmiJP+qAIzJMXpR?(^(%GUFyKjoEY>p`;*7jF`jKPkhnmqKLT z$u*o$MY61-xe^v*9^8Mo?8&FRqKY!7G43Ko-ly8~B0zG&bREKL67`d<^u*bhkKQpP zTZK0g(i!>Y{Z(|Qv>{o(#m!oiB_fK=dgiS1b)YsWLOh51 z-E&OdwO(1#9=g9J`RaPlC;jhtmqXS^=oPjXkU^}DtxV~DbI5h;pHIST%hzG`BDlEU z9dNa7iz!1J`|pES5HqbWXQa75RL?n(!N6i}5NPt`njAG(@6a))#PgXCzAkuQr=jU( z6no;rDP8B4`+cXS+MAXV9IKdW-}*84&x~HE|3Y%lCD)r?tV+0N#^gd8OsgU({6Y70 za&gwkWjFKrQnDU9#Vwu_ReG#&c5H3S(VFL-<_?_XlUWf-?rT0gEA>t5N$@UuJ+S)K z!`egjy2+#cN#%bVUMl!F--nhi_}JbOzVHzrbJxw8&8zVGSieEK;7dbGIavkX-~fgs zCY9{y@dY576ltyWqmI-!SJ|B#Yu@S9qt{aHdN1ChhD2fX;Jv&>WXC;QdA`I-%7Y5# zo-l~$bct>GfVeF9{|obXnm{eTRxV87`x<8T7yI77r`y3E{~odi<%iJMwg?EVQH*=?K0%zgD{>rNoG~(&b<^ripIHl zieJn@$*jweS;}wJCdpGQ*@GvFdBN-}Vdr|)Yo}3y#_elLqk?X37o zx`(t4)sRf8c&L@ta+q4BY`(4TS)}M?USmJj24RkVMo3(&9El5OrE;;97-<_; zyLFt{kW=&1?||^9JixJA?*<_gox4|IUOQHq<+y0fcgWtG^ zU4>(h_q&qTPVWf<^Y4*!HqJo~iNQ|SnP2;Gb-y8sgM{LhP4EfRGK?-beYlr^cbkC< zMxxr$!XpjNV%__FEj104~|v&rD}&HqwoP1s*&ye!skQ!IR(JJ-r%ho?ZX< zbFXRF?{D|lS=^*4KXU+x0Q6X1`p~RZqe32SM@vnV6ZG9P9Q=Cr`J@kMCd}gu%gozI z*_IdzuSc&z$+c3&#+wLz35bB0HY38T5Pjw@^Olfl%!KZRhH;mz-8-)&L;1aYF|!YM zF>Rn3Zz}6^sT!%aaPQTxD%xpPH(i}Mm!{VxDb*G!E{+05}SbH^5Xe>~2i zV!S#sS0yn5a4V~#C~4X)cprWrv&@-dk#j@8+yi`VuRx}a5OcoUZfuUlgZ%k^hQ)jkLr1Uw;<`58J7l%s4uFsfTo@=?cxBI`K*1u#Pd6X*QoAOH*qFo19{-W7XI*wa{!x<7?u!L&RvxX z7YTfcETG4%(RrssvJ#&pD09WJk^79Z`uimTnum8+WNNP>3+Kf4T3?7+1Lm;vH<|0H z)O(Re<~fagR_Nh;V*NH{)t*FL_GET<8pmlWj?UuCAR#aJf?Q0dCM{w8c<3 z5V+_WsOGVCV)-;czr;u{c`eyCV1YW@Crd@AuzXJBUD}xo)dQ=iVgrANqMoz!S!o;jt&aT22;1C|Utw z6dP>q5&)bFs>T~N>l|F+XgwrCtQy8)&tF1-QUuZ{s?0A)r}f#z77f%MHlzwwv{q27 z8n~v*`HYLcQ0g$pfGvueG$!m;YDuIROM==e#@P~+SpYUsu^$4ZD@>VCwC!*1wrzm2 z;41)o=?S)MlM4rPyD{I5xx_F8IhouKW5;*^AQh>wi6B`%h*5>Yq+})Jr{{~Yr>-Kq zF>i!0g8W?gphZzC0k1%t>XqGq6vaBB0NG9I>BLIKU;#w4fr>!$>9r7vafVJX?s*71q6J2y~-FKUvu8IlTUe>*3(_Pu4~Q4ioj*^vr3!C)=g?I(eT%PAWNc zmVsBFg0O^?n{ zfP=GdY-pu@#S`ND#+Gyf= zD>U!xp8KDNpXZ7SX-y>>11B`k-Q$`=&r6I|inCpFfVx1QUEHi3p-5&!sC-MEcmUJC zpa{3`G-Q{+!04j8i6`>j8&xVFMRJ|Chw@W21zZeMw&3*nBoVn@X>)O3Ug3qqD`@Or zkLHa3amlHDcPyFnSXc3hSg*DgnZ>XyyNfz`oO4h(#ObdY1MVj7C;DHoEE z@jg1Ery-UNXe&R@!^sSc-n$u`mA}!{y}x|EpIoOm8?^&^xLtvuI+E-MY9g$TgKGCW?G&IWe^@xXF-qGXesUH>yRg5GQ5>)#O!de%M`@_%zdycLLtafkZ zpPI(`2M3UX)yico;583c%muRvlWt}kQ>K(vveO~PE?;9=f+OfB*musmj})JyCnK6b~A&k zVAoWbESn5T@&BTRKs*F9qk(~2{oN3c*g$7=OjzV(jsB*92;)#B6D@7_ zTK|{|J}dy#6dbiNOEm%D^?K4jx5q07P&;>5brdk>xnEpU>cdy2VDq&Hf2Epds+hI< zP&!8|jSC$dU#(m0c{ElnLy92zzIlRp{LZl+n5?qbyvo}0N?)E6^9 zVtV1|nu(*J_RBlJN5USqk~=u$>bohmW+P`g7-eMaysCKIJ~dZ8nK`(J=Fxp;h_*2? zmRA^obx_85Bg@K|9=0vP{@74QDLb)kI9Hr+{sv|viRzprQO4H6H#7raa2U4nD7%DW$rauGlGF0$7edX!M@>30~%~34Bncs7C73na~*E%cH zzcruvEOphy#$zViEwT!&NUfZ;qSvOYO*tt6*RaMF0kL;wuf-GDb8Jpt*|;~?x?XC2 z-Ns5_`*`ugByvG!-u#;o9C{}R1_@|>G*+8uquq{>$DUSoXAqvGTSsto1>nMF%ls#O z+n!{RrELdnf$geR6a83B@??Nl#{9Nu>%uy5j2sb|3_%y+inz8wZD9XB!vN9Scw2O< zc~0|@Lm=T;LCBkyCeE;))ehX@lKHI7RwxpP>PSR3QeWFv$o3FK7obo)9r0ypMzB8G z7~@*AgV*<+^lb}-m&asFg+fNGd}^Eel=H*PwGsYt?i|vo?3i&@ee$IE#nCm1Z@lAp zV3^g-tybAN!?3bNkY-nBo}uS>Jj8wVfsy0&F2LSE;odZxn@Ad5|HgFn9*Q?oNJMGX zHUafE3Hzp&wWBm|A|?1=h^~V?LEWY&>R24 zIP5I*P)fR%Dko=lLo?auz19r-uel+z(tc*Kkc+=XdUNqt)+P71Ef3x}r<}rYxZ3sa z=L8@95k|KUfR&%r(d)jVBDbd4TpQeT?S{p6P2{>da&}wOHecIwq-?l>fv3pm+1#Uf zS+r+ETBFAgzF1BC@L{iuF!{!$pp^gq^rUHj9^u5An~Y;R+Coghho-XJ&%aJDsIkA; zc#38({56jrk8E6hpJe^;@~LPap!+L$r@3b~;DR@$`ADb5`Z)DtO{q8pW@aeNCUoUb`huL|Uz!Zo90zd;P<=^}xJ3 zUpTw{-JQC3!A_#uQt2jUwz`fQ9#T@_Y8d>!Z;-{v3LT$WFlt^#IgR$R@el zsf$B2srlWXhe>~lNk=gPU$;4s#y=ceneQL!b|a{Nd^fOeX8wl$v0Q@|Tdr==;6=l(J(kuk#(ho;AgMt>Oev+n62wD6e~#8+a_d^80hG)+0|c7 ztwaqm*zcn`w_>I515)+aak|cDFTd5tz10ixk5S6h z8e0~uN3wc-eY*ZxQaCK$oR!yNh8+d$+adb==yx*ZgQ+{0%I3b-eoOX1)k}od)jh^~ zrp3h{{F8oc>>8+ROoi%!3mcKM4vEBu#O>y%3}`k%?^_Lf&)U?xeQ$)0`ykLvRmcXX z&`23}?(D!Var?ukG1BF9gE3kKQm5j8ia8k{SDC0YVpd>ZGmvmMCZvr-E%b=ecpbIy zf_XGbN=He_AnU3xT>*f1{N7w_`Fw6+^vp8(K?i5#-Yn0I|WL7 zdX&2exCHHwk?2)wzE?O%*I^c}c)F3@g~Ci@90$O7fKSVgQvErM3b`he(?9|ey{t)* zuB)Ct86Sl*mR+>(W6!T!o%K2bffcAuJ!H?45xu)Lyg}Z#zxbKSt+vhkCgkQh_u-DY z++N6j6bZQg>Bj2X=Fks^TsVXXbln+|;3km26g7?J-1{?5jxWZ{;24O=R9i?Y`uQc? zUnA|uiSu5evdQAxNtoVqPy+AG@oAK|z5oZcZ?_$_DYqOVKOpZ!+HP?OBgmc5gO z0Ph0(Pn~Z6p`!WBojuXjm;Uf6#~|rM_LdWeINIrm`JAt?1by1Q;-?5Xkv|66FL1Br zT-1%P*0g$-(Ik4rvf43oB?$5SA#`^TUiayyj&>U}xtpw1%`uZV>YvQ_abVPQ#XSV( zc#j7F|H1PwYVV^Ni-DTRFTHZK|HMh<^`G$EEGEdg?>~1tcJYOa-8x7&iIR-y$QGcx zrvhsz2HB&?#;O}T@kY3N@}N}^jqVaRTES?#LD}h^%i~CZrW(VA{Ii$MyG8r=YW$QX zbA?207R{<&`Rc@8F%er&Wk?__nNDdqLE!Y1s2eZZT*Nk04gjX5o3{>pd7$qa>gg?E zues=-c)`*7stvOZF_m>8g6=5{h+_}3w0T8$OK~fBImbU3AZ8_YVO;Fqm}u^l zwmp+IE>^Kb0qjwg!5fRCBY8r4QhHARcd4pzL^4v9Hwo*J*1C+w)i?ALm?PsQTHbsW z6q89zMQHcF0ww`5g5)L)}YNfesATpSoyoE*mE; z39LN2$1cJ%14~woU+ZIn$Ner+;^r!M5$2G#UHYeysl7zDVnS!R!N-=i{Vt4>W*;wR z>02fR(Q_r@F$y{Yno(*dZV&!;J1s|;Uanpnwmuj< zBnCoO9W^S`OLPRehzs?2hWHAz(zL}(SAZq3N8H9JpSXz@?IqbWuO8cn zd|Cy$q$Jey;}hpQ({Oev#cjKM!p8kPm@_F4k6nU|58t$L8Dxm;0;J zl6&bUXgBVLC7@BKs)kkh<0BXd{Sdn1vn>}g0ffY7N>a57sGlr>es)51t@ph;iQ`r2 zAY^d--FS+9bje@!&6|&Jj#oQ}UMt%@VWv+Dqpa9%+nH>}KJv~_Ev@^Efn0-bC+W32 zvOK`(h0~5!ao9oSB6Fq=n;D9)#xlU#4r^8nry;I1`(Ghn$9rs?(w*5l)gv9zQH z_cL5*Sy92CG#D&ljNoz-P!mlF9R+LGp;C>Zoj2eBC?FGgHD_jm3DF! z5W`oxe@`VJN0myoyl+~B6yFXv>MPqB-H*}33PQ24pm}2Y5C+9pa_aga4RL|`c%4qc zv`~Y{*BI>zS{B_AB9D=uUL;BQDbeiuLT2}ROS?4X3|2=)3LkSm8n-c-MJ>CyCFHzL zFnwg)_Pg6{)zPIv^o_e#>qLWVFFs9Jrh~%+&PdGH)5S_u=~{d;0yc^Z&5D2tuSWWX zQxPB1WA03xzJ3w%N8Nu%S?A1(xU?H}IMq4}WXW%s)@VhYoW3XyePr!1etF%C$XiZP zh2}gZ=Z995Cq_z2hSUd%6GzDi1QsEL>kJ4xVH;B<&H>h&|NU&4K<6{~knC?48Zny`SeyNNIhzvc=2M%DA*^vc) z)6`Xm@GW|aMSw-DUA`^{AViOwDeEBlLWTpy&B5+VI@dmG9LbB4Cml!^P3d$)no&h` zxO|8ldk;pvzbIZ%1b(P7qBybP5M{GtP&JG(l=8!~5Xwfm5kZRqP^pGkn{QJ3-5y*_ zFzfI3MiU@v7mUwff>F-n%he??AY{5ni<|SP!>AbqII5dmt(keOFCZ_wzGf2XYh?yO z*j?IXXRs}HrbA^1)?yY-Y;QKY*RJ2NHk544q#qYArLW4xsNG;uPVfpgm`fiwCIKS< zv=8TUo^M|NpU(J`oDY%)c%50cf>7LswYBMc3CifiJ`-x@tM84k9El!To{J_sevJ9w z0Bvd?>FZg?3xz9r5GiO!C3O9C(M|O8O(ig9{yDPp)b1nrUYGRSXEd z6wO+YnUA$`-+FykGi_kO`+a(1u~)eFG2Wra!^i&tR=y<-(!{`D7r0ixR`%eXQKIg! z)6vfF0lBJ8XIdmwbNt~2Jat?uj#aa+mX~l(_Iy?rrKTFtE^0>0lOF8}tc*N5ZLUR=`~-a#NmH7b`7os zcGM!DzH7K?m&Fk`DgOGyO-#~}!;~zA@N0Bp$-bE6NZ&0Qi>K#xJpG<9K|QJ9_=;B# z4XzuNSh5Z134NYcl8`s5p{oeSfNuE6EH2R3(`r5~xw0GYtk2zWcJW0FK341%nCKxX zUcdL%k|qBJUU`eDU5`99SchdQRBbm_5`i;$kQ&v)Soq5k#~31wUC*+p+H>r6d*`z} z-M%6X>c=-U6`$91tofto-MZTHE2V(`)o01je+|ItLvI3VlSv2{<0GYprD|_HN#B>K zErrSE@-4=R^srR_G(N!@j}*jXtDlRfukVN`_44P$OaKd%33Nu&V!w&@Ez2H(;JL z(y}*otTyAHz@?7q$kMd)2jAaR6_uGgNL&0tO0xLf-uB!5=O7kLbf0?vNa=&|CakL* zW58Eg(u8po2i{#)5X=OGCjfgy5(n;2V5M!OZb*k)(qH3^m?3oBH-moF7e-$@#cPFB zwM6p>$mFYptLeXGgJnS^^18M8rhQ|IO~$MH&2yUBW&dyoQo{#`9&a}oK(ys$^CDvM z;(fjf0CL2CoNfL+sHR;Ns$CI^EBpY`5g^bPaEA#@_G&9OB@(vizI{rFay)E*$8y>9 zTh)>Q@P5d)Xum(f;y;tyCKuZ`gDfu9oqeVD#EWR=e`SdbpVW^&(k1`Rf(t&DSFvb~ZO7{>4vh&iIUmXk1ZIr5h6Bg5PhDw4t?0~9xDlyVy z&&IPD52>U7iQ#?I!#!;pJFN!NKKDt*QS+9R;67FKlz;#fl5LtAgik=Aaq9cn8RY|r zz<`Zf7w%j?W97>v7&NWRm~yvDef?$oIGIa54C5l1HvSJxEW{v(2__$!*Ri5Fa0fG5 zmg`k6n%Pz2SD`QJLu=h1;vEa-j5b*8dM|TLe@sUYWzcM$Dc{w4*`71Y-_P|$%GC|e zYC4|1sq!i5t@(1sV@UWA>m|p!el$6(wz6vN%EOOEbTP2~CfHmF*l-D^e0n;Y-Yo?= zZ@9)R8n2I*D>oMjfHTTCB}DJi0Jy~;F9H6He)jZe{UiAFXXLDRHIoXlpVXZIb6??N zfvd?)jQS~>2Aj|tqNbvNf?>5SD1Fnge*O{0p^5Q@Qg6j)lo(=tm{=Gg^jg%L@)?C} z8Z7lXDUimUM1M%E1{3FNu^Eyt{V7dN=R%GdAi#n~xI_Q}jnZ*Ci%iJUgfn*Ak;hy9 z`!+slUejnG>bKa$?Ov2`mBpL%4UU$EUy}Fx4r^$p9Tb-p3zxpp@MU$&`;Fj6119Jr zCM46Ekzwmie%>rtWtK+x{)ImJ9^(sB=0#hsPcMr+h#l|vQ|5sS=aK{n$=7ySO$#{D z32~TfdVyxN55&PUC9Y3{+WhFzP5-LV<=s2`EMIS+HAltriyiLxKb+IV_8X3lsOmMB ze1}d3-=2-dE9-ln7M9^V0SdF7SvTUiZ86)dmPH+1CI2y;rq%_gbO|98CNKapL_oAE@mdZ#v`P8_HL07!2<0OkR4Dj#>_AecJo5$)2^|@ftq5tti1g#bzl75Ce-3u-7Yq{tjH)9paYdMG5Rs zE8!nK{pX_^o(v&%5Bw0fo zuElNFci5Maw@gD zRAxVE$O+UbT5h72rD1)W2PM`Vo5iG|?A#F_O0F0M+@<~{cU?N-GQBI|<>Lgke2!-F z`q$q$<@u!VJ2qjz3V`rFFKkd;z0-bh4I=N5#9DCbYemU*}zzO>eIT1geLQ9e`2LX%pQ;_8E z9K$F`g5c&-OOvugR+&aDm{H(<{J!Qsf7PhSn$1p?8cF<)>Jjzwaf_D7a^sCQ#D1f+ zs1$dj=(#zvkvvF89(^UlIY+8rGu za>8Qs1FsxdEtknYGI(jP)Ki;Jp!KZYDJB#N3A0Cb1&(@t{kLu`hM)ps_eu#g=f8GI z|MHY$+mEL_e?^)WN1X!*JSM5`(|;4608Vs4juA;G$=-P&OuavBB__!?mpO05nJ+0e zTH0#p^M+xWJ9c|eO0(L8uG*GjZ!3@nK+fWmQ8u)reFp+R1a&i3)d8SCOmUTd=$2zf zjInzG!c~ZKx)<|ky1YhE9V;i?<#Nw4!DulqOv>MzUh#aI`+EV8(j90<_MJeojR%XC zgxfjL8X9|CYfDzDmesr5Rvd1(+tV0~i#^TboNdzi|Dww~0Vu9Je{=exv)z7eVhkogta7zf5R+x;Oum%ZVd->s9T1yx5&b zdN1aH4q}KQCcRf(hoT=i_5fbKq+$h+{YG;1RSgh7H2WFj2G3X1^RrafU4QM;@ovxcPr5f={km?aRAOiK z!)8kTHx~!bmm`!*BWCvUH2?#)E@4t#PQ@Vxl$g6E_Yo7b>j zRZm$VrPOT%-($D$@w7Pi_CFu2Tlu|wrPg+u)co9S)Tj%TJ?jmT!}3|T7sL6^-IxDU zlj;AO7_`M8Vv1A_O`G0NANwzO{93%&co{t8l(#!wXoveAx>*?P8h>l!VY`i5P}ttA z9Zz%iOcXB_54y-P9%#ayi+-mB>ay{Lg;6<2XD zqRnCvK=22ZYJQ(NE7Ny>c;gc=(t9m2VfHYWv@Zad*hbYH{4e85zF+ZfZRz^+2JgDA z^V^SKTgRNcS%0SV=i9%Jz5o09iS%}#jlYZc!&vrMHgh%dfxTk@kTe;-Cnsz>zH zUXV_dP=xTC5b3Py`frBByepo;R`Ays>Y9Olo@8l0O*pgb8H94(-)6eiR_uo3V-q&_ z55@kDTpvb}yZPJCg)+TVusH7M#KEm|`FY<|Z_Jl2&cDpRgOigQuk}1pVG_+b9CQMX zSB^7}t26S(Xi%5>A9c3#E-ekQcfUL@ga) znvsnW^|E*l!o&HHx1FR7TI7?_d_Gfb0rGK_W-b>2OAGY=`rV@#^rL_l96iO#M>9f_ ziGEuiHNvu_koT(JMBI@vOvlc=eSYVXVSKqYos$hO@Pz|3BQH6;0jdIxK3?QKL}ka2 zCylp69sPXS1F>hRK~Qh^o5yWyPbb{#z3}ddWW$}tpeq+YJUbiVkl5GYjk(Ym(Z-u@ z^`n{uLFQU%NlY({EJn-t?o`RCwQXU?JyPEK3)O>gL@e32fs9|x{~0Gs5t%9V6xf)@ zeJS{(b;FI|4gRtC{2yLpry52j?zIO6W3>VxQ!I9dQuNitqog&jHR->_4-!>RBp}`6 zJ3Pv52@M|=s;g+kb0R*EG1pk{G+7Ep!P({ENdcxu79vX*75?4L zJLqnjwb3hHw7t4ca6pha&1f#)&t5ra=^<0|7_chH--{D&CSqoSaXL}~=h}*SW@N~& zHzqu(9knL(chjcMBk5UwXV+@pe7D_;cdM@dSo-VBW{LYvQ_g!Tv#3%yJ514V+)Hcg zw}-xFXTLq_BAwI)&;;`GlaU?N_BK#d!s`5e`2=*5j@bDwN&eACSQ1N|O3aS4m-smb z&bKFoC^ylxcHtcHFkMV4ClUDd>8PudSU?QYvnp* z-Yt9fS?7v$9p>sW%V)P_E~$%%p-~rpkg_*1>NQ= zPRPpvEMt&M^niOduK1YG+!7aRv>PclNA|s@^#OqrC+O52D{%{qV~HUwBSkpZ+oZBP zx=HQryDV6#nOZO+dF*-@+uu;PMpAPX{|`QoQ`W3;(s#%*HnSvH{r=wjUy#3~pRz3% zw5x-8H=ab_gRUPz`=6sRI?gbltp*fj3<1Gn3`y~{X7Ljv`jnjsf;E((EbU+IoE$&@4NJH3rz$h3vAVaU-<@@5NK}Th6&-T`>k${{2kt zN_BgRmyv?6>KqM}uHYK47-%(JCIXA96LsIo@T_IIB$7=%)CT~uW_^kR)#VEn|A(x!E1G^V0X}^9xG0iA{IpUyMI%^3+P9gzr)Fm$mu0KFWbF#B&u-{b}6yd$X%8{o&{8v zEy6iDOwJPG)D^6hr0V0oPJf13X*wU5+qw?2juvS5)M4-L5COLt0r3==K?zbQW$pAJ zE4u;bKE%4waq2_&`^Gyep1eQd^5+fbhSAH(9VA}``p;b`Fxe@=Ec)KPS|cD+*H-Q%f0>%M!{=#)yMd@xspe6n$Vi)%O)11TAnrZDztcd`cY zj<7)ZV_Hl3KQI`U=KH%YYF(EU7}M+^;?5Q7SAoL${hv!yzM&U;=WVu#U0EV`k+y`v zCXKD2iLqsnv9EAB=MVA5J{V&|{DjeyusSuQSQD5=a_>914LG)=XDoj7WXPYl>;C)s z`VLA?Krs46(g)o=-b)AXqfTfh!Fd5O;i*v!#cm(M?>BF4oKW^)@k#!$VDSJ8%Sx8s z`)gygCY2CAV6KdI2X%vPT*?4PNhMloOq}D!V=s~kIZS4bA)HesqnstAT}N4)0B8n4 z!&Id{K&kaWjvEyci72K;f&n?@4nXQ~+G8R>Z`xq2Y|mWmK1arVX8Qk0$x_y z90VKgUm58%$s=q)uqf;_yXb%>f=v_eUOg34w%zWj2}VtX>4cSTbBH_^=PxEjeGR|j z2@hi0>C3>>dC*Oasbwi$kYlt^a;ZGGN{m?|#=JUQEK*PgM3gc(vuFkd)EZM-Y?v6l zGn2Hh2D4HcRV7-)s3~Z|&zq9@##$26s6^#0Q#n^E4DMk?E|kd_<&T{6qNAw;pD`jS zrAvY_U_wDnC>$cYmPgq*2c;1(wu-{wwYsbOu+Mk|e-?HmG`Jtc2PyD;n4VJva*A}X zgW2{Rs0>I$U$7(&)liNxI~=Sz&cnb^O?GC{;I1k_>AD5@?n@wOYvG}cieH!A5GLRlg$KG1g3|Ormu5Ku)(jd8HWR$|GH%MqcMo4oit{a?qxjGcXM3h;ezZ^HH4b`6DQL zEZqH#x?v_rK?n_q@;sIN;AHiEV$ER8(czqm>E1(A`^OJh?;ggDym=?#}7H3OcaqWtrDNKcAU!}B(H-k%L zLM2?%H7=rx-|eG2&VhDgmN&F;=LL^8)` ziSNTnZem;`33^ydS^9)1l2C5QFxFhqV;Xdk6RQ=JK~6IY!MMmUx>V>OOzGzxGI~mMrEcwJ`If;HDOKr^1m_Gx9^8Gd;{Rciuc19})o0yh zn1f=(wRe6#_R05nL^~9S5Z>PcVt<;O z_5*pd#4cEA5NWdarL-1dOr#i*)5BQ< zHgssKQ#%WJq)A883>oSwD6WDjH$;?!(p?7B%3=q|dgake57m7|T{kVO-0v8(OXJ~C zz>symj7z#8=ilK_&K99t8n5X|u2e*EkrHFf>Z|2~YcfhXwWLoPJRni(5)oe?Ck`Rq zACj{Vi`u-5_HGL(K0d5O#ycB`F!$w39WrqDuPV2uOZEWvnx8U%PyCFqN1=P;%bpD- zS9;2qL4_O&8b60?DNjxjyCpX!vnV$2^7R$8DU;qFKDan3CuO5FQN7)}8N2FUdGV6Ft2W6l8V%s5LRueU2cJICjngA5z(zt zsSghv)2%e~kDI*$%)0>VxXSN%D(Lc$mtr@qyur~M3eyYJztY282Jz8|S}*0Ayr73g zVFJ?lyUD#gN*9-8a=Xg3Ny-}PN{}f(mneUxZ$sI?55zHt4rwgI>-FVl>QT`u0ZlU` z(^vu7FaaapGCZtj##;ARS6%m8wb>%1A#;f;8fX-ltvtH7yV}dw*pT$ zeWeB}qu8GZu>N95lZF3X7xRlAcUD&uOS7MUXclfa(q#e#i|IiRp|l?m4)Lv+OcMvh z5$gQDf7U&<-Ha|VzWL+Uok44VH9$xo+_QWz_ZNh8fu;&vK8*d5+SNHJQ~4vSG4jl; zS)n_q5iEyPL|Als9!kY9OMPLfpSGN8lxU42uNGrz7#aHx`b-;3wnt6O1#Z2~yi zNa1ft$ksIGaF@tUQL1(z|9&Wdvy}sNEp)eIzGwhc1u^X2KKy{}Q3bY1Z^Vde zvi21((dniZ5G0y%`@+1vA@*&W)7;cc^=hZwpcdzSI+j1CH}0GL+w4{PqIV`V<+Sh7 z%KI;e%O~CXumUDAP&9ps4+P3_Tz3nfk4$Rgj7P@|$l18?h0bY&0>oIh7%+ujCnXv! zao4tw4E|HDw`pvG0^lv&XjVZ^I--q%l2bezon$`H04sMqU}i#E;%!H%%FkrVo(lCwiSnp~l*|FNs8h!-Jk{dh z|ALjD0m_fcKKbAHwrs^cICFobIsowK5nZ&oYZ^-2)0Y;>Nxk1EFLu2AW3A^aa&k`u zWho&0qj|tUSk4nULL8qAEXC{QHzi#BtS@cg58I zfhbbk1DVR4Oy!vZ?{)uM&tJbHyJ6Eux957z~eOrYQhlvYA4u0n!RA$neHW-ODGpn5_ zcXT0;YM_+}NQQ``u_BWSXMhchLBb+#2`rsTtiQHXT|ic1 zFsE9}^_^U88e8RcVXr~5wS^vQ=Lfx$cnUpx@W|S^;6}H+MXXNvJg3}L zbj-a#C*o~*d&JpmV;5I@+oMuvqPiW#ekS7!)J(i*1eID2(u$XZhFj*oUzOal2MNZgFG1Cd#l~qR zOW1_-=^h1!w9DRF@w`*UG!=&)=>ad}rq^^e>*C~mrCFN%^0kj|-`SpIao7!8H%|Ht zZ|ywN(U1XmR1~va*$^9cHrznG-=5T0APd~wgkvO&rub?wHBm?~uVY>uM@2?HzMjj) z>NAgEX)m!1W{{c}uL)dYV^~;AC65H0N6W#u{AKElru>k%b~niu4vY^ZMg2;%YDN;$ zNBNzRBo^2J+HXqD<3{ed|JrWUbYN5W6jll>F}@JKHpF{HL_}1|g@}`MIEfl#*}W(^ z9AosEi}7}7I$paj>*>(pnD;#Hx!#|#YOAyw-ZmF+g)c9ia8WR3%3bi_jC%0<0WOup zf<+{UYOdV3y+;U<3FMx4ICDQapFs5>f>x@l%oDL{WUjoxG&<`P$ zi>$qmdmreCKnA|R0hP9n14k{A6cA{p6fvXorG%+nqD3nWe6&UOX6Df<-Nzbkbcm6d zAJSbsTTsv3bs_by{rFXBO$SU@u^S4}B1%7lhlvOL(~qPaFwm&qHZz*co#FR55te&rHK2q3!X7k=rRCFLwf>V)Sl5DA=q=<#d9xqJsP9yDB+Xwq8=pZOiqh&&KFFx)lznNTk z=^!T%%-Llr1$|6(%oos-137k88{4gM*MqWDuMIkX_xSv^%LijA1+b{e)MwO#ez{jl z^5O~97Py4V*gLS}dgkuN*C}s`WvkWk!+VGMuf_6pMJ& zAM>KFC|1Lh=FbxtRkO?0&qZs#c`&Y}c@e1qV!aok-GGm&@00heC$`X5 zDq!O@wkKg+VS}Lx^xN2~S%VmZPuXkSm>vbJIBKzfIH+-y;b*R5YXDzOO6cryeYn?< zdXF081h9P^#~wHS7)*8lXQhVg;*=lG%9l+p0x*GjT-t>mA(hO-+HL70tdjQ`@2o7< z--(E}lGDf>G##?DyQOTWvGL2S13{caq=G(UjTL@HtHga2aW$D7Edqh}2)$p7)4~HJ zv@D0_E(dJ|>{3-ZmmnISG|rU(=BU&0FavMvBZEK%u<{xYm5aof0N^p9Jz#8kW{=9= z!KDThcTc!YvI|TQc(!xfm$^l2xR_72lJ2+I$_*!eF2=EjEzMyiDf2TWsX7sJS-Qz+uMCr*^oph? zhgJ2|l-?C0xPC0#q}dWOcjXhRiFjL`hZxm)aY45N)ZlO%l9k1_ICGG2G*oq4Ae$VD zfa<~WNMrv*2$0jB9UN6_(EOC0^O-{Ko{!pp9L6?CMjVg>(KoZk2bSP7i)x^!`%r-( zmR@FGDLPh|C7Wl&H2-@KU3ORRjV8rJHfiW+7cGPvY zQe@jFXJN)cG(6AUylg_JvO`Ywm zbUTu&eGw^U*{&)B)A}O|AUs*$x=ct+d zN+qq76Wp#}G&v!3JBmEyUOg-C4NmE))NzW?J65~&H=sT^?`?yyDF(6t!smB5V?6$O zEQ$hPro}C_WS7M{2na^Z6LvYWeBV*1F3XgSYL?TGIWSE-nXS<%g|dp7$@B8T=FJdd zDoG&ezyjuYQ#o78bYnfP4lx`vJ-+kXm0)v$8Alk~W0F*dr7A$XOf0Gl-al2~m3BU$sA;`ex*jN8AC33vu}Y*C zMt{Mrr{WWMSSka&_saD_X^$GOaE}6Sfk4V!u+fFTWI?!Vq>wG*E42ZdjQkW&2o3XR zq!Bo2*Bi2{Cm*Z7*dg#>s4mL}Gd5p&Rn>3N+HV<7eu&UUWlKFpxBzK^9}la%MToYM zD8~8vj5?o@f^{MkDRnV%nWL7oVXF)~R4IV)E|H4UDGMwq z`HiW1y~w7m3^=?*CQRYF`i>9%X?47nU9KPF#A#t%>wG}4AfP8In2F2DAwJSMFv zj)yfc@4L6u?!h{MD1%aq4$$`s=)TGX0I(%uHZ#tw1~8^02p|LS32@5 z6@LPbJm0~mk3(Bv0-FI{2i2E-8{US!$qRIU3>%;*wA2Mn$`mePq`)8Gd(~-j!P={P zgeq+a-Wlll*Un@UxGLN+x&zs|fL+BL5uC|)VPe?|>_US^2ov&|Df<;LSfu2#tf8bL z*1_-#a_TdJ;uWu$tLSsF23)K+i%&!lwKQ9OuAeGeQYQz!W&HQcRTd2vfEw2URR#ZU zzBg^zVH-K3D@T;5Zdfj#)I&3)0-kAwTbv1Y5XOiL!SI2ar}$t5MIG|hM^r-_eCn1W z)}q3!d3-v6vuB;-h2Oc5e5awb+>EWP&RV0RUb#-xR1AUEJy^BMn@XWQ7}$DA0Ds^6 zHT%OalF=yZ2tHj_IK1<&_7q+p#8vbZo5F$>TqXZigXTNQ-qrT)ECeb-?U09!vl}6} zY==iCZ_yAeO(|>9_wljJBp(Es2qE=Q@C^SOCQ4Ji2NRY&qq#lx|r(5x}ZNHcHF;U?r zDRMB{V3Q|6ks=jfh+L_>j26Fg2r-Ph6k56j}+_Xiosx9BtIh;~6 za!RT+!hN!M&G(UUQ0O!1Xv4J_S39JmFKRQ&d!Kf-f-VCbKB5`@Htp{)@9_gE6DR)u zyMrWPra{d^k>wXAP7h6lO^q*eYppmt(Izh3inJV+RG`C(5KheYa$m2bnv4(;eiUHOL(h?tfJU;ehL>x;$M1$*6dT(N+X7W}Z z8TYoh;!f4)nb;eOiPOY&&Lu{_IQ*^%evS2$+8XpJD$pGPdX$&-UU+t8Xr0FVQ~K*? z;s`T?(?CL8w`R0MtM}w!{N&WoBXdFAZSNN|5ijnP8@awIZ7>Ib@vDEQO{U*_a=xHM zlClW&wJrOH8UHwb-F;yRunF?1CQon==UwQPf4F+=c>J{s&+~@jul1nED@KV0DT{%n zbx5sq-1lxLP)tYscgNm{0=rT|1rL01-aZmnW z(Un(kDYnk*Y~h#kzl+DVzdUfS*k2#9rdDiOz${yUlsWN{zt#_0&us9SHT+oguTk$B z8Dy>C`=FWWo^oRxqUMX$r$PV|0DETe@|!^!eC)lk2Itpjqoa(CQ?RVp&=i-X`T7h> zMvH%PM!Z37975s38DhvM5hD9SNj9@#L9+tKw3!P4o&%`X6%;lW1fUq!x{WjiFhBuI z8gT&<49gio`YZlUr>*)n(;6)!nP5C%LFS5-gN*P+gXQZ%cGSy$S-YBZg&DlNH>(Y9O=_?JVYUtRxQbGEE!l)9gvG1RNUQQ5AExr~Tid#;G67R!def|H zi|PA*`r`&}s>`@A0Kw{y@J}8oP@M;s$dpmALkYgsw+(zOPZxc>d440gAq~RH@tnH+ z$39!DhcE@g)zROvw$$WyjxRb$+%aa1H-D`!+?+B{HT#uM?YX~Az6qa=x<1MT_PbsdXc26e)#JFs_ET6M(Wc5EtB{mp)CKB9p&Un{{eU4GT2 za*z*Loieww>LbH9%u0>-Y}7)FOG}9bQ~Q8Ow~zc`^;uH|bh6*0d;&lay)L<+7t_qSJ&H6&HZom7jc3-kR_94&ojub z+WD}ga91=TU6w!fy$I0a?Xy!bwYDE!?%|Vv)o%e8Hx6EE6UK{#Dl9(vCC*o>h0-x8 z(h4Lt`pM6mI8LA|bJQlmvHKRVwM+H#iFdqP2zn%$VQhZ7m*8XwV+mFC728*j4;DcN zW*JLDJ{m3(zQKf!1|AAZK$a|=iG2)?+}T2M1}qK;8-z)oU+kRrX*NiZEz*1($0sej zFcrXYMEK3m=ry8?!rIJsPKA@!`V%n5wJo*5fNwC4JwnB~|M;x`(TqL!Pr~{$oSA(U_2);@>W( zw%buz4B^3ri`6A$6V8Ysn%n01sVan7zDDvlUxEL2te^X_FKQ|GiK{At4Hz%*lY@t= zh4IpYHO{U+*;#rNaMO*jbGycFmy3Mfmf1xK4Ce*WYS>@dna1L;kfHF2f#6#yXEEyl znWCUyxkaY45Rh|=nvLH%zisb>fAW6(I5wB_e$zo^1+u11xQ?kd@YtQg{+XIOP;^*w zg0QxO_)+8%_tvnoMRevipwno(B{E1I@FazBTj}>{We#`O>ek-Fac!Wf&wsNK&v) z+M&0AbjS=#77=|^j*y7_in4HZ*$L(3P0#Q!ckj&#;|RykBSmf@3yXU(7EId(g6fEBOhSAZ~43};3_&OVOc$IEDm)mvczSv6HoWX+BoU&gu?}B#Z``u~_qj1hzezP1q z6MJdE3yVXQ@`jgJBr8TDN_6_b&J9oW{jF0)t(IK%38UoPnhFg~1 zd~qM7sdDJ}sn$D=8P833KOVDgnAtMw8fsiD6rEHGeV)Du3%JDmqnqu_GfR!6#p*{- z9COh+TZ&^*Cck|A@XJXd??0e!oAKNE%S&DjQEhrE|KR+}?b+i16Aq~d@eH>(8MXv6 z);-O6BrMZvGrl+3hhROmjCFJl>3J5dt$Mh1MVm})zbhm?Lh6OTS`Y=}xya{21|yo& zmvPI_*|0z}HrudJJH5w{x5BPTNW&auLB&gXyTL3Ki=6^e9FHv`*+sHiVgh&a`vOg# z4oU-k&G}frQOih_zq8O*0wkg95{4-hO)NmrV}G=l*L_msoPj zLp=~H7vl)6FrpsNvx!}D3MYx*vTHc4zid&{Suz*BO(_wtrn<{B2(Qgbe4KsCuE{)4 zt@EE@eaEL>Rj~<5)3^3tJtdjXuw+*9wUSC!S)MvxpKICPa>(xuq{4ywFda51JrKNo z`B+ibZRb~wDxwve!Y6sl2b)}ts5La)M|yH)>hmcQ6cm{LF2-M}pTwzme3*9RRPHb9 zo~aTSo69!Va76IA{#D==^`7+81Hba{0_Sy|=|B8%=u*#m4Qq(!Jb0ZqgG5}-X)FA|{F9o7CI_A~p z>-vp4th-F?_ynfv?9($b4OOQyU7f!^2z;=!mU)9v9YUY^O#v%OP)K#d@ee-x<^O$nI1nnmnc6TdTXz zdAfL6#?)opVET$N8|2=KE4F*fJ8vc*{$M{rKKo%T*}sjNJb5MlS;2F-B4X{ngI|IY z9;RC)@^L}bCVqA4yX!8WuKiM>M^t!zL{mWdd9JrDbVZkEHx67CO^A072m@CiZsiYT z9X?2Z=WxTFUQg`yo-K=)tIdCUbNYt+uPaeocY)EDSgXHL`T~J-J-xpN)va3<`~QsD zAK7|5I927V2S{0Cu<5h8$Kp%%0DP~k0O}|Rix*?esu8~Th4c9aznR3oA-i^#d_T4> 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

oG&pyz`()|QlHZ%38+KnD z&MaNIz5Vh0?y{)Yb;9peC;!eWP|v=7LIR%NxAZ@DE(kGaHQwaV^6jX~W++T$^0A5V zd-lKO+3nGPy2K)vQ>?#^Y05S|eqs9KUFXu+<^1Lc+he%~k2c6H&Y;SN#cmIy?o!dW z-RM;U)V(ZBg8#oxPXeHeQ9dvV!TAR2QnmqgQ0RTIsj}hVOZ6Sp?m}fTky!xDPayT= z48lMcbZU^csb3GJ%ABWe z=>|&o(tr5XK~;k{(_TpLZXiIIsA49{hl^SXQTa21_**aY1*mvW#sSVZgTBjNL2wX1 z4&Wpy6!e>C3nkA2OQAItTB&jdhH6gza&kaJ0T-L4w^~4x%4Q+6_)vBxR!TwDA8H#Z%^=Ql}`Ay%hR`7C4xUpa+~k!K8F8Is+#3q#Z0~5rrAiv z0OYlh@%^FAUI3cIMbShM8$RM7nU}l`0BKrqj>(nKpQ&HPV}59UamTKyqpN6mAr~`0 ztsM1JnI)wobsBl+)mW-TBbBAx&W9@S>vd@G_8+>pfBx>ehNS`!Su%8Bud)d4Kn6ev zM=Fz#+zRN=Ho}G3`eJ)=gMgQoVY$d~n~=CoDpb5Pj(}*SjPt1pH#~&i8)02u48xH}i{($1wnN3cX593CSn4%XT!j~raXLoOXg8@O z8qP~{t$-=+X1rR=K}tg8wb&BUY=^%?jn`ga3b>%q9sncBhqjcYnu>_1qMnES#3TxNA`;>M<70-INY!gn%MhY~ zA2G)i7o-p@%9Twigv9-UAG8dw7E=V^drcw@5$!kyWO3r3{QOoq}PpGU7qmxH+Z@(U0&$v@h7on-J+X z7GdV3j^rzxZT?<@Gxb$qiO3$>LAEMqlt{zu62$Drs!M-3oz^RO)7GNy$;2^2g9hGU zG=vgou8N~(SZ5SCfHWVZQsi}b5+c%)2p8hQh2C#+ejDB+{Z>q#EuqMh&|%B#u!C)= zhaJptuD?Z017Ir$KE-t6dEzVhNGch&l?&w?>jcV-k5LE!Tcwz{v-6SNlz2{f1_4K~OJ^7$hCHJrtVP8s;pjW*^1f4r~17#)XZ6OcUICl+>@E4F?c z*U88A%{gmrp*{g5T3EP6t`C=q8{~)&k?~`k0|dH?@RKj8mX8H_QlF-kY15HINrX8L zc9etp1V}8g#D`eo?`c@1Z^3gKZdp!(z{4QR4@igK=!9Y?09*?flXgRVf?KMw829VX ztq#7ptS5V8yiCR{K7|=CaX?3x>)2w9OObDM97}lj9coIG6oHzeSPl( z4!~mg#2B*gcw0I>TWOVyXrU=hOAg(&im$SWXXIgu~QmH9kUDlJn~ zM{jJ$&Xkj;rk$U`l+DXA$$(Ia##Um=O5<*lu8|4DJk)U0*b-TMj!$TdAfSC!nx}UT zPviD;37>c>n-C(%Q>O6f3ztf=bkXr7EY& zZb#n|a4-l6F*Zk;<4b5KGYodc?=ai-n2W8M#NEaVQ+ zDR`Q%5|yGdMaM7S2-J;iKlAS9GA%&BB;t+{1+;)=7Ds%2%&)LR_y{mBqM>pRkEaig zDHlFITeCF!OVtGppu+{ z-Bd_d%-}Z&o;*XU0yNBd${-up1xU1H_fyJt%pu;$4G1Psslc0n8@`4LXYB zP`1*9FU}A^-g!-EuhCMluIVPvv0$eXx3JyY%@a&{>T zndpAr>;MswZ1J&`^|zYa@RE$S;3yn=uLMv;UGlJw-87Ipn@e-dR&@ocw6eGv3Ol^f z@0!${j%w+quAE;#Cfq|%vh|%`+fWZYs%4qzA-pK&c(o*|#P};L_cKmmN3vjaTI}9% z$Jy1@nCj09*PdB!TFG2HcFyCOYxJ_^&VE;RXBGWT(dLCZgUibcS%*Og(j9EROmw+KzZMJ48K8kwVR~_bX#b4dlV=z1Ipdk!_ zF^^syq=iap>@H;5OID&jL-B_+Sy|)@OHjDF(ZjPWhGdxF3$xHUf zZRJf?oFl~@UU5zNufVB~a{~Knk7faAzGrIyp(4fV-F&va!Ws9GL}K{JQ+dDASoEo? ziVSldrHJR*ay22%7bgh2eeNj1*n`erYFSuA5YalFctbLTTFyAxY?%cFzuql&*!oRi zueT8T((||C`Qgqa#gpaLoCHa_VndIlYYgVT)Gm-ygdThPUD<-2MM=O9AdOrM-ufKd zZSZ0q@QDVO2hKea3NgW4DBdNQcLUCNX*te?IU+#y zMBL)N7vzdua?ei(>|rfryx8>~o0my8)N*lUP%$_o!-pgCPtXiKiqUrcAxPCtq@SZz z$y`YCtNlPlru9D;qh!lct(igVf5Y)FojIFLFU?mwRK+y^t^CZ~88pgHR@^NUmy{Ab z=6jy9ZX1@kKbgE2U-qZgy!ff` z+|Zw+H8oL-)e%97dXg@E4F?yi-yZsM@8SD9U|{>7ngn#w$bK4%OCgmsE}LvDHN4vI zaOTvT!hwXAsVLHN>ui2eQQfzTuW**)YI_IORk8pmK1INXpipMa;6It4oQ z(j1mRAf)8kY+0)|H*hBlIbtWVCyg41m8JuJ$qecJ^>JE`6qqf6E-zgG*%kwVTLNsc z1ZDy@m<68eVOkK9Ey=%$~U;efBHKm>kRDFmRACZ|3{a5i^C6JdbIvr5#t`jXI~n+XBm zappZz>0b+moqzl9g^MRc5b7gXNf#zSsbV4>-B_m|oVzg?bjPR+^e4(Q zpVab#g44lU?b9OX)}O+AFW_ucAN%x_CH8NN~>c6grgS~|&``!Vs9 zA8gN7Vp3*JVEOsr02`@A_sqD_o9NvO#}rfdU3nH>Y4Nps&t>!|2YtTER2cv*6l846Ii`1^d2vm- z`I!L4;P(I6Ka4AtZ|`zFJh3n7KKhO@T&tRaU-vdy2v0?q#D~P|P8FEnDethmzxN5| zy&yHBV@~gz>w+5_?N82e^s@0dx})&$^8+YHd8nGv!TTnIgL%HY&%sYgO^g`(LZBzU z1T0o3P_zoNvG+@&4XKF9+pfm#s37Kt9EgmqmsNkq5NhrqX)raiM_s=m<Ru)w`#~PdkR%j{suE z>KFTWl^W)}4ffaezBq8eDm1Ue<@olFa{XQTKdx6QifJCZF%T4MsK_7oH@$ms$Y)5a zq&4XC&OIW4YiDTL=gpH=Uk(mO2sMmL#Pv?vw(b~;$gtVRz5*IsNY?qh7z}89syoQx zh2Od8U$4W2V3+_5Nj-2i>{#(Iz=0xZv?$Acg}7q~*pV#i!dg58FLTmfyzh|QdNbf$rkLdW4{w?}v(ff%v+qq)*m+urJ zQ2qtR>UpyZ;}s&ck_L@EW9hwaI5u;F{Htf*VTh6K`L6h{jGkZJET0JW*w%9o2aX9;=i$}ssR4nJ6G^1X9eY8?(ql9w2 z-2PvY^7*?bmA-hKj2fvE{<@d+_{(0gN5e0KVGWqWIoI47$EU(h*YBM$Zrc*~^!Rns z*zwcfR-PJrKiCJ^9ku@E#=%=G9j;=5ZtVB8a~9lFxIcaW#mwe@h-}fxym-t4q6CtaYBJv_0|Ge}q@-iMK%uqPE>jVUc$O^6bwzhQo^2Ss|X3P`3P;m9~=G->x zHIpZsD@Kr&g`>jtkq@z-nyiHdrPji~ANE}CoVEVo!l zEEXXu*tD_GRk4KmSjqW_?{-H&C9!{)Tz=Gbxge1=kQiZ@q<3w5Os;L5W^$Z%Rh({L zoZfugHe|ekR=km8yb03#`G4$!{CM-Wc(a0dt1&jsjI~pKr>#~3JRreoEZ%u7-bFsa z)huC`)|K66A`-wA7;@*m>(PT^v0jcug|#aR@<-*(5|lKj__PRJ(*m?fX`N)C!lKHC<1srT~lkF0^u$x8Am z=>Z{`eGxeYmkS&(7s_8Q9*Zq45XN$lDS28cw;WT_3R3PAq*k@1)QqLpj-}j}zgoYR z(&%-ySw6L;;A%(Z6~Wu9O%W;iW~psvXh^XVVWGVTUs%tdC@d1XAA&-jMS{H~Sx(=qc`K<4k{ z%s*9`8-1C7=QIByvmn}8FsCedV3t@)7OFZ6^E^v@Aq$Vnme9_Ya>|wo%$7^ZR;bP< zJ=Z=3C!7^lCz^aXXo=A z%Y__kR4!dR*TyN=E-=?2CD%zha5!0Pldr9M?b%QY2o^1 zQ~_JNAl|9qN?<`!N!PVyl=?ev!s2kbZH*%bA=r7jBKtW)W9 zU}@(?aN#1D=v4Yu0sM?AYpX65E;IF0>9oUgB>dDq9|fp z$~GS6BlluX8rXuXf1ilKUNT6P)T?P^}QOXM&pM z<>;3wepI`rVyk(n{(8kX?HiWsxfpu| zXU&_TPB)#X2$y<2vxz8q7U-Fpd#L|*_3xYe%n<;WX{S@}uvj6Bz9G*6{b_lJ`FDQV z-Ec-{{vMB7)#l`i-6XYE{#h#x?{~aNth#)vJkq?1)gEBr&+0YyG6+ zQ=F4T(D76yHnFDtP)*Hx6|3e>@qyZc-*+P??mnrh>@B?5Q**1Tzc#P3wp6D)qFs+r zedmsO)nl!yf|Ce##GM=k(1v5-Kmh$ufey_3KgYv5&B2f8n=bVg1rZ$jFx{EaF$Mz6I-SQ&yC?`J2{H@=L33y>U zh!qx9pih8U#Q6{Ca=Rjs#PK}Ohv(HaOjgt&qrk(gI^4*+|2IiWAyr=H>j4!{}w<~_R*PBgK@Sr)F|M+1m;4vP&D(V&ib^QCo8baZRf zdc&Xfvi%!%3{oB299%#()#ydTV@Ck)bQQFB19kaLw0eTm7dV{*{#)qq+^BOI zh8IM4>gs^I-R@6a1sPm8Eg00^FF>415et9SKUdx(oz`L_Yk zNKLVG8rDe%?dqS=hr$0Q;qgnPt;MB#EEGSjml5UeIRV0_@mLVqjXFwbG>R#6t|>i2 z1CNrQuIqrsKA`TQhxRoOn$QD`VDN5C7}UGFlg)Fa0=B~(WcZ^Y?}icc(%o5&|8106 z0ibv8gNUhC*MTm(td^9WkNb@pZ5Byx9rq!3`_o+NzNFr-%6)7V{SfoLqsRqc#D^0^ z!S=LH)3p1KoS(iXbyr_~n0Bk>G^vqBR(x=^?cZ~2AJ(AfBfS+;-2&<{aT0WTR5q(! zZ;=$<^}X{y@7BeG)%j@9htu$MqYPHxWzXsSxrK{<1HUyDwupMX_^4}iXBl;I1TxV# zJut8}_5P{557KHL_b$QguwaoJzMNBWf&?}Qw}O+Z&$rbMDq{hcEa%K1kmlBZw7&b) zRd8W5`lI=P9jmP`<~8zBY3FqEKc}IS{a{m#o?VBX4YNX1N2EnH=n_HmGor3_-r%F; zU&j$EEZ!F)H+2Wx4ge@$8sYU&0|8VN+IN%-P3FLT+{BJ?9ghvenOSvo0dy}7?n4t7 zLCx*6fH!;zPa6EBi1h<-hBlywmf%PDpu0HYNEUrOJ86q!`L}8TrY@YFCwuL z`dUNU0UFG0E6k1tcXJcf)B$D|puiH_Rr02CyMZ`9-e39v9O z99s_ss1PYKM1tD9why#der!CYXUl~;ai)*g<2Lxy9>L%-5%rvpu;mNkvcThEF1|zn zw;$HGq5@8CJtB$GnhY3Y5&rc!%d>EI;Klxok2V0pi3_#ogAM?=g$vOo)VVMb$uxWv z0cOXC9_BA{1aNsOc#sKhMWBU5+}pD4IZ~P zJhc|U9QYP8k6$I%Ar0Kchi~q~2eP2nwA!?Ah#wc1Ovb$B!;U;c z{UwOIQJ;DP4V@uS5*H%D6`fL0Cjx#W3m=sA$$|Ma3I}0i0rq5AG8um{7~w;OGI0pg ze;0Dq`4A3wlxj%l!%_)&gzK_haGyRIJj4|p93ayb?@55q_X}JEfSQQi5e!M9;-lQ) zN3sBaGTo32YB2llmWoT4G5t^ zunn#vu_=X$=)HUK5PZCKmk4l*P;MGO#KFCy;S30HS3bg5#GpG=eUyv1GYz#3eh6oQ z#Cj-+4-+~w5!c?;Ir3rGsQBotPsHH~@3i*AETAa}ywX8PC&4_jrj7#yr*^;%#_GE+ zd!#*BJ7O-p?xmM-$d$34(n~$U|K%K(?_!JfkWdkBG1_4Wl4>tI9=cjnwiqUSm zGQgso$N~*uC(`6p?MfAADl46{x09M#T51oG@)|*NQPK@|npxnM=3BbC^M%`m+IER) z4N~}QWck7v6d7DGNKgaXYdPh1136SXzeow+M5pUy8jJ8fj`rMZi#K6p(&o0K0!4|X z=!>$&nY+F3#7fNE>`fWWC9v-q_M0&hQT?o&%DNS13==|2@V%>sZOrmyqcotRT)#sw zgG5O39Pm07X0ry$Eo-XiZQLw=DkaX#k0lYb5hto&@EIjE$%SX6-yU5s_6yCErNH>ql=!8x7e7H*~GHvK-%l@!yqVdNHska{dm#*j9%*Ck%Q0z=6s z`=Ja3#xqF${6myv14C-XRe);-#o6{phQhb7ssOBE`k{I&2zQ`YgRjd^3A%6fDRLZVGs?Hm&2HeWo z9~F3~=)!tn)y@2*ImzPpbBeXa$UBv=&Nbg0-XF;AaN3U@lO){>hHAv%sx?Yh1Y$>5 z3LW8~2?q&y;k$Unz0?w5gCZUz!%*3Red_O0U#g>i4mgz63qEIUKQqs! zUrgyWS)In8E2byBS?jfCsa?4;I*SGh93_q;VaU;Xm48}E5(!zjdsn_{9gp@WGG6o3+#{~A1^Vvz*TnOp+eD99VV7B3{Ys3}p3CVCtu*%Jb^|^k= zob}K|SIbXXeN$|E1+AGZ3QC!iSNb)@$#7V$N6L-$ST6hG&qQw7H!?v}SoxC~md3_J z)qdDsdnF@4U0<2xU;48T0QJ){lwWE=rAME;hK=$Pvo;)drXH`Q0KUX3n-Z(eUR>5cUQ|s`~2^!Rlt0r!ym0-D6o_VR`EQV`TBf%vg zV-*Q!CBO4DTPRg}D_n)Qf;dbmA^n`=G}gHOiis5g8MOvG?=a_8SpSQ?D{Uw=svu5Y z`00CQbXpfuf!}4iG~&8r4cLJ_Btrls4#XD2V9bCngnt80p)l0L^X8c|XQI8QKCQOw zbL`dVB*S$brwI#H@iOy3rV#-``oZcZG(*IVi{qsZ4=Zq~2{>0XM~OGcD>AnRuGsX= zO8Fq+J8FXy&WZ}gL1PHxWIjw0Nr^w;m|(sbj4pH5%H{^t2+6@B_fyGB-;*eF9QNe`D3-uZXEe_%MT~VB zS5U58&?>;J_aTV2f)jRg@yaKeq>^qy!qa+!caqsCmYpbW1^`$aKBGFdJ|!%cN7!)0 zjLD-d;hyQ5R;V0@w6!ptE3@~pk=~aaH&{QCqUtiPxE~>oAW-nk2!*lV zUP-dxG)|Y#d!j?_1_;xzs31Q~A-`8eLr2xT8^FCuw#7FKGAveh5Z!|vG@V2;BTHlBKbQ)u$Eim*P2o@((-0w$o0>x_}NKXG&XKc&?C$FBc?mrjkVH(S&Z^w zr>OzBcPx8}SJ~-1qmDo=`xq-$SY$GrvAwRc4d%Mb=59> z8>8$&`%N^vz(KiVSVRqB{*S3QflA^H`@e@B1$5kT#~pXvcLg;ySK6(t%oZ(|s4Oi_ z*%WuNEKSoWt*p#Qt;npvT~nj7QZvJ}vNFT6(iVF8JM#S$SFhSuLPoMe#)pwejDx)`cIWB;mi$CnMB*Dg${S9vP zG4&)j9Gw43P=th6=7W5Lr#tJwnAwinXGcoRYR+MG0g;jFJ~%R=Edqd0;d834dSBCoIoZ@8LyY&wi5V39&=a`VfPiZWO$S~*H}o8 z+l$Pa&2=IaM&MmFB+x$zgaLo{(R0uw8q!Wu$`hj6t)V7(%fq2HSuzPcFoYe|mrJaK zT1uJCDp2!=lVr&`7!>YQ>Ea+|9tLtEqB%}!4Yi&it0{b{spO{W$rsYAitl3)@ z(biA%pynXc08|+`3h`T_xJ=|mg|J(#n91x)IRP)ek|XIbjU)$FkF&czX@4DMpJXy| z66A@e^&lCZ5erihR94S>*P|gSk3*0`oksKRXvl2p-3Thj76d>6(&7rozY?8M$pVGB z2|KlwDFNa<2vN+=#OrN#L==%x{fBGC)$K6u%;RBHjyNZKWNe|w@FPwmcGRmt3|2Q$P67{#70^CY-_ zMMV;z_ZDSLCmPd{3d;zA8KYTe9W{-lbaI2^ACij~@2;Z<`{)sV{1Oak0AASg6=}H+YrVvi(!YiVZc+u7!jvTvZ{}q)i zR6nx-G3et&<}s0(WXzdWI@ea|M(9}e4gA8QEX8d34=|>|{BF=4oGHz%fGLoZA+0WVV zkmDl`+Dw(V0`ut1`>Pdj?H#Z}Df|$gP7p+#xXbaEFapz2Q!jJJy29-9P%iF(aUK*8 z=*el>wS3@)H&lyoa>q*+p3A8CcxQaG3mLtEld;Cg1UiV<7)%X9|7ITJB8+2MX_YJ( z8SY$}o0Whn*15MsO~&5KfVz*e4{(`Cszp4Vl~Nf&#FxBG&7GKW4zENxav2(O0ssNp z;{!OPGu_e|^ts-S`Sx&LXow!#@8kydNN7l2> zohNhTtVqq#e!p1MDKtRo?C<-Q2wC^SgVUul375khJ6DvaVo52(~dRB|dVGn6XP?ow!E zEXobf&XBMHbWP-Jh_yIZPK9-VL!A~G@_RaS2c{aSB8s;`?vScVq~>qzOl-(GyozZ! z>qF%NC^A$lmX*$jIZ5CdeXOS|9moQC3x@N@6*?Kwamd+EQrxD9ee5vISUv ze3X}jaf`)_53$ySu)29$lN2_nT0#lJ+{96+8yzasq+gUnr(f;wAygaf8e`IYU^hW{ zl`a(d8+LH#s1KhhzmTk6fSO9_{_ZH(S!VtyGc_9Jj)n$V?`+4gja!&$0E|F_MX0iD zf%k{V@S3JO22G=I$lHoJXOpeCA;R)OHk}L4XHUawvJwDD)+~ zgy|rzXMKd)l4nh~Cfu)jttEun*Ue^;aMx}I3{csxwc*cLGtqefavC1g7mmij;<+5# z1g&I(=}pbN`gZ7r+ZXhj6D_l z@GYBf1cic(tG}-aGlEF&GS;zS7}$sMCqlh$R@C&V)sO}(bjs|(r=-!`ECCG5V;Mz5 z$gv!=`{nvg$wWa}0FP6(gC9wTCW9SsZ$?avL>#_2X#}c2O;K=Nsssg`D3EmxzfG=3 z+}{8_*vB%bTOPW}{N~teoDk&Dg`BcsVkND~;e~!vsK{u|3<*qlndSBbZzV)+c8A-B zz)Y5uA{5~1=`hTjP^;0Xp*^{nrXa@#P7;xooX&9;z>f)7-a=&dC?4U?>;NHFW^jsr znH8=7JhdHY_-q^tg9|n72)45nw$kYo6C`va7sXL2HwEum+&^IR=xg0rWcM$WA9wXe zyneTA?0RYfGP2}^5l@^UWg`K4;u2ddWjch6s=7l~2y&@J=BY%p>{+H0-fvPBM?PAEy)fJdYlBC0m>u z**SM?mea+8J-!8X(PP>s?DAD+D>!B!;ZSIIOGEh(5^YQ1dkqE%ot_;bU(a-iE@=NYm2Xr zMMN7>VfLfBRD$CNZMZg--SPny^-Aq%<&QL?)4~zcbTW(3cVWZ>MGAQ?gL$I%|7GTR z6Oy?syMVMb0ZUcNCg{8)fG>WM=eyc|_%8wTp0Ipw9++_Bm;jY93Pj=0xIE}cfil&5 zp$6elc(od)W?{1+E#IjyfejZe0MfGv^tLNZ}Nv=Gm zBYKk+x}VSnQx)d=P1_se*{TP0Gp|{1gZJ3W+whUVMGa`zN$4pf9e-lRL3h^X7ggCj zlqY^LDo+m^4TaEQ=SGm8MA*^TO9wa%+dN{X02a-bsku!NGU<7aLeAf|+)yi2RwXP` z*Q}!TK=|19KtPvk1q;kJwQu<&J;i*h!Ft!N7OBQ42-TPSOJ5&5Khg8p17%O`@%e~K6O8VW$ZKM9eV#(;{O6^wowAb7Cq23S z$nc&AWohAe@1r$2kmtU~@*!QlJ-eT?!$}?WTW&c{d@Oq$_t}7QG`>M^%J^L#)X=wn z`PwDleAd{v|7uneW4uD%N6P&ziU zxw2Ko?B+?EjnHoBrKD~5)3yECA@O59+gKOxb%pu(W7@;NWCk8o`B;#nX9PuWtu@|o z()5(C&)-y0;CW?+Up*$f@kwcF5PM4ydb=9ybye z?6&%Sz_#{?Use~gzISWarJ0>eiqFt++o}>oP-#>SamEDh7&L#ZrRoo#N{(Ntw|V`R z^SkfbwD7+_&pEjw&y82bzqhomEP#Cxe=7w3_~j9QQ%VZB0|F}Rtu%&I$2(l{U{`IK zdzKRcYx$&`lxjH@P(}fszr4+QbwL&gHhtA#bAuWsQ{V|^4n#FJy+g@Za!9vg$Zh&e z%dpp%Mt=a(AcSHdSQ1(6Z!#1Z%{rO$n#tOp4>2H9*uxjL5JEP9JwxlO_BUVt(2b`F z%WTxhnKie@dw1P_sj|(a>_<||wO4G#&^!uKdtY4sjq!sfx8dIGSfD4Vap+Z-Y6MZF z1B7NU&fR4VU0iw-5jz?9rpnsKO{IBA|L81$l?Y}pDT@L>wuqcK$e2?qrFXH;Vy0Tf z*_0z{A?zj(AT)M3@IauAo#zL@+33lKR)?uBm7*QPIxntNI|L#O$KSsOZ9E0d%q_&c z$|WWwZD#3xRPZAL$dxVBX-WnAgS3Ds9hxw1xqI=(CX~13(v&8{rax}%374id>0pHR zTfu&*94#ZW`u(vh&-i9zE;Wq_FA=Cv1)Xrq&)CLuSs-nXj1W zc9#{VO6D>3PoZuexhoPA$4XTl=`Oewl3&Oy^I;GF?1w+n zM0!Sjjk(rs8M?{#e5P$S*VTxKstaF1c1h?-8gjeM&^p_ zuoDTfi*lc#jcaYv>xUjeg#sgZsLhEt7C(d99%X2%9Lvk!HH$^(&hmlExXR0z6D@Fk z1BFYQeitb3zY;)zYBc;lzC+o}a&>itxK!JAgPI86-;$na8%PR3p1JkJ`RgYuSoO$; zqN?88vXCdGaoU5ia-u1MFvTs7vEKahut|t^=l|JA0(!0RQ(M<%hbNiq zA`WY)x0l<6QJGO!6SsUqy4>A5WSe%-{Or_Wt){@ynZ3_+Ccm9`yT=yInSQT$5f(b) zOJ|2=6UVn~8%rxXp#Rod^aRmd|K!wx&tJCMTE{-z``P>Fnl-A=6^5XRnjHsEk{A_X zl0R2uTDGZUwRF|HBiJu#Db;#m)|4}$*AVd$(2mhVo9E&_@73yZ3<^t($7*JbyZ3rd zE<|^~xvI1}^}>FUYVN_8l-sh3USpTIcwo05$0xdf_2I&8@bbzvR;zmX;a|&d%8i^I z5`7OoK418-aSa}IXuz@QM)6eLJGai$cc&9~mc5O6A2_+OXKPCH-#M-KewQxT|EhX; z_8T_N+%K%4`&wM#zT9`tFwgd+66Xun$sfXYZ0gVW5iS&*{NNY0fM&^BOH_t}cPnTY z`F4-h<%E8`8Tsp3bFIs@#N%`Ga*C6Mo@tcTa!*SUBu4 z;hp@mN)+}bW7_NWuSvHDPYYKc;aqqGH53ScC$}8X^`27P=H970IiEf4EPX!t){Y>fcI`6ku+dLkAP)wn3&X|G6FZXXw`Bpvc{T})6 z_LW0Q6;;2z|I?X1E=*ahGx7Nly3O-x^}JkX>hp2+S-OcYeSg0_J)C)a<)aY7 z`pK_-abauKmOG!7ntdyo|MPZpO{2pLvl;h9pXdixZ;x2)zw`!q@5PD-J0?w@ES7G# zZ@g;T!malG+cxGl%s+-^+$6lVx&Gk(yIt9*_>+%*pIz^IdIL6azSHdYD5^027AjLW z?D$53Ma!@J>_h&Y+G9h0R(0AN_s4I+-kcg?OE;-)3DVklR@NQU@a$~+z1Ke#E9L7y=A@QRb&tLE1ke)^30h0vj&35H#%=*MEVIamEn)|cJecqspj z;ljwx%PaH`^{n!d$c9rlAw%;Qh769O`>qno2B*sUX%s`;;5QE*TxsH?hY{`_4{aQ# zd_<*ATpOZa25t#QFvtI$)=7%dB9<9x#1)?HU!ib?u+fyUA&DKgD0fmFMQNVH6r6^3 z@SY9joQpVaaubn~KeC}q41M$XeJn<(4kAwGl+SSb*oFO%E6-hCsj{wj-%jm{h}hC% z1mW$ANRK=f^`8ox-XFZwyMif}wS^FnvPkXG*Ul=9x%@=@yiwLYz+9!6uHlFx``bD6HOC<6B^ z`p=8>spq-{vhj1g-d6PJMy^I~1Zw}=vDiNqvOcl4LSN?2I=E~3FIb6-*N^M5=a;>=v&GSDX%;FNr3J zLKN%0WLlXwFSs`&`l*F_E9*3ELwA!Y=jg!(#$m@Ajg|Jk`Ku?2P(WR`WM~zQ`s+}4 zW9iDWB!)6x)M|5Le@>2S(F?EnlhM-P=$*T>Y&YD@jMU<)$Ov+*%yg7ObWE{nba?N4 z`KX^_jWR&i5{tlgN*3wjCK6qn$j~N1_Usj=ucNDSMR4`r~Kq*-n3&Efn+Ff#s z5D*!NN)J(28(f{8DhfMh7IFll-B>iq-A!Yvt2GEgE@iI~1WCBGPi`cY!!0d>XiHJ) zsk@`O6eJqzLuYCYqIKCK)jWnCK?r)2g|r4l%o<3eD2piE#SW4U6rn99V9pJiYG%QQ z%~8l!Vd(?_Bhm46hAxjm?;84I%FuByvecy44n{%c2;;#D?FL~rS0s1TQX>d=2}NsF zC`ix@B+{{X5qe2D1D>}2e)1t)J>8jtgaf$bCwe3tO@pe1e_ni>$~e-JzQ%AhG@w^WCP)IDg<)tm9WMkl0x2qN3jPmW zH&e9rBY3JS|3oT9mEW^2R!F~il7<#(lOgIL15BVCY70~2%JF&^s{=3CL|l~Ds2az1 z__CSm>L{4A2%2=OLpI3B2-3%FBXVkzm~_nS%T8c-%9DNT!?wN2udWv+ z-WO^M@-da7Z+eV<#+MGonnJ_XRh=pO2h1OTr-SJf1c3~*WC(+vEPgP5n}l@0iJ+ZTexNCNHbd6G5;dBePG?Xd%=T z6xjiu>CC>O5Vh0*A31>8Sy)9^SK%?@Ch>NPLAA^rMcOsYb~3n=Ws!$ymcfacB1|R) zqesD`0WDd%$OVFh(-~FK^t+V|Z9t@1&oUeoDw;A9;S7QVM&v@^0HDgJSGy}`7l>Y3 zebPO{@{_W3Crp4Op&T^bNenuAO5`&G!KOkK5-3`xD-DfB0;UK)0aUvRcO^mO+k$55Y* z*PdY+c~kbK=eXw1>NW-h(qP)omYgee#0bUp56f>(q$L#U@jHFo?Pai35uz_B+X~`# z1Hj`USaKpdf$2+zX=Fk|e29`c4J3VS;Ya0cr4v559%!nqYG49{0LYbk+HlHmV^N(F zQiu9vUAh{+^<%0#WSfAF5%=N;5k3>53|}R+$H)Usb$1Qs#K{z`wZcmT5e!bpOHS!x z<7w#L*-bzllL4(v`bdWWMC5a4$YK@*sUE4yg(Qv!#g$wSR1!6PR0Zf1^-PAQxbtDp z-0C-b3DQo(wIUVyZmSQ_h708*nLrHCMa{F=*_pd6wCRKC2m!6sPPcFhmLzxTSZ8D? z5_jdR&_ybAidrKDiC5KWy{@{Jj35WN!DT>ZDpIR8z>UQ~ra}-66s;n8ek$DBt;Ywn z+e`2SV2e8u4;OuzLs(D)+?w8#C>%8&L^qa>CjxdanolIqwfQ|BEE_ylXhdha4FWgQ z=XsuhDnLe5GB9KgW+&anAc1urlHCDIv!iG=h>n;8iD!fgBnLflfI+6HBYI`An0kf| zLEsr06Lb|SIfnrCo1x6q3$=wpNI7F`eGyu(!w1dO>Vv?t224433#k)A@xT4g+TfX<}c(cFia`$Ve$uV zzEBqw5o8lE$=;Exsqa)$8TfJvvYeuw$4FPA8xj3|7ui`>D+shp*b$6W1F+!1wAJYc z3+z>kAZm>*;3C<37NQ}fYt4Q1X@y`a8F&DqL;83LD=*dtXjb{RXyh~A5M(8z`^m@- z$Og66Lz`}eUzR%P5$O2nh4Y)0lrGE|=2i$pFwo6|xA! zCm$t?K7^WrVwnEURLBSfs1)f|QZ^rMFn@RB(MgCm4K^1Upqm63EC%?^bh-95Sy~05 zg%B5MfFCbF8%-ySvRGj-<0OCYIhYqez>n=uED!LLu=4x@w5gqbA#fQ{F3i9S{N`XT zBM>;)L7waM?Yh+u^hP>5_(1$cY9cw89{TQYQ(- zyHy0_Q9k_vj9Xb6RE$<0`NGQp9a>Ykp};RG0F_N~ld}AFc216(`*a-+?_%kh$~C?$ zLXt2F==S|1(jKLFxAL9OKsKhVu83UJs+ScxM+ba65a2h_>7)+PP3`oTOH4xm*Ev?; zM5jk1r3NJ+2w^&8i2PLHgoO~qovkd!HLqB4@pdqF_2` zind@`e!ay|P45U4)znw|xVLGgLVc1tG($Qo${G5!Wnb@344Hzgg!qm?pbrL|!vj=z zlJ&ehUGykk!W0cE1dL|+F0p(@SzdDIftgN^Kd^4U;G?rq&7myUx!&A@z1K53(l8X` zL6$)XMV%`2jK8i1LbMi_D>In7;i)rFz+ylR${isXQ>3< zaa-*4jb`a4b+&C=^59Ycv1qL{z*Rb&En->30;$S^;bevnkEN{M;ngVAoDHxDWIR#o z2-kzeFO!WMSRQK`8g!8|-rwgBMQia0LCo}xg*IitJo5Z~=0rZ>0ZuV2)K0qmjB6oi z)R5dCeF4LpW?Fy@Wl3kLThD4cGu06^m=5*%Q-WtdOxA$PHT0K^Z4_yYceXuTgHtp6 zjf`i`G+51guQ(Ss12I0F5m$a1g$`{yMB`GcpXbDZ81k(%RO94otT8c&tY(%Ici#4g z%sp8;Q&Mm|d4BOvrRz}0X)p#p*1}BKLcnZ#_tr8FS?*>TL`XMchMcXn&-1RaW?tty zN3ER5DToWMDRumTOa@{5xOl>&wj&;_oi^k@sP6~K2vUGPHn3Jpfs$TF2+^7R}=&Ou$9zNzO%b0wyZS@Y@dw2ezfjn7&&Nc`_){-|Us8iNNf75G2@{U*~?SF3`^+ekrX%eIdEyCgnad~9vSU^GQ8wLw~Vt%n69o44BGO#rcnbs%m><>P1 ztQ}&ZXE|;;lV|_&2D9)O-P81}=Na)Ev1I}NJonK3wdV>Q8Zc~w$UbUZS8R^{snNJ% zAI-6yC%2p$+g)=^b3EZf&8hLd*Y0WN+kU*W1EV%~=gn~B`O!dqJ6ValTfQkEr5w+c zRlX@SzeOy(s>WYtYaSYZHeF5YtAA7LUnRPTikkZne>Piul~d{%L`M~opEKSRT3$xW zRk*n!Y1806Dl{)*d}SvS;D%`B8K`cb!k7R66ijQJJDE|y*yhUc~*-}>|cFji>7!UMWl=}P_ zd!Lf+t>FLhE@}@!IqgRRsyx}1l2l5Z4^%GCT%77PNZA&@18tl)d%pUp?2d(kY2=cn zVv_5E=){3~f^ku@@3O?(YJQMaVEpgKr96dq52w)u{4(|08_Fr(BDC8m{BhAcWwHPQ z+mg_sGE5~Re{~wl$K#w97mD!e+Zii5C5DYucHGGj$LiQ%gGoq1BCP`*Nmn^ar`G8n z%S&BFU!_lXh8v;JWrhMQ=Y}%2T`B~eo9$4@q!-7prG>5;El}pK?J(@~*MB_4@H|hs z=+iZ=_9AbE)~IvoptlJ71?W2S(FnEvtoZJ&|B1};qd<2lPCHu1`@fnI~T{iWIJ*VJO%)iuU*&=zQJsJv=Li!3TliH!|> z{Rx`q&$iugU-i_D^0zj7Him5;IA9lmrhIPVp$|!SWYXPV+$rMOy&aqm+7>HnAKng! z=MnU83D2AUIEUI-G`;QnEX9GZl7HmSImJBE4h{Lit}1uL+$*S2vvMtUim}!L7kxMnx;3sc$gjsJ$A1Rq<1eT0 z;1uDe1Ug!i%hI~IU-@wQc6m92nCx1=3U1sNXCNc#_u*e97o}|FIj-)&;{fn&KnGY(%5{*t zN%4?Tr(3}HKsY%ji|dESaTDnvB$PpXCHDlq9N=k}`N2sj1U%(K)e zi4CxtK_7J(^TGF9SN5XLZ*JytOow45EALM$>Tvy4wvz6BdN-{U1zc!k(;#-`5cQw#9PR@xed7t$ zM@OE2t6iRm_uFhu0F0L55FGFiu#t1+fOF7T*d;xEg04P6$AF+~V5o0kXlP)pZ)mP( zXoe@4s~K6~Ow1HajI2ChHm8hz2uBKt6p`oXxrK_#2hu78D(lgZ1BdF;UR1FQ)j11L{ z3^fUccq1cSBU6I0sjzJZ0IA<@Xl(!_{p`afw#urN0?w=giX)-!X^Hh0FGJ84_l z>e<;494t+oEG=9tE#0iGJZ!9e?5!yd)`5=JAud)S?lvpDY{}j>fqwQO0giGTcybiU zbB(<#)y5^%#wpOo(bbmZVE?~iXHT-Vce1s2v3GECaBy^VaCCB%r_+D=f8p%x^ndB% z{QZ(koDA75WzGTAR6z<)(>a9~I{If&{N5#zIZSJ0Z>k(;-y zi(9*9Pw2YTh?vaPaakMVSuu&sT`7kXQj!xBk`8RA9bI>j6?L>|HU0PodSx8DJ}K++ zfy~DA%=5XqCn`#dE|(WJohfgwtGRx;q2>DZ2lwvv_4W@v8hJW0`eJl!V&c{G^wiwk zJL#9XFJC@=p8xDP_&gB{t!5R|$3NG}0Zl^BgxomaU5HmczKIw*aCs7oM%EvT=Goxm=Gj(T23jva zy+qxiR2_Qr%CqhL%|WjQZdwO|v0nN5VW&*dj9pK2CDb>DI@f8_12ti3DfM^LzkR$H z=5ji!<`4|Cweps9T-9TsU4Kw;W4f1%cvn-eb$oLBz(wD0cRZToYj-G=BEs67M?3Si zvbPSk-Ap`HYOwNrkgckjVYysKb!z2PQvCCV6~FW6wzh5^sK2+>cTHob-e6tW*~q^V zpZzC(Jf8lkTz&7ty^pfbS2x_t9O&5j?~vm5`}cnTl&gA0@giC+ z-}K7tn?h1gB^ToSJYh%iKQVE-#QR6Xb~qVnIm1<1N|-4Nu@Vd)4|n}A&MwT#SikksT#`O4;M;)JPC6Y6GAQPDs!!_)O4m+ zC0wYxc;!mPqow8dS7iJit6i6B2KIisCU|${Q&anokDsm!k=AqkF3rTo6(#tQo#K`B&#k&459bLNV?^sw{M-wzNQY3y%v(DJN=SoD0kd< z)P*m-56_t%o~`rSf!y)s53JNxZRp#uX~n-aZ1?iSL5Ep^--VkQrRhp24W9(HsQIqn zM1ejuVpX8gCiO4vMTZHc-g>m~g+Jd(Z&v*v!(+ev{VCzt%a&AvO1+n7FI|`Yn&Uj^ z*4y8>KKS?IZ8lPC)1X7}-#>;8#ioZUxBWwoo~2C_pQ=DH7_Q%dXW zH25Xu$O(n#K~6}QvCcwXNcefxioPy$&xL$y(RuYtA>CG+77C&V&uiZ9>$W?(P#BA? z!}o^tI94qbC4|@Myy)w3ZCfa&71imz59#$BUnof*tTXu8*X#Rhp_GoTC!kjL`Rjb; z=7rZAYxVa9d44V97S)?ttn3fn^!0eYK4kad^rT=!co*2AxV0G2k@`msWRvY>U z*0+5<$uGKK6TkA|rtz<*1cMjs()u56{q?m%h`mVStQ?Hf`BvE%e$la_e{i?wx6|UH zi_Vu;4(;9at!i}eqHFfeT!kd3O?qCh+|GS>H24DpQt z-;TK^J93HKXdZ>RhgFsn?-M6UysY(o`T9WZA*e*mQ06D=5E&>?N(YV^!*RPRAy(Vjotk=z<5=-?PHXh}|IqtmNop zMJhczJfH!;%up#2J2uz$=@-*kK&s9&mymP7?)1*k!#s%A==Y{0E65w19F>p$F*&b& zIoL-pBU7-#*-+MUm65nZuP2o4*6QuU*?A>!KJ4G+hkxBa-uFP2?PiVu4^ zKK|pDVCY&(+QXNVzkb{n;+klju!%Q1KLvdeO$RCx9d6w^d1uvLd51OuTw^wQIa+|ZSZ@km#iee7Yv^<)?MxkiEKVzF*sxH zwcJmYTgP4se`~dQc_4bY`PA*fw{{uJ4`Y>DDtp7A;pM&pxe`^=*_HD#+?em&!t+-!`G__XQeujhi{n@wpE zMEH^pq}{gdM}ZnxH&qF|8!N!Zks8^$Fg3J;qAp{WTV$81KP3E_ddZkOdC>1 zJ9gLIlV-O35-Vw;yT1L+bqjYxIRb~9ZMW`shZ7(}P42ofA)Ss1)>Vq*=DHx6N;$k~ zz2?IK-48)rGPhIjw{Nh=fXa4sOr0L-#S!NAS4d~Unrn*0G?)&Fd%!D}pqviCcjGvY zNn{w33{2CnEo3K5RNu^n;bWx8_ljMBoGXA4W_>!9e}VuZvdD`3d$;N+eoxFpUg>AO z%KQEI3thQgB3D9o=*pydQSEQE9xe5F$riY!?K2ip%LAKbUn?KAzjJ%EJe(o>##6pG z8yxlPNwsXTA?n`84Uc|3zbpIBFTFPxAN70urR;~Gw8aD73?RLI#y(L|Y$GXf@!O`3 ze>9=X^ZiP@W0oN8C10MLd{B}~=0O(T-jqI-iT-}v2K%iX*;}lzwKnOGNm$2&pv;rk zOLR?s{gp;7c2%?hDD`dkl}Pu0|5M3c`WKLx$VZ+x(-&9lczTGAuB1PGX0W9qL#ZKR zBsMF{f}tGEFnx|pj77%MR3HCXr@f@C8_O_uXPQPc&C{90N~V>7dA1jx{S)55UTKz# zQxG0|F5QP&rSyR$e|l4T9*cX!*`o|X&|LT+0ip&XpnNb?lCe?(V8j{6FD8G|K&;|# zm2>zv<$+KVpeRk2oPw_u)3b8{`Cwi`dX54&XLCBZ$sIs*ft6gj!Wyv}aLeg&hp8a; zY5-vZ`K+y*+*6KU%o%>pku9)6I2iR3k+|h864%RoVu~0cDE+CIJD1|7$PlGq$Rm={ znaX{usn9W6e)o@cij_$XmGu6@bd5CnHTNyo1$3q0tajJ+w}|;|g2MLE!uv~wLcAR0 zRMZt+)RSJ+S6MV5C>k6s8eS?A+)R)^TcMJRk%PLq_VHshuEn6-rH;Ad&a z(vsgVD(~Z>(s+n;sd73Ul}a~C4~_wN>mO+X2^#bdi;@QUx`Vob(OdElql_4hWG46lf>Z0LU5(P>h18@wnh>q?{Y2H>=t6 zHbsE|c_vi)OglLy#_C9wQGnueI&Qrs_?e4)!NJW64~lLp&C+Npj;Hdtr~?+D{f7|d zI-@a^+1ajRv()kzbS27?a?MU0Aq}MZ8e(H{X33U=+`@t8nt%ASUp>xFeQt=bOBGXjd%MiZ}>va zDn9PB1V<;KJ}00aDA*#~&V3y_r#6j%?nh=PSTB1dA*jfGVgy}+laO%h$S4a^y#;7D zsX-2@s-MWOmp540iDX48ct0q~&=dHh0K|fbEnEeO7{>$=sS?N;DP#p`N8{BVl9nFg z)qY{sOn#_`oxpkZ9(+nmQJ@3Ld|;G+@cLz|{nA{T7$xU?%T7s^UxMiMvB&@&=F|a1 zNn7bgE}~=;Vl8>wIv!#}EJAIBL`nmdNvXFTfwiP7l}8o+NpYuna5xn(zYKrV0cQx| z8+ZyqGz3#9Z-jE+w5zw;;I~b$oZO4pNJ75^lsGzwT?9lePa%@pAo+?br(G=xRd^k% z5XHy6qRRVFuDzu1ySeCf@?*nkN!@8N$^rmx@^BI%Zn(vFr9>9J3 zg_{7;x8P0d00e`4Z2~}N)0&JxC5aR_3EF)d$4wB>j97(9A&w=)DS2I=jJ@{Ps`{T5 zTCrLoTnd+;kL5$=3b6_kLOxTBdo7W{SCX2R25_To*Iv^U?3S)!b|E5S6<+gkw|~K@ zNd8!c#! z6t|8I;35H~lM>u3-qqXcsI~m7Tdd^FO+?v;n`kjk!d0;PjkDc+YeL*IDS=Otuf3wR z+zdn|k`OP(ajszq71(z>Mga{C<a47YAeY_SNg0K#&-YkD&LD(&qJ(k zPlS;Wi{JNA#XQjuWTM=e1bRE=e?^z#i7{teKhz!?tP_TpQSa02l$9do#f%_M1WfN_}!XdYGJzv#QIXw z&}KP*0#{R&G;|j^LOZB}>I<6~X!Cj_PKCt>2G#6$on&U?Cs3VGO{sJ&l+_T!ft*2 z5~)W;ny@nUI(lfa9BD?(rY+DxQg8B5HUhWh^~-j3+I_1h3bborG64}w?-gjipox*^ z`H5cl?j>`Ki8$?Q+{qf-xU`>RxEpxYYv6^?8fllpy?nr=SB8Ikk^CCDo%G8@aQs%y zQ2sk`-{Wj)#TlIF<$~Lm+ddPwZNW{&VOlX8uD&w3sXuN6eYuB@+%1bmwr+XV_3HR8 z@q>%k@LfI=;Nw>k{mFC1uX>&J&<=W^4;Y>yXc`-7)=Cu4g0Ihmug}UUeNu%le^qMv z3ULmKbyUTAx*~47I{dx@xJrVqmFQCxbsz8G5y0<%CI2J}a`8ef0n8UG)KbT8?|yAi z@|qx2fR&-okQDVw5>;i&&=NFkO2NGLA<1C6^f9JIk~Toc2qd)gV$7g7M!q%9(=k;{ zj9*F8BObPquIHwN=?_voPn|xXn(T58J3z2#p(^(0Vh=i643IDu21%QSE&Av)(IrXS z4RAY#6>)acNp>s5kKfTISL`!*pStz^;jH)RweOGKe=p0Ne4izIPdAul`p&Yq&UQ2p zjvky~EM~oEdD&A#C`dW0^)?&6u+fb6Vd1B;HUBXaHzAAwDVvnzc+o|9V^ z%aot%Sr^%XPW-{U#k1%RB#86eJ1J=tD#C7j8jQg-&=oIp6`Mg^Gl1bs6|YMao1}{T zSj-i|T-VmQ$70)&1D{8lKQ)pteGZt(NehAG^Z4*5f%vU}WI5%FnYII`C+9ymy@A?+ zSl=&;kzdkP=N3v7$0NZ^Cg##-Lp>>Sb?p8mV2xmh;rCT)oF|qsGUc`N*aQC7s(u#z zyqRIrJ5LH$=lVi74cpIqi;c4ImML$#FO#a+FA&duwR-T?Cd&GNw~A5L#--E$ zc(0IO<+v>=2LC~$4hwyZd228~U7`q?S2)LA6qR5GhUW&ABv%NEU-T74O^R1YiW*y| z{#~29CRB7!Su{BJ<)bgge^_zp{^ESoXOZu`fcqom?2nz-Ew4Jx?A`aHUZN+4JbSwz z`Hu^4ASl)V$bU^v0}{)%lRuV*6`Ki|e-dm-_RKvVhEG*2-=^3^pKIo02Y`h>0M|yw zc7wlo+1NZLw$H)hA7Qb|5mPTz9FSN%gW@hmO~-%vZfb9F!0}yc=@;z%Px1eL=Wm-n zXusG3{@Jhm4SQU9;H>hCr*C)2zI<*WVD9mkTFDp~V{V}KFP~@G={xn0I)hliJm6uj zNR_+8z_r8EZ=2@tD=ofM`YW~vJ6?a1Zu|Em``@>-R#pCg#P&0cKn$=7^FqkDc~skb zDe9c|@EkjD3k3LKGQWmQ+J!i_8qh zkQkArlp#r_LW?D8?6levr5YuvR1}(|anI*_pZlEOIlpu6>s;sfXO6=eV|cwEujf-oTMd+!~3 z^B`AY&-akdF{E zCF@CG?@gYUdb zoFKSg>OkWk_fl_@tFe_4lE#CwG39@Ts$SY&@Rq94h{Q8!( zs@$?At|ST;DxK>)zSqRog}c?p76y;Gh8_4YW>inDiY})o^tX`RRibyu$*3RGl9Ndc z*7Art>A4_7Dh9n6D4-^`$nJJL`?Sg@%h7E-{EOM$%E&wZ4HeO4I)jzr86)Erza-_| zs`e@T{pdfVvGHjtCMY41JaaMEd~e*9%lGykyft9H?@-&vd#@8>qBKKX6R(a9n>+$O z)ErZdZVPQb<2l$;D6c0jm-@p8E_Wg{0UegP6%cFsbjb%ksk`;p^+ncoGm*w9r{13` zPAL)3uN0i>Ej#Im)WlJR`q8-eVcy2ciU-?x|uo<1g$fBxnrTJEWe_G zo%H95X09-l{e||vQ2BI1!=;joA60@f?s-TD=P+I!=#u_6Q|D6h4{@$?!k{m{ zWyriBB-(ZZA$9lVfqfyq9;&&AI(!oq4&Mui)BMpDPS>pP^Y7XBBhWwY{Mq2QMJK-B z{kk(Gu@mDyn|N2QVsoYMTY2@*C#plUiBIi5btMissMxJO@~lxIFOe$Bd`W5-T)@2ikL#AD#f#SxZ-Ncm6-#2{%!B`hIQcCOvk>X~?9 z=$#Kr?<(Cb7JQ3OE~%@0wHzY7YGLOnYA9l_4!@ckE(y1hk1{keQ?dHaf!HzP zku;93fkqQtEB@f;_9y4c>l}R0oMXw zT-!4cA9%Mj;AZlR>tV2iK?Bx-t>rJ8Vq6dIebE_s@7{|WM{*B_e6-%vIrZXZ%D}<> zYn_5U57uAY%7P_OU^YR$(o@ZOt_cxR_k#w_r&=<)xsjSS!H)zlP*RNv2L_VqqN$Fm zC767;nay6=G%$L9I~O*H3l_zB^=o%hHK)1v-o|&{7TSUK_5hmeTaI{6gJvf zkLYzhoOJen$b$LHj_0}GLrAsk%>GE^R`ZZU(cfaVkxNQ)&5xjxV5o}XdzEeNLzaOY zk<6$%xwUDR-9<#~pLvLcQ|gbD`JSTZ2WWEZY&UThhaF$f(&a{r*-4JW(w4OVEM+KD zKKw1GNmcZTj_WHYFmOQ@BqACPhiDL0RYRhkRC|U}+*IElP~<_<`R=qkB{0D$yqdZ_ zGGCp>LmVoM22V(d*ohIvJl617>Dqov$&9yYcP@Es(YVJ5ZsJdoVwaG4x+jxUr)lu1v#s{ip?>fw1plJPCI8B-PMag zWf_GZVBX_!cfZ7vtm+uBCepFkz@%t`?bzVCXAS4FPt$&G)Hn@rKO7;`B`7FR*6`VXD2(i zn9RKgKeK<(ezgaimO*n2F6PmllP>);SJ&SA3$Ym!Qr=^TaC2xr4aJdiT) zh7=F9L&4$OSBUZ=2vl}Ei|c@HHrr7OdYcZq#-jm>4zMP?vIhtw>mY|D`TrH!*2s}> zq)Q2RMjGi;KeOM@2>%5Egr$psB6sO;_R4txL!>W%FhFx?qRZJR%T93`T^#IiVib1~ z`4Bbw0L7&VrTUXEj$la#3{N1$mo!OIj`K8426!mS>RFip_+PV8Y`QEBgkQ?W#9D2O zC0$vhi(B8c7xElF%>hZ5i0uc9-sFoZIo2@iQ94DF|(=X(^J9-#KM-No4-El@*8@^bAUVF{ zj_ZIi8ze{4zS0P&Hqqs1jusu87ce3!?}rO{zb$* zX)srEN2?^{S`O!K^&`b*kOHURs5qys+J%zAk>UY3+1#C}Ub#<(8kGwwDdbU8C{RMx`uqby{|0|1%{}0+@VJoh?f3E*hhI*BzSrldkO~XM?Cxc z<(gSn?>u>&gFiLABjb+Oh`x(@hP+k~ z?e$n*R1{S3Y~jwc7a>ok>VR#VTDe`%ek?r^`O*lA*m;WTgAmQ1@qUIX@H&NWDDT|K znST1kc~@^p?MLYI-aDcrO{$V+BQ?XjmY?j*>Ze&u=D!sggD=|> z(t7k>j2nC$H(VPxf=v*mCX6*FOtw#$x=xq{Ol*&yFh4$Fkvm~|cEalNg!SDCn}G@2 z7ZY|LC+ycI9AJ|qsYyr8NvG|T&aRU#0h6xLlWxZ+-E${B&Q5w>p7gpqxnscJ%3$Zk z4dYRQc|(wxt|;<<)(Y|eS*tpT&{|2T6UEgG#PK>fWi7OlI#NLuuAm85)`8*;pc?ux zf)RpXE}~_P(zZiuIU#jCkw)I47G#{2uZ*?7qQ!0%b8l5s7geHzik^+4j)fw@Oj*}h zgg(*tEwsD z@$z_8S-iTGvYMo_vXqK~q`IsWK}KF*T2)V0O+#J{uc)T{p9ND>QdUz`R9BQ2elDSJ z`tMd&QWjpq4?^XnqO7Q-te_~o6%`Z}6qMzZlw_0@q~+zMrKF{CauR4IG)5CCjTco_ zKpDzmEERDUco`FQ1${LYEp@!mQ~mE2;;R2${|T@Ed9VNY7eQ#kgfdK9Lz|#Z(ALz} z)z;L}))E3Tp)Mm3^mPb^x_U+ixcR%UkAX7*O*c2-tGtMuPx^}p*s;$&g*zuWvj z@?^E$+;+P;X}guZnVqevvzf^bgYA9>c6&@5$=lsrt(-}Ajt=$?4no@W-(_cOZ)@vJ zA~`!cItgzlCub)YXE!(39bT@!UT(X6cKCRc-Mn^_JOivegNQr!>Uizf+HpXWe2CzG zOlNPVUNp@xfo^t~VI7-k7oO}Ca%_j+;eg;n`zQw^BjcjNLn+|_{&C*BQ@s7?-g{Vn z`}2bj6zo5oN69=HQFt_hc{DyfB`G;2B`GyMA^BuvGA%fj>6ezj^F)Dr`YEUM)52{m z*UW0yj5?33YrC>`dF?{F?`v^@mT@B^92_V3y{yip~_C zI#*n9xg@Wxg4K8NH1|^F4bFwy8e#N%!{x@CH*dAxy?d{_>jAfKXmI4|qi0iNQ?oO# z-@bYC=H1-;`A?q~h1zQ6=l_qjN@e@v9cYC3+2NK;P7ZkI0!5Ker-n-ZPis}}dHX+W z<*W7TKWpV;CCqx9hZi-HX~YfjM`c>WXM8SsUHH#hT@Sh)|K?Sac3n-~N$|%<5*m2N zvbUMnoIkzyYo%hJRZT3Yl(Y-2)tkp{x86NW$A}n~#S-US3KVs8&4PT@eCvSSOS^}P z)l#dM?uckq=_y$s>cn-t?zr=LqH*{2{RYM`wKArt&c=}Cz4tCGv}Tgo^w z;VC`VKe_Mu{ea~8wqwu29&T*`Z~~s9!}__`OTaIE=I}t+!{%^Z@n^m!r1ia!%5#5V zrGKE26N<|JSu2h5MnAg#RW+RbX#3AXl4OzWbBF56*bk>I7aISwR*N5s|7WdSq~nCv zO6%(U|EyIh`9Evr9~k%XY|w$LAIpW->N4wChR#A|RC(M&mC#x(oJ+X(dEq>DQ0G(i zvHz@-JgH$a9L(^S@YF;O{C=)6FxarvK3{&nzG=(S=JWU*@F^7WMwr_jQmj}lu}5E?UrGtWu<)&x`U0@hCvU74)$H&02sw|nX? zKH0W9W_Tl}MW=>exH{qOGwx;obQ8SxLg_|~sIIro>9v=p9bmM5J{P<`BXKvyYr^5u zw|ibcB_q~fA5+&TI3bfao-BBiv1=ahkclv44_uw^ZsW0x?s#eEzq~Q5-B3OLYwq-( z!)ZKgcl$pdt5cNQ7i3QuZY;*+?cDg>c;)8Cm&o2P8(*7GJlTrTkVlIiLX(Ptwq>)(4}c}MW`3GBJX$iq7P7d&_Zj4h#RnZD_*E= zt7_vj?1Y_XGwg_$lmtsWs2F(~E;~wt806GSgtasLkM)Y!57SY5sY;Z_S`iyQ1N)tg z*g4ySAY}BSV@VJ#eIfr3ag;d5h8VOPqodl3OqND-v^hOu0nH4lYh;+@Ge?*=$4P3` zV;J;oS?QByxL9jnfqoQ7cA1L6y=-xp?41)y!3|oAj*RfDKB#;iey-NCt=Af=e&%az zp7rW9RNFEf`x#Jkr%f06B>yaDoq(*a6Qzz3i?m{!BPEh)u)wBBr9JHoY}s-yMX0sX zcpl0(+3q2GO{qsL-N}v1#Yr4>Z%A#nT#N}rdx?v&;ehp~Tf}UGdJv>(C;f_WSW)|J z(OE%PgZ&#Vh6P8R;DZ~sS;P%xS!N?Yl#Oij8_kw%Rz;;*E=V=8VXAi=m6n1A@D_|b zT}rs9aRyAV}$O6KQHHaXO?>n=H)es;AT?HSVNfR#VdAc`mHVlhibqTW>m>FQ<~JznkgRp>$Geo-HrVP};! zcHUm?6Ai+CIP9zXk)0Dg`Fe{W`P6^eC>Ibm6`C#LDOF(8LUr!u%{6P>6*yVBeOZOzi2szT7ZTG-kLiLaeIX5_;z@2#mzf+s39c z#Myv|2k9N3MuTp{J7!cXgK_Dj*=w4P8M=uK9I_6o-pGTV8x+}A$<9_qt0Im*dkj5` zhiWccBfL|4C0M+iP@C7|qk9UGbW@vk8!w_~N$;X_R?3geejvUSzj>ei zGpE#6wRwN3NDzQ1yRJwxd};YGa_6zFoD-SQ7LG_D`{!j-rIT8$jYqF#9wc4)42_D- z-sZ=JNG_6)uE-P9x%*dJzvj)(X<1z@Auk)U=b)mJV2M|D>}zc!&|NeqvBB5bDo8rg z)q{b`sfKC|PcN}i9`s$0Jzu8s z0aC&4saW7ch$M1ut=ZjC^g!5he~N8Ubu`)0AJ3*BU1axGt~u_}f zoN#qqxE>XMav7q$%>9ui^S9GiKxTZu#9imPN4`sI-ndn)wd9O*5)slONuITEj5~)7 zdY-P7@ekUn(t{Kg2>5>=(smGGyPFeB;3ul~KzESb%$lKFFKG}n^dK2ML_=3nAv*yW ze^8{KNFS!6t9Ud#-%cqAJ;+8&#zHJ8kgF7iI1BxhhE|o$9(P9j;bG=9k*B0=KPqI1 zjXp=twxEd&;j>+0ZL9DwUrP2632lytoui?>Wns~huyArtV35u5D1C@X@1sKei0I+v z?Cm7TZXAquJU6z{`Wy+JFw8tR3N|O9M~G-YBGatdNm$W#rwdr6BAg&}D@)|K2gCwNZzY_%*?uZxB4_(_UNY;5FBi6bG$(WT)bOJDb|TD= z4nsy#mb^D?L|w|Mc?^F z%d*8kEsIx!iq}(%`IW^R?ZunZ#R7gYAjbw0*{v=Z5>68Vl2#hDW2KP7m%Gip|6G=k4)rJW&Eozd+$qd#-T@Xr~doS@Xis?;pF z)I6=!vZ~a&qtte$)c#K?Nv_Pvs>~(0%q^|VqpA$}0RPmC-E7AG<&^nd6_2E){IfV4 zG=kHkNK8+`st-_u<;q1$lE8FmH7c4QR{<{pYq6m}0CZAS#TzDc z*Rt3$4r^LhanLI1ig^-4r$QpRl6AGRaHg{8PbFKf>Wo!YS#VW(T2*CL)xt;c7SZvX zXBilP)agKKbjrr@m@ypYvQF6x4ysXDp!d1-B^xEm20%FB=Hhw#V2mgc0OKJr&Uw2y zj071Z4FJ6}rLSq2CvliIB534l=@bXm!A1#1-yPfqE5T=wDjpCeqNX_)EIxyj0f@O| z_4}%eUpg)>&0PHc=i;*5f7WU>xMn@AhF?{)(NXiG5psC2M(s}xxC8*ksm48MJmid*r&6%WEU4K7LVIG3j0XIekXb;k)wPWU|p)c!WTOg zFWkPXuqZrcjV+eS0jqMsutyqUY;YL&n1QZc$|w|GQHiXD`GTGBL~tw(ZX;jc9SQSi zgF{Dg9-^87%@BMuA3{YGj<~rEapY+DU8&9QqNdnM@NKe~AlNkFe(; zzKn|P31~c`PO&DPLl{G;II)xIFo>6?G7TQafnO(I6;t)#_Xk|dxpuL@9NYjlp&o!4 zLywz@9W1zJH~;UI_=sMRP~zPG`Fr!`uZ zzD3!wQlKOUfP|}r>$+gvhWanAC;>nq<`8@FXmC#hiF_lWRc!27GXMs}DVUc4NCXE~ zqn@?#YxqSHG$6wpl9HP6UsdihJ`--X$(L^z+DUw6GIX&uIAH(otaRKEh-Aj#i4 zRg_W-4sFK92j9Q<7u$Xx+ck8*`Ro0T9rt_BpKjaNHFU6Oq&BeT+VrD20Tz;4FNl@Bt z@dPdKx5v$xWnkUwA@QZCOLJYoBXMmU7+?!uM1UC?K;yYY?U;o~xRNnc2M2U=o1r*B z4Bw-CMYs>vjjv`_l|wZ`diNlyI!(Qk{@ z@oAbQ@RiGQG=4cuPcMJfOA(IRBwi)Wq_lX4rWvj3L5ERhq%Y|a9u|f zi8?f>u)Io#WPipzMMQk?X!Q^*CQD#-!h1<(kqggB7|u&D)V>0Cp(S|Zk}ZaC`!+#% z&Lj0^uqGa=*IB1SY`RA<7G2Jt)i-rhIq790U~5Tv>6bg z0E;s?fchNZfaKYr-?PGjI{-WdfaUJ5)sEdH(C;OX6b>^d#Bn6CyClp!5hF>Uj=j~9ErjG3j5%V>aRmN75LAYd7I!^3FZ5Pt=L#CQNkIQYf`NDAuh zD5jkUV2PmDqZqGH5)KENC5oY!AHEsIjK;kX2S8{VfTRLoEsC z`!``f9*Ao2Qeg$7dm8g{89S!X*Ax{x2Zm8wN=M#CVvuz=gLo)D{uL ziF)pejQ(~6#auPFpS{>BZjQPNMfn6TQ0;tDtfN`8y z=W-7w9JHkXYU5!(2-inQAd?#?EWmwDn${k}%;0BM4J0r19GJHwjN!#zlEglYqFRNX zbM)fuG{Jb0wHO58Ba7V{zAXy3s?JM@CY^<9M+K5MOjbg-U7()S8 zh@<6bp!;~tJX!1m7u7`+`^ZDdjsjx73qC#YP+XDi+Yi}(z+YQHnFbQPuNG#$JcFK= zz)%1<_Z^Z7Iw=Mqnim(Jyu;9iW$J);qF7k7{doANvrf;9$xmQ7;h&74EgV=U5m;S1 z52Kz3bDj#tEsXnAfqfoLKkt($7P=h&fcd#x4Z=|dD=lM{09M^a2^bz?Ow1<(5LFyR zc!u)m8Hh;C-w>6_Rucgrs|pa`QC@m(uZQ7f`4D~S4)w*D2Rn&p$ibC(MmKh=+9Y99HS>o0uSXRTI% z3A~f7pVIZ8dm2#sn`8#Hd0-r#^NJ`oPsZHC zi(x`RTcdN{57$E8t?l1hqo}O^vh0s|=n@sSPAr28(HW?CJtimZ+5)ug`?^>Efd}T$ zwv6>-Dh>~rX)Z))UDxj&WzcE$CybhPE`Vlc@eQHS{CDexHI6PkG(zeRQL<|y;ScQ2 z{liUvE^htdsBF|>``3kQT#%RsBZrjYUh?^kx4&Rsc+tQQ8}EL>cH;lud1sfE^;?y< z(BWW5;{1LXX4C7iIheIMT(kM;-G{NR&D(-V%oYa#w|sl{+`8Kb(?$L8;<+_j>EQ$y z_1eMawZ3pa0TSEHpUbkwkJj4=|L|Z7u9t#C_2J85HcNZ9_%&M_54SeotzCGx1+47i zkr*(HvP&g-&WVXpvd@wARdbZqCU5>t{C=T;P7+P3mQA9_lxX@~bgASM3&BD=TM~Ww>wNprTU_!7<*SRg&d$Si*ND_jG}b-T!5+kXdk7Y)d(}~5~Y%{B z+Pnp)>{D9tdkLwyUh?i ze$7yMN2{0Kt$vdo^zx9F5$)(D&(=;>qt_18=PssCp&hF$j|pj=hYOF6`U-CEwE5A$ ztqn(Zx$Z+~iO()cT^PAdcE-A{-m-Hf9ek*D8a#1Lo5go7b1@n)+wGGkLC=-+Bk#yR zl{0b~O)< zu86)D98>duS*v|V9>Od_5{ER~LXJLnwFo`_@`Yh`NK*%giE|@4i5QHME}arKowkK# z)%@dtLRwo$`*Bfh5EExEWM{$6e=H*M^AFWR=(n$u!f_EaVL+BH&$Z&<;i~qi(v(B0 zypTI1vQ9`lfKm~Evq!6<^vGb^6jnB6A$;$TV(<7U%=i+X5Fy+TmbU5@8 zohupTPxr*wxqv0e_;siR2~UR|ey9Yz+4rgY_aAFvn!+3mCwxyUu-N}w47|)u`Bd{m zOhmjvB^)ZAv&G4_uwDdma1ZkAGgeA%z~MPzv8w-e{ir*aD?XU#aB?OjH5~r;TS^a1 zJ!zDlrF2XdEHZCF0v~8Vx~BF>2x2J@Wi(VpT#1b1Ofpnla+D#1egdj!?vd-_(Ns1$ zD59m4#Fxv+%YX6^j+GBL1DbP;a>CKkmVL|Y0;Wa(TmX%lqqshrw>|tR?hFkK+8kxM zM~%po;S0j>WBI$#BQn)o7ee4zfk+7t=QK*wOCCG51u%9$upHDYC@G9_iIjiQ?q+^( z?DXwNPOxt)Zq^Z01efD(_odw(Jf*JkE7e__Z|Sizldb#-Ju%Kc$>XK}vsPAKe&yq3S6rfX13J6{?~R|ml@qNWZM9?Xl!>oaEQ~lv z*|Fd0t4PN@*(g`g(IhqBis^IFYP~oL^R1-l6H^_Bz&PN&CKdpt?lZYtrH47DFFiX7 zw;1+49m-NyoMdDlMBv0QkZBDHF!WLhf=epv3#b*0Y`cq^-`Vo(@BeKV*q@z zSK&34X4tvnd*q2EczhY|b-bYQNXQ3}!5Y(Cwi$I~^jHJ7(rsr-r@w6?L;*{s?a1}= zKUW|Lx=+;EefL_!ktoPD!>5DfQyajMj7VuD2WEM%bIR1JOrewddH2B{jBqZe$ZH&c zz=s5Z4K=6P|!Nir7x~h*ghfE6#Hf-my*zRX~nv;nY3La~F{mqMZgCpXEvhBeALb-k)Pd z-v75B?XnDBP^Nc0Q97J>SwT&fWZI@isYT@|y!o7*;`pTd=8-JD*;nZ=yO3Tgs0T7& z={ps$&)G*%fzVHR@~FlZ-m|PmaZbFR zE3&(?S0a$ggxI-2$=oH;_Z+4^#}OUIc~!28W-J+iL`?{^N#*x+ESmcqf&__-Qtxu2 z+@E2SxgbLl2;or=QgH?VA{n&c>XDOIv~1Y8vL~PIEc2cVHyTtGix0xzsa$B;+p%&w z&Oh=+3k`HFYZeo#Pg8*0pf{b!Kpk0ruQI#nreDuFsQkLOUbKC?KGP=wbo7IKCmZh5 zRhw`CC0mQ8aJ}!%oetH%|7r`SEj&}ffy_2uZ-?hu^s0(61UY!fr<*PMPzAB1oJ)%3 zv2;XgZD8sUAHaBAfoXMvBnvs!uu!Qz%Nq3+a!%rpZ*;JqLvwivXI`PfN4bXRWOBYZ{&6QW{J`HtHNN;EPD~HjC%0C-S&DH#@#@8c z+dojSaJOR?&)Bx$2+1XOC0o`uM}HH zfwuk_Norbx)utI+m(Hd)BGQpeeU^i8ffz3VRtsW;SmmWt5&E$tg#WhnKek%KXMKtF zHvGKbCT5tX(il=t4EJn$GvY)gLcIT!FvHa#4svul?<7y`P%|^-Dm-);o$A509R-^Z zL2}iO`o0V!E>4>a{x%IyG_`-y2u)u|7+Wg?VNf^UCP#nj&W7Vxd)nE_iwsIcMYy?b5E+TZ|At~-BjrSxX1O~ z?O)-AeR?W8a*VtIH_6KsK*Rz2jX&0M~&uO zfSUS{nBI-_a3b8N8RSENM>Nv|azqk|+IP>1E( zpB4<7!SCIndt1UIggz?h>7XssJ9fuNNd8_VAjbj~|E0-R(nZjxhA3cs z@W$dKeBKc*Y=*#$NcFzh1&t&y74Yzv{WhG!fd){f%hYTrQ}R{&uMyN7&Xp zyhDLDJoCjs4iA^A$9`I3qQ4cMs~?FZ!Lg@(qBx`SmhihvGO`Gz= zCDC$)vjSikF#HF|;ZZu%9ChMu4Pa+1$g4l_DtC0E}W>&aA*WgduS zcK0z44(F!S!b4fG%KNv3aFW1c1irW*%U2w&h3kHV1!$5jtZ62jd9Oe~$kPCGKUX>p zgd=5Blr%<0O?qhlQET$*!=wj6bpKfR!qKTxW3c-0aO-lmKfsjk4y+!TIy4{}&d);^ zqVE$SH_VAay7UFH@(uJ*~$iPp->-!T09u! zRIoNBh{4GYjAd$Vo;rQq_u=q>#Pnq8jni2srLhst;NkApMS2#AaR#^F@DZ3B-(-aSQ0xt6B3bF7?7r6R`;v8NS;GKi zTKLW{+x8F9`f<43Kn78ndw3E4KzO*^$Y{f;J^WU2q+({jA-b&T zS9WS?sd>)B;I}vGQaOke55!!q+Md+Bv{;w<<8`=HhLa`K953?eU+rgKhBiOst6kkT zB3;E}@AvI>5&&44Pmh%flY0fC^XRL`-~G;g$3NbT@7VLlpq6qi>~A-I;-{1LaM-_Y zj`ni43)KW*)~XI){<57X^939)^#)d6V`K@V$nHWK*2ck@Z|?HIejshxY|*#8=AjEL)A=mx=dr7!L za=9`EeC866&@6xpf8ZtB<*|*5Pi{O{7a(wM?;{;SGI&5_7{;mv5s08jS4ibmS}<5Y<=%NwP3!9em?9OO3TXv-~_uAH&}bQXjs_xo>6@2eRm(4~T{#>6Zs_ONi>X{;*-M2OH zx!xD6N$G7^jO$Bdc=_^bFDj@FYaVuq?~LQcAByiZ&K4P*X?%;$b(TWg$6c33OE*Kq zY|cL4ZF}>k%N`b7ye~I|GoHoIHEM=zAExs_pp#d(UGV_Z|Jh#DI@k?>En{Ne z%)K}K2o!q4ar%!xw2|AT8lzvkr%p*H(u>4tGc8L{_FnlHhSFy|hwWurpVkO)jfP_a zWnq=1^yp1UT}}AfQldx^DvdF1==S>yScVLq3_LXXJ)xEKZpyq&#EJ8_r)IzkCohB@pezi(tS&edEzjj=wWPNH`PO|=lS{i$&C=^rjL zL*Mq+Ufwnh7N+Da2R7`d+K!pHtHm-FI!BoF)v?3Pso+3>dFjEjwIit5k{)~Qru3GG zIA1v%TGIl2(RqEj)o#VilRjj_ke#N1M*+Z+R`%_@EP;j+zGaFCp0qZ8QM|QHXxPc`gN!Uw{g|*+6CZAFbxdQL`In*EE?2u^{^FK zI=yCxd&ST6dY@0LWSKQz?KMA(wcU9bZHn;Q1~0p<#RY?00eJbzwZq}rfga0y5i*+G zHLaIxhddd9IHu3$+MzUX<vVH zU;of@w<+TYyAEebk1vB%DiewypUa}*;w@4Rti(tP_A+v=He~T>NyWdTbr_0VdKQn9 zBZmah*qKMlmuU3Oe615QNYFG5L*z%5&_T_s2PFVw*UDyb8pIOd^FIUmsm~j8LV>7* z)39JNaHYQHbQlm!d$!D7VQ&?NahPXPBFZX2Yw|$F%iOysi%DnGp3~q#Y<>DP9CMx? zsg_pSmP5sET*=#Ltk|%ji%vFgT+g!YUi@}-4~|efd+W;VfluEWQWI_#7el}vmuRHD zT}QM`|2`(=xFVq_4h<v*Ycc!fp3UF9%--dH?<&%)SlOQV z6<@AE_&Z|0CdaZd+nVMUmM^&SBilk27E_tIR1DceWBM)%eqguu>tqgVXL&8>hEa0^ zmtkSCuzyE#?E$2H;{0&!uOIl{98npQgvDjmewKu`UsLSLdsl}o0RYZfQ6FZjxu4OG z`>FA$Om|Of!snlwPby7f#%*Wv{PesYa5|D;H_qM)%!Epq1^pt7*KgaNW1~F!ZRJMQ#-Qrn!4>a`9D8R)X06ZKmPf~vo|U}?99xRZW-ZJ zOg@!DcV3%vS7bFhx;q~8@Q|k=d$)6P<>K2_^O|&G^OTY}zIpQXo`kt9rH0(v0)tMz zTH#*Jq+!*3jn-jDf%%ul$U?gfzB=1c)JmhoRX$DQjHhmgMyZeWAB{3!FDuQn0ejOl z%Y)-PG%G^W|7cc*7g%XkMW0L4Iv01XL+kvZ&Och!iI1$bFC2fBrhPH(ONVw%=Efgw z4qeomP@5}U*R0Fe?Ic_}ZM{LLFY&V0xqNnSx=uq?e5cNp3+Wp=jkN{Vx>qlsOV_=2 z^;)Oy^&6cVx=k&Qto3f(eU+|vv*Syr-mUJ94ZY?bQ5*f10f{RN(Lvqo39T-cf17Tj z3$kx>PzIcKW0>-z4{Ke?9o#fhG?4&f2RJMi2gc zxo`CF-^O1fE(q21L(utrDi_=SZm$`i^_+a<;m!T*AZJ!Q5WoJIK=SrQZj_)ZG5B$}7lRYRyGus=e zp*RT0|)@?R3q5rWnA!8 z`d{Mc2O8GTZ0_-MvG#q)o6^ibR;pv zEw8cECFm^+xoXGrN!6f=Hk?A$kF;&5>hEHWHa(6ljKD56>D!I2Z(&9B>=Sd^8p6b) zvCA+6N{?s|kzsnSBxlC7_7;=P0xQppvmVzfiTAR8hkwTxu|qc0KD8^xi%FO}^}8Nh zN4jnb)Qd$%LcdAKh(A4Kcn0A@`5fOi;FHu^dU0OqJ!jEl;e{(yX_1Do#hu>6F@X}P z>WcK}oVz+uiT&Ql1&uNH9|m>e!sTm+1UV5;Lb2E>QjO~Zamd^(irT3-yQpR29coxt z@km_@Z1iX3P}1%5fyX$?XZKXd0>TZiSekynBM8U<;709l6(X(lJsH2${{Vw{q%q4) zu}*Ch$<$pW<~h3bY7{m?o#aX$xLWp>qgS+C)OCGP)`NeYS%gk${m}yVLy50 zaOPKORY*1{iUa|%;QDYJL{`!fsl)#o*7k8SyrfR$*K(c%FFemW2P(y74J%9dVq@@8 zD!oB4hqo(|?MXt3m{W)v26BmAJgmEAuL}Ee_KViQ=4{NA-g-FJ&gGKI^>&E!McCz{$PD1^38vqm8>#ze+jxq~p-@K5X=C;-KJMifRdsZXm zQW^ngKjS=@yQMh4ks4%dBASyCp(!`0l$pKhb6u+ewlVE)zutn)6fQnP%~x&`97Rsv z0Za4AOl94~=zACYaKAT^8(O~kC0bB%28X4LlNirZ6j#rSg{tQ0$5xlV@1Z>ty7zlR!a?ovAFwcIb%1ZrJoo)BddTJ#( z*_STfOU^N6SoTjpJuK>_xEN&IDq)3o(IgnNn%v&kGb(fNND#|uQx#WQ+5aqAYw8F} z4R={9#ohY?eVGJBks|?oevsp8Z`ai z<>nvu^CqcOj5MZYON2emk=`7XHs{dm>P>J4J+UHMzn>rzbpK1wPs+AS+Y-Iy<-IG0 z(4%;-sov0_)T?fNyVLbA^L80xTpcOhdyk&}uz4l*>8CT_u6(-k(aN;`8Ep29n$)8& z4GVrwIy-aK=c%4?bLq8Ympgwhv~$Z}&@gbL{rl}rJ)aK$4xZx9{xP)YHo2Mf{F%11 z_r`^t&V$=R-mO}2798sN+WB|LhfQbyee$X2+t+1kE3Ke(9pXs+>9Eka%(FiUKYG63 z*%kV^b@s2^CxpraxcsGT~*ZaUmhsz5jBP%U)S2?6rF0?{o%^y=U@1gL5qx|$Aq zsf*2h#?|Y>iaESuz}OJVLyzN;;{@ioIVGJqXPg)+H77F2e&giOW-hOp7&C5>G)`HT z&J{G1){a|lY{ngEj??Nm=w|8}hD~R)O%H=M&`i6-upMc(eaf(V*=+ZLVgGg9u7N=x zhIg77i9Ib0J0{b)h3Um~@N01hWjaQ-I3_Ti7PmMhWze&jaTiTp3R_%uGF?ksT=z2F z4z#!(X1cexxSwHqbhdc(WO%G?@jMUr9BG;Ll9X78cIIo6_oS z=imixol^~;NKQX{-NUhkygE0f!v| z+gk(AI0SXJ2K6`u53~l~aR?b{4SDJi`m#0jgG1QY)-Zzu8`;LjIdUj%96QHw=eBS! zN3LHRH`I|A*~Uw7j9AW@;;~3l7 z7Te<(H_#S$$1#4SE&i!v!ppXV6&Nd#dQVqurO0${sX9;$QjEUh6Xn+BYHJ0D+K;v- ztgbFn<9CnO8og;LP65>%iU8bG$Dw2b)Qf8CpWLKEv~}BRt4hF>hFR49;(!#iKE5j8 zGt4K&04~WZH@n3(n!duCxTMP*lY)lbW{{O$bpaw(RfmdJpbB$suayI+xOOZX41Cn* zbCGK?d9-xup#6Og#aC^4S#1-1boU@PWCoxW0H)=tDu0l28AJ&xY@{NyK?q6(5ZWAq z3&KORoH8BE<+BR?j*U@4_I!uQ@&}C~GhC&JG$W|$0I9k@x18(Liy}lnH*64*{o{tM zhPyStJS4ZBU93Wg7TNSKE4weT=uq1jS2|N*sM6)YeKoZomX->f?cku;kPvvEMUy1! zO8F`S%=)LqtTH-`et;!li*~x?UIwUeNH87lUJzxg0B9*usa*?R@q)o{BRX>u=J5`2Vsk?jz1S#Mo*cvoL_0g9XbKJu4z-?w*(x~24e*K; zgQ2H-E#7hHdJ#1TJf#%P9^=|{s4auR0F}hF5=4wm2@)Hkj8Y$Xuk{#*Qr8zI<(QQ7 zC>H@*Wq7C+)Hnoe`eDKSAY)R5Z|V(oHF|km?fAVRl`cF_z=IACwd%Fthlh?G2pE&l zrE083-54WfvB24$$9BI1Y>FYMNv?r)OKpQ*nJer~e*sV~f;L@hW|tZTe|=I331&-d z_%5_t+yE6D1!33ktZ8JrN11tKyym*yk_7NL;?jP*VxvHdD|rNCbg4bYU>Uc$w!xfW z`Uq!IZCj}-F>r%u@KD`b&O0qf50eEzLf-+D&z#UH&{i+$`vG$|V+SiFyw8%*&#(>0 z%hOLAM-U{CP6;tvnXB*f8I#zJfyPpdP4FwXt1%%ekk}!jO4XT3M;DHAC>>y9C_1`J z9o?a(3Y@G(t0^Lmb=y&Env>PVn~4oZ4-`Oc0+wWOD8-y*)trSb>W3R4i^Xbff^$wc zP|^ZsRvXk-g4G_HKD(*oJk`-X#UNGAF%`TBD+lr&UCVQTJ2&2k2_dJHpv^^DTbz`70Ce1`M-jMv*UXRM_lMc~xg=F};y zBPam^`USU=lYDq}S)H0%1DFb&_|Wt7kWXqBhSpX4?T9g7cQ+d9N3j zEcn_ME{gp`Is3r8So?~9hO0&Bx>_ero-w^joiTlXHe^cUrvk0hj z1iZJo5Z}R+ep6UHjV(T z3#3dzSeIdo8=NzRZ0my6OPK?XzX5X%2eM1}?Z=0F4M4m2kAVk=+KPZ#H~T54K$2XI zRH=vUlvw8%4-sbi2jKqhljNF&em|l?!!X##(&yPJQWz^*%x-JZ?-^f zkqMged-pK=-S2aPwSD!qH-q64#1Uy|Zn)!pt}$L?Ki0<(0Cayz;Ft=_8!#?=?WZIz zZJdiGJeH2Tm?Nbc*VzRHF^Z1hpHTbHY^$HfvbMxkJKIVra?J)8Yx->E;_e=vZU15x zoXgX*>3Uew1vsm}&*ri(jSSEy4Sh~LSm@{Quv3!2Q!pMEZq_de)TsmBNrJ`z3!TVA zImM|vMH!T|G2ylfZq^lPD7n`|=$Y}I%PM+7Os&h*d1N3YR!x$c4C%%nlKc=j-6&RU zdKazZx+H@EpZkI?0ys7&-6K1^3qmvF;33(I3&a)zQC1(^CX+oF!=t3SxzJw67?~SQ zjUg$$_GDK1{cnjSZD$3%djw`3QjmTyjV3fzzuMeniQzbCpX1T zN^Da`9hDrk6vDu7Ocg*PeuAVK$fFj}Y9$X1?+r2A%+&y$d)c-*(wI}dVZQAFGq4Z= z=kGVbE-q7QDh24iz~bd4YdZZ--r(7=*ugBAahYQrOTx{N{xk5f;&AkgIy4oEghNw5 zg@>qmLngt%|7A)h8}k2y20+Y8HgS$YI&x4Rfmr)_cn2?-0}EyE0%y<&OlwO9 z)rM|Ev!(u5FJeQd8&xedJBAJ2#nR4&#PA^6I~c7c6kB^6TU#3&8!IbIf)$NOB3Rp) zQRqZ#4|AL|4(S9VIU=2`OaiRo0ro@>dy)feyEZK)2nR5x21)5aM1|8KJYe}B(^ z(*8!5iIEIre5KQD9T>LG4m8GpfCB$9o)|SK3-ytLJQY4>vbwHzx;AhLao3)yOaK zvSj#CJcAtE13YF0dCcL?^N*b8ALQrn_n%OH&}{$6IrElz`7H_x;&Q`6*`Xn!!66~+ zz2tt2UB_ku+S79=VbBq@>>9a)-Ezf4e@n!azz z>hiQz<*Qd8%-OJS{WeK%MbWzE;?+k>H`VVERaNgTFDu<4-Lqro&MjNEt>3sgH!p9) zx|}UpX_>1sQd3tZr>~7#oEILEA2dI6cGOC@&}4=ipE@tfIx2<~xx_j=$98^^bMiV? zTA}+&vHP0pd0DdH>|OJ7cP-8prEV!*vaKerusULERmiqItnC$Zi)(yEitwFnu{&Fn zz*CDWI#=xbYstR;Wi^_N+QIepcZCOfa^)AZDo(E5bzYczcHO39Yee;%%8%q#DOPnH z+0@nw)*Y{`Qyl1MXlQDvKXSaK<5YY5vDTKBlPwJ=5AD5B1O9zba;>TCPTRhLV-0_w zX}xgj=*g4EPn|h?TzRqW^yQNmt|+_Io!#A6E_e6--80zJb+`AzgInjdLx11Bd*j-T z>*{OQFJINDZj4=jFs^wx`B3}l$&>q&o( z_rGX>M$e`Hoc+HV7QH=w_R3p7C;nNG(N~&%E60ciSar?ElDj*1=4c#ezr#X5$F8;t zjx%hLb8h&jirbC8X*b4>FLd0$D|Tl)xqH(%i5{{4|7uwNCmNu;hW?;Q(DyR)dF!5o zJ_1!uee37S$A1bZ27dihvaWYt?2WFWpS<44d76zl=J#;s9@J z_5L^2E{P4iyzu%Qu5$)=iI;1`%R8-wMl^s?!}9i_a@Ebl@0Tr8yPV!|KSJWX*D?U3 zrcK6Q_HWo#z!~`EvgOiR*~$Z5OE-Q!Vp$)u?f~*}SN{GvBTo$ld2v55?J-rqpoP&} zb;Ov$=gE!tKDEb}9xhJpf6`VxS6J6H%}X>#Ue`1pL3abOdwqIwJD+-%Nlb6OX zU?;}gB%s@$5c5+UZqvNM(#K&7QnoH6uZ&uSvW!EgFC_1G!XU_|Tl1aCTxP*N+9BSn z=Ix^NHICK(FD@$N8EKizqUJ^qjw_^;wNuUI&f7ZH`v^vfaZe&l9!Y9;{{f>4q+q1W z_X6mcBh#?|KnL?g9dgg?y$x%3=QODi5eC$bafIwQZN9~dyyRh=(}vVn*_`@c6H?OB zkpli9FHZVG6KJ%<{QdiJZ%dpH7F1(oheMhXqy>cSBi1Vlfe3Oq@7&7(hZYn&niK*MMum3)39*viG{P3w*+yCJyDi8OK+t0GTkcjXVzGChZ`QZ|1c zLsB;uage+5bMiGcN}<`-ZJOZ?B~XuHgf5r z1zw)HKc@#>&i?!-eku1laZ9vcbwNxO(cXBikSPte)7cwE{3UVp`p$mfkL(IkEt@>H#+>9cdhoX1Y+77 zPQ~Y~t=L7EcurI4jeC+$Z;nqP(N3Mi_-a9FVNUp5_o0#m5zMSmUP@H4;V$K~Og43u zx(xDVK{PehP$&?)7_nadQLu$IdN}D89UF5?jeFL`wd`led{rFU$T{Rh2jfIcDl;ce z0VQ{{kzPzGwLk;)^__+VB|EGcDUuSu3jVxU1d!?=+%F0tGB&e?zJed_>uQb);N_c6 z_%ms}`DMQFj|ofN>^?dFSHn_re!#X#5#-mwG2tt$Qo85gNZPi~S@$^Q`_vFS;4)}e zn<94kk&j6pPH-jbf#Qlos#$u709rUHwkKGgYZmufkfU_sxo%uuqql+B`)f=4jQl=d1~i zk!}!JDKSmfiJbxgX^Y&*qt!QI{QagZP)1+2*%*z9OaqJ=`ErNC zJ?vi>YfP7AlX~#%(J_B{whQ$&uC_Y-G$Jr(^qjAmJdS z#6RagT|6e)a10BZ66(cAv(CJnJc$ln zO;XJp@zB2?4xq=Mt0u;qc~#K>$UshXb+E_>6V1Pkmf_KIqcOSb1#Bs_eA{$^9)y%uP4iNLf&WYo?cNm1_YQ^4cKUo zm$B-$Y-5vKokP+qW~0+F8UGBE6zLVS*yE=0>@?C1PgGJ|-Rc>nzR?VbYn zM+asg3bIFnU4ssHJ$q1hmRh0SG{_UZ(eK@$8@HM#|)gmOZ=s24;{!N%#k;n zrfJIjb&xW@VxYctW`5v(71Bq;u&;hWmc8GGTrl;;)Ngmp_k!A6<#iw%1@sbi1pj>h ze3MNx1M~XR%MLiUk$x)%%(wI9UBCL^X>z39BLQk14Ni2PQkVOCS2*}iQ=if^CY;A* z8w!l)l&2&SA^B35I0@~QpxoMU7HA7fov_h$aY2>Y*g+EFVvH}~gv zm4(g>?Y+_R@oW#m1|*H#9l5PbeQyS(06=SeET{v{UbuRMD15WYp~)B!OI;aeKvDRP(lsugJ>E=jDa zpBt?x3_iZV<%v6^um!$O;;JL*=5 zV3wVl62FU#bD5LyV{=4#3i#=86w(*9LWg9w&WVEMz50sy^$PK@9aA>66nSor7nhdA zu{8Ha*`f1L96Q+fybcuA*Ee$Y^ED~YiP`c6e-05>i<}eK@Sa74$8$Vi_QLzZ;h&k? z9Wt;*LU^1G!4o-!^AUW(_Reqcj-!NFK9|vEpTL)<>0r$fD@L!)j-w+MXb=a1H7U%< z8fCNx1X<;6KT!sLUF4lecYSMFw$Z=rZMNg8Io6-%?Fwbv-p)s+=_xdS+Wb};(ba+D zJkNjth)#=_7eW$D6PI81c27*S>`5Y2ZSiD}6CYJsA=I-xi);!vI+;MpDNN6%e1dj@ zs9i<)>l!S5!uPjIav#R@tJ=Lei5_U~Df70@9wyc#I*(O5g-^SLPm|g?m_r(5FuUx( z8kV?b#Q)T=JV3{tO+udi$9>?d>{&VCxxe}IDDwjLUIb&WV|(m{{BkTqhGFb8;p}tc z?0b+ySf+RXcM!2mkN=%QSZXv;t=VVBkwGdXkBVf>bc7&0;Z!qXA%RF*gU}TH2Mth` zWb!}J0QLbUEyC&+g2{i-0M;fZL)Ejk8q7V`RJ&KOX!V47OHCr0_aoH%k<(Sbb^F7t zYdCH-*!=xr(bbFq;u3z%DfRxy<5fukwaN92L1Ar5eeJSKwW*`EE9z^n>uZ-^C!|>u zQ>+hMSL|H1)FR`0?V|4ogvRyE!vh6N4;GFdNCu5`0P>ctwP%J7ZhKvsap|CRY28v_ ze|de~?n`x**XvxC?l1jLm0|Xu@virNT`9A!Z@5$+m%sP$_j-kOLrZ}1NmTaM^EnNN zUsF$P-Fw%yVYPg3M?mAnXyW-f9v6t>0w5^&#Ba!^h1J z6RM03pk~4w@E(tT;W_2YRwRsJ}6?2(8OAbSvNeDg*w)PsvaaPc)9Pg z`Y@8wvSc4iP=pN0w_c$_JlEq^ z5>RoE+N#utx-Vi3MFM=IZk}0sf2`Ypfo!5b9# zMwLNqR2LPn@eR5Y8+7nYA%0kh|3=5f2~a=S7*PpUz&8K27B5o3vo$#A=ZHzsmQ5o3 zrenA^7XJDS<~yr!zXDz;$B(G+1_3S)g3Qt&Hp}scrRVC`o^FgeKk9Cqmrjfr=-gMFxyao7e<(ThlG7&V>aDS@08*;$}!(HQFI^Nqyo84)cN4jxlK3Eb%*0W z=y0`~_CNpqi~k3F&ooEZSrm~|!6I$aD|AB>VEIa0s<8rH0DLR6Lx*T6Oz+6HeC5Z=*|F?zUudAxoVs^%}`YXxS5sujyQ zz52%AsIlW!`N$eJrmev|x2r$7GWa>YyH*E3FUM~bT^7;1N9d?ED)?>1n;xg3 zFL|OwHtO&)-_R8T)E5>iRlr;;z#pQU{G-Fpmm>|a3e1cUb(odA`eZz6`a-%A^;Pd= zfP_6nV&rn1L()+*u%CLee^FC=_i<~2|J6p?4RkBwh!PLZHH}rCZ;&I-D?)!6Q73F% zT=y;wAGh%+ZWju>za9Td5n96rWwpp{ml4@Y{H{fqOcuVj;lwf_?xzxGdJYpKyoOQ> z-|Q#Wy#qTvZUj)R`&>QD)wiEF1@}C57(^a@=Gy)1hEJaSM9hUFo-JqhxgUzXf%t%F z3i{-Jf4bv!V#V2EM2@I&LD6;VleZg!?@$5>c4+e~g(doz2DR`Gxb4)=L4;Ky{IuAi zud^*{oN2xMt~IP_qa_|hr{0Uld*oiL*($0 zv4MZ+7q(gVogX~FT%lkhe%-AfJG8HR&Gez{-NC&hc-6St|w;9yYc|B z|6UHObGhE#iKH3)nl|Ke=zKNhGLRSWi9)UN7FIP8w-Ng5y@6Q|P~(cxiibYW6;ClX zJL4ZL-`z;5zC9Z7XG;9N)GONE&+YD4*)3NhVj+Wj(?)C87ko%p5CV!Fsz&Rt5ckorzcD#|A=Bx6;OiQ|@b&!=pk0iok5iQ`TQ z&)j>Sdp>>cWq6Lqjc-rX`L38i^uhcSV1YdofqN%H4HL|9Sa|3pZ^b0{3_0}9M9AI= zPTpif=wz7Pi<{*ZzIuF20?b?fVp-3N|3py@MhL{q)Sefna%k3JsHyx#de6(S53q%K z6GFRJ<>D9KDgb$|GFT35vx6C!0L%vh{71ur12%NPf>f^-FyJf&5amtW89F7$0drZe zu>yiM9TBX9vRI7eJulbwyx3^>rlp7Eqj80|0#sx78K2-Sng|q4%uzuQi7$*aXOrov zD!VC~9KdNH=k17#cA6UxE{!mY4R*vXyQ%#v-ptXwn_~np>7l>ruplLDPbhrB(7WHF zH&lg@f&MP*!@K8C-+3usBv=sVu-?4EyRTBtCw3~pil2V+NM_?%?{@zQt?)AE6 zFU*r~_{aHgn6>VOn*v%yM;%EaWA)HEa;UEY8X|gcV*bus54GG!AP_#e6F$3ZptJSR zS^R&pa4<6n?0qQFO$p^ZgT4*@((?=Iu7co=vOpGKApqtospj@XYd!u`9wA>;>866Y zDPLO)Q8oMpiK2;QI$$Z(@A~i|P-i@ffe=*Ra5^ORx87GZiAyAq!e)XMu-|f6I2-0F zAPg%pwt|-@x<;tN!Y(JMWf{}iWNQC+6zx-A~aC*Fz z9&+*TZ&qv=76KdYDPE)7=ED9Ico_O*#k7g~8%zJ$LkQ&_0i5qb-3@Z68R3_i9OhQ_ zllvQQF8Y=H_b1BKAp&QvMG@}fM#=T4-MRAR=&EL3< z8o3yW$0e;rH>VGex0}0^YtX%1u9;o1l|S6XA!ESWCytny-z%+PdhE_YGp}OW^0bfq zQ_nLvCA<8{fdT>rhO{9%2B*k7IWVkmli+cCdq0M3y3;IConBI55j3aC|D5=07?MD3 z<98<`Y6BEmp-TzoG7>DEcZ$Xc-8h_ zG=R^7kZ+S0?mk%yIVoPWaeDQ^w3KE=f@SI;y(ymM;V|suH!UrDJ4X$tu3=s8C&t)~ zO3?sftq5r`(*mHslDDZ)3U}Cj0JTvMpy`GFt}yi1xBFDTsY0E-6)wEF#N-H@gK{_I zTOgRU=f)tizd+!`NTHtQR?<2cD4UKPRYiPvV%eeKNn|>qz=@Yrn@cEhIo|}N%a<$DW*?dql$!@Vz6n>|N{+XU(m=E^ z8LicDizzY5u~ z#5e1}I=`<78tnXcZyoDi;lr8CI!X1$(WNLGzum4GBw^3%(#BlTKOBhz{d$&Q zz1Fq4oZ>GO?~gw7y}e`Xk9hj)z5Jn*_g*% z%9S-V`TwH68tr;meqWn@>`-Bky7j`f6#l){AOA*$6;EGt`TJ*(WfUEN6RZR^se z33i6#?HB3(#{GPH+KkJdHFURLWUz%p_KtLVO$XA+u-8a@gvYL{RaIh=bdoty68h@K zJ5I$abM&cMj__@4+vkx-Nd?Wh@p`bZ4W=GS?xl`E#@f%%CI3_@NKX}q1H082hk`6L zcS<_<3@Fm;~_&84p=Mhe57E;nNzt?%3ONDil@4faPl zdKZqm0;muCOIoLVn{`%3v$6;q_~DMR&^L_Xw}KYJ=d{ntvXEh*f*8Dp{gRu>w73)% z={H0jCC)ly+;J*dT|_4>k;YV29|^dmYj%-HPKb?*#S3axOl~K^Aiv1QLt5 zqgi$4^g)L0JH8Ru&lWSy7>HR$yv|w`(@)q}esJrAnh8W+>Kdnx4ocLwq~|CY&%-Fw zCxl|9G+HPTL`L;h|05Jf=QJnF8>|EQIUD;U?>H zCtokH-XTYY9Z|q{%ppkA-m6d)>z6riL~+~m!TJDwzb|~)c%H0S$37S7!rOQ|mf+)R zuHHv@r!(LR1$`CNO;A{X2G^gi39u{_@lLWok<9}j_ zQLOfB|3|}eegLpkvJtL=g-y?IW!4Eno8mX}K(>VBG6?mpwzflN3SjZ4ABAN?7M+fW zHAPun{k_*X!D-`B)*2D6kOgxV3Q%5J5H;IpBs1yyso@+kHjsgh&oNGxXlRzF|9JPK z2Mkt@%FLMvcM&{q{1SD|aZ)IjOu53q)e=AANwKZ}xc%dqYv^r4s9|od#OAv%;GCO% zX(c5og5xUAj1`D+pV=_W4yfyfI58;>#H{Gw_ysAwZ)8% zbnx|q?pOZDjom!&;*gEQ3(vq^K+x1>45~OUl-#(sZxg?)gt$v?7!sh zWuzhAXH#`aO7pgCn1zvpead`2>C`nOS17jaX_iG9qFSDOEUb2PKZuQv67NaqKhKSy zz-~^#+tvzuuh8MyV#_fdYW_@~olKU^`yQPod+n2AM2YD*gpJVg&bm_7mq36YeGjk`gr8=Q@{k$&{rB~mvv344 z^cK5fQ&+2Poq%H^63a%;h>+oR{nL?z3F`dqgTGUDAH+TGcY$&qj|uwJktzu)SrPKE zYZ`5&cG~b5XrbVJc4NU1(I}~S#FuatvJDCS2YkmN$L0mAop3@nA|$40(kX1~4VU8a zO@|?y^V8FUK)5?~=2}ZkpL9WrA)KCB?wiKfNL<<;b9fkvUO>SlE}iTm|p?{RO_F7V=(adu1JwIOtll z5uGLvPU|MM#TtVs-nvDlb22VRc80u2e(1YQXr;Luvkrr8ZWjy(kwhzJ*<5G}?l^dSlilN`5+WazXr*3Kzmqwzz!NkJ<4k)~ zMC$UU4W|2M=Z)&Q-xszECf-%R?fIj0Ig1J%B}{t%T6ZmbDcVD0L*7;tW42SYLpHn)5R2l z$kJ85`!Tl3)U1;UT{yhQLIqI#frU39Zm&h{MPVjQfX4MsmTBeAbnsdiXrnWOcR)

=91Z$H5=@_fBG4@SrKun$J z4o?JCC8*>V?8YIci>?rNP;e@P=uV}0pcNcY?KxH)Gh7sWxsCq={vQpC-zJcvJMvWl z3Eos+iw*$^vTsE|Yu(VvVv!&kpiH5y(0fKjcdgNsvO$PIEi#+Y*lGc@jss>|fKr!e z#R`Awe-x(3MwdUa77F^Qu5Q^SjoG75@%`)~Bn`LhzavM62f3 zYLc+@Kn6#ZP|2+slvbQ zNI76#e$T9~(kutevY_OA!Bz|=Un6u5scurH4&F(T*{MgeuFSO@1gwRNaxKacnvswz zi;PeS(4ZYaY6;tCjfgC?pzJP!jkV;DJWAQ~u8$Pr6zCwm8&shk>iVPN58_B&RpDu^ zr5sF*2P~(w)=?>Xj+SH=LUPpBEHYMPtnpE@KdeTBfhD8h3fvUI(u`s)6Fwm~i0meL`A)IqM)$G1H)+RxuF)o)!U z4MAJ#0mC>@GxyQOMUVfGVI$a5UX;`k0vw!$mHx53W6|P}&1j_S?p+$-DM6f?e_uO; zw;F`lPnjRdY5Q(1KJ$KAxqft{2uyl+IAH6tK7!aq0pN<3b$%JU`z1CrVsSu#)WD5` zI}*TqIS@0`$C^!zNH&Q+bk9P% z8iFNzkY*}%N`clZ5qiJvXIz%ZLREJwHmQ~Gw z3lyQU=ID`>JuP)$BBGKEn8|P4m(^FjkU~uQW336*WV`BX@3nic{6UE_SvIOk`&znT1!~#`#JOf)TBlgR&vx-9!8d0!)FaCBw~d|e z7OfDqSpho^z>SLnv_AWT`VY&x<6tCcSu|u5HD%GU$F@0-FY z@lZfyFQ@K9s@oR7dAkVWI3+RC?(yXSrVdh*2bz{kBBo$?*M#_ZaL!_gX;-jm*BUb| zrO~VU+Fxr7cF*1%N>I(DSSr^nI_wj$3DUKq%Z8q~G5+D8e66i=|7YpjCp$&Ad=SZ9C8>jmD`q9M$Pl3MG&>$hqh3{iJQ--pNxoKE$AzE^K#bnwLV5Qp^;~MdxEA*D8;o+ci zZ&W&sz5W3ujKnr}v$&G#Doy0;?`;d-`>WD+GbHTx{jLMA-hXCavr1T?&3@hqP9C6OVJMzEpy4$7>fz~TgZ%&YaWJ(=?LpjKM_S7kqQ>qP0!%HYnmkX<6%9irPL-)fL!uW!7E>Jn9O4I>FbMfgk=;x_&E!9%3k*{==|$dfSrz zKPd$Ptq@NEV!0NP#v(8GuQ!WO-@-uSRnnL)WSj~ft3>kGh|QGXzcDV6zsr{Xz0vfD zk6DqK)7O9YXwbHLV1c52&JyftnXH_jF6X}Y)kz=R`J1AbKCY%CyF|fTsy~?B9faJK zO>b2h3s$bx{Z;_a{)0squyuXsQG!|2g33EZpLYa+cgM`9-W`np`1x-4K?}&oY3DDy zM93}vUxrei<9r2+f5SLY&}RlV#z^(Bg3Z^%%u^s%Qy}O(g_r{25D-7JA-eZpaK&nB z*LHJ(N4Fr4DtZfMt-d__fQ{T|(SbI&)szQn4c>no)ddM~z#4kIWJaN&YJq6c0nk>t zuIR|)p(PM2{n|x^l^JTl8UkLb-7@>=mhIPmnf8C{die&*DoH6vEVP1nvP$+>tt8ik zFBT)$q6b>lNYO+sDpILAFIq750jUl>e)UI_|E^GwlisB8^ol3n$p42jez z)|nMU48I0*tb~B*eKkv&PqDN$~r86R471L2nvxppKAa>)TW?W-Vxn3_L zQ^}6#PcHnHNO6C0%JLs~TeaJ(Kc~pYIb!b)k`wj*G1L;Bi1w@X7CL$rK}2;*x`@W0 zJIMzBwd9;l^!a=G%cuIv@0Q&R^z_{5+YZ}Je)I5{eCW%6(Ew*R{0=qz{PFG6$B)0m zj3){H{~HZJ7h^VBz_MKZ%X^`e6b?X1p(z3UlFKa$5mu!UnKC{oxX8uH(CZk>lq8J# z{Lc`H^)NrF!gtuW8ERs%(&{UG_wk`v-+NJg*U?;dI#M<#W}(ctHma%*=c8rFb`BSf z!(a#RyS5fL-j9lwjTA6f!hG0#SWPG#j0}8s@mxiqw#{1#KP+^J#%w*HsF;U2t&=)F z&e<>HMpd!GFq;HET>7i!Wd!pTrH{j`m=AU!VKPzaKk~M>O{QJuDz$<~^$H zkGFF=1>u^6V;6ymkKwy-&pp1epKWoz-v@)Ky|`%@O*P_Ai&vKXA;J+16SiA&FTLQx z!zvk3bo(Nm1hEYP6&rmA>L{kzjTPyz>t~hKhE=|${dCC;xSqcI=QOaFcmHI$y~OvQ zdX#T53u$l=qo0>CALW1JSk=^iQxfeyD|qzZ10EkYq`v3WGsW)^QN-W=U(4u{wk$g| z-BpcR+wncUVp3@6Iz~9J2@!Hrh6Eh(o^G)cGha-u4|7aV_ z)M<=wEv;FMuT9=mVM&`}&39^KLyp!Yk7SEYT7JT?gwQSy#;GtEu;=`~H5F;bsu^;u zUwuc{iwn}Tq%P}qI=J2XQv@mEu%IR}5_c%M-}z}&3$kTv?tU57sgln#rxl0{14&!u z{9f~iseRX}PCBVu%%QH&u9#f(k10&Z*w7lsn=5PN7~g((4^zKn6)&>N@op)1xRo7Y zvANB=*IcVAH7E0s1eI!g&1w+wlMM?&_c5VE65PeBvwU?bm_cD>Uc`nz$>{&nQy|HY zhy*C?hij7t$_h$UuxPr}{)eW)(KEw5ogj0ejF;()>6i+A-(OI5xi>2-Ygd#Q9jZq~ zz8i$y#CMX%K~Q7OF9ejj_Bal?haXSV9yI zo}CNf`RG*SE;^RHnzLTOUa*Z%hs}yxwSJ2PeA@1fAw}s-TI&WJ;xynK(Q#88Ivh6# zB0Xyq6;xf=hgrtjeKSOjTG7oT%MteE@;s8S24W`C9sO?Qg9;cl!58V^WFtz|MHp@> z;sYV4Op=+GNSNJp?E0t;aN8>Qyz|*&i&G+zi%K%@Oa?T7-3GsB1Gp&ji4JVB4dyi( zLv_DG%2DACEt7bS)?qaqus;5$nMfL{mHfq73tat@zmA0;Bvs!roPA7t51 zLC}PDI1bG?F^|Mq_2WfF22MP&vorklO5T~^q!+8BIRiEHU0xfclt?C zdy*LV2_WatPwhr?)2<_|BlOPZVz!69)lk_$k*+cU4q72OXfFL$K;=x|?V6Os1=9d# zNxbUPT5UO6{3@io;vwFGB*qzciPbN32s%B*$KGX6))%(e3=5b7lAo@!82PRvYLumOyP4SB$!eI<0Ea!#lAZC?A%bS$Ui0-L z5BYQJ37Mp_SkYzv$DPIi|Cf`={Jb9{DpJ}Ima~<)x0_LJUW+G66Gw@3`!;*czzsE&CYD#9=&af3bVn$HLVS{Ib z#3^WlJ~Vy>xegxFW>008d_U=(`|JUs30Yh`+)?j_Htg7ugo*5!BHE zPhWq5`qY{$Zy#Lf`Eq90m0>0eY+NRS!UR{nQoM~kDHW&GGY{7Fyn7djaq;I2 z(S;F@)AEntRPl}|vSMuFOSn^@rPOvtg$m61bNlqoT83yZN>Nl=>nr$priqQN*KRo% zn2wF-fxuU{BJ4kBe^agQ0Rz76@mI@C;>MyqL0{?afB0}nqEucbGCu_ga_TqkH@P7( z(fMLOB|aA2|Jh86p{Y$$*@!VP+~C$brG!$mt!xv$2G97711-+upZ zkL`Zk_xpWc@7MLZp0CuZW2Xl;?p&pn6O<}~V~im66@v`hG92^P)b^t743OBS+zVK0 zwUSuntS183w_{MiAzX2pMm@%44*q<4x$0bk`U04z;X#i8U9GWV70 zOj(Z5NbM#-p|8Tasi#Zp%rlMu9}OV8fr@}JnlPv$v6d@^O8}Y!ob}abrA10r8Mt}_ zpN&uhd8F(C)7$|y{&VwM0L4b~g88HXsaaXb&z*+z(%5L>E5&X%mPRu4BA169m+o$X z>FAs0{rz-qh(%t=9tm=ks^NZk>S!FC*Cb)p7LZaQzmAesmo5}_e2dgSiAj7hp^rU@%rfI2ZkX9(MlJKi2|i#VIqH`&@MJuZ{{abFlm) zwZIm@&Pq}(t4s=bvGfVZ6wowR!;4Dq?4ken0}5>sM$cKP`|4eJ$V9PFF)r4mdApzMy@Py5)^ z@IfVj7AP{>6I@(?k51;>D#tA0KK&XX?IZAZp|~vXjs6^99@MwE0l*bJF;$_UyIE#2 zeMh(z7OAkq#A`Fjo3a=Jt_GhO2ARY8GchLSIu&Ix`DQh52wVW03zr57MNI_iYvaqVivxy>L6e1223*J( zJxS6H+9I6UmJ6tTkQ#qDYOI|4w1hSNKodVJlhk93-sQKcb)m+Ew^K(3@G@f&Op^O+ znZgE-%Kn!|!Y0F?|1(>k(!jZ9RXcdP);N$7Cjr}Jb~8RUfHLa>0qKa2fAiMhHxw_} zJi22Od&THPd3H(gQALAi_;8_WUnY`#VSV71VfPT^?=f|~T!1A+PbuEq9URyOJg zW^wz;wYylha97nKBX;=#@Pl)W}0L~LwY1<2^U;t$cjL!i#=cWq-@XEDHL(2w6 zT5@K1_+n{JF^tPa;%yb2d^$HvYHu^-nkOj+4;5}fI? zx<`VlcT(eOmHk*~lO>>;tiNq^#F&16w`8XI3mE0%V^Su~$__}(J53yspaS93M({vf z9WL<9vB5j>&G7oWR?nKxK0CKLZ%l$#k=V`g?Yk9xn`s~WUdWasH7BPR`yuFJlIlVq z#*d}OzKeMZx383tXT$3~KxLR27SG$23Tq`xy){YH4+u6DrohU?_fm@Klb)L}wnIWy z;b8+oDw;*+0$SPs>pXPdI~!@|+^oW|u=9W#7eM)GTo^$z?8f=@_ipAk4r=~+enY6a z@mE<0%O@fk~<7GEcJ{KLXL&1%x@AzyrXVN|Xnw@D;$MJwPmA-3}Vb7X~QhM9PmB z(K|DOYVS|gBTxhkDUuIEL&+>^A(6QM}p!)hfO8e3?=B08WDAJmCwnp+Zn@> zgou?V**E=FM}VJcKqMc)35@cF)abv**KI~Hy^l6Z6Ig*8NS-O`Dzd8uXFELb$6Iea zy$cKtHogWcHN=I%IHuE?jveSVGxCokNcJcm#UG*n|G zsP5H7fTa~7Mf*#CRN;3$%GAtzH50%h^@jX+7eS38nx>6ZVKGTk9`qlqIj*D1L9n%- zyaA~yn&n0Sska~NsGa|!WW3&3uEG)iRcv;ffa^VUBOKc@)428Zuu9t}%~XK2aLhDK zq99UPF>n}5EFsp`X|zcQ;%e{Hux4+?dxlZq{ijvRVW?R^tww@+xtLfZf!pAHL0@Hx zK4pwWcxOdK146GU!X-=cfkTT}VA6?rtQV`?L6zN(QF4zh)2qm*Zji^2_)iEr2*xmN zBaV%{3V$x+LH*~l{DDX_YBcS3oPMV(7w&)C7{QYdgb99icRls&W<0t|c zhH2lPXT_>hk_#-_cy=S1)|If@d=Ky=&ZdI`uc)`qSmOquJ7A)dBqp#c)-@-3 zU$yH^Sj9_{d`s`W-_5u)fU4!mT}=$twj=ag0BQ)x=*yvW1E$+C`G56ZOI-G4+pn3^ zFX#rUshd<5^4XNm_^?#8pM(;Wa(+NULPiUg!GQNn{sn=#9YVSdQ2(Y;He95I;8{0M27y;y(bor#O3qY2@Dw=0hzkS|q3#g3lXs>Wp9dX_J7B;~? z9(3~==HCdnmasR%KqV%8d3V9;`P#7UNblrs#q8&->&wmeI&;q-p)^S#1k;8OjtiWN z?dy!~`=0Uq2j?GZ)8gmRHnGvU$7cs_M4FV7Q~jfaQ?kwru@+}YOr3oi2T=uqq#+5! zlyGk$?Xnvb%dxx`Wb@l6Y5#TYa|#PQhRM@(8MCDq=RS-lbw%5p0P->0Pr0XRJdNQX zq&Sz_8^1R6e67_!V{_a!<<@+RmwWW=&ZCv?>yKZ`{`srM=J4Aznh7IUCl3&~UTO5+ zRl9cnKJYu?*5l}f{0sGuOD?*_Zu=eIlXi3}clI?-w3wV2{wCqnl~&as+}+#lul?5P zyt1zsu)X!$`01`AMRz!tww^xXQC#zDgN?odUHvP%%tLr7%Odh^UbV-19NwhCi98yh zujuRWz0$efv+I0a(@Gbt_gYXnfWkh0@1ADQ!(OJu9P2BPz# zslDmC3)1|afgQaMsJUxTSjw{ImY`CGtjFNLL>$-oyF2uqmy#2VDAa_0mVtS0AC8ANJ5j zw=F!{arMc*rDGaH@l%}p$xAQ&%Nsj&_1SsF(&ultQvxMeHr}cqvKO}VYp(V-?s@)s z>8qbt?_R&E+~+Mu_;w=WCmk{#6aRkmp3*;8r@WUYu9goKJ5i>AkN=jd%+-;ceLgLMer_}J`?q=U)bB5q z-oK9gTi*qE`v+=ez%+z!*C7MAl0S}*#Y#Wn)UuyDu78e|yfPO5`sWQVXt)VEtbClB zc|^A`!M8}&D4^P{D$&1G+aYDNTTzv?ywXs$OTz2JV#3a3zD~ygAhgIN)=R9!^c9(w zQ*7feWHuQGl2waIx}7mVCInix84riNPf$Q6 zpWeM{q)(Nl656k}fEa9=uI65TZ5U2$k$08Zdzt#m8Ql6l^_?H?-!SB<95}Dy zgq#J2h$6Y+kV_&5ymYN+>qYtw%?HCa?YF~j*=bC&FppDXU>t5)miq9CCUnV4`==QX z@3>Axtj6JU=a-+M<&5#XD^f))-mMWd_l_IEZgj*~?Zv7~xO5!?ZmHm5%WBLZciOW~ zD2IdfLrYl<-DI61L4JU9U}5O0;D|?&Yc@YxjL+)l31|$lgdeyhi&x~mh}9%qKlN_n zF>94?JyQ=>kiY*gf{^c;loylRF0)9J#*7zRcwA~1o6Ni3FPI^0yKkN5fSO~t8bDovSG zWzf_{40FuBD97f?FL3MjZAL{jQRYPISalpA(5GII2ii1?Wkf zX*$VSD5JyM>pxm5Cgf;x*3j9>gTFpK-x9qc=ICn~wh}x`OBX%G=)~{63>KYV`z&g! zqOwBo3*FvL0-$VR(5?WhBmdvI>o4yxv}tbjsGj|9Je2W{F*$z;vwiT`h7B=%b*^>Q z6xujl3_>a;is$oFRc|j~w4yjqe;w8abkjR>g!NyJBp|)UZU0WQ>fLeb?)TC#D|cj( z?8V#r=*cb8zj`i~j6;zZ=8f((=*Msv#IlJE6%-m%`yqLH>pwS{>Elq>h%@loN9{0G0P3GlIsrk*aGE0tlsZ|IIOxDJK!@oUy@@g5@4kl6BZUDNDjNOX} z&%Lt>g^XklBl#I?EQbmj%ro}Dr(w+K4ktX_4yW5Kq2;p5_QCa_Gga|46E81aKgvQI zP#>zQ9RNS?$=4^v6?x2Z`J_0O=0nRHA8Ss6JY;H7jZlVJS+jiUr>*c>T?l6_=HcWV z;@5TrD%;*IyDcnyc5p~_yV9aREoSHmeW-MXK!ppVJVvCHJoXanIE1Lt0%6PBJF;_pG*`J6IB{@2ImKuxkku`8Xw(TOe}LRs|20F z5H^bh4mDpkBmlk);~2o9@=Dtc|HGTT-EMfyG5Hj#bX#~0WOi+WpgYcHEM{&drYbHA z(sEI%`Yv+lnlyL1vb9d}jqJ;SltE@m*xkUonMqB2 zOEx)6ZkzY^xruH~pP9(u`>JWV%83yPh0jHz7jglBnHxY5l_V@A0+<#EjQUaZt*e3)jS2)HmmVBI=F#Q*Fugh2y0_luVzsct(sb}##;yq%1E$>^VqrkX+5vDw^@Tdo)EH1SVT zp&FvP`7?x7JaVQOb!yLEtFSStF5Xe8^o~qww{iy-C-M-ICafi$_qSF7NNBlMK|PHq zfn1PVlbdx0{gcea{(S?%3EG7rwuPD6>Gc#Z24>mDzlSqT!~ywK8R#ZaIk1Y6Atzdg zXp3)a+KMpt3?PH0lVb#=-qAK^1~}aS09c!!prtM{BLbQQQf*`Vr-+eG9vh`)y!D*& zXa=B@GANP>!%3LImtf*0_i6zQTBbe(YCHf&QkiO6_t!Ec*iH4?h4$*(5@>m|Nv6K| zFLw%aBzTfShVxPz^Yak)oT}kw`+q+^Ms7w1=!k?yOQOpZ4$b@4Q6fw7VU#VV7>kc!#vR`8g5erf>KOS z1{3I?IA~fs{Z43PNg-4*9jF4^h8UsCHl#f+`s}<-ExBT?2Vz4QSF4_Jy`U9sd}v(P5naWIa-ngP^OfoxB#Hb%=Rx^ zJa`~wf3`@^MM`c8v%V#=o{*?Gfs7*ldAF6MW(n4w6LMRyi7`WLg(1pK$eKZ7q)v`M zusaWs6d>sw12p4+IsmHwhUuSa3e*&+5qcGCg>}vM8yoI z;DV#w!C*@UEuB?2v%>1XFUEf6xIB4VD@YIe=Jc<=O~%r=atd2Jv@`=D7B=`6PC}XT zP39bwDV)_RB3>)3Z!qzI(3SQK7qIp0(2b|_>ez}jYz`9W$idS8BiVy=S%O1?$f1v= z=fcAC8A(oW90#^}?N08RGy!J_XbaJ|!&xR-u!4xl4}MU41rQ-%B}2FZB|L`}XD&Nx zd9;Poz?Vfu-IOlOVv<{!g&a%>hwFx*;yEGkYWHBr6h{#_-mGd^WQ8#%+Gig>jFJ5w zImO|0u!UZsPX4UqG;0{tL<)z@?4E_2Sgt@fGH_m2gS{Jn^Gk6C%I9AIcHIPxIrarI z(B2%Ap1#8H{m~GZu@)%8@_l|C0JHs3oH8T&X)q+h|LWW-g6Y26MlcKZOrBff&=7!= z>3w);KuW|qa;j1#E7)Re3V?M45}A@Xz6OfM;2!R1Hdw`|n`3+}Sp27dgA0RS-4TUR;a_-r^Sb&Z+6Dr>Prgo$A34AyU}Sfs+k;SpNt^5rcg!- zvMK>_|2F{EXkeLecfpx>-N{(BLyK{PacV9JN0W9EQ4tU}YAn*qO*0uDG)XZA zKb^ei$HwoI$qEc4Fik03>ylV+oN^W+(i&2>bS3HYSMKOqy^EH5_DA|jer6bgQ6xmI z<=}4@I_t<&9nP++l3^k^xGoO;+Qg!quZ-FsY0fSiHGI-fb)~nvZ28`0NxiphO`1sf zADTzpec&W_^*~1DB&HU|M!eUXmf-Flu$qd>Oh7W#WSKi?TYlzjb9W8ydku}hHxv#* zj!JbBLD>&RlYeqg%9P(iEt`-9A*c?~$`6OKHb2fHZ%-$8ZQJv6hlO$6I!>+u2NeX? zr6kZq6pc4XDESG7s68i=?OqE*?~u)v%D#o9Xcca{m|5y*Y`b7 zf1c-Ww&&<}C@euc&Pe>&!S(d(ZQ_P~_hrO$fQF6=M%}uAF<%g>W6k`M3We>Zn~K?1 z#+5T>0W$lM^P4*4zYTbqj_{iB`6AwY#zSonJVR@jR11)32J(C+8zEzk&5xh&NXCxoRN?tzn=<{Spn? z8MxE>Wf7){pm&X@k;`y301j`seDq`YhNP5xc@knPL;Nxrw3Gmu3EJ!lKo362-)Y_S z78}UZyH>BP>mg(0=!wfG^4&HBbSCVO5QC&NZUS(7L^E@O1}WQDT^l|@n-eaT1T%=E zPfw_=EuGjIk;K8ZNQgv0`AID_AdV=|QsF?EK>8I;n=4;5hQUQ89Gtp&eemxh?JLYg zMy@&BKcu6bQBTXPr}-JR=SW_T9ktG3Y`%=>DIQGdweg%+?`kn}J9&u+nKB%(qRO51 ztx*%2ZH&L!z%J(<)@>7XuhN#z-+AS`z;rVQOMrwGHQxj^}54vz!*-{+~gki zcch%pv+Kz?I>TAskI}>63ZvK9-pI0#<=Gh5fn+QLiA`p#j<^(yd48h)*TAw5Am{a= z)31xVagbKW!n}wQew0{yg@WXZn12%8|?~YCbE@ z_H1Rt7|Pq7S3D)FrY{MOZ@A&f6`EmF|2+3|@e{piU*Q9#b9Tlw@2q(n>(g_s@lWdP zAI9AA=5w(d!Z@aN7PXj#{-6AcJ-d64YIIkANxW^2&C1`YOzxyc!+t({Ocu;)Z^(|` zxa_>}&10NFY;0DrHjtB|R?-KK<}HpddR51l_`^m9mI-Jl1!t+@)!UxOwoW!|DM4Wq-$wVY3&_uLm*4xRU-& zIvrpJf{BpdeNM+Uq?o>3xMm|;voM;@Mw&ekRvPi%x43&6yFfa}GC6zYigng>3E2@W zH9NfaQ^$sV?-C0cs0I#Ynt^pgaH))xj=ws}z~E{l1M_-xFMSx(@ODyddBZ>@&2`5{=2O;d|skHbo4}Z5*!+s3W^^@NI|&&>ttLSIFt_64V3aXiIu6 z@9K#JNvR^FpJ)l|8|6c`qQwjeg_$r?IvLNiPT9LM(GkYmO7+{^o}be5t-QY~71kY2 z7{9tus2u0W%6Y}jxR)$S%=TSptGcG45SQ(X<4dF+4Xf!ATsGi)bNSuQB9IRF?M#)E z_A*T0<7g`#>3sLqFm@$qFvip91`I}d8pQ}o8A(*g*jmVVd|#%q1Mxo6bEnf7bLY)a zf;rajAkJ8R&^|TITms2>`o{HWS-n0Z;Z3Y0HX=Q0%e4ccB9xchPe?Y)GOE^i4>RQP zjaNbTBg`&F$WfZX;9vCKp@%^D^EHJy*`D!72FmT02(@C}Bt`xj%pC~f(^5tKGwaPx zz=56coklrm&%rgrIH&jvOva)U_>G*yZfA z&Wz_*_K;l9jbF}w|Lkh1>-m>g^Zxw)OL7y-rD=l-zt3=h_PVxOU76U#?W5SKNM%Ix z8m5e3_hCdr^>1U#@Fq2k(O`?-RArQXt9(605AWc&dfC|#J~}$CD$+ErGpUKN6gP28TRELGE*l;K+e*cEUYcqcxL6PEw1J+&B5Xl;)l$W&P&RJ2>?n)eu+2@7)kQ3GO z%p&C&uSTWEdvRlk$MIB2pGHum@^lK8c zv^0_vZaU3&Pf^@*YuE+EHF=34C*H6p{fH6C4it|aA|RjkpgVkpX7(p5Rndp0Z6Ou~ z0WHeBl4PjD{a;)-VUa~D+g~f24OO^ZOurC?b{S)^wAO5G5Uki);Ed6DlKYVCS~a~j ziM%8mTI~AVuc44&gFL~yyvS$_Hr*r?%gDs&tnzEmM&6$%`-b#YRIS^yLFR3AZsew` zl4y}NWLz1Pb<_NRWf$VL=rGalQd^<~+!*x*rRrMyp|4smH!;NXpXlA)HrCh|Rj=9V zZ93iYmmk$u3$ED6xhM^2OCQ-)^$1s{;+`>C?lPYJu-xUJ zxYb93ezJGB8qwESeC^DW+PjQn_WLjvgrXeCA-OH=3~e zX|5WP>xWB?n8ee?d@`M(py~&*G@i`#KV@@yyELo$KV2E%>?xq%&}w`&PZCcNphzw zZj`5G8>W7wNeXF-f#X9Fwia0cmMHa>6FWg#K9KM-MZ_&{L)AFFkNBUTOmUZVBVmMHWSKlkw4E z5hg;p%$g+oGe*zlJRh^d<#LNw#3gY$mrN6$3B#Y=|H)A%jvJWPpZ~Q|h9)UZ3@&n> z3R9^-b@Ma}MJQ4X!qXG)SARsDq?YFPn+7~ZxyT>KbwI%}sRH{<2ZWe9h*29NrEMuo zqLWO|yU(KCM)n_8sbOjK?N`Ss0TnCf6e{|ky3wi)NE|vuhV~o^Y_@K9wQBi>yKPyN zVmOP^;lMb(%aZQfo>cu042-MMt+V~Sisd2zr6EGJOu3+8YJ>g+P(?N6?B9{wh`vt# zq*A=eS1*}?p|C$yuV?VOm_<0xV<@wh;?N-51guMq@~#=Jvkv2@X6%P4)s1{j;U=GD z-H~Qk^ZkK=e9qij(BQ{$lGR^I`y;J9p{o$KbUF zf5yPC%hnyrVPLcYoeiag(_B|SS2IY_n5(ily9h@t&9imcuGnR z6aBwYJ17zv^lUOh8wPqd|F09(@M-ob!E*Ex^3Yc`g^5XcB;~$>GJNY2}}VGts6Zlzx8)WrEEJEl0|KPlj-I!mWfc=BNhOC*H-8 zr`AzlevE%&(e8+*-XNjU)GOyJ4Q|+U2}JN`Ks5a&cgE}Z!VD0M4tBFFhGl&iDf-B)6ZZ?G z#sO7lfv8a28?lxPABXZ?Y$hZ>lVAh4qYsEE#0Y59#=rm}Zq;_C8A5(G5@8|4;%NjE z@n%;kl=uT$45QSuP^KM%tobVB~4>@H7(!O zT(nF50pXDlggR(p9JB3Nluxkg^M{a<9+h#>X@*OICj72XQj&`)ifO89|4&s$0hN7! ziw6h$m`gdx2~#4C8$`K zvhpEio3ZxPNviJ1K0O3f7NRklj(@L1@JyiZ; zru-G&EQ(F+l#tpHjAI}1$_Nq52B{*%IYs+_Zwo^3g43sVMWhNCeaUH-lz+2mJtp0Y z3C3}XJ_)IzY{K>fln0F62boIP7sxH9CI3*U9!sPg0yMiE!KV#MG$dsPwwT~x?Zu0{ zrYIGGgjGu17VOrd=~Tld81AI_i47LXu@A(8Wxm?z34_`%sy+yH8GK-wl{PUIbc_UY z5c2i#^_u{%AVIjKk9dxh800Y`j>JrD4(lEps$B;iC+{nAnQ}*DoG!5@_{y$W5Z*?xwjcA$N2J zYMfJD!zR4qtQc=B-$|&Ou&R62ogE`2;Z59cQgLj@8qqvJ-xzK-YSvt6I2gsCQyj zx}_LMZ4Yy2D_>)vP8I6EcA&T&ARa_H2=f<(pKz4uHfE#N0_0aB+{!sYwtL;uca7dF z6Qd&OzI+UZ(-g_sV~Ic%X6_D$?X_zEqlgey0A#N{skmP=Uqk(opHzivdL8aV?FHR(Nq$#Hg)#z8=pY z?A?X=BsrjY81?JhJ_;4}kZ{8Cw_4J>da6W2MY#IG(RBBjQ;r^u{lt^563oP`Du>h3 z@~-V3@vP}ounv{}U$wU*fI9isJhz^1Cysyd4kFH4; z+4$MgJ~KW2)MH3|5VfU*=14_J=9<1=)LbRi-7|dD(PL#$C^fVimCdvY;hy&b74;vi z+cj3T?`5q$bpPz|7ZW>fqyum+G`F&n&;U6c*CJ)M>Vd@K)6xR!0^xdR-M{nHap@NS>CPrnPkT?d5^zTlp{t+cixi@s{RrAv4!+%Lkp2F$ zI)8iO64Xx4_84$`4xQ;KLhx66F4sQ4 zoW>%I0^}n~izyp*`pDJEzTPSR6c*o;!0)yCGMUv9z|0@qf^LDK9#3jMuFFdHVnlwb#|LagH)y$1XL zfG1b046JVJ4-Xoc3{MCbWd@`-VYz1NqU*mdpL7?OC>9}@=~?n-G4wZjVAJiv&Ak_+ zW>q`oI+g9Db@cFtwU;(eDsQQ31B1F;*q>=Tlpi$YeGJuZM!bxWF3;**5s{+Q!*?u5 z3==>>#?2$+xrEZ2n?t>$#F$1=A{GX49H14rS!LU6Xw)}&>E_uF!(ucN2OPjvbj zOHk=p5pzgq5P$%nygYPpd+suNOKcidUL$1XINER9`>y2=lRb|u+M{ZE`o2E-p1Zt) zk-YQYEb$VTi06X0b^E+4krLw#PaGR53$!9>SxezM~QZ9%HbIZK^ye{?1l1I-e9B}6~3>vX^{YN3L!6tpX3HVJ*0n%J^bWO#uFT)0CE5$CP&MHZ)zf#DNcWOaQ5M|&({9! zKl<^BHGN=>zP1({IHM4g&I#{eUp!u2P9?_JH*uc1Thq@3kGsEk_EYS4{%k*cT$=`i z?IKb${q~z)R2`eV@I%cZk8slX;c}7RGFUQT_wr`m_|2t{#dZUG+A$Zzq!!K%S;mX8 za@qr!!gxfmfaz0bUww*ud2H#x?K|4%0>QO>wRc9;Wrwfhh#0mI{MGOY z*=hXAJqgV^pyM(Zx=!sK9V$3s+NKsVdERT{ZMkgMo{7Bnvv+TqPwdgv<652A*=v?L zb-4G*?(*^IRRh+PQCG?|>zeucJ9Lk_aZmE|_`g#=cc+6x%>3e&O?K5#w(4)LYL4)w z;{DWxkJIZuy;kf@m{=5?wruv8|Fy}#J+IfFd$UQQ?Q_$RCEp)pDzj8vOS}7KN5$Li zYUuSZ06j5v)hIx#onBM-R**S!^yb?s|6{A}UeDP(Q%U)6(ced&S7+iVJr#Sk+vxut zzxJ&2^pn6(kMj4vIeLwjcl*CndmpxwQmEKMAQzw6o>hd+OPD z1$ELh@!Ix`U<^R&6%$bmrJG=^jSKXA`Y<;BzESc1+A?hg3lqa7^&$YCi$RNsug5;z zv;Smn@bO&870D-BZR@A0NKARvD24%?fyX|$fBIf=^L6H@(oNKvyR^pY_F)#vngcd5 z&CdY9t2zY=l-38G^hX|R~A*Io)IFz0S!_0}lh7?`y>0H&*^g>6|OdAa)cG zo4MwR#-vD&JZ;O*9b1-pR$kXYFk&vLgGp+qk~(2hgBaXi`E&pIdGp4f&Le3tOyUK` zuL}%f6B`r3=qo+{>-ar$PjA%1c-k7#0EQatF!1YC4hh+@^4pec44DNDp3zA?*)m&9Zw=S8S;Y$Q}8~ zBNKR2K3sP9Y(P1~tXd%EfT#nm>p1;x;&+i}?BYE#W{n4~<22mZE9#9urj4GCJfHI7 z+4oIj?Hlej>nDM4FiaXJcVat+giEps5>GrH%okkz-1X=W^V2x(*tbdl-PNB_qzx9- zpPS}+`B;bk$|6PrpL2u6n63?Sm%(SOr*GZ(JtC;kvH~_;j`+CN>=~rVg&~sDER5EO zV8YM2Nr(+DodXu>71&U4^l=}1iHhp*NRj@rO*5XCvuf&jGx1~f0{s|nyU8_sG2DR5 zCEoX%v=vLvfA0QGS@JtxoX|taF|E3)$L#)OjPtVDeC;$s0g%2r?YPe$NJ=a64axN zs@KU?AHHMY!9!WTV=S)?DPe4jNi22#5tDq->~YYUoIVajBr-WbI+>}gQ(C)?`f+bE zhWTU{d^@&}J|u}FJC4Bl`pWo%ZbW<$3A98{!KhG$5j8Rbhi;vbm!e9?ic~Vvk;f!sp&Z=v$UkA( z?<~9hdKf6?6AbJ>lc6e{b|8;=3pRXML{QXV=0%Bl-UzTQ-7Sl))gK z?Do+zc%mH{EC+t{L9}yRAZFd|-55W^AFWC1+D%qbYNd!$6|#Q#w9Tk_E8a8&_IYxW zEwD*WAcf<58rCF`#PR{_7H1@KoUes#LEv=u>E@AAy=`Ka^88nYbz%^8xxN;8T%PS{ zg08q&;7}5(5>wLvJa2#Cc(`7LEtKU&4e=doj7k%A^0lrquy#R4OKrQr8rylH}z}iye|RTT+pT5x#D86UNe- z%S+wwLsP`Z4O)nq^m`lNu%o%lJzuI((yGBgYqt}=xpKQgwhV1Qy!Oq{<#eJ%&#Hp(6On>8@BB2^^8I%((tX@B*(~a@9O9 zDE*IIoZGaJZ*;rtu<qV%ci+IR&bC7%O; zXn7)Vs-5q&O?-~QL}OJ%AnMx4{@x&#rVNj@!84F3w69LISf+Ua5%fT?(tImGq2weE zCrsxG04y%3BB204N1EynFfS`b$wZV^v4EMQ27qPf^CB6D_1tgb2n4jBZ;@etr>y~c zA)Tw;GO{^b!eP@oPKyPO9WV&Y`RJUTu>fvc61`R?ru&XZ?!Xn9=LelC`aWF|?E&-eW5t>pvCZJLIBcoWlTPjP66-F0uoE{b`vTK@7Ez1~Om$C31PFn#0{8$HsiE~6kKr4h;}ewZJd@D4oV(sFBEf35300$RiBIwZP8OFH9kml#TFdID)WUw)_QaetT_k*_z&UG7%Q7_DFC z7pA=_#$4vGU%e&vLz2brrw70qMhcRjCNZebWCFE2D za>_84U)OO{Rb+Bz*E17{|2q6rF+yVG>eUynSq}8$n5BumGR-!f!r~Pw$fn2%Pj#RT zT={{RXq(^BtW{`5OifByFb3>iFf(@CPd#Ci4Lm80`bQK#iANLzO0-FEmPn8$no_e= zDxO}U+w}^V#@^k)l&ujZu;9gq=WqA^yn3(hOPO*?eik_NE_xa2_HM1)9iA_5iFg+i z-x)f|5pAz})E0FGkyRt3>8!)p zdCJBnd#u1<2(T0u)_sL6@Z2*S^YT;-ScDoEBWr0Uh_tO#n z%G9E5Vl0=5+csa++EZ|5q^wA8UnmA0@wiP~zQzO4Y9WBDa^ssqudi3B7+79QzJQ5Z zgn?Rs)4Ii_Iw~b@`yGQo)j+w6e8(Jen}0;&j3^*NGBJydKOecAdeXA znh`!(Xtdb6)J|v;mMDnfSZrWma;`w-SuLTCC$TdAni@>bF6;(5f8P+a2Em3w0ik1j zLN`?W6%)b6`ZWk5MB>OMLGZN6hTOt6V|)}IIItU=5;MGkA+TivklciwT)2UW`9F&8 zGcKvO4+Ho)hbcG^0dXUmd!U(_T7kP9;U-r&GIwTHR#pd`shO*s70%2SR+?=fO)D!Z zHEp6TD=Y19Wo7j6yz>Qbgq!o>zVGYzy>K~Nm-@<1!j7~)WOioJ_6oEM?6so;U2CSK zEPz~cZY`04^jT1y=zXcl_i~!y#HG_5?y?wRL7;R%gss$_F0Gg>?yD*Oad|NJ`QY9V zSgz7p7+{7N${&8c0z)KaB)uL(x3Ow|GqPH;|yAYjD*zh<3RGxrc!%@?TJDVn!s zpu&Ds>03gp)1U#+=KlROv%C}rCR32V*5~A9t9Admt{b`J8&rXcP{e4cz@HQR8xEyk zu?J@@hl`#3a$WQHyct~n955g>o|$Vndjj1J7WohPsrG5F+Iehi1OHqmdm*sVQUF^m z6y2CRdS!zB^_Py?MqRo&{#nbt7y|s_kN;(J-7jkz@44xyUelQz2YS}%ynH4vzn;l6 z?Z(}x2ER;!nl#cefS;^^+0vPRjCM5nBLNE^PZ3L`mV-Nz!97jh$lkhlb_<&Gr^v@|}VYVQ5|j!ZrLm z_mH$YoU~GJvGV5LM0P&&Vy>YiVb|K^ge~VWH&@%yQ4ycl&kOe`#9G)iQ zi5~L_MOZ@KU+y|bjR+*_2w{nN6P>3O@Oea&d4AvQlTZ~7Pj8&DqVY2ouUFZ4u5Q$# zXS7KaYBL&Y`+0Oj&rLl-Se*YAOkh=O&RD^ovD*5Y`>}vxdi>iJ8|@1C+r*fq2T1M1 zk)<%jtcFr?aJqASYR`Jj{i=FN;hsBr2Zg-JihHleA4fK~YtlIF(GeYU0YFt%m zOXZPt@al_a3NR`=eShP&N)i_=5Z1A*pUU64J|+1)wd3&)ag}zZMch6TwXK>YsVMah z9es%0$dq* z*7!O4)d8&5>>h!x5@($I9pDBJZ=Ho(ID7s)dftl00Oo;h=2s`Piv}V6I zR#5WjgqGb-xaM}59(VtAG#6doh3>>jrJ$ z8HF9K2lE*BfHN?>p`8kfVH+d)t+=Mi!-{*~Y3}Ko>x@c3Sx7$VqotO?HPoLv_Mup< zVMCwwL{)cS-2|wt>^1pS<0JFC0)XqoR-wb;wCygy3# zf}g+lN>R>3iqWDjG#MRG2AkddkCrZ5718kP%_*JgtqX+q;Dh49D4}JO`s0G9uP#;$oCvM+zAay$y+v&c+rnsaJ%l({?{xT5^w)wRc zYY|!}pt%<&y%-!-@--{k=fhJKPHb6~T=S*sM>`yvgxdC;kEzq5OJOAjiX+s!{^qEP zs3K9jc$cbnE+rAw2PYntQ8@hNoHL58o9aSSiGqcc<|l7gSz3tyNXF*%fqLt8PgG9t zm%kx(CLJ6vghovPzn?j)qyA#HTwoQ+$$d$Wsvy zVVi|~dBk`@ln@o<1E@$r+BneovLISo5S`>wH9+2|p z^M!5@D+3L<;vM=UMU&vOy_*OsWrg*hFVx@Aoc=U;?+{v0*E7VUc1{mV%f=Fm?@wx2 zi?miSKvgry6q)wx=;pBsNGw;7@~Ehxf?yw5S$GqXR1lR^ppF1IodtnR0G}E4vs-Jo zqr0M3*3l||uX1hXbpDhb!of^`Iorpt4*WS6*z2WITfTBb5(<$6lcX#5w8%}vsIWyJ zl^5v|!6}HR6-H12QHeE|v4!LG5Ft#SykpIsMOo9~eJKU|EV3dQC{-%oJjpzG9(B(h zzzO&UnbsV^@$pYXC(YrYPE^!yMc&h~*gH{aEn4#ndMag=7LC zTo60$x&d1ltXr_4<-Dum6qkyQGy~+--!>Glj8NvzOG^&*qQMe#gVtqG`amZa^gh2%SaMx6EsmT5s?{ z=|`dfL4jhW{W1iEP@&xd#%jDrLjQuI@yR<1_9>`Y$=VJco^ktZZqZh*8yyQ#0SI0&&6M3h z+vFgBd4D;!#NNp3l%je8B`%@Z#tnCFF&Zq_U(HuG&oaJUWwNft??l#;yN7KyNXpE& zn%qUZ%H=OEm`y?_qAnxHr#9jN|1yn^zt3Xd2etbK9QnQQ{zRvDSXfF_?2>AlKj@s zPggp3w+xgYSaC7I!n<6>LpS7@`$3yM&fhR*HS7-V4j9%r6!;EWKLTO~?UwcjK8}sLU z<<^=Jodu9KM;*4f0t6qn>j)8W7zef~GFL*YAqqn@6U4O@&rGei*xnwOm${r%`7~ws zhjXPBJ^fV!2;K3-NKdL$CJ!0Gc2{$TR0abBbVBBaop#j_92K>G@?tR0d{w>M9Sfk-J6da1((Dqoyl=FD)fuwdXiE;835Q+9GMTnF z%7Vlo*a!JpD|M0Kyv^W$cP)@2w_!_&$_7xOA%;kGhqO$90s<8{+gor@i=|k~FF@;X z14|ia07kOKKV^c*GI9y0#8!Ou+yKseCNockNDwtxc2c+lNH#|#m*Cc1pOsYoBQfyK z?`vMG>X^VD1C+;gdEVOXd$dd%|9pFP_QpR*S15X-^#(#}D$CZ|{G+jX$nC!!00>2s zzR%t`LqMupB}liR|6K*VTgJPyJX=o@+VgpGxu5RU+dm9a;@#zQ|HK$x7w=i zM4way=&Wz#e)hGyH9}_s+2q#^iFe>f^KrLy;)iYfMqEt1h-dwbz(vs2FfO@az$@6 zh(9g$vpVQ0&PO=2SG{dNdtV!t>O*lV;ESNsYbroqIgsZTsgX}yG9!eQVt(4 zIh|ZcJ-@(0XSS;E;27atGsRkR#q24W#3;{dGSd5$G+6USpnR^gU|n`4KI(ZKnbgNO z=XNt9ksF=e@I@x$#s#z)8MM9=BHeNvvef0`)7=k{ohKSqd=%4Gj7D;XG*910#t*b) zq8u}Mc*QaCiNH~^6Qw;E zniVfim9z77#?RTgN<~T`Qs}9VxJ8@LuKdv}uht|0=Q0keMKF)oqGkzX60e2Nf(crJjXr^>C{-C!EC6-HH* zLds1e^Z@{cG8TegoqvMrb(@j;@cQXpsSrh$xf@ivulUsW9kFRhug1KGPidHceHokeg#i9I4I{nA zE3uR`Dw&B8&I*dFDY()y$q)*e6|35pBD5R?Ac13#Oc3$U?|KB`nPQ~?n6K10Hnee2lWiAjSft1RE{IWaYZ6?|vU8GOcUo{{S$ZSMY218qGFtrj$^JLhYD5qJ~l z>Z*5}HRUXqrm%iKS$T`6wfqshul4yWW$6J)%-H5~KlgyzjfK_Oi&Skm_zKJ5 z4^*5nUtZdWcCE{~p_GxO&D;YPe!hs{?D>A>^~$fi{?(Gc&_X{rthuopKvG)(p7Jmk zt>z=b+!A5E%tSMryq6IuG)Nt04z9$Gcx6{)kz5NAY$m7}BK&f#b=CJSwYr7Y`nM5hp9`T2)*xS`j!(TS^c*mE` zbcOz0o74a91efD5;p(5UdMPe!v;04oGm|q)^wx1DCK0x{EsEhbT&_etcb18h zsJu`zW)fYGLIeY^HzH;ENJ!8ObFdp$e$KpQb&R;kGjiQ9@Bhjx0l>J5HL>DGe~y|J zj7pFgnJLD?kKIbHMiBD<#Clv>bWi--u*O)6HOoAj9L(R?xZ_PBvy-+)%48`c@7|;E zwemd~KuTo{hC%kCNmnoEq7@|dnn_Yn(Z|gEuB4_0kIAj$Jd*@CBdytY7C>{DWCq_T zmxpRVeXlzu*x^x>rDU?yK8M$^G`mLE zH|;?_k8Zsm{Tva(LXm<|#>@$_4D#S1l0;iSgrEsw<@@^y%5s*%X2g-i_-PoC2_vu| z=BkLGVEdGLDvL~9CNRB?iE+JUzDI;n=F^Lrhfcs@+YhTMP?=Q#A^}kGNLZo$F7|T2 z>9CtYtOxH6WGOu4*sP?MqV+QVzm*_XkLt|1Kfx- zY+r}32@{>8fuMy$u;}d`0LOd+^_kFw30Q2jZAw3yBQns93;d`HLVOzc<&w)BToY3* z7r^E-vD~A+XGQ`d`gNU|iF+E=W<>}OeIFQRMjbDo^Fo~}Nx$5d8WE@94^cTl))o;W2b4{7VV%n`Ks^6khVnBv_I+fJM#dM34-D2PTg=3(ane-mc@(GvzV9yS~BvT~!%16#Jh#Cg!D%!7#a zFv3Dd@0g>pAIj-08jVlaZNXxXQ0K*TCkcI?<(q{hN99-B0GM2s3E(!1;#0XPDTPd8 zl7*b8unnRSwV(%A5NxxT#e{VgJ@6GY2psyQe@#US0vyxLi!Zze(k({u;E zqRoMB1|3a2iVfLB^Xb&Z9rr5xKpVGcz(GdSRIKoXL7REUl=-wdNUKSvFCtoQnX8B7 zU$c{c0g#b{gjUQl@<^dG-gmv+_$4+)H!D9i)WfL1 zd4p@rArlF0fkzjnVQJzAai^}~+_dk1q+`==z0)^XyoqUwB`R28s(b`VNgYeE_CoIW zT70+~yRqSoslNk2$OM!QH+*&h6-4Ce6W( z7V;kBlq?E&)JpevS6fL!m zfy%`61u;g-%rOC$^`5}ZFxA?u402)ALWe=NXng^zo)4USYH6s;mpDTv!{XJ(N4=0Q z46trZAM2zOiSL3;vGY7y*;mX0`150O-#5#5-$jpm-=t@WmY9gvn(#1bOo+z%a)jt@ z1z@+sgt81H1)MzuBOSWshT&KwpPtJkQsancEt(UN-k$opa(8S(Te-72G2v@h)@Cfy zZlMGmj!VYm0tSHftVF%~&RhWwG%Em&7C|D3D|gE>whagne9rC@n|Oc(Wn5?zOl<4c zO;jw#hIEMk(L|)T_m%uw2@~HJZs6pmYayyD0WkzI$qb}BNRG9L4qLeSX27A#bb37v zK{<~;&dAcUqRnS*`zBN?5@E1z^!{YU>d-i!fUy$k=cm!JUlszA%wK024S%Yqvq)F# zy=bh@@AR*Ij8PK6C}RL+!Xqq*(!(|_dZlRToHn@7onryN{)@O)l}5j6|M2D951X(0 zMKHDV9HxIGaXdAn112&~Fo#X!?Z%KcXN|XJ7kz=rSdrz7#M~J0a|SvlMWhM{MP``tfka!PnW$=oh&Us@ zwpT7H31u0|c}*Q(Ru6qZn6VrzdAO#kW&4cD9`KsaTF1@naQ6B$tL*p|PiHOMwq<0z zzw?&va~=yH1!9(Ba@wdBXJ}?_({cJnx^4>hJN6&Xpg;EC-%qQfbX_+m&~>*7AT+XHDpv{{;{JIb95eN5429AnfjVM_IkhAm()V)=HjNdDaUm*3&zVY@{nXA@;PrVmdz02D%W#Dl(s3Rc{{dt6%j?ZJ>C*;cS@-p|mtzOJ9jXo{^!o!{VmlSaKeihLttXf7V5}x&wifKJczB)Tl-fR zJ90+)G(~^ImJ_D@(~mwG?)o4mBC{|3J{j(`W2@e>EO~x;@_%x3fMDu&?Wv_Ne>crZ za`L*xFdt-_vj~r8=w@Fr!*8T47mV@P&6Jd6-%Rcw7O|%LG;|vC;QiZGABSFUq#^m_ zf1=e0sP@MRS-^3<;GGX8E(>lBQru_SknQ0VV0unGgma_4IZ7N(Kr_Kw`3#0L-l3H% zDZPGo&nTJk(?$SA(9j%p5x{Y^5&DBZ0CJ?zcgxjdh|AgV#oIdu{asVn3Kr|znaVTF zk0D^~Pw~4;daMLGmLXymx5SsR9E_m5zdw!aV;VefzfW)Rjqxa1axKMrW#5Y*k9Pwi z-)nQbzMj1GH}@!`BZ&J2goaI3RcJh_Ty(~$sTp(ZS|;>CG3ryO9}n22kbH)zUi+aX zTSm+RJv{fUG83?F-Yinv11-zCko0hMrO}#_e1gYKgoW;E9I@@;Bwc+CbxvvSc%^^C zo_?#iwrRC0!pdDaLqpzDx_7z$o`olqENE3R`j`3^dIA1)7{ z5pu|-pmMbba}qUKr=f&ey#7&!Ah^xO6O5hNyu#Cczsm;o_bjRp(F$~{hUf=o9u}ad zhWgJ&Z@*no8yU7jR1-$RmmOXoCze23#?@fn-Cmcf;e8iU6k$+q63ymuP;k1tzCIQ~ zSXJQz7HRrCVzt>Z74YIw{E$&0<9X@byWd+0SnUUw9zS31JagfuGGF(; zvp?86776oow}!`PEZQchoNNyhQ<=0JS^k^n=EP-ahIWfkHiLY?W;Vzg>i z-RIbcFD85sbkB)2K{+blilYKHG-5NidplB5kVG?L#c}=10NrSite+NtC z!PScR>bZo4Wss8b5O4jYu~XO=?Wkf9O|A0fDtr5Ru-M8B8XmbyI~iH&C1*n@ZHj;w z{G|`SUMBT4I5PjpfAzJ~r?0z{M|IhZ6wsox&aK3}Z-7;ju!Ftp@m+hwr6DIrbw1|) z(F8Vd_dvAnRT=C?iv$vMj_Jk6)b@O`wPl>ME-(Mv|?mZb!U>M zX09p5nH#E#zNk%Nz?fB72_aXOr#HgPa1xNW_s_c+%?UIbxEhtuE0oOp6o(plcjZIW zyyHuXz*EU0e71o>G}>8_mQjTzu0e@lVO5oVnd=`;KIj} zv7@7W50g8=iFV|!G-hwp?U`-0{RxY%JzcsEv=yJ6OA(A&zU zGx5-v$BM&KZ5W6#T!}|t>eiPN>%^pY4F8|*xeu8;@#7m#ZD+gc=WfDKr7UC`8!@-6 zt0Y0vV!~y&Elr4XaBJY{AAB=d34Du}YQK5vTAXKylix4QYQBFWi@oNJz;4AV%ZN(- z4{J3=GXL8SclAy#MHt@U#@}8$cD{ImU9^hSqJHG=js)11@Z~GYHgn^jC;(K>|GIo~ zYl!2)3->Z8Cp1i}JHzjc2W4m7vAR0*)(=x}yE85&S1priw)65j`c6#4sVwoIsvSY+ zG6$Ur<9e?WwI3W>MeYhbl%i%`Gfcgj)w*ADAJM7xsPcC}V8j3jfd z4Qm6sX*C^NdXl3OLyt7QT)M);CFnRG=h2dKuQUF(>Z8u!yp8~J_x{kCxIdwzrE%L@ z_0mJa(=)@X^lz(fr&?A?+e{91Y&-oY_0xKp_LKViWVy|@_WRL0yTXm;dd{v`NX0>x zhsDG(;kD;h@jIVIzLGmyn_9lsil2o>%kKrU&RcOlLr3>r5D>>08j5=KwtXXG-eb~! z!gj~dp2F=HW|ms}2mU$y`d#+%=Ir!Ju1?5=oP3456Nts{=Ez=Z-uN|OyT^Ik^@z#G zAUmoC8L$jgD)xo0{_fiNT)Xy1n$_hiIwzOj`(>1>;CbJPkeDW&(XVHgUEOH@IcFs& z=3>*uz^CGOyY`R7BwerVocp`>_;lkl)|apwE5_!^_fG(dwHitka_^I5@Gkw-I1)RH zY&8obKV^##vF?7Vk`}vDrwj_rkn}3H*|oo|E9JLK80t49c{C(=di5g^NzYW;8iG*X zuad6p8vY)g*S^Qtrh9*I(FNxX9f1i@*Y0S~5yz^6>!S~?%XdCc@?PDLtuo6(X9+<| zE)O6l)vGGPuKTrs5rHB`sSn>_KmB!|yOVq9?5Vfbri!va>9dzl&*!ZT$%`Onz~#=> z?+oSuXggtWS+O+M=k{?PP-_7?&{Z zYaQ_LTu?B8Z-ob}Q`AdCxy?Auh4QT2uEU{`6QgI#droOYt<&+ih-Ug#mG}D?>m<49 zR+~W=wO(cxt=65oiF~cK$_^h1ydz=dPWO?13h`lPigHngvW*KY@VYJA_C4V4HMPpk zHeVw*-)Jsha!MWKecfe=GJWK5rx~N+p*zje{4L$DZ>;Hh9$(KzSrC>2im7~lTk(K3 z8%znAZJ})Q5v`7C&$=Ld{#NLf$q%eY_=enk=QeQZ;%$%eEaBvP&)PrFKg8^~Qr(}U zfDnMF%F?pk0t}&oIe^^^hbF89v3^G*MPEMF9*lmM=>6y3PJfe>;yjHd+?M-aU+#Rc zPk(;ldyUE|CLF$SEp{arm}oLO0|_ORZ2*WH3-h@Zto5o~)8&TIz8~<(Xz#Wak4)ur zDrxK%rGGy3_wKK9->)|KEjE^~d=;pcvn6`N7>YY=PGs&TFPyVJ@Z{U;og02cy1?He zAHJ+SSD}=aeN%hWEO@MC!@fVS4E{kze}SlG{1;0AoAB8se+GvZQ8IXcDvFvj9w0dP zM&*-pO;%!wDJDY&as9PlZwrX?zLlH*-h`*ZmbGTXzrH;{t|Op=88#^jkyh|EU~-+$ zSG3R*V?hJBJk79J;881LHR@-?8G^Eypuc&{!ZO#2U2H$=r!9JtpP&%xzIgHFAr-ij zQruaorLGK&lKv}xz1i6e8vIkI{daQedZ1>Sn3B+} z+9|-riPvO_DJij(#7T{FT(kna?7H`|zg6Xho$AU>`a4b-M=>=Rpg~?faVVA~_odOo ztCmC(yDZL7yuMK4VksX5P#2fd&`;aMqO7%nBAEF0BI}Cdpyiy(D?8|SlK#p(b8iXi zolJGDy-z=nSS}z%6D`jNS#BMwaZ`y?76AJ0&^Zwa3&f#CAH349`zbw@xEme#Mr<5L zXVa1sWMf>JOJAaK$$O^h=Z${I4#TfV z7;t9Zu_0hloO^`qv%8aMor06vIf8^)A~poK>`8);@MiE-k=*fkwe!jU`Yl?^a#Bvy z_uJ%ZI2A12RIJe;SNvnaxcN6qkIE2V3ATH^^-gQ7dVStmFSU2JXk~ag>-yG3uC?ob zLBYo>}6`a?3e-Z3BjXgayP)B1_T#g62v_`z@D2vkvP%(S1`xUS(t(yEbb_aM`{P z^Da-T6hMs_YZ)C1OAXaNcqV859p{V)*D1oJ(cal`Aq$veDFfz1R{M^wTemE9=|>+= zH~dBw($J*NI9H*8?nn!bytqtzrF%e^f*=qnf-685bF01xXJv-J`Ut2vwC+%-Ykg>F z_;&+c5ww>J31RK7ZHmFj$bV!mVs4sGg9I|%$N|l?N#$>M9%Dr$RmK~RIC{}@f}z8gpi6lk*UnMrII7c=I-mHUn*96RW6Szwzsxh7x|!4_do(ePsjG&6a2yJF*( zl44en;*T6Mp7{=%DZn}w(TB?mpd?pQ{^baiSAit9n7nF`kwWRZ4*)bxc`S*@ z^_0bhZ0n7y{T|o2Ep+8aKTDa`9iE0l%HzNZhr%-6Q>HSPt%(Z*vcz9=<8kmd=p6H_ zg$T7HmfRa)BiZizx+iVvkEWI$oCl;(_R=?S!#<2<+15^Ozvq`m+tB)h)HH)uB)tm- z+nt^OF|3p$2vkR&%h<=@q>!{<)oK5lH$4c$U)n{MQyX zmL`KpqTwzWKy&3}rYfGu1&zDWGp)ye3|bK`t|QlOzxQK(PwPfAnZc@9qHt12aSHl4 ze2<}j&JvisG91dw!*szU?gNTs?t_H}2DV>u%3^oy@+~{ZcCV4tSSjwcn{}@nsx^r= zJbA)1aJrGdJW)xsRRtA#N`{MTrlhepgCc+^fY`TD{F^OFN=7%`cJJuDnGzoV`4Dd8 zaQcD6s6`?_b-Xa#BB9ERWj3A@`j)T61cD}asuMuvvSOd{eRt^vgNJvouY+~kaff-j zv{KQiSQ`LM63-EMQTlsKJq&hh>tpc;u1=^cka?DkoPUXE&;Dizk0; zzq}oCrRc1cCH0IS{I^i++Nxn7gH#2CdqTjBxmhvk<~aQ*jCEjQ{J@`|E%F`f%)_=f z=D^;NVnCJDDb^Vm90coYd@t2qa8qPkakO{Z1Iw%waBy((hKElKR{*Vk#lw< zI2rDY0Jv&jxy(N*`;L9i+O3BcYU}GZ-KaV8&k&t2P`b=ijHY7?X(*@Pt))*pU$uaI zE{=*ixIc8v`7=jSW!J6N80TD*=v;2QV!P4rkSz@{|0e0#Fyh@;1BV}-542C`l`7?N zA9d7#kC6L&+ao)fLrs@q@^AZu-_5BJN0wYJ_v9oW@@fR=4>rryxi&ztyAl zRU5JSKhNl+IxOAKTCZ52{(IfYSS;kZZVY)k?6J_h@dDVmRDxp0S-T{O^5neM-j9Jc zt^k zS+s7hSbvMaL3zYvYqqf{{2ImyYy~nD8s_`_3|?DAlW5v8nN6UZ^OzVez!{ z-kZ>6#7*B-_)8Y%c_ztc7XNfAhNscXYh9%`-)E4L zc1`$gE;hM6c>Emh#L=p6&M&W`;GSR!I`sE}6X*|nE)W7knD$`+CSai9D*xV>KOg~n zH}$O4<)%x;r`;W(o|71v=IY8#RuHLH*5c3yliH7%k5{~Sbv)(%X>-VFFy>)Y)Qq|L zlRwWV_TRAE>9irbc>AWYjnm-THEk(N+Hi}@v!kELHI(Y7icp*UhpfyXT>3uTn$YL* zD@ntmfB|&F@QxY_u`aB@;V`a8P^1|!g@#Fi-+NQgyW}X!UQ~cAf^s#i|8Ik~CzLIE z{vg`fJ?PfK3{0ZnDA5nPBi6J3io9>EQf;?a`90Xd#OJ7Ll!%Z`b8G({`OGuNFzSGj zs*^#NAnoAI65_j0qaYz=^2XW8i_Weaq9rDKPp&;t)7f}ZUy!i370rR4EqRUH`<5=u z&G(GiY=vc<@Z3rmdR)ZBuo1)Go)=Zt!a!T~_e7ta03t{9@$~*ApA+x*y+mcTqYL*w zxTNPD#BFjeXv%bjY(#+#KB*~R!>3H;fj%wYcdjZtH??^_QCG%NEBi5h`9x;OftLnc zL@)gQB^T)@N`I!m7@h)oO;WOXntczT{90URKdCPvF`1`4(&|}p{OjMN9mk?xo$^*B zrJWOLLWP6q#Lc12^71g$+y#*g;G;=eL7hoF#9#%*yttFy?S@j(Q>Q1)1}ajglog3@ z7+PYKine*!&`e!R;Q_2#j?alY9*=))wWe7P6M-niI~x0Sibx7TiMke2YB5BWoW$n? zS_?O6WmLO_MIDzh6jD#k&8vdzj!`pk&zWUcwq)S6?4$aqjjwMV(ACb#WQt!G9?~Ip zUV0r8R}e+jj!K#p%j0b)_U(wZ%3)02IiFP@P{!DD>B5J{oxvw#?p^Nr^h6kc_o)As z-p|kawtjkf@5;rmuM}9dl!g(fK$8ca+}4lbqaloD}ufd`s(3iglE) zM`hbXL-&G5Mr&I{2xRK0==QM;M_7h$X0*o}zh@ zv0lY8q>fLf7)c@sVnNa(!$aLt$nY#gQZt!b9iOvNC=4*vjG~xjvOo?29$1a2=s4lsjM*mp=xTBEp$h_3=ur*7!K?PWjiM!jG*ofQeEO*mnl&iSoU$cwZhBd zLt9N)%7^y4#4hucW5Sk_tl{>ZfJN^}+#NKkkAGyl8FHC=j&n?ZyoGJI97SexrEG3KI?pgvIyPKp|(to84(QH-f%4bS=<@c5MqBk;QeusLbv{nW8Pk zKa3`_xJ3>2v%4y^2N4vK2xluHv<{oDPZI)&?Vd`YTL|}Cxyv-$=$@w5DS4(_wB6!X zC8tLO!;>mW5v)Q7S$35KBJ{6OajnX(4sdzPb?aAhO{mC=3H-*WKvBm6?=MR!Q?!33 z)TaNKNIHJ{$J4ZnDj$$YtgOW5Zgi#?jcKd8YmG?DEU>)NR0UVF25=`i=ew9kcTS%e zj8VgLmJY7n^`X6<;L!h2iQvcqadyyh7eB_85W75b3$>cT5HHekWWNNljqUa4SMFXr zizF~DXL|9&j2;q~_x{Omxv$;Hq|UXB>y}n!C&;=pGmHVk&AS$)1;%U3>&n4%Jp&`L zAmtP(Fa7$1;h+J8os-g%^@%G5Vzt_<@%LBQ7A^J8^S%j)9lpvJytE^PdCO6!RYw?u zM$YgBtRGi*ZlTcm(WD|>(@G2g*2P#YrC^i3VnT#&scy7*(`+tHyIgiV&txy)E`89h^!Tb&Bft2ET5}BLN6R?bUvt zO|wX{F^%^?C7y($0hSRvP!!sJFC+k*uh{}va+{+8>cDv<6CZok4LH#mZHCPRg6F3+ zTiF0A!LBSC%XAMnW0GxzH@V|m0HjaBwUlm9KZLeMyQF}zi=}{|nWQJgfqiS|a1j-; zh!dP~3uQ%`PwKXzhzD1%MS$1@7()Q$e8m?+C7aWVUGDM}vC2-xhr~jykRDXCXBSv8 z-L;dP6#Z&(C~QZbibWlNiA=rRB}s;|@0{AG&n&=?g4(YMMGlJ2A9a#p;cVG)*Y|54 z?0Onpu&NFM`E@X+?KW^)I$%+Ee%<9zu7WrV;aG%UdLk{^a`Da~D4VUaoJ+&9I){BJ zQUocNRk{`&u-#RuxC`ZxhAm&CIBkX?08npHMPx{HIS97b%)ZbHaKN${q-=GT#w}A~ zMFFR5ge2DrLIq_Oy!|C1G52^fcG>aBA*Sv&s6yK=DPIYWqxPBsXnRGV7z_BE#-eQ@ zLGz1ipBO8W0QuC=H+AjtZ&39d&-CToU5#8Ngocopl+t2wIuM44SV>C^H%}=$*=IZ4sat8?T$I7`!Wg z8K`0;HAWFQ759P+8%5Q7tfPN6C8)?e%Gq_NabF?m}qNQ8rmlSqLzr zW;a!Bwj5mbb3*?+N2KH2?RgfLrx^;Q?Yy|QVAo%X<~7-XO~mq;2K3F28=0tG8(1($ z89}`=USORQxPcua!X<|kSm!F_28KI{OcQ-8i!H(Vh;Xe04yAV%|E?fHbNDW#dPY#T zNu9}b72bh_v{3GJi)Qmn&s(S1>a%sXP+HUZE2iwqlYLsXzW_xV&T18JBzQcaQnfR)1n+8$TB;kA((wS#@A?}7^I%vN*8JG!KJ#;O<5`(2AD{ zap%mu9p$n7pX(QY^gX!tWyc2dvS-rU#LhfxkMz>W=Wd!;ItR>tmuFQ!p}yUk80RtZ z8q|KXbIH=;o#@2tu$3Gxb$ap(xl6TKaK6P8$|(p#aZB1T@P}+;^l{%gyv%T$`}Qll zs#Gg(g_Bw-Bxy)_e=-^Xu2sZr{E5Fr3+4d$@;9+zOxze`%aRx}g(#!7@E8}(SKdIW~F1t{sP>SP64Z_?OCrZh5(^@NG)0)&eUL1d%;A9R=IYza!3 zt-u_3s5GlU*|?B${w_Jfo8qW2wHXD6xvCXxs7|~)qOTxoydY*s`?_hQ4ihC{<9oRH zq@3K_rmNOeBd+%lGqHP4&9S$=^U!DS8DpczkMCKM7?&thTFn5X6Ktk50kxzZI=ArG zr1%O7x3>Zpu?^KWYlUXuza4k|*}^#W8qeV()(e#TWmYpp<$e(koDR9lRh~J=Xp^lt zWt2Wp!BC>$6*5*g*Sci^Kg>pT@)_mEjO)x)vSJ_3)~xL&E@yzXfZA7vij=Ta2CKdV zl&lF9b%x42nL>ksienKj0+7T+&(c&Yq?yHm{{IP7Uou%=0e?>zQj9AzxY}zC-9klj z-$@u_#GrW1704G30$LT3CLoFd^b{n9go8=F73g|=Ck*60hL&?FTd+murhEDeigwiz zmog9vCYrVev2Pl&`P&L$n#rlKohAa$w_0DTzzL-(w*X*(s~pb6+)^}rG4Kxvc+d>! ztiU%++l0&ZUl5eEjN?x+01}J}=)vu~u%?3vIx>Ne-pT_4Wt5}x4S_NfMj#oum!nq0 zQWRcLaYBgiskXhwIMmN68ywek6rc{tR4u|(wzE~HrK(Q|arPC6dYWoA1G0pvYBYp4 zP0`Y!@~aPW;!;PA)jkSUr(pv#2C^i$Y#p}XqKR8Hp!!ZOI9N6XsLn#YrWKv_4PBQS z(v9#v6}p!z@K-AECo<_aEykz0_`8*gcRgMCEtI1kWwCtE>Sl0Epp;qBw0RbtA#KXY zL^sHkTnWT~nVjE~9G1j$O%P8vi$h``DQZ9B!8i1H6#q=i3&{qiJC3|q&-0+e*BAh+ z#jv;sfvGzBazCx;d)Ds{M?BmR|1!PYtBfaq0nVJw?cE5M3Q|-*1sAc|p2fsjfX+g7 z;x9qjfagEJGVu|IB7jU`q5>ne7C4y;>yZ~J^`^*2vnsD<^ZePqwm`tC^{tM(TAepqspeLc zYHlT|C`qN7QmIsQ`>L4Ve*gN%$K&B_=ktEQUe71P84&+%Lbe>CV6G)Cip9C^kkgEc zEk||lwYtMjG^-^C{_3k5&~>fI$hBdNq%LGEQ~5u2(nhhyQnP5sYYmOh8!k04G9DW= zD?*V1&`-a%f@_F_ft^!;z#uBOx}hFC*K3MeJ_Ps!d-s=v3<;RY*@1%?bn;XAG5!0bMablW9vC z=JMT)-tr>^an{fQjlJcd8xuu`v|c=Kw!C*SW7cS8OLC}^wTfWt$7`3I{%L(TyIina zt;nqM(<*Ico}cfW=ou>Ip#?euj;x&T^a-W_G*8)Cij0{>nmcP*Xc+m5P!8Eb?zv+7rW8Ctt($6D%rzS4k4qW)$L|3@b?_)@w|fP zUr8yu;>fEffLE21FG{qoH)~x_+p58;q}Zpo8~?r9`OnO<7^y1N%HGhvh_B#ZXz%jT z)^63Xe#$HT*Eythx4vJ{P_PrytyOIV#PaFbRA2hVJ8*4Tkc(-BupYkitbC>5=(Gox3 z{Grujlh{d5zP0e(Hc8fOsEo%R#$EM%`zVi!-l zFQ8M4OunW{M!uXVqjJ?l^lP0ZT?%q>wbtIASlp7qOEE{TtdJmmT5LZ5rlkmJBfA;f zLXMyNZH+HLog>b_BeN{EicqM{sFQ6)Y6Pfjb)Plf{Huoh07X16r;Gg|F25v zEW=Wk)b&rrplPou2UXzQSLHHL!`2F#)-Kmq4J$-iaW9I6<+OT60v_TRank(H^{mfFAmRR6$qzu&ydoyPky zs;HuWj3ImuomZHqI&d!Y!BoYAMVV2ELRs-$uHxg5bmrYKlOou_?WbC;Z7v78)9x+t z6~z-sJCA}(WymZdxSEfB(a3l@K15ZjVC6GL%v&gXHEtxgd6o>Q=HL?V`O#Ik*++oE_q>~in?$sQfDPl+) zOB3qTVWmI$jPNf*{x=vQYo7SYqn~JeS&>%x#KGm+`WD8T8ya8v$|XXr)euT0xqREp z=a*hKSTZ%nt^~NH99}C$=vXs1+g|Wh8*%D9HFcrV)%aFM(6M=jYeZ z(q<7y?lX|0lLm9o|K50QXLi?7g1%6Es#StkftM`z#y8EVTpdcjN+z6#(o|;J76{`# zX5$})_jIM;ax!V=$hlBFX;h|kCmwr}_qsOu<=Bl^wW`R&8$AA24tr84HZOsV$qdgD z#*aM4dxHAuZLjv0zuIL}Ew4*%{kH9S(Mugu9&|oRQ%#_`R^ZDhem%eZU7-B%(RuV) z9^pDnxKIFF9n~C+&UQ8E#4ll~X(XV`>=r@yck-xYEZB)l*Y<^@XuW z)b2Cnw}6=hNe>W$e}TRJ&{ey$Z%TX=4%x3j zCU%(SU*rSl_n@1|`41FBCh7TzNrEJVa6v%qV-iA`M(jV%r%(ipfJfou^|JVjJYtRF z+@{0}Qg&FZnYIL>NM+2Wq_@Q(9r!*7fS~l4-3s9q+xE+Rt6KuacGz0G7_=G!RAej6 zm>Mg1U^$;O%2zVY{S_}jMZcv9MAM56;MQ4{Fuu~FAjd@T^v&uoNsGTjXz1_lsKsJ4 zVKty7L%Kq=s{pX1N^ix{ul7bSTaN6W-KYEGrmp6OZ?OP!Y5BLMoN6c8H$8di2;qj- zU2WY^-paNti@_E=Rfb&83^+MQXyu`oWAHbRTeZGjUMID>A$374oh7HElkT{Dc|+(N z$`AH&;(qh)>OtD?x9XO855j2NJFixO1!5_&cZL|s0}wpI*K-gI}jH8aQ!8zaOTOMYt&{}!BG{OjjOL?cPC88ETx zsVQ31Xx@F!O2Z6561D62`a%SnpcdI%rutSy*F9?Mw8^_h-^0g+HRpeEuz+Y4BFRww zfj(?=hCiO&#eKW>3}eUq{6UUe_I?X_M7{Cg2~#8@1$^NN$wgH2AUqj*^7&~U0vilI zMvG}p!2qo4Zp<8!M4pq-L#V_Msus9!A>r4IwA4&Xmz+VJ)@VRtLa0ma2D%R;kT^a! zwt#NV4hB>V;}o02fR?x*>mhuIbuB7bGbT5-`w(?W_*q`1=zxlnhHd3m>_Km8z&jZ? zU`O;yl#*%+*>jB9qrQ6awmv(c8+BmJW_RSBGZFvNzrMV&AFCHRpYi?O{j)32MlS6B z{pIDY1BYLEA~js9PzQOk*AQBRWHM>2u_37=rvB?YMK25VUuoPHxX#aWnPQQ>{PN9gydYLXG~c4HACi=V{(syR=sL6lzoq8r z+ErVOoh|E)o^7&HdP6)V7~lui%rw8rH4m{KZURCk`c6cNj@+YZ=6v)7Lh}9l8aDyLD2 zQ)?v#o?troU&QVl)3_2doA@tnV{z)K$I>ND4z7_jcd`6Th5(`yXK-1?wtpRY~Cx=Gru(VK_4kI7^2|w0{ERMVXPnooyq%% z_Wd+`NB8Q>+Kfeo2 zZe+cqMmpKW73|MC7>iWqI{>s4B#`qef`&CIix}{YrAGzav_73;aHZTsq zqbS)<{b-{ArD8c^&3Km=nr_FEmStQzawr#@?`)}0mrro9=FJ%x-L>9xSgdwnM&*_t z4_CVG{q=P7t%V?+Ic!0_X&8XevKy0Tq0CqSupyP}2^s~c&K7RtcH7)V=ql!TGZ2yy z52|Evvh_W<$fRN|B7cjDKwbTG@G2kvzkdh3EkvJyp0P?m~Fc%0RzonY7 z0rZ>!N`Horq_8{zL@_>+j-;p;t64|{LZuP|&7KT2a7e#rKamMs=IetvUVh}DDZ!i% zDspwmd(#FUW;H-iGf#+95OfvoY6K5PP=}Z}H8E`RN?%#e7e;Il=Q=a}|aR z92h;dUb<0-XB4*wa2Qu~?^~rOEQ*E1s$!ADCP7x(sT}K&SrdfhjRww8L8Q1M448?g zTTp;2VHuZF`vkcc+6m^m0Ybd56hRxBprRD8835Mkb*LH0vj6VzbK> zID*})5VRg0OVDiG;DkdEYq-DnIii@jDBSj`-ZjzWEX}<9HO(OyRvkaf9PXyKlp)Z) zKL=~35%ft>-z$W44KOdFUzmDiv9F1@k(o=IckzPu&sxXkRUy8Qe2B`o5EuH-(Uyor(AVmA=&}PxCsENjgXYu`Bvv^ z@k$4$D3N+2gjJDr@j~*+|JL-WP1a?rd(AAV{yB2(XWVa{TeZfUmHlg^Y(V7I&@~~>6TKD#S%VyBZUHryaYUwt%>H+2?A5j&82{-3e zUw2umK;wFC<@yuD+GjMYSvl6n_3=p9lo~U8!J1T%6Uh7+acjoY!dq2!*UdN7us@y_ zzFiLjMylwuRXL`+^`k@Rkhg?$JECxw7~AfXr;;SGUNL+4MYPPhuSizIL4ZmQSGA81 z0cjWRMOf~9c5fr5%_N_q zj7txPGNq%WA&uD@7-J*oN?B$DDoF#iN5#E5fxsZ=#EbC{UOTV7eVfG)aA^ZLayi-- zpQHy+CGBXdjATL}U!M@Atw!J78G=V)9UAC9Rqgl5X$H$LUR(r6X~M9eY95fQ~>Ro2R)JdBlYrTG4^>?g1#RxmW87Lh)R|t8Q`|*LhqG{YT*Wm5 z!q6r9^r51_;)eUm0uDMQH#xu&eB#xC(XHp8%>lR3ff~@EJ$1CW3KqWvRqIjetX>)VP)&*00u@Gkp zEg$c5-S_>3-g%cXaou*=YNc_eoozfw2!uuG8ZkNuIq#@16KNA)9sdyoV_}fNbGdyz zJ0TCD!-vroE)~Uybn6bjzQvHu9xMQ$_^p|zbQA}=|d@faWSwaVHQDnEELEPl-qiBco`K*o| z3=wgt%BR2(Qw&-kg|YNAt#93^_` z^m_i5oW;$YGb|D6bPBaR^7ssQiTv{|Rf>wOQD;L~j~yFwD8VSmcbauZ11+8Y{c_|KZSO1?mIBpS2Wpw=%@FY zGH;(hE^qrm4eyl)OD;AXv6(A3TSkO7XZEa;V3fy%k6U`|DvDU`S!-FG?IWPh3^+6A z)2H5Bg~Io}0IQBMpVu{?O&vH(Tt#fOQK}l4{^L_LBUEctq`=)hoz7)dbkHsbCvvj&A`?1Lk+&GmEN3d=)KpDTBRp5)`@qI{M#?340g4;$(;`c zZ*9}^^%!x#`*WzJdykL(CYO^VfTqMpL2I=i^0kMv963mbysV)@qywPhz*+N{a(~44 z{$txU{>fSP@EQju(ng&1yhd>uUSl&f_&hu7zJg5nbImW{!GzI+H{-tD9uFo1*QV}a zXpAYKcK6<07j7x+=dbdvU*+Dv$^CA&`__J#zuOSQTVu~r{H}+N^fiy>Nu#JWPg4CJ zO|N-6=sQ-i=6+_@<3>Mw+5JJ=2QuHoa@3GK`~he@g!p1w(WSe(!|~mzwW9?fo#icG zclgex+x?kdC+FpB?Zc!$Jp7zl$e)Es5?Y0n_E1gP{|ALiUUUCh&3z|9RkiXv_nM|vtq%RBN)l<-FmDtt1Z;p#7SEMi_D(P72MKnmUwn^#P9 zxRSNXIIA4kdE<6<-}*CiPxt3NMGb{rEL}gJA{5<+G0-h#?pPT-*5di1wQoSKGly7H zj1Grd6bM8ti>r`$f!;Z_%{ifCS^fUkzk7#bJ4Wv&K06Tsc~f85^rMoMOSMBp3U!wt zNTtN*+I}2BMW}0+16o5ub6yT#v6xka(I3c|Cv%=Z z#=$|a@O4>nf?V~aT&J0W{lA1u#My#&)MP1Hxtz73DDqR^g!X%X&n%EIR@lA_n#d_`07W^}4W7#&C2@9b=2W%Hg0(-6g-PkzGx~U}=DbsT{u`qG` zT#{w;A`czqARE>>Lz9ShSm#Ddi3*S*?;`9E9UFcV!z;G6OgW9Q!^F-JZ};Km?gDys zq7cqRT>NC*9O`|V*a|qXL!8Z$fdwT`7{?E4jZXMsV&7#l)@vON2!m;5!mZEH!GgR? z5IpgVx+FOCtMA4W5gTX6N6#x!Zni%5ldJXyPP_ibz4%g@6V=~T%l|*>(3}@D~iQ zm+MGGoC$Pxa6B7YDi0P^EbT!X9f~bH^N#Q`KK$#{xgVgH7S(wwn>clgPm5FhOYiTu zt~`fB1K0QS&2yaim9g-}7DUoV{+ah^#W@rq;H}3sV)Ak{%?p94oSb|~7#+>d!=2#; z)ZRv;^6D;b3(C$c555n-{TyH65JcyXT~b8FXt(OgaQ#V~t^{1?@c9y45FtUYn=1Xz zyS=#Qb6Me5?;KD$9^pK6&|jFfMgWKfhlvtV8!iF`2p3H22#FsR)GV9?akYvQCPqhQ znB092Fj%mE9y$zn@xi0k)rL8LR^(><$yO@+dWN%Yh1!Cg8lfNGjJAW zP{xvWnO3gPU6$mWADAZz)Vg8L!w_$dCnkJT8Up5Cm8U15hu!%6AJ!vgxtp0;`&rkX zBn9ctJq4^@q1pkQSont-sNpSOga`&+6yxlFEM0773W7sSjkCK2wo3t(IU$=Bd*x>Q zJKf}>ec&x$@KCLavlPYts^n<=(@o>&bRKd|yr>v+SYuI1d+vaGKWtHqjuxW>IKcMN zRtMuo4}qY>hK^Zsy!cOi)P{X%;<;9#SC%)(kDgeaH(N>55a zW_&_Q0NuJz=UT)|@?64~?5Kc##BNTX{%cC$!1Y{MTniKRfa-)J5o74U_^mG6y_SF2 z;kr|3FU_9j{M_N1Ivub0_z{|K`>Am@aY-PkB+k;?F5836sW=C)i*q(-M3W#ASZ zb`4oX6bl=YejnetYx*d{ES~sf8y;-W4~at8lHuU79Ia33s*CCEuYNp^dHqKKI`?O% zKEvLtNgYj{EP~z3}p5{iX6p_ zeN%e&TB*;xhggi*9Q(6?|JQBv>MKN%zPC`Hg`h*m7LTgZ%vcR|h~gqU+OWYBPq_(J z?R@O{+BvoB_u9IrBq0BY_EA7d^mz6>IC%qBrq7@Eg7t6+C4|Tk!0wnqOizFgFAvV% zS)6~mxbR_7{@>yv7N>#0sXvrA&wJkW^qLWEvV4nxqcL@8f53m=zg&Oo z^+MY&Nk+HX)ThKyZ47UU&OzktS2OZH!;C`2-8*I6sOU3t>IlJ7jWdqRim;-Qw;8>Q+hf4&NsSPAuL2b$-|PtHv#K4il2XAcmAE zfhwV2GiZ6}k)%kLf3;7kO&UJPEa-wfq%GywK#wOS2Q;0qqtAR>+ z`Rnn1aFi@mR`m+$A+lxCZY9lHPFc2H;U*1b5?=xwG)@qM>*;(!7h1C-11Ze0vk}l{2h{`xeqa%uFW)^Wpo1%Pgxk+}=VYD!HQ?c9gj7J5b2_42KB6j~V zE{n={G&vbtzRRS1OGAgrscqN(m{cSWI4(Jz_I%fpGco1%k1!N%s4J$-Uq74d9IkNN zYe_P?&U{b~8u9nBcrvoie@)PnpwMl7kajXkznJ9I|70p`McHn%hWfv<+a{^85@x;e z9|7`W+h6jjKyzj-g23*S&$uaX^YKIy!z%@BylD+URlZ|Gb|*Ub-gd8hMU^sIY}ryN z;YRb28-cgR*|OvDCA5dhM4-*1z3!ycqYbkI&Q>>mJ>O$>^UtU2R<{=Z{iVe?;`DfdPZ`Xc4+j?vHe=qkeE}xqya9#1|-KqU6{(ii0YsJ4W*B4jJ&)(YSu%9$D zR(@s3>t^E76aPwf)f7iJKZsbhqI@@(ShYU)@qO;@9T`lNA*&0MbXmPTuLrpjaa}1z zlBG@2#pV1bB_A!$)*gH{)4sl&+AK(an59dMVfAP}lH}TT>XUZV_2_(;99S{0PtIcX z>Z>*7dAS&<9jog#wrP?dbg6m05QYS!x#k;6er)9Fo^u3KzAi@xhT_R{*?TS(_1WoZl$>uClMZ;mqQQ-sI2q%#W?HMs(;NDLd$BcKIeNOZpOF zr}s#aO4w^+8TmyH28%x8+3ec|VRV zImDD0w(6m%n{rl@`~)7^^_b34O5sRhWh3CxXlstoKh3)lB7Eg#FMgfMr`Qb%keVL* z$r)#dPe`^HAcO-OoQLS`@>#@|g|{nq^qD2ByYT!;^Od$sdo2=8KOy#2c`Z{JJEyE2 zlcQ9Fv7yNon~8v#!zNEIyY4YK66UwN`AX!wi&2H29hJ&y*G8XM3C6N9FmFf*UAVkP z)P-bMYwC>vSO*-9NSirK3=hUSA1&oQ>Y&|KZ2tp*J(PtRhY-QiZcrMdqnJGD zVI>g0Y*MtbJH>C{?;G%5xA5Lzz;{Ks z$JuB!D8_lPh@=<_TGA0JG%>*P6(guK{;i^7P;dM{42jRdD#qakb$nc)quk=yh8UqD za|J3%AVRR9j8+GsS$S*JGhtAtaGCjF3U|?t{n2OLwMWNq+ScATBQo7$r0)%rXw^mU`4}lLw~pwywx$7kZLZx9~^~{rw!ln z{SMTR!BSlN)w9SOqWu!_5V1_8Vhd$SpED7M;(}|IUYyBU+Brem@8A_dMp^b((f&Us zUV8+_`U(*>{hpSIM-n!)B1UV<+6d1B!moS(XVLNMm;BIP<-{n0BeL(%Y*P;BfUkGg zBa1O1(rz^j@Ii%)PNZzh$tG^%0$8cY6sIsI8_8aI-V&iu>lCop=;r}ePKu!18|8UL zl-1yF=g#8LOhXy4zgBoD1TLfS_(%_ju1(FEf;uDZH~SV95lgGNTtYT>h1kJ7U^qWq z(cH%4l+99v1)suKQm?n8X}rj-A#UP#TX#9uq-g)xxaiQ|Yi9>70}lAcOCLE8ffzOq z2p+1U-(%&no5cWSj!ElyJj^%*E-?I zpVtE$%r0nVEj=?q+&tJ#q0Zg8DGyRiRY#&2WBeXW10R_hmpJqLmaF{7<^3byWqS8+ ziGX&u+m5<@HK~=Wy2R@eWm8aEGyrOs<9tmcTw18-13V`Xx!57txUk1w(2dN*Ec|*YKdsNG ztz=xPyg!MKQBd3zULqVwEkm%S-DktOipPh=lOk&%qEY`gfANQj@=H0om)GPEmcEkg zVm|1TaynoNs!RSXs6@$&qC)OM6(g*0?&dfM03a)JkL%1cb5xI2qX;Mwnd7p4C;{g4 z2&<4T<#4Xq9D?I<+6;xX0$_6#k_`YHR1XV=5#E)7F7U~T7htgm+Ch;hg|P8}hOfIZ z+=WSmL&e85n=9@289L;?U2yaQK8bEyNXc^mS{y+^she!n;iISymKeguI(GBSOdxblte1c+$EAL4!q{>>3M17AKKQn~t^u zq?RJYYJ3kpPijr0lIkMR72WLc%B8l*&CwvaEJtPXQTY}?5m;+Oo%64)O}J#TH8_Z` z3I`;Nqj{qWhANuEHysgKh`Yftpz=sw#8{X^CgeQ# zj}Uni=+XUr%?RScK{rr3p{TAS0-=p~cPo^XD$f>irn@&oXQNWM(U_iSxdDsMwSsD` z)AfP`Qd2?P(#9|g!FyLC7nzq=4{<3(Fpy11xMGrJSC_S7%FPo-N#6$q!>Dm7Df<*^ ztja>>_SO@+bx@O&cJAI6!;s&GhxIo@`}mV}CqwBcJUur@-Y97e*}NM8r-k1Ev(N7o zZAScz<;;n8Rc*H7cTvewZ&Ht<@fby6Ov)82JJQNW^Uh2NVRg~ue!2`8}`_3F>Y|eiW zp3=-}zTaiypy?SaLQ0I?jStGvf+}`%2*6*dJIZHkLuj%>R1yu4rL5vf7W~E%Wok-> zj^U9dt4vFeXA{FsDVc7^zfOTN#AXt_Dbb6{6WTHuc(zp3TrVM+H>sUd=0T2C-RXf4 zDf=G%=10@HlO#&m?xHDy+#|Va%Jt|uLsE@=3f7Dlxmh-FR|G2dt9TX!79y-eYHa8| z3Vkol7YHZ0v%QJu^55eL~!Q1*?9;b05YezE0$`CC$ywty$>WM_CuI? zNN45)TTp9Zi~Qpw#V8D$zCHHZ+!GeimN0*N+J%8j?0cj$Xl>Z)lj6dRMa-EfCr+`# z<>LUySeX)rx0Mbk^|$@?xN=Ch@={%>+iFZ=Ac@_j;SC;h3?yh5T&wLir}Qjk_bg@g z(B@!jC&IcH6;p%w9tEPuqI*`jv&AB7a*qv+cqVrTB;7XCTy*D!C5gxV^7_4{-L8dt zOAFoD*=LPIp!i^zU4pbLkt%WEVqgC&HHr7uTD}WTI=8o*J>%w*TfrXbLiPjeBS7(;(riRTF!HxU=%)Ent}&SmE~aBcS3d zWta3Al|cBqyl0h-??x{#y!w_CWob42&7!xPJpxKT!Kh6__7K9%8xjmdpDRL!2zl*hFbQ#l{zN8 zJBj`Y;RO&iP?3NF6o*E~C!iChXXAsn&UwW7KXc7Kf6^Ezuq{Jzkd7`QrQXZ=ouQL& ztZ18?Xd6mNzKXF33=m)b2nHl8;4L!(a84=`77$TY!uk4sHk6{-joJgD53JgN%MK!I z9@9Qa5CD%Er4T&BO;x+-ixK+xo*mJVyT-o7baD~`q4s3xAPdH%N|gju;TkC>B=>Tt z6f=Yi>Byz%CKu*?S1EZx-Z!{@ql1~%%2p4*pF_atrlEY58Sg!RV3hVIFK!Nm%3b#Q00CMZuH=D1ad}0b z-6sxcrMe+!q#tz;LTPfr@|>WUj+PDWxrd*ea(%7h`0<(Fw;xw$`|}PB>>Jc@|Eq>V z-6OehHF%@NHi)^p>s;LU0Mo%x5KrPPJ^*Rei%EDsw9+ObRu_?${5W=kvz(pL8X zRdIk(fX|xC%RGOri&+kfh>GSNgz8^U@;I`tH8-zJ2i?7jUyKT^@r*u|zhUdLO)Jxb zT?q?8SG>5MA4=PT2BEO6KWguDmjqUM-0;G*b4~hF9iJ|9a-}-HG>j_nKFEe)Z@XKv|Ic*wqDQ35?``X^ zraiUd2Hac!SkLN6pr(x4Wqu z?e~4y`HobFB-fDg`nP5VU*Vi=_D*v5L38u$1((wXI)o;iNzao#wyAEFdwrWa?GwKA zf0D0Ee0p`?euuox)^%(K57UAiG})h1u#KF7pAXOWuutQb>#leAJ$or^Y5UQ0J3UTk zITZI8Q@Hp+=n_~3neJR?+@I?Vlm;qkA80@3>ewXD4PIz_?*E+-FTG>;nT+a6NR326 z5WZ0lmHNkH?`RUDDr?@?_$n>*HV#L6CJ zD?R!+4KmH%xlAc-vE#z6zYFLJjPJRCQIV-pK6(s7^SfAMBFk13y9|L4!}xh5Xa@ij;o9XUbaIzZjHqC(Xjqt8Ez{}!#(blD{F4sNpqRGBe+hTX!VyV&yP#_L% z*s;fFk256P(|$nEvC-xBztiOTER9UJHyz!UVk@yP0Csj;Hi|$deENO&jR9ypw&Yff ze796(9<>V8HcDj_OK}{iXS4K-duOj-CpY_gVcYK8ddnYeC`;c0Q21TCxtSmnU)h2( z8-D?cMV6aBA<5+x3LB>%DrY;etJnp5A!5 zxokTi#NU2TDi{N8`A@FCG;?4g;GOZmt}o*Nf&HB=F(o?^AnG83zPrb$MhN2%zHmM1 zIe4S*^^Fhv_a*cJ2OHBO`+p+%;Oh@9SPEpu*ESP(o5A5vgW$+@=r`u_TUQ;o2bPe= z`cY-wY@WzI!(FQaFtUT*SJS-d%ctyb{a8PO&?Yd|D9RiuQX1F4M4BV_0-A3px?DjV zN!1bLWX{Lc2obaeZ;#o(y$$`60BlK~;yO`X&2Y{C7mVx-R~=-^FvSrK;)M(rA< z$4@i4Xs|8u^w9_U?quEYol`RtF)OqE-b<|A9N)(a*0R2meR+ymXyQ;8R=?8>la(&f zFR;J>QfdUx8YsYReqGv zM=OIVTD?P{kHP9nWI`;B)c`tkgiRM%H-Q7%DK$PZCA3WHQd_U-E#I7K6 z9hyI*k5w{ZN#Ph}mg3nrVy25sOV7d8ID<8y1%}-}DmqIKfrQ(sxKftxd+FrOOWMV6 z3T(>Y=p1!o{)y4BJr|$8+B189{l<&hpYLwO8T4~8O}$6;u?^u8yBxG`86Tk)9wOd= zjwf8LBc7SV=F-z}2%Kr13`A$VJr@Qa|m01{=N0ri+{ep_;w52*|7EOP0WVe`m$G*7~K`r z=UIw{_0C6%5peIZwNB3_t1BP8Yxr2Z3%8I|??)Q{`Pkp@WhyS@fF`26i*~QI?#w7R zm+mk%fh1?B2$w%MIo&xWsA=*lPiPz-H^c>$pR~Uim*V8m`D5SOU!R*EM*fTJx;K(m zPVkHRUB~A+5LasdpP)Ll((Q}P`BN{0WGko#^S527YSdMjO`idg*#F`RfQ zF@+4yh5$%29*A79FU>*=c4rv!5kk6$K52HTqZB0B8XrgZ$}lT?xg_Qggyl0ctN}e# z)0pVSE)RCR<7<6lRGxd|!@c+nX$(hpBq5_WaN-DLT*p=R)s8}$W^@sp-ki2DP}C!T zzSTQO_vVt076)$WQbl9B!j{eEku!kLwYUbKP-}E(@0*F}qX?>)sZ`|9>)Jhc*n|-v%;7tzU58-Zo=|of55RN~-#bre z`t4d38#460gt%4OqNFWTT-K$orW}yqAkLhxu3fgY_W$K;%;_x3#>;W8LsagKh+ zeoTO%w3CZ}{G3|JWdt1ZKo$D#ph2(-3d>CEXXZReBGAL66j8u5V>nv-R{uK9eu zoez#*fBEa{B_n>$i)J*6HU?4o)dkN&WB?$>MI5>=I-B;;nJ~@vd(8;zz?T|bs*vtl zX6iBF1ENm!rH2QxabxB?(5*>Os}5%0wmxWBA;Yx%PPx>jla#z; z)6>mYAXJ7zm4jMOjr8nm(%{{-+;cwo+N3wWV%sNq{Qk!n6`1JX84Cu~98>m;@7lP8 zK9+1%F>&ZP1m+IX_R(bc;C2Kk;pB(R7-%%k6{7>4HWIJ=DE|{Tb#wU)pfm+3C>V1! zS2;yHBvH5@Y5a>?XLg)^tAGk*sClLw!GmPkqZ{N4#}mwkJmNly8cg#;6fXupw=KP- z(%$7;C{kKoSgpP2?T)Ybt+nn;#dPd?!Ncnf1aXT9@Hm`f5oUeD++omZv^@)N!zpPx zb^6=h!(Y&Ini>06Oj`tVM!~XW;B+U`ci+zWw@RPsL_q__%g96lv&kZC`V79QL`-t^ zb`KZyw)F*?sH6{hZcob(tKPZrS^uo(5_y6uLK(WJ6d>I=w$ixw_p60()z1+UE-%xr zUx;_A6J;V6O(*Vl&6Vlx?Z)d_Aev}+cFsJt5x_3O-g%2rNNtE?+woHa!zmV)1)YoA z62$F#{%lfKJg;Z)DlF%W)!qe_-H5e`d-K=&+! zrg#HtTenGJnh7tu;oIM9Q(>@iq6cx_VF)jV)GtM$P72P@hRQ0o^N)I9u53q#hy!{J zHyZ#Ce-q9p^CF3Vk{bSRKY*;y~=*{1c085IO*Q=MFJBtStJ$Xc(C-t&{ z>+dY2{2H0Q;j5m3;pTVGz#?zVFMuJ zWs5{NEN}a{sa&Ps?naS52#0PavbK~G!0@R8!@G^Mk@Tg~eeJ{cjLSM&su){l2rN#* zWN9svF3}%$&ObWJtJV7PK<9Il`RjVL+sb#%03}XHi_@nCcLBdu3BDjLLEqEm65wWy zC99cd@{Lmu8)`F=Q!DYCh84Gk?s88=**kw1G_E!0hkPO+JQ*uE>SZ#BO%xmUx+9=R zhB$Sx?J>{*XsqI^!9N z2iz_*J)d6uf|H)5$(Sj8fEeHMpv_u_#gY6IX(tEATc!guIv;QQVUS>D>Vu$gNnK|5-I_=4@5Q? zdbO19B@Atr(hIqoC0zQxE?OR!9>@g{Vrq65J^l$jyHW!$#hL(=eG?kMiQrO@lD?Xn zJE4)$MbGQf$Q9CkyRf+sWhywSpi-ik5U=}qn_ls1_&KiI%TeeXOD(>3U7T~#ZBcn^kk3pm7 zf}j&Hxo6U7c+yzWV9W*+F}t;$b&VfS8V^pIx&ws+a-(71_IsdCG=yzIP{${e0xlW1 zHxS%e?hD>*^%lPpy6#B?#FA?5|B19EKX;u8(8Ydq*g|Gx%EPn(vLgkQI54U*QCIIq zTooJ6f%&S*ITsne^MU+kG_y#=s4Qeic+3s~Ui={j2LXv9X1WG33WbtY%ya(yvwO(%q>Y%6QQvqlx)!?1I6mx&SNGvkk$fZ6ueQLSA-k% z+98rPOfNEHzE(v5A!fSONn|#Q!MV(s(Pi*g(ATa2+pV^GV6C?ayoZyCZE|Ba59flY z2fV&y%XAczhA&}UqX4Zw0Y3HDJT6N0=)$RpxXmn`KV!rV87Mm?=nSE}OTojpRGyW1u{`E1C}%5 zV@jjknLYZzhFr7Z=%KvY!^M?H?ErG588Z(AI+V{{#`I96vdj7aEZ0+=6Oe{WnQN1P z*|((XUXUbXh#T}SjTgm=n8^)W=BN&1oi?A&;aGr!3!*bIY3MA2Y*=W!AX1yaU__)- zqC}~dqA#7na^-m*jlD+4V^zEz^UDI=l#Xr)NhUJ3oW!uTn~RmEe${Mu0l|}J)CU^4 z$}utHHK*&*X2~cD{9gH-%fW;KxL-K2Wty|+m(z{oDogO$TEq{ zb5NHJpq=9Yn=>{h2xcMAK*8JoOs-uHW33@FTW$oqnGEubSq*AJEy`JLFw&rYoR~aK zBI3x_U!98L0u*kQs*SG*Z;%1%!u4<7aunJVq_Qru30P-&SA$|qq_bU#;(#WPCymTd-L=2xzF8_uy=L4COO0 zF%sS?KszGz4oP_|sJ<7>6rSCule>4y3A~H`ed?ESgAH8!B+31n( zO!PsKh*=aWJF)GS#Ub75PI`2bI=Xgb&kU&^el)8^ra%W1CO5Xiz^C8p^+n#Yv>=}c zs2ax)HRS4b>?ECobW0laM!&|+tUMrM)t&#=99O~#`45q+3vC^El+;i*YZK16!Z1rTz9@CLn? z6wzhHSZmjY>IAgdqHbYh@UegGg`$ZQ0#f@<(gkH<{-KR4!NT=1vO+T;#AMw zA!b0XT+OVfQ`De%!9yqHIXwrM*v70d^EdmYw_&mbWRNM%Ui) z6)X6Og;AGI>E+Foto%-LML_Nz?Ci#4_bi-T8}QBmsj0yjG1Kr{Y!bW}osDSj->Sn0 zNQ0BcUOaRpOq`iDSOTG)%}hQmbj3d~9@{~zcGK`guu}q~z#9a2l*xz$Edz9_%*nDz z!|yPM8}$C)suk+1D5JAgzdMqe5%$WfaYUN1msA6`XCJoXE1^?~mvJG8)}*{3-*Rca zSE;jAu%2UXjQufr0FA{HPtV*cC_cCl%A7?fLrVIGhi76|w6_@iY&~!``Q~(^Icwm+ zytE5HC(Mt3h|oo~ONzU(am_PT@jW8n{~CMCzkGOfEuZRrbN2W5_mBR!$NPV(f3tu8&QS$0N>j~7|LUL~ zxWpP?z_M>B#p+B5MF4|%dIxFVWmz(8dwJ|!FzBkBhOrjd{_v#_26@^`xm+m^=aV5= zVgm`d{>FFu&-LP>Ga3e+Jwnd*dZ*W^u)&-GuVWRqcf2C7dZkfjcbt!^MZvnq2fx0Y zujub8WW?qrm#z$`RO=)#E!q|HTA1h)PEDyfP)*v9c`)a$*S;X#7z{VqVF&LLMK3Bf zD3}xAvnfcAc^&D3<_&UvHTS<3q8SHdFG3fNjG66T_%85Rq0NI%-#s3;uIwB3INam3 zd*QiucBtn^!E;~h(d(OrJ?c}RYc71l`GRwQJ8ON=<9nyCw)L9}Yb$NO-{Xb4XUnF= z6x@b8>n}guMc&Z)ymIM=E3c2dHx-i%Ttw`F>8hoUosYwpa@tZQSk9%#jSUWM0-n4? zt2R(ZHi$e=3`*zZ_32ygJX>nBSmiE2GqgikB8I{0vpkK3v-`3VRtR#S+k{B29A^lH z@vu=%@p2q{Bb=ri8=n-;h@wNhJB)atyuNz|g#c&*1Pw9*mDvgUr5tD7a0?AxtdUUm z0JnLWE01AV^0SLdlc;NB%PR|cbK2APmQ+ADCc z2*j^E6nCq-c>rr(oHF ziH&z}xTqdvJV)bNw!9sJDBF#J*TK}s6 zuO4v0i>J^ggfRSE1_Grj0mtE6xOgefeM51d%c-p0nVH87p9QvyrZuqYc}CDK^@5kS zY_;39V`|of874-6|F88aoGa{QN&V0jsV}{mb)Y8DAoM9gdf`6rAF76zDDUz*?DSUe zKYOVe)>q*j?r-PgNkdE&P>13Cgvs3SG?t(K{;Ne!G9H*=nEK3{GhKjLoG&0+B+v?RifKy^P)s9K^KnC@RhVC)Q}nQahjwRS zOybXg|4I>hZU@Hw-KL|nA5M7B5&2nKlHxh{gBpXyR!45%CAoIWHC&FLJ@RTJ-mM?R zP~M)#`8BNPm<7?2U&2OH2+ndh!aE695#k|`t)>*vrvWTm*<72a#D%^+j~dy7YJdho zOBvdT_QmwvD2(F5x5+O*qr5v2b+Xd;Sh5O0>DIy;M%)N$E(}sxPn`Ci99%jCA4xD; zPSHhtP12zv&wieU*Orq;ov>x);<%KN{8Bl=PSbN9(+eR76Or*TYM=MG!$8JDmn}h zX`7svup=9qJts``Wi_lt)svdpf`ZP0n)c0B>(DVHu(1oY5{s2CpV29JxVOlq0sFhR#?p!uP6f!B-Hx&XU{*+kleJ^`9Nj{;1 zV|?}sl#2qbtX97|CDxQ7hY9y$(s-Ma?+O02-fpUHHJmm-aHJOG)GA~0`e=lC5#BuqQ z+)VscS(VnQN4@tK9z55)-gac>&toUqn_WQ#Z?W%Jj&Xi(AkCSrNdI+z(e=;< zvJouHa{Bv7ZEAWZ;BN3G8C}n4@9drT^t2+~owuhq)BoPOH-;rMqgG~ayZ(d}Xi5aH zI8=~8htR@1tjw3+{T6&*Tea)jkJBbQTANn-ect4zeEPTWZj~OZO1o+aUVlvV-K+hB zLB-~&1)XlqT&b_|yJhMT)kihU%wL*CtaWMnvgOS9+5+v;p77|K=j5e{-{(e=Mq%;K z^R{te*U!^N%v4W*1{n!5d`|>q=j{N33>~kC9{(JBpZM!mHn+>juilDAyPc<#^XO5P z_3)oWgt`k!CN~+QaBe%!9WzQ?bqzpi1S&d{r6xsZplq9rHSxtaUWrojeqH~(2)R~}{NJkb@uMgF{?^^% zc1N^){3X5lF#5P0?fNFX`wrvIMw^8w3!=@$Z1Gvv2b6J>Z+ztapS9%rBYPWUZudX{9T6 zY_`a*+Lv3Vhi2sR-@eds1(N5av2P1^O{8bOaueIn0GhN2`%B4xQ$QD~&qBpI#~G8> zTO|%G^seIoh3i!4v(g)(GL*73W~fyq zD6i@8Ju-Z-5Y#M0*XE|tGs52j z7i%+r)@rZ54{Xy#F9J|3$kFi!bzcmPEvO2Wf*MvUF7;QeBJO9pp}n@cy1veQ`vTIQ zmdt($H<4m?3k#!Xc2BxjzRIn1sH!AguB;0HFK{V{lH4aG<*RU}Gqrm*^zZrSUi`rZ z%~pVULgJ2T@W6RBlCk7kEo$R0>1;rW&dH6%8GFmvXwo#klBWK`1ss|yjvcY^IIu%d zWkLfre^BjDq8zT2&Li$qm!9^&9UxPSJTy%i zR#MLLvEu6T6D5a&E(42{ps4~s>{jQ1pk37~2*8Y+yFT3Ds`!oZA zTtWe>#&&PrDoga62P<&(+gM7xbpy)z;<0(n0DcMDV0zykA!h6qKcTMrbI_?~yO@O# z+N&diDTlrmIO*++Xzn&80Sz1V4-`uYfwaojhyIOY8q@iw`CZ$<8HDP=;A#0(8dud*hl@9c)=t zl8lhgLK(yLHBl$_(kC;Kp>X|foU186>o-!T zeb(D%>P9MHCpsPaYY^6?cid>$L~wt16MQgPhw@}|E_=&rjNTKI-^b$hX^yU?Ov^DGOJI;LTwaM~GHinikP; zNecAZLXd)Vu%I)iZ6kDP2J?PUAEYIGs|Pd}oVoJ`bU=Wme^+xKYR|iW{hM9HcLR$H zYZI!<2-Na=TN#if!^|nr2lk(GY|f43*C$P@J02-^zo}OPH(FIiL|c{VaY=SNNCX&Y zRh%Op0<6VljtdMH{G|@P?O51~@|VU2D{)CkSze z_7`ol5-@waEaevtdY%a*qRftZ2PQ#w8H}Qa@QaT9b9sl!WfpWbSt5ZNc-;5vxymewDAW)s`nG-tW5y}vP zxAFBR9o#p5@woBye$g~&A_LtKjAO^yN(J5wY1ikYy)02-`uDuXKyEYWq8u=XN5(=1 z&EfXJQjB|Bk48Mzbb zQzfO%P4`9Dwpwts$5lT%w{WiD%;Vmk1q=nGGXlyWLb<~wFEWp)&gwrV#A-&NH5HD< zA(TEoxruw5$-1+WMIPW&gxV8yDX60ymnBdF&Qfxw=UWz@30{}>q#R|6;IA9rTY3RQ z22ep#g1!SP7%BGaz*i~>75pZfq3gOd9Na%KtbbOTih-wVR8@*M((6^++?4|EaGB3I?+@q zkdIt5VO_29k2PSfVDJ@ocPK}Ni^Ex1S0u=ZgLIH{-$FmPP(Xs48rHw~(m zMymY?H5+Yl9;Y!bGz?pa--8f7d*P-$N1QJ{{yaOZ7&>Ie#l7D4Bzc-Dl4_Sj&+XPf zO$JaqWQ1hdwE`vnb3%Qu1FnGoEUxg`;>85&UvSa%E*CXE+YDy{p`WCpBLM6Hnr1Bm z8o&qRHQr=tIyxYz_E#1w1!g+cBm-w)sV_hkk*+F9m}ygd`on)~3X7x7c~$L6UN;#Ay8Vef2LysXsE&*FpN4GXH{*o|R0wBXEl0 zle<}ztVYU!410P#+U;tSZR&X=7*oa~ycoJoRuK6PxO@dZDpB>}avr{S(Th?g-udH; zyAA|T6?F%4C}{fe9@dL|*^@;waDwo3=muf(F_)Hf#H|1@FgUHr5orb0m|rxE-=epkeK*Ff@7H{anZM=In>W#LK&AJL3Uft!!7C<_4tsz zumZzbJ*xjCTXgB=n?)Jk(|ED;SPki){VjaCV!&LA;U|vr+kuP!I(8rf|DCzE&}cYV z@VHDt_~rdWB*RppH@tsFm;-3${M3Gaw_vvsQRmZ`Swk0y#?ub1eVrM}Ah>N%B3Z{! zr_xI-qdSsb$b+iMMlV&hA|D=VaoHaj7|9}91nkBw2(Av?+sH*X=grVirAPe&{Wu!c zfgywz{-WGKIAU;wD#HEN`f~UE!~C7PL~Ss+B7_ECQaw6G2r60Rxfce^`lt<-=2hI} zp7U>p{g*d20q>)F#0B{IVH1`TUs69gnSMNe{A=1^-GYs;ACG@qt!VJyW1TSZea+~} zs574^@*mzfmy9OaWXdg?{mI;31AY=dz_2OjiXGxvSe74TV4S?GpJr}pLXYW~2E+yW z8eXw4CcAo9e100cs^}il$^dVaoV649iX}uHM>ZcaL(V22YY(|6wLlk!tMeQXkZ0Rh zMmfjyuT=@+Ko+33$v!V8p{B643E}D~DKrU^iOJR-Ai6_P!owNpLZVaNkG0iSTj!~U zb{@sduYx)d%mS&6&hMm)_oF8FEa@yGwNjZ`t!OjHK=ZvkFZYH3noo~3`aq*3N;q;a2oD`ESla95G~1biLTixJhqA@v8T6R*CzV+lO}__t3ISisXu4ls7`wy`a@dk*EI!T z4J0Kemm2L*vZ4k&A&S`?t;`H-!Ya=^_vPKiUx|6&?r&YS>+g?WtImXW2}CbK`SM~T z$IfKN%EdfHYMT^8G(F|#`-%ffg4wyGhj zNi$eI6GR~RJ8jroW_w(bgeC=UYi2g)>lZQEp)xT&5%##sOmqA*iQ)*%ULQ!TaKi0J zsfDKEs}q|* zuTfd_%M@GDoa_$k>U|M|Vn%`mnAShjB26K@xcUn;Ku9YfT(?jBT17!Za((E>`GxkW zNo4OA@IDR}x6HWbi7I{p1*z78Dp5MqZ%p z%RJNRgKLvwBRa&o??eW+P^312j>EA#|D$r?>efR7th<1R^FoR_g$T85rW@~9vuFvX zk-Brbne#@nC^m~JLyz}UYkyoZJ zb%b?mm7sx)LNbs_4g3(Cxq0pNa8}*EEBsRt&1<7hZ;v{e7*He)lWVp?KqS(o+tz{5 za-jkm17P@g1+K09PgG&$9<>k148Wn4Hp z)$W>K^{23rD!*WHSX`+@lMRcPpNz6l@pXM|k$^m5kLeP<5`T6x-bAopWxiM`S`;s) zhJie`H+0yWBBsIwxzj#kjq_pK6S-H~wU5WrEnSkS0T4(v61rCJg24r2CuGurRT?3n z!H_%FPkFlq9jOl7%L3(6iY%o$wmSqFH920oS7A6ZFUD_MO7{O~ zsdqw%{U_ggA~q0mVBVsB1kI<3opRRLvV{;Po{Oe%qENQ(aw2~^Qoo;dDyDhU;g5N% zz24M08|())+xS2P(x}^tphzKHD{3Zmx)brwQe97${&#&r`%u_(l=U=B@Kf3^ZyLPa z$Sn@7wOQp{4uGj=mxKu>0X!RK_|Y3VhpwKJS-~eu!Ezw}C!>qC#5O)521QWs9)bQ& zCA=b1yxEuxyWXMX%bsqPFODM%A%{!b7AvhVix8N{;;LIPlX%-WBvY3aKdhmk?(P&2 z%EGH#O5|EFAjjuylRIeHhR8PcFrVJ=Na7Vz#Z#~FGqQUxir_1QZI_w5vKd;_%ZU*| zFlxI3jUSVtq7<**M2bZ?7Xi-VC@)vteAUQJLeLQ6_k5fkeJ42=C);*sA-Rh{DKn$Q zLiCZPg$6y_aGEjDzg;S+9ahGQTBImDCrw_qb#5j&rQb<=*Ld+|cI?I_zkUC=dk`P{ z^%S*?&|~u9aLAi7V)G`aJE2w6BAxF_bdofbTFt_+6gIsFn~sh+0WB2EM?lN&EP>t6 z)Rz5eM6m!dz5^ijA5jyPsWAYhA0CPkFBKN0mz+qCIg(ym7~zg(#-9i#9zl0f^a2Uw zKrv+&z)E2wR-N>3F;gfqE)g-M8pgok+h5cvXzdj!33sNJ{s z5N5WZU}+07?szr^vlwxl886uW$Z2L9hLS0HI$^uSoM2mmvQ;CLW#^o@&G+_dViBOL z1Xf!%GG=gr8S|STaeE8Ag4_I-Uia%yX=;9s;;VI2F@=Ea3Mc~t#3dkvRjB3z92u-3 zY^8G-Ste`x2Hv7{RQ|W#B!|J zX{>7d`>X%Z`=0(GVfn<+D=-N`#R?^@wIrMX7@Bf+29798v1P)d)h*}<+L1DXN&R3& z<+P|%2$cktXxr|=aka+X-F7vx@UsDnXUYOPy0`uHQO&nRyaQ3!x4E5qK@NaW<_9ld zo-B8BDM0km*jnF&vH|ay{*r?v#%;hPcj=;rb9(lEzJ8+o5)LZEFO(_Tm;?m%_#u=K zxlst?D`3zm;?S^hW7zn9?8;8;%96q`8En_zp#GewXo#g1+6nz*GBtf`{go&UW{H+q z+4@DdsD_FXHE`5$ri=)?l1fH>4+Hisqe1_QgHJ~iTevmy(RpQ~ zfgdXjYSEBtnk4S1Fo0qG+Dp3Z$o(9O{_d#Q-S;%V!w$hv$``ZIJ_! zK@0-_x@*LcWZJ~2g<_cTKmx-7S474w`s7^dZbeC+ON(KLcy)7Sz^e*_Y4A^nNR`jh z+7Tc1AT!EFLSfE4tchH)xiIW>p(rX1)Rl_#V=Q;1SyD$Qa+Wd9KUse5WyQAL;n^1f z{6&BcMH)fTgEOwn46E~%qgAN1GT6Vun5AzQvMCSo4C{j1DX{e+&?>%%f$!Hkbz#&4Xe??vbh%?)4ue zCc!4^pFCt`6Z%H$h$OC~_EN|F6LS}U53+GwM(nn2E3kwoyAkmIkFqVxd;YzFKdXc?mVP&5k^)@W(hHEKBL$a0g1|6LclR&yM3r(}J+LZ#4jT3Y34N0TLZ5qy zU7s@m$|jBDxbm6z{#%BxSmcPLae-^z5>Jg(cY;mxiMBT|hwLlhH1iID6?jBYxkQM`iqNl5T6?1CT^Ats z7{h!EHLKbCI$C2z%oaO6NcHhlv<6W@$=8@f8;@S9gs%;+12(>vk~7z;-di?P(x0wY z#N0lp{{q+9dT{TPYv!--Wqby=1RQxq(T5ud0Yro00}pSm-A8=5u`h#>O*Iq(Q;Au+ z8^7dbts8}5<9^s?482&1cA^zHF$>B^2!Dq@9B;=lp`kMb)Pm@goF!(m(~+pfK6#l@ z`ob>v`E{eJ1Nl)}&GX0bo$#eTILhHQaQD4a`jC6d>pjs~1MDI7^=w(7|5>Q9Z_SF4 zelR|rup9U~I3~1SA8kFMr^ouzs`-6m=vRh#lb&~u-|`&YDiI3?G-p7QLK3D$OrFj% z06B6Jg`DLVQGS2uqc!v0=6LjhCl@p#8=il?^phT+BaA!qW2|Vs zw!<=)6}w%RZ+1KIjr3W0xLfFTt3u<=raj}E^KK{eHvWt>%kkf{WzEqo+$Yb}`@a#e zK@|iazMpaYX2Dt|eA}_&;a|LZL;9gQfUgBeTmXa|P@O2P+b$6S39HUz=O=AmQq_P} z!VV`;>`u&@j-sUsFurH=%H_GAGak-gy*u&Ok7;1bfbP%3*EVTTSEp|D-kG#zwO&rf zi7is^)YpVtnmp4UIANV%JP{<2=>=b2X3%-*{@Zan)tr~py8@?W{zM@!~6 zEoCsMw=0z;zti7^w&3C~R8V423u|xeoD?y`9_$Ryy3&koGsC43ws&8wTyC3c!cW-w zF7`9a+-pvwWgcbbzY0mrspl=#v4JpN0qU_o<P_l1W!1E1CwG>(@C{CrpYcl*g5*YdaAoZB_M=O?fqGljJb#+-Eq813=bwwyMASt?N> z-Z4&5qM7t3XTUktWs0E2mY#N`Y#Q5}l!rE1y5DbduUw6-Cl>bHruS?v)3lM`z9>Z& zBr1sx`|&_DMsX*I9;o*6Xme)}%?0rS9#$t&P@th!!26MHWkRhY=2Mm&V;-u;nQ9M7 zK@yoS2%djMIWqYF{I>!PntG}c9lIGTM+XFT^te2K?9}D$d3`~G=2GYJrhUs_bJfk6 zu-N9B7117XyyXT>%%wDUT6${xB075I>c+a)>8a<&k00FFrGMhkrjghahiMl(#Kd!7 zAb;a?-?JY(UVZFr!B~lO-EnO16qh@;8cEedlmzQ1Dfjof{--mdiiy~L;%M}@JtveI zRZ{ZC%;)@dKb{o(lF62|b?Vo6Ay7!7^OZqZ=5dsUcDx7+#_-j&1M7NsIpdD=x({T| zV*&O&#t4GINZX4Leo>@6cz$P3E*TZsA@J4k=$hth>IN$dF#BuImlExS4<8)<_59$O zn}5GPI`h9dlo9vlwt)veNAu75kU-RhE;2{`R1D@^l%dYrUViM{mw$KY61=A}$w&A8ec;;~OE6eprAj&wdRpZ~P;#U9^XHkmeque-6)nPCVx(D-~BzzLED zfQK9SkiGt#4LXx?Pk1u5nK+4ZPdDm8Q?cWYe&~%k*@|3)RGR;R)>F_GT$I9R@b3R+ zeJY&Oz6-wlMi`}EvKyrOR(v})s~%XPe|H{KdwyS(&+CgZl@*IT?w--xu{v88T&nb!F zTrifshaN?E!buOqzJ_|ZjtGKPS7Ox=5%O6YZk{UZdKBM*A-jeG30xnb`x&uF>(@!83O_v)p4xAK&ajV00y=eQs@GD55L|P6WOP=|G8cl|JYd>*UWuHt!VD- zy$r!BU}LF$G^s=im}ZN%mRcC?pOz4p2vKHBoR9u_Y~%g+?cLs9R)B4;Nb`XeD2;3Y zO2v`bCGOa*2_pJ6MD5|a50In%YTWB4*Tf5ogW>Pm<~Jm`>-; z1jmp;j26B~N+*~t*{iNss)g~~J$dqJEH+#Ka+t@O|2O6Du*3<_P6X+Fir4cphZRfsz`I zHvAw%#V}!qOc53nB49_ltK;T!ax_au((Rne3|GK?ZB@sPPlDF(8uqAmz&}lXD0xPC z%o9c@1*;xdgUQDBD{k;77=eL4sM*HmTlaeTHXSH@2n-wxJjg8yyN{x)g?qxb z-_?5FrINR%`iMC4)FVnb2M@Ug2W}0-frgm^-2!{j9)!soWvY!8z~1)cJxMV+`cgQraEv*+n2tq`|yp&_E_UJA_hu&9c4ql zWFUn^)zRuV8`-6!Grjf$Y&iXoIr-c+oGgb z>8{>7POp<{$m`W)^NGLLRxWRNPEjSOSPw4rmE$(NIUq>!dSUR)-P>NAM)W(+P;*Xu z+XG?y5E=0MiN8HCO-0jXC^g!tkb^mnEj}r4e(QSpW2!#BbmhI%@MUiG2?{4(fU&NH zfi08dFW|ABX1H)(_9JpsXEO6mx0o%_syJ!8eBzF|zti!)>&Xf+JvOQg`wn+M->b%Yj9>PsyW1zn9$a|fZ7mR~Th3_v7SV;{y%%KYt3cWXT`_#| zFN%H#MN`P>)oWVoZk|<*vVwMDa+K)0yR)YKje}Ns$dO0H#eXNBE&es>@_{~vkQ!y! zm)PF&mB{liV$aZ|lzVHiTzKO_Q=N5Cl!h>Oz@U!1h_eZ+(C6cnN#24f*PP5?cdEr`xAd~+5@ zoq=h7JbIuUnt^eOQp#-ity$j~mtr7FLSgMIq$x0CNK(bP24P8Nyd*51|HBIa7*y5% z1PqzJoRlZPj9~(qyOS;;P7O*)i@+}v){}|aod7B{uHlnx8EpPbON(SA(IDV36974* zKU0Pf)khYWYDNY@GZi2QuF$b#;`qhG4Shc@;;B=WCygYO#=gz!sOhf3WiH6(mq6ec zf|m4_D50GTh79{~*hD_LLlV$5N(>P=or1{xBBr<})CgzR$a?z9XtR+Y>4QLB`XJFj zYCoVc4QTWrp65~)hCW}|mEv{oVd9rb@0UQ*2S{@isqVpOWCp%Y0u;ZIq*R!49f*5E zrUIgE{yd|OQoUW1XwGfD@Bm&vOn!{nHzmP1zu5X1Cby_61sC8#IQ40g+T75Ca)I}7 zh=JiRQVGXWW|9bwMElo0nh)YNKHMjFLYmiMZ1XWn%#!qszWV+bVdiP!4;V>Pg}%xc znmr7k7Sh32W9HBSvwmw^vcreB4U}Ka0zBw$*tlY z;V`?jgo#%POGYAmDg%KY4XodbY~$O?I31$^Yb^2w!xxYrws?_M{_@C*X+3-eZh%Ti}8>y@9w{+8yeNL-)PQ2NfU6g1pNgDyO z?S{9+AI-l+q!4&G#O6$4-`as!Deg;R8~Zf*AcI?i>50^swcOTcwIb$t`xjW!i-?o3 z`0D@~5Lv8+seU3gc=@UT;Dr>CQ(?{Ay=$JY-aRp8Inc8idbR7Rq__F?p&X)kd;00v zXLUWdwZ}wcMa$+-)|B0^mUvFBnU<&v8SAf3E{~H0hNf3?kQEsi^lW7`#fBjSXt^jW zxWEM?A`?LCn1ThFK002o3fB*iA#b>zAia6jpRefiYef= z2HnT9>R?Nm)ZA|y|PxD9snO_oHTqFkXOluJ58Y-$nc`9U)x8QF?yPfKmV(Z%GnRFRd;*Zq*Mtn7U!Dv_ra1;{L@6m=R$j)xJ?1ju-oIq6V;)m0oP z8xV(!>le#~+4#Iam4`Feewa31^F4JRoVq+NP&1ydsf055n&iN?Q`XF-l0pgsWBGt? zzskpn-Tmkg%+sgu^#FOQ*KL;jqgmFJNDb3puq=gB#PeIs3J-f#a`40%w^ z5CR5NJ`Qw7!7}{HJT}Z%Uxs{Po3CXBK$OBn8PLDehy0YMm4VP^eRGCI3;1a3ct!54 zKZf(s?Sg1@;M0fT*vn}k=cUi5ODH?et&lpD-D96mOAKvephv1pI6MY)A64)q!5Xmz zF2Vup59FM#D*58u8Xq7GeM!j}gc)2;3PcFw2<2tJjibUlWSG=e@~;hL3u`a0kTS*q zlF?l@X9I&hmeW>+?gWxqI;3Io!nOi~T7>wa)LILfU)$|{2q9EB`uT~BQ(JY~fJ9m! zrPjbD5^bW`fZxGQl&c?X#STcxF=dx+B!cr}5Z`q5|M1~ti16ob*CFtN+6Uf;)Q2;k zIu##%r224E(B;@O`vjlQ1TLi|LK+z`wmNM6dj46zeoP3AIfc+-5D*%CbNw^nU-#|Z zw-{p^9U{Tnsn5%%Khrt@=h8;23k9y38&uRzzYAUuz3HIVY&WSVo#qcNC_$T41Bqk9 z=-F;us+hcM+RWnXVhwBBb)NO8+!hM4|Ip>Y1hAeCK&ol$&ujT{y6!AVh7pTxlUJ&3c542Y0q!UO6H;@PF z9z3R=s9C*^8k5*m%DJMc)XM7s&`#RH`T(I0qIx`hfFzC!mPhv+J-us?^%P;FBl1mD z1fW$FaOf{>Vbrg<_)zE|0NI)a+QT6k9m>&%h01V37F1ELVo4g1Kd>`Ba>llcS>u4? z9zUs;fmNC#EzG}r9LeV!v_*N!?0Obz%vtjsqqunjur5Hc_2E3g2d(U{?u*%h61Ph& zvU|gs5W3Kz2J7D_rq(@cQGco?e~E-7Wntgi@C@!a6sH9M>k;v792?DbZ*h5m#-8=z zlR&4>t1i>H$)h&rRbaD*v}f%$M#TUw9e&&cM6kETJ5cnQX)ZVK+V-4)*ns8z(qs$_ zJtuxd|IBp?wC8)o>R!=qz6avJJ5f)=)AIZUKNYtPgwO+5+)fJm4ltKHwve zxTO&>9hw%y1ee)Zc7e?pY0o-sjAf`O5kPnm<*p~$)`5~F^gLitPAHycQUEpxw?6e4 za3(G(^XB)|4vIr307+SOyKk+_U}f4(h&EVj^;qk&a~-Ij4iQY5;y_ft+69sLsN(yl z_lB-#!5IatR2!=3a-t52ioGqMKI-2tBK{=-2j9dUiz^i6fpWiF9TbzBtkLrP#VhmT z5?=_BhYi|`KE6ScGmKz2Xmdy^>XVI-v&h+uGaTjYhoT$LGY(9dWXNXL8an#@UK#T$W)Ot zqXyHn_;D|@L1IY)WeBt$&wx6a+w1TPo5uoIQHoDeZ=j9jPExtA`O+qAGSUdjwE_4G z1WlNsS~w7qX5P?ic_yiYYHgbSqh`9-W->C(UZ?)`}z zWTv{1+U5c60Lr=bLb!qkBWpeLypu-65#Jf2Tj*lBA` z%2j{}Cl|O0!ZKO+Nxiy7)=(1wH*#=y>VYWWp(c-wUK19`WRb)HR}rz+7B~~1;d}Of zy6)g$wv^5SmPsmDdXleN9|bp-xZ%ElrvjtA&1X3M`bqPd10tj2O71^^dx-&(Sqc4)8?h#i?wf|TuR_TV3Oo&6SVLV1bIel*F4 zWDZ_vY=X$2i98q*#if~ASkK+Nw5@eiP`4l}dPkGQueCTH>yLvFsFn*kKn~ryYSXTH z(%%2$P-^EzYm+8#qw9he6v0+X&kPGYIj<>#la>VlcrN_mx6wa|2y*lypmq$OQK{W+T0bHcLRjLz%*W^sdV{jY0OW(^-MB4))XdUX3<&9c!N{KF01^ki*WOkuKzCqmLG=Yv%2pPz<=6sw^kxqjl*ANYFX`gzu-jxIpW%__fBoMps18SF zg<+X&kghsVO*T$_hMI}dM~ujjnf+-Q+JX$Al1y`%YE@K2zw%>DhRpR*#j6&=W6Bv8 z3Q(9XomA|T^eSUKFoEi7MvRV#5%=!&YvBMT#arIp{KTA5RuGgzv7rAYg^y)O`8upX z(3~$+UM-_63S26w07sKbDB})ru|%%BCdy#a;Bt#psD?6~O_Pph^wXf8Y~T^Ct=w=b zG+e@q3K7NzK|~wqwbrmO29>61*85H-Dt$5NiWBR0<8^iKX$nnCxd2#?*krtuj)%Bk ze-&1JQEVyvR`rht5qAoJ@Rw)vHYG-*fX@53&yeo-W~rfNNG)l%KQn9k&-*vaNj)}c z#(v`p@L|CvAVE4|u^%d{dzA#2k!LckqavoML01BH@iavAr~=4dflSThQ_b3^X32zO zVBYdX1E?suCnyspL*ZcHM71n@hDhk{%75vLHu#XMx|Zs^8qNPCH|ZI26`OT_Ie?R? z_v3=#^2PJI@D=r1W$?$@xDd2lm(>X^L_$)aH_yzS3493cm%iH*Jbi=KVq z$j3VKyz_Oxx_4#+BRt0&5#M{Ad*=>v__K!ntd@p~e4j01t{kmQE;ySCM&qU_C{n?o z>XY5%%DHz&y|13to$ow!h$&7FC$-Uj;i4>(0QD00T|G1a;PlE6!AMG4kJz=X22H#LidC7q$fKhmmC#8v^qD(-wQup_3A@Y$k{vA`OC zNBM~NE=4sWw=@LY`EkXdbE>f=xj7QP5(BPX{&dh0ArNxiG)-odS%V(}b`Y%*Q9T&& zOJ@h%x2#IlM?g!sS2p-v0b*R`lomP2--XG06P0P0PoSZ9nT26qZE7#JyceE`b$8hD_`9(OU?QPr51OGm zq(eENXp-9-O#oDzOd$@g@{6f!+X_V;zkjGy>A*8f{5hcUyCJ3X`ePRv>=(0-oejX4 zXH@PotyT)v>}qcnQz@Pvm$s6t{}!;`=qERO@H(Ku@lxA52aXw$(rEGWG6Hz0#aAVR4bFqQK5+s*8N=n#+G z?z-9j@FXl$I-CvwkoE%k=sCIq6i^9=Gopbih|qe9BS)p3KbB9t>ZUdLP%3HQ_F;mT zUzAt^mWSqDN^@#wDVoj&j;jlFV;Wuo1S0KPbjJow zIKZpsc^Ix6bB}?@C)dl%et1<5?2jc=1$b~{tvIG&JLv=bG<{22j{=FIJQYcoSr)R) zZobIfEO@R8-!O4dA+cdML`I7&cvO#(&vxt*P1J^>+ zzk4`owkU}s$`r+Wu^HTE7Q*+-JfToxj%N}x_d<(ZKP(FAJUpG7R3i zsrD#`Eqs&x!sT-!9Oa7flNgMkkt zH)6Fwm}RdWmZ{=#@l?EcG+v~Y&F$0;YrlKjnYICf%=-?)p92O-B!i?d<8k`KrJ?XZ zfTb!O&`FUB8-%z5V80uFUi!@OE`a8`z?-=nm>}+E6fkOM<{jkN4hAIFis67jQ36bY z(Mbr7D&^GKrQ^8E>^Cefde#t2B^}vnJzqSSCnHu$mbAv4|Xx1NVf$+|HuP> z_1UP*M&2lZzl8$d3p$TfM1?zpUrz{~yaU|CImQFU$qHg&c(E-e{0beq4+Y+3izZM- zXsfVDHn(E7f^lt`^TC|i%K!W$f3TnnYSq6}Penv%en(eBiX`O60_)g=x&TtsD^jX> zbSMTaffLKnLEjaUe(h+U$^{$$ue*t{I>f?&B1RNm3Dv?FCT}QSY!su;iKfHC0N|Em zxm<3w8~m`fU#fvB-&Q-otd(lO54;teXMrVL6fc4X;jw}$jBS_vLKO@KBs_xlRFbjK zyx!@iWUSv^uyw4DOKQ;k1(`AjDsavzxGshFxpe|}AWou4eRNaa6?(Y8%Qw!1rqkzW z6mYYmpb-@u7xFjkkQT%GQ)lpp^sGpF;;z{we5>myNm%2YGP{^(JL>ml z3;=reX!=?1m;t2Ta1`{glTTsMmS;NT?IW!l2ACf?Zae_U!%jtT1ygX>RZBZ(Bb@?F z0>Fq@HM#F4hqLEHF*tq9<#-ZLI0hU~*QyMI8{i6m+i|pIDcWsAhl1(Ka~tPZH&P3D z<~RzPx3J%1*ZAIIsxkU1b&6=3u(1?|=Wj$)*%mg=!+1=c)HBp8OvvpU)}>swp(oN_{$GJ_-&L6jqr8!x(X@A2Dcuv@tWzc%;Z;V8kd!>x+!a zS$zr&H)ayiNUCar`3tK~=u<3;R2mLfJKLLkUQ;+>ZQjI?7+8CgkY+xC#-qE!Ln$>5 zJfRNR5%U@3Xk1Ms6BtIX2<|NMUrm*BrzJ7J?|(I#RJtKJr!=k<6;p4f=7jf~vonU9 zEQFki#K2`#65qi3d=wKO2Bg)`P_GACsbZO?5;#mx_dQj=7qH z3~wPe^w~$+ijV*CG-1S_sfg;BALD`xFy=xwvo67)BeK|ysc~49TRuJ%#ZhTSIgu^6ZPlx(>UUIyK(HO= zMfR!V#)uHt&mHe#J#$|Y-^bV+E1d)6R(H-C`iF$5s(Sn2V3cNW50(^z)kohxF~bv* zN|}H3%^>SLapI-FQ{BGU2Aq>bCv^gjh$-VWG5#%d{2~K~dIs9cW)YdbnFT7HhB}{x z6N{`BC3njERwvYtk53j1(@xSG2K_JbGv!}%#dc{{h@JH)GNlXww z_lyQ|sFm`?9|(XkMV825DS)ag0Q%%p!nqT1_d^m-j3hqhj&sp*0oHW(Gn64ku6!Z+ z^8;cWJy9;^yZ{NzSa7Ub6C($S!T>-CjA~ivxfk~?&1Pv#+g}WNpD18(kzTB_DlQbI zb9+bpvU%C@FDf_ZSW6AA;Ao0SN)W|o1>H2yeL_Q5HB%-YP^W%UH73MW$}T>;Wni+e z=0$VY(U=rr@xIk^zv1emyf+B7f{KT$#zs!v;9xod~tOeWPF+&21|QKvWR7 zH3I1uCAg1K127i{lEUNC5UZ2``eBV7I}4xSM>v5qJeo{B z2Ik!AKu-*HjrW%^(ln-T(RD^V@8yHSbKs~t0FUx36%)qw6Nc77}s;x zMNZ)b0B(Gpm%_zsl@XW+zR9*nA)wLW)Cgi>l#jw-kMSU%YupcugtbCW9s6pwPxawL z&?nYVPp*7R;v?3I`2s}?qGth#W=T}hNN)L~f*1*SX!6Q834?gyrj=+&o-SDf~Oo&(eqZBAbme3 z-^~%|0Pyi(tad|ii_?KqAaEr6&Ka}TIH`I=dP~ldiuZAjpR5!;57q3p%AYri-0;2k zN>VlWDE#-9Pk_zy&g<4n@9sWd)vmH{j{ME)F|9qDWd4bXo|RPQu96!_jvjSD;`5gY zA?P`XvyorVM8V-x!%zTE3R74+q?tv=fcA5)?~c_F{U-eVS`VeTEJhnIX@gT@Z#=;W z^4wFAc!zn5LlZjBT=9GCgR&jIQ5=eCR~EK+c<2_|l}K#76zI@*j?#CwqEu8`!GH;O zJY!tO{ywVb_}IfJAUFm~zvxTyj0}6MR>eWx(uR)sj(-KJUvc}|=+#7y^GSC!&yQ1QMX*6*s$dTJthB$oU$?afbYR{Z zo@N$>j?2)jWjAd=3Qe;VBO2yX*V($#ro;-~vI%d=1+Ca}ewP(IuZv&(Y0PADg zlSr=1{Zk9Sgky^ zNU_j}DLe?2^K3vEV8Y_77Y1ZkI2;He9tU-%LliLQYVPyC3jw8Kc&skQ($=Rgl*BEC z2KfJb`DGZUN#O^$BXiiVhpO3EKN{$gaF8eoy8#mshl9UremECX{kE zel2y>Ujv(%1)krG5Np3@qi1e4bB+nqrSLb`N-eS1B>~G`a@!a91w&WF6!pZDs3mX` zsFBIb%dNw}J9Q=Wla=RmI7T!pMRnp>oddY57}>C<8j1-#^6NyA4W8e0U+YcA1d$jnEb>5n|fejh2I(Dz|StVBvT^_sFG<6e~#`~sR z0i4H?G*g7!4q6-6S=BlH3i`Rq58DB#-4$5~R$A4eFO^RR6LQ^qMAMW8>DJ^R@ zH@bUsxi8T;G90z>k)VM}PO1}WUs@cI7@CYFQa04TF>1o(enoL zmd)O}Q_|-9fL^ChrjP{l%;R@PbB!7eqD~{f5_kp#RV9pP-USd}vv=2Gr7_x8#rA1+ zQU>MVh3w#s?Ztah|2=>F@aJc?l2&5BQdTiWDrUN)gzqJgw=wnu&5%if?s!^nFcFKkIRNhr8lkRTm0BuyM}{ltlOztdwPoBoa^Kj6X6=CIuFZY zxtU2HDE#m!)B`1D0Y29B6ELciqr2JMvzf47OvPZO8 zL%AvhWl~&v(u!LW6dlM_tsN6J#y5zPy9HxMiUCx10k=l!Lt|CK*6nLysVhUm4f;Wm zVvS{;8Dh@i=W;ZN(fzjKK68C`w+73BJ-WgvBP7*ckVvf3iKm%n|$kwTRhJGdw9uNxiWD&`I=75Y*FUI-a~>@ z_4oJmOx@p`M5QWhfAh`2qdilxc(^JfBp5E0qtl@|)y_V5zSjI4d|%EC`=Z zH?3&98+V|dCT)A_siM@EEC=UR=SPGqD#iW$r}w2;>=Ur+`;L7642ZbDJ$&I5jSrr> z;wZNNSp6?mO1Ky!pF-;LezPXaUb40_sl8Hk@mgv?QX0o{l#rnVq4KyfB+$0q#;06X zP8r$Ojx|nO$L_63*(ZU-?qk|i;)7x@ZNC=RUNAA`q-C;SEg!kmJm_BWwYb^2uK$Ue zUE0N3{>eyDS*sa@+jKv=hKHn^QQCRvoi6Varx3*|Apxg7HbO0gCi7t?TeToK|9q&Z zeo?lbB98(eCZ2_=!$H+eR^(ApG?8Y4fm-p(^#r9G_k4#kQo~ny>?y34=gdxRvcg#( z^(7&SohBAVkMx z?c!)HqIeU2WSwy30vE@v=ZZ{uWLWB6y{uC>&ER(}(zGmxZ+|z_3Udy^*eXWbC%yBu zQ}8le9w@xF(=YaM2ARCBgj6G>dh{j+1NL-!`UwJcJf_Q~^AwHOI zzhFRU7I5W4L4Q&xxkU&zo-LfUCh1SkRGr2l&9#97HUw4iPqhd|nIM@p3QKhd2)p0t z)eF0P2^NA5PqW=yI1d~zQ1Eg!{jyY(bGSCdTDYzTtQ^S0VZw+ z#2qKCUZ40A=5X^nM4=3P)d7X)5f;Kns$+Odi$7Qbf^w3kgXH78GF7`6(2MabMEE9m z(XM?hp`o8A0y|>2j(oC z@8?5!lO0DFA$qn-UBPrLL_s^&1$YeaSw#DlGbgq^?p z!r>S4aP+H*5ZCU`8*irn%1-jx>@A^OHW1-B?&Ow>YJ~#1MV)7poy-xE0gp2cT7(c8 zsvTm)e^66v^h3YJ7%6>AEg`;S#0Prk&&7U(?r4Z`1W`|RLm@v^svn^fJ(68X&(K{C zK_6cPCG;|~&o>0|9aveb67RrXr+n`6D;qJ)!|alprZSKCFG^Zaqr)El-N4?J=e&E_ znr3Mrh%-qO;b`&sSb!yKN7GeUJnKbm$`L0ie!`%jPvKY)!hvV~p0f;8eUx@TD!l2) zZ>l#(k>Dg>xyhP;O|Ie+}6F*0M+DmKIjvb#V>yCtfEI0~Jj&7EcoT^3%rY+xKu%Kv^G;m0D&|2K%yj3&hV=#&~c=*~{T28#qU`pr72$appOkb{T$N0!!` zx+|6rmPy1+{x~bvPq%sDETGq=)KOj558V@Gr~D3fVP=2q8u7g4M5tGqP*; zv%_{X=q5RJ`?kUAv}TDMLPIuPg2rvJsh7yTlLR}NmGem{w=F3*NW$*^C?}_9KbPD8 z!ZOJlB<2k#<&Bo*jrZhDF6KSo&zqLGI%{%uj(BxG>FQ$H)uo=R%j&th7?k88j4lSe zPRxIol&?>bi4_9xNPzkK^GS92Ys7rsLRA5v`el8&Z{hjLK=s6#{7;*xzv|Z@J_WGk z0-o{$-rfTKR|SH<3Q&@T!ls2HK80e*g%ah3QoV&T8im(_W%#K1ipQ?WmW!|V6o8Wp z)qJjNzq+pb>pE7lNZ+)`z^BM4xyYovi2s;4j~mA7R}oIK*xIz%)~EPraX@8lZBgp08<&3F;0C;Dre*0qWml5RvW^w7vxHX5%JP4e z6-bs}H!UyrDKAYfPmjo!D9nDac(vwNIbE`%&a|Szr=l^rqPe`HrMIH>6}KfmuUMk8 z)3mb7r?NY_vZuVVueb8itI8+8Dw&d1EYqq%pQ_>Hs?qYQ@!qP*S5?n{RZUA)&ze@x z`Bcv%;?BiZFZEV0M;ID2z;7gLR!wUvzE-a%*KC&8ygdgtrq_J>RkQm_Vn_1kp3lu6 zz37k0H-Gou{M#%1>eWqv6#d_?n;>60EQQWfLFetG^Dof_f73ZAsaj#PS`pt`v6Nbg zidw0@+Tf$$VK)@}6}sb#f{bsSB_1pnS!dZP1f$l)SzlAsM+qyUE$G~6CP<;Bu5c8r zzEp4dTLCB4VC}1x>E4i~-{9a_hg+#N$q}-01mmXbO)47LzZwo}Dn`}{iMy5l`BkXX zua>EJOB<-D8H~CF1R7Ap)Uq27uqbASG#1!k!3N_2Ku@U#v+;`-0QFQ}bpr-i2i44t z-WlxzuKWfVk-+vTO-aAeCrNOmT^95UECvTVc@J{7;C3L-73+0a&F|YcrQqe8hWAY1 z=P)fNQ8}nS?Es^80o=Jx=5K&T zi||NFbGVr}oa?+{#107RRv4%rMUu@U%~%sSRB>0B-n_lkYy~`W0APsXu>sRi=vuP>VLhlH<766)M8NVK zrYUYl+j^p=jN*R9nVlL=Zubm>1)2RqcgiPa-xyW+Zxe*WK=fCI)g4=hQ<~Q+gm)vG zFFQ7J3!h$Swn6&AZm4E`08oYr6tb4PFn+JULRF~({BNnf;%ECv4p0KC`fUmHJ*Qzm z5-417-{*q5#V*L{HQMj6o-oG?RVRGOKaIvx)Z>flR(Rdr{LN6_{F2Oex8&;%sfQhE zZk=y4u^|`G@fDpoMyJjUh>zVV!2s~l+w-m~8n6MDTY!A?Tj!}lNH!qQ9Ad)+=}>z0 zS@kl2Hrhksjuo)HyZVnluwjAfe;@8TOUJohXqG4d>S6DDKJ3G%+$TCgeRIX|1;CTr z&8bmBr?->+29hC4SAw>!ju&G~CAwEnhk@^eHKW~RE6wDhPKrjITr#g*s6@Z*hPV{~ zv9%zLU4W-PFtdVNG0|#BYWCFvX8G0|UAQIo1#kofb;rQZkU&S7us8x_kBkKVMS}m{ zlD`h#!$IeMS92r_R2wGx+Wy44ZiBB#DXg2^_mXZfrQGFChkYs^qA(B~`{DK$`XrOF zf0*%&#t0-a&Nw}GBE#U{Amm*Fx&%Apty8be0Grz~_6!iOyAvOFNKQPyxc%VmQMz^^ zND~9RP2z`OfoKeH%Srh-nY(L-o*+ZVad2M()X%(E*9{`M3r13aH(0{l0gyQzXii4j zxq%JIU{eCv?p)uFRKIX5c;Gi+WxNfG%f~H&Jo|t{Id_E#>Jk8;lCxUgZ*;(}A-jns zyA4ef?F=Nt+{oC{LCDD$+L2<68gT|34Hr5uG%aRWuXqVs*)e?K!IEiHAnIPoI0xj9 z;cr0!h!p4v3^1<_%>Cno;sArryi;5?6$ccigM*iawXl$|s#cwI@Xxz~-%*gCWWh}` zT#5}Acm%e>4WU{`CRC;M*Z?FM=!t^_mM+wNEWaM`M`Xd>hKt|e-kqI0!{398RXMmCPhuMFbUe3?Q z-+`&T&pmL^cOv)(rd1NE%mVbx$319^Qw(nVU2CDp38)$0A7dALRc(B?8~GKYEExOurU&;LGU=YE9j0x%wh#futS`x z`AEw!QwB(jz7Tv>Fo6V8!g0ZE00)l+snNT%v5=kHK-XQtglVuW9mw4eZ&KiP7_bQg zq)7sMV}JxKM2dSOp$**m06Ih(kzxRduU9lFAkamj049{Y3p$%^-b1xc$SWT*)Jk~9GdS()Rd3U7Rbr6+;3FiI(_!ij9bPXwe13Hfpd;Z6s7 zlAtf>oJl0P;m^m|_Y}Ai3A#&1e8M3=?h4qF1RuE~i|8QFUBM&<==}!b1ABV`2f+iN z8`FZ{u?Xi~!3CzE-<%-#*trY~wb~UdMQ zz85#gP@2OEylGD8xc<+l76x4HtP=NcgwLmw(eK#D+0Q)w8L+d?Yg76<9 zKX5O9kdS&ELg9sP#RyPB0Z?LEF0Q!W2tJ6VRD98x_G8qd>)I+EgKz9KM6#{IxV1JV&=z)cQBp{3d^MQ;{ zA32}CxT1cb;8TNwkp+lf82G`o;41q=*e>#bgZxDxoW~KO7|3EW?AS|$TL~h9j#wcu zggzrSnEZb1|7Svf6d>v-=Y<|a%dk;~NJKOP`E%FoA3!jWj`%}BRTaPv0H;!R|CCL` z%CUmR8v^}}-^}mISY8vVYz-5@$oSqB1FXuPx6OueQLU3NNnc5%BmD^v~yj8e!t#lpPQ2WbHYA;Q!pS$WGQ+}(4Z10o5#`d%gJ>a8qUdKeBJG+EneO{Ye$WP($LOhYB$sM z9W|Old8;j)7gx2F-um1DJ!n}ZRrRuG`1BsDN7ZI2>W_ltj2zVSv{{eG&0% zVVZz(sLlOe?Y7(R^NqH~*3Fi8`Z=L|W;?(^gXJG%wtU8W{pr~z)&fxZIeqE~;;_}& z`+S3C%$k*9b3?apRDI{|rwCa}P$pm0D!!{p`!|q>NB65jKyEnUoLys5*=SAs+ui{_ zb#;kT5?&DY2@0U57X(x;>gy(@A&;5_Wi%ONqS3fQI8te@0!K?!zfH+c>`|x4xHFVZ(cxzR!1T)Ye?sjCfOXVXIc{XF|2Utajo%5-mrwR5DB= zxJKbhS#YT-oklGgv`G2T)bu1p^+WiG9Qo~+bx8Q?ug0vny4t2{7ZW-YoiL}7IVs#w z`(6r7oDR-S+?5E*iQRorCz!Yuk*StC4H;i#!!{WX**sowf~;df9W-sC(w>+4K;Z4HJ8_mQ1^YaEeO`Ty*9YHC~|*fqcTS=NV-dw8p)$ zWZVb8;trpFFyNo!n-sJ6nfU=i>+Tjaf+?d^m_O#ICNB=CSV9Aclrg~)*4XX)vn6-a zPidT8IG=Z!BD$gBxQebpg;woP_&gShj;7ZTAe*SNe0pV^&hCaun zU*MEO8oG;_aX1N&a3r$CM;Yk`5(=4}c;4Bggye5WZ*(ozo~ zg{47=aFYQso=DiUWS~F*87y8#>3&pQE3oTdZ@b+5!su)9RjX$awh5YZHNxMUjtaDx z<+jY3)fF}eGD0NPf(sd;?#Fbo$_|lr;B!}_;5eRReRHDi2^wS9FAVZ}>1h;JK=5D# z6DsWJ7k)ky9LSqVE7YcsE04|Iy$p>e-8M{DAeX=;vv`nM6dZ!=1@E8ZHhD3?&(p8K zwZi)an%QZW%eZ+P(rAEml#sjypv!!eii>4>Ni702ba-6MloTs3YjbM(e2LaGk$wg= znrB>Rxs>C@%7Onl-Ss9V0+QF9mj9#0=b3u8M6*qY4_B?^jj2?fA8UTIpe1PNCaPiWD*DCLg>bAS|q#hO+ zb$RuUpX!Ree$W4uT8z&`Anb5iHRvVpRQe>r^qa@5#k+miP|h=#C2SOVAPKq2? z?xgOW%fVk)7WAu7P|`Sd-m5M0aQo8BFzi6f)!d^#BZUuLhR(O2e;gI~b7`R~;XETi z)^7Xg;LCk4x8{ynfNB;bMJUYSJ!&u?l*Os?V zjHJw$r^l8pgl-6o9qJ)ieVY<|vvb=1!qUqp3EdB>TPnkTPnNL23aNIuQ^s zwe)^Z9Dn=O?s#k7LCl$o0n2xpnHP6X=|%KAUAyO=oZ2UGoX9e>`dQ^7{yCF;p&50c zF`Sr#lzN)_&iKDyQ<<0cZXLO}b>hF@3nQ0)+@JdE*r=sA%2`162p=i@Z|d#e_x4A$ zqmZ|j_%8i+k2v`8-vQ@x&&l6H9hdjMoILomaP#2z&m+Glj%>c>vM@(L{7jBC^Su@h zYJr0};{g7+O|7Tbcc1)~cv?Qn+*@M`?lF;hIo~T0PzX*FNJHE9i+J{nhW3la_lt9T zq>K9{8~UZX`lSc^(XFKdUAPWVzdVG6*+EX%mP*a#$oS(G{^FE8S*r0Ywc?t-dNBn$ zOS6l`#amlZAPqK4caNn98PJ`yR9RSzJYefNXvdlBwvHdPPakwB9z13+X!FSW=-{C9 zoUKpYpzGe?amWy%3-9!3(8XZL!*=LH;eco8kazshiS!|2@sLl$kZ;$J-{6q{+)%*! zP~hIsNysosWH?B9IM`q~#CAB;bNE!~a9I5C>Ga|7;^Byf;mEGxsKMdrx#2VG!!diq zXCWhGk&$!CBe4b}akeAzo+IZ&M-t*k64OVLibs+gMpC*)E)0&O&W&7LAGx$Qav3s8 z5gDZ_kJ1cA(`-l6Jx4P_N3X<>W~Ps36^~{&jOKKW<_?bL&5d4NAI;wzy#^U85E&~} z9=mQZR%AO?>^W8vI#wD#b|ZbvAk@0Ba*WgLz!IzC75fXXnnYI39TTp!`L}yaG;b{5 zqJQf}f5AiiZF2uRr|~ADBO}YPzvb9n6UTRP{dLO@m>w%dNH2Qw7DHsBBh|5q$4M;S z>TY}vdWYH_@5E4cy1&EQBjVH@Khdo{@wCG6j`Kw8+;~DN4|@qo->;|F_kyL*mPOna~4YL zpYnNj*TK1UZ(_mIoCE=H_6okUu5h9K2VbA-lCSCHj%-i_(%9fHuCWBk=w2gN*Mc9SA!W{@R0^83^QVcMPI zER4w%-^SCkIg~sJnsl4xUG3w;HvPlfma^4^-oFIlYF?K6jEJQRj}AgWfF{2Sl%-JA zlc)-WsW6D4qTG>BZpQ6`We{{`@*VuV{9cS~(xwSggJE0`Yu!I)&re4Rw`E7K!S{6uM<-~-twno{M z`m~$omRc@Yc)8w9_5LtvEo*l|;mjjlWtY467s8-!4i`^w%oh~)S(Y1*r613{ z;is9tX~pokE2iIg3YIx}_q4>hEYavix!xN}F;69`QoUp=vIx zb3kY!wXfb!SB56LXxaVUom~ua4>+#bI_+CclRUN{pR|yrn4;AQC_xp%xZnm!=E3SbfOIpQOx5{t$mam}(ND*^_ zdjLP%0IFGWmJN53+N544HHKx-s+GOwDtQ#jK%=2PNwpy9te}VtUrbNX26`4#Eb>8<ox=@j-G&C_tfe0E#(_&765RD(uCNxX|ELxo^S^zk;pJ~w(q2K7? zmjDta02L(`6~d`g)imCO58a_J7iHgSHA9+=sB+D2Lt6n}8;|9a0LbtO1rw?P^FPfb z%C*-NI0dkNmG&{(Nv)tzfdSMaH98i+RKuxOFR5WK0Ngp52761DO#7EXh8YVOi`&uDx~fWm87E7O=MR#Q~Pt1!Dbbp zpT~u9H-Y5#9r^k~{2;&aQBC5jsNsD=OAN>~8l-MqvZ>-zD)g)uK-SA3Q!()E%SUv@ zr5A}x`?LKgqv_eO z=~tQNHGA`(2`FNfM%8Sss3_#uk_BMq9_4k5JVSk(}+isvV}LErdYWOXH7D9b0h&)h>eq(GJ9ck(M&U#Q7UIF`yf28iM;NsaVyTAYS4m+chF2n|Y zwBaazo&tTCeEvrhNb8i)?C#F~Bw-FS&j0|@>IBe50=yWA5CM#-px-b{^iF zn+aEF)_Bk^Q%G_hr!v8r8snaa9u%kGTm__F;F?caWyhAhex^{fK~X=sWlvw~%xW@9 z!p;HEk!Y~96u4H*i@3%k@P!AYkd3|X^xOF1`ySXRKnl;T1c_Ri0|zf&7uaUUBA z{}fte1GE~17Gp<;69vJ4YU41VUa9aQ9T=tyS~{Ld=@hPA_>_2)Z<7skLLucK z1fY2R$HCxX$IJDntbFV_lFy-oLb`WOWYJ-lJjJ#b|NE4ZZxeG#WY5aKJ4|0w zud@OyICUMgP?f1)W<^|hT4c?h@iI)w>FJ@r z?Ksy5f3!RuJZT*mv585_#cw?L7zzR%3U@84q;p&q`NCA?q(OCE7N?rOfOojzSKPoU$*La9= z6@v0+q&FhHARFo+x`(6vFyWX=5MK6DUP#!ie8b0hE0}VvsQTRoCnF*=@WRa)U_Z`l z8RLs*`N&Qqyoi7xw~#8XFT$+F!dD;90cwE>BhCJZUz|lfjCVp<0hDR`XCZ;bf1Vfa zDZbu^afJi#=qHVV3!xZapgCC0aH95OS@sTP7MqPS>az+6IrOFyo166JQ|{mCEtNrY zbVSzV)yH1X@nKqq-xdx&w%Bv(YN^+%;%dHj`dD+Q_sD4GD~l(yetslXPuC;8)nUQo z)>ZEMeCIRSv1kIj_)NL?Dnr<(zfBK&drQ~pQ(#x9Wgc$GLqU~`GtuZvf7?enS$RQY;V zEjOcGEQ7;f13v-}g4MlK-#q$oc#&x+!QxV<+~CW6u$_Kpt{i&Bk*SAv`Z=G6(u*EC zcmAS11_m=ts?L9}N0U2uh-4Ik%zP78m z-|V(i-ak3=c>S$h-o_2)Lsj_;g@#zQ3tSAD`xQO7c-A$3Ch)lw67&Ie_!%`Gg%vDKZf&3UUTDt(GDPASOKDmXo*ZU7#{3IiTc1AkBpd z5TdiGs4WfCz+V+bPRm{8vIHL4Z9c%&(J|k0VK+QN@!a{F1ieW|hM37V^tNO{tT`OY zH$VXT<}^vuq(k^NJK)yd32~g9rmQZU#dn026kRjhI+}jAuf|?rJDIoh?7~BA&|rCH z`yj;wJdF`5eW;N400WM%nm_a1s||=F!I# zxM$Dp+iNe3S*jGTr3YL<^sK`+q@O50^2wlk2fpZGhcD(1YfQdKB$Q&0nuhg64=Xg zc*eB#<0B(i8<)&wZeA=%uZXJsIvcEaOIqfH;SoP8e4s5EC6@KgI5ts;@55;w%oHLb zq#&o|v$~=7JhyJHj}>GCB)xMNDqy+LvV|$IiDT*>obX{N7xL|Tn^9{NXoi<6&oUTD z&gn!B7tWN}j!DQ3)H{rdTCF!CsW^5S=xoO-NEc62tkOaH*8ym|$y6~`;iIpvgb9u3 z#f;9o7CjtYH=;^=DVdG?NGqfBCFCr{^Uw`7Fz0@@K`d46b7sqb`3GkNkcioS_rOkl zt1&75%R)c$@Y52r(P;RXcv&3dGfA13jB*<3?nVZcInq{4`$(E2C z#f=`t()^s#YF211KTr4t?XsE&4;4YxjBmA-g>VThD>=Yq;;1WDJc1wHtBV=>Tw>EN zBj?yZa2w$kW!uXTv4bFkcA2-SlMbogRfy^C)H%^(hT1l~)hdTsINT;78|V9YNI8O( zPB}b8aX_!`0i+Zoxp08)Q}VYwkEu!gy-knNIVFK^sr#5(migU9joCi>vt5PGRe5-Pv;*tqa0&HDLT|9R9iOVaGI((W z*NBOu*UCy;fm7f$v?mef2f=GfeaMZof~()Q>pI3suW|WvZfylo7lS3evthqm2?6Jd zoCN>;s$e^QxcH^v%dNLw0g(us%JMx`e26*5&+Gf*onx~+1WfyVL=zKnJkkuwSYYM( z?15}PYf7$%=Qve;LB~YWS}c}X&hA5Jte7g?@g7s7q1L72GvIEH!uNZ)GH*?!52eZ# zWYn>MI7G!DRh{`qo-;uNW7Rw5#(SPi>G>xvDM8G?@Jfd2Rj8E@pW0L5nlC~;U1?TTt=<>Bb5mbmn%xA6NREW#R|Hk(2Zoo2_;H+rVJ-46uc$o4a zmX}<0tN=b3gY{^2Opf(c5FCRNQ{Y_6l}m0VmNHe3Xm5h z=76yP!j(D3ArKfDy8R4JB)!y?N6?X>;u_rbS+6&OfA!>Hvj_0O><@7b8ibX*eW(E- z=(hx*r!rJ8_g{^eoK*slQChvy<)85q{)1GD=s}rRNHO)Yh)5=IXxL!LNX;{PLBa?$ zH;}cteZV=e$tC_j9HY>5!>?j3EuBV$t(NnUP|Gx86k=TC0QMxx-fjfU`^kB3z(>~NCj$jK3Q42@Q0#-Ll^-*f z;j;yv3BLGfF){8rqlZP9lv~-#knLJ|y)V3tWZro7b8lOgM?P?VJIQdKLZ*g~e3e_S znm!fqLYXqlcJQ8;{sxM0{b(7!U$CKA=FaVN;``XHveCIx>?+tX%*Ts9Y_h;(Fg5qt z`X)2Lx!Dk_NCAJNa%&9Gu$Sl(>+}0kF`7Q;jo~wLUp{tjjqtLFw7Y*lLG~+MK73D( zoh^uk$ewuidqaRIrqp6m?#7V0$iP-cK;38-T`9jlna8k~p@QY!%kl^jK%Z$Ay2{oc zl3PU!_7(`}{c>zCPMd@U!O{?c}%wPu!^1+LMc@KzbzUWRsQbaWl$v}hCR znO9jrQhgp)33!cSZL45gsqw5Re3fJI4ot!{LnCIVkhU3{7;A8Vx8zp+AO-`d7s+(> zRiWc#qKoozCdMxVnXj>`2q#kg6iRev6uAq7@|&D((KYG2|%zc#@Oy0L4wza z$vzfPWZ-y&!pLT!m!@%|-*jK+F~mSUdrHu)Jj-4an;Y`zt{rp$zZ$(oSv2>c`Bnr|U~vmf5b^b#j2M|9y#?lM{vd|I zvaHI(;aO1pg{-^OkGZD|gCe&Q9|q+N9O^<&%Ei5trJgF|_?ll-)m zCfXK|w+Ng=O-yas6V=Wf*CV4iGLsb9hD_1pWSM^CG(NFebJ*Ull^OO-ViTZ3Bdsrj z&6s7Tgu`M~3|*fG6I^9m11}&jRIfpSUbOP20&I*A(408u5~u``x(RE4C+oP6n}#fF zZbK>Wf;PZW@(~iM;dC4;3rFaXD&~21u+n)zpl42`pptV5V z!8_{-o6MY3?*5QJ^@Tst3G4?tJ2ci+8>>y@IpQev+h7YLyD=PfIxkc3p7uN;#>0i*MR zR;1sKc$?edtX&BL=b?N0O0Xpnh?cpn0<%YJU_*9{1 zFL2~FYj9Q`y|%z$Qh?YDTp+Q~90A(?f}5)hNdzK?WS*{gW0fGQ5QuS=WgXZGU1F-- z1=AmynRBetIF^Ug045XY72TKV{KBy`&u_SxV1FKyDfFxd8nkcHOX%|y#o+0zj0WbO z6q%3BSv)82ZnyxsAiXln(u)K;wF>@ec|G3ZJK7@9vjr|424zmjNw!hNAJ6MW_IcuA z2?;>bLRemvpPMMp?-~G?d)^8!AWeeFEi8|EV1QJ)Cx4@AkAS3*TLufR&$3Xt8&_(i ze-45znF703z zKmG6e)Bh-e9;Xxrk)4F>^IoycGYz6fg3Op8a~xzF&K7&{3`8aUxLcoy^K9}c@HJMZ z6I$by#zI)L^qJGn}7Z51jKOioJW)KaR5?(9l|399hcX0eABh- zAFuhNEbI9g1v5m$FU1t;ZIpWVPXdAjU3*F($$if40wuQ~IQOj{L>4~0SL-amxm1qo zEYV9*1Nnz3p4lKgUtT|d-`H2?Q6V8Hz?Ra1o*t>&B6Gk_0MSVz7=1#gpLM{n^`#tq zFWWhj<;pdo&&W;i0=F6Vlic3|OU>v?Fv%9^J_fF(JK>l3h*BoO8FTJ{FRKSksE6UD zMHu{*;c$Vwq~M9=weWRcoA5HvCH6%n3lYpD%__VUd4|3~u_%7@DcgH8&odQ-R=%^< zk(q_C82F124&OD{r~6cJU#iazf7L&q-#eA+ToK6Zhs(U`PvVI?d}9D0+v+>Za;x@p zmLG>gJ*A3|Z0D+4y<1`WI)0%}T7X(GK2k7Pb^o)kK-;teV-)7RV>?@&-M8i%7-!2O z9SI@03iOM+u_+*rYZ{Y-pR5EsS8Tet!iOZV7z@93>i|;&{>Z>T|7uqrv#`lK+vk+U zb+6S(+z_~X0o=tASP@6E`s9x7`TCLa%?zE}eBhu8telh^=kgpfbUbVY|IBN9>qKH^ zH_g=N{T>EZ7Ux|e2sA*+S1oM4Tp6Puedt`G<+7glEUV~|{Kv~?Jv^>$jBUcOdCJ&b zq@hX7%Pk`L^bsC-!cPDsuRN%0f=P6>j#R(zNEQ1R9 z=E*#Vck{e|1A^(-&9`~xUE;Q@4w4pzGk_IQMY+S>D`mF(3eaK%Q! z!Gl8NSd(6Y@?YjP<5XtaIVnc74dN(X(6S8@Kp!r3;o1RCt8A|dwjlCA(e~yH@uyt0 zEb-l`iy}c>s?aO0FY#9Mg?YBSQ?%zS$LzB7Kz7K-M%0SV9j_B}bJ5SYzn43Y<{g@p z19L#a`t`H6f(r|BH>M0SZ+bG|pn3nDbDU;Jxa?XiP;2}*4?a*YQx=gIc0NR^!0y9f zb{TDxS}=v5BX{q-kM^iy+5XXg-Vb%J9*kN3xB5rV=qa6z1)9?hd@s(&te|ulABY3| z>6O~29mxDE`TgR7tv|NNG$?S)tvuI2rgNtnoW8K3@M^wZ0zZ(+4~-Kznm-^kjOcs{ z7ATp9m-f2n{?hw0B=81T1>(u_Ra%YxliiWtKaQq17x$Oa`Ms-UA)Oj z?PnY6)YXk{n~E*n0nX=r~a*528dPX%JQ#EI0F4#XpW8_Zd7iV4%M(@cjV@0 z0Az#j3y4N(nFwG~DML7a?Ab47a=`QP^8takFyStqA!75#9>;{Gj1b~}{b0c)7^r=J z9Y)M783O-3#Sicm?EV%_UGZ&ITNKyOy`EbQ25s`!4*PlUz1BYat|Mx z7d_l`DBRq7g2wvZbgD^J_SXrWT|PrWT7f<^lja1^I)}lK8xeO6GNzm^J#O_Y3=|v) zgGcw6;6U$s9E0u*-xk0Oz3Q_wrUxpmw*Ip^TTThw9<J<&> zSVbF6$uFhtQZKspTxp88y^SOY;qUB++S?wrV4JAuBTAabsnqb#ZC`!vuXQlrK94mu z+<$s%J@i*)Q-do$d8*H1!p&yG>%P+ULnAYnzEGM9yAkq7Tx#jsa;kjrrgiaTF}3r! z*|5c59X~FcX_8!f>4&AWDui`gdu8if{C%9`xqp6Jt7z{v|I+@oDR#eWN#sk6O_!+& zcI~gbphvg!nBnE?<4*0Vl-kw$U@ywIK*CR6y*0n4xz&GD;E;9Y)Zzy7moGj)_-3H?*rs5Qscb&K&?}4iEO+@OhE) z7JhuR`8rY^EP9#!OE6^CBUDJ%HqDtlln;Kc->B%@Q+@59a@rb<AnVh}r!!7@3k=5mnHmpJ!Cw=pmvAAD4%eQ8FukWkiQU5u-rw9VR~+4u^H`R(!zWK!7`~F)7_#}B11{jz z_*{wfxKmKHI&k{MovC}@DmCe|xX(HBd0@g6^YPP()$W4#e_pOV4*U1#e?>1$E>HIB z?77eY(aG6=cKPjzlx3iXrHBmJf7C=z2q-PO+`&CNm4$ zvWrQ{?h8j!j%vBZen=mX{n|e4s%V}jmEda0Rd?;grrQ&AlAFwuEK9PT%+U?Aa-(mT z3X3w$NdszE)*s`GmBGQ&rV(QnabNjJ2twN*o+NkMa=NNjr;L15N_n)Lv0tB_iE4UwHdXW7&$3t8fHp=6}D{R=|&V53g8m{!n$|#@UXmoa|g+a*=4^obx(WV zI3u$EX;0TV_i`!8MZc9%H;YIYeHqzs`=V3kl`{<=GT(ZrEmpMvlXdPq~ltXZ;-N!cL`CHGit2kK{%U z2Oh3!v2cF3F{~~eczmheH0s?Z9wDOkQB~W+)5)9G#6~oHth(U&)tV8rM-i*8YWH)V z3#+tIZz`~?z8G?7ExZsv0b$klXtoYgJQq=&h!-hc;WT*s{`$4 zxNSdUU*hhdcKk=1>cLx=H>_ld61Kc6#Y~}3l*YJ84(R`}@W-~Y;FBj^ z*%#bcS*J?e>`oN>69=ezfzY00+|kq3Wc$}OW=PAl@{SkJj=iG}7I2t<`dw=5eb74) z@^SY#j;=1TEwFo@7^2_$qnh0B|4*S)=gB!uEnCy;zi>C^AJ;{iz*GLStlw_b))`*# zweM~X?acEdDvyYg$&x!)%|Z@f*|sgqR;7kD;r?E@yN46s=9T1RD6w?94$t=pAqJ`U z23I*SS>ow=WrvT{#O?7{dhMzMHp+lOwQ(J^-uy_p-|GwU_n&h5%-$)#bSw!`ez)(f z>8mbFA*+~_5M0uCCE~l0<@)#l*M?m!XL+mJeKH=Hw$r}!fM&4yRfY1_6r-J&3SIAH z_@=H@3iUh0YvT@aQmvZnG4`j;nN}6a0TCv8C!1}rj}DlTh(Tr%m!3Svtle#RxGJS} z%>G}s-hh_xmx%1A)eW^eMV@P16G6uo{5PC3r~4-jqU%pn469N$dDVoc*^MTA;M+LV zXQ1>9e3HsJERYSsx#I*|fy;D=+}#7i@1~GDuIKjdTC_6rTSnD*xg z%U3{1GfYdJ*`a2szLt@c8pPeJlV*>fbay zKVPu^r~kaLQ2;x8z$dVcQ(()HA#4I=fn^qF9;({BJhHd#wwnQ4E?hx`7WZKfn2Rk_ zxw;>uzIt0QTI<_O*62>~BWmog4F>~|bY_;nI30E@4ulM8U-5Uc&o@}$A{c}GDv?w= z?aOlBeBhA}gIG|}&V7CVNHaQa;iC@Z&IYe&pI3~gOsn@DR1UW<0{JN4a+1Fae?EwH zp|>Tyvs+7mhvD0c?5+gTw5*jt{rQUWAUqH$YV1R{$2$cBroY2{QcYpkb&w39{hp79 z^Ti-F&%ty7SfhMD@`!ET_g{Vhd~%<49RS(Q#D4~21C@|EzUdbATSyTb{N2Jg!N)X? z`?)Y4k=z6{-Tyf4u~rikmM7KbC%bx?BWvQdzW0Ilq)iB$s*5+bbpRII-e_o-@vGD8 z0a}T%{z100lm$OHSG@lEC3T@v%aI9tbIWu}3k4^84OhDL)CtCopTpwgo(nBX9 zV$%QT@gx?NY1GWL>Nf{FPLT?@h_dMjcqJ@Sk3yBeQ?2Eq@kzlj{@-cnZgw&dPK|LZq!!gBOL` zmcQnwA$HxTKI5oa$;yo_?Zww&NIQVm=nMjb(Naz$#B0|OgOd#oGH1tx;XLODwZD95Zt2qeO*knRha}cHJ$}5vqIJZz#1`0mw1>+xzxmm)-l0ird1qZolhUG zMTIW{%w7M2C>Cqgi7gtHATk#$QvQJ8*5$&q%s(Nrnc9vlf-l!BlWVE#1M7@%Yi2^X zh%E?B-m=X>vp`fmVEz^#ESB1)%e4(MoxAxUbFLN_%$8QdH;ch#R4p}2yH^d+SQ;S` zYkpe;xkTuEpeJ(?1n#@*E&q*delLuNwM&u9a<|E3`DBP){WQ=H@DmI19F8bbT7oMa z!s?meIsiOb3A-7OeB}=^Repk;fhw49XDi(KOzq8SND&tvB!#DHz>iFG-WR$%)f}&5 z+a!g#%ZMT>EKLmEL4_7h`Cp`JzX763m5>}RFtACdP>JYff<#oSb}soWH|KPk$KGkk z7Nu4NY}7{KMxyElGy|Kt?-t_CYq;<_D!fh!5_3V8Y*XMOqG$b@Hh{-gKHQO?=IEm} zUkTsBhvwTmfez6Uc6pqmF8j=++`_Nhv4WE5K&@rQ)61jH2sP!qD4Pb@-} z6!eBmiN(6jGs#t4aM~hej!SlzSs!A?MIO{}vx%mXkoA4AW+^%LG!_|3(4b<}0?6Myh1|Hw2`!hVxbUh$F!Rpjp~GFbr6 zWopl|D60~zQzl|owf4d(w0bGT~w+$x#Ml08_rM z(=4{+398kMW*y;E+uwM-P@(FW78(KDH~fSj0&EQ*X&aunj-~}lW6#OB))JVzitHsp z(lzs8Y7a`u-)IzDmR2x#5p>su&&PKE39ezLZr`%=sT3~e5*iOtq=%gBRcTH`Nrh9` zcAmjsROCnLt{*I1{Rk+SMfMMW?cYRFFwOoH>(0w!9e9Xa-)Oc{%}B&6wSY1&VAV=d z69R0bbL?5J?wBg$2aCYKy>9{#)e?)fs!zT(x$jgu-F)4Tve*;N+0GK;X9;P9M{)nG zz2IV2%#7=l?csS@5Kh4zZcOH||(pX|jm_)Nnu(1?~mlh1t87?UFA8Mn!hu1a{ZhPy04m5Rwy z7HCdMYT|0Yk>NVFx;m*yc#L;@r|xGNu9y#Pzl!ZPw8=-bdYHId68Nk@w}yt}fU&`1-TNw} zm`|SM8t{CzoTs303nabZ%ylJYgoa|O>VE?ehiGPVzXiWnQAz>Mv$TwAes~~@96XGC z!_z$}CC)LmMf#{>F6^*4*odpiT$9SgS^I34aQHNg$DB;$g8?8yCMI z!@p;mjY#11macVD5J3NQt62M^ir6N-d=_xVO#)#^hz6-&|J*~7K_PMO56eq(#67FSHT|%bPn_3V>FbQNg0*FeQs*E0Dj-ZweJOx z-38DC754srZTQEv^}2^n2Ol{{(^0yigOxZX3-sM;Z3kcDW#}L!+=z>uQ}@8^`N&H= zg9I8m2uOLu#dg!sH)W7Hl};m%ctwmG{4d7rsO)MJsY-gDZRa*gL%yjT%C=imHjhYC zYA4@BbShm}d6Z?^-VHphewl_pF`v+cU6v8X;$2#pR!60XT(0&jpnMIGaD}h!@1gA| zGby8j?5{(LmD-xZn;|x3o~APg&@5p0z6fwzn3m6YPULZTw-PrhKr!|c6L^hJWsr6i z?us- zkAF%i3}D8R43*5(MQ$gld4xK*#)qz`5hkwNg`%Ek=_XxoPl3Z*WO1K(h`u+JQ5A&n zHCf0jDZE{2yec{I8?y>^{lHhiIqe_z%W~W!n$DO?FPAjkLseYhcCXpCYy4Q& z{*kLCQ^0m+s&N$ZqmrnpEF$v>cC4E*FRnG@@6+Jy+W>tTrrJ(EqzV4vJ1QKrv3vX_ zqF223f>I~Aruz#Y;w~Xd#Wtqqv^p+M_aDn&K!Pn0S=ywDeBsYDYBODR+L@9E9^`H% zd5nqe7NF)?iM4U)!3nrOOHCf)!aKiHhPHzyUlQu}nYPN^w27_CEr<>PvM`6(@s+G( z7Q+|J)Drx&W4AZll2gRUHW@ZSK=cJtW|`QVG_=9rqzW)?S534ouL7x=o90;~;- zaG!Pl;St>-R@TEf-FCjtguoCub)G5kR3m78x}`-YS{J&EyR`njZTj&p91of~k6*h4 zO}cnioqzvy4lm)(URJ^b#)bn5>tX(``*>^cdjFKGy4be#**6Kb19#yUkL)W|{D{;F z^00_>y{`g3g`ufF!r(3%XGcROw<9}fYhR$@p0mMjPVqrIhOMLWFS(xfdBAY?zdm?o z7bHlKs2(A$7=Ajhr)yWQv&gczUm^HXhDS_I_usaCaF?}>*Rq*m@8=Te8Xhm6CASC$ z>z`a1F$;Rb*jU^2`qhNZHeYl?giqSAsc+6I05k*B-}IzCu%z3%p#&8*=pIA6Ip}Q@ zHIdPX)o!e!MMJOr?t5#}iVztI{n^yoSZf_Od*p`CBeM6=eZ}|~2XnKB79W-_**lkW zcd6nWIr>^vUmkmXtIuHNgqc6xY;<0_ew1)JA+N|IDAQhuuu4}|AX)~ep}Nt4uV_8J zIKUlj)ok7)Z`LZV0MGQ5V zgaLj5Yyp}_6POFW0Hs6p=vsOvNIV^lH^t#?OmwLPj1d`cU_dZ7CJ^0ZG9$a%nAtd+nledNex^45YaGH{DVsJ~F~ezVLkMo+ zddxVOU5u91CX|JbjtdKB?E`pj=I2D-R;Zg6#V+2HKKSQqGG8@IuJqr0nzr-z5ThbP0++sn&~wZx`}TU zE41EI=#s!^C+CN!^JB73MjovWJXpm(aoXd^$#pqZjv0+kf+oiC3;u%U&AA;h!uHsc zSEI{rMOVmUPv75OGny)Tm{cX*cl!FC-!5nD?@Z5WN-sLMzp6f=Ly{wEJ5_g~rs;~L zgc@~aRJrnuKQu^VsmBLfF`H2hlmK1+;yi#bo4}Yx3Wtut?yqt zX!ZEq2JNTq4#|qv$LCXorZeLas@lS&paA?uw0NMfr_Kqa@+Y}>zOJ=RgSN@ue?MisVf$0t zV|7&@cU(S__h-^kzblK=gJ;(4e01x^m$!=MzgnS#-%|hHJ^Lo4_**c_LjYDkpJ7L< z1}bNtH1D1~UH1LIcf7iWmGWH)3h;*snM>NF^NKF%&=%u!nFnHhw%(|O9y%5XEj4;v5?VGfAkM6f6N7ZNA-=$BNIz3CCKIQ73 zg`y^k1en8Xq4#ilS@~H5mTD(_V?dVEyO}c~6N`F8bl6Hc_akei#eeh7|BPesyuxu_ zmSQQiHY*pHKz>p+b;l%kfzIQDY_0_~phDOviiiHFRoMREF99YA*%=K!iRK-%%;!4c zg@m-KMMX*WR|$vU5qoE%ILW+j>&b)Hzs8rf)a;qlcwfg{M-U>XfS@iso%}SGfj1Ue z|EJSEKpp28@8BNhy1+Y6{fOCHv^%W@VMBUe z6+d9IGkW%2SVEOx!n@?~H5dVXs;|WQ+^kd8X2{QrcSD}9IusgZS=*#HfkW2AThiLQ zpy9IdYJYBn4mR>aV)CKbJCI6N;dakgPYL_dPTijyG(VgA`5yg39M-8dF!Anriw~rP-nUuTY7=id zf@-kf5aK=}l@$<9ePcb`yoVEU(rJ2CUeMB-zy6VBdcbr5Ofk=689y$K*leAc?pWqF z7D+zkI@as((3)pI(`Njv!nDk_QCfLdtADH6t){)1j+@U3%7izpc9zPzoqm;$6o500 zcR$yUYM=l4pR#D3dO4MK5XClVXZc6%MJ42me$B|rT_Zka3|RlSJRRziv052Q&zJ=> ze7lN{iJK{W<{ifBFgkTig8%-ah+0?x^IoQrzi)%PEUU^hG{B4nDb(wGSDCB$&c^3_ z7<*6-JDK@jTiY5;ZVGd9rX$fcN5Rx42e=bQ&Q#~Q;;4`Q#H3VB<>?@NiNwf4Ruu@9 zExl`EuLW=L%_Hnnuw4ON&;xN`-5jH$kv0eSWO^5_evDw$U2(-F7>v1Ymal(fu-nlI zj!Ee(TwiYwPnic=r5hDk+EqZmUIv<+lll?yFfp#0(DU14GYu6}d^L3AXQGR*@O#uznf(8^({i zMALOq^2pP4Fli1@oSO_npR*?u7sMxzTw?1c{V4JRv5+Tn<8_z$0p#GW@{ks-v>f|M zpScRyBk{&G4G)QubwHjhW@+=(%6__ndWyxDp`KD9X-46v#&xPt!?SX-{qyr0MM-=^ zd$e_@rq0;BN{2fOvBsS2b>YhK>79iXFYbM}xM|%j%t3;hTXvv$7iPEkE(Pn1ilp|S zknbUZms!PA_b%pS^)ij0*%x}}>Y>I{*gjngg`4Y}z{3E@Ej10PO|`O~G;7`R=l!Qw za-8jwd=s^9b$a140+M_uww$pQ-cE(bQ}|La`H=v%<9oRNHzPl4{X1CXOdiH{m~Fj0 zTz*tTbrJCLY*%S;H&HrGe<9DUyX$#S!fbuRJ2v^*^@=*KIr}i*>aWRkRK#q{_Ox6> z<4j}`U#OyJippT5SRscs&mtaM&?A7p{-stvLosaGq_!@EOMbP^7{)I!iUms6=ukcF ze7LWW{``b8tc|r2Kv~6{Dj0eIdMcG`z3Ob90Zvh@qbSDdt}rbJXTk*$%Gsax_m}Hh zp=eo$)$RNLs=xntTYbu(%1P<#uG7E0+l`HOISq4G($M?tuXy+Xx886+efE5@+-6R) zb$2&VUp<@WxX3+uJGLK{*{-ymrxhdnS*YXfF#3!Vb|itVyW)DrBvNFs!flRiP|D*! zE6j)0Y*b$I8N!4V7SYKgw9N`B;*26sNMtzBlWjc6IjP*3hexk(B(zBSQ!r^A+Oih4 zO2K`zeqLsBbQ$Kv-~pMOx4Mobwo`Bs3VczfvvG5m%*INw0TPLN5)F5LBYjgFKZm|h z{BmF6eYP_<54V@jPHpNcah#M8GN~`=b1no(JVMY6JIgRU%BM||Xdr^R^mUbSqMZrjfFjo*VD<5he-!OW{?lC@JRF%3w<}=B zY`*K2EhuKT?4N^I8=5DnPeLl#ggMLreYMlfDRc2nGaT>I(p457%{x7p+PX>9y)(+= z=Q~chd*+0+YE6cWf!-SxajurCHdLoMt7c13(EI@WaBhsY|5O( zJ9Sio|8Kd-d$J3b@`}wYr_Ztk5fg1K!^%QGdEZP28^Jk?kX3!&~MP_hpZo z3@*D*E;=fq*726_OjMta0h4WLd$S1H0`wK> z=#d^#8SA5IzT4YD`kh>;>*Qwf9xln$4b>Q?$LF%1=Od(vTH$=NFPN-!+NzGA0_jN)KFYNj78XC20 ze+FN}{)OI&XB{Yj<|v@uhnx-qHYAQfW0s&&Cu9~Mn(+<&DAOWPZs4>CJtl^Il^Gqf zx5;Y8Z2(%AA0TWOJB(*Qw^UFJ71mh}jQmX8{t7#!XgjjY!9ba}GE4_|ZQE;)5^|&V zaE>P}XvHuI$@Yxh6$P<;(%yDHhCc zTJIp$f-(%<*^T)~!{HWBL=>P=GT{N9<@-nqQl@{<%%s}^-;sr1sl;D1qPZ25icR%( zdB2&PqS~Tp+ZOVVQW-b9@OzpJLn{kb!U*58OasCWt+4DpBqUw7;c_^}DG>=@gl=OV z%+AlbPoo~E7i);iv&nl1SIhLDmVHbnreexJw_`p>mw(GHPgP)+jmiNd#Fh5)Ukl}S z5(gfuB8Uaur6^17EL#kOE-sg$SQYOBp}&}wIu4b(U1b`nLtRzbM^VLIDOCRsG@irX z3xEJSXPxVT*Z@BwOp)niK!Eh6WeR6(s*@ts=7ww{}Gq>R+fJ? zs#t8t-?)cah8z4?J_jl(linzQ zZ1O*>K%b0e$(dOw=4MNKI=ayw7P<$vIM#khA(<9?|1yA4?q3|TAw3!I zsEs8*bie#A8J5DOI0Ai|#VIW}q5C_bNIbe3AX%)nAA+90gM{q{1RJ}+p5B07kU)uD z&Ud<@Bo2D*VOT1_dT5K~AwEo53l07bZR22B-d zx8ttQ`DAsXdnTZQu7vG!of!b?wRE%BO@XdI)b*NEx>OC7;bAVomgjq52mFi!_Wbc5 z0GWZ|t=vmZ=R?B}ww&nNwx8KbvPU;5CO%M6Nm1&Gr=T@R8pY=v4qbK?(cBLAG8Ry&^bEIUnU9Kpk6Qbq`#Te9u&Aq+qQ?}_ z*JAHQKJ1&~&kum$CVN=o0Q&FGuy0h|d<$KrLrAthJjkOh>fDW_45-?sJ?_E{@!mb; zZ1kA8cQ*{S+hkX>J*=6kdpsRkd=2_pxha){UP*_wq@(LAU_UC*e0%tJ4l=u%cjN_d z5u^Jt7PgBIi>g64OQFjECW-&&SjGP%>0JC;`r|)-&e_?uTB}yAbvx_2E;3X?I9nG* zWu-ENmGWIlCh1$g;cVU3MOKpBvJw)Kd#>MYCAkkF2`fn`=8J^PZ@=H~@i_m$Ip^{D ze9n2jU$5tjpwwU9FosdZn9Ipdvmun4i4Z9t_SY}FCIn4&G}B=XxjX#S(64I=-_DIG zg4ZI{35zSpkm<@|YA2qmEHxPgh~M{|-I4V#_X6Ry&bV0{84yb8JsiA2K}Z)y{l?Pm z#isSNB`P{)0`bk^Q}4?ulmBT|@WBl<(+91D@Jo%a$p88rr|%b^SoBNnYdrrxM)_h( z%rUS%v(KLvn_`N_G|tteV{<1o#GIXHPiL(H4dLxFveLm!fBy2dHYRtzP?GzMfV>d-N@cI^#SKUuuqw<7o#%_Il7@{e%wdj6IFv|S=Tv2cQT`quRo z<(=2gn(jx5>+qxsBUENY84+7JB)a~cccZ%A!g$v0wkw`nm4wDt(*i$AYU|=dTIh)8 z!f(Lzl~+|dhj3p^Ex$vZP?|pF5dXnU-znx^9XNeZe)ABAumu&EbP$XhO@CLeomog^=cNZcy2j(7&#`;Aaf@4KyAaBaqvrt!Y}$1>}d{oEh;TCqlXkd;a_w`)vq zrI2iidwZgEe2Nv5oR=-}NwK`?R)0)}#9u zq#fnVeCpTG5VzSbfa(4B)u)>1Zr{80)4>y8cGs<7`mPrrGbNRL2)79dGIOY8#5_D` zp_0&-KR{2k>TDPbM=kDOqCH5p+7S6P{zXIG=z$9no=5g8?(Tk?_oDZ1eSM1k^OS9; zW9OJ-Y53ur#ApZ%hH zQo%im#i`lN9kcs7He0A?TTXF$k+M0t{AXXw=9g^|8ShWL+<)q2p6=x*6SL2EX`3~~ zJfX+*(>D80z1nx`<)Hs7Vf3p{qpx87tG&@$U8KXWNhfYTh#DPysayWad``dloL5GM zDXova-}?Uj4_u6>uZHahvJs!#wyh-_~XF)7XyAD2Y8)! z0b8_o*ZS@BuYW~4yH@m*eFj2Tw8zN@=U*F)*n*GJ&+cmQ2{_wFBup$E};uJS!sJY4TEbef9iD{<2e*8i8dPz{a}jsK_a{gsTjxfO5!T`__J z!(9%Simr_me4HIC9O_#IH&NkPI+zEHMr|3Hr7@q?I_d+y=L+E?8L*#r(4Y1`6n%ei z4jiq;&1rpG+(MIX!LQJn&c&?i@6m2tqdm{S&uztVg}9R~w95`dXQ_A;`$+ls!yh3o z4tYD5_IVy+H5vPXgtQs~{?nUAX=sK>^{))r@eeI1*o1$d9Ejlpl(;}4 zE*OP*==&HNepLUCtDw!pfH^|SQx3(z#SYM!zI3n(#c;+7+)M>+rh&oSI<{dlNumWv z;%~(t4NvOxZ26bDv@d>&yjb14g@`WE@w1Tzh}Qt$@6p!&F}0fe-FON-TZyA;0TT^i zq{3yMeE&y0;wOZ&?gNVZz#lP;qTddz!)I>Ch04DL>tOG>!|wn7VjuYLHr1?ZEC398 zs7a3&Pr`6#Ucr%uih_mkhy%Xl(|?)M#>isI7fX<;z^!>T3VdFuMWuM7|HhBBOY$Yl zvl33#hahbzmC?g+dUJs8>7NdRr`vDraPn;lIOx&?g~eTY~M z2Qam@yh1L{eip{RDJYcW6OGo7gf-<$DhQBdyp0DB{fnnsd5gr!#k=f`E_zQ~IM~(8 zaz1cn^BVrggi9MoUtZt4_|uAOn}6%^b^@JHU1;JMx=-*qsdJmzB8lCS|B|~hZGvU3 zgCP`a_m}|vlfCFy5$wHSu9;ML^YEJG$@?1oySTeN(c>-*Uz6tw*w{RvlGT2bCRv(A z$o=4~+UdnDXY|)Q-`MFi|0n--LC}qCd%xO(qm_!ARjyG@!50S#Lu(w36=5^JMbP20 zx!DQN)^9y&VizbDBvQ^i%NmywiGiOx_o8iK3Zg+9LQ6ah!V7^?NaIm<6tqFb&dq>X zseN55!kxh$k1X*ztLZN;q>CEJY&(slnBB;5A|thFwC-ZE5XfiG@lVCVM08M#Rhlj#rD zEK5%O;+Q(tw_{IgqeqI-;4NDIx#@cX-Y~hVA3+p+qr89n9A@i)qbFv&(79Hs7`Wk{ z$8jp#nkJ+c+hz9fNVt~UQO%=i0m4F0vFucdlX-v>NIBEmAc0F|3+d$2E0ZMlo3tM; zI*5gs5m^t;qxod&oIqk5Ex5w#*d-p>y+Ndu*okWs36!!X$Z3>0esu01@A0C&7S2L{ z)|x5*07NEd?|Gs}bC?43agd{s&v8^ywx}cv1qo=kx@dS`79b@l-wzn46`Uw3JHs6B zCsy&>Y3+dvLuaJyT)g^X%C41BKO%RVJS+v>;%^?Z-oG+2@$RfGdcvOVvqGnYob~j7 z2HTE=s)m>ggWvHm$K!1cWTxV*G|gRzaTT7eZ9Ix&=v1g3k+uySm@KAkD|Tuee$9-M zIn6J25(role4dC`B*u~A?Ulq^Y^5gB1 zt(@Jj_AMx}jKBD1XMDCK#OO(uf7g{alsR4b9{Q%%d_?%#=6)@~uZ6oUJys{g_`SX@ z>rH&U0b-m?<)Prx(yJSm8h5CzXFez~(I2FX6!9AehRE5c77!!(*QW)VNqp>-rjgTv zpk#n>c&(g%M!p@kqTweS4>14aByklda%O~O z`zlQ1K6Jg%=Z={jnG(D+C#NfD(`yTbju7C#3m4UT(0)`{JRO$oc6*0x{$QcDct3r? z(kBmVE_9^$+;zdbHX(R-Hs}TD*-GE#+*tS`1dR(zCBBKqGY8e+%*t()Kr%5`8S3vR z0#9B?k;uygf5nt-(E$LFt86D6t-QN6BHv=U;-2|xMho*HQamdUrS)jb*X)xJ;CI1~ zYCx0gxe|+RxfVV;g|h0KuoO;oJW2p7?wopU+t8|1W-1D!BZ7Qxol-h)xUnqdL+qH%T!Zc?Bt3wqZ%*Dx*i5cMB#@YZwL{!{KaBKQIZ2L8wv7HGY@CQZjq{<%zWv>*ggAG~in>l@{{%8P-V@!(BGZ zQ7_7*J@h)i%C`Pk^x|#0xHH*3?T&=?vKyuGx4J^e;RX*)yb@|t^CDA!&7;Y8WBNej zfkm6Y<>y)Hq<>`@@_!;F^*rs>;S@S+`!^V-DwDeE-cT>)23eb9h3+HTE9j|;)G}YX zd*6;+?l3k@xC|%BQX5moxrR!G4t(_hGbEo(^Eb1FWBcpzMQ8ULSbI;x+E{dKp^e z^oR{^e__Xn(SV|vNJftiqT0Dn@$H^L3aYISQD`0PceuUeA zMOB;HE$TJRGuB{5Tf54j1Qau`R>F*OF7rjxH=L4#lbR&SXT5RWeC%eSuakMxl0R_E zMtj+c+x;M=AM%f#2a|x#$+p zT~}!;)#g(&_(;4RDRcXRd}bYR+GgqWqQmR;s>FbtZFz{Mz&ZURO2VJxH2 z9?61-uD_xLAdz}VZGOcLB#cvZ+$b*o8zpWWFWw`nA^=i% z4QI)~EY+(2BQB?(N7#Yw7E%uxNVS8Sjp7Vl+ zj|NVAvZXj${`CQfK+|JRwRouknV9cwBnEVsie~meG>P%I57m>jICcJS%r~vfa4Sa7})Ccw}{x3d(e<{M#CB#)38ak zlZhS1Gk{AYrI@_{F#JN0+a`am0_<`iUrwtw+!m+vPgBkuu#kD{pg>ZwgkN{RfB$S9 zAr5Cx=^>087*o}laW!s^XqFL!m?JJ0a|*x2U|U6i8O!$M&tl60)&CQhe^jb$0s~pY zpe@_le$YQ@=8irulWR^gF0I;~jf+th&CbE>Z1E(6N4{0^wGG;I*|}8U|-f zf~yCA5Yx5!I36$!1v~>Na8ADXJ#O+iczRrFce^M61AKehUoQe)Tq;_GVtA#Sv=oC| z^G!Sp(X(Y240|OhpPCCS6c86-kX>sPkp%no?oYf3Es}ZcsKUs{Xb?L{|8(7 zS$f#XZ{U=a&AC48L~?3_IJyFf)_z$vHlyqM{^P)r=5rJvG;t6&e+O>Woub)7Qjxeb z*@Ene9ZIjhebLZemAqrE_my@dgE>{=CX_sRecmF>g0%ox(p=8ikk4gQCifPINCl*> zdakI-Q6a&gBWs$FbQ(OVOPxC+xv+_l-U@gDkOXZKr!n=bnHLL2+Ds@dwxs+hg(6*9 z)cC*~4a*Z@y#I~n|tkO34g1P=0`&L7OsGyAMg zw$(_4zy*Ub?96S*PlF55sFb&_oCVn;sgU=H8en;2<@sszF(zB;!+?h-i1=suX>Bg+Y+}9$*pqk_SI^p$W+8J0@(+(!tTt<7gag02OdWIv zn&vzP4d+3_4$$(gb&&kCBZ-(`T1`pHyJ!c2dGRnbt!?|vGmv)xU=s$g zFsY-S{m_RGB>VuCxDcM z4{c8YoDr!zCx79H{bTO4&_k2Fn#|c3s|I6%9c!QA1MK@NdnCEoW=r|KqpaAt#}kM~ zVA)&m+MBj7ZoANm)B1R2D?Xv;@rp@+3uy;D4yBG;%uy|!3s%DnTStb}Q@8UP3vvL= zCL>T~6UfY=I<}eDFPu z9F`nqU1tHf8gGa-E`16vdv^4NZIi@JtcPp^q-?R2`a^1UxD3ybx-t5WO3aTQ^hAPy z=7$i0^xC0K`d0zuyHmsg(L4(_b|D_Lr(du<>EOE>@& zX0zn9K^Ln0)g)meQYKBhEZpduhtM9m?j@6sX+S0d*>;sU=#mlLV3o71%EF8dNZG)f z{Y{W_8|csjDn}*rq5w~Yd~2z6D=G_cm~k+te?^NCp|;O)yqLw1I#FYtb&>^#rB&#o zv093)PU57KOthH|Z<7`pSu@|+*=s#nVyWdd@-7lNSykqHNGh6rYNA#8y$SLFv=#}9 zt=i;X9>xxkmg&6?uxzRVic+FfD*_3_n3bsZ!7AIF&PlA*N!ifR1yY{A+I?K+AneLW z7|imLN^;7oj!JMXDs~S@(1M?;xeMJ=rOV?yq$?!Y3ZzX~vi{BDmj)-&UUxyV^Eh$% z?wjb3Z}xvIa}q<5yXQ+tyOUpoiz`-6x|qB@yJ=KI{n#d1ob=8yKzfwA`*KdnRsgE# zGWDSCy}VhvKvh}ER;SXX59zCc7k}l8P0c>P?NW3~iaxZ}d@%m@QoZ1{ZGrLde(7F4 zacq+DWy^BYwQJhEZT7m!-YVsW>DSwFI>LblNzk>?6cdM(HRp$x*R1@p(Wq^BDPdDZ zt(8oFXG{MC)}MUJXyMR;PCflpkx`%5`(bUxC_7DQvU{~&^6;8bm9Wf!)@C(H+)1Sn z^ijgL?VI!AqF@bSPx*x!qoKMFZ;L(-*OW>9-|QzqW8vkVUGJ3Q4_9{>v)Fs3hWwXL z`qeKPAAAIcJk0GCsWsPxGyFeYwI~rElAfxUYHD6R@GtGuwCcy!#TSkC41vAWq38F? zTAZZkbgAxQsR!xf&n-|j@cwGpN7agwi`bNRPjn`4brOZ4Tj68-a5b9`@z@0xlM9sN z?{{Lx5cG*VvQ8RSap!Ql1X*lYJHyLg-`?`(yH(|QQJH-gG)+|D&Z&t$y#CH4efgi& znZWk7&;0W@pOYS~jCXbacrH$NP9*L^h8D0a9Z~FBlkQDT*_$@0`?&O1_DAYpU;OW{ zm|cRGtB*S3Z9JK8I_12#R8nU%i)NX71W14R zlzWCrO}gNSHaJW-wm=Dh2*#dsXD40irdiAmTb6BRwuHBLa*pu?zA{Ab-fs2%<(cS` znP`_XgV(5^FoKr)BQQkh`FCZ-+IJwEOcZ z%7K5u^H;P-qIBmpl&71a;r$8m*T5Djb+pMdwTIQ5`kwhtqCdr=4i}boe{4R-AHDid z#Z*2nP1ErBreqgMI^#k$5d#7`e>K0&TH{FCiLLNv<02V_)5k#v&Xon>5O27k;ihR~ z&9H4>sJv@4s|~bmTgM_vnKwT?9Fd%1A-SDk<5ke+(J;~^$^3Ek>YTlmw{I(uRP}1{ z%Ze{)+skEYc~`4scyeIZ@Mu@v7R3b#GvR;gHD7e8s^4wjmE&Z`IuPf}vlo>P;3qo)RUnb`7~ zUk$#Du$?ZNL+(vVy|E8B9;xmDKgQi%KFY{>Wx?E#O}Ubohy2Z9@AIdaiUY-3r1*>d(_)tg8H1fB&VhEmf_s>1$D5$B zGd@*A2c~C+=}>AwAJ%R;g>xz*P#cDs%zP;;#+e>HG}d83Ghr2)o>_vhtT6UMTn}tQ(Y^E(&d%QIc^wo};MQcvHrB#Dg zq7;95Pe}a&PJxKFWKvqt2j%LSvqsN7-!kjt#ScF34lkK<&BDmJHFJT_#Xj|XvM0j9 zF=l+_>l@$g{h$mwK3kJ^%z0a&t0fpSPAfdgqto|Ao5c0wpeO?$)_=8zPw|tWtpGK| z0HI`T?px3OXAVsjY>}qHAp$(*9+|fQo?45ulo8{`)%2g}wy3UKoT^l7vzI$fYiAaeq&kdjGho~SXnG& zV!YUzi5;C>bu-+uKo_)lQaG`7AFocKF<<|iHfLbw3*&?xcN*F%qEA1!_dj#=?%K>V zdtY7&`&8Nuo?#LzJ2m3g z1#HCEllje{X>}_M426^j^{{bU5Z;4oU4i8(TBmQ9I-rfFFEXX65n9b7+aXTk;)vaC z=E8mWU`2D><5dG^TMJkLTJTNoz|Cep&Mxcmu|wg!E~XA3hau4S&z_PjG@tWRSRNvh z+H4*(C6Am7{38dAUyg6j5wAMQY3`~cY3q-gX-RwcN-b8O0~gpi0ox8i;MB5%(8MYL zAE2gB^;&xOJdr$)grzLoz2s47#<{Sr^o{x{xLqmPhPLn+%d~I|>=`4uKJGKCk}v6Q zr~wws!Ri`$!M1JZPgVYNLR2Zvx9Jj+??y`H1VQgFSs8&K7~I?xUikF-$Gtw$XK8(T5?B=1-_<>PbR>5C-9n5|Oqtaq zF{NbU9rOB`Jy@q-Q)OaWa=V2Uz;kR_zb#e7Fqy|kp^x9nV+`8neXPjC0RZ7}u1RNu z0Xs6KbQ+@doj=|Vd*xhkYZ|cGFIJjXD+w2BRpdlcJG*ttwl(r3tA-gixJ!IWx`<(W zNP8;?dmrQ00nkQ(dHB+$ppQma6!lx;p$ysw3$zw5heM~IH=~ea-Jyo@qUq;VCVW1c zYAVFcLO*W{$sf4Sr>iXk*S}piyaXZ{W)mG?#kv9>wQsmnv8t)iDJ!$wGqBy}O{>W| zcqR>ZNkv&b#gxny*;?o^z}CwN??n^hcB36YUc(L8x1JI&UrGQtJB%h~0?}d~=qn)` zA3s6c-Gi~*>Sf_{2-tlWJ3mD(i%1@z<)OQ|;$i`(!P+`1iig_CZE5 zV!-_hV0BqL*}Rb`9Gy!b_o1!*oVzilpl-j-1yg{WfbwkJEz zxYqWU_YNCg_@`-P9Y8oEpXcwQDakT+he+e|%-mw|9&8~{)Y?IyVGG+#th^-_>6nw9 z+8`{tCZgA7?6v4X4blaHj+xUThiJ7+gxV>XcfkxLcuSpJ)Gm6y)D`Ok1S*5n?Bv^b zK2hzG445ZyL7Mt{>T{O_^=+~e@-DowTIc?>aTt@0R8T z%VDVA;bUTO+b*+ifRVsuT)7?9hCSlG*gPC!3JYeN)qYEOAsKy??Jaof*OUKaM|_UN zxK-ts1Hl~0+a(w-i%UfSI$gyqNWy7g3&9e9SUvX&;5m_B%uR5Q2r`HskTKUWX9@dv z54^dO?NR3*`~gDI+(_ik|POLUqSmE zt~JcF3jnCTDr6%6YyUF?zXr$NaYnB zCaI^7N5tWI_enA;9YkOz+c1d9<9!K1GnNz{odh?5-SAhJeLk3V2rW? zkrP-Vp8~WkmlC`&fTng~D}b;=F0t`oGJ3<32LkA#7(?arp>Bp6dLnd%Q%sW7bVv`Z zGsA$cNQMXkAYg^3!O5Yd)<0fjg5g#`mM?=r2Gq3{SZ6PF5duKiT`MOEC0!{Xpg0D> zeyN3H(P2@ATWaQ_0K6*S6@}74Dx<=<9GD!qoFaT`2B^9pJi?X)OSnmM!jtB%e=#1` z{*?S+?$G$UM17_utWdh|~MuOLze0P79Q5N8vBZa*Id+~1DL8YZ} zhh;ig(uej(YE0<_I!EOx{LA3vFh!i1!d_p4vf&GqK2T2^v7x5#_Ha>B0hMLB+Ha!W zav}&~6qsp4;s@{0T?)-c0LU9PP3T0@9qTr>H;i_|`Ye^77>Ay>#P2(R4LZkd+{vR7 ztpVte<pjq=B5ov1HbUXF9m;X=NEl?L)H?=%%derN}h z07AYZZjSsfO=LW+Wd2|XO~h759EFXg(~XO*`9a0frNx()!X%!*;#IMFRZQUxTrh^O z<=u}$slp(`u&87Ry%}I!n-vESD=ovgRt&kJlaty+yPp+=Pp-pFyoM**8`^Gd=3puh zeM6yuwA?O=uJt5D2%{WS)f~_ySOwTYZggJMd(^rcJ?!8LakxkdR%a!3Q8fRRs5}4x z@dGX$^!N2?3CJY1OPJKfo7b*tc4a^S2cR9dvQAs=f~uY5{e&24O0MkIxxFm@kke!B z%|x}Ui?rVpjqy!!N?+!}mJ(MqJ6%uX>w%-uM04PwtBWmSkm_6Q?{8b2JIU*N_Q~&C zCWq!#w$Zs11xoJVO+G6%QYvX#)UTYRjQ9>GreK|0j|=n{YT!-N!@1?PMcV{LxsbJi zpbl^?`abv#9(x|Z{kI~NP8yj;JC5T!`|ndxH9-6M;2-=|?)t8>IzhVo9d~LDuw&zK z_E~Qn0(j`?R54FF2X<^7p)xwC1&`cM6jX+FntP8_^IkP-Bok|Z>>3?H@oKTf`=SLV zq=zzPOHV5y_zVx^2M!soSuH6yiJZ{XIwN%YKFBX6#2UTo&Yf0xWIe6lGKk6>t zv$Qy7>|qwo*q1IQt=Reo$SPlM4TFtc$>!#lmT=Yhn9gulH*eQHCsE%&bLbH;@aC z!~h3lLHmkJ(!*c84lgrPeuMYxG!&P&|aIm zwLzm2(XzzBVrj2?AO?jk{VLgmhz)bpduaE>_E4pz_VL*72pkN4U3+o2?XT2cVC!Uz zj%2!qL09a-1B~F4`#%DrVu$72CR;tvMecK;3eoxhJao|N@Ejz5$hP6pvLo%_;w0># z7o`0+5xDlmUZo{KbJnfG2$vL2LOU>)d(snP%;&j8w0JF1!M8rT*nJ|n05*1s?iaML z_U@frhG-W-AW+n~=%@YFM5p6FJtn0FOqwqsMc-9{Eu|%fBtT(nOsHfi}p5ue|3EMG76~T%CrR8GBoo6Ak^*HNSCw z5zp9pTy9gSts;HbMTxZrwbh)t(JXnpGXz)uPtm&`BmsxY2Am8w%fNk2%NKOLTNzaR zC!1dxP?;3M3W0MU5%h^F$mK{w$_{yZ*e-rw+r|$=k+B8Dw7`wOo{a9;x7L#zo`ZP0 zPUlOm8J@Akh{=7ny19D{Gm2T~v6!++t0=WNCLrWKcbmt{_at`bd|AzvQazttDcqw& zZv2Z_x>G8>rpvZD7%}-%TKgZ?17StR>;F4Rtb&T&QfZjWO$Z-b)1(oL9yA6qsLLCY z*(hs4A%RW9>dg=RE2hOU<&82hxW>nq&q2_l@G`MiuMl6h1G1qlG;bl{BrbRYJ*Hq; z4griOEvfQNFcY~5e2`1Y;XfOLZLIFdCH;PGAw?Yi>FQM6p#_gDBO8J-Ri$%OBLbiv z5A`k|!YX8tPlz z_IWv7WM-0BT85{|CE%4!q9ig?G+tcf*(8=yh_GM)c*YC^2#hQlN}POr>OhgJMVL~? zWS(ZpJZVi(8GL1YfWo4(n`BNc?6alt7WqJ_!&z-&8QdbkBwiv^S!}Q0{k0UPmW!0& zw*(9#BO)!y)mW^i;7_B71n(qMN(foQ5|FKIX5KYa2**Ip>rThp57McRR>d+;Z{#d(|;-O4wkP z2?13%tD43oCxa+76vPM4=aJp25oHo+*dkXw@DAl+MHIGjz=Z?|0jOG#M8;9j9r2*Z z2wm+$*U}|yn3jv}4_U1MU5uTDZ-FQ`VEAAqq6A(WD!xDn2GAjCB?6V(RGevBRk7ja zj3G^O2(RRn;WKDfgUt?}!Etnaxcx$Z#j=kV-?cpdc=_|aSs!V$o8DMi{6n6wN?4kX z@>x>F=TN(~Lh%iUt;U&MPWtT;ncT6?u-HjP zU@~|VHUmXujHFfxI4zBKhh%#?$4TOOjix?V_rH*tVRt$@1NsCIdH3Jl1lLX5a_i}ALDB8L|j_lpk1bz1$Kk1aRvsiP<8ATwY zaqy5hu4ozy1Ir$PI1DYER9*p6T6xx)a+Rl`9{l&GIj)G7@0QR{3E(`X7s(4;5R@EK z3k_tX7&O2BSQ89A-o$}jhu5r>ospO*fWk?1g?UN9Goc7;b*43#+j5jwxUpH}_$5+vAo;+#*%H#mD^kiagy9LW z(3wi`PqGGf=Y*zu!Voo+lW!v|Ax9ZHwYC6fU4T(i9DndJ+ZFMY-7^ZN@yz>WXMf&l zPPCTYbETL82VGOwM)dA_DYRLzyk$Udfvrm45<(o)~mhpi6VO->%vm0YM_ERjGs*(r~SpYH|x*aI=)Sa4> zx`$^;NU==YQ{8lHFONR|!b4}JkMzety>I{bc8B_-tL7=x31foDG7lEza2YZrpYFV> z_bicHuBE#T!1kWp;$??;X4jhFCnvr+2HQiH+Ie@a&foKl)_PjLOtMs!Z)=^EmuOOz z(|S3SOGye+e>)zNZ_B7}+!I?z6Wmzr>FrBd#Ba1PMh(gvWVV|PXO`y|IM&j)go;Nk z#5T*G-K#l&?%e3wS=H^V@kglHW7=TtjEjFQjoM?8+U2J|Ll!_6Bb^pDxy?9AzIUNJ zgx@<+zpQcAi?uWVZs?lEA7Yxr&WLHNbmofXl&=Y|mWJ(_gS`lH_;G)0KqAE?H&!Z` z9{u~{-wic8!?yhXu(I^*NvFiMO%i-uhHu>VcQ??8THyKA=`S_IE>!SI5 zFYp55!@fls_*C|9!W(cQ{kCbnTlF9C4d^JkZA=*Pf3CM%L7dgL$IAcg-!BH_yvvci ze`-XE*H@aUAFR)3lx0ZiCHY=rJ{bPRcU6uz-to_P*CGFJN2B+r#jO{gfIm3*5^cnm%LRA%W}9#7TZ(+y^XzW+*qQnl_3=heZ=Py7 zHxv;~nbkG=8n{bW^` zJ{^7<|Fv(QL-xgazgnyIgH)y=>eJ(n?)h3@5I*N`m1&)h2uYKtu^sH2HxIY0zI<+B z%Y_oFy8rH7kkF7xr7tM9DR`$YG^T5uUum zcg@0R;Z@jBIdCOC9RC-G;s~plI%T7da?0?-Ev&D`%AtHiV-W6V>YDy7cWu%xu14^Je#;z*^$IS`M=6IhC~cnC9UgEG zCz}^GnrshF&t5~FyWTqYl=bH5n)ABFMMC^)mN+eaPrG^OFivoLF?ax7z>s71TCDQ zv!b1@>EoJMx9Q%I;zazMIK~}DIptt!*@JY z07Qn8Vh&K?mHpf7|Sbz${)zW)twupCY-ILbi_ol8RwuK+)eD?cYlbK8+TpMUG9!D8V*siAndde6_J zERxpIJ9OcftZThz&}{g6of&uDovB;HvVz|h>s$ymfYBX{1gCaD?c`cvxdB`5q3`sx za#?Vuo05%i8qmd^?lE;h-tkhxE#V?2y7;vA-o3AJiH|>QLh|Lr%BA-rZ@(iX3kkp> z6i#m#93XcezUIJlA~^HpMAAfBI$W@~yxTEkUggpjqB%y!-T`x}8eQTzN!lrE-w1vE zxXQPQbj&%UbM+p~I5d&jm`JzMk{)WA9iS~BG5B4HX~^EBjVph|ya%8Ib{Mcj_cVHPI1}NENwju5Uon*$(xV2WW0B1TFMn#c4+6{Nxk%>1fK`m z=#+^SXcpCqyGL!`S8w0Tq9KZnpWyTA88Ppc?|#5d&bEj8K^Z`p!0c`%G6{)`trV23RFeR% zotjI}Yxz*)zrpXqvjSmfV@%2(l#mP<)(D{E5r@S4PRAb}D_e8u_>gv9PPvwnhb)Fq zS9An#3zbE*VuT_zhPK8`rC8YVmoZk)SY4kGSVaiF(6>hj=Sdj;+R5pPd@3B5jS^<6 z>`50ASlA@$Q=6`S<|U=`l#|XjJB_2bdOHIo$3X#RCU1E2_m)L>KPF@NPN8u;N?4(^ z5^-?^A((}2R4CE2=Qpwn3R)1O(~5)w1k@g3m7|;X0LD-%IqPO5V`uaf!L}MiUaAdj z*8))r%cWf7Z0$lN61)N+)MDgN%)0UW&d{4IquKAmzmQ z6rm|p#JDxlE>L1LwRFp&oYFGy^h69!>bIJs#s7S2<*RVEQ=ZHiXKi`BIpMqGVb-=o zT;{{t0EnK4|>MRK>6!-)T zk355udrbBEq)7F3^wvpYGGgCb&$7atn;S^}T>BO<`_|2igK9Ezh`hSquBjess4Y#& zt@+EVVzCxSDE?nod6vXFKnP&2#jzIz>qg5zX=^KInEt0Q{V1eI^ixXF%>7(Ts@7;V zKuA{E_=AKPA^blaoqJr1|NF=9d)vKsXlu0&>u8i(JuntItMF`2Z4w58-BoRJh{3xN&2EB z-ChOIKtuOR^(&K3of^{+vDM1R>R}3aMv}gKRLAP4Gh_B3uDWoz))+BXu$%$b&T~I&3Yi8e z1sx%U7s^PL^qT$jlJh%3u_8wKIlonLX2s3eN*YS8Fp$#;CVGwM{OX(7YE3kxH(($& zC6LJVGrum)yf+JzYNwb&N2O5yad_yjX^AfL-Ef6t_q8G^YEEGqNhjskLdgJfC5^=A z;iOV1tCo~cM}&%X_%c#*61q&GYTYVJv|dpX+#wwutvD~Jg)?c0&;z7jKyuhpIl;nY ze9YMM=MwgFVx=^5AfI4zOnj~=GT+CDvOd2u((A~lNpCLPpEP;pmN^0SeQdPGj<<>$hGNMFAqA3tzak~65y=t0TKd>`7k96e( zCYq*OA=3?`sct&IbnLnwcl*xUH;m=RZ)L=E-WiP09fRC!8+pS(wp{28p8b-}LF%jLnD+?81hB*yDO zuOZ8{8yofxqwN)NiL7C=zJVtr#U|a`l#gbKbxKT0G%=K*%KfC13V9Gm;a)1fy^lvg z($G5&>Xy}7n5Q7Fzs?vOEjMaVy)|r0WfOZ<=AE-@^J_oymomyPfB(BkB zX>56mVobt^<4AkPAdwWKvcE>kNPJLVL?=z{M&N1c>GW?0l1N27{i8hn^rX{OF>`{X zrfZ8UVS=PPooFGqrVQwMR!dyfv$Asz`SKSw)HDM$g-xFRyg%{i1!bxHI{JJ2u~4!^ zPXP7?eE)IiUCg_RA4AwCu|_EU#LA7xZm#b0b&I+=8?cvd5;l(M*MRz|N$S-!R5Dxl z`L4w(o_-BaH(vVxk&31@QAxT$@~GH6yoR(;N~x6>|II}G3=|+WX-|5S3hKqODg%G5 zyr0YPrUsBY>4f(_*R%ac9O7;jqL-ctZH zG%VZVfV(1pesM2MmlAZa2;*xSU(Ec8@tA&5>KO87dHHvTC0_NRD|SV6_vs?+6Go0? z!|$nEg|bJst59V)BkGBE5=hNXF6OP1u)jLmoIKw5)5C8ek__8qZk2D=nU7+7#(e zpbMiQ*qXMWQyMER2*uhF>}+U14VaCBMRD&jc14lsaP?3W2*Fo5jY=69rHC8&>s_R; zzW>6IRFfHWxTh##4?4X%xiUEYc)C2gwz%EBRgU>f*6bnrQt4fs_#+wPAr=wY#rlzv z;gHVLJMVl|0@hloW~Zg5|6+ak0+3M>LJjY!@l|)}A^JGnr@=LCCIO~9wQZu3LCsBX zYP!^)*?g%JV_%%vq+dh`Q?K>YmY<6Kmtj7Re!kCcW*x@e`4ZJ;yN6l+lx765p&o{H zPEU=cRPIzq(^qU_eJ`E-lhT za>sKc5OXaXs`f7a`toQmzjsVgY(yoiz5RJer!QvZsZ&)OK3shzUd)Cl6+ELc)II9d z`CC(~FYh&)7OVN778%D$=hgCG$#ER$;!)CKy2+Sq;fVbpL1|eGmy#hH8V`dP%XK;(^CC$m>Qz6A47f>9qs={cGMVcbnv`T< zQK$b%1yJ0wAM-tPLc4@qY)e+auQpCNWVG&EJ!cBe|LPyftgq8VM~EVg63UV@BnEvn z^=4rJ)j9xT^qT< zkE@n3PbZ$%#M7x#B%LBByQ2r#m~GXq`VE?egkl{oS5HEgm8=rMmOW-8KVP8Rulspu zk+n*Yb1jRX=+TN_L*=T?nOV3z+BcZnw9UFkn?a0~48$K6L-uSrn5;bgef`xVqcxSb z4dFK)-gH){kl;=}NjznC&MEcHjlN5o2w@&Pv{MG;oMXz@$df|0!uMM9zO*-Ez)8uR zHLZMGla&Z&@SdXP;V=Y1BkWqj#S5#q<_CxA^3aZwDW@H#{qfQ|ggpyJ$W;Kw!ov+K z9;d59jXkrf1x6zP0%1U_KE7N1eEdvPj2AViQh8YCy42q(_dt1DZygje5(z)-8L{W+ zoa5iZOi3nS;?k09d}fNjGvn7YDQ1VHm1vQmvJYEH*y{FEQ|MTgo_6st4chu7BL3aW z$U`rmRn3^o!360(j*zGp!x1h=m%kitir&Omhv71r(AHiWI#@OH58{@`iOA3@B~H6q zzG`>c(M#4k*xy3QQx`VesICvhZD9^>ySU@l@Wm~+RzZl4G*cwShEBvO1*B^74YFcJ zQx_;U8P1CInAo>AJhR9;C<$#$R-=BGa`h|RZaKDH+WQyFMuvm8Y0NJ^sg#nw{1?ED zhmPoI3e+}>l6dX9oL#6CSPs+~jpotxQn>;H+H-|7T5h=1EYKg-&ePj1Dnt%ohI1~m)sPY~@Fcij)wT~!uhi7<0BMcOK)jsY97 z7hWgp*orm4i|*C}YVF;nt;+X#%Zh$A!HtGVJvf`!lhg;h2F)xeIyF+n=j&osHTyee zX=3pbF9uZ)0<424^av2~9{N5J4^yraM?&6)h>8oQx|0DFAEx`oc1e>qrc$v(x$F+Y9 zuI=spFz6VWwt_3KtQ0rQ?SVGi^Ih!g3*roxH?>1xjhsrSc+HX#(^i6%8_PC}0HN8-LY+QHX`342TlF3us;e6-KZR;nm20}!U zHZ}FVQy*P+dZ*~8NZZco>{QLjKQFq=@4Wso$hnLCTXAv2t=Z#Y>~8C~g)}wn#Ig`w z9m@<=g3fY!BLK;T^IwsddFQyCIk4HvmVFm2sNhCEJ!W#LD13Ls(C1$PvV@mc&)=EZ z>hp8o_RCv1RjCmpPP@CTx%9d0dmFfY=aV1YD|FDz-G77o^oAA=KpcYYG)<2Ux7LnQ zBD?^^R?|JCMq)=Q!ixh}Bq7-6_nbeLzebind)~g)x}YtlAmb_Ul#d{8gL_KhR>vZp z*6#gyEeCE>WE9C&%PZ_Z&;9$HJ9M5L%b`XQEYVV)`WV0j;2{bieh3~Wj#_zdxBY>< zn(x+2`2b4Fi=%8muc^7Hpu->a!s7@_7)S6?(}of~Rn_`y9pMgm83pr|2u$+GO0=Wv_^8X#+o z5Up$=$s4>|`>@~-hy9S*o+G!aZT5v@>Z z8R48`fFBngbOfG3+?kuPxL-?i?=<$+ifN-=k>AW3k?hsf20>szn6g zMMEUC9-`BZxOV9w{u-4jda>W@8Ky;yCHt3`4-$NYJRmR~s?BZe>_l)0*& zNB~tz_u(Ady&vIyLW1}v;K4v7k>Rl%1d4OQXe##82Z$ek}ov9?Ei& zAb~o(T{wKq6Zt{h`07KWhV;0f0?-f@tM)FMO4VVbw@wOaC;?4rnw+8X>VKzh&zuYOn;6BF5YiVOy1; zrDDB{lrv*`YG&5{*~`Kgc6HaQp#UZHCRRIPNbLm|KPAF{5EBmm)|i#zXB7Bpl^k0N zh)Qq=47FwrK&%3?FTqSQak~fzKMC9iKrlo=A{Y0B92PA?h>pUX7bWP&%JvVU5KT^$ ziz+&caPuPvmoA38Dq)i%yg&k=58y{Q&|YQxzXXlX3j7x?{v#WM5^FI(A<`(ACu003 z0DoGdrpet9B2^n9<3Ez|!%U1#w(+KU*u;?PZW@1n0+x~C8x**Il(;uy9FGQSDF8GR zaaMtQBgMS|Fgi*g{}7PN#Nh^TFUe{|CE%e%P!(u}68BnyyJZIsx;GCg@waZ_?K_&= zO5va{E?TnBjqS}T?@AQd+eQtU+z%!UKAlp;Q&O=b?TxSL{2_3MW2=^V~(uRj0? z#Q0g@=7HO-f5mvm?f4VTH$Rb4F$DPHBX&>sNkY~yfX0U0Beo(b}o93a3$kr$f)1VAu|HxD~0rp zLRw1$HJOmV1pQVig$>|z$lyO4)rJ+gPNM;0joxVm4yQiwiY#*@z*DB>6M)7o3^*f% zp91a{a?J1#@c(%mi+2SarI~>VjXQ+eK>rC zpfN5&y2UTT*OB$nLqI6`06P4XmjtnwgP$T}2vUf&yDYRBnx9r1QAVHuCF<{)_+c_i1#+Y-%?t{(0*16>C2A_KDO-wELCrlmaI{p_ zvD^6EfgA!z%!jWhm+Fde|FGr5eQg?K%;R`4UJPF$0ceIQ>g`CaYPv2ty;*?_4pGZx zgE2k8-R*Dz1$TIeuA_46|oFTd2mECK9oF5zY|Ha;DgAHNa2IAF3c(ES`UG?KY; zjdWj`m-c$tO@XKZ@A#nZ!!U6O2$43~(=Z>EK^KhRgXAlCDbL>wju8V!GGp&?RlUG3 zpXd*iAd;2p|8j5|V((Bgd`BRB@6i1M@mq>QeO7_UG0xT9NHJvgZ34N=&l)3tLN6aj=}Sl8ZlX#f5ni8 z5{@N6VU8eEYU1!5JXZrrtx#0*0mz|_0p)zM}TD7Eq#__Ax60P zVZz}E$vG`a@11oIcu!Vt#@^QC!E0ARQ<}JsO0=dFc#D89RU(pr;}fbXy{$e4;I%3A zfH#2Voca_OM^z#`rO%e!`4}nEz7%#ZYDjHFtl#T}$x!XIERYk;`s2(fJJacmrz-+P zW(mqSY%b2c1(*Fr>b?aMkmaukKRUCT@f_qZ@FV9D&hRxT)1NPui{3)i^PO6q41uwx=-ET zMJ2=qX6xztcHs!qlZ5N%p6qhMMT>!W4uqzIe<_Ga%97PUF^U;$RZgH@xJGN1QUKh6 z56y9JlKnW3KZx-KV!%%c`)>wE;LP!9zRAo#FNRje<$V3wA9xv2ZU@)pUO`V9;?IhK zAPVA|19C6HpcYH`i@;mVf9c(CqMoa?VN9GM3itMI{=JL`JC^mD5u72KiEBh_S@iup zx0z8H@un@jk-&p3+oEm768EmIEJA5AE)pK?nE=<4MwCY5a zb>R<;W*#(TW4;ajYv@V4!oF|(7sdbs;;=O$7c5LJr-D4|{5ut3~EQg2R0*m=-4ul57lZ>zD zPM$QQnHwIl;7ECUbB90-nPlJRrr#l@tMxFnv;DL}+-Ci>*G6Xh>&9s}U+PG1!+O~* zz|_6uix=oPS_fy=PDP4;kD*+mtDVYy9(G&~S6xXn-Li=GWxOElxAJC&PRX)SujX9XxV!GaKe#xw*4eJ92Zo zZLq5U4JDPG zW&C5(1?sraUP!r&G;F-mpTZlwQ&y@k6epvCE@<;5w=01=1YlIC;nqar2P@%KmXr2X+NIuLh; zwo16tV3-{Ml)_Wdk#Qb z-9#Xc-^Vqddg!z``E-2!`|I8RjVZQ!kDOerB)8g)_hbfTg)E$4yHiRYWg#~5NxJ~Z zf=th8GvpJ}x$qBZSI9FDc>lh&ruqb|J@K?5-My-$^Ztw@hk<%&P<5mAj#P9YU>j_{ z-+F~>Wm@6tM!JSre8bHkyd-sQgn;~U^THe%bs%Je1H|ZbJO`O+9EhW7s&xt$98gqh z()YFurcB?JGj%oH-!VVDB7M%$17K*^DZ{X!X+}hK_^@uU`~Gv0XYJEAhOGY;aRVW% zkKw{T8A$*b2|(9o)vJVtzK5&D4F^J{)OdhCIP%e5Amm7Hl1 zJX6r9eykvI;eE_q<18oAeK=ef)c{#j>6i#M_kx)$ICVKgTY5V#FzdRV8)-ko;HezEoqRP_$!L#82} zKy(1&xF)ePZGPA*Xjv0YXR-;+zy~aAsba~yz7j;cO6n22?oq+}iC$K>-paeh-YM)JN45)r*ltED zef}ZrLCeI_M6-vCORG-qUwA)HPet2vOP2f5#k$cCJ9$>yFI0U;1VVJLHA9sEz?URS16L{@+f4RYCTmW3#8#{D2jXP%l6J@`2moMY`Zn*W zEe+PjscE-wjxP6XY}BJh;_L%)Uag z1l3qFmD(eNB?kTp%2?uNx_f%>QZp@mGMA{Gu@M_szCz`&x4i;ZZs#z%!;!ll?;kws zg#@3ql$3675`R4375irT{ruyHTIB}yQov`5M?6aFIaa@}ud;gALp|X)b8PBUC|Ejl zb@TT2d+Qwv{r}TZhR^Ok7w4okal0kS_Qw+axM{kT*TY5I<@eM6t!axI<-NjT^7;Z# zlS6KJ-TUv-7Wcu}uTEOtSI~*yyXuXfRypIZ@9W$(9C-TcPV2sRUZ;1_LC^o}KQ7$G zCT_Faw?`2RPQBXjx1jm*>AkS*KXDm|0>$~p?fp2yso zSaR&nf5B}Fj||`bgjH=ix9bb%%lX7tBTIs2-{dTOZccQeDVKfgsmfb+%xBN_%{8yy z{oNbk>%OEB_I#7i%+i&giP}I7)~3-XAfrg`3tPq)rV(Lx^Z0MgD@@x_|Ibz61?d(H+p!&71f1`TF_fI@~Dvw=P3jHNYK z5R!JQ!?$L>-PZH&y2|F-syhd95cUl>*=0+rKw0zH3BHJLrsCH{(5Vi7fAXsfIoj~l zF5OU?Zzy(ogWR*DtI!v=VzO)+-Ma2;SKxH_vk1Chq#uvt&M0KePk61dC=Y7z^=gyZ zxB30^im}!P@@g!b4)%|ayhsk>IudRa_VIVy+;AMB2DtfGJ@A*XdhBxjy^H(>CrT1* zq12jy^|_u)M))6Sz}YTpFNblBd$#kb_ov0?2AhM}v>LzkmhO<2vUBZx!h~OD#l7B~ z!(dk6)O_jFzT3%e{v*Ud#U?(foo`6slUXP&qw;N8{zh57+l_?wef+&mJi?*CvRsF= zzYn=hHrw^}?M^LUmtyp(9<&njocnlJjuRwn%ZnPiy(@ak3WM)Aorzg%*72?P8X*vB zS$VP?q=-Ps3}(jUU1#0T%?f_v6;vJCU;pG@%%=W`EI;?MRlL6YlfTc9xI8@-{!rza zwBgm(bfv`yZO;up>kx7~dDZz`pFMs(7Ye)niPN^?fEtqGy%H#nRebrdUvXhiiCf6s zmgct52dr<@8=)&AxAApY#fk0EVq7DXD0I0_Ue)T>f43#{7AEw((LhSu%8CL|#mkJb z0f{J{Z+WQ1@812~fCurbFUtqc4G(Pp)=4I-Cn_KP#@mu_Pu?4^>d@J zhMb4TUwg?9uO@SOj}Sa!9#1o)I6+vf!{Ptf)qiNL#jfAos1=ygdesFpYbHA|1hWy~m^qRlgO&jvhm}CG}q}8lymjrI{ zt1SMn)W$1)kJ1Mi4GU{97l+C)OhYNpz8chJL+h&tS<>S5%ppsrWy!ct(cJ3K(;?W+ z;daN3`KZOQCf^JS*}ka?pJVcc`^yNN+`i#Tzl{6i<&0B@7j7 zvOy9DBq*SQIPit*lV);6e`tjBp9qbzaDzNvR9*y;#nU122#Vr3GEb+Gr}ZSFS@GmE zVy)MmwQpoYB z7&#M_=&l*;4vXIWOfLhxn8l-@;8rZYnGLLs9l5v=wei&R{rTrc9r&g!7^Ky&7AxMn zD6tM2j_Rz4&UB2~=7?SKtS;E#K1m4LxtMRjy_m6xN>~w7a3|(+P>d=0-t}FV&MFzZ z(t30(V+tKv0%O#QH!%p9Ipr4UXwbMpC#J+=vRUi>blP$s2{H#{z*@I`ck2Lks7VmvJ zdE@8FuBGNKUv2ufKge4DJkIseZ*Rk|vr8vx%aB8cdJ*;DX5bMGc*^GPo##i}$2~K) zGkbzHyF&1MdHT+u()J^-cCB8Go+&%i^Qz-NPaTwjrH$3tWZ9i}aYCEdXVYGud3Vw_ znSFPYKZ{w>rY+aCzX3qJY`PLVd@$&Hc6Tf(7Y`(h!u~AeK zo_p=tseg`Uu5Z+bE#bZ~QeIAb7;@-MRGE&@fNa_*sk17%hIeH z{zP-mf=`oJo^sHR^p6RW@8)c_E$5^JjeY)7 z9*kBbG;6Om9s#dk6McPi^4qf{hzyS;tJy9$GTW1S1U4e9P|I5YLE%@QSWF@Z6i%1nh5O~Q2Bpd>3U@2li!%VK-oO5JzX?bS<2la1|T z-*)qtZ~&x`=QCfL!A;#6W*cl`HUq**8DMnAKx{R%PQleyPTthv+HeErEm0e*k%FTo z5fnax{cO`7u=Hqz>cP4EAYta+D;_G&3I%uDJg&0|ra$tE#C~BZ+42u@WHJ+`RD&6G?;_P!p)zt+Sm{jRO9G z$V`vC4HpI*^Um>4Y>pt^9*&hlc;&yZ?l2J5$k;Z_%637xP4WLQ#00nt2MqN9H8?z7 zHZQo0_c|WbotkWuz28fsz?Oog|}vO`U+RMPn)eB&YbS}|xwfJf0vSRyEuT9P7yR3po8 zZ1@HiGM!ZtNkTncEL}$}NgP?to9F80fqL_$X{?ej0gxUQaFFsTQ`~hNN9Gl;o_MYYU!c+w{BNagIe<*7USVNm~O<1^>pM8CslJc6Zwc6Xqs3z^>P zQ(hFu7M3b-q&P)c4D&&zppbDKo<1P(VU@(PN>WfIDdJ~)Ng$hoY|el}E1?t{B}}6v zF$1)u0zRZ~^QXUQu4zkVe{*+6vgf%ZG5DkXbBYZoS_l>x@K`p;6l#gfn%qbsn6R`Y z*+!X6MW*F}RwQ%e$k~w-tHUUz*+HdwLbdD>xLO`}$vls=m3!y@*wy`4-AA%nU+VLa z{M~8%sHx(^+hF=^)xPN;o535l)g@lsK(kFbepQfk50p$Q(QD6{LS$(U6(=`BdU>G6 zBB3Nnf>}@DX^={iIFKd*B%n%?n8j)*ijx$OrgT!1%KL5t#<0G#NW91DNELvPM7hb) z;}M1+k5W+Q6OcqMiBS#W0WfYJ@?h}@KuJ;_L{#i#Q<0JFb0g2^XMg$qVekcniT zF6m(cs>B5l?4AE2{C8&(twd9@BkM-lt~JF;%HrJ`UnO-L3TS$M8qNk6uYZ9A8b4yFCF|OA$%O0Z z-)E+A1_(;=PE@Iy0*18t3B+!9KLJB15IO8!$Nnzh`9FUq3G(A0qd&m2HF>tqB}vp0P0@oSGO}4(tU3QHYZ)?VNeR2LST~3lCHX=7 zTO6wdt}H8HQ&h(4r|kJsJuXO?D)wK7Om5#z5*Mckp<4-LeE{xEg0Ii`ZF6r+inv%u zI`^I|{EHT>ozL^QP{C2axSSycN`OQbjG!3B{RC^*Zt*YcY_py+UFYP1#%%L@l_oxX zb=w?^`vKV7` zxh-5Rx|$XBDTb2L8{L{Q*2JO^L(4j*2s{1M*s?u;zMb_Lsn(~Y8y`9X8#rjSH2rl( zZ8^(1?s{hJ#j~sYwaH8amNrZfc`I+C&foBuQ%x}njx`Bw=kycwDeRF7r`?|aeSCg7 z<-o%{XF3yh%eu1;tcImM@~LI+Rt!Fv_gFSWWIa;Os0>U|f0&$-P*sZr2Km zd7qiOgSH8awSm%?Gm5fTw!?^SZAy$whmg%aVAUq(Ye%w&yGcV0_4hSmDB1lS4R0wx zN4j%GjL57JKVoQM%(>$m>W-f~vFXa_xszLy+e9^3e_oN6ai>C#ww8`-X$RT%9A3Mh z=1x~>&ubqb|J@-iNIeLkevY=L;p|4O^!AIfzuo3CbB!=VvFEIi~W z(;}eU6DqMI^6`r9HcTi?o}@==zBGZ3l=NgvRPuw9Oj5<$R{#%457JN0-o>q_9X7|ogd>TFLy3MKfZjIL9OjR z6)F`mu+0iS7Ol1Z_Zs5gA(|j)ul(NO!eT3zqTMms4gD_Hq%?tg3JE@dp|mHfyFPIE zhNW~?TVhf8GD*Kn>tR~?Qt=7pD#|^htF8}Hq|$DyK}m(W>(%}%d~7-Rt^A3M68+KV z=pV)d*Lx#51Fj7cjy%)O9;fbVpEpugPG8#f6&s>%>POH+n<71C8<*~&=&Fmi?IXWO>Q9=~f9JaV<&yvNxt2S`NN!!w%5`iW(E4MQ z+(3cZd;S&Z!zyBUtOGv(nr_C0W-xHWX_^M9JmLr1J)cHUxK|7}9wycJA@z!G26yM8 zGvv0trj^SS0XcT@rr5YCxt?5PJ{n6`OAjxPQwckp32^mfLMwTg?Hguej9LzZjHUl- z?q|R8J4i0xcz7JYQ-WIZnNk)JDO(?^(3G8CTB5C8Yv!CMQ(0N~+7j~qjYT}tVj%)< za`pf^lr1CK!US$54G3E*7sDQc#T-{uIC6LkkpzKuqy>}_I-!sL33Ka|2C8?^H3O3c zCUfG0j6T(}go4{Hgd4gTS=xqd>|a|K;gwQXi%S9dTI~vzPQnzYijA;VPr{t_GS*sq zqx;!vKXeSC)U6?0b7QFa@h3L^S`t-KOW*7g*J}E8woPU#FW}qhrbaeAa0DAa9!4z{@znEUi)bsYeub2G3z@8fDaCh!;++k=>FSRR3pr?W+COf={phf$g+9rSnt^ajvNL ziGq`6ypg?vACaha)FPtqLbdj7Ryiq2?LZo^bFWI-b=<)HYJCBDl~@Wlp5lU@97lYv z^enP1Mvav1=$}dOba|tD!*z5s=l7?7{=(+(p7MXFUB@XhpMTbwEO%hPOO4p?tw&r{ zu_dsMskubKM&je-K4IpqWrQR(FB{a(TJieh=^i~VQqjaM+yqtM>RsB$gJ(_yi%O~a z_d8!KZ1ojO;LH0MNY~(P$q7cU$>$r&gUjaMa_q<_YpRKdPSYZVxUnVv6b8wQA8hVji)xB? zk6!P(@x{4M_qQ*qY2;)H*6p+~jY7`w3QirO!M#T0Cf7T-9JrBEN_HOvcOS_#NXOFA z&-iXCTf;{4?-6plKYhn0Bg4tcTQAg*u+|5gKX0oq@a*kWjs1r<**R?IwL9SO1}hM} z@RPz9D>q(uz7tVJGDV$C2=ag9xFzwt*BB;|+C?9SGX%d;9y;r&?vV&&rb!qHSQ#6dC%?9 zx$}fvbxEs4{M>kwwA$ApcuV5=oM4%QrNvpsn+tHL3BFRv-x=J>uDywOpkr1{$-@E( z<#Q@ou(J?^4Q)bPEr_29{ClIeLHWI6f`&_r*z(WcS@z)fYZkDsp!~ntJF{cx*DY<` zyAVfz92ea;`)cg{rQpl&O3}FP?YHDr(kvxn8P$oO$9|&Sxb>GX3Gsd)!$Zb+f2@Wy`vah|8Uykr~ zr~!yv8Mcq_BK0>o$|cUxh+@8rlJ86sIL}wO4DhiME>_5OV&a~*(KJJ4m^`WdJi}$A zm}2Cs<_2OrlI*+rNt7~@A5XVPW+*qMCGbfu9^G$lX<%2xpRF4|G( zIyT(>=&-BdMeT)jZ4%w2QQ%dr9ll8ZgEmK42I%iyBRKS zK@|3+b0I)%L~a5EN!q?HLoi|nSSjtH)bu$Y2Gpsg*kPDoXWa`GCc1*_NHq)4?Q#(_ z)Q$Z2zZv&G?CYHigQv>e8hkx+W%w*!K)eia@U;tB~e22}6r%0X(j=jXF_5BNWF5i&F~KF}-Bay`85S&(rOW)=_YAc|6=4&#qPK zaCktijf)!L`<{?);~a_q&Zp#ZF%42Xl)xz{-KB$pQiqqdbM3SR&V}655{4l12ue6< zU(GcO$HHu6!7#WzDb$|iYZ1U+yve;v@^uh`*lK`j07utw(S_3YjY50%E|)?nx{YQ} z?s5^)h#l+pry=ZW;GWeC>juFx7A??%hM;$;<_D_a9hwnhoqR(f{?$5_wblS27SYw( zEzu%CO+-T}<&GjQW^n{aKUJ@d=`RfGN&G4!O5fzm%<(p5wi$s~>Ny7^F0q|vPY^g) zOI5}SY!TNU8rk+z)=z zphJ+Mrc9k8Lw>(Qmrs^1O!ZSbRR0ORRQ+ISONqh9eW@mJwQeciO}gLZm4AoSO6=>| zAn=?9^|Ff2L3ACa?{XU4<28uzQ{jkWH2OB2{`f)U0>&Erv)hBW=e@iPlZcvP%w7Ph zTTUmKHG1k|L=gfLW~}uB+?r))J)7TAD zi)AK)a*V)5B1bL2f|AE6s#qq16x#?hI%nqG&Bq!^wQCw28>Jc+G;CX6;}x3y96w2s z=`sSV$^$N4mxEMkQh1rahlQ1vucQU`Zuf`%W8*$;4}2(~o7C5{P!9K_1xA7$2V_>& z@R(J=O@{2l%!kgeo7QWJ&lmt=OjGJxhEoyO5tUJAN6$9S=%L!}Rw?%;=`ap#B`a$s zJ8LD0XTr4E5jwuI6Q)k$1)j6o*Ug|H1nE-@XM(^n9#z)V=+N;o4gt3p0!d0(LPOxD zb`T^>v4wznz$aG;h->GbHIl}jl3uB#*%_t!y-#}3uVGI$vv*jO?bqaOn{V(#cJ&7| zIQQ`_p4Y*L#Qqc>iRSCw&}AbX?M&*{E+ncubWw}sclLnz)QGzuXWkAzyZih+NP42h zk?z?ewJYRmT1{)CLK6;lCs<8+Y5}01%X}p=hK`MQ$CD`XQy~aS` zR0Jfo$piKQpDLS#P5urY06q&O)gT*`Fqa{x?VW&Ok93CzaAq|^w*SNN6TY6)vfDX+ zI#Nes3+PrMAV&i5NZI?3_WykRvM6V24sFm_ggLF)O_PO%V8vWby9x}AC(T$l;gOkm z#at`0r)HGv%}Tt18VNp$4{_Hv;;QPXo{tP zn!_~J2WU;AO^)~bDIUbeiki~Jgwopn3_2qhNDZ2h|2#B_uWaOIuj-zV9|w?%#JfJ28R zrtzt&?3dMXWn3EmfRsR$!pJgBw=7Qv1w;X`P=WC!btFNM zuCJpFmWfxLVf(epQCFr`N!Vtt!!Xl}84__8g$%b1l9l7|r!SSKtp^VshI{78HMl%C zDcnN^gK;S8{Qh9sX2$Ydx#0sbKJTjW#I}`QgT5lJ$uraL%pN zF!~zfmTfA{nMoY6$a9=h7UteU%Ay zjw0H(7QPzdp`93@U6uQdtkJ&8cNxjNFMR~*HaidkG77^RM;J+k>g!Nl&V6$7E}%Si zvG>ss1Dn@}Dl)e+fjhE!0Txmngv`CW%dMJDh?f~R`g&$DI`Vk|g>36;xW`a6jUrv~ z>D&5=Yj;F^$Awwt8@Z!|kEx!ceUUpM{2fG6Qx9p3tJK%$bA15Mt%9$;`ms;$SOC_@ z*2!VvxTQYpT9c8KbWKX?TXR|hsHi!h16_;FruHPLt5^9+xELdvb`U+|#u)<_@HG>} z#@oIu+)7N)N&RunjZkIiDFhC28g~=PBn(Bb7?Eq!Jyj&74moB&kM{q@q+R z)d)$-M5XgcC2tj-kL$b758ppvx9gYdcI~>Jujk|bAT#wfMc@6pK2qD}-9v7=;GoA( zwkO=&x%({MY7BDVo6P$qfD9Hvv0KXe-ecD#Ogjgte31%rUUS?(-1KmQ7|Wdg`uwbV z`7Q;)d~ zsC4Lr^c_))?AHDv)nu^PMgTO6u#Q|VRDkQ0kY z362kilwJy}TcMJ?NnNA+*s$(FT(JhHyZ90Cnkk^_ZF0=_C(%JQ+v={z6>1vb>mim( z?+d_we5>6P(i{sCFI#BzC~tkQ_w6I8W|h8mKi@})7XGRv)w$?pfEok44rga|uDZ3f zpp?v{Y1&Ga61Cbh;B{krctN0#smC#o*7`eiP8(}od!5wh-uJ*WVdro?Lc3;lWy$!v; zNWBVA`@4$*C91wY_SAu~m0`XX`8R2vzjg#*cV5yuWLHn&DZ2>I`FX~<+yzwg1F!lC z)VT*1MvJ6+-7y!7sAMVDu2p4-#mMdMQ5|28>!twjC?V&(#{<{bVK(ovswVliUi$sG z>PU#KH|3AiE>kSqsCaYMSH*p?rtN06Y1S2hvN|fWV(~R~-@lxYzpF=YJvggyP6c0F zdA}t6ZwTK_E&rOTyjoquTZP^|6w|xE@6VH>+h*^U7C(?G8FBMO>g9-TfgOMXim9f8 z5PV3MT{Vpdy4njW(BOnc8u^(t$q>Q%DYx+2s=PQWB5h!f&q)&Is3GYBWaasV+s_@w_fC?{ zf^wa=ve(=y)^@40U2nVd4B0xOEgp8-#<{EG=Ke}He>p&`Tev0lUis>c1C|Fj64pB< zbNaKx>PSB?p#nY_EZFt^+uy7=H?Hm8jxoy8GvZq>u5oinc+`;gc;IBrCBp4%^Dzn03A%bJ(!MqDV2vWYo+lH#SEY~B66A~N@FaqP|$R+vSz`G)-1 zp#mjV&2F-iWX;)4HS$U>KFO^S)>}wYHe0;&oI1VadhzJT#@m*Q90`_@E86p}OZJ!c z(%00L_v>uxqTKpxd@ix;(+~=})^wzB!~YWUh1W@YGJ5iC$?^{k``H>14U7h^G2XOe zYB=8tUM53K8zoQ=HXzcf&_vY(avg7Ev^M1yTTb8f_-PW>tGC!`KF@1(1w|$^n7Z2~ z|Kh1J;;Xr`a>W0R@tIqP_rgn$9T%-QJMdjRHeC>Qc3{iZcmB21@P7&AN9z za(5L*3zV>Zw&{TuR!)apN8!Ol^itb%v)S!|c<`R@0PoWBJbh2Wwkz*WeS~?98ESyhH zDM@56+|#MX)&HHjnwfPf^6+L--T0ad{s6(HK7Yq+?{ypOos&1csQY|x@lkCHqdMev zE^XJdxci2C`ZZRD=H1&$4ik2=2YZX+!}6XL^Vw)$rj;*%7OmoeFI?J8%K;24sjxmH zcmd8N7Cu!U;&ifi(~9F{d9mA$zi)AtT}%lznAw(;JEBsN6yia2I_2iJXU+&`oX-^6 z8CpI~T=!Jp$=DpTt0$!98~pX}O)O*Lt~bV#_5L^>50eq?A?9V)gv4@o^-;BE*-1sp zhiyh06S%!d zdF#+zf~)&oTE0X?k4&N}BMr*EbP*=99*?o?H6>91NKc^jD+14o5M7L(ncHP=qRJU@ zjww$-J}B|UU|5K#?qmXsgHV-CN}efJe&seSGkXDu?z)X%d$NZzom)lwiC7#f@7Ao7 zGkyow<9sE8zr{RJ!_a?m$BfjDuxi9+&J%7QL~xT9sHJdoE>lb`cD8zJ zTA#GhjH@S*q}{5`a?~5k5@XMC@8ua^%LGP7_=skRO5lUDaqVDCTTkv8ruw&$l7w(3 zJB(j(hk8W)@Vm&jfst*56|;&4EjmLoA;D77Om$= zw2KkH3$!UOP=O^tAdBO>HVN*SrBEuzrCCdTLoJhdKp=;#S$iC~Vm5)paikhlCW?u8 zW1MP;l&PL5niRqNjeDaar%(*sFm3^Zy?!rSt43dhx8?~+_rHijT|Q7$C{SB(-C z09`CHhUUsJ&QiktR-xt_e>W#5D~l%7q{ptO%U^z~*0}J$>MWyh6XhHq<|8L}^1q_0LmVhx$00Mv9gn>xICjvJB zvXl~{^La>4fYP<^#_||9uP3YlP&gJo1o2jX^KBKLzydtEB+8Q@tw={xjCHJlU@uS9 zTJ9H|y->L9=!SSV5FLUN=79)rQ`R%1$4?iFA;S@%7u(i6x78+t3RODEL=DnN`q=5y`KSy55JNFr*kT1iF+hgdQi03fbcPm-rdFA}bmqrdKu#Jr>m7ZN0qjHik z;0+}##%~K3QY(QbHPhX=V9r%)`j{Yo*R$xWe=>}S%|b$L2|nI%l1l4C3Rb=Uu+tDa z>G3)oP=Q3z|5l?af9x=7v;^E|-;>`d?y;^=C;*^0OxCUu87t~>q?(Hw2W#Mt;Y|fa z8yM>OmH;H3L)$Re>P<`^o!__C9sQ>_{WPfu?<*;q)InqRkl--+@uPo> zRs|P#)uHEEm8DdZEQf=5J=FHHznE6$M+3DrgdfrQs8)$c;?Jh!bczBj%DXOxLtiVI zZqGt@-!G#~*<-R5lb7w{Z+Tz&LzX_eV7j?bP;uz@$J&>%R<-&Yx1BgNiE4(;ox~!i zj0s$Rr>|j`_|RE7;_3b9pW^2}6D^IEG7_&cJ(@brs z3~+}uh127sm?5b%qTUV zNWAV(Rjq$-?M)dYeQL{7o61=)1T2!1q7ya%)cPL#kQ@H9hAWs-^C2oB5yY{6goN!H zvZp*7!rLZNoaEONjsr;y3<)8x_>ic?A;ke;x*R|I_S=y%28K~;EnuYjjFU^zc7hA$ ziehR4AAkUPf()o68DUVU`|q1zX&0A#SBwRiaw-W_UXoxjZ`e6Js1Q(bY@igtJF)Io z21tdc$veaV6~V}*&+K``w7j=FPW{_3LfbO0tQNueGh`l8U@rpFB)}mA@4*27;kOG} zd99^+2IQ*=76HEyLg9d^lWf#r1`A7{TZVxVg4l^n>`YDY_0sQ*dFxzWZlsIIn4fA1_7s}!`7iN5=JgUrX`N?CHP1w z*=eGIAbIQxfL8#lJ&$5+)Qj7Kk0SzwD*Gg}dzcN4Luah_O0mB4QGY&M&!ke!!3>NX zy8uWcNq|4f25g3k)r8_Xb)w02EyW1@!knP)ZyCH=D ztds&y-c+U>*Cqw#h=40Yo~x!V4*wHt8BBG=EG=I&x{T_(iF#@+bwN9M$-UR{MdPkp zskCCyo@H}dxeus`PJ3Nf)WSDbU0+hDT1|7uIQ<9Z2R1BEqM+L7spF9dJ~qsL}a%o})wN#ciQ z#u-)bF-Y>{UMYBmhdt*+wU@*Zc;be9V1u!x&=~o^c6+`b$k-1|qjAXS$4_?vVNj}A zv5Y$1d`Dby;maKWBOwokQJgOdNOH(Z16QgOAdBO2)lbu`_3CqrvEUAGBy)H zmMrkuwwoFNQO_UvFnUby0a@=Wna~aV`8-DIS^R3_!)VQ=f_0RuVyfL%@AFQS{Lo-m zK;3l0umb^u?Da2~>{HU48o(P%5Ev_?&NO2O@ybTQ<>xQ_6Ct6u`fQRVekdlsE=ZYj zTrqziJ+RTyG<&Q213Q)bNmS@1i^JFCjiIaSQqJlA2+;zOr=fOrn)?ufZZ~*`+&gB9h(t#DWDuNUG zC7%ar43y^v`HSWUI0R(MxhmcO2A~*s_jFlGaV&cH>s`JPAkTKpzNG`hquO>u#w>7V z^dsgTzE^de$xu%jeYK(lh(vPeu#qt*cGrFU^5PHHM!Ur4e6k)GZzT|2&H}$g?9r`G zMLb-5I39ynXG*P7Hf?l;w{=AEv5(%`ZnsQkH}zDZdU{V*vh3HUk8qCpINb%&quWy= zjDix?sVU3%n&5`2@X<)3o0NKmL$6mR=htDKTaZl`=LLJAGVs>akwYBG| z;bC|N28?8(WUkalu2hdmE3Iy-+Sp4RK-en*EGH7Rq#ZMu+WY({3vX1*G;VJr7WYUL zo^g04GSnWzo#9|IB4kT>E2=gSYI*+K>e03h?)CwuFCJ(+>@;bSYRGe!f4G1-SBS5X zQ>yj@+a=gDu!>CtKnI)~c^^pLKW9se7?=xTVwT{nbtMnmxHEELvwN~8K8dr(!3 z>~=EBJn@K3vQ0EGT0E?9=$6@1rYxVEgX)}f;UQdV^4TU__uyp+z3!qg;@Z15I z#nVcwhoe)JqfcB7ije8f%u2uS+(5w8Yq-ZOFCJfU0KtcBx!#x~<4Xvi9?oJmW77gz zh~1>A5w-YyX&W$(k&=f($9l=2)5(p_iSgygEoWnb2mp=kpT8(kE0qGyM(VpaZN}A8 z6}Sm99zZ?Y^hniv;eG&cl2;a}Q7X?Xzd~_1m*z7T>Ivi|5@gfN08_0noR~%G-Y8Mj z=Q=iZC|vU}W48prGkJy<-ldA}-*h%kD#5kfCR4$0_wR1Dm)4^gD5i4LkEPHXf9)iP zZ{P1}MI>M=x$!e~3I|Dxy|T2N(JX9bfoT81v%fRfma=0I327~$wzi&@A?Qr2*WwE_ zxt6pvK_~S$EvX)kL@4&@B0l>YhS8u ztrFlgZoYK7A$|)3*CE=h@D9HIJ4*p7nS0QB{L0xyDgQQ-uT973$g#$^uB_HHJ|o3! zULIWgn{XW=%=+K{^F6BcZNtUftNRhc^qa2t9BVD!wKf24KYxtDIA8SmtVLbVWi&4S z>DfOBO$k|2v)W@4(FuTZzp}mHl$QA+IFg6+dKK*@JbyRtKd-CVdaZ}6Zep%eDgK*4 zFO!|A(hDw$&73%92dr$w!|YAEwEd8)q8pzg$JE?3-Yvy-23gKT#uxuI@;7OC!*)!Q z6JGRg)MAsbjF2}K$98iaca>c7m^ebY?b5RPCA9j|1B;<5?2 zyI?|5d&bGQZ`#TYQUcT0WJoAWXED-zVy-6<(^iK*2ujaoSn76w14TFtu7$pyeMFA) zpGjG1H~D81V9b+k>T|Hsd$@XWK+h|Sni*^*4;{vO6wW{^(eX;9v%rH_Ah}`6yPbjA zy9X!FtJ~%LpRvq{b*TS5+WmfGf35C0uU8nSJwz(c(=Cv>S$Fr2+9YnWOD;8Sc7io8s0olaQ%_*X*mKM?{ z$QpbfkRHh@>exoLoq?u_FYg{sTcbany>}7m5{C94yF|n3*`MQe98#BrcpbsCu?XCd zblfesexdf^mG_f8pRDUzw&9r@12;aqHY4ps<;JUu`0xh!*p)=T;LPK0Lwg3wc^`5l z&$UlSr{}n0USVeb8aAHs&gcoUJeI3s@;%z8>plmYa0;X<7K9nt`k(lyZIIv5^&*Eg zxiOpY^ry&jKDV#fWv%5kqhwBn>Cy%OoZLD=!KmmIuh@VZ zVC9lr3SHcj2Q+F!lkHn;D%O=5km|X96(R&e2Sj5IIyG8z3Y-pGMzAIPL{k=@wH|o= zexTg5wDfR@;_|uIcWM@Fd@*$S{M%uPPmw|Bm5z6#&C5e z5GlI5sD91=Pi~LB`rqXCQ~Thip^BK8>z^Gs(7S(4it+M@{Qc(gf`O2N?110{+)@VR zM>*l?ev54G*7xm+8vDI7fqG--^Z%W^_|C77?ED}ZrDj`y3ng^yt6ZAih~9d0sY}Sj zftUbJz3(3T$F7uMI;3PuYreYrWqYT0N_K78ZmJnYbY#2=^Z3G)tg>D>?HjlD?yW=l z0nXpXSCf<0O_g)ZPfk^YxW1d(&lP@q8Tt9|94b?P@(piGTOy{8->aQhmo^kJv7)l} ztD|C2)ys2Ul)h}eDV&l1kX-5K!Ac}&^7I|6f;7>;UIeyXh>6O&9v3~b-1>R{Qw{Ot z_tE7`-kGIr@Fs81-rVLrV_dd(9&30YvMZ{A+|XkI9}{BgXPS%F_#G>;zxej~&QOim zWn04Ae4mP6YZkm|>!od+Z67c{Wn1w%G|swu`m4;)|MG3$mIK`?G0(P^m|j}3ZP+er zM7{0uyX^hx!gX)`Jm-5+NB2S$-to+99_TH3sv~CUUzYk>rucc;bY+t)#d8qZH zICZ^WA-m_NeaDkNhQvK?Jfa+ed}=b<5+IwtSO$=DW$n0Hgejs~Ay2f9@==dzzi zJXq4g6YWFt&^EC>rFCv7ZRbSvzgUozD1|NPaFp1iZp`xY;zQbblw$f(D&yRlJCd^= zGYdHCu8ykfV*#vlv-j(Y#zomU+a+gDa=LwYQt$t@S@6M%?j3#Lf-JFcL+Vy?ERFVt(Yp-Bp{|0~8mW*{$3h2**|cO< zAgxYbaUi6dnk$1%lF_(?*_UgsJJ$v1tv<>Igq4jn(s|j2(mG@JjPKYGxLzgxX8?4 zytClNPk+b4uV%MBaIrnMgXJm&)>h0t^%MSXgCnJxUykXiP{<;Fj;pwVc4@rNUdi8^ z$yg)<$-2c`>hHz2vGDBaw@bWDxI&%Cg*ZRr4E@R7`*0%GTbUUeG{WKC5zK-N1I~${ z2QBemTVnNTcb+}Yjq8QrwgEJrBo^r~>rtIjG%kn-k!K+-+maqd(heQ&+|SCbr);_E zxgLcL{sY*xDcK7L+p#Am87^A0K87JG7~gejscmt>X4 z`h*}^;c{{V5J=~s*rTJ%CS96ej)Yk0)HVtkazZkKQRd7+`*cA?!JbxrUhuO?ot?YN z50_DDfo#e&`}~qNAvH-VG9&fl?J{!KA3*70r;!sow!il#HXdY&WN)U1hA>CI;WH|G0a0@Ao^6?&v<8ZwlMw=p7K6l@gtKkV+lPXSipQhE70G24WNz z(F)nA?+_|kcG)^3G4E78boq=j=9DVbnLmu;D}LTlZV&$GV;bDqm!{4$uR)}+1fnCs zD0-U|ZPsjo7t0VV-w6Biv`ucfwy$J{upP%4xLlf!ZWK;vzZvK^FqUNR#JKhIRL|Gk zDvnCRthwgLW8#pN=+aa^<C+N0#Q2} zw5|c&_#~d_NZs3>titY08hV1@JMO#C(+ITm3?IK$da3Je=$5e%vjl(TVB>HJ zq}eOMAF%`NGs=mZHdbJ8GdQwzF?Z{z$Jr@OEr@(sv`lP>(xiq z%l8l5`;vr81i2PJNi+QW3DQ5bOEo!$HFMDNIib8$c~G;~k*Gy-BsBc|+__O@OL9av zaa`)Z(2^k7*QGlhI(+rT_j@l-`25AmR->#^B8aI^_tRS30TQn4{qnJ-+4Bqm;fHb1 zy)SKVH|Ax8+TT~;*Eg2Mu4>D6f0C!-3|xJ`JN(*A%-Pr*zwwz)2zWP?2T|*kPO)T) z=+DYhuaqd4Y_1ay^Qf{F*C)J&rAv6k1;ZxF48#|K+C4tj)>J}Vh;yBZ8~*zt>))Ye zgOMr;oe)hT#><+#k-KGV?S@t8oI52c(wz&uSMwIGEeLyiR*W_=ou+ah2RC+6>4J+f=@+&))6T4$O|92Xe;5L7i;&?CrxB7G`HkR(vK zuT=lqHtyGSX3(>p+_PWoRFX!5`#eGu6L*}6%VcG<=puG!x~sePBt!K+Q-za4@EI2= z!hVQuMvIcVMe$-Z9zn$*0Jk$|#dyx0QH#Vx@)C*Z(q_tWhKiCQUEYSOTDB|UM=qb9 z7o0{_a-&O*2{K|)E8EGx9bw#8wIyNzuF&|$MCCN=tf`?iF;%9w<#;lapk4PqK6qJ`)iCB%i$g4 zs00~o!BfVIAx8$?hk+WTV-9@DGHX-9pRk(|CEs1(Hm)5cRlxRS6-**BK3=A97yT@^ zQYw%y=$OxA#EVQ!t1}$J2W;lRbK>YrWa4m>64#73OVN>~XuJ0E9{ea{Xjd%AC|EKI zr!t9_eMEA=ko7Ju>=Z`r<5CR8hxT?s|YD1tgK=Pe}o_pYKmO+viPfGl}Husl#jMmAY0!OkpRB9V}Ej_if%s~uO`@TybZ z0iM!&!`engP~oZ=WToIX$Q7VYJcbW^1s$-77%A++G&b0J3^RDxWAND5fHJjT^lAb6 z9~pIrt9q0dyQQO%uXCahjX6?H?2@guEKClU6jy>qP4NrLdcfx-wou5+ADu(TlD~ zR?kS5Y-lPCtZrthjW_toGL_X-mX^CRxUFE1vAgvUJASNlW``TkM!{>x^+i zW^-G-cA<4s(&VvM>rYi~J(9{&osgZ1VH9=8pLs*zWakmBtD?V;L93Ap<@a1pfMUNM z0?DimJ+O8U27S&wX}%M2ieg=Vc#d@4U*)>XnZ4W35U#eFqI6@Vl^v{QGotP7eC3Y` zqP*?jzkpU;AG3KAS%vna!RE(7r=IGxRe7sqyQpL-1zn~eN%y?dAtzd5Ua$nRVr{#T z7ic>NIkdHU5;wi(?7rq`X8iQ5*?-LzS=tE*cH`WdDUb6@7hM>v0HP3d=-l3c6hNUA zEu}D%;q&1{vGa(@l23*KMW-j%o?~s$rZ0o51C^rorT(8p=jz3vrx*FjAyS0x@J4*h4nbi|IP=m;--bPn|LayK{>ijrbV6q zu5^S9wEWh&+&TJ)rueiEc;+MTmr=-I0a6{p% zm_p@f#T3#PEL|PKfa4|rSDEzf)thUo*FOefSBZuuM7P>{OmTP7(pOl6r`fKtX;&(} z4<$lJI)AF|OV@Ty)D5iHIQs@rk?U_cAM?rrUNXXPdk_ z0~m0nvw^o%eI13;+Ih=P6k!t)5Qw5>JJKD6n&*~Yuc!3#s|_|jgM&Z=1r1aq->jae z*>|ISmBuBDFv?IFFNa_a)N60Tn*m1fl?~v-r{}vZ*jZJE6 znru^jLB_hxt!1wt#J!J*oV504p_bO74xOW#J1^3qc89fT6qwO{DqY`KXol_9<~_b+ znXm0bUeFZ*yO4SEd6r3gm$Jj?Y!j+x_hPwV@o{%bGlYJrpA6}|~>H@5ju_aMJ3hA!B-?6adj8$ENMZHo-oGr<+R zkktZ%C;*crS$-4%$uhv7iE`u1@P{8wq;J`Q<8i;T?PSoyHS8GK`lR3bZytrUInpEf zcN}bO3=eCUSkZhCuihAHm_m6yF;F-b=!x7l5oiW*m2*k8%2vwp8rqc+loG-$b2N_r zLL4lfKzsHU0HZ zs*N=KC5GD5D9gh)outqdqPk86L<=Gx&QPOd@M@N-NE2Kk2CmqRHnu+cw3tJmw6N08 zIwjxET~Bsat_$!X(>YKWT6IB+@t6P-1$WEdkJLwqxbrvYMrdX6*itzh!@8`4d*Cer zqR*i`yNAv{ed3|qV&qOdT=VQ%EXAKiac02A#)%Ha$qu%oE)qe!1nnW!51&^HWYR}I zqgc!qMO<*<@fJAU`!e@A94A5J0XW*29E+fRS#WDJ%H5jg8VUd713N6x%K>yW`OU{b zI}4?28H8E|z$6}8g@=j@R(;2RsFXtExcZMG+@=M}C;7p3Rv-xoUev~zU;I*}@ZOsT zbH(UTY2^)Io6T1>fd^fhG52mH8b+vy5>{(s7}OY2=ARz73L|L;<17FKynw!t>!@y=Utj1*Wocd&ik zUcp@`g!#Ik9zXB`!ph-T3B2UnjGY*=p3``_b@t8o^EQ0IN7?IePyvmcDag4A5E0Gi zM$dhusj+-CzX({&YfhSn*MWn3jc(qc*v&>GD5_rNLd^I1d5S3Gh(zOSyv^j3=+em zT*B&ZY&w(BB-L_~V{eg(S9qju9_gGoJRCsj^GW?o(my%TKmz@o%Yqal-gL9#OZ7^00wMvPdTqu}ayE7ipx@_lEwl*l?`^J$8W*agH5-IkyHJ< zgfgH|-Td{GVA~1R!=CBmohgsoqfUu!{n~nw`J_?z4K!nSU@{p)F)3WU52GLdCFTC{ z(4+o`a(WQlDJd^s@i(^6#5puy%iM{v_(x)MolmKk2LIQ7kN0%nNgj zL1OG};-6FVYIqHU=ht2#?{QQN^sgc0_s-)y$S|@wvY3g7 z9^y^&l=0=_cC+ZYSK3#bDZWCi9wH&`CY z4G3@`*4apuC^qUwQ!GCLOIC*D^LwJ$IunS7Z$=J%X$2yn@%Fxx_?jm(jr|lkUgYe8 z`uzDEw54k3geY}cX17mV@#W)aSQOhWq9pO_SFZAE0cs5iL$Ev_zCU zoh}=v7j?}Kj<(=f9wUY7eVWbL*Ntjinht2DWF(5pdIkhJYMGRNdSU*;CRnRczdsvu z>w;eoMPap;ex%SUw-oXb8qPEFuh(ki z)mJAaEle!1$&H-^tm0)k^va~8R;IMI`S&ryyE#biG6{vK-`41Dg4IWOa-4Zm3J=uh zcM4*E6P|bv?_h}}e^L7NVnFMUpX!eM9&kCoHmQz<($PckSk9RHIY-c5&LH?O**hP) zvZ>WFk%ey}A*!=ySdW1*M09as%5-8R7T&p0sQ%1EbmMd&PWWGxa=TN_m`X7qjb~f6 zGGSVC1N|BqMd5MldE#!OC%eF*!=1#-FHLXSCc`atGm6vjpm&c&9Y=<@KG0vQq)LM?}7OotOQm(0OXPVJ=j2?OkuXFEPcu(D! zhd(voXYb1pQZ-Vv+#eF$mL? zag%2H16vZ!h3mTK1MG3#;TuQpAAo&m<^$CZg+@fJfyqw0@*HO2yij{Ug0ipm!(%#x zbVY_GeD^{h4)dil zgcuP~l<=%);L`N$x+o?*Lg?P&hB(PXp6Vn}0DM$UzdoU7`1;Q`*a01pW+UT565Q&3 zS-+o{Kqh`X9bw#sJ7dS1E2q%EH*~mTcC8evFZdKdzd`md0d`_j-JTe^O)X5{>>$^At*aj7HMzuR||$5SVh=mFv|;wl^LnHdn$4KX2Vs) z`!MYegY-{1XYZvb=j>9Y0|d z!yL*g!}7h|-rZ;E~+|7Y+%5TjR& zXx;z?4@4hj)1zjx0Za=mh*vYPOhdixhnmOHW9{1p0QvLcmQ79lMe1ubh}s8QQQ zcFO8I^)rG~{~XKG+kEs#Ed4awo>)NT36?n1Y}Wv=-qdV+iaMMXA$9C-Taz^&bH zT+SXc=+d-t=6Pe+ju4028ctf+Mc`LN0nm!8Sj^6}m&yC$Aw45J<)P1qui`w)ILCwy%C39{{x%qp8ajSi|X91?%S-W_OeB`x?*b9HldHB)hJJ>&IeH}#E^${q^TKx z>5d0`Y;Fsic3JBIecOJ6uoSY&SI$-X%!it+YM|_mel}e__vJT)yuSF3zW6SSVP$DW z>`592f_UegHTn~KZ;mREo5MigeR{QZzK>6O|2k2BO7SH|XVvw33xzH;8rw@33t@Vt z5nUKvY<=>+?~~y6eN18c7jL~b0fU3sTKYwX_*pdG%Iwvcbi}OTfo3e|LK>6^4j>u> z0#gpMo3-9|KomKUlkWe$MreV9Fk{3~oKU|R+J03KNP)JR-bza^v0k8-xYfyI8eCSR zw9SS3Vqr$*t<3b>v166=HnxM_t%uIspi<|(7&Cu~N78-7*n z1NxHxVD;NHGd;Yx$&TEqp&r|O>sWPe$dGj>#Ne0R`ZCDKfQ;xgE4|Zici(x=B4%&9 zGt!_m2JX%N$(xF-M{XldIi0ywHD2{66;T-J44f=dm$$^!>#joR9?d$mk};-3HplD ztE>*$a1htj5@UXuk<4IAEsgrR_>@9GCw@j@fdXA7CoXvhVmjaOQAjwDexV!|9am+ zvua`+)YR*Gb9ws>q0nJ95VWHG?~vd_m!`g5zQt7mSe2`58E(=kw2&|J`U|-LFfn`C zEUanaGIqf8P~y)#m>&8d7SdXl6PAxzPtL(|gP46|ArHo$;voG7q5fQn<3XWLhOqLP zVC$6Nv52~(E9_s#Afo{?$sg2}33|H(u=If~;OpfgbePVL$Y}9alq}YCQ`LCE^GNGXp=~omlc%f$2W>e~nCAZ-%}fRhG%T;1afOx$G)IqoateYwp&Jv1 zR*xY)4r0JT9OeYOuL(WJVQnOF#Sho$>ptEV{RL3Lp-aqoQ0`X|mW#N8;e{8T zoLU^A`W1AHMaMFoRP#YYsbF#%I6aVK@(R)52o)yd=7zIjy9WV?j97De;(XXw?RwTT z(MQmti0PPpeHv@)H2WA&diI1IQ&CZiD%Smx=h<5Frd1FjcKJG2yyiYvHlQ6z&)e7r z*z*CHXWOdze8ex@frad2piP4bFXF)1b(Y_Rs zKOdgYe`?AVuKypsjC%Ph+jBbmr7n8ec$}9XVE98AMtWFXRRRrqecmRt!HG8}3iibc zuSGzb$c^&t*Uf&Iz0oCWas`#gJ-)woGp`XE(^tLS2u^PkTBg*x-S?VVbe;D5_=nT0 zeiLiI|HcYg0qlvJd)c?cHVGs06?yB$pnDy}V0Z@KEnW)`Yw2dE(DPVrKr7?9x_{!8 zAqeK6ma@>%e9gcvNQVzb&!KgdCJGZkah1ExfEh5UzjWy+0=@Y9Jb?USqC_-#{FzS8 z-N$u4x;14&ri_=k-}Lac$L>g+J0^y6xJ+^+YnLGB9gfH9uuDPASZJOcZGJK*3dr@` zCaAU+H%wdlW>fZ+AA2)@Wc4)S7GD!H?TpvXHfn>k=?fM4Xet*}Dv{Yr<1xkF{#=e4 zSIBTjIHgxsv2rxI!azNZ*1Ex}_mSp|oXYwA87Z;$2w*?W)h`^MWHGmr(XB=;8vUGSN5*Xk_!An2iIL47cj9HRNKWu7{5D=RLafCKNw?%H! zj=D*|z6bhqpwV1yaKV9r^@l|`OtkwEEe=|%KA+c&cBDg^?gzyA1ui`uN+wiU8~72t zTzdGp=N7z6`K_F*<}QG=8>z^3I{mS_jJ!HFM;M1rl;u=9<;KXZRs#YGCnpJ)tLm<# zosTH-M`JQLybG=FE~r=oF`7(Q^K!H|pi4d=MmS;h1}l|=M;xaYRypNnS_#x@(DCGK zT8h?cv2vJPSfc}7gCUDW?>Ilrma_6rr6H(kr1~3tSOHeloLKve5NL+oIt|-rRG#|r zZsy_#s`I!l{kl1GL#jFcxYydDE9e!mXezm-IjE?mDd2SV+6@LThM5~ThxL0)l2EU& zwcJ(F;^@bbTa-Swm_$88+R)k(Y@x?(_}eUGjFW8I^Pf;STzwcHV-8&xm7(#+{O z_5uW(0nysfyCk`I1Xx>__GWLVb&Aks9KM>Op;c1B)cU^lpQFTR+kzPAI$v4yuDm0_ z=pR_!KY6;-0-KXFt)*+v?D%;08wr++j0f|KdO)x5+gMs(o@V?XP4^nlwu=O6 z%5P99f^QHMCD9OWfKTBv>p|XOyVz+nTT0 zZWZugf8a&XN|P%$S2q;G=eWkfkmLpI@)e)WQq61)^0k1+Zq-6g+phVN07K6TJd&_{ z&!0ork-X08i*J*+9~k~71pj0w%~BR zIb&g&`QZX={6HyJJF#vJb>kHVfE{|Dk5#!9P@PIK*1Wf7W4Mrr87ik zG4t996xRjZCR#I_SnJf3HfdT&RVlY{TU-r_urHt%gpE`lV$`^xl>@;pSXFK9amV@p z38c{-+dlnq{W#UW`9W*OU$@WCukHEv`O{x_xlEGyH(1%%u_FLc^{nY>O?x#&rI46t zqgA9H+5r64+El`q&#dzw=LSF%eT zm#vu}B*tv5D_i!iK98UjzCk(+|DE$%BSX2~s2;l2DcmA1K-f?6#`Rd7JMibXg@B7$ zW?5UHyU(&#=LoRUUSGgu#GA~v-?1^Pp-OCSjW8J4XA!D_8jPr@i0s)@htBT%=xMA< zxZFJoRq^>qR?Wq~?%6;Ht5>?AO#@1%7~52Yf~uQPQ*lZLRd(31x-~1*&V0n_B$Cov z!N4j9LL%%;+mlMmw87OYkqmL;N?Q?XW2v1PJam{>nAMB6nxF(5nK<0Dm@k?dGhl~k4&rW@@d<5aH}o_gZXmPm^|&v?rK0;;Oe z@{Zm0MW->xJKoNBUB9gevAg!MeWm?XS^Mbn7Wu@=`#s;2ur~HW(Eu@G(Z8Va{3Fh} z^w(!jzTEdIa3}Kd-t14Vwe+|ESdA@l|7%E6uUrCgdj6V$ac~)y#Amh&B#@Q1Vi=C< zG7U>~93T(*BfZN-kYL4=UD3>-=fHVeJ940!`pPlsf7&63ApViL>W+Ch2N5ljW8;yi zfwS$Cf*)-1xgwIQ24z4)#V-#2*=?j+q&4_M1ZXh7)8O+1w{HKknyqvWbK`kSId{ib z`uY5Lxc;EePq$-VS2}oo$+~0L+(_&XFXbJ*gLEJ&Rk&bOiaHQZcEK4|Pc9B9JtZW)>N$BV%FFQxdIiPM*=CEX{Y04%Sg& zW~faHE@7o||CM#!s?Y+pcEI55ZVtyVuHo>>VpL5PxiF0HZ}5r;A8x-mWfe=?s zttM_2LJfPHFlZ^A(8&iZH0WGMONwfP)X0324DnB85FAJH4v&1sglCVuoN*a3mS=Hq z=Eq@@@3b-#@aJPg2Wr~)KITcTD^9i*7UOj3TJ)n&S}!#NoXY9cO>`S@?di%D-hWjl#x>KwVCr{+P@`5nKdru9B-* zDA~0_?_}e)hNj7#4BcoUL?h)j-@W+{R8yd-kef;}ZC%Rg9->^y8tDe8|5sMol zZBVZR;Bl`72rit_kFYv>=%z#6w~e!D*0BW#Wwf(;2PA|)RE!a9x!>RE7%1aep5DjK zlFrJffjnkj!y^D$_jJ{U?M!HG&}_)R@0->0--lZ4520ylbH3A$r=SdENNaz^@ z=knB;Swb;?;Dt)sexTrt^`jDearI>53EgI^th&Zajh~GrfL{iY~G+9i=eVD zuKxQhcsncbVZ-ioVU1jTz{4i^BNpc1rOZuKi3`a*t+Sf6Bp&pdWW61 zdER5`QMwb8Lr7Hvq%IvlHXu;#A!_sx#K&v8{80*g}p4e`Drm8T=D6+sti2`%9 z2T1`TZ_glVk$PoWBpaUBbCM7P?{mQ;;>9bX#X~g;mkUdo@iX}89Zr^C$fTG&P?>(7 zkN9yRK0~~gd+kxTaxBQgKs9td73tyOEX=d}n5gdMN|z;{;Bqe9Vp5D-tDVmn>7VxT zTkHBDm=RC4R|MnrHw0 zs^`MZzfgC1@@qW(g z>to|bw&$GuN7;PP>-n_r_p1+XeBOOBVLqReru$Jo0cuJ}h5Y{;@WDvNaFR=i9A__5$$i>SEJ4yJhcX>wn^tGV)e=Y zhSQF5+-E8El|}`x9S=Ugf9%|1%}Xjtp}+gxc#i;jYc8ZCL|K1kN3J5iqaXM9L(5<6 zM=6#L%9+|w;<(C35!5Q;fSK%gfEYqJ2lXYxf&}S1BLazHwR!;4$>FvD%J&{+3bnE8 z6Pb=kX2m5&{r7_ub8avwg%T@>O89d894;$?R2o8J8J_ScZ6*%Ro#NQwpwwWb+M*~o zFkj=NNFAVq!4UNjx~eV2VZLIC4uKfc)#9f8g1I(Uvg6cg8U3%|Wo0r_I-&OaagKD$N_2b0T1EdEyCuE-WPm4D0dNCw zY9-AO|8x!>8rcgN=mfo{im&(OqhkWGI4*(6#kp+6YR_U89}=^t)kPsH-Vp5&x*C}S zSy07j1Hrl+hceR@CuZZ~hg4zbjm9L_9L_!Ek*zPr4{@A-f)0HkN{>NWpW{3#aiaPcjqs34%XP}cw?c%;slrQ@Uye~khB}Q% zQ1v3nz-_FMXIHdom42wIDXn;nar8UPX)6OaApLw}l%N#aOu3Lojy2Wa8E5X?!dqcz zo@Ac#Q;;0;^~GE-2i2DhAwx(qKs^Vre=f19;b0d1No0IYlY_YA>4*ExS#_wn!ZG^PGdtdM81wlGN>^t!)BioukoD?>Nc=?D(RIMp`H; zFQ(nhTCQ5I?O$Zu?=)rR|JsZo=b+*@;+{)bWp7zS2)@F~d|$)GeF_BexhApY>D&zw zYEF51rs=9;OdrER#JeyVf#J+<(5I)KO8I#g(H$>#2TL;J4c`nlysb4+T@a}ZaFCM> z$4N0DcHDv&<6e!CVwJXt8A%M>p`{AGkeFLaU02?LtQG+`6 zf@M{-_?_f0H$sk4I67NJtQp?&8HRK3P$uNb$A3@v1zoBPx7yOV*$={1C0F3aHXqRB zgxZU9K7%%$p#6885;pLEG353Lq4C?O_TO#Z*RwVEtj?(2KeI;WM+UH+U||jo=K(R> zO;(0GJ1Qr2W>rbwIV5GrS%xa>0~P!hVEw*1?L*DWw7}3}w&wq|T6OA44cd`Es!g?T z#);Z=P$aURWUN11&51zNf$uchLs6#wMhK2ha)GpcX4vv+m`a+> zN5;<7bdK)_@=XN-tmm5DU|B5yJqWumdu@uI(0YyYED{pc=8h0yV%3jnj@s`Je!h#X z2c2ju?Iw8+zzVDeSK~#4?QFx15ynYJ2sVc{_2`b{nB+qoUHuQxl5If>7L&ZU4q%Rd zei%K!Q0c#5#HScs&TWwq>>b`T(Z2&qri4`UQO}z0++~Z_0Kg(HdJf!O52!!iN{)Py zc5jGa8^BW(r)+}MdQK*tX_e~!_bz4P`Ze(Vj}MUg01iOdC1gxih|t<2*Daw=eT<{s zyx>j_@Q~(wGXN!GP!}cGod~64G=CGMdO!_n;|j5z3bR;iEThTzlF$hc7ykc_kzW7u$~0q{s&V_&yq zWek$r3E=VxC9QIs{32~34J&9o-_594M$`PgGnTF;FhA5 zfwiiFE6sBW@7K1GHaKc-ZqwZEsI{j}>!73dp*HQKjyfmXbj~^IUTo97;;4NQVeiY= zu%)9HtedOvBIOeM;9xI0;v6JabnG6F(Db^TBEA9NON|js|L&;4b&%fIJ!o6xNdNE+uY%{ z-PwIlhxZ%erBJOU!ald#!<^6NS07g<+vkYnH%dw;tePM2cn&vkJUG&y^QexhL18G#4nk!w365L3B4v#pgRKu=9e>Q{R%z^Gz+TrWps%YRwUa{#!s`}1vA=7&oAtm$OgQoq>(H~qU93#L zUOgY5xzhbBI=m)y#!}7Vzk7v06u$v-X`V|A2P&sIyIPOI8sYq@n72h4e<6`qrV0>!H5) zt(F@M*nRC*iFP=&BYQUfRrCr7B&8Dab%N+E1%v1zGeBlnZ_Eb~B0{@``cbX&DSq*& zGklHuvSTW&OZ|(1YKwsMQQ;3CF}W1#Dx4(5u+YCRA5+vuF27p2%JX>i)#DpHPh6Q# zXDSO|T>l*`TPM19<402I%MY-J5RYTFk^hlTyMlTp4Ogpc?t9kS4UkxR>9ety%>?S- zAFyI{Ac$of8DiT(JC*uM1tI@YR>TxxGD-Eh^3dA5`qF>r9-X)Kp=$u#O)rK>r96)+ zoEB9b8diK_-MXO^&!&slnyxHs?zz_7JfB`A_WQo(bq-52r%da+NJTWd-h5tds1Cz4 zBA@sHd23tS$knaqwmW!rIA7PrNz8lcI`u*A?$^6)yxKSH?>G3kzxJEpSXsLioD@3h04z!e|mOjFmB|F_x)de_m{k-$Qx1>pK+}l<3>Ic7B?mw zd>**pc;M$Vx%|fDDxZhy2et%z2gD4qiC?!qhjb3-Yy%F^g+b4c7zoB{YNKvEz2ft% z=f<;JKF^15JiqVr;_;0akN;&PZ)CG?Y^@U4UgB=czuxWOCF=>gWu&;4w{cp1ROWv3 zm7nkI@|&}(d|yZ3e7(W<&E}hLw)?)_bMx&%-?>9K=Z^ZmJ9+cnImO$RD*su?Ybi4s zfaAwuU!tElxh?3>e+ot0$&X)dZb>@Ze`A>(c}uS1H?OtCY`%F~Z~qjvj&muf;IY;I z!Lzvc2Sm}gemppn2pN8_Fe>p(f12*?cLuTivUW%_E&uyTqaPb?{kd|m?Zt%Oi0GZh zS-Q00-;<%AdL^DSzkjXI%$O?qu$n}()iJJDlB7!|i+}ep6Z;Dp`awGz1Cj=dT+?Mm zsV2e8j~dY<+dL|gR~)m5Xo$L6v1#Q=hs2>u&toZJr`C(no@+h~QsEhd z(NdZN9+3e-rKHEJ^4%S8!Z0Q44A?)OqFTAOmeyg+aBQ$$yRyjGMbs$gB8*dd#TfXu1;%0hzFtZ< zIovq|O*)}ugP<|}6l4LL1C|utY^+1&@#gL#Dj%hX-!?n7b>g-~ZE57F)voFf=WMI9 zYoY7*UEQQiH%FNi61HA_tr^F@df{XOyF3tHtsQ)&`O4ImSs&B7sw<{{8yoA6hNaq+ z9aV&>eYn&J9xt*k&|-0>OY~bUlh78ihbe_nyrpPDBQl18K`Mv#iYZkr3NE0Z&qe8` zWG5jlc~y+HI%zc#a41t$UZS7uarZ)1q~;wW_O{ z=^P60r@}Q@;o@TQ&M`3rsT<2uMzdBu2~On_V&`g$?Vrx2e1O&=ty}pJ#j`arTr({- z6q|w2jM3?V&Bwl*XxR0(<-t9iEbo`8@41nUl@_Jn>W*3v=d8L73S$yU>-p>6Xs;V$ zCULcs9nCe@<$9)k(TZZzkM~9MDL9ofdJ3+EdudQ}BWK+vo#gbr5J<<`l;1`cCuE{i zDa><$waYVsZc6%38h|)=)aU8XXPNiof4$gy5M?r_VKWL>&3ZDp-b@n1&5LJw(wo#1 z#ORMd-seQGs#xf&I~w`3KmIU6jYU7sDy1V%C6)dz$Twvb6=-kZ{Dy09EIsx5`kJ!e z1#q2CQ={bQ{KV1(RGxNMBmDQ;2tazO(CV0&j<1vckzqH9aWgyVrL4{*n6b2gnhR-PQ@{P7J*$9PIDhL`fs8c3 zFF;9qOLT@(qX;b!brzyST~?>l#iT1I`rw41WON`^azDH(IMBYL{K)h80~!*BmINqt z3gD5_7kK~TkB~f1C0rj`>t-AqU>B9mBiS);u3>rQ#`-|?UQ@{XU@8n2 zK!FghGQd<~z9D&{{L{|2Ueh|OUYp`kbb;8^<~9UsI*p0#g=nV$g;ZR}A@|?)Q!QE! zeYS{Yi_4xS#Y%%V2Hay0Sq3?RvOkw7gfaZ`h z2a`muUa4HG*z}chooF4rXC)#qKeQ7I%ArRk}LKc@z$_Ej{P^mHapoM6{QLcxt+k!b$FQF80>c5YHlcn zsVa~H@SVHQblH45Fn@Z(KV!QzTihu2@GwLR_o~~L3AP+nzR{*uz@|oCZS$I?WaCdqsn<-?A=UPQF(noW_))7#Jo`X7%SIMi&Q&t@$za-iKy#U=<+i{} zOlwnM!&PUHSXAozC(wTT7!!lt8Bw}Un%XTUw_$y$ekF_u?K?4pyN^sC(uj#5IsY3` zKdW2{xdiUo9%x{6np<=%S#YMc=1!URoow-*mF-b^rZcRdk*9N?jc{HoUcT7_ibZ9E>M4l? zMS&%G)zA#S5n{;Z?$<>vTMrOp3XqYLGn##}!BZ(>h{Y73>^;zJw?Ph*g0Db6Vh+dT zXTyxcHzL*Or}KAg&NEn~VIX?i_FiO!GRf#Q)e_X+cl*vwW(7;4k%Aqff+~G9mOYDy z$-iAYRQ1W3lWr29#-R z^f3o^1U7a-jAjBn^&#rv*qwrh?!{O3k>}@^KVLDc`Yzuk#8B1OOom@tV0QypEn4tj8ijiPyY|dTOkB7&wK`;q`l3YeD*HRej6%6QK1&;e}uCOdkEysq` z$bnlkC8|ls;O4gH^%Yi4u_I->Uppvs*P^_-V%EIBT>chTq{mPZnIbe7&%@QvuF%k? zaXisy<#YBEep}fK153e_pT7@nH#k}ozdl)EotPM59Rvj_MYN+3s5WW)qQ^SoM<%E;@^W;nNm5BR=_!$SCt=S+C@! zv@;)DDWlDpn`CSmv^bz{e^6cDTpjjZT`*4o-Ka2is+PI%lA;P(m=a!OB@Htgf|A#D zNbjOcIAk7Zg2+P^0Rbb;4XrEI>K4&b@B229u_8csBvHjssW{5)7wz1i8>@ZcA*|Yz zHsgxa_c(+8g6~HonXfD=1*qYpJ_r>kj0Ir>FJk2Kvm8u?x$#*Urd@<8%~J^xllGA3 zgDq$?M-HWv`SfiGG` z_|`<-2?0dAO~=1ZYyZ63xTC?td5ZvW{2t%3I>JtWrju=~afGO5NUyGT%^Vpc-cS{ydVcW@r?q_oAH=rREUak9hmloWnux1JD&5 z0LB4O0tN7AVmWI79a4-rQ9d__Eo)OZSY<`Qebu@9$tbwLtvNPW>RQ%UgA$$;`o z`+JTyXFBZ!J3~mjB7QW79F$?4F2Ms3*j&-dJpvS?1@19u-AF@b(U3)Q%S>a8p))4* zhdi_^{8OcKslTQMPZ>Of_|qvj2AL-x1o%|YjvwnIbS+z75y5qhIo;%2G=?nVpoe6n zozv4E0)QyMWN}a|yjICYtt2k&?8E4fdH-@HQLEPIMs}@8rBh5rkaWNy^oMSSt5YV4 zu-DP~ZYE8yIoiO*rr<}y{Ess=IFv9SpDNbs9?ZswfEf6eeH4~r4>#;P8lw-`7em*a zr>!|TpwE~#(x)w*Xj}W3uUDXez=mMnm? zxLQfmu$IrH-4snGfc`TXT>?!q>-HQ;)Ssb&#sH?2XQkM=@oxLZ|9&{1bW09&i&)j2 ze%WnL%}3NntCd5*Lzvr-WC5%@P^4VSZBIF0K?^XTA#*k3OuAPHAaLc%riM(Nej=@_ zLgD>0`h2%a;O^wwpXu;D>_ZJ9>NL$X5ju`6!U;sJWOyV#B}7EZP9%-xL2?333?F6W zX?iYf(j2Aeizs?h5hnP@w)vmdXS!7qCHhNlhR~A=_NG0%%P$}UDk0je*s3{HoS^A@ z8oG#uTnoSq%SbfAroGe97$|0Ez>Y)Er27*drNBD(Xg-wo0775%Dm=NRo)hHYyeQTIr7v}|SJ3%gSd$f($jE%p4oa*yJT zTKT7Xi}y=*>xmFewBYSSdw;ycq=+a{icdx%0#XjW`h=ixPrXM&qK5%Eo+D7Uj380B zEk5&cBenW4I@l}2fap!OQ{>~>M}K>mo>@2w(Xj|#2&}EjATiDXqm*#6e+(J6wN@*b zh2AMhsh-7TIdb>ZAx3E^$q{{T3aH6Ke$L)+pnTChbrkA(e9b!Ztn(QCJX*3_?iv7B zL^ft8!vh4N#(OI=dOgpQkJOg9@Lpl_MW`fzG{)6sk@$R?`_*5SwO98?@2$S{+f*P# zW*5R+p$~ULU`zp=Afm+79$YCSCUivF05QegV%HRX2|kS&Z6ZPjvSmp-vjho z6ZI!4dZuJ#vPk{MsdHgZgCWZhu(d2y9k4d*{I2_- za7#o7sTBRS*HqadYz^?}lMx0I^@pZ)XUJf{zNoLiPp$gXWVZT3*RtcaM9gloa}^mG zQ3tQDLzjr6&H;#cW7IZ50FS2q>bz?}M(cS~NV^FCUV!V9LG%G+svz&OZZrIJa?ds4 zYR`Rnc?H`f2y5=}(=+&t=)M|v#SD?VAd!J0t?!U2a z&$SnSZ`{3oO%=dyec%QW0XGLNUin8YanFd`qb5Vylhx%B zMix1RYb(3-BpM2(nE&qhuGj-QqS{K+fhVU2j(B^0sQb5-eE8vM4Et+}K7gs?h}O-Z z)D(c+m!M{z16WG7=^2accxWL-w@#VVDS~K=_Bxi2ocTNQBF^QVs_|s(jr|^k3h&!GZGk{&sbFh@GZp$!6~RM9Xu2 znrQ==3No~eYEERKnOuDdg=j2*?BpQdERM(jd$?=(w$lh|ZQzpi3?i9qTraWKw!DdZ zVy4YOF7`c2NJ15{(cT>WddNecnum%1p47hB-BcNy&OwFPz04LChw$IadH(r(pZC+GcsqtA$BS}kl=7*wT*ZM53 z)<^*;Kq-Zvv`nwv^Vq><_RL5F|j&pO=Il8w}ZJK^Gwnr+nuWs20wP7_@iB1iwaCUCvohIxy3dF8jIJv3`$d_KgreU{C+Z5Qw|(bH$|5)`6qQ?k zM-!GbXB0&{Fs@?$)$qgM8#5w|o*>f@(sf024Z^_=t)=e~=M)xdr4>nyq|rQB0#~*| z1eDPp_WPPS`9bZuU*aW>YdM-DTwRch{rK|x>ZOJ9bLPZ)cv5Y{xaq5;?4Ndh$ZUlv z=gWgV2fxKjZfrG#FHyis%in_s7t`uc>;teEy5_xlQY<%RM}bc*?pr4Cckekf@Di%< zzCP^_q=-{@dua(Wb56vCVRgNWsI`&;oZhk=lw;jMv4%}-A1V`7rW2Y_vk(J5YK^wU zkv%8;iv~@U^;6OJk@E9FM{FaDvuJCtZq?8q>*YE&N^1iS>-vYS}iIzl~gHLwS;i8imbR@ljc}*9BMdP@T?zx=m_nC)eVhZywi0!Pozm*)}uX6Uwe6dONgz`1nm$(Z)u^s ztWmSLu=}W?;~%YeMi8^`8d@nYpahxv0dy5{`+v;59y{%Ikl=Ie`@6~JRUfCxUS-x{ zQ)AbyqB0`>kb^e@o-Bhn}7ZW~EF6cvL^Dl#q$PAWD(>p{|Z;wgNgmYbvX(*D)! zub7D6}kFk#Z{KY;j68?}wBIJ^GM2poXmHNR}I25Hgfh8#@7OrA_QtbHSCI!~1{b zq}DBW6Nvmy(IloOr2&zw%GGMg82T#j2)@qV`iMc5HF4riCrPVH!Oa#RrH!+2c@RLu^rcll~B9d*9c4E4SYWf0Ax<(Je|f|FSF26N+DBSstL_ zH3bZ)UJrM(#Q*hauI?l#AQ6`vhv- z*d1d|_d|EI+-IhEwr zcmb-i+A?h5fUCqJr+c%zKX;hM+V*E)G~Mgx zo)11uN`BLh`{DaPb^qrZ^}>0U-5<7Z>E0d*Q%=rE_m=4m%(&uQ>hZ)CeU;F$NHxjjS(Y2>lyvtFjKhdZrqSEMSSt5ZCXB z@0Sc16|&_>Bt^6W#%Me=Q0CvK%TO&L7nm;Er@77^FWfyup;#WG9bNznEGj$#h!Nu>4ce7LPBto7+B!Zs;PhgJ(&qultqUo_{Gck#&3Yq!!;%VH*twblE;VDvw59XLA#lvH3PdZ${Azhy1p$fm6tLsz;i{>P>v+uyUgr zHqX_$B7DU4?hMN>khErZbwr3iTWY5_2Wfo`8m|6qWKAl;N2$Zj7r6Qp+W92Kyz9x5 z-JSJk!oO;2#;&7!ESx5cjpUQ~WX;aTLEDtJ5>0&>kQ19_mkN2U)+hq7w5Mv@)|$RDgk8Pe zCDz<6FR)0a4~@1v(DRi;+RvpIr;l*Y9Ms5@OE~a()h}tY5Aw|hSfj`yx_bA%Fs=(1 z6+o1uDVu;iS69%@^RfDy03lqXVDwYwp6a#p4WZKaXV>w0N9VfX z@pL|JnaNA4RDg2rWq<_X+i$^(a2LP(sBOOBg5|UkzE=!MeaY4_9UoWXq1Xg+p<}Q< zLfL6kwai&xeF%c6PGG1`4!7qG{Kjmcj>MjP8*gk%PNG{%G94Ww%|+it-3z^WpT4k=+*vyLJQYqV zAtKgz_-nS)5Ke`DJd(yf{GFJ>`Ay>x@A$so9qb{8n9RiuIRg0dFCwR!>C#PONjRh& z#7l^}^1OpOjdR{Vwaf1P{eLG1y)ZICLY`$BqO%)*PnoZH-vl7adnhRfVC97EX68CL*2v;y>-FcQL5W54{b-SNr^(1 zo$x(U;DqKQ8vvN-B4${Q9omB%BI3G*pg#wmEzSA188;+_*bosL0i1|~yG6wviouEH z824Wo3He~z0@j8PI14bxi*Wxv&S@k3vRF9CFX@lL+6%!jIcyFF58@j=%Y^%i6zKOf-aLmeEkXvdtzHQT z)NJK7!>h93n|I^i$;#dlRc44tRTeZ%j(j8MnN<14`oA}-s*+VyGFARHf}aQ z29UWiFscAE$i#h40o!S~AvqXM+oaq=HYbDEn7I23prMlI0yO&tSYsJ>K!7!uLnKsO zD_L1c0wXVB0@*+(71zh#VK0xhB|`0Gm;olPoeG*0K`{;2O-(gn9yca}*T}eAa&Vmx zG+^QSiP*H?kajtCs|ehp@Wfq_AEU^z!vf6s9Q2_vW$R|>l!tXR4elpLO!5hjS%?6# z*(MqcMTXV02_K0li~vsOzR}m%%SH6glQ&3jSUYG!cd9OBVAiI z$#L&!_&5CsJk?OV6#*0hQ{RB1r~! zAeVNtK}SBA(~#pJ!}QCr6ynJ%Y+SogiHpHCT`7MdF}A;;ezXmriG+9=oI8~2!G}8l z_|IevL7t@ug!^@%=TH!b&1n}^p&3-dVD0HpAq&BUqIu9*IXqm1m=h5)~$GRUn}vjQ>Eo`Bg(STt84}PdqN6a+LQLV}T&`Qfd3>;UQ(F z27i5vyr^#h+fD;51Yq(C+%1-_GKmHed(Hs>ZvqP3QA?cGGK8lb?2@0imcznnFo-(b z4#1xBC@mN{EZLXP_!bDPHgaXbqFI=#bv!+7LYx4)l7^U~63i`C&hNbtB!q=k5#&Ub zw|v4&GQ?X5K3z-DD>;3`hU%+;;uzmbuV=B0m*8J^Ma~BJDz_Urh!ge#U87r}kd|-bP*i6M1 zufq)sF-fwL0RVSj_wsiIT30MMANQ;>`p)G}Hm*$wZek_6vtY}m;5AXt)@R+_G;EUy z<}ZYP##~u$3cbK5d?pj%?u2*zE6b<|DN*GE6+Z*u--rm&vCz|OLg+H~YoZG7Fmx-E z0P(_467g>Y1TGok#KF(AiK=`cm)ti^RRX$ridVaf4CXLIyhz4BCbN>4a@lT|cKXxw(1s2goI1u`x$vE(bRWRh{IZ2^*wc!Va-cj_KlzL?D$7HY@-9 zB4X*Fu#$GQu3y<7m4lstMA{3wkHMm4dk3Ugjhr3kw5*A$_>76G?li;$0pUC=#EFf0 zC)~Ki#=IpGyiWiQMEu(KKst@^mW5HOnP{c=N5iX%pfzlQ@^%`@0g{RMcVv``2=SGg zk7xrtev%@*=ojqC7Bg-ExRu z8fYQhY{ahY1G=xcBCI+7@4wjw+CqclFl)&$meSo8Zj9q#z6v*DWUxl&_2^i{8#X~{ z8RFT9@elaX>*%ile%QErPCk_RoQo*enqm{qvLGlTw1#zUX9<8ECML;o)8u6(p%Z5D z4uSoElA8_#pmst`56#3FFiIpMOsR!#q>58g>hrB z!H1fxLU(wU;GzqaCmHs88a6r&XClCiNKY2oU|H`l@6vPbK4v@X=XP;$M^U(T;>|nW zMI*w}Vc~&`C`qRfH!K(5VPiHbSYX8#+z@iA;~i+}UD`B-PGs+TUt{?v6UyS?--)hG z2nhRh+s}v)v#e{-&4i;j2$OQ;ePX+ejGrUoXGDZ)Avz*Q`8a`J!aV)R#`pa_f>2V$ z#G!ZOr|+1A2QtD34t})G)_gbdB%Xh4)5P$R=V@QHqXMBeGDsWEkSrG%wSiXhiO>5% zQ`){}5%}0N+V_P9xXFzs%Q~C>T8^VC~_Dxrpjsck0Yagb7K z+Z-F8O)GmRLU*kre6AWueEw{k069&(rfNt0tBt4;5~z)Yi){QC8Q~QZk(Tb4GkD|n zkvC}x21je5{6p})p1M%_zIGud+X>MwSE+w&*hT{jcl&p%k$N`o-^)ktk?s%Om75c^ z{*W8OihA0BvV#~6nvt_=C>DFo&3s9zfqQ_fuSbukq$SM9UO5iZ9>Vtj#j?CWGby-2 z00fF)etQhbo52n1cGz=v=#7F%pc)gLX2ai%loC;*1m&c^Qe?$R^)`^V(pd@^O$I0@ z3{YeX!N)B9pX=zN^k^9@N)Bs6uJDk-(NaL!LwAy9rqsjzBJF;?3I{V0){qfA7r#W? znqKzhcY=ZDk5GR(*hG8_DuX$iG4{;!Mnvqk>lm-3T?cdDET^+!7K9lZ{#F#Gd^~;T zH7t{{!xxN_!K0>0h~4H!fin2>T(~zaJZTTm+706OtiQOs-(zc7@;cltVBks@7%p;X z>e+xKB5Y_o+OKYikC1c*LZ2t>v?U|v9aHsg5iQS8>|ap1dLm!R{4xY^CX=$iQz@*% zBl&>M$?s!?SPU}uyQ{U%nxHZ+aA;BG;yU;$X0qU+Uy8y|hbVrU0{r^(`Pad7+7IhO zM_*1{3nU&3&oZ+`SSVR_+PfuL{5PluQ*|?%Ny&Vah+@K<&CL$GC9VXZjxw0~E`Og{ zf3#@JhNDn4pE-xN7A2r14LLhEU0`v8*cNG8%fF;O(2%fMe&6H2F@Y@LyXu-rfx zC9|-o%5m9#L8VWIvYH)VAO8^y!J61E*s9aiO=_xk1(#5~HzBbGrg-~oMSVj*$$@vI zUA!gRlGyC89?GeA)Rr^+n@G$w)SonmrOKg-D&3!^t-;l$efjd{>RmA}3EpNSDr3fP zTYKJvC?!dSFJ0hmh9V$!$Lj<%p96hSOq2z$z-)4SpPK;voh?#KZF&3X{DxOgpZwT1 zGv2$`^qFc^q1~@+-=WIF`cmh48-M)~`|E^gPvNN@8`sagCN{1{w0qx;nRX+fPUNI1 z_4Xt8#_{%s?dVpg$)-Wi&QB3p#q7}EqVdkj5^m|~O&Te|#mzmf*lwhr=!K=@>Xoi$ zGjBVth2A3I9fQWkk59_QXD&X>JZ!8SU5_mBbjX}B?$XiQ!PAWuOUmntzyID}G;DMC zZoSul`Q|8}TfU#8eDB3?zP)E~v#XMkD;Zc=(nOK4_ZH<$;2g`<{gkx@?SCx-o~PI2 z0mV#aYv&2hA6wZu>pWeY|D)0wX0xNfdfjfvmZ9!FO||ss#l#J@ zyNhe+^t9cV3gDsQHbL~nT)VGk?Dk=$dw-GRx+VTfwLar$D~4GLRncWAxUfLp7iro2He>C7smQaSxfQGb$d#)FZ{wUdE1_)(lQuur_|%0uUnLafFDPz!t6_D zi!m9$>mELn%Hxwa)(sY!3z*U`OC!fTqyKvDTD__J^3vl}$;VyS6ZIzR@7^eS{6(5Q zN1ZzyZXs~(!N%QWbbTn2{jJ%Rmj6|jx9Hz(xa#1P>H}z&rb49zq(W%(7n1W~Y z0g3gE#@O;rL>bP5TJzPf0c$n!-1HnzVLb_9jm3~@ZNLJ)b6n*f$9=|${j>`KRUXIc zQ%JN)>i45(^BKOQ{CbtbLBcRUpyazcc$44$hn&w<)lFS#bILLn5yKmuZgkNnUBZR#0e3 zmltij$21)qX=Bbr7tf!vFx?5kj`68Rap~|a)eO4{KXCX*&-gVp!^#w7%EK5_>jg*UdNUd@DR%G1(a7VR`lSI-e}ZvVI9p1x7)<#)x+UYLlw#BdYF@ zN%P%@YzH5^`^DL)aSO|DtGNze0I3Y)KMsc(@Y%idN4VF^4cs9^l{#-mi9E_&xUV{o-XOUf&Dd zwfv49sk%$_v5>PNp^cYZgLH|*j%JT02jq*aqbIEw{zt>)9iHi#@w%KsfW5-&Z<#^LCP! z9FT8!Ynsj#c(B!*F?==8nau@)F0NboWI=X-kqpJpNJHNKOPgXgBcGG3Ery0b&83w6>#@Pa?Sv#Yx8C)>fcJvmt9s+o5>(=>GBUozuQ9vGY%7LD&MQzV>KymXwBTrwFAS zXle_C91p^v1rA)v!6XW$4w@>d+RdTgD0++-{Bif^I?w^C5xbuG7VBgc<^E>7D}uuf zF_ezQfX$QZeB5>DzzD)ga3Pp|#bapUTJ7nkkEd7+nGFP(1Oy2d zTw4wqvb2aWv(7N-wST`!9Y_XoU(Tn)_vcpncgRpA*jg_|I2g3L`^Q&LSilpNyJmSZ zE@CGW{%1MQtD)CHEnCY}w+`)#w30D&Bs*6+5Fig3S!A4b*6v#=P74lfhIdsUkR-nI z7X-RA2)E1z_cJty7*@_^FqKj#5;9(;Sf)~lbg+SsQ)fxZO2u*wI!Orbtvnt(J-sVbQjr^`tUmQVHvU(#X^ z9w`4JaIOF=&sqdC2ky^Uz7d-Af-OuyH0cnM7p?9t9V2C4d zlM~@wCwIy70gwTGh#b^hxlEsK26-PoE=KkPb3}m0NZ&3AVFM*> z`bx}ON1SaHfhJNUssBuBSF9L8lT@ImNQ7=({>(F+KoteHF$;1Vt=p% z%X9UPTFZUyB$@aT!kI258~h2j)SOhv87Z|DBgg=To*_NXkd-+K4MAP91axM|xJ?Mx z0KkGVw98=j&1im!q{hBNARRn22f@s9KhPreUk)Vq$oab4j(LXmG@Lak=Tcw{2jM1y zr@tS2LIlRTJ?w=50tdMKckKP0+YT>o`#8cF;P&**yN2C9M>gPf(gWy^1B3vI1G^i; z8KrWfre$t`48cJ~vE={>@B#`2x16_jr%Mfe0dkXZ}iHfaWCWQXN_p03t=w z?OPOyBWRHXw5mO>lKoxRq+A#WnA<2590X2zEKlaXJ(U#>BB_C`%TS9lY8BqIk**>s z85SnOV8e-%?^{OFAxzQ?Ko_1xi4dk0iX^BgU0k$ER76*w^M({F*^jEWVEk(j8vbk+ zC+npF>hrwBflgGQ;xtNFhyY+cv0WZ4N<_8DFm!oDzdTBf3bch0wJc)@6`@IrY)A2i zqKyMkEg>kPNFFW*M9~*Uo8`fVP>3>|HEAWH;>dkpRpf?Zwl zC~r0?7cp=}els4hPE7(vfYFe9Mv%-)jcD$bN2pMJz3xts%orFu+dF#h$!(rs-iBLn zh)|Bm8*4eUFnHzxy1$FpKlb*?yq&)IhKhumxloe2g~aZfOC5BPo;!v6-`o%T{9KdPy8d`;PQ)ZLIf~dyvk3$>d0!o5)~{=WE)%YMxIR1 zmnR>M=KN=uaV>Un?iv6>g^1VOq`;+f*SI`^KN|zYij24-({PnqLJP!+cTl^a=P=k-`y-cxAZ|`+=g`rabh#}AwB<|CD|2+)X*<7F zV%RR`+rh+kg{bR=TUU(}?)A>Hpeou3dBIv+!P+QD6h;@AZGFvB~;%yV?>pba7F2)LTkxV(eDZp2gI5nJtQ(yTv4h{(HJCc zy9S+IuN*r|DF~MD8oAC^fvk~_V0(6`SUzEF^`S8f(7<7I{;1E@O9{gu=egUETt!A)8H%m>zT%!6P+>cD z*Lx?*Z`)mi?rd)mp-n%Ba31W!0enHmGDRFhBa6Vj?7q?adesF-+>%wj@VbyV<1Tq{ zo1FjmA|f3K!vYx#o;hEU88PIm6AWK$K!$BJ$l*r7bKGz_J{x{x0ezg zX{DpH*w1;e?R=P)r$`Yg9&bgE(-0;bK+|1|<9=@|)__>XM)R<7G`%8|s%*BC?6%icf>*~qy7r*NQqy*{T@Xf}#=&^^gQ~BJR5m7k7M(N& ze_a4OmA^?hv;z$yvPf!Gp!8k}K3OQ=MTZ@5vI`xaUp;OF_X7waygEE3qD%fg1r=xy ze2Yns7=fqbVE3WThHqw92tL1Vk=4TGk^Ly^^Qe&7-+daMM!?UB>Xk&vTd^H{XJox! z0&K66az>^@#PZ-S085fxI*a)5fI|s((!={{7yfHF7?rVMnK&^$3*qffJf1s z~r8AfK8lXF6+km|uut5TOYv4Ik1(70@p#N!Y&&@RB4>z*`7{^Oz zR61iCp-TufE|?Lo=aw2;DZM2$ue3q+Mu$Jk?H0+1uA3YOs+TGG!M6_FGzD*x za|>;JGCF5-j2_Yr;ZEE}#EBc8B9~H%E8;%J#M(a}+D$ka7G`5Y$lR5}RgsM(f{ zH~M=RrgOee&Ao}ewHrd+%p-S;I3%|Uo4Pb%3B@rg6!@)=(0AJzJD)N4YjchJ^6pZ_ zMuwAOkI97!+qtU;X+($Ul)Q?B>7{4WZw0l8?#czdw!anh%x>$yTLc(c>GD{;a9wyc zK(ES`ND*_a-B?pdQo(|Q{e#0kqf6*)uWAk@f znxGbR;&w>+3U)Ms0o-vUA{$I|1diuJij_{gft-HFA}FVa`ioy|gCUH}@Z%N*)>U&c zsZz-Nu@Z!)*+w#DzOmv$rW(MW`85vl!u;{w=jbGyrpup$5zZ8M?#UrceBS-+us?1<$$S6itGEkh%Gn7Dns$hWL^~we5HzW+^M(Z_0 zC=$_zObuRhKB1}cbp4^Grsi{_P0ek3WN)Mi{~sihtI>61&pz(HX=Vh)hLEG$0bZ;J zDVBeZ$9WNNYFM);QQFvDC~2X{M?FV-Aw&@H1_2j)&&Y z9zx^C^F6qmxR(f`SNjaY?eK1KH;%dBtIQ;(r@e>ZT+5Knxq-UTN1NNOlVQQanOoi+ z4WTG<#($rY{6#<8Z;-qxq;M9JvC*0m#}L9&tDnUJCkuCR2&+Z{z<*nbK0V%rBE6fN zQ@g-r^DdAAL71v2o(=OLJuMg9-;xYf?W4$WfRa+*e+;CH`T;$LLejxQYsGUhfLMrU zSqL}wk})>LxLaJu1UYHf509QqyWi^i=H9M`5d@bmr4b?0y%K?CKII_@lI9sxx$mOltr1?E0@?NDhp!VF=2_cD6bgOzi45+tl5h&}qnBh%{s~$UXfnT~#=br^Ui%!uKsCwEZlD5H3J~p6y}o1>-mwUnYC{vO~AP1t=lHcYvHDe9pVA zqE8253MhTGs-6^Nq}kzKC(uQu1tJ+ehZ%U7*Mmo{9fKSlW3AC7Ly44;1RfD8+ycf4 z;cN}lrxN^)HjeM6$oP6^R1{uoT>P7KLO^1P*sbW!Jm&Eb(8k z!>wCVB$6{tDpfB7s(~eu@?AFD@sA(9#Gz}Q%pM;^&k;!X{!@v<{3Vw={(O!Ps^~Ur z8i8>EkkLY*J02&wcX-10^!z7lV~q2xZ6)J)tVHXUb7xPYV+=lpG-${-o*!|2XK(zA+f2<<(f$m;_>5jIU8T_hA&h!Avm1#S{oUv$ z(R3Q;xluZ!kd`J;%pDyaKJV#3Tq;Ih8@`;VX+@Orby}+}LjYDx!}gH zB}ISc&%DrJc^S_vyl+^#iDaTKOR~-5bHLI6+|8EYK(NQj;n+6#dSg8*IYL zOz(IdS8sN(UH(X&j(-~AO1^eyopaTa2=W-Vdbgm}5flPr(MxYs3sIpP9MDb-CM%^& zW;WX;6^2eW#7%*wG5$qs7bM!G1^V#p3b_}f#fUv$|9yX(LPjV+q z?8Md*YTM=B1_*bhetZ$J!mKInh1t^EZkVbZl=YYX=3l_HiI^QM@?+q*63A3JBD-w& z^~}a~-DY3?j4}dFv~RbSy8CV=u4=C@{ZrLT7fLN}csjI2Dy3MfJtKzpIoj~SBA0v# z9Zd7b`U(;I+N)7+N0xR58xoqn53)`__93+1%W*Pcc9>bG0T<5nERy`Nt$(rhva%np z9^5SDRf{6%?369ocF@>D26UfH0#TfWdaZ*MXpL$i?74x4ycH%4QkP9mS8x z5q}`}Ea1o81f4BTwC^hd%Lzc`iKoqWgYsE~VYXBHV zIE4t-gK}kmRKz(~ICrjVNABsv7akUFy+xLS3!j*eJ-P;Y?fV>)W276aX2^3>l6U7W zO+&t;-CbumXLp6<=Yoqb4^3!Sxoc%{_n7+5akGeEm-oA%#Y|Fz@9!gp@oi(57T zg$c817Av0)cw~?tU3`}2a|g{(n8ek90$*>U^_R&o94Pas;U zC4_1?7M%<~?sXqL? zobx8)qc7%Ek8iPpWQf*^>1(dj`gA|FmbyNCgF9}+%kZvO3(ss@43czFD0uys6;S}X zcDKZ^%?`AC=|2d^aouAa-HC>!V6ZfT>FF^%Fq z*twVA_3W#3O z_n~fgC0A#hq95PbJMNUS^pfy+8TFSu!jyE+M3`Vox^;ykEfe2_h9L9)TUV+ri5#ut zCIYb?aEwWFj;rTp;7%vA9Gf)ygEaD>X3-U^me&w@#&DC2Fmr?u^y8GbNpW;AF0XV6 z3M_9i8FrFVegYBEJx1><%_n>G(=wSaMP%u-=V-=OQK7sgeZ&&FE9y&ncBcD z={S}M0rd=&p&GKs4-y>$-jhFGvd?1!1A+{y@AHG%%sYZQ^Smf>!%F|1$In#g2Tgoa zLxi%ed^!IUV44?;tq%6<(IVjpM#*^8-HhnbhF{6cET01A21*suE!JneDzg+GgA7I_ zIFfo~MZ(hA0XxrQzK+myaAFmHVjy*R5eh9tX|exB8;j7Un&)O>!O|Loj z#up43qoictdWR;=iTyN^YWV$8*6P==sm31s37c>LO2x4IC#%c{^-FTgNevlfWg_Pt zR344`=n8qgx1x%ae~M52`4}*r0!;ZOXF6lgR76p5X0ms8OlK4eKfz0cV81OGJPXAU zQv+lt2&&u1+2FSFc#zcJP?$e`QI=J>m0@N$yVXHR0F*tc^?0CJtkci}Ky%z( z^$M-UENs!hFL&f7LfyMp?;#CpA{V?cnSHpYk6nk?svb?1@ort3(jXVWl_RkDZuOaA zz6o8;7#A47)}O3=+_Ud%e{^nw>08L-R7TANK*2#2RLd%l#(C#o*^ZO#_PZXc8Q$Mo ze(qZ1c8+Gz{WNP!Fy&fhehf$goIgG)`CzF&!)n;!lWu^Pqh44Q`8ucn)l$wrZTRLQoGdzPr))x{W~VJ?Z^yS%D*a3VH5CvxwVH+CnT^FD=8zG$o~ zhbhP0O>>McetEN)&R_U6);y!+tRWP7A4o560#Gk-?2-BN2J_l9UG9OwO~P#2+|k%@X0__}}mQ0OMd z-|g-#!X**+y%!MQf0CLI7fU5O%AYsgi5jn5;WqP2e|zzlG7f$tDL^rD>i%?VW(B#d zGE{C%eEmjZ!l%DBU4SDEa^7s(Xz}~mn0JeVb)$YoCQIC(QHk=2`WF#jM)(jy@5tC| zM)Jai%YENMm*RV-V900#Rh<~a%8maQD%=n^Q@~r_}fnRF@J7%{jFbBYdsQQ zcjPU}a%-hYJ{0@NcX(zAj_o63H-?dx<(_IJPc0@@xZd_z<`OxXh1+M!v2-`uM|h=t zygsMAtCiC3(lRN)l^<#S24!VBjh;FKwxKT9_WEJKizCqQNvm&1Y-SgKTFdP@SU=DZ{URh$QQA-c@#pWQkw#uk$LVt@osw+U%CMeI ztxxWlcb8D@h#*Yl0n9@Xn;w;@g)f6#545O6owgdKcj z79T%PR<`;uOM`9F`j!?3lp_5zxcRH(;_0OA)>}PJ|65rcx%1cJ-}l;N+*@7n_m_gh z{2kA>?O&O`D}8%S*7oI$^YEGohtnOzmWb~lc=oFr{r-_J3e+Q#<(2@Vr5&x@b%M|d zS%Sgdl04#(1EIMlSKoaO+JM__blKP;q==#&wAxPUd`0rr5(W`3R4^qTG#LyqpZn&@ ze_F%4VdQf2mdh*l{X6XWX1l}o{I-jL_a#~2_5j``@5t@p!b|&~U98%${mj_+GtKLx zdz%R@n)M(2jW|-$WBIFZm)nXbNIf}x_57C8%?HzK&_TJ!6}R|;{ipZzXex9E=5qJb|Edw{T>dQS8H~x zh*`I1auJSUe(UApBeK9`q(x74*!A~^RdAxN8s8uq}->t_U;28d7f8zr6bEO2g#>=1OGItA`QVq*Dw|7 zeCm};@kdb?Tw2DS_C@AtKfu3J`BF1Ze)XoKxSt50_HIIewnG1L{M;eFyLJ&&ZZ-r! z_W+YA!$=j5?rU#?lTHR2Ec=i+&AWx8Fj=|c`fp1-HN3ewFh~)TCSwK9Pn%}ExN=GB zs|;rF;l`owQGGL$KOUZ25=6MD__O%u%gy?idw;GQ0*ojLUNgMgAG$qqU_y_^s-Nf8 zzryn^FIEM8#hXzV>{<5ZO1SD4Re8f#A64ipK!$NX%&(E(b?~P6?lAF%16u8j-flg( zg-UIS9PU6EHSFN4o=zw5kw@)b`x&-cT}8;swl)nY7LZZe*7+f4-2j>@b*`rS*>eQI z);jHd%_r?Up3ZeCEo3i%ULkuH8G0==-#k((Phn)~pF2xRRYwQ!mrL*W#s*&Yfec-o;nWD34*rf$S ze#G`iE7K0O&xmg=)pOGO%9+!eo`DLMe_s5B)bua}IwHkAt53@BSj{HsMwlTH6npf$ z`5SH1mtD#>;}2ihVZCkrlRviq`}IHTyqxhH!3ft!kWNZVkF$Zt5qz)Z^TSHnXS)GI z2XNCyy08kY-X|Ey^8L;~WUIvM6CR!W=$3dU*>+0F3SD+KeNP#4`7j25;jt{T)iNhX zrbv_z>|wZ%W@#!!8V$5$kj)v{~(*Dm{I--Y>H&s`BD}RJ5MGC~HEX`uX8w(L? zZO^9V6ey; z$6)ApQ<5%)?EkQHmb-urGd{4(Wfd=v&ykIQQbuWg+IiXA&d-Le`+jy%^SN_%QjATP zRI%*)v`S$Xq*Bn_5!uscx-wMb$Nw*xDkwGkPS$E0gloHx^eF4l78!X=xwvF|ubh@5 z9tT`^j(|NU1y_j0Zmr7H{i`KhP_gWg^d#(90kL*F)->^tFx`*fbLsBHe!Zj_k{ zaSiHtQzyh`kj5?2)0Tl!rxXzrvkKi3-)fbd&QsCia+oMhO6>$X@k_pbm7Ja?;! zWhvF7xj2WP1*|zP-E6QXMdZpg3>Immpqt5*_`q^O`!?y^Uv~~f%NOSJR5AM3a`PA> zFLUvAZ$iAGZa5cTR5d;y#yXVHc^>s_Ct;DZDto+8M6nK~8y-i3CG@`85UT6Wr~s#~|KJK*H>n={w#e!M;Z zEa(Iyg7|~L-a5rBc1~uD)BcDR$_T19QMX)_FGZtWYV<#)(yRY^eE1MEGk}E+kEp1h zDzLlO$~TrT*C28=O=)xoPd-CtT2De7s7Au!j%p%m0wMl+f_`mA;TeTRdftc827}bS zpwc4!K8v_i9XE9oQJU`l9BGdrlVII%Eu>UpJ-MC~2ml25G+_m9RwBO{!6qFy{v=FLEYKNrCdhb{9;l zs4p-G1m^^qAG%Zh(zh|3#FoFp_^P{2t4W0xxrRco7>%!;K?bjt;+^tByz)OvX@Y^x z{4VZ`(i!=0TTwZtcO2}Wo1<)SsraZaDKV6^Cml$q+U0PK=$BcfovD(q@%ZB8vSyfFeo#%O4CFk23 zp>G9)IDUsO1{$cvaF-B=fwGOb3GhMnoA}10gyxiK9NZu?aL{t|S`~FXIm9RtDE!Nt ziPlU02#FMt3NwuB@XF5D=5G&Dp4Qegeng2Dtz#I9@u@23^C9m97NzM!6DV&bgi5I> zNsVIDZ%p+riU&(mmF@0V7)4RZ!eyxiHM}|*m%bpURD2}SyDSw=T%A)`_Y>fsP2dtl zlc7!lOiX_k+29XdV$o3q6EQ^83r#XrT5xH?`%MSOl3#6dY>t4trHMmQ(M*~}V4xNs z*NdRFOwj&-6*vQaN>wq?kuyi~_dpMS*N3*@-ku;$1Qs6X^E$VO8|slFl;Z+41?Ohp zrergl6M!3Z?QF=L+>e@-rCh4~_ARf`e))#?#lhN{#n==E(uRY^&DWQ`BgN~m;(7?3 z)DIfRL3>s+x`9y1!wtr)$FKK0SZ&dDZ{Gem-TqhYrAV2~Bu6Nx!i+0_2sb^+Ia@-R zNE`U0AML4*LQrvaKHRQVE5N#rOe_A}vQ{ zhu)YG2sx0+>KVg<9D}v+$&As@p}+=w`RRQO?Qcuq}tbbtSo_Tu8}w(mC{__3}!SKeyPT@a@3de!7{!+Dap zJ5nX3eziH~5I-{sak`J`8_3cG?S?JJ-FoWiXHzfV6vnqf7Zrsjx00NF9pC@e{rYeK z%i_uAUo**ft?vTOgOYH=j2rn7w8dI%o7Yt!Gufmmbf%3@uiX3jp&|zvbbR53+ywp0 z1g}CCpd};*9C=_lZ`<@r`yZQMjXx}y$A0)W3g_3)JF-o9>vBNqrbpuNU$48wfQ#oTQWy`Zp3y zaxFN0tQ3-M4VAsz4d$tq%CUjOwCFSvxNgY!8OdbX?U$|5xV#~(!~|DJ!ft<#2U01Y zdNTWwh;6R3Hk{<2?Ceqqhg;8>YQ{IMGs@B&+i9u=DSj??!aNIzm2V!!*TV5HEb%7{{O( zH`Z}|RXa63*6vlMoiv@6b@u0aZ;KrcxLFmY;LdW`n|`!{zU>YDw$Sp7%o5*ixmHK8 ztHN0Qxn?VxEpcpe1K~!a%)#}`)aki|-nL$P* zDEsZeuiU#{zsxw(8}z7pnO^Hg_xVeSnAULew!ZNBDX`ev{W7ODvvw2vK3{)Y?-e9I zgKgnW<*VHAys@U+Oy;InqpL7V#$OQ~!~(I=r}^IeXESU8O473?x*+6mJpdC!>P7C zsa8!eHjr!6$F)6GXWAZxeIM;-BD4Ot58Dk`-%qtQ*uGYG4e{`Mg1x@)#ce_Za$18n zSgV-%E|_`%pX^Bp`ji;(#q-ZH%zDUg*P6vvF{u-#e-RX;nPPk~u-J1h{?=Z?f}zKR zbQEUVB27maUFC50qoJWl&y=EBRfMOexb3>V)r?9*NO6=KOZBsksK%!O)_qKyP%V+h zIo>KJHKc|<6PG(0`yD&Q*s3wq`@ja+Se0taXYQ(~PFVh6JWm;9rNcHbB9egTz8?4^ z;^*;V^qZ({*Tj#LBKXwe4C&~1vXmt*xKMV2wC>ou6n4Vd|1V1 zbX22+u<|{4)}Tcqbf5?#3_pROQo=M_7pLQ?Z%!H z8)3M%4BGMo&^z9K_S0PAF{TZs4kVolnnTM$UOd!udyb75TdOfOV4C$Uzs0NYJq&79 z)IdI{x9HPdxJ;S85bK9-H(nNuZTiYu6Cduq`^m5g4B&Ht%LyTdA<|F*y$p>^QzVr)>+iTVtA;N==?b-Njf4VRWCE zCSLQ0K;;r3zPB?Dn=f|tpSQZO(4z5P=Hn=^2d0@sqPsHISB%p~#7hVf*L6JN{dMT< zy4<31g=o*KS`8ZNrNea=Dcp002yi{%2Q|o!eet)3?)xxptLCk2(_l*V3{1S#rd5lm z{gU*%;W0DA-;nUP0f>Lhqi)oJEsU+bI!d?HYG~e$f7^FltliW0Dy{82nAnI+gwRzw zAP-^D8oc~ZD5G!N(ZtkyYH`0Z&2^&mm+blC2&qqV(Z)AyRo| zgXdV0^h7B>5iJMP>Df~B{WJI^h?cp=yNKIS|5cIRm8|}Pd;0?S-QWBv*V=%X*Z~L{ zRI*BIvpRUChR#U6VH1?P+md30uHSKUUB;iPg0?y^hq336k=nhNvcwOBEs&8JjLGl# zf90Ni5jDxf)BuB`(VJ1K{S9!6VJyXP} z0&ZIV1F9ie25HbyP{+>H74uusp|E0y6rEU#<^kF?Eh za!c%(*1ASST+OU;0v@;eS^SdYCF3>=xQMUrL}T7#4MaW0wCbs|`YNt1WY+~IGmaO6C_QLEeF@k0>@)q28Of(tNRLE`Xr9gJyA-#;_4qz6 z-!CclpK)t`5?Z|7-$sYMW~|3z?yWoo(|Ds`T*tQBzcIODOpMk5K3j!?*$&I8+ebSW zTZhA%vGxmVuGbS+GHAmQ==-;>1!<_cT#LRr>Ys*$Mh#Y<>hL?@*aVOQ>decRGXj|4 zEELdOOxRw6X!{r#m&r+i<=I*^QH5d|QQO4?vqN--0I%!C=Pf-cW?-{5=mkx*I30Hd zgXWoqb{v|w+iSL(fyb%LA9Jl8#b<3a1cU6AA+@nOJZJs)#hISC46$YZxOt+L`3_yp z`-+#NUkLND)K;dAd|C3K<@rT6J%vad=j-Eq+Pq5D<-4ztL>ND+K#SOhDK3jm-Hi^v z{k8Llf2&@zYX-E(uFpp%^iY4rS2gTGKZN=^|-qq)HJFf>n&VkXmY= zwfnW^oUq{(GzN*x^@M;-#e7!h5cimp)gOTEg6I&bgoo|w3@PjA3d3jln) z3K_M|gr#xJZUv0m9mk+d6cdrJ!bOncK zXxL8+4c9z@q}n*@^=upCEtX}abBs~zjP5@Dc6=Ah3J!0jV#SQyJf_9d%P3_pfVhc{ z0Dfv09r>CPasSqbSL{p4E9SK_49}ZCcAVOf{A^v{y2T!|76l7ciEu{V_*r?KMF7Bv zcTBB+Q+u`$tFR0XmGvq`S~~GF#O}QAP zrr&iClv#!5P1Oz}i_5w=A4V>H{+sgh@5DtVdbR-turW5Hq>gu^OX(3udc>9Wialh9 zhz5;pGOUu~lGG{Y9_igf<)m~5Y-FL$=@*x|YegC9Va)jYFY1Ym-BJXBHC21(xg_-H z#IWLzmrnirqvI?MgX8irAtt1Zr3iO+_K#T(p+{j9O`?&aKfE?A5 z7U^|$rkg=~3Uajk*OFtG!C1j#DhJtv1OZX2i*O+FNAtTuwP@w=@;MF@s0eVFg{QC*>wK>S|+NjBGm15 zLv>>2>yx!<1T@k(HwH%ZOm9og~pbp zl077iwNaK?Fi4UpB*s#yR6~fUX6%&;sVHekMe9&~Lz;f``)B?**SXGh<~r|r-}gMv zeSdB)Qzn9oze?3L_sx@anx(Q%blfSNQ4WHJ3s#ZEq5bdi2E(6ae0F&Ynddu%mbOWQC+!o_ zK_5IvJie_|a!W3ns;?>H;!-j?W%_R{eaO4~_?xD`;Q_@sT-TQAlA^&ooKUGNk7P5( zD}jd(LJIYWkK$Ji|CB@YOeC+No|{V4bSN$h0-=-}4CQ&yc7v;Bbd$m)shCHh(2$vj zA+LVat&M#gCW=4mDd2!zlPI~mPQ@GP(K>G7N@og4V@8sUh?hpFeXG$(FxkpnVvQ-^ zZ2x#*$1R=Ja#yT~^O!p&qwl2>7NAjiI{oxK_FeFZgUDeePd%Ukp~a9?$UAuH27Tpn z>HXkA zob+O*oap1B!eUIkdP@RVDkS6B0d8`0VB@t zO-jALt_^jbm!@|c?pqa*p$ezq7KXtxXD#G>6Vdu}>NgAQ#^%4*jGD`mZXP?J$W-2Z zhwLkaNdvOtH68LrXcENTJ(IUtA}GL6gM8a`2`IM#jN=Z+#W1K%A@{7u>|Xk{K+ zyp|s?JklQTDih`)x0^zL;49a`L7W`Xpkt&0%Um7#<4|ZT4jN|8klII&46fyA9Wo_1RB&=Lx@!O?`e?wX*_fA!x+jSd|q=Lhp^`=A|w?yUUWbC1u zOQ2fA?bcii3CZcum%`H9eNkPV`U1lqil?fqTsTDKTDRn*Z$}ivsIe_C!Yv6^U8ysE zFjCsWd~IQO^Fwc#CO6ai$PT*d8s+e9i3TYfg>x7m#gkJ0;d6$&dmftPyVcLO`pdSs zDhKnV!WI_*1g;+=+vv3E;2n7k= z!F(xCi&Bx^&CSo@^2ZsWN#DI6>%ooI#4+m=#VTo+0dWOe@~jSI|2S=E_pQC(1eK_v z!@aY+C*C8OWeC;ejF`*%t9uumq};oPES^dsWw=_UyFEGJ$ftcD>~hZ@ONG9YB#5DV#UQ6E6zbj1)i6V8iV`G$7*c-)82m@e&jt-;gER?t~R=tmM>WVu#hc{=pRMi5cdJ$+_p1KuViWUi027YktqRE87{1SBxKt(&OO;Sg;^qFmtX$mWbrJ4CTw_h$I=qHJ zEB%u9BEesB3|NtLegl@<-4$FBgG8Jaicbowh5t$vOBdBv<;?T4%iD#Lw8s}1DwiI zb79PF|3FsZ_Gfd}&z<%|ABhCCpMkb>C_Bfk%_kKDihwk$bIR|^vj^~!bdb#hR8|>m z3#_Vkrn*AAN>K^6BPQl!YQbq0M{BO)(*-Ms(?A}o9N{O`5@T5xa=z;duHXa6{*0*% z2nK>FOT#Fkm(!j3+18+Q4!F3ybBO6RR8P4{lK=)}o}UW2aAX4b0E6wJzz8I0BxTEk zC5RRV{(u27C@V1xH^#R?t%YU|pz7Ty=u3<@c@iN^u6|Knzp;*V;+n~Z!-8^k3ZDiz{b1?J^@{Y1`6P#?8DMM^*GhW1E)=G3xJ2Q zTA0ubPN8$oF8V3=cSM6R8^x(FRH1 z1xf31IlGJ@qtj~2#Z(85qxtmd*7Sz8c+|I!bMC&DkJp^&?ctxbYxQXtDapl8S`nLBkqN7~AD03ixcrwuIQ4r-9O?LCUVx2A>rsd^(- zl|TW^K#)GVNZNo7^5#k1<4N~|T6@N&^r)bM3{5A>w!b=8WuyIv%CDjU`@I}Eo$9$; z@!IsOrYWZG$k|9kI>>4qe4iuT1ClO?h~Gukl$-WzD84uZnC|{bPP#uH*VuIqw3{KeSu+cBp*6`&R*Jtr#ZALT>{ z7x+s2M`E!y$TjHS_QTTp>do8U(rq3FMkRd>=oYvL_bLLZl#S zDb>INEStin!j;`0b$5I&q~Nh-uff%EnAHP%b)^O>nVCgnGGl^|_hM^5) zcu4udYHhl*2&Zi=aNVoW;vn2h$KF?4c+W>b84b!7IJGfGi5?yz8dwn%IXVqUkaK@{ z2m#c5wNCh`Pf`gwfxMJtq55s*Y77H(K0X{{z%%?(C<}_juWV~@t^L?-?oQVYpUl~7 zH4tf~XR37Hpc2=xjSidK+FOxzBqDjsuUkO7q;8*y=J|e~tZb8gG584J%xUX(KQ9}u ztqka#71!K`2iOXs_WQgjSNIaEF#J0{^)%>CT6gkkP!bQ}DWlpH4wn>I9A6teCNpHZ zDgWj*=z9^M-ryQ)LWz6^m8`5Hcnv$X4#!3~D~2RLPGeimpc2wy&t_0WQulvh`fl$D<@^-C%8os&CV6e9f_^#Z^LBy} zub_VRN?w>n`Ed07#>ubavCW%f=Mjf}*5s!{uI(+aQaj!0$+0pY(+zeV*7zYGg)Hn& z^t@B+In$(kFHz^EDq7nK<;V*k8AEwcL9y;I7w&~?GLJVCvu#0U(v>={IN07t0e@LK zp4zq!pi)?*^Ib2bgb;oVPgAg0{VIe0F@`GHKA4oe&w>t<;DUC$s$8CZsxO-nNX0r+ zu6b!g?PpzV#;d5+fc+RC6@`<#pdZi%p zF?5@t5!BMOTd+4fpd@e9i>L(0>@1fdwpPiD z2rX56t?I)QP#cgjO^ooxOQcr5Y`k#j@*bEq7s^vqqont`2%(&I$cHOe%*GSX%sY9| zpFI;a1d!8XUJo9bAgmuZp`3QcNTYAw0zBwy&+z}}z*gD48sFcfcgrLZC*5;Q`g3oj zWH{hM>eS;&wT181RRGE-hHk$Z?|I|pn{2qd40J3WM-->;Ub!Djs^CQM-MLVjg6yOa zE{9W@P#5?V9CkT_xFrY^_2KSaD}(H$!r~BfUHQ`gNRXXez#;r~_t)vZg|fuEs049; z#0l3hEa`d@<;sPr^h>^@$|ku6l^6=}#4w1f)K!ugw5pJF3}jsv7GkLV^`p2>3VZJk z{pgJ=Zk+Q=h6M^u^fas*P`Vuc1sf3Xlp|Nm0ZEoUu(d%(Yd9N`Hl#@ua4mZ%2h6#VPdN?v$c@R(7a(p^^TDR&+OXf(%_(T>OHP z`%sql3^^M1^?}c0YsI&$amfX|T$|{td!=*IGZQlIoFoZqJ}x!*LQR*4zR4*nOqOn? zLX0_X=jM=i_r2P<@g48`DzpvA=2((tOd&rXC9K$9xr8h__*LeBX~>gn=fewG0+^cY zH`KqK_g59~Zkk5w06D^&nw<1qf8@29!8qZ~pwGr1El>+{tLAT4|H&!ecqBP-zJaRq zO-kpRN8-VIk4=c)pC%o1x8tDRblG=2$*npd^!=ah9ak@3TD;^9xR-$rk)*nDU$(yh z*NE1@{0WF2s6m|zu@-!fieN4L=l?Vbd5V1hBB;J4K|i`uN3!{9I@}(b<9cxSr&t%e zruLEnY6^O!9Yw1Gy1SHT*(U_MukTT!Mb?(A@2Gi9$Z5V zF5$ov%HW~N@L1|b%Mp0#{f*YQ8`taM+^rjjDezNUH@b4+9Y^5YdiX(*a_QEMf8&3` z$$z^4$zT5d=gI;2)u$Vc-#1E+pzhxP!#%K3TEFq4exr5k-=?R3lEjn`0sPL9wS}A8 zlPIFviH*kH@MsD=W?VB050B)CR=57USC70V|0kUekHu}ofZ#C#80hqeF%nY*dn{w> z509v3#ZA@v4&WpBMgQPeGYR9`{9JYCoQ~kwrfpVw(sg-j@=;jE!O6ZU3BM0sH8zLm z24^NpRP8X&7on;FOO!^BlNug10n2`uye|;*RRcc-Tn)S)HgxRy$@30J9m4ur3cR*k z9C}fvctsdJ&d_@t+*1a7G;0|=mPT$;e9yPiSN2JhXj^n=Mu)oUy1`?{Y7S0b{rfQk zSJS5;xiMIEDY_;Pa?3UQ$9L}~t9tMHZ5Kj+CA_%4|9*k`UfVBqNo!ewlCh8LOV5k` zS~#A4x2>V{{=RPd=&O!|1p@XVb>8dT&~xP`*cJ<|(9Qx6ITfF>Bg>Q4KSXDHME;xy z4~gp1D(5Xs-^~zm@2rm?bF)Q%|NcYZNnnI7m-jT`*?^ACn8T2ri^eRJaJqa$@`SW; zo4%Xu^#)zQWPHt2>%{2V17_c3x6kzw(Z(Z-uRC>G&F+oy4(nUHJDe!7378y{c?jRB zv-L!%>MmJnQ_p1s0J-_8lz2AJa;MSd=JuT?H+6-VogDfLWo!u%?{2$H3t4AuG+A7a?UrvcXNf#}yvLD%7}Xm&579zeFH z1uV%bJ+D&S@o>t?Q_FIgXHX%fwsEBoa6+a^M=MNR5#`*K1Cg=-e25LUKD{*&jYy zLY!FAZqWH0%<5Z@Z5KSVnIrhgSQ(u+bpcQE5Kz0CIa@S^nQ(3}}kSW_F(Wjc6wT1_f^M6+iRHR#mp2;6~F9I~; zsBrcPo9WS!`pj>VF%aq5y-E=_8-^F>3rvO`kKFzJq4)c0puA0o2+C1?}<_?}b(NKN+b==EmQFq>hF}RUBO)tu|!Au}yVEuPhx+r_w>4 zDMHO9y4u11FA{YwV-kn;Q#>_2>aSnB&Wq*#u-{(dTc**Z7C*@u(xl85ye2)K#lP1q za9nZBS{X68zgaZTKs2-Z2r(rAF8E3=kFDJ7Ic!zV zhx^xRBhM534|qiyHyFm-V~yQ)=X5VvEyZmwq%o|<_&ljamWo4TL(eFQ?^hBbGc6cV z8&@beg!>x9DU47PTAWZ%ZUqm{j|9Keg{RkBblrg3}#r*cSpU(Ac1SqwsxXZe04}?FYHh%`ikYo8%F7B=`k2f^vI;f7t z@G2cH8$ai=JrW~Nwp^Xq{Gn57^g{L01|o4*UT<&}f)Z2Yo}dH}>dXS!8VGrisHn97 zei~!h_~Ks0wUU7iDRhkVX>&bM^a+^>?V^t9am|oDZTDeG)O_hS2bJ61IQs{gqXIZS zIK#|C%Tu)vbWZx`Xvgv7M=tk}Z=R!eby}vJ*gFpF4NY2%TJ1?F7BynbN(c3}E|<8m z9S>~0czJKL$1UfVi87M{cYkiQ)wiPsyS1u;C);o_OujDtOn`Y$v0>M# zzg2nCO=10cc6Yw#7iE2Sj8r-|J?PWsRvg$DiTuYJ+FG!p9`5uG{fs|sdt>EfL`jsR zuzT40UUFHwSCqDL=BN>|y)1iQw7%WUgWUxw6&IaijDuz#1`Vg2?d*#&KRWa106ev7 z$SKzH+|1a)ZMW1#WSH&k8PVgUvy&=<+B3E{XAA=*T0L+NU*3mjaPyrLBhjy?N490OSKdvGwR=4? z6!wGjaWgI<==H0Ya*Z9ZlZTUzzJC3-H1N#++SrtHuV+7QJ9_8&-K31$uitzxINJB# z`N**YJ>rP9qxV*vpBOb(*@;@{4qCe)D4+HO|Y=q4(${)-eiy@{q?U~m!khg!FelNA| zj68xM>})naC75T0c5$ zfoYeufYeML{B1T_@#4qAZ&aqw%V=TwP1-wy@3A{x^WasNF?Hf-hRG9Q66>h`<$O+D z$ML+M9E0`GT4u|tiQala9#rY{r6=ZN8$hW6wSDPE1KJQM)~`(&gGxCirKM+1AMrR=UwGm`VmzL zt>4+-CDsq8sPX(-%1f6Ez^cQ+vw!r?I>(InL}@yrc2D6=voKn%G&={(4U zvI7U>Y{#|u`;g^0%5nnbZL0E>$5;-aJO{4Cjd4I_w!D-B*a%pvQ>-n6WU&xKU4`!? zU=g`24K@De!=lZ07IBHCx+rxMbH{;q3W_Z@?q-@zGjq8;kIqOLaEWT+w|)*3E$H0a zI?7OMVQ5pC8zyerhD-wq$fk6$X*Wa_#M0+5R0&MSFAQAET||XAx{^fS%Y%2^MU*h~ z%kDcmG2xU!50Mj-EX{oSsA!@Wa4@_$ydZ@#xpAEa3`ZLK44$$D4PD3I@HI8Z0v=m* zh61Ab=fkghsSE|q+6U!%G~ldVb?%ys-zUB9H=;7%NEa`pLbhVuRJ)l_3Pii*?!R5c zg)POeQb`i-gHCGh5}N~bX?JooGck>cp+Y8ixtoO3JrY4%%B-DO?zKxq2h2%33d?(J z(1Gi2@MSPa*CU{Py90gu7>(t?WjRO;rO&$OTAFi~+%q@XAyYl{zQM*8S5ee(E4Rmx z1G)UeqqfR%J(a0d#xy3O)yEn2*W7FrAo%cYtFIyYjYVWAi};11GYvLYU=kMHTv~@k zIlaS>iu?NG4={xc3EjJJE)%A(J*C7tb&+ID8JQ4BW~6P;sj$eLmC71Cb!>L9lrp-- z>PF6&kp(Hw9H)yJt?q$ZqmJY9ff0PcM9*a>&kC91>v$G4ycpUF-q$MWYBHcja8n)M z5t%knGwNy34KW1)Tc=s}G`iF@i!=?Pjk1T+ysEn)UA2-l5P+}hW&Z$Yo$rOTGHNz& zpD*E+s6nhs7~8PQiSrw#e2ob+iPJf$#{UF&_r zkmW?(ZijcxYnHqb{Kx_K#EL#LVc2Uht-Lk3I581|_oR!OB#jGsiP0i3h6WaM%J32_ zB2=mm>Ls?06T~H$GT?9-E4Le5(##mW)zi}pS*(!M;jxcz8N}isHk*hiKgW^=h|RzQ z_@F10D#nKa1|XKUCtVXX;*kew9J^(_wC(&YujbabKo zVdhVRYqQ0+YnXSDt=4g^4mj4$K?&NIqD81=AlPrG6OaLYROfi3iNiGDvhJA{E7HWl zaf2qK-MZNjBQd`$4vfYy{vRB+L`O>$Ybp5msWG8c`tQ7_QUa!0l^ff=?@zP!Uue-* z9wOZnLBc_ZdAyC1KFHm!vry*mrVhyLE>RPsM_!o)=gjZpz{zM#k8if7m_J5c~asRy+hrA&*wZsH|YDR)F^n z5>00{IUjyS6k zx9~=xgW&RuVCktHYTdyiK@-#GZ=mxi0w?qQ=+BYb>wv#{K1KI=b|P>}+<&J6=BwLt zvx0o9fSWwl@g;<5Bw$^|vcv7VK^m%`9?VT_wQdQl^8_3?_V1xZF*e2GBp;7QFPg(4 z1|(2-*1h>u2nHkOOYYr6fbYRDkP`m3*C0mSOuM+JzbjaXQO50GU>(B;nVqi3e-*0H z5yVj-t%?z!4^NDPU|S%@m}%xOD{U$WG3t+9V-{r7B}fo32BJo%OSCZbmzd@t;6xyh zw#E`eilJp-i$Vk$zi&L9j*VjiRpu}%vkNw6Mgt+b8BlRuWprEBduL_FAX5jSho~@ zk>!ae$DFc6svSR+4op(i$3+Z?Q!k@yX(b(<2Y`;PTZ4?euV3|B&Sdb9@ z;RsqGJ3-7i#IaI2?4zRvmLvp~%61R}KN)P_HKvIt+gDV`rmaDDlj;+>kN^U^cNF|1 zmFY+WC;_TOu2{d1$W>t9UI8+Bs)^lzxDDyjg4kUJIP%!yUw@odx~C5%8pvvaZhr{a zma)AR4g{{%*pIT~c{NlLYiH!EtZsPgGBk0CodaUq32S@}V{2Cmvpt&)us!)HEFWPM zEm+$o-1Q=jc_hio_^hOnIG&Q{k@&_cY;&*34FnCJY!G@PXdr3&%bID3edh}k0Rt)k z8(|=(hD>cSADp&eI6S(qb>WXIn^Z=}mm%JIBV0WpR-Wu+ig>X@1kk{l5_uBgtW1SG zDNnW|g>F0zu@Hhv&w?-mB5jH{M^{KcjUmT)bTGnn9NF-@e?#W+@a}({d z9z71(`Do~IZEuVJ80!^2y2?ABJ*d4#0RTn>>a2j|o39H{0UPFIh zrv(e)B3v-+1SZ>`a0r{yw3@;3Ou+%>uPmvoqZrtJIP6|2e7CSL`agELo1Vd7f!@xl z{zxez71&DkY%VKERzPS@`y}I%<1xuW#A0JFkUH;+n$T0-u$b%_X)_A3SfjrQVTuK% zinIbWKJK;K((_AOYciH!T%yn1n@kh1-s!Qusf_$fAOY$dv5=|C6%T~N1sW{zbC%@B z*jIrp%95l6-|!%o<74Jm{XB!OOdDiER|1y3#JVLSQ~d;5SnU{J z1?bUf*7abmzp*N` zO+Y9tOI*4K%qiNBY)EwE6(5C5xhfOOxam#dUbMqr&6G$r7cq{fV2=V=84vDtF0cp| zZ%aHM*{=RkWmC#P0ibyE!Z-sSGmTdO!~tnI0EIzNS~AMI;$5pKh6)gy*f=a@*@7M~ z$pbPASyB`Pk;W@LJ20~imRk5@yQrr@^n5jkO;o6o5~^}D*>OBT{93ht10@u*Dj_g? z8e8vE6Z|$i9)Ef_)Wa@;b-o<_1RJCH3gL$nihMn37dAp%gw?hj0Dchoe43R-%HI&N zsa%lCx^G}5Aq3GPDttLSn|QwPWz#sb`TjI!doc}^XH_^5v-aX3zChfdj1FgXWoIOw z{BL6eppCPWJrQIo{ZJvB%KI;26hTwS7tg?C8X^P3&d&iQauD%!@l4Ld3lH1i5vFGu z)lU$YZ$hjnY$AT}_z|XQ_wSs4OvE_TL}Kll`tvLhG;q9uV3_upt-71e0v|BSEffoJ z&-?OJ(}T5~Ncqtp5J%SnDW;*T-fVIl;9?jW@gc_aQ?)M-IEKl$A7^{x-XiZTA+PH0 zrXX5Z*jWPE)@3%$a4)MuRD>Rq{B+Qx{$u-q}hnf_+G`(s3@w$fQRj};jQLxT!2ru#|=eAj|AdDhI$LrX%f z!9pbizt*@F?O|~}H08_Eiq2@6_V#kq_|@nkY*$vd!=L2Y)7)& zN7*g5ae|KcA0Hm8+R{GpmQS4XzF>XyQ*hz40`K#Vv15G=&pvq75{`&EuS9)(96DCH zJR5QgeloxJ(5rFLm1o0GYV9+o1X^w%J5>osr(4_nx1UrUOJ5aed4GI6mz(}VY3scg z4J(TyTa0&?_GPYo96$H(ywARkv@heGb{}ud_NIT{as{szqNiJ#OJ-8y>ov41O#_}B zm}q>zfGi4J{rLI2i>9Yo5DA0GSW^a#pN!I3$`;+@5M@bw@_?&h2u-U1o6xPrRzJ3; zRVX`A=H?b?T}CR}-vSgW2a@>VC*s}l+kvG~(>+{zTc2!&PCnLHfz*4LxVi4;DSx z6C3s-J@$eqNsxI^Jv;2TLOKc-I>AvvI!rVu>8VaMD%eQ1Y{5E9g=JuTR|YTkXAiQs z1O>E(ZC@y~dO~O_{xRsjyK1NLm4)E6p=jj`FULcWmFI>$Z1EJBGJc$*Cwq72+HP5! z3bc0n1LI!PTaO+7n0nX}qGMF#zT%(Y_9R4KtUP!jW*}s!c(19f>@Uzz8?MOy<=An}81IMscxc&u`}s_LuciJ1TN!S%yrY`N_JDni zi`#?ZY7Y#3+wbre_1(E6?D(I@rh3+uj6n9DTajPfxpZlzyj$hiF zKN>drQc-k!PSx3b^3&;{^84P7f32s29p04P@Bg*q*Rz_)lfKXQY(I>c?(%T9oryW0 zZTl+z+Fje%hj(9}c#cZ$t>6CHneoY`E=f0E#c?fs1r?I0cDgc%`*Cg_RZUiEF=j_6 z-f`YVw0~c@m$;sV+7t0}!V|s4en(~@(P8=G`5cE&SFYW2_}uh)#o^1%+eF8&ov(8o zzx8~+*ZXNJVkHl)@%47woa+1SeOOeJp(2EIejfPwZ!KIA8OHmP@+R}ZJ?GzVj{nPk zQr%>2w?3eJ^XuCCYxjwNW-Sj9SB6+FE+0N5_bIxOWo~AB1agl3exvPrs~|CAkB(&j z-=)hum?f7Xk~2LG_MW`AmTAn?i`Rr(#qkyR-?QX51)J6{PH!T8^8Oww9Elz>gNnrS z{WDF8D8m8lB;H-$T@sc`=$2mQvh5QkU>7b9s4A_nUO9w8+!hAb6t5ThWNE92?|CG| zQ(C2CLEfgk-7KZ;M5g16(z&YJI9rpFSSKCTXD!1v?QJKMvUHS94!SO!h8FGmqOGyg z?Pj#vb}DBx%0umPyHjjKSwXY*w$;KBwqg6}(#3^aGVz`yzw(2})pq2-*F7Pkcc+=H zx`u8>JB^aS(wCg{w6`ui2-p^V=0aNYtvyDMLMGeKcJ=9*r(Ss^)~}T}ZR+7!MqZ~p z+p8{%oGy-8`i;e)QqMif(zk9hdK~X}tL7P0*XmaFSVYRL^K-4U=zgOo$>mnH=t+Ht zXIGx2x8J((Ez7{^ozc_G$y;^*jeW5Daph_Ds@1^|!X=~IJq^dDR6?N6hOWw2$Mc`u zs+Y?)bk{jno(t*VV6|J^t*%a-OzCL)+q`69R;*QWtfN`q*=VP~lxxa6b?`J`Tbc44*SGV!kwg=IX|pw!v2&Dq%R%+;xjmYr98vW)|pjGtfe>%6+> zuJN8*SD#-`>AV*9*Eo2<_(fZJXKSppN$9hyFFM;huP2EW2Jeht_Dpu($hd0~_T%cy zyQ`fybN-4fhr zG|tWB)kJw$$0cX81pjNVp0{^(-pDpfj52vWGuhSEb=NE@_1fzhg7!`v#yOE& z+Nnuo=>?ew=&tbm^(R5n44}nm=z&knhZW6PZ}Z$jzp^yk0ck1&))8KC$63jsg71ns(O$k z7nj+PH79K!@lbb1^@%sLJkz7UHTgeA^LPT7ay?`vl`pGP=)$hC};{rV+Y(T3wZS zLcpX7ETeaH)M$&+88$^iCVUifaru1Y=Gor63g44z%@$VQU-Bxq+VcTTe7rNge5MTY z_P6fL;h06yrjGf|F4WrN@8C>6yk!qf%k571r-xZz(+_-exkI0gdZ_lA^e^+cH1=IZ z17>0Cy^TgwxjcdtwRiH&xX z5veQULHjEe6)%r#Fkz~o;K6@m5R8}Pn{SPoJaNWf55!E(2!4?;$qg1-7k;ioIbAU zAKIY(U|$=5<>p^ENO0_ruMlnT`o9xFm{u^lqW-DPVD{*oQ9eU#9$VP-m!UIcO6qSu z4-#IOMAyFhxW4bGWEE2PJOO(FWQ?0bPFGdGEpDh^ZwspU*oi149lJhQJOh`YSu(?t5)|ju)*YqYXZf&AdyNe zKkIt^hVO+}9`geXt^45cZ(9BWGYmZ*mtr48vfqF7`Agk5@*ei3h3i2-l3!JIqK}i& zje&2GS#N`r8Axl*kLzad^)xci>W~e z^H;_=bMbW;Iv-pdiIjN!F_0|b5c)6xj0z?LV`%h}x?aNEs@Y2!q85q<9?k^Am}KnY z%a8lPpP#?|LVnv`sU#cD$3`|zIBWf!d3l9=;3;FO7*>Ilz*y=BNzR40S5N08hTkhX zAQP?rpt4XeA*dT@B}B>$f>3dM@Y%QM+K9Wb{c{!5MiIDg*>$*wB`(_Y+Z+y@Oeepp zR(hR(W-WpbCb~Bq7NGV;&biO)7KlGh8Yly0+OFkNnxq>?0Hs{0e{!_DDOk+?LjKu6uX{)=dejz)vuG#tZ zo5$gbXZ1oO-&?>-i}=$YSLU`6!~b08EJrZ1klG@Kukr>Ok7|&()Le4$!tl}?@6x7K z@0oy<`iGcHPIV23TZ?z@?~Wgufh za+>*GfU2Fp!>BG<--o6$pqJiJl@@-%0)BaG8>{M`=qzinFp%ANDV%>ReJ6DEKF=d94Rzn+U+DWHX;oxyeRg=@NR3jSSua1e3B0 z_*=j6P~&vvyakjv0ic|WjRVVJ-T)c>HdSP?4=g2n$r2S|@YhXd9Aq)fBNc$LTn&i? zFVq<68v~3j<6DvjD%wcaKiyn}ERn$|J-)bJMxmj}#?Z``ZgOYApqSybHb5LB!wL^5 zQ|4WQL0SdiT!%b7lTn!#r_mWHx-USbnI&zSQsU0AG0mSt!7>7a6Zv2={#+HDc1z+I{JaJ{vRPF|HT!}5L#XOpp0nldF|i{U|88pB>d#?XPB zvzoFUWG4Ywwt_FN{v&h1vUv;{kPfPaVRYE^L=9M_uzvrGt7rv&{YLzm&?B%#67m`e z1LA`-_^MTaL9|=9_TZOzJ^2HT&mES44+CAHWZ19;I`3LyF+--6`Xu`zRzR;W<~xls zz%M`kE@nUrSCF-g87T?nJn(Yt#gBC?%|Zsj=?0R{SLg;iC4PBZ2f?Ho$h%=t zlL8K@0vF%WhAJFXoNZl}thkb`@!q-p(5J*->Ew`o46rm6D+Gn=4t{)2!Y*yy^}880 zig)6X6_cLn_R}#fZd>qxby=K8!Sc-;U`z{NC#V_puQ5L-smVAwJCd)M_e_z*2j_vu zTfxpyS6BcQ6UXp$j7Am+f@1lqJU2B@5ULquT*Xoi2Eiz#D@xjaEHUppLFrG5Vi^CD zHW*2xI~!W4?BPR9=}27?njWux;(&VGA>a$?Xgot+uv4KHoa71^$b1YE;exzDIDwnX z63fmBgyoWnBH;j$+HY1qU`exeY6kQ6n7dHifUFpqw0`SZZJABJ!xx65fGZ}PJCB*W z(AdUZ-E1Rvk!~QkEF%EdJAm-wCT$BO~1*HY8 z5%;-i|06qBEsNWA*giU9+)b^cZOqo)C5x%Q!FPZ%-O9*LPHvUk7T&5J6}eH#ZsPSL z)kHi`xXd2Tf0$@LEAD-=SXTj;U;^tD%h~BSv6ThOVtkon`5!;zya}YakeZ0yF77M_ z5hfiDIC_E5qaf)th>d`&u_Q);ksi{)(re`WTLk=*0jsLzcd=yGJw`Ux42*8G%i6%n zR6epI{Zzey<$!%Ii;;wIJz^K{w9oC5KMUJxVf~Zk;_0^K90My{R-}Wg;kT7iH!z9z zF0@RU3RcedfvVSst8TGi(MPCF%bQnSs}bu!E7^J90C5el#$1r;<4G^Ai>>@U4maqC zFGfF`-EZ$DtKom>GT+Yp2|>K`zg`lN(|_IbxzajK51Sv=e3Cic8qm$ zEANVLwo5Y$U&>caYs3FX?))J}m4bA{D}>P?3l>1yI9xBhI?(OL+k5bcM)ZvkE0F!v zfa*TJHML)r!!n{W&M$l(zQi)BC1d+|R#^~O2g`^K-ZBjs=P`_00azTvy4y{>N?Vt> zqFd?GresZp4a_J@okmvYxd{ruGPMIn(8&MfAZRBZif7?e<%-EWYSg;Y^u)C0g-A7; zZ=DDs{?3ueIGiZRBsc1Sc=~>C0egmj*YV zp*hM^7*75O@D|VM%eYQqAjh}IgNVw-0_TQ3KjLHR7mmlL)U*O%4HN`cm!~(t3 z70Xdc)38psdZPY#qv@iR0i5C}9hG^s#|b`XWRcsIvfjSUD#`RcVbJrPoDZf``Bk;H z4m_;GGGXrI4fM?uHCaqTQ1Us(PWSsiA@l#ae%n`VE{`f4l`#h~4wjk+7dJtqOfgY; zV}=0hqF=bct)8swkC1g)^lg&HhhcPTUbYsJwbx4N5!l?hHoCO+H20u_Nw`uoEPR1ZKb2Ft(-*#gjjn*VqUI$jgQi%mlEkG%xi*m>il_CRu%e< z6C)7Q=5_bc%;~l5H9q}oEzUqMeOPU4H=W0@nC2l$%{x48PF(6IL{z4kw_H*&?+$jA zIciSl$jE=$F~W3lfU;ch-Gw~x)^PmJQmLuncj^Q#f#qlsYUw7EwOBZy<`NwD?gF8Y zG@@d5ht#>XZs+m>JaMyaL^D@tKctdjNWCl@TekjC#iV8LS!uJrGBW(;rN7qjsUz@r7kvxXGd=}HOwjhmlm^r9w$QPba$$%)k<)y+;bClzF!BH9^ zRaNJhX4=Sy(uZ~=AJudSY`d(PvoSMLq1JC0bAg$s0G!WhnJ`K^){E1riMdzq#$=t- zJ6Mh3^0Z4VB2y-c^+ddpk6p0k6BVf%WgzB>v;2Oktvq2QjH}$4V8pyM3TfPgf#xXzyJH(d+s@RIrpA(@44^yc|D)+ z$MaWrI)S7KIY7&wZ+k;xdqYKZc+HrB)bNz*y zV-@u`f*xA&ViB|@;N1&`#Yd2}Cn^Bfw8}h~HUi&(#r|C>Xm3SfF;612cEuMN$bRRq z%mhi1YYjXkdJWt+(gGDtT|~(#{>pgXXI*kgAqGIg{aYG1vrB~emu2iPn;+iHJUY?? zfR%zEnufkHxa6)*RR&1YEJZlcM__xGnjbss8~W`u&a&1Ryb*{8pRM?8NRtOgFEqg} z6{AF$=z=u|ChQ`$A3wB|rYg^f+n>t7s4~F}!V*lIcpiggCf9xSBVhP)Am4%4lZ+0G zzEM;$M~ePy$)8bIeIep!xM4`%7Q9qB;Ox~>^H+@cdN`Sy(FgwyvVWR`;}SmG2U5~r zt3AYON!m-4MgkSdvNCt;y)ddQaKu7B%yYY2O#L?#+E{_5%D#Fw2F}nRr{Lahn}{~D zj;Oi^qt!1G;R}n0w9#R3?_etM75*_HPCerE4&)@q&Xy+zh!9&!mT0WB(cs)u_m)Uf z?hOM*jx;#>v2u7Hk_+`I#(A-syoTtoBnW&N=Cj1aLF$33bO`bhAw&2DzQl;XJHSRq zMq;(-nEC=+tA;KvKF|&i?4<|AJ6qx>y0QWXOvJt^5>fJxB(H3)AkPqA>9^3+QDd^` z6EhjF!GhfMxYR=g&tjnD0Idh?4y@+V(jGXijJ_>cANgz5|S+VuJaC2+if4yi}Y+(~_qux}KKBpcZq5zwSveoFx zMA~Cmu}uB`4!ecx52ZkquX@;=Nr!e5uSi)_eFr_|}_J z-d;AuxkNxS{zDzeqEG*I(izeEd!NKQsNg6zuy|R|9R7-wE}A)iRFl%BwWaywYT3L< zCX6?N%?5n!rHcGIkW8!QvSRKkAEwZaB_Fc{;tL)By9eUcDO%?dk03;RBbn;Nmb7tO zKl)-L8O-DA9Q_DdveRWU)ci3Ow7SO&@xt?_VkzMJELpg7=5@Q`>-iUqXguZ@>su7q zX>UyEKplcRFGEpaZW6CpAj_Uw;v+WAtp3J@z zEMxGEb3_8nX# zO+ARRJz@mfB=j5=$xD7Gc1O?}T#-M>uN{N--7Kna z7rpK9p17f4NZPx*CR)4>rUr_K?y3QV;WF}zEz6o8hLqn3_&>d4&C0DdvrV;s` zQf;q1U4oj4@J1eCQ!_ist@C^zgIH)_&S7zE(11yMIKUywooVAlKXSesk2;Taz(LN9 zJi;*U4?43eV(Xd5b?}OXWfH0XDfTeCh<5M2EBISKDjEz?(p0w3fiHY9yK++-96|E) z!<`F)x8T!HJe8B4dTL=n5`;y|cR}@Qh{#D=3dWfZ6;tCy3?bg|xh26Y(WZvFax#QW zLdHVKuaDe{cY<$wzBp1BUB=669JWB zYf(L7EO^GcyDTh`m?62eCi0Ms`eckAp-vI`zb|_W_kG7brApE(Y%Z#xzX0YLM3q%~ z0wzQbybM!kyWrV4KYYVdlGZ{thR#ibx6pwUVxE|y+rof|G81?o4_AG_!@`Gm`MX1ieNF!jC( zaKR3}3)aCrHBGrkz??Rgj&51#t+rIDtW1PhXjYcA*C|_htR@w(CRo|6* zMlr*_agHw=#yusAQ}h)W<%`JWA!G^=7Q6JTlg@}(go(#k$qz5tO7>a9n1Ed|dSD0nPMNXbGbYpz4_=xR>Fa~-%EN^Qq!r0B>h%8# zbB{;(et|cOHvynva}!lHWbGj=xB~t{5Lx&I*$s00LdELJf@7$TM9Z&R0GUtp4WZWu zzBS)&fF!+ZE##+6Lj|I@LS_{o`ilx1>%u)Qu_YwYb5hj$k9eCh^la*E_N)=m$+sMMJ=Wq&aVDbX2Y!1uumMQ~* z?Ts}aG{G|mUY8O<0|4Bo8XUOmpVb_8uS;DC4=&5aRRghXMJXNcKV$*yRt2uFLW5+i z`{$QlZPKkVVyi(vRDKaeuZsIpft)oZ`~lvYst@o_6T3B_-cAM|GUs8P4eKLfCu?zx zMiGPMP~-^m1rt8o#glnY{okC(0m9DbvM$K@VB!z9C=<6~jCe@bi(YgY^OiLG0jf5B z{>vM;ER-Mhs*qEG5YfaPaOt>RGAue`?{X-n8|KrC+clQ?#1*j8^%>^#l^hC?>0rj^ z3S&Rv;lJLf%L3r17(6C@Jc~(Lc@4;Jy#9R%yoG!_uO-evwjeH@FuyEgGXX=ZBKUse z+#hM?2kD-k0}ioq11mBtfJXF&%SgqstOuBu3Lf>xp@!F;z>g3w$cQyr+(wt|EET(w z6rdA<`&fg+TFaldR4D>g=PegVjq82(Ml$Ik8#iEm%+Yjf?L{V5B1Nuzz{~U{3E+!hE42ZNMOqjDc~2GoaJbMQDRr{fAnYr&p*3K_`!?UBICcdxq!niq zgg$@

H_q0LrRaHR2i5j=2<#zKK!g|m0uM7-gy~lL1|ANZJcn;4 z{}DL?YugI@Swz_%-&bYcB{^!gu&vQ1V6Nuz@T z#a7hAt+f}#*<`bbAKetEw6h|_T2$&&sAt8vvF7@Z-716GElz%ZE|L zBf3`=01CO?>??m4E}oQ!(|+JsTfxKT*PNZgU$v;#B}es~6|~E?J*eQzE9B}}2tFrj zCX7b(jM|Kh`Q>F?=|O}Y&s`=4P*SR4BHx0I1N7&TkYmAq?#u)%nV+(n@NP2lpL}ko zlfFn#EYJe~kE<%GBxVBGp7-dP7 z+0O}7qib^QtuBnD9QK&)RT~OREp%@q`pEz3V>02&eegzrp8{_UpGJ4?qLlf4_i%{_ z?t9q4cd2)Qu76VMRi(Zf7j^anSql#4z>y=KAbzyn>I5MP#Y{_lg6f~?v} z;Uz+Gt$LTs7o=L>-+K52*0IG?WgUFU1|e`Y_%Jx^hmX{Z62xjJxK6h?ExOpYuiy?( ze2*=RJKaJ#-ghN($FE2nmP}O|u$1xayKE*7nHacbpO;V`EtlID=$syzvlHCphA6Suw*98eigR; z;R54BY0lNUA9~$ey>+~|&yGy#Kcf3gN8nDQ9Ue2;dkZC9+fggZ58h=~_LS6|P0z}( z=hoHSOEHcq|L%H0Cnn_hA{6~3vS+lQZZq!tZmMt{MW91{?9YRyUF#9zg%|Bg=m4wd z$L_}ol)u`!ReRN8AWH48pIT4*S$L{r1X0sKwIxfx)#2ICs3&LP9r^DhOPv(%8Mi|n zk^WOIzR*9nmIO|n0Y7w7Xxg8HGNWN3(yhmmpWZn{9X^*^Vb)&4^Dx@Ub=V*)BepeP z|H1$OG4j3u_TI1hXqc1v)2p|xj?Pf>C7=GSZoJPtcvbr^B91du5M@2}`vf!Swk0cibqhyc1n1&`DQvZ|aY2`*EklEA|Cs zwyWxy68e2^QfG+W;fI>jeiWk0up+W6LFjiY^!s>7b)Gt8`rj<1jQa7 zc3Nz4`4b#((3&s*cd%)ZWF4`82yp_B;HV6#jxvdbx3^BbYYLp zifB8zUFnR$_}RS&>z(5=cN@D~9)7yriF-bw_HRO3ChW&{`_Fe5oM$I`uEZeJ;~efx z1W61xyS*82YeZZv6G60-JVuUN_@=hMmg&rYPJi>+bv*pzd-(LI@INVWqsN-hr?}TX z=Kpan$&dd~^8796wXWX5YNtl1#5Uioc5WhWdp0J=MGbdg;Wt|Xm*s#*N z?5E9(JmC{JUO)Ld4E^F^f%lGnm}WR1?fE>2`^~E}<>zyD(u<{QCyM7>=YJdZ9@*>5 zKk>8LZSQKHYz0zCy8eatJ}Gh*FKY*6z;$)#;?!AWaZ;<3*G zecn#?>E@x{pm1&^@J8ZBy935Xy<5@4v;1ym=~ZuYC-(yLts`P$nyG?fxw@i|f`W5G z$8O~vuW_zQ^eTP&=}f-<(=VYudDi|V{?`koExl65-7a^9$$Hr8-0ee$>vV{Flo@3^ zdPFY&tDlO@jTiUKb%}fLUgk>Aa56?_a=MR{AAY?qfWT$ zO(o~@6sp=`@B6}e@5>TW{Pl44*a`kGZiixwU9%L-Z&j8qkMDjIyAsYnm+naw?BiY~ zy{qgzEm_U`52OX)t3=}N%8Kt{b?_TIVPg|=Jp}EYJREsZqLbzA2P5AUiiswcVfk_?qT(BAMD1?!~69o!gQKb}$a8 z9_rr6OgZ_v7pfY0ulqsv;xk5}3an_j=x%p-+I-N1#8(|zTYN3`{E`1fnre%Up+z18 zU!{VTOk}@6g=+Keg_83c!~?``NaQBXL0yO+;yM6z>qHHU3yji4KBtEaKW?T9ODS6v z4^iJ=0Khdffnq1#w+~2Oy5>eKfinr|1j-z+__X&lpU|`8LwO2seu(`z@kILW_eMp< z%U_0fQ!r|NXH7il6E+=q8C4cDF6gr7s(RL-&Bb4Mo2hQ$vgAkUQQpY`#hzmI3=lqW z4(_njB{st0EtXh|di>ZL`iPQV5j_XBCzU&^N2N(njS=zd<&r)CUag2O9yi6FlOtBg zwI7eeor!tZ-8spNdp&Rzohj}hS+8*B^;Mh4cM`kNDO%M{=X{nBe0UasQ8*{?%!Zlh zxsxw~T~jE#;V;D?rMq{l3b?|~h-b4Qad9R*?%O;ErOgV})HyCdZ?7M1rJbs?aD)Gn zJD`a{xh)O7mVWUU}jY2T7IWxMy-NUa`dt?v>b`iW7YLUqWIY;h+IF-;>U z0mS$)&t3QH#L<7IRi5;2)(8izo%zPWJFJY(H(7q*0J>1WopD5-oF>spgp;b}Bq!cy57yi)6}y7gAABIlFZ?W7s`p^}$ke>Ba3(YB zF(6gNY_;gkhJ$ef({f-FkI-G85mTrKX_I83TqhdO(SPY$*4ba93P3r6W(PWH{aJ|H zXfh#w7oe7!B%o7of{r7BZf$7A7tL13eujP4G`?KumYIy^rqMJ2b9v_4C8BXxQ{~)~ z_yw58%M(to_N~&hGO8UXFuPv>x#>#0dG+L{`@OwjKc+aVUb2BKo$yMtK_m8M|-no-x#Tnbr+I>ES5BNJ1H#F@f{?DKBzoY$-2xB;- zrXLed_h?p?1#9v1L||e0$7k*H!Q%q*qr|>b$LTk5hg9a7#1w90mbE7>Nb(_I?)z7v z?)~C3{eC>{FPPQTj>cr|Iw#O($s9C(AVaC`JWX%Y7HG-(A3K*M;64Y^sPD&M0ZHly zYC(*i*o8+^!CLfr>_00@-icc-x}`n1KT|27(zv|X*(zkhoe`z8-`YP80Kn>*uR@M6 z(-vHfZ{KrpMep9ACi7Lm%fDAi<@`ufEVa|LJ6AE)h1yG zokX!;_+LW3g7cUGHb0Er&C_7zLeK+34v!WYQ}5p((0HWu`OggXlaaPjDHTo<$;k2P zCH{99_@(M@9(7I%AyXE7igYCWRM@p+K@~p^3aTJg&aOsP7wo7W)708I^(gOOzq$5g z2^%}aahPAH&Qky%h6RwM&6z!1WUV(+lIoL_;ALDwMj;iX)TnI`d$9l~ znRcEBlr*06_D>@Z?df>9>m%_dx05L>JJhk0zFvCUK=toqM_cJMtT&f zF$)uaHgB}J*d;>P_jx{lzw^RoQb8PEPm+T(9<0Gq9pAd3#m>@VaRD$qA7TMuLTH(mdW~5 zI%;4^Acz9}MMW*qkaD8XA9U0j0r`h1;LXZ80L_%LK!F_Odlu>s1#xZ@GN4Ea`F4dh z2RcmvZ=m@_*`Vk);CFeI{;zzY094r@o@Nr!pUL+I?MtPg*b+!b262apnw7x3VF@4w zQ2(*PF*MX)Ch83XtV{r}10b9f-UBSwJPWdlhKx-@wkaqs6E#5xzhw*jWuewd=N8zg ze+*O^1$cMz`V{8^8GsTa0^QjmDOXUJxh&FM8Uk+4I|V=_5>b~pfD2UQU3PvDgUBI5 z_KDy%0E8FFyTn560w72V=(iODC4k71NBm==e&C&*3HhSw;EMp%B{Vo{5OP3J+-9KU zulyHEM(r&MxZ}mL^iP$s5#}ENQyjQ`6aqCU5J&~HSl74N0%#Iaza6zrLwce4_yh^@ z08~KG&2lCvg^Efa1O>B$n)FezRPa6;jL^{uMx$ccpx;ZERKDk2VDkB~X?rYz%s$L9 zSx;{|YM)$+Bt!pDpqA;VXf!yOjzWD9_*{Hwh zL@#Q|J}Z~|gATG+MC?&fcgWziS`1m1_bw4>%Q)--;NNDV{t=+Zz`TLZKop5@Py`i2 z@%3dxc3CJcOTd#Y@Q&Mkpn!vKpc(_Uc6IH02>@Ff7M27RSHvo@%q7SasfAt1dukW~uMkAmVe1}lpSzn=##Fp(D~ zulSK_ok^i}MA#PL>H*sK6B@dUhwPFOV*mt!0&*t<*^8I{QwAr}km4*Zc!R+2j|cxI zdAqSxbxjS(#Pga&=sFF&RCkqU9P~yPe3ytg(55w+J~lkOZvapcII@zI}Dyh0>3+*H}nWtg(bj7104o=?y~MLQ=l5G+ByJl4HGE>08Oxw z;Vh6=G|-oG5KjzQ1wiQUA^Z$52hA@+0hcil!T_KZ#~i2#amRz}7zdZ2q8RYU1n?37 zD#U^;GI@4RLHzixH)bH-P;lBz1%F}_{5x=qi4>(lD{u3@p&>sA$vCrtXScm+wLlx5 zB6~gl3+y|hG-LuE>?Hv4B=8ymWKPn+wOmrm8WA!~hszBk#n_PFRInJDR|O9q;fJ6= zMRlgP9nl~SDzY36Oe7)6H1HaMpG*s=BQiwUz)Dx3Er8bnY`MX{^ji^Pa2o2t2An$z z{z`(lv%ov_!s-gJE?-P68u&~Rf?}oNN+9&*C;GIe>$+#;9vvQ^Bk}(Q_}_c1(GT9F zJUNIyl>>AL6M=5Tv{e!?@gUfQlr%0YJVgvlO-I#I!2ZD?l_2QIFW}c(yv0k84$?$q zNT?JRD1mfv^qM;dDaC*fQ_t8(J@H^4-2LEbAxlKaZwaUf1-b~xSX>7!i}3kV_}EvT zEZ|W=EWmpPoNMn4b!4U49DMmSpd}kb)`z8EM6v0JSt9TU72-pA7LBIb{(w9P248Ul z3O)fVrh}9=P|{9x|7@?|>@G=+SLiZ$iLdC#~Zlr32+@6705Xls2sUS zC|yBA&JFw6vaU?f5hD0!ZvSoC{Q1Wxj+MdN4HWU zkRN9RUUPW-sHhq|c+mjpf=AE+VHcSo1QE(}tA;|j%C-uuzyq77k+MM`B#R4@i+$ol zh5o=p)|dh;0?e2EPzaBh>nMxaL6PqP1X$ojO8+#ZMFQ_|d!%iXmd+va|MoS~IR4y+ ziqyUX-Wc-vXPibw^Xn*4_9$(4skwhCkfQ+pvRPz>AuKdF5bg?9E2#-%hp$n9J;n!< zBOy*qo@yr2oq%|w&;NsA>xV`RGnw`hiBrT&e*wWj34VPJ&u>85mLWo)4RE1D1*~uU zBSTSic?UYL7ytx%P{5Xeig9?xD5yKEM86T#U)qgiR$@BPwAiin2O2`hAnM5aZH=I+ zzp1r zC*P5h3;>xt92f{(X8_B_G3u~Kgm<0ZBrp>pW*-Gfq9MQTWoZaIjMYL`Xoxa;OC6^r zeXIReHvbtw3x(<8ZVh_LE0z%+8B9P$(Z+0N9|rSiCPs<>4TCHZkeSfx0ZpC-jzBmI zS;iE2Pe#_`W1SuxbofR2pd#A`1-mrx?bgJJ0+0?nzk&nM+yjg=1zc&o^I|{P^{7h> z`K=jM@}Q3lV`iFxc#IvJ@cvGZ9gd~(Ub#Qz4d6A(LHwg5ODkM@!fJ~`*Zz!Y0D%D6 z9X=ogun$lL9JESaGH)HfB9EW~1TKpfl^2qbMT$!biQ~m2WTlaE7!>x9AYMfruPlZ? zFjnBDurksZjD(~lMg}8;mBC>#GIHWr8A+^+xV((`5oxrhG`}$hY=9S6#fvG(U}UjU zco_^<27~+G$v7+)hm*m{U@;i1Bo>Q5Sa1hBuvi%^4ui!?yZ+et^?Psb$K$j;j;)WgR2tU2kdjpf<1W|lTq78d6J*UXGfj7^9q zPnly~NQ>M4hK`?FV1ox0>~?h~ow9i!lvc-Svj zJ*4P(D2*7Eel|Gid}OXubjhih+a^(^2GlzmiDgHV>Wvfc+ff_cGn(AeGnxdyQ#f%5_b@%U8RoBqV$_s9ll~)wq z=qS5c^Pr@@z2@=D2Q5$9+8%d3X&imd=<4d|?Cx#r8h!L?>gB-u{^5zfp@G*UT~p(& z)9;y|K8`FbzWcH;H~sO`_~i7Psg=o(Tb~zq=T~=DR(}5cwXwOex%YcbYgCJ$3wTi2 ze29_Tm9#IU>^{J#=*fT{@%!FV_XTSd(?K4Y`s#HnA8(qCv2LjzyrCf5u(D)_5;xk% zy0=$y$R(+c6rtI{M|Eda{E}Sf4ZHzJzM8++*E&YJSX z1HC6=BQf^(K0NXtt|tEfRId4pxS4WGv;+Qww((TG zwltJH_QK4%z2)ohp_%XxBcNY0xpHEkbb5M}Cey9oU}rTqAa5AX0xhl68_Neq6KSco zQ`O40Q?Sc1qt|OJ-(@@jRkgM_w*UUdsybbM=6T2FkEusJKNY?~B~>y6xhlw!sIykN z(I$OB<#1{L|HFy30Kt_irZSU1=<=Z*Bdt2aU-x~KNp|Q?= z+T-;)pUyZ%{LYk_8L)eofr|7l#?Ba;q$baQh@eT11y)_t=DE;ppQ`OxS9C>hv3@?! zaBFEkp9t;yDDnBG?58N|O`wUN+tQrP$$u-q`(kj>Krd@|_wQwKlC2pT7JBk#>BbQh zUTdGLh9>5cJCbSSGrrz8MJ1i=yRKoJS%q&&5mED_GAL2LfMi#Swxy^8%ewDBR8Z8- z5aP8R5ubF>&3>oPZ^MMIqa8Nsfv<0ddC{tiE-v4zuWeXvKz#h(Bg!@9k0FsBHw6B8 z@U+1y9aInr96XV~0PNTH@cWP^zVGaE;ijbI%y^4bT6LP(T69H7oNBAXS)Kg&jg;aG z_HzjN95GRK(NKjrEA3`)SZwr`+{Xj6Er7 z?LW9_Ag#hl(lO0}XYLQmCv!XoEJ-w*_YU{*48z>HAdj&>-x?0pa)m#c4KHr&Q~f=n z^FHMFC^S+|;Ftz@%XhH=Nq(J^H;P;`23v@JpG%YQwDn0%J< zSbXa%W$_C0Iq>`$`3vq{qw;yjO)W&nw;_WP(IN9V490KV7URQ`9n+h(iBIc~iZ~x2 zI%oE!T-%r=m?wX8J~$9J)7xw;R&w&cH0`f6;cKF^QApeLixbVZ>(}`rpCuM%8p}&M z$ECcgY<2`9^k=NjfsYl0{QiP+I3T?0kHH0-j7={??fz4LHYyecN36P_uAF3v5jyzTKo>HGlY)U;IxWyTG^eTq6>Tb5 z@L$w{C0W$psdO=g>lv1udECF^bnzux{;8-6BzMDV(r~s5rO&F6`NzpXhDy}v1wMeq zllX-G&LPYfOr^L>mii1@M(BDKZjm8mI^CA0G1rCNthYSA(p=K1$%pzB*sopYjk-i$ zIPEdjeKL-YR^AA@$kv3X=zi;5rSM8Q(oA(b*_nYD3x3}z3;9M;M#w75uFWQxYYXZFO`csQg`Cd;Om6l-{pYKa=irtSo!Ta_?>eVCgRzT+w7`k z_A=937X=YU#7f)^#-YQV^l^<5U+MTM)8j*S>FVP>k}<_*x=hkh^VuE@dD}!}Q!`(K zn2amj<}q3_&hXOjxdu%dytPcu&np!~X@&Ej+e9ODV&q_M3|`XT`hzI(|Bl7-TVnf2 ze1RdWWG9x1?k6H7+$I@rTA%Xc(6?Nx74L{JN@-%PX1Wz71?rz^rqjkA))%R`U%)Zd zv$_fjWOl(I!XcPWIzlk*KJ>B#M1NrXZi-|d$>CM94nie8#m*b{nZpvTo`Y*dyw0D# z;V;=iR@8Q$lguY^LnPWbxu={pXew`WjL*?dmV%U$UmzY*GEUES!Xw}b=!~@iMs1pb zcpBnWO7qr%f93%3@;fT!|=A zIiXsaL7w8(nej77inzCUf<_6=G%%QFf3eklB zNYV7&L*mni`MdXxhU>&EM`fikO0zW*@8G!dv=r7^rY}V>yqIbdlHVX&M}F z!Chx1`HkkO{AJ_k;RBN20W2~k3r*e!gQH+Z(Qwo$bDi_~j8zryT?8!^WL)19lnCo{_RbO)J5PJOH z^PdSBy1G|qEJ3!5Ne$KykuBfoZvC%U^Iz_LJA3!2Od#9LBxXX=BVCAM42xz!2z-Zs zl2i-mDC@^|XKtBqF;M!gs2g-a!&Fm)2&(l4lK2)LOMv{PnK=}qR%zzxPN-GDVS`lF z&LXtrI5O%W(t!+#p<5!?4=m6KS^?w=hs+{)?-P{y&w+S-!8sJ z27pWn3IUwd=5r$3hqTrXrEZ>6@+B$u>wrxNeA$P=i?1JY)(oCriI*21OJRaCN@^oK!zjC|{%~*O%g^4$)cqhQ2n11~;D! z>~bq~&MLCX3JE(%smUsNnssL?t1K`J79m#QoLw80U0IFcfB5>E5SoKiq*??5A&pa?pD1PwAd0ZAZU zoBU-GLj&bi=s4;Kz$QU1M93x}&y{jiz)ncxt z?G3UkmIx0_B>0BhYrbR1$k4BEl4DVrV5SzLb-fV zjrk^++Af)?Z?R8<93$)85t6o8ay7P7dhAmYl8p0vs_C12$X82@^C-uWbVyp@MkMi! zdWPnzPr#kQ5@J`$j%;eV0QQiQmMK|6{_>shFRuD_V5u*uek|VWmu;G_-!O;{h%OK| z0%-duWsCY{zjnzUx6XkJk|v|?PL#J!KG|bsmy{2i69G# zbwO5K1mn=ZsYZ+#rMc!0EcA>^dr=K1Yf_3BaExbuVwIzR>kvQOvz!D1RcI zKZnVm!?{P7YRDxtl$~m*m1?Lw)c{++2VK8+4bV`U-Oyri|8aK1eS`Z?c2VWK^@URW zFwJ`mx#Qu=^uyKNha9P<yRJ=;J5Asj2J$Zhsmb7f1|Os|L}wWL9EOw|1J%_G?`jfPY2KVh?+rEW zyS6CaX;H{wNX2rS_RQg%_ozv}Q_uJ_|+ELOSfYa^ucRCuLbu`X& zJp9|ikbc&3{Mlo-XKk_1nr8Sro;~ZFdG_M(Gp2NBcW^`1ZbJ@>zgoGo;~76Jsk3vY zbLf6&@A2nvPd|Uny^kJ;J@0UPK0EXL)1A)er#r|0K3|Z2J^_2NIQ(qkctdM;!kF z!!8l`uAeiIy^=1e&aTb&E^K3$z+Bf#dlziCYp(Qc(jJ0p`I<|QLSv8qY}bj|GO3a76Yf1GjUqdP-8Lb;mV3P<%&T*TuSlKc%R4BM zj!#Z3SGKhG@g7o$sL#79(-kd;82%jjNsty&cRan zK*HW2Jx=Uy$Y6%eK#|RmY}a6j9qx^f*nf>8bj)yz;qYVk;kLNpr=`PfooH7gIhvv* zAv?HVH@x9A(ib-pJ=YgI0_p`iY|b4cT>yRA7IFiGhmZ8fk5EVp60-dufy$$ajf1bw zS=e?<#-)Ks=D7X3qtVxo{Ish~-9hia@4p1^&$W4-U^ukfSd26tgldk^J74n{v7$Oh zsJZ&f)^;h2|88-C&1v@blM4 z9&leP84am?98`NSbl+w|Gju}x+QiWZ6URm;?$7q2Z3mvuj$HYk`(qsP9+Mw;)1G#~ zx?zqbVESWiaA~uW6C?ejE5}}4KOA}w6f;5RsJ@1K_y5Ud`4~+`%?|$?8Q8R$y!d=F z#CCEjm#b(mbex z{=&dfKi(i`Iw+rxs(Cl?e02IvcWw*`NxE*}Ngd6>h>sgh4#kU&d}Irqm=ifO`7!iz z!l>?4{2b=f9ClSO;K5>e}dI32f3OfB0Cy|K@a^*r~d>QR>$99AS%RA(QL?1=1MFDwMm6QoL&Et zP!Syd@+z4l!8v7mh`A@>hwQ^(v<)VYh93*?&bM4ibGg17?Yq6-NKb`xt ziTi(kr>tsUmdp_ia=0xF!jmGRK7h=V+vpxTOZh`1!y{&M#D{yw1DoJ~vy zA%ymBk>*U&5i%!ICG5VKWs9nL_7>a8nHfdvCh$p~Td=x**tX29Gmz79mS-QBZIGBmT)WA z+u!Gx89rFvdv)H=VMH$e-=3Y&`POsA4TZJiEB6q?o@()?SU$`)y(q_(4`)&8yzbL? zO|T;s;}X80hW1Z)jl;3oWEDi@ll?l)Y?RK+Tja@64wYHFvuIh8p^8+6O- z>J55h?dv4%Mh*4!{Vr&G*o@ z>Me@euNEBR1V^-nnA|VcKmBH#Uu6GUc=UR+h;QR1+d!&ifQT~Ju`?Hs9AG3$?A5g> zLOREpC$=~|-8#SP&!YreCD8g>PprMXsGitg9nZP0tu`K! zp(B;+>=UUP`>+4& zmRnfA8f`X}`M1dZY7^s-r%IoyliWe|unRi>2v8Yt7iiqDbPdt+QMI_jXt!hyp zFNse$d8AL-s(G=HaS`6vP!>+}Y5J>^^ZCZ$vkQsV>L2`Wq`)T5r@5v{E~fg_w)@`+ zXw&~z8aCM;P?E*n&|gADi**E4=6sS2td2Yp6LkB|mECXkH_CSXYwj0G{V1+D6H{&Q zf-9xP==pCDd7SY72s`_@mj3wfpL2G9+ghvE*3G)VPo;aQvsJnyNeE#jl}aTcMCWX4 zEyN^Ag_R_PB!qBQ_~w2HAuN*I=RRbvUBBybUH@MH?Z2Jve9q^*Kd<-e{d%6WU3T)5 zfIt6q^t?&AXYO6umwWEh75>&UKd-puU3@pZ?&HOO%;b;izaCwqXQkg1AC6mMqNpZ~m2q|8+f690TUZAJR~>UF5CIs5J+fDnLfqH7R*M=z)| z9=oU~9wLN70c2Wmk&~E@w~bQZeL98ARq>DkkV1|K=q43uWPH06YFJUX(V_TKH=hRD zOmdjPHKoi)zd=MQ!kBO4Wx?SM210T;gSuQV$E8xXWro{qP?pDXQjNAd>EYZ%#D7sB zUZ4`1%K#t27>OJcFJZ~Vn^|O#btNg{SF)xePxg{9fgKricKMc-O)o7zlOrd8yt8#> zt5`q?jH2o8RLH{91dKJk;Wh=^OmmuSt<0iDAqDs<^Co*Q=csA9?aEExh8!7Y*EofD zw>J;ixp*CniOH(0pj{O*EgL09`uR}%Vt_%7mrjr$-@NcrDlH7aAoC=ZC&ZMCwBENi(ywayid1xq}*D*r@j7Q@N1WQkFKpuJ+b?7 z{gBr`HDr1TA^yqkrBao+;J!f|K`h8jR7%*1D!^GG^LMb8Sr@@}b}Fz1rgihIa)C}-A{N)W5OTzkhbkQ$b|~Zoo76QeN#@?w z@-3y-X>*+(86`ZBReu+xPimRVELbJAJq{2(HGrKDN{P#daKX54P7)rPP$To{)gY0D zi><9O5O1kwEQMcK8N+WOlTpb=C4jfmJKHj~5~4slKHZ3xy$zhx zgmD5#!`W`z2$4-{)|$~UoA*kJe^WR8%&5q_RmsSRw=>4D!hNcZb8greQ%7##a#f7n zq)YUOOu0`hAk~#b*)plW0KDbs*1*0&$gfREo!15sd{j0*DmC3h0}AQ|;EE!TDVgI2 z@0%O#Y`8*tuAY2yO~}tDOSa0|Kqgs8_9;T>L8?V}Ofcx%B-gO;Npoxx8~9bdFfsf( zTJCwzX2Vgk%GqWlB=qhHUa*fbrMN%B@zkA7>kAj#{_T&BJau>b`NAa=*FTz;aq3>( z-@*)v8(W_q1}a(z9{I~R%~BP4+YHH9y5HTLS=3{8OK~N%zClUtM|OI4B8!%dh7Ph% z+XUALL25i`8XS1-^BOh8h4C>pww9k;@O#(EP)1=L?)q$3(xnRUug4?nb;B6pQ2dr6 zUA>f-(z_zbR+L$;S@%q?n|J|tBo9CFF{b-?dfz|yQ6y}wmN=oa$>8XyZ06cQW?tuh zE052L#cN-fM7Bl62_yv7Z>zGl%Pv)IW{icE{Mv&G|88|f-uOQLU8Ov%%bMXe{*oA= z5xR6+XK#!OV=o>-43aUx>C=CNbt6|M4c*DjM$p^a$?<+|UJTD1@kNnxieJZ`ih#Dc zWXADuzZ)~kOIT{N5hU{Q39w8=d+;HTbTB4r&9*c1n?4$!nH2FQWZU`JrcZ{yCWS-) zl_gg-7~vGtHg?Vtu|lkqt%RgUEA=mbeK7Kge&nx8=H0A{4>o_ zN6rmy7PzejBX0K|-T!%WRp!gbqu3Pt-sE%vYyscLh<-;wIh~wBKXrfYsCxrSZ`)zr zrwx#n!{rjPdFSzsy@)Iy+pYl^ zDtUH)h`uAn>__;UaoOAu#;B_t!0qOR&;hiw;6jO#RMbLbbn5&^d%E3*_Elwe$wowO zZ$l^0!#uy)eQ^!@Iw|a1Y}ohtVL!6Ney$4}+Z6VzF6{T=o=syHahV7~fR$tt=FnKC z@%TKIti)52Swvj6Sh36Kyg?CS>p7X8L!PXaXLdpY?MY_lc_YEuynOk`FG#!$4IeAZ z(43%*;ub5~a}l|fK)78&%0Z;T>x8dr(Gtap32pMMc(REC&A{a4H8c|E$dO9LNQ@%8 zMv?0(%0h%pZg=oIb&LivPbPa}xHmYQbtn4K1}fFlWZHuVYW1T!(VG((KH$3^GK{L`@W@ zocrb33LIkuInV2k)X1~p8ztnBoEEt!26(l}P9@(MI6NhGRCsW#%)U?F+=Cc+PRN8w zYm{XxYC^K#Usw@7P1hM4i4=xCkcB<03hQqQd(;v3xFfWJIThQw?5&g8!G_gUNBc9 zeb7i++d?WQlk&#od86{&5qVyXJ_p9BR6$%ic8aP3xt^0_wEr88R9!D;IDxFHtEzM8 ziMPJ|k?Br6NzL*>^LUV@z+JJszOGW9jl|FtEm={q>T%GkZPU;`qW<4u=Y!t8^5%Ow z;8PY#5+j5fNp5BkQy|eN>Do)%vs7}g-Eyy!_~muPOPqU4Jw;hJfS6Gsy-41CSbDQC zD9W>JwPxmuBBGbml{xq}*tkz<-zTyte=!hC8jauvKoKon_?p9ST5r8GN4-)(lX!4b zJR19|FK!7K;XZwG5n>+SsK}Qe*htK%xt5{A$B-d|O!rbHv8w}t@`2rTGQdKU?-Xz3 zv@v%ClGkeL@DfrKXbA|Ha;4=lCy3&!%1Z#5dnwaNY8vH~p#{k`AURW>TNA-j;-7r6 zabF8GLFF-H2)78(rzKjJ3eDl`A7aT9JiDK#ei)-dgw83*??Mc|HP`@A;VAf{%xZF$*Hl*nL#J-F`Y<{vnlr^P8HG@?*KCd;X6U%-#)#)uPH_1Huz-C#_dk1k^4YruoS-Z{ zCJZ$Skk~~@pd1M<0Kf^FqhHN68JipN;a0=M3y%q-?hTU_^$#AK!V5QLq;LK6;cBY1ecU=@H|Op2_G%~qZbXan6cW4&$$UGI?FSKRne zckku2g`SG1Obj`xpS7rIF~9t5(v_FN4_^9h+-Jl^DVd;sk;D;}%}ydXMgjOJz-SaW zeKzj9FZjcF-p})W)VE-6n{-nqF_(plm`YAdB>yTL%u`4OMfjuZXK@1tGBC*ZE^1RF z%hY?QWrv^|hASIk$ zKK~l-VBHPv%OF|}V6C_zFN!$0op|U8u;j@z>&}o%9oHwcNcqeQ`eBW%HiVos!LSps z(>)DZ(VtEol`K`BUD|>V)C6Gz{frv6SP49 z9ss>d22;FIVgO{S(C3~%;f)-nD)bB6!5EjN)UgZ3=k-2CD3sSi&a;wnxd7NaA{D#9G@n)eqZYk3`n>LC9{}CoG74b(#{*RgP#bZc&RAXeHHU`) z#=v#)CWWujX~D=*+E^&52Ju_`ff?0&eGkY3a%!^B>puWe(nG2zNEI~8n~p8lKhCD8 z*%(^9`|!^oMDzGieBp;O=4E;K+=1D;FZLNs5dhv1N8LwbaPlWS+AcWTU+ki+|BnYnJ+U-C_VE+!XQ( zI%GmbG2(V0J5on_uj^X!sa25{(`-}nVf_SGw&G1Gg3s0LO%Qc0s#SQ4P|lcs`GKh! zL+wM)N>nIJMX9Oa1MdgBj8PW%u$f}1A_k;%f}y79+?@+w79+;+CyoNajg@isf}2vw z!3O1P4;?U8BJ4J#;Q}gYbZM_u*yVlbC!)rgD3^R$w;yHo#+7H}lE?b^n!J;>-@P{i zsmBnUrg352Yn}pV$w2j`6jfi39RhIhq3dyqrUQ$sj;z|06vt(uWirrX@4ABj{&YS3 z^Q-8Kp~{uie;s=s`(=Ojx68MF^U#@l6=vAa?2A8kmK0z9SB6*>{a&ItSJ~#xYiXx~ zI?C9^-3GtrA8j(IL=4;V-s}Jj#}HQ3c-q@>qs}7A=&f>H8Cm@C@pQ7dd)%|}mofmg zn1p&Ba%uZbvfC*vSN_`Rh}Nu5_%!7xwPh9lz&ZBsGMoa?=URJpdm0u2#U#+E<{d?G zSe_H5Oo}s8wVaLockcP0AFKcUTwQ+Q-y?QD^4n@3?e|=o6WC)4e$H5bm82+vNNkR9 zu}s0TpIYN7ezBKiV3j^TQ^;bU<~t{B7L0s;8EI@gC5mfkBg3-!>fJr0SHp z8#HJ8gqw_=Y}!TxUR;qH*|87#%;=VucCESTJ=waaY%_+2Ccnxa^L%k>qv^!l_hVi| zy_JqLkLLXH9==iQzi5y1*Gr00`zf1#1U5)Y*^a4gA=asqGM24dt;LKUREon9$s>Qa zB541=B#o}@^Oevo6%p0ub7$HYvi42B*ShO#`bLtE;qUroUnfOgATe zzoTJP`!{JbSHcoIAvLfNkH*DEk0h>5EQO~e`6UA3>vk-|o8o_WG+~V}9z#yc~;N`$f5= zLX_gLC#{m=_^(x;96cVGf5$K4t&F>8^^1I5{PT#@m0RIwRWq4{U~C4}r%CfP$7SsI zVa2QaeRrq=tx^(GH7oxD*13XVN{yq9UeBuoiOYXM*8(2H<;5Q*z zA3}~W40>TvyTN#T7{d@2I9>Sl_S}Sve}DfuHown!ZMSZUq8h2A+UF!XWhX}1)iuqt zD8_g-X>zB2+d37b4Se|T&A;|`I5|Hx(> zBj{6*r>0brmO%I9c!h%#(|jKhEQ7UJ*!IbPgd~$h)+GWV36?GqbOJ(>X|hI0dcMU( zw9R!5XIpssZoG&=>NbT7&?>NT%J^`)H8!ne5S}NfZT)FOIYj)+nnJJ$hV@ z;$1M;ebiD^)ouQ?@MVSnt#2CKZK1({ju+)Sz>4;-5^F$)PrZj3$uw9D5xL}_TWPb( z4J;^*oe2M!39fz0@;)cnN`a=q~Q@o*o=`=TgGo+wGNeG(d^4P`6eSu;nk z)5l3rOT;B9v|NbO3wGH^3NEc~6a9B5lG%adn<=k^9z~}exTz4h0FR?$@&UXGGRh?* zglERvsIZFIthr=1brhgw&cN?;PUOsuccxvM(!BaJ;(FT;XGp){IP1;qS(~6iP z_#Z4+?E#~2hC~J|f@(E*)CUC_3e<253)g{9z#sCV$I{Eor`vgN+Y3v>ik+b7{kfGB zQ7W!h@5d`1YH?Pew%yi@Kv+O(^4XvA^#!;&kTyOR2h48G*a6fu~mxTbD1S z1!HL@7B8_WFZ2j+z<5^@4pfvUc5x9#eLyL2VGdX`CbPa7*q8Yw6R53p^8dIDq%}Fs z-Aiqn&k@GrxSo9pSAc5E&IPooIaPNOfkSVq8fVT7MD?)|haHsD=HMvq?C`V+o|ZTB zSH-f<;G>8+gvR6^w_&gCbG;)2Bv7?pn`_%;qR59JfxhikIMo?Of0CMl0fSax7ylzg<`Tk3By4L}6 z2yN`M)T_rP`5DLs72(NO1%<248r(AA^|{73xa~N|)YhIcAGO7;oxFg}c?Ug=%>$>3 z!Q*G1eILx`F|YlMsk&KMEaF0}zbzWEg-`{mXq% zY+qoWhu7u;B!W*pINk$UY6;vKv(2>N(WHTqDSs*Aq;V->%qkBL1LKPr^%%_unXOx( z0v!Z@@9(8D7tqI^6SD3{79rw#EVl+b8D+s7Rx!Kp@A?J0bwSo-ymi}LYXOWaewrDD z^jnxLs#&mizeU;+i(_N#HEt0H*GqkZrL16h*BUs{zG9|pB z8GOA{yAyO&Le3p((ngkJm4sK*-CQr?jqwR|m`5H8E$%;Hz5vI?cx1Z+H4q=Kx7=W$ zO6{Bp9jF)mU4Rkenw$$E=fdu?HGrWH0JWjNR(3b%h>aWr>6xX%?BcnG5Y_r|-X5#jcG;*>>3ZDA2V}WF4ReIlJO2cHeU^ zHS(z5dvJGJ1wNIFHvYx&ujz#DH!Zkp0oqWKOHt3nDBKrWn13Qf?8g{GLY{Z3`Ljya z<^hW!OW}yMRVqU8(VrQ5{8`}#qoqEDJziWJBA~Y8PWOrG@h_CxnO~Wd*~5(&1*b{5 zg)nXCv9;X5JZdMAtmaPb@l6Wzjo;_1Oa<#xT_iRucJN7fbYe|U-aMS&)E@U#*dRE} zFWAv(Hbm-!KPMlsPsEihIY2Cg>510D!bLs_IKS4{c@l7~JM7lh$32*%HZoauIs`BZ*O>}#dpFP=9VJ*eCQ4ms%nKegyRq^oJtARnN;7Bd7s@>dZ3*l)m8=Uv~N;FAAqY zK4%lOMXO6^sq z_EQ}Tg2N*yPdew~d}TsnvCx;Z@636CeFHTWW87ZUw9AGuaA^a(8b9?q&u%F6(zDPi z7_S2G`5Z@X+8er7`^XNe25(%H9DqTMU(4A@^jKqV%VwhSFI^>IHZV6g8OYkRV*#Q5>3p8c6T^t;#7mJJ(5HXNy_^a-*oC_a>t1SUmFvh(8}`Y8 z3HhLVg_@*=ou9&|7Xp;<;fbSVr)3!QzF}e-M(9GU6ecDk!1n+gOM5xgN9sS;$cU1d zi2yvHW<(u>?KaKqLuf~;NE!ei;96kgh<$AKNenZuHzno(zATR42G}AMFt5sE^`cHL zi^qCj_)^e`NnxGTImDKX-vz+2WnsPuNa6r?eTPfdBMSr(?Rw$03M|?G>DjMl!bNyJ zs3z#_JQ=|-I2zej_44HLoZAoF2VL&d+OViB$g#hbGyv0j_JXR`YwbDwLJ9wp6||XE zbIVQmJM&ew=+@ik)l_@1NbIZ>0RX}ea0gh(V=Bz10ld*nqfbQH9?AWX&!zJ|0Or`V zfLjhli8@2rf(Wu&j?ny;Yj|lC4g$1&i2O`cA6El6)DAV>xi^kGa+?@!&RV9owW)V% z>wk0rv~ma7EQx!6x4;d-C1GJzvY|?gMfLJmq7>D%L3rw2xCLXt$dR~i9P<*+1Yt}? zU_~`IANZR4jNydZ6otKmgv%mutfEThH^T(OD>S!v6O%A}(RCep+{21$O7CzngJHYk z9=ptN!X?0sJd@~iY+1u_gcie%87)dwE=xu7Uk&?~3;mJQ4xNM3ynOR9heGzt!dJDz zZ8xD$$9$S5{`x(^W6DF{hB;#8O%i7b6^6s7Vj;c&;pf8?iK}0Ea)_GPuF)*}+d~e5 zK{^(i388FYQNey17aQ1^L+(Y$J90n{X2z=Lk&~I{&`q1|9ICoQ@c@sWCSQ*MZeDU> zOKi7(NY4%o@ZvndwwhtL^vDc3v)tpmL(&njp0m{??LR@?KxW63y`raV_!Sf0+3aNa za2eQv^;LEs;9$q^TeW{!{GR}!ZN1gb)p;lXr}tx9%+esVp>~$fFf9N(@iDN*1;3 zPs#jZWRm4L{ef!kgDFukvv+}iaZft)(nP$FY#?)8Z4kR`Az9Pzo(C{E(|tAz2^c(~ z2Vf|Z=)G$H;IMEfM&pMDofu=J4f`v>FKc`3IMnDJDfxE*pMlDWeHKC|S)rYL>Z{r% z@@bzK>cE-O6`}sV<6*@9MyC+}6~7*iC*WSMfhT`TKRd<0@L$-OZH}RPAKtOAvU-YG z80-6OrHo*lpUjom3&8v-ht4E~pF$nFgozMJFf`^}a*r$lqW`q%c3_yX`Mp!$NI&wg z-u(tAAi=ME<{AOAN(o<=RwUoseJ{@aA^~9(!aI(?=PA3LI#7N+RF*OJWSGw@JgDC@ zZZBNgb8=BM^I#kg!PP_Cj*iVC!C+3GvvMT>V>RD4=Z^TB&Y3D@-c1e-tit6UI*+i! z)h>PAt^q=$Hm{U3a&bn%E0Z64Q;s_BEQ{;AI=>0C8~@=${t3s!gt2L^(m_HzLK&;} zEy19^f_E1_E`6Y;UqYB%klq9=KX58zi<;nOX=o1SOmJb?bq`dinfRGLb6`+|eEXeB zkH2jP2#;3-c(V7RHqU}OL~#*aQ-S($-!EGTETN%=&Bug~QYT#oS2*ue>`R@r{>4Ab z7rm1mbh}si6T2ci66fP!gpdyt$vX*jpBL)W#Zum>fXh+!$y1ua^4~2B+F*JxJo`L) zFFonr4Ge^xYS=JibG+IRnDegf#*fiI5nepjLD`At?5(#z^W!9_?BWr3hbk6`7m@&w zm7@hZmKpuLLa^cETWa(H3jDTAUd!Hp--*$wosX&|Tc?a~rD0PVply8YKjZQL+D|&* zF=Rs%s0Dh%18@8{KI;nd&JEsiOyb@r;s}7fLE%@I&sAj+QqI{s##*PIe!8pfH8V=& z53_`Q&nGeQO%5tT8#cTE+fx?yZXw19kov=67DJfI^moI{SN>vk<95KXSBF_{=;>jj zUmyIy_q*t)VBZf4c{~T_C)IXJ;g8(+xZW+PH9;#yB>ztFdp~c@r zd)9IQ;x-`8?89|ZP9fE~?#`m?pQ_@!D=V(OLN*QwjKIC86%P|gXgOpD&`IHNi7 zOy!c;ofA^7R0VDyD(BLw;gprxvp57gvu0G=5OK%IE}hP>mJG?LM2+}2XJb~&^h|n9 zl8fjPc@xh*dFtm+S1zVMy^sdHnKp0!(&e7v)JW&BGQx)LX-}|0)H3tw*)@MmZ$8<_ z7QmhQcVqJD%-a_#KIhxbJDqp8%lEMPG$t|Q+1ZmHew=2@jV9>Rd8)m_AF-Tf!HBei zC#PB_20xxMt%qQ9yKTX_^qV}tSZ+W-PkIIKWcIz*1^Z?@Pqv>&h`;BJylT{T{2gnEjYBWt8eGMVqp5Qd1 z1@Tj_;%RiMO3O)za=zS4__tgO_<2*dMa2a~hXLT-e%bcvG1dj!eTcn-j5r17`1ZH~ z0TMRN2W8)gioOcqEWH^Q*C05|j!|8` z6KP$McsJVlNZ(z37qSDiPyF@TWOieIYPkak*7})j7R5M&5d~D2gNNFwu17lGzI9dl z(4;se^yf-lo_6CU{@EbUZi7>Px=yXsVxv;#iFIuoD(guuO4)j`zw*i^X4)8um)Es? znA&{-#Yy?KpnGk!<>z$v1u@pZ%$VKdBzwr4yi`U`KYUY4NzyED>v) ziGDm`ZH`uhz2wa6^tGc-tx;a3{hKj}=ft$AA?v`owuqiih)DS6VxYp>aN52|8ZKWN z0WF*wW;7F00koNZ4Sp@4yDVY5FMibf zW>?@+DFW$o0u~!hyVB)#8%*y^c{lZAPFTe>@2hDQmjBr$7*W$ZP0L6EmWneyC}lB1 ziSe|)_jJvtr$3*g1`EdqCsj&Jl5@{oHkqHbJYt8_ybf*W4i^AUczcZ|;=xY@ zY=3JL&<3;GMnF!7m|%AtrBwCV9<)FZXLv7#K5HY$5jcgfgK1gfPLK`*1SbS+z49Nf zUjETazHo7jPM9(l+ zO*2$twqE*%*+#ZR?_h$gItO)hu|B#gQB1bZM0Kf3obD+?vL-91iCI!!008-DpHo%= zIBuU7v^Ex!r^ZXH6kbyE&ua3*ncd7puT8GWAT5j4SNBSV7Zj`Y{G? z0R{u&r7Q%~n>9h2=Xc^HfnEuS!dV4>1305tD0N5(A4P~hHQ-0?lKZ$J42-#_u*il{ zTG}?J9J{NG7>#sd{W7I%i|uchc+#}~qXgldVccwNhM`7`c(=W0gm>ahn-Ynha8`Vd zs--*SF2O+4OqmCOMnxLP3P5q@sv2{>?&IeaLvavDIDL8{OT3Gg%i3!apue*Mbeb;c zaKiNv0l~5bq4=#qj4-X$^$N_zb(Cilh2X1q1GdsMh}SE?ml|Pa!$_bXfC2q|!=ZM7 zWZt&r_1{l^TK~Cj(cgBN-cYGG5MnY1dM72wNj-N~{CLvqEpR^^|hxtOK!2h4e$F)ka131Y4GxGH&>#VWkz zcc`f$=?tTu$e(UE^kbbq#jT*UU6*$|k-dc7_h zK0WoIF(p%weiW-&8=DQ%Mv^;Y+r^uqFZ~47+#=PDs ziN>Y(PRLIRch#L6G-2L%93xR+EF-1lv(@e^?>5KgOKzP)tZOjYzyOR2v%j8EcpY8- z>fEAbd38^o{`hg)qJH|Pn=ZxnlWRdW)xJJvnj zblDbOzJGnIe$Zi{djY;3KU;I9;{E&!qw=cRUrH+h;oAWR)P0{hmQgjH*nh|&I>N7U z`HrMh#~Ej2&YDrZ2^WLL*TKcdra`Nvb;G`=f8AWZLFZiDoi(66Y&_caB4hj5S1ZxQ zD!e4_TjPA$8wyFoG4&i}AyZOw`uwMg)#ER% zryo4~Zu>y!#i%Shu)H^K&sX374Cv6_`vytc_jB*0<2e_{ZXMh6{mAOckq*ySY-rD7 z4`{FWE!?~AsnI8b`*zT<{V{3)uik#(Rf?K*C@ z`?Fbt7jOS^-ofL%BcFN4z4%AAvQ8f7pa0AcgPy;jnO{9_zGCa1bXE1nJlEO4gMKnQ zFcr@f$30dtJW?5twE$h;#ol6<#5dk#Z3JAmmIvI)sZbMCOaRnZ4zFZI?&NG)>?kJxTgFTO* zYWJ)C)|777xa;q}Rm_NLGZ2dKvOI)HURQa|iIV1|Om)t{uA0D7Yxx25?Ww(ZXVkM!?nVmZ`=LX->YM{xM~cWJC;J3 zD(A(3?cl}<%i7Pjn^Rx{&)d#n;sbNBQ^+zxt?O;w{&T1Dh#^|g1Y;$l)K%Hf z6I3^tVPJZSjyo(46A9j5_;Sk60 zL%6QYIZgZgtShndTGo|pBucx;MI5&8V4(AIe6IfWp$Za;pb+gf4`;@r1H{btxZE(; z94I(iRWc5n%B=?9ofrj253|%0g za8UT1kon9}IN_S`{I^)=B}lFV$kq}Dq?8&MxbfC|F&w;mQ<$xXx%2VJU7Jcc9(DrS zz2R1Z-txH?AdMd&-tcLPQ;}M)5w@tNl!7KT9lnV%`!`~QCct!qb%?Woz}Ai2e3qlX zZU|Np_JEen9YByA7o^hvPuwd)oBi-2!?42HOMM+YXM)WzwN^{66quxgjQXWS z_QqalVw~_r*m()*Y%YGSk6prB!bX^+hkNk^2k9+(h!ld{DG0$v>$6b+Rs)7C zl={&Pze@E}sU@2rU^SBPTAY=tZSc9jUEE!ikFxM$C><#d*M=`; zzuU5d{qjcI86o?d*sfO1Wm|(ju9O6nTPq~7^w>MIVeOBEeI{;U?PsP?EZR+QIhe1zfKUkVZVZ|s;lx$idwTxpP{Oj( z)kXgXL5`O7_^STbT4gqvkW+wh_k+XE#ciXuAwIV(wZu-LfdH^e5|dV`%w%d~wieX- zno87$`2rnQ7#L^@0on=&_y`0l>T?*N%OWH^a(DibLZ1}s~EP-YLBB&sRBCyjFl*Ze)=^l{aN zLl13_?)=>`$3T1AHl9i}M@@mLBqheurI?PZ$W3DXA~00}RA!3)88K!H^i3&BL8Ea| z%EH~VK{m*hs9E)}V=>76Awc&=&rES63}F_UF^i_E&W%g z0!p>OSYmC;6%z|o^Ioou+T?@h049jqxCQ~0`fS>wh0cOnJAiPZee)~KvM4a-&qPa) z2K=*tEfcUK4sacG2pTQgbn|DxTRn^mw zthiP*B?sSLzJAP@=}-<#71x{u*&YJtcFLC7n|4jE6)x5i#^E(JS|AIi!TVMUsE6;Ogf!vR0aPn^A zkH82gEul)FBF)<;=`d|gx)*n2i_5YdSpdZ$=@9i2e!!M@Erso-f~bPJRw`8WYu~F{ zk35m#tv6PhZfb_TSphU;EDoHuL8i6a%8pds`%PZ1F-<$sj8UNrs*Ih1enjqR3+AiZWR6L$YkCbN^c>hsKN9H7SS2BlXMi!6I0tBBzyPa zTpp8a8_XNkle{+VuoE18{k!w#X9u?RnrhPS$^$0s2G9X3#jS%#lUOfX+ol7R9~6YK z1Gd$e@rFT@BGi+|bis%@$mw6L>$a`yIkt_KXJf3hHqEkLQ^P;I zzwT@UtNGaKbzgl*+}}i#KQ;?tkZ8@_fSP`M1V~__Qee0$#Z)fjZWuHzu%@yB)k^CU zN-t55uZEU}ZbfrA?{{CD> zdwX)p#Qr%Zeya=qib35VSugJR{JdM9!c9$~Tr)Ni{pGUtmojMRq`kMXd&`6u%YGjq z-yO6NfTXG`4@EJzPow5tC@m=)(XSF4)ch34YZaV(U;Jq69R}%|_sgrsnIPlFkQF}5 zKAju>ui7qIKoY><`$?3Am@G)pwC+L1!#_4r@a;(=O74$L+|-FBHlpOeITKT%XXykn zM$QBv7>0ZyHnqe2R0?~l7Jp5}KLuJK>rerrs+s(v^v zAszyxdLApHznLO0`weea-+9z9*-evJX;Mn4+A!j@tz-&9E)s-CN=i6XXai!iFw6d~ zM@!dosRU{z4djLjH%6()7jf-O3*CS9%JpTE0*eVmSz@>B%wMZ28PH=dA=-I0RVk6vBL`S!z`0Nw#l*1=;x zCO62+2POZu|~uYcCS~gghG#$_{na-rl5gh z6l5Kapk&k++=|ZFP5ju@P5EQ53^$4kxP!;h&9!>%t5AcIepDR1s|&MzuY_G*Mr{{@ zVLlld&9%ALmLAx%rNb!E(@q=dcKk+a*2J3{Lp9k(usXiL#xo{+gTG*#BH*85ImpN} zxiqV-n|a+h{LthosM*~4&(agOLTJl6%y(-=v>1A2tozZfFEMUynmb6+fr@OCMJMi_ zO{t_^ZNo96q6RDcb|h;!qLF8t@-B=;U(dU!)A2vx+>$rNy3Po`6V5?T0n#MqrtG5^ zHXS@1pXA|&$P~Ae1s17TmdfhhE4XgD7ZU)8)jPjX~Hmn z&L@YTEaPOl$@XjTy3ElYL4ih*=C;pl242cO+ih|Te#;2&Sk$a7U`0Q}J zAQLb>cN|>1O|Ut&T$sM zIcImfIPSw}7`Yp{r)+ZxsYXaHnMjf}Qc-<#HkS}J5=xg5MNul1O0_MDl2)ly)JUT1 zDivMUZ@=f+pZn`PXXoNk8+lG`x-H^(C%fH<#bb6^PO;Bk)81H|J zI$AcFMZ0ol0i}_nZ%*R<8WVi&n{J5vnC9=Y4bZ_aYV|K+FG(A--QUkWk+Z$HtpBYr z54|{f&z%-_ma9OoS>o}J3v$pXzs7^_H<7g(g8Jt|XQ5AX!~&v85g@4;P|LzpV zas46NAFf5tgQaVIi7|Q~2IH>H?%I|z&*V zZ7xM~s` z{2OA@ETrG=cFnb?#(5SY2Rlno$ONC#q7|R#XnLYd;F?>>zNWFd28$Y^0S9W=O_Jo z{_~dik10PoYw6=@dkfagq7-$#KaYh-Oo~BmZ3Lv$DkM3V1!wesAsUmeD>n+HT6^S( ze!mz+S4uMxx!_hGzJK+exd-m;m{1;HdCzQUJURmqXbh9WJ{j&g{+aY)oBnM&lg8$i zwnZ&8aKAzBW1Cn#c*RaAxTYf)pfuzHBWsMe30>wq$ZmlK{mnhxT3zDxDo8ISy_cid zlqjHv%2MDp8@T41 zRDDIlt8af1=6rC9nhNDy_knSprFX~&Ksc0-@y;HF?Br~sOXZ}X`!W4weH`8!0Da3W zOsmw|-mv8%23I{wfhb@8sfqY#-n@cOTO> zR?z-SRbL_LC?__`gAZA=vgtgtJ@Zh9!%&*F&`mSJKVYM|h%MYYkJ%15iOIz$zzIOJ zT9NZlX-85Rv|qpo_84S66LL9w`CG6-5DYv%Jw@0nyHrKVduYQCD(=B1;|VBfGJ z6|4kH)Yvf>m~Xw)?F-<}1N8uK9t%wt8GfxdvXLhzMxzX;HOa3*ccrE)4^($H!X`l{ z3FO6u*3D=>o(Fw#29Itk{-=PLEZltbUb!d<9{R~?p6=fy|&W~$!aEXo<81G42oWUygrSyi| zumum3#dm*QuzvenXf78lPTl1#FJ7e!(Ih)ji5ol>Dv%5m?r%VOD4@w~lsjF$77u&C zCLwNBSNeqp2+9ja?NM*LC@|Venr|Xjz2q~X z4r73Fk{I~xNBN+jOo_>S@kSd2UBRVHDku|lGDispiqK;U3SR-zS(ukf$^)h5CI#h_ zgtB&R-6w=1qOZYZrcXsek7qO^d=FQ~gCu<|KQI%ZEh}zHsfG%QTjm`0$^B{UVpeh0ac1h4k zCE&mV+_dzYa-#|!@8t}^FrvR?;@}LVHCjT+OQSqMP@A}vDM{TVpYm2onE-IMvzj02 z;zMry()0Dvcx0JWyBcGLI z^}=2rlk)9AY5;QdS1|4km-0?TDgJe0QiIIG&Dxl6zbi05=E9A#F;47z|e8ySZ}v)P>4k1 zlE`x@j9H4Pj|<964h@=}aL+u*eY2Mc9@y8LMXo2S4a$c*Ay{FoCjkulKx)+XO~~mg zrKYgt5st$HSz>4&Py-Wi3pKD*I^@hp6=#7QI(djkFer$x*aGes zH+nt?^~4)t)fDE_$<;3AZg47edrkKmSnpT zYqQ~YbRZW%Be^W+WDlgp6amkyg}f1Ti&2JJf8@vosO_k|%(@yoR1lB!kx8a0HD4n?`;#(3!^>JG(Pyc z6g7vXoA?Oa(z4|dpPVUC9~uajgKT+I7D66WY8rAI;Hk#d++*zLpu1$J>X-Y~r#yn< zXFNrOVlxY!B&+5DE68GwyC^MjUeJTxwUTje^Jhc%k>9t1sj=)H3C z8>QycmAHW+Fmp30@^Vv!va_ldc53#Xtz+U=CB2=liwT7> ztvsUQrg4$|i2_Vmuw_`X%eEXQVNcmMiWd0|eB`r&^vxON#P2)sMU&j#_lm#r*^WNV z86Xfqb*{aG2En;>aB9?;&UYRYQ`&cc+U;{(6p%NaFvX=Lwbv4r8=kd;H~vUD>(C<# zibX#(SNu3&9qLAt%uHl~9!`e2sLk?+k?TT|n5f4QXtGA@xY&#I#rCZrTa$}&4$uz- z)MqkzP(0-Ju3?@M9~46_9T_O!3MR|1l(Y>6zq`-op0T%mmSVro5}=R)Q`2vdmwzfCN{AX=HyO)yz)^C{Q^>6{OfqyEE~AhP*2WJ4t?K#np%kw3PR*$C*$LwAd%#xNS2i*`ax9eXmN z3MlwcGAsv(qLZ(9H4Epue*A`qj7puEn3rPpbiFi_iT=mLpqyonBFOdLruA1X@uR~# z7w_(Qu0_SNr8zJ1Yj6F}%uy#9C&jgDUUuEB(LKh(A{f!|{!d1n8- zk=hQrodk`z*kL}IeRAV|;JKB&G`(1OKtNro-;-dAD*mc@!|KKIPfq&(5icsxFmUv8 zJbnp(vuX|#YWQ*uja!ypz9MJ;+LaX<7I1xD~aJ?({nl^^;6g%#!@XH4g2T>QU5j zIpv&z`sYn4+ykz1Aiuf-Prx`crhaaijuR6%uGCy`9n3-+Gv$qsMC2}2!}M?tm37s; zc?)0JV?;-fz~hDpxJuGp&8sTU7k;ZSq0)#QnoDyccW1En3Oj#;ZfaxAD6-(T3#{*=;b`pJ9?{TDdjo6%al&&vQZAx z(QG+zPkxmArEb*A_=QrlB%WMy_>9JT(uCrf&(Sk#>+6isGeX^&Y5+SZY8+%f`x!#s zF9+u+fZdODhnB+Y{ia4F>-D$?6plaY%s+**_7=AvAF()R6$=g4uTXwE_w_nWZDn0I z0PS33U$YDKS2a9#74CROiMlpb{u*4Mki8NgxnM)qR6@(SBhWi?g=Ev*l_(5=8hA#I zQ>?2=gx?^C4FJ%o9T?IfggS^ni^)FYAQ2{vBb1v)PXHVIPYd%ssEz#gH>u1d$0gkuG;P!afl&!D zh22uvJXMl2sz8bjO}uCLU&aDI!x|Sk+h3!fMPVuPQtW&90u=6qNpi2Kv!m%z8|U(t z8J6C?tRrd8aKGO@cv>wIdxf?ytZ zfpN-w5G@sGJ2<+SdbTS{wCV%)>Tj6$da6u2Vi&i~JbOgThT)S#H`}5yd^vO9#FFQq z-s)He(1wkU_4w*zljPQ&>M$0zh-y?Sz8t+(OZiu#yNzQ@kXw}A_Wbg2$8J5?HwSh$ z??mY{QvR%O8QLi)>V+_m*a(l~G()Wu3#dF#nK?QM;GTyPnOytR3jqN}Kagu@O@00l zyC=_IsmO;v>16tAFLwRnue&@VGeAGq$F?vp)RP5T9?21wSRH3^aQa95_Q(c&?3z7Z z(knww9`uhkyT;g8umSxzLUnb?rQu@6Imdj-?-ODNO_xtc2kg!7A1CUZjOwK-TXZ=`peipp*}U52Y!u<&Mwl8PTdf! zDC#)pYO!`k@o?gyMg4KZ=Z!?6H{(EM$Vkx}^4)yl>xW|DxDQ3DALzM3=<@c;r;a>( z4YTteg%3XzdM);pfEk~6OciWi8MODf7BKQXKl-C>;!6K7Rm;o`bsavV36sXw=u zV73vp>m$}ygs}GnH@jV#c(9Y`X!$kO_A`cwi;>EHaO`!O%H-)!oAtbp^;w<#OWd;L zsN_X*ZM4O+asUZ>sNoG4Od5-dF{~o)!)>V?|tEZ!)kF--Nsv@+J#G>M(xPF zWxVxIX5}K5O~>iQ8k$q)P0vf;qM~!AkO6{GeZP3G5J{~qKdry1&ur_6<4>W(q&R){ z+GngqG57c8m)n2--Kxml8cm7x zZr3g^4cpTKa# z-a16`d8$2mUb0yK+Drhm=y!9^QLM_=-T-s zvrCz#WXFlwuHxO?746ITaa=FC~#r4eQ>FFNmY1|n) z#jU{ex>gZo81d2XNex>w71n4K8OaP!TmEqq8p~+Vzu1g%NX;a+K9|8YDzD?d3%G!5 zvib1_`l-2c9~7RGB{lfp^{yl&Ilu0lO5i#d~_x1us)tJM#a%4V*2%l_0CL?($_6nOjTFwahOgJ z9U{vIs{J>ImN$*_a-ZX^SXvjj0Xjwsp=G<;%EXs}rgw$CMVnjq2drPqjMbg$R$zjd zw>*!S6_xzrSs%M+mvQZP{8e>Nzokd8{_;=PTAT?_H9bWkHmq7_HS$gax>D8(6ql``QfI{I=|Q_GseyA=(jag64FXxDRJ z^a;DGWgi!0?z{0jUw0TWoo>GE`;Ps_cpMN7n)k0qPmL>rYrsWJ*&L|8ROT*K$2s4? z9b*sAe5!3-;NBi1=o&eFjRoGLE^;5E7eMfuz6Iz_^_g}r^W+xS{vlcoiw3XQS>BW1 zcwdc*W1(4incf*|e`qOJ5PHSy^1j2H1Ww!6?$+?XKT5?}y7R&Mr8)A@BiU_rrKtgT zs~=cj(Vmx?{{Ghfxmfbd25tH=jk!5j62wFY)gerO((->ZPkVMRhZMicNN6^C&ynHQ zb>wvZCfz{oW*jA^>Oq#R>#%fZNs192vqG_253kJD_%wl}ybrkDSiP=8(`SQk2|61_f~F9mjo#^$|hN;4fW&;EUIqI@3>RfQDCc5pP(OhD3V?xh-(=fI!i-&(*= zM+8iX=F0*i%kmw`+1KD{mR#sn_ zT1q^mMb2!tFgCUZUc#rpzZAtQ^Z$5vt8SnECOujfYVgy~J|zsVE(}|cPu8tS)c9C= zYIB+e((Rl6y6*JmeA?@wKpK;YI(CDm3|hS7y?T;ln>;FDHLmsjCG{!SB|fr*Dj;`D;0H+~ow zB-mE$u&R!Bu+JNalj7e=s$i9V&}5OC-JVlW;HW4cVM#xpXImuG7Or$P_`s|}*jkrw zSomwT&eNj#mk7Bap%|SpB+D4Wnld&J)sLSAi%B7^p$AU&-)WST+Z2=jmM-cEFZ^p>JUvR(;GX8f zg?Y6hkI&x0kB3~2JJ5DW?ZPKBiZ9*a3N52CaV&Riv7lV*ddGNUv;C=^K1e}yrRq?( zd8cmh)w0m&mc@OcggPaHWues?K0g?JBOAlX5%5lyG@{yNjE0Nd?1FH?z3rjNt)W9@ zOO*8#lN`vJR~Re7#6%Zbr$WM+o`5jX*Kf8wB8N2|`GWX|R)rD0jS*pbgEf5E z!t*ie*`V`=!DX1o2Mr^m_eVtP=orZNw-L$$Mjl0Nj@(=pnXu$hni~F#1_?uZKNXyh zEVNi;xvbytC~>v8;a$Upb%z!0M-r|*;V*alsusfohm%x~ce?~Xfj%r>Z+4HTMgAJP z;_D%!#Nf)}2US0~D^e`A72-KY;Rnj1!6|RSDQQ&Ry{JnSdo?|GPd_S~0+(OKKV9m! z5EcF8Nk_GPi^+pj>Y>%4CvD0LitB<)o?3#{=32(j*3lo#kgUv1c~g5T+MfRA7H`;h zIu8&9+8@a~ymGFNyFs(A2r^I4#?RpEth5G3V~3#kXL@!-n+N;8sWr~@(g7=w7Iyg~ zYXJcdhO|_zS*Q7*+ukKrCT)LrZBG=JalrwefT8tbfcac5;SjiB%K=Wer@%Kvt<=Ng znKhA(E4wZ*^_w5pwN>c==10H=?=Oa5z!Idm4R!8dk%_-a7o-` zb4=r6?KPE$@2iz{){kpyhYOksS-BLAOn~4?zSyQW&404mE&k2#ClXJAF(1@I5c`}W zhq9uskMX2fLCjy^6b2-=17brkNXw7`-f9FyMFDZpe7hdK>O|?4Hc`9okcNwZn$(Ba zsx7Z8Ms#Zhf!@`N(R3HxHJrayN$mv0}}VRke!;9gTVgy2#QM;l+VQ@x#jl)R#wN?C3!eVkblhLkXJl z74cdpYZRrn-r(#tu&&+Qh+Z@AK?0EYTssGt+9uEeKqI~cTZQ16Je^dj?Ulz@a{zp_ zU%fNYBnO>E$341AC0$Q?WQ!MtBYtb3xym-0Br)efbdKAwuBt%Kk*Og!AUw}6OnY?lz)?Bs9eFp=IKA5^(-Hr?pN>XKM8HWYvi|uNZaoej$D)}${mL^XX0vT$&$@BgB zPtb+y`FSFA5dS$TSZGLVJ*Ta?p_X@#I#Svo;_hHTDEO?N=21}`|H+Qa)ETl z8{NC>uLMH9r{`Mopes=jqxTk^16qoN>W}t+0&Fu#XpS_h5N^LRH;w?79!c*G6k>vE zk~VANZgJ%AB_l>?mNchg%mMrwjR6cPT8p~4&x}q>EVeD$=Mw=kODdnX&RjN~4ke#|~ z3mvynp1+5_yPi@ygp^=Xv00*1qmCJKcg-F7hKg&)%$0ar$~|L?A+(5U7_C1w8GXq? zqy1t=ksG3|z%K9v9c~&Qw0`$t7Wf@f5Z{ZzX<}DRs_&7ArWo`d`b^TqCUVi3AjqbD zQ@k9*QxwJlMe*Fi%TbtB+>L-HHl7RMi%;_KMYCJ@NqjUzG>|Y<7%%$F1F-Q_wDB@D zYQ@Gx80*Ica0p_VT9_c34mZH+uYe+lFiU)~JQ%xDBs381Zs6Ze3EGtvgxkvBmDP+Y z>3sFqq*RZO;Bo}Es^X$7-q*RWerypE0z{X_vIGnSis}98P@^I5G}d@vaAxPTcY(=w zwpldX%Xr=%c{LX>nn4^9wC5tBKY-SHL>S8;A#1X56$1HB z7RJ)I^7w_8RP-ukVI%@s!{}8&k$?2rXaF0BKre>Z@1I|gFo{`_BeaBbSMf2791jt0 zHj10g;3F2?f>lb4AP-vdsBi%nVGk9q;$cJv1#yz^2GN=giZ@#e*5Nv#j2zrLypST< zz|hyw&q0FVYgtOHll9t+WxwOT{)kbR@OU8@daM01q^*1(eceyzU0cspZq;cPY>=Q- zAFqJx%D~Lai3=24GyiRkSAN(vj>*4)xL>$;2v?LS5}NGKDb*~BLWC>v*z#os2|=@k zYcUB(p%qscJz4m(0P0Qwc4g1<)TM;acULt}8$=5aY38mP!Z2WvfncfxGVY?WipcqJA^&&0enYw5c-6c;V()RZRd!rOPdx`+Y@dS1qZwI)|{~{-Eu)_zPR?3Ws8r7j(h0PnN??12d#rUh|$c% zE4KBAngZ*|h1l+}=MqopAFB%}fYIcBYM9H1NTEsj4}GEt0D=jBdVr#<>j4(?dOsi zPBx{&3){4JH{DI>O6f7*jht<)WI@F7#xN$)O6ae>>rW+7hd`}ItCoMCttT=s<7;-6zGI4O`i?f5qwpP1Uhk&zfoygoak>mbDU=Zm~Rkx7{vU)?K@$OgJBJ zF&=#=vo}{v+cdzQYqEJ*@kK&$hBb!C>I=Ob=SZ&zVU9`p{<&S;M6|>8&ad4%Ts%ih z_uKb}cjx?kb17kQi9f#Z_*WY#fO6^*OSJ1W9^NUUn2s%G=39%pwNFkr+|_Oe_G!1( zhp1cQ?MmTYZ4JpU4w0z0fA`6{z%Tx%EDLxRdz?bGR21)lTDgR{xARyz6^Vp}cpX?j zjH_=4|a}IZ( zZI@-%nzXFlbiYJ<1i%dflLX6`d>Mi6Ba)%wSrBw=k7r}ImiCt{J?+yovXG11jUp zyclVJdoWNWRD zHai0tOF%DcG}QbdBmJxmu2AVr#EisYNVTpi3TFz~yLmK}eo%Cn6C(9h z8KMYI(U5sgq9keZ%ubT}p(RLudGMYMmWbS%FPDgke3HDdZ@@MMLQltLHM9PG<%heC1F zjGDKkWn{D`KvZ3<--Yv`muc26!E^Y#77g<-fqb;{>az%ynyB%|Po~u(og%i$XC@fPA#d0P*ozkcq+%>&%Q!){r2+_>B-c( zg2K>uHOO45@V{G3ti^9pKDvLdK6UWu9I9MRbEcy=w;sdCi1W>TP$r-FIFCsQd281( zV~?>z6 zoK5=8ZRy5+?JDH;l~0lU%`8+u#tu8l z!+9Z6h%z4k(Opdo%@`Aw%7t4EZO}HIATbWJiSzW&RqEX(R*KOrmS7CCSa7>&6Cw-|qirYj*O`PMMjc|T3q>lhgavu+ zY8qDEi%))!HdR4yP30yaTn~w;PxqMW) z&59TswV`66Qk>Acngf4#e!r?6rI@V2ddx_1@8Sd+a$uXQM5@78uH0mTg*0bCdM&rnU>S{843w;V@0S3%y? z!3$_MChZb082D1U(*EE>ZTf=>0oo&?ovG6waM7MFB@L_jLb(E0UnDs;2M`)H=RkT) z0mhaIPF(nab&LjEV-=9T4-cJnO>pRiUFry z$ECQhq4^p+0DOFh9VLwp!YpyYcZ{H)^cVEEd;b4{4sV;~Q+Fj{gI_pqx95NQvNylW zbuP<{@Xk2J%lRAnyW4v{jrCq{>pa)aCvM3(|8WVx?>TOw4QSI(j&Ly#>#FuvM5RN1 zb;xu5=qs4gjupRE`o}$Ytz>I_@Xpr_r8&NhV4JLEK|j8BM4ADf_{yEr8hEQ$n}4uw zlwA8Pxa)R!&(+}zf(GMGGdW{k{&fLt4JD~m3yWS|Fx#ESv zWykGbW#Oc6`gKt*U6dWqBIEK4TYznJ?&Z7T@}xO;-8&X(haUcyD13DOz|{w7(pSC7 zP{(!z{mpjtP|fJS-Z=dKqu+1#pb-eGI z@s9KfOM|r*3;&GG@tr;280xoOyu0w>f3M?Ho>cx^c)Ow8%P-!?aMkaT&oxoew==}h z$z`kVei`CZt6UzN98lep;5tp;_33AJ7=2uV5NHyRTZi*E^k^CS_!p_yd;XD}Fs=3C z&);%?1d}k;%w|{(P!cK>(waojZtXJ!^pLDe%=kKk+)1qc)6`D{Yys8M@ z89K6ncD9eDJ#d%67$qo|%FTFt7*&ax18vWaPGq9+{zi$`{Tk!+YOh49L)l)#2$Ksh zeRlvovjF+bUh?w6>#1F<; z6fITjJX$*ed}@5pn$_-UuidL-)RHO^RngtTN-nRxlo@4^8)j3)YBj9pw5?v-VLnnJ zj#EB||K_XW4<>%3JAO^_{S}`^GB@)M>nlGr&-_(4VT_)3i>Wg6b6no`xPB6@q4cv| zoAqe`_HX9vz^vp&*LC{+^)&|L&z_Z>GSSJszMN7RcjzP}pNMBzx#4biB>X!r8^r-}}wmPKs-lpGO%RCr3zw^cAa9Qqqpsjkg|Sg%$%t<96FJ5QAa%V?5w6WCU7LQo+k`rjwZg7CrbdA!dt!}w^l8w->hN! zE#elD#%74}UH=qf`k&^ErS5r`n&vOFAO62t&5SMq$5~`+mTniv;g5AjvoL7t1+G8X z+lG-^4CVbgvA#_|y{$TpEz~Io$h~Zi>*R1#QRL++=+A=%*Y@rr^t|m0Sp3(o_`o_H zdkMdA=z#uXjgCDBE>>kbltezz72C3iRR~$Z3hFE5N}9EXp1$wW4ZRkE@_cu|MY7;Y zaa{8NzFFN#T}5nWRro()W>Id$9gjnFCq#Z~^%Hi8rBZyDJS9tO4acJ6*o;P5F4hKO zu{0!rPAkV@h;xwy>05Fjq#=%WyDEI$Ix+%^s~OR{rZ6^OO3Dc0%&)dhr^$Q)zx&Oy zVVYD|!eI_}JMLIdjF4zG${ZCO$M!X~##Oho>?{q&nPD1=3a9twnaXyhe*rP=kc!>NglL4IT;Z}{0a@o7n3t3uJFl<;T z;;=}{^>)KTGqpyL4?FHqyWn&ufSs03})K+2Kdl zV|#YxyQ()svzp`DpVG?wyd-R_F6&epwBMZ1f?OMK`W6e|d%QKS zex7A0FQ1zUaje6aiQhPxx|_zue*uas5EkkLMSO;+LI<>+8AENu<{T_Iv%YL&o+&c> zoSlr1!21BEEU31Vv(g4M2T+bf8$$)hwOOFuP=SU8)V&b2H{qO^gv{;P_DaZ(Dez}W z9h5RtT^9XAft|lVo7)a@k+|9(d!~TgDbeng`F6^P#Q=V>RHf4{E1E8)cipzN2GH4h ziyb7|!$PMW?|1cW#M(*lof$Y@nU1XDgF8#xHGjU?&s%)cAe{x1Om6)77O}fKmAksgri^m7fs%wQPtn!FuOK5y4s*x5$)PS*+B`4>F=bF z{ie%CDo-uymqB#)38m1C0icKXEeQr4r#FG%2SMJ61F96s#x^#yf2TQ4-qm~b|eDhzQYIw&se?&i#)0%&UqeP(?#aMLQFVC5ea zl-j1<3^~b#i+z*}FT8gun}+b5iH7NI&-Nv6J{>vk<|yabTSF*aweLE!FLyLgW7lOa zxac z7{}h@oMnOItA1)vXBNn->{S0`#W}`W>NBC2wHQ~vqf4`q!+O6>^5pQv4;NWaX`5V* z0Pw&pS*alV~n`lUD`w5O|H$|Nd+8inwxiEo?ZzcchEP}G4>2WL_FzG;>tbm{ z$abWB_yD>$hA1%_If?RSaa=q6+>61e)wduYnfnfuJ`cgouy*CoG$mc}X`&ooNPBN9 z$-qw$l~F7G+f)EDu_!i+n8PA?vIgpl%KQLv^O-}^%&uOkMI3EC`tZ|hES>gc=A!8{ zJ{n8zaoRiaSGUQ1n>o1AFLumXAsy=OTYBOZanFkQhK9aYW-v4u1GxWnp zB{esb(ee4#1OVkDHIqX>rwi;|rM^@SQ&;Yb&Ufq=nlk`WwCi!nshDmkG`QOySrA*b zD-3_yU-EvbvcSGO;-Ce`5q%RP`^}q_ph744JD$Y$ARZkz-GN(LAJ|@HcjM!+Wl*MT z9Dq|Br-OF%Y})yD@4)G;VPvMnR3fua{#^M)Xx4d$-YKj6w2$ur60?DF>Eg8X3+SN1 z5h@-=gm!<`uq$9PJ))|!z0b}KJt z&uXWH9+n`<3W_w`uTuXy|1$EpU5Z?a*=|%`imH5mZHX zHk+5q)P_4vn}`Cu?VaTZK`cG}^^a=t4h^pRi(Qayr#@5fP#EN{XXKEwTo`flY zG{ZZS<%*+>tjRlJWBl-qJOBQk{rU6X90`D-i6qdsI<}1#pD!*nsLJ7%STRD?&q*;n zmH=m&-f-nybn0lq`G+xfO?K0G5Dojo_1CoAg$nF3f5mPm&B}MYBIB$&usCmZssMwd zHJh1X6SzE(%E%cl)VJzX2sIaq60yW|u>{ZvWsU;n6g9GGpvncD-^Xyrs-MI1M2w*- zS0Jd0qYDazMmf?#YO&9UqdMlEyesdT*PrXt&*I`A6lxfo?b^kWunVcrHWBVqvxn-5 z4#*7Pi(2qkcaR%kvVSmKwPb;wH9Aw*EKn=RGqmVN^w2|yXa!4|hO2qnz1oaau$k-1 zS={CrR_W4{Y&o;`SzchVe`Qy3*8VdTaX}W=DC<4%k`A0E6&P!0)w3B%o`R?FmMV6U zj;&H0rFk)%KHyaN=j~F@x=`8v`0$l#d?XneEw<2zG=mJ3abIrF{}vZi)L78(5mwmU z7X3iiUkvt^FJei1YF14;;*5QwAJ|7kt~&6hI)10&M6GXpMT(x#M=(-y(7qnMBEVDH zeskbne}OjgxDTcAq*vYO@Soi^1V#u`jA6dQEP&AQWD=X&WRiBvsJ^V%ehcyazJe;m zG5YD8SgycHWxLXo-f(3>tz17$eE?7D<4C)8fvJ3Shic9*i^z(G{0~>Cb{2bo=>hM-> zLc*7$ckfL^LZd14(P?oKY*wIt-=cLNstiQ!TUMZF`K~;CXo*E?r=hS27oL3a8I5tE zab^38x4JK5*fWb(SpA+p&DgCo0Cy6sWWeO;4Qfp+qFb2gt?7VmR7u=1(NU&~}n zWfJWTzNO-JUnV*))?|N*LLiU=xLkAgizszFFU8-i{I@Z2k%GN=+uLlnlSzcHRCCS| z7qqrw<@gbUAaXSqGJ7AyasBGJ^l)bJ<-s+Mhc7H%Iq@mB_wVrIQ+ zNFYXWEr^58=xUPI{h4RW@c&uSa$n(Hj%B&)0?~Px#x!gzaAC zYN-^ad~aNN3st2kdm3>pgdZ(_`aQYEuwLhIilj@s>pjCB&t9z4C)D0Cb!=@_(xmIG z$3~%bRK_L*ZN*j3*JkZiMWp#&xYgt+Retyd~|o;V`rSfHMI- z3V`|<&>U(kaXOfWfns$55aNoc_mVoT-`Yg((H6OP(CjWc^o1-(KYMCG?ZZSeg44EK zo6_2HDJAJnEEt~W+cVcW74`Mt7HJ4DbRHc!2*A7!i~|(hBLccFqA;3Ipn_9dWI#ep^s7}8z|XV6MsNi z55LnatAKNn)?&F6muvJW{G(hwRq8=7wS8`>2Fm6;8UX)sXG0=;<`UZ@1MXj2Ag;j#ET^fA|h_Cdd2lXvLQ9OTjd7qAJ zU%}6(7D()<8or_)B5^iB&$fFI!}!or4+(fe4%hqDTXCn+py>Xr4tgb5h|&i%orMIX z1i_;rPd%Wxv#dSv^n4k5bIZp5&!CmpF&O6xD!7~I9KM3e(NQrE9FzV0pdx(E1#|Izjc$B8jGt^E4 z)o`FnoMlI)X(S1?_0NOee(rBL1!0Rc2bh5(tinQU)JfOrnh_0T)B zj9eRUxxM;B?Ji&`Eis}OZk;77}28Q(7pJ;2CQ2Jb;jz zLojA(Dpj*FX)HB$1=#seBMH<9FVifSsax~v^*{WFPrIb%OT?7E$9p*?nvCvGJpOH2 z%ETGO3&Afljo(o=BZ(mdJny@K0^d|b>F6LpGB{19Dw;q+wUiEfs=7U*Tmwwh03d-> z2|`T4iwBKx_k91?0NHh#?3F;_)c&r#2jO{S(E`PuMdsB3NdQDtc~ykAS1wQ<$dFb{ zN?1#;Gt1yC`~&mt@iED`djdI#rTQQ!hAMWm3D3{a`O>_O&?tAb(!l5zz;@96nHk31f3?;ewu2#`oE1x6y#jLJ|moDFDDtVpe;Z?j+a2EW*C zlL22qV(kvJSkC}(s5j_m#@mDXc6K2w@;DFpgn{=oAmIW+vx5qPX-879cRN@*^bw3Y zfd>lea-r?=TFRK@A{+n!8W{79W(`0}L%Ww>KCAK6Y!a+it7_k61He&=kIigiKP*~C za2KxLbChhOxN62Dd$7oLos3Bta;ib^kU7D*mf~(mwn%^>Buls&2XJxAZ@L zM(eJQY7-O_L77BmuP~c6-NR;mZ2vidfMW%{%|{>$$t?i!&LG_QquPMGp%+R(uosfY znR-s`l1#q{`-ShOXrhqEG4jNE2o?g3W0`3F@rqA0V0k5 z^vlw04S>A>&_aF%UA)8J`UWq7C2ny2W0o{r04Z6zJ0DOU@Q{fL08V2B_XRoF01_L{ z6B2;DNPsKq=aHt3FoMz~eYWEp3#JGP1c5Ob*)Po>lS&BRZi%4zuXFaSHMiWoV0a2x(kA1vMDSptM z=6&!{r{K%xC6*ztZ#tr~BHjYr=#Moj=l7#S=@2Jp69UOc86 z1pyxAZu3t7dKAs3! zFl-2%$>qSOB9XvuLi5+(iX(X+v^4F7%8pkswn8oGD0zco-??qpS9TJd#qdW0ibtOc zh`eMIK?f9Aho8%Oy6v?5dn3|vjNYD-oCCd#n9WTGxV6UawZ>QnN5rlme<1-+0_8k1 zGl3HBKo*CC%M~R|-{BW7er|nUZY;DrO@%T58MS2R|Hy+lpzc^vU^&G{IZc5}5cw^8 zb}Bgc9l6Uva?_=eXlF9|KA}_F4OgX_8Bl#~OSf5=oM!oVI5LHY;?ZK{3!ZJ?vW0})?`3SSc`UI`(2u^9a)&Bw5o+drVFe>^qb~a(4!BwaeIbdZ}}X>NgKO z1)SZcgUtboQvyYW!k$u4rhs~s1Sa5poXgH3r6ejnTitD+s?r%)ICEqw^J+8zac;65 zYWdG4b=JKEyaG|&QsbT|RZa(Qd|DS=TNwCcr1A30lJMlNG1^YvwiQD1z4MS+73K8^ zWWYoYy;QC11`t^PcRYuaSAKpKv#EvwBu8?T*S!z0u=I}5~;vP)R2yo3b zi*~y?pHiIYv>8u3yET7nR+(`qpt_N){B5jW3~fwQ z>C%Zy`^{ylZP+@QC@*f617ODM4m+kMri)S>Wou|4i=eDAMc7QkXCnjwSe&a-26 z$bNMQF2lOjdV@^e_6F8gi?ho`(1dL5(vP@{CU>%*iv4YR{v~XRIss^sd8rCevUh;4 zVDP*+)Chvjx8BsjE;_SiseZrrD|-(G>|XWxM|)eJ?S*}Qx%B@zy+X|j$;tQC>7D-V z19;OK-{Y%<#a`3ovHlCJ&H0-nq+O`DYF7%h6oJZVcF1u^T+wl}$#v~0Que8?s2gdv^jQ?<=Y59+P-(!L?t?@?|y3-#OU$U>gF#w<2qqa51c%0V1 zK5pD|&_@h|Gg3bBn5~mfPyG{0cMaa$R;yVFa5e)I!$zlr^y%Rqgyyq@>-JkKt0ONP zGPg{Lu`!kV-k_C+L4GV__w(@lJK(`_SMM-aY(0{HPvSeh^y*{6@cVqS+>6!c<+29i z2oRAcRN8C$gHKDTJ6+C^aY_(m7?L4gz`-A4g4$U4_8=Fb(}hLq?J^gqgn`X8t1Fp7 ztQ`i*_H3C2>X6A1GPAGl)n`gWm>cYCiDAdKcqW2q?SG}m)jxr}x7*>R*A4J`an%RF z^{;sOF1dKrwJ0p`=VpH-@8yS{-WMZKlmhQ49CWG+OFsGT{Pk7cIsN2WL@^Vi_^PGs z!&K8ig(q04z~EUE|7tNr0oYuc;gNDh^3JsK`Q#+_>3WaTjn|$EC)d6NNF4`u<7W|+ zuNzRj$Nh200q+1emiIDV*_VxpJ4dGxy~u;y=f2ZqW|-c3g)R2_YinRnB0KR3P4y+o zpJY#V-@E!{hJe&Tz1MX9`Gs<|;f=$CVwk2QL4ah+wAURaqsinK60Pr7Wva=5xLq{l zj3c>e524O!Apc28;8@~+iB~ZsEn9gwy$P=#T zYH9Up&vj8RQrtBqvcqJX=o)d~j6ewfLz+1gq1A=DNHxp&KT26n5!F_WNK+W*v->pKI{kxwc;I#_}FsuF5h`g_>V0OF!DQzwDF-$EWz|5|8Fl2P2 zCF6+VN}ylsf+dwA-E$Gd8CX>c%qDXQOLEQiU3vWj+hNeeht?&RuOI%Q(ve64PY4RI zj#mW$)HvkL1Pz+bC`5SYIYk!H$80*A;%wHBr?aF2Bg?KG{??uM%JLzNBGiRhF`u{rzX?fa4`yk@pwGR0cT z?Jpy^a{HNBA&<+atLF35%S!%}TabDz9zBMV{f z1@vv-vbC&0uPctxSE|Uh{M7TZV#}w?uYv^U&?FBY8;5c1gOdXtOJ!Xc#=-!}cWlcx z2=6EtoiJ{q8HYHoY@mb%u}n21BER=MKEf;T9*^{_yITr3ZP_gYrv7g4Lzs+tv$2K~ zTmgYn{(*hmu##`a*UnY)zTPJtbz`G7zg>+jx5xWKUWS>xcQ~~s?vtXMg}e%!t#tkf ztl+w2j%D+JXn@d!FaIE20ubo94Ex`k(hc$ZAdGgVU@a_P&7&W4u7c0<%2f#x(PeGF zV1r4!7V8(GSG3S=2h3fQCt~_*Jr^s?ByS21fo>VJ|2CJCth%}FP^>Wk?hpIMib|2 z658Z%BHWj&3Y9VuLzBr^6QZ3bNcOrcI$=7t+bq)M*@qMiNubNdbo=T4cr-w=e!Hsv z7+0GWqKqD070Ebzh$Gp&#(^{5oh&Ll@NvsOJ%bbX##bih_=Ilr3_sx|qeqy|87^@s zMy|^7$jdB*M`r+Nk9p8{k05H9t4x=XPzW%R5o$w*o4zGisrr?0mFApY(~x^zWnFUO zhkvga8lbx`6mY){p-bu;P7;cc<`a{!G#|0|xDT%e^{VTe(ORL?D7 zHStQ}*G_gj&AZfSR#?%7?oj38!GeFxpz@VYH+~S4R`5ou`f@uRb`s7;YPyy@$^TxJ zPsyW2VYFDTi$|z`W{XdotD%AgMCSq?w89dsUdeN4EiR*FgpO7RF&m>ZIcR2BJ$JvqJ$YwMSyJ(SxPCall8<$!hiT!U_G$(2C{N4z z*CYLY)~UPBVpGo?Nb0C6#y1|r9+Rl<8CYrsYfFjy1;->754^3#OQ$7)oBsuz^IJ3g zs3O+}zOnp_)vI&2NbU`X|4TZx^1xVdk&c%ya>phw6?w0)@=-J`g#Oj)+{*&BqSUYqt(X8`=5rh5zB`o%?e9HK7E(ma(j^Q)o*e*`bS4lz?M_v zPsi`rz|Y>zTK_c@YjRrGO9d#jNVe-(6aC{@wGU=%HZo@7Y40(1fi-Tu?aV|bTdU<% zTq{4%e`?0rtYS;qxfJ)9;8)k|PG^{;ep9P!Fi<$LpPOymaCFiAA8PtbF?=8N0VHa=)6?iq9%()^yO6r&t9b^)??$* zfoq$ien@k$ujyw$j!SeKH_)DKbkI2Q^Il4BVr3`*=|w3(EKfwKRMp>G1ZW#hI_cYY z_+C>9Qd1E2bnJcSC3n-+b}C|LO;CC}3jSNWdXxl5l~oR$HGM8fE?%#z*8>o?Dqp|+k-BeuF6dJ4llz|v zc}*q;DSaA0fTFcy5Iu(|z=U$)t9p#QFQ7xL!>6-hj4LL_`6ss#{$e)WJ@$0xiXlSB z-_5>ZhWfJtPoz67i(+!_&g-;GL#udWQ;_zsM-+HI!)f))hRM6Da`FQN|;Y)enLG zR&cg_LN)rxg!Y7VM%@5oiAaek(DVA2q2TLZjxU`KI_!%$ zupfj~$O~fxN}yu+dbOCA^YHYF)OA}{m}PyMy@u=ge877?%SSP%9Z;+DXvoKTo(b#L zTJ`eY!yC%~9{wvDC=-v|1_HPTo*X|=A=2Rx5$0?(3OL9fjn@2c?MURoj@!FCZ*vmu zwBU47&@Na6QSBX#5HAB~x?y1(_t%Ucvgi?6^@u)wU8y;5a|*S+b~lV6OLSozXy)S1 zbNQP_Gm{|U%d=scnFqB~wDg*2<^bp_K`CEK3G2kFQcF_ZLZ~AXu{3O_`S_s@cV0w{`xdib@bd4tBp4CDyGF301;+t=>MoM@kNw22s zTJv%uFXiM{<`-rr50?6w5ED^nzz}I2$;Zu2N8XL{w!A*@}wT8hNu6e2U*#(i= zdz*-&+qC_Q(CztD9X@Ezpjh(qi!zIPDvLgSH!p*7xnI?jcH>mUJQXfc5KI`Ejw7rc*Zktz^M9Qmyw2!?7`<8y@063e=dtZX+yyZ< zR1Rooh%vr-jjpL}CQuv;c3=&05^1Q;Lyiy$v-7F?Trg*1)8ewSP`6{@=j=X@J8w%b z`*CZFeH9ubfVVSniEg+K8qU!dZ7pX%wL9$blh_2`mszRVMJZ=PT8+7|od5;5#E!({2-O(940gbbL}Wmba>Obg$Y$hkp4k-KT`AM4>A$0) zF<4sA0oXSJxOsKF46s%}Lsd2Qw*Y=VB{ftFcSr0mM7q5a*Ni9qo5!#FrlSsksp%Q#SGhA-D zcg&y}PSVjmuK&yEp_CvN*Sl4tES}b{{8dltue1JD$Jo1D->$xCZN2gzL-I^Y_$MVy z@riCURH;D1+^7$N|i^#=_nv^I`v^29oyI$b1PRY*YWQ1CZNHl5*M|FLz*kFPym0L$0F>6W zY*oW~x`cbWiB1KZ@6Vn+k<=iqZW*?yF_tGS6I89{!AGz#)H!+u`#fF@U=;c!Zu5gT zzSMW?bfa79dRt!aZCmh#kpZ|3%{EjDw;YEEd?ozHTKJb4_`zESie<}gTC_Pvx6SEF zp_pUnahSUp-8Qd&Q6@mmt8c6%N$0UweyB?}0+2@b->2(+u~OKxc7yXJt^yc?i%9Ur zEzRJ#a^V~a7QTQr7vU~2(HX~SXQ*wu%NzB7x4U1t7?TNem!qWejMFZFniQs@6*kkz z!Sm`_^LrdD^G@%rcKvPS5z`g1#lT&~n)Yn{fn zJ;v>Mnn_QId-rzjh`D5<4LQm|O~vXL8_f@TofF*z{P^9H)rT+KiST&c?KoWfPxXK} zC;yW;ggRW>6?3`5atpf*Vo2fJlxxr^K5Xq5NJYftFl?(i{1xeY0=$!lMvm$Y*NSC? ztv^D#%K3|?J*5o7q=Zn$zkL1om8BJWSzETlfZmFH_&*8O=@K@C%eN*%#_MZ8Jnp@4 zw#WBfQv32N>(=;xzXRNos7(T>^*m4(bN#httht1KGX||v;@Zp7;UU|cZez3Ma8>8Y zifC}i>DtidywGQ7CoHdIU%ZxNBobjZ3_%aDSA(m) zQVuf90h|<`$KWf2Xj&-*^$+`Rg$o=k?v&FHIxfp8EGUmu6t zi^%+Z?4lI;zkYcQSuDNrwg zArsHrxl_Y!9)??mfd^=qb_LdU0ShlhXCQIy^Xj*9aa~L_S_WNZ*S6dpMvaI8{b6qG z6)S)+LQ{J=Pe@dNOLo^?sJZ{NM$1Kt>a?mbv_HDR5^;`kH1Q|4nS0~GWhk-FG%ix< ze}BWZ^}hz_SGkH;;F8|^zpg&Si`FgF+5Vd!`dSA!2|WTGhCi+DKgXs#@ihr-2|ihI z8~(?91s}=2^^kgU#IV%tepM^rd22&4d}OkQKx5$U%O?u%!)xyuTaCnSIHS8{)ILsw zw$YkM1YP+soAvP8gyPYONJ8M|Q&W6NK!2UbNTd6x-?cIA_B|RrYc=sG4}v*Ub?vxC zU7BO1&STqtpS))UE!Bi*GVZqivE&2eY9WlzVf!aK&0WN?sq9*BLvSFgM`LT zC%9uVWfD}k<50?qiL5|+Qv>((m-Ot%kqZtkwRDZl)+b!uGtX5_Xx@`-<;h9i`@Lme zP)YgGuU}W5xOBArjAm!{q}oEozp5u8(-=M7!JPkUm#*=LAvDtGUtgBxFYP0 zryofrC$3oU)9$dlpOx+POi>uS|4cY?`^tA2Ewuf_Amih#RDVB2nA07T5lKR7#W1Qc$D3iq)&YlWUM_TIye_S!_Dk(6En1zX5^-yC~!;c}7j9s0xY9Lg9 zTS{v!ixX{_7w!OA7tUfd{P!A|ZXHY*OtYElv-5$5hWv#B z%bd*(v=Rrn#)BDbitEc z7vjG7s*7VvAS)`#KryoYBf&p14AhTz$ zYj#%Bl1VUa7qx#fP+vkh?K*$u)R%yPqU+b8zVTfZlK`EzY}?_g`+EvX_pj^nr+*#? zJ5Nvy=05~!e5CXxo(w1UZ`Tby+Eh0K-k_TqFzgNH0iI=`3*hwQPNtFEj4Xh?n>nMJ zZ*l;Z33G4SC~WBSfFmDfDrmBk=+}okDp<_>eUQp+y=C~p&i+lRvUkF$11hg2;v)Ox z!Zo427nK?Kz@21+^1~xI2$qRf5sPj4H(@V(d#JzQ1Fym)Cf;WP_SSY&f zOVf=nhkqv9$;j>?r0^$W0I$ zWAt;)XWy4NaLKQblZo^_Tfimr>YqYjDon6DQQw^T{oy%!%^{eUBDpk!Z@wC4A(<9K z^^9tm>W4tUe3l_P(>zlInC;Qa;a{KH5fp{_qm&oyPg#O`KRp1OU~y+!Si#3C(% zzN?vd=2ljgD^tN4NkASxVjAidtC5(EGj?HGeG|{*Kba(3W>p6OB zKE-G_xW~?OXV9mkE~Y*2h(NP&IxDm|1)4=fm}%=~O?O3Y)-ch*YMqi+_nr;g!Z?66 z_3K=dHr4IBxfI6Eg8RiT3lU5DVEI1cKl`pJatSyFr6+mjX%~dRM_I1z@WP}oq34G4 z)8W3Pi5r?;>zIF3lOomu`pmZMg7OKxkz;l{?{XRav9)_jscdfHY~>sisp(}V6JaA=YjZRcGpF;BUOhk-E-9L+zsuqdkcBd#CP3W@NiP0wfy zUWkl!-7H=kU%(ccMql=3+zD^Cv~cj|rdvMnfCV~+T3g~m(b4S4r;!FkCR69O%B&WiZYDPmLh<8k>JORe1 zGMvJJN_i=EUZZh47GOe{52EonXS-oT0WzG=5-y80cdF!Nu#$u@>LN-b_TXFZ<53MM zGT2qEW($P6NlNmPT~mf{^ek7>v=<)QNIQwf@-4Ex<+}c`%j=%?M^+&_Y?dt*7{=2p zC81Je=w7>AG`$wij)bF>G@Z@eqr`2G#t3pu6U1tgoE?q(vksa6Hi z^1Xd>*YLUeEW@Z87INF85uakU7k|&@BgL87H5tljNmgCSJXd*QyWIEelHHBd0vLK_ z&oE+1iMXwb?;^;|#?(WX_kF&BTD5=S_Ohi(j-K;8NXu-0f^b=ima1YLosy^-8<}n- zw7sccoJ|Z!LSG(!b<7F8A9$K`6Hw#A(iGFka9)^ru@aE73^?>h*+MGEV zb_Y$vtaD~*N6Hb3vnkr^L!D-DC4v##2WO*gG<O_Vl}K1e)^z(tt5y4PczMGD=|7)L2L#`mnTj&J%){T6meP&XaKmaW-_Bo}-0a1-N6Dl+N99aOEq(`!X8Bj@eJCn$=2x~!~5JvoM7&fe`CP#nUsLhQrFE}ri4bwuk6R8~`z7WdU5a*IS?Tg-~1O`BP~99)%_ zcOu_|MZ8Ayp_I`Op1!Q2woJB_Xu8nUq)xjhzlwB9R=BPK0y%;~o6Mc|rhhgf{9KJ} zk;3eoO*7h;nGhQP1WvaCvDXy{Qj$1(>7zP~T9Yb$q2(Bv2v1*DiI^o)td5P$W(nUo zf+o(2?v)%k!o2OA4TLGlm5NRH9sp%U6rC%UAl!KXY?rF%Czd3M!*7SW^DEP9U~1a3 zK3JChu_Zmg=2=>v3%y;4|6|pr(kr9prF)Zz6ZFNL?F2Z6?sAYApkR#AuzB?pa&7_Y=0&{H-YLuG% zsXrOLzt-bz6_)phopJUTg2Ag5ScSd|zsyG%YRSxQycJ&!l!D#XAE0OVVZyya>AU~}|i*jmCcI*2dQlL?$KJ^F4bUgZ>zAFbNA z__@6KlMTG+8_*HbbXMPZM+OlYmMJ;H}Q&Fok;^L?3?#4$BLf7>~ z%{4MaDHpYTXoRr0)djED!^F@95VBJOX-fkJ4VW5BdIadeUa;6biCkl)l&MGLWFdTH zDLskiNGqZo5{uCpNyaK}BP%aw#nwdaXA{~b=Y3Sp4dvk|ZkH56sUzl)kQWCpl`Ir% zZ(V;=cfM+Qa*ILureijLvW9R)LmmEl8YcSFOK(&fW<1c@V2bbO9#VvD-p~Ude?5cI zjAN6^=T#MhJXb#fWc|hGq%qPM>pK|U&>-26868dx^Xw;<$v+ZQ3B9YBY$hE~^=tYE3JYW3f~@ZV7O>(GR0Yc;+&s5_{uNUA zAi}(|4;3V%>iE{r5#4r;cU|AvwtIzd&YAawisv6tb2Oz!XVain$^tg!*^K6vv_9`7 zD@gZi%d-aoRy~&uKb?o`ki3+ujg0C9ho*9$UwXTdfBhxP@RUPM)8RKB$LGCy0hX?J z3xwmmo2N|CMj4km?Eh8%E#(G_JH>)r(wR)F&7uZYtuixT#v9=pZtcQAz%D z!Mnx_a*=}tP^SQU@%(d|<@RrUSJ)VZtWxjF1x8-=dYRNpxS2`GE}5a1n0xyRd+e6a zi4>#@_lR9xbYywv^S__-4*hxcP*ZAoV$$fKOih1bgYpT)*cL1}q>3Oauk<=lTN$Ov zY^%XU+KS4;W(KIP(ppQwRwiVed1+)AvAR!*h?lh%&E{D6TPN@l@A${YztG~TNMoAF zT;U+o&<__PUb-3yJM`iVk!%jM?+ZeO+gyD)$HPCzm;sGvoCvJaG?AaydenAq1Q8b{ zLgcH?z=Hqbux|y(-LAURmU*d?lN((%RDuC+^GUcNs5=i*%|vc0h?WHYYPnD?A#Xba zwS$k^tw36#E&l81&vzB(2tZ?3kvS2SK|7Pr7yJwx@J<@=xhL&;RE$v&XELE=a-+>& z@cLd+;C>Mai(keR6uAOgoKl3I)dh}B|93Yi5g?26la^!7R0%MDP$(X-nush=fkkDvPQ+AQmJV@M0>X*;?7kkNFW`4U!3ZEa0g*JbHaEy z$5UP&uQ)ct(@Pr5F)wIcZw67tP^d=Dv~KPSMvW;o+hKd_+EU28pRP4BOJll7^;5-pnLg4~zJ|bG0L%xVeae%LzESZV6>vIJ#W*~+qjE)v+ zazT=ttc6yL@9YC05ePLHjI|!6V3U>5IsdS%@h1s>-B@WHo$-ai+##DZ#nurQ_U!B**YxSK97PII-&Oh`hUvG&46-lJO<`nJIzE{7dhiln)>940FAH<3a-zi#-nQgKEH)tp z_x|~bYOLU(E1)4c(-1CfEEjC>D}pWNrA_2M;syVR4NeneQx>HfR4eUFI}Hh_L45f0 zW$>>6&{0RYOGDl_%~MQe-N(K3+Q4y|Bh1&T(Pnqw^Q2kS)zD~L1`>5BzT(lZT?!_=egT?_zCD@`@l(0gy*^5NX6Uys5g9*0K= zJE8RfHIlximq6-1?kTA^qaYW9Oh}4LS zvU|wCsPqlEV{!xC*(V3%K!*3xgRRTYQ(Ht`S2`xvXrhHAK&ZZRJTGS=U(-2dMfm2{ zLLDNgDIZ%12VoeY%H*ac4d%ZZ3yQ$OXlu}K19zl8PG}YGToLihaiZ$XWVNZ)MIwku z6+Rp5?B-~E9GR3v$Pb--*hh*AGnuG%!XdUCFQ2P#JUY>I?5XOy{F~d@H#?2<`Qqrf z;WJ*K7EPS-^LEaw@Vphca%!F1iy zDkmTR#`Mx@He7x5aI!qRb z>mwA1gR+bA;`A-NZXQp!UYSppuC213z`TBPNIWH>TB(+2EFbuw!d{X`b+0`6dOR?hfHr720Vn2<}RY8983vX2Tkb7xWg_rR8HCe?Fv8$0;%) zO0F=|iV}w~%)5Ej-lfXUL`oypaUlVd4=``Ocmc;1raVKY2&j>>PRX;abG++21sdY( z=soTegA?ciLGR(hAcM6qR(|7&mbYGlZAGOL6^|D1 z<>#e|feK0yvJ#d~MTI-R*>127Gl40QfUHjeOF2RneQ;dAU@RLf{F#^ZEA;P@BE(+7 znTB?b0?B>hrpuvgpM!1WByWi4C6^>|zFkW}KJ-&c{oAmC2AKMpN7zRV`kg~Bu-p5 z$bXg)A@rz(=O**=4yI80o>m`CR=I4zPcvJ(i!~>bJwBv#&`_*ipx5zjIsJWyPmuC| z!5neS&bBOH z4%isUyI2`lz!0`_ye_1?&g_bA(QL7*cvzSluk9ASe2J5f zHdF`>2@EbaetcTut1kd7#qb-8xVjc&QyTo_)SZ+2mxB`3FWmMfVic{0Qwep0xmhV9 z6@4|kbpWS=5qRk^c+D#S6A~~jY1QT`!MX><0oVUmI5GF9 z1H0jGj9G+GQvf38vecRg}vU7upM%dOt|$x%Elj9hvmoO6m?oXpumDM5Q3od0diF3 z8uMdoxj6$>EaxoIkeg=QL`FrDV4c^AmwuXT)nIRvQ3P=7TtSXWJ|4+M@D@>)p*eY5 z1bRfF^X{Bj`LVc41e?mNs`Bv+*{+(ittc+M-Haog96Owg+=(uHeHmbC3U|F-5!8w{ znMb+|oWcUrl#SmbS2;`f3G`DylZms`yTwI`S zYth>@VSMR=-knBc?F*kjjo&@^MfvhgGvmaS$sDgHbp!{II#sTslA5ScnM`=!TP9Co zui9YQVx4F~Mc{&DjU=KZ)TTIt?RLW^7SMM*?}0D_k@@<2-juu4`3u;?GZBCNIz^Fn5Vlx{cT8D}b(R>6YE! zE06!|(iKJ>5yG2x_AvzE4q>rU1RMBe26*#s2PND%bFlUG1){DKbJq%S3`J+$^nPQ# zmnmir{9nti%+V?B?L61)?O3EIPlTWOCHKsZA2QQM zXY&>jk(r|3Hg#E8HjfGa!9SM3(?^MouDjK*i4qt`L2DNEJc;UT4&FR5$K$;wo%+WN zEwg&CcsmwIOLGe=L+kblu#0()HXxP(uyArCK`x(~mzs$bf?Z2b{d{)&K)0U|a1&}r zLA*ylcP&`O1z)jVn`1T~L~{Bic{S4>^{a8?#D*h#DOGz-37}0=R?Cq!7x;BrTqtiC zaj$cmS<{~=K12t6_G6p6c3XSqpN;3`m@*-AfhYz*x(fvB;mBwz{0Bqb7mhZ)wEuo$ zhGL*>tt{4@FYp4DBvWqGLiKkpw=MoWg~^vO3rI`+ksW&4>7L;t+) zNftg2LcX6nQ)RTUHx2NkDS`i(7fLaL1^8s7-@H$IHKs8)&!Ex1c!PgOb2IDeYz-Tn1b zY@{Yk3rhlT4kq=Hye?;gzh4z8%1jGHuc9H#2}71_m(Jd@yKd5X*?#cEdcfBr;l{!5 z!)Gjfi*%H}$XlVj85SwxT8g=EoktYoJ?Kyb`Jz>5%v>v;C)&nJ3gG<}Gyb+R_~?|a zrRg*&z<#70!nwZvMnLL&NW84x!*f^&>#Ore;Pj!WKA4?s9@4y@?-``86XoQIj{fLm zQtGX{$E3{H;}-6xsz#Oqzhck3wMVvyhvooW=j6CvZBD;ig$04|1ZVU2Eh@mKQ(-@CH4?aH ziPg=dOD7GvN!d8-+6VUjR{Qi7Y*JQ}$lq4eU=~IA`V;bph&$e5>-`%t44ZoPD>s%3 zZvgA_A?N)x82*mm9L~1Z-M>hrmQ56GTdEutK*rHrAr7N|Gl{kAP#Hb6sIcJX|LD9tIkDvNTR%BFRWC347i zHGG|9yOgc%F&T|^(YR+XL)c=Y2BxQ)>lDzp zGdvJ@l?cPBxk@K7cTUUO%}zDg$w0#+`?JuaBA_2V+P#&HF?muUx;MS_*U>NKrW*c? z0()7ug{Eog!0v1lu@|j;QQ2-u9=Pe(eMpOkb5k7C@|6|V|pvT?Pa~ogTrCwkt+j7n=sHGun%| zq&`#!J4=0sLe(V|kfK%0t1+1%Op;Tj3WN|11H3@u#Gs!9dVbZE@*pdI`ioek*C5$T zlYnY%XHl!F1c-}$gvEi4W*71$uqEO?4X$Icmo*d9j7AE}m^k<=wqeV=L91{Tk99@D znn_S>$P`(|!(pjc#E3CCNQ-BnSOZ)*zD(g1i#DcSBUV^Zn#6xotc};fYAF;5AODH1 z-NEdi2v0Cv|AnnBP3enZ&Z{%yUi00C?wL%Lmh9}lx#XW|77xwTK8OtPjSx9GVZ;Xk6A}qn~T zsNN)(1Ak^g?Abg$qCFx9-nW$|$y+V)hs0LrO!j&D`ab}Wf%!RhBw;oJzmeJ=#e{{1 z25=J_Dx{nNh6MtbNMjRkQhkh&u8pyP8TC@QDuPQlT=7=cni93Os&gnW zwC}gwg3@GEq*a*!Zr;S!P9x+pk_??pOjc{nOjfJ$i6(m!KiI1YWajP8+4JuBxf^VJ| z=&hu|otju!CPR2AQ(!qdvvp(om;6KGdc8;JlcbpQFHIdT-wC=kbJ>b7R2vY0UH84M z`CD+eO^iUabGBu7EZx(j552qzyzD29eQk5W`r!UHShwNEH2LKRQxi%bm+KlB9k;S* zWAug0ollQ_I7Wl4@`05x#P#|&WeD{q7Mv}G?iLG>M6nEJzz|Vi0^J6caR{se#6`(q zgQF~*4^24xd`MtV6QaZUFzp)NN)2be3Z^E~Z(_n%a#&wDz)k808OnZ9@SM+g(~PAe z>TQH|N1i~3F9WK3QRaHR-+-nxs=yr0I$Ww6fj0_4yx+OTVJJjxJGX!J@`LtQXRSZ) z8QsSrn|&|eB=?l6n%IH-2~cewLe>oY@BcVD?|>x!|Bv4t2eL$PAZ~DPapcMh+^a&f z9GT%ZKW1oZwhVBa8JepyLo-)eT2@+CU}jcU*dA7BYT7VuS{Z%${r>0RfE%xSzn-th z!--bk6E2szIX%5=imYspRk*AgrwNZO5B;etLAWHjO8C>*1`~R6!7euBM9fs+0z7gp z71`Ye%5cK;_f(MrUr|I3K%JsOR^A$I@wpAmDMNc9@|>#!hUI4eXB=CTbovPbd0&O>(Mu1 zK9wz;^gHb&Mc6Egm7*pSJ8mJuSp4_vMevXX6Y2kV%ZO+WJ{+`&-zeg%(fjWvgnJmv zXxPL38iFgj;_vSBrCX&8=*?XH9gaZ3Z&LJD?~VU=-&Ef5J(nI;2kwD`CBvHRBXC5a zn520niUL1cwA;eKqyoS0bW24xN#Z6Q3HNXEM|iQpOWrs@DAX}ffrDqJWn$m2p_}tz zg~;D{AGV(+eE~@*BE9&x0H}5x`}AE~FEo$~5QMMVxcehFD*_;4&r3K&1TX1~dkNt+ zRHSCeTqa|+bX38x6q8hd9pM^fGJc|u9x*(K?P7?wM!h?h4+@#a+=0X;k69f6R|NeOd?#4XH5ti`XEN5XwZD7pkk{ygs5|{(e^ZpsS9Cvu{#byvMzO&!EuWMH zC|7Wg0F_hm1&T4qj$*EDwRFgEZ2}!28>`>q(C`O2Ra#v9r_lR8gV%TGx-Df2Qf79 zz4yF>eefnlDL`1_YWof-G9DZsFMz+vn%2q;S&-4Hb^y(Obx^|qO@G>yhDwDenpRB7 ze_CAJ=4W0f<2?ZnJ41~8OwN8fKsxEm<1WzNK=KPsj-kN-ZG(gx(5)J9Y~)#+=-~KU zpn62PJ%aTjWbH)3;1tTsf9!kQ8|+NPhJlbMUE>(z<``?^SjXnrmBw-2&2ejt<2N+N zM;Rw1G$*7QCuTJ#<`^dxG$&o3 zXtGMZF4tdULP9eiGj$&^b;iIn<##%UiRro~+Z|iBuQbWfZP8g8)Op6tjA%(uXvs=# zN%wBi+0&v!e78f_M5oe3N5*c+;=kJwrM~-u$?j<|JE}$}GBop+$?k-AY37N$pS0}$ zVWQjmZbx!r2EmjkSJvp7@{L>h)~30Rt+^{r^SoR0)|lpRXw8o@El6lBNHs0YO5)ce z6;pH+In}VVT&tqay*d*6EjFe3M#__B(=p?^)dAMcBCDAD?%oU--J0gu!c9&J9TTsL zG}%EmOV4WA0nKDrnCKKGW<{8Ae<$u6dbb;D**gK|=+5eVY{~T7vfF%1wslKknc3m$ zw!`&iN1EG?oHjdpq3!6^w!$Mw#k{1mBeTj`$5$+q!u0WoORBgY(}?~gV`0xb4 z4b!}=qr8;wZTV|k4w>@ld4+WCT-6zdeE$@?;|~=4XI-D)TYakc_F!L0e&1<}%NI^v zzG~4wbgKWJ#g!+guDrImI(_QuoW->tr>@B?M5qoC!BR}_5MTN)Jn$B2@hNNlt5MSQ zR?jJs2Bou2v@mJD@#Fi%Z|}G3B%=+@ozNC1=4Nz;i{MBe)vEdI>(^lp|Amg2jnt34 z8Y|jw$kU&JY(iv3)}A1ulDn|tgzpP>pz8GZkf@_P?v{nuQY{D6sbLMBN z%_4T&qD=YoqUN?=`k#N9Z~JZc`M2w~KklFZ_-|VZwpq-{m)Jdel@YAp>TWqWph^|x z$ZOeNU%r{Uxd?jN6^UtWAjN-tJz#p%T}e7EkKc3z9Iza(2GGxV_Vnh7d!^yN6}6OO$gO&{Qa&8U#eF00vSlE& z0XVLqEbEL+JU0{Lt+Z_9$9YCscRX>lfX&5J8$0piSrC#-x;ntdD0dg&@y8>#9ikIsC{ld#g-i zk_Sr}cS`P~&l&yIU_!P$i6v8+(v67Z;{FZXv*Y%N0cAH()svaglZTj(C}KVP>n2vF zGgaiEMTUrED286GRq0`UkX=`PI9O*~526{hp5AfV3~XMI`#lB{7HjAP-~)9=y|+?S zte!{NJ0_lU+-C2zTl<8QpW(L$Oyy2`{*}BJe|=#JYXAH<>bc< z-z75n+yV7+7e=0#Y{@V;1rdX_IH1NNvWkvI*ftGdO<3kLGJb&4|4|md-z5$SUspFV zUE#SQeLiNFjtL>#bu1nJY6kRg}Q#l=vOZC74K0P=kLT87d$nn??SI8~}) z=TUec5ve&-kdNN~0pq~%r1CdnuG44SvxnW4MU0Mq`u&K4NNcWn|F`@{6{-#*%vv9t z$j9q7at$OR5*wz6{h(`Kx1Dsj92l`S_LTzr2-H6iq~K&u0e;GLsI5mGU>@?D_E7MH z%_}c54tHm)b;^9YF|cBc+WAzuhcE6r|5j!uHkU$i!|5ujwFtv}jqkOHuU2PdTiF}u z*;+kV2C&*+w9zP6tRHTCXtYMmGc7|a#z9WeoHH6L>UohkcnYh~`erlF_%lV)rhwF|E zK2lC4HpB_#Qe>I4K%q~d|hUJiO~?=BkSq&*WGluREc%zQtUu-+QsLZ^9{6ayN3m0QRiMg$`50LZGIa zc57auJup%~uk4wfcMg&@nF5NDi(EbThaD`agA26|?CRoEMRuP3B7z%mIWGFlT?W>f z`*zUXw%w{B zshxbSrvp~Q=T)@1$gl^scM=Z&`E>YcEBnmOX!VoreW&Vn6c}cp_MJj*D-yX`0~Sl} z)}B1*k;vyk1b!(O!?U~Z8hgSF&>tS43oi6oaM2X;UFZpYut$$G2rcp4fokhPKFdh1 zSrEDTi3){O1l!%V6@moZquQF3(Xxo!j1bhujQgIQ>n1N8bh}m4f9ts0?Uw%AXWZ^w z?7wr(ZKOrkf9N3Dqca}Q+No_%qD@wtFWptnyLi|Tn0C9opAYN~xJ*6aLOZpSd2tgM z#?$VNx}5rFm9IPYQD16^(i0G6Q5&~m?ry<9{ayzmE4LT!**xSn z6?%1Q^UCSOtJB+7zS|+2TK>zeeiRnP=dmgQZHA|!dnyTnd>N!iK{N+2>L@UJAGXk3 z0bjoO0O#<~AYJawAo{PkoVwe6$8Q_u=AKFkG*)e%Gr=OfQ}OvEya`eL1b! zT9(&qc19j5Wg@f%d#%JOXm^VY6=g01*MG$f2U&cBY$Z(julq4(s;88pn6%lx@^{;b zT^sisF$BG&x1NOry`)~2ulwMtLZyGj0_XA=uVMpw!lT~uSf7J>%mP)Hia5VRCPB?1 zeHHNmH8#;hl`e-8Rv&dryO)Pf<0~Aead)B9-2F~%%!ik@ce5p(8~pKIzF&N*tUOl7 zRJPKi`8Nudi(TsgK6E7TxaUd5DYLs=gq44uudUM!`&1?GCQ}k^;Mj8Gi6@60g59I9 z=Wlvao)>$1xGUPHgJm1;RfJK)8;058!mQob)?0=*O1-d3J}~m-d2COmQLZcwxg6HS zT5s;HH)ZlYu`?#DFr=3ERDts7wFd1M@uh3_Yb)uxE7A1%xv1h2wcS&B%YULQ_3Mg2 z&H805%7&_eP&r}w#}j|NrHy6U=7F@PKWoBx`DWn)X#ob$reZwPL2pWQfyNNUhk_pO zSrtd}Ubd;sFAftLvfrzEQ@R*Q2@ehe$T0=u+iTc)e)*tGM>*O)a1*dK0sD?>-f=}+ zo6F#Zo;~HT92Lw43n^JM&D#EQIA@`H6sO?|Droik$Lqtl{y!~X{gd!5omE$f{==E3 zlu`yCW9l$jR*bA!Xu+jrn#SO(@H#pxvHq%=0pc5qEJ z+Ychg4&cwNHi`(NRz+X!pj4YtlEw>vPPaFpV4^9k60m=EqEI1=D@CQ=E=C}fbg7xh z;*?L%-yP=>B4!$jtzRTl=9bxj_KB)W8yL*IAYAew0U$|dwM zVZ0MtOo~P$G`p{)z3jU*MH``?4#|<5#*ElT3@X`q;Hyz(uXZsi zl?!x~F76WMqlhzQml1)zye%twMu%_&%Oc(*m9ga!zh~Rdy#D>6`~K^hCJ&An?RBI) zzItEMPNV8DWu`pii4Kad{<)qunW+%QxtdQNd4k@0KC#1gqjul<6WhFmgv?eRCYTDE zfYvs9?)YAg)8{D!N(?fBv}IVkWhZYp0jA$`#iX(>fMiYGu3rl(?veJB`1JIq^zp~4 zA^_FTC|Fh*jZ0>`5v{oeO?>_P-(pP^KK-mI80;-lK&6}dI1NcaWs#I-B6+RW zUF&6)TE2hNSk!4_R_{qeUM8V!Ou3HUiZm6a4Pu(_fyBMQ>Lj1 zOEy6j&BN$VM-s<|1+Fp2Nt6Wsfs9Fmuj_QKdb0V%FI;%lJeXf6g>e|Mf_$Vpu!2Fe z6Mz`gI1m>|j3RJOTC69^dFoPtsH}ytbKxlmN)e>rK3Lt{^8Jq(TMjSDi#2&&lJNy~ zP%`8s!@J)`Ro*U%>X}~FeR%cORF$Jj?F@7(9qPB0>NTDVg~*&d`O+K8H7pjQaJY!x z;Cf{uXmbBYW6$_PgyV}?;L2lzYm-9MzCTByZCpgYbtPwyM`Wx66jW}CQc!iD8K>_$ zu0=0Pi(J6i8NgtC4i`2$$ut#v1m~BoMmdP8EST&-vNId0R5YuwX1<>^c0bR4I1b5} z1%FYjeJt(TBZZIoegXqc24&z`#SCA?mwR;m`S$t9rwhaV}cnHwlhsJ3HO~Q`z|9 zK@@Lg7qTissJR^&Kg$5BR_Z?F6LkP6u%7|*V_E+Ud`1n`Gbbi{e^B)P${R} zCg=UU($ArvdfyM6*{8S^g?K3@kMj0Km z#R#4FYUda?4d&-wEU8Cvzo6;yrXDe!)Iz_d=NIx0~3d z>%jd9#JP}bF88*d{(9`|V(hgSyN>O$Wx^A|$ye`gY_#9WApD-Lm4$WAw9@8_Je)N+ zdt`;LkvD&cN%frke{geRK50+Kz<|A8HHtRj(t+ z_Kup@{?)lHW9NfY!|f2J&Mh=e>~aVnA>u1{ZBJQ$tryQ`-!9#3XrMCQ-SKtle%~`q*x08pQu7(3>Sf%qvOT|e);))k zp|3FK>Tx$6!KtgWItF!13O!K$wLeSR`rC`Shcr*5pR}o8IIwN0Bv|yR&n+O&Pu^rG z3PqTgut0)F13I?r`+=v=-+l#mUOIrS03u>t+%)TrLHN8aOjgb6AO(4sOc8ndSGfYis`8r9(e2i~XLaEW-B! zq6Xf*v?)$y-aK>s?7R^3RP8<5T%q-lw}PgyFHWT3XpYun_~$VAb%y#> z{s-TIzpY)^PQlR)p3sC1LMA)ZQ6Pzd0#RR1F z#rb)<_5}D_qO{zdo=x5MWwmi&Ym>VOieO|$#$qa@^4Np?vzDm}G080%a`@h9Z%m~S z9K0S{$qktqb(Xo^%&dD0YO_r?(0LJ5@CYM2LkgxcP-{eiz5s?I1n5+#gl-wuX}HJM zXnnfTJ``oIIUKU`7Bs@CR1AKc9M+H?_Kuj^KyC!IR!AQ&p3wT5Liiv! zG)Ou#yik*(q_biG`<|-wpS%7VEF5D;dXTqvWdRt-21Ca6LO^mE7`Sp8SwSTgFv(;p zs#K)(I}cmNAicID=P}iZ8phAjdkmviCx&L zJXan_Ua}?eY3gJKs$^kpGZjMsS?N6WT}<^jo;sgK!b<_vc57{067gX$mIn%0kfjuL zBwD)%BoG)1bbIxnFZMd$n6yW$JONX0?u{^RaW%su z3v~K8sQ$yZ_yQyu21?GdXbBPhx;vDFv*FBGZ%<=o&BCYTDiy-!dYh}InB z8g6~RBE!~wwr9;JRZC+J{|h#8B@?EO-*&j)M3-_+wu#A23}na8*yr|FLnS6y<%fSs*1QGv&uTxJK0C zPt|`_C3AYbHThygvPq>^Pq2Vcvbk@AOCtXm<%$3H@r*s!Gou(=pFaULFRVYo#TZsQ zG^uX0Cx_}aV3x=n8Ujw`g6sxL(xK&L=P6-Nz%pOv+Ac^I4F#sJvA?+Y)z6tMjC;Bl zw1%3rtOt$Z$HfBd!||D3QmPEh`in?TbTVko(l7PbABwkKR5Q4@;Jum)X7#A2(?W{X zw^vKaPc|&8`5ApQ!(TBPBjl1xD~Z+YT|XU39Y41r)GZlQIED+xh<9I(RXgk9`5J;W z*(^6;MG62vd7A!aM^SO@iw%>WR%}Xq5@p7WReG(qJP8(5}5}Tm}&*%Bms4`t{8w9Y0AUM z3?U}CA-Jf4IP!>+!4Swm^3b@Jqr41GICSd!A<$LmWmzd(-v(0{qzChA$L!xHz%)s-G^tx_07rvDr&Tc>+xpZ8_GI^WTx>{F|6Ypk497 zy_jh2W*TDB*2$vg5c2ma@$Yu@C9;yMVtF^YnY1^GvG-pzc5;w7+=h7IzxThxtFmSR z383Qm8wg|TuhcB{+GTx~TD#iy$M4LOMv&9tB#>C1=hh8Ia<@>aC{_17_hwYb^{A^J z9llB6(6T)1GiS@CdP&?Uxn3>8SB`h9m$u2kgdec?4ayKt*-nH&4;=q))seaTVz*i4 zz6oStUpnKhUK0Z(vwjLh4r+kHz^9iPHYaur+?zY`6Hh(EY}miU8>{pz`O|sZ7oEIq z)RQJv#)kU-RFg#xH)Kx>(l=g#`#yens4C%hRRmihj4QJS&VAU3VgM1|(m#=m?N3VA z1yTRhqEW_qWuB6jnHv0+Xl*JF!6`U(LJ+b2=tWz%>u1mgBa@ELwF*2<20aq2V}PEw z6|?=;E9b6PwJ%pW{U_oP7id2H`eTf*FUd5jH*Os@;o!FQ9|NHrs?B?~!vpR=LmFve zTagp3TRs=wT6hPCaGN1F)RDRzOIb#9a@nnI%cVjik)Pv42ZF+e?`fzaFM!g#!i&B}mgHS~DEw{}%|@&cL~}(R;iV&pQ3=*W37{Pm#A9O4H-srd-sYM~r^`t;gVv z{u7VJkDV;V8GLMf@Q#npxw1aPWP|snOEmslc_*tX^0D4MWR~^&+sEuGzd!a{asRHj z{+!8JvXq>^_sy@p`|TPNWjkhX7_+z8#Y{~GB9|ie%^^mg0xEW573xYA8K{VoSDMnH zg}0~~hO+nHJFfggx^v?l!;k-+SlrV!^LxeA`ubfC`dc16HHj*%eSCVGvB9{#{wjYd zaF46_Lip~VSn-(@@6RrQ!gjTqZ%#uNwY+=#c+=$P+pqq_KH~b_488ikQ#VPo@k8Xw z($jI!g?s~i{mT?xv(P1g$N*qAAZI9>8n#VdNlFEf-oW&!n+A-PlRmode|aD!YcH{6 z@4;2`8@+16BetY6Otwk$tzIjPQVh_IzcN_ZTlFgk4&0uaoeUJ^W=KxA-lV?f%>Fy@ z4p{T~SM2kBe)B=AWZ#+F-QV&p?$y)C(x!7>?Z~k=qIVOJ6RcrKVVn+EpU}EsvJ_B#OTM@ls zfM=%Zx>OU>Fj%Z=5z${{dt&H-_VQgzXuGE2a>IZlZpC&dZ&z7vyyO`!7e?Wn_w=)b zdGZ`8F=klEY~=Bc1CKZaiG()_HS`GDrna>9M?`&k89Hb{{vxZ0E_V6E&;b<_Z{KXc zbY^?n8%J42t?ffN;sEl)i)FQP7U@~!yWf9t&RtS*9!_gzsdM+l4XyhTt@9!z!mLQH zPVquB;p2xCAD_)URo!li4&1ZI;@^Okf=>kBZRLAmPH)ob3hR!6=hQ6k#eDmuwY5a; zAK5|6X|;!fa)b{3>h2x1jG;%THeM@RarwumvCFYFtj2*nZJWixM&yePG*}@*#9|l8 znXTW_u0(8Z^e7?*gs<%^2}&VktbZAb(j5-s*m!-rj~g#V_@LAWSueLs9#3s5&`ceU zF4WCI#}pazOrn$&=fME;f}Zp{yA%ey0F_Q@V~NTdPjN}o$6J%)RrYz37yp50=~UhY z9a)idTV`ORFuCo%uM!RM-ao(o6Al<(fA78t*KJ16E3(9&%bzA-GhfaG9WU zT;EiFLJl^$wXw`UxlON_E@nC`0th_kf~g2J0~!E}osJ8GG>5aH;$ZtFiXm71#)TOk z;iSl2uH%5(IREMZCaJ6R#A?TfMNAL;E$gB9&CNNu)ZU4*0P9$NVKNVCcV%io*^>O_ zKByPj#XWtV;$CEafn6;Ejf?2H2lFm9mt#?SrCs8ij((%)gTEgWaf-6Q(Nc#OwQs#Z zlBZ-gV=4!qKCFK*Fx?%vZ?O(bYm&@ehMcLncpoqxhfHz zZI+Veb1rGctpP%n|JQt?4uj>98ChML`6Oc7-OR$JO~8*cx_J`24%?nfB5IHH0oKCu z%S(HVZJh|>MYXZQuu4n9ZvhvNNsum++2vw}XX?w$i4vQ8*>A^Bqb?}eX8=Dia~F!Z z1iCiO%c_?$;i(d!U9sOHh|c2Q-~Mzp6_PMUjrG!~|IEx*!Bpdq$MKAX&(*)fZo#zN~uL(^<;7j$XAW zUmL<{+uyUlX0UeO-yd%dUh~tRR|vgr+bhh|R&xhjIARh$4Y$FW2`CNMTO=^ipWCeW zbney(h^gUQ(>x*Vlp<7kMJ|sTZS|&hvusV#fNHxW2T-Y0)b8RM(rH*r=$Nvy2yh?6 zlN@&qn5Qq4JPeAr>G*Jak)6oLTTh~P)DC`(Naq&_rjY;G`zafWZdfL#?KjY32FfS$ zRZSVB(?X^CnXgz6Is+^Ud%4GY-G0w+r(p9ix!;FnXb{0M8uOh{P=I)Dfic0`cQQ2O zv-#Q(t(=E);sZjxL_RSiX3Hnn2Vvf1|Fue!hTrPQPHQ??{n^#q*@ z+JwDjm8PqrsJCHD)BWKE8z6`1!9>Hwpsf)S;LOO`q6WN~ zTPjo}egU>cV#|NDqnMA0tBjKVvRJrh#J}8?k)%?4Ko-o%RgwS@fx-oJ<)iR; z5o*oO5AMCZa9>m7GdZ6+5?3v^BMGJ=&vo2kx1=jO?4`o;nQmjdh2pi@kjfT{Xk7@m zBY#E_%7Z(%?ZZW?oz6I^Li{x5*#)U}Wb9k9eoIu_K%`*TB*K`1Fm@xAeB=+PY$i#|IQg71Dho5hlj7LTvoY`*Kov-75~A(01%(fKML*BW2D z?eAQ8Dzr32D1#Kb=1kmaB_Gpw02_nMoN3|%nt9xQs&go7Gx30#i$^WlRJ?O)|AgwP zu#m9ud49YdPgoI;qzP^juZISMD%mL1hFQ+0o#h!pqDw+9C$H~6E`pfcMHvzo{Cqo3 z=@)6eWi>fCv$zUlnKvTm&ekkbRXZHQjyG8(1=L_1pes_O(OzC?un+(F;$o=%Jl#7l zFwUS5x}~6-ilKHZn(Ux->2t(P6=_jgtpNc^6)RlD&-w=Zc14iCV%e;_|NY(%+X=pC zZXd{FInm5)<(_$=zKiQimtiu+&bY*~#GplvAxs1gBZ#xkKMYFWyjXcyVR z`kwBC2R>fwnTN>P47{_#?K`S5fQh_w5GBe}6L+f>Bn=$7qR-R$m;9J4{(9>BNa8e# zY{4ZvG!&kIl;{k#x5EV#SN5m454+zi8Q(g)g2gweO(Z8qu06klj`UzZC~cU{3J&9% zD=oI)YrL}k)K~2fE9CsqkiJa0isG4Swh{b!|M9#%41Uh3JyVt~MQAt^a)q2D{XoCc$00dYnmI5MTYESSfho5vPOOjfm6>&)|BSCR}C_XRvnYw_W}3-&Q#r9TvaOh%M_QGR&u+9od| z$(dKX9iY+?4idnZm>ekeXdH(XgvNUFJZ@En3}N!$Pp%`u@Q>nGTN&Nv(qyN-pnY=F}HTS6?szZ@p9doXtX~U zE+G0hR(c0>VfhL`x2Y4uK4Qs-qyj)FE~@KfG4KphWFk(rLXujhoZ@IPj~|uOTIH}j zNv3WHQQHti7nGwnP&%w>qRVJz6^67jW09scpqH%RQ@;*ZBm^qnVS7Z_0wU5^ z0w@lY(&&hl3-&9XZ>ES3%Fu!r%c2Pkfp=lFZWGZ&;5#K!OyhzlmjSsl6gF@`iUbUvUY!tB6}q!397Eaoyh=}lAARfaF+XC| zY>J`~k@{HoN_6abgLEq?X?B?bM`$Co6Kx?Y)&l_a~U`EpNggRiSl%!cJK_uo={4=$p!D`|l3#$z+muw$*5mAV)T^mC;st z36&~9<-RBS_9?!aS9&RFE9Ve>de#5EZMN*P)jq^DU?=C9uh||^yt2cxH za(J{U?@8KyyNDeTiAQFw-a?4o$sJ~sz{c|WRJGPmqfo?XRwaTH(XHlbFIyK`9y?ma zR`1qB(SbL=!=U+2zbs4dP}1>4^^4!CRjI zvS9F?ok~cz>XO*ayOpS_9u|5w0TZu|IA!f>hPb`sl*e+XzUZ91-Ca^Jo_3$2L0Z>+s-FVE2Ff`^&z1{c4fJ01)zt z3Ot?2N{5`N5F=>yL&M{S97Jho@Zb1S?f5FcWc8Ut%)vAwbc$G91nacYK(2N6}`v5INc{_CV;>GRCi~zOWeFI6cakLG#<{OZ+*Q~qLEhKdd zr|ih06ak6+>ax|qA0=gpWdd(G)s3jkMaTyBBT&3%Z&824!ud zM4Di)XPU=q0g%y$pmPu}Op+NN0VnGD6x3C$+12|P-sJPfi{qzoeOmGg9a3(pRAeu4VGuUhdz?Ub#GBOP>*Q)v;PwPdq{^crsVTGm5onNUP0df7a&Xj2b4 z_tMHOT(4M6m@(6hNwK14!}4h#v@- z`6JmNn6iZ&W4qkuH_*1!xC&TjSO?K6NhNf`7{|+Lo`NoK5H?jo)S_%-GL1Ai1-+ve6y=26t zUf^@!>P`ru$n|(sxu)?Kw0s`Q=sW#h8*#Y@a^oUa{JDqh6umE%*fL`Esqu2e^yfYB za`shur+>wMiIorv5=)+Zt0-FnUdIh*#oy2`9q9U{WG<6Z&;m%jl9+~M^L4=qlR))5IWhzeIa9vNM~ZY;F66?xyo=baN~eP~5s ziO6?hIHeHWDIrW`Ln`xE9^(tw*4@nnK?6C0Sq@^RM%5yp9{%2E-39mxfxs>}yA$@6 zMZM`Q+ooXu~ z!iKs=|0a}jD_V&W1ue+A`iNyxXt@OOU%esltUTCPtD^4R==jL ztFY(s&Jp(|)f$|U!Y`f{F+J`7RG?2TfKo(n{NB6H{#Dw8ijBXOc2T9f1Pa*<=^+4< zp8%J!@n&{-B?7ML6=2<^FvP|a=M+{`YeG2qn*eTziYpM}2Bc5@;6IvwXClN#LvG8@rDR6Lo0%jp7k20pE%;Vi9j#R65F5N?+f z#9vGOrCV(orju&jY8sFe9Wy5-d}a||3l&;|f;TV-vr@t=gHR4QZn}yXl@LC02{S~+ zRrAxf5``&XdRC;E&H~tn5QHwpSqUL!4j;<}1ti45d8Jvdd|Sos9FWN}v074c;Jl!7 z;c}tk8^ONujjvCvG}drYS-K3_(2+S^PhYff=3c?~*Wvz2;cdm}K9+$M9icz9TJtbz zY_SnFid16UB<&{BSYS4QA@Sfcx(weZ#9gQ2#Q^@C9M-^wOC;kr>39(lUm%qPcj5Yl zxJv-OUw{*L;o1dofCzgHz+b0Nh=e#i3-l49uM_dtMW4trw2crhoX1`6!YQr!Bxa!1 zPE8EX%cH;e0wEx|0-v78eX;(uFo(A3g4?@re^yQyS|f2p#HNvhRJKo$CxSslNa%zq zE`gmx$nMJZktl3AJ)OK#k-|XCOe)SwzZRTU9GC>H7z%HtU*9v{-4lT}y@)aC*E#yT zH}ZDRW1unO-JFOp1t_>~t}&Gkw9QE*Y{CQL`^Giz6K(W2Xe7AVfu#9s)&N4`s3U`d z#8US($;yG}-Zgz%Pfl*h}(ntAf8KuxC-xeN=qA5HL7nt;hZn zM?%CP5jYXx%969<6+crIbwuWhjMef<+Hw}*-8_;k9d>1ii9&^!QbILA)Szp#giRo9 zaBpl2?mEvq*T6>mV|K`#P90%+M33)+n6I(z(^;2165__HO0$2(GIZKR`Ng!Ut2-B{ z1JkRInrF^UK7aUbt&o{dFp79I6V&8aWgY+G(d@d`pp$D(Mm&DMzT=;JrSx{@0Ia0u zRtcm*D7=Q9o2hf&hpI!yd7S4Z?&wh}vnSchk2*0}OtuWmu%b1X=cy_imZF2ic}QF~ zb!S+bA&I^zm~5yq_@BD6rgeoIFF1mACOW|R=NBZB)U|%{pg0A&&=>^k+zcY|hxJ4;oa`n`+oij2J<< zsT?e^dF4?i7_=#f3Mu#tc(6ug(hZqCSs*Y%4a6vEGmUuy!uwdO9S0~L53%8bCB8^=$LB+aCy|o{Y zBZFN+cp7Dbn9BxHD&95W3F4EZCh~0XIx|(0amWk*PbbwwW6I;x!nMO)FL}m{A}MUX z-(-?-5?GOz0Jbn%ZM!?=dkJng_%DW8zg^`s^;A$m`BSa3K4PQSJ6 z=}JR==1raS-tnQBt&THnY}#w)%|*@wm%<8MR8oOXM$c@)(X_F0<6P`-N{dd$g*VgV z!~zN%SnpmC!`GkL`e%b_B2|zQ()C^?nQ8^)F$fky7j6m z7l?v8(56~^!t|I&wi(iZD~24_<04ucF^U`>2_22QM5Tg(#6im_5)vhl z!WKf>vy??HX_9Ib^L#wca31o}_Q%i#S~l6`u#t2?{j@1THDVNJzOtcsZK~zt9O06jGts#SWc?M|( zcf(CjumW1GNWq;kT%0C{6o{D1|I;`_Yl_jib&f|c|5E0k&BY!qMWB3H$o+c}h!ZJ3 zPL}gL1K-9?X;MJ1t1ur+iO!i@yon5B;)o#u<^Qo)N> z&yNX=)ufDd=Z;RLB(C`LT$sPEXX7Y#or(P6!IFz9s=Y(2m*l~C7M5i(_^49!Vz(m| zHefSX^(i~H$+Mva;)kJ0A`eYp098gDvaAqE4$eW1{R`Ey$qeTHO)~>($DVshiyBId z24g7gT!KEoyggd`EybG--6(B{TAya2h94fYIlH_x8b(mAXRp!E67RpE6HDnq4|Ozm zu3i7#T{-3H%)fcy42gQ%BVe|HR)UE zBuOhv9ieG|r29DDyQsJ|Zkuwtua9d_Xc;-+v(|3Yg_6hOu6HZ=mG6eVogUZ{QkSl4 zKUf3_EHdJlJY#G{=M4xy=Ho`B2%p=QNq6@oIJAV{{cpM$^{PY6DdEEQXr`j3RAK!H zlC)uIiwaqo=l13hCNIg$O1S}02ob`3QlO%&;R{!r&Rxj2R|SJ~YeAKRp*8Pc^5 zV-7&_`QTjBUNNbJsF=}nU1v;)aDs;v4{v#^^V#&KJ=Kg-tVzL*tuevVmG+kzCb$feERWCcq|0{BP=T3dj?U3uxW98<5hJSUZbs}$8m#$lHSau^_$cy5L+E)C#9!R6e( znWP*HHk$z^3lX<$co@xH9Go`2cE|PIuo;Vq(*zLOJ!8n_UE3AiBvYtKA^d#{p16{e zd-F0ErNjkcD!W=Mk{az>%ODP}sz+oC5$-b#1vfhQ_96i3W*6aDUw8_h45U*nNR%gD z_zE1$N{QWJd(a$Rm@YwW$u6LYIvRE}&~lGx9pj{_>j^EMaxIrw%OflTDh$3SRj2iq z*4U^Hz8qRlWv(xRkpH9TUi@16|2Tl3vz=YrYVA_1R<`b?vTh2gvvpf^Sy!oK-N=1W zgmAW2x?xfj$+{qfDCE9%Q-nnl->?#L`wAhx%x}N{V0%2yV`rb&=ly=ZVCOST@DO+2 zjx8mI@nvhcwf3Dn)-|3$4zx}lz!XW^CXKCIta`s*)m4KVw_L(9_mn>X%|!rH4ARyE zpYj20JOaT|OK+(*w+@z*IIIROba)*Cn0ptUl6$O`;sY3Q-mBtbEfD?USA(>rr;xA|{2z ztdWoo@!B@HkD9u4Q_h%8gZm?$dMv>_YtT3oprsz~P5=+#kK;t0rj)WzS0!<)FB>7% zM#GZyxw^%On-qb>f^vrT^Sam(Od2S-F|X7)QTI9hW+wGATh6C%L1@FEG16u>tSj&e zDUIo4AqWsavKmmBom7oRvm35Ts`HTN>qB&?_>6W*76-)RK^6ew1p&Rfu5b;gJxuF1 zWlCl+Q3ePi_^_uDEm`r)4~YV23@a)WeSbPZAV#69R*jbdI34by&Ub5oj zk{#_}tpJQ4!6T_4LI+I+S85+FB;6H~pQ-Ie@6beL-?!eRPVYSWl}d~4FcwSnki#bS zl9t3aehHXI>TRW!7{Wvy=b81OFKdj;sIonu2#%WiPP681-p3)}uXYJQisG)x#9jWE z>t8Dn0;P0#Gx9Y?vWn#UF$vs|AhirA9S#AnYyf+!0K<4EyFUPR*bV26v~2ad*%VHo z^zJC~`g4ls^DW%uOS#pf^UfPWUi?!;nMQv6hY;1UTZV^9@qo~BzXj>W3nYXVB;b$V zdAQF21D=PA-4cswLNM^ZQn7ZW8n;AX2nQ3F%*|=GtrM12YScF82w+8Q;`K*szNl$< z31iz$@@l{5ZdYg%rvpBi8x9wt1#vzH_aAC!H=Y}KKDUJRsIR-1joCF|CL!cAL;Dke*5!;kq-OA@a4?PA}bk@4v0hFHaL1WnGtcE_Gh+N*5o&`X3Ojtbj)q6&uPWOwmdGm6G)NNXDO1gmwDal>vna#5GCKx?5`|&}svq zxClC)bS8I*^(uN*U~#KANN+OWctp|)ZZjy4k8e5oG2n54?6#4;wK3Ame{_5s3iO!2 z=p5#%E(9Kpl4v(CHkf{Dm>WUfa{mV;F`OK_sSF;;yA+rx>6V7=3|unbv&(mv#I1CI z*&e@ciDckG_gR~HBb8pqsEb=$g;}Q&a_HP!bnuM2Bm(nj2l8ae=?KiqE5`C_U`l1?6Z+V zd5l(A=l%RhX50%;@THAAps(?=S}1plHB__zgqaRVdHeBK?XH8&X*J-RKs+OwX(EEO z#MAM`;&Q;q{>mXiY16aExoK_8S5GUIqVvCtUz`Hb6aXknF);#8XMm4Euu@Zqqo^6- z#jWk&wY|X61-WHeA3x^kI!6YsGi|Pg4fJ>n;ybG(#H>f>phx!iiu0X-m4>M*;hx? z+6b{_tapdc4ws|2ae9F~af&W-Dc(-fu!D zWuY+oH0J82J1K{)m)3KyBwCm3YTBci&;-Sj&R4l_d+IjFc3wBTE8)y5ue7B{CNc~G zmx`uny*1Glk&9`Q2ZI{YRCordI0IqHm6OEv zCmv9_iETEE-UqEZoUsb+Cq5-!+<+du_Hj)dBW~N%qW<$A!J$>HvH79XG9ex#1TYbB zJ}3qlY~wE5gXwbr>2;<-<|y&k1didR7$f5 zVC%kn;#7}A_+^{1M1$N1>I;%qPvBVhlS7l^0r%D%7J(3q{J8hTFc6j2Oa(-h|!g^6`ZY;5|TOP_S04CD1oF#&!w$ivs zgC$>%;9v2}LE|P#=rD9z@$qTTiqD~-(;@;I#)OIT8|YE|q|D@N1Ya)@%FPe;#-P+O z6uH5x8!NnMLpyRM=~2f>oM4?(ZzQ;N%rnOC?}jzcewf0@dfx(|1(+K>b?FuHt4pR} z5n(P3H1RHVSIfefK*7CDT0yv;)7L4Hiv)xVLX{|D3-HWo`0u>;mF;h+@i~wf9VX5P z5#$M75A{Nq9&By>L@$e?lj> z{aP3}a9=A3`m496Qn>X;@wUSW%uI=g1{yXvepU@5lq}02U5bgXoi?7;=+oG(Ls$zX}-}tbRu^Ge0YZEyTnal8WS7CFgfPGa@lP z*1C>$?qs;cwPF6T?Ac`&zObT-Vi{0CM5}Wx8OpAmCf0hxP4OLFON`9PtjtKhR!Tg= zuxE1Ns9zvNPH4^*iw19k7Pc`hqB;tnE?y$R5}`w>D32TVjLJ?MfQ>u?m(@B-;V5o)#L z2rTul`SwN`;N-K>SdJwDutP%=4*+j%v#uprSJTmY)G97uR@H8(#CWLXeE-&MLSDGo zCa$S&r{%$>`ck*2O$~dr?)i=7wF-Y!RMVG|V=Y={M*xbC?5}q~>m63^PZakB zE?VM0N6k;(`t#c&5sJm-7Z>pyV+em+rtcG-uPK#&$qqmQy4jiC>vF(B*ttyKLjf=9 zbyM)y&Ggnt(;rJO`t#>qZ$T~}NwJeaLBBlA)))!7h*@JB2hd|TYLtG<`v(FmKVD#i z)o2psaAl{CXP2+kHrRr_90Vvwm+?zBy)vx%40w(RJF6@LKSZjizaMshCWi>OO+h9X ztc)L#6o8((ZRvouJTc&Su(??j;88Gne;IYl_b1C|HFM3-#dO+2PQvL2DI9zeEZxs( ztQx~J&j{gbUr(=A;k;YKN`}_eSk!?hW}V6^Z#gPN<1-9uTr1PDbC7*kvOHQ24m_HK ziJjoj&){FCTDlR!QIP6}sXUh15>ZONz-t;%BwAG0hv*npr4i2(vC9mzG=LY%ZE4u&zIGtW_f|<%F|t5M3^f=mtx}6er&$W?i0Z9O+OaLYY?OeK~Mi zT1}BQ@;Z~HiRfc$fVynHVKv)_^pxQZ@ngpbN8 zEEB+|189t(Zu__Q3-pXEB^SQQFn_&OVka2!$gHOWOjs`+&d0Jf;p_0aAVFPAB`LGa zbSFPYt*9K!gaMSG?j=gs-DaZ50u@XLyhf5s0D!r4;8uEI%e!8A7T~Q!Q`mqxN<%*q zUk$Do+IflU$p-U4()nyu3lkyNXab}@6uVdRZDEp{XlBR;-FpzQK!oUyy_i&b8Ur7H zw_vdH0<}rwN?{_V9=sq-AA)y=m1bO5zTO8IW6hL+0K3cFm$ZrvNCIm!`^=w*74k^R z=d=08*vaQb2E8UKOQQfYiXv-Z@2K63;BM0Z4Y0Pi%WU=+#2omFJw!`$n7t8Y;saoV zxgF%yLNmX&(8dQfww|X}++B4td?RfFprj*E)M-m1kdASQ8P!6NJ9E&V|ra=3aOL1J(pM7^NmI@f|C!6JF$rX z=w7jcT&-CFsD(!eFrQYXmf1d4b`aV{dslfEL{*gm(uC&2zX`E z;8d+88Q1&7%w-fCG!_D2-7se!h)Y7#JLs$I1B2pq%lYT(XlpWArmMwhUzG-f_r};^ zXM%o)vXHuBJbH4Nld3>1a-i5k9WNzXBPVcA({RJe8(q>-9lK%UULF259bmRAi8uf- z^WY7-(KR@G!Mmt16;`O_mL1nP+PY;G&sm)gtm1Y@-CRJ7&V2)H7QM5bJzD6|qK4$+ zQ^3a8h2VG!?YO*diRa$puqG8*{?F)AP>oeRm6JRX-Vt^_5F?h7(a0Lo79igtpn-L7 z62|z7_Z5oVRm5a&zS)TA$>?&do3}0@Q_IqwQz&h@-E++3vR~v5qfep9iTfWrE}9>K zeQ+n>o7S>q``7|07`uQ-39L!G4dbG!0=c?iatR*I>{9S?Fc4Ynr~}b;T5GZbU(i86 zR-CKCC24R=v_R*rE^d$O!Ov1F0cfPe7xHtm%F_C?F~=gEh0oIwk1|)?GY+F>s|a4r zb>~*GF?L*_rZM3WO=t>l9#RyCi|emE+J?pu(*?)2Tu4m|<5}##J@~a=BEqis-(=u{ z%=<6}EFTWA?a36}IP(EG*z)hz$7*cUYAJx3L}ZDgOnXBSW@T~j-3Psa*sd}EZndn- zLiE9ac?^t{o1);C%!jpcs7}iew3;&H!Guw+nXq;9)i<-R9i-7)lw`}472(+^9)^aL zQBF^UjidlLHUETXN(p*beU$~QVmXB^@f@BcS2r0uKA4YqjZ{}0iqFYe7)gw3)NXmC z`4=)v-bO_AD^Lz{$!T}c2Hm9r4aGdeX?XXJJT(5r9Bv)!!)c;ESnpf;_U>Z7*eR{A}}2cOrLzgytniCkv0w{K{)Ay zfql!LKkRdQn;g!z2i(RS9BZ@1Dk7|D6y)1HflF?L8)(l~e}d}gNDB3Gb3@BVlNy$w_DcW0LWO!)@Y zKZYeZ55Tc9d8r|ihw#mYYbl1vwac=1OS<+=3rQ@%5!Ai+5?>Y>q7F(wT?e~jMYg0P zHrGwN7_nIy{I%SrcB@e)lz4J4a*xEiqbm|a2s+f$IvZ`Bi(m$2tJ_BU!4wK{lyYU{ z12YJxR+1+BaCveni$7-$hz9EC}VVEpJ*)@i2R)F?Ju{e#A^e6wL%|Wv2i316a&g%F?z&dtmoT@wMYh+D} zMcv+&gVjYAq zZcqzghy(lZhPqD-c*MHqu$7DvkzrZ28V7mwc|Oon`3T6c(o25^Sb^x}hUm2;dR+)! zhTNWC6h=vja(or#X7jE>iD9KsEk+5}01dxqjw_NmqR&Yh9q4;#G}|CDceEtraH*>h%L2WKVqpmedb;8kt_K!v0M&Pr($0C@nMepJOr>8!~Px*E|F z@LVSO``=2P?4?xbD7_KI{m{Xs)B(z$?Mp3+t;!&QXh%>@yLuOLd9*?7>6zQx;y ziyh<%c4d60p<8jTN3LH`DQiGmc?Y&G$RP{BD8SeZl&$67{_pyRT{fB>C6@nlb~3~fDxvgbKw3%qlS9E$`I z+e_ya_JW#W>l4ZyCjtK=fGi&HWA-|%R`>J)zI~;)j+#}%uuBfOsM7T7=RwqKlPhm+ zH|i#B(?$}>t)E9O1Ks3%;3Tj8xBGIfanA-CFXOS zl;p-ZRFX+>H{YpWIt%hQlrtdRc(#)7LPB$aPA4`9u|VqYe8={|s<$W(7byH~H@+eW zLWpU9j4;EH1dm|W^D!Gc{Cb}NZ9Ln|4u^J?Lj~&Jb7i;ik2|U#-xjIYoi7WPF)$*f z*Xu_PHT*XdSXE7NojKyr#%t+Gw#OnEfzoM1GgEFrx;%}F5vm`dV!+E+F3cugX@Jz!YCB*+>uE7dO59ql~W ztofjWVCK?5t###apSXHa5CC9T2vyfiihWnD*S^d9y=nP+LJnP1g`5M1OQnrz(?*|{VxiEaK+$)kAn+NRGRjX5ExU27}_h@ z?R;mpw5tNpuYsuISDzc-d>e)4^W?&cB23$f(rtXxu3^7kAgWAh9@>ExVoES~iA_q# zNjYO2#cf8J@7G%}J^t%A=$2Gyl~968vURq$pyN|hG|8qX6nj|b4N-pHj?WszhsInU`zE%xzzDyx7J`#^*kICFlidO1<*O+ zdQLpYNxtsI;GNZt@<3h|lsExs=KzrAk?IKf&&*ysbBh1MMuJkl`Q87FGb!axNeI@e zouK^Hn3SuOqB2V*r}glS0%Dock}+b6M+nS+>}tzQ0)q8xz{`BU%FLaf<{NuSv zTL>Y;E$;#c?1~s*5tq9>8T*MYy~fM7ECNO(x3;YVt{H&WDuJ8q(4_9%Txz zH;4%U?&v?5iJq2t_n(a$|Kym7p+Sijb5wqr-4-TLV$#wrjes5#UYLtAb27w_KwB!1 zVk5w$RcEMvHAPhc=@lg7)J04p| zX^KE}zXzJlqcWw&?vmCz+0?o2;zzW|Y}oWbhJ8`T$e73O$fC$bCE7>0E3o^_qbz*; zD5+~No#_@@UG3`8i2}0F_B=}n&CPtxZIn`V%rVsI)Gl@TfN}x+gKZ>M%zXZJ-RM#b zc^Y)nnWa<1Tu~vEhvck{5`-elgi$}@-Uobu$l;^V=a7+!e>aD`_iN{s)S}F?A4kP5 zvgN)IG4Lm}yr$ znHTIq=-X4M>6AJotObdk;eTUn?>zlP&iL6DM!u`&C3IrVNNy;HYzjdWtEXGHXaKwh zD6Q$wV_#Zxv}xUvfJILdPh@ngW8m#_J5Ii0G{^QG&aGTsvgpb#^|cEA^>&^s4rvPW z%1M#cL=q~i49U~*ssNoEGSvM?7$`sz8)3sxiB}ccCJERaqZF`m znZr_NHj3>hp?VYfkLqHRlL*7u=8r zcyaJ^bZ<^T5gaCm!r~GAE<3pced&uj;SGfDadDZ2zoWIvYsH|BnC7&11etfzy-^ja zL04r5-2yJw?8P`i2>&9{hD|Gzr5&4 z&EBm_lr`UlzGvp@s$2_wQNERZ*EL!|6SX?bRq}#18%3 z#sZAb8>UYFu~~K$jVN(3UWaZ&et4Bxum)4!{xkq0`5 zl~py{sq?Qs?vkT=%1M1=wA0085&{g~TGp*5X;4qBJOC}lE+%>o(4 z5Y?4W@zifo#gwEJ5N+d+wS!{?mRV14BOfx!4U~Tj(pIjxMa8 zo%4&nGUi0|iMR_}7)=-h84(lW%lShlTqFC*Ynnh3le?QMQg2pC ztwVOR7K?sOy?YcKbTyo88l;=;798LH`D#HiRiD)^K8NbsX+Wzg6}v8f=zyj;=5jxO zo%A#IUEG9U*`e!n$6|}lQpV7^G<~XVw(+V!RU(5S4-gT<4X1jx$@P39`30tm7lQ4_`U_iG7fk57)EKh5}KE#yIzX0vrZ z`xCeWT3-VvF5*k<$(Q?%`m$5zeZNuzyHeyyA?+0XTz{Guswra5ZoYt1fT5e{TIpAR zVIM!-l29=aWWJ65KwxvY;=zKwUx0^t+%<|~yQ*n=jBN!nigBnFcN9k)ivJd1ysT>U z%yF)>=u+1Ufl7^ioZOAFl5TU+kcU)23Ka`0Qo*SNX&9#6ro{{1;CUnuB1KrVi zu`)94j$xwQZ$cv_SmPzjf5vOL<9pwCOb#f_QCj&|4Vp5vHDZl#M9alaeP8B1iDCIy`vMwZe%_^%Z_hir#g8cQ z-?*?Pst!Og5zRP+n>rHE^Rq`7I$z!Qpx^UF&DVSL|FWh|+A62=O+0eg;6r#-mSkXV z8e1}Kl3ORSOaOk4Hu-QBamwGnATpXo5f&b4->k8#elIQ@K2bJ*_Tn=xc#v;+!0JZ> zVL|>Vz@1Q8a@YbNS33qnC@eEPr33Dv<9p=M)-0FNKqF@mhsfFuVal3Jn6L;phdt zClM^=-cEu8%IUwn42AzZWoDxO@_HlKbqRQZoLS53#gI zua>WwQx2d-uDh47)}S1i=CApS1pXG(y~Q!(mfJd94AcnL`~71)`{(h2K@8TJGENkW z^UXp_3(F-X!MO*DBYp?c>wsD?UhVagb6;zxywYiX(5~`LnC;@k&&ux!?D`TFH~6n| zknn4x^zX-VD_d{fH5E61dro@x+pU#9GJ6%fyY_gSX7Na@7U_R01Q>k;L6UP!Ow(`K zcNND*gtnB|G_EOKGH9vO1R`*?3f+{CXx>cx4PtZ1n(wFV7DDe(dwE4NatUx9I?!O) zhKP^_@uZCS)(ypd=%+Jz{Pj(oscQ@1zteT;0hEAR_G!qIdoQ)+k*`A(c~x+=X>i5Y z3tLX?5bDOMm0AH!Y zgb6;ot!{^Pq1#_kc&xEM-^sOXS%&+v9UoRKv3R}+<(Wyko2sN$*L_>$X=xntew7oo zNOOIT^*cY-uRXgd44p6b+-WU%%4)1n14WLTUfpr5bMsxNV1pPV$C*_i{x(t^nma~2G8tf-oq-b0W}Y9J zUi0PO{|x&1%euY=m;?viY8|>lQ4W83-YG4nSA<g@M%5Mud5ya9bC zdmiSpLuMHtUw;-H1Ok)pdU@F{{8~E>tOs;`Vl!(#587)yXW7q-8ZJBG^D-_NJJlL7 z(`6Q3a;K+mPPlfyxsYzaXX7l*M*ZR@_u$0i0}GBky}b)+-j>$=?-~6q@3xkw?4HW| zH2hMmPPzLv2X}bG%_Y}K``lt)+(~|~GS*HO&vJlA7jNwcmuWLsZH)8{guHTrPVKSK zjEijPG~ z1l-qcl20*hh^zE}$U4v|5m1f{%IJaqtopWo4<>rjUNre*HHGdUN#7ZPixznV>0+_I zs?aPC@1hzX$g%DHk~3%hn`}Io*nTbNyzNYT3!Uo3c{UcD)f|F&RNL zuXC8v4%)VLbgy!&dDOje>z-{)4Ph$Xs9AJk6FLu)rgFS&M|95z&q?_$FpC2 zoOV_iV%BOf782cfFpq_dYj$!R<`?X^T`bsk=i$c`=|1Dca`;VcHSP! zy{F9; zx>6bSY%oECz30$Zk2*Sj?!J80OM%ku?wOj3ZtZs0s&ylc~QKQ;C#a1|H2%Ac3JLPzLR!g?X#61;%}4eJ-*zi zInyt2|0il6bqOtaLrid8Dlsbr<^|1f^3(adm|K z4w&KA{k9oqT8Y`kY#ky;ojnfz3sX(A9MbKBosOfqAz*U(AG*lJ7b2i|zJ@$-A{85@ z!P7-H`+!Ly^xJ}sjY;#2j{;5E7@`s*h$3Js|4@PlHm0J{mGX)4SbU1RGp zwo#IbQl*)_tBul(NfL!eO(Aw)*alM~>WvCQeiZdgMesTo$gO*^H9$}(89Jd9Nikj~ zp)fUj%i(bCCKbg%S-)mDM2U>kAUC_@7T2tcvf$9<;k;KDSy!lWm~G%7YOIxb_;{*1+~ z!S2=ve3buHC=F8IU@BmWc$85OgK~tTqY$YIuu8;OT}LT*-=2yrp3(iEn2n3VJ{+DRumCsmV z@Ilx-a+pA^V7f#<(buk)W+aTvzdEoi}xBY{c>Ov}NI1E#eqyILOV3bJ!6f8JKa{z8sz2E23! zhuM4{W$|vq$FJDkqBZ}-CJ8jlR%}Z8^T=3Qhv&juG9+dBJmXXq<>`HloXzOXP2Rv` zAm1Uu%!M28N#fWjdLv=z97QX%Ar3_@GHODCHb6yaRFVR3!3%JZNS&+peqDUz$DF-O zzYBtnqgDd#Nqk%dLeXKdZa?;Fd02cLBa_ECs9b9Y&k4F5DOObc++~4`Rc@8)y#w~w z1SkH%B~E#!{F8G4Fh#{_&?Unr1&dLsFs>0c{%&L}9yQ977&jqk9oV{GNjaFERKPLH z*5KGWahb7u)X|5Ue1LOC{wy>h~J^2z>xOU>|GH}p@H=_^rj%7dFy zjHx_g{CaS=0(1n>7Ra$XxrCu?Pm#np0o`mE^06UQ;O8mx3fXWye6 zJ9U~kfafYva>cfsrzT4{gdvvkGLG>^&hZ?M3zcV_t6I8MVyttq$Hxq0svDcY6yrF< zWR31Y6MLk(G1-S5egrTT1Pk*GPoNkHe_=R4V5P9yIj-ySZuu`63|{ijmKrMs23uYR zjvW+`Rnb)n0v+%!82mqozSyRa_UD1wtJ|$L8#IUR+^Pm+5*b|=j1`-=`XSOK%Dh|q zla}xzN)IP(7^NhnB=6x6SUl$UnsrNf#PCi78OYR5kKD*m87RfK_3*mR*mS0H_t$bz zcc}UDi&-*?gxSWVtw{6(2o@=1{NPWlRv!J+8U&6tw1N!QjD^roz^BW;$AX#4~}(@F*fc8qssP}V{l@H*~N;5 z3olnhCnqk_&VX&#ow3=TjPy3Y)He7?6MRz-3j2NUcQ0S5KzXn7nmZOtrJP{OFcbAI z3BN(xHP1R1%Y1GwYYRLl-!;a5cTQ?!&qnKQg)j3PSJGA7 z;lyWFD(l6?goBIP#G`zEfdPTn9M7Ro787jsS?uB1LVkfwyrA8gBYmXs4pO&EI)iRe zIQQnV49AWnH&_NW2|pWLDXJc-`!RCw`qdwwG@Ye0B5qv!`PJdo?9h8GSqa@E6R^E2 z#ppAwEGnk$INfi0Jp{8mRz76JE7p6?pF|+mv&m@vHE*pCB$F}SPlZ7C7oF=e!)Vs7IQKHatH%>ui! zVosUsz4#f0_KamKh5hDR66=a)|5WXZ3smsQPN5o*Y!TS@V#(k1pRWih8=rPGWYjuX z<=FO3*q>W#df{!WI%wv{w!yenA2<yn1sne`8V2$@ZT)FVF7@+VaqSq*1)$*!pl& zT9dZ70C-ws3|*>%HvE75&tcCpNFT ztVb);8qHsKz2G$RAY+B$TRZ%haE&8=&WNUiz^&1Apl_IbJR3~=jYjF4y@CC+QKj&D zG3wHZjpA)Ya``RKq<&%F(B0FP3for|zZ8p$*~lj#o-Azs%Y? z^zu{CnrvMe@yV%>1Kn_v{v00*6h3MPr9&Kd74Rpy;6u+p7QLYG^}S^Xnyi~9z~?h zt(()UV=q4remrmRy7jqb?}iL~b|&q!H5#voc9FNBDrGalPVXowuUd&>Od@1@YUMyX z8%LRjF_{z}mVHqKy*x4an3ZJle39_4Lb5DMe(7EHq|83Fj`%sic!Q4vCBYfx4`mZndqdnkM%dbzmMtb9_X{Ui|Ez6zbNBc1^C zl7+I6yq7Z`FgwVh7dwLHe%UK8OAqBM-S1yeg09{?;!32ZHM_*+^yU8Z0?&Ofa?}7&{jrsO@k0-5wy%q%_OQLvjlFzXPqe!Qz?RwWbIg1& zp^jfjYf*-}dZVbR98zl4D2nE>FFgv#x3*4Yo{v{P;fv;O-mE#5@?S97v<1mjzHDB8 zxCcX=L|F&qvz{tsl)00SZnp0=dpps?=#M$_jJe02%~t7DV!*GglU3OQJg<4I?wR}j zoP53s>Yy63;nop+W6jZY1!BvU5Eh6KJs55j6->o=jDp7oE73cB{;e@!S|(~Ecbdt9 z4a!^CVF?~lud{8jZo_X4nQBCiy?_e+bqizv(Aa&K1`}O`;TB3D2$g~jOC2LLo0cuM zPuZIkcyG~swS>|pawJds&(&yMcacQO>qhN7ss;GiTZEvqFCaZ^5j0o*&?Ng+*;=hV z%EE+w{iUXmNk3&06!cw1+1(<$V})5XJZ5w$vw(9@jW%J85(>q-2C_)KSPCCU;r0jl zpPW_R1EE&EE%d+m*2TcW=Jsl~b~2M!$Vz=b4On1c`4)TbSzR<4^%ID}jpn zN*7ym#S-@FqbMugC}zoI(Ry(jiC?86w779L=Mb*Em-*+ImZ=GezaCWGYg?EqDNP(6 z>$qqSp;8eo6x&~KbYVK%Iavbfc4F)sSGb0W`pF?40R~&9ac92CaXz8aTW2aA3@?4% zwYl`Ao-D*3*`=WEY^CC?l^5QgqDjHQY(cRs=H3 z?-conQOms=SPv(nT0QQ5-o3TvrLCH0nYy>g-kU>gj=w;ob20I~9h7hpiW89Z|HWj? z=O|wD=dsiSPM@&fS%em|a@5ivY#(m8YG8S4`cRn$EzphnrtU?INskRW*+DaE$QbRS zDNANYukN_PmKxZLjIK{$W=T1En8_?GH(vT!a!xOyrNg*gz@Kra-gq3wV11Q5y@Pw# z{Rju_UE*QK9?q`+Pa!V&d2)Xcg_%~CPu0IwiZ0~S-;^~$TzFI6%`AyYS<8bN5!c@> zI-)jc2MF7R07_pC@f353Rh3fuL7ggKpTf8xkO3p9r*@ncHSp^~CZ*fU4WZ4$Bb#CH z9_o*!l{0oS1ZBCsPS3$fi4PG5a@W@(5XsW`=JXcsjWhTGONr6SH-WR3)dB9Y45OQZ z9b81BcWvfq=x-Zui50Io3@m7Z{afY-R$RIs`uofPt8D$3)lEZsTa98pByYopC-Ln;9J3H^4o(UxbSNl~j^Q_}UvQ6X&n6*eht zCnS~YDHTK=8rH1yu3&uVB=qNiUZfhJD1e2N&`Gu4WyL0IZsC8&i8^8}zeVplqDRz# zmJ|ej0FadANs)eLLEMmBx5N&$D08c(7k(b|BvJHUs*{bxp0m3R^M0UqQ}oA$`Y$Fi zN0)E0o|3x9mtM>*9a=A0a4yLM)>>LBfWnsia5cb&(XMi+pa|ctCN2;Go-MA92#X-u z;`#~jYTA*_j(i!FAoyu)da$uoY@5UstsvFv= z(Yq$Z6NHRe3ZVG^8rY`5FNM$S7$I`v?@L8}paY!ZD38~F8B@HxfLv7tP$!aqTBAnX zKo1f4V|EFB*e^xuH1iv6ZcFYsn_Q^`*Z0h5op5Sr?sJ>7Z{zt=WAz$hI!ITe7Rc8Z zBa5pVfg&Zb_98Jt1L4F*)*`x3dBn{anw98(6rFoK)88M*ci-5|+~z)Wzccqcn>$Hv z6_MtWJ0TTv*~Kl1k)(^7a!;aEx~R=9Nf{|pGI9@%RO+ks+wY(KvBw_U&e{93^Et2c zdOu(1G6m=QT+~SNg+Og!1|coDNc+={Wl*(*@1(fI4G&R1=Rg6sP;*eY8;=ygQulCj z&kz8enusIO2q6k_e}58^161J_JjWwFIRJfp<(aOcM^2?Kv`A&aib@e$CW>slqvSNC zNzL15gcYN_&v3-8vsh^0iY9eHqlvlXM1nGRc?3KGKit5S0tdl_U zB2dEz0A~X7C~rgcryU{yvugc623zDBScX&Np#ysRJ8qqLb=lK za_wyKDodj(JtJjX|NTA;WH$rhM?rQo5qXcUt$19F*g>+$2oavlmRZyz&P8R;`NU=j zT0kWoL~bt$$f$CvQj(-_4KoU$nv3RFoVipX20}3qUw9(&$-qlN@@ja2`xQ_Hzbp;V zyZK#A0}qrcgdA@dnQ6Z)#IZa)CmuQ! zh?IZ7*PG<^(HE=DNIO1Qt{5vrs4i}Vyyslu*hfe|u9au9U;x4h z2Ea2J(Jes7J(5x-?|;fGOv{ISyomGzfHCcm79vv^?^`OKq86#4O92c3YB%!t4N|@4 zm?G`f`;?NUqbfiKEI>9MjVe5Is}@sdb=hkaB5fgZYX#urbk^*0OUvUH1z#15;wu67 z0ecC@yO_e>gwsA@e6Tq=Q~;4P5Mp&c4{77W-fw>BE^2 z8wMolF;akPYhyyj3Lp>(K9YGPFnEIp?mlg zMko@+CfuJdboQxLb*6UmFE@z^15Jpak^6vhB6^+zm+=8=FUsS503uB9c^)eFN_!m} zqnIM!wgfL*g_fj)O_=W1YV6X)P74lJ>`~m!w67k9Br6u->IFEEI?TIg#;&ufPC-nMRPz|0SDy=0Z1RduQd~_+rF0?rekfa=%7qC6L6q-APfgs zq72?N607R~VJBtc??G3S)`O3Jjb^_p836rzuVA8f0;rpWBER5cTSU-{SV zu^mW{WBtO-L6mirb$7Dt@TY;-lUD7}69C}K7fq19gz*I|Y+XF)welGg9hI(+oY_~6 zua%o$XGF25^e=$!)4@4FNxf8=OQss!n;)H@d<2X8-S$`0%)@mu#tRh*wLc}|lu=gyuB`MjWQ0@9+$DsNupDvM}} zeZhN6ywQIjn9UUeo85dnKlS&EQt1>gV1lbL{_d>xyID)s1$CjB z{oZm1+ahmw%!J}rDspi297&Scuz=;wUQ>~&&^Kxag@wwX!=%$4CG9I0&C2afHr+hI zhQr?hc4&UD>*#|~s?LnQG)N*oh>MzHh>YNEmJ;9BMlQqWKA(B^@kqG8dHp2QZsiSs zZMJ;Rm=^e8UVr0FkQJrB?8amOsTxepihLt6+U{rZ%+FN4>hj)q|Jvn5$*=*eC-1Y| zJEL#!*y<`INuSOBe?HL7c=RFw<;7sc^s4c5fv;p?aw-XR&uw`lN$Mk@;c z6pfb;F&D!wyb+Dq%Fgc@>PcjY^vgztgZf1Kvi zuMD(;2n>MKPvLt6WcU?7Q9yFJtDHn2HEA4_izZ{he37_5i$FYBLGU#D)TGXK$Zty z-WU-P35&295Yr}dK%$n>Mndl;-6|RY1*k>t}LHOJC9x5^l&A$ablCog?VE5J;an~UtoSwTt+CIS+rK&}X5>B0Bz*zq$>}Cr`ru>U-_k-=Dm=bF zbcUvWJ4wnhnMDV~RW3E8x9=^>lh6J)?QSGUd@Yv#YI#pyYX0SU|Kqmg4|kh~Weim^ zR4oiHUqt!a<-!yXZO4q&@4fC?bLjqoeKMaTa7_O@#A0=pSJz^;joyty*esRmqJr8rPCf~DLDBX6`v-!Lo%;rnB~z4PN;*w=m^vcN zM@mDELZ&)bMZT{JPU?V)K@X*~bsBLkU}b;*9;B$ddnEu)m+QT+Elnn$FHRQ3+;^wW zebs(RO6{1`W zz%f12JRWDBD+U%wW7G2#lKNQOhzkd!9v!_nd#?;47ve+V97-^n7x-n<1)25Y?%eC@ z*JK_`1#`pkFgV($wt4CCOQ+yL9P5@!sasP-#kVa?F19<7N$IS+hyGWlTVNXK6Y{50p(;L)lwn~r(@KoJpHf;XC ztAEr4+T#I+-OWrO*tLQUeTs*gRI`Och!@4Hx#@bBN}TGP+TPYt;LxJL02~==h4;}Z zj`u($ksCmVIE4<7aLo0w3jT6soEm|`LgI;ZSq4{0B!&X^3r9Re#i17AEO;vUNi&8fKX!a2(L=>B>M1|Scw zMl$_pM9(b}P}wcd=pMNQq756vIwRSClUF45j0ek{PqLPyb zlT?O*{Xr6!xq{nz9fS70tInJ5AGsjt*?5S-iJ>J~L8GlTI8V>h7*5TwpLqW7?>7j4 z7AOy(M&|gbOFh106Jc=5>UzNL3wQ`Kuj@8Qcwdp@u>jvHC!(;YZIG3wES!ys|Y)=f{7rF38fKY4z3{SXeAez#Tn% zsGTO|>R&A(M*z;N6@~`kN=S8AC7%c^I{LraifWsal#8F{`L}vi_hKm!i;3`Qy)HJW zfdkRt>Af}B$8u8j`6dXwUvem?$j&q4nm&;swu9KnoSf7Ki@)CTiLXI|Zj~!$JJ575 z0Qis(U2vK$oUh|75g@>>hO~qp+&SJ-s{-_Me5XAt-k@fEKdo_Mdc*8SIFw&Y!}bZ- zrWj{^P-mVrO9S}v91@A;LE2TB5c7u9HFw{?Y>Irneic%V(;z`I-S`{V;oYa(R;am^ zOeo*#VGrN|K=mn8^we2e-38u{Ly{^$Qm7H~YR#iXdw+^EXmP}Mh9gSeUcEolJ%0mfxk7SJ>rR2BA1LZ8KSS@N4aJpc+WR=N|uCwP+^Is8_?q)j2 z%@lU1&L3I0ZT8qsd9D`V9#>YABU=+h!=_QpXJs{520JN0%$9as%S9>U$8lh7xmGrv zMOWNq3z~{Y+Mfe;fmoSK=0O0e73f_i5S~mem(`D3xdLZWMST=BTO2cbarIXWzsOxU zKZr;c>LsZ;*D;$PY*B=(0T}+>TidDUuwB>x;DJkTyQ4Do#fyNpB^Kwqu9`U7eAW@J z)I7VVdP_?HHI$t5xSRQs_Poosfkka) z6K_}w9)TDDaMHIwDs7;&nxgbU^I)fgfPgCMersaPEcmHty%i-c)?PM7i!fW z08~L@8{zatk0KOb-&y1tm3pQcAP=r8*?wvG$(`;)t)1_SpT8p2?$CY1l9t>nfuUx{ z0c8+w0$`a$Q%ALPX=*vx18*IkSzJynNaPko%Yc!Drt8kHL{LM8J?e5@z(4oSJp(IG zu(~Ib(ej9B~7FyO6LBl1hnkPJPaHT@>Qo>YQjY _^=csR`Tahng4O%bR!Pa^ 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 YA1)QsnEC3C*iB~7wSOa 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

b>*Sx!NG9H>}qwO=g%>Ycc$z3G`$Pf zmn*~4Qg9(fo^G#?9^CHs=D1dkf4X|!FXwk1H$2amuHXF5gt2%gR*5;Z@nQWXOplxU zNG|K65v6z=ek-nQ;ndWHv8q*`fB&2D?fEue*~v>D-=A%}oaKAso~P%}{|+u^8=l#m zfr60WF5%Co8*}IW{rY6b+^HY4Itl;&{{A?Z|JhOjGUX`Fod>a+6rfvuHZ_xn;R}?+ zaJf|X0uN_ZT?mQ&GhhAY5#|YcO#bq-cKxEi2v6@G?U3h1etzOxgTMGHuym{Q1rzGJ z2_@sRyufp?x^aHt6?T1c-VFCq9nMOI-YxltOE*l|M+AM#-)jn@E|}_Cp2~OXS2A7A z>i3rv`b_JQ6qTpMPabmVbL#BaRd+mI_od*Pt91co>4m~$INVjRh_U6$Z$7WUvgPg9 z-OKac%}nRKy6WpN)md(k%{Ss(4FtYv(CsT+@@w1=bF4St^xYfDZh1vzR_=)L z_r3iC^v=B}B98D^SOr^oS5%z7U_Rqtn9d4uc-F9252zgqj$@wWoDqyGLib-(zu%cJ zuQ7K#a<)Hayz{`r-g@(e6@jJlL}E=P;YjAu!Q1w%$W`-KOf($7l^$At;8CWfyVnqD zNzy&$rt`a5B;NdZ62kdyHvTj;pnT4QmW)2rRj&A6bbx3=Aj<|p==!aqs8^{>>`mWC zuWw~+=sI#zr`}_>HwKPAX8L?^!naI}p0igFxAYPOc4>M{t^&|$@?s^6Ty_TJLHGa! zWXmwKUL#XZWFE?r%5n=F&>VJ_wSQ1?gO3ogRu2|x#oJuCsnYGBEx;hjF>q2^eESzc z%)MWy?HWHGn(vBO$0&=>c6xIde+kUV0n%CPcw%V^!`2QZ`O=dcw>l+Sk~P$z^E2x23Q zCYNxFC?zR0;Am@UxQ!&I#r||YyXBWH5|VPRxXDGy7i05Gnc2h$0#Fz9#}JAN15Dfp z9K=SgOtOp=(fwLh6y$3`E(5S!C5|`*(gYfGIyoD(5CQ^yFCHw&CQPZ72GeKny9Ms4 zD(?vLv33tG$I49^I3&;f#FFw?);(6HI#@w?9AIkZ%`gbf;}4w;8>#5-tuQ^Y#O^v8 zr8?brBkQ%VqPf^dw2D(KTDUb+ZRzxNHx3r(@oQ8|shKVe?Na{qPhNOmn>bojRmR3^7$F?t=zU>V_la~8 znyWXbt}!&a2NMy8^4U5>GAayw;2O`Gb?(k!;5@r2lZMmDxj8KXCpOqXFIBEsPLT@& z#*7dw%;MYIga8vqUlhSbX_W1NwM$1F(q_tVn@aj>rQZSj_NQ~e!WL_H6Cg?efz9$> z>jWFXv{lMzmG@aA9cZMjHy%T8v~%vr)z(okuTJ)+2*kjqHrHa71cK=jK!o8jS}l6W z=XMpxCjl z*BehBA^96Bn8#gEGVdK6kQxs((-p8`9g!v{0>Tw9msskt<^=fi9Ytt}nHQ&6 zj#6X7QlsPtA3-wYWM4}mZvOelE#19LT`D3!fnlHi_5WR}t7^6eBG}@0 zn-67MLn61YR-w@}^BkmAaxv1d1(2Ibj4T-LNZ#tQ2QuaBPh(^>N}AQq69z5k^faQWeTJ5d;T7`~{iDd;8H zN``R_-VCE8U*LItv9F_;gFzt3eT1-Ro)k~g4&xc$ODFEg+8X2SjdzJ7K8PJH4g#g&~ypFe1`&rS}b{q z=@i)jXhm>p!}knedV}=w0BQ{&A354y3gz>^(E#_w2R+3K!Qn?v%f|z9nLLm@cyR5_ zrJ%^jY!YcJ8vJ)tH#%?kvDLeLxag)&UJ$bH1D)$=_xN{~3HL;iwT**GB= zjFsxRAvmtmGD+HE=dB~_;fwH0mu&fex1zRG1tb6zE@JHtOtE-9sUeD`KdZWO>ztOY z2=>7nHYoKPxx&A!o%{72(lJeU_6OK1$nM@Y?hh>u5&n;bHn|Wv*BemiThp^wV(y(h z)zkR^neOOq{j|p}6HjCRy(m0|_Rzrb&RM3=)(WeYBDaSDP}r#GkCtO|Q`t zz4f-Q%@k`#=mH8;04wA_L?2cmDAT}bBGJ)vul#FPOU}>L((e*+=Y;_t-P`_?J|!o`JCXQAX@y2t(bhMZC5uFt*_0t2m(& zfKu-=%oN&9DGVLNa=o5a7C{XqI&2w3g+QrBxIqQT^#WBW*$lvvLA>EG-xy$ZYo|i8 z5pw^M1Az%a4ZUYN!2G^Q~*|>fAw7e+2GCdW-6J?oSP; z3tm>#UBl3odmIv3%t!2H0KUrYOe35++X>p=sP1tiuk|zh zx9))UuI5CuWcI+-Bgy#Jna6+Ct~NM&yzzsz`|9F@i5QnS|DsK}{+i}BNx8LJq3V)P zV~cZ&Op#1AvKg(T(%)FOFH4zGmpjemtwkW`%>CqohGajNmKN_8{?X7=Q%0vx*u(@D zlxL(IK~wx=7x)+2_?4x!9BBCxS6U)U`LfvNJno%gTlV=xjMnE(nJ8-LY4Jm-4EhbP z)zsF8q}?;#XxAk#F)J^5m+W@4t%#^>s|r20wMkL+&hDsowFlEg1Q!1{&|^%jj?cZ~ zZTsaJo^s*nUc*~nuGrLNIM2j)C)c(ry7U+>wztoj4E}oi2y7j2UPEKNYkzp0Wv2Zd zK?Psk~>Y5EmsoW`h~m(zWvoJTJ>IpLF6>8++FnQ=wp_ zPGgv%PxKGWUK8EpkawZV;GSFCNWMt_PqPnOVV(@k;b>SX@MWE`mM? zS^L0h0DxMX$U?0`wYGOz>eJ5_&mOiRWV9ro8IjtS{^NmT=-Y`B+i>F(9}>&Ux{QuU z7cST!T^NTs5&i)s_Ahvm%bJwD`{J_js-_*Nr zLSMt$$snFW>1O$e)B;W}{{8E!`o!Xq4>SH=r-uJn>pOPud(`N$Wc^hoN92b>mc@D7 zw|R%@22L2h9-^?U)1;F5hk7vYpHebxDOi;xI;~GJ)K5to-8Y< zHE*w5zcvwiv2s6(&4sMr+y@g@QMwP9n<3;3G;=WDcS!H)235G>Kvdn@f4epHF1Dsg zFSOG@9pa&D`{e-dky!ch{ZtC&g>d@e1=Qug4Hz~$s)Bj1w+ zKa6b?cHK`F6=1o@Pg7LqKrr8t`<$vsO8m6aOKJShizQp!|L5@K2QgqY8o9oVkxLc+ zw|lwy0ex7q1>=HZr7J*5Q`|ethv!7usCz6N#kGA0?DM>r#m%xYWC;o% z@v9~6SU$4>vLxS2Jv(Ceia3^l7|ew>7=e=xX#S~(+>;vNv=sYSGaMGBz3WmM#P&F} zg#9y0-LU?}@hv`{&!TXDHd^8Kco@YLnjEUNLt4!NzGz7pLuu@@-nt&LFjQWpD9qEK z>8+5N8TgD!+Eq|57?YRcx%GW|xAR2%Nf=rGd?K`khUHraxf66w0aY5a+W zK<*-exQAA`E`)^=pQf3gklGn86jU1mlV}SOfd{LR`!T|f(%VD?a;)|w0vX26j3j6H zzW#~$Q%UoYjIQ-SfPJyCt)+zmA|ry-o*>^zGV6o!NhisYl3o2Fz5Py&c?ZJAS!rk6 z?wU)jyCQHGV#O^GKNYp^QczPBasLoFcO!c`&~Aj7-ak;c5_k}K+E`Ril{v3!_vT9y zOtn41qS1*@cKBSWh2iwbqu+2Roevidz>3qv8UaOs2&a9661?+3*1B1?t8cE8_;;6f zWjCY`)`zyNpR$~`VH-xU)SIOX)VeC^J7){JBO}9R;~RP`FbY64Z8Iy|f`x!ULZST; zh5?GH*-YyNblSgfe-x8!(<5IBB|VBMUMB^bVoWE#Cw@P(<1GSwaTu-GPNm=tP_Fj5XGrN6&Gi;*NX+JWy+OBxEROoatc;$xJvrvZ- z%9`I6+xK$IZ=iHlt+hmyyyUSd-OExgwZtf{t_Nz{`TUH9b?cl9Jhzl2odR-CrEa#E zbxuKTdbx~~zVGFX#$wmz<=6GQzk-VNWCkcG z^BZJdzXYi1QVcsc)aOA+h>661=$F5S@};jhsv!4@dgry0HJuxgVuz}gwu@yMTTbQR zTFn%*7x>i!*DvGS)Z?Fg4!fOQkXfp3GY!${H$Ei%w0h@e0^ox+lRQFSCXdE zYizSje^M{5$~`P3qqxi)_c9-_x_S=o>j07x>eG7`ReOw(LAM*Z3V_sX5bpq|`rI)%mu{w?tMQ>%;8n>VKDd zb>@DB`y6sX^Hvh~i^Ee>$wt>7=pj~y@XMDyQIiGRA1%84>x+-@4-EW4eX5T?sZxLc zuuXrCj+ImCk4J&8Ud_h8&!|eq5XPT(#iv+-w}jtuiU>h<~|7K$8=i$<-L|a0sh*QFjM@CD z`RIW%wc^s&nFZ74UK;y&w(#$ia|;^4xH{B6tyd8z%foVogodCkzox$Z!u;hgxG)&A z^>r7_m@iUd^-@({w=0LoS-M;4A9$d1U~VDo;*Jt5$A=GY#Y(o>0al<2Z0{lmq6gEl@82Oq0dsb5%KLj@5C)rd~2r=0%|` z|Er3M9&P}mPM+kIM{Iav4Y$5=*dRS)G310=te8T>?W~U1gxmAULn0s|qvf_LrNd*j zKh7;_6kQOr7|VeZGDZQT#|=D2#O|ZK99I@gyf=E?r?Fdp;Z|Z0c2}-p8Oa2WODgG3 z!n-+)(CCpoy@yuSLet}@l<2@|0`z>{nt%@7WSa(ajOZxCj4SW;<*$~UXdxqZyh@+6 zAIfaNL9{1-x^1-yCxBG_a1ZPdeb$Ztj41`V5w2DF39Hq0_{3KSwI1uTMqV~H;c1vU z`|O9uJRM1uNqHo1Scv-n5I;h(4rN2p#)9fNm=S8$gGO+b3KU-jm~$e}1(`8$)Bs!k*3pMJV#QX1>Ha;gXI#p>rCVi3)|CnFw4q2@Duaj~b(vRQe;#{v8o)-oGh zp+L;><#J7lMv2v6hk(mP_WEYJ@EB1To_j-GT*l7tV6>}lenQ+tU5^#5=`J+vG+(_` z??J`6Iep5@QEx%_^_XWCl|pH0gsw6f6r^#*djWOT!L@d?qVs4}sst(2ABzMm5)i!S z1aMxztXt!eyS`$h8aCm25vO2sxwdNEVO81uynaA_K6;++3d=~g!s*CX0M0Ks=uhw> z>Xns03okF!Q}2x0&y~_L6)4y2CSJz{5g3|FhE& ztAeYa?BECFVUQHI|Qphbe2zSKWAG^wX5?~1t%sXsRq>DfnC zpw`UwN8k)ohW4h&>lg>H3%nu1TyImkg&B?k8&7&53-)+&WciKBc>Jh+|GN~x(*bF3LbKnVT*RqSZTUypHOf5K_ghqsyl)4;J!(`^9$f zrYrc!=z6dO@dfqOn8UZ)LG7bCzlt6jidw^SpW1_N)ldDJW-;mr+M&jWx!_m}kZ<#p z|D%)S#}@agYNunP>^sZye7nfsKCg?uS{Rk;tvy$B&8wakP8XqBo8x@>`herM4)UgF zKF`o=*gW5i`V7PUNlT2TY~#FW2UI)jCFDd6ea@*K-EN|h)za>2e|iU}wy@TD^-+RZ zC6irM?PV%~BTUJ05I!2P9)D2$b_Pfk?c$`D8=MHP%xJEoFA^lJT6(@NCe|QlujPkA z&RV8D!%sENf0zIEMCIKZH+B1=ppt_T@|&zyjgQOp_4{6gA)p>tfp#>en2MVLNA5JN zah>1O!Qo*%F|BUIXx)}=jg)_)D|6jzlL{_SBbKi&Ea~;mHMdo|AgmKD4r0@sG^|a0 zkuK9rr3_yszK3~T4E8!$muL2+U$Td=GMP3ZB!lqc8%2|T5HmL^!tnYhX6};l_M|{R zgny^#aqZN`ztOyyTz(G}d*)W@wy!`S{Q#)Bl6~&MntPi^T^IS7n%1sTKl^g}*Mp7^ zd$#>sL8(FuOYE1KCff9l%t(`#{CwLZJNqfa?(KTjj4FFdXXH!cnBl9Z*%mEUvYBjp zc}b1$QFKvi@U=PpZ@V479iJ6#oAG$kue+9um2dRB6>|=`bXUpRJMn4fv0p)?%Je&> zhbEm@!-kK`aKY7<2x>B1qI-zmcV2!&FEcJc)ZjHOF~siTBE$=LVS9AXf0~ouFC>&M z>M;6x2=W6w83#^H+SMhkT>5a!gW$ti?}IbmuKQ8&X5YVyir#N8C>@>+ahvJ?&6?Y( zEcFa3*^xPQX2u-;yG12lxyxr$4(<3f^kV8CC_M65M!E2Dx=OA6-T$1L|Eg*M_-Vn9 zv6;||qQ8H7(boT@1@JhLv zzWlpb9+XJmU%JEs6Y@CD=8xPozV3`{1Z5x-GBVW6(+}@xeUhBE7tIZVk{M)V} zb!ftZM1*_5*J2G}cpd3tqg_-U@wkS3r!1vas5305uzD#0BFu;ca2mmFKp`7dTff}3 zN&1g&I(1h_Uoe`-h3L;#Q=SPK9ERg_86#NEcp|0Fi!SbI7p?61QeOJDe1 z!!Qe?zUCRdMX7IitRG@t8C{5!$JfXR#p+&fX&bYCH(U1gn~>mgE8P}-Kx)4>H14yk zlyB>eT~g-KbVZNz%15=97%`^Vp5vq4x1!2ird0O@w|ve)ZwRIV8`{|;NrpG=%_BQ4 zg1q#D>dcRN>67AM2O0C9RPsi^i2cu|N=&d;;2PKcG7jN6+y$oedD%?FjH|#um%`Pu z-IqFWYsZGYdkV-1P^BOwnoTpANqge$(U3zZ%K;l9)AQr$0eD}sn6UkX+fY0deqAt} zxP&h47|ffA>$G92V+G>n;uAo_iDA(ObK*ktI0uUr8`uYA7BBB;--XyT9&t&h1euTD zpkBJEbOedhXPp3CK(?fbz*P5*+5iVCXx<|cLKAy4-dx=kMB8jmRPdWZwUlIP<{}1v zg?ct#aVkVlhTgL6ze~PZ5!^&;D-2-h%H)pWFGM2@vWyWEH)}r%2`5t6E9PkmWiD}G z4bK@K(7wxTw>ZI_6rs*6kEI>#My2^%*%UQsgfSjYT2}$CeP^&}{GC9C6(GsZ9~UL! zO;X>nbd|&sb@_d3&iq+~AO4r}ftKC>0SN#YPU@a-Y5!(iDwl$`>Q}#{+8GO?5CL>w z&USK0uTldC#Gj*b1#bzPCOcgE`20mC9}Ja1!}YZ|1PYi4jm~CPD2RRmc=>8v4GLu< zc;|%eY#E?kY4rv<5p~!YF~A;~|0kHUS>$oHD|m&s{*;pX6s2m^O!_qk<5_To*F9%E zQDX+KeFan_Bi`OeUG4$KN|x=&@(LcfiH~F7$MX>Q?zjYla=0LAw-`r9zzTJ_VK!v! zG`ElkrU5C1Q?j|P2$-fI)QE$s)dm~@w_8EXMs1Z_o04L}@cb038I4e-sz`aY1w zI3GX!4+O^S&ZTmIaP?Zs%SJ zhO;^b#k+{%49D(Pr^zm-uFQdb{b zkt<*)e_=t2d5QStutNKCoExtN$p&N9g#-n`Fpf28&9D~ZTi*hZn6*jFaWk=RD1r3j zoQQ7#!?;a!FX!i@#OiB|N`&EN;`}g>9rDf0fhnXYN}WOC*sINkBW$)3pIC4jP?HJ~ zPDU}9fUJr^u=*$%VOx5gFgMe3brFIwLs{-%+DxLy(M?<6vgEd^`A%MV+c4AqUjc|@~?<<&X^|V@tj;SG29ublFjqK&Rh$+Z3&aYe6#FEzjzq_m7HTxmov9p!UeH~ z2rkwZ02JvFsSGI_=1s}+j-}I?odwAP@$90 z%3TAxN%#niGoy2?P}ijRmF$Yx#bF8Q~J<5sue(U3ox z3wp<~9M`4J90}bmj&KmOCb?UFa!tLVbH;IP-b$7bX+Dsfv+7zk2;_dUh*^o?e(b|% zBE(HiHDzL)^>E&1bmMQzUYDOSbGOKLhzeez)XzMYKI(FD-Vt~VNlh~ zq&`-%<6mc`Gh3m(urs%B%6b*GZ-uz5T)pyUNmRndP5*4bA4xlw@@~YhN?nO%r-?(t z%vOJE;7oNFvXaHwONozSS97Xv9=!aMxgaG9QSx#7ac@#;BkO7zvc$P@AP#`3GB8t( zuS9Uq-^IHC(6^OAn-$D7KKqci_3B*PnNrGB-2AqO3_GPaVMXcJ9BVq@k>+YjkczlG zElPnC%VsuthqT_C-FlM8-r&Ez-A3L7TTFu#pH=O||7<8Z z4&CqD3k*IR8yFXy2M=yrsgcfT$T^80KbhV;+vUF7j+vdgetzU5Lh+L?soke5F?BEOhT%?Y<$Zrf>QRLR}Z9-=P%l+EID3jRf(rY?X_6r?e z-C9w4nU{6@*>N6!^j2`#J=&+sjt2 zcm4~zOKZO&A|~B`_^0yoqim0%wgp4>StFa=AFV$z?Plh?u^CYhXm=+{>VL)FKW^l8 zAD}ubxuHhX@YBS^sa>LMqAgk9NNzT1PduTrK);Utfn<>|yo<1WrORa9+0%8jk>Fe4$S3YjZ zdKoy6a!brA_M(bvAr8_qMOxv&?7N=IG0tKo8%6kRUBs-Lw`b|M>JMMJ;yF`+UovKl zuAFQJiqREgDZG`oYz!h^u*Eb&1r_s-i}6X(w}XoRW*D=^olS~Fbv81DPigNj#IRtnb87p4(Hq1&=^86cD?4F*(axlK{I`x77-+k9Qu39{{pXM__$XeuQ zORC~Tj4(MS>pXf{J)3IYcy${l$3V!^!VG z9d1nqGcPsT-|B%d;+Y3uy{`S;esJ5HT5;-ZFEtZ%J7qopkYO{-vq#4>d=fU1(1&%m zG;1$&CX8(}mIFNr^PV>RAW` z8^n&L{atP~fWnGqCh}GE@O|jF0?s>!zy&ALd z^+ao5pXA58wiM0ZKWp{fKfiTcxsU4Xp&-MqOKcY4gM%Ao&t!~N9R#8HE}xITIF}In^I)>d0TMqcZpDI zssjiS%#eChro5*J$jlurqI#I!@v%AFC0_>aMk_Gzf#?c#N-#AzwSyK@cz>ZA*B-Dr zXQ#4+jjAJ+&@5rKY3P}*&Z01%{(u$M0}cqtfK&awaCbrtkW+@@Cl3Py^-~t@$^3b0 z<)vRAZmhdJHKij@T+qlEub!FLd7X(zrN#1D95iTAvCqEirl34tr?HMpF9vE7pdj$D z;4>14Z}6T*5isubTTj|m_#AnRmCf61-_R2P2ML8aCl5MzF0(n)`Z>_FML3Ef?~C0! z3A7;LN?^#`>nr0{r)&zY#i7y^0oE*F-B5gKRz+SB8|{tKoqwJ{BNGx3@_w9R(AbW*=v=I4N3FJT!%X>tsQDT&@S0ioKh zLlOw39)nr-jyDK2tgX_&Z?3^olt>W*^QsBo4V!6#pYHEnx*}9yL-#wpFgy z!l*WGCa75#O4x_=S;VLb3le%juMB{aEFnflk6L53%S`f@ga|;q@Ky@;X0-R4e0!}pBeUo1#lPZ`fQwf zTkd=xTum7>+oi9b|@=YmDzJo7iq z^Sga&S#p4ptSWroWy)Ugy40H8*95sQunL(#$le`=^Bj0#J14+R z;xa-cnZV|m?g!jI8H<{l-8raNy>?A`zB`R+D?>$@av=0+5J=|g*e^&9T-#VboADC1 zOg(DkCsf1DLi9-@4>0Ssa;wYe1<&1G*sh#mGx(a46Z@tPGF;Q>bkS--A=*Pm>lu%` z8gvd8J!nl%Z&|z&cJ#Nrxi{h7fhIz*^ObswGi(y96W~1=FUG)R6WC}1Vd^8G!Pf*R zxF2B3fWgLYzhj0&#WXGe>UXPwc`iMmn*ubSa#Z87N#2wS4QwzVBL)jlW+e}J>7f8% z6pZC6vY`kRa+*MW*$RxAXboZc`2_;&I}k~QLcw0g*IBIwEF&7=%%nxQY8l2<7zdD4 zUbsX#(A1RfM;4&jmxd1w6ncbStXWda`wiW85lF3BCbBcFS2bc@+|4akL#N+ z{SC@llun5Hmz4tQMFZIlvbooiv4oM$rg7*-su2C_U;^VrJz8J&+{d$xpa&O%Gs`f(t@VJr z+HRfEfsa@b~LEN8l{ zmm=~~CzUHlQ~!pTop67>?e)%A?r*o;-otpdob>Q=Qz#0}?FaJogxRmU_BawHmUAq5 zm`%;O1fmS3Nz0=3CuB1ms+D91VHKQtu6J#i29}EYi1Se=M-(KN6byOoOTjtHfvS{{ zqz)0l&U7Dxd8$xzor9?@&M5iMwuH^bCh&z2N7CC3KvPwSxlQV^ru~0&0xh-<`#Ha^ z&dXZmxpUjoF^k#N83BPhlbasTIPSzSHhLY{==11UKG1YyFG$YRH~)kEdd5NYmgp{? zQa2|a!?IJs>@yp!m_RqS->GWDYyDezmGY>)$Gei96w5PV-^+`TxODy&^RQikm!G}n zmA&}guRpVK&$8$b)i*N77n^g>EglNpayysM9NN`v=}|>Q6wg;!oej#|U2(`}>8ov# z={<+%9jO2Ew067E4b}T+pIc|XwmP$TvVWsz>m$^|eA%O|-K%$h>uSl`=uB&Q_=0*c zX)gF7?QmJin?qwK+p|7qemuW-NGwYl&C=w~yzuN*$&X%}?Vn24{drb&eDmet?Vl@4 z$p-G(FAf^qXt1=Rgj8^W9|aY`3%E>zqkyD-KyTlHJTVWF?DV+Gi%eC+2+Fw zvdlT;SC4ECnK=Y0)(Fw`#i^rtopVyfAC<(EH|UG^B|=``$nni)1*-x36y@>egqhOQV{O?{N6tA>N)!gYYub9q2}qj;KvX~+Y8L>TKh z@WkmQzVb|){tbro4PN`A$wSL&vb7u$Oi-_9D?-~gZGG-P)9cYj>yyCiGr-5$tIX=) z7hl*8Jb2;^Xh4UrIqQ~MNLps+8loUDEvxm+hRypp(O1)>{R7L7?O2(V@Azs}=?dGa ztNx$^J&!GiY|3WLl7ae~)w*S{-#Di43QFZ-L~;yWE!EK^X3FsP>SW?(iatUN!Xg?3lA{!HMxVQmmK>R%M}BL zazHEE*`e_4YS>M_b6>vHGhl1Gg~VHp!K*M_5fmy198jsF7!#Oe9X$>}SlC{ry-+~< z0Aw#;a>*H_b|=mk0Ss;Ckq*C_SiKS_@oyC0p2nxDV0TTTyvf1VCx2C8=}*DhvS^<*A``jF}3Yeq7wRLHxNNE*OI?x$u~a)ihUFcLKf~<%^XA zOgRuHhK9KCHaeUZP#%JS?xF;|KTHH*q67$%LDmYGf|RaE+VQKfy6Ehx)r!*Ida-L6 zkSVchmO>PEnlLR)NI_@xoknE_@#)GhtDj1K4O=Nhy3SK0_dX|BNGS~+I2R2zVG<(>M zVqZGOyUfpk4z|ikRuV0631n#?pbT;sr8sJ!nWECr)wa!km=lfonJT=y1iO%qnFYYJ z0k}&S-Yz*9C5PPPdz^p@FFI(T0k=y?hsIaW^T!yg!EGwMn*_TEfed72U^6&fg5NH$ z+mN(w+s|YpHPk%}Qwfs%pBsv;j?6j`sr*hW(Q|J52JPZeKPqUNGMzpVfQCtoMy$|yg@wCCDZZ3II=_IPH?I2x!Jp`K8H?TJY~bZuobSSX}^L}}kuWEqck zLPYq8G`efbwH42wtPb}=T8yxfTTJ;Qp*;ftQw_L20HljSV-aCouBB=rqwa%36=6)G zqlGz#%P3lRN7ouOc>_Z9=5HDbASs{2E11OtTi-Oxlfj(+eL@XkRIU>#gQyu24;Sa} z0Y{#_X{*gS5(jGmR)Urk-Cjn1p`{r_z@dj2eF5fE46ubq(88+A${<|}%vM=bI~|-Z z$8YCR+f{KNb%8yV61LEWs{(^GP=47I^|A_U1Hk?wctIViM~6`{rCWlXA;Y6uTvJH? zJG?`P0wfX0LBe%WV76Al6v{KjF9XnS6mIqVYh0ydeJoKAnufhk=F;pIg zJyqUmTZTCp31kV+TvA}|B!wge6lSoBBZt`vkS8QPP(TrCXoraKNT}tbAtOooHU*xl z2FPflwo-Z~N`SOvwCn&)0+}Pw4gK?DfR3remo5XQBZRaTV7naeTm~%!YHj#yf(%R? z=up0xaz#s_BA5_>@cpg!Tf!J9AcBbSL8Y@?4rKw5K^f?eoOlW742UVV3MkbFB*}s4 zbixB6IYtIC0VqSQh%Lip3J-2Pf5ujZ=L@wR!22c-P-&TMu1#(6SK3N;_6F9N?@qBT z+eX;4;$+l;|Rd4d~E-giI}ih-LUAYO2<3 z4Oh(C3=saGyDf)YB&7FRQyV$DLrl_$X&MQUE4o^&ufyO0o@!u}r;{tE<`|IP@cOGR zKwoqf&>tQS#W!f-Ut26e1QaT$zY*FK6=6a~`6ec9eT#KfKQrZ3a`Pq438?BexS6UWwb9E(#CB%cBsxx zI>b}q?X(28@Jz1?8j#U0m0`ztIy_WouT2lwxT-P zTt$z&t&aq=86k~p?%Sc(TSe^`6xci!br8k63}RiyxA)Su*Qpa4fYzfv6?7bs3c$Wh z%7U8^nRo81TX*3_a+Km!tOWk{hhU(}o;*iw490rNfo|um2~&I(cGr`$Mtb-VTL+Eo zqoU~(LUa|8-j~t7ifBV3(mNGR%To^_g!ce-5W!ljU?2MVml~3pS_uP}kEp0O*U*N= z_>;)7$ugZI5-I`Hq2Lie@$PuzIX*+Ia|3O6V?j5Jh}_gd6d}DsiBW32 zR?V(ZP!@?WkdUfHx3v`Zty;>@Kl>ktKmp<~#_l^GD72Co+LN+Jfh~_Vd8yygiJ}m& z%Uer_>u4S9Z;!D`8=^)|`=xkTzJz*;PV1IKXZM2hu3`FGse9yDYe_(c&P#{Tmm7cU z%sxRgt)=yeu5L*=7pVgDwckhdlc^^My3g5-uQ1kAKC0fWC*QNg-%11B*hP$#Xiq=& zUePlm{h3-p2`|Hhm4U;5Nfr`JhYgi^iCQIkW*{EiFN2<-I&W@ zA~i)WhP)As$xezE^|qA(Y#BaRqFAbeMFHyfV(pQGw|L|Vq}fq%q(eO(snGs+hUrbc z8hVd6zCWAF%lf>XBON1r3%he_u)m{ng-RgfOAdS@Z;0 z&|kQG?No1E=(x^pO<@Oam8Y$v8YC@+0u>PL3H7E(OEm+N&&dmAkUe_ijDkEUT#Q%0 zvOq9TgHO-8M2?U{23o3GMmQ{_bqilc)slZ}k$w^NjtZ>W{d$LS`*bl$br7PUm^o#z z38M2IA?FZDr$p_&GN_JDB_vR<$?yYWT05QaPWI{Svaqe1w>xfOhK+Q#{MK2*qu${a zFF~+YW$&&pW05ui(@}hvnC7?!s9rR*3?M{q8%lc%HQQl~O9+}^;B|8AsXdEl(V^3- z@27td`^wH-kYiDLZ{E6d9F*`t@sS`Q)%Dudi2ImD5G@1Ooq=C%B?>d|QX zK-vFn>b5fcDG_Z_LmmOhkrL7eRnubtc$ES*Z31?uuCKW@DOBN)0oT&66As$aT2i$b zHGOvC`+MKXH8#kRcXoq`Jf-p6(b)a;x`Nx?(WnYMvf+B|rL9j+H1NF5t_0%9p(hfC z@BSBDZNKtX!{R;W6g`I@{W1n=*`>_qhTvAebq1zsms`0(-&=yI9tJ^}4u4sts`D+iSo(PK_4O2PdxuZ8JWpRQpp4MTzovts zOKV&hW-w*Cr&Ll1=0JJ80oTDouO1(ai5}JcpX^#UmSEr05Jc8t zOXsNprL@3jSl4{P_Ln#^*ZsjkUY-8}I@^>`UtkpfLktr#U1s8*8Osz>a-y0Kk$lxa z4#8Q)&o>V5evdVZ2=MYEES>eqhrKXi0Kyc@M*8#|0^0Lwi6SqoCPQ7PwKON{;P(Ln zB8U-6WS~((p>lt`Kr-T`6Ex-i+RGz#zE_Uk)@Ut@8G#}>6qkNrE;mulb2U}uWar}} z({2iT+4I(fy1niC66*ft{>BBKzcC@F9zM+-fJ}{fCJ^>h3V_va@!u-I59y3%6HMfl zIXYIk2!WtWkY3c&+(0i)8h1^0lWp@5f0BiaeR*13(+JCN&q*FWmJz)XA_y?IrG7am zePQfISsad{MOWZprwO&UW-#r(^NO4~p+R0JA3O}vPi_K^aqT9eAj0kyH1p40_fF(c z&17Dn(dYw{d~W{$23&D3NB9)KXU>OvfqL8%7ynDl_>{fC{y!P)^r&~!l4|w*RQtI$ zr+>tk%zBuyV)xYh`Fv5~f}oEe$*R9@5N{kg96{n2c3cd$kBofaXDQj+E6}zB%+*um zsKJAlGOznY2g!q6VsA)k47Y#DjC{&4`@`8|afznbb5RkGERi0m*R98{S(E8NIw|Wn(5TjLYwwCH&|@3SGk)Szzb!+E<^R zFFu-d#COi<6^joU8*k0|{%50V-sN{Iy6zoRESD^dqJK&mHi*O6b3A8_a26a}_aVi% z5wLW)5%G2XpU@rJN$ps}b8DXLeg*_{zeO*+$V+^Jy0)y(GPzuBJ$vDqfq{tji5pj@ zy+BNRSDwUAk%Bsbdy{WMPaLiIb~O@@(^ZH;>~7Qzr?>JQnAIEd+NE4#x6Bvy&==PYR(&zh z>v-)_eqeaa2WQg%_1)%qS7^lGzH{_q)#|-_?hp*VcfaJmMeT~1W6RPiUhE=zAajb| z8D{jY*}q_U9&7*aOul!jQ+demAnr!8uKB||NYTu#Wi6gxD`au&E$9tg-1`iF_y42m z+~ZpO-}ryuyLWE2Rjbx{tJKnIC8U#Wg-&W6q!QNoAaqjefP075LFph=!cr1K2qCNk zDn(8y;E>_)B0vE};bRWEDuiL|-%J}*j>u5=Q+r7l^4w74$qizA7YvRm98dTz@?~DMr6>U+f4;-go?P4GG6rI=t zp3x^?=^w(JEw0*vyxENPt3r8W-dz`=~Yca(Y*gCcL{qLrY z*EQ0Hf{xm*-K+XH$?|%0r7YJlg!S1wqzk*gqi3iw`VkMy^qMmc+#w6UO=}1_d5Uj8 z3KU>Xr_0MlJ0G5xT2#z3m{H{7u?r--er{y<8F!t-oDh{6nw~d;bIH%z=yM--!?Xx}pFL zTAQ7&TZyEh^eLz}hXDIdg}gY72(^G3Ls!_z9ya>e{&N&4^gFz?&wFY_^JT-k#j8gg zHcOm%FFikP?*h+see2!V5*Ds{(Vfj{O27On<5f_N*8S85)t!lMC!1^G*iV<8cp4UF z7R12mvbN#zC9E`lET_fTc%H6>OI@Gs>;)rNY7}WUioAqEf$m?s{+s9J=kXgdLA*!Q z3O@RABiO8#C?q1@FsKEkCE!aIcEM!7M7dJy)G##RG=Q@ht36@Q6IF*L2T|#lKu@|D zhlY_5x*P|j;f^;jO~XDlp-~n|ZQ-b?O01jegSeP%E(;5=1|XK;1T2HU zssc}Z!v3iho>jV*?Z9~oE0iYR0YnBScp}!7QPx=D8`Suj989ECxzi~)Ey-8_wtcBh&ZXZ4c4E&^rl0o zGp&1I7vl_PYY zy^#iElJ;DF9mYQA0vffcVum4ZSmEYbk!BI_$IE$kRQDCpE$6j95f9SLu;fuF&dIK~x1JCeszYZTF`XY(*h ztHx+atx%^=9G+UZjt6@7N#klz#?#_2AFSr?d9HQ5^*y6`^<(XqVX(!tbC|$Iv&Bj; z4Aiax{~Lv$fuQX@p+O3g(Z*Beq1S>6Y#ZQCgVO{Bc;2Pe^Q-Vp!c7kW+AycP0mz*I zC=_(YG{z1YVfgLeM{k<=4Y<+@lKVi*VZaqH*`lON7b8PBx!9#f#h~~0TOrOr#duZG$A+5&9lN4J|r9*}}C7Q71A1GG3BQlP(TJxycb8 z8+wPLz%CKNd7?;6$rXi2tEfaZ4A3hA{|AKi!lob{Wrc8QKa83Oil|t-B9U94c+X&; z9UgGwp>%m)p&e^@CDhF zYhDP#M*+Fjs0?rDqc*_W^FWYOp_dF5o-bVKRJfBx^x)yPR^Wp1{nLX|Up|a*Q&%!^ zant`Jso^MUzAIqL=zZ^5l$IBugMaX4T>AA1R^au3JLUBw5-?GSd8q>$3b8vIosx<% zhqbKhd`^$^)V8*?&Uv}nPU5V93FuVZP zW>)$?T5n>3mb@T73?>(``+IRa6}a*0g0Gzz?T&(Y0L`8kd(KPOF&{*CJj|cQ*wBzV z7jEEVfuh2Ax{x{z()z?6v_c=R)p~v6kAtWYsz^;PzGsRBCk}Y4G$Hd;RF1Yu*zy^;CXTf~F)P|4D8*Z`A`)?)aJH5GYI||Z9g>Le` z&3z)|D;WpC>;7VFy^w(#b`?!zIL#3h6-ITSv{;~j(s5oH+SUuanFAu8;jF}`+(ca1 z{&f+CC?Y~5LDZ?!<+gqUG|C~;?OwHyq1%-knXQqkKObuohJm;qd=L-k%NLSUu~7)> z4wks{B%2K|8L&i~Pux5#+FpSPN-UhZj!WUgWUnWiQ&4zMbUIuR2#n^o6{fU_!~6Vl zQVW8daKJR!P>mSnuI2Y(wZp=2(;8|mF7dM{?LLq=4+rva-t$Nu37ywI^KL`ArAnjV z^(X~=dJhIEu{;?rPcDUKfeA^0#x(3sfzxUV7NMnH)1!HKf(I2Q&%=>lLvk7sfbui1 zSrGz+!%f5YzF};g&^uCz&GY}`I*ahmF|&{-t1yOHxL$C>v5Tq-pzHpkw7o>e3`vFO zhD%#ZEns zoS_&tXikYta+Q$VQ59&cE&L!wfX1eR^9J|B*@ZsCA)1eYl@v7LfGG32QjyuGAWxy1 zXZaWe&-hWO-63?BOQUIOo(O=i1%0bMvi5c8{f*J)H|e+Mds70{_9V(Z@P!+{OHzv@ z*7(BMQ7EqB;a4-PmX|bNf!SpklAVavst}pA3EgNN1*)L%dQn)1YeJjIDpeTnROkU< zd{kfSKP}|TMd?LYs6wQL2PRcF8hZi3ZBiopsQLhaz#eb^6=LuO(Xx$E9U>kD=L5j$ zOsqQ#n?;u@Vkk;4Y+9m3jgK;SDyAvKQRZ04OBCb(Hg1H! zF{~uZs|We1+u9;|H4D4Tkf$ixR3OO?ldfe0|5o}e+7>OcO;pui&mo{R6|mc=7+XD( z(}K(CD9|2`>3upBIuAv3;BsJTS)XX(g*dnk`Bz~|3phImr3)}Ey31ZcXrxqf`=t1{ zg$O=-y&Q@N!zbViBl)1);pZt7Ag!&SN(Q45TH`FB=|Q-Vct4L)xTa6ct0~NZaT}N- zJsGBVt8_aXf4&_jT$N;;Sx`Trqq^5&;q@xty` zA_F|A!Su&XbJ;Bgd40H@Eabt7>>KaD_tZdqcI%7FHO{${l)uzmOF)y3f|vl6qP9<% zvQjW?%|wyu$mzJ?(IpWo6@^X(je%R}4syu{Kto<-J`JlgVe?_JY0W3cA!ymJw`73` zH4NgN5{ML`Dg}NX0zV5h#`a->RMClI@JOO)Q6EBa6_FBA<}ILBhe+IdPI+&HKu7(j zDbk!r1_MHUy2eMo8hILFZVMw`gT^)BKOZ2Sq8mhc)8?}u>i96kgm<|rVFbgCdtPV5`Mh}D~5jyurc`kHG_bb9bl3wf<__Q!7orEf_UlDE)tQZVGS0j zIqlmr0jaRy4--OdHUPF98nbPF;hy36K=UPb<6Ur;&OC~xloNR{q<|WCV7K?797rO3 zku-0kkk|t1vp0A%-n7^#aV<>CklRm7E7?nGoco zNGu?|3&?X9A;2;dhDJ`Y&b8HPRAm%AZH^+)McXTZ$zW5Rw(`_9fQnbKMc9GF1|1y= zoZg2vvB*ftMwzkb1O))zs_?7=={fC~Fx2mNFsVWa9u%7L!a=@Bvyi5`Hbc5yFdUX~ zG0!j2Toqb-Zb4OWxJEdYZq+*$f#X&@kIfU$Hl$$0=12E3K&)UID4 zyt>8kSsK<07`%KG<8@Ty3ssYL^Kfn>iN?axMT*oM!?pvv8BM1?#G#pKbP*7rR{o{i zO7ui%IJ)q>HEYXq_5I8R^+#oM^Hdct;9CQTZUKKs*{td=|Ip1dU3ucX&Vk;Xi|>LFKEdE zR4s%+Y1T5K&ZhWZR*gsD6FRyb#wJ$-%*JdD6Lz9oj{Y9YeR9G0TX zKzUay)cAbq=!(7AQw|+@#|r}T=ga@QGwf3YE{go34s<&h(RJ17;1`h(T-3nEam=y& zCon}KL?kqcayHB_+>1oiV`Z|}oC>strfV4eJf{LjQfIam3Hbx6Dp|9#3Wm7U&0ZO= z7+jI@ub+uFbAC3kN`z6P_}Al)J@KRv{SQCtJ0F89JLSk9a4g{#lphVa<$Ot=VLf&s z{=u=er?a+(n;29sF7xG_dZc5=ALP-{-21vL{`j1V_|7O{`@VEica*e%Ztgc^|{`&rzyyc%?-P{e4ZS%A0 ze2w$k7CBkgN}KMNVX;aAQu`D?t{8x>Ob-Z zHLQN<`@~=Ag?@E;KjySNNbwKZ95Ry`*M&Cllu_4|V^#q0=-@iV(_V|Gf>0`$aUO!VQT@-L6j+0KWOEQNjk~JX8>93Z$ zs`g<2TXYiFF)VCJ4hF>KXoS|PaWLPtj(Wxo*RK9+=sg-{z}8Dj(EZayM{D{~)_dn( z{V6~EFsi^3Y4kwl35$3@9B2C$@WAF`>^18JLp-h1F1I6s z&hLtNZYo{%s20Lh+>fo^ckZm#qNL`XwP!BBNPltW%0HqF$~SsZd%bM}5_T<}@k5jq zLX=bZ8>X=PllRGBU9|qc{1qgh#A|T{`Au@>gCD0!O$C*~ zHS6lYr>jGEF!lx<`&~V{cu$tiQ1bWh5T=!RjM}tkD!JiSF)yxs zyz=_U^-p2XQv{$tr3--m>r)GyEbifPG@NHEB(Hq~taHNmZ`frptD2y8H9Xc%h*tmS zo{@V5&bkZGh}EHY%#zl!#5WS`**!bf^se~&z<-OK(y#sVt6Ts52eIJ)reBW3Ki#0n zve-jbzDFn(Fyv|mB4@=%M>JjXyvfP?4@EpB#RJ%;Q@sDU_kKB~-e~7--Dv2lHq1Is zAFE9=|KI{^;_o8ASuzk?)P)m?&SexA;2m2yA7(5}M&AVN{-a6PJT%>Fk^5o0j*0<9 zlvA+QU2X(u^SV0@&Rq`);30j3v9Rn0G>wg9#<|~=HCLD)!`a}cV}QDB`8BU78Glpk z`e&!AfNnoF!JT5nGYbKyhhjm8DT0O?4@Rf@r@B6#yymBI>p^=NR+=`T6Z}?7rS-EE zM>(RU(*~>l<&$?QhDkqUUL=u2nrG`jA7-zx$86L~u8l9U%R8x`4*COY6&@B-f#rD; zD9N)ysG1+7br=q^)|}PE(SXB+VK9Elum?#XN1>6nvj%SpmE2pHEr*Qf6QzKlLR3SM z;8*)RCdJCURxEhp>O;(+I%x|g1QT>HS`*@;gm`4wx9(vx$>>-$LYOhSGGC%foT8er z0Z4_;9Ghc7DWk8Artl?|3(Bzvw4lYoYlZ&31N}AUQqi(&Umv5UsTR7abS`yz>UO7S z9}tTu=b3jGDcf*bEpihzUN>X7OJy;SPmY$rOXE<&h{PV?dv#ZRaxLfYN3(-B4XncN zz3+Wgy;?1mrWjfr56+ZM8eW@55$n{8vllaP%e_PzC8>b>bXTMA{Oe!!Z9+As47HpM zt0c0}=6DmsTYVyxlx_*e8gYT};#NeT2i$z zuCGvv8R~L0DGbibq(H&47+P2u*FxGLntP`J7X0Mu@i1sXW#GBPLKXRnO<F`AVXzJ+13O;{HtR*qA;H;v(fFL&>WtdNk9E;0e} zjTr!-J1g3tjn}RAL-E{gj?sONos9OB;mFK$5G!@l{{XAFHa3RAfsN0mk+l4TgI*uy zxLDR=B1=ft4P%q$d27+ssPq0s^5c(PlPsGQPx72lEe|>+25p}(W%RpN{%xHE7F|8# zB1}d+a9c=?MAcCbBa}UU$NZ#`j0BwU&j z?dEXT-msz)}kby8o{&th5USR5a@TPbYR63BJ#8s9(Y)*E8g!?nT_Uzi3!MtwAkD z5@X!wwc35|AxWp5ZE#0$*G<|`nl~5oFJtzX+vGz6r=?N%n|zIrsZJOhO@ZaNEI=)f>>|t_ahpMDS0gJ1fGtZr9uCplyIpxAMoW)P zo7~0|Vzfd_1VS|dTipp>-odRO8e=p;wmhMgqxfmm;qG#Y$V?)(Y5`O##Mb!k6%Lxr#u} zsOhnv?y~Ilu<9LKjxa@?#nfT0b3O_vf>tKD2UQ^_IkuvEDH_n30*v{{yjJ9bhIFW0mwcJx7xxc{`s)U$_5Cxv zldIJRqX7k$b{i;J3!3wtPrY`2e#iWehc0vMwp?yp&mCxB8@G+xdWl?{g56Vkw2H)5 zd_$+sZf3j3%HbZjupWA=*jB(H4RarjK~`w)o*hCI?^G_HV?B*P;H)5{GF@q_gZV0hc$mAdlzh6B(|>Z<~-_Iy?VqhQ^;t8SSg_0 zUI4F{99%oHTrQ$e*v1!{7KL%}u8{gGWs?z|YgEU^jSHC)k3}rGdWT$PUT7Z5h317m zJ`Hx69Bbz(Mu*3^(8D@kj>zz=NK;mS%vKugTgv{&P5`RiIlNrXB}h=Nj!;1Do~V2| zv%|woAUv>wL-Jw-`kO{ZG@5ma-CG{JF?)~?)7sO+qz$2|%CWE8>hdUl z>xj8QD%ajjw|^ap^haUkB~-y1c{kTncycPx#5NI~(rsGA=Mbkrk83r|Hpl`1mbao_ z>=1H-y0x0*1O#1l0J1KXe{F!w{I~-vx{O+4EsKnG%({#{N0wfwSv%QeJhN#1VjatN z$eiCrHR#IMUgV;j@79JPYZzuyw2Wds>{5iwd%0*5uh_{oo5VP_%S*Gm*)GGTDp{ar{|mr;oNy2iqvo1EHG{Qeoqe9%};_V=YgvYJAe$ ze0#8Y>xHC4yT(z=_^z8s8YH$uCuA1ZwMYiB_+2iZV%!w06)8-Q+UVNbZM>{UOCe`? zozNNXUSZa40gJ6j7TQ#li&?T30(&kxVNHQeB#?a*49LXxB)BQG`-V-ARvTMMLZfbm zb8MzP#*00yJ)dvd1sE4W)-;rJ>tZc45v+H7&qgC`2Wka{ZP5$arErXou!)gINKx5G zf+Zv48{fX!v@3DVBasX514YoyYLhQo0GV))X&XHORquFzTH4J$`zg-<4i`}kXwgv> z+KWn;owla3lZ{||C-G=l0m)TpGYZ-F;+Rwqy3FGR0VVW7kk62gV)HUrE+JK)nFu+( z1yozjapS&qn+EHyCH2=?hu3njlJ34s`>#4-2?~zqh=;oqq@qB`#ReKu1y*n0$zbnM#QgvB-`@9_g_UwF4!fu$EMWKHAN(U1ZdEKzY^}t zHy+E)xJItx$9juc^IM%~P`A6;niX<f%!x;dF`T(pe8?Eqc7zT`c<-}ID z@eGH!MUL%Vg-(Srbgiap39=fFAB3BEY)WJ*W(mHD1*i+E2^pR|YgP;z!(Upc>axao zx=XE{P4NV7(y64d7wQjS!Z)_6MJjoYLn3{_HVyqN3Do&mg54lr>$HY61CnQ8({Nj$?9{0c;|rIE+1D&}et5qV>1WSF_*cf9hhI`-rNrr+0ppS=10_mD;npK1Z%+XEq?Ese%jMvkvPNYbJ-#?zcruqbcRG} zsCKq0viw|RnN3`N5OXN8()G}uWv4Hcws~(bz}cO{JZ{ZcuDM6Wez?Hz;xdazD0bK0 z#DTl`_T{I~Ir+|c{#0GDGV^qOk#oXay}4_xn?ZHW_o1Lc|9(x zZnaz0lj$eEr`PeiW7gbvkC)H(cAu4VYwoV{dhO^74IFXJSd`T6f%~42kJy-Z1Y7af z-b)JFt(4x)^f_Vh-G?j-_;4|#e2#a>G3CAEnv6?9YubYkeGiWz=yxNFN-950W(!{YlsWB`0^pE6=SzAtDHkD_k-20L8 zIBV;RA6s8%ZTs+J+qW#FcDF;>sVYBHHM7(7uWYs8F2us|*;yHlOZD40f84(2{K1tP0?(Gr2!PJqoPtB)?<6+G{`W_f1g>J10I zm~nCq!F-`uP_$>hXrG`c=4bKIdG(h0lG9FER$Y5~oJ#J^mp&Ghy_he1E!g{Ee(yIy z`S1C1D5pZ@SB2)Uy=yuo2X_=$t%y3o(e2}8ZkgYQFJE~m<_M+ixqL}z%#Q;ZIXvTE z61$w5fOO^)uAZx+v$o%H<3McUlE{PoZ>RjaM?=(4mfamikfb?BEWRJKxLWgjMeq_u z#Hy>OXVVP}R*5JDn<9PIoohGU{q=Dee6yyqaem*C4GYINJ0870cQhl{?*wR3{VVFw z9yHrmnNH8GtS_;Q@hJz&xFG|Z*uEi>+a7-~>v!I*XRq=8kJ9`t_uO6cn(W-Ri!pjB zT$?^2(u=?)Y8vMUz-xokTO7D?Z71PY6`&v}q=3g}lOM=c6tKGur)Fc(<_@+R6;z*L zpQRR&XRe*Q{`>ld<@=$mqbhkfu58z%0_Fz4W&8R`EPXtSquGx1Si$Q$_>+k{C}9$# zSup53TuQ>0u;DG+;47bD%&ZWn0Ms&5aMX(`2v|MkkE&b_UvlYe%pW*$dxxeFgt0eX zmU)yFsr5v+)7GDaW z0Svn6`1iBtu`r-c77BPUP_YZV-C#rtlLO?oC(Db7XwYa@sFf)srn0yA<4kIL zY{S62!RSr(JEsrb&}4dC>Tnxxyy?8x_vInqnx_rce>kT3Vp}H1NWeBuaV4NR#5TDa z-kazL5_@YOHOlc*9HUOQF%{0UX7i)!h)rxw7|`N%5v-4cEph_TedH#xEO@6LsGZ)k z`^XZxTkO;4hcIm?lncKfb@YDz2i<;JE>|(*2E66iC{uci)kd|p56!*VFfuugtev(_u>mm_qoSKQ z(w?K4;D6X9=f~VH%|u>vBGgbgZO#axu-2xT<#~8hrySCYG6M_M zEoxHV(m0QjruEme*=U3HB=5Ti?ONralp4j|ds};BzWN>79u5B0ymkV{`DAL{r&F!n zzt#Kb1qM}pCS|QwdRy8V@kD!i4qU`6%nL9G`@}};$8f(Ds02MPMwc#5q^&aa3mG=o z=8h5)^zF{#n>cpB`S==wRu>?ScknFiSwHLKS-&2|s8q4aD&ml}k}4`6t~T6Bebn%^ z>uu#C66}BNRIY2)V}G~5)F-@Ei}uv+R?@@i1IIf6}LX7ylx?sv5fgDugd}d9_)G)T9oI3)V@3Cx3h0(6SFFDF6v+s4eS%?!u zq`F$+QSLI&=M-ooeo3rBDjSymkSY!4hBsy&+h~!P{_|zsZ=FqR1+u zB05ULWS(74j)#*TQa1}g;VsXjN0kfvl7F6f8uQQ5|CE0}XX^e}BtazfF7ja*E6*c* z&L4)1W?)EP0pRFzaH_v4zjKcqPj3@zkIN`;6{{MU3RrVqZbu#M`Wfo!I>kuFE*Y*R zB`R*}D0_P|emtH~%SqIPzkBZfPjeDEH}zh{zc#L(hE!#a270qIc4WMWY((Lx(OJkv z+vKx|FT_>AXtIp0n#@KU^MpieuWo{WO*g4mlHhhP8p~R9_vcA3tbGyZ-`vqPE0yQX zFRL6=Cxm->7=1McOVOxf4xqxb08fRF`E|CqsieaR;SxY6XMMlzBbeYYE2KsY!-n&4 znPt12ubuY;6Q7`K1lSTBLv3m`Ks-#wrDOPc~-^nPkekBhi8!5b+ zWVVox7gwXY4ZUS?L!EDG_tGa(tz?i1K(q;>M;Ln#o<25V7LycZj#?w|aqmJOVy$QStsw>+Z0bS$vlVTm!~ zja=xiKAp7g^kVVz&?|SC>sGCOANelg*=4i`>?&iYs__Akc}!iXHNz)t2b;{j;>YyNx>T;UmINtL6k7-7)v)C7}0LExqW8a z(EAM^1_C;^y1ffNL#*HUwW{N;)@OnGRXZOU<$7uQw)N{`HyoJ!alAg|ZSJ{4k7tq( z9{;v6#OGHL6@3BM*=2^LQ1bi60=ogCEOy;K2TrTQy!jl0wrsT8cs||!^wrkw+jr*v zV|dIF(&Q(t-9q!ArEcrG+S!kGThJjM*njKPOxxe?4SfB7I(9sli5C5!tR#9?omn#> z$FF9i@J}d0_x)|_Z`Al+eE;M4i#-#&gG+;~Hjnk}_EfCb!3fV2AK;X3hd_MRor@7j zz{B3`2-ZQyB@XhT;LLYwS;Jx@FO5ArTkZG$8c)dc=921$#pSz6Q@T)GpXXb-{%`%L zOSwBx_Qy|d3#3RKAJCysZkY#!8}4a7=8Ih4Y%G4JbN3ZLa430~>4TzY@zk$__o?%z zjDOA~Z20F|a5M!ncLhe6U|63%B6!n3C)+_w2j;I@_ba&I?$@Y^B?B4 zk3%t82852HeTx#{>>W=&c7K=Q)Sfu@jof$e&gOx-#OC`JN|vzg#SDrzO~P4?f@(1| zk*eHf)r!$B$@W>~uOL~F_^o!i;kAf=^#5IPS53b?y%^nc>8)FB7mf>vC`B+B#1oQ9 zXGa`}QF&_xB8v82A!ZuD7R87lg!^EO-Z;rAYbO)=X!n_@1WPX=fjHbja|E%w0Escc zFVLE%k6ms+8b z8b^KSxY*n8T)*Gb#Xy2Vis`S^)uG|H+-UVEef=+3Q|piWKIewq?&#b(%6WFs3=RUu z6nEXOfiRghfkq;j#+$a`D>9=nX%Zz^ug<9~vxWdxTY)Px5ON!wG@MUdO>9p6cTnZy z+p6{dEexRwmvv5P)SP{@y&NT8Y4E?vLC+7<3Am2MMPsh+A_yo@e8cSx*f^R2_Zo@VQA`-EGOdbfxnM@eRSE$jYG$%UNxdGV$(&?mQ zs$tX*{*rXlg~2n}Wq|qsLwjHiVL_pHmSezVkSPuNi#Z#12~|QAe}+GQ84Vzwn6)1N zY;4QGj@-R*>I`${GbMl4N6yfhr(;85+yb90fH8Lx5ELXPgpG>@l8ykN+Z5E|50&6B zbmW{1>PwXk#85fLq8BkfLf+}1#^*$gC(hLHVF zMbVIhWxNcUWmATQI!M}ZFP*RnrabA==~QeJS>TfSSOhV6Zw)?LLH;Axr-GCep?)(! z-Ye9-NyjLee_JYak5g0?b}E-B-KAXCO`i5Aw)RaB=y;>k%D0C>m0phS?1a&Q31TMj z(R~|mr_0BWVKg&gSlU25r2xOe)F)9I*XS58K6)0`zpkJ>iqdJL8(aX5oI(AX9vZ-* zPDL5bHpHH#8?=K4^eEgW)R3ckqB$F!RT$Yv5kusdNCi1aWOSK9S6=Ee@?#k0MyW)| z$QLFw)cCkxa6B>%EDEj)%L_gftCj~R7Vu*(R8w#th9*T zTwkn*>oIuMWq6^1*lBNAGwVJdZ*VFKN{uoy;SicGV1K~CsJeeq1JRRVB#2Vs$xRARVbN8E{zbMyeH0ME(07nw_zJDU2_!OYw2Q+!)PM<7m}sps6~^!Tqyb!G z6RTmf%@1`h^X+RGDyw@rRe<^hj=EHiidH}aU91@)?JOUMmFwdbYE=_77rA!H1!6^& zvn0u~a3Apj5(yTPo#oKtO1wnY+Im4{W1P|;wu?H<(749;?O<=$>(-BsLgVR6MDVFZ zI?~WF;7=G?P7qz?x{?W%W;Xd#nnnj5^FxD-2Mu#ME=HBY06nL63jOH86X1Zw6fcn>S z=nh*4fBVt zZzSAW)$Ze~KqoK9Q;`%m~g6S!Wucssz=ZC=d_gkthF_Y0xhhaj}ly zwU)u;zAkMwP`{{)nA~7E|5iU5B>$25*wax)d~j+GQG?ohFbvKHV@zOjN`wDFHr};i z>0oBqOW}4d8vTbJSlyues*2dML*s%xAnjjl3V%Fb%Il8<`=3z9yJ#dijy-{S*~L*~ zth{v5a2H4GFI#^Z`1}Vud~=sz@m6xmKHx2z+TEaGz%dYj3%pB7p-*Ez4yjJVYD$Kt za-NNL1_Jf`$U63SmT*fsp0x7XkM(N88vbr{I>DRpwYG{3_xE}Ekh;C z2B$A=V#JA}`D7)$h|I<3^s_}i+sY&~TLKo47x0gy6FC$m&7z3fqVHlC=Mvj!~22 zBIH7%4Df;h9{s>3OU-|l1$maDD2km6e4vPpC?LsLHWJVvFCeiM1!jRiTMs}_W^q*6 zk%+lg5qoU_Kd1H}gr?(|3Fk5$*DcWzZ5^aGMQJ18WZN3*Cq;(7f2Q}d%zfR6WA9Y& z$qaKiTbEs;4Wp5?c%mG8gr6NJgXU#~$PDrVfSoTx(fFXB0z|wiQxwRHj*e#I90x$= zL68LypC80$>F~C~sADj$9tP)O^pm&X5$5NCXZgmrQTYmCI-L*+6V%wC8hwwE0(Stw zX3D@!c`6fuEXjk*lmK{40@m|E6B|5DhQ&PE1p!Vv+Zi^EiCPsry zHt3kr#Dek7UI&lP?kS5w#ruM(-izt{n&1Hx4LD!}i+ zT5;rc?ZeBhH%4(o9lp(Gq?!!7pTxSy&F2fv>W*z$sIaE#zUQk=)5*3IpzTm2CwIa+ zsVRJ>srcZ{EaiO>=Ir-7z7V!12!5_J;3Eg$~a!+2jsx7OwP&!+L zkoK9Do_tt${vh_$nBIlr{xk0YiX#X2HvBZ1skyG8DKYwyL0hBl+MkbFFL(IuFF$kJ zv+YC^w+a8;oVHNruixUGD_ib;dN@V4gb(Q-x>CSBW2)b=0e9k^LRC;#T(L74Zi7(L2;*6STMd6D!%8k)+lQSy-Y1 zoc7yePLGV-`~8@HXE5>f*%u-cJ}|EU=xm7<`%NZYYL3tGpTTUC+dV%HSj)z>890F) zM~At2KtTi@kjme)&k%5ap*0N=c8E+!>0w70=oALc`9E|L^)k(hJ- zwr}UykUyUoB)^nQAClOhnx{Jx6t((wP?=X9htv1zE|*8pw!EvO88q zeMR-BI{(yWc%vNT5FgG?&ACYqizP${7rBEGLAV_)DDTN06>eHUcRR-X) zi7vCVFiu3nroX(qY4Jfp0>1sSWQNr*&{$a$D+pREYGy7L0q;G>beA1l@d;6J zw%``8y+30)|8>Hs69h#3(baI@3i`_(zl$@HEO}%5ZP;a)+@CXtuYB3~&%Rw=&)Ig* z>8hiOcXkcxDz6j=>FV)uZquy^<|L3J2dw1;5*ycS2~^21Y4h=VaJIPuU&CK@E={{* zJ9W*~4+mkz*Nz9@HZ|Wp;BW?4&)R@xJqocgyJ>p`D)12*)%@c`~y9!tr|tSuq3k z-WQvP4moAKAMd|-;=xh2m}uzJ-g3`z%cGXSebTa8`-96;6zofkbjkDJr-z8W|zS1CWe4WKl1AN;dTjFLfh zMWoO(MulHcfmgGCDbyj#gRrUqMWj~pvy@fFDT91rk4m9z-#zM8M^m}V?wRj<-N$%= z1&ryr?gGXPaPhX&)7i9pu9dUMCXzYN+}|3bk+CYiGvy&<)Km@0wL|JtyRp)m$M=u-b(zk)_RHA*C8u1OVLBgrE8R1A2%Bi89%^(!)UQi zY4+;`J5g@qsXvYtFh2gdaJ$7!f(lr&m}>9ivX8IMJ+om-rwgLa%05^J&qOy?ztkPL&}OJvhc_Rk=OK zY1Z3jKe-3<_NKva9|DxB0POEmC)Mo3@-+g?!X>YL&_P@7^*jyFv-vysM68l^H7ViT z-yh@I0fq+Xlnd22=0|e0ytLaaV5hS*_=-_uOJliPXGmI+%eBa^UdGoa!2$N!N)~40 zj8OIN$EdhAn$T!(nksv=d-o^>m*Tk^1g8mc$if_Ho_`W}gfY6p7ZN4IAkBas{;Oln za(rqbZUoYwu2J+yW|LF-ljMwA96lT%ys>|P*rh;n$GRIPdS8kLt{xffyxVK;{H1u@ z*TbTuf%>(7t=n`XpvvdNbTk9R!(AjcfKr>MW0**Xsr`*eXGW1@$7>|>08e8cfXzqV z*>a@00`sx!UIXYLc=c{wIofWLog`fmuSP|Z()C14HT`2 zjc)4hOnl@}sYaMwZXu_r%$kd(+4;+|BY{!AVBw7BNGS?${~ z+EB~tyr99wcZTvA=V5MQ1+wjM)WSLz3f_*9 zw7NZ+2^8x#pY7=mb*ojop;MW@ff4Uc@OCm)W97p~a??&yhfal_On6w9`~5WkY2un^ zsZw9M=AMDr>2LmZkLazL`u-EH45%KnCCc3jAT0VCa;<0U*2KHMuio;Hkz(22qe1sx{kV28C8+}qU6|Ww<8Ywp za)E8A>7xxbKZ+S$W!qNj>IY8cKD-s8G3)VFMg9NKbnoFz{(tkgNLhaM6dB!H%9gP zJ;thFigLAxx}w3Ak=KtsTR7laCnx?#|C;^( zwxV-~ub=oeH0AsE_Xsrnoq<_C%`*5SFO6(&(7it$;`Qf&sG|9_l~Gz~+?YC+=ByDC zahZJm_aia+s-b)Rr2DGf9$~C*P*Sw9X1s;5mOOhww(MiPbLbGp9lGqiylD9mScb&6 zNQC#tD~^rby>s-+(_DE3H|#TptMV|kxIV70?ZP(ck2!- zODNt?^yuAzt*<_<-}UFko8k8UlckyFFZG}I*F%T&qqIw#^RCxkI$*sSdO;V74_xRS z*iqT>BK^g}dv(8Sy;hgM?`7v}ZnPHYIdpw(Ft}B=S<yWVL%}&$p29kg5Uxbfb zep&x*!F;%FcxT0Q{?yp#-NEhu;-U{tyrKEs9DCN~;MV(G!+2B0R#`YazO?yDtV|jh z`8m>aWA;A6zwkkK#kYAHKeZFG^a5j_B*^6o?C z)QP>=I8S8I9~5f)l4FL}P#`>QXVk1nPe{ErxBB&V$Ms%}Yr^igTTlM|R_o{0`Kus1 zjg6$_vnUKWBYb`i>YU0OTGh7s_|g?9d^BAxSb_?gT&>L2ZD^M&c z5GlpNpr(}q-fGru6d__n2yI2785MlvDr`+lB62BX8~{(-6)*toi7Ps;Q`#F>4$s8@ z$0{9hL>5Y%?z0eZTuEn=_=igwqN7X1oA# z@;(mjBWCAuBHQ9BwR2P{zah#9gb$NLyKv<}ILm%_5tN&`MO;22!!Cnx&y?hTDH5QQ zpNp`Un3O|wSZ*`;$|4_8s!gy7MPl+R2;HC{-{7L(&8IhRS>Ay?sC=$%F~VS+Lui~L_A_y_ z3IYehK7ctlD&>om_5wmrQV9$NXtgu1Y1hHbqcI54zMC{W%{rCid??q0mm$G?m@|Yi zNmv{6;$jCSq_qmt6)Ix42BAn)RcnUGhe&-)+(#*4J%n|0R(s1byFzPo%;_Bw_9sqV7J#y{no^YXs3lq2`B3MJXQ3>(MH~hIY8$Oq|hDy0l zMK)5&$DyhrDf&D_uAx@lR{+)`U_YDOm>n9*Ja}eFZsYIcAwj4SF;2D`@KvkT(Y3sO z<3z@tJ#kJ*6E04vs2CL^Nea>>IamlBD^ZX;6y{?h%5NsoUT*e+MfvX$!hwtbBcjYn zNH$91A2BILiVRjF9O>He*b|0JeX<6(>QVEj^lE3$J`)1F6PCY^8p0)V$aP>q0twKSr-TOFMob= zk!yKj@O^=vf*U4AMJiC_Uze5oSH5|wuKb9a;jI$XgPZEVd)KMGxO(&ScG6!7W6#RXQlLg@ zslCr|N9v{n{Wyn+%}j&qPF~kt)?RnpbKSio4Xd7I>UGWcZ^UMKW7gco!K(8N5M-RW zWZco5@aVeV-{xgn&3(*fn|sZ%TPk6;G`_=U|I(|pq~_HItxJxytXVKwYeQR84cb0+C%yke9Y2@8Yx+`VM_VhVE&FfVbU<6sy)#%b?m`ZLR^aY9Zl}cV z%a2Hm?XE8*v>)1I$zR)&vlh6^Tu)G?2^lL_-D^vz+>+$F5quDT-pl>Q;f|Xd_&z)T zQn4c3h(xVruiA5o`rK*i(Ux#+2yjubU7oMF<9bsQy%xU`<-*RRh?e?`z~e2!4Jf1& zb9ro4xS=>~I?1Z}?9GcWZoU3`Gx_Y677pxH5c{BxXWvez!ymk6WEY{+QG#{iqR^s^ zy%!=}4@3FOhmf|+py8a`q0y^6 zMJT2eg%FW!P&Adk6a~kKJR!gXKo-lJ5+OvCV;_=37-sbMZ zJtlQck!<2!PM01*onZx>Rg!zS=pZh>MT%S^!Yy@0=F)N6-_Ws=?4|d55;RM+sEB$x zrI!Vt4dDA(IKc$kmW%R}VE@%~_mO}Zwrf=7 zBUt1&639PI9X6|(T+$%ZaTy$?k|RPSfF>6(kldM(nAu3O`JEA3as)gv`-D!6k)ZM* zSQx!i{TyK;Mme!@ACzz`24TQ4yT7*Q6o*`_AoeiPRthT5F#c@$-OsZs&5$yY#?`HQ z5NbhAxp!6__WJ9ol)BBp>{rA`XQu+-*sO%|1E@cpKNNgu$ONWGnQ94Qq$31e=E+}h zaWgR6%E7<5h_;u2V{A1Fd~Co4jJZS&J*1H+{LkO@K~IOjct7&sm4EYAkKm}iVUa6< z)`ch76H*euLF7~AIzRB(9o3JA(6$^Iaeolw9F}UNmLNg8NRf^rcbGygmXPlOz+c(@ za4B|-1z1vp)a2k1I=NMeGNvM(l@HfjK5|KT<_s=g@(CJmQ@hI{rp-R0`Xfyg@YAUU z0P;goOTvu^J)4g%V&|I8rrE01r$`Q*|3V^}3zNJ9x8@bngBP2D!>?f^P{6F4R z&L&O3wj&i~s9eF^FT0TbtaYoFTf&i-XJKC%S0N(p{Rru*hy1saXf2N%K7@NmCG30U zc>ES3dgD-4LJ*OC?iro9R)iu#h-K2}C-#$J2Y8G~Tqi~rib$0Tcux-~WD(wT)m|}) z(F&v?tKfRV-IjtEfBx0XY&)_spD;d8-0`0H1)#LD0pH~XI2Pd#^$wAWN5zv)WDve7 z@O3kU^s81hAhHHO$0A}lC^4JJmy&OD{1jW!e|Zz`N^p#;7D5L`kC84(QLvI( zEAM3NdaWDs?C-7Dsw?-XU)h8ffO2Dw9HJuYRoT07vD^JAzgc8JjJPf*|6!58D)5k! zsCFD-B%KHgLaK=XjC>^cB@O~ezeOZ;17VTW24;WV6(F7qS6c)3MWjF$e1RoCr)PPU zzfRPjEE(4P5UT!*GpVF!%}XZrl0Xj#$Y&zMg6!i%(AU zfw2D*%8_hjga{~*W7RmQtCz*FC1X!Vd$CbLbks5t5Xwb)u1?n2G_$_$weZBO;=vxR zB*KQxgw8aAlB2*~ZY4qhT#bMc0TB{Fj|qI641>XXtQbISynW8Wr|E{M{#yejuW6g+^Py4rUVbWf-VcYSn+Entr2Fz{X96 z$u7v|9bYe3f1OD@c4iII^Sz$ z}BK#p>F&wyiQvIa=+lni)$u~Jekv|7ztB%LK zj_+mbh{315*|&p{rNv*@n>aLeu^WPR=A_JRJ3Xh1L>@SN)=9;RakKih{r1hNe#|D0 zXqVrmyXuL#KjU9U-R$@36ppx-EuN2Vh$NxGlZTLAir|dJAsYukQNeH2$=|}R-&}6y z5qie8%S4~Bp@F`HC^rNTQ4Z-`3gO?s8olV}Pklg64Qh{2$AX;2O3CX}C<5hF& zqN6Jn8fHO5o_!L$)R0?EN>U-oJ`m5pA zn(yrHZ&1e{yW6+lB=p3~_TmnvhIt$pZo(80b#QLfKtZLkP;>pH;ze1?yLaJiK={T)YxqzY-1tn2>-KC0#Q57+5C_wMQy$oN2ZM}}6M!P1nEZrvC zD_eLd4d6uKpRd?(^NFiL>Mw8V4I=O`$WoFydqZgWd56Nuo&cAWc<6Vf0APtZ96QEs zOu4>%$y7J9L=Q3W{zU%3U~eTYnmxh88OC)}cjPuD3w<~uIub*d11PFQcEC`JjZ5aM zjW4SR`I$G_ylRCX+V%0#hmaY`Blg~6WMTG(pXw2Ru3oAN5o?tpj5xHu<4Kp@Cp42z zE0Yi=x$=4(s$9YX!F4bhBK$LLRzjZaZI0h^<YZ@Jc zNT!<~PwWymticzivDB!`R-UU-EvlY3udzLytBA_5c@!NjpoF+56?-@fNN!<$S6pM( z-v9I@)UfLCQ;}VJedU&l`eeLGVVG$#*=>L&)Y+jFSK`Y#h!Wo%aR54vz%mukFz;_n z;m`b#inf$A1qgk<0V&j-xxX1$KjQQ$>aK}kh=yWAtNF+_;|s*X-RRwQ%6hV zf(CWSAgMFAyE?N~X1>NnK}${$$Pt$g`28SQ&* zk(49>P^xaQBF4~J+y|2(6rDZzPKzzdN-!hni@861iJzfXpoqELZU>t%H0v~1Yw-Ue(rNv zn9%DUMYwyKmTrko&d{z((tlD@r3PzdH})3k=F$PH42U{CE&lggnnSoW&}3e+%IT&B z+{3H27-2!@o#eAxX_p_ETZgY8TX=*ojmj4GO;60ZXasfs>`^acqclRD1U~biK_APX zkSV{&?iFa*iv4xkM*FgfJ%qthcqC9JB-fx3w5$~7@l6l~)vezeEz>Y$p#q~N1j9-G z<3d@njwHa~Fq@C^1^5|Sr%>clDIADy5-?ZPnA9g(Jh>5>V>x@^=mO4a&CasWc{78A z2TKo86<~a)fVNuBv*ODT+YJSjlOn9;>>c8w)7?f@QohX)Z~wYcF~$|{Fd4b=;KTzu z##GYhQ(6UJpava?c1W9ewZi){lD3`$BChf7qv$NkbuQL1npLD)G1-8(vfgCoag4X4 z^-*JJ@XY@4HEk6G*OP0Mp&*$V!+X3Gn{Qq3JzYh~;v~TEbqpIm+xk3dua0(PgF$?xe9#y4g8s5Trfm+&9w$lx(PMX?Sufb7Y| zZhQVVa&=9&TB9a2VrMKzW|tln>=pkoJC(F${?6uS3Z@Bp()G6_C}YEm($%*t?V=j| z54UfinxK*}ut9{%PA%QBkW8>~?EKOhIhE(S6azIeV`VgUr4tOdSPA0dr<>6k@v z{w5q?+&E4_-x|HIj@%8-06VX%@wQ2a^~N5mo<8gP^-e8)@q&>bRCxWWfL}=GgsJN_f6Zf;A=;+ zPFwD6`w!c~7=c9=G*(ZxX%>-~L{2E0#R}W|z2emY!+|H59vSz*?pUg(+3D*>rj9$0 zl_$#su7%k5XIFpyn@nqKJ@4$cFGIuukS6Wm|P?Rka7|pV<9_{~kPd;Hv z+8OZgj%!xmCwWC>?&z|`r7yy$sYk{}PDP$NzxLMF%q#Y!6W0Cu$pvpKMN_S0)8S%k zmSFiRsGznwicF=e?^yI=e23mDf0X5!ouQ?#tG_9ca?;l5wY`rULR$1&UTrN|Vi>&{ z7wkC7{9IMjVZM+v$MU}SCCLDT(ZW@uC+(4XM6XxBLVj=U3leDhL2q3eako8=Q_HV@Z5B1|k9L>v z!nXaPJCEvJeer6`dh9v+niaeH9qaO*?t1+<@WGeOBMQmr7YiiD{lJ^6vdY4g-Ves6 zh-4SmapNEKkH5YY1f1SaCB!8%PC9qJxqc{n27D)QNqozrmqMg@AVC0ztp#=H)y*}2 z+HuZ%6@ZZK^!cx$O5sTtL^r)+m7^Ko5twz2%oo^`x z@T1_~(XNw!rA{tACxHWz?%Inx@a6-;c&H~{bZK-(_)=3%Z&VNniAMisa+2CYSL$;zq83V#S?)4N7pUwp+3ZwytZ}hf7D~*>x=<&+Mq_UmO zB>!vgnyCib}p^Xdj z9|8!^m90*7hAMo_3lXMQ8J>2=HB z0^XA1wkVL0hS>lFI(AA{m-iJe_`1zwm+3Eg&H?@r(_(iYK7i{_Do6XI6>XCjYl$@A z1cb4e2N$=|MYycAVvIHawQYbghqu$qXG@R=!5W}3i_+=(Ry900e(g`wTAaqyhxi6* zN4EQ`A4ms?QUM#lhOwX^C1$AtjLit{coX_h%F-tS0TkUVa|RghfZ1JAusdLI!SMsF ztk@8{W*!2dFh*`kexqxAa?ZT~6etWiRcq-b>=BwaE*(oh1qyvwS&Y~CR8gke+)dz}lM}>ZTVe&NOM=RcL zjml6KJH+w!{TLeQ>bRlORp*xM-+KyV*3&0ZbhIU~pmuDb>aPp@(&SNdJz%aN4$IJd{-qPhx z1f){v(Hk6jrl(5Gt2f84ZUhWRK|SiRUGpWG9CW-KTObmKixFvZVMZFbl8eoEzqd$) zSa-%XVY%D4-AtDJWWGe0$u5$e$7Zrn-q-knVZwx5x~~FB1|FxKVZi^u+)>`vcTbVq zN4Alk)qHY;CW}rzGS~423fZgUj`qxHmZ`<@(eQAp1bldkS3Ln?nSd2_jV}!_5ku-+ zzH$3uA1=>0j<@y_6taEPi=ZhKgAsdp@EJHgeN8d`h5vMFDvx$fBsqp}%=z)B1{Jm8_&fGHik z4pi-}0WE0=Qz#zS1bDs}Lp8QtZgD>Pf|uZ|W9bf{Il%R`{K~)tv=}1Nc%&N8EEl>J z22dc-j8<+0tFe7vJu%}k8wAVeu{V)})1QBp#XK;7IIGE_@Jc=qa zX!~H_iIhvO(#rOxRh3Z5`yQ#RxA(YXlh%_g+ED)Mk8G$Q^t1Nk6_XYUjl`=iilTqy z#!YO6EY9;q0RQ_2LM`Fox|a6Zdrye1AvSO;#cuBvdsb-bBpc|j_NW<=ZArqE?3c3m zU*!{4C#XlAZ>134n6@U*tU=zeS*??qgnf?tE_lOqpx9J++3F}3g=|=wT;{^MWUsSN zClx|$_nTU?-Ywb9G4YgVW{6WFwW8g_XYTC*RLYj7H!f}|#cKpkVa-{4DyBr^(f;Cc zde>l0ieF?x1=PB~F~z%IhevNqEfO7k`&QBJ@K4|po2yWNY1O*#ZS2-bPeIBOo5{el z@9Gx;5mf(WVQuI}80B0bN%fX*;PF}L*QB0>dAp}h>E7tc&n&+AKMOW>0gyoiiV(mrh#MrYNNPK z&2a~>@qo2zMDw>y9Bc9KR~z2eyo-;Wj{NNwCqO3jOG!tU(3txon2$rI&!!#P?__L( z41-C8GkUax53fTsInt+;$K-(?dadK0;4gj1l8%@bmy+1^aLtScHiL*UZZk4iEB(qrkq>sk{z{v|;&_ z$A<3yZN*8nsBn)50W^Zu@!xh8?&TSPAqT&EW|CPQ z@coIgf`_ZGz)b@vCDMmej1}?s=Cd^2dF=rxUk>QH2XNjDXtIHN)mFU;|Fq}GSPsv& z9f6@iq&TR#ghv62{GXo9<@JYePs(OG9fbv(Pkv$bq_tcodil zk@9WhoZml)wW5AsQv=4tEqd4^CDx=REvoJ3dM^&C{X6`{hoapRyI&PTK*K62R58|$ zVlPD%^;!dt}^uA|n{z96%tXf&WqS9N~H^Qd~IJgcB0&-$RHN`cQbsI35DN|s7JlmL_D za$Z3;*)j~qsL|d)QN{qKEN%Gx)#ji9%$`PJW@%BfUyd=Chnnv7f53PBeh?=Gkkde6 zj4VuoaNo4pW6G0YZNTGhBo1%ac>kT}SCeJo*C+KqV<8M}M}?&2hHz0Yr6o3>OWh-i zw#A|9?U&(8U%|3egdd>BDV=6+vQY5w^w0$9N~1IgR6dDe^KfY;VR0ay2ANnxrfCQt zrGOEJFp1;45ri?;ny<%q5=h>Qrg?zear;+Okj^urmMGYh76cCjj#EO*gT*H^tV}Q%K?bfu**acpDxm26(`O23>!kE zB*4@iXC9`5A(yLhO&O&m9b$%$)%@Ty^(XodBa~C`YS;R-3%1aU0<2Miz`p?l`^)ak zma`yT`rTlF=hFxeMgVvwA0dV!tSl)k;Keh6uN2g!hrW&HF&ZJTeHoU;v*aM!erjId z52?>1gXEwN2k;$52H}LU9H6Y`!XMwfch&}}w@dD=ZmpxQ{-@+=dPLmKZvSspZ>%8;pwGE zoVL#VuzB1VbuQ{s`cK=Z7vtNqKh6C7_|P@^xd_I=vBi43f#6f`bM#-f3-CVOsS}?Q zPUvwusmlH8^d0wSo^Pp!5UqRW%K!C06K8B0_@VX5i#u1wTXhP*6(K^yQKfnaE*y^d z7|6)JMm+v#r-hbh!N{8%_yAN1mg4f`+viVzmnaq8Le0gQFWpJrrynn$Ind1#2F}hs zc#(rU-pV~o%$9-H24E)) zOAVtUy?b(#(0e@S0P^(d8YD~C)>_KK@!M5Bn@vAKw$B^2r>mA*IOog#iKQID3P%qj zlk8CrA;=C4dN#^@e3D=4I=qg@r#yT9u-kr^Es_zPshg77fe+jl-}*VWXK~l>nZHl; zu|?S!L(gy1W}?T2yCqfOh$TJ7$lOz<^pAjZs^`tHB8gwGI)|S@ zxYuJ%r{|-byl%&to;UwGEg12dH~fCb7rHz@Ug}WgMP+lN2!>#7admvgEp6R(4~Jr&b?;G5kj#owUfFncLRkS$ zzi6xQUMJX&edMA>&2rt6xPOba-KKd1?pIyD3R4{KnC-(h4KkdV2WN+hMp~BBe;5ZH zY;;lm{#f~60w$kR>ROsqYz*_K#@0n%xhtJ6Ozig}N&{UT)Ir*UEcI$lus7o>0;M!H zS0Tl~YH<9rbz3c2^1&G138ylRQdXdq~8S$c6|xlw9>Kk5)j3TQs1x4I^PLY%ncux?Xyv{*`7 zfQY-|y3xy$59j{I^GZZP1Ce>mjYCxgZ>Joy`5=VUctxN7?%6xYL+Fo4jtAMxMIuWU{r7wNz zvhKcUJaAajX&bxVCIWBnj|~^ItQV>)GtCjyk;dVj&2#tGr|=MYG#N%m1o_PS8(tPc zK%Hqtvgnk$1Dn5EW*d7=HF5Fx$}OHbGBh3%t6g_NsOzYc3#X9=?rAdj^AnCq%Or5bah&T8L1zovj$bkOpi zwuE!r1!hBkC@#}d=xEzCT}rN8NK;C&CVKuTx>SKf)gwM1l{uGZAr0B1-L$8H_4s!Q zIdB3!A2vz8dELB(c-HAK-2)7$6EF)36x`56G-h4)pZFz>o|Exhffu94K3je5wy){2 zd+#{4g_J5nuE}4Uf})8{YSM!I?7*@@R5QWfUJ^_9?vSY3oVj!D`9S84a|h0je{ z7}WA{lph^u7qSoICQZgSYTS;)j1lQd;CnY6iLC&M=ZAQxS}iLVQF76$OX(pir5%S# zWW*ohq!n1uo?1F>c(sG)QSktA?y1Wj4i%Zbj)8UH{uF20A@On2+wh42e`<`5-c>XQ2F7-GNWmFlELbs}|V z{3ovY^#n(%Nn}En$~9INw_JB_W~T(y>bC1Bud6XK`C5-05$ezuOyY5YQM6uK$$?U$ z6O_iLq+<*rR`~YpnV9RH?}THvDnU{N5`~qWex&_s(3HbFphJ82_i!mlhu{o4=eFRc zlBkvV&ZNjdW;nmy=u*KavlSn;&7}_5H0F<^*onu>DcyD>B;F26bZcTrLg%B)b1mmy zg=}hEVwo9m2W@ByVz}K1niRsi%iwYx>)@dH(AU-l)oE2v$a^yt^stvG;Rzn*M8&J} zdr|VFlhUS>xa`0|h`sLV;N1j=KM(%1{9b=&aF}vw`;ABHQ+lFz!zN-y-2e-Nl}P29 zEYC-}s+ZTJeY%_e{$Z>)01Fg>;4&tnJ)2dHQ`~&kvtI|lOd)NH{dIFBF}QX6?Z4x< zx9Z!;?mk*P{%3>MLYS(+Z08$4LzzyfGGU-5D|Oq>DZ*K>>_DdVqk~=lsa8ji)Eh1$ zB_=A@HGMKhDvVWMQHitbuK2v94X%%Lp;wto5pnB-1|K#VjW#WZW__dyC~;H$nAYak zzmC)KXX!eZ{O3RQ-VLVTZyMimX8pE{>#O<_iI$^wulh(ceIGuJ<5VZ9$ z`7+F}y;Ps6SDC~%SR^u50SxsFhSlCWdc_3seJ@CZ0P6s=I)?4p2HO)1GdupGt~a** z$+n&d`=<@|;|z!Q4Gy0fi{}~^s~AkoDJI#>QRkGSv6++QDW{oah87UXW>|)ta`{uQ z8_%+O6a4cXU9Tz$P8?{^L3KqD;6^utC4d=@fm_4)B{Q$qQ(j$W-uBH_p_Pb+$lem8SAbY{6Lq;Q~t)2zXl`bR{~avS_$vf@Hjo zmYCu>Q|x6cy^J~?R$(4qeLDPv`O>qemtNa|;U@bt%$N12bgK1jvj?p*lShxPr)8T( zN>r2Z5>(Tg$0l2>#J|%pw1~3YxKd+d6vIM;21XZ}MMql1#GZ+Xf43y{Ol+pb>YOvH z3oYVG&csz%tf@Y;=7dH3*)#E%E!MVLxZgajcK7tUVT+@ez?DTO(JmIznQuZu6x*f~ z+=r#te%2JPy9lYL9RDMo;NVr9_?07(PplPhFR8nfd;`&Tdm=%~~o4T343Z(7w;E zxYl57W%3FAdUNT6q!e;ZExH+dU1phKY`HbjDkt^u*2MbEoO8Rn$lLUfQMoLx??k=I zj)j5IQ16@H$2aB;(mYK|Tbty5^l)3LrqEVi(g z^1`7G_lY#JaMNeQNFt!&;t#KQjc%PQF=ml=Sf{*aX}I&y<}ex|U4FuP@7cz^m#z1; zHty@PF7IzFAGY5Av~mBqb;bL%@|mJ>(&XOE0KFR75k2cFoz3N^K?83D(k=~CntIm= zTeU_?bnz#eBh(Gg5z^D%pV2^+zfnH~SIWFbShGrvSXgTwrKYjsvQ2GkQ*D<`U4K*E z@aBW5QaB+~dA`v?1nSlBAe8{ZoENJ;h;?lD($eb@whj364Gy;To-?Xb0W<8dnfj=7 z_?I)D>1Q2g&N9-^>Cc?Av^^7f{!B%BBYCFD>3q}W^rqJHr_ZK~yKU=ziwy^OW;EXM znO9GfHfLpM@9AZ|O$h|@4^z@NckD;oRWgjQ>Z+5TXmt?MWk0rVjuY>~$QfV4&->?jNULsg2+XOUo2Zvjw`V_i@GSms;Y zZfyV1^3ubSEe9DqCmPG@ytQQ=&(K@;Fwy>L>ZPZd_Rn%IJ+(!v!-^*xBD+IiTsHx* zhzi)KZob#<1`9jy@5DqpG6lNkJQKTpO1}@7}sUv|Jfp4@B@D|+3Kmv`(LPNfXOXmDcpf43k2@7#1#yGpc zsZFpXwK$6!j9EZN&O01+l=|VGIExYLcEz9GT>hNd0Ip!7o%<|H;!s*ri|LS`;3kCi zmwVbW>>(J=Ud5V46?F~STtvxz&z88n=t|b790^BdIU>fm^9|Pw3NQbng zixnjJ##i?x6Cv*YO&f8GliAG%0z3RQ78b{%nBZz<%}UgkcRh#c+$eAE=g*gQjyR&t z0L=l`gN;fHLmt{&np-_3(7-;T2RH=@Or}AnIHXRB|9p`YU>^Re?AD#+UqY;`? zNad^*=)VB(?}PU1O1wJ*U^l#)^<@bFQ387$y{~DPF8iPSs&!X;!&jizG1DRdvB%Mx z1~?Rd{Zw%kb>W)*_0QxXJU0ZuaQHwRi^@#PyE|@3fh`lhyCTqcy62h8ogszHWGLKU z*{!p1U@_eZ#7PO>0yFHvcex0Hn7KG%xn)GRob!;I-4% zSCc-R9y2?CyZ?}T_hzA%NPH+Ryvrb*v{=_| znlA*+1~Yf0)f3N=GkCg<@O!``z)eOd8II03J|x9V zW>FfYnm>4B7lTb^Vb>8PDq)_2g`4D&RMQXwc!#S2)QVUprK^n>WWW#U+X*g5ifn}N zlh2xd#$i&9lc*rJIpX?peF~d(T*@LB<#x!U8b8sEe2ht_H(#__SJ{bu?sOlDktRG| zVoR9Ue)0_r`)S$ruIzk{{YUqz)eWov!o$I?7SV{O`yVv55Iz`^RN6GsW1v!GF!Ld( zBlm>xoLLk%_q(IPDBh()m}9GZL)%oc5ASjG)Q#FLN!|)R8Q!{uV0js##XLE@5y+`e zJw*i@)cr46#2rfasP|S^ZGrRVy4;zH-`-R6wQC<7`|p=1^yZm=OuT{U)prDVZv@DC z^)W%W#R$up!-xYRs?-DxnOEQ3v^~$`mLWcBecs1qo+zaIrKy`^KOtmLBGp}L#$7Aa zWOnNbSGb+|+;xVElTjC>c;MLZ%_OJ~N&4eE!wS4%% z(h?s$j}c>eRIQ`q!GHg4znR~icQG)pt%q!t`S;eBJv9%YkwhD!xzvmW>}BBp5pIa2 zN+Qc2pxV8V(vG{!y>5-{Yx(|H`$I?HChx5~8~33X%$g_57Ty9Gnn$ox7bb zd*5s8ym#As=#Hv$Xk=lC0D)9=|CY{SlSB4yd>|#D$W=W1F1XikKKYx~L#qPwZ20wq zz}}UHpE@6JUuh6sV9+Tu7~om3-0eKls`U#}Y;TQL{`;R#ciALvji~SOm4CI@_&nWm z>+_jo&jcrWof*$x`;52MS)gq6sKsN~eH0zTPd5B(Aoe$i3kbgJBa@)e!i3I z4_nMP?MHRJYa3Q<@X?ooZ!V0z)Gc@`ESRkH{a|)~@=nCN^<6Vl`(AAF(OMVqCbWik z^jy=W_e~y!AEvrKo828h;tw_aJA=J_tGUat)3@a8*lgw5J-#b3TK*gQ&u$}*e_rw5 z=h|B*$$hU0x93#%2JC$U7+l0NgHEx@nDUn6^_{sLb%uP${lxrU2zZt$2Z$s*^dI&*l9|x4>+Aa`5eIny zW1C}@&B4^=6RsBOR`_*npWdz z7A8VqRVq4TNrcwTwTsTiHi}TZrX4pfin#}pTH>zhGwNI~$8O&~HBujX#P_)8T64^a zc9Qp~a$@kcOsMO3B7gUH3pm2R@RE=4y*~b~n~yVaw#6+(7pwOOfNfXilp74=l(-3u zVNN4dYGMqh_k4B4QUpGm1z?WYiNO**w={cu@_7O*gofKa2)c31hUF#0InQ?LCY7)3 z*V}wiz2OIQUj@cszP-N&RyKPyxz^9kDvffLW|g|@sCTsWwDhd1y?&(Cqw(|_b}=SE zjs%hJxd@CA?8ssCa>YOqDVlAHdlFf`YS`n$MP~=b=iRBnpVu`%81Vy1(Q=i)S$CGt zRI1YKP_A`Z1E`CVhE%iUpk>(3bhRmCm{kSp;;jF*AaD;2TA8F?gmKmc3Dru!U^Xdr zFDz1p`fcpKhW1E{2hUC*4pNeW1 zMMCs4yu_nKw4-pMTeK6>dvaJiem+{XBmcphTG*~d*M;H3t!nIgn=C8i-w(c_?krtt zs#n1OnvAB=O2E-%(~7t^W$PITll*TFECmy(>8%~<{^T{2Rl!|4H}!m}!G=ro8xm?6p(EE*1qDv^UN2Y+6J9}d+4W6BWsg$!wwwGbs21X8Tjz| zMgli+x2d`f(sUPL8|T4Ws?B$Juvgc(a^s=KUE;Cyiw1?GA4mKtMvF19h*TR&=Dq=% zH$?qi)1FkBF!$W=zzYw24hyQ@;T_Ja;#O~#Qn!?R=+-GH)Di0FB5^m0Gh5w4H$$1sG0x_1y0dS6-`%GqzPAj5DNy z>OC{{lnu=Qem4j0GtJx2RW=aDXfGJ2i?G`#-{8x?L#mAAsw)M&9&KD0$|IR4T=V#C z?1c3*dO5R9JpiErkKIt~;Z+V?U?f3d z0e@Tots7A%flN7KKwS!{6X^iPg^pt=0) z&QAbLiXO|2+28muj*ir9m|Fbx=n4%-2$#1*%_QMX=tlA(F&eGr{1XAsQ%@#v?DGmOwzqe*^V);aTJz8`*PkG4>E#@hdR!v~ zt^_w`bNuM@05O{bs?oB}id>}YxoybAnM0R%-Xg3xijHpheE13`csjw7I*QG;z*VQ% zy0)nXndzwz#=Si~b`Pr`_7uRnEEZ)4yw%l9w>uULAc;(YyjuYnyVsI)6$o@^Wy__V zpSC0!tbIOQ-P+RfX=_&P+E<_9sP|9%%*_mW7x_p#w6GXQD%QLgz@=&*QJNK01N# zG?HL+wELeb4hp1<;sU1^L+V3eXscZ^yaS&^&paMiL|Yz$7oI|^fyda zudL~{aQj-evhEGWY@YqS<;%XLA-9FQeE>Qvh@o}0G#Hj$edfMa!a#jWDDmh(u-mt) zs=5@5#YYF1=X^U@Z@AHB#nHPlt=|q`t$SzlD^5KjHpuZ2b%SH2M~ZVbftB=){b6aE zWm}B2c4FcE>*1rrJ6pdW|5~@n=Zi-x^Y^_K`@>WHDe>&o3c|7V4XGb)9&y-P;c)7$ z!RGKD^nC}IV|BDQc8@M0aXEs#m*3Vc{p(^`k!gGSU2=MQ!!gSShn77F`%PmHT1$Ax zn-fmdZs~{}E2$mdah7K^+dn_{=(uVJ<$}{e;c#Bf#YL_=&qWAg-UdI(D7<&=(NJp3 zsAk}!6OZ7O*Mqe^=FhkCTHExzLf1F^*0?q2YEWdfZMU#!^h@jr>fv%j6`4gx{u8of z?Yz5A@l(x;*N0n+EXC~NNcyvw!JQX1Z@rIkeu-GfQQOYRPA^Ve9k6*&qna+6o+_!G zXpPP3(>0DOzLKwS1b-oC%3eKv`7u{_&o*7fS&zV6EffoV~yM^Bw6yJEiu8RvPSG)=0Z$tZ6Aa zOx-`JclPU7Jq010pvd=V2cdK{&o5{prJ=scjtIuM2m5Kn>rTpIBstdOqlzAtx9px`Ti@$Z{=c=OpfFaFDYPU8z8a8JyZyxPvV6X3kC=S?$~6|Y!UdV-96 zvG7?=sXc*P&ay0U26Tm}UIH)&;rcLKp`2*lLO9JPm9`k31F*H0`gbV#barze^z9J_ z7k>jPP+`4dLQw-CedHW#={b$24jdwHZ@YY?SA7mO#qm+W$p>NMj+R&^lnZp^vYTU% zv|Xj**6=%9Kj52c@yUE_tOVkAcsF%8GSt(!&v!E*xITu!0w5m0GwZUBnfv~qRrq~J zI@!{F$&0!OCn&2B{Cf6r>o53NfVOHmnCA4dJogeIt9ErOaX*gegUmi8WD5FX9*?-!Mu0JO#{a;UHHDs5Dh7) zW`=3(`Pg`*Gb40(0*5Q$(>4GMGr@?)3e079N69fFgfPv-#Y>5W*Y|6nvMo1u+H%q7 zyvdSx?sNLat@UFfxG5EuQIDq->_$176I}*+Tbv6EX~%9a%bk0oXr;rRI2{S~nrkL- zCksbY5sO<0n|Man3L=KdU?_kL$oUyLKby(EF=F;zXi=R>Tn}_)NC6@n$OnjYCZSBO zm3~lb0Tb+N(T&14cmP_BOqjygGE$*$3`D84AL}6+6YNwI_(0<%n~|m1v6v5{J=)bO zcsE4dooUp=g!D&3qEv8hiwS0gQKTTXt1#t!csGE<@in+0#Ah1<>dQl|nHVW(!uUYV z6Pot0vF6h4>0&S)CSuU;D)dOicbMd}%h}ZSH->#|?C{%E3PR8o?oYnI#he)301zom z)7aOh7!@Uyjcxl6Nk*W_Y0njg=lIw=+v@2p)M=oc$OKM;rsrmzbwrT}pqZ5=shHmu zZ0CTVp*^h9Rw51#iBFm*CJB5UM-VOty!8>hOhq``Vm{qsKBcgj7Fsm7WL>QXQ3x*3 z!pKI|RS~3kCJ4}S+M)^Xk7LWEKrSEcLp251gauk~v+6EI`cap;S)OTt%A(dtvGMl! z3^_Fv0EzztobogWL7p7^xd_LWZ|rFyHnUMinsFRLt+zD6WF}=i00V}oKbapVklb_y zST85g04P|lPiw#u6(&XDL|X(5(1O)&1S6!jQLc4hdkDT9Gr`X&L%FU};Cqxpp0Iy7 z3@l=TG)w(4p-~+h&u*bp6pS^QL>z$8m*OU_a9zEA-fp*mqRko}fF|Abnb0b6|VsMTFTLu1N3BhvOag=n+#2z>Rq8bsm6bh3isd??Aq#^5=}VmHVjwCbT5+%cgppPju* zMbNc0wY_4JH?lycGNmhMPlQI}Bj!!M#C;002}_jFYNiIwdn)j{2w=sg#{Sgl7%}>+ z(!cu4tPaFN^5_7SIKvWJ%mhy=Q%?C%ahYZwt4%+G=5?U(m8HcfsMj-RKNBISQD8F& z^r?tzn5aq*T|3NsK%HA0Q&pz^aONsH+tgJ7O)=S5Esd+a2)M_tW)4&`xbm!=IB={~ z-bVj@Rc}($Qh3(yDxjiKT6CN_s{%ogBCRlcfHnUHG;oaNZN_yif#1HRycyiEU?}CD zu4%j!t6`eSuPt8FLKA z589~Zd}lqdsTE|%!Dc4)fTc+<2=r7DV-;qY!=|C*EBQk6)%+FfaCC}X{5aFF;5YFA zo0|NMo+_vB9s!<2?qAHLMkyFFDJfM>(`Lr4YuWx#Xe?tcEFB@mqk!iT9gR5~43blC zS(;b25P1N>`N-uw6^v=w-0;vTxt*S3X+D}+c)s`GCMQxV7=ES2qF_WP3xILbefyXf z$jPR8VE4%py3tWwZhD1AD}Q{=k{nC@%R=3BY4UkF%Ka5&Kc)_38W^Dye$BQJKO@m@ z6eX-HZ_%}4f>V5eotx2FStjJ@_6mW|fKFkh{&0(V)VN7on#E^OF9V@>X3{%AYD1=R zxzM;zx^<&v`@IU1fMfAfVOEABk5TBfC1awc)QpK)oM}<6AjJyJtb`;0G^qwrPArYg ziQx)2CiGHoWYWn@Dn@8_ZoPS<5L8R`hZW}I3JppkK2a7OHX+p?vgDMgjs>H*aj+Dy zJF&IR&>BRiy#>^3c zX;s4I-HZi7usDgY1?)dBr`>5edU!Y7X>!#2>DK)L9hU++ckJn$p&-?(V6}?sqe9nU zZ0rc5p@sfks&`UoiW0`#uLdu-?YPvU3yqi{oCW8GK(A;*a{~416+^}zv*)=dpC-%P z_sj}mQ(5xw-&Mzc(JNgP#8i#k=${cIzMt+zHnw{O>&Nw`A5#5J;qpUlcoLvh_HDmz zvsTe{F|0^)vLy2DZWga`k-g?N%?Fhtw=M9eZbVdBh?n@^cnAMA8*m6 zjp*L_qYI$qem=;2N1z}$GGL)AWU5BInV!qK+YZy2xL~$VwvehjVp=ppebhtB`n9{xZu z%}jigly)4n5C~BMHtIX7i_CxWExh>>2(P00B}+ZN@z=b|G%7{3 zLR;tr&XbwOYgeDiCd}EL%+esW4NX%_1*^|l0 zK=FN?Po5E&2-S?OQYyfy0p(g*Dq~p-wqCy7StQje;o6wCD!0B6e61 zpcN#g*|rnoZOuQAm=#!R6(CQ4x1ecV0~A1N|C12^!lXVN-L7fnSz1hj=8g(#oF(IZ z%f^La`#Y>~?JNJIwcpp%E#00_T>Qhb)bJ!~WG%(SstEjj3_h5(w}p|XU@$pZTct^s zAgNe-?rhs>zzT+EW#4EPp6R&Pype1gP)cw=Fi@lKl-^hEe(>sMM&SBsf=BD%HtSit zgS6&u3dt#J{;ju0>mJ$G*jd@Ti|=6i|f>`yGi zC91&=uvH(cpTi85V_;0|6rZWEHb4wY;x&h)ql&wZ`YFf#o=D&7?1x;_Gqx4l(~d$d z`kB1$m_Z5CEXwby?Cn+yyuFF~>nr@#%`-caJ14gjBew>}Hpt}lqg$NucIAFwRl@43 zpu+$PqkJ2NORg)JoV#3AF4i^8Dn>w4ZgsL&s^7S(DhX#WH&4!&*BanjpPw)JO9}3q z{5sbEph;MkyDwxzy6~KCIRZl#lf@db{U!sG*`i4qAhuY~<%QBbQJuEewMhv?g!+_` zfHP0dSw~+`-BN)u)}LcXb}o;vw%QVvRb#uaI;+<4c=cTR)yY?LeE%JakJdGgVwF<^ z$Jt@fEPVj0Lna&R&kbLxxrW3WIm^olrd%{ZWtywRU<0Jm%S30X8o(+1r3kP=t#g?W zIw=b!&E_KzRjUXQ!jA1Mj1J3MppOl-z86YnmMXypYgCv=iqU6s@U{|FIbr?yJs~Z8 zh$$i%j0rGM;CdwDKn*l%Y+%tN)ugfXL^`6!CDc9^XyeYkn6aTV_saXV(VKA z_>6q61OZ`vOeUY~$x^aGyq9nQq9rzEo_@4o*+1(%Q&H;UoZb#GL_!-fAyXsiA(DTm z?irD*p@vwi;piVmv&Cvnb{~KtQ^qQ%!yrj zg}yLD7pTy`PXI79wicD14U|)Z)KRc5j={_Z$(Yp%w|p(nBJt5{STK&$Km#%OacMbq zZYL5-(&nqUu(rKK4&n#oT$=rNHs>~;Cl~;uPRT`pkrEY&;q0ZKwT<-!dKelZvy+6S zS%PP6xjZ(0Hbc&VX6MU2u=~vUW)Q^WAEH2nd&{(JF_r@zTMXIgwrz+l1`LKeU>!?@ zh0rjCa!h`g_6P>%ViXFpIiVE+xeS^MeinM{OGu43*-kQy|A_>@B z(#&4T07akAk{`ZyhZcq>4bsCfwhf5lq$Z+I9ZCtTt1J0!?AUzOBwsFE`RDT`>c;7b zyMK8=HM2enAkvT;C{jn^Lad98T4-DkZk;&!g?wbO_bYk5Q7?c)Zp6&=ORKkff>_$H zqjg&4SYy7Bx>(>~%)0>vy>>7`g;=KLY#vPlkYZI%q3xDBwMf5JqLiSU`jFy+gjqdr zC2*wxHaV%^Bv`&Owp*?}?@-u`sVy*LJX70K*^#WnNz!9N7*vyo_4^#L$ZNkbm3~U= zmeQ6$$b`08h0jPwYM<{$NLxokt)fUVuFY(n%6b^ww^B07d1<0i1W!2>ZmY|0oneut z1KLA+D?U;{Y?eG$BeL6W*qLT)z~b=UA=`JAt8RKNW!t#q?6CWu2rbaMnQAVFy0Z_s ztcWf@(fNKO5M<@Lap}$7llNC{evrdjrFARgr(kD!zHQ~=HTpj1?(uhyZQ09b2QSI{ zW?wmtH)U$w5!9|~9%F2?(!W<7$+rqR%Vjz^)mX=^zmE`sLlmO#jkT^U(cvJzV~Q3J zt={eEa?XVcJZ@z>7PXLYnCxD*`%nACFO)#)IMl_Kh$`$uRUTTaY!1low+zFY|3Qfw#0Gu zk=W&VS5(ZZSq+-Et;AA?S!q-EJ3Bn2q^2XBW$Pd8tzF$o{B(qOxAsxDNnLxy%+`dL z#K*lic39{0#SCZA-1~i!7;9tU@;C3{(c|CuwmI8`WSTrUzJ9fIAN0Y+33y7BtUh^$ zd?0iga4+dyQqacRZRsJT;pHd2wX0*tGUjX=9%`d^6#sh%V-7siVj*1wghO0Jzt(v1 zBM^2j55jzK;QhND)+x=gn^B#FgA%(IgtshOo(7seVV~4CfM{h)!oBs$34R_kx0g&4 zfmZf61o!9~(A%`#etWr4+mF{}o1qIQ6CJVHf_~zRm)r;rS_WBCm7?TH>^!*+m3yTs~5?U#PS(Hj4CYXI}Hks)pC$ke3I~& zi56fLTG46{o4&R@P{D`e{4yy;XyYN5zrsq1fDI}Pfs5=gYJ1ovQi~6y0if@A*ur8O zFn9fXEK35CgIOX!;@Q*4BEl`)|(y4W^b{+y&P;g(rNz!v)ZHyb!n1_i@xyj+Jf0T zy2xLOOCoP(Xgu_#tT&|}N?z(Yty*h+44GX7<9$^ae-)~eS)w|<`l4qyiH8IolxzJx zTW68M1|2fx$pJSUd~^BJgZpVHeU{{`Hc{I=+N;51fUK)_0%SW$|{(kDQyH}3xF1DWFqsS8iK1v zh-s1;;&WA6Xo2MDAyXMTdmx6)C%=HnS^ z@YtBD4;jwfw49AjJU+qSjzdB6Ej0Zw;{Ut81} ziZv3{quu^MVV?*yd-4HEqpr)Jwjr48>v29R96xcwfH$P#p$}r12U7MU+rJzEC{2M5MbTN=-ek$6f#{*~b zz|U2bqi-qKq)-x4`r^@YZ#nqv&~kGD>?eckPaAR63nN-VT{?z`%V~|EbkWcRSX$i@ z(Yx2hYVUPUgCdt=onOi8G*KYk>BMoszVWjb$+j?-9~` zHr7QB%+UpGicCr8&h+pVYV&xXeHRSkb`LP`^YbwuA;bB2cja4@&^G{Z<`S_|^7CX+_;qY26*d&Xw0! zC@0PI1+XiPvV{j?X%qlhN3mw+XjsBrpK7Xow3KWbtbLKzlNyX>^)0Vscx`a})Y zuqoe)F+Ym6&oQ-7prF5iFe)W$KOpB@64er_QXoNjamBKlizEUbz&UrBro01iyzXF2sJzy2RS`Ll#Nz}x*xiGuRLBkQR0 zr@(U-IR(LYE42Zd_9rRzi2#O}Ta8o+%W7IU4;xoF>@<7dG7-M>pG+`PLKp$oq)M=9 zQmlhxgC;-@#zO~L9i9P7e2rRL#v^=^laqlB=apE5kAH82W+ zAj5xJO8qX=PEtZJk8(g+qdn2HY@)!{s zA#^u(cpc!qqotpiXxbsNsO`Kym2COm3@6YURYJ}(?FTW(rn)q+o5?|z3CLj|tYJ}3 z3MvUp2_I0xBcFsq8m9pAB_auj0NxV9b(*$|1isGK-oS1-DaF?SlrwDNV<~oly5jo^QXz)S5u3lYHuP0GFi1m&+-=EUj;VmMe|;1)<(PtDVN8bOBHe zuiR69;y9c5QL=9>uj{FnRv8gU5!AjrcYOE=nx+*G#PkejciwF8Tza&}{7Pr!2nJ$O z?jqX$_Q!?-jyPDWj7J1+VwF299RNa62Wg=I>&7IEGxs3&d)jy>=gaU)Hu6d`}8Wm3_50PudISPqQl&buo@7H+^O0qQH*(T^V1t}SekmjTINN(%ZfLNmOcw@WV;&YQ`E5jH0DSCI0r{p5u9x!qfKg*ObE|In&6kSu|8@~1~8gxdj?JQTM0hALgZ_&C- z+wy~d-@LRV|N6v(9<4Eq0gVDl;O6Ec)-}jQ4vV6j^lUjnJPw6PIS!zgLcfOaZvbK{ zqWy(O8Dq7g)MsxQew~_pn~Bv1;8F=0JSrtQ^14wL_OQ(6`cBHBcKmhV*kL7$bQ?ku);hq&6Ebi!i*j7OcW52; zn5^8Lb;ipdc!E&Vj5fXmh$Lioz4L=JVb^!&Kk%LHzI+~Vue;Ed&8_%3BexCnB6soC zs@z}|K%s$_2w^5F98uxDf8h}sXeXn`zUsXcWgH*@V&y<04{OJRN>mTs(%|HJjI#ua zR|BOI{01eI0IWWL6mpONHEe7m4=mIq0|{!wxhzI#D@>B&OAy$J2cUhSk#Yd5hRWo4 zPZbbNGfos>V-dU#4NI2Ke6GiEmO?XWPzei|Qw2py@KqA@x}duX2w)9Eh>e~6>2UvQ zs-Lf?8njemf~1cE}B#6v|KEJ*A04zKh4^xQE1fuGBZ2OF$3n<5#krM?&+ zcRjv6)=^sxTMpTj$nfrRe2HqQtNNx6-@{G}jE+`N)x%`KW~LP4&_Jgmee)>rnci{e=Irza(Isu#m-o zQLDI^Pyw{uZq(Q(b@uTO=kI*D@cF}~xR^PvulwUZnsQ#d9-mQh=5-?h8V5DY&L+({ zI27nuRmx)KnGONbpMX=Z9X!?Lq;CDh!X-X>(c16n7b8Z>Y(I~?k4KEXQ|*}1a>wSgMg&-#_*HWE zSEu*U2reoA7 z3YdyQ=u!ON4JR-yD=^_wOay}2eRnE~_FEeA`{duL?JIuoT=D1lim9#@n5};&_sxN} zgg77d_#H05bYGg<9fH}iZF=|qu&dNR+bn)>5l=O_{d?15x`q1Z$U@8wi{H^I6!!D) zt2vt2D>QGnYTljDe7LLm^hNW9`uEdT{V-@!wBm1k+-q{=8y|Pr$xD9`iDv8(TP#O} zpjgYmgN^Vl#aJCfzBG02s7TwC?v*Ix2`Lg{K(LqnN$UYDS>IX{C6&CsTw~pO?$J^nnuZ{3g2ub(~svQRF>Qf)Jys51v@3_esqSMH|` z!gjIyfL&K#57yV@@1y-(9Ik8;*E^>Vw>&3}tS>+XRdsILpoUq?j%j+jSE)IK84ZF^ zqEo|`K()tooWHi>l`4!DroRpTf@)83`U$NH5oO-3d@hBFFbO8h8r(fe_UglHk_g2<~GQB`}eLW+dV}S(e?)$3S;aI^Y4T@pBgHh<$C_Rha34wt8Rox^niPm zWs3f{D>^xy_aX>_p>5a9c4FcOEe{99M_X^q_%??P8x-;Ej^(RoarKgl=0=$2+;R`y z= z^c(!Lm=C|^m+M3!s)3t`K{7Y%Yf#U_oDZ8lPimDtd@Q=L;Ki@U%VB!4Ds)$1QAW95 za`6b^=575KI#Kz*&aVxt^PSDtdQ`kqoUyZ>m<)cbj2 z`l?D)kzk3@F_MI0E$WkZFI}{^asBe1XSfCstj^t**ZHC6Pl3znwnE%YiV$zH;j`sp zqQ&=${QJg>RR*H#OwX<->s~aX?oa!*+O zz3i@)=huNntz8R+<~vh9-B|Vb!o*^t@;N^(#IUS*REsqK#yzS7Dk7$Vc00*@r8_}8 zSUCeWGgb0&+9EcH)y}HU#1TbI&U_10Q!L8b^UuEz6*H|5D@&>dk+mR>qYYsRhqxUynp_9D2qDbl)L1?r8)RV>n2FY2jAsHJ0JrpAKHYqL|s{H}K8 z`IhPeI_{LTCdh2t_+|TH#n$yhuxVL-1hti|B}mL7_~$Bgaz`j@Rf`N$)s@aZQo@R{ z%lIh!q~RNr(Y(By%<1APANE`T?$s$S%+7Jz5D{sokW$xXFYsv0#D;_(ASMzZ=4VM= zDS44@O`?dDK_eD1Mk!Aw!|4}wHfcZqYG7**{3$Su$zQykhg0Bv%vS<-0(;LDMLGVr zf4ijmMB`2|t~vS0@r6%DY2&F81|2F4`-y@&z^^pu)Y&`}#m4v2s%*GATNmb!>{_o5 z3pA!-mSx56(K|HWU?f16SYIwn3D7KwoLPIc$YUuEHKF&<_=-T*2N_j7tlt|Bb-6Oj zVoGw&x?Mn6jVUlnk>i4I+}k`qTVZ;Fps-=)M976?kD<@!UQ z$ryVc_0X*DkTbJ(q~zo;`i47_WXvXTQz7kIWfcR{0?t)}I&>BWFJ%*7{^4NPtCP-| zNC7Tiu1gUhjE~aI4|daKn%7P#b1T>6>qhNwOb=Y>-~{)YeN3CUa>8Ecaqqbt*CVl~ zU5>1=*W0u@U$goc$#O6vrq?!TDFZVu^43m!zx=(=ekJLSyzU>b5qe8Z^rap5#RqrzX+l+(@R~b0rLCPf z!?nzdHw-u3Gd0HX+SY({SByFP;GejwYrK%XqxJ^vaf^{yvk164dOC;YcGbNw(7ks5 z71unifh*pkl~viz)+Tnp(ixKX5XJ*;h7bXrZ1CBe_i*EDcm-? zY=!9)70#P?S$DS_V>Bd(nnm_4cPEZ!S_~7S*gdcE1S_e_W?cEKohLN)5W^23k_cm+FidrN4 z2;sfO5B|hXSaA3D{*GDy@L1XE1BOBzfn^Ih%Y}9<1^n(0NQ-5bTcE1)Szk`cwg#8m zluP00D4}kX0AtMrKP2x&Fx5Qx%#xYv61Q_NwYCC1P-~F-NOtz`{{BcQa6>4 zv5IXz85RX~?P9_wJD7c5w9DBwlCN#cq;SUipzlO;%)*;%~m*Aq1shgL` z-SUYC<+D}gp~V=0#wL1Qij`yj&I_4zV$Twk&n?Ep3_>vy`PXlkzV>6jo(lOZzKFh7 zq*5_14z}uJ&yrvIHt%9gZ|L;0;BTgvocl0e`-3A8*b9M2o%%=r;QbM?ZL#R8MC^x% zy`y0NSlEk?u25p1VzF;3?8SqV>`*(7EHK}lz*A?%{0e`MIN*{Kog$ImrrST-d)n z%s=C5%*U`auL18=I65fOOCIKx3#VWPaX(QCT1;Oy+k*r9&(0|zIHeWb9jADopa_U(n2sVXuVVoyZu z$sF)2jr1%Y@RxACC0DA-qvGngo13|@rQDSK@C5yVTJAvMbTr%RTFx!*_EtyFpqLLL z=v=k9M;>vyJ&e;GsR@u)WFxR&6kI)UEp{MgQ6hY_yZ>k`9F#%Y)E(m|@C}Xa_m@R> zOh*P(UXjg?2#CTJ5vl~Tid^UG zbI7OtQ^kIR+>oJLAsMh|vDmX3PHlykvGFU>6gN-YSPBQWUh`IFRg3n-RCl9=|*)&YdrgYK`%giP?VmRW$r^n%F}%%dc20vL2Z1jtU;*hJ07X z4#jCoZ}lJ|KVD30#(g(2Y{$P7)ePH9!hM?HfL?f|A6VD|2RymcS10!6MzeD6`8Hg6 z{k`9}32rMA`}4)q*)aiw;+55a?_^c3ta2lQ))=C^uY~!=-uG{U{UzZ+<^8^$QTEjX zel+n$+5G@^)zdo2$zW(AL+Rg+o5!!rEEn5rKVVmgeY+?ze#ZcO2u@9lVsJh%udE4t4`Y)H{5cOaq;LchN2jp&Q%of?nD%n!;;#72X zgU?R`E31*lzJxAJ(ivrfcRA#jd)>b{+MSSe>efB>a(G1r9MBF2vhgmH&@b|kz-B0C z2R7G0>_t9(OFxlkkl2=(w1TDlw;K-NC$%-C%sids&yG(!1anfWo+jSvX%~wg&VDm} z+dU`2Ua%$Y7>+FvFXmVN85^P*Rp|)CfxN2trj#qs!-D_4@pUZ1Gxxe5YrszeIpl8g ztrPjl;(epS{HjIvsZXqP;tv|QZ=_Y(^}>Nq@S2Tke5T}z-DFiZEzP|N&ST>aS5#>U z#6ja#hiBtjHdHMsPG8)cJ{Op`(XXglmm5dJV*F zt8oLf@7PH|!6d$I8eddAjGoE7i$wwLm4`o7@(;Z@>|N=n#BJm~E08^3RXn_QhsZzm z`C&8My%$v{e^f1D_it>Pm!qo8-60+y8nRPiN_s`;=S1y<6N-mVZ-(t?8JBm6X8|t< z4#BS~(qDALgPSod=7Jj=hM&hmaVibYWwO$#SQIpwaccHIuQyb(njn8bIQ07Lnhoib zKL(#3d%-G(pZ~xwlED9L7%m&fx${M;ANc4=k#)QH$L-lSZ05fSzt282@7<0^@3moj z!MrqPzqJGojCyuB=b1wj9^VAp%JEQ>cnK3HJB@cM=0E>;zW<=ObZ~w%_QApBSsz4V zyVT)cX_X62Y}*U38ppD#p+G5a&ETd|W|hCaXuSY?<3fcW4ZCp?>*!aN)&x6LCp)C3 z7mcG!^6khJDlU#_9}LiRi36$E!gc zr^35I<U zy~+v)bYEU9ngig`moJi6up}b;Vkk(7Pm_vc$MN&4MFF{QqE(Q6uXxp9cJGty%t>fP zZuZ%xsubjTuNupWf^<|PUQNT9jpg&&a(b0HKGot_^=o_J%^B94jlE*F5?|{o3Q|_3 z6^ml4Hwh#n6blSAiQXQA^Zt3b?D!%U0tH6lHp=n(l6i?e6<+i)w@JKyF*H+#-(b)L z_etIbrdCB%Lq_V?4ib@{AggnYbKoFp7u~RpUVg^@{Wza=jxXw$<@Sw>to_JcxViut zWp0AL%|jC7(O4gQS?~D!&VQC29e#h7pZBq8*$1h3BLVYn5bo`Le||wj54|qBiE^cE z%e9EQG&)(1dXc?ZcH4Fz0sxl3F(4lJ3pg(X9svizEaw6ZqM{^u=a4a^>lIYbanJ}b@Fy~ z^mTFYbFuMvnGxu08RBdn=4cx3Xd2)n;*|HAkjV`$u=Ox&OgD*#Lpcn$*Si;Ju4 zfAQa)ZY&lWEO&P|cl6fH&E3__9eu#{zi@G5xwyGIv(R9nf6H=qX1O@Kx&9X}F3!#_ z&Q7i_&aTdmE>4cl4vvlvPG~qeIXj^by1BZr++5t|2L%ProH;XiW=P1)P&9&Pa)N_HLeL1|{GSo}e}CYFhH|)EZg_ZjM0iAG z#Qz!55#hW@4tk5;6BQK`6*D(7HaR9PWezVfK0Y}qF(oZIb$&|9qO{c9wB-D>1VLIt zVOqlS^n{#r-op6_Y4ekk7bK@FNKNF=OUzuDkhLf&Yw^77+^i)_S1ez;zHsUKHGFX^Sn=-OGU=t7Ll^7Y&om$DYU$`~Yj5vp zKh)XLcD%FW#PMS%WyiWtclBQAK7aZ2#VfsiSNkqpy?EiurHlQSFDP#GDem@NzAwN0 zSkeEq|H|XR8%pKvoA>YC7`lIFXz1b4qsR9jKEL;P^#0>_Lr*_Eeg5vBmv2-fV`Hyh zzkB!o^XD%=zJH&ZnwtLK@VMh0`(!6lIP?p5~p_Umk=&+gE77-);L2tBrd>t6rut@7Zk{c(F=Rs82(Z(+3Z{MwJYmoyuxZe@YL zC!XFtcCbgE_-_!O4Y^c~;r14c9~nPT zS37igKTf-q141kwKYFcK$Gf)X`0w`n2{{rDI8BzYG59qd?>jo{zaKHyU~(qrV0405 z??V1P_q_jbLLTtlkrPK5Q-olrU(GpA=AT(6Q%0D6l3_j-32}ptAGU_zoe>3e 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

B$ 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

{{#DhNxt`K@ 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

Cs$N?e-_-=cV& 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 U-&tYNYR~TL8f=vWH4cW7zlQ`)tkVvzo`Y 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�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

w+U?5G;OQGTqI9-4*=?go<<&j!?}&SE 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 JPDHLkV1iD;Ht7HW literal 0 HcmV?d00001 diff --git a/vs-publish.json b/vs-publish.json index 83dbaee..c7846ab 100644 --- a/vs-publish.json +++ b/vs-publish.json @@ -7,6 +7,32 @@ }, "assetFiles": [ { + "pathOnDisk": "art/AddPageGuides.png", + "targetPath": "art/AddPageGuides.png" + }, + { + "pathOnDisk": "art/iformat.png", + "targetPath": "art/iformat.png" + }, + { + "pathOnDisk": "art/igraph.png", + "targetPath": "art/igraph.png" + }, + { + "pathOnDisk": "art/includeformatter.gif", + "targetPath": "art/includeformatter.gif" + }, + { + "pathOnDisk": "art/itrial.png", + "targetPath": "art/itrial.png" + }, + { + "pathOnDisk": "art/iwyu.gif", + "targetPath": "art/iwyu.gif" + }, + { + "pathOnDisk": "art/iwyu.png", + "targetPath": "art/iwyu.png" } ], "overview": "README.md", From bc32d64b106b5c96b45c937e5932ca451852048f Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 7 Aug 2022 22:33:36 +0200 Subject: [PATCH 33/86] little fixes to the .md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a82a3e8..546a5aa 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ It is useful for example with several .cpp files, when you are sure, that header The feature is tested, but it is useful even within large projects. It makes results of IWYU better. Works only on header files. -It gets all the #include declarations and writes them as they are to the specified mapping file. Combining several of those files are done using `{ref: }` in the final file. To find more: [](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md) +It gets all the #include declarations and writes them as they are to the specified mapping file. Combining several of those files are done using `{ref: }` in the final file. To find more visit [official mappings guide](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md) Configuration is on *Tools>Options>Include Toolbox>Include Mapper* page. @@ -96,8 +96,6 @@ Mapper has one option, that specifies separator you would like to use, quotes or To specify relative index use *Relative File Prefix* option. e.g. C:\\users\\map\\a.h with prefix C:\\users will write to the final map. -The feature is in beta. - ## ~~Include Graph~~ Requires fixes. @@ -114,7 +112,7 @@ Requires fixes. * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. * Refactoring of IWYU, new code and new feature set. * Some features are dropped for now, until fixed. - * Build pipeline for IWYU, which builds every month at [Build](https://github.com/Agrael1/BuildIWYU)! + * Build pipeline for IWYU, which builds every month at [Build Pipeline](https://github.com/Agrael1/BuildIWYU)! * CI/CD for this whole project! * Added Include mapper[beta] for IWYU, works as public-public include mapping. * Include What You Use additions: From 6ed81e244c46a8ecd0ab5dcef158fd471409602f Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 7 Aug 2022 22:35:08 +0200 Subject: [PATCH 34/86] version revert --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index be7a9f5..4d97228 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.12"; + public const string Version = "3.0.0"; public const string Author = "Ilya Doroshenko"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 346c3b4..0942688 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index f94ef3f..e4f19ce 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.12"; + public const string Version = "3.0.0"; public const string Author = "Ilya Doroshenko"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 191b0d1..2ad6909 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox From 54bfa402d406a913e251b7be8a0b00ccb6b111ac Mon Sep 17 00:00:00 2001 From: Agrael Date: Mon, 8 Aug 2022 09:04:53 +0200 Subject: [PATCH 35/86] [release] fixed pipeline --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b2b41c4..a3e5687 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -50,7 +50,7 @@ jobs: uses: actions/upload-artifact@v2 with: name: ${{ github.event.repository.name }}.vsix - path: /_built/**/*.vsix + path: /_built/**/*2022.vsix publish: if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} From 054bf776774bfba1b6d7eaa55aa44bad8fb134f0 Mon Sep 17 00:00:00 2001 From: Agrael Date: Mon, 8 Aug 2022 09:32:01 +0200 Subject: [PATCH 36/86] [release] split artifacts --- .github/workflows/main.yml | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a3e5687..c063625 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -50,7 +50,7 @@ jobs: uses: actions/upload-artifact@v2 with: name: ${{ github.event.repository.name }}.vsix - path: /_built/**/*2022.vsix + path: /_built/**/*.vsix publish: if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} @@ -65,10 +65,14 @@ jobs: with: name: ${{ github.event.repository.name }}.vsix - - name: Upload to Open VSIX + - name: Upload 2022 to Open VSIX uses: timheuer/openvsixpublish@v1 with: - vsix-file: ${{ github.event.repository.name }}.vsix + vsix-file: ${{ github.event.repository.name }}2022.vsix + - name: Upload 2019 to Open VSIX + uses: timheuer/openvsixpublish@v1 + with: + vsix-file: ${{ github.event.repository.name }}2019.vsix - name: Tag and Release if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} @@ -80,10 +84,18 @@ jobs: files: | **/*.vsix - - name: Publish extension to Marketplace + - name: Publish 2022 extension to Marketplace + if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} + uses: cezarypiatek/VsixPublisherAction@0.2 + with: + extension-file: '${{ github.event.repository.name }}2022.vsix' + publish-manifest-file: 'vs-publish.json' + personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} + + - name: Publish 2019 extension to Marketplace if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} uses: cezarypiatek/VsixPublisherAction@0.2 with: - extension-file: '${{ github.event.repository.name }}.vsix' + extension-file: '${{ github.event.repository.name }}2019.vsix' publish-manifest-file: 'vs-publish.json' personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} From 0d60af7b467b2e97a8969474b4c7fd97ef07f9ec Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Mon, 8 Aug 2022 10:29:34 +0200 Subject: [PATCH 37/86] [release] fixes for pipeline --- IncludeToolbox2019/Monikers.imagemanifest | 2 +- .../Resources/IncludeFormatterPackage.png | Bin 2042 -> 2752 bytes IncludeToolbox2019/source.extension.cs | 2 +- .../source.extension.vsixmanifest | 2 +- IncludeToolbox2022/Monikers.imagemanifest | 2 +- .../Resources/IncludeFormatterPackage.png | Bin 2042 -> 2752 bytes IncludeToolbox2022/source.extension.cs | 2 +- .../source.extension.vsixmanifest | 2 +- 8 files changed, 6 insertions(+), 6 deletions(-) diff --git a/IncludeToolbox2019/Monikers.imagemanifest b/IncludeToolbox2019/Monikers.imagemanifest index e1f4591..3b0278b 100644 --- a/IncludeToolbox2019/Monikers.imagemanifest +++ b/IncludeToolbox2019/Monikers.imagemanifest @@ -44,7 +44,7 @@ - + diff --git a/IncludeToolbox2019/Resources/IncludeFormatterPackage.png b/IncludeToolbox2019/Resources/IncludeFormatterPackage.png index 042d01be3aafef2dc20a5ce0fb52d8a5305a09d7..de73e8d0e8e75a46b5ca2f588786c2e81e5244b0 100644 GIT binary patch literal 2752 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 diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 4d97228..8941924 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -12,7 +12,7 @@ internal sealed partial class Vsix public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; public const string Version = "3.0.0"; - public const string Author = "Ilya Doroshenko"; + public const string Author = "Agrael"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 0942688..b7a3921 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox diff --git a/IncludeToolbox2022/Monikers.imagemanifest b/IncludeToolbox2022/Monikers.imagemanifest index 0a3f534..59e2a2c 100644 --- a/IncludeToolbox2022/Monikers.imagemanifest +++ b/IncludeToolbox2022/Monikers.imagemanifest @@ -56,7 +56,7 @@ - + diff --git a/IncludeToolbox2022/Resources/IncludeFormatterPackage.png b/IncludeToolbox2022/Resources/IncludeFormatterPackage.png index 042d01be3aafef2dc20a5ce0fb52d8a5305a09d7..de73e8d0e8e75a46b5ca2f588786c2e81e5244b0 100644 GIT binary patch literal 2752 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 diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index e4f19ce..230965c 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -12,7 +12,7 @@ internal sealed partial class Vsix public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; public const string Version = "3.0.0"; - public const string Author = "Ilya Doroshenko"; + public const string Author = "Agrael"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 2ad6909..1deb3f8 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox From e5ce216ebdbe30b24648f15be7027463e1ac9af4 Mon Sep 17 00:00:00 2001 From: Agrael Date: Mon, 8 Aug 2022 10:35:25 +0200 Subject: [PATCH 38/86] fixed schema --- vs-publish.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vs-publish.json b/vs-publish.json index c7846ab..c33ac41 100644 --- a/vs-publish.json +++ b/vs-publish.json @@ -1,6 +1,6 @@ { "$schema": "http://json.schemastore.org/vsix-publish", - "categories": [ "other", "coding", "tools" ], + "categories": [ "other", "coding" ], "identity": { "internalName": "InsertGuid", "tags": [ "C", "C++", "include", "iwyu", "formatting", "code", "include what you use"] From c0aa2b800907a4ef207852ab6be3a24c823807e6 Mon Sep 17 00:00:00 2001 From: Agrael Date: Mon, 8 Aug 2022 10:49:38 +0200 Subject: [PATCH 39/86] pipeline fix --- .github/workflows/main.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c063625..cf28a40 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,7 +17,8 @@ jobs: env: Configuration: Release DeployExtension: False - VsixManifestPath: IncludeToolbox2022\source.extension.vsixmanifest + Vsix2022ManifestPath: IncludeToolbox2022\source.extension.vsixmanifest + Vsix2019ManifestPath: IncludeToolbox2019\source.extension.vsixmanifest VsixManifestSourcePath: IncludeToolbox2022\source.extension.cs steps: @@ -34,9 +35,15 @@ jobs: id: vsix_version uses: timheuer/vsix-version-stamp@v1 with: - manifest-file: ${{ env.VsixManifestPath }} + manifest-file: ${{ env.Vsix2022ManifestPath }} vsix-token-source-file: ${{ env.VsixManifestSourcePath }} + - name: Sync 2019 version + uses: cezarypiatek/VsixVersionAction@1.0 + with: + version: ${{ steps.vsix_version.outputs.version-number }} + vsix-manifest-file: ${{ env.Vsix2019ManifestPath }} + - name: Build run: msbuild /v:m -restore /p:OutDir=\_built @@ -69,6 +76,7 @@ jobs: uses: timheuer/openvsixpublish@v1 with: vsix-file: ${{ github.event.repository.name }}2022.vsix + - name: Upload 2019 to Open VSIX uses: timheuer/openvsixpublish@v1 with: From a0abb81ab8fe1424ecccba0394266de2bda30b56 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 15:03:25 +0200 Subject: [PATCH 40/86] new formatter, using more efficient parser, further decrease of DTE --- .../Commands/FormatIncludes.cs | 13 +- IncludeToolboxShared/Commands/GenMap.cs | 6 +- .../Commands/RunIWYUProject.cs | 3 + .../Formatter/IncludeFormatter.cs | 239 ++++++++---------- .../Formatter/IncludeLineInfo.cs | 21 +- IncludeToolboxShared/IWYU/IWYU.cs | 2 +- IncludeToolboxShared/IWYU/IWYUApply.cs | 39 ++- .../IncludeToolboxShared.projitems | 1 + .../Options/FormatterOptions.cs | 7 +- IncludeToolboxShared/Util/Lexer.cs | 118 ++++++++- IncludeToolboxShared/Util/ParseIncludes.cs | 168 ++++++++++++ IncludeToolboxShared/Util/Parser.cs | 11 +- .../Util/TrialAndErrorRemoval.cs | 6 +- IncludeToolboxShared/Util/Utils.cs | 26 +- 14 files changed, 449 insertions(+), 211 deletions(-) create mode 100644 IncludeToolboxShared/Util/ParseIncludes.cs diff --git a/IncludeToolboxShared/Commands/FormatIncludes.cs b/IncludeToolboxShared/Commands/FormatIncludes.cs index d5dee8b..4d9e885 100644 --- a/IncludeToolboxShared/Commands/FormatIncludes.cs +++ b/IncludeToolboxShared/Commands/FormatIncludes.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Community.VisualStudio.Toolkit; @@ -18,7 +19,7 @@ SnapshotSpan GetSelectionLines(IWpfTextView viewHost) if (viewHost == null) return new SnapshotSpan(); var sel = viewHost.Selection.StreamSelectionSpan; var start = new SnapshotPoint(viewHost.TextSnapshot, sel.Start.Position).GetContainingLine().Start; - var end = new SnapshotPoint(viewHost.TextSnapshot, sel.End.Position).GetContainingLine().End; + var end = new SnapshotPoint(viewHost.TextSnapshot, sel.End.Position).GetContainingLine().EndIncludingLineBreak; return new SnapshotSpan(start, end); } @@ -33,8 +34,8 @@ async Task GetSelectionLinesAsync() protected override void BeforeQueryStatus(EventArgs e) { var selection_span = GetSelectionLinesAsync().Result; - var lines = Formatter.IncludeLineInfo.ParseIncludes(selection_span.GetText(), Formatter.ParseOptions.RemoveEmptyLines); - Command.Visible = lines.Any(x => x.ContainsActiveInclude); + var lines = Parser.ParseInclues(selection_span.GetText().AsSpan(), false);// faster a times! tested with QPC + Command.Visible = lines.Count() != 0; } @@ -47,13 +48,13 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs args) // Read. var selection_span = await GetSelectionLinesAsync(); var include_directories = await VCUtil.GetIncludeDirsAsync(); - + var text = selection_span.GetText(); // Format - string formatedText = Formatter.IncludeFormatter.FormatIncludes(selection_span.GetText(), doc.FilePath, include_directories, settings); + var formated_lines = Formatter.IncludeFormatter.FormatIncludes(text.AsSpan(), doc.FilePath, include_directories, settings); // Overwrite. using var edit = doc.TextBuffer.CreateEdit(); - edit.Replace(selection_span, formatedText); + Formatter.IncludeFormatter.ApplyChanges(formated_lines, edit, text, selection_span.Start, settings.RemoveEmptyLines); edit.Apply(); } } diff --git a/IncludeToolboxShared/Commands/GenMap.cs b/IncludeToolboxShared/Commands/GenMap.cs index ce46204..64675ad 100644 --- a/IncludeToolboxShared/Commands/GenMap.cs +++ b/IncludeToolboxShared/Commands/GenMap.cs @@ -25,8 +25,10 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) var relative_path = settings.Prefix != "" ? Utils.MakeRelative(settings.Prefix, path) : path; relative_path = relative_path.Replace('\\', '/'); - string text = doc.TextBuffer.CurrentSnapshot.GetText(); - var sresult = Formatter.IncludeLineInfo.ParseIncludes(text, + var snap = doc.TextBuffer.CurrentSnapshot; + var sresult = Formatter.IncludeLineInfo.ParseIncludes( new Microsoft.VisualStudio.Text.SnapshotSpan( + snap + , 0, snap.Length), Formatter.ParseOptions.KeepOnlyValidIncludes | (settings.Ignoreifdefs ? Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals : 0)) .Distinct(); diff --git a/IncludeToolboxShared/Commands/RunIWYUProject.cs b/IncludeToolboxShared/Commands/RunIWYUProject.cs index d0bfd97..0a7523b 100644 --- a/IncludeToolboxShared/Commands/RunIWYUProject.cs +++ b/IncludeToolboxShared/Commands/RunIWYUProject.cs @@ -142,7 +142,10 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) if (settings.Format) await IWYUApply.FormatAsync(doc); if (settings.FormatDoc) + { + await doc.WindowFrame.ShowAsync(); await VS.Commands.ExecuteAsync(Microsoft.VisualStudio.VSConstants.VSStd2KCmdID.FORMATDOCUMENT); + } } } } diff --git a/IncludeToolboxShared/Formatter/IncludeFormatter.cs b/IncludeToolboxShared/Formatter/IncludeFormatter.cs index 28a6595..1973d02 100644 --- a/IncludeToolboxShared/Formatter/IncludeFormatter.cs +++ b/IncludeToolboxShared/Formatter/IncludeFormatter.cs @@ -1,8 +1,10 @@ -using System; +using Microsoft.VisualStudio.Text; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; +using System.Threading.Tasks; namespace IncludeToolbox.Formatter { @@ -10,119 +12,99 @@ public static class IncludeFormatter { public static string FormatPath(string absoluteIncludeFilename, PathMode pathformat, IEnumerable includeDirectories) { - if (pathformat == PathMode.Absolute) - { - return absoluteIncludeFilename; - } - else + // todo: Treat std library files special? + + if (absoluteIncludeFilename == null) return null; + + int bestLength = int.MaxValue; + string bestCandidate = null; + + foreach (string includeDirectory in includeDirectories) { - // todo: Treat std library files special? - if (absoluteIncludeFilename != null) - { - int bestLength = Int32.MaxValue; - string bestCandidate = null; + string proposal = Utils.MakeRelative(includeDirectory, absoluteIncludeFilename); - foreach (string includeDirectory in includeDirectories) + if (proposal.Length < bestLength) + { + if (pathformat == PathMode.Shortest || + (proposal.IndexOf("../") < 0 && proposal.IndexOf("..\\") < 0)) { - string proposal = Utils.MakeRelative(includeDirectory, absoluteIncludeFilename); - - if (proposal.Length < bestLength) - { - if (pathformat == PathMode.Shortest || - (proposal.IndexOf("../") < 0 && proposal.IndexOf("..\\") < 0)) - { - bestCandidate = proposal; - bestLength = proposal.Length; - } - } + bestCandidate = proposal; + bestLength = proposal.Length; } - - return bestCandidate; } } - - return null; + return bestCandidate; } - - ///

- /// Formats the paths of a given list of include line info. - /// - private static void FormatPaths(IEnumerable lines, PathMode pathformat, IEnumerable includeDirectories) + private static void FormatPaths(IncludeLine[] lines, PathMode pathformat, IEnumerable includeDirectories) { - if (pathformat == PathMode.Unchanged) - return; - - foreach (var line in lines) + for (int i = 0; i < lines.Length; i++) { - string absoluteIncludeDir = line.TryResolveInclude(includeDirectories, out bool resolvedPath); - if (resolvedPath) - line.IncludeContent = FormatPath(absoluteIncludeDir, pathformat, includeDirectories) ?? line.IncludeContent; + string absoluteIncludeDir = lines[i].Resolve(includeDirectories); + if (string.IsNullOrEmpty(absoluteIncludeDir)) continue; + var formatted = FormatPath(absoluteIncludeDir, pathformat, includeDirectories); + if (string.IsNullOrEmpty(formatted)) continue; + lines[i].SetFile(formatted); } } - private static void FormatDelimiters(IEnumerable lines, DelimiterMode delimiterMode) + private static void FormatDelimiters(IncludeLine[] lines, DelimiterMode delimiterMode) { switch (delimiterMode) { case DelimiterMode.AngleBrackets: - foreach (var line in lines) - line.SetDelimiterType(IncludeLineInfo.DelimiterType.AngleBrackets); + for (int i = 0; i < lines.Length; i++) + lines[i].SetDelimiter(DelimiterMode.AngleBrackets); break; case DelimiterMode.Quotes: - foreach (var line in lines) - line.SetDelimiterType(IncludeLineInfo.DelimiterType.Quotes); + for (int i = 0; i < lines.Length; i++) + lines[i].SetDelimiter(DelimiterMode.Quotes); break; } } - - private static void FormatSlashes(IEnumerable lines, SlashMode slashMode) + private static void FormatSlashes(IncludeLine[] lines, SlashMode slashMode) { switch (slashMode) { case SlashMode.ForwardSlash: - foreach (var line in lines) - line.IncludeContent = line.IncludeContent.Replace('\\', '/'); + for (int i = 0; i < lines.Length; i++) + lines[i].ToForward(); break; case SlashMode.BackSlash: - foreach (var line in lines) - line.IncludeContent = line.IncludeContent.Replace('/', '\\'); + for (int i = 0; i < lines.Length; i++) + lines[i].ToBackward(); break; } } - private static List SortIncludes(IList lines, FormatOptions settings, string documentName) + private static IncludeLine[] SortIncludes(IncludeLine[] lines, FormatOptions settings, string documentName) { string[] precedenceRegexes = RegexUtils.FixupRegexes(settings.PrecedenceRegexes, documentName); + List outSortedList = new(lines.Length); - List outSortedList = new List(lines.Count); - - IEnumerable includeBatch; - int numConsumedItems = 0; - - do + while (lines.Length != 0) { - // Fill in all non-include items between batches. - var nonIncludeItems = lines.Skip(numConsumedItems).TakeWhile(x => !x.ContainsActiveInclude); - numConsumedItems += nonIncludeItems.Count(); - outSortedList.AddRange(nonIncludeItems); - - // Process until we hit a preprocessor directive that is not an include. - // Those are boundaries for the sorting which we do not want to cross. - includeBatch = lines.Skip(numConsumedItems).TakeWhile(x => x.ContainsActiveInclude || !x.ContainsPreProcessorDirective); - numConsumedItems += includeBatch.Count(); + int line_n = lines.First().line; - } while (SortIncludeBatch(settings, precedenceRegexes, outSortedList, includeBatch) && numConsumedItems != lines.Count); + var pack = lines.TakeWhile(s => + { + bool a = s.line - line_n <= 1; + line_n = s.line; + return a; + }); + var e = pack.ToArray(); + if (e.Count() > 1) + outSortedList.AddRange(SortIncludeBatch(settings, precedenceRegexes, e)); + else + outSortedList.AddRange(e); + lines = lines.Skip(e.Count()).ToArray(); + } - return outSortedList; + return outSortedList.ToArray(); } - - private static bool SortIncludeBatch(FormatOptions settings, string[] precedenceRegexes, - List outSortedList, IEnumerable includeBatch) + private static IncludeLine[] SortIncludeBatch(FormatOptions settings, + string[] precedenceRegexes, + IncludeLine[] includeBatch) { - // Get enumerator and cancel if batch is empty. - if (!includeBatch.Any()) - return false; - // Fetch settings. TypeSorting typeSorting = settings.SortByType; bool regexIncludeDelimiter = settings.RegexIncludeDelimiter; @@ -131,15 +113,20 @@ private static bool SortIncludeBatch(FormatOptions settings, string[] precedence // Select only valid include lines and sort them. They'll stay in this relative sorted // order when rearranged by regex precedence groups. var includeLines = includeBatch - .Where(x => x.ContainsActiveInclude) - .OrderBy(x => x.IncludeContent) - .ToList(); + .OrderBy(x => { return x.Content; }).ToArray(); if (settings.RemoveDuplicates) { - HashSet uniqueIncludes = new HashSet(); - includeLines.RemoveAll(x => !x.ShouldBePreserved && - !uniqueIncludes.Add(x.GetIncludeContentWithDelimiters())); + // store kept headers first, to remove all the duplicates + HashSet uniqueIncludes = new(); + uniqueIncludes.UnionWith(includeLines.Where(s => s.Keep).Select(s => s.file)); + + for (int i = 0; i < includeLines.Length; i++) + { + ref var r = ref includeLines[i]; + if (!r.Keep && !uniqueIncludes.Add(r.file)) + r.SetFullContent(""); + } } // Group the includes by the index of the precedence regex they match, or @@ -147,19 +134,19 @@ private static bool SortIncludeBatch(FormatOptions settings, string[] precedence var includeGroups = includeLines .GroupBy(x => { - var includeContent = regexIncludeDelimiter ? x.GetIncludeContentWithDelimiters() : x.IncludeContent; + if (!x.Valid) return precedenceRegexes.Length; + var includeContent = regexIncludeDelimiter ? x.file : x.Content; for (int precedence = 0; precedence < precedenceRegexes.Count(); ++precedence) { if (Regex.Match(includeContent, precedenceRegexes[precedence]).Success) return precedence; } - return precedenceRegexes.Length; }, x => x) .OrderBy(x => x.Key); // Optional newlines between regex match groups - var groupStarts = new HashSet(); + var groupStarts = new HashSet(); if (blankAfterRegexGroupMatch && precedenceRegexes.Length > 0 && includeLines.Count() > 1) { // Set flag to prepend a newline to each group's first include @@ -172,83 +159,55 @@ private static bool SortIncludeBatch(FormatOptions settings, string[] precedence // Sort by angle or quoted delimiters if either of those options were selected if (typeSorting == TypeSorting.AngleBracketsFirst) - sortedIncludes = sortedIncludes.OrderBy(x => x.LineDelimiterType == IncludeLineInfo.DelimiterType.AngleBrackets ? 0 : 1); + sortedIncludes = sortedIncludes.OrderBy(x => x.delimiter == DelimiterMode.AngleBrackets ? 0 : 1); else if (typeSorting == TypeSorting.QuotedFirst) - sortedIncludes = sortedIncludes.OrderBy(x => x.LineDelimiterType == IncludeLineInfo.DelimiterType.Quotes ? 0 : 1); - - // Merge sorted includes with original non-include lines - var sortedIncludeEnumerator = sortedIncludes.GetEnumerator(); - var sortedLines = includeBatch.Select(originalLine => - { - if (originalLine.ContainsActiveInclude) - { - // Replace original include with sorted includes - return sortedIncludeEnumerator.MoveNext() ? sortedIncludeEnumerator.Current : new IncludeLineInfo(); - } - return originalLine; - }); + sortedIncludes = sortedIncludes.OrderBy(x => x.delimiter == DelimiterMode.Quotes ? 0 : 1); - if (settings.RemoveEmptyLines) - { - // Removing duplicates may have introduced new empty lines - sortedLines = sortedLines.Where(sortedLine => !string.IsNullOrWhiteSpace(sortedLine.RawLine)); - } + return sortedIncludes.ToArray(); + } - // Finally, update the actual lines - { - bool firstLine = true; - foreach (var sortedLine in sortedLines) - { - // Handle prepending a newline if requested, as long as: - // - this include is the begin of a new group - // - it's not the first line - // - the previous line isn't already a non-include - if (groupStarts.Contains(sortedLine) && !firstLine && outSortedList[outSortedList.Count - 1].ContainsActiveInclude) - { - outSortedList.Add(new IncludeLineInfo()); - } - outSortedList.Add(sortedLine); - firstLine = false; - } - } - return true; - } - /// - /// Formats all includes in a given piece of text. - /// - /// Text to be parsed for includes. - /// Path to the document the edit is occuring in. - /// A list of include directories - /// Settings that determine how the formating should be done. - /// Formated text. - public static string FormatIncludes(string text, string documentPath, IEnumerable includeDirectories, FormatOptions settings) + public static IncludeLine[] FormatIncludes(ReadOnlySpan text, string documentPath, IEnumerable includeDirectories, FormatOptions settings) { string documentDir = Path.GetDirectoryName(documentPath); string documentName = Path.GetFileNameWithoutExtension(documentPath); includeDirectories = new string[] { Microsoft.VisualStudio.PlatformUI.PathUtil.Normalize(documentDir) + Path.DirectorySeparatorChar }.Concat(includeDirectories); - string newLineChars = Utils.GetDominantNewLineSeparator(text); - - var lines = IncludeLineInfo.ParseIncludes(text, settings.RemoveEmptyLines ? ParseOptions.RemoveEmptyLines : ParseOptions.None); + var lines = Parser.ParseInclues(text, settings.IgnoreIfdefs); // Format. IEnumerable formatingDirs = includeDirectories; if (settings.IgnoreFileRelative) - { formatingDirs = formatingDirs.Skip(1); - } - FormatPaths(lines, settings.PathFormat, formatingDirs); + + if (settings.PathFormat != PathMode.Unchanged) + FormatPaths(lines, settings.PathFormat, formatingDirs); + FormatDelimiters(lines, settings.DelimiterFormatting); FormatSlashes(lines, settings.SlashFormatting); // Sorting. Ignores non-include lines. - lines = SortIncludes(lines, settings, documentName); + return SortIncludes(lines, settings, documentName); + } + + public static void ApplyChanges(IncludeLine[] includes, ITextEdit edit, string text, int relative_pos, bool remove_empty = true) + { + var lb = Utils.GetLineBreak(edit); + var enumerator = includes + .OrderBy(s => s.line) + .Zip(includes, + (a, b) => { return new KeyValuePair(a.ReplaceSpan(relative_pos), b.Project(text)); }); - // Combine again. - return string.Join(newLineChars, lines.Select(x => x.RawLine)); + string append = ""; + if (!remove_empty) append = lb; + + foreach (var line in enumerator) + { + var rep = line.Value + append; + edit.Replace(line.Key, rep); + } } } } diff --git a/IncludeToolboxShared/Formatter/IncludeLineInfo.cs b/IncludeToolboxShared/Formatter/IncludeLineInfo.cs index fdd78ad..c2632e3 100644 --- a/IncludeToolboxShared/Formatter/IncludeLineInfo.cs +++ b/IncludeToolboxShared/Formatter/IncludeLineInfo.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.VisualStudio.Text; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -41,25 +42,25 @@ public class IncludeLineInfo /// Parses a given text into IncludeLineInfo objects. /// /// A list of parsed lines. - public static List ParseIncludes(string text, ParseOptions options) + public static List ParseIncludes(SnapshotSpan text, ParseOptions options) { - StringReader reader = new StringReader(text); + var snap = text.Snapshot; + var lines = snap.Lines.Skip(snap.GetLineNumberFromPosition(text.Start.Position) - 1).Take(text.Length); var outInfo = new List(); // Simplistic parsing. int openMultiLineComments = 0; int openIfdefs = 0; - string lineText; - for (int lineNumber = 0; true; ++lineNumber) - { - lineText = reader.ReadLine(); - if (lineText == null) - break; - if (options.HasFlag(ParseOptions.RemoveEmptyLines) && string.IsNullOrWhiteSpace(lineText)) + foreach (ITextSnapshotLine line in lines) + { + if (options.HasFlag(ParseOptions.RemoveEmptyLines) + && string.IsNullOrWhiteSpace(line.GetText())) continue; + string lineText = line.GetText(); + int lineNumber = line.LineNumber; int commentedSectionStart = int.MaxValue; int commentedSectionEnd = int.MaxValue; diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index 943dd86..aaec78e 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -87,7 +87,7 @@ static public void MoveHeader(DocumentView view) var edit = buf.CreateEdit(); _ = edit.Delete(new(match.Index, match.Length)); - edit.Insert(begin, match.Value + IWYUApply.GetLineBreak(edit)); + edit.Insert(begin, match.Value + Utils.GetLineBreak(edit)); edit.Apply(); } diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 4588233..aa88f86 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -29,33 +29,30 @@ public static Span GetIncludeSpan(string text) return new Span(line[0], line[1]); } - public static string GetLineBreak(ITextEdit edit) - { - return edit.Snapshot.Lines.ElementAt(0).GetLineBreakText(); - } - - public static async Task PreformatAsync(string text, string file) - { - var include_directories = await VCUtil.GetIncludeDirsAsync(); - return Formatter.IncludeFormatter.FormatIncludes(text, file, include_directories, await FormatOptions.GetLiveInstanceAsync()); - } - public static async Task FormatAsync(DocumentView doc) { - using var xedit = doc.TextBuffer.CreateEdit(); - var text = xedit.Snapshot.GetText(); + var include_directories = await VCUtil.GetIncludeDirsAsync(); + var settings = await FormatOptions.GetLiveInstanceAsync(); + using var edit = doc.TextBuffer.CreateEdit(); + var text = edit.Snapshot.GetText(); var span = IWYUApply.GetIncludeSpan(text); - var result = await IWYUApply.PreformatAsync(new SnapshotSpan(xedit.Snapshot, span).GetText(), doc.FilePath); - xedit.Replace(span, result); - xedit.Apply(); + + var result = Formatter.IncludeFormatter.FormatIncludes( + text.AsSpan().Slice(span.Start, span.Length), + doc.FilePath, + include_directories, settings + ); + + Formatter.IncludeFormatter.ApplyChanges(result, edit, text, span.Start); + edit.Apply(); } public static void ApplyCheap(ITextEdit edit, string result, bool commentary) { if (!commentary) { - var lb = edit.Snapshot.Lines.ElementAt(0).GetLineBreakText(); - lb = string.IsNullOrEmpty(lb) ? "\r\n" : lb; + var lb = Utils.GetLineBreak(edit); + result = string.Join(lb, result.Split('\n') .Select(s => { @@ -119,7 +116,7 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p string path = part.Substring(0, part.IndexOf(':', 3)); var doc = await VS.Documents.OpenAsync(path); using var edit = doc.TextBuffer.CreateEdit(); - + var lb = Utils.GetLineBreak(edit); var add_f = retasks.Declarations.Where(s => s.span.begin < sep_index); @@ -139,12 +136,12 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p tree.AddChildren(add_f); string result = tree.ToString(std >= Standard.cpp17); - edit.Insert(parsed.LastInclude, '\n' + result); + edit.Insert(parsed.LastInclude, lb + result); foreach (var item in add_i) { - edit.Insert(parsed.LastInclude, '\n' + item.span.str(output)); + edit.Insert(parsed.LastInclude, lb + item.span.str(output)); } if (!settings.MoveDecls) foreach (var task in rem_f) diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index 48a3823..0c949d2 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -33,6 +33,7 @@ + diff --git a/IncludeToolboxShared/Options/FormatterOptions.cs b/IncludeToolboxShared/Options/FormatterOptions.cs index 86ea5fc..a26bb93 100644 --- a/IncludeToolboxShared/Options/FormatterOptions.cs +++ b/IncludeToolboxShared/Options/FormatterOptions.cs @@ -39,7 +39,12 @@ public class FormatOptions : BaseOptionModel [Category("Formatting")] [DisplayName("Remove Empty Lines")] [Description("If true, all empty lines of a include selection will be removed.")] - public bool RemoveEmptyLines { get; set; } = true; + public bool RemoveEmptyLines { get; set; } = true; + + [Category("Formatting")] + [DisplayName("Ignore #if blocks")] + [Description("If true, all empty lines of an #if block include selection will be ignored.")] + public bool IgnoreIfdefs { get; set; } = true; diff --git a/IncludeToolboxShared/Util/Lexer.cs b/IncludeToolboxShared/Util/Lexer.cs index c0f2bf2..445bac2 100644 --- a/IncludeToolboxShared/Util/Lexer.cs +++ b/IncludeToolboxShared/Util/Lexer.cs @@ -4,14 +4,28 @@ namespace IncludeToolbox { public class Lexer { + public struct Desc + { + public bool ignore_ifdefs = true; + public bool newlines = false; + public bool commentaries = false; + + public Desc() + { + } + } public enum TType { Null, Terminal, + Newline, + Commentary, + MLCommentary, Namespace, Class, Struct, Enum, + EnumClass, ID, AngleID, QuoteID, @@ -21,6 +35,14 @@ public enum TType OpenBr, CloseBr, + If, + Ifdef, + Ifndef, + Elif, + Else, + Elifdef, + Endif, + T0, T1, T2, @@ -32,7 +54,6 @@ public enum TType T8, T9, - EnumClass } public ref struct Token { @@ -94,7 +115,24 @@ public readonly bool Empty() internal void SkipComment() { int rem = code.IndexOf('\n'); + if(rem == -1) + { + code = "".AsSpan(); + return; + } + RemovePrefix(rem + 1); + } + internal Token TakeComment() + { + int rem = code.IndexOf('\n'); + if(rem == -1) + { + code = "".AsSpan(); + return new(TType.Commentary, current_pos - 1, original.Slice(current_pos - 1)); + } + Token tk = new(TType.Commentary, current_pos - 1, original.Slice(current_pos - 1, rem + 1)); RemovePrefix(rem + 1); + return tk; } internal void SkipCommentML() @@ -112,6 +150,23 @@ internal void SkipCommentML() } } } + internal Token TakeCommentML() + { + int start = current_pos - 1; + + _ = Fetch(); //remove first * + while (true) + { + int rem = code.IndexOf('*'); + RemovePrefix(rem + 1); + if (rem == -1) return new(); + if (Prefetch() == '/') + { + RemovePrefix(1); + return new Token(TType.MLCommentary,start, original.Slice(start, current_pos - start)); + } + } + } private void RemovePrefix(int n) { @@ -123,7 +178,7 @@ private void RemovePrefix(int n) private int FindDelim() { int i = 0; - while (i < code.Length && (char.IsLetterOrDigit(code[i])|| code[i] == '_')) i++; + while (i < code.Length && (char.IsLetterOrDigit(code[i]) || code[i] == '_')) i++; return i; } private int FindBrace(char brace) @@ -135,12 +190,17 @@ private int FindBrace(char brace) return i + 1; } + private bool IsDelim(char c) + { + return !char.IsLetterOrDigit(c) && c != '_'; + } + internal Token TryAssociateWith(ReadOnlySpan tk, TType type) { int pos = FindDelim(); - var sl = code.Slice(0, pos); + var sl = code.Slice(0, pos + 1); - Token t = sl.StartsWith(tk) ? (new(type, current_pos - 1)) : (new()); + Token t = sl.StartsWith(tk) && IsDelim(sl[tk.Length]) ? (new(type, current_pos - 1)) : (new()); if (!t.valid()) return t; RemovePrefix(pos); return t; @@ -173,20 +233,33 @@ internal void SkipSpace() RemovePrefix(i); } - public Token GetToken(bool ex) + private Token GetToken(bool expect_id, Desc desc = default) { Token tk = new(); while (!Empty()) { char c = Fetch(); + if (desc.newlines && c == '\n') + return new Token(TType.Newline, Position); + switch (c) { case '/': switch (Prefetch()) { - case '/': SkipComment(); break; - case '*': SkipCommentML(); break; + case '/': + if (desc.commentaries) + return TakeComment(); + SkipComment(); + if (desc.newlines) + return new Token(TType.Newline); + break; + case '*': + if (desc.commentaries) + return TakeCommentML(); + SkipCommentML(); + break; default: break; } continue; @@ -200,7 +273,28 @@ public Token GetToken(bool ex) tk = TryAssociateWith("truct".AsSpan(), TType.Struct); break; case '#': - tk = TryAssociateWith("include".AsSpan(), TType.Include); + if (desc.ignore_ifdefs) + tk = TryAssociateWith("include".AsSpan(), TType.Include); + else + { + //stupid, but rarely occurring + tk = TryAssociateWith("include".AsSpan(), TType.Include); + if (tk.valid()) return tk; + tk = TryAssociateWith("if".AsSpan(), TType.If); + if (tk.valid()) return tk; + tk = TryAssociateWith("ifdef".AsSpan(), TType.Ifdef); + if (tk.valid()) return tk; + tk = TryAssociateWith("ifndef".AsSpan(), TType.Ifndef); + if (tk.valid()) return tk; + tk = TryAssociateWith("elif".AsSpan(), TType.Elif); + if (tk.valid()) return tk; + tk = TryAssociateWith("else".AsSpan(), TType.Else); + if (tk.valid()) return tk; + tk = TryAssociateWith("elifdef".AsSpan(), TType.Elifdef); + if (tk.valid()) return tk; + tk = TryAssociateWith("endif".AsSpan(), TType.Endif); + if (tk.valid()) return tk; + } break; case 'e': tk = TryAssociateWith("num".AsSpan(), TType.Enum); @@ -217,7 +311,7 @@ public Token GetToken(bool ex) break; case '<': case '"': - if (ex) + if (expect_id) tk = GetHeader(c); break; case '{': @@ -231,13 +325,17 @@ public Token GetToken(bool ex) } if (tk.valid()) return tk; - if (ex && !char.IsWhiteSpace(c)) + if (expect_id && !char.IsWhiteSpace(c)) return GetID(); else if (!char.IsWhiteSpace(c)) Skip(); } return tk; } + public Token GetToken(bool expect_id, bool ignore_ifdefs = true, bool newlines = false, bool commentaries = false) + { + return GetToken(expect_id, new() { ignore_ifdefs = ignore_ifdefs, newlines = newlines, commentaries = commentaries }); + } } } } diff --git a/IncludeToolboxShared/Util/ParseIncludes.cs b/IncludeToolboxShared/Util/ParseIncludes.cs new file mode 100644 index 0000000..90fe8d2 --- /dev/null +++ b/IncludeToolboxShared/Util/ParseIncludes.cs @@ -0,0 +1,168 @@ +using Microsoft.VisualStudio.Text; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using static IncludeToolbox.Lexer; +using static Microsoft.VisualStudio.VSConstants; + +namespace IncludeToolbox +{ + public struct Addition + { + public string value; + public int pos; + } + public struct IncludeLine + { + public string file = ""; + public DelimiterMode delimiter = DelimiterMode.Unchanged; + public string_view span; + public string_view file_subspan; + public int line = 0; + public bool keep = false; + + public IncludeLine(string file, DelimiterMode delimiter, string_view span, int line) + { + this.file = file; + this.delimiter = delimiter; + this.span = span; + this.line = line; + } + + public string Content => Valid ? file.Substring(1, file.Length - 2) : ""; + public string FullLine => "#include " + file; + public bool Keep => keep; + public bool Valid => !string.IsNullOrEmpty(file); + public Span ReplaceSpan(int relative_pos) => new(relative_pos + span.begin, span.end - span.begin); + + public string Project(string over) + { + if (!Valid) return ""; + var x = span.str(over); + return x.Remove(file_subspan.begin, file_subspan.Length).Insert(file_subspan.begin, file); + } + public void SetFullContent(string content) { file = content; } + + public void SetFile(string val) + { + switch (delimiter) + { + case DelimiterMode.AngleBrackets: + file = '<' + val + '>'; + break; + case DelimiterMode.Quotes: + file = '"' + val + '"'; + break; + } + } + public void SetDelimiter(DelimiterMode delimiter) + { + if (this.delimiter == delimiter) return; + this.delimiter = delimiter; + SetFile(Content); + } + public void ToForward() + { + file.Replace('\\', '/'); + } + public void ToBackward() + { + file.Replace('/', '\\'); + } + + public string Resolve(IEnumerable includeDirectories) + { + foreach (string dir in includeDirectories) + { + string candidate = Path.Combine(dir, Content); + if (File.Exists(candidate)) + return Utils.GetExactPathName(candidate); + } + + Output.WriteLine($"Unable to resolve include: '{Content}'"); + return ""; + } + } + internal static partial class Parser + { + static readonly Regex pragma = new("(?:\\/\\*|\\/\\/)(?:\\s*IWYU\\s+pragma:\\s+keep)");// IWYU pragma: keep + + + public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_ifdefs) + { + List lines = new(); + Lexer.Context lctx = new(text); + + + IncludeLine xline = new(); + bool skip = false; + bool accept = true; + bool comments = false; + int line = 0; + + + while (!lctx.Empty()) + { + Token tok = lctx.GetToken(accept, ignore_ifdefs, true, comments); + switch (tok.type) + { + case TType.Newline: + comments = accept = false; + line++; + if (xline.Valid) + { + xline.span.end = tok.Position; + lines.Add(xline); + xline = new IncludeLine(); + } + break; + case TType.Include: + accept = !skip; + xline.span.begin = tok.Position; + break; + case TType.AngleID: + case TType.QuoteID: + if (!skip && accept) + { + var begin = tok.Position - xline.span.begin; + xline.file = tok.value.ToString(); + xline.delimiter = tok.type == TType.AngleID ? DelimiterMode.AngleBrackets : DelimiterMode.Quotes; + xline.span.end = tok.Position + tok.value.Length; + xline.line = line; + xline.file_subspan = new(begin, begin + tok.value.Length); // subspan of file for replacement + + accept = false; + comments = true; + } + break; + case TType.Ifdef: + case TType.Ifndef: + case TType.Elif: + case TType.Else: + case TType.Elifdef: + skip = true; + break; + case TType.Endif: + skip = false; + break; + case TType.Commentary: + line++; + goto case TType.MLCommentary; + case TType.MLCommentary: + xline.span.end = tok.Position + tok.value.Length; + xline.keep = pragma.IsMatch(tok.value.ToString()); + break; + default: + accept = false; + break; + } + } + + if (xline.Valid) + lines.Add(xline); + + return lines.ToArray(); + } + } +} diff --git a/IncludeToolboxShared/Util/Parser.cs b/IncludeToolboxShared/Util/Parser.cs index 069a38d..f5d060b 100644 --- a/IncludeToolboxShared/Util/Parser.cs +++ b/IncludeToolboxShared/Util/Parser.cs @@ -9,6 +9,15 @@ namespace IncludeToolbox public struct string_view { public int begin, end; + + public string_view(int begin, int end) + { + this.begin = begin; + this.end = end; + } + + public int Length => end - begin; + public string str(string str) { return str.Substring(begin, end - begin); @@ -522,7 +531,5 @@ public static async Task ParseAsync(string text) { return await Task.Run(() => Parse(text)); } - - } } diff --git a/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs index 37c7e36..20fc912 100644 --- a/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs @@ -125,8 +125,10 @@ private void ExtractSelectionAndIncludes(EnvDTE.Document document, TrialAndError document.Activate(); var documentTextView = VSUtils.GetCurrentTextViewHost(); textBuffer = documentTextView.TextView.TextBuffer; - string documentText = documentTextView.TextView.TextSnapshot.GetText(); - IEnumerable includeLines = Formatter.IncludeLineInfo.ParseIncludes(documentText, Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals | Formatter.ParseOptions.KeepOnlyValidIncludes); + var documentText = documentTextView.TextView.TextSnapshot; + + IEnumerable includeLines + = Formatter.IncludeLineInfo.ParseIncludes(new SnapshotSpan(documentText, 0, documentText.Length), Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals | Formatter.ParseOptions.KeepOnlyValidIncludes); // Optionally skip top most include. if (settings.IgnoreFirstInclude) diff --git a/IncludeToolboxShared/Util/Utils.cs b/IncludeToolboxShared/Util/Utils.cs index f0bf9f8..dfe6ea6 100644 --- a/IncludeToolboxShared/Util/Utils.cs +++ b/IncludeToolboxShared/Util/Utils.cs @@ -4,6 +4,7 @@ using System.Linq; using Microsoft.VisualStudio.Editor; using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.TextManager.Interop; @@ -17,6 +18,15 @@ public struct BoolWithReason public static class Utils { + public static string GetLineBreak(ITextEdit edit) + { + return GetLineBreak(edit.Snapshot); + } + internal static string GetLineBreak(ITextSnapshot snapshot) + { + return snapshot.Lines.ElementAt(0).GetLineBreakText(); //if there is some way to retreive interface of nl counter, I'll use it + } + public static string MakeRelative(string absoluteRoot, string absoluteTarget) { Uri rootUri, targetUri; @@ -61,21 +71,5 @@ public static string GetExactPathName(string pathName) return di.Name.ToUpper(); } } - - /// - /// Retrieves the dominant newline for a given piece of text. - /// - public static string GetDominantNewLineSeparator(string text) - { - string lineEndingToBeUsed = "\n"; - - // For simplicity we're just assuming that every \r has a \n - int numLineEndingCLRF = text.Count(x => x == '\r'); - int numLineEndingLF = text.Count(x => x == '\n') - numLineEndingCLRF; - if (numLineEndingLF < numLineEndingCLRF) - lineEndingToBeUsed = "\r\n"; - - return lineEndingToBeUsed; - } } } From b54e215ebcd69e5c610171eb7a2cc7b16880032e Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 15:10:36 +0200 Subject: [PATCH 41/86] bad habits --- IncludeToolboxShared/Util/ParseIncludes.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IncludeToolboxShared/Util/ParseIncludes.cs b/IncludeToolboxShared/Util/ParseIncludes.cs index 90fe8d2..5796e3a 100644 --- a/IncludeToolboxShared/Util/ParseIncludes.cs +++ b/IncludeToolboxShared/Util/ParseIncludes.cs @@ -18,7 +18,7 @@ public struct IncludeLine public string file = ""; public DelimiterMode delimiter = DelimiterMode.Unchanged; public string_view span; - public string_view file_subspan; + public string_view file_subspan = new(); public int line = 0; public bool keep = false; From c37b308f2713c73d8264d1f78b57cdea82b241a2 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 15:23:20 +0200 Subject: [PATCH 42/86] tests will be later as I remove DTE dependencies and make better classes --- Tests/IncludeFormatingTest.cs | 468 +++++++++++++++++----------------- 1 file changed, 234 insertions(+), 234 deletions(-) diff --git a/Tests/IncludeFormatingTest.cs b/Tests/IncludeFormatingTest.cs index 479b9f8..edd6778 100644 --- a/Tests/IncludeFormatingTest.cs +++ b/Tests/IncludeFormatingTest.cs @@ -1,285 +1,285 @@ -using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using IncludeToolbox.Formatter; +//using System.Linq; +//using Microsoft.VisualStudio.TestTools.UnitTesting; +//using IncludeToolbox.Formatter; -namespace Tests -{ - [TestClass] - public class IncludeFormatingTest - { - private static string sourceCode_NoBlanks = -@"#include ""a.h"" -#include -#include ""a.h"" -#include ""filename.h"" -#include -#include -#include -#include -#include -#include "; +//namespace Tests +//{ +// [TestClass] +// public class IncludeFormatingTest +// { +// private static string sourceCode_NoBlanks = +//@"#include ""a.h"" +//#include +//#include ""a.h"" +//#include ""filename.h"" +//#include +//#include +//#include +//#include +//#include +//#include "; - private static string sourceCode_WithBlanks = -@"#include ""c_third"" +// private static string sourceCode_WithBlanks = +//@"#include ""c_third"" -#include ""filename.h"" +//#include ""filename.h"" -#include ""z_first"" +//#include ""z_first"" -#include -#include -// A comment -#include ""z_first"" +//#include +//#include +//// A comment +//#include ""z_first"" -#include -#include ""filename.h"""; +//#include +//#include ""filename.h"""; - [TestMethod] - public void Sorting_BlanksAfterRegexGroup() - { - // Blanks after groups. - string expectedFormatedCode_NoBlanks = -@"#include ""filename.h"" +// [TestMethod] +// public void Sorting_BlanksAfterRegexGroup() +// { +// // Blanks after groups. +// string expectedFormatedCode_NoBlanks = +//@"#include ""filename.h"" -#include -#include +//#include +//#include -#include ""a.h"" -#include -#include +//#include ""a.h"" +//#include +//#include -"; +//"; - string expectedFormatedCode_WithBlanks = -@"#include ""filename.h"" +// string expectedFormatedCode_WithBlanks = +//@"#include ""filename.h"" -#include +//#include -#include ""c_third"" +//#include ""c_third"" -#include ""z_first"" +//#include ""z_first"" -// A comment +//// A comment -"; +//"; - var settings = new IncludeToolbox.FormatOptions(); - settings.SortByType = IncludeToolbox.TypeSorting.None; - settings.PrecedenceRegexes = new string[] - { - IncludeToolbox.RegexUtils.CurrentFileNameKey, - ".+_.+" - }; - settings.BlankAfterRegexGroupMatch = true; - settings.RemoveEmptyLines = false; +// var settings = new IncludeToolbox.FormatOptions(); +// settings.SortByType = IncludeToolbox.TypeSorting.None; +// settings.PrecedenceRegexes = new string[] +// { +// IncludeToolbox.RegexUtils.CurrentFileNameKey, +// ".+_.+" +// }; +// settings.BlankAfterRegexGroupMatch = true; +// settings.RemoveEmptyLines = false; - string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); - formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); - } +// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); +// formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); +// } - [TestMethod] - public void Sorting_AngleBracketsFirst() - { - // With sort by type. - string expectedFormatedCode_NoBlanks = -@"#include -#include -#include -#include -#include ""filename.h"" -#include ""a.h"" +// [TestMethod] +// public void Sorting_AngleBracketsFirst() +// { +// // With sort by type. +// string expectedFormatedCode_NoBlanks = +//@"#include +//#include +//#include +//#include +//#include ""filename.h"" +//#include ""a.h"" -"; +//"; - string expectedFormatedCode_WithBlanks = -@"#include +// string expectedFormatedCode_WithBlanks = +//@"#include -#include ""filename.h"" +//#include ""filename.h"" -#include ""c_third"" +//#include ""c_third"" -#include ""z_first"" +//#include ""z_first"" -// A comment +//// A comment -"; +//"; - var settings = new IncludeToolbox.FormatOptions(); - settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; - settings.PrecedenceRegexes = new string[] - { - IncludeToolbox.RegexUtils.CurrentFileNameKey, - ".+_.+" - }; - settings.BlankAfterRegexGroupMatch = false; - settings.RemoveEmptyLines = false; +// var settings = new IncludeToolbox.FormatOptions(); +// settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; +// settings.PrecedenceRegexes = new string[] +// { +// IncludeToolbox.RegexUtils.CurrentFileNameKey, +// ".+_.+" +// }; +// settings.BlankAfterRegexGroupMatch = false; +// settings.RemoveEmptyLines = false; - string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); - formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); - } +// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); +// formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); +// } - [TestMethod] - public void Sorting_DontRemoveDuplicates() - { - // With sort by type. - string expectedFormatedCode_NoBlanks = -@"#include ""filename.h"" +// [TestMethod] +// public void Sorting_DontRemoveDuplicates() +// { +// // With sort by type. +// string expectedFormatedCode_NoBlanks = +//@"#include ""filename.h"" -#include -#include -#include -#include +//#include +//#include +//#include +//#include -#include ""a.h"" -#include ""a.h"" -#include -#include -#include "; - - - string expectedFormatedCode_WithBlanks = -@"#include ""filename.h"" -#include ""filename.h"" - -#include -#include -#include -// A comment -#include ""c_third"" -#include ""z_first"" -#include ""z_first"""; - - - var settings = new IncludeToolbox.FormatOptions(); - settings.SortByType = IncludeToolbox.TypeSorting.None; - settings.PrecedenceRegexes = new string[] - { - IncludeToolbox.RegexUtils.CurrentFileNameKey, - ".+_.+" - }; - settings.BlankAfterRegexGroupMatch = true; - settings.RemoveEmptyLines = true; - settings.RemoveDuplicates = false; - - string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); - formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); - } - - [TestMethod] - public void RemoveEmptyLines() - { - string expectedFormatedCode_WithBlanks = -@"#include ""filename.h"" -#include -#include ""c_third"" -#include ""z_first"" -// A comment"; - - var settings = new IncludeToolbox.FormatOptions(); - settings.SortByType = IncludeToolbox.TypeSorting.None; - settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; - settings.BlankAfterRegexGroupMatch = false; - settings.RemoveEmptyLines = true; - - string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); - } - - [TestMethod] - public void EmptySelection() - { - // Activate all features - var settings = new IncludeToolbox.FormatOptions(); - settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; - settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; - settings.BlankAfterRegexGroupMatch = true; - settings.RemoveEmptyLines = true; - settings.DelimiterFormatting = IncludeToolbox.DelimiterMode.AngleBrackets; - settings.SlashFormatting = IncludeToolbox.SlashMode.BackSlash; - - string formatedCode = IncludeFormatter.FormatIncludes("", "filename.cpp", new string[] { }, settings); - Assert.AreEqual("", formatedCode); - } - - [TestMethod] - public void OtherPreprocessorDirectives() - { - string source = -@"#pragma once -// SomeComment -#include ""z"" -#include - -#include ""filename.h"" - -#if test -#include -// A comment -#include ""a9"" -#include -#include -#else -#include - -#include // comment +//#include ""a.h"" +//#include ""a.h"" +//#include +//#include +//#include "; + + +// string expectedFormatedCode_WithBlanks = +//@"#include ""filename.h"" +//#include ""filename.h"" + +//#include +//#include +//#include +//// A comment +//#include ""c_third"" +//#include ""z_first"" +//#include ""z_first"""; + + +// var settings = new IncludeToolbox.FormatOptions(); +// settings.SortByType = IncludeToolbox.TypeSorting.None; +// settings.PrecedenceRegexes = new string[] +// { +// IncludeToolbox.RegexUtils.CurrentFileNameKey, +// ".+_.+" +// }; +// settings.BlankAfterRegexGroupMatch = true; +// settings.RemoveEmptyLines = true; +// settings.RemoveDuplicates = false; + +// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); +// formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); +// } + +// [TestMethod] +// public void RemoveEmptyLines() +// { +// string expectedFormatedCode_WithBlanks = +//@"#include ""filename.h"" +//#include +//#include ""c_third"" +//#include ""z_first"" +//// A comment"; + +// var settings = new IncludeToolbox.FormatOptions(); +// settings.SortByType = IncludeToolbox.TypeSorting.None; +// settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; +// settings.BlankAfterRegexGroupMatch = false; +// settings.RemoveEmptyLines = true; + +// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); +// } + +// [TestMethod] +// public void EmptySelection() +// { +// // Activate all features +// var settings = new IncludeToolbox.FormatOptions(); +// settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; +// settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; +// settings.BlankAfterRegexGroupMatch = true; +// settings.RemoveEmptyLines = true; +// settings.DelimiterFormatting = IncludeToolbox.DelimiterMode.AngleBrackets; +// settings.SlashFormatting = IncludeToolbox.SlashMode.BackSlash; + +// string formatedCode = IncludeFormatter.FormatIncludes("", "filename.cpp", new string[] { }, settings); +// Assert.AreEqual("", formatedCode); +// } + +// [TestMethod] +// public void OtherPreprocessorDirectives() +// { +// string source = +//@"#pragma once +//// SomeComment +//#include ""z"" +//#include + +//#include ""filename.h"" + +//#if test +//#include +//// A comment +//#include ""a9"" +//#include +//#include +//#else +//#include + +//#include // comment +////#endif + +//#include //#endif +//#include +//#include "; -#include -#endif -#include -#include "; +// string expectedFormatedCode = +//@"#pragma once +//// SomeComment +//#include +//#include ""filename.h"" - string expectedFormatedCode = -@"#pragma once -// SomeComment -#include -#include ""filename.h"" +//#include ""z"" -#include ""z"" +//#if test +//#include +//// A comment +//#include +//#include ""a9"" -#if test -#include -// A comment -#include -#include ""a9"" +//#else +//#include -#else -#include +//#include // comment +////#endif -#include // comment +//#include //#endif - -#include -#endif -#include -#include "; - - var settings = new IncludeToolbox.FormatOptions(); - settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; - settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; - settings.BlankAfterRegexGroupMatch = false; - settings.RemoveEmptyLines = false; - - string formatedCode = IncludeFormatter.FormatIncludes(source, "filename.cpp", new string[] { }, settings); - Assert.AreEqual(expectedFormatedCode, formatedCode); - } -} -} +//#include +//#include "; + +// var settings = new IncludeToolbox.FormatOptions(); +// settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; +// settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; +// settings.BlankAfterRegexGroupMatch = false; +// settings.RemoveEmptyLines = false; + +// string formatedCode = IncludeFormatter.FormatIncludes(source, "filename.cpp", new string[] { }, settings); +// Assert.AreEqual(expectedFormatedCode, formatedCode); +// } +//} +//} From 4ee5072b0a9635d7650423774165c23503b39c17 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 16:22:29 +0200 Subject: [PATCH 43/86] removed tests because of dependency resolution inconsistensies --- IncludeToolBox.sln | 24 +- Tests/IncludeFormatingTest.cs | 285 ------------------ Tests/IncludeGraphTest.cs | 227 -------------- Tests/IncludeLineInfoTests.cs | 210 ------------- Tests/IncludeWhatYouUseTests.cs | 16 - Tests/Properties/AssemblyInfo.cs | 20 -- Tests/Tests.csproj | 114 ------- Tests/testdata/includegraph.dgml | 21 -- Tests/testdata/includegraph_grouped.dgml | 34 --- Tests/testdata/includegraph_withcolors.dgml | 21 -- .../includegraph_withcolors_grouped.dgml | 34 --- Tests/testdata/simplegraph.dgml | 17 -- Tests/testdata/source0.cpp | 6 - Tests/testdata/source1.cpp | 1 - Tests/testdata/subdir/inline.inl | 1 - Tests/testdata/subdir/subdir/subsub.h | 1 - Tests/testdata/subdir/testinclude.h | 2 - Tests/testdata/testinclude.h | 1 - 18 files changed, 7 insertions(+), 1028 deletions(-) delete mode 100644 Tests/IncludeFormatingTest.cs delete mode 100644 Tests/IncludeGraphTest.cs delete mode 100644 Tests/IncludeLineInfoTests.cs delete mode 100644 Tests/IncludeWhatYouUseTests.cs delete mode 100644 Tests/Properties/AssemblyInfo.cs delete mode 100644 Tests/Tests.csproj delete mode 100644 Tests/testdata/includegraph.dgml delete mode 100644 Tests/testdata/includegraph_grouped.dgml delete mode 100644 Tests/testdata/includegraph_withcolors.dgml delete mode 100644 Tests/testdata/includegraph_withcolors_grouped.dgml delete mode 100644 Tests/testdata/simplegraph.dgml delete mode 100644 Tests/testdata/source0.cpp delete mode 100644 Tests/testdata/source1.cpp delete mode 100644 Tests/testdata/subdir/inline.inl delete mode 100644 Tests/testdata/subdir/subdir/subsub.h delete mode 100644 Tests/testdata/subdir/testinclude.h delete mode 100644 Tests/testdata/testinclude.h diff --git a/IncludeToolBox.sln b/IncludeToolBox.sln index b8cf73e..7e6935e 100644 --- a/IncludeToolBox.sln +++ b/IncludeToolBox.sln @@ -1,10 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.32630.194 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.32804.182 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{F577F5D2-5E3C-43BE-9030-AF2609A0917A}" -EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IncludeToolboxShared", "IncludeToolboxShared\IncludeToolboxShared.shproj", "{C50C4863-6200-4E51-837A-31FEBC09C8B2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2022", "IncludeToolbox2022\IncludeToolbox2022.csproj", "{7D29CECE-07D3-4417-9D63-1362852F18F3}" @@ -12,11 +10,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2019", "IncludeToolbox2019\IncludeToolbox2019.csproj", "{A81A5332-6A20-4F3B-90B4-E55985B9CF59}" EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - IncludeToolboxShared\IncludeToolboxShared.projitems*{7d29cece-07d3-4417-9d63-1362852f18f3}*SharedItemsImports = 4 - IncludeToolboxShared\IncludeToolboxShared.projitems*{a81a5332-6a20-4f3b-90b4-e55985b9cf59}*SharedItemsImports = 4 - IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 @@ -24,14 +17,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Debug|x86.Build.0 = Debug|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|Any CPU.Build.0 = Release|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|x86.ActiveCfg = Release|Any CPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A}.Release|x86.Build.0 = Release|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|x86.ActiveCfg = Debug|x86 @@ -55,4 +40,9 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {87A2994A-8E27-4066-8C05-7E4DD461D23D} EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + IncludeToolboxShared\IncludeToolboxShared.projitems*{7d29cece-07d3-4417-9d63-1362852f18f3}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{a81a5332-6a20-4f3b-90b4-e55985b9cf59}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 + EndGlobalSection EndGlobal diff --git a/Tests/IncludeFormatingTest.cs b/Tests/IncludeFormatingTest.cs deleted file mode 100644 index edd6778..0000000 --- a/Tests/IncludeFormatingTest.cs +++ /dev/null @@ -1,285 +0,0 @@ -//using System.Linq; -//using Microsoft.VisualStudio.TestTools.UnitTesting; -//using IncludeToolbox.Formatter; - -//namespace Tests -//{ -// [TestClass] -// public class IncludeFormatingTest -// { -// private static string sourceCode_NoBlanks = -//@"#include ""a.h"" -//#include -//#include ""a.h"" -//#include ""filename.h"" -//#include -//#include -//#include -//#include -//#include -//#include "; - -// private static string sourceCode_WithBlanks = -//@"#include ""c_third"" - -//#include ""filename.h"" - -//#include ""z_first"" - -//#include -//#include -//// A comment -//#include ""z_first"" - -//#include -//#include ""filename.h"""; - -// [TestMethod] -// public void Sorting_BlanksAfterRegexGroup() -// { -// // Blanks after groups. -// string expectedFormatedCode_NoBlanks = -//@"#include ""filename.h"" - -//#include -//#include - -//#include ""a.h"" -//#include -//#include - - - -//"; - -// string expectedFormatedCode_WithBlanks = -//@"#include ""filename.h"" - -//#include - -//#include ""c_third"" - -//#include ""z_first"" - -//// A comment - - - -//"; - - -// var settings = new IncludeToolbox.FormatOptions(); -// settings.SortByType = IncludeToolbox.TypeSorting.None; -// settings.PrecedenceRegexes = new string[] -// { -// IncludeToolbox.RegexUtils.CurrentFileNameKey, -// ".+_.+" -// }; -// settings.BlankAfterRegexGroupMatch = true; -// settings.RemoveEmptyLines = false; - - -// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); -// formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); -// } - -// [TestMethod] -// public void Sorting_AngleBracketsFirst() -// { -// // With sort by type. -// string expectedFormatedCode_NoBlanks = -//@"#include -//#include -//#include -//#include -//#include ""filename.h"" -//#include ""a.h"" - - - -//"; - - -// string expectedFormatedCode_WithBlanks = -//@"#include - -//#include ""filename.h"" - -//#include ""c_third"" - -//#include ""z_first"" - -//// A comment - - - -//"; - - -// var settings = new IncludeToolbox.FormatOptions(); -// settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; -// settings.PrecedenceRegexes = new string[] -// { -// IncludeToolbox.RegexUtils.CurrentFileNameKey, -// ".+_.+" -// }; -// settings.BlankAfterRegexGroupMatch = false; -// settings.RemoveEmptyLines = false; - -// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); -// formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); -// } - -// [TestMethod] -// public void Sorting_DontRemoveDuplicates() -// { -// // With sort by type. -// string expectedFormatedCode_NoBlanks = -//@"#include ""filename.h"" - -//#include -//#include -//#include -//#include - -//#include ""a.h"" -//#include ""a.h"" -//#include -//#include -//#include "; - - -// string expectedFormatedCode_WithBlanks = -//@"#include ""filename.h"" -//#include ""filename.h"" - -//#include -//#include -//#include -//// A comment -//#include ""c_third"" -//#include ""z_first"" -//#include ""z_first"""; - - -// var settings = new IncludeToolbox.FormatOptions(); -// settings.SortByType = IncludeToolbox.TypeSorting.None; -// settings.PrecedenceRegexes = new string[] -// { -// IncludeToolbox.RegexUtils.CurrentFileNameKey, -// ".+_.+" -// }; -// settings.BlankAfterRegexGroupMatch = true; -// settings.RemoveEmptyLines = true; -// settings.RemoveDuplicates = false; - -// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_NoBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_NoBlanks, formatedCode); -// formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); -// } - -// [TestMethod] -// public void RemoveEmptyLines() -// { -// string expectedFormatedCode_WithBlanks = -//@"#include ""filename.h"" -//#include -//#include ""c_third"" -//#include ""z_first"" -//// A comment"; - -// var settings = new IncludeToolbox.FormatOptions(); -// settings.SortByType = IncludeToolbox.TypeSorting.None; -// settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; -// settings.BlankAfterRegexGroupMatch = false; -// settings.RemoveEmptyLines = true; - -// string formatedCode = IncludeFormatter.FormatIncludes(sourceCode_WithBlanks, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode_WithBlanks, formatedCode); -// } - -// [TestMethod] -// public void EmptySelection() -// { -// // Activate all features -// var settings = new IncludeToolbox.FormatOptions(); -// settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; -// settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; -// settings.BlankAfterRegexGroupMatch = true; -// settings.RemoveEmptyLines = true; -// settings.DelimiterFormatting = IncludeToolbox.DelimiterMode.AngleBrackets; -// settings.SlashFormatting = IncludeToolbox.SlashMode.BackSlash; - -// string formatedCode = IncludeFormatter.FormatIncludes("", "filename.cpp", new string[] { }, settings); -// Assert.AreEqual("", formatedCode); -// } - -// [TestMethod] -// public void OtherPreprocessorDirectives() -// { -// string source = -//@"#pragma once -//// SomeComment -//#include ""z"" -//#include - -//#include ""filename.h"" - -//#if test -//#include -//// A comment -//#include ""a9"" -//#include -//#include -//#else -//#include - -//#include // comment -////#endif - -//#include -//#endif -//#include -//#include "; - -// string expectedFormatedCode = -//@"#pragma once -//// SomeComment -//#include -//#include ""filename.h"" - -//#include ""z"" - -//#if test -//#include -//// A comment -//#include -//#include ""a9"" - -//#else -//#include - -//#include // comment -////#endif - -//#include -//#endif -//#include -//#include "; - -// var settings = new IncludeToolbox.FormatOptions(); -// settings.SortByType = IncludeToolbox.TypeSorting.AngleBracketsFirst; -// settings.PrecedenceRegexes = new string[] { IncludeToolbox.RegexUtils.CurrentFileNameKey }; -// settings.BlankAfterRegexGroupMatch = false; -// settings.RemoveEmptyLines = false; - -// string formatedCode = IncludeFormatter.FormatIncludes(source, "filename.cpp", new string[] { }, settings); -// Assert.AreEqual(expectedFormatedCode, formatedCode); -// } -//} -//} diff --git a/Tests/IncludeGraphTest.cs b/Tests/IncludeGraphTest.cs deleted file mode 100644 index a94900b..0000000 --- a/Tests/IncludeGraphTest.cs +++ /dev/null @@ -1,227 +0,0 @@ -//using System.Linq; -//using Microsoft.VisualStudio.TestTools.UnitTesting; -//using IncludeToolbox; -//using System.IO; -//using IncludeToolbox.Graph; -//using IncludeToolbox.Formatter; -//using System.Collections.Generic; - -//namespace Tests -//{ -// [TestClass] -// public class IncludeGraphTest -// { -// [TestMethod] -// public void WriteSimpleDGML() -// { -// string filenameTestOutput = "testdata/output.dgml"; -// string filenameComparision= "testdata/simplegraph.dgml"; -// try -// { -// File.Delete(filenameTestOutput); -// } -// catch { } - -// var writer = new DGMLGraph(); -// writer.Nodes.Add(new DGMLGraph.Node { Id = "0", Label = "0" }); -// writer.Nodes.Add(new DGMLGraph.Node { Id = "1", Label = "1label" }); -// writer.Nodes.Add(new DGMLGraph.Node { Id = "2", Label = "2" }); -// writer.Nodes.Add(new DGMLGraph.Node { Id = "3", Label = "3" }); -// writer.Links.Add(new DGMLGraph.Link { Source = "0", Target = "1" }); -// writer.Links.Add(new DGMLGraph.Link { Source = "1", Target = "0", Label = "backlink"}); -// writer.Links.Add(new DGMLGraph.Link { Source = "1", Target = "1", Label = "loop" }); -// writer.Links.Add(new DGMLGraph.Link { Source = "2", Target = "3", }); -// writer.Links.Add(new DGMLGraph.Link { Source = "4", Target = "3", }); -// writer.Links.Add(new DGMLGraph.Link { Source = "2", Target = "0", }); -// writer.Serialize(filenameTestOutput); - -// string expectedFile = File.ReadAllText(filenameComparision); -// string writtenFile = File.ReadAllText(filenameTestOutput); - -// Assert.AreEqual(expectedFile, writtenFile); - -// // For a clean environment! -// File.Delete(filenameTestOutput); -// } - -// [TestMethod] -// public void CustomGraphParse() -// { -// string[] noParseDirectories = new[] { Utils.GetExactPathName("testdata/subdir/subdir") }; - -// IncludeGraph graph = new IncludeGraph(); -// graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source0.cpp"), Enumerable.Empty(), noParseDirectories); -// graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source1.cpp"), Enumerable.Empty(), noParseDirectories); -// graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/testinclude.h"), Enumerable.Empty(), noParseDirectories); // Redundancy shouldn't matter. - -// // Check items. -// Assert.AreEqual(7, graph.GraphItems.Count); -// bool newItem = false; -// var source0 = graph.CreateOrGetItem("testdata/source0.cpp", out newItem); -// Assert.AreEqual(false, newItem); -// var source1 = graph.CreateOrGetItem("testdata/source1.cpp", out newItem); -// Assert.AreEqual(false, newItem); -// var testinclude = graph.CreateOrGetItem("testdata/testinclude.h", out newItem); -// Assert.AreEqual(false, newItem); -// var subdir_testinclude = graph.CreateOrGetItem("testdata/subdir/teStinclude.h", out newItem); -// Assert.AreEqual(false, newItem); -// var subdir_inline = graph.CreateOrGetItem("testdata/subdir/inline.inl", out newItem); -// Assert.AreEqual(false, newItem); -// var subdirsubdir_subsub = graph.CreateOrGetItem("testdata/subdir/subdir/subsub.h", out newItem); -// Assert.AreEqual(false, newItem); -// var broken = graph.CreateOrGetItem("broken!", out newItem); -// Assert.AreEqual(false, newItem); - -// // Check includes in source0. -// Assert.AreEqual(2, source0.Includes.Count); -// Assert.AreEqual(0, source0.Includes[0].IncludeLine.LineNumber); // Different line numbers. -// Assert.AreEqual(5, source0.Includes[1].IncludeLine.LineNumber); -// Assert.AreEqual(subdir_testinclude, source0.Includes[0].IncludedFile); // But point to the same include. -// Assert.AreEqual(subdir_testinclude, source0.Includes[1].IncludedFile); - -// // Check includes in source1. -// Assert.AreEqual(1, source1.Includes.Count); -// Assert.AreEqual(testinclude, source1.Includes[0].IncludedFile); - -// // Check includes in testinclude. -// Assert.AreEqual(1, testinclude.Includes.Count); -// Assert.AreEqual(subdir_testinclude, testinclude.Includes[0].IncludedFile); - -// // Check includes in subdir_testinclude. -// Assert.AreEqual(2, subdir_testinclude.Includes.Count); -// Assert.AreEqual(subdir_inline, subdir_testinclude.Includes[0].IncludedFile); -// Assert.AreEqual(subdirsubdir_subsub, subdir_testinclude.Includes[1].IncludedFile); - -// // Check includes in subdir_inline. -// Assert.AreEqual(1, subdir_inline.Includes.Count); -// Assert.AreEqual(broken, subdir_inline.Includes[0].IncludedFile); -// Assert.AreEqual(true, subdir_inline.Includes[0].IncludeLine.ContainsActiveInclude); - -// // Check includes in subdirsubdir_subsub - should be empty since we have this dir on the ignore list. -// Assert.AreEqual(0, subdirsubdir_subsub.Includes.Count); - -// // Check item representing a unresolved include. -// Assert.AreEqual(0, broken.Includes.Count); -// } - -// private void RemoveAbsolutePathsFromDGML(DGMLGraph dgml, IEnumerable includeDirectories) -// { -// foreach (var item in dgml.Nodes) -// { -// item.Id = IncludeFormatter.FormatPath(item.Id, FormatterOptionsPage.PathMode.Shortest, includeDirectories); -// item.Label = IncludeFormatter.FormatPath(item.Label, FormatterOptionsPage.PathMode.Shortest, includeDirectories); -// } -// foreach (var link in dgml.Links) -// { -// link.Source = IncludeFormatter.FormatPath(link.Source, FormatterOptionsPage.PathMode.Shortest, includeDirectories); -// link.Target = IncludeFormatter.FormatPath(link.Target, FormatterOptionsPage.PathMode.Shortest, includeDirectories); -// } -// } - -// [TestMethod] -// public void CustomGraphParseToDGML_NoGrouping() -// { -// CustomGraphParseToDGML(false); -// } - -// [TestMethod] -// public void CustomGraphParseToDGML_WithGrouping() -// { -// CustomGraphParseToDGML(true); -// } - -// public void CustomGraphParseToDGML(bool grouping) -// { -// string filenameTestOutput = "testdata/output.dgml"; -// string filenameComparision = grouping ? "testdata/includegraph_grouped.dgml" : "testdata/includegraph.dgml"; -// string filenameComparision_color = grouping ? "testdata/includegraph_withcolors_grouped.dgml" : "testdata/includegraph_withcolors.dgml"; - -// string[] noParseDirectories = new[] { Utils.GetExactPathName("testdata/subdir/subdir") }; - -// IncludeGraph graph = new IncludeGraph(); -// graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source0.cpp"), Enumerable.Empty(), noParseDirectories); -// graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source1.cpp"), Enumerable.Empty(), noParseDirectories); - -// // Formatting... -// var includeDirectories = new[] { Path.Combine(System.Environment.CurrentDirectory, "testdata") }; -// foreach (var item in graph.GraphItems) -// item.FormattedName = IncludeFormatter.FormatPath(item.AbsoluteFilename, FormatterOptionsPage.PathMode.Shortest, includeDirectories); - -// // To DGML and save. -// // Since we don't want to have absolute paths in our compare/output dgml we hack the graph before writing it out. -// var dgml = graph.ToDGMLGraph(grouping, true); -// RemoveAbsolutePathsFromDGML(dgml, new[] { System.Environment.CurrentDirectory }); - -// // Without colors. -// { -// dgml.Serialize(filenameTestOutput); -// string expectedFile = File.ReadAllText(filenameComparision); -// string writtenFile = File.ReadAllText(filenameTestOutput); -// Assert.AreEqual(expectedFile, writtenFile); -// } - -// // With colors. -// { -// dgml.ColorizeByTransitiveChildCount(System.Drawing.Color.White, System.Drawing.Color.Black); -// dgml.Serialize(filenameTestOutput); -// string expectedFile = File.ReadAllText(filenameComparision_color); -// string writtenFile = File.ReadAllText(filenameTestOutput); -// Assert.AreEqual(expectedFile, writtenFile); -// } - -// // For a clean environment! -// File.Delete(filenameTestOutput); -// } - -// [TestMethod] -// public void IncludeFolderGrouping() -// { -// IncludeGraph graph = new IncludeGraph(); -// string sourceFile = Utils.GetExactPathName("testdata/source0.cpp"); -// graph.AddIncludesRecursively_ManualParsing(sourceFile, Enumerable.Empty(), new string[] { }); - -// var root = new IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Root(graph.GraphItems, graph.CreateOrGetItem(sourceFile, out bool isNew)); -// var children = root.Children; - -// // Check if tree is as expected. -// { -// Assert.AreEqual(2, children.Count); - -// var unresolvedFolder = children.First(x => x.Name == ""); -// Assert.IsNotNull(unresolvedFolder); -// Assert.IsInstanceOfType(unresolvedFolder, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Folder)); - -// var subdirFolder = children.First(x => x.Name.EndsWith("testdata\\subdir\\")); -// Assert.IsTrue(Path.IsPathRooted(subdirFolder.Name)); -// Assert.IsNotNull(unresolvedFolder); -// Assert.IsInstanceOfType(unresolvedFolder, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Folder)); - -// // subdir folder -// { -// Assert.AreEqual(3, subdirFolder.Children.Count); - -// var testinclude = subdirFolder.Children.First(x => x.Name == "testinclude.h"); -// Assert.IsNotNull(testinclude); -// Assert.IsInstanceOfType(testinclude, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Leaf)); - -// var inline = subdirFolder.Children.First(x => x.Name == "inline.inl"); -// Assert.IsNotNull(inline); -// Assert.IsInstanceOfType(inline, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Leaf)); - -// var subdirsubdirFolder = subdirFolder.Children.First(x => x.Name == "subdir\\"); -// Assert.IsNotNull(subdirsubdirFolder); -// Assert.IsInstanceOfType(subdirsubdirFolder, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Folder)); - -// // subdir\subdir folder -// { -// Assert.AreEqual(1, subdirsubdirFolder.Children.Count); - -// var subsubh = subdirsubdirFolder.Children.First(x => x.Name == "subsub.h"); -// Assert.IsNotNull(subsubh); -// Assert.IsInstanceOfType(subsubh, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Leaf)); -// } -// } -// } -// } -// } -//} diff --git a/Tests/IncludeLineInfoTests.cs b/Tests/IncludeLineInfoTests.cs deleted file mode 100644 index 0786891..0000000 --- a/Tests/IncludeLineInfoTests.cs +++ /dev/null @@ -1,210 +0,0 @@ -using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using IncludeToolbox.Formatter; - -namespace Tests -{ - [TestClass] - public class IncludeLineInfoTests - { - [TestMethod] - public void SimpleParsing() - { - string sourceCode = -@"#include ""test.h"" - #include - - #pragma once - #if -#endif -int main () {}"; - - var parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.None); - Assert.AreEqual(parse.Count, 7); - - Assert.AreEqual("test.h", parse[0].IncludeContent); - Assert.AreEqual("tüst.hpp", parse[1].IncludeContent); - Assert.AreEqual("", parse[2].IncludeContent); - Assert.AreEqual("", parse[3].IncludeContent); - Assert.AreEqual("", parse[4].IncludeContent); - Assert.AreEqual("", parse[5].IncludeContent); - Assert.AreEqual("", parse[6].IncludeContent); - - Assert.AreEqual("#include \"test.h\"", parse[0].RawLine); - Assert.AreEqual(" #include ", parse[1].RawLine); - Assert.AreEqual(" ", parse[2].RawLine); - Assert.AreEqual(" #pragma once", parse[3].RawLine); - Assert.AreEqual(" #if", parse[4].RawLine); - Assert.AreEqual("#endif", parse[5].RawLine); - Assert.AreEqual("int main () {}", parse[6].RawLine); - - Assert.AreEqual(IncludeLineInfo.DelimiterType.Quotes, parse[0].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[1].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[2].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[3].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[4].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[5].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[6].LineDelimiterType); - - Assert.AreEqual(true, parse[0].ContainsPreProcessorDirective); - Assert.AreEqual(true, parse[1].ContainsPreProcessorDirective); - Assert.AreEqual(false, parse[2].ContainsPreProcessorDirective); - Assert.AreEqual(true, parse[3].ContainsPreProcessorDirective); - Assert.AreEqual(true, parse[4].ContainsPreProcessorDirective); - Assert.AreEqual(true, parse[5].ContainsPreProcessorDirective); - Assert.AreEqual(false, parse[6].ContainsPreProcessorDirective); - - - parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(parse.Count, 6); - Assert.AreEqual(0, parse[0].LineNumber); - Assert.AreEqual(1, parse[1].LineNumber); - Assert.AreEqual(3, parse[2].LineNumber); - Assert.AreEqual(4, parse[3].LineNumber); - Assert.AreEqual(5, parse[4].LineNumber); - Assert.AreEqual(6, parse[5].LineNumber); - } - - [TestMethod] - public void SingleLineComments() - { - string sourceCode = -@"// #include -#include "; - - var parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[0].LineDelimiterType); - Assert.AreEqual("", parse[0].IncludeContent); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[1].LineDelimiterType); - Assert.AreEqual("include", parse[1].IncludeContent); - } - - [TestMethod] - public void MultiLineComments() - { - // Technically some of the code here has C++ compile errors since preprocessor must always start before any whitespace. - // But we want to handle this gracefully! - - string sourceCode = "/* test // */ #include "; - var parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[0].LineDelimiterType); - - parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - sourceCode = "#include /* test */ "; - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[0].LineDelimiterType); - - - sourceCode = -@"#include /* -/* #include -sdfsdf // #include -dfdf // */ #include "; - - parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[0].LineDelimiterType); - Assert.AreEqual("there0", parse[0].IncludeContent); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[1].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.None, parse[2].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[3].LineDelimiterType); - Assert.AreEqual("there1", parse[3].IncludeContent); - } - - [TestMethod] - public void PreprocessorConditionals() - { - string sourceCode = -@"/* #if */ #include -#if SomeCondition -#include -//#include -#else -#include -//#endif -/* -#endif -*/ -#include -#endif -#include "; - - var parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines | ParseOptions.IgnoreIncludesInPreprocessorConditionals); - Assert.AreEqual(2, parse.Count(x => x.LineDelimiterType != IncludeLineInfo.DelimiterType.None)); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[0].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[parse.Count - 1].LineDelimiterType); - Assert.AreEqual(0, parse[0].LineNumber); - Assert.AreEqual(1, parse[1].LineNumber); - - parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.KeepOnlyValidIncludes | ParseOptions.IgnoreIncludesInPreprocessorConditionals); - Assert.AreEqual(2, parse.Count); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[0].LineDelimiterType); - Assert.AreEqual(IncludeLineInfo.DelimiterType.AngleBrackets, parse[parse.Count - 1].LineDelimiterType); - Assert.AreEqual(0, parse[0].LineNumber); - Assert.AreEqual(12, parse[1].LineNumber); - - parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(5, parse.Count(x => x.LineDelimiterType != IncludeLineInfo.DelimiterType.None)); - } - - [TestMethod] - public void ResolveIncludes() - { - string sourceCode = -@"#include ""testinclude.h"" -#include <../testinclude.h> -#include -#adsfsdf not a include"; - - string[] includeDirs = - { - "C:/hopefullyyoudonthavethisdir/", - "garbage", - System.Environment.CurrentDirectory, - System.IO.Path.Combine(System.Environment.CurrentDirectory, "testdata/subdir"), - System.IO.Path.Combine(System.Environment.CurrentDirectory, "testdata"), - }; - - var parse = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - - bool successfullyResolved = false; - - string resolvedPath = parse[0].TryResolveInclude(includeDirs, out successfullyResolved); - StringAssert.EndsWith(resolvedPath, "testdata\\subdir\\testinclude.h"); - Assert.AreEqual(true, successfullyResolved); - - resolvedPath = parse[1].TryResolveInclude(includeDirs, out successfullyResolved); - StringAssert.EndsWith(resolvedPath, "testdata\\testinclude.h"); - Assert.AreEqual(true, successfullyResolved); - - resolvedPath = parse[2].TryResolveInclude(includeDirs, out successfullyResolved); - Assert.AreEqual("unresolvable", resolvedPath); - Assert.AreEqual(false, successfullyResolved); - - resolvedPath = parse[3].TryResolveInclude(includeDirs, out successfullyResolved); - Assert.AreEqual("", resolvedPath); - Assert.AreEqual(false, successfullyResolved); - } - - [TestMethod] - public void MixedLineEndings() - { - // The end of this string is tricky as it adds a 3 newlines: \r\n (win), \n (unix), \r (mac old) - string sourceCode = "#include \n#include \r\n#include \r#include \r\n\n\r"; - var parseWithoutEmpty = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(4, parseWithoutEmpty.Count); - var parseWithEmpty = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.None); - Assert.AreEqual(6, parseWithEmpty.Count); - } - - [TestMethod] - public void PreserveFlag() - { - string testCode = @"#include // $include-toolbox-preserve$ -#include ""test"""; - - var parsedLines = IncludeLineInfo.ParseIncludes(testCode, ParseOptions.RemoveEmptyLines); - Assert.AreEqual(2, parsedLines.Count); - Assert.IsTrue(parsedLines[0].ShouldBePreserved); - Assert.IsFalse(parsedLines[1].ShouldBePreserved); - } - } -} diff --git a/Tests/IncludeWhatYouUseTests.cs b/Tests/IncludeWhatYouUseTests.cs deleted file mode 100644 index c45ac64..0000000 --- a/Tests/IncludeWhatYouUseTests.cs +++ /dev/null @@ -1,16 +0,0 @@ -using IncludeToolbox.IncludeWhatYouUse; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Linq; -using System.IO; -using System.Threading; -using System.Threading.Tasks; - -namespace Tests -{ - [TestClass] - public class IncludeWhatYouUseTests - { - - } -} diff --git a/Tests/Properties/AssemblyInfo.cs b/Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index 26c284a..0000000 --- a/Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -[assembly: AssemblyTitle("Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Tests")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -[assembly: ComVisible(false)] - -[assembly: Guid("b31c729a-9cf7-4dde-8c93-6a671d21807a")] - -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj deleted file mode 100644 index 20876e2..0000000 --- a/Tests/Tests.csproj +++ /dev/null @@ -1,114 +0,0 @@ - - - - - Debug - AnyCPU - {F577F5D2-5E3C-43BE-9030-AF2609A0917A} - Library - Properties - Tests - Tests - v4.8 - 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 - - - - - - - - - - - - - - - - 16.10.31321.278 - - - 17.3.2088 - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - 1.3.2 - - - 1.3.2 - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - {7d29cece-07d3-4417-9d63-1362852f18f3} - IncludeToolbox2022 - - - - - \ No newline at end of file diff --git a/Tests/testdata/includegraph.dgml b/Tests/testdata/includegraph.dgml deleted file mode 100644 index c15641c..0000000 --- a/Tests/testdata/includegraph.dgml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tests/testdata/includegraph_grouped.dgml b/Tests/testdata/includegraph_grouped.dgml deleted file mode 100644 index 3c5c294..0000000 --- a/Tests/testdata/includegraph_grouped.dgml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tests/testdata/includegraph_withcolors.dgml b/Tests/testdata/includegraph_withcolors.dgml deleted file mode 100644 index b266934..0000000 --- a/Tests/testdata/includegraph_withcolors.dgml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tests/testdata/includegraph_withcolors_grouped.dgml b/Tests/testdata/includegraph_withcolors_grouped.dgml deleted file mode 100644 index 7f6f9a2..0000000 --- a/Tests/testdata/includegraph_withcolors_grouped.dgml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tests/testdata/simplegraph.dgml b/Tests/testdata/simplegraph.dgml deleted file mode 100644 index 086d2bf..0000000 --- a/Tests/testdata/simplegraph.dgml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tests/testdata/source0.cpp b/Tests/testdata/source0.cpp deleted file mode 100644 index a5e6898..0000000 --- a/Tests/testdata/source0.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "subdir/testinclude.h" -/* -// commented includes shouldn't throw off the system of course -#include "testinclude.h" -*/ -#include // Same again! Weird, but happens. \ No newline at end of file diff --git a/Tests/testdata/source1.cpp b/Tests/testdata/source1.cpp deleted file mode 100644 index cf190fc..0000000 --- a/Tests/testdata/source1.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "testinclude.h" \ No newline at end of file diff --git a/Tests/testdata/subdir/inline.inl b/Tests/testdata/subdir/inline.inl deleted file mode 100644 index e869fc1..0000000 --- a/Tests/testdata/subdir/inline.inl +++ /dev/null @@ -1 +0,0 @@ -#include "broken!" \ No newline at end of file diff --git a/Tests/testdata/subdir/subdir/subsub.h b/Tests/testdata/subdir/subdir/subsub.h deleted file mode 100644 index a541129..0000000 --- a/Tests/testdata/subdir/subdir/subsub.h +++ /dev/null @@ -1 +0,0 @@ -#include "../inline.inl" \ No newline at end of file diff --git a/Tests/testdata/subdir/testinclude.h b/Tests/testdata/subdir/testinclude.h deleted file mode 100644 index a07ab36..0000000 --- a/Tests/testdata/subdir/testinclude.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "inline.inl" -#include "subdir/subsub.h" \ No newline at end of file diff --git a/Tests/testdata/testinclude.h b/Tests/testdata/testinclude.h deleted file mode 100644 index e54b610..0000000 --- a/Tests/testdata/testinclude.h +++ /dev/null @@ -1 +0,0 @@ -#include \ No newline at end of file From a96b6b4a132104b929b6abac0e019d2fd02f8b0d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 16:35:50 +0200 Subject: [PATCH 44/86] quick version fix fixed IWYU formatting usage --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- IncludeToolboxShared/IWYU/IWYUApply.cs | 5 +++-- IncludeToolboxShared/Util/ParseIncludes.cs | 5 ----- 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 8941924..765977a 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.0.0"; + public const string Version = "3.1.0"; public const string Author = "Agrael"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index b7a3921..97ff51f 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 230965c..07ca242 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.0.0"; + public const string Version = "3.1.0"; public const string Author = "Agrael"; public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 1deb3f8..00f1bbd 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index aa88f86..ac236d3 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -36,14 +36,15 @@ public static async Task FormatAsync(DocumentView doc) using var edit = doc.TextBuffer.CreateEdit(); var text = edit.Snapshot.GetText(); var span = IWYUApply.GetIncludeSpan(text); + var slice = text.Substring(span.Start, span.Length); var result = Formatter.IncludeFormatter.FormatIncludes( - text.AsSpan().Slice(span.Start, span.Length), + slice.AsSpan(), doc.FilePath, include_directories, settings ); - Formatter.IncludeFormatter.ApplyChanges(result, edit, text, span.Start); + Formatter.IncludeFormatter.ApplyChanges(result, edit, slice, span.Start); edit.Apply(); } diff --git a/IncludeToolboxShared/Util/ParseIncludes.cs b/IncludeToolboxShared/Util/ParseIncludes.cs index 5796e3a..473c101 100644 --- a/IncludeToolboxShared/Util/ParseIncludes.cs +++ b/IncludeToolboxShared/Util/ParseIncludes.cs @@ -8,11 +8,6 @@ namespace IncludeToolbox { - public struct Addition - { - public string value; - public int pos; - } public struct IncludeLine { public string file = ""; From e9fa3e5a7e136631ea4d71bdc198c60c0b61f4e2 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 19:11:47 +0200 Subject: [PATCH 45/86] newline fixes --- IncludeToolboxShared/IWYU/IWYUApply.cs | 18 ++++++++++++------ IncludeToolboxShared/Util/NamespaceTree.cs | 8 +++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index ac236d3..9267851 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -25,7 +25,7 @@ public static Span GetIncludeSpan(string text) { int[] line = new int[2]; line[0] = text.IndexOf("#include"); //first - line[1] = text.IndexOf("\n", text.LastIndexOf("#include")) - line[0]; //last + line[1] = text.IndexOf("\n", text.LastIndexOf("#include")) - line[0] + 1; //last return new Span(line[0], line[1]); } @@ -127,7 +127,16 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p var rem_i = retasks.Includes.Where(s => s.span.begin > sep_index); - DeclNode tree = new(Lexer.TType.Namespace); + foreach (var item in add_i) + { + edit.Insert(parsed.LastInclude, lb + item.span.str(output)); + } + + DeclNode tree = new(Lexer.TType.Namespace) + { + LineBreak = lb + }; + if (settings.MoveDecls) { tree.AddChildren(parsed.Declarations.Where(s => !rem_f.Contains(s))); @@ -140,10 +149,7 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p edit.Insert(parsed.LastInclude, lb + result); - foreach (var item in add_i) - { - edit.Insert(parsed.LastInclude, lb + item.span.str(output)); - } + if (!settings.MoveDecls) foreach (var task in rem_f) { diff --git a/IncludeToolboxShared/Util/NamespaceTree.cs b/IncludeToolboxShared/Util/NamespaceTree.cs index 984b0e4..76da6db 100644 --- a/IncludeToolboxShared/Util/NamespaceTree.cs +++ b/IncludeToolboxShared/Util/NamespaceTree.cs @@ -10,6 +10,8 @@ public class DeclNode private readonly TType _type; private readonly Dictionary _children = new(); + public string LineBreak { get; set; } = "\n"; + public DeclNode(TType ty = TType.Null) { _type = ty; @@ -55,14 +57,14 @@ private string ToString(bool c17, string s) { var o = ""; if (_type != TType.Namespace) - return $"{Type()} {s};\n"; + return $"{Type()} {s};" + LineBreak; if (c17 && _children.Count == 1 && _children.First().Value._type == TType.Namespace) - return $"namespace {s}::{ new string(_children.First().Value.ToString(c17, _children.First().Key).Skip(10).ToArray())}\n"; + return $"namespace {s}::{ new string(_children.First().Value.ToString(c17, _children.First().Key).Skip(10).ToArray())}" + LineBreak; foreach (var item in _children) o += '\t' + item.Value.ToString(c17, item.Key); - return $"namespace {s}\n{{\n{o}}}\n"; + return $"namespace {s}{LineBreak}{{{LineBreak}{o}}}{LineBreak}"; } public string ToString(bool c17) { From be2ff265e853c626ccb7d1253bce6cd85fb6d804 Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 19:13:54 +0200 Subject: [PATCH 46/86] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cf28a40..243a951 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,7 +60,7 @@ jobs: path: /_built/**/*.vsix publish: - if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && contains(github.event.head_commit.message, '[release]' }} needs: build runs-on: windows-latest From 16c619b22994757545945d386ea0c24589d72d77 Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 19:15:13 +0200 Subject: [PATCH 47/86] ) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 243a951..07e0f5f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,7 +60,7 @@ jobs: path: /_built/**/*.vsix publish: - if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && contains(github.event.head_commit.message, '[release]' }} + if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && contains(github.event.head_commit.message, '[release]') }} needs: build runs-on: windows-latest From 4ba03f8ef8a73e65c197127657a21dd3bdce5b1f Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 19:54:37 +0200 Subject: [PATCH 48/86] [release] release with new feature --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11953ac..3697a50 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Include Toolbox +# Include Toolbox +[![Build](https://github.com/Agrael1/IncludeToolbox/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/Agrael1/IncludeToolbox/actions/workflows/main.yml) + **_Tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning._** Include Toolbox consists of 4 different tools. All of them are only applicable to VC++ projects. @@ -110,7 +112,9 @@ Requires fixes. Look in the output window for Include Toolbox to get more information. # Version History - +* 3.1.0 + * New Include Format parsing, performed using project Lexer + * Small fixes and DTE reduction * 3.0.0 * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. * Refactoring of IWYU, new code and new feature set. From 18e60ab36f3fd96b96be8e4aec55d4a4d5ebd68d Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 21:13:16 +0200 Subject: [PATCH 49/86] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 07e0f5f..b083d9a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: nuget: 'false' sdk: 'false' msbuild: 'true' - + - name: Increment VSIX version id: vsix_version uses: timheuer/vsix-version-stamp@v1 From 4349a2949935dddd5af1737e69bfa9702e91942c Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 21:14:53 +0200 Subject: [PATCH 50/86] [release] final touches --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3697a50..880f739 100644 --- a/README.md +++ b/README.md @@ -112,10 +112,11 @@ Requires fixes. Look in the output window for Include Toolbox to get more information. # Version History -* 3.1.0 +* 3.1.22 * New Include Format parsing, performed using project Lexer * Small fixes and DTE reduction -* 3.0.0 +* 3.0.0 + * Versions have new pattern (enforced by github pipelines) Major.Minor.Build, the build number does not decrease. * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. * Refactoring of IWYU, new code and new feature set. * Some features are dropped for now, until fixed. From cc5470951fc0836254d6949c39771fde243765f6 Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 21:24:09 +0200 Subject: [PATCH 51/86] fixed internal name --- vs-publish.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vs-publish.json b/vs-publish.json index c33ac41..06579b9 100644 --- a/vs-publish.json +++ b/vs-publish.json @@ -2,7 +2,7 @@ "$schema": "http://json.schemastore.org/vsix-publish", "categories": [ "other", "coding" ], "identity": { - "internalName": "InsertGuid", + "internalName": "IncludeToolbox", "tags": [ "C", "C++", "include", "iwyu", "formatting", "code", "include what you use"] }, "assetFiles": [ From e2c32703e8612ec1a7ee0bf33db35af44e8d7bdd Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 21:32:00 +0200 Subject: [PATCH 52/86] tag short --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 765977a..e2c80a8 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -13,6 +13,6 @@ internal sealed partial class Vsix public const string Language = "en-US"; public const string Version = "3.1.0"; public const string Author = "Agrael"; - public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; + public const string Tags = "Include, IWYU, Include Formatting, Include Sorting, #include"; } } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 97ff51f..2fe3685 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -8,7 +8,7 @@ License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png - Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal + Include, IWYU, Include Formatting, Include Sorting, #include diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 07ca242..712c68e 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -13,6 +13,6 @@ internal sealed partial class Vsix public const string Language = "en-US"; public const string Version = "3.1.0"; public const string Author = "Agrael"; - public const string Tags = "Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal"; + public const string Tags = "Include, IWYU, Include Formatting, Include Sorting, #include"; } } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 00f1bbd..e2ebe51 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -8,7 +8,7 @@ License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png - Include, Include What You Use, IWYU, Include Formatting, Include Sorting, #include, Include Removal + Include, IWYU, Include Formatting, Include Sorting, #include From 1810d5289515143bf6a3d41386555c76c85b7dbc Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 21:42:57 +0200 Subject: [PATCH 53/86] [release] pipeline fix --- .github/workflows/main.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b083d9a..7058bf3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,7 +60,7 @@ jobs: path: /_built/**/*.vsix publish: - if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && contains(github.event.head_commit.message, '[release]') }} + if: ${{ (github.event_name == 'push' && contains(github.event.head_commit.message, '[release]')) || github.event_name == 'workflow_dispatch' }} needs: build runs-on: windows-latest @@ -83,7 +83,6 @@ jobs: vsix-file: ${{ github.event.repository.name }}2019.vsix - name: Tag and Release - if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} id: tag_release uses: softprops/action-gh-release@v1 with: @@ -93,7 +92,6 @@ jobs: **/*.vsix - name: Publish 2022 extension to Marketplace - if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} uses: cezarypiatek/VsixPublisherAction@0.2 with: extension-file: '${{ github.event.repository.name }}2022.vsix' @@ -101,7 +99,6 @@ jobs: personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} - name: Publish 2019 extension to Marketplace - if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[release]') }} uses: cezarypiatek/VsixPublisherAction@0.2 with: extension-file: '${{ github.event.repository.name }}2019.vsix' From 576dc21d1ab285a1ff6222b972179db3004ad7e0 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sun, 21 Aug 2022 21:54:56 +0200 Subject: [PATCH 54/86] [release] vsix schema --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index e2c80a8..da45aff 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -13,6 +13,6 @@ internal sealed partial class Vsix public const string Language = "en-US"; public const string Version = "3.1.0"; public const string Author = "Agrael"; - public const string Tags = "Include, IWYU, Include Formatting, Include Sorting, #include"; + public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 2fe3685..9e501cd 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -8,7 +8,7 @@ License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png - Include, IWYU, Include Formatting, Include Sorting, #include + Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 712c68e..a8c3c0c 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -13,6 +13,6 @@ internal sealed partial class Vsix public const string Language = "en-US"; public const string Version = "3.1.0"; public const string Author = "Agrael"; - public const string Tags = "Include, IWYU, Include Formatting, Include Sorting, #include"; + public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index e2ebe51..976f14c 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -8,7 +8,7 @@ License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png - Include, IWYU, Include Formatting, Include Sorting, #include + Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding From cd0b00a2fe057c300ffa119ed4e9b6496e69e82c Mon Sep 17 00:00:00 2001 From: Agrael Date: Sun, 21 Aug 2022 22:02:48 +0200 Subject: [PATCH 55/86] [release] fixed readme --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 880f739..d9818bd 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,9 @@ The behavior of this command is controlled by various options which can be confi Optionally change "" to <> or vice versa * Slash Mode Optionally changes / to \ or vice versa - * Remove Empty Lines + * Remove Empty Lines Optionally removes empty lines within the selection + * Path Reformatting * Ignore File Relative If true, the local file path will not be considered for reformatting the path @@ -39,6 +40,8 @@ The behavior of this command is controlled by various options which can be confi Every line gives a regex - if an include matches a regex, it has precedence over all other includes that do not match any, or a later regex. Multiple includes that match the same regex are still alphabetically sorted. * Sort by Include Type Optionally puts all inclues with either quotes or angle brackets first. + * Remove duplicates + Removes duplicate headers. May be suppressed using `//IWYU pragma: keep` e.g. for maintaining strong ordering dependency All operations are performed in the order in which they occur on the option page. @@ -58,7 +61,7 @@ The exact behavior of this command can be controlled in _Tools>Options>Include T * Removal Order Wheater the tool should run from top to bottom or bottom to top (this can make a difference on the end result) -To suppress removal of a single include, add a comment to its line containin_g_ _$include-toolbox-preserve$_ +To suppress removal of a single include, add a comment to its line containing _$include-toolbox-preserve$_ ## Include-What-You-Use Integration @@ -115,6 +118,7 @@ Requires fixes. * 3.1.22 * New Include Format parsing, performed using project Lexer * Small fixes and DTE reduction + * Unified formatting pragma for duplicate removal * 3.0.0 * Versions have new pattern (enforced by github pipelines) Major.Minor.Build, the build number does not decrease. * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. From 7d286b3796a2d646ebef52e5349884d8cf6559ff Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Mon, 22 Aug 2022 12:26:06 +0200 Subject: [PATCH 56/86] moved Header span to utilities, added additional ReadOnlySpan version --- IncludeToolboxShared/Commands/GenMap.cs | 13 ++++++------- IncludeToolboxShared/IWYU/IWYUApply.cs | 12 ++---------- IncludeToolboxShared/Util/Utils.cs | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/IncludeToolboxShared/Commands/GenMap.cs b/IncludeToolboxShared/Commands/GenMap.cs index 64675ad..08e56e2 100644 --- a/IncludeToolboxShared/Commands/GenMap.cs +++ b/IncludeToolboxShared/Commands/GenMap.cs @@ -24,13 +24,12 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) var path = doc.FilePath; var relative_path = settings.Prefix != "" ? Utils.MakeRelative(settings.Prefix, path) : path; relative_path = relative_path.Replace('\\', '/'); + var snap = doc.TextBuffer.CurrentSnapshot; - var sresult = Formatter.IncludeLineInfo.ParseIncludes( new Microsoft.VisualStudio.Text.SnapshotSpan( - snap - , 0, snap.Length), - Formatter.ParseOptions.KeepOnlyValidIncludes | - (settings.Ignoreifdefs ? Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals : 0)) + var text = snap.GetText(); + + var sresult = Parser.ParseInclues(Utils.GetIncludeSpanRO(text), settings.Ignoreifdefs) .Distinct(); string file_map = ""; @@ -50,11 +49,11 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) switch (settings.Preference) { case MappingPreference.Quotes: - file_map += string.Format("\t{{ include: [ \"{0}\", public, \"\\\"{1}\\\"\", public ] }},\n", match.GetIncludeContentWithDelimiters().Replace('\\', '/'), relative_path); + file_map += string.Format("\t{{ include: [ \"{0}\", public, \"\\\"{1}\\\"\", public ] }},\n", match.file.Replace('\\', '/'), relative_path); break; default: case MappingPreference.AngleBrackets: - file_map += string.Format("\t{{ include: [ \"{0}\", public, \"<{1}>\", public ] }},\n", match.GetIncludeContentWithDelimiters().Replace('\\', '/'), relative_path); + file_map += string.Format("\t{{ include: [ \"{0}\", public, \"<{1}>\", public ] }},\n", match.file.Replace('\\', '/'), relative_path); break; } settings.Map.Map[relative_path] = file_map; diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 9267851..631e5e1 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -21,21 +21,13 @@ public static void ClearNamespaces(ITextEdit edit) edit.Apply(); } - public static Span GetIncludeSpan(string text) - { - int[] line = new int[2]; - line[0] = text.IndexOf("#include"); //first - line[1] = text.IndexOf("\n", text.LastIndexOf("#include")) - line[0] + 1; //last - return new Span(line[0], line[1]); - } - public static async Task FormatAsync(DocumentView doc) { var include_directories = await VCUtil.GetIncludeDirsAsync(); var settings = await FormatOptions.GetLiveInstanceAsync(); using var edit = doc.TextBuffer.CreateEdit(); var text = edit.Snapshot.GetText(); - var span = IWYUApply.GetIncludeSpan(text); + var span = Utils.GetIncludeSpan(text); var slice = text.Substring(span.Start, span.Length); var result = Formatter.IncludeFormatter.FormatIncludes( @@ -64,7 +56,7 @@ public static void ApplyCheap(ITextEdit edit, string result, bool commentary) return str; }).ToArray()); } - var span = GetIncludeSpan(edit.Snapshot.GetText()); + var span = Utils.GetIncludeSpan(edit.Snapshot.GetText()); edit.Replace(span, result); } diff --git a/IncludeToolboxShared/Util/Utils.cs b/IncludeToolboxShared/Util/Utils.cs index dfe6ea6..c194a21 100644 --- a/IncludeToolboxShared/Util/Utils.cs +++ b/IncludeToolboxShared/Util/Utils.cs @@ -27,6 +27,23 @@ internal static string GetLineBreak(ITextSnapshot snapshot) return snapshot.Lines.ElementAt(0).GetLineBreakText(); //if there is some way to retreive interface of nl counter, I'll use it } + public static Span GetIncludeSpan(string text) + { + int[] line = new int[2]; + line[0] = text.IndexOf("#include"); //first + line[1] = text.IndexOf("\n", text.LastIndexOf("#include")) - line[0] + 1; //last + return new Span(line[0], line[1]); + } + + public static ReadOnlySpan GetIncludeSpanRO(string text) + { + int[] line = new int[2]; + line[0] = text.IndexOf("#include"); //first + line[1] = text.IndexOf("\n", text.LastIndexOf("#include")) - line[0] + 1; //last + return text.AsSpan(line[0], line[1]); + } + + public static string MakeRelative(string absoluteRoot, string absoluteTarget) { Uri rootUri, targetUri; From c92b3644947c762fd078d273913699e057ba5497 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 25 Aug 2022 22:38:46 +0200 Subject: [PATCH 57/86] [release]Refactored trial and error Added parser tests Added Testing to the pipeline steps --- .github/workflows/main.yml | 10 +- IncludeToolBox.lutconfig | 6 + IncludeToolBox.sln | 10 + .../source.extension.vsixmanifest | 1 - IncludeToolbox2022/IncludeToolbox2022.csproj | 1 + .../source.extension.vsixmanifest | 1 - .../Commands/FormatIncludes.cs | 1 - IncludeToolboxShared/Commands/GenMap.cs | 5 +- IncludeToolboxShared/Commands/RemoveMap.cs | 1 - IncludeToolboxShared/Commands/RunIWYU.cs | 1 - .../Commands/RunIWYUProject.cs | 1 - .../TrialAndErrorRemoval_CodeWindow.cs | 10 +- .../Commands/TrialAndErrorRemoval_Project.cs | 188 +++------- .../Formatter/IncludeLineInfo.cs | 339 ------------------ IncludeToolboxShared/IWYU/IWYU.cs | 16 +- IncludeToolboxShared/IWYU/IWYUDownload.cs | 1 - .../IncludeFormatter.cs | 6 +- .../Implementation/TrialAndErrorRemoval.cs | 217 +++++++++++ IncludeToolboxShared/IncludeToolboxPackage.cs | 7 +- .../IncludeToolboxShared.projitems | 7 +- .../Options/TrialAndErrorRemovalOptions.cs | 5 + .../Options/ViewerOptionsPage.cs | 167 +++------ IncludeToolboxShared/Util/EmptyNS.cs | 16 +- IncludeToolboxShared/Util/Lexer.cs | 59 ++- IncludeToolboxShared/Util/ParseIncludes.cs | 93 +++-- IncludeToolboxShared/Util/Parser.cs | 28 +- IncludeToolboxShared/Util/Standard.cs | 6 +- .../Util/TrialAndErrorRemoval.cs | 323 ----------------- IncludeToolboxShared/Util/Utils.cs | 9 +- IncludeToolboxShared/Util/VCHelper.cs | 223 ------------ IncludeToolboxShared/Util/VCUtil.cs | 38 +- IncludeToolboxShared/Util/VSUtils.cs | 159 -------- README.md | 125 +------ Tests/Tests/IncludeParseTests.cs | 74 ++++ Tests/Tests/LexTests.cs | 72 ++++ Tests/Tests/Tests.csproj | 24 ++ Tests/Tests/Usings.cs | 1 + doc/changelog.md | 120 +++++++ 38 files changed, 825 insertions(+), 1546 deletions(-) create mode 100644 IncludeToolBox.lutconfig delete mode 100644 IncludeToolboxShared/Formatter/IncludeLineInfo.cs rename IncludeToolboxShared/{Formatter => Implementation}/IncludeFormatter.cs (98%) create mode 100644 IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs delete mode 100644 IncludeToolboxShared/Util/TrialAndErrorRemoval.cs delete mode 100644 IncludeToolboxShared/Util/VCHelper.cs delete mode 100644 IncludeToolboxShared/Util/VSUtils.cs create mode 100644 Tests/Tests/IncludeParseTests.cs create mode 100644 Tests/Tests/LexTests.cs create mode 100644 Tests/Tests/Tests.csproj create mode 100644 Tests/Tests/Usings.cs create mode 100644 doc/changelog.md diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7058bf3..09bc529 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,11 +47,11 @@ jobs: - name: Build run: msbuild /v:m -restore /p:OutDir=\_built - # - name: Setup test - # uses: darenm/Setup-VSTest@v1 - # - # - name: Test - # run: vstest.console.exe \_built\*Test.dll + - name: Setup test + uses: darenm/Setup-VSTest@v1 + + - name: Test + run: vstest.console.exe \_built\*Test.dll - name: Upload artifact uses: actions/upload-artifact@v2 diff --git a/IncludeToolBox.lutconfig b/IncludeToolBox.lutconfig new file mode 100644 index 0000000..596a860 --- /dev/null +++ b/IncludeToolBox.lutconfig @@ -0,0 +1,6 @@ + + + true + true + 180000 + \ No newline at end of file diff --git a/IncludeToolBox.sln b/IncludeToolBox.sln index 7e6935e..c0c1085 100644 --- a/IncludeToolBox.sln +++ b/IncludeToolBox.sln @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2022", "Inclu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2019", "IncludeToolbox2019\IncludeToolbox2019.csproj", "{A81A5332-6A20-4F3B-90B4-E55985B9CF59}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests\Tests.csproj", "{34631D93-26A2-4682-8C7C-B2042CD7D872}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,6 +35,14 @@ Global {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|Any CPU.Build.0 = Release|Any CPU {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|x86.ActiveCfg = Release|x86 {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|x86.Build.0 = Release|x86 + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|x86.ActiveCfg = Debug|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|x86.Build.0 = Debug|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|Any CPU.Build.0 = Release|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|x86.ActiveCfg = Release|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 9e501cd..4dd9f6c 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -4,7 +4,6 @@ Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. - https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png diff --git a/IncludeToolbox2022/IncludeToolbox2022.csproj b/IncludeToolbox2022/IncludeToolbox2022.csproj index 9f5fd1d..ae2a2e2 100644 --- a/IncludeToolbox2022/IncludeToolbox2022.csproj +++ b/IncludeToolbox2022/IncludeToolbox2022.csproj @@ -103,6 +103,7 @@ + diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 976f14c..ae5ba4e 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -4,7 +4,6 @@ Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. - https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png diff --git a/IncludeToolboxShared/Commands/FormatIncludes.cs b/IncludeToolboxShared/Commands/FormatIncludes.cs index 4d9e885..7e66508 100644 --- a/IncludeToolboxShared/Commands/FormatIncludes.cs +++ b/IncludeToolboxShared/Commands/FormatIncludes.cs @@ -6,7 +6,6 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands diff --git a/IncludeToolboxShared/Commands/GenMap.cs b/IncludeToolboxShared/Commands/GenMap.cs index 08e56e2..fe6e772 100644 --- a/IncludeToolboxShared/Commands/GenMap.cs +++ b/IncludeToolboxShared/Commands/GenMap.cs @@ -1,7 +1,6 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; using System.Linq; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { @@ -49,11 +48,11 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) switch (settings.Preference) { case MappingPreference.Quotes: - file_map += string.Format("\t{{ include: [ \"{0}\", public, \"\\\"{1}\\\"\", public ] }},\n", match.file.Replace('\\', '/'), relative_path); + file_map += string.Format("\t{{ include: [ \"{0}\", public, \"\\\"{1}\\\"\", public ] }},\n", match.FullFile.Replace('\\', '/'), relative_path); break; default: case MappingPreference.AngleBrackets: - file_map += string.Format("\t{{ include: [ \"{0}\", public, \"<{1}>\", public ] }},\n", match.file.Replace('\\', '/'), relative_path); + file_map += string.Format("\t{{ include: [ \"{0}\", public, \"<{1}>\", public ] }},\n", match.FullFile.Replace('\\', '/'), relative_path); break; } settings.Map.Map[relative_path] = file_map; diff --git a/IncludeToolboxShared/Commands/RemoveMap.cs b/IncludeToolboxShared/Commands/RemoveMap.cs index 147dcb1..1d720d6 100644 --- a/IncludeToolboxShared/Commands/RemoveMap.cs +++ b/IncludeToolboxShared/Commands/RemoveMap.cs @@ -2,7 +2,6 @@ using Microsoft.VisualStudio.Shell; using System.Threading.Tasks; using System; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index 20c8a45..c079825 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using static System.Net.WebRequestMethods; using File = System.IO.File; -using Task = System.Threading.Tasks.Task; diff --git a/IncludeToolboxShared/Commands/RunIWYUProject.cs b/IncludeToolboxShared/Commands/RunIWYUProject.cs index 0a7523b..294b94a 100644 --- a/IncludeToolboxShared/Commands/RunIWYUProject.cs +++ b/IncludeToolboxShared/Commands/RunIWYUProject.cs @@ -8,7 +8,6 @@ using System.Linq; using System.Text.RegularExpressions; using File = System.IO.File; -using Task = System.Threading.Tasks.Task; diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs index e810be6..155fa23 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs @@ -1,6 +1,5 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands { @@ -17,9 +16,12 @@ protected override Task InitializeCompletedAsync() protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) { - var document = VCUtil.GetDTE().ActiveDocument; - if (document != null) - await impl.PerformTrialAndErrorIncludeRemovalAsync(document); + var x = await VS.Solutions.GetActiveItemAsync(); + if (x.Type != SolutionItemType.PhysicalFile) return; + _ = Output.WriteLineAsync($"Starting Trial And Error Include removal on {x.FullPath}"); + string err = await impl.StartAsync((PhysicalFile)x, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); + if (string.IsNullOrEmpty(err)) return; + _ = Output.WriteLineAsync(err); } } } \ No newline at end of file diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs index 92dcc80..abcf41d 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs @@ -1,183 +1,97 @@ using Community.VisualStudio.Toolkit; -using EnvDTE; -using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; -using Project = EnvDTE.Project; +using Project = Community.VisualStudio.Toolkit.Project; namespace IncludeToolbox.Commands { - /// - /// Command handler - /// - internal sealed class TrialAndErrorRemoval_Project : BaseCommand + internal class TAERDispatcher { - private TrialAndErrorRemoval impl; - private ProjectItems projectItems = null; - private int numTotalRemovedIncludes = 0; - private Queue projectFiles = new(); - - protected override Task InitializeCompletedAsync() - { - impl = new TrialAndErrorRemoval(); - impl.OnFileFinished += OnDocumentIncludeRemovalFinished; - return Task.CompletedTask; - } + public Queue files = new(); + public int numTotalRemovedIncludes = 0; + readonly TrialAndErrorRemoval impl = new(); - private void OnDocumentIncludeRemovalFinished(int removedIncludes, bool canceled) - { - _ = Task.Run(async () => - { - numTotalRemovedIncludes += removedIncludes; - if (canceled || !await ProcessNextFile()) - { - _ = VS.MessageBox.ShowConfirmAsync(string.Format("Removed total of {0} #include directives from project.", numTotalRemovedIncludes)); - numTotalRemovedIncludes = 0; - } - }); - } - protected override void BeforeQueryStatus(EventArgs e) - { - ThreadHelper.ThrowIfNotOnUIThread(); - var project = GetSelectedCppProject(out _); - Command.Visible = project != null; - } - - static Project GetSelectedCppProject(out string reasonForFailure) + public void FindFiles(SolutionItem project) { - ThreadHelper.ThrowIfNotOnUIThread(); - - reasonForFailure = ""; - - var selectedItems = VSUtils.GetDTE().SelectedItems; - if (selectedItems.Count < 1) - { - reasonForFailure = "Selection is empty!"; - return null; - } - - // Reading .Item(object) behaves weird, but iterating works. - foreach (SelectedItem item in selectedItems) + foreach (var item in project.Children) { - Project vcProject = item?.Project; - if (VSUtils.VCUtils.IsVCProject(vcProject)) + switch (item.Type) { - return vcProject; + case SolutionItemType.PhysicalFile: + files.Enqueue(item); + break; + case SolutionItemType.VirtualFolder: + case SolutionItemType.PhysicalFolder: + FindFiles(item); + break; + default: + break; } } - - reasonForFailure = "Selection does not contain a C++ project!"; - return null; } - private async Task ProcessNextFile() + public async Task ProcessAsync() { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - while (projectFiles.Count > 0) + foreach (PhysicalFile item in files.Where(s=>((VCFile)s.ToVCProjectItemAsync()).FileType == eFileType.eFileTypeCppCode).Cast()) { - ProjectItem projectItem = projectFiles.Dequeue(); - - Document document = null; - try - { - document = projectItem.Open().Document; - } - catch (Exception) - { - } - if (document == null) - continue; - - bool started = await impl.PerformTrialAndErrorIncludeRemovalAsync(document); - if (started) - return true; + _ = Output.WriteLineAsync($"\nStarting Trial And Error Include removal on {item.FullPath}"); + string err = await impl.StartAsync(item, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); + if (string.IsNullOrEmpty(err)) continue; + _ = Output.WriteLineAsync(err); } - return false; + _ = Output.WriteLineAsync($"\nTrial And Error Over project removed {impl.Removed} includes in total."); } + } - private static void RecursiveFindFilesInProject(ProjectItems items, ref Queue projectFiles) + internal sealed class TrialAndErrorRemoval_Project : BaseCommand + { + protected override Task InitializeCompletedAsync() { - ThreadHelper.ThrowIfNotOnUIThread(); - - var e = items.GetEnumerator(); - while (e.MoveNext()) - { - var item = e.Current; - if (item == null) - continue; - var projectItem = item as ProjectItem; - if (projectItem == null) - continue; - - Guid projectItemKind = new Guid(projectItem.Kind); - if (projectItemKind == VSConstants.GUID_ItemType_VirtualFolder || - projectItemKind == VSConstants.GUID_ItemType_PhysicalFolder) - { - RecursiveFindFilesInProject(projectItem.ProjectItems, ref projectFiles); - } - else if (projectItemKind == VSConstants.GUID_ItemType_PhysicalFile) - { - projectFiles.Enqueue(projectItem); - } - else - { - _=Output.WriteLineAsync(string.Format("Unexpected Error: Unknown projectItem {0} of Kind {1}", projectItem.Name, projectItem.Kind)); - } - } + return Task.CompletedTask; } - private async Task PerformTrialAndErrorRemoval(Project project) + [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD002:Avoid problematic synchronous waits", Justification = "Has to be synchronous")] + protected override void BeforeQueryStatus(EventArgs e) { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - projectItems = project.ProjectItems; + var project = GetSelectedVCProjectAsync().Result; + Command.Visible = project != null; + } - projectFiles.Clear(); - RecursiveFindFilesInProject(projectItems, ref projectFiles); - if (projectFiles.Count > 2) + static async Task GetSelectedVCProjectAsync() + { + var selection = await VS.Solutions.GetActiveItemsAsync(); + foreach (Project item in selection.Where(i => i is Project)) { - if (!await VS.MessageBox.ShowConfirmAsync("Attention! Trial and error include removal on large projects make take up to several hours! In this time you will not be able to use Visual Studio. Are you sure you want to continue?")) - { - return; - } + var vcp = await item.ToVCProjectAsync(); + if (vcp != null) return vcp; } - - numTotalRemovedIncludes = 0; - await ProcessNextFile(); + return null; } protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - if (TrialAndErrorRemoval.WorkInProgress) { await VS.MessageBox.ShowErrorAsync("Trial and error include removal already in progress!"); return; } - try - { - Project project = GetSelectedCppProject(out string reasonForFailure); - if (project == null) - { - _=Output.WriteLineAsync(reasonForFailure); - return; - } + var proj = await VS.Solutions.GetActiveProjectAsync(); + if (proj == null) return; - await PerformTrialAndErrorRemoval(project); - } - finally - { - projectItems = null; - } + if (!await VS.MessageBox.ShowConfirmAsync("Attention! Trial and error include removal on large projects make take up to several hours! In this time you will not be able to use Visual Studio. Are you sure you want to continue?")) + return; + + TAERDispatcher dispatcher = new(); + dispatcher.FindFiles(proj); + await dispatcher.ProcessAsync(); } } } diff --git a/IncludeToolboxShared/Formatter/IncludeLineInfo.cs b/IncludeToolboxShared/Formatter/IncludeLineInfo.cs deleted file mode 100644 index c2632e3..0000000 --- a/IncludeToolboxShared/Formatter/IncludeLineInfo.cs +++ /dev/null @@ -1,339 +0,0 @@ -using Microsoft.VisualStudio.Text; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; - -namespace IncludeToolbox.Formatter -{ - [Flags] - public enum ParseOptions - { - None = 0, - - /// - /// Whether IncludeLineInfo objects should be created for empty lines. - /// - RemoveEmptyLines = 1, - - /// - /// Marks all includes that are within preprocessor conditionals as inactive/non-includes - /// - IgnoreIncludesInPreprocessorConditionals = 2, - - /// - /// Keep only lines that contain valid includes. - /// - KeepOnlyValidIncludes = 4 | RemoveEmptyLines, - } - - /// - /// A line of text + information about the include directive in this line if any. - /// Allows for manipulation of the former. - /// - /// - /// This is obviously not a high performance representation of text, but very easy to use for our purposes here. - /// - public class IncludeLineInfo - { - /// - /// Parses a given text into IncludeLineInfo objects. - /// - /// A list of parsed lines. - public static List ParseIncludes(SnapshotSpan text, ParseOptions options) - { - var snap = text.Snapshot; - var lines = snap.Lines.Skip(snap.GetLineNumberFromPosition(text.Start.Position) - 1).Take(text.Length); - - var outInfo = new List(); - - // Simplistic parsing. - int openMultiLineComments = 0; - int openIfdefs = 0; - - foreach (ITextSnapshotLine line in lines) - { - if (options.HasFlag(ParseOptions.RemoveEmptyLines) - && string.IsNullOrWhiteSpace(line.GetText())) - continue; - - string lineText = line.GetText(); - int lineNumber = line.LineNumber; - int commentedSectionStart = int.MaxValue; - int commentedSectionEnd = int.MaxValue; - - // Check for single line comment. - { - int singleLineCommentStart = lineText.IndexOf("//"); - if (singleLineCommentStart != -1) - commentedSectionStart = singleLineCommentStart; - } - - // Check for multi line comments. - { - int multiLineCommentStart = lineText.IndexOf("/*"); - if (multiLineCommentStart > -1 && multiLineCommentStart < commentedSectionStart) - { - ++openMultiLineComments; - commentedSectionStart = multiLineCommentStart; - } - - int multiLineCommentEnd = lineText.IndexOf("*/"); - if (multiLineCommentEnd > -1) - { - --openMultiLineComments; - commentedSectionEnd = multiLineCommentEnd; - } - } - - bool isCommented(int pos) => (commentedSectionStart == int.MaxValue && openMultiLineComments > 0) || (pos > commentedSectionStart && pos < commentedSectionEnd); - - // Check for #if / #ifdefs. - if (options.HasFlag(ParseOptions.IgnoreIncludesInPreprocessorConditionals)) - { - // There can be only a single preprocessor directive per line, so no need to parse more than this. - // (in theory it must be the first thing in the line, but MSVC is not strict on this, so we aren't either. - int ifdefStart = lineText.IndexOf("#if"); - int ifdefEnd = lineText.IndexOf("#endif"); - if (ifdefStart > -1 && !isCommented(ifdefStart)) - { - ++openIfdefs; - } - else if (ifdefEnd > -1 && !isCommented(ifdefEnd)) - { - --openIfdefs; - } - } - - int includeOccurence = lineText.IndexOf("#include"); - - // Not a valid include. - if (includeOccurence == -1 || // Include not found - isCommented(includeOccurence) || // Include commented out - openIfdefs > 0) // Inside an #ifdef block - { - if (!options.HasFlag(ParseOptions.KeepOnlyValidIncludes)) - outInfo.Add(new IncludeLineInfo() { lineText = lineText, LineNumber = lineNumber }); - } - // A valid include - else - { - // Parse include delimiters. - int delimiter1 = -1; - int delimiter0 = lineText.IndexOf('\"', includeOccurence + "#include".Length); - if (delimiter0 == -1) - { - delimiter0 = lineText.IndexOf('<', includeOccurence + "#include".Length); - if (delimiter0 != -1) - delimiter1 = lineText.IndexOf('>', delimiter0 + 1); - } - else - { - delimiter1 = lineText.IndexOf('\"', delimiter0 + 1); - } - - // Might not be valid after all! - if (delimiter0 != -1 && delimiter1 != -1) - outInfo.Add(new IncludeLineInfo() { lineText = lineText, LineNumber = lineNumber, delimiter0 = delimiter0, delimiter1 = delimiter1 }); - else if (!options.HasFlag(ParseOptions.KeepOnlyValidIncludes)) - outInfo.Add(new IncludeLineInfo() { lineText = lineText, LineNumber = lineNumber }); - } - } - - return outInfo; - } - - /// - /// Whether the line includes an enabled include. - /// - /// - /// A line that contains a valid #include may still be ContainsActiveInclude==false if it is commented or (depending on parsing options) #if(def)'ed out. - /// - public bool ContainsActiveInclude => delimiter0 != -1; - - public enum DelimiterType - { - Quotes, - AngleBrackets, - None - } - - public DelimiterType LineDelimiterType - { - get - { - if (ContainsActiveInclude) - { - DelimiterSanityCheck(); - - if (lineText[delimiter0] == '<') - return DelimiterType.AngleBrackets; - else if (lineText[delimiter0] == '\"') - return DelimiterType.Quotes; - } - return DelimiterType.None; - } - } - - /// - /// Changes the type of this line. - /// Has only an effect if ContainsActiveInclude is true. - /// - public void SetDelimiterType(DelimiterType newDelimiterType) - { - if (LineDelimiterType != newDelimiterType && ContainsActiveInclude) - { - DelimiterSanityCheck(); - - if (newDelimiterType == DelimiterType.AngleBrackets) - { - StringBuilder sb = new StringBuilder(lineText); - sb[delimiter0] = '<'; - sb[delimiter1] = '>'; - lineText = sb.ToString(); - } - else if (newDelimiterType == DelimiterType.Quotes) - { - StringBuilder sb = new StringBuilder(lineText); - sb[delimiter0] = '"'; - sb[delimiter1] = '"'; - lineText = sb.ToString(); - } - } - } - - /// - /// Whether the line contains a preprocessor directive. - /// Does not take into account surrounding block comments. - /// - public bool ContainsPreProcessorDirective - { - get - { - // In theory the '#' of a preprocessor directive MUST come first, but just like MSVC we relax the rules a bit here. - foreach (char c in lineText) - { - if (c == '#') - return true; - else if (!char.IsWhiteSpace(c)) - return false; - } - - return false; - } - } - - /// - /// Tries to resolve the include (if any) using a list of directories. - /// - /// Include directories. Keep in mind that IncludeLineInfo does not know the path of the file this include is from. - /// Empty string if this is not an include, absolute include path if possible or raw include if not. - public string TryResolveInclude(IEnumerable includeDirectories, out bool success) - { - if (!ContainsActiveInclude) - { - success = false; - return ""; - } - - string includeContent = IncludeContent; - - foreach (string dir in includeDirectories) - { - string candidate = Path.Combine(dir, includeContent); - if (File.Exists(candidate)) - { - success = true; - return Utils.GetExactPathName(candidate); - } - } - - Output.WriteLine($"Unable to resolve include: '{includeContent}'"); - success = false; - return includeContent; - } - - /// - /// Include content with added delimiters. - /// - public string GetIncludeContentWithDelimiters() - { - if (ContainsActiveInclude) - { - DelimiterSanityCheck(); - return lineText.Substring(delimiter0, delimiter1 - delimiter0 + 1); - } - else - return string.Empty; - } - - - /// - /// Changes in the include content will NOT be reflected immediately in the raw line text. - /// - /// - public string IncludeContent - { - get - { - if (ContainsActiveInclude) - { - DelimiterSanityCheck(); - int length = delimiter1 - delimiter0 - 1; - return length > 0 ? RawLine.Substring(delimiter0 + 1, length) : ""; - } - else - return string.Empty; - } - set - { - if (!ContainsActiveInclude) - return; - - lineText = lineText.Remove(delimiter0 + 1, delimiter1 - delimiter0 - 1); - lineText = lineText.Insert(delimiter0 + 1, value); - delimiter1 = delimiter0 + value.Length + 1; - } - } - - /// - /// Raw line text as found. - /// - public string RawLine - { - get { return lineText; } - } - private string lineText = ""; - - /// - /// Line number in which this include line occurred within its original file. - /// - /// - /// Starts of course with 0 unlike displayed line numbers. - /// - public int LineNumber { get; private set; } = -1; - - public static bool ContainsPreserveFlag(string lineText) - { - return lineText.Contains("$include-toolbox-preserve$"); - } - - /// - /// Whether the include line should not be removed by iwyu and Trial & Error Removal. - /// - public bool ShouldBePreserved { get { return ContainsPreserveFlag(lineText); } } - - private int delimiter0 = -1; - private int delimiter1 = -1; - - [System.Diagnostics.Conditional("DEBUG")] - private void DelimiterSanityCheck() - { - System.Diagnostics.Debug.Assert(delimiter0 >= 0 && delimiter0 < lineText.Length); - System.Diagnostics.Debug.Assert(delimiter1 >= 0 && delimiter1 < lineText.Length); - System.Diagnostics.Debug.Assert(delimiter0 < delimiter1); - } - } -} diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index aaec78e..a0b54fc 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse { @@ -46,8 +45,10 @@ public void BuildCommandLine(IWYUOptions settings) { process.StartInfo.FileName = settings.Executable; - List args = new(); - args.Add(string.Format("--verbose={0}", settings.Verbosity)); + List args = new() + { + string.Format("--verbose={0}", settings.Verbosity) + }; if (settings.Precompiled || settings.IgnoreHeader) args.Add("--pch_in_code"); @@ -76,18 +77,15 @@ static public void MoveHeader(DocumentView view) { var buf = view.TextBuffer; var str = buf.CurrentSnapshot.GetText(); - int begin = str.IndexOf("#include "); - int end = str.LastIndexOf("#include "); - end = str.IndexOf('\n', end); - + var span = Utils.GetIncludeSpan(str); Regex regex = new($"#include\\s[<\"]([\\w\\\\\\/\\.]+{Path.GetFileNameWithoutExtension(view.FilePath)}.h(?:pp|xx)?)[>\"]"); - var match = regex.Match(str, begin, end - begin); + var match = regex.Match(str, span.Start, span.Length); if (!match.Success) return; var edit = buf.CreateEdit(); _ = edit.Delete(new(match.Index, match.Length)); - edit.Insert(begin, match.Value + Utils.GetLineBreak(edit)); + edit.Insert(span.Start, match.Value + Utils.GetLineBreak(view.TextView)); edit.Apply(); } diff --git a/IncludeToolboxShared/IWYU/IWYUDownload.cs b/IncludeToolboxShared/IWYU/IWYUDownload.cs index e3936f8..de9d15b 100644 --- a/IncludeToolboxShared/IWYU/IWYUDownload.cs +++ b/IncludeToolboxShared/IWYU/IWYUDownload.cs @@ -11,7 +11,6 @@ using System.Net.Http; using System.Text.RegularExpressions; using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse { diff --git a/IncludeToolboxShared/Formatter/IncludeFormatter.cs b/IncludeToolboxShared/Implementation/IncludeFormatter.cs similarity index 98% rename from IncludeToolboxShared/Formatter/IncludeFormatter.cs rename to IncludeToolboxShared/Implementation/IncludeFormatter.cs index 1973d02..0578cb7 100644 --- a/IncludeToolboxShared/Formatter/IncludeFormatter.cs +++ b/IncludeToolboxShared/Implementation/IncludeFormatter.cs @@ -119,12 +119,12 @@ private static IncludeLine[] SortIncludeBatch(FormatOptions settings, { // store kept headers first, to remove all the duplicates HashSet uniqueIncludes = new(); - uniqueIncludes.UnionWith(includeLines.Where(s => s.Keep).Select(s => s.file)); + uniqueIncludes.UnionWith(includeLines.Where(s => s.Keep).Select(s => s.FullFile)); for (int i = 0; i < includeLines.Length; i++) { ref var r = ref includeLines[i]; - if (!r.Keep && !uniqueIncludes.Add(r.file)) + if (!r.Keep && !uniqueIncludes.Add(r.FullFile)) r.SetFullContent(""); } } @@ -135,7 +135,7 @@ private static IncludeLine[] SortIncludeBatch(FormatOptions settings, .GroupBy(x => { if (!x.Valid) return precedenceRegexes.Length; - var includeContent = regexIncludeDelimiter ? x.file : x.Content; + var includeContent = regexIncludeDelimiter ? x.FullFile : x.Content; for (int precedence = 0; precedence < precedenceRegexes.Count(); ++precedence) { if (Regex.Match(includeContent, precedenceRegexes[precedence]).Success) diff --git a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs new file mode 100644 index 0000000..d73fa64 --- /dev/null +++ b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs @@ -0,0 +1,217 @@ +using System; +using System.Linq; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.Text; +using System.IO; +using System.Threading.Tasks; +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.VCProjectEngine; +using Microsoft.VisualStudio.Threading; + +namespace IncludeToolbox +{ + internal sealed class AsyncDispatcher : IDisposable + { + TaskCompletionSource tcs; + private bool disposedValue; + + private void Dispatch(bool a) + { + tcs.SetResult(a); + } + public AsyncDispatcher() + { + VS.Events.BuildEvents.SolutionBuildDone += Dispatch; + } + ~AsyncDispatcher() + { + if (!disposedValue) + VS.Events.BuildEvents.SolutionBuildDone -= Dispatch; + } + + public async Task CompileAsync(VCFileConfiguration config) + { + tcs = new(); + for (int i = 0; i < 3; i++) + { + try + { + config.Compile(true, false); + return await tcs.Task; + } + catch (Exception) + { + await Task.Delay(100); + } + } + return false; + } + + void IDisposable.Dispose() + { + if (!disposedValue) + { + VS.Events.BuildEvents.SolutionBuildDone -= Dispatch; + disposedValue = true; + } + GC.SuppressFinalize(this); + } + } + + internal sealed class TrialAndErrorRemoval + { + public static bool WorkInProgress { get; private set; } + + public int Removed { get; private set; } = 0; + + + //Makes less variable noise + struct Descriptor + { + public IncludeLine[] lines; + public ITextBuffer buffer; + public string text; + public string filename; + public VCFileConfiguration config; + public int offset; + public TrialAndErrorRemovalOptions settings; + } + + + private async Task TestCompileAsync(VCFileConfiguration config) + { + using AsyncDispatcher dispatcher = new(); + return await dispatcher.CompileAsync(config); + } + private async Task RemoveAsync(Descriptor desc) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var dialog = await StartProgressDialogAsync(desc.filename, desc.lines.Length + 1); + int delta = 0; + using AsyncDispatcher dispatcher = new(); + int step = 0; + + foreach (var line in desc.lines) + { + string waitMessage = $"Removing #includes from '{desc.filename}'"; + string progressText = $"Trying to remove '{line.Content}' ..."; + dialog.UpdateProgress( + szUpdatedWaitMessage: waitMessage, + szProgressText: progressText, + szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, + iCurrentStep: ++step, + iTotalSteps: desc.lines.Length + 1, + fDisableCancel: false, + pfCanceled: out var canceled); + + if (canceled) + { + _ = Output.WriteLineAsync("Operation was cancelled."); + dialog.EndWaitDialog(); + return; + } + + var rs = desc.settings.KeepLineBreaks ? + line.ReplaceSpanWithoutNewline(desc.offset) : + line.ReplaceSpan(desc.offset); + + desc.buffer.Delete(rs); + + bool b = await dispatcher.CompileAsync(desc.config); + + if (b) + { + if (desc.settings.RemovalOrder == IncludeRemovalOrder.TopToBottom) + { + desc.offset -= rs.Length; + delta += rs.Length; + } + await Output.WriteLineAsync($"{line.FullFile} was successfully removed"); + Removed++; + continue; + } + desc.buffer.Insert(rs.Start, desc.text.Substring(rs.Start + delta, rs.Length)); + await Output.WriteLineAsync($"Unable to remove {line.FullFile}"); + } + dialog.EndWaitDialog(); + } + //Expected: compilable file .cpp or other + public async Task StartAsync(PhysicalFile file, TrialAndErrorRemovalOptions settings) + { + var vcfile = await file.ToVCProjectItemAsync(); + if (vcfile == null || ((VCFile)vcfile).FileType != eFileType.eFileTypeCppCode) return $"{file.Name} is not a compilable VC file."; + + var document = await VS.Documents.GetDocumentViewAsync(file.FullPath); + var buffer = document.TextBuffer; + var snap = buffer.CurrentSnapshot; + + var text = snap.GetText(); + var span = Utils.GetIncludeSpan(text); + text = text.Substring(span.Start, span.Length); + + var lines = Parser.ParseInclues(text.AsSpan(), settings.IgnoreIfdefs); + VCFileConfiguration config = VCUtil.GetVCFileConfig(vcfile); + if (config == null) return $"{file.Name} has failed to yield a config."; + + if (!await TestCompileAsync(config)) + return $"{document.FilePath} failed to compile. Include removal stopped."; + + // Skip first on demand + var iterator = (settings.IgnoreFirstInclude ? lines.Skip(1) : lines.AsEnumerable()) + .Where(s => !s.Keep); // filter kept + + // Filter regecies + string documentName = Path.GetFileNameWithoutExtension(document.FilePath); + string[] ignoreRegexList = RegexUtils.FixupRegexes(settings.IgnoreList, documentName); + iterator = iterator.Where(line => !ignoreRegexList.Any(regexPattern => + new System.Text.RegularExpressions.Regex(regexPattern).Match(line.Content).Success)); + + iterator = settings.RemovalOrder == IncludeRemovalOrder.TopToBottom ? iterator : iterator.Reverse(); + + var array = iterator.ToArray(); + try + { + Descriptor desc = new() + { + lines = array, + settings = settings, + config = config, + text = text, + filename = document.FilePath, + buffer = buffer, + offset = span.Start + }; + await RemoveAsync(desc); + _ = Output.WriteLineAsync($"Successfully removed {Removed} headers from {desc.filename}"); + } + catch (Exception e) + { + return $"Failed to create a dialog: {e.Message}"; + } + return ""; + } + + private async Task StartProgressDialogAsync(string documentName, int steps) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var dialog_factory = (IVsThreadedWaitDialogFactory)await VS.Services.GetThreadedWaitDialogAsync(); + var dialog = dialog_factory.CreateInstance(); + + + string waitMessage = $"Parsing '{documentName}' ... "; + dialog.StartWaitDialogWithPercentageProgress( + szWaitCaption: "Include Toolbox - Running Trial & Error Include Removal", + szWaitMessage: waitMessage, + szProgressText: null, + varStatusBmpAnim: null, + szStatusBarText: "Running Trial & Error Removal - " + waitMessage, + fIsCancelable: true, + iDelayToShowDialog: 0, + iTotalSteps: steps, + iCurrentStep: 0); + + return dialog; + } + } +} \ No newline at end of file diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index c776153..038fded 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -1,10 +1,10 @@ -using System; +global using Task = System.Threading.Tasks.Task; +using System; using System.Runtime.InteropServices; using System.Threading; using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { @@ -17,6 +17,7 @@ namespace IncludeToolbox [ProvideOptionPage(typeof(OptionsProvider.TrialAndErrorRemovalOptionsPage), "Include Toolbox", "Trial and Error", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.MapperOptionsPage), "Include Toolbox", "Mapper", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.IWYUOptionsPage), "Include Toolbox", "Include-What-You-Use", 0, 0, true, SupportsProfiles = true)] + [ProvideOptionPage(typeof(OptionsProvider.ViewerOptionsPage), "Include Toolbox", "Include Viewer", 0, 0, true, SupportsProfiles = true)] [ProvideUIContextRule(PackageGuids.GOnlyVCString, "UIOnlyVC", expression: "one & two", termNames: new[] { "one", "two" }, @@ -27,7 +28,7 @@ namespace IncludeToolbox termNames: new[] { "one", "two" }, termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(cpp|c|cxx)$" } )] - [ProvideUIContextRule(PackageGuids.GHeaderOnlyString, "UIOnlyCpp", + [ProvideUIContextRule(PackageGuids.GHeaderOnlyString, "UIOnlyHead", expression: "one & two", termNames: new[] { "one", "two" }, termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(h|hpp|hxx|inl)$" } diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index 0c949d2..b719b74 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -17,8 +17,7 @@ - - + @@ -37,10 +36,8 @@ - + - - \ No newline at end of file diff --git a/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs b/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs index 35eb7e1..1ea5cae 100644 --- a/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs +++ b/IncludeToolboxShared/Options/TrialAndErrorRemovalOptions.cs @@ -21,6 +21,11 @@ public class TrialAndErrorRemovalOptions : BaseOptionModel { } + } + + public class ViewerOptions : BaseOptionModel + { + [Category("Include Graph Parsing")] + [DisplayName("Graph Endpoint Directories")] + [Description("List of absolute directory paths. For any include below these paths, the graph parsing will stop.")] + public string[] NoParsePaths + { + get { return noParsePaths; } + set + { + // It is critical that the paths are "exact" since we want to use them as with string comparison. + noParsePaths = value; + for (int i = 0; i < noParsePaths.Length; ++i) + noParsePaths[i] = Utils.GetExactPathName(noParsePaths[i]); + } + } + private string[] noParsePaths; + + [Category("Include Graph DGML")] + [DisplayName("Create Group Nodes by Folders")] + [Description("Creates folders like in the folder hierarchy view of Include Graph.")] + public bool CreateGroupNodesForFolders { get; set; } = true; + + [Category("Include Graph DGML")] + [DisplayName("Expand Folder Group Nodes")] + [Description("If true all folder nodes start out expanded, otherwise they are collapsed.")] + public bool ExpandFolderGroupNodes { get; set; } = false; + + [Category("Include Graph DGML")] + [DisplayName("Colorize by Number of Includes")] + [Description("If true each node gets color coded according to its number of unique transitive includes.")] + public bool ColorCodeNumTransitiveIncludes { get; set; } = true; + + [Category("Include Graph DGML")] + [DisplayName("No Children Color")] + [Description("See \"Colorize by Number of Includes\". Color for no children at all.")] + public System.Drawing.Color NoChildrenColor { get; set; } = System.Drawing.Color.White; + + [Category("Include Graph DGML")] + [DisplayName("Max Children Color")] + [Description("See \"Colorize by Number of Includes\". Color for highest number of children.")] + public System.Drawing.Color MaxChildrenColor { get; set; } = System.Drawing.Color.Red; + } +} diff --git a/IncludeToolboxShared/Util/EmptyNS.cs b/IncludeToolboxShared/Util/EmptyNS.cs index 096c6cc..3c9fd9d 100644 --- a/IncludeToolboxShared/Util/EmptyNS.cs +++ b/IncludeToolboxShared/Util/EmptyNS.cs @@ -1,8 +1,6 @@ using Microsoft.VisualStudio.Text; using System; using System.Collections.Generic; -using System.Linq; -using System.Runtime.Remoting.Contexts; using static IncludeToolbox.Lexer; namespace IncludeToolbox @@ -42,7 +40,7 @@ public void Drop() } } - internal static partial class Parser + public static partial class Parser { static bool LLTableEN(ref Stack context, TType input, TType current) { @@ -113,16 +111,16 @@ public static Span[] ParseEmptyNamespaces(string text) if (expect >= TType.T0) //LL rules { pctx.expected_tokens.Pop(); - accept = LLTableEN(ref pctx.expected_tokens, tok.type, expect); + accept = LLTableEN(ref pctx.expected_tokens, tok.Type, expect); continue; } - if (!accept && expect != tok.type) + if (!accept && expect != tok.Type) { tracker.Empty = false; pctx.Clear(); // unexpected token, start anew - if (tok.type == TType.OpenBr) // if scope, probably function or class + if (tok.Type == TType.OpenBr) // if scope, probably function or class FFWD(ref lctx, (int)pctx.Scope, (int)pctx.Scope + 1); - if (tok.type == TType.CloseBr) + if (tok.Type == TType.CloseBr) { pctx--; tracker.Drop(); @@ -151,9 +149,9 @@ public static Span[] ParseEmptyNamespaces(string text) break; } - if (tok.type == TType.OpenBr) + if (tok.Type == TType.OpenBr) pctx++; - if (tok.type == TType.CloseBr) + if (tok.Type == TType.CloseBr) pctx--; tok = lctx.GetToken(accept); } diff --git a/IncludeToolboxShared/Util/Lexer.cs b/IncludeToolboxShared/Util/Lexer.cs index 445bac2..cfeff57 100644 --- a/IncludeToolboxShared/Util/Lexer.cs +++ b/IncludeToolboxShared/Util/Lexer.cs @@ -57,11 +57,14 @@ public enum TType } public ref struct Token { - public TType type; - public ReadOnlySpan value; - readonly int pos = 0; + private readonly TType type; + private readonly ReadOnlySpan value; + private readonly int pos = 0; public int Position { get { return pos; } } + public int End { get { return pos + Value.Length; } } + public ReadOnlySpan Value => value; + public TType Type => type; public Token(TType type, int pos, ReadOnlySpan value) { @@ -77,15 +80,15 @@ public Token(TType type = TType.Null, int pos = 0) } public bool valid() { - return type != TType.Null; + return Type != TType.Null; } } public ref struct Context { - ReadOnlySpan original; - ReadOnlySpan code; - int current_pos = 0; + private readonly ReadOnlySpan original; + private ReadOnlySpan code; + private int current_pos = 0; public int Position { get => current_pos; } @@ -114,24 +117,24 @@ public readonly bool Empty() } internal void SkipComment() { - int rem = code.IndexOf('\n'); - if(rem == -1) + int rem = code.IndexOfAny('\r', '\n'); + if (rem == -1) { code = "".AsSpan(); return; } - RemovePrefix(rem + 1); + RemovePrefix(rem); } internal Token TakeComment() { - int rem = code.IndexOf('\n'); - if(rem == -1) + int rem = code.IndexOfAny('\r', '\n'); + if (rem == -1) { code = "".AsSpan(); return new(TType.Commentary, current_pos - 1, original.Slice(current_pos - 1)); } - Token tk = new(TType.Commentary, current_pos - 1, original.Slice(current_pos - 1, rem + 1)); - RemovePrefix(rem + 1); + Token tk = MakeValueToken(TType.Commentary, rem + 1); + RemovePrefix(rem); return tk; } @@ -163,7 +166,7 @@ internal Token TakeCommentML() if (Prefetch() == '/') { RemovePrefix(1); - return new Token(TType.MLCommentary,start, original.Slice(start, current_pos - start)); + return MakeValueToken(TType.MLCommentary, start, current_pos - start); } } } @@ -233,6 +236,15 @@ internal void SkipSpace() RemovePrefix(i); } + private Token MakeValueToken(TType type, int pos, int length) + { + return new(type, pos, original.Slice(pos, length)); + } + private Token MakeValueToken(TType type, int length) + { + return MakeValueToken(type, current_pos - 1, length); + } + private Token GetToken(bool expect_id, Desc desc = default) { Token tk = new(); @@ -240,8 +252,21 @@ private Token GetToken(bool expect_id, Desc desc = default) { char c = Fetch(); - if (desc.newlines && c == '\n') - return new Token(TType.Newline, Position); + if (desc.newlines) + { + switch (c) + { + case '\n': return MakeValueToken(TType.Newline, 1); + case '\r': + if (Prefetch() == '\n') + { + tk = MakeValueToken(TType.Newline, 2); + Fetch(); + return tk; + } + return MakeValueToken(TType.Newline, 1); + } + } switch (c) { diff --git a/IncludeToolboxShared/Util/ParseIncludes.cs b/IncludeToolboxShared/Util/ParseIncludes.cs index 473c101..62c0dc4 100644 --- a/IncludeToolboxShared/Util/ParseIncludes.cs +++ b/IncludeToolboxShared/Util/ParseIncludes.cs @@ -1,4 +1,5 @@ using Microsoft.VisualStudio.Text; +using Microsoft.VisualStudio.Text.Editor; using System; using System.Collections.Generic; using System.IO; @@ -8,46 +9,57 @@ namespace IncludeToolbox { + public enum NewlineChar + { + N, + CR, + LF, + CRLF + } + public struct IncludeLine { - public string file = ""; + private string file = ""; public DelimiterMode delimiter = DelimiterMode.Unchanged; - public string_view span; - public string_view file_subspan = new(); + public Span span = new(); + public Span file_subspan = new(); public int line = 0; public bool keep = false; + public NewlineChar newlineChar = NewlineChar.N; - public IncludeLine(string file, DelimiterMode delimiter, string_view span, int line) - { - this.file = file; - this.delimiter = delimiter; - this.span = span; - this.line = line; - } + public IncludeLine() + {} public string Content => Valid ? file.Substring(1, file.Length - 2) : ""; - public string FullLine => "#include " + file; + public string FullFile { get => file; set => file = value; } public bool Keep => keep; public bool Valid => !string.IsNullOrEmpty(file); - public Span ReplaceSpan(int relative_pos) => new(relative_pos + span.begin, span.end - span.begin); + public int NewlineLength => newlineChar switch { NewlineChar.N => 0, NewlineChar.CR => 2, _ => 1 }; + + + public Span ReplaceSpan(int relative_pos) => new(relative_pos + span.Start, span.Length); + public Span ReplaceSpan(int relative_pos, int offset_end) => + offset_end >= span.Length ? new() : new(relative_pos + span.Start, span.Length - offset_end); + public Span ReplaceSpanWithoutNewline(int relative_pos) => + ReplaceSpan(relative_pos, NewlineLength); public string Project(string over) { if (!Valid) return ""; - var x = span.str(over); - return x.Remove(file_subspan.begin, file_subspan.Length).Insert(file_subspan.begin, file); + var x = over.Substring(span.Start, span.Length); + return x.Remove(file_subspan.Start, file_subspan.Length).Insert(file_subspan.Start, FullFile); } - public void SetFullContent(string content) { file = content; } + public void SetFullContent(string content) { FullFile = content; } public void SetFile(string val) { switch (delimiter) { case DelimiterMode.AngleBrackets: - file = '<' + val + '>'; + FullFile = '<' + val + '>'; break; case DelimiterMode.Quotes: - file = '"' + val + '"'; + FullFile = '"' + val + '"'; break; } } @@ -59,11 +71,11 @@ public void SetDelimiter(DelimiterMode delimiter) } public void ToForward() { - file.Replace('\\', '/'); + FullFile.Replace('\\', '/'); } public void ToBackward() { - file.Replace('/', '\\'); + FullFile.Replace('/', '\\'); } public string Resolve(IEnumerable includeDirectories) @@ -71,7 +83,7 @@ public string Resolve(IEnumerable includeDirectories) foreach (string dir in includeDirectories) { string candidate = Path.Combine(dir, Content); - if (File.Exists(candidate)) + if (System.IO.File.Exists(candidate)) return Utils.GetExactPathName(candidate); } @@ -79,12 +91,13 @@ public string Resolve(IEnumerable includeDirectories) return ""; } } - internal static partial class Parser + public static partial class Parser { static readonly Regex pragma = new("(?:\\/\\*|\\/\\/)(?:\\s*IWYU\\s+pragma:\\s+keep)");// IWYU pragma: keep - public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_ifdefs) + + public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_ifdefs = true) { List lines = new(); Lexer.Context lctx = new(text); @@ -94,38 +107,49 @@ public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_if bool skip = false; bool accept = true; bool comments = false; + int line = 0; + int start_pos = 0; + int end_pos = 0; while (!lctx.Empty()) { Token tok = lctx.GetToken(accept, ignore_ifdefs, true, comments); - switch (tok.type) + switch (tok.Type) { case TType.Newline: comments = accept = false; line++; if (xline.Valid) { - xline.span.end = tok.Position; + xline.newlineChar = tok.Value.ToString() switch + { + "\n" => NewlineChar.LF, + "\r" => NewlineChar.CR, + "\r\n" => NewlineChar.CRLF, + _ => NewlineChar.N + }; + end_pos = tok.End; + xline.span = new(start_pos, end_pos - start_pos); lines.Add(xline); xline = new IncludeLine(); } break; case TType.Include: accept = !skip; - xline.span.begin = tok.Position; + start_pos = tok.Position; break; case TType.AngleID: case TType.QuoteID: if (!skip && accept) { - var begin = tok.Position - xline.span.begin; - xline.file = tok.value.ToString(); - xline.delimiter = tok.type == TType.AngleID ? DelimiterMode.AngleBrackets : DelimiterMode.Quotes; - xline.span.end = tok.Position + tok.value.Length; + var begin = tok.Position - start_pos; + xline.FullFile = tok.Value.ToString(); + xline.delimiter = tok.Type == TType.AngleID ? DelimiterMode.AngleBrackets : DelimiterMode.Quotes; + end_pos = tok.End; xline.line = line; - xline.file_subspan = new(begin, begin + tok.value.Length); // subspan of file for replacement + xline.file_subspan = new(begin, tok.Value.Length); // subspan of file for replacement accept = false; comments = true; @@ -142,11 +166,9 @@ public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_if skip = false; break; case TType.Commentary: - line++; - goto case TType.MLCommentary; case TType.MLCommentary: - xline.span.end = tok.Position + tok.value.Length; - xline.keep = pragma.IsMatch(tok.value.ToString()); + end_pos = tok.End; + xline.keep = pragma.IsMatch(tok.Value.ToString()); break; default: accept = false; @@ -155,7 +177,10 @@ public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_if } if (xline.Valid) + { + xline.span = new(start_pos, end_pos - start_pos); lines.Add(xline); + } return lines.ToArray(); } diff --git a/IncludeToolboxShared/Util/Parser.cs b/IncludeToolboxShared/Util/Parser.cs index f5d060b..56dbe9d 100644 --- a/IncludeToolboxShared/Util/Parser.cs +++ b/IncludeToolboxShared/Util/Parser.cs @@ -71,7 +71,7 @@ public struct FWDDecl public FWDDecl(Token tk) { span.begin = tk.Position; - type = tk.type; + type = tk.Type; } public void SetEnd(int end) { @@ -165,7 +165,7 @@ public override int GetHashCode() } } - internal static partial class Parser + public static partial class Parser { struct Context { @@ -267,9 +267,9 @@ static void FFWD(ref Lexer.Context ctx, int to_scope, int from_scope) while (from_scope != to_scope && !ctx.Empty()) { var tok = ctx.GetToken(false); - if (tok.type == TType.OpenBr) + if (tok.Type == TType.OpenBr) from_scope++; - if (tok.type == TType.CloseBr) + if (tok.Type == TType.CloseBr) from_scope--; } } @@ -433,15 +433,15 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo if (expect >= TType.T0) //LL rules { pctx.expected_tokens.Pop(); - accept = LLTable(ref pctx.expected_tokens, tok.type, expect); + accept = LLTable(ref pctx.expected_tokens, tok.Type, expect); continue; } - if (!accept || expect != tok.type) + if (!accept || expect != tok.Type) { pctx.Clear(); // unexpected token, start anew - if (tok.type == TType.OpenBr) // if scope, probably function or class + if (tok.Type == TType.OpenBr) // if scope, probably function or class FFWD(ref lctx, (int)pctx.Scope, (int)pctx.Scope + 1); - if (tok.type == TType.CloseBr) + if (tok.Type == TType.CloseBr) pctx--; tok = lctx.GetToken(accept); continue; @@ -477,9 +477,9 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo break; case TType.ID: if (pctx.Namespace) - pctx.PushNamespace(tok.value.ToString()); + pctx.PushNamespace(tok.Value.ToString()); else - decl.ID = tok.value.ToString(); + decl.ID = tok.Value.ToString(); break; case TType.OpenBr: if (pctx.Namespace) @@ -499,8 +499,8 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo inc = new(tok); break; case TType.QuoteID: case TType.AngleID: - inc.value = tok.value.ToString(); - inc.SetEnd(tok.Position + tok.value.Length); + inc.value = tok.Value.ToString(); + inc.SetEnd(tok.Position + tok.Value.Length); inc.type = expect; includes.Add(inc); break; @@ -514,9 +514,9 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo break; } - if (tok.type == TType.OpenBr) + if (tok.Type == TType.OpenBr) pctx++; - if (tok.type == TType.CloseBr) + if (tok.Type == TType.CloseBr) pctx--; tok = lctx.GetToken(accept); diff --git a/IncludeToolboxShared/Util/Standard.cs b/IncludeToolboxShared/Util/Standard.cs index 980f29a..aba705f 100644 --- a/IncludeToolboxShared/Util/Standard.cs +++ b/IncludeToolboxShared/Util/Standard.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace IncludeToolbox +namespace IncludeToolbox { public enum Standard { diff --git a/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs deleted file mode 100644 index 20fc912..0000000 --- a/IncludeToolboxShared/Util/TrialAndErrorRemoval.cs +++ /dev/null @@ -1,323 +0,0 @@ -using System; -using System.Linq; -using System.Threading; -using System.Windows; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using EnvDTE; -using Microsoft.VisualStudio.Text; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; -using Community.VisualStudio.Toolkit; -using BuildEvents = EnvDTE.BuildEvents; - -namespace IncludeToolbox -{ - /// - /// Command handler for trial and error include removal - /// - internal sealed class TrialAndErrorRemoval - { - public delegate void FinishedEvent(int numRemovedIncludes, bool canceled); - public event FinishedEvent OnFileFinished; - - public static bool WorkInProgress { get; private set; } - - private volatile bool lastBuildSuccessful; - private AutoResetEvent outputWaitEvent = new AutoResetEvent(false); - private const int timeoutMS = 600000; // 600 seconds, 10 minutes per file - - /// - /// Need to keep build events object around as long as it is used, otherwise the events may not be fired! - /// - private BuildEvents buildEvents; - - public async Task PerformTrialAndErrorIncludeRemovalAsync(EnvDTE.Document document) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - var canCompile = await VSUtils.VCUtils.IsCompilableFile(document); - var settings = await TrialAndErrorRemovalOptions.GetLiveInstanceAsync(); - - if (canCompile.Result == false) - { - _ = Output.WriteLineAsync($"Can't compile file '{canCompile.Reason}': {document.Name}"); - return false; - } - - if (WorkInProgress) - { - _ = VS.MessageBox.ShowErrorAsync("Trial and error include removal already in progress!"); - return false; - } - WorkInProgress = true; - - // Start wait dialog. - IVsThreadedWaitDialog2 progressDialog = await StartProgressDialog(document.Name); - if (progressDialog == null) - return false; - - // Extract all includes. - ITextBuffer textBuffer; - Formatter.IncludeLineInfo[] includeLines; - try - { - ExtractSelectionAndIncludes(document, settings, out textBuffer, out includeLines); - } - catch (Exception ex) - { - _=Output.WriteLineAsync($"Unexpected error while extracting include selection: {ex}"); - progressDialog.EndWaitDialog(); - return false; - } - - // Hook into build events. - SubscribeBuildEvents(); - - // The rest runs in a separate thread since the compile function is non blocking and we want to use BuildEvents - // We are not using Task, since we want to make use of WaitHandles - using this together with Task is a bit more complicated to get right. - outputWaitEvent.Reset(); - var removalThread = new System.Threading.Thread(() => TrialAndErrorRemovalThreadFunc(document, settings, includeLines, progressDialog, textBuffer)); - removalThread.Start(); - return true; - } - - private async Task StartProgressDialog(string documentName) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - var dialogFactory = Package.GetGlobalService(typeof(SVsThreadedWaitDialogFactory)) as IVsThreadedWaitDialogFactory; - if (dialogFactory == null) - { - Output.WriteLine("Failed to get Dialog Factory for wait dialog."); - return null; - } - - IVsThreadedWaitDialog2 progressDialog; - dialogFactory.CreateInstance(out progressDialog); - if (progressDialog == null) - { - Output.WriteLine("Failed to get create wait dialog."); - return null; - } - string waitMessage = $"Parsing '{documentName}' ... "; - progressDialog.StartWaitDialogWithPercentageProgress( - szWaitCaption: "Include Toolbox - Running Trial & Error Include Removal", - szWaitMessage: waitMessage, - szProgressText: null, - varStatusBmpAnim: null, - szStatusBarText: "Running Trial & Error Removal - " + waitMessage, - fIsCancelable: true, - iDelayToShowDialog: 0, - iTotalSteps: 20, // Will be replaced. - iCurrentStep: 0); - - return progressDialog; - } - - private void ExtractSelectionAndIncludes(EnvDTE.Document document, TrialAndErrorRemovalOptions settings, - out ITextBuffer textBuffer, out Formatter.IncludeLineInfo[] includeLinesArray) - { - ThreadHelper.ThrowIfNotOnUIThread(); - - // Parsing. - document.Activate(); - var documentTextView = VSUtils.GetCurrentTextViewHost(); - textBuffer = documentTextView.TextView.TextBuffer; - var documentText = documentTextView.TextView.TextSnapshot; - - IEnumerable includeLines - = Formatter.IncludeLineInfo.ParseIncludes(new SnapshotSpan(documentText, 0, documentText.Length), Formatter.ParseOptions.IgnoreIncludesInPreprocessorConditionals | Formatter.ParseOptions.KeepOnlyValidIncludes); - - // Optionally skip top most include. - if (settings.IgnoreFirstInclude) - includeLines = includeLines.Skip(1); - - // Skip everything with preserve flag. - includeLines = includeLines.Where(x => !x.ShouldBePreserved); - - // Apply filter ignore regex. - { - string documentName = Path.GetFileNameWithoutExtension(document.FullName); - string[] ignoreRegexList = RegexUtils.FixupRegexes(settings.IgnoreList, documentName); - includeLines = includeLines.Where(line => !ignoreRegexList.Any(regexPattern => - new System.Text.RegularExpressions.Regex(regexPattern).Match(line.IncludeContent).Success)); - } - // Reverse order if necessary. - if (settings.RemovalOrder == IncludeRemovalOrder.BottomToTop) - includeLines = includeLines.Reverse(); - - includeLinesArray = includeLines.ToArray(); - } - - private void TrialAndErrorRemovalThreadFunc(EnvDTE.Document document, TrialAndErrorRemovalOptions settings, - Formatter.IncludeLineInfo[] includeLines, IVsThreadedWaitDialog2 progressDialog, ITextBuffer textBuffer) - { - int numRemovedIncludes = 0; - bool canceled = false; - - try - { - int currentProgressStep = 0; - - // For ever include line.. - foreach (Formatter.IncludeLineInfo line in includeLines) - { - // If we are working from top to bottom, the line number may have changed! - int currentLine = line.LineNumber; - if (settings.RemovalOrder == IncludeRemovalOrder.TopToBottom) - currentLine -= numRemovedIncludes; - - ThreadHelper.JoinableTaskFactory.Run(async () => - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - // Update progress. - string waitMessage = $"Removing #includes from '{document.Name}'"; - string progressText = $"Trying to remove '{line.IncludeContent}' ..."; - progressDialog.UpdateProgress( - szUpdatedWaitMessage: waitMessage, - szProgressText: progressText, - szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, - iCurrentStep: currentProgressStep + 1, - iTotalSteps: includeLines.Length + 1, - fDisableCancel: false, - pfCanceled: out canceled); - if (!canceled) - { - ++currentProgressStep; - - // Remove include - using (var edit = textBuffer.CreateEdit()) - { - if (settings.KeepLineBreaks) - edit.Delete(edit.Snapshot.Lines.ElementAt(currentLine).Extent); - else - edit.Delete(edit.Snapshot.Lines.ElementAt(currentLine).ExtentIncludingLineBreak); - edit.Apply(); - } - } - outputWaitEvent.Set(); - }); - outputWaitEvent.WaitOne(); - - if (canceled) - break; - - // Compile - In rare cases VS tells us that we are still building which should not be possible because we have received OnBuildFinished - // As a workaround we just try again a few times. - ThreadHelper.JoinableTaskFactory.Run(async () => - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - const int maxNumCompileAttempts = 3; - for (int numCompileFails = 0; numCompileFails < maxNumCompileAttempts; ++numCompileFails) - { - // TODO: This happens on the main thread. Making the whole thread thing a bit pointless!!! - try - { - await VSUtils.VCUtils.CompileSingleFile(document); - } - catch (Exception e) - { - _=Output.WriteLineAsync($"Compile Failed:\n{e}"); - - if (numCompileFails == maxNumCompileAttempts - 1) - { - document.Undo(); - throw e; - } - else - { - // Try again. - await System.Threading.Tasks.Task.Delay(100); - continue; - } - } - break; - } - }); - - // Wait till woken. - bool noTimeout = outputWaitEvent.WaitOne(timeoutMS); - - // Undo removal if compilation failed. - if (!noTimeout || !lastBuildSuccessful) - { - Output.WriteLine($"Could not remove #include: '{line.IncludeContent}'"); - ThreadHelper.JoinableTaskFactory.Run(async () => - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - document.Undo(); - if (!noTimeout) - await VS.MessageBox.ShowErrorAsync($"Compilation of {document.Name} timeouted!"); - }); - - if (!noTimeout) - break; - } - else - { - Output.WriteLine($"Successfully removed #include: '{line.IncludeContent}'"); - ++numRemovedIncludes; - } - } - } - catch (Exception ex) - { - Output.WriteLine($"Unexpected error: {ex}"); - } - finally - { - _ = OnTrialAndErrorRemovalDone(progressDialog, document, numRemovedIncludes, canceled); - } - } - - private async Task OnTrialAndErrorRemovalDone(IVsThreadedWaitDialog2 progressDialog, EnvDTE.Document document, int numRemovedIncludes, bool canceled) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - // Close Progress bar. - progressDialog.EndWaitDialog(); - - // Remove build hook again. - UnsubscribeBuildEvents(); - - // Message. - Output.WriteLine(string.Format("Removed {0} #include directives from '{1}'", numRemovedIncludes, document.Name)); - _=Output.BringForwardAsync(); - - // Notify that we are done. - WorkInProgress = false; - OnFileFinished?.Invoke(numRemovedIncludes, canceled); - } - - private void SubscribeBuildEvents() - { - ThreadHelper.ThrowIfNotOnUIThread(); - buildEvents = VCUtil.GetDTE().Events.BuildEvents; - buildEvents.OnBuildDone += OnBuildFinished; - buildEvents.OnBuildProjConfigDone += OnBuildConfigFinished; - } - - private void UnsubscribeBuildEvents() - { - buildEvents.OnBuildDone -= OnBuildFinished; - buildEvents.OnBuildProjConfigDone -= OnBuildConfigFinished; - buildEvents = null; - } - - private void OnBuildFinished(vsBuildScope scope, vsBuildAction action) - { - //Output.WriteLine("OnBuildFinished. scope: {0}, action: {1}", scope, action); - outputWaitEvent.Set(); - } - - private void OnBuildConfigFinished(string project, string projectConfig, string platform, string solutionConfig, bool success) - { - //Output.WriteLine("OnBuildConfigFinished. project {0}, projectConfig {1}, platform {2}, solutionConfig {3}, success {4}", project, projectConfig, platform, solutionConfig, success); - lastBuildSuccessful = success; - } - } -} \ No newline at end of file diff --git a/IncludeToolboxShared/Util/Utils.cs b/IncludeToolboxShared/Util/Utils.cs index c194a21..94c9c2d 100644 --- a/IncludeToolboxShared/Util/Utils.cs +++ b/IncludeToolboxShared/Util/Utils.cs @@ -1,12 +1,9 @@ using System; -using System.Collections.Generic; using System.IO; using System.Linq; -using Microsoft.VisualStudio.Editor; -using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; -using Microsoft.VisualStudio.TextManager.Interop; +using Microsoft.VisualStudio.Text.Editor.OptionsExtensionMethods; namespace IncludeToolbox { @@ -22,6 +19,10 @@ public static string GetLineBreak(ITextEdit edit) { return GetLineBreak(edit.Snapshot); } + public static string GetLineBreak(IWpfTextView view) + { + return view.Options.GetNewLineCharacter(); + } internal static string GetLineBreak(ITextSnapshot snapshot) { return snapshot.Lines.ElementAt(0).GetLineBreakText(); //if there is some way to retreive interface of nl counter, I'll use it diff --git a/IncludeToolboxShared/Util/VCHelper.cs b/IncludeToolboxShared/Util/VCHelper.cs deleted file mode 100644 index 6b82b52..0000000 --- a/IncludeToolboxShared/Util/VCHelper.cs +++ /dev/null @@ -1,223 +0,0 @@ -using EnvDTE; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.VCProjectEngine; -using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; - -namespace IncludeToolbox -{ - public class VCQueryFailure : System.Exception - { - public VCQueryFailure(string message) : base(message) - { - } - } - - public class VCHelper - { - public bool IsVCProject(Project project) - { - return project?.Object is VCProject; - } - - private static async Task GetVCFileConfigForCompilation(Document document) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - if (document == null) - throw new VCQueryFailure("No document."); - - var vcProject = document.ProjectItem?.ContainingProject?.Object as VCProject; - if (vcProject == null) - throw new VCQueryFailure("The given document does not belong to a VC++ Project."); - - VCFile vcFile = document.ProjectItem?.Object as VCFile; - if (vcFile == null) - throw new VCQueryFailure("The given document is not a VC++ file."); - - if (vcFile.FileType != eFileType.eFileTypeCppCode) - throw new VCQueryFailure("The given document is not a compileable VC++ file."); - - IVCCollection fileConfigCollection = vcFile.FileConfigurations as IVCCollection; - VCFileConfiguration fileConfig = fileConfigCollection?.Item(vcProject.ActiveConfiguration.Name) as VCFileConfiguration; - if (fileConfig == null) - throw new VCQueryFailure("Failed to retrieve file config from document."); - - return fileConfig; - } - - private static VCTool GetToolFromActiveConfiguration(Project project) where VCTool : class - { - ThreadHelper.ThrowIfNotOnUIThread(); - - VCProject vcProject = project?.Object as VCProject; - if (vcProject == null) - throw new VCQueryFailure($"Failed to retrieve VCCLCompilerTool since project \"{project.Name}\" is not a VCProject."); - - VCConfiguration activeConfiguration = vcProject.ActiveConfiguration; - VCTool compilerTool = null; - foreach (var tool in (IVCCollection)activeConfiguration.Tools) - { - compilerTool = tool as VCTool; - if (compilerTool != null) - break; - } - - if (compilerTool == null) - throw new VCQueryFailure($"Couldn't find a {typeof(VCTool).Name} in active configuration of VC++ Project \"{vcProject.Name}\""); - - return compilerTool; - } - - public static VCLinkerTool GetLinkerTool(Project project) - { - VCProject vcProject = project?.Object as VCProject; - if (vcProject == null) - throw new VCQueryFailure("Failed to retrieve VCLinkerTool since project is not a VCProject."); - - VCConfiguration activeConfiguration = vcProject.ActiveConfiguration; - var tools = activeConfiguration.Tools; - VCLinkerTool linkerTool = null; - foreach (var tool in (IVCCollection)activeConfiguration.Tools) - { - linkerTool = tool as VCLinkerTool; - if (linkerTool != null) - break; - } - - if (linkerTool == null) - throw new VCQueryFailure("Couldn't file a VCLinkerTool in VC++ Project."); - - return linkerTool; - } - - public async Task IsCompilableFile(Document document) - { - try - { - await GetVCFileConfigForCompilation(document); - } - catch (VCQueryFailure queryFailure) - { - return new BoolWithReason() - { - Result = false, - Reason = queryFailure.Message, - }; - } - - return new BoolWithReason() - { - Result = true, - Reason = "", - }; - } - - public async Task CompileSingleFile(Document document) - { - var fileConfig = await GetVCFileConfigForCompilation(document); - if (fileConfig != null) - fileConfig.Compile(true, false); // WaitOnBuild==true always fails. - } - - public string GetCompilerSetting_Includes(Project project) - { - VCQueryFailure queryFailure; - try - { - VCCLCompilerTool compilerTool = GetToolFromActiveConfiguration(project); - if (compilerTool != null) - return compilerTool.FullIncludePath; - else - queryFailure = new VCQueryFailure("Unhandled error"); - } - catch (VCQueryFailure e) - { - queryFailure = e; - } - - // If querying the NMake tool fails, keep old reason for failure, since this is what we usually expect. Using NMake is seen as mere fallback. - try - { - VCNMakeTool nmakeTool = GetToolFromActiveConfiguration(project); - if (nmakeTool == null) - throw queryFailure; - - return nmakeTool.IncludeSearchPath; - } - catch - { - throw queryFailure; - } - } - - public void SetCompilerSetting_ShowIncludes(Project project, bool show) - { - GetToolFromActiveConfiguration(project).ShowIncludes = show; - } - - public bool GetCompilerSetting_ShowIncludes(Project project) - { - return GetToolFromActiveConfiguration(project).ShowIncludes; - } - - public string GetCompilerSetting_PreprocessorDefinitions(Project project) - { - VCQueryFailure queryFailure; - try - { - VCCLCompilerTool compilerTool = GetToolFromActiveConfiguration(project); - if (compilerTool != null) - return compilerTool.PreprocessorDefinitions.Replace("\\\"$(INHERIT)\\\";", ""); - else - queryFailure = new VCQueryFailure("Unhandled error"); - } - catch (VCQueryFailure e) - { - queryFailure = e; - } - - // If querying the NMake tool fails, keep old reason for failure, since this is what we usually expect. Using NMake is seen as mere fallback. - try - { - VCNMakeTool nmakeTool = GetToolFromActiveConfiguration(project); - if (nmakeTool == null) - throw queryFailure; - - return nmakeTool.PreprocessorDefinitions; - } - catch - { - throw queryFailure; - } - } - - // https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.machinetypeoption.aspx - public enum TargetMachineType - { - NotSet = 0, - X86 = 1, - AM33 = 2, - ARM = 3, - EBC = 4, - IA64 = 5, - M32R = 6, - MIPS = 7, - MIPS16 = 8, - MIPSFPU = 9, - MIPSFPU16 = 10, - MIPSR41XX = 11, - SH3 = 12, - SH3DSP = 13, - SH4 = 14, - SH5 = 15, - THUMB = 16, - AMD64 = 17 - } - - public TargetMachineType GetLinkerSetting_TargetMachine(EnvDTE.Project project) - { - return (TargetMachineType)GetLinkerTool(project).TargetMachine; - } - } -} diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs index 708e64e..f762157 100644 --- a/IncludeToolboxShared/Util/VCUtil.cs +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -2,23 +2,26 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.VCProjectEngine; -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using static Microsoft.VisualStudio.VSConstants; using Project = Community.VisualStudio.Toolkit.Project; -using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { - public static class ProjectExtension + public static class VSToolkitExtension { public static async Task ToVCProjectAsync(this Project project) { project.GetItemInfo(out var hierarchy, out _, out _); return await VCUtil.GetVCProjectAsync(hierarchy); } + public static async Task ToVCProjectItemAsync(this SolutionItem project) + { + project.GetItemInfo(out var hierarchy, out var n, out _); + return await VCUtil.GetVCProjectItemAsync(hierarchy, n); + } } @@ -31,24 +34,29 @@ public class VCUtil public static Standard Std { get => std; } - public static EnvDTE80.DTE2 GetDTE() //DEPRECATED - { - var dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2; - if (dte == null) - { - throw new System.Exception("Failed to retrieve DTE2!"); - } - return dte; - } - - public static async Task GetVCProjectAsync(IVsHierarchy hierarchy) + internal static async Task GetVCProjectAsync(IVsHierarchy hierarchy) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); _ = hierarchy.GetProperty(VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out var objProj); return (objProj as EnvDTE.Project)?.Object as VCProject; } + internal static async Task GetVCProjectItemAsync(IVsHierarchy item, uint n) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + _ = item.GetProperty(n, (int)__VSHPROPID.VSHPROPID_ExtObject, out var objProj); + return (objProj as EnvDTE.ProjectItem)?.Object as VCProjectItem; + } + internal static VCFileConfiguration GetVCFileConfig(VCProjectItem item) + { + var project = item.project as VCProject; + if (project == null) return null; + + VCFile file = (VCFile)item; + var configs = (IVCCollection)file.FileConfigurations; - + if (configs?.Item(project.ActiveConfiguration.Name) is not VCFileConfiguration fileConfig) return null; + return fileConfig; + } public static async Task> GetIncludeDirsAsync() { diff --git a/IncludeToolboxShared/Util/VSUtils.cs b/IncludeToolboxShared/Util/VSUtils.cs deleted file mode 100644 index 0cdf18f..0000000 --- a/IncludeToolboxShared/Util/VSUtils.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Microsoft.VisualStudio.Editor; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Text.Editor; -using Microsoft.VisualStudio.TextManager.Interop; -using EnvDTE; -using Microsoft.VisualStudio; -using Microsoft.VisualStudio.Shell.Interop; -using Community.VisualStudio.Toolkit; -using OutputWindowPane = EnvDTE.OutputWindowPane; - -namespace IncludeToolbox -{ - public static class VSUtils - { - public static EnvDTE80.DTE2 GetDTE() - { - var dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2; - if (dte == null) - { - throw new System.Exception("Failed to retrieve DTE2!"); - } - return dte; - } - - // Historically, the GUIDs of the COM interfaces in VCProject/VCProjectEngine would change from version to version. - // To work around this we had several builds of VCHelpers that we could choose from, each with a different dependency. - // With VS2019, the older versions are no longer available and we're stuck with a single version for better or worse. - - public static VCHelper VCUtils = new VCHelper(); - - /// - /// Tries to retrieve include directories from a project. - /// For each encountered path it will try to resolve the paths to absolute paths. - /// - /// Empty list if include directory retrieval failed. - public static List GetProjectIncludeDirectories(EnvDTE.Project project, bool endWithSeparator = true) - { - List pathStrings = new List(); - if (project == null) - return pathStrings; - - string projectIncludeDirectories; - try - { - projectIncludeDirectories = VCUtils.GetCompilerSetting_Includes(project); - } - catch (VCQueryFailure e) - { - Output.WriteLine(e.Message); - return pathStrings; - } - - ThreadHelper.ThrowIfNotOnUIThread(); - string projectPath = Path.GetDirectoryName(Path.GetFullPath(project.FileName)); - - // According to documentation FullIncludePath has resolved macros. - - pathStrings.AddRange(projectIncludeDirectories.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); - - for (int i = pathStrings.Count - 1; i >= 0; --i) - { - try - { - pathStrings[i] = pathStrings[i].Trim(); - if (!Path.IsPathRooted(pathStrings[i])) - { - pathStrings[i] = Path.Combine(projectPath, pathStrings[i]); - } - pathStrings[i] = Utils.GetExactPathName(Path.GetFullPath(pathStrings[i])); - - if (endWithSeparator) - pathStrings[i] += Path.DirectorySeparatorChar; - } - catch - { - pathStrings.RemoveAt(i); - } - } - return pathStrings; - } - - public static IWpfTextViewHost GetCurrentTextViewHost() - { - IVsTextManager textManager = Package.GetGlobalService(typeof(SVsTextManager)) as IVsTextManager; - - IVsTextView textView = null; - textManager.GetActiveView(1, null, out textView); - - var userData = textView as IVsUserData; - if (userData == null) - { - return null; - } - else - { - Guid guidViewHost = DefGuidList.guidIWpfTextViewHost; - object holder; - userData.GetData(ref guidViewHost, out holder); - var viewHost = (IWpfTextViewHost)holder; - - return viewHost; - } - } - - public static EnvDTE.Window OpenFileAndShowDocument(string filePath) - { - ThreadHelper.ThrowIfNotOnUIThread(); - - if (filePath == null) - return null; - - var dte = VSUtils.GetDTE(); - EnvDTE.Window fileWindow = dte.ItemOperations.OpenFile(filePath); - if (fileWindow == null) - { - Output.WriteLine($"Failed to open File {filePath}"); - return null; - } - fileWindow.Activate(); - fileWindow.Visible = true; - - return fileWindow; - } - - public static string GetOutputText() - { - ThreadHelper.ThrowIfNotOnUIThread(); - var dte = GetDTE(); - if (dte == null) - return ""; - - - OutputWindowPane buildOutputPane = null; - foreach (OutputWindowPane pane in dte.ToolWindows.OutputWindow.OutputWindowPanes) - { - if (pane.Guid == VSConstants.OutputWindowPaneGuid.BuildOutputPane_string) - { - buildOutputPane = pane; - break; - } - } - if (buildOutputPane == null) - { - _ = VS.MessageBox.ShowErrorAsync("Failed to query for build output pane!"); - return null; - } - TextSelection sel = buildOutputPane.TextDocument.Selection; - - sel.StartOfDocument(false); - sel.EndOfDocument(true); - - return sel.Text; - } - } -} diff --git a/README.md b/README.md index d9818bd..8a1b377 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,11 @@ Include Toolbox consists of 4 different tools. All of them are only applicable t ![](/art/AddPageGuides.png) **[Command]** Mapper module for IWYU ![](/art/igraph.png)**[Tool Window]** ~~Include Graph~~ +## Links +[Open VSIX Gallery](https://www.vsixgallery.com/extension/IncludeToolbox2019.1431faa5-aa04-47af-8289-9d887e0696a4) +Marketplace(tbd) +[Version History](/doc/changelog.md) + # Tools in Detail ## Include Formatter @@ -61,7 +66,7 @@ The exact behavior of this command can be controlled in _Tools>Options>Include T * Removal Order Wheater the tool should run from top to bottom or bottom to top (this can make a difference on the end result) -To suppress removal of a single include, add a comment to its line containing _$include-toolbox-preserve$_ +To suppress removal of a single include, add a comment to its line containing `//IWYU pragma: keep` ## Include-What-You-Use Integration @@ -105,6 +110,7 @@ To specify relative index use *Relative File Prefix* option. e.g. C:\\users\\map ## ~~Include Graph~~ +Added option page. Soon. Requires fixes. # FAQ: @@ -112,119 +118,4 @@ Requires fixes. * Why don't you apply the formatting to all includes within a file? This may sound desirable, but is very messy if there are optional includes (preprocessor) or specific exceptions where not all includes should be in the same place or in the default order. * XY didn't work, what is going on? - Look in the output window for Include Toolbox to get more information. - -# Version History -* 3.1.22 - * New Include Format parsing, performed using project Lexer - * Small fixes and DTE reduction - * Unified formatting pragma for duplicate removal -* 3.0.0 - * Versions have new pattern (enforced by github pipelines) Major.Minor.Build, the build number does not decrease. - * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. - * Refactoring of IWYU, new code and new feature set. - * Some features are dropped for now, until fixed. - * Build pipeline for IWYU, which builds every month at [Build Pipeline](https://github.com/Agrael1/BuildIWYU)! - * CI/CD for this whole project! - * Added Include mapper[beta] for IWYU, works as public-public include mapping. - * Include What You Use additions: - * Added LL1 partial parser for includes and forward declarations. - * Added forward declaration moving to the beginning of the file, after all the includes. - * Empty namespace removal tool. -* 2.4.1 - * Fixed crash when opening context menu on some non-project files -* 2.4.0 - * Added support for Visual Studio 2019 - * Dropped support for Visual Studio 2015 - * Made some operations asynchronous under the hood, related bugfixing/checks driven by VS2019's static analysis warnings -* 2.3.0 - * Include Formatter contributions by _[Dakota Hawkins](https://github.com/dakotahawkins)_ - * has now a remove duplicates option which is enabled by default - * Fixed not adding newlines before the last line of a batch - * Fixed TrialAndErrorRemoval stopping when encountering an unsupported document, changed operation timeout to a couple of minutes ([PR by _bytefactory73_](https://github.com/Wumpf/IncludeToolbox/pull/58)) - * Fixed IWYU failing for long command line argument ([PR by _codingdave_](https://github.com/Wumpf/IncludeToolbox/pull/60)) - * Trying now to query NMake settings for include paths if there is no VCCLCompilerTool present (happens if vcxproj is not a standard C++ project) -* 2.2.0 - * IWYU Integration/Trial and Error Include Removal - * Introduced comment-tag to avoid removing include (thx to [_ergins23_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/38)) - * IWYU Integration - * Passes now arch parameter for x64 projects on (thx to [_Fei_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/43)) - * Added option for custom parameters (thx to [_Fei_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/44)) -* 2.1.5 - * [Fixed](https://github.com/Wumpf/IncludeToolbox/issues/41) random timeouts in Trial and Error Include Removal - * Updated internal library references & used VS Extension toolkit -* 2.1 - * DGML graph saving feature improvements - - * Each nodes has information about child count and unique transitive child counts - * Option to color elements by transitive child count - * Option to group by folders, expanded or collapsed - * Messageprompt after graph is saved, allows to open in VS directly - * Other fixes and small improvements - - * Renamed "Try and Error Include Removal" to "_Trial_ and Error Include Removal" (thx to [_steronydh_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/35)) - * Include sorting treats other preprocessor directives as barrier over which includes can't be moved (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/34)) - * Pressing enter on item in Include Graph jumps to include (previously only double click) - * Fixed Include Graph not displaying graph when switching active file while graph is computed -* 2.0.1 - * Fixed bug that BlankAfterRegexGroupMatch option would only work if RemoveEmptyLines was active as well. - * Fixed crash in formatter if delimiter mode not "Unchanged" + "Remove Empty Lines" was false. (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/33)) - * Include Graph folder items end now in slashes. -* 2.0 - * Rewrote Include Graph ("Include Viewer" previously) - * New, improved UI - * Allows to display includes grouped by folder - * Much faster graph bulid up using by direct parsing (as alternative to compile with /showIncludes) - * Double click can navigate to include site - * Graph can be saved as DGML file - * Trial-and-Error-Include-Removal "Ignore List" option does now support "$(currentFilename)" macro - * Default setting include "(\/|\\\\|^)$(currentFilename)\.(h|hpp|hxx|inl|c|cpp|cxx)$" to ignore corresponding header file in removal -* 1.8 - * Include-what-you-use (iwyu): - * Iwyu.exe is no longer part of the package. Instead there is a automatic download and update from a [different repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) on first use. - * iwyu.exe path can be configured by user - * In case of automatic download, mapping files in iwyu path will be added to configuration - * Fixed hardcoded defines being passed to iwyu - * MSVC version is correctly passed to iwyu - * Fixed issues with applying removal/addition of declarations - * Changes can now optionally run through IncludeFormatter (on by default) - * Formatter: - * Include parser recognizes all whitespace-only lines as empty - * No longer resolves includes via file local path if "Ignore File Relative" option is active - * Formatting applied to includes inside preprocessor conditionals again. (Still ignored for include removal though) - * Fixed incorrect include parse behavior for preceding /* */ comment. - * Fixed potential crashes in internal path resolve - * Other: - * New Icons! - * Safer against crashes in commands - * Codebase has now a handful of unit tests -* 1.7 - * .inl and _inl.h are by default ignored for trial-and-error-include-removal (configurable) - * New option for trial-and-error-include-removal to keep line breaks (off by default) - * _Contributed_ by [Adam Skoglund](https://github.com/gulgi): Another fix for folder handling in trial-and-error-include-removal -* 1.6 _- _Contributed_ by [Adam Skoglund](https://github.com/gulgi)_ - - * Basic support for #if/#endif - any include within an #if/#endif block will be ignored. - * Better support for subdirectories in trial-and-error-include-removal on projects. -* 1.5 - * Fixed problems with VCProject runtimes in VS2015 introduced in previous version. - Required suprisingly large internal restructuring to support both VS2015 and VS2017 equally. -* 1.4 - * Support for VS2017 - * "Format Selected Includes" action is now only visible if includes were actually selected. - * "Format Selected Includes" works partially now also on files that are not in the currently loaded project - * Fixed an error in IWYU include removal parsing -* 1.3 - __Contributed_ by [Dakota Hawkins](https://github.com/dakotahawkins)_ - - * Added option to put spaces between precedence regex matches. - * Improved regex sorting via "Schwartzian transform" (= grouping by regex order number before sorting). -* 1.2 _- Contributed by [Dakota Hawkins](https://github.com/dakotahawkins)_ - * Added option to include delimiters in precedence regex to allow more advanced sorting (for a sample see [original pull request](https://github.com/Wumpf/IncludeToolbox/pull/4)). -* 1.1 - * Remove dependency to ezEngine. - * IncludeViewer visualizes now the output of the /showIncludes command instead of trying to run the preprocessor manually. -* 1.01 - * Have includes with quotes or angle brackets first -* 1.0 - * First release. - * Merged two old projects "Include Viewer" and "Include Formatter" to new "Include Toolbox" bundle + Look in the output window for Include Toolbox to get more information. \ No newline at end of file diff --git a/Tests/Tests/IncludeParseTests.cs b/Tests/Tests/IncludeParseTests.cs new file mode 100644 index 0000000..a3ed8ff --- /dev/null +++ b/Tests/Tests/IncludeParseTests.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using IncludeToolbox; + +namespace Tests +{ + internal class IncludeParseTests + { + [Test] + public void TestBasic() + { + var text = "#include "; + var lines = Parser.ParseInclues(text, true); + Assert.IsTrue(lines.Any()); + var line = lines[0]; + Assert.IsTrue(line.keep == false); + Assert.IsTrue(line.FullFile.SequenceEqual("")); + Assert.IsTrue(line.Project(text).SequenceEqual(text)); + } + + [Test] + public void TestBasicNewline() + { + var text = "#include \r\n //gigachad"; + var lines = Parser.ParseInclues(text, true); + Assert.IsTrue(lines.Any()); + var line = lines[0]; + Assert.IsTrue(line.keep == false); + Assert.IsTrue(line.FullFile.SequenceEqual("")); + Assert.IsTrue(line.Project(text).SequenceEqual("#include \r\n")); + + var text2 = "#include //gigachad"; + var lines2 = Parser.ParseInclues(text2, true); + Assert.IsTrue(lines.Any()); + var line2 = lines2[0]; + Assert.IsTrue(line2.keep == false); + Assert.IsTrue(line2.FullFile.SequenceEqual("")); + Assert.IsTrue(line2.Project(text2).SequenceEqual(text2)); + + var text3 = "#include //gigachad\n"; + var lines3 = Parser.ParseInclues(text3, true); + Assert.IsTrue(lines.Any()); + var line3 = lines3[0]; + Assert.IsTrue(line3.keep == false); + Assert.IsTrue(line3.FullFile.SequenceEqual("")); + Assert.IsTrue(line3.Project(text3).SequenceEqual(text3)); + } + + [Test] + public void TestSpan() + { + var text = " #include \r\n#include "; + var lines = Parser.ParseInclues(text[3..], true); + Assert.IsTrue(lines.Length == 2); + var line = lines[1]; + Assert.IsTrue(line.keep == false); + Assert.IsTrue(line.FullFile.SequenceEqual("")); + var offs = line.ReplaceSpan(3); + Assert.IsTrue(text.Substring(offs.Start, offs.Length).SequenceEqual("#include ")); + + var text2 = " #include \r\n#include //Giga \n"; + var lines2 = Parser.ParseInclues(text2[3..], true); + Assert.IsTrue(lines2.Length == 2); + var line2 = lines2[1]; + Assert.IsTrue(line2.keep == false); + Assert.IsTrue(line2.FullFile.SequenceEqual("")); + var offs2 = line2.ReplaceSpan(3); + Assert.IsTrue(text2.Substring(offs2.Start, offs2.Length).SequenceEqual("#include //Giga \n")); + } + } +} diff --git a/Tests/Tests/LexTests.cs b/Tests/Tests/LexTests.cs new file mode 100644 index 0000000..8840061 --- /dev/null +++ b/Tests/Tests/LexTests.cs @@ -0,0 +1,72 @@ +using IncludeToolbox; +using static IncludeToolbox.Lexer; + +namespace Tests +{ + public class LexTests + { + [SetUp] + public void Setup() + { + + } + + [Test] + public void TestBasicToken() + { + Context lexer = new("hello\n"); + + var token = lexer.GetToken(true); + Assert.IsTrue(token.Value.SequenceEqual("hello")); + token = lexer.GetToken(true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\n")); + } + + [Test] + public void TestToken() + { + Context lexer = new("class B;\r\n // assault rifle"); + + var token = lexer.GetToken(true); + Assert.IsTrue(token.Type == TType.Class); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.ID && token.Value.SequenceEqual("B")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Semicolon); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\r\n")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Commentary && token.Value.SequenceEqual("// assault rifle")); + } + + [Test] + public void TestCommentaries() + { + Context lexer = new("/*class \n\n B;\r\n*/\r\n// assault rifle\r\n"); + var token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.MLCommentary && token.Value.SequenceEqual("/*class \n\n B;\r\n*/")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\r\n")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Commentary && token.Value.SequenceEqual("// assault rifle")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\r\n")); + } + + [Test] + public void TestNewlines() + { + Context lexer = new("\n \n \r\n \r \n"); + var token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\n") && token.Position == 0); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\n")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\r\n")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\r")); + token = lexer.GetToken(true, true, true, true); + Assert.IsTrue(token.Type == TType.Newline && token.Value.SequenceEqual("\n")); + } + } +} \ No newline at end of file diff --git a/Tests/Tests/Tests.csproj b/Tests/Tests/Tests.csproj new file mode 100644 index 0000000..3b3c7b6 --- /dev/null +++ b/Tests/Tests/Tests.csproj @@ -0,0 +1,24 @@ + + + + net6.0-windows8.0 + enable + enable + + false + + + + + + + + + + + + + + + + diff --git a/Tests/Tests/Usings.cs b/Tests/Tests/Usings.cs new file mode 100644 index 0000000..cefced4 --- /dev/null +++ b/Tests/Tests/Usings.cs @@ -0,0 +1 @@ +global using NUnit.Framework; \ No newline at end of file diff --git a/doc/changelog.md b/doc/changelog.md new file mode 100644 index 0000000..298c974 --- /dev/null +++ b/doc/changelog.md @@ -0,0 +1,120 @@ +# Version History +* 3.2.32 + * Refactored Trial And Error + * DTE support removed + * Cleaned up utils + * Added tests for Lex and Parser and test steps in building pipeline + \*BREAKING CHANGES\** Unified pragmas with IWYU +* 3.1.22 + * New Include Format parsing, performed using project Lexer + * Small fixes and DTE reduction + * Unified formatting pragma for duplicate removal +* 3.0.0 + * Versions have new pattern (enforced by github pipelines) Major.Minor.Build, the build number does not decrease. + * New SDK and Tools. General renewal. Visual Studio 2022 support, dropped support for 2015 and 2017. + * Refactoring of IWYU, new code and new feature set. + * Some features are dropped for now, until fixed. + * Build pipeline for IWYU, which builds every month at [Build Pipeline](https://github.com/Agrael1/BuildIWYU)! + * CI/CD for this whole project! + * Added Include mapper[beta] for IWYU, works as public-public include mapping. + * Include What You Use additions: + * Added LL1 partial parser for includes and forward declarations. + * Added forward declaration moving to the beginning of the file, after all the includes. + * Empty namespace removal tool. +* 2.4.1 + * Fixed crash when opening context menu on some non-project files +* 2.4.0 + * Added support for Visual Studio 2019 + * Dropped support for Visual Studio 2015 + * Made some operations asynchronous under the hood, related bugfixing/checks driven by VS2019's static analysis warnings +* 2.3.0 + * Include Formatter contributions by _[Dakota Hawkins](https://github.com/dakotahawkins)_ + * has now a remove duplicates option which is enabled by default + * Fixed not adding newlines before the last line of a batch + * Fixed TrialAndErrorRemoval stopping when encountering an unsupported document, changed operation timeout to a couple of minutes ([PR by _bytefactory73_](https://github.com/Wumpf/IncludeToolbox/pull/58)) + * Fixed IWYU failing for long command line argument ([PR by _codingdave_](https://github.com/Wumpf/IncludeToolbox/pull/60)) + * Trying now to query NMake settings for include paths if there is no VCCLCompilerTool present (happens if vcxproj is not a standard C++ project) +* 2.2.0 + * IWYU Integration/Trial and Error Include Removal + * Introduced comment-tag to avoid removing include (thx to [_ergins23_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/38)) + * IWYU Integration + * Passes now arch parameter for x64 projects on (thx to [_Fei_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/43)) + * Added option for custom parameters (thx to [_Fei_ for suggesting](https://github.com/Wumpf/IncludeToolbox/issues/44)) +* 2.1.5 + * [Fixed](https://github.com/Wumpf/IncludeToolbox/issues/41) random timeouts in Trial and Error Include Removal + * Updated internal library references & used VS Extension toolkit +* 2.1 + * DGML graph saving feature improvements + + * Each nodes has information about child count and unique transitive child counts + * Option to color elements by transitive child count + * Option to group by folders, expanded or collapsed + * Messageprompt after graph is saved, allows to open in VS directly + * Other fixes and small improvements + + * Renamed "Try and Error Include Removal" to "_Trial_ and Error Include Removal" (thx to [_steronydh_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/35)) + * Include sorting treats other preprocessor directives as barrier over which includes can't be moved (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/34)) + * Pressing enter on item in Include Graph jumps to include (previously only double click) + * Fixed Include Graph not displaying graph when switching active file while graph is computed +* 2.0.1 + * Fixed bug that BlankAfterRegexGroupMatch option would only work if RemoveEmptyLines was active as well. + * Fixed crash in formatter if delimiter mode not "Unchanged" + "Remove Empty Lines" was false. (thx to [_etiennehebert_ for reporting](https://github.com/Wumpf/IncludeToolbox/issues/33)) + * Include Graph folder items end now in slashes. +* 2.0 + * Rewrote Include Graph ("Include Viewer" previously) + * New, improved UI + * Allows to display includes grouped by folder + * Much faster graph bulid up using by direct parsing (as alternative to compile with /showIncludes) + * Double click can navigate to include site + * Graph can be saved as DGML file + * Trial-and-Error-Include-Removal "Ignore List" option does now support "$(currentFilename)" macro + * Default setting include "(\/|\\\\|^)$(currentFilename)\.(h|hpp|hxx|inl|c|cpp|cxx)$" to ignore corresponding header file in removal +* 1.8 + * Include-what-you-use (iwyu): + * Iwyu.exe is no longer part of the package. Instead there is a automatic download and update from a [different repository](https://github.com/Wumpf/iwyu_for_vs_includetoolbox) on first use. + * iwyu.exe path can be configured by user + * In case of automatic download, mapping files in iwyu path will be added to configuration + * Fixed hardcoded defines being passed to iwyu + * MSVC version is correctly passed to iwyu + * Fixed issues with applying removal/addition of declarations + * Changes can now optionally run through IncludeFormatter (on by default) + * Formatter: + * Include parser recognizes all whitespace-only lines as empty + * No longer resolves includes via file local path if "Ignore File Relative" option is active + * Formatting applied to includes inside preprocessor conditionals again. (Still ignored for include removal though) + * Fixed incorrect include parse behavior for preceding /* */ comment. + * Fixed potential crashes in internal path resolve + * Other: + * New Icons! + * Safer against crashes in commands + * Codebase has now a handful of unit tests +* 1.7 + * .inl and _inl.h are by default ignored for trial-and-error-include-removal (configurable) + * New option for trial-and-error-include-removal to keep line breaks (off by default) + * _Contributed_ by [Adam Skoglund](https://github.com/gulgi): Another fix for folder handling in trial-and-error-include-removal +* 1.6 _- _Contributed_ by [Adam Skoglund](https://github.com/gulgi)_ + + * Basic support for #if/#endif - any include within an #if/#endif block will be ignored. + * Better support for subdirectories in trial-and-error-include-removal on projects. +* 1.5 + * Fixed problems with VCProject runtimes in VS2015 introduced in previous version. + Required suprisingly large internal restructuring to support both VS2015 and VS2017 equally. +* 1.4 + * Support for VS2017 + * "Format Selected Includes" action is now only visible if includes were actually selected. + * "Format Selected Includes" works partially now also on files that are not in the currently loaded project + * Fixed an error in IWYU include removal parsing +* 1.3 - __Contributed_ by [Dakota Hawkins](https://github.com/dakotahawkins)_ + + * Added option to put spaces between precedence regex matches. + * Improved regex sorting via "Schwartzian transform" (= grouping by regex order number before sorting). +* 1.2 _- Contributed by [Dakota Hawkins](https://github.com/dakotahawkins)_ + * Added option to include delimiters in precedence regex to allow more advanced sorting (for a sample see [original pull request](https://github.com/Wumpf/IncludeToolbox/pull/4)). +* 1.1 + * Remove dependency to ezEngine. + * IncludeViewer visualizes now the output of the /showIncludes command instead of trying to run the preprocessor manually. +* 1.01 + * Have includes with quotes or angle brackets first +* 1.0 + * First release. + * Merged two old projects "Include Viewer" and "Include Formatter" to new "Include Toolbox" bundle From f6e3b36bce2554a106eb6e9bec4a32f463eca269 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 25 Aug 2022 22:39:55 +0200 Subject: [PATCH 58/86] fixed version --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index da45aff..80effc7 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.1.0"; + public const string Version = "3.2.0"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 4dd9f6c..2fb6b45 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index a8c3c0c..15b3138 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.1.0"; + public const string Version = "3.2.0"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index ae5ba4e..8590880 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt From b0671ad0deef7351d273684968061638edf4a650 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 25 Aug 2022 22:59:04 +0200 Subject: [PATCH 59/86] fixes to pipeline --- .github/workflows/main.yml | 2 +- README.md | 7 ++++++- doc/changelog.md | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 09bc529..ead8d27 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,7 +51,7 @@ jobs: uses: darenm/Setup-VSTest@v1 - name: Test - run: vstest.console.exe \_built\*Test.dll + run: vstest.console.exe \_built\*Tests.dll - name: Upload artifact uses: actions/upload-artifact@v2 diff --git a/README.md b/README.md index 8a1b377..e138a02 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,13 @@ Include Toolbox consists of 4 different tools. All of them are only applicable t ![](/art/igraph.png)**[Tool Window]** ~~Include Graph~~ ## Links -[Open VSIX Gallery](https://www.vsixgallery.com/extension/IncludeToolbox2019.1431faa5-aa04-47af-8289-9d887e0696a4) + +[Open VSIX Gallery 2019](https://www.vsixgallery.com/extension/IncludeToolbox2019.1431faa5-aa04-47af-8289-9d887e0696a4) + +[Open VSIX Gallery 2022](https://www.vsixgallery.com/extension/IncludeToolbox2022.d3cba4fe-8d65-479b-8436-18d743ee7b53) + Marketplace(tbd) + [Version History](/doc/changelog.md) # Tools in Detail diff --git a/doc/changelog.md b/doc/changelog.md index 298c974..b09cd67 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -4,7 +4,7 @@ * DTE support removed * Cleaned up utils * Added tests for Lex and Parser and test steps in building pipeline - \*BREAKING CHANGES\** Unified pragmas with IWYU + * \*BREAKING CHANGES\* Unified pragmas with IWYU * 3.1.22 * New Include Format parsing, performed using project Lexer * Small fixes and DTE reduction From 7d2c3c6ae863dbc821eee3db2655c70da7e2cb32 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 26 Aug 2022 12:22:45 +0200 Subject: [PATCH 60/86] Added property for default msvc mappings --- IncludeToolBox.sln | 30 ++++++++++++----- IncludeToolbox2019/IncludeToolbox2019.csproj | 6 ++-- IncludeToolbox2022/IncludeToolbox2022.csproj | 9 ++++-- .../Commands/FormatIncludes.cs | 1 + IncludeToolboxShared/Commands/GenMap.cs | 1 + IncludeToolboxShared/Commands/RemoveMap.cs | 1 + IncludeToolboxShared/Commands/RunIWYU.cs | 6 ++-- .../Commands/RunIWYUProject.cs | 3 +- .../TrialAndErrorRemoval_CodeWindow.cs | 1 + .../Commands/TrialAndErrorRemoval_Project.cs | 1 + IncludeToolboxShared/IWYU/IWYU.cs | 15 ++++++--- IncludeToolboxShared/IWYU/IWYUDownload.cs | 32 ++++++++----------- .../Implementation/TrialAndErrorRemoval.cs | 1 + IncludeToolboxShared/IncludeToolboxPackage.cs | 2 +- IncludeToolboxShared/Options/IWYUOptions.cs | 7 ++++ README.md | 4 ++- doc/changelog.md | 2 ++ 17 files changed, 79 insertions(+), 43 deletions(-) diff --git a/IncludeToolBox.sln b/IncludeToolBox.sln index c0c1085..0cbecbf 100644 --- a/IncludeToolBox.sln +++ b/IncludeToolBox.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.32804.182 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32630.194 MinimumVisualStudioVersion = 10.0.40219.1 Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IncludeToolboxShared", "IncludeToolboxShared\IncludeToolboxShared.shproj", "{C50C4863-6200-4E51-837A-31FEBC09C8B2}" EndProject @@ -9,38 +9,57 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2022", "Inclu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncludeToolbox2019", "IncludeToolbox2019\IncludeToolbox2019.csproj", "{A81A5332-6A20-4F3B-90B4-E55985B9CF59}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests\Tests.csproj", "{34631D93-26A2-4682-8C7C-B2042CD7D872}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests\Tests.csproj", "{34631D93-26A2-4682-8C7C-B2042CD7D872}" EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + IncludeToolboxShared\IncludeToolboxShared.projitems*{7d29cece-07d3-4417-9d63-1362852f18f3}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{a81a5332-6a20-4f3b-90b4-e55985b9cf59}*SharedItemsImports = 4 + IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|arm64 = Debug|arm64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|arm64 = Release|arm64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|arm64.ActiveCfg = Debug|Any CPU + {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|arm64.Build.0 = Debug|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|x86.ActiveCfg = Debug|x86 {7D29CECE-07D3-4417-9D63-1362852F18F3}.Debug|x86.Build.0 = Debug|x86 {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|Any CPU.Build.0 = Release|Any CPU + {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|arm64.ActiveCfg = Release|Any CPU + {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|arm64.Build.0 = Release|Any CPU {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|x86.ActiveCfg = Release|x86 {7D29CECE-07D3-4417-9D63-1362852F18F3}.Release|x86.Build.0 = Release|x86 {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|arm64.ActiveCfg = Debug|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|arm64.Build.0 = Debug|Any CPU {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|x86.ActiveCfg = Debug|x86 {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Debug|x86.Build.0 = Debug|x86 {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|Any CPU.ActiveCfg = Release|Any CPU {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|Any CPU.Build.0 = Release|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|arm64.ActiveCfg = Release|Any CPU + {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|arm64.Build.0 = Release|Any CPU {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|x86.ActiveCfg = Release|x86 {A81A5332-6A20-4F3B-90B4-E55985B9CF59}.Release|x86.Build.0 = Release|x86 {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|arm64.ActiveCfg = Debug|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|arm64.Build.0 = Debug|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|x86.ActiveCfg = Debug|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Debug|x86.Build.0 = Debug|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|Any CPU.ActiveCfg = Release|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|Any CPU.Build.0 = Release|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|arm64.ActiveCfg = Release|Any CPU + {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|arm64.Build.0 = Release|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|x86.ActiveCfg = Release|Any CPU {34631D93-26A2-4682-8C7C-B2042CD7D872}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection @@ -50,9 +69,4 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {87A2994A-8E27-4066-8C05-7E4DD461D23D} EndGlobalSection - GlobalSection(SharedMSBuildProjectFiles) = preSolution - IncludeToolboxShared\IncludeToolboxShared.projitems*{7d29cece-07d3-4417-9d63-1362852f18f3}*SharedItemsImports = 4 - IncludeToolboxShared\IncludeToolboxShared.projitems*{a81a5332-6a20-4f3b-90b4-e55985b9cf59}*SharedItemsImports = 4 - IncludeToolboxShared\IncludeToolboxShared.projitems*{c50c4863-6200-4e51-837a-31febc09c8b2}*SharedItemsImports = 13 - EndGlobalSection EndGlobal diff --git a/IncludeToolbox2019/IncludeToolbox2019.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj index 03ec2de..8c2a316 100644 --- a/IncludeToolbox2019/IncludeToolbox2019.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -105,14 +105,14 @@ - 17.2.32505.173 + 16.10.31320.204 - + runtime; build; native; contentfiles; analyzers; buildtransitive all - 4.5.4 + 4.5.5 diff --git a/IncludeToolbox2022/IncludeToolbox2022.csproj b/IncludeToolbox2022/IncludeToolbox2022.csproj index ae2a2e2..19973a3 100644 --- a/IncludeToolbox2022/IncludeToolbox2022.csproj +++ b/IncludeToolbox2022/IncludeToolbox2022.csproj @@ -109,8 +109,13 @@ - - + + compile; build; native; contentfiles; analyzers; buildtransitive + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + diff --git a/IncludeToolboxShared/Commands/FormatIncludes.cs b/IncludeToolboxShared/Commands/FormatIncludes.cs index 7e66508..4d9e885 100644 --- a/IncludeToolboxShared/Commands/FormatIncludes.cs +++ b/IncludeToolboxShared/Commands/FormatIncludes.cs @@ -6,6 +6,7 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands diff --git a/IncludeToolboxShared/Commands/GenMap.cs b/IncludeToolboxShared/Commands/GenMap.cs index fe6e772..865a1c9 100644 --- a/IncludeToolboxShared/Commands/GenMap.cs +++ b/IncludeToolboxShared/Commands/GenMap.cs @@ -1,6 +1,7 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; using System.Linq; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { diff --git a/IncludeToolboxShared/Commands/RemoveMap.cs b/IncludeToolboxShared/Commands/RemoveMap.cs index 1d720d6..147dcb1 100644 --- a/IncludeToolboxShared/Commands/RemoveMap.cs +++ b/IncludeToolboxShared/Commands/RemoveMap.cs @@ -2,6 +2,7 @@ using Microsoft.VisualStudio.Shell; using System.Threading.Tasks; using System; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index c079825..470391d 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -3,10 +3,8 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using System; -using System.IO; -using System.Threading.Tasks; -using static System.Net.WebRequestMethods; using File = System.IO.File; +using Task = System.Threading.Tasks.Task; @@ -73,7 +71,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) dlg.CreateInstance(out IVsThreadedWaitDialog2 xdialog); IVsThreadedWaitDialog4 dialog = xdialog as IVsThreadedWaitDialog4; - dialog.StartWaitDialogWithCallback("Include Minimizer", "Running include-what-you-use", null, null, "Running include-what-you-use", true, 0, true, 0, 0, cancelCallback); + dialog.StartWaitDialogWithCallback("Include Toolbox", "Running include-what-you-use", null, null, "Running include-what-you-use", true, 0, true, 0, 0, cancelCallback); bool result = false; try diff --git a/IncludeToolboxShared/Commands/RunIWYUProject.cs b/IncludeToolboxShared/Commands/RunIWYUProject.cs index 294b94a..de4a3af 100644 --- a/IncludeToolboxShared/Commands/RunIWYUProject.cs +++ b/IncludeToolboxShared/Commands/RunIWYUProject.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text.RegularExpressions; using File = System.IO.File; +using Task = System.Threading.Tasks.Task; @@ -102,7 +103,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) try { - dialog.StartWaitDialogWithCallback("Include Minimizer", "Running include-what-you-use", null, null, "Running include-what-you-use", true, 0, true, set.Count, 0, cancelCallback); + dialog.StartWaitDialogWithCallback("Include Toolbox", "Running include-what-you-use", null, null, "Running include-what-you-use", true, 0, true, set.Count, 0, cancelCallback); // needs parallelization, but cancellation is doomed foreach (var v in set) diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs index 155fa23..bb95083 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs @@ -1,5 +1,6 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands { diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs index abcf41d..6968e04 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading.Tasks; using Project = Community.VisualStudio.Toolkit.Project; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands { diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index a0b54fc..9a13451 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -6,18 +6,19 @@ using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse { internal class IWYU { - Process process = new(); + readonly Process process = new(); string output = ""; string command_line = ""; - string support_path = ""; - string support_cpp_path = ""; + readonly string support_path = ""; + readonly string support_cpp_path = ""; - public string ProcOutput { get =>output; } + public string ProcOutput { get => output; } public IWYU() { @@ -56,6 +57,12 @@ public void BuildCommandLine(IWYUOptions settings) args.Add("--transitive_includes_only"); if (settings.NoDefault) args.Add("--no_default_mappings"); + if (settings.UseProvided) + { + var path = IWYUDownload.GetDefaultMappingChecked(); + if (!string.IsNullOrEmpty(path)) + args.Add(string.Format("--mapping_file=\"{0}\"", path)); + } if (settings.MappingFile != "") args.Add(string.Format("--mapping_file=\"{0}\"", settings.MappingFile)); args.Add("--max_line_length=256"); // output line for commentaries diff --git a/IncludeToolboxShared/IWYU/IWYUDownload.cs b/IncludeToolboxShared/IWYU/IWYUDownload.cs index de9d15b..b220f0a 100644 --- a/IncludeToolboxShared/IWYU/IWYUDownload.cs +++ b/IncludeToolboxShared/IWYU/IWYUDownload.cs @@ -11,6 +11,7 @@ using System.Net.Http; using System.Text.RegularExpressions; using System.Threading.Tasks; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.IncludeWhatYouUse { @@ -31,6 +32,17 @@ public static string GetDefaultExecutablePath() { return Path.Combine(GetDefaultFolder(), "include-what-you-use.exe"); } + public static string GetDefaultMappingPath() + { + return Path.Combine(GetDefaultFolder(), "msvc.imp"); + } + public static string GetDefaultMappingChecked() + { + var path = GetDefaultMappingPath(); + return File.Exists(path) ? path : ""; + } + + static public string GetVersionFilePath() { return Path.Combine(GetDefaultFolder(), "version"); @@ -50,7 +62,7 @@ protected void OnProgressEvent(string Section, string Status, float percent) - public static async Task DownloadAsync(IVsThreadedWaitDialogFactory dialogFactory, IWYUOptions settings) + public static async Task DownloadAsync(IVsThreadedWaitDialogFactory dialogFactory, IWYUOptions settings) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); if (!await VS.MessageBox.ShowConfirmAsync($"Can't locate include-what-you-use. Do you want to download it from '{IWYUDownload.DisplayRepositorURL}'?")) @@ -233,23 +245,5 @@ public void Cancel() { client?.CancelAsync(); } - - - static public IEnumerable GetMappingFilesNextToIwyuPath(string executablePath) - { - string targetDirectory = Path.GetDirectoryName(executablePath); - - var impFiles = Directory.EnumerateFiles(targetDirectory). - Where(file => Path.GetExtension(file).Equals(".imp", System.StringComparison.InvariantCultureIgnoreCase)); - foreach (string dirs in Directory.EnumerateDirectories(targetDirectory)) - { - impFiles.Concat( - Directory.EnumerateFiles(targetDirectory). - Where(file => Path.GetExtension(file).Equals(".imp", System.StringComparison.InvariantCultureIgnoreCase)) - ); - } - - return impFiles; - } } } diff --git a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs index d73fa64..2079be1 100644 --- a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs @@ -8,6 +8,7 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.VCProjectEngine; using Microsoft.VisualStudio.Threading; +using Task = System.Threading.Tasks.Task; namespace IncludeToolbox { diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index 038fded..4834a94 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -1,4 +1,4 @@ -global using Task = System.Threading.Tasks.Task; +using Task = System.Threading.Tasks.Task; using System; using System.Runtime.InteropServices; using System.Threading; diff --git a/IncludeToolboxShared/Options/IWYUOptions.cs b/IncludeToolboxShared/Options/IWYUOptions.cs index 9e8d7ac..f64d38b 100644 --- a/IncludeToolboxShared/Options/IWYUOptions.cs +++ b/IncludeToolboxShared/Options/IWYUOptions.cs @@ -24,6 +24,7 @@ public class IWYUOptions : BaseOptionModel bool? download_required = null; bool pch = false; bool nodefault = false; + bool provided = true; bool transitives = false; bool warn = false; bool always = false; @@ -74,6 +75,12 @@ public string Executable [DefaultValue(false)] public bool NoDefault { get { return nodefault; } set { OnChangeEvent(); nodefault = value; } } + [Category("General")] + [DisplayName("Use Provided Maps")] + [Description("If true, uses provided MSVC mappings from repository. Their location is C:/Users/$(USERNAME)/iwyu/msvc.imp")] + [DefaultValue(true)] + public bool UseProvided { get { return provided; } set { OnChangeEvent(); provided = value; } } + [Category("General")] [DisplayName("Only Transitive")] [Description("Do not suggest that a file add foo.h unless foo.h is already visible in the file's transitive includes.")] diff --git a/README.md b/README.md index e138a02..d3eaaa9 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,9 @@ Include Toolbox consists of 4 different tools. All of them are only applicable t [Open VSIX Gallery 2022](https://www.vsixgallery.com/extension/IncludeToolbox2022.d3cba4fe-8d65-479b-8436-18d743ee7b53) -Marketplace(tbd) +Marketplace 2019(tbd) + +Marketplace 2022(tbd) [Version History](/doc/changelog.md) diff --git a/doc/changelog.md b/doc/changelog.md index b09cd67..f0f5c3d 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,4 +1,6 @@ # Version History +* 3.2.36 + * Added IWYU default MSVC mappings with selectable option * 3.2.32 * Refactored Trial And Error * DTE support removed From d11a58bd46a1adfbc43d4ebf6756b142307b45c4 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 26 Aug 2022 14:13:10 +0200 Subject: [PATCH 61/86] fixed images Added Project Wide Trial and Error remover --- IncludeToolbox2019/IncludeToolbox2019.csproj | 4 +- IncludeToolbox2019/Monikers.imagemanifest | 8 +- IncludeToolbox2019/MyImageIds.vsct | 8 +- IncludeToolbox2019/VSCommandTable.cs | 2 + IncludeToolbox2019/VSCommandTable.vsct | 22 ++++- IncludeToolbox2022/IncludeToolbox2022.csproj | 10 +-- IncludeToolbox2022/Monikers.imagemanifest | 12 --- IncludeToolbox2022/MyImageIds.vsct | 2 - IncludeToolbox2022/Resources/include13.png | Bin 420 -> 0 bytes IncludeToolbox2022/Resources/include16.png | Bin 478 -> 0 bytes IncludeToolbox2022/VSCommandTable.cs | 2 + IncludeToolbox2022/VSCommandTable.vsct | 28 +++++- .../Commands/IncludeGraphToolWindow.cs | 80 +++++++++--------- .../TrialAndErrorRemoval_CodeWindow.cs | 7 +- .../Commands/TrialAndErrorRemoval_Project.cs | 30 +++---- .../Implementation/TrialAndErrorRemoval.cs | 51 +++++++++-- 16 files changed, 165 insertions(+), 101 deletions(-) delete mode 100644 IncludeToolbox2022/Resources/include13.png delete mode 100644 IncludeToolbox2022/Resources/include16.png diff --git a/IncludeToolbox2019/IncludeToolbox2019.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj index 8c2a316..85a662c 100644 --- a/IncludeToolbox2019/IncludeToolbox2019.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -122,10 +122,10 @@ - + Always true - + diff --git a/IncludeToolbox2019/Monikers.imagemanifest b/IncludeToolbox2019/Monikers.imagemanifest index 3b0278b..ba2c5bf 100644 --- a/IncludeToolbox2019/Monikers.imagemanifest +++ b/IncludeToolbox2019/Monikers.imagemanifest @@ -4,15 +4,15 @@ - + - - - + + + diff --git a/IncludeToolbox2019/MyImageIds.vsct b/IncludeToolbox2019/MyImageIds.vsct index ee9a3a5..b3f00dd 100644 --- a/IncludeToolbox2019/MyImageIds.vsct +++ b/IncludeToolbox2019/MyImageIds.vsct @@ -7,15 +7,15 @@ --> - + - - - + + + diff --git a/IncludeToolbox2019/VSCommandTable.cs b/IncludeToolbox2019/VSCommandTable.cs index 545da83..ffba5e5 100644 --- a/IncludeToolbox2019/VSCommandTable.cs +++ b/IncludeToolbox2019/VSCommandTable.cs @@ -32,12 +32,14 @@ internal sealed partial class PackageIds public const int ContextMenuGroup = 0x0001; public const int MapMenuGroup = 0x0002; public const int ItemContextGroup = 0x021A; + public const int ProjectContextGroup = 0x021B; public const int IncludeWhatYouUseId = 0x0100; public const int FormatIncludesId = 0x0101; public const int TrialAndError = 0x0102; public const int IWYUProjId = 0x0103; public const int GenMap = 0x0104; public const int RemMap = 0x0105; + public const int IncludeGraphId = 0x0106; public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2019/VSCommandTable.vsct b/IncludeToolbox2019/VSCommandTable.vsct index 3d9ef5c..697f4cc 100644 --- a/IncludeToolbox2019/VSCommandTable.vsct +++ b/IncludeToolbox2019/VSCommandTable.vsct @@ -12,6 +12,9 @@ + + + @@ -96,13 +99,27 @@ + + + + + @@ -122,6 +139,7 @@ + @@ -130,6 +148,8 @@ + + diff --git a/IncludeToolbox2022/IncludeToolbox2022.csproj b/IncludeToolbox2022/IncludeToolbox2022.csproj index 19973a3..5a32b34 100644 --- a/IncludeToolbox2022/IncludeToolbox2022.csproj +++ b/IncludeToolbox2022/IncludeToolbox2022.csproj @@ -74,24 +74,22 @@ true + + VsctGenerator MyImageIds.cs - - - - - + Always true - + Designer diff --git a/IncludeToolbox2022/Monikers.imagemanifest b/IncludeToolbox2022/Monikers.imagemanifest index 59e2a2c..01cfa8c 100644 --- a/IncludeToolbox2022/Monikers.imagemanifest +++ b/IncludeToolbox2022/Monikers.imagemanifest @@ -6,8 +6,6 @@ - - @@ -24,16 +22,6 @@ - - - - - - - - - - diff --git a/IncludeToolbox2022/MyImageIds.vsct b/IncludeToolbox2022/MyImageIds.vsct index 3d3084e..f3834c2 100644 --- a/IncludeToolbox2022/MyImageIds.vsct +++ b/IncludeToolbox2022/MyImageIds.vsct @@ -9,8 +9,6 @@ - - diff --git a/IncludeToolbox2022/Resources/include13.png b/IncludeToolbox2022/Resources/include13.png deleted file mode 100644 index 6f5e2b4f6d82b6eeb15e31b642e456284416e851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@q#X;^)4C~IxyaaMs(j9#r85lP9 zbN@+X1@buyJR*x37`TN%nDNrxx<5cc_7YEDSM~?YtilXdMNR*sfkKict`Q}{`DrEP ziAAXl1&Nt?C3<9pj<`3hT6Lf__QWQi z3W>IaS!zcLc`E01&k|CSIo`Ny-BRhcg%(OqEc!VWw+(pA>;B!e{<@dF?s(yylGy#9 zKeJ}Pn6=FI1ZV1&eeVx`wmDk3{JWgwA;GRi4Jw{TF712Y&3=$O=XTpBou|rweg})V zUfA~5-Q9)5K4#yvR6+0apL?up-^>0Mhzpi;+L`;FCHc)4rjqkq`b#d`-3EpjgQu&X J%Q~loCID85q&WZp diff --git a/IncludeToolbox2022/Resources/include16.png b/IncludeToolbox2022/Resources/include16.png deleted file mode 100644 index da17114f6540fb6cacf0234edd426c7b0578b0d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Rb0|gTR zI&y;lTL1t68FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0Xs=VK~y+T zjgh-*gisKMw@8^HkC6w+6Lf^EA`e+ z{1spqMbW#id&T;hdgRCBapX>H0`PG9pIMec6h*sE2m`PQNs@qNS#Ua?n0uZFx~@YI z1aLl|S#LLhW11$UX*#*4X$vPd0kfcy-cr}~4eN)s^EqJv4$v1ERaO1O`h|MrvMkdV zV9r?t;Nf(&vMj;2?S<10<}<=B=lQM^ zn*a_S;&pFTRlQ^VwD$SzCIAQS`o3oy@4Akbc)#}b!^Bh&^hS=zIlBS> + + + @@ -56,7 +59,7 @@ .IncludeToolbox.TrialAndError - + + + + + + @@ -122,14 +139,17 @@ + - + - + + + diff --git a/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs b/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs index c646fe8..ecc4609 100644 --- a/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs +++ b/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs @@ -1,41 +1,45 @@ -//using System; -//using System.ComponentModel.Design; -//using Microsoft.VisualStudio.Shell; -//using Microsoft.VisualStudio.Shell.Interop; -//using Task = System.Threading.Tasks.Task; +using System; +using System.ComponentModel.Design; +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using Task = System.Threading.Tasks.Task; -//namespace IncludeToolbox.Commands -//{ -// /// -// /// Command handler -// /// -// internal sealed class IncludeGraphToolWindow : CommandBase -// { -// public override CommandID CommandID => new CommandID(CommandSetGuids.ToolGroup, 0x0102); +namespace IncludeToolbox.Commands +{ + [Command(PackageIds.IncludeGraphId)] + internal sealed class IncludeGraphToolWindow : BaseCommand + { + protected override Task InitializeCompletedAsync() + { + return base.InitializeCompletedAsync(); + } -// /// -// /// Shows the tool window when the menu item is clicked. -// /// -// /// The event sender. -// /// The event args. -// protected override async Task MenuItemCallback(object sender, EventArgs e) -// { -// await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + //[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD002:Avoid problematic synchronous waits", Justification = "Has to be synchronous")] + protected override void BeforeQueryStatus(EventArgs e) + { + Command.Visible = true; + } -// // Get the instance number 0 of this tool window. This window is single instance so this instance -// // is actually the only one. -// // The last flag is set to true so that if the tool window does not exists it will be created. -// ToolWindowPane window = Package.FindToolWindow(typeof(GraphWindow.IncludeGraphToolWindow), 0, true); -// if (window?.Frame == null) -// { -// await Output.Instance.ErrorMsg("Failed to open Include Graph window!"); -// } -// else -// { -// IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; -// windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_CmdUIGuid, GraphWindow.IncludeGraphToolWindow.GUIDString); -// Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); -// } -// } -// } -//} + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) + { + await base.ExecuteAsync(e); + //await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + //// Get the instance number 0 of this tool window. This window is single instance so this instance + //// is actually the only one. + //// The last flag is set to true so that if the tool window does not exists it will be created. + //ToolWindowPane window = Package.FindToolWindow(typeof(GraphWindow.IncludeGraphToolWindow), 0, true); + //if (window?.Frame == null) + //{ + // await Output.Instance.ErrorMsg("Failed to open Include Graph window!"); + //} + //else + //{ + // IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; + // windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_CmdUIGuid, GraphWindow.IncludeGraphToolWindow.GUIDString); + // Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); + //} + } + } +} diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs index bb95083..e10644a 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs @@ -1,5 +1,6 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands @@ -18,9 +19,11 @@ protected override Task InitializeCompletedAsync() protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) { var x = await VS.Solutions.GetActiveItemAsync(); - if (x.Type != SolutionItemType.PhysicalFile) return; + var file = (await x.ToVCProjectItemAsync()) as VCFile; + + if (file == null || file.FileType != eFileType.eFileTypeCppCode) return; _ = Output.WriteLineAsync($"Starting Trial And Error Include removal on {x.FullPath}"); - string err = await impl.StartAsync((PhysicalFile)x, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); + string err = await impl.StartAsync(file, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); if (string.IsNullOrEmpty(err)) return; _ = Output.WriteLineAsync(err); } diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs index 6968e04..61011f0 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_Project.cs @@ -12,33 +12,27 @@ namespace IncludeToolbox.Commands { internal class TAERDispatcher { - public Queue files = new(); + public Queue files = new(); public int numTotalRemovedIncludes = 0; readonly TrialAndErrorRemoval impl = new(); - public void FindFiles(SolutionItem project) + public async Task FindFilesAsync(Project project) { - foreach (var item in project.Children) + var vcproj = await project.ToVCProjectAsync(); + var xfiles = (IVCCollection)vcproj.Files; + + foreach (var item in xfiles) { - switch (item.Type) - { - case SolutionItemType.PhysicalFile: - files.Enqueue(item); - break; - case SolutionItemType.VirtualFolder: - case SolutionItemType.PhysicalFolder: - FindFiles(item); - break; - default: - break; - } + if (item is not VCFile file || file.FileType != eFileType.eFileTypeCppCode) + continue; + files.Enqueue(file); } } public async Task ProcessAsync() { - foreach (PhysicalFile item in files.Where(s=>((VCFile)s.ToVCProjectItemAsync()).FileType == eFileType.eFileTypeCppCode).Cast()) + foreach (var item in files) { _ = Output.WriteLineAsync($"\nStarting Trial And Error Include removal on {item.FullPath}"); string err = await impl.StartAsync(item, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); @@ -49,6 +43,8 @@ public async Task ProcessAsync() } } + + [Command(PackageIds.ProjectWideTrialAndErrorRemoval)] internal sealed class TrialAndErrorRemoval_Project : BaseCommand { protected override Task InitializeCompletedAsync() @@ -91,7 +87,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) return; TAERDispatcher dispatcher = new(); - dispatcher.FindFiles(proj); + await dispatcher.FindFilesAsync(proj); await dispatcher.ProcessAsync(); } } diff --git a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs index 2079be1..36ec472 100644 --- a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs @@ -59,7 +59,45 @@ void IDisposable.Dispose() GC.SuppressFinalize(this); } } + internal sealed class DialogGuard : IDisposable + { + private bool disposedValue; + public IVsThreadedWaitDialog4 Dialog { get; private set; } + + public DialogGuard(IVsThreadedWaitDialog4 dialog) + { + this.Dialog = dialog; + } + + private void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + // TODO: dispose managed state (managed objects) + } + Dialog.EndWaitDialog(); + // TODO: free unmanaged resources (unmanaged objects) and override finalizer + // TODO: set large fields to null + disposedValue = true; + } + } + + // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources + ~DialogGuard() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: false); + } + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } internal sealed class TrialAndErrorRemoval { public static bool WorkInProgress { get; private set; } @@ -88,7 +126,7 @@ private async Task TestCompileAsync(VCFileConfiguration config) private async Task RemoveAsync(Descriptor desc) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - var dialog = await StartProgressDialogAsync(desc.filename, desc.lines.Length + 1); + using DialogGuard dialog = new(await StartProgressDialogAsync(desc.filename, desc.lines.Length + 1)); int delta = 0; using AsyncDispatcher dispatcher = new(); int step = 0; @@ -97,7 +135,7 @@ private async Task RemoveAsync(Descriptor desc) { string waitMessage = $"Removing #includes from '{desc.filename}'"; string progressText = $"Trying to remove '{line.Content}' ..."; - dialog.UpdateProgress( + dialog.Dialog.UpdateProgress( szUpdatedWaitMessage: waitMessage, szProgressText: progressText, szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, @@ -109,7 +147,6 @@ private async Task RemoveAsync(Descriptor desc) if (canceled) { _ = Output.WriteLineAsync("Operation was cancelled."); - dialog.EndWaitDialog(); return; } @@ -135,14 +172,10 @@ private async Task RemoveAsync(Descriptor desc) desc.buffer.Insert(rs.Start, desc.text.Substring(rs.Start + delta, rs.Length)); await Output.WriteLineAsync($"Unable to remove {line.FullFile}"); } - dialog.EndWaitDialog(); } //Expected: compilable file .cpp or other - public async Task StartAsync(PhysicalFile file, TrialAndErrorRemovalOptions settings) + public async Task StartAsync(VCFile file, TrialAndErrorRemovalOptions settings) { - var vcfile = await file.ToVCProjectItemAsync(); - if (vcfile == null || ((VCFile)vcfile).FileType != eFileType.eFileTypeCppCode) return $"{file.Name} is not a compilable VC file."; - var document = await VS.Documents.GetDocumentViewAsync(file.FullPath); var buffer = document.TextBuffer; var snap = buffer.CurrentSnapshot; @@ -152,7 +185,7 @@ public async Task StartAsync(PhysicalFile file, TrialAndErrorRemovalOpti text = text.Substring(span.Start, span.Length); var lines = Parser.ParseInclues(text.AsSpan(), settings.IgnoreIfdefs); - VCFileConfiguration config = VCUtil.GetVCFileConfig(vcfile); + VCFileConfiguration config = VCUtil.GetVCFileConfig(file); if (config == null) return $"{file.Name} has failed to yield a config."; if (!await TestCompileAsync(config)) From 7594c7cbb8aa54e52e641e4c01df6bc55ce8092b Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 26 Aug 2022 18:15:04 +0200 Subject: [PATCH 62/86] Fixed IWYU deadly parser bugs (no newline on the end of the file) Added parser tests. Replaces Include with IncludeLine Moved data structures to its own file IWYU now only affects first file parsed. --- IncludeToolboxShared/IWYU/IWYUApply.cs | 132 +++++------ .../IncludeToolboxShared.projitems | 1 + IncludeToolboxShared/Util/EmptyNS.cs | 24 +- IncludeToolboxShared/Util/Lexer.cs | 13 +- IncludeToolboxShared/Util/ParseIncludes.cs | 85 +------ IncludeToolboxShared/Util/Parser.cs | 208 +++--------------- IncludeToolboxShared/Util/ParserStructures.cs | 167 ++++++++++++++ Tests/Tests/FullParserTests.cs | 81 +++++++ 8 files changed, 355 insertions(+), 356 deletions(-) create mode 100644 IncludeToolboxShared/Util/ParserStructures.cs create mode 100644 Tests/Tests/FullParserTests.cs diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 631e5e1..02883d5 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -64,108 +64,90 @@ public static async Task ApplyAsync(IWYUOptions settings, string output) { if (output == "") return; - while (true) - { - int pos = output.IndexOf(match); - if (pos == -1) return; + int pos = output.IndexOf(match); + if (pos == -1) return; - pos += match.Length; - string part = output.Substring(pos); + pos += match.Length; + string part = output.Substring(pos); - int endp = part.IndexOf("---"); - string path = part.Substring(0, part.IndexOf(':', 3)); - var doc = await VS.Documents.OpenAsync(path); - using var edit = doc.TextBuffer.CreateEdit(); + int endp = part.IndexOf("---"); + string path = part.Substring(0, part.IndexOf(':', 3)); + var doc = await VS.Documents.OpenAsync(path); + using var edit = doc.TextBuffer.CreateEdit(); - int endl = part.IndexOf("\n"); - string result = part.Substring(endl, endp - endl); - ApplyCheap(edit, - result, - settings.Comms != Comment.No); + int endl = part.IndexOf("\n"); + string result = part.Substring(endl, endp - endl); + ApplyCheap(edit, + result, + settings.Comms != Comment.No); - edit.Apply(); - output = part.Substring(endp); - } + edit.Apply(); } public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output parsed, string output, Standard std) { if (output == "") return; - while (true) - { - int pos = output.IndexOf(match); - if (pos == -1) return; - - var retasks = Parser.Parse(output.AsSpan().Slice(0, pos), true, true); - int sep_index = output.IndexOf(" should remove these lines:"); //find middle ground + int pos = output.IndexOf(match); + if (pos == -1) return; + var retasks = Parser.Parse(output.AsSpan().Slice(0, pos), true, true); + int sep_index = output.IndexOf(" should remove these lines:"); //find middle ground - pos += match.Length; - string part = output.Substring(pos); - - - int endp = part.IndexOf("---"); - string path = part.Substring(0, part.IndexOf(':', 3)); - var doc = await VS.Documents.OpenAsync(path); - using var edit = doc.TextBuffer.CreateEdit(); - var lb = Utils.GetLineBreak(edit); + pos += match.Length; + string part = output.Substring(pos); + string path = part.Substring(0, part.IndexOf(':', 3)); + var doc = await VS.Documents.OpenAsync(path); + using var edit = doc.TextBuffer.CreateEdit(); + var lb = Utils.GetLineBreak(doc.TextView); - var add_f = retasks.Declarations.Where(s => s.span.begin < sep_index); - var rem_f = retasks.Declarations.Where(s => s.span.begin > sep_index); - var add_i = retasks.Includes.Where(s => s.span.begin < sep_index); - var rem_i = retasks.Includes.Where(s => s.span.begin > sep_index); + var add_f = retasks.Declarations.Where(s => s.span.Start < sep_index); + var rem_f = retasks.Declarations.Where(s => s.span.Start > sep_index); + var add_i = retasks.Includes.Where(s => s.span.Start < sep_index); + var rem_i = retasks.Includes.Where(s => s.span.Start > sep_index); - foreach (var item in add_i) - { - edit.Insert(parsed.LastInclude, lb + item.span.str(output)); - } - - DeclNode tree = new(Lexer.TType.Namespace) - { - LineBreak = lb - }; - - if (settings.MoveDecls) - { - tree.AddChildren(parsed.Declarations.Where(s => !rem_f.Contains(s))); - foreach (var task in parsed.Declarations) - edit.Delete(task.AsSpan()); - } - - tree.AddChildren(add_f); - string result = tree.ToString(std >= Standard.cpp17); - edit.Insert(parsed.LastInclude, lb + result); + foreach (var item in add_i) + { + edit.Insert(parsed.LastInclude, item.Project(output) + lb); + } + DeclNode tree = new(Lexer.TType.Namespace) + { + LineBreak = lb + }; - if (!settings.MoveDecls) - foreach (var task in rem_f) - { - var found = parsed.Declarations.FindLast(s => s == task); + if (settings.MoveDecls) + { + tree.AddChildren(parsed.Declarations.Where(s => !rem_f.Contains(s))); + foreach (var task in parsed.Declarations) + edit.Delete(task.span); + } - if (!found.Valid()) continue; - edit.Delete(found.AsSpan()); - parsed.Declarations.Remove(found); + tree.AddChildren(add_f); + string result = tree.ToString(std >= Standard.cpp17); + edit.Insert(parsed.LastInclude, result + lb); - } - foreach (var task in rem_i) + if (!settings.MoveDecls) + foreach (var task in rem_f) { - var found = parsed.Includes.FindLast(s => s == task); - - if (!found.Valid()) continue; - edit.Delete(found.AsSpan()); - parsed.Includes.Remove(found); + var found = parsed.Declarations.FindLast(s => s == task); + edit.Delete(found.span); + parsed.Declarations.Remove(found); } - - edit.Apply(); - output = part.Substring(endp); + foreach (var task in rem_i) + { + var found = parsed.Includes.FindLast(s => s == task); + edit.Delete(found.span); + parsed.Includes.Remove(found); } + + edit.Apply(); } } } diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index b719b74..8eaa7de 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -34,6 +34,7 @@ + diff --git a/IncludeToolboxShared/Util/EmptyNS.cs b/IncludeToolboxShared/Util/EmptyNS.cs index 3c9fd9d..b0590db 100644 --- a/IncludeToolboxShared/Util/EmptyNS.cs +++ b/IncludeToolboxShared/Util/EmptyNS.cs @@ -7,12 +7,9 @@ namespace IncludeToolbox { internal struct NSTracker { - Stack> nsscan = new(); - string_view ns = new(); - bool empty = true; - - public int Start { get => ns.begin; set => ns.begin = value; } - public bool Empty { get => empty; set => empty = value; } + Stack> nsscan = new(); + public int Start { get; set ; } + public bool Empty { get; set; } public NSTracker() { @@ -20,23 +17,20 @@ public NSTracker() public void Push() { - nsscan.Push(new(ns, empty)); - empty = true; + nsscan.Push(new(Start, Empty)); + Empty = true; } public Span Pop(int end) { var v = nsscan.Pop(); - empty = v.Value && empty; - var s = ns; - s.end = end + 1; - ns = v.Key; - return s.AsSpan(); + Empty = v.Value && Empty; + return new(v.Key, end - v.Key); } public void Drop() { if (nsscan.Count > 0) nsscan.Pop(); - empty = false; + Empty = false; } } @@ -140,7 +134,7 @@ public static Span[] ParseEmptyNamespaces(string text) case TType.CloseBr: if (tracker.Empty) { - var c = tracker.Pop(tok.Position); + var c = tracker.Pop(tok.End); namespaces.RemoveAll(x => c.Contains(x)); namespaces.Add(c); } diff --git a/IncludeToolboxShared/Util/Lexer.cs b/IncludeToolboxShared/Util/Lexer.cs index cfeff57..7569cde 100644 --- a/IncludeToolboxShared/Util/Lexer.cs +++ b/IncludeToolboxShared/Util/Lexer.cs @@ -201,10 +201,11 @@ private bool IsDelim(char c) internal Token TryAssociateWith(ReadOnlySpan tk, TType type) { int pos = FindDelim(); - var sl = code.Slice(0, pos + 1); + var sl = code.Slice(0, pos); + bool a = sl.SequenceEqual(tk); - Token t = sl.StartsWith(tk) && IsDelim(sl[tk.Length]) ? (new(type, current_pos - 1)) : (new()); - if (!t.valid()) return t; + if (!a) return new(); + Token t = new(type, current_pos - 1); RemovePrefix(pos); return t; } @@ -332,7 +333,7 @@ private Token GetToken(bool expect_id, Desc desc = default) } break; case ';': - tk = new Token(TType.Semicolon, Position); + tk = MakeValueToken(TType.Semicolon, 1); break; case '<': case '"': @@ -340,10 +341,10 @@ private Token GetToken(bool expect_id, Desc desc = default) tk = GetHeader(c); break; case '{': - tk = new Token(TType.OpenBr, Position); + tk = MakeValueToken(TType.OpenBr, 1); break; case '}': - tk = new Token(TType.CloseBr, Position); + tk = MakeValueToken(TType.CloseBr, 1); break; default: break; diff --git a/IncludeToolboxShared/Util/ParseIncludes.cs b/IncludeToolboxShared/Util/ParseIncludes.cs index 62c0dc4..27473a7 100644 --- a/IncludeToolboxShared/Util/ParseIncludes.cs +++ b/IncludeToolboxShared/Util/ParseIncludes.cs @@ -9,88 +9,6 @@ namespace IncludeToolbox { - public enum NewlineChar - { - N, - CR, - LF, - CRLF - } - - public struct IncludeLine - { - private string file = ""; - public DelimiterMode delimiter = DelimiterMode.Unchanged; - public Span span = new(); - public Span file_subspan = new(); - public int line = 0; - public bool keep = false; - public NewlineChar newlineChar = NewlineChar.N; - - public IncludeLine() - {} - - public string Content => Valid ? file.Substring(1, file.Length - 2) : ""; - public string FullFile { get => file; set => file = value; } - public bool Keep => keep; - public bool Valid => !string.IsNullOrEmpty(file); - public int NewlineLength => newlineChar switch { NewlineChar.N => 0, NewlineChar.CR => 2, _ => 1 }; - - - public Span ReplaceSpan(int relative_pos) => new(relative_pos + span.Start, span.Length); - public Span ReplaceSpan(int relative_pos, int offset_end) => - offset_end >= span.Length ? new() : new(relative_pos + span.Start, span.Length - offset_end); - public Span ReplaceSpanWithoutNewline(int relative_pos) => - ReplaceSpan(relative_pos, NewlineLength); - - public string Project(string over) - { - if (!Valid) return ""; - var x = over.Substring(span.Start, span.Length); - return x.Remove(file_subspan.Start, file_subspan.Length).Insert(file_subspan.Start, FullFile); - } - public void SetFullContent(string content) { FullFile = content; } - - public void SetFile(string val) - { - switch (delimiter) - { - case DelimiterMode.AngleBrackets: - FullFile = '<' + val + '>'; - break; - case DelimiterMode.Quotes: - FullFile = '"' + val + '"'; - break; - } - } - public void SetDelimiter(DelimiterMode delimiter) - { - if (this.delimiter == delimiter) return; - this.delimiter = delimiter; - SetFile(Content); - } - public void ToForward() - { - FullFile.Replace('\\', '/'); - } - public void ToBackward() - { - FullFile.Replace('/', '\\'); - } - - public string Resolve(IEnumerable includeDirectories) - { - foreach (string dir in includeDirectories) - { - string candidate = Path.Combine(dir, Content); - if (System.IO.File.Exists(candidate)) - return Utils.GetExactPathName(candidate); - } - - Output.WriteLine($"Unable to resolve include: '{Content}'"); - return ""; - } - } public static partial class Parser { static readonly Regex pragma = new("(?:\\/\\*|\\/\\/)(?:\\s*IWYU\\s+pragma:\\s+keep)");// IWYU pragma: keep @@ -130,8 +48,7 @@ public static IncludeLine[] ParseInclues(ReadOnlySpan text, bool ignore_if "\r\n" => NewlineChar.CRLF, _ => NewlineChar.N }; - end_pos = tok.End; - xline.span = new(start_pos, end_pos - start_pos); + xline.span = new(start_pos, tok.End - start_pos); lines.Add(xline); xline = new IncludeLine(); } diff --git a/IncludeToolboxShared/Util/Parser.cs b/IncludeToolboxShared/Util/Parser.cs index 56dbe9d..67e763e 100644 --- a/IncludeToolboxShared/Util/Parser.cs +++ b/IncludeToolboxShared/Util/Parser.cs @@ -6,165 +6,6 @@ namespace IncludeToolbox { - public struct string_view - { - public int begin, end; - - public string_view(int begin, int end) - { - this.begin = begin; - this.end = end; - } - - public int Length => end - begin; - - public string str(string str) - { - return str.Substring(begin, end - begin); - } - public Microsoft.VisualStudio.Text.Span AsSpan() - { - return new Microsoft.VisualStudio.Text.Span(begin, end - begin - 1); - } - } - - public struct Namespace - { - public string_view head = new(); - public string[] namespaces = null; - uint scope = 0; - - public uint Scope { get { return scope; } } - - public Namespace(Token tk, uint scope) - { - head.begin = tk.Position; - this.scope = scope; - } - public Namespace(string[] namespaces) - { - this.namespaces = namespaces; - } - public void SetEnd(int end) - { - head.end = end + 1; - } - public int GetEnd() - { - return head.end; - } - public bool Valid() - { - return namespaces != null; - } - } - - public struct FWDDecl - { - public string_view span = new(); - public string[] namespaces = null; - public TType type = TType.Null; - public bool finished = false; - public string ID = ""; - - - public FWDDecl(Token tk) - { - span.begin = tk.Position; - type = tk.Type; - } - public void SetEnd(int end) - { - span.end = end + 1; - finished = true; - } - public bool Valid() - { - return finished; - } - public Microsoft.VisualStudio.Text.Span AsSpan() - { - return span.AsSpan(); - } - - public override bool Equals(object obj) - { - return obj is FWDDecl decl && - namespaces.SequenceEqual(decl.namespaces) && - type == decl.type && - ID == decl.ID; - } - - public override int GetHashCode() - { - int hashCode = -1447791890; - hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(namespaces); - hashCode = hashCode * -1521134295 + type.GetHashCode(); - hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(ID); - return hashCode; - } - - static public bool operator ==(FWDDecl decl1, FWDDecl decl2) - { - bool a = decl2.namespaces.SequenceEqual(decl1.namespaces); - return decl1.ID == decl2.ID && decl1.type == decl2.type && a; - } - static public bool operator !=(FWDDecl decl1, FWDDecl decl2) - { - return !(decl1 == decl2); - } - } - - public struct Include - { - public string_view span = new(); - public TType type = TType.Null; - public string value = ""; - public bool finished = false; - - public Include(Token tk) - { - span.begin = tk.Position; - } - public void SetEnd(int end) - { - span.end = end + 1; - finished = true; - } - public bool Valid() - { - return finished; - } - public Microsoft.VisualStudio.Text.Span AsSpan() - { - return span.AsSpan(); - } - - public override bool Equals(object obj) - { - return obj is Include decl && - type == decl.type && - value == decl.value; - } - - public override int GetHashCode() - { - int hashCode = 1148455455; - hashCode = hashCode * -1521134295 + type.GetHashCode(); - hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(value); - return hashCode; - } - - static public bool operator ==(Include decl1, Include decl2) - { - return decl1.type == decl2.type && decl1.value == decl2.value; - } - static public bool operator !=(Include decl1, Include decl2) - { - return !(decl1 == decl2); - } - } - public static partial class Parser { struct Context @@ -236,15 +77,15 @@ public struct Output { private readonly List namespaces; private readonly List decls; - private readonly List includes; + private readonly List includes; private readonly int last_include = -1; public List Namespaces { get => namespaces; } public List Declarations { get => decls; } - public List Includes { get => includes; } + public List Includes { get => includes; } public int LastInclude { get => last_include; } - public Output(List namespaces, List decls, List includes, int last_include) + public Output(List namespaces, List decls, List includes, int last_include) { this.namespaces = namespaces; this.decls = decls; @@ -257,7 +98,7 @@ public Output(List namespaces, List decls, List inc this.last_include = 0; return; } - this.last_include = includes.Last().span.end; //empty file and include + this.last_include = includes.Last().span.End; //empty file and include } } } @@ -413,15 +254,19 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo { List namespaces = new(); List fwd = new(); - List includes = new(); + List includes = new(); + Namespace ns = new(); FWDDecl decl = new(); - Include inc = new(); + IncludeLine inc = new(); Lexer.Context lctx = new(text); Parser.Context pctx = new(); bool accept = false; bool include_end = false; + + int start = 0; + Token tok = lctx.GetToken(accept); int last_include = -1; //eof @@ -444,6 +289,7 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo if (tok.Type == TType.CloseBr) pctx--; tok = lctx.GetToken(accept); + decl.type = TType.Null; //interference with enum{} class; continue; } @@ -456,7 +302,7 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo && includes.Count > 0) { include_end = true; - last_include = includes.Last().span.end; + last_include = includes.Last().span.End; } switch (expect) @@ -464,16 +310,20 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo case TType.Namespace: pctx.Namespace = true; if (!disable_ns) - ns = new(tok, pctx.Scope); + { + start = tok.Position; + ns.scope = pctx.Scope; + } break; case TType.Class: - if (!decl.finished && decl.type == TType.Enum) + if (decl.type == TType.Enum) decl.type = TType.EnumClass; //special case else goto case TType.Struct; break; case TType.Struct: case TType.Enum: - decl = new(tok); + decl.type = tok.Type; + start = tok.Position; break; case TType.ID: if (pctx.Namespace) @@ -487,8 +337,9 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo if (!disable_ns) { ns.namespaces = pctx.GetNamespace(); - ns.SetEnd(tok.Position); + ns.span = new(start, tok.Position - start); namespaces.Add(ns); + ns = new(); } pctx.Namespace = false; } @@ -496,19 +347,24 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo case TType.CloseBr: pctx.PopNamespace(); break; case TType.Include: - inc = new(tok); break; + start = tok.Position; + break; case TType.QuoteID: case TType.AngleID: - inc.value = tok.Value.ToString(); - inc.SetEnd(tok.Position + tok.Value.Length); - inc.type = expect; + var begin = tok.Position - start; + inc.FullFile = tok.Value.ToString(); + inc.delimiter = tok.Type == TType.AngleID ? DelimiterMode.AngleBrackets : DelimiterMode.Quotes; + + inc.span = new(start, tok.End - start); + inc.file_subspan = new(begin, tok.Value.Length); // subspan of file for replacement includes.Add(inc); + inc = new(); break; case TType.Semicolon: - decl.SetEnd(tok.Position); - decl.finished = true; + decl.span = new(start, tok.End - start); decl.namespaces = pctx.ns_tree.ToArray(); fwd.Add(decl); + decl = new(); break; default: break; diff --git a/IncludeToolboxShared/Util/ParserStructures.cs b/IncludeToolboxShared/Util/ParserStructures.cs new file mode 100644 index 0000000..dbb66eb --- /dev/null +++ b/IncludeToolboxShared/Util/ParserStructures.cs @@ -0,0 +1,167 @@ +using Microsoft.VisualStudio.Text; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using static IncludeToolbox.Lexer; + +namespace IncludeToolbox +{ + public struct Namespace + { + public Span span = new(); + public string[] namespaces = null; + public uint scope = 0; + + public Namespace() { } + } + + public struct FWDDecl + { + public Span span = new(); + public string[] namespaces = null; + public TType type = TType.Null; + public string ID = ""; + + public FWDDecl() { } + + public override bool Equals(object obj) + { + return obj is FWDDecl decl && + namespaces.SequenceEqual(decl.namespaces) && + type == decl.type && + ID == decl.ID; + } + + public override int GetHashCode() + { + int hashCode = -1447791890; + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(namespaces); + hashCode = hashCode * -1521134295 + type.GetHashCode(); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(ID); + return hashCode; + } + + static public bool operator ==(FWDDecl decl1, FWDDecl decl2) + { + bool a = decl2.namespaces.SequenceEqual(decl1.namespaces); + return decl1.ID == decl2.ID && decl1.type == decl2.type && a; + } + static public bool operator !=(FWDDecl decl1, FWDDecl decl2) + { + return !(decl1 == decl2); + } + } + + public struct IncludeLine : IEquatable + { + private string file = ""; + public DelimiterMode delimiter = DelimiterMode.Unchanged; + public Span span = new(); + public Span file_subspan = new(); + public int line = 0; + public bool keep = false; + public NewlineChar newlineChar = NewlineChar.N; + + public IncludeLine() + { } + + public string Content => Valid ? file.Substring(1, file.Length - 2) : ""; + public string FullFile { get => file; set => file = value; } + public bool Keep => keep; + public bool Valid => !string.IsNullOrEmpty(file); + public int NewlineLength => newlineChar switch { NewlineChar.N => 0, NewlineChar.CR => 2, _ => 1 }; + + + + + public Span ReplaceSpan(int relative_pos) => new(relative_pos + span.Start, span.Length); + public Span ReplaceSpan(int relative_pos, int offset_end) => + offset_end >= span.Length ? new() : new(relative_pos + span.Start, span.Length - offset_end); + public Span ReplaceSpanWithoutNewline(int relative_pos) => + ReplaceSpan(relative_pos, NewlineLength); + + public string Project(string over) + { + if (!Valid) return ""; + var x = over.Substring(span.Start, span.Length); + return x.Remove(file_subspan.Start, file_subspan.Length).Insert(file_subspan.Start, FullFile); + } + public void SetFullContent(string content) { FullFile = content; } + + public void SetFile(string val) + { + switch (delimiter) + { + case DelimiterMode.AngleBrackets: + FullFile = '<' + val + '>'; + break; + case DelimiterMode.Quotes: + FullFile = '"' + val + '"'; + break; + } + } + public void SetDelimiter(DelimiterMode delimiter) + { + if (this.delimiter == delimiter) return; + this.delimiter = delimiter; + SetFile(Content); + } + public void ToForward() + { + FullFile.Replace('\\', '/'); + } + public void ToBackward() + { + FullFile.Replace('/', '\\'); + } + + public string Resolve(IEnumerable includeDirectories) + { + foreach (string dir in includeDirectories) + { + string candidate = Path.Combine(dir, Content); + if (System.IO.File.Exists(candidate)) + return Utils.GetExactPathName(candidate); + } + + Output.WriteLine($"Unable to resolve include: '{Content}'"); + return ""; + } + + public override bool Equals(object obj) + { + return obj is IncludeLine line && Equals(line); + } + + public bool Equals(IncludeLine other) + { + return FullFile == other.FullFile && keep == other.keep; + } + + public override int GetHashCode() + { + int hashCode = -1366893598; + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(FullFile); + hashCode = hashCode * -1521134295 + Keep.GetHashCode(); + return hashCode; + } + + public static bool operator ==(IncludeLine left, IncludeLine right) + { + return left.Equals(right); + } + public static bool operator !=(IncludeLine left, IncludeLine right) + { + return !(left == right); + } + } + + public enum NewlineChar + { + N, + CR, + LF, + CRLF + } +} diff --git a/Tests/Tests/FullParserTests.cs b/Tests/Tests/FullParserTests.cs new file mode 100644 index 0000000..8a5bdf5 --- /dev/null +++ b/Tests/Tests/FullParserTests.cs @@ -0,0 +1,81 @@ +using IncludeToolbox; + +namespace Tests +{ + internal class FullParserTests + { + private const string V = "#pragma once\n\n#include \n#include \n#include \n#include \n#include \n#include \n\n#include \n\nnamespace App\n{\nclass Resource;\nclass Document;\nclass ObjectFactory;\n\n// TaskDefinitionStructure used for conversion from older version\nstruct TaskDefinition\n{\n Base::String oldPropHide;\n Base::String oldPropShow;\n};\n\nclass LX_APP_EXPORT Task : public App::Process\n{\npublic:\n enum TaskTypeEnum // Only helper enum, is not used for property\n {\n DAY,\n WEEK,\n WEEK5,\n WEEK2DR,\n HOUR,\n };\n enum MyVisibilityState\n {\n Invisible,\n Mixed,\n Visible,\n Undefined\n };\n\n typedef App::Process inherited;\n friend class Task_Factory;\n friend struct TaskSort;\n\n TYPESYSTEM_HEADER();\n LX_NODE_HEADER();\n\npublic:\n // CmdCreateTaskItems(TargetTask, Operation - add/Insert)\t// Create Task object + ScheduleTimeControl object + all relations objects\n // CmdAttach2Task(App::Task * task, App::Element * elem);\t// Create/Remove relations between Object(Elements) and Task\n\n#pragma region IFC Definition\n Core::PropertyText TaskID;\n Core::PropertyText Status;\n Core::PropertyText WorkMethod;\n Core::PropertyBoolean IsMilestone;\n Core::PropertyInteger Priority;\n\n // App::Task * getNestsObject();\t\t\t\t\t\t\t\t\t\t\t// \tdecomposes_ SET[0:1]\t// Restrict the relationship \'Nests\' (decomposes_) inherited from Object\n // to Task. std::unordered_set getIsNestedByObjects();\t\t\t\t//\t \tisDecomposedBy_\t \t\t// Restrict the relationship\n // \'IsNestedBy\' (isDecomposedBy_) inherited from Object to Task. Base::String getName() { return userName.getValue(); }\t\t\t\t//\n // userName\t\t\t\t// The Name attribute should be inserted to describe the task name.\n#pragma endregion IFC Definition\n\n // App::Task is attached to App::ScheduleTimeControl\n // Create App::RelAssignsTasks if does not exist and set links and back links\n App::RelAssignsTasks* AttachScheduleTimeControl(App::ScheduleTimeControl* schedule, App::RelAssignsTasks* rel = NULL);\n // Clear links and backlinks and return relation for cmd or dispose purposes\n App::RelAssignsTasks* DetachScheduleTimeControl();\n // ScheduleTimeControl is stored in ObjectDefinition.hasAssignments_ inside App::RelAssignsTasks as RelatingControl, but I use Internal pointer to\n // save finding\n App::ScheduleTimeControl* GetScheduleTimeControl()\n {\n return _attachedScheduleTimeControl;\n }\n // Create App::RelNests and set links and back links\n App::RelNests* AttachParentTask(App::Task* parent, App::RelNests* rel = NULL);\n // Clear links and backlinks return App::RelNests for Cmd or dispose purposes\n App::RelNests* DetachParentTask();\n\n bool ContainParent(App::Task* parent);\n App::Task* GetParentTask();\n int GetLevelOfNested();\n // App::Task * GetTopParentTask();\n bool HasChildren();\n bool ContainsChildTaskInTree(App::Task* child);\n App::Task* GetFirstChildTask();\n App::Task* GetLastChildTask();\n App::Task* GetLastLeafChildTask();\n int GetCountOfAllChildren();\n // Children are sorted according App::RelSequence\n inline std::vector GetChildTasks()\n {\n return _soretedChildren;\n }\n inline std::set GetMultigeoGuId()\n {\n return _multigeoGuId;\n }\n inline void SetMultigeoGuId(std::set setVal)\n {\n _multigeoGuId = setVal;\n }\n\n App::RelSequence* AttachPredecesorTask(App::Task* task, App::RelSequence* rel = NULL); // Create App::RelSequence and set links and back links\n App::RelSequence* DetachPredecesorTask(); // unset links and back links return App::RelSequence\t// for Cmd or dispose\n App::RelSequence* AttachSucessorTask(App::Task* task, App::RelSequence* rel = NULL); // Create App::RelSequence and set links and back links\n App::RelSequence* DetachSucessorTask(); // unset links and back links return App::RelSequence\t// for Cmd or dispose\n\n App::Task* GetPredecessorTask();\n App::Task* GetSuccessorTask();\n // Return FirstChild Task or Succesor Task or Succesor of Parent if this child does not have succesor\t(Return \"next line\" in tree)\n App::Task* GetNextLineTaskInTree();\n App::Task* GetPrevLineTaskInTree();\n\n bool IsConnectedTo(App::Task* task);\n\n std::set GetRelatedElements(); // only App::Elements from App::Process.OperatesOn // No childern\n std::set GetRelatedResources(); // only App::Resource from App::Process.OperatesOn // No children\n\n std::set GetAllRelatedElements(); // my RelatedElements + RelatedElements of my children recursively\n\n App::RelAssignsToProcess* AttachResource(App::Resource* resTempl, int qua, App::RelAssignsToProcess* rel = NULL);\n App::RelAssignsToProcess* DetachResource(App::Resource* resTempl)\n {\n return AttachResource(resTempl, 0);\n }\n\n#pragma region Lexocad properties\n App::Task::MyVisibilityState GetVisibility();\n void SetExpanded(bool onoff)\n {\n expanded.setValue(onoff);\n }\n bool IsExpanded()\n {\n return expanded.getValue();\n }\n bool IsParentExpanded();\n void SetTaskNumberWithoutTouch(int num);\n void SetTaskNumber(float num, bool extended = false);\n float GetTaskNumber(bool extended = false) const;\n\n Core::PropertyInteger elementCount;\n Core::PropertyBoolean demolition;\n Core::PropertyBoolean subComponent;\n Core::PropertyBoolean moveElement;\n App::PropertyPlacementList originalElementsPlacement;\n App::PropertyPlacementList newElementsPlacement;\n App::PropertyPlacementMap originalElementsPlacementMap;\n App::PropertyPlacementMap newElementsPlacementMap;\n\n\n Core::PropertyLinkSetBase hideTasks;\n Core::PropertyBoolean hideSelf;\n Core::PropertyLinkSetBase showTasks;\n Core::PropertyLink taskColorType; // SharedObject\n\n Core::PropertyLink material;\n\n Core::PropertyText UserProperty1; // Km\n Core::PropertyText UserProperty2; // Scene\n Core::PropertyText UserProperty3; // eBKP\n\n Core::PropertyText MSProjectID;\n Core::PropertyIndex number2dr;\n#pragma endregion Lexocad properties\n\n\n // void addAssignmentObject(App::ObjectDefinition * object, App::ObjectTypeEnum objectType = NOTDEFINED) override;\n\n virtual Core::ExecuteStatus execute(Core::ExecuteContext* /*context*/) override\n {\n return Core::EXECUTE_OK;\n }\n void restore(Base::AbstractXMLReader& reader, Base::PersistenceVersion& version) override;\n\n bool mustbeSaved() const override\n {\n return true;\n }\n\n App::Task* FindTaskNumber(int taskNum, App::Task* task = NULL);\n App::Task* FindTaskNumberOrBigger(int taskNum, int originalNum, App::Task* task = NULL);\n App::Task* FindTaskNumberOrSmaller(int taskNum, int originalNum, App::Task* task = NULL);\n App::Task* FindTaskOnPosition(int offsetLine);\n\n // static\t\tApp::Task * FindTaskNumberOrSmaller(int taskNum, App::Task * firstRootTask);\n\n /// Returns task of the given number if exists, nullptr otherwise\n static App::Task* getTaskByNumber(Core::CoreDocument* cdoc, int number);\n\n void InitPrivateProperties();\n\n // Not Saved temporary data, used for building Tree and GUI stuff\n void* TreeItemPointer; // for storing QStandardItem during buildng QStandardItemModel in TaskTreeView plugin\n void* TreeSimpleItemPointer; // for storing QStandardItem during buildng QTreeWidget in TaskTreeViewSimple plugin\n QDateTime TmpStart; // Tmp date for updating formula\n QDateTime TmpEnd; // Tmp date for updating formula\n int MyCheckState; // For MyCheckState used insted of QtCheckState, because Andreas wants different behavior/order of states\n\nprotected:\n Task(void);\n virtual ~Task(void);\n\n Core::PropertyBoolean expanded;\n Core::PropertyInteger taskNumber;\n\n void restoreProperty(Core::Property* property,\n const Base::String& name,\n Base::AbstractXMLReader& reader,\n Base::PersistenceVersion& version) override;\n void sortChildren();\n\nprivate:\n TaskDefinition _newDefRestore; // for converting from older version\n\n // Store pointer to ScheduleTimeControl to save time by finding type in ObjectDefinition.hasAssignments_\n App::ScheduleTimeControl* _attachedScheduleTimeControl;\n // Store sorted child tasks vector to save time\n std::vector _soretedChildren;\n // multigeo children list, needed for week2dr mode (hacks)\n std::set _multigeoGuId;\n\n App::Task* findTaskOnPosition(int offsetLine, int& counter);\n};\n\nDECLARE_OBJECT_FACTORY(Task_Factory, App::Task, IFCTASK)\n\n\n\nstruct TaskSort\n{\n inline bool operator()(const App::Task* t1, const App::Task* t2)\n {\n if (t1->taskNumber.getValue() < t2->taskNumber.getValue())\n return true;\n else if (t1->taskNumber.getValue() > t2->taskNumber.getValue())\n return false;\n else\n return t1 < t2;\n }\n};\n} // namespace App\n\n#ifndef SWIG\nQ_DECLARE_METATYPE(App::Task*)\n#endif"; + + [Test] + public void TestBasic() + { + var text = "#include "; + var lines = Parser.Parse(text, true); + Assert.IsTrue(lines.Includes.Any()); + Assert.IsFalse(lines.Declarations.Any()); + Assert.IsFalse(lines.Namespaces.Any()); + + var line = lines.Includes[0]; + Assert.That(text, Is.EqualTo(line.Project(text))); + } + [Test] + public void TestBasic2() + { + var text = "#include \n"; + var lines = Parser.Parse(text, true); + Assert.IsTrue(lines.Includes.Any()); + Assert.IsFalse(lines.Declarations.Any()); + Assert.IsFalse(lines.Namespaces.Any()); + + var line = lines.Includes[0]; + Assert.That(line.Project(text), Is.EqualTo("#include ")); + } + [Test] + public void TestBasicNamespace() + { + var text = "namespace a{}"; + var lines = Parser.Parse(text); + Assert.IsFalse(lines.Includes.Any()); + Assert.IsFalse(lines.Declarations.Any()); + Assert.IsTrue(lines.Namespaces.Any()); + + var line = lines.Namespaces[0]; + Assert.That(line.namespaces[0], Is.EqualTo("a")); + + + var text2 = "namespace {}"; + var lines2 = Parser.Parse(text2); + Assert.IsFalse(lines2.Includes.Any()); + Assert.IsFalse(lines2.Declarations.Any()); + Assert.IsFalse(lines2.Namespaces.Any()); + } + [Test] + public void TestBasicFWDDecl() + { + var text = "namespace a{class b;\r\n}"; + var lines = Parser.Parse(text); + Assert.IsFalse(lines.Includes.Any()); + Assert.IsTrue(lines.Declarations.Any()); + Assert.IsTrue(lines.Namespaces.Any()); + + var line = lines.Namespaces[0]; + Assert.That(line.namespaces[0], Is.EqualTo("a")); + + var decl = lines.Declarations[0]; + Assert.That(decl.namespaces[0], Is.EqualTo("a")); + Assert.That(decl.ID, Is.EqualTo("b")); + Assert.That(text.Substring(decl.span.Start, decl.span.Length), Is.EqualTo("class b;")); + } + [Test] + public void TestRealistic() + { + var text = V; + var lines = Parser.Parse(text); + Assert.IsTrue(lines.Includes.Any()); + Assert.IsTrue(lines.Includes.Count == 7); + Assert.IsTrue(lines.Declarations.Any()); + Assert.IsTrue(lines.Declarations.Count == 3); + Assert.IsTrue(lines.Namespaces.Any()); + } + } +} From d27cdbd98f45f34e3230b057e68d143118e47b7e Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 26 Aug 2022 18:20:23 +0200 Subject: [PATCH 63/86] fixed NSTracker --- IncludeToolboxShared/Util/EmptyNS.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IncludeToolboxShared/Util/EmptyNS.cs b/IncludeToolboxShared/Util/EmptyNS.cs index b0590db..eb74209 100644 --- a/IncludeToolboxShared/Util/EmptyNS.cs +++ b/IncludeToolboxShared/Util/EmptyNS.cs @@ -8,8 +8,8 @@ namespace IncludeToolbox internal struct NSTracker { Stack> nsscan = new(); - public int Start { get; set ; } - public bool Empty { get; set; } + public int Start { get; set ; } = 0; + public bool Empty { get; set; } = true; public NSTracker() { From 7095c342c0910042d7b823138eaa26c7df5f0bdf Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 26 Aug 2022 19:44:43 +0200 Subject: [PATCH 64/86] Added preproc support with pragma once --- IncludeToolboxShared/IWYU/IWYUApply.cs | 4 +- IncludeToolboxShared/Util/Lexer.cs | 59 +++++++++++++++++-------- IncludeToolboxShared/Util/Parser.cs | 60 +++++++++++++------------- 3 files changed, 72 insertions(+), 51 deletions(-) diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 02883d5..7688d56 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -112,7 +112,7 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p foreach (var item in add_i) { - edit.Insert(parsed.LastInclude, item.Project(output) + lb); + edit.Insert(parsed.LastInclude, lb + item.Project(output)); } DeclNode tree = new(Lexer.TType.Namespace) @@ -129,7 +129,7 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p tree.AddChildren(add_f); string result = tree.ToString(std >= Standard.cpp17); - edit.Insert(parsed.LastInclude, result + lb); + edit.Insert(parsed.LastInclude, lb + result); if (!settings.MoveDecls) diff --git a/IncludeToolboxShared/Util/Lexer.cs b/IncludeToolboxShared/Util/Lexer.cs index 7569cde..65c9cf6 100644 --- a/IncludeToolboxShared/Util/Lexer.cs +++ b/IncludeToolboxShared/Util/Lexer.cs @@ -35,12 +35,16 @@ public enum TType OpenBr, CloseBr, + Pragma, + If, Ifdef, Ifndef, + Elif, Else, Elifdef, + Endif, T0, @@ -65,6 +69,8 @@ public ref struct Token public int End { get { return pos + Value.Length; } } public ReadOnlySpan Value => value; public TType Type => type; + public bool IsPreprocStart => type >= TType.If && type <= TType.Ifndef; + public bool IsPreprocEnd => type == TType.Endif; public Token(TType type, int pos, ReadOnlySpan value) { @@ -299,27 +305,44 @@ private Token GetToken(bool expect_id, Desc desc = default) tk = TryAssociateWith("truct".AsSpan(), TType.Struct); break; case '#': + //stupid, but rarely occurring if (desc.ignore_ifdefs) - tk = TryAssociateWith("include".AsSpan(), TType.Include); + { + c = Prefetch(); + switch (c) + { + case 'i': tk = TryAssociateWith("include".AsSpan(), TType.Include); break; + case 'p': tk = TryAssociateWith("pragma".AsSpan(), TType.Pragma); break; + } + } else { - //stupid, but rarely occurring - tk = TryAssociateWith("include".AsSpan(), TType.Include); - if (tk.valid()) return tk; - tk = TryAssociateWith("if".AsSpan(), TType.If); - if (tk.valid()) return tk; - tk = TryAssociateWith("ifdef".AsSpan(), TType.Ifdef); - if (tk.valid()) return tk; - tk = TryAssociateWith("ifndef".AsSpan(), TType.Ifndef); - if (tk.valid()) return tk; - tk = TryAssociateWith("elif".AsSpan(), TType.Elif); - if (tk.valid()) return tk; - tk = TryAssociateWith("else".AsSpan(), TType.Else); - if (tk.valid()) return tk; - tk = TryAssociateWith("elifdef".AsSpan(), TType.Elifdef); - if (tk.valid()) return tk; - tk = TryAssociateWith("endif".AsSpan(), TType.Endif); - if (tk.valid()) return tk; + c = Prefetch(); + switch (c) + { + case 'i': + tk = TryAssociateWith("include".AsSpan(), TType.Include); + if (tk.valid()) return tk; + tk = TryAssociateWith("if".AsSpan(), TType.If); + if (tk.valid()) return tk; + tk = TryAssociateWith("ifdef".AsSpan(), TType.Ifdef); + if (tk.valid()) return tk; + tk = TryAssociateWith("ifndef".AsSpan(), TType.Ifndef); + if (tk.valid()) return tk; + break; + case 'p': + tk = TryAssociateWith("pragma".AsSpan(), TType.Pragma); break; + case 'e': + tk = TryAssociateWith("elif".AsSpan(), TType.Elif); + if (tk.valid()) return tk; + tk = TryAssociateWith("else".AsSpan(), TType.Else); + if (tk.valid()) return tk; + tk = TryAssociateWith("elifdef".AsSpan(), TType.Elifdef); + if (tk.valid()) return tk; + tk = TryAssociateWith("endif".AsSpan(), TType.Endif); + if (tk.valid()) return tk; + break; + } } break; case 'e': diff --git a/IncludeToolboxShared/Util/Parser.cs b/IncludeToolboxShared/Util/Parser.cs index 67e763e..1457e13 100644 --- a/IncludeToolboxShared/Util/Parser.cs +++ b/IncludeToolboxShared/Util/Parser.cs @@ -85,21 +85,15 @@ public struct Output public List Includes { get => includes; } public int LastInclude { get => last_include; } - public Output(List namespaces, List decls, List includes, int last_include) + public Output(List namespaces, List decls, List includes, int force_begin = 0) { this.namespaces = namespaces; this.decls = decls; this.includes = includes; - this.last_include = last_include; - if (last_include == -1) - { - if (includes.Count == 0) - { - this.last_include = 0; - return; - } - this.last_include = includes.Last().span.End; //empty file and include - } + + this.last_include = includes.FindLast(s => s.line == 0).span.End; + if (last_include == 0) + last_include = force_begin; } } @@ -263,12 +257,13 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo Lexer.Context lctx = new(text); Parser.Context pctx = new(); bool accept = false; - bool include_end = false; + bool pragma = false; + int force_start = 0; + int preproc = 0; int start = 0; Token tok = lctx.GetToken(accept); - int last_include = -1; //eof while (pctx.expected_tokens.Count != 0 && tok.valid()) @@ -284,27 +279,30 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo if (!accept || expect != tok.Type) { pctx.Clear(); // unexpected token, start anew - if (tok.Type == TType.OpenBr) // if scope, probably function or class - FFWD(ref lctx, (int)pctx.Scope, (int)pctx.Scope + 1); - if (tok.Type == TType.CloseBr) - pctx--; - tok = lctx.GetToken(accept); + + switch (tok.Type) + { + case TType.OpenBr: // if scope, probably function or class + FFWD(ref lctx, (int)pctx.Scope, (int)pctx.Scope + 1); break; + case TType.CloseBr: + pctx--; break; + case TType.Pragma: + pragma = true; tok = lctx.GetToken(true, false); continue; + case TType.ID: + if (pragma && tok.Value.SequenceEqual("once".AsSpan())) + force_start = tok.End; break; + } + + preproc += tok.IsPreprocStart && includes.Any() ? 1 : 0; + preproc -= tok.IsPreprocEnd ? 1 : 0; + + tok = lctx.GetToken(accept, false); decl.type = TType.Null; //interference with enum{} class; continue; } pctx.expected_tokens.Pop(); - if (!disable_count && !include_end - && expect != TType.Include - && expect != TType.AngleID - && expect != TType.QuoteID - && includes.Count > 0) - { - include_end = true; - last_include = includes.Last().span.End; - } - switch (expect) { case TType.Namespace: @@ -354,7 +352,7 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo var begin = tok.Position - start; inc.FullFile = tok.Value.ToString(); inc.delimiter = tok.Type == TType.AngleID ? DelimiterMode.AngleBrackets : DelimiterMode.Quotes; - + inc.line = preproc > 0 ? 1 : 0; //disable count for preprocessed includes inc.span = new(start, tok.End - start); inc.file_subspan = new(begin, tok.Value.Length); // subspan of file for replacement includes.Add(inc); @@ -375,9 +373,9 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo if (tok.Type == TType.CloseBr) pctx--; - tok = lctx.GetToken(accept); + tok = lctx.GetToken(accept, false); } - return new Output(namespaces, fwd, includes, last_include); + return new Output(namespaces, fwd, includes, force_start); } public static Output Parse(string text) { From 85a7912cc1f30b10cc84227a97b8dd448a39c9f0 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sat, 27 Aug 2022 16:26:51 +0200 Subject: [PATCH 65/86] Fixed formatting and IWYU Added brains to precise mode, so it won't add anything to preprocessor sections. Fixed Empty namespaces Added tests --- .../Commands/FormatIncludes.cs | 4 +- IncludeToolboxShared/Commands/RunIWYU.cs | 2 +- .../Commands/RunIWYUProject.cs | 2 +- IncludeToolboxShared/IWYU/IWYUApply.cs | 44 +++++++-------- .../Implementation/IncludeFormatter.cs | 54 +++++++++++++++---- .../Options/ViewerOptionsPage.cs | 30 +++++------ IncludeToolboxShared/Util/EmptyNS.cs | 2 +- IncludeToolboxShared/Util/Parser.cs | 34 +++++++----- IncludeToolboxShared/Util/ParserStructures.cs | 4 +- IncludeToolboxShared/Util/VCUtil.cs | 5 ++ Tests/Tests/EmptyNamespacesTests.cs | 25 +++++++++ Tests/Tests/FullParserTests.cs | 36 +++++++++++++ 12 files changed, 171 insertions(+), 71 deletions(-) create mode 100644 Tests/Tests/EmptyNamespacesTests.cs diff --git a/IncludeToolboxShared/Commands/FormatIncludes.cs b/IncludeToolboxShared/Commands/FormatIncludes.cs index 4d9e885..1eb5475 100644 --- a/IncludeToolboxShared/Commands/FormatIncludes.cs +++ b/IncludeToolboxShared/Commands/FormatIncludes.cs @@ -53,9 +53,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs args) var formated_lines = Formatter.IncludeFormatter.FormatIncludes(text.AsSpan(), doc.FilePath, include_directories, settings); // Overwrite. - using var edit = doc.TextBuffer.CreateEdit(); - Formatter.IncludeFormatter.ApplyChanges(formated_lines, edit, text, selection_span.Start, settings.RemoveEmptyLines); - edit.Apply(); + Formatter.IncludeFormatter.ApplyChanges(formated_lines, doc, text, selection_span.Start, settings.RemoveEmptyLines); } } } diff --git a/IncludeToolboxShared/Commands/RunIWYU.cs b/IncludeToolboxShared/Commands/RunIWYU.cs index 470391d..eee88cf 100644 --- a/IncludeToolboxShared/Commands/RunIWYU.cs +++ b/IncludeToolboxShared/Commands/RunIWYU.cs @@ -92,7 +92,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) if (settings.RemoveENS) - IWYUApply.ClearNamespaces(doc.TextBuffer.CreateEdit()); + IWYUApply.ClearNamespaces(doc); if (settings.Format) await IWYUApply.FormatAsync(doc); if (settings.FormatDoc) diff --git a/IncludeToolboxShared/Commands/RunIWYUProject.cs b/IncludeToolboxShared/Commands/RunIWYUProject.cs index de4a3af..3d12c41 100644 --- a/IncludeToolboxShared/Commands/RunIWYUProject.cs +++ b/IncludeToolboxShared/Commands/RunIWYUProject.cs @@ -138,7 +138,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) await IWYUApply.ApplyAsync(settings, task.ProcOutput); if (settings.RemoveENS) - IWYUApply.ClearNamespaces(doc.TextBuffer.CreateEdit()); + IWYUApply.ClearNamespaces(doc); if (settings.Format) await IWYUApply.FormatAsync(doc); if (settings.FormatDoc) diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 7688d56..fe2384b 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -10,14 +10,13 @@ internal static class IWYUApply { static readonly string match = "The full include-list for "; - public static void ClearNamespaces(ITextEdit edit) + public static void ClearNamespaces(DocumentView doc) { - var text = edit.Snapshot.GetText(); + using var edit = doc.TextBuffer.CreateEdit(); + var text = doc.TextBuffer.CurrentSnapshot.GetText(); var rem = Parser.ParseEmptyNamespaces(text); foreach (var ns in rem) - { edit.Delete(ns); - } edit.Apply(); } @@ -25,8 +24,7 @@ public static async Task FormatAsync(DocumentView doc) { var include_directories = await VCUtil.GetIncludeDirsAsync(); var settings = await FormatOptions.GetLiveInstanceAsync(); - using var edit = doc.TextBuffer.CreateEdit(); - var text = edit.Snapshot.GetText(); + var text = doc.TextBuffer.CurrentSnapshot.GetText(); var span = Utils.GetIncludeSpan(text); var slice = text.Substring(span.Start, span.Length); @@ -36,8 +34,7 @@ public static async Task FormatAsync(DocumentView doc) include_directories, settings ); - Formatter.IncludeFormatter.ApplyChanges(result, edit, slice, span.Start); - edit.Apply(); + Formatter.IncludeFormatter.ApplyChanges(result, doc, slice, span.Start); } public static void ApplyCheap(ITextEdit edit, string result, bool commentary) @@ -102,51 +99,46 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p using var edit = doc.TextBuffer.CreateEdit(); var lb = Utils.GetLineBreak(doc.TextView); - var add_f = retasks.Declarations.Where(s => s.span.Start < sep_index); var rem_f = retasks.Declarations.Where(s => s.span.Start > sep_index); var add_i = retasks.Includes.Where(s => s.span.Start < sep_index); var rem_i = retasks.Includes.Where(s => s.span.Start > sep_index); - - foreach (var item in add_i) + foreach (var task in rem_i) { - edit.Insert(parsed.LastInclude, lb + item.Project(output)); + var found = parsed.Includes.FindLast(s => s == task); + edit.Delete(found.span); + parsed.Includes.Remove(found); } DeclNode tree = new(Lexer.TType.Namespace) { LineBreak = lb }; - if (settings.MoveDecls) { tree.AddChildren(parsed.Declarations.Where(s => !rem_f.Contains(s))); foreach (var task in parsed.Declarations) edit.Delete(task.span); } - - tree.AddChildren(add_f); - string result = tree.ToString(std >= Standard.cpp17); - edit.Insert(parsed.LastInclude, lb + result); - - - if (!settings.MoveDecls) + else + { foreach (var task in rem_f) { var found = parsed.Declarations.FindLast(s => s == task); edit.Delete(found.span); parsed.Declarations.Remove(found); } - - foreach (var task in rem_i) - { - var found = parsed.Includes.FindLast(s => s == task); - edit.Delete(found.span); - parsed.Includes.Remove(found); } + tree.AddChildren(add_f); + + string addition = lb + + add_i.Select(s => s.Project(output)) + .Aggregate((s1, s2) => s1 + lb + s2) + + lb + lb + tree.ToString(std >= Standard.cpp17); + edit.Insert(parsed.InsertionPoint, addition); edit.Apply(); } } diff --git a/IncludeToolboxShared/Implementation/IncludeFormatter.cs b/IncludeToolboxShared/Implementation/IncludeFormatter.cs index 0578cb7..458fc57 100644 --- a/IncludeToolboxShared/Implementation/IncludeFormatter.cs +++ b/IncludeToolboxShared/Implementation/IncludeFormatter.cs @@ -1,4 +1,5 @@ -using Microsoft.VisualStudio.Text; +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Text; using System; using System.Collections.Generic; using System.IO; @@ -101,6 +102,19 @@ private static IncludeLine[] SortIncludes(IncludeLine[] lines, FormatOptions set return outSortedList.ToArray(); } + + private static void RemoveDuplicates(IncludeLine[] includes) + { + HashSet uniqueIncludes = new(); + uniqueIncludes.UnionWith(includes.Where(s => s.Keep).Select(s => s.FullFile)); + + for (int i = 0; i < includes.Length; i++) + { + ref var r = ref includes[i]; + if (!r.Keep && !uniqueIncludes.Add(r.FullFile)) + r.SetFullContent(""); + } + } private static IncludeLine[] SortIncludeBatch(FormatOptions settings, string[] precedenceRegexes, IncludeLine[] includeBatch) @@ -182,32 +196,52 @@ public static IncludeLine[] FormatIncludes(ReadOnlySpan text, string docum if (settings.IgnoreFileRelative) formatingDirs = formatingDirs.Skip(1); + if (settings.RemoveDuplicates) + RemoveDuplicates(lines); if (settings.PathFormat != PathMode.Unchanged) FormatPaths(lines, settings.PathFormat, formatingDirs); FormatDelimiters(lines, settings.DelimiterFormatting); FormatSlashes(lines, settings.SlashFormatting); + // Sorting. Ignores non-include lines. return SortIncludes(lines, settings, documentName); } - public static void ApplyChanges(IncludeLine[] includes, ITextEdit edit, string text, int relative_pos, bool remove_empty = true) + + private static IEnumerable> RemoveWhitespaces(this IEnumerable> e, string text) { - var lb = Utils.GetLineBreak(edit); + int start = 0; + foreach (var a in e) + { + var x = a; + if (start != 0 && a.Key.Start - start > 0) + { + ReadOnlySpan subspan = text.AsSpan(start, a.Key.Start - start); + if (subspan.IsWhiteSpace()) + x = new(new(start, a.Key.Start - start + a.Key.Length), a.Value); + } + start = x.Key.End; + yield return x; + } + } + public static void ApplyChanges(IncludeLine[] includes, DocumentView doc, string text, int relative_pos, bool remove_empty = true) + { + var lb = Utils.GetLineBreak(doc.TextView); var enumerator = includes .OrderBy(s => s.line) .Zip(includes, - (a, b) => { return new KeyValuePair(a.ReplaceSpan(relative_pos), b.Project(text)); }); + (a, b) => { return new KeyValuePair(a.span, b.Project(text)); }); - string append = ""; - if (!remove_empty) append = lb; + using var edit = doc.TextBuffer.CreateEdit(); + + if (remove_empty) enumerator = enumerator.RemoveWhitespaces(text); foreach (var line in enumerator) - { - var rep = line.Value + append; - edit.Replace(line.Key, rep); - } + edit.Replace(line.Key.Move(relative_pos), line.Value); + + edit.Apply(); } } } diff --git a/IncludeToolboxShared/Options/ViewerOptionsPage.cs b/IncludeToolboxShared/Options/ViewerOptionsPage.cs index b9d8dd0..b58c548 100644 --- a/IncludeToolboxShared/Options/ViewerOptionsPage.cs +++ b/IncludeToolboxShared/Options/ViewerOptionsPage.cs @@ -12,21 +12,21 @@ public class ViewerOptionsPage : BaseOptionPage { } public class ViewerOptions : BaseOptionModel { - [Category("Include Graph Parsing")] - [DisplayName("Graph Endpoint Directories")] - [Description("List of absolute directory paths. For any include below these paths, the graph parsing will stop.")] - public string[] NoParsePaths - { - get { return noParsePaths; } - set - { - // It is critical that the paths are "exact" since we want to use them as with string comparison. - noParsePaths = value; - for (int i = 0; i < noParsePaths.Length; ++i) - noParsePaths[i] = Utils.GetExactPathName(noParsePaths[i]); - } - } - private string[] noParsePaths; + //[Category("Include Graph Parsing")] + //[DisplayName("Graph Endpoint Directories")] + //[Description("List of absolute directory paths. For any include below these paths, the graph parsing will stop.")] + //public string[] NoParsePaths + //{ + // get { return noParsePaths; } + // set + // { + // // It is critical that the paths are "exact" since we want to use them as with string comparison. + // noParsePaths = value; + // for (int i = 0; i < noParsePaths.Length; ++i) + // noParsePaths[i] = Utils.GetExactPathName(noParsePaths[i]); + // } + //} + //private string[] noParsePaths; [Category("Include Graph DGML")] [DisplayName("Create Group Nodes by Folders")] diff --git a/IncludeToolboxShared/Util/EmptyNS.cs b/IncludeToolboxShared/Util/EmptyNS.cs index eb74209..8c256ac 100644 --- a/IncludeToolboxShared/Util/EmptyNS.cs +++ b/IncludeToolboxShared/Util/EmptyNS.cs @@ -128,8 +128,8 @@ public static Span[] ParseEmptyNamespaces(string text) switch (expect) { case TType.Namespace: - tracker.Push(); tracker.Start = tok.Position; + tracker.Push(); break; case TType.CloseBr: if (tracker.Empty) diff --git a/IncludeToolboxShared/Util/Parser.cs b/IncludeToolboxShared/Util/Parser.cs index 1457e13..5a62d47 100644 --- a/IncludeToolboxShared/Util/Parser.cs +++ b/IncludeToolboxShared/Util/Parser.cs @@ -78,22 +78,19 @@ public struct Output private readonly List namespaces; private readonly List decls; private readonly List includes; - private readonly int last_include = -1; + private readonly int insertion_point = 0; public List Namespaces { get => namespaces; } public List Declarations { get => decls; } public List Includes { get => includes; } - public int LastInclude { get => last_include; } + public int InsertionPoint { get => insertion_point; } - public Output(List namespaces, List decls, List includes, int force_begin = 0) + public Output(List namespaces, List decls, List includes, int insertion_point = 0) { this.namespaces = namespaces; this.decls = decls; this.includes = includes; - - this.last_include = includes.FindLast(s => s.line == 0).span.End; - if (last_include == 0) - last_include = force_begin; + this.insertion_point = insertion_point; } } @@ -258,12 +255,13 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo Parser.Context pctx = new(); bool accept = false; bool pragma = false; + bool include_end = false; - int force_start = 0; + int insertion_point = 0; int preproc = 0; int start = 0; - Token tok = lctx.GetToken(accept); + Token tok = lctx.GetToken(accept, false); while (pctx.expected_tokens.Count != 0 && tok.valid()) @@ -290,11 +288,11 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo pragma = true; tok = lctx.GetToken(true, false); continue; case TType.ID: if (pragma && tok.Value.SequenceEqual("once".AsSpan())) - force_start = tok.End; break; + insertion_point = tok.End; break; } preproc += tok.IsPreprocStart && includes.Any() ? 1 : 0; - preproc -= tok.IsPreprocEnd ? 1 : 0; + preproc -= preproc>0?tok.IsPreprocEnd ? 1 : 0:0; tok = lctx.GetToken(accept, false); decl.type = TType.Null; //interference with enum{} class; @@ -303,6 +301,14 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo pctx.expected_tokens.Pop(); + + if (!disable_count && !include_end + && expect != TType.Include + && expect != TType.AngleID + && expect != TType.QuoteID + && includes.Count > 0) + { include_end = true; } + switch (expect) { case TType.Namespace: @@ -352,9 +358,11 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo var begin = tok.Position - start; inc.FullFile = tok.Value.ToString(); inc.delimiter = tok.Type == TType.AngleID ? DelimiterMode.AngleBrackets : DelimiterMode.Quotes; - inc.line = preproc > 0 ? 1 : 0; //disable count for preprocessed includes inc.span = new(start, tok.End - start); inc.file_subspan = new(begin, tok.Value.Length); // subspan of file for replacement + + if (!include_end && !disable_count && preproc == 0) insertion_point = tok.End; + includes.Add(inc); inc = new(); break; @@ -375,7 +383,7 @@ public static Output Parse(ReadOnlySpan text, bool disable_ns = false, boo tok = lctx.GetToken(accept, false); } - return new Output(namespaces, fwd, includes, force_start); + return new Output(namespaces, fwd, includes, insertion_point); } public static Output Parse(string text) { diff --git a/IncludeToolboxShared/Util/ParserStructures.cs b/IncludeToolboxShared/Util/ParserStructures.cs index dbb66eb..79126d0 100644 --- a/IncludeToolboxShared/Util/ParserStructures.cs +++ b/IncludeToolboxShared/Util/ParserStructures.cs @@ -25,6 +25,8 @@ public struct FWDDecl public FWDDecl() { } + public bool Valid => !string.IsNullOrEmpty(ID); + public override bool Equals(object obj) { return obj is FWDDecl decl && @@ -71,7 +73,7 @@ public IncludeLine() public bool Keep => keep; public bool Valid => !string.IsNullOrEmpty(file); public int NewlineLength => newlineChar switch { NewlineChar.N => 0, NewlineChar.CR => 2, _ => 1 }; - + public int End => span.End; diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs index f762157..dfb8167 100644 --- a/IncludeToolboxShared/Util/VCUtil.cs +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -1,6 +1,7 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; +using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.VCProjectEngine; using System.Collections.Generic; using System.Linq; @@ -12,6 +13,10 @@ namespace IncludeToolbox { public static class VSToolkitExtension { + public static Span Move(this Span span, int relative_pos) + { + return new(span.Start + relative_pos, span.Length); + } public static async Task ToVCProjectAsync(this Project project) { project.GetItemInfo(out var hierarchy, out _, out _); diff --git a/Tests/Tests/EmptyNamespacesTests.cs b/Tests/Tests/EmptyNamespacesTests.cs new file mode 100644 index 0000000..5b69af9 --- /dev/null +++ b/Tests/Tests/EmptyNamespacesTests.cs @@ -0,0 +1,25 @@ +using IncludeToolbox; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tests +{ + internal class EmptyNamespacesTests + { + static readonly string V = "namespace Core\n{\nclass CdwkAttributeData;\nclass Command;\n}\n\n#ifdef CACHE_OBJECTS\n#include \n#endif\n\n\nnamespace Core\n{\n\n}\n"; + + [Test] + public void TestRealistic() + { + var text = V; + var lines = Parser.ParseEmptyNamespaces(text); + var lines2 = Parser.Parse(text); + Assert.IsTrue(lines.Any()); + Assert.That(lines.Length, Is.EqualTo(1)); + Assert.That(lines[0].Start, Is.EqualTo(lines2.Namespaces[1].span.Start)); + } + } +} diff --git a/Tests/Tests/FullParserTests.cs b/Tests/Tests/FullParserTests.cs index 8a5bdf5..6f3f15f 100644 --- a/Tests/Tests/FullParserTests.cs +++ b/Tests/Tests/FullParserTests.cs @@ -77,5 +77,41 @@ public void TestRealistic() Assert.IsTrue(lines.Declarations.Count == 3); Assert.IsTrue(lines.Namespaces.Any()); } + + [Test] + public void TestPreprocessor() + { + var text = "#include \r\n#if 0\r\n#include \r\n#endif"; + var lines = Parser.Parse(text); + Assert.IsTrue(lines.Includes.Any()); + Assert.IsTrue(lines.Includes.Count == 2); + + Assert.That(lines.InsertionPoint, Is.EqualTo(lines.Includes[0].End)); + + var text2 = "#if 0\r\n#include \r\n #include \r\n#endif"; + var lines2 = Parser.Parse(text2); + Assert.IsTrue(lines2.Includes.Any()); + Assert.IsTrue(lines2.Includes.Count == 2); + + Assert.That(lines2.InsertionPoint, Is.EqualTo(lines2.Includes[1].End)); + + var text3 = "#if 0\r\n#include \r\n#endif #include \r\n"; + var lines3 = Parser.Parse(text3); + Assert.IsTrue(lines3.Includes.Any()); + Assert.IsTrue(lines3.Includes.Count == 2); + + Assert.That(lines3.InsertionPoint, Is.EqualTo(lines3.Includes[1].End)); + } + + [Test] + public void TestNonConventional() + { + var text = "#include \r\n namespace a{} \r\n#include "; + var lines = Parser.Parse(text); + Assert.IsTrue(lines.Includes.Any()); + Assert.IsTrue(lines.Includes.Count == 2); + + Assert.That(lines.InsertionPoint, Is.EqualTo(lines.Includes[0].End)); + } } } From 95d7fb35bc22c79d4cf5f80fbc646b3d42280b1d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sat, 27 Aug 2022 17:00:39 +0200 Subject: [PATCH 66/86] cleanup and changes --- IncludeToolboxShared/IWYU/IWYUApply.cs | 8 ++++---- IncludeToolboxShared/Util/Utils.cs | 8 -------- doc/changelog.md | 7 +++++++ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index fe2384b..80b7c19 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -37,12 +37,10 @@ public static async Task FormatAsync(DocumentView doc) Formatter.IncludeFormatter.ApplyChanges(result, doc, slice, span.Start); } - public static void ApplyCheap(ITextEdit edit, string result, bool commentary) + public static void ApplyCheap(ITextEdit edit, string result, bool commentary, string lb) { if (!commentary) { - var lb = Utils.GetLineBreak(edit); - result = string.Join(lb, result.Split('\n') .Select(s => { @@ -70,13 +68,15 @@ public static async Task ApplyAsync(IWYUOptions settings, string output) int endp = part.IndexOf("---"); string path = part.Substring(0, part.IndexOf(':', 3)); var doc = await VS.Documents.OpenAsync(path); + var lb = Utils.GetLineBreak(doc.TextView); + using var edit = doc.TextBuffer.CreateEdit(); int endl = part.IndexOf("\n"); string result = part.Substring(endl, endp - endl); ApplyCheap(edit, result, - settings.Comms != Comment.No); + settings.Comms != Comment.No, lb); edit.Apply(); } diff --git a/IncludeToolboxShared/Util/Utils.cs b/IncludeToolboxShared/Util/Utils.cs index 94c9c2d..3667be8 100644 --- a/IncludeToolboxShared/Util/Utils.cs +++ b/IncludeToolboxShared/Util/Utils.cs @@ -15,18 +15,10 @@ public struct BoolWithReason public static class Utils { - public static string GetLineBreak(ITextEdit edit) - { - return GetLineBreak(edit.Snapshot); - } public static string GetLineBreak(IWpfTextView view) { return view.Options.GetNewLineCharacter(); } - internal static string GetLineBreak(ITextSnapshot snapshot) - { - return snapshot.Lines.ElementAt(0).GetLineBreakText(); //if there is some way to retreive interface of nl counter, I'll use it - } public static Span GetIncludeSpan(string text) { diff --git a/doc/changelog.md b/doc/changelog.md index f0f5c3d..f7f6193 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,4 +1,11 @@ # Version History +* 3.2.43 + * Added more tests for parser + * Fixed Include formatter not deleting empty lines + * Fixed Empty namespace removal + * Added brains to Precise mode of IWYU, now it ignores #ifdef preprocessor blocks for insertion (no more insertion in #if block only because it is the last include) + * Fixed general newline parser bugs (when it failed to parse include only because there was no newline in the selection) + * Newline char is picked from the editor options rather than from string (O(n)->O(1)) * 3.2.36 * Added IWYU default MSVC mappings with selectable option * 3.2.32 From 05054e4f7461517291d27d2cbfc548016f6a781e Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sat, 27 Aug 2022 17:03:21 +0200 Subject: [PATCH 67/86] missing icon --- IncludeToolbox2019/IncludeToolbox2019.csproj | 4 ++-- IncludeToolbox2022/IncludeToolbox2022.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/IncludeToolbox2019.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj index 85a662c..8c2a316 100644 --- a/IncludeToolbox2019/IncludeToolbox2019.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -122,10 +122,10 @@ - + Always true - + diff --git a/IncludeToolbox2022/IncludeToolbox2022.csproj b/IncludeToolbox2022/IncludeToolbox2022.csproj index 5a32b34..5eed754 100644 --- a/IncludeToolbox2022/IncludeToolbox2022.csproj +++ b/IncludeToolbox2022/IncludeToolbox2022.csproj @@ -86,10 +86,10 @@ - + Always true - + Designer From 6215e29cd9895a1881851476c26b74c24387aaba Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Sat, 27 Aug 2022 22:46:54 +0200 Subject: [PATCH 68/86] Enabled Trial and Error removal for header files, wrote a little guide --- IncludeToolbox2019/VSCommandTable.cs | 3 - IncludeToolbox2019/VSCommandTable.vsct | 3 +- IncludeToolbox2022/VSCommandTable.cs | 3 - IncludeToolbox2022/VSCommandTable.vsct | 3 +- .../TrialAndErrorRemoval_CodeWindow.cs | 74 +++- IncludeToolboxShared/IWYU/IWYU.cs | 2 +- .../Implementation/TrialAndErrorRemoval.cs | 385 +++++++++--------- IncludeToolboxShared/IncludeToolboxPackage.cs | 7 +- README.md | 24 +- doc/changelog.md | 2 + 10 files changed, 296 insertions(+), 210 deletions(-) diff --git a/IncludeToolbox2019/VSCommandTable.cs b/IncludeToolbox2019/VSCommandTable.cs index ffba5e5..1a7bfb4 100644 --- a/IncludeToolbox2019/VSCommandTable.cs +++ b/IncludeToolbox2019/VSCommandTable.cs @@ -20,9 +20,6 @@ internal sealed partial class PackageGuids public const string GOnlyVCString = "1175290a-3e8f-4718-868c-c08b5d2b09a7"; public static Guid GOnlyVC = new Guid(GOnlyVCString); - - public const string GOnlyCppString = "bf397895-9307-431f-a823-1c85d430243a"; - public static Guid GOnlyCpp = new Guid(GOnlyCppString); } /// /// Helper class that encapsulates all CommandIDs uses across VS Package. diff --git a/IncludeToolbox2019/VSCommandTable.vsct b/IncludeToolbox2019/VSCommandTable.vsct index 697f4cc..cc3701e 100644 --- a/IncludeToolbox2019/VSCommandTable.vsct +++ b/IncludeToolbox2019/VSCommandTable.vsct @@ -126,7 +126,7 @@ - + @@ -156,6 +156,5 @@ - diff --git a/IncludeToolbox2022/VSCommandTable.cs b/IncludeToolbox2022/VSCommandTable.cs index 066d278..bcb664c 100644 --- a/IncludeToolbox2022/VSCommandTable.cs +++ b/IncludeToolbox2022/VSCommandTable.cs @@ -20,9 +20,6 @@ internal sealed partial class PackageGuids public const string GOnlyVCString = "1175290a-3e8f-4718-868c-c08b5d2b09a7"; public static Guid GOnlyVC = new Guid(GOnlyVCString); - - public const string GOnlyCppString = "bf397895-9307-431f-a823-1c85d430243a"; - public static Guid GOnlyCpp = new Guid(GOnlyCppString); } /// /// Helper class that encapsulates all CommandIDs uses across VS Package. diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index 080ce38..acd4f73 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -126,7 +126,7 @@ - + @@ -156,6 +156,5 @@ - diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs index e10644a..f1c34cd 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs @@ -1,29 +1,95 @@ using Community.VisualStudio.Toolkit; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.VCProjectEngine; +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; using Task = System.Threading.Tasks.Task; namespace IncludeToolbox.Commands { + internal sealed class TempGuard : IDisposable + { + readonly VCFile file; + private bool disposedValue; + + private void Dispose() + { + if (!disposedValue) + { + file.Remove(); + disposedValue = true; + } + } + public TempGuard(VCFile file) + { + this.file = file; + } + + ~TempGuard() + { + Dispose(); + } + + void IDisposable.Dispose() + { + Dispose(); + GC.SuppressFinalize(this); + } + } + + [Command(PackageIds.TrialAndError)] internal sealed class TrialAndErrorRemoval_CodeWindow : BaseCommand { TrialAndErrorRemoval impl = new(); + static string support_cpp_path = null; protected override Task InitializeCompletedAsync() { Command.Supported = false; + support_cpp_path = Path.ChangeExtension(Path.GetTempFileName(), ".cpp"); return Task.CompletedTask; } + async Task TAERHeaderAsync(VCFile file) + { + _ = Output.WriteLineAsync($"Starting Trial And Error Include removal on header file {file.FullPath}"); + File.WriteAllText(support_cpp_path, "#include \"" + file.FullPath + "\""); + + var proj = await VS.Solutions.GetActiveProjectAsync(); + var vc = await proj.ToVCProjectAsync(); + var xfile = (VCFile)vc.AddFile(support_cpp_path); + using TempGuard tg = new(xfile); + return await impl.StartHeaderAsync(file, xfile, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); + } + async Task TAERCodeAsync(VCFile file) + { + _ = Output.WriteLineAsync($"Starting Trial And Error Include removal on {file.FullPath}"); + return await impl.StartAsync(file, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); + } + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) { var x = await VS.Solutions.GetActiveItemAsync(); - var file = (await x.ToVCProjectItemAsync()) as VCFile; - if (file == null || file.FileType != eFileType.eFileTypeCppCode) return; - _ = Output.WriteLineAsync($"Starting Trial And Error Include removal on {x.FullPath}"); - string err = await impl.StartAsync(file, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); + if ((await x.ToVCProjectItemAsync()) is not VCFile file) + return; + string err = ""; + + switch (file.FileType) + { + case eFileType.eFileTypeCppCode: + err = await TAERCodeAsync(file); + break; + case eFileType.eFileTypeCppHeader: + err = await TAERHeaderAsync(file); + break; + default: + break; + } + if (string.IsNullOrEmpty(err)) return; _ = Output.WriteLineAsync(err); } diff --git a/IncludeToolboxShared/IWYU/IWYU.cs b/IncludeToolboxShared/IWYU/IWYU.cs index 9a13451..1c94434 100644 --- a/IncludeToolboxShared/IWYU/IWYU.cs +++ b/IncludeToolboxShared/IWYU/IWYU.cs @@ -125,7 +125,7 @@ bool StartImpl(string file, string cmd) File.WriteAllText(support_path, cmd); var ext = Path.GetExtension(file); - if (ext == ".h" || ext == ".hpp") + if (ext == ".h" || ext == ".hpp" || ext == ".hxx") { File.WriteAllText(support_cpp_path, "#include \"" + file + "\""); file = " -Xiwyu --check_also=" + file; diff --git a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs index 36ec472..f2723c3 100644 --- a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs @@ -12,171 +12,122 @@ namespace IncludeToolbox { - internal sealed class AsyncDispatcher : IDisposable - { - TaskCompletionSource tcs; - private bool disposedValue; - - private void Dispatch(bool a) - { - tcs.SetResult(a); - } - public AsyncDispatcher() - { - VS.Events.BuildEvents.SolutionBuildDone += Dispatch; - } - ~AsyncDispatcher() - { - if (!disposedValue) - VS.Events.BuildEvents.SolutionBuildDone -= Dispatch; - } + internal sealed class AsyncDispatcher : IDisposable + { + TaskCompletionSource tcs; + private bool disposedValue; - public async Task CompileAsync(VCFileConfiguration config) - { - tcs = new(); - for (int i = 0; i < 3; i++) - { - try - { - config.Compile(true, false); - return await tcs.Task; - } - catch (Exception) - { - await Task.Delay(100); - } - } - return false; - } + private void Dispatch(bool a) + { + tcs.SetResult(a); + } + public AsyncDispatcher() + { + VS.Events.BuildEvents.SolutionBuildDone += Dispatch; + } + ~AsyncDispatcher() + { + if (!disposedValue) + VS.Events.BuildEvents.SolutionBuildDone -= Dispatch; + } - void IDisposable.Dispose() - { - if (!disposedValue) - { - VS.Events.BuildEvents.SolutionBuildDone -= Dispatch; - disposedValue = true; - } - GC.SuppressFinalize(this); - } - } - internal sealed class DialogGuard : IDisposable - { - private bool disposedValue; - public IVsThreadedWaitDialog4 Dialog { get; private set; } - - public DialogGuard(IVsThreadedWaitDialog4 dialog) - { - this.Dialog = dialog; - } + public async Task CompileAsync(VCFileConfiguration config) + { + tcs = new(); + for (int i = 0; i < 3; i++) + { + try + { + config.Compile(true, false); + return await tcs.Task; + } + catch (Exception) + { + await Task.Delay(100); + } + } + return false; + } - private void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - // TODO: dispose managed state (managed objects) - } - Dialog.EndWaitDialog(); - // TODO: free unmanaged resources (unmanaged objects) and override finalizer - // TODO: set large fields to null - disposedValue = true; - } - } + void IDisposable.Dispose() + { + if (!disposedValue) + { + VS.Events.BuildEvents.SolutionBuildDone -= Dispatch; + disposedValue = true; + } + GC.SuppressFinalize(this); + } + } + internal sealed class DialogGuard : IDisposable + { + private bool disposedValue; + public IVsThreadedWaitDialog4 Dialog { get; private set; } - // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources - ~DialogGuard() - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Dispose(disposing: false); - } + public DialogGuard(IVsThreadedWaitDialog4 dialog) + { + this.Dialog = dialog; + } - public void Dispose() - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Dispose(disposing: true); - GC.SuppressFinalize(this); - } - } - internal sealed class TrialAndErrorRemoval - { - public static bool WorkInProgress { get; private set; } - - public int Removed { get; private set; } = 0; - - - //Makes less variable noise - struct Descriptor - { - public IncludeLine[] lines; - public ITextBuffer buffer; - public string text; - public string filename; - public VCFileConfiguration config; - public int offset; - public TrialAndErrorRemovalOptions settings; - } + private void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + // TODO: dispose managed state (managed objects) + } + Dialog.EndWaitDialog(); + // TODO: free unmanaged resources (unmanaged objects) and override finalizer + // TODO: set large fields to null + disposedValue = true; + } + } + // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources + ~DialogGuard() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: false); + } - private async Task TestCompileAsync(VCFileConfiguration config) - { - using AsyncDispatcher dispatcher = new(); - return await dispatcher.CompileAsync(config); - } - private async Task RemoveAsync(Descriptor desc) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - using DialogGuard dialog = new(await StartProgressDialogAsync(desc.filename, desc.lines.Length + 1)); - int delta = 0; - using AsyncDispatcher dispatcher = new(); - int step = 0; - - foreach (var line in desc.lines) - { - string waitMessage = $"Removing #includes from '{desc.filename}'"; - string progressText = $"Trying to remove '{line.Content}' ..."; - dialog.Dialog.UpdateProgress( - szUpdatedWaitMessage: waitMessage, - szProgressText: progressText, - szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, - iCurrentStep: ++step, - iTotalSteps: desc.lines.Length + 1, - fDisableCancel: false, - pfCanceled: out var canceled); - - if (canceled) - { - _ = Output.WriteLineAsync("Operation was cancelled."); - return; - } + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } + internal sealed class TrialAndErrorRemoval + { + public static bool WorkInProgress { get; private set; } - var rs = desc.settings.KeepLineBreaks ? - line.ReplaceSpanWithoutNewline(desc.offset) : - line.ReplaceSpan(desc.offset); + public int Removed { get; private set; } = 0; - desc.buffer.Delete(rs); - bool b = await dispatcher.CompileAsync(desc.config); + //Makes less variable noise + struct Descriptor + { + public IncludeLine[] lines; + public ITextBuffer buffer; + public string text; + public string filename; + public VCFileConfiguration config; + public int offset; + public TrialAndErrorRemovalOptions settings; + } - if (b) - { - if (desc.settings.RemovalOrder == IncludeRemovalOrder.TopToBottom) - { - desc.offset -= rs.Length; - delta += rs.Length; - } - await Output.WriteLineAsync($"{line.FullFile} was successfully removed"); - Removed++; - continue; - } - desc.buffer.Insert(rs.Start, desc.text.Substring(rs.Start + delta, rs.Length)); - await Output.WriteLineAsync($"Unable to remove {line.FullFile}"); - } - } - //Expected: compilable file .cpp or other - public async Task StartAsync(VCFile file, TrialAndErrorRemovalOptions settings) - { - var document = await VS.Documents.GetDocumentViewAsync(file.FullPath); + + private async Task TestCompileAsync(VCFileConfiguration config) + { + using AsyncDispatcher dispatcher = new(); + return await dispatcher.CompileAsync(config); + } + + + + public async Task StartGenericAsync(VCFileConfiguration config, DocumentView document, TrialAndErrorRemovalOptions settings) + { var buffer = document.TextBuffer; var snap = buffer.CurrentSnapshot; @@ -185,15 +136,7 @@ public async Task StartAsync(VCFile file, TrialAndErrorRemovalOptions se text = text.Substring(span.Start, span.Length); var lines = Parser.ParseInclues(text.AsSpan(), settings.IgnoreIfdefs); - VCFileConfiguration config = VCUtil.GetVCFileConfig(file); - if (config == null) return $"{file.Name} has failed to yield a config."; - - if (!await TestCompileAsync(config)) - return $"{document.FilePath} failed to compile. Include removal stopped."; - - // Skip first on demand - var iterator = (settings.IgnoreFirstInclude ? lines.Skip(1) : lines.AsEnumerable()) - .Where(s => !s.Keep); // filter kept + var iterator = lines.Where(s => !s.Keep); // Filter regecies string documentName = Path.GetFileNameWithoutExtension(document.FilePath); @@ -226,26 +169,98 @@ public async Task StartAsync(VCFile file, TrialAndErrorRemovalOptions se return ""; } - private async Task StartProgressDialogAsync(string documentName, int steps) - { - await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - var dialog_factory = (IVsThreadedWaitDialogFactory)await VS.Services.GetThreadedWaitDialogAsync(); - var dialog = dialog_factory.CreateInstance(); - - - string waitMessage = $"Parsing '{documentName}' ... "; - dialog.StartWaitDialogWithPercentageProgress( - szWaitCaption: "Include Toolbox - Running Trial & Error Include Removal", - szWaitMessage: waitMessage, - szProgressText: null, - varStatusBmpAnim: null, - szStatusBarText: "Running Trial & Error Removal - " + waitMessage, - fIsCancelable: true, - iDelayToShowDialog: 0, - iTotalSteps: steps, - iCurrentStep: 0); - - return dialog; - } - } + private async Task RemoveAsync(Descriptor desc) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + using DialogGuard dialog = new(await StartProgressDialogAsync(desc.filename, desc.lines.Length + 1)); + int delta = 0; + using AsyncDispatcher dispatcher = new(); + int step = 0; + + foreach (var line in desc.lines) + { + string waitMessage = $"Removing #includes from '{desc.filename}'"; + string progressText = $"Trying to remove '{line.Content}' ..."; + dialog.Dialog.UpdateProgress( + szUpdatedWaitMessage: waitMessage, + szProgressText: progressText, + szStatusBarText: "Running Trial & Error Removal - " + waitMessage + " - " + progressText, + iCurrentStep: ++step, + iTotalSteps: desc.lines.Length + 1, + fDisableCancel: false, + pfCanceled: out var canceled); + + if (canceled) + { + _ = Output.WriteLineAsync("Operation was cancelled."); + return; + } + + var rs = desc.settings.KeepLineBreaks ? + line.ReplaceSpanWithoutNewline(desc.offset) : + line.ReplaceSpan(desc.offset); + + desc.buffer.Delete(rs); + + bool b = await dispatcher.CompileAsync(desc.config); + + if (b) + { + if (desc.settings.RemovalOrder == IncludeRemovalOrder.TopToBottom) + { + desc.offset -= rs.Length; + delta += rs.Length; + } + await Output.WriteLineAsync($"{line.FullFile} was successfully removed"); + Removed++; + continue; + } + desc.buffer.Insert(rs.Start, desc.text.Substring(rs.Start + delta, rs.Length)); + await Output.WriteLineAsync($"Unable to remove {line.FullFile}"); + } + } + public async Task StartHeaderAsync(VCFile file, VCFile support, TrialAndErrorRemovalOptions settings) + { + var document = await VS.Documents.GetDocumentViewAsync(file.FullPath); + VCFileConfiguration config = VCUtil.GetVCFileConfig(support); + if (config == null) return $"{support.Name} has failed to yield a config."; + + return !await TestCompileAsync(config) + ? $"{file.FullPath} failed to compile. Include removal stopped." + : await StartGenericAsync(config, document, settings); + } + //Expected: compilable file .cpp or other + public async Task StartAsync(VCFile file, TrialAndErrorRemovalOptions settings) + { + var document = await VS.Documents.GetDocumentViewAsync(file.FullPath); + VCFileConfiguration config = VCUtil.GetVCFileConfig(file); + if (config == null) return $"{file.Name} has failed to yield a config."; + + return !await TestCompileAsync(config) + ? $"{document.FilePath} failed to compile. Include removal stopped." + : await StartGenericAsync(config, document, settings); + } + + private async Task StartProgressDialogAsync(string documentName, int steps) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var dialog_factory = (IVsThreadedWaitDialogFactory)await VS.Services.GetThreadedWaitDialogAsync(); + var dialog = dialog_factory.CreateInstance(); + + + string waitMessage = $"Parsing '{documentName}' ... "; + dialog.StartWaitDialogWithPercentageProgress( + szWaitCaption: "Include Toolbox - Running Trial & Error Include Removal", + szWaitMessage: waitMessage, + szProgressText: null, + varStatusBmpAnim: null, + szStatusBarText: "Running Trial & Error Removal - " + waitMessage, + fIsCancelable: true, + iDelayToShowDialog: 0, + iTotalSteps: steps, + iCurrentStep: 0); + + return dialog; + } + } } \ No newline at end of file diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index 4834a94..ca51deb 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -22,12 +22,7 @@ namespace IncludeToolbox expression: "one & two", termNames: new[] { "one", "two" }, termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(h|hpp|hxx|cpp|c|cxx)$" } -)] - [ProvideUIContextRule(PackageGuids.GOnlyCppString, "UIOnlyCpp", - expression: "one & two", - termNames: new[] { "one", "two" }, - termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(cpp|c|cxx)$" } -)] +)] [ProvideUIContextRule(PackageGuids.GHeaderOnlyString, "UIOnlyHead", expression: "one & two", termNames: new[] { "one", "two" }, diff --git a/README.md b/README.md index d3eaaa9..5e0110e 100644 --- a/README.md +++ b/README.md @@ -60,21 +60,23 @@ All operations are performed in the order in which they occur on the option page ## Trial and Error Include Removal The name says it all: This tool will try to remove an include, recompile, see if it works and proceed to the next one accordingly. -The tool can be started an all compilable files in a VC++ by right clicking on the code window. There is also a special version in the Project context menu which will run over every single file in the project (takes very long). +The tool can be started an all compilable files in a VC++ by right clicking on the code window. There is also a special version in the Project context menu which will run over every single compilable file in the project (takes very long). Obviously the results of this tool are far from optimal and the process can take a while. -The exact behavior of this command can be controlled in _Tools>Options>Include Toolbox>Trial and Error Include Removal_: +The exact behavior of this command can be controlled in *Tools>Options>Include Toolbox>Trial and Error Include Removal*: * Ignore List A list of regexes. If the content of an include matches any of these, it will never be removed. * Ignore First Include - If true the top most include will always be ignored + If true the top most include will always be ignored, does not work in headers * Removal Order Wheater the tool should run from top to bottom or bottom to top (this can make a difference on the end result) To suppress removal of a single include, add a comment to its line containing `//IWYU pragma: keep` +Since 3.2.47 works for header files as well. + ## Include-What-You-Use Integration @@ -125,4 +127,18 @@ Requires fixes. * Why don't you apply the formatting to all includes within a file? This may sound desirable, but is very messy if there are optional includes (preprocessor) or specific exceptions where not all includes should be in the same place or in the default order. * XY didn't work, what is going on? - Look in the output window for Include Toolbox to get more information. \ No newline at end of file + Look in the output window for Include Toolbox to get more information. + +# Optimal Usage Pattern + +1. Start from the header file in your project, that includes only standard library. +2. Use IWYU and/or TAEIR tool +3. Add file to mapper with pre-specified .imp file at *Tools>Options>Include Toolbox>Include Mapper* +4. Add this map file to the IWYU preset at *Tools>Options>Include Toolbox>Include-What-You-Use>Mapping file* +5. Go through all the headers in your project, including them in mapper file +6. After that go through all .cpp files with the same tools. IWYU has mass processing for several selected files. IThe best way of using this tool is in batches of \4-5 files. +7. Compile files to asses the result. + +# Final Words + +The IWYU itself is far from perfect, TAEIR also, but combinig those tools and Mapping capabilities with other maps, provided by IWYU repo and defaults the results will be just good enough. \ No newline at end of file diff --git a/doc/changelog.md b/doc/changelog.md index f7f6193..8390927 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,4 +1,6 @@ # Version History +* 3.2.47 + * Enabled Trial and Error Include Removal for header files. * 3.2.43 * Added more tests for parser * Fixed Include formatter not deleting empty lines From 97231a0fd592323934c35e5cc1aeacf8cbb420da Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 1 Sep 2022 09:58:45 +0200 Subject: [PATCH 69/86] Added precompile header file support for Trial and Error --- .../Commands/TrialAndErrorRemoval_CodeWindow.cs | 11 +++++++++-- .../Implementation/TrialAndErrorRemoval.cs | 2 +- IncludeToolboxShared/Util/VCUtil.cs | 9 +++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs index f1c34cd..e8915df 100644 --- a/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs +++ b/IncludeToolboxShared/Commands/TrialAndErrorRemoval_CodeWindow.cs @@ -12,7 +12,7 @@ namespace IncludeToolbox.Commands internal sealed class TempGuard : IDisposable { readonly VCFile file; - private bool disposedValue; + private bool disposedValue = false; private void Dispose() { @@ -56,12 +56,19 @@ protected override Task InitializeCompletedAsync() async Task TAERHeaderAsync(VCFile file) { _ = Output.WriteLineAsync($"Starting Trial And Error Include removal on header file {file.FullPath}"); - File.WriteAllText(support_cpp_path, "#include \"" + file.FullPath + "\""); + string xout = ""; + + var pch = VCUtil.GetPCH((VCProject)file.project); + if (!string.IsNullOrEmpty(pch)) + xout = "#include \"" + pch + "\"\n"; + + File.WriteAllText(support_cpp_path, xout + "#include \"" + file.FullPath + "\""); var proj = await VS.Solutions.GetActiveProjectAsync(); var vc = await proj.ToVCProjectAsync(); var xfile = (VCFile)vc.AddFile(support_cpp_path); using TempGuard tg = new(xfile); + return await impl.StartHeaderAsync(file, xfile, await TrialAndErrorRemovalOptions.GetLiveInstanceAsync()); } async Task TAERCodeAsync(VCFile file) diff --git a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs index f2723c3..4290ee5 100644 --- a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs @@ -225,7 +225,7 @@ public async Task StartHeaderAsync(VCFile file, VCFile support, TrialAn VCFileConfiguration config = VCUtil.GetVCFileConfig(support); if (config == null) return $"{support.Name} has failed to yield a config."; - return !await TestCompileAsync(config) + return !await TestCompileAsync(config) ? $"{file.FullPath} failed to compile. Include removal stopped." : await StartGenericAsync(config, document, settings); } diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs index dfb8167..0990768 100644 --- a/IncludeToolboxShared/Util/VCUtil.cs +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -82,6 +82,15 @@ public static async Task GetCommandLineAsync(bool rebuild) return await GetCommandLineAsync(rebuild, await VS.Solutions.GetActiveProjectAsync()); } + public static string GetPCH(VCProject proj) + { + var cfg = proj.ActiveConfiguration; + var cl = cfg?.Rules; + var com = (IVCRulePropertyStorage2)cl.Item("CL"); + var xstandard = com.GetEvaluatedPropertyValue("PrecompiledHeader"); + return xstandard == "Use" ? com.GetEvaluatedPropertyValue("PrecompiledHeaderFile") : ""; + } + public static async Task GetCommandLineAsync(bool rebuild, Project xproj) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); From 9e774f02e600a17cb21203d424b8477f456232fb Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 1 Sep 2022 10:43:24 +0200 Subject: [PATCH 70/86] reinsertion bug --- IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs index 4290ee5..fd02680 100644 --- a/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs +++ b/IncludeToolboxShared/Implementation/TrialAndErrorRemoval.cs @@ -215,7 +215,7 @@ private async Task RemoveAsync(Descriptor desc) Removed++; continue; } - desc.buffer.Insert(rs.Start, desc.text.Substring(rs.Start + delta, rs.Length)); + desc.buffer.Insert(rs.Start, desc.text.Substring(rs.Start - desc.offset + delta, rs.Length)); await Output.WriteLineAsync($"Unable to remove {line.FullFile}"); } } From 0b3aaf721e9d61217514b55ace9626a3fc2423b2 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 1 Sep 2022 19:13:17 +0200 Subject: [PATCH 71/86] fixed IWYU throw on empty addition --- IncludeToolboxShared/IWYU/IWYUApply.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/IncludeToolboxShared/IWYU/IWYUApply.cs b/IncludeToolboxShared/IWYU/IWYUApply.cs index 80b7c19..5c4577e 100644 --- a/IncludeToolboxShared/IWYU/IWYUApply.cs +++ b/IncludeToolboxShared/IWYU/IWYUApply.cs @@ -133,11 +133,13 @@ public static async Task ApplyPreciseAsync(IWYUOptions settings, Parser.Output p } tree.AddChildren(add_f); - string addition = lb + - add_i.Select(s => s.Project(output)) - .Aggregate((s1, s2) => s1 + lb + s2) - + lb + lb + tree.ToString(std >= Standard.cpp17); + string addition = ""; + foreach (var item in add_i.Select(s => s.Project(output))) + addition+=lb+item; + + addition+= lb + lb + tree.ToString(std >= Standard.cpp17); + edit.Insert(parsed.InsertionPoint, addition); edit.Apply(); } From 2b7185c66dcdf2429c1a43247196b44cb32652f7 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Wed, 7 Sep 2022 10:18:34 +0200 Subject: [PATCH 72/86] [release] removed VS Publish step, publishing will be manual, updated version --- .github/workflows/main.yml | 29 ++++++++++--------- IncludeToolbox2019/source.extension.cs | 2 +- .../source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- .../source.extension.vsixmanifest | 2 +- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ead8d27..3da8326 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -90,17 +90,18 @@ jobs: tag_name: ${{ needs.build.outputs.version }} files: | **/*.vsix - - - name: Publish 2022 extension to Marketplace - uses: cezarypiatek/VsixPublisherAction@0.2 - with: - extension-file: '${{ github.event.repository.name }}2022.vsix' - publish-manifest-file: 'vs-publish.json' - personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} - - - name: Publish 2019 extension to Marketplace - uses: cezarypiatek/VsixPublisherAction@0.2 - with: - extension-file: '${{ github.event.repository.name }}2019.vsix' - publish-manifest-file: 'vs-publish.json' - personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} + + # Doesn't work + #- name: Publish 2022 extension to Marketplace + # uses: cezarypiatek/VsixPublisherAction@0.2 + # with: + # extension-file: '${{ github.event.repository.name }}2022.vsix' + # publish-manifest-file: 'vs-publish.json' + # personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} + # + #- name: Publish 2019 extension to Marketplace + # uses: cezarypiatek/VsixPublisherAction@0.2 + # with: + # extension-file: '${{ github.event.repository.name }}2019.vsix' + # publish-manifest-file: 'vs-publish.json' + # personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 80effc7..9363bbf 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.0"; + public const string Version = "3.2.54"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 2fb6b45..8d922f9 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 15b3138..a9ce7c0 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.0"; + public const string Version = "3.2.54"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 8590880..dcf66e1 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt From 90f3b54c007e0b8e98e115072d6a63374706263d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Wed, 7 Sep 2022 11:20:45 +0200 Subject: [PATCH 73/86] Updated readme with links, reverted VSIX ID for VS2019 --- IncludeToolbox2019/source.extension.cs | 6 +++--- IncludeToolbox2019/source.extension.vsixmanifest | 4 ++-- README.md | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 9363bbf..0870076 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -7,12 +7,12 @@ namespace IncludeToolbox { internal sealed partial class Vsix { - public const string Id = "IncludeToolbox2019.1431faa5-aa04-47af-8289-9d887e0696a4"; + public const string Id = "IncludeToolbox.Andreas Reich.075c2e2b-7b71-45ba-b2e6-c1dadc81cfac"; public const string Name = "Include Toolbox 2019"; - public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; + public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022"; public const string Language = "en-US"; public const string Version = "3.2.54"; - public const string Author = "Agrael"; + public const string Author = "Wumpf"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 8d922f9..66d4264 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,9 +1,9 @@ - + Include Toolbox 2019 - Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. + Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022 License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png diff --git a/README.md b/README.md index 5e0110e..6d9e6ec 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,9 @@ Include Toolbox consists of 4 different tools. All of them are only applicable t [Open VSIX Gallery 2022](https://www.vsixgallery.com/extension/IncludeToolbox2022.d3cba4fe-8d65-479b-8436-18d743ee7b53) -Marketplace 2019(tbd) +[Marketplace 2019](https://marketplace.visualstudio.com/items?itemName=Wumpf.IncludeToolbox) -Marketplace 2022(tbd) +[Marketplace 2022](https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022) [Version History](/doc/changelog.md) From 39c2dd6a315a9f42aec077838e0b5010f8940ebf Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Wed, 28 Sep 2022 18:46:30 +0200 Subject: [PATCH 74/86] [release] include graph beta --- IncludeToolbox2019/IncludeToolbox2019.csproj | 1 + IncludeToolbox2019/VSCommandTable.cs | 2 + IncludeToolbox2019/VSCommandTable.vsct | 21 +- IncludeToolbox2022/IncludeToolbox2022.csproj | 13 +- IncludeToolbox2022/VSCommandTable.cs | 2 + IncludeToolbox2022/VSCommandTable.vsct | 21 +- IncludeToolboxShared/Commands/IncludeGraph.cs | 15 ++ .../Commands/IncludeGraphToolWindow.cs | 45 ---- .../Commands/IncludeGraph_CodeWindow.cs | 26 ++ IncludeToolboxShared/FolderIncludeTreeItem.cs | 227 +++++++++++++++++ IncludeToolboxShared/Graph/IncludeGraph.cs | 141 ++++++----- .../CompilationBasedGraphParser.cs | 0 .../{Graph => GraphEx}/CustomGraphParser.cs | 0 .../{Graph => GraphEx}/DGMLGraph.cs | 0 IncludeToolboxShared/GraphEx/IncludeGraph.cs | 91 +++++++ .../{Graph => GraphEx}/IncludeGraphToDGML.cs | 0 IncludeToolboxShared/IncludeGraphViewModel.cs | 231 ++++++++++++++++++ IncludeToolboxShared/IncludeToolboxPackage.cs | 5 +- .../IncludeToolboxShared.projitems | 22 +- .../Options/ViewerOptionsPage.cs | 30 +-- .../ToolWindows/View/IncludeGraphControl.xaml | 67 +++++ .../View/IncludeGraphControl.xaml.cs | 38 +++ .../View/IncludeGraphToolWindow.cs | 33 +++ .../ToolWindows/View/ToolWindowStyle.xaml | 191 +++++++++++++++ .../ViewModel/HierarchyIncludeTreeViewItem.cs | 109 +++++++++ .../ViewModel/IncludeGraphViewModel.cs | 34 +++ .../ViewModel/IncludeTreeViewItem.cs | 18 ++ IncludeToolboxShared/Util/ParserStructures.cs | 37 ++- IncludeToolboxShared/Util/PropertyNotify.cs | 24 ++ README.md | 16 +- art/IncludeGraph.png | Bin 0 -> 62073 bytes 31 files changed, 1322 insertions(+), 138 deletions(-) create mode 100644 IncludeToolboxShared/Commands/IncludeGraph.cs delete mode 100644 IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs create mode 100644 IncludeToolboxShared/Commands/IncludeGraph_CodeWindow.cs create mode 100644 IncludeToolboxShared/FolderIncludeTreeItem.cs rename IncludeToolboxShared/{Graph => GraphEx}/CompilationBasedGraphParser.cs (100%) rename IncludeToolboxShared/{Graph => GraphEx}/CustomGraphParser.cs (100%) rename IncludeToolboxShared/{Graph => GraphEx}/DGMLGraph.cs (100%) create mode 100644 IncludeToolboxShared/GraphEx/IncludeGraph.cs rename IncludeToolboxShared/{Graph => GraphEx}/IncludeGraphToDGML.cs (100%) create mode 100644 IncludeToolboxShared/IncludeGraphViewModel.cs create mode 100644 IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml create mode 100644 IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml.cs create mode 100644 IncludeToolboxShared/ToolWindows/View/IncludeGraphToolWindow.cs create mode 100644 IncludeToolboxShared/ToolWindows/View/ToolWindowStyle.xaml create mode 100644 IncludeToolboxShared/ToolWindows/ViewModel/HierarchyIncludeTreeViewItem.cs create mode 100644 IncludeToolboxShared/ToolWindows/ViewModel/IncludeGraphViewModel.cs create mode 100644 IncludeToolboxShared/ToolWindows/ViewModel/IncludeTreeViewItem.cs create mode 100644 IncludeToolboxShared/Util/PropertyNotify.cs create mode 100644 art/IncludeGraph.png diff --git a/IncludeToolbox2019/IncludeToolbox2019.csproj b/IncludeToolbox2019/IncludeToolbox2019.csproj index 8c2a316..9d1fe75 100644 --- a/IncludeToolbox2019/IncludeToolbox2019.csproj +++ b/IncludeToolbox2019/IncludeToolbox2019.csproj @@ -98,6 +98,7 @@ + diff --git a/IncludeToolbox2019/VSCommandTable.cs b/IncludeToolbox2019/VSCommandTable.cs index 1a7bfb4..3cfb9bb 100644 --- a/IncludeToolbox2019/VSCommandTable.cs +++ b/IncludeToolbox2019/VSCommandTable.cs @@ -28,6 +28,7 @@ internal sealed partial class PackageIds { public const int ContextMenuGroup = 0x0001; public const int MapMenuGroup = 0x0002; + public const int IncludeGraphGroup = 0x0003; public const int ItemContextGroup = 0x021A; public const int ProjectContextGroup = 0x021B; public const int IncludeWhatYouUseId = 0x0100; @@ -37,6 +38,7 @@ internal sealed partial class PackageIds public const int GenMap = 0x0104; public const int RemMap = 0x0105; public const int IncludeGraphId = 0x0106; + public const int IncludeGraphCodeId = 0x0107; public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2019/VSCommandTable.vsct b/IncludeToolbox2019/VSCommandTable.vsct index cc3701e..f9f4c44 100644 --- a/IncludeToolbox2019/VSCommandTable.vsct +++ b/IncludeToolbox2019/VSCommandTable.vsct @@ -15,10 +15,13 @@ - + - + + + + @@ -120,6 +123,17 @@ + @@ -127,6 +141,7 @@ + @@ -138,6 +153,7 @@ + @@ -149,6 +165,7 @@ + diff --git a/IncludeToolbox2022/IncludeToolbox2022.csproj b/IncludeToolbox2022/IncludeToolbox2022.csproj index 5eed754..c3429f6 100644 --- a/IncludeToolbox2022/IncludeToolbox2022.csproj +++ b/IncludeToolbox2022/IncludeToolbox2022.csproj @@ -98,19 +98,30 @@ + + + + + compile; build; native; contentfiles; analyzers; buildtransitive - + + 17.3.32804.24 + + + 17.3.32804.24 + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/IncludeToolbox2022/VSCommandTable.cs b/IncludeToolbox2022/VSCommandTable.cs index bcb664c..48719fd 100644 --- a/IncludeToolbox2022/VSCommandTable.cs +++ b/IncludeToolbox2022/VSCommandTable.cs @@ -28,6 +28,7 @@ internal sealed partial class PackageIds { public const int ContextMenuGroup = 0x0001; public const int MapMenuGroup = 0x0002; + public const int IncludeGraphGroup = 0x0003; public const int ItemContextGroup = 0x021A; public const int ProjectContextGroup = 0x021B; public const int IncludeWhatYouUseId = 0x0100; @@ -37,6 +38,7 @@ internal sealed partial class PackageIds public const int GenMap = 0x0104; public const int RemMap = 0x0105; public const int IncludeGraphId = 0x0106; + public const int IncludeGraphCodeId = 0x0107; public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2022/VSCommandTable.vsct b/IncludeToolbox2022/VSCommandTable.vsct index acd4f73..c6f2771 100644 --- a/IncludeToolbox2022/VSCommandTable.vsct +++ b/IncludeToolbox2022/VSCommandTable.vsct @@ -15,10 +15,13 @@ - + - + + + + @@ -120,6 +123,17 @@ + @@ -127,6 +141,7 @@ + @@ -138,6 +153,7 @@ + @@ -149,6 +165,7 @@ + diff --git a/IncludeToolboxShared/Commands/IncludeGraph.cs b/IncludeToolboxShared/Commands/IncludeGraph.cs new file mode 100644 index 0000000..a9440cd --- /dev/null +++ b/IncludeToolboxShared/Commands/IncludeGraph.cs @@ -0,0 +1,15 @@ +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Shell; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox.Commands +{ + [Command(PackageIds.IncludeGraphId)] + internal sealed class IncludeGraph : BaseCommand + { + protected override Task ExecuteAsync(OleMenuCmdEventArgs e) + { + return IncludeGraphToolWindow.ShowAsync(); + } + } +} diff --git a/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs b/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs deleted file mode 100644 index ecc4609..0000000 --- a/IncludeToolboxShared/Commands/IncludeGraphToolWindow.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.ComponentModel.Design; -using Community.VisualStudio.Toolkit; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using Task = System.Threading.Tasks.Task; - -namespace IncludeToolbox.Commands -{ - [Command(PackageIds.IncludeGraphId)] - internal sealed class IncludeGraphToolWindow : BaseCommand - { - protected override Task InitializeCompletedAsync() - { - return base.InitializeCompletedAsync(); - } - - //[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD002:Avoid problematic synchronous waits", Justification = "Has to be synchronous")] - protected override void BeforeQueryStatus(EventArgs e) - { - Command.Visible = true; - } - - protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) - { - await base.ExecuteAsync(e); - //await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - - //// Get the instance number 0 of this tool window. This window is single instance so this instance - //// is actually the only one. - //// The last flag is set to true so that if the tool window does not exists it will be created. - //ToolWindowPane window = Package.FindToolWindow(typeof(GraphWindow.IncludeGraphToolWindow), 0, true); - //if (window?.Frame == null) - //{ - // await Output.Instance.ErrorMsg("Failed to open Include Graph window!"); - //} - //else - //{ - // IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; - // windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_CmdUIGuid, GraphWindow.IncludeGraphToolWindow.GUIDString); - // Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); - //} - } - } -} diff --git a/IncludeToolboxShared/Commands/IncludeGraph_CodeWindow.cs b/IncludeToolboxShared/Commands/IncludeGraph_CodeWindow.cs new file mode 100644 index 0000000..6aa6ab1 --- /dev/null +++ b/IncludeToolboxShared/Commands/IncludeGraph_CodeWindow.cs @@ -0,0 +1,26 @@ +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Shell; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox.Commands +{ + [Command(PackageIds.IncludeGraphCodeId)] + internal class IncludeGraph_CodeWindow : BaseCommand + { + protected override Task InitializeCompletedAsync() + { + Command.Supported = false; + return Task.CompletedTask; + } + + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) + { + var pane = await IncludeGraphToolWindow.ShowAsync(); + var cont = (IncludeGraphControl)pane.Content; + var context = (IncludeGraphViewModel)cont.DataContext; + var file = await VS.Documents.GetActiveDocumentViewAsync(); + + context.RecalculateForAsync(file).FireAndForget(); + } + } +} diff --git a/IncludeToolboxShared/FolderIncludeTreeItem.cs b/IncludeToolboxShared/FolderIncludeTreeItem.cs new file mode 100644 index 0000000..1524a70 --- /dev/null +++ b/IncludeToolboxShared/FolderIncludeTreeItem.cs @@ -0,0 +1,227 @@ +using IncludeToolbox.Graph; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IncludeToolbox.GraphWindow +{ + public class FolderIncludeTreeViewItem_Root : IncludeTreeViewItem + { + IReadOnlyCollection graphItems; + IncludeGraph.Item includingFile; + + public override IReadOnlyList Children + { + get + { + if (cachedItems == null) + GenerateChildItems(); + return cachedItems; + } + } + protected IReadOnlyList cachedItems; + + + public FolderIncludeTreeViewItem_Root(IReadOnlyCollection graphItems, IncludeGraph.Item includingFile) + { + this.graphItems = graphItems; + this.includingFile = includingFile; + this.Name = "Root"; + this.AbsoluteFilename = "Root"; + } + + public void Reset(IReadOnlyCollection graphItems, IncludeGraph.Item includingFile) + { + this.graphItems = graphItems; + this.includingFile = includingFile; + this.cachedItems = null; + NotifyAllPropertiesChanged(); + } + + private void GenerateChildItems() + { + if (graphItems == null) + { + cachedItems = emptyList; + return; + } + + var rootChildren = new List(); + cachedItems = rootChildren; + + // Create first layer of folder and leaf items + var leafItems = new List(); + foreach (IncludeGraph.Item item in graphItems) + { + if (item == includingFile) + continue; + + leafItems.Add(new FolderIncludeTreeViewItem_Leaf(item)); + } + + // Group by folder. + if (leafItems.Count > 0) + { + leafItems.Sort((x, y) => x.ParentFolder.CompareTo(y.ParentFolder)); + + var root = new FolderIncludeTreeViewItem_Folder("", 0); + GroupIncludeRecursively(root, leafItems, 0, leafItems.Count, 0); + rootChildren.AddRange(root.ChildrenList); + } + } + + private string GetNextPathPrefix(string path, int begin) + { + int nextSlash = begin; + while (path.Length > nextSlash && path[nextSlash] != Path.DirectorySeparatorChar) + ++nextSlash; + return path.Substring(0, nextSlash); + } + + private string LargestCommonFolderPrefixInRange(List allLeafItems, int begin, int end, string commonPrefix) + { + string folderBegin = allLeafItems[begin].ParentFolder; + string folderEnd = allLeafItems[end-1].ParentFolder; + + string prefixCandidate = commonPrefix; + string previousPrefix = null; + do + { + if (folderBegin.Length == prefixCandidate.Length) + return prefixCandidate; + + previousPrefix = prefixCandidate; + prefixCandidate = GetNextPathPrefix(folderBegin, previousPrefix.Length + 1); + + } while (folderEnd.StartsWith(prefixCandidate)); + + return previousPrefix; + } + + private void GroupIncludeRecursively(FolderIncludeTreeViewItem_Folder parentFolder, List allLeafItems, int begin, int end, int commonPrefixLength) + { + System.Diagnostics.Debug.Assert(begin < end); + System.Diagnostics.Debug.Assert(allLeafItems.Count >= end); + + // Look through the sorted subsection of folders and find ranges where the prefix changes. + while(begin < end) + { + // New subgroup to look at! + string currentPrefix = GetNextPathPrefix(allLeafItems[begin].ParentFolder, commonPrefixLength + 1); + + // Find end of the rest of the group and expand recurively. + for (int i = begin; i <= end; ++i) + { + if (i == end || !allLeafItems[i].ParentFolder.StartsWith(currentPrefix)) + { + // Find maximal prefix of this group. + string largestPrefix = LargestCommonFolderPrefixInRange(allLeafItems, begin, i, currentPrefix); + var newGroup = new FolderIncludeTreeViewItem_Folder(largestPrefix, commonPrefixLength); + parentFolder.ChildrenList.Add(newGroup); + + // If there are any direct children, they will be first due to sorting. Add them to the new group and ignore this part of the range. + while (allLeafItems[begin].ParentFolder.Length == largestPrefix.Length) + { + newGroup.ChildrenList.Add(allLeafItems[begin]); + ++begin; + if (begin == i) + break; + } + + // What's left is non-direct children (== folders!) that we need to handle recursively. + int numFoldersInGroup = i - begin; + if (numFoldersInGroup > 0) + { + GroupIncludeRecursively(newGroup, allLeafItems, begin, i, largestPrefix.Length); + } + + // Next group starts at this element. + begin = i; + break; + } + } + } + } + + public override Task NavigateToInclude() + { + return Task.CompletedTask; + } + } + + public class FolderIncludeTreeViewItem_Folder : IncludeTreeViewItem + { + public override IReadOnlyList Children => ChildrenList; + public List ChildrenList { get; private set; } = new List(); + + public const string UnresolvedFolderName = ""; + + public FolderIncludeTreeViewItem_Folder(string largestPrefix, int commonPrefixLength) + { + AbsoluteFilename = largestPrefix; + + largestPrefix.Substring(commonPrefixLength); + + if (largestPrefix != UnresolvedFolderName) + { + var stringBuilder = new StringBuilder(largestPrefix); + stringBuilder.Remove(0, commonPrefixLength); + stringBuilder.Append(Path.DirectorySeparatorChar); + if (stringBuilder[0] == Path.DirectorySeparatorChar) + stringBuilder.Remove(0, 1); + + Name = stringBuilder.ToString(); + } + else + { + Name = largestPrefix; + } + } + + public override Task NavigateToInclude() + { + // todo? + return Task.CompletedTask; + } + } + + public class FolderIncludeTreeViewItem_Leaf : IncludeTreeViewItem + { + public override IReadOnlyList Children => emptyList; + + /// + /// Parent folder of this leaf. Needed during build-up. + /// + public string ParentFolder { get; private set; } + + public FolderIncludeTreeViewItem_Leaf(IncludeGraph.Item item) + { + try + { + Name = Path.GetFileName(item.AbsoluteFilename); + } + catch + { + Name = item?.FormattedName; + } + AbsoluteFilename = item?.AbsoluteFilename; + + if (string.IsNullOrWhiteSpace(AbsoluteFilename) || !Path.IsPathRooted(AbsoluteFilename)) + ParentFolder = FolderIncludeTreeViewItem_Folder.UnresolvedFolderName; + else + ParentFolder = Path.GetDirectoryName(AbsoluteFilename); + } + + public override async Task NavigateToInclude() + { + if (AbsoluteFilename != null && Path.IsPathRooted(AbsoluteFilename)) + { + await Microsoft.VisualStudio.Shell.ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var fileWindow = VSUtils.OpenFileAndShowDocument(AbsoluteFilename); + } + } + } +} diff --git a/IncludeToolboxShared/Graph/IncludeGraph.cs b/IncludeToolboxShared/Graph/IncludeGraph.cs index e2673be..0db3cf4 100644 --- a/IncludeToolboxShared/Graph/IncludeGraph.cs +++ b/IncludeToolboxShared/Graph/IncludeGraph.cs @@ -1,91 +1,102 @@ -using IncludeToolbox.GraphWindow; -using Microsoft.VisualStudio.PlatformUI; +using Community.VisualStudio.Toolkit; +using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; +using Path = System.IO.Path; -namespace IncludeToolbox.Graph +namespace IncludeToolbox { - /// - /// Graph of files including files. - /// - public class IncludeGraph + public interface IGraphModel { - public struct Include - { - /// - /// Absolute path to the file that includes another file. - /// - /// May be null, signaling that the include line could not be resolved. - public GraphItem IncludedFile; - - /// - /// The original include line in sourceFile. - /// - /// Depending on the graph generation algorithm, this may be null. - public Formatter.IncludeLineInfo IncludeLine; - } + public Task TryEmplaceAsync(string absolute_filename, string name); + } - public class GraphItem + public class IncludeGraph : IGraphModel + { + public class Item { - public GraphItem(string absoluteFilename) + public Item(string absolute, string formatted, Include[] includes) { - AbsoluteFilename = absoluteFilename; - FormattedName = absoluteFilename; - Includes = new List(); + AbsoluteFilename = absolute; + FormattedName = formatted; + Includes = includes; } - /// - /// Absolute path to the file that includes the other files. - /// - /// - /// If an absolute filename can't be provided (e.g. due to resolve failure), this can be any kind of unique file identifier. - /// This is also used as key in the graph item dictionary. - /// public string AbsoluteFilename { get; private set; } - - /// - /// A formatted name that can be set from the outside. Is by default the same as AbsoluteFilename. - /// public string FormattedName { get; set; } - /// - /// List of all includes of this file. - /// - public List Includes { get; private set; } + public Include[] Includes { get; private set; } } + public async Task InitializeAsync(string filename) + { + graphItems = new(); + return await TryEmplaceAsync(filename, Path.GetFileNameWithoutExtension(filename)); + } - public IReadOnlyCollection GraphItems => graphItems.Values; - /// - /// Map of all files that the graph reaches. - /// Use CreateOrAddItem to populate it. - /// - private Dictionary graphItems = new Dictionary(); + public async Task InitializeAsync(DocumentView document) + { + graphItems = new(); + return await TryEmplaceAsync(document); + } + public async Task TryEmplaceAsync(DocumentView document) + { + var absolute_filename = document.FilePath; + bool is_new = !graphItems.TryGetValue(absolute_filename, out Item outItem); + if (!is_new) return outItem; - /// - /// Retrieves item from a given identifying absolute filename. - /// - /// - /// Filename of an include, may be relative. Will be normalized internally. - /// If an absolute filename can't be provided (e.g. due to resolve failure), this can be any kind of unique file identifier. - /// - public GraphItem CreateOrGetItem(string filename, out bool isNew) + outItem = await ParseFileAsync(document); + graphItems.Add(absolute_filename, outItem); + return outItem; + } + private async Task ParseFileAsync(DocumentView document) { - filename = Utils.GetExactPathName(filename); - return CreateOrGetItem_AbsoluteNormalizedPath(filename, out isNew); + var incs = await VCUtil.GetIncludeDirsAsync(); + var path = document.FilePath; + var doc_folder = Path.GetDirectoryName(path); + + var inc_arr = new string[] { + Microsoft.VisualStudio.PlatformUI.PathUtil.Normalize(doc_folder) + + Path.DirectorySeparatorChar } + .Concat(incs).ToArray(); + + var text = document.TextBuffer.CurrentSnapshot.GetText(); + var includes = Parser.ParseInclues(text.AsSpan()); + + return new Item(path, Path.GetFileName(path), + includes.Select(s => new Include(s, inc_arr)).ToArray()); } - public GraphItem CreateOrGetItem_AbsoluteNormalizedPath(string normalizedAbsoluteFilename, out bool isNew) + + public async Task TryEmplaceAsync(string absolute_filename, string name) { - GraphItem outItem; - isNew = !graphItems.TryGetValue(normalizedAbsoluteFilename, out outItem); - if (isNew) - { - outItem = new GraphItem(normalizedAbsoluteFilename); - graphItems.Add(normalizedAbsoluteFilename, outItem); - } + bool is_new = !graphItems.TryGetValue(absolute_filename, out Item outItem); + if (!is_new) return outItem; + + outItem = await ParseFileAsync(absolute_filename, name); + graphItems.Add(absolute_filename, outItem); return outItem; } + + private async Task ParseFileAsync(string absolute_filename, string name) + { + var doc = await VS.Documents.GetDocumentViewAsync(absolute_filename); + doc ??= await VS.Documents.OpenViaProjectAsync(absolute_filename); + + var incs = await VCUtil.GetIncludeDirsAsync(); + var doc_folder = Path.GetDirectoryName(absolute_filename); + + var inc_arr = new string[] { + Microsoft.VisualStudio.PlatformUI.PathUtil.Normalize(doc_folder) + + Path.DirectorySeparatorChar } + .Concat(incs).ToArray(); + + var text = doc.TextBuffer.CurrentSnapshot.GetText(); + return new Item(absolute_filename, name, Parser.ParseInclues(text.AsSpan()).Select(s=>new Include(s, inc_arr)).ToArray()); + } + + private Dictionary graphItems = new(); } } diff --git a/IncludeToolboxShared/Graph/CompilationBasedGraphParser.cs b/IncludeToolboxShared/GraphEx/CompilationBasedGraphParser.cs similarity index 100% rename from IncludeToolboxShared/Graph/CompilationBasedGraphParser.cs rename to IncludeToolboxShared/GraphEx/CompilationBasedGraphParser.cs diff --git a/IncludeToolboxShared/Graph/CustomGraphParser.cs b/IncludeToolboxShared/GraphEx/CustomGraphParser.cs similarity index 100% rename from IncludeToolboxShared/Graph/CustomGraphParser.cs rename to IncludeToolboxShared/GraphEx/CustomGraphParser.cs diff --git a/IncludeToolboxShared/Graph/DGMLGraph.cs b/IncludeToolboxShared/GraphEx/DGMLGraph.cs similarity index 100% rename from IncludeToolboxShared/Graph/DGMLGraph.cs rename to IncludeToolboxShared/GraphEx/DGMLGraph.cs diff --git a/IncludeToolboxShared/GraphEx/IncludeGraph.cs b/IncludeToolboxShared/GraphEx/IncludeGraph.cs new file mode 100644 index 0000000..e2673be --- /dev/null +++ b/IncludeToolboxShared/GraphEx/IncludeGraph.cs @@ -0,0 +1,91 @@ +using IncludeToolbox.GraphWindow; +using Microsoft.VisualStudio.PlatformUI; +using System.Collections.Generic; +using System.Linq; + +namespace IncludeToolbox.Graph +{ + /// + /// Graph of files including files. + /// + public class IncludeGraph + { + public struct Include + { + /// + /// Absolute path to the file that includes another file. + /// + /// May be null, signaling that the include line could not be resolved. + public GraphItem IncludedFile; + + /// + /// The original include line in sourceFile. + /// + /// Depending on the graph generation algorithm, this may be null. + public Formatter.IncludeLineInfo IncludeLine; + } + + public class GraphItem + { + public GraphItem(string absoluteFilename) + { + AbsoluteFilename = absoluteFilename; + FormattedName = absoluteFilename; + Includes = new List(); + } + + /// + /// Absolute path to the file that includes the other files. + /// + /// + /// If an absolute filename can't be provided (e.g. due to resolve failure), this can be any kind of unique file identifier. + /// This is also used as key in the graph item dictionary. + /// + public string AbsoluteFilename { get; private set; } + + /// + /// A formatted name that can be set from the outside. Is by default the same as AbsoluteFilename. + /// + public string FormattedName { get; set; } + + /// + /// List of all includes of this file. + /// + public List Includes { get; private set; } + } + + + public IReadOnlyCollection GraphItems => graphItems.Values; + + /// + /// Map of all files that the graph reaches. + /// Use CreateOrAddItem to populate it. + /// + private Dictionary graphItems = new Dictionary(); + + /// + /// Retrieves item from a given identifying absolute filename. + /// + /// + /// Filename of an include, may be relative. Will be normalized internally. + /// If an absolute filename can't be provided (e.g. due to resolve failure), this can be any kind of unique file identifier. + /// + public GraphItem CreateOrGetItem(string filename, out bool isNew) + { + filename = Utils.GetExactPathName(filename); + return CreateOrGetItem_AbsoluteNormalizedPath(filename, out isNew); + } + + public GraphItem CreateOrGetItem_AbsoluteNormalizedPath(string normalizedAbsoluteFilename, out bool isNew) + { + GraphItem outItem; + isNew = !graphItems.TryGetValue(normalizedAbsoluteFilename, out outItem); + if (isNew) + { + outItem = new GraphItem(normalizedAbsoluteFilename); + graphItems.Add(normalizedAbsoluteFilename, outItem); + } + return outItem; + } + } +} diff --git a/IncludeToolboxShared/Graph/IncludeGraphToDGML.cs b/IncludeToolboxShared/GraphEx/IncludeGraphToDGML.cs similarity index 100% rename from IncludeToolboxShared/Graph/IncludeGraphToDGML.cs rename to IncludeToolboxShared/GraphEx/IncludeGraphToDGML.cs diff --git a/IncludeToolboxShared/IncludeGraphViewModel.cs b/IncludeToolboxShared/IncludeGraphViewModel.cs new file mode 100644 index 0000000..f214e78 --- /dev/null +++ b/IncludeToolboxShared/IncludeGraphViewModel.cs @@ -0,0 +1,231 @@ +using IncludeToolbox.Formatter; +using IncludeToolbox.Graph; +using Microsoft.VisualStudio.PlatformUI; +using Microsoft.VisualStudio.Shell; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox.GraphWindow +{ + public class IncludeGraphViewModel : PropertyChangedBase + { + public HierarchyIncludeTreeViewItem HierarchyIncludeTreeModel { get; set; } = new HierarchyIncludeTreeViewItem(new IncludeGraph.Include(), ""); + public FolderIncludeTreeViewItem_Root FolderGroupedIncludeTreeModel { get; set; } = new FolderIncludeTreeViewItem_Root(null, null); + + public IncludeGraph Graph { get; private set; } + + + public enum RefreshMode + { + DirectParsing, + ShowIncludes, + } + + public static readonly string[] RefreshModeNames = new string[] { "Direct Parsing", "Compile /showIncludes" }; + + public RefreshMode ActiveRefreshMode + { + get => activeRefreshMode; + set + { + if (activeRefreshMode != value) + { + activeRefreshMode = value; + OnNotifyPropertyChanged(); + QueueUpdatingRefreshStatus(); + } + } + } + RefreshMode activeRefreshMode = RefreshMode.DirectParsing; + + public IEnumerable PossibleRefreshModes => Enum.GetValues(typeof(RefreshMode)).Cast(); + + public bool CanRefresh + { + get => canRefresh; + private set { canRefresh = value; OnNotifyPropertyChanged(); } + } + private bool canRefresh = false; + + public string RefreshTooltip + { + get => refreshTooltip; + set { refreshTooltip = value; OnNotifyPropertyChanged(); } + } + private string refreshTooltip = ""; + + public bool RefreshInProgress + { + get => refreshInProgress; + private set + { + refreshInProgress = value; + QueueUpdatingRefreshStatus(); + OnNotifyPropertyChanged(); + OnNotifyPropertyChanged(nameof(CanSave)); + } + } + private bool refreshInProgress = false; + + public string GraphRootFilename + { + get => graphRootFilename; + private set { graphRootFilename = value; OnNotifyPropertyChanged(); } + } + private string graphRootFilename = ""; + + public int NumIncludes + { + get => (Graph?.GraphItems.Count ?? 1) - 1; + } + + public bool CanSave + { + get => !refreshInProgress && Graph != null && Graph.GraphItems.Count > 0; + } + + // Need to keep these guys alive. + private EnvDTE.WindowEvents windowEvents; + + public IncludeGraphViewModel() + { + ThreadHelper.ThrowIfNotOnUIThread(); + + // UI update on dte events. + var dte = VSUtils.GetDTE(); + if (dte != null) + { + windowEvents = dte.Events.WindowEvents; + windowEvents.WindowActivated += (x, y) => QueueUpdatingRefreshStatus(); + } + + QueueUpdatingRefreshStatus(); + } + + private void QueueUpdatingRefreshStatus() + { + _ = Task.Run(async () => + { + var currentDocument = VSUtils.GetDTE()?.ActiveDocument; + + if (RefreshInProgress) + { + CanRefresh = false; + RefreshTooltip = "Refresh in progress"; + } + // Limiting to C++ document is a bit harsh though for the general case as we might not have this information depending on the project type. + // This is why we just check for "having a document" here for now. + else if (currentDocument == null) + { + CanRefresh = false; + RefreshTooltip = "No open document"; + } + else + { + if (activeRefreshMode == RefreshMode.ShowIncludes) + { + var canPerformShowIncludeCompilation = await CompilationBasedGraphParser.CanPerformShowIncludeCompilation(currentDocument); + CanRefresh = canPerformShowIncludeCompilation.Result; + RefreshTooltip = canPerformShowIncludeCompilation.Reason; + } + else + { + CanRefresh = true; + RefreshTooltip = null; + } + } + }); + } + + public async Task RefreshIncludeGraph() + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + var currentDocument = VSUtils.GetDTE()?.ActiveDocument; + GraphRootFilename = currentDocument.Name ?? ""; + if (currentDocument == null) + return; + + var newGraph = new IncludeGraph(); + RefreshInProgress = true; + + try + { + switch (activeRefreshMode) + { + case RefreshMode.ShowIncludes: + if (await newGraph.AddIncludesRecursively_ShowIncludesCompilation(currentDocument, OnNewTreeComputed)) + { + ResetIncludeTreeModel(null); + } + break; + + case RefreshMode.DirectParsing: + ResetIncludeTreeModel(null); + var settings = (ViewerOptionsPage)IncludeToolboxPackage.Instance.GetDialogPage(typeof(ViewerOptionsPage)); + var includeDirectories = VSUtils.GetProjectIncludeDirectories(currentDocument.ProjectItem.ContainingProject); + var uiThreadDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher; + await Task.Run( + async () => + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + newGraph.AddIncludesRecursively_ManualParsing(currentDocument.FullName, includeDirectories, settings.NoParsePaths); + await OnNewTreeComputed(newGraph, currentDocument, true); + }); + break; + + default: + throw new NotImplementedException(); + } + } + catch(Exception e) + { + Output.Instance.WriteLine("Unexpected error when refreshing Include Graph: {0}", e); + await OnNewTreeComputed(newGraph, currentDocument, false); + } + } + + private void ResetIncludeTreeModel(IncludeGraph.Item root) + { + HierarchyIncludeTreeModel.Reset(new IncludeGraph.Include() { IncludedFile = root }, ""); + OnNotifyPropertyChanged(nameof(HierarchyIncludeTreeModel)); + + FolderGroupedIncludeTreeModel.Reset(Graph?.GraphItems, root); + OnNotifyPropertyChanged(nameof(FolderGroupedIncludeTreeModel)); + + OnNotifyPropertyChanged(nameof(CanSave)); + } + + /// + /// Should be called after a tree was computed. Refreshes tree model. + /// + /// The include tree + /// This can be different from the active document at the time the refresh button was clicked. + /// Wheather the tree was created successfully + private async Task OnNewTreeComputed(IncludeGraph graph, EnvDTE.Document documentTreeComputedFor, bool success) + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + + RefreshInProgress = false; + + if (success) + { + this.Graph = graph; + + var includeDirectories = VSUtils.GetProjectIncludeDirectories(documentTreeComputedFor.ProjectItem.ContainingProject); + includeDirectories.Insert(0, PathUtil.Normalize(documentTreeComputedFor.Path) + Path.DirectorySeparatorChar); + + foreach (var item in Graph.GraphItems) + item.FormattedName = IncludeFormatter.FormatPath(item.AbsoluteFilename, FormatterOptionsPage.PathMode.Shortest_AvoidUpSteps, includeDirectories); + + ResetIncludeTreeModel(Graph.CreateOrGetItem(documentTreeComputedFor.FullName, out _)); + } + + OnNotifyPropertyChanged(nameof(NumIncludes)); + } + } +} diff --git a/IncludeToolboxShared/IncludeToolboxPackage.cs b/IncludeToolboxShared/IncludeToolboxPackage.cs index ca51deb..ecb2088 100644 --- a/IncludeToolboxShared/IncludeToolboxPackage.cs +++ b/IncludeToolboxShared/IncludeToolboxPackage.cs @@ -13,6 +13,8 @@ namespace IncludeToolbox [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(PackageGuids.IncludeToolboxString)] [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionOpening_string, PackageAutoLoadFlags.BackgroundLoad)] + [ProvideToolWindow(typeof(IncludeGraphToolWindow.Pane), Style = VsDockStyle.Float)] + [ProvideToolWindowVisibility(typeof(IncludeGraphToolWindow.Pane), VSConstants.UICONTEXT.SolutionExists_string, Name = "Include Graph")] [ProvideOptionPage(typeof(OptionsProvider.FormatterOptionsPage), "Include Toolbox", "Include Format", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.TrialAndErrorRemovalOptionsPage), "Include Toolbox", "Trial and Error", 0, 0, true, SupportsProfiles = true)] [ProvideOptionPage(typeof(OptionsProvider.MapperOptionsPage), "Include Toolbox", "Mapper", 0, 0, true, SupportsProfiles = true)] @@ -22,7 +24,7 @@ namespace IncludeToolbox expression: "one & two", termNames: new[] { "one", "two" }, termValues: new[] { @"ActiveProjectCapability:VisualC", @"HierSingleSelectionName:.(h|hpp|hxx|cpp|c|cxx)$" } -)] +)] [ProvideUIContextRule(PackageGuids.GHeaderOnlyString, "UIOnlyHead", expression: "one & two", termNames: new[] { "one", "two" }, @@ -34,6 +36,7 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke { await this.RegisterCommandsAsync(); await Output.InitializeAsync(); + this.RegisterToolWindows(); } } } diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index 8eaa7de..a3a4edc 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -10,15 +10,18 @@ + - + + + @@ -27,6 +30,12 @@ + + + + + IncludeGraphControl.xaml + @@ -35,10 +44,21 @@ + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + \ No newline at end of file diff --git a/IncludeToolboxShared/Options/ViewerOptionsPage.cs b/IncludeToolboxShared/Options/ViewerOptionsPage.cs index b58c548..55d791b 100644 --- a/IncludeToolboxShared/Options/ViewerOptionsPage.cs +++ b/IncludeToolboxShared/Options/ViewerOptionsPage.cs @@ -12,21 +12,21 @@ public class ViewerOptionsPage : BaseOptionPage { } public class ViewerOptions : BaseOptionModel { - //[Category("Include Graph Parsing")] - //[DisplayName("Graph Endpoint Directories")] - //[Description("List of absolute directory paths. For any include below these paths, the graph parsing will stop.")] - //public string[] NoParsePaths - //{ - // get { return noParsePaths; } - // set - // { - // // It is critical that the paths are "exact" since we want to use them as with string comparison. - // noParsePaths = value; - // for (int i = 0; i < noParsePaths.Length; ++i) - // noParsePaths[i] = Utils.GetExactPathName(noParsePaths[i]); - // } - //} - //private string[] noParsePaths; + [Category("Include Graph Parsing")] + [DisplayName("Graph Endpoint Directories")] + [Description("List of absolute directory paths. For any include below these paths, the graph parsing will stop.")] + public string[] NoParsePaths + { + get { return noParsePaths; } + set + { + // It is critical that the paths are "exact" since we want to use them as with string comparison. + noParsePaths = value; + for (int i = 0; i < noParsePaths.Length; ++i) + noParsePaths[i] = Utils.GetExactPathName(noParsePaths[i]); + } + } + private string[] noParsePaths = new string[0]; [Category("Include Graph DGML")] [DisplayName("Create Group Nodes by Folders")] diff --git a/IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml b/IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml new file mode 100644 index 0000000..d75a434 --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml.cs b/IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml.cs new file mode 100644 index 0000000..d9fc0c5 --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/View/IncludeGraphControl.xaml.cs @@ -0,0 +1,38 @@ +using Community.VisualStudio.Toolkit; +using IncludeToolbox.Commands; +using Microsoft.VisualStudio.Shell; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; + +// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 + +namespace IncludeToolbox +{ + /// + /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class IncludeGraphControl : UserControl + { + public IncludeGraphControl() + { + InitializeComponent(); + DataContext = new IncludeGraphViewModel(); + } + + private void OnIncludeTreeItemMouseDown(object sender, MouseButtonEventArgs e) + { + if (e.LeftButton == MouseButtonState.Pressed && e.ClickCount == 2) + { + if (sender is FrameworkElement frameworkElement) + { + if (frameworkElement.DataContext is IncludeTreeViewItem treeItem) // Arguably a bit hacky to go over the DataContext, but it seems to be a good direct route. + { + treeItem.NavigateToIncludeAsync().FireAndForget(); + } + } + } + } + } +} diff --git a/IncludeToolboxShared/ToolWindows/View/IncludeGraphToolWindow.cs b/IncludeToolboxShared/ToolWindows/View/IncludeGraphToolWindow.cs new file mode 100644 index 0000000..98c7df6 --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/View/IncludeGraphToolWindow.cs @@ -0,0 +1,33 @@ +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Imaging; +using Microsoft.VisualStudio.Shell; +using System; +using System.Runtime.InteropServices; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox +{ + public class IncludeGraphToolWindow : BaseToolWindow + { + public override string GetTitle(int toolWindowId) => "Include Graph"; + + public override Type PaneType => typeof(Pane); + + public override Task CreateAsync(int toolWindowId, CancellationToken cancellationToken) + { + return Task.FromResult(new IncludeGraphControl()); + } + + [Guid("dc2e50f8-d627-4f55-9095-5d783ad9d475")] + internal class Pane : ToolWindowPane + { + public Pane() + { + BitmapImageMoniker = KnownMonikers.ToolWindow; + } + } + } +} \ No newline at end of file diff --git a/IncludeToolboxShared/ToolWindows/View/ToolWindowStyle.xaml b/IncludeToolboxShared/ToolWindows/View/ToolWindowStyle.xaml new file mode 100644 index 0000000..aa02c18 --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/View/ToolWindowStyle.xaml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IncludeToolboxShared/ToolWindows/ViewModel/HierarchyIncludeTreeViewItem.cs b/IncludeToolboxShared/ToolWindows/ViewModel/HierarchyIncludeTreeViewItem.cs new file mode 100644 index 0000000..9c38125 --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/ViewModel/HierarchyIncludeTreeViewItem.cs @@ -0,0 +1,109 @@ +using Community.VisualStudio.Toolkit; +using System.Collections.Generic; +using Path = System.IO.Path; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox +{ + public class HierarchyIncludeTree + { + protected IReadOnlyList cachedItems; + public HierarchyIncludeTree() + { + cachedItems = empty; + } + public HierarchyIncludeTree(Include[] root_inc, IGraphModel model_ref, string root_file) + { + var cachedItemsList = new List(); + + foreach (var include in root_inc) + cachedItemsList.Add(new HierarchyIncludeTreeViewItem(include, root_file, model_ref)); + cachedItems = cachedItemsList; + } + + public IReadOnlyList Children => cachedItems; + private static readonly List empty = new(); + } + + + public class HierarchyIncludeTreeViewItem : IncludeTreeViewItem + { + private string ParentFilename = null; + private IGraphModel model_ref; + private int line = 0; + + [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD002:Avoid problematic synchronous waits", Justification = "Synchronous property")] + public override IReadOnlyList Children + { + get + { + if (cachedItems == null) + GenerateChildItemsAsync().Wait(); + return cachedItems; + } + } + protected IReadOnlyList cachedItems; + + public HierarchyIncludeTreeViewItem(Include include, string ParentFilename, IGraphModel model_ref) + { + Reset(include, ParentFilename); + this.model_ref = model_ref; + } + private async Task GenerateChildItemsAsync() + { + if (AbsoluteFilename == Name) + return; + + var item = await model_ref.TryEmplaceAsync(AbsoluteFilename, Name); + var cachedItemsList = new List(); + foreach (var include in item.Includes) + cachedItemsList.Add(new HierarchyIncludeTreeViewItem(include, AbsoluteFilename, model_ref)); + cachedItems = cachedItemsList; + } + + public void Reset(Include include, string includingFileAbsoluteFilename) + { + line = include.Line; + cachedItems = null; + Name = include.File; + AbsoluteFilename = include.AbsolutePath; + ParentFilename = includingFileAbsoluteFilename; + } + + public override async Task NavigateToIncludeAsync() + { + // Want to navigate to origin of this include, not target if possible + if (ParentFilename == null && !Path.IsPathRooted(ParentFilename)) return; + var doc = await VS.Documents.OpenAsync(ParentFilename); + if (doc == null) return; + + var lines = doc.TextView.TextViewLines; + if(line >= lines.Count) return; + + var sel_line = lines[line]; + doc.TextView.ViewScroller.EnsureSpanVisible(sel_line.Extent); + doc.TextView.Caret.MoveTo(sel_line); + + + //{ + + // var fileWindow = VSUtils.OpenFileAndShowDocument(ParentFilename); + + // // Try to move to carret if possible. + // if (include.IncludeLine != null) + // { + // var textDocument = fileWindow.Document.Object() as EnvDTE.TextDocument; + + // if (textDocument != null) + // { + // var includeLinePoint = textDocument.StartPoint.CreateEditPoint(); + // includeLinePoint.MoveToLineAndOffset(include.IncludeLine.LineNumber+1, 1); + // includeLinePoint.TryToShow(); + + // textDocument.Selection.MoveToPoint(includeLinePoint); + // } + // } + //} + } + } +} diff --git a/IncludeToolboxShared/ToolWindows/ViewModel/IncludeGraphViewModel.cs b/IncludeToolboxShared/ToolWindows/ViewModel/IncludeGraphViewModel.cs new file mode 100644 index 0000000..ce5d3a3 --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/ViewModel/IncludeGraphViewModel.cs @@ -0,0 +1,34 @@ +using Community.VisualStudio.Toolkit; +using System.Threading.Tasks; + +namespace IncludeToolbox +{ + public class IncludeGraphViewModel : PropertyNotify + { + public IncludeGraphViewModel() { } + + + private IncludeGraph model = new(); + private HierarchyIncludeTree view = new(); + private string root_file = ""; + private int incs = 0; + + public HierarchyIncludeTree HierarchyIncludeTreeModel { get => view; private set => SetProperty(ref view, value); } + + + public string RootFilename { get => root_file; set { SetProperty(ref root_file, value); } } + public int NumIncludes + { + get => incs; + set => SetProperty(ref incs, value); + } + + public async Task RecalculateForAsync(DocumentView document) + { + var root = await model.InitializeAsync(document); + HierarchyIncludeTreeModel = new(root.Includes, model, root.AbsoluteFilename); + RootFilename = root.FormattedName; + NumIncludes = root.Includes.Length; + } + } +} \ No newline at end of file diff --git a/IncludeToolboxShared/ToolWindows/ViewModel/IncludeTreeViewItem.cs b/IncludeToolboxShared/ToolWindows/ViewModel/IncludeTreeViewItem.cs new file mode 100644 index 0000000..ef6afed --- /dev/null +++ b/IncludeToolboxShared/ToolWindows/ViewModel/IncludeTreeViewItem.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace IncludeToolbox +{ + public abstract class IncludeTreeViewItem : PropertyNotify + { + static protected IReadOnlyList emptyList = new IncludeTreeViewItem[0]; + + string name = ""; + string abs_name = ""; + public string Name { get => name; protected set => SetProperty(ref name, value); } + public string AbsoluteFilename { get => abs_name; protected set => SetProperty(ref abs_name, value); } + public abstract IReadOnlyList Children { get; } + + abstract public Task NavigateToIncludeAsync(); + } +} diff --git a/IncludeToolboxShared/Util/ParserStructures.cs b/IncludeToolboxShared/Util/ParserStructures.cs index 79126d0..90ae9fa 100644 --- a/IncludeToolboxShared/Util/ParserStructures.cs +++ b/IncludeToolboxShared/Util/ParserStructures.cs @@ -118,7 +118,7 @@ public void ToBackward() FullFile.Replace('/', '\\'); } - public string Resolve(IEnumerable includeDirectories) + public string Resolve(IEnumerable includeDirectories, bool suppress = false) { foreach (string dir in includeDirectories) { @@ -127,7 +127,8 @@ public string Resolve(IEnumerable includeDirectories) return Utils.GetExactPathName(candidate); } - Output.WriteLine($"Unable to resolve include: '{Content}'"); + if (!suppress) + Output.WriteLine($"Unable to resolve include: '{Content}'"); return ""; } @@ -159,6 +160,38 @@ public override int GetHashCode() } } + public struct Include + { + public Include(IncludeLine line, string[] includeDirectories) + { + file = line.Content; + absolute_path = Resolve(includeDirectories); + this.line = line.line; + } + + readonly string file; + readonly string absolute_path = ""; + readonly int line; + + public string File => file; + public string AbsolutePath => absolute_path; + public int Line => line; + + public string Resolve(string[] includeDirectories) + { + if (!string.IsNullOrEmpty(absolute_path)) + return absolute_path; + + foreach (string dir in includeDirectories) + { + string candidate = Path.Combine(dir, file); + if (System.IO.File.Exists(candidate)) + return candidate; + } + return file; + } + } + public enum NewlineChar { N, diff --git a/IncludeToolboxShared/Util/PropertyNotify.cs b/IncludeToolboxShared/Util/PropertyNotify.cs new file mode 100644 index 0000000..a788027 --- /dev/null +++ b/IncludeToolboxShared/Util/PropertyNotify.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Text; + +namespace IncludeToolbox +{ + public class PropertyNotify : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + protected bool SetProperty(ref T field, T newValue, [CallerMemberName] string propertyName = null) + { + if (!(Equals(field, newValue))) + { + field = (newValue); + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + return true; + } + + return false; + } + } +} diff --git a/README.md b/README.md index 6d9e6ec..781364d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Include Toolbox consists of 4 different tools. All of them are only applicable t ![](/art/itrial.png) **[Command]** Trial and Error Include Removal ![](/art/iwyu.png) **[Command]** [Include-What-You-Use](https://include-what-you-use.org/) Integration ![](/art/AddPageGuides.png) **[Command]** Mapper module for IWYU -![](/art/igraph.png)**[Tool Window]** ~~Include Graph~~ +![](/art/igraph.png)**[Tool Window]** Include Graph ## Links @@ -117,10 +117,18 @@ Mapper has one option, that specifies separator you would like to use, quotes or To specify relative index use *Relative File Prefix* option. e.g. C:\\users\\map\\a.h with prefix C:\\users will write to the final map. -## ~~Include Graph~~ +## Include Graph [beta] -Added option page. Soon. -Requires fixes. +![Include What You Use](/art/IncludeGraph.png) + +Partially restored functionality of include graph. The Graph window is controlled by the `Open in Include Graph` command. + +The command opens a window with lazy parsed #includes. The file names are expandable only if the file described is present in project directory or in any of the additional directories. + +Options are not working right now. DGML save command will be added in future releases. + +The graph is not stable, searching for bugs or inconsistensies. Issues pointing inconsistensies are welcome. + # FAQ: diff --git a/art/IncludeGraph.png b/art/IncludeGraph.png new file mode 100644 index 0000000000000000000000000000000000000000..9515b75f252b127859be24ddd0b638a237640f5e GIT binary patch literal 62073 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

%MM-h9@es&9tNzQQJQK`Ui0?tYR*c#

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 Date: Wed, 28 Sep 2022 18:54:55 +0200 Subject: [PATCH 75/86] [release] fix structs --- IncludeToolboxShared/Util/ParserStructures.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IncludeToolboxShared/Util/ParserStructures.cs b/IncludeToolboxShared/Util/ParserStructures.cs index 90ae9fa..6d6c7d7 100644 --- a/IncludeToolboxShared/Util/ParserStructures.cs +++ b/IncludeToolboxShared/Util/ParserStructures.cs @@ -164,14 +164,14 @@ public struct Include { public Include(IncludeLine line, string[] includeDirectories) { + this.line = line.line; file = line.Content; absolute_path = Resolve(includeDirectories); - this.line = line.line; } - readonly string file; + readonly string file = ""; readonly string absolute_path = ""; - readonly int line; + readonly int line = 0; public string File => file; public string AbsolutePath => absolute_path; From 17052c5e4e1e83c65c887e7cdfd68b8cbe68d3f0 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 29 Sep 2022 15:46:55 +0200 Subject: [PATCH 76/86] [release] added relative path extension --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- IncludeToolboxShared/Util/VCUtil.cs | 11 ++++++++--- README.md | 2 +- doc/changelog.md | 4 ++++ 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 0870076..4011fe7 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022"; public const string Language = "en-US"; - public const string Version = "3.2.54"; + public const string Version = "3.2.58"; public const string Author = "Wumpf"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 66d4264..f16f10d 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022 License.txt diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index a9ce7c0..39544cf 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.54"; + public const string Version = "3.2.59"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index dcf66e1..5caacdf 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs index 0990768..fc14f75 100644 --- a/IncludeToolboxShared/Util/VCUtil.cs +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -4,6 +4,7 @@ using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.VCProjectEngine; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading.Tasks; using static Microsoft.VisualStudio.VSConstants; @@ -66,15 +67,19 @@ internal static VCFileConfiguration GetVCFileConfig(VCProjectItem item) public static async Task> GetIncludeDirsAsync() { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - var proj = await (await VS.Solutions.GetActiveProjectAsync()).ToVCProjectAsync(); + var actproj = await VS.Solutions.GetActiveProjectAsync(); + var proj = await actproj.ToVCProjectAsync(); if (proj == null) { VS.MessageBox.ShowErrorAsync("IWYU Error:", "The project is not a Visual Studio C/C++ type.").FireAndForget(); return null; } + var dir = Path.GetDirectoryName(actproj.FullPath).Replace('\\', '/'); + var cfg = proj.ActiveConfiguration; var cl = cfg?.Rules; if (cl == null) { VS.MessageBox.ShowErrorAsync("IWYU Error:", "Failed to gather Compiler info.").FireAndForget(); return null; } var com = (IVCRulePropertyStorage2)cl.Item("CL"); - return com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories").Replace('\\','/') - .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)); + var dirs = com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories").Replace('\\','/') + .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)).Select(s=>Path.IsPathRooted(s)?s:Path.Combine(dir, s)); + return dirs; } public static async Task GetCommandLineAsync(bool rebuild) diff --git a/README.md b/README.md index 781364d..d3e4a22 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ To specify relative index use *Relative File Prefix* option. e.g. C:\\users\\map Partially restored functionality of include graph. The Graph window is controlled by the `Open in Include Graph` command. -The command opens a window with lazy parsed #includes. The file names are expandable only if the file described is present in project directory or in any of the additional directories. +The command opens a window with lazy parsed #includes. The file names are expandable only if the file described is present in project directory or in any of the additional directories. Graph includes can be navigated by double clicking the item in a graph. This will open the file which has that include line in it. Options are not working right now. DGML save command will be added in future releases. diff --git a/doc/changelog.md b/doc/changelog.md index 8390927..00fcce2 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,4 +1,8 @@ # Version History +* 3.2.59 + * Added a relative path merger for additional include directories. +* 3.2.58 + * Added an include graph. * 3.2.47 * Enabled Trial and Error Include Removal for header files. * 3.2.43 From c40d8e10a5c0b43b532763f60207e66e3640ab49 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Thu, 29 Sep 2022 15:47:36 +0200 Subject: [PATCH 77/86] [release] forgot to save --- IncludeToolbox2019/source.extension.cs | 2 +- .../source.extension.vsixmanifest | 2 +- .../source.extension.vsixmanifest | 40 +++++++++---------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 4011fe7..16364ef 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022"; public const string Language = "en-US"; - public const string Version = "3.2.58"; + public const string Version = "3.2.59"; public const string Author = "Wumpf"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index f16f10d..9118f51 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022 License.txt diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 5caacdf..0e737c1 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,23 +1,23 @@ - - - Include Toolbox 2022 - Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. - License.txt - Resources\IncludeFormatterPackage.png - Resources\IncludeFormatterPackage.png - Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding - - - - amd64 - - - - - - - - + + + Include Toolbox 2022 + Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. + License.txt + Resources\IncludeFormatterPackage.png + Resources\IncludeFormatterPackage.png + Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding + + + + amd64 + + + + + + + + From 2de2496b2a46ae9241d7f04638a4075942f982df Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 30 Sep 2022 12:35:33 +0200 Subject: [PATCH 78/86] [release] another attempt at publishing --- .github/workflows/main.yml | 26 ++++++------ IncludeToolbox2019/source.extension.cs | 4 +- .../source.extension.vsixmanifest | 4 +- IncludeToolbox2022/source.extension.cs | 4 +- .../source.extension.vsixmanifest | 40 +++++++++---------- 5 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3da8326..47039fe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -92,16 +92,16 @@ jobs: **/*.vsix # Doesn't work - #- name: Publish 2022 extension to Marketplace - # uses: cezarypiatek/VsixPublisherAction@0.2 - # with: - # extension-file: '${{ github.event.repository.name }}2022.vsix' - # publish-manifest-file: 'vs-publish.json' - # personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} - # - #- name: Publish 2019 extension to Marketplace - # uses: cezarypiatek/VsixPublisherAction@0.2 - # with: - # extension-file: '${{ github.event.repository.name }}2019.vsix' - # publish-manifest-file: 'vs-publish.json' - # personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} + - name: Publish 2022 extension to Marketplace + uses: cezarypiatek/VsixPublisherAction@0.2 + with: + extension-file: '${{ github.event.repository.name }}2022.vsix' + publish-manifest-file: 'vs-publish.json' + personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} + + - name: Publish 2019 extension to Marketplace + uses: cezarypiatek/VsixPublisherAction@0.2 + with: + extension-file: '${{ github.event.repository.name }}2019.vsix' + publish-manifest-file: 'vs-publish.json' + personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 16364ef..843e24c 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,8 +11,8 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022"; public const string Language = "en-US"; - public const string Version = "3.2.59"; + public const string Version = "3.2.60"; public const string Author = "Wumpf"; - public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; + public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding"; } } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 9118f51..0367da5 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,13 +1,13 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022 License.txt Resources\IncludeFormatterPackage.png Resources\IncludeFormatterPackage.png - Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding + Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 39544cf..e675eab 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,8 +11,8 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.59"; + public const string Version = "3.2.60"; public const string Author = "Agrael"; - public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding"; + public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding"; } } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 0e737c1..12bba70 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,23 +1,23 @@ - - - Include Toolbox 2022 - Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. - License.txt - Resources\IncludeFormatterPackage.png - Resources\IncludeFormatterPackage.png - Include;IWYU;Include Formatting;Include Sorting;#include;C++;C;Coding - - - - amd64 - - - - - - - - + + + Include Toolbox 2022 + Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. + License.txt + Resources\IncludeFormatterPackage.png + Resources\IncludeFormatterPackage.png + Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding + + + + amd64 + + + + + + + + From b1c77b9a4201628ea8578d33f9955c3dfb508f5e Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Tue, 4 Oct 2022 15:53:14 +0200 Subject: [PATCH 79/86] [release] CI/CD pipeline --- .github/workflows/main.yml | 5 +- .../Commands/TransitiveRemoval.cs | 21 ++++++++ .../IncludeToolboxShared.projitems | 2 + .../Options/TransitiveOptions.cs | 24 +++++++++ doc/changelog.md | 2 + vs-publish.json => vs-publish2019.json | 10 +++- vs-publish2022.json | 49 +++++++++++++++++++ 7 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 IncludeToolboxShared/Commands/TransitiveRemoval.cs create mode 100644 IncludeToolboxShared/Options/TransitiveOptions.cs rename vs-publish.json => vs-publish2019.json (82%) create mode 100644 vs-publish2022.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 47039fe..87d244f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -91,17 +91,16 @@ jobs: files: | **/*.vsix - # Doesn't work - name: Publish 2022 extension to Marketplace uses: cezarypiatek/VsixPublisherAction@0.2 with: extension-file: '${{ github.event.repository.name }}2022.vsix' - publish-manifest-file: 'vs-publish.json' + publish-manifest-file: 'vs-publish2022.json' personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} - name: Publish 2019 extension to Marketplace uses: cezarypiatek/VsixPublisherAction@0.2 with: extension-file: '${{ github.event.repository.name }}2019.vsix' - publish-manifest-file: 'vs-publish.json' + publish-manifest-file: 'vs-publish2019.json' personal-access-code: ${{ secrets.VS_PUBLISHER_ACCESS_TOKEN }} diff --git a/IncludeToolboxShared/Commands/TransitiveRemoval.cs b/IncludeToolboxShared/Commands/TransitiveRemoval.cs new file mode 100644 index 0000000..912cc4e --- /dev/null +++ b/IncludeToolboxShared/Commands/TransitiveRemoval.cs @@ -0,0 +1,21 @@ +using Community.VisualStudio.Toolkit; +using Microsoft.VisualStudio.Shell; +using Task = System.Threading.Tasks.Task; + +namespace IncludeToolbox.Commands +{ + //[Command(PackageIds.TransitiveRemovalId)] + internal class TransitiveRemoval : BaseCommand + { + protected override Task InitializeCompletedAsync() + { + Command.Supported = false; + return Task.CompletedTask; + } + + protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) + { + + } + } +} diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index a3a4edc..3586a55 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -16,11 +16,13 @@ + + diff --git a/IncludeToolboxShared/Options/TransitiveOptions.cs b/IncludeToolboxShared/Options/TransitiveOptions.cs new file mode 100644 index 0000000..7b5f1b0 --- /dev/null +++ b/IncludeToolboxShared/Options/TransitiveOptions.cs @@ -0,0 +1,24 @@ +using Community.VisualStudio.Toolkit; +using System.ComponentModel; +using System.Runtime.InteropServices; + +namespace IncludeToolbox +{ + internal partial class OptionsProvider + { + [ComVisible(true)] + public class TransitiveOptionsPage : BaseOptionPage { } + } + + public class TransitiveOptions : BaseOptionModel + { + [Category("Parsing")] + [DisplayName("Stable Directories")] + [Description("List of absolute directories, that are treated as stable and unchanged for a VS session. The files from those directories will be only parsed once.")] + public string[] StablePaths + { + get; + set; + } = new string[0]; + } +} diff --git a/doc/changelog.md b/doc/changelog.md index 00fcce2..809f90e 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,4 +1,6 @@ # Version History +* 3.2.62 + * Added automatic CI/CD with publishing to Marketplace. * 3.2.59 * Added a relative path merger for additional include directories. * 3.2.58 diff --git a/vs-publish.json b/vs-publish2019.json similarity index 82% rename from vs-publish.json rename to vs-publish2019.json index 06579b9..c1cc112 100644 --- a/vs-publish.json +++ b/vs-publish2019.json @@ -33,9 +33,17 @@ { "pathOnDisk": "art/iwyu.png", "targetPath": "art/iwyu.png" + }, + { + "pathOnDisk": "art/IncludeGraph.png", + "targetPath": "art/IncludeGraph.png" + }, + { + "pathOnDisk": "doc/changelog.md", + "targetPath": "doc/changelog.md" } ], "overview": "README.md", - "publisher": "Agrael", + "publisher": "Wumpf", "repo": "https://github.com/Agrael1/IncludeToolbox" } diff --git a/vs-publish2022.json b/vs-publish2022.json new file mode 100644 index 0000000..b2c9561 --- /dev/null +++ b/vs-publish2022.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json.schemastore.org/vsix-publish", + "categories": [ "other", "coding" ], + "identity": { + "internalName": "IncludeToolbox2022", + "tags": [ "C", "C++", "include", "iwyu", "formatting", "code", "include what you use"] + }, + "assetFiles": [ + { + "pathOnDisk": "art/AddPageGuides.png", + "targetPath": "art/AddPageGuides.png" + }, + { + "pathOnDisk": "art/iformat.png", + "targetPath": "art/iformat.png" + }, + { + "pathOnDisk": "art/igraph.png", + "targetPath": "art/igraph.png" + }, + { + "pathOnDisk": "art/includeformatter.gif", + "targetPath": "art/includeformatter.gif" + }, + { + "pathOnDisk": "art/itrial.png", + "targetPath": "art/itrial.png" + }, + { + "pathOnDisk": "art/iwyu.gif", + "targetPath": "art/iwyu.gif" + }, + { + "pathOnDisk": "art/iwyu.png", + "targetPath": "art/iwyu.png" + }, + { + "pathOnDisk": "art/IncludeGraph.png", + "targetPath": "art/IncludeGraph.png" + }, + { + "pathOnDisk": "doc/changelog.md", + "targetPath": "doc/changelog.md" + } + ], + "overview": "README.md", + "publisher": "Agrael", + "repo": "https://github.com/Agrael1/IncludeToolbox" +} From 6a4d0bcea23407faf13eb07bf2b105768cec1f23 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Tue, 4 Oct 2022 15:59:47 +0200 Subject: [PATCH 80/86] [release] filetypes --- vs-publish2019.json | 4 ---- vs-publish2022.json | 4 ---- 2 files changed, 8 deletions(-) diff --git a/vs-publish2019.json b/vs-publish2019.json index c1cc112..5fa0cd5 100644 --- a/vs-publish2019.json +++ b/vs-publish2019.json @@ -37,10 +37,6 @@ { "pathOnDisk": "art/IncludeGraph.png", "targetPath": "art/IncludeGraph.png" - }, - { - "pathOnDisk": "doc/changelog.md", - "targetPath": "doc/changelog.md" } ], "overview": "README.md", diff --git a/vs-publish2022.json b/vs-publish2022.json index b2c9561..5cf30cb 100644 --- a/vs-publish2022.json +++ b/vs-publish2022.json @@ -37,10 +37,6 @@ { "pathOnDisk": "art/IncludeGraph.png", "targetPath": "art/IncludeGraph.png" - }, - { - "pathOnDisk": "doc/changelog.md", - "targetPath": "doc/changelog.md" } ], "overview": "README.md", From 993fd670efd3fe626f5bcbfaffe1e5a4f287050d Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 2 Dec 2022 12:41:22 +0100 Subject: [PATCH 81/86] fixed UE NMake include format --- .../Commands/TransitiveRemoval.cs | 21 ---------------- .../IncludeToolboxShared.projitems | 2 -- .../Options/TransitiveOptions.cs | 24 ------------------- IncludeToolboxShared/Util/VCUtil.cs | 8 ++++++- 4 files changed, 7 insertions(+), 48 deletions(-) delete mode 100644 IncludeToolboxShared/Commands/TransitiveRemoval.cs delete mode 100644 IncludeToolboxShared/Options/TransitiveOptions.cs diff --git a/IncludeToolboxShared/Commands/TransitiveRemoval.cs b/IncludeToolboxShared/Commands/TransitiveRemoval.cs deleted file mode 100644 index 912cc4e..0000000 --- a/IncludeToolboxShared/Commands/TransitiveRemoval.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Community.VisualStudio.Toolkit; -using Microsoft.VisualStudio.Shell; -using Task = System.Threading.Tasks.Task; - -namespace IncludeToolbox.Commands -{ - //[Command(PackageIds.TransitiveRemovalId)] - internal class TransitiveRemoval : BaseCommand - { - protected override Task InitializeCompletedAsync() - { - Command.Supported = false; - return Task.CompletedTask; - } - - protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) - { - - } - } -} diff --git a/IncludeToolboxShared/IncludeToolboxShared.projitems b/IncludeToolboxShared/IncludeToolboxShared.projitems index 3586a55..a3a4edc 100644 --- a/IncludeToolboxShared/IncludeToolboxShared.projitems +++ b/IncludeToolboxShared/IncludeToolboxShared.projitems @@ -16,13 +16,11 @@ - - diff --git a/IncludeToolboxShared/Options/TransitiveOptions.cs b/IncludeToolboxShared/Options/TransitiveOptions.cs deleted file mode 100644 index 7b5f1b0..0000000 --- a/IncludeToolboxShared/Options/TransitiveOptions.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Community.VisualStudio.Toolkit; -using System.ComponentModel; -using System.Runtime.InteropServices; - -namespace IncludeToolbox -{ - internal partial class OptionsProvider - { - [ComVisible(true)] - public class TransitiveOptionsPage : BaseOptionPage { } - } - - public class TransitiveOptions : BaseOptionModel - { - [Category("Parsing")] - [DisplayName("Stable Directories")] - [Description("List of absolute directories, that are treated as stable and unchanged for a VS session. The files from those directories will be only parsed once.")] - public string[] StablePaths - { - get; - set; - } = new string[0]; - } -} diff --git a/IncludeToolboxShared/Util/VCUtil.cs b/IncludeToolboxShared/Util/VCUtil.cs index fc14f75..a49706f 100644 --- a/IncludeToolboxShared/Util/VCUtil.cs +++ b/IncludeToolboxShared/Util/VCUtil.cs @@ -76,8 +76,14 @@ public static async Task> GetIncludeDirsAsync() var cfg = proj.ActiveConfiguration; var cl = cfg?.Rules; if (cl == null) { VS.MessageBox.ShowErrorAsync("IWYU Error:", "Failed to gather Compiler info.").FireAndForget(); return null; } + + var com = (IVCRulePropertyStorage2)cl.Item("CL"); - var dirs = com.GetEvaluatedPropertyValue("AdditionalIncludeDirectories").Replace('\\','/') + + string property = com!=null? "AdditionalIncludeDirectories": "IncludePath"; + com ??= (IVCRulePropertyStorage2)cl.Item("ConfigurationDirectories"); + + var dirs = com.GetEvaluatedPropertyValue(property).Replace('\\','/') .Split(';').Where(s => !string.IsNullOrWhiteSpace(s)).Select(s=>Path.IsPathRooted(s)?s:Path.Combine(dir, s)); return dirs; } From 00af5363d2436b61ce6f3e34aa1c82be0947bcb7 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 2 Dec 2022 12:56:54 +0100 Subject: [PATCH 82/86] [release] fix for UE --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- doc/changelog.md | 2 ++ 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 843e24c..6b77587 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022"; public const string Language = "en-US"; - public const string Version = "3.2.60"; + public const string Version = "3.2.66"; public const string Author = "Wumpf"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 0367da5..27f7337 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022 License.txt diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index e675eab..466e9f9 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.60"; + public const string Version = "3.2.66"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 12bba70..4bbd60b 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt diff --git a/doc/changelog.md b/doc/changelog.md index 809f90e..60efdb7 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,4 +1,6 @@ # Version History +* 3.2.66 + * Fixed an Unreal Engine Compatibility * 3.2.62 * Added automatic CI/CD with publishing to Marketplace. * 3.2.59 From 5c352490da812ec05ef450bc4f1e32935f8f5c71 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 2 Dec 2022 13:05:28 +0100 Subject: [PATCH 83/86] [release] workflow --- IncludeToolbox2019/source.extension.cs | 2 +- IncludeToolbox2019/source.extension.vsixmanifest | 2 +- IncludeToolbox2022/source.extension.cs | 2 +- IncludeToolbox2022/source.extension.vsixmanifest | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IncludeToolbox2019/source.extension.cs b/IncludeToolbox2019/source.extension.cs index 6b77587..1124384 100644 --- a/IncludeToolbox2019/source.extension.cs +++ b/IncludeToolbox2019/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2019"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022"; public const string Language = "en-US"; - public const string Version = "3.2.66"; + public const string Version = "3.2.67"; public const string Author = "Wumpf"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding"; } diff --git a/IncludeToolbox2019/source.extension.vsixmanifest b/IncludeToolbox2019/source.extension.vsixmanifest index 27f7337..f40cf89 100644 --- a/IncludeToolbox2019/source.extension.vsixmanifest +++ b/IncludeToolbox2019/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2019 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. VS2019 compatibility version. For VS2022 visit https://marketplace.visualstudio.com/items?itemName=Agrael.IncludeToolbox2022 License.txt diff --git a/IncludeToolbox2022/source.extension.cs b/IncludeToolbox2022/source.extension.cs index 466e9f9..c6ca726 100644 --- a/IncludeToolbox2022/source.extension.cs +++ b/IncludeToolbox2022/source.extension.cs @@ -11,7 +11,7 @@ internal sealed partial class Vsix public const string Name = "Include Toolbox 2022"; public const string Description = @"Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning."; public const string Language = "en-US"; - public const string Version = "3.2.66"; + public const string Version = "3.2.67"; public const string Author = "Agrael"; public const string Tags = "Include;IWYU;Include Formatting;Include Sorting;C++;C;Coding"; } diff --git a/IncludeToolbox2022/source.extension.vsixmanifest b/IncludeToolbox2022/source.extension.vsixmanifest index 4bbd60b..57ed73a 100644 --- a/IncludeToolbox2022/source.extension.vsixmanifest +++ b/IncludeToolbox2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@ - + Include Toolbox 2022 Various tools for managing C/C++ #includes: Formatting, sorting, exploring, pruning. License.txt From 183957ae4c8a27e949e83b917d4daf8b56de58c8 Mon Sep 17 00:00:00 2001 From: Ilya Doroshenko Date: Fri, 2 Dec 2022 19:14:43 +0100 Subject: [PATCH 84/86] [release] compile header tool --- IncludeToolbox2019/VSCommandTable.cs | 1 + IncludeToolbox2019/VSCommandTable.vsct | 13 +++++ IncludeToolbox2022/VSCommandTable.cs | 1 + IncludeToolbox2022/VSCommandTable.vsct | 13 +++++ .../Commands/CompileHeader.cs | 58 +++++++++++++++++++ .../IncludeToolboxShared.projitems | 1 + README.md | 7 +++ doc/changelog.md | 2 + 8 files changed, 96 insertions(+) create mode 100644 IncludeToolboxShared/Commands/CompileHeader.cs diff --git a/IncludeToolbox2019/VSCommandTable.cs b/IncludeToolbox2019/VSCommandTable.cs index 3cfb9bb..a2fac4e 100644 --- a/IncludeToolbox2019/VSCommandTable.cs +++ b/IncludeToolbox2019/VSCommandTable.cs @@ -39,6 +39,7 @@ internal sealed partial class PackageIds public const int RemMap = 0x0105; public const int IncludeGraphId = 0x0106; public const int IncludeGraphCodeId = 0x0107; + public const int CompileHeader = 0x0108; public const int ProjectWideTrialAndErrorRemoval = 0x0110; } } \ No newline at end of file diff --git a/IncludeToolbox2019/VSCommandTable.vsct b/IncludeToolbox2019/VSCommandTable.vsct index f9f4c44..0b17cc1 100644 --- a/IncludeToolbox2019/VSCommandTable.vsct +++ b/IncludeToolbox2019/VSCommandTable.vsct @@ -62,6 +62,17 @@ .IncludeToolbox.TrialAndError + +

nnREBsX|f!pbO};h7Hgh$uq#;t#tj3 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%0D;7)q^Iu!Uy zid}TUBdIg{LII;&UpDF0Sr|6W>NPDCjiMSCOLMwbdDvtZjKvb$KRdKP1j(`S9)O$4!I!bbC#4kfwN*N%?3r?LA8TTI4y~&_h)Pm z^QAgiH0x9sugl(v4NmP_&8j-Jj#7^i#rC#VZri#}r1ov2S}nL*`S+UBwfWi$RQ2sv z9%%}xJGGM_In!mHiN=Xx$I zoCQBGcH5wPkFA(wvYc+L`i`Y;>Q4H-R`l^sZ8HzCN#pf)@4ZW;J;}}=CwpeW2tx0 zKNP*y>qc20DcU9b8hfYol zEx1vY{#@-IO|>v>NA>d){&9+pY*={fj!QRo3g>p*pN5YN?7V#=Oloe&w&&IN(!vLS zm|z&c`D=#1G-Imt;8y-gM*xY>`cVg^!@oiU{1q0Bmp1^6*%9_hx=bg8c!;=u-cCB zy$@~IIY8fkI6ZF9^Zkm&PzD69c?~=IUGW+VdHy|q)*|lH>9{A8JFouyyc6$$`XaS6 zVzWmEhhihE0M9AQMhWz|r|AjuH%LwkpP6E8f>?_2bQ7YBi>brZ3O0@Ehh)p+T`CfE zGD0l_rP2Y?y9vGA$+n-RaEI?J%0gU4rPO(ggvaU0foFo#hJDTfR_R5^8m3e#Q;IK; zn(It+35m_$ZtQ21y!BUx&*{x)mcA@NQj4&zC9CyJ%w_)J>nzMfK!(qMx~sU%t08Wu z!RSyLE|T^yl7@>CV#%uq_XD#wgt+KBObt_#@ueff=I4>=kU*96Y?bX7vyPx-4oilT^Dafov@^%7 zTq=~=U&G}7J!7b?9Q7dIcT|o<4$av`aj@?v=u@@AsGvh1Xjq+m%MRUbYn*^zx$IE4 zkSM1u9Id7MyVuMZXzGgOTd779(|O9hU!iR?>HoYo}VYK zw!;R9PWV0ok=T5B{KUu1QyvmSC|dMHA~ap#;434om`s0=O7Zb2qJr&C)bG-BeYTfp z4!#x{G<=ZS7YJQYhHl9{bx_6jKLvt-L%;_+bw!;%Gv>UOXM7&xb_ifTaPU*ljtmF3unE_XP2)NQK5uHSz#pmjDZq`CB4Eju46L^${l<} zC3QCmba{USa(Gn>R)@`=j?}3~!hp(0>afiKX~eWvmJmztZ1=lKG@ew7tlNxrXbX#= z1lCOC{lT3FK+g-XKV38?_;KW;clNk+9%n0eP^HcbuCoc!{&-N(DH(tN8YhM;^Wi!#xn6sDEJ*Kvn{x*YrV zB;nwtaNN%6FCBu-?TNTMqGwxHv(mIyHVq@eD<2^!pI;x$A%K#z`hWHGU)(nE!NH6d zj!dRXum91yNtKSQQ`$*e?LB+1Q?-p0i4-%CwPGpXnH1|8i*~_nYe~ImV_NXF0g|_( zJ~54=MvmAX+w85C*O)DP>22FyH3puATal#wOC~I4kZsIv z8<6xptKqLMi0wl4QK5>v0MdBzS=qm+*cm0)eAnbh>v7t(EB~~3 z5z@)j{#~zMniG|y)Osz6$~y^B-$@!H1dV1P*dI@fw|=2^50~626%|M?vNdr&M�P zwSpJ9H07Jj$d#HGpI+%W`2KgCeXW2ky+Fs^eEHfe@=EnF($2qHnanqLr?tGP)FVv( zuKKCHaLW9fN*CD!5BHk6sOT=F!pSbX-$XX=`g1LUGe@dNOU_Nq9Ts`{^r=+QP>BsH z0okYa5{^On(CtnkAk%&PQ1gZebxEDtkoa2dgZZ9r-zGdKgs+P2QTl$EI8(Jw8RXo;|KG^=Xy=rW1kv1GHSP!S4q zx}ag7ysEdyFoAEo)!8DP52ct78H+qf^vMk%G@fcJ2ZuAE#B}l0HU)xRLrTR(4VTZK z9*)5ZS-mcsppZbvy26I~y zz;0Tg8C(Zh&R@Hw_uWGky-rgEaC#rIA=0W2JaU~V7o}#miA}8UEl@C`w@!bW|PC5yNaiLPl}6*&Ujhma3AUx63abu52)?9r@9oF$#q<}@j} zUpjR=eNJEb`b)Iay|ty;u-$Lz-($3me;}JxvHg3T6V73mr|*6RE--j*MB@#>>%3XPe%M~JL z-_nlAB8w5vy#X?a<)?PUwwVC>IT?#m1baPa2>x3i+-LFEmBWDS#4AftHsY6H_6VU1 zTH*4-)<^gs3e^D);jJQBYiw&ri6&<%#~WcdfzZozTu*eN2U!sS^1chBY6X+$c)Myj z{*8(#vuj;F&V#6-7)e91(>Lw#3<^7RpPl#5(`Wmk`U zY0*mj&6kJ%Vy>3SseqcCEDDU8&ZZB6ulj1vYAZEKQbsJkXR*-|$Q_f8>klby1jc`vNI4a$M?ne%~?; z>@&Q6uO9bky}^yPWlS}%kpKz$L|b$v@*JAE0#emuSHAY`NiLI)wk!HAu1u9`+GY(&H?#(Ig-o=XY5R5Kiu! zsN2kC=jg{4jHDWBm&!Hr31$Pd{8>KS5fOoi#k;5v158#bgt{gJWf>#?$Cwl8iETI4 z1yqn6dEPa8u|zAAhgT`Bw+nHH>UQzX?zIv-=YE21j9pY_XSoyy zZTekwWggf)Dtl4R1~i9o4&C{mXP`%G75==EiJ{#K+X4E6XRrg|h_DHZoRZZ5Sp02Z z*q!C4QM=MEVBdRfJvr22Xa$5BDf@aHv%RIR57u1Mj}6^^DkxlG7S}Nk2JkSOC*`;5 zq;WP%GXCtM>!D->1QaU!#iQ{~%B8kc1nPWTPK#s`Pak-?>$gXcfV997?F7K!0}RIH4jt_?)=^YjwdWmn8TS;gaEv@pv>)fEXYD!7 z+w2wPNxYO%@LS{_H{Wb^euLwv#sN zkFT^$>mOV0B-5nqzBuD<&~ynU^PV5Z!~{9b)%1i%qOu2$hFD3PUV})t&*z%S{j%9n zi@|=`t3^IC-KwXZqyAXTl3E|1!5T?y{V|o-xO%N%<;GlHTc)85eMip4kY#~h*C{)+G+v==G0^p(6)lH&IUsPzy!BAT{G%&4G0?GG!YD9bp!QlpMqJ%~fj=7JGG?$t14E>z4Um@R%^5Jj3 zXCdx>y1gwUM45l~hkT&*TPgt(0nHxdJ=}px%+c>r%b(ni;gf_#`oinIX)O(@ZC^F! z@n8xAi2cl6ZZyk(pSPOXKyymQ6$47u|;(TCRJb}nb|HRfW8v4E)7oS-U9CC@KbONuAJpc8;#3}vox#Nl) zWJNPJ+9qrPLHLW(y<=4OMNBdXz3Z3C=W0@yP6`Tn7`ZjD(`CT?2EePs=vmpFj0abE z*YEGL@({Z3#}Fm)gLtvCUgqfG?paP*s#{`W={4%(pQp=!sPx;$JT>h|PaCz~;JYIS z%d|P@zxk^h$TBs+ebVacFPT*Dgb#_0?ZXMjBPkxG?|is#tj0c4TO2Sh7qWcGHc1T%^HWwGeDkfyRoCK6Bxh!N`dfzjbFj~f^0>e zvNeCR4TvMxqAWEZPQ3`0nP){@)R5QbSgy$}{KTk+Dybu4H!^m_(Q*m`IqH4bKrSm} zf{B{ve1PXT4{#OABQ{uBXm(C&L`;z)%P&-^#MNzs2`Q-Kxa*)`(`2s}?tl5Y`@2mx z$`4AEThtY!!K#Tg$CiM}Z7DJH@HCS&p;XLAk3745dFeb}$+ELG zmPqMUckNd!d!BPG2=3q7QqlCU8LZBUPPI7!2-Y4BdfYKwo>A+F@4w!FG8kLLyLdWsB|x$2LXbg2dVc7!KS02 z&CpDXHY;3b;fsMN3KdA}(!jM@mh8)jPXg&}=81M%HriO_m+GvWYNdEggzAY)%( zDEQ;-F>6}Uh>r9IGxjC}0Th7NW^<2GcCW5NLKC4O4CwFY5Ffy10w}~6BZ+$%QnF!aZ0PxPF>>O@L@)NCRWHP_}U&y6*NCLo9VrA}Z=CdGm-< zbHGDSjFu?HR!UppSC-^7SPDC+vYR=jJvoXAWXw#Pr605K@`Ow?9u!_`iC%*KOtjZ6 z1qL6+uoq#FaoHgjNWIPSey8P0bBIAAxI6_Q#&BY(Q%WNKh}fET46QQ&n2J;SVoFE)umKq6b|y5RDg984WB|ZBK1p}unYRY{FF2%&0>d+O zZ6e+jQg-5dDN>>Ae7l^ftH?lBYLFry*EQv!_kBEl-JVY;-T3qv$xzu zFx%{5p(UanXrBZ9xMbUTozfc^fOb+)(~+hpH^6~nM234vN22tuKbO4$ z&>dpLt4Ap73? z%e{3aJPv8=BvP*w)s>;z1n%U>`B$@mgEbUwKoo zCEp4Yzd7#$ur+fFI0EE@0qTtcbp;@QO!o%a5Q>GS@MVuMFaSpP2BSD&^g0B1+gAWq zVsLImfd2J?DS+EDSm@p)5Y}8B+h#5uC~wP3*B#Yh;Guz~V0}CUKs|UMLjI;i5%_m+ zm?>Ye=_oh&uPlJdZNB8+q6-ZW-_U&Kv_A|Q%7W%3N(%%C&`tiWMChk|?$VbrfFp=4 zI=80(V!D-feXp>`2=nxr^7?H+dK;)@ABVD3K>ro2#{&I#`?&KodV_i>zAiG34fZK7 zE87NM-pA;*!VF3K1bXh~V{6JHicnT4d6bktD;-CY?y^H|T6sxG`D3I9gx45fy*<1p zylx_EDI_;AH+g%aZ(d?TFzd#}7asBs!te6oKzl?-+iCd)M8hLFd1KU7yvS{xfSK_B zaN+<@2h#Ld0Bslj_BpUGR=Nu>-D}bFDHs}7yT_k@&#ny;NQO%GMcIUZkwd*Gb#HwH zp^0i@f**6pgCV&=>JPBB$FO}S{`~&k!)hu*m#1qGUq;gb-vOJkNB1a^fxZLj_Z;Q4 zj}S#1lQpGW-$Apa0cP{Sf#HFw_vEtItj|qG<=Y1v!sX7~i>hvYbT-TO+%RW#Rkq%P z*l7G%A!2Cch6v==pL}JgG9@Ax;ie;3*l9fch1=`(Axh(8xW=P>*_;8ldyk_mwytmPN7fgf>`;3O{3qE5J~je97Wy|_+IKGpyVZ+>Zx$n7hq-^fn z2)SZ&<@yRyI&E{`MAD^^oE?%%rP}7KB%~739EDOL)kyQ(@1Onm-sAmwKla(@^M1Ww zujdQwM)YR@$rM;2p5F_mLGY@mp|eP{$D=3SjXM1rWiVdfbq;B1lTq^=!=^xXSP;8` zBZ*BRgYs^*`C$8keRE9^2c#QO_%O>rIswVKI`%z%t|V%W)qxYcU%tM7=@rNl?l2_d zaKpr_9paE&CZw=61YCRmSL$<>wnsVe0|%V82kDI(JU#}A@j!V3Ag6XCSz2i$^>3m) z6JjLZo14IMM`V&bjRSE|4*-NzULFXzw;z}9Km}U^pqq}9S8~I_cqkwGcpu;~I^_`V zmz2Ap9qK`{vqQeFypeY1<&=pX+&}sKsy?TK?rw$KM|>mRLqy(ahq|-DWkkfYb}$J5 zEuuELx5K!k{bZF$AO*R|hs};iZ2z6gUz}RJtdK6lEAu)KM3=og(W`Uv8gy;1SP+s_jMVa))jxevZ+L!> zP*Fy3dP@TLjlej5Q-A->>z;mv${ljARrq>;s(f@75w&0{`AO>Qe9(6iH0Qpc%;yt4 z%BdTG$VF0bvp+>Y{1hiCW5$x5;LkXm4%|nCrQW@;)bn}I%)-D*(Xn9@TCD+>h!_OG z#BP5WM8f{vg|#W=M(Qm&sN_CdUd-?MT=`v_F3@j33(frxdD{TG{Y%P{Fd4bs9a$XS z>Vz`!fO-+{K_izx1uWm%t6lS5-=}<+=&2KmH1yZ-1w5eg6S8TFr;9f)A~V?g*TrWvlR4tLLt+ zN=U7tUKvPvzl!}AWoNjic*Q|Bb675utOoLr1FjV`tabLTeO_7faSW>KOxTB6RjJ@= zydr6py~JP@%KFx?+*#$T|1i0=$E<8U_qWwt@fAe#PsGl*y&p*=+oAhI>mMsoz;Pz7 zX~W-pmxs}i*N*MURJRN7=!S=W(RTFj2gsayvfzbfOSd1s{zA)W0u>?kC-Ui{f*IH$ z8@T7yJgDi6zpPoJrg;zf5Yg;uXJ*B34b^JXf|^ zoy@;zq#ad8Uf?ax;I^)MZ_SKIH2sixjTEnL2f$f?8&ZF72zI34?9IEjYPI2i7I+Od zrBaW7{Cz65{WMdG50JXd+Y+a5KfAJh@71<3^RE@_uRCV@HFmoveEa#w?e~Wg3a$i= z?#z!%37%Y$diQjD@{nM$|DXKAzizC6XDhf&|F>wg^NI1-v|XS-Blzwu7_{B_XN37B zg7qjP;(e6ys5iQAETGcL;(s}zhbxK`=--;8=c z_Q}1*IC{7t==EpMOXxTiD?9sKxyXXfp_+=UB?QCjtYP$|U%j)CkD5woVK4h%54xN5 zY4Xk2{p~b^?<JR>S8y~FOJ>C}dQ!{LupR#Z|;fne7fTO8P#-~m=+&JDvZX3OOXmRGlBd^-5 z^H_<0AGZ6JF|!Y*{LI&X{apL>s_Dn^&4cR;Uw(uyz1+zJfDy?`6gi~fqZR(XWU`1d zLf_`qNPMZRC|doK9l~@xxyN7k_JTc5y_R>!E+%?r3>wG0`b z(qwP6O}yJRVSiA z4a7qq*JmtT`EQ&Ee77$PeUC$NMz{J|=j9l_$q6{HET+@QVu}L;lgR~+m&=a?YfW>3 zBHALrru{O0l;5Fguk?<1MZNZvFLH{w9bIkLdV?&AsVAz-1t+#Z<+_t&xfQARHicSV zV)9X1Zb`^Fzo>7C852SAx4XjRssjmyj)IuAcXQpT8KCp27f^MO0X;x=|;K!6(>c#cKIC@NjdYwgClt;O7Oyk8cgjeL1h!_cCjrv6<5Si7jF4klV;O-SUzA6`NmM>eoTBa}Pk@HiJR7{zBtaD+_(yS{~0VSQIC2Lo5 zxFJ&2s_&{Mzz6Tz9*O;WSU?m_ zRF?>p^1J- zAf38B-tAovd`TA* z9XeV>b-;rU8QehIXjPB_SLH=GP$CZp$nhYHyDKC(Tt~vgr$OR7I302;5w;&Wujx7g z)EgACA0P~|g+vDJ+p0ub4FQj$I9ZST1g++t!(H&yMTE8!a*iJnWqpDg-Wz+=(zOW?S}Qs<)1)mC*QnpZY7YGeR8{W zpUWRH8!AZbd^sXbdqFH5>1^G5V(!^nw#0Kvze(`Q+`-m!kMET;2Nxbe#a)0!`_Uqq z*wmbW?VbTUfuqTWOZfxotLUt9I~lE5psM&d}`OQ!iY(BYqmdAcsRY^f{u_?WRW zC5P3#1ESOC9B?3HDyi+KWC6}R@RnbNf!1CySe(-3XcR`KayfFNB08&*%_3&pob)d7 z&q5)qF6YHBru?OVLeWWy0^dqI7>#vb*`*w8Ojqj_!?T|37=vtkgL(E+7`whBrn(*z zI*)6CH-fXlgy~r23V=oDv5UV2APspX|+6^jWq&(|Z zV4jBbfu9X8?oA{C;dYlsbkZlN#ll`qnilP<##yNBDmwrEA-rf{GQ`BAbvlUh=zb}9UZH)3DP=m+NLQ1QY128AsC8Z$ENCANXefy(my zJOYwQDdZ?l_telpIa>r!TA@jIoeHr>X{$nULhR)Qh6M5q#sx$u2Pp7SN38Rye}Q?H z%mzC#6#x?*n}5(3q|t1DeuA#1z*JNKnW{4}R7aOlpa!3@+X0AfXOOQ0WjPF$!3JfD z_TFvBv$P&nVx_kJ&1<+?LOUB9*dKNWFDc!is&flV2P(3FVUvZDbKuP8- z>t#udhI)q2L(OzNyp~m`fBqTW;o81>psWic$8UG>iYxRz4qZ`kJQU_)EK`lpY(mPY za-6T0*ZYbyE32*rp(>SE3z%jFsv%(zIHJ8ZM6mYlszkoHG|Y z8%F~#WGT2jxa9u80d{WVS@6R;WqK7xp%0bnk`p_y|BM(=feyAD0>g$>pJ@w@cDPf3 zAlwp5C)J&nTF`p(TI<=Q1%R6UJ59qM}IVPhTyea=PKt_A3+^73^jLN$4C zw881gbli z*IC}o!E6uqtL<*a$qJD4S&){3Q}=|}yX$qpZ(>a__uEknE(8Dw6buG)5N~B)i9UV_ zyE`mfH{#zh@=@05(P*LPNOqIhsB%7&x&#d`Z+rOA{WjmcVQxU~GG&rJdR~_9wh9r^ z1^}8Fs55}3nraQcPZi5|sC7{F?n_LGs~L36`->-L(=%{rgb?I4R16A2-U#F8IL0y) z(~82}M@CgB`XypuRe;-4wh@#r8)&bQEUp2k0|Ui!&HNZAM}C`m*JSUrk{DAitoS@m z(olGyJoyxRi+;0FCpTpM+GFD)dx zW<7eBk>eH`1?-NcgJ7Tp*-_P4RBVZ2h(Z3z+t}mW3Y{)cVkJmB5Y$-=a)9Lq?#b6? zGq1ETb@E9?LfM-I%rz5}qk?^EvNHjIkRTuc2>@FLg8{D(KQ1_KFw|p42eTkv?GsAn z067JKt2PYe0>tq}J+2q%wzppQ6a%aVxf1Eby9^wa0nnyjHK2oV^b-|~U>XoapX@0P z0R&Fz#=+fTbVZ(HGn481ZQ|_hH-f@6;Fmavy`D5iStJMt(WWz0s6pqVAzHXfW+0@p zRW}F*iOkL~UvIWeW&{OI=3CN5_z;#k-H_!2EQid?LMc=*1V?XdhJdIH(dKLl>wriN zBn(P7#L>aXKqiqcO82{j3^_{#2nX)61b|}!+TwH<;xMK8Lsv9IO~{&$1$?}GKzKj{ z(hgpTh6|%NzP`dRn`snMv}eyW`b~u)gK-%M>Ec$ja&^gY2#yVWffgBh6Ut16+*cEM zLdbP&hIQGCkd_#sc48u{z9L-^3d={xO{J`6yCoO8@-DjbA>II}42D*8ivG>>BT9#U z_qLc`yFk~&;i2G5oL+y&B_K$OaabJ7YU=e3pst|cJtyO_F`kf0i%UHMv*r(*;s*-#^s$4|3wg#OutbGBU zFdM)u2USN{iBv>Nr-SlV7(heb!7~8E-dlQCVO4wf>D${hIw6iC`+zXOE+Q;Z5>R+oECiS9*5y|j$j~haOX!cmvwSE{QE$!Z-uED0 z!c(&05G8-w{-h$=^PfY)YC?1CZG&8b*ZOoag#1>l$p25FfKlHVLeQXDKun45O>Je9 z0)^b5v%JOV%f3|xD9TYf-zX|#F58~BT2woc7^W+S$J=?oI@X0?Oll}Sl zzu*hF+#nX{ct7m&b!qSB80O5BZw!Dk66U>>?Fxtm#sVm-5Ve~hK55YB5@X$4!|x28 zQC*XEy9y0nZ4?>3hh_my6lKewOlyw-iN#DsLzuhrBViO(V8Rac807?fLs3cWi86^G71VBs%5@-Cr(VlszSG2rE3b2xc#2 z;+CFV{(%eo;2hSbArQ3{WV`e8KscBOUz9>k-esBme z02CYO)|jms5MRw=0+4h-56ph;!)AbBmQoW1>w01GaN({qm2vzRI7aAV2a!lNL7RhC_iL-bLFi89k{fZ**@z| z1O&t!_)-$=+&JorJP5K4bDl{C*FZdKvXQlkhYacOpFot#X6i(i{Ga^v|IWmT$f(f) zbu*F0o_nG@)9Y#=b1{_XJryLIflM4;g}i11hN@mhBK&1|EW zGis7KUga|&B;A+~8T>vQAPJR)fs{)VT>&}ntn8NBu-UUSWXZ2L4e6pdzVt2{^M0Vp zfb`%v;9xZ4&0|QGXZ3xK1A$gddZw>JWn@Xn?&3q-D9UPqZ=-f~AgZf?Fk*i@19g>E9L!+cbvSwNR~(4Mz&5|BUc^pq=KX=+mu!1}abk0b_5O@T zzD_Lja!LV~PRE4J;Q0KkzpUC}p|C6#39az{G(&f0J*aciw zO`H7juc72y!?n@-*GAE#l>0eT;PQV;2N({WjMsmGs+&NZ0(kQAhd*N5bUf(XR$huI zLWQ@aPIvgw^s2w{bXn;(h+DflEcS8$p*aDRL=a4L-c>0ucjYJM@toc7Dae7G2;;vOZJRgM~qog#J2;J7ZZf}SLKm@k~t&>@7 zC0p^=bfCS{ET;C*Af3E9Sk5)qealy#{86I3E1|)~C(`lDTU`Xx#Q z`yA|3@0@bDh)^3N2DzCJCTEE|U2kXR-FTdAU#wQ!Z@0hmniDo?eL3T8I_FrxRg&uO zz=jHE!uf_X?$6Vyl54I5>LI&VMtaiTe4^V+0Jc6~OtZb0OHCz87(*mXHgK9b=!YU% zxdzvH@(gK#dA7UJ@x~wtt>ayUJeg93W{P>f6GUPc$^1%{-CEa@kD6dfQPL{#xBWid z5qizli>Z?>O;?z$QCI7{9P8^pr=Qm?ywI1{!w9IZ2`*qS1N>^FLApJx5I3!+v<_?7 z*YMtJe05mQ_Z;|{Pl6&DcF)AU}%ksy=b+>b&G^xmY zpR@1x1*BxHY+bzFuY7p=_Q2w=zs6}Tn&hlR!!9;N#;}uq2KkZkJA(Vhq_6!YJJ32zA;@?^&J0<+hWRs*k~5lz2i;mGe~}EB1`!Q= z29ZZ5T5DT7Cll^`xHpA!zyI7;5xI6G=*s0X#dUo% zVp?KLFF!)W&I{(hxBfo;A^)mOc=y`C-xraR4oJN98B4y4e^(qw%U`C0;L3}|z3(3q!k_;8Gw=OIZ~wMT?d1E9TB6?1OB)+g zv*nhAEkh_SDh9CU4jZsH+tOX43Xo$_)W{arXSCJkQfS{<`_AL!Ou|QIhjG&P&rw|1d@4z{mHe~eeo--~x z9`!;`a62E+`BI+EA22#?j4+0k>gH^y?PJli^tIRYy?9rGFbg2DWT4UlH5caAKH$wX zsjA-|(2F010Yit2QMebl(6ypWOPYHr)y*i(2ilo9hxKbNgkNHd#}#L(3=?}`(pJwS z38v?XosMe6rk*c8PRlS`gS)wK@fN_Mr2Q>*JMS1)Nh z>V3H#)D>|qIWA*&!fQ2c;)ll0ne9%9*yQo_HI}1LBbGEqTBmSy>*WK1{ zE2KGC!Dwpa-Hyu!|6SWs)?A^Bx@q^Q>QkmZf-Jh8tIIx5W`QnHa!%VD*SA#bO)uJ6 zJdA%m6nLpVv<0XAXa^_hCAcj(|I^i?drsA8bj;z}Pp+s}X3JpA;MbWy+&__jM#Zz6 z(;jn&c-VI(Mwx%VeoVw`>-lYodN!JJcLj+NfT3zJ}=Te72-IAiJ-b>Kg=_ zW$s>?m6FPV8NwvfqF4}J1DY5}f5;Y61IDueP+YBX$=|O`6`Me!`4Uiy1rUqP=uyO2 zk|AeiOX8ZDV3V81l^697V79@MnJh1OXt`@@@zoRd0%wzUo6@*(&a(*2&zdQY`hgIQ&(5{1p$RLw@IDHY44L}&!W2L2H?4AqwC-nTsae(`c}uxU zUUa7Lt=CAedEJ(U%s+J9dSdlIkorqlM1l(nsspo=QSp(C&tOBqac%{Y{IVvp{lp~Z z)`@mvzM|Tr_?roKde3JOs2V^bP}#+(;`Xo5)*vymW#!;FaX3>vfB0CvW|L|$ToYOK8C9I{& ztWo@QP_A&74Iul#g-7X4ac&eu{YR~?6S`gn3$|XPjLdwZn<)07V;0kc{x3(=ClF$k zbQ`K8U`OcW1Nx2RX0sc=k;F?fqGgkCmL(rSaGMdbtO{^ldjgxwa8eiBB;WqQ{vNn_#=%QI{MXpZr*t1f1@AliQUE)%>+qC441Bh|#U;+01wf+<4Q&^po?38jgf2Q8F5AT< zrty3ORpB<|1AE>YC05Ey+FQ^#dPrH~G)QebOP>V%s^}=VJxJpOfyJsw5+s++HIinD zy+t!uWP*-NBxQY~tFC(DK?5>N*d5?}k4?S0U8LD}agE=_k{f|?+atanWaJw~UOHNG zmLg*VOw#!vBsWT>`^&;Ad|0qfbp`-NXZLCF9=b6 ztDbQN;Gb6YbFTAtZiHtZxd@lR^{S7)L?A;Ehz!inHeloeIO06g2Y|EGwv+TW0I{&o zXHfj^T?G`61kV?dR2P-p21r?w<;p?CZ()$C*H#RMr!n+`%All;uqRh0P9n(84rj0X zN%pws?!uf}mmJR}@r@0DbacLZ%%GFG!10_5^y@!%6w=XCUl^n%IrRogE{L-I9glot zOS_Qdml*PclAHR`2X-~QQzuJj!=nT1*iq4?4tXsu17TjdBeZvIJa$7A8vy_!t6byM zuN`pHoHy5q_Q>6#AfrPyQXrb!gYGR21r6$rbsGbbx(iYDpGW*-&QTkKLO;iVK8H*f zbGH}D+8aESI0)ir)M`vrm9h~({%g{QS+Z66{@L2u9Q%ObP z$UbCOU(9%m}xVYj{PLjLK z3RI>OfP?^ZnX&nr&kPSRlwE-`md*LCONEWjYD3(j=XQ7s*|8(GWOAuwF1GZ`Qt5hZ z+166olX5x0a=EmQ?{zw5iBh2(SJBw4Y_MDjYLPjKuJTAJ-|` z#WYA;K6j=i|1C&O-S2#B%c;UR{UI)8NLq4)zV@$2(u1KFJ4#WBJ2CqC!dBe;<5<>{ zSUpRiM7@X6U17`{;D#)u>MmZfi*NPkGs zV^74!o>upgX0rt!$qY$_bK)%5<_lUaldY94x(KQ|%4|4lqE`q`%^4Zqc3HZi^tD0b zMHGVk?m7vKDhy=1-^P6HJQLLMB)hdU-+epUsTY3tc*0#xJ=zzs6l!5^A}q$`>;2ZR zd8!_BvIjpk>$cZ?6-SEr?ro)hdiU^4TcY$ixMe9Rw!f}0_d(KNUnl&(H(#FUCN6G^ zyzhk7bwxEsxHu*c9&8OzA$oHSSNf%MT;7Vrst<>U<;|ZI?YS646-;?aQD=AdYHBz)<5d<95kyu^EL zWqg=DBO$P>f6}Zc%PkPUh96|Io@lEGVToq{#aGzfj9VE$-6mrOGME4vbT3UQaf_We z_-U>I`#+X|Gf{02uhIOx^*^2fjB3AOuu(y&@^vz1$W9m-Y=f`q-T)A9JZqIp{nW;b zNIHYzPJQ?Fp^(q)Vw89&U)^Ylzh?0HyWUIyr?)QY>yaA0uB4Uc-&e*ATeLaPK8(QL ze*eCn^kXZDYN;go@B1p~oeYHgE`pJ(sk3HcM13!8{UrZ%yA}V2Iq&u3SL)k~f~?;W zhyI8JTswYAqvD1OOsC#)GN>E0)soR(s5o`0ctzCwKg%x@GRsJwzn zI&$6CtV0bB#k+UNZ>MNHg({YFY^OQ4xOF@{2cN~j9|g)!ILfDSzIFY5sRtT5bdCb`ex&L>T{r4+#C9`GWJ68583t2*>NX_Zs~z%}Oz;;w zOuw2C_nC&A1ge*F)%Xl-@_V(DK!u4uGdkDA;*R#84!nD+d7EkQ2E!!wr!t#k%O{)g zIr4myP>&un7ZBvq9R(iPI)g61&De8^D|-DWxw6mv4oJ@iq_^FpX11X`aoGArpP5Y$ zc;XHo%(Usw(xo#9NHZ92!^Jd5J|C#U=cuXosIfV2ceus_9iho~du{2u328Q6A29kL zawfo{a>HA>PoB?s6nD7lKU2L4vi6D8(1o97HUNAk8MiGU+gxV~Ys+z~W|RbTACeu; z#?Dx!2dm%dZTid9l5ML%(h4;5+-<7s{Y!V7W5wp|y#!KX_XHd=*HP~=md!He1MS<= z9Bq3{+Zn+-J*FN#Ci;i*N6A=rk1m9JarEwi`MUwP?9Ax)#(ZM<=8o)Ur2Iv8NVsLRHSkF8;K%C*iM}#NV=$hk*3>U|j{X zMDSgFli7cN877ngu>QS6c?`o$p!_A%)XEL~m36i8dxzouCVxyKucl_~vp7=OsguPZ z`~{kb=IY++FmyIOdGU|Si&S|!L#K#g`q3m@ko`x!$KvFVKPPV;7M=-XV%Ien$rw@| zQ;Tn_-Gy1}u#I1MC!^>Q zzo@6nXQ?r%KcnCkzr&;d)7y+ZHSzi(ekpLk^*cZJPnX1Y#vE+3{9r}})++r2zgX`9 z{ZH4)45#dk*14sOs{KbQ)Z8MDTg}Jzm&oMQBy5tstUA$dRs?Ttr&r%4M#SRY_MQwxWYAD;jDN-ch{2a6WE3<9iU&9GsSr-86 zk7bGJBkU`o-j|y+N0JTX+%V#;{TyG@VKX0#wWBM#ugYpCE}0MalR94FP`*RhY7?^h=X~ht=H`fAxK| zNAhlMj#lnIWr?iUdVt0Y25+siWxGLrQ__e;_Kjnk5>dEzQ5!kghjnea=Q59<{AIb9 zEF~G5RD0BNOzqTb?{L*=j_L$wdWwOYI#uI?`ta`Yw2_@Y#YRn^i|PHx8~BGMayu76 z`U)Tw?%+*!B%r03Y+ot&kx409fls|F~0Zlmqo^xc@DwjRNqr3ew(~? zYcIA&fC=QE5Y*9;#E&9f3}p|xG5{hWp&T>RZag1umjhSamBvR#I26d}1axMgBArT< zt&VK)QBf`xYOVqL8L3XCie{ABULTXllHJFCuZ&ja#duye|HteYjso|tnY^0)>5Y}%pXkI_tjK58=8x7qM5PXnU&{X@7jBcW>NRG0 zLjF+L;}e^|fBij5b62to93vL5M~9z3#$UzTH-7bcW{&-?(jt1Nw#?G%=G1?>Dnu^`jps6gd- z+VXJ7=Rv_5*jV!0&>u|Qv&Dp${b!UdzV8cK{FGU4k#*!pt^UCYdyago|HX9tzg)y< z%mui-yjSJg_7PHG?0QdlFEnN+y6%wzXXo+xu3e!i}MX95On+!Y!|%dXgeGon?;N$z%5 z*&x-Fa$Vv^??{!%?s7fM$kZA|M_C?uilGnutWG?&dCExs~giQs!z7H@G#Fq$JVeSiNm@j^dx- z%ib+`e&QRph1)9qGT@(hlBHRpGD1{2G5y(_(DV;y_dg~OXR~4V@_Ed(=_OXSQgsag zD(%5z+)|8cpO@Twz~*Hc$zT5tCExIq`#w)G&oBEl&m+*!9JhHZjpUv;*WYCfxV2@O zesRHr#iZ&fGpGOklc(lCca4S^4*6)P9-VyOn3d*aHJ}>fwVE&)|8MDzgyqUw}yYok=hZ{SR|tsovBt zGMhA%(vy|8kYRc`HGp8-Ds$Lx+Sh?&LX!n+@M;3e< z6xbtx3uVBa7TKmfQHEtPcmBo1W=T*cSozWkAC5kFiVnY&a%ac~3?UD>LLuqX`8a0U zWH}CWFmO5H+HU>+uCF}IW|OSndfX-T&a7Vh|K9UoOSN9Md0i0oc4u#Bjzl7BHsEwR zww6DqXRU=ssW*jQ-bHj?l+Yxs=2o@+5kHkC|7b6?#QBTs0qp#q)XQ3r6V}21fPJr* z?_5Zg{}{u1ddYT)IQta4GwZDgls@LWNm4B@C*7{%Kw5KvX=ca|`-6MUPt?pIn)Do% zwsS0A)#RKs2E9`Koh(XPYdAGI<|hEf=!M*f3wNf}jkrwM$xk9MKZMr3aS|w2FnCp2 zqB3{)3{6~8J(;1OTG8)D6Cu>rFN- zRPh6*9V9gwBx4B|53wZo%p_|`SFxd|e5iM~sG@tyXQh${vlO@KqK=ziHLnCk;CA;^ zerVRUX}?XyJJy^hu75G8IQb%!uMv1JbXc|kYc|z*4VJG=y5k$w!(uLP}TbQO3 zaMGvjv|m`g%(9DXuy19p>@^+#Ww)S7-*ffj1XZ_ZyWtV4$Lb+qiIOH~%jd`owU7of z`U_=XW8YN_y2aK1i|_f#@ypWb1gP#Re6i**eNe0iZjaJj|*TYS(|@Vh5+ z_ims4mKYZ@^{!U#{)0E)l8#MH6?g!;IOy-m1tFpH82Ja!{J*E3p9)>vEB|ox?Dw>m zkON=CcEfF^4+uO9~sX=!hY7uKVJ6#as2&M*qE@dsr#Gje7l-!HBFPs zROrRat>wFhM#x-I=+g;UD-4>BkbkPsZ(O}r92Xj?{83@R>g`(TvFS+cj=~^WZoRx9 zG)fJt_{=q6{ml94C@ovX=RVczRV|^>df|#Mg5IuIKbVd-%2XT@(ByvBJPVC6y`uOs zE2l}>M)_r6eVM`E3A zmBy5sjYZ4=)7ca{NWKfeQk^>}?#CO=x=Df}UWPeLz3(b6-Dp+bv+SmK98@DPYf_f} z>XS7&dh{k8s!w73seL%y@>#tt=)ZX}_Jy$>HoGzIF*2mgdi=;t`mIcfMB1S<6Kzj! zvqC;3=2CfY8;sF4;)lcEp}RzG{u@kmw$2n@^nEKUpj!g&^^D-iO}*sr;-P>K z1p!CfzmzK7Hioy=1Y| z$#=v~s{I(Ii%jUO|4m_mm65OE&W}?iUZHVzEM-|zC-OhXD!ZX#sJl5&6JslYD7^yvn zqTLHJq%tn=M8eD32PUy5M?dzeY9<|o@$O@$GpQGrWi5}~G9mpcw|t^@@E~jfOJF=P zeN3qO{C+|UCvvpB4vu?eesVW^Lj^LtctP`MvIccCclz%VcMJYmR<)~B%K@z2_0X|q z=J-Vm%;Dj35r`R;aWw?;3o!7@HmUs9t^M?Me=R|Pe8zta6+axv?Wzl;Jf+Mpn+3j) zeK86oOXU}{@YPL!!g7bbiVoMQNLlS_T$}lqL!rYh%D25uR?F6}aKQQ`kS^}W?_vB& z&({yBueZMw#_^vOC~8}W#$m729+n(51Ayf0kV|-py?|vRWjWC6wLk)duIG!)xosJ} z-jY&V`G)N%1KZNU!v^@!Tdz9+N*FFM#Ty)2c3FT&E-;vKgzy^A%4~{=viIgv8GeX^ zS;t2S$iL1=f*;~QT|DeG8R3!q?=5_rKoyoa&#Kem0I%03bi@PtdZ`yUk;U)A!Tv^o zEf0c%e@rBmfh}=cxH%AkF4`pkfT>AfO*-7hTS^3V*lh&AQVQ;(!?!$_E!m)(M9`6M z-(4cs8YnV548RR7f(bxS#Zj`OgOBj^_37~EQff((@W0$wyGqceI>-|*sZ}(5{}O6o z4&++_CbPhMOW_a(+=hqOr^*{q!9=!*aXr|QHzAY<)O}D^1Td}?^&uHAGK;ldU0p?h z)ai2*NszClAb82xbCf;tCCU_pFvp34@FG$_UiEt8j~Gj;)`MMGU~3*0hXb*w_~&KH zXeP)q@0Gq0M&>qO1g0cIfP-eSyqx0F@BFY;>=TZh6>oG#4>H5TY}2r+&bA+#{C zTV$nOOt2yD2dREz%vW8z65GH5JCW2R{zHDA#s03tCXRx*9L&ZUEEb4u>`-1pz3paT z`_+X*;8D_Q>xS5kI%Az?sf9YMG!tSXrfKvOU&B#ypo4J$fnq%wS)YncGm#*X@LL9d zy|gU;F_>&BW{ZJ!V?YMm@$K!ZDmeT-o&=AEjXiU4i-;d$DQdjjHL3?0VW0_guno!N zMV*u(3BkilbOTgAb4-t&ncgKK2;dlb@icmH7y=$NL&aND(0U-jHWk#(OAr9XI{>N_ zhU^ZWY`}$2lF=X<#*YD>0bqUc_+UJKRX4>0*P1AzKxU7Z%6gld7zVL z2=t~9%8}H%JRfnkXYKEc$0W(O0%WY^4@j#GuunirOtpURx#;-G+ zzT#B{K*?d6nimxmx}o-a4J-WTSDzb~n&UWFQFktxsoDUfm#V<^0Qfz&#N;fZoq`7V zsi_h`Pw=XSDfWf{6~3%msH_tQhZ*A`MmSQ$VFZS-IJY4rH>#3Ys=on><+EnA4XoW8 zFnUg72WY#D2{Gg_>a5>a|?z26|!8X+WKb@&EtEN|p zJz1qAzlKfqR}bW1x9fzPIH~quSlz=|O)g{?6&^rVb>KmxeNmPp;9Z@B?_~2oWULW2 z0@MU3MFCmWgYD#M7h)R$TQ(!O$pLId)qimi>kZiMx-As~EN;U??iK-G9~e@n(uD)B zp4Ho|3->{Xeex%~t#guj3&jDnAEbod{tc482bbn<%Q9`I0tmb4pnCwNErwFno9_hH zHif*qvUGY{PiPv2R|Acm*(l+KsjuZxa2ji8@O->#jlcTmI&=pMKEXh!%&PSAfF}r^dxD)FHZgTEm8DSyR7%w=f-*W@}!`Sb~Q65q-0kKr~lTju2)6 zz-icx@lhdCKToUy5Ys?L*b#NYFE~Q>)SaL5=0DBe`{8H)95Q7drnjrcR_(LrrvEI* z?y1+(ngc`D{X&4atn|R@I_wyEl}^D71Cm}geAKQ_MBfAPQt%=KDXbmR%?zR$q1cR9 z4Zzdz!iIv|;QLf~%{5`oAnh8GkPwI%t-yPbz{MG$YI0i1t0NYxSe2-+zWi=$0I1(Z za$+{?X`UJFCaCZ}ewwE;M282;BX&)w1>^O9F%UdKisA)Sq5Pc02p%zW7@fhBs4+8q z@kjYc2Z8RZs7{L5O$SX=RlR;o?313?=7v6YMq87dd^o~KjyMZ&25YX(qoEC}T%9+P ztmFu9{m!~ZWSMR%Z!wgY8L3VzaJGgamVgalcf!Ch#Q%l5Ru zZ`2{inh_sK@yZeKCk&;9E)Qywt1=*DjSU~cTc9IA`T!D^nf{orpkar2NK@?xglw{C z-|N6yqwBkHppkTzA_1h&QWWSg!K=QYX@II=R&-}p5WZH%1n4qnB@VzDn?wEmjJnZ0I)j=HIEDqkwP~6K_ zwd4}95n1y;m52AkFDV)CCLstDcxqK{0m}R(z&09u)Wm5>M_A4DIuzlqTi+~>eRD*;^Jpf0GWD&DGuTx9n+6)!7||wd8#7~ z29?JMlMJckWZiQ>O#VeI(>yv$>4+i|-px?u;>3|B6k~P+9+ZCQ_#b2c0hMI@hY!Oy zOHcuEwkZd#1QeEpeo#mSkyaLvTUnK(jKlqMSJjN2X0&X|6DHRFtW(IWtGQkzMx_HU;FO)yi)P* zjjRHvKQ+_?o@y7z;ox1kL2yt92+R6fCZQsb9Vbx|@_AfZzZfjycDljVG|E=*rUcs zo{`8F{bBW#;*cSD32ci#20o230hUA1n<`{*ko<_!ZCRta?T49a7^eK;w$J&RV5=&X ze($6+H}BgoOc)ml2lOb6bD-r_FCK2P!wnoIZ>vV>Pgi)qcsd=J&-Vx$K`S#t%z>r0 zdmpX zr!g%bFo);z$0uls_jaeKq&>T}SQrU}%y|1KIrbnY@cYS+D)}7Rjdj0d!IPmUO+xEM%aZMgCNo3vOwVVEuPs<$q z@YL+yPtyvEW?w)4dTVZR>N&6I%k3jP3B#d{N2<4vm(vEy=PuGDfB&ht6X|G+b53bMh z+w|2@U9=+&#lo-N@4Tds47@1j)$Ql)LSeQ3$+qe_qQcE&N$q?Z_n|&7mr7@kO^vi^Sf!XYKXRuj6xs6g)Z_ zCaT@ci^FA&qdhLTS9|QL^j{fh4AJy@JAAik<_@v1K*3W|WwQO?WaHtpX3^7)iHpNm zJ@4Iq`ygHJ+QG_uciwhN&o6Iyb}`@g(Zp5XJ$U)q9=UVvVt^OV5*I#_9T)U&w7Y%f zIYZl6@eiqEh~0qVr$X*K_Hl+8J#y{s)W#udr~M1w!`D%XGY@ivmAoHXe4P{hBO5XP zu=~dfyV~=*_oMqiKh3r$&W}HO@cSF5@0^m)fLxxJmb0`Rn22M6|_bMj`@|Nu^hg~KsyujURhxSgJ zUXIpqsEdkLU5@LyE*Ze+@!AEo0u@PkF+ondyZ{i?)Lr{lc~pvfHA8k!!6Gb4BUIZ< z%qb)O(xJMHo1W)03l^cy2RI7?`_F8=^deZk)M}E72R>a;vl;L!zg2u6)U5Pnhz+Z4 zv`p|wyt!KsmKRFbYBN?ow{WxJ)_uLA(qbL4;`53HEsiG}Y4JCQe;&FHll^x#szJQ# zoQi;d@dz6#Wg&EEFDL(`=B1q^GQ~?QKC}l`)wm@Ny`fS0;_R~^azf?nnU*XZx$>kaE-5jd|m&7B~}#!g1c!b_(DaUY*xLl{X&M@Yr#%)dz>m)C!g9*R`fg* zy9Yg7Y7vQPXe#T~y(}O`RQNElDWt=_rmOi(?2&l--b2GV`8tdK(yS|#z6W)?8@=)u z&T-$|&E9=}rhUOQMW79h{Cee7{pEF6#>rQvd3h&WUNwpX+h#@Pb=y9VB|>n7%kYD2 zQTT&tgUQ$7{&bRS*$agu0tpAawR>)qz1)%%C7>o6WyuFt+Wm+3uw&i@=f=Me4`X~E zzOK;^;`aJ;yO=JX0cGE^ernxczkT21@zOPyCo24)@Dcp43U&3BRz2ms5e2w3^?qIR zZ9ADE7E?#XDtk;VOMKNqfK+diT^a-VBZug6L=HI2Z9&ZUm|NK>-b8HG0adHUirn{It@b0h4Kod+(I*OplV${5&r;-LuyB#) z=hYHJAR&pPV6ht6UThnP<4&Z7Eb_8}o!o4@TJN}~mjIV2LBao9L@FZG9RfD)88)QUQ?=;9~Fb_l`>x zssy?~n9rBlQU>!3yP`!j0*1C;AF}1Va`qGFfMEgos?F*z6w6f4+OFr{y>?eOVpN%=_&kWxIGMEz=9>yqrnaRG-w+Z)DAWT zJI=8LiLiZ_ZzzFAjOk69|ioe^QIko*oaykrziP1fBV{<6}$CsG6dR0POwuezF9U?}F?93>tXZuXFbdu!>WRLcR>MvsbQ(5sb3 zEb^>)8$IYFTt}Jx>9MAlB0+{-i!$uyd_fg}dNO8KX=gKW8Ih7Na{N8&o3!HtiZqh|-R2E-GRy2aWfz(Y8(u;V;sCl3t;3%H>JsF_=S6OzmvysK)-LWYB4oT}MWNrQw<(3ox*b|fr~S~Jh1mz<7C z@B6}rpdYg1gXkfOA6BVOjm;vd=~(#EW3K71Y0jUA(ei}!J}WB#k;#aHew`NjAyk$} zA#8A*w^pLGI&M@f&EHso=}XS z^(ZuI(Tui3Nl$h!A!BiHT>{Z%QmFioH+r%TkIKl79NKray`ezO< z9vz0ElxSqwZ05vaa)s(LtdAHX!rpScQw%HWpUgscx}%mbf*2NT$`$j~TvQx) zb%G0xPRo<*DXFEOE!9Q|fe!78BthejDY5AyYhVHn@tzy=hYZKembF)uz8EMK^!080 z10rk&cOM6h(=Q&%He=r{TNcFt%736BIRCTM0{}2^6JiRfmr+!fQdE{z!pdQl_@$tz zz%Tj#%oXJo75_7rSCEyLmywr~R+Qa^l@?Qz6jK)!(?IW1N6Bf5Xegs_io&K!C{wJM zzM`atf{d!73|2u#Nl`{YQAS=-RzXpYzZ)ebMXaI%zm)z{{0Xa|sG_K-s=#+bQczY@ zML? zb+?v^zMitCAy(Z`NmWl?*+3SnCyUjV!D>ihH6^gRVoG`#tR6~|DNn@Z16U=cD8nQwvIM-uGaP*R*vpA4vu^iM0*GR+nlUL&qTE9sIx>GJO5m+|QpcH~M+%5}?}YKz=kR{5P4)IsxeQ>Ml9MkP!7C2KnL zFIwlnX;l7Dula>*{%+m4=2bfvS~VPTc`)+g0P#ZKfzqBZ`jfEYhv7xt#KOA=i`o*4 zTaJ{}A1=6_oO|h5c1dRTS#mBlJ2x+%cDAq}zr2`QdA{K4rQ)h97q4HxQd52XR$Wcw zt@@_s=9W9m=C-@dcONx%4Ro+Zy8A{S^^ddq`vwO3M+OJRMn+ydXHQMNelus zvcbPvqwoIRPkfmDV0 z>%0F8vwiftwtn$pHt+v6&K{DMm+85|p!^qSD?B=ypN(+%56%wN8nipo1sar*$+vhJ zxvL;vCFa<_Nf)`DhesFAS(hRf3kxaWXLdK)4b`5;Uso4P@WwOIbSKF}HF1uLx0cGh zco$;M6I`@w_xX4q`fwpcCGguzZ{#@$|9zH+EjaHZ;a ztajYh^yTiQtC_#nR*FyYwD~e3$%NG#G>yj9n}xeSu2$1sbk=IhgA&$iD`Feh>Z;N{ zuGKU0bv`!KTuk_QtD&y(V`FpY$B#`s=2M+d%^lMTiF6sv!QPgKm6i5_Ml7IQP+1}| zsr8Y@gEg4k5C=>cbZH{Dy$rhI+ws&p@k{5NP7TmGknrY9*U}l`+g(d_i7nl;H=Djb zc+{q=|8V1}?wwXhE90A;-pfySnuMTwTs!4|{tklt3t-v81{;6B^|dKhF?+R`B%ojV zo-DW(e4P#!QjgI~Y1}Fxv>}vAn!n%DVqhGR+BIzMuxZKb6d?$b+XF(+d_GpM$?t?v ztwJsULUwnAjvxf&=`1?|%)jgiu+OPpJ54P@HmE3R(JWUb7YAUj5Wn|L1poffd)xo_ zgFC{851F5CyMMc9I*F1e0z9}vA#4#yh(i0#D zX=FP0UFhQA-V<-P-nOs+cZ(jV_}(h?<~`Ly!so}z#{mbxU9D$m_njbg--tmo=Eoq8 zh1Xk6%NYR+c?I-1>vg;oJEub{!V!jcjz+Ju>>n?z`QM%b4%3pz(E(7PU>ec6nGU;?9$MJ zI?m{<;3*EswnL>DA>2uBjQt$aHcL!0y-`G=hX!buDmh~2{rkk%FSB7zmM z_ACc38IH$-#VVj0P%+zNjI)1k@md4yb@swhbYl%>*jw8%7u2vO!?dNh2A+2YbS z=(kgD2xkF&qNX>$yaKA;dwFllMSt5%;r1h;X}LNL;A^KTJzDoB@`XqYfjn_CfX0&5 zu)Xw_Es(mgG6Dg-&nu|H8|)Jrp*n1YY>CZ_mSgh*Mja#rS3Tjm^ufdq3PjM23~F9s z0oaAWu9pX8B0>d&{W$Oo#9O+DWv`n(#tJxBfF+}hgaZO@2%hR;34n3bfee(~?2wC^ z4hICs;o;2tP8!73fo8vjJ24&a)w*5>CONkwr0zQFHskUhZ!jRq$Ud#xpn=0NsuGf1 z7F>wlspXDW7SZa%JJ10{z=CFW(G7?qkbB`V0b|#|i_|~}E0O+;XWwHw>l1H`KF(!; zzyJVA3ChtmQT?GD@po1=g{R)fS$3S!7)X+&lX2E*UD1?GcP(l27es zr5GcwA#&9Z{KdUj;^#DrV@&kV>CX_s89~o0H!La83L+#Us7L6#)zwqpAWbcnU9aTA z-3wj47Lv~k6xyP*vATnJbQ_)OwWK2VXUNUFt?bh1l7{u4XN2Om@_MfiI$?i?L&n=K z-W&a3aPrRx5#3%f=(TKo<R-dWOz`|KJU?X|d1UP?SSPvPqW0`U^;Mg;erjZpHie{WsfR)1N-m=Y)`9OrXei3wa_&?Wz^uk6Z@K)V2*%Xyv=H2_Zs zZbqUHDpISO;&nv?erNl2P$zy>(-;iK5i3O2> zvOuu_d^rjcGFa6B#{&L9KAl?BWo>ZgFdTs7ZppA)GV~k?y~cO8WPyqZ=ugDcyEvYzT5$*>0A@h1lF;wj5XDsJb1r#@ z0I~_lNm&Nr$gXP)lpGUeNQAP9=;3;hL~JhUDM+0Ron+>!;lM^j=*zg%awH=)BcW9+ zMjGn|o!ijqSe?04A>ou`anmo;m~Ug^gA|0762w0lr{F* z!x~_B46Ke=utrAD5`APzfEy7di#V6G8&FS$x{<-H?V!IVU^wfP7W)*-A{HQn!8qTi z2r#<75Y99j-z<#O04xUG1$JksFwEhQQ*)aK$I_2-hQQaVfvq&$3N5zS-1pv!=J6H_PC^Ctr$Hbm2Z>P^}nxnO2*)t_#Yb1$% zrI7-qz=@(WeWlUMr82Lqs7h;pK^lC1wYFR0sAflWn2ikd?B>^Lino- z2mV|j%J5yEF2?M;7@Ki1{_@3y?u$vUE*|0AUdvocvAlGA-=(ySOX-&{Wp-aW_3F}@ zKbOcd71@>*x%(>eGb(78D+;L;sC(KgYfx7GCJybhysuQFN6ngYk&m+uqGb(<$tvG#MNtJ z*XH+SsSyD*0RG_!1W~WuTmTC)%m-5J6o>%70|HArYUgsDkpfmx2h`a~+soI*wHb_F zaL++TOAhYi8fk}AhHTWfxM!rnF#H-1Alr2fGHz5Eds+>;)KJq^K58fSyI9RcY2VjA z0WmNf);228Hxa5fYfLw<)V6G_w$9YHDKNCS0hMxb<@@%#<1lUvs9mGBC!Y&pA_wWn zQM!;X9jc@XZD3y>VAotUuIwivhv~>?L}Wb!>Pmpt5s{IV$PrHM1wZ642lnI{Y>0_; zAVEXO$fqo!KvEUSN_&7M#0y|S{kS4bBJwO58p1+8#R^Aoq28E=^A5;Pj_6t||4DEy3FTeGEAPek6q!@TKMUQE8}7Jwo{JuxtE zJgik#+rL1_AAtE{U|t@3J?PE8cvvv5nVyXtARtGW$Wg4YCjq*jg&gL#3TJG%Tp~_|#jEN@}HZBYE#N9cU0>J1c)j#wvLLk_? zwuTVqxrO5GUswOU1P@=xK(>RCOTzXoQ0#2 zlZEaNiagJ08esOw=KwvE#=h2fb5$}#22EiA#1QKnHgY#RyF{5_3uh&K-F4S5v6JL* z%KW4Ymfh(td@t*Tb>Js((@#iTb@+*M_f8vk?hJv^_}y1nryPSVOf|YP%QE=m**+Nb zB3;n(y!qTAo8mW`cRTi$1_XlD@b{eDubk7g>~O4Q3cgo!uOJIv#tDjH5mkiy>0p0R ztRO#sxhYKW0$H$(z2D5~!SNRlvaz7fjqW=y_cy^nW!Q(QDg5qpP_<+CMLbB32Y{E& zA6?=+B>4%LJAtrRpgc_QcKtqURa327UL~p+6&l!uEAmMF;5)fTXw%0MY!JHKq!tE6 zUk3Ygh3;};7%nh(Hjh{C)l4{8jsu~%BL5Nvp+>+Tb>P#35^XH(4qg~M7yeTU3?@Ml zqmPcIfC=;-Ir)e`!o7F7Lh!IKmRd>Y!2))SKm2ubKy6m%hoE~ORwF72Dq$suF>Z##|s^P|m z!_9NUxBm?@tS#?Mq4{VtTIW4MZIo&cTb$)OP(PyepFM=yfOWB_%Da>%Yq~bj@|M=@^ zgjoEH%R2jcS`ak!IFJ4J;Qc&YDTobSSn#e)D=OPk#7f$!S74?y=^$)ELuB;7fycG|!RwjX~ z_0T&ckPP9?)R-tyr!FR;F21oY$*MNF^4%@v`r|sVw1WD~;rcT|4I8Irb3z-al?~@! zHp<>y7Vq?9I@U8oe!R*F6R_|+#n(oRz?Y`giXsfB` ziWiz{Aq1L`-x}fFtaLYTP+Y362mA<#v8*hL9c$-^ryLx!>itim? z(j8y=9c|{F?X5d5*JQw+ObC(LbDn9i7~y+O2K|>AsR|Yo&eTq94J($Bd6U#J)2bwA z?ijXQXx}z%0@l0&HvQXr`0-d&nC+MMZ9JUrN`>Q!*}3G^FJqrq!5{pOt**Df6pylh zu$udL_lILEM{dj1oxnBPtkoXHZA)fU9Fa971NKs2hENcepGorN?YJ~N0LCN=hcaQU+^;L|q!(Jg-X;0A zV}!#Bt6a%CS_EhWdru<)W`VR>AD4FF!0zIOgSb!-5gLS3a<7DXmJg0%T0%6zFZW|) z*q~RgQ0?Q|?pzp?E93+4K;5oNen6Ecq0oQ`-N!%<0yh6bVUiIfLshU=G)4{!7NUcB zscZCKNCy#A9f{96fOn}253-Qs0O~mdv77qCA{pan2$mE&)bs~g$As?8ev|B|+$-|a z_uF%r(a(z)ziU5-iah}v0e}k@7QnsY&4G^Y=Vtm^yP6hBw0pba3t^tWSv?$oKjheVG@yaNkT0j)T_?Yh5*N>9faVvKQS zD)fjQLS8>_=O0^X`-R>1OQjJkc5NzI%#SQINEFsK67C21nr-*ROWXR&umU3TU6z;+ z5!Qhd#$!OU(Y%%GLjDC}J`ABJXcz_u(7bnmbsr8s8-`NU8(J!8i9#sY9!H>L^(j}N z`2GstMVDd)n=?=uza_Ua^}W}eF8h7(xTwGXajuO2vR9?q;oD0ukf9e;Jn!R=Eqh5y zW`{$Al(ol3^x~f16y%WnKL#`gwj3C!4Ez*yd;g;|Fu5QOCfC0a=bODWRHk#d+DX~1 z*5kZ}nle7UOllY+61B~P$%k->y?H1lmnvx$q1=R028Mi-R+{BXM<8%G_p)I%xCL+X zo+TLo7wo<6ay9g4!gS02CobvWMH*};T#x2^(z#F+y04$mnq5P~s5mi+ERIUj^4L{7 zs^b2wV1phixjB8yBXwC5HB zigJxj@v-^6 z^h3wm^Ro%T9LV(2u*26?X_va6yJl_q3s=Jd(@D#oKXv{-cCab`y{_ta z1C&15n*|02@1F_?j>wyG2#Pyw78I5|a2FqXqD3<}A`3Qcd*BeNGbFmC=*aB8(u1A* z;`aJqoQkWj?F?n!Y?%r@eDA|WjikUYyTgwTnytMFc;;-rKUK+CYASU;PwH*j$)bA) zPBvZrec<$On@+_{9?XJB+4*pfn3Ie$izJA|cD?s?{!{OFRz0;V>YQ+q{e-pQa@V4T z*}K{3Qr9zW9%Vi*GT!I?W4jMtipaN&y&PB99eXADsb$>N6U*Ik*Ryy6R`EBe8u#O? zOI)lD)n1Cdf2jU?zE#4l`nvlGO?RGJCAQpKzMpvKiGX!d>!8Mir1s}7)`#!T#6CED zZ$97pNcT$JgCh^VJ+)4L^n3Y1@{=8bJ)}gGGL7a8b^Z5N#@IU`SDJULhwdiPi>vuy0d+#p!wr(9rU6tkXopI%a}%@?3ZNN1N=tN%&y`JReE&$+C!q`S z3y4V`N?W`-&?BDyIr3UYdIHxm{Z*0W64uh5qpW7F*#(JbVH~hu4;!TvD)Zh%8#bl=+knG z%*ODUQbGt(z-$VIPNV0%+jKE^DU};jw$IT#9`F&|0Ki818Jz_bB$1&aF-;h&N=I~CtCi4g{#%{MDdCKXvLphuC~7>O0u9aSeT`ogX9Z3 z)hR}0SGSwX?iZycxiM<$mhK)wFUl_U$7q;!yL+d-IDZ{_P|MlU!|&pY@_MI(I)U9D zL7guy+{rztchJ%^bo#}`d;JFuQoB75{CaWe2{aa$$FuZ`lANpqwG8gyUId15do(!;up5%HAS+tz(-Oh8FfwoUrmuMi(m+d5LfvW2SkR( zIxAxK0Tjpp0|=~u37dt8qGwB|5FuDIb%YZ=TeZAb_T7++h$%kTn;b27bBN^`Y2^V& z;1Sapszq-P>gxC7@{0&p^Zd}^YKL7C(c~V)0X`Ro1Qjk;G-{p2!2D?tdHN6l58;51 zM!5(c;J8@y3VG<+sLD^VSppVV9=P)w9&p2#X|t??eKdN6mjJ4&DHbA&Bc=**b;Sw* zfn?0D^9|U+-Fybysl@;ar!|W)B42s$2DQIpvIN9PWJq%$Su4cB)NRCFt7;l7>&CL0 z@#qn&V8LAJPm?Uq?n|1x2)lopBIv;aO{v>=_D-qA?i_uSrN-KAxalgmrDC<3HuGQ} zmdtlQJn;SE%)=Gug_OPPAyL45wnrqNl&iicQYd(~SL!J#-|S%|`rK-fg6(^;tl2P(A^mKy+R?L% z_r}yy#0Tbmk8Xw|`*~u-qi2n7zmtBFb5-M=^x&oTd88K$gdPP1^xW`Zm5G3k2@Ho^_)Af!B67;&nb6wEjSz`1d!|t>>qU&o+X23{Wrv3 zRc33%fTSLB^9<8lg+1V^(`}MZb!%8q&}!yPf^|Pwi0$Isz6<8c=xsgUA{-vC%pXJz z;Bu7{i9Cd=a20xi|62y(+rnY>LO^1bSmFI@C#71tdh4Di<%R9BmhNMM#W%E*J5r+r zK89`Dg^nz1WJ941 z07w~78KR1Qiio!t(u@exOru}PX$}->UNtuaT5`qtCOvu$Ah9ZD-u{2tQn%?2>Ez;0 zFpgmXzuYbnKJjh;Lu)~#8)ed$35>?vn195&KYh<&_o4*rtEeVT_$Dsx;FZ%0S{28T zxSYH*f5D&N^uKdYf_{VbieJL^?Ux8D6^__&nDi>~x^ZU-YCxRh`r#ig^gT^K`GEK1 zohJVzBEA#8Yz;DAbRr|mFex#*3L9soY-S4k$R_f=0xa7{VhyCD5&zx@`G)ky($!#r zOTAO~S=r)f?&e$;DvD)J6NEC8hyOZA0rMRa4a7Wsi-=cDhJ)CPeWzP9R0L*&k6(ge zzV7d+oLe66l{``^9P?X6s?!@h8EyCJFMLyuCN?VyC4!^-x((`$?PCbdk{ODyvXa2wxB2{^&}hj z@;#%ZPl40}C{PSV*Rf0^-NE!6SR*7`6%T?EK^A(w26L6=D%DcylwBbpi4a}mEwoWI zMQXJTT;tf$vA%F*jaiPp%WB>$bn#I6i7N{ z9PDx`j1p1UW*O~5lz7_wij3j{Vw(Ugq$#f7yk55>X2Zpx(4}!A-_1>5TDo3}3_1{g z)y9c(b45l6*Jdyh}y;=4u?*$O$1*iy9XvRZ1PD8nc4UX%B zjT7Xe(0*|O8NEtQUmQG-S65IwSK9=ATrHhy-$G5751acGO0-0g6Wrf}6(dAUXjM0w1!EG+Duy=SZM$nDRM zd}kFBXd_JJ5r!J9dMT=q_)(ik+(sVRGpl%)&GELO=Zd3k@xm07N_T`81VF88jYc;jz*U+nh& zJnCKYYFv5E``f?qd8E%d86U3R^L$GmYj>ageLlaEe9mM%w>$g%^ktvTW}lPYKJQ1L z-v-KMUeN}R$)o;^p+N-TmCsgfG|!u~xG-s1J85-y(mK`Oj_rSeMSl=hBtxP|(?CjjAl0clnFdgK zI8t6)HL|xYHT$JF@decaz_W8KSTDWua`t|B>HX!U6*s{9V3DbMpvl0bzjL7Fe!A>X z#k4fPpHx#}6E2Dips-MKn-ChE!q3JLqX|WMP@aeZZu?(A#%O%9#exa3;X-Uk({ZPR zY>I+xYNr!^=4`l4B~48m1=4L+-36QrLv!Kj76{dWA{!P>hC!v8)QPhkQbOz9QxP#^ z0SE8q=sxnpZTso)wjq0lCX2`r>&+aCkdnh=L8oN`8XSRiH;SxQodCNDg)0^hso!T- zS_Duuiy)TLvli(&#*h3=9_3ik{j8Y*c0~U@?3^Ofv;!&U7jD)+RT9-ek>5tRy1|c= z;Sx;v@ep`)3YEmxK2{hUJwPj*f>>2RoM>>@&DoQ8{j9kmwiP*+L}=zJ)H;4r=Plx- z8+A7kQc?8EdSH5Ih-u6v2HeB zLWGz%yuLK%$HMNnHhY^j>;I1hAVYFoXUQCtpgftH8UlB10PWJsCK$szgmR8;!c$4` zG;TiM6U>_kPwUDLeMvh(f+xjuj)YLnak;5oL|-A2)>&xkd@BwAEuHvb8K)hdn( z90)QS5IJCTAn_ku7Aq)2B&%bxRcVx67TE-`XrwgQ=rM3S9;zY@KE4URct78lLv!r{ zEF_nmLa1g;vP!xDfd%m2UdS{8rUk_xcx{hfFe5-cilL|Cp%x9H_FtjSn{Xw81s@vp z1YU6C3*r=FC9y7twYg-eKl`r&BqmKM=2e2u69Ls#aNK4#UlVg5s69r`jl6a+T!S{c z2`5e?!ZenJD{_v7V(pJWu>!E9X*gka*@c;te36=_v2vPl)@Kv0 zx{S!+k#>HJT+OGmPVoy*u)~dt}ZrWgi4p^GM>oG=J**vnmAs zshF*>4M!mwRp@Ui765vP+&hjytx_cD`%&@L(yM?N4J6P&0dWvTb&yY}+#+YFIeFd^ zJKtynwFbiQ*boZmt6jtUU;2XI)su_aIgSmX>pbfBU&61?_)|r}DsGe?TIy#59Te5i z4rcTZMrvo%i%J?G|I`t-97r~P&UTZ!2SdA{PuoLF1U-w$CVk>Ptk?~s3$Ji7QtP7T zSD6>V^7@CzV}^s@Vnm3cYYj)!SC;e@E`K`){QiO7@Pkv zas6Q${KG8n$L zq$rSnDqzZ0<1l`g%>8FJ0)kV6vQk4tB=#x&R545q8~hpgoD!7vGo(Hh=KgDcA1G`P z6fjST9Xu+Rp6c^WJR&%aczr7Nra&Z2K-G45rNep0$Xem#_&6-xXJ#U!3;zDcF} z{Iu^TE3!cf4HQ}W37-?Ge0lb@6SJ_4Kf%BMC`yBZPH&dGDkB-`H|PJz;WmpkH+|PA zS?Pa_*dS#r>;yjNlF!ek`SVqp;A`JNva6ZpDj$qi)H5a=l`{0t*saTTQTl{!Yo3Y4)hCEv%xIYH0n0^L_g;lEv0&dQsXf zy)b(1hbEi0T60xLv;Qe3`Fi-*Pt$$9d1dzXek}<X1#Oto!FsuL<9&oFtBg`$ zAKci0k#)cHk!IX--3oc$^}NC1t>bIBZ;CA$ClU}cClV466YF9MALs7xeb=>YsNk*= z@h;})7B!2{sjPGvm7%RIEU>x3J^qq*r7^gEl}*ml zxScgkb#HF{RG)x=b9t{wflRHDazSYT-ic;3Y*9^)xLYb<5goI=h{i_FE|u8UK;2YJ z10VTcv~jRQ@fm zKNLv*ciFuUWsbC5x{~4N)MvLFBOze_2}aYnmibub|IpHZ17yL+fGVI~;XgX||0w7A zx_Nm;tc;SXw36B`B{lK?mIPM)e=EC`R3(*^WfZah71%2&{7)4B|1kg0KL2;)ALGAw z{`Z3a9Fl)b{sI5b`k#QGzeQe2Rt766sUj|^EGDUnkyJ%Xs-bqNib$x6NvQ6UP?Z)} zkr7js6IE9b(NM%_DM{#JWeruart0bz8d}zxx_fl=t@ZRQ^mR@3b&d3O3=P!v4CJ&8 z#ncT^DuyU!eWbF1unJB{1&2^J5>UoLRSm&v1|T&YNYfOgWe(D`2C3PA)a^l<&LAyU zu#Oi*-&epi7-1ET*b^aS8-aF;5_OH1@F2=~g{k-k<3jzcBlkMTdwCt%>vzI0C^InR zbZ}^PXjnEeEc;+cPNH9S>fY>A&g3%=WHSDAmTkrv>!T;l4`rG}ox&X;>+d7$gpf6Z zD5`-JMgJT*|2!!_s)S#GxPPH|V6j9NF$&zu&2Y%s7Rt!tl3`#!f(Ld?Z zKWp>F^YpKp^snmluWIzKs-@plOSx*L-_*;#YM%e5RnFDAu&#A!UHkI7cGbG>jqke6 zzqH#o4cdR2wy&GDe>HFWXw|x4d*_uy%X8bv~v+5>9u1lBbM-l_|z zsR_7oGl0PeU|b8lel_TN)xN7&!mnOAaIGrh#?{Ch*Q2X%#Maiv*ViAqb?Z=LQ+#s^ zzYaCuNoZy!HZzl&TaUD~9lhOtqP2tEaqn#RgR)1DulD!X4?kl*AHP2}H83|f%Hh2H z@L_IkZRy*$FB=>Gf3);;##yR{?EiY!3oyzD=7w6UU8yoY<(t8H%6U!SInVFlh+ejo`_Z0en;D@kor$i@ipiOT6UdI$wgsnagl7AGh9lw5GwY)@Ay0ERR9?9)PtR=~JD^R9lQZ2RAsspF7CGS7A&Hws8gBUKJ|-X*Xw9j0 z(QP1hbW30@aS$*RUmZ^yqEQBvywVVDR#YLI6kphaj+1a(s3GZW1j?u;FYE$ z>-BpD9LZ#M|2#VV;t8Ietks+-MXxbuf`YPv1lWMREh9>q0sg~~K&F!7|a zg%xp8vTSs>Lh1UzkidvOPpHg#{%oq=Vx7=89wM0ol~fS4*|_Od2|VM$maKhnvzKkQ zH!1|fGd(hfJQ7knswfNL#RJ-*l;Zi=G`$X9M>iPFEbOs*E3|bt>%$r+VvPGh@mtT2 zM@X^qj&l<5Tf89ytg9dc7rYk;-3d8V_%U6D>p$$+y7dv-7A48L)33e9`Upz9x-BS` z-IAm4porp*$4aHP6D40 zf~_YyX!5u!!=_#i6<2(vcwhf*#|>?lze{A#o4JUV;tZ2zG22I15qLe91l$ zS!23w*BifB{1hLiMFo3=W!at-wn+*u-n30H$+k6qmYEhBBc(CjWpQ~tdA{PQ)L4Rf z&(Y!RQ-;=Qo1J6jK}4vT^03rEzDpyR|4)>}|n7%6I2YkI}5p8(8mAOoC1= z)+bp!MczC-y)xV50qx=JYSCsDTp>_(3qhaUxcCl?9BG{^W2aZRZE?9(@L=w=>GcZteFL{new#bPm8s+< zx{Ma9d@6TZQR$U8FnZejQw1-*()*0d?aDQuD*dik`ZNvPK7U}<)*GXm#^Kv|$INjS z6#MO*o8~J+jqA$f&A0p6R^Hj~&}SZT?yd93H$35+RW`FE)eSEPhFfnilAYA1*d~=e z-23OmuF0<4+o17J z^Skvc-afdq^GGB8(PjkpnD3<{k+J3?5VpUEb|nkftc-rY(~~#$I0M&$74oACzWY2` zzAsjOdQ9hNs&9D5=aNM0cH7#E{Q-M@k89ozbf{X{ldslT*OLBXzZ~lB#T#F08uq;K zpEdOXWA)3B{yEHPVflxlDN#@ z0o0K896sir-n{Rmy!(v6qg9}I(Uhc{F_XI5GB_Uw{ZC8ea_~2>A!s@13=mN*wJH7; zU;&Yo_$3a(mfjUND=rZe;s3{Xv6iG@7WCbh*ho&mX zQt;9gRTP;ZMWRR(X>tUHERi8c(3B&x_(8$(gQ|F%LwVZ$VmaM_5ImZ1hSDytLJ*2ELm@o7QP+FK(Hc7~el+-$jPqixtamp$v;qx^Z%{vL-m ztl)2Sj@#}ih_sJ8Y%fT(jmcPk=!n^YQ$`0)8$?&@A8s*>xoj%vG*0L>P8u{#zG0R& zWSTx=nm%fhe%JWlFf09$VftgB3(+8BTt8z%KjSITj>yh@@jJT8oYKmi(##Y`S4#ob z2c~Fd39}5*EL}KD7k#8<&C#;wXt{H={5jf*IanV-uC1?LS6{Whu3~-d znRPX%*H)LVxlpp^e94-slC@PO>#9lu&XxvOmTs;r+frV(sjPHkNpWD|slbybgHD_X zK5=5xsZ(1Ei?$V&hL)V!QC6|*bY)n1Wkki<$jYj{Rp+D6Ur4O0%Wi2Y>u7Hsyf$?A z?%jtEpFDXoK0ZD%F)=wg`Sj`2XV0EJfBqcka(wyn<*Qe(UcY|*=FOY8Z{JQ$O}%^f z?*04sA3l5lMq$p(%*@Wte*E}xZf@?=r%#_hfBy32%l!QO*RNl{ef#$P`}c)~g&#kD zEG{no9mZM5$f$t)5aR*u@v;<`g}cS%1ei1g8o(3PJ>az=r%rF7d>oGDoukFV01&ePG=Kor8YT?5OkM%>bcepMrEa`! zp(lkgu=8Ih`sk;kZ64B#(jr`Rtl;f2Ly%S8o)V0y4VOv4BSVJ!>Og~SJ( z*dtZGyr3OnJJ%qo98wqvTMXn;!2%?)v~r!jgb|vCAXPg+u{^uLe3(WwKSoBoWrtAU zbiJ@+*gL$?I>&$2PBZH{?QDN*+^=i#j(Gpj#rKz1wz;vQld4oDSKIBZ<8wu~O)Uxki?ouw5EEO6ip%y~5?MQj@W1|uT+UCIk zmESJm+fZ5sL=ez~g@A;S-b33o*IZ0R&U#@Bi2+Q-R$j0j2yPlWZ3AVZ5ZV!t%6g)a zCVS$A;ZV!j;WC-U@DN*BbU+dQP*{Qvy8xDS8zK$rhA}}ln4C6X(N-Zx2WKt2t$~jx z^I3?YHKm3_e2^cPq|#!IImt^5@#|D++aD*}m;}iM0lVNZB~=6Y!s0NH)ZmakM;I=> z&X6vQ~+OMJK9F>01!B=HR7g&>(|qYwEEHX_FVl_{djaSr8hcDk$_>UYg2mSsjxyL}VD> z%(n(@W z0T|+-DNoSE60`td2wG@@mK=d4OJK=p=!ikklP2g%X|PcmYy^P=Cvac{jwDeZN;Hrl z0Wg#x8A*_gB}k?cWHSkhg#^VCLa~BStsyiU2;B|>WTqHSU`9*VFILp$!qxkM>@M5}tm;#Z|$eT2BxSxWvn`1LvXfLygrc^V-{ ziQA5mLr+k5o??a7 zTb6pwGWCW<+OT>0s9DBc(~JkkOX(!Tj4^|ZG5w5395EhqfUyf1<#tUTgtI_g)t>&ozP|qc{(*skYuBy~4h~+w ze*MOc8#iy>92y!L9v&VU8M$@q*68Ty?c2BS+_?k9GWYJ?yMO=wg9i^DK72SfHumVz zqsNaQ|Nj}@w8z2W(ulTcq9h8U2~9#^ih#+AGFtwK;K^ip34P1x=AhD!M3Ta0|9-D= zhXl08&=7cI5{9-i2d`Oco4`+0G2DnBs%1LFgB=E@NoA?ZCOgKO&7M9V$iT9la!lL9 ziia;iFS?h8mGmiC2+%8P1zWR7XPCajQIIMM|I3Ft}s;rfV27?_LdUsC30i ztxwhzx^%(vJi|Q$k>#!!`STl8%XmdLeDYrGo(Ip8WRx^*`RtYsx`^(cKeg!HLh`Aa zO_TeX+!oXqS!S>%V=A8$>?qROMkl$~+rz)k=A1|z0x_zH36UpoS@AMvmxx1BCiep3 z3Hf0`NM*-Ypa4EZW3B_Wl{Jz~4|TGRL+P^ZVv%IE7#R83#@Ym&MQFZ%qGSxQQ*JA} z_Fgc(irXQiCJDjlApGo6RiDvjQU>C6pKa#xP)MnijVv(I-$^#MpSII`f(pzphT0&_ z1W{{}jk@^$AnGNe4R)L5Y(HhY;nv`zD*sg5;1RRol5*Nf(*Xh>=x$f7LSd00!DH48 zElE4dmn1z|ot2>AG-Tf?=ggbv)v2qWOjY78IG!%W7=7`NTs&zVbOL8TUT;shIMjjC zzUl_Fri*I7$w}5+-z!PXblaCq2oaEaG*Yh2qI50_C%O;@Ps?V_ z_USY@eRt6f=S|om?{CxQ?bpXyClJ#ECXdp~%Dtp?8mILW6}Y49qn8wS*tJVb6c{rSUvOOq_HSsY=u#cVgNW=YE-_pb;emHY=O=4f*dUz=4$)th?Y?6Ne*fiO6hUWx z@?h}w`KPHA*{{#yEZohWZ`mNb|3!hpjr}i0Yh_zs3QTUid{t7Ha^Q9T*^Jf~9am&8 zme$@pbl_d4yoSa5mhIOLemMX0an$4XpSmqG4pIcu_oobQn!T;Cx)Akpr`&S0vD}A0 zY94{X|IylE;7ec@$N+TaFPZ_WA%EjP3Ru00{Xd{8H-_6#^B|_4q#ks7gUY44fErc>)tl z&|IP_Z8Sj}7(XOS)RiIXNfX&pM12&|07){06AfWRBPh`jD!v*+iKY;eIfP^hAuofF zmqRFA2-OBcwS&+cBPo~0Zp~CuXr42{$0ePxHdFsJ=8k>(2wiJ-J9;ae!kRX?lQI0tZtR?{c#=Fb3FEnk)}&uW?1 zY5uCy^i{k08xv63&EKfa-^tD2NdW4W##{gFw=7y#3ZF|*8v=9v#HG9Oq9?=KhK<7VHp z&ADTL_EyGVopS=9vskP&@uv(VDm|xo%DIcff z%{JYgsY*(ArOl8M#{}x~zIkqKsk9tnB}#g=ZNjxY#;QsxDXfi;l)w(SeJz5?5^My} z*Wtlk+<3)(8dW4}KTeZ(f;vn>SGXTVIt$Au;*xQC+oq-_f*CUTIy}MX(7=(+E(%y@ z!Ssxs8`1H0f#%8=gZCS)H|EBd3IlObal8>aTv=A7V!W+m+jFw<4w+naBg;5F{545t5kiq z`<8M%M`LBvIe~J_!&SH6#P5*JXYo!hy1gblt_|H7*JfHV6Jy?kp~Ob5?vlQ%Z@#`@ z4m|^QM6-5>)TQd)hSK8>;zh&``7<&GgQNh}FU$_AuEICSOI;b>BBdW0CW6YElvhj0ubL(y z*$qxBVK_>8HQz-_nk|rDZTVO=##kJk=dstD=m zRWKbdw3T=S3@5t!WZNfTv)d@z4!4=rah+Y;95irgZcRk5(u!Br5^(I?+YeTt)a`+; z%hjcO2pLW*k(WvYu}Iq1P>wxDZK^s>T4GOVU994RfKCrv!t4&Q~ zj~_mE@qJa@qJ_&2%!Y+Gt&Vy>-t#QxEaz@*`C$D?X5Ev6pC9bLiGJA}XZ7Rror9+q zzD<=px%{Q4^U%R>(-*ERYu37Lb=c+G!z%Bes@Di0Fue^78=^e1S@#p=cNw;GF#M7AvUf8O}>^WU3)Ziv4p&j0>h z=l@@y#e}-VfWHRo0s0Hrq3{=gUx9&pfCK|Hnut=FwF(baDy;Cpe#=~dlk~aSIT&ejQKk0Wx-NbA+k0*2LnS@@MBEKq4d37dfLl!MKkGlC7X=@QJ^fYtVS*_g{wD#3$ zA8cVAx~#{)Y7lqTII+Vtt;a0A&oaH=GJVi8{f0&QkVX0}^US*@84rMmKTx?h%zSK+ z`B-19vnF&ip6X-(L++llGGDTUuUNv@0J#7Z0}zeoZ{C?^2&d`785#i5EC8x#mLi%Z zi)P4KGo-9(QqD9f_X8wEY8DP4m1#-&*xpjfk@}1W5o!R_V zyJ=pp@iV94lYae2gSuJ6x>=*T8RNPcliC@x+UeyrA8c#hIo3?M*1YwsdE;CAI-vgL z*2d?NEl>ZsG?8#+T-g5jSl6S9zK6|&_XbAp{GX<<)R~b1LcT2og>gA<8a`nYD@SlB zWpaR-dKy1H@yMs$jtOdVvHo8%Nv?Tpmjt)_LYk{GG~g0zYgU_8qT#9s3-i`JY0Ac- z<5NQu6IUgrV(<9hH_(hxGEF0{?#R`aIW4Qs{h_&s*e5H+tS_7%vXi2Cl>4=G#Jegm zEYTw4bYdA1k;aOxEqgAHqsj9Og!S0;}y7J>;^R>-t z5q2wzoKCtVci>(RQ{4(376XGu6I`?L)kiJhgFXkO80!%BT9Pi=h2}dRj4DGbvNb(Y z^F8BbIc&zzfnW?VU)E=C!fCJQp0$ILuXmB8@*dV~vgYxHns_uDKaYzIY5>{Fg|NL` zH1kI}4hjy_0i9T0RJbGcbor!{@-hU8oGcwPWGlDbGRQ?ME(siu;Y3ciqn+$XJ;eOu z`bae&;>^4l%b3K6D|0ov|6t1BxGnbpV0*j5cYX`V*t!xS9ytM9`tS;O|k zyc`>6)m0(N$5t!Ldsxy~hBTrrT#54@=i`EjWH;UBXCtY^=;@eVVm5IQN!iS+@hN$Y zDfN+*%129T^i2m{8*F@4o2p$^UF^ch%=uy`#gr(kbq;cFlTbRKmMwL?ahxo5BhPRI zrpTKE*$&`zHY!^yEKn7_9m4`c*%$9!O4X}!f+Q*XTY}|RC~D#qt);3jokThr2HGzw zg-*rvJrQ&TCMfZ!B!Md~EqBkDs!{KADfX)X+j?GTyS-BW!#!Ov^>T%pNi0XB>FJHj zKG>DU3vFFEUj3CW8Iya&Bag1FqJFc7ljk#?rJTkuLUn(PcfdDf=VM*clmz1uyzXjc zu)}L&=gZdJkq4hfDBWDBTGl`QL#o!?*ZS_A4SK>c*>iaomG0>t7dHc=dxt*Fm7IDr zE9GzK_2_A8=6uDcvm5+y#aDWip)|_T4Im{vW=J_HMmq8ym)Oijp3ID$s~eZ(FwJFl zPVfC$UI@4CYk!trEl{5$qE?i*D`dPE=-MHrgPFF-5%fOAOMx=#r#sbC$`hTJM+eBQ zHSJPU98S`u2BMEj*iqjMB`X61n5@d}QoTj-T82e9$0&R0i11kS0@;Si>=6iR(okb$ z6)Sw3QNb{OCu@Tm?Qdqy0OteDswd7}{$jviSFvvUOF)W$`SbdVJ%QuW*TirA`|UrU z`}Gr$eB$D(Smyl~h*jTjAD;&Gm%76N8A$?=kp$9_OT%ReI&uVES)!g4k%J`YBMAC% zg29ryGn6EnND|E@NR|NYK`6Ems=Wl=QBund&~h-{m2iDuxRF2HBnW99f>^c#zB~-Z zjYK&dlyx~Q?;fk*8LzZ5S=ldL!#|S}C}M2R(b}4)vpt`+^EfN~l=hx7t^HM+(Y0DJ zmzaWXX5t_-^%gVZfoA4oE#ZWA=2Pv==h~Ssv@?M$;VW%1drbioTgB`p`al=W(6VM} zSxcqRoKMu;Pt?56)T5s%C%=%+d?lX$My&r%Y+fJ%EG4EWK&{PdHhp0=eAKI(F{pcQ zTsviQ{*CdO7bZo|ObaGVbDo$AADd=AGRt^qmVVDX{fCDly2A5F88!fuk?1m%*z47mMvKgyK-vwloS6&010m1oZa17WMqojZ5_{P_zPE>u@n*VNS1*4Eb5 z)z#P6H#9UfHa0djH8nRkx3sjhwzgipc=6JuOP4QSzH;Tt)vH(A+S=ON+dDcsIy*bN zy1Kf%yL)QMW+J)J%*H3C3HpcTiB-2$b z_73tVNH$I=$*=@LK^Un|mQgj!#%>zOVK~Kx?3e&o_#Ihhb@Ef#q&=FIi6fauA~3~v zYXnn#&yG$$412P%E2_~pRoR|Sv-wC*e`yptmJ=Q+=#`dtvvATqnq>pW8Kk+{2w)j1 zoMbG?yrgG^ioJ7WA!24Cbo5T2CP-$uqqo#HQVMzsE$JthUTnMmLZ-!szI!931_vv&1jzF(6oRY zlGNTM$0=prg3A}8JF!7+H87k-^z^C2#s~1RvfkB<9*lW2ul)%7pEd|4xh>p5k)f67 zo1<}v--$~;j)5IvMe@LIGLb?^K4Now9C9;OaN3T$hi8jR7h)3RmsNvsd5~&8lpLgg zboA)q$AXp8q(#qOqRq2_4ybSyk1Dr1X(9pdGKJ1c=-uSK9=upB%j3fJq)ASMgLCci za>j+gYzaaR&sIJ)C#HwwaBm3AI|oC&t&=;?@1*gciF!5GF0{qT7>)5ZP&UuycgyLc z+p11!k-o618Ks1c^}xIYZSi?ZJOw6zX96jR^@txasWn=oUK zSEvmS#TxbP*C=~^x?UGN5L4eFyAm;(*syO1a$v&y>Dil)pA{fA zpYiOdF(7>eJ}@cf;UTjs_L#5B_2Xl$IsX*KqRh~qfZ}z-*kifRh!QB`vR9vc7m;J6 zTPAm$!PTs1ZE>;|uh^X^=-}2nch#&k_m)Y;^C7`fI`#Zmm|jpB0{y znj*>ZNAbt%Nv&yce@uFk??AyL=~X+wJ_jE>pY^mjSa#Lx>{BOeCNd=YvR|A#WoY^g z+~a=nEfx8=HNC!M*z%%qG)wsk-zvxT+=D)uJhhI5NU}!pU0R94yjucnOmb^jY zIvIdp=cOxIRRhRKiqnyRwMdyjSNzRQ;^ZSxB$FZNND*|A8oF=|J(va?2B^3yM(5f zgqDvadoA2xJ;EpeX%Y9bbzJhSC1qvboj`5V3IE4}e6qkf)o;WMM+6TM`P ze)1zQm7JbGOV6DJa)`7nK%t32{SC3tnksrn6HU>CZ|RwD8Gpdce5(oghn9#^TlkJ8 ze6J&Xrz?D?C!FF4U+W8B>I+{0wKs7EPHa3HH^_Jl=tiJiXOjNFH2wY(_uaKfzq2gk z&hqq8tBl)L8Kc&jw`_$YcETYC;SDF@b!X9_Th=v?oNGRL*8)#mi#&ZTwPxUW^T4^b zftK!TSNjHg2mg;Qm|4eYSgI}Lg^5>@$s4nno}{i+In@JwLK4X_Re_UY$P`H+<>{uy z&*m@Kq~IWCeaFpai*2%*yH5|c6~*4nr^aTD^W=l#V0LC3+2NCvUTNqG6m3l;DG?^6 z71h>eB;hNiTGW%HlCy1977~SXB6Y^6Dj94ponCFNgR0$hQ^Re(BOya$d6Kkd#4{&3 z4YO^yLL#nvUEKl6y}84-{W#8!@k`;sn^UtX=H3fZDX}*3eGpG?UJ)cNMcMN7=uE@g zJ5@e)+uqfd(2_G$blxfsZL6Ut%1fcDeZot6^VU`Si%{Lp@-(kXpWBd5yF_UfqxFk8 zVNsB-L%JH1#kY9cBhu?!<5^&b^3hp6?7R+}E0u;-Hx+#8kkZdr8ur0cz1#SMpNQSM z=W=3Qw4;PG@k*PdDE9p>1zUwabRNnSZQaW{avXb2#fLg!D`#id zo}hEuuQ)}0j<^(lHWdF>_R&? zirFY*#P_vD>2usx-9n#Dj*+nlAthZ;QR_%lQQF)rwWxKZv^G_NbO-Glr7&IEcuj6) z;jGV7S#TmzKpp9$Ul<)hX`d~O=-0d=@U)XPme!Pr`56{zI;l``9P4ZFjBBSHi|9Zy z%8vv3y|S=2MK^$jdCl)U_i6NXIpdi;91%pcm9h2vz1*ov<8#H77*vT zb}9D}i;5vfei)sDNZd<;d$A>^N4J4x3fsb5;8!HEa;x1A;xBsf!5NV>hWbp>Ys>tr z=r_Bx6~6X4@RGnW(wXtDyNe|9YWcZQH0$La&Pi@QNwzaFVTtrtBo|?CZuK;D9WQN? zo3yENW)(M_!ChZrO3wDO?}@=4byX5|%j*><@POH(QjULXxFT>4m<=L>&VZ;ZKr}ZH z)fGf_7L$yaZEV40D==x91knO0gh>)jVMJp%(HKE6LJ|y-1Oq@s7zm9)y13B6MaQ`0#N&xnth*zNiY)@8O zg1R_8OHn6K)x@Bw5*f;5mJ-cSUegM#w?fvyN5*iCwDCG=gK1YW+ja27=2b$zA5@ zeakZYEi(r!h1V^GH!X!DmcmgB;T?0~U9*gPrs)ri#q}~EI|}$u00I;nZh;b;F3`~g z6y3z7w<(tBJxlaKTl7I|37Vq!0G2Gc@9AR2`GF>y7W1%Jch1tXXDK-|KVVcGDOA#?MBL zpG+D)nl;QWYnZWV{NU2~*0<@^w${l5mma5GeNfspTGu<$eeLG|+5VG&cB=E@veo5b zMYeIkX3vGhr$7zwXTE841gAecnaFt27Csz=rK_wUFW_r8SyP?%KD$TaA+Z#P;~@*P z@nzRenFM#?KW=ixQY?haC+>fId6VG|Eyl-nbPaJVPr7{_DXX}3ienen$0gZ7;WFfa zadd3j-3u^JtegIeClJV*LkJtl^uZ!6M4xA5S4pkCq9ZC~aa+!#Pc3kU>@HXG6EJXwL|^ z1Vu0!up5>^iiISBR+2~(-t2Dd#wg6N1}eYksGVu#i*b3kt^gP$&AU&E0Nps=iQAa= zMNUP%9@DQ?IxPaJ*v%lYwx~UU@s1mr<4(FwQ#Ko6Yv;qd&ZPeIAwIEHJf?y2p^6fLzp-=0LaXeQY-5<-aE!1_P^&xM-h$<;jJq7l!xj zMvk}l(TdqvE>yR0+y-b*%C$cbKR^L<$J^_djjla=ZtV6;MUQP=fqk^I zX~oI3BmO~1MrGkhG9}UwZBtq+>-nw=6W+7(Xz_~a1afvM45ekcFU^^u7IdrLO3 z3vJ=%#@Q#eqh?4c#GA(_BwFetX<7EQPQVs+VY{-~3-+lISI7Dxyeb+)4()Q44L`}SVfW)~U!Kg{@!DpzmERe)mQEdVsW`iH$i|fSFfL)uni@OD>@$m_ zHfD3&TQBMNck;OZahd@0TEGe*HJ~W>??e3e;dfH-PmxaC((zxgWOfu6(3YHxf6RO z0vk!xN01EQBm)@9NRn&}B?DeXa|mEmq*_5}wh+1_nBfA^TmjK^m(b!twY?;DSHbjG zBMki!#v72Pz_ULHc>E*HH=!&xqn2%vvf3(Ty?R^oujnws7kWq?}K*;A#r?>y%~HRn)0C$@>5aFLyOnVo!oQ31G0N;U%N#Hj z4w{N?nu~_bMYqgFw=G2X%!Ch(g+PbwxIyNGe&#PH<5OMnKB;FcalZ1ow(y0P=%rTH zOU?s;BgE{LR&=^Y-0RTE=r^U#gp=Qrgb3Rh@=BNdqC?`Hs3O`dyzEH~N z$v}~<_8YnJyEuJ$5x@`NN^M=BwSEWq1Q3nPmTy|k-?W>*vYO|0o8~!9UjQ;OZ~SQ8 z@WH8JYDL3q?}iut4Ntc;K8a|2aG>d~p!rs2%grOLH%?p{EWLcK>S}*|d*7wb-v3Ke zhfKCj`(Y#&?cc|H4StANq5M)^GnM6Mhn(ve~=;97R zRjGI|oIW=MCm(T&ND6eJ(uGikjcwNO&++3n*aK|fahgsHN+L=Wg=oOhARZsVQ5#Mq zCGjGX=>;tBcIeM}!3csg*Os8c2NVzmN1M*xuzKXB?_W==Lf~mN3*HFype;R%fH)Bd zP*n)(I5J)iX!4@rWa$cWbVUGYx{^FqNr9rQL{|9)JXuv02p)+9;2)7dTDk%UF@V1Y zyu@4h01(Aj@%h&aI0J{Jg?#GjEDcpxg34N=N&rzMkf;*$7l2yTW$u{U@rRr}WshGbeh^l$`@= z9!szCGpGOHOu4uW^8fh-)K7rQ2~Z&csvrL^Cha?;w;$fQ{pjxPXZP>Cd~o;0!v{|Q zkM@#D`|+d49Cxleef=1)mQQW}EEOiLZL2osTwgw1 z;*_nmuAu&m^AVLpLFj>c@mjvRZI4t&Uf)8|wUQLt8-A_jOMm@o0|F}n%f}P<@)HkJ zvFDf8@?CXvg_$DT;^6WOKGSDG4l&*} zuv(IQQUIiH_Qmz@i=$gtUcU78S?&~(EaPEZdcii$E-vA|kB z-2x&R&e+O?_;bBQ4(hv{_Cr9dz={_IsBM~LB>l(AScGCE++I1dtww+j{rsA7$a$w` zF_M@P(#%a&4=%8luguxJB1>hPpLMWz2ntxs zx16q3wn)wS=8=2u&bGH}F7(iXkb(D~#{@UQv_pMjQ7P;EG|=oeWT)|4md{V5T`Zi+ z|1{NbPeU@Vwr79!rpEDv?b)T>Dcj$-kVR_&$93aDOiNhL>-U%D%%LBgKfO5nf%_)n z{^S+V&9zm)80XOGOEmSW=?-a=sp(F%BWtD$=NmfHjo(r=)1$U;YNnT%2pGPpd7-oY z%rjN9;t2w?*Vw(RkAsGHLqA?OeOdMKhUJ&3k2kq+ow*@9r5$s_PKW{3*J(oV z4=l@NpK(?5=XTVm#a)Sz+~V5S2C2Wh^ZPr*vm1Pg0b||y4{dP0h3PJ(T?;dPj0=EG z@$9>~il6*RBxBTf*N;!fBS(@Mr}$(S%~HXJf%#{7yB5E`I&)$1+f>ts#qZO-dOsKD z?s`}a=jRGLx#9A;p#`0FYik*9q^RB8Pe+ z6{C~=z!WkkEle#~xjRNyyI2&wZH%n?Xx`q`9FyWzTB81;yv8!3CTaZ~1^*o1XO4{s zPDne3q6nSr^+lr1YR@Qoiq1Dz@w0Z-m*T<6>0#4h*~$jg$v3b8*R+}3>aupkc+C#a$as2g3)~X1N@-;2wh) zBzFZK$WHT;?o~ePT(j|gL{j|y%`|&WfY&$;evN#w{1u74v^XJjf!!CC7VOCv_bi#zd!`#{|y2t{})K0 zynjDN1kT_iR7fseB8T}4&>W^@wkE*zGD1CBp`KhO8vrJggU!&#r5h-v8RJt;lv7Pr zQ_Kj-mXyThTJg4=I49#6S2Mnw8GnWO;T0B#+?OBn;Qqt2iRRfxdjfDcxYA|+Dvy1u zSM6E1HZm|Ua&utRmJNqOHY9G_khNn&!LIeC5$o&rtZR>2-?e{z_ks0Y2iA2Q^lv-3 z_Db~Xi~smGAND#I>r$A+6=s>n6>#qMT>-hEbkPqp6u27|*FjQ|^UVz)(Vzh%Y^ zi_9T2;fRUowqe!-ebHmKXhK)`9I!J2J!4v;DJIZ1mi>W|^ML`l?TbE9DgoK_o!GcQ zZ2m!N{y}YCpfxWrn!al_ePuPx>o$I2H+>twx;M!O+Z2*o9z^efmH7<5t zZX4?Ce%Rml{6_!V;emIz2HxMg_F?qehuec6?hL)Zd+*KIla~{d&z}N#`r_I17eJ@` zf58i&_x&%teE#BpjaScK{IBrh#VY{6d*H3{PGRF$;}DWI^S$lXHi^=B)35-xxJm4< z_~X}FU=*#~-z==yH3f_Ai$sspVr3EQi~n5<+<*uy^F*T8yR)sCx%0(wv)}QD zz298gs&Q5(lf zc5BLd2Y_}-f`l06P+^fK1Qrjh1!m1x54T7#yoJcZE+kIVtHd-AXr`|`9(?Vj%&38D ztGt~7J`mC^<&ez|jKw{Df|CC^HM0K3rLVm)>qVz^zJWj=lp447Z!1etV6DhiTWoOh z>}dJ=@s*UKomO@n7)13RFO=M_Q2G6=OY*l-4xfybkg)VbFl~(dKCnRCx_of__pk*-tU|*;?jdiLK89)9ShX^y08tgcKu( z-GQLy3p=EbM9(_YeS0*|I2E2to0z2&S8Xbj! z@_BKzlcD5J6cxwgOJcowAPBvy+L?KZ1*`?uQO4i$`+0l_L0>EmowY$x@YR~@!QR|h zsRF0{Z-Cun0U{UKh6hgcnj7ENfWZqN+pMO4+|sTd^|8p3E=Zb8ZW!D9_FdC>g7*97 zXGeheiPM}G{#~K9Q7>HbjLPt zz+RDmwmm^D@?LnadUoBaUaO#-o!?%UpE-Zv^~U^mxLzAn-h6G4U*Pw5%`eY?f8Q89 z5l_4w5bSRCZt$dns=sLw5Pz6_=(4_HL9kbdam&6w-K~09VRm@m&jqW;dRG5@x}Riw z>GMMd;n2sS3szS?z1Whu$Q!$GGy40))eVbZKi;}<<;OthsV{Shmlwav@vq4Te3?_q z*xPrL&mHc-(1G~F3mtPU81kuVO9sGyvD~e3iaFd4Y{8H~(XB|*$Z7fhIf~lEJP~n_ z+#&w}SdKe5f$?Lehc=@Vs`ZagxZfdKtFLFrd=BowL54f`PIsztaAc1=L-7Q^nH0al zV#THqdj_i}@nKXDt}F>_90`uYr^U)uCZ_M`>Qu9)mN-A-!SwFUWJC>?XnYCj)e{uS zT}CIcldPr9-j~Ym=Esqh`uiNrXGJMFacXa-TU-v^5He=k;Ku#^?gwVG3&%>~Ko5WU zj7&DU#To9?Kj70kn_KPw+^^cf#CzxS9bt84o0+@O>-SQL{~_>dfWUF!pkD<3OYi?- zV1SL6SpD~1fV#!$g(W^$C8(0Aw**^$qcCCfyh=Mz(_)M0MnfzOgA8F3Dxm}o34f1 z`N2GVB>Wv9p_bq{oxdphUmpJV@UN`??-CohLjfP5L2?-qIhxRHEdY{PTCgl_coqvO z`X98tcT|)6wly4*0HKH8A@tCDl@dZP(nLi>1f)w7P*71qkJL~E6qL}rAOeB~X-W|h z#Da>_dy%FnB7VPsx;^)t``&TK`+gbA?1xA8KYQ#k)?9PVIhQmoXxAxn$P{_TWCiAA zMV2Hb)+A;2#Jygfpw1J20Ch!6Bu-Z{)<8bmL?y~xJ<>um(n>qRS{G-7#o1ybY_Ty% zu!%=?v+Q;A9CY&?bcv3-H%?-&JLzS*=o8%ZVozgn{@9B_*pPGj!RL&EgUy12EP?|L zoegj}=jVLR&m%Oz=i-@w@Uua&7eZ2E&u68b&$%9QgBX%m>PNigPHZ@l_u$x#mczMi zHaVS^*PfVVbsJ@LV+q~bDc!0`T?&aEim6XkG6q%Bhg8#Es;0hHCA?8346CNR1u-~E z$?uht-jlvb4)G5P$sZL`M&$|Pa;X!bWK$<)Qm3R-_lQ)&ta$1?I(0!Tbx|~R5eQy{ zNwqBWt5$?lSA^3(?bWJq+8QXKbW#astP5qX3uUhh=d6p|+z`p%6fOBITK0t$l5=}o zq~W{BT_6i3k*cEi_BM1)+fu;U*Yr)ciA1L=-Tk84xT)E&hH3bu-?(JbxM|I_f`^4pio?_VvAy#BBC;my)NHN5ok?b640OQY|X$9{*{=%cLKFmOtG6sF9I z_@4;`QzfU?Hb8PRqmW~*WKSs>IPiZ6gc0Kx!lqHO{Poe|PNn+eA%3g79On(f#9N|8Q@AzwN4T5AK_q>$&$nl zN+wYYw2Ce?Iu>?`-0Y_Lv3V$j$9yM8zdUW$ME*$b@IYPN{7{+BYw|%sMiuYpnLU~A z&ju5i`S^+efw0v9_IM70Y)RLaCi|nkBAwf#KFtn@hv3!_Y;xdymRC5%a<;6)HK*MS zyhV%Vdsc$|j{*bQ_eBRnMBVfbn`Kp+%k(XdKHuy|pL|FZgwaUk60)fk!X|ok%2#K{ zqBNA#;$_Oa1KKHh1Bhglg1IO?Q5tXPI9@ms-Xn3>yuF>$g|V|0#+i%k5pT?}nMhJ| zWHFH}>m;;O(DFdCAV^~fmbPHE&MDbkMVug7O#uJ7xG`f)V9X$r(cWBTN=SE_K|B@j zI|F%RLXD~?qb1HU&Ey0;5ueQse(g1TBXp*G_GZ|Z`Pn=W@-|0|X7irQ$Abo5kf^dS zS4c3Fm@mpW;yquS?Oriol6wvi2*g;4g|ebd(7?+|Dgc4dxUf*UTl+*}v8o;r2-Qt9 z6^pkXd|6nmX{C@{s_kSuy>z=1LU3`~!*5W!M&Wr;B;o?XP`^j#3V*wtTnNC0;JWybEV{=AfT$p5ykt|KTcq0RIie(2v@3zKtIo#;dnJYHU7( ze>ehbIs8#=D^YPoo5%6)#4$R*X8JTS3-v>1#3DAH>#0RF>Ew90J!UN{OeSYLYIkOv z)ixmiNl$D>|4UBLzz?jrXPF)SM}F-6$+v z;4X)u7qDdU@}!wB3ru_ess3e5{Ci~FfBw^({(caIWbfDCFZZAS{MElc{0n0&49OHF zy9!DSv@_`M(G!*~4hsHPQKU;!rb|<$$cnT)eKgAWV&KmrmMWb~}mlI(6B{{i3f|h_82`?`eNO zZ~rsy{%7s|FPr=0wfqPQzF9&(xdNy2P`-tNf#o8hx6$D(lF?7(;`)>m`sI>e$q+`Q z2;+dF-}Bimg4t9oeMKZ=Rp=^k&#em-ZVFX=5vke|tJ#vg^HuWhwk#M%8%ZJ%B`}XR zZmKkHsy1$@HLhzktZ6o^YS(`GSHk6WpI4I+$~D@LKq@Yq5`Wv+fiXl$REj z@6+hzz)8^9a<^@;vuE^K|J=~P;_JcX;TNP{^X|>!`;YUZ(=(GZ(^H_P_iAtQoS6kd zYyZ@L`EhP`2GsoDwcm-jjX8{KiP02vyL3D3<9YwN6UFnKw{DM4C$}sxCqUey5r|W1 ze>%|vFPmvyD(a)6a#tc?ec4nY5+{1=%ZEx;$SXPrP;HUqTFk-t*8D~5YgQfcyk?C{ z<`G(A#^5Ak8=Rb(uhzk7Qxbb8bYtNI_c>|oRf!rGU)1o*i55Jwq~n9Z>S%gC3=XM_ z?Zh(*V#DSFJ{NmDPt;4`d${Eq#~^4?=JcxfmE=(gbHXaFq0+aeC}{Cxb%vfRbGiFq z-K)y1T9>|?`6#k>y*Km&_t$S)Jlr;75U}Z+h%w8$<=7Iv%gCMQbC`;;pB>|It@Ymb ztySL0ft!`=vL_mSUU{or4wK(_c77m&41pSO3`2+-U#Ge=S4Sgzx3!=>x(3r>9^O-C z1w|N&V8$Y-W6=|i<-_eXA(FXPScE{LRisqcrqNR>f#6jLl!5~?f!F+kcqP@ennokZ zeR-@c6-AJv3GYOUMUts zcg-Y))mm>B5M%AFrSGemwo@`Z{QNu>{W4IrbQfwNzVN^4M9U4s?v=}p|No4Vi^9Vs zDqEpPpd$oO*(tf}7o`D}4VC>gv)-p@iL!gvd{v66M{K!o!&5tMDzo2!ftRb_Jf~{Y z^R5A)vJah9*1d_g zCASyKWXHD`Z-uW>C{Okc(QD^V>S@?kZLM5fsOpKaR~D<9j5M93KasPKmCMqX9Rulh!Fp`CL^+|6F`+y8->zG z!K1dw)y!)nw~X^CRLhu0n^VG9gB&@`?G9X=g7Ge7Q_=(}#PDse#${^lP$J`uJNYh* z(GkC=i=vKM{%b>r~-;}dSqvc)+?+uuM3>Mp?fh8!@BoV1nv;-Nz0fRmZhDuVC-6Mdx z64ZIG96;g0P>GR@F;Iv!QT;^#TWDUk)VXX0dZ^w-YXd<2UbM5h;CM9J)js3&@qB;# z$}{%Wf%dlok5vU7Ej?><{ep2q^npuhO6RW2pSvL&LX^2sB6YDs>hdjVT!VCEvsBbW zx!4ZHD_zP7eM(6K%7oX7g!l4<4|0St+0+S{)Jdtd35m2xv9u|X^jV?I1;LzURN*RL z^=IDO-+1e{`5M3TH|?OBe}EEd1{q&FBq>ZY$YTM)EL*a70l&Mc)Ud8z|4H-CvTohH zaqXme?U;4Vh<(j#?_0eWYaS)l)m^Ka#N5Qh+~g#wrl$64dTtuj9?whSb7$vf=H|g#dUk$cZhm2YVR3$O zX<=!3ad~Cw)2Efywbk{F_1^;{k8v%k4US+&5n8R+uS1?XgT!4zlCCA3S3}qiIT&F@Lw}7lFjl@PMzG2`$zAP; zq9o@~%Rr7-zP}qV*{h6qA|r#M`O!_^aS@JCX1@9xW=*x@9g6H|JYE~(`dVCd@ zJf4z;Lg-^(^Bs=}v}%!)JS;ASU;DxoaV;{2nwm-H>CJ=pPe;&5IMI5;sSb&nrwMD> zxORLdMz_AES}gts$ckSQayle6a%BWbQQ z734{%)wf0@(tMbkN_RMD(<7)*Roe<<3MRI}&<{{g#S1b5jcG3S7z<^1mUs;bT{SQ0 zpg{-JVkr3R#@eW)5q0tCBFz`=u#gWixa-ku_fm0e1`4BeQbeLICBrdd8#x*>ZYo}i zc>#sd498^U6Js?9Fj^`+6O3{BFoZ^1f8A1K_h&t>UB_(2jf`CEC93BfrfKyB)ItQc zP#cpbK?W@;Sb&g`V``xcDX!S1`j;+nmO2DFfd?)zHfG!~7HfvI!l>6S!zDTg5F!(e zX41{H`S+G#;#G3p!Yeb95)YUX8>HbZz(y#v&E|l9^y7NY_%R8NrGV?hhCKd(jGmZQ z7=uTcP@R?*Yt6~ay2Q0^{_F2yNb1;u8=|vyUR`ljjj(C#7bF{ASXJ_o2zM#gVAzDW}hhMnWzj4j-{SUEV zzFQwcXMeZpQIH(_bu60Q@9Q{TjKuh=uKa4#8AnNsug9%#Gr1uv-)4z%GTU=SS^JFd z_CnPGp0>r>uH6fZ^m%UImm5zT-fwE!O8&mG(kl}NzY7~(vFjGoIak^z>!jJ#D=BNW zaYOs$@@n0vu9BiCX@Q0W->T?m1u5%qKy<{n&N&_Zlhm6&T0k{m%HNy!wT54PzJI`7!%Dn3fS^-`ux|| z^sMlOJhL2KN*2!42Dwm{mVpk{_S9rty%67_G9zt?j-<;{NUkCLV@ZecZPYh3UC~rZv3rbfq8k?ypK$nADScC4u}ny_ znMPkeeMonn^c%fM7p{%$Zed+S=6P*oD8!~im_VTV{BuMkt=3khX=1nL&lLVFK#F-cHS@NY5wF%qP#mE6c+t!^11b%d5!CqXdeRSAm09 zo|RXYiBB3hG#L5Oi~_<)AwHxq7lSA}(6Q}F*?^jjR7epvCSf*aq5We2{Q!Oh5$7D7 zD8Nkvcp=Eg2a4p800n|JLizx)Lt{%n&0N+7`np}i7@WQjobXlOWzh8Cwtm!M9S2Ag8ABW5O1&k8Kb zimXXW?1{=8i7K2Vtf0yrPudsrT>*kH9l0n&rARP-o2ueKnW^E-G{VibE?ZzOS?ZGZ z#U#)GN}mKBY>dKe%@U3uI%n??+3% z!!Op&H`~p()ZMqn)3?^k_x5SuIzQh#{(g-ogPYAR-qQ`gkBMs2!S`sz52z--0X(vN z%D8OWgdAZ;W-nJ1O;`r8Yowq6kZzN{E|R$+nzM<{-xM$XB31oGy6&_5oekxN)dTg5 zy7jX*b#MJ^+v09jXh6qQz#lvk9MSC9<*z_AY&zKwSqo9;K=f7{-&)ZMY( z-@7{W?9yL5p}h0$yp-*XwD+dIYg-0xUBK@O6v-g`Zq|LGt!_QZ*4b&Vv31n<1*j9$m)K`7D4+eE|Fifmj0xIzaKvQJ?N9gJ23a(a#LzkHv)3t?tlsZ0dF9>6c)D^AlR4|i(c8f+(R?y+%rAf&)Fg{vq7~Rjl zfgxr-$|RxgF|2$Y9S65hZ&+=S4K*3H6lz?&uG@u1mP&I~m$k)v=gxo=x3N-_&?2UT zUSlU{C9I~Yz4y}FX6&dqdC@{;%}-*q)$VZEBUP2R8c2B<%THq>CWmGhmJm{1t8g%}eK=3pwfU42WXs(Kj90dw~N(YE5WQJp7A>(60)2)F_3s0P*Mbp33}d90N! z`3k+{4?STx9nY%0zB0%3;pJ|lkOP(|ng>yI7$lV<9I4-FW!B>n{(c>i#Jl3GJ6{WX zPJVXV>cqR!=Nwx(;WR#_dYt1Gy4E{)UaT$5KGNQTJkqf(Jtl74?Nj&&x)O6qKPu0% z0QE?iM?f%2fe7Dd*C9OXM~Hik!Br90r#U;r&QB7-om#N-U5!SY=Tjf;ZfCo<8ndT4 zGw$Gew;HRq*GW4_gZeIpwtzIK3v#XDjm<&Z2bwdDwJTPM1uUh;k0tDX?R>i*%UoDX zaH1s*>W02vK24#|N27sT9cs`8vzk!E5x`WSc~Nf zB#^653H;z-GtdZ3bsLNj7Bex?XNpE-R0#`tt#=!}OF;z97YTHw_1J)eFtBT8qSnnl z+4vW!o;ft1T0R>d(Vo5{v=MEx75+rs9EDy&rJS-BHq7mMso|NS5re0*=S%V}`BZ zd`*2J=VMPQLyZ@Vz+@Gy;Avdpbj7rZbiT$*M3|AvNKTM30s=?vwhrC=5-g=nS78;^ z8>hv=ij1?<7vdA3x@s|HZrI(5fq$_;p*uMC&ezx{I>UuHTEFV?Enz6@UW`|HUh3t2 z-TS)nUPHBKk|ghp9HqvTF5@FetX%B)OZ+CV)V8*Y#b6G*bxzje4_3K+A7r=?aEdG5 zvx92@!=_~Sr7rtfmAmTcw@PJgbn#9UDszJ=EnHJIoQNgzGJCtn_g*(_5_h|lc8L^< z1OeJp-y;1&p1%LM{pIdS1dOA*Hg>=z>UN1V!u#-3dqG57ZB3G&rptl%?>?&BZGCp@ zT-1S)iFmf=9^URi`C9wg#v}J?ie-F#6OP~Z*?QQ*Dsv`@=Hu$_sRz>{RYCa)j*lze z+*_uj38Sn!{_Vn6Q*pzmOZnIB*HyNfe;o8zdVTT4786GcMTvjpa>6L(hH879+fp=H z;)l`Q$@crKew+^~ljwr7+xnD0UDge=J6EgM$wFU?vwmEH(at40BEu2g$_48?0q);=zse2&D6Z09lur_h4*iXA`jjivc zqa%9znhZ6os>bMZwx~`d%N-avbIRju+r3kWdSVyxRI%~-XL!R+_7PeS^(>+8bD~l= zbw)<$x^tN8ud0fN4&S+u=*_QJ`MRZ19#58t z85pPY`5MRlvZukY>fB)f3cE^bgds-LG15fGtYg%t2hfKa+WRm-# z+InIEZ-8<^Mxvqx*!lzXP?6$zd{d{G#ag_jCL`m~CIR|XL@~C#ceQR3dU_zwgZvZ-#?g<>2B^1>EF2dePU~V!uIdP?h_`I|`R)6dEt&2YvzqcPTZAoU5X4#x4=Ms6BDkhivH|nki zsM~{tx`B~nuSlj2Qi-tr0>dOc%+4aj&L+sgA;8H4{AQ#N3A>W&_vc@KBK;M3vroMN z5DVUz&a|p_mG_A7G^n7f^)> z8~}O5BzrcHbO>R|g!IWojG^L|P^rUkIeQ8vM{*Ts3UxQ~1KyO{epJ{X8j}mOmf`fa z5p;H8G>&H|Jnf*D)FJ7Dkj%fRx4+kKzc@Gms(({;q!pb2S(Y#~Q*=+{fd&8@ktRu- zDuX1kZ}KdA3QRTAgyM9hq79TH%~bXmS~&B4CQfq?RAT`R2h{o` z5vGmVg~Qe%$L!8JItHC`3-s^`@IDR982)=^41a&W0Ds?Lf1i*5kI@g3oUjCN^}ZKcI1NZHR)y2SmTOJu+PYxgraw)@$uRHni!wmtGS8s{hFPan4SDnle3ecre>$6 zW=QoLKmSo+{sXT8)c&78zj60IbpQMNAJk1CQbq_;|94K0IBpf(>ezTk937QTg+otW z@zX5e^oagO)=7~js)JWkyHol+4--Yr+k0CVmL{T8glS7J8!81ih;H<*c0QuzHB6kt z0MyK4UQSw%RUJ!2Hepd@Z7?`O%t}+u?Cz}(_bpC5z%#-q64_;K%ZvqFWIlF)^;o|e zxL0drgkLRVY|F(e*D9-V<(QruIV7d!=3@r4BFq(u z;)<8$wguX5TxlJTS{;eUDPRNraS!U)PKfe8oM4}6YSb5od=YCX!h$o#&6*E_~jD92_lO;ELK?|Ycj)DJEmR7$VtHzZ8%bkrR0ttAUh&n@1!qQ zksAr8Lx)-M`5b;C?qP{;9l(nghBE2XO5oI?Cf(JmdSX@eOeS>b=mFfpAe9BQc@AOS z1gTh7d(|!T$^ew90o?BqQ!ZM?P(0NFLJeLwK`%y?s<9)KyR{dH?X*e3@e9>Wfm4&{ z^i6Q)=(HDvj8f*MQ-aj(zO==FWGR3rfg#LoFrxw zy@gVL1a;6z1rRp|QhEp8=v4k-h7OuPy@u80RFXcM%WM80oF4ygdAECdoO?=3BdrUs z%kTOD^6madjU~IM+6R`8yuYcj(!A)m4U7FizO&jUtG~1McteJDHB{jFj?QzMDb2Os z=dSm$47tP~;F>5g_}CEt=%uaB6yWq2JUW{CsWgtz?!*wBhou&H=^y^XI!5Qgx9O0Y z!&D*zd=L|Y_GjPdOC>@4KPHSKzpKl^D+)~)>I+yStyaU|F^_$v{mKZ>>_>ApjUo8# z9wF#sF0t2-A&il&wBEHBc{cHsI_P#rS6p-tEPi*}sO87m=P|pSN+)R#M6#sqz{IHs zA=DNa-88%t407Swp?G5h2`Cb0@SuRwo}-hF-dYGlD}*$GL{gwJ5GV(Zi>wu#id+-- zO9Z^zupv1PXZ&t)oL$)luf4sNf|CL#kj5!BU+U5a7`yVY^>iEbwuuMgiva5GF*U8D z4;qf*hwI`k&IP7$bH<{LOnPnTJJ=s$I=P1dhgKv&=WQ1y<A!FWC!m&m8| z^aWO&;(jg#V~0nQON|uYSWPU|9QTTm%x%jV*POF9+M=&sjb*kiGpN2}tZ{CVm^Jx_Duc#fy zu%=yU))_ZhtG!yi)m!rq-)cWA5ZFL*qRT1fg5x-KXiuf9nAzJ0Hu==v4Tc(B3myo!B3@rF1vf4tq;w);kcfu7?xeNfO67st+5f zYf2uEO|;4GKIj){eGQ?SoliR;qQ}|i61!l(b#M5Y-`UXt8Yg-fM}gD|R+F=Poy`Rq z4T1Bo5GXar1Q+uaKVi0%7&LoH9IDGz9Qk6482c zQASFUrfLx+rwmDH6mF$^*;?of!tN$;!Tm7Es=Us=$u6T7wP)Xvh|w^_3J8k zR@LiPH0zdiZqMu2P6Bs~DvAp#ii;|Wi_1$&_K@2ic>4#x zkx(3zTE`X^0ypWSbI{-AmAVe^ZY`!63o7;bNQ-`O_W)j9RFYxa51 z!eHP0(BRzbH?!bc?#BNm`oie27wJG{4HgS?N1%2obe!~_G5Xqu)=uq9ioie?` zwRpxtgP*jBeR-3Wmd*BEDwfiN*QBUikzj8MSkqn>5$X&v%bzlg$UUb_0Hybf`YS_k zEzSUW)69N6XhUPG4P{gvIDll}-MU|W^yIa8~pe-gT91V{j)!}>a^QTMo z7BrkUpfv&^?qJ0yI>(w3NzUf_<)cVGUV)$T%a1}RHEQ)PKMoc9H3J9dngcG2>u*rH z4EC#7a$0l&mH0bptID7p>!ZpM|Q%P8W2QgIdf;eDJ z{cJ_Ak(bQ7!tlcN!%&1V;BrfgT&SS*c91lL#y00%Nv@$%8G)DOLPR=?u+d#_d~yAFN$AqqqXP$NrCMo``Heu{AMXDAbwM5awFaIz0 zrgvAi!QNEn`_i6Mch4#FU~A?3-%ediz761%;SX}5FqHkVDI_+UxiKtTbH@2)i0s49 zZ#+_de1Ts2l<{r)Vol5D)1N}TUr$`o(T+x1=(ubyRO_s74nJDe-my&0+kj`>&is)g z-Y0~IOn2!(4BaB0ZSa4A4!6u<2dgj4P<;G;uP@C zv^bvx4hoZQEZ2I9oADH{Pd<&~QUUuJ7E>)zfZy!X(nbQF@V4T}BV6;Pk0FWyelxZ9 zj-WY9q)^+rO@B#W0iBg7BJw$(!QV5D26i5MJhAnusm1&|1hUBfBF}Ol|g>^);W2!s*&4O832@Q`3TPymNrE zo--wnD6!$$4KOlO-hOeZNss$kw!3VeQ*`6hX1T_6xn((-Z9cuSsO*g??U@MMV(t2J zpNI;Tyw)MV-Lag*4<(M=u}>)!Jxk-%P<}Mj^r(d9_^l8+FV#v^G-^kw%sYna_~LB_ zKcx=(fa;m!3-=B^P&iu?_M=2K@?J{oz3A%W&nT3ah%qHLZPJO;<)=Q(ALM_j%Qb_d z)RH)TEE6)>P@9xg?GrIh<2W|Kb{^fqer}QcZs_>kR=QgO;ooEA1|m{BJ*&-1x<|z6 zBat!aXtq(z2i2y>bi;r(y?y+{Li;$~Wr#j2EPv!`kz9;yZAOF-F6zrntF$`4CTv#n zB+pdq!?lNGloEE18NmZi9ty|-dxG*^*X34(#cG6q0F2u>?$M94CQzY~yFA-y)ZZqk zB7n_oA*I|X9u5I+U}s_yW(UOq@&NbX6yU`6P!kCv{g=-^&iWMy&j<2#g}C@gx4zg> zq&t*MCl29vxc2AhMv_Vi%^6RME_eVjD)ZLMppm!oGD0_Ap*?+#wRg&I?0|4;1*SyG)Un?fOrpqm<26utO_5j~iD;~J6p*PIDMbLK8gMI<0GQ5Y zOQ7@C53>Q}m|>WW(ZxgN=Z_vacfu*i)pegA3n1}hd*u(lz5N25{DMt=aB4nD(gD}S zf{Mk@*T_Y+D8+TE#P_Nu_p1>G)d)kXgxAW1w?LyNn>r?$HjPf37foLjNna7Zx+if&GgZ_G%k&&sH~ey!%ljp{sNRenK5Ay`0{l$Y$2V}J8wd-3rA zTvb)o->PZ7Q`dj5VYub)$F_T8oh{Qn?Q?xk76y72hn_CI>|1)(zw~-wY52v`+aYk( zo}@e*dAIQ4{ldqQ`Oyz^V;|?nM@hUHV9WrTng%sBJ2N%&tM=B>`@86W|Ne(M`@OaP z^9De&|KT$W?tK5Z^+%XalA#05+iz@UF0eXEhF}sF{uHAl24%ZM-4^ravy>NZM$332z}Z zHZ5Zi^jr#_!vg}HygJc{AL4`K-q23Mp-RVR_s&`$U|^=Qk%#J2GN24?qC}RE z=3Y@ANG;uoF3I_SVS@VKOV4Gqfs0u#n~mP5wsn^+Y_;vD^in`OtA?J-1e zMD7WkTdwvD&&jIW;S3(GC0%4uAWua@tI=HACQG-BT`GphM9 zM}OOp{61l0gu1t*>wS?xm>wXn>GG#uQ&Yd7Mu=b@@<* zC$MRpg4?@D-jKr?757Ve&f!(o77H+b(um}qrtL~cTCaFfXy6kzJCcjJ`~=XnWqIVs zu-_!OP)o#ehxC(N%o+>dJqw>5csw#e&T5PXF6Ktr%+3{n%`P$-!)3!hnaZ6p5PhV! zVKLuTy%M&tqwn7*eL@Lbtr-T0%ta^o(~qsOxY37nD&4D5j0asO64v{2c6T-gHxw^@ zeselcYinXwR{PsbVV;TX(&>|@KT_(<$j*aW>@Q{wNGL5u(5S`Hy2bx_VR|F z6Ep_*h(cjCVmBQ{F6r6!avByzS#=V6V6JT^LN1bw$JyJ|6MOk<2Y51e<_YaaM2gFBB+ctZK37i+ zke;t4dg@QID7PiJt4#u%v!Le8@MBqxamor4;9|CWqWq;jDIigZZXUsKYPjHn%J7)W zxu%YttJVm4<2>1J`8JG-VREpNEBnm>EdzM%Tg9fF3UdI7}&T>7l6~_eocr~%q62+N%Y|CC1!`d+qk*zkz1<$ z*(COI0U2FnjvmjGa*iU-&4Wk9nc?7IHIrg9V03e)G;*decO-YPh6QVr zU6I{mbN&xJ&cDHnU)Ho=5_m`!N#eH8?0`rV066v?Y2<0*q)HX1NR^=6FF^VL>062n zSkC>Dz9o^UpMB{Y7imSO#tppJi5jRREs+$gM7p7Trny?CmFCq$S_B*IL>ui`Ypp0N ztq4ndJkzqKe``w4yLi*UoX5bz?` zZi|+G6}`DBmbEUHu_~UvERnt_nKmz-HY=MtBcD2@Ko|!LIpvgL<&;;-$wSJC&z0hP z6yiGNV;;#yHOoXaN?)p#I$thvwn#iMPt^Y=FsljsWQqEui3Jd(&Lzm>qE+!>2a-Z{ zGJ^DT{EhN_O$$yREcUc0@vtm(x4!9abIsj0!|iC2n`4B>sqB9u|dZVUX+_xnqLSsbCt!#q$(+?099IA0nXk08!=Q} zSy@+otEKMF;Qhw2_Pf)aP4iEhm%8q+^gLL7`f&AW%W7ZiYG3vVZ0E;L4kq%WvN-y&GP7|8{BQ{nCe##g88rMn~tz#^-)1==ZjLzc+P%c%lFL zuy2N&oSyz&z$8biKj3HT7wq`<&7+{>5#>*69yLNh>mzK~w$=8QWg9g9zlR-Ja^%z! zg905;GI*d2%j$D0er;w3O$^7Ke_+R<)Yu(bESXDGWUd{h4@S3)fp`VNqG`2SzaQRq z;;E7~3X@OE1%kM~rzOT)`MDPtfq0o4m2YOg(40 zX=@K%qJ}$-$4fO14?{TvAdyrVozAC((0E8BB_{;cij^USw|S7s0cUn6;E(u&$8;%q zeB_RhQJWY~UA1#>wsB^V8gL^!B~2ti&b|FiylP(pUMqRx-*~V8_psxi@RR^+H_SXnTkT}Fco5LZbUaMHW5TOX{)z5|zO}CL zE41?6GTKXwm)r^*ZuRn5i{E)Fo8!O_QC##;cqW~;aOe5iA70)8IzN5bpG);tf$%oT z09|rcJS7NkvjmYTcHa#}UNE;zkiy%3#7kBY+YPxqiHwc_c6>O;38eJ0E05VvW=B4ixd#tY4POf;N$I;LQ`Fxk z>Kd^8&?(Tt2n9HL9&N_VvcjjFHa3+nTU%LnrB9ywO?wA&Xn%9t)vHXq?Z6ac?Q+?Q#rb z7PPEzOt~m>Ee~BjuJFTS{C=Nv{aK_NMoyOfN>icm4nzvig?3aaNcNJLZ z=?)yl$_tZ)cifKH6VjPJC)bL8!XU)aIYukbXP}uMaJ}0=bb&}IgKwvKNcKpAel{Lx z=aoAlF#<)%3qI!ydGg-CGV^fPyGyAs%KSE+!KAVP_O!0|m5D zj3OjZ1fUTp79oI|I5`BlxCFQXh~nYj4-x?9m;S85c>nqQdim>jcu>5g+6%n-CGjUM z$@U$Oz)>K`3s!ObLg3f}H#oLHs{O+Y`_~vqN0|11d2gxqn>E^tDA;=gG*$b_yL%7d zJwHkSB_JvyDl03er>A$+&d&R^_x`5JZx0*zp7HYyJ>wU5HsE?#P-(>3>X^_w_)E>n zG3{65yRIiay_xcyNO)P8`lcvju;|*8;{3+q(#leju%7e*-+NV2URhOHbEoFslLuYz z`}${w1{dA{x7^UuyO&FQp(%?aZx%lcFMb?Z7$2JlvL4dzXMg?kOC|q@hxmtl`15LC z8~^9~7yIz*7yrB_J&xS3*Pk1{M3I_zZr_1t~dgVpk~0571OjSkM_@K>yzb|${bndg>YvwkiW_SI1bRyPwy@U-Ai8b=qG2b?g z2%@@YZegejIw%hjn8|V=~4`+_pedK5aFYUZ6f*@?`&m=BGO0ehl0C-PFt+M33&(Gp<*dgfSO( z$GV3*u51AHPo-tcu|xT~*70FCbzyPIykA2S{htLq{P`0?p>|dOC&DG0pNJBS36mRc zwKr5-degyVg%TW#;czb-Hx4CdGT}*ON$X}kSih>rpgHwMj{%!_j$DZQ33@Vd_Xnei z@b#TS6VcqcGmlvg3R~+l>LXJ-{gb{5P$rqH%)9!kc{5$nk1TQ{XSFeAe9Usl_6)gT zq|EpQEox_PhjfVKG|5HrM{|!_CF)jaN&f3GYjJ=#!pSqyz`n{Z2+KujO6(Hv| zTTTq*yxuogEKx0V@VFuNro3m+c$Dh+bMr3E%>kWR&fr14LpPLONO!&7e4VX%!sDe) z-p=3<_xT@6A{l+|fT5tNR~hywpk;asyM0jA=iF?y>h6fU#lv-s%VPGXSRU%3lIT&f zTTP-W0=_DvZeJwSiwAT)B!VM`H+zDODA(;B_gr_x_t7TVXYHZNQH7d+bx zIIhOze5HnIF|?wc zR4*#ihJpH<$Zw!lU95XZ``k}7OVB@Q!deuj%%k%^n9Qcuyn(n+VOwEM7m1*;@T?>P)* z??qixX!=|okW}d~sSzt1rb~MQrN_CBX{y=n^2c56e2UJGYqu!b)7-P)w^JhK*Ln@W zL|VS2;PyEYI>=9m6a;(5tEYrxP_)PhpP({A%)%;cf^yt~Qha>U ze0<9MV#ckryG) z%Y^1(65wXx7Gz`-p<?k9Q?c>dY_ba%ge{b&CSEb!@-8)U`O$A z@pF-o2Pp)1Z+`>?)c_ih0uM+G4?7Qv69w)GlbnZq`~m`e0>FlDL$*jEtP5w3NKGl%j%+yu5;vqN19Hf~uOTvYNV@s;au0 z#sTor($dn@*4EO(XsYY0NL#8&A5m6u)|NkMrHl2`RCiHOKB}y9T-V~T`9X6ltdW(0 zp`nqXp@E(*Mpsu`M_*mrOijg9RnGz(LT+ozLhzr&SQA_c4xmH4rxh19G7(LD3uP2Meq%3#@I3wnuN+AImv$ zGX1!7^3h`{wufWPFqh3O&ssX*99$D!J+iz4lfCh0eXa(dh(3AH&*9)%j}t(q1DFt3 zzmVf@zD_Q#C!HJ*IUd(Dan;od&^q9)Y~i6|e@5CRT+Az3!RxBFU#z)jr0uyB;|rMw z!cvtk2K_jGr>>Ag4nviZ%s?w7+uL*SzP z+fT!zU&rQlK29x z?s$^)SefHZ{cX>+q#PBLUi@#MQ_xptEo7YNx7#eACYR3<`P1j4`PUkc{+r4`=6vCh zxy225oCGVEyBJ5I@+Ih1)2m{K^Hff=9prej@M_;&*!Y_hA+2ISyZ`_?K;}$J0eZT{ z&sk~)0%bKbD4ryp9`>}|_(b=#lVuO+)J;FlRy?&^XqPnAUhRh#?AT`gzXzJ?A;+ z{_{TfIoEZabKRfodcQxfH^=h*t!fM~BHOj1NM~slmnSuBsQ( zieQnx$i4Qs&~>S&?yW(x0oLQysjhms+~uPg-tEorbBz9{&@p)({^=s|_RyucqjsNP z9sShv0E%buXY#H72&7=j3lF)6DcCIR=ORzt|AJ`iTN&?yC1G8mXPRyxsjE^t(> z=ka`ND%VF!+2yd<;X|jIJ2Ncg|Bl)Fo(k7Qn;tx#+V=8k_UlR2&%NX*>thQ*l=;^Y z<6+!1zh5moggtOfKbRgBT%JyU}ED)~PeR?{KK>>J_l2&6;Irq~Q~ZLOFWGvIUMrN~{g)7v_eoy3qEu)E@^ zO(IoUC9(`AUmuPZ%~HV7t^(L(nvL>_IWRGfXF*(@Rz6Q3NL%T)iK2emb#~KQ9WI6P ze>`t}9Ot0w#sX@8pH`a=SKqnSO)#P!KO2I#HN859-Q5wT9PT!Qs|xQn6(=OpCAoOm zwoT@6ble$&`l_N_S>mE}LrOw#bUIdNau`RAz4+p; zhEjxxG?3;x;Hno!C%=$>pt{nONu&=*Ue3boeB9Zi0!1K$2kpj<0B({l&A?Bq)?FQ) zb(NlT$mZQFoa0N^(f@!-?eI5h5)Yr3-rkmCN~AuYX&$+-TiP(Mx5R;k%}I_--OjEA zE5Vn0Tw6fJpR2%@)IO;HT&i4Hhu@(;z$(m1S;uZ-ikB2IaFE`DS|MGZQ)4I)}pByRDh(_~R$TKxSotJjvD^&;Npv7=yzE2wv zGXlynsd$|Svo^YVN;WLDYfL86)}zvB;*@JIC$kI5MPJ7^AcndR85837ee35FgQvyN zjg0K>JHsc3NwC51tw2qxaspYU6RZ&a5b}t-9Jy)LcLn zL_2SL#EWl&RZfpPn2zIfE{_^}y%A{p9Sph=U#(f0EKIfJ_d$oT7`f}*P`tUgvtOha zY6FmYVNLzzHJSh!mCkX2ypusbmGwh)vC<@@Gj>%_l%sGe=KMO?fgh(2NgQw>&d`8& z{xeLH+eUbmE+*Y_eSP^HxvtW z^%G^1D(w(vd75X8xn^<#f5UV=-zucxs-(#T%k{-h<5hTkieIeH>gP)HmJx{@<{OVe zTYTy}u4`1+C*nF=ROA7W#FEcW24Z51<#d@IOT z3D^4}e&6l|4-u+&3U+9H4#SmfyW^-ZNc(l8wvos_me;2Xs#pW`hi>=iUYP30sIPDd zTi89|04Ye^)9e&}s=4CHVd!J4^(EPs&1(;j_UUsIwZ5uvz?4jz3j!*%Di6TE(9fR{pSu5_;Ouo4o0#=FcxO>UR(W|=Wpfsi zZCtaS#ldCQ6SKMS>~1&9I6jQ)Bk`LQ*NDqzVsdnC&Ntw4uH)d{l$`6$fRc4|NqAP8 zFsGlGJLsExcP?ibmwTUQ*Vmjoyq+t-U3@;5Tau7f$jcfp-;O2ELI^H?Sid-h%bOwQ z&HCnjNywWk&->2HTNuwhuYtG@Za67tu}^EY|yB!yyYvtnCa_A6R3rJ~rWr`Tnp z*tMeg1qu1WsKnE+#5=LXx1z+~tmGBH#4D@#h(c+wZt2m9lH-Y`FFJ}n9g&d}rO_Lu zG=;LLtkN@nWx={7hfkKB?|I*<#`+BdAemZ z@d~zXMQKHur+A4+Vny{tMd``1nu!W8g-WhpWm95hb46uKPi3QH#np|<4uz`gW>sB& zRe2{RcokK*d#ZXTs_t!6@x`nEVXAw~ss|OShkL3X`c*%esD98>-T$rnx!I+cewSV+ zUK+2sG%4!2^lswPhmA{93N%O#yqwh1U_RL> zN{irLIDeT{*_?g5Id`%-Z?l=Lc*V6cyx5;xc>YRx<(10YSE?tk)NEeiD7Ms_w{Q_H zPL++8+0al-zPB9JyL`c^xpcDOzlcUl zMw4r0+e81BtZcbl^Tv4p#xs*#7hOpu;x^a*tqetp$ExBP2VbFNL+Kr!OXk-O7J021p|=fM zH*R;}rmwsHxycryzZBh!*yMI@Hn3^vTCHm_fLju++$>bsH(XDU}G+$rhwBqIK$5FFX)Jf44^oL)E|7~a} zANq3>8V(Tud_$}CHg|3G#ubG48qG7p2yP7KT7Ykb8^Jpxpr_ca6ixUKp<~bft9Rya z-L2{cZONe@;Rf|(A^Z7=UVcmgGL<9&oJFr|#r?oaU~i$%li+j#sskgjIt8O);J-M? ztts?Zw~lo-(qRP|hQD`b7GWoY#+DhJokuV7VIK$3OZfgTdn6oY&@-C-Q*PT&M;PYb z8b{0VdxxC_|Klj%EmAH)k9t&b$UA9>S^&+bZoet$q6H~@%LYV09=YDmIdr(_AW&v@FiuPVZh&pU8 z-7-4~fIV~Kf5;vxb&>Ud;XNTR8M^SWMtLaQ?N}@w`kk$}fsybRv)mG((n+Y~ROl=K zP2GDhm5Mr^j#l(}G%?j5OB?O!@N#BC(=p-LuZWqdV?l2%-9u4h{6`kbuoM9**#jCQ zXxaCtgErP)yYSEpOr9|6z0~_;rn+|mKY9x99g;r!%gwDv{~q?7))pJqD@olN@{FV# z^d^ngx9#!wa$BN4UYCVsRa=txLc{rw|6v3c2CzjTBIRfICnw$~i!sx}?FBQiR&SF0sakEfx$vi9{#wk@(GlMbprqsUuO<&#nvM zKRX^&KY0EhzWb^W&e0b*hLR4JY=b)O5}*mwSx#lt&|8n1O)wvI{v90)YM~;${Q_ThW+htnk=PUl+A zOMm*_ojhM|`JH!fo|mUOx#!sJr}O=m3xk0R!!_RzNPT;_IM?-I0W|;-sQ!3v`9mO* zed+pRn+#;^2C<_-+=S>!SFjTYV&bMUW4So%3O2@r-Gm@FfY`ht_@ym)HE>DrbkUu? zgX< zeOy-kw~SX?(Xd+4Iwo4tNm(J(uDlST)$<`e!uhu~R1wu^NU^DjOFTBP$ zh?a}}xP}y6TlAa)t4#sT`M+mXe?;tFV_uW%&HsBs>i0?V4{@|8>zL?EihRy4+2!cp zCR8CiX0<3~(aB21MF6qmY#g9N`tNU;;>C6eL4av`evO_K=Rp#b2i(Dw)+@QD}*4o6W(eDMZ@GnUvILyfe8$#YMU&dX}jY91kkEIrL^ zEY2(NzxfQ5#2L1ecD-$7kiLSnwe_Cv@(wa{_mq$XYfn24Qg6@Lb`z#1=snC#37B`} zYVm^ghYBkxb7BhhdfCnOSmRN{JGu1+4l3tnI~~+gAjTB+Os(r9593F}(}4&$6(DD= z)ZX<%uJ=@@QZ(zDo|-LWrdBN(-k&~hl)#Ytm<I*C2A4%c z-~t~rGGszKfSHOR%^F!x{RKAF>~MOkxK@C2L@0q1X!@E9F^2cA3{VDK>fg1eK zYR`HS0D07sZE#T?red((r>%^q3@OEYnWMtA={)sJOGo|S9m@1(c+a1>xjL9t9R|!N zMier}nF;WE^0DJQiA;Pr!GxuC&xM(-*`0e9DihPegsFxL$>RFq_=88a0yz9sL|JqF zp>FQ=WgE?ZVniwfro*GAqV3Cfkt30i*L7naiVZ8S1)$(0*9;{YN8qLeKxE#k5vJKUaCj zbNb#W8~TQ#P!{W?9mmd&*9leFDmfVgM_(~$(YxoGs?1Ecud`I+1o5!`y>F^vPmmg` zsVcS~gO2J%1Nw#iXPaj-w7lO;gC|0NQ(@44$Hr6?ATxU)H5j0p@KRdmUc#q*2g}6I zW%7qJlspCLxNliwp}{(fInRS%w!BF>*eOmTg!h`+Z zW4z%+4p?cN|1p7<%5_(V*)ITK@xK`g6d)oyH5hw(2#gNF$0<^Ru?Og2JzN1e<;77& z=kXSk?^mtOcx2JL@M~zdQ?MwD4eyisiS41-n?5hd zPn*pPp+j`>B>6tUkXBk}4$#fTN#6OO26_OZU;Y{GWBs|L&^z7gF;m=d-P+-U7Rvv5 zoDweFIw~UZk&0Fw-MGR|ze_YNzBi53)vq56AXZs}Y(KW{b0a%dK zrQKU3#O`kwO#^^AD@lAPiX*l)Sa8vg)X0v0J8k>eSSpIA$y#E+gPjo~Xi1-xK1|s| zEh%CI7qa9P;ST!N7vM2(Qn|R88`OY~Oqm?5|2S?BBXE!@aW<&8!mp-V-VZG4FKe&( zhNA}gW9;kJ;5!XKYp=13G0nlUB2PP*9vyl1-A|>qX17mq0E@fGk_!d45r<1|dp4P_ zQ7I7&1l)~IkxVVBd8s;VdlGkZ>l0dv)c@_UnaaM$_2O_(y88731e!M$f@^*cUdLR@ z3kQSu6Rc$d@uH%lF)wAqcYPA7%Q{i(du8Ru`(!-b$Ptrt=*}tl5i4O@-{cxp9DkW; zS>Jp=jud$f9~m<^jc6X^+c|Zh6Ryt6($>!;%lcR9hi^QiCmSJl`ChTRGmU)sDh>3O z7w)i!15WcVz6BV4Z$AXYdyTg=C<^JSqQrm?Pp4Cr(wp~rst;+sY*E6C5f0v2e(wFb z?xrxo!932t$XizSh{EZJq|f`0ZN7eU@B9^3ELRAU#{;AXr$Vedd^&a05AP0GeyHYu zF10;;=t$_!ek*DR$cC+XPLellYAAR_;PJ%}RJwzaFjd3CTW6A!D(g>jMW*n9Z}2cv zBR8N(et~gG-qYZ?&y4Sge>qr)CzTHGhY@F>Rp-PWiu?q*gMlB`_Fq0Ge*|tJA|9S&f5Scy-}}O{0&$ z!gNX-wWG$LWNOj|mQo;VW@2_{sX41gLi;9W$1|XDZXtKBRuJMR9=~YnfsjOFbg?&( z0Jhyb9lIc)iv#|I9ud#*S^whfMgthQEim-nWkQ#tB+A|{=f%vL<(sklun~gWcma^J z>tH0P!~LZGAK=sf0Ga!|f%d!SsaYQM>RHn%;G>;VQ|u2{VS1d4fQbqvttGxP26^-u zxd2@J^oCeO$qTpN(@%FbGLclgnA)}ovqX2;=e-!w(EsMO&x7-?Z{9mQ5FQ3~|GQ*( zn2u2xBtiEOnL}web_JgsYNZGUtU7j|yX`ZL3~Q_e;djfR({NSw`XDKj!*Ho3D%5fc zJ2BfHG}-nObn~Y&lEbbEHAHoro;DWzQ0X>(NLae2-DP88MkmL{qp#`*(g3oQ2l{#d-e{}doB-VOk?6S%7Dl@ zI>NJD%V0=-W$zz;s;W^8?WDe&WEZnZR(4}FbCF?l3NZUAY91Tkg0h-9U6-Myr_pmS zMfCgQzwUcAm&$=do7cYkWnBjsYtmWS{HzoT3w-*H6$un6fF+f~llYl>LhubH!}mMf zf0Gm|=m;!i%JNO`%mAwsnR1(%D!#oEY~}%i0k2;vmB)Y;GUYlf#;cf*2cXXL7Lqik zFJ?y!kO?8&)h8Z^^sQa%%SaKXKEJ|z^Rpz`OvKVI7dx{}`8j-Tn#q(8-;;l*r;-SQ z;VjWcmft+gR9K8u<10Bo0eUpXZjvRsoH^eL!chT~8-_!=)mj2Djbsu%o?$%;_2SVb z0K1|o={C+*Xq>r9`2F86=(;SiGtGC;P{epE015g5{lOd#FV|gb=--|p58EM6NMX^G zxT!lMg;RqiZb!v{#L}4NvEr}8??B!n^v4mp9Dou*UrjLZTO4-#wDCp{U5iIX$aG>| z+T^Zx$-96|gm9~7m9%D%Hm*Y11sjQD>ozlWX~2X}49NKYSUz3Lw}K4^DfxD;2=m9X z<SP0GMW)?r` z%G`k?b;=sw8G7LW%eJh3caRbwZGTnuf&H2)Lh#`t6HY^Q-8|h9JD7q=Ju7U;_@l&^ z%6d6h)^09w7~;fn8>-V9tv7M%BWCFknAbcQAQ#|`R^U`3Fq1cQ=+bvVqFa6knItP*Z~D5wXw36qEKF79Kh@aSr6dwFGpz&Ido0J{AX*IUoT zchJr2wNAZ+TCD>R&D(jc%)2k3L^n#@c^B37)VvX}YB`XUAR|8me1gpko*X{YS*^`e zKIR9~?~)K1w=fZu^fTeIA3a=BQ{I?S%sta(ZR-Ibc?Pg$aHxnXsWa|`7iQ^|SKZ%wbbZBX zPIHI3knTTqM}-Z7vhsouJF$Q0z698zK4;onqaEWqVUq@&>&6Nk*Zgq<$q^uw1%0v! zkEGW|&4Kj+?fI;+`zv�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≥{iT~m<0sj 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