From 893c23182017cd07b1513d0a5190a11bce7290a7 Mon Sep 17 00:00:00 2001 From: rivantsov Date: Sat, 6 Jan 2024 02:46:16 -0800 Subject: [PATCH 1/6] updated to .net8 --- .../030.Irony.GrammarExplorer.csproj | 17 +- Irony.GrammarExplorer/Program.cs | 22 +- .../025.Irony.Samples.Console.csproj | 2 +- Irony.Tests/040.Irony.Tests.VsTest.csproj | 175 +++------------- Irony.Tests/050.Irony.Tests.NUnit.csproj | 188 ++++-------------- Irony.Tests/packages.config | 4 - Irony.WinForms/035.Irony.WinForms.csproj | 148 ++------------ .../Refal.UnitTests.VsTest.csproj | 170 +++------------- 8 files changed, 133 insertions(+), 593 deletions(-) delete mode 100644 Irony.Tests/packages.config diff --git a/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj b/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj index 9d2fb12..fe42347 100644 --- a/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj +++ b/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj @@ -1,13 +1,22 @@  - Exe - net472 + WinExe + net8.0-windows + true Irony.GrammarExplorer Irony.GrammarExplorer false + + 1701;1702;CA1416 + + + + 1701;1702;CA1416 + + @@ -15,8 +24,4 @@ - - - - diff --git a/Irony.GrammarExplorer/Program.cs b/Irony.GrammarExplorer/Program.cs index 92dde6c..6c9c30f 100644 --- a/Irony.GrammarExplorer/Program.cs +++ b/Irony.GrammarExplorer/Program.cs @@ -15,6 +15,7 @@ using System.Windows.Forms; using System.Diagnostics; using Irony.WinForms.Exceptions; +using static System.Windows.Forms.DataFormats; namespace Irony.GrammarExplorer { class Program : MarshalByRefObject { @@ -23,28 +24,13 @@ class Program : MarshalByRefObject { /// [STAThread] static void Main() { - var program = CreateInstanceInSeparateDomain(); - program.RunApplication(); - } - - static Program CreateInstanceInSeparateDomain() { - var setup = new AppDomainSetup() - { - ShadowCopyFiles = true.ToString() - }; - - var domain = AppDomain.CreateDomain("HostedDomain", null, setup); - return (Program)domain.CreateInstanceAndUnwrap(typeof(Program).Assembly.FullName, typeof(Program).FullName); - } - - void RunApplication() { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); + ApplicationConfiguration.Initialize(); Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.Run(new fmGrammarExplorer()); } + static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { fmShowException.ShowException(e.Exception); Debug.Write("Exception!: ############################################## \n" + e.Exception.ToString()); @@ -55,7 +41,7 @@ static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEv string message = (ex == null ? e.ExceptionObject.ToString() : ex.Message); if (ex == null) { Debug.Write("Exception!: ############################################## \n" + e.ExceptionObject.ToString()); - MessageBox.Show(message, "Exception"); + _ = MessageBox.Show(message, "Exception"); } else { fmShowException.ShowException(ex); } diff --git a/Irony.Samples.Console/025.Irony.Samples.Console.csproj b/Irony.Samples.Console/025.Irony.Samples.Console.csproj index a2ee0c2..253d583 100644 --- a/Irony.Samples.Console/025.Irony.Samples.Console.csproj +++ b/Irony.Samples.Console/025.Irony.Samples.Console.csproj @@ -1,7 +1,7 @@  - net472 + net8 Irony.Samples.Console Irony.Samples.Console false diff --git a/Irony.Tests/040.Irony.Tests.VsTest.csproj b/Irony.Tests/040.Irony.Tests.VsTest.csproj index 26fb73d..eb02774 100644 --- a/Irony.Tests/040.Irony.Tests.VsTest.csproj +++ b/Irony.Tests/040.Irony.Tests.VsTest.csproj @@ -1,142 +1,33 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {0CFA8CEE-0110-49C1-93E5-CB7BE3A5716B} - Library - Properties - Irony.Tests - Irony.Tests.VSTest - v4.7.2 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - - - - - - - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - false - - - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - {321A7F5D-00C2-4095-9970-075CDEE8C139} - 015.Irony.Interpreter - - - {AD263C0B-99D3-40A9-9DBF-9086CC524A0B} - 020.Irony.Samples - - - {D81F5C91-D7DB-46E5-BC99-49488FB6814C} - 010.Irony - - - - - - - - False - Microsoft .NET Framework 4 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file + + + + net8 + Irony + Irony.Tests.VsTest + false + false + 1.2.0 + 1.2.0 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Irony.Tests/050.Irony.Tests.NUnit.csproj b/Irony.Tests/050.Irony.Tests.NUnit.csproj index 211773b..24786bd 100644 --- a/Irony.Tests/050.Irony.Tests.NUnit.csproj +++ b/Irony.Tests/050.Irony.Tests.NUnit.csproj @@ -1,151 +1,37 @@ - - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {1A98BEDA-DF53-49B7-A366-2ED7606036BD} - Library - Properties - Irony.Tests - Irony.Tests.NUnit - v4.7.2 - 512 - - - - - - - - - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - - - - true - full - false - bin\Debug\ - TRACE;USE_NUNIT - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE;USE_NUNIT - prompt - 4 - AllRules.ruleset - false - - - - ..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - {321A7F5D-00C2-4095-9970-075CDEE8C139} - 015.Irony.Interpreter - - - {AD263C0B-99D3-40A9-9DBF-9086CC524A0B} - 020.Irony.Samples - - - {D81F5C91-D7DB-46E5-BC99-49488FB6814C} - 010.Irony - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + + + + net8 + Irony.Tests + Irony.Tests.NUnit + false + false + 1.2.0 + 1.2.0 + + + + + + + + + + + + + + + + + + + + + + + ..\..\..\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll + + + + diff --git a/Irony.Tests/packages.config b/Irony.Tests/packages.config deleted file mode 100644 index 803d28f..0000000 --- a/Irony.Tests/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Irony.WinForms/035.Irony.WinForms.csproj b/Irony.WinForms/035.Irony.WinForms.csproj index 48a8445..4334498 100644 --- a/Irony.WinForms/035.Irony.WinForms.csproj +++ b/Irony.WinForms/035.Irony.WinForms.csproj @@ -1,126 +1,22 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {70D319F3-3C0C-4EB5-A271-58ED22FB3070} - Library - Properties - Irony.WinForms - Irony.WinForms - v4.7.2 - 512 - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - ..\packages\FCTB.2.16.21.0\lib\FastColoredTextBox.dll - - - - - - - - - - - - - - - UserControl - - - ConsoleTextBox.cs - - - Form - - - fmShowException.cs - - - UserControl - - - - - - - UserControl - - - IronyTextBox.cs - - - UserControl - - - IronyTextBoxBase.cs - - - - - - - - - - - - {321A7F5D-00C2-4095-9970-075CDEE8C139} - 015.Irony.Interpreter - - - {D81F5C91-D7DB-46E5-BC99-49488FB6814C} - 010.Irony - - - - - ConsoleTextBox.cs - - - fmShowException.cs - - - IronyTextBox.cs - - - IronyTextBoxBase.cs - - - - - \ No newline at end of file + + + + net8.0-windows + disable + true + Irony.WinForms + Irony.WinForms + false + + + + + + + + + + + + + diff --git a/Languages/Refal.UnitTests/Refal.UnitTests.VsTest.csproj b/Languages/Refal.UnitTests/Refal.UnitTests.VsTest.csproj index 12c4bdd..3630288 100644 --- a/Languages/Refal.UnitTests/Refal.UnitTests.VsTest.csproj +++ b/Languages/Refal.UnitTests/Refal.UnitTests.VsTest.csproj @@ -1,145 +1,25 @@ - - - - Debug - AnyCPU - - - 2.0 - {94409071-FF65-4C3C-97EB-BD4FDEF90B4E} - Library - Properties - Refal.UnitTests - Refal.UnitTests.VsTest - v4.7.2 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - 3.5 - - - - - False - - - - - - - - - - - {321A7F5D-00C2-4095-9970-075CDEE8C139} - 015.Irony.Interpreter - - - {D81F5C91-D7DB-46E5-BC99-49488FB6814C} - 010.Irony - - - {19A86418-BA99-41F4-80A5-A7F3A6383123} - Refal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + net8 + Refal.UnitTests.VsTest + Refal.UnitTests.VsTest + false + false + 1.2.0 + 1.2.0 + + + + + + + + + + + + + + + From 4604c1d289af949a91f3de4182e21d4912083b37 Mon Sep 17 00:00:00 2001 From: rivantsov Date: Mon, 8 Jan 2024 09:15:08 -0800 Subject: [PATCH 2/6] Removed Irony.WinForms project --- .../030.Irony.GrammarExplorer.csproj | 10 +- .../ConsoleTextBox.Designer.cs | 76 +- Irony.GrammarExplorer/ConsoleTextBox.cs | 71 + .../ConsoleTextBox.resx | 238 +- Irony.GrammarExplorer/Program.cs | 1 - .../fmGrammarExplorer.Designer.cs | 2384 +++++++++-------- Irony.GrammarExplorer/fmGrammarExplorer.cs | 43 +- Irony.GrammarExplorer/fmGrammarExplorer.resx | 50 +- .../fmShowException.Designer.cs | 120 +- .../fmShowException.cs | 64 +- .../fmShowException.resx | 238 +- Irony.WinForms/035.Irony.WinForms.csproj | 22 - Irony.WinForms/BorderStyleEx.cs | 29 - Irony.WinForms/ConsoleTextBox.cs | 130 - .../AboutFastColoredTextBox.txt | 6 - .../FastColoredTextBox/ConsoleTextBox.cs | 119 - .../Highlighter/AboutCodeHighlighter.txt | 1 - Irony.WinForms/Highlighter/EditorAdapter.cs | 144 - .../Highlighter/EditorViewAdapter.cs | 229 -- .../FastColoredTextBoxHighlighter.cs | 281 -- .../Highlighter/RichTextBoxHighlighter.cs | 241 -- Irony.WinForms/ITextBox.cs | 39 - Irony.WinForms/IronyTextBox.Designer.cs | 38 - Irony.WinForms/IronyTextBox.cs | 76 - Irony.WinForms/IronyTextBox.resx | 120 - Irony.WinForms/IronyTextBoxBase.Designer.cs | 42 - Irony.WinForms/IronyTextBoxBase.cs | 162 -- Irony.WinForms/IronyTextBoxBase.resx | 120 - Irony.WinForms/Properties/AssemblyInfo.cs | Bin 2988 -> 0 bytes Irony.WinForms/packages.config | 4 - Irony.sln | 24 +- 31 files changed, 1718 insertions(+), 3404 deletions(-) rename {Irony.WinForms => Irony.GrammarExplorer}/ConsoleTextBox.Designer.cs (87%) create mode 100644 Irony.GrammarExplorer/ConsoleTextBox.cs rename {Irony.WinForms => Irony.GrammarExplorer}/ConsoleTextBox.resx (97%) rename {Irony.WinForms/Exceptions => Irony.GrammarExplorer}/fmShowException.Designer.cs (95%) rename {Irony.WinForms/Exceptions => Irony.GrammarExplorer}/fmShowException.cs (93%) rename {Irony.WinForms/Exceptions => Irony.GrammarExplorer}/fmShowException.resx (97%) delete mode 100644 Irony.WinForms/035.Irony.WinForms.csproj delete mode 100644 Irony.WinForms/BorderStyleEx.cs delete mode 100644 Irony.WinForms/ConsoleTextBox.cs delete mode 100644 Irony.WinForms/FastColoredTextBox/AboutFastColoredTextBox.txt delete mode 100644 Irony.WinForms/FastColoredTextBox/ConsoleTextBox.cs delete mode 100644 Irony.WinForms/Highlighter/AboutCodeHighlighter.txt delete mode 100644 Irony.WinForms/Highlighter/EditorAdapter.cs delete mode 100644 Irony.WinForms/Highlighter/EditorViewAdapter.cs delete mode 100644 Irony.WinForms/Highlighter/FastColoredTextBoxHighlighter.cs delete mode 100644 Irony.WinForms/Highlighter/RichTextBoxHighlighter.cs delete mode 100644 Irony.WinForms/ITextBox.cs delete mode 100644 Irony.WinForms/IronyTextBox.Designer.cs delete mode 100644 Irony.WinForms/IronyTextBox.cs delete mode 100644 Irony.WinForms/IronyTextBox.resx delete mode 100644 Irony.WinForms/IronyTextBoxBase.Designer.cs delete mode 100644 Irony.WinForms/IronyTextBoxBase.cs delete mode 100644 Irony.WinForms/IronyTextBoxBase.resx delete mode 100644 Irony.WinForms/Properties/AssemblyInfo.cs delete mode 100644 Irony.WinForms/packages.config diff --git a/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj b/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj index fe42347..3a117c9 100644 --- a/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj +++ b/Irony.GrammarExplorer/030.Irony.GrammarExplorer.csproj @@ -18,10 +18,18 @@ - + + + UserControl + + + Form + + + diff --git a/Irony.WinForms/ConsoleTextBox.Designer.cs b/Irony.GrammarExplorer/ConsoleTextBox.Designer.cs similarity index 87% rename from Irony.WinForms/ConsoleTextBox.Designer.cs rename to Irony.GrammarExplorer/ConsoleTextBox.Designer.cs index 70a6184..9049dc5 100644 --- a/Irony.WinForms/ConsoleTextBox.Designer.cs +++ b/Irony.GrammarExplorer/ConsoleTextBox.Designer.cs @@ -1,38 +1,38 @@ -namespace Irony.WinForms { - partial class ConsoleTextBox { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if (disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - this.SuspendLayout(); - // - // ConsoleTextBox - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.Name = "ConsoleTextBox"; - this.ResumeLayout(false); - - } - - #endregion - } -} +namespace Irony.GrammarExplorer { + + partial class ConsoleTextBox { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.SuspendLayout(); + // + // ConsoleTextBox + // + this.Name = "ConsoleTextBox"; + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/Irony.GrammarExplorer/ConsoleTextBox.cs b/Irony.GrammarExplorer/ConsoleTextBox.cs new file mode 100644 index 0000000..693b090 --- /dev/null +++ b/Irony.GrammarExplorer/ConsoleTextBox.cs @@ -0,0 +1,71 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using Irony.Interpreter; +using Irony.Parsing; + +namespace Irony.GrammarExplorer { + + /// + /// TextBox with for console emulation. + /// Implements interface. + /// + /// implementation is thread-safe. + [ToolboxItem(true)] + public partial class ConsoleTextBox : TextBox, IConsoleAdapter { + private bool _canceled; + + /// + /// Initializes a new instance of the class. + /// + public ConsoleTextBox() { + InitializeComponent(); + } + + + protected override void OnHandleDestroyed(EventArgs e) { + base.OnHandleDestroyed(e); + Canceled = true; + } + + [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool Canceled { + get { return _canceled; } + set { + _canceled = value; + } + } + + public void Write(string text) { + this.Text += Environment.NewLine + text; + } + + public void WriteLine(string text) { + Write(text + Environment.NewLine); + } + + public void SetTextStyle(ConsoleTextStyle style) { + } + + public int Read() { + throw new NotSupportedException(); + } + + public string ReadLine() { + if (!InvokeRequired) { + Focus(); + return Console.ReadLine(); + } + return Invoke(new Func(Console.ReadLine)) as string; + } + + public void SetTitle(string title) { + throw new NotSupportedException(); + } + + public string GetOutput() { + return Text; + } + } +} diff --git a/Irony.WinForms/ConsoleTextBox.resx b/Irony.GrammarExplorer/ConsoleTextBox.resx similarity index 97% rename from Irony.WinForms/ConsoleTextBox.resx rename to Irony.GrammarExplorer/ConsoleTextBox.resx index 29dcb1b..1af7de1 100644 --- a/Irony.WinForms/ConsoleTextBox.resx +++ b/Irony.GrammarExplorer/ConsoleTextBox.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/Irony.GrammarExplorer/Program.cs b/Irony.GrammarExplorer/Program.cs index 6c9c30f..699d511 100644 --- a/Irony.GrammarExplorer/Program.cs +++ b/Irony.GrammarExplorer/Program.cs @@ -14,7 +14,6 @@ using System.Collections.Generic; using System.Windows.Forms; using System.Diagnostics; -using Irony.WinForms.Exceptions; using static System.Windows.Forms.DataFormats; namespace Irony.GrammarExplorer { diff --git a/Irony.GrammarExplorer/fmGrammarExplorer.Designer.cs b/Irony.GrammarExplorer/fmGrammarExplorer.Designer.cs index 1027c3a..6d911e9 100644 --- a/Irony.GrammarExplorer/fmGrammarExplorer.Designer.cs +++ b/Irony.GrammarExplorer/fmGrammarExplorer.Designer.cs @@ -23,9 +23,11 @@ protected override void Dispose(bool disposing) { /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// - private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fmGrammarExplorer)); + Properties.Settings settings1 = new Properties.Settings(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); @@ -34,1259 +36,1334 @@ private void InitializeComponent() { System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - this.tabGrammar = new System.Windows.Forms.TabControl(); - this.pageTerminals = new System.Windows.Forms.TabPage(); - this.txtTerms = new System.Windows.Forms.TextBox(); - this.pageNonTerms = new System.Windows.Forms.TabPage(); - this.txtNonTerms = new System.Windows.Forms.TextBox(); - this.pageParserStates = new System.Windows.Forms.TabPage(); - this.txtParserStates = new System.Windows.Forms.TextBox(); - this.pageTest = new System.Windows.Forms.TabPage(); - this.txtSource = new Irony.WinForms.IronyTextBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.btnLocate = new System.Windows.Forms.Button(); - this.chkDisableHili = new System.Windows.Forms.CheckBox(); - this.btnRun = new System.Windows.Forms.Button(); - this.btnFileOpen = new System.Windows.Forms.Button(); - this.btnParse = new System.Windows.Forms.Button(); - this.splitRight = new System.Windows.Forms.Splitter(); - this.tabOutput = new System.Windows.Forms.TabControl(); - this.pageSyntaxTree = new System.Windows.Forms.TabPage(); - this.tvParseTree = new System.Windows.Forms.TreeView(); - this.pageAst = new System.Windows.Forms.TabPage(); - this.tvAst = new System.Windows.Forms.TreeView(); - this.chkParserTrace = new System.Windows.Forms.CheckBox(); - this.pnlLang = new System.Windows.Forms.Panel(); - this.chkAutoRefresh = new System.Windows.Forms.CheckBox(); - this.btnManageGrammars = new System.Windows.Forms.Button(); - this.lblSearchError = new System.Windows.Forms.Label(); - this.btnSearch = new System.Windows.Forms.Button(); - this.txtSearch = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.cboGrammars = new System.Windows.Forms.ComboBox(); - this.menuGrammars = new System.Windows.Forms.ContextMenuStrip(this.components); - this.miAdd = new System.Windows.Forms.ToolStripMenuItem(); - this.miRefresh = new System.Windows.Forms.ToolStripMenuItem(); - this.miSeparator = new System.Windows.Forms.ToolStripSeparator(); - this.miRemove = new System.Windows.Forms.ToolStripMenuItem(); - this.miRemoveAll = new System.Windows.Forms.ToolStripMenuItem(); - this.dlgOpenFile = new System.Windows.Forms.OpenFileDialog(); - this.dlgSelectAssembly = new System.Windows.Forms.OpenFileDialog(); - this.splitBottom = new System.Windows.Forms.Splitter(); - this.tabBottom = new System.Windows.Forms.TabControl(); - this.pageLanguage = new System.Windows.Forms.TabPage(); - this.grpLanguageInfo = new System.Windows.Forms.GroupBox(); - this.label8 = new System.Windows.Forms.Label(); - this.lblParserStateCount = new System.Windows.Forms.Label(); - this.lblLanguageDescr = new System.Windows.Forms.Label(); - this.txtGrammarComments = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.lblLanguageVersion = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.lblLanguage = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.lblParserConstrTime = new System.Windows.Forms.Label(); - this.pageGrammarErrors = new System.Windows.Forms.TabPage(); - this.gridGrammarErrors = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.pageParserOutput = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.gridCompileErrors = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.grpCompileInfo = new System.Windows.Forms.GroupBox(); - this.label12 = new System.Windows.Forms.Label(); - this.lblParseErrorCount = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.lblParseTime = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.lblSrcLineCount = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.lblSrcTokenCount = new System.Windows.Forms.Label(); - this.pageParserTrace = new System.Windows.Forms.TabPage(); - this.grpParserActions = new System.Windows.Forms.GroupBox(); - this.gridParserTrace = new System.Windows.Forms.DataGridView(); - this.State = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Stack = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Input = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Action = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.splitter1 = new System.Windows.Forms.Splitter(); - this.grpTokens = new System.Windows.Forms.GroupBox(); - this.lstTokens = new System.Windows.Forms.ListBox(); - this.pnlParserTraceTop = new System.Windows.Forms.Panel(); - this.chkExcludeComments = new System.Windows.Forms.CheckBox(); - this.lblTraceComment = new System.Windows.Forms.Label(); - this.pageOutput = new System.Windows.Forms.TabPage(); - this.txtOutput = new Irony.WinForms.ConsoleTextBox(); - this.pnlRuntimeInfo = new System.Windows.Forms.Panel(); - this.label14 = new System.Windows.Forms.Label(); - this.lblGCCount = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.lnkShowErrStack = new System.Windows.Forms.LinkLabel(); - this.lnkShowErrLocation = new System.Windows.Forms.LinkLabel(); - this.label5 = new System.Windows.Forms.Label(); - this.lblRunTime = new System.Windows.Forms.Label(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.tabGrammar.SuspendLayout(); - this.pageTerminals.SuspendLayout(); - this.pageNonTerms.SuspendLayout(); - this.pageParserStates.SuspendLayout(); - this.pageTest.SuspendLayout(); - this.panel1.SuspendLayout(); - this.tabOutput.SuspendLayout(); - this.pageSyntaxTree.SuspendLayout(); - this.pageAst.SuspendLayout(); - this.pnlLang.SuspendLayout(); - this.menuGrammars.SuspendLayout(); - this.tabBottom.SuspendLayout(); - this.pageLanguage.SuspendLayout(); - this.grpLanguageInfo.SuspendLayout(); - this.pageGrammarErrors.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.gridGrammarErrors)).BeginInit(); - this.pageParserOutput.SuspendLayout(); - this.groupBox1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.gridCompileErrors)).BeginInit(); - this.grpCompileInfo.SuspendLayout(); - this.pageParserTrace.SuspendLayout(); - this.grpParserActions.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.gridParserTrace)).BeginInit(); - this.grpTokens.SuspendLayout(); - this.pnlParserTraceTop.SuspendLayout(); - this.pageOutput.SuspendLayout(); - this.pnlRuntimeInfo.SuspendLayout(); - this.SuspendLayout(); - // + tabGrammar = new System.Windows.Forms.TabControl(); + pageTerminals = new System.Windows.Forms.TabPage(); + txtTerms = new System.Windows.Forms.TextBox(); + pageNonTerms = new System.Windows.Forms.TabPage(); + txtNonTerms = new System.Windows.Forms.TextBox(); + pageParserStates = new System.Windows.Forms.TabPage(); + txtParserStates = new System.Windows.Forms.TextBox(); + pageTest = new System.Windows.Forms.TabPage(); + txtSource = new System.Windows.Forms.TextBox(); + panel1 = new System.Windows.Forms.Panel(); + btnLocate = new System.Windows.Forms.Button(); + btnRun = new System.Windows.Forms.Button(); + btnFileOpen = new System.Windows.Forms.Button(); + btnParse = new System.Windows.Forms.Button(); + splitRight = new System.Windows.Forms.Splitter(); + tabOutput = new System.Windows.Forms.TabControl(); + pageSyntaxTree = new System.Windows.Forms.TabPage(); + tvParseTree = new System.Windows.Forms.TreeView(); + pageAst = new System.Windows.Forms.TabPage(); + tvAst = new System.Windows.Forms.TreeView(); + chkParserTrace = new System.Windows.Forms.CheckBox(); + pnlLang = new System.Windows.Forms.Panel(); + chkAutoRefresh = new System.Windows.Forms.CheckBox(); + btnManageGrammars = new System.Windows.Forms.Button(); + lblSearchError = new System.Windows.Forms.Label(); + btnSearch = new System.Windows.Forms.Button(); + txtSearch = new System.Windows.Forms.TextBox(); + label2 = new System.Windows.Forms.Label(); + cboGrammars = new System.Windows.Forms.ComboBox(); + menuGrammars = new System.Windows.Forms.ContextMenuStrip(components); + miAdd = new System.Windows.Forms.ToolStripMenuItem(); + miRefresh = new System.Windows.Forms.ToolStripMenuItem(); + miSeparator = new System.Windows.Forms.ToolStripSeparator(); + miRemove = new System.Windows.Forms.ToolStripMenuItem(); + miRemoveAll = new System.Windows.Forms.ToolStripMenuItem(); + dlgOpenFile = new System.Windows.Forms.OpenFileDialog(); + dlgSelectAssembly = new System.Windows.Forms.OpenFileDialog(); + splitBottom = new System.Windows.Forms.Splitter(); + tabBottom = new System.Windows.Forms.TabControl(); + pageLanguage = new System.Windows.Forms.TabPage(); + grpLanguageInfo = new System.Windows.Forms.GroupBox(); + label8 = new System.Windows.Forms.Label(); + lblParserStateCount = new System.Windows.Forms.Label(); + lblLanguageDescr = new System.Windows.Forms.Label(); + txtGrammarComments = new System.Windows.Forms.TextBox(); + label11 = new System.Windows.Forms.Label(); + label9 = new System.Windows.Forms.Label(); + lblLanguageVersion = new System.Windows.Forms.Label(); + label10 = new System.Windows.Forms.Label(); + lblLanguage = new System.Windows.Forms.Label(); + label4 = new System.Windows.Forms.Label(); + label6 = new System.Windows.Forms.Label(); + lblParserConstrTime = new System.Windows.Forms.Label(); + pageGrammarErrors = new System.Windows.Forms.TabPage(); + gridGrammarErrors = new System.Windows.Forms.DataGridView(); + dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + pageParserOutput = new System.Windows.Forms.TabPage(); + groupBox1 = new System.Windows.Forms.GroupBox(); + gridCompileErrors = new System.Windows.Forms.DataGridView(); + dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + grpCompileInfo = new System.Windows.Forms.GroupBox(); + label12 = new System.Windows.Forms.Label(); + lblParseErrorCount = new System.Windows.Forms.Label(); + label1 = new System.Windows.Forms.Label(); + lblParseTime = new System.Windows.Forms.Label(); + label7 = new System.Windows.Forms.Label(); + lblSrcLineCount = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); + lblSrcTokenCount = new System.Windows.Forms.Label(); + pageParserTrace = new System.Windows.Forms.TabPage(); + grpParserActions = new System.Windows.Forms.GroupBox(); + gridParserTrace = new System.Windows.Forms.DataGridView(); + State = new System.Windows.Forms.DataGridViewTextBoxColumn(); + Stack = new System.Windows.Forms.DataGridViewTextBoxColumn(); + Input = new System.Windows.Forms.DataGridViewTextBoxColumn(); + Action = new System.Windows.Forms.DataGridViewTextBoxColumn(); + splitter1 = new System.Windows.Forms.Splitter(); + grpTokens = new System.Windows.Forms.GroupBox(); + lstTokens = new System.Windows.Forms.ListBox(); + pnlParserTraceTop = new System.Windows.Forms.Panel(); + chkExcludeComments = new System.Windows.Forms.CheckBox(); + lblTraceComment = new System.Windows.Forms.Label(); + pageOutput = new System.Windows.Forms.TabPage(); + txtOutput = new ConsoleTextBox(); + pnlRuntimeInfo = new System.Windows.Forms.Panel(); + label14 = new System.Windows.Forms.Label(); + lblGCCount = new System.Windows.Forms.Label(); + label13 = new System.Windows.Forms.Label(); + lnkShowErrStack = new System.Windows.Forms.LinkLabel(); + lnkShowErrLocation = new System.Windows.Forms.LinkLabel(); + label5 = new System.Windows.Forms.Label(); + lblRunTime = new System.Windows.Forms.Label(); + toolTip = new System.Windows.Forms.ToolTip(components); + tabGrammar.SuspendLayout(); + pageTerminals.SuspendLayout(); + pageNonTerms.SuspendLayout(); + pageParserStates.SuspendLayout(); + pageTest.SuspendLayout(); + panel1.SuspendLayout(); + tabOutput.SuspendLayout(); + pageSyntaxTree.SuspendLayout(); + pageAst.SuspendLayout(); + pnlLang.SuspendLayout(); + menuGrammars.SuspendLayout(); + tabBottom.SuspendLayout(); + pageLanguage.SuspendLayout(); + grpLanguageInfo.SuspendLayout(); + pageGrammarErrors.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)gridGrammarErrors).BeginInit(); + pageParserOutput.SuspendLayout(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)gridCompileErrors).BeginInit(); + grpCompileInfo.SuspendLayout(); + pageParserTrace.SuspendLayout(); + grpParserActions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)gridParserTrace).BeginInit(); + grpTokens.SuspendLayout(); + pnlParserTraceTop.SuspendLayout(); + pageOutput.SuspendLayout(); + pnlRuntimeInfo.SuspendLayout(); + SuspendLayout(); + // // tabGrammar - // - this.tabGrammar.Controls.Add(this.pageTerminals); - this.tabGrammar.Controls.Add(this.pageNonTerms); - this.tabGrammar.Controls.Add(this.pageParserStates); - this.tabGrammar.Controls.Add(this.pageTest); - this.tabGrammar.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabGrammar.Location = new System.Drawing.Point(0, 29); - this.tabGrammar.Name = "tabGrammar"; - this.tabGrammar.SelectedIndex = 0; - this.tabGrammar.Size = new System.Drawing.Size(1022, 381); - this.tabGrammar.TabIndex = 0; - // + // + tabGrammar.Controls.Add(pageTerminals); + tabGrammar.Controls.Add(pageNonTerms); + tabGrammar.Controls.Add(pageParserStates); + tabGrammar.Controls.Add(pageTest); + tabGrammar.Dock = System.Windows.Forms.DockStyle.Fill; + tabGrammar.Location = new System.Drawing.Point(0, 67); + tabGrammar.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + tabGrammar.Name = "tabGrammar"; + tabGrammar.SelectedIndex = 0; + tabGrammar.Size = new System.Drawing.Size(2044, 879); + tabGrammar.TabIndex = 0; + // // pageTerminals - // - this.pageTerminals.Controls.Add(this.txtTerms); - this.pageTerminals.Location = new System.Drawing.Point(4, 22); - this.pageTerminals.Name = "pageTerminals"; - this.pageTerminals.Padding = new System.Windows.Forms.Padding(3); - this.pageTerminals.Size = new System.Drawing.Size(1014, 355); - this.pageTerminals.TabIndex = 5; - this.pageTerminals.Text = "Terminals"; - this.pageTerminals.UseVisualStyleBackColor = true; - // + // + pageTerminals.Controls.Add(txtTerms); + pageTerminals.Location = new System.Drawing.Point(4, 39); + pageTerminals.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageTerminals.Name = "pageTerminals"; + pageTerminals.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageTerminals.Size = new System.Drawing.Size(2036, 836); + pageTerminals.TabIndex = 5; + pageTerminals.Text = "Terminals"; + pageTerminals.UseVisualStyleBackColor = true; + // // txtTerms - // - this.txtTerms.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtTerms.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.txtTerms.HideSelection = false; - this.txtTerms.Location = new System.Drawing.Point(3, 3); - this.txtTerms.Multiline = true; - this.txtTerms.Name = "txtTerms"; - this.txtTerms.ReadOnly = true; - this.txtTerms.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.txtTerms.Size = new System.Drawing.Size(1008, 349); - this.txtTerms.TabIndex = 2; - // + // + txtTerms.AcceptsTab = true; + txtTerms.Dock = System.Windows.Forms.DockStyle.Fill; + txtTerms.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + txtTerms.HideSelection = false; + txtTerms.Location = new System.Drawing.Point(6, 7); + txtTerms.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + txtTerms.Multiline = true; + txtTerms.Name = "txtTerms"; + txtTerms.ReadOnly = true; + txtTerms.ScrollBars = System.Windows.Forms.ScrollBars.Both; + txtTerms.Size = new System.Drawing.Size(2024, 822); + txtTerms.TabIndex = 2; + // // pageNonTerms - // - this.pageNonTerms.Controls.Add(this.txtNonTerms); - this.pageNonTerms.Location = new System.Drawing.Point(4, 22); - this.pageNonTerms.Name = "pageNonTerms"; - this.pageNonTerms.Padding = new System.Windows.Forms.Padding(3); - this.pageNonTerms.Size = new System.Drawing.Size(1014, 355); - this.pageNonTerms.TabIndex = 0; - this.pageNonTerms.Text = "Non-Terminals"; - this.pageNonTerms.UseVisualStyleBackColor = true; - // + // + pageNonTerms.Controls.Add(txtNonTerms); + pageNonTerms.Location = new System.Drawing.Point(4, 39); + pageNonTerms.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageNonTerms.Name = "pageNonTerms"; + pageNonTerms.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageNonTerms.Size = new System.Drawing.Size(2036, 836); + pageNonTerms.TabIndex = 0; + pageNonTerms.Text = "Non-Terminals"; + pageNonTerms.UseVisualStyleBackColor = true; + // // txtNonTerms - // - this.txtNonTerms.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtNonTerms.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.txtNonTerms.HideSelection = false; - this.txtNonTerms.Location = new System.Drawing.Point(3, 3); - this.txtNonTerms.Multiline = true; - this.txtNonTerms.Name = "txtNonTerms"; - this.txtNonTerms.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.txtNonTerms.Size = new System.Drawing.Size(1008, 349); - this.txtNonTerms.TabIndex = 1; - this.txtNonTerms.WordWrap = false; - // + // + txtNonTerms.Dock = System.Windows.Forms.DockStyle.Fill; + txtNonTerms.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + txtNonTerms.HideSelection = false; + txtNonTerms.Location = new System.Drawing.Point(6, 7); + txtNonTerms.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + txtNonTerms.Multiline = true; + txtNonTerms.Name = "txtNonTerms"; + txtNonTerms.ScrollBars = System.Windows.Forms.ScrollBars.Both; + txtNonTerms.Size = new System.Drawing.Size(2024, 822); + txtNonTerms.TabIndex = 1; + txtNonTerms.WordWrap = false; + // // pageParserStates - // - this.pageParserStates.Controls.Add(this.txtParserStates); - this.pageParserStates.Location = new System.Drawing.Point(4, 22); - this.pageParserStates.Name = "pageParserStates"; - this.pageParserStates.Padding = new System.Windows.Forms.Padding(3); - this.pageParserStates.Size = new System.Drawing.Size(1014, 355); - this.pageParserStates.TabIndex = 1; - this.pageParserStates.Text = "Parser States"; - this.pageParserStates.UseVisualStyleBackColor = true; - // + // + pageParserStates.Controls.Add(txtParserStates); + pageParserStates.Location = new System.Drawing.Point(4, 39); + pageParserStates.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageParserStates.Name = "pageParserStates"; + pageParserStates.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageParserStates.Size = new System.Drawing.Size(2036, 836); + pageParserStates.TabIndex = 1; + pageParserStates.Text = "Parser States"; + pageParserStates.UseVisualStyleBackColor = true; + // // txtParserStates - // - this.txtParserStates.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtParserStates.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.txtParserStates.HideSelection = false; - this.txtParserStates.Location = new System.Drawing.Point(3, 3); - this.txtParserStates.Multiline = true; - this.txtParserStates.Name = "txtParserStates"; - this.txtParserStates.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.txtParserStates.Size = new System.Drawing.Size(1008, 349); - this.txtParserStates.TabIndex = 2; - this.txtParserStates.WordWrap = false; - // + // + txtParserStates.Dock = System.Windows.Forms.DockStyle.Fill; + txtParserStates.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + txtParserStates.HideSelection = false; + txtParserStates.Location = new System.Drawing.Point(6, 7); + txtParserStates.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + txtParserStates.Multiline = true; + txtParserStates.Name = "txtParserStates"; + txtParserStates.ScrollBars = System.Windows.Forms.ScrollBars.Both; + txtParserStates.Size = new System.Drawing.Size(2024, 822); + txtParserStates.TabIndex = 2; + txtParserStates.WordWrap = false; + // // pageTest - // - this.pageTest.Controls.Add(this.txtSource); - this.pageTest.Controls.Add(this.panel1); - this.pageTest.Controls.Add(this.splitRight); - this.pageTest.Controls.Add(this.tabOutput); - this.pageTest.Location = new System.Drawing.Point(4, 22); - this.pageTest.Name = "pageTest"; - this.pageTest.Padding = new System.Windows.Forms.Padding(3); - this.pageTest.Size = new System.Drawing.Size(1014, 355); - this.pageTest.TabIndex = 4; - this.pageTest.Text = "Test"; - this.pageTest.UseVisualStyleBackColor = true; - // + // + pageTest.Controls.Add(txtSource); + pageTest.Controls.Add(panel1); + pageTest.Controls.Add(splitRight); + pageTest.Controls.Add(tabOutput); + pageTest.Location = new System.Drawing.Point(4, 39); + pageTest.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageTest.Name = "pageTest"; + pageTest.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageTest.Size = new System.Drawing.Size(2036, 836); + pageTest.TabIndex = 4; + pageTest.Text = "Test"; + pageTest.UseVisualStyleBackColor = true; + // // txtSource - // - this.txtSource.AutoScroll = true; - this.txtSource.AutoScrollMinSize = new System.Drawing.Size(25, 15); - this.txtSource.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtSource.Location = new System.Drawing.Point(3, 33); - this.txtSource.Name = "txtSource"; - this.txtSource.Size = new System.Drawing.Size(652, 319); - this.txtSource.TabIndex = 23; - this.txtSource.TextChanged += new System.EventHandler(this.txtSource_TextChanged); - // + // + txtSource.Dock = System.Windows.Forms.DockStyle.Fill; + txtSource.Location = new System.Drawing.Point(6, 76); + txtSource.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + txtSource.Multiline = true; + txtSource.Name = "txtSource"; + txtSource.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + txtSource.Size = new System.Drawing.Size(1312, 753); + txtSource.TabIndex = 23; + txtSource.TextChanged += txtSource_TextChanged; + // // panel1 - // - this.panel1.Controls.Add(this.btnLocate); - this.panel1.Controls.Add(this.chkDisableHili); - this.panel1.Controls.Add(this.btnRun); - this.panel1.Controls.Add(this.btnFileOpen); - this.panel1.Controls.Add(this.btnParse); - this.panel1.Dock = System.Windows.Forms.DockStyle.Top; - this.panel1.Location = new System.Drawing.Point(3, 3); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(652, 30); - this.panel1.TabIndex = 2; - // + // + panel1.Controls.Add(btnLocate); + panel1.Controls.Add(btnRun); + panel1.Controls.Add(btnFileOpen); + panel1.Controls.Add(btnParse); + panel1.Dock = System.Windows.Forms.DockStyle.Top; + panel1.Location = new System.Drawing.Point(6, 7); + panel1.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + panel1.Name = "panel1"; + panel1.Size = new System.Drawing.Size(1312, 69); + panel1.TabIndex = 2; + // // btnLocate - // - this.btnLocate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnLocate.Location = new System.Drawing.Point(578, 3); - this.btnLocate.Name = "btnLocate"; - this.btnLocate.Size = new System.Drawing.Size(65, 23); - this.btnLocate.TabIndex = 10; - this.btnLocate.Text = "Locate >>"; - this.toolTip.SetToolTip(this.btnLocate, "Locate the source position in parse/Ast tree. "); - this.btnLocate.UseVisualStyleBackColor = true; - this.btnLocate.Click += new System.EventHandler(this.btnLocate_Click); - // - // chkDisableHili - // - this.chkDisableHili.AutoSize = true; - this.chkDisableHili.Location = new System.Drawing.Point(5, 7); - this.chkDisableHili.Name = "chkDisableHili"; - this.chkDisableHili.Size = new System.Drawing.Size(150, 17); - this.chkDisableHili.TabIndex = 9; - this.chkDisableHili.Text = "Disable syntax highlighting"; - this.chkDisableHili.UseVisualStyleBackColor = true; - this.chkDisableHili.CheckedChanged += new System.EventHandler(this.chkDisableHili_CheckedChanged); - // + // + btnLocate.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnLocate.Location = new System.Drawing.Point(1164, 7); + btnLocate.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + btnLocate.Name = "btnLocate"; + btnLocate.Size = new System.Drawing.Size(130, 53); + btnLocate.TabIndex = 10; + btnLocate.Text = "Locate >>"; + toolTip.SetToolTip(btnLocate, "Locate the source position in parse/Ast tree. "); + btnLocate.UseVisualStyleBackColor = true; + btnLocate.Click += btnLocate_Click; + // // btnRun - // - this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnRun.Location = new System.Drawing.Point(506, 3); - this.btnRun.Name = "btnRun"; - this.btnRun.Size = new System.Drawing.Size(65, 23); - this.btnRun.TabIndex = 7; - this.btnRun.Text = "Run"; - this.toolTip.SetToolTip(this.btnRun, "Run the source sample"); - this.btnRun.UseVisualStyleBackColor = true; - this.btnRun.Click += new System.EventHandler(this.btnRun_Click); - // + // + btnRun.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnRun.Location = new System.Drawing.Point(1020, 7); + btnRun.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + btnRun.Name = "btnRun"; + btnRun.Size = new System.Drawing.Size(130, 53); + btnRun.TabIndex = 7; + btnRun.Text = "Run"; + toolTip.SetToolTip(btnRun, "Run the source sample"); + btnRun.UseVisualStyleBackColor = true; + btnRun.Click += btnRun_Click; + // // btnFileOpen - // - this.btnFileOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnFileOpen.Location = new System.Drawing.Point(362, 3); - this.btnFileOpen.Name = "btnFileOpen"; - this.btnFileOpen.Size = new System.Drawing.Size(65, 23); - this.btnFileOpen.TabIndex = 6; - this.btnFileOpen.Text = "Load ..."; - this.toolTip.SetToolTip(this.btnFileOpen, "Load a source sample..."); - this.btnFileOpen.UseVisualStyleBackColor = true; - this.btnFileOpen.Click += new System.EventHandler(this.btnFileOpen_Click); - // + // + btnFileOpen.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnFileOpen.Location = new System.Drawing.Point(732, 7); + btnFileOpen.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + btnFileOpen.Name = "btnFileOpen"; + btnFileOpen.Size = new System.Drawing.Size(130, 53); + btnFileOpen.TabIndex = 6; + btnFileOpen.Text = "Load ..."; + toolTip.SetToolTip(btnFileOpen, "Load a source sample..."); + btnFileOpen.UseVisualStyleBackColor = true; + btnFileOpen.Click += btnFileOpen_Click; + // // btnParse - // - this.btnParse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnParse.Location = new System.Drawing.Point(433, 3); - this.btnParse.Name = "btnParse"; - this.btnParse.Size = new System.Drawing.Size(67, 23); - this.btnParse.TabIndex = 1; - this.btnParse.Text = "Parse"; - this.toolTip.SetToolTip(this.btnParse, "Parse source sample"); - this.btnParse.UseVisualStyleBackColor = true; - this.btnParse.Click += new System.EventHandler(this.btnParse_Click); - // + // + btnParse.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnParse.Location = new System.Drawing.Point(874, 7); + btnParse.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + btnParse.Name = "btnParse"; + btnParse.Size = new System.Drawing.Size(134, 53); + btnParse.TabIndex = 1; + btnParse.Text = "Parse"; + toolTip.SetToolTip(btnParse, "Parse source sample"); + btnParse.UseVisualStyleBackColor = true; + btnParse.Click += btnParse_Click; + // // splitRight - // - this.splitRight.Dock = System.Windows.Forms.DockStyle.Right; - this.splitRight.Location = new System.Drawing.Point(655, 3); - this.splitRight.Name = "splitRight"; - this.splitRight.Size = new System.Drawing.Size(6, 349); - this.splitRight.TabIndex = 14; - this.splitRight.TabStop = false; - // + // + splitRight.Dock = System.Windows.Forms.DockStyle.Right; + splitRight.Location = new System.Drawing.Point(1318, 7); + splitRight.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + splitRight.Name = "splitRight"; + splitRight.Size = new System.Drawing.Size(12, 822); + splitRight.TabIndex = 14; + splitRight.TabStop = false; + // // tabOutput - // - this.tabOutput.Controls.Add(this.pageSyntaxTree); - this.tabOutput.Controls.Add(this.pageAst); - this.tabOutput.Dock = System.Windows.Forms.DockStyle.Right; - this.tabOutput.Location = new System.Drawing.Point(661, 3); - this.tabOutput.Name = "tabOutput"; - this.tabOutput.SelectedIndex = 0; - this.tabOutput.Size = new System.Drawing.Size(350, 349); - this.tabOutput.TabIndex = 13; - // + // + tabOutput.Controls.Add(pageSyntaxTree); + tabOutput.Controls.Add(pageAst); + tabOutput.Dock = System.Windows.Forms.DockStyle.Right; + tabOutput.Location = new System.Drawing.Point(1330, 7); + tabOutput.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + tabOutput.Name = "tabOutput"; + tabOutput.SelectedIndex = 0; + tabOutput.Size = new System.Drawing.Size(700, 822); + tabOutput.TabIndex = 13; + // // pageSyntaxTree - // - this.pageSyntaxTree.Controls.Add(this.tvParseTree); - this.pageSyntaxTree.ForeColor = System.Drawing.SystemColors.ControlText; - this.pageSyntaxTree.Location = new System.Drawing.Point(4, 22); - this.pageSyntaxTree.Name = "pageSyntaxTree"; - this.pageSyntaxTree.Padding = new System.Windows.Forms.Padding(3); - this.pageSyntaxTree.Size = new System.Drawing.Size(342, 323); - this.pageSyntaxTree.TabIndex = 1; - this.pageSyntaxTree.Text = "Parse Tree"; - this.pageSyntaxTree.UseVisualStyleBackColor = true; - // + // + pageSyntaxTree.Controls.Add(tvParseTree); + pageSyntaxTree.ForeColor = System.Drawing.SystemColors.ControlText; + pageSyntaxTree.Location = new System.Drawing.Point(4, 39); + pageSyntaxTree.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageSyntaxTree.Name = "pageSyntaxTree"; + pageSyntaxTree.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageSyntaxTree.Size = new System.Drawing.Size(692, 779); + pageSyntaxTree.TabIndex = 1; + pageSyntaxTree.Text = "Parse Tree"; + pageSyntaxTree.UseVisualStyleBackColor = true; + // // tvParseTree - // - this.tvParseTree.Dock = System.Windows.Forms.DockStyle.Fill; - this.tvParseTree.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tvParseTree.HideSelection = false; - this.tvParseTree.Indent = 16; - this.tvParseTree.Location = new System.Drawing.Point(3, 3); - this.tvParseTree.Name = "tvParseTree"; - this.tvParseTree.Size = new System.Drawing.Size(336, 317); - this.tvParseTree.TabIndex = 0; - this.tvParseTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvParseTree_AfterSelect); - // + // + tvParseTree.Dock = System.Windows.Forms.DockStyle.Fill; + tvParseTree.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + tvParseTree.HideSelection = false; + tvParseTree.Indent = 16; + tvParseTree.Location = new System.Drawing.Point(6, 7); + tvParseTree.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + tvParseTree.Name = "tvParseTree"; + tvParseTree.Size = new System.Drawing.Size(680, 765); + tvParseTree.TabIndex = 0; + tvParseTree.AfterSelect += tvParseTree_AfterSelect; + // // pageAst - // - this.pageAst.Controls.Add(this.tvAst); - this.pageAst.Location = new System.Drawing.Point(4, 22); - this.pageAst.Name = "pageAst"; - this.pageAst.Padding = new System.Windows.Forms.Padding(3); - this.pageAst.Size = new System.Drawing.Size(342, 323); - this.pageAst.TabIndex = 0; - this.pageAst.Text = "AST"; - this.pageAst.UseVisualStyleBackColor = true; - // + // + pageAst.Controls.Add(tvAst); + pageAst.Location = new System.Drawing.Point(4, 39); + pageAst.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageAst.Name = "pageAst"; + pageAst.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageAst.Size = new System.Drawing.Size(692, 779); + pageAst.TabIndex = 0; + pageAst.Text = "AST"; + pageAst.UseVisualStyleBackColor = true; + // // tvAst - // - this.tvAst.Dock = System.Windows.Forms.DockStyle.Fill; - this.tvAst.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tvAst.HideSelection = false; - this.tvAst.Indent = 16; - this.tvAst.Location = new System.Drawing.Point(3, 3); - this.tvAst.Name = "tvAst"; - this.tvAst.Size = new System.Drawing.Size(336, 317); - this.tvAst.TabIndex = 1; - this.tvAst.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvAst_AfterSelect); - // + // + tvAst.Dock = System.Windows.Forms.DockStyle.Fill; + tvAst.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + tvAst.HideSelection = false; + tvAst.Indent = 16; + tvAst.Location = new System.Drawing.Point(6, 7); + tvAst.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + tvAst.Name = "tvAst"; + tvAst.Size = new System.Drawing.Size(680, 765); + tvAst.TabIndex = 1; + tvAst.AfterSelect += tvAst_AfterSelect; + // // chkParserTrace - // - this.chkParserTrace.AutoSize = true; - this.chkParserTrace.Location = new System.Drawing.Point(3, 3); - this.chkParserTrace.Name = "chkParserTrace"; - this.chkParserTrace.Size = new System.Drawing.Size(90, 17); - this.chkParserTrace.TabIndex = 0; - this.chkParserTrace.Text = "Enable Trace"; - this.chkParserTrace.UseVisualStyleBackColor = true; - // + // + chkParserTrace.AutoSize = true; + chkParserTrace.Location = new System.Drawing.Point(6, 7); + chkParserTrace.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + chkParserTrace.Name = "chkParserTrace"; + chkParserTrace.Size = new System.Drawing.Size(155, 34); + chkParserTrace.TabIndex = 0; + chkParserTrace.Text = "Enable Trace"; + chkParserTrace.UseVisualStyleBackColor = true; + // // pnlLang - // - this.pnlLang.Controls.Add(this.chkAutoRefresh); - this.pnlLang.Controls.Add(this.btnManageGrammars); - this.pnlLang.Controls.Add(this.lblSearchError); - this.pnlLang.Controls.Add(this.btnSearch); - this.pnlLang.Controls.Add(this.txtSearch); - this.pnlLang.Controls.Add(this.label2); - this.pnlLang.Controls.Add(this.cboGrammars); - this.pnlLang.Dock = System.Windows.Forms.DockStyle.Top; - this.pnlLang.Location = new System.Drawing.Point(0, 0); - this.pnlLang.Name = "pnlLang"; - this.pnlLang.Size = new System.Drawing.Size(1022, 29); - this.pnlLang.TabIndex = 13; - // + // + pnlLang.Controls.Add(chkAutoRefresh); + pnlLang.Controls.Add(btnManageGrammars); + pnlLang.Controls.Add(lblSearchError); + pnlLang.Controls.Add(btnSearch); + pnlLang.Controls.Add(txtSearch); + pnlLang.Controls.Add(label2); + pnlLang.Controls.Add(cboGrammars); + pnlLang.Dock = System.Windows.Forms.DockStyle.Top; + pnlLang.Location = new System.Drawing.Point(0, 0); + pnlLang.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pnlLang.Name = "pnlLang"; + pnlLang.Size = new System.Drawing.Size(2044, 67); + pnlLang.TabIndex = 13; + // // chkAutoRefresh - // - this.chkAutoRefresh.AutoSize = true; - this.chkAutoRefresh.Checked = true; - this.chkAutoRefresh.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkAutoRefresh.Location = new System.Drawing.Point(339, 7); - this.chkAutoRefresh.Name = "chkAutoRefresh"; - this.chkAutoRefresh.Size = new System.Drawing.Size(83, 17); - this.chkAutoRefresh.TabIndex = 13; - this.chkAutoRefresh.Text = "Auto-refresh"; - this.toolTip.SetToolTip(this.chkAutoRefresh, resources.GetString("chkAutoRefresh.ToolTip")); - this.chkAutoRefresh.UseVisualStyleBackColor = true; - // + // + chkAutoRefresh.AutoSize = true; + chkAutoRefresh.Checked = true; + chkAutoRefresh.CheckState = System.Windows.Forms.CheckState.Checked; + chkAutoRefresh.Location = new System.Drawing.Point(678, 16); + chkAutoRefresh.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + chkAutoRefresh.Name = "chkAutoRefresh"; + chkAutoRefresh.Size = new System.Drawing.Size(156, 34); + chkAutoRefresh.TabIndex = 13; + chkAutoRefresh.Text = "Auto-refresh"; + toolTip.SetToolTip(chkAutoRefresh, resources.GetString("chkAutoRefresh.ToolTip")); + chkAutoRefresh.UseVisualStyleBackColor = true; + // // btnManageGrammars - // - this.btnManageGrammars.Location = new System.Drawing.Point(306, 2); - this.btnManageGrammars.Margin = new System.Windows.Forms.Padding(2); - this.btnManageGrammars.Name = "btnManageGrammars"; - this.btnManageGrammars.Size = new System.Drawing.Size(28, 24); - this.btnManageGrammars.TabIndex = 12; - this.btnManageGrammars.Text = "..."; - this.btnManageGrammars.UseVisualStyleBackColor = true; - this.btnManageGrammars.Click += new System.EventHandler(this.btnManageGrammars_Click); - // + // + btnManageGrammars.Location = new System.Drawing.Point(612, 5); + btnManageGrammars.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + btnManageGrammars.Name = "btnManageGrammars"; + btnManageGrammars.Size = new System.Drawing.Size(56, 55); + btnManageGrammars.TabIndex = 12; + btnManageGrammars.Text = "..."; + btnManageGrammars.UseVisualStyleBackColor = true; + btnManageGrammars.Click += btnManageGrammars_Click; + // // lblSearchError - // - this.lblSearchError.AutoSize = true; - this.lblSearchError.ForeColor = System.Drawing.Color.Red; - this.lblSearchError.Location = new System.Drawing.Point(731, 9); - this.lblSearchError.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblSearchError.Name = "lblSearchError"; - this.lblSearchError.Size = new System.Drawing.Size(54, 13); - this.lblSearchError.TabIndex = 11; - this.lblSearchError.Text = "Not found"; - this.lblSearchError.Visible = false; - // + // + lblSearchError.AutoSize = true; + lblSearchError.ForeColor = System.Drawing.Color.Red; + lblSearchError.Location = new System.Drawing.Point(1462, 21); + lblSearchError.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + lblSearchError.Name = "lblSearchError"; + lblSearchError.Size = new System.Drawing.Size(109, 30); + lblSearchError.TabIndex = 11; + lblSearchError.Text = "Not found"; + lblSearchError.Visible = false; + // // btnSearch - // - this.btnSearch.Location = new System.Drawing.Point(672, 2); - this.btnSearch.Margin = new System.Windows.Forms.Padding(2); - this.btnSearch.Name = "btnSearch"; - this.btnSearch.Size = new System.Drawing.Size(55, 24); - this.btnSearch.TabIndex = 10; - this.btnSearch.Text = "Find"; - this.btnSearch.UseVisualStyleBackColor = true; - this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); - // + // + btnSearch.Location = new System.Drawing.Point(1344, 5); + btnSearch.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + btnSearch.Name = "btnSearch"; + btnSearch.Size = new System.Drawing.Size(110, 55); + btnSearch.TabIndex = 10; + btnSearch.Text = "Find"; + btnSearch.UseVisualStyleBackColor = true; + btnSearch.Click += btnSearch_Click; + // // txtSearch - // - this.txtSearch.AcceptsReturn = true; - this.txtSearch.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::Irony.GrammarExplorer.Properties.Settings.Default, "SearchPattern", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.txtSearch.Location = new System.Drawing.Point(545, 4); - this.txtSearch.Margin = new System.Windows.Forms.Padding(2); - this.txtSearch.Name = "txtSearch"; - this.txtSearch.Size = new System.Drawing.Size(123, 20); - this.txtSearch.TabIndex = 8; - this.txtSearch.Text = global::Irony.GrammarExplorer.Properties.Settings.Default.SearchPattern; - this.txtSearch.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtSearch_KeyPress); - // + // + txtSearch.AcceptsReturn = true; + settings1.AutoRefresh = true; + settings1.DisableHili = false; + settings1.EnableTrace = false; + settings1.Grammars = ""; + settings1.LanguageIndex = 0; + settings1.SearchPattern = ""; + settings1.SettingsKey = ""; + settings1.SourceSample = ""; + txtSearch.DataBindings.Add(new System.Windows.Forms.Binding("Text", settings1, "SearchPattern", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + txtSearch.Location = new System.Drawing.Point(1090, 9); + txtSearch.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + txtSearch.Name = "txtSearch"; + txtSearch.Size = new System.Drawing.Size(242, 35); + txtSearch.TabIndex = 8; + txtSearch.KeyPress += txtSearch_KeyPress; + // // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(10, 6); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(52, 13); - this.label2.TabIndex = 4; - this.label2.Text = "Grammar:"; - // + // + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(20, 14); + label2.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(104, 30); + label2.TabIndex = 4; + label2.Text = "Grammar:"; + // // cboGrammars - // - this.cboGrammars.ContextMenuStrip = this.menuGrammars; - this.cboGrammars.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboGrammars.FormattingEnabled = true; - this.cboGrammars.Location = new System.Drawing.Point(67, 3); - this.cboGrammars.Name = "cboGrammars"; - this.cboGrammars.Size = new System.Drawing.Size(234, 21); - this.cboGrammars.TabIndex = 3; - this.cboGrammars.SelectedIndexChanged += new System.EventHandler(this.cboGrammars_SelectedIndexChanged); - // + // + cboGrammars.ContextMenuStrip = menuGrammars; + cboGrammars.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cboGrammars.FormattingEnabled = true; + cboGrammars.Location = new System.Drawing.Point(134, 7); + cboGrammars.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + cboGrammars.Name = "cboGrammars"; + cboGrammars.Size = new System.Drawing.Size(464, 38); + cboGrammars.TabIndex = 3; + cboGrammars.SelectedIndexChanged += cboGrammars_SelectedIndexChanged; + // // menuGrammars - // - this.menuGrammars.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.miAdd, - this.miRefresh, - this.miSeparator, - this.miRemove, - this.miRemoveAll}); - this.menuGrammars.Name = "menuGrammars"; - this.menuGrammars.Size = new System.Drawing.Size(164, 98); - this.menuGrammars.Opening += new System.ComponentModel.CancelEventHandler(this.menuGrammars_Opening); - // + // + menuGrammars.ImageScalingSize = new System.Drawing.Size(28, 28); + menuGrammars.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { miAdd, miRefresh, miSeparator, miRemove, miRemoveAll }); + menuGrammars.Name = "menuGrammars"; + menuGrammars.Size = new System.Drawing.Size(243, 154); + menuGrammars.Opening += menuGrammars_Opening; + // // miAdd - // - this.miAdd.Name = "miAdd"; - this.miAdd.Size = new System.Drawing.Size(163, 22); - this.miAdd.Text = "Add grammar..."; - this.miAdd.Click += new System.EventHandler(this.miAdd_Click); - // + // + miAdd.Name = "miAdd"; + miAdd.Size = new System.Drawing.Size(242, 36); + miAdd.Text = "Add grammar..."; + miAdd.Click += miAdd_Click; + // // miRefresh - // - this.miRefresh.Name = "miRefresh"; - this.miRefresh.Size = new System.Drawing.Size(163, 22); - this.miRefresh.Text = "Refresh selected"; - this.miRefresh.ToolTipText = "Reload grammar assembly and refresh the current grammar.\r\nUse Auto-refresh checkb" + - "ox to do this automatically\r\nevery time the target assembly file is updated (rec" + - "ompiled)."; - this.miRefresh.Click += new System.EventHandler(this.miRefresh_Click); - // + // + miRefresh.Name = "miRefresh"; + miRefresh.Size = new System.Drawing.Size(242, 36); + miRefresh.Text = "Refresh selected"; + miRefresh.ToolTipText = "Reload grammar assembly and refresh the current grammar.\r\nUse Auto-refresh checkbox to do this automatically\r\nevery time the target assembly file is updated (recompiled)."; + miRefresh.Click += miRefresh_Click; + // // miSeparator - // - this.miSeparator.Name = "miSeparator"; - this.miSeparator.Size = new System.Drawing.Size(160, 6); - // + // + miSeparator.Name = "miSeparator"; + miSeparator.Size = new System.Drawing.Size(239, 6); + // // miRemove - // - this.miRemove.Name = "miRemove"; - this.miRemove.Size = new System.Drawing.Size(163, 22); - this.miRemove.Text = "Remove selected"; - this.miRemove.Click += new System.EventHandler(this.miRemove_Click); - // + // + miRemove.Name = "miRemove"; + miRemove.Size = new System.Drawing.Size(242, 36); + miRemove.Text = "Remove selected"; + miRemove.Click += miRemove_Click; + // // miRemoveAll - // - this.miRemoveAll.Name = "miRemoveAll"; - this.miRemoveAll.Size = new System.Drawing.Size(163, 22); - this.miRemoveAll.Text = "Remove all"; - this.miRemoveAll.Click += new System.EventHandler(this.miRemoveAll_Click); - // + // + miRemoveAll.Name = "miRemoveAll"; + miRemoveAll.Size = new System.Drawing.Size(242, 36); + miRemoveAll.Text = "Remove all"; + miRemoveAll.Click += miRemoveAll_Click; + // // dlgSelectAssembly - // - this.dlgSelectAssembly.DefaultExt = "dll"; - this.dlgSelectAssembly.Filter = "DLL files|*.dll"; - this.dlgSelectAssembly.Title = "Select Grammar Assembly "; - // + // + dlgSelectAssembly.DefaultExt = "dll"; + dlgSelectAssembly.Filter = "DLL files|*.dll"; + dlgSelectAssembly.Title = "Select Grammar Assembly "; + // // splitBottom - // - this.splitBottom.BackColor = System.Drawing.SystemColors.Control; - this.splitBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.splitBottom.Location = new System.Drawing.Point(0, 410); - this.splitBottom.Name = "splitBottom"; - this.splitBottom.Size = new System.Drawing.Size(1022, 6); - this.splitBottom.TabIndex = 22; - this.splitBottom.TabStop = false; - // + // + splitBottom.BackColor = System.Drawing.SystemColors.Control; + splitBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + splitBottom.Location = new System.Drawing.Point(0, 946); + splitBottom.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + splitBottom.Name = "splitBottom"; + splitBottom.Size = new System.Drawing.Size(2044, 14); + splitBottom.TabIndex = 22; + splitBottom.TabStop = false; + // // tabBottom - // - this.tabBottom.Controls.Add(this.pageLanguage); - this.tabBottom.Controls.Add(this.pageGrammarErrors); - this.tabBottom.Controls.Add(this.pageParserOutput); - this.tabBottom.Controls.Add(this.pageParserTrace); - this.tabBottom.Controls.Add(this.pageOutput); - this.tabBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tabBottom.Location = new System.Drawing.Point(0, 416); - this.tabBottom.Name = "tabBottom"; - this.tabBottom.SelectedIndex = 0; - this.tabBottom.Size = new System.Drawing.Size(1022, 187); - this.tabBottom.TabIndex = 0; - // + // + tabBottom.Controls.Add(pageLanguage); + tabBottom.Controls.Add(pageGrammarErrors); + tabBottom.Controls.Add(pageParserOutput); + tabBottom.Controls.Add(pageParserTrace); + tabBottom.Controls.Add(pageOutput); + tabBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + tabBottom.Location = new System.Drawing.Point(0, 960); + tabBottom.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + tabBottom.Name = "tabBottom"; + tabBottom.SelectedIndex = 0; + tabBottom.Size = new System.Drawing.Size(2044, 432); + tabBottom.TabIndex = 0; + // // pageLanguage - // - this.pageLanguage.Controls.Add(this.grpLanguageInfo); - this.pageLanguage.Location = new System.Drawing.Point(4, 22); - this.pageLanguage.Name = "pageLanguage"; - this.pageLanguage.Padding = new System.Windows.Forms.Padding(3); - this.pageLanguage.Size = new System.Drawing.Size(1014, 161); - this.pageLanguage.TabIndex = 1; - this.pageLanguage.Text = "Grammar Info"; - this.pageLanguage.UseVisualStyleBackColor = true; - // + // + pageLanguage.Controls.Add(grpLanguageInfo); + pageLanguage.Location = new System.Drawing.Point(4, 39); + pageLanguage.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageLanguage.Name = "pageLanguage"; + pageLanguage.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageLanguage.Size = new System.Drawing.Size(2036, 389); + pageLanguage.TabIndex = 1; + pageLanguage.Text = "Grammar Info"; + pageLanguage.UseVisualStyleBackColor = true; + // // grpLanguageInfo - // - this.grpLanguageInfo.Controls.Add(this.label8); - this.grpLanguageInfo.Controls.Add(this.lblParserStateCount); - this.grpLanguageInfo.Controls.Add(this.lblLanguageDescr); - this.grpLanguageInfo.Controls.Add(this.txtGrammarComments); - this.grpLanguageInfo.Controls.Add(this.label11); - this.grpLanguageInfo.Controls.Add(this.label9); - this.grpLanguageInfo.Controls.Add(this.lblLanguageVersion); - this.grpLanguageInfo.Controls.Add(this.label10); - this.grpLanguageInfo.Controls.Add(this.lblLanguage); - this.grpLanguageInfo.Controls.Add(this.label4); - this.grpLanguageInfo.Controls.Add(this.label6); - this.grpLanguageInfo.Controls.Add(this.lblParserConstrTime); - this.grpLanguageInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpLanguageInfo.Location = new System.Drawing.Point(3, 3); - this.grpLanguageInfo.Name = "grpLanguageInfo"; - this.grpLanguageInfo.Size = new System.Drawing.Size(1008, 155); - this.grpLanguageInfo.TabIndex = 3; - this.grpLanguageInfo.TabStop = false; - // + // + grpLanguageInfo.Controls.Add(label8); + grpLanguageInfo.Controls.Add(lblParserStateCount); + grpLanguageInfo.Controls.Add(lblLanguageDescr); + grpLanguageInfo.Controls.Add(txtGrammarComments); + grpLanguageInfo.Controls.Add(label11); + grpLanguageInfo.Controls.Add(label9); + grpLanguageInfo.Controls.Add(lblLanguageVersion); + grpLanguageInfo.Controls.Add(label10); + grpLanguageInfo.Controls.Add(lblLanguage); + grpLanguageInfo.Controls.Add(label4); + grpLanguageInfo.Controls.Add(label6); + grpLanguageInfo.Controls.Add(lblParserConstrTime); + grpLanguageInfo.Dock = System.Windows.Forms.DockStyle.Fill; + grpLanguageInfo.Location = new System.Drawing.Point(6, 7); + grpLanguageInfo.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpLanguageInfo.Name = "grpLanguageInfo"; + grpLanguageInfo.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpLanguageInfo.Size = new System.Drawing.Size(2024, 375); + grpLanguageInfo.TabIndex = 3; + grpLanguageInfo.TabStop = false; + // // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(6, 113); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(96, 13); - this.label8.TabIndex = 26; - this.label8.Text = "Parser state count:"; - // + // + label8.AutoSize = true; + label8.Location = new System.Drawing.Point(12, 261); + label8.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label8.Name = "label8"; + label8.Size = new System.Drawing.Size(184, 30); + label8.TabIndex = 26; + label8.Text = "Parser state count:"; + // // lblParserStateCount - // - this.lblParserStateCount.AutoSize = true; - this.lblParserStateCount.Location = new System.Drawing.Point(167, 113); - this.lblParserStateCount.Name = "lblParserStateCount"; - this.lblParserStateCount.Size = new System.Drawing.Size(13, 13); - this.lblParserStateCount.TabIndex = 25; - this.lblParserStateCount.Text = "0"; - // + // + lblParserStateCount.AutoSize = true; + lblParserStateCount.Location = new System.Drawing.Point(334, 261); + lblParserStateCount.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblParserStateCount.Name = "lblParserStateCount"; + lblParserStateCount.Size = new System.Drawing.Size(24, 30); + lblParserStateCount.TabIndex = 25; + lblParserStateCount.Text = "0"; + // // lblLanguageDescr - // - this.lblLanguageDescr.Location = new System.Drawing.Point(107, 38); - this.lblLanguageDescr.Name = "lblLanguageDescr"; - this.lblLanguageDescr.Size = new System.Drawing.Size(613, 22); - this.lblLanguageDescr.TabIndex = 24; - this.lblLanguageDescr.Text = "(description)"; - // + // + lblLanguageDescr.Location = new System.Drawing.Point(214, 88); + lblLanguageDescr.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblLanguageDescr.Name = "lblLanguageDescr"; + lblLanguageDescr.Size = new System.Drawing.Size(1226, 51); + lblLanguageDescr.TabIndex = 24; + lblLanguageDescr.Text = "(description)"; + // // txtGrammarComments - // - this.txtGrammarComments.BackColor = System.Drawing.SystemColors.Window; - this.txtGrammarComments.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.txtGrammarComments.Location = new System.Drawing.Point(111, 63); - this.txtGrammarComments.Multiline = true; - this.txtGrammarComments.Name = "txtGrammarComments"; - this.txtGrammarComments.ReadOnly = true; - this.txtGrammarComments.Size = new System.Drawing.Size(609, 47); - this.txtGrammarComments.TabIndex = 23; - // + // + txtGrammarComments.BackColor = System.Drawing.SystemColors.Window; + txtGrammarComments.BorderStyle = System.Windows.Forms.BorderStyle.None; + txtGrammarComments.Location = new System.Drawing.Point(222, 145); + txtGrammarComments.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + txtGrammarComments.Multiline = true; + txtGrammarComments.Name = "txtGrammarComments"; + txtGrammarComments.ReadOnly = true; + txtGrammarComments.Size = new System.Drawing.Size(1218, 108); + txtGrammarComments.TabIndex = 23; + // // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(6, 61); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(99, 13); - this.label11.TabIndex = 22; - this.label11.Text = "Grammar Comment:"; - // + // + label11.AutoSize = true; + label11.Location = new System.Drawing.Point(12, 141); + label11.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label11.Name = "label11"; + label11.Size = new System.Drawing.Size(201, 30); + label11.TabIndex = 22; + label11.Text = "Grammar Comment:"; + // // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(6, 38); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(63, 13); - this.label9.TabIndex = 20; - this.label9.Text = "Description:"; - // + // + label9.AutoSize = true; + label9.Location = new System.Drawing.Point(12, 88); + label9.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label9.Name = "label9"; + label9.Size = new System.Drawing.Size(123, 30); + label9.TabIndex = 20; + label9.Text = "Description:"; + // // lblLanguageVersion - // - this.lblLanguageVersion.Location = new System.Drawing.Point(278, 16); - this.lblLanguageVersion.Name = "lblLanguageVersion"; - this.lblLanguageVersion.Size = new System.Drawing.Size(80, 17); - this.lblLanguageVersion.TabIndex = 19; - this.lblLanguageVersion.Text = "(Version)"; - // + // + lblLanguageVersion.Location = new System.Drawing.Point(556, 37); + lblLanguageVersion.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblLanguageVersion.Name = "lblLanguageVersion"; + lblLanguageVersion.Size = new System.Drawing.Size(160, 39); + lblLanguageVersion.TabIndex = 19; + lblLanguageVersion.Text = "(Version)"; + // // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(227, 16); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(45, 13); - this.label10.TabIndex = 18; - this.label10.Text = "Version:"; - // + // + label10.AutoSize = true; + label10.Location = new System.Drawing.Point(454, 37); + label10.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label10.Name = "label10"; + label10.Size = new System.Drawing.Size(86, 30); + label10.TabIndex = 18; + label10.Text = "Version:"; + // // lblLanguage - // - this.lblLanguage.Location = new System.Drawing.Point(107, 16); - this.lblLanguage.Name = "lblLanguage"; - this.lblLanguage.Size = new System.Drawing.Size(230, 17); - this.lblLanguage.TabIndex = 17; - this.lblLanguage.Text = "(Language name)"; - // + // + lblLanguage.Location = new System.Drawing.Point(214, 37); + lblLanguage.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblLanguage.Name = "lblLanguage"; + lblLanguage.Size = new System.Drawing.Size(460, 39); + lblLanguage.TabIndex = 17; + lblLanguage.Text = "(Language name)"; + // // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(6, 16); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(58, 13); - this.label4.TabIndex = 16; - this.label4.Text = "Language:"; - // + // + label4.AutoSize = true; + label4.Location = new System.Drawing.Point(12, 37); + label4.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(109, 30); + label4.TabIndex = 16; + label4.Text = "Language:"; + // // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(6, 132); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(142, 13); - this.label6.TabIndex = 15; - this.label6.Text = "Parser construction time, ms:"; - // + // + label6.AutoSize = true; + label6.Location = new System.Drawing.Point(12, 305); + label6.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(280, 30); + label6.TabIndex = 15; + label6.Text = "Parser construction time, ms:"; + // // lblParserConstrTime - // - this.lblParserConstrTime.AutoSize = true; - this.lblParserConstrTime.Location = new System.Drawing.Point(167, 132); - this.lblParserConstrTime.Name = "lblParserConstrTime"; - this.lblParserConstrTime.Size = new System.Drawing.Size(13, 13); - this.lblParserConstrTime.TabIndex = 14; - this.lblParserConstrTime.Text = "0"; - // + // + lblParserConstrTime.AutoSize = true; + lblParserConstrTime.Location = new System.Drawing.Point(334, 305); + lblParserConstrTime.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblParserConstrTime.Name = "lblParserConstrTime"; + lblParserConstrTime.Size = new System.Drawing.Size(24, 30); + lblParserConstrTime.TabIndex = 14; + lblParserConstrTime.Text = "0"; + // // pageGrammarErrors - // - this.pageGrammarErrors.Controls.Add(this.gridGrammarErrors); - this.pageGrammarErrors.Location = new System.Drawing.Point(4, 22); - this.pageGrammarErrors.Name = "pageGrammarErrors"; - this.pageGrammarErrors.Padding = new System.Windows.Forms.Padding(3); - this.pageGrammarErrors.Size = new System.Drawing.Size(1014, 161); - this.pageGrammarErrors.TabIndex = 4; - this.pageGrammarErrors.Text = "Grammar Errors"; - this.pageGrammarErrors.UseVisualStyleBackColor = true; - // + // + pageGrammarErrors.Controls.Add(gridGrammarErrors); + pageGrammarErrors.Location = new System.Drawing.Point(4, 39); + pageGrammarErrors.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageGrammarErrors.Name = "pageGrammarErrors"; + pageGrammarErrors.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageGrammarErrors.Size = new System.Drawing.Size(2036, 389); + pageGrammarErrors.TabIndex = 4; + pageGrammarErrors.Text = "Grammar Errors"; + pageGrammarErrors.UseVisualStyleBackColor = true; + // // gridGrammarErrors - // - this.gridGrammarErrors.AllowUserToAddRows = false; - this.gridGrammarErrors.AllowUserToDeleteRows = false; - this.gridGrammarErrors.ColumnHeadersHeight = 24; - this.gridGrammarErrors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.gridGrammarErrors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn2, - this.dataGridViewTextBoxColumn5, - this.dataGridViewTextBoxColumn6}); - this.gridGrammarErrors.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridGrammarErrors.Location = new System.Drawing.Point(3, 3); - this.gridGrammarErrors.MultiSelect = false; - this.gridGrammarErrors.Name = "gridGrammarErrors"; - this.gridGrammarErrors.ReadOnly = true; - this.gridGrammarErrors.RowHeadersVisible = false; - this.gridGrammarErrors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; - this.gridGrammarErrors.Size = new System.Drawing.Size(1008, 155); - this.gridGrammarErrors.TabIndex = 3; - this.gridGrammarErrors.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridGrammarErrors_CellDoubleClick); - // + // + gridGrammarErrors.AllowUserToAddRows = false; + gridGrammarErrors.AllowUserToDeleteRows = false; + gridGrammarErrors.ColumnHeadersHeight = 24; + gridGrammarErrors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + gridGrammarErrors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { dataGridViewTextBoxColumn2, dataGridViewTextBoxColumn5, dataGridViewTextBoxColumn6 }); + gridGrammarErrors.Dock = System.Windows.Forms.DockStyle.Fill; + gridGrammarErrors.Location = new System.Drawing.Point(6, 7); + gridGrammarErrors.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + gridGrammarErrors.MultiSelect = false; + gridGrammarErrors.Name = "gridGrammarErrors"; + gridGrammarErrors.ReadOnly = true; + gridGrammarErrors.RowHeadersVisible = false; + gridGrammarErrors.RowHeadersWidth = 72; + gridGrammarErrors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + gridGrammarErrors.Size = new System.Drawing.Size(2024, 375); + gridGrammarErrors.TabIndex = 3; + gridGrammarErrors.CellDoubleClick += gridGrammarErrors_CellDoubleClick; + // // dataGridViewTextBoxColumn2 - // + // dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle1; - this.dataGridViewTextBoxColumn2.HeaderText = "Error Level"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.dataGridViewTextBoxColumn2.ToolTipText = "Double-click grid cell to locate in source code"; - // + dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle1; + dataGridViewTextBoxColumn2.HeaderText = "Error Level"; + dataGridViewTextBoxColumn2.MinimumWidth = 9; + dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + dataGridViewTextBoxColumn2.ReadOnly = true; + dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + dataGridViewTextBoxColumn2.ToolTipText = "Double-click grid cell to locate in source code"; + dataGridViewTextBoxColumn2.Width = 175; + // // dataGridViewTextBoxColumn5 - // + // dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle2; - this.dataGridViewTextBoxColumn5.HeaderText = "Description"; - this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; - this.dataGridViewTextBoxColumn5.ReadOnly = true; - this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.dataGridViewTextBoxColumn5.Width = 800; - // + dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle2; + dataGridViewTextBoxColumn5.HeaderText = "Description"; + dataGridViewTextBoxColumn5.MinimumWidth = 9; + dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + dataGridViewTextBoxColumn5.ReadOnly = true; + dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + dataGridViewTextBoxColumn5.Width = 800; + // // dataGridViewTextBoxColumn6 - // - this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.dataGridViewTextBoxColumn6.DataPropertyName = "State"; + // + dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewTextBoxColumn6.DataPropertyName = "State"; dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.dataGridViewTextBoxColumn6.DefaultCellStyle = dataGridViewCellStyle3; - this.dataGridViewTextBoxColumn6.HeaderText = "Parser State"; - this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; - this.dataGridViewTextBoxColumn6.ReadOnly = true; - this.dataGridViewTextBoxColumn6.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.dataGridViewTextBoxColumn6.ToolTipText = "Double-click grid cell to navigate to state details"; - this.dataGridViewTextBoxColumn6.Width = 71; - // + dataGridViewTextBoxColumn6.DefaultCellStyle = dataGridViewCellStyle3; + dataGridViewTextBoxColumn6.HeaderText = "Parser State"; + dataGridViewTextBoxColumn6.MinimumWidth = 9; + dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; + dataGridViewTextBoxColumn6.ReadOnly = true; + dataGridViewTextBoxColumn6.Resizable = System.Windows.Forms.DataGridViewTriState.True; + dataGridViewTextBoxColumn6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + dataGridViewTextBoxColumn6.ToolTipText = "Double-click grid cell to navigate to state details"; + dataGridViewTextBoxColumn6.Width = 127; + // // pageParserOutput - // - this.pageParserOutput.Controls.Add(this.groupBox1); - this.pageParserOutput.Controls.Add(this.grpCompileInfo); - this.pageParserOutput.Location = new System.Drawing.Point(4, 22); - this.pageParserOutput.Name = "pageParserOutput"; - this.pageParserOutput.Padding = new System.Windows.Forms.Padding(3); - this.pageParserOutput.Size = new System.Drawing.Size(1014, 161); - this.pageParserOutput.TabIndex = 2; - this.pageParserOutput.Text = "Parser Output"; - this.pageParserOutput.UseVisualStyleBackColor = true; - // + // + pageParserOutput.Controls.Add(groupBox1); + pageParserOutput.Controls.Add(grpCompileInfo); + pageParserOutput.Location = new System.Drawing.Point(4, 39); + pageParserOutput.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageParserOutput.Name = "pageParserOutput"; + pageParserOutput.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageParserOutput.Size = new System.Drawing.Size(2036, 389); + pageParserOutput.TabIndex = 2; + pageParserOutput.Text = "Parser Output"; + pageParserOutput.UseVisualStyleBackColor = true; + // // groupBox1 - // - this.groupBox1.Controls.Add(this.gridCompileErrors); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(158, 3); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(853, 155); - this.groupBox1.TabIndex = 3; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Compile Errors"; - // + // + groupBox1.Controls.Add(gridCompileErrors); + groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + groupBox1.Location = new System.Drawing.Point(316, 7); + groupBox1.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + groupBox1.Size = new System.Drawing.Size(1714, 375); + groupBox1.TabIndex = 3; + groupBox1.TabStop = false; + groupBox1.Text = "Compile Errors"; + // // gridCompileErrors - // - this.gridCompileErrors.AllowUserToAddRows = false; - this.gridCompileErrors.AllowUserToDeleteRows = false; - this.gridCompileErrors.ColumnHeadersHeight = 24; - this.gridCompileErrors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.gridCompileErrors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn3, - this.dataGridViewTextBoxColumn4, - this.dataGridViewTextBoxColumn1}); - this.gridCompileErrors.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridCompileErrors.Location = new System.Drawing.Point(3, 16); - this.gridCompileErrors.MultiSelect = false; - this.gridCompileErrors.Name = "gridCompileErrors"; - this.gridCompileErrors.ReadOnly = true; - this.gridCompileErrors.RowHeadersVisible = false; - this.gridCompileErrors.RowTemplate.Height = 24; - this.gridCompileErrors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; - this.gridCompileErrors.Size = new System.Drawing.Size(847, 136); - this.gridCompileErrors.TabIndex = 2; - this.gridCompileErrors.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridCompileErrors_CellDoubleClick); - // + // + gridCompileErrors.AllowUserToAddRows = false; + gridCompileErrors.AllowUserToDeleteRows = false; + gridCompileErrors.ColumnHeadersHeight = 24; + gridCompileErrors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + gridCompileErrors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { dataGridViewTextBoxColumn3, dataGridViewTextBoxColumn4, dataGridViewTextBoxColumn1 }); + gridCompileErrors.Dock = System.Windows.Forms.DockStyle.Fill; + gridCompileErrors.Location = new System.Drawing.Point(6, 35); + gridCompileErrors.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + gridCompileErrors.MultiSelect = false; + gridCompileErrors.Name = "gridCompileErrors"; + gridCompileErrors.ReadOnly = true; + gridCompileErrors.RowHeadersVisible = false; + gridCompileErrors.RowHeadersWidth = 72; + gridCompileErrors.RowTemplate.Height = 24; + gridCompileErrors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + gridCompileErrors.Size = new System.Drawing.Size(1702, 333); + gridCompileErrors.TabIndex = 2; + gridCompileErrors.CellDoubleClick += gridCompileErrors_CellDoubleClick; + // // dataGridViewTextBoxColumn3 - // + // dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.dataGridViewTextBoxColumn3.DefaultCellStyle = dataGridViewCellStyle4; - this.dataGridViewTextBoxColumn3.HeaderText = "L, C"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.dataGridViewTextBoxColumn3.ToolTipText = "Double-click grid cell to locate in source code"; - this.dataGridViewTextBoxColumn3.Width = 50; - // + dataGridViewTextBoxColumn3.DefaultCellStyle = dataGridViewCellStyle4; + dataGridViewTextBoxColumn3.HeaderText = "L, C"; + dataGridViewTextBoxColumn3.MinimumWidth = 9; + dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + dataGridViewTextBoxColumn3.ReadOnly = true; + dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + dataGridViewTextBoxColumn3.ToolTipText = "Double-click grid cell to locate in source code"; + dataGridViewTextBoxColumn3.Width = 50; + // // dataGridViewTextBoxColumn4 - // + // dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle5; - this.dataGridViewTextBoxColumn4.HeaderText = "Error Message"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - this.dataGridViewTextBoxColumn4.ReadOnly = true; - this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.dataGridViewTextBoxColumn4.Width = 1000; - // + dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle5; + dataGridViewTextBoxColumn4.HeaderText = "Error Message"; + dataGridViewTextBoxColumn4.MinimumWidth = 9; + dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + dataGridViewTextBoxColumn4.ReadOnly = true; + dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + dataGridViewTextBoxColumn4.Width = 1000; + // // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.dataGridViewTextBoxColumn1.DataPropertyName = "State"; + // + dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewTextBoxColumn1.DataPropertyName = "State"; dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle6; - this.dataGridViewTextBoxColumn1.HeaderText = "Parser State"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - this.dataGridViewTextBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.dataGridViewTextBoxColumn1.ToolTipText = "Double-click grid cell to navigate to state details"; - this.dataGridViewTextBoxColumn1.Width = 71; - // + dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle6; + dataGridViewTextBoxColumn1.HeaderText = "Parser State"; + dataGridViewTextBoxColumn1.MinimumWidth = 9; + dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + dataGridViewTextBoxColumn1.ReadOnly = true; + dataGridViewTextBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + dataGridViewTextBoxColumn1.ToolTipText = "Double-click grid cell to navigate to state details"; + dataGridViewTextBoxColumn1.Width = 127; + // // grpCompileInfo - // - this.grpCompileInfo.Controls.Add(this.label12); - this.grpCompileInfo.Controls.Add(this.lblParseErrorCount); - this.grpCompileInfo.Controls.Add(this.label1); - this.grpCompileInfo.Controls.Add(this.lblParseTime); - this.grpCompileInfo.Controls.Add(this.label7); - this.grpCompileInfo.Controls.Add(this.lblSrcLineCount); - this.grpCompileInfo.Controls.Add(this.label3); - this.grpCompileInfo.Controls.Add(this.lblSrcTokenCount); - this.grpCompileInfo.Dock = System.Windows.Forms.DockStyle.Left; - this.grpCompileInfo.Location = new System.Drawing.Point(3, 3); - this.grpCompileInfo.Name = "grpCompileInfo"; - this.grpCompileInfo.Size = new System.Drawing.Size(155, 155); - this.grpCompileInfo.TabIndex = 5; - this.grpCompileInfo.TabStop = false; - this.grpCompileInfo.Text = "Statistics"; - // + // + grpCompileInfo.Controls.Add(label12); + grpCompileInfo.Controls.Add(lblParseErrorCount); + grpCompileInfo.Controls.Add(label1); + grpCompileInfo.Controls.Add(lblParseTime); + grpCompileInfo.Controls.Add(label7); + grpCompileInfo.Controls.Add(lblSrcLineCount); + grpCompileInfo.Controls.Add(label3); + grpCompileInfo.Controls.Add(lblSrcTokenCount); + grpCompileInfo.Dock = System.Windows.Forms.DockStyle.Left; + grpCompileInfo.Location = new System.Drawing.Point(6, 7); + grpCompileInfo.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpCompileInfo.Name = "grpCompileInfo"; + grpCompileInfo.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpCompileInfo.Size = new System.Drawing.Size(310, 375); + grpCompileInfo.TabIndex = 5; + grpCompileInfo.TabStop = false; + grpCompileInfo.Text = "Statistics"; + // // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(12, 81); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(37, 13); - this.label12.TabIndex = 19; - this.label12.Text = "Errors:"; - // + // + label12.AutoSize = true; + label12.Location = new System.Drawing.Point(24, 187); + label12.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label12.Name = "label12"; + label12.Size = new System.Drawing.Size(71, 30); + label12.TabIndex = 19; + label12.Text = "Errors:"; + // // lblParseErrorCount - // - this.lblParseErrorCount.AutoSize = true; - this.lblParseErrorCount.Location = new System.Drawing.Point(108, 81); - this.lblParseErrorCount.Name = "lblParseErrorCount"; - this.lblParseErrorCount.Size = new System.Drawing.Size(13, 13); - this.lblParseErrorCount.TabIndex = 18; - this.lblParseErrorCount.Text = "0"; - // + // + lblParseErrorCount.AutoSize = true; + lblParseErrorCount.Location = new System.Drawing.Point(216, 187); + lblParseErrorCount.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblParseErrorCount.Name = "lblParseErrorCount"; + lblParseErrorCount.Size = new System.Drawing.Size(24, 30); + lblParseErrorCount.TabIndex = 18; + lblParseErrorCount.Text = "0"; + // // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 59); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(82, 13); - this.label1.TabIndex = 17; - this.label1.Text = "Parse Time, ms:"; - // + // + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(24, 136); + label1.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(156, 30); + label1.TabIndex = 17; + label1.Text = "Parse Time, ms:"; + // // lblParseTime - // - this.lblParseTime.AutoSize = true; - this.lblParseTime.Location = new System.Drawing.Point(108, 59); - this.lblParseTime.Name = "lblParseTime"; - this.lblParseTime.Size = new System.Drawing.Size(13, 13); - this.lblParseTime.TabIndex = 16; - this.lblParseTime.Text = "0"; - // + // + lblParseTime.AutoSize = true; + lblParseTime.Location = new System.Drawing.Point(216, 136); + lblParseTime.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblParseTime.Name = "lblParseTime"; + lblParseTime.Size = new System.Drawing.Size(24, 30); + lblParseTime.TabIndex = 16; + lblParseTime.Text = "0"; + // // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(12, 16); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(35, 13); - this.label7.TabIndex = 15; - this.label7.Text = "Lines:"; - // + // + label7.AutoSize = true; + label7.Location = new System.Drawing.Point(24, 37); + label7.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label7.Name = "label7"; + label7.Size = new System.Drawing.Size(65, 30); + label7.TabIndex = 15; + label7.Text = "Lines:"; + // // lblSrcLineCount - // - this.lblSrcLineCount.AutoSize = true; - this.lblSrcLineCount.Location = new System.Drawing.Point(108, 16); - this.lblSrcLineCount.Name = "lblSrcLineCount"; - this.lblSrcLineCount.Size = new System.Drawing.Size(13, 13); - this.lblSrcLineCount.TabIndex = 14; - this.lblSrcLineCount.Text = "0"; - // + // + lblSrcLineCount.AutoSize = true; + lblSrcLineCount.Location = new System.Drawing.Point(216, 37); + lblSrcLineCount.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblSrcLineCount.Name = "lblSrcLineCount"; + lblSrcLineCount.Size = new System.Drawing.Size(24, 30); + lblSrcLineCount.TabIndex = 14; + lblSrcLineCount.Text = "0"; + // // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(12, 37); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(46, 13); - this.label3.TabIndex = 13; - this.label3.Text = "Tokens:"; - // + // + label3.AutoSize = true; + label3.Location = new System.Drawing.Point(24, 85); + label3.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(81, 30); + label3.TabIndex = 13; + label3.Text = "Tokens:"; + // // lblSrcTokenCount - // - this.lblSrcTokenCount.AutoSize = true; - this.lblSrcTokenCount.Location = new System.Drawing.Point(108, 37); - this.lblSrcTokenCount.Name = "lblSrcTokenCount"; - this.lblSrcTokenCount.Size = new System.Drawing.Size(13, 13); - this.lblSrcTokenCount.TabIndex = 12; - this.lblSrcTokenCount.Text = "0"; - // + // + lblSrcTokenCount.AutoSize = true; + lblSrcTokenCount.Location = new System.Drawing.Point(216, 85); + lblSrcTokenCount.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblSrcTokenCount.Name = "lblSrcTokenCount"; + lblSrcTokenCount.Size = new System.Drawing.Size(24, 30); + lblSrcTokenCount.TabIndex = 12; + lblSrcTokenCount.Text = "0"; + // // pageParserTrace - // - this.pageParserTrace.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pageParserTrace.Controls.Add(this.grpParserActions); - this.pageParserTrace.Controls.Add(this.splitter1); - this.pageParserTrace.Controls.Add(this.grpTokens); - this.pageParserTrace.Controls.Add(this.pnlParserTraceTop); - this.pageParserTrace.Location = new System.Drawing.Point(4, 22); - this.pageParserTrace.Name = "pageParserTrace"; - this.pageParserTrace.Padding = new System.Windows.Forms.Padding(3); - this.pageParserTrace.Size = new System.Drawing.Size(1014, 161); - this.pageParserTrace.TabIndex = 3; - this.pageParserTrace.Text = "Parser Trace"; - this.pageParserTrace.UseVisualStyleBackColor = true; - // + // + pageParserTrace.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pageParserTrace.Controls.Add(grpParserActions); + pageParserTrace.Controls.Add(splitter1); + pageParserTrace.Controls.Add(grpTokens); + pageParserTrace.Controls.Add(pnlParserTraceTop); + pageParserTrace.Location = new System.Drawing.Point(4, 39); + pageParserTrace.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageParserTrace.Name = "pageParserTrace"; + pageParserTrace.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageParserTrace.Size = new System.Drawing.Size(2036, 389); + pageParserTrace.TabIndex = 3; + pageParserTrace.Text = "Parser Trace"; + pageParserTrace.UseVisualStyleBackColor = true; + // // grpParserActions - // - this.grpParserActions.Controls.Add(this.gridParserTrace); - this.grpParserActions.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpParserActions.Location = new System.Drawing.Point(3, 28); - this.grpParserActions.Name = "grpParserActions"; - this.grpParserActions.Size = new System.Drawing.Size(741, 128); - this.grpParserActions.TabIndex = 4; - this.grpParserActions.TabStop = false; - // + // + grpParserActions.Controls.Add(gridParserTrace); + grpParserActions.Dock = System.Windows.Forms.DockStyle.Fill; + grpParserActions.Location = new System.Drawing.Point(6, 62); + grpParserActions.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpParserActions.Name = "grpParserActions"; + grpParserActions.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpParserActions.Size = new System.Drawing.Size(1492, 318); + grpParserActions.TabIndex = 4; + grpParserActions.TabStop = false; + // // gridParserTrace - // - this.gridParserTrace.AllowUserToAddRows = false; - this.gridParserTrace.AllowUserToDeleteRows = false; - this.gridParserTrace.AllowUserToResizeRows = false; - this.gridParserTrace.ColumnHeadersHeight = 24; - this.gridParserTrace.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.gridParserTrace.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.State, - this.Stack, - this.Input, - this.Action}); - this.gridParserTrace.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridParserTrace.Location = new System.Drawing.Point(3, 16); - this.gridParserTrace.MultiSelect = false; - this.gridParserTrace.Name = "gridParserTrace"; - this.gridParserTrace.ReadOnly = true; - this.gridParserTrace.RowHeadersVisible = false; - this.gridParserTrace.RowTemplate.Height = 24; - this.gridParserTrace.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; - this.gridParserTrace.Size = new System.Drawing.Size(735, 109); - this.gridParserTrace.TabIndex = 0; - this.gridParserTrace.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridParserTrace_CellDoubleClick); - // + // + gridParserTrace.AllowUserToAddRows = false; + gridParserTrace.AllowUserToDeleteRows = false; + gridParserTrace.AllowUserToResizeRows = false; + gridParserTrace.ColumnHeadersHeight = 24; + gridParserTrace.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + gridParserTrace.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { State, Stack, Input, Action }); + gridParserTrace.Dock = System.Windows.Forms.DockStyle.Fill; + gridParserTrace.Location = new System.Drawing.Point(6, 35); + gridParserTrace.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + gridParserTrace.MultiSelect = false; + gridParserTrace.Name = "gridParserTrace"; + gridParserTrace.ReadOnly = true; + gridParserTrace.RowHeadersVisible = false; + gridParserTrace.RowHeadersWidth = 72; + gridParserTrace.RowTemplate.Height = 24; + gridParserTrace.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + gridParserTrace.Size = new System.Drawing.Size(1480, 276); + gridParserTrace.TabIndex = 0; + gridParserTrace.CellDoubleClick += gridParserTrace_CellDoubleClick; + // // State - // - this.State.DataPropertyName = "State"; + // + State.DataPropertyName = "State"; dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.State.DefaultCellStyle = dataGridViewCellStyle7; - this.State.HeaderText = "State"; - this.State.Name = "State"; - this.State.ReadOnly = true; - this.State.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.State.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.State.ToolTipText = "Double-click grid cell to navigate to state details"; - this.State.Width = 60; - // + State.DefaultCellStyle = dataGridViewCellStyle7; + State.HeaderText = "State"; + State.MinimumWidth = 9; + State.Name = "State"; + State.ReadOnly = true; + State.Resizable = System.Windows.Forms.DataGridViewTriState.True; + State.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + State.ToolTipText = "Double-click grid cell to navigate to state details"; + State.Width = 60; + // // Stack - // - this.Stack.DataPropertyName = "StackTop"; + // + Stack.DataPropertyName = "StackTop"; dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight; - this.Stack.DefaultCellStyle = dataGridViewCellStyle8; - this.Stack.HeaderText = "Stack Top"; - this.Stack.Name = "Stack"; - this.Stack.ReadOnly = true; - this.Stack.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.Stack.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.Stack.ToolTipText = "Double-click grid cell to locate node in source code"; - this.Stack.Width = 200; - // + Stack.DefaultCellStyle = dataGridViewCellStyle8; + Stack.HeaderText = "Stack Top"; + Stack.MinimumWidth = 9; + Stack.Name = "Stack"; + Stack.ReadOnly = true; + Stack.Resizable = System.Windows.Forms.DataGridViewTriState.True; + Stack.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + Stack.ToolTipText = "Double-click grid cell to locate node in source code"; + Stack.Width = 200; + // // Input - // - this.Input.DataPropertyName = "Input"; - this.Input.HeaderText = "Input"; - this.Input.Name = "Input"; - this.Input.ReadOnly = true; - this.Input.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.Input.ToolTipText = "Double-click grid cell to locate in source code"; - this.Input.Width = 200; - // + // + Input.DataPropertyName = "Input"; + Input.HeaderText = "Input"; + Input.MinimumWidth = 9; + Input.Name = "Input"; + Input.ReadOnly = true; + Input.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + Input.ToolTipText = "Double-click grid cell to locate in source code"; + Input.Width = 200; + // // Action - // - this.Action.DataPropertyName = "Action"; - this.Action.HeaderText = "Action"; - this.Action.Name = "Action"; - this.Action.ReadOnly = true; - this.Action.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.Action.Width = 600; - // + // + Action.DataPropertyName = "Action"; + Action.HeaderText = "Action"; + Action.MinimumWidth = 9; + Action.Name = "Action"; + Action.ReadOnly = true; + Action.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + Action.Width = 600; + // // splitter1 - // - this.splitter1.BackColor = System.Drawing.SystemColors.Control; - this.splitter1.Dock = System.Windows.Forms.DockStyle.Right; - this.splitter1.Location = new System.Drawing.Point(744, 28); - this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(6, 128); - this.splitter1.TabIndex = 15; - this.splitter1.TabStop = false; - // + // + splitter1.BackColor = System.Drawing.SystemColors.Control; + splitter1.Dock = System.Windows.Forms.DockStyle.Right; + splitter1.Location = new System.Drawing.Point(1498, 62); + splitter1.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + splitter1.Name = "splitter1"; + splitter1.Size = new System.Drawing.Size(12, 318); + splitter1.TabIndex = 15; + splitter1.TabStop = false; + // // grpTokens - // - this.grpTokens.Controls.Add(this.lstTokens); - this.grpTokens.Dock = System.Windows.Forms.DockStyle.Right; - this.grpTokens.Location = new System.Drawing.Point(750, 28); - this.grpTokens.Name = "grpTokens"; - this.grpTokens.Size = new System.Drawing.Size(259, 128); - this.grpTokens.TabIndex = 3; - this.grpTokens.TabStop = false; - this.grpTokens.Text = "Tokens"; - // + // + grpTokens.Controls.Add(lstTokens); + grpTokens.Dock = System.Windows.Forms.DockStyle.Right; + grpTokens.Location = new System.Drawing.Point(1510, 62); + grpTokens.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpTokens.Name = "grpTokens"; + grpTokens.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + grpTokens.Size = new System.Drawing.Size(518, 318); + grpTokens.TabIndex = 3; + grpTokens.TabStop = false; + grpTokens.Text = "Tokens"; + // // lstTokens - // - this.lstTokens.Dock = System.Windows.Forms.DockStyle.Fill; - this.lstTokens.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lstTokens.FormattingEnabled = true; - this.lstTokens.ItemHeight = 14; - this.lstTokens.Location = new System.Drawing.Point(3, 16); - this.lstTokens.Name = "lstTokens"; - this.lstTokens.Size = new System.Drawing.Size(253, 109); - this.lstTokens.TabIndex = 2; - this.lstTokens.Click += new System.EventHandler(this.lstTokens_Click); - // + // + lstTokens.Dock = System.Windows.Forms.DockStyle.Fill; + lstTokens.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + lstTokens.FormattingEnabled = true; + lstTokens.ItemHeight = 21; + lstTokens.Location = new System.Drawing.Point(6, 35); + lstTokens.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + lstTokens.Name = "lstTokens"; + lstTokens.Size = new System.Drawing.Size(506, 276); + lstTokens.TabIndex = 2; + lstTokens.Click += lstTokens_Click; + // // pnlParserTraceTop - // - this.pnlParserTraceTop.BackColor = System.Drawing.SystemColors.Control; - this.pnlParserTraceTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pnlParserTraceTop.Controls.Add(this.chkExcludeComments); - this.pnlParserTraceTop.Controls.Add(this.lblTraceComment); - this.pnlParserTraceTop.Controls.Add(this.chkParserTrace); - this.pnlParserTraceTop.Dock = System.Windows.Forms.DockStyle.Top; - this.pnlParserTraceTop.Location = new System.Drawing.Point(3, 3); - this.pnlParserTraceTop.Name = "pnlParserTraceTop"; - this.pnlParserTraceTop.Size = new System.Drawing.Size(1006, 25); - this.pnlParserTraceTop.TabIndex = 1; - // + // + pnlParserTraceTop.BackColor = System.Drawing.SystemColors.Control; + pnlParserTraceTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pnlParserTraceTop.Controls.Add(chkExcludeComments); + pnlParserTraceTop.Controls.Add(lblTraceComment); + pnlParserTraceTop.Controls.Add(chkParserTrace); + pnlParserTraceTop.Dock = System.Windows.Forms.DockStyle.Top; + pnlParserTraceTop.Location = new System.Drawing.Point(6, 7); + pnlParserTraceTop.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pnlParserTraceTop.Name = "pnlParserTraceTop"; + pnlParserTraceTop.Size = new System.Drawing.Size(2022, 55); + pnlParserTraceTop.TabIndex = 1; + // // chkExcludeComments - // - this.chkExcludeComments.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.chkExcludeComments.AutoSize = true; - this.chkExcludeComments.Checked = true; - this.chkExcludeComments.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkExcludeComments.Location = new System.Drawing.Point(847, 3); - this.chkExcludeComments.Name = "chkExcludeComments"; - this.chkExcludeComments.Size = new System.Drawing.Size(145, 17); - this.chkExcludeComments.TabIndex = 2; - this.chkExcludeComments.Text = "Exclude comment tokens"; - this.chkExcludeComments.UseVisualStyleBackColor = true; - // + // + chkExcludeComments.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + chkExcludeComments.AutoSize = true; + chkExcludeComments.Checked = true; + chkExcludeComments.CheckState = System.Windows.Forms.CheckState.Checked; + chkExcludeComments.Location = new System.Drawing.Point(1725, 7); + chkExcludeComments.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + chkExcludeComments.Name = "chkExcludeComments"; + chkExcludeComments.Size = new System.Drawing.Size(271, 34); + chkExcludeComments.TabIndex = 2; + chkExcludeComments.Text = "Exclude comment tokens"; + chkExcludeComments.UseVisualStyleBackColor = true; + // // lblTraceComment - // - this.lblTraceComment.AutoSize = true; - this.lblTraceComment.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblTraceComment.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.lblTraceComment.Location = new System.Drawing.Point(128, 3); - this.lblTraceComment.Name = "lblTraceComment"; - this.lblTraceComment.Size = new System.Drawing.Size(350, 13); - this.lblTraceComment.TabIndex = 1; - this.lblTraceComment.Text = "(Double-click grid cell to navigate to parser state or source code position)"; - // + // + lblTraceComment.AutoSize = true; + lblTraceComment.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, 0); + lblTraceComment.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + lblTraceComment.Location = new System.Drawing.Point(256, 7); + lblTraceComment.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblTraceComment.Name = "lblTraceComment"; + lblTraceComment.Size = new System.Drawing.Size(638, 25); + lblTraceComment.TabIndex = 1; + lblTraceComment.Text = "(Double-click grid cell to navigate to parser state or source code position)"; + // // pageOutput - // - this.pageOutput.Controls.Add(this.txtOutput); - this.pageOutput.Controls.Add(this.pnlRuntimeInfo); - this.pageOutput.Location = new System.Drawing.Point(4, 22); - this.pageOutput.Name = "pageOutput"; - this.pageOutput.Padding = new System.Windows.Forms.Padding(3); - this.pageOutput.Size = new System.Drawing.Size(1014, 161); - this.pageOutput.TabIndex = 0; - this.pageOutput.Text = "Runtime Output"; - this.pageOutput.UseVisualStyleBackColor = true; - // + // + pageOutput.Controls.Add(txtOutput); + pageOutput.Controls.Add(pnlRuntimeInfo); + pageOutput.Location = new System.Drawing.Point(4, 39); + pageOutput.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageOutput.Name = "pageOutput"; + pageOutput.Padding = new System.Windows.Forms.Padding(6, 7, 6, 7); + pageOutput.Size = new System.Drawing.Size(2036, 389); + pageOutput.TabIndex = 0; + pageOutput.Text = "Runtime Output"; + pageOutput.UseVisualStyleBackColor = true; + // // txtOutput - // - this.txtOutput.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtOutput.Location = new System.Drawing.Point(3, 3); - this.txtOutput.Name = "txtOutput"; - this.txtOutput.Size = new System.Drawing.Size(857, 155); - this.txtOutput.TabIndex = 1; - // + // + txtOutput.Dock = System.Windows.Forms.DockStyle.Fill; + txtOutput.Location = new System.Drawing.Point(6, 7); + txtOutput.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + txtOutput.Multiline = true; + txtOutput.Name = "txtOutput"; + txtOutput.Size = new System.Drawing.Size(1722, 375); + txtOutput.TabIndex = 1; + txtOutput.Text = "(runtime output is broken)"; + // // pnlRuntimeInfo - // - this.pnlRuntimeInfo.Controls.Add(this.label14); - this.pnlRuntimeInfo.Controls.Add(this.lblGCCount); - this.pnlRuntimeInfo.Controls.Add(this.label13); - this.pnlRuntimeInfo.Controls.Add(this.lnkShowErrStack); - this.pnlRuntimeInfo.Controls.Add(this.lnkShowErrLocation); - this.pnlRuntimeInfo.Controls.Add(this.label5); - this.pnlRuntimeInfo.Controls.Add(this.lblRunTime); - this.pnlRuntimeInfo.Dock = System.Windows.Forms.DockStyle.Right; - this.pnlRuntimeInfo.Location = new System.Drawing.Point(860, 3); - this.pnlRuntimeInfo.Name = "pnlRuntimeInfo"; - this.pnlRuntimeInfo.Size = new System.Drawing.Size(151, 155); - this.pnlRuntimeInfo.TabIndex = 2; - // + // + pnlRuntimeInfo.Controls.Add(label14); + pnlRuntimeInfo.Controls.Add(lblGCCount); + pnlRuntimeInfo.Controls.Add(label13); + pnlRuntimeInfo.Controls.Add(lnkShowErrStack); + pnlRuntimeInfo.Controls.Add(lnkShowErrLocation); + pnlRuntimeInfo.Controls.Add(label5); + pnlRuntimeInfo.Controls.Add(lblRunTime); + pnlRuntimeInfo.Dock = System.Windows.Forms.DockStyle.Right; + pnlRuntimeInfo.Location = new System.Drawing.Point(1728, 7); + pnlRuntimeInfo.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + pnlRuntimeInfo.Name = "pnlRuntimeInfo"; + pnlRuntimeInfo.Size = new System.Drawing.Size(302, 375); + pnlRuntimeInfo.TabIndex = 2; + // // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(6, 23); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(105, 13); - this.label14.TabIndex = 24; - this.label14.Text = "GC Collection Count:"; - // + // + label14.AutoSize = true; + label14.Location = new System.Drawing.Point(12, 53); + label14.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label14.Name = "label14"; + label14.Size = new System.Drawing.Size(205, 30); + label14.TabIndex = 24; + label14.Text = "GC Collection Count:"; + // // lblGCCount - // - this.lblGCCount.AutoSize = true; - this.lblGCCount.Location = new System.Drawing.Point(124, 23); - this.lblGCCount.Name = "lblGCCount"; - this.lblGCCount.Size = new System.Drawing.Size(13, 13); - this.lblGCCount.TabIndex = 23; - this.lblGCCount.Text = "0"; - // + // + lblGCCount.AutoSize = true; + lblGCCount.Location = new System.Drawing.Point(248, 53); + lblGCCount.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblGCCount.Name = "lblGCCount"; + lblGCCount.Size = new System.Drawing.Size(24, 30); + lblGCCount.TabIndex = 23; + lblGCCount.Text = "0"; + // // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(5, 41); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(73, 13); - this.label13.TabIndex = 22; - this.label13.Text = "Runtime error:"; - // + // + label13.AutoSize = true; + label13.Location = new System.Drawing.Point(10, 95); + label13.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label13.Name = "label13"; + label13.Size = new System.Drawing.Size(146, 30); + label13.TabIndex = 22; + label13.Text = "Runtime error:"; + // // lnkShowErrStack - // - this.lnkShowErrStack.AutoSize = true; - this.lnkShowErrStack.Enabled = false; - this.lnkShowErrStack.Location = new System.Drawing.Point(23, 86); - this.lnkShowErrStack.Name = "lnkShowErrStack"; - this.lnkShowErrStack.Size = new System.Drawing.Size(79, 13); - this.lnkShowErrStack.TabIndex = 21; - this.lnkShowErrStack.TabStop = true; - this.lnkShowErrStack.Text = "Show full stack"; - this.lnkShowErrStack.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkShowErrStack_LinkClicked); - // + // + lnkShowErrStack.AutoSize = true; + lnkShowErrStack.Enabled = false; + lnkShowErrStack.Location = new System.Drawing.Point(46, 198); + lnkShowErrStack.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lnkShowErrStack.Name = "lnkShowErrStack"; + lnkShowErrStack.Size = new System.Drawing.Size(151, 30); + lnkShowErrStack.TabIndex = 21; + lnkShowErrStack.TabStop = true; + lnkShowErrStack.Text = "Show full stack"; + lnkShowErrStack.LinkClicked += lnkShowErrStack_LinkClicked; + // // lnkShowErrLocation - // - this.lnkShowErrLocation.AutoSize = true; - this.lnkShowErrLocation.Enabled = false; - this.lnkShowErrLocation.Location = new System.Drawing.Point(23, 62); - this.lnkShowErrLocation.Name = "lnkShowErrLocation"; - this.lnkShowErrLocation.Size = new System.Drawing.Size(98, 13); - this.lnkShowErrLocation.TabIndex = 20; - this.lnkShowErrLocation.TabStop = true; - this.lnkShowErrLocation.Text = "Show error location"; - this.lnkShowErrLocation.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkShowErrLocation_LinkClicked); - // + // + lnkShowErrLocation.AutoSize = true; + lnkShowErrLocation.Enabled = false; + lnkShowErrLocation.Location = new System.Drawing.Point(46, 143); + lnkShowErrLocation.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lnkShowErrLocation.Name = "lnkShowErrLocation"; + lnkShowErrLocation.Size = new System.Drawing.Size(193, 30); + lnkShowErrLocation.TabIndex = 20; + lnkShowErrLocation.TabStop = true; + lnkShowErrLocation.Text = "Show error location"; + lnkShowErrLocation.LinkClicked += lnkShowErrLocation_LinkClicked; + // // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(5, 3); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(98, 13); - this.label5.TabIndex = 19; - this.label5.Text = "Execution time, ms:"; - // + // + label5.AutoSize = true; + label5.Location = new System.Drawing.Point(10, 7); + label5.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + label5.Name = "label5"; + label5.Size = new System.Drawing.Size(193, 30); + label5.TabIndex = 19; + label5.Text = "Execution time, ms:"; + // // lblRunTime - // - this.lblRunTime.AutoSize = true; - this.lblRunTime.Location = new System.Drawing.Point(123, 3); - this.lblRunTime.Name = "lblRunTime"; - this.lblRunTime.Size = new System.Drawing.Size(13, 13); - this.lblRunTime.TabIndex = 18; - this.lblRunTime.Text = "0"; - // + // + lblRunTime.AutoSize = true; + lblRunTime.Location = new System.Drawing.Point(246, 7); + lblRunTime.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + lblRunTime.Name = "lblRunTime"; + lblRunTime.Size = new System.Drawing.Size(24, 30); + lblRunTime.TabIndex = 18; + lblRunTime.Text = "0"; + // // fmGrammarExplorer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1022, 603); - this.Controls.Add(this.tabGrammar); - this.Controls.Add(this.splitBottom); - this.Controls.Add(this.pnlLang); - this.Controls.Add(this.tabBottom); - this.Name = "fmGrammarExplorer"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Irony Grammar Explorer"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.fmExploreGrammar_FormClosing); - this.Load += new System.EventHandler(this.fmExploreGrammar_Load); - this.tabGrammar.ResumeLayout(false); - this.pageTerminals.ResumeLayout(false); - this.pageTerminals.PerformLayout(); - this.pageNonTerms.ResumeLayout(false); - this.pageNonTerms.PerformLayout(); - this.pageParserStates.ResumeLayout(false); - this.pageParserStates.PerformLayout(); - this.pageTest.ResumeLayout(false); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.tabOutput.ResumeLayout(false); - this.pageSyntaxTree.ResumeLayout(false); - this.pageAst.ResumeLayout(false); - this.pnlLang.ResumeLayout(false); - this.pnlLang.PerformLayout(); - this.menuGrammars.ResumeLayout(false); - this.tabBottom.ResumeLayout(false); - this.pageLanguage.ResumeLayout(false); - this.grpLanguageInfo.ResumeLayout(false); - this.grpLanguageInfo.PerformLayout(); - this.pageGrammarErrors.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.gridGrammarErrors)).EndInit(); - this.pageParserOutput.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.gridCompileErrors)).EndInit(); - this.grpCompileInfo.ResumeLayout(false); - this.grpCompileInfo.PerformLayout(); - this.pageParserTrace.ResumeLayout(false); - this.grpParserActions.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.gridParserTrace)).EndInit(); - this.grpTokens.ResumeLayout(false); - this.pnlParserTraceTop.ResumeLayout(false); - this.pnlParserTraceTop.PerformLayout(); - this.pageOutput.ResumeLayout(false); - this.pnlRuntimeInfo.ResumeLayout(false); - this.pnlRuntimeInfo.PerformLayout(); - this.ResumeLayout(false); - + // + AutoScaleDimensions = new System.Drawing.SizeF(12F, 30F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(2044, 1392); + Controls.Add(tabGrammar); + Controls.Add(splitBottom); + Controls.Add(pnlLang); + Controls.Add(tabBottom); + Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + Name = "fmGrammarExplorer"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "Irony Grammar Explorer"; + FormClosing += fmExploreGrammar_FormClosing; + Load += fmExploreGrammar_Load; + tabGrammar.ResumeLayout(false); + pageTerminals.ResumeLayout(false); + pageTerminals.PerformLayout(); + pageNonTerms.ResumeLayout(false); + pageNonTerms.PerformLayout(); + pageParserStates.ResumeLayout(false); + pageParserStates.PerformLayout(); + pageTest.ResumeLayout(false); + pageTest.PerformLayout(); + panel1.ResumeLayout(false); + tabOutput.ResumeLayout(false); + pageSyntaxTree.ResumeLayout(false); + pageAst.ResumeLayout(false); + pnlLang.ResumeLayout(false); + pnlLang.PerformLayout(); + menuGrammars.ResumeLayout(false); + tabBottom.ResumeLayout(false); + pageLanguage.ResumeLayout(false); + grpLanguageInfo.ResumeLayout(false); + grpLanguageInfo.PerformLayout(); + pageGrammarErrors.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)gridGrammarErrors).EndInit(); + pageParserOutput.ResumeLayout(false); + groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)gridCompileErrors).EndInit(); + grpCompileInfo.ResumeLayout(false); + grpCompileInfo.PerformLayout(); + pageParserTrace.ResumeLayout(false); + grpParserActions.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)gridParserTrace).EndInit(); + grpTokens.ResumeLayout(false); + pnlParserTraceTop.ResumeLayout(false); + pnlParserTraceTop.PerformLayout(); + pageOutput.ResumeLayout(false); + pageOutput.PerformLayout(); + pnlRuntimeInfo.ResumeLayout(false); + pnlRuntimeInfo.PerformLayout(); + ResumeLayout(false); } #endregion @@ -1324,7 +1401,7 @@ private void InitializeComponent() { private System.Windows.Forms.ToolStripMenuItem miRemoveAll; private System.Windows.Forms.TabControl tabBottom; private System.Windows.Forms.TabPage pageOutput; - private Irony.WinForms.ConsoleTextBox txtOutput; + private ConsoleTextBox txtOutput; private System.Windows.Forms.TabPage pageLanguage; private System.Windows.Forms.Splitter splitBottom; private System.Windows.Forms.GroupBox grpLanguageInfo; @@ -1366,7 +1443,6 @@ private void InitializeComponent() { private System.Windows.Forms.Label lblParseErrorCount; private System.Windows.Forms.Label lblLanguageDescr; private System.Windows.Forms.LinkLabel lnkShowErrLocation; - private System.Windows.Forms.CheckBox chkDisableHili; private System.Windows.Forms.LinkLabel lnkShowErrStack; private System.Windows.Forms.Label label13; private System.Windows.Forms.Label label8; @@ -1386,7 +1462,7 @@ private void InitializeComponent() { private System.Windows.Forms.DataGridViewTextBoxColumn Input; private System.Windows.Forms.DataGridViewTextBoxColumn Action; private System.Windows.Forms.Button btnLocate; - private Irony.WinForms.IronyTextBox txtSource; + private System.Windows.Forms.TextBox txtSource; private System.Windows.Forms.ToolStripMenuItem miRefresh; private System.Windows.Forms.ToolStripSeparator miSeparator; diff --git a/Irony.GrammarExplorer/fmGrammarExplorer.cs b/Irony.GrammarExplorer/fmGrammarExplorer.cs index c0213f3..9b664a7 100644 --- a/Irony.GrammarExplorer/fmGrammarExplorer.cs +++ b/Irony.GrammarExplorer/fmGrammarExplorer.cs @@ -20,8 +20,8 @@ using Irony.Ast; using Irony.GrammarExplorer.Properties; using Irony.Parsing; -using Irony.WinForms; -using Irony.WinForms.Exceptions; +//using Irony.WinForms; +//using Irony.WinForms.Exceptions; namespace Irony.GrammarExplorer { using ScriptException = Irony.Interpreter.ScriptException; //that's the only place we use stuff from Irony.Interpreter @@ -51,7 +51,6 @@ private void fmExploreGrammar_Load(object sender, EventArgs e) { GrammarItemList grammars = GrammarItemList.FromXml(Settings.Default.Grammars); grammars.ShowIn(cboGrammars); chkParserTrace.Checked = Settings.Default.EnableTrace; - chkDisableHili.Checked = Settings.Default.DisableHili; chkAutoRefresh.Checked = Settings.Default.AutoRefresh; cboGrammars.SelectedIndex = Settings.Default.LanguageIndex; //this will build parser and start colorizer if (Application.RenderWithVisualStyles) @@ -65,7 +64,6 @@ private void fmExploreGrammar_FormClosing(object sender, FormClosingEventArgs e) Settings.Default.LanguageIndex = cboGrammars.SelectedIndex; Settings.Default.SearchPattern = txtSearch.Text; Settings.Default.EnableTrace = chkParserTrace.Checked; - Settings.Default.DisableHili = chkDisableHili.Checked; Settings.Default.AutoRefresh = chkAutoRefresh.Checked; var grammars = GrammarItemList.FromCombo(cboGrammars); Settings.Default.Grammars = grammars.ToXml(); @@ -229,7 +227,7 @@ private void LocateParserState(ParserState state) { //first scroll to the bottom, so that scrolling to needed position brings it to top txtParserStates.SelectionStart = txtParserStates.Text.Length - 1; txtParserStates.ScrollToCaret(); - DoSearch(txtParserStates.AsITextBox(), "State " + state.Name, 0); + DoSearch(txtParserStates, "State " + state.Name, 0); } private void ShowRuntimeError(ScriptException error){ @@ -243,7 +241,7 @@ private void ShowRuntimeError(ScriptException error){ } else { //the exception was not caught by interpreter/AST node. Show full exception info WriteOutput("Error: " + error.Message); - fmShowException.ShowException(error); + //fmShowException.ShowException(error); } tabBottom.SelectedTab = pageOutput; @@ -318,7 +316,6 @@ private void CreateGrammar() { } private void CreateParser() { - StopHighlighter(); btnRun.Enabled = false; txtOutput.Text = string.Empty; _parseTree = null; @@ -327,7 +324,6 @@ private void CreateParser() { _language = new LanguageData(_grammar); _parser = new Parser (_language); ShowParserConstructionResults(); - StartHighlighter(); } private void ParseSample() { @@ -373,7 +369,7 @@ private void RunSample() { sw.Start(); var iRunner = _grammar as ICanRunSample; - var args = new RunSampleArgs(_language, txtSource.Text, _parseTree, txtOutput); + var args = new RunSampleArgs(_language, txtSource.Text, _parseTree); //, txtOutput); string output = iRunner.RunSample(args); sw.Stop(); lblRunTime.Text = sw.ElapsedMilliseconds.ToString(); @@ -411,20 +407,6 @@ private void LoadSourceFile(string path) { } } - //Source highlighting - private void StartHighlighter() { - if (chkDisableHili.Checked) return; - txtSource.Language = _language; - } - private void StopHighlighter() { - txtSource.HighlightingEnabled = false; - } - private void EnableHighlighter(bool enable) { - if (enable) - txtSource.Language = _language; - txtSource.HighlightingEnabled = enable; - } - //The following methods are contributed by Andrew Bradnan; pasted here with minor changes private void DoSearch() { lblSearchError.Visible = false; @@ -437,7 +419,7 @@ private void DoSearch() { } }//method - private bool DoSearch(ITextBox textBox, string fragment, int start) { + private bool DoSearch(TextBox textBox, string fragment, int start) { textBox.SelectionLength = 0; // Compile the regular expression. Regex r = new Regex(fragment, RegexOptions.IgnoreCase); @@ -457,14 +439,14 @@ private bool DoSearch(ITextBox textBox, string fragment, int start) { return false; }//method - public ITextBox GetSearchContentBox() { + public TextBox GetSearchContentBox() { switch (tabGrammar.SelectedIndex) { case 0: - return txtTerms.AsITextBox(); + return txtTerms; case 1: - return txtNonTerms.AsITextBox(); + return txtNonTerms; case 2: - return txtParserStates.AsITextBox(); + return txtParserStates; case 3: return txtSource; default: @@ -656,11 +638,6 @@ private TreeNode LocateTreeNode(TreeNodeCollection nodes, int position, Func - diff --git a/Irony.WinForms/Exceptions/fmShowException.Designer.cs b/Irony.GrammarExplorer/fmShowException.Designer.cs similarity index 95% rename from Irony.WinForms/Exceptions/fmShowException.Designer.cs rename to Irony.GrammarExplorer/fmShowException.Designer.cs index 2882e4c..3faf6f7 100644 --- a/Irony.WinForms/Exceptions/fmShowException.Designer.cs +++ b/Irony.GrammarExplorer/fmShowException.Designer.cs @@ -1,61 +1,61 @@ -namespace Irony.WinForms.Exceptions { - partial class fmShowException { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if (disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - this.txtException = new System.Windows.Forms.TextBox(); - this.SuspendLayout(); - // - // txtException - // - this.txtException.AcceptsReturn = true; - this.txtException.AcceptsTab = true; - this.txtException.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtException.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.txtException.HideSelection = false; - this.txtException.Location = new System.Drawing.Point(0, 0); - this.txtException.Multiline = true; - this.txtException.Name = "txtException"; - this.txtException.ReadOnly = true; - this.txtException.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.txtException.Size = new System.Drawing.Size(764, 334); - this.txtException.TabIndex = 1; - // - // fmShowException - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(764, 334); - this.Controls.Add(this.txtException); - this.Name = "fmShowException"; - this.Text = "Exception"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox txtException; - } +namespace Irony.GrammarExplorer { + partial class fmShowException { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtException = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // txtException + // + this.txtException.AcceptsReturn = true; + this.txtException.AcceptsTab = true; + this.txtException.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtException.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtException.HideSelection = false; + this.txtException.Location = new System.Drawing.Point(0, 0); + this.txtException.Multiline = true; + this.txtException.Name = "txtException"; + this.txtException.ReadOnly = true; + this.txtException.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtException.Size = new System.Drawing.Size(764, 334); + this.txtException.TabIndex = 1; + // + // fmShowException + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(764, 334); + this.Controls.Add(this.txtException); + this.Name = "fmShowException"; + this.Text = "Exception"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txtException; + } } \ No newline at end of file diff --git a/Irony.WinForms/Exceptions/fmShowException.cs b/Irony.GrammarExplorer/fmShowException.cs similarity index 93% rename from Irony.WinForms/Exceptions/fmShowException.cs rename to Irony.GrammarExplorer/fmShowException.cs index 46f8158..82eaaf9 100644 --- a/Irony.WinForms/Exceptions/fmShowException.cs +++ b/Irony.GrammarExplorer/fmShowException.cs @@ -1,33 +1,33 @@ -#region License -/* ********************************************************************************** - * Copyright (c) Roman Ivantsov - * This source code is subject to terms and conditions of the MIT License - * for Irony. A copy of the license can be found in the License.txt file - * at the root of this distribution. - * By using this source code in any fashion, you are agreeing to be bound by the terms of the - * MIT License. - * You must not remove this notice from this software. - * **********************************************************************************/ -#endregion - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace Irony.WinForms.Exceptions { - public partial class fmShowException : Form { - public fmShowException() { - InitializeComponent(); - } - public static void ShowException(Exception ex) { - fmShowException fm = new fmShowException(); - fm.txtException.Text = ex.ToString(); - fm.txtException.Select(0, 0); - fm.Show(); - } - } +#region License +/* ********************************************************************************** + * Copyright (c) Roman Ivantsov + * This source code is subject to terms and conditions of the MIT License + * for Irony. A copy of the license can be found in the License.txt file + * at the root of this distribution. + * By using this source code in any fashion, you are agreeing to be bound by the terms of the + * MIT License. + * You must not remove this notice from this software. + * **********************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Irony.GrammarExplorer { + public partial class fmShowException : Form { + public fmShowException() { + InitializeComponent(); + } + public static void ShowException(Exception ex) { + fmShowException fm = new fmShowException(); + fm.txtException.Text = ex.ToString(); + fm.txtException.Select(0, 0); + fm.Show(); + } + } } \ No newline at end of file diff --git a/Irony.WinForms/Exceptions/fmShowException.resx b/Irony.GrammarExplorer/fmShowException.resx similarity index 97% rename from Irony.WinForms/Exceptions/fmShowException.resx rename to Irony.GrammarExplorer/fmShowException.resx index ff31a6d..19dc0dd 100644 --- a/Irony.WinForms/Exceptions/fmShowException.resx +++ b/Irony.GrammarExplorer/fmShowException.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Irony.WinForms/035.Irony.WinForms.csproj b/Irony.WinForms/035.Irony.WinForms.csproj deleted file mode 100644 index 4334498..0000000 --- a/Irony.WinForms/035.Irony.WinForms.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - net8.0-windows - disable - true - Irony.WinForms - Irony.WinForms - false - - - - - - - - - - - - - diff --git a/Irony.WinForms/BorderStyleEx.cs b/Irony.WinForms/BorderStyleEx.cs deleted file mode 100644 index 15dcb4b..0000000 --- a/Irony.WinForms/BorderStyleEx.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Irony.WinForms { - /// - /// Specifies the border style for the control. - /// - public enum BorderStyleEx { - /// - /// No border. - /// - None = BorderStyle.None, - /// - /// Single-line border. - /// - FixedSingle = BorderStyle.FixedSingle, - /// - /// A three-dimensional border. - /// - Fixed3D = BorderStyle.Fixed3D, - /// - /// A border supplied by system theme. - /// - VisualStyle = 100, - } -} diff --git a/Irony.WinForms/ConsoleTextBox.cs b/Irony.WinForms/ConsoleTextBox.cs deleted file mode 100644 index fb56fbd..0000000 --- a/Irony.WinForms/ConsoleTextBox.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using Irony.Interpreter; -using Irony.Parsing; - -namespace Irony.WinForms { - using FastColoredTextBox = FastColoredTextBoxNS.FastColoredTextBox; - using FctbConsoleTextBox = FastColoredTextBoxNS.ConsoleTextBox; - using Style = FastColoredTextBoxNS.Style; - using TextChangedEventArgs = FastColoredTextBoxNS.TextChangedEventArgs; - using TextStyle = FastColoredTextBoxNS.TextStyle; - using WordWrapMode = FastColoredTextBoxNS.WordWrapMode; - - /// - /// TextBox with for console emulation. - /// Implements interface. - /// - /// implementation is thread-safe. - [ToolboxItem(true)] - public partial class ConsoleTextBox : IronyTextBoxBase, IConsoleAdapter { - private bool _canceled; - private Style _normalStyle = new TextStyle(Brushes.Black, null, FontStyle.Regular); - private Style _errorStyle = new TextStyle(Brushes.Red, null, FontStyle.Bold); - private Style _currentStyle; - - /// - /// Initializes a new instance of the class. - /// - public ConsoleTextBox() { - InitializeComponent(); - } - - protected override FastColoredTextBox CreateFastColoredTextBox() { - var textBox = new FctbConsoleTextBox { - LeftPadding = 2, - ShowLineNumbers = false, - WordWrap = true, - WordWrapMode = WordWrapMode.CharWrapPreferredWidth, - }; - - textBox.TextChanged += textBox_TextChanged; - textBox.Enter += textBox_Enter; - return textBox; - } - - private FctbConsoleTextBox Console { - get { return (FctbConsoleTextBox)FastColoredTextBox; } - } - - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override string Text { - get { return Console.Text; } - set { - Console.Clear(); - Console.WriteLine(value); - } - } - - protected override void OnHandleDestroyed(EventArgs e) { - base.OnHandleDestroyed(e); - Canceled = true; - } - - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool Canceled { - get { return _canceled; } - set { - _canceled = value; - if (Canceled) - Console.IsReadLineMode = false; - } - } - - public void Write(string text) { - if (!InvokeRequired) { - Console.WriteLine(text); - return; - } - Invoke(new Action(Console.WriteLine), text); - } - - public void WriteLine(string text) { - Write(text + Environment.NewLine); - } - - public void SetTextStyle(ConsoleTextStyle style) { - CurrentStyle = style == ConsoleTextStyle.Normal ? _normalStyle : _errorStyle; - } - - private Style CurrentStyle { - get { return _currentStyle ?? (_currentStyle = _normalStyle); } - set { _currentStyle = value; } - } - - private void textBox_TextChanged(object sender, TextChangedEventArgs args) { - args.ChangedRange.SetStyle(CurrentStyle); - } - - public void textBox_Enter(object sender, EventArgs args) { - if (Console.IsReadLineMode) - BeginInvoke(new Action(Console.GoEnd)); - } - - public int Read() { - throw new NotSupportedException(); - } - - public string ReadLine() { - if (!InvokeRequired) { - Focus(); - return Console.ReadLine(); - } - return Invoke(new Func(Console.ReadLine)) as string; - } - - public void SetTitle(string title) { - throw new NotSupportedException(); - } - - public void Clear() { - Console.Text = string.Empty; - } - - public string GetOutput() { - return Console.Text; - } - } -} diff --git a/Irony.WinForms/FastColoredTextBox/AboutFastColoredTextBox.txt b/Irony.WinForms/FastColoredTextBox/AboutFastColoredTextBox.txt deleted file mode 100644 index 9846e53..0000000 --- a/Irony.WinForms/FastColoredTextBox/AboutFastColoredTextBox.txt +++ /dev/null @@ -1,6 +0,0 @@ -Fast Colored TextBox for Syntax Highlighting -By Pavel Torgashov -GNU Lesser General Public License v3 - -http://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting -https://www.nuget.org/packages/FCTB \ No newline at end of file diff --git a/Irony.WinForms/FastColoredTextBox/ConsoleTextBox.cs b/Irony.WinForms/FastColoredTextBox/ConsoleTextBox.cs deleted file mode 100644 index 31a42f0..0000000 --- a/Irony.WinForms/FastColoredTextBox/ConsoleTextBox.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Threading; -using System.Windows.Forms; - -namespace FastColoredTextBoxNS -{ - /// - /// Console emulator. - /// - [ToolboxItem(false)] - public class ConsoleTextBox : FastColoredTextBox - { - private volatile bool isReadLineMode; - private volatile bool isUpdating; - private Place StartReadPlace { get; set; } - - /// - /// Control is waiting for line entering. - /// - public bool IsReadLineMode - { - get { return isReadLineMode; } - set { isReadLineMode = value; } - } - - public new void Clear() - { - isUpdating = true; - try - { - base.Clear(); - } - finally - { - isUpdating = false; - } - } - - /// - /// Append line to end of text. - /// - /// - public void WriteLine(string text) - { - IsReadLineMode = false; - isUpdating = true; - try - { - AppendText(text); - GoEnd(); - } - finally - { - isUpdating = false; - ClearUndo(); - } - } - - /// - /// Wait for line entering. - /// Set IsReadLineMode to false for break of waiting. - /// - /// - public string ReadLine() - { - GoEnd(); - StartReadPlace = Range.End; - IsReadLineMode = true; - try - { - while (IsReadLineMode) - { - Application.DoEvents(); - Thread.Sleep(5); - } - } - finally - { - IsReadLineMode = false; - ClearUndo(); - } - - return new Range(this, StartReadPlace, Range.End).Text.TrimEnd('\r', '\n'); - } - - public override void OnTextChanging(ref string text) - { - if (!IsReadLineMode && !isUpdating) - { - text = ""; //cancel changing - return; - } - - if (IsReadLineMode) - { - if (Selection.Start < StartReadPlace || Selection.End < StartReadPlace) - GoEnd();//move caret to entering position - - if (Selection.Start == StartReadPlace || Selection.End == StartReadPlace) - if (text == "\b") //backspace - { - text = ""; //cancel deleting of last char of readonly text - return; - } - - if (text != null && text.Contains('\n')) - { - text = text.Substring(0, text.IndexOf('\n') + 1); - IsReadLineMode = false; - } - } - - base.OnTextChanging(ref text); - } - } -} \ No newline at end of file diff --git a/Irony.WinForms/Highlighter/AboutCodeHighlighter.txt b/Irony.WinForms/Highlighter/AboutCodeHighlighter.txt deleted file mode 100644 index 0563f46..0000000 --- a/Irony.WinForms/Highlighter/AboutCodeHighlighter.txt +++ /dev/null @@ -1 +0,0 @@ -This highlighter is not a real thing, just a sketch - good enough to highlight samples in Grammar Explorer \ No newline at end of file diff --git a/Irony.WinForms/Highlighter/EditorAdapter.cs b/Irony.WinForms/Highlighter/EditorAdapter.cs deleted file mode 100644 index 729051b..0000000 --- a/Irony.WinForms/Highlighter/EditorAdapter.cs +++ /dev/null @@ -1,144 +0,0 @@ -#region License -/* ********************************************************************************** - * Copyright (c) Roman Ivantsov - * This source code is subject to terms and conditions of the MIT License - * for Irony. A copy of the license can be found in the License.txt file - * at the root of this distribution. - * By using this source code in any fashion, you are agreeing to be bound by the terms of the - * MIT License. - * You must not remove this notice from this software. - * **********************************************************************************/ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Runtime.InteropServices; -using System.Diagnostics; -using Irony.Parsing; -using Irony.WinForms.Exceptions; - -namespace Irony.WinForms.Highlighter { - - public class EditorAdapter { - Parser _parser; - Scanner _scanner; - ParseTree _parseTree; - string _newText; - EditorViewAdapterList _views = new EditorViewAdapterList(); - EditorViewAdapterList _viewsCopy; //copy used in refresh loop; set to null when views are added/removed - Thread _parserThread; - Thread _colorizerThread; - bool _stopped; - - public EditorAdapter(LanguageData language) { - _parser = new Parser(language); - _scanner = _parser.Scanner; - _colorizerThread = new Thread(ColorizerLoop); - _colorizerThread.IsBackground = true; - _parserThread = new Thread(ParserLoop); - _parserThread.IsBackground = true; - } - public void Activate() { - if ((_colorizerThread.ThreadState & System.Threading.ThreadState.Running) == 0) { - _parserThread.Start(); - _colorizerThread.Start(); - } - } - - public void Stop() { - try { - _stopped = true; - _parserThread.Join(500); - if(_parserThread.IsAlive) - _parserThread.Abort(); - _colorizerThread.Join(500); - if(_colorizerThread.IsAlive) - _colorizerThread.Abort(); - } catch (Exception ex) { - System.Diagnostics.Debug.WriteLine("Error when stopping EditorAdapter: " + ex.Message); - } - } - - public void SetNewText(string text) { - text = text ?? string.Empty; //force it to become not null; null is special value meaning "no changes" - _newText = text; - } - - public ParseTree ParseTree { - get { return _parseTree; } - } - - //Note: we don't actually parse in current version, only scan. Will implement full parsing in the future, - // to support all intellisense operations - private void ParseSource(string newText) { - //Explicitly catch the case when new text is empty - if (newText != string.Empty) { - _parseTree = _parser.Parse(newText);// .ScanOnly(newText, "Source"); - } - //notify views - var views = GetViews(); - foreach (var view in views) - view.UpdateParsedSource(_parseTree); - } - - - #region Views manipulation: AddView, RemoveView, GetViews - public void AddView(EditorViewAdapter view) { - lock (this) { - _views.Add(view); - _viewsCopy = null; - } - } - public void RemoveView(EditorViewAdapter view) { - lock (this) { - _views.Remove(view); - _viewsCopy = null; - } - } - private EditorViewAdapterList GetViews() { - EditorViewAdapterList result = _viewsCopy; - if (result == null) { - lock (this) { - _viewsCopy = new EditorViewAdapterList(); - _viewsCopy.AddRange(_views); - result = _viewsCopy; - }//lock - } - return result; - } - #endregion - - private void ParserLoop() { - while (!_stopped) { - try { - string newtext = Interlocked.Exchange(ref _newText, null); - if(newtext != null) { - ParseSource(newtext); - } - Thread.Sleep(10); - } catch(Exception ex) { - fmShowException.ShowException(ex); - System.Windows.Forms.MessageBox.Show("Fatal error in code colorizer. Colorizing had been disabled."); - _stopped = true; - } - }//while - } - - private void ColorizerLoop() { - while (!_stopped) { - EditorViewAdapterList views = GetViews(); - //Go through views and invoke refresh - foreach (EditorViewAdapter view in views) { - if (_stopped) break; - if (view.WantsColorize) - view.TryInvokeColorize(); - }//foreach - Thread.Sleep(10); - }// while !_stopped - }//method - - }//class -}//namespace diff --git a/Irony.WinForms/Highlighter/EditorViewAdapter.cs b/Irony.WinForms/Highlighter/EditorViewAdapter.cs deleted file mode 100644 index 55f1c14..0000000 --- a/Irony.WinForms/Highlighter/EditorViewAdapter.cs +++ /dev/null @@ -1,229 +0,0 @@ -#region License -/* ********************************************************************************** - * Copyright (c) Roman Ivantsov - * This source code is subject to terms and conditions of the MIT License - * for Irony. A copy of the license can be found in the License.txt file - * at the root of this distribution. - * By using this source code in any fashion, you are agreeing to be bound by the terms of the - * MIT License. - * You must not remove this notice from this software. - * **********************************************************************************/ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using Irony.Parsing; - -namespace Irony.WinForms.Highlighter { - public delegate void ColorizeMethod(); - public interface IUIThreadInvoker { - void InvokeOnUIThread(ColorizeMethod colorize); - } - - public class ColorizeEventArgs : EventArgs { - public readonly TokenList Tokens; - public ColorizeEventArgs(TokenList tokens) { - Tokens = tokens; - } - } - - //Container for two numbers representing visible range of the source text (min...max) - // we use it to allow replacing two numbers in atomic operation - public class ViewRange { - public readonly int Min, Max; - public ViewRange(int min, int max) { - Min = min; - Max = max; - } - public bool Equals(ViewRange other) { - return other.Min == Min && other.Max == Max; - } - } - - public class ViewData { - // ColoredTokens + NotColoredTokens == Source.Tokens - public readonly TokenList ColoredTokens = new TokenList(); - public readonly TokenList NotColoredTokens = new TokenList(); //tokens not colored yet - public ParseTree Tree; - public ViewData(ParseTree tree) { - this.Tree = tree; - if (tree == null) return; - NotColoredTokens.AddRange(tree.Tokens); - } - } - - //Two scenarios: - // 1. Colorizing in current view range. We colorize only those tokens in current view range that were not colorized yet. - // For this we keep two lists (colorized and not colorized) tokens, and move tokens from one list to another when - // we actually colorize them. - // 2. Typing/Editing - new editor content is being pushed from EditorAdapter. We try to avoid recoloring all visible tokens, when - // user just typed a single char. What we do is try to identify "already-colored" tokens in new token list by matching - // old viewData.ColoredTokens to newly scanned token list - initially in new-viewData.NonColoredTokens. If we find a "match", - // we move the token from NonColored to Colored in new viewData. This all happens on background thread. - - public class EditorViewAdapterList : List { } - - public class EditorViewAdapter { - public EditorAdapter Adapter { get; private set; } - private IUIThreadInvoker _invoker; - //public readonly Control Control; - ViewData _data; - ViewRange _range; - bool _wantsColorize; - int _colorizing; - public event EventHandler ColorizeTokens; - - public EditorViewAdapter(EditorAdapter adapter, IUIThreadInvoker invoker) { - Adapter = adapter; - _invoker = invoker; - Adapter.AddView(this); - _range = new ViewRange(-1, -1); - } - - //SetViewRange and SetNewText are called by text box's event handlers to notify adapter that user did something edit box - public void SetViewRange(int min, int max) { - _range = new ViewRange(min, max); - _wantsColorize = true; - } - //The new text is passed directly to EditorAdapter instance (possibly shared by several view adapters). - // EditorAdapter parses the text on a separate background thread, and notifies back this and other - // view adapters and provides them with newly parsed source through UpdateParsedSource method (see below) - public void SetNewText(string newText) { - //TODO: fix this - //hack, temp solution for more general problem - //When we load/replace/clear entire text, clear out colored tokens to force recoloring from scratch - if (string.IsNullOrEmpty(newText)) - _data = null; - Adapter.SetNewText(newText); - } - - //Called by EditorAdapter to provide the latest parsed source - public void UpdateParsedSource(ParseTree newTree) { - lock (this) { - var oldData = _data; - _data = new ViewData(newTree); - //Now try to figure out tokens that match old Colored tokens - if (oldData != null && oldData.Tree != null) { - DetectAlreadyColoredTokens(oldData.ColoredTokens, _data.Tree.SourceText.Length - oldData.Tree.SourceText.Length); - } - _wantsColorize = true; - }//lock - } - - - #region Colorizing - public bool WantsColorize { - get { return _wantsColorize; } - } - - public void TryInvokeColorize() { - if (!_wantsColorize) return; - int colorizing = Interlocked.Exchange(ref _colorizing, 1); - if (colorizing != 0) return; - _invoker.InvokeOnUIThread(Colorize); - } - private void Colorize() { - var range = _range; - var data = _data; - if (data != null) { - TokenList tokensToColor; - lock (this) { - tokensToColor = ExtractTokensInRange(data.NotColoredTokens, range.Min, range.Max); - } - if (ColorizeTokens != null && tokensToColor != null && tokensToColor.Count > 0) { - data.ColoredTokens.AddRange(tokensToColor); - ColorizeEventArgs args = new ColorizeEventArgs(tokensToColor); - ColorizeTokens(this, args); - } - }//if data != null ... - _wantsColorize = false; - _colorizing = 0; - } - - private void DetectAlreadyColoredTokens(TokenList oldColoredTokens, int shift) { - foreach (Token oldColored in oldColoredTokens) { - int index; - Token newColored; - if (FindMatchingToken(_data.NotColoredTokens, oldColored, 0, out index, out newColored) || - FindMatchingToken(_data.NotColoredTokens, oldColored, shift, out index, out newColored)) { - _data.NotColoredTokens.RemoveAt(index); - _data.ColoredTokens.Add(newColored); - } - }//foreach - } - - #endregion - - #region token utilities - private bool FindMatchingToken(TokenList inTokens, Token token, int shift, out int index, out Token result) { - index = LocateToken(inTokens, token.Location.Position + shift); - if (index >= 0) { - result = inTokens[index]; - if (TokensMatch(token, result, shift)) return true; - } - index = -1; - result = null; - return false; - } - public bool TokensMatch(Token x, Token y, int shift) { - if (x.Location.Position + shift != y.Location.Position) return false; - if (x.Terminal != y.Terminal) return false; - if (x.Text != y.Text) return false; - //Note: be careful comparing x.Value and y.Value - if value is "ValueType", it is boxed and erroneously reports non-equal - //if (x.ValueString != y.ValueString) return false; - return true; - } - public TokenList ExtractTokensInRange(TokenList tokens, int from, int until) { - TokenList result = new TokenList(); - for (int i = tokens.Count - 1; i >= 0; i--) { - var tkn = tokens[i]; - if (tkn.Location.Position > until || (tkn.Location.Position + tkn.Length < from)) continue; - result.Add(tkn); - tokens.RemoveAt(i); - } - return result; - } - - public TokenList GetTokensInRange(int from, int until) { - ViewData data = _data; - if (data == null) return null; - return GetTokensInRange(data.Tree.Tokens, from, until); - } - public TokenList GetTokensInRange(TokenList tokens, int from, int until) { - TokenList result = new TokenList(); - int fromIndex = LocateToken(tokens, from); - int untilIndex = LocateToken(tokens, until); - if (fromIndex < 0) fromIndex = 0; - if (untilIndex >= tokens.Count) untilIndex = tokens.Count - 1; - for (int i = fromIndex; i <= untilIndex; i++) { - result.Add(tokens[i]); - } - return result; - } - - //TODO: find better place for these methods - public int LocateToken(TokenList tokens, int position) { - if (tokens == null || tokens.Count == 0) return -1; - var lastToken = tokens[tokens.Count - 1]; - var lastTokenEnd = lastToken.Location.Position + lastToken.Length; - if (position < tokens[0].Location.Position || position > lastTokenEnd) return -1; - return LocateTokenExt(tokens, position, 0, tokens.Count - 1); - } - private int LocateTokenExt(TokenList tokens, int position, int fromIndex, int untilIndex) { - if (fromIndex + 1 >= untilIndex) return fromIndex; - int midIndex = (fromIndex + untilIndex) / 2; - Token middleToken = tokens[midIndex]; - if (middleToken.Location.Position <= position) - return LocateTokenExt(tokens, position, midIndex, untilIndex); - else - return LocateTokenExt(tokens, position, fromIndex, midIndex); - } - #endregion - - - }//EditorViewAdapter class - -}//namespace diff --git a/Irony.WinForms/Highlighter/FastColoredTextBoxHighlighter.cs b/Irony.WinForms/Highlighter/FastColoredTextBoxHighlighter.cs deleted file mode 100644 index 90847ef..0000000 --- a/Irony.WinForms/Highlighter/FastColoredTextBoxHighlighter.cs +++ /dev/null @@ -1,281 +0,0 @@ -#region License -/* ********************************************************************************** - * Copyright (c) Roman Ivantsov - * This source code is subject to terms and conditions of the MIT License - * for Irony. A copy of the license can be found in the License.txt file - * at the root of this distribution. - * By using this source code in any fashion, you are agreeing to be bound by the terms of the - * MIT License. - * You must not remove this notice from this software. - * **********************************************************************************/ -#endregion - -// Aknowledgments -// This module borrows code and ideas from TinyPG framework by Herre Kuijpers, -// specifically TextMarker.cs and TextHighlighter.cs classes. -// http://www.codeproject.com/KB/recipes/TinyPG.aspx -// Written by Alexey Yakovlev , based on RichTextBoxHighlighter -// -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Linq; -using System.Threading; -using System.Runtime.InteropServices; -using Irony.Parsing; -using System.Diagnostics; -using FastColoredTextBoxNS; - -namespace Irony.WinForms.Highlighter { - - /// - /// Highlights text inside FastColoredTextBox control. - /// - public class FastColoredTextBoxHighlighter : NativeWindow, IDisposable, IUIThreadInvoker { - public FastColoredTextBox TextBox; - private readonly Dictionary TokenStyles = new Dictionary(); - private readonly Style DefaultTokenStyle = new TextStyle(Brushes.Black, null, FontStyle.Regular); - private readonly Style ErrorTokenStyle = new WavyLineStyle(240, Color.Red); - public readonly EditorAdapter Adapter; - public readonly EditorViewAdapter ViewAdapter; - public readonly LanguageData Language; - - private IntPtr _savedEventMask = IntPtr.Zero; - bool _colorizing; - bool _disposed; - - #region Constructor, initialization and disposing - public FastColoredTextBoxHighlighter(FastColoredTextBox textBox, LanguageData language) { - TextBox = textBox; - Adapter = new EditorAdapter(language); - ViewAdapter = new EditorViewAdapter(Adapter, this); - Language = language; - InitStyles(); - InitBraces(); - Connect(); - UpdateViewRange(); - ViewAdapter.SetNewText(TextBox.Text); - } - - private void Connect() { - TextBox.MouseMove += TextBox_MouseMove; - TextBox.TextChanged += TextBox_TextChanged; - TextBox.KeyDown += TextBox_KeyDown; - TextBox.VisibleRangeChanged += TextBox_ScrollResize; - TextBox.SizeChanged += TextBox_ScrollResize; - TextBox.Disposed += TextBox_Disposed; - ViewAdapter.ColorizeTokens += Adapter_ColorizeTokens; - this.AssignHandle(TextBox.Handle); - } - - private void Disconnect() { - if (TextBox != null) { - TextBox.MouseMove -= TextBox_MouseMove; - TextBox.TextChanged -= TextBox_TextChanged; - TextBox.KeyDown -= TextBox_KeyDown; - TextBox.Disposed -= TextBox_Disposed; - TextBox.VisibleRangeChanged -= TextBox_ScrollResize; - TextBox.SizeChanged -= TextBox_ScrollResize; - } - TextBox = null; - } - - public void Dispose() { - Adapter.Stop(); - _disposed = true; - Disconnect(); - this.ReleaseHandle(); - GC.SuppressFinalize(this); - } - - private void InitStyles() { - var commentStyle = new TextStyle(Brushes.Green, null, FontStyle.Italic); - var keywordStyle = new TextStyle(Brushes.Blue, null, FontStyle.Bold); - var literalStyle = new TextStyle(Brushes.DarkRed, null, FontStyle.Regular); - - TokenStyles[TokenColor.Comment] = commentStyle; - TokenStyles[TokenColor.Identifier] = DefaultTokenStyle; - TokenStyles[TokenColor.Keyword] = keywordStyle; - TokenStyles[TokenColor.Number] = literalStyle; - TokenStyles[TokenColor.String] = literalStyle; - TokenStyles[TokenColor.Text] = DefaultTokenStyle; - - TextBox.ClearStylesBuffer(); - TextBox.AddStyle(DefaultTokenStyle); - TextBox.AddStyle(ErrorTokenStyle); - TextBox.AddStyle(commentStyle); - TextBox.AddStyle(keywordStyle); - TextBox.AddStyle(literalStyle); - TextBox.BracketsStyle = new MarkerStyle(new SolidBrush(Color.FromArgb(50, Color.Blue))); - TextBox.BracketsStyle2 = new MarkerStyle(new SolidBrush(Color.FromArgb(70, Color.Green))); - } - - private void InitBraces() { - // select the first two pair of braces with the length of exactly one char (FCTB restrictions) - var braces = Language.Grammar.KeyTerms - .Select(pair => pair.Value) - .Where(term => term.Flags.IsSet(TermFlags.IsOpenBrace)) - .Where(term => term.IsPairFor != null && term.IsPairFor is KeyTerm) - .Where(term => term.Text.Length == 1) - .Where(term => ((KeyTerm)term.IsPairFor).Text.Length == 1) - .Take(2); - if (braces.Any()) { - // first pair - var brace = braces.First(); - TextBox.LeftBracket = brace.Text.First(); - TextBox.RightBracket = ((KeyTerm)brace.IsPairFor).Text.First(); - // second pair - if (braces.Count() > 1) { - brace = braces.Last(); - TextBox.LeftBracket2 = brace.Text.First(); - TextBox.RightBracket2 = ((KeyTerm)brace.IsPairFor).Text.First(); - } - } - } - - #endregion - - #region TextBox event handlers - - void TextBox_MouseMove(object sender, MouseEventArgs e) { - //TODO: implement showing tip - } - - void TextBox_KeyDown(object sender, KeyEventArgs e) { - //TODO: implement showing intellisense hints or drop-downs - } - - void TextBox_TextChanged(object sender, TextChangedEventArgs e) { - //if we are here while colorizing, it means the "change" event is a result of our coloring action - if (_colorizing) return; - ViewAdapter.SetNewText(TextBox.Text); - } - - void TextBox_ScrollResize(object sender, EventArgs e) { - UpdateViewRange(); - } - - void TextBox_Disposed(object sender, EventArgs e) { - Dispose(); - } - - private void UpdateViewRange() { - //int minpos = TextBox.GetCharIndexFromPosition(new Point(0, 0)); - //int maxpos = TextBox.GetCharIndexFromPosition(new Point(TextBox.ClientSize.Width, TextBox.ClientSize.Height)); - ViewAdapter.SetViewRange(0, TextBox.Text.Length); - } - #endregion - - #region WinAPI - // some winapís required - [DllImport("user32", CharSet = CharSet.Auto)] - private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); - - [DllImport("user32.dll")] - private static extern bool PostMessageA(IntPtr hWnd, int nBar, int wParam, int lParam); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - private static extern int GetScrollPos(int hWnd, int nBar); - - [DllImport("user32.dll")] - private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); - - private const int WM_SETREDRAW = 0x000B; - private const int WM_USER = 0x400; - private const int EM_GETEVENTMASK = (WM_USER + 59); - private const int EM_SETEVENTMASK = (WM_USER + 69); - private const int SB_HORZ = 0x0; - private const int SB_VERT = 0x1; - private const int WM_HSCROLL = 0x114; - private const int WM_VSCROLL = 0x115; - private const int SB_THUMBPOSITION = 4; - const int WM_PAINT = 0x000F; - - private int HScrollPos { - get { - //sometimes explodes with null reference exception - return GetScrollPos((int)TextBox.Handle, SB_HORZ); - } - set { - SetScrollPos((IntPtr)TextBox.Handle, SB_HORZ, value, true); - PostMessageA((IntPtr)TextBox.Handle, WM_HSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0); - } - } - - private int VScrollPos { - get { - return GetScrollPos((int)TextBox.Handle, SB_VERT); - } - set { - SetScrollPos((IntPtr)TextBox.Handle, SB_VERT, value, true); - PostMessageA((IntPtr)TextBox.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0); - } - } - #endregion - - #region Colorizing tokens - public void LockTextBox() { - // Stop redrawing: - TextBox.BeginUpdate(); - SendMessage(TextBox.Handle, WM_SETREDRAW, 0, IntPtr.Zero); - // Stop sending of events: - _savedEventMask = SendMessage(TextBox.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero); - SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, IntPtr.Zero); - } - - public void UnlockTextBox() { - // turn on events - SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, _savedEventMask); - // turn on redrawing - SendMessage(TextBox.Handle, WM_SETREDRAW, 1, IntPtr.Zero); - TextBox.EndUpdate(); - } - - void Adapter_ColorizeTokens(object sender, ColorizeEventArgs args) { - if (_disposed) return; - _colorizing = true; - TextBox.BeginUpdate(); - try { - foreach (Token tkn in args.Tokens) { - var tokenRange = TextBox.GetRange(tkn.Location.Position, tkn.Location.Position + tkn.Length); - var tokenStyle = GetTokenStyle(tkn); - tokenRange.ClearStyle(StyleIndex.All); - tokenRange.SetStyle(tokenStyle); - } - } finally { - TextBox.EndUpdate(); - _colorizing = false; - } - } - - private Style GetTokenStyle(Token token) { - if (token.IsError()) return ErrorTokenStyle; - if (token.EditorInfo == null) return DefaultTokenStyle; - //Right now we scan source, not parse; initially all keywords are recognized as Identifiers; then they are "backpatched" - // by parser when it detects that it is in fact keyword from Grammar. So now this backpatching does not happen, - // so we have to detect keywords here - var styleIndex = token.EditorInfo.Color; - if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null && token.KeyTerm.Flags.IsSet(TermFlags.IsKeyword)) { - styleIndex = token.KeyTerm.EditorInfo.Color; - }//if - Style result; - if (TokenStyles.TryGetValue(styleIndex, out result)) return result; - return DefaultTokenStyle; - } - - #endregion - - #region IUIThreadInvoker Members - - public void InvokeOnUIThread(ColorizeMethod colorize) { - TextBox.BeginInvoke(new MethodInvoker(colorize)); - } - - #endregion - - }//class - -}//namespace diff --git a/Irony.WinForms/Highlighter/RichTextBoxHighlighter.cs b/Irony.WinForms/Highlighter/RichTextBoxHighlighter.cs deleted file mode 100644 index dfb465a..0000000 --- a/Irony.WinForms/Highlighter/RichTextBoxHighlighter.cs +++ /dev/null @@ -1,241 +0,0 @@ -#region License -/* ********************************************************************************** - * Copyright (c) Roman Ivantsov - * This source code is subject to terms and conditions of the MIT License - * for Irony. A copy of the license can be found in the License.txt file - * at the root of this distribution. - * By using this source code in any fashion, you are agreeing to be bound by the terms of the - * MIT License. - * You must not remove this notice from this software. - * **********************************************************************************/ -#endregion - -// Aknowledgments -// This module borrows code and ideas from TinyPG framework by Herre Kuijpers, -// specifically TextMarker.cs and TextHighlighter.cs classes. -// http://www.codeproject.com/KB/recipes/TinyPG.aspx -// -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Threading; -using System.Runtime.InteropServices; -using Irony.Parsing; -using System.Diagnostics; - -namespace Irony.WinForms.Highlighter { - - public class TokenColorTable : Dictionary { } - - public class RichTextBoxHighlighter : NativeWindow, IDisposable, IUIThreadInvoker { - public RichTextBox TextBox; - public readonly TokenColorTable TokenColors = new TokenColorTable(); - public readonly EditorAdapter Adapter; - public readonly EditorViewAdapter ViewAdapter; - - private IntPtr _savedEventMask = IntPtr.Zero; - bool _colorizing; - bool _disposed; - - #region constructor, initialization and disposing - public RichTextBoxHighlighter(RichTextBox textBox, LanguageData language) { - TextBox = textBox; - Adapter = new EditorAdapter(language); - ViewAdapter = new EditorViewAdapter(Adapter, this); - InitColorTable(); - Connect(); - UpdateViewRange(); - ViewAdapter.SetNewText(TextBox.Text); - } - private void Connect() { - TextBox.MouseMove += TextBox_MouseMove; - TextBox.TextChanged += TextBox_TextChanged; - TextBox.KeyDown += TextBox_KeyDown; - TextBox.VScroll += TextBox_ScrollResize; - TextBox.HScroll += TextBox_ScrollResize; - TextBox.SizeChanged += TextBox_ScrollResize; - TextBox.Disposed += TextBox_Disposed; - ViewAdapter.ColorizeTokens += Adapter_ColorizeTokens; - this.AssignHandle(TextBox.Handle); - } - - private void Disconnect() { - if (TextBox != null) { - TextBox.MouseMove -= TextBox_MouseMove; - TextBox.TextChanged -= TextBox_TextChanged; - TextBox.KeyDown -= TextBox_KeyDown; - TextBox.Disposed -= TextBox_Disposed; - TextBox.VScroll -= TextBox_ScrollResize; - TextBox.HScroll -= TextBox_ScrollResize; - TextBox.SizeChanged -= TextBox_ScrollResize; - } - TextBox = null; - } - - public void Dispose() { - Adapter.Stop(); - _disposed = true; - Disconnect(); - this.ReleaseHandle(); - GC.SuppressFinalize(this); - - } - private void InitColorTable() { - TokenColors[TokenColor.Comment] = Color.Green; - TokenColors[TokenColor.Identifier] = Color.Black; - TokenColors[TokenColor.Keyword] = Color.Blue; - TokenColors[TokenColor.Number] = Color.DarkRed; - TokenColors[TokenColor.String] = Color.DarkSlateGray; - TokenColors[TokenColor.Text] = Color.Black; - - } - #endregion - - #region TextBox event handlers - - void TextBox_MouseMove(object sender, MouseEventArgs e) { - //TODO: implement showing tip - } - - void TextBox_KeyDown(object sender, KeyEventArgs e) { - //TODO: implement showing intellisense hints or drop-downs - } - - void TextBox_TextChanged(object sender, EventArgs e) { - //if we are here while colorizing, it means the "change" event is a result of our coloring action - if (_colorizing) return; - ViewAdapter.SetNewText(TextBox.Text); - } - void TextBox_ScrollResize(object sender, EventArgs e) { - UpdateViewRange(); - } - - - void TextBox_Disposed(object sender, EventArgs e) { - Dispose(); - } - private void UpdateViewRange() { - int minpos = TextBox.GetCharIndexFromPosition(new Point(0, 0)); - int maxpos = TextBox.GetCharIndexFromPosition(new Point(TextBox.ClientSize.Width, TextBox.ClientSize.Height)); - ViewAdapter.SetViewRange(minpos, maxpos); - } - #endregion - - #region WinAPI - // some winapís required - [DllImport("user32", CharSet = CharSet.Auto)] - private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); - - [DllImport("user32.dll")] - private static extern bool PostMessageA(IntPtr hWnd, int nBar, int wParam, int lParam); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - private static extern int GetScrollPos(int hWnd, int nBar); - - [DllImport("user32.dll")] - private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); - - private const int WM_SETREDRAW = 0x000B; - private const int WM_USER = 0x400; - private const int EM_GETEVENTMASK = (WM_USER + 59); - private const int EM_SETEVENTMASK = (WM_USER + 69); - private const int SB_HORZ = 0x0; - private const int SB_VERT = 0x1; - private const int WM_HSCROLL = 0x114; - private const int WM_VSCROLL = 0x115; - private const int SB_THUMBPOSITION = 4; - const int WM_PAINT = 0x000F; - - private int HScrollPos { - get { - //sometimes explodes with null reference exception - return GetScrollPos((int)TextBox.Handle, SB_HORZ); - } - set { - SetScrollPos((IntPtr)TextBox.Handle, SB_HORZ, value, true); - PostMessageA((IntPtr)TextBox.Handle, WM_HSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0); - } - } - - private int VScrollPos { - get { - return GetScrollPos((int)TextBox.Handle, SB_VERT); - } - set { - SetScrollPos((IntPtr)TextBox.Handle, SB_VERT, value, true); - PostMessageA((IntPtr)TextBox.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0); - } - } - #endregion - - #region Colorizing tokens - public void LockTextBox() { - // Stop redrawing: - SendMessage(TextBox.Handle, WM_SETREDRAW, 0, IntPtr.Zero ); - // Stop sending of events: - _savedEventMask = SendMessage(TextBox.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero); - //SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, IntPtr.Zero); - } - - public void UnlockTextBox() { - // turn on events - SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, _savedEventMask); - // turn on redrawing - SendMessage(TextBox.Handle, WM_SETREDRAW, 1, IntPtr.Zero); - } - - void Adapter_ColorizeTokens(object sender, ColorizeEventArgs args) { - if (_disposed) return; - //Debug.WriteLine("Coloring " + args.Tokens.Count + " tokens."); - _colorizing = true; - - int hscroll = HScrollPos; - int vscroll = VScrollPos; - int selstart = TextBox.SelectionStart; - int selLength = TextBox.SelectionLength; - LockTextBox(); - try { - foreach (Token tkn in args.Tokens) { - Color color = GetTokenColor(tkn); - TextBox.Select(tkn.Location.Position, tkn.Length); - TextBox.SelectionColor = color; - } - } finally { - TextBox.Select(selstart, selLength); - HScrollPos = hscroll; - VScrollPos = vscroll; - UnlockTextBox(); - _colorizing = false; - } - TextBox.Invalidate(); - } - - private Color GetTokenColor(Token token) { - if (token.EditorInfo == null) return Color.Black; - //Right now we scan source, not parse; initially all keywords are recognized as Identifiers; then they are "backpatched" - // by parser when it detects that it is in fact keyword from Grammar. So now this backpatching does not happen, - // so we have to detect keywords here - var colorIndex = token.EditorInfo.Color; - if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null && token.KeyTerm.Flags.IsSet(TermFlags.IsKeyword)) { - colorIndex = token.KeyTerm.EditorInfo.Color; - }//if - Color result; - if (TokenColors.TryGetValue(colorIndex, out result)) return result; - return Color.Black; - } - #endregion - - - #region IUIThreadInvoker Members - - public void InvokeOnUIThread(ColorizeMethod colorize) { - TextBox.BeginInvoke(new MethodInvoker(colorize)); - } - - #endregion - }//class - -}//namespace diff --git a/Irony.WinForms/ITextBox.cs b/Irony.WinForms/ITextBox.cs deleted file mode 100644 index 71e451e..0000000 --- a/Irony.WinForms/ITextBox.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace Irony.WinForms -{ - public interface ITextBox { - string Text { get; set; } - int SelectionStart { get; set; } - int SelectionLength { get; set; } - void ScrollToCaret(); - bool Focus(); - } - - public class TextBoxAdapter : ITextBox { - public TextBoxAdapter(TextBoxBase textBox) { - TextBox = textBox; - } - private TextBoxBase TextBox; - public string Text { get { return TextBox.Text; } set { TextBox.Text = value; } } - public int SelectionStart { get { return TextBox.SelectionStart; } set { TextBox.SelectionStart = value; } } - public int SelectionLength { get { return TextBox.SelectionLength; } set { TextBox.SelectionLength = value; } } - public void ScrollToCaret() { - TextBox.ScrollToCaret(); - } - public bool Focus() { - return TextBox.Focus(); - } - } - - public static class TextBoxHelpers { - public static ITextBox AsITextBox(this TextBoxBase textBox) { - return new TextBoxAdapter(textBox); - } - } -} diff --git a/Irony.WinForms/IronyTextBox.Designer.cs b/Irony.WinForms/IronyTextBox.Designer.cs deleted file mode 100644 index 89f8574..0000000 --- a/Irony.WinForms/IronyTextBox.Designer.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace Irony.WinForms { - partial class IronyTextBox { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if (disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - this.SuspendLayout(); - // - // IronyTextBox - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.Name = "IronyTextBox"; - this.ResumeLayout(false); - - } - - #endregion - } -} diff --git a/Irony.WinForms/IronyTextBox.cs b/Irony.WinForms/IronyTextBox.cs deleted file mode 100644 index 57ba2eb..0000000 --- a/Irony.WinForms/IronyTextBox.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.ComponentModel; -using FastColoredTextBoxNS; -using Irony.Parsing; - -namespace Irony.WinForms { - using FctbHighlighter = Highlighter.FastColoredTextBoxHighlighter; - - /// - /// TextBox with syntax highlighting support based on Irony toolkit. - /// - [ToolboxItem(true)] - public partial class IronyTextBox : IronyTextBoxBase { - FctbHighlighter _highlighter; - LanguageData _languageData; - - /// - /// Initializes a new instance of the class. - /// - public IronyTextBox() { - InitializeComponent(); - } - - /// - /// Gets or sets for syntax highlighting. - /// - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public LanguageData Language { - get { return _languageData; } - set { - if (_languageData != value) { - _languageData = value; - HighlightingEnabled = _languageData != null; - } - } - } - - /// - /// Gets or sets a value indicating whether syntax highlighting is enabled. - /// - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool HighlightingEnabled { - get { return _highlighter != null; } - set { - if (HighlightingEnabled != value) { - if (value) - StartHighlighter(); - else - StopHighlighter(); - } - } - } - - private void StartHighlighter() { - if (_highlighter != null) - StopHighlighter(); - if (Language == null || !Language.CanParse()) return; - _highlighter = new FctbHighlighter(FastColoredTextBox, Language); - _highlighter.Adapter.Activate(); - } - - private void StopHighlighter() { - if (_highlighter == null) return; - _highlighter.Dispose(); - _highlighter = null; - ClearHighlighting(); - } - - private void ClearHighlighting() { - var selectedRange = FastColoredTextBox.Selection.Clone(); - FastColoredTextBox.ClearStyle(StyleIndex.All); //remove all old highlighting - FastColoredTextBox.Selection = selectedRange; - FastColoredTextBox.Invalidate(); - } - } -} diff --git a/Irony.WinForms/IronyTextBox.resx b/Irony.WinForms/IronyTextBox.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/Irony.WinForms/IronyTextBox.resx +++ /dev/null @@ -1,120 +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 - - \ No newline at end of file diff --git a/Irony.WinForms/IronyTextBoxBase.Designer.cs b/Irony.WinForms/IronyTextBoxBase.Designer.cs deleted file mode 100644 index c18bde6..0000000 --- a/Irony.WinForms/IronyTextBoxBase.Designer.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace Irony.WinForms { - partial class IronyTextBoxBase { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if (disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - this.SuspendLayout(); - // - // IronyTextBoxBase - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Name = "IronyTextBoxBase"; - this.Padding = new System.Windows.Forms.Padding(1); - this.Size = new System.Drawing.Size(263, 150); - this.ResumeLayout(false); - - } - - #endregion - - } -} diff --git a/Irony.WinForms/IronyTextBoxBase.cs b/Irony.WinForms/IronyTextBoxBase.cs deleted file mode 100644 index 4dd2290..0000000 --- a/Irony.WinForms/IronyTextBoxBase.cs +++ /dev/null @@ -1,162 +0,0 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Design; -using System.Windows.Forms; -using FastColoredTextBoxNS; -using SWFBorderStyle = System.Windows.Forms.BorderStyle; - -namespace Irony.WinForms { - /// - /// Common ancestor for Irony.WinForms text boxes. - /// Wraps around FastColoredTextBox, adds VisualStyle border. - /// Allows implicit conversion to the System.Windows.Forms.TextBox. - /// - [ToolboxItem(false)] - public partial class IronyTextBoxBase : UserControl, ITextBox { - BorderStyleEx _borderStyle; - - /// - /// Initializes a new instance of the class. - /// - public IronyTextBoxBase() { - InitializeComponent(); - InitializeFastColoredTextBox(); - BorderStyle = BorderStyleEx.VisualStyle; - } - - private void InitializeFastColoredTextBox() { - FastColoredTextBox = CreateFastColoredTextBox(); - FastColoredTextBox.Dock = DockStyle.Fill; - FastColoredTextBox.Name = "FastColoredTextBox"; - FastColoredTextBox.TextChanged += FastColoredTextBox_TextChanged; - FastColoredTextBox.WordWrap = false; - Controls.Add(FastColoredTextBox); - } - - /// Override this method to create custom descendant of FastColoredTextBox. - protected virtual FastColoredTextBox CreateFastColoredTextBox() { - var textBox = new FastColoredTextBox(); - textBox.AutoScrollMinSize = new System.Drawing.Size(25, 15); - return textBox; - } - - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public FastColoredTextBox FastColoredTextBox { get; private set; } - - /// - /// Gets or sets the text associated with this . - /// - [DefaultValue(""), Browsable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), Localizable(true)] - [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))] - public override string Text { - get { return FastColoredTextBox.Text; } - set { - if (Text != value) { - FastColoredTextBox.ClearUndo(); - FastColoredTextBox.ClearStylesBuffer(); - FastColoredTextBox.Text = value; - FastColoredTextBox.SelectionStart = 0; - FastColoredTextBox.SelectionLength = 0; - FastColoredTextBox.SetVisibleState(0, FastColoredTextBoxNS.VisibleState.Visible); - } - } - } - - private void FastColoredTextBox_TextChanged(object sender, TextChangedEventArgs args) { - OnTextChanged(args); - } - - /// - /// Gets or sets the border style of the control. - /// - [DefaultValue(BorderStyleEx.VisualStyle), Browsable(true)] - public new BorderStyleEx BorderStyle { - get { return _borderStyle; } - set { - if (_borderStyle != value) { - _borderStyle = value; - if (_borderStyle != BorderStyleEx.VisualStyle) { - base.BorderStyle = (SWFBorderStyle)value; - base.Padding = new Padding(0); - } else { - base.BorderStyle = SWFBorderStyle.None; - if (Application.RenderWithVisualStyles) - base.Padding = new Padding(1); - else - base.Padding = new Padding(2); - } - Invalidate(); - } - } - } - - /// - /// Hide the inherited Padding property. - /// - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new Padding Padding { - get { return new Padding(0); } - set { /* ignore */ } - } - - /// - /// Raises the event. - /// - /// The instance containing the event data. - protected override void OnPaint(PaintEventArgs args) { - base.OnPaint(args); - // paint custom control borders - if (BorderStyle == BorderStyleEx.VisualStyle) { - if (Application.RenderWithVisualStyles) - ControlPaint.DrawVisualStyleBorder(args.Graphics, new Rectangle(0, 0, Width - 1, Height - 1)); - else { - ControlPaint.DrawBorder3D(args.Graphics, new Rectangle(0, 0, Width, Height), Border3DStyle.SunkenOuter); - ControlPaint.DrawBorder3D(args.Graphics, new Rectangle(1, 1, Width - 2, Height - 2), Border3DStyle.SunkenInner); - } - } - } - - [DefaultValue(false)] - public bool ReadOnly { - get { return FastColoredTextBox.ReadOnly; } - set { FastColoredTextBox.ReadOnly = value; } - } - - /// - /// Selects a range of text in the text box. - /// - /// The starting position. - /// The length of the selection. - public void Select(int start, int length) { - FastColoredTextBox.SelectionStart = start; - FastColoredTextBox.SelectionLength = length; - FastColoredTextBox.DoCaretVisible(); - } - - /// - /// Gets or sets the starting point of the text selected in the text box. - /// - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public virtual int SelectionStart { - get { return FastColoredTextBox.SelectionStart; } - set { FastColoredTextBox.SelectionStart = value; } - } - - /// - /// Gets or sets the number of characters selected in the text box. - /// - [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public virtual int SelectionLength { - get { return FastColoredTextBox.SelectionLength; } - set { FastColoredTextBox.SelectionLength = value; } - } - - /// - /// Scrolls the contents of the control to the current caret position. - /// - public void ScrollToCaret() { - FastColoredTextBox.DoCaretVisible(); - } - } -} diff --git a/Irony.WinForms/IronyTextBoxBase.resx b/Irony.WinForms/IronyTextBoxBase.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/Irony.WinForms/IronyTextBoxBase.resx +++ /dev/null @@ -1,120 +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 - - \ No newline at end of file diff --git a/Irony.WinForms/Properties/AssemblyInfo.cs b/Irony.WinForms/Properties/AssemblyInfo.cs deleted file mode 100644 index b325e66b17fe87a0c09f3c3fe36cb0b040b8d0e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2988 zcmcJRT~AX%5QgX4#Q(7I1~pPaQ4z1SNW%qc6fwql(N8G!gS4k2KgmC-KJO08_LKv$ zM$`11J+nJA@4oY~`|Ib-rq;KS9a^vtcFtE}T^m}>-t+F+fM*+7-^Q$ZVYls;-J~;P zl~xbYt63ebp`G$AI}<$U`Hk;3qv_K2cB6IK7-O~Cnh-wZ7p#GgQS{ive=uqH(42s& zdAX;+xP^3vMB`C>PC+LgT4GK^xEf$LCe-QW7L0Z^Rl+0l9=;FJ}TfVevY-i{@ z#~GdM%j1}J@>@i^eLM<@*r_3}V^Nq6k+>(#Xna*8z^ryUi`rT}X5Ely2mige4`G$I z@Lc60qif=2ie{UY^3=sfi2IO*>v*cg{P==KnZGSGUM|S?v0OwB@7f(=qnM7sShG(N z-45T1)RftK_H_x%+j0MGwEJX9%3XPJ%N;DAVYg=4$6{<1ZRbaMld&}zH$kNgn%Ham zjt50}g3rm)NL3$-L!bE0qUCwC%kDc>oATw{wBKbdyaR)>Wfp7xU&lrGPC=%)s8WiE z@v1b~57>WXYqrjFp8sHu@EEq$m6qM#e&o1=w#V<}uUM+X&j9a=Sa-oft{`bUAFUeT)29@#WNE{TwxFj5AlYAs;x^gHzb%Dyr-?+kT& zYkRC~vtC_Vxu}j=#M%hV?1C)dTisE1yZpT433U@q@8iPSdxGNsXlR4y*K%7 zP73S2_)B}##)fpZ_ pAOIcDLSd|te1lw+qXU+3)Ce{C*Lt83$b+S(yHItBg=-*58k`LzH5 diff --git a/Irony.WinForms/packages.config b/Irony.WinForms/packages.config deleted file mode 100644 index e74915b..0000000 --- a/Irony.WinForms/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Irony.sln b/Irony.sln index cddca74..0879033 100644 --- a/Irony.sln +++ b/Irony.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2020 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{05F0AC0D-AD43-45B4-8A98-00C54CF5280D}" ProjectSection(SolutionItems) = preProject @@ -18,13 +18,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "020.Irony.Samples", "Irony. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "025.Irony.Samples.Console", "Irony.Samples.Console\025.Irony.Samples.Console.csproj", "{5A31B964-CDFA-4406-9316-32A0F04CE149}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "030.Irony.GrammarExplorer", "Irony.GrammarExplorer\030.Irony.GrammarExplorer.csproj", "{AE1C04A8-B03D-4144-98E9-BF66C50265E7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "030.Irony.GrammarExplorer", "Irony.GrammarExplorer\030.Irony.GrammarExplorer.csproj", "{AE1C04A8-B03D-4144-98E9-BF66C50265E7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "035.Irony.WinForms", "Irony.WinForms\035.Irony.WinForms.csproj", "{70D319F3-3C0C-4EB5-A271-58ED22FB3070}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "040.Irony.Tests.VsTest", "Irony.Tests\040.Irony.Tests.VsTest.csproj", "{0CFA8CEE-0110-49C1-93E5-CB7BE3A5716B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "040.Irony.Tests.VsTest", "Irony.Tests\040.Irony.Tests.VsTest.csproj", "{0CFA8CEE-0110-49C1-93E5-CB7BE3A5716B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "050.Irony.Tests.NUnit", "Irony.Tests\050.Irony.Tests.NUnit.csproj", "{1A98BEDA-DF53-49B7-A366-2ED7606036BD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "050.Irony.Tests.NUnit", "Irony.Tests\050.Irony.Tests.NUnit.csproj", "{1A98BEDA-DF53-49B7-A366-2ED7606036BD}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Languages", "Languages", "{0850FA53-413E-4AF9-B918-8FF524FFA5D7}" EndProject @@ -127,18 +125,6 @@ Global {AE1C04A8-B03D-4144-98E9-BF66C50265E7}.Silverlight Release|Any CPU.Build.0 = Release|Any CPU {AE1C04A8-B03D-4144-98E9-BF66C50265E7}.SpecSharp|Any CPU.ActiveCfg = Release|Any CPU {AE1C04A8-B03D-4144-98E9-BF66C50265E7}.SpecSharp|Any CPU.Build.0 = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.FxCop|Any CPU.ActiveCfg = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.FxCop|Any CPU.Build.0 = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Release|Any CPU.Build.0 = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Silverlight Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Silverlight Debug|Any CPU.Build.0 = Debug|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Silverlight Release|Any CPU.ActiveCfg = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.Silverlight Release|Any CPU.Build.0 = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.SpecSharp|Any CPU.ActiveCfg = Release|Any CPU - {70D319F3-3C0C-4EB5-A271-58ED22FB3070}.SpecSharp|Any CPU.Build.0 = Release|Any CPU {0CFA8CEE-0110-49C1-93E5-CB7BE3A5716B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0CFA8CEE-0110-49C1-93E5-CB7BE3A5716B}.Debug|Any CPU.Build.0 = Debug|Any CPU {0CFA8CEE-0110-49C1-93E5-CB7BE3A5716B}.FxCop|Any CPU.ActiveCfg = Release|Any CPU From cdfd2973c3ba32802608d8157fced810bad955e5 Mon Sep 17 00:00:00 2001 From: rivantsov Date: Mon, 8 Jan 2024 11:31:14 -0800 Subject: [PATCH 3/6] minor changes in nuget packaging, added common.proj file --- Common.proj | 23 + .../015.Irony.Interpreter.csproj | 16 +- Irony.Interpreter/015.Irony.Interpreter.xml | 82 ++ Irony.Tests/040.Irony.Tests.VsTest.csproj | 2 +- Irony.sln | 2 + Irony/010.Irony.csproj | 22 +- Irony/010.Irony.xml | 753 ++++++++++++++++++ Nuget/PackAll.bat | 11 - Nuget/PackageSpecs/Irony.Interpreter.nuspec | 24 - Nuget/PackageSpecs/Irony.nuspec | 23 - Nuget/PushAll.bat | 2 +- Nuget/packages/010.Irony.1.5.0.snupkg | Bin 0 -> 35347 bytes .../015.Irony.Interpreter.1.5.0.snupkg | Bin 0 -> 23357 bytes Nuget/packages/Irony.1.5.0.snupkg | Bin 0 -> 35324 bytes Packages.proj | 16 + 15 files changed, 890 insertions(+), 86 deletions(-) create mode 100644 Common.proj create mode 100644 Irony.Interpreter/015.Irony.Interpreter.xml create mode 100644 Irony/010.Irony.xml delete mode 100644 Nuget/PackAll.bat delete mode 100644 Nuget/PackageSpecs/Irony.Interpreter.nuspec delete mode 100644 Nuget/PackageSpecs/Irony.nuspec create mode 100644 Nuget/packages/010.Irony.1.5.0.snupkg create mode 100644 Nuget/packages/015.Irony.Interpreter.1.5.0.snupkg create mode 100644 Nuget/packages/Irony.1.5.0.snupkg create mode 100644 Packages.proj diff --git a/Common.proj b/Common.proj new file mode 100644 index 0000000..7d5ee83 --- /dev/null +++ b/Common.proj @@ -0,0 +1,23 @@ + + + 1.5.0 + 1.5.0.0 + 1.5.0.0 + false + + + $(MSBuildProjectName) + $(MSBuildProjectName) + 10.0 + 1701;1702;1591 + https://github.com/IronyProject/Irony + https://github.com/IronyProject/Irony + Irony Project + Roman Ivantsov + + False + False + Off + + + \ No newline at end of file diff --git a/Irony.Interpreter/015.Irony.Interpreter.csproj b/Irony.Interpreter/015.Irony.Interpreter.csproj index 30949f6..3ac9b40 100644 --- a/Irony.Interpreter/015.Irony.Interpreter.csproj +++ b/Irony.Interpreter/015.Irony.Interpreter.csproj @@ -1,15 +1,11 @@  + + - - netstandard2.0 - Irony.Interpreter - Irony.Interpreter - false - true - irony.snk - 1.2.0 - 1.2.0 - + + netstandard2.0 + Irony Interpreter + diff --git a/Irony.Interpreter/015.Irony.Interpreter.xml b/Irony.Interpreter/015.Irony.Interpreter.xml new file mode 100644 index 0000000..6f8a1af --- /dev/null +++ b/Irony.Interpreter/015.Irony.Interpreter.xml @@ -0,0 +1,82 @@ + + + + 015.Irony.Interpreter + + + + + Sets a flag indicating that the node is in tail position. The value is propagated from parent to children. + Should propagate this call to appropriate children. + + + + + Dependent scope is a scope produced by the node. For ex, FunctionDefNode defines a scope + + + + Base class for languages that use Irony Interpreter to execute scripts. + + + + Returns the type to which arguments should be converted to perform the operation + for a given operator and arguments types. + + Operator. + The type of the first argument. + The type of the second argument + A common type for operation. + + + + Returns the "up-type" to use in operation instead of the type that caused overflow. + + The base type for operation that caused overflow. + The type to use for operation. + + Can be overwritten in language implementation to implement different type-conversion policy. + + + + + The struct is used as a key for the dictionary of operator implementations. + Contains types of arguments for a method or operator implementation. + + + + + The OperatorImplementation class represents an implementation of an operator for specific argument types. + + + The OperatorImplementation is used for holding implementation for binary operators, unary operators, + and type converters (special case of unary operators) + it holds 4 method references for binary operators: + converters for both arguments, implementation method and converter for the result. + For unary operators (and type converters) the implementation is in Arg1Converter + operator (arg1 is used); the converter method is stored in Arg1Converter; the target type is in CommonType + + + + Represents a set of all of static scopes/modules in the application. + + + Describes all variables (locals and parameters) defined in a scope of a function or module. + ScopeInfo is metadata, it does not contain variable values. The Scope object (described by ScopeInfo) is a container for values. + + + + A wrapper around Scope exposing it as a string-object dictionary. Used to expose Globals dictionary from Main scope + + + + Describes a variable. + + + Represents a running instance of a script application. + + + Represents a running thread in script application. + + + diff --git a/Irony.Tests/040.Irony.Tests.VsTest.csproj b/Irony.Tests/040.Irony.Tests.VsTest.csproj index eb02774..9c6d6f9 100644 --- a/Irony.Tests/040.Irony.Tests.VsTest.csproj +++ b/Irony.Tests/040.Irony.Tests.VsTest.csproj @@ -1,7 +1,7 @@  - net8 + net8 Irony Irony.Tests.VsTest false diff --git a/Irony.sln b/Irony.sln index 0879033..73b1252 100644 --- a/Irony.sln +++ b/Irony.sln @@ -6,7 +6,9 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{05F0AC0D-AD43-45B4-8A98-00C54CF5280D}" ProjectSection(SolutionItems) = preProject appveyor.yml = appveyor.yml + Common.proj = Common.proj LICENSE = LICENSE + Packages.proj = Packages.proj ReadMe.md = ReadMe.md EndProjectSection EndProject diff --git a/Irony/010.Irony.csproj b/Irony/010.Irony.csproj index f67074c..fc40ee2 100644 --- a/Irony/010.Irony.csproj +++ b/Irony/010.Irony.csproj @@ -1,20 +1,10 @@ + + - - netstandard2.0 - Irony - Irony - false - true - irony.snk - 1.2.0 - 1.2.0 - - - peverify-compat - + + netstandard2.0 + Irony Parsing Framework + diff --git a/Irony/010.Irony.xml b/Irony/010.Irony.xml new file mode 100644 index 0000000..f63275a --- /dev/null +++ b/Irony/010.Irony.xml @@ -0,0 +1,753 @@ + + + + 010.Irony + + + + + Gets case sensitivity of the grammar. Read-only, true by default. + Can be set to false only through a parameter to grammar constructor. + + + + + The main root entry for the grammar. + + + + + Alternative roots for parsing code snippets. + + + + + Override this method to help scanner select a terminal to create token when there are more than one candidates + for an input char. context.CurrentTerminals contains candidate terminals; leave a single terminal in this list + as the one to use. + + + + Skips whitespace characters in the input stream. + Override this method if your language has non-standard whitespace characters. + Source stream. + + + Returns true if a character is whitespace or delimiter. Used in quick-scanning versions of some terminals. + The character to check. + True if a character is whitespace or delimiter; otherwise, false. + Does not have to be completely accurate, should recognize most common characters that are special chars by themselves + and may never be part of other multi-character tokens. + + + + Creates a terminal reporting group, so all terminals in the group will be reported as a single "alias" in syntex error messages like + "Syntax error, expected: [list of terms]" + + An alias for all terminals in the group. + Symbols to be included into the group. + + + + Creates a terminal reporting group, so all terminals in the group will be reported as a single "alias" in syntex error messages like + "Syntax error, expected: [list of terms]" + + An alias for all terminals in the group. + Terminals to be included into the group. + + + + Adds symbols to a group with no-report type, so symbols will not be shown in expected lists in syntax error messages. + + Symbols to exclude. + + + + Adds symbols to a group with no-report type, so symbols will not be shown in expected lists in syntax error messages. + + Symbols to exclude. + + + + Adds a group and an alias for all operator symbols used in the grammar. + + An alias for operator symbols. + + + Gives a chance to a custom code in hint to interfere in parser automaton construction. + The LanguageData instance. + The LRItem that "owns" the hint. + + The most common purpose of this method (it's overrides) is to resolve the conflicts + by adding specific actions into State.Actions dictionary. + The owner parameter represents the position in the grammar expression where the hint + is found. The parser state is available through owner.State property. + + + + Base class for more specific reduce actions. + + + Factory method for creating a proper type of reduce parser action. + A Production to reduce. + Reduce action. + + + Reduces non-terminal marked as Transient by MarkTransient method. + + + Reduces list created by MakePlusRule or MakeListRule methods. + + + Returns true if the node is punctuation or it is transient with empty child list. + True if parser can safely ignore this node. + + + A hint to use precedence. + + Not used directly in grammars; injected automatically by system in states having conflicts on operator symbols. + The purpose of the hint is make handling precedence similar to other conflict resolution methods - through hints + activated during parser construction. The hint code analyzes the conflict and resolves it by adding custom or general action + for a conflicting input. + + + + Source line number, 0-based. + + + Source column number, 0-based. + + + + Interface for Terminals to access the source stream and produce tokens. + + + + + Returns the source text + + + + + Gets or sets the start location (position, row, column) of the new token + + + + + Gets or sets the current position in the source file. When reading the value, returns Location.Position value. + When a new value is assigned, the Location is modified accordingly. + + + + + Gets or sets the current preview position in the source file. Must be greater or equal to Location.Position + + + + + Gets a char at preview position + + + + + Gets the char at position next after the PrevewPosition + + + + + Creates a new token based on current preview position. + + A terminal associated with the token. + New token. + + + + Creates a new token based on current preview position and sets its Value field. + + A terminal associated with the token. + The value associated with the token. + New token. + + + Tries to match the symbol with the text at current preview position. + A symbol to match + True if there is a match; otherwise, false. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Nn. + + + + + Looks up a localized string similar to Yy. + + + + + Looks up a localized string similar to Ambiguous grammar, unresolvable reduce-reduce conflicts. State {0}, lookaheads [{1}]. + + + + + Looks up a localized string similar to Ambiguous grammar, unresolvable shift-reduce conflicts. State {0}, lookaheads [{1}]. + + + + + Looks up a localized string similar to Argument list not found in the stack. Expected: ValueList, found: {0}.. + + + + + Looks up a localized string similar to Invalid operation, attempt to assign to a constant or literal value.. + + + + + Looks up a localized string similar to Invalid length of char literal - should be a single character.. + + + + + Looks up a localized string similar to Mal-formed string literal - cannot find termination symbol.. + + + + + Looks up a localized string similar to Invalid unicode escape ({0}), expected {1} hex digits.. + + + + + Looks up a localized string similar to Invalid \x escape, at least one digit expected.. + + + + + Looks up a localized string similar to Cannot convert value from type {0} to type {1}, type converter not defined.. + + + + + Looks up a localized string similar to Cannot convert literal {0} to type {1}.. + + + + + Looks up a localized string similar to Fatal error in parser: attempt to move back in the source.. + + + + + Looks up a localized string similar to {0} State {1} on inputs: {2}. + + + + + Looks up a localized string similar to Fatal error:. + + + + + Looks up a localized string similar to Construct '{0}' is not supported (yet) by language implementation.. + + + + + Looks up a localized string similar to Could not find a closing quote for quoted value.. + + + + + Looks up a localized string similar to Duplicate switch '{0}' for regular expression.. + + + + + Looks up a localized string similar to Duplicate start symbol {0} in string literal [{1}].. + + + + + Looks up a localized string similar to Failed to create AST node for non-terminal [{0}], error: {1}. + + + + + Looks up a localized string similar to Failed to find the ending tag '{0}' for a text literal. . + + + + + Looks up a localized string similar to ImpliedSymbolTerminal cannot be used in grammar with DisableScannerParserLink flag set. + + + + + Looks up a localized string similar to Interpreter error, DataStack.Pop() operation failed - stack is empty.. + + + + + Looks up a localized string similar to Interpreter is busy.. + + + + + Looks up a localized string similar to Invalid arguments for IncDecNode AST node: either first or second argument should be '--' or '++'.. + + + + + Looks up a localized string similar to Invalid AstMode value in call to Evaluate method. Node: {0}, mode: {1}.. + + + + + Looks up a localized string similar to Invalid character: '{0}'.. + + + + + Looks up a localized string similar to Invalid embedded expression. . + + + + + Looks up a localized string similar to Invalid dedent level, no previous matching indent found.. + + + + + Looks up a localized string similar to Invalid escape sequence: \{0}.. + + + + + Looks up a localized string similar to Invalid escape sequence.. + + + + + Looks up a localized string similar to Invalid escape symbol, expected 'u' or 'U' only.. + + + + + Looks up a localized string similar to Invalid number.. + + + + + Looks up a localized string similar to Invalid switch '{0}' for regular expression. + + + + + Looks up a localized string similar to Error in string literal [{0}]: No start/end symbols specified.. + + + + + Looks up a localized string similar to The last term of production containing SyntaxError must be a terminal. NonTerminal: {0}. + + + + + Looks up a localized string similar to List non-terminals cannot be marked transient; list: ({0}). + + + + + Looks up a localized string similar to Expected new line symbol.. + + + + + Looks up a localized string similar to No closing pair for opening symbol {0}. + + + + + Looks up a localized string similar to AstNodeType or AstNodeCreator is not set on non-terminals: {0}. Either set Term.AstConfig.NodeType, or provide default values in AstContext.. + + + + + Looks up a localized string similar to No end symbol for regex literal.. + + + + + Looks up a localized string similar to No ending tag '{0}' found in embedded expression.. + + + + + Looks up a localized string similar to UnExprNode: no implementation for unary operator '{0}'.. + + + + + Looks up a localized string similar to Number cannot be followed by a letter.. + + + + + Looks up a localized string similar to ParserDataBuilder error: inadequate state {0}, reduce item '{1}' has no lookaheads.. + + + + + Looks up a localized string similar to Non-terminal {0} has uninitialized Rule property.. + + + + + Looks up a localized string similar to Attempt to evaluate NULL AST node. The AST node for term '{0}' was not created during parsing.. + + + + + Looks up a localized string similar to Operator '{0}' is not defined for types {1}.. + + + + + Looks up a localized string similar to Operator '{0}' is not defined for types {1} and {2}.. + + + + + Looks up a localized string similar to Operator '{0} not imlemented.. + + + + + Looks up a localized string similar to {0}: {1}. + + + + + Looks up a localized string similar to CodeOutlineFilter: line continuation symbol '{0}' should be added to Grammar.NonGrammarTerminals list.. + + + + + Looks up a localized string similar to Syntax error, unexpected input.. + + + + + Looks up a localized string similar to Parsed tree is null, cannot evaluate.. + + + + + Looks up a localized string similar to Parse tree root is null, cannot evaluate.. + + + + + Looks up a localized string similar to Root AST node is null, cannot evaluate.. + + + + + Looks up a localized string similar to Root AST node does not implement IInterpretedAstNode interface, cannot evaluate.. + + + + + Looks up a localized string similar to ({0}) term passed as 'root' paramater to parserr is not Root or snippet root of the grammar. Add it to SnippetRoots set in grammar constructor.. + + + + + Looks up a localized string similar to Root property of the grammar is not set.. + + + + + Looks up a localized string similar to Reduce-reduce conflict. State {0}, lookaheads: {1}. Selected reduce on first production in conflict set.. + + + + + Looks up a localized string similar to Rule for NonTerminal {0} contains null as an operand in position {1} in one of productions.. + + + + + Looks up a localized string similar to Shift-reduce conflict. State {0}, lookaheads [{1}]. Selected shift as preferred action.. + + + + + Looks up a localized string similar to Syntax error, expected: {0}. + + + + + Looks up a localized string similar to Syntax error.. + + + + + Looks up a localized string similar to Expression root non-terminal in template settings (AstNodeConfig property) in templated string literal [{0}] is not added to Roots set. Add it to SnippetRoots in grammar constructor.. + + + + + Looks up a localized string similar to Expression root is not specified in template settings (AstNodeConfig property) in templated string literal [{0}]. . + + + + + Looks up a localized string similar to Error in string literal [{0}]: IsTemplate flag is set, but TemplateSettings is not provided in AstNodeConfig property.. + + + + + Looks up a localized string similar to A terminal {0} has empty prefix.. + + + + + Looks up a localized string similar to Transient non-terminal must have zero or one non-punctuation child nodes; non-terminals: {0}.. + + + + + Looks up a localized string similar to Unclosed comment block. + + + + + Looks up a localized string similar to Unexpected end of file.. + + + + + Looks up a localized string similar to Unexpected indentation.. + + + + + Looks up a localized string similar to Unmatched closing brace '{0}'.. + + + + + Looks up a localized string similar to Variable {0} is not a callable function.. + + + + + Looks up a localized string similar to Variable {0} not defined.. + + + + + Looks up a localized string similar to Invalid number of arguments. Expected {0}, found {1}.. + + + + + Looks up a localized string similar to ({0}:{1}). + + + + + Looks up a localized string similar to Accept. + + + + + Looks up a localized string similar to Operator, shift to {0}/reduce on {1}.. + + + + + Looks up a localized string similar to Reduce on {0}. + + + + + Looks up a localized string similar to Shift to {0}. + + + + + Looks up a localized string similar to (Unknown action type). + + + + + Looks up a localized string similar to (EOF). + + + + + Looks up a localized string similar to [end-of-statement]. + + + + + Looks up a localized string similar to (INITIAL STATE). + + + + + Looks up a localized string similar to (Key symbol). + + + + + Looks up a localized string similar to (Keyword). + + + + + Looks up a localized string similar to [line break]. + + + + + Looks up a localized string similar to Location:. + + + + + Looks up a localized string similar to None. + + + + + Looks up a localized string similar to .... + + + + + Looks up a localized string similar to (unnamed). + + + + + Looks up a localized string similar to Abort script(y/n)?. + + + + + Looks up a localized string similar to {0} Console.\r\nPress Ctrl-C to exit the program.\r\n. + + + + + Looks up a localized string similar to Console. + + + + + Looks up a localized string similar to Custom action did not execute: parser state or input did not change.. + + + + + Looks up a localized string similar to Exit console (y/n)?. + + + + + Looks up a localized string similar to NLALR transform: Add WrapTail() in '.' position to [{0}].. + + + + + Looks up a localized string similar to Press any key to end the program.. + + + + + Looks up a localized string similar to "[{0}], at {1}. + + + + + Looks up a localized string similar to Parsing conflict resolved in code.. + + + + + Looks up a localized string similar to Executing custom action. + + + + + Looks up a localized string similar to Operator - resolved to {0}. + + + + + Looks up a localized string similar to Popped state from stack, pushing {0}. + + + + + Looks up a localized string similar to RECOVERING: {0}. + + + + + Looks up a localized string similar to FAILED TO RECOVER. + + + + + Looks up a localized string similar to RECOVERING: Found state with shift on error : {0}. + + + + + Looks up a localized string similar to RECOVERING: popping stack, looking for state with error shift. + + + + + Looks up a localized string similar to RECOVERING: Reached end of error production, reducing.. + + + + + Looks up a localized string similar to RECOVERING: Shifting Error term, {0}. + + + + + Looks up a localized string similar to RECOVERING: shifting until the end of error production.. + + + + + Looks up a localized string similar to RECOVERED. + + + + diff --git a/Nuget/PackAll.bat b/Nuget/PackAll.bat deleted file mode 100644 index 9589f3d..0000000 --- a/Nuget/PackAll.bat +++ /dev/null @@ -1,11 +0,0 @@ -SET pver=1.2.0 -Echo Version: "%pver%" -del /q Nupkg\*.* -:: Need to delete some MSBuild-generated temp files (with .cs extension) -del /q /s ..\TemporaryGeneratedFile_*.cs -nuget.exe pack PackageSpecs\Irony.nuspec -Symbols -version %pver% -outputdirectory Nupkg -nuget.exe pack PackageSpecs\Irony.Interpreter.nuspec -Symbols -version %pver% -outputdirectory Nupkg - -if "%1"=="/nopause" goto end -pause -:end \ No newline at end of file diff --git a/Nuget/PackageSpecs/Irony.Interpreter.nuspec b/Nuget/PackageSpecs/Irony.Interpreter.nuspec deleted file mode 100644 index 438da50..0000000 --- a/Nuget/PackageSpecs/Irony.Interpreter.nuspec +++ /dev/null @@ -1,24 +0,0 @@ - - - - Irony.Interpreter - $version$ - IronyProject - IronyProject - https://github.com/IronyProject - MIT - false - Irony Parser Kit, interpreter library - Official Release - Copyright IronyProject, 2019 - Parser Parsing Compiler Interpreter - - - - - - - - - - \ No newline at end of file diff --git a/Nuget/PackageSpecs/Irony.nuspec b/Nuget/PackageSpecs/Irony.nuspec deleted file mode 100644 index fadc0f3..0000000 --- a/Nuget/PackageSpecs/Irony.nuspec +++ /dev/null @@ -1,23 +0,0 @@ - - - - Irony - $version$ - IronyProject - IronyProject - https://github.com/IronyProject - MIT - false - Irony Parser Kit, core library - Official Release - Copyright IronyProject, 2019 - Parser Parsing Compiler - - - - - - - - - diff --git a/Nuget/PushAll.bat b/Nuget/PushAll.bat index 44fcc30..d380afb 100644 --- a/Nuget/PushAll.bat +++ b/Nuget/PushAll.bat @@ -1,4 +1,4 @@ -SET pver=1.2.0 +SET pver=1.5.0 Echo Version: "%pver%" dir Nupkg\*.nupkg @echo off diff --git a/Nuget/packages/010.Irony.1.5.0.snupkg b/Nuget/packages/010.Irony.1.5.0.snupkg new file mode 100644 index 0000000000000000000000000000000000000000..ce91b78673038c4f4a32a7dafb901dc0b21b4f18 GIT binary patch literal 35347 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 literal 0 HcmV?d00001 diff --git a/Packages.proj b/Packages.proj new file mode 100644 index 0000000..aa8f04e --- /dev/null +++ b/Packages.proj @@ -0,0 +1,16 @@ + + + True + 1.5.0 + + true + irony.snk + True + MIT + ..\Nuget\packages + snupkg + True + True + $(MSBuildProjectName).xml + + \ No newline at end of file From 0fe26c9d408619046caf039c224029b28a1b52a3 Mon Sep 17 00:00:00 2001 From: rivantsov Date: Mon, 8 Jan 2024 11:41:35 -0800 Subject: [PATCH 4/6] minor edits to packaging --- .gitignore | 2 +- Common.proj | 3 +-- Irony.Interpreter/015.Irony.Interpreter.csproj | 2 ++ Irony.Interpreter/015.Irony.Interpreter.xml | 2 +- Irony/010.Irony.csproj | 5 ++++- Irony/010.Irony.xml | 2 +- Nuget/packages/010.Irony.1.5.0.snupkg | Bin 35347 -> 0 bytes .../packages/015.Irony.Interpreter.1.5.0.snupkg | Bin 23357 -> 0 bytes Nuget/packages/Irony.1.5.0.snupkg | Bin 35324 -> 0 bytes Packages.proj | 2 +- 10 files changed, 11 insertions(+), 7 deletions(-) delete mode 100644 Nuget/packages/010.Irony.1.5.0.snupkg delete mode 100644 Nuget/packages/015.Irony.Interpreter.1.5.0.snupkg delete mode 100644 Nuget/packages/Irony.1.5.0.snupkg diff --git a/.gitignore b/.gitignore index bb7e4eb..d18ab91 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,5 @@ /**/obj /.vs /.vscode -/packages +/nuget/packages /TestResults diff --git a/Common.proj b/Common.proj index 7d5ee83..0bf6506 100644 --- a/Common.proj +++ b/Common.proj @@ -3,8 +3,7 @@ 1.5.0 1.5.0.0 1.5.0.0 - false - + false $(MSBuildProjectName) $(MSBuildProjectName) diff --git a/Irony.Interpreter/015.Irony.Interpreter.csproj b/Irony.Interpreter/015.Irony.Interpreter.csproj index 3ac9b40..f967666 100644 --- a/Irony.Interpreter/015.Irony.Interpreter.csproj +++ b/Irony.Interpreter/015.Irony.Interpreter.csproj @@ -4,6 +4,8 @@ netstandard2.0 + Irony.Interpreter + Irony.Interpreter Irony Interpreter diff --git a/Irony.Interpreter/015.Irony.Interpreter.xml b/Irony.Interpreter/015.Irony.Interpreter.xml index 6f8a1af..375ff20 100644 --- a/Irony.Interpreter/015.Irony.Interpreter.xml +++ b/Irony.Interpreter/015.Irony.Interpreter.xml @@ -1,7 +1,7 @@ - 015.Irony.Interpreter + Irony.Interpreter diff --git a/Irony/010.Irony.csproj b/Irony/010.Irony.csproj index fc40ee2..40d10d9 100644 --- a/Irony/010.Irony.csproj +++ b/Irony/010.Irony.csproj @@ -4,7 +4,10 @@ netstandard2.0 - Irony Parsing Framework + Irony + Irony + + Irony Parsing Framework diff --git a/Irony/010.Irony.xml b/Irony/010.Irony.xml index f63275a..3e05bd6 100644 --- a/Irony/010.Irony.xml +++ b/Irony/010.Irony.xml @@ -1,7 +1,7 @@ - 010.Irony + Irony diff --git a/Nuget/packages/010.Irony.1.5.0.snupkg b/Nuget/packages/010.Irony.1.5.0.snupkg deleted file mode 100644 index ce91b78673038c4f4a32a7dafb901dc0b21b4f18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35347 zcmbrlRaD#U6D^EWytqq?wYU=;T4-@-DOxQ%=p9Ax1?(xkbM4kl&iPSvt7$ z^8D{THF4CgpYNr@ZTNHOq;#6$a+1*&MwWPj;}Fr%#Sn2UgQBv{bC*GJf+p^Ch?Ql8 znTi;1xA$MHTkrQ2C?6^Bc4P*qLvuv2)oa5+VXrraP?t!i>ci+pp;mdq_)3_Vkxp8Q zraHLJKu(p4UOwa1b;h<@J>Ix6o?jdT%ZK)ID4c+M*$Wau;J7AkOhA>`9dV~CY|a#= z#3EOWS9kVm=9TStFXHa~7n_BwkK+mTiT+ibghh6TH9zU?X-qw`mfXHnd=8JdN_w7i z9XF#0) z3{UEH`pfq+;#9FCbVtH9hrm)xY#%eBwIJ1ip~rs0N{w{6fqhbv7MmeTx2OI5n-=IV z>{0OY5Pp1rdDznGM}vKV{!VDTIfasy)iiYma>Jc_cIKpV`n$zBEdAiqjqG%5EVtC_ zhp&)A@xC`eej0K^4{WX!+C_nEIz8=+=v2`^>QkW{d4(mz;FtVp%G{swD!p+wmsXWXLu5o*$hr5sg&pjB?^%qmMBDT`k94X*19-bz91BgZuMFuJ zt%&&Td9}^88q?M$U~2^Y=$d^zSVuC1uY6X6lz=A_R*3Du{VV^#u{r}vR{YKBr>rbdg2ntFuDk=&S(p?U==Dbdp z9_}7yP8Mcv76Lqcy#JpET`bJOx!8JI!?(A)5pmPEh&7{Zl9Ln`xgC|RVr@wE0->muRA1)brI#zb={>kle*=a${@7}LvPUMOSx|gn#;72=C zvb+RsbYB!KY%uwxMfwT)hGZnaa-kz|i&9hW5iEIm?P0RUkL|}~O@f<5xTuLE+ zQ;Ft#=()sTa^S{-~*cT<;I^!z+5y5cEwbGB?KL%HCI`q1yLrgS6eI`-dbKc1CU zi$+7}W2;Aq4JsTa^(XD9U;R>jp@g!C9u(Tszj4B59$5DNk1+PEEbSzYChH^$1)EC+ zZpCZkH;KeLINR(J?qMD*=6UO~O_oB0`yo46;h>e?V$2+EP&U>Hnu~6TAL&Zuh7JkF zXRQQc?$)*qC-hssR+FBlgki;ERi@RRT>KM%mx=!kb7Mm*cX-YGV*>*EigF_F5+CYE zZRikoQ6jK~=fu~Vx$!Twoq8o;qYLYnv(?E8?OZsSn4ooWqXyfHvUQ^O33~k zomdz-_5|$~(E5)8t=#4n^QVn(*j@sym%UO%Cq^!u2DtK0Z<*^iZZNzgTYvRP;hreC zR99ncS+Ft_Z+t`Z;%XJ_2|zo+cF8utD^6_!<70SXv<3zH;TT@JB{+)>QLdb9sH1r? zv|9IcqSmPSfB@-{E-vjM5?Cwy8zgc!lt)e|mP2`H& zU#X+8T4-BIdvXa*TwQoWzm5|gtP(C^uJCNAV|Wp^ruTLdIr;d3zSO5Ds&8=g<`SN~ zcHss25gD>$gZ{cEBsy(W^yH$Rm?P)jr#yL6NU_iY^Z!InaV|*b~e1n8P4#kVH725lRQKPB!L6QR`)ymnkisi($xJ|4Q z7kUE93x385Kqa2gGe>Q})JD_BZVRRf?T~$D!hAzQMs$FxjPWz%s-U;v-6TMh*oMaj z$A-WL&qj2QZ;xz`WRGI+)gI=a)E@270B2eXx>!gB$WS&`&X_4E0gVhN8v7cBHRQ9L z@1&{bD;v797ebVc7>!tsn2od^R35k>;T}o0lipFndb19V0Ap37(4*yI8lkSAI_=_rc*4UrILBL>n$LJ!6(vMZV^VwT2~fA$&` z&5i6%1umLinz)L1G}s(yW0>5i)u@iB$5>Kt)uAB3okW6hfgjT^6jM#6H#8{(S=i!e zzGw{&JF+yOLfQQSu1U>Fib@9p{Y)eo?$cGTN5b01wT16rYq6)O6 zP(!&f*{*`-0-OKsHH0#PU5%QHC57IJIct9?n-y%(?8zb}t6yMo}t!yN{a1E7ScAt zHWGVOd*XYBymV37_VrCND0nD9Ngydk-wD2uEs`abn~@v!^G#g$dq%`L zKIe(jN^JnmMY9I?~<4X?`54pvp1(rsZ zCfPM4Cn@$g_P&P5xGG(-uSKDgsOuMSX*8@70eZ!Aj9d@o98F_KF$dGsuR^M@7ek%HQ0!xXS3USjVUVD418yDr5!Up3s%B6R=Y745nqi8)9fH z5xkC-MJ=$Hl>Lt}#FO?3>ZI}!NUk+ZhYYD|&R#Jky)eM>MNyva^OkvR1?c)BiOWo?h0qS3XjcA^Tiuw%6Fe-v*jjaO=RaDUS81dVeEBD zr%0k_(!5jBPM{s4BttzQ{GXV;mov-!Ax}huSCLJwyo6NWWZAE>4WJ(uh#o!x774H_ z${3a-x)j>%9~@?%f}H|Urcybx0ZUB)4yq>unOw9io~%7q6SIlj4ps}ZEmQx7VgsfJ zx<`-;S-BWXw9tQq@C}88lmuIW(n98fMTq!s7T>sKT$)7GL79?h73gHg+qUkP{>HKq zxEBq-oOFX6_N+VE2xY$bP4s|UA&K8_uDEK(UwqC7T%!NJTSquR^p}DRE1KF$T^#fo zDIp)_=4G9H{%r$>IM#E>f=_~9EC(7DKhTh8CNwMfFa8-Sdo3tX`B&`xG34{^wuMh(P8FQh7`>sX3{_0`z@OBu zDI+^cqI=;CVeoRsmRqsS_OY$GxUaE!pzY4^O`=AqE5_&4Xi7D#l&yy6!31H1U>y0P zh?>W(Cgq80Db7F`RX)A`OMmIleX%&w>~GEd*?=5T&Jb5tno^;!iVL6nbV!=hT*PqF z)9Yfx99bRM&HQjA6k9{W=vfUv^`){Lv22cz)Vwyc#?ei65ysI?cOk%;PjTVK8D%y6 z+ULn~^m_9*Ne%nv1BnxpnJ$iKiVHK2Xj)x%ShnJVQJ)&?ifSJN$xTXKdRVr~!q+}- zmLp~}6CAiw>(8(!Ryw9l9TF$*O%W0&&P`byY$d%{o2EFCihwVDW+a5^E@5HIN`TLO zpGe};T)<(=Dgd26dKNnNO>Z2p6c=_JuQV4*9IsRtQ5>&y7b2Y76c=8c+cXzOoZHm8 z&wV%~>M1TsVcI0>X)e)Wa3wwN&1Vwz)VdFSwj}E5bvk|2Bn(Vuxnb8NB8mV~9a-ji zOiNerAxt)oGuUmTDv>rg0%eqHImAuu8#=)b)eJ49p7o6eNggi_?*`R60l9Ktq>6VK zOJ`!zMQl>BsDZgm1ni-pzOIm#no$TGO1?aVJLw(gC`$@x#!?G2v^0EDPdc-R<43%u z1KyXqfp@r*&bX9(e~EoV8%r#fNr&Np)j+hwIq(;mL_bA#GZ|&=K>H^7 zp&6}un+lHLz^VO5#R#a~q&jrwhBnC^0w9lbD&FW&z314Z3x};%LK_L_LZAcy@&KoA zl?3{GwI&0()_LOU5y!}hAC40T)<^l{P6J5Rc%y=3Ndh(dA^|4~XHPZ?duFd;F(E~D zMUA`D5)fDCA7KbKfG&v}T`QW`(+3gjV^6e&#P+phI#C!EY#uEat!8LYW~`ob4he$!B6pUy0@vIyPR>H zA;#|D6V)i_SnqDVr%B(NVowU%Y8XPF~xT~JVvl^=P z&9WMX0;`C`pnxtrckoVSzpHQp9`uf+ga?X8Es6qZy_2nHsN=+A9BF;USJNa#Es92Q znkw&v4|eC4b}lD6f;6R9hSADBQMbJvQezqf?>P7IH|Mu&7G<~w&87g4CdL4Pco!S3 z0z+Enr-Sv}fH6=uKjbMw6p9XjbVWb4VAf&dDA0{bWz z(g%ZZF3_EZQ(IV}cUxomKrRiGza}W6L5*8fP-oh>kDw*A7J<1^CbzE}78^bVvKz8a z&mRfVAe{mylw>`)uxn6=801Om1=MGOJvg-O0Uw>vtO`iidjO4em8c2q2QlmWW4pW# zE}{koT+saiU{Q5fx?wk=J55~YE5@aQVZpAv8zTS)s?q36IWm`zBxO&1Zke~bYaw3q9F&6*eNt7AOJe7}@%BXJQ01y0COcXO+}JX?$y8t$3EsFzOE3SP&#b3i#k4Tjf0 zp8xdqG8Kjqf#K+|75+F^jx&!r6W&Ipf#0s7Rf;LVIhaI?=;#tieXf2=}0Xw&vlJ9i%DC&;mkX zbf!`;O0Xb^sNsf|WuxmS3!;|}`23z_vn}cDN79*D(wU@^cNa^Ctc~U$b~$FGIxr$n zM+DxYlHsEvkW8qj5sCnIbW@G;OY>4e>ob|$2>DK~?d#6udY+NY_<>StuZAs2FYl2k&c@x1TP3hp*RJ-Wx4L9$3P#9DP;E8W1pTi9ixg-4J zx(al_Cv_MVbiyO9K4^S{3JOzIy5ovNSW41S-Olw>#iP^=9|Vb{-c7oTxb!Vk?m3sFHP&AlVC%}XoodH^%KMG=Zxje^><9|w}gI%U-_mH+-I|@Tx z>3{~UjC$yjQQ^A+dAKVHgCBX&ocbOn3^r`Jq)#U1dY>1E@~I~3g(IeM zU!UtlTP*B%$k3=>P#V86I@q4zgtr;J*7Cem!1&|9uI>WV3&q)D)3#t8gtVpK8}HCr z4=Q0MwK&pup5^5Vz8rIktCu+;r=b-5*A@@Ur33moqaI_geNdi*qtn5#1+YOa?uVPN z;%-9;-5+W9UYrp^0J^Ucghx?3mL190&i+wP*k?QxjJKR0#RAd9A^d?FK{-Hj*s8qg zY2FJl)D9>>2KV(T`kMTi5z(LC9=QIUFa$f;vP$L^BSy3NwL9(|UrbN}u!Dh4qZAbH zvLlA>pTa-xY7L6#zd_4|QOQ(^5y7BCfNrA=s@>5TlCA;%HH7g$s^u$O=t5A98~ABg z9J-Jv3V>WA*pM2!67oD4x&9BSy!1%R)^@1i>r(#{a+NI^b8;>G{Gm`b0^6s9W$`**+G1k zX*hh{u|rk6o4aBBr}f|C82`A;DKgMDkzwD>$ofbGZI!tj;5RS; zyM0{2@TY%B+y}CO9eETzywtqrk2G$5jSwK+MvIWOD`E%lQ55K(w}rjKFR;|OO|{Ds z#3MaUgh~f{de0f>D(x_KP5?Ot!5bcApHaZ}GHWu8sLw-Nu)r>ED9(R+Mf&2A2oJj6 zgNce5y~Bku_WY}oChL)Z**^nlw!Egs=W^NnAQBOYGO7m{Pd97$HweCz10WOa2N&?= zdkLjS#kg~?&`)$Q{w(0b6DITyTqaeA1EiCw?md7!gDiT8G_A`RnPI-`;V@ZET_hO}uwbJ@3;Dh-;NxY|jt`LY z`50j1>DV9?4wLTr2G$aTH1}VZ@z!-}PIn^(g(kU&f6n@K9eTP633TC^BU6K)(hYoT z93VH`L#_vq4pQEvx(#{?=Hx#abXCyFw=-p@kj?~Fapu&*(RKeFuxt0xAa_*@eGnBm zNuLpeNH)>=3D%&2C+7EW>3hakuJIF^ShU-ot6&*{>#xkvp$lx8$Z8>N(Di*>>?tKS znl9`>CL8!TB}WKtwPwUHG8VExw0}3G zxdAamhzK+j)kO6Nuj<_)gTP_y)Z#KYyY7q&a?<0?8v>v3-zYIe$U0$xfsDIwG*co9 z20RXo8=<*;rUpvBwHTPM7+otS-YEu6@3}9|Zs-RzIN$h7c_#v}84bl6mbU;WqubY` z?hx;%qG0s4dov-Zw~TNEaD_J>8SN{84JOE)w6`R*RaztX*~Y^Eqi7I9^C0p{w3g2XizlJylxoSfO z@Cc>?fL!pTo(U*D?jU(ty^#@!=yL_DZhM>3(e~?mf85{?SuoK>_1c0kx>?JuFixIY z2DiJ+w?qJggOZqXr~7<0o`8(*xtQI1-Ae5)+M@SSR;QA;9m z^q72yVoiT6(gc66zbba5#mXpmCBo^r;GbWP_Ne=}0-U7y=V`O|K@ z!VudBc=M-`NFyQ4ar~W7I+%A*UrQv@g{G-t?T5NENrxc0m0B6haqDx&;5=7Juz0qR~Qn~94lTo}Y3PU7f zQVQOjY9JFoe1fi04ANvs_<$xE9S*yUsHHR6K{h8qNg8il;$66N4^Z!sPHwxt$3`M4 zJRZGEW#CjI0g5hTv2#!9{rXpa5C59|m8B#O)$IpBNjJKN)%p1{!S>r8?_*?t@MU9N z5B`M0V}4HLVi=lA8~#;uYHqPDg{SL^_({c7PXa$>fa*!M6-2U|kfTe#NglP7rV1 z;YVXk@F~JI$Qi36>u2PBW_DPzuwhX1#vR!Zi8r@sUX^NLG<809TdHovmTk95DJSnRv?% zJgRlf&A?egZ&4K@c)Zk^F+`a96diJ^v3IGm@x&#We~#MxY!>hZMS7^OT~K=90sF+7 z4n*|pOh|59CU|h2Bg&tQ>Q*G4nh_n+P;2f_N7emg_@d&4fAr7WY|TDE`XO~b7Nkis z^_<$&(EcMI{FlRHo1irGAE{Uw$(c`DSEOcNYx+}fA1?~f=&ApXgfmDBk`6l8=ZifF=2;=Y6<$6R_Ipv4R==)t;KE9+nr9XcjpuQtk zIeh`mSR;ePgIr}|14=l~NGZCdp%D1JU5`fF^)GQ~DHUSypNRxy0<^!rj5doB_$uW{ z)DD?C(d-jv^DQQYg*jlHF^~?H*UbuTUB5|pL4huGe|1&O_i_i% zGull5$Z#FU-J&{0C8yhUKN?zMrqYA-IlF*2bE&dXU~3Xt^>6uVj23p^2aj2>9@ZvK zN#})U3&Is46g}~+E-I#SFQG&Y{xenp8lCp-#vir>wlm_SE=XG zZY+)?xv(K^D7Wsp!S?Rgvzb7;ASq-FSH(wlWYh;fDC=388~tfTD5tpuk&f2fzk}uNBn=t8z#HLH&%2+NVhypz^HZ`Hx2Itcd2eK0NrZA zkB4TL}xiWGv+wY@CJYV5ISZ;&fK7TW@ zj_6)6;q7;3$C?H>wbo6oHpw1#HzHbt1A_!rH)+-G!R6;8gI;L@3v%hweO?UO6^ zxZZ&zV+xib)~{X55}7KK?&hOmq;9!+6F;Ay^)?5nO}u->!GZ3VNu0j6;kq8#X}|Ee zC#a`%dM*RXtLeFq$$ZHWbldne*0|LKq*_(6?re9uczqZ^e^9D55qI~U-Df8&N!()k z>R4%^@K+_QyKqg!XFG`yW0;bPWKi}$?{y3qjMP@kAW+cPD}J3FNC#Hh^8pzpW;UI7 zOi{d7(|?oi=Iq;9V}(csI%mz}8&tR$kT+RS{a!_TPo!_^^F?Q&AD*=lAk9#1dIZaP z=@`qbP}R@G6W)?$ll|_pTIH~sCpNU2DdAGciq0|pQzOyBv>*=~ghu4Ysf5{Ju}-DU z=s$z4`^!e7GaGfn8RIO4nJNXXp`Y_M?`Qr9_h!u7;QgMqr&Cb&{f;fA6*E_{uvJvn zEqGiRV5_qF^I9gXBuAr`6+Kc)U(vne-C7KGdr1zeSpwAiC&}N{y4$F*g-7>Ay^K!Lc_ zOh_J1i7=^?BONi?a0#oV8u0gwn@D5NW$KNbiFnv{y0{_>f;>cK7~hpbJMQ_U>3{X0;d?{G~n2(+rv2=ZygS9n|W-R zwOv(k8jmfC$sLQ>1c0jk&S5{+t`4jwC*h4X>RCV^8a<%TYfHdM9TwLxJ118>Ks-$^ z&2VbHQG{YLNwVnrTYB>lCn=1Yy3ICXzxD@AJhKLqo11S8+6W1p&U6t}v!;-mNz7}L z|2W`}3ey!7o#VdJHi)oo^vtm(YEv7Hcg9oQ7uB*F2$|cpwo6qT{S{u)kxBJ2Usj8) zQ4)<_OW=2HaBi9Qa8|f`ir8@r1LQ zGiC!p_q`?2=(t{cwx93S_DAeL-00EV@;_c*>=l0%~Op}#l(9DR=f%QZP zI(cN4V)~-aE5;U^5c6G_2mt_ucoe7t`~GA>tG1X`!lhZxrSjOapIEz$xWMD8wP#}m zmey+PTmMm#sSmU%lQ~|VYuxoHe%dA*(_O*&+ayq<_3z3?N$XdkkAAXYrYjfTUtZ?O zF=gLV*%Jfb%+!GuYdb>;Fn@0KVD5XV#lf&xt6FU8V~gz<4r_$oF+r@CcBP#wF7wpg4=Dzbh2|_X*S{}vE-=4j7cjTW)(as4cG9M1#p5eUnJg8kG zJWbi3@g9jUIvdWxyB3Y_ZU6ls#2D~#;o~=m=xVHuUUJ^upbF_he$_x}?O2(NR=8Kc zvANjnT}lb&_4;wVGyUUtAC7JQp8Qxn5ZB+$=8l;`fJMb@yKS?e%x5hFRh0gF$E zP+T~;IktKQrAB;6jM#t~y8o&#r@&}sJt&%F_iV{E`dR9gTgLS>lIy# z7<~ye@@miAPPrNIc8@=i0dKQ)czEDXii6AN9@kvtka+<24``%|;ZBN;ld{f#A1F#J zGPMd>|1_vaZnh5XzmnppQXNJs{crjHtFk%~*2^5+O~AY@mcy%B9fNmIQ9EkG4yEsW z4d2B_?td}^DqD%OP6J;_@ql0+rI9XNZf>BlQ?gQdfV!IiXzVWrJ0=}e?7tCN3)xBh z>ftVQI~H4}${zr4H}v*AsN(L`qj5_tGLoZ;-VS>zhrvwQ6%@1@mfs@Jzkkjr_4`X- zQ3wNLpKEt=6e$C_%SsG=`b!1>)!@0VfCrn#DCO8L>Q9!|dy;!o$t-q_zS@#gR%O$$ zsI>y2vXE3P)=zdqf7Pbm&P=C>AI!5Sc+B>^aeO_j9)e!{;Y!@2sT}n5WrU?r=_jH5 zK}ue+@)!22LhM8L2k%YQzcIwyu!Bq;=A4c4C zN6j8#%KRS9sdU+RYCCc|0x@cia1kX|tCykD9pBy%T_1jVP>luo3fpz=4NsOgfQieq z6(=}6eYHR4Dl0VX6LW~LX%+PzmZX2Y%EY06C1|dwR_atJLg4V%xB5F)sQ2g6*9R#c zE@aA5-q-Znw$wB>+=a6&gTP0%r2lK8Iw1tzBesy2m4~X#6|weHu=Z){_p`= z*@q+g#!rP`_TNSXHri&0%4MhYci2tme=EbVH0Ln16tz53C{+4-z>nM-C59^s5S??}ahi?}*qJU(t{kh-jskMe_yg zmMV`}7?DB zOf!~ZBdgc^B0%zr^C)1_(3fgOIn*FKF7)e_>@BWpv9yg+k!}?|7DujnWejwyfz)?A zUZ2blTOj|lMJ;q9-HmJaGX(ltm}ql?UmPMWNj76VW736Mpw&cs9 z>ZGYlM3MlWrI_UOJp3bU*B_rqwS8UHr-7_J{$+gQ3clhkdr^S}O9=}aKPml8UgQd2 zFPM?@ecICxDk(CIx700}s>glaKGKX8P#{WW9e;h!5ejiwMVY{oSYwi-C+jn7pU=^N3#h{41?5xYe!*Q-)*qG( z!PNbStv1=>D^-VFZ}MZA#_v}h2J-bXy|b1F@Nk=JfapL-k*-zwq}u!j@nwOvHuWCa z?F(PR+V3C2jX8g#4_+?egVFUZXiS-+0{3X%@(~}{Y7BItG@0}5fjwV-jK|G*7CMke zuO!%4Dua;p%*Mn_z^_@K2h2?xC@AJlJ)>zJl?p@C8LE^+0*MAc!xD`P)&Nn1R5sQa zA4_Lx5+2^BY>9c;isH`NoRf`0Y;dHCTNx&6)gy6Ca^(;6BQ|&Hsl(Hv%9u^%%sE-v zu$!`ZtjH7NSc`!PKG;2UH9GaC2XPk zy!7PEBns?#rK^2ADjBSUiIR`>QnANs>^ey$b1*V`Of8g8y#}&U3nt}}>NQ9$usA4> zOig}pT?;ND8q9+5F#FmJ!mg-6?!3q0O7$MkFEzfCgQT0hi!1%`zZAIY50#YjQ)}g%{I$h?y^^7f^9MBp2XCNvC?Nj`D54JkMXfk0=WA za>1t&b}Bgjo@t*e&F*32{&y>>f7{!w;E80h(9Q_5G^bk{>0~7O4OrF>W%R>8QK)pX z#MXGxbZJ;`Kl*drimnhgxtYIxnY)u=U-T7F5{CL;*P0%TV4S${9XH|g9*XFnO zMA@~d#^ULLbKNTe1(n0S9KGCTnJ=+xlJ82@CeDS5;*<*3Own;i!XC8tS4giZq%gH4 zN)Oz8c8{;$IsBpdnGfIv;G zTP;v8@Jpa*+r{)V<=1w{RTsCr@aBMsHf{Pv4xhd?^nhAR$M$Y}OGqKR`lper6jjUU z1DVg6yfTINFB{+ufe?)Jqfwl0jp$=n)17C`Ca-)(|58s_PTv$dNA&w6nQ3p9+K%~e zlSvgfTIlgrlbEWy430UO^<9YI!@PCc4wVyXw+@Y5lj%Lun(2*ge68?29YDT0s8Z75 zVv4{Oln5)t%5wgsCwfr$i6NfQCLnOFWeCo5J@eGbF&G1nLKszr$X$Rl?{$5T8CQOB z)SpgoS}(7Mp*ass zzfM&sqBxdpX*`I&hmPjI@b{jNt6iCftZxg`Fka`mUcs{AwG}>hlmRas1S;>-(%2=c z7~S0~;JvQWGmgp!MJcvFY9C7ulUlu+FFBoPC*i^Si;i%{R#COD?E@`7bMs~*@wZ$H z_M=ALwqH9tc3#A=%?DB~F>uZs*`!=S-yTMdYG;-H>a=9W%BFY!l=I7U-kvcf4_`t` zPtm2=rJT&^&C09%HlK>7l3$lyuc*0Wk6Yj78*z%iw~e(sz0Im285$53HC*hyjI z>c@NGR=BgYWeGG%fwyIh0@o|YuE}i&-1*-925Z^GAme40^Ozg2rD#V~hutVYOs5f% zWxVV2>!4fAa~NUabvnJ?T(bM{u*(CUd+xA;9=$WIE#!5qO49WK?tSo@f9~|(F}=RtIkj7Y=z6&< z>k0atMMlY`In&U>v3b&eI-U-*W5l`LeD%0GEa;ZO{JMI+F6|5v$S-a0zTUfUU5}aH zbw@j9CL6hG{d48bdW5b0v+CoQWDUT5AEIyamvfc78X}JFY$DQ)&^RVv`>=y;GxE>z zf+u@6E-`@CM!2Gf#WF%p`}a2U@8Nv^M~j;&PR`Q(>mv|lc4wLE!{P5+jXV$gOxN3y zV#)^QbPgInYo??8zc?}7)iQYF5!f47LT3< zrzcY`K)&B9B z9FF&uf?=Dv3i~>=`ubg>WePC^{{71|ei1{yIufT^QcPuXsgqshfy`QIc^$%{^T_8v zbPD_RoFmQ{>5T5s<%W@R+!8=lVhzQK!$>gw?E%g2W7A7-rCYS?`hu8E#i@*Epr+yeAW9VZUD4y5{z`f7Oql< zYvgbcJN0>rAyVf|+!&v}APO(DdC2ik`J5*r_HKM==X9kU)AbN*?W12m=o%P6l~x+k zIEq+~TQ*w! z5oE3X?p_b}zIZxKVux9sf#_7ct)u_X*QvE2)y($x0^PB@{(#kIRrv44s((8R$9S+FX3IP5Ek>(G`YUT`BoP94`C<~PQu&PCfRjT(iF9(}h+J1f=c|4|X$#@PLg@RZJ3yV7=TQF4Z- zWFZzgAxBj1%7KzcYwJNo2KiL0K$Tge^lmGK7O^GtjdKB#$BlP6v8U0x``Pf}?pG{ut>9@5;ox{jg^EkNyO((SOsco*>(R>+~&2xk52%1mNs*Z+q%T zAfva@bbJl!e@no7qzpcE6Er=bg3q~<=7>v;d+#ddOASU78I35L*ZG_MYN1!p=@hCv zJ1g*J9Q(VwghH~q_em$#?pTOu?kj$VJ#BunlctqQIwa8udYtU#bqx4?*?4mB$I7WbG)P;bR!Epu|{o%#6AWh42FQ>sRKcy!5qz3X=Q z3{wgLxE{bOmz7ij1SSK=B|or*d#sK z{pn3<%$jXCSrb|0$&>ot8yWXA)_r?CE?z5g^y0=}2zq{7;5G4KZ7e)`Sb< zFPz;3HcsF0?tIlC^MCI87+_w;E zKeJnmtS?K|HRc;B%mSYt#M$%TQXqeNUrO?KyNXZw8V|V=6W}QlkoND#riWm-Xr`!J zWOuxe7q%sbf8{EF+&d!Fjv0MlLQ%GDpLVVPXt$N<)U7{T_w7p^l*lrDtFoix@X+{L zsC!hjNyEXVY&xy%qmB~}b=&#}!xIWb8Dc0vhj5GQQ^~!2(0$`}XnY~h+!`76R#%M; zH2e|y*Fs~lxGX=w?L%YE5$Ayhxyw}4=l&$E5BKbZNz2aF^V>a@d#Ii>G}^oi8O@T2 zU+^;K>y=~arU|uYi-yDRYIV{vndu^{tR@@!GbKtJO&g?Nb=z|o{WlNCB9!~vA*7oyjj|Ge`=N!X9 zXsl&v!`Hx>fLb_Y8J)R>=dtCSE*&RdWECgHBuD=xAD7_MIpjjrp_+N{8K{13z_v)(2-wV;9sgrxBJ6(}I+`yom8_0pNnzTMzv5=| zd>b)Q%PYOw>}Trq@B6oj-&KY*R<9qsO#Iq?*G@|WIR?I;CX6)mCYY2ZCN-2EpP|yy zR{x$33dy~PXEAC_*yL>)tW}S3{VFAeFGDA>3oM)Zx8GlwPJ9SQw2rTRb2>{$K4%*t zqZ((@dgah`WBr@!P}9q7ebkdq+SQGir_CAc4jc_^vNl+Jd)nz6 z$hI}{YE`F&(f1bin>Kap%iC9r9!4COG$n7gV}Ds*oBJR7T=}?`^=?NaG1SSb?wa=Q z7@lfZ$F7yezxY+8l#+>1ydToy?QY!PzAKD8{9C`ziT!s${I%26VVc>}lItoY;w0{- znG*5!UZ9$2bosQ_kKf(e3?an14ANm#SD170#A|F#bsO?=e(wI2s`AJ|HA+{Z8s@`a zn)38T?s-Z2VknEgZv?7P`T8QKBXZ&e*F10F-}HUa*QG|S4sP{7)F?eGetTP0ekUuQ zVk>deHq%Nn-uQcSv8rAqxr}J;J9^}Y`>a}JkV|L6YY@3BYy{eP8at!p=@9LLw;Wo} zy0{7#o1_MYogQ8gvR%@+DZ`N3cEU7p=5Z^Db+GzZG>#NE*Fl z{O!^iL`MWoIB0Gv42+Sykoub7ifKH%Jvn7_%y@)zXD+e+fh`qU`T(AiPH)A&!D z=jxuHYs<#iA$(Qzgva++#pK+{+;E}bp@u{KP7Vwr{&^r*Udp!LV6ODY=@p!LhB=#n?yAo1n_eZ6kasJ+=;~9?dW{NAGyLnDj$oIP~g;R#A=}N8XHfYq$=WXmb)=o$N zfYm|R0a47sdd>BtV$Ci5U`H!Lgx1k_E@(0szfv8m=|ik#-PYgRpJ$D+sHo~i)t znsMr+f9^A@@TOl!9--1>71a{;h+Wt2geB*9Sj+OZT7}xaQY)V>BZ7uy260Mf$>)d= zzH8OXkr4svolbMEy*(1ZWh0!%DhleRz2s^@M;(TL+RWh)r9$l8vZKNcOM0I&=I~RN zR|9>a;rj2#YSJk@JE`L}m9}O1?8)`l>OVipoz|=AQoA&%eLhH%T+J5tjK|rhnpmh7 zY!op3RLS+iRaD3AJRoSedgm%{2CjZ88c<+JLEr6jl+!+3F{rBO-^7_zD9##RUJD7`DmGu-pZ`sm}vUVO_%!_ zb`u#-UvIR7-6h-|Xw$pt+wP~fwZq^4o0VB;Jul2cRagz=I+t4CpZ>1C6#2VAl)ahI z%@OWzqF5WPlCwg?`HU|^`%lZg@xJ4?*HdSi8 z4L|4L;bl5Q{Q4LA*|PD*mV++XX?L_(>GM~%0X)}t;FsL;xSQ|FUcSb_aSYRW7reoF z_kug@Ur74K+g4nHFyD|E&5vcQ06c9B_8&=_pIpc|UfhIKn=tMz8Zss3%maxW^;>Fdq78_jnR_nos#gDZ-%kR#&LQ*Oz3-04Ba(S(Mc450z zrtakQyv$Y4AI1J;Cs+MxKZ{C3*z4BQd2Rr@Iy1Tqomnla*9eJk$*=ur-k|#~sm1yi z#yUmCz`u%OtFbRp3~SsZ0i-0^@QSQTlJ5~xc&~9O{|^8!K+wPT0<%dnq})V&vE$pE zy@P9#s!mTL!8z&5GI9uqmqXtLrl|)h+3RZBFA2WtOxEhsNML%7 zA|sRN@N0rJRjD%jdH8y`H!ChhahOLlIGdzO#!ogn#sw-u+~Pu_LIUGM+^~0d42%g5 zj0@)do_(6}=+UQHpZ0Nm!s0>#JBGxS4)OS(A)fy;#Or^CH2>U1wp_gEcNvq7B&BR5H-Aw<|^ccVN0&jV(o?A|Pxy)kU=&zcWj z4EMU9rcc!BH0lHv?F~l5@2O{(^S2zVi~gJd(#8Uvh7Rf+0^BF+!Nv(wPvl~ zu036{0?M|b&wJ=jF;JhAZoKG&ERBUPhu@f6e_z|8`T>_K&sI+;JB?p@m(hHgYu{=c z?FtmXoi=aN&9l;wvdufvkGRrd2;*j;bPE3-cz(>ca$$IW%_sF$bz5&QPJuqimPCG5 zKKyd`PaRV5W zUNw5mUnlzpMdxjFt8l)+E`T>EowQ%`Uhl(;Rt9gockt^9*Y*lyOtms4U8^^!6KRLW zuj~xc>awV~u$i5~CumE@h~L-e_{}ZDG+338nZnGDFtd<6&t2Z$6+<^xKD%^vyUbc; zn88L%#g=rsQ!1UnD7)zu{M=_oP5rw@--AAJy~{`d)*sj@=_Q8E19pTwt0-?bsot6O z_j}zrRE8ma3M)QNEp7XK&4^|9(+eXO^>_GOWzMXrW!U0=xr+{OB4`5m79WSEB%z9@ z{BKVV(1b3$&_2d)*Qa-7C8X7Aq-C$Zc-5HCUlSu|cAY(V(C07dWtm~F;`0?|e2f`a zJvSnx+1QIwoB!1{HJ`tH?f)=_O`60o2 zY-Hk-zk*jT4tW2^vwi)Isly(jBt_%Y(CX%N#mm(T6{8LZ2~T=BrAQ+GGB%ARIc-<% z#qTHWBDOXd?@-O__rHyH;!^D%CoZ}Yqwra~C;HV}8#D9W_S^+?Di3EyVH#}$&U@lx zH-%E8!lgl)!Co^hShSv^&G>d_B$TnO3?HJ^a*# zzNcP{nowdFtxD7Ca-!*HdYHXlVrjF>|E$u#hT?a-!}@%ezdn>$#;P-lW1nTQr}Z2s zti8T4ctes~*wwvCp(J*v^fYBU6f8;1kUgC(Z9Oip-Ac>bZQ9LT>RI*i{W&|CHEfUv zNMimozk2SbxXWRMbt;WIn-$iYk6H4{U0S*YOT!yR)|wK%c4OGs`l2TE@C*`1hLo`SnMaJKYue{cQ0_15Olw2dF&M~ zc8oGjg*We-Om4<7+L;A^sBkJ|Vf*=8?#$ZZKQe^3QyK6hR_x)rG-VmKJ(k~3`?=7q zZBZB3K7D>pi|1@(OD0}p>|K9rUYl=t-)`(4i#fa6N8aOOO9#V6W;10$)9SNFsoL#0 zHNc}|JzG6z6Q>%GsnQ#y7L}ilJ0ROWGiI0Rz0oc)Q5QIicol4m)rK5qafw-UKmR#w zlX*tF#s8@LEUsfZo43#=rmBjwxXcU!b54$}ST#;D*ZM`H3&_;XBHn8hRp4=eZr@CDJRP| z6>Y9Cn=^qI&Tsj?J$z~Tmy`Bxu2aEi12@|`Ty;x#xz)n`54)G&4jXH@e{j^d$rdbj z`vkm~=J(9TKL1MA?T9togW~6&yq3xg;#A3{uihBnChozoSATX2*%ABrx5At| zp})reWpTP{Y}i6Y580k^VOy6!9)IJH(P_V${?d!CG1I^Q9ltHk>|504rce7lv|lx# z*wpwyD~`6A#A<8zb2BIIeXZEAn$)`Z*#A`-R-!MOPF+&-71m0H$GEuANx$W1B@V7T z=@)Zxr^c+VGpneh(Z?bc%|mx-@BJ7*cad>MG43uD?0H1IN|&X^L^`YWnM#d9l1hWC z=I0HyeZ#h|+2Xv%r?OI#iWvC@MqWtBhW3FT=all`DKCOe)c^LdmPG!gL2epHe>;ns zamSy8t=Hc5{hl1$MPe5Yx4R_^hS6wTudr{nRXztz(aZPjYqe**#E5?Wr_Ct7ywb*r zno1j&-FzQ3R=d59kDtwl|HGJ_|8@Sl#nS8epu>?1=h7p0&aNe&VA1HMBt6L>Fa3LGLPCpn>KD(*|F2Us=pZNaxx6s6rD1oUyggACPfQp`~8wi{K(bo z6BVwC6;-{TJ~gzh^Pj0G^v0F;9y9;5^PY=i#{U~VH=uo`WYds<|1=LtPt+!rtcAuj z;`JSJFJ0^sT6pQr%R<#E?X(6# zV=k{LaPn{YOFL4JN_+q>F+Kia#E;%rUIfnWGv?fhf#rV`o6_+sE;q2SNyd=<1N~$h zv#99(qq+tU89uH)v%-5{X>A)b`kwsWah7diaKYqLBbF~JN-xvomwC=;{qNcj0ZSHY zB4^(7x}DN>Z8P3FPL-0WQR;r(R2q#lXJ0K!9q}S`bX<>Rj@hRt8jbtG2A3=8BV&su zZC++}EFot4*gu9Y>Xz95RZ+pC4`HN*or9RbI zx@XL&^P}C)V;b*{9MNq{+N}o12mB8s$?o?lvp%@QRXOF<*S0IWZ`Y0ftKNcNt*K9v zXV0+~{kC@B7q%(#K|r$0_1gc#Dpsr2NG#o(POdTY)~LvZ&(bz@UXv90t0hc4I*C!_ zD6@Af8uyDH@%gyb(>6nP8;$S>9?DV=J&he~+wDV9zq!|qUJ(8&{95?yYRrPZU+$Qh zQM{oy=5Vrm>cw$WCPvIDdhM_*aG3En{nwuRU~|76K5mM@ttodWj9Auct1+TFJxM#z zSc*3+vbJl})9c(KBIgfCa(q(p=Xn;nWFmdTmhahx(Th;_wc2rQ_8sxetn-eNz+J- zjN8_ZR}O{`Y0^G&a@e~0=g-acE^TBiVewTN&DM9$OwAvg8eFj8sNL~x$D8wJu}VWf zN%V-nzYcA2cvt%k``24dFZI#`gr@iI$i;wU3##L+Ydf8<};*Ma`e<^B$6L{9|=JD?L1O`WjL zqSJ>u;r*x+Ie>C}zPn@`;ic`K;fK5rv+qw;oAw_V;L z>c-@qVtkppVR?5LKcQ|!-W%qA7SqWW#B}qm#d!IS)Q!%sF52hU6U&qDE~cOFL*1bK zw# zKhN^J!Q4Mt`Y%}dKd|`U#q$N`)Qv5$6Z0>qBIZ+2Tg<1RkyxGrFR{K00@(Qwu^kFx znA=56x1cX$HA`Q|;tyuw!^LtGOknBG5bL{O0d?aGR~p-kk$a$>x~iembOHN^Tatk2>#W$}E){0akEcss`NEM8AB zpF$N&FP+63$T&~Dp29I=c?+jfw@cw%7QU3Fw@$2=!tE^I{bKzW9%t?aR?eH^^%g!9 z>%Z_Nb3d|teu(jgTZr{K++I9C+*$0u!|RCU7~a?c{}_gp>*T@2$7R@ZG3WT^+ zv!H*0#)8zBk@8}uE;3?OY=wW_qe){ZR4ptNlmh<%p<`1EOJXB4rGMk5t|_r0b!Bi6 z%yV!eacBwA1>%bSa{g`>_}4zrU!g5M-w6G-fgX6i4*e6q3JW~t6ly^;z*BA!^ps-^ zwQ$2iG-wZgJ5~s47Edq4t+R!@3}&w$R<^{Nc$z|RBu;Lo0$AG1NI6-W6|o{!;G$$| z85-lC)m2nAD@S}Fl(fWy0uO$8XlP2zp&B5YYFHr<-B`D{-Wh9ihYYF)|0qeIGo(}3 z8f+?{Ob86vT5nZ@s8c(XChglDY&&7n^)P9B zuAXZq(1>+a7VS)+p8Em0V%eaZRKRtlJXEYT{d+W(WP?qyRFn;TI^v6SYQ)Bg4V!7jA;cHaIsw9J|vcZ;^IXy%F&`wR+ zUCo})VBS9oqc(5TSZYeu8dXf+xRN5kR5dYswy?%M11?%LkiySCR?){gIEH{S8s z)}-ugT$Q-iu9Pbkmt9W9u1aF3lGv$~Q!b|}-|y>wAT?g^AFg775AW#L{q=YJzM~sA zn;}CI(~$*#`XQ=)xuJa$^7U_m{7&Bh`Y@e9AFz{6c(9;}|1UL(Jbon4(j`5?bXl0; ze;tOZ)kS99*wIcBSy4^=Ly`6KpnIXEkl~Ian{Oo0mG=(W-n_RGc<(kklv+9#q>(l< zJ7TNQ)bhn34e9B9K7);u4sJGTg0TLyXCTM@QsjIF$X+rGfaWr*B)yYTC4{SZk8Srl z_dWh1|I58;FvPZIt%L1*!XMQQ&`MFrd$SVFzzO_oU*4zaE}E|h&g4jw&3m8GF?#t& z1LA;eWGRaH-A;Qy6byla)Z2K~>xTwW>&; zMWisd{)uLd+hA{%wf$d<7(+zzhP~la8T2}v{8kyT^gogiNLW65zdi8&7|-u*&kK=o z_mCKz2vWmKVd$eIeH_8p>36#fvgPRV+7LmJSdsO7~1hc)6x|dBC?+6O`?M0o+1(3)S{Pvn@kB= zE0PWhu3^mcFX<4T7^W+sSK9fBkhrUeF*o^bn&@QS>+rMNq}&7UDxN*KX`Y4Z*KgL} z)<8X_XWOmOF^}!wmEpAtu}AqkG}v5#XXutT+q^xZ_Nvqu?R}!e4MwmVEO%zM-u*sw z|9pvF+vt6!$hW!TW&_=^Y3_K^LwBf^QiPFebHT+W5(RZH#=V4c-gO`?*H^cfDWI6C`nQ@2f)J`B%!>!^qdgq@v5haz`l*{|?jpqOVY=rpcy#GVfcm*BlQ{pnIlBD(y@ zubbX&VG*9&O=$!1+xY);yLo*tj`Jnbv3Fp7E;?jdI>E|qnAjAAH3!8uC2L{OBTX8+ zmVnw$z!*!Bc2olyXqCbH+a0==#zR9=6+p=*SeGUdS4_m&-6QFZNyuSOUZuh_3*{$ic|K-Z=$INZL z2@-_ePm*fZlCYHF90<);gxIDW=FQm%>8NW(==R-T3T_j{rr04)8H1)zg2g((<0(j; zYcz9u_rFA3{{NSnfeX4bw)?+ylsZmetPfUmK$^`74JrZ-F8X*kTF1NAzE-Ll#w-q(cf(3_kM zFmq(_1m5}dNgX4(1wyF-QQ&>=1{;CKUynChm=!~NdE3RH|42AhW;=l6?(}4wjxS?W zD{b^#JDzL7Be{K}YAr_aFIM4y$(~4-#OBg~P5^*wm}QtgYRFY=tPf6+b%>oj&Tyi6 z531C`0pE~1{R(avi~A=^XT48`uz6zrOy_y;r*P&}{h{p2Eu5IGpJ>1IQJh%7iEt@| zvDWISAvsT4=!{fJKStm#@%*GA6T@JHcGw=e*hj*ZTA{nI!_r6PP~7TWkYm$<(&d>T zy}Qsxis?E{WiM`sLPF`UtVnQsp@?rtH32?#MYkeZ)%Z!xpd3{qu?fAEs7(>MryuAz z0m2|ZOUN?54e+&&$`pX>dH_r}6-%WC+^^PIWf!ITdm6Q5Z%iKw-WX^2e{wPMzKqbr>U_1h%agNKRWK}gmst{8-u zkT5P?8_qS=KL}vE#)w8SwqA6K$TlvWC;`SD{?Z5izpQH9(?*(HnvSrdx6MfNaFmYd zT->0;>TPH_Nm_*Ff9MH>)Tw3jpi&;8q1Eu@Gup{_jraKheZpF0Afaj^&f>;fz66qVkP{`gx0=d)yEBHGh z*KkKaOc$|PT%3fuJF04FdS0qQG35~PCgB(#l`04Eh>1a*v)aAe`(vH*mE@-PpY#w~ z#H$GG4#`X8L@L7>Gjzw4_m^Y~I`ASFcNHCK7NPZAPRegwaDW=Sb zOCp)s=jNV|>2X3^#WYc79E02>WrCMTC}j-^Ne~z9fIM_Gjw2G3EUAvMDm^n{CqiQi zxz&SR4kJ9*eN{X(+RKB{JyEXg48+8?H3l2JbMZ z1&tPB<;(Kb@R+ntn>bA(99?He_Q4TYxaw37shHQumUDl6e|$*p#Be4A$EX1#V8@#j zmwOXnf%l4ydAmosjp1IRhxaj`AWX1XeDM2+(VZA3tbz%P`44~o7(d+ChlhXQA5xQa zg`&2|Hyve^r`R$NH_hg;hc&GDT%?g>3Jqc%q;bJ+Njpa!G=2TRnX?$zP+e=5_sPsc zfqnYcFbAVX7#~C%8KT6s_jmooei?#1SveO60*;gRAf2#@=jnhGa5|nBA6Ef zaHm;>rOE=%T>u{KS2TA;n3}xoOIRNQ>SZ$n2ZAl;fU}l@I&(?NhWMT)aXUm0Y=vMY zn~4OfgN~>rxn1E$+M`!Etk*!sd}QyDNx7Lcq$98oZqK8WFE*eVqQW?#%&pnbEWpe9BH@> zEp{GpBHB(pXhTa)#*ObT>*o61T^d0`1%%0lwz-dRGE*TfZvr1|WuFPnM(beEM}&B4 zyz1X%nI|*IK^0Z)W6V??=9dl7T^t7iz^4<=NG~3nXT-t7jY9#)AtY(ciR-_>nVAAJ zcWOU4<;*W2=+mqXj(6U&97i7;h(={N(SoV&2CqpUwGXZ9q*1QN5X$4Dh#BvY2_mUCDvXof=*95HAN$eP zV+cb`1clYT$$Hp;TAmyR82h-6(8QChMCEKR7e5<7!qtdqf{b+=2uB zvQ{?Z3$8LD=X#ltb3^>?$RK|^GREH)hxyy$1bAm)?->Z`bZ{FRYvABK~6FlXSw1VAKl7X<)aKmR7f0=wbZx}*S&Xi6_duXfiT`T!4bYsXyC!Q0CCc>3?01| zp!tnk=kONw3ep|~V{tSR=A*;=oQXUEXC=MwM+<;C6*xBh(nkJ3}u3je>oI5BR3g&M2#_*+vc9es2jB2Pl$BMX0-18MAel? zljLiAzf0OOYeQR2COXG%@Bz@C0YyvwLYqC(hQ~&s%+ffQ!bdZ+sT^|aQG#Z<*@)nh z^|!86ClOcrkA=NEx{OC=?#QV%p5NRQLbHFS8;Fa^Qj!1BX3`-yCI7%>hxgxzk{oLs zS7gP!&q~6}m%{{bsjpY3F2UhKQ0GL$ByM*kw4>Xmc&pPb9S?@rOuWJsq`CZ|j;zGV{O@Y6PkooAO{u~4G80DqG ze-!|ScI&uxNGAfvEsZZRJNF#=$jb+j`pj0GE1bBvJxh-6ENSDjn1&1V5%50aAep56 z7)-`;774zZh+8`xBsH=br{;_aZijPdW-UlA&StI-Q37i1z(Mko&YBzp5IE4u{n#P)VzhA~S?+v~xuDtx-G#wA*S1k3;7tjm~#c zd)ndvgn_)gHnbEKA5o$Q#2|^-vhkDH3j28JeV&Z>i3NInj$S`toqy=e3HZ=wgZO=e zAr*{6^Ap30j|6CTS{QnB{x@QnjCnN!Q>DciZaLoo&Wc!_5h9XrhN)?#;Aiu4nM#i+HeMCqUpqD=tsWN>2=KQPkmW2Lr(nj@PfL^i$8EfN6{ z_vMtf7N-J4%4x#TG5i*LGZ7|e36odn8NqE$XvHvuGy&%g!$z^m z9n*`x=tcsp%tkjrQ?MSyWal7xoSq3o*vWQ)(?udLYB zZ6r)$eCkH1?36jm!PE_H62OZjh#GCmh*JO`N0;DKy`#bB#LieF{psg6qiom=c zVs(`eSK#SwLN88mrzV|~asO3;@y2dK%H7jCL2O03v0sj|PY9c?xPg8pK-L<5XQZ;C zTi|%+jKK836(=Swg2V}NPpSoT!G++{E9R-~xjQ;$RBZ_)1vUpeHzBOjVlo;0Ov0f_ zcuA@m5w;=N`^!Q+x2-ECWYQ=r8r~C=dQon50pOL*WEC(mC9rnMp`(jXXPxMOFOJSh zQ3aUGVFCyn+|IHuwOHBcf)meEfiPMBLtf;p`3~VUM26VH0)*gcZ|imjo)r=7(0QN{I-spsGr7f3YO*VsMWrC(eUIt z5X2+$^3^aWv`?Nyo8O=|pI4#+9O25Vs&-0DJJcH{;2=U|EjAOtRC?%aRSg~Fwh_TV z^xBnEB<$Xw(j%G`ek1j5CxL8i%4qFHRqKLqWK1UbIYdX=5sl%XG}D_gVZ+8%O#M9B zlj_a6(?V3ezautk!$@6Fu34T{Cg4dOx}-#>nXxKTP#5uYNbE%ANo>yuadbCC5O@-= zctwgajCt@ZDXQIs=FnpdjZ7*9mQk*mlN9m=?T@LsNR)qjr+2rX?&fH6!ImxHr)pBW zW7>qDoM2IOKOv1F_-7B}2pq&r_`~{^Nf;78JiQkWDVf5DF0LFQ^n}8jS+c5fIZ8$V z2|alXcSHv{$+0%d_n(^3oJT+@%Kqlc3w+n&QSFjg&9t3@Ie+>XKihK)m?-jW-24sD zyw#>-kjWCvIU(QcW)u^X8(E`>Twp-v;1E)phnPB^CNJn`oS%n=DRj&E!BW$>Qv zd%EKSDXoW^kyeOc?ihx5o_)t=Plp;cCKtc|Odh&eZM00Z@N)U6)*^nQX4 zpQrD#QwgQ+)9WA9lo-f}s6TV6tAm3YUF_@63`C-P`6>9%h?<-q_wjm1y}-=1@soPg zgn5Ez(zcvC!YtFa#M9V)!qnEB;cu1an2+W+M#!O-V7E-d=z~nbZ;Fw0I`SM-S7hmJs%y2^pP-T$N~1YeA%15Du+{kdY3N zir{e!ER%MeMh|>LOcmHgAiT^C6DBI1lBEjXD0W$)q_!5c;PDlzXVq_yd#D~JKN zN=#opiBLtNB`jyTS1~~^FT=x4I*R@C7U~PZI=MB#y0R^CHX&M9$zO7ZjFI4}c*K#> z?3odyx@KV&3+s&-25Rb}^s$Vi(fUXD^jmOBBMj@C{ORwwq*1YK)fgcEm|u_g*BZE#NR+l8;cxko!bhh5vG=uE@vmVoq{%r5 z%eNuJO+k+C8H31`9M-$b={>PV?Au3YLvmlNrx!72_MHww%t|=j z2bnm8q0WI1}Z-=oLMhD}v&ZkjXN%*{pLVg06>YNK2ZSb3P+pCl>%(8|M~r?l4#| zSv-pv+taOj1iB+fJ!NMh8GV^^-l!2yBPo_f|9g;iq0GAeFHe1)Yn4v8$I>m18$Q8iAo zg+$Xvt)ZbTDrACtE^5w6w;*n&%&ZjA^ik;eI7$fwde?Tni8}VAmV}f>p+PeSVwBu z)a^apyQHmxdyyRL>jW52>4-Vu$eukJDZpBELnvIyb$jL|k+6}6l?^i3SNtsVHYVyc z)YiDI6hXR)?9oN|Pbs*ZgJ_qXf+c9nmoYK?)*FhrjNs*s8$t}-BM~|2&TMDibHhuHh;xiCS`5%Cd%_ZS@LsF z0GFH1Q1NY;kf z;X7Mm(EGA6q|-ydM8o?^l1_M)IgpC3+qVbd|a2iucQKZ=YU? zixU=1q1FCHQ^~t_i+E>Mv+Sfmv6M(7b|JE&&k4E!5jmP;2qeL#eP0g(2F>99?%=j9 ztjR;d?piI%s^v`$LFn|})j@;x0>+-rc%LGU8ig>jl(vCONkQhw@t7qqGi!oZWAK`D z4ARxsk=sH{cwf?%1=^T3@hAewPii@F$nn`@0>*9?oin$FP3xO?(3fAL(Jopyfzyp; z#g)B8|6!P1o~1Tq!I)#Xe^btOLL5XX1Kc(fZE6EcwyqI5a|8Z;V~ByWe&VnFvNrr8 zYBl~n(Sb8WEsL13Gx0+^Axnp<6Jxe$*M8Xgw(A*{}RDq z@2?2*=C~>|OjbB!k$X@+v`2kvqshR!DYe~dKnH(qgI9PITs~@=<}f_bE-Lv)S*Ldc zG&w_v@}nTq6rHdh2q(v2+WVX8#uNF}6L9(;N>%kOO0i^CY9uG1-1=a-!nskXp+Q#v zP-`YY%N|3ijd`V1cC2aDoU4*DWZE9=4OtmE#8)5RyDBs zMmO89vZoQh20j!O3~D__#_Pt0?l9F%QFCMFu31v?svaR2aI&Q_hB~VzQM&Ja5v3VV z@An%$n8$kt5c4ish{B={V-9Ht_0m})$^}Qv8YFp}MNDmv-y?p8Nj-ojICIYf8Fqll zany+dP2*4C>mjE${R+9~Go76EZx+{38nhWkK8Dqkuecxg`8A}G*m+h-%gr?CV>)Qt z#bgYyC_wyG2tO z8Z%9p;k`UOLg)U{o38uh;dE-O`>8Ne;A(+3l)iG&be6n+b$f`qTkbWcCTb#gC)6kh zUt+Km(sXwkN$#kz#ihkwsKlAX{$L`Kl<(aRFV=sqGlUH>UVZVcsfjpU2z?-4`Rmu2nI z?|EWQ-{~o?kS)5DRdq{Vst-C(f~MAa&B-k;Tuk4mu^)zx?!m0WmozeT!>Z@rSBZ>o zYR9PMOG;cfkc*K+C(IM!t~}AE=DqU(<#Znh1b|T~%U%t|V|CVjxm+?#k&|RXlak$H zFi)ALXh_riaJ|HB9F1T>&{?GV2XJmRXwIeN3XXFa$lK(u&zmo1w2A3lP6e@0tMp2X10Fi&jfSt4EmbB)+w2>&>GyF(Ix z4UxPycyBB+A;6+u$PznVca-8P%SN&0keG9Hw$0RT(YY6#S{v+P9OZ1})^MyiI_R1T z{6Sm15d$rV8vr|4<+j->bY6c~>j@#(_5WMg-#F#ag ziMdG=b35?55Z89kaPf%ubx9+5dJ@O4A*dP;n^Lm}YB`1Le*)%v+Qsd7yPJ6O>NAwg zfs!{I@-jy;RTrFE8bJ|KH0@%|Rp_MmRfxyavyGUdEV`Gr)>DFM{9EWfXKjS`1$*{4 zppc#}+p`h1J$4SY_gL%_fdC+Ft3x zkiigR4$+}g;z#U>tL083*trpm-5_EPsf8PMdBt58G2{lK_uqsDyw)fJ*h z6!!1>Lk*pP`eayMvli;sruN7NS0gBaY!&!o?A$KiwFxxduhX1LyZ zn6CLpd4ur}?*4B^N)ztYFipU#2+=2_cS8tS9@ z7=EDDNqM)qehy`h(^&rL-VHXHvi-eK16hE=zV*T1Vq1~;GwTjN5Rbl5@*504^1cFN zg|O-~O`@YMeUZwWWPpZEzBwhX|4Dhcyo9>|-I0%#j+OsKfP6WGrd!5$!MZ zlBvvEm>M(-a}NUahJ(kEn?H=qqu>(MXx(zgKUBK)=o^#YwyBi&1uUL<`p_=R$nUej z=>;0c7^vyH-b>_qciM2P_u03|44nz(L>wYF2c=Ym7gXV(EMj_D*wQwnbe2)}+zWp+ z&k#|H%UIN~B2^J9VN%8zRJY0C3`MyDSaI02SuDd8PhdUNq%ze#4W>w#Ba}(lbzc5P zqBF3~cAY0i8n^?IRI1T@>8lYoD?vY#aHifCV$pktplp+=234pyWY+8;53R{itqD|V z-oGN2kPp!R@jwmhqaG)!k1PxRPBpA&1hq2bpejRtr%mU2t41dh)>VX>n{BD z#}VH(J$T!cXW@AAB^~vTd+!;S)%!O)G%Z_N*H?K(#4UIqY(T1r&kiFXoB;tsa><2# zZx!dEv^JxGx1<_IC3pnjixZe(qBcO=Q3fE-xk#q zszbXhf;0^63c#})&cOPmuU9YfYAO*2aRc&f|zjB`v~TZog$8S zks0a)F!%nJZe50VZ|rSAj08oB~dRRKm>(J z4Od>|)c|49J$BO-U0BWX0<=BP%P<0(Tu;)qAN{eXH;q==oVW^|-=)dfT_dU{;fG|@ z!5~Sqm<|Rx4i`2{floW6b(*2CI-y~D(dAyyEDAxJ4w48tSXRLuB_3mfch=~16Ox`i z=tZ+#xDhswciJ#RKpfov_{g)5m%^OlFiR2a{fC2FakK`NaVbSU_-l5ZAymVOoMz;d z^WGt2jH<0mxY}jP9H_^1ZHU9IBy1cdzKV}&d|boF1j<5&>{=TR8qRp{(*4ua)O|2z zkBO?9O7$Gl@Hx1sDf5mlxs#%=4&(Hj{Nypsu15-GC%hhlSID&DBlY2rYW<_@TYOaU z*xoJlhAzC}>kB{l z!*8hSeN2c4WG2iKDeYi|?Rb`ygM(1^bW8vZ@zRWWQfFa&DdCx__tPdS9fO*+QF$)E z4x5QwOhqEZmL@i=h+|hjT%-UU`^9KM8O$sxz)j;)xDUPc=o0 zSj-|&9*s^fM+VX~Gt(TZx#@i;8KZ=@W#z3l8Xgq)kj~t4j3?>XRk|D`FTs#xVFP5X z;D=e{&bFzxjcx=Doa(fT**G><)`z@L2ywcqvqmuwA^njD$e6;%3Kq=unNY`bL~7Zu z2(eVr$~CS!1SSnt)3hzA;%s%R|NG0N6qbuc0YbN#l;%YseZJZKD=*NlVcoUa!+!| zuJf#JF_GJO#S@u@0z9~{?7ZWq=AwK)!F4PzqmBidyB!h3kkR1`TZ*r1TOVoT^__O< zXpi>^`~Q3NMd%#tDl>+t{9V-1=jvq-2f@rd5d*fUE=UHD6u9PWhNus{Wa=@V> zYH>Y4=CjikTn|F9Cm>FSPj{Nfsu(*TC4+>?x=nh_#4tI6!QpN8E%P!AxAHNn+UPa+ zlfmAO5i;s@$Dl`|b$hz!(j}VC&txauMj~YtVGy7#!thR$b zvSzaQW8t+pogVQQatDbMNRboD<;x?^YMznO7roCAc0b8g1D6AI(_q3RhMP@kUlBRV zo8WR%@M#;>A*0z%^R&(J$|_CKAznt86e~dpV1wbXoiN6%0H{X{gc?BDfJ0{$OivQM zZwGj3xVHo*SPN4JGYsaXvpB$9w9PVm^3QJP?>@nE^#hRPhI1uQsF1@eHOx~HU;)61Gl+CZs+;N z)~K_0V+Q2kS5E)D_c^SC{7#yyHdT$+7tN({--I%Sz;RP5P~lv#I?fg-BTn){KkGNi z+JYI=qcua6?D_-m^H_oMgPNI;8c+vxorgLAmHQk&KAAuaq<~_%n7kG=Q;#ZqEqLDtRryukWvA-ec)k{CwP{zQkK!5D`~%`#RP?K1 z>h`9gQ6RB?!ux(W8vjab!#BKGcuLznTe!+6=oi$R68S!71$yqe0FeOOA#D-M1Y)&2 z-VY%2_WPaeFY;*faKid*-b{;eD98+yhbt!{^~H$OST^Y|f`~bn8tRYGtuOX5T_a_a zMOpX0fX!R}bJn#}hCyO1mfMP$nYfL3<*`Xh&Zs&X{sd;PVSCONzRKDoGj&h4&D3Sq zy-#}o4BIaLjZVOHqbk0##~ZzJD}lQ3gt!TrimHkaRgkmaYNFOJ5S5;sH-2qU?p+?l zs)TU_Ar{aHeqL^;%=;gh_ZOXe#8s?*t6nU zX|D%~CzRPn3QNz;YXc-+MtRS3T525SI-~U+$b7xLZ&xnAgD1Q%3enP~o6JqEXm!r6 zNZ8v9i4mb=vWaEc6`9trVLu&P8 zN(9P>`@A0|Wb_e0OkgoTciv;xerM3{j49y}9p0A_CV5x0r+6HD1uS#+z6QAs){b~T zMnKK`w8nbQJ|AXl`m#^1X605E>j8p$TKvfqyQFe`!25Ajqy2zJVQAl;G3Z2;YJ{u9 zYk4aa>)wxeKY;}jKT3BOgS?1zVo%#l%B}YL$Xx{eh;mp9NUFZfUwEZ;7esLw_%8<) zm$qSxvLc&x%~3g|gPTm^KZ{&yiNhWefIcdU&UQ#-)=)O`xDws30#bA9-uHSxDMZlw zy%Mhl;7;|ZEy&iaYgeN4Dx)Z~_=%l{$-lx2uLPg@A=i`1ZEOWq^_uPxVK<@D?85{W(0wOwI|*`M^FB~eXl2F z7+@~p%3G+!%dCb`<8vCSvSL>Z$3bjvFdN(1TZ!K+^DXsW=S^W%(RQz9{@=6jFRy;Y z`wG2(H@@%v{c^JvabXv+0@pZW*lJU3OVx*!5Fzn4j#`65dyBx9V1&62W!Nf}X41yS zxXHVZE#+4qdOwZV4eom#n-`9fpFpHw1CeJA-L*T_J+Lv4!q{f($?_C*f*yH(k6q^~ zYfmh2s1NUm_cM6k;=cD$Pg7*?4P}`ZXUvL0147TLl_8>Q*|ZQ{?e_i!IXAm!I+bNf zg%mfm$+3v5aKTxkFOhjPU6cQtC-PnPI@vRqZ` zQ~PbP3I6}O{0{FI2rG?h*z%!(=v0@u{3K#F|4IQZBe<$qm)DS=RS{Ev$qU=cY8~Fd z@c@zKU<7q1X|tScZ?#XtE>hq=WuY$pip7As#v4|i4B2fXld^W$`$fVA7eh_vOkR$q z>h*dfcz705Te9YscM?d|1-do1(&qgV+-h;|rnZZE*bVKFj7>W3>PE9GQ%&Rla8KmA-En44$=jQ=uugm4t zmhHQI)I`fwV8)GkT?=BFu&x8PE?p=0*aQ}1ZXeo8p(G@#PS)ib1m5FRKG9m}(`iq= zU{j)Dn)fXpJfYHOmV?;=Mm)YK7&$Sz>b^Scm2uLsO?>ob-q;6tk0LfuN!(o6ILej`v$uJ*@&Y1 zxdH3xYU6Ld*7_Iyy|@9+*wEEQ{<)%GtrHsKkw%z|H+dx9lZZDBKHg@SWk$G)ZXjW4 z%?FqpwQZ<%8y+O{x-4}_os4`YC&ZDS%YqEevsi9Pr5uRa5W1T~Cv>jnsaMUvD-v5O zf47#ldJX>EVX2icbIq3i{;pV3nlocs6!=DZ`I6T{G-zCqel)ERKb3>&2pe+YyQ8J` zbKK6xX}Vd>uJOd5hBKZF2}i$7rnRDY%i8((tJs9tJHJ5)onTL>6 z32^kKW4ONO*AkU-Vp4KfeQcZ|`wI}U3mRVGm@>PTJe|gaNAwp<*VaZ_c@D6W&%%*$ zk(l=KIm2?HHn_V$t#d}6TiX-465zGvQeE}+p)>4Hs=9Uq+N0r@M^;@HknBoTmgAnA zcOvIoZXeZ6P7TAdp1v>w2i`raPkjMmbmEI+g&vKq{>{GVtNWEYh+2Nt($&i z3Sb!eGm62fuZLfru-3nc1Y=jy?f^PA`vt3uz%8QqRtaiQ&<4LOAIE*;0f0)aFoYrt^|nGTTYLEbS`AmSXHK?*PA+IjqCyTwuL{01`x zbJgeBD(cNKMe>2c)PfL)clBK!KIG?(K$3%Txl1-#qpF-68}If)Y7ys_bqH5-I}8_=v(EpQ&0Vbtk!G$>bRZYJ4J}Hw%N5d zCXp3TcHyu`sUEuGv+Ea=*r+=}s8O|>awL&AH4PS3Sx}+0?{Hp=sylw;pkhzw#d;bx zV^R^fok7qs_$FRig(h@yo>koC9N^&jj)7PrxR(+`k`>KFLjy`O5uPa^vh^lHni?dSNEtm$dQ2{@7ZaN*-~* z(I9Ez>TSI|Lk}#&*#8fi|0yfJ`O2=A-L9_vjRy8*b)z7d8m31#sIkBG-tGznbUu?G zx}2suuOLt!IW*>L;aA8lp7}V#WAC_fxR9H9{F6MZqT|nOW{_Jbc?Yt99Bu4y$Bj5o502IKG5u?6R-$&CAKmY(94gf%ZyK3hC#nFSE?Y}W2 zWy2nh6D#5zJt!(UAnhdNV?(nJ;oYaeP#)o)$Xtq4#@kbpYQze>)jas2-;V-O22Nr( zs3u_KFRF3eKRDoMPOE>f?|9@Bkh&~QtJjL=%c$^gR~t)=TS>(wads0bg^7G62-QcX zccMRTi?+Mr_LAz4`(Qhzulgzq&%i8&Y3$i4^dPyYm&#}E^JKW$AOahvU|Ll`u`h&m8p`zbaSKK+YnyrTPHRVLH!$o{O|w(=^KI^oV;v`?k>)LY>LjF zU)){Yzr2lX&R!m_Uo0cE1{3Ewu=;2&F*B#l$LuEfevYFdCF!(?r_czIg~Torq!?JxoouDZjSlI0ZHj zy`WSrkN(-Ndl2v^N5*Mr}-MbEKo6Oi?Z>; z0_#DJ$Jr#QzI;+`%2df%Q#z^jqGN71W9qYB)5=n*XZb|1w&?8D;#%Ii{HdaaYeK=v zHB6pTs&-pjA*a9RLdWvzad#IUrB+7ci_q8vSj$#MZn4uGar}&cus6r~fw4!jBL5tD zzDDo7?qHN6#>2~Nb-`-8xnsc5y<1>@!Zc6(|0#1Gqy8U->2eHh06?G?0QmS;W=Ffv z?9N|2Jv=R(tt{NFxY#(@|L@AXT753>L-y4fA>RrWLtwZM~TW? zQtpUWW5q840!tl`N!H9&C}eyC;YmtrNaUhLQ+|?2Dg6wa$`S7A>H-eH&Y!PE&I_J5 zb37`G1i9~>6_^h4sHt$i!af3C=d^SzsfVZ!;HhbFx4*$Z+_12ZFoXd6&))~)P?_CR zTBYEfp|`3o-ewTTFIVDFkKDkc{S@eQ8Ghb`=bG1e?>nFbVQRyuuDje8Y;)<>JKvBk z>PAKg?7G}veD0Sf3tJ+8$Hz<4sxtx51vP@|ASg^c)WaWqMO_(@J^&#akr#(_b>!qA zB13p7I0Ir-^gV!f|JR?7ztTefq|KKzY+w81U(lr0SX>pZ$hq<(6i!85@S=!EUT~vS z;Gi~Tx|Sn{=U`1mxeA68QuP8$I2ow;Nag*dRtTlY!ab-&fZKj3f;6a2JUa@^;aynm zlAVAb_mnS0KL#k%l?787Gm?2wY$Q5~eqd6*AV}d_qBe2=`$>tSOl6F;jfBE31**cEtG+XKX9=M!)8`US10pn z`lwDYw*yhKBp*1#i=-G^K;A6?Ka_b&$FHu`;Vx306hDe61K*bvRfLBdxm&@7&;OUt z4J9P}f*%FGj+XXUEDbLfpL8esj}EF{^lf;Qp*lL+!CV?ks(iR@RFr8+A{+R}RaY5B z{|H7!7YQ~9GlT>z4N|OTX?pKP(*>F>k-3>Jh)4HgAOX6-y@#6uu!Z|4H%j*@Dr6%c zzW)jT4nYU*2$%-s2Al)b01fa^IHHIEEC&z^<%eWcBBF-riL~^HfYeA={8`{qR6t5S zhy?`1HZ4cufd5YHisFjqihaQfio2m+0-b?~!2)1UFbk*+)B&iX?i<$w_@!eu!O;Td z0Mca~F5+4^d-A40QaIAMD~1jr_AHcEEH{}PYYAuwZ~*j_^(5nho&jDegzoh8AY;J7 z7*evjCH(k3D8Exe3qBi8A9Dpw0I3sAAQwwP4PFemjwAvIOv6*~_C%*0+<;f)hTwzo z!TbP&Bncek1K>|UJkSxz7wxjYCR#!cfX2IQ%oU^+cmV_fBwq?w!V3}6LtAvFUxJ^}NZ;WvNWje+a)EDCS%Amrdw;PYwNffBQgz7L$vhxufV+0HGl;1R^EN8dj_O*XAlU#^ zX!`2OD)+%C)!0#a0fY+D9r6B)0oXgjJ0M*c~Y0e=B=OZ;{X;4&8&6;9pR zPArev6i#X1RU z09=3*s0%~~(gh`ePC-E+8jv>V`pr1h0Q4-C=fh|2m}p64gh_1u#3|I#D~3 zeF45`54h$!z{fY@HvlLkI4Fse5fl)ufM@_&5SIjo1bjBY7XCNlM_?VCBZ4FH2|OwA ze<5#BQp7SlT&?9ebfPE_GaeTY(hkGJ_oe7kM|Am8mZa-fbT8AT97-tIFwmMrMg+Zx3kq^EOrNJ>CT+ zND1slb%|4PPvGiEK>-|tUgM8H$NYUoTql^3EoVo0Qr6!x2kPP6(6Cy>x8CbjgLd`N z!;Ei4;);v@OtDZ#1K2Fr39*v<6Ub0P{Fi2kNNb`q|uNO&~ig@VLa(5|V7 zCioey8_kzOA{DgTCCQI{&h~2{D*7JJ^`yv@y6_{!4TJ}wkGFx>LL_}=$B?Tj+znJC zbQMYaiRJpy%mq01n1Wg{=iy+u?=2R4mtzw3(u~+kLWwLFQBw@_u+!YQ`GKt@du%OCUr`(r}W zPN9TNH({Y`sK3M!K7tBiGRF|OJ;yiz$4L133PvuL# zhr}1Q4+W)wMTz*4(@_LQv*7el|7m}4bs6ObA7sGaW3TYHfocKxaEaGFTHrx5T3xtc z3M3s~SF=%VD*@|ubJON0W#3IifukRnUqt}E=<6LEruEYi zpbb1kq+T}t7H}O{0a|Oi`AHMnGuMryg()IuUPJ;K<4k;RyX1ne zGv=3koS`bOsToOTL{atX0c`!ffM?|s&>Tp)f4J+YDBi2YG-lZ;FVwBZ!ai)JEf<9&oYld3^sH~n9 z*%44Ux-*YRI+5sMg?pe(xDv*XK)O6XnQS_Jsp208vJ7y+cWs5OA*{cJ}DjURh z%Ns?Y9j2B&*@yV#jVe$WbxzzOaWoM< zELcM{1@478*bO-LQ~)xa^B~1#KolXkAioe9oh=fhgXl-j!zI4H_P;&ZE5KJ=^0@%} zvIYE%{&X%49DA8U?PS<}1ZxtU&iX+RzurL=z_TGxeQ;ARAp+^xz3f|7Gn`9x1k$zR z=C_raV!NKq*M@s4gs6hudd;F16&PVP(INB@-&fFgqTmv}o;2}b zX^hYmMyQSEi{%CVO|KMq_WsB13F?K#M{>-LLNtNZDjT>&=oLF$BHxJ~aP0Pq|BXj5 zW3U_ag$<%D8;G|%6k6sIcJ~hxLZkok4qOD5M_Yxl17Q)DT99#sdo2-m_y)R8y=_0i zi@xv~o}Y{0dt9k4ODKA;6o={UdiX7SN_gn>N`Il!8(8VMu5|+`Aj{W^R0a64ORJBN zPO)DIq^BvyV9iY#a8rm%s2=*iq7N6E@ntZl_r0IYi$1=QN>3RmA2OnZV-B%3t3xDx z4I)A1bR~5`1CH@ExgGN=HwjQY0#F~3kRx>Jk#Jb6=hc!Sm& zNlXXaRPQF%3ExO~Qxp|WBp^C~NT>`r$ zpy6Fo0_C5HK0;QusHn-AQ!#NbU9pprX^9^KuDlb!h{9zlKw1#?l5j2}K(>l{@MBNI zC=Z_{>Oi|t{`U`#quPMWRB}jJ$J)7!Vr*zx&=E6)3PcOJM!2re1MLQ$y$=-I^$lK> z2G;^b5slH&Kf9ow0auTg<-tv2Ii(N%r4Jt!BSS48|C2GlJop;;CgVFAb@1WiTft#} z%)oB(`{)9u=x-q1OTDRCOak2W0x$cBfir?h;F>QkjnFG@Uab&u8L{9PdI8@z?|7Vi}>A;DKw@2mT1u zh_z5f{=h65i~*PU93e+kREuzUOFBmXndf5hD^v<9wEgPUx<#zWW-zp)3^0T^d>G?x z{_x;GdMO>-lo|*><`Oyz+@j5fvBH@m5n%?lfH&3B-|@JvV|Ku8{dlm6cVT!C#XN^m zZvg{wYB8@0z&<#^ulX{9@_XW+12HdV!_CxF1`q==23yQlw3Q;^_)8CGDYD@LDR$L? z+MxrJ56B?9)a~yK+kT?vLKl|tyZ++v4{oDP!7a2j??}g19D!q3zp-8OLp(~vZ%Bip z{lMxRiOLfLVtC<=j1BZ@_U~FRCNBXoG9` zyca9t7QjynB3q4$_Kfi3H*9HP1MI@}NDUn8bAU6)yfFH&N{FtleL3-4NQstYuiG7`W3;FId;2aK?>DH<~Rw5$K(QgWNJ1Kq@1ipyH$&+|!ftz5PZ*qq*0o83@fDY#z zU^@t=fynB83l2ZLJnT>!TbyBMU-pFt8}{a_qU_N-?6EuSF+1XKUOF&Q`oKaRtUKHo z^WcRI(@BTfls-($Uh>QAbulT0C=U-{U9M3>E26isFMHk;@yw$6B8m+&93H^Fbdh}# z#)g@uZ(&jgn+;P$KS*Q4G>1cQF6F7AEz#lx8Rs#K&>BW)4kMHh8>X8MeRI6mM-Ob6 z$uJD-Qe5_h9UEo@zIB?J#5C zWJC;yEoDSL4e!c`m=5F0h-eP?#QLU2``})lQEy5Q2gLfa1FN@wgVbU& z!%?xmDba*+4;0!$rc}QgwT5eDdJTu=V|){$mt%bk zqL<@*!=m}$-q6csvb~DKywnZ&m)6)6G&`2Ef%(xL(GR}ZMU;?E`5Z>bfmv(p11)yZ z#~mT;B5KG%h#LM#N6Z5cb`cx%);sJXrkxf9(&-lKxSL7r%Pwj$_2K=v2RLjq#+|q~ zhvHTi;D#5cgox?$jfNm3+9Y(sOr~xr#hY$I!(sc=B@Jl)wz~?A^LAgQ{NF854;DP@ z#UvPOv4mBoK~MVy$d?wmosQd-mwvFWOZk zGrf#K@HX%b>7B>jetmEFjk@9WDI4m`x`pELfog=yoXtJAhe^35_1|+P!u8&5UAdN# zV4rp3zt1w8l=@?BJd=1err#_-e5~ffG!!N!le_sX1zY^a6m<5K$}lj0?6K-!r0v9I z7)jC^fjm3MH@i>qVf%XV<`KcLUH%4&?PRgN7*h!gJKA3J5Lo1nY4@XK?W({#_DU1W z`cQanM_aD5%62O}8IcuaT|S_6Ac!eHK|@!C+Rj~>G8=H=YpX=~%}Ib&nzhe*jsSAL z<{=XoJv}zh>6d$F0&sfNJ7DadDzWauzT5ReEmSPp|IXj&>MItQJJgYiEO>&-&NP+X zh0}_zDkoqxk#Ir6DUzZGG7Ei<;(6bPw!XhM-)KS#h7EdDC&<}4J-a_l**9Vrwwe_0 zeJrOFkybvFJ;qlw8cj2eJM`jp!hMoP^A3`5@JvdqpwbE=hMF`$nJa|IWbge&e~<@K z{v0t~Z5W80D){*H7bk=FC>=_ES|jagWjG^PTX8L=TydsZBh8b5SdeEJ3iXpa^(RNY z!J7}>uOFicjr_do^WtF&Z`O_`S<`FB*4vh&CLjDWWc}LmceDUWn}dMT+P<=oAx^cm zPfY&??M(v3sz&d*DsTAwW2(%AvBELAT{sQ1Y%C4hzy)8){#oUB4|yim<)&9bcO8zF z2mi~UU*c{%`;8WIp24N(+R$J;r_k|Mk)(K9xhqK&DdiBZ@G{o;dr_$bRM@Dt)GujO z6c{hM{+w$d`t(`>h|w5WfA~7gXk35rK1V=y4HtT2Bo+I4HqN#3p406??svu};r;MD zH>UrVsDbRm{3p~H)xnJ6tj#3lG2BJAn|?E-26D-pU`dL=c><;Lt>ZYeJ(-zjy_U=2 zcj{D@jAnUpW`JEI5|Q!Nl4;ZNA-^ayE$^y87xMm$^S5+TsDf+a85b;iLR)2s51+6G zjQ^d={|3CEkqppImAo7QUhJ_4de5h`{3xL!Xhwm6y++I*qa*w@(u^TC9EHt0>R%(V zp%}O;EjuaUA zs`7U5j5E+^V$uazenIRTZNqBIO5@A!Z*uKv>DprhT-!8>6fgbJ8a|;>STZ$fIEL5e z{6Klv67!kH_)BbnJJY4!3mUzKQ<^zf;+A!p+qZV_iu@L->t@mYz=1L>;@b zc2-I-2CNk2XMM0+8Zw;&ri+f!dd-kQ8dP}o;LcP^vynOh4HH+nST{Shu zbtTw1Gc1`U-y;TMO8K)brA7OkoXbNAb`}hwnU&Q}Gd%nj1TwV^4t1=v-xQ^t9>J-r z)?y6MM8e&3heiAowc4fcJ^r`)(8y0217y;Txv89#T3Tj*jJ0amKGrl$>PdI;E}q!g z$HF#GJ56knVA4{;x(5mb@g37;R{%$5d7{w3ZOq7sBOON$n}rK#}s)Od2chZ!wrKb`MN=O`mvqb@(zC zQlz}J$(WoP8WydW(jrHHL=t<6>Lzb!eERB_+?{&lzY5K{#m6XbLf~z`j*YAo@}Hkk zfbai)(@xADShUZZ3cPhytQmD^meV#dFhlkS*&Y*1W|~_ZDdj2@bT{a1$Q?Tvrw~(aCZ|6s_I8_{cOQ*`3gMXMzjwT7u zh=d_o7Z6PavU#f~=Eb#VAKG+JYhLs|SYR!RcT6&cRB? z*|{~G-sv?AkIT{xB#=m^APl)_GQx$J(Ptr=f z)LUND-K>Oee~Bq)r3bI)kn7O)HIj8^$xbnp;8#q%8tXf^%9&*Ruilk~l4+kDzN;Z7 z<4-2>@PaF_jkuS2O$*(0XwWY}r1b8X0XD5lICR-$dHvyI{nde1Fs@9@pS`kNX zFEswzCYUDkCq~xtuCKPXdl&t2pJkh&QoiT*@0#_6w}xuPyy}0>@4fCcl1n zS=LvwuWdi{wuVe&{?)^aL;D%io3QS`Ea_4AQhUsOcb?zEAbmL@F5hOM+`d7Y#V0-_ zWIwSTq=!VzB4*gjMrCsI3 z%V7+Z?7P@|!tGJjf4^BZ{T>fiX==dxsmVUvU+#iqjOLIg^Y?~({}f-N=7vtGlkMkS zGfEND+n7lU-KB0!D^Yp%slI<#wtZW-TRk7!KKkeenVz5Bwe-Z`sfJ zJL&7ULA9ZoaeaYbWqNw8{2E!MUcVnw=2&;S?Q`!pv`|NZX`0t%jk=$hG1xULdE&De zedbk0T}k%Qz<$1E=gGfpW8ya)d_{y#!KD9;0OXz@f2M0{ zk5&f{gjgx{4n@<^od4z%g9<3dn!8U$kX~%c)Pt&p zc&+~3z23(fo;yaP`&*{(K3150DPl5d$R3budvcoG4L#30T4qWxU>*Q;u-KwIC~J`Y zX;<=}Iw%fWpRoz~=o2lNzrUSgQ+QJNdfSt0!oT@zvJIEblMEejh4F0!ou0J8zl!tc zk>jsaX1~RYw4!q^Vo&b;m9M;wEb@71cDv;qW-YXkWq z_kFZ<^qpMhvY2}3QmPh@)DtJE-E&u|YN_HiQ{va;`y6f-f1aTDjZ-04)5pgmB&&6> z4}y~(f7MQZ&xzvmnHwk{2_?0*f42jEi$Aked+yzHCOpn;KV6D=hBltYPxWsb->6Y` z>^$}F3~<*y@#-#Xs)shn#i|TlEo=Vax#g)pnl2Bi%~xp{%YK%LzcjM7usm({zA0Oe zpxELO3O>sk^$S@UyaI^oD;H#_T?OcVO8TT?5>(-o+U`B^LQ+)_v>t5Nvo^MK-@IDI zO+(@PX<6_hB%?aH-oJoHL~~DmBcIUE>y<$by1S8@NAUUz1w@VLW%(_NPX-?Ev-guc zHp)ttb=P%=-xZBgk!2K6D9UH|CDSl)CH?sA!* zMqg&USMwIVt1)p7YcK9ickUJ)du=%_e5(@witMoYun)LY1IB1z`2xZU-6@ z>~U}+ZcieW6myTOBl7^Gy?&e0EnGD568mzyEH~DO&%8w@usVBr9h=P^3kT~eW0*`p z$1wUnPW>xXwdCCehgq?C-M4jqX}vS(b@C<2^GQM>mpyF8ZcQZKUv2da+ttS5Vf#Si zy7egam;XwHZkC-RdUl>}rL)YM?F`THsX>+Qac;&jlsvOoz=U$+=u^a`Qu%~fBqCkEvU;QY|vJ*@Hs>h5?Kxr=khlcuRde$dDsAX z#1#s`#7^%z2D8+Q+Lk8%@rT*fX|Kh0mT0utOqw=4wVgoV6z2{wSO^25YaMw}%Pv8u zVWu74tU?08|3u;h1&6+7P#t0u`zH|k?)=*YiwoPGr1jM&@3ux~7yv~&m zjo1Wi^bz!|n$*!Xa@HHp>zA_D;xOj!Rw@y>zkXf(iyOB2PVD;jUoBAY)le-rzmw;u zgTI81%eDLS`OX_555JxlfV&tm&J*|b@qII8rnh&5 zdi;KBZ9ko=^{SRKZF!`+g1#k*R8TA!zfQfZ_TzK!-u(@Jwpi?6hxap+Q_1)7^WO_p zOpV*z9u}qH)uSVmLud3W{v~EM_X>`G?iirB`(~r|l<*g#J#hQ(=*yl+>&^k>9%hnx z#7NYcdvY{Kf5C`A{7Zdr4yt}IK6V27H#Lh0LNtk!w1&k?}Wi!!j?R4^Z5K}O> zV0m^s85}Zo)$!LRXe@rK@Y#4Tz|8OYU?~SPWMydp`n#GW4LSR)|7Mk8jK|Gps$D6- zxW`h8o8af~IGvy%FtqPAgowgSu;IHmEHAa#GU$a|*!TB~XUms+$gFId*!NS><74TL?mtr5O$@KJlJ#Teja%w6ioX8C z;2@W8Nq?@oE7;J@nxH=ZtL)R_Mq9qj`_F7sI*CFkxvlm`?5I7cp2pg`n?|>1zD`P` zAC8r4?$rV>AHY3VabwK`er48=XAvf1T#DK0~F`pR*F(X-tsc34y->M)UCh^&61pyZvQP_K1~@~vN_r`wb@ zeZ9{AGcnOtMe6nR!|ShF@1ghS;{MP%_9Fh5uG-tBjVjBp;%ps|dJ;SZMj!b$fgr=D zHJfEqwO5TlwWlf9ZDCGrF$Nzj2MPuD6%Gc)&+rYd-6L*vlqtKx2Dd{qF5Lt7y>8o# zsOcYcKKeQh3T3ztU(LgewqF|LkVCLanvq_ei_AC!0F4t(}nbotYic|PD{`&p_{ zFEb;-PNZF(^G91}>A^&6vD7`Gt*sg1yV%HTzD;N)bd4cpHL_@+XC-is&r2`6<9u@a zT-~r|cP3U(O{c&&h5E7-5X)E1_shr=SIMV=m|fl1`{^-wz{ullM3{*>j6N#R``$aR z?pJk*XS#@)No}N`t#0FzeJe+)Qtq#^AJjjF+~?8Ji7-D@JO5bkP72ND=!;QW`nqPk zT37LGsw}pQj84J&;*_E?vWIt4&~oKHQb)hhW)$NgV(g?Q7$HWspnWy?m!t%jInC4I za^yG2&n2gi(4q)x^lQLJd|YLUqR+B;aKKoFaC^0T2naih^6&_+kr_rtBsWd^YFk(3RF^L_M~@7>w5y?-D*96TGPZ&GI-ZV!I{H?wfp&q8pQWq}WIgTt z9Cc*ur1HBz%9)U3m$1dfC$K0pvc@TDj8!XRjP=njM%h-gd@uy&N>31*_oj5(&dt<0 zIW9#mf%qlo43CtLz&{t4+Cc{2fag(W7>e)$7G8_Hk1b2|!M)h)4%=?jiVZG`PLA}d zFDPdk|Av1eyr8!{X%X#E(?IOHy5Zs}n0~9PsbY?+Pphf3DPRt28fE9_W#$*r_a+fz zQu`F@CPKV<%6^SK=4pv-+g{DfKs&6mM2dv3x?4<$`SkXk*(>mxpe5AubP@A!{p>$W7EFZ_HX#aBKw%y;` z)&7_8kZG6e=W$~0OtH3-_D_=(E#M$g;otb<Z=Q3pUDd3vP@qRKq(CYbybxOP=zHAh4i6e!nj?BSO!dH465GlADh{?R{@I~9wr$TF`^;x*%xrWfeX z*GXG_w^-ztn$i#CEDw*~krnIpIW3(~OeLs{&z_<-_3M#{6|10*@`&8^W^JnPj51$;;ohe(>|RF=NC4}!eRr5~ z;t#zUUjqVkw<3Zm&bzr!;_gi;8CSG@(q99fZ}`s^I=(beRQR6tx<9h8Cyy*Mhvi;W zCozN5=<;)^W$*UWoLP@P5S_=tsOVZi z&?v&AjJQRqaJWeHL6+{_DW;tfzh}S`^nOh4uq}*zwn5W{xO>Z&_jWt)Sj(nRDJ9V8 zuRfE~x}Ecp@>NRPaahN+fz8=Dm-;sG>m6<%=|FkZ;l@OwR8S^`LGnQdjnALmuzCkQ zAyrGMJ_iz|*|W>M!-Z5sUN(#!(tVbSWq%gpW*scuya5-0SP>s@p}3*uvhv+e$lmVzWDX^8S-}*!^N|XJhKY<1%E0d|0*t6mP9M)~UNzvBK1&(C`*!4cdlK zbh9}K>^w@Pw9*sN!(A5>ifwr9E*$H@X)X1fWE!fh^xj4MC>YH#eL~<@UvoY4o3ie4 zPLqC*$k4Chk5vf&!MfelbAx&y>Hd^`!f${5MVBJ~+1#(kmR=u*Q{UYS;FE&Tb9E)< z7)zx$6)kLE=iBXzfAE72{(d}l7d+~Ytjr{R`b65Y98JrL$zZ~$=&l~L_LOcNJB>NL zO82bGPpoBTUXw*IopJKuXtH{CmAtvU#hTJuMXrHqH6e+hI$5RULTrcw|V?)9YUSV z2yS%y*7no~#;51JdFvc=87F>rerWR_MshhsE0K{lNLWoC(WOsbcXv+g;}ZAE_!Cwf zJ5$At02j7U5wt+JcU0-kuSa|G$40MGwN!H||5`IHDm+BIqU^ia(8B7G_q_?bf3Mxe z{gut}oL+)}0IXw~Wx7v4J*#WfN=yyl<*Z>=;?)V=+hO4T)YJ2<>l5qy z0^JxF59XzO)fjO3)X^50GAkHVHFDV9Z@H!w*IDKfaK802**m>eq`Pd;I?wo&9wYYX zuo)V-E8cP+8KUPkZM|k2#yDWH3?{qFQF!|tkDDOqebzoYG_@}a9+b%Go7t-hb(B*tYyjdoxu3mO%F0q`cW9 z4$f;n+g^w3yWzaCRvz=*++O!d>Jm%I{ov`dapI_OMs({%jQH5_G0LBUEK;R2z*k->NO83BKbUfb^*BG*tu^vW@C#xIMiqa*&kKYp#sxV}ywAzqxd z+(??jMQzgak390iW2^OAxgJfZV)7tvRjcTQ#`n z>J2m8fNArDWfFfYX9u%Z?&(Y|BR?Rll)kXZl#5_2zjTyA>fWHYLon)jzqgh8^3>?i^a?!Jw-pHlt07 zMR_NFs~UsD7<@u)?d9ESMf*;#+heaq?E~0{8COe%8%F5Jq}tv%_V#uQI}8a4x~vxC zZ5bFBt>4lzzkYBzV^+pc*eH#EJrj0fKZh-(ew%GFMUdp4|I)+|2U^545Ej&EnVPh<@eU^x)?@;v$~tfD+w_7Y~qe?IAJxm1X# zj!A+6Rc8&eq`}d?Br`i+*+aBCLcu;U6JLU{~x*p}k{%oQV{nUIkiW4Nh zY3csFRMWxx@idj|`RJ}DQPD*BmZnehdMhbfW?C!{I(^}QnW`6`9dtR=L;xd_Iegj6 zBGF%w@%Z_#!8)bF&3o!HCv2WxE$?``-1VHr*(pdaL{Fs6$ayi7&ujMaFmIW?CZt4x zLAWXl>M+*gOtQRa&HBvs^l1-5hAnj%==H^e74~W?U!}#q-n;XZntO=JWxYq(XTg6~ zhUjnclvv$YZgw2d8hB1JYNO;~R&WiqsyfrQ7owXcDRcf-an`9Y$9Hf&puPW^*Jm|9 zVk1r{y1uH|{9Q)7jD6!?#TK$GZ)}ZBF`g@CWwtTNW+Oi!qwx1Nc&uFA`5mJ{AT-I; zD2m)M_cm;6b!zStwchx^Ai5y3O~MVPDYEYGgWeJ*au>oObTZ>J$3S zZ{t)%@f^6i&!9&yX_i31$4^Y^AM}1da>=-`$5-;-FFJ9iO@+d`tx6yAE}#2PWU-iv zs+(qh0ni)%?(=1ax(0R^qFVM5n#@iM*9UoFX|9%~c(#t`CFqv&N4FlTpyAAOe5Zen z2Az1fV(ICx+K)7+aFSAkO9!0VwFaj3`d$2DUXR&-{+<_P4d9jkD=2<%8q*)Uis^&r zWL)>t#12oe`*y-17_Nqp)#vHA_lmygw8x9Ejm7vPtC)+ZFcTI@{;26Y&XngT)fI}M zxUViR8#Za4O@83;qB9iPBYRmX|Bkkc)p0Rg>FZ{K+s&?jb0fM}PYkUe` zyE7HC%o&5aD6w8<32LchzN-@ny69k~Vz&I?_OINXdfV_z@8{PYdJzsAhSPsvgDShg zq=%TUYeAo*)F|kp=p0(xQ^{y(g_&uED;2zdXPxL%{b?doPWcO85xrlY+4|Or-4I6_ za%qX1Nyosqen}wcwj0gbv=?n$G|c=dQ9Py=1)xb%2NIRL`x{N7@e*)N%1ISUs+sIe z3T^UkSnRg^w|3bfC#vi3hF-ZQm90ciHN0h(I6yf!>3N>K0MC9&+C(Es%1Jkvzwlw$ z=)3JE(EX)v{=2WXQD8W4ypl>AEoXjBNu-+S-g{E2#h||gv@tYXJ8^pvXglm+cTeR# zdYP$+S+lSl?6&j=H)593VUZZ#Lk3>AK?>73vm?Q4A4K0M*tA?hUcACO(ux9VO>C+W z4nA}H_5o&CSRhi4#CTE`QSL0iMB?5xTHM&u6<7K+eXQ8MVsvwOH)4nQIsMp{ve$TZ zX{>*(x?gLbO^;n^Xz2u zuKMhYSIZunPMAzZ9{bpoeMQLT*2Y4pcRr^ImWwSiznVSV7v~XzOP^Ux_}OH`&|O3v zeczeOxskFWx}T&j<`Hhgak&2oMzQ64(@KyE-dhF2m*AM@FA!8xLv2_dLMn!pjW#a% zJ(zQ1=uihc0r6qkC`{p0JSDBVQaW0n6{$HS5tOmQP(KUNAACja{*Ex1O_@#S3X(%5 zvp z0(pXVEa0T2eMsfV*(b4)nd0eSIUEcOp%vpQX7z3cOM z-XKMdYvcDSy6kl%@t-YUOt=crvi*v2tg{gFOw`x~#o7o8=ma|moz7`KZioq*33YEG z`p@rCe^(}g%JnRbXCtg8oB#a16&da?v2>SRK$4q=_mb0-kB>|;Nu#EA-jv&JGDyE> zVTibF59gJUJ6P__OP86C=byqp;6i*FRKr9>0hKg+g{NrXor%ZdClqw@794PXD7HiW zYgIX%muD_D`YRf~fqj?i9>iu|wd0yOsx)}eQ#^Sxmg6f`E4gd^Sthh@G4rodg}02| zPAzzrmVwvZRuh8&{}Vim8Z*s00x9ql?YMn7Z!Qk~iOpOrUlviQJ7ZjgBUa+e5)M&@ z^B;|$SWNF`7@6vRv1K!6g*mRf88fCZf9Y?Bb-a76lj~(f?mpA`<>kSOs_CEo>(L8? z+O;H8DY{I@h5hi?Kf6U{x-tPA6v1rp45uCESL@KFsFBS`D-SJ~{ILe>Waf7aCFtDB z^fO7{*$_QKE3+4fk#obtf7%XfB!=gCT3~ZjISMD0Fzb({zp4nQ*Y#;w*UJe+lDR2B zV876L5PEV5m}AoXze|1CmgyiMK$}P2#ZoHflT;!@SfdxzHBUsxgkE(DC^Y=g`gUV0F9#x*H4y`jATb$XcHMN`r@#}XJJkr-gAJ2Z$ zh=6ygc_~`y^XR+t)!XjcTv*5TAwqjbL>yCev9Pp$42! zTeLc`mT+Mu5M3O@(8XM^o^5CAvL!7;LX?OhOdj=w_Qg{0(w21>(Fgur)|+LbDtSH@ z(WSq|Ji|T$YeUb1h#oh!?`CcR)L|D==Re+1369~Yj^ln;0#l4r0FotOdpeeU^JazB zW3~sTotWFJcVV;$zFS6Qm@4w`;nIpCkxwA&ZvAwyuoBt>QQ1Jm0yBk>0C>4hcn&UZf)g2)z^Oy-Nq_BuEXSbPx~_2^~bb zNC_P^^df4203Yvs7jHT5xi}YRcV~BYcJ{yX?Ck$$=b0ZL!ba>;9eBT}pQgN-8@0nP zIQm}Zgfnyoqw=Nb_f#8UQsDSh(|x&3T;~{_XRM;nD9{;(jqj8mk*vxR);+B5Dw;Lp zQ&eagA{ZxE{LyQYj=Xp`Xv_VayQ>=dJ16IP#s;_kvreP+&+(>}X3&J`IO0C(z(Q@@ zOP?&bX@!C?PkGZ5^O>`!s6>8yBi*7s^6$F+>P>t`NZOiOV3U5osEG#2G%W#vO!!i+ zjnK^@O=j(BQ&L5#3(vRW!F7mVJs4|CB|C+M6ZnJ-)F8%p?Mh!SKVd&oPyRd)QpU@O zw*WFG+3(_2VI!Atm3U|)4cs`ZFD`WJ^VJeg8_6{SPJ0J4Op9pECx;kNU-5fBI|V%z zrJV~ifaC05Hy3@i@!){wh*R`DBOHL|NJ%7}z3)@qgqGwEXBh9cv8Z?4vsDoGIH$9e z=8$ih1{8Z6`Vuy5+4Af;hJ9eJwB~-y>dtTKPxdH04G&H%vHQp+%s1=@V)WE-F!oct z2_e<^oL|&0B1LXN)@sJ~U4GAu=l1-x`N-V#Lk%gmUAHvgGrI?iKc~H{w1AxiH`fnB zRb=n}h1I0Ap&cVYNh#Dl`BpU^+MBH}udAsZ03#F>O_>lSiM!2j+Yc0h8C=Dya#AW* zN4VCZtGIGEN?}2(Lc#gm1jk?XNR-$_@|L3m1(b-Ae>iFJw$XBE_EckyfNf;Ovg(D3 zcP%%YN>?;n#!=;BFL0)rp*}1%;mWNL)G<752vs8s1FlLilvaUbj@nT7Guec97S!>S zCD|vr`H6RbIC$zi_{HVFYzSjAQz2SCAcIx(F0w#tVDU$tQV)n&nYPqI!y*W$3SbY% zII$EGqj^*zWu%YwhO3bA>RWOp0(^O~Mt)VV=0RqfK_VEAtEvwm?b)jML!%YSz{S4S zlggj@3*H*%D1V}TUKgb3%0dzaZGkA%p5L#u73|3YcE??|4|D!=$s%wtJse zkXn%s&}KVNCOhl)1=&StP2u6pWKXB7%HphPFwANL@*Chlpv9Y-_bgt?qFjZVXk=W= z4^9qvn9?OYRZfy0PL!y~54xo|N3(U^AIIag(_qS-Um&xZh})(#c0y|xmPg}zA?P|x zF@P+(j}NQi#EMM`ex#MADdaQ#?It}BJy=oSHy#e%ctqVV@C^dl5RS3Uyz7Wxz@K`Q zq0_OGo~!b}vY6&}Ay<8U+*WheEKsn3uTOL0%YcQxgZ*Sq@PWb;ly=Y)JWz=QjBPx` z-isBPvULj=_}&HeNA1fSQ;i~#j*&2* zC|}GKvQy^!1X{)vsh9Pjy<8HNSkXQm)5hAX=C+{(>m6>|Sa+5+KeN>id9$nfoS><~b3VsF6LzX?)WB+iii9_eP#QksHBD-Y4)YWs|335t(7uHK1DWHCCbb z@xpcy(&W$+F)ukJaLw?~255wy9}eXElctqTE!I{h<*KAX_iV&MrL%B6(k&}$)5PFP z`k%#fQ#G&G-teMSy%v$Y@V8w>Nc&~q!MTZC$y$QfbnV!qLE;JCNgvX-qI_{{U-^JC z)Kc9L%x)Ow7r6{RO{Qc5&^}T0k{Bk3aoOSXiK<3TLP*%#cvAqzHtz_3V?FCNM-B1q z$OTHkt^!r(eHk~5yS+4{PK7*wnh1{JOWQFiApxx8EZ7gc~ zr-`ACd1mE)Gat|V+C|3vQ$sU>D_m z)ZOLWB{s{3)?B2j{_!!+ zYJGAnBJOV1H-Gnb)OTpD0r9C(X85uZ}D_hqK|~C!yVd`BVOq2Olm<}x$NJf%~auNQqIe_ zvv?+54x)mr9m<}B;P?OnN*U`~fmd5G0!fYum%w&(;w+Rm9PTu6THs)5*=3v&Oq^4= zMWgkqugNd1KL>_$wZ``D7?jk~Mqu|`7Ckw>J8FWqbHU$N&YzPqOIRxtgcg7?EnMt? z)faL%NKGG~kCl7L+N&Q5tXSopo8GnHA$=e^>iV*u)HgmFw84Hh39- zC9VbZRa-LSwZ17p#jnqFf{jv6dGLgV#w{%5C4VQKlrnu!B&YdYVw@TNK{zAJCNkZR z18A-t1kHHVJXYl4ye;6uf+Mp~rHt*`+}2pH$9yJlB!l5ygkksd3@4_=1412i?Yd$* z>xyoYVo&{93NfYHSqt>5xb08nc{_w!v@&)6SQu##cD=E^qG-FDNoX+t4Yf?SYeY! zwP-d|5<>OK^i06k?WqE#4&TgY-d^(y(cgdn4B1)?_ z89?qdn|I%nz$$q)HO$)v9&rKyJwStegCY(}=QTbHZ|NKzX}%aV#!LqYVRc6%siU^U z;*h#}9&Et`ofHCE<}e?qUm8;MFqT66Jul~cRasmC5>Z9KJ}tY&4Ci9+ldA|qie8`4 zxLdez83p)+=f7mU>=mOtzI4FXD@bfp)dXqDDQOQpmY~ur63d?_Tmg|Lg2`o4AD6-f z?u@L%oOb*my!p94`ZjRr*;o2R72QaFds*J*jlU{mTC~m72d8;4LJRWvjDz?Y=Y5Jw z7#;4n{u(dEg=We3eFp3jD?^!9UCB6gf`3Fqq()jt)Wahjyq9C=*Ge~l3O0MXM2GYm zSFtz)ebmD^R`Eou?w24Gv6);r<@oD~s||ibhZUihsdZn|pxI|}xZO+RZH$xB0jx3% z4B|hys+#1I``JL08J_|+#IigJ@Wub=XC?PW^-G98HabHr<8{wITX2Xmlb5GPq^U%P zN1F_%rb1kR+N_?*yE^o!l^mR1934+v_a(oJ_7=fcuQ*Ysy5^oBmT(S_fs(Arn)?_t zIz5Ndhzh*R!V>w9X3Ou|cAutI>HBjy`1C7Ocdn+KC5&aijC{#AM>eMAAYRB71d}Yc zd8fcccC3XGr~y&Rvw&AvsH?|Zxo8Bdqtf!vIiCysU~K@LUy*X%pue(+3F0L%gX5!i zmx*pM(v@ZQB%$x#Qcq{(%YL6|y4J12@HzU4Yi{!(eTe}!v8Ob#1x!6{I`}N2=ge%g zM#1GSyv>P3c0Ioabjmno=F3WXPY2wV2*iNF#3QN7{l!rqHQkbdW(M`Xg;GzCapj-8 zs*58?hf))AKYU{k-xyHPyMgYrFs2PO+c7#`O0L7WL;8k>Q_2XE^a_O{N${_oA(+s& zHt+>QmxY_={Mt?PC(53tCu&>xyPt@~u1@^ZK3WA0DzX`)pW7DQOPr3GQ<$3ni%#T? ztJj~r2K#)?d({>5Q@8%jwQ8s@6|xGTj2J`33TeG_Y5+IU&peR^>?Ixx>2>UW;(C;}R;Ip> zHnOssEqfYI@CdI|Lp&w4++;JIaj$sh1y627&<}M*2v+nnsmFW=pEN%^d+~M`Wl?Pv zZ~MWj1bhBWw|LJlaku992off|E~#j3n)JkJhN*otZZZc7<1(NOXD^yN=2Pr+y=+ra z{Js6!d3$a##-1oQZl~={yM?KBINTf5FA)R?^mQAII;pT9DK;w{q|0RT40#PMtNWT@ z;5l^4Vlw4qxH1hC5w1Rb`9@4UBXR>GmCc?Vye;sBXfNP?wJJ;3Y$G2T7uD0j^dZ_X z%H@|wEswh5<1yQ@qBW8A{l2196MBXulLROy9%++xQ$)cZ@|J# zw&M85r{CdL8IAg7n~L8krfSeh7HIUgpMa9Ui-AVVhib626sE{piOs3D!&8EnN?|@6 z@cRU3vy7v0aQc$X@!i<_PhJL^>XZ03Rc$2sxLzyNQ&~K{L~8TrO2*PpGwzTye+Df{ zq2$2N95|_!QkYY||AMUCBUPK)7&JT2-M%OH>1mk5JAv~AGGq(>)=*q&*!w88hZwBM zONb)y{#%9cZf(-HF{^K8HP&J0C6X>bidIy0+FSZRJl)k6IcUdg-bFLSv11B1ojrxa zbPam_VmBP^!Y86mN3%C2Px8)x0iCxVa#l4c#yz|J6p-HMvemQ5Tc-A0^gz3r%vt;k zsTEffpe-NX`yRVE|5L?fGZTcGN!nY?j{U>DLP)aP;KOlwue7qf3JL%LmQAk=vDm&M zkH^FAC0iV?{}vRFUIaJ3wVZP8Us+*Z-Jy3OKQ zH7+hIiWPRtsnglYX%RtgD_~?LdE7dw z;OUn%F_xZ5wj|F^`_T$ZZE?WxW*RMF?|+(;~@|6k3^YjFp#7 zmY=RC5l#MSq8V4t61kQ%dF^N+qj)G*<3ma>Tjqo<&KuUw6Ng^>&EiemnJEm%MDcV0 zddO!RcM{|tn*6epgnEX~Nf5F*6lZzTH47| z?oIN09$p;|myDo*~d2LRJ?EJt3XV%;# zLW-@g61eMXyVtG!Zbmo^T+JLi=mb3h+D`vSnC9?nn(EEs5xtE9Q_9pwD->%m4el4) zFbpD{nqw&XmN@d~8gE^GcMYsJqKc<|nxjv^@9#Xl^&&@Qczil=d*J(lsTV%qd%j3n zLKObl(L!0?(H}>@=tal4fy=!VotkS>WwC1IrfS-#$fKtQnAJH|4Mx+=gaTn!e`x&h zCOoq3`{;LUZ2?QbZ|LXCxc%q+L66#b@d+t(6Fhgt_XM@d4}c6!-5gb_oF;9r{$S+Q zfL&^LiJ%=KrJ!#*)i>CYrH{?-Z8tz(V=0?3U2QP|-5R6L(K&8fNPSGF@ye-KYv?vo zmqUO~(rAH1;b(BuSq{pqF&v}|^*Zub8|m;ZCMtJaYsE2$JvDh@g1w}^<>Sq`^)|_f zo7Hf47%%xjq^SIO7WxX5A7@{%W8s{^Rw+1`S!G_de5PVnmhsvc(ed-ZW2?-`kuZX= zwh4T_cu>(ga<5p5K*$-n;vA%N-L1BXu#3WOYe77L2*Ovp>*lV--40>KBORnsp4yc7 z_Rq$VdXZGlWM=d1Y$mjeg&@&{&Xlx49il4-n%gi&h+-7)x1%NjqgqN))TNPjz3u~_ zOV61%OAiw9U*xv_-lx2Vl@c_=~^xu}fry`8J z+z8))T_h7MpPABf3$lSs^KeS4{S|^dpuI__`PM(>2uOW|wZ|FeR#Xq_Eh4)=yAPMI4Wm080_e|=-N z8^Bl%f8#mZyi~tQ3vo11jwGGy$lF~Rp8Yho(;?LxcM4BCu0UyYB<(IuowM49QnWym z3Q;R*p9V1C{2L40PrsDdr+(2AhhxXoOFxZZ1bBlI$Ka5Q@X_;9$J3vdSPjHqnz<|D zxqzbT?#bDR@$>Luj0o>v4MmQ%YLr)sV&c(6O=0{mlyurp=UfF{372vLayY_5(;lrn zB%l8?gEM%SBaPO9*fQ+U;o z*L*NoVtaszWAZ##{DU!~ChgQeU;oRFAXB4LPs*wL0>%3}wmqgsm!6pSPq;{*v+PFtL%?j#pl70~AIVogWk&U3Id7=L(+YSDP699?SlnMV7>&+&bKa>FAXx%!fX-<}C%K3BK+uU2mTKWbOS$$u#l;$7*CQKxlXnBS zTt8Jff3Zo~N%(h{ZTd?4czQ-LWp7O^^wWn)N=3xaf;D2r1eX-sT`loP2AZv8LUMLg zB87p`5d}J${V3=TB|wVasz{7_$1lkL3vJ7Cs4e^Bp*op>wdBU@S`U9$D8h^D=;2n{tyiKY^JcqG= z?%UY=!kpB%nuqnDc~7-L64Zgh^?z@pNIO=xCA;w;=`R&J8(Dk@3ol0<3Ez=_rS$}K z01o$)vbt!T5A7vixg68;S;a1BCzCQ8Kab6m%6yL7o0N@Jn^O$c^&B)?a>E-h4miw6 zY?}P>XCzkiOt&>Q>_fakFGcJqtAxeoP2V-ZN=ND{7AZ0BNNA|W-6S`}3!`Gi% zn`7hJuJ!5NWrt8{yk=ni?LSw>4t+w~kQ>zk6kSBWqp2 zsEh?^hS=>*a!IG#S4RAa3CV8Vo0D0Y9U^qwV~s&KR%-ECK`#o8`78I{H1_chAAdLM zKvxCTMr3xGq<6IwwNlu6J=1=u=bIrslN=zP2-7iB4NQaf8(#a-r&#KuLNR@VIxrJD zE2D=yL+Og6W$MvzpYLnauZ=?gIQa(oDs2+WoMs4@z=sLz=rNDl~9%CI1>L00%fCJ~23()|~Dm<2;k zrP6V)TV}51&TPL41!b$885X4o0A1}PG(cZ60b z-Z|h%<%Av_&*wE7>fE~n(EZ<8%y;kMU&_Cbng4U+e#^ChXV1)&S6dAeivkS|?HL-O(QAX@vQ*{g=xAscs1E_^S2K5O zCl7wU|2@-^OdNX!C?ZdA5hO2f#8eh_g{!8T$lEEA^69xV0v8Ho)=voRZF$# z4r9`g672MBkM4$&awb^3G9C05MCasmR&McHb5hzJi@l~Mk*j()vQ|W|^D?g$-{W_c zRqBLF%EBf3HifalPWk_?yK-;WD{d5-`UlKP@DA z%1&QJ{@sprH|>fKzdIb@AnM@$vv!10y~v zxGV}hZ^zwbezwA`+K_F4{@r*Aqk{q`SvrJ$R){>Bbx@bSqdH3VhuJgd$@);N!8j=? zsZ7ITWEb*w^kO1qbuFy9^qW$;4#qp9?;5icq~2z;m!*&HJ$Z>*MVMrJ>>{2CyEU`~ z?j&K)<_o|7>Nyrj`C=|C&Q&MGubOTqB#eVAB3F5GvO*95xLN?En~i__D+Nf@~A27pr|%6Y$vSzZU=-rk!KjRpmFb-lGn zJ*|*tSeKZSVjQEIy`XCkMF0P}Df_j7xA&hgtxz@E3StUWzEEnKWD z+^vN81o;0y&w;EgA$hn4Izu-%JCX5IiXW;z@RWbWc=f{I#V5{JbN(SAN%8`C&$v|U zy$6mL{7-&g|Gr-FH#}G{@p7*0-1(E&4chvJoZY!w$r{g-5cVirB_oV+rDlB&Uh6t9 zoLhV0n;zva>=&Au@)E>A!VI0DQ`>b znhWNQK#N&-Q{s?viTaD>?mWWd0MPjVhPkt2{BU~3@@)+Y{)~342ucX^r!{s8KQ9&9 zAaD_A$y(bEYolEXT=U#r3OrfwPUdBk0UZeyGYW{`@a#vWtb z09v-GFn-v*Wcjf61=m}s<)TN1%2uoK@E z*rnJd+ojrlxr@Ckvr9kN&z+u%DG^!$HkOZ5Fntl6h(UoDgL{R>7Wz@aZ^B&rr5!{0 zGZE@WtVWzh>_&P|8c%#rJWqnl=a(3lOqWDfQw-<0{}0nQi0;A|6sG0*3ZXCf6XlfA zW3UFo{6fe&;L2RPgu4ymW7=n%>Ebz6-C9QdIbfdbt%Cx8tlrZ6+lY z-oWUK8MI;hK385;-b*3w@i3a>HHipzBNoa;Vo&Bvic7jnQr5=QZAYz&=0*;eLXft% zHoh_e9WEEfC^j#8HM%qU5snO}CJYR?l}a=%^ndXa&0PD%Yr0gTY+OkUKa2*aEqOX{ zk^EjE&xG~_)r8B0&IHGVR-%$4?gpVMt~EF^^j#=>sBD-ry)uavNd-o7n6bjBd}m>E zq22%X8blk$twztok-_Z1o_0Kt&kiwa_F|QhH!L(pxm5Ra`@8qQe*& z>=4o}-=RPtuOHTb+V;^RHyK)M?QF}S=~^WmS^ z+zMq2+Y=qEsCPd-E7i?2Cj6o45U$4&`!>ljaparmAaFu0QMwA}43`Ki4=oVWFnsn! zwL%h#i<9f3LsSz%6EYLyr$+tKMN~h~+~d1NwiKCOa%e0LsVKKCSjpOn+DYxw>`LyE z?gHB+`=!a?voGUV4iZC@sf*B>Ful;&LZD&W;O3C{kg>2DFhh~?*UuCSzn}A;{=&iz z{aC!8tW+4Ra8-Pe^b$pWg9(ZWo(YTz_X){~89QLkKb8-ISIYd_l6F{j)TnJ}%WV;U zn>@QLgD;zz&SI*y{#!egI3ym-2RH^(6k-d{LWC!T9t z*fu(QaD*if;zHun;4twgvf-6_Jxba5ZZ*@#FvRIm(fA$ zM3Wnve!NeZn*;%u``Ld5*P_wMl*j#Yw7N zuHDa}a&9V@94pc2tP~Wubokj=e%SZu=NkAgfC~KbO}glcKYFDlFOQfixQRHa1V&SGUyZSJRft~2$)guq zP00Vp7}5#HL``zVNEFu^ra}kRwWlv%BtJ94^Fvde>h+yqnOK6naDRSDVI}pzSL zLhVF5ZE6l+RHZmp7B2xqp66zl*ioDVr*dnMLzg789YIA7rRoAoeN*H=%Qt|(Ss}Xxgjl5@>S&`l&X_V7 z(|_<-d<(Y<#b1;uSoB+K1Mtwjm?#ut*ahh1n6t-}FvDm-pTT^bp_QdoI22uQw zV2u&^j}U%g(9qHl8*qB)Oo$kX;Pw1#_sk2k$U4}IWO^kA`LWiGyM=#o>_i^LL(eDN zp$FZoE_NbW&wi8K<5x%%_E{<~TL_k%2>=%uzwXo#_mljiqQHrvwb7IWe?&>hdxcqf z7vJqoz#!LZE=9<3$SZKpHGZ9>73PNZF)fB#11EK(;b|aI6e%1}IWMN+d818z ztX_uKA5K%iX!txp_G51xo-7BaMF2aHE7}$6#zt2r@>zNAW3L`rb2>-@FC(KaF5H>T ziNnGlPfEEZG@Oym_(N|R>mlptj3tK$>G>|Bseg=pLZ#EUgi#Nh%{JGbQ_3+jD zZ?YPW^?Ndx7Z&<>;;A4OJn{6pobVjwIg?%uwk7pmCbH|)x{UA~wYkr|ysU>T7G`(| zm6q?}k8BJt*7e9-c-O_qT)5Ze@o-fPUap(tMJWS5^;(b-XMn=P7gYcsdq0rHr-LBj zi)sM9UPe|1j&&bA?^F;6o_9Kk8qYfoB#!5u0V2V>Nd@ua-K2w<@ov)UKK9~~X{Lgb z!*$6t(?K!e2o(d~^(QjTw7Pe__GFqFb$Y$DWK1tC^1`pk#FPQ#dh#r@*w${41Gs!V zcZmC1RT6zjB-#kgVyL^s7fhlpn!ohWdbZbEWcmDf{A)C;M3kz%QEEQntQ|?o=W)p; z;zpKok?{M%`nn=|T4oVQ80F$1{)A7wvphMV8Al`B*xL9}Gx^jiUJ%L20K6-6hivgC zpYo{q{gn8EF`85&mjTCvXn^TSa}m$7NWO~!*KfPs(GLY6#;g{YKo4^sHF4qM$O=W+-N=bE+I_gS?5hP;gNQ7 zS5n+v0cOpgUdPZe4`UKfF#Mi@{)it#cm0sx&A0#vd>Fa4%8h`Z;lplSZn ztqrrC7MWcf7=YbXbz?R8)H(j_{utDr;3m4JpcsIRGiLN5C0)&0#jfeu$iQ4qISs^< zOFS)LkP5qa-a;k5!lZI52m`F-E8qSIFHpJV$CKNkL7Wiab#2nXcDUoYLrpy(M~{)f z2jaDA)+ed>N174vk-_b1caxzH)vgSz#WZk@W(1i8WZPw4lZ4bK1a8nAoCw1JtAXGT zK&#xYE_VoghaLtfcpMQtrtZXS6L1-A;R8v0d6WYm)PvgJDb#V=ilaeWZsqHl>bMD*hg)6>)HKP^iepfnq$#=(LOgh7 zU4M`qLYp!w!|4?sX@4*Wgzl3JWUbuf=vs&{llwXr~d3sNb0qqbv zrl#n|hhKq1C7_Qg&tSfD93f$?_k@_l7F9roo_$!9n^a9uADG2302lNsq?i^Mc+T(# zfJ4(&>5kik=`wy*pd6nDfrq&9uMGp3Xhvc#6evLN$7HjCOXK}$-dnwk9!pVfT5Ec1 z8DW-Se>Zp&DhyTt@%6+TV1JLR#UvmDa~=Q+w2iNSY{NgdBrYuTQZs-FgpjS#mf-A19@{hE% zC;BM>=u^!G%}5GQq9ycNd7WltHX%0QATAqt$o$B*SLUu>KmvkzxYNPn3q99F_=0(1 zf($^!MnDF7?$}i=I!b3QF*t41$GZhhwb-ed5uQ}AmV82r{d841dO#SQ!CVGT4G{*D zG+fiOu62HAMfNZNpWd>rw11t}x6}T^p}>Mt2WHgiNFW8OD zN9+jY<1Zx+yywGk>AfE}TC?YoJszLwd72+ApdH783P`{WyZ00yTfGidp(E~Ku8>Jaq!=v zgChpP>4K)15J#e8{$|Wt>$5T;)A#*5`g1UEG*_#2`@&T)%9cJKf&*6rn3RRg{BZAC zwznJPV$>zRUhbHZj#_xTH36Q-0Q7f7Kf+ykr#gecWPsxe;evm89IU^LzX>Duc%a{X zc1jEd=)Xb|A4YFkx2IgW21GyNp7K#K-*CT|2*Qwr3I=Hf=K?9=%ZlbF`OhTK+hG7X z{8uNKD~hKkB!7Ck5r(&-P}~sfD!G@;Sk0DK9{9HcvB8PJb|wa`GH?QDO9C?>RdCGB z7Mvh>jgbeZk*ks*fx`v?T_$TZJ0r1Vo&AC_Iup~E_Yx!u?)baDexjR51^(w33TiF$au?SYZe9{g`5cci^6gLnBrC7 zJ#cUuCOEo5#ywC;;L7AZ*=hukq1H>nboBORP8Y6FQ2%`b)hCi$L2;xgMo=%!$Q%kq zGx2!0AjemzqRE#+c#K*@0#$rPLJCOTkZ-#Z(4J5SA&E}_(hpay%a)XM`MN<6kJ~8R z`*VQp`BdHfwEUJ2bnd;4P$0wFFA-ZeJ>(2y*dOO65U0{>(e< z0|Q(z8+iYS4ZDSu%hcfk8RY7_OCfGri|BKZGaYDpH{jQrD-}GX+R#S?HfL5J48zQT z_e#09Q~bk26+I-{w&lz$aKF_ExV*MLiVXWW@R7l}0zVMsXpy}A9rSEA7T9<)Isik! zWxKyXbR?k7eOKlDbsgGMT_{1JOX(Jzv3*sCnPEl-n|tEQ(h{V0huoM3Dhzc~8USR2 zRo7{5f*(V;1&;^Zl=KQ5%sHrJvw&6HxwQyP{q21Y-CjD>t{P$Y;zGw6eoI~H-wbN6L5-1OLd_&K z(S0Gy2DhjnaN0Prx(LasJLQ2Mcl+>%BE|#ON{x~7E;tY%^9};ToP>&rfD7wdWTxOn z1GT_PEZk3mp#_`Z1dFcc%nxrT>>UO|VC=b~3lYSEj%o$RM~Iu*{qtd0sLx|@2xjY@ zg$T??PBap@#GinQ_9ejD3+Sz^k2I`BRx9Mm&MM%&coK?DlF>khlN1R}42`6wS3Quk zAX_fj95My~Jrjuo20TeK0#XSIdIXzc>V}`mpfo2tHYlFX&!aepWQcc@$sIY9SJ-?F zRi$Dgf{gFiJq2OLuTK@=GK|p7{<-UBY&rWWU;5gH&}>k!hBOwnYC|UQ5UvJ*p7W)h z3aLD7p?F!nmKlWXb%UsH`j|7&_Zj-UUlR?B>MN16U!oscu{YdFmfCbR=?ZgXEUa)0QAZV z7xrGE3zI}3^6kA8*b8zNIL~J;0}PODq@U}ixzX|u5pF$e%>XhW5$4i1ZU=oq@xQ`| z(QG{~dKBW_w7z_WqfqJ)uCa~c%$WcgrzC*dGu?>m2pr`$6}nrl*BKDFr{+}59umW6 z4A8eBZq5U?sjv_aL%>Qf(+#jfFxjhry5x&j|!3wCH1SRr@ScFbc_l%qr~3rsdYp!{iZV?Kw&}InPL4zB`o``%^5y%?ZKy_w! zY-k9qQ&%48=rd_^V<{X*&M$eGG9xfXi5yZVLFEBqX7*oe%^9}`Rfken_@#wkZ!@Q zIPKZrqwcbD!c#QN&=alQ3$?XJ9_fNJ^yVjvz)xthgS~CSviY$lAos{3Y&5v z1FKxo0TeVhVhOa&n9zn=%K!$Nu1Di%70&`#@%_{@+u-j!pGo2P^74Ia>s z9a7tH*;#)(8{)?M%rbznMZD5=lfHZL*%KA+^`CBW!}}G~uzMlsFN1qC!-ux+Tkm`f znpI3$jeZ1}tNX^#&;47tV23`>1G?IYAY9JS|H}H|In4><*;7C5EveecGg#&d1vCNd zCKnf2%5_Rk)g=pqBJLczwOX%!O2W!$kOSLhQqXbm-s&R8G+NNh)I)IxRO(P1tPP1< z<$uv-b3{LUOH_A;h%jQW-{k!%*XJfVVn+NBAAz)b_+O9X;p4nU!o$!?4C6*MXA5y> z@68{0F^;25LXd*j{MsgK<4ZpOyQD#}|1As9za1)u`PAFn2Y~+WzU!vEJBXWch%22BA zgcgvRxx#Z8NdqNFPC;FcVlMl;Tm;ZbO9t-VJvV#m`+)}JYdCaI?=qD%CjdpXK0{r$ zd|?=WuGpLrjYz=fSwe3ifl-E>ElwIj7{O&oBW_?#bs;~cs30tO}#kjUQisHeAwxZp5 za{FTg+gZ*WhZV!aps2e7SqSrPIBq+DskHcwp8rO~Qf_7+b&H-H-ArA+2pj@re9v=~* zuoUJIIf-;Q{Y-p*e*N+1}1PrnZSCM|__kvQZ`LP}^5- z1^?Hq!VdjMZ_nA`vf3*>(`x z$d3+Ep{8&ZHR<4-ZJ$*vIGo&G$0$hH&pTn21IPeT+4TjRBxN<7wNFyL)i8Wr;O^?z zQDcKl1G;9<5*k&2j3}F|Xnrqayd^O-_x+?d*N4bn3zTK5Ha~>tK6j2|QL5^D!58r> z-7e?NMYY;NHD6p<^^3#{5gP{Qj1P?@b5p{6>`*$fZzoa~10{Nub|c$H8+R9tCZ~3q z#D7h*mHt*K=?s3KwR`*bk7!TktR2DcDMtn+Rll#eGCHv{6>}TK9mOK7@6;?8b$e>SZTKN))VJh8AQ=tBxl;%|7o&} zov4fz9>{bs!o2t+_{oMd?!+Sg3~u*8JmV8*@WvxM6#Ih_oKQ4oCV~10EOA+3HYrKr zAH==DXYp^`tf^XMXt$2LCYaWd`V3P2qn_Qu_T3}1ofi3fm~Be3-*$EX#C)UP9jcX4JQ z#TY7Olhy$K{_8H**nN?o3PNvWNoO39!f?k9Nl(+tzh$YjrN!%puN8C(*v+b@^(`T+TO6`!~&e_AI(?YIu!DRwb0q z#q2^r^#IrKZ!4GkHWL$w#v09Rpf8;P(D#)!;J6NlXNZHFCjlUtZjf#~x!Nd3HIXb` zeDx)xd61hNPD|TrAGufi4KA5ggU!n;FbZpg22Evwgf(obWd0`Qw<^Bx4?u_O3yaV2 zUg{b}+BbUT+LN?uj3l@csPBpE*z||a?ASV_X^i}gC~eQ8d0!x}!`>*3!KfqjyEY`R zTz4ot!Xs7U=oc01=UOb=t_1*F6j-X<-Ap+iRR>TFLn0FXNN^d8=tZ6Xmre2(T;|i zP3zeV^lmg&{d;TI_g3*TueN?dXXH2iGm_CW@}r?~`(5UAXutsf2=@KsFFXx}!ZT~D zQ1d?~@5X8LY2DI~tqdE+p58)yvr>vJ6N+ZtBTMCy<7d#a$Ef|hwCo-AO1@Rw$7}6D z^i>Wk8}$ZcLVUdD8w;c+^VVPM9LD9@^Gyy2TC5cFdWBsV2{twlxNjTLc~gW(zTutB z|C?Ad(qxzItX?;sX=FJ}Zw)BwvkMd}yI7(A&A$wc7ZlF~GPp5TDIqLajD$UQ7sO-Y zdmP!nztz|qc6@hjKzAbmok(g_60%EhP*k1SjZ9a2aA@+$4UVdbD_1IsyH}BQ6Ji1+5cJLim z3&1+(c+$1>o8?Osk!#oSEP49!jwa6<9v zP%gohctTIx?|TvE!1r_Szd*&8Z3=c5#2J8j{;j9{5c`KzNN{aE8>(!Yn%e={eM!OKp(r^@=!x&0leQ}Q6S^3R67?{z5l*Ym0D%#6tVqj(2QDd z8Qgm*!&Rj|gi-e2@_m=(bz*E6x%lgVS$iC(m$iCEZyuw!G=`kY-uM~6Nr>9}U;$LM zkz|_!zLenu!#&HQKs@g5;L#I`GDU!im0W0y4ip^%jRRG55N4r9_i6 zQG%9Y88ert^ zQ$Jp)!(Q=bDh-bgElu`A)`vHHDvUx+iA`cD1QA%%dlfJ8RI}*HC+%>1qf=RnG+*Im zvnE&Xmf>(DF%eZby;b%jGmX&9()`OpE9p!|TRuJcb8r7L^~E1%{0wL9Zc*xjZtcko z`2<=AN(LecTCNB&6*imaVY2OCUXxrMe7aYU1N(_ObnFgI{AhrX{>V`t=koH?eV?bQ z)UZd&CC08(+;dQx@%}OkkMX6jrLsnuOOY6n(?7rJuQ*{oAIo0tr+R`YRAqdw7FjumrdbDoKS{lQFBIxIC>GA|D+XJZ#@`XDn#2shxc`<~6eT9vgEOe8pEhUsV+bo@ zmo+xt$dl|JC+QxJZj362ke+mG{($E0l%xavll=k@Ej%97hWo#{QnJ4l+lD$$BSIg$NLUqq|+_;L`ghPx!@!KX@ zR;jSN_1~U2#b%yl3OLSOo?e)j6(V1YVs+n;aLm7?qbwBD$taHz2+=Q79kwzp*Wb4k z{g_}XeXYYm-~Y@<+mhs{T&LpO2c1w|Ixjkv8T-FMd#;S@s&#;W->tuOdRFgRvRhK9 zn-Y>S#(m`X`=~2XB&Zg>E1bHQT1fnDooG#?%rwua^5Cmsx2TmBouVtfeQkLzO{hN%L zh;s142Ygc%pYTvIn$*xcxGW;Utuzu%yq{-y|K7cki&x=0ivY5utoUPg@|72JkJ! zrex$39^$%v`#`Si=cYLYWa|zn7Z_9Wll-+C9aOlGIH&cU+TZM1p6Jz_1*O1;UBlqg zV&epB{nE*L{HM)B?KmMNk~FrlS7%&d;3sbx0fk++lKuMDSGTX=U;p)8nuqXd3Pbp5 z&HTi=FPB;-V;|8}iL6PrCb+t@KeF}u9`=L46;{uv9~<`yZ=%&w7M6x!<2?o!-5^CPbP`Yyth z`#0vm#R4G&)6j~}{6%!oE*+-;>At;Ie-qZx{LCkjeMQVlqCJ&zC|UP( zZ0tDVitVZ2(yW1sYS!EzGsw)JJR6LOD>&(Q!rxdpnd2ul9!n?`w^vCgVF-4{U1?jDfezGA*Cb( z*-$lffY?Dt(r9a`PLN~*~(jS7Y>VAwW$F7&!mmu<)%CokIB%3dCFo7=2=$A#gn23J?miNJ!{RxkiDqXB`wVpLy7}q^wRE-T}?j59rLSjm=H(M9BRJk%dO-1dGEc8O#sTxIlK7UJ=<`>i`(ekHCof3ojd z_fkkn?O-?8Ag@{OQ{0O5n=*~@Gm+wWmBJNsO#I>Sd!4-{@+&GCY#phxeRtoTqpLSg zf9SsF2Hyob=9axrKKfQ?N(ue4?CW`SYlGmD>4>$#KdhOLB>TyCKAl4%cAVn-8tV0L zek(56fNAAoJj>-5zDsp{)-s2b^GuuLwK-KXQJ!%^3YCFTOu8@mmMuw*ar2Tkw`T?L zZ3-U?(>RS(``IBEeFod5>s;IDiQLVyg3eOpUb36pn!45?_4K`7=Z6F$MjQyO$YJCt zdB%Ge@97x1$nRA?I!#wU#VnHSVz|GCx{Ro*UubMqV~({G+%0TOKje95^jkj#l@_iy zbj@r#)QZvt?CjiyX|(gy-SpB34&;E(@fjw5t1k?2MWijUrG6?T(vaxV2r>xz6eQky zKJ`TXxy^YQYIXA1m6B%-lze?Y(c1-Kuu9astwM$+zwYEv96Ope6D6j-qN;{oT61jns;6*su zt{)7<_lrI-B@o*M2Ce)WMDShxeeB>Gh($yrO{zi_&LLTM`hG{uOFy~lPo~yw7gs}b z#jo3EPIez=J0#2aeUbibpKH>4ejC?&^#tAJdpZZC-1e90(h=IxodsoFr70Ct9ZCOc z+>g0~jTAf!@R^OTU7CWfZi><|U*)@9!gCO{6~4FBfzO*Y;&-k}*7q@W8K0F~tj%4_Bn%L>a^^OuKB8{< zG`@7VvyaZq@59G020c==hYy_Z=M>ZLzVn`a>Im2}zq;Bwaae%rdxI7Ygndt=q7~9z z>F5!-d>P-JPlhvbf3}3eV zx%6Q>#MS*?_5M?e7T~TI**o#mwaP;S8P9M!9_3DK8e5=y(9XUd_2+2Liz5f06hLn$ zTG7pF9jT!Edz0n&P(i?h)%7GdciG<6A(%R+qulNO;P;JIzNcfB+s$wZbpuNV7oETD zi^GC{cp!Qs$%y&$e<}y2L>`~K4nGhI8 zrp=hSGe3Sp7G31M{e$J9Xr{92}x4eQ64`R@*y+ctbQ+I~8l1ym@XkRXd$i*ZKUE~Wpq!OG`g z8BcyDflDrT^UG$K+m3Ho*iUjAL0ax3HMoa}hm6OdJ1Gn0hJurta26Stj*}(7E@X)z zwWbZuA0u)-7uZOC(6o`8+FPEbXt7N%;)t25dpdvZbX!wg~;X?_ZZza3`j93D}4M+axUr$fJ-?GSdhy z(pM7S5m=1(k<(ug(_ay^Y3sEA<>HsZvW3qZiRWBQlJes?<6cT*(PaKxu&wT!I|KOJ zlBsm5Ef!5Ck`u|+_P#%#Cs%^iv)bAU^+#{}0+*lE5x?iFwzqQaH3!naH`5u@oop?R z^5NW1|7dr#8mSuYtE{Dyo;AxrTKOfm^^B}DFW#K+GS2-rYk+YIGQ(L`o0i z1y$H>bm_>aYdwNBj>rHhcq6l zLDGjStHC5j1vJY*wP}-#E*pkPQ=gA=oT41!fZ&a5dtL_#ZXpZTT=s0>f;GEHb8^5G zbm?VSV8`F>$c~_UKf8&0_aEFdw~vnZ{U<$3sY@?|H7m%_b;{_jZ$Yq7Z}Vs_G13gx zvR?rU--NaDA}+J?&HR+!X?RytCSUDdoU0&?Q|X!fHfH+7c^%VPpO^fjKcOAwn|8k| zJ>%upG=#63D}x^ia(I6>uXGvJG~Kkv|LR*X`xDHau(yA@I&k;GY-S$$F>){A9aHQu zatXoqZMZ$6GmGHn-HP!x<1t{Z@481bQN97+v#Rz}5H8{=}b1&S0(S=nCA& zNyLAs3OR5WHs7Z~%(#)~O3IA+>?jw=48)L_469n!1z7z2#i*IvAyRjGTIj<(`fq0e zjcj@MgI=7&kqF7mXTnTJ`hpY}Z5y==Xp#x+D8<|R2=MWu@p%7_jeX_uy~`5fOi8Ao zOd-d`Bx`-Hr1jUb8$mNsy$zqO-0^`=*25dnTFNQ6OpWZ&$b!de=gs0NwhR(*Gs?Yn zG-z#vIIY5n^0{Xnxb>`R^i}hn_7|!pa_lP|@ATat8>COmTNc-{OMZ0t)05hmJ>6!u zA~w&LFY~o0D*k(%$L3gkf=<-({U&gy;j}v(@*pzsi`ye$AMgjT`{nlh>RVC=ul;md z^8z1pVqUUr>D~pS$-bxT!!7vWTf7{VPn;38Go`WXwj4(~a{32G6Fyk5XnGykICagx z^;wG|;HmR{pq<4+w&rKQGP6mZ%(*_n>V=81haxhSjc!TFd>78QmUE^k0LJ{B03I**(XN?^!;sNz)p{YcC zwm;zJzA^WZdtZwZG#UM|FInf^9S3ppqHFc+W_RT-y4PPiUH-YuW@+S4L^;dV(vfV_ zxWM=v?+@`IjOV_T=01P9v4dhM* z6%DUb0=BeDr|(2sZa)02+rj?D<0rSsIA`rw=A`?bDt7jd|H6;gZ4Td`1we~6^(sBB z_0~$9?k>VV?2KzU{at&1+@wc>DVle^LTe!-T~HR}{q@WE?W295{H}l6V1w#k{im7PSNS(h1N}dn{Us}$KORDTgFztxSVD%H6=vKsmGhOTsk#f z+y3S`(Dt@i9r5Ct6ldG;&ud7|e6v}cet9k7Wp@g{g~R}xY>nnQPdfa9*f+*sF6;eb z_Pc@qrcc}W#QAdG(}e4SuJrY0+)wK(%YXylOJBG0p3N8(hI-l6ol`#TLz8WqxV5r` z=Rb>8QnQfCcY`|oU5$I2w?$D0|LXU+asSOpzH*s7NViy6a9f5(9>-rdQzJj$300Gf zES}W*3wqdEAVs(r!FtS^N;4oYg2t9K_d#FRr>>uAY7bmABMcSl;l6@psgIu&o)%=! z2eTP_hha*Uug-JZqsE`{%<>2Q%h(ftRc6xSQoof05}@dFB|uVO&qfc^e(|{EM29FU1{F(k9QDe}g)LNf66F zNpyMdf#YX7TYIXM6*KZF``jB+v)5TT0m5AQ8_C?+9~u>zI@;^E8n<=%F7E_+HtbBD zB9_IE`TTxXOw1h53>66(?gVVVag+IAjr9MyX+IbY$;xKKh>f`taug@Nx|Ig2!6; z?O~Z$e1K2cSf(?gnd*}7c9t6*`t^20>4d3js#0gF6&C&X<0fuATZeN%;PL=`pCopF zwdU$Ux#kA3zoio?M(^x56Fd<@SgDEA^e)c2juPJal!Qs&Z45dPLZyk%+iO8$lxKl0lczl${7-*-%9mjRAiuL zhs%sxPq!3s(FCutii);rH>DcTUWXNs{`X*zS}E>!(OK!5HKSJ*d+0ISyMeLDc=h)~ zHTfiggUr#2TI-@>&cx~~&F>!+PUJ#fOc!(rao?-U1^4A;$dqc(333k{Tx2jM ztbSsgE+1?BwciOp>57pkd-}}YPvG_j@|;%@fBjAQ^H*4S&f$7*Le{u%pYeuohi0sC zw%`+m`-R48zb|J45a?oYd`s5;0HWY}b{$%6&SHRP6KcN_-s6?r7@gHpFg0s0(Gp)| zJ)X}-(&&FpQDAp-IA5+gBKb%dNfWZLiLBeY#J?5?;9`InSR*v-;qVw-{s6*fBR1f5csL*E6asRt?9>uTCB3BKw~*6PwoV0w-sBa`UxYl1XY zsWSU{_o1{v{Pc}Nn1u8<^;zFWA0^>v6uy=P1j0p~m3+DZveVXy; z(WhCT_Hli};z9yDhQyT)@%W!1p8qq%>wktc|DPe=|1+e;{|NCcRcbOTEn1zZ)9SU! z2KO%NbT3c$SRGWeL7fF7H%X%*MA&6_qdWf317@S_-Yl5CF>LP7nh#zK_qv~^Pt@u( z>I4?;4MxN7sb`n-w;ZgC{;k^(p9{5*j^L&a7ITIz#B5uUxL;hCHd8nol(+iLo7p3J z+>g)E8&qlTff*Ub2NPoay{rIr6?au*8Y_Z!_L_S3K+$|_7GI&&XxRH>@Tar)coN%f zPAwLXbLr6jw<;r?y{e>cDZ{q3f$P?@E~~!hwV#-9OkeB1P*8?Jj5a+?1#5viQDW;? zJ=)8>r)}t@$kFe1-XA}$3|saDL_J8ABr$Gu$*E@Fjjn;q_FR>Bo=`il*cfh_(&56Q zVLjD|D843_G}HC1tKP(FhDWVD=yW7|(*w)0?Mvs`)a82I6XF}SX06|@JzcT_%C@1; zd+1IvP@j`-yy$~0jfF3V-e$2OWVR(McC-qfzTW>E;fj-EVM1EF2{Brl?-O<}` z>L345b#o|=tTV>k$zmQK*?)4vF-_pQ<&CCnnYw!+i%H*q;GJ-B0~nKDHG0fnC;J9P z=WTSWaK6AUfHx?ev|saH@575$25-A}@aqcK_6lQ6wK64Lt2d|r*~x~q}6JqWv{+?)tJv;6C-DKojrKa=P&7HnPINt^A%=%j2TxwHzK6j*o#q{ z|J5}$pTB(V|1gG4n#3^WO0BGQD=R4SBf2lyxTfuOW++B_jgjsX@}gO6Wa5**f>$mM zc>l+gIIC%hd}NqYeiNPkK0|NFx6-HjO1YZCCBZ?4!Q|9Js6FTv|Lhf z^^$AQBIgaJJ^49$xnsaEw;hfB%CzpH#1G_j64Ql~>z&!M zH8FbU$q93ho;*6M#54kCf2Bc{6mQV#@b*cxJHzaJJA{M3cMr(TSjP+}LY zO4I6cqUmRPn7v+NX|v1!tkS=R;&;2l`h1taK9pF-sxyjXpJlP9^&BUxy}mGbLy}wA z)xAogBzC9tG-WyzEJ@6eJ)JFWJua`^O3T}A+Ra?*S@rS#IXjs(Y>)>?V*WF~dhVvU z%VC9eDvdgu71o-MS@OzVTDk>G!y87{ni9QsW7ydHnSvK@g`d;HzC|OwAVu3GucGxK z%RBcU+BfU>2;QVarb?HC-$OH-^Tr`M>HUYNch5wu9@?v7)6Gf7O<0V|xLbR{BG&1$ z*<@JPqwV(0oo&4_Z^aBQVmRCcvDg<_>?fu_e=}cqFL0C)biZhM>=iC{j51AyH}9HE zZpJX$nFW8Sa4KYB`}te$%-Z2UGK9BN8So=k?BTjJWf`_TmfuhNxzMd`Q5V-feSS`h z=WJt3CSGIgU4Ls{n{RmEZtNb5IlJ0N-s59S2g5~XGi5>3>a$0w+U+N*uh8$*biCJ_%|2b@vc}Ba%|ET*c zu46izx6mf0s*1C?%nSl^PL8cuHBK?t`bDGUChtdb23=GM;VNYke(-4A=1Pofg|CmW z_cMted&+Z4x2DhXOB)+ARA|&C+jpbseqGmR79SRd%Fh&9`T;^&^cmdXs`RLP~U-WcB|?!mBEe|8Gl5&QVJ!kjyyzsCP%ak^@3 z*g{1Q*`9G>TbDl`f8&qQX}_BO(u=M!)4%^6zb($}Th!*JPy0QzUp1iE)c8Ovj<%V^ zYHRm%GbiqSt=O=d)VlcC|5X`QqA!|GT~hNE)=GuPxVX?szvX8o4z4@t7jto^#;mS0 ztEi*V$08NYLw9NK{TM%Yk#R;b?k*JUc|^QQm!-x;I;-`WN{vF2N`tHB=MA-e!?v&4 z;=ISFvQm_JJPfl=9#yFM>_f|Msw!ME<2gZW>2_JByle$Df3)*WUI0 zo*djoViyj#yCn;T(P&(+uy3|iJ_k+F%lGVSwP(D=Gc zySpxRzr!Ovr(LT8MMZxY%XuAoye{3GR;*Z|{Y5&Why2Dc0IcnX5 z=-cnYC#tGy>(@4xi24;SLRH;qqzM(fPH@?>?-Hf~tivD3b)zZmIqG7Q=joid|ej(eacMGI&9{gO)j$kpo;6|RaERlT1+ zHMFhspQ$MH#+CLSGyk*mo{M9~{~J9wpnaue(~yAwG!IEn)Fzdzg~l}E^&N6AUF;HC zcVDl+8jUk&UoA=<@gj6|T#sdr*{3HOjr+j{mn-QbV~ZwjUS@VIA!hp6 zKZaFqm7n@c^!8aQorZ45C6*N$-T1B;|1+v+>A4SYd%Rrvi)BZpKGj&dXUwScqutJ9 z8t;xA(QQlGtp>*j{0}3^?)NFPKDfkHIpx&Xwkx}D*Ny(G-hyAPsZWw;&#@N$wszka zwkh&KK(fpA+W*5UR;$%WEZv(LIDR(D~Sk`K*F`_y>NjuP3iZ?8>wrkVV z>)awD=MPA7d{Xh}c^0{3B7MV_@7aarW|VjC5w^oW>UGi^!$dA3cWd;HC99vMc9^r- zM=>jF4Eet9;yo_5xCtt?D=}W8;l$b=OQtx)%rWs8kbCb+J*t+@W&&~BNZDcHA@l_ek)_2ZK%^#Z@T(ID%-SKV5oAYL|N<%+M^oYN|4sCIG zSNje7*IP|7U1a}Dbm=u24M!g65*b&xrfr^?dCjel6KwD&`W59?=J+4hn2V{H2%G4S zn%x^ZSdhH&GD~OTC?jUX(KH8tf&S0s{tjqFPXz}%pc4{Jov_ZL(}z0Y{iqW; zfI4jlIp7cYL-Pu$8=N9Op8|Ho%)5#aabn~snc=?Xhjn1zw+UM63%aiXerl0Ra-Jtxo%#C1f9CbtT zdoWI7_Gyf>#Pa43W9f{hZg~C_7H^JNuKXopJ>;)t<=Mv0?_=&U>bA{4&+@y$+&@|R zFIf3Mu=wA_^9APAjV-Vf^Dn3(=2K8x%%`A{Se^nevAzoe*!d8#9SUNY+eJ*bpf6)J zOJB$04`$)R#c~u(VCl{f>$_k9b>jxktT-q->E7>25bnK`kQnOcyFGGak0;GwFFSi-=}HEu}x zmt5@aSUGOnU_;+ZyR$Ed%fr|gwv7|EEf=B$O4@f%`B=4gt%0*pnrkJg4CCh z@?xegGGbM1g@4_nNnrH!9(cYE{S&_m3q0i%YC$u=Q*IITlw%CFaKl10Xb*ln zRtRbqPcOu+vxU11X0IMrw#1rvnnG|SPHv_GSlY`-Ia!(&u_9IAqGW0r8sneURa7-A zM|>cZw8Vn~4}N%PXiChX8X%i$SRoMIShu*|8EbQg45|kIC`q6*q*K=#Y$~8lU9_o# z2kNuK|C0z?u2hq_^FIT#<5LuNgy5yR)rTvyXSVbj8(HAr32svZGHZjSbS*9=#4rIf z3=VDp!9nFAxRw(HmuJDWA_Ge5wtO2}Z&ib+Q#+IyK z?M$Ga`vJLP*`S+Lz;&cNRID}qdo-0~gH5qimZX6!w+dcCd18{&)s$2xA-2S=ywX+- zb&}=Q#W@Y@E(G)R$3u5hWA#^Jx#M5qYgEOmB!jB5!IqdgJwyM{PEFZh2Vyd;r8#uJ zL~Byt6!I_`7+^|liPDPHw*7ydeR*(ONqS$S*?bLv4_TfqZ>DyAwv?=kp+MH zA*y}3p?wna^>2dwPTv6fFr7dju#-)Au%L0J=S~?b_kv1|rVyn>9^2Hzx z>FIqwgN>68ZZ>Lyu>Q1XAjkbuRvrvl7j~3H)nc-lym;ny(1X~6t??+tdfgb30x@@567Cl|Yz5Ronlysz{$jq%gPsiDr%4 zU~iSR{a=e1Lqzh1z2Q?C^g5gTRvEDLKavngSU!8dJ@Eb*&+l!|3z2a5kQkf@Qo~DO z=%XZk9KqM=cfLa0wgi@YIV@7*Wl0|-06B3gNCSAup|2Yb9X-NP`L~YIWTvHJ$b+ym|^o;|o}o`veyZ`R+|Ks}{r+pW00> z9aqd-zPxXA)%sg7CbeeT_{n{3jC`mK-V4k7xkmhVytrZKB^l4EJ2<>bHM4Q@QI$=btwbC6(Ef%lq$*=Kud}g!tyX|3lMw1s&;A;xeg{r1$?ql1L?5$an@* z*bQ!6$`)dTC%mEA1u3!9^G=i=piUpc)rAfINGH8b0*M#lRo16_Wb7b)Z-ud)N z9V58~La6~!;C=4~8-d1Ok2hMF6+?S@+r^;&NH|qyJAmWv^kkflFJn|IZS-6_o@>D) zxqYK*Ek^J!R^flio=BF&=F)&p0Dx` zMoE&1S1&oDAR4wVS`0duAeu!D!xlVGoB!Xb0Y^u>hy-_lh?pPQDPoP%0flP^t@2&? z7s<01Q!G{Kia74i%h$hYa6IFu@&Kk}2-^lubvEuf6>;!U9BRwOk!u7f2DWO4ZXJP{ zrzfe;lj0oCOv_q{sI`r0h)oi;V%B=2E1d`R+a%b7hl$`pNY*Q^7=)LQFfLsi&NbCP z2w=O$h(3*=m~_>sb%xzue?HReM5=?(E;^82lP=?wKL>GUVE%N0974vR@FL)FBJ3}jhb{a zOAVtgn5(4#eVw;gb50GuCeb7VHAy6RwID>l_i5@uKf7Iu_c5hGbp~q?C(&dYng-2_ zSvqP1rTf6JBluvZI~3e*#k9+S=c(F)SPiNY=^MdN$lgN&xzqtG_&Xuja7RB(7qMAf zoP@eNs%mL^UaCPcsgAKKJu_h^LSqWK)q`E+z7CRZ znuo+pg6(D?mcH*g1K)KBJXFTB4LfrV+}1|X9KN|yCC6aacU>yVuy&NpHObxKa4k<- zkvetIsimM(g5rc!718SwP3IvVi?H@-D6@GbGU&}{Hz9=^t~A>Q?=YtYjTU0%%ktIm zn6yrtI87oPU1vx3!4X)v>QoP@nAgabbANn)d`RxZa3%!Dr~xBj$D0(FdlO)R_lk{q zyGOZ=;a;ML_c5O!Ot4ve@cW0+ofsypf(eWH4}bm`Kit=chkxK7Qj>IrqPEC49c7fK z*fI|{&E~O(HLUntq>*C^4PqUnalvj$J4YQfef_|hvl!PtN7Fgm`Ma>fdCUCo{-F z6;%YL6nF2F+YCkyT%r7A5 z)2t1Su(!pJ5*&y^omR>5CtI94P1NWzzmZ-!uV;p+7Z>TCgc#A}8r59u&uefTM;{xA zMrAnBf~oEXuSp-Z53TE@QLe`j%HyMm8Sjt@BB?hjjFaBz#qh=-`_a~82t!N+h1I>u zdf0$ko*V`k`?!wK#FMN<<$c%Ucye0hCT8O}T;()C6{It>#>t&(gy%byO8Akp~0i97*kCB5%Q3xGKlI5zy!M-V`|VRHh^_Y2xF)~Frql2HTx3;{rH z!cdd$r8n^mWrB`>ITSb}HyL?EjWL(o=AOo=8?@d}h;+$jwC?>x)s;t+&DC0nnZSMN9ocn?2Ho$3~&d(m0pGM>Dgj9CGVXf@Zndh~Sd-x2{wt5m)+; zg}pnvj7Mhf$f-4+-`o^Jvwx-=h>OWmk^j+V(jhk`|G;I3_uq(;9BUj`WW~JCO2W&R z!vt`tuUDrrTYsx{sY zujo41WjNGmb1l?QB()>)he%#M9ko$!>zYS0^S}*7h(tce5$*O4?fREbmvzQJ&i9z} zuOA?YF|Ju*;Kx;~F#$r7D zCj!SUjW01f_Z<4j%LkGA%vPK$oVd6>OOEa=Y2&k)h70r&@IK=pnWX#}OvZ8+3BH<$ zTRR*iHL@9}=8Oq$hjVCVEl4iTX08rV0&4BRLGqH$nj8ZVKWV=lY+av?y|bc=h%4m9 zizVDrW_Q*UBjm4hRN-X7hvx+!sm+mqcF|1nG_Vv;lfwmSCF;?nVVyRY4uUx*F$g?5 zFT{gPBm7szTD;u|`DJ_k*dg{}v~eL>?tFwh4usnZoHPPKA3*M79QtMipsC@}EKY2Y zT2I|X@3+SEtA}aUI!sK2{UWP!dYu~VbeU(ZQ9J~++iC`nL+2-r&UaFK+Ts9&fxNsn zv=kK|QKARLAc@$r@srpJ`*`Vno{aa21$upsUO!-+f9T8!_|RvA_0scEI)Ya~d8)SB@o>e*w%1Uk9~ zv)`E^MjMCqn1Kx3byyK7ZPZd*(`@~wCN={sI{&{>7WmyO#tv@aAOibFw*T~rM82bBby~eHoea+5&;qS<&?G-rvgOE zX~NJk{1$sN5hiE}lUL^%!GOYj0Wx2!1pSd`RI(>%#V~|40p|_FMzP5q(~G|7MgpwN zMmIoHupY!@=OB5Uo(V(P$##VwtsNDj>t*8n6rw2XlBZ#wSWmF8tk~6UBurv_>PD#S zlsU@5)D3MCz>6e^8g0smQve@Fm*7;rqrvCI&SM}fp_K+0XvZX7O6;I1db|rGodrVf z0-))!QL)3vgt+W|L8k~}^*ME=Ks*9>IY=%<%_#88&U)Ge)Ot9mtZH>UdAZe(kNE`; zb^P31H026a{+H^AxO-`|uYKjjaZ>9Du5pOB)5g`}$d7BFtr*RUz`Pz}b(IiT;OT8b zFHUf$CY_UU|5btU#%@B&-P1ZjY(=`UUyia*2%E0Bfqo@G)*60iq_U!0;CSYY!1TZs zCnha|#0havss(ewh2YaG=Be$uJ33}mZ3!d=HU~R5A*|A3G8z0#!l6lcNvatUwjtR2 z%R)T2tt%#E(kLq$-V>90QEqhs;FZl}6)-U+uy)Czql-{yo#=lrj?PI@1(?fW0tg%2 z&ayAHSlQ@;6VFqEK+mh*=k-y=>}B|OjK#Z+-)?RgJAs${wvL;qpT=(rmgViJ)xLSr@Z>rW#3S9dgyFb4ISjR5y3$8+Lcoz?B1W! zBbpU{BlT@3foyEbXzfK+>w<7(OeXj_L`T{Yjp3j))0;72!^Txi{XE%|>dm>+LR7uK zBQ|QoNL^5_S)NrU;7J|2q(rBgu_{tf7x8mQ>_p{BY|jXBbT>p0coMI8MT#+udGIVL zs@;U<&|?gZOezJIQLdSj6!Hb_kEyvxlz)4tcekJJ=4f)kmM!3?YErvn+Jv8+U{Q2G zA&nvUXAk2D9K=lc!}^v<7!p4`y%!HDnZk!It{frsguZp}6cOp;HnT$!ys|hFibDI=FUO}D5GD>pIJU%o`W&BXo99y#?3o-5*$`sU7>b@V zp_pKas>tE&IdWAlg*r^3P9vBu5+-#{IHu`5@#hB25eYPoZ)^5t@Sg5_y5j;Vt%sVC zR)}Ek7>0MAeaB`{dvt|*{&vVUNlh}bZDzU!l7rhAFEQpAfI$F>IYNi8UqoE`6Xfd5 zK$*lL!dYwo*$TEQG9|4FslpDSRaSAVjjNW3IX7|u1NC#%tseRGeu564r|+^;38n7S z>mSsV7|4jIKXa<9gM%7f?CZ}AM5257DfrKbnw%f^@p?zSz|6JrlX}#Id4gxswwyb{ zEYr5c)7X8&)YhEgZZuxXW`)1_=K%`qwF8VP)R!PZg zuu)Ifw9&dnE6yB|IdzHP1c3Lj+6M)5@Bui=)&+gQhQ9;kZg{+;Xd16XMLv2nNXS|- zZUYwHUVuTF)Dh&gcqYh457Vob5cZx48J&k*m1t3GL8Mv`4y}cdkq(iH;BgErlXjd& z4|~w;90(Pa{L{r<7fAXd;*2CMIGF)u@8TE18%6diG4Cm)wdtiRhyk}sOkX{TP(`98 zEN8h_F+ndc!^2HFiv9Bz>I=a-xi!GLvMq5oAzD|-Uvh_xk>II##F5eLnGvMAW?>Zz z>x~!&YU-l&v5ce9`bYTmTX0Gv4C|Zx>F>CtS)}VhuI|-+CoWx~*?0{M0tu)hAa+C% z1&)9W!98ym9uHv--{T27&OdU6{9sPOKGELyK8IWkLQWOXJ7IDc^p0M6%@wn-+y%^Y zH;h{zP`v|{1%6(ECoF-Q3tN^!@5@7uvdUzJA_y`xfs_d`deQH&RG4HqNDYjYO$KfD8 zLz$b-W?r;926eZH+YXtYGWb+OgUEZ9FnKOOiFkjgPhCZme}pE*OWb7c+c$X!O=cl$ zA8yj+;LU&47$EWFX8(iLsZ#&sL%J+VgY+ec?Za$l^c7cpn{oeo0GN;usInK*=@&Vdi* zBNO0pQzk4L3kWedOLAI-$&X0>`MPNoY=$?zpG6Gk={1hpG=Ps>>OifoM`I z=!4hj6+N0Og5r{p$uhLrtaBxTu7_zzOPZK-J|kWy7XVrt=N579Fjz2IJc}6H)2(_0 zx+6zDWoIE7eVKFKs1Z&hDV9e6dysXZ(*&LY-?qzS5(~pRYyxm5-%PGGM8D6Ln_PQ= zEb^?DM&XSp;?$_k^E5#OwHY77E6(CFDsD!6g{3qOi7cb*9LsD`HBPdHMAJsCp`k1) zWP*DxYR*ZwAa172tQ67oQRw(MN(lsd*LJ;$I`*WNgp@|1K{EzpCLeFpXk#px$=q33 zPfHc9s3__Tn#x1nf)NLMPNKTv20++wkx158FFFoKz28HO`{}$k896`wgoX+uBrO?R zAF;kpl$|8X&HznEEqN{IEhE6<%AR;V29z?sj$zd%CEa@PA!%Zf1__tc?LFPQq^*K` zksRym1Q<{0h&kcNo;?{Uz*=-eC|t>Pd*&sPu#tzA4KmnQ{4Db}Ch9cQ*0`+{LAr_T z(M9-ADY%@2XqTOWC1}f+F){qs8;ZD$;N^`QLJZv_5jpA546y6m2?k=5#sw%YbwgZN z+gTGy=ez=emoWKe^wH&*fIR{7Rq}j_Lv-~vf5lrSWo_~%%JV*1@^eoBmz&K{@okup zs2%9G$%sXwmw2Fui9}7__vPHWr@`sCL3Aw*UR;4WuNp$ph~<`{c_g;sJ6mGV`?4{l z(?h^S!~05-P1HO&b0kjIDWZK8|MrjzGq;9K>zjAbmtUgME?PH%(~V`tmAyp&VVGQ= zr8Z>2m}9tqQ_glm97HJt+%^+!Y6DBQt`RwN1O9zuh=H<6ZzB=aQYugRrM`Ov1C?iBqyNU`e3=jxlyR0L011zYbHR;9z&^( zd8Jf%?Jl(lGt@_}HJlvoz&K269uZ?=&AxeFx5;^b7SVNSyJ(;9w8WTvZXPGI;$p8y6=4vr5R7}_ZvN!$9o14 z^DbG4!lDji4rvGV(pe(P1xL&pBzc=fOl^8S|hSig=xF7fVHKdW)c~(iw%{1s^I%wO)WDKwUtj zirO#)2ZWvo5_$Oo*X_8$8iyhX89Pjxq{#>)lcO`}^HV=(?7r zOVBJ&@6{J(v@G8U60M$|cm2$M=kw$b9Y=I!90JIB*zoF`h;%mVXY73Md16lA=_#&| zExMFdbxU5V4?0hRrq+4Q$t^BiOy8%mABK+Z!K}iUG%|FwPgmw0L@#Et>ZqK7xCHMq5gr#L&wyPi*H|B3=P=jo4ra|2TTPLlS=tk-Ro|Z!9t) zz@lEr5<6aZl;SGOMzQ9Qm~(Wt&D3tuxfh&T8|+~mtRN$vPaz}LC$HeHgITW5!O(_kO?`Iop~G`r)I*!4P8((V8K* zd0y^xh=wN%DE(X~=SSU47_46eG;(d40zVQzu={&7abcw5hj1;#HnDyb_V4;b4V{4c zWL(SPi0{hdsNKKokDqCakA~|<)E3Qy7~I9rq|b22;e+A1ztr4jxZZl0uK7oKgYggU z{%=M~6YkY8O~9)N(I=yKLkL+OvE}A|L_Dd7$U*H&1FZmu&my)rVmu-kexTJ!dAGTK z4rPwhSpMnW4K|sw{k>2FS%AX6^}*j_TaoxP>kdBrks6<b zxC4**6bh;t;tZW2~=s`zao~9577Ve zLomaU|^{3v!8{uS+-x+<=unE`vB1$#UfB)fmoA=`8SXr%&% zVof=R#57k8M8O%&qM(Q$Za0!~D~3s|Zdz9{4z$EVNl&z((!ANgonnwK+yZH4>gVRd z)aU`5up*WbW$!PH5{QdasDbd8X!g~B(EdsXjcJ*Jm~hnl2}^1d1VzY{5(VT|=XVIvx~nw8??TntUExc$M%``>igQndIItVlNrS0Ea>3-l zz!u#IdsQ4$*vo5KlBN)47*SB;5IvkV0h-iNHZ$J)o=1MvZi&XX1TLI_DV+k;?zSa* z^b%z(SF_yVWen1|LkU>FJZC4B$uIa99Ku$Eit81OwH!hvQ7<4s1cgZrS6<}R0AbNR zcGDGISk3YRv^~$uFanxfPtvs?{jsMvjaJ#5xC))$rODY{BdR9hhh)^jAW5^B4hA_6 z7dA_QPdlV_nxU^cp<#N_2)59%F)c*64H-lAb;2MYCPF5jKx^ z+Au>v9Nho-$g_`^!kpqTOA+k-hl5*jv<8)NDMdc`Yj&L>RKtm!X5^If-XUX*s;x`7 z+GWZdsK<0|h{LTUY#b%NijQf0T*Jo%%0h1P^NudLlcKK<Z{hOo#_$ zCd?8k?O=uNc$SodgHZN#OaKk>(u{dhXJLFP;hC!U((6{)`(UeIVZA3t^|qlC6)<*hav9u)VG&fId0C+XN#x*Q}g!H{HO17xk>hgsy#wyCy_ zZUhaS>a>g5I5t++hrCY+ak{FrMllZ|{gDUAn8L>j7R>dTP{(sbYT2&{u~gB@HLf}Y zCJkpkik#8Yv@NOPY<1Z#no0ZbDwOoRpBC$vocScbuTPxIkw}h5#DKVvBial`Ok#RY z+{n?ymLlSixRnzDCktQgwQ444w7m;B;1wKK3iCL=z>CN`Zs6{x=j);D zp)nwfo8ITS!<*b!1oZ?*&FzYIKYlpH#TwD6ezcoDyl+>NV;o>|Pjbkv^Q>+$k=uF2 z6PbkqJh-pyyyK?kqI^EVbu2HVjs=>#9TCHj(cuhRimz*1A8F(Dop$MHkM{}t|9kXB z=p5`SGlr=AUDVO%>SYfH!OT1n1GcCxNCuD;zxS?GBh<<52sBg#H%81dP8&apOqso4 zn#`h{Rvfj~s~HAuxQL@c3)=gV_bDO^R;4GEUwF#tvI2}rqQ1&KFadttcMi z5ht+q%2DF|JKnqGWS(|N%e9+CtzSx&H7bkHL95!<(9}gNVohVPLGwDAs1@(K5Dxzm z4T6JDyjq3~TR{c2!D<7J@jzP5*Cb3@EV$i3#Sz3;}JB=2h$(y*!6cTEvF7Y~l`im<>K|I3BVRw@y*H%!d@YcVHN zT;V*HYqTpZ+HI}|J0@8cNkO`(;$Dwu3&hX0rHW;k7uO z9`P4)2Z<9%krT@0%OlQeo{`cQz0VMKKgm@CmjiUuV8SGZn@wq75jo16;Br#%X&coc zquEXKw9WC#DoxQLUPhM`D?tcggW<59FvhF^s7DNh8bH{9LuVCCPZGUv2Y6|?w*)3w z3sVO(4D$npBMaX566f5@$LqRz9BI0g9M~&l@0VMsARAu?E)G%ChWnSvTFaV||yUE`-x;V1EZ7Q(1D1@HPMWJWRgKpd&82bQgffM|aZ@T#;aspf&K4*mPVz!O>o>{Tf*I4JHA9r_ z`UCItSb_3`nwgLqPzQ9KhdKb2`y4+$nLrGrfMU6rycRT5kVTax!LM3{Hc;5$A`BmO!r|Q~xz7}blL#fZ~bHt8>dh&h)U>W|Q^FZMBABW06CS@*tx&0GF+ z*0ocHL1HYH+lrW(xQ%$_u}MnKs5%<{1ZJ;cd(IZV%Gx6{bx*d<)MeJaPkR3h+b;f% zPQY}dD!#JE8@+NXfx7U7xCxnxs)`R)kh9-vqSh}Em7bh8er-_hT^_`$gmDBR7SIWP zUT&w%`yZJ17pk{I;w{bs%IyK~2kG3dtARxZ_Er{+LYjiuQ9(XAY?tg^gXSA;^Q*n{ zR`Weu)bjOj-uHfpgtY_SvQlt|s5eb^{}3BA9DtXz_qD%%#0&k{v*KB4uLp@Il-WiK zOV7<~10-HXdCzlNY8>S{qxBuge7(GHS1!MUC%i8T(bA=x%uTImb(>Ur-=Boou5RgOBGR}-ADPK%N=;?|YSh}_}@hZ&5M=55F5-9Y$K zc8i|ydNcG z^btTzU@<>;-ecB&XVCAADd7~U@qaxTd2g# ztcFqJa~i6$Vpj~uL2Pa?8{64iiQg>qE%jdKO<`5hcCTjs-?Q&8uYSb)3cY_fzVH40 zaVg>HEP;Vmgs)6Tvh8+`)#oa{{OoC z4(}HTD~)Q{@}Yp}RF}B?Bw{xIN&zh+xT;u}*N~r85mSH33){+S9p1q40FmWj1a&8A zvz%;iwNJt>Qs6#ip)UQ3#ellT8&;kS*=-|}vUb?}MZyLbLrvyPUXG>e^?D$~^bd#~T#>v{J2?e#og_fON{rZ%cH0~JB-Skhy5-s?F9xO!hGD#hG4^wpGn zD}h8@n>Df_7m6z$!Ir@l%1uaEB+Bt*1DzfluQ6VcV~VZe7C+XT>xAA<`NRIYwiW+N z3}j5L)0&6h2thQR8yeg{ymWA>-#h()vq)-ti$8M5`iAOah#UL9{rjLp#>Q=DihuRa zJs|0n;4gVD#7W7g#xqTI9J|`t+X5(s<=@Q-Tu##* zefhaOApiCJ3M75S$O!##(WDf5GV)L=X*>qmDBT(#VimMcWR`7Bx`?Zy1~cn+uvf}O zp3C+^gN!Rmj6N+I`iZibK7c}MN4t0REsfYS3bYnaG3a)vf zE($g9Z4tHFI2ic_x5ISpxWCI=vDI3isv$9CNDM1jcmU^w2_}qv;8AL`22>3a92fUH zp|j_5{90aQa?X;ky{p0YTtw8Iwl@V|=uppxR`1+xGJiuR8*C6d!LEN44~|Nt%x66j zn7Q(x)?CfzNtMj&dBSI`SN5>%qD^K7w@6cm^2@S+CXxZflbripoE>ubdWL}C3c7ugZy{(!DBWREjx3`s`DqdlgZrREjX_|13HiF zLqhLP$x!)P39XJLi#QH<2q-$=?y!Eo(m%6K7l{~yjd<r+Khgw#MwRpHLYUn8t_> z`7JhbONq6oKcz#9vODqqP^)zAiD8yzQNh9qyG?IGh4LylPJ_;!>oJeHP*RnP5?K}P zUz+CrR@vQFIB>1Zw~E18>yjkI6*|`|CPC4rma%$sdE5S>&x;SP#2)cbRMG{3Kx;ti z0o#vtnH!w#mPbz&Kp-9Y8n};6V*xbQ37<#?5Oy3ML8atnIvo0Iue!6;^(B4+=58X~ zyJp)ATcUyuV&oE?-c+_6@}>1u1Bp%!=H=3rShc#5aimBQNdJ#*eT4y|`O0D&K~(@5 z(4nB~&@!s|oyCdi$9M4@O(CUV@!f$op;VObHx5oK)(E1FbhO&qa_gU+AZ7Po*TqFCe_V*Vl?9?5MeqPpt!=-+4 z1B#oY)td#aO}2+`yT50*D2uR)&znx~+D`Qqe%Kht3#^k6z5o-l%3<{r51%eM)MU-p zQ_c4bhZC=g&a{&|9-Nt0dpc%bfYtZ#EC%+CGbeS51_3^U`uV%^Tw> zr$v6?bn6=9#%$inYGReK+sEmfr2NH84L7g$*e)nXs*3UZXzx||8$NDHi)kMmfeCO5 zM?4h3x}YBp=(wHjswJ1eXZcW*OJH?7!2~E_2>AE;XJB(}`_*VUs9UZb^;Ia0eAkUh zr$xePXTlf&VHJ|U{aAQ-SHfX72vnq?0D`VUzLs-QNWlmizzSpGX+%7eh=f}p{zt|j u2CriJ7yJGoBPIT;nSUnu*#JKXP9^;x>~O?GS>^i`%JTmG?MNx#qyGXIZrKz7 diff --git a/Packages.proj b/Packages.proj index aa8f04e..122985c 100644 --- a/Packages.proj +++ b/Packages.proj @@ -7,7 +7,7 @@ irony.snk True MIT - ..\Nuget\packages + ..\packages snupkg True True From 15afd24cbf27c40c18b41ec9af2976f47b6211ce Mon Sep 17 00:00:00 2001 From: rivantsov Date: Mon, 8 Jan 2024 11:45:21 -0800 Subject: [PATCH 5/6] minor edit --- .gitignore | 3 ++- Nuget/PushAll.bat | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index d18ab91..dbf94a2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,10 @@ *.bak *.orig *.nupkg +*.snupkg /**/bin /**/obj /.vs /.vscode -/nuget/packages +/packages /TestResults diff --git a/Nuget/PushAll.bat b/Nuget/PushAll.bat index d380afb..75090b8 100644 --- a/Nuget/PushAll.bat +++ b/Nuget/PushAll.bat @@ -1,6 +1,6 @@ SET pver=1.5.0 Echo Version: "%pver%" -dir Nupkg\*.nupkg +dir ..\packages\*.nupkg @echo off setlocal :PROMPT @@ -10,8 +10,8 @@ IF /I "%AREYOUSURE%" NEQ "Y" GOTO END echo Publishing.... :: When we push bin package, the symbols package is pushed automatically by the nuget util -nuget push Nupkg\Irony.%pver%.nupkg -source https://api.nuget.org/v3/index.json -nuget push Nupkg\Irony.Interpreter.%pver%.nupkg -source https://api.nuget.org/v3/index.json +nuget push ..\packages\Irony.%pver%.nupkg -source https://api.nuget.org/v3/index.json +nuget push ..\packages\Irony.Interpreter.%pver%.nupkg -source https://api.nuget.org/v3/index.json pause :END From 95c7824b8ea84bf93d524a5a6a7526f17e83fad1 Mon Sep 17 00:00:00 2001 From: rivantsov Date: Mon, 8 Jan 2024 11:51:58 -0800 Subject: [PATCH 6/6] edited appveyor --- appveyor.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 8a08273..16a81ab 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ version: 1.0.{build} -image: Visual Studio 2017 +image: Visual Studio 2022 configuration : Release @@ -12,13 +12,7 @@ build: parallel: true verbosity: minimal -after_build: - - cd Nuget - - PackAll.bat /nopause - artifacts: - path: Irony/bin/Release/netstandard2.0/Irony.dll -- path: Irony/bin/Release/net40/Irony.dll - path: Irony/bin/Release/netstandard2.0/Irony.pdb -- path: Irony/bin/Release/net40/Irony.pdb -- path: Nuget/Nupkg/*.nupkg +- path: packages/*.nupkg