diff --git a/App.config b/App.config new file mode 100644 index 0000000..5754728 --- /dev/null +++ b/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..cccf8a2 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,166 @@ +namespace GSecPs3Decrypter +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.button1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button2 = new System.Windows.Forms.Button(); + this.listView1 = new System.Windows.Forms.ListView(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 8); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 20); + this.button1.TabIndex = 0; + this.button1.Text = "Open Save"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 34); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(513, 20); + this.textBox1.TabIndex = 3; + // + // button2 + // + this.button2.BackColor = System.Drawing.SystemColors.ActiveCaptionText; + this.button2.Enabled = false; + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.button2.Location = new System.Drawing.Point(452, 8); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(73, 20); + this.button2.TabIndex = 4; + this.button2.Text = "Decrypt"; + this.button2.UseVisualStyleBackColor = false; + this.button2.Visible = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // listView1 + // + this.listView1.BackColor = System.Drawing.SystemColors.Info; + this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listView1.FullRowSelect = true; + this.listView1.GridLines = true; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(12, 60); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(573, 122); + this.listView1.TabIndex = 6; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.List; + // + // textBox2 + // + this.textBox2.BackColor = System.Drawing.SystemColors.InfoText; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox2.ForeColor = System.Drawing.SystemColors.Menu; + this.textBox2.Location = new System.Drawing.Point(93, 10); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(49, 15); + this.textBox2.TabIndex = 7; + this.textBox2.Text = "Status:"; + // + // pictureBox1 + // + this.pictureBox1.BackColor = System.Drawing.Color.Transparent; + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon; + this.pictureBox1.Location = new System.Drawing.Point(531, 4); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(54, 50); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 8; + this.pictureBox1.TabStop = false; + // + // textBox3 + // + this.textBox3.BackColor = System.Drawing.SystemColors.InfoText; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.7F); + this.textBox3.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox3.Location = new System.Drawing.Point(143, 10); + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(303, 15); + this.textBox3.TabIndex = 9; + this.textBox3.Text = "Idle..."; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ActiveCaptionText; + this.ClientSize = new System.Drawing.Size(597, 192); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.listView1); + this.Controls.Add(this.button2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "Main"; + this.Text = "[GSec] Ps3 Decrypter"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + private void TextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) + { + throw new System.NotImplementedException(); + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.TextBox textBox3; + } +} + diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..39b2bbe --- /dev/null +++ b/Form1.cs @@ -0,0 +1,179 @@ +using PS3FileSystem; +using System; +using System.IO; +using System.Windows.Forms; + +namespace GSecPs3Decrypter +{ + public partial class Main : Form + { + public Main() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (this.fbd.ShowDialog() == DialogResult.OK) + { + this.button2.Enabled = false; + this.listView1.Items.Clear(); + this.dirpath = this.fbd.SelectedPath; + this.textBox1.Text = this.fbd.SelectedPath; + this.button2.Visible = true; + this.button2.Enabled = true; + string state; + if (File.Exists(this.dirpath + "\\\\~decrypted.txt")) + { + this.button2.Text = "Encrypt"; + state = "✓"; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.unlock; + } + else + { + this.button2.Text = "Decrypt"; + state = "🔒"; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources._lock; + } + try + { + Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.textBox1.Text, this.key); + for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++) + { + this.listView1.Items.Add("[" + state + "] " + ps3SaveManager.Param_PFD.Entries[i].file_name); + } + this.SetStatus("Loaded directory"); + } + catch(Exception z) + { + this.listView1.Items.Clear(); + this.button2.Visible = false; + this.button2.Enabled = false; + this.SetStatus(z.Message); + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon; + } + } + } + + private void button2_Click(object sender, EventArgs e) + { + if(this.button2.Text == "Encrypt") + { + this.listView1.Items.Clear(); + Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.dirpath, this.key); + this.SetStatus(ps3SaveManager.EncryptAllFiles().ToString() + " Files Encrypted"); + File.Delete(this.dirpath + "\\\\~decrypted.txt"); + for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++) + { + this.listView1.Items.Add("[🔒] " + ps3SaveManager.Param_PFD.Entries[i].file_name); + } + this.button2.Text = "Decrypt"; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources._lock; + } + else if(this.button2.Text == "Decrypt") + { + this.listView1.Items.Clear(); + Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.dirpath, this.key); + this.SetStatus(ps3SaveManager.DecryptAllFiles().ToString() + " Files Decrypted"); + string text = ""; + for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++) + { + text = text + " " + ps3SaveManager.Param_PFD.Entries[i].file_name; + this.listView1.Items.Add("[✓] " + ps3SaveManager.Param_PFD.Entries[i].file_name); + } + File.WriteAllText(this.dirpath + "\\\\~decrypted.txt", text); + this.button2.Text = "Encrypt"; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.unlock; + } + } + + public void SetStatus(string text) + { + this.textBox3.Text = text; + } + + public FolderBrowserDialog fbd = new FolderBrowserDialog(); + + // Token: 0x0400003F RID: 63 + private string dirpath; + + // Token: 0x04000040 RID: 64 + public byte[] key = new byte[] + { + 202, + 239, + 174, + 185, + 39, + 34, + 167, + 203, + 83, + 93, + 82, + 135, + 34, + 250, + 104, + 221 + }; + + private void Form1_Load(object sender, EventArgs e) + { + this.textBox1.KeyDown += textBox1_KeyDown; + } + + private void textBox1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (Directory.Exists(this.textBox1.Text)) + { + this.listView1.Items.Clear(); + this.dirpath = this.textBox1.Text; + this.fbd.SelectedPath = this.textBox1.Text; + + this.button2.Visible = true; + this.button2.Enabled = true; + string state; + if (File.Exists(this.dirpath + "\\\\~decrypted.txt")) + { + this.button2.Text = "Encrypt"; + state = "✓"; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.unlock; + } + else + { + this.button2.Text = "Decrypt"; + state = "🔒"; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources._lock; + } + try + { + Ps3SaveManager ps3SaveManager = new Ps3SaveManager(this.textBox1.Text, this.key); + for (int i = 0; i <= ps3SaveManager.Param_PFD.Entries.Length - 1; i++) + { + this.listView1.Items.Add("[" + state + "] " + ps3SaveManager.Param_PFD.Entries[i].file_name); + } + this.SetStatus("Loaded directory"); + } + catch (Exception z) + { + this.listView1.Items.Clear(); + this.button2.Visible = false; + this.button2.Enabled = false; + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon; + this.SetStatus(z.Message); + } + } + else + { + this.pictureBox1.Image = global::GSecPs3Decrypter.Properties.Resources.icon; + this.listView1.Items.Clear(); + this.SetStatus("Directory does not exist"); + } + + } + } + } +} diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..a3baac7 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,1912 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAYAAAAAAAEAIABhHQAAZgAAAICAAAABACAAKAgBAMcdAABAQAAAAQAgAChCAADvJQEAMDAAAAEA + IACoJQAAF2gBACAgAAABACAAqBAAAL+NAQAQEAAAAQAgAGgEAABnngEAiVBORw0KGgoAAAANSUhEUgAA + AQAAAAEACAYAAABccqhmAAAdKElEQVR42u2deZRU1Z3H762tt+rqnd6gEZqlARdEFFAwgkQNmcmMSzSZ + GBWTnMmEJTOu5ySzOGdyJtGDTgJiMnNUSMYkJkeNk0RNMCIoKCKgKGCDzaY00PRKdVdv1VVv/st531+T + VzxeVS/c7+e/b79Xr+6779Wv7+93f/d3lSKEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCyGhCD3cD + TOehu9Zl23VeWM21a61QK6WnoE7W4fm6QnxFodDhFE3qErrDLixlncTDvnrU1gE4qq237TqgurbZ9co1 + K/vS05PkXPANdwMIIcMHDQAhBkMDQIjBMAaQZlaveCZi13EVv8WuLUt/2a61sq4Sl8gZ7nvIMD1Cb7EL + raxf2nVAh56365Vrbo8O9w2cT3AEQIjB0AAQYjA0AIQYDGMALvnht5+aatcDCf+Ddq2V9SXxEUefXosn + UFKaAF1VPQC6uDQJuqgIz8/Px+OhLAt0MOR8f/F+1H192MCuTvyf0d7uB93WgsePNwZAt7Tg+QqbdyZ6 + xPkQI/AHko/Y9T/+6Gv7U16R/BmOAAgxGBoAQgyGBoAQg2EMQPBf//D0RLtOBNT37Vpb+hbxETCi0qev + qo6DrpuBesJE1NnZqZ3i0UxPD3bQkUNB0PX7MEghYwjW4O6BoIel1K9R+79j1/c/fsfh4e6DkQRHAIQY + DA0AIQZDA0CIwRgXA1i9YnWWXQ+o8P12bVn6u+IjsF7fL6axp83A5eyzZqOOFCQVOXdOn8b/Ue+9C49D + fSRiBonEoEv0otTfs6ugjq6ya9PqE3AEQIjB0AAQYjA0AIQYzHkfA3hk5brJdu1PWr8SXXCpU4/U1WFy + /Lz5mJqeFz6/5+1HOrEu/B/21hZcerG/HvMMzrD2YJdd6GTiNru+54mvNwz3PWYSjgAIMRgaAEIMhgaA + EIM572IAq1Y8Dbn6Psu3zq4tZUFd/EKxnn7hYvTxq8fievxM09ONj+ToUfRhm05ibnxrMyYmRMW8ucy9 + P8M8OSDzHMKivkB+BPWCa7pBl5SMrLyHxmPYXxtfzQV9ukP8D9Sq0y4tpe6y6/vWLH1huO8pnXAEQIjB + 0AAQYjA0AIQYzKiPATy6bP0yvCNrtTgFjFztZFx/v+iz6MNmZaV3Xj+OX6f218NSBFW/F3PZm06iE26N + 8DSDqddWgp4zS+RJ9DeC3vMu+uQREYMZPwnzLnxp/hfVH8dXfpOICRzYH5QfsYS6zy7vXbv0sfS2cGjh + CIAQg6EBIMRgaAAIMZhRFwN4bNn6f7VrS1v/7nRH8xfgcvCZl/WqdCJ9yt270Md/fydqWWdfooXTG6os + BZ1dgz53qLwYdLAwH7Q/kie+AL/fF0KfN9GL/ZPoQp3sQx990sQxoKtzxT4Cp9pAb/7h7x3vPzeMeQSz + 52OMpnZav8oku3ZgvYG3tqCWawm0tv7Fru9Zc/f31CiCIwBCDIYGgBCDoQEgxGBGfAxg1fJ1K0SDYZ7f + J+5g0fXoM9al2WdsOIA+8+bXcR5Z5vJLQmPQZ8+7GMoVqPAM2JZA+bKz1EhirGhOdba7zx/fjWX56zft + Ad3T1A46vwzzIm65vXlI71fuU7BxAz7vpMzTsPRyu7x37V1rh7TBLuEIgBCDoQEgxGBoAAgxmBEXA5Dr + +bWlsYafRqO1OM0+v5zX3/gq1phr2B9y/HywtBB00dWzQOdMrslIv2UKrz6/pFGkYRwTVfjjx06B9oWx + /2eUdoCu6XoV9ImD+AVjJ+BijEDA2+IKGRP4k4gJqCRmCmjlu9mu71l752+89WB64QiAEIOhASDEYGgA + CDGYYY8BDKrbb6mdcIKlILl9/tXpze2Xe8+99CKUDFRtbXhci6J5hVfjtgKR2TPwC3zD3sWuSLfPL338 + RpePK1V7jmzBPIK9L0OZf1VWgTUdF/8tlPxT2TneYgKD1g68iVr7NHzhgKXghXlgzV0HPTXAIxwBEGIw + NACEGAwNACEGM+QO6uoVq8Gri1vht0WTwEeaMhXnca9bEvP0/e2t6MP/5nlcL98dQ5sYKIqAHnPjQtDB + sqIh6bdMMdp8fkl3B74P7zy5AY+3oc8fKcR6A9ffFAUdLvC2r8EfXsa8AJk3on36fbuOFufOseuHHro1 + swUPBBwBEGIwNACEGAwNACEGE/B+CXcMqPD9+Bf0+eVefdeIuv1ukXvlvfAc+vw93Xg8S9TgK7t5MWh/ + nkcneZjJdG5/Y5+7z3ttT24hPs+rvrUE9Nb1G0FHj2E9gT88jzGez9+GMYGcPHcxgUVib8nmJvyJne7w + zbTrcGvsPnGJ/3TXA97gCIAQg6EBIMRgaAAIMZiM5wGsWvbkeLv2af8+u7a0gonTG2/Bed3qsXHlBll3 + /7lfYW6/zAPIqioDXX7bddhBoUF7xY0qRvs8v9f2HYviWoDTz2KewMCJFtCl5Xj+klsxj8Dvsp5A4zGM + AfzmOXwftdYw759I+urs+v7H7zisMghHAIQYDA0AIQZDA0CIwWQ+D8Dne8QuLQt9/ro6TH126/NLXn8N + a8hJnz9QXAB6zM3Xgh7tPn9FEp3grnc/Bl2fdOfDRpMYU0lMw30MfDnO+xZk2udPlYegQ/iKF9yyCPvn + 56+AbmlCn3/7m/g+zVvoLi+leizGFKZOxfd9f30IFgv4VELuLfiV9PYYwhEAIQZDA0CIwdAAEGIwac8D + +OG3n5pq14mED+b9AwE0Ol9deho+nxd256MeqMf11htewfXYOoAxgMo7/gr0+baeP7rtA9Afbtjl4mqp + KfzMZaAL5l7k2J5Mz/N7zUPIb2sDvfW/MSaQjOPalM+KmoJy34FUdHXhT+5/n8aYVCKh4AsTPjXNrh9Y + vfRjlUY4AiDEYGgACDEYGgBCDCbteQADCf+Ddq2VBUambjo6cW59/rhwuba84exkFl4zG/T55vNLH7sj + 4bx+vW8MxkT6x2DeQ+gUdnDWKfSB1QDq0ebzD2pfVTHIqdfhPg8fvbQD9DubMMZUWYMxLLFtxCDC4n2v + m455AXs/DMEV/En1oLjE1113ogMcARBiMDQAhBgMDQAhBuM5BrB6xTNQVC1uxW+zay0yDWbNdlk0TrDr + XXTiZB3/YDn6dJFL61JecySTbh+7vxJ9/ugleMHIbjxfxgAi4o0ZdT5/Ci6YB9Pu6thO3LoverIddP37 + +AUzXO5VOWs2nr93D+a1qKT1Zbt8+IGn/smuH3zka53KAxwBEGIwNACEGAwNACEG4zkGMGANfFH8CSZK + 5XroiMu91+JxDCJ8uNt5/XmRmPdXviHf/tATmZ5X90p+mjNHhtvnl/jE+zLthlmgt69/DfSeXfiF0y7t + E9dzznMpEHsVVlfj76XxWAB+T8GYuklc4qee7tdbdxFCRjM0AIQYDA0AIQbj2aNLKvUlu5Ye99Tp3rY7 + r9+H89a9vfgNofIS0DkXVKW9kzJJun1YUQZ/xDHSfP5UlE2uBh2pxLUk0ROYF3D4AL6vtXXu3v+p0/B8 + ua+A5dNfEh9hDIAQcm7QABBiMDQAhBiM6xjA6hWrwQuLW9ZVcIIIAlzgsmaaRNb8k+RfNrpy/TO9V1/n + CIsBjDaffxDifa6ZAyUv1Z4Xt4E++BE22G0MYMJE8QBlUM1SV9ul/D2uXLPS1WIbjgAIMRgaAEIMhgaA + EINxHQOI64Ir4Q9WEjZPKy3D9eM5Oe5q/sn1/SdPYBO1KLqWO2X8UPXVOZFpn9+tT51pRr3Pn4LKC/F9 + 2/u77aBPfIJ5AP19Im8ly/n3kJOLawNKSvD31Nrih7UBAyr/CnGJN93cD0cAhBgMDQAhBkMDQIjBuI4B + WMnkHLuW05RVVd4moj/9BH18S7hMOePKQfuyQqkuOaTQ53f3+ZHu80tCudjgopoy0G2Hm0A3NeJPbNxE + d3kxVWMHxQBAJy09T3yEMQBCyNlBA0CIwdAAEGIwrmMA2lKYDC2CACWlCRdXG0zTSecmZdWUn+WVMkOy + F51e/0cNoEsvrxWfcOfUevWpZd3+jjTfv6w30DXEPn+v+MJPPjgE+oKZ2P/SZ083JRPxfUx3DEDmAUi0 + sqZ4aT9HAIQYDA0AIQZDA0CIwbjPA9AWxAC0CAIUFrmr+y+R85yS4JiSs7xSZvDv+xj0kVdx//jmHfWg + F9y5GHSkrAB0uufRO9Jct18i6w0UpDjfq88fPdUB+o31fwLd3dEFOtGPDZx2zcUZ7Y+CSuf3saPNf5ZX + OjOFRSlialpPPbsrnRmOAAgxGBoAQgyGBoAQg3GfB6C0Y+H9SMRbDKCr09kmBYsiQ9Evf2aQj510XusQ + a8Pt2jf+5CXQk29dhPdbUeGpPdKn7hjS3nHfvlS0HD0FeuszG0H3xZyDJMmEt/fPLZ35+Y7Hox3eYgAp + f0+WVX12VzozHAEQYjA0AIQYDA0AIQZzLrPGjk5PMOSuBqAkFtOOxwPhnLO80rnh1cdOBrH9/T1YF37f + M6+CLlmC2yrkTZ/oqj3Djdf2HXnvIOgdL2wFLX162b++uLf3zS0yb6M56Pw+9vV4+x+b8vekdf7ZXenM + cARAiMHQABBiMDQAhBjMucQAwk4Hgy5L9MmafwMDzjEAFfA2rypJt4/dNR07QK6VyN+N89gtv38DdG40 + iu25bmZa79crst6A2/468NY+0O+/hHX1lXgfuuqwP60Q/s/K/yCzRRJTrdXwZQUdPx/3tjWmCqWKAVgW + YwCEkHODBoAQg6EBIMRg0r56XPr0/bhcWyX68ARLpDpr7Xw9rVLECFKQ6Xl12b7oJfgFA7l4vGibqHG3 + +X3Qvk7swMtvxK0ZtX9obXh+ijcmmcQH+t5v3wF9cPt+0JZ4nKevwHn1WB0+sMju4fX5JZaVykdH2d2M + f9Di8QWyRZ5DhvM+OAIgxGBoAAgxGBoAQgzmXGIAwqtXxXbR3Yo+TkC7y9X2+fD8RAJ9oqSYWE21N2C6 + ff6ot60PVfdkbFAiD21w8eZu0Ed24b4DPdEY6Cv/bmFa2+eWeD8+j22/2AT6xIFG0FYAn2fbAtjuXvWO + c55XTzdeazJa/c4dHkjxC5MxsHg3vv/xFGtjlNadygMcARBiMDQAhBgMDQAhBnMuMQDpc0AMoLcbfZZw + nrsYQG4unt/ZiddLiJpwMgaQbp9f+oidynktQm4Drv/vqUGfNl6En++rwuMt1+NSi5LXMOTS1HAC9B9/ + 8gpoXV7q7YZTEOvAGMTGH78M+nRTO+hkDv6PaV2EPn9/ifMrGGzHuviyfyW+FGtFvPr8kmSsx/F4Vra3 + GoW9XSliAJbFGAAh5NygASDEYGgACDEY93sDKuu4XWulx9t1VwxtSjjPnQ8UCaPP1yn2CYi343r5CZW4 + T0C6fX7pI+Zfgtux9zR8CrqvEeval/0Bffi2+c7z3vFi9GGbP4fLvUs2og/efQp9biV1mjmy82PH4wMF + 2P7WxXl4PM/5f072p5hXULwF8yK0qAFYWjMGdO3l+HzS7fNLEm1Rx+PhcOIsr3RmOmMp/kdr3Xh2Vzoz + HAEQYjA0AIQYDA0AIQbjfm9AS+OCbq3m2WXHafQBK8a4S04viKDP1HgCfeScllbQ1dljPXWAWx/Rl4OJ + BpfddT3o46+8DVrm8hdvQh++62IMWnQKnQijjW5eIvIENuP1shqHdjFAfwW+Qq3XoM+fDDnPY+d9hA+g + cIeYVxdpJOMumQD6ipvmgz6RxPcv3T6/ZKCpzfF4QaG3GEA0mqIGpmXtP7srnRmOAAgxGBoAQgyGBoAQ + gzmXtQD1Tgc7OrzZlIoK9GH3CQ+n71iTp+t7nRcevNYAfbSxt6BPml9WAHrPhl14XNS4C3Rh3kT7XKyR + J9fTty7EmEDBNvSh8xrwhuMRZ58y1Tx9rBbXXnTMw7wG+S9FJ9CJLxLtyzmIuf1aFIW88PpZoKd95iLQ + mZ7nT8XAJycdj5eN8bYxQPtp5+eltWIMgBBybtAAEGIwNACEGIzrGEBSKyj0Li3IyWZZ0815vbSkqhxj + AHKfgOYjGAOI96IPGcxGHzX9Pr+7z0uftUDEBN769ZugpU/sj2JMoG0h+tyJbHwCHVdizKBzpqhBmOts + 87snYf/1VuErkkzxeX8vtrf4dczlDzXj8/WH8H2Zd+sC0FXTa0APt89vdYuYyvEW0D7RPaVl3vIyTjal + /Ilu83J9jgAIMRgaAEIMhgaAEINxHQPI0p2Q7B638sHJb2v3gxPa24tOfHa2c41AuR96pYgJHBfTrsf2 + HAUdvGgy6KH2+VORrEWftuL2JaCbnnsN+6MZ6wmU/R516yLMvZf1BFL5/Cnbm+LzsmZfsahXEIhhTCCn + AGMY8796LeiiqhLQw+3zS/oO4PumxF6I5dU47x8MuauJ2dOL/X2GPAAIqgRU53Yv98MRACEGQwNAiMHQ + ABBiMNrrBR5dvm6D+NNn7WLBPPQJJ9f2p7okcPAIzktv3oI+b145bEugSu/8gqs7zLTPL31W6dNKkt34 + gehvXwd9+ijmQVhBsdfe/MzutSfrDRS/gc/XJ2r2lYwrA33V7YtAZ+dj3oLb/so4woXvWP870AOiBuO8 + +Vimv+YCd+/7/gZ837duw/ddKws2grjn8buXpL7qX4YjAEIMhgaAEIOhASDEYM6lHgCi1bOgLYwBNBxC + n8ZtDGD8OJxXzc5CpywmarKFjx7H8y+oAp1pn3/QvLVLH7amCBtU+bXrQO940VvNwegl7m443TX7/EGc + 1/baX5mm/9Ax0NLnzxX7Xoytcfd+SxoOZTket7Tv2bO81FnBEQAhBkMDQIjB0AAQYjCeYwBBFXzOruN6 + 4HG7PnkqCBO90S70ASMp9k4L+NHJvPhC9EG378R57/bX3gU9+5t/Dbo6O702L/P1BrC/rhA1BwurMA9i + 90t4/7LmoD+K/d0xB/uv8F3s31xRn0DmVcy4dibqRTMdzx9puf0SKyliTJt2OZ4/dRr2l8/l6xUVe182 + NeNPUisLcv+zEt0vpPN+OQIgxGBoAAgxGBoAQgzGcwxg5ZrbYYP0VcvXy3nKpXaxZy86vVfO6VZumDYV + nch99eg0d7XgPG3PblE2fd40T/c73DUGJVOunA46XIj7BGwTNQdzD4u8imO4v73M5Xdbsy/d/TXU9O78 + CHSipQN0vti7ctIUb4kLH+7FtRAyr8JS+pd2veyJZV2prukGjgAIMRgaAEIMhgaAEIPxvhZAXtCfeNiu + E0l9p11/fCgLjM7Mi9ApzM1NKif8wmRdNRdjCH/ciD7wB6/sAF02vhy0nEeXSJ/Vba56ptceSKRPfu03 + cbn4mz/DmoPdHehSuq3Zl+7+GmoGxFqS7s3v4Qkij+HS2aL+gc9dzb9YDF/ghkOiXoO24AegE8kfZPL+ + OQIgxGBoAAgxGBoAQgzGc03AVDy6fJ3MC7jNLmonYK75Z66KpbqkI1u3ow+7/wA64fmlEdCL/h595OYA + OunDPc+fbnq78IYa92Kd++oZ40Fnh51vYLTN8ydj2MDTz0CJPZXowJp+k6fi+bMu9/Z+vi5qWh4WNS+V + pX5ul/euXXp7JvuDIwBCDIYGgBCDoQEgxGDSngcw6Av8/gfsOpFIwAL9g4dD4LRPrkWnsqrC3f7qc2dh + XkBbG95icwvmvm/8Kc6LF912A2gdGLQ3GzDSfX6J9Olr50x19fnR5vOrOL4/0ec3gpY+f0kJnn/JZd58 + /pOn8P07fFT4/FpDQQFfwPrnoewejgAIMRgaAEIMhgaAEIPJeB6A5NHl67+Lf7G+Z1eRfFwL8DdL0GcP + Br3tt/7SH/NBy5psY27G3PecSeNAjzaf3ysjbq8+l/S8i+v7YxtFzUTxvl17QwforCx371t/P/6k/u8V + zDvpFO+bsqzv2OW9a+/+/lD2D0cAhBgMDQAhBkMDQIjBZDwPQBLU0VV2Hbfyb7LraKdvll1v3Ya5/dcs + cDcvm5ONPt4Ni3He9+inuB67ong76JYsjAGk8vlPHTqJugH3Kpwu6uj7/CPLBg/5Xn3CxY7u2As6q7IU + 9djyVFcELq/aA/qEqOM/uQ6DHG59fsnWbZjrP8jnV2onHC8LP+rpCz0yst4+QsiQQgNAiMHQABBiMEOe + ByB57FtPTrJry+/HzdgsBRP3sy9FH+7iGRlORs/FedzYOChnoPrjmNv9ymO4dZtcf3/dii+ALqx0rkmY + aYZ7nn+gHfM8Gv8H+8+fh0GXqm9AyEjlBrHBl7f9CnSoD2M+6eaDPdi+He9jnX+tNdzggFIQ43pgzV0H + M9rAFHAEQIjB0AAQYjA0AIQYzLDHACSrVqwDJ89nqefs2tLY5qvnYl7ApNp+lUlkfYDt9RNBf7itBXTZ + BJy3XviNz7n6vn2bPgCdlY0xh9q5da6ul+71/LF9h0AnuvGCkdnT3VxONf0Ca/T1ftoEuuYy3Jdg8YX4 + /SrhvK+EVz4+iP3/ppj3V0pBAyxL3WzX9z2+9MWMNtAlHAEQYjA0AIQYDA0AIQYz5GsBUnHfmqUwEfzo + svUr8AzrcbvaMtgHA9IdE7AGcH/4ZEcj6FAICwZccW2Fq+vLvfr2bMC0iJwIro1IFQOQPv7Op17GP2gM + A1V8xV2Mon0zpLarRBRjMnlTcJ8Bf8T5eU2+Gvtr77MYAwi2ncAPDLHPL3P95VoGZVnL7fK+tXe/mNEG + eoQjAEIMhgaAEIOhASDEYEZcDEBy79q71tr1YyueLrLrpKX/w67fED5at6gJmO61A3Nm4z4EV1yGWvdu + Qn3wHdADBejDHz5Y5vh9JTXOx1Ot5+9rPJXW+88qx3n5bhED6D90BPSlk5tBV3RjzT6/xudz0U0Yowi5 + rAnplkG5/bsxt3+Qz6801PG/d+3SH2e0gWmGIwBCDIYGgBCDoQEgxGBGfAxAcs+au2EfgceWr2uDEywN + eQI73ssBJ7K5FXP5F8xFnz0U8uZj6hSrK6w+rGfgP/Ue6MQR4XMq9EkvqEAfPt68FXSfrgKd63dXbyA3 + eRp0XgK7tzCO8/Cl1dienR/j9WpOvQG6usxdDCbbY40+STyOD2jLO5hXcfiI3LsPc/vlPP9o8/klHAEQ + YjA0AIQYDA0AIQYz4uoBeOWxZT+9Ef7gs35ml5Zlhe1a7kV4lYgJVJbHh7T9MrW9tRXDNGNKcf96t0/w + pQ35jsc/f53LGnrCRW8W7S0pxvb6hvhfzvGT2J6t7zjX7Zc1/JKWdaddj7T1/F7hCIAQg6EBIMRgaAAI + MZjzLgYgeWTF+lq7DmhRYzBpzXTqkdrxWE9g9iyMEeTlZjY3nTgTi+H/sO3vYR7FoHn9wUBBg4TWsPHD + cNftzzQcARBiMDQAhBgMDQAhBnPexwAkDz30a3AKw62x++xaa/1v8IGkBef7fejzT5qIMYKLLsQF+JEw + 1hAk7oiKefoP96KP33AoCDqRFK+01rj4IpmE+hGdZeFH7fqhh27N7MYSIwyOAAgxGBoAQgyGBoAQgzEu + BpCKVcuehEL2/kDwYbu2ktatoC0L+1D0aMUYzIWfNAFdzHFjca1BTnZm69wPNz2iRuMnxzBXv+EQ7qvQ + 1CxKVsi0C21hhyX1L+0yEPB/x66//aM7PhnuPhhJcARAiMHQABBiMDQAhBgMYwAueWTlusl2nRUMQN5A + Mp6AGEEyaQUdLyieQFEB5g1Ulg84Hs+PoA7noUucJWrqBVJUgRwQ5Q/6+rGBXSL3vjOKNRbbTqM+2YRf + 2C6OqxRLKbRS3eJ08PF1MvEDu77nia83KHLWcARAiMHQABBiMDQAhBgMYwBp5uEHnoKiezn9gS/adTyR + BK0sdbW4RK46j9GWJTZPVJuhO7TvWbvOTsResOtlTyzrGu57OJ/gCIAQg6EBIMRgaAAIMRjGAIYZWZ8g + 0hqbY9dJS8+za62sKeISdUJXCl0odFg5I33sDlBaHwdtWftBKn3Arn3aetuuoyV57+D9m7X+fqTBEQAh + BkMDQIjB0AAQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQMkr4f237SlVNFD03AAAAAElFTkSu + QmCCKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAKqAgAaqgIAGn22OPZ9tjj2gbIx2oGyMdp9sjZyfbI2cn2yNxJ9sjcSfbI3dn2yN3Z9sje2f + bI3tn2yN+Z9sjfmfbI35n2yN+Z9sje2fbI3tn2yN3Z9sjd2gbY3DoG2Nw59sjZyfbI2coGyMdqBsjHaf + bY49n22OPaqAgAaqgIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqoCABqqAgAafbY49n22OPaBsjHag + bIx2n2yNnJ9sjZyfbI3En2yNxJ9sjd2fbI3dn2yN7Z9sje2fbI35n2yN+Z9sjfmfbI35n2yN7Z9sje2f + bI3dn2yN3aBtjcOgbY3Dn2yNnJ9sjZygbIx2oGyMdp9tjj2fbY49qoCABqqAgAYAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACddokNnXaJDaFwkmKh + cJJin22Nt59tjbefbI31n2yN9Z9sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+ea471nmuO9Z5sjraebI62oG2NXqBtjV6VapUMlWqVDAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ12iQ2ddokNoXCSYqFwkmKfbY23n22Nt59sjfWfbI31n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/55rjvWea471nmyOtp5sjrag + bY1eoG2NXpVqlQyVapUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln26KJaNzkaSjc5GkoG6P+qBuj/qf + bI3/n2yN/59sjf+fbI3/n22N/59tjf+cfJ7/nHye/5iTt/+Yk7f/laLI/5WiyP+SsNX/krDV/5C74f+Q + u+H/j8Lo/4/C6P+Pxuz/j8bs/4/G7P+Pxuz/j8Ho/4/B6P+Qu+H/kLvh/5Kw1f+SsNX/laLI/5WiyP+Y + k7b/mJO2/5x8nv+cfJ7/n22N/59tjf+fbI3/n2yN/59sjf+fbI3/n2yO9Z9sjvWfbI2cn2yNnJxqjiSc + ao4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJ9uiiWfboolo3ORpKNzkaSgbo/6oG6P+p9sjf+fbI3/n2yN/59sjf+fbY3/n22N/5x8nv+c + fJ7/mJO3/5iTt/+Vosj/laLI/5Kw1f+SsNX/kLvh/5C74f+Pwuj/j8Lo/4/G7P+Pxuz/j8bs/4/G7P+P + wej/j8Ho/5C74f+Qu+H/krDV/5Kw1f+Vosj/laLI/5iTtv+Yk7b/nHye/5x8nv+fbY3/n22N/59sjf+f + bI3/n2yN/59sjf+fbI71n2yO9Z9sjZyfbI2cnGqOJJxqjiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACca4wfnGuMH6Fvj6ihb4+ooG2O/qBtjv6fbI3/n2yN/59tjf+f + bY3/m4Ol/5uDpf+VpMn/laTJ/5DA5v+QwOb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5DA5v+QwOb/lKTI/5SkyP+bgqT/m4Kk/59tjf+fbY3/n2yN/59sjf+e + bY39nm2N/Z9rjaSfa42kom+RHqJvkR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxrjB+c + a4wfoW+PqKFvj6igbY7+oG2O/p9sjf+fbI3/n22N/59tjf+bg6X/m4Ol/5Wkyf+VpMn/kMDm/5DA5v+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kMDm/5DA5v+U + pMj/lKTI/5uCpP+bgqT/n22N/59tjf+fbI3/n2yN/55tjf2ebY39n2uNpJ9rjaSib5Eeom+RHgAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACqgIAGqoCABp9tjHqfbYx6oG6N+aBujfmfbI3/n2yN/55ukP+ebpD/mJC0/5iQtP+R + vOH/kbzh/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Qu+H/kLvh/5mQtP+Z + kLT/nm6Q/55ukP+fbI3/n2yN/6BtjfagbY32nmuNeZ5rjXmqgIAGqoCABgAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqAgAaqgIAGn22Mep9tjHqg + bo35oG6N+Z9sjf+fbI3/nm6Q/55ukP+YkLT/mJC0/5G84f+RvOH/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5C74f+Qu+H/mZC0/5mQtP+ebpD/nm6Q/59sjf+fbI3/oG2N9qBtjfae + a415nmuNeaqAgAaqgIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAKBtiiOgbYojoG6Oz6Bujs+fbI3/n2yN/59tjf+fbY3/mYyw/5mMsP+PvuT/j77k/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5C95P+QveT/mYyu/5mMrv+fbI3/n2yN/59sjf+fbI3/n2yNzJ9sjcygbYojoG2KIwAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG2KI6BtiiOgbo7PoG6Oz59sjf+f + bI3/n22N/59tjf+ZjLD/mYyw/4++5P+PvuT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kL3k/5C95P+ZjK7/mYyu/59sjf+f + bI3/n2yN/59sjf+fbI3Mn2yNzKBtiiOgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAoWuOUaFrjlGgbY7zoG2O859sjf+fbI3/nXmb/515m/+Tsdb/k7HW/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsbs/47G7P+Ss9n/krPZ/47H7/+O + x+//jsjv/47I7/+OyO//jsjv/47I7/+OyO//m4Kk/5uCpP+bgqT/m4Kk/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47H7/+Ox+//krTa/5K02v+Oxu3/jsbt/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//krDV/5Kw1f+deZr/nXma/59sjf+fbI3/oG2O8aBtjvGf + bIxQn2yMUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACha45RoWuOUaBtjvOgbY7zn2yN/59sjf+d + eZv/nXmb/5Ox1v+Tsdb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+Oxuz/jsbs/5Kz2f+Ss9n/jsfv/47H7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+b + gqT/m4Kk/5uCpP+bgqT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsfv/47H7/+StNr/krTa/47G7f+O + xu3/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+S + sNX/krDV/515mv+deZr/n2yN/59sjf+gbY7xoG2O8Z9sjFCfbIxQAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf + bI5qn2yOaqBsjv6gbI7+n2yN/59sjf+Ziqz/mYqs/4/C6f+Pwun/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5ebv/+Xm7//n2yN/59sjf+o + sMn/qLDJ/8Td3v/E3d7/3t7A/97ewP/w4bb/8OG2/59sjf+fbI3/n2yN/59sjf/w4bb/8OG2/97ewf/e + 3sH/xdnR/8XZ0f+nrMD/p6zA/59sjf+fbI3/lp3B/5adwf+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//j8Pq/4/D6v+ZjK7/mYyu/59sjf+f + bI3/n22N/Z9tjf2ea41pnmuNaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjmqfbI5qoGyO/qBsjv6fbI3/n2yN/5mKrP+Z + iqz/j8Lp/4/C6f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//l5u//5ebv/+fbI3/n2yN/6iwyf+osMn/xN3e/8Td3v/e3sD/3t7A//Dhtv/w + 4bb/n2yN/59sjf+fbI3/n2yN//Dhtv/w4bb/3t7B/97ewf/F2dH/xdnR/6eswP+nrMD/n2yN/59sjf+W + ncH/lp3B/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+Pw+r/j8Pq/5mMrv+ZjK7/n2yN/59sjf+fbY39n22N/Z5rjWmea41pAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjnye + bY58n2yN/59sjf+fbY3/n22N/5adwf+WncH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsfu/47H7v+OyO//jsjv/5fP8P+Xz/D/v97s/7/e7P/Uu8L/1LvC/59sjf+f + bI3/vpip/76Yqf//8uP///Lj///rx///68f//+Os///jrP+fbI3/n2yN/59sjf+fbI3//+Os///jrP// + 46z//+Os///jrP//46z/vZGX/72Rl/+fbI3/n2yN/9Szo//Us6P/v9jU/7/Y1P+Wzuz/ls7s/47I7/+O + yO//j8Hn/4/B5/+Oxu3/jsbt/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+W + nMH/lpzB/59tjf+fbY3/n2yN/59sjf+gbI17oGyNewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnm2OfJ5tjnyfbI3/n2yN/59tjf+fbY3/lp3B/5adwf+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Ox+7/jsfu/47I7/+O + yO//l8/w/5fP8P+/3uz/v97s/9S7wv/Uu8L/n2yN/59sjf++mKn/vpip///y4///8uP//+vH///rx/// + 46z//+Os/59sjf+fbI3/n2yN/59sjf//46z//+Os///jrP//46z//+Os///jrP+9kZf/vZGX/59sjf+f + bI3/1LOj/9Szo/+/2NT/v9jU/5bO7P+Wzuz/jsjv/47I7/+Pwef/j8Hn/47G7f+Oxu3/jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5acwf+WnMH/n22N/59tjf+fbI3/n2yN/6BsjXug + bI17AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuNa6BrjWuf + bI3/n2yN/59tj/+fbY//lKXL/5Sly/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+YlLj/mJS4/59yk/+fcpP/ztDY/87Q2P//8uP///Lj///y4///8uP/8+LZ//Pi2f+f + bI3/n2yN/6l6lv+pepb///Lj///y4///8uP///Lj///qyP//6sj/tYeU/7WHlP+2iJT/toiU///jrP// + 46z//+Os///jrP//46z//+Os/6p6kP+qepD/n2yN/59sjf/01an/9NWp///jrP//46z//+Os///jrP/O + x7r/zse6/59vj/+fb4//mY2w/5mNsP+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+Upcr/lKXK/59tj/+fbY//n2yN/59sjf+ea41pnmuNaQAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga41roGuNa59sjf+fbI3/n22P/59tj/+Upcv/lKXL/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5iUuP+YlLj/n3KT/59yk//O + 0Nj/ztDY///y4///8uP///Lj///y4//z4tn/8+LZ/59sjf+fbI3/qXqW/6l6lv//8uP///Lj///y4/// + 8uP//+rI///qyP+1h5T/tYeU/7aIlP+2iJT//+Os///jrP//46z//+Os///jrP//46z/qnqQ/6p6kP+f + bI3/n2yN//TVqf/01an//+Os///jrP//46z//+Os/87Huv/Ox7r/n2+P/59vj/+ZjbD/mY2w/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5Slyv+Upcr/n22P/59tj/+f + bI3/n2yN/55rjWmea41pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbYxSn22MUp9sjv6f + bI7+n22N/59tjf+Upcv/lKXL/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5HM8P+RzPD/s6S6/7Okuv+fbI3/n2yN/7aNov+2jaL///Lj///y4///8uP///Lj///y4/// + 8uP/0bK5/9Gyuf/XusD/17rA///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP/duaH/3bmh/9Wvnv/Vr57//+Os///jrP//46z//+Os///jrP// + 46z/tomV/7aJlf+fbI3/n2yN/7Kfq/+yn6v/kMvv/5DL7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+Upcr/lKXK/59tjf+fbY3/n22N/Z9tjf2fbIxQn2yMUAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ9tjFKfbYxSn2yO/p9sjv6fbY3/n22N/5Sly/+Upcv/jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kczw/5HM8P+zpLr/s6S6/59sjf+f + bI3/to2i/7aNov//8uP///Lj///y4///8uP///Lj///y4//Rsrn/0bK5/9e6wP/XusD///Lj///y4/// + 8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os/925of/d + uaH/1a+e/9Wvnv//46z//+Os///jrP//46z//+Os///jrP+2iZX/tomV/59sjf+fbI3/sp+r/7Kfq/+Q + y+//kMvv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5Slyv+U + pcr/n22N/59tjf+fbY39n22N/Z9sjFCfbIxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxqjiScao4kn22N8p9tjfKf + bI3/n2yN/5adwf+WncH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//nNLv/5zS7//z7+T/8+/k//nq3v/56t7/p3iV/6d4lf+fbI3/n2yN/+3Z0//t2dP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///qyP// + 6sj//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/x + 0qj/8dKo/59sjf+fbI3/p3eQ/6d3kP/53Kr/+dyq//LhtP/y4bT/m8/p/5vP6f+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+WnMH/lpzB/59sjf+fbI3/oG2O8aBtjvGg + bYojoG2KIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAnGqOJJxqjiSfbY3yn22N8p9sjf+fbI3/lp3B/5adwf+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+c0u//nNLv//Pv5P/z7+T/+ere//nq3v+n + eJX/p3iV/59sjf+fbI3/7dnT/+3Z0///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///qyP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os//HSqP/x0qj/n2yN/59sjf+nd5D/p3eQ//ncqv/5 + 3Kr/8uG0//LhtP+bz+n/m8/p/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5acwf+WnMH/n2yN/59sjf+gbY7xoG2O8aBtiiOgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SB5JtkgefbI3Nn2yNzZ9sjf+f + bI3/mYuv/5mLr/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5C94/+QveP/laDE/5WgxP+s + 0dz/rNHc///qyP//6sj///Lj///y4///8uP///Lj/+fQzf/n0M3/zay3/82st//97+H//e/h///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Ks///irP/Urp7/1K6e/+jHpf/ox6X//+Os///jrP//46z//+Os///jrP//46z/qsjY/6rI2P+Y + lb//mJW//5C95P+QveT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+aiq7/moqu/59sjf+f + bI3/n2yNzJ9sjcyqgIAGqoCABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACSbZIHkm2SB59sjc2fbI3Nn2yN/59sjf+Zi6//mYuv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//kL3j/5C94/+VoMT/laDE/6zR3P+s0dz//+rI///qyP//8uP///Lj///y4/// + 8uP/59DN/+fQzf/NrLf/zay3//3v4f/97+H///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//4qz//+Ks/9Sunv/Urp7/6Mel/+jHpf// + 46z//+Os///jrP//46z//+Os///jrP+qyNj/qsjY/5iVv/+Ylb//kL3k/5C95P+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5qKrv+aiq7/n2yN/59sjf+fbI3Mn2yNzKqAgAaqgIAGAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjXugbI17n2yN/59sjf+d + eZv/nXmb/4/D6v+Pw+r/jsjv/47I7/+OyO//jsjv/47I7/+OyO//kMDm/5DA5v+deZv/nXmb/59sjf+f + bI3/4r+j/+K/o///46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///qyP//6sj//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os/9auo//W + rqP/oWyY/6FsmP+feaX/n3ml/4/B6P+Pwej/jsjv/47I7/+OyO//jsjv/47I7/+OyO//j8Lp/4/C6f+d + eZr/nXma/59sjf+fbI3/nmuNeZ5rjXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAoGyNe6BsjXufbI3/n2yN/515m/+deZv/j8Pq/4/D6v+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+QwOb/kMDm/515m/+deZv/n2yN/59sjf/iv6P/4r+j///jrP//46z//+rI///qyP// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///qyP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z/1q6j/9auo/+hbJj/oWyY/595pf+feaX/j8Ho/4/B6P+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+Pwun/j8Lp/515mv+deZr/n2yN/59sjf+ea415nmuNeQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAom+RHqJvkR6fbI71n2yO9Z9sjf+f + bI3/krDV/5Kw1f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OxOz/jsTs/5yAov+cgKL/n2yN/59sjf+0 + iJr/tIia//zfq//836v//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/7 + 3qz/+96s/7WFnP+1hZz/oWyY/6FsmP+df6v/nX+r/47G7P+Oxuz/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//krLX/5Ky1/+fbY3/n22N/6BtjfagbY32n3CPIJ9wjyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACib5Eeom+RHp9sjvWfbI71n2yN/59sjf+SsNX/krDV/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47E7P+OxOz/nICi/5yAov+fbI3/n2yN/7SImv+0iJr//N+r//zfq///46z//+Os///jrP// + 46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os//verP/73qz/tYWc/7WFnP+hbJj/oWyY/51/q/+d + f6v/jsbs/47G7P+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Sstf/krLX/59tjf+fbY3/oG2N9qBtjfaf + cI8gn3CPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjaifbI2on2yN/59sjf+Z + jbD/mY2w/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//mJK0/5iStP+fbI3/n2yN/62Amv+t + gJr/9+fc//fn3P//68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP/9+bb//fm2//Yu8D/2LvA//fm2//35tv///Lj///y4///8uP///Lj///rx///68f//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP/32Kr/99iq/658m/+ufJv/oWyY/6FsmP+Zk73/mZO9/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//mYyu/5mMrv+fbI3/n2yN/59rjaSfa42kAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn2yNqJ9sjaifbI3/n2yN/5mNsP+ZjbD/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+YkrT/mJK0/59sjf+fbI3/rYCa/62Amv/359z/9+fc///rx///68f//+Os///jrP// + 46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//35tv/9+bb/9i7wP/Yu8D/9+bb//fm2/// + 8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//fYqv/32Kr/rnyb/658m/+h + bJj/oWyY/5mTvf+Zk73/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+ZjK7/mYyu/59sjf+f + bI3/n2uNpJ9rjaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ51vkCeebY39nm2N/Z9vkP+f + b5D/kL7l/5C+5f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Tr9T/k6/U/59tjf+fbY3/onCQ/6JwkP/t + 2NP/7djT///y4///8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//u + 2tT/7trU/6t8l/+rfJf/n2yN/59sjf+pe5b/qXuW/+zY0v/s2NL///Lj///y4///8uP///Lj///qyP// + 6sj//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP/tzKj/7cyo/6Rvmf+kb5n/oW2Y/6FtmP+Trtb/k67W/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5C95P+QveT/nm6Q/55ukP+ebY39nm2N/ZxqjiScao4kAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACdb5AnnW+QJ55tjf2ebY39n2+Q/59vkP+QvuX/kL7l/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5Ov1P+Tr9T/n22N/59tjf+icJD/onCQ/+3Y0//t2NP///Lj///y4///8uP///Lj///qyP// + 6sj//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+7a1P/u2tT/q3yX/6t8l/+fbI3/n2yN/6l7lv+p + e5b/7NjS/+zY0v//8uP///Lj///y4///8uP//+rI///qyP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os/+3MqP/t + zKj/pG+Z/6Rvmf+hbZj/oW2Y/5Ou1v+Trtb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//kL3k/5C95P+e + bpD/nm6Q/55tjf2ebY39nGqOJJxqjiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjJ6gbIyen2yN/59sjf+Y + kbX/mJG1/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47G7P+Oxuz/nXeZ/513mf+fbI3/n2yN/9a5vv/W + ub7///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+HIyf/h + yMn/pHKR/6Rykf+fbI3/n2yN/6Bxi/+gcYv/n2yN/59sjf+kcpD/pHKQ/+HIyf/hyMn///Lj///y4/// + 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/VrqP/1a6j/6FsmP+hbJj/nnql/556pf+P + xu3/j8bt/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5mQtP+ZkLT/n2yN/59sjf+fbI2cn2yNnAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAoGyMnqBsjJ6fbI3/n2yN/5iRtf+YkbX/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsbs/47G7P+dd5n/nXeZ/59sjf+fbI3/1rm+/9a5vv//8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP/4cjJ/+HIyf+kcpH/pHKR/59sjf+fbI3/oHGL/6Bxi/+f + bI3/n2yN/6RykP+kcpD/4cjJ/+HIyf//8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os/9Wuo//VrqP/oWyY/6FsmP+eeqX/nnql/4/G7f+Pxu3/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//mZC0/5mQtP+fbI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApG2SDqRtkg6gbY32oG2N9p9tjv+f + bY7/kbzh/5G84f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Vn8P/lZ/D/59sjf+fbI3/sICT/7CAk//9 + 6Mf//ejH///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/1bi9/9W4vf+g + bY7/oG2O/59sjf+fbI3/pI2D/6SNg/+uxHP/rsRz/6WPg/+lj4P/n2yN/59sjf+fbY3/n22N/8+vuP/P + r7j///Hj///x4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//uGr//7hq/+xgJv/sYCb/6FsmP+h + bJj/lqDJ/5agyf+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Qu+H/kLvh/59tjf+fbY3/nmyO9Z5sjvWV + apUMlWqVDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACkbZIOpG2SDqBtjfagbY32n22O/59tjv+RvOH/kbzh/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5Wfw/+Vn8P/n2yN/59sjf+wgJP/sICT//3ox//96Mf///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP// + 8uP///Lj///y4///8uP///Lj///y4//VuL3/1bi9/6Btjv+gbY7/n2yN/59sjf+kjYP/pI2D/67Ec/+u + xHP/pY+D/6WPg/+fbI3/n2yN/59tjf+fbY3/z6+4/8+vuP//8eP///Hj///y4///8uP//+vH///rx/// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP/+4av//uGr/7GAm/+xgJv/oWyY/6FsmP+WoMn/lqDJ/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5C74f+Qu+H/n22N/59tjf+ebI71nmyO9ZVqlQyVapUMAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9tjWKfbY1in2yN/59sjf+a + g6b/moOm/47I7/+OyO//jsjv/47I7/+OyO//jsjv/4/F6/+Pxev/nnOV/55zlf+fbI3/n2yN/+XDpP/l + w6T//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj//O7h//zu4f/Dnq3/w56t/59sjf+f + bI3/n22M/59tjP+nm4D/p5uA/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6ihff+ooX3/n22N/59tjf+f + bI3/n2yN/8Cbqv/Am6r//O3g//zt4P//8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z/48Cm/+PApv+h + bJj/oWyY/593ov+fd6L/jsbt/47G7f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+bgqT/m4Kk/59sjf+f + bI3/oG2NXqBtjV4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn22NYp9tjWKfbI3/n2yN/5qDpv+ag6b/jsjv/47I7/+OyO//jsjv/47I7/+O + yO//j8Xr/4/F6/+ec5X/nnOV/59sjf+fbI3/5cOk/+XDpP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP// + 46z//+rI///qyP/87uH//O7h/8Oerf/Dnq3/n2yN/59sjf+fbYz/n22M/6ebgP+nm4D/r8py/6/Kcv+v + ynL/r8py/6/Kcv+vynL/qKF9/6ihff+fbY3/n22N/59sjf+fbI3/wJuq/8Cbqv/87eD//O3g///y4/// + 8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP/jwKb/48Cm/6FsmP+hbJj/n3ei/593ov+Oxu3/jsbt/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5uCpP+bgqT/n2yN/59sjf+gbY1eoG2NXgAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI26n2yNup9sjf+f + bI3/lKXK/5Slyv+OyO//jsjv/47I7/+OyO//jsjv/47I7/+UqMz/lKjM/59sjf+fbI3/sYOY/7GDmP// + 4qz//+Ks///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP/32ar/99mq/7aLnP+2i5z/n2yN/59sjf+g + cYz/oHGM/6qtev+qrXr/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6uvef+r + r3n/oHGL/6Bxi/+fbI3/n2yN/7SJoP+0iaD/9uXb//bl2///8uP///Lj///qyP//6sj//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///irP// + 4qz/soKc/7KCnP+hbJj/oWyY/5So0f+UqNH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//lKTI/5SkyP+f + bI3/n2yN/55sjraebI62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ9sjbqfbI26n2yN/59sjf+Upcr/lKXK/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5SozP+UqMz/n2yN/59sjf+xg5j/sYOY///irP//4qz//+Os///jrP//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///qyP//6sj//+Os///jrP// + 46z//+Os//fZqv/32ar/touc/7aLnP+fbI3/n2yN/6BxjP+gcYz/qq16/6qtev+vynL/r8py/6/Kcv+v + ynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/q695/6uvef+gcYv/oHGL/59sjf+fbI3/tImg/7SJoP/2 + 5dv/9uXb///y4///8uP//+rI///qyP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Ks///irP+ygpz/soKc/6FsmP+hbJj/lKjR/5So0f+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+UpMj/lKTI/59sjf+fbI3/nmyOtp5sjrYAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgeSbZIHn2yN9p9sjfaf + bY3/n22N/4/A5/+PwOf/jsjv/47I7/+OyO//jsjv/47I7/+OyO//m4Sn/5uEp/+fbI3/n2yN/9q+wv/a + vsL//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///68f//+vH/+7Op//uzqf/q3qQ/6t6kP+fbI3/n2yN/6F2iv+h + dor/rLh3/6y4d/+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+v + ynL/r8py/6y5d/+suXf/oXeJ/6F3if+fbI3/n2yN/6l7lv+pe5b/7NjS/+zY0v//8uP///Lj///rx/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os/9mzpP/Zs6T/oWyY/6FsmP+ch7H/nIex/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5DA5v+Q + wOb/n22N/59tjf+fbI31n2yN9ZJtkgeSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAkm2SB5JtkgefbI32n2yN9p9tjf+fbY3/j8Dn/4/A5/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+bhKf/m4Sn/59sjf+fbI3/2r7C/9q+wv//68f//+vH///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx/// + 68f/7s6n/+7Op/+repD/q3qQ/59sjf+fbI3/oXaK/6F2iv+suHf/rLh3/6/Kcv+vynL/r8py/6/Kcv+v + ynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/rLl3/6y5d/+hd4n/oXeJ/59sjf+f + bI3/qXuW/6l7lv/s2NL/7NjS///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z/2bOk/9mzpP+hbJj/oWyY/5yHsf+c + h7H/jsjv/47I7/+OyO//jsjv/47I7/+OyO//kMDm/5DA5v+fbY3/n22N/59sjfWfbI31km2SB5JtkgcA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbItAn2yLQJ9sjf+f + bI3/nH6f/5x+n/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Pwun/j8Lp/59tjv+fbY7/onCP/6Jwj//5 + 6t7/+ere///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP/4cjJ/+HIyf+kco//pHKP/59sjf+fbI3/o4GH/6OBh/+t + wnX/rcJ1/6/Kcv+vynL/r8py/6/Kcv+twHX/rcB1/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/63AdP+t + wHT/r8py/6/Kcv+vynL/r8py/63Cdf+twnX/o4GH/6OBh/+fbI3/n2yN/6RykP+kcpD/4cjJ/+HIyf// + 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP/42av/+Nmr/6NumP+jbpj/oW6a/6Fumv+Pwur/j8Lq/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5x8nv+cfJ7/n2yN/59sjf+fbY49n22OPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ9si0CfbItAn2yN/59sjf+cfp//nH6f/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/4/C6f+Pwun/n22O/59tjv+icI//onCP//nq3v/56t7///Lj///y4///68f//+vH///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//h + yMn/4cjJ/6Ryj/+kco//n2yN/59sjf+jgYf/o4GH/63Cdf+twnX/r8py/6/Kcv+vynL/r8py/63Adf+t + wHX/r8py/6/Kcv+vynL/r8py/6/Kcv+vynL/rcB0/63AdP+vynL/r8py/6/Kcv+vynL/rcJ1/63Cdf+j + gYf/o4GH/59sjf+fbI3/pHKQ/6RykP/hyMn/4cjJ///y4///8uP//+vH///rx///46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//jZq//42av/o26Y/6NumP+h + bpr/oW6a/4/C6v+Pwur/jsjv/47I7/+OyO//jsjv/47I7/+OyO//nHye/5x8nv+fbI3/n2yN/59tjj2f + bY49AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2uNd59rjXef + bI3/n2yN/5eTt/+Xk7f/jsjv/47I7/+OyO//jsjv/47I7/+OyO//k6vP/5Orz/+fbI3/n2yN/7mQpP+5 + kKT///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP// + 6sj//+rI///y4///8uP///Lj///y4//Ss7r/0rO6/6Btjv+gbY7/n2yN/59sjf+lj4T/pY+E/67Hc/+u + x3P/r8py/6/Kcv+vyHP/r8hz/6aQgv+mkIL/n2yN/59sjf+qqXv/qql7/6/Kcv+vynL/qaZ8/6mmfP+f + bI3/n2yN/6WPgv+lj4L/r8hy/6/Icv+vynL/r8py/67Hc/+ux3P/pY+E/6WPhP+fbI3/n2yN/6Btjv+g + bY7/0rO6/9Kzuv//8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP+3iJ3/t4id/6FsmP+hbJj/k63W/5Ot1v+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+Yk7b/mJO2/59sjf+fbI3/n22OdZ9tjnUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfa413n2uNd59sjf+fbI3/l5O3/5eTt/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+Tq8//k6vP/59sjf+fbI3/uZCk/7mQpP//8uP///Lj///y4///8uP///Lj///y4/// + 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj/9Kzuv/S + s7r/oG2O/6Btjv+fbI3/n2yN/6WPhP+lj4T/rsdz/67Hc/+vynL/r8py/6/Ic/+vyHP/ppCC/6aQgv+f + bI3/n2yN/6qpe/+qqXv/r8py/6/Kcv+ppnz/qaZ8/59sjf+fbI3/pY+C/6WPgv+vyHL/r8hy/6/Kcv+v + ynL/rsdz/67Hc/+lj4T/pY+E/59sjf+fbI3/oG2O/6Btjv/Ss7r/0rO6///y4///8uP//+vH///rx/// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os/7eInf+3 + iJ3/oWyY/6FsmP+Trdb/k63W/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5iTtv+Yk7b/n2yN/59sjf+f + bY51n22OdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rjZ+f + a42fn2yN/59sjf+Vo8f/laPH/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5eTt/+Xk7f/n2yN/59sjf/Q + rKv/0Kyr///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP// + 46z//+Os///jrP/858f//OfH/8Oerf/Dnq3/n2yN/59sjf+fbYz/n22M/6ebgP+nm4D/r8lz/6/Jc/+v + ynL/r8py/67Gc/+uxnP/o4eG/6OHhv+fbI3/n2yN/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+n + m4D/n2yN/59sjf+fbI3/n2yN/6OEh/+jhIf/rsR0/67EdP+vynL/r8py/6/Kcv+vynL/qKF9/6ihff+f + bY3/n22N/59sjf+fbI3/wJuq/8Cbqv/87eD//O3g///rx///68f//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z/z6ah/8+mof+hbJj/oWyY/5iXwf+Yl8H/jsjv/47I7/+O + yO//jsjv/47I7/+OyO//laLH/5Wix/+fbI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2uNn59rjZ+fbI3/n2yN/5Wjx/+Vo8f/jsjv/47I7/+O + yO//jsjv/47I7/+OyO//l5O3/5eTt/+fbI3/n2yN/9Csq//QrKv///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os//znx//858f/w56t/8Oerf+f + bI3/n2yN/59tjP+fbYz/p5uA/6ebgP+vyXP/r8lz/6/Kcv+vynL/rsZz/67Gc/+jh4b/o4eG/59sjf+f + bI3/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/59sjf+fbI3/o4SH/6OEh/+u + xHT/rsR0/6/Kcv+vynL/r8py/6/Kcv+ooX3/qKF9/59tjf+fbY3/n2yN/59sjf/Am6r/wJuq//zt4P/8 + 7eD//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/P + pqH/z6ah/6FsmP+hbJj/mJfB/5iXwf+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Vosf/laLH/59sjf+f + bI3/n2yNnJ9sjZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe + bIzGnmyMxp9sjf+fbI3/krLX/5Ky1/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+ahaj/moWo/59sjf+f + bI3/48Ci/+PAov//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx/// + 46z//+Os//jaqv/42qr/tYeU/7WHlP+fbI3/n2yN/6BxjP+gcYz/qq16/6qtev+vynL/r8py/6/Kcv+v + ynL/rb51/62+df+ifIj/onyI/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+n + m4D/p5uA/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/6J7if+ie4n/rb92/62/dv+vynL/r8py/6/Kcv+v + ynL/qq16/6qtev+gcYz/oHGM/59sjf+fbI3/tYqh/7WKof/46N3/+Ojd///rx///68f//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os/+G9pf/hvaX/oWyY/6FsmP+bh7L/m4ey/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5Kw1f+SsNX/n2yN/59sjf+gbY3DoG2NwwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5sjMaebIzGn2yN/59sjf+Sstf/krLX/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5qFqP+ahaj/n2yN/59sjf/jwKL/48Ci///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z/+Nqq//jaqv+1h5T/tYeU/59sjf+f + bI3/oHGM/6BxjP+qrXr/qq16/6/Kcv+vynL/r8py/6/Kcv+tvnX/rb51/6J8iP+ifIj/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/onuJ/6J7if+tv3b/rb92/6/Kcv+vynL/r8py/6/Kcv+qrXr/qq16/6BxjP+gcYz/n2yN/59sjf+1 + iqH/tYqh//jo3f/46N3//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z/4b2l/+G9pf+hbJj/oWyY/5uHsv+bh7L/jsjv/47I7/+OyO//jsjv/47I7/+OyO//krDV/5Kw1f+f + bI3/n2yN/6BtjcOgbY3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAn2yN4J9sjeCfbI3/n2yN/5C94/+QveP/jsjv/47I7/+OyO//jsjv/47I7/+OyO//nXma/515mv+f + bI3/n2yN//HRp//x0af//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP//+vH///rx//Sq53/0qud/59sjf+fbI3/oXeK/6F3iv+suXf/rLl3/6/Kcv+vynL/r8py/6/Kcv+s + uHf/rLh3/6B1iv+gdYr/n2yN/59sjf+wgpf/sIKX/8SZmP/EmZj/n2yN/59sjf+nm4D/p5uA/6/Kcv+v + ynL/p5uA/6ebgP+fbI3/n2yN/8Sfrf/En63/sIOc/7CDnP+fbI3/n2yN/6F1i/+hdYv/q7d4/6u3eP+v + ynL/r8py/6/Kcv+vynL/rLl3/6y5d/+hd4r/oXeK/59sjf+fbI3/0rO6/9Kzuv//8uP///Lj///rx/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/vz6j/78+o/6FsmP+hbJj/nnum/557pv+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+Qu+L/kLvi/59sjf+fbI3/n2yN3p9sjd4AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI3gn2yN4J9sjf+fbI3/kL3j/5C94/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+deZr/nXma/59sjf+fbI3/8dGn//HRp///46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH/9Krnf/Sq53/n2yN/59sjf+h + d4r/oXeK/6y5d/+suXf/r8py/6/Kcv+vynL/r8py/6y4d/+suHf/oHWK/6B1iv+fbI3/n2yN/7CCl/+w + gpf/xJmY/8SZmP+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/xJ+t/8Sfrf+w + g5z/sIOc/59sjf+fbI3/oXWL/6F1i/+rt3j/q7d4/6/Kcv+vynL/r8py/6/Kcv+suXf/rLl3/6F3iv+h + d4r/n2yN/59sjf/Ss7r/0rO6///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os/+/PqP/vz6j/oWyY/6FsmP+ee6b/nnum/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5C74v+Q + u+L/n2yN/59sjf+fbI3en2yN3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJ9sje2fbI3tn2yN/59sjf+Px+v/j8fr/47I7/+OyO//jsjv/47I7/+OyO//jsjv/55vkP+e + b5D/n2yN/59sjf/53Kr/+dyq///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP/z6uq/8+rqv+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+vynL/r8py/6qwef+q + sHn/oHGL/6Bxi/+fbI3/n2yN/7iQpP+4kKT/+ere//nq3v/Pq6r/z6uq/59sjf+fbI3/p5uA/6ebgP+v + ynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4//rs3v/67N7/upKm/7qSpv+fbI3/n2yN/6BwjP+g + cIz/qq16/6qtev+vynL/r8py/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/Pr7j///Lj///y4/// + 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z/+Nqq//jaqv+hbJj/oWyY/6Bzn/+g + c5//jsjv/47I7/+OyO//jsjv/47I7/+OyO//j8fq/4/H6v+fbI3/n2yN/6BtjeugbY3rAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yN7Z9sje2fbI3/n2yN/4/H6/+P + x+v/jsjv/47I7/+OyO//jsjv/47I7/+OyO//nm+Q/55vkP+fbI3/n2yN//ncqv/53Kr//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//Pq6r/z6uq/59sjf+f + bI3/p5uA/6ebgP+vynL/r8py/6/Kcv+vynL/qrB5/6qwef+gcYv/oHGL/59sjf+fbI3/uJCk/7iQpP/5 + 6t7/+ere/8+rqv/Pq6r/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/P + r7j/+uze//rs3v+6kqb/upKm/59sjf+fbI3/oHCM/6BwjP+qrXr/qq16/6/Kcv+vynL/r8py/6/Kcv+n + m4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP// + 46z//+Os///jrP/42qr/+Nqq/6FsmP+hbJj/oHOf/6Bzn/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+P + x+r/j8fq/59sjf+fbI3/oG2N66BtjesAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACfbI35n2yN+Z9sjf+fbI3/kNr1/5Da9f+P0fP/j9Hz/47K8P+OyvD/jsjv/47I7/+f + bY7/n22O/59sjf+fbI3//uGs//7hrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4/// + 8uP///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/qKV8/6ilfP+g + bY3/oG2N/59sjf+fbI3/w56t/8Oerf/97+L//e/i///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6ebgP+n + m4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj//3w4f/98OH/xqKw/8aisP+f + bI3/n2yN/59tjP+fbYz/qKJ9/6iiff+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4///y4/// + 8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os//zgq//84Kv/oWyY/6FsmP+g + b5v/oG+b/47I7/+OyO//jsrw/47K8P+P0vT/j9L0/4/a9v+P2vb/n2yN/59sjf+fbI34n2yN+AAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjfmfbI35n2yN/59sjf+Q + 2vX/kNr1/4/R8/+P0fP/jsrw/47K8P+OyO//jsjv/59tjv+fbY7/n2yN/59sjf/+4az//uGs///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/z6+4/8+vuP+f + bI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+opXz/qKV8/6Btjf+gbY3/n2yN/59sjf/Dnq3/w56t//3v4v/9 + 7+L///Lj///y4//Pr7j/z6+4/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/P + r7j/z6+4///y4///8uP//fDh//3w4f/GorD/xqKw/59sjf+fbI3/n22M/59tjP+oon3/qKJ9/6/Kcv+v + ynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///y4///8uP//+vH///rx/// + 46z//+Os///jrP//46z//OCr//zgq/+hbJj/oWyY/6Bvm/+gb5v/jsjv/47I7/+OyvD/jsrw/4/S9P+P + 0vT/j9r2/4/a9v+fbI3/n2yN/59sjfifbI34AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn2yN+Z9sjfmfbI3/n2yN/5Db9v+Q2/b/j935/4/d+f+P3fn/j935/4/c+P+P + 3Pj/n2yN/59sjf+fbI3/n2yN//3hq//94av//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 6sj//+rI///y4///8uP///Lj///y4//Pr7j/z6+4/59sjf+fbI3/ppt//6abf/+nm4D/p5uA/59sjf+f + bI3/n22N/59tjf/Pq6v/z6ur///x4///8eP///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+n + m4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+rq//Pq6v///Lj///y4///8uP///Lj///y4/// + 8uP/1bi9/9W4vf+fbY3/n22N/59sjf+fbI3/pZSB/6WUgf+nmoD/p5qA/59sjf+fbI3/z6+4/8+vuP// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP/94az//eGs/6FsmP+h + bJj/oHCb/6Bwm/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P2vb/j9r2/59sjf+fbI3/n2yN+J9sjfgA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI35n2yN+Z9sjf+f + bI3/kNv2/5Db9v+P3fn/j935/4/d+f+P3fn/j9z4/4/c+P+fbI3/n2yN/59sjf+fbI3//eGr//3hq/// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj/8+vuP/P + r7j/n2yN/59sjf+mm3//ppt//6ebgP+nm4D/n2yN/59sjf+fbY3/n22N/8+rq//Pq6v///Hj///x4/// + 8uP///Lj///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+f + bI3/z6ur/8+rq///8uP///Lj///y4///8uP///Lj///y4//VuL3/1bi9/59tjf+fbY3/n2yN/59sjf+l + lIH/pZSB/6eagP+nmoD/n2yN/59sjf/Pr7j/z6+4///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP//+vH///rx///46z//+Os//3hrP/94az/oWyY/6FsmP+gcJv/oHCb/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/a9v+P2vb/n2yN/59sjf+fbI34n2yN+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ9sje2fbI3tn2yN/59sjf+Q1fH/kNXx/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/55wkf+ecJH/n2yN/59sjf/63av/+t2r///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//6sj//+rI///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6Bxi/+gcYv/n2yN/59sjf+i + b47/om+O/925of/duaH//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4//Pr7j/z6+4/59sjf+f + bI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pp53/z6ed///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP/3MHD/9zBw/+hb4//oW+P/59sjf+fbI3/oHGL/6Bxi/+fbI3/n2yN/8+vuP/P + r7j///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f/+Nqq//jaqv+h + bJj/oWyY/6B1oP+gdaD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNTw/5DU8P+fbI3/n2yN/6Btjeug + bY3rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yN7Z9sje2f + bI3/n2yN/5DV8f+Q1fH/j935/4/d+f+P3fn/j935/4/d+f+P3fn/nnCR/55wkf+fbI3/n2yN//rdq//6 + 3av//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4//P + r7j/z6+4/59sjf+fbI3/oHGL/6Bxi/+fbI3/n2yN/6Jvjv+ib47/3bmh/925of//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+f + bI3/n2yN/8+nnf/Pp53//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4//cwcP/3MHD/6Fvj/+h + b4//n2yN/59sjf+gcYv/oHGL/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP//+vH///rx//42qr/+Nqq/6FsmP+hbJj/oHWg/6B1oP+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+Q1PD/kNTw/59sjf+fbI3/oG2N66BtjesAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI3gn2yN4J9sjf+fbI3/kc/s/5HP7P+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+de5z/nXuc/59sjf+fbI3/8dGn//HRp///46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI/8+vuP/Pr7j/n2yN/59sjf+fbI3/n2yN/6V1k/+l + dZP/58u4/+fLuP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP/z6+4/8+vuP+f + bI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6ed/8+nnf//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP/6dPP/+nTz/+nd5T/p3eU/59sjf+fbI3/n2yN/59sjf/P + r7j/z6+4///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+/Vv//v + 1b//oWyY/6FsmP+efqf/nn6n/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HO6/+Rzuv/n2yN/59sjf+f + bI3en2yN3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjeCf + bI3gn2yN/59sjf+Rz+z/kc/s/4/d+f+P3fn/j935/4/d+f+P3fn/j935/517nP+de5z/n2yN/59sjf/x + 0af/8dGn///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj/z6+4/8+vuP+fbI3/n2yN/59sjf+fbI3/pXWT/6V1k//ny7j/58u4///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4//Pr7j/z6+4/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+n + m4D/n2yN/59sjf/Pp53/z6ed///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4//p + 08//6dPP/6d3lP+nd5T/n2yN/59sjf+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP/79W//+/Vv/+hbJj/oWyY/55+p/+efqf/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/kc7r/5HO6/+fbI3/n2yN/59sjd6fbI3eAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmyMxp5sjMafbI3/n2yN/5PB3v+Twd7/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/m4io/5uIqP+fbI3/n2yN/+PAov/jwKL//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/Tsa3/07Gt/59sjf+fbI3/rH6Y/6x+mP/w + 3dX/8N3V///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI/8+vuP/P + r7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+nnf/Pp53//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/79zV/+/c1f+rfJf/q3yX/59sjf+f + bI3/0bK6/9Gyuv//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//i + yMz/4sjM/6FsmP+hbJj/m461/5uOtf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+TwN3/k8Dd/59sjf+f + bI3/oG2Nw6BtjcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe + bIzGnmyMxp9sjf+fbI3/k8He/5PB3v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+biKj/m4io/59sjf+f + bI3/48Ci/+PAov//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os/9Oxrf/Tsa3/n2yN/59sjf+sfpj/rH6Y//Dd1f/w3dX///Lj///y4///68f//+vH///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj/z6+4/8+vuP+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+n + m4D/p5uA/59sjf+fbI3/z6ed/8+nnf//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4/// + 8uP///Lj///y4//v3NX/79zV/6t8l/+rfJf/n2yN/59sjf/Rsrr/0bK6///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj/+LIzP/iyMz/oWyY/6FsmP+bjrX/m461/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/5PA3f+TwN3/n2yN/59sjf+gbY3DoG2NwwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rjZ+fa42fn2yN/59sjf+VsM7/lbDO/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/5icu/+YnLv/n2yN/59sjf/Qqp3/0Kqd///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z/+Nuq//jbqv/Usq3/1LKt//fn3P/3 + 59z///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP/P + q6v/z6ur/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pq6r/z6uq///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/9+bb//fm2//V + uL3/1bi9//jo3f/46N3///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP/z6+9/8+vvf+hbJj/oWyY/5igxf+YoMX/j935/4/d+f+P3fn/j935/4/d+f+P3fn/lq/N/5avzf+f + bI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAn2uNn59rjZ+fbI3/n2yN/5Wwzv+VsM7/j935/4/d+f+P3fn/j935/4/d+f+P3fn/mJy7/5icu/+f + bI3/n2yN/9Cqnf/Qqp3//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP/426r/+Nuq/9Syrf/Usq3/9+fc//fn3P//8uP///Lj///y4///8uP///Lj///y4/// + 68f//+vH///jrP//46z//+Os///jrP//46z//+Os/8+rq//Pq6v/n2yN/59sjf+nm4D/p5uA/6/Kcv+v + ynL/p5uA/6ebgP+fbI3/n2yN/8+rqv/Pq6r//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP// + 8uP///Lj///y4///8uP///Lj///y4//35tv/9+bb/9W4vf/VuL3/+Ojd//jo3f//8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//Pr73/z6+9/6FsmP+hbJj/mKDF/5igxf+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+Wr83/lq/N/59sjf+fbI3/n2yNnJ9sjZwAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbIx4n2yMeJ9sjf+fbI3/mJy7/5icu/+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+UtNL/lLTS/59sjf+fbI3/uYyW/7mMlv//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP// + 46z/z6ed/8+nnf+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP// + 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj/7iNqv+4jar/oWyY/6FsmP+Uu9z/lLvc/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5mcuv+Z + nLr/n2yN/59sjf+gbIx2oGyMdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJ9sjHifbIx4n2yN/59sjf+YnLv/mJy7/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5S00v+U + tNL/n2yN/59sjf+5jJb/uYyW///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP/Pp53/z6ed/59sjf+fbI3/p5uA/6ebgP+v + ynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4///rx///68f//+Os///jrP//46z//+Os///jrP// + 46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/uI2q/7iNqv+hbJj/oWyY/5S73P+U + u9z/j935/4/d+f+P3fn/j935/4/d+f+P3fn/mZy6/5mcuv+fbI3/n2yN/6BsjHagbIx2AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoW6NQaFujUGfbI3/n2yN/5yCof+c + gqH/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kdLv/5HS7/+fbY7/n22O/6Jvjv+ib47/+dyq//ncqv// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx/// + 46z//+Os/8+nnf/Pp53/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/P + r7j///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP/+Ojd//jo3f+jb5n/o2+Z/6Fumv+hbpr/kNbz/5DW8/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+c + gKD/nICg/59sjf+fbI3/n22OPZ9tjj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAChbo1BoW6NQZ9sjf+fbI3/nIKh/5yCof+P3fn/j935/4/d+f+P3fn/j935/4/d+f+R + 0u//kdLv/59tjv+fbY7/om+O/6Jvjv/53Kr/+dyq///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z/z6ed/8+nnf+fbI3/n2yN/6ebgP+n + m4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///rx///68f//+Os///jrP// + 46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//46N3/+Ojd/6Nvmf+jb5n/oW6a/6Fumv+Q + 1vP/kNbz/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5yAoP+cgKD/n2yN/59sjf+fbY49n22OPQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgeSbZIHn2yN9p9sjfaf + bY3/n22N/5DU8P+Q1PD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/m4am/5uGpv+fbI3/n2yN/9q2oP/a + tqD//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP//+vH///rx//Pp53/z6ed/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/P + r7j/z6+4///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj/9m8xP/ZvMT/oWyY/6FsmP+cjLP/nIyz/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HT8P+R + 0/D/n22N/59tjf+fbI31n2yN9ZJtkgeSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAkm2SB5JtkgefbI32n2yN9p9tjf+fbY3/kNTw/5DU8P+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+bhqb/m4am/59sjf+fbI3/2rag/9q2oP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH/8+nnf/Pp53/n2yN/59sjf+n + m4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///rx/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/2bzE/9m8xP+hbJj/oWyY/5yMs/+c + jLP/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kdPw/5HT8P+fbY3/n22N/59sjfWfbI31km2SB5JtkgcA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjLug + bIy7n2yN/59sjf+Vs9D/lbPQ/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5WuzP+Vrsz/n2yN/59sjf+y + g5P/soOT///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP/z6uq/8+rqv+fbI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+f + bI3/z6+4/8+vuP//8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Hj///x4/+yhab/soWm/6FsmP+hbJj/lbXW/5W11v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+V + sc//lbHP/59sjf+fbI3/n22Nt59tjbcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyMu6BsjLufbI3/n2yN/5Wz0P+Vs9D/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/la7M/5WuzP+fbI3/n2yN/7KDk/+yg5P//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//Pq6r/z6uq/59sjf+f + bI3/p5uA/6ebgP+vynL/r8py/6ebgP+nm4D/n2yN/59sjf/Pr7j/z6+4///y4///8uP///Lj///y4/// + 8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8eP///Hj/7KFpv+yhab/oWyY/6FsmP+V + tdb/lbXW/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5Wxz/+Vsc//n2yN/59sjf+fbY23n22NtwAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg + bI5joGyOY59sjf+fbI3/m4mp/5uJqf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Q2PT/kNj0/550lf+e + dJX/n2yN/59sjf/lw6P/5cOj///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4/// + 8uP///Lj///y4///8uP///Lj/8+vuP/Pr7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+f + bI3/n2yN/8+vuP/Pr7j///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj/+TMzv/kzM7/oWyY/6FsmP+feKL/n3ii/5Db9/+Q2/f/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/m4io/5uIqP+fbI3/n2yN/55rjl+ea45fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjmOgbI5jn2yN/59sjf+bian/m4mp/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/5DY9P+Q2PT/nnSV/550lf+fbI3/n2yN/+XDo//lw6P//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/z6+4/8+vuP+f + bI3/n2yN/6ebgP+nm4D/r8py/6/Kcv+nm4D/p5uA/59sjf+fbI3/z6+4/8+vuP//8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/5MzO/+TMzv+hbJj/oWyY/594ov+f + eKL/kNv3/5Db9/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+biKj/m4io/59sjf+fbI3/nmuOX55rjl8A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAApG2SDqRtkg6fbI31n2yN9Z9tjv+fbY7/kc7r/5HO6/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+X + o8L/l6PC/59sjf+fbI3/sYOS/7GDkv/+4az//uGs///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 6sj//+rI///y4///8uP///Lj///y4//Pr7j/z6+4/59sjf+fbI3/p5uA/6ebgP+vynL/r8py/6ebgP+n + m4D/n2yN/59sjf/Pq6v/z6ur///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4/// + 8uP//vDh//7w4f+yhKX/soSl/6FsmP+hbJj/l6rO/5eqzv+P3fn/j935/4/d+f+P3fn/j935/4/d+f+R + zer/kc3q/59tjf+fbY3/nmuN9Z5rjfWddokNnXaJDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkbZIOpG2SDp9sjfWfbI31n22O/59tjv+R + zuv/kc7r/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5ejwv+Xo8L/n2yN/59sjf+xg5L/sYOS//7hrP/+ + 4az//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj/8+vuP/P + r7j/n2yN/59sjf+nm4D/p5uA/6/Kcv+vynL/p5uA/6ebgP+fbI3/n2yN/8+rq//Pq6v///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP//46z//+Os///jrP// + 46z//+rI///qyP//8uP///Lj///y4///8uP///Lj///y4//+8OH//vDh/7KEpf+yhKX/oWyY/6FsmP+X + qs7/l6rO/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HN6v+Rzer/n22N/59tjf+ea431nmuN9Z12iQ2d + dokNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAoGyMnqBsjJ6fbI3/n2yN/5iauf+Ymrn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j9j0/4/Y9P+dd5f/nXeX/59sjf+fbI3/1rCe/9awnv//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//6sj//+rI///y4///8uP/z6+4/8+vuP+fbI3/n2yN/6KChv+igob/p5iA/6eYgP+i + gob/ooKG/59sjf+fbI3/z6ed/8+nnf//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj/9W3wf/Vt8H/oWyY/6FsmP+efKb/nnym/4/a9v+P2vb/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/mZm4/5mZuP+fbI3/n2yN/59sjZyfbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgbIyeoGyMnp9sjf+f + bI3/mJq5/5iauf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P2PT/j9j0/513l/+dd5f/n2yN/59sjf/W + sJ7/1rCe///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4//P + r7j/z6+4/59sjf+fbI3/ooKG/6KChv+nmID/p5iA/6KChv+igob/n2yN/59sjf/Pp53/z6ed///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx///68f//+Os///jrP// + 46z//+Os///jrP//46z//+rI///qyP//8uP///Lj///y4///8uP/1bfB/9W3wf+hbJj/oWyY/558pv+e + fKb/j9r2/4/a9v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Zmbj/mZm4/59sjf+fbI3/n2yNnJ9sjZwA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ1vkCedb5Ann2yN/Z9sjf2fcJH/n3CR/5DR7v+Q0e7/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/lbXT/5W10/+fbI3/n2yN/6Jwjv+icI7/7s6n/+7Op///46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI/9Gyuv/Rsrr/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/9Krnf/Sq53//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj/7djV/+3Y1f+kcZr/pHGa/6FsmP+hbJj/lLzd/5S83f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Q + 0e3/kNHt/59vkP+fb5D/n2yN/J9sjfyfbooln26KJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ51vkCef + bI39n2yN/Z9wkf+fcJH/kNHu/5DR7v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+VtdP/lbXT/59sjf+f + bI3/onCO/6Jwjv/uzqf/7s6n///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj/0bK6/9Gyuv+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/0qud/9Krnf// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///rx/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+rI///qyP/t2NX/7djV/6Rxmv+kcZr/oWyY/6FsmP+U + vN3/lLzd/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DR7f+Q0e3/n2+Q/59vkP+fbI38n2yN/J9uiiWf + boolAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjKmebYypn2yN/59sjf+ZlbX/mZW1/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/mZOx/5mTsf+fbI3/n2yN/65+kf+ufpH/99mq//fZqv// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/44cT/+OHE/9O1vP/Ttbz/0rO7/9Kzu//S + s7v/0rO7/9Kzu//Ss7v/07Gt/9Oxrf/42qr/+Nqq///jrP//46z//+Os///jrP//6sj//+rI///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP/3 + 2av/99mr/65+n/+ufp//oWyY/6FsmP+ZnMD/mZzA/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/mZS0/5mUtP+fbI3/n2yN/59sjaWfbI2lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnm2MqZ5tjKmfbI3/n2yN/5mVtf+ZlbX/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Z + k7H/mZOx/59sjf+fbI3/rn6R/65+kf/32ar/99mq///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os//jhxP/44cT/07W8/9O1vP/Ss7v/0rO7/9Kzu//Ss7v/0rO7/9Kzu//Tsa3/07Gt//jaqv/4 + 2qr//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///qyP//6sj//+Os///jrP//46z//+Os//fZq//32av/rn6f/65+n/+hbJj/oWyY/5mcwP+Z + nMD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+ZlLT/mZS0/59sjf+fbI3/n2yNpZ9sjaUA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACca4wfnGuMH59sjvWfbI71n22N/59tjf+U + wd7/lMHe/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DW8v+Q1vL/nH+e/5x/nv+fbI3/n2yN/7SGlP+0 + hpT/+t2r//rdq///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP// + 6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH//vdq//7 + 3av/tYWc/7WFnP+hbJj/oWyY/52DrP+dg6z/kNn2/5DZ9v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+T + wd7/k8He/59tjf+fbY3/oG6O+aBujvmibIshomyLIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJxrjB+ca4wfn2yO9Z9sjvWfbY3/n22N/5TB3v+Uwd7/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/kNby/5DW8v+cf57/nH+e/59sjf+fbI3/tIaU/7SGlP/63av/+t2r///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///rx///68f/+92r//vdq/+1hZz/tYWc/6FsmP+hbJj/nYOs/52DrP+Q + 2fb/kNn2/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5PB3v+Twd7/n22N/59tjf+gbo75oG6O+aJsiyGi + bIshAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebY58nm2OfJ9sjf+f + bI3/nH2d/5x9nf+Q2PP/kNjz/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HO6/+Rzuv/nXaW/512lv+f + bI3/n2yN/7OFlP+zhZT/99ip//fYqf//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///qyP//46z//+Os///jrP// + 46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/+Ojd//jo3f+2 + iKL/toii/6FsmP+hbJj/n3ul/597pf+R0vD/kdLw/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DX8/+Q + 1/P/nXyc/518nP+fbI3/n2yN/59tjHqfbYx6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ5tjnyebY58n2yN/59sjf+cfZ3/nH2d/5DY8/+Q2PP/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/kc7r/5HO6/+ddpb/nXaW/59sjf+fbI3/s4WU/7OFlP/32Kn/99ip///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///6sj//+rI///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4//46N3/+Ojd/7aIov+2iKL/oWyY/6FsmP+fe6X/n3ul/5HS8P+R + 0vD/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNfz/5DX8/+dfJz/nXyc/59sjf+fbI3/n22Mep9tjHoA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SB5Jtkgee + bI3OnmyNzp9sjf+fbI3/mpOz/5qTs/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5LK6P+S + yuj/nXeX/513l/+fbI3/n2yN/619kf+tfZH/7s6n/+7Op///46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///rx/// + 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4//04tn/9OLZ/65+ov+u + fqL/oWyY/6FsmP+ffKb/n3ym/5HO7f+Rzu3/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Z + k7H/mZOx/59sjf+fbI3/oG6Oz6Bujs+qgIAGqoCABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIHkm2SB55sjc6ebI3On2yN/59sjf+ak7P/mpOz/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/ksro/5LK6P+dd5f/nXeX/59sjf+fbI3/rX2R/619kf/u + zqf/7s6n///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj//Ti2f/04tn/rn6i/65+ov+hbJj/oWyY/598pv+ffKb/kc7t/5HO7f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5mTsf+Zk7H/n2yN/59sjf+gbo7PoG6Oz6qAgAaq + gIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAn26KJZ9uiiWfbY3yn22N8p9sjf+fbI3/l6rJ/5eqyf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/5HO6v+Rzur/nX6f/51+n/+fbI3/n2yN/6Jvjv+ib47/062e/9Otnv/+4az//uGs///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP//+vH///rx///46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP/07bD/9O2w/+h + bJj/oWyY/52Erf+dhK3/kNTx/5DU8f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5epx/+X + qcf/n2yN/59sjf+gbo7yoG6O8qBtiiOgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln26KJZ9tjfKfbY3yn2yN/59sjf+X + qsn/l6rJ/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kc7q/5HO6v+dfp//nX6f/59sjf+f + bI3/om+O/6Jvjv/TrZ7/062e//7hrP/+4az//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///68f//+vH///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4//TtsP/07bD/6FsmP+hbJj/nYSt/52Erf+Q1PH/kNTx/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/l6nH/5epx/+fbI3/n2yN/6BujvKgbo7yoG2KI6BtiiMA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAnm2MVJ5tjFSfbI39n2yN/Z9tjf+fbY3/lbTR/5W00f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/5DY8/+Q2PP/mZOx/5mTsf+fbI3/n2yN/59sjf+fbI3/r4CS/6+Akv/h + vqP/4b6j///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP//+rI///qyP//46z//+Os/+nHp//px6f/8tOp//LTqf/i59T/4ufU/53b8v+d + 2/L/lbjZ/5W42f+Q2fX/kNn1/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/lbPR/5Wz0f+f + bY3/n22N/59rjf6fa43+oWuOUaFrjlEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebYxUnm2MVJ9sjf2f + bI39n22N/59tjf+VtNH/lbTR/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNjz/5DY8/+Z + k7H/mZOx/59sjf+fbI3/n2yN/59sjf+vgJL/r4CS/+G+o//hvqP//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///6sj//+rI///jrP// + 46z/6cen/+nHp//y06n/8tOp/+Ln1P/i59T/ndvy/53b8v+VuNn/lbjZ/5DZ9f+Q2fX/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+Vs9H/lbPR/59tjf+fbY3/n2uN/p9rjf6ha45RoWuOUQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yMbZ9sjG2fbI3/n2yN/59tj/+fbY//lbTR/5W00f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/lLfV/5S31f+edpb/nnaW/59sjf+f + bI3/n2yN/59sjf+xgpP/sYKT/9awnv/WsJ7/+Nuq//jbqv//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//6sj//+rI///y4/// + 8uP///Lj///y4///8uP///Lj/97Dyf/ew8n/soOh/7KDof+hbJj/oWyY/6SBpf+kgaX/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Vs9H/lbPR/59tj/+f + bY//n2yN/59sjf+ga41roGuNawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf + bIxtn2yMbZ9sjf+fbI3/n22P/59tj/+VtNH/lbTR/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+Ut9X/lLfV/552lv+edpb/n2yN/59sjf+fbI3/n2yN/7GCk/+xgpP/1rCe/9awnv/4 + 26r/+Nuq///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///qyP//6sj///Lj///y4///8uP///Lj///y4///8uP/3sPJ/97Dyf+y + g6H/soOh/6FsmP+hbJj/pIGl/6SBpf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/5Wz0f+Vs9H/n22P/59tj/+fbI3/n2yN/6BrjWuga41rAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuOfqBrjn6fbI3/n2yN/59tjf+f + bY3/l6rJ/5eqyf+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNjz/5DY8/+X + psT/l6bE/55zlP+ec5T/n2yN/59sjf+fbI3/n2yN/6Fujv+hbo7/tYeU/7WHlP/OpZz/zqWc/+C8ov/g + vKL/7cyn/+3Mp//42qr/+Nqq//nbqv/526r//uGs//7hrP/22an/9tmp/+7Npv/uzab/6Mak/+jGpP/+ + 6Mj//ujI///y4///8uP/7dzX/+3c1/+hbJj/oWyY/6FsmP+hbJj/n3ii/594ov+VtNb/lbTW/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5epx/+Xqcf/n22N/59tjf+f + bI3/n2yN/55tjnyebY58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACga45+oGuOfp9sjf+fbI3/n22N/59tjf+Xqsn/l6rJ/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+Q2PP/kNjz/5emxP+XpsT/nnOU/55zlP+fbI3/n2yN/59sjf+f + bI3/oW6O/6Fujv+1h5T/tYeU/86lnP/OpZz/4Lyi/+C8ov/tzKf/7cyn//jaqv/42qr/+duq//nbqv/+ + 4az//uGs//bZqf/22an/7s2m/+7Npv/oxqT/6Mak//7oyP/+6Mj///Lj///y4//t3Nf/7dzX/6FsmP+h + bJj/oWyY/6FsmP+feKL/n3ii/5W01v+VtNb/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/l6nH/5epx/+fbY3/n22N/59sjf+fbI3/nm2OfJ5tjnwAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuNa6BrjWuf + bI39n2yN/Z9sjf+fbI3/mpGw/5qRsP+Q1vL/kNby/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P2PT/j9j0/5awzf+WsM3/nIWl/5yFpf+fbY7/n22O/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/uK+0/7ivtP+v4ev/r+Hr/5Tb9v+U2/b/mKbK/5imyv+Vt9j/lbfY/4/b9/+P2/f/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DY8/+Q2PP/mpOz/5qTs/+fbI3/n2yN/59sjf6f + bI3+n2uNcp9rjXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga41roGuNa59sjf2fbI39n2yN/59sjf+akbD/mpGw/5DW8v+Q + 1vL/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/Y9P+P2PT/lrDN/5awzf+c + haX/nIWl/59tjv+fbY7/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+4r7T/uK+0/6/h6/+v4ev/lNv2/5Tb9v+Y + psr/mKbK/5W32P+Vt9j/j9v3/4/b9/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/kNjz/5DY8/+ak7P/mpOz/59sjf+fbI3/n2yN/p9sjf6fa41yn2uNcgAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnm2MVJ5tjFSgbI7zoGyO859sjf+fbI3/nH2d/5x9nf+Twd7/k8He/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNPw/5DT8P+VtNH/lbTR/5mcuv+Z + nLr/nIen/5yHp/+eeJn/nniZ/59vkP+fb5D/n2yN/59sjf+fbI3/n2yN/59vkP+fb5D/nXyc/518nP+b + iqn/m4qp/5HK5v+Ryub/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/k8He/5PB3v+dfJz/nXyc/59sjf+fbI3/n22N8p9tjfKf + bYxSn22MUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebYxUnm2MVKBsjvOgbI7zn2yN/59sjf+c + fZ3/nH2d/5PB3v+Twd7/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+Q0/D/kNPw/5W00f+VtNH/mZy6/5mcuv+ch6f/nIen/554mf+eeJn/n2+Q/59vkP+f + bI3/n2yN/59sjf+fbI3/n2+Q/59vkP+dfJz/nXyc/5uKqf+biqn/kcrm/5HK5v+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+T + wd7/k8He/518nP+dfJz/n2yN/59sjf+fbY3yn22N8p9tjFKfbYxSAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn26KJZ9uiiWebI3OnmyNzp9sjf+fbI3/n22N/59tjf+ZlbX/mZW1/5DR7v+Q + 0e7/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/kdHu/5HR7v+albT/mpW0/59tjf+fbY3/n2yN/59sjf+fbI3Nn2yNzZxqjiSc + ao4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln26KJZ5sjc6e + bI3On2yN/59sjf+fbY3/n22N/5mVtf+ZlbX/kNHu/5DR7v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+R0e7/kdHu/5qVtP+a + lbT/n22N/59tjf+fbI3/n2yN/59sjc2fbI3NnGqOJJxqjiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SB5JtkgeebY58nm2OfJ9sjfefbI33n2yN/59sjf+f + b5D/n2+Q/5iauf+Ymrn/kc7r/5HO6/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/kc7q/5HO6v+Zmbn/mZm5/59vkP+fb5D/n2yN/59sjf+fbI33n2yN96BsjXugbI17km2SB5JtkgcA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACS + bZIHkm2SB55tjnyebY58n2yN959sjfefbI3/n2yN/59vkP+fb5D/mJq5/5iauf+Rzuv/kc7r/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Rzur/kc7q/5mZuf+Zmbn/n2+Q/59vkP+f + bI3/n2yN/59sjfefbI33oGyNe6BsjXuSbZIHkm2SBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeaY8inmmPIp5tjKme + bYypn2yN/Z9sjf2fbI3/n2yN/59tjv+fbY7/moio/5qIqP+Vs9D/lbPQ/5DV8f+Q1fH/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5DU8P+Q1PD/lbLQ/5Wy0P+b + iKj/m4io/59tjv+fbY7/n2yN/59sjf+fbI39n2yN/Z9sjKefbIynomyLIaJsiyEAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ5pjyKeaY8inm2MqZ5tjKmfbI39n2yN/Z9sjf+fbI3/n22O/59tjv+a + iKj/moio/5Wz0P+Vs9D/kNXx/5DV8f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/kNTw/5DU8P+VstD/lbLQ/5uIqP+biKj/n22O/59tjv+fbI3/n2yN/59sjf2f + bI39n2yMp59sjKeibIshomyLIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJ1vkCedb5AnoGyMnqBsjJ6fbI32n2yN9p9sjf+fbI3/n2yN/59sjf+fbY7/n22O/5yBof+c + gaH/mJy7/5icu/+WsM3/lrDN/5PB3v+Twd7/kc7r/5HO6/+Q1fH/kNXx/5Db9v+Q2/b/kNv2/5Db9v+Q + 1fH/kNXx/5HO6v+Rzur/k8He/5PB3v+WsM3/lrDN/5icu/+YnLv/nIGh/5yBof+fbY3/n22N/59sjf+f + bI3/n2yN/59sjf+fbI32n2yN9p9rjZ2fa42dnW+QJ51vkCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ51vkCegbIyeoGyMnp9sjfaf + bI32n2yN/59sjf+fbI3/n2yN/59tjv+fbY7/nIGh/5yBof+YnLv/mJy7/5awzf+WsM3/k8He/5PB3v+R + zuv/kc7r/5DV8f+Q1fH/kNv2/5Db9v+Q2/b/kNv2/5DV8f+Q1fH/kc7q/5HO6v+Twd7/k8He/5awzf+W + sM3/mJy7/5icu/+cgaH/nIGh/59tjf+fbY3/n2yN/59sjf+fbI3/n2yN/59sjfafbI32n2uNnZ9rjZ2d + b5AnnW+QJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApG2SDqRtkg6fbY1in22NYqBsjLugbIy7n2yN9p9sjfaf + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN9p9sjfaf + bI26n2yNup5sjmGebI5hpG2SDqRtkg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk + bZIOpG2SDp9tjWKfbY1ioGyMu6BsjLufbI32n2yN9p9sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI32n2yN9p9sjbqfbI26nmyOYZ5sjmGkbZIOpG2SDgAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9ggAif + YIAIn2yLQJ9si0CfbIx4n2yMeKBsjJ6gbIyenmyMxp5sjMafbI3en2yN3p9sje6fbI3un2yN+p9sjfqf + bI36n2yN+p9sje6fbI3un2yN3p9sjd6ebIzGnmyMxqBsjJ6gbIyen2yMeJ9sjHiebY4/nm2OP5JtkgeS + bZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2CACJ9ggAifbItAn2yLQJ9sjHifbIx4oGyMnqBsjJ6e + bIzGnmyMxp9sjd6fbI3en2yN7p9sje6fbI36n2yN+p9sjfqfbI36n2yN7p9sje6fbI3en2yN3p5sjMae + bIzGoGyMnqBsjJ6fbIx4n2yMeJ5tjj+ebY4/km2SB5JtkgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8AAAAA////////////////AAAA + AP//////////////wAAAAAAD/////////////8AAAAAAA/////////////wAAAAAAAA////////////8 + AAAAAAAAP///////////wAAAAAAAAAP//////////8AAAAAAAAAD//////////wAAAAAAAAAAD////// + ///8AAAAAAAAAAA/////////8AAAAAAAAAAAD/////////AAAAAAAAAAAA/////////AAAAAAAAAAAAD + ////////wAAAAAAAAAAAA////////wAAAAAAAAAAAAD///////8AAAAAAAAAAAAA///////8AAAAAAAA + AAAAAD///////AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////wAAA + AAAAAAAAAAAD/////8AAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAA//// + /AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAA + AD////AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA////AAAAAAAAAA + AAAAAAAP///AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD///AAAAA + AAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP// + AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAA + AAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAA + AAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAA + AAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8 + AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAA + AAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAA + AAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAA + AAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8 + AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAA + AAA//AAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAA + AAAAAAAA//8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA///AAAAA + AAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAA/// + 8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAA + AA////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAAAD////wAAAAAAAAA + AAAAAAA/////AAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAP/////wAAA + AAAAAAAAAAAD//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA///////AAAAAAAAAAAAAA///// + //wAAAAAAAAAAAAAP///////AAAAAAAAAAAAAP///////wAAAAAAAAAAAAD////////AAAAAAAAAAAAD + ////////wAAAAAAAAAAAA/////////AAAAAAAAAAAA/////////wAAAAAAAAAAAP/////////AAAAAAA + AAAAP/////////wAAAAAAAAAAD//////////wAAAAAAAAAP//////////8AAAAAAAAAD///////////8 + AAAAAAAAP////////////AAAAAAAAD/////////////AAAAAAAP/////////////wAAAAAAD//////// + //////8AAAAA////////////////AAAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////ygAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACqgIAGn22OPaBsjHafbI2cn2yNxJ9sjd2fbI3tn2yN+Z9sjfmfbI3tn2yN3aBtjcOf + bI2coGyMdp9tjj2qgIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAnXaJDaFwkmKfbY23n2yN9Z9sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/nmuO9Z5sjragbY1elWqVDAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfboolo3ORpKBuj/qfbI3/n2yN/59tjf+cfJ7/mJO3/5WiyP+S + sNX/kLvh/4/C6P+Pxuz/j8bs/4/B6P+Qu+H/krDV/5WiyP+Yk7b/nHye/59tjf+fbI3/n2yN/59sjvWf + bI2cnGqOJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxrjB+hb4+ooG2O/p9sjf+fbY3/m4Ol/5Wkyf+Q + wOb/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Q + wOb/lKTI/5uCpP+fbY3/n2yN/55tjf2fa42kom+RHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqoCABp9tjHqgbo35n2yN/55ukP+Y + kLT/kbzh/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kLvh/5mQtP+ebpD/n2yN/6Btjfaea415qoCABgAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG2KI6Bujs+f + bI3/n22N/5mMsP+PvuT/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//kL3k/5mMrv+f + bI3/n2yN/59sjcygbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAoWuOUaBtjvOfbI3/nXmb/5Ox1v+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsbs/5Kz2f+O + x+//jsjv/47I7/+OyO//m4Kk/5uCpP+OyO//jsjv/47I7/+Ox+//krTa/47G7f+OyO//jsjv/47I7/+O + yO//jsjv/47I7/+OyO//krDV/515mv+fbI3/oG2O8Z9sjFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn2yOaqBsjv6fbI3/mYqs/4/C6f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/5ebv/+fbI3/qLDJ/8Td3v/e3sD/8OG2/59sjf+fbI3/8OG2/97ewf/F2dH/p6zA/59sjf+W + ncH/jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+Pw+r/mYyu/59sjf+fbY39nmuNaQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnm2OfJ9sjf+fbY3/lp3B/47I7/+OyO//jsjv/47I7/+O + yO//jsjv/47H7v+OyO//l8/w/7/e7P/Uu8L/n2yN/76Yqf//8uP//+vH///jrP+fbI3/n2yN///jrP// + 46z//+Os/72Rl/+fbI3/1LOj/7/Y1P+Wzuz/jsjv/4/B5/+Oxu3/jsjv/47I7/+OyO//jsjv/47I7/+W + nMH/n22N/59sjf+gbI17AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGuNa59sjf+fbY//lKXL/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5iUuP+fcpP/ztDY///y4///8uP/8+LZ/59sjf+pepb///Lj///y4/// + 6sj/tYeU/7aIlP//46z//+Os///jrP+qepD/n2yN//TVqf//46z//+Os/87Huv+fb4//mY2w/47I7/+O + yO//jsjv/47I7/+OyO//jsjv/5Slyv+fbY//n2yN/55rjWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn22MUp9sjv6f + bY3/lKXL/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5HM8P+zpLr/n2yN/7aNov//8uP///Lj///y4//R + srn/17rA///y4///8uP///Lj///rx///46z//+Os///jrP//46z/3bmh/9Wvnv//46z//+Os///jrP+2 + iZX/n2yN/7Kfq/+Qy+//jsjv/47I7/+OyO//jsjv/47I7/+OyO//lKXK/59tjf+fbY39n2yMUAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnGqOJJ9tjfKfbI3/lp3B/47I7/+OyO//jsjv/47I7/+OyO//jsjv/5zS7//z7+T/+ere/6d4lf+f + bI3/7dnT///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+rI///jrP//46z//+Os///jrP// + 46z//+Os///jrP/x0qj/n2yN/6d3kP/53Kr/8uG0/5vP6f+OyO//jsjv/47I7/+OyO//jsjv/47I7/+W + nMH/n2yN/6BtjvGgbYojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAkm2SB59sjc2fbI3/mYuv/47I7/+OyO//jsjv/47I7/+QveP/laDE/6zR3P// + 6sj///Lj///y4//n0M3/zay3//3v4f//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+Ks/9Sunv/ox6X//+Os///jrP//46z/qsjY/5iVv/+Q + veT/jsjv/47I7/+OyO//jsjv/5qKrv+fbI3/n2yNzKqAgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjXufbI3/nXmb/4/D6v+OyO//jsjv/47I7/+Q + wOb/nXmb/59sjf/iv6P//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///qyP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os/9auo/+hbJj/n3ml/4/B6P+OyO//jsjv/47I7/+Pwun/nXma/59sjf+ea415AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJvkR6fbI71n2yN/5Kw1f+O + yO//jsjv/47I7/+OxOz/nICi/59sjf+0iJr//N+r///jrP//46z//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP//+vH///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP/73qz/tYWc/6FsmP+df6v/jsbs/47I7/+OyO//jsjv/5Ky1/+f + bY3/oG2N9p9wjyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf + bI2on2yN/5mNsP+OyO//jsjv/47I7/+OyO//mJK0/59sjf+tgJr/9+fc///rx///46z//+Os///jrP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4///8uP/9+bb/9i7wP/35tv///Lj///y4/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//fYqv+ufJv/oWyY/5mTvf+O + yO//jsjv/47I7/+OyO//mYyu/59sjf+fa42kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACdb5Annm2N/Z9vkP+QvuX/jsjv/47I7/+OyO//k6/U/59tjf+icJD/7djT///y4/// + 8uP//+rI///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP/7trU/6t8l/+f + bI3/qXuW/+zY0v//8uP///Lj///qyP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z/7cyo/6Rvmf+hbZj/k67W/47I7/+OyO//jsjv/5C95P+ebpD/nm2N/ZxqjiQAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyMnp9sjf+YkbX/jsjv/47I7/+OyO//jsbs/513mf+f + bI3/1rm+///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4/// + 8uP/4cjJ/6Rykf+fbI3/oHGL/59sjf+kcpD/4cjJ///y4///8uP//+vH///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP/VrqP/oWyY/556pf+Pxu3/jsjv/47I7/+OyO//mZC0/59sjf+f + bI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApG2SDqBtjfafbY7/kbzh/47I7/+O + yO//jsjv/5Wfw/+fbI3/sICT//3ox///8uP///Lj///y4///8uP///Lj///rx///46z//+Os///jrP// + 6sj///Lj///y4///8uP/1bi9/6Btjv+fbI3/pI2D/67Ec/+lj4P/n2yN/59tjf/Pr7j///Hj///y4/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//uGr/7GAm/+hbJj/lqDJ/47I7/+O + yO//jsjv/5C74f+fbY3/nmyO9ZVqlQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9tjWKf + bI3/moOm/47I7/+OyO//jsjv/4/F6/+ec5X/n2yN/+XDpP//46z//+rI///y4///8uP///Lj///y4/// + 8uP//+vH///jrP//46z//+Os///qyP/87uH/w56t/59sjf+fbYz/p5uA/6/Kcv+vynL/r8py/6ihff+f + bY3/n2yN/8Cbqv/87eD///Lj///rx///46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/j + wKb/oWyY/593ov+Oxu3/jsjv/47I7/+OyO//m4Kk/59sjf+gbY1eAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACfbI26n2yN/5Slyv+OyO//jsjv/47I7/+UqMz/n2yN/7GDmP//4qz//+Os///jrP// + 6sj///Lj///y4///8uP///Lj///y4///6sj//+Os///jrP/32ar/touc/59sjf+gcYz/qq16/6/Kcv+v + ynL/r8py/6/Kcv+vynL/q695/6Bxi/+fbI3/tImg//bl2///8uP//+rI///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Ks/7KCnP+hbJj/lKjR/47I7/+OyO//jsjv/5SkyP+fbI3/nmyOtgAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIHn2yN9p9tjf+PwOf/jsjv/47I7/+OyO//m4Sn/59sjf/a + vsL//+vH///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///rx//uzqf/q3qQ/59sjf+h + dor/rLh3/6/Kcv+vynL/r8py/6/Kcv+vynL/r8py/6/Kcv+suXf/oXeJ/59sjf+pe5b/7NjS///y4/// + 68f//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP/Zs6T/oWyY/5yHsf+OyO//jsjv/47I7/+Q + wOb/n22N/59sjfWSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yLQJ9sjf+cfp//jsjv/47I7/+O + yO//j8Lp/59tjv+icI//+ere///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4//h + yMn/pHKP/59sjf+jgYf/rcJ1/6/Kcv+vynL/rcB1/6/Kcv+vynL/r8py/63AdP+vynL/r8py/63Cdf+j + gYf/n2yN/6RykP/hyMn///Lj///rx///46z//+Os///jrP//46z//+Os///jrP//46z/+Nmr/6NumP+h + bpr/j8Lq/47I7/+OyO//jsjv/5x8nv+fbI3/n22OPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rjXef + bI3/l5O3/47I7/+OyO//jsjv/5Orz/+fbI3/uZCk///y4///8uP///Lj///rx///46z//+Os///jrP// + 6sj///Lj///y4//Ss7r/oG2O/59sjf+lj4T/rsdz/6/Kcv+vyHP/ppCC/59sjf+qqXv/r8py/6mmfP+f + bI3/pY+C/6/Icv+vynL/rsdz/6WPhP+fbI3/oG2O/9Kzuv//8uP//+vH///jrP//46z//+Os///jrP// + 46z//+Os///jrP+3iJ3/oWyY/5Ot1v+OyO//jsjv/47I7/+Yk7b/n2yN/59tjnUAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACfa42fn2yN/5Wjx/+OyO//jsjv/47I7/+Xk7f/n2yN/9Csq///8uP///Lj///y4/// + 8uP//+vH///jrP//46z//+Os//znx//Dnq3/n2yN/59tjP+nm4D/r8lz/6/Kcv+uxnP/o4eG/59sjf+f + bI3/p5uA/6/Kcv+nm4D/n2yN/59sjf+jhIf/rsR0/6/Kcv+vynL/qKF9/59tjf+fbI3/wJuq//zt4P// + 68f//+Os///jrP//46z//+Os///jrP//46z/z6ah/6FsmP+Yl8H/jsjv/47I7/+OyO//laLH/59sjf+f + bI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmyMxp9sjf+Sstf/jsjv/47I7/+OyO//moWo/59sjf/j + wKL//+rI///y4///8uP///Lj///y4///68f//+Os//jaqv+1h5T/n2yN/6BxjP+qrXr/r8py/6/Kcv+t + vnX/onyI/59sjf+fbI3/n2yN/6ebgP+vynL/p5uA/59sjf+fbI3/n2yN/6J7if+tv3b/r8py/6/Kcv+q + rXr/oHGM/59sjf+1iqH/+Ojd///rx///46z//+Os///jrP//46z//+Os/+G9pf+hbJj/m4ey/47I7/+O + yO//jsjv/5Kw1f+fbI3/oG2NwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjeCfbI3/kL3j/47I7/+O + yO//jsjv/515mv+fbI3/8dGn///jrP//6sj///Lj///y4///8uP///Lj///rx//Sq53/n2yN/6F3iv+s + uXf/r8py/6/Kcv+suHf/oHWK/59sjf+wgpf/xJmY/59sjf+nm4D/r8py/6ebgP+fbI3/xJ+t/7CDnP+f + bI3/oXWL/6u3eP+vynL/r8py/6y5d/+hd4r/n2yN/9Kzuv//8uP//+vH///jrP//46z//+Os///jrP/v + z6j/oWyY/557pv+OyO//jsjv/47I7/+Qu+L/n2yN/59sjd4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACf + bI3tn2yN/4/H6/+OyO//jsjv/47I7/+eb5D/n2yN//ncqv//46z//+Os///qyP//8uP///Lj///y4/// + 8uP/z6uq/59sjf+nm4D/r8py/6/Kcv+qsHn/oHGL/59sjf+4kKT/+ere/8+rqv+fbI3/p5uA/6/Kcv+n + m4D/n2yN/8+vuP/67N7/upKm/59sjf+gcIz/qq16/6/Kcv+vynL/p5uA/59sjf/Pr7j///Lj///y4/// + 68f//+Os///jrP//46z/+Nqq/6FsmP+gc5//jsjv/47I7/+OyO//j8fq/59sjf+gbY3rAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn2yN+Z9sjf+Q2vX/j9Hz/47K8P+OyO//n22O/59sjf/+4az//+Os///jrP// + 46z//+rI///y4///8uP///Lj/8+vuP+fbI3/p5uA/6/Kcv+opXz/oG2N/59sjf/Dnq3//e/i///y4//P + r7j/n2yN/6ebgP+vynL/p5uA/59sjf/Pr7j///Lj//3w4f/GorD/n2yN/59tjP+oon3/r8py/6ebgP+f + bI3/z6+4///y4///8uP///Lj///rx///46z//+Os//zgq/+hbJj/oG+b/47I7/+OyvD/j9L0/4/a9v+f + bI3/n2yN+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjfmfbI3/kNv2/4/d+f+P3fn/j9z4/59sjf+f + bI3//eGr///jrP//46z//+Os///jrP//6sj///Lj///y4//Pr7j/n2yN/6abf/+nm4D/n2yN/59tjf/P + q6v///Hj///y4///8uP/z6+4/59sjf+nm4D/r8py/6ebgP+fbI3/z6ur///y4///8uP///Lj/9W4vf+f + bY3/n2yN/6WUgf+nmoD/n2yN/8+vuP//8uP///Lj///y4///8uP//+vH///jrP/94az/oWyY/6Bwm/+P + 3fn/j935/4/d+f+P2vb/n2yN/59sjfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbI3tn2yN/5DV8f+P + 3fn/j935/4/d+f+ecJH/n2yN//rdq///46z//+Os///jrP//46z//+Os///qyP//8uP/z6+4/59sjf+g + cYv/n2yN/6Jvjv/duaH//+Os///qyP//8uP///Lj/8+vuP+fbI3/p5uA/6/Kcv+nm4D/n2yN/8+nnf// + 6sj///Lj///y4///8uP/3MHD/6Fvj/+fbI3/oHGL/59sjf/Pr7j///Lj///y4///8uP///Lj///y4/// + 68f/+Nqq/6FsmP+gdaD/j935/4/d+f+P3fn/kNTw/59sjf+gbY3rAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAn2yN4J9sjf+Rz+z/j935/4/d+f+P3fn/nXuc/59sjf/x0af//+Os///jrP//46z//+Os///jrP// + 46z//+rI/8+vuP+fbI3/n2yN/6V1k//ny7j//+Os///jrP//46z//+rI///y4//Pr7j/n2yN/6ebgP+v + ynL/p5uA/59sjf/Pp53//+Os///qyP//8uP///Lj///y4//p08//p3eU/59sjf+fbI3/z6+4///y4/// + 8uP///Lj///y4///8uP///Lj/+/Vv/+hbJj/nn6n/4/d+f+P3fn/j935/5HO6/+fbI3/n2yN3gAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ5sjMafbI3/k8He/4/d+f+P3fn/j935/5uIqP+fbI3/48Ci///jrP// + 46z//+Os///jrP//46z//+Os///jrP/Tsa3/n2yN/6x+mP/w3dX///Lj///rx///46z//+Os///jrP// + 6sj/z6+4/59sjf+nm4D/r8py/6ebgP+fbI3/z6ed///jrP//46z//+rI///y4///8uP///Lj/+/c1f+r + fJf/n2yN/9Gyuv//8uP///Lj///y4///8uP///Lj///y4//iyMz/oWyY/5uOtf+P3fn/j935/4/d+f+T + wN3/n2yN/6BtjcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfa42fn2yN/5Wwzv+P3fn/j935/4/d+f+Y + nLv/n2yN/9Cqnf//46z//+Os///jrP//46z//+Os///jrP//46z/+Nuq/9Syrf/359z///Lj///y4/// + 8uP//+vH///jrP//46z//+Os/8+rq/+fbI3/p5uA/6/Kcv+nm4D/n2yN/8+rqv//46z//+Os///jrP// + 6sj///Lj///y4///8uP/9+bb/9W4vf/46N3///Lj///y4///8uP///Lj///y4///8uP/z6+9/6FsmP+Y + oMX/j935/4/d+f+P3fn/lq/N/59sjf+fbI2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yMeJ9sjf+Y + nLv/j935/4/d+f+P3fn/lLTS/59sjf+5jJb//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+rI///y4///8uP///Lj///y4///68f//+Os///jrP/Pp53/n2yN/6ebgP+vynL/p5uA/59sjf/P + r7j//+vH///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj/7iNqv+hbJj/lLvc/4/d+f+P3fn/j935/5mcuv+fbI3/oGyMdgAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAKFujUGfbI3/nIKh/4/d+f+P3fn/j935/5HS7/+fbY7/om+O//ncqv//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP///Lj///rx///46z/z6ed/59sjf+n + m4D/r8py/6ebgP+fbI3/z6+4///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4/// + 8uP///Lj///y4///8uP///Lj//jo3f+jb5n/oW6a/5DW8/+P3fn/j935/4/d+f+cgKD/n2yN/59tjj0A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIHn2yN9p9tjf+Q1PD/j935/4/d+f+P3fn/m4am/59sjf/a + tqD//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj///y4/// + 8uP//+vH/8+nnf+fbI3/p5uA/6/Kcv+nm4D/n2yN/8+vuP//8uP///Lj///rx///46z//+Os///jrP// + 6sj///Lj///y4///8uP///Lj///y4///8uP///Lj///y4//ZvMT/oWyY/5yMs/+P3fn/j935/4/d+f+R + 0/D/n22N/59sjfWSbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBsjLufbI3/lbPQ/4/d+f+P + 3fn/j935/5WuzP+fbI3/soOT///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+rI///y4///8uP///Lj///y4//Pq6r/n2yN/6ebgP+vynL/p5uA/59sjf/Pr7j///Lj///y4/// + 8uP//+vH///jrP//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///y4///8eP/soWm/6FsmP+V + tdb/j935/4/d+f+P3fn/lbHP/59sjf+fbY23AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg + bI5jn2yN/5uJqf+P3fn/j935/4/d+f+Q2PT/nnSV/59sjf/lw6P//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP/z6+4/59sjf+nm4D/r8py/6ebgP+f + bI3/z6+4///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4/// + 8uP/5MzO/6FsmP+feKL/kNv3/4/d+f+P3fn/j935/5uIqP+fbI3/nmuOXwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAApG2SDp9sjfWfbY7/kc7r/4/d+f+P3fn/j935/5ejwv+fbI3/sYOS//7hrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj/8+vuP+f + bI3/p5uA/6/Kcv+nm4D/n2yN/8+rq///8uP///Lj///y4///8uP///Lj///rx///46z//+Os///jrP// + 6sj///Lj///y4///8uP//vDh/7KEpf+hbJj/l6rO/4/d+f+P3fn/j935/5HN6v+fbY3/nmuN9Z12iQ0A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgbIyen2yN/5iauf+P3fn/j935/4/d+f+P + 2PT/nXeX/59sjf/WsJ7//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+rI///y4//Pr7j/n2yN/6KChv+nmID/ooKG/59sjf/Pp53//+rI///y4///8uP///Lj///y4/// + 8uP//+vH///jrP//46z//+Os///qyP//8uP///Lj/9W3wf+hbJj/nnym/4/a9v+P3fn/j935/4/d+f+Z + mbj/n2yN/59sjZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QJ59sjf2f + cJH/kNHu/4/d+f+P3fn/j935/5W10/+fbI3/onCO/+7Op///46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj/0bK6/59sjf+fbI3/n2yN/59sjf+fbI3/0qud///jrP// + 6sj///Lj///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI/+3Y1f+kcZr/oWyY/5S83f+P + 3fn/j935/4/d+f+Q0e3/n2+Q/59sjfyfboolAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACebYypn2yN/5mVtf+P3fn/j935/4/d+f+P3fn/mZOx/59sjf+ufpH/99mq///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os//jhxP/Ttbz/0rO7/9Kzu//S + s7v/07Gt//jaqv//46z//+Os///qyP//8uP///Lj///y4///8uP///Lj///qyP//46z//+Os//fZq/+u + fp//oWyY/5mcwP+P3fn/j935/4/d+f+P3fn/mZS0/59sjf+fbI2lAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnGuMH59sjvWfbY3/lMHe/4/d+f+P3fn/j935/5DW8v+c + f57/n2yN/7SGlP/63av//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+rI///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4///8uP///Lj///y4/// + 8uP//+vH//vdq/+1hZz/oWyY/52DrP+Q2fb/j935/4/d+f+P3fn/k8He/59tjf+gbo75omyLIQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACebY58n2yN/5x9nf+Q + 2PP/j935/4/d+f+P3fn/kc7r/512lv+fbI3/s4WU//fYqf//46z//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP///Lj///qyP//46z//+Os///jrP// + 6sj///Lj///y4///8uP///Lj//jo3f+2iKL/oWyY/597pf+R0vD/j935/4/d+f+P3fn/kNfz/518nP+f + bI3/n22MegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAkm2SB55sjc6fbI3/mpOz/4/d+f+P3fn/j935/4/d+f+Syuj/nXeX/59sjf+tfZH/7s6n///jrP// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj///y4/// + 8uP//+vH///jrP//46z//+Os///qyP//8uP///Lj//Ti2f+ufqL/oWyY/598pv+Rzu3/j935/4/d+f+P + 3fn/j935/5mTsf+fbI3/oG6Oz6qAgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooln22N8p9sjf+Xqsn/j935/4/d+f+P3fn/j935/5HO6v+d + fp//n2yN/6Jvjv/TrZ7//uGs///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z//+rI///y4///8uP///Lj///y4///68f//+Os///jrP//46z//+rI///y4//TtsP/oWyY/52Erf+Q + 1PH/j935/4/d+f+P3fn/j935/5epx/+fbI3/oG6O8qBtiiMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjFSfbI39n22N/5W00f+P + 3fn/j935/4/d+f+P3fn/kNjz/5mTsf+fbI3/n2yN/6+Akv/hvqP//+Os///jrP//46z//+Os///jrP// + 46z//+Os///jrP//46z//+Os///jrP//6sj///Lj///y4///8uP///Lj///qyP//46z/6cen//LTqf/i + 59T/ndvy/5W42f+Q2fX/j935/4/d+f+P3fn/j935/5Wz0f+fbY3/n2uN/qFrjlEAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAn2yMbZ9sjf+fbY//lbTR/4/d+f+P3fn/j935/4/d+f+P3fn/lLfV/552lv+fbI3/n2yN/7GCk//W + sJ7/+Nuq///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+Os///qyP//8uP///Lj///y4//e + w8n/soOh/6FsmP+kgaX/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5Wz0f+fbY//n2yN/6BrjWsA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga45+n2yN/59tjf+Xqsn/j935/4/d+f+P3fn/j935/4/d+f+Q + 2PP/l6bE/55zlP+fbI3/n2yN/6Fujv+1h5T/zqWc/+C8ov/tzKf/+Nqq//nbqv/+4az/9tmp/+7Npv/o + xqT//ujI///y4//t3Nf/oWyY/6FsmP+feKL/lbTW/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5epx/+f + bY3/n2yN/55tjnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBrjWufbI39n2yN/5qRsP+Q + 1vL/j935/4/d+f+P3fn/j935/4/d+f+P2PT/lrDN/5yFpf+fbY7/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjf+fbI3/n2yN/7ivtP+v4ev/lNv2/5imyv+Vt9j/j9v3/4/d+f+P3fn/j935/4/d+f+P + 3fn/kNjz/5qTs/+fbI3/n2yN/p9rjXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnm2MVKBsjvOfbI3/nH2d/5PB3v+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/kNPw/5W00f+Z + nLr/nIen/554mf+fb5D/n2yN/59sjf+fb5D/nXyc/5uKqf+Ryub/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/k8He/518nP+fbI3/n22N8p9tjFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfboolnmyNzp9sjf+fbY3/mZW1/5DR7v+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+R0e7/mpW0/59tjf+fbI3/n2yNzZxqjiQAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgeebY58n2yN959sjf+f + b5D/mJq5/5HO6/+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/5HO6v+Zmbn/n2+Q/59sjf+fbI33oGyNe5JtkgcA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJ5pjyKebYypn2yN/Z9sjf+fbY7/moio/5Wz0P+Q1fH/j935/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/d+f+Q1PD/lbLQ/5uIqP+fbY7/n2yN/59sjf2f + bIynomyLIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ1vkCegbIyen2yN9p9sjf+fbI3/n22O/5yBof+Y + nLv/lrDN/5PB3v+Rzuv/kNXx/5Db9v+Q2/b/kNXx/5HO6v+Twd7/lrDN/5icu/+cgaH/n22N/59sjf+f + bI3/n2yN9p9rjZ2db5AnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRtkg6f + bY1ioGyMu59sjfafbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+fbI3/n2yN/59sjf+f + bI3/n2yN/59sjfafbI26nmyOYaRtkg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfYIAIn2yLQJ9sjHigbIyenmyMxp9sjd6fbI3un2yN+p9sjfqf + bI3un2yN3p5sjMagbIyen2yMeJ5tjj+SbZIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////// + ////////////////////////AAD///////gAAB//////4AAAB/////+AAAAB/////gAAAAB////8AAAA + AD////gAAAAAH///8AAAAAAP///gAAAAAAf//8AAAAAAA///gAAAAAAB//8AAAAAAAD//gAAAAAAAH/+ + AAAAAAAAf/wAAAAAAAA//AAAAAAAAD/4AAAAAAAAH/gAAAAAAAAf8AAAAAAAAA/wAAAAAAAAD/AAAAAA + AAAP4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfg + AAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAA + AAAH4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/4AAAAAAAAH/gAAAAAAAAf/AAAAAAAAD/8 + AAAAAAAAP/4AAAAAAAB//gAAAAAAAH//AAAAAAAA//+AAAAAAAH//8AAAAAAA///4AAAAAAH///wAAAA + AA////gAAAAAH////AAAAAA////+AAAAAH////+AAAAB/////+AAAAf/////+AAAH///////AAD///// + //////////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAkAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAonGLD6BsjUOfbI1un2yNmJ9sjayf + bI25n2yNuZ9sjaygbY2Xn2yNbqBsjUOicYsPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooHonKQMaBuj2mfbY25n22O+Z5zlP+d + eZv/nH6g/5uBo/+bgqX/m4Kl/5uBo/+cfqD/nXmb/55zlP+ebY/5n2yOuJ9sjmafbI4vnGqOBwAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnGuMBKBujzKgbY6CoG6O3J5zlP6b + hKf/l5m9/5Sozf+Ss9n/kL3k/4/D6v+Px+3/j8bt/4/D6v+QveT/krPZ/5Sozf+Xmb3/moSm/55yk/2f + bI3ZnmyNgZ9sjjGib5EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqgIADn22MdaBtjdaf + bY/5mI+z/5Ow1P+QveP/jsft/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+OyO//jsjv/47I7/+O + x+3/kL3j/5Ov1P+Zj7P/nm2P+Z9sjdSfbI10qoCAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoWuOBaBtjTag + bY66nnOU/5mNsP+Rt93/jsjv/47I7/+OyO//jsjv/4/F7P+Ox+7/jsjv/47I7/+Qu+H/kLvh/47I7/+O + yO//jsfu/4/F7P+OyO//jsjv/47I7/+OyO//kbfd/5mMr/+ec5T/n2yNuKBtjTWfbIwFAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAoGyOUqBsjtCdd5n+laXK/4/C6f+OyO//jsjv/47I7/+OyO//j8Lp/5agxP+asdL/rNPj/7vU1f+m + jqf/po6n/7vU1f+t0d7/mq/P/5Whxf+Pwun/jsjv/47I7/+OyO//jsjv/4/C6f+Vpsr/nXia/Z9tjc+f + bI1RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACebY5Gn2yN45x/of+Tr9T/jsfu/47I7/+OyO//jsjv/47I7/+TzPD/t8/i/7KQp/+y + kqj/8uzb//nluv+2ipX/toqV//nisP/y4bT/sY2c/7KNnP+3ys//k8vt/47F7P+Oxuz/jsjv/47I7/+O + x+7/k6/U/5x/of+fbI3joGyNRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn22MBZ9sjVKfbI3jmois/5C74v+OyO//jsjv/47I7/+Pye//n46v/7SYrv/x + 5d3//e/h/9Gyuv+yh57///Lj///v2f/Vs6z/1rCf///jrP//46z/tIeU/9Krnv/94Kv/8dit/7SToP+f + iaf/jsnv/47I7/+OyO//jsjv/5C74f+aiKv/n2yN459sjVGfbIwFAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmyNNp9sjdCcf6H/kLvi/47I7/+OyO//jsjv/5LL7/+3 + 2ev/ybK9/6d3lP/jy8r///Lj//Ti2f/q1dH///Lj///y4///79n//+a3///jrP//46z/7c2m//XWqf// + 46z/5cOk/6d2kP/Jq6T/ttPY/5HK7v+OyO//jsjv/47I7/+Qu+H/nH+h/59tjc+gbY01AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIEn2yNuZ14mv2Tr9T/jsjv/47I7/+P + wuj/mLPT/8XZ2f/37t//9OPZ/8yrtv/r1tH///Lj///y4///8uP///Lj///y4///8uP//+7V///mtv// + 46z//+Os///jrP//46z/7s6n/8+onf/01qn/9uGx/8XTzf+Zq9D/j8Lp/47I7/+OyO//k67U/513mv2f + bI24qoCAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJvkQSgbI11nnOU/5Wmyv+O + x+7/jsjv/5G84v+bhKf/tYiV//TVqf//57z///He///y4///8uP///Lj///y4///8uP///Lj///y4/// + 8uP///Lj///v2f//57r//+Os///jrP//46z//+Os///jrP//46z//+Os/+/Pqf+0hJz/nISw/5C85P+O + yO//jsfu/5Wlyv+ec5T/n2yNdJ9wjwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9sjjKf + bI7UmYyv/4/C6f+OyO//j8Hn/5iRtP+kdpX/4MO7//7ks///46z//+jB///w3P//8uP///Lj///y4/// + 8uP///Lj///y4//87uD/79zV//3v4f//79n//+a2///jrP//46z//+Os///jrP//46z//+Os//7irP/g + u6X/pXSc/5mRu/+Pwej/jsjv/4/D6f+Zja//n2yN1J9sjTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnW+QB55tjYOfbo/5kbfe/47I7/+OyO//labK/59zk//Orbf//vDg///sz///5LH//+Ou///owf// + 8d7///Lj///y4///8uP///Lj//np3f/LqbT/sYWd/9e6v//77eD//+7V///mt///46z//+Os///jrP// + 46z//+Os///jrP/+4az/z6ai/6Fynf+Vpc7/jsjv/47I7/+Rt93/nm2P+Z5sjYGcao4HAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAoGyNMJ9sjdqYkLP/jsjv/47I7/+Pv+X/n3OU/8Kbp//359r///Lj///y4/// + 7tP//+Wx///jrP//57z///He///y4///8uP/7NfS/7qRpf+hc4z/o4KG/6Jzjf/Foa//9uXb///v2f// + 57r//+Os///jrP//46z//+Os///jrP//46z/99mq/8KWn/+gdaD/kL/n/47I7/+OyO//mY+z/59sjdme + bI4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG2NaZ5ylP2TsNX/jsjv/47H7v+XmLz/qnmR/+TEq/// + 7M////Lj///y4///8uP//+3O///ls///46z//+jB//7v3P/o0s//s4mf/6F4iv+oon7/rcB1/6eagP+g + c4v/wZys/+/b1P//79j//+a2///jrP//46z//+Os///jrP//46z//+Os/+TBpv+reZr/l5rE/47I7/+O + yO//k6/U/55yk/2fbI5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yNu5qEp/+QveT/jsjv/5C84f+c + fqD/wJWa//zfq///5LH//+7U///y4///8uP///Lh///sz///5LH//uKt/+DBr/+wg5v/onuJ/6quev+v + x3P/r8py/67Fc/+pp3z/onKO/7eNov/s19L//+7V///mt///46z//+Os///jrP//46z//+Os//zeq//A + lJ//nX+q/5C85P+OyO//kL3j/5qEpv+fbI64AAAAAAAAAAAAAAAAAAAAAAAAAACcbI0Qn22O+peavf+O + x+7/jsjv/5Wix/+fcZL/6dLK///pwP//5K7//+Sx///sz///8uH///Lj///y4//55s7/z6ed/6R0jf+j + g4b/rcB1/6/Jcv+vyXL/r8py/6/Jcv+vyXL/q7B5/6J+iP+ldpL/4cnI//vq1f//57r//+Os///jrP// + 46z//+Os///jrP/oxqf/oHKd/5akzf+OyO//jsft/5eZvf+fbY75nG2PDwAAAAAAAAAAAAAAAAAAAACf + a4xFnnOV/5Sozf+OyO//j8Tq/5iStf+qe5f//e/h///w3P//6cD//+Os///ls///7M////Lj//Ti2f/L + qbT/onON/6WRg/+tvnb/rsJ0/6iifv+rsXn/rsZz/6mnfP+pp3z/r8hy/6u1eP+kh4b/qXqW/9W3vf/5 + 6NP//+a2///jrP//46z//+Os///jrP/836z/qnia/5mSvf+PxOv/jsjv/5Sozf+ec5T/n22OQwAAAAAA + AAAAAAAAAAAAAACfa41wnXmb/5K02f+OyO//kLzj/5uDpf+/l6L///Lj///y4///8d7//+i7///jrP// + 5LH/8tzJ/7+Yqf+icY//p5qA/67Cdf+uyHP/pY+E/6BxjP+mkoL/rb91/6OFhv+gc4v/qKF+/6/Hc/+t + v3X/pIqE/6Z1k//HpLD//ezT///mtv//46z//+Os///jrP//46z/v5Ke/5yEr/+QveX/jsjv/5Kz2f+d + eZr/n2yNbgAAAAAAAAAAAAAAAAAAAACebIyZnH6g/5C+5f+OyO//kbfc/513mf/Vrp7//+rI///x4P// + 8uP///He///pwP/z1Kr/rHyR/6F5iv+pqHz/r8ly/6y5d/+jhYb/pXOQ/6Ryjv+lj4P/rb52/6OEh/+m + dpP/o3OP/6aSg/+tv3X/rsV0/6ecf/+gdIv/v5mq//fk0f//57r//+Os///jrP//46z/1Kyi/554pP+R + t9//jsjv/5C95P+cfqD/oG2NlwAAAAAAAAAAAAAAAAAAAACfbI2tm4Kk/4/F6/+OyO//krPZ/55wkf/g + vKL//+Sw///qyP//8eD///Lj///w3P/cvLD/oHOL/6mlff+vyHP/q7N4/6ODhv+pe5X/0rG0/7SHl/+l + j4P/rb52/6OEh/+/mKn/y6m0/6Z4k/+ki4X/rb91/67Gc/+ml4H/q32Y/+jSzv//79n//+a2///jrP// + 46z/37ql/6Bynf+StNz/jsjv/4/F6/+bgaP/oG2NqwAAAAAAAAAAAAAAAAAAAACfbI25m4am/4/S8v+O + y/D/krHX/59tjv/lw6T//+Os///ksP//6sj///Lj///y4//bv8D/oXiK/6uzef+rtXj/onqJ/61/mf/f + xsf/8uDW/7eNof+lj4P/rb52/6OEh//Dnq3/+eve/9S3vf+nd5P/pImE/6y7dv+pp33/q32Y/+fRzv// + 8uP//+7V///mtv//46z/5cKm/6Fumv+Tstr/jsvx/4/S8/+bhqf/n2yNuAAAAAAAAAAAAAAAAAAAAACf + bI25m4en/5Db9/+P3fn/k8De/59tjv/lw6T//+Os///jrP//46z//+rI///x4P/bwMP/oHWK/6WQg/+h + dYv/uo6Y/+3UxP//8eH/8+HY/7eOo/+lj4P/rb52/6OEh//Dm6H///He///y4//n0c7/q32X/6J7if+l + joP/q32Y/+fRzv//8uP///Lj///v2f//57r/5cKn/6Fvmv+TwuL/j935/4/b9/+bh6f/n2yNuAAAAAAA + AAAAAAAAAAAAAACfbI2tm4al/5DY9P+P3fn/k8Pg/55xkv/gvKL//+Os///jrP//46z//+Sw///qyP/b + v7//n22N/6Fwjv+8kp7/8tOo///ls///7M//8+HY/7eOo/+lj4P/rb52/6OEh//DmJn//+jB///w3P// + 8uP/48vK/7SJoP+gb43/q32Y/+fRzv//8uP///Lj///y4///79n/372t/6Bznv+TxOT/j935/5DX8/+b + haX/oG2NqwAAAAAAAAAAAAAAAAAAAACebIyZnIKi/5HR7f+P3fn/ksfk/514mf/Vrp7//+Os///jrP// + 46z//+Os///ksP/dvrH/oW+P/8Oerf/y39P//+i7///jrP//5LH/893J/7eOo/+lj4P/rb52/6OEh//D + mJn//+Ou///owf//8d7//vDi/+vX0f+1i6H/q32Y/+jSzv//8uP///Lj///y4///8uP/1LO9/557pf+S + yOf/j935/5HQ7f+cgqL/oG2NlwAAAAAAAAAAAAAAAAAAAACfa41wnXyc/5LE4f+P3fn/kc7r/5uHp/+/ + lZj//+Os///jrP//46z//+Os///jrP/736v/5cm3//zt3f//8uP///He///pwP//5K7/89Wr/7eLmv+l + j4P/rb52/6OEh//DnKX//+Wx///jrP//57z///He///y4//769//5tDN//zu4f//8uP///Lj///y4/// + 8uP/v5iw/5yJsf+Rz+3/j935/5PE4f+dfJz/n2yNbgAAAAAAAAAAAAAAAAAAAACgbYxFnnWV/5W21P+P + 3fn/kNfz/5mYt/+qeZH//eCr///jrP//46z//+Os///jrP//46z//+Sw///qyP//8eD///Lj///w3P// + 6cD/89So/7eKlf+lj4P/rb52/6OEh//Dnq3//+3O///ls///46z//+jB///w3P//8uP///Lj///y4/// + 8uP///Lj///y4//87uH/qnqf/5qbwP+Q2PX/j935/5W20/+edZX/oGyNQwAAAAAAAAAAAAAAAAAAAACd + bo4Qn26O+pekwv+P2/f/j9z4/5aty/+fcpL/6cil///jrP//46z//+Os///jrP//46z//+Os///ksP// + 6sj///Lj///y4///8d7/89m3/7eKlf+lj4P/rb52/6OEh//Dnq3///Lh///tzv//5bH//+Ou///owf// + 8d7///Lj///y4///8uP///Lj///y4//o0tD/oHOd/5aw0v+P3fn/j9v3/5ekwv+fbY75nG2PDwAAAAAA + AAAAAAAAAAAAAAAAAAAAoGyNvJuKqv+R0Oz/j935/5HL6P+cgaH/wJWY//zfq///46z//+Os///jrP// + 46z//+Os///jrP//46z//+rI///x4P//8uP/8+HW/7eMnf+lj4P/rb52/6OEh//Dnq3///Lj///y4/// + 7tP//+Wx///jrP//57z///He///y4///8uP///Lj//zt4P/AmbH/nYOr/5HO7P+P3fn/kc/s/5uJqf+f + bI25AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyOaZ50lP2Tv9z/j935/4/c+P+Yn77/qnqQ/+XDo/// + 46z//+Os///jrP//46z//+Os///jrP//46z//+Sw///qyP//8eD/8+HY/7eOo/+lj4P/rb52/6OEh//D + naj///Lj///y4///8uP//+3O///ls///46z//+jB///w3P//8uP///Lj/+XNzv+se6D/mKTI/4/d+f+P + 3fn/k77c/55zlP2ebI1nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGyNMJ9sjdmYmLf/j935/4/d+f+R + z+z/n3ST/8KXmP/32an//+Os///jrP//46z//+Os///jrP//46z//+Os///ksP//6sj/8+HY/7eOo/+i + gYf/qJ1//6F6if/DmZz//+7U///y4///8uP///Lh///tzv//5bH//+Ou///owf//8d7/9+fd/8Kcsv+g + d6H/kdLv/4/d+f+P3fn/mZi3/59sjdmfbI0vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnW+QB59sjYOf + bo/5kcnm/4/d+f+P3fn/lq3L/59ykv/Pp53//uGs///jrP//46z//+Os///jrP//46z//+Os///jrP// + 46z/9t7A/8Oeq/+sfpn/rH6Z/6x+l//QqJ3//+Sx///sz///8uH///Lj///y4///7tP//+Sx///jrP/+ + 5bz/z628/6F0nv+WsdT/j935/4/d+f+RyeX/n26P+Z9sjYGfbooHAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJ5tjDKfbI3VmZW0/5DW8v+P3fn/kNPv/5mVtP+kdZH/37yi//7irP//46z//+Os///jrP// + 46z//+Os///jrP//46z//uOv//LZvf/p0sz/6dPP/+nSzP/33rz//+Os///ls///7M////Lj///y4/// + 8uP//+zP//7ks//gu6b/pXad/5qZv/+Q1PL/j935/5DW8v+ZlLP/n22N1qBsjTIAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJxrjASebY52nnWV/5W00f+P3Pj/j935/5LL6P+bhaX/rH2S/9+7ov/+ + 4av//+Os///jrP//46z//+Os///jrP//46z//+Os///ksP//6sj///Lj///y4///8d7//+e8///jrP// + 5LH//+7U///y4///8uP//vDg/+HDvv+ufZz/nYmx/5LN7P+P3fn/j9z4/5Wz0f+edZX/n22NdaJsiwQA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSbZIEnmyNup17m/2Uv9z/j935/4/d+f+R + 0u//m4al/6R1kf/Pp53/99mp///jrP//46z//+Os///jrP//46z//+Os///jrP//46z//+rI///x4P// + 8uP///He///pwP//5K7//+Sx///sz///8uH/3MDH/6V2nv+cirL/kNXy/4/d+f+P3fn/k77b/517m/2g + bY66qoCAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn22MN59sjdGc + hKT/kc7q/4/d+f+P3fn/ksvn/5mVtP+fcpL/wJaY/+PBo//73qv//+Os///jrP//46z//+Os///jrP// + 46z//+Sw///qyP//8eD///Lj///w3P//6cH//OCr//basf/z6dP/sbvS/5mgxf+Rzuz/j935/4/d+f+R + zer/nIOj/59sjdCgbY02AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnm2MBZ9sjFOfbI3kmo+u/5HO6v+P3fn/j935/5DT7/+Vrsz/n3OS/6l5kP+/lJj/58Wk//zgq/// + 46z//+Os///jrP//46z//+Os///ksP//6sj///Lj///y4//s1s//wZWi/7WMof+pzd3/ktr2/5DY9f+P + 3fn/j935/5HN6v+ajq7/n2yN46BrjVKha44FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACga45Hn2yN45yEpP+Uvtz/j9z4/4/d+f+P3fn/kdDs/5igv/+c + gaH/n3GS/6h3kP++kZf/0que/965ov/iv6P/5cKk/925of/XsZ//7N/M/+Hl4v+tk7P/nYOs/5eoy/+Q + 1fL/j935/4/d+f+P3Pj/lL7c/5yDo/+fbI3lnm2ORgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn2yNUp9sjdGdepr+lbPR/5DW8v+P + 3fn/j935/4/c+P+SzOj/lq3L/5mYt/+ch6b/nniY/59wkf+fbI3/n2yN/59xkv+deZn/o8XW/5je9f+T + yOf/kc/s/4/d+f+P3fn/j935/5DW8v+Vs9H/nXub/Z9sjdCfbI1VAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnm2MBZ9tjTee + bI26nnWV/5mVtP+Ryeb/j935/4/d+f+P3fn/j9z4/5DX8/+Rzuv/ksfk/5PD4P+Twd7/k8He/5PD4P+S + x+T/j9n1/4/d+f+P3fn/j935/4/d+f+P3fn/ksnm/5qVs/+edZX/n2yNuZ5sjTafbYwFAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACSbZIEnm2Odp9sjdafbo/5mJi3/5O/3P+R0Oz/j9z4/4/d+f+P3fn/j935/4/d+f+P + 3fn/j935/4/d+f+P3fn/j935/4/d+f+P2/f/kdDs/5O/3P+ZmLf/n26P+Z9sjdWgbI12km2SBAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmmPBJ5sjTOfbI2Dn2yN2p5zlP2biqr/l6XD/5W21P+T + xOH/kdHt/5DX9P+Q2/f/kNv3/5DX8/+R0e3/k8Th/5W21P+XpML/m4qq/55zlP2fbI3Zn2yNgp9sjDKi + bIsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdb5AHoGyNMJ9sjWmg + bIy7n26O+p51lf+dfJz/nIKi/5uFpf+bh6f/m4en/5uFpf+cgqL/nXyc/551lf+fbo76n2yNu59sjmif + a40vnW+QBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAn2mIEZ9sjEWgbIxvnmyMmZ9sja2fbI25n2yNuZ9sja2ebIyZoGyMb59sjUWb + bY8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//wAP/ + /wAA//wAAD//AAD/8AAAD/8AAP/gAAAH/wAA/4AAAAH/AAD/gAAAAf8AAP8AAAAA/wAA/AAAAAA/AAD8 + AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAA + BwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADA + AAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADgAAAAAAcAAOAAAAAA + BwAA4AAAAAAHAADwAAAAAA8AAPAAAAAADwAA+AAAAAAfAAD8AAAAAD8AAPwAAAAAPwAA/wAAAAD/AAD/ + gAAAAf8AAP+AAAAB/wAA/+AAAAf/AAD/8AAAD/8AAP/8AAA//wAA///AA///AAD///////8AAP////// + /wAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoG+NEZ9sjUWfbI1on2yNep9sjXqf + bI1on2yNRaBvjREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbooJoXCQa59tjsaecJH9m4Om/5iRtP+X + mLz/l5i8/5iRtP+bg6b/nnCS/Z9sjcWfbI5nnGqOCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqgIACn22NZZ9tjumaiaz/k67T/4/G7f+O + yO//jsjv/47I7/+OyO//jsjv/47I7/+Pxu3/k67T/5qJrP+ebY7ooG2NY6qAgAIAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoWuOFKBtjbmcgaP/kbfd/47I7/+O + yO//jsju/4/D6v+OyO//kbfc/5G33P+OyO//j8Pq/47I7/+OyO//jsjv/5G23P+bgKL/n2yNuJ9sjBQA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjh+fbI3al5e6/47H7v+O + yO//jsjv/5DK7/+uv9f/qYij/+jm0v/Lp5//y6ef/+jfu/+phZz/rrzK/5DK7v+Oxu3/jsjv/47H7v+X + l7v/n2yN2aBsjR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfbYwVn2yN2pWgxf+O + yO//jsjv/4/J7/+ihqX/4dDQ//zu4f+8laf///Lj/+3Uwv/tzKb//+Os/7+Ul//84Kv/4caq/6KCnv+P + ye//jsjv/47I7/+VoMX/n2yN2Z9sjBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkm2SAp9sjbmX + l7v/jsjv/4/F7P+XwOD/4+fg/+LJyf/WuL7///Lj///y4///8uP///Lj///ryP//46z//+Os///jrP/Z + tKD/4r+j/+Pevf+Yu93/j8Xs/47I7/+Xl7v/n2yNuKqAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg + bI5km4Cj/47H7v+Ox+7/moms/8ylnf//5bP///Dc///y4///8uP///Lj///y4///8uP///Lj///ryP// + 46z//+Os///jrP//46z//+Os/8qfof+bibT/jsju/47H7v+bgaP/n22NZAAAAAAAAAAAAAAAAAAAAAAA + AAAAnW+QCp9tjumRt93/jsjv/5aewf+3jaP//e7a///ls///5bP///Dc///y4///8uP///Lj/+TMyv/G + orD/+uzf///ryP//46z//+Os///jrP//46z//eCs/7iJnf+Xnsf/jsjv/5G23P+ebY7onGqOCQAAAAAA + AAAAAAAAAAAAAACgbY1pmoqs/47I7/+QveP/o3SS//Th0///8uP///Dc///ls///5bP///Dc///y4//V + uL7/onaM/6WMhP+xhZ3/8+HY///rx///46z//+Os///jrP//46z/9NWq/6R1nP+QvuX/jsjv/5qJrP+e + bI5nAAAAAAAAAAAAAAAAAAAAAJ9sjceTrtT/jsjv/5iTtv/NpZ3//+Wz///w3P//8uP///Dc///ls//9 + 4rP/xaGu/6J+iP+tvnb/r8py/6iiff+oeZT/6dPQ///ryP//46z//+Os///jrP//46z/zaSi/5mUvv+O + yO//k67T/59sjcUAAAAAAAAAAAAAAACebIwSnnGS/Y7G7f+Ox+7/n3OU//Th0///5bP//+Wz///w3P// + 8uP/+ObW/7eKlf+kiYX/rsZz/6/Ic/+vynL/r8hz/6qvev+jdY7/3MHE///rx///46z//+Os///jrP/0 + 1ar/oHSf/47H7v+Pxu3/nnCR/Z5tjhEAAAAAAAAAAJ9rjUabhKb/jsjv/5K02f+yhZr///Lj///w3P// + 5bP//+Wz/+/az/+sfpj/p5iB/6/Ic/+mk4L/pIeF/6y1eP+hdYr/rLd4/6y7d/+ieon/zKu1//7qx/// + 46z//+Os///jrP+ygpz/krXd/47I7/+bg6b/n2yNRAAAAAAAAAAAn2yNapiStf+OyO//laTI/8Wamf// + 6sj///Lj///w3P/y1a//pXaO/6mofP+uxnP/pIeF/619kv+jhIf/q7N5/6h5lf+kdpD/qq17/67DdP+j + g4f/yKSx///rx///46z//+Os/8WZn/+Vpc7/jsjv/5iRtP+fbI1oAAAAAAAAAACfbI16l56//47L8P+W + m7//zaWc///jrP//6sj///Lj/+fQyv+jhIf/rcF1/6J/iP/GorD/5s7J/6OEh/+rs3n/t46j/+zY0v+p + e5b/qKJ9/6uzef+3jqP///Lj///rx///46z/zqWh/5edxv+Oy/H/l56//59sjXkAAAAAAAAAAJ9sjXqY + osD/j935/5elxP/Nppz//+Os///jrP//6sj/59HO/6F5if+ieYr/062h///w3P/n0c7/o4SH/6uzef+3 + i5n///Dc//Xk2v+vgpv/o4OG/7eOo///8uP///Lj///rx//OpaL/mKjL/4/d+f+XosD/n2yNeQAAAAAA + AAAAn2yNapmauf+P3fn/lq/O/8Wamf//46z//+Os///jrP/oy7b/onGQ/9/Ewf//5bP//+Wz/+fPx/+j + hIf/q7N5/7eKlf//5bP///Dc//rq3v+4j6P/uI6j///y4///8uP///Lj/8Wdr/+WstT/j935/5mauf+f + bI1oAAAAAAAAAACfa41Gm4mp/4/d+f+Tw+D/soST///jrP//46z//+Os//3hrP/y2r////Lj///w3P// + 5bP/58ao/6OEh/+rs3n/t42f///ls///5bP///Dc//3v4f/z4dj///Lj///y4///8uP/soWm/5PF5f+P + 3fn/m4mo/59sjUUAAAAAAAAAAKBujRKecpL9j9v3/5Da9/+fdJT/9Nap///jrP//46z//+Os///jrP// + 6sj///Lj///w3P/nx6v/o4SH/6uzef+3jqP///Dc///ls///5bP///Dc///y4///8uP///Lj//Ti2v+g + daD/j9v4/5Db9/+ecZL9nm2OEQAAAAAAAAAAAAAAAJ9sjceUvtv/j935/5mauf/NpZz//+Os///jrP// + 46z//+Os///jrP//6sj///Lj/+fQyv+jhIf/q7N5/7eOo///8uP///Dc///ls///5bP///Dc///y4/// + 8uP/zqy8/5mdwv+P3fn/lL3a/59sjcUAAAAAAAAAAAAAAAAAAAAAoGyNaJqQsP+P3fn/kc3q/6N1kf/1 + 1qn//+Os///jrP//46z//+Os///jrP//6sj/59HO/6J9iP+ooH7/t4uZ///w3P//8uP///Dc///ls/// + 5bP///Dc//Tj2v+ldp//kdDu/4/d+f+akK//nmyNaAAAAAAAAAAAAAAAAAAAAACdb5AKn22O6ZLI5f+P + 3fn/l6TD/7eKlf/94az//+Os///jrP//46z//+Os///jrP/y2L3/uZCk/7mQpP/PqaD//+Wz///w3P// + 8uP///Dc///ls//94rP/uI2q/5eozP+P3fn/ksjl/59tjuifbooJAAAAAAAAAAAAAAAAAAAAAAAAAACe + bI5knIal/4/c+P+P2/f/moyr/8CVmP/94Kv//+Os///jrP//46z//+Os///jrP//6sj///Lj///w3P// + 5bP//+Wz///w3P//8uP//e7b/8KWoP+cj7b/j9z4/4/c+P+chqX/oG6NZQAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJJtkgKfbI25mKLB/4/d+f+Q2PX/m4yr/7eKlf/01an//+Os///jrP//46z//+Os///jrP// + 6sj///Lj///w3P//5bP//+Wz///w3P/Gobb/m5C3/5DZ9v+P3fn/mKHA/6BtjbmqgIACAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJ5tjBWfbI3alq3L/4/d+f+P3Pj/l6XD/6N0kf/MpJz/89So///jrP// + 46z//+Os///jrP//6sj///Lj//fk1v/PpqP/wsbH/5TT7/+P3Pj/j935/5asy/+fbI3aoWuOFAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBrjiCfbI3amKHA/4/b9/+P3fn/kc7q/5mauf+f + c5T/sIGT/8OYmf/Mo5z/zaWc/8Wbmf/Z29P/r7LM/5mewv+R0/D/j935/4/c+P+YocD/n2yN3J5tjh8A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5tjBWfbI25m4al/5LI5f+P + 3fn/j935/4/b9/+Tw9//lq7N/5elxP+XpcT/lrDO/5DY9P+P3fn/j935/4/d+f+SyOX/nIal/59sjbmf + bYwVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgKf + bI1ln22O6ZqQsP+Tvdv/j9v3/4/d+f+P3fn/j935/4/d+f+P3fn/j935/4/b9/+Uvdv/mpCw/59tjumg + bI1lkm2SAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACdb5AKoGyNaZ9sjceecpL9m4mp/5mauf+YosD/mKLA/5mauf+bian/nnKS/Z9sjcaf + bI1onW+QCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ9rihKgbIxGn2yNaZ9sjXqfbI16n2yNaaBsjEad + bY4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + //////AP//+AAf/+AAB//AAAP/gAAB/wAAAP4AAAB+AAAAfAAAADwAAAA8AAAAOAAAABgAAAAYAAAAGA + AAABgAAAAYAAAAGAAAABgAAAAcAAAAPAAAADwAAAA+AAAAfgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf// + 8A///////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACgbY0Vn2yNOJ9sjTigbY0VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAqoCAAJ9tjlaaiq3MlaHF/pOu0/+TrtP/laDF/pmKrcqfbY5VqoCAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAnm2OCJx8nqmSsdf/j8jv/5201P+1w8//tcHJ/52z0P+PyO7/krHX/5x8nqmgbI0IAAAAAAAAAAAA + AAAAkm2SAJx8nqmQveT/ps7n/862v//u2tP/+urb//rfsf/uzqf/z6+j/6bK3v+QveT/nHyeqaqAgAAA + AAAAAAAAAJ9tjlaSsdf/nZ+///LXt///7tT///Lj//jo3f/w287//+Wz///jrP/x0an/np7B/5Kx1/+f + bY5VAAAAAAAAAACaiq3Lkbje/9m4rf//8eD//+i9//DZyP+xmpL/q5+E/+HGwf//5bP//+Os/9m0pf+R + uOD/mYqtygAAAACfa40WlaHF/pydvf/86tH//+i9/+TMyP+snYP/qqp7/6qvev+ppX7/0rSy///ls//8 + 36v/nZzB/5Whxf6fbY4Vn2yNOZOx1f+voK///+rI//bizv+omYH/rpuM/7aUmv+tm4r/uZ2d/6mnfP/f + xMD//+Wz/7Cgtf+TsdX/n2yNOJ9sjTmUvtv/sKWy///jrP/z2r7/sYmZ//Tauf/Fqqj/sZ6I//zq0f/B + oKn/28DD///w3P+wp7z/k73b/59sjTifbI0Wlq3L/p2lv//84Kv//+Os//zmxv//7tP/xaWY/7Ggjf// + 6L3//+3T//zu4P/87uH/nafI/5aty/6fbI0VAAAAAJqRsMuSyOX/2bWg///jrP//46z//+rI/8Woqv+w + m43///Hg///ovf//7tT/2b7G/5LK6P+akbDLAAAAAAAAAACfbY5Wk8Lf/56lvv/uzqf//+Os///jrP/q + zbX/4cfB///ovf//8eD/79O4/5+oyf+Twd//n22OVgAAAAAAAAAAkm2SAJyAoKqR0Oz/nqW//9i0oP/8 + 36v//+Os///qyP/969L/5NC+/6G41f+R0O3/nICgqaqAgAAAAAAAAAAAAAAAAACga44InICgqpPC3/+S + yOX/nKS//6+ksf+wpbL/qtHj/5LL6f+Twt//nICgqp5tjggAAAAAAAAAAAAAAAAAAAAAAAAAAJJtkgCf + bY5WmpGwy5aty/6Uvdv/lL3b/5aty/6akbDLn22NVpJtkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACfbIwWn2yNOZ9sjTmfbIwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/D8AAOAHAADA + AwAAgAEAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAgAEAAMADAADgBwAA/D8AAA== + + + \ No newline at end of file diff --git a/GSecPs3Decrypter.csproj b/GSecPs3Decrypter.csproj new file mode 100644 index 0000000..a340c3f --- /dev/null +++ b/GSecPs3Decrypter.csproj @@ -0,0 +1,127 @@ + + + + + Debug + AnyCPU + {246200F0-C813-4898-BCD8-9B3338735928} + WinExe + GSecPs3Decrypter + GSecPs3Decrypter + v4.7.2 + 512 + true + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + icon.ico + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.7.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/GSecPs3Decrypter.csproj.user b/GSecPs3Decrypter.csproj.user new file mode 100644 index 0000000..337aec9 --- /dev/null +++ b/GSecPs3Decrypter.csproj.user @@ -0,0 +1,13 @@ + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/GSecPs3Decrypter.sln b/GSecPs3Decrypter.sln new file mode 100644 index 0000000..4cc042b --- /dev/null +++ b/GSecPs3Decrypter.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29519.181 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GSecPs3Decrypter", "GSecPs3Decrypter.csproj", "{246200F0-C813-4898-BCD8-9B3338735928}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {246200F0-C813-4898-BCD8-9B3338735928}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {246200F0-C813-4898-BCD8-9B3338735928}.Debug|Any CPU.Build.0 = Debug|Any CPU + {246200F0-C813-4898-BCD8-9B3338735928}.Release|Any CPU.ActiveCfg = Release|Any CPU + {246200F0-C813-4898-BCD8-9B3338735928}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4E0E8636-2078-46B4-B5BA-6DAD4688CE4A} + EndGlobalSection +EndGlobal diff --git a/PS3FileSystem/Delegates.cs b/PS3FileSystem/Delegates.cs new file mode 100644 index 0000000..68abc92 --- /dev/null +++ b/PS3FileSystem/Delegates.cs @@ -0,0 +1,32 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +namespace PS3FileSystem +{ + public enum MessageType + { + Info, + Warning, + Error + } + + public delegate void PS3Action(object sender, string message, MessageType type); +} \ No newline at end of file diff --git a/PS3FileSystem/Functions.cs b/PS3FileSystem/Functions.cs new file mode 100644 index 0000000..1cd8d81 --- /dev/null +++ b/PS3FileSystem/Functions.cs @@ -0,0 +1,280 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Threading; +using System.Windows.Forms; + +namespace PS3FileSystem +{ + internal static class Functions + { + public static string[] StaticKeys => new[] + { + "syscon_manager_key=D413B89663E1FE9F75143D3BB4565274", + "keygen_key=6B1ACEA246B745FD8F93763B920594CD53483B82", + "savegame_param_sfo_key=0C08000E090504040D010F000406020209060D03", + "trophy_param_sfo_key=5D5B647917024E9BB8D330486B996E795D7F4392", + "tropsys_dat_key=B080C40FF358643689281736A6BF15892CFEA436", + "tropusr_dat_key=8711EFF406913F0937F115FAB23DE1A9897A789A", + "troptrns_dat_key=91EE81555ACC1C4FB5AAE5462CFE1C62A4AF36A5", + "tropconf_sfm_key=E2ED33C71C444EEBC1E23D635AD8E82F4ECA4E94", + "fallback_disc_hash_key=D1C1E10B9C547E689B805DCD9710CE8D" + }; + + public static ushort SwapByteOrder(this ushort value) + { + return (ushort) ((value & 0xFFU) << 8 | (value & 0xFF00U) >> 8); + } + + public static uint SwapByteOrder(this uint value) + { + return (value & 0x000000FFU) << 24 | (value & 0x0000FF00U) << 8 | + (value & 0x00FF0000U) >> 8 | (value & 0xFF000000U) >> 24; + } + + public static ulong SwapByteOrder(this ulong value) + { + return + ((value & 0xff00000000000000L) >> 56) | + ((value & 0x00ff000000000000L) >> 40) | + ((value & 0x0000ff0000000000L) >> 24) | + ((value & 0x000000ff00000000L) >> 8) | + ((value & 0x00000000ff000000L) << 8) | + ((value & 0x0000000000ff0000L) << 24) | + ((value & 0x000000000000ff00L) << 40) | + ((value & 0x00000000000000ffL) << 56); + } + + public static bool CompareBytes(byte[] a, byte[] b) + { + if (a.Length != b.Length) + return false; + for (var i = 0; i < a.Length; i++) + { + if (a[i] != b[i]) + return false; + } + return true; + } + + public static byte[] DecryptWithPortability(byte[] iv, byte[] data, int data_size) + { + var x = new AesCryptoServiceProvider(); + x.Mode = CipherMode.CBC; + x.Padding = PaddingMode.Zeros; + var key = GetStaticKey("syscon_manager_key"); + if (iv.Length != 16) + Array.Resize(ref iv, 16); + return x.CreateDecryptor(key, iv).TransformFinalBlock(data, 0, data_size); + } + + public static byte[] EncryptWithPortability(byte[] iv, byte[] data, int data_size) + { + var x = new AesCryptoServiceProvider(); + x.Mode = CipherMode.CBC; + x.Padding = PaddingMode.Zeros; + var key = GetStaticKey("syscon_manager_key"); + if (iv.Length != 16) + Array.Resize(ref iv, 16); + return x.CreateEncryptor(key, iv).TransformFinalBlock(data, 0, data_size); + } + + public static byte[] StringToByteArray(this string hex) + { + if (hex.Length%2 != 0) hex = hex.PadLeft(hex.Length + 1, '0'); + return Enumerable.Range(0, hex.Length) + .Where(x => x%2 == 0) + .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) + .ToArray(); + } + + public static byte[] GetStaticKey(string name) + { + foreach (var line in StaticKeys) + { + var x = line.Split('=')[0]; + if (x.ToLower() == name.ToLower()) + { + var value = line.Split('=')[1]; + return StringToByteArray(value); + } + } + return null; + } + + private static SecureFileInfo[] xDownloadAldosGameConfig() + { + try + { + var text = new WebClient().DownloadString("http://ps3tools.aldostools.org/games.conf"); + if (text == null || text.Length < 100) + return new SecureFileInfo[] {}; + return ReadConfigFromtext(text); + } + catch + { + return new SecureFileInfo[] {}; + } + } + + public static SecureFileInfo[] ReadConfigFromtext(string inputtext) + { + var files = new List(); + using (var sr = new StringReader(inputtext)) + { + string line; + var s = line = sr.ReadLine(); + while (s != null && sr.Peek() > -1 && !s.Equals("; -- UNPROTECTED GAMES --")) + Application.DoEvents(); + + var s1 = line = sr.ReadLine(); + while (s1 != null && sr.Peek() > -1 && s1.StartsWith(";")) + files.Add(new SecureFileInfo(line.Replace(";", ""), "", "", "", false)); + + while (sr.Peek() > -1) + { + var s2 = line = sr.ReadLine(); + while (s2 != null && sr.Peek() > -1 && s2.StartsWith(";")) + { + if (line != null) + { + var name = line.Replace(";", ""); + var s3 = line = sr.ReadLine(); + if (s3 != null && s3.StartsWith("[")) + { + var id = line; + var readLine = sr.ReadLine(); + if (readLine != null) + { + var diskhashkey = readLine.Split('=')[1]; + var secureid = readLine.Split('=')[1]; + files.Add(new SecureFileInfo(name, id, secureid, diskhashkey, + !string.IsNullOrEmpty(secureid) && secureid.Length == 32)); + } + } + } + } + } + sr.Close(); + } + return files.ToArray(); + } + + public static SecureFileInfo[] DownloadAldosGameConfig() + { + SecureFileInfo[] x = {}; + var t = new Thread(() => x = xDownloadAldosGameConfig()); + t.Start(); + while (t.ThreadState != ThreadState.Stopped) + Application.DoEvents(); + return x; + } + + public static byte[] GetHMACSHA1(byte[] key, byte[] data, int start, int length) + { + return new HMACSHA1(key).ComputeHash(data, start, length); + } + + public static byte[] CalculateFileHMACSha1(string file, byte[] key) + { + byte[] hash; + using (var fs = new FileStream(file, FileMode.Open)) + { + hash = new HMACSHA1(key).ComputeHash(fs); + fs.Close(); + } + return hash; + } + + public static byte[] CalculateFileHMACSha1(Stream input, byte[] key) + { + return new HMACSHA1(key).ComputeHash(input); + } + + public static byte[] Decrypt(byte[] key, byte[] input, int length) + { + Array.Resize(ref key, 16); + var x1 = Aes.Create(); + x1.Key = key; + x1.BlockSize = 128; + x1.Mode = CipherMode.ECB; + x1.Padding = PaddingMode.Zeros; + var x2 = Aes.Create(); + x2.Key = key; + x1.BlockSize = 128; + x2.Mode = CipherMode.ECB; + x2.Padding = PaddingMode.Zeros; + var nums = length/16; + var output = new byte[length]; + for (var i = 0; i < nums; i++) + { + var blockdata = new byte[16]; + Array.Copy(input, i*16, blockdata, 0, 16); + var offset = i*16; + var buffer = new byte[16]; + Array.Copy(BitConverter.GetBytes(SwapByteOrder((ulong) i)), 0, buffer, 0, 8); + buffer = x1.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length); + blockdata = x2.CreateDecryptor().TransformFinalBlock(blockdata, 0, blockdata.Length); + for (var j = 0; j < 16; j++) + blockdata[j] ^= buffer[j]; + Array.Copy(blockdata, 0, output, i*16, 16); + } + return output; + } + + public static byte[] Encypt(byte[] key, byte[] input, int length) + { + Array.Resize(ref key, 16); + var x1 = Aes.Create(); + x1.Key = key; + x1.BlockSize = 128; + x1.Mode = CipherMode.ECB; + x1.Padding = PaddingMode.Zeros; + var x2 = Aes.Create(); + x2.Key = key; + x1.BlockSize = 128; + x2.Mode = CipherMode.ECB; + x2.Padding = PaddingMode.Zeros; + var nums = length/16; + var output = new byte[length]; + for (var i = 0; i < nums; i++) + { + var blockdata = new byte[16]; + Array.Copy(input, i*16, blockdata, 0, 16); + var offset = i*16; + var buffer = new byte[16]; + Array.Copy(BitConverter.GetBytes(SwapByteOrder((ulong) i)), 0, buffer, 0, 8); + buffer = x1.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length); + for (var j = 0; j < 16; j++) + blockdata[j] ^= buffer[j]; + blockdata = x2.CreateEncryptor().TransformFinalBlock(blockdata, 0, blockdata.Length); + Array.Copy(blockdata, 0, output, i*16, 16); + } + return output; + } + } +} \ No newline at end of file diff --git a/PS3FileSystem/PARAM_SFO.cs b/PS3FileSystem/PARAM_SFO.cs new file mode 100644 index 0000000..ce48033 --- /dev/null +++ b/PS3FileSystem/PARAM_SFO.cs @@ -0,0 +1,344 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace PS3FileSystem +{ + public class PARAM_SFO + { + public enum DataTypes : uint + { + GameData = 0x4744, + SaveData = 0x5344, + AppPhoto = 0x4150, + AppMusic = 0x414D, + AppVideo = 0x4156, + BroadCastVideo = 0x4256, + AppleTV = 4154, + WebTV = 5754, + CellBE = 0x4342, + Home = 0x484D, + StoreFronted = 0x5346, + HDDGame = 0x4847, + DiscGame = 0x4447, + AutoInstallRoot = 0x4152, + DiscPackage = 0x4450, + ExtraRoot = 0x5852, + VideoRoot = 0x5652, + ThemeRoot = 0x5452, + DiscMovie = 0x444D, + None + } + + public enum FMT : ushort + { + UTF_8 = 0x0400, + ASCII = 0x0402, + UINT32 = 0x0404 + } + + public PARAM_SFO(string filepath) + { + Init(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)); + } + + public PARAM_SFO(byte[] inputdata) + { + Init(new MemoryStream(inputdata)); + } + + public PARAM_SFO(Stream input) + { + Init(input); + } + + public Table[] Tables { get; private set; } + + public string AccountID + { + get + { + if (Tables == null) + return ""; + foreach (var t in Tables) + if (t.Name.ToLower() == "account_id") + return t.Value; + return ""; + } + } + + public DataTypes DataType + { + get + { + if (Tables == null) + return DataTypes.None; + foreach (var t in Tables) + if (t.Name == "CATEGORY") + return (DataTypes) BitConverter.ToUInt16(Encoding.UTF8.GetBytes(t.Value), 0); + return DataTypes.None; + } + } + + public string Detail + { + get + { + if (Tables == null) + return ""; + foreach (var t in Tables) + if (t.Name == "DETAIL") + return t.Value; + return ""; + } + } + + public uint ParentalControl + { + get + { + if (Tables == null) + return 0; + foreach (var t in Tables) + if (t.Name == "PARENTAL_LEVEL") + return uint.Parse(t.Value); + return 0; + } + } + + public string DirectoryName + { + get + { + if (Tables == null) + return ""; + foreach (var t in Tables) + if (t.Name == "SAVEDATA_DIRECTORY") + return t.Value; + return ""; + } + } + + public string TitleID + { + get + { + var name = DirectoryName; + if (name == "") + return ""; + return name.Split('-')[0]; + } + } + + public string SubTitle + { + get + { + if (Tables == null) + return ""; + foreach (var t in Tables) + if (t.Name == "SUB_TITLE") + return t.Value; + return ""; + } + } + + public string Title + { + get + { + if (Tables == null) + return ""; + foreach (var t in Tables) + if (t.Name == "TITLE") + return t.Value; + return ""; + } + } + + private string ReadValue(BinaryReader br, index_table table) + { + br.BaseStream.Position = Header.DataTableStart + table.param_data_offset; + switch (table.param_data_fmt) + { + case FMT.ASCII: + return Encoding.ASCII.GetString(br.ReadBytes((int) table.param_data_max_len)).Replace("\0", ""); + case FMT.UINT32: + return br.ReadUInt32().ToString(); + case FMT.UTF_8: + return Encoding.UTF8.GetString(br.ReadBytes((int) table.param_data_max_len)).Replace("\0", ""); + default: + return null; + } + } + + private string ReadName(BinaryReader br, index_table table) + { + br.BaseStream.Position = Header.KeyTableStart + table.param_key_offset; + var name = ""; + while ((byte) br.PeekChar() != 0) + name += br.ReadChar(); + br.BaseStream.Position++; + return name; + } + + private void Init(Stream input) + { + using (var br = new BinaryReader(input)) + { + Header.Read(br); + if (!Functions.CompareBytes(Header.Magic, new byte[] {0, 0x50, 0x53, 0x46})) + throw new Exception("Invalid PARAM.SFO Header Magic"); + var tables = new List(); + for (var i = 0; i < Header.IndexTableEntries; i++) + { + var t = new index_table(); + t.Read(br); + tables.Add(t); + } + var xtables = new List(); + var count = 0; + foreach (var t in tables) + { + var x = new Table(); + x.index = count; + x.Indextable = t; + x.Name = ReadName(br, t); + x.Value = ReadValue(br, t); + count++; + xtables.Add(x); + } + Tables = xtables.ToArray(); + br.Close(); + } + } + + public struct Header + { + public static byte[] Magic = {0, 0x50, 0x53, 0x46}; + public static byte[] version = {01, 01, 0, 0}; + public static uint KeyTableStart; + public static uint DataTableStart; + public static uint IndexTableEntries; + + private static byte[] Buffer + { + get + { + var header = new byte[20]; + Array.Copy(Magic, 0, header, 0, 4); + Array.Copy(version, 0, header, 4, 4); + Array.Copy(BitConverter.GetBytes(KeyTableStart), 0, header, 8, 4); + Array.Copy(BitConverter.GetBytes(DataTableStart), 0, header, 12, 4); + Array.Copy(BitConverter.GetBytes(IndexTableEntries), 0, header, 16, 4); + return header; + } + } + + public static void Read(BinaryReader input) + { + input.BaseStream.Seek(0, SeekOrigin.Begin); + input.Read(Magic, 0, 4); + input.Read(version, 0, 4); + KeyTableStart = input.ReadUInt32(); + DataTableStart = input.ReadUInt32(); + IndexTableEntries = input.ReadUInt32(); + } + } + + public struct Table + { + public int index; + public index_table Indextable; + public string Name; + public string Value; + + private byte[] NameBuffer + { + get + { + var buffer = new byte[Name.Length + 1]; + Array.Copy(Encoding.UTF8.GetBytes(Name), 0, buffer, 0, Name.Length); + return buffer; + } + } + + private byte[] ValueBuffer + { + get + { + byte[] buffer; + switch (Indextable.param_data_fmt) + { + case FMT.ASCII: + buffer = new byte[Indextable.param_data_max_len]; + Array.Copy(Encoding.ASCII.GetBytes(Value), 0, buffer, 0, Value.Length); + return buffer; + case FMT.UINT32: + return BitConverter.GetBytes(uint.Parse(Value)); + case FMT.UTF_8: + buffer = new byte[Indextable.param_data_max_len]; + Array.Copy(Encoding.UTF8.GetBytes(Value), 0, buffer, 0, Value.Length); + return buffer; + default: + return null; + } + } + } + } + + public struct index_table + { + public FMT param_data_fmt; /* param_data data type */ + public uint param_data_len; /* param_data used bytes */ + public uint param_data_max_len; /* param_data total reserved bytes */ + public uint param_data_offset; /* param_data offset (relative to start offset of data_table) */ + public ushort param_key_offset; /* param_key offset (relative to start offset of key_table) */ + + private byte[] Buffer + { + get + { + var data = new byte[16]; + Array.Copy(BitConverter.GetBytes(param_key_offset), 0, data, 0, 2); + Array.Copy(BitConverter.GetBytes(((ushort) param_data_fmt).SwapByteOrder()), 0, data, 2, 2); + Array.Copy(BitConverter.GetBytes(param_data_len), 0, data, 4, 4); + Array.Copy(BitConverter.GetBytes(param_data_max_len), 0, data, 8, 4); + Array.Copy(BitConverter.GetBytes(param_data_offset), 0, data, 12, 4); + return data; + } + } + + public void Read(BinaryReader input) + { + param_key_offset = input.ReadUInt16(); + param_data_fmt = (FMT) input.ReadUInt16().SwapByteOrder(); + param_data_len = input.ReadUInt32(); + param_data_max_len = input.ReadUInt32(); + param_data_offset = input.ReadUInt32(); + } + } + } +} \ No newline at end of file diff --git a/PS3FileSystem/Param_PFD.cs b/PS3FileSystem/Param_PFD.cs new file mode 100644 index 0000000..202f014 --- /dev/null +++ b/PS3FileSystem/Param_PFD.cs @@ -0,0 +1,1196 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace PS3FileSystem +{ + public class Param_PFD + { + #region static variables + + internal static bool pfd_istropy = false; + internal static byte[] pfdheaderkey = new byte[16]; + internal static byte[] pfdkey = new byte[16]; + internal static byte[] pfdhashkey = new byte[20]; + internal static byte[] pfdhash = new byte[20]; + internal static byte[] entrykey = new byte[64]; + internal static byte[] realkey = new byte[20]; + internal static byte[] consoleid = new byte[32]; + internal static byte[] userid = {0, 0, 0, 0, 0, 0, 0, 1}; + internal static byte[] securefileid; + internal static byte[] authenticationid = {0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03}; + + internal static byte[] dischashkey = + { + 0xD1, 0xC1, 0xE1, 0x0B, 0x9C, 0x54, 0x7E, 0x68, 0x9B, 0x80, 0x5D, 0xCD, + 0x97, 0x10, 0xCE, 0x8D + }; + + #endregion + + #region internal/Private methods + + internal byte[] GenerateHashkeyForSFO(int hashindex) + { + if (hashindex > 3) + return null; + switch (hashindex) + { + case 0: + return Functions.GetStaticKey("savegame_param_sfo_key"); + case 1: + return ConsoleID; + case 2: + return DiscHashKey; + case 3: + return AuthenticationID; + default: + return null; + } + } + + internal byte[] GerateHashKeyForSecureFileID(byte[] secureid) + { + if (secureid.Length != 16) + throw new Exception("SecureFileID must be 16 bytes in length"); + var key = new byte[20]; + Array.Copy(secureid, 0, key, 0, 16); + for (int i = 0, j = 0; i < key.Length; i++) + { + switch (i) + { + case 1: + key[i] = 11; + break; + case 2: + key[i] = 15; + break; + case 5: + key[i] = 14; + break; + case 8: + key[i] = 10; + break; + default: + key[i] = secureid[j++]; + break; + } + } + return key; + } + + internal byte[] GetEntryHashKey(PFDEntry entry, int hashindex) + { + switch (entry.file_name.ToLower()) + { + case "param.sfo": + return GenerateHashkeyForSFO(hashindex); + case "tropsys.dat": + return Functions.GetStaticKey("tropsys_dat_key"); + case "tropusr.dat": + return Functions.GetStaticKey("tropusr_dat_key"); + case "troptrns.dat": + return Functions.GetStaticKey("troptrns_dat_key"); + case "tropconf.sfm": + return Functions.GetStaticKey("tropconf_sfm_key"); + default: + return GerateHashKeyForSecureFileID(SecureFileID); + } + } + + internal byte[] GetEntryKey(PFDEntry entry) + { + var key = GetEntryHashKey(entry, 0); + return Functions.DecryptWithPortability(key, entry.key, entry.key.Length); + } + + internal byte[] GetTopHash() + { + var buffer = PFDHashTable.Buffer; + buffer = Functions.GetHMACSHA1(realkey, buffer, 0, buffer.Length); + return buffer; + } + + internal byte[] GetBottomHash() + { + var buffer = PFDEntrySignatureTable.Buffer; + buffer = Functions.GetHMACSHA1(realkey, buffer, 0, buffer.Length); + return buffer; + } + + internal byte[] GetDefaultHash() + { + return new HMACSHA1(realkey).ComputeHash(new byte[] {}); + } + + internal ulong CalculateHashTableEntryIndex(string name) + { + var len = name.Length; + ulong hash = 0; + for (var i = 0; i < len; ++i) + hash = (hash << 5) - hash + (byte) name[i]; + return hash%PFDHashTable.capacity; + ; + } + + internal void Init(Stream input) + { + DoProgress("Initializing Param.PFD stream..", MessageType.Info); + using (var br = new BinaryReader(input)) + { + PFDHeader.magic = br.ReadUInt64().SwapByteOrder(); + if (PFDHeader.magic != 0x50464442ul) + { + DoProgress("Invalid PFD File!", MessageType.Error); + throw new Exception("Invalid PFD File!"); + } + PFDHeader.version = br.ReadUInt64().SwapByteOrder(); + if (PFDHeader.version != 3ul && PFDHeader.version != 4ul) + { + DoProgress("Unsupported PFD version!", MessageType.Error); + throw new Exception("Unsupported PFD version!"); + } + DoProgress("Allocating Header Data..", MessageType.Info); + pfdheaderkey = br.ReadBytes(16); + var header = br.ReadBytes(64); + header = Functions.DecryptWithPortability(pfdheaderkey, header, header.Length); + PFDSignature.bottom_hash = new byte[20]; + Array.Copy(header, 0, PFDSignature.bottom_hash, 0, 20); + PFDSignature.top_hash = new byte[20]; + Array.Copy(header, 20, PFDSignature.top_hash, 0, 20); + PFDSignature.hash_key = new byte[20]; + Array.Copy(header, 40, PFDSignature.hash_key, 0, 20); + PFDSignature.padding = new byte[4]; + Array.Copy(header, 60, PFDSignature.padding, 0, 4); + header = null; + + if (PFDHeader.version == 4ul) + realkey = Functions.GetHMACSHA1(Functions.GetStaticKey("keygen_key"), PFDSignature.hash_key, 0, 20); + else + realkey = PFDSignature.hash_key; + DoProgress("Reading Entries..", MessageType.Info); + PFDHashTable.capacity = br.ReadUInt64().SwapByteOrder(); + PFDHashTable.num_reserved = br.ReadUInt64().SwapByteOrder(); + PFDHashTable.num_used = br.ReadUInt64().SwapByteOrder(); + PFDHashTable.entries = new List(); + DoProgress("Reading table capicity (" + PFDHashTable.capacity + " entries)..", MessageType.Info); + for (ulong i = 0; i < PFDHashTable.capacity; i++) + PFDHashTable.entries.Add(br.ReadUInt64().SwapByteOrder()); + + PFDEntries.entries = new List(); + DoProgress("Reading used tables (" + PFDHashTable.num_used + " entries)..", MessageType.Info); + for (ulong i = 0; i < PFDHashTable.num_used; i++) + { + var x = new PFDEntry(); + x.additional_index = br.ReadUInt64().SwapByteOrder(); + x.file_name = Encoding.ASCII.GetString(br.ReadBytes(65)).Replace("\0", ""); + x.__padding_0 = br.ReadBytes(7); + x.key = br.ReadBytes(64); + x.file_hashes = new List(); + for (var j = 0; j < 4; j++) + x.file_hashes.Add(br.ReadBytes(20)); + x.__padding_1 = br.ReadBytes(40); + x.file_size = br.ReadUInt64().SwapByteOrder(); + PFDEntries.entries.Add(x); + } + var offset = + (long) + ((ulong) br.BaseStream.Position + 0x110*(PFDHashTable.num_reserved - PFDHashTable.num_used)); + br.BaseStream.Position = offset; + PFDEntrySignatureTable.hashes = new List(); + DoProgress("Reading file table hashes (" + PFDHashTable.capacity + " entries)..", MessageType.Info); + for (ulong i = 0; i < PFDHashTable.capacity; i++) + PFDEntrySignatureTable.hashes.Add(br.ReadBytes(20)); + br.Close(); + } + } + + internal static int AlignedSize(int size) + { + return (size + 16 - 1) & ~(16 - 1); + } + + internal byte[] GetEntryHash(int entryindex) + { + if (entryindex >= PFDEntries.entries.Count) + throw new Exception("entryindex is out of bounds"); + var ent = PFDEntries.entries[entryindex]; + var tableindex = CalculateHashTableEntryIndex(ent.file_name); + var currententryindex = PFDHashTable.entries[(int) tableindex]; + + if (currententryindex < PFDHashTable.num_reserved) + { + var sha1 = new HMACSHA1(realkey); + var hashdata = new List(); + while (currententryindex < PFDHashTable.num_reserved) + { + ent = PFDEntries.entries[(int) currententryindex]; + hashdata.AddRange(ent.HashData); + currententryindex = ent.additional_index; + } + sha1.ComputeHash(hashdata.ToArray()); + hashdata.Clear(); + return sha1.Hash; + } + return null; + } + + private void DoProgress(string message, MessageType type) + { + ProgressChanged?.Invoke(this, message, type); + } + + internal struct PFDEntries + { + internal static List entries; + } + + /// + /// A PFD Entry contains child file info + /// + public class PFDEntry + { + internal byte[] __padding_0; + internal byte[] __padding_1; + internal ulong additional_index; + internal List file_hashes; + internal string file_name; + internal ulong file_size; + internal byte[] key; + + internal byte[] EntryData + { + get + { + var ms = new MemoryStream(); + using (var bw = new BinaryWriter(ms)) + { + bw.Write(additional_index.SwapByteOrder()); + var name = new byte[65]; + Array.Copy(Encoding.ASCII.GetBytes(file_name), 0, name, 0, file_name.Length); + bw.Write(name, 0, name.Length); + bw.Write(__padding_0, 0, __padding_0.Length); + bw.Write(key, 0, key.Length); + for (var i = 0; i < file_hashes.Count; i++) + bw.Write(file_hashes[i], 0, file_hashes[i].Length); + bw.Write(__padding_1, 0, __padding_1.Length); + bw.Write(file_size.SwapByteOrder()); + return ms.ToArray(); + } + } + } + + internal byte[] HashData + { + get + { + var ms = new MemoryStream(); + using (var bw = new BinaryWriter(ms)) + { + var name = new byte[65]; + Array.Copy(Encoding.ASCII.GetBytes(file_name), 0, name, 0, file_name.Length); + bw.Write(name, 0, name.Length); + bw.Write(key, 0, key.Length); + for (var i = 0; i < file_hashes.Count; i++) + bw.Write(file_hashes[i], 0, file_hashes[i].Length); + bw.Write(__padding_1, 0, __padding_1.Length); + bw.Write(file_size.SwapByteOrder()); + return ms.ToArray(); + } + } + } + } + + internal struct PFDEntrySignatureTable + { + internal static List hashes = new List(); + + internal static byte[] Buffer + { + get + { + var buffer = new byte[hashes.Count*20]; + for (var i = 0; i < hashes.Count; i++) + Array.Copy(hashes[i], 0, buffer, i*20, 20); + return buffer; + } + } + } + + internal struct PFDHashTable + { + public static ulong capacity; + public static ulong num_reserved; + public static ulong num_used; + public static List entries = new List(); + + public static byte[] Buffer + { + get + { + var ms = new MemoryStream(); + using (var bw = new BinaryWriter(ms)) + { + bw.Write(capacity.SwapByteOrder()); + bw.Write(num_reserved.SwapByteOrder()); + bw.Write(num_used.SwapByteOrder()); + foreach (var value in entries) + bw.Write(value.SwapByteOrder()); + return ms.ToArray(); + } + } + } + } + + internal struct PFDHeader + { + internal static ulong magic; + internal static ulong version; + } + + internal struct PFDSignature + { + internal static byte[] bottom_hash; + internal static byte[] top_hash; + internal static byte[] hash_key; + internal static byte[] padding; + + internal static byte[] Buffer + { + get + { + var data = new byte[64]; + Array.Copy(bottom_hash, 0, data, 0, 20); + Array.Copy(top_hash, 0, data, 20, 20); + Array.Copy(hash_key, 0, data, 40, 20); + Array.Copy(padding, 0, data, 60, 4); + return data; + } + } + } + + #endregion + + #region Constructors + + /// + /// Initialize new PARAM.PFD Instance + /// + public Param_PFD() + { + } + + /// + /// Initialize new PARAM.PFD Instance + /// + /// the param.pfd filepath + public Param_PFD(string filepath) + { + Init(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)); + } + + /// + /// Initialize new PARAM.PFD Instance + /// + /// Param.pfd as byte array + public Param_PFD(byte[] inputdata) + { + Init(new MemoryStream(inputdata)); + } + + /// + /// Initialize new PARAM.PFD Instance + /// + /// System.IO.Stream for Param.pfd + /// nput"> + /// + public Param_PFD(Stream input) + { + Init(input); + } + + #endregion + + #region public methods + + #region Validations + + /// + /// Check if Top hash is valid, fix if needed + /// + /// set 'true' if you wish to fix it if hash is invalid + /// true if top hash is valid + public bool ValidTopHash(bool fix) + { + var hash = GetTopHash(); + if (!Functions.CompareBytes(hash, PFDSignature.top_hash)) + if (fix) + PFDSignature.top_hash = hash; + else + return false; + return true; + } + + /// + /// Check if Bottom hash is valid, fix if needed + /// + /// set 'true' if you wish to fix it if hash is invalid + /// true if bottom hash is valid + public bool ValidBottomHash(bool fix) + { + var hash = GetBottomHash(); + if (!Functions.CompareBytes(hash, PFDSignature.bottom_hash)) + if (fix) + PFDSignature.bottom_hash = hash; + else + return false; + return true; + } + + /// + /// validate all Empty bottom hashes and fix it if needed + /// + /// set 'true' if you wish to fix all invalid hashes + /// true if File CID is valid + public bool ValidFileCID(bool fix) + { + var buffer = GetDefaultHash(); + if (buffer == null) + return false; + var indexes = new List(); + foreach (var ent in PFDEntries.entries) + indexes.Add((int) CalculateHashTableEntryIndex(ent.file_name)); + for (var i = 0; i < PFDEntrySignatureTable.hashes.Count; i++) + { + if (indexes.IndexOf(i) > -1) + continue; + if (!Functions.CompareBytes(buffer, PFDEntrySignatureTable.hashes[i])) + if (fix) + PFDEntrySignatureTable.hashes[i] = buffer; + else + return false; + } + return true; + } + + /// + /// Check if File CID2 is valid, fix if needed + /// + /// set 'true' if you wish to fix it if hash is invalid + /// true if File CID2 is valid + public bool ValidDHKCID2(bool fix) + { + for (var i = 0; i < PFDEntries.entries.Count; i++) + { + var hash = GetEntryHash(i); + var index = (int) CalculateHashTableEntryIndex(PFDEntries.entries[i].file_name); + if (!Functions.CompareBytes(hash, PFDEntrySignatureTable.hashes[index])) + if (fix) + PFDEntrySignatureTable.hashes[index] = hash; + else + return false; + } + return true; + } + + /// + /// Check if entry hash is valid, fix if needed + /// + /// the input stream of the real file + /// filename that is also specified inside the Param.PFD file entries + /// set true if you wish to fix the file entry hash if invalid + /// true if file entry hash is valid + public bool ValidEntryHash(Stream input, string entryname, bool fix) + { + if (!input.CanRead || !input.CanWrite) + throw new Exception("Unable to Access stream"); + input.Position = 0; + foreach (var t in PFDEntries.entries) + { + if (entryname.ToLower() == t.file_name.ToLower()) + { + if (t.file_name.ToLower() == "param.sfo") + { + Console.WriteLine("Here!"); + } + for (var i = 0; i < 4; i++) + { + if (t.file_name.ToLower() == "param.sfo" && i != 0) + continue; + if (!pfd_istropy && i > 0) + continue; + var key = GetEntryHashKey(t, i); + key = Functions.CalculateFileHMACSha1(input, key); + if (!Functions.CompareBytes(key, t.file_hashes[i])) + if (fix) + t.file_hashes[i] = key; + else + return false; + } + + return true; + } + } + return false; + } + + /// + /// Check if entry hash is valid, fix if needed + /// + /// the filepath of the file that is specified inside the Param.PFD file entries + /// set true if you wish to fix the file entry hash if invalid + /// true if file entry hash is valid + public bool ValidEntryHash(string filepath, bool fix) + { + if (SecureFileID == null) + return false; + if (!File.Exists(filepath)) + throw new Exception(filepath + " does not exist!"); + var filename = new FileInfo(filepath).Name; + var x = false; + using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) + { + x = ValidEntryHash(fs, filename, fix); + } + return x; + } + + /// + /// Check if all entry hashes are valid, and fix them if needed + /// + /// The root directory where the PARAM.PFD and al its child files are located + /// set true if you wish to fix all invalid entry hashes + /// + /// true if all file entry hashes are valid< + public bool ValidAllEntryHashes(string rootdirectory, bool fix) + { + for (var i = 0; i < PFDEntries.entries.Count; i++) + { + var filepath = rootdirectory + "\\" + PFDEntries.entries[i].file_name; + if (!File.Exists(filepath)) + return false; + if (!ValidEntryHash(filepath, fix)) + return false; + } + return true; + } + + /// + /// Check if All Param.PFD Hashes are valid,and Fix them if needed + /// + /// The root directory where the PARAM.PFD and al its child files are located + /// set true if you wish to fix all invalid hashes + /// true if all hashes are valid + public bool ValidAllParamHashes(string rootdirectory, bool fix) + { + return ValidAllEntryHashes(rootdirectory, fix) && ValidDHKCID2(fix) && ValidFileCID(fix) && + ValidTopHash(fix) && ValidBottomHash(fix); + } + + #endregion + + /// + /// initialize new PARAM.PFD instance + /// + /// valid Param.PFD filepath + public void INIT(string filepath) + { + Init(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)); + } + + /// + /// Rebuild the Param.PFD with all changes made + /// + /// The root path where all the Entry files are stored + /// True if you wish to encrypt all files that are decrypted + /// true if PARAM.PFD is succesfully Rebuilded + public bool RebuilParamPFD(string rootdirectory, bool encryptfiles) + { + try + { + if (!File.Exists(rootdirectory + "\\PARAM.SFO")) + return false; + DoProgress("Rebuilding Param.PFD..", MessageType.Info); + if (encryptfiles) + { + DoProgress("ReEncrypting Files..", MessageType.Info); + if (EncryptAllFiles(rootdirectory) == -1) + return false; + } + DoProgress("Validating Param.PFD Hashes..", MessageType.Info); + if (!ValidAllParamHashes(rootdirectory, true)) + return false; + DoProgress("Writing new Param.PFD..", MessageType.Info); + File.WriteAllBytes(rootdirectory + "\\PARAM.PFD", GetParamPFDCombinedData()); + DoProgress("Param.PFD Rebuilding complete! Rebuilded FilePath => " + rootdirectory + "\\PARAM.PFD", + MessageType.Info); + return true; + } + catch (Exception ex) + { + DoProgress(ex.Message, MessageType.Error); + return false; + } + } + + /// + /// Combine and get the loaded PARAM.PFD file as byte array + /// + /// Compiled PARAM.PFD as a byte array + public byte[] GetParamPFDCombinedData() + { + byte[] buffer = null; + DoProgress("Rebuilding new Param.PFD..", MessageType.Info); + using (var ms = new MemoryStream()) + { + using (var bw = new BinaryWriter(ms)) + { + bw.Write(PFDHeader.magic.SwapByteOrder()); + bw.Write(PFDHeader.version.SwapByteOrder()); + bw.Write(pfdheaderkey, 0, pfdheaderkey.Length); + buffer = PFDSignature.Buffer; + buffer = Functions.EncryptWithPortability(pfdheaderkey, buffer, buffer.Length); + bw.Write(buffer, 0, buffer.Length); + buffer = PFDHashTable.Buffer; + bw.Write(buffer, 0, buffer.Length); + foreach (var t in PFDEntries.entries) + { + buffer = t.EntryData; + bw.Write(buffer, 0, buffer.Length); + } + buffer = new byte[0x110*(PFDHashTable.num_reserved - PFDHashTable.num_used)]; + bw.Write(buffer, 0, buffer.Length); + buffer = PFDEntrySignatureTable.Buffer; + bw.Write(buffer, 0, buffer.Length); + buffer = new byte[0x8000 - ms.Length]; + if (buffer.Length > 0) + bw.Write(buffer, 0, buffer.Length); + buffer = ms.ToArray(); + bw.Close(); + } + } + DoProgress("Rebuild Completed!", MessageType.Info); + return buffer; + } + + public bool EntryExists(string name) + { + if (PFDEntries.entries == null || PFDEntries.entries.Count == 0) + return false; + foreach (var ent in PFDEntries.entries) + if (ent.file_name.ToLower() == name.ToLower()) + return true; + return false; + } + + /// + /// Progress Changed event, use this to recieve any progress made by this instance + /// + public event PS3Action ProgressChanged; + + #region Properties + + public byte[] ConsoleID + { + get { return consoleid; } + set + { + if (value.Length != 32) throw new Exception("ConsoleID must be 32 bytes in length"); + consoleid = value; + } + } + + public byte[] DiscHashKey + { + get { return dischashkey; } + set + { + if (value.Length != 16) throw new Exception("DiscHashKey must be 16 bytes in length"); + dischashkey = value; + } + } + + public byte[] AuthenticationID + { + get { return authenticationid; } + set + { + if (value.Length != 8) throw new Exception("AuthenticationID must be 8 bytes in length"); + authenticationid = value; + } + } + + public byte[] SecureFileID + { + get { return securefileid; } + set + { + if (value.Length != 16) throw new Exception("SecureFileID must nbe 16 bytes in length"); + securefileid = value; + } + } + + public byte[] UserID + { + get { return userid; } + set + { + if (value.Length != 8) throw new Exception("UserID must be 8 bytes in length"); + userid = value; + } + } + + public PFDEntry[] Entries => PFDEntries.entries.ToArray(); + + #endregion + + #region Decryption + + /// + /// Decrypts System.IO.Stream into a Byte Array + /// + /// the input stream of the file that is located inside the Param.PFD Entries + /// the name of the entry that the stream belongs to + /// byte array of the decrypted file + public byte[] Decrypt(Stream stream, string entryname) + { + if (SecureFileID == null || SecureFileID.Length != 16) + { + DoProgress( + SecureFileID == null + ? "SecureFileID needed to preform the encryption!" + : "SecureFileID is not valid! length must be 16 bytes long (128bit)", MessageType.Error); + return null; + } + var ent = new PFDEntry(); + var found = false; + foreach (var t in PFDEntries.entries) + if (t.file_name.ToLower() == entryname.ToLower()) + { + ent = t; + found = true; + break; + } + if (!found) + throw new Exception("entryname does not exist inside the initialized Param.PFD"); + if (!stream.CanRead || !stream.CanWrite) + throw new Exception("Unable to Access stream"); + + if (!ValidEntryHash(stream, entryname, false)) + throw new Exception( + "Encrypted data seems to be invalid, a validated file is required for this operation"); + + var size = AlignedSize((int) stream.Length); + DoProgress("Allocating memory (" + size + " bytes)..", MessageType.Info); + var data = new byte[size]; + stream.Seek(0, SeekOrigin.Begin); + stream.Read(data, 0, data.Length); + DoProgress("Allocating decryption key..", MessageType.Info); + var key = GetEntryKey(ent); + DoProgress("Decrypting data (" + size + " bytes)..", MessageType.Info); + data = Functions.Decrypt(key, data, size); + if (data == null) + throw new Exception("Unable to decrypt data"); + DoProgress("Free memory..", MessageType.Info); + key = null; + DoProgress("Resizing data to its original size..", MessageType.Info); + Array.Resize(ref data, (int) ent.file_size); + return data; + } + + /// + /// decrypts input data + /// + /// the data to decrypt + /// the name of the entry that the data belongs to + /// true if data is succesfully decrypted + public bool Decrypt(ref byte[] inputdata, string entryname) + { + try + { + var data = Decrypt(new MemoryStream(inputdata), entryname); + if (data == null) + return false; + Array.Resize(ref inputdata, data.Length); + Array.Copy(data, 0, inputdata, 0, data.Length); + return true; + } + catch (Exception ex) + { + DoProgress(ex.Message, MessageType.Error); + return false; + } + } + + /// + /// Decrypts specified filepath, file must be located inside the Param.PFD Entries + /// + /// the filepath that should be decrypted + /// true if file is succesfully decrypted + public bool Decrypt(string filepath) + { + try + { + if (!File.Exists(filepath) || !ValidEntryHash(filepath, false)) + return false; + var name = new FileInfo(filepath).Name; + byte[] data = null; + using (var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + { + data = Decrypt(fs, name); + fs.Close(); + } + if (data != null) + File.WriteAllBytes(filepath, data); + else return false; + data = null; + return true; + } + catch (Exception ex) + { + DoProgress(ex.Message, MessageType.Error); + return false; + } + } + + /// + /// decrypts filepath to a new filepath destination + /// + /// the filepath of the file to decrypt, file must be located inside the Param.PFD Entries + /// the new filepath that you wish to use for the decrypted file + /// true if file is succesfully decrypted + public bool Decrypt(string filepath, string outpath) + { + try + { + if (!File.Exists(filepath) || !ValidEntryHash(filepath, false)) + return false; + var name = new FileInfo(filepath).Name; + var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); + var data = Decrypt(fs, name); + fs.Close(); + fs.Dispose(); + File.WriteAllBytes(outpath, data); + return true; + } + catch (Exception ex) + { + DoProgress(ex.Message, MessageType.Error); + return false; + } + } + + /// + /// Decrypt all files that are inside the specified root path, andalso availible inside one of the Param.PFD entries + /// + /// + /// the root path of the directory containing all files to be decypted, The initialized param.PFD should + /// also be in the same path + /// + /// true if all files are succesfully decrypted + public int DecryptAllFiles(string root) + { + try + { + var decrypted = 0; + foreach (var t in PFDEntries.entries) + { + if (t.file_name.ToLower() == "param.sfo") + continue; + var filepath = root + "\\" + t.file_name; + if (File.Exists(filepath)) + if (ValidEntryHash(filepath, false)) + if (Decrypt(filepath)) + decrypted++; + } + return decrypted; + } + catch (Exception ex) + { + DoProgress(ex.Message, MessageType.Error); + return -1; + } + } + + /// + /// Decrypts specified filepath into a byte array + /// + /// the filepath to decrypt, file must be located inside the Param.PFD Entries + /// byte array of the decrypted file + public byte[] DecryptToBytes(string filepath) + { + if (!File.Exists(filepath)) + return null; + var name = new FileInfo(filepath).Name; + var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); + var data = Decrypt(fs, name); + fs.Close(); + fs.Dispose(); + return data; + } + + /// + /// Decrypts specified filepath into a System.IO.Stream + /// + /// the filepath to decrypt, file must be located inside the Param.PFD Entries + /// System.IO.Stream of the decrypted file + public Stream DecryptToStream(string filepath) + { + var data = DecryptToBytes(filepath); + if (data == null) + return null; + return new MemoryStream(data); + } + + #endregion + + #region Encryption + + /// + /// Encrypt a specified System.IO.Stream to a byte array + /// + /// Input System.IO.Stream of the file to encrypt + /// the name of the entry inside the PARAM.PFD + /// a byte array of theencrypted stream + public byte[] Encrypt(Stream stream, string entryname) + { + if (SecureFileID == null || SecureFileID.Length != 16) + { + DoProgress( + SecureFileID == null + ? "SecureFileID needed to preform the encryption!" + : "SecureFileID is not valid! length must be 16 bytes long (128bit)", MessageType.Error); + return null; + } + if (ValidEntryHash(stream, entryname, false)) + { + DoProgress("File already valid, same data will be returned instead", MessageType.Info); + var data = new byte[stream.Length]; + stream.Seek(0, SeekOrigin.Begin); + stream.Read(data, 0, data.Length); + return data; + } + else + { + var ent = new PFDEntry(); + var found = false; + foreach (var t in PFDEntries.entries) + { + if (t.file_name.ToLower() == entryname.ToLower()) + { + ent = t; + found = true; + break; + } + } + if (!found) + throw new Exception("entryname does not exist inside the initialized Param.PFD"); + if (!stream.CanRead || !stream.CanWrite) + throw new Exception("Unable to Access stream"); + ent.file_size = (ulong) stream.Length; + stream.Seek(0, SeekOrigin.Begin); + var size = AlignedSize((int) stream.Length); + DoProgress("Allocating memory (" + size + " bytes)..", MessageType.Info); + var data = new byte[size]; + DoProgress("Reading stream into memory..", MessageType.Info); + stream.Read(data, 0, (int) stream.Length); + DoProgress("Allocating encryption key..", MessageType.Info); + var key = GetEntryKey(ent); + DoProgress("Encrypting Data (" + size + "bytes)..", MessageType.Info); + data = Functions.Encypt(key, data, data.Length); + if (data == null) + throw new Exception("Unable to decrypt data"); + DoProgress("Free allocated memory..", MessageType.Info); + key = null; + return data; + } + } + + /// + /// Encrypts inputdata + /// + /// the byte array of the file to encrypt + /// the the entry inside the PARAM.PFD + /// true if succesfully encrypted + public bool Encrypt(byte[] inputdata, Ps3File entry) + { + try + { + entry.PFDEntry.file_size = (ulong) inputdata.Length; + var data = Encrypt(new MemoryStream(inputdata), entry.PFDEntry.file_name); + if (data == null) + return false; + File.WriteAllBytes(entry.FilePath, data); + data = null; + return true; + } + catch + { + return false; + } + } + + /// + /// Encrypts specified filepath + /// + /// the filepath to encrypt, file must be in the same directory as the PARAM.PFD + /// true if file is succesfully encrypted + public bool Encrypt(string filepath) + { + try + { + if (!File.Exists(filepath)) + { + DoProgress(filepath + " Does not exist!", MessageType.Error); + return false; + } + var name = new FileInfo(filepath).Name; + if (!EntryExists(name)) + { + DoProgress("There is no \"" + name + "\" inside the PARAM.PFD Entries!", MessageType.Error); + return false; + } + DoProgress("Initializing file stream..", MessageType.Info); + byte[] data = null; + using (var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + { + for (var i = 0; i < PFDEntries.entries.Count; i++) + { + if (PFDEntries.entries[i].file_name.ToLower() == name.ToLower()) + { + var t = PFDEntries.entries[i]; + t.file_size = (ulong) fs.Length; + PFDEntries.entries[i] = t; + break; + } + } + + data = Encrypt(fs, name); + //DoProgress("Rehashing PARAM.PFD..", MessageType.Info); + //bool x = ValidEntryHash(fs, name, true) && ValidFileCID(true) && ValidDHKCID2(true) && ValidBottomHash(true); + fs.Dispose(); + } + if (data == null) + return false; + DoProgress("Writing Encrypted data to : " + filepath, MessageType.Info); + File.WriteAllBytes(filepath, data); + DoProgress(name + " is succesfully encrypted", MessageType.Info); + return true; + } + catch (Exception ex) + { + DoProgress(ex.Message, MessageType.Error); + return false; + } + } + + /// + /// Encrypts specified filepath into a new filepath + /// + /// the filepath of the file to encrypt, path must be in the same location as the PARAM.PFD + /// the new filepath to encrypt the file to + /// true if file is succesfully encrypted + public bool Encrypt(string filepath, string newfilepath) + { + try + { + if (!File.Exists(filepath)) + return false; + var name = new FileInfo(filepath).Name; + DoProgress("Encrypting " + name + "..", MessageType.Info); + var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); + var data = Encrypt(fs, name); + fs.Close(); + fs.Dispose(); + DoProgress("Encrypting " + name + "..", MessageType.Info); + File.WriteAllBytes(newfilepath, data); + if (filepath == newfilepath) + return ValidEntryHash(filepath, true); + return true; + } + catch + { + return false; + } + } + + public int EncryptAllFiles(string root) + { + try + { + var encrypted = 0; + for (var i = 0; i < PFDEntries.entries.Count; i++) + { + var t = PFDEntries.entries[i]; + if (t.file_name.ToLower() == "param.sfo") + continue; + var filepath = root + "\\" + t.file_name; + if (File.Exists(filepath)) + { + if (!ValidEntryHash(filepath, false)) + { + if (Encrypt(filepath)) + { + if (!ValidEntryHash(filepath, true)) + return -1; + encrypted++; + } + } + } + } + return encrypted; + } + catch + { + return -1; + } + } + + public byte[] EncryptToBytes(string filepath) + { + if (!File.Exists(filepath)) + return null; + var name = new FileInfo(filepath).Name; + var fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); + var data = Encrypt(fs, name); + fs.Close(); + fs.Dispose(); + return data; + } + + public Stream EncryptToStream(string filepath) + { + var data = EncryptToBytes(filepath); + if (data == null) + return null; + return new MemoryStream(data); + } + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/PS3FileSystem/Ps3File.cs b/PS3FileSystem/Ps3File.cs new file mode 100644 index 0000000..466f215 --- /dev/null +++ b/PS3FileSystem/Ps3File.cs @@ -0,0 +1,75 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +using System.IO; + +namespace PS3FileSystem +{ + public class Ps3File + { + public Ps3File(string filepath, Param_PFD.PFDEntry entry, Ps3SaveManager manager) + { + FilePath = filepath; + PFDEntry = entry; + Manager = manager; + } + + public string FilePath { get; } + public Param_PFD.PFDEntry PFDEntry { get; private set; } + public Ps3SaveManager Manager { get; } + public bool IsEncrypted => Manager.Param_PFD.ValidEntryHash(FilePath, false); + + public bool Decypt() + { + return Manager.Param_PFD.Decrypt(FilePath); + } + + public byte[] DecryptToBytes() + { + return Manager.Param_PFD.DecryptToBytes(FilePath); + } + + public Stream DecryptToStream() + { + return Manager.Param_PFD.DecryptToStream(FilePath); + } + + public bool Encrypt() + { + return Manager.Param_PFD.Encrypt(FilePath); + } + + public bool Encrypt(byte[] data) + { + return Manager.Param_PFD.Encrypt(data, this); + } + + public byte[] EncryptToBytes() + { + return Manager.Param_PFD.EncryptToBytes(FilePath); + } + + public Stream EncryptToStream() + { + return Manager.Param_PFD.EncryptToStream(FilePath); + } + } +} \ No newline at end of file diff --git a/PS3FileSystem/Ps3SaveManager.cs b/PS3FileSystem/Ps3SaveManager.cs new file mode 100644 index 0000000..8c5eb1c --- /dev/null +++ b/PS3FileSystem/Ps3SaveManager.cs @@ -0,0 +1,135 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +using System; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace PS3FileSystem +{ + public class Ps3SaveManager + { + public static SecureFileInfo[] GameConfigList; + + public Ps3SaveManager(string savedir, byte[] securefileid) + { + if (!Directory.Exists(savedir)) + throw new Exception("No such directory exist!"); + if (!File.Exists(savedir + "\\PARAM.PFD")) + throw new Exception("Missing PARAM.PFD, Please load a valid directory"); + if (!File.Exists(savedir + "\\PARAM.SFO")) + throw new Exception("Missing PARAM.SFO, Please load a valid directory"); + Param_PFD = new Param_PFD(savedir + "\\PARAM.PFD"); + Param_SFO = new PARAM_SFO(savedir + "\\PARAM.SFO"); + if (securefileid != null) + Param_PFD.SecureFileID = securefileid; + RootPath = savedir; + if (File.Exists(savedir + "\\ICON0.PNG")) + { + //prevent file lock,reading to memory instead. + SaveImage = Image.FromStream(new MemoryStream(File.ReadAllBytes(savedir + "\\ICON0.PNG"))); + } + + Files = (from ent in Param_PFD.Entries + let x = new FileInfo(savedir + "\\" + ent.file_name) + where x.Extension.ToUpper() != ".PFD" && x.Extension.ToUpper() != ".SFO" + select new Ps3File(savedir + "\\" + ent.file_name, ent, this)).ToArray(); + } + + public string RootPath { get; } + public Param_PFD Param_PFD { get; } + public PARAM_SFO Param_SFO { get; private set; } + public Ps3File[] Files { get; private set; } + public Image SaveImage { get; private set; } + + public int DecryptAllFiles() + { + try + { + if (Param_PFD == null || !Directory.Exists(RootPath)) + return -1; + return Param_PFD.DecryptAllFiles(RootPath); + } + catch + { + return -1; + } + } + + public int EncryptAllFiles() + { + try + { + if (Param_PFD == null || !Directory.Exists(RootPath)) + return -1; + var x = Param_PFD.EncryptAllFiles(RootPath); + if (x > 0) + return x; + return -1; + } + catch + { + return -1; + } + } + + public bool ReBuildChanges() + { + return Param_PFD.RebuilParamPFD(RootPath, false); + } + + public bool ReBuildChanges(bool encryptfiles) + { + return Param_PFD.RebuilParamPFD(RootPath, encryptfiles); + } + + public int LoadGameConfigFile(string filepath) + { + try + { + var text = ""; + using ( + var sr = new StreamReader(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read))) + { + text = sr.ReadToEnd(); + sr.Close(); + } + return (GameConfigList = Functions.ReadConfigFromtext(text)).Length; + } + catch + { + return -1; + } + } + + private byte[] GetSecureFileIdFromConfigFile(string titleid) + { + if (GameConfigList == null || GameConfigList.Length == 0) + return null; + return (from i in GameConfigList + from s in i.GameIDs + where s.ToLower() == titleid.ToLower() + where i.SecureFileID != null && i.SecureFileID.Length == 32 + select i.SecureFileID.StringToByteArray()).FirstOrDefault(); + } + } +} \ No newline at end of file diff --git a/PS3FileSystem/SecureFileInfo.cs b/PS3FileSystem/SecureFileInfo.cs new file mode 100644 index 0000000..cda125f --- /dev/null +++ b/PS3FileSystem/SecureFileInfo.cs @@ -0,0 +1,41 @@ +/* Copyright (c) 2013 - 2014 Jappi88 (Jappi88 at Gmail dot com) +* +* This(software Is provided) 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications*, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledge in the product documentation is required. +* +* 2. Altered source versions must be plainly marked as such, and must not +* be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +* *Contact must be made to discuses permission and terms. +*/ + +namespace PS3FileSystem +{ + public class SecureFileInfo + { + public SecureFileInfo(string name, string id, string securefileid, string dischashkey, bool isprotected) + { + Name = name; + GameIDs = id.Trim('[', ']').Split('/'); + SecureFileID = securefileid; + DiscHashKey = dischashkey; + Protected = isprotected; + } + + public string Name { get; set; } + public string[] GameIDs { get; set; } + public string SecureFileID { get; set; } + public string DiscHashKey { get; set; } + public bool Protected { get; set; } + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..60bc6d1 --- /dev/null +++ b/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace GSecPs3Decrypter +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b5dbb6f --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("GSecPs3Decrypter")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("GSecPs3Decrypter")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("246200f0-c813-4898-bcd8-9b3338735928")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0c75b62 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,93 @@ +//------------------------------------------------------------------------------ +// +// 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 GSecPs3Decrypter.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GSecPs3Decrypter.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _lock { + get { + object obj = ResourceManager.GetObject("_lock", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icon { + get { + object obj = ResourceManager.GetObject("icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap unlock { + get { + object obj = ResourceManager.GetObject("unlock", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..e673115 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\unlock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\lock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..84e1b15 --- /dev/null +++ b/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 GSecPs3Decrypter.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/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Resources/icon.png b/Resources/icon.png new file mode 100644 index 0000000..dae2f3e Binary files /dev/null and b/Resources/icon.png differ diff --git a/Resources/lock.png b/Resources/lock.png new file mode 100644 index 0000000..377c4a6 Binary files /dev/null and b/Resources/lock.png differ diff --git a/Resources/unlock.png b/Resources/unlock.png new file mode 100644 index 0000000..63e21bc Binary files /dev/null and b/Resources/unlock.png differ diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000..168d1b0 Binary files /dev/null and b/icon.ico differ