commit f7316622ca222ee45cc845e26ffed3c38cd724c3 Author: Ray Date: Sat Jun 27 15:39:05 2026 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f87d36 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +bin +obj +packages +*~ +/.github +/.vs \ No newline at end of file diff --git a/SuzuMagnifier.slnx b/SuzuMagnifier.slnx new file mode 100644 index 0000000..de12f16 --- /dev/null +++ b/SuzuMagnifier.slnx @@ -0,0 +1,3 @@ + + + diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..40e522a --- /dev/null +++ b/build.bat @@ -0,0 +1,11 @@ +rmdir /s /q "bin\" +rmdir /s /q "source\bin\" +rmdir /s /q "source\obj\" + +dotnet restore SuzuMagnifier.slnx +dotnet publish SuzuMagnifier.slnx -r win-x64 -c Release /p:PublishSingleFile=true /p:SelfContained=false /p:PublishReadyToRunfalse=true /p:PublishDir="..\bin\" + +rmdir /s /q "source\bin\" +rmdir /s /q "source\obj\" + +REM PAUSE \ No newline at end of file diff --git a/icon/favicon.ico b/icon/favicon.ico new file mode 100644 index 0000000..49097ef Binary files /dev/null and b/icon/favicon.ico differ diff --git a/icon/icon-1.svg b/icon/icon-1.svg new file mode 100644 index 0000000..e482fb2 --- /dev/null +++ b/icon/icon-1.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + diff --git a/icon/icon-128.png b/icon/icon-128.png new file mode 100644 index 0000000..230e29c Binary files /dev/null and b/icon/icon-128.png differ diff --git a/icon/icon-16.png b/icon/icon-16.png new file mode 100644 index 0000000..4d7239c Binary files /dev/null and b/icon/icon-16.png differ diff --git a/icon/icon-24.png b/icon/icon-24.png new file mode 100644 index 0000000..a71644f Binary files /dev/null and b/icon/icon-24.png differ diff --git a/icon/icon-32.png b/icon/icon-32.png new file mode 100644 index 0000000..100db42 Binary files /dev/null and b/icon/icon-32.png differ diff --git a/icon/icon-48.png b/icon/icon-48.png new file mode 100644 index 0000000..a2d87ef Binary files /dev/null and b/icon/icon-48.png differ diff --git a/icon/icon-64.png b/icon/icon-64.png new file mode 100644 index 0000000..bedd62b Binary files /dev/null and b/icon/icon-64.png differ diff --git a/source/Dtos/SavedOptions.cs b/source/Dtos/SavedOptions.cs new file mode 100644 index 0000000..eaf6bd2 --- /dev/null +++ b/source/Dtos/SavedOptions.cs @@ -0,0 +1,22 @@ +namespace SuzuMagnifier.Dtos +{ + public class SavedOptions + { + public int Version { get; set; } = 1; + + public bool AutoStart { get; set; } + + public bool HighQuality { get; set; } + + public int ZoomFactor { get; set; } + + public int UpdateFrequency { get; set; } + + public bool ShowCrosshair { get; set; } + + public int CrosshairSize { get; set; } + + public Color CrosshairColour { get; set; } + + } +} diff --git a/source/Form1.Designer.cs b/source/Form1.Designer.cs new file mode 100644 index 0000000..4d8dc1b --- /dev/null +++ b/source/Form1.Designer.cs @@ -0,0 +1,345 @@ +namespace SuzuMagnifier +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + notifyIcon1 = new NotifyIcon(components); + contextMenuStrip1 = new ContextMenuStrip(components); + toolStripMenuItem1 = new ToolStripMenuItem(); + toolStripMenuItem2 = new ToolStripMenuItem(); + toolStripSeparator2 = new ToolStripSeparator(); + toolStripMenuItem4 = new ToolStripMenuItem(); + fasterToolStripMenuItem = new ToolStripMenuItem(); + highToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem6 = new ToolStripMenuItem(); + toolStripMenuItem7 = new ToolStripMenuItem(); + toolStripMenuItem8 = new ToolStripMenuItem(); + toolStripSeparator3 = new ToolStripSeparator(); + resetToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem9 = new ToolStripMenuItem(); + showToolStripMenuItem = new ToolStripMenuItem(); + toolStripSeparator5 = new ToolStripSeparator(); + sizeToolStripMenuItem = new ToolStripMenuItem(); + smallToolStripMenuItem = new ToolStripMenuItem(); + mediumToolStripMenuItem = new ToolStripMenuItem(); + largeToolStripMenuItem = new ToolStripMenuItem(); + colourToolStripMenuItem = new ToolStripMenuItem(); + agentaToolStripMenuItem = new ToolStripMenuItem(); + cyanToolStripMenuItem = new ToolStripMenuItem(); + yellowToolStripMenuItem = new ToolStripMenuItem(); + greenToolStripMenuItem = new ToolStripMenuItem(); + redToolStripMenuItem = new ToolStripMenuItem(); + blackToolStripMenuItem = new ToolStripMenuItem(); + whiteToolStripMenuItem = new ToolStripMenuItem(); + toolStripSeparator4 = new ToolStripSeparator(); + toolStripMenuItem5 = new ToolStripMenuItem(); + toolStripMenuItem3 = new ToolStripMenuItem(); + toolStripSeparator1 = new ToolStripSeparator(); + exitiToolStripMenuItem = new ToolStripMenuItem(); + contextMenuStrip1.SuspendLayout(); + SuspendLayout(); + // + // notifyIcon1 + // + notifyIcon1.ContextMenuStrip = contextMenuStrip1; + notifyIcon1.Icon = (Icon)resources.GetObject("notifyIcon1.Icon"); + notifyIcon1.Text = "notifyIcon1"; + notifyIcon1.Visible = true; + // + // contextMenuStrip1 + // + contextMenuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem1, toolStripMenuItem2, toolStripSeparator2, toolStripMenuItem4, toolStripMenuItem6, toolStripMenuItem9, toolStripSeparator4, toolStripMenuItem5, toolStripMenuItem3, toolStripSeparator1, exitiToolStripMenuItem }); + contextMenuStrip1.Name = "contextMenuStrip1"; + contextMenuStrip1.Size = new Size(205, 198); + contextMenuStrip1.Opening += contextMenuStrip1_Opening; + // + // toolStripMenuItem1 + // + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new Size(204, 22); + toolStripMenuItem1.Text = "&Start"; + toolStripMenuItem1.Click += toolStripMenuItem1_Click; + // + // toolStripMenuItem2 + // + toolStripMenuItem2.Name = "toolStripMenuItem2"; + toolStripMenuItem2.Size = new Size(204, 22); + toolStripMenuItem2.Text = "Sto&p"; + toolStripMenuItem2.Click += toolStripMenuItem2_Click; + // + // toolStripSeparator2 + // + toolStripSeparator2.Name = "toolStripSeparator2"; + toolStripSeparator2.Size = new Size(201, 6); + // + // toolStripMenuItem4 + // + toolStripMenuItem4.DropDownItems.AddRange(new ToolStripItem[] { fasterToolStripMenuItem, highToolStripMenuItem }); + toolStripMenuItem4.Name = "toolStripMenuItem4"; + toolStripMenuItem4.Size = new Size(204, 22); + toolStripMenuItem4.Text = "&Quality"; + // + // fasterToolStripMenuItem + // + fasterToolStripMenuItem.Name = "fasterToolStripMenuItem"; + fasterToolStripMenuItem.Size = new Size(100, 22); + fasterToolStripMenuItem.Text = "&Fast"; + fasterToolStripMenuItem.Click += fastToolStripMenuItem_Click; + // + // highToolStripMenuItem + // + highToolStripMenuItem.Name = "highToolStripMenuItem"; + highToolStripMenuItem.Size = new Size(100, 22); + highToolStripMenuItem.Text = "&High"; + highToolStripMenuItem.Click += highToolStripMenuItem_Click; + // + // toolStripMenuItem6 + // + toolStripMenuItem6.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem7, toolStripMenuItem8, toolStripSeparator3, resetToolStripMenuItem }); + toolStripMenuItem6.Name = "toolStripMenuItem6"; + toolStripMenuItem6.Size = new Size(204, 22); + toolStripMenuItem6.Text = "Zoom"; + // + // toolStripMenuItem7 + // + toolStripMenuItem7.Name = "toolStripMenuItem7"; + toolStripMenuItem7.ShortcutKeys = Keys.Control | Keys.Oemplus; + toolStripMenuItem7.Size = new Size(214, 22); + toolStripMenuItem7.Text = "Increase"; + toolStripMenuItem7.Click += toolStripMenuItem7_Click; + // + // toolStripMenuItem8 + // + toolStripMenuItem8.Name = "toolStripMenuItem8"; + toolStripMenuItem8.ShortcutKeys = Keys.Control | Keys.OemMinus; + toolStripMenuItem8.Size = new Size(214, 22); + toolStripMenuItem8.Text = "Decrease"; + toolStripMenuItem8.Click += toolStripMenuItem8_Click; + // + // toolStripSeparator3 + // + toolStripSeparator3.Name = "toolStripSeparator3"; + toolStripSeparator3.Size = new Size(211, 6); + // + // resetToolStripMenuItem + // + resetToolStripMenuItem.Name = "resetToolStripMenuItem"; + resetToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.D0; + resetToolStripMenuItem.Size = new Size(214, 22); + resetToolStripMenuItem.Text = "Reset"; + resetToolStripMenuItem.Click += resetToolStripMenuItem_Click; + // + // toolStripMenuItem9 + // + toolStripMenuItem9.DropDownItems.AddRange(new ToolStripItem[] { showToolStripMenuItem, toolStripSeparator5, sizeToolStripMenuItem, colourToolStripMenuItem }); + toolStripMenuItem9.Name = "toolStripMenuItem9"; + toolStripMenuItem9.Size = new Size(204, 22); + toolStripMenuItem9.Text = "Crosshair"; + // + // showToolStripMenuItem + // + showToolStripMenuItem.Name = "showToolStripMenuItem"; + showToolStripMenuItem.Size = new Size(110, 22); + showToolStripMenuItem.Text = "Show"; + showToolStripMenuItem.Click += showToolStripMenuItem_Click; + // + // toolStripSeparator5 + // + toolStripSeparator5.Name = "toolStripSeparator5"; + toolStripSeparator5.Size = new Size(107, 6); + // + // sizeToolStripMenuItem + // + sizeToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { smallToolStripMenuItem, mediumToolStripMenuItem, largeToolStripMenuItem }); + sizeToolStripMenuItem.Name = "sizeToolStripMenuItem"; + sizeToolStripMenuItem.Size = new Size(110, 22); + sizeToolStripMenuItem.Text = "Size"; + // + // smallToolStripMenuItem + // + smallToolStripMenuItem.Name = "smallToolStripMenuItem"; + smallToolStripMenuItem.Size = new Size(119, 22); + smallToolStripMenuItem.Text = "Small"; + smallToolStripMenuItem.Click += smallToolStripMenuItem_Click; + // + // mediumToolStripMenuItem + // + mediumToolStripMenuItem.Name = "mediumToolStripMenuItem"; + mediumToolStripMenuItem.Size = new Size(119, 22); + mediumToolStripMenuItem.Text = "Medium"; + mediumToolStripMenuItem.Click += mediumToolStripMenuItem_Click; + // + // largeToolStripMenuItem + // + largeToolStripMenuItem.Name = "largeToolStripMenuItem"; + largeToolStripMenuItem.Size = new Size(119, 22); + largeToolStripMenuItem.Text = "Large"; + largeToolStripMenuItem.Click += largeToolStripMenuItem_Click; + // + // colourToolStripMenuItem + // + colourToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { agentaToolStripMenuItem, cyanToolStripMenuItem, yellowToolStripMenuItem, greenToolStripMenuItem, redToolStripMenuItem, blackToolStripMenuItem, whiteToolStripMenuItem }); + colourToolStripMenuItem.Name = "colourToolStripMenuItem"; + colourToolStripMenuItem.Size = new Size(110, 22); + colourToolStripMenuItem.Text = "Colour"; + // + // agentaToolStripMenuItem + // + agentaToolStripMenuItem.Name = "agentaToolStripMenuItem"; + agentaToolStripMenuItem.Size = new Size(121, 22); + agentaToolStripMenuItem.Text = "Magenta"; + agentaToolStripMenuItem.Click += agentaToolStripMenuItem_Click; + // + // cyanToolStripMenuItem + // + cyanToolStripMenuItem.Name = "cyanToolStripMenuItem"; + cyanToolStripMenuItem.Size = new Size(121, 22); + cyanToolStripMenuItem.Text = "Cyan"; + cyanToolStripMenuItem.Click += cyanToolStripMenuItem_Click; + // + // yellowToolStripMenuItem + // + yellowToolStripMenuItem.Name = "yellowToolStripMenuItem"; + yellowToolStripMenuItem.Size = new Size(121, 22); + yellowToolStripMenuItem.Text = "Yellow"; + yellowToolStripMenuItem.Click += yellowToolStripMenuItem_Click; + // + // greenToolStripMenuItem + // + greenToolStripMenuItem.Name = "greenToolStripMenuItem"; + greenToolStripMenuItem.Size = new Size(121, 22); + greenToolStripMenuItem.Text = "Green"; + greenToolStripMenuItem.Click += greenToolStripMenuItem_Click; + // + // redToolStripMenuItem + // + redToolStripMenuItem.Name = "redToolStripMenuItem"; + redToolStripMenuItem.Size = new Size(121, 22); + redToolStripMenuItem.Text = "Red"; + redToolStripMenuItem.Click += redToolStripMenuItem_Click; + // + // blackToolStripMenuItem + // + blackToolStripMenuItem.Name = "blackToolStripMenuItem"; + blackToolStripMenuItem.Size = new Size(121, 22); + blackToolStripMenuItem.Text = "Black"; + blackToolStripMenuItem.Click += blackToolStripMenuItem_Click; + // + // whiteToolStripMenuItem + // + whiteToolStripMenuItem.Name = "whiteToolStripMenuItem"; + whiteToolStripMenuItem.Size = new Size(121, 22); + whiteToolStripMenuItem.Text = "White"; + whiteToolStripMenuItem.Click += whiteToolStripMenuItem_Click; + // + // toolStripSeparator4 + // + toolStripSeparator4.Name = "toolStripSeparator4"; + toolStripSeparator4.Size = new Size(201, 6); + // + // toolStripMenuItem5 + // + toolStripMenuItem5.Name = "toolStripMenuItem5"; + toolStripMenuItem5.ShortcutKeys = Keys.Control | Keys.F11; + toolStripMenuItem5.Size = new Size(204, 22); + toolStripMenuItem5.Text = "Al&ways On Top"; + toolStripMenuItem5.Click += toolStripMenuItem5_Click; + // + // toolStripMenuItem3 + // + toolStripMenuItem3.Name = "toolStripMenuItem3"; + toolStripMenuItem3.ShortcutKeys = Keys.F11; + toolStripMenuItem3.Size = new Size(204, 22); + toolStripMenuItem3.Text = "&Fullscreen"; + toolStripMenuItem3.Click += toolStripMenuItem3_Click; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new Size(201, 6); + // + // exitiToolStripMenuItem + // + exitiToolStripMenuItem.Name = "exitiToolStripMenuItem"; + exitiToolStripMenuItem.Size = new Size(204, 22); + exitiToolStripMenuItem.Text = "E&xit"; + exitiToolStripMenuItem.Click += exitiToolStripMenuItem_Click; + // + // Form1 + // + AutoScaleDimensions = new SizeF(96F, 96F); + AutoScaleMode = AutoScaleMode.Dpi; + ClientSize = new Size(800, 450); + ContextMenuStrip = contextMenuStrip1; + Font = new Font("Segoe UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + ForeColor = Color.WhiteSmoke; + Icon = (Icon)resources.GetObject("$this.Icon"); + Name = "Form1"; + contextMenuStrip1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private NotifyIcon notifyIcon1; + private ContextMenuStrip contextMenuStrip1; + private ToolStripMenuItem exitiToolStripMenuItem; + private ToolStripMenuItem toolStripMenuItem1; + private ToolStripMenuItem toolStripMenuItem2; + private ToolStripSeparator toolStripSeparator1; + private ToolStripMenuItem toolStripMenuItem3; + private ToolStripSeparator toolStripSeparator2; + private ToolStripMenuItem toolStripMenuItem4; + private ToolStripMenuItem fasterToolStripMenuItem; + private ToolStripMenuItem highToolStripMenuItem; + private ToolStripMenuItem toolStripMenuItem5; + private ToolStripMenuItem toolStripMenuItem6; + private ToolStripMenuItem toolStripMenuItem7; + private ToolStripMenuItem toolStripMenuItem8; + private ToolStripSeparator toolStripSeparator3; + private ToolStripMenuItem resetToolStripMenuItem; + private ToolStripSeparator toolStripSeparator4; + private ToolStripMenuItem toolStripMenuItem9; + private ToolStripMenuItem showToolStripMenuItem; + private ToolStripMenuItem sizeToolStripMenuItem; + private ToolStripMenuItem colourToolStripMenuItem; + private ToolStripSeparator toolStripSeparator5; + private ToolStripMenuItem smallToolStripMenuItem; + private ToolStripMenuItem mediumToolStripMenuItem; + private ToolStripMenuItem largeToolStripMenuItem; + private ToolStripMenuItem agentaToolStripMenuItem; + private ToolStripMenuItem cyanToolStripMenuItem; + private ToolStripMenuItem yellowToolStripMenuItem; + private ToolStripMenuItem greenToolStripMenuItem; + private ToolStripMenuItem redToolStripMenuItem; + private ToolStripMenuItem blackToolStripMenuItem; + private ToolStripMenuItem whiteToolStripMenuItem; + } +} diff --git a/source/Form1.cs b/source/Form1.cs new file mode 100644 index 0000000..08d7e89 --- /dev/null +++ b/source/Form1.cs @@ -0,0 +1,686 @@ +using System.ComponentModel; +using System.Drawing.Drawing2D; +using System.Runtime.InteropServices; +using SuzuMagnifier.Dtos; +using static System.Windows.Forms.Design.AxImporter; + +namespace SuzuMagnifier +{ + public partial class Form1 : Form + { + [StructLayout(LayoutKind.Sequential)] + public struct POINT + { + public int X; + public int Y; + } + + [DllImport("user32.dll")] + private static extern bool GetCursorPos(out POINT lpPoint); + + public static Point GetMousePosition() + { + GetCursorPos(out var p); + return new Point(p.X, p.Y); + } + + + private readonly System.Windows.Forms.Timer _timer = new(); + private Bitmap? _bitmap; + private string jsonfigFilename; + + + public Form1() + { + InitializeComponent(); + + this.BackColor = Color.Black; + this.DoubleBuffered = true; + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true); + this.Text = Application.ProductName; + + _timer.Interval = this.UpdateFrequency; + _timer.Tick += (sender, e) => + { + UpdateMagnifier(); + }; + } + + protected async override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + var args = GetCommandLine()!; + + jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(jsonfigFilename)) + { + jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig"); + } + + if (System.IO.File.Exists(jsonfigFilename)) + { + var newSettings = await LoadSettings(jsonfigFilename); + if (newSettings == null) + { + newSettings = new SavedOptions(); + } + + this.HighQuality = newSettings.HighQuality; + this.ZoomFactor = newSettings.ZoomFactor; + //this.UpdateFrequency = newSettings.UpdateFrequency; + this.ShowCrosshair = newSettings.ShowCrosshair; + this.CrosshairSize = newSettings.CrosshairSize; + this.CrosshairColour = newSettings.CrosshairColour; + } + } + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + + //_timer.Start(); + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + var g = e.Graphics; + + if (!_timer.Enabled) + { + TextRenderer.DrawText(g, "Press [Space] To Start", this.Font, this.ClientRectangle, this.ForeColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.NoPadding); + } + + if (_bitmap == null) + { + return; + } + + if (this.HighQuality) + { + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.PixelOffsetMode = PixelOffsetMode.HighQuality; + g.SmoothingMode = SmoothingMode.HighQuality; + } + else + { + g.InterpolationMode = InterpolationMode.NearestNeighbor; + g.PixelOffsetMode = PixelOffsetMode.None; + g.SmoothingMode = SmoothingMode.None; + } + + g.DrawImage(_bitmap, this.ClientRectangle); + + // Draw center crosshair + if (this.ShowCrosshair) + { + var cx = Divide(this.Width, 2); + var cy = Divide(this.Height, 2); + + g.DrawLine(new Pen(this.CrosshairColour), cx - this.CrosshairSize, cy, cx + this.CrosshairSize, cy); + g.DrawLine(new Pen(this.CrosshairColour), cx, cy - this.CrosshairSize, cx, cy + this.CrosshairSize); + } + } + + protected override void OnPreviewKeyDown(PreviewKeyDownEventArgs e) + { + base.OnPreviewKeyDown(e); + + if (e.Control) + { + switch (e.KeyCode) + { + //case Keys.D0: + // this.ZoomFactor = 1; + // break; + //case Keys.OemMinus: + // this.ZoomFactor--; + // break; + //case Keys.Oemplus: + // this.ZoomFactor++; + // break; + //case Keys.F11: + // toolStripMenuItem5_Click(null, null); + // break; + default: + break; + } + } + else + { + switch (e.KeyCode) + { + case Keys.Space: + if (_timer.Enabled) + { + _timer.Stop(); + } + else + { + _timer.Start(); + } + + break; + case Keys.Escape: + exitiToolStripMenuItem_Click(null, null); + break; + //case Keys.F11: + // toolStripMenuItem3_Click(null, null); + // break; + default: + break; + } + } + } + + protected async override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + + var result = MessageBox.Show("Do you want to save settings to file?", "Save Settings?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); + if (result == DialogResult.Yes) + { + var result2 = await SaveSettings(jsonfigFilename); + if (result2) + { + return; + } + + MessageBox.Show("Could not save settings. An error has occurred.", "Save Settings?", MessageBoxButtons.OK, MessageBoxIcon.Error); + + e.Cancel = true; + } + else if (result == DialogResult.No) + { + // Do nothing + } + else + { + e.Cancel = true; + } + } + + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool HighQuality { get; set; } = false; + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int ZoomFactor + { + get => field; + set + { + if (value < 0) + { + field = 1; + return; + } + + if (value > 20) + { + field = 20; + return; + } + + field = value; + } + } = 2; + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int UpdateFrequency { get; set; } = 33; + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool ShowCrosshair { get; set; } = true; + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int CrosshairSize + { + get => field; + set + { + if (value < 5) + { + field = 5; + return; + } + + if (value > 200) + { + field = 200; + return; + } + + field = value; + } + } = 20; + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Color CrosshairColour { get; set; } = Color.FromArgb(255, 255, 0); + + + private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) + { + toolStripMenuItem1.Enabled = !_timer.Enabled; + toolStripMenuItem2.Enabled = _timer.Enabled; + + toolStripMenuItem5.Checked = this.TopMost; + + showToolStripMenuItem.Checked = this.ShowCrosshair; + smallToolStripMenuItem.Checked = (this.CrosshairSize == 10); + mediumToolStripMenuItem.Checked = (this.CrosshairSize == 20); + largeToolStripMenuItem.Checked = (this.CrosshairSize == 50); + + agentaToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 0, 255); + cyanToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 255, 255); + yellowToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 255, 0); + greenToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 255, 0); + redToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 0, 0); + blackToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 0, 0); + whiteToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 255, 255); + + fasterToolStripMenuItem.Checked = !this.HighQuality; + fasterToolStripMenuItem.Enabled = this.HighQuality; + highToolStripMenuItem.Checked = this.HighQuality; + highToolStripMenuItem.Enabled = !this.HighQuality; + } + + + #region context menu + + /// + /// Start + /// + /// + /// + private void toolStripMenuItem1_Click(object sender, EventArgs e) + { + if (_timer.Enabled) + { + return; + } + + _timer.Start(); + } + + /// + /// Stop + /// + /// + /// + private void toolStripMenuItem2_Click(object sender, EventArgs e) + { + if (!_timer.Enabled) + { + return; + } + + _timer.Stop(); + } + + /// + /// Quality, fast + /// + /// + /// + private void fastToolStripMenuItem_Click(object sender, EventArgs e) + { + this.HighQuality = false; + } + + /// + /// QUality, high + /// + /// + /// + private void highToolStripMenuItem_Click(object sender, EventArgs e) + { + this.HighQuality = true; + } + + /// + /// Zoom, increase + /// + /// + /// + private void toolStripMenuItem7_Click(object sender, EventArgs e) + { + this.ZoomFactor++; + } + + /// + /// Zoom, decrease + /// + /// + /// + private void toolStripMenuItem8_Click(object sender, EventArgs e) + { + this.ZoomFactor--; + } + + /// + /// Zoom, reset + /// + /// + /// + private void resetToolStripMenuItem_Click(object sender, EventArgs e) + { + this.ZoomFactor = 1; + } + + /// + /// Crosshair, colour, magenta + /// + /// + /// + private void agentaToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(255, 0, 255); + } + + /// + /// Crosshair, colour, cyan + /// + /// + /// + private void cyanToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(0, 255, 255); + } + + /// + /// Crosshair, colour, yellow + /// + /// + /// + private void yellowToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(255, 255, 0); + } + + /// + /// Crosshair, colour, green + /// + /// + /// + private void greenToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(0, 255, 0); + } + + /// + /// Crosshair, colour, red + /// + /// + /// + private void redToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(255, 0, 0); + } + + /// + /// Crosshair, colour, black + /// + /// + /// + private void blackToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(0, 0, 0); + } + + /// + /// Crosshair, colour, white + /// + /// + /// + private void whiteToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairColour = Color.FromArgb(255, 255, 255); + } + + /// + /// ALways on top + /// + /// + /// + private void toolStripMenuItem5_Click(object sender, EventArgs e) + { + this.TopMost = !this.TopMost; + } + + /// + /// Fullscreen + /// + /// + /// + private void toolStripMenuItem3_Click(object sender, EventArgs e) + { + if (this.WindowState == FormWindowState.Normal) + { + this.FormBorderStyle = FormBorderStyle.None; + this.WindowState = FormWindowState.Maximized; + } + else + { + this.FormBorderStyle = FormBorderStyle.Sizable; + this.WindowState = FormWindowState.Normal; + } + } + + /// + /// Exit + /// + /// + /// + private void exitiToolStripMenuItem_Click(object sender, EventArgs e) + { + if (_timer.Enabled) + { + _timer.Stop(); + _timer.Dispose(); + } + + this.Close(); + } + + /// + /// Crosshair, toggle + /// + /// + /// + private void showToolStripMenuItem_Click(object sender, EventArgs e) + { + this.ShowCrosshair = !this.ShowCrosshair; + } + + /// + /// Croisshair, size, small + /// + /// + /// + private void smallToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairSize = 10; + } + + /// + /// Croisshair, size, medium + /// + /// + /// + private void mediumToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairSize = 20; + } + + /// + /// Croisshair, size, large + /// + /// + /// + private void largeToolStripMenuItem_Click(object sender, EventArgs e) + { + this.CrosshairSize = 50; + } + + #endregion + + + private void UpdateMagnifier() + { + //var mouse = Cursor.Position; + var mouse = GetMousePosition(); + + var w = Divide(this.Width, this.ZoomFactor); + var h = Divide(this.Height, this.ZoomFactor); + + var cx = Divide(w, 2); + var cy = Divide(h, 2); + var x = mouse.X - cx; + var y = mouse.Y - cy; + + var sourceRect = new Rectangle(x, y, w, h); + + _bitmap?.Dispose(); + _bitmap = null; + _bitmap = new Bitmap(sourceRect.Width, sourceRect.Height); + + using Graphics g = Graphics.FromImage(_bitmap); + g.CopyFromScreen(sourceRect.Location, Point.Empty, sourceRect.Size); + + this.Invalidate(); + } + + private int Divide(int x, int y) + { + return (int)Math.Floor((decimal)x / y); + } + + /// + /// Get execution arguments. + /// + /// + private List> GetCommandLine() + { + var result = new List>(); + var args = Environment.GetCommandLineArgs() ?? new string[0]; + if (args.Length <= 1) + { + return result; + } + + var key = string.Empty; + var flag = false; + for (int i = 1; i < args.Length; i++) + { + var text = args[i]; + if (string.IsNullOrWhiteSpace(text)) + { + continue; + } + + if (text.StartsWith("-")) + { + if (flag) + { + result.Add(new KeyValuePair(key, string.Empty)); + } + + key = text?.TrimStart('-')?.Trim() ?? string.Empty; + flag = true; + } + else + { + result.Add(new KeyValuePair(key, text?.Trim() ?? string.Empty)); + flag = false; + } + } + + return result; + } + + private async Task LoadSettings(string filename) + { + if (!System.IO.File.Exists(filename)) + { + return null; + } + + string sourceCode; + try + { + sourceCode = await System.IO.File.ReadAllTextAsync(filename); + } + catch (Exception) + { + return null; + } + + if (string.IsNullOrWhiteSpace(sourceCode)) + { + return null; + } + + try + { + return System.Text.Json.JsonSerializer.Deserialize(sourceCode); + } + catch (Exception) + { + return null; + } + } + + private async Task SaveSettings(string filename) + { + var result = new SavedOptions(); + result.AutoStart = false; + result.HighQuality = this.HighQuality; + result.ZoomFactor = this.ZoomFactor; + result.UpdateFrequency = this.UpdateFrequency; + result.ShowCrosshair = this.ShowCrosshair; + result.CrosshairSize = this.CrosshairSize; + result.CrosshairColour = this.CrosshairColour; + + string sourceCode = ""; + try + { + sourceCode = System.Text.Json.JsonSerializer.Serialize(result); + } + catch (Exception) + { + return false; + } + + if (string.IsNullOrWhiteSpace(sourceCode)) + { + return false; + } + + if (System.IO.File.Exists(filename)) + { + try + { + System.IO.File.Delete(filename); + } + catch (Exception) + { + return false; + } + } + + try + { + await System.IO.File.WriteAllTextAsync(filename, sourceCode); + } + catch (Exception) + { + return false; + } + + return true; + } + + } +} \ No newline at end of file diff --git a/source/Form1.resx b/source/Form1.resx new file mode 100644 index 0000000..6b39d87 --- /dev/null +++ b/source/Form1.resx @@ -0,0 +1,721 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 131, 17 + + + + + AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA + IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /xz///+S////3v////v///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////7////3v///5L///8bAAAAAAAA + AAAAAAAA////Qf////D///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////v////PwAAAAD///8c////8P////////////////////////////////////////////////// + /////////////4R+e/9sZWL/w8C+//7+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////9/d + 3P/EwL//////////////////////7////xv///+U//////////////////////////////////////// + /////////////////////////////8nGxP9LQz7/GxQR/0Q9Of+Ffnv/9PPz//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8+/v/hn98/yslIv83MCz/4+Hg/////////////////////5L////f//////////////////////// + ///////////////////////////////////////////////////+/v7/nZiV/zYvLP8EAgH/NzAt/4N8 + ef/29fX///////////////////////////////////////////////////////////////////////// + /////////////9nX1v9JQTz/BwUE/wAAAP8BAAD/Pzcz/9nX1v///////////////93////7//////// + /////////////////////////////////////////////////////////////////////////////+/t + 7f9gWFT/EQ4N/wQDAv89NjL/sKyp//////////////////////////////////////////////////// + ////////////////////////pJ+d/y4oJP8AAAD/AAAA/wAAAP8AAAD/AAAA/ywmI/+DfHn/9/f2//// + //v///////////////////////////////////////////////////////////////////////////// + ////////////////////////lY+M/ygiH/8AAAD/FhIQ/2RdWf/39/b///////////////////////// + //////////////////////////////////9+eHT/FxMR/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYS + D/9COTX/ubSy//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////7y4tv8wKib/AAAA/wIBAf9KQj3/5+bl//// + /////////////////////////////////////////v7+/3Rtav8QDQv/AAAA/wAAAP8AAAD/AAAA/wIB + Af8zLCj/aWJe/8vIxv////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////Avbv/JB8c/wAA + AP8BAAD/Pzgz/+vq6f//////////////////////////////////////gHp2/w0KCf8AAAD/AAAA/wAA + AP8CAQH/Misn/3lybv/w7+////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////kIuI/xEODP8AAAD/AQEA/0lBPP/29fX///////////////////////////+noqD/GxcU/wAA + AP8AAAD/AAAA/x4ZF/9vaGT/7+7u//////////////////////////////////////////////////// + //////////7+/+Cymv/DaDr/tkUN/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/0ccBv8BAAD/AAAA/wMBAf9mUkj//////////////////////+jn + 5v8xKib/AAAA/wAAAP8CAQH/QTk1/767uf////////////////////////////////////////////// + ///////////////////36uT/xm5D/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/6E3Av8iDwX/AAAA/wAAAP8YCwb/xMC///// + /////////////19XU/8BAQD/AAAA/wYEA/9YUEv/9vX1//////////////////////////////////// + //////////////////////////////36+P/AYTH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af9ZIgb/AgEB/wAA + AP8AAAD/UzgG//yxAf/8sQH/0pID/x8UBP8AAAD/CgYC/2NDBv/4rgH//LEB//yxAf/8sQH//LUP//3L + V///9uP//////////////////////////////////////96rkf+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+mOQL/IQ4F/wAAAP8AAAD/GREE/8qNA//8sQH/YUIH/wAAAP8CAQH/Wz4G//uwAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8txT///bj/////////////////////////////////8NmOP+yPAH/sjwB/7I8 + Af/IXwH/9KYB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/WDwH/wAAAP8AAAD/AAAA/2xJB//zqgL/MiEF/wAAAP9BLAb/8KgC//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//ctX/////////////////////////////////7ZG + Dv+yPAH/sjwB/7I8Af/1pgH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/kGQG/wMCAf8AAAD/AAAA/z8qBv+icAX/BwQC/yUY + BP/OkAP//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LYQ//////////////////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/2ZgD/xkQBP8AAAD/AAAA/x0S + BP9SNwf/AwEB/29MB//8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//// + /////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/+a4B/zEh + Bf8AAAD/AAAA/wQCAf8vHwj/OCUG//KqAv/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/0cwBv8AAAD/AAAA/wAAAP8FAwL/cU0H//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//atAf+EWgb/fFUH/3xVB/98VQf/fFUH/3xV + B/98VQf/fFUH/3xVB/98VQf/fFUH/0AqCP8AAAD/AAAA/wAAAP8XDgT/ZkUH/3xVB/98VQf/fFUH/3xV + B/98VQf/fFUH/3xVB/98VQf/fFUH/3xVB/98VQf/fFUH/5mTkP/+/v7//////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/6h0Bf9BKwf/Ri8G/0Yv + Bv9GLwb/Ri8G/0YvBv9GLwb/Ri8G/0YvBv9GLwb/Ri8G/zMhBv8AAAD/AAAA/wAAAP8iFwT/Ri8G/0Yv + Bv9GLwb/Ri8G/0YvBv9GLwb/Ri8G/0YvBv8fFQT/AAAA/wAAAP8AAAD/AAAA/zAoJP/v7u7///////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/2lIB/8AAAD/AAAA/wAA + AP85Jgb//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+OYgb/FAwD/wAAAP8BAQD/OSYG/8TA + v////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/21L + B/8AAAD/AAAA/wAAAP8zIgb//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/bUsH/w0J + A/9RNgb/6aQC/////////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/3JOB/8AAAD/AAAA/wAAAP8uHgX/+K4B//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH/+a4B/55tBf/6sAH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB/3ZQB/8AAAD/AAAA/wAAAP8nGgX/7aYC//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/////////////////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/3NOB/8AAAD/AAAA/wAAAP8gFQT/5KAC//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//////////////////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/29MB/8AAAD/AAAA/wAA + AP8NCQL/bEoH//mvAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//// + /////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/2pI + B/8AAAD/AAAA/wAAAP8AAAD/CwcD/655Bf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/3xVBv9MMwb/VzsH/2REB/9vTAf/jWEG//SsAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/mjgH/ukgB/7pQG//oxbP//////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf+6SQH/sjwB/7I8Af+6URz//////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH///////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8 + Af+yPAH//////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af+yPAH/sjwB/7I8Af+yPAH//////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH//////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH//////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH///////// + /////////////7ZFDf+yPAH/sjwB/7I8Af/1pgH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//SmAf+yPAH/sjwB/7I8 + Af+2Rg7//////////////////////8JlN/+yPAH/sjwB/7I8Af/IXgH/9aYB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/9aYB/8hf + Af+yPAH/sjwB/7I8Af/DZzn//////////////////////+Cvl/+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af/gsZn///////////////////////79/f/FbUH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/8ZuQv///v7///////////////////////// + ///36+X/xm5C/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/wGAw//fq5P////////////// + //////////////////////////7+/+CwmP/CZTf/tUQM/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/tUQM/8NmOP/eq5H//fr4//// + ///////////////////////7//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////v////f//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////97///+V//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////5P///8e////8f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////8P// + /xwAAAAA////Qf////H///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////w////QQAAAAAAAAAAAAAAAP///x7///+V////4P////v///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////7////3////5T///8dAAAAAAAAAADAAAAAAAPxBIAAAAAAAfEEAAAAAAAA8QQAAAAAAADxBAAA + AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA + 8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAA + AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA + 8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAA + AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA + 8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBIAAAAAAAfEEwAAAAAAD8QQoAAAAIAAAAEAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zX////D////9v////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////b////C////NAAAAAD///81/////P////z///////////// + ///////////////////DwL//q6el//z7+/////////////////////////////////////////////// + ///////////////////////////////////w7+//4uDf//////z////8////NP///8P////8//////// + /////////////////////////////+bl5P9dVlP/NjAs/3Vwbf/k4+L///////////////////////// + ////////////////////////////////////////paGf/zMuLP9BPDn/8fDw//////z////C////9v// + //////////////////////////////////////////////////+1srD/PTg2/yIeHP99eHX/+fn4//// + ////////////////////////////////////////+Pj3/2xmY/8KCAf/AAAA/wAAAP8+Ojf/uLSz//// + //b////////////////////////////////////////////////////////////////x8PD/WFNQ/wMC + Av9CPTr/1dPS/////////////////////////////////+3s7P9MRkP/AQAA/wAAAP8AAAD/BgUE/z45 + N/+Be3j//v7+//////////////////////////////////////////////////////////////////// + ///8/Pz/Z2Jf/wEAAP8rJyX/x8XD///////////////////////08/P/R0E+/wAAAP8AAAD/CQcG/1FM + Sf+zr63//v7+/////////////////////////////v39//Lf1f/mwK3/5b6q/+W+qv/lvqr/5b6q/+W+ + qv/lvqr/5b6q/+W+qv/guqX/RTYu/wAAAP8sIx7/4d3b/////////////////2BbWP8AAAD/AAAA/zgz + Mf+vq6n///////////////////////////////////////Le1P/BYTL/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+TMgP/EwgC/wAAAP9ONyv///////////+inpz/CAcG/wMC + Av9fWlf/8vHx///////////////////////////////////////79PH/u1Mf/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af9PHgX/AAAA/wsGAv+7ggT/+rAB/0As + BP8DAgH/bEsG//qwAf/8sQH//LIE//3AMf/+7ML//////////////////////96skv+yPAH/sjwB/8lh + Af/iiQH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/44oB/6pnBP8IBAH/AAAA/2NE + Bf+1fwT/BQMB/1c8Bf/6sAH//LEB//yxAf/8sQH//LEB//y2Ev//+e3/////////////////z4Zi/7I8 + Af+yPAH/+KsB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/+7AB/zgm + BP8AAAD/LR4E/3NQBf8sHgP/6KMC//yxAf/8sQH//LEB//yxAf/8sQH//LEB//7ptv////////////// + ///Mflf/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH/XD8E/wAAAP8GAwH/NSMG/5JlBf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//uWq//// + /////////////8x+V/+yPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf96VAX/AAAA/wAAAP8uHwT/9awB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/+5ar/////////////////zH5X/7I8Af+yPAH//LEB//yxAf/8sQH//LEB//yxAf/SkwP/QywI/0Qt + B/9ELQf/RC0H/0QtB/9ELQf/RC0H/zkmB/8AAAD/AAAA/zEgBf9ELQf/RC0H/0QtB/9ELQf/RC0H/zQi + Bf8uHwP/Lh8D/0Q4KP/8+/v////////////Mflf/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/k2UF/wAAAP8AAAD/Z0cF//yxAf/8sQH//LEB//yx + Af/8sQH/g1sF/wcFAf8tHwP/s591/////////////////8x+V/+yPAH/sjwB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+ZagX/AAAA/wAAAP9gQQT//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/gVgF/96bAv/+5ar/////////////////zH5X/7I8Af+yPAH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/51sBf8AAAD/AAAA/1c7 + BP/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//7lqv/////////////////Mflf/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/mGkF/wAA + AP8AAAD/OygE/+KeAv/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//uWq/////////////////8x+ + V/+yPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af+SZQX/BAMC/xUNA/8nGgT/jWEF//yxAf/8sQH//LEB//yxAf/8sQH//LEB//WnAf/otHn//vz7//// + ////////zH5X/7I8Af+yPAH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/+WgAv/QkgP/6KMC//uwAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/vk4B/7I8 + Af/YnH7////////////Mflf/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af+yPAH/sjwB/8x+V////////////8x+V/+yPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/7I8Af+yPAH/zH5X////////////zH5X/7I8Af+yPAH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/sjwB/7I8Af/Mflf////////////Mflf/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/8x+V////////////9SRcP+yPAH/sjwB//Cf + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/8J4B/7I8Af+yPAH/1JJx////////////58Gu/7I8 + Af+yPAH/uUcB/8piAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8tj + Af/LYwH/y2MB/8tjAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8piAf+5RgH/sjwB/7I8Af/nwq////////// + /////v7/yXVM/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/yXZN//// + ///////////////////9+/r/2Z+B/79cK/+zPgT/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+zPgT/v1wr/9qg + g//9+/r////////////////2//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////9v///8T////8//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////z////D////N/////z////8//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////8/////P///zUAAAAA////N////8X////3//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////9v///8T///82AAAAAIAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABKAAAABgA + AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///w////+r////9P////f////3////9/// + //f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/// + //T///+q////Dv///6z////5//////////////////////////96dHH/fnp3/9vZ2P////////////// + ////////////////////////////////////////oZ2c/6WioP/////5////qv////X///////////// + ///////////////////+/v7/nJmX/zUxLv94dHL/8fDw/////////////////////////////////+no + 6P9jXlz/BQQE/xcWFf+Sjoz//f399f////r//////////////////////////////////////////93b + 2v9DPz3/Lysq/7+8u///////////////////////2NbV/zUxMP8AAAD/AQAA/zMwLv99eXf/7ezs+v// + //r////////////////////////////////////////////////u7e3/Ojc1/xoYF/+/vLv///////// + ///o5+b/NTEw/wAAAP8vLCv/mZaU//v6+v//////////+v////r9+vn/1pZ3/7pQG/+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/jDED/wsFAf8sGA//+fn4//////9nY2H/AQAA/2JeW//t7Oz///////// + ////////////+v////rWl3j/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/0ga + A/8AAAD/iV8E/8iMA/8PCQH/bk0F//uwAf/8sQH//Loe//7ptv//////////+v////q6Txr/sjwB/+uW + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/6p1BP8BAAD/Qy4D/3ZSBP9ONQP/+a4B//yx + Af/8sQH//LEB//y6Hv//////////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//KqAv8XDwL/DwoC/z8rBf/RkwP//LEB//yxAf/8sQH//LEB//yxAf//////////+v// + //qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/ZlwL/tX4D/7V+A/+1fgP/tX4D/7V+A/8uHwP/AAAA/0gw + BP+1fgP/tX4D/7V+A/+1fgP/tX4D/7V+A//o5ub/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yx + Af+yfAP/m2wD/5tsA/+bbAP/m2wD/5tsA/80IwP/AAAA/2FCA/+bbAP/m2wD/5tsA/94UwT/BQMB/xgQ + Av+urKr/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af9FMAP/AAAA/4BZBP/8sQH//LEB//yxAf/8sQH/gVoE/8OJA///////////+v////qyPAH/sjwB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf9FMAP/AAAA/3dTBP/8sQH//LEB//yx + Af/8sQH//LEB//yxAf//////////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf9FMAP/AAAA/y4gA//upwL//LEB//yxAf/8sQH//LEB//yxAf//////////+v// + //qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+mcwT/onAE/7mB + A//8sQH//LEB//yxAf/8sQH//LEB/8NYAf/Eaj3/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/7I8 + Af+yPAH/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/7I8Af+yPAH/////+v////qyPAH/sjwB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/7I8Af+yPAH/////+v////q6Txr/sjwB/+uXAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/65YB/7I8Af+6UBv/////+v// + //rVlXb/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af/Wl3j/////+v////r9+vj/1ZV2/7pPGv+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/uk8a/9aW + d//9+vn/////+v////X///////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////9f///63////5//////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////5////q////xD///+t////9f////f////3////9/////f////3////9/// + //f////3////9/////f////3////9/////f////3////9/////f////3////9/////T///+s////DwAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///9p////3f///+P////j7u3t5ebk5Ob////j////4////+P////j////4/// + /+P////j/Pz84/f29t7///9o////3f////////////////n4+P+GgoD/bGhm/97d3P////////////// + ////////1dTT/0dEQ/9aWFb/5+bm3////+H//////////////////////////8jGxf82MzL/s7Gw//// + ////////ysjH/xwaGf8ZFxb/cG1s/9TT0ub////h7M/A/8+FYf/MfVb/zH1W/8x9Vv/MfVb/mF1A/xIM + CP/FuLH/6unp/yYkI/9jYF7/6ejo///////////h9eTc5bRABv/DWQT/y2MB/8tjAf/LYwH/y2MB/8tj + Af9GIwL/VDgC/31XA/9sSwL/+7AB//y1Dv/+57D/////4eS7peuyPAH/+7AB//yxAf/8sQH//LEB//yx + Af/8sQH/lmkD/xUOAf9XPAT/8aoB//yxAf/8sQH//cxZ/////+Hjt6LrsjwB//yxAf/8sQH/8qsB/5Fj + BP+RZAT/kWQE/3FOBf8AAAD/XUAE/5FkBP+RZAT/h10D/4xwL//+/v7h47ei67I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf++hgP/AAAA/6VzA//8sQH//LEB/4VcA/+ohjr/////4eO3ouuyPAH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/voYD/wAAAP+RZgP//LEB//yxAf/8sQH//ctW/////+Hjt6LrsjwB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB/9eXAv9xTwP/onED//yxAf/8sQH//LEB/9R9KP/05Nvl47ei67I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/47ei6+O3 + ouuyPAH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/sjwB/+O3 + ouvrz7/osjwB/9t+Af/jigH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/230B/7I8 + Af/s0MHo////4dSScP+1Qwn/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7VD + Cf/Uk3L/////4f///93///////////////////////////////////////////////////////////// + /////////////////93///9q////3f///+P////j////4////+P////j////4////+P////j////4/// + /+P////j////4////93///9pAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxBAACsQQAArEEAAKxBAACsQQ== + + + + + AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA + IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /xz///+S////3v////v///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////7////3v///5L///8bAAAAAAAA + AAAAAAAA////Qf////D///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////v////PwAAAAD///8c////8P////////////////////////////////////////////////// + /////////////4R+e/9sZWL/w8C+//7+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////9/d + 3P/EwL//////////////////////7////xv///+U//////////////////////////////////////// + /////////////////////////////8nGxP9LQz7/GxQR/0Q9Of+Ffnv/9PPz//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8+/v/hn98/yslIv83MCz/4+Hg/////////////////////5L////f//////////////////////// + ///////////////////////////////////////////////////+/v7/nZiV/zYvLP8EAgH/NzAt/4N8 + ef/29fX///////////////////////////////////////////////////////////////////////// + /////////////9nX1v9JQTz/BwUE/wAAAP8BAAD/Pzcz/9nX1v///////////////93////7//////// + /////////////////////////////////////////////////////////////////////////////+/t + 7f9gWFT/EQ4N/wQDAv89NjL/sKyp//////////////////////////////////////////////////// + ////////////////////////pJ+d/y4oJP8AAAD/AAAA/wAAAP8AAAD/AAAA/ywmI/+DfHn/9/f2//// + //v///////////////////////////////////////////////////////////////////////////// + ////////////////////////lY+M/ygiH/8AAAD/FhIQ/2RdWf/39/b///////////////////////// + //////////////////////////////////9+eHT/FxMR/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYS + D/9COTX/ubSy//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////7y4tv8wKib/AAAA/wIBAf9KQj3/5+bl//// + /////////////////////////////////////////v7+/3Rtav8QDQv/AAAA/wAAAP8AAAD/AAAA/wIB + Af8zLCj/aWJe/8vIxv////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////Avbv/JB8c/wAA + AP8BAAD/Pzgz/+vq6f//////////////////////////////////////gHp2/w0KCf8AAAD/AAAA/wAA + AP8CAQH/Misn/3lybv/w7+////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////kIuI/xEODP8AAAD/AQEA/0lBPP/29fX///////////////////////////+noqD/GxcU/wAA + AP8AAAD/AAAA/x4ZF/9vaGT/7+7u//////////////////////////////////////////////////// + //////////7+/+Cymv/DaDr/tkUN/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/0ccBv8BAAD/AAAA/wMBAf9mUkj//////////////////////+jn + 5v8xKib/AAAA/wAAAP8CAQH/QTk1/767uf////////////////////////////////////////////// + ///////////////////36uT/xm5D/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/6E3Av8iDwX/AAAA/wAAAP8YCwb/xMC///// + /////////////19XU/8BAQD/AAAA/wYEA/9YUEv/9vX1//////////////////////////////////// + //////////////////////////////36+P/AYTH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af9ZIgb/AgEB/wAA + AP8AAAD/UzgG//yxAf/8sQH/0pID/x8UBP8AAAD/CgYC/2NDBv/4rgH//LEB//yxAf/8sQH//LUP//3L + V///9uP//////////////////////////////////////96rkf+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+mOQL/IQ4F/wAAAP8AAAD/GREE/8qNA//8sQH/YUIH/wAAAP8CAQH/Wz4G//uwAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8txT///bj/////////////////////////////////8NmOP+yPAH/sjwB/7I8 + Af/IXwH/9KYB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/WDwH/wAAAP8AAAD/AAAA/2xJB//zqgL/MiEF/wAAAP9BLAb/8KgC//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//ctX/////////////////////////////////7ZG + Dv+yPAH/sjwB/7I8Af/1pgH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/kGQG/wMCAf8AAAD/AAAA/z8qBv+icAX/BwQC/yUY + BP/OkAP//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LYQ//////////////////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/2ZgD/xkQBP8AAAD/AAAA/x0S + BP9SNwf/AwEB/29MB//8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//// + /////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/+a4B/zEh + Bf8AAAD/AAAA/wQCAf8vHwj/OCUG//KqAv/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/0cwBv8AAAD/AAAA/wAAAP8FAwL/cU0H//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//atAf+EWgb/fFUH/3xVB/98VQf/fFUH/3xV + B/98VQf/fFUH/3xVB/98VQf/fFUH/0AqCP8AAAD/AAAA/wAAAP8XDgT/ZkUH/3xVB/98VQf/fFUH/3xV + B/98VQf/fFUH/3xVB/98VQf/fFUH/3xVB/98VQf/fFUH/5mTkP/+/v7//////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/6h0Bf9BKwf/Ri8G/0Yv + Bv9GLwb/Ri8G/0YvBv9GLwb/Ri8G/0YvBv9GLwb/Ri8G/zMhBv8AAAD/AAAA/wAAAP8iFwT/Ri8G/0Yv + Bv9GLwb/Ri8G/0YvBv9GLwb/Ri8G/0YvBv8fFQT/AAAA/wAAAP8AAAD/AAAA/zAoJP/v7u7///////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/2lIB/8AAAD/AAAA/wAA + AP85Jgb//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+OYgb/FAwD/wAAAP8BAQD/OSYG/8TA + v////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/21L + B/8AAAD/AAAA/wAAAP8zIgb//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/bUsH/w0J + A/9RNgb/6aQC/////////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/3JOB/8AAAD/AAAA/wAAAP8uHgX/+K4B//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH/+a4B/55tBf/6sAH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB/3ZQB/8AAAD/AAAA/wAAAP8nGgX/7aYC//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/////////////////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/3NOB/8AAAD/AAAA/wAAAP8gFQT/5KAC//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//////////////////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/29MB/8AAAD/AAAA/wAA + AP8NCQL/bEoH//mvAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//// + /////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/2pI + B/8AAAD/AAAA/wAAAP8AAAD/CwcD/655Bf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/////////////////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/3xVBv9MMwb/VzsH/2REB/9vTAf/jWEG//SsAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/mjgH/ukgB/7pQG//oxbP//////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf+6SQH/sjwB/7I8Af+6URz//////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH///////// + /////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8 + Af+yPAH//////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af+yPAH/sjwB/7I8Af+yPAH//////////////////////7I8Af+yPAH/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH//////////////////////7I8Af+yPAH/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH//////////////////////7I8 + Af+yPAH/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/7I8Af+yPAH///////// + /////////////7ZFDf+yPAH/sjwB/7I8Af/1pgH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//SmAf+yPAH/sjwB/7I8 + Af+2Rg7//////////////////////8JlN/+yPAH/sjwB/7I8Af/IXgH/9aYB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/9aYB/8hf + Af+yPAH/sjwB/7I8Af/DZzn//////////////////////+Cvl/+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af/gsZn///////////////////////79/f/FbUH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/8ZuQv///v7///////////////////////// + ///36+X/xm5C/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/wGAw//fq5P////////////// + //////////////////////////7+/+CwmP/CZTf/tUQM/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/tUQM/8NmOP/eq5H//fr4//// + ///////////////////////7//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////v////f//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////97///+V//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////5P///8e////8f// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////8P// + /xwAAAAA////Qf////H///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////w////QQAAAAAAAAAAAAAAAP///x7///+V////4P////v///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////7////3////5T///8dAAAAAAAAAADAAAAAAAPxBIAAAAAAAfEEAAAAAAAA8QQAAAAAAADxBAAA + AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA + 8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAA + AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA + 8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAA + AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA + 8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBIAAAAAAAfEEwAAAAAAD8QQoAAAAIAAAAEAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zX////D////9v////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////b////C////NAAAAAD///81/////P////z///////////// + ///////////////////DwL//q6el//z7+/////////////////////////////////////////////// + ///////////////////////////////////w7+//4uDf//////z////8////NP///8P////8//////// + /////////////////////////////+bl5P9dVlP/NjAs/3Vwbf/k4+L///////////////////////// + ////////////////////////////////////////paGf/zMuLP9BPDn/8fDw//////z////C////9v// + //////////////////////////////////////////////////+1srD/PTg2/yIeHP99eHX/+fn4//// + ////////////////////////////////////////+Pj3/2xmY/8KCAf/AAAA/wAAAP8+Ojf/uLSz//// + //b////////////////////////////////////////////////////////////////x8PD/WFNQ/wMC + Av9CPTr/1dPS/////////////////////////////////+3s7P9MRkP/AQAA/wAAAP8AAAD/BgUE/z45 + N/+Be3j//v7+//////////////////////////////////////////////////////////////////// + ///8/Pz/Z2Jf/wEAAP8rJyX/x8XD///////////////////////08/P/R0E+/wAAAP8AAAD/CQcG/1FM + Sf+zr63//v7+/////////////////////////////v39//Lf1f/mwK3/5b6q/+W+qv/lvqr/5b6q/+W+ + qv/lvqr/5b6q/+W+qv/guqX/RTYu/wAAAP8sIx7/4d3b/////////////////2BbWP8AAAD/AAAA/zgz + Mf+vq6n///////////////////////////////////////Le1P/BYTL/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+TMgP/EwgC/wAAAP9ONyv///////////+inpz/CAcG/wMC + Av9fWlf/8vHx///////////////////////////////////////79PH/u1Mf/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af9PHgX/AAAA/wsGAv+7ggT/+rAB/0As + BP8DAgH/bEsG//qwAf/8sQH//LIE//3AMf/+7ML//////////////////////96skv+yPAH/sjwB/8lh + Af/iiQH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/44oB/6pnBP8IBAH/AAAA/2NE + Bf+1fwT/BQMB/1c8Bf/6sAH//LEB//yxAf/8sQH//LEB//y2Ev//+e3/////////////////z4Zi/7I8 + Af+yPAH/+KsB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/+7AB/zgm + BP8AAAD/LR4E/3NQBf8sHgP/6KMC//yxAf/8sQH//LEB//yxAf/8sQH//LEB//7ptv////////////// + ///Mflf/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH/XD8E/wAAAP8GAwH/NSMG/5JlBf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//uWq//// + /////////////8x+V/+yPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf96VAX/AAAA/wAAAP8uHwT/9awB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/+5ar/////////////////zH5X/7I8Af+yPAH//LEB//yxAf/8sQH//LEB//yxAf/SkwP/QywI/0Qt + B/9ELQf/RC0H/0QtB/9ELQf/RC0H/zkmB/8AAAD/AAAA/zEgBf9ELQf/RC0H/0QtB/9ELQf/RC0H/zQi + Bf8uHwP/Lh8D/0Q4KP/8+/v////////////Mflf/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/k2UF/wAAAP8AAAD/Z0cF//yxAf/8sQH//LEB//yx + Af/8sQH/g1sF/wcFAf8tHwP/s591/////////////////8x+V/+yPAH/sjwB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+ZagX/AAAA/wAAAP9gQQT//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/gVgF/96bAv/+5ar/////////////////zH5X/7I8Af+yPAH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/51sBf8AAAD/AAAA/1c7 + BP/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//7lqv/////////////////Mflf/sjwB/7I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/mGkF/wAA + AP8AAAD/OygE/+KeAv/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//uWq/////////////////8x+ + V/+yPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af+SZQX/BAMC/xUNA/8nGgT/jWEF//yxAf/8sQH//LEB//yxAf/8sQH//LEB//WnAf/otHn//vz7//// + ////////zH5X/7I8Af+yPAH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/+WgAv/QkgP/6KMC//uwAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/vk4B/7I8 + Af/YnH7////////////Mflf/sjwB/7I8Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af+yPAH/sjwB/8x+V////////////8x+V/+yPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/7I8Af+yPAH/zH5X////////////zH5X/7I8Af+yPAH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/sjwB/7I8Af/Mflf////////////Mflf/sjwB/7I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/sjwB/8x+V////////////9SRcP+yPAH/sjwB//Cf + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/8J4B/7I8Af+yPAH/1JJx////////////58Gu/7I8 + Af+yPAH/uUcB/8piAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8tj + Af/LYwH/y2MB/8tjAf/LYwH/y2MB/8tjAf/LYwH/y2MB/8piAf+5RgH/sjwB/7I8Af/nwq////////// + /////v7/yXVM/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/yXZN//// + ///////////////////9+/r/2Z+B/79cK/+zPgT/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+zPgT/v1wr/9qg + g//9+/r////////////////2//////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////9v///8T////8//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////z////D////N/////z////8//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////8/////P///zUAAAAA////N////8X////3//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////9v///8T///82AAAAAIAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABKAAAABgA + AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///w////+r////9P////f////3////9/// + //f////3////9/////f////3////9/////f////3////9/////f////3////9/////f////3////9/// + //T///+q////Dv///6z////5//////////////////////////96dHH/fnp3/9vZ2P////////////// + ////////////////////////////////////////oZ2c/6WioP/////5////qv////X///////////// + ///////////////////+/v7/nJmX/zUxLv94dHL/8fDw/////////////////////////////////+no + 6P9jXlz/BQQE/xcWFf+Sjoz//f399f////r//////////////////////////////////////////93b + 2v9DPz3/Lysq/7+8u///////////////////////2NbV/zUxMP8AAAD/AQAA/zMwLv99eXf/7ezs+v// + //r////////////////////////////////////////////////u7e3/Ojc1/xoYF/+/vLv///////// + ///o5+b/NTEw/wAAAP8vLCv/mZaU//v6+v//////////+v////r9+vn/1pZ3/7pQG/+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/jDED/wsFAf8sGA//+fn4//////9nY2H/AQAA/2JeW//t7Oz///////// + ////////////+v////rWl3j/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/0ga + A/8AAAD/iV8E/8iMA/8PCQH/bk0F//uwAf/8sQH//Loe//7ptv//////////+v////q6Txr/sjwB/+uW + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/6p1BP8BAAD/Qy4D/3ZSBP9ONQP/+a4B//yx + Af/8sQH//LEB//y6Hv//////////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//KqAv8XDwL/DwoC/z8rBf/RkwP//LEB//yxAf/8sQH//LEB//yxAf//////////+v// + //qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/ZlwL/tX4D/7V+A/+1fgP/tX4D/7V+A/8uHwP/AAAA/0gw + BP+1fgP/tX4D/7V+A/+1fgP/tX4D/7V+A//o5ub/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yx + Af+yfAP/m2wD/5tsA/+bbAP/m2wD/5tsA/80IwP/AAAA/2FCA/+bbAP/m2wD/5tsA/94UwT/BQMB/xgQ + Av+urKr/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af9FMAP/AAAA/4BZBP/8sQH//LEB//yxAf/8sQH/gVoE/8OJA///////////+v////qyPAH/sjwB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf9FMAP/AAAA/3dTBP/8sQH//LEB//yx + Af/8sQH//LEB//yxAf//////////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf9FMAP/AAAA/y4gA//upwL//LEB//yxAf/8sQH//LEB//yxAf//////////+v// + //qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+mcwT/onAE/7mB + A//8sQH//LEB//yxAf/8sQH//LEB/8NYAf/Eaj3/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/7I8 + Af+yPAH/////+v////qyPAH/sjwB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB/7I8Af+yPAH/////+v////qyPAH/sjwB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB/7I8Af+yPAH/////+v////q6Txr/sjwB/+uXAf/8sQH//LEB//yxAf/8sQH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/65YB/7I8Af+6UBv/////+v// + //rVlXb/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af/Wl3j/////+v////r9+vj/1ZV2/7pPGv+yPAH/sjwB/7I8 + Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/uk8a/9aW + d//9+vn/////+v////X///////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////9f///63////5//////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////5////q////xD///+t////9f////f////3////9/////f////3////9/// + //f////3////9/////f////3////9/////f////3////9/////f////3////9/////T///+s////DwAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///9p////3f///+P////j7u3t5ebk5Ob////j////4////+P////j////4/// + /+P////j/Pz84/f29t7///9o////3f////////////////n4+P+GgoD/bGhm/97d3P////////////// + ////////1dTT/0dEQ/9aWFb/5+bm3////+H//////////////////////////8jGxf82MzL/s7Gw//// + ////////ysjH/xwaGf8ZFxb/cG1s/9TT0ub////h7M/A/8+FYf/MfVb/zH1W/8x9Vv/MfVb/mF1A/xIM + CP/FuLH/6unp/yYkI/9jYF7/6ejo///////////h9eTc5bRABv/DWQT/y2MB/8tjAf/LYwH/y2MB/8tj + Af9GIwL/VDgC/31XA/9sSwL/+7AB//y1Dv/+57D/////4eS7peuyPAH/+7AB//yxAf/8sQH//LEB//yx + Af/8sQH/lmkD/xUOAf9XPAT/8aoB//yxAf/8sQH//cxZ/////+Hjt6LrsjwB//yxAf/8sQH/8qsB/5Fj + BP+RZAT/kWQE/3FOBf8AAAD/XUAE/5FkBP+RZAT/h10D/4xwL//+/v7h47ei67I8Af/8sQH//LEB//yx + Af/8sQH//LEB//yxAf++hgP/AAAA/6VzA//8sQH//LEB/4VcA/+ohjr/////4eO3ouuyPAH//LEB//yx + Af/8sQH//LEB//yxAf/8sQH/voYD/wAAAP+RZgP//LEB//yxAf/8sQH//ctW/////+Hjt6LrsjwB//yx + Af/8sQH//LEB//yxAf/8sQH//LEB/9eXAv9xTwP/onED//yxAf/8sQH//LEB/9R9KP/05Nvl47ei67I8 + Af/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf+yPAH/47ei6+O3 + ouuyPAH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH//LEB//yxAf/8sQH/sjwB/+O3 + ouvrz7/osjwB/9t+Af/jigH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/44oB/+OKAf/jigH/230B/7I8 + Af/s0MHo////4dSScP+1Qwn/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7I8Af+yPAH/sjwB/7VD + Cf/Uk3L/////4f///93///////////////////////////////////////////////////////////// + /////////////////93///9q////3f///+P////j////4////+P////j////4////+P////j////4/// + /+P////j////4////93///9pAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxBAACsQQAArEEAAKxBAACsQQ== + + + \ No newline at end of file diff --git a/source/Program.cs b/source/Program.cs new file mode 100644 index 0000000..2996409 --- /dev/null +++ b/source/Program.cs @@ -0,0 +1,16 @@ +namespace SuzuMagnifier +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + ApplicationConfiguration.Initialize(); + Application.SetHighDpiMode(HighDpiMode.PerMonitorV2); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/source/SuzuMagnifier.csproj b/source/SuzuMagnifier.csproj new file mode 100644 index 0000000..61fe9c4 --- /dev/null +++ b/source/SuzuMagnifier.csproj @@ -0,0 +1,36 @@ + + + WinExe + net10.0-windows + enable + true + enable + Suzu Magnifier + 0.1.0.145 + Suzu Magnifier + Hi, I'm Ray + Ray Lam + icon-128.png + favicon.ico + true + + + none + + + + none + + + + + + + + + True + \ + + + + \ No newline at end of file diff --git a/source/SuzuMagnifier.csproj.user b/source/SuzuMagnifier.csproj.user new file mode 100644 index 0000000..7814ea2 --- /dev/null +++ b/source/SuzuMagnifier.csproj.user @@ -0,0 +1,8 @@ + + + + + Form + + + diff --git a/source/favicon.ico b/source/favicon.ico new file mode 100644 index 0000000..49097ef Binary files /dev/null and b/source/favicon.ico differ