From 0af04e3ac9fe5ae5cd4d9af3a01ef5b6911b86aa Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 12:00:14 -0800 Subject: [PATCH 01/30] Replace GrowLabel with System.Windows.Forms.WebBrowser --- .../LiveSplit.SpeedGuidesLive.csproj | 236 ++-- .../src/SGLGuideWindow.Designer.cs | 63 +- .../src/SGLGuideWindow.cs | 79 +- .../src/SGLGuideWindow.resx | 1072 ++++++++--------- 4 files changed, 712 insertions(+), 738 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj index c7906ba..7a0cf93 100644 --- a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj @@ -1,119 +1,119 @@ - - - - - Debug - AnyCPU - {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5} - Library - Properties - LiveSplit.SpeedGuidesLive - SpeedGuidesLive - v4.6.1 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AnyCPU - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\ext\libs\LiveSplit.Core.dll - - - ..\ext\libs\LiveSplit.Splits.dll - - - - - - - - - - - - - False - ..\ext\libs\UpdateManager.dll - - - - - - True - True - Resources.resx - - - Component - - - - Form - - - SGLGuideEditor.cs - - - Form - - - SGLGuideWindow.cs - - - - - UserControl - - - SGLSettings.cs - - - Component - - - Form - - - SGLTextEditor.cs - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - SGLGuideEditor.cs - - - SGLGuideWindow.cs - - - SGLSettings.cs - - - SGLTextEditor.cs - - - - - xcopy /Y "$(TargetPath)" "$(SolutionDir)..\LiveSplit\Components\" - + + + + + Debug + AnyCPU + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5} + Library + Properties + LiveSplit.SpeedGuidesLive + SpeedGuidesLive + v4.6.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AnyCPU + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\ext\libs\LiveSplit.Core.dll + + + ..\ext\libs\LiveSplit.Splits.dll + + + + + + + + + + + + + False + ..\ext\libs\UpdateManager.dll + + + + + + True + True + Resources.resx + + + Component + + + + Form + + + SGLGuideEditor.cs + + + Form + + + SGLGuideWindow.cs + + + + + UserControl + + + SGLSettings.cs + + + Component + + + Form + + + SGLTextEditor.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SGLGuideEditor.cs + + + SGLGuideWindow.cs + + + SGLSettings.cs + + + SGLTextEditor.cs + + + + + xcopy /Y "$(TargetPath)" "$(SolutionDir)..\LiveSplit\Components\" + \ No newline at end of file diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs index 4bfcb84..089a492 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs @@ -28,28 +28,47 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SGLGuideWindow)); - this.SuspendLayout(); - // - // SGLGuideWindow - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ClientSize = new System.Drawing.Size(469, 265); - this.DoubleBuffered = true; - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(2); - this.MinimumSize = new System.Drawing.Size(80, 40); - this.Name = "SGLGuideWindow"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "SGLGuideWindow"; - this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.SGLGuideWindow_MouseDown); - this.ResumeLayout(false); - - } - + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SGLGuideWindow)); + this.Browser = new System.Windows.Forms.WebBrowser(); + this.SuspendLayout(); + // + // Browser + // + this.Browser.AccessibleRole = System.Windows.Forms.AccessibleRole.None; + this.Browser.AllowNavigation = false; + this.Browser.AllowWebBrowserDrop = false; + this.Browser.CausesValidation = false; + this.Browser.Dock = System.Windows.Forms.DockStyle.Fill; + this.Browser.IsWebBrowserContextMenuEnabled = false; + this.Browser.Location = new System.Drawing.Point(0, 0); + this.Browser.MinimumSize = new System.Drawing.Size(20, 20); + this.Browser.Name = "Browser"; + this.Browser.Size = new System.Drawing.Size(469, 265); + this.Browser.TabIndex = 0; + this.Browser.WebBrowserShortcutsEnabled = false; + // + // SGLGuideWindow + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(469, 265); + this.Controls.Add(this.Browser); + this.DoubleBuffered = true; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(80, 40); + this.Name = "SGLGuideWindow"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "SGLGuideWindow"; + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.SGLGuideWindow_MouseDown); + this.ResumeLayout(false); + + } + #endregion + + private System.Windows.Forms.WebBrowser Browser; } } \ No newline at end of file diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 2c70062..073514d 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -28,13 +28,10 @@ public partial class SGLGuideWindow : Form private Size m_startingSize = Size.Empty; - private List m_labels = new List(); private SGLComponent m_component = null; private Form m_parentForm = null; private ILayout m_layout = null; private SplitsComponent m_splitsComponent = null; - private ISegment m_currentSplit = null; - private int m_currentSplitIndex = -1; private Guide m_guide = null; private int m_yOffset = 0; private Brush m_backgroundBrush = new SolidBrush(Color.FromArgb(16, 16, 16)); @@ -61,6 +58,8 @@ public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, G ValidateComponents(true); WindowCreatedEvent.Invoke(); + + Browser.Navigate("about:blank"); } protected override void OnShown(EventArgs e) @@ -125,9 +124,6 @@ protected override void OnClosed(EventArgs e) public void SetSplit(ISegment split, int splitIndex) { - m_currentSplit = split; - m_currentSplitIndex = null == split ? -1 : m_currentSplitIndex; - Invoke(new MethodInvoker(delegate { try @@ -183,28 +179,20 @@ private void ValidateComponents(bool force) private void ClearLabels() { - foreach(GrowLabel label in m_labels) - { - Controls.Remove(label); - } - m_labels.Clear(); + if (Browser.Document != null) + { + HtmlDocument doc = Browser.Document.OpenNew(true); + doc.Write(string.Empty); + } } private void AddLabel(string text) { - GrowLabel newLabel = new GrowLabel(); - //Fixes & issues - newLabel.UseMnemonic = false; - newLabel.BackColor = Color.Transparent; - newLabel.ForeColor = m_component.Settings.TextColor; - newLabel.Font = m_component.Settings.GuideFont; - newLabel.MouseDown += NewLabel_MouseDown; - newLabel.MouseDown += NewLabel_MouseDown; - newLabel.MouseDown += NewLabel_MouseDown; - newLabel.MouseMove += NewLabel_MouseMove; - Controls.Add(newLabel); - newLabel.Text = text; - m_labels.Add(newLabel); + if (Browser.Document != null) + { + HtmlDocument doc = Browser.Document.OpenNew(true); + doc.Write(string.Format("
{0}
",text)); + } } private void SGLGuideWindow_SizeChanged(object sender, EventArgs e) @@ -270,39 +258,15 @@ protected override void OnMouseWheel(MouseEventArgs e) private void SetScrollPos(int pos) { - int labelHeight = 0; - foreach (GrowLabel label in m_labels) - { - labelHeight += label.Height; - } - - if (pos >= 0 || labelHeight <= Height) - { - pos = 0; - } - else - { - int labelEdge = labelHeight + pos; - if (labelEdge < Height) - { - int delta = Height - labelEdge; - pos += delta; - } - } - - m_yOffset = pos; - if (0 != m_labels.Count) - { - m_labels[0].Top = m_yOffset; - } } protected override void OnPaint(PaintEventArgs e) { - Rectangle rc = new Rectangle(ClientSize.Width - s_gripResizeSize, ClientSize.Height - s_gripResizeSize, s_gripResizeSize, s_gripResizeSize); - ControlPaint.DrawSizeGrip(e.Graphics, BackColor, rc); - rc = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height); - e.Graphics.FillRectangle(m_backgroundBrush, rc); + base.OnPaint(e); + //Rectangle rc = new Rectangle(ClientSize.Width - s_gripResizeSize, ClientSize.Height - s_gripResizeSize, s_gripResizeSize, s_gripResizeSize); + //ControlPaint.DrawSizeGrip(e.Graphics, BackColor, rc); + //rc = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height); + //e.Graphics.FillRectangle(m_backgroundBrush, rc); } private const int WM_NCHITTEST = 0x84; @@ -356,11 +320,6 @@ private void SGLGuideWindow_MouseMove(object sender, MouseEventArgs e) private void OnFontChanged(Font font) { - foreach(GrowLabel label in m_labels) - { - label.Font = font; - SetScrollPos(0); - } } private void OnBackgroundColorChanged(Color color) @@ -371,10 +330,6 @@ private void OnBackgroundColorChanged(Color color) private void OnTextColorChanged(Color color) { - foreach (GrowLabel label in m_labels) - { - label.ForeColor = color; - } } private void SetPosition(Point pos) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.resx b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.resx index d9ceebf..787274d 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.resx +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.resx @@ -1,537 +1,537 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA - IACoJQAA7h4AAAAAAAABACAA7xsAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y8gr/7+8P/+/uD//x8A//+voG//f3AP///wP/9fUM/+/uD//v - 7w//9fQI//HwDf/v7g//7+4P/+/uD//y8gn/npuQ/3160P98ec7/e3jN/4iGof/EwjH/jouM/315yf99 - es//fnvL/6+tef+LiLP/fHjO/357z/9/fND/oZ6G/6mnaP+SkKX/lJGp/4eEx/9rZ/f/n52z/2xo9f+C - f7P/jouf/21q9P+dmpz/cW7j/3t40/+Oi4z/jYqO/6upW/+mpFn/gX3F/398z/96d9//c3Do/5iVwf9v - bPD/sa80/8nIHP+Fgsb/p6WN/3Jv5v+HhJr/AAAA////AAAAAAD/hoO3/21q9P+dm6f/n52a/7Gvcv+d - mof/bGn3/6KgY/+8uy//wL5I/8jHSP9xbuj/h4Sa/wAAAP///wAAAAAA/5OQkv9ua/b/dnPp/3Zy5/+B - ftr/tLJt/3d02f9zb/H/d3Tp/3l25/+tq43/eXXk/42Kmf8AAAD///8AAAAAAP/IxhX/paNM/5yZW/+b - mVv/o6FW/9DPFv+1tCv/n5xV/5uZW/+em1r/wsE0/6upUP+2tDX/AAAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAAEAAAAAAAAAAAAAAAABwAAAAcAAAAHAAAABwAA//8AAP// - AAD//wAA//8AAP//AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/9zbKP/DwlL/wL9T/8C/U//Av1P/wL9R/87MOf/z8wr/4eEA/+7uEP/OzDr/wb9P/8C/U//A - v1P/wb9U/9bVMv/b2iv/wsBU/8C/U//Av1P/wL9T/8C/U//Ew1H/394i/7WzhP91cv//bmr//25q//9u - av//bmr9/3h08P+pp4P/7ewi/5iVsf90cfL/bmr9/25q//9uav3/cG3//6Wjov+xr43/c2///25r/P9u - a///bmv//25q//94df3/u7lz/8G/aP+Nisn/h4PI/4eEyP+Ihcf/fXrh/11Z//+FgtT/uriS/2Zj/v9o - ZPj/h4TR/4uIxv+AfeX/YFz//5uYpv+pppH/YFz//3Jv8/+Oi8f/i4nB/4uIwv+TkcD/yMdW////Cf/h - 4D7/xsRu/8HAdf/Fw3L/pKK0/2Fd//+FguH/pKHI/15a//+PjMH///8b////DP+npZP/Yl///5qYpv+p - p5H/YV3//4aD1f/+/SD///8K////DP///wv///8E/8zLQP+Fgtr/amb9/2xo//9saf//aGT//2dj//+g - nrX/mZbB/19b//+Ylan///8D/yAbAP+1s3r/g4Do/7Cukf+npZD/YV3//4WC0//8/Bb/9fUAAAAAAAAA - AAAAAAAA/6yqif9kYP//dHHv/6ekof+lopb/pqOW/7OxfP/w8Cv/lZKu/19b//+SkLj///8K//HxAP/9 - /RL/+/sk////E/+joI7/YV3//4WC0//8/Bb/9fUAAAAAAAAAAAAAAAAA/6qojv9jX///cm7x/56brf+d - mqP/nZqj/5uYpP+8u3L/q6mL/2Nf//9wbfD/mZas/5uZnv+bmJ3/m5mf/8TDYf+lo4//YV3//4WC0//8 - /Bb/9fUAAAAAAAAAAAAAAAAA/8bETv9+e+j/ZWH//2Zi//9mY///ZmP//2dj//+WlLj/4+I4/4qH0P9p - Zv7/ZmP//2dj//9nY///aWX//6OgpP+sqpD/aGT//4qH1P/8/Bb/9vUAAAAAAAAAAAAAAAAA////Bf/H - xUH/rat3/6qofv+qqH3/qqh9/6qof//Dwln///8D/9jXJf+2tGP/q6l7/6qofv+qqH3/q6l//8nITf/P - zkP/rKmA/728Zv/9/Qn/+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AACAAAAAAAAAAAAAAAAA - AAAACA8AAAgPAAAADwAAAA8AAAAPAP///wD///8A////AP///wD///8A////AP///wD///8AKAAAACAA - AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8E////Bf// - /wX///8F////Bf///wX///8E////Af///wAAAAAAAAAAAP///wD///8A////Af///wT///8F////Bf// - /wX///8F////A////wD///8E////Bf///wX///8F////Bf///wX///8F////Bf///wT///8A/+jnOP+3 - tan/qaey/6qosf+qqLH/qqix/6qosf+qqK7/tLOV/9nYSf///wT/urgA/+3sJP/FxHL/sK6e/6qorf+q - qLH/qqix/6qosf+qqLP/xcSL//39KP+9vJ7/qaey/6qosf+qqLH/qqix/6qosf+qqLH/qaey/7q4pP/v - 7iv/2Ndb/3h19/9eWv//X1v//19b//9fW///X1v//2Bc//9kYf//i4jo/9vaRf/t7Sn/n5zK/25q/v9i - Xv//X1v//19b//9fW///YFz//2Bc//+WlM//+/tE/4eE6P9fW///YV3//19b//9fW///X1v//19b//9d - Wf//f3zx/+PjRv/f3lP/k5Do/3568f9/e/D/f3vw/3978P9/fPD/cG34/11Z//9lYf//u7mR/7y7j/9o - ZP//XFj//2xp+/+BffD/gn/t/4OA7/9qZ/z/XFj//5SSzv/7+0P/hYLn/1xX//9nY/3/hIHu/4WC6f+F - gun/hYLp/4SB6v+dm9v/6ek9//f2Ef/q6TX/8O8+//PyR//z8kj/8/JI//v7SP+zsbT/Yl7//2Fd//+3 - tbX/n5zK/11Z//9nY///tLKh/+7tOP/q6jL/7OxX/4eE6/9bV///lJLO//v7Q/+Fguf/Wlb//3p39v/i - 4Wf/8vIr//DwLv/w8C7/8PAu//PyKv/8/Ar/AAAA/97dOP+wrpv/nZu9/5uZwP+bmcD/nZrA/4eE5P9f - W///Y1///8LAs/+Rjtv/W1f//3Vy+f/U01X/xsUA//HxAP/y8iz/hYLo/1pV//+TkM7//PtD/4WC5/9a - Vv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/5+CX/m5jO/2Rg//9eWv//X1v//19b//9f - W///Xlr//2Fd//+DgO7/4eF1/4uI3f9bV///eXb3/9vaSv/V1AD/9fQA//X1Jf+opsv/iofl/7KwtP/5 - +T//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9fWW/93c/b/W1f//3dz8/+h - nsD/oJ24/6Cduf+gnrj/q6mk/8/NVf///yT/j4za/1tX//91cfr/09JX/8PCAP///wD///8D//7+G//+ - /iH///8V//HxL/+Fgun/Wlb//3p39f/d3Eb/2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zs1s/3Fu+v9b - V///jYrj/+vrY//q6k//6upQ/+rqUP/o50r/4+NB////Jv+bmcT/XVn//2Zi//+vran/5eRD/+LhP//i - 4T//4eA9/+HgPf/q6iv/8vEx/4WC6P9aVv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/a - 2Vb/eXb1/1tX//9lYf3/eXX2/3p39P96d/X/enf1/3l29f+Kh/P/29pd/7u6hv9qZv//XFj//2lm/f98 - ePT/fXry/3168v99evL/fHn1/6qowP/6+j//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////HP+kor7/bWn//2Nf//9hXf//YV3//2Fd//9hXf//YFz//3Nw/v/NzGH/9vUi/6Ohwf9y - bvz/ZGH//2Fd//9hXf//YV3//2Fd//9gXP//mJXM//z8Qv+Ihej/X1v//3579v/e3Uf/2tkAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/r60A/+rqJv/CwXn/sK+d/66sov+uraH/rq2h/66tof+urKL/uLaf/+TjOf/W - 1QD/8fEe/8vKZv+2tJL/r62g/66tof+uraH/rq2h/66so//JyH3//f0j/8G/kP+tq6P/vLqa/+zsKP/q - 6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wH///8C////Av///wL///8C////Av// - /wL///8A////AAAAAAD///8A////AP///wH///8C////Av///wL///8C////Af///wD///8B////Av// - /wH///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// - //////////////////////////////////8AfAQBABAAAAAAAAAAAAAAAAAAAIABgD8AAYA/AAGAPwAA - AD8AAAA/AAAAP4AQAD/gPgR//////////////////////////////////////////////////////ygA - AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I/+zsbP/b2pb/2tmU/9rZlP/a - 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/b243/5ON4//f3R////w7///8A////AP///wD///8B////Gv/2 - 9kz/5+Zz/93ch//b2pH/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZX/4uGP//r6LP///xT/5+aB/9rZlf/a - 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/3NuW//DvXf///wP///8Z/769z/90 - cP//cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9zb///enb9/5iV7v/V1KH///8Z//39AP// - /wP/8PBX/728yf+RjvL/fHn8/3Rx//9yb///cm///3Jv//9yb///cm///3Jv//9xbf//k5D8/+/uYf// - /zL/qKbs/3Ft//9yb///cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9yb///eHX//8vKt/// - /wr///8a/7Syzv9eWv//XFj//1xY//9cWP//XFj//1xY//9cWP//XFj//11Z//9dWf//XFj//1tX//+E - gfr/5ON+/4yJAP/19U3/p6Xm/2Rg//9cV///XFj//11Y//9cWP//XFj//1xY//9cWP//XVn//11Z//9b - V///gn/6/+3sYf///zP/m5jr/1tX//9dWf//XVn//1xY//9cWP//XFj//1xY//9cWP//XFj//1xY//9c - WP//Y1///8PCtv///wv///8a/7m3z/9nY///ZmL//2Zi//9mYv//ZmL//2Zi//9mYv//ZmL//2Rg//9e - Wv//Xlr//15a//9iXv//vr3A////Hv/Hxrb/aGX//11Z//9eWv//XVn//2Nf//9oZP//aWX//2ll//9o - ZP7/YV7+/15a//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//Xlr//2Zi/f9saP//bGj//2xo//9s - aP//bGj//2xo//9saP//cm7//8nIt////wv///8N/+Pjiv/Hxbb/xsW0/8bFtP/GxbT/xsW0/8bFtP/G - xbT/xsWz/8bFvP+Niu//XVn//15a//9eWv//rKnW////V/+dmub/XFj//15a//9dWf//hID0/7++xf/L - yqz/zMuq/8zLqf/S0br/kY7z/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//YFz//7Cu5P/X - 1qT/0tGe/9LRnv/S0Z7/0tGe/9LRnv/S0Z7/1NOg/+3taf///wP///8A////BP///wb///8F////C/// - /w////8Q////EP///xD///8P////J/+2tNH/X1v//15a//9dWf//qKXa//j4g/+Egfb/XFj//11Z//9p - Zf//ysmz////GP///wX///8F////Av///zj/nZvq/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9e - Wv//YV7//727xf///xL///8B////Av///wL///8C////Av///wL///8C////Af///wD///8A//j4AP// - /x//6eht/9HPoP/HxrL/xsW0/8bFs//GxbP/xsWz/8fGu/+Pje7/XVn//15a//9eWv//sK7Q/+3tlP95 - dfv/XFj//1xY//95dv3/4+J6/7KxAP///wAAAAAA//7+AP///zX/nZrq/1xY//9cWP//g4D7/+3sYf// - /zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/+PgA////Kv/Fw8D/g4D6/2to//9mYv//ZWL//2Vi//9lYv//ZmL//2Rh//9eWv//Xlr//11Z//9o - ZP//ysmu/+Tjj/90cf7/XVn//1xY//+Bfvv/7Oto/+DfAAAAAAAAAAAA//7+AP///zX/nJrq/1tX//9b - V///gn/7/+zsYv///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8C/9rZkf93dP7/W1f//11Z//9dWf//W1f//1tX//9bV///W1f//1tX//9c - WP//XFj//2Nf//+em+3/9PRX/93dhv90cP//XVn//1xY//+Cf/v/7exl/+PiAAAAAAAAAAAA////AP// - /yn/ycfM/6ak4v+mo+H/u7nd//T0T////zT/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Y/7i2yf9gXP//Xlr//11Z//9xbfr/k5Hx/5aT8P+V - k/D/lZPw/5WT8P+XlO//oJ7m/769xP/s62T///8E/+Hgf/93dP7/XVn//1xY//99evz/6Odw/9HQAAAA - AAAAAAAA////AP///wT///8g////KP///yj///8l////Bv///zf/m5nr/1xY//9eWv//YV7//7y6xf// - /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8p/6mm3P9dWf//Xlr//15a//+u - rNz///9R////O////z3///89////Pf///zv///8s////D////wD/2dgA/+rpa/9/fPv/XFj//11Z//9w - bP//19aW////A////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//7+AP///zf/m5nr/1xY//9e - Wv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8s/6el3v9d - Wf//Xlr//15a//+mpOH/8/Nu//DvWv/w71v/8O9b//DvW//w71v/7+9c//DvXv/y8l//+/sm//r5R/+S - j/H/XFj//15a//9fW///pKHh/+vreP/19VT/9fVT//X1U//19VP/9fVT//X1U//19VT/9/dP//7+Ev// - /zb/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD///8e/7Gv0f9fW///Xlr//15Z//9oZPz/gn/6/4WC+f+Fgvn/hYL5/4WC+f+Fgvn/hYL5/4SB+f+V - k/r/4+OF////G/+1s9H/YFz//15a//9eWv//Y1/+/357+v+Kh/f/i4j2/4uI9v+LiPb/i4j2/4uI9v+J - hvf/p6Xy//PzVf///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8I/87NqP9saP//XFj//15a//9dWf//XFj//1xY//9cWP//XFj//1xY//9c - WP//XFj//1tX//9xbf//29qL/wAAAP/k5Hz/h4T5/1xX//9dWf//Xlr//1xY//9cWP//XFj//1xY//9c - WP//XFj//1xY//9ZVf//hIH5/+/vXP///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6OcA//f2Rv+urN//bmv//2Bc//9eWv//Xlr//15a//9e - Wv//Xlr//15a//9eWv//Xlr//11Z//9yb///3NuM/4aDAP///xT/19ad/5KP8/9saP//YV3//15a//9e - Wv//Xlr//15a//9eWv//Xlr//15a//9bV///hYL6/+/vXP///zT/m5ns/1xY//9eWv//YV3//7y6xv// - /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////Av/29kL/09Kf/7i2y/+u - rNn/rava/62r2v+tq9r/rava/62r2v+tq9r/rava/6yq2v+3ttv/7Otv/7m3AP///wD///8P//DvW//R - z6L/u7rF/7Gv1f+tq9r/rava/62r2v+tq9r/rava/62r2v+sqtr/wb/V//b2Rv///yX/y8rH/6yq2/+t - q9r/r63c/9zbov///wr///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8F////FP///x////8g////IP///yD///8g////IP///yD///8g////IP///yD///8L////AAAA - AAD///8A////AP///wT///8R////HP///yD///8g////IP///yD///8g////IP///yD///8d////Bv// - /wL///8a////IP///yD///8h////E////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAAAcAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB - AADAAAPAAf8AAIAAA8AB/wAAAAADwAH/AAAAAAPAAf8AAAADAf8B/wAAAAAAAAH/AAAAAAAAAf8AAAAA - gAAB/wAAgACAAAH/AACAAMAAAf8AAOAA8AAD/wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AACJUE5HDQoaCgAAAA1JSERSAAABAAAA - AQAIBgAAAFxyqGYAABu2SURBVHja7d15eGTVeefx77lVpapSSaW1W91SqxegacxOg20Wg8EQwJDYwcaM - E2eeeAHbk/Ek9hPsLB5nJgmJiZ/JTCaZGSc2ZjxhjMmMgxMbnBgbiA22oQF7WMzSLXpvWlJrX2u798wf - 56pUNJJay9Xav8/zFGpKpdKto3Pee+6555wXRERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERGRlMYvxptbaifeuBmqBeqAJiAMN4XNrQQAcBF4CegCMWZQi - nVFY3h6QBNJANvzaiCvzKmB9+JqVrgt4HugE7EzlGX7uDPAm4DQgEeFx+MA+4EVgEJbnb7vYIvlE4R8i - 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 - V1KDmxZrcWnUTjTLrg/4s/Crd9GFbLr2Gg4HQXSrBEVmSwFgnqyldPlldG1upzl8qgP4Z5g++UHF898H - /hqwxlB983tZ/+aL2B8E0W0WIjIbCgDzEATQ1sqBd7+LBtxGpxaXQHXviX42DAIB8F9wPQZSSdbd+iE2 - 7LyAriDQrUFZOgoAc2QtZDIcve0jlOrrysk4fkiYQXkOW3L34BKr7ALIZqn7jY9TddklvGIt4xoYlKWg - ADAHQQDV1Rz9jY/TveN0TsGVXxfwh4Sbf87GcfkWbyUMAplqmj52G5s+8H460mmOBsFqm4Qqq40CwCz5 - AaWNG9h/+6cY2nk+Z+JW1I0zmSZtTgk5Kl77PC4I/BggkaD+xhs4/XO/z+C557Db8xg7GTMvy9JQQskZ - WAtBQJBK0f/2S+h833vJNtSzHRc4c8CduPv688rGU7FO4HngA8AduDRrya1b2HH7pxh59jm6vvs97O49 - 1Ofz1BlDbK0supHlpwBwHGvL24Xna2vpP/9cBq6/Dm/rFrZ5XjnhRw+u2/9lIL+QVFwVSVf3M7mDz6eB - rYkEtRddSM355zN88CBdTzzJ0Wefo6b7GA25HClrSRjj3kLZwGQ+ThgAjktDvRZZYwiMoVRVRb6ujpHN - 7YxccB6lc8+hpqmJLcaUF/oEuKm8nwMeBoKo8vCFvYER4IvAY7jNPW8CGuIxsqdsI3vKNorvvYmRrm5G - 9+3n2N69lA4dpqqnl+TICKlCgWQQkLAWz1o8wpTsy13AsxUE88vVYMOfne/PrzV+WBazMV0AKOIqe6yu - jtQF5+OtlYKNxRiIxxm0FqoS0NBA0NAAzU14LS0kmptIVldTHy7umehsW9wMv68Cd1Gx5VeUJlKrWWuf - B/4N7s7Cr+L2EdgMJJJJGja3w+Z27NsvpxQE5MZz5IaHGOsfYLi/H4aGKfYPYPI5Yv0DmImhRAumVKIl - CJY2OeusWbx1za/bZmymU4+P298QzxA78wySdVn1hMA1/vZ20kwG/2nL8Q3FFV6Tnok7w22wFuv7q+cs - ciKeR8nzygVicPscTJwtjzeC287rW7g94V4F7FJl363YnHUzcBlwNXBh+P9Zpj+7W1wAtxz3x/d910NY - kg8wD7EY1hgMboD13cD3ji/vil2O/ysu3Ru+77ayXO7jXyk8D+t5GFwduBW4e6p6O10AqMJNV/0EJ884 - gQ+MAp3Ai7hbcz8GngUGIPoz/lyEfxcPl3J9Gy4F+3m4fICbgGbcDkOV+/+tZvcDHwYGpyr3sDwuxmWj - 3rrcB7uC/QD4NeDwrAIAlAs3C9wCXEeYe36NGASGws+exzX4LuAwbibfQdwgXxGWt9HPJPwbGSZTrrdU - PJqB9bhde1uY/DvHwudXclDvwlXa+5jhUqvi878Vd5l0LpOzMk92BrfW5AngHsIFarMOAPC6blYcyptd - rHYGt2ln5XTbYLrCWc0qGkjlB5sIGCv5w+aZQ/Ct+JxpXIBTAJis53lYe3VbRERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERGbw/wF6qrVmWqLSQQAAAABJRU5ErkJggg== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA + IACoJQAA7h4AAAAAAAABACAA7xsAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y8gr/7+8P/+/uD//x8A//+voG//f3AP///wP/9fUM/+/uD//v + 7w//9fQI//HwDf/v7g//7+4P/+/uD//y8gn/npuQ/3160P98ec7/e3jN/4iGof/EwjH/jouM/315yf99 + es//fnvL/6+tef+LiLP/fHjO/357z/9/fND/oZ6G/6mnaP+SkKX/lJGp/4eEx/9rZ/f/n52z/2xo9f+C + f7P/jouf/21q9P+dmpz/cW7j/3t40/+Oi4z/jYqO/6upW/+mpFn/gX3F/398z/96d9//c3Do/5iVwf9v + bPD/sa80/8nIHP+Fgsb/p6WN/3Jv5v+HhJr/AAAA////AAAAAAD/hoO3/21q9P+dm6f/n52a/7Gvcv+d + mof/bGn3/6KgY/+8uy//wL5I/8jHSP9xbuj/h4Sa/wAAAP///wAAAAAA/5OQkv9ua/b/dnPp/3Zy5/+B + ftr/tLJt/3d02f9zb/H/d3Tp/3l25/+tq43/eXXk/42Kmf8AAAD///8AAAAAAP/IxhX/paNM/5yZW/+b + mVv/o6FW/9DPFv+1tCv/n5xV/5uZW/+em1r/wsE0/6upUP+2tDX/AAAA////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAAEAAAAAAAAAAAAAAAABwAAAAcAAAAHAAAABwAA//8AAP// + AAD//wAA//8AAP//AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/9zbKP/DwlL/wL9T/8C/U//Av1P/wL9R/87MOf/z8wr/4eEA/+7uEP/OzDr/wb9P/8C/U//A + v1P/wb9U/9bVMv/b2iv/wsBU/8C/U//Av1P/wL9T/8C/U//Ew1H/394i/7WzhP91cv//bmr//25q//9u + av//bmr9/3h08P+pp4P/7ewi/5iVsf90cfL/bmr9/25q//9uav3/cG3//6Wjov+xr43/c2///25r/P9u + a///bmv//25q//94df3/u7lz/8G/aP+Nisn/h4PI/4eEyP+Ihcf/fXrh/11Z//+FgtT/uriS/2Zj/v9o + ZPj/h4TR/4uIxv+AfeX/YFz//5uYpv+pppH/YFz//3Jv8/+Oi8f/i4nB/4uIwv+TkcD/yMdW////Cf/h + 4D7/xsRu/8HAdf/Fw3L/pKK0/2Fd//+FguH/pKHI/15a//+PjMH///8b////DP+npZP/Yl///5qYpv+p + p5H/YV3//4aD1f/+/SD///8K////DP///wv///8E/8zLQP+Fgtr/amb9/2xo//9saf//aGT//2dj//+g + nrX/mZbB/19b//+Ylan///8D/yAbAP+1s3r/g4Do/7Cukf+npZD/YV3//4WC0//8/Bb/9fUAAAAAAAAA + AAAAAAAA/6yqif9kYP//dHHv/6ekof+lopb/pqOW/7OxfP/w8Cv/lZKu/19b//+SkLj///8K//HxAP/9 + /RL/+/sk////E/+joI7/YV3//4WC0//8/Bb/9fUAAAAAAAAAAAAAAAAA/6qojv9jX///cm7x/56brf+d + mqP/nZqj/5uYpP+8u3L/q6mL/2Nf//9wbfD/mZas/5uZnv+bmJ3/m5mf/8TDYf+lo4//YV3//4WC0//8 + /Bb/9fUAAAAAAAAAAAAAAAAA/8bETv9+e+j/ZWH//2Zi//9mY///ZmP//2dj//+WlLj/4+I4/4qH0P9p + Zv7/ZmP//2dj//9nY///aWX//6OgpP+sqpD/aGT//4qH1P/8/Bb/9vUAAAAAAAAAAAAAAAAA////Bf/H + xUH/rat3/6qofv+qqH3/qqh9/6qof//Dwln///8D/9jXJf+2tGP/q6l7/6qofv+qqH3/q6l//8nITf/P + zkP/rKmA/728Zv/9/Qn/+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AACAAAAAAAAAAAAAAAAA + AAAACA8AAAgPAAAADwAAAA8AAAAPAP///wD///8A////AP///wD///8A////AP///wD///8AKAAAACAA + AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8E////Bf// + /wX///8F////Bf///wX///8E////Af///wAAAAAAAAAAAP///wD///8A////Af///wT///8F////Bf// + /wX///8F////A////wD///8E////Bf///wX///8F////Bf///wX///8F////Bf///wT///8A/+jnOP+3 + tan/qaey/6qosf+qqLH/qqix/6qosf+qqK7/tLOV/9nYSf///wT/urgA/+3sJP/FxHL/sK6e/6qorf+q + qLH/qqix/6qosf+qqLP/xcSL//39KP+9vJ7/qaey/6qosf+qqLH/qqix/6qosf+qqLH/qaey/7q4pP/v + 7iv/2Ndb/3h19/9eWv//X1v//19b//9fW///X1v//2Bc//9kYf//i4jo/9vaRf/t7Sn/n5zK/25q/v9i + Xv//X1v//19b//9fW///YFz//2Bc//+WlM//+/tE/4eE6P9fW///YV3//19b//9fW///X1v//19b//9d + Wf//f3zx/+PjRv/f3lP/k5Do/3568f9/e/D/f3vw/3978P9/fPD/cG34/11Z//9lYf//u7mR/7y7j/9o + ZP//XFj//2xp+/+BffD/gn/t/4OA7/9qZ/z/XFj//5SSzv/7+0P/hYLn/1xX//9nY/3/hIHu/4WC6f+F + gun/hYLp/4SB6v+dm9v/6ek9//f2Ef/q6TX/8O8+//PyR//z8kj/8/JI//v7SP+zsbT/Yl7//2Fd//+3 + tbX/n5zK/11Z//9nY///tLKh/+7tOP/q6jL/7OxX/4eE6/9bV///lJLO//v7Q/+Fguf/Wlb//3p39v/i + 4Wf/8vIr//DwLv/w8C7/8PAu//PyKv/8/Ar/AAAA/97dOP+wrpv/nZu9/5uZwP+bmcD/nZrA/4eE5P9f + W///Y1///8LAs/+Rjtv/W1f//3Vy+f/U01X/xsUA//HxAP/y8iz/hYLo/1pV//+TkM7//PtD/4WC5/9a + Vv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/5+CX/m5jO/2Rg//9eWv//X1v//19b//9f + W///Xlr//2Fd//+DgO7/4eF1/4uI3f9bV///eXb3/9vaSv/V1AD/9fQA//X1Jf+opsv/iofl/7KwtP/5 + +T//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9fWW/93c/b/W1f//3dz8/+h + nsD/oJ24/6Cduf+gnrj/q6mk/8/NVf///yT/j4za/1tX//91cfr/09JX/8PCAP///wD///8D//7+G//+ + /iH///8V//HxL/+Fgun/Wlb//3p39f/d3Eb/2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zs1s/3Fu+v9b + V///jYrj/+vrY//q6k//6upQ/+rqUP/o50r/4+NB////Jv+bmcT/XVn//2Zi//+vran/5eRD/+LhP//i + 4T//4eA9/+HgPf/q6iv/8vEx/4WC6P9aVv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/a + 2Vb/eXb1/1tX//9lYf3/eXX2/3p39P96d/X/enf1/3l29f+Kh/P/29pd/7u6hv9qZv//XFj//2lm/f98 + ePT/fXry/3168v99evL/fHn1/6qowP/6+j//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////HP+kor7/bWn//2Nf//9hXf//YV3//2Fd//9hXf//YFz//3Nw/v/NzGH/9vUi/6Ohwf9y + bvz/ZGH//2Fd//9hXf//YV3//2Fd//9gXP//mJXM//z8Qv+Ihej/X1v//3579v/e3Uf/2tkAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/r60A/+rqJv/CwXn/sK+d/66sov+uraH/rq2h/66tof+urKL/uLaf/+TjOf/W + 1QD/8fEe/8vKZv+2tJL/r62g/66tof+uraH/rq2h/66so//JyH3//f0j/8G/kP+tq6P/vLqa/+zsKP/q + 6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wH///8C////Av///wL///8C////Av// + /wL///8A////AAAAAAD///8A////AP///wH///8C////Av///wL///8C////Af///wD///8B////Av// + /wH///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + //////////////////////////////////8AfAQBABAAAAAAAAAAAAAAAAAAAIABgD8AAYA/AAGAPwAA + AD8AAAA/AAAAP4AQAD/gPgR//////////////////////////////////////////////////////ygA + AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I/+zsbP/b2pb/2tmU/9rZlP/a + 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/b243/5ON4//f3R////w7///8A////AP///wD///8B////Gv/2 + 9kz/5+Zz/93ch//b2pH/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZX/4uGP//r6LP///xT/5+aB/9rZlf/a + 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/3NuW//DvXf///wP///8Z/769z/90 + cP//cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9zb///enb9/5iV7v/V1KH///8Z//39AP// + /wP/8PBX/728yf+RjvL/fHn8/3Rx//9yb///cm///3Jv//9yb///cm///3Jv//9xbf//k5D8/+/uYf// + /zL/qKbs/3Ft//9yb///cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9yb///eHX//8vKt/// + /wr///8a/7Syzv9eWv//XFj//1xY//9cWP//XFj//1xY//9cWP//XFj//11Z//9dWf//XFj//1tX//+E + gfr/5ON+/4yJAP/19U3/p6Xm/2Rg//9cV///XFj//11Y//9cWP//XFj//1xY//9cWP//XVn//11Z//9b + V///gn/6/+3sYf///zP/m5jr/1tX//9dWf//XVn//1xY//9cWP//XFj//1xY//9cWP//XFj//1xY//9c + WP//Y1///8PCtv///wv///8a/7m3z/9nY///ZmL//2Zi//9mYv//ZmL//2Zi//9mYv//ZmL//2Rg//9e + Wv//Xlr//15a//9iXv//vr3A////Hv/Hxrb/aGX//11Z//9eWv//XVn//2Nf//9oZP//aWX//2ll//9o + ZP7/YV7+/15a//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//Xlr//2Zi/f9saP//bGj//2xo//9s + aP//bGj//2xo//9saP//cm7//8nIt////wv///8N/+Pjiv/Hxbb/xsW0/8bFtP/GxbT/xsW0/8bFtP/G + xbT/xsWz/8bFvP+Niu//XVn//15a//9eWv//rKnW////V/+dmub/XFj//15a//9dWf//hID0/7++xf/L + yqz/zMuq/8zLqf/S0br/kY7z/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//YFz//7Cu5P/X + 1qT/0tGe/9LRnv/S0Z7/0tGe/9LRnv/S0Z7/1NOg/+3taf///wP///8A////BP///wb///8F////C/// + /w////8Q////EP///xD///8P////J/+2tNH/X1v//15a//9dWf//qKXa//j4g/+Egfb/XFj//11Z//9p + Zf//ysmz////GP///wX///8F////Av///zj/nZvq/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9e + Wv//YV7//727xf///xL///8B////Av///wL///8C////Av///wL///8C////Af///wD///8A//j4AP// + /x//6eht/9HPoP/HxrL/xsW0/8bFs//GxbP/xsWz/8fGu/+Pje7/XVn//15a//9eWv//sK7Q/+3tlP95 + dfv/XFj//1xY//95dv3/4+J6/7KxAP///wAAAAAA//7+AP///zX/nZrq/1xY//9cWP//g4D7/+3sYf// + /zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/+PgA////Kv/Fw8D/g4D6/2to//9mYv//ZWL//2Vi//9lYv//ZmL//2Rh//9eWv//Xlr//11Z//9o + ZP//ysmu/+Tjj/90cf7/XVn//1xY//+Bfvv/7Oto/+DfAAAAAAAAAAAA//7+AP///zX/nJrq/1tX//9b + V///gn/7/+zsYv///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C/9rZkf93dP7/W1f//11Z//9dWf//W1f//1tX//9bV///W1f//1tX//9c + WP//XFj//2Nf//+em+3/9PRX/93dhv90cP//XVn//1xY//+Cf/v/7exl/+PiAAAAAAAAAAAA////AP// + /yn/ycfM/6ak4v+mo+H/u7nd//T0T////zT/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Y/7i2yf9gXP//Xlr//11Z//9xbfr/k5Hx/5aT8P+V + k/D/lZPw/5WT8P+XlO//oJ7m/769xP/s62T///8E/+Hgf/93dP7/XVn//1xY//99evz/6Odw/9HQAAAA + AAAAAAAA////AP///wT///8g////KP///yj///8l////Bv///zf/m5nr/1xY//9eWv//YV7//7y6xf// + /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8p/6mm3P9dWf//Xlr//15a//+u + rNz///9R////O////z3///89////Pf///zv///8s////D////wD/2dgA/+rpa/9/fPv/XFj//11Z//9w + bP//19aW////A////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//7+AP///zf/m5nr/1xY//9e + Wv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8s/6el3v9d + Wf//Xlr//15a//+mpOH/8/Nu//DvWv/w71v/8O9b//DvW//w71v/7+9c//DvXv/y8l//+/sm//r5R/+S + j/H/XFj//15a//9fW///pKHh/+vreP/19VT/9fVT//X1U//19VP/9fVT//X1U//19VT/9/dP//7+Ev// + /zb/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8e/7Gv0f9fW///Xlr//15Z//9oZPz/gn/6/4WC+f+Fgvn/hYL5/4WC+f+Fgvn/hYL5/4SB+f+V + k/r/4+OF////G/+1s9H/YFz//15a//9eWv//Y1/+/357+v+Kh/f/i4j2/4uI9v+LiPb/i4j2/4uI9v+J + hvf/p6Xy//PzVf///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8I/87NqP9saP//XFj//15a//9dWf//XFj//1xY//9cWP//XFj//1xY//9c + WP//XFj//1tX//9xbf//29qL/wAAAP/k5Hz/h4T5/1xX//9dWf//Xlr//1xY//9cWP//XFj//1xY//9c + WP//XFj//1xY//9ZVf//hIH5/+/vXP///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6OcA//f2Rv+urN//bmv//2Bc//9eWv//Xlr//15a//9e + Wv//Xlr//15a//9eWv//Xlr//11Z//9yb///3NuM/4aDAP///xT/19ad/5KP8/9saP//YV3//15a//9e + Wv//Xlr//15a//9eWv//Xlr//15a//9bV///hYL6/+/vXP///zT/m5ns/1xY//9eWv//YV3//7y6xv// + /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////Av/29kL/09Kf/7i2y/+u + rNn/rava/62r2v+tq9r/rava/62r2v+tq9r/rava/6yq2v+3ttv/7Otv/7m3AP///wD///8P//DvW//R + z6L/u7rF/7Gv1f+tq9r/rava/62r2v+tq9r/rava/62r2v+sqtr/wb/V//b2Rv///yX/y8rH/6yq2/+t + q9r/r63c/9zbov///wr///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8F////FP///x////8g////IP///yD///8g////IP///yD///8g////IP///yD///8L////AAAA + AAD///8A////AP///wT///8R////HP///yD///8g////IP///yD///8g////IP///yD///8d////Bv// + /wL///8a////IP///yD///8h////E////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAAAAcAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB + AADAAAPAAf8AAIAAA8AB/wAAAAADwAH/AAAAAAPAAf8AAAADAf8B/wAAAAAAAAH/AAAAAAAAAf8AAAAA + gAAB/wAAgACAAAH/AACAAMAAAf8AAOAA8AAD/wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AACJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAABu2SURBVHja7d15eGTVeefx77lVpapSSaW1W91SqxegacxOg20Wg8EQwJDYwcaM + E2eeeAHbk/Ek9hPsLB5nJgmJiZ/JTCaZGSc2ZjxhjMmMgxMbnBgbiA22oQF7WMzSLXpvWlJrX2u798wf + 56pUNJJay9Xav8/zFGpKpdKto3Pee+6555wXRERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERGRlMYvxptbaifeuBmqBeqAJiAMN4XNrQQAcBF4CegCMWZQi + nVFY3h6QBNJANvzaiCvzKmB9+JqVrgt4HugE7EzlGX7uDPAm4DQgEeFx+MA+4EVgEJbnb7vYIvlE4R8i + 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 + V1KDmxZrcWnUTjTLrg/4s/Crd9GFbLr2Gg4HQXSrBEVmSwFgnqyldPlldG1upzl8qgP4Z5g++UHF898H + /hqwxlB983tZ/+aL2B8E0W0WIjIbCgDzEATQ1sqBd7+LBtxGpxaXQHXviX42DAIB8F9wPQZSSdbd+iE2 + 7LyAriDQrUFZOgoAc2QtZDIcve0jlOrrysk4fkiYQXkOW3L34BKr7ALIZqn7jY9TddklvGIt4xoYlKWg + ADAHQQDV1Rz9jY/TveN0TsGVXxfwh4Sbf87GcfkWbyUMAplqmj52G5s+8H460mmOBsFqm4Qqq40CwCz5 + AaWNG9h/+6cY2nk+Z+JW1I0zmSZtTgk5Kl77PC4I/BggkaD+xhs4/XO/z+C557Db8xg7GTMvy9JQQskZ + WAtBQJBK0f/2S+h833vJNtSzHRc4c8CduPv688rGU7FO4HngA8AduDRrya1b2HH7pxh59jm6vvs97O49 + 1Ofz1BlDbK0supHlpwBwHGvL24Xna2vpP/9cBq6/Dm/rFrZ5XjnhRw+u2/9lIL+QVFwVSVf3M7mDz6eB + rYkEtRddSM355zN88CBdTzzJ0Wefo6b7GA25HClrSRjj3kLZwGQ+ThgAjktDvRZZYwiMoVRVRb6ujpHN + 7YxccB6lc8+hpqmJLcaUF/oEuKm8nwMeBoKo8vCFvYER4IvAY7jNPW8CGuIxsqdsI3vKNorvvYmRrm5G + 9+3n2N69lA4dpqqnl+TICKlCgWQQkLAWz1o8wpTsy13AsxUE88vVYMOfne/PrzV+WBazMV0AKOIqe6yu + jtQF5+OtlYKNxRiIxxm0FqoS0NBA0NAAzU14LS0kmptIVldTHy7umehsW9wMv68Cd1Gx5VeUJlKrWWuf + B/4N7s7Cr+L2EdgMJJJJGja3w+Z27NsvpxQE5MZz5IaHGOsfYLi/H4aGKfYPYPI5Yv0DmImhRAumVKIl + CJY2OeusWbx1za/bZmymU4+P298QzxA78wySdVn1hMA1/vZ20kwG/2nL8Q3FFV6Tnok7w22wFuv7q+cs + ciKeR8nzygVicPscTJwtjzeC287rW7g94V4F7FJl363YnHUzcBlwNXBh+P9Zpj+7W1wAtxz3x/d910NY + kg8wD7EY1hgMboD13cD3ji/vil2O/ysu3Ru+77ayXO7jXyk8D+t5GFwduBW4e6p6O10AqMJNV/0EJ884 + gQ+MAp3Ai7hbcz8GngUGIPoz/lyEfxcPl3J9Gy4F+3m4fICbgGbcDkOV+/+tZvcDHwYGpyr3sDwuxmWj + 3rrcB7uC/QD4NeDwrAIAlAs3C9wCXEeYe36NGASGws+exzX4LuAwbibfQdwgXxGWt9HPJPwbGSZTrrdU + PJqB9bhde1uY/DvHwudXclDvwlXa+5jhUqvi878Vd5l0LpOzMk92BrfW5AngHsIFarMOAPC6blYcyptd + rHYGt2ln5XTbYLrCWc0qGkjlB5sIGCv5w+aZQ/Ct+JxpXIBTAJis53lYe3VbRERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERGbw/wF6qrVmWqLSQQAAAABJRU5ErkJggg== + + \ No newline at end of file From 2469e7705178efff67236fa1788ddaa23699d27c Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 12:11:00 -0800 Subject: [PATCH 02/30] Resize browser window functionality --- .../src/SGLGuideWindow.Designer.cs | 5 ++--- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs index 089a492..5defe95 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs @@ -38,12 +38,11 @@ private void InitializeComponent() this.Browser.AllowNavigation = false; this.Browser.AllowWebBrowserDrop = false; this.Browser.CausesValidation = false; - this.Browser.Dock = System.Windows.Forms.DockStyle.Fill; this.Browser.IsWebBrowserContextMenuEnabled = false; - this.Browser.Location = new System.Drawing.Point(0, 0); + this.Browser.Location = new System.Drawing.Point(3, 3); this.Browser.MinimumSize = new System.Drawing.Size(20, 20); this.Browser.Name = "Browser"; - this.Browser.Size = new System.Drawing.Size(469, 265); + this.Browser.Size = new System.Drawing.Size(451, 239); this.Browser.TabIndex = 0; this.Browser.WebBrowserShortcutsEnabled = false; // diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 073514d..be3afeb 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -348,6 +348,12 @@ private void SetSize(Size size) { m_component.Settings.WindowSize = size; } + // this is 100% a hack to make the browser slightly smaller than the containing window + // this allows existing resizing functionality to stay in place + Size browserSize = size; + browserSize.Width -= Browser.Margin.Horizontal; + browserSize.Height -= Browser.Margin.Vertical; + Browser.Size = browserSize; } private void OnDebugCenter() From d621b984447e15830e525bf070fdd433531e9550 Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 12:36:59 -0800 Subject: [PATCH 03/30] Maintain background and text colors in browser --- .../src/SGLGuideWindow.cs | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index be3afeb..f8a9152 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -35,6 +35,8 @@ public partial class SGLGuideWindow : Form private Guide m_guide = null; private int m_yOffset = 0; private Brush m_backgroundBrush = new SolidBrush(Color.FromArgb(16, 16, 16)); + private Color m_backgroundColor = Color.FromArgb(16, 16, 16); + private Color m_textColor = Color.White; public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, Guide guide) { @@ -177,12 +179,27 @@ private void ValidateComponents(bool force) } } + private string GenerateHtmlFromMD(string text) + { + string html = ""; + + html += string.Format("
{0}
", text); + + html += ""; + + return html; + } + private void ClearLabels() { if (Browser.Document != null) { HtmlDocument doc = Browser.Document.OpenNew(true); - doc.Write(string.Empty); + doc.Write(GenerateHtmlFromMD(string.Empty)); } } @@ -191,7 +208,7 @@ private void AddLabel(string text) if (Browser.Document != null) { HtmlDocument doc = Browser.Document.OpenNew(true); - doc.Write(string.Format("
{0}
",text)); + doc.Write(GenerateHtmlFromMD(text)); } } @@ -262,11 +279,11 @@ private void SetScrollPos(int pos) protected override void OnPaint(PaintEventArgs e) { + Rectangle rc = new Rectangle(ClientSize.Width - s_gripResizeSize, ClientSize.Height - s_gripResizeSize, s_gripResizeSize, s_gripResizeSize); + ControlPaint.DrawSizeGrip(e.Graphics, BackColor, rc); + rc = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height); + e.Graphics.FillRectangle(m_backgroundBrush, rc); base.OnPaint(e); - //Rectangle rc = new Rectangle(ClientSize.Width - s_gripResizeSize, ClientSize.Height - s_gripResizeSize, s_gripResizeSize, s_gripResizeSize); - //ControlPaint.DrawSizeGrip(e.Graphics, BackColor, rc); - //rc = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height); - //e.Graphics.FillRectangle(m_backgroundBrush, rc); } private const int WM_NCHITTEST = 0x84; @@ -324,12 +341,14 @@ private void OnFontChanged(Font font) private void OnBackgroundColorChanged(Color color) { + m_backgroundColor = color; m_backgroundBrush = new SolidBrush(color); Invalidate(); } private void OnTextColorChanged(Color color) { + m_textColor = color; } private void SetPosition(Point pos) From a2ddfc483285067f33b92c6163e257030587439f Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 13:56:27 -0800 Subject: [PATCH 04/30] Line endings --- .../src/SGLGuideWindow.cs | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index f8a9152..cddbcf2 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -179,37 +179,38 @@ private void ValidateComponents(bool force) } } - private string GenerateHtmlFromMD(string text) - { - string html = ""; - - html += string.Format("
{0}
", text); - - html += ""; - - return html; - } + private string GenerateHtmlFromMD(string text) + { + string html = ""; + + // TODO: replace this with a markdown parser + html += string.Format("
{0}
", text); + + html += ""; + + return html; + } private void ClearLabels() { - if (Browser.Document != null) - { + if (Browser.Document != null) + { HtmlDocument doc = Browser.Document.OpenNew(true); doc.Write(GenerateHtmlFromMD(string.Empty)); - } + } } private void AddLabel(string text) { - if (Browser.Document != null) - { + if (Browser.Document != null) + { HtmlDocument doc = Browser.Document.OpenNew(true); doc.Write(GenerateHtmlFromMD(text)); - } + } } private void SGLGuideWindow_SizeChanged(object sender, EventArgs e) From 0dfa232cf116e64a69293539ae94dad141880afd Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 14:06:00 -0800 Subject: [PATCH 05/30] Add markdig as submodule --- .gitmodules | 3 +++ src/ext/markdig | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 src/ext/markdig diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1b5fbe5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "markdig"] + path = src/ext/markdig + url = git@github.com:Phantom5800/markdig.git diff --git a/src/ext/markdig b/src/ext/markdig new file mode 160000 index 0000000..c0ee97a --- /dev/null +++ b/src/ext/markdig @@ -0,0 +1 @@ +Subproject commit c0ee97a803189524a25a413c62091add521ee9fc From f464efd0031d746f5c29e0a402d362653386aaf6 Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 15:31:58 -0800 Subject: [PATCH 06/30] Add some debug help and integrated markdig. Markdig.dll and System.Memory.dll need to be copied now as well --- .../LiveSplit.SpeedGuidesLive.csproj | 26 ++++++++++++ .../LiveSplit.SpeedGuidesLive.sln | 41 +++++++++++++++++++ .../src/SGLGuideWindow.cs | 21 +++++++--- 3 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj index 7a0cf93..f90465a 100644 --- a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj @@ -31,6 +31,24 @@ prompt 4 + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + ..\ext\libs\LiveSplit.Core.dll @@ -112,6 +130,14 @@ SGLTextEditor.cs + + + {2bc64bef-90d6-479c-a1ec-a2541c803b9a} + Markdig + False + True + + xcopy /Y "$(TargetPath)" "$(SolutionDir)..\LiveSplit\Components\" diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln new file mode 100644 index 0000000..4c88b42 --- /dev/null +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31829.152 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveSplit.SpeedGuidesLive", "LiveSplit.SpeedGuidesLive.csproj", "{B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Markdig", "..\ext\markdig\src\Markdig\Markdig.csproj", "{2BC64BEF-90D6-479C-A1EC-A2541C803B9A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|x64.ActiveCfg = Debug|x64 + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|x64.Build.0 = Debug|x64 + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|Any CPU.Build.0 = Release|Any CPU + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|x64.ActiveCfg = Release|x64 + {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|x64.Build.0 = Release|x64 + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|x64.ActiveCfg = Debug|x64 + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|x64.Build.0 = Debug|x64 + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|Any CPU.Build.0 = Release|Any CPU + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|x64.ActiveCfg = Release|x64 + {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0CABDE45-EB20-4EBC-B7DC-C95889670309} + EndGlobalSection +EndGlobal diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index cddbcf2..ff8ea13 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -1,6 +1,7 @@ using LiveSplit.Model; using LiveSplit.UI; using LiveSplit.UI.Components; +using Markdig; using System; using System.Collections.Generic; using System.ComponentModel; @@ -130,7 +131,6 @@ public void SetSplit(ISegment split, int splitIndex) { try { - ClearLabels(); if (null != split) { if (m_guide.Splits.Count > splitIndex && 0 <= splitIndex) @@ -140,6 +140,10 @@ public void SetSplit(ISegment split, int splitIndex) UpdateActiveSplitTxt(m_guide.Splits[splitIndex].Note); } } + else + { + ClearLabels(); + } } catch (System.Exception) { @@ -187,9 +191,15 @@ private string GenerateHtmlFromMD(string text) html += "html,body{color: rgb(" + m_textColor.R.ToString() + ", " + m_textColor.G.ToString() + ", " + m_textColor.B.ToString() + ");}"; html += ""; - // TODO: replace this with a markdown parser - html += string.Format("
{0}
", text); - + try + { + string htmlStr = Markdown.ToHtml(text); + html += htmlStr; + } + catch (Exception e) + { + html += e.Message; + } html += ""; return html; @@ -200,7 +210,8 @@ private void ClearLabels() if (Browser.Document != null) { HtmlDocument doc = Browser.Document.OpenNew(true); - doc.Write(GenerateHtmlFromMD(string.Empty)); + string emptyPage = GenerateHtmlFromMD(string.Empty); + doc.Write(emptyPage); } } From 1cb0252656bf0af89303d1b9f95713a36a33d674 Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 17:00:33 -0800 Subject: [PATCH 07/30] Add some readme additions detailing changes made on this branch --- README.md | 7 ++++++- .../LiveSplit.SpeedGuidesLive.sln | 10 ---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2b22a1f..324d15e 100644 --- a/README.md +++ b/README.md @@ -37,4 +37,9 @@ Twitch: http://twitch.tv/iNightfall Support my developments: https://www.patreon.com/iNightGaming -If you like the app, or have some suggestions, send me a shout-out on my Twitter: https://twitter.com/inightfaller \ No newline at end of file +If you like the app, or have some suggestions, send me a shout-out on my Twitter: https://twitter.com/inightfaller + +## Additions by Phantom5800 + +- Notes are now markdown formatted +- Images are supported (currently needs a full path and does not support resizing in markdown) diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln index 4c88b42..0724094 100644 --- a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.sln @@ -10,27 +10,17 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|x64.ActiveCfg = Debug|x64 - {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Debug|x64.Build.0 = Debug|x64 {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|Any CPU.Build.0 = Release|Any CPU - {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|x64.ActiveCfg = Release|x64 - {B38A7FC8-7917-4F07-869E-BCEDAE6BA1C5}.Release|x64.Build.0 = Release|x64 {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|x64.ActiveCfg = Debug|x64 - {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Debug|x64.Build.0 = Debug|x64 {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|Any CPU.Build.0 = Release|Any CPU - {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|x64.ActiveCfg = Release|x64 - {2BC64BEF-90D6-479C-A1EC-A2541C803B9A}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From d052a595b50da244b9d97cee9d8994837460c0fc Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 17:52:38 -0800 Subject: [PATCH 08/30] Update readme with dependency info --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 324d15e..1a3af6e 100644 --- a/README.md +++ b/README.md @@ -43,3 +43,4 @@ If you like the app, or have some suggestions, send me a shout-out on my Twitter - Notes are now markdown formatted - Images are supported (currently needs a full path and does not support resizing in markdown) +- In addition to SpeedGuidesLive.dll, Markdig.dll and System.Memory.dll need to be copied over to LiveSplit as well From 86bf0e2804e3b9d1dfdd63270b8e615daf4442ab Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 19:05:56 -0800 Subject: [PATCH 09/30] Add note in readme for current known issues --- README.md | 4 ++++ src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs | 1 + 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 1a3af6e..dcdd834 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,7 @@ If you like the app, or have some suggestions, send me a shout-out on my Twitter - Notes are now markdown formatted - Images are supported (currently needs a full path and does not support resizing in markdown) - In addition to SpeedGuidesLive.dll, Markdig.dll and System.Memory.dll need to be copied over to LiveSplit as well + +### Known Issues + +- Clicking on the browser at any point, livesplit will lose focus after the next split(?). Global Hotkeys is a workaround. diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs index 5defe95..2f1edc2 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs @@ -44,6 +44,7 @@ private void InitializeComponent() this.Browser.Name = "Browser"; this.Browser.Size = new System.Drawing.Size(451, 239); this.Browser.TabIndex = 0; + this.Browser.TabStop = false; this.Browser.WebBrowserShortcutsEnabled = false; // // SGLGuideWindow From 6a97692222155f50b5107feff58459c9ce65f91a Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 19:06:24 -0800 Subject: [PATCH 10/30] Line endings --- .../src/SGLGuideWindow.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index ff8ea13..cec9324 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -140,9 +140,9 @@ public void SetSplit(ISegment split, int splitIndex) UpdateActiveSplitTxt(m_guide.Splits[splitIndex].Note); } } - else - { - ClearLabels(); + else + { + ClearLabels(); } } catch (System.Exception) @@ -191,15 +191,15 @@ private string GenerateHtmlFromMD(string text) html += "html,body{color: rgb(" + m_textColor.R.ToString() + ", " + m_textColor.G.ToString() + ", " + m_textColor.B.ToString() + ");}"; html += ""; - try - { + try + { string htmlStr = Markdown.ToHtml(text); html += htmlStr; } - catch (Exception e) - { - html += e.Message; - } + catch (Exception e) + { + html += e.Message; + } html += ""; return html; From 07d431202d94a354a0c8402917ec9cc0b94f8d14 Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 19:09:15 -0800 Subject: [PATCH 11/30] Update post-build events to include other dependencies --- .../LiveSplit.SpeedGuidesLive.csproj | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj index f90465a..a3c7165 100644 --- a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj @@ -49,6 +49,9 @@ 7.3 prompt
+ + OnBuildSuccess + ..\ext\libs\LiveSplit.Core.dll @@ -140,6 +143,8 @@ - xcopy /Y "$(TargetPath)" "$(SolutionDir)..\LiveSplit\Components\" + xcopy /Y "$(TargetPath)" "$(SolutionDir)..\LiveSplit\Components\" +xcopy /Y "$(TargetDir)\Markdig.dll" "$(SolutionDir)..\LiveSplit\Components\" +xcopy /Y "$(TargetDir)\System.Memory.dll" "$(SolutionDir)..\LiveSplit\Components\"
\ No newline at end of file From 71c35d8a9595f1853dc4b1b71efa490446fbdce6 Mon Sep 17 00:00:00 2001 From: Phantom Date: Tue, 14 Dec 2021 22:57:08 -0800 Subject: [PATCH 12/30] Add a preview to the splits text editor #2 --- .../src/SGLTextEditor.Designer.cs | 154 ++- .../src/SGLTextEditor.cs | 13 +- .../src/SGLTextEditor.resx | 1072 ++++++++--------- 3 files changed, 648 insertions(+), 591 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs index 5082c9f..e3e6f43 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs @@ -28,65 +28,111 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SGLTextEditor)); - this.editorTextBox = new System.Windows.Forms.TextBox(); - this.okButton = new System.Windows.Forms.Button(); - this.cancelButton = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // editorTextBox - // - this.editorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.editorTextBox.Location = new System.Drawing.Point(0, 0); - this.editorTextBox.Multiline = true; - this.editorTextBox.Name = "editorTextBox"; - this.editorTextBox.Size = new System.Drawing.Size(438, 240); - this.editorTextBox.TabIndex = 0; - // - // okButton - // - this.okButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.okButton.Location = new System.Drawing.Point(124, 246); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(75, 23); - this.okButton.TabIndex = 1; - this.okButton.Text = "Ok"; - this.okButton.UseVisualStyleBackColor = true; - this.okButton.Click += new System.EventHandler(this.okButton_Click); - // - // cancelButton - // - this.cancelButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.cancelButton.Location = new System.Drawing.Point(237, 246); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(75, 23); - this.cancelButton.TabIndex = 2; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); - // - // SGLTextEditor - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(436, 281); - this.Controls.Add(this.cancelButton); - this.Controls.Add(this.okButton); - this.Controls.Add(this.editorTextBox); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "SGLTextEditor"; - this.Text = "SGLTextEditor"; - this.ResumeLayout(false); - this.PerformLayout(); - + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SGLTextEditor)); + this.editorTextBox = new System.Windows.Forms.TextBox(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.webBrowser = new System.Windows.Forms.WebBrowser(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // editorTextBox + // + this.editorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.editorTextBox.Location = new System.Drawing.Point(0, 0); + this.editorTextBox.Multiline = true; + this.editorTextBox.Name = "editorTextBox"; + this.editorTextBox.Size = new System.Drawing.Size(400, 569); + this.editorTextBox.TabIndex = 0; + // + // okButton + // + this.okButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.okButton.Location = new System.Drawing.Point(304, 575); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 1; + this.okButton.Text = "Ok"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.cancelButton.Location = new System.Drawing.Point(417, 575); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.editorTextBox); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.webBrowser); + this.splitContainer1.Size = new System.Drawing.Size(799, 569); + this.splitContainer1.SplitterDistance = 403; + this.splitContainer1.TabIndex = 3; + // + // webBrowser + // + this.webBrowser.AllowNavigation = false; + this.webBrowser.AllowWebBrowserDrop = false; + this.webBrowser.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.webBrowser.Location = new System.Drawing.Point(-1, 0); + this.webBrowser.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser.Name = "webBrowser"; + this.webBrowser.Size = new System.Drawing.Size(393, 569); + this.webBrowser.TabIndex = 0; + this.webBrowser.TabStop = false; + this.webBrowser.WebBrowserShortcutsEnabled = false; + // + // SGLTextEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(797, 610); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SGLTextEditor"; + this.Text = "SGLTextEditor"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + } #endregion private System.Windows.Forms.TextBox editorTextBox; private System.Windows.Forms.Button okButton; - private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.WebBrowser webBrowser; } } \ No newline at end of file diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs index 30ffea3..4174925 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using Markdig; namespace LiveSplit.SpeedGuidesLive { @@ -37,8 +38,18 @@ public SGLTextEditor() SizeChanged += SGLTextEditor_SizeChanged; LocationChanged += SGLTextEditor_LocationChanged; - } + editorTextBox.TextChanged += EditorTextBox_TextChanged; + webBrowser.Navigate("about:blank"); + } + + private void EditorTextBox_TextChanged(object sender, EventArgs e) + { + string html = Markdown.ToHtml(EditorText); + HtmlDocument doc = webBrowser.Document.OpenNew(true); + doc.Write(html); + } + private void SGLTextEditor_LocationChanged(object sender, EventArgs e) { s_location = Location; diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.resx b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.resx index d9ceebf..787274d 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.resx +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.resx @@ -1,537 +1,537 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA - IACoJQAA7h4AAAAAAAABACAA7xsAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y8gr/7+8P/+/uD//x8A//+voG//f3AP///wP/9fUM/+/uD//v - 7w//9fQI//HwDf/v7g//7+4P/+/uD//y8gn/npuQ/3160P98ec7/e3jN/4iGof/EwjH/jouM/315yf99 - es//fnvL/6+tef+LiLP/fHjO/357z/9/fND/oZ6G/6mnaP+SkKX/lJGp/4eEx/9rZ/f/n52z/2xo9f+C - f7P/jouf/21q9P+dmpz/cW7j/3t40/+Oi4z/jYqO/6upW/+mpFn/gX3F/398z/96d9//c3Do/5iVwf9v - bPD/sa80/8nIHP+Fgsb/p6WN/3Jv5v+HhJr/AAAA////AAAAAAD/hoO3/21q9P+dm6f/n52a/7Gvcv+d - mof/bGn3/6KgY/+8uy//wL5I/8jHSP9xbuj/h4Sa/wAAAP///wAAAAAA/5OQkv9ua/b/dnPp/3Zy5/+B - ftr/tLJt/3d02f9zb/H/d3Tp/3l25/+tq43/eXXk/42Kmf8AAAD///8AAAAAAP/IxhX/paNM/5yZW/+b - mVv/o6FW/9DPFv+1tCv/n5xV/5uZW/+em1r/wsE0/6upUP+2tDX/AAAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAAEAAAAAAAAAAAAAAAABwAAAAcAAAAHAAAABwAA//8AAP// - AAD//wAA//8AAP//AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/9zbKP/DwlL/wL9T/8C/U//Av1P/wL9R/87MOf/z8wr/4eEA/+7uEP/OzDr/wb9P/8C/U//A - v1P/wb9U/9bVMv/b2iv/wsBU/8C/U//Av1P/wL9T/8C/U//Ew1H/394i/7WzhP91cv//bmr//25q//9u - av//bmr9/3h08P+pp4P/7ewi/5iVsf90cfL/bmr9/25q//9uav3/cG3//6Wjov+xr43/c2///25r/P9u - a///bmv//25q//94df3/u7lz/8G/aP+Nisn/h4PI/4eEyP+Ihcf/fXrh/11Z//+FgtT/uriS/2Zj/v9o - ZPj/h4TR/4uIxv+AfeX/YFz//5uYpv+pppH/YFz//3Jv8/+Oi8f/i4nB/4uIwv+TkcD/yMdW////Cf/h - 4D7/xsRu/8HAdf/Fw3L/pKK0/2Fd//+FguH/pKHI/15a//+PjMH///8b////DP+npZP/Yl///5qYpv+p - p5H/YV3//4aD1f/+/SD///8K////DP///wv///8E/8zLQP+Fgtr/amb9/2xo//9saf//aGT//2dj//+g - nrX/mZbB/19b//+Ylan///8D/yAbAP+1s3r/g4Do/7Cukf+npZD/YV3//4WC0//8/Bb/9fUAAAAAAAAA - AAAAAAAA/6yqif9kYP//dHHv/6ekof+lopb/pqOW/7OxfP/w8Cv/lZKu/19b//+SkLj///8K//HxAP/9 - /RL/+/sk////E/+joI7/YV3//4WC0//8/Bb/9fUAAAAAAAAAAAAAAAAA/6qojv9jX///cm7x/56brf+d - mqP/nZqj/5uYpP+8u3L/q6mL/2Nf//9wbfD/mZas/5uZnv+bmJ3/m5mf/8TDYf+lo4//YV3//4WC0//8 - /Bb/9fUAAAAAAAAAAAAAAAAA/8bETv9+e+j/ZWH//2Zi//9mY///ZmP//2dj//+WlLj/4+I4/4qH0P9p - Zv7/ZmP//2dj//9nY///aWX//6OgpP+sqpD/aGT//4qH1P/8/Bb/9vUAAAAAAAAAAAAAAAAA////Bf/H - xUH/rat3/6qofv+qqH3/qqh9/6qof//Dwln///8D/9jXJf+2tGP/q6l7/6qofv+qqH3/q6l//8nITf/P - zkP/rKmA/728Zv/9/Qn/+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AACAAAAAAAAAAAAAAAAA - AAAACA8AAAgPAAAADwAAAA8AAAAPAP///wD///8A////AP///wD///8A////AP///wD///8AKAAAACAA - AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8E////Bf// - /wX///8F////Bf///wX///8E////Af///wAAAAAAAAAAAP///wD///8A////Af///wT///8F////Bf// - /wX///8F////A////wD///8E////Bf///wX///8F////Bf///wX///8F////Bf///wT///8A/+jnOP+3 - tan/qaey/6qosf+qqLH/qqix/6qosf+qqK7/tLOV/9nYSf///wT/urgA/+3sJP/FxHL/sK6e/6qorf+q - qLH/qqix/6qosf+qqLP/xcSL//39KP+9vJ7/qaey/6qosf+qqLH/qqix/6qosf+qqLH/qaey/7q4pP/v - 7iv/2Ndb/3h19/9eWv//X1v//19b//9fW///X1v//2Bc//9kYf//i4jo/9vaRf/t7Sn/n5zK/25q/v9i - Xv//X1v//19b//9fW///YFz//2Bc//+WlM//+/tE/4eE6P9fW///YV3//19b//9fW///X1v//19b//9d - Wf//f3zx/+PjRv/f3lP/k5Do/3568f9/e/D/f3vw/3978P9/fPD/cG34/11Z//9lYf//u7mR/7y7j/9o - ZP//XFj//2xp+/+BffD/gn/t/4OA7/9qZ/z/XFj//5SSzv/7+0P/hYLn/1xX//9nY/3/hIHu/4WC6f+F - gun/hYLp/4SB6v+dm9v/6ek9//f2Ef/q6TX/8O8+//PyR//z8kj/8/JI//v7SP+zsbT/Yl7//2Fd//+3 - tbX/n5zK/11Z//9nY///tLKh/+7tOP/q6jL/7OxX/4eE6/9bV///lJLO//v7Q/+Fguf/Wlb//3p39v/i - 4Wf/8vIr//DwLv/w8C7/8PAu//PyKv/8/Ar/AAAA/97dOP+wrpv/nZu9/5uZwP+bmcD/nZrA/4eE5P9f - W///Y1///8LAs/+Rjtv/W1f//3Vy+f/U01X/xsUA//HxAP/y8iz/hYLo/1pV//+TkM7//PtD/4WC5/9a - Vv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/5+CX/m5jO/2Rg//9eWv//X1v//19b//9f - W///Xlr//2Fd//+DgO7/4eF1/4uI3f9bV///eXb3/9vaSv/V1AD/9fQA//X1Jf+opsv/iofl/7KwtP/5 - +T//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9fWW/93c/b/W1f//3dz8/+h - nsD/oJ24/6Cduf+gnrj/q6mk/8/NVf///yT/j4za/1tX//91cfr/09JX/8PCAP///wD///8D//7+G//+ - /iH///8V//HxL/+Fgun/Wlb//3p39f/d3Eb/2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zs1s/3Fu+v9b - V///jYrj/+vrY//q6k//6upQ/+rqUP/o50r/4+NB////Jv+bmcT/XVn//2Zi//+vran/5eRD/+LhP//i - 4T//4eA9/+HgPf/q6iv/8vEx/4WC6P9aVv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/a - 2Vb/eXb1/1tX//9lYf3/eXX2/3p39P96d/X/enf1/3l29f+Kh/P/29pd/7u6hv9qZv//XFj//2lm/f98 - ePT/fXry/3168v99evL/fHn1/6qowP/6+j//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////HP+kor7/bWn//2Nf//9hXf//YV3//2Fd//9hXf//YFz//3Nw/v/NzGH/9vUi/6Ohwf9y - bvz/ZGH//2Fd//9hXf//YV3//2Fd//9gXP//mJXM//z8Qv+Ihej/X1v//3579v/e3Uf/2tkAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/r60A/+rqJv/CwXn/sK+d/66sov+uraH/rq2h/66tof+urKL/uLaf/+TjOf/W - 1QD/8fEe/8vKZv+2tJL/r62g/66tof+uraH/rq2h/66so//JyH3//f0j/8G/kP+tq6P/vLqa/+zsKP/q - 6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wH///8C////Av///wL///8C////Av// - /wL///8A////AAAAAAD///8A////AP///wH///8C////Av///wL///8C////Af///wD///8B////Av// - /wH///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// - //////////////////////////////////8AfAQBABAAAAAAAAAAAAAAAAAAAIABgD8AAYA/AAGAPwAA - AD8AAAA/AAAAP4AQAD/gPgR//////////////////////////////////////////////////////ygA - AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I/+zsbP/b2pb/2tmU/9rZlP/a - 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/b243/5ON4//f3R////w7///8A////AP///wD///8B////Gv/2 - 9kz/5+Zz/93ch//b2pH/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZX/4uGP//r6LP///xT/5+aB/9rZlf/a - 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/3NuW//DvXf///wP///8Z/769z/90 - cP//cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9zb///enb9/5iV7v/V1KH///8Z//39AP// - /wP/8PBX/728yf+RjvL/fHn8/3Rx//9yb///cm///3Jv//9yb///cm///3Jv//9xbf//k5D8/+/uYf// - /zL/qKbs/3Ft//9yb///cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9yb///eHX//8vKt/// - /wr///8a/7Syzv9eWv//XFj//1xY//9cWP//XFj//1xY//9cWP//XFj//11Z//9dWf//XFj//1tX//+E - gfr/5ON+/4yJAP/19U3/p6Xm/2Rg//9cV///XFj//11Y//9cWP//XFj//1xY//9cWP//XVn//11Z//9b - V///gn/6/+3sYf///zP/m5jr/1tX//9dWf//XVn//1xY//9cWP//XFj//1xY//9cWP//XFj//1xY//9c - WP//Y1///8PCtv///wv///8a/7m3z/9nY///ZmL//2Zi//9mYv//ZmL//2Zi//9mYv//ZmL//2Rg//9e - Wv//Xlr//15a//9iXv//vr3A////Hv/Hxrb/aGX//11Z//9eWv//XVn//2Nf//9oZP//aWX//2ll//9o - ZP7/YV7+/15a//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//Xlr//2Zi/f9saP//bGj//2xo//9s - aP//bGj//2xo//9saP//cm7//8nIt////wv///8N/+Pjiv/Hxbb/xsW0/8bFtP/GxbT/xsW0/8bFtP/G - xbT/xsWz/8bFvP+Niu//XVn//15a//9eWv//rKnW////V/+dmub/XFj//15a//9dWf//hID0/7++xf/L - yqz/zMuq/8zLqf/S0br/kY7z/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//YFz//7Cu5P/X - 1qT/0tGe/9LRnv/S0Z7/0tGe/9LRnv/S0Z7/1NOg/+3taf///wP///8A////BP///wb///8F////C/// - /w////8Q////EP///xD///8P////J/+2tNH/X1v//15a//9dWf//qKXa//j4g/+Egfb/XFj//11Z//9p - Zf//ysmz////GP///wX///8F////Av///zj/nZvq/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9e - Wv//YV7//727xf///xL///8B////Av///wL///8C////Av///wL///8C////Af///wD///8A//j4AP// - /x//6eht/9HPoP/HxrL/xsW0/8bFs//GxbP/xsWz/8fGu/+Pje7/XVn//15a//9eWv//sK7Q/+3tlP95 - dfv/XFj//1xY//95dv3/4+J6/7KxAP///wAAAAAA//7+AP///zX/nZrq/1xY//9cWP//g4D7/+3sYf// - /zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/+PgA////Kv/Fw8D/g4D6/2to//9mYv//ZWL//2Vi//9lYv//ZmL//2Rh//9eWv//Xlr//11Z//9o - ZP//ysmu/+Tjj/90cf7/XVn//1xY//+Bfvv/7Oto/+DfAAAAAAAAAAAA//7+AP///zX/nJrq/1tX//9b - V///gn/7/+zsYv///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8C/9rZkf93dP7/W1f//11Z//9dWf//W1f//1tX//9bV///W1f//1tX//9c - WP//XFj//2Nf//+em+3/9PRX/93dhv90cP//XVn//1xY//+Cf/v/7exl/+PiAAAAAAAAAAAA////AP// - /yn/ycfM/6ak4v+mo+H/u7nd//T0T////zT/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Y/7i2yf9gXP//Xlr//11Z//9xbfr/k5Hx/5aT8P+V - k/D/lZPw/5WT8P+XlO//oJ7m/769xP/s62T///8E/+Hgf/93dP7/XVn//1xY//99evz/6Odw/9HQAAAA - AAAAAAAA////AP///wT///8g////KP///yj///8l////Bv///zf/m5nr/1xY//9eWv//YV7//7y6xf// - /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8p/6mm3P9dWf//Xlr//15a//+u - rNz///9R////O////z3///89////Pf///zv///8s////D////wD/2dgA/+rpa/9/fPv/XFj//11Z//9w - bP//19aW////A////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//7+AP///zf/m5nr/1xY//9e - Wv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8s/6el3v9d - Wf//Xlr//15a//+mpOH/8/Nu//DvWv/w71v/8O9b//DvW//w71v/7+9c//DvXv/y8l//+/sm//r5R/+S - j/H/XFj//15a//9fW///pKHh/+vreP/19VT/9fVT//X1U//19VP/9fVT//X1U//19VT/9/dP//7+Ev// - /zb/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD///8e/7Gv0f9fW///Xlr//15Z//9oZPz/gn/6/4WC+f+Fgvn/hYL5/4WC+f+Fgvn/hYL5/4SB+f+V - k/r/4+OF////G/+1s9H/YFz//15a//9eWv//Y1/+/357+v+Kh/f/i4j2/4uI9v+LiPb/i4j2/4uI9v+J - hvf/p6Xy//PzVf///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8I/87NqP9saP//XFj//15a//9dWf//XFj//1xY//9cWP//XFj//1xY//9c - WP//XFj//1tX//9xbf//29qL/wAAAP/k5Hz/h4T5/1xX//9dWf//Xlr//1xY//9cWP//XFj//1xY//9c - WP//XFj//1xY//9ZVf//hIH5/+/vXP///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6OcA//f2Rv+urN//bmv//2Bc//9eWv//Xlr//15a//9e - Wv//Xlr//15a//9eWv//Xlr//11Z//9yb///3NuM/4aDAP///xT/19ad/5KP8/9saP//YV3//15a//9e - Wv//Xlr//15a//9eWv//Xlr//15a//9bV///hYL6/+/vXP///zT/m5ns/1xY//9eWv//YV3//7y6xv// - /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////Av/29kL/09Kf/7i2y/+u - rNn/rava/62r2v+tq9r/rava/62r2v+tq9r/rava/6yq2v+3ttv/7Otv/7m3AP///wD///8P//DvW//R - z6L/u7rF/7Gv1f+tq9r/rava/62r2v+tq9r/rava/62r2v+sqtr/wb/V//b2Rv///yX/y8rH/6yq2/+t - q9r/r63c/9zbov///wr///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8F////FP///x////8g////IP///yD///8g////IP///yD///8g////IP///yD///8L////AAAA - AAD///8A////AP///wT///8R////HP///yD///8g////IP///yD///8g////IP///yD///8d////Bv// - /wL///8a////IP///yD///8h////E////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAAAcAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB - AADAAAPAAf8AAIAAA8AB/wAAAAADwAH/AAAAAAPAAf8AAAADAf8B/wAAAAAAAAH/AAAAAAAAAf8AAAAA - gAAB/wAAgACAAAH/AACAAMAAAf8AAOAA8AAD/wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AACJUE5HDQoaCgAAAA1JSERSAAABAAAA - AQAIBgAAAFxyqGYAABu2SURBVHja7d15eGTVeefx77lVpapSSaW1W91SqxegacxOg20Wg8EQwJDYwcaM - E2eeeAHbk/Ek9hPsLB5nJgmJiZ/JTCaZGSc2ZjxhjMmMgxMbnBgbiA22oQF7WMzSLXpvWlJrX2u798wf - 56pUNJJay9Xav8/zFGpKpdKto3Pee+6555wXRERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERGRlMYvxptbaifeuBmqBeqAJiAMN4XNrQQAcBF4CegCMWZQi - nVFY3h6QBNJANvzaiCvzKmB9+JqVrgt4HugE7EzlGX7uDPAm4DQgEeFx+MA+4EVgEJbnb7vYIvlE4R8i - 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 - V1KDmxZrcWnUTjTLrg/4s/Crd9GFbLr2Gg4HQXSrBEVmSwFgnqyldPlldG1upzl8qgP4Z5g++UHF898H - /hqwxlB983tZ/+aL2B8E0W0WIjIbCgDzEATQ1sqBd7+LBtxGpxaXQHXviX42DAIB8F9wPQZSSdbd+iE2 - 7LyAriDQrUFZOgoAc2QtZDIcve0jlOrrysk4fkiYQXkOW3L34BKr7ALIZqn7jY9TddklvGIt4xoYlKWg - ADAHQQDV1Rz9jY/TveN0TsGVXxfwh4Sbf87GcfkWbyUMAplqmj52G5s+8H460mmOBsFqm4Qqq40CwCz5 - AaWNG9h/+6cY2nk+Z+JW1I0zmSZtTgk5Kl77PC4I/BggkaD+xhs4/XO/z+C557Db8xg7GTMvy9JQQskZ - WAtBQJBK0f/2S+h833vJNtSzHRc4c8CduPv688rGU7FO4HngA8AduDRrya1b2HH7pxh59jm6vvs97O49 - 1Ofz1BlDbK0supHlpwBwHGvL24Xna2vpP/9cBq6/Dm/rFrZ5XjnhRw+u2/9lIL+QVFwVSVf3M7mDz6eB - rYkEtRddSM355zN88CBdTzzJ0Wefo6b7GA25HClrSRjj3kLZwGQ+ThgAjktDvRZZYwiMoVRVRb6ujpHN - 7YxccB6lc8+hpqmJLcaUF/oEuKm8nwMeBoKo8vCFvYER4IvAY7jNPW8CGuIxsqdsI3vKNorvvYmRrm5G - 9+3n2N69lA4dpqqnl+TICKlCgWQQkLAWz1o8wpTsy13AsxUE88vVYMOfne/PrzV+WBazMV0AKOIqe6yu - jtQF5+OtlYKNxRiIxxm0FqoS0NBA0NAAzU14LS0kmptIVldTHy7umehsW9wMv68Cd1Gx5VeUJlKrWWuf - B/4N7s7Cr+L2EdgMJJJJGja3w+Z27NsvpxQE5MZz5IaHGOsfYLi/H4aGKfYPYPI5Yv0DmImhRAumVKIl - CJY2OeusWbx1za/bZmymU4+P298QzxA78wySdVn1hMA1/vZ20kwG/2nL8Q3FFV6Tnok7w22wFuv7q+cs - ciKeR8nzygVicPscTJwtjzeC287rW7g94V4F7FJl363YnHUzcBlwNXBh+P9Zpj+7W1wAtxz3x/d910NY - kg8wD7EY1hgMboD13cD3ji/vil2O/ysu3Ru+77ayXO7jXyk8D+t5GFwduBW4e6p6O10AqMJNV/0EJ884 - gQ+MAp3Ai7hbcz8GngUGIPoz/lyEfxcPl3J9Gy4F+3m4fICbgGbcDkOV+/+tZvcDHwYGpyr3sDwuxmWj - 3rrcB7uC/QD4NeDwrAIAlAs3C9wCXEeYe36NGASGws+exzX4LuAwbibfQdwgXxGWt9HPJPwbGSZTrrdU - PJqB9bhde1uY/DvHwudXclDvwlXa+5jhUqvi878Vd5l0LpOzMk92BrfW5AngHsIFarMOAPC6blYcyptd - rHYGt2ln5XTbYLrCWc0qGkjlB5sIGCv5w+aZQ/Ct+JxpXIBTAJis53lYe3VbRERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE - RERERERERERERERERERERERERERERERERGbw/wF6qrVmWqLSQQAAAABJRU5ErkJggg== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA + IACoJQAA7h4AAAAAAAABACAA7xsAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y8gr/7+8P/+/uD//x8A//+voG//f3AP///wP/9fUM/+/uD//v + 7w//9fQI//HwDf/v7g//7+4P/+/uD//y8gn/npuQ/3160P98ec7/e3jN/4iGof/EwjH/jouM/315yf99 + es//fnvL/6+tef+LiLP/fHjO/357z/9/fND/oZ6G/6mnaP+SkKX/lJGp/4eEx/9rZ/f/n52z/2xo9f+C + f7P/jouf/21q9P+dmpz/cW7j/3t40/+Oi4z/jYqO/6upW/+mpFn/gX3F/398z/96d9//c3Do/5iVwf9v + bPD/sa80/8nIHP+Fgsb/p6WN/3Jv5v+HhJr/AAAA////AAAAAAD/hoO3/21q9P+dm6f/n52a/7Gvcv+d + mof/bGn3/6KgY/+8uy//wL5I/8jHSP9xbuj/h4Sa/wAAAP///wAAAAAA/5OQkv9ua/b/dnPp/3Zy5/+B + ftr/tLJt/3d02f9zb/H/d3Tp/3l25/+tq43/eXXk/42Kmf8AAAD///8AAAAAAP/IxhX/paNM/5yZW/+b + mVv/o6FW/9DPFv+1tCv/n5xV/5uZW/+em1r/wsE0/6upUP+2tDX/AAAA////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAAEAAAAAAAAAAAAAAAABwAAAAcAAAAHAAAABwAA//8AAP// + AAD//wAA//8AAP//AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/9zbKP/DwlL/wL9T/8C/U//Av1P/wL9R/87MOf/z8wr/4eEA/+7uEP/OzDr/wb9P/8C/U//A + v1P/wb9U/9bVMv/b2iv/wsBU/8C/U//Av1P/wL9T/8C/U//Ew1H/394i/7WzhP91cv//bmr//25q//9u + av//bmr9/3h08P+pp4P/7ewi/5iVsf90cfL/bmr9/25q//9uav3/cG3//6Wjov+xr43/c2///25r/P9u + a///bmv//25q//94df3/u7lz/8G/aP+Nisn/h4PI/4eEyP+Ihcf/fXrh/11Z//+FgtT/uriS/2Zj/v9o + ZPj/h4TR/4uIxv+AfeX/YFz//5uYpv+pppH/YFz//3Jv8/+Oi8f/i4nB/4uIwv+TkcD/yMdW////Cf/h + 4D7/xsRu/8HAdf/Fw3L/pKK0/2Fd//+FguH/pKHI/15a//+PjMH///8b////DP+npZP/Yl///5qYpv+p + p5H/YV3//4aD1f/+/SD///8K////DP///wv///8E/8zLQP+Fgtr/amb9/2xo//9saf//aGT//2dj//+g + nrX/mZbB/19b//+Ylan///8D/yAbAP+1s3r/g4Do/7Cukf+npZD/YV3//4WC0//8/Bb/9fUAAAAAAAAA + AAAAAAAA/6yqif9kYP//dHHv/6ekof+lopb/pqOW/7OxfP/w8Cv/lZKu/19b//+SkLj///8K//HxAP/9 + /RL/+/sk////E/+joI7/YV3//4WC0//8/Bb/9fUAAAAAAAAAAAAAAAAA/6qojv9jX///cm7x/56brf+d + mqP/nZqj/5uYpP+8u3L/q6mL/2Nf//9wbfD/mZas/5uZnv+bmJ3/m5mf/8TDYf+lo4//YV3//4WC0//8 + /Bb/9fUAAAAAAAAAAAAAAAAA/8bETv9+e+j/ZWH//2Zi//9mY///ZmP//2dj//+WlLj/4+I4/4qH0P9p + Zv7/ZmP//2dj//9nY///aWX//6OgpP+sqpD/aGT//4qH1P/8/Bb/9vUAAAAAAAAAAAAAAAAA////Bf/H + xUH/rat3/6qofv+qqH3/qqh9/6qof//Dwln///8D/9jXJf+2tGP/q6l7/6qofv+qqH3/q6l//8nITf/P + zkP/rKmA/728Zv/9/Qn/+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AACAAAAAAAAAAAAAAAAA + AAAACA8AAAgPAAAADwAAAA8AAAAPAP///wD///8A////AP///wD///8A////AP///wD///8AKAAAACAA + AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8E////Bf// + /wX///8F////Bf///wX///8E////Af///wAAAAAAAAAAAP///wD///8A////Af///wT///8F////Bf// + /wX///8F////A////wD///8E////Bf///wX///8F////Bf///wX///8F////Bf///wT///8A/+jnOP+3 + tan/qaey/6qosf+qqLH/qqix/6qosf+qqK7/tLOV/9nYSf///wT/urgA/+3sJP/FxHL/sK6e/6qorf+q + qLH/qqix/6qosf+qqLP/xcSL//39KP+9vJ7/qaey/6qosf+qqLH/qqix/6qosf+qqLH/qaey/7q4pP/v + 7iv/2Ndb/3h19/9eWv//X1v//19b//9fW///X1v//2Bc//9kYf//i4jo/9vaRf/t7Sn/n5zK/25q/v9i + Xv//X1v//19b//9fW///YFz//2Bc//+WlM//+/tE/4eE6P9fW///YV3//19b//9fW///X1v//19b//9d + Wf//f3zx/+PjRv/f3lP/k5Do/3568f9/e/D/f3vw/3978P9/fPD/cG34/11Z//9lYf//u7mR/7y7j/9o + ZP//XFj//2xp+/+BffD/gn/t/4OA7/9qZ/z/XFj//5SSzv/7+0P/hYLn/1xX//9nY/3/hIHu/4WC6f+F + gun/hYLp/4SB6v+dm9v/6ek9//f2Ef/q6TX/8O8+//PyR//z8kj/8/JI//v7SP+zsbT/Yl7//2Fd//+3 + tbX/n5zK/11Z//9nY///tLKh/+7tOP/q6jL/7OxX/4eE6/9bV///lJLO//v7Q/+Fguf/Wlb//3p39v/i + 4Wf/8vIr//DwLv/w8C7/8PAu//PyKv/8/Ar/AAAA/97dOP+wrpv/nZu9/5uZwP+bmcD/nZrA/4eE5P9f + W///Y1///8LAs/+Rjtv/W1f//3Vy+f/U01X/xsUA//HxAP/y8iz/hYLo/1pV//+TkM7//PtD/4WC5/9a + Vv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/5+CX/m5jO/2Rg//9eWv//X1v//19b//9f + W///Xlr//2Fd//+DgO7/4eF1/4uI3f9bV///eXb3/9vaSv/V1AD/9fQA//X1Jf+opsv/iofl/7KwtP/5 + +T//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9fWW/93c/b/W1f//3dz8/+h + nsD/oJ24/6Cduf+gnrj/q6mk/8/NVf///yT/j4za/1tX//91cfr/09JX/8PCAP///wD///8D//7+G//+ + /iH///8V//HxL/+Fgun/Wlb//3p39f/d3Eb/2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zs1s/3Fu+v9b + V///jYrj/+vrY//q6k//6upQ/+rqUP/o50r/4+NB////Jv+bmcT/XVn//2Zi//+vran/5eRD/+LhP//i + 4T//4eA9/+HgPf/q6iv/8vEx/4WC6P9aVv//enf1/93cRv/Z2AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/a + 2Vb/eXb1/1tX//9lYf3/eXX2/3p39P96d/X/enf1/3l29f+Kh/P/29pd/7u6hv9qZv//XFj//2lm/f98 + ePT/fXry/3168v99evL/fHn1/6qowP/6+j//hYLn/1pW//96d/X/3dxG/9nYAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////HP+kor7/bWn//2Nf//9hXf//YV3//2Fd//9hXf//YFz//3Nw/v/NzGH/9vUi/6Ohwf9y + bvz/ZGH//2Fd//9hXf//YV3//2Fd//9gXP//mJXM//z8Qv+Ihej/X1v//3579v/e3Uf/2tkAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/r60A/+rqJv/CwXn/sK+d/66sov+uraH/rq2h/66tof+urKL/uLaf/+TjOf/W + 1QD/8fEe/8vKZv+2tJL/r62g/66tof+uraH/rq2h/66so//JyH3//f0j/8G/kP+tq6P/vLqa/+zsKP/q + 6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wH///8C////Av///wL///8C////Av// + /wL///8A////AAAAAAD///8A////AP///wH///8C////Av///wL///8C////Af///wD///8B////Av// + /wH///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + //////////////////////////////////8AfAQBABAAAAAAAAAAAAAAAAAAAIABgD8AAYA/AAGAPwAA + AD8AAAA/AAAAP4AQAD/gPgR//////////////////////////////////////////////////////ygA + AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I/+zsbP/b2pb/2tmU/9rZlP/a + 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/b243/5ON4//f3R////w7///8A////AP///wD///8B////Gv/2 + 9kz/5+Zz/93ch//b2pH/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZX/4uGP//r6LP///xT/5+aB/9rZlf/a + 2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/2tmU/9rZlP/a2ZT/3NuW//DvXf///wP///8Z/769z/90 + cP//cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9zb///enb9/5iV7v/V1KH///8Z//39AP// + /wP/8PBX/728yf+RjvL/fHn8/3Rx//9yb///cm///3Jv//9yb///cm///3Jv//9xbf//k5D8/+/uYf// + /zL/qKbs/3Ft//9yb///cm///3Jv//9yb///cm///3Jv//9yb///cm///3Jv//9yb///eHX//8vKt/// + /wr///8a/7Syzv9eWv//XFj//1xY//9cWP//XFj//1xY//9cWP//XFj//11Z//9dWf//XFj//1tX//+E + gfr/5ON+/4yJAP/19U3/p6Xm/2Rg//9cV///XFj//11Y//9cWP//XFj//1xY//9cWP//XVn//11Z//9b + V///gn/6/+3sYf///zP/m5jr/1tX//9dWf//XVn//1xY//9cWP//XFj//1xY//9cWP//XFj//1xY//9c + WP//Y1///8PCtv///wv///8a/7m3z/9nY///ZmL//2Zi//9mYv//ZmL//2Zi//9mYv//ZmL//2Rg//9e + Wv//Xlr//15a//9iXv//vr3A////Hv/Hxrb/aGX//11Z//9eWv//XVn//2Nf//9oZP//aWX//2ll//9o + ZP7/YV7+/15a//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//Xlr//2Zi/f9saP//bGj//2xo//9s + aP//bGj//2xo//9saP//cm7//8nIt////wv///8N/+Pjiv/Hxbb/xsW0/8bFtP/GxbT/xsW0/8bFtP/G + xbT/xsWz/8bFvP+Niu//XVn//15a//9eWv//rKnW////V/+dmub/XFj//15a//9dWf//hID0/7++xf/L + yqz/zMuq/8zLqf/S0br/kY7z/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9eWv//YFz//7Cu5P/X + 1qT/0tGe/9LRnv/S0Z7/0tGe/9LRnv/S0Z7/1NOg/+3taf///wP///8A////BP///wb///8F////C/// + /w////8Q////EP///xD///8P////J/+2tNH/X1v//15a//9dWf//qKXa//j4g/+Egfb/XFj//11Z//9p + Zf//ysmz////GP///wX///8F////Av///zj/nZvq/1xY//9cWP//g4D6/+3sYf///zP/m5nr/1xY//9e + Wv//YV7//727xf///xL///8B////Av///wL///8C////Av///wL///8C////Af///wD///8A//j4AP// + /x//6eht/9HPoP/HxrL/xsW0/8bFs//GxbP/xsWz/8fGu/+Pje7/XVn//15a//9eWv//sK7Q/+3tlP95 + dfv/XFj//1xY//95dv3/4+J6/7KxAP///wAAAAAA//7+AP///zX/nZrq/1xY//9cWP//g4D7/+3sYf// + /zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/+PgA////Kv/Fw8D/g4D6/2to//9mYv//ZWL//2Vi//9lYv//ZmL//2Rh//9eWv//Xlr//11Z//9o + ZP//ysmu/+Tjj/90cf7/XVn//1xY//+Bfvv/7Oto/+DfAAAAAAAAAAAA//7+AP///zX/nJrq/1tX//9b + V///gn/7/+zsYv///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C/9rZkf93dP7/W1f//11Z//9dWf//W1f//1tX//9bV///W1f//1tX//9c + WP//XFj//2Nf//+em+3/9PRX/93dhv90cP//XVn//1xY//+Cf/v/7exl/+PiAAAAAAAAAAAA////AP// + /yn/ycfM/6ak4v+mo+H/u7nd//T0T////zT/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Y/7i2yf9gXP//Xlr//11Z//9xbfr/k5Hx/5aT8P+V + k/D/lZPw/5WT8P+XlO//oJ7m/769xP/s62T///8E/+Hgf/93dP7/XVn//1xY//99evz/6Odw/9HQAAAA + AAAAAAAA////AP///wT///8g////KP///yj///8l////Bv///zf/m5nr/1xY//9eWv//YV7//7y6xf// + /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8p/6mm3P9dWf//Xlr//15a//+u + rNz///9R////O////z3///89////Pf///zv///8s////D////wD/2dgA/+rpa/9/fPv/XFj//11Z//9w + bP//19aW////A////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//7+AP///zf/m5nr/1xY//9e + Wv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8s/6el3v9d + Wf//Xlr//15a//+mpOH/8/Nu//DvWv/w71v/8O9b//DvW//w71v/7+9c//DvXv/y8l//+/sm//r5R/+S + j/H/XFj//15a//9fW///pKHh/+vreP/19VT/9fVT//X1U//19VP/9fVT//X1U//19VT/9/dP//7+Ev// + /zb/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8e/7Gv0f9fW///Xlr//15Z//9oZPz/gn/6/4WC+f+Fgvn/hYL5/4WC+f+Fgvn/hYL5/4SB+f+V + k/r/4+OF////G/+1s9H/YFz//15a//9eWv//Y1/+/357+v+Kh/f/i4j2/4uI9v+LiPb/i4j2/4uI9v+J + hvf/p6Xy//PzVf///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8I/87NqP9saP//XFj//15a//9dWf//XFj//1xY//9cWP//XFj//1xY//9c + WP//XFj//1tX//9xbf//29qL/wAAAP/k5Hz/h4T5/1xX//9dWf//Xlr//1xY//9cWP//XFj//1xY//9c + WP//XFj//1xY//9ZVf//hIH5/+/vXP///zP/m5nr/1xY//9eWv//YV7//7y6xf///xD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6OcA//f2Rv+urN//bmv//2Bc//9eWv//Xlr//15a//9e + Wv//Xlr//15a//9eWv//Xlr//11Z//9yb///3NuM/4aDAP///xT/19ad/5KP8/9saP//YV3//15a//9e + Wv//Xlr//15a//9eWv//Xlr//15a//9bV///hYL6/+/vXP///zT/m5ns/1xY//9eWv//YV3//7y6xv// + /xD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////Av/29kL/09Kf/7i2y/+u + rNn/rava/62r2v+tq9r/rava/62r2v+tq9r/rava/6yq2v+3ttv/7Otv/7m3AP///wD///8P//DvW//R + z6L/u7rF/7Gv1f+tq9r/rava/62r2v+tq9r/rava/62r2v+sqtr/wb/V//b2Rv///yX/y8rH/6yq2/+t + q9r/r63c/9zbov///wr///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8F////FP///x////8g////IP///yD///8g////IP///yD///8g////IP///yD///8L////AAAA + AAD///8A////AP///wT///8R////HP///yD///8g////IP///yD///8g////IP///yD///8d////Bv// + /wL///8a////IP///yD///8h////E////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAAAAcAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB + AADAAAPAAf8AAIAAA8AB/wAAAAADwAH/AAAAAAPAAf8AAAADAf8B/wAAAAAAAAH/AAAAAAAAAf8AAAAA + gAAB/wAAgACAAAH/AACAAMAAAf8AAOAA8AAD/wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AACJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAABu2SURBVHja7d15eGTVeefx77lVpapSSaW1W91SqxegacxOg20Wg8EQwJDYwcaM + E2eeeAHbk/Ek9hPsLB5nJgmJiZ/JTCaZGSc2ZjxhjMmMgxMbnBgbiA22oQF7WMzSLXpvWlJrX2u798wf + 56pUNJJay9Xav8/zFGpKpdKto3Pee+6555wXRERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERGRlMYvxptbaifeuBmqBeqAJiAMN4XNrQQAcBF4CegCMWZQi + nVFY3h6QBNJANvzaiCvzKmB9+JqVrgt4HugE7EzlGX7uDPAm4DQgEeFx+MA+4EVgEJbnb7vYIvlE4R8i + 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 + V1KDmxZrcWnUTjTLrg/4s/Crd9GFbLr2Gg4HQXSrBEVmSwFgnqyldPlldG1upzl8qgP4Z5g++UHF898H + /hqwxlB983tZ/+aL2B8E0W0WIjIbCgDzEATQ1sqBd7+LBtxGpxaXQHXviX42DAIB8F9wPQZSSdbd+iE2 + 7LyAriDQrUFZOgoAc2QtZDIcve0jlOrrysk4fkiYQXkOW3L34BKr7ALIZqn7jY9TddklvGIt4xoYlKWg + ADAHQQDV1Rz9jY/TveN0TsGVXxfwh4Sbf87GcfkWbyUMAplqmj52G5s+8H460mmOBsFqm4Qqq40CwCz5 + AaWNG9h/+6cY2nk+Z+JW1I0zmSZtTgk5Kl77PC4I/BggkaD+xhs4/XO/z+C557Db8xg7GTMvy9JQQskZ + WAtBQJBK0f/2S+h833vJNtSzHRc4c8CduPv688rGU7FO4HngA8AduDRrya1b2HH7pxh59jm6vvs97O49 + 1Ofz1BlDbK0supHlpwBwHGvL24Xna2vpP/9cBq6/Dm/rFrZ5XjnhRw+u2/9lIL+QVFwVSVf3M7mDz6eB + rYkEtRddSM355zN88CBdTzzJ0Wefo6b7GA25HClrSRjj3kLZwGQ+ThgAjktDvRZZYwiMoVRVRb6ujpHN + 7YxccB6lc8+hpqmJLcaUF/oEuKm8nwMeBoKo8vCFvYER4IvAY7jNPW8CGuIxsqdsI3vKNorvvYmRrm5G + 9+3n2N69lA4dpqqnl+TICKlCgWQQkLAWz1o8wpTsy13AsxUE88vVYMOfne/PrzV+WBazMV0AKOIqe6yu + jtQF5+OtlYKNxRiIxxm0FqoS0NBA0NAAzU14LS0kmptIVldTHy7umehsW9wMv68Cd1Gx5VeUJlKrWWuf + B/4N7s7Cr+L2EdgMJJJJGja3w+Z27NsvpxQE5MZz5IaHGOsfYLi/H4aGKfYPYPI5Yv0DmImhRAumVKIl + CJY2OeusWbx1za/bZmymU4+P298QzxA78wySdVn1hMA1/vZ20kwG/2nL8Q3FFV6Tnok7w22wFuv7q+cs + ciKeR8nzygVicPscTJwtjzeC287rW7g94V4F7FJl363YnHUzcBlwNXBh+P9Zpj+7W1wAtxz3x/d910NY + kg8wD7EY1hgMboD13cD3ji/vil2O/ysu3Ru+77ayXO7jXyk8D+t5GFwduBW4e6p6O10AqMJNV/0EJ884 + gQ+MAp3Ai7hbcz8GngUGIPoz/lyEfxcPl3J9Gy4F+3m4fICbgGbcDkOV+/+tZvcDHwYGpyr3sDwuxmWj + 3rrcB7uC/QD4NeDwrAIAlAs3C9wCXEeYe36NGASGws+exzX4LuAwbibfQdwgXxGWt9HPJPwbGSZTrrdU + PJqB9bhde1uY/DvHwudXclDvwlXa+5jhUqvi878Vd5l0LpOzMk92BrfW5AngHsIFarMOAPC6blYcyptd + rHYGt2ln5XTbYLrCWc0qGkjlB5sIGCv5w+aZQ/Ct+JxpXIBTAJis53lYe3VbRERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERGbw/wF6qrVmWqLSQQAAAABJRU5ErkJggg== + + \ No newline at end of file From 182f5bf8a92603accc0220b9dfdd103d35594e96 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 09:55:39 -0800 Subject: [PATCH 13/30] Remove the now unused GrowLabel --- .../LiveSplit.SpeedGuidesLive.csproj | 3 - .../src/GrowLabel.cs | 94 ------------------- 2 files changed, 97 deletions(-) delete mode 100644 src/LiveSplit.SpeedGuidesLive/src/GrowLabel.cs diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj index a3c7165..6284004 100644 --- a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj @@ -105,9 +105,6 @@ SGLSettings.cs - - Component - Form diff --git a/src/LiveSplit.SpeedGuidesLive/src/GrowLabel.cs b/src/LiveSplit.SpeedGuidesLive/src/GrowLabel.cs deleted file mode 100644 index bc98bf5..0000000 --- a/src/LiveSplit.SpeedGuidesLive/src/GrowLabel.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Text; -using System.Drawing; -using System.Windows.Forms; - -namespace LiveSplit.SpeedGuidesLive -{ - public class GrowLabel : Label - { - private Control m_parent = null; - private bool m_resizing = false; - - public GrowLabel() - { - AutoSize = false; - ParentChanged += GrowLabel_ParentChanged; - } - - private void GrowLabel_ParentChanged(object sender, EventArgs e) - { - if(null != m_parent) - { - m_parent.SizeChanged -= Parent_SizeChanged; - m_parent = null; - } - m_parent = Parent; - if (null != m_parent) - { - m_parent.SizeChanged += Parent_SizeChanged; - } - } - - private void Parent_SizeChanged(object sender, EventArgs e) - { - resizeLabel(); - } - - private void resizeLabel() - { - // Make sure we have a parent and we're not already resizing - if (null == Parent || m_resizing) - { - return; - } - - try - { - m_resizing = true; - // Get the parent's width and measure the text - Size sz = new Size(Parent.Width, Int32.MaxValue); - sz = TextRenderer.MeasureText(Text, Font, sz, TextFormatFlags.WordBreak); - // Set the label to our measured text - Size = sz; - } - finally - { - m_resizing = false; - } - } - - protected override void OnTextChanged(EventArgs e) - { - base.OnTextChanged(e); - resizeLabel(); - } - - protected override void OnFontChanged(EventArgs e) - { - base.OnFontChanged(e); - resizeLabel(); - } - - protected override void OnSizeChanged(EventArgs e) - { - base.OnSizeChanged(e); - resizeLabel(); - } - - protected override void WndProc(ref Message msg) - { - const int WM_NCHITTEST = 0x0084; - const int HTTRANSPARENT = (-1); - - if (msg.Msg == WM_NCHITTEST) - { - msg.Result = (IntPtr)HTTRANSPARENT; - } - else - { - base.WndProc(ref msg); - } - } - } -} \ No newline at end of file From a8676626a9fa15d83f815180919e45a2e5d60ee5 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 09:58:20 -0800 Subject: [PATCH 14/30] Add vertical scroll bar to text editor --- src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs index e3e6f43..95f98ef 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs @@ -48,6 +48,7 @@ private void InitializeComponent() this.editorTextBox.Location = new System.Drawing.Point(0, 0); this.editorTextBox.Multiline = true; this.editorTextBox.Name = "editorTextBox"; + this.editorTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.editorTextBox.Size = new System.Drawing.Size(400, 569); this.editorTextBox.TabIndex = 0; // From d57da2f4a56ac621502f03a3b173b9b1c802fdb4 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 10:00:28 -0800 Subject: [PATCH 15/30] Text Editor preview default slightly bigger than text entry --- .../src/SGLTextEditor.Designer.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs index 95f98ef..0674703 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.Designer.cs @@ -49,7 +49,7 @@ private void InitializeComponent() this.editorTextBox.Multiline = true; this.editorTextBox.Name = "editorTextBox"; this.editorTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.editorTextBox.Size = new System.Drawing.Size(400, 569); + this.editorTextBox.Size = new System.Drawing.Size(315, 569); this.editorTextBox.TabIndex = 0; // // okButton @@ -90,7 +90,7 @@ private void InitializeComponent() // this.splitContainer1.Panel2.Controls.Add(this.webBrowser); this.splitContainer1.Size = new System.Drawing.Size(799, 569); - this.splitContainer1.SplitterDistance = 403; + this.splitContainer1.SplitterDistance = 318; this.splitContainer1.TabIndex = 3; // // webBrowser @@ -100,10 +100,10 @@ private void InitializeComponent() this.webBrowser.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.webBrowser.Location = new System.Drawing.Point(-1, 0); + this.webBrowser.Location = new System.Drawing.Point(3, 0); this.webBrowser.MinimumSize = new System.Drawing.Size(20, 20); this.webBrowser.Name = "webBrowser"; - this.webBrowser.Size = new System.Drawing.Size(393, 569); + this.webBrowser.Size = new System.Drawing.Size(474, 569); this.webBrowser.TabIndex = 0; this.webBrowser.TabStop = false; this.webBrowser.WebBrowserShortcutsEnabled = false; From 79f4804e237db70de744f84bcd1f50dbd1731d0c Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 10:15:05 -0800 Subject: [PATCH 16/30] Use proper font in CSS --- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index cec9324..6a26c3c 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -187,8 +187,12 @@ private string GenerateHtmlFromMD(string text) { string html = ""; try @@ -349,6 +353,7 @@ private void SGLGuideWindow_MouseMove(object sender, MouseEventArgs e) private void OnFontChanged(Font font) { + Invalidate(); } private void OnBackgroundColorChanged(Color color) @@ -361,6 +366,7 @@ private void OnBackgroundColorChanged(Color color) private void OnTextColorChanged(Color color) { m_textColor = color; + Invalidate(); } private void SetPosition(Point pos) From 4bbb7c380d9c87c2f8ddc673a575e372570ff326 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 11:03:29 -0800 Subject: [PATCH 17/30] Refresh guide text when updating font, size or colors --- .../src/SGLGuideWindow.cs | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 6a26c3c..9210179 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -38,6 +38,7 @@ public partial class SGLGuideWindow : Form private Brush m_backgroundBrush = new SolidBrush(Color.FromArgb(16, 16, 16)); private Color m_backgroundColor = Color.FromArgb(16, 16, 16); private Color m_textColor = Color.White; + private int m_currentSplitIndex = -1; public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, Guide guide) { @@ -127,6 +128,7 @@ protected override void OnClosed(EventArgs e) public void SetSplit(ISegment split, int splitIndex) { + m_currentSplitIndex = splitIndex; Invoke(new MethodInvoker(delegate { try @@ -135,14 +137,14 @@ public void SetSplit(ISegment split, int splitIndex) { if (m_guide.Splits.Count > splitIndex && 0 <= splitIndex) { - AddLabel(m_guide.Splits[splitIndex].Note); + SetGuideText(m_guide.Splits[splitIndex].Note); UpdateActiveSplitTxt(m_guide.Splits[splitIndex].Note); } } else { - ClearLabels(); + SetGuideText(string.Empty); } } catch (System.Exception) @@ -209,17 +211,7 @@ private string GenerateHtmlFromMD(string text) return html; } - private void ClearLabels() - { - if (Browser.Document != null) - { - HtmlDocument doc = Browser.Document.OpenNew(true); - string emptyPage = GenerateHtmlFromMD(string.Empty); - doc.Write(emptyPage); - } - } - - private void AddLabel(string text) + private void SetGuideText(string text) { if (Browser.Document != null) { @@ -228,6 +220,14 @@ private void AddLabel(string text) } } + private void RefreshGuide() + { + if (m_currentSplitIndex >= 0 && m_guide != null) + { + SetGuideText(m_guide.Splits[m_currentSplitIndex].Note); + } + } + private void SGLGuideWindow_SizeChanged(object sender, EventArgs e) { SetSize(Size); @@ -353,7 +353,7 @@ private void SGLGuideWindow_MouseMove(object sender, MouseEventArgs e) private void OnFontChanged(Font font) { - Invalidate(); + RefreshGuide(); } private void OnBackgroundColorChanged(Color color) @@ -361,12 +361,13 @@ private void OnBackgroundColorChanged(Color color) m_backgroundColor = color; m_backgroundBrush = new SolidBrush(color); Invalidate(); + RefreshGuide(); } private void OnTextColorChanged(Color color) { m_textColor = color; - Invalidate(); + RefreshGuide(); } private void SetPosition(Point pos) From a757101e62f82d9ca5ccde543feb5c9a7e499655 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 11:07:48 -0800 Subject: [PATCH 18/30] Add comments for the important parts of new code --- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 9210179..64ac238 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -63,6 +63,7 @@ public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, G WindowCreatedEvent.Invoke(); + // browser needs to be set to a default page in order to have a valid document Browser.Navigate("about:blank"); } @@ -187,8 +188,8 @@ private void ValidateComponents(bool force) private string GenerateHtmlFromMD(string text) { + // set the styles for the browser window based on user settings string html = ""; + // convert the markdown to html and add it to the browser page try { string htmlStr = Markdown.ToHtml(text); @@ -211,8 +213,13 @@ private string GenerateHtmlFromMD(string text) return html; } + /// + /// Set the current notes being displayed. + /// + /// A string containing markdown formatted text to be displayed. private void SetGuideText(string text) { + // fill in the browser document contents with raw html containing the user notes if (Browser.Document != null) { HtmlDocument doc = Browser.Document.OpenNew(true); @@ -220,6 +227,9 @@ private void SetGuideText(string text) } } + /// + /// Refresh the current notes on display. This is used when settings are changed for SGL. + /// private void RefreshGuide() { if (m_currentSplitIndex >= 0 && m_guide != null) From 95ad4118da96b0ea471682c0bf99d437845673ab Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 11:19:22 -0800 Subject: [PATCH 19/30] Remove browser size hack and various bits of dead code --- .../src/SGLGuideWindow.Designer.cs | 7 +++- .../src/SGLGuideWindow.cs | 39 +++---------------- 2 files changed, 10 insertions(+), 36 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs index 2f1edc2..e6433d2 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.Designer.cs @@ -37,12 +37,15 @@ private void InitializeComponent() this.Browser.AccessibleRole = System.Windows.Forms.AccessibleRole.None; this.Browser.AllowNavigation = false; this.Browser.AllowWebBrowserDrop = false; + this.Browser.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.Browser.CausesValidation = false; this.Browser.IsWebBrowserContextMenuEnabled = false; this.Browser.Location = new System.Drawing.Point(3, 3); this.Browser.MinimumSize = new System.Drawing.Size(20, 20); this.Browser.Name = "Browser"; - this.Browser.Size = new System.Drawing.Size(451, 239); + this.Browser.Size = new System.Drawing.Size(444, 239); this.Browser.TabIndex = 0; this.Browser.TabStop = false; this.Browser.WebBrowserShortcutsEnabled = false; @@ -51,7 +54,7 @@ private void InitializeComponent() // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ClientSize = new System.Drawing.Size(469, 265); + this.ClientSize = new System.Drawing.Size(450, 245); this.Controls.Add(this.Browser); this.DoubleBuffered = true; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 64ac238..191b969 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -148,13 +148,11 @@ public void SetSplit(ISegment split, int splitIndex) SetGuideText(string.Empty); } } - catch (System.Exception) + catch (Exception e) { - Console.WriteLine("Failed to set splits!!"); + Console.WriteLine(string.Format("Failed to set splits!! Exception: {0}", e.Message)); } })); - - SetScrollPos(0); } public void SetGuide(Guide guide) @@ -248,16 +246,6 @@ private void SGLGuideWindow_LocationChanged(object sender, EventArgs e) SetPosition(Location); } - private void NewLabel_MouseDown(object sender, MouseEventArgs e) - { - SGLGuideWindow_MouseDown(sender, e); - } - - private void NewLabel_MouseMove(object sender, MouseEventArgs e) - { - SGLGuideWindow_MouseMove(sender, e); - } - private void UpdateActiveSplitTxt(string text) { string splitTxtPath = m_component.Settings.ActiveSplitTxtOutputPath; @@ -268,11 +256,11 @@ private void UpdateActiveSplitTxt(string text) if(!File.Exists(splitTxtPath)) { - if (!Directory.Exists(System.IO.Path.GetDirectoryName(splitTxtPath))) + if (!Directory.Exists(Path.GetDirectoryName(splitTxtPath))) return; } - string ext = System.IO.Path.GetExtension(splitTxtPath); + string ext = Path.GetExtension(splitTxtPath); if (0 == ext.Length) { splitTxtPath += ".txt"; @@ -284,7 +272,7 @@ private void UpdateActiveSplitTxt(string text) try { - System.IO.File.WriteAllText(splitTxtPath, text); + File.WriteAllText(splitTxtPath, text); } catch(Exception e) { @@ -292,17 +280,6 @@ private void UpdateActiveSplitTxt(string text) } } - protected override void OnMouseWheel(MouseEventArgs e) - { - base.OnMouseWheel(e); - int scrollRate = 8; - SetScrollPos(m_yOffset + e.Delta / scrollRate); - } - - private void SetScrollPos(int pos) - { - } - protected override void OnPaint(PaintEventArgs e) { Rectangle rc = new Rectangle(ClientSize.Width - s_gripResizeSize, ClientSize.Height - s_gripResizeSize, s_gripResizeSize, s_gripResizeSize); @@ -396,12 +373,6 @@ private void SetSize(Size size) { m_component.Settings.WindowSize = size; } - // this is 100% a hack to make the browser slightly smaller than the containing window - // this allows existing resizing functionality to stay in place - Size browserSize = size; - browserSize.Width -= Browser.Margin.Horizontal; - browserSize.Height -= Browser.Margin.Vertical; - Browser.Size = browserSize; } private void OnDebugCenter() From bd739d1a9213460aa0c6935f83e10963ffb126a3 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 11:48:13 -0800 Subject: [PATCH 20/30] Add a .bat file that copies important files (including licenses) to a single location for packaging --- Package.bat | 24 +++++++++++++++++++ .../src/SGLGuideWindow.cs | 7 ++++-- 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 Package.bat diff --git a/Package.bat b/Package.bat new file mode 100644 index 0000000..cc35377 --- /dev/null +++ b/Package.bat @@ -0,0 +1,24 @@ +@echo off + +if [%1]==[] goto usage + +set OUT_DIR=.\official_builds\%1 +mkdir %OUT_DIR% + +REM copy relevant files to proper directory +xcopy src\LiveSplit %OUT_DIR%\LiveSplit /S /Y /I +xcopy .\README.md %OUT_DIR% /Y +echo F|xcopy .\LICENSE %OUT_DIR%\LICENSE_SGL.txt /Y +echo F|xcopy src\ext\markdig\license.txt %OUT_DIR%\LICENSE_Markdig.txt /Y + +set ZIP_NAME=%OUT_DIR%\SpeedGuidesLive(%1).zip +echo Creating %ZIP_NAME% ... +REM actually create the zip file + +goto end + +:usage +echo Package.bat VERSION +pause + +:end diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 191b969..5481ca3 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -34,7 +34,6 @@ public partial class SGLGuideWindow : Form private ILayout m_layout = null; private SplitsComponent m_splitsComponent = null; private Guide m_guide = null; - private int m_yOffset = 0; private Brush m_backgroundBrush = new SolidBrush(Color.FromArgb(16, 16, 16)); private Color m_backgroundColor = Color.FromArgb(16, 16, 16); private Color m_textColor = Color.White; @@ -71,7 +70,6 @@ protected override void OnShown(EventArgs e) { base.OnShown(e); - SetPosition(m_component.Settings.WindowPos); SetSize(m_component.Settings.WindowSize); m_startingSize = ClientSize; @@ -184,6 +182,11 @@ private void ValidateComponents(bool force) } } + /// + /// Convert markdown to a valid html page. + /// + /// Markdown string that is in the process of being rendered. + /// A string containing valid html that can be placed into a web browser. private string GenerateHtmlFromMD(string text) { // set the styles for the browser window based on user settings From dee657f9c27df0f4c5b2837c9bf34a6b61f6015b Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 12:24:25 -0800 Subject: [PATCH 21/30] Fix splitting losing focus on LiveSplit in some scenarios. --- README.md | 2 +- .../src/SGLGuideWindow.cs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dcdd834..ab694cd 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,4 @@ If you like the app, or have some suggestions, send me a shout-out on my Twitter ### Known Issues -- Clicking on the browser at any point, livesplit will lose focus after the next split(?). Global Hotkeys is a workaround. +- Cannot drag window from anywhere, must currently grab from edges. diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 5481ca3..aa4a297 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -64,8 +64,9 @@ public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, G // browser needs to be set to a default page in order to have a valid document Browser.Navigate("about:blank"); - } - + Browser.GotFocus += Browser_GotFocus; + } + protected override void OnShown(EventArgs e) { base.OnShown(e); @@ -341,6 +342,15 @@ private void SGLGuideWindow_MouseMove(object sender, MouseEventArgs e) SendMessage(Handle, WM_NCLBUTTONMOVE, HT_CAPTION, 0); } + /// + /// Focus event for the browser component. This is a hack to force focus back to LiveSplit. + /// This is done as a workaround so that splitting does not return focus to the browser. + /// + private void Browser_GotFocus(object sender, EventArgs e) + { + m_parentForm.Focus(); + } + private void OnFontChanged(Font font) { RefreshGuide(); From 6c3abeb5d3febced82a25cdf2c53e3f04d9e23ec Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 21:01:22 -0800 Subject: [PATCH 22/30] Add an option to disable markdown and use pre-formatted text exclusively. Force image sizes to not exceed the width of the notes window --- .../src/SGLGuideWindow.cs | 71 +- .../src/SGLSettings.cs | 16 +- .../src/SGLSettings.designer.cs | 884 +++++++++--------- .../src/SGLSettings.resx | 244 ++--- .../src/SGLTextEditor.cs | 22 +- 5 files changed, 643 insertions(+), 594 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index aa4a297..9f0a177 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -65,8 +65,8 @@ public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, G // browser needs to be set to a default page in order to have a valid document Browser.Navigate("about:blank"); Browser.GotFocus += Browser_GotFocus; - } - + } + protected override void OnShown(EventArgs e) { base.OnShown(e); @@ -81,6 +81,7 @@ protected override void OnShown(EventArgs e) m_component.Settings.BackgroundColorChangedEvent += OnBackgroundColorChanged; m_component.Settings.TextColorChangedEvent += OnTextColorChanged; m_component.Settings.FontChangedEvent += OnFontChanged; + m_component.Settings.MardownEnableChangedEvent += OnMarkdownChanged; // Debug m_component.Settings.DebugCenterEvent += OnDebugCenter; @@ -97,6 +98,7 @@ protected override void OnClosing(CancelEventArgs e) m_component.Settings.BackgroundColorChangedEvent -= OnBackgroundColorChanged; m_component.Settings.TextColorChangedEvent -= OnTextColorChanged; m_component.Settings.FontChangedEvent -= OnFontChanged; + m_component.Settings.MardownEnableChangedEvent -= OnMarkdownChanged; // Debug m_component.Settings.DebugCenterEvent -= OnDebugCenter; @@ -183,10 +185,10 @@ private void ValidateComponents(bool force) } } - /// - /// Convert markdown to a valid html page. - /// - /// Markdown string that is in the process of being rendered. + /// + /// Convert markdown to a valid html page. + /// + /// Markdown string that is in the process of being rendered. /// A string containing valid html that can be placed into a web browser. private string GenerateHtmlFromMD(string text) { @@ -198,13 +200,21 @@ private string GenerateHtmlFromMD(string text) html += "font-family: " + m_component.Settings.GuideFont.Name + ";"; html += "font-size: " + m_component.Settings.GuideFont.Size.ToString() + "px;"; html += "}"; + html += "img{max-width:100%;}"; html += ""; // convert the markdown to html and add it to the browser page try { - string htmlStr = Markdown.ToHtml(text); - html += htmlStr; + if (m_component.Settings.MarkdownEnabled) + { + string htmlStr = Markdown.ToHtml(text); + html += htmlStr; + } + else + { + html += string.Format("
{0}
", text); + } } catch (Exception e) { @@ -215,9 +225,9 @@ private string GenerateHtmlFromMD(string text) return html; } - /// - /// Set the current notes being displayed. - /// + /// + /// Set the current notes being displayed. + /// /// A string containing markdown formatted text to be displayed. private void SetGuideText(string text) { @@ -229,15 +239,15 @@ private void SetGuideText(string text) } } - /// - /// Refresh the current notes on display. This is used when settings are changed for SGL. + /// + /// Refresh the current notes on display. This is used when settings are changed for SGL. /// - private void RefreshGuide() - { - if (m_currentSplitIndex >= 0 && m_guide != null) - { - SetGuideText(m_guide.Splits[m_currentSplitIndex].Note); - } + private void RefreshGuide() + { + if (m_currentSplitIndex >= 0 && m_guide != null) + { + SetGuideText(m_guide.Splits[m_currentSplitIndex].Note); + } } private void SGLGuideWindow_SizeChanged(object sender, EventArgs e) @@ -342,20 +352,25 @@ private void SGLGuideWindow_MouseMove(object sender, MouseEventArgs e) SendMessage(Handle, WM_NCLBUTTONMOVE, HT_CAPTION, 0); } - /// - /// Focus event for the browser component. This is a hack to force focus back to LiveSplit. - /// This is done as a workaround so that splitting does not return focus to the browser. - /// - private void Browser_GotFocus(object sender, EventArgs e) - { - m_parentForm.Focus(); - } - + /// + /// Focus event for the browser component. This is a hack to force focus back to LiveSplit. + /// This is done as a workaround so that splitting does not return focus to the browser. + /// + private void Browser_GotFocus(object sender, EventArgs e) + { + m_parentForm.Focus(); + } + private void OnFontChanged(Font font) { RefreshGuide(); } + private void OnMarkdownChanged(bool enabled) + { + RefreshGuide(); + } + private void OnBackgroundColorChanged(Color color) { m_backgroundColor = color; diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.cs index 358f942..bce5f95 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.cs @@ -59,6 +59,10 @@ public partial class SGLSettings : UserControl public string ActiveSplitTxtOutputPath { get { return m_activeSplitTxtOutputPath; } } + public bool MarkdownEnabled { get { return m_markdownEnabled.Checked; } } + public delegate void MardownEnableChangeEventHandler(bool isEnabled); + public MardownEnableChangeEventHandler MardownEnableChangedEvent { get; set; } + // Debug public delegate void DebugCenterEventHandler(); public DebugCenterEventHandler DebugCenterEvent { get; set; } @@ -138,6 +142,8 @@ public System.Xml.XmlNode GetSettings(System.Xml.XmlDocument document) settingsNode.AppendChild(ToElement(document, "WindowSize.Width", m_windowSize.Width)); settingsNode.AppendChild(ToElement(document, "WindowSize.Height", m_windowSize.Height)); + settingsNode.AppendChild(ToElement(document, "MarkdownEnabled", m_markdownEnabled.Checked)); + return settingsNode; } @@ -170,6 +176,9 @@ public void SetSettings(System.Xml.XmlNode settings) m_windowSize = new Size(windowSizeWidth, windowSizeHeight); activeSplitTextCheckBox.Checked = 0 != m_activeSplitTxtOutputPath.Length; + + bool markdown = settings["MarkdownEnabled"] != null ? bool.Parse(settings["MarkdownEnabled"].InnerText) : true; + m_markdownEnabled.Checked = markdown; UpdateActiveSplitTextComponents(); } @@ -487,5 +496,10 @@ private void spreadsheetExport_Click(object sender, EventArgs e) } dlg.Dispose(); } - } + + private void markdownEnabled_CheckedChanged(object sender, EventArgs e) + { + MardownEnableChangedEvent.Invoke(m_markdownEnabled.Checked); + } + } } diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.designer.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.designer.cs index f24d43b..838b008 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.designer.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.designer.cs @@ -28,438 +28,453 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.groupBox = new System.Windows.Forms.GroupBox(); - this.textColorDisplay = new System.Windows.Forms.Panel(); - this.backgroundColorDisplay = new System.Windows.Forms.Panel(); - this.textColorButton = new System.Windows.Forms.Button(); - this.backgroundColorButton = new System.Windows.Forms.Button(); - this.fontSizeNumeric = new System.Windows.Forms.NumericUpDown(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.fontComboBox = new System.Windows.Forms.ComboBox(); - this.editButton = new System.Windows.Forms.Button(); - this.labelVersion = new System.Windows.Forms.Label(); - this.colorDialog1 = new System.Windows.Forms.ColorDialog(); - this.componentByLabel = new System.Windows.Forms.Label(); - this.componentByNameLabel = new System.Windows.Forms.Label(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.labelVersionText = new System.Windows.Forms.LinkLabel(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label5 = new System.Windows.Forms.Label(); - this.debugWindowSizeLabel = new System.Windows.Forms.Label(); - this.debugWindowPosLabel = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.debugResizeButton = new System.Windows.Forms.Button(); - this.debugCenterButton = new System.Windows.Forms.Button(); - this.requestLink = new System.Windows.Forms.LinkLabel(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.label8 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.spreadsheetExport = new System.Windows.Forms.Button(); - this.label6 = new System.Windows.Forms.Label(); - this.spreadsheetImport = new System.Windows.Forms.Button(); - this.activeSplitTextDesc = new System.Windows.Forms.Label(); - this.activeSplitTextCheckBox = new System.Windows.Forms.CheckBox(); - this.activeSplitTextPathBtn = new System.Windows.Forms.Button(); - this.activeSplitTextPath = new System.Windows.Forms.TextBox(); - this.groupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.fontSizeNumeric)).BeginInit(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox - // - this.groupBox.Controls.Add(this.textColorDisplay); - this.groupBox.Controls.Add(this.backgroundColorDisplay); - this.groupBox.Controls.Add(this.textColorButton); - this.groupBox.Controls.Add(this.backgroundColorButton); - this.groupBox.Controls.Add(this.fontSizeNumeric); - this.groupBox.Controls.Add(this.label2); - this.groupBox.Controls.Add(this.label1); - this.groupBox.Controls.Add(this.fontComboBox); - this.groupBox.Controls.Add(this.editButton); - this.groupBox.Location = new System.Drawing.Point(10, 50); - this.groupBox.Margin = new System.Windows.Forms.Padding(2); - this.groupBox.Name = "groupBox"; - this.groupBox.Padding = new System.Windows.Forms.Padding(2); - this.groupBox.Size = new System.Drawing.Size(459, 109); - this.groupBox.TabIndex = 0; - this.groupBox.TabStop = false; - this.groupBox.Text = "Guide"; - // - // textColorDisplay - // - this.textColorDisplay.Location = new System.Drawing.Point(283, 59); - this.textColorDisplay.Name = "textColorDisplay"; - this.textColorDisplay.Size = new System.Drawing.Size(23, 23); - this.textColorDisplay.TabIndex = 12; - // - // backgroundColorDisplay - // - this.backgroundColorDisplay.Location = new System.Drawing.Point(125, 59); - this.backgroundColorDisplay.Name = "backgroundColorDisplay"; - this.backgroundColorDisplay.Size = new System.Drawing.Size(23, 23); - this.backgroundColorDisplay.TabIndex = 11; - // - // textColorButton - // - this.textColorButton.Location = new System.Drawing.Point(172, 59); - this.textColorButton.Name = "textColorButton"; - this.textColorButton.Size = new System.Drawing.Size(105, 23); - this.textColorButton.TabIndex = 10; - this.textColorButton.Text = "Text Color"; - this.textColorButton.UseVisualStyleBackColor = true; - this.textColorButton.Click += new System.EventHandler(this.textColorButton_Click); - // - // backgroundColorButton - // - this.backgroundColorButton.Location = new System.Drawing.Point(14, 59); - this.backgroundColorButton.Name = "backgroundColorButton"; - this.backgroundColorButton.Size = new System.Drawing.Size(105, 23); - this.backgroundColorButton.TabIndex = 9; - this.backgroundColorButton.Text = "Background Color"; - this.backgroundColorButton.UseVisualStyleBackColor = true; - this.backgroundColorButton.Click += new System.EventHandler(this.backgroundColorButton_Click); - // - // fontSizeNumeric - // - this.fontSizeNumeric.Location = new System.Drawing.Point(269, 27); - this.fontSizeNumeric.Margin = new System.Windows.Forms.Padding(2); - this.fontSizeNumeric.Name = "fontSizeNumeric"; - this.fontSizeNumeric.Size = new System.Drawing.Size(37, 20); - this.fontSizeNumeric.TabIndex = 6; - this.fontSizeNumeric.ValueChanged += new System.EventHandler(this.fontSizeNumeric_ValueChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(208, 29); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(51, 13); - this.label2.TabIndex = 5; - this.label2.Text = "Font Size"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(11, 29); - this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(28, 13); - this.label1.TabIndex = 4; - this.label1.Text = "Font"; - // - // fontComboBox - // - this.fontComboBox.FormattingEnabled = true; - this.fontComboBox.Location = new System.Drawing.Point(47, 27); - this.fontComboBox.Margin = new System.Windows.Forms.Padding(2); - this.fontComboBox.Name = "fontComboBox"; - this.fontComboBox.Size = new System.Drawing.Size(137, 21); - this.fontComboBox.TabIndex = 1; - this.fontComboBox.SelectedIndexChanged += new System.EventHandler(this.fontComboBox_SelectedIndexChanged); - // - // editButton - // - this.editButton.Location = new System.Drawing.Point(333, 36); - this.editButton.Margin = new System.Windows.Forms.Padding(2); - this.editButton.Name = "editButton"; - this.editButton.Size = new System.Drawing.Size(122, 40); - this.editButton.TabIndex = 0; - this.editButton.Text = "Edit Guide"; - this.editButton.UseVisualStyleBackColor = true; - this.editButton.Click += new System.EventHandler(this.editButton_Click); - // - // labelVersion - // - this.labelVersion.AutoSize = true; - this.labelVersion.Location = new System.Drawing.Point(9, 7); - this.labelVersion.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.labelVersion.Name = "labelVersion"; - this.labelVersion.Size = new System.Drawing.Size(45, 13); - this.labelVersion.TabIndex = 2; - this.labelVersion.Text = "Version:"; - // - // componentByLabel - // - this.componentByLabel.AutoSize = true; - this.componentByLabel.Location = new System.Drawing.Point(115, 7); - this.componentByLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.componentByLabel.Name = "componentByLabel"; - this.componentByLabel.Size = new System.Drawing.Size(78, 13); - this.componentByLabel.TabIndex = 13; - this.componentByLabel.Text = "Component by:"; - // - // componentByNameLabel - // - this.componentByNameLabel.AutoSize = true; - this.componentByNameLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.componentByNameLabel.Location = new System.Drawing.Point(195, 7); - this.componentByNameLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.componentByNameLabel.Name = "componentByNameLabel"; - this.componentByNameLabel.Size = new System.Drawing.Size(57, 13); - this.componentByNameLabel.TabIndex = 15; - this.componentByNameLabel.Text = "iNightfall"; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(256, 7); - this.linkLabel1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(161, 13); - this.linkLabel1.TabIndex = 16; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "(http://www.nightgamedev.com)"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // labelVersionText - // - this.labelVersionText.AutoSize = true; - this.labelVersionText.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelVersionText.Location = new System.Drawing.Point(56, 7); - this.labelVersionText.Name = "labelVersionText"; - this.labelVersionText.Size = new System.Drawing.Size(34, 15); - this.labelVersionText.TabIndex = 17; - this.labelVersionText.TabStop = true; - this.labelVersionText.Text = "0.0.0"; - this.labelVersionText.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.labelVersionText_LinkClicked); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label5); - this.groupBox1.Controls.Add(this.debugWindowSizeLabel); - this.groupBox1.Controls.Add(this.debugWindowPosLabel); - this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.debugResizeButton); - this.groupBox1.Controls.Add(this.debugCenterButton); - this.groupBox1.Location = new System.Drawing.Point(10, 260); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(459, 101); - this.groupBox1.TabIndex = 18; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Debug Stuff"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.Location = new System.Drawing.Point(324, 29); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(129, 51); - this.label5.TabIndex = 6; - this.label5.Text = "Save the layout \r\nto keep position \r\nand size."; - // - // debugWindowSizeLabel - // - this.debugWindowSizeLabel.AutoSize = true; - this.debugWindowSizeLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.debugWindowSizeLabel.Location = new System.Drawing.Point(253, 66); - this.debugWindowSizeLabel.Name = "debugWindowSizeLabel"; - this.debugWindowSizeLabel.Size = new System.Drawing.Size(36, 16); - this.debugWindowSizeLabel.TabIndex = 5; - this.debugWindowSizeLabel.Text = "(0, 0)"; - // - // debugWindowPosLabel - // - this.debugWindowPosLabel.AutoSize = true; - this.debugWindowPosLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.debugWindowPosLabel.Location = new System.Drawing.Point(253, 29); - this.debugWindowPosLabel.Name = "debugWindowPosLabel"; - this.debugWindowPosLabel.Size = new System.Drawing.Size(36, 16); - this.debugWindowPosLabel.TabIndex = 4; - this.debugWindowPosLabel.Text = "(0, 0)"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(146, 67); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(103, 13); - this.label4.TabIndex = 3; - this.label4.Text = "Guide Window Size:"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(146, 31); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(101, 13); - this.label3.TabIndex = 2; - this.label3.Text = "Guide Window Pos:"; - // - // debugResizeButton - // - this.debugResizeButton.Location = new System.Drawing.Point(14, 63); - this.debugResizeButton.Name = "debugResizeButton"; - this.debugResizeButton.Size = new System.Drawing.Size(105, 23); - this.debugResizeButton.TabIndex = 1; - this.debugResizeButton.Text = "Resize Guide"; - this.debugResizeButton.UseVisualStyleBackColor = true; - this.debugResizeButton.Click += new System.EventHandler(this.debugResizeButton_Click); - // - // debugCenterButton - // - this.debugCenterButton.Location = new System.Drawing.Point(14, 26); - this.debugCenterButton.Name = "debugCenterButton"; - this.debugCenterButton.Size = new System.Drawing.Size(105, 23); - this.debugCenterButton.TabIndex = 0; - this.debugCenterButton.Text = "Center Guide"; - this.debugCenterButton.UseVisualStyleBackColor = true; - this.debugCenterButton.Click += new System.EventHandler(this.debugCenterButton_Click); - // - // requestLink - // - this.requestLink.AutoSize = true; - this.requestLink.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.requestLink.Location = new System.Drawing.Point(13, 29); - this.requestLink.Name = "requestLink"; - this.requestLink.Size = new System.Drawing.Size(177, 15); - this.requestLink.TabIndex = 20; - this.requestLink.TabStop = true; - this.requestLink.Text = "Request Feature or Report Bug"; - this.requestLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.requestLink_LinkClicked); - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label8); - this.groupBox2.Controls.Add(this.label7); - this.groupBox2.Controls.Add(this.spreadsheetExport); - this.groupBox2.Controls.Add(this.label6); - this.groupBox2.Controls.Add(this.spreadsheetImport); - this.groupBox2.Controls.Add(this.activeSplitTextDesc); - this.groupBox2.Controls.Add(this.activeSplitTextCheckBox); - this.groupBox2.Controls.Add(this.activeSplitTextPathBtn); - this.groupBox2.Controls.Add(this.activeSplitTextPath); - this.groupBox2.Location = new System.Drawing.Point(10, 164); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(459, 90); - this.groupBox2.TabIndex = 19; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Extra Stuff"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label8.Location = new System.Drawing.Point(373, 68); - this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(36, 13); - this.label8.TabIndex = 9; - this.label8.Text = "(.tsv)"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label7.Location = new System.Drawing.Point(339, 53); - this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(113, 13); - this.label7.TabIndex = 8; - this.label7.Text = "Must be tab-separated"; - // - // spreadsheetExport - // - this.spreadsheetExport.Location = new System.Drawing.Point(251, 55); - this.spreadsheetExport.Name = "spreadsheetExport"; - this.spreadsheetExport.Size = new System.Drawing.Size(75, 23); - this.spreadsheetExport.TabIndex = 7; - this.spreadsheetExport.Text = "Export"; - this.spreadsheetExport.UseVisualStyleBackColor = true; - this.spreadsheetExport.Click += new System.EventHandler(this.spreadsheetExport_Click); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(11, 60); - this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(137, 13); - this.label6.TabIndex = 6; - this.label6.Text = "Spreadsheet Import/Export:"; - // - // spreadsheetImport - // - this.spreadsheetImport.Location = new System.Drawing.Point(170, 55); - this.spreadsheetImport.Name = "spreadsheetImport"; - this.spreadsheetImport.Size = new System.Drawing.Size(75, 23); - this.spreadsheetImport.TabIndex = 5; - this.spreadsheetImport.Text = "Import"; - this.spreadsheetImport.UseVisualStyleBackColor = true; - this.spreadsheetImport.Click += new System.EventHandler(this.spreadsheetImport_Click); - // - // activeSplitTextDesc - // - this.activeSplitTextDesc.AutoSize = true; - this.activeSplitTextDesc.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.activeSplitTextDesc.Location = new System.Drawing.Point(185, 25); - this.activeSplitTextDesc.Name = "activeSplitTextDesc"; - this.activeSplitTextDesc.Size = new System.Drawing.Size(225, 13); - this.activeSplitTextDesc.TabIndex = 4; - this.activeSplitTextDesc.Text = "Outputs the current guide to a .txt file."; - // - // activeSplitTextCheckBox - // - this.activeSplitTextCheckBox.AutoSize = true; - this.activeSplitTextCheckBox.Location = new System.Drawing.Point(6, 24); - this.activeSplitTextCheckBox.Name = "activeSplitTextCheckBox"; - this.activeSplitTextCheckBox.Size = new System.Drawing.Size(160, 17); - this.activeSplitTextCheckBox.TabIndex = 3; - this.activeSplitTextCheckBox.Text = "Active Split Txt Output Path:"; - this.activeSplitTextCheckBox.UseVisualStyleBackColor = true; - this.activeSplitTextCheckBox.CheckedChanged += new System.EventHandler(this.activeSplitTextCheckBox_CheckedChanged); - // - // activeSplitTextPathBtn - // - this.activeSplitTextPathBtn.Location = new System.Drawing.Point(423, 20); - this.activeSplitTextPathBtn.Name = "activeSplitTextPathBtn"; - this.activeSplitTextPathBtn.Size = new System.Drawing.Size(28, 23); - this.activeSplitTextPathBtn.TabIndex = 2; - this.activeSplitTextPathBtn.Text = "..."; - this.activeSplitTextPathBtn.UseVisualStyleBackColor = true; - this.activeSplitTextPathBtn.Click += new System.EventHandler(this.activeSplitTextPathBtn_Click); - // - // activeSplitTextPath - // - this.activeSplitTextPath.Location = new System.Drawing.Point(172, 22); - this.activeSplitTextPath.Name = "activeSplitTextPath"; - this.activeSplitTextPath.Size = new System.Drawing.Size(245, 20); - this.activeSplitTextPath.TabIndex = 1; - this.activeSplitTextPath.TextChanged += new System.EventHandler(this.activeSplitTextPath_TextChanged); - // - // SGLSettings - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoScroll = true; - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.requestLink); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.labelVersionText); - this.Controls.Add(this.linkLabel1); - this.Controls.Add(this.componentByNameLabel); - this.Controls.Add(this.componentByLabel); - this.Controls.Add(this.labelVersion); - this.Controls.Add(this.groupBox); - this.Name = "SGLSettings"; - this.Padding = new System.Windows.Forms.Padding(7); - this.Size = new System.Drawing.Size(476, 489); - this.groupBox.ResumeLayout(false); - this.groupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.fontSizeNumeric)).EndInit(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - + this.groupBox = new System.Windows.Forms.GroupBox(); + this.textColorDisplay = new System.Windows.Forms.Panel(); + this.backgroundColorDisplay = new System.Windows.Forms.Panel(); + this.textColorButton = new System.Windows.Forms.Button(); + this.backgroundColorButton = new System.Windows.Forms.Button(); + this.fontSizeNumeric = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.fontComboBox = new System.Windows.Forms.ComboBox(); + this.editButton = new System.Windows.Forms.Button(); + this.labelVersion = new System.Windows.Forms.Label(); + this.colorDialog1 = new System.Windows.Forms.ColorDialog(); + this.componentByLabel = new System.Windows.Forms.Label(); + this.componentByNameLabel = new System.Windows.Forms.Label(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.labelVersionText = new System.Windows.Forms.LinkLabel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label5 = new System.Windows.Forms.Label(); + this.debugWindowSizeLabel = new System.Windows.Forms.Label(); + this.debugWindowPosLabel = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.debugResizeButton = new System.Windows.Forms.Button(); + this.debugCenterButton = new System.Windows.Forms.Button(); + this.requestLink = new System.Windows.Forms.LinkLabel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.spreadsheetExport = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.spreadsheetImport = new System.Windows.Forms.Button(); + this.activeSplitTextDesc = new System.Windows.Forms.Label(); + this.activeSplitTextCheckBox = new System.Windows.Forms.CheckBox(); + this.activeSplitTextPathBtn = new System.Windows.Forms.Button(); + this.activeSplitTextPath = new System.Windows.Forms.TextBox(); + this.m_markdownEnabled = new System.Windows.Forms.CheckBox(); + this.groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.fontSizeNumeric)).BeginInit(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox + // + this.groupBox.Controls.Add(this.m_markdownEnabled); + this.groupBox.Controls.Add(this.textColorDisplay); + this.groupBox.Controls.Add(this.backgroundColorDisplay); + this.groupBox.Controls.Add(this.textColorButton); + this.groupBox.Controls.Add(this.backgroundColorButton); + this.groupBox.Controls.Add(this.fontSizeNumeric); + this.groupBox.Controls.Add(this.label2); + this.groupBox.Controls.Add(this.label1); + this.groupBox.Controls.Add(this.fontComboBox); + this.groupBox.Controls.Add(this.editButton); + this.groupBox.Location = new System.Drawing.Point(10, 50); + this.groupBox.Margin = new System.Windows.Forms.Padding(2); + this.groupBox.Name = "groupBox"; + this.groupBox.Padding = new System.Windows.Forms.Padding(2); + this.groupBox.Size = new System.Drawing.Size(459, 129); + this.groupBox.TabIndex = 0; + this.groupBox.TabStop = false; + this.groupBox.Text = "Guide"; + // + // textColorDisplay + // + this.textColorDisplay.Location = new System.Drawing.Point(283, 59); + this.textColorDisplay.Name = "textColorDisplay"; + this.textColorDisplay.Size = new System.Drawing.Size(23, 23); + this.textColorDisplay.TabIndex = 12; + // + // backgroundColorDisplay + // + this.backgroundColorDisplay.Location = new System.Drawing.Point(125, 59); + this.backgroundColorDisplay.Name = "backgroundColorDisplay"; + this.backgroundColorDisplay.Size = new System.Drawing.Size(23, 23); + this.backgroundColorDisplay.TabIndex = 11; + // + // textColorButton + // + this.textColorButton.Location = new System.Drawing.Point(172, 59); + this.textColorButton.Name = "textColorButton"; + this.textColorButton.Size = new System.Drawing.Size(105, 23); + this.textColorButton.TabIndex = 10; + this.textColorButton.Text = "Text Color"; + this.textColorButton.UseVisualStyleBackColor = true; + this.textColorButton.Click += new System.EventHandler(this.textColorButton_Click); + // + // backgroundColorButton + // + this.backgroundColorButton.Location = new System.Drawing.Point(14, 59); + this.backgroundColorButton.Name = "backgroundColorButton"; + this.backgroundColorButton.Size = new System.Drawing.Size(105, 23); + this.backgroundColorButton.TabIndex = 9; + this.backgroundColorButton.Text = "Background Color"; + this.backgroundColorButton.UseVisualStyleBackColor = true; + this.backgroundColorButton.Click += new System.EventHandler(this.backgroundColorButton_Click); + // + // fontSizeNumeric + // + this.fontSizeNumeric.Location = new System.Drawing.Point(269, 27); + this.fontSizeNumeric.Margin = new System.Windows.Forms.Padding(2); + this.fontSizeNumeric.Name = "fontSizeNumeric"; + this.fontSizeNumeric.Size = new System.Drawing.Size(37, 20); + this.fontSizeNumeric.TabIndex = 6; + this.fontSizeNumeric.ValueChanged += new System.EventHandler(this.fontSizeNumeric_ValueChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(208, 29); + this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(51, 13); + this.label2.TabIndex = 5; + this.label2.Text = "Font Size"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(11, 29); + this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(28, 13); + this.label1.TabIndex = 4; + this.label1.Text = "Font"; + // + // fontComboBox + // + this.fontComboBox.FormattingEnabled = true; + this.fontComboBox.Location = new System.Drawing.Point(47, 27); + this.fontComboBox.Margin = new System.Windows.Forms.Padding(2); + this.fontComboBox.Name = "fontComboBox"; + this.fontComboBox.Size = new System.Drawing.Size(137, 21); + this.fontComboBox.TabIndex = 1; + this.fontComboBox.SelectedIndexChanged += new System.EventHandler(this.fontComboBox_SelectedIndexChanged); + // + // editButton + // + this.editButton.Location = new System.Drawing.Point(333, 36); + this.editButton.Margin = new System.Windows.Forms.Padding(2); + this.editButton.Name = "editButton"; + this.editButton.Size = new System.Drawing.Size(122, 40); + this.editButton.TabIndex = 0; + this.editButton.Text = "Edit Guide"; + this.editButton.UseVisualStyleBackColor = true; + this.editButton.Click += new System.EventHandler(this.editButton_Click); + // + // labelVersion + // + this.labelVersion.AutoSize = true; + this.labelVersion.Location = new System.Drawing.Point(9, 7); + this.labelVersion.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(45, 13); + this.labelVersion.TabIndex = 2; + this.labelVersion.Text = "Version:"; + // + // componentByLabel + // + this.componentByLabel.AutoSize = true; + this.componentByLabel.Location = new System.Drawing.Point(115, 7); + this.componentByLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.componentByLabel.Name = "componentByLabel"; + this.componentByLabel.Size = new System.Drawing.Size(78, 13); + this.componentByLabel.TabIndex = 13; + this.componentByLabel.Text = "Component by:"; + // + // componentByNameLabel + // + this.componentByNameLabel.AutoSize = true; + this.componentByNameLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.componentByNameLabel.Location = new System.Drawing.Point(195, 7); + this.componentByNameLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.componentByNameLabel.Name = "componentByNameLabel"; + this.componentByNameLabel.Size = new System.Drawing.Size(57, 13); + this.componentByNameLabel.TabIndex = 15; + this.componentByNameLabel.Text = "iNightfall"; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(256, 7); + this.linkLabel1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(161, 13); + this.linkLabel1.TabIndex = 16; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "(http://www.nightgamedev.com)"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // labelVersionText + // + this.labelVersionText.AutoSize = true; + this.labelVersionText.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelVersionText.Location = new System.Drawing.Point(56, 7); + this.labelVersionText.Name = "labelVersionText"; + this.labelVersionText.Size = new System.Drawing.Size(34, 15); + this.labelVersionText.TabIndex = 17; + this.labelVersionText.TabStop = true; + this.labelVersionText.Text = "0.0.0"; + this.labelVersionText.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.labelVersionText_LinkClicked); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.debugWindowSizeLabel); + this.groupBox1.Controls.Add(this.debugWindowPosLabel); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.debugResizeButton); + this.groupBox1.Controls.Add(this.debugCenterButton); + this.groupBox1.Location = new System.Drawing.Point(10, 283); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(459, 101); + this.groupBox1.TabIndex = 18; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Debug Stuff"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(324, 29); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(129, 51); + this.label5.TabIndex = 6; + this.label5.Text = "Save the layout \r\nto keep position \r\nand size."; + // + // debugWindowSizeLabel + // + this.debugWindowSizeLabel.AutoSize = true; + this.debugWindowSizeLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.debugWindowSizeLabel.Location = new System.Drawing.Point(253, 66); + this.debugWindowSizeLabel.Name = "debugWindowSizeLabel"; + this.debugWindowSizeLabel.Size = new System.Drawing.Size(36, 16); + this.debugWindowSizeLabel.TabIndex = 5; + this.debugWindowSizeLabel.Text = "(0, 0)"; + // + // debugWindowPosLabel + // + this.debugWindowPosLabel.AutoSize = true; + this.debugWindowPosLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.debugWindowPosLabel.Location = new System.Drawing.Point(253, 29); + this.debugWindowPosLabel.Name = "debugWindowPosLabel"; + this.debugWindowPosLabel.Size = new System.Drawing.Size(36, 16); + this.debugWindowPosLabel.TabIndex = 4; + this.debugWindowPosLabel.Text = "(0, 0)"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(146, 67); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(103, 13); + this.label4.TabIndex = 3; + this.label4.Text = "Guide Window Size:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(146, 31); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(101, 13); + this.label3.TabIndex = 2; + this.label3.Text = "Guide Window Pos:"; + // + // debugResizeButton + // + this.debugResizeButton.Location = new System.Drawing.Point(14, 63); + this.debugResizeButton.Name = "debugResizeButton"; + this.debugResizeButton.Size = new System.Drawing.Size(105, 23); + this.debugResizeButton.TabIndex = 1; + this.debugResizeButton.Text = "Resize Guide"; + this.debugResizeButton.UseVisualStyleBackColor = true; + this.debugResizeButton.Click += new System.EventHandler(this.debugResizeButton_Click); + // + // debugCenterButton + // + this.debugCenterButton.Location = new System.Drawing.Point(14, 26); + this.debugCenterButton.Name = "debugCenterButton"; + this.debugCenterButton.Size = new System.Drawing.Size(105, 23); + this.debugCenterButton.TabIndex = 0; + this.debugCenterButton.Text = "Center Guide"; + this.debugCenterButton.UseVisualStyleBackColor = true; + this.debugCenterButton.Click += new System.EventHandler(this.debugCenterButton_Click); + // + // requestLink + // + this.requestLink.AutoSize = true; + this.requestLink.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.requestLink.Location = new System.Drawing.Point(13, 29); + this.requestLink.Name = "requestLink"; + this.requestLink.Size = new System.Drawing.Size(177, 15); + this.requestLink.TabIndex = 20; + this.requestLink.TabStop = true; + this.requestLink.Text = "Request Feature or Report Bug"; + this.requestLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.requestLink_LinkClicked); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.spreadsheetExport); + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.spreadsheetImport); + this.groupBox2.Controls.Add(this.activeSplitTextDesc); + this.groupBox2.Controls.Add(this.activeSplitTextCheckBox); + this.groupBox2.Controls.Add(this.activeSplitTextPathBtn); + this.groupBox2.Controls.Add(this.activeSplitTextPath); + this.groupBox2.Location = new System.Drawing.Point(10, 187); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(459, 90); + this.groupBox2.TabIndex = 19; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Extra Stuff"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.Location = new System.Drawing.Point(373, 68); + this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(36, 13); + this.label8.TabIndex = 9; + this.label8.Text = "(.tsv)"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(339, 53); + this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(113, 13); + this.label7.TabIndex = 8; + this.label7.Text = "Must be tab-separated"; + // + // spreadsheetExport + // + this.spreadsheetExport.Location = new System.Drawing.Point(251, 55); + this.spreadsheetExport.Name = "spreadsheetExport"; + this.spreadsheetExport.Size = new System.Drawing.Size(75, 23); + this.spreadsheetExport.TabIndex = 7; + this.spreadsheetExport.Text = "Export"; + this.spreadsheetExport.UseVisualStyleBackColor = true; + this.spreadsheetExport.Click += new System.EventHandler(this.spreadsheetExport_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(11, 60); + this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(137, 13); + this.label6.TabIndex = 6; + this.label6.Text = "Spreadsheet Import/Export:"; + // + // spreadsheetImport + // + this.spreadsheetImport.Location = new System.Drawing.Point(170, 55); + this.spreadsheetImport.Name = "spreadsheetImport"; + this.spreadsheetImport.Size = new System.Drawing.Size(75, 23); + this.spreadsheetImport.TabIndex = 5; + this.spreadsheetImport.Text = "Import"; + this.spreadsheetImport.UseVisualStyleBackColor = true; + this.spreadsheetImport.Click += new System.EventHandler(this.spreadsheetImport_Click); + // + // activeSplitTextDesc + // + this.activeSplitTextDesc.AutoSize = true; + this.activeSplitTextDesc.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.activeSplitTextDesc.Location = new System.Drawing.Point(185, 25); + this.activeSplitTextDesc.Name = "activeSplitTextDesc"; + this.activeSplitTextDesc.Size = new System.Drawing.Size(225, 13); + this.activeSplitTextDesc.TabIndex = 4; + this.activeSplitTextDesc.Text = "Outputs the current guide to a .txt file."; + // + // activeSplitTextCheckBox + // + this.activeSplitTextCheckBox.AutoSize = true; + this.activeSplitTextCheckBox.Location = new System.Drawing.Point(6, 24); + this.activeSplitTextCheckBox.Name = "activeSplitTextCheckBox"; + this.activeSplitTextCheckBox.Size = new System.Drawing.Size(160, 17); + this.activeSplitTextCheckBox.TabIndex = 3; + this.activeSplitTextCheckBox.Text = "Active Split Txt Output Path:"; + this.activeSplitTextCheckBox.UseVisualStyleBackColor = true; + this.activeSplitTextCheckBox.CheckedChanged += new System.EventHandler(this.activeSplitTextCheckBox_CheckedChanged); + // + // activeSplitTextPathBtn + // + this.activeSplitTextPathBtn.Location = new System.Drawing.Point(423, 20); + this.activeSplitTextPathBtn.Name = "activeSplitTextPathBtn"; + this.activeSplitTextPathBtn.Size = new System.Drawing.Size(28, 23); + this.activeSplitTextPathBtn.TabIndex = 2; + this.activeSplitTextPathBtn.Text = "..."; + this.activeSplitTextPathBtn.UseVisualStyleBackColor = true; + this.activeSplitTextPathBtn.Click += new System.EventHandler(this.activeSplitTextPathBtn_Click); + // + // activeSplitTextPath + // + this.activeSplitTextPath.Location = new System.Drawing.Point(172, 22); + this.activeSplitTextPath.Name = "activeSplitTextPath"; + this.activeSplitTextPath.Size = new System.Drawing.Size(245, 20); + this.activeSplitTextPath.TabIndex = 1; + this.activeSplitTextPath.TextChanged += new System.EventHandler(this.activeSplitTextPath_TextChanged); + // + // m_markdownEnabled + // + this.m_markdownEnabled.AutoSize = true; + this.m_markdownEnabled.Checked = true; + this.m_markdownEnabled.CheckState = System.Windows.Forms.CheckState.Checked; + this.m_markdownEnabled.Location = new System.Drawing.Point(14, 97); + this.m_markdownEnabled.Name = "m_markdownEnabled"; + this.m_markdownEnabled.Size = new System.Drawing.Size(150, 17); + this.m_markdownEnabled.TabIndex = 13; + this.m_markdownEnabled.Text = "Use Markdown Formatting"; + this.m_markdownEnabled.UseVisualStyleBackColor = true; + this.m_markdownEnabled.CheckedChanged += new System.EventHandler(this.markdownEnabled_CheckedChanged); + // + // SGLSettings + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.requestLink); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.labelVersionText); + this.Controls.Add(this.linkLabel1); + this.Controls.Add(this.componentByNameLabel); + this.Controls.Add(this.componentByLabel); + this.Controls.Add(this.labelVersion); + this.Controls.Add(this.groupBox); + this.Name = "SGLSettings"; + this.Padding = new System.Windows.Forms.Padding(7); + this.Size = new System.Drawing.Size(476, 489); + this.groupBox.ResumeLayout(false); + this.groupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.fontSizeNumeric)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + } #endregion @@ -498,6 +513,7 @@ private void InitializeComponent() private System.Windows.Forms.Label label6; private System.Windows.Forms.Button spreadsheetImport; private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - } + private System.Windows.Forms.Label label8; + private System.Windows.Forms.CheckBox m_markdownEnabled; + } } diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.resx b/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.resx index aa0ca0f..a480212 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.resx +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLSettings.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + \ No newline at end of file diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs index 4174925..3c1aef2 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs @@ -41,15 +41,19 @@ public SGLTextEditor() editorTextBox.TextChanged += EditorTextBox_TextChanged; webBrowser.Navigate("about:blank"); - } - - private void EditorTextBox_TextChanged(object sender, EventArgs e) - { - string html = Markdown.ToHtml(EditorText); - HtmlDocument doc = webBrowser.Document.OpenNew(true); - doc.Write(html); - } - + } + + private void EditorTextBox_TextChanged(object sender, EventArgs e) + { + string html = ""; + html += Markdown.ToHtml(EditorText); + html += ""; + HtmlDocument doc = webBrowser.Document.OpenNew(true); + doc.Write(html); + } + private void SGLTextEditor_LocationChanged(object sender, EventArgs e) { s_location = Location; From 672c991312d8fa9c9e09595eca3663b7cdf78cef Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 21:47:52 -0800 Subject: [PATCH 23/30] Fix issue where notes window could not be resized or moved under some situations --- .../src/SGLGuideWindow.cs | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 9f0a177..8f8fa5a 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -64,9 +64,9 @@ public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, G // browser needs to be set to a default page in order to have a valid document Browser.Navigate("about:blank"); - Browser.GotFocus += Browser_GotFocus; - } - + Browser.PreviewKeyDown += Browser_PreviewKeyDown; + } + protected override void OnShown(EventArgs e) { base.OnShown(e); @@ -236,6 +236,7 @@ private void SetGuideText(string text) { HtmlDocument doc = Browser.Document.OpenNew(true); doc.Write(GenerateHtmlFromMD(text)); + doc.MouseDown += Document_MouseDown; } } @@ -337,6 +338,9 @@ protected override void WndProc(ref Message m) [System.Runtime.InteropServices.DllImportAttribute("user32.dll")] private static extern bool ReleaseCapture(); + /// + /// Event handler for the base window to move/resize. + /// private void SGLGuideWindow_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) @@ -346,20 +350,31 @@ private void SGLGuideWindow_MouseDown(object sender, MouseEventArgs e) } } - private void SGLGuideWindow_MouseMove(object sender, MouseEventArgs e) - { - ReleaseCapture(); - SendMessage(Handle, WM_NCLBUTTONMOVE, HT_CAPTION, 0); - } + /// + /// Event Handler for the browser to pass off mouse events properly for moving/resizing the window. + /// + private void Document_MouseDown(object sender, HtmlElementEventArgs e) + { + if (e.MouseButtonsPressed == MouseButtons.Left) + { + ReleaseCapture(); + SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); + } + } /// /// Focus event for the browser component. This is a hack to force focus back to LiveSplit. /// This is done as a workaround so that splitting does not return focus to the browser. /// - private void Browser_GotFocus(object sender, EventArgs e) - { - m_parentForm.Focus(); - } + private void Browser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + // This is definitely a hack, but the browser is grabbing focus from key down events while splitting. + // Putting this inside a focus event disables the ability to move and resize the window, however, + // keyboard is not used to control the notes window so ... this technically works. + // In addition: this is only an issue while the livesplit window has focus! The browser is not intercepting + // key events while things such as OBS, Chrome, etc are in the foreground. + m_parentForm.Focus(); + } private void OnFontChanged(Font font) { @@ -412,6 +427,6 @@ private void OnDebugCenter() private void OnDebugResize() { SetSize(SGLSettings.StartingSize); - } + } } } From d36add4c45969df85c62cc445ad3a2c64556ff9f Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 21:48:29 -0800 Subject: [PATCH 24/30] Remove known issue from readme since it's fixed --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index ab694cd..1a3af6e 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,3 @@ If you like the app, or have some suggestions, send me a shout-out on my Twitter - Notes are now markdown formatted - Images are supported (currently needs a full path and does not support resizing in markdown) - In addition to SpeedGuidesLive.dll, Markdig.dll and System.Memory.dll need to be copied over to LiveSplit as well - -### Known Issues - -- Cannot drag window from anywhere, must currently grab from edges. From 88a85567b488a9bcce39ec6c6a0efc78f32a0337 Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 22:10:45 -0800 Subject: [PATCH 25/30] Add additional CSS to force pre tags to wrap text to the next line for when markdown is disabled. Words do get broken, but that is a limitation with using pre-formatted text in html. --- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 1 + src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 8f8fa5a..8e54bfa 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -201,6 +201,7 @@ private string GenerateHtmlFromMD(string text) html += "font-size: " + m_component.Settings.GuideFont.Size.ToString() + "px;"; html += "}"; html += "img{max-width:100%;}"; + html += "pre{word-wrap:break-word;}"; html += ""; // convert the markdown to html and add it to the browser page diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs index 3c1aef2..074632e 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs @@ -47,6 +47,7 @@ private void EditorTextBox_TextChanged(object sender, EventArgs e) { string html = ""; html += Markdown.ToHtml(EditorText); html += ""; From 15bf9f35f6d12ecb10eaa96ebbad180eff1e527a Mon Sep 17 00:00:00 2001 From: Phantom Date: Wed, 15 Dec 2021 22:49:49 -0800 Subject: [PATCH 26/30] Use C#6 style multiline format strings --- .../src/SGLGuideWindow.cs | 42 ++++++++++--------- .../src/SGLTextEditor.cs | 14 +++---- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 8e54bfa..8e9e062 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -191,39 +191,41 @@ private void ValidateComponents(bool force) /// Markdown string that is in the process of being rendered. /// A string containing valid html that can be placed into a web browser. private string GenerateHtmlFromMD(string text) - { - // set the styles for the browser window based on user settings - string html = ""; - + { // convert the markdown to html and add it to the browser page + string notes; try { if (m_component.Settings.MarkdownEnabled) { - string htmlStr = Markdown.ToHtml(text); - html += htmlStr; + notes = Markdown.ToHtml(text); } else { - html += string.Format("
{0}
", text); + notes = $"
{text}
"; } } catch (Exception e) { - html += e.Message; + notes = e.Message; } - html += ""; - - return html; + + // set the styles for the browser window based on user settings + return + $@" + + {notes} + + "; } /// diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs index 074632e..6375751 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs @@ -45,14 +45,14 @@ public SGLTextEditor() private void EditorTextBox_TextChanged(object sender, EventArgs e) { - string html = ""; - html += Markdown.ToHtml(EditorText); - html += ""; HtmlDocument doc = webBrowser.Document.OpenNew(true); - doc.Write(html); + doc.Write( + $@" + {Markdown.ToHtml(EditorText)} + "); } private void SGLTextEditor_LocationChanged(object sender, EventArgs e) From 4d8befa43f35118b0d376ac4d58c91e597665850 Mon Sep 17 00:00:00 2001 From: Phantom Date: Thu, 16 Dec 2021 10:33:08 -0800 Subject: [PATCH 27/30] Fix an issue with characters that need to be html encoded --- README.md | 7 ++++--- .../LiveSplit.SpeedGuidesLive.csproj | 3 ++- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 7 ++----- src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs | 8 ++------ 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 1a3af6e..d922d9e 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ If you like the app, or have some suggestions, send me a shout-out on my Twitter ## Additions by Phantom5800 -- Notes are now markdown formatted -- Images are supported (currently needs a full path and does not support resizing in markdown) -- In addition to SpeedGuidesLive.dll, Markdig.dll and System.Memory.dll need to be copied over to LiveSplit as well +- Notes are now markdown formatted. +- Editor window provides a preview of markdown formatting. +- Images are supported (currently needs a full path and does not support resizing in markdown). +- In addition to SpeedGuidesLive.dll, Markdig.dll and System.Memory.dll, System.Runtime.CompilerServices.Unsafe.dll need to be copied over to LiveSplit as well. diff --git a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj index 6284004..f0183b0 100644 --- a/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj +++ b/src/LiveSplit.SpeedGuidesLive/LiveSplit.SpeedGuidesLive.csproj @@ -62,6 +62,7 @@ + @@ -142,6 +143,6 @@ xcopy /Y "$(TargetPath)" "$(SolutionDir)..\LiveSplit\Components\" xcopy /Y "$(TargetDir)\Markdig.dll" "$(SolutionDir)..\LiveSplit\Components\" -xcopy /Y "$(TargetDir)\System.Memory.dll" "$(SolutionDir)..\LiveSplit\Components\" +xcopy /Y "$(TargetDir)\System.*.dll" "$(SolutionDir)..\LiveSplit\Components\" \ No newline at end of file diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index 8e9e062..d74e857 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -3,13 +3,10 @@ using LiveSplit.UI.Components; using Markdig; using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Data; using System.Drawing; using System.IO; -using System.Linq; -using System.Text; +using System.Web; using System.Windows.Forms; @@ -198,7 +195,7 @@ private string GenerateHtmlFromMD(string text) { if (m_component.Settings.MarkdownEnabled) { - notes = Markdown.ToHtml(text); + notes = Markdown.ToHtml(HttpUtility.HtmlEncode(text)); } else { diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs index 6375751..396988b 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs @@ -1,10 +1,6 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; using System.Drawing; -using System.Linq; -using System.Text; +using System.Web; using System.Windows.Forms; using Markdig; @@ -51,7 +47,7 @@ private void EditorTextBox_TextChanged(object sender, EventArgs e) img{{max-width:100%;}} pre{{word-wrap:break-word;}} - {Markdown.ToHtml(EditorText)} + {Markdown.ToHtml(HttpUtility.HtmlEncode(EditorText))} "); } From d7675b45fc393ebefa111c7e323b7459103b7f97 Mon Sep 17 00:00:00 2001 From: Phantom Date: Thu, 16 Dec 2021 11:03:27 -0800 Subject: [PATCH 28/30] Enable extensions in markdown. This is used for tables, emoji's, etc. --- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 7 ++++++- src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index d74e857..cea1fea 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -35,6 +35,7 @@ public partial class SGLGuideWindow : Form private Color m_backgroundColor = Color.FromArgb(16, 16, 16); private Color m_textColor = Color.White; private int m_currentSplitIndex = -1; + private MarkdownPipeline m_markdownRenderer = null; public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, Guide guide) { @@ -62,6 +63,10 @@ public SGLGuideWindow(SGLComponent component, Form parentForm, ILayout layout, G // browser needs to be set to a default page in order to have a valid document Browser.Navigate("about:blank"); Browser.PreviewKeyDown += Browser_PreviewKeyDown; + m_markdownRenderer = new MarkdownPipelineBuilder() + .UseAdvancedExtensions() + .UseEmojiAndSmiley() + .Build(); } protected override void OnShown(EventArgs e) @@ -195,7 +200,7 @@ private string GenerateHtmlFromMD(string text) { if (m_component.Settings.MarkdownEnabled) { - notes = Markdown.ToHtml(HttpUtility.HtmlEncode(text)); + notes = Markdown.ToHtml(HttpUtility.HtmlEncode(text), m_markdownRenderer); } else { diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs index 396988b..dc82da2 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLTextEditor.cs @@ -11,6 +11,8 @@ public partial class SGLTextEditor : Form private static Size s_windowSize = Size.Empty; private static Point s_location = Point.Empty; + private MarkdownPipeline m_markdownRenderer = null; + public string EditorText { get { return editorTextBox.Text; } @@ -37,6 +39,10 @@ public SGLTextEditor() editorTextBox.TextChanged += EditorTextBox_TextChanged; webBrowser.Navigate("about:blank"); + m_markdownRenderer = new MarkdownPipelineBuilder() + .UseAdvancedExtensions() + .UseEmojiAndSmiley() + .Build(); } private void EditorTextBox_TextChanged(object sender, EventArgs e) @@ -47,7 +53,7 @@ private void EditorTextBox_TextChanged(object sender, EventArgs e) img{{max-width:100%;}} pre{{word-wrap:break-word;}} - {Markdown.ToHtml(HttpUtility.HtmlEncode(EditorText))} + {Markdown.ToHtml(HttpUtility.HtmlEncode(EditorText), m_markdownRenderer)} "); } From 6fe74dc77eb435b2e487deb0ca6a083e5d574e22 Mon Sep 17 00:00:00 2001 From: Phantom Date: Mon, 20 Dec 2021 18:29:02 -0800 Subject: [PATCH 29/30] Fix an issue with focus being taken away from the text editor --- .../src/SGLGuideWindow.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index cea1fea..ba29c5b 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -373,12 +373,15 @@ private void Document_MouseDown(object sender, HtmlElementEventArgs e) /// private void Browser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { - // This is definitely a hack, but the browser is grabbing focus from key down events while splitting. - // Putting this inside a focus event disables the ability to move and resize the window, however, - // keyboard is not used to control the notes window so ... this technically works. - // In addition: this is only an issue while the livesplit window has focus! The browser is not intercepting - // key events while things such as OBS, Chrome, etc are in the foreground. - m_parentForm.Focus(); + if (Focused) + { + // This is definitely a hack, but the browser is grabbing focus from key down events while splitting. + // Putting this inside a focus event disables the ability to move and resize the window, however, + // keyboard is not used to control the notes window so ... this technically works. + // In addition: this is only an issue while the livesplit window has focus! The browser is not intercepting + // key events while things such as OBS, Chrome, etc are in the foreground. + m_parentForm.Focus(); + } } private void OnFontChanged(Font font) From 368be4fd992c8d0703bb3a963cf4eb07966da27f Mon Sep 17 00:00:00 2001 From: Phantom Date: Mon, 20 Dec 2021 18:33:17 -0800 Subject: [PATCH 30/30] Proper fix / workaround for the browser focus hack --- src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs index ba29c5b..70c0fd6 100644 --- a/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs +++ b/src/LiveSplit.SpeedGuidesLive/src/SGLGuideWindow.cs @@ -373,7 +373,7 @@ private void Document_MouseDown(object sender, HtmlElementEventArgs e) /// private void Browser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { - if (Focused) + if (Focused || Browser.Focused) { // This is definitely a hack, but the browser is grabbing focus from key down events while splitting. // Putting this inside a focus event disables the ability to move and resize the window, however,