diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..412eeda
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,22 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs diff=csharp
+*.sln merge=union
+*.csproj merge=union
+*.vbproj merge=union
+*.fsproj merge=union
+*.dbproj merge=union
+
+# Standard to msysgit
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b9d6bd9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,215 @@
+#################
+## Eclipse
+#################
+
+*.pydevproject
+.project
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+
+#################
+## Visual Studio
+#################
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+*.pubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+#############
+## Windows detritus
+#############
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac crap
+.DS_Store
+
+
+#############
+## Python
+#############
+
+*.py[co]
+
+# Packages
+*.egg
+*.egg-info
+dist/
+build/
+eggs/
+parts/
+var/
+sdist/
+develop-eggs/
+.installed.cfg
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+.coverage
+.tox
+
+#Translations
+*.mo
+
+#Mr Developer
+.mr.developer.cfg
diff --git a/Batch.Designer.cs b/Batch.Designer.cs
index 61752f2..e67b3e8 100644
--- a/Batch.Designer.cs
+++ b/Batch.Designer.cs
@@ -1,163 +1,163 @@
-namespace ImgRip
-{
- partial class Batch
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.lblFrom = new System.Windows.Forms.Label();
- this.lblCaption = new System.Windows.Forms.Label();
- this.lblTo = new System.Windows.Forms.Label();
- this.btnSet = new System.Windows.Forms.Button();
- this.udTo = new System.Windows.Forms.NumericUpDown();
- this.udFrom = new System.Windows.Forms.NumericUpDown();
- ((System.ComponentModel.ISupportInitialize)(this.udTo)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.udFrom)).BeginInit();
- this.SuspendLayout();
- //
- // lblFrom
- //
- this.lblFrom.AutoSize = true;
- this.lblFrom.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.lblFrom.ForeColor = System.Drawing.Color.Teal;
- this.lblFrom.Location = new System.Drawing.Point(9, 55);
- this.lblFrom.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
- this.lblFrom.Name = "lblFrom";
- this.lblFrom.Size = new System.Drawing.Size(48, 19);
- this.lblFrom.TabIndex = 1;
- this.lblFrom.Text = "From:";
- //
- // lblCaption
- //
- this.lblCaption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.lblCaption.AutoSize = true;
- this.lblCaption.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.lblCaption.ForeColor = System.Drawing.SystemColors.Highlight;
- this.lblCaption.Location = new System.Drawing.Point(85, 11);
- this.lblCaption.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
- this.lblCaption.Name = "lblCaption";
- this.lblCaption.Size = new System.Drawing.Size(156, 23);
- this.lblCaption.TabIndex = 2;
- this.lblCaption.Text = "Range of pages";
- //
- // lblTo
- //
- this.lblTo.AutoSize = true;
- this.lblTo.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.lblTo.ForeColor = System.Drawing.Color.Teal;
- this.lblTo.Location = new System.Drawing.Point(177, 55);
- this.lblTo.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
- this.lblTo.Name = "lblTo";
- this.lblTo.Size = new System.Drawing.Size(30, 19);
- this.lblTo.TabIndex = 4;
- this.lblTo.Text = "To:";
- //
- // btnSet
- //
- this.btnSet.AutoSize = true;
- this.btnSet.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.btnSet.ForeColor = System.Drawing.Color.Teal;
- this.btnSet.Location = new System.Drawing.Point(113, 94);
- this.btnSet.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.btnSet.Name = "btnSet";
- this.btnSet.Size = new System.Drawing.Size(100, 36);
- this.btnSet.TabIndex = 5;
- this.btnSet.Text = "Submit";
- this.btnSet.UseVisualStyleBackColor = true;
- this.btnSet.Click += new System.EventHandler(this.btnSet_Click);
- //
- // udTo
- //
- this.udTo.Increment = new decimal(new int[] {
- 5,
- 0,
- 0,
- 0});
- this.udTo.Location = new System.Drawing.Point(217, 50);
- this.udTo.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.udTo.Maximum = new decimal(new int[] {
- 0,
- 0,
- 0,
- 0});
- this.udTo.Name = "udTo";
- this.udTo.Size = new System.Drawing.Size(100, 29);
- this.udTo.TabIndex = 8;
- //
- // udFrom
- //
- this.udFrom.Location = new System.Drawing.Point(67, 50);
- this.udFrom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.udFrom.Maximum = new decimal(new int[] {
- 0,
- 0,
- 0,
- 0});
- this.udFrom.Name = "udFrom";
- this.udFrom.Size = new System.Drawing.Size(100, 29);
- this.udFrom.TabIndex = 7;
- //
- // Batch
- //
- this.AcceptButton = this.btnSet;
- this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange;
- this.ClientSize = new System.Drawing.Size(326, 142);
- this.Controls.Add(this.udTo);
- this.Controls.Add(this.udFrom);
- this.Controls.Add(this.btnSet);
- this.Controls.Add(this.lblTo);
- this.Controls.Add(this.lblCaption);
- this.Controls.Add(this.lblFrom);
- this.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
- this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "Batch";
- this.ShowInTaskbar = false;
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "Batch Download";
- this.TopMost = true;
- ((System.ComponentModel.ISupportInitialize)(this.udTo)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.udFrom)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.Label lblFrom;
- private System.Windows.Forms.Label lblCaption;
- private System.Windows.Forms.Label lblTo;
- private System.Windows.Forms.Button btnSet;
- private System.Windows.Forms.NumericUpDown udFrom;
- private System.Windows.Forms.NumericUpDown udTo;
- }
+namespace ImgRip
+{
+ partial class Batch
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.lblFrom = new System.Windows.Forms.Label();
+ this.lblCaption = new System.Windows.Forms.Label();
+ this.lblTo = new System.Windows.Forms.Label();
+ this.btnSet = new System.Windows.Forms.Button();
+ this.udTo = new System.Windows.Forms.NumericUpDown();
+ this.udFrom = new System.Windows.Forms.NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)(this.udTo)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.udFrom)).BeginInit();
+ this.SuspendLayout();
+ //
+ // lblFrom
+ //
+ this.lblFrom.AutoSize = true;
+ this.lblFrom.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lblFrom.ForeColor = System.Drawing.Color.Teal;
+ this.lblFrom.Location = new System.Drawing.Point(9, 55);
+ this.lblFrom.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
+ this.lblFrom.Name = "lblFrom";
+ this.lblFrom.Size = new System.Drawing.Size(48, 19);
+ this.lblFrom.TabIndex = 1;
+ this.lblFrom.Text = "From:";
+ //
+ // lblCaption
+ //
+ this.lblCaption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lblCaption.AutoSize = true;
+ this.lblCaption.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lblCaption.ForeColor = System.Drawing.SystemColors.Highlight;
+ this.lblCaption.Location = new System.Drawing.Point(85, 11);
+ this.lblCaption.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.lblCaption.Name = "lblCaption";
+ this.lblCaption.Size = new System.Drawing.Size(156, 23);
+ this.lblCaption.TabIndex = 2;
+ this.lblCaption.Text = "Range of pages";
+ //
+ // lblTo
+ //
+ this.lblTo.AutoSize = true;
+ this.lblTo.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lblTo.ForeColor = System.Drawing.Color.Teal;
+ this.lblTo.Location = new System.Drawing.Point(177, 55);
+ this.lblTo.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
+ this.lblTo.Name = "lblTo";
+ this.lblTo.Size = new System.Drawing.Size(30, 19);
+ this.lblTo.TabIndex = 4;
+ this.lblTo.Text = "To:";
+ //
+ // btnSet
+ //
+ this.btnSet.AutoSize = true;
+ this.btnSet.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.btnSet.ForeColor = System.Drawing.Color.Teal;
+ this.btnSet.Location = new System.Drawing.Point(113, 94);
+ this.btnSet.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.btnSet.Name = "btnSet";
+ this.btnSet.Size = new System.Drawing.Size(100, 36);
+ this.btnSet.TabIndex = 5;
+ this.btnSet.Text = "Submit";
+ this.btnSet.UseVisualStyleBackColor = true;
+ this.btnSet.Click += new System.EventHandler(this.btnSet_Click);
+ //
+ // udTo
+ //
+ this.udTo.Increment = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 0});
+ this.udTo.Location = new System.Drawing.Point(217, 50);
+ this.udTo.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.udTo.Maximum = new decimal(new int[] {
+ 0,
+ 0,
+ 0,
+ 0});
+ this.udTo.Name = "udTo";
+ this.udTo.Size = new System.Drawing.Size(100, 29);
+ this.udTo.TabIndex = 8;
+ //
+ // udFrom
+ //
+ this.udFrom.Location = new System.Drawing.Point(67, 50);
+ this.udFrom.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.udFrom.Maximum = new decimal(new int[] {
+ 0,
+ 0,
+ 0,
+ 0});
+ this.udFrom.Name = "udFrom";
+ this.udFrom.Size = new System.Drawing.Size(100, 29);
+ this.udFrom.TabIndex = 7;
+ //
+ // Batch
+ //
+ this.AcceptButton = this.btnSet;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange;
+ this.ClientSize = new System.Drawing.Size(326, 142);
+ this.Controls.Add(this.udTo);
+ this.Controls.Add(this.udFrom);
+ this.Controls.Add(this.btnSet);
+ this.Controls.Add(this.lblTo);
+ this.Controls.Add(this.lblCaption);
+ this.Controls.Add(this.lblFrom);
+ this.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "Batch";
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Batch Download";
+ this.TopMost = true;
+ ((System.ComponentModel.ISupportInitialize)(this.udTo)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.udFrom)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label lblFrom;
+ private System.Windows.Forms.Label lblCaption;
+ private System.Windows.Forms.Label lblTo;
+ private System.Windows.Forms.Button btnSet;
+ private System.Windows.Forms.NumericUpDown udFrom;
+ private System.Windows.Forms.NumericUpDown udTo;
+ }
}
\ No newline at end of file
diff --git a/Batch.cs b/Batch.cs
index cb06cba..cc3b376 100644
--- a/Batch.cs
+++ b/Batch.cs
@@ -1,41 +1,41 @@
-namespace ImgRip
-{
- using System;
- using System.Windows.Forms;
-
- partial class Batch : Form
- {
- long _seed;
-
- public Batch(long seed)
- {
- InitializeComponent();
- _seed = seed;
- udFrom.Maximum = udTo.Maximum = long.MaxValue;
- udFrom.Value = udTo.Value = seed;
- }
-
- private void btnSet_Click(object sender, EventArgs e)
- {
- var ripper = this.Owner as Main;
- if (udFrom.Value > 0 && udFrom.Value < udTo.Value)
- {
- ripper.From = decimal.ToInt32(udFrom.Value); ripper.To = decimal.ToInt32(udTo.Value);
- var n = _seed.ToString();
- var m = ripper.Address.LastIndexOf(n);
- ripper.Address = ripper.Address.Substring(0, m) + ripper.From.ToString() + ripper.Address.Substring(m + n.Length);
- ripper.Batch = true;
- ripper.Range = ripper.To - ripper.From + 1;
- Close();
- }
- else
- {
- var tt = new ToolTip();
- tt.IsBalloon = true;
- tt.ToolTipIcon = ToolTipIcon.Warning;
- tt.ToolTipTitle = "Invalid Range";
- tt.Show("Out of range values", lblCaption, 2000);
- }
- }
- }
-}
+namespace ImgRip
+{
+ using System;
+ using System.Windows.Forms;
+
+ partial class Batch : Form
+ {
+ long _seed;
+
+ public Batch(long seed)
+ {
+ InitializeComponent();
+ _seed = seed;
+ udFrom.Maximum = udTo.Maximum = long.MaxValue;
+ udFrom.Value = udTo.Value = seed;
+ }
+
+ private void btnSet_Click(object sender, EventArgs e)
+ {
+ var ripper = this.Owner as Main;
+ if (udFrom.Value > 0 && udFrom.Value < udTo.Value)
+ {
+ ripper.From = decimal.ToInt32(udFrom.Value); ripper.To = decimal.ToInt32(udTo.Value);
+ var n = _seed.ToString();
+ var m = ripper.Address.LastIndexOf(n);
+ ripper.Address = ripper.Address.Substring(0, m) + ripper.From.ToString() + ripper.Address.Substring(m + n.Length);
+ ripper.Batch = true;
+ ripper.Range = ripper.To - ripper.From + 1;
+ Close();
+ }
+ else
+ {
+ var tt = new ToolTip();
+ tt.IsBalloon = true;
+ tt.ToolTipIcon = ToolTipIcon.Warning;
+ tt.ToolTipTitle = "Invalid Range";
+ tt.Show("Out of range values", lblCaption, 2000);
+ }
+ }
+ }
+}
diff --git a/Batch.resx b/Batch.resx
index ff31a6d..19dc0dd 100644
--- a/Batch.resx
+++ b/Batch.resx
@@ -1,120 +1,120 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/Cloud.Designer.cs b/Cloud.Designer.cs
index 6c82980..081da23 100644
--- a/Cloud.Designer.cs
+++ b/Cloud.Designer.cs
@@ -1,354 +1,354 @@
-namespace ImgRip
-{
- partial class WebCloud
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebCloud));
- this.lvCloud = new System.Windows.Forms.ListView();
- this.lvImageList = new System.Windows.Forms.ImageList(this.components);
- this.lblCloudID = new System.Windows.Forms.Label();
- this.lblPass = new System.Windows.Forms.Label();
- this.cldStatus = new System.Windows.Forms.StatusStrip();
- this.CloudStatus = new System.Windows.Forms.ToolStripStatusLabel();
- this.txtFolderName = new System.Windows.Forms.TextBox();
- this.gpLogin = new System.Windows.Forms.GroupBox();
- this.tbName = new System.Windows.Forms.TextBox();
- this.btnSign = new System.Windows.Forms.Button();
- this.tbPass = new System.Windows.Forms.TextBox();
- this.btnAdd = new System.Windows.Forms.Button();
- this.btnCreate = new System.Windows.Forms.Button();
- this.btnDelete = new System.Windows.Forms.Button();
- this.btnUp = new System.Windows.Forms.Button();
- this.CmdPanel = new System.Windows.Forms.Panel();
- this.cbPublic = new System.Windows.Forms.CheckBox();
- this.ttCloud = new System.Windows.Forms.ToolTip(this.components);
- this.ofd = new System.Windows.Forms.OpenFileDialog();
- this.cldStatus.SuspendLayout();
- this.gpLogin.SuspendLayout();
- this.CmdPanel.SuspendLayout();
- this.SuspendLayout();
- //
- // lvCloud
- //
- this.lvCloud.AllowDrop = true;
- this.lvCloud.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.lvCloud.ForeColor = System.Drawing.Color.Blue;
- this.lvCloud.LabelEdit = true;
- this.lvCloud.Location = new System.Drawing.Point(0, 118);
- this.lvCloud.Name = "lvCloud";
- this.lvCloud.ShowItemToolTips = true;
- this.lvCloud.Size = new System.Drawing.Size(627, 320);
- this.lvCloud.SmallImageList = this.lvImageList;
- this.lvCloud.TabIndex = 1;
- this.lvCloud.UseCompatibleStateImageBehavior = false;
- this.lvCloud.View = System.Windows.Forms.View.List;
- this.lvCloud.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lvCloud_AfterLabelEdit);
- this.lvCloud.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvCloud_ItemSelectionChanged);
- this.lvCloud.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragDrop);
- this.lvCloud.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragEnter);
- this.lvCloud.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvCloud_KeyDown);
- this.lvCloud.Leave += new System.EventHandler(this.lvCloud_Leave);
- this.lvCloud.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseClick);
- this.lvCloud.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseDoubleClick);
- //
- // lvImageList
- //
- this.lvImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("lvImageList.ImageStream")));
- this.lvImageList.TransparentColor = System.Drawing.Color.Transparent;
- this.lvImageList.Images.SetKeyName(0, "Folder");
- this.lvImageList.Images.SetKeyName(1, "Image");
- this.lvImageList.Images.SetKeyName(2, "Document");
- //
- // lblCloudID
- //
- this.lblCloudID.AutoSize = true;
- this.lblCloudID.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.lblCloudID.ForeColor = System.Drawing.Color.DodgerBlue;
- this.lblCloudID.Location = new System.Drawing.Point(4, 29);
- this.lblCloudID.Name = "lblCloudID";
- this.lblCloudID.Size = new System.Drawing.Size(55, 19);
- this.lblCloudID.TabIndex = 3;
- this.lblCloudID.Text = "Name:";
- //
- // lblPass
- //
- this.lblPass.AutoSize = true;
- this.lblPass.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.lblPass.ForeColor = System.Drawing.Color.DodgerBlue;
- this.lblPass.Location = new System.Drawing.Point(4, 73);
- this.lblPass.Name = "lblPass";
- this.lblPass.Size = new System.Drawing.Size(80, 19);
- this.lblPass.TabIndex = 4;
- this.lblPass.Text = "Password:";
- //
- // cldStatus
- //
- this.cldStatus.Font = new System.Drawing.Font("Segoe UI", 9F);
- this.cldStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.CloudStatus});
- this.cldStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
- this.cldStatus.Location = new System.Drawing.Point(0, 438);
- this.cldStatus.Name = "cldStatus";
- this.cldStatus.Size = new System.Drawing.Size(627, 24);
- this.cldStatus.TabIndex = 8;
- this.cldStatus.Text = "statusStrip1";
- //
- // CloudStatus
- //
- this.CloudStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.CloudStatus.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold);
- this.CloudStatus.ForeColor = System.Drawing.SystemColors.Highlight;
- this.CloudStatus.Name = "CloudStatus";
- this.CloudStatus.Size = new System.Drawing.Size(44, 19);
- this.CloudStatus.Text = "Done";
- //
- // txtFolderName
- //
- this.txtFolderName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.txtFolderName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.txtFolderName.Enabled = false;
- this.txtFolderName.Location = new System.Drawing.Point(434, 81);
- this.txtFolderName.Name = "txtFolderName";
- this.txtFolderName.Size = new System.Drawing.Size(171, 25);
- this.txtFolderName.TabIndex = 12;
- this.ttCloud.SetToolTip(this.txtFolderName, "Type to search or add new album");
- this.txtFolderName.MouseClick += new System.Windows.Forms.MouseEventHandler(this.txtFolderName_MouseClick);
- this.txtFolderName.TextChanged += new System.EventHandler(this.txtFolderName_TextChanged);
- this.txtFolderName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtFolderName_KeyPress);
- this.txtFolderName.Leave += new System.EventHandler(this.txtFolderName_Leave);
- //
- // gpLogin
- //
- this.gpLogin.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.gpLogin.Controls.Add(this.tbName);
- this.gpLogin.Controls.Add(this.btnSign);
- this.gpLogin.Controls.Add(this.lblCloudID);
- this.gpLogin.Controls.Add(this.lblPass);
- this.gpLogin.Controls.Add(this.tbPass);
- this.gpLogin.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.gpLogin.ForeColor = System.Drawing.Color.BlueViolet;
- this.gpLogin.Location = new System.Drawing.Point(12, 5);
- this.gpLogin.Name = "gpLogin";
- this.gpLogin.Size = new System.Drawing.Size(347, 106);
- this.gpLogin.TabIndex = 13;
- this.gpLogin.TabStop = false;
- this.gpLogin.Text = "Login";
- //
- // tbName
- //
- this.tbName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbName.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "CloudID", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
- this.tbName.Location = new System.Drawing.Point(82, 26);
- this.tbName.Name = "tbName";
- this.tbName.Size = new System.Drawing.Size(194, 25);
- this.tbName.TabIndex = 0;
- this.tbName.Text = global::ImgRip.Properties.Settings.Default.CloudID;
- //
- // btnSign
- //
- this.btnSign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnSign.AutoSize = true;
- this.btnSign.Font = new System.Drawing.Font("Microsoft YaHei", 10F);
- this.btnSign.Image = ((System.Drawing.Image)(resources.GetObject("btnSign.Image")));
- this.btnSign.Location = new System.Drawing.Point(283, 32);
- this.btnSign.Name = "btnSign";
- this.btnSign.Size = new System.Drawing.Size(56, 54);
- this.btnSign.TabIndex = 2;
- this.btnSign.UseVisualStyleBackColor = true;
- this.btnSign.Click += new System.EventHandler(this.ConnectCloud_Click);
- //
- // tbPass
- //
- this.tbPass.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbPass.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Password", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
- this.tbPass.Location = new System.Drawing.Point(82, 70);
- this.tbPass.Name = "tbPass";
- this.tbPass.Size = new System.Drawing.Size(194, 25);
- this.tbPass.TabIndex = 1;
- this.tbPass.Text = global::ImgRip.Properties.Settings.Default.Password;
- this.tbPass.UseSystemPasswordChar = true;
- //
- // btnAdd
- //
- this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnAdd.Enabled = false;
- this.btnAdd.Image = ((System.Drawing.Image)(resources.GetObject("btnAdd.Image")));
- this.btnAdd.Location = new System.Drawing.Point(121, 6);
- this.btnAdd.Name = "btnAdd";
- this.btnAdd.Size = new System.Drawing.Size(50, 50);
- this.btnAdd.TabIndex = 11;
- this.ttCloud.SetToolTip(this.btnAdd, "Add Photos");
- this.btnAdd.UseVisualStyleBackColor = true;
- this.btnAdd.Click += new System.EventHandler(this.btnAddFiles_Click);
- //
- // btnCreate
- //
- this.btnCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnCreate.Enabled = false;
- this.btnCreate.Image = ((System.Drawing.Image)(resources.GetObject("btnCreate.Image")));
- this.btnCreate.Location = new System.Drawing.Point(180, 6);
- this.btnCreate.Name = "btnCreate";
- this.btnCreate.Size = new System.Drawing.Size(50, 50);
- this.btnCreate.TabIndex = 10;
- this.ttCloud.SetToolTip(this.btnCreate, "Create Album");
- this.btnCreate.UseVisualStyleBackColor = true;
- this.btnCreate.Click += new System.EventHandler(this.btnCreateFolder_Click);
- //
- // btnDelete
- //
- this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnDelete.Enabled = false;
- this.btnDelete.Image = ((System.Drawing.Image)(resources.GetObject("btnDelete.Image")));
- this.btnDelete.Location = new System.Drawing.Point(62, 6);
- this.btnDelete.Name = "btnDelete";
- this.btnDelete.Size = new System.Drawing.Size(50, 50);
- this.btnDelete.TabIndex = 9;
- this.ttCloud.SetToolTip(this.btnDelete, "Delete Items");
- this.btnDelete.UseVisualStyleBackColor = true;
- this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
- //
- // btnUp
- //
- this.btnUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnUp.Enabled = false;
- this.btnUp.Font = new System.Drawing.Font("Microsoft YaHei", 10F);
- this.btnUp.Image = ((System.Drawing.Image)(resources.GetObject("btnUp.Image")));
- this.btnUp.Location = new System.Drawing.Point(3, 6);
- this.btnUp.Name = "btnUp";
- this.btnUp.Size = new System.Drawing.Size(50, 50);
- this.btnUp.TabIndex = 7;
- this.ttCloud.SetToolTip(this.btnUp, "Up to folder");
- this.btnUp.UseVisualStyleBackColor = true;
- this.btnUp.Click += new System.EventHandler(this.btnUp_Click);
- //
- // CmdPanel
- //
- this.CmdPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.CmdPanel.AutoSize = true;
- this.CmdPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.CmdPanel.Controls.Add(this.btnUp);
- this.CmdPanel.Controls.Add(this.btnDelete);
- this.CmdPanel.Controls.Add(this.btnCreate);
- this.CmdPanel.Controls.Add(this.btnAdd);
- this.CmdPanel.Location = new System.Drawing.Point(372, 5);
- this.CmdPanel.Name = "CmdPanel";
- this.CmdPanel.Size = new System.Drawing.Size(233, 59);
- this.CmdPanel.TabIndex = 14;
- //
- // cbPublic
- //
- this.cbPublic.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.cbPublic.AutoCheck = false;
- this.cbPublic.AutoSize = true;
- this.cbPublic.Enabled = false;
- this.cbPublic.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.cbPublic.Image = ((System.Drawing.Image)(resources.GetObject("cbPublic.Image")));
- this.cbPublic.Location = new System.Drawing.Point(373, 77);
- this.cbPublic.Name = "cbPublic";
- this.cbPublic.Size = new System.Drawing.Size(47, 32);
- this.cbPublic.TabIndex = 13;
- this.cbPublic.ThreeState = true;
- this.cbPublic.UseVisualStyleBackColor = true;
- this.cbPublic.CheckedChanged += new System.EventHandler(this.cbPublic_CheckedChanged);
- this.cbPublic.Leave += new System.EventHandler(this.cbPublic_Leave);
- //
- // ttCloud
- //
- this.ttCloud.AutomaticDelay = 300;
- //
- // ofd
- //
- this.ofd.DefaultExt = "jpg";
- this.ofd.Filter = "JPG files|*.jpg|PNG files|*.png|BMP files|*.bmp|All files|*.*";
- this.ofd.InitialDirectory = global::ImgRip.Properties.Settings.Default.Dir;
- this.ofd.Multiselect = true;
- //
- // WebCloud
- //
- this.AcceptButton = this.btnSign;
- this.AllowDrop = true;
- this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.AutoScroll = true;
- this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.ClientSize = new System.Drawing.Size(627, 462);
- this.Controls.Add(this.cbPublic);
- this.Controls.Add(this.txtFolderName);
- this.Controls.Add(this.CmdPanel);
- this.Controls.Add(this.gpLogin);
- this.Controls.Add(this.cldStatus);
- this.Controls.Add(this.lvCloud);
- this.Font = new System.Drawing.Font("Microsoft YaHei", 10F);
- this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
- this.MaximizeBox = false;
- this.MinimumSize = new System.Drawing.Size(593, 470);
- this.Name = "WebCloud";
- this.ShowIcon = false;
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "Cloud";
- this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.WebCloud_FormClosed);
- this.Load += new System.EventHandler(this.WebCloud_Load);
- this.cldStatus.ResumeLayout(false);
- this.cldStatus.PerformLayout();
- this.gpLogin.ResumeLayout(false);
- this.gpLogin.PerformLayout();
- this.CmdPanel.ResumeLayout(false);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.ListView lvCloud;
- private System.Windows.Forms.Button btnSign;
- private System.Windows.Forms.Label lblCloudID;
- private System.Windows.Forms.Label lblPass;
- private System.Windows.Forms.TextBox tbName;
- private System.Windows.Forms.TextBox tbPass;
- private System.Windows.Forms.Button btnUp;
- private System.Windows.Forms.StatusStrip cldStatus;
- private System.Windows.Forms.ToolStripStatusLabel CloudStatus;
- private System.Windows.Forms.Button btnDelete;
- private System.Windows.Forms.Button btnCreate;
- private System.Windows.Forms.Button btnAdd;
- private System.Windows.Forms.TextBox txtFolderName;
- private System.Windows.Forms.GroupBox gpLogin;
- private System.Windows.Forms.ImageList lvImageList;
- private System.Windows.Forms.Panel CmdPanel;
- private System.Windows.Forms.CheckBox cbPublic;
- private System.Windows.Forms.ToolTip ttCloud;
- private System.Windows.Forms.OpenFileDialog ofd;
- }
+namespace ImgRip
+{
+ partial class WebCloud
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebCloud));
+ this.lvCloud = new System.Windows.Forms.ListView();
+ this.lvImageList = new System.Windows.Forms.ImageList(this.components);
+ this.lblCloudID = new System.Windows.Forms.Label();
+ this.lblPass = new System.Windows.Forms.Label();
+ this.cldStatus = new System.Windows.Forms.StatusStrip();
+ this.CloudStatus = new System.Windows.Forms.ToolStripStatusLabel();
+ this.txtFolderName = new System.Windows.Forms.TextBox();
+ this.gpLogin = new System.Windows.Forms.GroupBox();
+ this.tbName = new System.Windows.Forms.TextBox();
+ this.btnSign = new System.Windows.Forms.Button();
+ this.tbPass = new System.Windows.Forms.TextBox();
+ this.btnAdd = new System.Windows.Forms.Button();
+ this.btnCreate = new System.Windows.Forms.Button();
+ this.btnDelete = new System.Windows.Forms.Button();
+ this.btnUp = new System.Windows.Forms.Button();
+ this.CmdPanel = new System.Windows.Forms.Panel();
+ this.cbPublic = new System.Windows.Forms.CheckBox();
+ this.ttCloud = new System.Windows.Forms.ToolTip(this.components);
+ this.ofd = new System.Windows.Forms.OpenFileDialog();
+ this.cldStatus.SuspendLayout();
+ this.gpLogin.SuspendLayout();
+ this.CmdPanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lvCloud
+ //
+ this.lvCloud.AllowDrop = true;
+ this.lvCloud.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lvCloud.ForeColor = System.Drawing.Color.Blue;
+ this.lvCloud.LabelEdit = true;
+ this.lvCloud.Location = new System.Drawing.Point(0, 118);
+ this.lvCloud.Name = "lvCloud";
+ this.lvCloud.ShowItemToolTips = true;
+ this.lvCloud.Size = new System.Drawing.Size(627, 320);
+ this.lvCloud.SmallImageList = this.lvImageList;
+ this.lvCloud.TabIndex = 1;
+ this.lvCloud.UseCompatibleStateImageBehavior = false;
+ this.lvCloud.View = System.Windows.Forms.View.List;
+ this.lvCloud.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lvCloud_AfterLabelEdit);
+ this.lvCloud.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvCloud_ItemSelectionChanged);
+ this.lvCloud.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragDrop);
+ this.lvCloud.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvCloud_DragEnter);
+ this.lvCloud.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvCloud_KeyDown);
+ this.lvCloud.Leave += new System.EventHandler(this.lvCloud_Leave);
+ this.lvCloud.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseClick);
+ this.lvCloud.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvCloud_MouseDoubleClick);
+ //
+ // lvImageList
+ //
+ this.lvImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("lvImageList.ImageStream")));
+ this.lvImageList.TransparentColor = System.Drawing.Color.Transparent;
+ this.lvImageList.Images.SetKeyName(0, "Folder");
+ this.lvImageList.Images.SetKeyName(1, "Image");
+ this.lvImageList.Images.SetKeyName(2, "Document");
+ //
+ // lblCloudID
+ //
+ this.lblCloudID.AutoSize = true;
+ this.lblCloudID.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.lblCloudID.ForeColor = System.Drawing.Color.DodgerBlue;
+ this.lblCloudID.Location = new System.Drawing.Point(4, 29);
+ this.lblCloudID.Name = "lblCloudID";
+ this.lblCloudID.Size = new System.Drawing.Size(55, 19);
+ this.lblCloudID.TabIndex = 3;
+ this.lblCloudID.Text = "Name:";
+ //
+ // lblPass
+ //
+ this.lblPass.AutoSize = true;
+ this.lblPass.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.lblPass.ForeColor = System.Drawing.Color.DodgerBlue;
+ this.lblPass.Location = new System.Drawing.Point(4, 73);
+ this.lblPass.Name = "lblPass";
+ this.lblPass.Size = new System.Drawing.Size(80, 19);
+ this.lblPass.TabIndex = 4;
+ this.lblPass.Text = "Password:";
+ //
+ // cldStatus
+ //
+ this.cldStatus.Font = new System.Drawing.Font("Segoe UI", 9F);
+ this.cldStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.CloudStatus});
+ this.cldStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
+ this.cldStatus.Location = new System.Drawing.Point(0, 438);
+ this.cldStatus.Name = "cldStatus";
+ this.cldStatus.Size = new System.Drawing.Size(627, 24);
+ this.cldStatus.TabIndex = 8;
+ this.cldStatus.Text = "statusStrip1";
+ //
+ // CloudStatus
+ //
+ this.CloudStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.CloudStatus.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Bold);
+ this.CloudStatus.ForeColor = System.Drawing.SystemColors.Highlight;
+ this.CloudStatus.Name = "CloudStatus";
+ this.CloudStatus.Size = new System.Drawing.Size(44, 19);
+ this.CloudStatus.Text = "Done";
+ //
+ // txtFolderName
+ //
+ this.txtFolderName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtFolderName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.txtFolderName.Enabled = false;
+ this.txtFolderName.Location = new System.Drawing.Point(434, 81);
+ this.txtFolderName.Name = "txtFolderName";
+ this.txtFolderName.Size = new System.Drawing.Size(171, 25);
+ this.txtFolderName.TabIndex = 12;
+ this.ttCloud.SetToolTip(this.txtFolderName, "Type to search or add new album");
+ this.txtFolderName.MouseClick += new System.Windows.Forms.MouseEventHandler(this.txtFolderName_MouseClick);
+ this.txtFolderName.TextChanged += new System.EventHandler(this.txtFolderName_TextChanged);
+ this.txtFolderName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtFolderName_KeyPress);
+ this.txtFolderName.Leave += new System.EventHandler(this.txtFolderName_Leave);
+ //
+ // gpLogin
+ //
+ this.gpLogin.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.gpLogin.Controls.Add(this.tbName);
+ this.gpLogin.Controls.Add(this.btnSign);
+ this.gpLogin.Controls.Add(this.lblCloudID);
+ this.gpLogin.Controls.Add(this.lblPass);
+ this.gpLogin.Controls.Add(this.tbPass);
+ this.gpLogin.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.gpLogin.ForeColor = System.Drawing.Color.BlueViolet;
+ this.gpLogin.Location = new System.Drawing.Point(12, 5);
+ this.gpLogin.Name = "gpLogin";
+ this.gpLogin.Size = new System.Drawing.Size(347, 106);
+ this.gpLogin.TabIndex = 13;
+ this.gpLogin.TabStop = false;
+ this.gpLogin.Text = "Login";
+ //
+ // tbName
+ //
+ this.tbName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbName.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "CloudID", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+ this.tbName.Location = new System.Drawing.Point(82, 26);
+ this.tbName.Name = "tbName";
+ this.tbName.Size = new System.Drawing.Size(194, 25);
+ this.tbName.TabIndex = 0;
+ this.tbName.Text = global::ImgRip.Properties.Settings.Default.CloudID;
+ //
+ // btnSign
+ //
+ this.btnSign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSign.AutoSize = true;
+ this.btnSign.Font = new System.Drawing.Font("Microsoft YaHei", 10F);
+ this.btnSign.Image = ((System.Drawing.Image)(resources.GetObject("btnSign.Image")));
+ this.btnSign.Location = new System.Drawing.Point(283, 32);
+ this.btnSign.Name = "btnSign";
+ this.btnSign.Size = new System.Drawing.Size(56, 54);
+ this.btnSign.TabIndex = 2;
+ this.btnSign.UseVisualStyleBackColor = true;
+ this.btnSign.Click += new System.EventHandler(this.ConnectCloud_Click);
+ //
+ // tbPass
+ //
+ this.tbPass.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbPass.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Password", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+ this.tbPass.Location = new System.Drawing.Point(82, 70);
+ this.tbPass.Name = "tbPass";
+ this.tbPass.Size = new System.Drawing.Size(194, 25);
+ this.tbPass.TabIndex = 1;
+ this.tbPass.Text = global::ImgRip.Properties.Settings.Default.Password;
+ this.tbPass.UseSystemPasswordChar = true;
+ //
+ // btnAdd
+ //
+ this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnAdd.Enabled = false;
+ this.btnAdd.Image = ((System.Drawing.Image)(resources.GetObject("btnAdd.Image")));
+ this.btnAdd.Location = new System.Drawing.Point(121, 6);
+ this.btnAdd.Name = "btnAdd";
+ this.btnAdd.Size = new System.Drawing.Size(50, 50);
+ this.btnAdd.TabIndex = 11;
+ this.ttCloud.SetToolTip(this.btnAdd, "Add Photos");
+ this.btnAdd.UseVisualStyleBackColor = true;
+ this.btnAdd.Click += new System.EventHandler(this.btnAddFiles_Click);
+ //
+ // btnCreate
+ //
+ this.btnCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnCreate.Enabled = false;
+ this.btnCreate.Image = ((System.Drawing.Image)(resources.GetObject("btnCreate.Image")));
+ this.btnCreate.Location = new System.Drawing.Point(180, 6);
+ this.btnCreate.Name = "btnCreate";
+ this.btnCreate.Size = new System.Drawing.Size(50, 50);
+ this.btnCreate.TabIndex = 10;
+ this.ttCloud.SetToolTip(this.btnCreate, "Create Album");
+ this.btnCreate.UseVisualStyleBackColor = true;
+ this.btnCreate.Click += new System.EventHandler(this.btnCreateFolder_Click);
+ //
+ // btnDelete
+ //
+ this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnDelete.Enabled = false;
+ this.btnDelete.Image = ((System.Drawing.Image)(resources.GetObject("btnDelete.Image")));
+ this.btnDelete.Location = new System.Drawing.Point(62, 6);
+ this.btnDelete.Name = "btnDelete";
+ this.btnDelete.Size = new System.Drawing.Size(50, 50);
+ this.btnDelete.TabIndex = 9;
+ this.ttCloud.SetToolTip(this.btnDelete, "Delete Items");
+ this.btnDelete.UseVisualStyleBackColor = true;
+ this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
+ //
+ // btnUp
+ //
+ this.btnUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnUp.Enabled = false;
+ this.btnUp.Font = new System.Drawing.Font("Microsoft YaHei", 10F);
+ this.btnUp.Image = ((System.Drawing.Image)(resources.GetObject("btnUp.Image")));
+ this.btnUp.Location = new System.Drawing.Point(3, 6);
+ this.btnUp.Name = "btnUp";
+ this.btnUp.Size = new System.Drawing.Size(50, 50);
+ this.btnUp.TabIndex = 7;
+ this.ttCloud.SetToolTip(this.btnUp, "Up to folder");
+ this.btnUp.UseVisualStyleBackColor = true;
+ this.btnUp.Click += new System.EventHandler(this.btnUp_Click);
+ //
+ // CmdPanel
+ //
+ this.CmdPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.CmdPanel.AutoSize = true;
+ this.CmdPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.CmdPanel.Controls.Add(this.btnUp);
+ this.CmdPanel.Controls.Add(this.btnDelete);
+ this.CmdPanel.Controls.Add(this.btnCreate);
+ this.CmdPanel.Controls.Add(this.btnAdd);
+ this.CmdPanel.Location = new System.Drawing.Point(372, 5);
+ this.CmdPanel.Name = "CmdPanel";
+ this.CmdPanel.Size = new System.Drawing.Size(233, 59);
+ this.CmdPanel.TabIndex = 14;
+ //
+ // cbPublic
+ //
+ this.cbPublic.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.cbPublic.AutoCheck = false;
+ this.cbPublic.AutoSize = true;
+ this.cbPublic.Enabled = false;
+ this.cbPublic.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.cbPublic.Image = ((System.Drawing.Image)(resources.GetObject("cbPublic.Image")));
+ this.cbPublic.Location = new System.Drawing.Point(373, 77);
+ this.cbPublic.Name = "cbPublic";
+ this.cbPublic.Size = new System.Drawing.Size(47, 32);
+ this.cbPublic.TabIndex = 13;
+ this.cbPublic.ThreeState = true;
+ this.cbPublic.UseVisualStyleBackColor = true;
+ this.cbPublic.CheckedChanged += new System.EventHandler(this.cbPublic_CheckedChanged);
+ this.cbPublic.Leave += new System.EventHandler(this.cbPublic_Leave);
+ //
+ // ttCloud
+ //
+ this.ttCloud.AutomaticDelay = 300;
+ //
+ // ofd
+ //
+ this.ofd.DefaultExt = "jpg";
+ this.ofd.Filter = "JPG files|*.jpg|PNG files|*.png|BMP files|*.bmp|All files|*.*";
+ this.ofd.InitialDirectory = global::ImgRip.Properties.Settings.Default.Dir;
+ this.ofd.Multiselect = true;
+ //
+ // WebCloud
+ //
+ this.AcceptButton = this.btnSign;
+ this.AllowDrop = true;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.AutoScroll = true;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(627, 462);
+ this.Controls.Add(this.cbPublic);
+ this.Controls.Add(this.txtFolderName);
+ this.Controls.Add(this.CmdPanel);
+ this.Controls.Add(this.gpLogin);
+ this.Controls.Add(this.cldStatus);
+ this.Controls.Add(this.lvCloud);
+ this.Font = new System.Drawing.Font("Microsoft YaHei", 10F);
+ this.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+ this.MaximizeBox = false;
+ this.MinimumSize = new System.Drawing.Size(593, 470);
+ this.Name = "WebCloud";
+ this.ShowIcon = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Cloud";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.WebCloud_FormClosed);
+ this.Load += new System.EventHandler(this.WebCloud_Load);
+ this.cldStatus.ResumeLayout(false);
+ this.cldStatus.PerformLayout();
+ this.gpLogin.ResumeLayout(false);
+ this.gpLogin.PerformLayout();
+ this.CmdPanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListView lvCloud;
+ private System.Windows.Forms.Button btnSign;
+ private System.Windows.Forms.Label lblCloudID;
+ private System.Windows.Forms.Label lblPass;
+ private System.Windows.Forms.TextBox tbName;
+ private System.Windows.Forms.TextBox tbPass;
+ private System.Windows.Forms.Button btnUp;
+ private System.Windows.Forms.StatusStrip cldStatus;
+ private System.Windows.Forms.ToolStripStatusLabel CloudStatus;
+ private System.Windows.Forms.Button btnDelete;
+ private System.Windows.Forms.Button btnCreate;
+ private System.Windows.Forms.Button btnAdd;
+ private System.Windows.Forms.TextBox txtFolderName;
+ private System.Windows.Forms.GroupBox gpLogin;
+ private System.Windows.Forms.ImageList lvImageList;
+ private System.Windows.Forms.Panel CmdPanel;
+ private System.Windows.Forms.CheckBox cbPublic;
+ private System.Windows.Forms.ToolTip ttCloud;
+ private System.Windows.Forms.OpenFileDialog ofd;
+ }
}
\ No newline at end of file
diff --git a/Cloud.cs b/Cloud.cs
index 0639161..145716e 100644
--- a/Cloud.cs
+++ b/Cloud.cs
@@ -1,931 +1,931 @@
-namespace ImgRip
-{
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.IO;
- using System.Linq;
- using System.Threading;
- using System.Windows.Forms;
-
- using Google.Documents;
- using Google.GData.Client;
- using Google.GData.Photos;
- using Google.Picasa;
-
- partial class WebCloud : Form
- {
- public WebCloud()
- {
- InitializeComponent();
- }
-
- bool working = false;
- string LoginName
- {
- get
- {
- var name = tbName.Text.Trim();
- if (name.LastIndexOf('@') < 0) name += "@gmail.com";
- return name;
- }
- }
- bool Aborted = false;
- string Prompt { set { if (!IsHandleCreated) return; Invoke(new Action(() => CloudStatus.Text = value)); } }
- string Title { set { if (!IsHandleCreated)return; Invoke(new Action(() => this.Text = value)); } }
- //Local ListViewItems memory cache
- Collection cldCache;
- Stack Folder;
- DocumentsRequest DR;
- PicasaRequest PR;
- public string AlbumID { get; set; }
-
- internal static CloudType Service { get; set; }
-
- // Supported Cloud storage service
- internal enum CloudType
- {
- GDrive, Flickr, Facebook, Picasa
- }
-
- private void ConnectCloud_Click(object sender, EventArgs e)
- {
- CloudStatus.Text = "Waiting..."; lvCloud.Items.Clear();
- tbName.ReadOnly = tbPass.ReadOnly = true; btnCreate.Enabled = false;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- DR = new DocumentsRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true });
- new Thread(new ThreadStart(() =>
- {
- try
- {
- DR.Service.QueryClientLoginToken();
- var items = DR.GetFolders().Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items)
- lvCloud.cbAdd(item.AtomEntry, 0);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- }
- catch (Exception li)
- {
- if (this.IsHandleCreated)
- {
- Prompt = li.Message;
- Invoke(new Action(() => tbName.ReadOnly = false));
- Invoke(new Action(() => tbPass.ReadOnly = false));
- btnSign.cbEnable(true); return;
- }
- }
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- Prompt = lvCloud.Items.Count + " item(s)";
- UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate);
- UICallBack.EnableControls(false, btnDelete, btnUp, btnAdd);
- if (this.IsHandleCreated)
- {
- Invoke(new Action(() => tbName.ReadOnly = false));
- Invoke(new Action(() => tbPass.ReadOnly = false));
- }
- })).Start();
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- PR = new PicasaRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true });
- new Thread(new ThreadStart(() =>
- {
- try
- {
- PR.Service.QueryClientLoginToken();
- var items = PR.GetAlbums().Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items) lvCloud.cbAdd(item.AtomEntry, 0);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- }
- catch (Exception li)
- {
- if (this.IsHandleCreated)
- {
- Prompt = li.Message;
- Invoke(new Action(() => tbName.ReadOnly = false));
- Invoke(new Action(() => tbPass.ReadOnly = false));
- btnSign.cbEnable(true);
- return;
- }
- }
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- Prompt = lvCloud.Items.Count + " Album(s)";
- UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate);
- UICallBack.EnableControls(false, cbPublic, btnDelete, btnUp, btnAdd);
- if (this.IsHandleCreated)
- {
- Invoke(new Action(() => tbName.ReadOnly = false));
- Invoke(new Action(() => tbPass.ReadOnly = false));
- }
- })).Start();
- break;
- #endregion
- }
- btnSign.Enabled = false;
- Properties.Settings.Default.Save();
- }
-
- private void lvCloud_MouseDoubleClick(object sender, MouseEventArgs e)
- {
- if (lvCloud.FocusedItem != null)
- {
- ListViewItem lvi = lvCloud.FocusedItem;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- Document doc = new Document() { AtomEntry = lvi.Tag as AtomEntry };
- if (doc.Type == Document.DocumentType.Folder)
- {
- Folder = Folder ?? new Stack();
- CloudStatus.Text = "Listing \"" + doc.Title + "\"";
- Folder.Push(doc);
- btnDelete.Enabled = btnAdd.Enabled = btnCreate.Enabled = false;
- lvCloud.Items.Clear();
- new Thread(new ThreadStart(() =>
- {
- var items = DR.GetFolderContent(doc).Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items)
- lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- UICallBack.EnableControls(true, btnUp, btnCreate, btnAdd, txtFolderName);
- Title = doc.Title;
- Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)";
- })).Start();
- }
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- if (AlbumID != null) return;
- Album a = new Album() { AtomEntry = lvi.Tag as AtomEntry };
- if (a != null)
- {
- CloudStatus.Text = "Listing \"" + a.Title + "\"";
- btnDelete.Enabled = cbPublic.Enabled = txtFolderName.Enabled = false;
- lvCloud.Items.Clear();
- AlbumID = a.Id;
- new Thread(new ThreadStart(() =>
- {
- var items = PR.GetPhotosInAlbum(AlbumID).Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items)
- lvCloud.cbAdd(item.AtomEntry, 1);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- UICallBack.EnableControls(true, btnUp, btnAdd, txtFolderName);
- btnCreate.cbEnable(false);
- Title = a.Title;
- Prompt = a.Title + ": " + items.Count() + " Photo(s)";
- })).Start();
- }
- break;
- #endregion
- }
- }
- }
-
- private void btnUp_Click(object sender, EventArgs e)
- {
- if (working) return;
- working = true;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- if (Folder == null || Folder.Count == 0) { working = false; return; }
- Document doc = Folder.Pop();
- lvCloud.Items.Clear();
- btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false;
- if (Folder.Count == 0)
- {
- CloudStatus.Text = "Waiting...";
- new Thread(new ThreadStart(() =>
- {
- var items = DR.GetFolders().Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items)
- if (item.ParentFolders.Count == 0)
- lvCloud.cbAdd(item.AtomEntry, 0);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- UICallBack.EnableControls(true, btnCreate, txtFolderName);
- btnUp.cbEnable(false);
- Prompt = items.Count() + " item(s)";
- Title = "GDrive";
- working = false;
- })).Start();
- }
- else
- {
- doc = Folder.Peek();
- CloudStatus.Text = "Listing \"" + doc.Title + "\"";
- new Thread(new ThreadStart(() =>
- {
- var items = DR.GetFolderContent(doc).Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items)
- lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- UICallBack.EnableControls(true, btnAdd, btnUp, btnCreate, txtFolderName);
- Title = doc.Title;
- Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)";
- })).Start();
- }
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- if (AlbumID == null) { working = false; return; }
- lvCloud.Items.Clear();
- CloudStatus.Text = "Waiting...";
- btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false;
- new Thread(new ThreadStart(() =>
- {
- var items = PR.GetAlbums().Entries;
- Invoke(new Action(() => lvCloud.BeginUpdate()));
- foreach (var item in items)
- lvCloud.cbAdd(item.AtomEntry, 0);
- Invoke(new Action(() => lvCloud.EndUpdate()));
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- AlbumID = null;
- UICallBack.EnableControls(true, txtFolderName, btnCreate);
- Prompt = items.Count() + " Albums(s)";
- Title = "Picasa";
- working = false;
- })).Start();
- break;
- #endregion
- }
- }
-
- private void btnCreateFolder_Click(object sender, EventArgs e)
- {
- string foldername = txtFolderName.Text.Trim();
- if (string.IsNullOrEmpty(foldername)
- || foldername.EndsWith(".")
- || foldername.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
- { CloudStatus.Text = "Invalid album name!"; return; }
- if (lvCloud.FindItemWithText(foldername) != null) { CloudStatus.Text = "\"" + foldername + "\" already existed."; return; }
- CloudStatus.Text = "Creating \"" + foldername + "\"";
- txtFolderName.Enabled = btnCreate.Enabled = btnUp.Enabled = false;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- Document @base = null;
- string title, tip;
- if (Folder != null && Folder.Count > 0) @base = Folder.Peek();
- new Thread(new ThreadStart(() =>
- {
- var @new = DR.CreateDocument(new Document() { Title = foldername, Type = Document.DocumentType.Folder });
- if (@base != null)
- @new = DR.MoveDocumentTo(@base, @new);
- title = @new.Title; tip = @new.AtomEntry.AlternateUri.Content;
- lvCloud.cbAdd(@new.AtomEntry, 0);
- if (cldCache != null) cldCache.Add(new ListViewItem(title, 0) { Tag = @new.AtomEntry, ToolTipText = tip });
- UICallBack.EnableControls(true, txtFolderName, btnCreate);
- btnUp.cbEnable(@base != null);
- Prompt = (@base == null ? "GDrive" : string.Join(" > ", Folder.Select(f => f.Title).Reverse().ToArray())) + ": " + lvCloud.Items.Count + " item(s)";
- })).Start();
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- var a = new Album();
- a.Title = foldername;
- cbPublic.ThreeState = false;
- a.Access = cbPublic.Checked ? "public" : "private";
- new Thread(new ThreadStart(() =>
- {
- var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a);
- lvCloud.cbAdd(@new.AtomEntry, 0);
- if (cldCache != null) cldCache.Add(new ListViewItem(foldername, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content });
- UICallBack.EnableControls(true, txtFolderName, btnCreate);
- Prompt = lvCloud.Items.Count + " item(s)";
- })).Start();
- break;
- #endregion
- }
- }
-
- private void btnDelete_Click(object sender, EventArgs e)
- {
- int total = lvCloud.SelectedItems.Count;
- if (total == 0) { CloudStatus.Text = "No item(s) selected."; return; }
- switch (Service)
- {
- #region GDrive & Picasa
- case CloudType.GDrive:
- case CloudType.Picasa:
- var items = lvCloud.SelectedItems.OfType().ToArray();
- if (MessageBox.Show("Are you sure want to delete items below:\n" + string.Join(", ", items.Select(i => "\"" + i.Text + "\"").ToArray()), "Delete Cloud Storage Items", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
- {
- btnDelete.Enabled = btnUp.Enabled = false;
- new Thread(DeleteCloudItem).Start(items);
- }
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
- }
- }
-
- void DeleteCloudItem(object arg)
- {
- var items = arg as ListViewItem[];
- Action RemoveItem = lvi => lvCloud.Items.Remove(lvi);
- switch (Service)
- {
- #region GDrive & Picasa
- case CloudType.GDrive:
- case CloudType.Picasa:
- foreach (var lvi in items)
- {
- if (Aborted)
- {
- Prompt = "Operation Cancelled!";
- btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null);
- Aborted = false;
- return;
- }
- Prompt = "Deleting \"" + lvi.Text + "\"";
- try
- {
- (lvi.Tag as AtomEntry).Delete();
- }
- catch (Exception exp)
- {
- MessageBox.Show(exp.Message, "Delete \"" + lvi.Text + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error);
- break;
- }
- if (cldCache != null) cldCache.Remove(cldCache.Single(_ => _.ToolTipText == lvi.ToolTipText));
- Invoke(RemoveItem, lvi);
- }
- btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null);
- Prompt = lvCloud.Items.Count + (Service == CloudType.GDrive ? " items" : (AlbumID == null ? " Albums(s)" : " Photos(s)"));
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
- }
- }
-
- void AddCloudFile(object arg)
- {
- var files = arg as string[];
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- Document @base = null;
- if (Folder != null && Folder.Count > 0)
- @base = Folder.Peek();
- var DocType = new Dictionary
- {
- { ".jpg", "image/jpeg" }, { ".png", "image/png" }, { ".gif", "image/gif" }, { ".tiff", "image/tiff" },{ ".bmp", "image/bmp" },
- { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" },{ ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"},
- { ".wmv", "video/x-ms-wmv" }, {".asf","video/x-ms-asf"},{".tif","video/x-ms-asf"},
- {"Default",".txt;.rtf;.ppt;.pptx;.pps;.htm;.html;.xls;.xlsx;.ods;.csv;.tsb;.doc;.docx;.pages;.ai;.dxf;.eps;.ps;.xps;.ttf"}
- };
- files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray();
- foreach (var file in files)
- {
- if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; }
- if (!File.Exists(file)) continue;
- string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower();
- if (DocType.ContainsKey(ext) || DocType["Default"].Split(';').Contains(ext))
- {
- Prompt = "Adding \"" + filename + "\"";
- try
- {
- var de = DocType.ContainsKey(ext) ? DR.Service.UploadFile(file, filename, DocType[ext], true) : DR.Service.UploadDocument(file, filename);
- var @new = new Document { AtomEntry = de };
- if (@base != null)
- {
- Prompt = "Moving \"" + @new.Title + "\" to " + @base.Title;
- @new = DR.MoveDocumentTo(@base, @new);
- }
- string ttt = @new.AtomEntry.AlternateUri.Content;
- lvCloud.cbAdd(@new.AtomEntry, 2);
- if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 2) { Tag = @new.AtomEntry, ToolTipText = ttt });
- }
- catch (Exception exp)
- {
- MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error);
- break;
- }
- }
- }
- Prompt = lvCloud.Items.Count + " items";
- btnUp.cbEnable(@base != null);
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- if (AlbumID == null)
- {
- var dirs = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) != 0).ToArray();
- foreach (var dir in dirs)
- {
- var a = new Album();
- a.Title = Path.GetFileName(dir);
- Prompt = "Creating Album: \"" + a.Title + "\"";
- var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a);
- lvCloud.cbAdd(@new.AtomEntry, 0);
- if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content });
- var aid = @new.Id;
- var photos = Directory.GetFiles(dir);
- AddtoAlbum(photos, aid);
- }
- Prompt = lvCloud.Items.Count + " Album(s)";
- }
- else
- {
- AddtoAlbum(files, AlbumID);
- Prompt = lvCloud.Items.Count + " Photos(s)";
- }
- btnUp.cbEnable(AlbumID != null);
- break;
- #endregion
- }
- System.Media.SystemSounds.Exclamation.Play();
- btnSign.cbEnable(true);
- }
-
- void AddtoAlbum(string[] files, string aId)
- {
- //raw formats (.cr2, .nef, .orf, etc.) - "image/x-image-raw"
- var PicasaType = new Dictionary
- {
- { ".jpg", "image/jpeg"}, { ".gif", "image/gif" }, { ".bmp", "image/bmp" }, { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" },
- { ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"}, { ".wmv", "video/x-ms-wmv" },{".asf","video/x-ms-asf"},
- {".tif","video/x-ms-asf"},{".png","image/png"},{".cr2","image/x-image-raw"},{".nef","image/x-image-raw"},{".orf","image/x-image-raw"}
- };
- files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray();
- foreach (var file in files)
- {
- if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; }
- if (!File.Exists(file)) continue;
- string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower();
- if (!PicasaType.ContainsKey(ext) || string.IsNullOrEmpty(ext)) continue;
- Prompt = "Adding \"" + filename + "\"";
- using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
- {
- try
- {
- var ae = PR.Service.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName, aId)), fs, PicasaType[ext], filename);
- if (AlbumID != null)
- {
- lvCloud.cbAdd(ae, 1);
- if (cldCache != null) cldCache.Add(new ListViewItem(filename, 1) { Tag = ae, ToolTipText = ae.AlternateUri.Content });
- }
- fs.Close();
- }
- catch (Exception exp)
- {
- fs.Close();
- MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error);
- break;
- }
- finally
- {
- fs.Dispose();
- }
- }
- }
- }
-
- private void btnAddFiles_Click(object sender, EventArgs e)
- {
- if (DialogResult.OK == ofd.ShowDialog(this))
- {
- Aborted = btnUp.Enabled = btnSign.Enabled = false;
- new Thread(AddCloudFile).Start(ofd.FileNames);
- }
- }
-
- private void lvCloud_AfterLabelEdit(object sender, LabelEditEventArgs e)
- {
- ListViewItem lvi = lvCloud.Items[e.Item];
- if (string.IsNullOrEmpty(e.Label) || e.Label == lvi.Text) { e.CancelEdit = true;return; }
- CloudStatus.Text = "Renaming...";
- switch (Service)
- {
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa & GDrive
- case CloudType.GDrive:
- case CloudType.Picasa:
- var ae = (lvi.Tag as AtomEntry);
- ae.Title.Text = e.Label;
- new Thread(new ThreadStart(() =>
- {
-
- var @new = ae.Update();
- if (cldCache != null)
- {
- ListViewItem item = cldCache.Single(i => i.ToolTipText == lvi.ToolTipText);
- item.Text = e.Label; item.ToolTipText = @new.AlternateUri.Content; item.Tag = @new;
- }
- Invoke(new Action(() => lvi.ToolTipText = @new.AlternateUri.Content));
- lvi.Tag = @new;
- Prompt = "Done";
- })).Start();
- break;
- #endregion
- }
- }
-
- private void lvCloud_KeyDown(object sender, KeyEventArgs e)
- {
- if (lvCloud.Focused)
- {
- if (e.KeyCode == Keys.Back)
- btnUp_Click(sender, e);
- if (e.KeyCode == Keys.Escape)
- {
- Aborted = true;
- CloudStatus.Text = "Pending Cancelled...";
- }
- if (e.Control && e.KeyCode == Keys.V)
- {
- var files = Clipboard.GetFileDropList();
- if (files.Count > 0)
- {
- Aborted = btnUp.Enabled = btnSign.Enabled = false;
- var sa = new string[files.Count];
- files.CopyTo(sa, 0);
- new Thread(AddCloudFile).Start(sa);
- }
- }
- ListViewItem lvi = lvCloud.FocusedItem;
- if (lvi != null)
- if (e.KeyCode == Keys.F2)
- lvi.BeginEdit();
- else if (e.KeyCode == Keys.C && e.Control)
- Clipboard.SetText(lvi.ToolTipText);
- }
- }
-
- private void lvCloud_DragDrop(object sender, DragEventArgs e)
- {
- var lv = sender as ListView;
- var files = e.Data.GetData(DataFormats.FileDrop) as string[];
- if (files == null || files.Length == 0) return;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- if (DR == null) return;
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- break;
- #endregion
- }
- Aborted = btnUp.Enabled = btnSign.Enabled = false;
- new Thread(AddCloudFile).Start(files);
- }
-
- private void lvCloud_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop))
- {
- e.Effect = DragDropEffects.Copy;
- }
- }
-
- private void WebCloud_Load(object sender, EventArgs e)
- {
- switch (Service)
- {
- case CloudType.GDrive:
- gpLogin.Text = "GDrive";
- cbPublic.Visible = false;
- txtFolderName.Location = new System.Drawing.Point(CmdPanel.Location.X + btnUp.Location.X, txtFolderName.Location.Y);
- txtFolderName.Width = CmdPanel.Width - 5;
- break;
- case CloudType.Flickr:
- gpLogin.Text = "Flickr";
- break;
- case CloudType.Facebook:
- gpLogin.Text = "Facebook";
- break;
- case CloudType.Picasa:
- gpLogin.Text = "Picasa";
- break;
- }
- }
-
- private void lvCloud_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
- {
- if (lvCloud.SelectedItems.Count > 0)
- {
- btnDelete.Enabled = true;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- var lvi = lvCloud.SelectedItems[0];
- var doc = (lvi.Tag as AtomEntry);
- Prompt = "Updated: " + doc.Updated.ToShortDateString();
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- if (AlbumID == null)
- {
- cbPublic.Enabled = cbPublic.ThreeState = cbPublic.AutoCheck = true;
- uint total = 0, check = 0;
- foreach (ListViewItem item in lvCloud.SelectedItems)
- {
- var a = new Album() { AtomEntry = item.Tag as AtomEntry };
- total += a.NumPhotos;
- if (a.Access == "public") check++;
- }
- cbPublic.CheckState = check == 0 ? CheckState.Unchecked : check == lvCloud.SelectedItems.Count ? CheckState.Checked : CheckState.Indeterminate;
- cbPublic.ThreeState = cbPublic.CheckState == CheckState.Indeterminate;
- cbPublic.AutoCheck = !cbPublic.ThreeState;
- Prompt = string.Format("Total: {0} Photos", total);
- }
- else
- {
- long total = 0;
- foreach (ListViewItem item in lvCloud.SelectedItems)
- total += new Photo() { AtomEntry = item.Tag as AtomEntry }.Size;
- Prompt = string.Format("Total: {0} KB", total / 1024);
- }
- break;
- #endregion
- }
- }
- else
- {
- btnDelete.Enabled = cbPublic.Enabled = false;
- switch (Service)
- {
- #region GDrive
- case CloudType.GDrive:
- Prompt = lvCloud.Items.Count + " item(s)";
- break;
- #endregion
-
- #region Flickr
- case CloudType.Flickr:
- break;
- #endregion
-
- #region Facebook
- case CloudType.Facebook:
- break;
- #endregion
-
- #region Picasa
- case CloudType.Picasa:
- cbPublic.CheckState = CheckState.Unchecked;
- Prompt = lvCloud.Items.Count + (AlbumID == null ? " Albums(s)" : " Photos(s)");
- break;
- #endregion
- }
- }
- }
-
- private void lvCloud_MouseClick(object sender, MouseEventArgs e)
- {
- if (lvCloud.SelectedItems.Count > 0)
- btnDelete.Enabled = true;
- else
- btnDelete.Enabled = false;
- }
-
- private void txtFolderName_TextChanged(object sender, EventArgs e)
- {
- if (cldCache == null) return;
- string text = txtFolderName.Text.Trim();
- lvCloud.SelectedItems.Clear();
- if (string.IsNullOrEmpty(text))
- if (txtFolderName.Text.Length > 0) return;
- else
- {
- if (lvCloud.Items.Count != cldCache.Count)
- {
- lvCloud.SuspendLayout();
- lvCloud.Items.Clear();
- lvCloud.Items.AddRange(cldCache.ToArray());
- }
- }
- else
- {
- lvCloud.SuspendLayout();
- lvCloud.Items.Clear();
- lvCloud.Items.AddRange(cldCache.Where(_ => _.Text.ContainsEx(text)).ToArray());
- }
- lvCloud.ResumeLayout();
- CloudStatus.Text = lvCloud.Items.Count + " items";
- }
-
- private void txtFolderName_KeyPress(object sender, KeyPressEventArgs e)
- {
- if (cldCache == null)
- {
- cldCache = new Collection();
- foreach (ListViewItem item in lvCloud.Items)
- cldCache.Add(item);
- }
- }
-
- private void WebCloud_FormClosed(object sender, FormClosedEventArgs e)
- {
- if (cldCache != null) { cldCache.Clear(); cldCache = null; }
- }
-
- private void txtFolderName_MouseClick(object sender, MouseEventArgs e)
- {
- if (string.IsNullOrEmpty(txtFolderName.Tag as string)) { txtFolderName.SelectAll(); txtFolderName.Tag = txtFolderName.SelectedText; }
-
- }
-
- private void txtFolderName_Leave(object sender, EventArgs e)
- {
- txtFolderName.Tag = null;
- }
-
- private void lvCloud_Leave(object sender, EventArgs e)
- {
- cbPublic.Enabled = cbPublic.Focused;
- }
-
- private void cbPublic_CheckedChanged(object sender, EventArgs e)
- {
- if (cbPublic.Focused && cbPublic.ThreeState == false)
- {
- if (working) return;
- var lvis = lvCloud.SelectedItems; if (lvis.Count == 0) return;
- var cb = sender as CheckBox; var state = cb.Checked;
- var text = new string[lvis.Count];
- var albums = new Album[lvis.Count];
- for (int i = 0; i < text.Length; i++)
- {
- text[i] = lvis[i].Text;
- albums[i] = new Album() { AtomEntry = lvis[i].Tag as AtomEntry };
- }
- var prompt = string.Format("Are you sure to set \"{0}\" {1}?", string.Join(", ", text), state ? "public" : "private");
- working = true;
- switch (state)
- {
- case true:
- if (DialogResult.Yes == MessageBox.Show(prompt, "Share Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
- {
- foreach (var item in albums)
- item.Access = "public";
- CloudStatus.Text = "Setting Album(s) public";
- }
- else { cbPublic.Checked = false; working = false; return; }
- break;
- case false:
- if (DialogResult.Yes == MessageBox.Show(prompt, "Protect Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
- {
- foreach (var item in albums)
- item.Access = "private";
- CloudStatus.Text = "Setting Album(s) private";
- }
- else { cbPublic.Checked = true; working = false; return; }
- break;
- }
- cbPublic.Enabled = false;
- new Thread(new ThreadStart(() =>
- {
- for (var i = 0; i < albums.Length; i++)
- {
- var @new = albums[i].PicasaEntry.Update();
- Invoke(new Action(() => { lvis[i].ToolTipText = @new.AlternateUri.Content; lvis[i].Tag = @new; }));
-
- if (cldCache != null)
- {
- var cache = cldCache.Single(_ => _.ToolTipText == albums[i].AtomEntry.AlternateUri.Content);
- cache.Tag = @new; cache.ToolTipText = @new.AlternateUri.Content;
- }
- }
- Prompt = "Done"; cbPublic.cbEnable(true); working = false;
- })).Start();
- }
- }
-
- private void cbPublic_Leave(object sender, EventArgs e)
- {
- cbPublic.Enabled = false;
- }
- }
-}
+namespace ImgRip
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Collections.ObjectModel;
+ using System.IO;
+ using System.Linq;
+ using System.Threading;
+ using System.Windows.Forms;
+
+ using Google.Documents;
+ using Google.GData.Client;
+ using Google.GData.Photos;
+ using Google.Picasa;
+
+ partial class WebCloud : Form
+ {
+ public WebCloud()
+ {
+ InitializeComponent();
+ }
+
+ bool working = false;
+ string LoginName
+ {
+ get
+ {
+ var name = tbName.Text.Trim();
+ if (name.LastIndexOf('@') < 0) name += "@gmail.com";
+ return name;
+ }
+ }
+ bool Aborted = false;
+ string Prompt { set { if (!IsHandleCreated) return; Invoke(new Action(() => CloudStatus.Text = value)); } }
+ string Title { set { if (!IsHandleCreated)return; Invoke(new Action(() => this.Text = value)); } }
+ //Local ListViewItems memory cache
+ Collection cldCache;
+ Stack Folder;
+ DocumentsRequest DR;
+ PicasaRequest PR;
+ public string AlbumID { get; set; }
+
+ internal static CloudType Service { get; set; }
+
+ // Supported Cloud storage service
+ internal enum CloudType
+ {
+ GDrive, Flickr, Facebook, Picasa
+ }
+
+ private void ConnectCloud_Click(object sender, EventArgs e)
+ {
+ CloudStatus.Text = "Waiting..."; lvCloud.Items.Clear();
+ tbName.ReadOnly = tbPass.ReadOnly = true; btnCreate.Enabled = false;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ DR = new DocumentsRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true });
+ new Thread(new ThreadStart(() =>
+ {
+ try
+ {
+ DR.Service.QueryClientLoginToken();
+ var items = DR.GetFolders().Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items)
+ lvCloud.cbAdd(item.AtomEntry, 0);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ }
+ catch (Exception li)
+ {
+ if (this.IsHandleCreated)
+ {
+ Prompt = li.Message;
+ Invoke(new Action(() => tbName.ReadOnly = false));
+ Invoke(new Action(() => tbPass.ReadOnly = false));
+ btnSign.cbEnable(true); return;
+ }
+ }
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ Prompt = lvCloud.Items.Count + " item(s)";
+ UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate);
+ UICallBack.EnableControls(false, btnDelete, btnUp, btnAdd);
+ if (this.IsHandleCreated)
+ {
+ Invoke(new Action(() => tbName.ReadOnly = false));
+ Invoke(new Action(() => tbPass.ReadOnly = false));
+ }
+ })).Start();
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ PR = new PicasaRequest(new RequestSettings("Ripper", LoginName, tbPass.Text) { AutoPaging = true, UseSSL = true });
+ new Thread(new ThreadStart(() =>
+ {
+ try
+ {
+ PR.Service.QueryClientLoginToken();
+ var items = PR.GetAlbums().Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items) lvCloud.cbAdd(item.AtomEntry, 0);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ }
+ catch (Exception li)
+ {
+ if (this.IsHandleCreated)
+ {
+ Prompt = li.Message;
+ Invoke(new Action(() => tbName.ReadOnly = false));
+ Invoke(new Action(() => tbPass.ReadOnly = false));
+ btnSign.cbEnable(true);
+ return;
+ }
+ }
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ Prompt = lvCloud.Items.Count + " Album(s)";
+ UICallBack.EnableControls(true, btnSign, txtFolderName, btnCreate);
+ UICallBack.EnableControls(false, cbPublic, btnDelete, btnUp, btnAdd);
+ if (this.IsHandleCreated)
+ {
+ Invoke(new Action(() => tbName.ReadOnly = false));
+ Invoke(new Action(() => tbPass.ReadOnly = false));
+ }
+ })).Start();
+ break;
+ #endregion
+ }
+ btnSign.Enabled = false;
+ Properties.Settings.Default.Save();
+ }
+
+ private void lvCloud_MouseDoubleClick(object sender, MouseEventArgs e)
+ {
+ if (lvCloud.FocusedItem != null)
+ {
+ ListViewItem lvi = lvCloud.FocusedItem;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ Document doc = new Document() { AtomEntry = lvi.Tag as AtomEntry };
+ if (doc.Type == Document.DocumentType.Folder)
+ {
+ Folder = Folder ?? new Stack();
+ CloudStatus.Text = "Listing \"" + doc.Title + "\"";
+ Folder.Push(doc);
+ btnDelete.Enabled = btnAdd.Enabled = btnCreate.Enabled = false;
+ lvCloud.Items.Clear();
+ new Thread(new ThreadStart(() =>
+ {
+ var items = DR.GetFolderContent(doc).Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items)
+ lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ UICallBack.EnableControls(true, btnUp, btnCreate, btnAdd, txtFolderName);
+ Title = doc.Title;
+ Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)";
+ })).Start();
+ }
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ if (AlbumID != null) return;
+ Album a = new Album() { AtomEntry = lvi.Tag as AtomEntry };
+ if (a != null)
+ {
+ CloudStatus.Text = "Listing \"" + a.Title + "\"";
+ btnDelete.Enabled = cbPublic.Enabled = txtFolderName.Enabled = false;
+ lvCloud.Items.Clear();
+ AlbumID = a.Id;
+ new Thread(new ThreadStart(() =>
+ {
+ var items = PR.GetPhotosInAlbum(AlbumID).Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items)
+ lvCloud.cbAdd(item.AtomEntry, 1);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ UICallBack.EnableControls(true, btnUp, btnAdd, txtFolderName);
+ btnCreate.cbEnable(false);
+ Title = a.Title;
+ Prompt = a.Title + ": " + items.Count() + " Photo(s)";
+ })).Start();
+ }
+ break;
+ #endregion
+ }
+ }
+ }
+
+ private void btnUp_Click(object sender, EventArgs e)
+ {
+ if (working) return;
+ working = true;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ if (Folder == null || Folder.Count == 0) { working = false; return; }
+ Document doc = Folder.Pop();
+ lvCloud.Items.Clear();
+ btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false;
+ if (Folder.Count == 0)
+ {
+ CloudStatus.Text = "Waiting...";
+ new Thread(new ThreadStart(() =>
+ {
+ var items = DR.GetFolders().Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items)
+ if (item.ParentFolders.Count == 0)
+ lvCloud.cbAdd(item.AtomEntry, 0);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ UICallBack.EnableControls(true, btnCreate, txtFolderName);
+ btnUp.cbEnable(false);
+ Prompt = items.Count() + " item(s)";
+ Title = "GDrive";
+ working = false;
+ })).Start();
+ }
+ else
+ {
+ doc = Folder.Peek();
+ CloudStatus.Text = "Listing \"" + doc.Title + "\"";
+ new Thread(new ThreadStart(() =>
+ {
+ var items = DR.GetFolderContent(doc).Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items)
+ lvCloud.cbAdd(item.AtomEntry, item.Type == Document.DocumentType.Folder ? 0 : 2);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ UICallBack.EnableControls(true, btnAdd, btnUp, btnCreate, txtFolderName);
+ Title = doc.Title;
+ Prompt = string.Join(" > ", Folder.Select(_ => _.Title).Reverse().ToArray()) + ": " + items.Count() + " item(s)";
+ })).Start();
+ }
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ if (AlbumID == null) { working = false; return; }
+ lvCloud.Items.Clear();
+ CloudStatus.Text = "Waiting...";
+ btnUp.Enabled = btnDelete.Enabled = btnCreate.Enabled = txtFolderName.Enabled = btnAdd.Enabled = false;
+ new Thread(new ThreadStart(() =>
+ {
+ var items = PR.GetAlbums().Entries;
+ Invoke(new Action(() => lvCloud.BeginUpdate()));
+ foreach (var item in items)
+ lvCloud.cbAdd(item.AtomEntry, 0);
+ Invoke(new Action(() => lvCloud.EndUpdate()));
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ AlbumID = null;
+ UICallBack.EnableControls(true, txtFolderName, btnCreate);
+ Prompt = items.Count() + " Albums(s)";
+ Title = "Picasa";
+ working = false;
+ })).Start();
+ break;
+ #endregion
+ }
+ }
+
+ private void btnCreateFolder_Click(object sender, EventArgs e)
+ {
+ string foldername = txtFolderName.Text.Trim();
+ if (string.IsNullOrEmpty(foldername)
+ || foldername.EndsWith(".")
+ || foldername.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
+ { CloudStatus.Text = "Invalid album name!"; return; }
+ if (lvCloud.FindItemWithText(foldername) != null) { CloudStatus.Text = "\"" + foldername + "\" already existed."; return; }
+ CloudStatus.Text = "Creating \"" + foldername + "\"";
+ txtFolderName.Enabled = btnCreate.Enabled = btnUp.Enabled = false;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ Document @base = null;
+ string title, tip;
+ if (Folder != null && Folder.Count > 0) @base = Folder.Peek();
+ new Thread(new ThreadStart(() =>
+ {
+ var @new = DR.CreateDocument(new Document() { Title = foldername, Type = Document.DocumentType.Folder });
+ if (@base != null)
+ @new = DR.MoveDocumentTo(@base, @new);
+ title = @new.Title; tip = @new.AtomEntry.AlternateUri.Content;
+ lvCloud.cbAdd(@new.AtomEntry, 0);
+ if (cldCache != null) cldCache.Add(new ListViewItem(title, 0) { Tag = @new.AtomEntry, ToolTipText = tip });
+ UICallBack.EnableControls(true, txtFolderName, btnCreate);
+ btnUp.cbEnable(@base != null);
+ Prompt = (@base == null ? "GDrive" : string.Join(" > ", Folder.Select(f => f.Title).Reverse().ToArray())) + ": " + lvCloud.Items.Count + " item(s)";
+ })).Start();
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ var a = new Album();
+ a.Title = foldername;
+ cbPublic.ThreeState = false;
+ a.Access = cbPublic.Checked ? "public" : "private";
+ new Thread(new ThreadStart(() =>
+ {
+ var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a);
+ lvCloud.cbAdd(@new.AtomEntry, 0);
+ if (cldCache != null) cldCache.Add(new ListViewItem(foldername, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content });
+ UICallBack.EnableControls(true, txtFolderName, btnCreate);
+ Prompt = lvCloud.Items.Count + " item(s)";
+ })).Start();
+ break;
+ #endregion
+ }
+ }
+
+ private void btnDelete_Click(object sender, EventArgs e)
+ {
+ int total = lvCloud.SelectedItems.Count;
+ if (total == 0) { CloudStatus.Text = "No item(s) selected."; return; }
+ switch (Service)
+ {
+ #region GDrive & Picasa
+ case CloudType.GDrive:
+ case CloudType.Picasa:
+ var items = lvCloud.SelectedItems.OfType().ToArray();
+ if (MessageBox.Show("Are you sure want to delete items below:\n" + string.Join(", ", items.Select(i => "\"" + i.Text + "\"").ToArray()), "Delete Cloud Storage Items", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
+ {
+ btnDelete.Enabled = btnUp.Enabled = false;
+ new Thread(DeleteCloudItem).Start(items);
+ }
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+ }
+ }
+
+ void DeleteCloudItem(object arg)
+ {
+ var items = arg as ListViewItem[];
+ Action RemoveItem = lvi => lvCloud.Items.Remove(lvi);
+ switch (Service)
+ {
+ #region GDrive & Picasa
+ case CloudType.GDrive:
+ case CloudType.Picasa:
+ foreach (var lvi in items)
+ {
+ if (Aborted)
+ {
+ Prompt = "Operation Cancelled!";
+ btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null);
+ Aborted = false;
+ return;
+ }
+ Prompt = "Deleting \"" + lvi.Text + "\"";
+ try
+ {
+ (lvi.Tag as AtomEntry).Delete();
+ }
+ catch (Exception exp)
+ {
+ MessageBox.Show(exp.Message, "Delete \"" + lvi.Text + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ break;
+ }
+ if (cldCache != null) cldCache.Remove(cldCache.Single(_ => _.ToolTipText == lvi.ToolTipText));
+ Invoke(RemoveItem, lvi);
+ }
+ btnUp.cbEnable(Service == CloudType.GDrive ? (Folder != null && Folder.Count > 0) : AlbumID != null);
+ Prompt = lvCloud.Items.Count + (Service == CloudType.GDrive ? " items" : (AlbumID == null ? " Albums(s)" : " Photos(s)"));
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+ }
+ }
+
+ void AddCloudFile(object arg)
+ {
+ var files = arg as string[];
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ Document @base = null;
+ if (Folder != null && Folder.Count > 0)
+ @base = Folder.Peek();
+ var DocType = new Dictionary
+ {
+ { ".jpg", "image/jpeg" }, { ".png", "image/png" }, { ".gif", "image/gif" }, { ".tiff", "image/tiff" },{ ".bmp", "image/bmp" },
+ { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" },{ ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"},
+ { ".wmv", "video/x-ms-wmv" }, {".asf","video/x-ms-asf"},{".tif","video/x-ms-asf"},
+ {"Default",".txt;.rtf;.ppt;.pptx;.pps;.htm;.html;.xls;.xlsx;.ods;.csv;.tsb;.doc;.docx;.pages;.ai;.dxf;.eps;.ps;.xps;.ttf"}
+ };
+ files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray();
+ foreach (var file in files)
+ {
+ if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; }
+ if (!File.Exists(file)) continue;
+ string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower();
+ if (DocType.ContainsKey(ext) || DocType["Default"].Split(';').Contains(ext))
+ {
+ Prompt = "Adding \"" + filename + "\"";
+ try
+ {
+ var de = DocType.ContainsKey(ext) ? DR.Service.UploadFile(file, filename, DocType[ext], true) : DR.Service.UploadDocument(file, filename);
+ var @new = new Document { AtomEntry = de };
+ if (@base != null)
+ {
+ Prompt = "Moving \"" + @new.Title + "\" to " + @base.Title;
+ @new = DR.MoveDocumentTo(@base, @new);
+ }
+ string ttt = @new.AtomEntry.AlternateUri.Content;
+ lvCloud.cbAdd(@new.AtomEntry, 2);
+ if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 2) { Tag = @new.AtomEntry, ToolTipText = ttt });
+ }
+ catch (Exception exp)
+ {
+ MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ break;
+ }
+ }
+ }
+ Prompt = lvCloud.Items.Count + " items";
+ btnUp.cbEnable(@base != null);
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ if (AlbumID == null)
+ {
+ var dirs = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) != 0).ToArray();
+ foreach (var dir in dirs)
+ {
+ var a = new Album();
+ a.Title = Path.GetFileName(dir);
+ Prompt = "Creating Album: \"" + a.Title + "\"";
+ var @new = PR.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName)), a);
+ lvCloud.cbAdd(@new.AtomEntry, 0);
+ if (cldCache != null) cldCache.Add(new ListViewItem(@new.Title, 0) { Tag = @new.AtomEntry, ToolTipText = @new.AtomEntry.AlternateUri.Content });
+ var aid = @new.Id;
+ var photos = Directory.GetFiles(dir);
+ AddtoAlbum(photos, aid);
+ }
+ Prompt = lvCloud.Items.Count + " Album(s)";
+ }
+ else
+ {
+ AddtoAlbum(files, AlbumID);
+ Prompt = lvCloud.Items.Count + " Photos(s)";
+ }
+ btnUp.cbEnable(AlbumID != null);
+ break;
+ #endregion
+ }
+ System.Media.SystemSounds.Exclamation.Play();
+ btnSign.cbEnable(true);
+ }
+
+ void AddtoAlbum(string[] files, string aId)
+ {
+ //raw formats (.cr2, .nef, .orf, etc.) - "image/x-image-raw"
+ var PicasaType = new Dictionary
+ {
+ { ".jpg", "image/jpeg"}, { ".gif", "image/gif" }, { ".bmp", "image/bmp" }, { ".mov", "video/quicktime" }, { ".psd", "application/photoshop" },
+ { ".avi", "video/x-msvideo"}, { ".mpg", "video/mpeg"}, { ".wmv", "video/x-ms-wmv" },{".asf","video/x-ms-asf"},
+ {".tif","video/x-ms-asf"},{".png","image/png"},{".cr2","image/x-image-raw"},{".nef","image/x-image-raw"},{".orf","image/x-image-raw"}
+ };
+ files = files.Where(f => (File.GetAttributes(f) & FileAttributes.Directory) == 0).ToArray();
+ foreach (var file in files)
+ {
+ if (Aborted) { Prompt = "Operation Cancelled!"; Aborted = false; break; }
+ if (!File.Exists(file)) continue;
+ string filename = Path.GetFileName(file), ext = Path.GetExtension(file).ToLower();
+ if (!PicasaType.ContainsKey(ext) || string.IsNullOrEmpty(ext)) continue;
+ Prompt = "Adding \"" + filename + "\"";
+ using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
+ {
+ try
+ {
+ var ae = PR.Service.Insert(new Uri(PicasaQuery.CreatePicasaUri(LoginName, aId)), fs, PicasaType[ext], filename);
+ if (AlbumID != null)
+ {
+ lvCloud.cbAdd(ae, 1);
+ if (cldCache != null) cldCache.Add(new ListViewItem(filename, 1) { Tag = ae, ToolTipText = ae.AlternateUri.Content });
+ }
+ fs.Close();
+ }
+ catch (Exception exp)
+ {
+ fs.Close();
+ MessageBox.Show(exp.Message, "Upload \"" + filename + "\" ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ break;
+ }
+ finally
+ {
+ fs.Dispose();
+ }
+ }
+ }
+ }
+
+ private void btnAddFiles_Click(object sender, EventArgs e)
+ {
+ if (DialogResult.OK == ofd.ShowDialog(this))
+ {
+ Aborted = btnUp.Enabled = btnSign.Enabled = false;
+ new Thread(AddCloudFile).Start(ofd.FileNames);
+ }
+ }
+
+ private void lvCloud_AfterLabelEdit(object sender, LabelEditEventArgs e)
+ {
+ ListViewItem lvi = lvCloud.Items[e.Item];
+ if (string.IsNullOrEmpty(e.Label) || e.Label == lvi.Text) { e.CancelEdit = true;return; }
+ CloudStatus.Text = "Renaming...";
+ switch (Service)
+ {
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa & GDrive
+ case CloudType.GDrive:
+ case CloudType.Picasa:
+ var ae = (lvi.Tag as AtomEntry);
+ ae.Title.Text = e.Label;
+ new Thread(new ThreadStart(() =>
+ {
+
+ var @new = ae.Update();
+ if (cldCache != null)
+ {
+ ListViewItem item = cldCache.Single(i => i.ToolTipText == lvi.ToolTipText);
+ item.Text = e.Label; item.ToolTipText = @new.AlternateUri.Content; item.Tag = @new;
+ }
+ Invoke(new Action(() => lvi.ToolTipText = @new.AlternateUri.Content));
+ lvi.Tag = @new;
+ Prompt = "Done";
+ })).Start();
+ break;
+ #endregion
+ }
+ }
+
+ private void lvCloud_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (lvCloud.Focused)
+ {
+ if (e.KeyCode == Keys.Back)
+ btnUp_Click(sender, e);
+ if (e.KeyCode == Keys.Escape)
+ {
+ Aborted = true;
+ CloudStatus.Text = "Pending Cancelled...";
+ }
+ if (e.Control && e.KeyCode == Keys.V)
+ {
+ var files = Clipboard.GetFileDropList();
+ if (files.Count > 0)
+ {
+ Aborted = btnUp.Enabled = btnSign.Enabled = false;
+ var sa = new string[files.Count];
+ files.CopyTo(sa, 0);
+ new Thread(AddCloudFile).Start(sa);
+ }
+ }
+ ListViewItem lvi = lvCloud.FocusedItem;
+ if (lvi != null)
+ if (e.KeyCode == Keys.F2)
+ lvi.BeginEdit();
+ else if (e.KeyCode == Keys.C && e.Control)
+ Clipboard.SetText(lvi.ToolTipText);
+ }
+ }
+
+ private void lvCloud_DragDrop(object sender, DragEventArgs e)
+ {
+ var lv = sender as ListView;
+ var files = e.Data.GetData(DataFormats.FileDrop) as string[];
+ if (files == null || files.Length == 0) return;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ if (DR == null) return;
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ break;
+ #endregion
+ }
+ Aborted = btnUp.Enabled = btnSign.Enabled = false;
+ new Thread(AddCloudFile).Start(files);
+ }
+
+ private void lvCloud_DragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.FileDrop))
+ {
+ e.Effect = DragDropEffects.Copy;
+ }
+ }
+
+ private void WebCloud_Load(object sender, EventArgs e)
+ {
+ switch (Service)
+ {
+ case CloudType.GDrive:
+ gpLogin.Text = "GDrive";
+ cbPublic.Visible = false;
+ txtFolderName.Location = new System.Drawing.Point(CmdPanel.Location.X + btnUp.Location.X, txtFolderName.Location.Y);
+ txtFolderName.Width = CmdPanel.Width - 5;
+ break;
+ case CloudType.Flickr:
+ gpLogin.Text = "Flickr";
+ break;
+ case CloudType.Facebook:
+ gpLogin.Text = "Facebook";
+ break;
+ case CloudType.Picasa:
+ gpLogin.Text = "Picasa";
+ break;
+ }
+ }
+
+ private void lvCloud_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
+ {
+ if (lvCloud.SelectedItems.Count > 0)
+ {
+ btnDelete.Enabled = true;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ var lvi = lvCloud.SelectedItems[0];
+ var doc = (lvi.Tag as AtomEntry);
+ Prompt = "Updated: " + doc.Updated.ToShortDateString();
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ if (AlbumID == null)
+ {
+ cbPublic.Enabled = cbPublic.ThreeState = cbPublic.AutoCheck = true;
+ uint total = 0, check = 0;
+ foreach (ListViewItem item in lvCloud.SelectedItems)
+ {
+ var a = new Album() { AtomEntry = item.Tag as AtomEntry };
+ total += a.NumPhotos;
+ if (a.Access == "public") check++;
+ }
+ cbPublic.CheckState = check == 0 ? CheckState.Unchecked : check == lvCloud.SelectedItems.Count ? CheckState.Checked : CheckState.Indeterminate;
+ cbPublic.ThreeState = cbPublic.CheckState == CheckState.Indeterminate;
+ cbPublic.AutoCheck = !cbPublic.ThreeState;
+ Prompt = string.Format("Total: {0} Photos", total);
+ }
+ else
+ {
+ long total = 0;
+ foreach (ListViewItem item in lvCloud.SelectedItems)
+ total += new Photo() { AtomEntry = item.Tag as AtomEntry }.Size;
+ Prompt = string.Format("Total: {0} KB", total / 1024);
+ }
+ break;
+ #endregion
+ }
+ }
+ else
+ {
+ btnDelete.Enabled = cbPublic.Enabled = false;
+ switch (Service)
+ {
+ #region GDrive
+ case CloudType.GDrive:
+ Prompt = lvCloud.Items.Count + " item(s)";
+ break;
+ #endregion
+
+ #region Flickr
+ case CloudType.Flickr:
+ break;
+ #endregion
+
+ #region Facebook
+ case CloudType.Facebook:
+ break;
+ #endregion
+
+ #region Picasa
+ case CloudType.Picasa:
+ cbPublic.CheckState = CheckState.Unchecked;
+ Prompt = lvCloud.Items.Count + (AlbumID == null ? " Albums(s)" : " Photos(s)");
+ break;
+ #endregion
+ }
+ }
+ }
+
+ private void lvCloud_MouseClick(object sender, MouseEventArgs e)
+ {
+ if (lvCloud.SelectedItems.Count > 0)
+ btnDelete.Enabled = true;
+ else
+ btnDelete.Enabled = false;
+ }
+
+ private void txtFolderName_TextChanged(object sender, EventArgs e)
+ {
+ if (cldCache == null) return;
+ string text = txtFolderName.Text.Trim();
+ lvCloud.SelectedItems.Clear();
+ if (string.IsNullOrEmpty(text))
+ if (txtFolderName.Text.Length > 0) return;
+ else
+ {
+ if (lvCloud.Items.Count != cldCache.Count)
+ {
+ lvCloud.SuspendLayout();
+ lvCloud.Items.Clear();
+ lvCloud.Items.AddRange(cldCache.ToArray());
+ }
+ }
+ else
+ {
+ lvCloud.SuspendLayout();
+ lvCloud.Items.Clear();
+ lvCloud.Items.AddRange(cldCache.Where(_ => _.Text.ContainsEx(text)).ToArray());
+ }
+ lvCloud.ResumeLayout();
+ CloudStatus.Text = lvCloud.Items.Count + " items";
+ }
+
+ private void txtFolderName_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ if (cldCache == null)
+ {
+ cldCache = new Collection();
+ foreach (ListViewItem item in lvCloud.Items)
+ cldCache.Add(item);
+ }
+ }
+
+ private void WebCloud_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ if (cldCache != null) { cldCache.Clear(); cldCache = null; }
+ }
+
+ private void txtFolderName_MouseClick(object sender, MouseEventArgs e)
+ {
+ if (string.IsNullOrEmpty(txtFolderName.Tag as string)) { txtFolderName.SelectAll(); txtFolderName.Tag = txtFolderName.SelectedText; }
+
+ }
+
+ private void txtFolderName_Leave(object sender, EventArgs e)
+ {
+ txtFolderName.Tag = null;
+ }
+
+ private void lvCloud_Leave(object sender, EventArgs e)
+ {
+ cbPublic.Enabled = cbPublic.Focused;
+ }
+
+ private void cbPublic_CheckedChanged(object sender, EventArgs e)
+ {
+ if (cbPublic.Focused && cbPublic.ThreeState == false)
+ {
+ if (working) return;
+ var lvis = lvCloud.SelectedItems; if (lvis.Count == 0) return;
+ var cb = sender as CheckBox; var state = cb.Checked;
+ var text = new string[lvis.Count];
+ var albums = new Album[lvis.Count];
+ for (int i = 0; i < text.Length; i++)
+ {
+ text[i] = lvis[i].Text;
+ albums[i] = new Album() { AtomEntry = lvis[i].Tag as AtomEntry };
+ }
+ var prompt = string.Format("Are you sure to set \"{0}\" {1}?", string.Join(", ", text), state ? "public" : "private");
+ working = true;
+ switch (state)
+ {
+ case true:
+ if (DialogResult.Yes == MessageBox.Show(prompt, "Share Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
+ {
+ foreach (var item in albums)
+ item.Access = "public";
+ CloudStatus.Text = "Setting Album(s) public";
+ }
+ else { cbPublic.Checked = false; working = false; return; }
+ break;
+ case false:
+ if (DialogResult.Yes == MessageBox.Show(prompt, "Protect Album(s) in Picasa", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
+ {
+ foreach (var item in albums)
+ item.Access = "private";
+ CloudStatus.Text = "Setting Album(s) private";
+ }
+ else { cbPublic.Checked = true; working = false; return; }
+ break;
+ }
+ cbPublic.Enabled = false;
+ new Thread(new ThreadStart(() =>
+ {
+ for (var i = 0; i < albums.Length; i++)
+ {
+ var @new = albums[i].PicasaEntry.Update();
+ Invoke(new Action(() => { lvis[i].ToolTipText = @new.AlternateUri.Content; lvis[i].Tag = @new; }));
+
+ if (cldCache != null)
+ {
+ var cache = cldCache.Single(_ => _.ToolTipText == albums[i].AtomEntry.AlternateUri.Content);
+ cache.Tag = @new; cache.ToolTipText = @new.AlternateUri.Content;
+ }
+ }
+ Prompt = "Done"; cbPublic.cbEnable(true); working = false;
+ })).Start();
+ }
+ }
+
+ private void cbPublic_Leave(object sender, EventArgs e)
+ {
+ cbPublic.Enabled = false;
+ }
+ }
+}
diff --git a/Cloud.resx b/Cloud.resx
index 0ccf1ee..45ca147 100644
--- a/Cloud.resx
+++ b/Cloud.resx
@@ -1,579 +1,579 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
- 118, 17
-
-
-
- AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
- LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM
- HgAAAk1TRnQBSQFMAgEBAwEAAcABAgHAAQIBGAEAARgBAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFg
- AwABGAMAAQEBAAEYBgABGxIASP8SAAP9BvYL9QH0AvUB9Bv1A/wG/wP5A/8D2ANNAz4DQwNCA0EDQgNB
- BkMGQgM8Az8DRgN7Cf8D/kgAA/8B/AL9AfQC9jr0AfUB9gH7AvwSAAL0AfMBmAGSAY4BnwGZAZUBngGY
- AZYBnAGXAZMBmgGVAZIBmgGVAZIBmgGVAZIBmgGUAZABmQGUAY8BoAGaAZcBoQGbAZkBmgGVAZEBmgGV
- AZIBnQGXAZMBnwGZAZUBnwGYAZQC7AHrA/4D+wP/A6ABSQFGAUIB1gHTAc8B4gHfAdsB3gHbAdcB3QHb
- AdoB3QHbAdoB3gHcAdsB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAtoB1wHTAecB5AHgAdMB0AHM
- Aa0BqgGmAxYG+wP/SAAD/wG8AdUB4wEwAWQBgQEvAVUBagEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv
- AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv
- AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVcBbQG0AcIByRIAAfMB8gHxAVABQwE+AVUBTAFGAVYBTQFH
- AVYBTQFHAVUBTQFHAVUBTQFHAVUBTAFGAWEBWQFUAZUBkAGMAaUBogGeAa0BqgGlAbEBqwGmAW8BZwFj
- AVUBTAFGAVcBTgFHAW4BYQFbAe0B7AHrBv8D+wMGAesB6QHoAf0B+wH6Av8B/gH9AfsB+gL/Af4C/wH+
- Av8B/gL/Af4B/wH+Af0B/wH+Af0C/wH+Av8B/gL/Af4C/wH+Av8B/gHyAfAB7wOhA54D/gP/SAAD/wG5
- AdIB4gFyAbEB1gFyAcsB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAcAB9AFlAcAB9AFl
- AcAB9AFlAcAB9AFlAcAB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFo
- AcIB9AFMAZMBvgGuAbwBxAYAA/0B4AHfAeAD4gPsAeAB3QHcAVkBSwFEAV8BVgFQAWABVgFSAWABVgFR
- AWABVwFRAV8BVgFQAXYBbwFqAagBpAGiAZoBlwGVAZ0BmwGYAbcBtQGyAdMB0QHPAcYBwQG9AX0BdQFw
- AWEBVwFRAXQBZwFgAe0B7AHrA/8D+wP/AyoD8wb4A/ED9APzA/AD9An+Cf8D/AP+A9MDXgb/SAAD/wG6
- AdMB4wGxAc0B3gGTAewB/wF7AdwB/wF7AdsB/wF6AdkB/wF5AdgB/wF3AdYB/wF2AdQB/wF2AdMB/wF0
- AdIB/wF0AdEB/wFyAdAB/wFxAc4B/wFxAc0B/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFy
- Ac8B/wFSAZsBxgGvAb0BxQYAA/gB6AHpAewBlQGiAbIBqQG0AcIBswGyAbMBYAFRAUoBaAFeAVgBaAFf
- AVkBaAFfAVoBaAFfAVkBZQFbAVYBrAGmAaMBpQGjAaEBjQGKAYgBagFoAWUBdwF1AXMBzAHLAckBsgGv
- AawBngGaAZUBagFgAVkBfAFuAWcB7QLrCf8BLgEsASsD8wP6A/gD8wPqA/YD8gb0A/UD+wP1A/sD/QP8
- A/8B2AHVAdEDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGUAe4B/wGDAecB/wGDAeUB/wGBAeIB/wF/
- Ad8B/wF9AdwB/wF7AdoB/wF5AdcB/wF3AdUB/wF2AdMB/wF1AdEB/wFzAdAB/wFxAc4B/wFwAc0B/wFv
- AcsB/wFvAcsB/wFvAcsB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQYAA/MB5AHlAekBIAFBAW8BBgE/
- AYwBKgFIAXIBaQFZAVABcQFoAWIBcQFoAWIBcQFoAWIBcAFnAWIBeAFvAWoBwAG9AboBpwGkAaIBUgFQ
- AU4BRwE1ATMBUwE8ATgBUQFQAU4BqgGnAaMBnQGaAZcBfQF0AW8BgwF1AW0B7gHsAesJ/wEvAS0BLAP3
- A/gD9gbvA/ID8wPwA/ED9APqA+sD6AP7A/wD/wHaAdcB0wNhAfwB/gH/A/5IAAP/AboB0wHjAbABzQHe
- AZcB8QH/AYUB6QH/AYUB5wH/AYQB5AH/AYEB4QH/AX8B3wH/AX0B3QH/AXsB2gH/AXkB2AH/AXcB1QH/
- AXYB1AH/AXQB0gH/AXMB0AH/AXIBzwH/AXABzQH/AW8BywH/AW8BywH/AW8BywH/AXEBzgH/AVIBmgHF
- Aa8BvQHFBgAD7gHRAdUB3AEnAT0BYQEWAU4BnAEqAV0BpAFyAWIBWQF8AXIBbAF8AXIBbQF7AXIBbQF7
- AXEBbAGEAXwBdwG1AbIBrwG4AbUBsQFlAWMBYQFHATkBNwFPATwBOgFMAUsBSQGWAZMBkQGYAZYBkwGJ
- AYABewGLAX4BdgHuAe0B7Ab/A/4BLwEtASwG+wPwA+YD6wP0A+0D8wPpA+MD5gPtA/AD/gP/A/gB3AHZ
- AdUDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGZAfQB/wGHAewB/wGHAekB/wGGAeYB/wGDAeQB/wGB
- AeEB/wF/Ad8B/wF9AdwB/wF7AdoB/wF5AdgB/wF4AdYB/wF2AdQB/wF0AdIB/wFzAdEB/wFyAc8B/wFx
- Ac0B/wFwAcwB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQMAA/8D7AGvAbMBuwEoATYBUAEoAUcBeAE3
- AV0BmQF8AW0BZAGHAX0BdwGFAXwBdwGFAXwBdwGFAXwBdwGGAX0BeQGvAasBpwG9AboBtgHfAd4B3QF/
- AX0BewFlAWIBYAGUAZIBjwGKAYgBhQGcAZkBlQGMAYIBfQGSAYUBfgHuAe0B7AH/Av4D/wP+ATABLgEt
- A/cD/APrA+MD5wPpA+gD/gb/A/kD/gP/A/wD+gP9Ad0B2gHWA2AB/AH+Af8D/kgAA/8BugHTAeMBsAHN
- Ad4BmwH2Af8BigHuAf8BigHsAf8BhwHpAf8BhQHnAf8BgwHkAf8BggHhAf8BfwHfAf8BfQHdAf8BewHa
- Af8BeQHYAf8BdwHWAf8BdgHUAf8BdQHRAf8BcwHPAf8BcgHOAf8BcAHNAf8BbwHMAf8BcQHOAf8BUgGa
- AcUBrwG9AcUDAAP+AewB6wHqAXsBiwG0ARsBNAF1ASUBQQF/AUcBVAF6AYYBdgFuAZEBhwGCAY8BhgGB
- AY8BhgGBAY8BhQGBAY4BhAF/AbUBrgGpAdoB2AHUA9UB7AHqAecByAHGAcMBigGIAYYBgwGBAX4BngGX
- AZQBlwGMAYYBnAGNAYcB7gHtAewD/wT+Af8B/QEsAS0BKwHzAfQB8gH7AfwB+gHmAecB5QHcAd0B2wPc
- A+UD3wPiAeUB5gHkAeAB4QHfAeoB6wHpAeIB4wHhA+QD2wP+A/kB3QHbAdoDYgP/Af0C/0gAA/8BugHT
- AeMBsAHNAd4BnAH3Af8BjAHxAf8BjAHvAf8BigHsAf8BhwHqAf8BhQHoAf8BhAHlAf8BggHiAf8BgAHg
- Af8BfQHdAf8BfAHbAf8BegHZAf8BeAHWAf8BdgHUAf8BdAHSAf8BcwHQAf8BcgHOAf8BcAHMAf8BcQHO
- Af8BUgGaAcUBrwG9AcUDAAP8AegB5wHoAUMBeAHeAQQBSgHVAQcBVgHnATwBaQG2AZABgAF1AZoBkAGL
- AZcBjwGJAZYBjQGIAZgBkAGIAZcBjwGHAZwBlAGOAdEBzQHKAegB5QHjAbUBsgGsAY0BiQGGAXwBeQF2
- AZMBjQGKAZkBkAGMAVgBUgFlAZEBhQGDAe8C7QP/A/4B/QH+AfwBLQEuASwB9gH3AfUB/AH9AfsB4QHi
- AeAB1QHWAdQD4QPeA9UE0wHUAdIB3QHeAdwB0QHSAdAB2gHbAdkB2AHZAdcB1AHVAdMB7QHuAewB+gH7
- AfkB3gHcAdsDYgP/Af0C/0gAA/8BugHTAeMBsAHNAd4BnQH5Af8BjgHzAf8BjgHxAf8BjAHuAf8BiQHs
- Af8BhwHqAf8BhgHnAf8BhAHkAf8BggHiAf8BgAHfAf8BfgHdAf8BfAHbAf8BeQHYAf8BeAHWAf8BdgHU
- Af8BdQHSAf8BdAHQAf8BcgHOAf8BcQHOAf8BUgGaAcUBrwG9AcUDAAP6AeAB5QHqASEBegH1AQkBdAH5
- AQwBhAH9AUQBhwG+AaABjgGDAaoBoAGaAakBoAGbAagBnQGVAa8BowGYAa0BowGWAaYBmgGRAa0BogGc
- Ab4BtAGuAbsBsQGrAa0BpQGgAakBoAGcAasBoQGbAakBoAGbAXcBcQF+AaABlAGSAe8B7gHtA/8D/gH9
- Af4B/AEuAS8BLQH8Af0C+wH8AfoB2AHZAdcBzQHOAcwD2gPOA9MD0QHXAdgB1gHbAdwB2gHSAdMB0QHZ
- AdoB2AHlAeMB4gH+AfwB+wH8AfoB+QH+AfwB+wHeAdwB2wNiA/8B/QL/SAAD/wG6AdMB4wGwAc0B3gGg
- AfsB/wGPAfYB/wGPAfQB/wGOAfEB/wGMAe8B/wGKAewB/wGIAeoB/wGGAegB/wGEAeUB/wGBAeIB/wF/
- AeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF4AdcB/wF3AdQB/wF1AdIB/wFzAdAB/wFxAc4B/wFSAZoBxQGv
- Ab0BxQMAA/gB1QHhAe4BEQF4AfkBGwGIAf0BHAGYAf8BOwGeAd0BoAGmAawBzQHIAcMBsAGqAaMBrwLH
- Aa0B2AHbAawB2AHaAasB0QHZAawB2AHaAasB0wHbAawB0wHcAasBvwHHAaoBsQG2AasBuwHRAcsCygHN
- AcoByAHOAcoByAH3AvYG/wH8Af0B+wEvATABLgH1AfYB9AH6AfsB+QHSAdMC0QHSAdADzwPQA70DxAHR
- AdIB0AHHAcgBxgHZAdoB2AHfAeAB3gHOAcwBywH8AfoB+QH3AfUB9AHzAfEB8AHeAdwB2wNiA/8B/QL/
- SAAD/wG6AdMB4wGwAc0B3gGiAf4B/wGRAfgB/wGRAfYB/wGQAfQB/wGOAfEB/wGMAe8B/wGLAe0B/wGI
- AeoB/wGGAegB/wGEAeUB/wGCAeMB/wGAAeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF5AdcB/wF2AdQB/wF0
- AdIB/wFxAc8B/wFSAZoBxQGvAb0BxQMAAfYC9QHEAdcB8AEYAXYB9AEqAY0B/QEyAZ8B/wEzAbUB/wEm
- AY4BvgEoAV0BgAElAYwBwAEpAcsB6wEvAeUB+gEsAeEB+gESAZkB4AEVAZ0B2wEXAaQB9AEkAbAB5AEa
- AVUBcwEbAXUBxQEWAXsB9gEYAWkB5wGlAcMB8QHtAewB6wMACf4DLQH6AfgB9wH8AfoB+QHPAc0BzAHE
- AcIBwQHPAc0BzAG/Ab0BvAHOAcwBywG6AbgBtwHCAcABvwHDAcEBwAHKAcgBxwHGAcQBwwG9Ab4BvAHI
- AckBxwH5AfcB9gH3AfUB9AHaAdgB1wFhAV8BXgP+A/9IAAP/AboB0wHjAbABzQHeAaMC/wGTAfoB/wGT
- AfgB/wGSAfYB/wGQAfQB/wGOAfIB/wGNAe8B/wGKAe0B/wGIAeoB/wGGAegB/wGEAeUB/wGCAeMB/wGA
- AeAB/wF+Ad0B/wF8AdsB/wF6AdkB/wF4AdYB/wF2AdQB/wFxAc8B/wFSAZkBxQGvAb0BxQMAA/IBsAHE
- AeYBKAFsAdcBLwGBAe4BMAGRAfsBOwGsAf8BNwHDAfcBIAGKAaoBBgEyAV8BEQF2AbEBLAHXAfUBMwHv
- Af8BDAFgAZoBCQFWAZgBFwGfAfYBGwFqAZgBGQFjAaABHQGVAf8BGQGHAf4BEAFyAfwB0AHkAfwC8gHx
- AwAD/wb+Ay4B9wH1AfQB9gH0AfMBwQG/Ab4BzQHLAcoBugG4AbcBvgG8AbsBwgHAAb8BswGxAbABzgHM
- AcsByQHHAcYBtAGyAbEBuQG3AbYBwQHCAcABsQGvAa4B7QHpAegB8gHtAeoB0gHPAcsBYAFeAV0D/wP+
- SAAD/wG6AdMB4wGwAc4B3gGlAv8BlAH7Af8BlQH5Af8BkwH4Af8BkgH2Af8BkAH0Af8BjgHxAf8BjQHv
- Af8BigHtAf8BiQHrAf8BhgHoAf8BhAHmAf8BggHjAf8BgQHgAf8BfwHeAf8BfQHbAf8BegHZAf8BeQHX
- Af8BcQHPAf8BUgGZAcUBrwG9AcUDAAPsAZUBswHnASoBcwHkATYBgAHrATYBigH1ATEBmgH8AS4BswH+
- AS4BywH/AR0BgwGoAQcBKAFLAREBdwHFASEBuQH8AQoBVgGZAQkBWwGnARIBdAG4ARkBSAFiATUBrwHs
- ASUBlwH/ARABXgHpASkBUAG8AekB6gHuA/kDAAP/Bv4DLgH5AfcB9gHyAfAB7wHAAb4BvQHBAb8BvgGj
- AaEBoAG5AbcBtgG6AbgBtwG1AbMBsgG1AbMBsgGqAagBpwG8AboBuQG1AbMBsgGoAaYBpQHBAb0BvAHw
- AesB6AHhAdsB1gHDAbwBswFjAWABXAH9Av8D/UgAA/8BugHTAeMBsAHOAd4BpQL/AZUB/QH/AZUB+wH/
- AZQB+gH/AZIB+AH/AZAB9gH/AY8B9AH/AY0B8gH/AYsB8AH/AYoB7QH/AYgB6gH/AYYB6AH/AYQB5QH/
- AYEB4gH/AX8B4AH/AX0B3gH/AXwB2wH/AXkB2AH/AXEBzwH/AVIBmgHGAa8BvQHFAwAC5gHnAX0BnAHX
- ATEBawHPAUABbgHHATwBdwHYASsBiQHxASkBmwH1ASgBpgH7ASgBrwH+ARwBawGhAREBRQF0AR8BhQHL
- ARgBYgGlARABTQGRARIBJQE8ASgBfgHEAScBiwHoARwBXgGxARcBQAF+AVgBbQGPAesC6QP+AwAD/wP+
- A/0DLwH1AfMB8gHzAfEB8AHCAcABvwGpAacBpgGiAaABnwGzAbEBsAGgAZ4BnQGqAagBpwGyAbABrwHK
- AcgBxwGxAa8BrgG2AbQBswGxAa8BrgGzAa8BrgHdAdcB0gHKAcIBuwGnAZ4BlAFmAWMBXwH9Av8D/kgA
- A/8BugHTAeMBsQHPAd8BqwL/AZwB/gH/AZ0B/gH/AZwB/AH/AZsB/AH/AZkB+gH/AZcB9wH/AZYB9gH/
- AZQB9AH/AZMB8gH/AZEB7gH/AZAB7gH/AY4B6wH/AYwB6AH/AYoB5QH/AYkB5AH/AYYB4QH/AYUB4AH/
- AYEB2wH/AVABlgHAAa4BvAHEAwAB3wHgAeMBYAGHAckBJAFLAZMBOQFaAZ4BOAFlAbkBNQFiAacBKwFq
- AbYBKAFwAcQBJgF0Ac8BJQF0Ac4BHAFCAW4BFwEwAUYBGQEyAU8BFgEhASwBGgEuAUwBHwFdAbABGQFG
- AYEBFgEqAUoBFwEbASIBhAGKAZMC6AHnBgAG/gP9AzAB+AH2AfUB8AHuAe0BxgHEAcMBrgGsAasBpQGj
- AaIBvwG9AbwBpgGkAaMBrQGrAaoBpgGkAaMD6gHwAe4B7QHZAdUB0AHRAcwByQHjAd8B2gHRAcsBxAHT
- Ac0BwgGVAY4BhQFlAWEBYAH9Av8D/UgAA/8BuAHSAeIBrgHMAd0B8AH5AfwB7wH4AfwB7wH4AfwB7wH4
- AfwB7wH4AfwB7wH5AfwB7wH5AfwB7wH5AfwB7wH5AfwB8AH5AfwB6wH4AfwB4gHxAfYB4gHxAfcB4gHx
- AfcB4gHwAfcB4gHwAfcB4gHwAfcB4gHwAfYB1AHmAe0BLAFWAWsBsgHAAcYDAAHWAdgB2gFLAVsBdgEW
- ASgBRQEiAS0BQgEkAToBZAEpATQBSwEiATQBUAEkAToBXQEiATQBUgEaASwBSQEXASIBMwEfASoBPgEb
- AR4BJAIYARcBGQEaAR0BGQEfASoBFAEXARgBFAEdASYBHQE8AWYBpgG8AdsC7wHuBgAG/gP9AzAB8wHx
- AfAB7gHsAesBkgGQAY8BrwGtAawBogGgAZ8BkwGRAZABqwGpAagBpQGjAaIBpwGlAaQBogGeAZ0B6wHo
- AeQB4gHeAdkB6AHlAeEB5QHiAd4B4AHeAd0B5AHlAeMBEwEUARIB7wLxAfwC/gL/Af5IAAP/AdAB4QHs
- AXEBpgHHAYoBzQHkAY8B0wHoAY0B0gHoAYsBzwHoAYkBzQHoAYYByQHoAYQBxgHoAYEBwwHoAYEBwgHp
- AXoBuQHeAWwBmwG5AX0BqQHFAYABqwHHAYABqwHHAYABrAHHAYABrAHHAYABrAHHAX8BqwHGAX4BqgHG
- AasBzQHeAfoC/AP+Ac8B0AHUAUwBUQFkAR8BJAEwARoBHAEjAR4BIAEmAR0BIgEsARgBHwEmARUBGwEg
- ARcBHAEhARYBGwEeARUBGgEcARYBGwEdARcBGQEbARcBGAEZAxcBIAEoATUBOAFZAZABMwFzAcgBPgGF
- Ad8BxQHWAewD+QYAA/8D/gP9AzEB+AH1AfEB7gHrAecBgAF9AXkBvwG8AbgBxgHDAb8B1gHTAc8BxQHC
- Ab4BywHIAcQB0QHNAcwBqAGjAaAB1QHRAcwB+gH3AfMB6gHhAd4B6wPjAd4B3wELAQoBDAP/AfoF/AP3
- SAAD/wH8Af0B/gHIAdsB5wFiAbABzAGRAfQB+AGdAfwB/gGYAfgB/gGSAfEB/gGLAegB/gGFAeAB/gF7
- AdcB/gFqAcQB8wFFAX0BnQHCAc0B0wH2AfkB+gH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4
- AfoB/AH4AfsB/AH9Af4E/wP6Ad0B3gHiAZ4BogGxAXwBgQGVAWABZQF9AVIBWQF5AUUBUwF/ATUBSwF4
- AR0BKwFAARMBHAEjARkBIwEuARQBGwEfARQBGQEbARUCGQEWARgBGQEcAR8BJQEiASgBNAE3AUsBcwE/
- AV4BmQFgAYABuQHWAdoB4gP+BgAD/wP+A/0DMQHxAe4B6gHpAeYB4gHqAecB4wHoAeUB4QHoAeUB4QHk
- AeEB3QHpAeYB4gHqAecC4wHgAdwB3wHZAdQByAHCAbsB9wH0AfAB4AHeAd0B6AHmAeUBFwIZAfcB/AH7
- Bv8B/QL7Af8B/gH/SAAJ/wHhAegB7gF9AbIBzQHeAe8B9AHjAfIB9wHjAfEB9wHiAfAB9wHiAfAB9wHb
- AesB8gF1AZIBoQHbAeEB4iH/A/4D9gHxAvAC7wTuAuYB6gHUAdUB3gG+AcQB2gGQAZ0BtgFZAWYBegE3
- AUUBWAEXAR0BIwEKAQ0BDgETARgBIQEXARsBJQEnATABRwEaAR0BIwEgAScBMgErATcBUAFvAXoBlQLi
- AeMJAAn/AyoB9QHyAe4B7AHpAeUB3wHcAdgB5AHhAd0B5gHhAd4B5QHgAd0B5AHfAdwB3wHaAdcB5QLd
- Ac8BxwHAAawBpAGdAfgB9QHxA9kDFwP+A/0M/0gADP8BzAHcAecBgAGrAcYBgAGrAccBgAGrAccBgAGs
- AccBgAGsAccBgQGrAccBygHaAeUk/wwAA/4D+wH4AvcC9AHzAvIB8QPuAuMB5APVAr8BwAKeAaADegFe
- AWABZAFbAWIBdAE8AUABSAEqATABOAF7AX8BhgPqCQAG/wP8AykB5QHjAeIB9gH0AfMB8AHuAe0B8wHx
- AfAB7wHrAeoB7wHrAeoB7QHpAegB5QHhAeAB2wHWAdMB0QHFAbkBogGXAYkB3AHaAdkDEgP/BvsM/0gA
- DP8B/QL+AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8Af0C/iT/GwAD/gP9A/sD+AP2
- A/ED6gLlAeYB1wLZAb8BwQHCA84D8wkAA/wD+wP/A/YDFQM9A1IDTAFSAlABUQNPAk0BSgJIAUEBPwE+
- ATwBNgEvATQBLgEnAxMG/wP2D/9IAEj/NgAD/wP7A/4JAAP+Cf8B/gH9Af8B+gH5AfsB8wHyAvQB8wH1
- A/YG9AT1AfYB9AHtAfAB9AHwAfQB+Qb+Ff9IAAFCAU0BPgcAAT4DAAEoAwABYAMAARgDAAEBAQABAQUA
- ASABARYAA/8EAAH8CwAB/AsAAfwLAAHACwABwAsAAcALAAHACwABgAsAAYALAAGACwABgAsAAYALAAGA
- AQABAQkAAYABAAEBCQABgAEAAQEJAAGAAQABAQkAAYABAAEDCQABgAEAAQMLAAEDCwABAwsAAQcJAAHw
- AQABBwkAAf8BgAEHCQAC/wHHBgAL
-
-
-
- 17, 17
-
-
- 231, 17
-
-
-
-
- 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
- 4121R+fzOwAAAABJRU5ErkJggg==
-
-
-
-
- R0lGODlhMgAyAIcAAAAAAP////Lx8vHw8fDv8O3s7erp6ufm59fW17y7vO3t7unp6u7v7+zt7evs7Orr
- 6+fo6OXm5uDh4dbX17u8vLi5uRpsIFqKXluLXx1vH+/w7+zt7CF0HyZ5Hit/HTGGHICyc4a4eTiNGz6U
- GkWbGEuiF3ywXpXId1KpFvL67F22FFiwFWK7E5jNaN7yzO3442bAE6PabqTacKXbcabcdKfcdKvde63f
- fbfijrrjk7vjlMfop83rsc/stNPtutXuvtfvwNzxyJjWVpnXWKTabqveeLThg8vprNPtudzxxtzxx9vw
- xun22+n23K7gcrnkie735I7UOKngUr/og9DwlMHsa932oeT4tNf2gun6uev9p/Pz8unp6Ojo5+fn5rq6
- ubi4t+7t7erp6f7+/v39/fz8/Pv7+/r6+vn5+fj4+Pf39/b29vX19fT09PPz8/Ly8vHx8fDw8O/v7+7u
- 7u3t7ezs7Ovr6+rq6unp6ejo6Ofn5+bm5uXl5eTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dzc3Nvb29ra
- 2tnZ2djY2NfX19bW1tXV1dPT09HR0dDQ0M/Pz83NzczMzMvLy8rKysnJycjIyMfHx8bGxsXFxcTExMPD
- w8LCwsHBwcDAwL+/v76+vr29vby8vLu7u7q6urm5ubi4uLe3t7a2trW1tbS0tLOzs7KysrGxsbCwsK+v
- r66urq2traysrKurq6qqqqmpqaioqKenp6ampqSkpKOjo6GhoZ+fn56enp2dnZubm5qampmZmZiYmJeX
- l5WVlZOTk5KSkpGRkZCQkI6OjoyMjIuLi4mJiYeHh4aGhoSEhIKCgoGBgYCAgH5+fnx8fHl5eXd3d3Z2
- dnNzc3FxcW9vb25ubmtra2lpaWdnZ2ZmZmRkZGFhYV9fX15eXlxcXFpaWlhYWFdXV1ZWVlRUVFJSUlFR
- UVBQUE5OTkxMTEtLS0lJSUhISP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAADyACwAAAAAMgAyAAAI/wADCBxIsKDBgwgTKlzIsKHDgZJs
- SZxIsaLFUw8Z3spYpo2eXAEsqcqoEFcAOnTq1LFzRwyePHn0yNwTAZCiS70EZnJFEiHIMBtWPrhz52UX
- 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
- jJTX0mHZpQAAAABJRU5ErkJggg==
-
-
-
-
- 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
- PeBU/PCashAsBH//2Q==
-
-
-
-
- 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
- np46WJsMQs0bFexxtiaGN2Bf/9k=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAASESURBVFhHxdVpTFRXFAdwra12D03VNnVJWyNlKxSM
- EAQhRWWRKK0IFNkR2a2Uth9arX5oa0NZBddEQUEW2Rtlhw7LVJgZJKN2yg6FYWoZ1FkgwBDNv+cOMGnj
- i11MXk/yy82cufee8+6beW8JgP8VZ5JPnEk+cSb5xJnkE2eST5xJPnEm+cSZ5BPfsXyfvz9CQkIQGhrK
- qi+fT//3WNqabL5TmGx6VpxuIpekGWORKNVkVJRmLO1IWn+l4oerDVerG1FV24g2oRAisQSSzhusgVfm
- t/nnwQp6LhQcFadtRE/hh1C0HIG2twiY6iYy8gs0PQWY7CvEuCARZdeaMTM7B51uDvUNDYiJPYiPDyWy
- BlbPb/v3seynFPPjknQTfcGx5i+h7ckHJm/h4V0h5uQlmO3LwpT0CKYkCZiWfYfp7lTMDWUDY5dRVF4P
- lWYSWq0WZeWVjzTwTGemlbrzhBkkGSboSDWVXk81K2YFBUnm7pVHTazF6Wby/vIA6BR1eDghgG6kADPd
- aZi68TmmRLGYEsdhUhw/T7QoTv+dTrIfBaV1UE7cw/1795Gbl4fIqDjEH0wwNGAky3ECNGI8UDZD050D
- ZftxyJsS0FvsjZ/P2+N2jjOgaoeu/yQm28Mw2RFBBSKpYBSJpquOoTEG2o4oaNojDbTtEZgRBSGvuAaK
- O+MYH5/AmdNnEXEgCtEx8YYGVt88txm/13phuouO7+Zh/dXphnPxQFGJuXEBbmdvR1/+Nigb9pC9GC5x
- x3CpB2QXtkCW7UA/OHO0J5tSwVCohcEGGmEgpq/74FJRNUZGFRhT3MH3ySkICz9ApxBtaODVU3EbvhWm
- WNyVnrHBSNkOqFv2QNPmPT+2stEbXVnWEGe8SywhPWUD6WkbdJ+3Q+9Fe8grXPHbNU9a8xFUrb5QtfhC
- TaOmzQczwl24WFiFgaERakKOo8eOISg4jJqINDTwPNlAHEJ3vBZX/pVpq+SEJfryHKGs9YCmeTfxgrLG
- A8MFjhjI2wJFmQuUVW64/+NuqJs/IF5QC7ygEtBnZmHNRK07FCW2yKEGevqGMDj0KxI++RQBgcEICQ03
- NPAUeY6sJG8RG+KSnWhcJMqwmpVdsIW83BkagRttTprcoGIaXf9C3eSKibrt+rm91GTXSf2JzVw6tLaU
- NSDr7sfA4DD2R0TCzz8Q+wKCDA0sxlLCnkwvkzeIBXH6zHvtYUGS5VAXHftQoT2U1Y5Q1W81GCt3wMBl
- O9w6twmdmdao+dpC+k3Im0nrVq3YReu3EoeUrJy23PxiXCmpwF4fPz1fP/9HGvhzLCMvEDZhI7Fds3KF
- Z9EXplWdWTb0z9ik15lpA2puMDvxnUKX94yCaN77ZDMxJmsIO9XXiSVxJu7h4eGIjo5GbGzMYxtYDHYq
- zxIjso5YESeybQEraE/Yaa0nbEM2l61ht5bF0+Qlsoq8TewIW8tu9b96FLONXiTsqlghhm3KNmGnxb5n
- DT8u2C1m89laNj7xy+jJg+sdzSfOJJ84k3ziTPKJM8knziSfOJN84kzyB0v+AEH5SnYmyAQbAAAAAElF
- TkSuQmCC
-
-
-
- 323, 17
-
-
- 49
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 118, 17
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM
+ HgAAAk1TRnQBSQFMAgEBAwEAAcABAgHAAQIBGAEAARgBAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFg
+ AwABGAMAAQEBAAEYBgABGxIASP8SAAP9BvYL9QH0AvUB9Bv1A/wG/wP5A/8D2ANNAz4DQwNCA0EDQgNB
+ BkMGQgM8Az8DRgN7Cf8D/kgAA/8B/AL9AfQC9jr0AfUB9gH7AvwSAAL0AfMBmAGSAY4BnwGZAZUBngGY
+ AZYBnAGXAZMBmgGVAZIBmgGVAZIBmgGVAZIBmgGUAZABmQGUAY8BoAGaAZcBoQGbAZkBmgGVAZEBmgGV
+ AZIBnQGXAZMBnwGZAZUBnwGYAZQC7AHrA/4D+wP/A6ABSQFGAUIB1gHTAc8B4gHfAdsB3gHbAdcB3QHb
+ AdoB3QHbAdoB3gHcAdsB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAdoB3QHbAtoB1wHTAecB5AHgAdMB0AHM
+ Aa0BqgGmAxYG+wP/SAAD/wG8AdUB4wEwAWQBgQEvAVUBagEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv
+ AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEvAVYBawEv
+ AVYBawEvAVYBawEvAVYBawEvAVYBawEvAVcBbQG0AcIByRIAAfMB8gHxAVABQwE+AVUBTAFGAVYBTQFH
+ AVYBTQFHAVUBTQFHAVUBTQFHAVUBTAFGAWEBWQFUAZUBkAGMAaUBogGeAa0BqgGlAbEBqwGmAW8BZwFj
+ AVUBTAFGAVcBTgFHAW4BYQFbAe0B7AHrBv8D+wMGAesB6QHoAf0B+wH6Av8B/gH9AfsB+gL/Af4C/wH+
+ Av8B/gL/Af4B/wH+Af0B/wH+Af0C/wH+Av8B/gL/Af4C/wH+Av8B/gHyAfAB7wOhA54D/gP/SAAD/wG5
+ AdIB4gFyAbEB1gFyAcsB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAcAB9AFlAcAB9AFl
+ AcAB9AFlAcAB9AFlAcAB9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFlAb8B9AFo
+ AcIB9AFMAZMBvgGuAbwBxAYAA/0B4AHfAeAD4gPsAeAB3QHcAVkBSwFEAV8BVgFQAWABVgFSAWABVgFR
+ AWABVwFRAV8BVgFQAXYBbwFqAagBpAGiAZoBlwGVAZ0BmwGYAbcBtQGyAdMB0QHPAcYBwQG9AX0BdQFw
+ AWEBVwFRAXQBZwFgAe0B7AHrA/8D+wP/AyoD8wb4A/ED9APzA/AD9An+Cf8D/AP+A9MDXgb/SAAD/wG6
+ AdMB4wGxAc0B3gGTAewB/wF7AdwB/wF7AdsB/wF6AdkB/wF5AdgB/wF3AdYB/wF2AdQB/wF2AdMB/wF0
+ AdIB/wF0AdEB/wFyAdAB/wFxAc4B/wFxAc0B/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFwAcwB/wFy
+ Ac8B/wFSAZsBxgGvAb0BxQYAA/gB6AHpAewBlQGiAbIBqQG0AcIBswGyAbMBYAFRAUoBaAFeAVgBaAFf
+ AVkBaAFfAVoBaAFfAVkBZQFbAVYBrAGmAaMBpQGjAaEBjQGKAYgBagFoAWUBdwF1AXMBzAHLAckBsgGv
+ AawBngGaAZUBagFgAVkBfAFuAWcB7QLrCf8BLgEsASsD8wP6A/gD8wPqA/YD8gb0A/UD+wP1A/sD/QP8
+ A/8B2AHVAdEDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGUAe4B/wGDAecB/wGDAeUB/wGBAeIB/wF/
+ Ad8B/wF9AdwB/wF7AdoB/wF5AdcB/wF3AdUB/wF2AdMB/wF1AdEB/wFzAdAB/wFxAc4B/wFwAc0B/wFv
+ AcsB/wFvAcsB/wFvAcsB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQYAA/MB5AHlAekBIAFBAW8BBgE/
+ AYwBKgFIAXIBaQFZAVABcQFoAWIBcQFoAWIBcQFoAWIBcAFnAWIBeAFvAWoBwAG9AboBpwGkAaIBUgFQ
+ AU4BRwE1ATMBUwE8ATgBUQFQAU4BqgGnAaMBnQGaAZcBfQF0AW8BgwF1AW0B7gHsAesJ/wEvAS0BLAP3
+ A/gD9gbvA/ID8wPwA/ED9APqA+sD6AP7A/wD/wHaAdcB0wNhAfwB/gH/A/5IAAP/AboB0wHjAbABzQHe
+ AZcB8QH/AYUB6QH/AYUB5wH/AYQB5AH/AYEB4QH/AX8B3wH/AX0B3QH/AXsB2gH/AXkB2AH/AXcB1QH/
+ AXYB1AH/AXQB0gH/AXMB0AH/AXIBzwH/AXABzQH/AW8BywH/AW8BywH/AW8BywH/AXEBzgH/AVIBmgHF
+ Aa8BvQHFBgAD7gHRAdUB3AEnAT0BYQEWAU4BnAEqAV0BpAFyAWIBWQF8AXIBbAF8AXIBbQF7AXIBbQF7
+ AXEBbAGEAXwBdwG1AbIBrwG4AbUBsQFlAWMBYQFHATkBNwFPATwBOgFMAUsBSQGWAZMBkQGYAZYBkwGJ
+ AYABewGLAX4BdgHuAe0B7Ab/A/4BLwEtASwG+wPwA+YD6wP0A+0D8wPpA+MD5gPtA/AD/gP/A/gB3AHZ
+ AdUDYQH8Af4B/wP+SAAD/wG6AdMB4wGwAc0B3gGZAfQB/wGHAewB/wGHAekB/wGGAeYB/wGDAeQB/wGB
+ AeEB/wF/Ad8B/wF9AdwB/wF7AdoB/wF5AdgB/wF4AdYB/wF2AdQB/wF0AdIB/wFzAdEB/wFyAc8B/wFx
+ Ac0B/wFwAcwB/wFvAcsB/wFxAc4B/wFSAZoBxQGvAb0BxQMAA/8D7AGvAbMBuwEoATYBUAEoAUcBeAE3
+ AV0BmQF8AW0BZAGHAX0BdwGFAXwBdwGFAXwBdwGFAXwBdwGGAX0BeQGvAasBpwG9AboBtgHfAd4B3QF/
+ AX0BewFlAWIBYAGUAZIBjwGKAYgBhQGcAZkBlQGMAYIBfQGSAYUBfgHuAe0B7AH/Av4D/wP+ATABLgEt
+ A/cD/APrA+MD5wPpA+gD/gb/A/kD/gP/A/wD+gP9Ad0B2gHWA2AB/AH+Af8D/kgAA/8BugHTAeMBsAHN
+ Ad4BmwH2Af8BigHuAf8BigHsAf8BhwHpAf8BhQHnAf8BgwHkAf8BggHhAf8BfwHfAf8BfQHdAf8BewHa
+ Af8BeQHYAf8BdwHWAf8BdgHUAf8BdQHRAf8BcwHPAf8BcgHOAf8BcAHNAf8BbwHMAf8BcQHOAf8BUgGa
+ AcUBrwG9AcUDAAP+AewB6wHqAXsBiwG0ARsBNAF1ASUBQQF/AUcBVAF6AYYBdgFuAZEBhwGCAY8BhgGB
+ AY8BhgGBAY8BhQGBAY4BhAF/AbUBrgGpAdoB2AHUA9UB7AHqAecByAHGAcMBigGIAYYBgwGBAX4BngGX
+ AZQBlwGMAYYBnAGNAYcB7gHtAewD/wT+Af8B/QEsAS0BKwHzAfQB8gH7AfwB+gHmAecB5QHcAd0B2wPc
+ A+UD3wPiAeUB5gHkAeAB4QHfAeoB6wHpAeIB4wHhA+QD2wP+A/kB3QHbAdoDYgP/Af0C/0gAA/8BugHT
+ AeMBsAHNAd4BnAH3Af8BjAHxAf8BjAHvAf8BigHsAf8BhwHqAf8BhQHoAf8BhAHlAf8BggHiAf8BgAHg
+ Af8BfQHdAf8BfAHbAf8BegHZAf8BeAHWAf8BdgHUAf8BdAHSAf8BcwHQAf8BcgHOAf8BcAHMAf8BcQHO
+ Af8BUgGaAcUBrwG9AcUDAAP8AegB5wHoAUMBeAHeAQQBSgHVAQcBVgHnATwBaQG2AZABgAF1AZoBkAGL
+ AZcBjwGJAZYBjQGIAZgBkAGIAZcBjwGHAZwBlAGOAdEBzQHKAegB5QHjAbUBsgGsAY0BiQGGAXwBeQF2
+ AZMBjQGKAZkBkAGMAVgBUgFlAZEBhQGDAe8C7QP/A/4B/QH+AfwBLQEuASwB9gH3AfUB/AH9AfsB4QHi
+ AeAB1QHWAdQD4QPeA9UE0wHUAdIB3QHeAdwB0QHSAdAB2gHbAdkB2AHZAdcB1AHVAdMB7QHuAewB+gH7
+ AfkB3gHcAdsDYgP/Af0C/0gAA/8BugHTAeMBsAHNAd4BnQH5Af8BjgHzAf8BjgHxAf8BjAHuAf8BiQHs
+ Af8BhwHqAf8BhgHnAf8BhAHkAf8BggHiAf8BgAHfAf8BfgHdAf8BfAHbAf8BeQHYAf8BeAHWAf8BdgHU
+ Af8BdQHSAf8BdAHQAf8BcgHOAf8BcQHOAf8BUgGaAcUBrwG9AcUDAAP6AeAB5QHqASEBegH1AQkBdAH5
+ AQwBhAH9AUQBhwG+AaABjgGDAaoBoAGaAakBoAGbAagBnQGVAa8BowGYAa0BowGWAaYBmgGRAa0BogGc
+ Ab4BtAGuAbsBsQGrAa0BpQGgAakBoAGcAasBoQGbAakBoAGbAXcBcQF+AaABlAGSAe8B7gHtA/8D/gH9
+ Af4B/AEuAS8BLQH8Af0C+wH8AfoB2AHZAdcBzQHOAcwD2gPOA9MD0QHXAdgB1gHbAdwB2gHSAdMB0QHZ
+ AdoB2AHlAeMB4gH+AfwB+wH8AfoB+QH+AfwB+wHeAdwB2wNiA/8B/QL/SAAD/wG6AdMB4wGwAc0B3gGg
+ AfsB/wGPAfYB/wGPAfQB/wGOAfEB/wGMAe8B/wGKAewB/wGIAeoB/wGGAegB/wGEAeUB/wGBAeIB/wF/
+ AeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF4AdcB/wF3AdQB/wF1AdIB/wFzAdAB/wFxAc4B/wFSAZoBxQGv
+ Ab0BxQMAA/gB1QHhAe4BEQF4AfkBGwGIAf0BHAGYAf8BOwGeAd0BoAGmAawBzQHIAcMBsAGqAaMBrwLH
+ Aa0B2AHbAawB2AHaAasB0QHZAawB2AHaAasB0wHbAawB0wHcAasBvwHHAaoBsQG2AasBuwHRAcsCygHN
+ AcoByAHOAcoByAH3AvYG/wH8Af0B+wEvATABLgH1AfYB9AH6AfsB+QHSAdMC0QHSAdADzwPQA70DxAHR
+ AdIB0AHHAcgBxgHZAdoB2AHfAeAB3gHOAcwBywH8AfoB+QH3AfUB9AHzAfEB8AHeAdwB2wNiA/8B/QL/
+ SAAD/wG6AdMB4wGwAc0B3gGiAf4B/wGRAfgB/wGRAfYB/wGQAfQB/wGOAfEB/wGMAe8B/wGLAe0B/wGI
+ AeoB/wGGAegB/wGEAeUB/wGCAeMB/wGAAeAB/wF+Ad4B/wF8AdsB/wF6AdkB/wF5AdcB/wF2AdQB/wF0
+ AdIB/wFxAc8B/wFSAZoBxQGvAb0BxQMAAfYC9QHEAdcB8AEYAXYB9AEqAY0B/QEyAZ8B/wEzAbUB/wEm
+ AY4BvgEoAV0BgAElAYwBwAEpAcsB6wEvAeUB+gEsAeEB+gESAZkB4AEVAZ0B2wEXAaQB9AEkAbAB5AEa
+ AVUBcwEbAXUBxQEWAXsB9gEYAWkB5wGlAcMB8QHtAewB6wMACf4DLQH6AfgB9wH8AfoB+QHPAc0BzAHE
+ AcIBwQHPAc0BzAG/Ab0BvAHOAcwBywG6AbgBtwHCAcABvwHDAcEBwAHKAcgBxwHGAcQBwwG9Ab4BvAHI
+ AckBxwH5AfcB9gH3AfUB9AHaAdgB1wFhAV8BXgP+A/9IAAP/AboB0wHjAbABzQHeAaMC/wGTAfoB/wGT
+ AfgB/wGSAfYB/wGQAfQB/wGOAfIB/wGNAe8B/wGKAe0B/wGIAeoB/wGGAegB/wGEAeUB/wGCAeMB/wGA
+ AeAB/wF+Ad0B/wF8AdsB/wF6AdkB/wF4AdYB/wF2AdQB/wFxAc8B/wFSAZkBxQGvAb0BxQMAA/IBsAHE
+ AeYBKAFsAdcBLwGBAe4BMAGRAfsBOwGsAf8BNwHDAfcBIAGKAaoBBgEyAV8BEQF2AbEBLAHXAfUBMwHv
+ Af8BDAFgAZoBCQFWAZgBFwGfAfYBGwFqAZgBGQFjAaABHQGVAf8BGQGHAf4BEAFyAfwB0AHkAfwC8gHx
+ AwAD/wb+Ay4B9wH1AfQB9gH0AfMBwQG/Ab4BzQHLAcoBugG4AbcBvgG8AbsBwgHAAb8BswGxAbABzgHM
+ AcsByQHHAcYBtAGyAbEBuQG3AbYBwQHCAcABsQGvAa4B7QHpAegB8gHtAeoB0gHPAcsBYAFeAV0D/wP+
+ SAAD/wG6AdMB4wGwAc4B3gGlAv8BlAH7Af8BlQH5Af8BkwH4Af8BkgH2Af8BkAH0Af8BjgHxAf8BjQHv
+ Af8BigHtAf8BiQHrAf8BhgHoAf8BhAHmAf8BggHjAf8BgQHgAf8BfwHeAf8BfQHbAf8BegHZAf8BeQHX
+ Af8BcQHPAf8BUgGZAcUBrwG9AcUDAAPsAZUBswHnASoBcwHkATYBgAHrATYBigH1ATEBmgH8AS4BswH+
+ AS4BywH/AR0BgwGoAQcBKAFLAREBdwHFASEBuQH8AQoBVgGZAQkBWwGnARIBdAG4ARkBSAFiATUBrwHs
+ ASUBlwH/ARABXgHpASkBUAG8AekB6gHuA/kDAAP/Bv4DLgH5AfcB9gHyAfAB7wHAAb4BvQHBAb8BvgGj
+ AaEBoAG5AbcBtgG6AbgBtwG1AbMBsgG1AbMBsgGqAagBpwG8AboBuQG1AbMBsgGoAaYBpQHBAb0BvAHw
+ AesB6AHhAdsB1gHDAbwBswFjAWABXAH9Av8D/UgAA/8BugHTAeMBsAHOAd4BpQL/AZUB/QH/AZUB+wH/
+ AZQB+gH/AZIB+AH/AZAB9gH/AY8B9AH/AY0B8gH/AYsB8AH/AYoB7QH/AYgB6gH/AYYB6AH/AYQB5QH/
+ AYEB4gH/AX8B4AH/AX0B3gH/AXwB2wH/AXkB2AH/AXEBzwH/AVIBmgHGAa8BvQHFAwAC5gHnAX0BnAHX
+ ATEBawHPAUABbgHHATwBdwHYASsBiQHxASkBmwH1ASgBpgH7ASgBrwH+ARwBawGhAREBRQF0AR8BhQHL
+ ARgBYgGlARABTQGRARIBJQE8ASgBfgHEAScBiwHoARwBXgGxARcBQAF+AVgBbQGPAesC6QP+AwAD/wP+
+ A/0DLwH1AfMB8gHzAfEB8AHCAcABvwGpAacBpgGiAaABnwGzAbEBsAGgAZ4BnQGqAagBpwGyAbABrwHK
+ AcgBxwGxAa8BrgG2AbQBswGxAa8BrgGzAa8BrgHdAdcB0gHKAcIBuwGnAZ4BlAFmAWMBXwH9Av8D/kgA
+ A/8BugHTAeMBsQHPAd8BqwL/AZwB/gH/AZ0B/gH/AZwB/AH/AZsB/AH/AZkB+gH/AZcB9wH/AZYB9gH/
+ AZQB9AH/AZMB8gH/AZEB7gH/AZAB7gH/AY4B6wH/AYwB6AH/AYoB5QH/AYkB5AH/AYYB4QH/AYUB4AH/
+ AYEB2wH/AVABlgHAAa4BvAHEAwAB3wHgAeMBYAGHAckBJAFLAZMBOQFaAZ4BOAFlAbkBNQFiAacBKwFq
+ AbYBKAFwAcQBJgF0Ac8BJQF0Ac4BHAFCAW4BFwEwAUYBGQEyAU8BFgEhASwBGgEuAUwBHwFdAbABGQFG
+ AYEBFgEqAUoBFwEbASIBhAGKAZMC6AHnBgAG/gP9AzAB+AH2AfUB8AHuAe0BxgHEAcMBrgGsAasBpQGj
+ AaIBvwG9AbwBpgGkAaMBrQGrAaoBpgGkAaMD6gHwAe4B7QHZAdUB0AHRAcwByQHjAd8B2gHRAcsBxAHT
+ Ac0BwgGVAY4BhQFlAWEBYAH9Av8D/UgAA/8BuAHSAeIBrgHMAd0B8AH5AfwB7wH4AfwB7wH4AfwB7wH4
+ AfwB7wH4AfwB7wH5AfwB7wH5AfwB7wH5AfwB7wH5AfwB8AH5AfwB6wH4AfwB4gHxAfYB4gHxAfcB4gHx
+ AfcB4gHwAfcB4gHwAfcB4gHwAfcB4gHwAfYB1AHmAe0BLAFWAWsBsgHAAcYDAAHWAdgB2gFLAVsBdgEW
+ ASgBRQEiAS0BQgEkAToBZAEpATQBSwEiATQBUAEkAToBXQEiATQBUgEaASwBSQEXASIBMwEfASoBPgEb
+ AR4BJAIYARcBGQEaAR0BGQEfASoBFAEXARgBFAEdASYBHQE8AWYBpgG8AdsC7wHuBgAG/gP9AzAB8wHx
+ AfAB7gHsAesBkgGQAY8BrwGtAawBogGgAZ8BkwGRAZABqwGpAagBpQGjAaIBpwGlAaQBogGeAZ0B6wHo
+ AeQB4gHeAdkB6AHlAeEB5QHiAd4B4AHeAd0B5AHlAeMBEwEUARIB7wLxAfwC/gL/Af5IAAP/AdAB4QHs
+ AXEBpgHHAYoBzQHkAY8B0wHoAY0B0gHoAYsBzwHoAYkBzQHoAYYByQHoAYQBxgHoAYEBwwHoAYEBwgHp
+ AXoBuQHeAWwBmwG5AX0BqQHFAYABqwHHAYABqwHHAYABrAHHAYABrAHHAYABrAHHAX8BqwHGAX4BqgHG
+ AasBzQHeAfoC/AP+Ac8B0AHUAUwBUQFkAR8BJAEwARoBHAEjAR4BIAEmAR0BIgEsARgBHwEmARUBGwEg
+ ARcBHAEhARYBGwEeARUBGgEcARYBGwEdARcBGQEbARcBGAEZAxcBIAEoATUBOAFZAZABMwFzAcgBPgGF
+ Ad8BxQHWAewD+QYAA/8D/gP9AzEB+AH1AfEB7gHrAecBgAF9AXkBvwG8AbgBxgHDAb8B1gHTAc8BxQHC
+ Ab4BywHIAcQB0QHNAcwBqAGjAaAB1QHRAcwB+gH3AfMB6gHhAd4B6wPjAd4B3wELAQoBDAP/AfoF/AP3
+ SAAD/wH8Af0B/gHIAdsB5wFiAbABzAGRAfQB+AGdAfwB/gGYAfgB/gGSAfEB/gGLAegB/gGFAeAB/gF7
+ AdcB/gFqAcQB8wFFAX0BnQHCAc0B0wH2AfkB+gH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4AfsB/AH4
+ AfoB/AH4AfsB/AH9Af4E/wP6Ad0B3gHiAZ4BogGxAXwBgQGVAWABZQF9AVIBWQF5AUUBUwF/ATUBSwF4
+ AR0BKwFAARMBHAEjARkBIwEuARQBGwEfARQBGQEbARUCGQEWARgBGQEcAR8BJQEiASgBNAE3AUsBcwE/
+ AV4BmQFgAYABuQHWAdoB4gP+BgAD/wP+A/0DMQHxAe4B6gHpAeYB4gHqAecB4wHoAeUB4QHoAeUB4QHk
+ AeEB3QHpAeYB4gHqAecC4wHgAdwB3wHZAdQByAHCAbsB9wH0AfAB4AHeAd0B6AHmAeUBFwIZAfcB/AH7
+ Bv8B/QL7Af8B/gH/SAAJ/wHhAegB7gF9AbIBzQHeAe8B9AHjAfIB9wHjAfEB9wHiAfAB9wHiAfAB9wHb
+ AesB8gF1AZIBoQHbAeEB4iH/A/4D9gHxAvAC7wTuAuYB6gHUAdUB3gG+AcQB2gGQAZ0BtgFZAWYBegE3
+ AUUBWAEXAR0BIwEKAQ0BDgETARgBIQEXARsBJQEnATABRwEaAR0BIwEgAScBMgErATcBUAFvAXoBlQLi
+ AeMJAAn/AyoB9QHyAe4B7AHpAeUB3wHcAdgB5AHhAd0B5gHhAd4B5QHgAd0B5AHfAdwB3wHaAdcB5QLd
+ Ac8BxwHAAawBpAGdAfgB9QHxA9kDFwP+A/0M/0gADP8BzAHcAecBgAGrAcYBgAGrAccBgAGrAccBgAGs
+ AccBgAGsAccBgQGrAccBygHaAeUk/wwAA/4D+wH4AvcC9AHzAvIB8QPuAuMB5APVAr8BwAKeAaADegFe
+ AWABZAFbAWIBdAE8AUABSAEqATABOAF7AX8BhgPqCQAG/wP8AykB5QHjAeIB9gH0AfMB8AHuAe0B8wHx
+ AfAB7wHrAeoB7wHrAeoB7QHpAegB5QHhAeAB2wHWAdMB0QHFAbkBogGXAYkB3AHaAdkDEgP/BvsM/0gA
+ DP8B/QL+AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8AfgB+wH8Af0C/iT/GwAD/gP9A/sD+AP2
+ A/ED6gLlAeYB1wLZAb8BwQHCA84D8wkAA/wD+wP/A/YDFQM9A1IDTAFSAlABUQNPAk0BSgJIAUEBPwE+
+ ATwBNgEvATQBLgEnAxMG/wP2D/9IAEj/NgAD/wP7A/4JAAP+Cf8B/gH9Af8B+gH5AfsB8wHyAvQB8wH1
+ A/YG9AT1AfYB9AHtAfAB9AHwAfQB+Qb+Ff9IAAFCAU0BPgcAAT4DAAEoAwABYAMAARgDAAEBAQABAQUA
+ ASABARYAA/8EAAH8CwAB/AsAAfwLAAHACwABwAsAAcALAAHACwABgAsAAYALAAGACwABgAsAAYALAAGA
+ AQABAQkAAYABAAEBCQABgAEAAQEJAAGAAQABAQkAAYABAAEDCQABgAEAAQMLAAEDCwABAwsAAQcJAAHw
+ AQABBwkAAf8BgAEHCQAC/wHHBgAL
+
+
+
+ 17, 17
+
+
+ 231, 17
+
+
+
+
+ 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
+ 4121R+fzOwAAAABJRU5ErkJggg==
+
+
+
+
+ R0lGODlhMgAyAIcAAAAAAP////Lx8vHw8fDv8O3s7erp6ufm59fW17y7vO3t7unp6u7v7+zt7evs7Orr
+ 6+fo6OXm5uDh4dbX17u8vLi5uRpsIFqKXluLXx1vH+/w7+zt7CF0HyZ5Hit/HTGGHICyc4a4eTiNGz6U
+ GkWbGEuiF3ywXpXId1KpFvL67F22FFiwFWK7E5jNaN7yzO3442bAE6PabqTacKXbcabcdKfcdKvde63f
+ fbfijrrjk7vjlMfop83rsc/stNPtutXuvtfvwNzxyJjWVpnXWKTabqveeLThg8vprNPtudzxxtzxx9vw
+ xun22+n23K7gcrnkie735I7UOKngUr/og9DwlMHsa932oeT4tNf2gun6uev9p/Pz8unp6Ojo5+fn5rq6
+ ubi4t+7t7erp6f7+/v39/fz8/Pv7+/r6+vn5+fj4+Pf39/b29vX19fT09PPz8/Ly8vHx8fDw8O/v7+7u
+ 7u3t7ezs7Ovr6+rq6unp6ejo6Ofn5+bm5uXl5eTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dzc3Nvb29ra
+ 2tnZ2djY2NfX19bW1tXV1dPT09HR0dDQ0M/Pz83NzczMzMvLy8rKysnJycjIyMfHx8bGxsXFxcTExMPD
+ w8LCwsHBwcDAwL+/v76+vr29vby8vLu7u7q6urm5ubi4uLe3t7a2trW1tbS0tLOzs7KysrGxsbCwsK+v
+ r66urq2traysrKurq6qqqqmpqaioqKenp6ampqSkpKOjo6GhoZ+fn56enp2dnZubm5qampmZmZiYmJeX
+ l5WVlZOTk5KSkpGRkZCQkI6OjoyMjIuLi4mJiYeHh4aGhoSEhIKCgoGBgYCAgH5+fnx8fHl5eXd3d3Z2
+ dnNzc3FxcW9vb25ubmtra2lpaWdnZ2ZmZmRkZGFhYV9fX15eXlxcXFpaWlhYWFdXV1ZWVlRUVFJSUlFR
+ UVBQUE5OTkxMTEtLS0lJSUhISP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAADyACwAAAAAMgAyAAAI/wADCBxIsKDBgwgTKlzIsKHDgZJs
+ SZxIsaLFUw8Z3spYpo2eXAEsqcqoEFcAOnTq1LFzRwyePHn0yNwTAZCiS70EZnJFEiHIMBtWPrhz52UX
+ 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
+ jJTX0mHZpQAAAABJRU5ErkJggg==
+
+
+
+
+ /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsN
+ DhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQU
+ FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAwADADAREAAhEBAxEB/8QA
+ GgAAAgMBAQAAAAAAAAAAAAAABwgEBgkFAf/EADcQAAEDAwIDBgQFAgcAAAAAAAECAwQFBhEHEgAIIRMx
+ QVFhcSIyYoEJFBVCUjOhcoKRkpOxwv/EABsBAAIDAQEBAAAAAAAAAAAAAAUGAwQHAggA/8QANBEAAQIE
+ AwUHAgYDAAAAAAAAAQIDAAQFEQYhMRJBUWGBEyKRobHB8HHhFCMyQnLRUsLS/9oADAMBAAIRAxEAPwDV
+ Pj6PoENy8wTSKq/SbSoki6JzKti3m1bI6DnHzYOevj0HkTxmNRxwwy8qWp7ReUMidE35HMnyHAwws0hR
+ QHZlYQD4xw365rlWwVxoNEoiCOiS2pSx5fMVAn+3Ao1zE8wNpDKUD6f9GJuwpbeRUVfOUV+ty+YWixHZ
+ iahS5aGUlZaTGaJUAO7onP8A178VV1zEcuNp21hySfTOJEs0xw7Kb+Jify/c2EbUaootm6WmKTcp+Bh5
+ s7WZih3pAPyOfTkg9cY6DhyoOJU1EhiZAS5uO5X9Hlv3cIpT9MMuO0azT5j7QxfD3AGKTrTci7T0vuCo
+ NK2PiP2DSgeoU4oNgj1G7P24WsSThkaTMPJOdrD6q7vle8Eac0HpptB0vfwzivaL0OLZ+mdIdDaEzpzY
+ kOOEfFlQz19hgfYcZrRuyotIRMpSC86TYncPntwgjUHFTM0oX7qcokXFUX3926S4R5BWB/pwAnJ6ZmCS
+ 44T1y8NI6ZbSnQQP5rBdfKgTuz83jwuqBJvBVJsITG4NM7yoIdqUmmPxBHJfMlLyAUFPXcCFZyMZ6cXm
+ 3UtqGdjBTbQsWEaJ8ud/VDUzRy3q9VW1JqDra2XnSAA+ptamy4Mfy25Prnw49E0ebXOyLbzn6jrzsbX6
+ xn86ylh9SE6RTOdm6YlpaKmVNfDEd2ostE4JKjtWsJA8/g4XMZtuP01LDQuVLA8ifaD2GZJ6fqAZYTdV
+ j7Z/SALcGsGsd4W5TJNFZomlVsojhMF+vntqjLRj+qGdqglJwCAUeWFKHXhcVIpMuyiYIAQLC5tfibax
+ qkrh2jSzy23SuZdv3gjJCTw2ri5H8uggT1fX7WuwXFTJFx0LUCntnLzQiIZWE+OAhLah7kEd3fnHFJym
+ SbosMuYN/WDy8LUuZTZppTSt1yfcqB+l7wwGguu1C1zozsunpVCqkUhM6mPqBcjqPcQf3IODhXTu6gHI
+ 4UpynuyLmyvMHQ8fvGYVWlvUtzs3MwdDx/o8oh8zlU/S9P5TaDtVJWhkEepyf7A8UEp2nkiKEtvho9Dq
+ Ki39HLKgoTt7OkRlLH1qbStZ/wBylcelaY2GZJlA/wAR6ZwlTStt9auZhRua7UFq7OZiFbc8JkW7YNNT
+ V3ae4ctyqi9t7HtE/uSkONHB8N/go8AKzM2dCTmEi9uJ+W842/BdOLVJVMN5OTCtja3hAve3AmyutuES
+ tO9NZmvdDuiuzbuaFeS4GodPACkt9Mh2T03YWcpSEYSkJPzHISJlKe3UWVPuOEuE+HSLtVrS8NzbUozL
+ /kga8f4niN98zy1I55l+X6No9Y1KrLV1fnKqpYZkMSUpbVIdPzKjpSOiE/xVuOMZUT39TdPblUpU2r7w
+ Xw7iV+rvuMPNWTqCNw4K9iN+7gu/LzdEvT/mRtF9lZbYrclNKlNDIS4l4hCcj0WW1e6eBM6wJiScSdU5
+ jp8MW8Vy6JiSUvfa/VP2hzubijvvWGl9KTsjSEOr9uqf/XGcNjZmBfeCPf2jFJVQIMNvo7W27j0ns6pN
+ LDiZFIiqUR4K7JIUPcKBH249KSDgdlGljekekJUwnYeWnmYz15yqRKsrm4rsx/c3Du+lRH2HSfhUppKG
+ SnPmCwDj6h5jhTrjB7Ur4/PaPRWA5xt6koYvm2pQ8bn/AGMXLQPWSjaP2ZcTMuhOu1t5f5lqVHSVLqBx
+ hDS19dgRk4/bgqIG7O6CRm0S7JQRn6xHiKiPVadbdQ73NCD+3iQN9/G/LToa7XzZGs2lFNqE+A7Huhsh
+ TLSshyCrI7UKX3KbUB0HjlJwCDieZmGXmgf3ekUKLT5+mTymm1flHXgrhluI8s9d6f6Xrplc5mLRddks
+ xaTRJqKg9JdUEoT2J3p6+q0oT9+AM+7+FkVqIzVkOv2uYPYimgJNbYO7Z6nXy9I0G1LrlHvyz58RiSxI
+ akMKQFoWFAEjoenGVPzKUkK3jOMelmFoVnHn4fOp/wCu2NU7Klu7pdDdL8UKPzRnVEkD/C5u/wCRPlxv
+ GF5ztWFSytUZj6H+j6wBqzGy4HRofWCrzL8uFE5kbIbpM+Qql1mAtUilVhpG5cR0gAgpyNyFYAUnIzgE
+ EEAhrmZZMyjZVHVFrL9FmO1bzSclDiPYjcYz6uHR7mE0gedgTLFmXTEaJSzUKC2ZyHk9wUEtguJ9loSf
+ ThScpTqTkPDONtlsU0ydSFFwA8Fd0+Oh6Ry6Ly+8w2uk1EFFoTLSpiztem19CoDbST4lCx2qvZCDxKxT
+ HCf0+MQzmKKdKINnQeSMyeunmIZi2vwvaDblutss3tONcdQDLmrhIW04v6W9wUEjrgFRPrx1O4cTOEEu
+ kW5ZfOsZZO4menHdpSAEjQX+Z9Iq9Z/D41Dpj6xRrjo8+Mv4SXHXoyyPVOxQx/mPC47hOZB7ikqHO49j
+ 6xAirsn9SSIPXKjyrSNCH6jW63UmZ9wTmPyvZQiosMM7gojKgCtRKU9cDGMDOSeGqi0Y00qddVdZFstA
+ PeBU/PCashAsBH//2Q==
+
+
+
+
+ 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
+ np46WJsMQs0bFexxtiaGN2Bf/9k=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAASESURBVFhHxdVpTFRXFAdwra12D03VNnVJWyNlKxSM
+ EAQhRWWRKK0IFNkR2a2Uth9arX5oa0NZBddEQUEW2Rtlhw7LVJgZJKN2yg6FYWoZ1FkgwBDNv+cOMGnj
+ i11MXk/yy82cufee8+6beW8JgP8VZ5JPnEk+cSb5xJnkE2eST5xJPnEm+cSZ5BPfsXyfvz9CQkIQGhrK
+ qi+fT//3WNqabL5TmGx6VpxuIpekGWORKNVkVJRmLO1IWn+l4oerDVerG1FV24g2oRAisQSSzhusgVfm
+ t/nnwQp6LhQcFadtRE/hh1C0HIG2twiY6iYy8gs0PQWY7CvEuCARZdeaMTM7B51uDvUNDYiJPYiPDyWy
+ BlbPb/v3seynFPPjknQTfcGx5i+h7ckHJm/h4V0h5uQlmO3LwpT0CKYkCZiWfYfp7lTMDWUDY5dRVF4P
+ lWYSWq0WZeWVjzTwTGemlbrzhBkkGSboSDWVXk81K2YFBUnm7pVHTazF6Wby/vIA6BR1eDghgG6kADPd
+ aZi68TmmRLGYEsdhUhw/T7QoTv+dTrIfBaV1UE7cw/1795Gbl4fIqDjEH0wwNGAky3ECNGI8UDZD050D
+ ZftxyJsS0FvsjZ/P2+N2jjOgaoeu/yQm28Mw2RFBBSKpYBSJpquOoTEG2o4oaNojDbTtEZgRBSGvuAaK
+ O+MYH5/AmdNnEXEgCtEx8YYGVt88txm/13phuouO7+Zh/dXphnPxQFGJuXEBbmdvR1/+Nigb9pC9GC5x
+ x3CpB2QXtkCW7UA/OHO0J5tSwVCohcEGGmEgpq/74FJRNUZGFRhT3MH3ySkICz9ApxBtaODVU3EbvhWm
+ WNyVnrHBSNkOqFv2QNPmPT+2stEbXVnWEGe8SywhPWUD6WkbdJ+3Q+9Fe8grXPHbNU9a8xFUrb5QtfhC
+ TaOmzQczwl24WFiFgaERakKOo8eOISg4jJqINDTwPNlAHEJ3vBZX/pVpq+SEJfryHKGs9YCmeTfxgrLG
+ A8MFjhjI2wJFmQuUVW64/+NuqJs/IF5QC7ygEtBnZmHNRK07FCW2yKEGevqGMDj0KxI++RQBgcEICQ03
+ NPAUeY6sJG8RG+KSnWhcJMqwmpVdsIW83BkagRttTprcoGIaXf9C3eSKibrt+rm91GTXSf2JzVw6tLaU
+ NSDr7sfA4DD2R0TCzz8Q+wKCDA0sxlLCnkwvkzeIBXH6zHvtYUGS5VAXHftQoT2U1Y5Q1W81GCt3wMBl
+ O9w6twmdmdao+dpC+k3Im0nrVq3YReu3EoeUrJy23PxiXCmpwF4fPz1fP/9HGvhzLCMvEDZhI7Fds3KF
+ Z9EXplWdWTb0z9ik15lpA2puMDvxnUKX94yCaN77ZDMxJmsIO9XXiSVxJu7h4eGIjo5GbGzMYxtYDHYq
+ zxIjso5YESeybQEraE/Yaa0nbEM2l61ht5bF0+Qlsoq8TewIW8tu9b96FLONXiTsqlghhm3KNmGnxb5n
+ DT8u2C1m89laNj7xy+jJg+sdzSfOJJ84k3ziTPKJM8knziSfOJN84kzyB0v+AEH5SnYmyAQbAAAAAElF
+ TkSuQmCC
+
+
+
+ 323, 17
+
+
+ 49
+
\ No newline at end of file
diff --git a/Crawl.cs b/Crawl.cs
index 679fcb6..e54ee21 100644
--- a/Crawl.cs
+++ b/Crawl.cs
@@ -1,196 +1,196 @@
-namespace ImgRip
-{
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Threading;
- using Google.GData.Client;
- using HAP = HtmlAgilityPack;
-
- static class Helper
- {
- public static bool CompareWithLength(this string src, string s)
- {
- if (src.Length != s.Length)
- {
- return src.Length > s.Length;
- }
- else
- return string.Compare(src, s, true) > 0;
- }
-
- public static bool ContainsEx(this string src, string check, StringComparison sc=StringComparison.OrdinalIgnoreCase)
- {
- if (string.IsNullOrEmpty(src) || string.IsNullOrEmpty(check)) return false;
- return src.IndexOf(check, sc) >= 0;
- }
- }
-
- static class Fetch
- {
- static WebClient wc;
-
- #region Properties Definitions
- public static Dictionary Images { get; private set; }
- public static bool Canceled { get; set; }
- public static bool Dropped { get; set; }
- public static Site Site { get; set; }
- public static FileInfo Current { get; set; }
- public static string Location { get; set; }
- public static bool Skip { get; set; }
- public static string Title { get; set; }
- public static string Address { get; set; }
- public static string Next { get; set; }
- public static string Screen { get; private set; }
- #endregion
-
- public static Stream GetStream(string url, string cookie = null)
- {
- Stream r = null;
- using (wc = new WebClient())
- {
- if (cookie != null)
- wc.Headers[HttpRequestHeader.Cookie] = string.Format("JSESSIONID={0}", cookie);
- var are = new AutoResetEvent(false);
- wc.OpenReadCompleted += (s, e) => { if (!e.Cancelled) r = e.Result; are.Set(); };
- wc.OpenReadAsync(new Uri(url));
- are.WaitOne(); are.Close();
- }
- return r;
- }
-
- public static void GetFile(string url, string file)
- {
- using (wc = new WebClient())
- {
- wc.Headers[HttpRequestHeader.Referer] = url;
- var are = new AutoResetEvent(false);
- wc.DownloadFileCompleted += (s, e) =>
- { if ((e.Cancelled || e.Error != null) && File.Exists(file)) File.Delete(file); are.Set(); };
- wc.DownloadFileAsync(new Uri(url), file);
- are.WaitOne(); are.Close();
- }
- }
- public static void Cancel()
- {
- if (wc != null) wc.CancelAsync();
- }
-
- public static string Parse(string url, Func fnNextPage = null,
- Func fnName = null, Func fnAddress = null, Func fnScreen = null)
- {
- var hw = new HAP.HtmlWeb();
- var doc = hw.Load(url);
- if (Canceled) return "User Cancelled.";
- Title = doc.DocumentNode.SelectSingleNode("//title").InnerText;
- Title = Title.Trim().Split('-', '_', '(', '[', '|', ':', '、')[0];
- var uri = new Uri(url); var host = uri.Host; var port = uri.Port;
- var folder = url.Substring(0, url.LastIndexOf('/') + 1);
- fnName = fnName ?? (n => n.Substring(n.LastIndexOf('/') + 1));
- fnAddress = fnAddress ?? (a => a.StartsWith("http://") ? a :
- (string.Format("http://{0}{1}{2}", host, port == 80 ? "" : ":" + port.ToString(), a.StartsWith("/") ? "" : "/") + a));
- #region Get screen resolution info
- if (!string.IsNullOrEmpty(Site.Screen))
- {
- var screenlist = doc.DocumentNode.SelectSingleNode(Site.Screen);
- Screen = fnScreen(screenlist);
- }
- #endregion
- var links = doc.DocumentNode.SelectNodes(Site.Image);
- if (links == null || links.Count == 0) return "No gallery found in this page.";
- Images = new Dictionary();
- #region Get Photo collection
- foreach (var lnk in links)
- {
- var item = lnk;
- switch (Site.Type)
- {
- case "PalAthCx":
- var href = lnk.ParentNode.Attributes["href"].Value;
- if (!href.EndsWith(".html", StringComparison.OrdinalIgnoreCase)) continue;
- break;
- case "Leg99":
- item = lnk.ParentNode;
- break;
- }
-
- var atag = item.Name.ToLower() == "a";
- var src = atag ? item.Attributes["href"].Value.Trim() : item.Attributes["file"] != null ? item.Attributes["file"].Value.Trim() : item.Attributes["src"].Value.Trim();
- var address = fnAddress(HttpUtility.HtmlDecode(src));
- var name = item.InnerText == string.Empty ? fnName(address) : item.InnerText;
- if (name != null && address != null)
- {
- Images[name] = address;
- System.Diagnostics.Trace.WriteLine(string.Format("Name:\"{0}\"\n\tUrl:\t\"{1}\"", name, address));
- }
- }
- System.Diagnostics.Trace.WriteLine(string.Format("Total [{0}] photos in page: \"{1}\".", Images.Count, Title));
- if (Images.Count==0) return "No gallery found in this page.";
- #endregion
- if (string.IsNullOrEmpty(Site.Next)) return null;
- #region Get Next page url
- fnNextPage = fnNextPage ?? (hnc =>
- {
- if (hnc == null) return null;
- var page = hnc.LastOrDefault();
- if (page == null || page.Name != "a" || page.Attributes["href"] == null) return null;
- var href = page.Attributes["href"].Value; if (href == "#" || href.StartsWith("javascript")) return null;
- var next = href.StartsWith("http://") ?
- href : href.StartsWith("./") ?
- href.Replace("./", folder) : href.StartsWith("../") ? href.Replace("../", UpFolder(folder)) : href.StartsWith("/") ?
- string.Format("http://{0}{1}", host, port == 80 ? "" : ":" + port.ToString()) + href : (href.StartsWith("?") ?
- url.Split('?')[0] + href : href.IndexOf('/') > 0 ? string.Format("http://{0}/", host) : folder) + href;
- if (Site.Type == "BitAuto"||Site.Type=="LianTu") return next;
- var pq = new Uri(next).PathAndQuery.TrimEnd('/');
- var cur = uri.PathAndQuery.TrimEnd('/');
- return pq.CompareWithLength(cur) ? next : null;
- });
- #endregion
- var pages = doc.DocumentNode.SelectNodes(Site.Next);
- Next = pages == null ? null : fnNextPage(pages);
- System.Diagnostics.Trace.WriteLine(string.Format("Next page is: {0}", Next ?? "Empty"));
- return null;
- }
-
- static string UpFolder(string url)
- {
- var parts = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
- if (parts.Length == 0) return string.Empty;
- return url.Replace(parts[parts.Length - 1] + "/", "");
- }
-
- public static void Reset()
- {
- if (Images != null) Images.Clear();
- Canceled = Dropped = Skip = false;
- Current = null;
- Title = Address = string.Empty;
- }
- }
-
- class Site
- {
- public Site(string name, string domain, string xpImage, string xpNext=null)
- {
- Name = name;
- Domain = domain;
- Image = xpImage;
- Next = xpNext;
- }
-
- public string Domain { get; set; }
-
- public string Image { get; private set; }
- public string Next { get; set; }
- public string Name { get; private set; }
- public string Screen { get; set; }
- public string Type { get; set; }
-
- public override string ToString()
- {
- return Domain;
- }
- }
-}
+namespace ImgRip
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Threading;
+ using Google.GData.Client;
+ using HAP = HtmlAgilityPack;
+
+ static class Helper
+ {
+ public static bool CompareWithLength(this string src, string s)
+ {
+ if (src.Length != s.Length)
+ {
+ return src.Length > s.Length;
+ }
+ else
+ return string.Compare(src, s, true) > 0;
+ }
+
+ public static bool ContainsEx(this string src, string check, StringComparison sc=StringComparison.OrdinalIgnoreCase)
+ {
+ if (string.IsNullOrEmpty(src) || string.IsNullOrEmpty(check)) return false;
+ return src.IndexOf(check, sc) >= 0;
+ }
+ }
+
+ static class Fetch
+ {
+ static WebClient wc;
+
+ #region Properties Definitions
+ public static Dictionary Images { get; private set; }
+ public static bool Canceled { get; set; }
+ public static bool Dropped { get; set; }
+ public static Site Site { get; set; }
+ public static FileInfo Current { get; set; }
+ public static string Location { get; set; }
+ public static bool Skip { get; set; }
+ public static string Title { get; set; }
+ public static string Address { get; set; }
+ public static string Next { get; set; }
+ public static string Screen { get; private set; }
+ #endregion
+
+ public static Stream GetStream(string url, string cookie = null)
+ {
+ Stream r = null;
+ using (wc = new WebClient())
+ {
+ if (cookie != null)
+ wc.Headers[HttpRequestHeader.Cookie] = string.Format("JSESSIONID={0}", cookie);
+ var are = new AutoResetEvent(false);
+ wc.OpenReadCompleted += (s, e) => { if (!e.Cancelled) r = e.Result; are.Set(); };
+ wc.OpenReadAsync(new Uri(url));
+ are.WaitOne(); are.Close();
+ }
+ return r;
+ }
+
+ public static void GetFile(string url, string file)
+ {
+ using (wc = new WebClient())
+ {
+ wc.Headers[HttpRequestHeader.Referer] = url;
+ var are = new AutoResetEvent(false);
+ wc.DownloadFileCompleted += (s, e) =>
+ { if ((e.Cancelled || e.Error != null) && File.Exists(file)) File.Delete(file); are.Set(); };
+ wc.DownloadFileAsync(new Uri(url), file);
+ are.WaitOne(); are.Close();
+ }
+ }
+ public static void Cancel()
+ {
+ if (wc != null) wc.CancelAsync();
+ }
+
+ public static string Parse(string url, Func fnNextPage = null,
+ Func fnName = null, Func fnAddress = null, Func fnScreen = null)
+ {
+ var hw = new HAP.HtmlWeb();
+ var doc = hw.Load(url);
+ if (Canceled) return "User Cancelled.";
+ Title = doc.DocumentNode.SelectSingleNode("//title").InnerText;
+ Title = Title.Trim().Split('-', '_', '(', '[', '|', ':', '、')[0];
+ var uri = new Uri(url); var host = uri.Host; var port = uri.Port;
+ var folder = url.Substring(0, url.LastIndexOf('/') + 1);
+ fnName = fnName ?? (n => n.Substring(n.LastIndexOf('/') + 1));
+ fnAddress = fnAddress ?? (a => a.StartsWith("http://") ? a :
+ (string.Format("http://{0}{1}{2}", host, port == 80 ? "" : ":" + port.ToString(), a.StartsWith("/") ? "" : "/") + a));
+ #region Get screen resolution info
+ if (!string.IsNullOrEmpty(Site.Screen))
+ {
+ var screenlist = doc.DocumentNode.SelectSingleNode(Site.Screen);
+ Screen = fnScreen(screenlist);
+ }
+ #endregion
+ var links = doc.DocumentNode.SelectNodes(Site.Image);
+ if (links == null || links.Count == 0) return "No gallery found in this page.";
+ Images = new Dictionary();
+ #region Get Photo collection
+ foreach (var lnk in links)
+ {
+ var item = lnk;
+ switch (Site.Type)
+ {
+ case "PalAthCx":
+ var href = lnk.ParentNode.Attributes["href"].Value;
+ if (!href.EndsWith(".html", StringComparison.OrdinalIgnoreCase)) continue;
+ break;
+ case "Leg99":
+ item = lnk.ParentNode;
+ break;
+ }
+
+ var atag = item.Name.ToLower() == "a";
+ var src = atag ? item.Attributes["href"].Value.Trim() : item.Attributes["file"] != null ? item.Attributes["file"].Value.Trim() : item.Attributes["src"].Value.Trim();
+ var address = fnAddress(HttpUtility.HtmlDecode(src));
+ var name = item.InnerText == string.Empty ? fnName(address) : item.InnerText;
+ if (name != null && address != null)
+ {
+ Images[name] = address;
+ System.Diagnostics.Trace.WriteLine(string.Format("Name:\"{0}\"\n\tUrl:\t\"{1}\"", name, address));
+ }
+ }
+ System.Diagnostics.Trace.WriteLine(string.Format("Total [{0}] photos in page: \"{1}\".", Images.Count, Title));
+ if (Images.Count==0) return "No gallery found in this page.";
+ #endregion
+ if (string.IsNullOrEmpty(Site.Next)) return null;
+ #region Get Next page url
+ fnNextPage = fnNextPage ?? (hnc =>
+ {
+ if (hnc == null) return null;
+ var page = hnc.LastOrDefault();
+ if (page == null || page.Name != "a" || page.Attributes["href"] == null) return null;
+ var href = page.Attributes["href"].Value; if (href == "#" || href.StartsWith("javascript")) return null;
+ var next = href.StartsWith("http://") ?
+ href : href.StartsWith("./") ?
+ href.Replace("./", folder) : href.StartsWith("../") ? href.Replace("../", UpFolder(folder)) : href.StartsWith("/") ?
+ string.Format("http://{0}{1}", host, port == 80 ? "" : ":" + port.ToString()) + href : (href.StartsWith("?") ?
+ url.Split('?')[0] + href : href.IndexOf('/') > 0 ? string.Format("http://{0}/", host) : folder) + href;
+ if (Site.Type == "BitAuto"||Site.Type=="LianTu") return next;
+ var pq = new Uri(next).PathAndQuery.TrimEnd('/');
+ var cur = uri.PathAndQuery.TrimEnd('/');
+ return pq.CompareWithLength(cur) ? next : null;
+ });
+ #endregion
+ var pages = doc.DocumentNode.SelectNodes(Site.Next);
+ Next = pages == null ? null : fnNextPage(pages);
+ System.Diagnostics.Trace.WriteLine(string.Format("Next page is: {0}", Next ?? "Empty"));
+ return null;
+ }
+
+ static string UpFolder(string url)
+ {
+ var parts = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length == 0) return string.Empty;
+ return url.Replace(parts[parts.Length - 1] + "/", "");
+ }
+
+ public static void Reset()
+ {
+ if (Images != null) Images.Clear();
+ Canceled = Dropped = Skip = false;
+ Current = null;
+ Title = Address = string.Empty;
+ }
+ }
+
+ class Site
+ {
+ public Site(string name, string domain, string xpImage, string xpNext=null)
+ {
+ Name = name;
+ Domain = domain;
+ Image = xpImage;
+ Next = xpNext;
+ }
+
+ public string Domain { get; set; }
+
+ public string Image { get; private set; }
+ public string Next { get; set; }
+ public string Name { get; private set; }
+ public string Screen { get; set; }
+ public string Type { get; set; }
+
+ public override string ToString()
+ {
+ return Domain;
+ }
+ }
+}
diff --git a/GData/GData.csproj b/GData/GData.csproj
index a7bcb06..6d5f89c 100644
--- a/GData/GData.csproj
+++ b/GData/GData.csproj
@@ -1,377 +1,377 @@
-
-
-
- Debug
- AnyCPU
- 10.0.30319
- 2.0
- {510070A4-28D1-4362-BAB5-54984A9F75BF}
- Library
- Properties
- GData
- GData
- v4.0
- 512
- Client
- SAK
- SAK
- SAK
- SAK
-
-
- true
- full
- false
- bin\Debug\
-
-
- none
- 4
- AnyCPU
- Off
-
-
- none
- true
- bin\Release\
-
-
- none
- 4
- Off
- AnyCPU
-
-
- x86
- bin\x86\Debug\
-
-
- x86
- bin\x86\Release\
-
-
- true
-
-
- GData.snk
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
- Core\abstractentry.cs
-
-
- Core\abstractfeed.cs
-
-
- Core\appcontrol.cs
-
-
- Core\asyncDataHandler.cs
-
-
- Core\asyncservice.cs
-
-
- Core\atombase.cs
-
-
- Core\atombaselink.cs
-
-
- Core\atomcategory.cs
-
-
- Core\atomcontent.cs
-
-
- Core\atomfeed.cs
-
-
- Core\atomfeedentry.cs
-
-
- Core\atomFeedgenerator.cs
-
-
- Core\atomfeedparser.cs
-
-
- Core\atomicon.cs
-
-
- Core\atomId.cs
-
-
- Core\atomlink.cs
-
-
- Core\atomlogo.cs
-
-
- Core\atomnametable.cs
-
-
- Core\atomperson.cs
-
-
- Core\atomsource.cs
-
-
- Core\atomtextconstruct.cs
-
-
- Core\atomuri.cs
-
-
- Core\authentication.cs
-
-
- Core\authexceptions.cs
-
-
- Core\authsubutil.cs
-
-
- Core\basefeedparser.cs
-
-
- Core\basenametable.cs
-
-
- Core\batcherror.cs
-
-
- Core\batcherrors.cs
-
-
- Core\collections.cs
-
-
- Core\documentquery.cs
-
-
- Core\exceptions.cs
-
-
- Core\extcollections.cs
-
-
- Core\extensionbase.cs
-
-
- Core\feedconstants.cs
-
-
- Core\feedmodel.cs
-
-
- Core\feedquery.cs
-
-
- Core\gauthrequest.cs
-
-
- Core\gauthsubrequest.cs
-
-
- Core\gdatabatch.cs
-
-
- Core\goauth2request.cs
-
-
- Core\goauthrequest.cs
-
-
- Core\HttpUtility.cs
-
-
- Core\logrequest.cs
-
-
- Core\mediaservice.cs
-
-
- Core\mediasource.cs
-
-
- Core\oauthbase.cs
-
-
- Core\oauthparameters.cs
-
-
- Core\oauthuri.cs
-
-
- Core\oauthutil.cs
-
-
- Core\request.cs
-
-
- Core\resumableupload.cs
-
-
- Core\rssfeedparser.cs
-
-
- Core\service.cs
-
-
- Core\serviceinterface.cs
-
-
- Core\simplecontainer.cs
-
-
- Core\simpleelement.cs
-
-
- Core\tracing.cs
-
-
- Core\utilities.cs
-
-
- Core\versioninterface.cs
-
-
- Core\xmlextension.cs
-
-
- Docs\archiveentry.cs
-
-
- Docs\archivefeed.cs
-
-
- Docs\changeentry.cs
-
-
- Docs\changesfeed.cs
-
-
- Docs\docrequest.cs
-
-
- Docs\documententry.cs
-
-
- Docs\documentfeed.cs
-
-
- Docs\documentquery.cs
-
-
- Docs\documentservice.cs
-
-
- Docs\metadataentry.cs
-
-
- Docs\metadatafeed.cs
-
-
- Docs\revisionentry.cs
-
-
- Docs\revisionfeed.cs
-
-
- Extensions\enumconstruct.cs
-
-
- Extensions\exif.cs
-
-
- Extensions\feedlink.cs
-
-
- Extensions\gdatanametable.cs
-
-
- Extensions\georsswhere.cs
-
-
- Extensions\mediarss.cs
-
-
- Extensions\misc.cs
-
-
- Acl\aclentry.cs
-
-
- Acl\aclfeed.cs
-
-
- Acl\aclnamespace.cs
-
-
- Acl\aclrole.cs
-
-
- Acl\aclscope.cs
-
-
- Acl\baseaclentry.cs
-
-
- Photo\albumentry.cs
-
-
- Photo\commententry.cs
-
-
- Photo\gextphotos.cs
-
-
- Photo\kindsquery.cs
-
-
- Photo\photoentry.cs
-
-
- Photo\photosrequest.cs
-
-
- Photo\picasaentry.cs
-
-
- Photo\picasafeed.cs
-
-
- Photo\picasaquery.cs
-
-
- Photo\picasaservice.cs
-
-
- Photo\tagentry.cs
-
-
-
-
-
-
-
+
+
+
+ Debug
+ AnyCPU
+ 10.0.30319
+ 2.0
+ {510070A4-28D1-4362-BAB5-54984A9F75BF}
+ Library
+ Properties
+ GData
+ GData
+ v4.0
+ 512
+ Client
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ true
+ full
+ false
+ bin\Debug\
+
+
+ none
+ 4
+ AnyCPU
+ Off
+
+
+ none
+ true
+ bin\Release\
+
+
+ none
+ 4
+ Off
+ AnyCPU
+
+
+ x86
+ bin\x86\Debug\
+
+
+ x86
+ bin\x86\Release\
+
+
+ true
+
+
+ GData.snk
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+ Core\abstractentry.cs
+
+
+ Core\abstractfeed.cs
+
+
+ Core\appcontrol.cs
+
+
+ Core\asyncDataHandler.cs
+
+
+ Core\asyncservice.cs
+
+
+ Core\atombase.cs
+
+
+ Core\atombaselink.cs
+
+
+ Core\atomcategory.cs
+
+
+ Core\atomcontent.cs
+
+
+ Core\atomfeed.cs
+
+
+ Core\atomfeedentry.cs
+
+
+ Core\atomFeedgenerator.cs
+
+
+ Core\atomfeedparser.cs
+
+
+ Core\atomicon.cs
+
+
+ Core\atomId.cs
+
+
+ Core\atomlink.cs
+
+
+ Core\atomlogo.cs
+
+
+ Core\atomnametable.cs
+
+
+ Core\atomperson.cs
+
+
+ Core\atomsource.cs
+
+
+ Core\atomtextconstruct.cs
+
+
+ Core\atomuri.cs
+
+
+ Core\authentication.cs
+
+
+ Core\authexceptions.cs
+
+
+ Core\authsubutil.cs
+
+
+ Core\basefeedparser.cs
+
+
+ Core\basenametable.cs
+
+
+ Core\batcherror.cs
+
+
+ Core\batcherrors.cs
+
+
+ Core\collections.cs
+
+
+ Core\documentquery.cs
+
+
+ Core\exceptions.cs
+
+
+ Core\extcollections.cs
+
+
+ Core\extensionbase.cs
+
+
+ Core\feedconstants.cs
+
+
+ Core\feedmodel.cs
+
+
+ Core\feedquery.cs
+
+
+ Core\gauthrequest.cs
+
+
+ Core\gauthsubrequest.cs
+
+
+ Core\gdatabatch.cs
+
+
+ Core\goauth2request.cs
+
+
+ Core\goauthrequest.cs
+
+
+ Core\HttpUtility.cs
+
+
+ Core\logrequest.cs
+
+
+ Core\mediaservice.cs
+
+
+ Core\mediasource.cs
+
+
+ Core\oauthbase.cs
+
+
+ Core\oauthparameters.cs
+
+
+ Core\oauthuri.cs
+
+
+ Core\oauthutil.cs
+
+
+ Core\request.cs
+
+
+ Core\resumableupload.cs
+
+
+ Core\rssfeedparser.cs
+
+
+ Core\service.cs
+
+
+ Core\serviceinterface.cs
+
+
+ Core\simplecontainer.cs
+
+
+ Core\simpleelement.cs
+
+
+ Core\tracing.cs
+
+
+ Core\utilities.cs
+
+
+ Core\versioninterface.cs
+
+
+ Core\xmlextension.cs
+
+
+ Docs\archiveentry.cs
+
+
+ Docs\archivefeed.cs
+
+
+ Docs\changeentry.cs
+
+
+ Docs\changesfeed.cs
+
+
+ Docs\docrequest.cs
+
+
+ Docs\documententry.cs
+
+
+ Docs\documentfeed.cs
+
+
+ Docs\documentquery.cs
+
+
+ Docs\documentservice.cs
+
+
+ Docs\metadataentry.cs
+
+
+ Docs\metadatafeed.cs
+
+
+ Docs\revisionentry.cs
+
+
+ Docs\revisionfeed.cs
+
+
+ Extensions\enumconstruct.cs
+
+
+ Extensions\exif.cs
+
+
+ Extensions\feedlink.cs
+
+
+ Extensions\gdatanametable.cs
+
+
+ Extensions\georsswhere.cs
+
+
+ Extensions\mediarss.cs
+
+
+ Extensions\misc.cs
+
+
+ Acl\aclentry.cs
+
+
+ Acl\aclfeed.cs
+
+
+ Acl\aclnamespace.cs
+
+
+ Acl\aclrole.cs
+
+
+ Acl\aclscope.cs
+
+
+ Acl\baseaclentry.cs
+
+
+ Photo\albumentry.cs
+
+
+ Photo\commententry.cs
+
+
+ Photo\gextphotos.cs
+
+
+ Photo\kindsquery.cs
+
+
+ Photo\photoentry.cs
+
+
+ Photo\photosrequest.cs
+
+
+ Photo\picasaentry.cs
+
+
+ Photo\picasafeed.cs
+
+
+ Photo\picasaquery.cs
+
+
+ Photo\picasaservice.cs
+
+
+ Photo\tagentry.cs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GData/GData.csproj.vspscc b/GData/GData.csproj.vspscc
index feffdec..b6d3289 100644
--- a/GData/GData.csproj.vspscc
+++ b/GData/GData.csproj.vspscc
@@ -1,10 +1,10 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/HAP/HAP.csproj b/HAP/HAP.csproj
index 7db164f..ae68daa 100644
--- a/HAP/HAP.csproj
+++ b/HAP/HAP.csproj
@@ -1,165 +1,165 @@
-
-
-
- Debug
- x86
- 10.0.30319
- 2.0
- {F39EA302-4440-4BFC-9071-5321E36C2C4C}
- Library
- Properties
- HAP
- HAP
- v4.0
- Client
- 512
- SAK
- SAK
- SAK
- SAK
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
-
-
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
-
-
- prompt
- 4
-
-
-
-
-
- true
-
-
- AnyCPU
- bin\Debug\
- pdbonly
- false
- Off
-
-
- AnyCPU
- bin\Release\
- true
- Off
-
-
- HAP.snk
-
-
-
-
-
-
-
-
-
-
- crc32.cs
-
-
- EncodingFoundException.cs
-
-
- HtmlAttribute.cs
-
-
- HtmlAttributeCollection.cs
-
-
- HtmlCommentNode.cs
-
-
- HtmlDocument.cs
-
-
- HtmlDocument.PathMethods.cs
-
-
- HtmlDocument.Xpath.cs
-
-
- HtmlElementFlag.cs
-
-
- HtmlEntity.cs
-
-
- HtmlNameTable.cs
-
-
- HtmlNode.cs
-
-
- HtmlNode.Dynamic.cs
-
-
- HtmlNode.Xpath.cs
-
-
- HtmlNodeCollection.cs
-
-
- HtmlNodeNavigator.cs
-
-
- HtmlNodeType.cs
-
-
- HtmlParseError.cs
-
-
- HtmlParseErrorCode.cs
-
-
- HtmlTextNode.cs
-
-
- HtmlWeb.cs
-
-
- HtmlWeb.Xpath.cs
-
-
- HtmlWebException.cs
-
-
- IOLibrary.cs
-
-
- NameValuePair.cs
-
-
- NameValuePairList.cs
-
-
- Trace.cs
-
-
- Utilities.cs
-
-
-
-
+
+
+
+ Debug
+ x86
+ 10.0.30319
+ 2.0
+ {F39EA302-4440-4BFC-9071-5321E36C2C4C}
+ Library
+ Properties
+ HAP
+ HAP
+ v4.0
+ Client
+ 512
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+
+
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+
+
+ prompt
+ 4
+
+
+
+
+
+ true
+
+
+ AnyCPU
+ bin\Debug\
+ pdbonly
+ false
+ Off
+
+
+ AnyCPU
+ bin\Release\
+ true
+ Off
+
+
+ HAP.snk
+
+
+
+
+
+
+
+
+
+
+ crc32.cs
+
+
+ EncodingFoundException.cs
+
+
+ HtmlAttribute.cs
+
+
+ HtmlAttributeCollection.cs
+
+
+ HtmlCommentNode.cs
+
+
+ HtmlDocument.cs
+
+
+ HtmlDocument.PathMethods.cs
+
+
+ HtmlDocument.Xpath.cs
+
+
+ HtmlElementFlag.cs
+
+
+ HtmlEntity.cs
+
+
+ HtmlNameTable.cs
+
+
+ HtmlNode.cs
+
+
+ HtmlNode.Dynamic.cs
+
+
+ HtmlNode.Xpath.cs
+
+
+ HtmlNodeCollection.cs
+
+
+ HtmlNodeNavigator.cs
+
+
+ HtmlNodeType.cs
+
+
+ HtmlParseError.cs
+
+
+ HtmlParseErrorCode.cs
+
+
+ HtmlTextNode.cs
+
+
+ HtmlWeb.cs
+
+
+ HtmlWeb.Xpath.cs
+
+
+ HtmlWebException.cs
+
+
+ IOLibrary.cs
+
+
+ NameValuePair.cs
+
+
+ NameValuePairList.cs
+
+
+ Trace.cs
+
+
+ Utilities.cs
+
+
+
+
\ No newline at end of file
diff --git a/HAP/HAP.csproj.vspscc b/HAP/HAP.csproj.vspscc
index feffdec..b6d3289 100644
--- a/HAP/HAP.csproj.vspscc
+++ b/HAP/HAP.csproj.vspscc
@@ -1,10 +1,10 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/Helper.cs b/Helper.cs
index b81a70c..19786a7 100644
--- a/Helper.cs
+++ b/Helper.cs
@@ -1,43 +1,43 @@
-namespace ImgRip
-{
- using System;
- using System.Windows.Forms;
- using Google.GData.Client;
- ///
- /// UI Callback Helper
- ///
- static class UICallBack
- {
- public static void cbEnable(this Control ctl, bool enable)
- {
- if (ctl.IsHandleCreated)
- ctl.Invoke(new Action(() => ctl.Enabled = enable));
- }
-
- public static void EnableControls(bool enable, params Control[] ctls)
- {
- foreach (var ctl in ctls)
- {
- if (ctl.IsHandleCreated)
- ctl.Invoke(new Action(() => ctl.Enabled = enable));
- }
- }
-
- public static void cbAdd(this ListView lv, object data, int imgindex)
- {
- if (lv.IsHandleCreated)
- switch (WebCloud.Service)
- {
- case WebCloud.CloudType.Flickr:
- break;
- case WebCloud.CloudType.Facebook:
- break;
- case WebCloud.CloudType.GDrive:
- case WebCloud.CloudType.Picasa:
- var ae = data as AtomEntry;
- lv.Invoke(new Action(() => lv.Items.Add(new ListViewItem(ae.Title.Text, imgindex) { Tag = ae, ToolTipText = ae.AlternateUri.Content })));
- break;
- }
- }
- }
-}
+namespace ImgRip
+{
+ using System;
+ using System.Windows.Forms;
+ using Google.GData.Client;
+ ///
+ /// UI Callback Helper
+ ///
+ static class UICallBack
+ {
+ public static void cbEnable(this Control ctl, bool enable)
+ {
+ if (ctl.IsHandleCreated)
+ ctl.Invoke(new Action(() => ctl.Enabled = enable));
+ }
+
+ public static void EnableControls(bool enable, params Control[] ctls)
+ {
+ foreach (var ctl in ctls)
+ {
+ if (ctl.IsHandleCreated)
+ ctl.Invoke(new Action(() => ctl.Enabled = enable));
+ }
+ }
+
+ public static void cbAdd(this ListView lv, object data, int imgindex)
+ {
+ if (lv.IsHandleCreated)
+ switch (WebCloud.Service)
+ {
+ case WebCloud.CloudType.Flickr:
+ break;
+ case WebCloud.CloudType.Facebook:
+ break;
+ case WebCloud.CloudType.GDrive:
+ case WebCloud.CloudType.Picasa:
+ var ae = data as AtomEntry;
+ lv.Invoke(new Action(() => lv.Items.Add(new ListViewItem(ae.Title.Text, imgindex) { Tag = ae, ToolTipText = ae.AlternateUri.Content })));
+ break;
+ }
+ }
+ }
+}
diff --git a/ImageRipper.csproj.vspscc b/ImageRipper.csproj.vspscc
index feffdec..b6d3289 100644
--- a/ImageRipper.csproj.vspscc
+++ b/ImageRipper.csproj.vspscc
@@ -1,10 +1,10 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/ImageRipper.sln b/ImageRipper.sln
index 9cc1ea9..d2684a7 100644
--- a/ImageRipper.sln
+++ b/ImageRipper.sln
@@ -1,48 +1,48 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImgRip", "ImgRip.csproj", "{2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}"
-EndProject
-Global
- GlobalSection(TeamFoundationVersionControl) = preSolution
- SccNumberOfProjects = 2
- SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
- SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs02
- SccLocalPath0 = .
- SccProjectUniqueName1 = ImgRip.csproj
- SccLocalPath1 = .
- EndGlobalSection
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|ARM = Debug|ARM
- Debug|Mixed Platforms = Debug|Mixed Platforms
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|ARM = Release|ARM
- Release|Mixed Platforms = Release|Mixed Platforms
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|ARM.ActiveCfg = Debug|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x64.ActiveCfg = Debug|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x86.ActiveCfg = Debug|x86
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.Build.0 = Release|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|ARM.ActiveCfg = Release|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x64.ActiveCfg = Release|Any CPU
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x86.ActiveCfg = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.21005.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImgRip", "ImgRip.csproj", "{2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}"
+EndProject
+Global
+ GlobalSection(TeamFoundationVersionControl) = preSolution
+ SccNumberOfProjects = 2
+ SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
+ SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs02
+ SccLocalPath0 = .
+ SccProjectUniqueName1 = ImgRip.csproj
+ SccLocalPath1 = .
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Debug|x86.ActiveCfg = Debug|x86
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x64.ActiveCfg = Release|Any CPU
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}.Release|x86.ActiveCfg = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/ImageRipper.vssscc b/ImageRipper.vssscc
index 794f014..6cb031b 100644
--- a/ImageRipper.vssscc
+++ b/ImageRipper.vssscc
@@ -1,10 +1,10 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
+}
diff --git a/ImgRip.csproj b/ImgRip.csproj
index c5269f0..266fecc 100644
--- a/ImgRip.csproj
+++ b/ImgRip.csproj
@@ -1,289 +1,289 @@
-
-
-
- Debug
- AnyCPU
- 10.0.30319
- 2.0
- {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}
- WinExe
- Properties
- ImgRip
- ImageRipper
- v4.0
- Client
- 512
- true
- download.ico
-
-
-
- ImgRip.Program
- true
- false
- Client
- SAK
- SAK
- SAK
- SAK
- publish\
- true
- Web
- true
- Foreground
- 7
- Days
- false
- false
- false
- https://imgrip.codeplex.com/releases/clickonce/
- https://imgrip.codeplex.com/discussions
- https://imgrip.codeplex.com/workitem/list/basic
- Image Ripper
- Image Ripper
- publish.htm
- false
- 301
- 1.2.7.%2a
- true
- true
- true
- false
-
-
- true
- full
- false
- bin\Debug\
- TRACE
- prompt
- 4
- AllRules.ruleset
- AnyCPU
- Off
- true
-
-
- none
- true
- bin\Release\
-
-
- none
- 4
- BasicCorrectnessRules.ruleset
-
-
- false
- false
- false
- Off
- false
- AnyCPU
-
-
-
- x86
- bin\x86\Debug\
-
-
- x86
- bin\x86\Release\
-
-
- 495CCD02320F5B9615433DB4AB3EF631755F9BA1
-
-
- ImgRip.pfx
-
-
- true
-
-
-
-
-
- LocalIntranet
-
-
- Properties\app.manifest
-
-
-
-
-
-
- false
-
-
-
- packages\Google.GData.AccessControl.2.2.0.0\lib\Google.GData.AccessControl.dll
-
-
- packages\Google.GData.Client.2.2.0.0\lib\Google.GData.Client.dll
-
-
- packages\Google.GData.Documents.2.2.0.0\lib\Google.GData.Documents.dll
-
-
- packages\Google.GData.Extensions.2.2.0.0\lib\Google.GData.Extensions.dll
-
-
- packages\Google.GData.Photos.2.2.0.0\lib\Google.GData.Photos.dll
-
-
- packages\HtmlAgilityPack.1.4.6\lib\Net40-client\HtmlAgilityPack.dll
-
-
- False
- packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.dll
-
-
-
-
-
-
-
-
-
- Form
-
-
- Main.cs
-
-
-
- Form
-
-
- Sites.cs
-
-
- Form
-
-
- Batch.cs
-
-
-
- Form
-
-
-
-
- Main.cs
-
-
- Sites.cs
-
-
- Batch.cs
- Designer
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
- True
-
-
- SetCookie.cs
-
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
- SetCookie.cs
-
-
-
- Form
-
-
- Cloud.cs
-
-
- Component
-
-
- Designer
-
-
-
-
- Cloud.cs
- Designer
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 2.0 %28x86%29
- false
-
-
- False
- .NET Framework 3.0 %28x86%29
- false
-
-
- False
- .NET Framework 3.5
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
-
-
-
-
-
-
- Designer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Debug
+ AnyCPU
+ 10.0.30319
+ 2.0
+ {2172F5C5-FAE4-47E4-8662-D3F6443DE0F5}
+ WinExe
+ Properties
+ ImgRip
+ ImageRipper
+ v4.0
+ Client
+ 512
+ true
+ download.ico
+
+
+
+ ImgRip.Program
+ true
+ false
+ Client
+ SAK
+ SAK
+ SAK
+ SAK
+ publish\
+ true
+ Web
+ true
+ Foreground
+ 7
+ Days
+ false
+ false
+ false
+ https://imgrip.codeplex.com/releases/clickonce/
+ https://imgrip.codeplex.com/discussions
+ https://imgrip.codeplex.com/workitem/list/basic
+ Image Ripper
+ Image Ripper
+ publish.htm
+ false
+ 301
+ 1.2.7.%2a
+ true
+ true
+ true
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ TRACE
+ prompt
+ 4
+ AllRules.ruleset
+ AnyCPU
+ Off
+ true
+
+
+ none
+ true
+ bin\Release\
+
+
+ none
+ 4
+ BasicCorrectnessRules.ruleset
+
+
+ false
+ false
+ false
+ Off
+ false
+ AnyCPU
+
+
+
+ x86
+ bin\x86\Debug\
+
+
+ x86
+ bin\x86\Release\
+
+
+ 495CCD02320F5B9615433DB4AB3EF631755F9BA1
+
+
+ ImgRip.pfx
+
+
+ true
+
+
+
+
+
+ LocalIntranet
+
+
+ Properties\app.manifest
+
+
+
+
+
+
+ false
+
+
+
+ packages\Google.GData.AccessControl.2.2.0.0\lib\Google.GData.AccessControl.dll
+
+
+ packages\Google.GData.Client.2.2.0.0\lib\Google.GData.Client.dll
+
+
+ packages\Google.GData.Documents.2.2.0.0\lib\Google.GData.Documents.dll
+
+
+ packages\Google.GData.Extensions.2.2.0.0\lib\Google.GData.Extensions.dll
+
+
+ packages\Google.GData.Photos.2.2.0.0\lib\Google.GData.Photos.dll
+
+
+ packages\HtmlAgilityPack.1.4.6\lib\Net40-client\HtmlAgilityPack.dll
+
+
+ False
+ packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Main.cs
+
+
+
+ Form
+
+
+ Sites.cs
+
+
+ Form
+
+
+ Batch.cs
+
+
+
+ Form
+
+
+
+
+ Main.cs
+
+
+ Sites.cs
+
+
+ Batch.cs
+ Designer
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SetCookie.cs
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+ SetCookie.cs
+
+
+
+ Form
+
+
+ Cloud.cs
+
+
+ Component
+
+
+ Designer
+
+
+
+
+ Cloud.cs
+ Designer
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ImgRip.csproj.vspscc b/ImgRip.csproj.vspscc
index feffdec..b6d3289 100644
--- a/ImgRip.csproj.vspscc
+++ b/ImgRip.csproj.vspscc
@@ -1,10 +1,10 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = ""
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}
diff --git a/Main.Designer.cs b/Main.Designer.cs
index 98bbc13..5f0ee18 100644
--- a/Main.Designer.cs
+++ b/Main.Designer.cs
@@ -1,576 +1,576 @@
-namespace ImgRip
-{
- 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()
- {
- this.components = new System.ComponentModel.Container();
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
- this.mainSplit = new System.Windows.Forms.SplitContainer();
- this.llSites = new System.Windows.Forms.LinkLabel();
- this.btnGo = new ImgRip.SplitButton();
- this.cmsBatch = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.btnBatch = new System.Windows.Forms.ToolStripMenuItem();
- this.tbParse = new System.Windows.Forms.TextBox();
- this.llCookie = new System.Windows.Forms.LinkLabel();
- this.llFolder = new System.Windows.Forms.LinkLabel();
- this.lvRip = new System.Windows.Forms.ListView();
- this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.chNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.chSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.chState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.cmsLV = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.cmmiNextPage = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiDropGroup = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiCopyName = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiSave = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiRemove = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiClear = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiBatch = new System.Windows.Forms.ToolStripMenuItem();
- this.cmmiPreview = new System.Windows.Forms.ToolStripMenuItem();
- this.RipStatus = new System.Windows.Forms.StatusStrip();
- this.tsLabel = new System.Windows.Forms.ToolStripStatusLabel();
- this.lbBatch = new System.Windows.Forms.ToolStripStatusLabel();
- this.tsPB = new System.Windows.Forms.ToolStripProgressBar();
- this.tsCloud = new System.Windows.Forms.ToolStripSplitButton();
- this.tsiGData = new System.Windows.Forms.ToolStripMenuItem();
- this.tsiPicasa = new System.Windows.Forms.ToolStripMenuItem();
- this.tsHome = new System.Windows.Forms.ToolStripStatusLabel();
- this.lblUrl = new System.Windows.Forms.Label();
- this.tbDir = new System.Windows.Forms.TextBox();
- this.pbPreview = new System.Windows.Forms.PictureBox();
- this.bwFetch = new System.ComponentModel.BackgroundWorker();
- this.ttRipper = new System.Windows.Forms.ToolTip(this.components);
- this.tmMinus = new System.Windows.Forms.Timer(this.components);
- this.tmPlus = new System.Windows.Forms.Timer(this.components);
- this.fbDir = new System.Windows.Forms.FolderBrowserDialog();
- ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).BeginInit();
- this.mainSplit.Panel1.SuspendLayout();
- this.mainSplit.Panel2.SuspendLayout();
- this.mainSplit.SuspendLayout();
- this.cmsBatch.SuspendLayout();
- this.cmsLV.SuspendLayout();
- this.RipStatus.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).BeginInit();
- this.SuspendLayout();
- //
- // mainSplit
- //
- this.mainSplit.Dock = System.Windows.Forms.DockStyle.Fill;
- this.mainSplit.Location = new System.Drawing.Point(0, 0);
- this.mainSplit.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.mainSplit.Name = "mainSplit";
- //
- // mainSplit.Panel1
- //
- this.mainSplit.Panel1.Controls.Add(this.llSites);
- this.mainSplit.Panel1.Controls.Add(this.btnGo);
- this.mainSplit.Panel1.Controls.Add(this.tbParse);
- this.mainSplit.Panel1.Controls.Add(this.llCookie);
- this.mainSplit.Panel1.Controls.Add(this.llFolder);
- this.mainSplit.Panel1.Controls.Add(this.lvRip);
- this.mainSplit.Panel1.Controls.Add(this.RipStatus);
- this.mainSplit.Panel1.Controls.Add(this.lblUrl);
- this.mainSplit.Panel1.Controls.Add(this.tbDir);
- this.mainSplit.Panel1.Padding = new System.Windows.Forms.Padding(1);
- this.mainSplit.Panel1MinSize = 0;
- //
- // mainSplit.Panel2
- //
- this.mainSplit.Panel2.Controls.Add(this.pbPreview);
- this.mainSplit.Panel2Collapsed = true;
- this.mainSplit.Panel2MinSize = 0;
- this.mainSplit.Size = new System.Drawing.Size(787, 488);
- this.mainSplit.SplitterDistance = 407;
- this.mainSplit.SplitterWidth = 5;
- this.mainSplit.TabIndex = 23;
- //
- // llSites
- //
- this.llSites.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.llSites.AutoSize = true;
- this.llSites.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.llSites.LinkColor = System.Drawing.SystemColors.Highlight;
- this.llSites.Location = new System.Drawing.Point(646, 14);
- this.llSites.Name = "llSites";
- this.llSites.Size = new System.Drawing.Size(42, 19);
- this.llSites.TabIndex = 33;
- this.llSites.TabStop = true;
- this.llSites.Text = "Sites";
- this.ttRipper.SetToolTip(this.llSites, "Support sites list");
- this.llSites.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llSites_LinkClicked);
- //
- // btnGo
- //
- this.btnGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnGo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.btnGo.ContextMenuStrip = this.cmsBatch;
- this.btnGo.DialogResult = System.Windows.Forms.DialogResult.Cancel;
- this.btnGo.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold);
- this.btnGo.Image = global::ImgRip.Properties.Resources.Download;
- this.btnGo.Location = new System.Drawing.Point(708, 5);
- this.btnGo.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.btnGo.Name = "btnGo";
- this.btnGo.Size = new System.Drawing.Size(71, 73);
- this.btnGo.TabIndex = 3;
- this.btnGo.TabStop = false;
- this.btnGo.Tag = "";
- this.ttRipper.SetToolTip(this.btnGo, "Start/Stop, Page Up/Down");
- this.btnGo.UseVisualStyleBackColor = true;
- this.btnGo.Click += new System.EventHandler(this.Go_Click);
- //
- // cmsBatch
- //
- this.cmsBatch.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.btnBatch});
- this.cmsBatch.Name = "cmsButton";
- this.cmsBatch.ShowItemToolTips = false;
- this.cmsBatch.Size = new System.Drawing.Size(110, 26);
- //
- // btnBatch
- //
- this.btnBatch.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold);
- this.btnBatch.Image = global::ImgRip.Properties.Resources.Batch;
- this.btnBatch.Name = "btnBatch";
- this.btnBatch.Size = new System.Drawing.Size(109, 22);
- this.btnBatch.Text = "Batch";
- this.btnBatch.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay;
- this.btnBatch.Click += new System.EventHandler(this.btnBatch_Click);
- //
- // tbParse
- //
- this.tbParse.AllowDrop = true;
- this.tbParse.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbParse.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
- this.tbParse.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.AllUrl;
- this.tbParse.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Url", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
- this.tbParse.Font = new System.Drawing.Font("Microsoft YaHei", 9F);
- this.tbParse.Location = new System.Drawing.Point(43, 13);
- this.tbParse.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.tbParse.Name = "tbParse";
- this.tbParse.Size = new System.Drawing.Size(595, 23);
- this.tbParse.TabIndex = 20;
- this.tbParse.TabStop = false;
- this.tbParse.Text = global::ImgRip.Properties.Settings.Default.Url;
- this.tbParse.WordWrap = false;
- this.tbParse.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick);
- this.tbParse.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbParse_DragDrop);
- this.tbParse.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbParse_DragEnter);
- this.tbParse.Leave += new System.EventHandler(this.tb_Leave);
- //
- // llCookie
- //
- this.llCookie.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.llCookie.AutoSize = true;
- this.llCookie.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.llCookie.LinkColor = System.Drawing.SystemColors.Highlight;
- this.llCookie.Location = new System.Drawing.Point(646, 56);
- this.llCookie.Name = "llCookie";
- this.llCookie.Size = new System.Drawing.Size(56, 19);
- this.llCookie.TabIndex = 32;
- this.llCookie.TabStop = true;
- this.llCookie.Text = "Cookie";
- this.ttRipper.SetToolTip(this.llCookie, "Set Cookie value");
- this.llCookie.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCookie_LinkClicked);
- //
- // llFolder
- //
- this.llFolder.AutoSize = true;
- this.llFolder.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.llFolder.LinkColor = System.Drawing.SystemColors.Highlight;
- this.llFolder.Location = new System.Drawing.Point(4, 55);
- this.llFolder.Name = "llFolder";
- this.llFolder.Size = new System.Drawing.Size(30, 19);
- this.llFolder.TabIndex = 31;
- this.llFolder.TabStop = true;
- this.llFolder.Text = "Dir";
- this.llFolder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.llFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llFolder_LinkClicked);
- //
- // lvRip
- //
- this.lvRip.AllowColumnReorder = true;
- this.lvRip.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.lvRip.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.chName,
- this.chNumber,
- this.chSize,
- this.chState});
- this.lvRip.ContextMenuStrip = this.cmsLV;
- this.lvRip.ForeColor = System.Drawing.SystemColors.HotTrack;
- this.lvRip.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.lvRip.Location = new System.Drawing.Point(1, 85);
- this.lvRip.Name = "lvRip";
- this.lvRip.ShowItemToolTips = true;
- this.lvRip.Size = new System.Drawing.Size(785, 380);
- this.lvRip.TabIndex = 30;
- this.lvRip.UseCompatibleStateImageBehavior = false;
- this.lvRip.View = System.Windows.Forms.View.Details;
- this.lvRip.SelectedIndexChanged += new System.EventHandler(this.lvSelectedIndexChanged);
- this.lvRip.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvKeyDown);
- //
- // chName
- //
- this.chName.DisplayIndex = 1;
- this.chName.Text = "Name";
- this.chName.Width = 150;
- //
- // chNumber
- //
- this.chNumber.DisplayIndex = 0;
- this.chNumber.Text = "No.";
- this.chNumber.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.chNumber.Width = 40;
- //
- // chSize
- //
- this.chSize.Text = "Size";
- this.chSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
- //
- // chState
- //
- this.chState.Text = "State";
- this.chState.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.chState.Width = 147;
- //
- // cmsLV
- //
- this.cmsLV.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.cmmiNextPage,
- this.cmmiDropGroup,
- this.cmmiCopyName,
- this.cmmiSave,
- this.cmmiRemove,
- this.cmmiClear,
- this.cmmiBatch,
- this.cmmiPreview});
- this.cmsLV.Name = "contextMenuStrip1";
- this.cmsLV.ShowCheckMargin = true;
- this.cmsLV.ShowImageMargin = false;
- this.cmsLV.ShowItemToolTips = false;
- this.cmsLV.Size = new System.Drawing.Size(118, 180);
- this.cmsLV.Opening += new System.ComponentModel.CancelEventHandler(this.cmsLV_Opening);
- //
- // cmmiNextPage
- //
- this.cmmiNextPage.Name = "cmmiNextPage";
- this.cmmiNextPage.Size = new System.Drawing.Size(117, 22);
- this.cmmiNextPage.Text = "Next";
- this.cmmiNextPage.Visible = false;
- this.cmmiNextPage.Click += new System.EventHandler(this.cmmiNextPage_Click);
- //
- // cmmiDropGroup
- //
- this.cmmiDropGroup.Name = "cmmiDropGroup";
- this.cmmiDropGroup.Size = new System.Drawing.Size(117, 22);
- this.cmmiDropGroup.Text = "Drop";
- this.cmmiDropGroup.Visible = false;
- this.cmmiDropGroup.Click += new System.EventHandler(this.cmmiDrop_Click);
- //
- // cmmiCopyName
- //
- this.cmmiCopyName.Name = "cmmiCopyName";
- this.cmmiCopyName.Size = new System.Drawing.Size(117, 22);
- this.cmmiCopyName.Text = "Copy";
- this.cmmiCopyName.Visible = false;
- this.cmmiCopyName.Click += new System.EventHandler(this.cmmiCopyName_Click);
- //
- // cmmiSave
- //
- this.cmmiSave.Name = "cmmiSave";
- this.cmmiSave.Size = new System.Drawing.Size(117, 22);
- this.cmmiSave.Text = "Save";
- this.cmmiSave.Visible = false;
- this.cmmiSave.Click += new System.EventHandler(this.cmmiDownloadFile);
- //
- // cmmiRemove
- //
- this.cmmiRemove.Name = "cmmiRemove";
- this.cmmiRemove.Size = new System.Drawing.Size(117, 22);
- this.cmmiRemove.Text = "Remove";
- this.cmmiRemove.Visible = false;
- this.cmmiRemove.Click += new System.EventHandler(this.cmmiDeleteFile);
- //
- // cmmiClear
- //
- this.cmmiClear.Name = "cmmiClear";
- this.cmmiClear.Size = new System.Drawing.Size(117, 22);
- this.cmmiClear.Text = "Clear";
- this.cmmiClear.Visible = false;
- this.cmmiClear.Click += new System.EventHandler(this.btnClear_Click);
- //
- // cmmiBatch
- //
- this.cmmiBatch.CheckOnClick = true;
- this.cmmiBatch.Name = "cmmiBatch";
- this.cmmiBatch.Size = new System.Drawing.Size(117, 22);
- this.cmmiBatch.Text = "Batch";
- this.cmmiBatch.Visible = false;
- this.cmmiBatch.CheckedChanged += new System.EventHandler(this.cmmiBatch_CheckedChanged);
- //
- // cmmiPreview
- //
- this.cmmiPreview.Checked = true;
- this.cmmiPreview.CheckOnClick = true;
- this.cmmiPreview.CheckState = System.Windows.Forms.CheckState.Checked;
- this.cmmiPreview.Name = "cmmiPreview";
- this.cmmiPreview.Size = new System.Drawing.Size(117, 22);
- this.cmmiPreview.Text = "Preview";
- //
- // RipStatus
- //
- this.RipStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.RipStatus.AutoSize = false;
- this.RipStatus.Dock = System.Windows.Forms.DockStyle.None;
- this.RipStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
- this.RipStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.tsLabel,
- this.lbBatch,
- this.tsPB,
- this.tsCloud,
- this.tsHome});
- this.RipStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;
- this.RipStatus.Location = new System.Drawing.Point(1, 465);
- this.RipStatus.Name = "RipStatus";
- this.RipStatus.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0);
- this.RipStatus.ShowItemToolTips = true;
- this.RipStatus.Size = new System.Drawing.Size(785, 22);
- this.RipStatus.TabIndex = 22;
- //
- // tsLabel
- //
- this.tsLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.tsLabel.Font = new System.Drawing.Font("Microsoft YaHei", 9F, System.Drawing.FontStyle.Bold);
- this.tsLabel.ForeColor = System.Drawing.SystemColors.Highlight;
- this.tsLabel.Name = "tsLabel";
- this.tsLabel.Size = new System.Drawing.Size(41, 17);
- this.tsLabel.Text = "Done";
- //
- // lbBatch
- //
- this.lbBatch.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold);
- this.lbBatch.ForeColor = System.Drawing.SystemColors.MenuHighlight;
- this.lbBatch.Name = "lbBatch";
- this.lbBatch.Size = new System.Drawing.Size(0, 17);
- //
- // tsPB
- //
- this.tsPB.Name = "tsPB";
- this.tsPB.Size = new System.Drawing.Size(100, 16);
- this.tsPB.Visible = false;
- //
- // tsCloud
- //
- this.tsCloud.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
- this.tsCloud.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
- this.tsCloud.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.tsiGData,
- this.tsiPicasa});
- this.tsCloud.Image = ((System.Drawing.Image)(resources.GetObject("tsCloud.Image")));
- this.tsCloud.Name = "tsCloud";
- this.tsCloud.RightToLeft = System.Windows.Forms.RightToLeft.No;
- this.tsCloud.Size = new System.Drawing.Size(32, 20);
- this.tsCloud.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
- this.tsCloud.ToolTipText = "Cloud web storage service.";
- this.tsCloud.Click += new System.EventHandler(this.CloudToolStrip_Click);
- //
- // tsiGData
- //
- this.tsiGData.Image = ((System.Drawing.Image)(resources.GetObject("tsiGData.Image")));
- this.tsiGData.Name = "tsiGData";
- this.tsiGData.Size = new System.Drawing.Size(114, 22);
- this.tsiGData.Text = "GDrive";
- this.tsiGData.Click += new System.EventHandler(this.CloudItem_Click);
- //
- // tsiPicasa
- //
- this.tsiPicasa.Image = ((System.Drawing.Image)(resources.GetObject("tsiPicasa.Image")));
- this.tsiPicasa.Name = "tsiPicasa";
- this.tsiPicasa.Size = new System.Drawing.Size(114, 22);
- this.tsiPicasa.Text = "Picasa";
- this.tsiPicasa.Click += new System.EventHandler(this.CloudItem_Click);
- //
- // tsHome
- //
- this.tsHome.AutoToolTip = true;
- this.tsHome.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
- this.tsHome.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
- this.tsHome.Image = ((System.Drawing.Image)(resources.GetObject("tsHome.Image")));
- this.tsHome.IsLink = true;
- this.tsHome.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
- this.tsHome.Margin = new System.Windows.Forms.Padding(0, 3, 5, 2);
- this.tsHome.Name = "tsHome";
- this.tsHome.Size = new System.Drawing.Size(16, 17);
- this.tsHome.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay;
- this.tsHome.ToolTipText = "Home at CodePlex";
- this.tsHome.Click += new System.EventHandler(this.tsHome_Click);
- //
- // lblUrl
- //
- this.lblUrl.AutoSize = true;
- this.lblUrl.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
- this.lblUrl.Location = new System.Drawing.Point(4, 14);
- this.lblUrl.Name = "lblUrl";
- this.lblUrl.Size = new System.Drawing.Size(34, 19);
- this.lblUrl.TabIndex = 19;
- this.lblUrl.Text = "Url:";
- //
- // tbDir
- //
- this.tbDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbDir.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
- this.tbDir.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;
- this.tbDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Dir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
- this.tbDir.Font = new System.Drawing.Font("Microsoft YaHei", 9F);
- this.tbDir.Location = new System.Drawing.Point(43, 55);
- this.tbDir.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.tbDir.Name = "tbDir";
- this.tbDir.Size = new System.Drawing.Size(595, 23);
- this.tbDir.TabIndex = 4;
- this.tbDir.TabStop = false;
- this.tbDir.Text = global::ImgRip.Properties.Settings.Default.Dir;
- this.tbDir.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick);
- this.tbDir.Leave += new System.EventHandler(this.tb_Leave);
- //
- // pbPreview
- //
- this.pbPreview.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
- this.pbPreview.Dock = System.Windows.Forms.DockStyle.Fill;
- this.pbPreview.InitialImage = null;
- this.pbPreview.Location = new System.Drawing.Point(0, 0);
- this.pbPreview.Margin = new System.Windows.Forms.Padding(0);
- this.pbPreview.Name = "pbPreview";
- this.pbPreview.Size = new System.Drawing.Size(96, 100);
- this.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.pbPreview.TabIndex = 22;
- this.pbPreview.TabStop = false;
- this.pbPreview.DoubleClick += new System.EventHandler(this.pbDoubleClick);
- //
- // bwFetch
- //
- this.bwFetch.WorkerReportsProgress = true;
- this.bwFetch.WorkerSupportsCancellation = true;
- this.bwFetch.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Fetch_DoWork);
- this.bwFetch.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.DownloadFiles_ProgressChanged);
- this.bwFetch.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.DownloadFiles_RunWorkerCompleted);
- //
- // ttRipper
- //
- this.ttRipper.AutomaticDelay = 300;
- //
- // tmMinus
- //
- this.tmMinus.Tick += new System.EventHandler(this.btnMinus_Click);
- //
- // tmPlus
- //
- this.tmPlus.Tick += new System.EventHandler(this.btnPlus_Click);
- //
- // fbDir
- //
- this.fbDir.Description = "Select folder to store files";
- this.fbDir.SelectedPath = global::ImgRip.Properties.Settings.Default.Dir;
- //
- // Main
- //
- this.AcceptButton = this.btnGo;
- this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(787, 488);
- this.Controls.Add(this.mainSplit);
- this.Font = new System.Drawing.Font("Microsoft YaHei", 9F);
- this.ForeColor = System.Drawing.SystemColors.WindowText;
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.KeyPreview = true;
- this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.MinimumSize = new System.Drawing.Size(450, 300);
- this.Name = "Main";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "Image Ripper - F11: FullScreen, [Shift+] Space: Preview ON|OFF";
- this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Ripper_KeyDown);
- this.mainSplit.Panel1.ResumeLayout(false);
- this.mainSplit.Panel1.PerformLayout();
- this.mainSplit.Panel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).EndInit();
- this.mainSplit.ResumeLayout(false);
- this.cmsBatch.ResumeLayout(false);
- this.cmsLV.ResumeLayout(false);
- this.RipStatus.ResumeLayout(false);
- this.RipStatus.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).EndInit();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private SplitButton btnGo;
- private System.Windows.Forms.TextBox tbDir;
- private System.Windows.Forms.FolderBrowserDialog fbDir;
- private System.Windows.Forms.Label lblUrl;
- private System.Windows.Forms.TextBox tbParse;
- private System.Windows.Forms.PictureBox pbPreview;
- private System.Windows.Forms.SplitContainer mainSplit;
- private System.Windows.Forms.StatusStrip RipStatus;
- private System.Windows.Forms.ToolStripStatusLabel tsLabel;
- private System.Windows.Forms.ToolTip ttRipper;
- private System.Windows.Forms.Timer tmMinus;
- private System.Windows.Forms.Timer tmPlus;
- private System.Windows.Forms.ContextMenuStrip cmsLV;
- private System.Windows.Forms.ToolStripMenuItem cmmiNextPage;
- private System.Windows.Forms.ToolStripMenuItem cmmiDropGroup;
- private System.Windows.Forms.ToolStripStatusLabel lbBatch;
- private System.Windows.Forms.ContextMenuStrip cmsBatch;
- private System.Windows.Forms.ToolStripMenuItem btnBatch;
- private System.Windows.Forms.ToolStripMenuItem cmmiClear;
- private System.Windows.Forms.ListView lvRip;
- private System.Windows.Forms.ColumnHeader chName;
- private System.Windows.Forms.ColumnHeader chSize;
- private System.Windows.Forms.ColumnHeader chState;
- private System.Windows.Forms.ToolStripMenuItem cmmiCopyName;
- private System.Windows.Forms.LinkLabel llFolder;
- private System.Windows.Forms.LinkLabel llCookie;
- private System.Windows.Forms.ToolStripMenuItem cmmiSave;
- private System.Windows.Forms.ToolStripMenuItem cmmiRemove;
- private System.Windows.Forms.ToolStripSplitButton tsCloud;
- private System.Windows.Forms.ToolStripProgressBar tsPB;
- private System.Windows.Forms.ToolStripMenuItem tsiGData;
- private System.Windows.Forms.ToolStripMenuItem tsiPicasa;
- private System.Windows.Forms.ColumnHeader chNumber;
- private System.Windows.Forms.ToolStripStatusLabel tsHome;
- private System.ComponentModel.BackgroundWorker bwFetch;
- private System.Windows.Forms.LinkLabel llSites;
- private System.Windows.Forms.ToolStripMenuItem cmmiBatch;
- private System.Windows.Forms.ToolStripMenuItem cmmiPreview;
- }
-}
-
+namespace ImgRip
+{
+ 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()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
+ this.mainSplit = new System.Windows.Forms.SplitContainer();
+ this.llSites = new System.Windows.Forms.LinkLabel();
+ this.btnGo = new ImgRip.SplitButton();
+ this.cmsBatch = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.btnBatch = new System.Windows.Forms.ToolStripMenuItem();
+ this.tbParse = new System.Windows.Forms.TextBox();
+ this.llCookie = new System.Windows.Forms.LinkLabel();
+ this.llFolder = new System.Windows.Forms.LinkLabel();
+ this.lvRip = new System.Windows.Forms.ListView();
+ this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.chState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.cmsLV = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.cmmiNextPage = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiDropGroup = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiCopyName = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiSave = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiRemove = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiClear = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiBatch = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmmiPreview = new System.Windows.Forms.ToolStripMenuItem();
+ this.RipStatus = new System.Windows.Forms.StatusStrip();
+ this.tsLabel = new System.Windows.Forms.ToolStripStatusLabel();
+ this.lbBatch = new System.Windows.Forms.ToolStripStatusLabel();
+ this.tsPB = new System.Windows.Forms.ToolStripProgressBar();
+ this.tsCloud = new System.Windows.Forms.ToolStripSplitButton();
+ this.tsiGData = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsiPicasa = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsHome = new System.Windows.Forms.ToolStripStatusLabel();
+ this.lblUrl = new System.Windows.Forms.Label();
+ this.tbDir = new System.Windows.Forms.TextBox();
+ this.pbPreview = new System.Windows.Forms.PictureBox();
+ this.bwFetch = new System.ComponentModel.BackgroundWorker();
+ this.ttRipper = new System.Windows.Forms.ToolTip(this.components);
+ this.tmMinus = new System.Windows.Forms.Timer(this.components);
+ this.tmPlus = new System.Windows.Forms.Timer(this.components);
+ this.fbDir = new System.Windows.Forms.FolderBrowserDialog();
+ ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).BeginInit();
+ this.mainSplit.Panel1.SuspendLayout();
+ this.mainSplit.Panel2.SuspendLayout();
+ this.mainSplit.SuspendLayout();
+ this.cmsBatch.SuspendLayout();
+ this.cmsLV.SuspendLayout();
+ this.RipStatus.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).BeginInit();
+ this.SuspendLayout();
+ //
+ // mainSplit
+ //
+ this.mainSplit.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.mainSplit.Location = new System.Drawing.Point(0, 0);
+ this.mainSplit.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.mainSplit.Name = "mainSplit";
+ //
+ // mainSplit.Panel1
+ //
+ this.mainSplit.Panel1.Controls.Add(this.llSites);
+ this.mainSplit.Panel1.Controls.Add(this.btnGo);
+ this.mainSplit.Panel1.Controls.Add(this.tbParse);
+ this.mainSplit.Panel1.Controls.Add(this.llCookie);
+ this.mainSplit.Panel1.Controls.Add(this.llFolder);
+ this.mainSplit.Panel1.Controls.Add(this.lvRip);
+ this.mainSplit.Panel1.Controls.Add(this.RipStatus);
+ this.mainSplit.Panel1.Controls.Add(this.lblUrl);
+ this.mainSplit.Panel1.Controls.Add(this.tbDir);
+ this.mainSplit.Panel1.Padding = new System.Windows.Forms.Padding(1);
+ this.mainSplit.Panel1MinSize = 0;
+ //
+ // mainSplit.Panel2
+ //
+ this.mainSplit.Panel2.Controls.Add(this.pbPreview);
+ this.mainSplit.Panel2Collapsed = true;
+ this.mainSplit.Panel2MinSize = 0;
+ this.mainSplit.Size = new System.Drawing.Size(787, 488);
+ this.mainSplit.SplitterDistance = 407;
+ this.mainSplit.SplitterWidth = 5;
+ this.mainSplit.TabIndex = 23;
+ //
+ // llSites
+ //
+ this.llSites.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.llSites.AutoSize = true;
+ this.llSites.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.llSites.LinkColor = System.Drawing.SystemColors.Highlight;
+ this.llSites.Location = new System.Drawing.Point(646, 14);
+ this.llSites.Name = "llSites";
+ this.llSites.Size = new System.Drawing.Size(42, 19);
+ this.llSites.TabIndex = 33;
+ this.llSites.TabStop = true;
+ this.llSites.Text = "Sites";
+ this.ttRipper.SetToolTip(this.llSites, "Support sites list");
+ this.llSites.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llSites_LinkClicked);
+ //
+ // btnGo
+ //
+ this.btnGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnGo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnGo.ContextMenuStrip = this.cmsBatch;
+ this.btnGo.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnGo.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold);
+ this.btnGo.Image = global::ImgRip.Properties.Resources.Download;
+ this.btnGo.Location = new System.Drawing.Point(708, 5);
+ this.btnGo.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.btnGo.Name = "btnGo";
+ this.btnGo.Size = new System.Drawing.Size(71, 73);
+ this.btnGo.TabIndex = 3;
+ this.btnGo.TabStop = false;
+ this.btnGo.Tag = "";
+ this.ttRipper.SetToolTip(this.btnGo, "Start/Stop, Page Up/Down");
+ this.btnGo.UseVisualStyleBackColor = true;
+ this.btnGo.Click += new System.EventHandler(this.Go_Click);
+ //
+ // cmsBatch
+ //
+ this.cmsBatch.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.btnBatch});
+ this.cmsBatch.Name = "cmsButton";
+ this.cmsBatch.ShowItemToolTips = false;
+ this.cmsBatch.Size = new System.Drawing.Size(110, 26);
+ //
+ // btnBatch
+ //
+ this.btnBatch.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold);
+ this.btnBatch.Image = global::ImgRip.Properties.Resources.Batch;
+ this.btnBatch.Name = "btnBatch";
+ this.btnBatch.Size = new System.Drawing.Size(109, 22);
+ this.btnBatch.Text = "Batch";
+ this.btnBatch.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay;
+ this.btnBatch.Click += new System.EventHandler(this.btnBatch_Click);
+ //
+ // tbParse
+ //
+ this.tbParse.AllowDrop = true;
+ this.tbParse.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbParse.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
+ this.tbParse.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.AllUrl;
+ this.tbParse.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Url", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+ this.tbParse.Font = new System.Drawing.Font("Microsoft YaHei", 9F);
+ this.tbParse.Location = new System.Drawing.Point(43, 13);
+ this.tbParse.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.tbParse.Name = "tbParse";
+ this.tbParse.Size = new System.Drawing.Size(595, 23);
+ this.tbParse.TabIndex = 20;
+ this.tbParse.TabStop = false;
+ this.tbParse.Text = global::ImgRip.Properties.Settings.Default.Url;
+ this.tbParse.WordWrap = false;
+ this.tbParse.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick);
+ this.tbParse.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbParse_DragDrop);
+ this.tbParse.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbParse_DragEnter);
+ this.tbParse.Leave += new System.EventHandler(this.tb_Leave);
+ //
+ // llCookie
+ //
+ this.llCookie.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.llCookie.AutoSize = true;
+ this.llCookie.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.llCookie.LinkColor = System.Drawing.SystemColors.Highlight;
+ this.llCookie.Location = new System.Drawing.Point(646, 56);
+ this.llCookie.Name = "llCookie";
+ this.llCookie.Size = new System.Drawing.Size(56, 19);
+ this.llCookie.TabIndex = 32;
+ this.llCookie.TabStop = true;
+ this.llCookie.Text = "Cookie";
+ this.ttRipper.SetToolTip(this.llCookie, "Set Cookie value");
+ this.llCookie.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCookie_LinkClicked);
+ //
+ // llFolder
+ //
+ this.llFolder.AutoSize = true;
+ this.llFolder.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.llFolder.LinkColor = System.Drawing.SystemColors.Highlight;
+ this.llFolder.Location = new System.Drawing.Point(4, 55);
+ this.llFolder.Name = "llFolder";
+ this.llFolder.Size = new System.Drawing.Size(30, 19);
+ this.llFolder.TabIndex = 31;
+ this.llFolder.TabStop = true;
+ this.llFolder.Text = "Dir";
+ this.llFolder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.llFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llFolder_LinkClicked);
+ //
+ // lvRip
+ //
+ this.lvRip.AllowColumnReorder = true;
+ this.lvRip.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lvRip.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.chName,
+ this.chNumber,
+ this.chSize,
+ this.chState});
+ this.lvRip.ContextMenuStrip = this.cmsLV;
+ this.lvRip.ForeColor = System.Drawing.SystemColors.HotTrack;
+ this.lvRip.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.lvRip.Location = new System.Drawing.Point(1, 85);
+ this.lvRip.Name = "lvRip";
+ this.lvRip.ShowItemToolTips = true;
+ this.lvRip.Size = new System.Drawing.Size(785, 380);
+ this.lvRip.TabIndex = 30;
+ this.lvRip.UseCompatibleStateImageBehavior = false;
+ this.lvRip.View = System.Windows.Forms.View.Details;
+ this.lvRip.SelectedIndexChanged += new System.EventHandler(this.lvSelectedIndexChanged);
+ this.lvRip.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvKeyDown);
+ //
+ // chName
+ //
+ this.chName.DisplayIndex = 1;
+ this.chName.Text = "Name";
+ this.chName.Width = 150;
+ //
+ // chNumber
+ //
+ this.chNumber.DisplayIndex = 0;
+ this.chNumber.Text = "No.";
+ this.chNumber.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.chNumber.Width = 40;
+ //
+ // chSize
+ //
+ this.chSize.Text = "Size";
+ this.chSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ //
+ // chState
+ //
+ this.chState.Text = "State";
+ this.chState.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ this.chState.Width = 147;
+ //
+ // cmsLV
+ //
+ this.cmsLV.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.cmmiNextPage,
+ this.cmmiDropGroup,
+ this.cmmiCopyName,
+ this.cmmiSave,
+ this.cmmiRemove,
+ this.cmmiClear,
+ this.cmmiBatch,
+ this.cmmiPreview});
+ this.cmsLV.Name = "contextMenuStrip1";
+ this.cmsLV.ShowCheckMargin = true;
+ this.cmsLV.ShowImageMargin = false;
+ this.cmsLV.ShowItemToolTips = false;
+ this.cmsLV.Size = new System.Drawing.Size(118, 180);
+ this.cmsLV.Opening += new System.ComponentModel.CancelEventHandler(this.cmsLV_Opening);
+ //
+ // cmmiNextPage
+ //
+ this.cmmiNextPage.Name = "cmmiNextPage";
+ this.cmmiNextPage.Size = new System.Drawing.Size(117, 22);
+ this.cmmiNextPage.Text = "Next";
+ this.cmmiNextPage.Visible = false;
+ this.cmmiNextPage.Click += new System.EventHandler(this.cmmiNextPage_Click);
+ //
+ // cmmiDropGroup
+ //
+ this.cmmiDropGroup.Name = "cmmiDropGroup";
+ this.cmmiDropGroup.Size = new System.Drawing.Size(117, 22);
+ this.cmmiDropGroup.Text = "Drop";
+ this.cmmiDropGroup.Visible = false;
+ this.cmmiDropGroup.Click += new System.EventHandler(this.cmmiDrop_Click);
+ //
+ // cmmiCopyName
+ //
+ this.cmmiCopyName.Name = "cmmiCopyName";
+ this.cmmiCopyName.Size = new System.Drawing.Size(117, 22);
+ this.cmmiCopyName.Text = "Copy";
+ this.cmmiCopyName.Visible = false;
+ this.cmmiCopyName.Click += new System.EventHandler(this.cmmiCopyName_Click);
+ //
+ // cmmiSave
+ //
+ this.cmmiSave.Name = "cmmiSave";
+ this.cmmiSave.Size = new System.Drawing.Size(117, 22);
+ this.cmmiSave.Text = "Save";
+ this.cmmiSave.Visible = false;
+ this.cmmiSave.Click += new System.EventHandler(this.cmmiDownloadFile);
+ //
+ // cmmiRemove
+ //
+ this.cmmiRemove.Name = "cmmiRemove";
+ this.cmmiRemove.Size = new System.Drawing.Size(117, 22);
+ this.cmmiRemove.Text = "Remove";
+ this.cmmiRemove.Visible = false;
+ this.cmmiRemove.Click += new System.EventHandler(this.cmmiDeleteFile);
+ //
+ // cmmiClear
+ //
+ this.cmmiClear.Name = "cmmiClear";
+ this.cmmiClear.Size = new System.Drawing.Size(117, 22);
+ this.cmmiClear.Text = "Clear";
+ this.cmmiClear.Visible = false;
+ this.cmmiClear.Click += new System.EventHandler(this.btnClear_Click);
+ //
+ // cmmiBatch
+ //
+ this.cmmiBatch.CheckOnClick = true;
+ this.cmmiBatch.Name = "cmmiBatch";
+ this.cmmiBatch.Size = new System.Drawing.Size(117, 22);
+ this.cmmiBatch.Text = "Batch";
+ this.cmmiBatch.Visible = false;
+ this.cmmiBatch.CheckedChanged += new System.EventHandler(this.cmmiBatch_CheckedChanged);
+ //
+ // cmmiPreview
+ //
+ this.cmmiPreview.Checked = true;
+ this.cmmiPreview.CheckOnClick = true;
+ this.cmmiPreview.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cmmiPreview.Name = "cmmiPreview";
+ this.cmmiPreview.Size = new System.Drawing.Size(117, 22);
+ this.cmmiPreview.Text = "Preview";
+ //
+ // RipStatus
+ //
+ this.RipStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.RipStatus.AutoSize = false;
+ this.RipStatus.Dock = System.Windows.Forms.DockStyle.None;
+ this.RipStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
+ this.RipStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.tsLabel,
+ this.lbBatch,
+ this.tsPB,
+ this.tsCloud,
+ this.tsHome});
+ this.RipStatus.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;
+ this.RipStatus.Location = new System.Drawing.Point(1, 465);
+ this.RipStatus.Name = "RipStatus";
+ this.RipStatus.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0);
+ this.RipStatus.ShowItemToolTips = true;
+ this.RipStatus.Size = new System.Drawing.Size(785, 22);
+ this.RipStatus.TabIndex = 22;
+ //
+ // tsLabel
+ //
+ this.tsLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.tsLabel.Font = new System.Drawing.Font("Microsoft YaHei", 9F, System.Drawing.FontStyle.Bold);
+ this.tsLabel.ForeColor = System.Drawing.SystemColors.Highlight;
+ this.tsLabel.Name = "tsLabel";
+ this.tsLabel.Size = new System.Drawing.Size(41, 17);
+ this.tsLabel.Text = "Done";
+ //
+ // lbBatch
+ //
+ this.lbBatch.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold);
+ this.lbBatch.ForeColor = System.Drawing.SystemColors.MenuHighlight;
+ this.lbBatch.Name = "lbBatch";
+ this.lbBatch.Size = new System.Drawing.Size(0, 17);
+ //
+ // tsPB
+ //
+ this.tsPB.Name = "tsPB";
+ this.tsPB.Size = new System.Drawing.Size(100, 16);
+ this.tsPB.Visible = false;
+ //
+ // tsCloud
+ //
+ this.tsCloud.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.tsCloud.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.tsCloud.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.tsiGData,
+ this.tsiPicasa});
+ this.tsCloud.Image = ((System.Drawing.Image)(resources.GetObject("tsCloud.Image")));
+ this.tsCloud.Name = "tsCloud";
+ this.tsCloud.RightToLeft = System.Windows.Forms.RightToLeft.No;
+ this.tsCloud.Size = new System.Drawing.Size(32, 20);
+ this.tsCloud.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
+ this.tsCloud.ToolTipText = "Cloud web storage service.";
+ this.tsCloud.Click += new System.EventHandler(this.CloudToolStrip_Click);
+ //
+ // tsiGData
+ //
+ this.tsiGData.Image = ((System.Drawing.Image)(resources.GetObject("tsiGData.Image")));
+ this.tsiGData.Name = "tsiGData";
+ this.tsiGData.Size = new System.Drawing.Size(114, 22);
+ this.tsiGData.Text = "GDrive";
+ this.tsiGData.Click += new System.EventHandler(this.CloudItem_Click);
+ //
+ // tsiPicasa
+ //
+ this.tsiPicasa.Image = ((System.Drawing.Image)(resources.GetObject("tsiPicasa.Image")));
+ this.tsiPicasa.Name = "tsiPicasa";
+ this.tsiPicasa.Size = new System.Drawing.Size(114, 22);
+ this.tsiPicasa.Text = "Picasa";
+ this.tsiPicasa.Click += new System.EventHandler(this.CloudItem_Click);
+ //
+ // tsHome
+ //
+ this.tsHome.AutoToolTip = true;
+ this.tsHome.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.tsHome.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
+ this.tsHome.Image = ((System.Drawing.Image)(resources.GetObject("tsHome.Image")));
+ this.tsHome.IsLink = true;
+ this.tsHome.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
+ this.tsHome.Margin = new System.Windows.Forms.Padding(0, 3, 5, 2);
+ this.tsHome.Name = "tsHome";
+ this.tsHome.Size = new System.Drawing.Size(16, 17);
+ this.tsHome.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay;
+ this.tsHome.ToolTipText = "Home at CodePlex";
+ this.tsHome.Click += new System.EventHandler(this.tsHome_Click);
+ //
+ // lblUrl
+ //
+ this.lblUrl.AutoSize = true;
+ this.lblUrl.Font = new System.Drawing.Font("Microsoft YaHei", 10F, System.Drawing.FontStyle.Bold);
+ this.lblUrl.Location = new System.Drawing.Point(4, 14);
+ this.lblUrl.Name = "lblUrl";
+ this.lblUrl.Size = new System.Drawing.Size(34, 19);
+ this.lblUrl.TabIndex = 19;
+ this.lblUrl.Text = "Url:";
+ //
+ // tbDir
+ //
+ this.tbDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbDir.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
+ this.tbDir.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;
+ this.tbDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Dir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+ this.tbDir.Font = new System.Drawing.Font("Microsoft YaHei", 9F);
+ this.tbDir.Location = new System.Drawing.Point(43, 55);
+ this.tbDir.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.tbDir.Name = "tbDir";
+ this.tbDir.Size = new System.Drawing.Size(595, 23);
+ this.tbDir.TabIndex = 4;
+ this.tbDir.TabStop = false;
+ this.tbDir.Text = global::ImgRip.Properties.Settings.Default.Dir;
+ this.tbDir.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tb_MouseClick);
+ this.tbDir.Leave += new System.EventHandler(this.tb_Leave);
+ //
+ // pbPreview
+ //
+ this.pbPreview.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
+ this.pbPreview.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pbPreview.InitialImage = null;
+ this.pbPreview.Location = new System.Drawing.Point(0, 0);
+ this.pbPreview.Margin = new System.Windows.Forms.Padding(0);
+ this.pbPreview.Name = "pbPreview";
+ this.pbPreview.Size = new System.Drawing.Size(96, 100);
+ this.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ this.pbPreview.TabIndex = 22;
+ this.pbPreview.TabStop = false;
+ this.pbPreview.DoubleClick += new System.EventHandler(this.pbDoubleClick);
+ //
+ // bwFetch
+ //
+ this.bwFetch.WorkerReportsProgress = true;
+ this.bwFetch.WorkerSupportsCancellation = true;
+ this.bwFetch.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Fetch_DoWork);
+ this.bwFetch.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.DownloadFiles_ProgressChanged);
+ this.bwFetch.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.DownloadFiles_RunWorkerCompleted);
+ //
+ // ttRipper
+ //
+ this.ttRipper.AutomaticDelay = 300;
+ //
+ // tmMinus
+ //
+ this.tmMinus.Tick += new System.EventHandler(this.btnMinus_Click);
+ //
+ // tmPlus
+ //
+ this.tmPlus.Tick += new System.EventHandler(this.btnPlus_Click);
+ //
+ // fbDir
+ //
+ this.fbDir.Description = "Select folder to store files";
+ this.fbDir.SelectedPath = global::ImgRip.Properties.Settings.Default.Dir;
+ //
+ // Main
+ //
+ this.AcceptButton = this.btnGo;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(787, 488);
+ this.Controls.Add(this.mainSplit);
+ this.Font = new System.Drawing.Font("Microsoft YaHei", 9F);
+ this.ForeColor = System.Drawing.SystemColors.WindowText;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.KeyPreview = true;
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.MinimumSize = new System.Drawing.Size(450, 300);
+ this.Name = "Main";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Image Ripper - F11: FullScreen, [Shift+] Space: Preview ON|OFF";
+ this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Ripper_KeyDown);
+ this.mainSplit.Panel1.ResumeLayout(false);
+ this.mainSplit.Panel1.PerformLayout();
+ this.mainSplit.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).EndInit();
+ this.mainSplit.ResumeLayout(false);
+ this.cmsBatch.ResumeLayout(false);
+ this.cmsLV.ResumeLayout(false);
+ this.RipStatus.ResumeLayout(false);
+ this.RipStatus.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pbPreview)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private SplitButton btnGo;
+ private System.Windows.Forms.TextBox tbDir;
+ private System.Windows.Forms.FolderBrowserDialog fbDir;
+ private System.Windows.Forms.Label lblUrl;
+ private System.Windows.Forms.TextBox tbParse;
+ private System.Windows.Forms.PictureBox pbPreview;
+ private System.Windows.Forms.SplitContainer mainSplit;
+ private System.Windows.Forms.StatusStrip RipStatus;
+ private System.Windows.Forms.ToolStripStatusLabel tsLabel;
+ private System.Windows.Forms.ToolTip ttRipper;
+ private System.Windows.Forms.Timer tmMinus;
+ private System.Windows.Forms.Timer tmPlus;
+ private System.Windows.Forms.ContextMenuStrip cmsLV;
+ private System.Windows.Forms.ToolStripMenuItem cmmiNextPage;
+ private System.Windows.Forms.ToolStripMenuItem cmmiDropGroup;
+ private System.Windows.Forms.ToolStripStatusLabel lbBatch;
+ private System.Windows.Forms.ContextMenuStrip cmsBatch;
+ private System.Windows.Forms.ToolStripMenuItem btnBatch;
+ private System.Windows.Forms.ToolStripMenuItem cmmiClear;
+ private System.Windows.Forms.ListView lvRip;
+ private System.Windows.Forms.ColumnHeader chName;
+ private System.Windows.Forms.ColumnHeader chSize;
+ private System.Windows.Forms.ColumnHeader chState;
+ private System.Windows.Forms.ToolStripMenuItem cmmiCopyName;
+ private System.Windows.Forms.LinkLabel llFolder;
+ private System.Windows.Forms.LinkLabel llCookie;
+ private System.Windows.Forms.ToolStripMenuItem cmmiSave;
+ private System.Windows.Forms.ToolStripMenuItem cmmiRemove;
+ private System.Windows.Forms.ToolStripSplitButton tsCloud;
+ private System.Windows.Forms.ToolStripProgressBar tsPB;
+ private System.Windows.Forms.ToolStripMenuItem tsiGData;
+ private System.Windows.Forms.ToolStripMenuItem tsiPicasa;
+ private System.Windows.Forms.ColumnHeader chNumber;
+ private System.Windows.Forms.ToolStripStatusLabel tsHome;
+ private System.ComponentModel.BackgroundWorker bwFetch;
+ private System.Windows.Forms.LinkLabel llSites;
+ private System.Windows.Forms.ToolStripMenuItem cmmiBatch;
+ private System.Windows.Forms.ToolStripMenuItem cmmiPreview;
+ }
+}
+
diff --git a/Main.cs b/Main.cs
index 305f4b0..7777113 100644
--- a/Main.cs
+++ b/Main.cs
@@ -1,1077 +1,1077 @@
-//#define CheckSites
-namespace ImgRip
-{
- using ImgRip.Properties;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Threading;
- using System.Windows.Forms;
- using System.Xml.Linq;
-
- partial class Main : Form
- {
- bool FullScreen { get; set; }
- internal Site[] sites;
- internal long Range { get; set; }
- internal bool Batch { get { return To - From > 0; } set { cmmiBatch.Checked = cmmiBatch.Enabled = cmmiNextPage.Enabled = value; } }
-
- public Main()
- {
- InitializeComponent();
- btnGo.Tag = RipperAction.Download;
- tsHome.Alignment = ToolStripItemAlignment.Right;
- btnGo.UpArrowMouseUp += (s, e) => tmPlus.Enabled = false;
- btnGo.DownArrowMouseUp += (s, e) => tmMinus.Enabled = false;
- btnGo.UpArrowMouseDown += (s, e) =>
- {
- if (tmMinus.Enabled) tmMinus.Enabled = false;
- if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return;
- tmPlus.Enabled = true;
- };
- btnGo.DownArrowMouseDown += (s, e) =>
- {
- if (tmPlus.Enabled) tmPlus.Enabled = false;
- if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return;
- tmMinus.Enabled = true;
- };
- sites = ReadXML();
- //CheckSites(); WriteXML();
- }
-
- Site[] ReadXML()
- {
- var xe = XElement.Parse(Resources.SiteList);
- var sites = from s in xe.Descendants("Site")
- select new Site(s.Attribute("Name").Value, s.Attribute("Domain").Value, s.Attribute("Image").Value)
- {
- Type = s.Attribute("Type") == null ? "Default" : s.Attribute("Type").Value,
- Next = s.Attribute("Next") == null ? "" : s.Attribute("Next").Value,
- Screen = s.Attribute("Screen") == null ? "" : s.Attribute("Screen").Value
- };
- return sites.OrderBy(_ => _.Name).ToArray();
- }
-
- Site[] CheckSites()
- {
- var website = sites.ToList();
- foreach (var site in sites)
- {
- HttpWebRequest request = WebRequest.Create(string.Format("http://{0}", site.Domain)) as HttpWebRequest;
- request.Method = "HEAD";
- HttpWebResponse response = null;
- try
- {
- response = request.GetResponse() as HttpWebResponse;
- response.Close();
- }
- catch (Exception ex)
- {
- System.Diagnostics.Trace.WriteLine(ex.Message);
- website.Remove(site);
- }
- }
- return website.ToArray();
- }
-
- void WriteXML()
- {
- var doc = new XDocument();
- doc.Add(new XElement("ImageRipper", new XElement("List")));
- foreach (var item in sites)
- {
- var el = new XElement("Site",
- new XAttribute("Name", item.Name),
- new XAttribute("Domain", item.ToString()),
- new XAttribute("Image", item.Image),
- string.IsNullOrEmpty(item.Next) ? null : new XAttribute("Next", item.Next),
- string.IsNullOrEmpty(item.Screen) ? null : new XAttribute("Screen", item.Screen));
- if (item.Type != "Default")
- el.Add(new XAttribute("Type", item.Type));
- doc.Descendants("List").First().Add(el);
- }
- doc.Save(@".\..\..\Sites.xml");
- }
-
- ///
- /// UI Callback properties
- ///
- bool ShowProgressBar { set { Invoke(new Action(() => tsPB.Visible = value)); } }
- string Prompt { set { Invoke(new Action(() => tsLabel.Text = value)); } }
- int ProgressPercentage { set { Invoke(new Action(() => tsPB.Value = value)); } }
- string[] LviUpdate
- {
- set
- {
- Invoke(new Action(() =>
- {
- //No. 1, Name 0, Size 2, State 3
- string name = value[0], number = value[1], size = value[2], state = value[3];
- var lvi = lvRip.FindItemWithText(name);
- #region Update existed item
- if (lvi != null)
- {
- if (!string.IsNullOrEmpty(number)) lvi.SubItems[1].Text = number;
- if (!string.IsNullOrEmpty(size)) lvi.SubItems[2].Text = size;
- if (!string.IsNullOrEmpty(state)) lvi.SubItems[3].Text = state;
- if (lvi.Font.Style != FontStyle.Regular)
- lvi.Font = new Font(lvi.Font, FontStyle.Regular);
- }
- #endregion
-
- #region Add new item to group
- else
- {
- lvi = new ListViewItem(value);
- lvi.ToolTipText = Fetch.Address;
- if (lvRip.Groups[Fetch.Title] == null) lvRip.Groups.Add(Fetch.Title, string.Format("{0} [{1}P]", Fetch.Title, Fetch.Images.Count));
- lvi.Group = lvRip.Groups[Fetch.Title];
- lvRip.Items.Add(lvi).EnsureVisible();
- lvi.ForeColor = lvi.Index % 2 == 0 ? Color.ForestGreen : Color.RoyalBlue;
- }
- #endregion
- }));
- }
- }
-
- internal long From { get; set; }
- internal long To { get; set; }
-
- internal string Dir
- {
- get { return tbDir.Text; }
- set { tbDir.Text = value; }
- }
-
- public string Address
- {
- get { return tbParse.Text; }
- set { tbParse.Text = value; }
- }
-
- private void Go_Click(object sender, EventArgs e)
- {
- switch (((RipperAction)btnGo.Tag))
- {
- case RipperAction.Download:
- if (!CanDownload) return;
- tbParse.ReadOnly = true;
- tbDir.ReadOnly = true;
- Settings.Default.Save();
- Go();
- break;
- case RipperAction.Cancel:
- Batch = false;
- Fetch.Canceled = true; Fetch.Cancel();
- bwFetch.CancelAsync();
- ((Button)sender).Enabled = false;
- break;
- }
- }
-
- private void ResetStatus()
- {
- Prompt = string.Empty;
- ShowProgressBar = true;
- ProgressPercentage = 0;
- }
-
- private void Fetch_DoWork(object sender, DoWorkEventArgs e)
- {
- if ((e.Result = Parse(Address.Trim())) != null) { Fetch.Next = null; return; }
- if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; return; }
-#if ! TRACE
- FetchFile(e);
-#endif
- }
-
- private void FetchFile(DoWorkEventArgs e)
- {
- ResetStatus();
- if (Fetch.Images.Count == 0) e.Result = "Not a photo gallery!";
- for (int idx = 0; idx < Fetch.Images.Count; idx++)
- {
- var kvp = Fetch.Images.ElementAt(idx);
- Fetch.Address = kvp.Value;
- var fi = new FileInfo(Path.Combine(Dir, kvp.Key));
- Fetch.Current = fi;
- //number #1, name #0, size #2, state #3
- var Order = (idx + 1).ToString();
- if (fi.Exists)
- {
- LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Existed" };
- continue;
- }
- LviUpdate = new[] { fi.Name, Order, null, "Downloading" };
- var percentage = idx * 100 / Fetch.Images.Count;
- bwFetch.ReportProgress(percentage);
- if (Batch) Invoke(new Action(() => lbBatch.Text = string.Format(" #{0}/{1} Pages", (Range - (To - From)), Range)));
-
- #region Download files
- switch (Fetch.Site.Type)
- {
- default:
- try
- {
- Fetch.GetFile(Fetch.Address, fi.ToString());
- }
- catch (Exception exp)
- {
- LviUpdate = new[] { fi.Name, Order, null, exp.Message };
- if (fi.Exists) fi.Delete();
- }
- break;
- case "Heels":
- bool succeed = false;
- if (string.IsNullOrEmpty(Settings.Default.Cookie))
- {
- Invoke(new Action(() =>
- {
- new SetCookie().ShowDialog(this);
- }));
- }
- while (!succeed)
- {
- using (var s = Fetch.GetStream(Fetch.Address, Settings.Default.Cookie))
- using (var bmp = Image.FromStream(s))
- {
- try
- {
- bmp.Save(fi.ToString());
- s.Close();
- }
- catch (Exception)
- {
- s.Close(); s.Dispose(); bmp.Dispose();
- if (Check(Order, e)) return;
- LviUpdate = new[] { fi.Name, Order, null, "Invalid Cookie / Wait 5 secs" };
- Thread.Sleep(5000);
- }
- succeed = true;
- }
- }
- break;
- case "Heel":
- using (var s = Fetch.GetStream(Fetch.Address))
- using (var bmp = Image.FromStream(s))
- {
- try
- {
- bmp.Save(fi.ToString());
- s.Close();
- }
- catch (Exception exp)
- {
- s.Close(); s.Dispose(); bmp.Dispose();
- if (Check(Order, e)) return;
- LviUpdate = new[] { fi.Name, Order, null, exp.Message };
- }
- }
- break;
- }
- #endregion
-
- if (Check(Order, e)) return;
- fi.Refresh();
- if (!fi.Exists) { LviUpdate = new[] { fi.Name, Order, null, "Download Failed!" }; continue; }
- if (mainSplit.Panel2Collapsed) Invoke(new Action(() => mainSplit.Panel2Collapsed = !cmmiPreview.Checked));
- LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Finished" };
- pbPreview.ImageLocation = Fetch.Location = fi.ToString();
- bwFetch.ReportProgress((idx + 1) * 100 / Fetch.Images.Count);
- }
- }
-
- bool Check(string order, DoWorkEventArgs e)
- {
- if (Fetch.Dropped) { Fetch.Dropped = false; LviUpdate = new[] { Fetch.Current.Name, order, null, "Dropped" }; return true; }
- if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; LviUpdate = new[] { Fetch.Current.Name, order, null, "Cancelled" }; return true; }
- if (Fetch.Skip)
- {
- Fetch.Skip = false;
- LviUpdate = new[] { Fetch.Current.Name, order, null, "Skipped" };
- return true;
- }
- return false;
- }
-
- private Site CheckUrl(string address)
- {
- string host;
- try
- {
- var Url = new Uri(address);
- host = Url.Host;
- }
- catch (System.UriFormatException format)
- {
- tsLabel.Text = format.Message;
- return null;
- }
- try
- {
- return sites.SingleOrDefault(_ => host.Replace("www.", "").Equals(_.ToString(), StringComparison.OrdinalIgnoreCase));
- }
- catch (Exception e)
- { MessageBox.Show(e.Message, "Duplicate site definition"); return null; }
- }
-
- ///
- /// Parse URL address and generate dataset collection to store download information
- ///
- /// The address value from txtParse TextBox control
- private string Parse(string url)
- {
- Prompt = string.Format("Analyzing: {0} ", Fetch.Site.Name);
- var uri = new Uri(url);
- try
- {
- var folder = url.Substring(0, url.LastIndexOf('/') + 1);
- switch (Fetch.Site.Type)
- {
- #region Parse Heels.cn site
- case "Heels":
- return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('=') + 1) + ".jpg", fnAddress: a => "http://www.heels.cn/web/" + a.Replace("_small", ""));
- #endregion
-
- #region Parse Duide.com site
- case "Duide":
- return Fetch.Parse(url, fnName:
- n => url.Substring(url.LastIndexOf('/') + 1).Split('.')[0].ToUpper() + "-" + n.Substring(n.LastIndexOf('/') + 1).Split('_')[0] + ".jpg",
- fnAddress:
- a =>
- {
- var href = a.Replace("thumbnails", "images");
- return url.Replace(url.Substring(url.LastIndexOf('/') + 1), href);
- });
- #endregion
-
- #region Parse Pal.Ath.Cx site
- case "PalAthCx":
- return Fetch.Parse(url, fnAddress:
- a =>
- {
- var id = a.Split('/')[1];
- id = (int.Parse(id.Substring(0, id.LastIndexOf('-'))) - 1).ToString() + "-2";
- return string.Format("http://{0}:{1}/", uri.Host, uri.Port) + id + a.Substring(a.LastIndexOf('/'));
- });
- #endregion
-
- #region Parse DeskCity.com site
- case "DeskCity":
- return Fetch.Parse(url, hnc =>
- {
- var page = hnc.SingleOrDefault();
- page = page != null && page.HasChildNodes ? page.LastChild : null;
- return page.Attributes["href"] != null ? page.Attributes["href"].Value : null;
- },
- fnAddress: a =>
- {
- var key = a.Split("/-".ToCharArray())[4];
- return "http://www.deskcity.com" + a.Replace(a.Substring(a.LastIndexOf(key)), key + ".jpg");
- });
- #endregion
-
- #region Parse Pics100.net site
- case "Pics100":
- return Fetch.Parse(url, hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? "http://www.pics100.net" + page.Attributes["href"].Value : null; });
- #endregion
-
- #region Parse WallCoo.[Net|Com] site
- case "WallCoo":
- return Fetch.Parse(url,
- fnAddress: a =>
- {
- var img = a.Split('/')[1];
- var key = img.Substring(0, img.LastIndexOf('s')) + ".jpg";
- return folder + string.Format("wallpapers/{0}/{1}", Fetch.Screen, key);
- },
- fnScreen: hn =>
- {
- var wxh = hn.InnerText.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
- return wxh[wxh.Length - 2].Replace('*', 'x').Trim();
- });
- #endregion
-
- #region Parse [Desk|Girl]City.cn sites
- case "GirlCity":
- return Fetch.Parse(url,
- hnc =>
- {
- var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null));
- return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value;
- },
- fnAddress: a =>
- {
- var key = a.Substring(a.LastIndexOf('/') + 1).Remove(0, 3);
- return a.Substring(0, a.LastIndexOf('/') + 1) + key;
- });
- #endregion
-
- #region Parse mm.voc.com.cn site
- case "Voc":
- return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('/') + 1).Split('-')[0] + ".jpg");
- #endregion
-
- #region Parse MeiTuShow.com, 909MM.com site
- case "MeiTuShow":
- case "MM909":
- return Fetch.Parse(url, hnc =>
- {
- var page = hnc.SingleOrDefault(n => n.NextSibling.Name == "br");
- return page == null ? null : folder + page.Attributes["href"].Value;
- });
- #endregion
-
- #region Parse China-Girl.info & Tuku.cn site
- case "Tuku":
- case "ChinaGirl":
- return Fetch.Parse(url, fnAddress: a => { var name = a.Substring(a.LastIndexOf('/') + 2); return a.Substring(0, a.LastIndexOf('/') + 1) + name; });
- #endregion
-
- #region Parse ZhuoKu.com site
- case "ZhuoKu":
- return Fetch.Parse(url, hnc =>
- {
- var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null));
- return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value;
- }, fnAddress: a => a.Replace("//img", "//bizhi").Replace("/thumbs/tn_", "/"));
- #endregion
-
- #region Parse BeautyLeg.cc site
- case "BeautyLeg":
- return Fetch.Parse(url, fnAddress: a => "http://www.beautyleg.cc" + a.Replace("/thumbs/", "/albums/").Split('?')[0]);
- #endregion
-
- #region Parse 25MeiNv.com site
- case "Meinv25":
- return Fetch.Parse(url,
- hnc =>
- {
- var page = hnc[hnc.Count - 2];
- return page.Attributes["href"].Value.StartsWith("javascript:") ? null : "http://www.25meinv.com" + page.Attributes["href"].Value;
- },
- n =>
- {
- var mark = url.LastIndexOf('_');
- var num = mark > 0 ? int.Parse(url.Substring(mark + 1)) : 0;
- return string.Format("{0}{1:000}.jpg", Fetch.Title, num);
- });
- #endregion
-
- #region Parse 52Desktop.cn site
- case "Desktop":
- return Fetch.Parse(url, hnc =>
- {
- var page = hnc.Last(); var href = page.Attributes["href"].Value.Replace("\r", "").Replace("\n", "").Replace("\t", "");
- var first = page.PreviousSibling.PreviousSibling.Attributes["href"].Value;
- return !href.Equals(first, StringComparison.OrdinalIgnoreCase) ? folder + href : null;
- });
- #endregion
-
- #region Parse Ivsky.com site
- case "Ivsky":
- return Fetch.Parse(url, fnAddress: a => a.Replace("/m/", "/img/"));
- #endregion
-
- #region Parse Winddesktop.com qfdesk.cn site
- case "QFZM":
- return Fetch.Parse(url, fnAddress: a => folder + a.Replace("/160/", "/original/").Remove(0, 1));
- #endregion
-
- #region Parse KKdesk.com site
- case "KKDesk":
- return Fetch.Parse(url, fnAddress: a => a.Split('=')[1]);
- #endregion
-
- #region Parse Ydesk.com site
- case "YDesk":
- return Fetch.Parse(url,
- fnNextPage: hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? page.Attributes["href"].Value : null; },
- fnAddress: a => a.Replace("/thumb/", "/" + Fetch.Screen + "/"),
- fnScreen: hn =>
- {
- var list = hn.InnerText.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
- return list[list.Length - 1].Trim();
- });
- #endregion
-
- #region Parse Leafweb.cn, Pic86.cn site
- case "LeafWeb":
- return Fetch.Parse(url, fnAddress: a => a.Replace("_show.jpg", ".jpg"));
- #endregion
-
- #region Parse Kpbz.net, KuDesk.com site
- case "Kpbz":
- return Fetch.Parse(url, fnAddress: a => "http://www.kpbz.net" + a.Replace("-lp.jpg", ".jpg"));
- #endregion
-
- #region Parse KuDesk.com site
- case "KuDesk":
- return Fetch.Parse(url, fnAddress: a => a.Replace("-lp.jpg", ".jpg"));
- #endregion
-
- #region Parse 51bizhi.com site
- case "Bizhi":
- return Fetch.Parse(url, fnAddress: a => "http://www.51bizhi.com" + a.Replace("/S/", "/B/"),
- fnNextPage: hnc => { var page = hnc[hnc.Count - 2]; return page.InnerText == "��һҳ" ? "http://www.51bizhi.com" + page.Attributes["href"].Value : null; });
- #endregion
-
- #region Parse Seedesk.cn site
- case "SeeDesk":
- return Fetch.Parse(url, fnAddress: a => "http://www.seedesk.cn" + a.Replace("_s.jpg", ".jpg"));
- #endregion
-
- #region H2004.com site
- case "H2004":
- return Fetch.Parse(url,
- hnc =>
- {
- var page = hnc[hnc.Count - 2];
- return page.Name == "font" ? null : page.Attributes["tppabs"].Value;
- }, fnAddress: _ => "http://www.h2004.com" + _.Remove(0, 5));
- #endregion
-
- #region Faloo.com site
- case "Faloo":
- return Fetch.Parse(url, fnAddress: _ => _.Replace("120x120", "0x0"));
- #endregion
-
- #region 6611.us site
- case "6611":
- return Fetch.Parse(url, fnAddress: _ => _.Replace("/thumb/", "/"));
- #endregion
-
- #region piclove.com site
- case "PicLove":
- return Fetch.Parse(url, fnAddress: a => "http://www.piclove.com" + a.Replace("-lp.jpg", ".jpg"));
- #endregion
-
- #region KissQi.com site
- case "KissQi":
- return Fetch.Parse(url, hnc =>
- {
- var page = hnc.Last(); var href = page.Attributes["href"].Value.Split("()".ToCharArray())[1];
- var segs = href.Split(','); var next = segs[segs.Length - 1].Trim('\'').Replace("[page]", segs[segs.Length - 2]);
- return next.CompareWithLength(url) ? next : null;
- },
- fnAddress: _ => "http://www.kissqi.com" + _.TrimStart('.'));
- #endregion
-
- #region 1meng.com site
- case "Meng":
- return Fetch.Parse(url, fnName: _ => _.Substring(_.LastIndexOf('=') + 1) + ".jpg");
- #endregion
-
- #region 24Meinv.com site
- case "Meinv":
- return Fetch.Parse(url, fnAddress: _ =>
- {
- var mark = _.LastIndexOf('/'); var path = _.Substring(0, mark + 1);
- var name = _.Substring(mark + 1); name = name.Remove(0, 1); path = path.Replace("//pic.", "//img.");
- return path + name;
- });
- #endregion
-
- #region Leg99.cn site
- case "Leg99":
- return Fetch.Parse(url, fnNextPage: hnc =>
- {
- var cur = hnc.Last(_ => _.Attributes["selected"] != null);
- var curidx = hnc.IndexOf(cur);
- return curidx == hnc.Count - 1 ? null : folder + hnc[curidx + 1].Attributes["value"].Value;
- });
- #endregion
-
- #region 8264.com site
- case "8264":
- return Fetch.Parse(url, fnAddress: _ => _.Replace(".thumb.jpg", ""));
- #endregion
-
- #region Luscious site
- case "Luscious":
- return Fetch.Parse(url, fnAddress: _ => _.Replace("thumb_100_", "").Replace("static3.", "static.").Replace("static2.", "static."));
- #endregion
-
- #region LegPic.net site
- case "LegPic":
- return Fetch.Parse(url, fnAddress: _ => "http://www.legpic.net/" + _.TrimStart("../".ToCharArray()).Replace("/thumbnail/TN-", "/"),
- fnNextPage: _ =>
- {
- var next = _.LastOrDefault();
- if (next == null) return null;
- return "http://www.legpic.net/" + next.Attributes["href"].Value.TrimStart("../".ToCharArray());
- });
- #endregion
-
- #region BeautyLeg.com site
- case "BLeg":
- return Fetch.Parse(url, fnAddress: _ => _.StartsWith("http://photo.beautyleg.com/album")?_ :null
- );
- #endregion
-
- #region Parse other sites
- default:
- return Fetch.Parse(url);
- #endregion
- }
- }
- catch (Exception)
- {
- return (Fetch.Title == null ? "Download" : "Analyze") + " Failed!";
- }
- }
-
- private void DownloadFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- Fetch.Reset();
- btnGo.Tag = RipperAction.Download;
- tsPB.Visible = false;
- lbBatch.Text = null;
- System.Media.SystemSounds.Exclamation.Play();
- if (e.Cancelled || e.Error != null)
- {
- tsLabel.Text = e.Error != null ? e.Error.Message : "Task cancelled.";
- Stop();
- }
- else
- {
- tsLabel.Text = e.Result != null ? e.Result as string : "Task finished.";
- if (Fetch.Next != null)
- {
- Address = Fetch.Next;
- Go();
- }
- else if (Batch)
- {
- From++;
- AdjustURL(1);
- Batch = From != To;
- Go();
- }
- else
- {
- Stop();
- }
- }
- }
-
- private void Stop()
- {
- btnGo.Image = Resources.Download;
- btnGo.Enabled = true;
- cmmiBatch.Enabled = false;
- tbParse.ReadOnly = false;
- tbDir.ReadOnly = false;
- }
-
- private void Go()
- {
- btnGo.Image = Resources.Cancel;
- btnGo.Tag = RipperAction.Cancel;
- bwFetch.RunWorkerAsync();
- }
-
- private void DownloadFiles_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- tsPB.Value = e.ProgressPercentage;
- tsLabel.Text = e.ProgressPercentage + "%";
- }
-
- private void pbDoubleClick(object sender, EventArgs e)
- {
- if (Fetch.Location != null && File.Exists(Fetch.Location))
- Process.Start(Fetch.Location);
- }
-
- private void btnPlus_Click(object sender, EventArgs e)
- {
- AdjustURL(1);
- }
-
- private void btnMinus_Click(object sender, EventArgs e)
- {
- AdjustURL(-1);
- }
-
- ///
- /// Adjust URL querystring value by increment/decrement number variable
- ///
- /// The PlusMinus enum value indicate the action type.
- private void AdjustURL(int step)
- {
- string number, url = Address;
- try
- {
- switch (Fetch.Site.Type)
- {
- default:
- var mark = url.LastIndexOf('=');
- if (mark > 0)
- number = url.Substring(mark + 1);
- else
- {
- mark = url.LastIndexOf('.');
- var start = url.LastIndexOf('/') + 1;
- number = mark > 0 ? url.Substring(start, mark - start) : url.Substring(start);
- }
- ChangeUrl:
- var value = int.Parse(number);
- value += step; if (value < 0) return;
- var m = url.LastIndexOf(number);
- Address = url.Substring(0, m) + value.ToString(new string('0', number.Length)) + url.Substring(m + number.Length);
- break;
- case "Duide":
- number = url.Substring(url.LastIndexOf('/') + 2).Replace(".htm", "");
- goto ChangeUrl;
- case "PalAthCx":
- var seg = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
- number = seg[seg.Length - 1];
- goto ChangeUrl;
- }
- }
- catch (Exception)
- {
- return;
- }
- }
-
- ///
- /// Clear the listbox items, and reset dataset to initial state.
- ///
- ///
- ///
- private void btnClear_Click(object sender, EventArgs e)
- {
- if (lvRip.Items.Count > 0)
- {
- lvRip.Items.Clear();
- lvRip.Groups.Clear();
- }
- }
-
- private void btnBatch_Click(object sender, EventArgs e)
- {
- Fetch.Site = CheckUrl(Address);
- try
- {
- switch (Fetch.Site.Type)
- {
- default:
- string text = Address.Split('=')[1];
- OpenBatchDialog:
- int pageid;
- if (int.TryParse(text, out pageid))
- new Batch(pageid).ShowDialog(this);
- break;
- case "Duide":
- text = Address.Substring(Address.LastIndexOfAny("abc".ToCharArray()) + 1).Split('.')[0];
- goto OpenBatchDialog;
- case "PalAthCx":
- var seg = Address.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
- text = seg[seg.Length - 1];
- goto OpenBatchDialog;
- }
- }
- catch (Exception)
- { return; }
- }
-
- private void cmmiNextPage_Click(object sender, EventArgs e)
- {
- if (Batch)
- Fetch.Skip = true;
- }
-
- private void cmmiDelete_Click(object sender, EventArgs e)
- {
- if (File.Exists(Fetch.Location))
- {
- File.Delete(Fetch.Location);
- var lvi = lvRip.FindItemWithText(Path.GetFileName(Fetch.Location));
- Fetch.Location = null;
- if (lvi != null)
- {
- lvi.SubItems[3].Text = "Deleted";
- lvi.Font = new Font(lvi.Font, FontStyle.Strikeout);
- }
- }
- }
-
- private void cmmiDrop_Click(object sender, EventArgs e)
- {
- if (Fetch.Images != null && Fetch.Images.Count > 0)
- {
- foreach (string name in Fetch.Images.Keys)
- {
- if (Fetch.Current != null && Fetch.Current.Name == name) { Fetch.Dropped = true; Fetch.Cancel(); continue; }
- string path = Path.Combine(Dir, name);
- if (File.Exists(path))
- {
- var lvi = lvRip.FindItemWithText(name);
- if (lvi != null)
- {
- if (lvi.SubItems[3].Text == "Downloading") continue;
- lvi.SubItems[3].Text = "Deleted";
- lvi.Font = new Font(lvi.Font, FontStyle.Strikeout);
- File.Delete(path);
- }
- }
- }
- Fetch.Skip = true;
- }
- }
-
- private void lvSelectedIndexChanged(object sender, EventArgs e)
- {
- if (lvRip.FocusedItem != null)
- {
- string file = Path.Combine(Dir, lvRip.FocusedItem.Text);
- if (File.Exists(file))
- {
- if (mainSplit.Panel2Collapsed) mainSplit.Panel2Collapsed = false;
- Fetch.Location = pbPreview.ImageLocation = file;
- }
- else
- Fetch.Location = null;
- }
- }
-
- private void cmmiDeleteFile(object sender, EventArgs e)
- {
- if (lvRip.SelectedItems.Count > 0)
- {
- foreach (ListViewItem lvi in lvRip.SelectedItems)
- {
- string path = Path.Combine(Dir, lvi.Text);
- if (File.Exists(path))
- {
- if (lvi.SubItems[3].Text == "Downloading") continue;
- File.Delete(path);
- lvi.SubItems[3].Text = "Deleted";
- lvi.Font = new Font(lvi.Font, FontStyle.Strikeout);
- }
- }
- }
- }
-
- private void cmmiDownloadFile(object sender, EventArgs e)
- {
- var args = new List>();
- foreach (ListViewItem lvi in lvRip.SelectedItems)
- {
- if (!File.Exists(Path.Combine(Dir, lvi.Text)))
- {
- args.Add(Tuple.Create(lvi.ToolTipText/*Url*/, lvi.Text/*Name*/));
- lvi.SubItems[3].Text = "Downloading";
- lvi.Font = new Font(lvi.Font, FontStyle.Regular);
- }
- }
- if (args.Count > 0)
- new Thread(DownloadFile).Start(args);
- }
-
- void DownloadFile(object args)
- {
- var dfi = args as List>;
- foreach (var item in dfi)
- {
- try
- {
- string path = Path.Combine(Dir, item.Item2);
- if (Fetch.Site.Type == "Heels")
- {
- using (Stream s = Fetch.GetStream(item.Item1, Settings.Default.Cookie))
- {
- using (Image bmp = Image.FromStream(s))
- {
- s.Close(); bmp.Save(path);
- bmp.Dispose();
- }
- }
- }
- else
- Fetch.GetFile(item.Item1, path);
- LviUpdate = new[] { item.Item2, null, new FileInfo(path).Length / 1024 + " KB", "Finished" };
- }
- catch (Exception)
- {
- LviUpdate = new[] { item.Item2, null, null, "Failed" };
- }
- }
- }
-
- private void lvKeyDown(object sender, KeyEventArgs e)
- {
- switch (e.KeyCode)
- {
- case Keys.Delete:
- if (e.Shift)
- cmmiDrop_Click(sender, e);
- else
- cmmiDeleteFile(sender, e);
- break;
- case Keys.C:
- if (e.Control && lvRip.FocusedItem != null)
- Clipboard.SetText(lvRip.FocusedItem.ToolTipText);
- break;
- }
- }
-
- private void Ripper_KeyDown(object sender, KeyEventArgs e)
- {
- switch (e.KeyCode)
- {
- case Keys.Space:
- if (tbParse.Focused || tbDir.Focused) break;
- if (e.Shift) { mainSplit.Panel2Collapsed = !mainSplit.Panel2Collapsed; cmmiPreview.Checked = !mainSplit.Panel2Collapsed; break; }
- mainSplit.Panel1Collapsed = !mainSplit.Panel1Collapsed;
- cmmiPreview.Checked = !mainSplit.Panel1Collapsed;
- break;
- case Keys.Escape:
- if (FormBorderStyle == FormBorderStyle.None)
- {
- FullScreen = false;
- FormBorderStyle = FormBorderStyle.Sizable;
- Bounds = (Rectangle)this.Tag;
- mainSplit.Panel1Collapsed = false;
- if ((Fetch.Location == null) && pbPreview.Image == null)
- mainSplit.Panel2Collapsed = true;
- }
- break;
- case Keys.F11:
- if (FullScreen)
- {
- FullScreen = false;
- FormBorderStyle = FormBorderStyle.Sizable;
- Bounds = (Rectangle)this.Tag;
- if ((Fetch.Location == null) && pbPreview.Image == null)
- mainSplit.Panel2Collapsed = true;
- }
- else
- {
- this.Tag = Bounds;
- mainSplit.Panel1Collapsed = true;
- mainSplit.Panel2Collapsed = false;
- FormBorderStyle = FormBorderStyle.None;
- Bounds = Screen.PrimaryScreen.Bounds;
- FullScreen = true;
- }
- break;
- }
- }
-
- bool CanDownload
- {
- get
- {
- if ((Fetch.Site = CheckUrl(Address)) == null) { tsLabel.Text = "Not support!"; return false; }
-#if !TRACE
- if (!Directory.Exists(Dir))
- {
- if (DialogResult.Yes == MessageBox.Show("Do you want to create new folder to store files?", "Directory doesn't exist!", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
- {
- try { Directory.CreateDirectory(Dir); return true; }
- catch (Exception exp) { MessageBox.Show(exp.Message, "Create Directory failed!", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
- }
- else
- return false;
- }
-#endif
- return true;
- }
- }
-
- private void cmmiCopyName_Click(object sender, EventArgs e)
- {
- if (lvRip.FocusedItem != null)
- Clipboard.SetText(lvRip.FocusedItem.Text);
- }
-
- private void llFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- if ((fbDir.ShowDialog()) == DialogResult.OK)
- Dir = fbDir.SelectedPath;
- }
-
- private void llCookie_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- new SetCookie().ShowDialog(this);
- }
-
- private void tbParse_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.Text))
- {
- e.Effect = DragDropEffects.Copy;
- }
- }
-
- private void tbParse_DragDrop(object sender, DragEventArgs e)
- {
- TextBox tb = sender as TextBox;
- tb.Text = (string)e.Data.GetData(DataFormats.Text);
- }
-
- private void cmsLV_Opening(object sender, CancelEventArgs e)
- {
- cmmiNextPage.Visible = cmmiBatch.Visible = Batch;
- cmmiSave.Visible = cmmiRemove.Visible = cmmiCopyName.Visible = lvRip.SelectedItems.Count > 0;
- cmmiDropGroup.Visible = cmmiClear.Visible = lvRip.Items.Count > 0;
- }
-
- private void CloudToolStrip_Click(object sender, EventArgs e)
- {
- tsCloud.ShowDropDown();
- }
-
- private void CloudItem_Click(object sender, EventArgs e)
- {
- ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
- switch (tsmi.Text)
- {
- case "GDrive": WebCloud.Service = WebCloud.CloudType.GDrive; break;
- case "Flickr": WebCloud.Service = WebCloud.CloudType.Flickr; break;
- case "Facebook": WebCloud.Service = WebCloud.CloudType.Facebook; break;
- case "Picasa": WebCloud.Service = WebCloud.CloudType.Picasa; break;
- }
- new WebCloud() { Text = tsmi.Text }.Show();
- }
-
- private void tsHome_Click(object sender, EventArgs e)
- {
- Process.Start("http://imgrip.codeplex.com");
- }
-
- private void llSites_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- new Sites().Show(this);
- }
-
- private void tb_MouseClick(object sender, MouseEventArgs e)
- {
- var ctl = sender as TextBox;
- if (string.IsNullOrEmpty(ctl.Tag as string)) { if (ctl.SelectionLength == 0) ctl.SelectAll(); ctl.Tag = ctl.SelectedText; }
- }
-
- private void tb_Leave(object sender, EventArgs e)
- {
- var ctl = sender as TextBox;
- ctl.Tag = null;
- }
-
- private void cmmiBatch_CheckedChanged(object sender, EventArgs e)
- {
- Batch = cmmiBatch.Checked;
- }
- }
-
- ///
- /// Represent the download button action type.
- ///
- enum RipperAction { Download, Cancel };
+//#define CheckSites
+namespace ImgRip
+{
+ using ImgRip.Properties;
+ using System;
+ using System.Collections.Generic;
+ using System.ComponentModel;
+ using System.Diagnostics;
+ using System.Drawing;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Threading;
+ using System.Windows.Forms;
+ using System.Xml.Linq;
+
+ partial class Main : Form
+ {
+ bool FullScreen { get; set; }
+ internal Site[] sites;
+ internal long Range { get; set; }
+ internal bool Batch { get { return To - From > 0; } set { cmmiBatch.Checked = cmmiBatch.Enabled = cmmiNextPage.Enabled = value; } }
+
+ public Main()
+ {
+ InitializeComponent();
+ btnGo.Tag = RipperAction.Download;
+ tsHome.Alignment = ToolStripItemAlignment.Right;
+ btnGo.UpArrowMouseUp += (s, e) => tmPlus.Enabled = false;
+ btnGo.DownArrowMouseUp += (s, e) => tmMinus.Enabled = false;
+ btnGo.UpArrowMouseDown += (s, e) =>
+ {
+ if (tmMinus.Enabled) tmMinus.Enabled = false;
+ if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return;
+ tmPlus.Enabled = true;
+ };
+ btnGo.DownArrowMouseDown += (s, e) =>
+ {
+ if (tmPlus.Enabled) tmPlus.Enabled = false;
+ if ((Fetch.Site = CheckUrl(Address)) == null || (RipperAction)btnGo.Tag == RipperAction.Cancel) return;
+ tmMinus.Enabled = true;
+ };
+ sites = ReadXML();
+ //CheckSites(); WriteXML();
+ }
+
+ Site[] ReadXML()
+ {
+ var xe = XElement.Parse(Resources.SiteList);
+ var sites = from s in xe.Descendants("Site")
+ select new Site(s.Attribute("Name").Value, s.Attribute("Domain").Value, s.Attribute("Image").Value)
+ {
+ Type = s.Attribute("Type") == null ? "Default" : s.Attribute("Type").Value,
+ Next = s.Attribute("Next") == null ? "" : s.Attribute("Next").Value,
+ Screen = s.Attribute("Screen") == null ? "" : s.Attribute("Screen").Value
+ };
+ return sites.OrderBy(_ => _.Name).ToArray();
+ }
+
+ Site[] CheckSites()
+ {
+ var website = sites.ToList();
+ foreach (var site in sites)
+ {
+ HttpWebRequest request = WebRequest.Create(string.Format("http://{0}", site.Domain)) as HttpWebRequest;
+ request.Method = "HEAD";
+ HttpWebResponse response = null;
+ try
+ {
+ response = request.GetResponse() as HttpWebResponse;
+ response.Close();
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Trace.WriteLine(ex.Message);
+ website.Remove(site);
+ }
+ }
+ return website.ToArray();
+ }
+
+ void WriteXML()
+ {
+ var doc = new XDocument();
+ doc.Add(new XElement("ImageRipper", new XElement("List")));
+ foreach (var item in sites)
+ {
+ var el = new XElement("Site",
+ new XAttribute("Name", item.Name),
+ new XAttribute("Domain", item.ToString()),
+ new XAttribute("Image", item.Image),
+ string.IsNullOrEmpty(item.Next) ? null : new XAttribute("Next", item.Next),
+ string.IsNullOrEmpty(item.Screen) ? null : new XAttribute("Screen", item.Screen));
+ if (item.Type != "Default")
+ el.Add(new XAttribute("Type", item.Type));
+ doc.Descendants("List").First().Add(el);
+ }
+ doc.Save(@".\..\..\Sites.xml");
+ }
+
+ ///
+ /// UI Callback properties
+ ///
+ bool ShowProgressBar { set { Invoke(new Action(() => tsPB.Visible = value)); } }
+ string Prompt { set { Invoke(new Action(() => tsLabel.Text = value)); } }
+ int ProgressPercentage { set { Invoke(new Action(() => tsPB.Value = value)); } }
+ string[] LviUpdate
+ {
+ set
+ {
+ Invoke(new Action(() =>
+ {
+ //No. 1, Name 0, Size 2, State 3
+ string name = value[0], number = value[1], size = value[2], state = value[3];
+ var lvi = lvRip.FindItemWithText(name);
+ #region Update existed item
+ if (lvi != null)
+ {
+ if (!string.IsNullOrEmpty(number)) lvi.SubItems[1].Text = number;
+ if (!string.IsNullOrEmpty(size)) lvi.SubItems[2].Text = size;
+ if (!string.IsNullOrEmpty(state)) lvi.SubItems[3].Text = state;
+ if (lvi.Font.Style != FontStyle.Regular)
+ lvi.Font = new Font(lvi.Font, FontStyle.Regular);
+ }
+ #endregion
+
+ #region Add new item to group
+ else
+ {
+ lvi = new ListViewItem(value);
+ lvi.ToolTipText = Fetch.Address;
+ if (lvRip.Groups[Fetch.Title] == null) lvRip.Groups.Add(Fetch.Title, string.Format("{0} [{1}P]", Fetch.Title, Fetch.Images.Count));
+ lvi.Group = lvRip.Groups[Fetch.Title];
+ lvRip.Items.Add(lvi).EnsureVisible();
+ lvi.ForeColor = lvi.Index % 2 == 0 ? Color.ForestGreen : Color.RoyalBlue;
+ }
+ #endregion
+ }));
+ }
+ }
+
+ internal long From { get; set; }
+ internal long To { get; set; }
+
+ internal string Dir
+ {
+ get { return tbDir.Text; }
+ set { tbDir.Text = value; }
+ }
+
+ public string Address
+ {
+ get { return tbParse.Text; }
+ set { tbParse.Text = value; }
+ }
+
+ private void Go_Click(object sender, EventArgs e)
+ {
+ switch (((RipperAction)btnGo.Tag))
+ {
+ case RipperAction.Download:
+ if (!CanDownload) return;
+ tbParse.ReadOnly = true;
+ tbDir.ReadOnly = true;
+ Settings.Default.Save();
+ Go();
+ break;
+ case RipperAction.Cancel:
+ Batch = false;
+ Fetch.Canceled = true; Fetch.Cancel();
+ bwFetch.CancelAsync();
+ ((Button)sender).Enabled = false;
+ break;
+ }
+ }
+
+ private void ResetStatus()
+ {
+ Prompt = string.Empty;
+ ShowProgressBar = true;
+ ProgressPercentage = 0;
+ }
+
+ private void Fetch_DoWork(object sender, DoWorkEventArgs e)
+ {
+ if ((e.Result = Parse(Address.Trim())) != null) { Fetch.Next = null; return; }
+ if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; return; }
+#if ! TRACE
+ FetchFile(e);
+#endif
+ }
+
+ private void FetchFile(DoWorkEventArgs e)
+ {
+ ResetStatus();
+ if (Fetch.Images.Count == 0) e.Result = "Not a photo gallery!";
+ for (int idx = 0; idx < Fetch.Images.Count; idx++)
+ {
+ var kvp = Fetch.Images.ElementAt(idx);
+ Fetch.Address = kvp.Value;
+ var fi = new FileInfo(Path.Combine(Dir, kvp.Key));
+ Fetch.Current = fi;
+ //number #1, name #0, size #2, state #3
+ var Order = (idx + 1).ToString();
+ if (fi.Exists)
+ {
+ LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Existed" };
+ continue;
+ }
+ LviUpdate = new[] { fi.Name, Order, null, "Downloading" };
+ var percentage = idx * 100 / Fetch.Images.Count;
+ bwFetch.ReportProgress(percentage);
+ if (Batch) Invoke(new Action(() => lbBatch.Text = string.Format(" #{0}/{1} Pages", (Range - (To - From)), Range)));
+
+ #region Download files
+ switch (Fetch.Site.Type)
+ {
+ default:
+ try
+ {
+ Fetch.GetFile(Fetch.Address, fi.ToString());
+ }
+ catch (Exception exp)
+ {
+ LviUpdate = new[] { fi.Name, Order, null, exp.Message };
+ if (fi.Exists) fi.Delete();
+ }
+ break;
+ case "Heels":
+ bool succeed = false;
+ if (string.IsNullOrEmpty(Settings.Default.Cookie))
+ {
+ Invoke(new Action(() =>
+ {
+ new SetCookie().ShowDialog(this);
+ }));
+ }
+ while (!succeed)
+ {
+ using (var s = Fetch.GetStream(Fetch.Address, Settings.Default.Cookie))
+ using (var bmp = Image.FromStream(s))
+ {
+ try
+ {
+ bmp.Save(fi.ToString());
+ s.Close();
+ }
+ catch (Exception)
+ {
+ s.Close(); s.Dispose(); bmp.Dispose();
+ if (Check(Order, e)) return;
+ LviUpdate = new[] { fi.Name, Order, null, "Invalid Cookie / Wait 5 secs" };
+ Thread.Sleep(5000);
+ }
+ succeed = true;
+ }
+ }
+ break;
+ case "Heel":
+ using (var s = Fetch.GetStream(Fetch.Address))
+ using (var bmp = Image.FromStream(s))
+ {
+ try
+ {
+ bmp.Save(fi.ToString());
+ s.Close();
+ }
+ catch (Exception exp)
+ {
+ s.Close(); s.Dispose(); bmp.Dispose();
+ if (Check(Order, e)) return;
+ LviUpdate = new[] { fi.Name, Order, null, exp.Message };
+ }
+ }
+ break;
+ }
+ #endregion
+
+ if (Check(Order, e)) return;
+ fi.Refresh();
+ if (!fi.Exists) { LviUpdate = new[] { fi.Name, Order, null, "Download Failed!" }; continue; }
+ if (mainSplit.Panel2Collapsed) Invoke(new Action(() => mainSplit.Panel2Collapsed = !cmmiPreview.Checked));
+ LviUpdate = new[] { fi.Name, Order, fi.Length / 1024 + " KB", "Finished" };
+ pbPreview.ImageLocation = Fetch.Location = fi.ToString();
+ bwFetch.ReportProgress((idx + 1) * 100 / Fetch.Images.Count);
+ }
+ }
+
+ bool Check(string order, DoWorkEventArgs e)
+ {
+ if (Fetch.Dropped) { Fetch.Dropped = false; LviUpdate = new[] { Fetch.Current.Name, order, null, "Dropped" }; return true; }
+ if (Fetch.Canceled) { e.Cancel = true; Fetch.Next = null; LviUpdate = new[] { Fetch.Current.Name, order, null, "Cancelled" }; return true; }
+ if (Fetch.Skip)
+ {
+ Fetch.Skip = false;
+ LviUpdate = new[] { Fetch.Current.Name, order, null, "Skipped" };
+ return true;
+ }
+ return false;
+ }
+
+ private Site CheckUrl(string address)
+ {
+ string host;
+ try
+ {
+ var Url = new Uri(address);
+ host = Url.Host;
+ }
+ catch (System.UriFormatException format)
+ {
+ tsLabel.Text = format.Message;
+ return null;
+ }
+ try
+ {
+ return sites.SingleOrDefault(_ => host.Replace("www.", "").Equals(_.ToString(), StringComparison.OrdinalIgnoreCase));
+ }
+ catch (Exception e)
+ { MessageBox.Show(e.Message, "Duplicate site definition"); return null; }
+ }
+
+ ///
+ /// Parse URL address and generate dataset collection to store download information
+ ///
+ /// The address value from txtParse TextBox control
+ private string Parse(string url)
+ {
+ Prompt = string.Format("Analyzing: {0} ", Fetch.Site.Name);
+ var uri = new Uri(url);
+ try
+ {
+ var folder = url.Substring(0, url.LastIndexOf('/') + 1);
+ switch (Fetch.Site.Type)
+ {
+ #region Parse Heels.cn site
+ case "Heels":
+ return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('=') + 1) + ".jpg", fnAddress: a => "http://www.heels.cn/web/" + a.Replace("_small", ""));
+ #endregion
+
+ #region Parse Duide.com site
+ case "Duide":
+ return Fetch.Parse(url, fnName:
+ n => url.Substring(url.LastIndexOf('/') + 1).Split('.')[0].ToUpper() + "-" + n.Substring(n.LastIndexOf('/') + 1).Split('_')[0] + ".jpg",
+ fnAddress:
+ a =>
+ {
+ var href = a.Replace("thumbnails", "images");
+ return url.Replace(url.Substring(url.LastIndexOf('/') + 1), href);
+ });
+ #endregion
+
+ #region Parse Pal.Ath.Cx site
+ case "PalAthCx":
+ return Fetch.Parse(url, fnAddress:
+ a =>
+ {
+ var id = a.Split('/')[1];
+ id = (int.Parse(id.Substring(0, id.LastIndexOf('-'))) - 1).ToString() + "-2";
+ return string.Format("http://{0}:{1}/", uri.Host, uri.Port) + id + a.Substring(a.LastIndexOf('/'));
+ });
+ #endregion
+
+ #region Parse DeskCity.com site
+ case "DeskCity":
+ return Fetch.Parse(url, hnc =>
+ {
+ var page = hnc.SingleOrDefault();
+ page = page != null && page.HasChildNodes ? page.LastChild : null;
+ return page.Attributes["href"] != null ? page.Attributes["href"].Value : null;
+ },
+ fnAddress: a =>
+ {
+ var key = a.Split("/-".ToCharArray())[4];
+ return "http://www.deskcity.com" + a.Replace(a.Substring(a.LastIndexOf(key)), key + ".jpg");
+ });
+ #endregion
+
+ #region Parse Pics100.net site
+ case "Pics100":
+ return Fetch.Parse(url, hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? "http://www.pics100.net" + page.Attributes["href"].Value : null; });
+ #endregion
+
+ #region Parse WallCoo.[Net|Com] site
+ case "WallCoo":
+ return Fetch.Parse(url,
+ fnAddress: a =>
+ {
+ var img = a.Split('/')[1];
+ var key = img.Substring(0, img.LastIndexOf('s')) + ".jpg";
+ return folder + string.Format("wallpapers/{0}/{1}", Fetch.Screen, key);
+ },
+ fnScreen: hn =>
+ {
+ var wxh = hn.InnerText.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+ return wxh[wxh.Length - 2].Replace('*', 'x').Trim();
+ });
+ #endregion
+
+ #region Parse [Desk|Girl]City.cn sites
+ case "GirlCity":
+ return Fetch.Parse(url,
+ hnc =>
+ {
+ var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null));
+ return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value;
+ },
+ fnAddress: a =>
+ {
+ var key = a.Substring(a.LastIndexOf('/') + 1).Remove(0, 3);
+ return a.Substring(0, a.LastIndexOf('/') + 1) + key;
+ });
+ #endregion
+
+ #region Parse mm.voc.com.cn site
+ case "Voc":
+ return Fetch.Parse(url, fnName: n => n.Substring(n.LastIndexOf('/') + 1).Split('-')[0] + ".jpg");
+ #endregion
+
+ #region Parse MeiTuShow.com, 909MM.com site
+ case "MeiTuShow":
+ case "MM909":
+ return Fetch.Parse(url, hnc =>
+ {
+ var page = hnc.SingleOrDefault(n => n.NextSibling.Name == "br");
+ return page == null ? null : folder + page.Attributes["href"].Value;
+ });
+ #endregion
+
+ #region Parse China-Girl.info & Tuku.cn site
+ case "Tuku":
+ case "ChinaGirl":
+ return Fetch.Parse(url, fnAddress: a => { var name = a.Substring(a.LastIndexOf('/') + 2); return a.Substring(0, a.LastIndexOf('/') + 1) + name; });
+ #endregion
+
+ #region Parse ZhuoKu.com site
+ case "ZhuoKu":
+ return Fetch.Parse(url, hnc =>
+ {
+ var index = hnc.IndexOf(hnc.Last(o => o.Attributes["selected"] != null));
+ return (index + 1 == hnc.Count) ? null : folder + hnc[index + 1].Attributes["value"].Value;
+ }, fnAddress: a => a.Replace("//img", "//bizhi").Replace("/thumbs/tn_", "/"));
+ #endregion
+
+ #region Parse BeautyLeg.cc site
+ case "BeautyLeg":
+ return Fetch.Parse(url, fnAddress: a => "http://www.beautyleg.cc" + a.Replace("/thumbs/", "/albums/").Split('?')[0]);
+ #endregion
+
+ #region Parse 25MeiNv.com site
+ case "Meinv25":
+ return Fetch.Parse(url,
+ hnc =>
+ {
+ var page = hnc[hnc.Count - 2];
+ return page.Attributes["href"].Value.StartsWith("javascript:") ? null : "http://www.25meinv.com" + page.Attributes["href"].Value;
+ },
+ n =>
+ {
+ var mark = url.LastIndexOf('_');
+ var num = mark > 0 ? int.Parse(url.Substring(mark + 1)) : 0;
+ return string.Format("{0}{1:000}.jpg", Fetch.Title, num);
+ });
+ #endregion
+
+ #region Parse 52Desktop.cn site
+ case "Desktop":
+ return Fetch.Parse(url, hnc =>
+ {
+ var page = hnc.Last(); var href = page.Attributes["href"].Value.Replace("\r", "").Replace("\n", "").Replace("\t", "");
+ var first = page.PreviousSibling.PreviousSibling.Attributes["href"].Value;
+ return !href.Equals(first, StringComparison.OrdinalIgnoreCase) ? folder + href : null;
+ });
+ #endregion
+
+ #region Parse Ivsky.com site
+ case "Ivsky":
+ return Fetch.Parse(url, fnAddress: a => a.Replace("/m/", "/img/"));
+ #endregion
+
+ #region Parse Winddesktop.com qfdesk.cn site
+ case "QFZM":
+ return Fetch.Parse(url, fnAddress: a => folder + a.Replace("/160/", "/original/").Remove(0, 1));
+ #endregion
+
+ #region Parse KKdesk.com site
+ case "KKDesk":
+ return Fetch.Parse(url, fnAddress: a => a.Split('=')[1]);
+ #endregion
+
+ #region Parse Ydesk.com site
+ case "YDesk":
+ return Fetch.Parse(url,
+ fnNextPage: hnc => { var page = hnc.SingleOrDefault(n => n.InnerText == "下一页"); return page != null ? page.Attributes["href"].Value : null; },
+ fnAddress: a => a.Replace("/thumb/", "/" + Fetch.Screen + "/"),
+ fnScreen: hn =>
+ {
+ var list = hn.InnerText.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+ return list[list.Length - 1].Trim();
+ });
+ #endregion
+
+ #region Parse Leafweb.cn, Pic86.cn site
+ case "LeafWeb":
+ return Fetch.Parse(url, fnAddress: a => a.Replace("_show.jpg", ".jpg"));
+ #endregion
+
+ #region Parse Kpbz.net, KuDesk.com site
+ case "Kpbz":
+ return Fetch.Parse(url, fnAddress: a => "http://www.kpbz.net" + a.Replace("-lp.jpg", ".jpg"));
+ #endregion
+
+ #region Parse KuDesk.com site
+ case "KuDesk":
+ return Fetch.Parse(url, fnAddress: a => a.Replace("-lp.jpg", ".jpg"));
+ #endregion
+
+ #region Parse 51bizhi.com site
+ case "Bizhi":
+ return Fetch.Parse(url, fnAddress: a => "http://www.51bizhi.com" + a.Replace("/S/", "/B/"),
+ fnNextPage: hnc => { var page = hnc[hnc.Count - 2]; return page.InnerText == "��һҳ" ? "http://www.51bizhi.com" + page.Attributes["href"].Value : null; });
+ #endregion
+
+ #region Parse Seedesk.cn site
+ case "SeeDesk":
+ return Fetch.Parse(url, fnAddress: a => "http://www.seedesk.cn" + a.Replace("_s.jpg", ".jpg"));
+ #endregion
+
+ #region H2004.com site
+ case "H2004":
+ return Fetch.Parse(url,
+ hnc =>
+ {
+ var page = hnc[hnc.Count - 2];
+ return page.Name == "font" ? null : page.Attributes["tppabs"].Value;
+ }, fnAddress: _ => "http://www.h2004.com" + _.Remove(0, 5));
+ #endregion
+
+ #region Faloo.com site
+ case "Faloo":
+ return Fetch.Parse(url, fnAddress: _ => _.Replace("120x120", "0x0"));
+ #endregion
+
+ #region 6611.us site
+ case "6611":
+ return Fetch.Parse(url, fnAddress: _ => _.Replace("/thumb/", "/"));
+ #endregion
+
+ #region piclove.com site
+ case "PicLove":
+ return Fetch.Parse(url, fnAddress: a => "http://www.piclove.com" + a.Replace("-lp.jpg", ".jpg"));
+ #endregion
+
+ #region KissQi.com site
+ case "KissQi":
+ return Fetch.Parse(url, hnc =>
+ {
+ var page = hnc.Last(); var href = page.Attributes["href"].Value.Split("()".ToCharArray())[1];
+ var segs = href.Split(','); var next = segs[segs.Length - 1].Trim('\'').Replace("[page]", segs[segs.Length - 2]);
+ return next.CompareWithLength(url) ? next : null;
+ },
+ fnAddress: _ => "http://www.kissqi.com" + _.TrimStart('.'));
+ #endregion
+
+ #region 1meng.com site
+ case "Meng":
+ return Fetch.Parse(url, fnName: _ => _.Substring(_.LastIndexOf('=') + 1) + ".jpg");
+ #endregion
+
+ #region 24Meinv.com site
+ case "Meinv":
+ return Fetch.Parse(url, fnAddress: _ =>
+ {
+ var mark = _.LastIndexOf('/'); var path = _.Substring(0, mark + 1);
+ var name = _.Substring(mark + 1); name = name.Remove(0, 1); path = path.Replace("//pic.", "//img.");
+ return path + name;
+ });
+ #endregion
+
+ #region Leg99.cn site
+ case "Leg99":
+ return Fetch.Parse(url, fnNextPage: hnc =>
+ {
+ var cur = hnc.Last(_ => _.Attributes["selected"] != null);
+ var curidx = hnc.IndexOf(cur);
+ return curidx == hnc.Count - 1 ? null : folder + hnc[curidx + 1].Attributes["value"].Value;
+ });
+ #endregion
+
+ #region 8264.com site
+ case "8264":
+ return Fetch.Parse(url, fnAddress: _ => _.Replace(".thumb.jpg", ""));
+ #endregion
+
+ #region Luscious site
+ case "Luscious":
+ return Fetch.Parse(url, fnAddress: _ => _.Replace("thumb_100_", "").Replace("static3.", "static.").Replace("static2.", "static."));
+ #endregion
+
+ #region LegPic.net site
+ case "LegPic":
+ return Fetch.Parse(url, fnAddress: _ => "http://www.legpic.net/" + _.TrimStart("../".ToCharArray()).Replace("/thumbnail/TN-", "/"),
+ fnNextPage: _ =>
+ {
+ var next = _.LastOrDefault();
+ if (next == null) return null;
+ return "http://www.legpic.net/" + next.Attributes["href"].Value.TrimStart("../".ToCharArray());
+ });
+ #endregion
+
+ #region BeautyLeg.com site
+ case "BLeg":
+ return Fetch.Parse(url, fnAddress: _ => _.StartsWith("http://photo.beautyleg.com/album")?_ :null
+ );
+ #endregion
+
+ #region Parse other sites
+ default:
+ return Fetch.Parse(url);
+ #endregion
+ }
+ }
+ catch (Exception)
+ {
+ return (Fetch.Title == null ? "Download" : "Analyze") + " Failed!";
+ }
+ }
+
+ private void DownloadFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ Fetch.Reset();
+ btnGo.Tag = RipperAction.Download;
+ tsPB.Visible = false;
+ lbBatch.Text = null;
+ System.Media.SystemSounds.Exclamation.Play();
+ if (e.Cancelled || e.Error != null)
+ {
+ tsLabel.Text = e.Error != null ? e.Error.Message : "Task cancelled.";
+ Stop();
+ }
+ else
+ {
+ tsLabel.Text = e.Result != null ? e.Result as string : "Task finished.";
+ if (Fetch.Next != null)
+ {
+ Address = Fetch.Next;
+ Go();
+ }
+ else if (Batch)
+ {
+ From++;
+ AdjustURL(1);
+ Batch = From != To;
+ Go();
+ }
+ else
+ {
+ Stop();
+ }
+ }
+ }
+
+ private void Stop()
+ {
+ btnGo.Image = Resources.Download;
+ btnGo.Enabled = true;
+ cmmiBatch.Enabled = false;
+ tbParse.ReadOnly = false;
+ tbDir.ReadOnly = false;
+ }
+
+ private void Go()
+ {
+ btnGo.Image = Resources.Cancel;
+ btnGo.Tag = RipperAction.Cancel;
+ bwFetch.RunWorkerAsync();
+ }
+
+ private void DownloadFiles_ProgressChanged(object sender, ProgressChangedEventArgs e)
+ {
+ tsPB.Value = e.ProgressPercentage;
+ tsLabel.Text = e.ProgressPercentage + "%";
+ }
+
+ private void pbDoubleClick(object sender, EventArgs e)
+ {
+ if (Fetch.Location != null && File.Exists(Fetch.Location))
+ Process.Start(Fetch.Location);
+ }
+
+ private void btnPlus_Click(object sender, EventArgs e)
+ {
+ AdjustURL(1);
+ }
+
+ private void btnMinus_Click(object sender, EventArgs e)
+ {
+ AdjustURL(-1);
+ }
+
+ ///
+ /// Adjust URL querystring value by increment/decrement number variable
+ ///
+ /// The PlusMinus enum value indicate the action type.
+ private void AdjustURL(int step)
+ {
+ string number, url = Address;
+ try
+ {
+ switch (Fetch.Site.Type)
+ {
+ default:
+ var mark = url.LastIndexOf('=');
+ if (mark > 0)
+ number = url.Substring(mark + 1);
+ else
+ {
+ mark = url.LastIndexOf('.');
+ var start = url.LastIndexOf('/') + 1;
+ number = mark > 0 ? url.Substring(start, mark - start) : url.Substring(start);
+ }
+ ChangeUrl:
+ var value = int.Parse(number);
+ value += step; if (value < 0) return;
+ var m = url.LastIndexOf(number);
+ Address = url.Substring(0, m) + value.ToString(new string('0', number.Length)) + url.Substring(m + number.Length);
+ break;
+ case "Duide":
+ number = url.Substring(url.LastIndexOf('/') + 2).Replace(".htm", "");
+ goto ChangeUrl;
+ case "PalAthCx":
+ var seg = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+ number = seg[seg.Length - 1];
+ goto ChangeUrl;
+ }
+ }
+ catch (Exception)
+ {
+ return;
+ }
+ }
+
+ ///
+ /// Clear the listbox items, and reset dataset to initial state.
+ ///
+ ///
+ ///
+ private void btnClear_Click(object sender, EventArgs e)
+ {
+ if (lvRip.Items.Count > 0)
+ {
+ lvRip.Items.Clear();
+ lvRip.Groups.Clear();
+ }
+ }
+
+ private void btnBatch_Click(object sender, EventArgs e)
+ {
+ Fetch.Site = CheckUrl(Address);
+ try
+ {
+ switch (Fetch.Site.Type)
+ {
+ default:
+ string text = Address.Split('=')[1];
+ OpenBatchDialog:
+ int pageid;
+ if (int.TryParse(text, out pageid))
+ new Batch(pageid).ShowDialog(this);
+ break;
+ case "Duide":
+ text = Address.Substring(Address.LastIndexOfAny("abc".ToCharArray()) + 1).Split('.')[0];
+ goto OpenBatchDialog;
+ case "PalAthCx":
+ var seg = Address.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+ text = seg[seg.Length - 1];
+ goto OpenBatchDialog;
+ }
+ }
+ catch (Exception)
+ { return; }
+ }
+
+ private void cmmiNextPage_Click(object sender, EventArgs e)
+ {
+ if (Batch)
+ Fetch.Skip = true;
+ }
+
+ private void cmmiDelete_Click(object sender, EventArgs e)
+ {
+ if (File.Exists(Fetch.Location))
+ {
+ File.Delete(Fetch.Location);
+ var lvi = lvRip.FindItemWithText(Path.GetFileName(Fetch.Location));
+ Fetch.Location = null;
+ if (lvi != null)
+ {
+ lvi.SubItems[3].Text = "Deleted";
+ lvi.Font = new Font(lvi.Font, FontStyle.Strikeout);
+ }
+ }
+ }
+
+ private void cmmiDrop_Click(object sender, EventArgs e)
+ {
+ if (Fetch.Images != null && Fetch.Images.Count > 0)
+ {
+ foreach (string name in Fetch.Images.Keys)
+ {
+ if (Fetch.Current != null && Fetch.Current.Name == name) { Fetch.Dropped = true; Fetch.Cancel(); continue; }
+ string path = Path.Combine(Dir, name);
+ if (File.Exists(path))
+ {
+ var lvi = lvRip.FindItemWithText(name);
+ if (lvi != null)
+ {
+ if (lvi.SubItems[3].Text == "Downloading") continue;
+ lvi.SubItems[3].Text = "Deleted";
+ lvi.Font = new Font(lvi.Font, FontStyle.Strikeout);
+ File.Delete(path);
+ }
+ }
+ }
+ Fetch.Skip = true;
+ }
+ }
+
+ private void lvSelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (lvRip.FocusedItem != null)
+ {
+ string file = Path.Combine(Dir, lvRip.FocusedItem.Text);
+ if (File.Exists(file))
+ {
+ if (mainSplit.Panel2Collapsed) mainSplit.Panel2Collapsed = false;
+ Fetch.Location = pbPreview.ImageLocation = file;
+ }
+ else
+ Fetch.Location = null;
+ }
+ }
+
+ private void cmmiDeleteFile(object sender, EventArgs e)
+ {
+ if (lvRip.SelectedItems.Count > 0)
+ {
+ foreach (ListViewItem lvi in lvRip.SelectedItems)
+ {
+ string path = Path.Combine(Dir, lvi.Text);
+ if (File.Exists(path))
+ {
+ if (lvi.SubItems[3].Text == "Downloading") continue;
+ File.Delete(path);
+ lvi.SubItems[3].Text = "Deleted";
+ lvi.Font = new Font(lvi.Font, FontStyle.Strikeout);
+ }
+ }
+ }
+ }
+
+ private void cmmiDownloadFile(object sender, EventArgs e)
+ {
+ var args = new List>();
+ foreach (ListViewItem lvi in lvRip.SelectedItems)
+ {
+ if (!File.Exists(Path.Combine(Dir, lvi.Text)))
+ {
+ args.Add(Tuple.Create(lvi.ToolTipText/*Url*/, lvi.Text/*Name*/));
+ lvi.SubItems[3].Text = "Downloading";
+ lvi.Font = new Font(lvi.Font, FontStyle.Regular);
+ }
+ }
+ if (args.Count > 0)
+ new Thread(DownloadFile).Start(args);
+ }
+
+ void DownloadFile(object args)
+ {
+ var dfi = args as List>;
+ foreach (var item in dfi)
+ {
+ try
+ {
+ string path = Path.Combine(Dir, item.Item2);
+ if (Fetch.Site.Type == "Heels")
+ {
+ using (Stream s = Fetch.GetStream(item.Item1, Settings.Default.Cookie))
+ {
+ using (Image bmp = Image.FromStream(s))
+ {
+ s.Close(); bmp.Save(path);
+ bmp.Dispose();
+ }
+ }
+ }
+ else
+ Fetch.GetFile(item.Item1, path);
+ LviUpdate = new[] { item.Item2, null, new FileInfo(path).Length / 1024 + " KB", "Finished" };
+ }
+ catch (Exception)
+ {
+ LviUpdate = new[] { item.Item2, null, null, "Failed" };
+ }
+ }
+ }
+
+ private void lvKeyDown(object sender, KeyEventArgs e)
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.Delete:
+ if (e.Shift)
+ cmmiDrop_Click(sender, e);
+ else
+ cmmiDeleteFile(sender, e);
+ break;
+ case Keys.C:
+ if (e.Control && lvRip.FocusedItem != null)
+ Clipboard.SetText(lvRip.FocusedItem.ToolTipText);
+ break;
+ }
+ }
+
+ private void Ripper_KeyDown(object sender, KeyEventArgs e)
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.Space:
+ if (tbParse.Focused || tbDir.Focused) break;
+ if (e.Shift) { mainSplit.Panel2Collapsed = !mainSplit.Panel2Collapsed; cmmiPreview.Checked = !mainSplit.Panel2Collapsed; break; }
+ mainSplit.Panel1Collapsed = !mainSplit.Panel1Collapsed;
+ cmmiPreview.Checked = !mainSplit.Panel1Collapsed;
+ break;
+ case Keys.Escape:
+ if (FormBorderStyle == FormBorderStyle.None)
+ {
+ FullScreen = false;
+ FormBorderStyle = FormBorderStyle.Sizable;
+ Bounds = (Rectangle)this.Tag;
+ mainSplit.Panel1Collapsed = false;
+ if ((Fetch.Location == null) && pbPreview.Image == null)
+ mainSplit.Panel2Collapsed = true;
+ }
+ break;
+ case Keys.F11:
+ if (FullScreen)
+ {
+ FullScreen = false;
+ FormBorderStyle = FormBorderStyle.Sizable;
+ Bounds = (Rectangle)this.Tag;
+ if ((Fetch.Location == null) && pbPreview.Image == null)
+ mainSplit.Panel2Collapsed = true;
+ }
+ else
+ {
+ this.Tag = Bounds;
+ mainSplit.Panel1Collapsed = true;
+ mainSplit.Panel2Collapsed = false;
+ FormBorderStyle = FormBorderStyle.None;
+ Bounds = Screen.PrimaryScreen.Bounds;
+ FullScreen = true;
+ }
+ break;
+ }
+ }
+
+ bool CanDownload
+ {
+ get
+ {
+ if ((Fetch.Site = CheckUrl(Address)) == null) { tsLabel.Text = "Not support!"; return false; }
+#if !TRACE
+ if (!Directory.Exists(Dir))
+ {
+ if (DialogResult.Yes == MessageBox.Show("Do you want to create new folder to store files?", "Directory doesn't exist!", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
+ {
+ try { Directory.CreateDirectory(Dir); return true; }
+ catch (Exception exp) { MessageBox.Show(exp.Message, "Create Directory failed!", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
+ }
+ else
+ return false;
+ }
+#endif
+ return true;
+ }
+ }
+
+ private void cmmiCopyName_Click(object sender, EventArgs e)
+ {
+ if (lvRip.FocusedItem != null)
+ Clipboard.SetText(lvRip.FocusedItem.Text);
+ }
+
+ private void llFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ if ((fbDir.ShowDialog()) == DialogResult.OK)
+ Dir = fbDir.SelectedPath;
+ }
+
+ private void llCookie_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ new SetCookie().ShowDialog(this);
+ }
+
+ private void tbParse_DragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.Text))
+ {
+ e.Effect = DragDropEffects.Copy;
+ }
+ }
+
+ private void tbParse_DragDrop(object sender, DragEventArgs e)
+ {
+ TextBox tb = sender as TextBox;
+ tb.Text = (string)e.Data.GetData(DataFormats.Text);
+ }
+
+ private void cmsLV_Opening(object sender, CancelEventArgs e)
+ {
+ cmmiNextPage.Visible = cmmiBatch.Visible = Batch;
+ cmmiSave.Visible = cmmiRemove.Visible = cmmiCopyName.Visible = lvRip.SelectedItems.Count > 0;
+ cmmiDropGroup.Visible = cmmiClear.Visible = lvRip.Items.Count > 0;
+ }
+
+ private void CloudToolStrip_Click(object sender, EventArgs e)
+ {
+ tsCloud.ShowDropDown();
+ }
+
+ private void CloudItem_Click(object sender, EventArgs e)
+ {
+ ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
+ switch (tsmi.Text)
+ {
+ case "GDrive": WebCloud.Service = WebCloud.CloudType.GDrive; break;
+ case "Flickr": WebCloud.Service = WebCloud.CloudType.Flickr; break;
+ case "Facebook": WebCloud.Service = WebCloud.CloudType.Facebook; break;
+ case "Picasa": WebCloud.Service = WebCloud.CloudType.Picasa; break;
+ }
+ new WebCloud() { Text = tsmi.Text }.Show();
+ }
+
+ private void tsHome_Click(object sender, EventArgs e)
+ {
+ Process.Start("http://imgrip.codeplex.com");
+ }
+
+ private void llSites_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ new Sites().Show(this);
+ }
+
+ private void tb_MouseClick(object sender, MouseEventArgs e)
+ {
+ var ctl = sender as TextBox;
+ if (string.IsNullOrEmpty(ctl.Tag as string)) { if (ctl.SelectionLength == 0) ctl.SelectAll(); ctl.Tag = ctl.SelectedText; }
+ }
+
+ private void tb_Leave(object sender, EventArgs e)
+ {
+ var ctl = sender as TextBox;
+ ctl.Tag = null;
+ }
+
+ private void cmmiBatch_CheckedChanged(object sender, EventArgs e)
+ {
+ Batch = cmmiBatch.Checked;
+ }
+ }
+
+ ///
+ /// Represent the download button action type.
+ ///
+ enum RipperAction { Download, Cancel };
}
\ No newline at end of file
diff --git a/Main.resx b/Main.resx
index fc24558..311ef7f 100644
--- a/Main.resx
+++ b/Main.resx
@@ -1,1447 +1,1447 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
- 486, 17
-
-
- 17, 17
-
-
- 223, 17
-
-
- 120, 17
-
-
-
-
- /9j/4AAQSkZJRgABAQEAAAAAAAD/4QCqRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKG
- AAcAAAB0AAAALAAAAABDAFIARQBBAFQATwBSADoAIABnAGQALQBqAHAAZQBnACAAdgAxAC4AMAAgACgA
- dQBzAGkAbgBnACAASQBKAEcAIABKAFAARQBHACAAdgA2ADIAKQAsACAAcQB1AGEAbABpAHQAeQAgAD0A
- IAA3ADUACgAAAAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMc
- HCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIy
- MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAIAAgAwEiAAIRAQMRAf/EAB8AAAEFAQEB
- AQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQci
- cRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
- Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV
- 1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E
- ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDTh
- JfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT
- lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5
- +v/aAAwDAQACEQMRAD8A94uLu3tITLcTJFGOrO2BWdL4m0uMZ82Vwe8cEjD8wKp3tv5HiOGaRFlWddsR
- YZMbKDlRk8ZHORz8pqLU9dsLZ3t7m5aSYdYYIt5H1PQfjipnOMFeTsOMXJ2SNV9bsjozamkha2UE52kE
- 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
- SUVORK5CYII=
-
-
-
-
- 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
- rkJggg==
-
-
-
-
- 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
- BlEAAAAASUVORK5CYII=
-
-
-
- 389, 17
-
-
- 582, 17
-
-
- 682, 17
-
-
- 310, 17
-
-
- 58
-
-
-
- AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAA
- AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAA
- AAQAAAAFAAAABgAAAAYAAAAHAAAABwAAAAgAAAAIAAAABwAAAAcAAAAGAAAABgAAAAUAAAAFAAAABAAA
- AAQAAAADAAAAAwAAAAIAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAAAAMAAAAFAAAABwAA
- AAgAAAAJAAAACQAAAAoAAAALAAAADAAAAAwAAAANAAAADQAAAA4AAAAOAAAADgAAAA8AAAAPAAAADwAA
- AA8AAAAPAAAADwAAAA8AAAAOAAAADgAAAA4AAAANAAAADQAAAAwAAAAMAAAACwAAAAoAAAAJAAAACQAA
- AAgAAAAGAAAABAAAAAMAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAA
- AAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAASAAAAEwAA
- ABQAAAAUAAAAFQAAABUAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAVAAAAFQAA
- ABQAAAAUAAAAEwAAABIAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACgAAAAkAAAAIAAAABwAA
- AAUAAAADAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AAAAAAEAAAACAAAABAAAAAYAAAAHAAAACQAAAAoAAAALAAAADQAAAA4AAAAPAAAAEQAA
- ABIAAAATAAAAFAAAABUAAAAWAAAAGAAAABkAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB0AAAAdAAAAHgAA
- AB4AAAAeAAAAHgAAAB4AAAAdAAAAHQAAAB0AAAAcAAAAGwAAABoAAAAZAAAAGQAAABgAAAAWAAAAFQAA
- ABQAAAATAAAAEgAAABEAAAAPAAAADgAAAA0AAAALAAAACgAAAAkAAAAHAAAABgAAAAMAAAAB////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAADAAAABAAAAAYAAAAHAAAACQAA
- AAoAAAAMAAAADQAAAA8AAAAQAAAAEgAAABMAAAAXAAAAGAAAABkAAAAbAAAAHgAAACAAAAAhAAAAIgAA
- ACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAApAAAAKAAA
- ACcAAAAmAAAAJQAAACQAAAAiAAAAIQAAACAAAAAcAAAAGwAAABkAAAAYAAAAFQAAABMAAAASAAAAEAAA
- AA8AAAANAAAADAAAAAoAAAAJAAAABwAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wAAAAABAAAAAwAAAAQAAAAGAAAACgAAAAsAAAAPAAAAEAAAABQAAAAVAAAAGAAAABoAAAAdAAAAHwAA
- ACAAAAAkAAAAJgAAACcAAAApAAAAKwAAAC0AAAAuAAAAMAAAADEAAAAzAAAANQAAADYAAAA3AAAAOAAA
- ADkQTTRwCzYlWAAAADoAAAA5AAAAOAAAADcAAAA2AAAANQAAADMAAAAxAAAAMAAAAC4AAAAtAAAAKwAA
- ACkAAAAnAAAAJgAAACQAAAAgAAAAHwAAAB0AAAAaAAAAGAAAABUAAAAUAAAAEAAAAA0AAAALAAAACAAA
- AAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AAAAAAIAAAACAAAABAAAAAcAAAAJAAAADQAAAA4AAAASAAAAFgAA
- ABYAAAAYAAAAGwAAAB0AAAAhAAAAIgAAACQAAAAnAAAAKAAAACoAAAAuAAAALwAAADEAAAAxAAAANQAA
- ADcAAAA4AAAAOgAAADsAAAA9AAAAPwAAAEAAAABCElM4hht8VP8aeVLwCCgbWQAAAEQAAABCAAAAQAAA
- AD8AAAA9AAAAOwAAADoAAAA4AAAANwAAADUAAAAxAAAAMQAAAC8AAAAuAAAAKgAAACgAAAAnAAAAJAAA
- ACIAAAAhAAAAHQAAABsAAAAYAAAAFgAAABYAAAASAAAADgAAAA0AAAAJAAAABwAAAAQAAAAC////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACAAA
- AAoAAAAMAAAADQAAABAAAAASAAAAFgAAABcAAAAaAAAAHAAAAB8AAAAhAAAAJAAAACYAAAAnAAAAKQAA
- ACsAAAAuAAAAMAAAADAAAAA0AAAANQAAADcAAAA4AAAAOwAAADwAAAA+AAAAPwAAAEAAAABDAAAARA08
- KGsbe1P6JYRc/ht8VP8ZdE7aAw4KTAAAAEUAAABEAAAAQwAAAEAAAAA/AAAAPgAAADwAAAA7AAAAOAAA
- ADcAAAA1AAAANAAAADAAAAAwAAAALgAAACsAAAApAAAAJwAAACYAAAAkAAAAIQAAAB8AAAAcAAAAGgAA
- ABcAAAAWAAAAEgAAABAAAAANAAAADAAAAAoAAAAIAAAACAAAAAYAAAAEAAAAAgAAAAL///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAABAAA
- AAYAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAOAAAAEAAAABIAAAASAAAAFQAAABYAAAAaAAAAHAAA
- AB0AAAAhAAAAIgAAACUAAAAnAAAAKQAAACsAAAAtAAAAMAAAADEAAAA0AAAANQAAADgAAAA5AAAAOgAA
- ADsAAAA/AAAAQAAAAEAAAABBAAAAQgAAAEMHIxhWGnhR7B5+V/6M0LP/ZrWT/xt8VP8Xa0m9AAAARQAA
- AEQAAABDAAAAQgAAAEEAAABAAAAAQAAAAD8AAAA7AAAAOgAAADkAAAA4AAAANQAAADQAAAAxAAAAMAAA
- AC0AAAArAAAAKQAAACcAAAAlAAAAIgAAACEAAAAdAAAAHAAAABoAAAAWAAAAFQAAABIAAAASAAAAEAAA
- AA4AAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAGAAAAAgAAAAL///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABAAAAASAAAAFAAA
- ABQAAAAWAAAAFwAAABcAAAAZAAAAGQAAABwAAAAfAAAAIQAAACMAAAAnAAAAKAAAACsAAAAsAAAALwAA
- ADAAAAAyAAAANAAAADQAAAA4AAAAOQAAADoAAAA8AAAAPQAAAD4AAABBAAAAQgAAAEIAAABCAgwISBlz
- TtYbfFT/eMSj/6Thx/+j4Mb/SaF7/xt8VP8UXD6ZAAAARQAAAEMAAABCAAAAQgAAAEIAAABBAAAAPgAA
- AD0AAAA8AAAAOgAAADkAAAA4AAAANAAAADQAAAAyAAAAMAAAAC8AAAAsAAAAKwAAACgAAAAnAAAAIwAA
- ACEAAAAfAAAAHAAAABkAAAAZAAAAFwAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAABAAAAAOAAAADAAA
- AAoAAAAIAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAKAAAADAAA
- AA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABkAAAAbAAAAHQAAAB8AAAAfAAAAIQAA
- ACMAAAAjAAAAJgAAACcAAAApAAAALAAAAC0AAAAxAAAAMgAAADQAAAA1AAAAOAAAADkAAAA7AAAAPAAA
- AD0AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEMXaki7G3xU/1+xjv+j4cb/i9m3/5zewf+b3MD/Mo9o/ht7
- U/0PRi93AAAARgAAAEMAAABDAAAAQgAAAEEAAABAAAAAPwAAAD0AAAA8AAAAOwAAADkAAAA4AAAANQAA
- ADQAAAAyAAAAMQAAAC0AAAAsAAAAKQAAACcAAAAmAAAAIwAAACMAAAAhAAAAHwAAAB8AAAAdAAAAGwAA
- ABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAIAAAABgAA
- AAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA
- AAQAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAQAAAAEgAAABQAAAAUAAAAFgAAABcAAAAZAAAAGwAA
- ABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAJgAAACgAAAAqAAAAKgAAACwAAAAuAAAALwAA
- ADIAAAAyAAAANAAAADcAAAA4AAAAOwAAADsAAAA+AAAAPgAAAEAAAABBAAAAQQAAAEMAAABDFF0/mBt8
- VP9Gn3r/oeDF/5Lbu/9NxZH/X8uc/5/gxP+O1bb/JINb/hp6UvMJLR5dAAAARAAAAEMAAABDAAAAQQAA
- AEEAAABAAAAAPgAAAD4AAAA7AAAAOwAAADgAAAA3AAAANAAAADIAAAAyAAAALwAAAC4AAAAsAAAAKgAA
- ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAA
- ABQAAAAUAAAAEgAAABAAAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAMAAAADAAAAA4AAAAQAAAAEgAA
- ABQAAAAWAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAA
- ACoAAAAsAAAALAAAAC4AAAAwAAAAMAAAADEAAAAzAAAANQAAADUAAAA3AAAAOAAAADgAAAA7AAAAOwAA
- AD4AAABAAAAAQAAAAEEAAABCAAAAQxBJMXobe1P9Mo9o/pvcwP+a3sD/UseU/0bDjf9Fw4z/a8+k/53f
- w/97yaf/G3xU/xl1T98DEQxNAAAARQAAAEMAAABCAAAAQQAAAEAAAABAAAAAPgAAADsAAAA7AAAAOAAA
- ADgAAAA3AAAANQAAADUAAAAzAAAAMQAAADAAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJgAA
- ACUAAAAjAAAAIQAAAB8AAAAdAAAAHQAAABsAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAADgAA
- AAwAAAAMAAAACAAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA
- AAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA
- ACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALgAAADAAAAAwAAAAMQAAADMAAAA1AAAANwAA
- ADcAAAA4AAAAOgAAADwAAAA8AAAAPgAAAD8AAAA/AAAAQQAAAEMAAABDAAAARRMNB1ErPSaFHHpS+SSD
- XP6R1bf/n9/E/1zKm/9Fw43/Q8OL/0HCi/9Awor/etSu/5vfwf9jt5T/G3xU/xhsScQAAABGAAAARgAA
- AEUAAABFAAAAQwAAAEMAAABBAAAAPwAAAD8AAAA+AAAAPAAAADwAAAA6AAAAOAAAADcAAAA3AAAANQAA
- ADMAAAAxAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAA
- ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAA
- AAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAASAAAAFAAA
- ABYAAAAXAAAAGQAAABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALAAA
- AC4AAAAwAAAAMQAAADMAAAA1AAAANwAAADgAAAA4AAAAOgAAADwAAAA+AAAAPwAAAD8AAABBAAAAQyQZ
- Dl5GMRyPVT0htl9DJ9NnSyrvZlAx/yd1T/8bfFT/gcur/6Hgxf9rz6T/RcOM/0LCi/8/wor/PcGJ/zzB
- iP8+wYn/hdi1/5newP9Io33/G3xU/zxgPPBYPiPHTTceqDcnFnwMCARPAAAARgAAAEYAAABFAAAAQwAA
- AEEAAAA/AAAAPwAAAD4AAAA8AAAAOgAAADgAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAA
- ACwAAAAqAAAAKAAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFAAA
- ABIAAAASAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAA
- AAgAAAAKAAAADAAAAA4AAAAQAAAAEgAAABQAAAAWAAAAFwAAABkAAAAZAAAAGwAAAB0AAAAfAAAAIQAA
- ACMAAAAlAAAAJgAAACgAAAAqAAAALAAAACwAAAAuAAAAMAAAADEAAAAzAAAANQAAADcAAAA4AAAAOgAA
- ADwAAAA8AAAAPgAAAD8YEQlQRTAbiFc9I7lkRyfpakws/25PL/9xVDT/dFY2/3RYOf80ckz/G3xU/2y8
- mv+i4MX/e9St/0XDjf9Cw4v/P8KK/z3BiP86wIf/OMCG/zfAhv9Bw4v/jtu7/5PbvP80kWr/G3tU/11m
- Rf90WDv/bFAx/2VHKPtbQSTUTTYepTMkFHQCAQFHAAAARQAAAEMAAABBAAAAPwAAAD4AAAA8AAAAPAAA
- ADoAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAAACwAAAAqAAAAKAAAACYAAAAlAAAAIwAA
- ACEAAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAA
- AAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAADgAAABAAAAASAAAAFAAA
- ABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALgAA
- ADAAAAAwAAAAMwAAADMAAAA1AAAAN0FBQUaoqKh2kJCQahwaGEdBLhp8XEEkxGdJKftqSyr/bU8t/3FR
- Mf9yUzL/dVU1/3dXNv95WTj/RWxH/xt8VP9TqYX/o+DG/4vZt/9IxI7/RMOM/0HCiv89wYn/OsCH/zfA
- hv81v4X/M7+E/zK/g/9KxpH/lN2+/4nUtf8khFz/IHtU/3VtT/+Ga0//g2lN/3peQf9wVDb/aEoq/2FE
- JutOOB+nJxsPYgAAAEEAAABBAAAAPwAAAD4AAAA8AAAAOgAAADgAAAA3AAAANQAAADMAAAAzAAAAMAAA
- ADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAdAAAAHQAAABsAAAAZAAAAFwAA
- ABYAAAAUAAAAEgAAABAAAAAOAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA
- AAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA
- ACEAAAAjAAAAJQAAACYAAAAoAAAAKgAAACwAAAAsAAAALgAAADAAAAAxAAAAMwAAADWHh4de7+/v0fr5
- +fX5+Pf74tzW/IFnSv+CZ0r/iG5S/4RnSv97Wzv/dlYz/3dXM/96WDX/e1o3/1dnQv8bfFT/PZhx/6Hf
- xP+X3b//UMaS/0bEjf9Dw4z/P8KK/zzBiP85wIb/Nb+F/zK+g/8wvoL/Lr2B/zC+gv9by5z/lt2//3nK
- qP8cfVX/K3lT/4NtUP+Nc1f/l4Bn/5qEbP+bh3D/lYBp/4JpTf9pTS7/XUEl10cyHI0LBwREFxcXQQAA
- ADwAAAA6AAAAOAAAADcAAAA1AAAAMwAAADEAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJQAA
- ACMAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAAABQAAAASAAAAEAAAAA4AAAAMAAAACgAA
- AAgAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEgAA
- ABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAfAAAAIQAAACEAAAAjAAAAJQAAACYAAAAoAAAAKgAA
- ACwAAAAsAAAALgAAADAAAAAxAAAAM3FmW3DX0crr8u/s//f18//w7en/yr+z/8O1pv+/sJ//wbGh/8Gx
- oP++rZv/qpR8/5FyUv9pZD7/HXtT/y2JY/+b27//oODE/1vJmv9JxI//RsON/0LDi/8/wor/PMGI/zjA
- hv81v4T/Mb6D/y69gf8rvYD/Lr2B/zK+g/9w0aj/mN7A/2W6lv8bfFT/To5t/9HGuv/Uyb7/1Mq//9bM
- wv/VzML/187G/9bOxf/HvLD/sKCP/8O4rfjo5eLq8/Pz4OTk5LuZmZloAAAANQAAADMAAAAxAAAAMAAA
- AC4AAAAsAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAA
- ABYAAAAUAAAAEgAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA
- AAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAA
- ABsAAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALjspF1xgRCbBj3df/8K0
- pv/RyL3/wbOk/5B2Wf9+XTv/eVgz/3lWMf99WTP/h2ZC/5V2V/+uln7/rqiT/ymAWf8ggFj/kNO2/6bi
- x/9qzqL/TcWR/0rEj/9GxI3/Q8OM/z/Civ88wYj/OcCG/zW/hf8yvoP/ML6C/y++gv8wvoL/M7+E/zi/
- hv+C17P/mt7B/02mgf8bfFT/XYJg/5Z6XP+Td1j/j3NV/45zVv+XfmT/o453/7CejP/i3Nb/9/b0//v7
- +v/8/Pz/9vX09+7t7dFxcXFMAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAA
- ACEAAAAfAAAAHQAAABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAA
- AAgAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAA
- AAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAAB8AAAAhAAAAIwAA
- ACUAAAAmAAAAJiUaDztdQiWwbE4t/q+di//KvbH/oIpy/3hYNf93VDD/eVYx/3tXMf99WTL/f1oz/4Bb
- NP+CXTT/g101/4FgN/8yeFD/G3xU/4DHqP+q48n/fNOs/1HGk/9OxZH/S8WP/0fEjv9Ew4z/QcKK/z3B
- if86wIf/N8CG/zW/hf8zv4T/M7+E/zO/hP81v4X/OMCG/0TDjf+R27v/mNzA/zmVbv8bfFT/bHZT/5N0
- VP+SdFT/kXNV/5BzVf+Pc1b/jXNW/6mVgP/Z0cj/8u/s//n49//z8e//zMO5+VpGMX8AAAAsAAAALAAA
- ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFgAA
- ABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AAAAAAIAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAMAAAADgAAABAAAAASAAAAFAAA
- ABQAAAAWAAAAFwAAABkAAAAbAAAAGwAAAB0AAAAfAAAAIQgFAyRVPCKAaEop8XJTMv+5qZj/x7qs/4Zo
- SP93VTD/elYx/3xYMv9/WjP/gFs0/4NdNf+FXjX/hmA2/4hgNv+JYjf/QnNK/xt8VP9otpT/uejT/5rd
- wP9Wx5X/UseT/0/Gkv9MxZD/ScSO/0XDjf9Cw4v/P8KK/z3Bif86wIf/OMCG/zfAhv83wIX/N8CG/znA
- hv87wYj/PcGJ/1PIlf+b38L/kde5/yiGX/8gfFT/gHdU/5Z2Vf+UdVX/k3ZW/5J1Vv+SdVb/kHRW/490
- V/+jjnf/sKCN/8e8sP/e19D/nYt3/11CJck2JhVKAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAA
- ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA
- AAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAAAgAA
- AAQAAAAGAAAACAAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAA
- ABlBLhpBZUgo1GtMK/9vTyz/sp+M/8i7rf+EZUP/elcx/31ZMv9/WjP/glw0/4ReNf+GYDb/iGE3/4pi
- N/+MYzj/jmU5/1hwRf8bfFT/T6OA/7bm0P+96dX/edOr/1fIlv9Ux5T/UcaS/03Fkf9KxY//R8SO/0XD
- jP9Cwov/QMKK/z7Bif88wYj/O8GI/zvBh/87wYj/PMGI/z7Bif9Awor/QsOL/2bNof+g4MT/hc6v/x19
- Vf8se1T/kHhU/6GCY/+egGL/mHla/5V2V/+Ud1j/knZY/5F2WP+QdVj/j3VZ/6uZhf/g2tP/s6WV/2RJ
- KftWPCGUBQQCIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAA
- AA4AAAAMAAAACgAAAAgAAAAIAAAABgAAAAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACgAA
- AAoAAAAMAAAADgAAABAAAAAQAAAAEgAAABQAAAAUVTwhWmlKKfJtTSz/cVAt/5l/Zf/TyLz/jnBR/31Z
- Mv+AWzP/gl00/4VeNf+HYDb/iWI3/4xjOP+OZTn/j2Y6/5FnOv9vbkL/G3xT/zmRbP+v4sv/xOvZ/5vd
- v/+E1rH/WciW/1XHlf9Sx5P/T8aS/03FkP9KxI//R8SO/0XDjf9Dw4z/QcKL/0DCiv8/wor/P8KK/z/C
- iv9Awor/QcKL/0PDjP9Fw43/SMSO/3vUrf+i4Mb/cb+d/xt8VP8+e1T/oYNi/6SGZv+jhWX/mnta/5d5
- WP+Vd1j/lXhZ/5N3WP+Rdln/kHVZ/6WQe//f2NH/s6OU/3FWOP9eQiW9JBoOJwAAABcAAAAXAAAAFgAA
- ABQAAAAUAAAAEgAAABAAAAAQAAAADgAAAAwAAAAKAAAACgAAAAgAAAAGAAAABAAAAAQAAAAC////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AAAAAAgAAAAIAAAAEAAAABgAAAAYAAAAIAAAACgAAAAwAAAAMAAAADmBE
- JnxqSyr9b08s/3NRLv97Wjb/0sa6/6iQd/9/WjP/gl00/4VfNf+IYDb/imI3/4xkOP+PZjn/kWc6/5Np
- O/+Vajz/gm1A/yF7U/8ohV7/pdzD/8jt3P+l4cX/l9y8/4/auP9ayZf/V8iW/1XHlP9SxpP/T8aS/03F
- kP9KxY//SMSO/0bEjf9Fw4z/RMOM/0PDjP9Dw4z/Q8OM/0TDjP9Fw43/R8SN/0jEjv9LxY//TsWR/4/a
- uf+l4sf/WKuI/xt8VP9Yflj/qIlo/6aIZ/+khWX/mntZ/5l6Wf+XeVn/lnha/5R3Wf+Sd1r/kHZa/6yZ
- hf/j3df/pJF9/4BnTf9mSi3bQi4aMwAAABIAAAAQAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA
- AAYAAAAEAAAAAgAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AAAAAAgAAAAIAAAAEAAAABjMjFAxnSCmibU0r/3FQLf90Uy//eFUw/6KJbv/Sxbj/hWA5/4Ve
- Nf+IYDb/i2M4/41kOf+QZjr/kmg7/5RpPP+Xaz3/mG09/5FuP/8selH/HX5V/5XSt//I7Nv/seTM/5zd
- wP+Y3b3/ldy8/2LLm/9ayJf/V8iW/1THlP9SxpP/UMaS/03Fkf9LxZD/SsSP/0jEjv9IxI7/R8SO/0fE
- jf9HxI7/SMSO/0nEjv9KxI//TMWQ/07Fkf9QxpL/WMmX/53ewf+l4Mb/P5hz/xt8VP94hWH/q4tp/6mK
- aP+jg2H/nHxZ/5t7Wv+Zelr/mHpa/5Z5Wv+UeFv/knda/8KzpP/e18//kXlh/4hxV/9uUjbwVDwhTAAA
- AAoAAAAIAAAACAAAAAYAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlSCgWaksqxG5O
- LP9yUS7/dlMv/3lWMf99WTL/y7ur/7Sdg/+HYDb/imI3/41kOf+QZjr/kmg7/5VqPP+YbD3/mm4+/5xv
- P/+bcUD/PXlP/xt8VP+Aw6X/xuvZ/7zo1P+h38L/nd7A/5rdvv+W3Lz/bc+j/1zJmP9ayJf/V8iW/1XH
- lf9Tx5P/UcaS/0/Gkv9OxZH/TMWQ/0vFkP9LxZD/S8WP/0vFkP9MxZD/TcWQ/07Fkf9PxpL/UcaT/1PH
- lP9Vx5X/Z8yf/6bhx/+f28D/LYli/x98VP+RiWb/rY1r/6uMaf+igFz/n31a/518Wf+be1r/mXtb/5h6
- W/+VeFr/lntf/97Wzv+1pJL/jXRa/4pzWv90WT77XkIlbQAAAAIAAAAC////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AZkgpLmpLKuBuTiz/c1Eu/3dUMP96VzH/f1oz/5d4Vv/c0cX/lXFL/4xk
- OP+PZjr/kmg7/5VqPP+YbD3/m24+/51wP/+gckD/oXNB/1V5TP8bfFT/ZbCQ/8Pq2P/G69r/peDF/6Lf
- w/+f38H/m92+/5jcvf960qr/X8qa/13JmP9ayZf/WMiW/1bHlf9Ux5T/U8eT/1HGk/9QxpL/T8aS/0/G
- kv9PxpL/T8aS/1DGkv9QxpL/UcaT/1PHlP9Vx5T/VsiV/1jIlv9byZf/d9Gp/6zjyv+T07f/H35X/yt9
- Vv+jjWn/r45r/6uKZv+if1r/oH5b/559Wv+cfVv/mntb/5h7W/+WeVv/vaya/9vSyf+Rd1z/jXRb/4tz
- W/97Ykj/Y0YomVxBJQX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGdJKVBrTCvzb08s/3RS
- Lv94VTD/fFgy/4BbM/+DXTX/v6qU/8i0oP+OZTn/kWc6/5VqPP+YbD3/m24+/51wP/+gckH/o3RC/6V2
- Q/9weEr/G3xU/0udef+/6NT/zu7e/6ziyP+n4cX/pODD/6Dfwv+c3cD/mt2+/4XWsf9iypv/YMqa/13J
- mf9byZj/WsiX/1jIlv9WyJX/VceV/1THlP9Tx5T/U8eU/1PHk/9Tx5T/VMeU/1THlP9Vx5X/V8iV/1jI
- lv9ayJf/XMmY/17Jmf9gypr/iti0/6/ky/9/xaf/G3xU/z5+Vv+ujmn/sZBs/6iEX/+jgFv/ooBb/6B+
- W/+dflv/m3xb/5l7W/+eg2b/5N3W/66ZhP+Qd1v/jnVb/4x0W/+BaU//ZUkswVxBJRP///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wBnSSlNa0wr/XBPLf90Uy//eVYw/31ZMv+BXDT/hV41/5BrRP/d0cT/qYhm/5Rp
- O/+Xaz3/mm0+/51wP/+gckD/o3RC/6Z2Q/+oeET/iHlI/x58VP80jWf/t+PO/9Lv4f+05c3/q+LH/6jh
- xv+l4MX/ot/C/57ewP+c3b//kdq5/2XLnP9jy5v/Ycqa/1/Kmf9dyZn/W8mY/1rJl/9ZyJb/WMiW/1fI
- lv9XyJb/V8iV/1fIlv9XyJb/WMiW/1nIl/9ayZf/XMmY/13Jmf9fypr/Ycqb/2PLnP9ly53/nN2//7Hl
- zf9lsZD/G3xU/1mAV/+0kmz/q4Ze/6eDXP+lgVv/o4Fb/6F/W/+eflv/nH1b/5p8W//Juqn/1Mi8/5N4
- W/+Rd1v/jnVb/4x0W/+FblX/aU0x0VxBJAv///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZkgpLGtMK/JwTy3/dFMv/3lW
- Mf99WTL/glw0/4ZfNv+KYjf/qIhm/93Rw/+WbD7/mG09/5xvP/+fcUD/onNB/6V2Q/+oeET/q3pF/5t8
- R/8nfFP/JIFa/6rbxP/T8OL/vejS/6/jyv+s4sj/quLH/6fhxf+k38P/oN/B/57ewP+a3b7/as2f/2bM
- nf9ky5z/Ysub/2HKmv9fypr/XsmZ/13JmP9cyZj/W8mY/1vJmP9byZf/W8mY/1vJmP9cyZj/XcmZ/17K
- mf9fypr/Ycqa/2PLm/9ky5z/Zsyd/2jMnv9vzqL/qeHH/7Lkzf9JnHj/G3xU/3eCWf+shVz/q4Vc/6mD
- XP+mglz/pIFc/6GAW/+ff1v/nX1b/6eNcf/n4Nn/po92/5N4W/+Rdlv/jnVb/4tzWv+FbVX/Z0wvr1tA
- JAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AGVIKBRrTCvfcE8t/3RTL/95VjH/flkz/4JdNP+GYDb/i2M4/49mOf+6n4H/08Ct/5pu
- Pv+ecED/oXNB/6R1Qv+nd0T/qnlF/618Rv+pfEb/NnxR/xt8VP+Yz7X/0u7g/8fq2f+05M3/seTL/67i
- yf+r4sj/qeHG/6XgxP+i38L/oN7B/5zdv/960qr/acyf/2fMnv9my53/ZMuc/2PLm/9iypv/Ycqa/2DK
- mv9fypr/X8qa/1/Kmf9fypr/X8qa/2DKmv9hypr/Ysqb/2PLnP9ky5z/Zsyd/2jMnv9qzJ//bM2g/27N
- of970an/suXN/63fyP8xjGX/HnxU/4+FWv+uh1z/rIVd/6mEXP+og1z/pYJc/6KBXP+gf1v/nn1b/9XI
- uv/IuKb/lnpb/5N4W/+Rdlv/jnVb/4tzWv+Da1P/ZUoug////wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlRygGaksqwm9PLP90Uy//eVYx/35Z
- M/+DXTX/h2A2/4tjOP+PZjr/lGk7/8qzm//IsJb/oHJA/6N0Qv+mdkP/qnlF/617Rv+vfUb/r31G/018
- T/8bfFT/f76g/9Du3//Q7t7/uObP/7blzv+y5Mv/sOPK/63iyP+r4cf/p+HF/6Tfw/+i38L/n97A/5DZ
- tv9tzaD/a82f/2nMn/9ozJ7/Z8yd/2bLnf9ly5z/ZMuc/2PLnP9jy5z/Y8ub/2PLnP9jy5z/ZMuc/2XL
- nP9my53/Z8yd/2jMnv9qzJ//a82g/23NoP9vzqH/cc6i/3PPo/+K1rL/uebQ/6LYv/8igFn/Kn1V/6OH
- XP+wiF3/rYZd/6uFXf+ohFz/poJc/6SBXP+gf1v/xrOf/9fLvf+Ze1v/lnpb/5N4W/+Qdlv/jXRb/4pz
- Wv+AaE/+ZEktV////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AGlKKpxuTiz/dFIu/3lWMP9+WTP/g101/4hgNv+MYzj/kWc6/5VqPP+ZbT7/2sm2/8Ch
- gP+kdUL/qHhE/6x6Rf+vfUf/sH1G/7F+Rv9nfUz/G3xU/1+piP/L7Nz/1vDj/73n0f+65s//t+XO/7Tk
- zf+x48v/r+PJ/6ziyP+p4cb/puDE/6Tgw/+h3sH/nt7A/3bQpv9vzqH/bc2g/2zNoP9qzZ//acyf/2nM
- nv9ozJ7/Z8ye/2fMnv9nzJ3/Z8ye/2fMnv9ozJ7/acye/2rMn/9rzZ//bM2g/23Nof9vzqH/cM6i/3LP
- o/90z6T/dtCl/3jQpv+b3Lz/u+fR/4/Lr/8bfFT/PX9W/6+IXP+xiV3/r4dd/6yGXf+phF3/poNc/6OB
- W/+7o4n/5NzS/5t8W/+Ye1v/lXlb/5J3Wv+PdVr/jXRZ/4pzWf98ZUv3YUUpM////wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBoSilxbk4s/3NSLv94VTD/fVky/4Jd
- NP+IYDb/jGM4/5FnOv+Vajz/mm0+/6BzRP/l2cv/uJJp/6p5Rf+tfEb/r31G/7B+Rv+yf0b/gn5K/xt8
- VP9ClnL/xOjV/9nx5f/B6NT/vefR/7vm0f+55c//tuXN/7PkzP+x48r/ruLJ/6vhx/+o4cX/puDE/6Pf
- wv+g3sH/itey/3LPo/9xzqL/b86i/27Oof9tzaH/bM2g/2zNoP9rzaD/a82f/2vNn/9rzaD/bM2g/2zN
- oP9tzaD/bc2h/27Oof9wzqL/cc6i/3LPo/90z6T/dtCl/3jQpv960Kf/fNGo/37Sqf+q4cb/vujT/3K3
- mP8bfFT/WIJX/7SLXf+yiV7/r4dd/62GXf+qhF3/poNc/7GUc//p4dn/polp/5t8W/+Yelv/lXlb/5J2
- Wv+PdVr/jHRZ/4lyWf96YknnXEEkGP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AZ0kpSG1NK/xyUS7/d1Uw/31ZMv+CXTT/h2A2/4xjOP+RZzr/lWo8/5xxQv+vimL/x6qM/+3j
- 2f+1iVv/r31H/7B9Rv+xfkb/sn9G/5h/SP8ifFP/Lohi/7jhzf/a8eX/xurX/77n0v+959H/vObR/7rm
- 0P+45c7/teTM/7Ljy/+w48r/reLI/6rhxv+o4MX/peDD/6Pfwv+c3b7/d9Cl/3TPpP9zz6P/cs+j/3HO
- o/9wzqL/cM6i/2/Oov9vzqL/b86h/2/Oov9vzqL/cM6i/3HOov9xzqP/cs+j/3PPpP91z6T/dtCl/3jQ
- pv950Kb/e9Gn/33RqP9/0qn/gdKq/4XUrP+25M3/v+fT/1Oif/8bfFT/d4ZZ/7WLXv+yiV7/sIhe/62H
- Xf+qhV3/qYZg/+nh2P+1m3//nX5b/5t8W/+Yelv/lXhb/5F2Wv+OdFr/i3NZ/4hxWP90W0HNWkAkB///
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGVHKChrTCvwcVAt/3ZUL/98WDL/gVw0/4Zg
- Nv+MYzj/kWc6/5VqPP+gd0r/zbac/+HRwf/v5t3/+PTw/+HOuv+/l2v/sn9G/7OARv+ogEb/Ln1S/x9+
- V/+n18D/1/Dk/8vs2//A6NP/vufS/73n0f+85tH/u+bQ/7rlz/+35c3/tOTM/7Lky/+v48n/reLI/6rh
- xv+n4MX/pd/D/6Pfwv+G1K//eNCm/3fQpf920KX/dc+k/3TPpP90z6T/c8+k/3PPo/9zz6P/c8+k/3PP
- pP90z6T/dc+k/3XPpf920KX/d9Cl/3jQpv960af/e9Gn/33RqP9+0qn/gNKq/4LTq/+E06z/htSt/5DX
- s/+/59P/u+TP/ziPaf8dfFT/k4hb/7aMXv+zil3/sIhe/62GXf+qhV3/4dXH/8Ksk/+hf1v/nX5b/5p7
- W/+XeVv/k3da/5B1Wf+Mc1j/iXFY/4VtVv9kSy6k////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wBjRicBaUoqyW9PLP91Uy//elcx/4BbM/+GXzb/i2M4/5BmOv+Vajz/mm8//8WqjP/l2Mr/8uzk//r3
- 9P/8+/n/9e/p/+3h1P/VuJj/zrCM/0eJYf8bfFT/j8it/9Pv4f/R7t//wOjU/8Do0/++59L/vefR/7zm
- 0f+75tD/uuXP/7jlzv+25c3/tOTM/7Hjyv+v4sj/rOLH/6rhxv+o4MX/puDD/5nbuv980aj/e9Gn/3rR
- p/950Kb/eNCm/3jQpv930Kb/d9Cl/3fQpf930KX/eNCm/3jQpv940Kb/edCm/3rRp/970af/fNGo/33R
- qf9/0qn/gNKq/4LTq/+E06z/htOt/4fUrv+J1K7/jNWw/5zauv/D6dX/rtzG/yWCWv8ofVX/p4tb/7eM
- Xv+zil7/sIhe/62GXf/XxbL/0L2p/6OBW/+gf1v/nX1b/5l7Wv+WeVr/k3dZ/5B1Wf+Lclf/iHBX/3pi
- SP9cQSRU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGlLKmZwUTD/c1Iu/3lWMP9/WjP/hV41/4pi
- N/+Yckn/tZd3/8WrkP/QuaH/5dnK//Lr5P/48+//+/n3//z6+f/07eX/6t3N/86rg/9hil//G3xU/3G2
- l//O7d3/3/Pp/9rx5f/Z8eT/2PHk/9fw4//X8OP/1vDi/9Xw4v/U7+H/1O/h/9Pv4P++59L/s+TL/7Hj
- yv+v4sj/rOHH/6vhxv+o4MX/pt/D/4vWsf9/0qn/ftKp/33RqP980aj/fNGo/3vRqP970af/e9Gn/3vR
- p/970aj/fNGo/3zRqP990aj/ftKp/3/Sqf+C06z/suPL/7Pky/+05Mz/teTN/7bkzf+35M3/uOXO/7nl
- zv+55c7/ueXO/8Lo1P/D6db/mc+1/xt8VP86f1X/tIxc/7eNX/+0i17/sIhe/863n//czLz/poJc/6OB
- W/+fflv/nH1b/5h6Wv+VeFr/kXZY/450WP+KcVf/hnBX/2tRNuZZPyQM////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wBkRygTc1U27XNTMP93VDD/fVky/4NdNf+beVX/uqGG/867pv/FrZL/uZl2/7SOZv/Gp4X/4M25/+3i
- 1v/38uz/+fby/+zf0f/fyK7/eYRS/xt8VP9Dl3P/st/J/7Tgyv+04Mr/teHL/7Xhy/+14cv/teHL/7Xh
- y/+34cv/t+HL/7nizP/A59T/0O7f/8Dn0/+15Mz/s+PL/7Hjyv+v4sj/reHH/6vhxv+p4MT/pN/C/4bU
- rf+C06v/gdKq/4DSqv+A0qr/f9Kq/3/Sqf9/0qn/f9Kq/4DSqv+A0qr/gNKq/4HSqv+C06v/g9Or/4fU
- rv+/6NT/vefS/7bizP+04cv/teHL/7bhzP+24cz/tuHM/7bhzP+24cz/tuHM/7bhzP+24cz/arCR/xt8
- VP9Uglb/uY1d/7eMXv+zil7/z7ac/93Ovf+pg1z/pYFc/6F/W/+efVr/m3tZ/5d5Wf+Tdlj/j3VY/4ty
- V/+IcFf/gGlQ/2BGKY3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGlMK5p8X0D/dVMv/31aNP+dgGH/v6qT/8y6
- pv+8oob/poBY/55wQP+jdEL/qHhE/617Rv/LqYX/3ceu/+7j1//z6+L/3MOm/7mcbP8efFP/G3xU/xt8
- VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/4LDpP/Q7t//wOfT/7Xk
- zP+048v/s+PK/7Ljyf+v4sj/ruLH/6zhxv+p4MX/n92+/4bUrf+F06z/hNOs/4TTrP+E06z/g9Or/4PT
- q/+D06v/hNOs/4TTrP+E06z/hdOs/4bUrf+H1K3/i9Ww/8Ho1f+d1Ln/IH9X/xt8VP8bfFT/G3xU/xt8
- VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP+QiFn/uY1d/7eMXv/RuJ7/3s68/6yF
- Xf+og1v/pYFb/6F+Wv+dfFr/mXpZ/5V4WP+RdVf/jnNX/4lxVv+Gblb/c1tA+1pAJC3///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wBlRygvc1Y3/n1fPv+FZUP/vKiU/8i2o/+xlnr/mnNJ/5drPf+dcD//onNB/6d3RP+se0b/sH1G/7F/
- Rv+4iFL/28Gk/+TRu/+4hEX/t4RF/2+BS/9cgE3/XIBN/12BTf9dgU3/XoJN/16CTf9egk3/X4JN/1+D
- Tf9ghVD/ZIxc/2KMXf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/ruHH/6zh
- xv+q4cX/mdm5/4nUrv+I1K7/iNSu/4jUrv+H1K3/h9St/4fUrf+I1K7/iNSu/4jUrv+J1K7/itWv/4vV
- r/+O1rH/w+nW/4vFq/8bfFT/UYha/2OMXf9jjF3/Yote/2GJWv9ehFP/XYNS/12DU/9dg1T/XINU/1yD
- Vf9cg1X/YYNW/7CMWv+6jVz/uY1d/9S6nv/fzrv/rodc/6uFXP+ng1v/o4Bb/59+Wf+cfFn/l3lY/5R3
- WP+QdFb/jHJX/4hvVf+EbVX/ZUswwP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLKuBZEb/lntg/8S0o/+3oYr/j2hA/49m
- Ov+Vajz/m24+/6FzQf+mdkP/rHpF/699Rv+xfkb/s4BG/7WBRf/UtpH/38eq/7mFRf+7hkT/vIdE/76I
- RP+/iUP/wIpD/8OMRf/GkUv/x5RO/8iVTv/Ilk//yZZS/9Clav/Rp23/y6Zu/xt8VP9psJD/0O7f/8Dn
- 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MT/ldi2/4zVsP+M1bD/jNWw/4vV
- r/+L1a//i9Wv/4zVsP+M1bD/jNWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wr/xt8VP+jmmX/0KVr/8+l
- a//PpGz/zqRt/8eYWf/CkVH/wZBR/8CPU/+/j1T/v49W/76PV/+9j1j/vI5a/7uOW/+6jVz/1ryg/+DO
- uv+yiFz/rodc/6mEW/+mglr/oX5Z/559Wf+aelf/lndX/5F1Vv+Nc1b/iW9U/4VuVP9zW0H/WkAkOv//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wBlRygodFc3/Z2Gbv/NwLP/p450/4ZhN/+NZDn/k2k7/5ltPv+fcUD/pXZD/6p5Rf+vfUb/sX5G/7OA
- Rv+0gUX/toNF/9a4lP/fxqf/u4ZE/72IRP/AjUr/xZNR/8mZWv/NoGP/z6Rp/9Glaf/RpWr/0aZs/9Gn
- bf/RqG7/0ahw/9Gpcf/Lp3H/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h
- x/+t4cb/rOHG/6vgxf+p38T/lti2/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V
- sP+N1bD/kNay/8Pp1v+Lxar/G3xU/6OcZv/RpWv/0aZr/8+la//PpGz/zaJo/8ORT//DkFD/wZBR/8GQ
- Uv+/kFT/v49V/76PV/+9jlf/vI5a/7qNW//WvKD/4c66/7WKXf+wh1v/rIVb/6mCWv+kgFr/oH1Y/5x7
- WP+YeFf/k3ZW/49zVf+LcVX/h25T/4FpUf9eRCe3////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLaOTe2D/zcG0/7GbhP+IYzv/i2M4/5Fn
- Ov+XbD3/nXA//6N0Qv+peUT/r31H/7F+Rv+zgEb/tIFF/7aCRf+4hEX/2LuW/97EpP+9iET/x5da/8yh
- aP/Oomn/z6Np/9Ckaf/RpWv/0aZs/9Gobv/RqG//0qlx/9Kqcv/SqnP/0qpz/8ypc/8bfFT/abCQ/9Du
- 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+o38P/l9m3/43V
- sP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xn/9Gn
- bf/Rp2z/0aZs/9Cla//QpWz/yZla/8ORTv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/vI1a/9e9
- oP/hzbj/t4xd/7SKXP+vh1v/q4Ra/6eBWf+jf1n/nnxX/5p5V/+Vd1b/kXRW/4xxVP+Jb1P/hGxS/2tR
- N/9ZPyMy////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wBkRygieF4++8m8rv+3pJD/k3RT/4piOf+OZTn/lWo8/5tuPv+hc0H/p3dE/618Rv+wfkb/sn9G/7SB
- Rf+2gkX/uIRF/7qFRP/YuZL/4Mio/8WVVv/NoWn/zqNp/8+lav/RpWr/0ads/9Gnbf/SqG//0qlw/9Kq
- c//Sq3P/0qt0/9Ksdv/TrHf/0LB+/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di
- yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/mdm4/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V
- sP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8VP+inGj/0ahu/9Gobv/Rp23/0aZs/9GmbP/Oomf/xZFN/8OR
- Tv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/2L6h/+DMtv+5jFz/totd/7KJXP+thlv/qYNa/6SA
- Wf+gflj/m3tX/5d4V/+TdVX/jnJU/4pvU/+FbFL/emJI/1xBJK3///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////UtXMxM/Nw7f/yLqs/5N0VP+Tck7/i2M4/5Jo
- O/+YbT3/n3FA/6V2Q/+sekX/sH1G/7F/Rv+0gEb/toJF/7eDRf+5hUX/u4ZE/9Sxhf/o1Lz/zaJq/8+k
- av/QpWv/0aZr/9Knbf/SqG//0qlw/9Kqcv/SqnT/0qt1/9Ksd//TrXj/0615/9Ouef/VvJT/G3xU/2mw
- kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf
- w/+m3sL/m9q6/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/6Od
- af/OpGr/z6Rq/9Gnbv/Rp23/0qdt/9GmbP/HllH/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/72O
- Vv/awaP/3siw/7mMW/+4jFv/tIlc/6+GWv+shFr/p4FZ/6N/WP+de1b/mXlW/5R2VP+Qc1T/i29S/4dt
- Uv+BalD/Y0ks/Vg+Ixv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /yz+/v2x6+jj/Pbz8f/FtqX/lHVV/49pQf+PZjn/lWo8/5xvP/+jdEL/qXlE/699Rv+xfkb/s4BG/7WC
- Rf+3g0X/uYVF/7uGRP+9iET/065//+/hz//PpGv/0aZs/9KmbP/SqG7/0qhv/9Kqcv/SqnP/0qx1/9Ks
- dv/TrXj/0655/9Oue//Tr3z/1bKC/9rHpf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi
- yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/ndu7/43VsP+N1bD/jdWw/43V
- sP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xo/8aVUf/FlE7/yZlV/86jZ//Rp27/0qdt/8yc
- XP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/+HMtP/YvZ3/uoxZ/7iMW/+3i1v/sohb/66F
- Wf+pgln/pH9X/6B8V/+belX/lndV/5FzU/+NcFL/iG5R/4NrUP9xWD3/WkAkdv///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////avb08t/6+fj/+vn3/9zTyf+Tck//i2M4/5Jo
- O/+ZbT7/oHJA/6Z2Q/+te0b/sH5G/7J/Rv+0gUX/t4NF/7mERf+7hkT/vYdE/7+JRP/Ws4b/8ufY/9Kn
- bv/Sp23/0qhv/9Kpcf/SqnP/0qt1/9Ksdv/SrXj/0656/9Ove//UsH3/1LB+/9Sxfv/cv5b/2cWi/xt8
- VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf
- w/+o38P/pt7C/6bewf+k3sD/ntu8/47Vsf+N1bD/jdWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8
- VP+qrIP/3L+V/86kaf/FlFD/xpRO/8mZV//PpGj/zJtb/8eSTP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8CP
- Uv++j1T/6dnG/9Gxi/+7jFj/uoxZ/7iLW/+1iVr/sYda/6yEWP+ngVj/on5W/517Vf+Yd1T/k3RT/49x
- Uv+JblH/hWtQ/35lTf9cQSbT////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///927+zp8f38/P/6+fj/5+DZ/5FtR/+OZTn/lWo8/51wP/+jdEL/qnlF/699Rv+xf0b/tIFG/7aC
- Rf+4hEX/uoZE/7yHRP++iUT/wYxH/9WxgP/z6Nn/1q56/9KocP/SqXL/0qt0/9Osdv/TrXj/0615/9Su
- e//Ur3z/1LB+/9Sxf//UsYD/1bSE/+HKqf/UupH/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj
- yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//nNu7/43V
- sP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/7zMt//w49H/6tnA/9Cocf/HmFb/xZNO/8aT
- Tv/Gk07/x5JM/8eSS//Gkkv/xZFM/8OQTv/DkE//wY9R/8GRVP/v5Nb/y6V4/7uMVv+6jFj/uYtZ/7eL
- Wv+ziFr/roRY/6mCV/+kflb/nntV/5p3VP+VdVP/j3FR/4pvUf+Fa0//gWhO/2NIK/9YPiMw////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////APHv7GLm4dz++/r5//Tx7v/c0sf/jGU7/5Fn
- Ov+YbT3/oHJA/6d3Q/+tfEb/sX5G/7OARv+1gkX/t4NF/7qFRP+8h0T/vohE/8CKQ//Km13/1Kx3//Po
- 2f/Ztof/0qpy/9Osdf/TrXf/0654/9Sve//UsHz/1LB+/9Sxf//UsYH/1LOC/9Szg//av5b/4cqp/8+0
- hv8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg
- xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//lti3/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vF
- qv8bfFT/vM25//Tr4P/w49H/272T/9Gpc//Ln2L/xZNP/8aTTv/Gk03/x5NN/8eSSv/Fkkv/xZBM/8OQ
- Tv/CkE//x5xl//Dl1//Emmb/vIxV/7uMVv+5i1j/uItZ/7WJWv+whln/q4NX/6Z/Vv+gfFX/nHlU/5Z1
- Uv+RclL/jG5Q/4drT/+BaE3/ak8z/1k/JIz///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AeV9EWdvTy//w7On/4dnR/7Sdg/+NZDn/lGk8/5xvP/+jdEL/qnlF/699Rv+yf0b/tIFF/7eD
- Rf+5hEX/u4ZE/72IRP+/iUP/xpRS/9Gnbv/SqG//8+fY/929kv/TrHX/0614/9Ouev/Ur3z/1LB9/9Sx
- gP/UsoD/1LOC/9W0hP/VtIX/1bWH/+HKqf/cwpv/z7SH/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj
- yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld
- v/+h3L7/ktez/43VsP+N1bD/jdWw/5DWsv/D6db/isWq/xt8VP+0v6L/7d/L/+rYwP/fw57/27yR/9Su
- e//OpWv/xpRQ/8aTTv/Gk03/x5JL/8eSSv/Fkkv/xJBM/8OQTv/QqHb/8OTV/8CPU/+8jVT/u4xV/7qL
- V/+4ilj/t4pZ/7KHWP+thFj/qIBW/6J9Vf+deVP/mHZS/5JyUf+Nb1D/iGxO/4NpTf9wVTn/XEEk2f//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSmTxbeq/9TIvf+1oIn/iGE3/5Bm
- Ov+XbD3/n3FA/6Z2Q/+tfEb/sX5G/7OARv+2gkX/uIRF/7qGRP+8h0T/v4lE/8GLQ//Pomf/06lv/9Oq
- cf/w4s//4MWe/9OteP/Trnr/1LB9/9Swfv/VsoD/1bKC/9Wzg//VtIX/1bWG/9a2iP/bvpb/4s2t/9e5
- jv/Qt4v/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vg
- xf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+e27z/j9ax/43VsP+N1bD/kNay/8Pp
- 1v+Kxar/G3xU/6SjdP/YuY3/17aH/9Wzgv/bvpT/3sKb/9m4if/Pp23/xpRQ/8aTTf/Gk0z/xpJK/8eS
- Sv/FkEv/xJBM/9a0if/q2sT/v45Q/76NUv+8jFP/uotV/7iKVv+3ilj/tIhY/6+FV/+pgVX/pH1U/556
- Uv+ZdlH/lHNQ/49wT/+IbE3/g2hM/3VcP/9eQiX/Vj0iG////wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AGtNLNXKvrH/rpqC/4ZhOv+LYzj/kmg7/5puPv+ic0H/qnlF/699Rv+yf0b/tIFF/7eD
- Rf+5hUX/vIdE/76IRP/AikP/woxD/9GmbP/TqnH/06t0/+3cxv/jzKn/1K97/9Wwff/VsX//1bKB/9Wz
- gv/VtYX/1bWG/9a1iP/Wton/1reK/+DJp//exqL/1rmO/9C4jf8bfFT/abCQ/9Du3//A59P/teTM/7Tj
- y/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pd
- v/+i3b//ody+/6Dcvf+Y2bf/jdWw/43VsP+Q1rL/w+nW/4rFqv8bfFT/paR2/9W0hf/Zu5D/1LB//9Ku
- ev/WtIP/3cCW/9y+lP/SrHj/xpVR/8aTTP/Gk0z/xpJJ/8aRSv/EkEv/3cCb/+TOsf/Ajk//vo1Q/72N
- Uv+7i1P/uYpV/7iJVv+2iVj/sYVX/6uCVf+mflP/oXtS/5p3UP+VdE//j29P/4lsTf+EaUv/e2FG/19D
- Jv9YPiNd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBjRicXcFIy/9TJvv+iiW3/hV81/41k
- Of+Vajz/nXA//6V2Q/+te0b/sH5G/7OARv+2gkX/uIRF/7qGRP+9iET/v4lD/8KLQ//EjUP/0KRp/9Or
- dP/UrXf/6dW6/+jVuv/VsH3/1bGA/9Wygv/VtIT/1bWG/9W2h//Wtoj/1riK/9a4jP/YvJL/4s6x/9i+
- lv/WupH/0bmQ/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zh
- xv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/57bvP+O1bH/jdWw/5DW
- sv/D6db/isWq/xt8VP+lpXf/1LOD/9m6j//Wt4j/0699/9Kuev/Trnr/2biK/93Al//Ws4P/xpdS/8aT
- TP/Gk0v/xpFJ/8aRSv/kza7/3sKe/8COTv+/jU//vY1R/7yMUv+5ilP/uIpV/7eIVv+zh1f/roRX/6iB
- Vv+mglv/nHhR/5ZzT/+QcE7/i21M/4VpS/9/ZEn/YkYo/1k/JJ////8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AGVHKFl4Wjv/08i9/5+CZf+IYDb/kGY6/5hsPf+gckH/qHhE/699Rv+xf0b/tIFF/7eD
- Rf+5hUX/vIdE/76JRP/AikP/w4xD/8WOQ//Nn2D/1K13/9Suev/jy6n/7+DM/9WygP/Vs4L/1bSF/9W1
- h//Wtoj/1reK/9a4jP/WuYz/17qO/93Eof/hy63/17yT/9i8k//SupH/G3xU/2mwkP/Q7t//wOfT/7Xk
- zP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6Te
- wP+j3b//ot2//6Hcvv+g3L3/n9y8/5TYtf+N1bD/kNay/8Pp1v+Kxar/G3xU/6Wmev/UtIX/1reJ/9m6
- j//TsYD/0699/9Kuev/SrXj/1bF+/9u7kP/Yt4j/yp1e/86kZ//fwpr/6NCx//bu5P/bwJj/wo5M/7+N
- Tv++jE//vIxR/7uKUv+4iVT/t4hV/7iMXf+5k2r/r4he/6yKZP+deFD/l3RO/5FxTf+LbEv/hmhK/39l
- SP9nSy3/W0Ak4f///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZ0kpjIBiRP/Rxbj/noFj/4pi
- N/+SaDv/mm4+/6N0Qv+qeUX/sH1G/7OARv+1gkX/uIRF/7qGRP+9iET/v4pD/8KMQ//EjUP/xY9F/8iW
- Uf/Urnr/1K98/97BmP/z6dv/1rWF/9W1hf/Wtof/1raJ/9e4i//XuIz/17mO/9e6kP/Xu5H/4c2v/97G
- o//YvZX/2L2W/9K7lP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63h
- xv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/m9q6/43V
- sP+Q1rL/w+nW/4rFqv8bfFT/pad7/9S1h//UtIX/2byR/9a1hv/TsH7/0q98/9Kuev/SrXj/0qt2/9ez
- g//fwpz/7d7J//Tq3f/48ur//fv4//Lm1//XtYj/wI1M/76MTv+9jE//u4tR/7mJUv+5i1f/v5ds/7uW
- a/+1kWn/q4Vd/594T/+ZdE7/knBM/4xsS/+FaUn/gWVI/2xRM/9cQSX/VDshFP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wBoSim0hmpM/8y/sf+jhmj/jGM4/5RpPP+dcD//pXZD/618Rv+xfkb/tIBG/7aD
- Rf+5hUX/vIdE/76JRP/CjUb/w41D/8WORP/FkEf/x5RQ/9KrdP/VsX7/2LeJ//Pq3P/cwJj/1raI/9e3
- if/XuIv/17mN/9e6j//XupD/17uS/9rAm//j0LT/2cCa/9i/mP/Yv5n/0ryX/xt8VP9psJD/0O7f/8Dn
- 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6be
- wf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/kdaz/5DWsv/D6db/isWq/xt8VP+mqH3/1LaJ/9S1
- iP/XuY7/2LqP/9SxgP/TsH7/0q98/9Kuev/SrHf/0qt0/+XOr//0697/+/jz//79+//+/fz/9/Dn/+va
- w//HlFj/v4xM/72LTv+7ik//uYpR/7+UZP/AmWz/vZVr/7eRaf+nf1P/n3lP/5l1Tf+TcUz/jWxL/4dp
- Sf+AZEf/d1xB/19DJ/9VPCI8////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGpLKtuNclX/v62b/7Ka
- f/+OZTn/l2s9/59xQP+nd0T/r31G/7J/Rv+1gUX/t4NF/7qGRP+9iET/v4pD/8KNRP/FjkP/xY9G/8WR
- Sf/Fkkz/z6Zt/9aygf/WtIP/8eXV/+LLqv/Xt4r/17iM/9e5jv/XupD/17yS/9e9lP/YvZX/3smn/+HM
- r//Yv5n/2MCa/9jBm//Svpn/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h
- x/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57b
- u/+Y2bf/kNay/8Pp1v+JxKn/G3xU/6epf//Vt4z/1LaK/9W2if/ZvJP/1bWG/9SxgP/TsH7/0q98/9Kt
- ef/SrHf/59Gy//Pm1v/69vH//v39//79+//38Of/69rD/8iaXP+/jUz/votM/7yKT/+9jlf/w5ps/8GY
- bP++l2v/to9k/6d9UP+geU//mXVN/5RwS/+NbUn/h2lI/4RoSv95X0P/Y0gs/1Y9ImP///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wBhRScGb08v/JF3Wv+tln3/w7Cb/5BmOv+YbT3/oXNB/6p5Rf+wfUb/s4BG/7aC
- Rf+5hEX/u4ZE/76IRP/CjUb/xI9H/8WORP/FkEf/xZJK/8WTTf/Qp27/1rOD/9a1hv/r3MX/59a8/9e5
- jf/XuY7/17uR/9e8kv/YvZT/2L6W/9i/mP/j0LP/3cel/9nBm//ZwZ3/2cKe/9PAnP8bfFT/abCQ/9Du
- 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6be
- wv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/5zbu/+Q1rL/w+nW/4nEqf8bfFT/p6qA/9W5
- jf/Ut4v/1LaJ/9e6kP/XuY//1LKC/9OxgP/SsH7/0q57/9KteP/ewZr/6tnB//Tq3f/9+/j/+vbw//Po
- 2f/ky6f/wo5O/8CNSv++i0v/vYtO/8OZZv/Dmmn/wZhq/7+Xa/+0il3/qH5Q/6F5Tv+bdUz/lHFK/45t
- Sf+HaEf/hmpM/3pgRP9mSy//Vz0ji////wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGJGJyp1WDj/k3db/5t9
- Xv/Sw7P/lWxA/5tuPv+jdEL/rHtG/7F+Rv+0gEb/t4NF/7mFRf+8h0T/v4lE/8KMRP/EjUP/xY9G/8WR
- Sf/Fk0z/xpRP/8ufYv/WtYb/1raI/+bSt//t4Mz/17qP/9i7kf/YvJP/2L2V/9m+lv/Zv5j/3MWi/+PS
- t//aw5//2cKe/9nDoP/aw6H/1MGf/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di
- yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/c
- vP+e27v/ndu7/5PXtP/D6db/icSp/xt8VP+nq4L/1rqQ/9W5jf/Ut4v/1biM/9i7k//JoGb/0Kx3/9Ox
- f//Sr33/0q56/9Cpcf/UsYD/5tCy//n17v/r173/5Mqo/9Wqdf/Gk1D/wI1I/7+MSv/ClFv/xpxp/8Oa
- af/BmGn/v5Zq/7OHWf+pflD/o3lN/5x1S/+VcUr/j2xI/4hoRv+Kb1H/fGBD/2hML/9YPiOy////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AZEYoSnxgQv+Vel3/hGA7/8+/rf+tjWv/nXA//6Z2Q/+ufEb/sX9G/7SB
- Rf+3g0X/uoZE/72IRP/AikP/w4xD/8WORP/FkEf/xZJK/8WTTv/GlVH/xpdV/9Sxgf/XuIv/4cmo//Pp
- 3P/YvJL/2LyU/9i+lf/Zv5f/2cCa/9nBm//gzK7/4M6x/9nDn//axKH/2sSi/9rFo//Uw6H/G3xU/2mw
- kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf
- w/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57bu/+d27v/lti2/8Pp1v+JxKn/G3xU/6er
- g//Wu5L/1rqQ/9W5jf/QsH//z6x6/8qjav/HnWH/0q97/86ocv/Hm1v/xpdV/8aWU//XtYX/7d7J/8WR
- Sv/FkUf/zZ9f/9ClbP/Hllj/wIxK/8ebZf/Gm2j/xJlo/8GYaf+/lmn/tIdX/6p+T/+kek3/nHVM/5Vx
- Sf+PbUj/iGhG/4drTv97X0L/aE0w/1k/I9L///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBkRyhWgWVH/5N3
- Wf+CXDT/tp2C/8q0nf+ecED/p3dE/699Rv+yf0b/tYJF/7iERf+7hkT/volE/8GLQ//EjUP/xY9F/8WR
- Sf/Fk0z/xpRP/8aWU//GmFb/yZ9j/9a2if/cwZr/9Ozf/9zEoP/YvZb/2b+Y/9nAmf/ZwZz/2sOf/+PS
- uP/dyar/2sSi/9rFo//axaT/28am/9TEpP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi
- yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dc
- vf+f3Lz/ntu7/53bu/+Y2bj/w+nW/4nEqf8bfFT/p6yE/9a8k//WupH/0bKD/8mja//Nqnj/0rOE/9Ct
- ev/OqHL/z6p0/8uiaP/KoGT/yJtb/+LJpv/jy6n/xZJL/8WQSP/Fj0b/zZ9h/9SufP/QqHX/yJ1n/8ab
- Zv/EmWf/wpho/7+Xaf+2ilr/q35O/6R5TP+ddkr/lnFI/49sRv+HZ0T/gWJC/3dbPP9pTjH/WT8k4P//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AGVHKGKEaUv/jnFQ/4NdNf+adk//2Mi2/6yEWf+peET/sH1G/7OA
- Rv+2gkX/uYVF/7yHRP+/iUP/woxD/8WOQ//FkEb/xZJK/8WTTf/GlVH/xpdU/8aYV//Gmlv/yqFn/9e6
- j//y6dv/49Cy/9nAmf/ZwJr/2sGd/9rCnv/dyaj/5NS6/9vGpP/bxqT/28em/9vHp//bx6j/1MWl/xt8
- VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf
- w/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/ndu7/5vauv/D6db/icSp/xt8
- VP+nrYb/1r2V/9W7kv/IpW7/zq58/9S3jP/YvJT/1beK/9Szhf/TsoH/0rF+/9Kve//SrXr/7+LQ/9q5
- jP/Fk0z/x5RP/82fYP/PomT/0KVs/9Wyg//QqXj/xptm/8SZZv/Cl2f/wJZn/7qPYP+rfk7/pXpL/511
- Sf+WcEf/j2tF/4hnQ/+AY0L/el9C/2dMLv9ZPyTt////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZUcoboZr
- Tv+HZ0b/g101/45lOf/FrpT/0Lmg/6t6Rv+wfkb/s4BG/7eDRf+6hUT/vYhE/8CKQ//DjEP/xY5E/8WQ
- SP/Fkkz/xpRP/8aWU//GmFb/xplZ/8ebXP/HnV//zKZw/+vdx//r3cj/2sGb/9rCnf/awp//2sSg/+DO
- sP/i0bb/28am/9vHp//byKj/28ip/9vJq//Uxqj/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj
- yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hc
- vv+g3L3/n9y8/57bu/+d27v/ndu7/8Pp1v+JxKn/G3xU/6euh//Wvpf/1r2V/9S4jv/WupH/1biO/9e7
- k//WuY//1LSG/9SzhP/TsYH/0rB+/9m7kP/06t3/1rSD/82iZv/Ppmv/0KRp/8+iZv/OoGT/zqNs/9Sv
- gv/Op3j/xJpm/8KXZf/Almf/vJJj/61+Tf+leUv/nnVJ/5ZwR/+Pa0T/iGZD/4RmRv97X0H/ZEco/1k/
- JPr///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wBlSCh5iW1R/4BdOv+EXjX/jmU5/6B4S//ZxrL/xKF8/7F+
- Rv+0gUX/t4NF/7qGRP++iET/wYtD/8SNQ//Fj0X/xZFJ/8WTTf/GlVH/xpdU/8aYV//Gmlv/x5xe/8ee
- Yf/HoGX/2b+Y//Dl1f/Yv5n/2sOe/9rEof/axaL/49O5/+DOsf/bx6j/28ip/9vJq//byqv/3Mqt/9XI
- q/8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg
- xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/53bu/+e27z/xOnX/4nE
- qf8bfFT/p66J/9e/mf/WvZf/1ryV/9a7kv/VuZD/1rqQ/9e8k//UtYj/1LSE/9Oygf/SsX//5dCx/+7f
- y//Rq3X/0Kly/9Cnbv/QpWr/z6Nn/86hZP/Mn2P/zKFs/9Ovgv/MpXj/wpdl/8CVZf+9k2X/rn9O/6V5
- Sf+edUj/lm9F/5BsRf+IZUH/iGpL/3RXN/9jRif/WT8k/1A5IAf///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGVI
- KISLcFX/flw3/4VeNf+PZjn/mW0+/7qXcv/fy7b/uYxZ/7WBRf+4hEX/u4ZE/76JRP/Ci0P/xY5D/8WQ
- Rv/Fkkr/xZRO/8aWUv/Gl1X/xplZ/8ebXP/HnWD/yKBl/8ehZ//OrHr/7uPT/9Cyhf/WvZX/28Wj/9zI
- qP/k1b7/3cut/9zJqv/cyav/3Mqs/9zLrv/cy67/1cmt/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj
- yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld
- v/+h3L7/oNy9/5/cvP+e27v/ndu7/57bvP/F6tj/icSp/xt8VP+nr4r/18Cb/9e/mf/WvZf/1ryU/9W6
- kf/VuY7/2L2U/9W3i//UtYb/1LOE/9OxgP/w5NP/4sqp/9Grdf/RqnL/0Khv/9CmbP/Po2f/z6Jk/82f
- Y//KnWT/yp9r/9Ctgv/Jo3b/v5Vl/72UZP+wglH/pnlK/55zR/+Xb0T/j2lB/4dlQP+Iakz/bk8t/2NG
- J/9ZPyT/UDggFP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8AZUcofotxVf99WjX/hV81/49mOv+abT7/pHZD/9S6
- nf/XvaD/tYJG/7mERf+8h0T/v4lE/8KMQ//FjkT/xZBI/8WSTP/GlE//xpZT/8aYV//Gmlr/x5xe/8ee
- Yf/Hn2X/x6Fo/8ija//p2sT/2sSg/8use//bxqX/4M2w/+TVvv/cyar/3Mqs/9zLrv/dzK//3c2w/93N
- sf/WyrD/G3xU/2mwkP/Q7t//w+nV/7jkzv+35M3/tuTM/7Xjy/+048v/s+PK/7Liyf+x4sj/sOHI/6/h
- x/+u4Mb/reDF/6zgxf+q38T/qt/D/6jewv+n3sL/pt7B/6XdwP+k3cD/o9y//6Lcvv+h3L3/oty+/8fq
- 2P+JxKn/G3xU/6ewjP/XwJz/17+a/9a+mP/WvZX/1ruT/9W6kP/XvJT/1rqP/9S1iP/UtIT/2r+W//Pr
- 3v/Xtoj/0qx4/9Gqc//QqXD/0Kds/9Ckaf/PomT/zaBj/8qeY//Im2P/yJ1q/86rgf/HoXb/vZNk/7KF
- VP+meEj/nnRG/5ZuQ/+OaUH/iGZD/4dpSf9sTSv/Y0Yn/1k/JP9QOCAN////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wBlRyhzim9U/3xaNP+FXzX/j2Y6/5puPv+kdUL/tohX/+DMtf/LpXr/uYVF/7yHRP/AikP/w4xD/8WP
- RP/FkUn/xZNN/8aVUf/Gl1X/xplY/8ebXP/HnV//x59j/8egZv/Iomn/yKRs/97Kqv/l1bz/yah1/9G2
- jP/h0Lf/4tK5/9zLrP/czK//3cyw/93Nsf/dzbL/3c6z/9bMsP8bfFT/abCQ/8zs3P/T7+H/0+/h/9Pv
- 4f/S7+D/0u7g/9Hu4P/R7t//0O7f/9Du3//P7t//z+3e/8/t3v/O7d7/zu3d/83t3f/N7d3/zOzc/8zs
- 3P/L7Nz/y+zb/8vs2//K7Nv/yuvb/8nr2v/J69r/x+rY/4nEqf8bfFT/qLGN/9fBnv/XwJz/17+a/9a+
- l//WvJT/1buS/9a7kv/XvJP/1LaJ/9S0hv/l0rb/7d/L/9KvfP/SrXj/0at1/9Cpcf/Qp27/0KRq/8+i
- Zf/NoGP/y55j/8icY//FmGH/xZtq/8upf//Dm3D/tYlZ/6Z4R/+ec0T/lWxB/49qQ/+LaUb/g2JC/25P
- Lf9iRif/WT8j/k83HwH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGRGKGeIbVD/e1cz/4VfNf+PZjr/mm4+/6V2
- Q/+vfUb/x6N6/+LNtP/ClFz/vYhE/8CKQ//DjUP/xY9F/8WRSv/Fk07/xpZS/8aYVv/Gmln/x5xd/8ee
- Yf/Hn2T/x6Fo/8ija//IpG7/1LmQ/+3j0v/LrHz/yat7/9jCn//byar/3Myv/9zMr//WwqH/1MCe/9jH
- qP/czbL/1cuw/xt8VP9LnHr/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I
- rf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I
- rf+OyK3/YauL/xt8VP+osY7/18Kg/9fBnv/XwJv/176Z/9a9lv/VvJP/1bqQ/9e9lP/VuIz/1LWH/+/k
- 1P/iy6v/0q99/9Ktev/Rq3X/0aly/9Cnbv/QpWv/z6Nn/82hY//LnmP/yJxj/8WZYv/ClmH/xJxu/8im
- gP+7kWX/pnlH/51xQ/+WbkP/lXNN/45tS/+BY0L/d1s8/2JFJ/9YPiPz////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AY0YnW4ZrT/96VzL/hV41/49mOv+abj7/pXZD/699Rv+zgEf/1LaS/+LLsP/Fllv/wYtD/8SN
- Q//Fj0b/xZJK/8WUT//GllP/xphX/8aaW//HnF7/x55i/8egZv/Iomn/yKVu/8ilcP/Kqnj/7ePS/9S7
- lP/MsYP/1sGf/8qxhP/byaz/1cGf/9C6lf/OuZP/yrSM/8q1jv/ItY//L4Nb/xt8VP8bfFT/G3xU/xt8
- VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8
- VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/IX5X/7u6mP/YxKL/18Kg/9fB
- nP/Xv5r/1r6Y/9a8lf/Vu5L/17yT/9a7kP/bwpz/8+ve/9e4jf/SsH//0q57/9Gsd//RqnP/0Kdv/9Cl
- a//Po2f/zqFk/8ufY//JnGP/xpli/8OXYf+/lGH/xaF3/8Ohev+pfk7/nXFC/5x2Tf+ZdlL/kHBP/4Nl
- Rf96XkD/YkUn/1c9I+X///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBiRSdPgmdL/3lWMP+EXjX/j2Y5/5pu
- Pv+ldkP/r31G/7OARv+3g0f/1reR/+PMr//ImVn/xY5D/8WQR//Fkkv/xpRP/8aXVP/GmVj/x5tc/8ed
- YP/Hn2P/x6Fn/8ija//IpG7/yKZy/8iodf/l17//3syv/8+3jf/Uv5v/zLKH/9vKrP/ez7T/3s+2/97Q
- t//Xxqj/y7eQ/8y4kf+6soz/laZ//5angP+Xp4L/oLSV/5eogv+XqIL/l6mD/56zk/+iuJr/oLSW/5yv
- jf+iuZz/ormc/6G3mP+fs5P/orea/6G3mv+it5r/obeZ/6G2mP+gtZf/oLSW/6C0lf+fs5X/nrKU/56y
- k/+esZH/nbCQ/52wj/+3uZn/2cam/9XBnv/Qt47/0LeO/9fAm//Xv5j/1r2W/9W8k//Wu5L/17uR/+XT
- uf/s38v/07KC/9Owf//Srnz/0ax3/9GrdP/QqHD/0KZr/8+jZ//OoWT/y59j/8mcY//GmWL/w5dh/8CU
- Yf+9lGP/xKF7/7eSav+lfVL/oHtV/5l2Uv+Ob03/g2RE/3ldP/9hRSf/Vj0i2P///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AGFEJjp5XT7/d1Uw/4NdNf+OZTn/mm0+/6R1Qv+vfUb/s4BG/7aDRf+7hkb/2bmR/+TN
- rv/Mm1n/xZBI/8WSTP/GlVD/xpdV/8aZWf/Hm13/x55h/8efZf/Iomn/yKNs/8ilcP/Ip3P/yal2/9vH
- pv/p3cn/0ryV/9K8l//dzbH/3s+1/97Qt//e0bj/39K6/9/Su//Uw6L/zrmT/9C+mv/PvJf/0LyX/9C9
- mP/g07r/0b6a/9LAm//czrL/4te//+LVvv/WxKP/3tC1/+PWv//j1r//4ta+/+LVvv/h1b3/4dS8/93P
- s//ez7T/39K6/97SuP/e0bf/3dC2/9zPtP/czrP/2syx/9rLr//Zyq3/2cmr/9nIqv/Zx6f/0LiR/8mu
- gP/Ns4f/18Gd/9fAmv/WvZf/1byU/9W7kf/XvZT/8OXV/+LMrf/Ts4T/07GA/9KvfP/RrXj/0at0/9Cp
- cf/Qpmz/z6Ro/8+iZP/Mn2P/yZxj/8aZYv/Dl2H/wJRh/7ySYf+8lWj/v515/6yIYf+fe1X/lnVQ/41t
- S/+CY0T/dlo8/19DJv9VPCLC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AX0MmE25QL/92VC//gl00/45l
- Of+ZbT7/pHVC/699Rv+zgEb/toNF/7qGRP+/iUb/27qQ/+bOrf/MnV7/xZNN/8aVUf/Gl1X/xppa/8ec
- Xv/HnmL/x6Bm/8iiav/IpG7/yKZx/8iodf/Jqnj/zrOH/+3k1f/byav/z7iQ/9vLrv/e0Lf/3tG5/9/S
- uv/g07v/4NS8/+DTu//Xxqf/0L2Y/9C9mP/Rvpn/0r+a/9zNsP/UwZ7/3tG2/+PYwv/j1r7/18ak/9vM
- rv/j2MH/5NjB/+PYwf/j18D/4te//+LWv//g0rn/0sCb/9K/m//TwJ7/1sOi/9fHpv/TwZ//0b6b/9PB
- n//ay6//2syx/9rLr//Zya3/2cir/9nHqP/TvZn/yq+C/9O9mP/XwZ7/18Cb/9e/mP/VvJX/1buS/+DL
- rP/y6d3/17qP/9OzhP/TsYD/0q99/9Gtef/Rq3X/0alx/9CmbP/PpGj/z6Jk/8yfY//KnGP/xpli/8OX
- Yf/AlGH/vJJh/7iNX/+4lW7/tZVz/557Vf+VdFD/i2tJ/4BjQ/9yVzn/XUIl/1M6IZv///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AaUoq63VTL/+AWzT/jGQ4/5hsPf+jdEL/r31H/7J/Rv+2g0X/uoZE/76I
- RP/DjEX/3byQ/+bPr//MoGL/xpZS/8aYVv/Gmlr/x5xf/8efY//HoWf/yKNr/8ilb//Ip3L/yal2/8mr
- ev/JrH3/5trE/+baxf/MtYz/1cOi/9/Ruf/f0rr/4NO8/+HUvf/h1b7/4ta//+LXwP/h1Lz/08Gc/9LA
- m//TwJz/1cOh/93Psv/k2cT/5dnD/9nIqf/h1Lv/5NnD/+Taw//k2cL/5NnC/+TYwv/k2MH/49fB/+LW
- vv/Vwp//08Gc/9PAm//Sv5r/0b6Z/9C9mP/PvJb/0b2Z/9vLr//bzbL/2syx/9nKr//Zyaz/2Meo/8+4
- kf/Ms4j/18Oi/9fCn//XwJ3/17+Z/9W9lv/Vu5P/7eDN/+nYwv/UtYn/07SF/9Oygv/SsH3/0a15/9Gr
- dv/RqXL/0KZt/8+kaf/PomT/zJ9j/8qcY//GmWL/w5dh/7+UYf+8kWH/t41f/7CIXf+0lXL/pYRf/5Nx
- Tf+JaUj/f2ND/25SNf9bQCT/UTkgc////wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSnEc1Eu/39a
- M/+LYzj/l2s9/6JzQf+tfEb/sn9G/7aCRf+6hUT/vohE/8KLQ//Gj0b/3b6T/+bRs//TrXj/xphW/8aa
- W//HnV//x59k/8ehaP/Io2z/yKVw/8indP/JqXf/yat7/8mtfv/byav/7+fa/8q0iv/OuZP/39K7/+DU
- vP/h1L3/4dW+/+LWwP/j18H/49jB/+TYw//g07r/49a//+PXv//dz7L/49a//+bbxf/g07j/3tC0/+bb
- xf/m28X/5trE/+baxP/l2sT/5drD/+TZwv/k2cL/49jB/9vLrf/Uwp7/1cOg/9jIp//SwJz/0sCc/9jI
- qf/e0Lb/3tC1/9zOs//bzbH/2suw/9bGp//Mt5D/yrKI/9O+mf/YxKP/18Og/9fBnf/Xv5v/1r2X/9rF
- ov/z6+D/3MSg/9S2if/TtIb/07KC/9Owfv/RrXn/0at2/9Gpcv/Qpm3/z6Rp/8+iZP/Mn2P/ypxj/8aZ
- Yv/Dl2H/v5Rh/7yRYf+3jF//roZa/62LZv+rjGv/knBN/4hpR/98X0D/ZUgq/1k/JP9PNx9M////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AGRHKJxxUC3/fVky/4lhN/+Vajz/oXNB/6x7Rv+yf0b/toJF/7qF
- RP++iET/wotD/8WORP/FkUr/1rKB/+fTuP/bvpb/yJ5g/8edYP/Hn2X/yKJp/8ikbf/IpnH/yKh1/8mq
- ef/JrHz/ya6A/9K8l//w6d3/1MGg/8q1jf/czrT/4NS+/+LWv//i1sD/49fB/+PYwv/k2cP/5drE/+Xa
- xf/m28X/5tvG/+bcxv/n3Mb/59zH/+TYwP/n3Mb/59zH/+fcxv/n3Mf/5tzG/+bbxf/m28X/5drE/+Xa
- w//l2cL/49e//9jHpP/g0rf/4ta+/+DUu//h1Lv/4NO6/9/SuP/e0Lf/3dC1/9zOs//bzLH/zbmU/8q0
- jP/QvJj/2Man/9jFpf/Xw6H/18Ge/9fAm//Wvpn/59nC/+zgzf/Xu5L/1LaK/9O0hv/TsoP/07B//9Gt
- ef/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8yfY//KnGP/xpli/8OXYf+/lGH/vJFh/7aLX/+thVr/pYFY/6yP
- cP+WdVT/hmdH/3JTMv9iRSf/Vz0j/0w2HiT///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AYkUncW5O
- LP96VzH/h2A2/5NpO/+fcUD/q3pF/7F/Rv+2gkX/uoVE/76IRP/Ci0P/xY5E/8WRSf/Fk07/zqRr/+TO
- r//jza3/zahy/8egZf/Iomr/yKVv/8incv/JqXb/yat6/8mtfv/Jr4H/0ryX/+fcyP/g1L3/y7aP/9LA
- nv/g07z/3c+1/9bFpf/Rv5r/2syt/+Xaxf/l28X/5tvG/+bcx//n3Mf/593H/+fdyP/n3cj/6N3I/+jd
- yP/n3sj/597I/+fdyP/n3cj/593H/+fcxv/n3MX/5tvF/+bbxP/l2sP/5NnB/+TZwf/j18D/4dS6/+DT
- uf/h1Lv/4NO6/9/RuP/d0Lb/3c+1/9rLr//NuJL/1cWm/9nJq//Yx6j/2MWm/9jEo//Xwp//18Cc/9jC
- nv/x6dz/38us/9a7k//VuIz/07WH/9Ozg//TsH//0a16/9Grdv/RqXL/0Kdt/8+kaf/PomT/zJ9j/8mc
- Y//GmWL/wpZh/7+UYv+7kGD/tYte/6yEWf+ifVT/pohn/5t+X/+BYkH/a0wr/19DJv9VPCL1SjQdA///
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wBeQyUya0wr/3hVMP+FXjX/kWc6/51wP/+peUT/sX5G/7WC
- Rf+5hUX/vYhE/8GLQ//FjkT/xZFJ/8WTTv/GllP/yJ1f/93Dnf/n1br/1beL/8mjbP/IpW//yKdz/8mp
- d//Jq3v/ya1//8qvg//UwJ3/2squ/+vj1P/MuZP/zbmT/867lf/QvJf/0b6Z/9LAm//YyKf/5tzH/+fc
- x//n3cj/593I/+jeyf/o3sn/6N/K/+neyv/p38r/6N/K/+neyf/p3sr/6d7J/+jeyf/o3sj/593I/+fc
- x//n3Mb/5tvF/+bbxP/l2sP/5NnC/+TYwf/k18D/49e+/+LVvP/h1Lv/4NO5/97Rt//dz7X/3M6z/9rL
- r//ay6//2cmt/9jIqf/Yxqb/2MSk/9fDoP/XwZ3/49O6/+/m1//VvJP/1ruS/9W4jf/TtYf/07OD/9Ox
- f//RrXr/0at2/9Gpcv/Qp23/z6Rp/8+iZP/Mn2P/yZxj/8WZYf/ClmH/vpNi/7uPYP+zil7/qoNZ/6F8
- VP+dfVv/n4Vo/4BhQP9qTSz/XUIl/1I6ILr///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFtA
- JAJoSinudVMv/4JcNP+OZTn/m24+/6d3Q/+wfkb/tIFF/7mERf+9iET/wYtD/8WOQ//FkUj/xZNO/8aW
- U//GmVj/x5td/9W2h//m1bz/3sel/8qpdf/Ip3T/yap4/8msfP/JroD/yrGF/9bDo//OupX/6+PU/9jI
- qv/OupT/z7yW/9G+mf/Sv5v/08Gd/9zNr//n3cj/6N3J/+jeyv/p38r/6N/K/+nfy//p38v/6eDL/+ng
- zP/q4Mv/6uDM/+ngy//p38v/6d/L/+nfyv/p38n/6N7J/+jeyP/n3cf/59zG/+bcxf/l2sT/5drC/+TY
- wf/j18D/49a+/+HUvP/h1Lr/39K4/97Rtv/dz7T/282y/9rLsP/Zyq3/2Miq/9jHp//YxaT/18Oh/9fB
- n//v5tf/5NO6/9W7k//WupL/1bmO/9O1iP/Ts4T/07F//9Guev/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8uf
- Y//JnGP/xZhh/8GWYf++k2L/uo9g/7KJXf+oglj/n3pT/5VzT/+eg2f/iW5Q/2ZIKf9aQCT/TzcfeP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AGRHKK9yUS//f1oz/4tjOP+YbD3/pHVC/699
- Rv+0gEb/uIRF/7yHRP/AikP/xY5D/8WQSP/Fk03/xpZT/8aZWP/Hm13/x55i/82qd//j0LP/5dS7/9W8
- lP/Jq3r/yax9/8mugf/MtYv/1sSj/8u2j//g1L3/5NnF/8+7lf/QvZj/0r+a/9PBnf/Uwp//5dnD/+je
- yf/o3sr/6d/L/+nfzP/q4Mz/6uDN/+rhzP/q4M3/6+HN/+rhzf/q4c3/6uHN/+rhzP/q4Mz/6uDM/+rf
- y//p38r/6d7J/+jeyP/o3cf/59zG/+fbxf/m28T/5dnC/+TYwP/j17//4ta9/+HUu//g0rn/39G3/93Q
- tf/czrP/2syx/9nKrv/YyKv/2Meo/9jFpf/Xw6L/4M+z//Hq3v/Ywp3/1byT/9W6kP/Vuo7/07WI/9Oz
- g//TsX//0a56/9Grdv/RqXH/0KZt/8+kaP/PoWP/y59j/8icY//FmGH/wZVh/72SYf+5jmD/sIhc/6aA
- V/+ceFL/knBN/5Z6Xv+IblP/YkUn/1Y9Iv9MNR43////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AYUQmbW5OLP97VzH/iGE3/5VqPP+hc0H/r31H/7OARv+3g0X/vIdE/8CKQ//EjUP/xZBI/8WT
- Tf/GllL/xplY/8ebXf/HnmL/x6Fn/8mkbv/Xvpf/5te//+LRt//RuZD/yq+C/863kP/VwqH/yrWO/9XD
- pP/t5df/1MGf/9G+mf/TwJz/1MKe/9bGo//i1Lr/5tvE/+nfy//p38z/6uHN/+vhzf/r4s//6+LO/+vi
- zv/r4s7/6+LP/+vizv/r4s7/6+LO/+vhzf/q4c3/6uHM/+rgzP/p4Mv/6d/K/+jeyf/o3cf/593G/+bb
- xf/m2sT/5dnC/+TYwP/j177/4dW8/+DUuv/f0rj/3tC2/93PtP/bzbH/2cuv/9jJrP/Yx6n/2MWm/9jD
- ov/s4tH/59vG/9a+mP/VvJT/1bmQ/9W6jv/TtYj/07OD/9Oxf//RrXr/0at2/9Gpcf/Qpmz/z6Rn/86h
- Y//LnmP/yJpi/8SYYv/AlWH/vJJh/7iOYP+uhlr/pH5V/5p3Uf+Pbkz/kXZa/4VsUf9eQyX/Uzoh8Ucy
- HAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBcQSQpbE4t/3tZNv+EXjX/kWc6/55x
- QP+rekX/sn9G/7aDRf+7hkT/v4lD/8ONQ//FkEf/xZNM/8aWUv/GmFf/x5tc/8eeYv/HoWf/yKNs/8im
- cf/MrX3/3Mmp/+fbxv/ezbL/07+b/9PBn//Lto//zbiS/+ngz//g1Lz/0r+b/9PBnf/Vw6D/2Mim/97P
- sf/g0bX/4tW7/+bbxf/r4c7/6+LP/+ziz//s49D/7OPQ/+zj0P/s49D/7OPQ/+zj0P/s48//7OLP/+zi
- zv/r4s3/6+HN/+vgzP/q4Mv/6d/K/+neyf/o3cj/593G/+bbxP/l2sP/5dnB/+TXwP/i1r3/4dW8/+DT
- uf/f0bf/3c+0/9zNsv/azLD/2Mmt/9jIqv/Yxqf/4NC2//Lr3//bx6f/1r6Y/9W8lP/VuZD/1bmO/9O1
- iP/Ts4P/07F//9Gtev/Rq3X/0ahw/9CmbP/Po2f/zaFj/8ueY//HmmL/w5di/7+UYf+7kWH/tYxe/6uE
- Wf+hfFT/lnRP/4xtSv+Lb1P/gmlQ/1tAJP9POB+x////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wBlRyjPdVQx/4BbM/+OZTn/m24+/6h4RP+xfkb/tYJF/7qFRP++iUT/w4xD/8WP
- Rv/Fkkz/xpVR/8aYV//Hm1z/x55h/8egZ//Io2z/yKZx/8modv/Jq3v/z7aO/+HSuf/q4M//39O7/825
- k//NuZP/3M+z//Hr4f/o3sz/6+PT/+nfzf/g1Lr/4dS5/+rhzv/r4c//6+LP/+TZv//m2sD/7OTQ/+3k
- 0f/t5NH/7eTR/+3k0f/t5NH/7eTR/+3k0f/t5ND/7OPQ/+zjz//r487/6+LN/+rhzP/q4Mv/6t/K/+ne
- yP/o3cf/59zG/+bbxP/l2sL/5NjA/+PXvv/i1bz/4NO6/9/SuP/d0LX/3M6z/9vMsP/Zyq3/2Miq/9jG
- qP/t5Nb/6NzJ/9bAnP/Wvpj/1byU/9W5kP/VuY7/07SH/9Ozg//TsH//0a15/9Grdf/QqHD/z6Zr/8+j
- Zv/NoGP/ypxj/8aZYv/ClmL/vpNi/7uQYf+yiV3/qIJZ/555U/+Uck7/iWpJ/4lvU/98ZUv/Vj0i/0s1
- Hlj///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGBEJnBuTiz/e1cx/4lh
- N/+Xaz3/pHVC/699Rv+0gUX/uYRF/72IRP/Ci0P/xY9F/8WSS//GlVD/xphW/8abXP/HnmH/x6Bm/8ij
- bP/IpnH/yah2/8mre//Jrn//yrCE/9vKrf/n3sz/5dvH/9vNsf/m28j/+PXw//j17//38+3/9/Tu//Xx
- 6P/u59j/6uDM/+vi0P/s49H/5Ni9/9/QsP/i1LX/6NzE/+3k0f/u5tP/7uXT/+nexv/p3sX/6t/H/+vh
- y//t5NH/7eTR/+3j0P/s48//7OLN/+vhzf/q4Mz/6d/K/+jeyP/o3cf/59zF/+baw//k2cL/49e//+LW
- vf/h1Lv/39O4/97Qtf/dzrT/28yx/9nKrv/YyKv/4dO7//Lr3//byKn/1sCc/9a+mP/Vu5P/1bmQ/9W5
- jP/TtYj/07OC/9Kvfv/RrXn/0ap0/9Cob//PpWr/z6Jl/82gY//JnGP/xZli/8GWYf+9kmL/uY5g/7CH
- XP+mgFf/mndR/5l8Xf+umoX/uqud/5uJd/9WPibyRjEcCf///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AWkAkFmhKKvx2VC//hF41/5JoO/+gckD/rXtG/7OARv+3g0X/vIdE/8GL
- Q//FjkP/xZFK/8aUT//Gl1X/xppb/8edYP/HoGb/yKNr/8imcP/JqHb/yat7/8mugP/KsIT/08Cc/9G/
- nf/ay67/7+jc//bz7P/6+fX//fz6//z7+P/8+/n//Pr4//n38f/u5tb/6+LO/+3k0v/k2Lz/4dKy/+HT
- tP/i1LX/6uDJ/+/m1P/v5tT/7uXR/+bZvv/k1rj/5de5/+7l0v/t5dL/7eTR/+3k0P/s48//7OLO/+vh
- zP/q4Mv/6d/J/+jeyP/n3cb/59vE/+XZwv/k2MD/4te9/+LVvP/g07n/3tG2/93PtP/bzLH/2squ/9jJ
- rP/u59n/59vI/9bCn//WwJz/1r6Y/9W7k//VuZD/1LeM/9S1h//TsoL/0q99/9GseP/RqnP/0Kdu/8+k
- af/PomT/y59j/8icY//EmGL/wJVh/72RYv+2jF//rIRa/6J8VP+kh2f/zcCy/+DZ0v/n497/3tnU/8fA
- uNb///8G////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZEgptXFQ
- Lf9/WjP/jGQ4/5puPv+oeET/sX5G/7aCRf+7hkT/v4pD/8SNQ//FkEj/xZRO/8aXVP/Gmlr/x51f/8eg
- Zf/Io2v/yKZw/8modf/Jq3v/ya6A/8qwhf/UwZ//z7yY/824kv/k2cP/9fDo//z6+P/+/v3//v7+//39
- /P/8+/n/+vn1//by6v/s49L/7uXT/+LUtf/i07T/49S1/+PWt//o3MP/8OfW/+7l0f/v6NX/7+fV/+fb
- v//l2Lv/7ePO/+3k0P/u5dL/7uXR/+3k0P/s48//6+LO/+vhzP/q4Mv/6d7J/+jdx//n3MX/5trD/+TY
- wf/j177/4tW8/+DTuf/f0bf/3c+0/9vNsf/ayq//4tbB//Hq3//byKr/1sKf/9bAnP/Wvpj/1buT/9W5
- j//Utov/1LWH/9Oxgf/Rrnz/0ax3/9Gpcv/Qp23/z6Ro/86hY//LnmP/x5pi/8OXYv+/lGL/u5Bh/7OK
- Xv+ogVj/nXpT/7+sl//i29P/8e7r//f29f/w7uz/8/Hw1////1f///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wBcQSRQaksq/3lWMP+HYDb/lWo8/6N0Qv+vfUb/tIFF/7mF
- Rf++iET/w4xD/8WQRv/Fk0z/xpZT/8aZWP/HnF7/x59k/8iiav/IpXD/yKh1/8mrev/JroD/yrCF/9XC
- of/Pu5f/zbmS/+HVvv/w6t//+PXw//38+//+/v3//f38//z7+f/59vH/9fDm/+3l1P/u5tT/49W2/+PV
- tv/k1rf/5de5/+bZvP/q38X/7uXQ//Dp1//x6df/7ePM/+fbvv/q4Mf/7eTO/+/m0//u5tP/7uXR/+3k
- 0P/s48//6+LN/+rhy//q4Mr/6d7I/+fcxv/m28T/5dnC/+PXv//i1r3/4NS6/9/RuP/dz7X/282x/9vL
- sf/u6Nz/5tvH/9fEpP/Wwp//1sCb/9a9l//Vu5P/1LiO/9S2iv/UtIb/07GA/9Gue//Rq3b/0ahx/9Cm
- bP/Po2b/zaBj/8qdZP/GmWL/wpZi/72SYv+6j2H/r4Zb/6V/V/+ad1L/x7em/+fh2//29fP//fz8//f2
- 9f3+/v7V////hP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFU8
- IgJoSi7ac1Iw/4BbNP+PZjn/nXA//6x6Rf+yf0b/t4NF/7yHRP/Bi0P/xY9E/8WSS//GlVH/xphX/8eb
- Xf/Hn2P/yKJp/8ilbv/IqHT/yat6/8muf//LsYX/1cOi/825lP/NuZP/2cqs/+ri0f/z7uX/+fbx//z8
- +v/7+fb/+vj0//j28P/z7uL/8evc/+/n1v/n28H/5Na4/+XYuf/m2bv/8OjV//Do1v/w6NX/8enY//Hp
- 2P/x6df/7eLL/+vfxf/v59T/8OjV/+/m0//u5tP/7uXR/+3k0P/s487/6+DL/+rgy//p38n/6N3H/+bb
- xf/l2sL/5Ni//+LWvf/g1Lr/39K4/93Ptf/bzbL/5drF//Dp3v/ayav/18Sk/9bCn//Wv5v/1r2X/9W6
- kv/UuI7/07WJ/9S0hf/TsX//0a16/9Grdf/QqG//z6Vq/8+iZf/Nn2P/yJxj/8SZY//AlWH/vZFi/7WM
- X/+qhFn/oHtU/5RzTv+7qpj/4NnS//Lw7f/29fT/+Pf28v///8n///9z////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AFxBJVxuUDD/elYx/4hhN/+XbD3/pnZD/7B+
- Rv+1gkX/uoZE/7+KQ//EjUP/xZFJ/8WUT//Gl1X/xptb/8eeYf/HoWf/yKRt/8inc//Jqnn/ya1+/8yy
- iP/Vw6L/zLiS/825k//QvJf/3c6z/+ngz//w6t3/9/Tu//j07v/w6dv/7OTR/+rhzf/18OX/9vHn//Dp
- 2P/p3sT/5tm8/+fbvv/y6tn/8erZ//Lr2v/y69n/8urZ//Lq2P/v59P/8erX//Hp1//w6Nb/7+fU/+/m
- 0v/t5M//7eXR/+3jz//s483/6+HL/+nfyv/o3sf/59zF/+Xaw//k2MD/49a9/+HUu//f0rj/3s+1/9zP
- tP/w6d3/5NnG/9jGp//XxKP/1sKf/9a/m//VvZb/1bqR/9S4jf/TtYj/1LSE/9Kvfv/RrHj/0apz/9Cn
- bv/PpGj/zqFk/8ueY//Hm2P/wpZi/7+TYv+7kGL/sYhd/6aBWP+bd1L/kHBN/5mAZv/IvbH/4NvW/+Lf
- 2/r9/f3I////nP///yz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AVTwiA2hLLuN1VDH/gVw0/5BmOv+fcUD/rXxG/7OARv+4hEX/vYhE/8KMQ//Fj0b/xZNN/8aW
- U//Gmlr/x51g/8egZv/Io2z/yKdy/8mqeP/JrX7/zLOI/9XDov/LtpD/zbmT/9C8l//Sv5v/1sSi/+DS
- t//n3Mj/9O/l/+TYvv/f0K//4dKy/+LVtv/p3cP/7+bS//Ls3f/y69r/7ubR//Lr2v/z7Nv/8uvb//Ls
- 2v/z7Nr/8uvZ/+rgw//w6NT/8urY//Hq1//w6db/7+fU/+/n0//u5dL/7eTQ/+zjzv/r4cz/6uDK/+je
- yP/n3cb/5trD/+TYwf/j1r3/4dS6/9/SuP/ez7T/6N/N/+/p3P/Zyq7/2Man/9fEov/WwZ7/1r+Z/9W8
- lf/VuZH/1LeM/9O0h//UsoL/0a58/9Gsd//RqXH/0KZs/8+jZ//NoGP/yZ1k/8WZYv/BlmL/vZNi/7eN
- YP+shVv/oXxV/5Z0UP+Ka0r/gWVJ/5uJdv+rn5L/ysS+vP///3b///83////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AW0ElZmtMLP95VjH/iGE3/5ds
- Pf+mdkP/sX5G/7aCRf+7hkT/wIpD/8WORP/Fkkr/xpVR/8aYV//HnF7/x59k/8iiav/IpnD/yal3/8ms
- fP/Msob/1cKh/8u2kP/NuJL/z7yW/9K/m//Uwp//18Wi/9nJpv/q4Mz/7OTS/9/QsP/h07P/49W2/+XX
- uf/m2bv/6NzA/+3jzP/x6tf/9vDk//j06v/28eT/9e3f//Ps2//z7Nv/8ejT//Lq1//y69n/8urY//Hp
- 1//x6Nb/7+jU/+/m0v/u5dH/7eTP/+vizf/q4Mv/6d/I/+jcxv/m28P/5NjB/+PXvv/h1Lr/39K4/+LV
- vv/x7OL/4dW+/9jIq//Xxab/18Oi/9bBnf/Wvpn/1buU/9S5jv/Utor/07OF/9Sygf/Rrnr/0at2/9Co
- b//QpWv/z6Jk/8yfY//Hm2P/w5hj/8CVY/+7kGL/sope/6aBWP+beFP/kHBN/4ZpSv+QemL/d2FL/084
- IepBLRkK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wBSOiEFZkot3XFQLf+AWzT/j2Y6/55xQP+tfEb/s4BG/7mERf++iET/w4xD/8WQ
- R//FlE7/xpdV/8abW//HnmL/x6Fo/8ilb//IqHX/yat7/8uxhf/Vwp//y7eQ/8y4kv/PvJb/0r+b/9TC
- n//XxqP/2cmn/9/Qsf/x6dv/5trB/+LUtP/k1rf/5di7/+jbv//o3L//6t7B/+vfwv/t4sj/8enW//jz
- 6P/59u3/+PTr//fy5//28OH/8uvX//Hp1f/y69r/8uvY//Hq1//w6NX/7+fU/+7m0v/t5ND/7OPO/+vg
- y//p38n/6N3G/+bbxP/k2cD/49e+/+HUuv/f0rn/7ufa/+ri0v/Zyq3/2Mep/9fFpf/XwqD/1sCc/9a9
- l//Vu5L/1LiO/9O1iP/Ts4P/07CA/9GseP/RqXL/0Kdu/8+jZ//OoGT/yp1k/8WaY//ClmP/vZNi/7iO
- Yf+shVv/oX1W/5V0T/+Qc1T/loFp/4FrVP9WPST/RjEbbP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBYPiNCaEop/3dV
- MP+GYDb/lms8/6V2Q/+wfkb/toJF/7uGRP/AikP/xY5E/8iXU//Gl1P/xplY/8edX//HoGb/yKRs/8in
- c//Jqnn/y7GD/9XBnv/Lto7/zLeR/8+7lv/Sv5r/1MKe/9fGo//ayaf/3Myr/+jeyP/w6dn/5NW2/+XX
- uf/m2bv/6Nu+/+ndwP/r38L/7ODE/+3ixv/t48f/7uPJ//Tt2v/38uX/+PPp//n17P/59ev/9/Hl//fw
- 4v/07d3/8urY//Hp1v/t5M3/7uXQ/+7l0P/s487/6+HM/+rfyf/n3cb/5trD/+TZwf/t5tb/8uzh//Hs
- 4f/x6+D/3c+1/9jJrf/Yx6n/18Sk/9bCn//Wv5v/1byW/9W6kf/Ut4z/07SG/9Oxgf/Sr33/0at2/9Cp
- cf/QpWv/z6Jm/8yfY//Im2T/xJhk/8CUY/+7kWL/sYld/6aBWP+efVr/noJl/52Hb/+EbFT/WkAm/0o0
- Hcw+KxgC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wBiRyurbk4s/31ZMv+MZDj/nG8//6x6Rf+zgEb/uIRF/76I
- RP/DjEP/1Kx3/9Swff/Gl1X/x5tc/8efY//Iomr/yKZw/8mpd//KroH/1cCd/8y1jv/LtpD/zrqV/9G+
- mf/Uwp7/18Wi/9nJp//czKv/39Cx//Dp2v/r4cv/5di5/+favP/p3L//6t7C/+zgxP/t4sb/7uPI/+/k
- yf/v5cr/8OXL//Tt2f/279//9u/e//bx4v/38uX/+PPo//j06v/48+j/9fDj//Lr2//x6dj/7+bU/+3j
- zv/r4cz/6t/J/+jdxv/m2sP/8Ord//j18P/7+fb//Pv6//Tw6P/azLD/2Mms/9fGp//XxKL/1sGe/9a+
- mf/Vu5T/1LmO/9S2iv/Ts4T/07F//9Kue//Rq3T/0Kdu/9CkaP/OoGT/yp1k/8WZY//ClmP/vZJj/7aN
- Yf+ykGn/sJN0/62Uef+dhGr/fmRI/1xBJf9POB/9Qi4aNf///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFM7
- IRlrTzH1fmA+/4NdNf+SaDv/onNB/7B9Rv+1gkX/vo5Q/8aVVP/TqnL/38Ob/8iZV//GmVn/x51g/8eh
- Z//IpG7/yKh0/8qtfv/Uv5v/zLWM/8q1jv/NuZP/0b2Y/9PBnf/WxaL/2cim/9zMq//ez6//6+DL//Xw
- 5P/q4Mn/6Nu+/+ndwP/r4MP/7eLG/+7jyP/v5cr/8ObL//HnzP/x583/8unR//bw4P/28N//9u/f//Xu
- 3f/17tz/9O7c//Xu3//17+H/9e/j//Tu4f/z7d7/9O7h//Hq2//v5tX/6+LO/+jdyP/18Oj/+/r3//7+
- /f/9/fz/9/Tv/9/TvP/YyKr/18Wm/9fCoP/WwJz/1r2X/9W6kv/UuI3/07SH/9Oygv/Sr3z/0qx4/9Cp
- cf/Qpmv/z6Jl/8ufZP/Hm2X/xZtq/8Scb//Dn3j/waOC/7mcf/+nimv/kHNT/3teQP9iRSf/Uzsh/0Yx
- HJX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AFg/JGmNd17/oIdt/5BrQ/+YbD3/p3hF/7mM
- WP/XuZf/yZ1m/8iYV//cvJD/1K99/8aXVf/Hm1z/x59j/8iiav/IpnH/yqx7/9S+mf/MtIr/yrSM/8y4
- kv/QvJf/08Cc/9bEof/ZyKX/3Muq/97QsP/t5NH/9/Lp//bx5//s4sn/6t7C/+zhxf/u48f/7+XK//Dm
- y//x583/8ujO//Lpz//z6c//8+vU//fx4P/38OD/9vDe//Xu3v/17tz/8+za//Dn0f/r4MX/6Ny+/+zi
- zP/t5ND/7+fX/+/o2P/w6dr/8OjZ//j28P/9/Pr//v7+//38+//59vL/5t3L/97Ptf/byq3/2cem/9jC
- nv/Xv5r/172W/9e6kf/WuY3/1raI/9Szg//Vs4H/1K97/9awfP/WsoD/1bOG/9S1jf/RsY3/za6L/8Ki
- gP+xj2v/nntX/49vTf92VjT/a1Ay/1xDKv9KNB3hPSoYD////wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AGdOM6WhjXf/sJuE/6KBXf+7nHr/soVU/9Cxjf/LpXb/v4lE/8SORP/SqnL/17SD/8me
- Yf/HnV//x6Bm/8ikbv/JqXf/1LyW/8yyh//Ks4n/y7aQ/867lf/Sv5r/1cOf/9jHpP/by6n/3s6u/+fc
- wv/v6NX/9fDj/+vgyP/r38L/7eHF/+7kyP/w5sv/8efN//Lpz//z6tD/9OvR//Tr0f/069H/8+vT//Xt
- 1//17tv/9u/d//Ps2P/v5cv/7OHF/+rfwv/o3L//5tm7/+XZu//l2Lr/6N3G/+fcxf/m28T/8uzh//z7
- +P/8+/n/+vj1//Xx6f/k2sf/49fC/+TXwf/k1b3/5NO6/+PRtv/iz7L/4c2u/+HKqf/gyKX/38Wf/97E
- nP/ev5X/27mK/9Sxgv/PqXn/x6Bx/8GYav+3jWL/rIVc/598Vv+Tc1D/hWdH/29SMv9sVDv/Tzgi9UAt
- GTD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ATzgfBnRcQs6qloL/tqGL/8Gp
- kP/KsJT/0reY/9a6mf/Op3f/x5ZX/97Alf/gxqD/3L6V/8ecXv/HnmL/yKJp/8incv/Uu5P/zLKH/9bD
- ov/NupT/zbmT/9C9mP/UwZ3/18aj/9rKqP/dzq3/4NKy/+PVt//v59T/8uvb/+vgxP/t4sb/7+XK//Hn
- zP/y6c//9OrR//Tr0v/17NP/9ezT//Xs0//17NP/9OvR//Pp0P/y6M7/8ObL/+7kyf/t4sb/69/C/+nc
- v//m2bv/5Na4/+PUtv/i1bj/5tvD/+XZwv/v6dv/9fHq//Hs4f/v6Nz/4tfB/9jHqf/XxaT/1sKf/9fB
- nP/Xv5n/17yU/9W5jv/UtYj/1LKC/9Ouev/Sq3X/0adw/9CjZv/MoGX/yJxl/8OYZP/AlWT/upFj/6+I
- Xv+jf1f/l3ZS/4psTP9+Ykb/clpA/1U+J/5DLxpU////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AUjohFXpjSOmum4f/uaSN/8Orkf/Mspb/1LiZ/9e6mP/Jn2n/3sGa/+DE
- nv/hx6L/1bOC/8ecXf/Hn2X/yKNs/9K3jP/Os4f/3cyw/+PXwf/d0Lf/18eo/9LAnP/WxKD/2cim/9zM
- q//f0LD/49S1/+bavv/z7d7/8enV/+3ix//w5cr/8ujO//Pq0P/17NP/9u3U//bu1f/27tb/9u7V//bt
- 1P/17NP/9OvR//Lpz//x58z/7+TJ/+3ixv/r38L/6Ny//+bZu//p3sX/6d7I/+TYv//h07b/6d/L//Hr
- 3//h1b3/3c+0/9rLr//Yyaz/18Wn/9fDov/WwJ3/1r2X/9W7kv/UuIv/07SG/9OxgP/Srnv/0at1/9Co
- cP/RpWv/zaFm/8mdZf/FmWX/wJZk/7ySZP+ximD/pYBZ/5l4VP+Nbk3/gGVI/3FYPf9bRCz/RTAbgP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVTwiLoFn
- T/iynor/u6WO/8Opjv/PtJj/1LeX/9a4lf/cv5v/38Kb/+DFnv/hxqL/y6No/8edX//HoWf/0LCC/9Cz
- iP/SupP/49W+/+PXwv/k2cT/49jC/+TYwf/n3Mf/6uDM/+zj0P/u5tT/7+bU//Dp1v/28eX/8OfQ//Dm
- y//y6c//9OvS//bt1P/379b/9+/X//jw2P/48Nf/9+/W//bt1f/17NP/8+rQ//Hnzf/v5cr/7eLG/+vf
- wv/o3L7/5tm8/+vizP/i1bf/3c6t/+HVuf/y7OD/5drE/97Qtf/czbH/2cqu/9jHqf/XxKT/1sGe/9a+
- mf/Vu5P/1bmN/9S1iP/TsoL/0q99/9Krdv/QqHD/0aZs/86jZ//Knmb/xptl/8GWZP+9k2T/tItg/6iC
- W/+celb/j3BP/4RnSv90WkD/WUAn/0gzHaw5KBYB////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8AVj0iUIhwV/6vm4X/uKGI/8aulP/QtZj/1rqa/9m8
- mv/cwJv/4MKb/+DFn//dwJf/yaBi/8eeYf/OrHn/0bWI/8mqeP/YxKL/49a//+PXwv/k2cX/5tzI/+je
- yv/q4M3/7OPQ/+3l0//w6Nb/8erY//bx5f/38ub/8efO//Lpz//17NP/9u7W//jw2P/58dn/+fLa//nx
- 2f/48Nj/9+/W//Xt1P/z6tH/8efN/+/kyf/t4cX/6t7B/+favf/m2r3/6+DL/+DRsf/g0bP/7+fZ/+rg
- zv/f0bf/3c6z/9rLr//YyKv/18Wl/9bCoP/Wv5v/1byV/9W5kP/Utor/07OE/9Kvfv/SrXj/0alx/9Cm
- bP/Qo2j/y59n/8abZf/DmGX/vpRl/7WNYv+qhFz/nXpW/5JyUf+EaEr/dlxB/1lAJf9IMxzQOikXC///
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AVz0je5B6Yv+0oIz/vaeQ/8ivlf/Rtpr/1rqb/9m9m//dwJv/4MOb/+DFn//ewpv/yqJn/8ul
- bf/TtYj/yKZy/8mqev/XxKP/4tW//+LXwv/k2cX/5tzH/+jeyv/q4c7/7OTR/+7l0//w6Nf/8urZ//j0
- 6v/48+f/8+vT//Xs0//379f/+fHZ//rz2//689z/+vPb//ry3f/48t7/9+/Y//Pq0f/x583/7uTI/+zg
- xP/p3cD/5tm7/+XYu//p38j/39Cx/+zj0f/o3sv/39K3/93Qtf/bzLD/2cms/9jGpv/Xw6H/1sCc/9a9
- lv/VupD/1beL/9S0hf/TsX//0q56/9Kqc//Qp23/0KRn/82iaf/HnGf/w5hm/76UZf+2jmP/q4Vc/558
- V/+Sc1H/hWlL/3heRP9aQif/STMd6jspFx////8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AWEAkp5eCa/+sl4D/vqiQ/8iv
- lf/Rt5r/1rqb/9m9mv/dwJr/4MKa/+DEnv/fw53/zKVs/9OzhP/Kpm7/yKdy/8mrev/RupT/4NK6/+LX
- wf/k2sT/59zH/+nfy//r4c7/7OTR/+/m1P/x6df/8+3c//r27f/49Oj/9u7W//fv1//68tv/+/Td//z1
- 3v/79N3/+/Xi//r15v/38Nz/8+nQ//Dmy//t4sb/6t7C/+favf/k1rj/4dKz/+XYvv/p38v/6uHO/9XE
- ov/Uw6L/282x/9nJrP/Yx6j/18Oi/9bBnP/Wvpf/1bqS/9W4jP/UtIb/07GA/9Kuev/SqnT/0adt/9Ck
- aP/MoGf/yZ5q/8OYZ/++lWb/uI9k/6uFXf+ffFj/knNR/4ZpS/95X0b/W0Mp/0kzHfk7KRc8////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wBFMBsJWkEpupyJdP+ynon/vaiQ/8evlf/QtZn/1rqa/9m8mv/cv5n/38GZ/9i2
- hv/HmVj/0rB//82ocv/Io2v/yKdz/8mre//Msof/08Cd/9rLrv/k2cT/5tzH/+jeyv/q4c7/7eTR/+/m
- 1P/x6dj/9e/h//r37v/59Ob/9/Db//ry2//89t///ffg//z13//689z/+PDa//Xs1f/x583/7uPI/+vh
- xP/q3sL/5de5/+LTtP/ez6//5trD/+zj0//ZyKf/08Cc/9PCoP/Zya7/2Meo/9jEo//XwZ7/1r6X/9W7
- kv/VuIz/1LWG/9OxgP/Srnr/0qt0/9Gnbv/QpGj/zKBn/8meaP/Em2r/v5Vn/7ePZP+rhl7/nnxX/5Nz
- Uv+Gakz/eWBF/1xELP9HMhz5OigWWf///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBDLxoDXEculZuI
- dP+vmoX/sZl+/8WulP/EpIH/zq6K/9i7mf/bvpj/38CY/9u7jf/Ur3r/4Mim/9i7kf/RsoT/1LmQ/8qs
- fP/Kr4L/zLaP/9fGqP/i1r//5tvG/+jeyf/q4M3/7OPQ/+/m0//x6df/9vHl//r27f/58+X/+vTi//z2
- 4f/++OL/+/Xe//jw2P/17NP/8ujO/+7kyf/r4MT/6Ny//+jcwP/o3MT/3s+v/+baw//s49L/28yt/9K/
- mv/OupX/1cSl/9jHqP/YxKP/18Gd/9a9mP/Vu5H/1biM/9S0hv/UsYD/0656/9GrdP/RqG7/0KRp/8yg
- aP/HnWf/xZxs/7+Waf+1jmP/qYZe/558WP+Rc1L/hGlL/3dfRf9cRSz/RjEb6DgnFjr///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8AV0EqZox4Yvueh2//uaSN/8Orkv/BoH3/toZS/8GV
- X//VtIn/3sCW/97AmP/XtYb/3sWf/97Gov/fyaj/2MCZ/8qrev/JroD/yrKI/824k//bzLH/5drE/+fd
- x//p38v/6+LO/+7l0v/w6NX/9vHl//n16//48eP/+PHe//bu1f/17dT/8+rQ//DmzP/t4sf/6t7C/+fa
- vf/k1rj/4dKy/97Orf/l2cH/6+LR/9rLrP/RvZj/zrmT/8y4kv/Yxqf/18Si/9fAnf/WvZb/1bqR/9S3
- i//UtIb/07GA/9Ouev/SqnT/0adt/8+kaf/LoGn/xpxp/8Oaaf/BmG3/tI1k/6iEXf+ce1j/j3FR/4No
- S/92XkX/YEoz/0MvGs41JRUd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8ATDYePXpkTe6smob/t6KN/8Cpkf/FqYz/tIZS/7WCRv/Cklb/z6Zv/9q3if/SrXb/3sSe/9/G
- ov/fyKf/28Of/86xg//JrH3/yrCF/8q0jf/SwJ3/4NO7/+XaxP/n3cf/6d/L/+zizv/t5dL/9O7h//fy
- 5//x6db/7eHF/+3hxf/r4MP/6d3A/+favP/k17j/4tO0/9/Pr//czKr/5Ni+/+nhzv/Yyan/08Ge/9TC
- ov/QvJj/zreP/9fCoP/XwJr/1r2V/9W5kP/Ut4r/1LOF/9Owfv/TrXn/0qpz/9GnbP/Po2r/yqBp/8ac
- af/BmGn/v5hu/7OOZ/+lgl3/mXlW/41vUf+BZkv/c1xE/11IM/9CLhuqMiMTCv///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ARjEcIGpROtaikHv/s6CK/7ym
- jv/ApYf/sIFP/7OARv+5hUX/yJld/9CjZv/Qp23/0apz/9W1hf/exqP/3sim/9a9lf/KrHz/ya6A/8qy
- h//Pu5f/4NS8/+PXwP/l2cP/5tzG/+jeyf/p4Mr/7ebT/+7m1P/l2Lz/49W2/+LUtf/h07P/39Cw/93O
- rf/by6n/2Mel/+HUuv/o3sv/1sWl/825kv/MuJH/zriQ/9C4kf/SuZH/1LuT/9W6kf/RsoP/1baI/9Sz
- gv/Tr3z/06x2/9Kpcf/Spmz/zaJq/8meaf/Em2n/wJZp/7qTaP+xjmn/oYBc/5V3Vf+JblD/fGRK/29Z
- Qv9VQSz+OyoXfS4gEgH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AQC0ZDFhBKrKTf2v/rpuH/7eii/+8o4f/rIFU/7B+Rv+4hkv/zqZ0/9St
- ef/PoWT/yZta/9Sxf//bv5f/3cWh/9vCnf/Mrn3/yap5/8mugP/Qu5X/2cqt/9nKrv/g07r/49a//9/S
- t//XxqP/49e//+jeyf/dza7/2cim/9jIpv/ayqr/18al/9PBnv/e0LX/5drG/9PAn//KtI3/yrKH/8mv
- gf/JrHz/yah2/8ilcP/Iomr/x59k/8ieYf/RrHf/0655/9KrdP/SqG7/z6Rs/8uhbP/GnWv/wplq/76W
- av+0jWX/q4lm/5+AX/+GZkT/gGVH/3dgRv9YQSn/QzAb9DUlFVH///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ANycVAUk0
- HIR+alX+qJeE/7Gch/+5oon/rYtl/6p6Rv+/lGT/yKBv/9KugP/buo//3LyR/9y+lf/cwJj/3cKc/9zC
- nf/OrXr/0LOG/9a+mP/Yw6H/28mr/93Nsv/dz7X/3tC3/9G+m//Pu5X/3c+0/+LVv//f0bj/6N/O/+3m
- 2f/u59v/7+ne/+bcyf/RvJf/yrCD/8mtfv/Jqnn/yKh0/8ilb//Iomn/x59k/8ecXv/GmVj/yZta/9Co
- bv/SqXD/0KZt/8yjbf/Jn2z/xJts/8CYa/+4kmj/rYhi/6WGY/+Ze1z/eFk3/2dLLP9hSDD/SzYf/zwq
- F98vIBIu////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AD0rGDxmUz7XlYNw/6mWgv+znYb/tp2B/7ye
- ff/TuZz/1rqb/9S1j//Xt43/2baI/9Std//RqnP/1LF+/9Crd//Rr37/28Oe/9vDoP/Yv5r/3Mem/9zI
- qf/Uvpn/ya+B/8qwhP/KsYX/3c2x//Dp3f/07+b/9vLr//n28f/28uv/6+DO/82xg//IqHT/yKVw/8ij
- a//HoGb/x55h/8ebXP/GmFf/yJlX/8WTTf/Fj0f/y5tc/82jbv/JoG3/xp1t/8GZbP+6lGn/r4tl/6WD
- YP+cf17/j3JV/2tOL/9bQCT/Tjcf/0EtGfw0JBSPJhoPDf///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////ADEiEwRBLhp0alZB9ZaEcf+plYD/spuF/8KrlP/RvKb/z7KU/9Cxjv/Ts4z/1bWL/9i3
- iv/ZtYX/2biJ/9u8kP/avZL/2buQ/9a4i//PrXr/yqZw/8ijbP/IpG7/yKZw/8imcv/YwZ3/7uPT//n2
- 8f/8+vf/+vby//Tu5P/t4tD/1rqQ/8efZP/HnWD/x5tc/8aYV//GllP/xZNO/8udXf/PoWP/zZ9k/8yk
- b//JoW//xZ1u/8Kabv+7lWz/sY1m/6aEYf+bfFz/k3hc/39lSP9jSCz/UTkg/0QwG/83JxXHKh0QMP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAyIxMbQzEdpmpX
- Qv2WhHH/p5N//7yql//JtqH/w6qO/8iqi//Or4z/y6d8/8ymd//OpXH/0ahx/82dXf/HlE7/z6Zs/8uf
- Yf/Im1z/x5tb/8aaW//Hm13/x5xf/9i7kP/w5dT/9vDm//jz6//59O3/9e3i/+raxP/TsH7/xpZT/8aU
- UP/Fkkz/xZBI/8WORP/CjEP/wpBP/7uGRf+/kVr/xJ1w/8Gab/+4lGz/r4xn/6WFYv+bfV3/kXVY/4tz
- Wv9wWD//WUMr/0YyHv84JxblKx4RZh8VCwH///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8AMSITJkMwHJ9pVkP7lIJx/7Cgj//Vyr//6OLa/+/p
- 4//m2s7/1b6k/8ysiP/OrYf/0a+G/86ndv/Glln/y5xf/9CjaP/Lm1n/x5RO/9Cla//ZuIn/3b+W/+PL
- q//n1Lj/7d3I/+/hzv/v4s//59K1/82gY//FkEf/wotD/7+JQ/+8h0T/uYVF/7aCRf+zgEb/s4RP/7qV
- bf+zkGr/qolm/6GCYf+Xe13/jXRY/4dwV/+IdWH/d2RS/1xLOf8/Lx7gKx0QaB4UCwf///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////ACweER8+LRuXnZGG+ubi3v/5+Pb//fz8//r5+P/w6+f/xrGb/72ggf/DpIP/wZ11/72S
- Yv/FoHT/x59x/8qkdf/Us4r/07CF/8qfav/Ajk7/vYhE/8meZ//TsIP/1LKH/8ylc//GmmT/zah7/8yo
- fP/DmWn/uoxY/7OCTf+qeUX/o3VD/6J5Tv+nhWH/ooRj/5p9X/+SeV3/j3hf/415Y/+Id2X/d2dW/1dH
- N/84KhnYJhoPYBsSCgT///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDT0c832tjVxujm
- 5PXx8O7/8e/t/+jk4P/Fuq7/uqqZ/7uolP/Crpr/xK+Z/8avmP/Eq47/uZh0/6+FWP+qekX/rHtG/699
- R/+vfUb/r31G/699Rv+ufEb/rHpF/6l4RP+ld0T/qYBU/6+MZf+yknH/rpFx/66UeP+vmH7/qZR9/6KN
- dv+ciHT/l4Z0/45+bv97a1r/Xk49/0IyJO0sHxGUIBYMN////wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////SuDe3XiXkImjTj8wy29fT/uKe2z/n5GD/6aX
- h/+mlYP/ppN+/6KMdP+giG//mX1g/5R1VP+VdVP/lnVR/5V0T/+UcUz/kW5H/45pQ/+JZD3/gV01/35Z
- M/96VjH/elo3/4VpTP+Se2P/lIBq/5B+av+KeGb/fGtZ/2paSf9RQjL/Oi0c6SwgEqcgFgxOFg4IBf//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8AHBMKDCUZDkkxJBaLSj0u0VxOPv1sXEv/d2ZW/4FxYP+HdWT/iHdk/4p3
- ZP+LeGT/jHhj/4t3Yv+Kd2H/inVg/4d0Xv92YUv/XkYs/1xELP9wXUn/Xko2/088KP9FMyD/PSwb/zEi
- FOwpHRCuIhcNbBkRCSv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8AFA0HBhoSCikgFgxRJRoOeDEmGaE/MSXFSj0u1FJFOOFVRznsUkQ2+FFDNf9QQjP9TkEz805A
- MudCNinZLB4RySgbD7QjGA2NHxULZhkRCT4TDQcX////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8ADQgEA////wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
- /wD///8A////AP///wD///8A////////////////////////////////////////////////////////
- /////////////////////////////////////8AAAAP///////////////AAAAAAB/////////////4A
- AAAAAAB////////////wAAAAAAAAD///////////wAAAAAAAAAP//////////4AAAAAAAAAB////////
- //wAAAAAAAAAAD////////+AAAAAAAAAAAAA///////4AAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAB
- /////gAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAA///wAAAAAAAAAAA
- AAAAAAH//4AAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAB//wAAAAAA
- AAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAD///w
- AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAH
- //////8AAAAAAAAAAAAAf///////4AAAAAAAAAAAD////////8AAAAAAAAAAAA////////+AAAAAAAAA
- AAAH////////AAAAAAAAAAAAA////////gAAAAAAAAAAAAH///////wAAAAAAAAAAAAB///////4AAAA
- AAAAAAAAAP//////+AAAAAAAAAAAAAB///////AAAAAAAAAAAAAAP//////gAAAAAAAAAAAAAB//////
- wAAAAAAAAAAAAAAf/////4AAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAH
- /////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAP////+AAAAAAAAAAAAAAAB/////AAAAAAAAAAA
- AAAAAf////wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAH///+AAAAAA
- AAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAA////g
- AAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAA
- H///wAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAA
- AAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAA
- AAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+A
- AAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAA
- D///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAA
- AAAAAA///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAA
- AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///g
- AAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAA
- P///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAA
- AAAAAD////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAf////4AAAAA
- AAAAAAAAAAP/////AAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAA//////
- wAAAAAAAAAAAAAAP/////+AAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAD//////8AAAAAAAAAAAAAB/
- //////gAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAA
- AAAD////////AAAAAAAAAAAAB////////4AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAA
- AAAAAAAAP/////////gAAAAAAAAAAH/////////8AAAAAAAAAAH//////////gAAAAAAAAAD////////
- //+AAAAAAAAAB///////////wAAAAAAAAB////////////AAAAAAAAA////////////8AAAAAAAA////
- /////////wAAAAAAA//////////////AAAAAAB//////////////8AAAAAB///////////////8AAAAH
- ////////////////8AAAf//////////////////9////////////////////////////////////////
- //////////////////////////////////8=
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 486, 17
+
+
+ 17, 17
+
+
+ 223, 17
+
+
+ 120, 17
+
+
+
+
+ /9j/4AAQSkZJRgABAQEAAAAAAAD/4QCqRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKG
+ AAcAAAB0AAAALAAAAABDAFIARQBBAFQATwBSADoAIABnAGQALQBqAHAAZQBnACAAdgAxAC4AMAAgACgA
+ dQBzAGkAbgBnACAASQBKAEcAIABKAFAARQBHACAAdgA2ADIAKQAsACAAcQB1AGEAbABpAHQAeQAgAD0A
+ IAA3ADUACgAAAAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMc
+ HCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIy
+ MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAIAAgAwEiAAIRAQMRAf/EAB8AAAEFAQEB
+ AQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQci
+ cRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
+ Z2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV
+ 1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E
+ ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDTh
+ JfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT
+ lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5
+ +v/aAAwDAQACEQMRAD8A94uLu3tITLcTJFGOrO2BWdL4m0uMZ82Vwe8cEjD8wKp3tv5HiOGaRFlWddsR
+ YZMbKDlRk8ZHORz8pqLU9dsLZ3t7m5aSYdYYIt5H1PQfjipnOMFeTsOMXJ2SNV9bsjozamkha2UE52kE
+ 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
+ SUVORK5CYII=
+
+
+
+
+ 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
+ rkJggg==
+
+
+
+
+ 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
+ BlEAAAAASUVORK5CYII=
+
+
+
+ 389, 17
+
+
+ 582, 17
+
+
+ 682, 17
+
+
+ 310, 17
+
+
+ 58
+
+
+
+ AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAA
+ AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAA
+ AAQAAAAFAAAABgAAAAYAAAAHAAAABwAAAAgAAAAIAAAABwAAAAcAAAAGAAAABgAAAAUAAAAFAAAABAAA
+ AAQAAAADAAAAAwAAAAIAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAAAAMAAAAFAAAABwAA
+ AAgAAAAJAAAACQAAAAoAAAALAAAADAAAAAwAAAANAAAADQAAAA4AAAAOAAAADgAAAA8AAAAPAAAADwAA
+ AA8AAAAPAAAADwAAAA8AAAAOAAAADgAAAA4AAAANAAAADQAAAAwAAAAMAAAACwAAAAoAAAAJAAAACQAA
+ AAgAAAAGAAAABAAAAAMAAAACAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAA
+ AAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAASAAAAEwAA
+ ABQAAAAUAAAAFQAAABUAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAVAAAAFQAA
+ ABQAAAAUAAAAEwAAABIAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACgAAAAkAAAAIAAAABwAA
+ AAUAAAADAAAAAf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AAAAAAEAAAACAAAABAAAAAYAAAAHAAAACQAAAAoAAAALAAAADQAAAA4AAAAPAAAAEQAA
+ ABIAAAATAAAAFAAAABUAAAAWAAAAGAAAABkAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB0AAAAdAAAAHgAA
+ AB4AAAAeAAAAHgAAAB4AAAAdAAAAHQAAAB0AAAAcAAAAGwAAABoAAAAZAAAAGQAAABgAAAAWAAAAFQAA
+ ABQAAAATAAAAEgAAABEAAAAPAAAADgAAAA0AAAALAAAACgAAAAkAAAAHAAAABgAAAAMAAAAB////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAADAAAABAAAAAYAAAAHAAAACQAA
+ AAoAAAAMAAAADQAAAA8AAAAQAAAAEgAAABMAAAAXAAAAGAAAABkAAAAbAAAAHgAAACAAAAAhAAAAIgAA
+ ACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAApAAAAKAAA
+ ACcAAAAmAAAAJQAAACQAAAAiAAAAIQAAACAAAAAcAAAAGwAAABkAAAAYAAAAFQAAABMAAAASAAAAEAAA
+ AA8AAAANAAAADAAAAAoAAAAJAAAABwAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wAAAAABAAAAAwAAAAQAAAAGAAAACgAAAAsAAAAPAAAAEAAAABQAAAAVAAAAGAAAABoAAAAdAAAAHwAA
+ ACAAAAAkAAAAJgAAACcAAAApAAAAKwAAAC0AAAAuAAAAMAAAADEAAAAzAAAANQAAADYAAAA3AAAAOAAA
+ ADkQTTRwCzYlWAAAADoAAAA5AAAAOAAAADcAAAA2AAAANQAAADMAAAAxAAAAMAAAAC4AAAAtAAAAKwAA
+ ACkAAAAnAAAAJgAAACQAAAAgAAAAHwAAAB0AAAAaAAAAGAAAABUAAAAUAAAAEAAAAA0AAAALAAAACAAA
+ AAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AAAAAAIAAAACAAAABAAAAAcAAAAJAAAADQAAAA4AAAASAAAAFgAA
+ ABYAAAAYAAAAGwAAAB0AAAAhAAAAIgAAACQAAAAnAAAAKAAAACoAAAAuAAAALwAAADEAAAAxAAAANQAA
+ ADcAAAA4AAAAOgAAADsAAAA9AAAAPwAAAEAAAABCElM4hht8VP8aeVLwCCgbWQAAAEQAAABCAAAAQAAA
+ AD8AAAA9AAAAOwAAADoAAAA4AAAANwAAADUAAAAxAAAAMQAAAC8AAAAuAAAAKgAAACgAAAAnAAAAJAAA
+ ACIAAAAhAAAAHQAAABsAAAAYAAAAFgAAABYAAAASAAAADgAAAA0AAAAJAAAABwAAAAQAAAAC////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACAAA
+ AAoAAAAMAAAADQAAABAAAAASAAAAFgAAABcAAAAaAAAAHAAAAB8AAAAhAAAAJAAAACYAAAAnAAAAKQAA
+ ACsAAAAuAAAAMAAAADAAAAA0AAAANQAAADcAAAA4AAAAOwAAADwAAAA+AAAAPwAAAEAAAABDAAAARA08
+ KGsbe1P6JYRc/ht8VP8ZdE7aAw4KTAAAAEUAAABEAAAAQwAAAEAAAAA/AAAAPgAAADwAAAA7AAAAOAAA
+ ADcAAAA1AAAANAAAADAAAAAwAAAALgAAACsAAAApAAAAJwAAACYAAAAkAAAAIQAAAB8AAAAcAAAAGgAA
+ ABcAAAAWAAAAEgAAABAAAAANAAAADAAAAAoAAAAIAAAACAAAAAYAAAAEAAAAAgAAAAL///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAABAAA
+ AAYAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAOAAAAEAAAABIAAAASAAAAFQAAABYAAAAaAAAAHAAA
+ AB0AAAAhAAAAIgAAACUAAAAnAAAAKQAAACsAAAAtAAAAMAAAADEAAAA0AAAANQAAADgAAAA5AAAAOgAA
+ ADsAAAA/AAAAQAAAAEAAAABBAAAAQgAAAEMHIxhWGnhR7B5+V/6M0LP/ZrWT/xt8VP8Xa0m9AAAARQAA
+ AEQAAABDAAAAQgAAAEEAAABAAAAAQAAAAD8AAAA7AAAAOgAAADkAAAA4AAAANQAAADQAAAAxAAAAMAAA
+ AC0AAAArAAAAKQAAACcAAAAlAAAAIgAAACEAAAAdAAAAHAAAABoAAAAWAAAAFQAAABIAAAASAAAAEAAA
+ AA4AAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAGAAAAAgAAAAL///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABAAAAASAAAAFAAA
+ ABQAAAAWAAAAFwAAABcAAAAZAAAAGQAAABwAAAAfAAAAIQAAACMAAAAnAAAAKAAAACsAAAAsAAAALwAA
+ ADAAAAAyAAAANAAAADQAAAA4AAAAOQAAADoAAAA8AAAAPQAAAD4AAABBAAAAQgAAAEIAAABCAgwISBlz
+ TtYbfFT/eMSj/6Thx/+j4Mb/SaF7/xt8VP8UXD6ZAAAARQAAAEMAAABCAAAAQgAAAEIAAABBAAAAPgAA
+ AD0AAAA8AAAAOgAAADkAAAA4AAAANAAAADQAAAAyAAAAMAAAAC8AAAAsAAAAKwAAACgAAAAnAAAAIwAA
+ ACEAAAAfAAAAHAAAABkAAAAZAAAAFwAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAABAAAAAOAAAADAAA
+ AAoAAAAIAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAKAAAADAAA
+ AA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABkAAAAbAAAAHQAAAB8AAAAfAAAAIQAA
+ ACMAAAAjAAAAJgAAACcAAAApAAAALAAAAC0AAAAxAAAAMgAAADQAAAA1AAAAOAAAADkAAAA7AAAAPAAA
+ AD0AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEMXaki7G3xU/1+xjv+j4cb/i9m3/5zewf+b3MD/Mo9o/ht7
+ U/0PRi93AAAARgAAAEMAAABDAAAAQgAAAEEAAABAAAAAPwAAAD0AAAA8AAAAOwAAADkAAAA4AAAANQAA
+ ADQAAAAyAAAAMQAAAC0AAAAsAAAAKQAAACcAAAAmAAAAIwAAACMAAAAhAAAAHwAAAB8AAAAdAAAAGwAA
+ ABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAIAAAABgAA
+ AAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA
+ AAQAAAAGAAAACAAAAAoAAAAMAAAADAAAAA4AAAAQAAAAEgAAABQAAAAUAAAAFgAAABcAAAAZAAAAGwAA
+ ABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAJgAAACgAAAAqAAAAKgAAACwAAAAuAAAALwAA
+ ADIAAAAyAAAANAAAADcAAAA4AAAAOwAAADsAAAA+AAAAPgAAAEAAAABBAAAAQQAAAEMAAABDFF0/mBt8
+ VP9Gn3r/oeDF/5Lbu/9NxZH/X8uc/5/gxP+O1bb/JINb/hp6UvMJLR5dAAAARAAAAEMAAABDAAAAQQAA
+ AEEAAABAAAAAPgAAAD4AAAA7AAAAOwAAADgAAAA3AAAANAAAADIAAAAyAAAALwAAAC4AAAAsAAAAKgAA
+ ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAA
+ ABQAAAAUAAAAEgAAABAAAAAOAAAADAAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAAAAgAAAAMAAAADAAAAA4AAAAQAAAAEgAA
+ ABQAAAAWAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAA
+ ACoAAAAsAAAALAAAAC4AAAAwAAAAMAAAADEAAAAzAAAANQAAADUAAAA3AAAAOAAAADgAAAA7AAAAOwAA
+ AD4AAABAAAAAQAAAAEEAAABCAAAAQxBJMXobe1P9Mo9o/pvcwP+a3sD/UseU/0bDjf9Fw4z/a8+k/53f
+ w/97yaf/G3xU/xl1T98DEQxNAAAARQAAAEMAAABCAAAAQQAAAEAAAABAAAAAPgAAADsAAAA7AAAAOAAA
+ ADgAAAA3AAAANQAAADUAAAAzAAAAMQAAADAAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJgAA
+ ACUAAAAjAAAAIQAAAB8AAAAdAAAAHQAAABsAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAADgAA
+ AAwAAAAMAAAACAAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA
+ AAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA
+ ACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALgAAADAAAAAwAAAAMQAAADMAAAA1AAAANwAA
+ ADcAAAA4AAAAOgAAADwAAAA8AAAAPgAAAD8AAAA/AAAAQQAAAEMAAABDAAAARRMNB1ErPSaFHHpS+SSD
+ XP6R1bf/n9/E/1zKm/9Fw43/Q8OL/0HCi/9Awor/etSu/5vfwf9jt5T/G3xU/xhsScQAAABGAAAARgAA
+ AEUAAABFAAAAQwAAAEMAAABBAAAAPwAAAD8AAAA+AAAAPAAAADwAAAA6AAAAOAAAADcAAAA3AAAANQAA
+ ADMAAAAxAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAA
+ ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAA
+ AAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAASAAAAFAAA
+ ABYAAAAXAAAAGQAAABsAAAAdAAAAHwAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALAAA
+ AC4AAAAwAAAAMQAAADMAAAA1AAAANwAAADgAAAA4AAAAOgAAADwAAAA+AAAAPwAAAD8AAABBAAAAQyQZ
+ Dl5GMRyPVT0htl9DJ9NnSyrvZlAx/yd1T/8bfFT/gcur/6Hgxf9rz6T/RcOM/0LCi/8/wor/PcGJ/zzB
+ iP8+wYn/hdi1/5newP9Io33/G3xU/zxgPPBYPiPHTTceqDcnFnwMCARPAAAARgAAAEYAAABFAAAAQwAA
+ AEEAAAA/AAAAPwAAAD4AAAA8AAAAOgAAADgAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAA
+ ACwAAAAqAAAAKAAAACYAAAAlAAAAIwAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFAAA
+ ABIAAAASAAAAEAAAAA4AAAAMAAAACgAAAAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAQAAAAGAAAACAAA
+ AAgAAAAKAAAADAAAAA4AAAAQAAAAEgAAABQAAAAWAAAAFwAAABkAAAAZAAAAGwAAAB0AAAAfAAAAIQAA
+ ACMAAAAlAAAAJgAAACgAAAAqAAAALAAAACwAAAAuAAAAMAAAADEAAAAzAAAANQAAADcAAAA4AAAAOgAA
+ ADwAAAA8AAAAPgAAAD8YEQlQRTAbiFc9I7lkRyfpakws/25PL/9xVDT/dFY2/3RYOf80ckz/G3xU/2y8
+ mv+i4MX/e9St/0XDjf9Cw4v/P8KK/z3BiP86wIf/OMCG/zfAhv9Bw4v/jtu7/5PbvP80kWr/G3tU/11m
+ Rf90WDv/bFAx/2VHKPtbQSTUTTYepTMkFHQCAQFHAAAARQAAAEMAAABBAAAAPwAAAD4AAAA8AAAAPAAA
+ ADoAAAA4AAAANwAAADUAAAAzAAAAMQAAADAAAAAuAAAALAAAACwAAAAqAAAAKAAAACYAAAAlAAAAIwAA
+ ACEAAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAA
+ AAgAAAAGAAAABAAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wAAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAOAAAADgAAABAAAAASAAAAFAAA
+ ABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAACEAAAAhAAAAIwAAACUAAAAmAAAAKAAAACoAAAAsAAAALgAA
+ ADAAAAAwAAAAMwAAADMAAAA1AAAAN0FBQUaoqKh2kJCQahwaGEdBLhp8XEEkxGdJKftqSyr/bU8t/3FR
+ Mf9yUzL/dVU1/3dXNv95WTj/RWxH/xt8VP9TqYX/o+DG/4vZt/9IxI7/RMOM/0HCiv89wYn/OsCH/zfA
+ hv81v4X/M7+E/zK/g/9KxpH/lN2+/4nUtf8khFz/IHtU/3VtT/+Ga0//g2lN/3peQf9wVDb/aEoq/2FE
+ JutOOB+nJxsPYgAAAEEAAABBAAAAPwAAAD4AAAA8AAAAOgAAADgAAAA3AAAANQAAADMAAAAzAAAAMAAA
+ ADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAdAAAAHQAAABsAAAAZAAAAFwAA
+ ABYAAAAUAAAAEgAAABAAAAAOAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAA
+ AAgAAAAIAAAACgAAAAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAABsAAAAdAAAAHwAA
+ ACEAAAAjAAAAJQAAACYAAAAoAAAAKgAAACwAAAAsAAAALgAAADAAAAAxAAAAMwAAADWHh4de7+/v0fr5
+ +fX5+Pf74tzW/IFnSv+CZ0r/iG5S/4RnSv97Wzv/dlYz/3dXM/96WDX/e1o3/1dnQv8bfFT/PZhx/6Hf
+ xP+X3b//UMaS/0bEjf9Dw4z/P8KK/zzBiP85wIb/Nb+F/zK+g/8wvoL/Lr2B/zC+gv9by5z/lt2//3nK
+ qP8cfVX/K3lT/4NtUP+Nc1f/l4Bn/5qEbP+bh3D/lYBp/4JpTf9pTS7/XUEl10cyHI0LBwREFxcXQQAA
+ ADwAAAA6AAAAOAAAADcAAAA1AAAAMwAAADEAAAAwAAAALgAAACwAAAAsAAAAKgAAACgAAAAmAAAAJQAA
+ ACMAAAAhAAAAHwAAAB0AAAAbAAAAGwAAABkAAAAXAAAAFgAAABQAAAASAAAAEAAAAA4AAAAMAAAACgAA
+ AAgAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEgAA
+ ABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAfAAAAIQAAACEAAAAjAAAAJQAAACYAAAAoAAAAKgAA
+ ACwAAAAsAAAALgAAADAAAAAxAAAAM3FmW3DX0crr8u/s//f18//w7en/yr+z/8O1pv+/sJ//wbGh/8Gx
+ oP++rZv/qpR8/5FyUv9pZD7/HXtT/y2JY/+b27//oODE/1vJmv9JxI//RsON/0LDi/8/wor/PMGI/zjA
+ hv81v4T/Mb6D/y69gf8rvYD/Lr2B/zK+g/9w0aj/mN7A/2W6lv8bfFT/To5t/9HGuv/Uyb7/1Mq//9bM
+ wv/VzML/187G/9bOxf/HvLD/sKCP/8O4rfjo5eLq8/Pz4OTk5LuZmZloAAAANQAAADMAAAAxAAAAMAAA
+ AC4AAAAsAAAALAAAACoAAAAoAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAA
+ ABYAAAAUAAAAEgAAABIAAAAQAAAADgAAAAwAAAAKAAAACAAAAAYAAAAEAAAAAv///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAgAA
+ AAIAAAAEAAAABgAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABcAAAAZAAAAGwAA
+ ABsAAAAdAAAAHwAAACEAAAAjAAAAJQAAACYAAAAmAAAAKAAAACoAAAAsAAAALjspF1xgRCbBj3df/8K0
+ pv/RyL3/wbOk/5B2Wf9+XTv/eVgz/3lWMf99WTP/h2ZC/5V2V/+uln7/rqiT/ymAWf8ggFj/kNO2/6bi
+ x/9qzqL/TcWR/0rEj/9GxI3/Q8OM/z/Civ88wYj/OcCG/zW/hf8yvoP/ML6C/y++gv8wvoL/M7+E/zi/
+ hv+C17P/mt7B/02mgf8bfFT/XYJg/5Z6XP+Td1j/j3NV/45zVv+XfmT/o453/7CejP/i3Nb/9/b0//v7
+ +v/8/Pz/9vX09+7t7dFxcXFMAAAAMAAAADAAAAAuAAAALAAAACoAAAAoAAAAJgAAACYAAAAlAAAAIwAA
+ ACEAAAAfAAAAHQAAABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABIAAAAQAAAAEAAAAA4AAAAMAAAACgAA
+ AAgAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABgAAAAgAAAAKAAAADAAA
+ AAwAAAAOAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAAABsAAAAdAAAAHQAAAB8AAAAhAAAAIwAA
+ ACUAAAAmAAAAJiUaDztdQiWwbE4t/q+di//KvbH/oIpy/3hYNf93VDD/eVYx/3tXMf99WTL/f1oz/4Bb
+ NP+CXTT/g101/4FgN/8yeFD/G3xU/4DHqP+q48n/fNOs/1HGk/9OxZH/S8WP/0fEjv9Ew4z/QcKK/z3B
+ if86wIf/N8CG/zW/hf8zv4T/M7+E/zO/hP81v4X/OMCG/0TDjf+R27v/mNzA/zmVbv8bfFT/bHZT/5N0
+ VP+SdFT/kXNV/5BzVf+Pc1b/jXNW/6mVgP/Z0cj/8u/s//n49//z8e//zMO5+VpGMX8AAAAsAAAALAAA
+ ACoAAAAoAAAAJgAAACYAAAAlAAAAIwAAACEAAAAfAAAAHQAAAB0AAAAbAAAAGQAAABcAAAAWAAAAFgAA
+ ABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAAAAQAAAAC////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AAAAAAIAAAACAAAABAAAAAYAAAAIAAAACgAAAAwAAAAMAAAADgAAABAAAAASAAAAFAAA
+ ABQAAAAWAAAAFwAAABkAAAAbAAAAGwAAAB0AAAAfAAAAIQgFAyRVPCKAaEop8XJTMv+5qZj/x7qs/4Zo
+ SP93VTD/elYx/3xYMv9/WjP/gFs0/4NdNf+FXjX/hmA2/4hgNv+JYjf/QnNK/xt8VP9otpT/uejT/5rd
+ wP9Wx5X/UseT/0/Gkv9MxZD/ScSO/0XDjf9Cw4v/P8KK/z3Bif86wIf/OMCG/zfAhv83wIX/N8CG/znA
+ hv87wYj/PcGJ/1PIlf+b38L/kde5/yiGX/8gfFT/gHdU/5Z2Vf+UdVX/k3ZW/5J1Vv+SdVb/kHRW/490
+ V/+jjnf/sKCN/8e8sP/e19D/nYt3/11CJck2JhVKAAAAJgAAACUAAAAjAAAAIQAAACEAAAAfAAAAHQAA
+ ABsAAAAbAAAAGQAAABcAAAAWAAAAFAAAABQAAAASAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA
+ AAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAAAgAA
+ AAQAAAAGAAAACAAAAAgAAAAKAAAADAAAAA4AAAAQAAAAEAAAABIAAAAUAAAAFgAAABYAAAAXAAAAGQAA
+ ABlBLhpBZUgo1GtMK/9vTyz/sp+M/8i7rf+EZUP/elcx/31ZMv9/WjP/glw0/4ReNf+GYDb/iGE3/4pi
+ N/+MYzj/jmU5/1hwRf8bfFT/T6OA/7bm0P+96dX/edOr/1fIlv9Ux5T/UcaS/03Fkf9KxY//R8SO/0XD
+ jP9Cwov/QMKK/z7Bif88wYj/O8GI/zvBh/87wYj/PMGI/z7Bif9Awor/QsOL/2bNof+g4MT/hc6v/x19
+ Vf8se1T/kHhU/6GCY/+egGL/mHla/5V2V/+Ud1j/knZY/5F2WP+QdVj/j3VZ/6uZhf/g2tP/s6WV/2RJ
+ KftWPCGUBQQCIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABYAAAAWAAAAFAAAABIAAAAQAAAAEAAA
+ AA4AAAAMAAAACgAAAAgAAAAIAAAABgAAAAQAAAACAAAAAv///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAAAEAAAABAAAAAYAAAAIAAAACgAA
+ AAoAAAAMAAAADgAAABAAAAAQAAAAEgAAABQAAAAUVTwhWmlKKfJtTSz/cVAt/5l/Zf/TyLz/jnBR/31Z
+ Mv+AWzP/gl00/4VeNf+HYDb/iWI3/4xjOP+OZTn/j2Y6/5FnOv9vbkL/G3xT/zmRbP+v4sv/xOvZ/5vd
+ v/+E1rH/WciW/1XHlf9Sx5P/T8aS/03FkP9KxI//R8SO/0XDjf9Dw4z/QcKL/0DCiv8/wor/P8KK/z/C
+ iv9Awor/QcKL/0PDjP9Fw43/SMSO/3vUrf+i4Mb/cb+d/xt8VP8+e1T/oYNi/6SGZv+jhWX/mnta/5d5
+ WP+Vd1j/lXhZ/5N3WP+Rdln/kHVZ/6WQe//f2NH/s6OU/3FWOP9eQiW9JBoOJwAAABcAAAAXAAAAFgAA
+ ABQAAAAUAAAAEgAAABAAAAAQAAAADgAAAAwAAAAKAAAACgAAAAgAAAAGAAAABAAAAAQAAAAC////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AAAAAAgAAAAIAAAAEAAAABgAAAAYAAAAIAAAACgAAAAwAAAAMAAAADmBE
+ JnxqSyr9b08s/3NRLv97Wjb/0sa6/6iQd/9/WjP/gl00/4VfNf+IYDb/imI3/4xkOP+PZjn/kWc6/5Np
+ O/+Vajz/gm1A/yF7U/8ohV7/pdzD/8jt3P+l4cX/l9y8/4/auP9ayZf/V8iW/1XHlP9SxpP/T8aS/03F
+ kP9KxY//SMSO/0bEjf9Fw4z/RMOM/0PDjP9Dw4z/Q8OM/0TDjP9Fw43/R8SN/0jEjv9LxY//TsWR/4/a
+ uf+l4sf/WKuI/xt8VP9Yflj/qIlo/6aIZ/+khWX/mntZ/5l6Wf+XeVn/lnha/5R3Wf+Sd1r/kHZa/6yZ
+ hf/j3df/pJF9/4BnTf9mSi3bQi4aMwAAABIAAAAQAAAAEAAAAA4AAAAMAAAADAAAAAoAAAAIAAAABgAA
+ AAYAAAAEAAAAAgAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AAAAAAgAAAAIAAAAEAAAABjMjFAxnSCmibU0r/3FQLf90Uy//eFUw/6KJbv/Sxbj/hWA5/4Ve
+ Nf+IYDb/i2M4/41kOf+QZjr/kmg7/5RpPP+Xaz3/mG09/5FuP/8selH/HX5V/5XSt//I7Nv/seTM/5zd
+ wP+Y3b3/ldy8/2LLm/9ayJf/V8iW/1THlP9SxpP/UMaS/03Fkf9LxZD/SsSP/0jEjv9IxI7/R8SO/0fE
+ jf9HxI7/SMSO/0nEjv9KxI//TMWQ/07Fkf9QxpL/WMmX/53ewf+l4Mb/P5hz/xt8VP94hWH/q4tp/6mK
+ aP+jg2H/nHxZ/5t7Wv+Zelr/mHpa/5Z5Wv+UeFv/knda/8KzpP/e18//kXlh/4hxV/9uUjbwVDwhTAAA
+ AAoAAAAIAAAACAAAAAYAAAAGAAAABAAAAAIAAAAC////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlSCgWaksqxG5O
+ LP9yUS7/dlMv/3lWMf99WTL/y7ur/7Sdg/+HYDb/imI3/41kOf+QZjr/kmg7/5VqPP+YbD3/mm4+/5xv
+ P/+bcUD/PXlP/xt8VP+Aw6X/xuvZ/7zo1P+h38L/nd7A/5rdvv+W3Lz/bc+j/1zJmP9ayJf/V8iW/1XH
+ lf9Tx5P/UcaS/0/Gkv9OxZH/TMWQ/0vFkP9LxZD/S8WP/0vFkP9MxZD/TcWQ/07Fkf9PxpL/UcaT/1PH
+ lP9Vx5X/Z8yf/6bhx/+f28D/LYli/x98VP+RiWb/rY1r/6uMaf+igFz/n31a/518Wf+be1r/mXtb/5h6
+ W/+VeFr/lntf/97Wzv+1pJL/jXRa/4pzWv90WT77XkIlbQAAAAIAAAAC////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AZkgpLmpLKuBuTiz/c1Eu/3dUMP96VzH/f1oz/5d4Vv/c0cX/lXFL/4xk
+ OP+PZjr/kmg7/5VqPP+YbD3/m24+/51wP/+gckD/oXNB/1V5TP8bfFT/ZbCQ/8Pq2P/G69r/peDF/6Lf
+ w/+f38H/m92+/5jcvf960qr/X8qa/13JmP9ayZf/WMiW/1bHlf9Ux5T/U8eT/1HGk/9QxpL/T8aS/0/G
+ kv9PxpL/T8aS/1DGkv9QxpL/UcaT/1PHlP9Vx5T/VsiV/1jIlv9byZf/d9Gp/6zjyv+T07f/H35X/yt9
+ Vv+jjWn/r45r/6uKZv+if1r/oH5b/559Wv+cfVv/mntb/5h7W/+WeVv/vaya/9vSyf+Rd1z/jXRb/4tz
+ W/97Ykj/Y0YomVxBJQX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGdJKVBrTCvzb08s/3RS
+ Lv94VTD/fFgy/4BbM/+DXTX/v6qU/8i0oP+OZTn/kWc6/5VqPP+YbD3/m24+/51wP/+gckH/o3RC/6V2
+ Q/9weEr/G3xU/0udef+/6NT/zu7e/6ziyP+n4cX/pODD/6Dfwv+c3cD/mt2+/4XWsf9iypv/YMqa/13J
+ mf9byZj/WsiX/1jIlv9WyJX/VceV/1THlP9Tx5T/U8eU/1PHk/9Tx5T/VMeU/1THlP9Vx5X/V8iV/1jI
+ lv9ayJf/XMmY/17Jmf9gypr/iti0/6/ky/9/xaf/G3xU/z5+Vv+ujmn/sZBs/6iEX/+jgFv/ooBb/6B+
+ W/+dflv/m3xb/5l7W/+eg2b/5N3W/66ZhP+Qd1v/jnVb/4x0W/+BaU//ZUkswVxBJRP///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wBnSSlNa0wr/XBPLf90Uy//eVYw/31ZMv+BXDT/hV41/5BrRP/d0cT/qYhm/5Rp
+ O/+Xaz3/mm0+/51wP/+gckD/o3RC/6Z2Q/+oeET/iHlI/x58VP80jWf/t+PO/9Lv4f+05c3/q+LH/6jh
+ xv+l4MX/ot/C/57ewP+c3b//kdq5/2XLnP9jy5v/Ycqa/1/Kmf9dyZn/W8mY/1rJl/9ZyJb/WMiW/1fI
+ lv9XyJb/V8iV/1fIlv9XyJb/WMiW/1nIl/9ayZf/XMmY/13Jmf9fypr/Ycqb/2PLnP9ly53/nN2//7Hl
+ zf9lsZD/G3xU/1mAV/+0kmz/q4Ze/6eDXP+lgVv/o4Fb/6F/W/+eflv/nH1b/5p8W//Juqn/1Mi8/5N4
+ W/+Rd1v/jnVb/4x0W/+FblX/aU0x0VxBJAv///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZkgpLGtMK/JwTy3/dFMv/3lW
+ Mf99WTL/glw0/4ZfNv+KYjf/qIhm/93Rw/+WbD7/mG09/5xvP/+fcUD/onNB/6V2Q/+oeET/q3pF/5t8
+ R/8nfFP/JIFa/6rbxP/T8OL/vejS/6/jyv+s4sj/quLH/6fhxf+k38P/oN/B/57ewP+a3b7/as2f/2bM
+ nf9ky5z/Ysub/2HKmv9fypr/XsmZ/13JmP9cyZj/W8mY/1vJmP9byZf/W8mY/1vJmP9cyZj/XcmZ/17K
+ mf9fypr/Ycqa/2PLm/9ky5z/Zsyd/2jMnv9vzqL/qeHH/7Lkzf9JnHj/G3xU/3eCWf+shVz/q4Vc/6mD
+ XP+mglz/pIFc/6GAW/+ff1v/nX1b/6eNcf/n4Nn/po92/5N4W/+Rdlv/jnVb/4tzWv+FbVX/Z0wvr1tA
+ JAH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AGVIKBRrTCvfcE8t/3RTL/95VjH/flkz/4JdNP+GYDb/i2M4/49mOf+6n4H/08Ct/5pu
+ Pv+ecED/oXNB/6R1Qv+nd0T/qnlF/618Rv+pfEb/NnxR/xt8VP+Yz7X/0u7g/8fq2f+05M3/seTL/67i
+ yf+r4sj/qeHG/6XgxP+i38L/oN7B/5zdv/960qr/acyf/2fMnv9my53/ZMuc/2PLm/9iypv/Ycqa/2DK
+ mv9fypr/X8qa/1/Kmf9fypr/X8qa/2DKmv9hypr/Ysqb/2PLnP9ky5z/Zsyd/2jMnv9qzJ//bM2g/27N
+ of970an/suXN/63fyP8xjGX/HnxU/4+FWv+uh1z/rIVd/6mEXP+og1z/pYJc/6KBXP+gf1v/nn1b/9XI
+ uv/IuKb/lnpb/5N4W/+Rdlv/jnVb/4tzWv+Da1P/ZUoug////wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBlRygGaksqwm9PLP90Uy//eVYx/35Z
+ M/+DXTX/h2A2/4tjOP+PZjr/lGk7/8qzm//IsJb/oHJA/6N0Qv+mdkP/qnlF/617Rv+vfUb/r31G/018
+ T/8bfFT/f76g/9Du3//Q7t7/uObP/7blzv+y5Mv/sOPK/63iyP+r4cf/p+HF/6Tfw/+i38L/n97A/5DZ
+ tv9tzaD/a82f/2nMn/9ozJ7/Z8yd/2bLnf9ly5z/ZMuc/2PLnP9jy5z/Y8ub/2PLnP9jy5z/ZMuc/2XL
+ nP9my53/Z8yd/2jMnv9qzJ//a82g/23NoP9vzqH/cc6i/3PPo/+K1rL/uebQ/6LYv/8igFn/Kn1V/6OH
+ XP+wiF3/rYZd/6uFXf+ohFz/poJc/6SBXP+gf1v/xrOf/9fLvf+Ze1v/lnpb/5N4W/+Qdlv/jXRb/4pz
+ Wv+AaE/+ZEktV////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AGlKKpxuTiz/dFIu/3lWMP9+WTP/g101/4hgNv+MYzj/kWc6/5VqPP+ZbT7/2sm2/8Ch
+ gP+kdUL/qHhE/6x6Rf+vfUf/sH1G/7F+Rv9nfUz/G3xU/1+piP/L7Nz/1vDj/73n0f+65s//t+XO/7Tk
+ zf+x48v/r+PJ/6ziyP+p4cb/puDE/6Tgw/+h3sH/nt7A/3bQpv9vzqH/bc2g/2zNoP9qzZ//acyf/2nM
+ nv9ozJ7/Z8ye/2fMnv9nzJ3/Z8ye/2fMnv9ozJ7/acye/2rMn/9rzZ//bM2g/23Nof9vzqH/cM6i/3LP
+ o/90z6T/dtCl/3jQpv+b3Lz/u+fR/4/Lr/8bfFT/PX9W/6+IXP+xiV3/r4dd/6yGXf+phF3/poNc/6OB
+ W/+7o4n/5NzS/5t8W/+Ye1v/lXlb/5J3Wv+PdVr/jXRZ/4pzWf98ZUv3YUUpM////wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBoSilxbk4s/3NSLv94VTD/fVky/4Jd
+ NP+IYDb/jGM4/5FnOv+Vajz/mm0+/6BzRP/l2cv/uJJp/6p5Rf+tfEb/r31G/7B+Rv+yf0b/gn5K/xt8
+ VP9ClnL/xOjV/9nx5f/B6NT/vefR/7vm0f+55c//tuXN/7PkzP+x48r/ruLJ/6vhx/+o4cX/puDE/6Pf
+ wv+g3sH/itey/3LPo/9xzqL/b86i/27Oof9tzaH/bM2g/2zNoP9rzaD/a82f/2vNn/9rzaD/bM2g/2zN
+ oP9tzaD/bc2h/27Oof9wzqL/cc6i/3LPo/90z6T/dtCl/3jQpv960Kf/fNGo/37Sqf+q4cb/vujT/3K3
+ mP8bfFT/WIJX/7SLXf+yiV7/r4dd/62GXf+qhF3/poNc/7GUc//p4dn/polp/5t8W/+Yelv/lXlb/5J2
+ Wv+PdVr/jHRZ/4lyWf96YknnXEEkGP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AZ0kpSG1NK/xyUS7/d1Uw/31ZMv+CXTT/h2A2/4xjOP+RZzr/lWo8/5xxQv+vimL/x6qM/+3j
+ 2f+1iVv/r31H/7B9Rv+xfkb/sn9G/5h/SP8ifFP/Lohi/7jhzf/a8eX/xurX/77n0v+959H/vObR/7rm
+ 0P+45c7/teTM/7Ljy/+w48r/reLI/6rhxv+o4MX/peDD/6Pfwv+c3b7/d9Cl/3TPpP9zz6P/cs+j/3HO
+ o/9wzqL/cM6i/2/Oov9vzqL/b86h/2/Oov9vzqL/cM6i/3HOov9xzqP/cs+j/3PPpP91z6T/dtCl/3jQ
+ pv950Kb/e9Gn/33RqP9/0qn/gdKq/4XUrP+25M3/v+fT/1Oif/8bfFT/d4ZZ/7WLXv+yiV7/sIhe/62H
+ Xf+qhV3/qYZg/+nh2P+1m3//nX5b/5t8W/+Yelv/lXhb/5F2Wv+OdFr/i3NZ/4hxWP90W0HNWkAkB///
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGVHKChrTCvwcVAt/3ZUL/98WDL/gVw0/4Zg
+ Nv+MYzj/kWc6/5VqPP+gd0r/zbac/+HRwf/v5t3/+PTw/+HOuv+/l2v/sn9G/7OARv+ogEb/Ln1S/x9+
+ V/+n18D/1/Dk/8vs2//A6NP/vufS/73n0f+85tH/u+bQ/7rlz/+35c3/tOTM/7Lky/+v48n/reLI/6rh
+ xv+n4MX/pd/D/6Pfwv+G1K//eNCm/3fQpf920KX/dc+k/3TPpP90z6T/c8+k/3PPo/9zz6P/c8+k/3PP
+ pP90z6T/dc+k/3XPpf920KX/d9Cl/3jQpv960af/e9Gn/33RqP9+0qn/gNKq/4LTq/+E06z/htSt/5DX
+ s/+/59P/u+TP/ziPaf8dfFT/k4hb/7aMXv+zil3/sIhe/62GXf+qhV3/4dXH/8Ksk/+hf1v/nX5b/5p7
+ W/+XeVv/k3da/5B1Wf+Mc1j/iXFY/4VtVv9kSy6k////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wBjRicBaUoqyW9PLP91Uy//elcx/4BbM/+GXzb/i2M4/5BmOv+Vajz/mm8//8WqjP/l2Mr/8uzk//r3
+ 9P/8+/n/9e/p/+3h1P/VuJj/zrCM/0eJYf8bfFT/j8it/9Pv4f/R7t//wOjU/8Do0/++59L/vefR/7zm
+ 0f+75tD/uuXP/7jlzv+25c3/tOTM/7Hjyv+v4sj/rOLH/6rhxv+o4MX/puDD/5nbuv980aj/e9Gn/3rR
+ p/950Kb/eNCm/3jQpv930Kb/d9Cl/3fQpf930KX/eNCm/3jQpv940Kb/edCm/3rRp/970af/fNGo/33R
+ qf9/0qn/gNKq/4LTq/+E06z/htOt/4fUrv+J1K7/jNWw/5zauv/D6dX/rtzG/yWCWv8ofVX/p4tb/7eM
+ Xv+zil7/sIhe/62GXf/XxbL/0L2p/6OBW/+gf1v/nX1b/5l7Wv+WeVr/k3dZ/5B1Wf+Lclf/iHBX/3pi
+ SP9cQSRU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGlLKmZwUTD/c1Iu/3lWMP9/WjP/hV41/4pi
+ N/+Yckn/tZd3/8WrkP/QuaH/5dnK//Lr5P/48+//+/n3//z6+f/07eX/6t3N/86rg/9hil//G3xU/3G2
+ l//O7d3/3/Pp/9rx5f/Z8eT/2PHk/9fw4//X8OP/1vDi/9Xw4v/U7+H/1O/h/9Pv4P++59L/s+TL/7Hj
+ yv+v4sj/rOHH/6vhxv+o4MX/pt/D/4vWsf9/0qn/ftKp/33RqP980aj/fNGo/3vRqP970af/e9Gn/3vR
+ p/970aj/fNGo/3zRqP990aj/ftKp/3/Sqf+C06z/suPL/7Pky/+05Mz/teTN/7bkzf+35M3/uOXO/7nl
+ zv+55c7/ueXO/8Lo1P/D6db/mc+1/xt8VP86f1X/tIxc/7eNX/+0i17/sIhe/863n//czLz/poJc/6OB
+ W/+fflv/nH1b/5h6Wv+VeFr/kXZY/450WP+KcVf/hnBX/2tRNuZZPyQM////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wBkRygTc1U27XNTMP93VDD/fVky/4NdNf+beVX/uqGG/867pv/FrZL/uZl2/7SOZv/Gp4X/4M25/+3i
+ 1v/38uz/+fby/+zf0f/fyK7/eYRS/xt8VP9Dl3P/st/J/7Tgyv+04Mr/teHL/7Xhy/+14cv/teHL/7Xh
+ y/+34cv/t+HL/7nizP/A59T/0O7f/8Dn0/+15Mz/s+PL/7Hjyv+v4sj/reHH/6vhxv+p4MT/pN/C/4bU
+ rf+C06v/gdKq/4DSqv+A0qr/f9Kq/3/Sqf9/0qn/f9Kq/4DSqv+A0qr/gNKq/4HSqv+C06v/g9Or/4fU
+ rv+/6NT/vefS/7bizP+04cv/teHL/7bhzP+24cz/tuHM/7bhzP+24cz/tuHM/7bhzP+24cz/arCR/xt8
+ VP9Uglb/uY1d/7eMXv+zil7/z7ac/93Ovf+pg1z/pYFc/6F/W/+efVr/m3tZ/5d5Wf+Tdlj/j3VY/4ty
+ V/+IcFf/gGlQ/2BGKY3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGlMK5p8X0D/dVMv/31aNP+dgGH/v6qT/8y6
+ pv+8oob/poBY/55wQP+jdEL/qHhE/617Rv/LqYX/3ceu/+7j1//z6+L/3MOm/7mcbP8efFP/G3xU/xt8
+ VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/4LDpP/Q7t//wOfT/7Xk
+ zP+048v/s+PK/7Ljyf+v4sj/ruLH/6zhxv+p4MX/n92+/4bUrf+F06z/hNOs/4TTrP+E06z/g9Or/4PT
+ q/+D06v/hNOs/4TTrP+E06z/hdOs/4bUrf+H1K3/i9Ww/8Ho1f+d1Ln/IH9X/xt8VP8bfFT/G3xU/xt8
+ VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP+QiFn/uY1d/7eMXv/RuJ7/3s68/6yF
+ Xf+og1v/pYFb/6F+Wv+dfFr/mXpZ/5V4WP+RdVf/jnNX/4lxVv+Gblb/c1tA+1pAJC3///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wBlRygvc1Y3/n1fPv+FZUP/vKiU/8i2o/+xlnr/mnNJ/5drPf+dcD//onNB/6d3RP+se0b/sH1G/7F/
+ Rv+4iFL/28Gk/+TRu/+4hEX/t4RF/2+BS/9cgE3/XIBN/12BTf9dgU3/XoJN/16CTf9egk3/X4JN/1+D
+ Tf9ghVD/ZIxc/2KMXf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/ruHH/6zh
+ xv+q4cX/mdm5/4nUrv+I1K7/iNSu/4jUrv+H1K3/h9St/4fUrf+I1K7/iNSu/4jUrv+J1K7/itWv/4vV
+ r/+O1rH/w+nW/4vFq/8bfFT/UYha/2OMXf9jjF3/Yote/2GJWv9ehFP/XYNS/12DU/9dg1T/XINU/1yD
+ Vf9cg1X/YYNW/7CMWv+6jVz/uY1d/9S6nv/fzrv/rodc/6uFXP+ng1v/o4Bb/59+Wf+cfFn/l3lY/5R3
+ WP+QdFb/jHJX/4hvVf+EbVX/ZUswwP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLKuBZEb/lntg/8S0o/+3oYr/j2hA/49m
+ Ov+Vajz/m24+/6FzQf+mdkP/rHpF/699Rv+xfkb/s4BG/7WBRf/UtpH/38eq/7mFRf+7hkT/vIdE/76I
+ RP+/iUP/wIpD/8OMRf/GkUv/x5RO/8iVTv/Ilk//yZZS/9Clav/Rp23/y6Zu/xt8VP9psJD/0O7f/8Dn
+ 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MT/ldi2/4zVsP+M1bD/jNWw/4vV
+ r/+L1a//i9Wv/4zVsP+M1bD/jNWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wr/xt8VP+jmmX/0KVr/8+l
+ a//PpGz/zqRt/8eYWf/CkVH/wZBR/8CPU/+/j1T/v49W/76PV/+9j1j/vI5a/7uOW/+6jVz/1ryg/+DO
+ uv+yiFz/rodc/6mEW/+mglr/oX5Z/559Wf+aelf/lndX/5F1Vv+Nc1b/iW9U/4VuVP9zW0H/WkAkOv//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wBlRygodFc3/Z2Gbv/NwLP/p450/4ZhN/+NZDn/k2k7/5ltPv+fcUD/pXZD/6p5Rf+vfUb/sX5G/7OA
+ Rv+0gUX/toNF/9a4lP/fxqf/u4ZE/72IRP/AjUr/xZNR/8mZWv/NoGP/z6Rp/9Glaf/RpWr/0aZs/9Gn
+ bf/RqG7/0ahw/9Gpcf/Lp3H/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h
+ x/+t4cb/rOHG/6vgxf+p38T/lti2/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V
+ sP+N1bD/kNay/8Pp1v+Lxar/G3xU/6OcZv/RpWv/0aZr/8+la//PpGz/zaJo/8ORT//DkFD/wZBR/8GQ
+ Uv+/kFT/v49V/76PV/+9jlf/vI5a/7qNW//WvKD/4c66/7WKXf+wh1v/rIVb/6mCWv+kgFr/oH1Y/5x7
+ WP+YeFf/k3ZW/49zVf+LcVX/h25T/4FpUf9eRCe3////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGhMLaOTe2D/zcG0/7GbhP+IYzv/i2M4/5Fn
+ Ov+XbD3/nXA//6N0Qv+peUT/r31H/7F+Rv+zgEb/tIFF/7aCRf+4hEX/2LuW/97EpP+9iET/x5da/8yh
+ aP/Oomn/z6Np/9Ckaf/RpWv/0aZs/9Gobv/RqG//0qlx/9Kqcv/SqnP/0qpz/8ypc/8bfFT/abCQ/9Du
+ 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+o38P/l9m3/43V
+ sP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xn/9Gn
+ bf/Rp2z/0aZs/9Cla//QpWz/yZla/8ORTv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/vI1a/9e9
+ oP/hzbj/t4xd/7SKXP+vh1v/q4Ra/6eBWf+jf1n/nnxX/5p5V/+Vd1b/kXRW/4xxVP+Jb1P/hGxS/2tR
+ N/9ZPyMy////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wBkRygieF4++8m8rv+3pJD/k3RT/4piOf+OZTn/lWo8/5tuPv+hc0H/p3dE/618Rv+wfkb/sn9G/7SB
+ Rf+2gkX/uIRF/7qFRP/YuZL/4Mio/8WVVv/NoWn/zqNp/8+lav/RpWr/0ads/9Gnbf/SqG//0qlw/9Kq
+ c//Sq3P/0qt0/9Ksdv/TrHf/0LB+/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di
+ yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/mdm4/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43V
+ sP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8VP+inGj/0ahu/9Gobv/Rp23/0aZs/9GmbP/Oomf/xZFN/8OR
+ Tv/DkFD/wZBR/8GQUv+/kFT/v49V/76PV/+8jlf/2L6h/+DMtv+5jFz/totd/7KJXP+thlv/qYNa/6SA
+ Wf+gflj/m3tX/5d4V/+TdVX/jnJU/4pvU/+FbFL/emJI/1xBJK3///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////UtXMxM/Nw7f/yLqs/5N0VP+Tck7/i2M4/5Jo
+ O/+YbT3/n3FA/6V2Q/+sekX/sH1G/7F/Rv+0gEb/toJF/7eDRf+5hUX/u4ZE/9Sxhf/o1Lz/zaJq/8+k
+ av/QpWv/0aZr/9Knbf/SqG//0qlw/9Kqcv/SqnT/0qt1/9Ksd//TrXj/0615/9Ouef/VvJT/G3xU/2mw
+ kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf
+ w/+m3sL/m9q6/43VsP+N1bD/jdWw/43VsP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/6Od
+ af/OpGr/z6Rq/9Gnbv/Rp23/0qdt/9GmbP/HllH/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/72O
+ Vv/awaP/3siw/7mMW/+4jFv/tIlc/6+GWv+shFr/p4FZ/6N/WP+de1b/mXlW/5R2VP+Qc1T/i29S/4dt
+ Uv+BalD/Y0ks/Vg+Ixv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /yz+/v2x6+jj/Pbz8f/FtqX/lHVV/49pQf+PZjn/lWo8/5xvP/+jdEL/qXlE/699Rv+xfkb/s4BG/7WC
+ Rf+3g0X/uYVF/7uGRP+9iET/065//+/hz//PpGv/0aZs/9KmbP/SqG7/0qhv/9Kqcv/SqnP/0qx1/9Ks
+ dv/TrXj/0655/9Oue//Tr3z/1bKC/9rHpf8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi
+ yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/ndu7/43VsP+N1bD/jdWw/43V
+ sP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vFqv8bfFT/o5xo/8aVUf/FlE7/yZlV/86jZ//Rp27/0qdt/8yc
+ XP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8GQUv+/j1P/vo9V/+HMtP/YvZ3/uoxZ/7iMW/+3i1v/sohb/66F
+ Wf+pgln/pH9X/6B8V/+belX/lndV/5FzU/+NcFL/iG5R/4NrUP9xWD3/WkAkdv///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////avb08t/6+fj/+vn3/9zTyf+Tck//i2M4/5Jo
+ O/+ZbT7/oHJA/6Z2Q/+te0b/sH5G/7J/Rv+0gUX/t4NF/7mERf+7hkT/vYdE/7+JRP/Ws4b/8ufY/9Kn
+ bv/Sp23/0qhv/9Kpcf/SqnP/0qt1/9Ksdv/SrXj/0656/9Ove//UsH3/1LB+/9Sxfv/cv5b/2cWi/xt8
+ VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf
+ w/+o38P/pt7C/6bewf+k3sD/ntu8/47Vsf+N1bD/jdWw/43VsP+N1bD/jdWw/5DWsv/D6db/i8Wq/xt8
+ VP+qrIP/3L+V/86kaf/FlFD/xpRO/8mZV//PpGj/zJtb/8eSTP/Gkkv/xZJN/8OQTv/DkFD/wZBR/8CP
+ Uv++j1T/6dnG/9Gxi/+7jFj/uoxZ/7iLW/+1iVr/sYda/6yEWP+ngVj/on5W/517Vf+Yd1T/k3RT/49x
+ Uv+JblH/hWtQ/35lTf9cQSbT////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///927+zp8f38/P/6+fj/5+DZ/5FtR/+OZTn/lWo8/51wP/+jdEL/qnlF/699Rv+xf0b/tIFG/7aC
+ Rf+4hEX/uoZE/7yHRP++iUT/wYxH/9WxgP/z6Nn/1q56/9KocP/SqXL/0qt0/9Osdv/TrXj/0615/9Su
+ e//Ur3z/1LB+/9Sxf//UsYD/1bSE/+HKqf/UupH/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj
+ yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//nNu7/43V
+ sP+N1bD/jdWw/43VsP+N1bD/kNay/8Pp1v+Lxar/G3xU/7zMt//w49H/6tnA/9Cocf/HmFb/xZNO/8aT
+ Tv/Gk07/x5JM/8eSS//Gkkv/xZFM/8OQTv/DkE//wY9R/8GRVP/v5Nb/y6V4/7uMVv+6jFj/uYtZ/7eL
+ Wv+ziFr/roRY/6mCV/+kflb/nntV/5p3VP+VdVP/j3FR/4pvUf+Fa0//gWhO/2NIK/9YPiMw////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////APHv7GLm4dz++/r5//Tx7v/c0sf/jGU7/5Fn
+ Ov+YbT3/oHJA/6d3Q/+tfEb/sX5G/7OARv+1gkX/t4NF/7qFRP+8h0T/vohE/8CKQ//Km13/1Kx3//Po
+ 2f/Ztof/0qpy/9Osdf/TrXf/0654/9Sve//UsHz/1LB+/9Sxf//UsYH/1LOC/9Szg//av5b/4cqp/8+0
+ hv8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg
+ xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//lti3/43VsP+N1bD/jdWw/43VsP+Q1rL/w+nW/4vF
+ qv8bfFT/vM25//Tr4P/w49H/272T/9Gpc//Ln2L/xZNP/8aTTv/Gk03/x5NN/8eSSv/Fkkv/xZBM/8OQ
+ Tv/CkE//x5xl//Dl1//Emmb/vIxV/7uMVv+5i1j/uItZ/7WJWv+whln/q4NX/6Z/Vv+gfFX/nHlU/5Z1
+ Uv+RclL/jG5Q/4drT/+BaE3/ak8z/1k/JIz///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AeV9EWdvTy//w7On/4dnR/7Sdg/+NZDn/lGk8/5xvP/+jdEL/qnlF/699Rv+yf0b/tIFF/7eD
+ Rf+5hEX/u4ZE/72IRP+/iUP/xpRS/9Gnbv/SqG//8+fY/929kv/TrHX/0614/9Ouev/Ur3z/1LB9/9Sx
+ gP/UsoD/1LOC/9W0hP/VtIX/1bWH/+HKqf/cwpv/z7SH/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj
+ yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld
+ v/+h3L7/ktez/43VsP+N1bD/jdWw/5DWsv/D6db/isWq/xt8VP+0v6L/7d/L/+rYwP/fw57/27yR/9Su
+ e//OpWv/xpRQ/8aTTv/Gk03/x5JL/8eSSv/Fkkv/xJBM/8OQTv/QqHb/8OTV/8CPU/+8jVT/u4xV/7qL
+ V/+4ilj/t4pZ/7KHWP+thFj/qIBW/6J9Vf+deVP/mHZS/5JyUf+Nb1D/iGxO/4NpTf9wVTn/XEEk2f//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSmTxbeq/9TIvf+1oIn/iGE3/5Bm
+ Ov+XbD3/n3FA/6Z2Q/+tfEb/sX5G/7OARv+2gkX/uIRF/7qGRP+8h0T/v4lE/8GLQ//Pomf/06lv/9Oq
+ cf/w4s//4MWe/9OteP/Trnr/1LB9/9Swfv/VsoD/1bKC/9Wzg//VtIX/1bWG/9a2iP/bvpb/4s2t/9e5
+ jv/Qt4v/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vg
+ xf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+e27z/j9ax/43VsP+N1bD/kNay/8Pp
+ 1v+Kxar/G3xU/6SjdP/YuY3/17aH/9Wzgv/bvpT/3sKb/9m4if/Pp23/xpRQ/8aTTf/Gk0z/xpJK/8eS
+ Sv/FkEv/xJBM/9a0if/q2sT/v45Q/76NUv+8jFP/uotV/7iKVv+3ilj/tIhY/6+FV/+pgVX/pH1U/556
+ Uv+ZdlH/lHNQ/49wT/+IbE3/g2hM/3VcP/9eQiX/Vj0iG////wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AGtNLNXKvrH/rpqC/4ZhOv+LYzj/kmg7/5puPv+ic0H/qnlF/699Rv+yf0b/tIFF/7eD
+ Rf+5hUX/vIdE/76IRP/AikP/woxD/9GmbP/TqnH/06t0/+3cxv/jzKn/1K97/9Wwff/VsX//1bKB/9Wz
+ gv/VtYX/1bWG/9a1iP/Wton/1reK/+DJp//exqL/1rmO/9C4jf8bfFT/abCQ/9Du3//A59P/teTM/7Tj
+ y/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pd
+ v/+i3b//ody+/6Dcvf+Y2bf/jdWw/43VsP+Q1rL/w+nW/4rFqv8bfFT/paR2/9W0hf/Zu5D/1LB//9Ku
+ ev/WtIP/3cCW/9y+lP/SrHj/xpVR/8aTTP/Gk0z/xpJJ/8aRSv/EkEv/3cCb/+TOsf/Ajk//vo1Q/72N
+ Uv+7i1P/uYpV/7iJVv+2iVj/sYVX/6uCVf+mflP/oXtS/5p3UP+VdE//j29P/4lsTf+EaUv/e2FG/19D
+ Jv9YPiNd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBjRicXcFIy/9TJvv+iiW3/hV81/41k
+ Of+Vajz/nXA//6V2Q/+te0b/sH5G/7OARv+2gkX/uIRF/7qGRP+9iET/v4lD/8KLQ//EjUP/0KRp/9Or
+ dP/UrXf/6dW6/+jVuv/VsH3/1bGA/9Wygv/VtIT/1bWG/9W2h//Wtoj/1riK/9a4jP/YvJL/4s6x/9i+
+ lv/WupH/0bmQ/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zh
+ xv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/57bvP+O1bH/jdWw/5DW
+ sv/D6db/isWq/xt8VP+lpXf/1LOD/9m6j//Wt4j/0699/9Kuev/Trnr/2biK/93Al//Ws4P/xpdS/8aT
+ TP/Gk0v/xpFJ/8aRSv/kza7/3sKe/8COTv+/jU//vY1R/7yMUv+5ilP/uIpV/7eIVv+zh1f/roRX/6iB
+ Vv+mglv/nHhR/5ZzT/+QcE7/i21M/4VpS/9/ZEn/YkYo/1k/JJ////8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AGVHKFl4Wjv/08i9/5+CZf+IYDb/kGY6/5hsPf+gckH/qHhE/699Rv+xf0b/tIFF/7eD
+ Rf+5hUX/vIdE/76JRP/AikP/w4xD/8WOQ//Nn2D/1K13/9Suev/jy6n/7+DM/9WygP/Vs4L/1bSF/9W1
+ h//Wtoj/1reK/9a4jP/WuYz/17qO/93Eof/hy63/17yT/9i8k//SupH/G3xU/2mwkP/Q7t//wOfT/7Xk
+ zP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6Te
+ wP+j3b//ot2//6Hcvv+g3L3/n9y8/5TYtf+N1bD/kNay/8Pp1v+Kxar/G3xU/6Wmev/UtIX/1reJ/9m6
+ j//TsYD/0699/9Kuev/SrXj/1bF+/9u7kP/Yt4j/yp1e/86kZ//fwpr/6NCx//bu5P/bwJj/wo5M/7+N
+ Tv++jE//vIxR/7uKUv+4iVT/t4hV/7iMXf+5k2r/r4he/6yKZP+deFD/l3RO/5FxTf+LbEv/hmhK/39l
+ SP9nSy3/W0Ak4f///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZ0kpjIBiRP/Rxbj/noFj/4pi
+ N/+SaDv/mm4+/6N0Qv+qeUX/sH1G/7OARv+1gkX/uIRF/7qGRP+9iET/v4pD/8KMQ//EjUP/xY9F/8iW
+ Uf/Urnr/1K98/97BmP/z6dv/1rWF/9W1hf/Wtof/1raJ/9e4i//XuIz/17mO/9e6kP/Xu5H/4c2v/97G
+ o//YvZX/2L2W/9K7lP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63h
+ xv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/m9q6/43V
+ sP+Q1rL/w+nW/4rFqv8bfFT/pad7/9S1h//UtIX/2byR/9a1hv/TsH7/0q98/9Kuev/SrXj/0qt2/9ez
+ g//fwpz/7d7J//Tq3f/48ur//fv4//Lm1//XtYj/wI1M/76MTv+9jE//u4tR/7mJUv+5i1f/v5ds/7uW
+ a/+1kWn/q4Vd/594T/+ZdE7/knBM/4xsS/+FaUn/gWVI/2xRM/9cQSX/VDshFP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wBoSim0hmpM/8y/sf+jhmj/jGM4/5RpPP+dcD//pXZD/618Rv+xfkb/tIBG/7aD
+ Rf+5hUX/vIdE/76JRP/CjUb/w41D/8WORP/FkEf/x5RQ/9KrdP/VsX7/2LeJ//Pq3P/cwJj/1raI/9e3
+ if/XuIv/17mN/9e6j//XupD/17uS/9rAm//j0LT/2cCa/9i/mP/Yv5n/0ryX/xt8VP9psJD/0O7f/8Dn
+ 0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6be
+ wf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/kdaz/5DWsv/D6db/isWq/xt8VP+mqH3/1LaJ/9S1
+ iP/XuY7/2LqP/9SxgP/TsH7/0q98/9Kuev/SrHf/0qt0/+XOr//0697/+/jz//79+//+/fz/9/Dn/+va
+ w//HlFj/v4xM/72LTv+7ik//uYpR/7+UZP/AmWz/vZVr/7eRaf+nf1P/n3lP/5l1Tf+TcUz/jWxL/4dp
+ Sf+AZEf/d1xB/19DJ/9VPCI8////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGpLKtuNclX/v62b/7Ka
+ f/+OZTn/l2s9/59xQP+nd0T/r31G/7J/Rv+1gUX/t4NF/7qGRP+9iET/v4pD/8KNRP/FjkP/xY9G/8WR
+ Sf/Fkkz/z6Zt/9aygf/WtIP/8eXV/+LLqv/Xt4r/17iM/9e5jv/XupD/17yS/9e9lP/YvZX/3smn/+HM
+ r//Yv5n/2MCa/9jBm//Svpn/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/h
+ x/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57b
+ u/+Y2bf/kNay/8Pp1v+JxKn/G3xU/6epf//Vt4z/1LaK/9W2if/ZvJP/1bWG/9SxgP/TsH7/0q98/9Kt
+ ef/SrHf/59Gy//Pm1v/69vH//v39//79+//38Of/69rD/8iaXP+/jUz/votM/7yKT/+9jlf/w5ps/8GY
+ bP++l2v/to9k/6d9UP+geU//mXVN/5RwS/+NbUn/h2lI/4RoSv95X0P/Y0gs/1Y9ImP///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wBhRScGb08v/JF3Wv+tln3/w7Cb/5BmOv+YbT3/oXNB/6p5Rf+wfUb/s4BG/7aC
+ Rf+5hEX/u4ZE/76IRP/CjUb/xI9H/8WORP/FkEf/xZJK/8WTTf/Qp27/1rOD/9a1hv/r3MX/59a8/9e5
+ jf/XuY7/17uR/9e8kv/YvZT/2L6W/9i/mP/j0LP/3cel/9nBm//ZwZ3/2cKe/9PAnP8bfFT/abCQ/9Du
+ 3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6be
+ wv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/5zbu/+Q1rL/w+nW/4nEqf8bfFT/p6qA/9W5
+ jf/Ut4v/1LaJ/9e6kP/XuY//1LKC/9OxgP/SsH7/0q57/9KteP/ewZr/6tnB//Tq3f/9+/j/+vbw//Po
+ 2f/ky6f/wo5O/8CNSv++i0v/vYtO/8OZZv/Dmmn/wZhq/7+Xa/+0il3/qH5Q/6F5Tv+bdUz/lHFK/45t
+ Sf+HaEf/hmpM/3pgRP9mSy//Vz0ji////wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGJGJyp1WDj/k3db/5t9
+ Xv/Sw7P/lWxA/5tuPv+jdEL/rHtG/7F+Rv+0gEb/t4NF/7mFRf+8h0T/v4lE/8KMRP/EjUP/xY9G/8WR
+ Sf/Fk0z/xpRP/8ufYv/WtYb/1raI/+bSt//t4Mz/17qP/9i7kf/YvJP/2L2V/9m+lv/Zv5j/3MWi/+PS
+ t//aw5//2cKe/9nDoP/aw6H/1MGf/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7Di
+ yP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/c
+ vP+e27v/ndu7/5PXtP/D6db/icSp/xt8VP+nq4L/1rqQ/9W5jf/Ut4v/1biM/9i7k//JoGb/0Kx3/9Ox
+ f//Sr33/0q56/9Cpcf/UsYD/5tCy//n17v/r173/5Mqo/9Wqdf/Gk1D/wI1I/7+MSv/ClFv/xpxp/8Oa
+ af/BmGn/v5Zq/7OHWf+pflD/o3lN/5x1S/+VcUr/j2xI/4hoRv+Kb1H/fGBD/2hML/9YPiOy////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AZEYoSnxgQv+Vel3/hGA7/8+/rf+tjWv/nXA//6Z2Q/+ufEb/sX9G/7SB
+ Rf+3g0X/uoZE/72IRP/AikP/w4xD/8WORP/FkEf/xZJK/8WTTv/GlVH/xpdV/9Sxgf/XuIv/4cmo//Pp
+ 3P/YvJL/2LyU/9i+lf/Zv5f/2cCa/9nBm//gzK7/4M6x/9nDn//axKH/2sSi/9rFo//Uw6H/G3xU/2mw
+ kP/Q7t//wOfT/7XkzP+048v/s+PK/7Ljyf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jf
+ w/+m3sL/pt7B/6TewP+j3b//ot2//6Hcvv+g3L3/n9y8/57bu/+d27v/lti2/8Pp1v+JxKn/G3xU/6er
+ g//Wu5L/1rqQ/9W5jf/QsH//z6x6/8qjav/HnWH/0q97/86ocv/Hm1v/xpdV/8aWU//XtYX/7d7J/8WR
+ Sv/FkUf/zZ9f/9ClbP/Hllj/wIxK/8ebZf/Gm2j/xJlo/8GYaf+/lmn/tIdX/6p+T/+kek3/nHVM/5Vx
+ Sf+PbUj/iGhG/4drTv97X0L/aE0w/1k/I9L///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBkRyhWgWVH/5N3
+ Wf+CXDT/tp2C/8q0nf+ecED/p3dE/699Rv+yf0b/tYJF/7iERf+7hkT/volE/8GLQ//EjUP/xY9F/8WR
+ Sf/Fk0z/xpRP/8aWU//GmFb/yZ9j/9a2if/cwZr/9Ozf/9zEoP/YvZb/2b+Y/9nAmf/ZwZz/2sOf/+PS
+ uP/dyar/2sSi/9rFo//axaT/28am/9TEpP8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hi
+ yf+w4sj/r+HH/63hxv+s4cb/q+DF/6rgxP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dc
+ vf+f3Lz/ntu7/53bu/+Y2bj/w+nW/4nEqf8bfFT/p6yE/9a8k//WupH/0bKD/8mja//Nqnj/0rOE/9Ct
+ ev/OqHL/z6p0/8uiaP/KoGT/yJtb/+LJpv/jy6n/xZJL/8WQSP/Fj0b/zZ9h/9SufP/QqHX/yJ1n/8ab
+ Zv/EmWf/wpho/7+Xaf+2ilr/q35O/6R5TP+ddkr/lnFI/49sRv+HZ0T/gWJC/3dbPP9pTjH/WT8k4P//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AGVHKGKEaUv/jnFQ/4NdNf+adk//2Mi2/6yEWf+peET/sH1G/7OA
+ Rv+2gkX/uYVF/7yHRP+/iUP/woxD/8WOQ//FkEb/xZJK/8WTTf/GlVH/xpdU/8aYV//Gmlv/yqFn/9e6
+ j//y6dv/49Cy/9nAmf/ZwJr/2sGd/9rCnv/dyaj/5NS6/9vGpP/bxqT/28em/9vHp//bx6j/1MWl/xt8
+ VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pjyv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nf
+ w/+o38P/pt7C/6bewf+k3sD/o92//6Ldv/+h3L7/oNy9/5/cvP+e27v/ndu7/5vauv/D6db/icSp/xt8
+ VP+nrYb/1r2V/9W7kv/IpW7/zq58/9S3jP/YvJT/1beK/9Szhf/TsoH/0rF+/9Kve//SrXr/7+LQ/9q5
+ jP/Fk0z/x5RP/82fYP/PomT/0KVs/9Wyg//QqXj/xptm/8SZZv/Cl2f/wJZn/7qPYP+rfk7/pXpL/511
+ Sf+WcEf/j2tF/4hnQ/+AY0L/el9C/2dMLv9ZPyTt////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZUcoboZr
+ Tv+HZ0b/g101/45lOf/FrpT/0Lmg/6t6Rv+wfkb/s4BG/7eDRf+6hUT/vYhE/8CKQ//DjEP/xY5E/8WQ
+ SP/Fkkz/xpRP/8aWU//GmFb/xplZ/8ebXP/HnV//zKZw/+vdx//r3cj/2sGb/9rCnf/awp//2sSg/+DO
+ sP/i0bb/28am/9vHp//byKj/28ip/9vJq//Uxqj/G3xU/2mwkP/Q7t//wOfT/7XkzP+048v/s+PK/7Lj
+ yf+x4sn/sOLI/6/hx/+t4cb/rOHG/6vgxf+q4MT/qd/D/6jfw/+m3sL/pt7B/6TewP+j3b//ot2//6Hc
+ vv+g3L3/n9y8/57bu/+d27v/ndu7/8Pp1v+JxKn/G3xU/6euh//Wvpf/1r2V/9S4jv/WupH/1biO/9e7
+ k//WuY//1LSG/9SzhP/TsYH/0rB+/9m7kP/06t3/1rSD/82iZv/Ppmv/0KRp/8+iZv/OoGT/zqNs/9Sv
+ gv/Op3j/xJpm/8KXZf/Almf/vJJj/61+Tf+leUv/nnVJ/5ZwR/+Pa0T/iGZD/4RmRv97X0H/ZEco/1k/
+ JPr///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wBlSCh5iW1R/4BdOv+EXjX/jmU5/6B4S//ZxrL/xKF8/7F+
+ Rv+0gUX/t4NF/7qGRP++iET/wYtD/8SNQ//Fj0X/xZFJ/8WTTf/GlVH/xpdU/8aYV//Gmlv/x5xe/8ee
+ Yf/HoGX/2b+Y//Dl1f/Yv5n/2sOe/9rEof/axaL/49O5/+DOsf/bx6j/28ip/9vJq//byqv/3Mqt/9XI
+ q/8bfFT/abCQ/9Du3//A59P/teTM/7Tjy/+z48r/suPJ/7Hiyf+w4sj/r+HH/63hxv+s4cb/q+DF/6rg
+ xP+p38P/qN/D/6bewv+m3sH/pN7A/6Pdv/+i3b//ody+/6Dcvf+f3Lz/ntu7/53bu/+e27z/xOnX/4nE
+ qf8bfFT/p66J/9e/mf/WvZf/1ryV/9a7kv/VuZD/1rqQ/9e8k//UtYj/1LSE/9Oygf/SsX//5dCx/+7f
+ y//Rq3X/0Kly/9Cnbv/QpWr/z6Nn/86hZP/Mn2P/zKFs/9Ovgv/MpXj/wpdl/8CVZf+9k2X/rn9O/6V5
+ Sf+edUj/lm9F/5BsRf+IZUH/iGpL/3RXN/9jRif/WT8k/1A5IAf///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGVI
+ KISLcFX/flw3/4VeNf+PZjn/mW0+/7qXcv/fy7b/uYxZ/7WBRf+4hEX/u4ZE/76JRP/Ci0P/xY5D/8WQ
+ Rv/Fkkr/xZRO/8aWUv/Gl1X/xplZ/8ebXP/HnWD/yKBl/8ehZ//OrHr/7uPT/9Cyhf/WvZX/28Wj/9zI
+ qP/k1b7/3cut/9zJqv/cyav/3Mqs/9zLrv/cy67/1cmt/xt8VP9psJD/0O7f/8Dn0/+15Mz/tOPL/7Pj
+ yv+y48n/seLJ/7DiyP+v4cf/reHG/6zhxv+r4MX/quDE/6nfw/+o38P/pt7C/6bewf+k3sD/o92//6Ld
+ v/+h3L7/oNy9/5/cvP+e27v/ndu7/57bvP/F6tj/icSp/xt8VP+nr4r/18Cb/9e/mf/WvZf/1ryU/9W6
+ kf/VuY7/2L2U/9W3i//UtYb/1LOE/9OxgP/w5NP/4sqp/9Grdf/RqnL/0Khv/9CmbP/Po2f/z6Jk/82f
+ Y//KnWT/yp9r/9Ctgv/Jo3b/v5Vl/72UZP+wglH/pnlK/55zR/+Xb0T/j2lB/4dlQP+Iakz/bk8t/2NG
+ J/9ZPyT/UDggFP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8AZUcofotxVf99WjX/hV81/49mOv+abT7/pHZD/9S6
+ nf/XvaD/tYJG/7mERf+8h0T/v4lE/8KMQ//FjkT/xZBI/8WSTP/GlE//xpZT/8aYV//Gmlr/x5xe/8ee
+ Yf/Hn2X/x6Fo/8ija//p2sT/2sSg/8use//bxqX/4M2w/+TVvv/cyar/3Mqs/9zLrv/dzK//3c2w/93N
+ sf/WyrD/G3xU/2mwkP/Q7t//w+nV/7jkzv+35M3/tuTM/7Xjy/+048v/s+PK/7Liyf+x4sj/sOHI/6/h
+ x/+u4Mb/reDF/6zgxf+q38T/qt/D/6jewv+n3sL/pt7B/6XdwP+k3cD/o9y//6Lcvv+h3L3/oty+/8fq
+ 2P+JxKn/G3xU/6ewjP/XwJz/17+a/9a+mP/WvZX/1ruT/9W6kP/XvJT/1rqP/9S1iP/UtIT/2r+W//Pr
+ 3v/Xtoj/0qx4/9Gqc//QqXD/0Kds/9Ckaf/PomT/zaBj/8qeY//Im2P/yJ1q/86rgf/HoXb/vZNk/7KF
+ VP+meEj/nnRG/5ZuQ/+OaUH/iGZD/4dpSf9sTSv/Y0Yn/1k/JP9QOCAN////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wBlRyhzim9U/3xaNP+FXzX/j2Y6/5puPv+kdUL/tohX/+DMtf/LpXr/uYVF/7yHRP/AikP/w4xD/8WP
+ RP/FkUn/xZNN/8aVUf/Gl1X/xplY/8ebXP/HnV//x59j/8egZv/Iomn/yKRs/97Kqv/l1bz/yah1/9G2
+ jP/h0Lf/4tK5/9zLrP/czK//3cyw/93Nsf/dzbL/3c6z/9bMsP8bfFT/abCQ/8zs3P/T7+H/0+/h/9Pv
+ 4f/S7+D/0u7g/9Hu4P/R7t//0O7f/9Du3//P7t//z+3e/8/t3v/O7d7/zu3d/83t3f/N7d3/zOzc/8zs
+ 3P/L7Nz/y+zb/8vs2//K7Nv/yuvb/8nr2v/J69r/x+rY/4nEqf8bfFT/qLGN/9fBnv/XwJz/17+a/9a+
+ l//WvJT/1buS/9a7kv/XvJP/1LaJ/9S0hv/l0rb/7d/L/9KvfP/SrXj/0at1/9Cpcf/Qp27/0KRq/8+i
+ Zf/NoGP/y55j/8icY//FmGH/xZtq/8upf//Dm3D/tYlZ/6Z4R/+ec0T/lWxB/49qQ/+LaUb/g2JC/25P
+ Lf9iRif/WT8j/k83HwH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGRGKGeIbVD/e1cz/4VfNf+PZjr/mm4+/6V2
+ Q/+vfUb/x6N6/+LNtP/ClFz/vYhE/8CKQ//DjUP/xY9F/8WRSv/Fk07/xpZS/8aYVv/Gmln/x5xd/8ee
+ Yf/Hn2T/x6Fo/8ija//IpG7/1LmQ/+3j0v/LrHz/yat7/9jCn//byar/3Myv/9zMr//WwqH/1MCe/9jH
+ qP/czbL/1cuw/xt8VP9LnHr/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I
+ rf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47Irf+OyK3/jsit/47I
+ rf+OyK3/YauL/xt8VP+osY7/18Kg/9fBnv/XwJv/176Z/9a9lv/VvJP/1bqQ/9e9lP/VuIz/1LWH/+/k
+ 1P/iy6v/0q99/9Ktev/Rq3X/0aly/9Cnbv/QpWv/z6Nn/82hY//LnmP/yJxj/8WZYv/ClmH/xJxu/8im
+ gP+7kWX/pnlH/51xQ/+WbkP/lXNN/45tS/+BY0L/d1s8/2JFJ/9YPiPz////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AY0YnW4ZrT/96VzL/hV41/49mOv+abj7/pXZD/699Rv+zgEf/1LaS/+LLsP/Fllv/wYtD/8SN
+ Q//Fj0b/xZJK/8WUT//GllP/xphX/8aaW//HnF7/x55i/8egZv/Iomn/yKVu/8ilcP/Kqnj/7ePS/9S7
+ lP/MsYP/1sGf/8qxhP/byaz/1cGf/9C6lf/OuZP/yrSM/8q1jv/ItY//L4Nb/xt8VP8bfFT/G3xU/xt8
+ VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8
+ VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/G3xU/xt8VP8bfFT/IX5X/7u6mP/YxKL/18Kg/9fB
+ nP/Xv5r/1r6Y/9a8lf/Vu5L/17yT/9a7kP/bwpz/8+ve/9e4jf/SsH//0q57/9Gsd//RqnP/0Kdv/9Cl
+ a//Po2f/zqFk/8ufY//JnGP/xpli/8OXYf+/lGH/xaF3/8Ohev+pfk7/nXFC/5x2Tf+ZdlL/kHBP/4Nl
+ Rf96XkD/YkUn/1c9I+X///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBiRSdPgmdL/3lWMP+EXjX/j2Y5/5pu
+ Pv+ldkP/r31G/7OARv+3g0f/1reR/+PMr//ImVn/xY5D/8WQR//Fkkv/xpRP/8aXVP/GmVj/x5tc/8ed
+ YP/Hn2P/x6Fn/8ija//IpG7/yKZy/8iodf/l17//3syv/8+3jf/Uv5v/zLKH/9vKrP/ez7T/3s+2/97Q
+ t//Xxqj/y7eQ/8y4kf+6soz/laZ//5angP+Xp4L/oLSV/5eogv+XqIL/l6mD/56zk/+iuJr/oLSW/5yv
+ jf+iuZz/ormc/6G3mP+fs5P/orea/6G3mv+it5r/obeZ/6G2mP+gtZf/oLSW/6C0lf+fs5X/nrKU/56y
+ k/+esZH/nbCQ/52wj/+3uZn/2cam/9XBnv/Qt47/0LeO/9fAm//Xv5j/1r2W/9W8k//Wu5L/17uR/+XT
+ uf/s38v/07KC/9Owf//Srnz/0ax3/9GrdP/QqHD/0KZr/8+jZ//OoWT/y59j/8mcY//GmWL/w5dh/8CU
+ Yf+9lGP/xKF7/7eSav+lfVL/oHtV/5l2Uv+Ob03/g2RE/3ldP/9hRSf/Vj0i2P///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AGFEJjp5XT7/d1Uw/4NdNf+OZTn/mm0+/6R1Qv+vfUb/s4BG/7aDRf+7hkb/2bmR/+TN
+ rv/Mm1n/xZBI/8WSTP/GlVD/xpdV/8aZWf/Hm13/x55h/8efZf/Iomn/yKNs/8ilcP/Ip3P/yal2/9vH
+ pv/p3cn/0ryV/9K8l//dzbH/3s+1/97Qt//e0bj/39K6/9/Su//Uw6L/zrmT/9C+mv/PvJf/0LyX/9C9
+ mP/g07r/0b6a/9LAm//czrL/4te//+LVvv/WxKP/3tC1/+PWv//j1r//4ta+/+LVvv/h1b3/4dS8/93P
+ s//ez7T/39K6/97SuP/e0bf/3dC2/9zPtP/czrP/2syx/9rLr//Zyq3/2cmr/9nIqv/Zx6f/0LiR/8mu
+ gP/Ns4f/18Gd/9fAmv/WvZf/1byU/9W7kf/XvZT/8OXV/+LMrf/Ts4T/07GA/9KvfP/RrXj/0at0/9Cp
+ cf/Qpmz/z6Ro/8+iZP/Mn2P/yZxj/8aZYv/Dl2H/wJRh/7ySYf+8lWj/v515/6yIYf+fe1X/lnVQ/41t
+ S/+CY0T/dlo8/19DJv9VPCLC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AX0MmE25QL/92VC//gl00/45l
+ Of+ZbT7/pHVC/699Rv+zgEb/toNF/7qGRP+/iUb/27qQ/+bOrf/MnV7/xZNN/8aVUf/Gl1X/xppa/8ec
+ Xv/HnmL/x6Bm/8iiav/IpG7/yKZx/8iodf/Jqnj/zrOH/+3k1f/byav/z7iQ/9vLrv/e0Lf/3tG5/9/S
+ uv/g07v/4NS8/+DTu//Xxqf/0L2Y/9C9mP/Rvpn/0r+a/9zNsP/UwZ7/3tG2/+PYwv/j1r7/18ak/9vM
+ rv/j2MH/5NjB/+PYwf/j18D/4te//+LWv//g0rn/0sCb/9K/m//TwJ7/1sOi/9fHpv/TwZ//0b6b/9PB
+ n//ay6//2syx/9rLr//Zya3/2cir/9nHqP/TvZn/yq+C/9O9mP/XwZ7/18Cb/9e/mP/VvJX/1buS/+DL
+ rP/y6d3/17qP/9OzhP/TsYD/0q99/9Gtef/Rq3X/0alx/9CmbP/PpGj/z6Jk/8yfY//KnGP/xpli/8OX
+ Yf/AlGH/vJJh/7iNX/+4lW7/tZVz/557Vf+VdFD/i2tJ/4BjQ/9yVzn/XUIl/1M6IZv///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AaUoq63VTL/+AWzT/jGQ4/5hsPf+jdEL/r31H/7J/Rv+2g0X/uoZE/76I
+ RP/DjEX/3byQ/+bPr//MoGL/xpZS/8aYVv/Gmlr/x5xf/8efY//HoWf/yKNr/8ilb//Ip3L/yal2/8mr
+ ev/JrH3/5trE/+baxf/MtYz/1cOi/9/Ruf/f0rr/4NO8/+HUvf/h1b7/4ta//+LXwP/h1Lz/08Gc/9LA
+ m//TwJz/1cOh/93Psv/k2cT/5dnD/9nIqf/h1Lv/5NnD/+Taw//k2cL/5NnC/+TYwv/k2MH/49fB/+LW
+ vv/Vwp//08Gc/9PAm//Sv5r/0b6Z/9C9mP/PvJb/0b2Z/9vLr//bzbL/2syx/9nKr//Zyaz/2Meo/8+4
+ kf/Ms4j/18Oi/9fCn//XwJ3/17+Z/9W9lv/Vu5P/7eDN/+nYwv/UtYn/07SF/9Oygv/SsH3/0a15/9Gr
+ dv/RqXL/0KZt/8+kaf/PomT/zJ9j/8qcY//GmWL/w5dh/7+UYf+8kWH/t41f/7CIXf+0lXL/pYRf/5Nx
+ Tf+JaUj/f2ND/25SNf9bQCT/UTkgc////wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBnSSnEc1Eu/39a
+ M/+LYzj/l2s9/6JzQf+tfEb/sn9G/7aCRf+6hUT/vohE/8KLQ//Gj0b/3b6T/+bRs//TrXj/xphW/8aa
+ W//HnV//x59k/8ehaP/Io2z/yKVw/8indP/JqXf/yat7/8mtfv/byav/7+fa/8q0iv/OuZP/39K7/+DU
+ vP/h1L3/4dW+/+LWwP/j18H/49jB/+TYw//g07r/49a//+PXv//dz7L/49a//+bbxf/g07j/3tC0/+bb
+ xf/m28X/5trE/+baxP/l2sT/5drD/+TZwv/k2cL/49jB/9vLrf/Uwp7/1cOg/9jIp//SwJz/0sCc/9jI
+ qf/e0Lb/3tC1/9zOs//bzbH/2suw/9bGp//Mt5D/yrKI/9O+mf/YxKP/18Og/9fBnf/Xv5v/1r2X/9rF
+ ov/z6+D/3MSg/9S2if/TtIb/07KC/9Owfv/RrXn/0at2/9Gpcv/Qpm3/z6Rp/8+iZP/Mn2P/ypxj/8aZ
+ Yv/Dl2H/v5Rh/7yRYf+3jF//roZa/62LZv+rjGv/knBN/4hpR/98X0D/ZUgq/1k/JP9PNx9M////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AGRHKJxxUC3/fVky/4lhN/+Vajz/oXNB/6x7Rv+yf0b/toJF/7qF
+ RP++iET/wotD/8WORP/FkUr/1rKB/+fTuP/bvpb/yJ5g/8edYP/Hn2X/yKJp/8ikbf/IpnH/yKh1/8mq
+ ef/JrHz/ya6A/9K8l//w6d3/1MGg/8q1jf/czrT/4NS+/+LWv//i1sD/49fB/+PYwv/k2cP/5drE/+Xa
+ xf/m28X/5tvG/+bcxv/n3Mb/59zH/+TYwP/n3Mb/59zH/+fcxv/n3Mf/5tzG/+bbxf/m28X/5drE/+Xa
+ w//l2cL/49e//9jHpP/g0rf/4ta+/+DUu//h1Lv/4NO6/9/SuP/e0Lf/3dC1/9zOs//bzLH/zbmU/8q0
+ jP/QvJj/2Man/9jFpf/Xw6H/18Ge/9fAm//Wvpn/59nC/+zgzf/Xu5L/1LaK/9O0hv/TsoP/07B//9Gt
+ ef/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8yfY//KnGP/xpli/8OXYf+/lGH/vJFh/7aLX/+thVr/pYFY/6yP
+ cP+WdVT/hmdH/3JTMv9iRSf/Vz0j/0w2HiT///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AYkUncW5O
+ LP96VzH/h2A2/5NpO/+fcUD/q3pF/7F/Rv+2gkX/uoVE/76IRP/Ci0P/xY5E/8WRSf/Fk07/zqRr/+TO
+ r//jza3/zahy/8egZf/Iomr/yKVv/8incv/JqXb/yat6/8mtfv/Jr4H/0ryX/+fcyP/g1L3/y7aP/9LA
+ nv/g07z/3c+1/9bFpf/Rv5r/2syt/+Xaxf/l28X/5tvG/+bcx//n3Mf/593H/+fdyP/n3cj/6N3I/+jd
+ yP/n3sj/597I/+fdyP/n3cj/593H/+fcxv/n3MX/5tvF/+bbxP/l2sP/5NnB/+TZwf/j18D/4dS6/+DT
+ uf/h1Lv/4NO6/9/RuP/d0Lb/3c+1/9rLr//NuJL/1cWm/9nJq//Yx6j/2MWm/9jEo//Xwp//18Cc/9jC
+ nv/x6dz/38us/9a7k//VuIz/07WH/9Ozg//TsH//0a16/9Grdv/RqXL/0Kdt/8+kaf/PomT/zJ9j/8mc
+ Y//GmWL/wpZh/7+UYv+7kGD/tYte/6yEWf+ifVT/pohn/5t+X/+BYkH/a0wr/19DJv9VPCL1SjQdA///
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wBeQyUya0wr/3hVMP+FXjX/kWc6/51wP/+peUT/sX5G/7WC
+ Rf+5hUX/vYhE/8GLQ//FjkT/xZFJ/8WTTv/GllP/yJ1f/93Dnf/n1br/1beL/8mjbP/IpW//yKdz/8mp
+ d//Jq3v/ya1//8qvg//UwJ3/2squ/+vj1P/MuZP/zbmT/867lf/QvJf/0b6Z/9LAm//YyKf/5tzH/+fc
+ x//n3cj/593I/+jeyf/o3sn/6N/K/+neyv/p38r/6N/K/+neyf/p3sr/6d7J/+jeyf/o3sj/593I/+fc
+ x//n3Mb/5tvF/+bbxP/l2sP/5NnC/+TYwf/k18D/49e+/+LVvP/h1Lv/4NO5/97Rt//dz7X/3M6z/9rL
+ r//ay6//2cmt/9jIqf/Yxqb/2MSk/9fDoP/XwZ3/49O6/+/m1//VvJP/1ruS/9W4jf/TtYf/07OD/9Ox
+ f//RrXr/0at2/9Gpcv/Qp23/z6Rp/8+iZP/Mn2P/yZxj/8WZYf/ClmH/vpNi/7uPYP+zil7/qoNZ/6F8
+ VP+dfVv/n4Vo/4BhQP9qTSz/XUIl/1I6ILr///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFtA
+ JAJoSinudVMv/4JcNP+OZTn/m24+/6d3Q/+wfkb/tIFF/7mERf+9iET/wYtD/8WOQ//FkUj/xZNO/8aW
+ U//GmVj/x5td/9W2h//m1bz/3sel/8qpdf/Ip3T/yap4/8msfP/JroD/yrGF/9bDo//OupX/6+PU/9jI
+ qv/OupT/z7yW/9G+mf/Sv5v/08Gd/9zNr//n3cj/6N3J/+jeyv/p38r/6N/K/+nfy//p38v/6eDL/+ng
+ zP/q4Mv/6uDM/+ngy//p38v/6d/L/+nfyv/p38n/6N7J/+jeyP/n3cf/59zG/+bcxf/l2sT/5drC/+TY
+ wf/j18D/49a+/+HUvP/h1Lr/39K4/97Rtv/dz7T/282y/9rLsP/Zyq3/2Miq/9jHp//YxaT/18Oh/9fB
+ n//v5tf/5NO6/9W7k//WupL/1bmO/9O1iP/Ts4T/07F//9Guev/Rq3b/0aly/9Cnbf/PpGn/z6Jk/8uf
+ Y//JnGP/xZhh/8GWYf++k2L/uo9g/7KJXf+oglj/n3pT/5VzT/+eg2f/iW5Q/2ZIKf9aQCT/TzcfeP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AGRHKK9yUS//f1oz/4tjOP+YbD3/pHVC/699
+ Rv+0gEb/uIRF/7yHRP/AikP/xY5D/8WQSP/Fk03/xpZT/8aZWP/Hm13/x55i/82qd//j0LP/5dS7/9W8
+ lP/Jq3r/yax9/8mugf/MtYv/1sSj/8u2j//g1L3/5NnF/8+7lf/QvZj/0r+a/9PBnf/Uwp//5dnD/+je
+ yf/o3sr/6d/L/+nfzP/q4Mz/6uDN/+rhzP/q4M3/6+HN/+rhzf/q4c3/6uHN/+rhzP/q4Mz/6uDM/+rf
+ y//p38r/6d7J/+jeyP/o3cf/59zG/+fbxf/m28T/5dnC/+TYwP/j17//4ta9/+HUu//g0rn/39G3/93Q
+ tf/czrP/2syx/9nKrv/YyKv/2Meo/9jFpf/Xw6L/4M+z//Hq3v/Ywp3/1byT/9W6kP/Vuo7/07WI/9Oz
+ g//TsX//0a56/9Grdv/RqXH/0KZt/8+kaP/PoWP/y59j/8icY//FmGH/wZVh/72SYf+5jmD/sIhc/6aA
+ V/+ceFL/knBN/5Z6Xv+IblP/YkUn/1Y9Iv9MNR43////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AYUQmbW5OLP97VzH/iGE3/5VqPP+hc0H/r31H/7OARv+3g0X/vIdE/8CKQ//EjUP/xZBI/8WT
+ Tf/GllL/xplY/8ebXf/HnmL/x6Fn/8mkbv/Xvpf/5te//+LRt//RuZD/yq+C/863kP/VwqH/yrWO/9XD
+ pP/t5df/1MGf/9G+mf/TwJz/1MKe/9bGo//i1Lr/5tvE/+nfy//p38z/6uHN/+vhzf/r4s//6+LO/+vi
+ zv/r4s7/6+LP/+vizv/r4s7/6+LO/+vhzf/q4c3/6uHM/+rgzP/p4Mv/6d/K/+jeyf/o3cf/593G/+bb
+ xf/m2sT/5dnC/+TYwP/j177/4dW8/+DUuv/f0rj/3tC2/93PtP/bzbH/2cuv/9jJrP/Yx6n/2MWm/9jD
+ ov/s4tH/59vG/9a+mP/VvJT/1bmQ/9W6jv/TtYj/07OD/9Oxf//RrXr/0at2/9Gpcf/Qpmz/z6Rn/86h
+ Y//LnmP/yJpi/8SYYv/AlWH/vJJh/7iOYP+uhlr/pH5V/5p3Uf+Pbkz/kXZa/4VsUf9eQyX/Uzoh8Ucy
+ HAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBcQSQpbE4t/3tZNv+EXjX/kWc6/55x
+ QP+rekX/sn9G/7aDRf+7hkT/v4lD/8ONQ//FkEf/xZNM/8aWUv/GmFf/x5tc/8eeYv/HoWf/yKNs/8im
+ cf/MrX3/3Mmp/+fbxv/ezbL/07+b/9PBn//Lto//zbiS/+ngz//g1Lz/0r+b/9PBnf/Vw6D/2Mim/97P
+ sf/g0bX/4tW7/+bbxf/r4c7/6+LP/+ziz//s49D/7OPQ/+zj0P/s49D/7OPQ/+zj0P/s48//7OLP/+zi
+ zv/r4s3/6+HN/+vgzP/q4Mv/6d/K/+neyf/o3cj/593G/+bbxP/l2sP/5dnB/+TXwP/i1r3/4dW8/+DT
+ uf/f0bf/3c+0/9zNsv/azLD/2Mmt/9jIqv/Yxqf/4NC2//Lr3//bx6f/1r6Y/9W8lP/VuZD/1bmO/9O1
+ iP/Ts4P/07F//9Gtev/Rq3X/0ahw/9CmbP/Po2f/zaFj/8ueY//HmmL/w5di/7+UYf+7kWH/tYxe/6uE
+ Wf+hfFT/lnRP/4xtSv+Lb1P/gmlQ/1tAJP9POB+x////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wBlRyjPdVQx/4BbM/+OZTn/m24+/6h4RP+xfkb/tYJF/7qFRP++iUT/w4xD/8WP
+ Rv/Fkkz/xpVR/8aYV//Hm1z/x55h/8egZ//Io2z/yKZx/8modv/Jq3v/z7aO/+HSuf/q4M//39O7/825
+ k//NuZP/3M+z//Hr4f/o3sz/6+PT/+nfzf/g1Lr/4dS5/+rhzv/r4c//6+LP/+TZv//m2sD/7OTQ/+3k
+ 0f/t5NH/7eTR/+3k0f/t5NH/7eTR/+3k0f/t5ND/7OPQ/+zjz//r487/6+LN/+rhzP/q4Mv/6t/K/+ne
+ yP/o3cf/59zG/+bbxP/l2sL/5NjA/+PXvv/i1bz/4NO6/9/SuP/d0LX/3M6z/9vMsP/Zyq3/2Miq/9jG
+ qP/t5Nb/6NzJ/9bAnP/Wvpj/1byU/9W5kP/VuY7/07SH/9Ozg//TsH//0a15/9Grdf/QqHD/z6Zr/8+j
+ Zv/NoGP/ypxj/8aZYv/ClmL/vpNi/7uQYf+yiV3/qIJZ/555U/+Uck7/iWpJ/4lvU/98ZUv/Vj0i/0s1
+ Hlj///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGBEJnBuTiz/e1cx/4lh
+ N/+Xaz3/pHVC/699Rv+0gUX/uYRF/72IRP/Ci0P/xY9F/8WSS//GlVD/xphW/8abXP/HnmH/x6Bm/8ij
+ bP/IpnH/yah2/8mre//Jrn//yrCE/9vKrf/n3sz/5dvH/9vNsf/m28j/+PXw//j17//38+3/9/Tu//Xx
+ 6P/u59j/6uDM/+vi0P/s49H/5Ni9/9/QsP/i1LX/6NzE/+3k0f/u5tP/7uXT/+nexv/p3sX/6t/H/+vh
+ y//t5NH/7eTR/+3j0P/s48//7OLN/+vhzf/q4Mz/6d/K/+jeyP/o3cf/59zF/+baw//k2cL/49e//+LW
+ vf/h1Lv/39O4/97Qtf/dzrT/28yx/9nKrv/YyKv/4dO7//Lr3//byKn/1sCc/9a+mP/Vu5P/1bmQ/9W5
+ jP/TtYj/07OC/9Kvfv/RrXn/0ap0/9Cob//PpWr/z6Jl/82gY//JnGP/xZli/8GWYf+9kmL/uY5g/7CH
+ XP+mgFf/mndR/5l8Xf+umoX/uqud/5uJd/9WPibyRjEcCf///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AWkAkFmhKKvx2VC//hF41/5JoO/+gckD/rXtG/7OARv+3g0X/vIdE/8GL
+ Q//FjkP/xZFK/8aUT//Gl1X/xppb/8edYP/HoGb/yKNr/8imcP/JqHb/yat7/8mugP/KsIT/08Cc/9G/
+ nf/ay67/7+jc//bz7P/6+fX//fz6//z7+P/8+/n//Pr4//n38f/u5tb/6+LO/+3k0v/k2Lz/4dKy/+HT
+ tP/i1LX/6uDJ/+/m1P/v5tT/7uXR/+bZvv/k1rj/5de5/+7l0v/t5dL/7eTR/+3k0P/s48//7OLO/+vh
+ zP/q4Mv/6d/J/+jeyP/n3cb/59vE/+XZwv/k2MD/4te9/+LVvP/g07n/3tG2/93PtP/bzLH/2squ/9jJ
+ rP/u59n/59vI/9bCn//WwJz/1r6Y/9W7k//VuZD/1LeM/9S1h//TsoL/0q99/9GseP/RqnP/0Kdu/8+k
+ af/PomT/y59j/8icY//EmGL/wJVh/72RYv+2jF//rIRa/6J8VP+kh2f/zcCy/+DZ0v/n497/3tnU/8fA
+ uNb///8G////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AZEgptXFQ
+ Lf9/WjP/jGQ4/5puPv+oeET/sX5G/7aCRf+7hkT/v4pD/8SNQ//FkEj/xZRO/8aXVP/Gmlr/x51f/8eg
+ Zf/Io2v/yKZw/8modf/Jq3v/ya6A/8qwhf/UwZ//z7yY/824kv/k2cP/9fDo//z6+P/+/v3//v7+//39
+ /P/8+/n/+vn1//by6v/s49L/7uXT/+LUtf/i07T/49S1/+PWt//o3MP/8OfW/+7l0f/v6NX/7+fV/+fb
+ v//l2Lv/7ePO/+3k0P/u5dL/7uXR/+3k0P/s48//6+LO/+vhzP/q4Mv/6d7J/+jdx//n3MX/5trD/+TY
+ wf/j177/4tW8/+DTuf/f0bf/3c+0/9vNsf/ayq//4tbB//Hq3//byKr/1sKf/9bAnP/Wvpj/1buT/9W5
+ j//Utov/1LWH/9Oxgf/Rrnz/0ax3/9Gpcv/Qp23/z6Ro/86hY//LnmP/x5pi/8OXYv+/lGL/u5Bh/7OK
+ Xv+ogVj/nXpT/7+sl//i29P/8e7r//f29f/w7uz/8/Hw1////1f///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wBcQSRQaksq/3lWMP+HYDb/lWo8/6N0Qv+vfUb/tIFF/7mF
+ Rf++iET/w4xD/8WQRv/Fk0z/xpZT/8aZWP/HnF7/x59k/8iiav/IpXD/yKh1/8mrev/JroD/yrCF/9XC
+ of/Pu5f/zbmS/+HVvv/w6t//+PXw//38+//+/v3//f38//z7+f/59vH/9fDm/+3l1P/u5tT/49W2/+PV
+ tv/k1rf/5de5/+bZvP/q38X/7uXQ//Dp1//x6df/7ePM/+fbvv/q4Mf/7eTO/+/m0//u5tP/7uXR/+3k
+ 0P/s48//6+LN/+rhy//q4Mr/6d7I/+fcxv/m28T/5dnC/+PXv//i1r3/4NS6/9/RuP/dz7X/282x/9vL
+ sf/u6Nz/5tvH/9fEpP/Wwp//1sCb/9a9l//Vu5P/1LiO/9S2iv/UtIb/07GA/9Gue//Rq3b/0ahx/9Cm
+ bP/Po2b/zaBj/8qdZP/GmWL/wpZi/72SYv+6j2H/r4Zb/6V/V/+ad1L/x7em/+fh2//29fP//fz8//f2
+ 9f3+/v7V////hP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFU8
+ IgJoSi7ac1Iw/4BbNP+PZjn/nXA//6x6Rf+yf0b/t4NF/7yHRP/Bi0P/xY9E/8WSS//GlVH/xphX/8eb
+ Xf/Hn2P/yKJp/8ilbv/IqHT/yat6/8muf//LsYX/1cOi/825lP/NuZP/2cqs/+ri0f/z7uX/+fbx//z8
+ +v/7+fb/+vj0//j28P/z7uL/8evc/+/n1v/n28H/5Na4/+XYuf/m2bv/8OjV//Do1v/w6NX/8enY//Hp
+ 2P/x6df/7eLL/+vfxf/v59T/8OjV/+/m0//u5tP/7uXR/+3k0P/s487/6+DL/+rgy//p38n/6N3H/+bb
+ xf/l2sL/5Ni//+LWvf/g1Lr/39K4/93Ptf/bzbL/5drF//Dp3v/ayav/18Sk/9bCn//Wv5v/1r2X/9W6
+ kv/UuI7/07WJ/9S0hf/TsX//0a16/9Grdf/QqG//z6Vq/8+iZf/Nn2P/yJxj/8SZY//AlWH/vZFi/7WM
+ X/+qhFn/oHtU/5RzTv+7qpj/4NnS//Lw7f/29fT/+Pf28v///8n///9z////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AFxBJVxuUDD/elYx/4hhN/+XbD3/pnZD/7B+
+ Rv+1gkX/uoZE/7+KQ//EjUP/xZFJ/8WUT//Gl1X/xptb/8eeYf/HoWf/yKRt/8inc//Jqnn/ya1+/8yy
+ iP/Vw6L/zLiS/825k//QvJf/3c6z/+ngz//w6t3/9/Tu//j07v/w6dv/7OTR/+rhzf/18OX/9vHn//Dp
+ 2P/p3sT/5tm8/+fbvv/y6tn/8erZ//Lr2v/y69n/8urZ//Lq2P/v59P/8erX//Hp1//w6Nb/7+fU/+/m
+ 0v/t5M//7eXR/+3jz//s483/6+HL/+nfyv/o3sf/59zF/+Xaw//k2MD/49a9/+HUu//f0rj/3s+1/9zP
+ tP/w6d3/5NnG/9jGp//XxKP/1sKf/9a/m//VvZb/1bqR/9S4jf/TtYj/1LSE/9Kvfv/RrHj/0apz/9Cn
+ bv/PpGj/zqFk/8ueY//Hm2P/wpZi/7+TYv+7kGL/sYhd/6aBWP+bd1L/kHBN/5mAZv/IvbH/4NvW/+Lf
+ 2/r9/f3I////nP///yz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AVTwiA2hLLuN1VDH/gVw0/5BmOv+fcUD/rXxG/7OARv+4hEX/vYhE/8KMQ//Fj0b/xZNN/8aW
+ U//Gmlr/x51g/8egZv/Io2z/yKdy/8mqeP/JrX7/zLOI/9XDov/LtpD/zbmT/9C8l//Sv5v/1sSi/+DS
+ t//n3Mj/9O/l/+TYvv/f0K//4dKy/+LVtv/p3cP/7+bS//Ls3f/y69r/7ubR//Lr2v/z7Nv/8uvb//Ls
+ 2v/z7Nr/8uvZ/+rgw//w6NT/8urY//Hq1//w6db/7+fU/+/n0//u5dL/7eTQ/+zjzv/r4cz/6uDK/+je
+ yP/n3cb/5trD/+TYwf/j1r3/4dS6/9/SuP/ez7T/6N/N/+/p3P/Zyq7/2Man/9fEov/WwZ7/1r+Z/9W8
+ lf/VuZH/1LeM/9O0h//UsoL/0a58/9Gsd//RqXH/0KZs/8+jZ//NoGP/yZ1k/8WZYv/BlmL/vZNi/7eN
+ YP+shVv/oXxV/5Z0UP+Ka0r/gWVJ/5uJdv+rn5L/ysS+vP///3b///83////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AW0ElZmtMLP95VjH/iGE3/5ds
+ Pf+mdkP/sX5G/7aCRf+7hkT/wIpD/8WORP/Fkkr/xpVR/8aYV//HnF7/x59k/8iiav/IpnD/yal3/8ms
+ fP/Msob/1cKh/8u2kP/NuJL/z7yW/9K/m//Uwp//18Wi/9nJpv/q4Mz/7OTS/9/QsP/h07P/49W2/+XX
+ uf/m2bv/6NzA/+3jzP/x6tf/9vDk//j06v/28eT/9e3f//Ps2//z7Nv/8ejT//Lq1//y69n/8urY//Hp
+ 1//x6Nb/7+jU/+/m0v/u5dH/7eTP/+vizf/q4Mv/6d/I/+jcxv/m28P/5NjB/+PXvv/h1Lr/39K4/+LV
+ vv/x7OL/4dW+/9jIq//Xxab/18Oi/9bBnf/Wvpn/1buU/9S5jv/Utor/07OF/9Sygf/Rrnr/0at2/9Co
+ b//QpWv/z6Jk/8yfY//Hm2P/w5hj/8CVY/+7kGL/sope/6aBWP+beFP/kHBN/4ZpSv+QemL/d2FL/084
+ IepBLRkK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wBSOiEFZkot3XFQLf+AWzT/j2Y6/55xQP+tfEb/s4BG/7mERf++iET/w4xD/8WQ
+ R//FlE7/xpdV/8abW//HnmL/x6Fo/8ilb//IqHX/yat7/8uxhf/Vwp//y7eQ/8y4kv/PvJb/0r+b/9TC
+ n//XxqP/2cmn/9/Qsf/x6dv/5trB/+LUtP/k1rf/5di7/+jbv//o3L//6t7B/+vfwv/t4sj/8enW//jz
+ 6P/59u3/+PTr//fy5//28OH/8uvX//Hp1f/y69r/8uvY//Hq1//w6NX/7+fU/+7m0v/t5ND/7OPO/+vg
+ y//p38n/6N3G/+bbxP/k2cD/49e+/+HUuv/f0rn/7ufa/+ri0v/Zyq3/2Mep/9fFpf/XwqD/1sCc/9a9
+ l//Vu5L/1LiO/9O1iP/Ts4P/07CA/9GseP/RqXL/0Kdu/8+jZ//OoGT/yp1k/8WaY//ClmP/vZNi/7iO
+ Yf+shVv/oX1W/5V0T/+Qc1T/loFp/4FrVP9WPST/RjEbbP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBYPiNCaEop/3dV
+ MP+GYDb/lms8/6V2Q/+wfkb/toJF/7uGRP/AikP/xY5E/8iXU//Gl1P/xplY/8edX//HoGb/yKRs/8in
+ c//Jqnn/y7GD/9XBnv/Lto7/zLeR/8+7lv/Sv5r/1MKe/9fGo//ayaf/3Myr/+jeyP/w6dn/5NW2/+XX
+ uf/m2bv/6Nu+/+ndwP/r38L/7ODE/+3ixv/t48f/7uPJ//Tt2v/38uX/+PPp//n17P/59ev/9/Hl//fw
+ 4v/07d3/8urY//Hp1v/t5M3/7uXQ/+7l0P/s487/6+HM/+rfyf/n3cb/5trD/+TZwf/t5tb/8uzh//Hs
+ 4f/x6+D/3c+1/9jJrf/Yx6n/18Sk/9bCn//Wv5v/1byW/9W6kf/Ut4z/07SG/9Oxgf/Sr33/0at2/9Cp
+ cf/QpWv/z6Jm/8yfY//Im2T/xJhk/8CUY/+7kWL/sYld/6aBWP+efVr/noJl/52Hb/+EbFT/WkAm/0o0
+ Hcw+KxgC////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wBiRyurbk4s/31ZMv+MZDj/nG8//6x6Rf+zgEb/uIRF/76I
+ RP/DjEP/1Kx3/9Swff/Gl1X/x5tc/8efY//Iomr/yKZw/8mpd//KroH/1cCd/8y1jv/LtpD/zrqV/9G+
+ mf/Uwp7/18Wi/9nJp//czKv/39Cx//Dp2v/r4cv/5di5/+favP/p3L//6t7C/+zgxP/t4sb/7uPI/+/k
+ yf/v5cr/8OXL//Tt2f/279//9u/e//bx4v/38uX/+PPo//j06v/48+j/9fDj//Lr2//x6dj/7+bU/+3j
+ zv/r4cz/6t/J/+jdxv/m2sP/8Ord//j18P/7+fb//Pv6//Tw6P/azLD/2Mms/9fGp//XxKL/1sGe/9a+
+ mf/Vu5T/1LmO/9S2iv/Ts4T/07F//9Kue//Rq3T/0Kdu/9CkaP/OoGT/yp1k/8WZY//ClmP/vZJj/7aN
+ Yf+ykGn/sJN0/62Uef+dhGr/fmRI/1xBJf9POB/9Qi4aNf///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFM7
+ IRlrTzH1fmA+/4NdNf+SaDv/onNB/7B9Rv+1gkX/vo5Q/8aVVP/TqnL/38Ob/8iZV//GmVn/x51g/8eh
+ Z//IpG7/yKh0/8qtfv/Uv5v/zLWM/8q1jv/NuZP/0b2Y/9PBnf/WxaL/2cim/9zMq//ez6//6+DL//Xw
+ 5P/q4Mn/6Nu+/+ndwP/r4MP/7eLG/+7jyP/v5cr/8ObL//HnzP/x583/8unR//bw4P/28N//9u/f//Xu
+ 3f/17tz/9O7c//Xu3//17+H/9e/j//Tu4f/z7d7/9O7h//Hq2//v5tX/6+LO/+jdyP/18Oj/+/r3//7+
+ /f/9/fz/9/Tv/9/TvP/YyKr/18Wm/9fCoP/WwJz/1r2X/9W6kv/UuI3/07SH/9Oygv/Sr3z/0qx4/9Cp
+ cf/Qpmv/z6Jl/8ufZP/Hm2X/xZtq/8Scb//Dn3j/waOC/7mcf/+nimv/kHNT/3teQP9iRSf/Uzsh/0Yx
+ HJX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AFg/JGmNd17/oIdt/5BrQ/+YbD3/p3hF/7mM
+ WP/XuZf/yZ1m/8iYV//cvJD/1K99/8aXVf/Hm1z/x59j/8iiav/IpnH/yqx7/9S+mf/MtIr/yrSM/8y4
+ kv/QvJf/08Cc/9bEof/ZyKX/3Muq/97QsP/t5NH/9/Lp//bx5//s4sn/6t7C/+zhxf/u48f/7+XK//Dm
+ y//x583/8ujO//Lpz//z6c//8+vU//fx4P/38OD/9vDe//Xu3v/17tz/8+za//Dn0f/r4MX/6Ny+/+zi
+ zP/t5ND/7+fX/+/o2P/w6dr/8OjZ//j28P/9/Pr//v7+//38+//59vL/5t3L/97Ptf/byq3/2cem/9jC
+ nv/Xv5r/172W/9e6kf/WuY3/1raI/9Szg//Vs4H/1K97/9awfP/WsoD/1bOG/9S1jf/RsY3/za6L/8Ki
+ gP+xj2v/nntX/49vTf92VjT/a1Ay/1xDKv9KNB3hPSoYD////wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AGdOM6WhjXf/sJuE/6KBXf+7nHr/soVU/9Cxjf/LpXb/v4lE/8SORP/SqnL/17SD/8me
+ Yf/HnV//x6Bm/8ikbv/JqXf/1LyW/8yyh//Ks4n/y7aQ/867lf/Sv5r/1cOf/9jHpP/by6n/3s6u/+fc
+ wv/v6NX/9fDj/+vgyP/r38L/7eHF/+7kyP/w5sv/8efN//Lpz//z6tD/9OvR//Tr0f/069H/8+vT//Xt
+ 1//17tv/9u/d//Ps2P/v5cv/7OHF/+rfwv/o3L//5tm7/+XZu//l2Lr/6N3G/+fcxf/m28T/8uzh//z7
+ +P/8+/n/+vj1//Xx6f/k2sf/49fC/+TXwf/k1b3/5NO6/+PRtv/iz7L/4c2u/+HKqf/gyKX/38Wf/97E
+ nP/ev5X/27mK/9Sxgv/PqXn/x6Bx/8GYav+3jWL/rIVc/598Vv+Tc1D/hWdH/29SMv9sVDv/Tzgi9UAt
+ GTD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ATzgfBnRcQs6qloL/tqGL/8Gp
+ kP/KsJT/0reY/9a6mf/Op3f/x5ZX/97Alf/gxqD/3L6V/8ecXv/HnmL/yKJp/8incv/Uu5P/zLKH/9bD
+ ov/NupT/zbmT/9C9mP/UwZ3/18aj/9rKqP/dzq3/4NKy/+PVt//v59T/8uvb/+vgxP/t4sb/7+XK//Hn
+ zP/y6c//9OrR//Tr0v/17NP/9ezT//Xs0//17NP/9OvR//Pp0P/y6M7/8ObL/+7kyf/t4sb/69/C/+nc
+ v//m2bv/5Na4/+PUtv/i1bj/5tvD/+XZwv/v6dv/9fHq//Hs4f/v6Nz/4tfB/9jHqf/XxaT/1sKf/9fB
+ nP/Xv5n/17yU/9W5jv/UtYj/1LKC/9Ouev/Sq3X/0adw/9CjZv/MoGX/yJxl/8OYZP/AlWT/upFj/6+I
+ Xv+jf1f/l3ZS/4psTP9+Ykb/clpA/1U+J/5DLxpU////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AUjohFXpjSOmum4f/uaSN/8Orkf/Mspb/1LiZ/9e6mP/Jn2n/3sGa/+DE
+ nv/hx6L/1bOC/8ecXf/Hn2X/yKNs/9K3jP/Os4f/3cyw/+PXwf/d0Lf/18eo/9LAnP/WxKD/2cim/9zM
+ q//f0LD/49S1/+bavv/z7d7/8enV/+3ix//w5cr/8ujO//Pq0P/17NP/9u3U//bu1f/27tb/9u7V//bt
+ 1P/17NP/9OvR//Lpz//x58z/7+TJ/+3ixv/r38L/6Ny//+bZu//p3sX/6d7I/+TYv//h07b/6d/L//Hr
+ 3//h1b3/3c+0/9rLr//Yyaz/18Wn/9fDov/WwJ3/1r2X/9W7kv/UuIv/07SG/9OxgP/Srnv/0at1/9Co
+ cP/RpWv/zaFm/8mdZf/FmWX/wJZk/7ySZP+ximD/pYBZ/5l4VP+Nbk3/gGVI/3FYPf9bRCz/RTAbgP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVTwiLoFn
+ T/iynor/u6WO/8Opjv/PtJj/1LeX/9a4lf/cv5v/38Kb/+DFnv/hxqL/y6No/8edX//HoWf/0LCC/9Cz
+ iP/SupP/49W+/+PXwv/k2cT/49jC/+TYwf/n3Mf/6uDM/+zj0P/u5tT/7+bU//Dp1v/28eX/8OfQ//Dm
+ y//y6c//9OvS//bt1P/379b/9+/X//jw2P/48Nf/9+/W//bt1f/17NP/8+rQ//Hnzf/v5cr/7eLG/+vf
+ wv/o3L7/5tm8/+vizP/i1bf/3c6t/+HVuf/y7OD/5drE/97Qtf/czbH/2cqu/9jHqf/XxKT/1sGe/9a+
+ mf/Vu5P/1bmN/9S1iP/TsoL/0q99/9Krdv/QqHD/0aZs/86jZ//Knmb/xptl/8GWZP+9k2T/tItg/6iC
+ W/+celb/j3BP/4RnSv90WkD/WUAn/0gzHaw5KBYB////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8AVj0iUIhwV/6vm4X/uKGI/8aulP/QtZj/1rqa/9m8
+ mv/cwJv/4MKb/+DFn//dwJf/yaBi/8eeYf/OrHn/0bWI/8mqeP/YxKL/49a//+PXwv/k2cX/5tzI/+je
+ yv/q4M3/7OPQ/+3l0//w6Nb/8erY//bx5f/38ub/8efO//Lpz//17NP/9u7W//jw2P/58dn/+fLa//nx
+ 2f/48Nj/9+/W//Xt1P/z6tH/8efN/+/kyf/t4cX/6t7B/+favf/m2r3/6+DL/+DRsf/g0bP/7+fZ/+rg
+ zv/f0bf/3c6z/9rLr//YyKv/18Wl/9bCoP/Wv5v/1byV/9W5kP/Utor/07OE/9Kvfv/SrXj/0alx/9Cm
+ bP/Qo2j/y59n/8abZf/DmGX/vpRl/7WNYv+qhFz/nXpW/5JyUf+EaEr/dlxB/1lAJf9IMxzQOikXC///
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AVz0je5B6Yv+0oIz/vaeQ/8ivlf/Rtpr/1rqb/9m9m//dwJv/4MOb/+DFn//ewpv/yqJn/8ul
+ bf/TtYj/yKZy/8mqev/XxKP/4tW//+LXwv/k2cX/5tzH/+jeyv/q4c7/7OTR/+7l0//w6Nf/8urZ//j0
+ 6v/48+f/8+vT//Xs0//379f/+fHZ//rz2//689z/+vPb//ry3f/48t7/9+/Y//Pq0f/x583/7uTI/+zg
+ xP/p3cD/5tm7/+XYu//p38j/39Cx/+zj0f/o3sv/39K3/93Qtf/bzLD/2cms/9jGpv/Xw6H/1sCc/9a9
+ lv/VupD/1beL/9S0hf/TsX//0q56/9Kqc//Qp23/0KRn/82iaf/HnGf/w5hm/76UZf+2jmP/q4Vc/558
+ V/+Sc1H/hWlL/3heRP9aQif/STMd6jspFx////8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AWEAkp5eCa/+sl4D/vqiQ/8iv
+ lf/Rt5r/1rqb/9m9mv/dwJr/4MKa/+DEnv/fw53/zKVs/9OzhP/Kpm7/yKdy/8mrev/RupT/4NK6/+LX
+ wf/k2sT/59zH/+nfy//r4c7/7OTR/+/m1P/x6df/8+3c//r27f/49Oj/9u7W//fv1//68tv/+/Td//z1
+ 3v/79N3/+/Xi//r15v/38Nz/8+nQ//Dmy//t4sb/6t7C/+favf/k1rj/4dKz/+XYvv/p38v/6uHO/9XE
+ ov/Uw6L/282x/9nJrP/Yx6j/18Oi/9bBnP/Wvpf/1bqS/9W4jP/UtIb/07GA/9Kuev/SqnT/0adt/9Ck
+ aP/MoGf/yZ5q/8OYZ/++lWb/uI9k/6uFXf+ffFj/knNR/4ZpS/95X0b/W0Mp/0kzHfk7KRc8////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wBFMBsJWkEpupyJdP+ynon/vaiQ/8evlf/QtZn/1rqa/9m8mv/cv5n/38GZ/9i2
+ hv/HmVj/0rB//82ocv/Io2v/yKdz/8mre//Msof/08Cd/9rLrv/k2cT/5tzH/+jeyv/q4c7/7eTR/+/m
+ 1P/x6dj/9e/h//r37v/59Ob/9/Db//ry2//89t///ffg//z13//689z/+PDa//Xs1f/x583/7uPI/+vh
+ xP/q3sL/5de5/+LTtP/ez6//5trD/+zj0//ZyKf/08Cc/9PCoP/Zya7/2Meo/9jEo//XwZ7/1r6X/9W7
+ kv/VuIz/1LWG/9OxgP/Srnr/0qt0/9Gnbv/QpGj/zKBn/8meaP/Em2r/v5Vn/7ePZP+rhl7/nnxX/5Nz
+ Uv+Gakz/eWBF/1xELP9HMhz5OigWWf///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBDLxoDXEculZuI
+ dP+vmoX/sZl+/8WulP/EpIH/zq6K/9i7mf/bvpj/38CY/9u7jf/Ur3r/4Mim/9i7kf/RsoT/1LmQ/8qs
+ fP/Kr4L/zLaP/9fGqP/i1r//5tvG/+jeyf/q4M3/7OPQ/+/m0//x6df/9vHl//r27f/58+X/+vTi//z2
+ 4f/++OL/+/Xe//jw2P/17NP/8ujO/+7kyf/r4MT/6Ny//+jcwP/o3MT/3s+v/+baw//s49L/28yt/9K/
+ mv/OupX/1cSl/9jHqP/YxKP/18Gd/9a9mP/Vu5H/1biM/9S0hv/UsYD/0656/9GrdP/RqG7/0KRp/8yg
+ aP/HnWf/xZxs/7+Waf+1jmP/qYZe/558WP+Rc1L/hGlL/3dfRf9cRSz/RjEb6DgnFjr///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8AV0EqZox4Yvueh2//uaSN/8Orkv/BoH3/toZS/8GV
+ X//VtIn/3sCW/97AmP/XtYb/3sWf/97Gov/fyaj/2MCZ/8qrev/JroD/yrKI/824k//bzLH/5drE/+fd
+ x//p38v/6+LO/+7l0v/w6NX/9vHl//n16//48eP/+PHe//bu1f/17dT/8+rQ//DmzP/t4sf/6t7C/+fa
+ vf/k1rj/4dKy/97Orf/l2cH/6+LR/9rLrP/RvZj/zrmT/8y4kv/Yxqf/18Si/9fAnf/WvZb/1bqR/9S3
+ i//UtIb/07GA/9Ouev/SqnT/0adt/8+kaf/LoGn/xpxp/8Oaaf/BmG3/tI1k/6iEXf+ce1j/j3FR/4No
+ S/92XkX/YEoz/0MvGs41JRUd////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8ATDYePXpkTe6smob/t6KN/8Cpkf/FqYz/tIZS/7WCRv/Cklb/z6Zv/9q3if/SrXb/3sSe/9/G
+ ov/fyKf/28Of/86xg//JrH3/yrCF/8q0jf/SwJ3/4NO7/+XaxP/n3cf/6d/L/+zizv/t5dL/9O7h//fy
+ 5//x6db/7eHF/+3hxf/r4MP/6d3A/+favP/k17j/4tO0/9/Pr//czKr/5Ni+/+nhzv/Yyan/08Ge/9TC
+ ov/QvJj/zreP/9fCoP/XwJr/1r2V/9W5kP/Ut4r/1LOF/9Owfv/TrXn/0qpz/9GnbP/Po2r/yqBp/8ac
+ af/BmGn/v5hu/7OOZ/+lgl3/mXlW/41vUf+BZkv/c1xE/11IM/9CLhuqMiMTCv///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ARjEcIGpROtaikHv/s6CK/7ym
+ jv/ApYf/sIFP/7OARv+5hUX/yJld/9CjZv/Qp23/0apz/9W1hf/exqP/3sim/9a9lf/KrHz/ya6A/8qy
+ h//Pu5f/4NS8/+PXwP/l2cP/5tzG/+jeyf/p4Mr/7ebT/+7m1P/l2Lz/49W2/+LUtf/h07P/39Cw/93O
+ rf/by6n/2Mel/+HUuv/o3sv/1sWl/825kv/MuJH/zriQ/9C4kf/SuZH/1LuT/9W6kf/RsoP/1baI/9Sz
+ gv/Tr3z/06x2/9Kpcf/Spmz/zaJq/8meaf/Em2n/wJZp/7qTaP+xjmn/oYBc/5V3Vf+JblD/fGRK/29Z
+ Qv9VQSz+OyoXfS4gEgH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AQC0ZDFhBKrKTf2v/rpuH/7eii/+8o4f/rIFU/7B+Rv+4hkv/zqZ0/9St
+ ef/PoWT/yZta/9Sxf//bv5f/3cWh/9vCnf/Mrn3/yap5/8mugP/Qu5X/2cqt/9nKrv/g07r/49a//9/S
+ t//XxqP/49e//+jeyf/dza7/2cim/9jIpv/ayqr/18al/9PBnv/e0LX/5drG/9PAn//KtI3/yrKH/8mv
+ gf/JrHz/yah2/8ilcP/Iomr/x59k/8ieYf/RrHf/0655/9KrdP/SqG7/z6Rs/8uhbP/GnWv/wplq/76W
+ av+0jWX/q4lm/5+AX/+GZkT/gGVH/3dgRv9YQSn/QzAb9DUlFVH///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ANycVAUk0
+ HIR+alX+qJeE/7Gch/+5oon/rYtl/6p6Rv+/lGT/yKBv/9KugP/buo//3LyR/9y+lf/cwJj/3cKc/9zC
+ nf/OrXr/0LOG/9a+mP/Yw6H/28mr/93Nsv/dz7X/3tC3/9G+m//Pu5X/3c+0/+LVv//f0bj/6N/O/+3m
+ 2f/u59v/7+ne/+bcyf/RvJf/yrCD/8mtfv/Jqnn/yKh0/8ilb//Iomn/x59k/8ecXv/GmVj/yZta/9Co
+ bv/SqXD/0KZt/8yjbf/Jn2z/xJts/8CYa/+4kmj/rYhi/6WGY/+Ze1z/eFk3/2dLLP9hSDD/SzYf/zwq
+ F98vIBIu////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AD0rGDxmUz7XlYNw/6mWgv+znYb/tp2B/7ye
+ ff/TuZz/1rqb/9S1j//Xt43/2baI/9Std//RqnP/1LF+/9Crd//Rr37/28Oe/9vDoP/Yv5r/3Mem/9zI
+ qf/Uvpn/ya+B/8qwhP/KsYX/3c2x//Dp3f/07+b/9vLr//n28f/28uv/6+DO/82xg//IqHT/yKVw/8ij
+ a//HoGb/x55h/8ebXP/GmFf/yJlX/8WTTf/Fj0f/y5tc/82jbv/JoG3/xp1t/8GZbP+6lGn/r4tl/6WD
+ YP+cf17/j3JV/2tOL/9bQCT/Tjcf/0EtGfw0JBSPJhoPDf///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////ADEiEwRBLhp0alZB9ZaEcf+plYD/spuF/8KrlP/RvKb/z7KU/9Cxjv/Ts4z/1bWL/9i3
+ iv/ZtYX/2biJ/9u8kP/avZL/2buQ/9a4i//PrXr/yqZw/8ijbP/IpG7/yKZw/8imcv/YwZ3/7uPT//n2
+ 8f/8+vf/+vby//Tu5P/t4tD/1rqQ/8efZP/HnWD/x5tc/8aYV//GllP/xZNO/8udXf/PoWP/zZ9k/8yk
+ b//JoW//xZ1u/8Kabv+7lWz/sY1m/6aEYf+bfFz/k3hc/39lSP9jSCz/UTkg/0QwG/83JxXHKh0QMP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAyIxMbQzEdpmpX
+ Qv2WhHH/p5N//7yql//JtqH/w6qO/8iqi//Or4z/y6d8/8ymd//OpXH/0ahx/82dXf/HlE7/z6Zs/8uf
+ Yf/Im1z/x5tb/8aaW//Hm13/x5xf/9i7kP/w5dT/9vDm//jz6//59O3/9e3i/+raxP/TsH7/xpZT/8aU
+ UP/Fkkz/xZBI/8WORP/CjEP/wpBP/7uGRf+/kVr/xJ1w/8Gab/+4lGz/r4xn/6WFYv+bfV3/kXVY/4tz
+ Wv9wWD//WUMr/0YyHv84JxblKx4RZh8VCwH///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8AMSITJkMwHJ9pVkP7lIJx/7Cgj//Vyr//6OLa/+/p
+ 4//m2s7/1b6k/8ysiP/OrYf/0a+G/86ndv/Glln/y5xf/9CjaP/Lm1n/x5RO/9Cla//ZuIn/3b+W/+PL
+ q//n1Lj/7d3I/+/hzv/v4s//59K1/82gY//FkEf/wotD/7+JQ/+8h0T/uYVF/7aCRf+zgEb/s4RP/7qV
+ bf+zkGr/qolm/6GCYf+Xe13/jXRY/4dwV/+IdWH/d2RS/1xLOf8/Lx7gKx0QaB4UCwf///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////ACweER8+LRuXnZGG+ubi3v/5+Pb//fz8//r5+P/w6+f/xrGb/72ggf/DpIP/wZ11/72S
+ Yv/FoHT/x59x/8qkdf/Us4r/07CF/8qfav/Ajk7/vYhE/8meZ//TsIP/1LKH/8ylc//GmmT/zah7/8yo
+ fP/DmWn/uoxY/7OCTf+qeUX/o3VD/6J5Tv+nhWH/ooRj/5p9X/+SeV3/j3hf/415Y/+Id2X/d2dW/1dH
+ N/84KhnYJhoPYBsSCgT///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDT0c832tjVxujm
+ 5PXx8O7/8e/t/+jk4P/Fuq7/uqqZ/7uolP/Crpr/xK+Z/8avmP/Eq47/uZh0/6+FWP+qekX/rHtG/699
+ R/+vfUb/r31G/699Rv+ufEb/rHpF/6l4RP+ld0T/qYBU/6+MZf+yknH/rpFx/66UeP+vmH7/qZR9/6KN
+ dv+ciHT/l4Z0/45+bv97a1r/Xk49/0IyJO0sHxGUIBYMN////wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////SuDe3XiXkImjTj8wy29fT/uKe2z/n5GD/6aX
+ h/+mlYP/ppN+/6KMdP+giG//mX1g/5R1VP+VdVP/lnVR/5V0T/+UcUz/kW5H/45pQ/+JZD3/gV01/35Z
+ M/96VjH/elo3/4VpTP+Se2P/lIBq/5B+av+KeGb/fGtZ/2paSf9RQjL/Oi0c6SwgEqcgFgxOFg4IBf//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8AHBMKDCUZDkkxJBaLSj0u0VxOPv1sXEv/d2ZW/4FxYP+HdWT/iHdk/4p3
+ ZP+LeGT/jHhj/4t3Yv+Kd2H/inVg/4d0Xv92YUv/XkYs/1xELP9wXUn/Xko2/088KP9FMyD/PSwb/zEi
+ FOwpHRCuIhcNbBkRCSv///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8AFA0HBhoSCikgFgxRJRoOeDEmGaE/MSXFSj0u1FJFOOFVRznsUkQ2+FFDNf9QQjP9TkEz805A
+ MudCNinZLB4RySgbD7QjGA2NHxULZhkRCT4TDQcX////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8ADQgEA////wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+ /wD///8A////AP///wD///8A////////////////////////////////////////////////////////
+ /////////////////////////////////////8AAAAP///////////////AAAAAAB/////////////4A
+ AAAAAAB////////////wAAAAAAAAD///////////wAAAAAAAAAP//////////4AAAAAAAAAB////////
+ //wAAAAAAAAAAD////////+AAAAAAAAAAAAA///////4AAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAB
+ /////gAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAA///wAAAAAAAAAAA
+ AAAAAAH//4AAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAB//wAAAAAA
+ AAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAD///w
+ AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAH
+ //////8AAAAAAAAAAAAAf///////4AAAAAAAAAAAD////////8AAAAAAAAAAAA////////+AAAAAAAAA
+ AAAH////////AAAAAAAAAAAAA////////gAAAAAAAAAAAAH///////wAAAAAAAAAAAAB///////4AAAA
+ AAAAAAAAAP//////+AAAAAAAAAAAAAB///////AAAAAAAAAAAAAAP//////gAAAAAAAAAAAAAB//////
+ wAAAAAAAAAAAAAAf/////4AAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAH
+ /////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAP////+AAAAAAAAAAAAAAAB/////AAAAAAAAAAA
+ AAAAAf////wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAH///+AAAAAA
+ AAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAA////g
+ AAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAA
+ H///wAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAA
+ AAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAA
+ AAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+A
+ AAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAA
+ D///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAA
+ AAAAAA///8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAA
+ AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///g
+ AAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAA
+ P///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAA
+ AAAAAD////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAf////4AAAAA
+ AAAAAAAAAAP/////AAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAA//////
+ wAAAAAAAAAAAAAAP/////+AAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAD//////8AAAAAAAAAAAAAB/
+ //////gAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAA
+ AAAD////////AAAAAAAAAAAAB////////4AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAA
+ AAAAAAAAP/////////gAAAAAAAAAAH/////////8AAAAAAAAAAH//////////gAAAAAAAAAD////////
+ //+AAAAAAAAAB///////////wAAAAAAAAB////////////AAAAAAAAA////////////8AAAAAAAA////
+ /////////wAAAAAAA//////////////AAAAAAB//////////////8AAAAAB///////////////8AAAAH
+ ////////////////8AAAf//////////////////9////////////////////////////////////////
+ //////////////////////////////////8=
+
+
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
index 37792fe..bfa92e2 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,19 +1,19 @@
-using System;
-using System.Windows.Forms;
-
-namespace ImgRip
-{
- static class Program
- {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Main());
- }
- }
-}
+using System;
+using System.Windows.Forms;
+
+namespace ImgRip
+{
+ 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/Resources.Designer.cs b/Properties/Resources.Designer.cs
index f84a0b4..21febe0 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -1,179 +1,179 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.17626
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace ImgRip.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", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// 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("ImgRip.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 Batch {
- get {
- object obj = ResourceManager.GetObject("Batch", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Cancel {
- get {
- object obj = ResourceManager.GetObject("Cancel", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Cloud {
- get {
- object obj = ResourceManager.GetObject("Cloud", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Delete {
- get {
- object obj = ResourceManager.GetObject("Delete", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Download {
- get {
- object obj = ResourceManager.GetObject("Download", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Files {
- get {
- object obj = ResourceManager.GetObject("Files", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Home {
- get {
- object obj = ResourceManager.GetObject("Home", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Login {
- get {
- object obj = ResourceManager.GetObject("Login", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap New {
- get {
- object obj = ResourceManager.GetObject("New", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?>
- ///<ImageRipper>
- /// <List>
- /// <Site Name="016美图" Domain="china016.com" Image="//img[@src]" Next="//div[@class='turnPage']/a[last()-1]" />
- /// <Site Name="1000人体 " Domain="1000rt.com" Image="//p[@align='center']/img[@src]" />
- /// <Site Name="115美女" Domain="115mm.com" Image="//img[@id='bodyimg']" Next="//ul[@class='pagelist']//a" />
- /// <Site Name="126人体艺术" Domain="126rt.com" Image="//div[@class='myc']//img" Next="//div[@class='page page_l']//a" />
- /// <Site Name="15 [rest of string was truncated]";.
- ///
- internal static string SiteList {
- get {
- return ResourceManager.GetString("SiteList", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap Up {
- get {
- object obj = ResourceManager.GetObject("Up", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17626
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ImgRip.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", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 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("ImgRip.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 Batch {
+ get {
+ object obj = ResourceManager.GetObject("Batch", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Cancel {
+ get {
+ object obj = ResourceManager.GetObject("Cancel", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Cloud {
+ get {
+ object obj = ResourceManager.GetObject("Cloud", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Delete {
+ get {
+ object obj = ResourceManager.GetObject("Delete", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Download {
+ get {
+ object obj = ResourceManager.GetObject("Download", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Files {
+ get {
+ object obj = ResourceManager.GetObject("Files", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Home {
+ get {
+ object obj = ResourceManager.GetObject("Home", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Login {
+ get {
+ object obj = ResourceManager.GetObject("Login", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap New {
+ get {
+ object obj = ResourceManager.GetObject("New", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?>
+ ///<ImageRipper>
+ /// <List>
+ /// <Site Name="016美图" Domain="china016.com" Image="//img[@src]" Next="//div[@class='turnPage']/a[last()-1]" />
+ /// <Site Name="1000人体 " Domain="1000rt.com" Image="//p[@align='center']/img[@src]" />
+ /// <Site Name="115美女" Domain="115mm.com" Image="//img[@id='bodyimg']" Next="//ul[@class='pagelist']//a" />
+ /// <Site Name="126人体艺术" Domain="126rt.com" Image="//div[@class='myc']//img" Next="//div[@class='page page_l']//a" />
+ /// <Site Name="15 [rest of string was truncated]";.
+ ///
+ internal static string SiteList {
+ get {
+ return ResourceManager.GetString("SiteList", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Up {
+ get {
+ object obj = ResourceManager.GetObject("Up", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index 566458f..180deab 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -1,154 +1,154 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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\Batch.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\Cancel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\delete.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\file.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\Home.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\login.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\create.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\Folder up Icon.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\cloud.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\SiteList.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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\Batch.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Cancel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\delete.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\file.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Home.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\login.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\create.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Folder up Icon.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\cloud.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\SiteList.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
index 63529cd..58f6195 100644
--- a/Properties/Settings.Designer.cs
+++ b/Properties/Settings.Designer.cs
@@ -1,86 +1,86 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.431
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace ImgRip.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string Url {
- get {
- return ((string)(this["Url"]));
- }
- set {
- this["Url"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string Dir {
- get {
- return ((string)(this["Dir"]));
- }
- set {
- this["Dir"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string Cookie {
- get {
- return ((string)(this["Cookie"]));
- }
- set {
- this["Cookie"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string CloudID {
- get {
- return ((string)(this["CloudID"]));
- }
- set {
- this["CloudID"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string Password {
- get {
- return ((string)(this["Password"]));
- }
- set {
- this["Password"] = value;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.431
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ImgRip.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string Url {
+ get {
+ return ((string)(this["Url"]));
+ }
+ set {
+ this["Url"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string Dir {
+ get {
+ return ((string)(this["Dir"]));
+ }
+ set {
+ this["Dir"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string Cookie {
+ get {
+ return ((string)(this["Cookie"]));
+ }
+ set {
+ this["Cookie"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string CloudID {
+ get {
+ return ((string)(this["CloudID"]));
+ }
+ set {
+ this["CloudID"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string Password {
+ get {
+ return ((string)(this["Password"]));
+ }
+ set {
+ this["Password"] = value;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
index b5a8974..44a020e 100644
--- a/Properties/Settings.settings
+++ b/Properties/Settings.settings
@@ -1,21 +1,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Properties/app.manifest b/Properties/app.manifest
index 8df6208..2856403 100644
--- a/Properties/app.manifest
+++ b/Properties/app.manifest
@@ -1,47 +1,47 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SetCookie.Designer.cs b/SetCookie.Designer.cs
index e77e4d8..05dc207 100644
--- a/SetCookie.Designer.cs
+++ b/SetCookie.Designer.cs
@@ -1,107 +1,107 @@
-namespace ImgRip
-{
- partial class SetCookie
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.lblCookie = new System.Windows.Forms.Label();
- this.tbCookie = new System.Windows.Forms.TextBox();
- this.btnSummit = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // lblCookie
- //
- this.lblCookie.AutoSize = true;
- this.lblCookie.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.lblCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.lblCookie.ForeColor = System.Drawing.SystemColors.HotTrack;
- this.lblCookie.Location = new System.Drawing.Point(63, 21);
- this.lblCookie.Name = "lblCookie";
- this.lblCookie.Size = new System.Drawing.Size(259, 22);
- this.lblCookie.TabIndex = 0;
- this.lblCookie.Text = "Get Cookie from your browser";
- //
- // tbCookie
- //
- this.tbCookie.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Cookie", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
- this.tbCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.tbCookie.Location = new System.Drawing.Point(12, 65);
- this.tbCookie.Name = "tbCookie";
- this.tbCookie.Size = new System.Drawing.Size(360, 29);
- this.tbCookie.TabIndex = 1;
- this.tbCookie.Text = global::ImgRip.Properties.Settings.Default.Cookie;
- //
- // btnSummit
- //
- this.btnSummit.AutoSize = true;
- this.btnSummit.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.btnSummit.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.btnSummit.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.btnSummit.ForeColor = System.Drawing.SystemColors.Highlight;
- this.btnSummit.Location = new System.Drawing.Point(151, 107);
- this.btnSummit.Name = "btnSummit";
- this.btnSummit.RightToLeft = System.Windows.Forms.RightToLeft.No;
- this.btnSummit.Size = new System.Drawing.Size(83, 31);
- this.btnSummit.TabIndex = 2;
- this.btnSummit.Text = "Submit";
- this.btnSummit.UseVisualStyleBackColor = true;
- this.btnSummit.Click += new System.EventHandler(this.button1_Click);
- //
- // SetCookie
- //
- this.AcceptButton = this.btnSummit;
- this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 26F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.ClientSize = new System.Drawing.Size(384, 162);
- this.Controls.Add(this.btnSummit);
- this.Controls.Add(this.tbCookie);
- this.Controls.Add(this.lblCookie);
- this.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.ForeColor = System.Drawing.Color.Green;
- this.KeyPreview = true;
- this.Margin = new System.Windows.Forms.Padding(7, 6, 7, 6);
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "SetCookie";
- this.ShowIcon = false;
- this.ShowInTaskbar = false;
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "Set Cookie";
- this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SetCookie_KeyPress);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.Label lblCookie;
- private System.Windows.Forms.TextBox tbCookie;
- private System.Windows.Forms.Button btnSummit;
- }
+namespace ImgRip
+{
+ partial class SetCookie
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.lblCookie = new System.Windows.Forms.Label();
+ this.tbCookie = new System.Windows.Forms.TextBox();
+ this.btnSummit = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // lblCookie
+ //
+ this.lblCookie.AutoSize = true;
+ this.lblCookie.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.lblCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lblCookie.ForeColor = System.Drawing.SystemColors.HotTrack;
+ this.lblCookie.Location = new System.Drawing.Point(63, 21);
+ this.lblCookie.Name = "lblCookie";
+ this.lblCookie.Size = new System.Drawing.Size(259, 22);
+ this.lblCookie.TabIndex = 0;
+ this.lblCookie.Text = "Get Cookie from your browser";
+ //
+ // tbCookie
+ //
+ this.tbCookie.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::ImgRip.Properties.Settings.Default, "Cookie", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+ this.tbCookie.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.tbCookie.Location = new System.Drawing.Point(12, 65);
+ this.tbCookie.Name = "tbCookie";
+ this.tbCookie.Size = new System.Drawing.Size(360, 29);
+ this.tbCookie.TabIndex = 1;
+ this.tbCookie.Text = global::ImgRip.Properties.Settings.Default.Cookie;
+ //
+ // btnSummit
+ //
+ this.btnSummit.AutoSize = true;
+ this.btnSummit.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.btnSummit.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.btnSummit.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.btnSummit.ForeColor = System.Drawing.SystemColors.Highlight;
+ this.btnSummit.Location = new System.Drawing.Point(151, 107);
+ this.btnSummit.Name = "btnSummit";
+ this.btnSummit.RightToLeft = System.Windows.Forms.RightToLeft.No;
+ this.btnSummit.Size = new System.Drawing.Size(83, 31);
+ this.btnSummit.TabIndex = 2;
+ this.btnSummit.Text = "Submit";
+ this.btnSummit.UseVisualStyleBackColor = true;
+ this.btnSummit.Click += new System.EventHandler(this.button1_Click);
+ //
+ // SetCookie
+ //
+ this.AcceptButton = this.btnSummit;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 26F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(384, 162);
+ this.Controls.Add(this.btnSummit);
+ this.Controls.Add(this.tbCookie);
+ this.Controls.Add(this.lblCookie);
+ this.Font = new System.Drawing.Font("Microsoft YaHei", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.ForeColor = System.Drawing.Color.Green;
+ this.KeyPreview = true;
+ this.Margin = new System.Windows.Forms.Padding(7, 6, 7, 6);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "SetCookie";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Set Cookie";
+ this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SetCookie_KeyPress);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label lblCookie;
+ private System.Windows.Forms.TextBox tbCookie;
+ private System.Windows.Forms.Button btnSummit;
+ }
}
\ No newline at end of file
diff --git a/SetCookie.cs b/SetCookie.cs
index a1064ba..0d4357e 100644
--- a/SetCookie.cs
+++ b/SetCookie.cs
@@ -1,22 +1,22 @@
-namespace ImgRip
-{
- using System;
- using System.Windows.Forms;
-
- partial class SetCookie : Form
- {
- public SetCookie()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Close();
- }
-
- private void SetCookie_KeyPress(object sender, KeyPressEventArgs e)
- {
- if (e.KeyChar == 27) Close();
- }
- }
-}
+namespace ImgRip
+{
+ using System;
+ using System.Windows.Forms;
+
+ partial class SetCookie : Form
+ {
+ public SetCookie()
+ {
+ InitializeComponent();
+ }
+ private void button1_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ private void SetCookie_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ if (e.KeyChar == 27) Close();
+ }
+ }
+}
diff --git a/SetCookie.resx b/SetCookie.resx
index 29dcb1b..1af7de1 100644
--- a/SetCookie.resx
+++ b/SetCookie.resx
@@ -1,120 +1,120 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/Settings.cs b/Settings.cs
index d424afa..e8143bd 100644
--- a/Settings.cs
+++ b/Settings.cs
@@ -1,28 +1,28 @@
-namespace ImgRip.Properties {
-
-
- // This class allows you to handle specific events on the settings class:
- // The SettingChanging event is raised before a setting's value is changed.
- // The PropertyChanged event is raised after a setting's value is changed.
- // The SettingsLoaded event is raised after the setting values are loaded.
- // The SettingsSaving event is raised before the setting values are saved.
- internal sealed partial class Settings {
-
- public Settings() {
- // // To add event handlers for saving and changing settings, uncomment the lines below:
- //
- // this.SettingChanging += this.SettingChangingEventHandler;
- //
- // this.SettingsSaving += this.SettingsSavingEventHandler;
- //
- }
-
- private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
- // Add code to handle the SettingChangingEvent event here.
- }
-
- private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
- // Add code to handle the SettingsSaving event here.
- }
- }
-}
+namespace ImgRip.Properties {
+
+
+ // This class allows you to handle specific events on the settings class:
+ // The SettingChanging event is raised before a setting's value is changed.
+ // The PropertyChanged event is raised after a setting's value is changed.
+ // The SettingsLoaded event is raised after the setting values are loaded.
+ // The SettingsSaving event is raised before the setting values are saved.
+ internal sealed partial class Settings {
+
+ public Settings() {
+ // // To add event handlers for saving and changing settings, uncomment the lines below:
+ //
+ // this.SettingChanging += this.SettingChangingEventHandler;
+ //
+ // this.SettingsSaving += this.SettingsSavingEventHandler;
+ //
+ }
+
+ private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+ // Add code to handle the SettingChangingEvent event here.
+ }
+
+ private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+ // Add code to handle the SettingsSaving event here.
+ }
+ }
+}
diff --git a/SiteList.xml b/SiteList.xml
index 1dc8291..6c7e3c5 100644
--- a/SiteList.xml
+++ b/SiteList.xml
@@ -1,232 +1,232 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sitelist.xsd b/Sitelist.xsd
index 820b708..e4bf59e 100644
--- a/Sitelist.xsd
+++ b/Sitelist.xsd
@@ -1,25 +1,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sites.Designer.cs b/Sites.Designer.cs
index 1469c0f..a33a040 100644
--- a/Sites.Designer.cs
+++ b/Sites.Designer.cs
@@ -1,120 +1,120 @@
-namespace ImgRip
-{
- partial class Sites
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.ssPrompt = new System.Windows.Forms.StatusStrip();
- this.Prompt = new System.Windows.Forms.ToolStripStatusLabel();
- this.flPanel = new System.Windows.Forms.FlowLayoutPanel();
- this.tbSearch = new System.Windows.Forms.TextBox();
- this.ssPrompt.SuspendLayout();
- this.SuspendLayout();
- //
- // ssPrompt
- //
- this.ssPrompt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.ssPrompt.AutoSize = false;
- this.ssPrompt.BackColor = System.Drawing.SystemColors.Control;
- this.ssPrompt.Dock = System.Windows.Forms.DockStyle.None;
- this.ssPrompt.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.Prompt});
- this.ssPrompt.Location = new System.Drawing.Point(1, 419);
- this.ssPrompt.Name = "ssPrompt";
- this.ssPrompt.Size = new System.Drawing.Size(623, 23);
- this.ssPrompt.TabIndex = 11;
- //
- // Prompt
- //
- this.Prompt.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold);
- this.Prompt.ForeColor = System.Drawing.Color.MediumSeaGreen;
- this.Prompt.Name = "Prompt";
- this.Prompt.Size = new System.Drawing.Size(0, 18);
- //
- // flPanel
- //
- this.flPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.flPanel.AutoScroll = true;
- this.flPanel.BackColor = System.Drawing.SystemColors.ControlLight;
- this.flPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
- this.flPanel.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.flPanel.Location = new System.Drawing.Point(0, 29);
- this.flPanel.Name = "flPanel";
- this.flPanel.Size = new System.Drawing.Size(624, 390);
- this.flPanel.TabIndex = 12;
- //
- // tbSearch
- //
- this.tbSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbSearch.Font = new System.Drawing.Font("Microsoft YaHei", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.tbSearch.Location = new System.Drawing.Point(0, 1);
- this.tbSearch.Name = "tbSearch";
- this.tbSearch.Size = new System.Drawing.Size(623, 27);
- this.tbSearch.TabIndex = 0;
- this.tbSearch.WordWrap = false;
- this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged);
- //
- // Sites
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BackColor = System.Drawing.Color.White;
- this.ClientSize = new System.Drawing.Size(625, 442);
- this.Controls.Add(this.tbSearch);
- this.Controls.Add(this.flPanel);
- this.Controls.Add(this.ssPrompt);
- this.ForeColor = System.Drawing.SystemColors.ControlText;
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
- this.KeyPreview = true;
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "Sites";
- this.Padding = new System.Windows.Forms.Padding(9);
- this.ShowIcon = false;
- this.ShowInTaskbar = false;
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "Support Sites";
- this.Load += new System.EventHandler(this.Sites_Load);
- this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Sites_KeyPress);
- this.ssPrompt.ResumeLayout(false);
- this.ssPrompt.PerformLayout();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.StatusStrip ssPrompt;
- private System.Windows.Forms.ToolStripStatusLabel Prompt;
- private System.Windows.Forms.FlowLayoutPanel flPanel;
- private System.Windows.Forms.TextBox tbSearch;
-
- }
-}
+namespace ImgRip
+{
+ partial class Sites
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.ssPrompt = new System.Windows.Forms.StatusStrip();
+ this.Prompt = new System.Windows.Forms.ToolStripStatusLabel();
+ this.flPanel = new System.Windows.Forms.FlowLayoutPanel();
+ this.tbSearch = new System.Windows.Forms.TextBox();
+ this.ssPrompt.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // ssPrompt
+ //
+ this.ssPrompt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.ssPrompt.AutoSize = false;
+ this.ssPrompt.BackColor = System.Drawing.SystemColors.Control;
+ this.ssPrompt.Dock = System.Windows.Forms.DockStyle.None;
+ this.ssPrompt.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.Prompt});
+ this.ssPrompt.Location = new System.Drawing.Point(1, 419);
+ this.ssPrompt.Name = "ssPrompt";
+ this.ssPrompt.Size = new System.Drawing.Size(623, 23);
+ this.ssPrompt.TabIndex = 11;
+ //
+ // Prompt
+ //
+ this.Prompt.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold);
+ this.Prompt.ForeColor = System.Drawing.Color.MediumSeaGreen;
+ this.Prompt.Name = "Prompt";
+ this.Prompt.Size = new System.Drawing.Size(0, 18);
+ //
+ // flPanel
+ //
+ this.flPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.flPanel.AutoScroll = true;
+ this.flPanel.BackColor = System.Drawing.SystemColors.ControlLight;
+ this.flPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
+ this.flPanel.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.flPanel.Location = new System.Drawing.Point(0, 29);
+ this.flPanel.Name = "flPanel";
+ this.flPanel.Size = new System.Drawing.Size(624, 390);
+ this.flPanel.TabIndex = 12;
+ //
+ // tbSearch
+ //
+ this.tbSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbSearch.Font = new System.Drawing.Font("Microsoft YaHei", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.tbSearch.Location = new System.Drawing.Point(0, 1);
+ this.tbSearch.Name = "tbSearch";
+ this.tbSearch.Size = new System.Drawing.Size(623, 27);
+ this.tbSearch.TabIndex = 0;
+ this.tbSearch.WordWrap = false;
+ this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged);
+ //
+ // Sites
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.ClientSize = new System.Drawing.Size(625, 442);
+ this.Controls.Add(this.tbSearch);
+ this.Controls.Add(this.flPanel);
+ this.Controls.Add(this.ssPrompt);
+ this.ForeColor = System.Drawing.SystemColors.ControlText;
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.KeyPreview = true;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "Sites";
+ this.Padding = new System.Windows.Forms.Padding(9);
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Support Sites";
+ this.Load += new System.EventHandler(this.Sites_Load);
+ this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Sites_KeyPress);
+ this.ssPrompt.ResumeLayout(false);
+ this.ssPrompt.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.StatusStrip ssPrompt;
+ private System.Windows.Forms.ToolStripStatusLabel Prompt;
+ private System.Windows.Forms.FlowLayoutPanel flPanel;
+ private System.Windows.Forms.TextBox tbSearch;
+
+ }
+}
diff --git a/Sites.cs b/Sites.cs
index 51cac27..53111d3 100644
--- a/Sites.cs
+++ b/Sites.cs
@@ -1,90 +1,90 @@
-namespace ImgRip
-{
- using System;
- using System.Diagnostics;
- using System.Linq;
- using System.Windows.Forms;
-
- partial class Sites : Form
- {
- public Sites()
- {
- InitializeComponent();
- flPanel.MouseWheel += flPanel_MouseWheel;
- }
-
- void flPanel_MouseWheel(object sender, MouseEventArgs e)
- {
- if (!flPanel.HasChildren) return;
- var hs = flPanel.HorizontalScroll;
- var width = flPanel.Controls[0].Width;
- int val = hs.Value;
- val += e.Delta < 0 ? width : -width;
- if (val < 0) { hs.Value = 0; flPanel.ScrollControlIntoView(flPanel.Controls[0]); }
- else if (val > hs.Maximum) hs.Value = hs.Maximum;
- else hs.Value = val;
- }
-
- protected override void OnMouseWheel(MouseEventArgs e)
- {
- flPanel_MouseWheel(flPanel, e);
- }
-
- static readonly string labelPrompt = "http://{0}", sitePrompt = "Total {0} sites.";
-
- void item_MouseEnter(object sender, System.EventArgs e)
- {
- Prompt.Text = string.Format(labelPrompt, ((LinkLabel)sender).Tag as string);
- }
-
- void item_MouseLeave(object sender, System.EventArgs e)
- {
- Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count);
- }
-
- void item_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- Process.Start(string.Format(labelPrompt, ((LinkLabel)sender).Tag as string));
- }
-
- private void Sites_KeyPress(object sender, KeyPressEventArgs e)
- {
- if (e.KeyChar == 27) this.Close();
- }
-
- static LinkLabel[] lla;
-
- private void Sites_Load(object sender, EventArgs e)
- {
- var owner = this.Owner as Main;
- lla = new LinkLabel[owner.sites.Length];
- int i = 0;
- foreach (var site in owner.sites)
- {
- var item = new LinkLabel { Text = site.Name, Tag = site.ToString()};
- item.LinkClicked += item_LinkClicked;
- item.MouseEnter += item_MouseEnter;
- item.MouseLeave += item_MouseLeave;
- lla[i++] = item;
- }
- flPanel.Controls.AddRange(lla);
- Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count);
- }
-
- private void tbSearch_TextChanged(object sender, EventArgs e)
- {
- var term = tbSearch.Text.Trim();
- if (string.IsNullOrEmpty(term))
- if (tbSearch.Text.Length > 0) return;
- else { if (lla.Length != flPanel.Controls.Count) { flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(lla); } }
- else
- {
- var match = lla.Where(_ => ((string)_.Tag).ContainsEx(term)).ToArray();
- if (match.Length == lla.Length && lla.Length == flPanel.Controls.Count) return;
- flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(match);
- }
- flPanel.ResumeLayout();
- Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count);
- }
- }
-}
+namespace ImgRip
+{
+ using System;
+ using System.Diagnostics;
+ using System.Linq;
+ using System.Windows.Forms;
+
+ partial class Sites : Form
+ {
+ public Sites()
+ {
+ InitializeComponent();
+ flPanel.MouseWheel += flPanel_MouseWheel;
+ }
+
+ void flPanel_MouseWheel(object sender, MouseEventArgs e)
+ {
+ if (!flPanel.HasChildren) return;
+ var hs = flPanel.HorizontalScroll;
+ var width = flPanel.Controls[0].Width;
+ int val = hs.Value;
+ val += e.Delta < 0 ? width : -width;
+ if (val < 0) { hs.Value = 0; flPanel.ScrollControlIntoView(flPanel.Controls[0]); }
+ else if (val > hs.Maximum) hs.Value = hs.Maximum;
+ else hs.Value = val;
+ }
+
+ protected override void OnMouseWheel(MouseEventArgs e)
+ {
+ flPanel_MouseWheel(flPanel, e);
+ }
+
+ static readonly string labelPrompt = "http://{0}", sitePrompt = "Total {0} sites.";
+
+ void item_MouseEnter(object sender, System.EventArgs e)
+ {
+ Prompt.Text = string.Format(labelPrompt, ((LinkLabel)sender).Tag as string);
+ }
+
+ void item_MouseLeave(object sender, System.EventArgs e)
+ {
+ Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count);
+ }
+
+ void item_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ Process.Start(string.Format(labelPrompt, ((LinkLabel)sender).Tag as string));
+ }
+
+ private void Sites_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ if (e.KeyChar == 27) this.Close();
+ }
+
+ static LinkLabel[] lla;
+
+ private void Sites_Load(object sender, EventArgs e)
+ {
+ var owner = this.Owner as Main;
+ lla = new LinkLabel[owner.sites.Length];
+ int i = 0;
+ foreach (var site in owner.sites)
+ {
+ var item = new LinkLabel { Text = site.Name, Tag = site.ToString()};
+ item.LinkClicked += item_LinkClicked;
+ item.MouseEnter += item_MouseEnter;
+ item.MouseLeave += item_MouseLeave;
+ lla[i++] = item;
+ }
+ flPanel.Controls.AddRange(lla);
+ Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count);
+ }
+
+ private void tbSearch_TextChanged(object sender, EventArgs e)
+ {
+ var term = tbSearch.Text.Trim();
+ if (string.IsNullOrEmpty(term))
+ if (tbSearch.Text.Length > 0) return;
+ else { if (lla.Length != flPanel.Controls.Count) { flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(lla); } }
+ else
+ {
+ var match = lla.Where(_ => ((string)_.Tag).ContainsEx(term)).ToArray();
+ if (match.Length == lla.Length && lla.Length == flPanel.Controls.Count) return;
+ flPanel.SuspendLayout(); flPanel.Controls.Clear(); flPanel.Controls.AddRange(match);
+ }
+ flPanel.ResumeLayout();
+ Prompt.Text = string.Format(sitePrompt, flPanel.Controls.Count);
+ }
+ }
+}
diff --git a/Sites.resx b/Sites.resx
index ddb7c31..34a40a4 100644
--- a/Sites.resx
+++ b/Sites.resx
@@ -1,126 +1,126 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 17, 17
-
-
- 54
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 54
+
\ No newline at end of file
diff --git a/SplitButton.cs b/SplitButton.cs
index 64dc021..34bf0fe 100644
--- a/SplitButton.cs
+++ b/SplitButton.cs
@@ -1,429 +1,429 @@
-namespace ImgRip
-{
- using System;
- using System.ComponentModel;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Windows.Forms;
- using System.Windows.Forms.VisualStyles;
-
- internal class SplitButton : Button
- {
- private PushButtonState _state;
- private const int PushButtonWidth = 14;
- private static int BorderSize = SystemInformation.Border3DSize.Width * 2;
- private bool skipNextOpen;
- private Rectangle dropDownRectangle;
- private Rectangle UpRectangle, DownRectangle;
- private bool showSplit = true;
- [Category("Mouse")]
- public event EventHandler UpArrowMouseDown, UpArrowMouseUp, DownArrowMouseDown, DownArrowMouseUp;
-
- [DefaultValue(true)]
- [Category("Appearance")]
- [DisplayName("Show Split")]
- [Description("Check to set whether to show context menu")]
- public bool ShowSplit
- {
- get
- {
- return showSplit;
- }
- set
- {
- if (value != showSplit)
- {
- showSplit = value;
- Invalidate();
- if (this.Parent != null)
- {
- this.Parent.PerformLayout();
- }
- }
- }
- }
-
- private PushButtonState State
- {
- get
- {
- return _state;
- }
- set
- {
- if (!_state.Equals(value))
- {
- _state = value;
- Invalidate();
- }
- }
- }
-
- public override Size GetPreferredSize(Size proposedSize)
- {
- Size preferredSize = base.GetPreferredSize(proposedSize);
- if (showSplit && !string.IsNullOrEmpty(Text) && TextRenderer.MeasureText(Text, Font).Width + PushButtonWidth > preferredSize.Width)
- {
- return preferredSize + new Size(PushButtonWidth + BorderSize * 2, 0);
- }
- return preferredSize;
- }
-
- protected override bool IsInputKey(Keys keyData)
- {
- if (keyData.Equals(Keys.Down) && showSplit)
- {
- return true;
- }
- else
- {
- return base.IsInputKey(keyData);
- }
- }
-
- protected override void OnGotFocus(EventArgs e)
- {
- if (!showSplit)
- {
- base.OnGotFocus(e);
- return;
- }
-
- if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
- {
- State = PushButtonState.Default;
- }
- }
-
- protected override void OnKeyDown(KeyEventArgs kevent)
- {
- if (showSplit)
- {
- if (kevent.KeyCode.Equals(Keys.Down))
- {
- ShowContextMenuStrip();
- }
- else if (kevent.KeyCode.Equals(Keys.Space) && kevent.Modifiers == Keys.None)
- {
- State = PushButtonState.Pressed;
- }
- }
- base.OnKeyDown(kevent);
- }
-
- protected override void OnKeyUp(KeyEventArgs kevent)
- {
- if (kevent.KeyCode.Equals(Keys.Space))
- {
- if (Control.MouseButtons == MouseButtons.None)
- {
- State = PushButtonState.Normal;
- }
- }
- base.OnKeyUp(kevent);
- }
-
- protected override void OnLostFocus(EventArgs e)
- {
- if (!showSplit)
- {
- base.OnLostFocus(e);
- return;
- }
- if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
- {
- State = PushButtonState.Normal;
- }
- }
-
- protected override void OnMouseDown(MouseEventArgs e)
- {
- if (!showSplit || e.Button == MouseButtons.Right)
- {
- base.OnMouseDown(e);
- return;
- }
-
- if (dropDownRectangle.Contains(e.Location))
- {
- ShowContextMenuStrip();
- }
- else if (UpRectangle.Contains(e.Location))
- {
- if (UpArrowMouseDown != null)
- UpArrowMouseDown(this, e);
- State = PushButtonState.Pressed;
- }
- else if (DownRectangle.Contains(e.Location))
- {
- if (DownArrowMouseDown != null)
- DownArrowMouseDown(this, e);
- State = PushButtonState.Pressed;
- }
- else
- {
- State = PushButtonState.Pressed;
- }
- }
-
- protected override void OnMouseEnter(EventArgs e)
- {
- if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
- {
- State = PushButtonState.Hot;
- }
- base.OnMouseEnter(e);
- }
-
- protected override void OnMouseLeave(EventArgs e)
- {
- if (!showSplit)
- {
- base.OnMouseLeave(e);
- return;
- }
- if (UpArrowMouseUp != null) UpArrowMouseUp(this, e);
- if (DownArrowMouseUp != null) DownArrowMouseUp(this, e);
- if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
- {
- if (Focused)
- {
- State = PushButtonState.Default;
- }
- else
- {
- State = PushButtonState.Normal;
- }
- }
- }
-
- protected override void OnMouseUp(MouseEventArgs mevent)
- {
- if (!showSplit || mevent.Button.Equals( MouseButtons.Right))
- {
- base.OnMouseUp(mevent);
- return;
- }
-
- if (ContextMenuStrip == null || !ContextMenuStrip.Visible)
- {
- SetButtonDrawState();
- if (Bounds.Contains(Parent.PointToClient(Cursor.Position)) && !dropDownRectangle.Contains(mevent.Location) && !DownRectangle.Contains(mevent.Location) && !UpRectangle.Contains(mevent.Location))
- {
- OnClick(mevent);
- }
- if (UpRectangle.Contains(mevent.Location) && UpArrowMouseUp != null) UpArrowMouseUp(this, mevent);
- if (DownRectangle.Contains(mevent.Location) && DownArrowMouseUp != null) DownArrowMouseUp(this, mevent);
- }
- }
-
- protected override void OnPaint(PaintEventArgs pevent)
- {
- base.OnPaint(pevent);
-
- if (!showSplit)
- {
- return;
- }
-
- Graphics g = pevent.Graphics;
- Rectangle bounds = this.ClientRectangle;
-
- // draw the button background as according to the current state.
- if (State != PushButtonState.Pressed && IsDefault && !Application.RenderWithVisualStyles)
- {
- Rectangle backgroundBounds = bounds;
- backgroundBounds.Inflate(-1, -1);
- ButtonRenderer.DrawButton(g, backgroundBounds, State);
-
- // button renderer doesnt draw the black frame when themes are off =(
- g.DrawRectangle(SystemPens.WindowFrame, 0, 0, bounds.Width - 1, bounds.Height - 1);
- }
- else
- {
- ButtonRenderer.DrawButton(g, bounds, State);
- }
- // calculate the current dropdown rectangle.
- dropDownRectangle = new Rectangle(bounds.Right - PushButtonWidth - 1, BorderSize, PushButtonWidth, bounds.Height - BorderSize * 2);
- UpRectangle = new Rectangle(BorderSize, BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth);
- DownRectangle = new Rectangle(BorderSize, bounds.Height - PushButtonWidth - BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth);
-
- Rectangle focusRect =
- new Rectangle(BorderSize,
- PushButtonWidth,
- bounds.Width - dropDownRectangle.Width - BorderSize,
- bounds.Height - (PushButtonWidth * 2));
-
- bool drawSplitLine = (State == PushButtonState.Hot || State == PushButtonState.Pressed || !Application.RenderWithVisualStyles);
-
- if (RightToLeft == RightToLeft.Yes)
- {
- dropDownRectangle.X = bounds.Left + 1;
- focusRect.X = dropDownRectangle.Right;
- if (drawSplitLine)
- {
- // draw two lines at the edge of the dropdown button
- g.DrawLine(SystemPens.ButtonShadow, bounds.Left + PushButtonWidth, BorderSize, bounds.Left + PushButtonWidth, bounds.Bottom - BorderSize);
- g.DrawLine(SystemPens.ButtonFace, bounds.Left + PushButtonWidth + 1, BorderSize, bounds.Left + PushButtonWidth + 1, bounds.Bottom - BorderSize);
- }
- }
- else
- {
- if (drawSplitLine)
- {
- // draw two lines at the right edge of the dropdown button
- g.DrawLine(SystemPens.ButtonShadow, bounds.Right - PushButtonWidth, BorderSize, bounds.Right - PushButtonWidth, bounds.Bottom - BorderSize);
- g.DrawLine(SystemPens.ButtonFace, bounds.Right - PushButtonWidth - 1, BorderSize, bounds.Right - PushButtonWidth - 1, bounds.Bottom - BorderSize);
- // draw two lines at the up edge of the dropdown button
- g.DrawLine(SystemPens.ButtonShadow, BorderSize-1, PushButtonWidth, bounds.Right - PushButtonWidth, PushButtonWidth);
- g.DrawLine(SystemPens.ButtonFace, BorderSize-1, PushButtonWidth - 1, bounds.Right - PushButtonWidth, PushButtonWidth - 1);
- // draw two lines at the bottom edge of the dropdown button
- g.DrawLine(SystemPens.ButtonShadow, BorderSize - 1, bounds.Bottom - PushButtonWidth, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth);
- g.DrawLine(SystemPens.ButtonFace, BorderSize - 1, bounds.Bottom - PushButtonWidth - 1, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth - 1);
- }
- }
-
- // Draw an arrow in the correct location
- PaintArrow(g, dropDownRectangle,false,false);
- PaintArrow(g, UpRectangle,true,true);
- PaintArrow(g, DownRectangle,true,false);
-
- // Figure out how to draw the text
- TextFormatFlags formatFlags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
-
-
- // If we dont' use mnemonic, set formatFlag to NoPrefix as this will show ampersand.
- if (!UseMnemonic)
- {
- formatFlags = formatFlags | TextFormatFlags.NoPrefix;
- }
- else if (!ShowKeyboardCues)
- {
- formatFlags = formatFlags | TextFormatFlags.HidePrefix;
- }
-
- if (!string.IsNullOrEmpty(this.Text))
- {
- if (Enabled)
- TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.ControlText, formatFlags);
- else
- TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.GrayText, formatFlags);
- }
-
- if (Image != null)
- {
- if (Enabled)
- g.DrawImage(Image, focusRect);
- else
- g.DrawImage(MakeGrayscale(Image), focusRect);
-
- }
-
- // draw the focus rectangle.
-
- if (State != PushButtonState.Pressed && Focused)
- {
- ControlPaint.DrawFocusRectangle(g, focusRect);
- }
- }
-
- Image MakeGrayscale(Image original)
- {
- //create a blank bitmap the same size as original
- Image newBitmap =
- new Bitmap(original.Width, original.Height);
-
- //get a graphics object from the new image
- Graphics g = Graphics.FromImage(newBitmap);
-
- //create the grayscale ColorMatrix
- ColorMatrix colorMatrix = new ColorMatrix(new float[][] {
- new float[] { .3f, .3f, .3f, 0, 0 },
- new float[] { .59f, .59f, .59f, 0, 0 },
- new float[] { .11f, .11f, .11f, 0, 0 },
- new float[] { 0, 0, 0, 1, 0 },
- new float[] { 0, 0, 0, 0, 1 } });
-
- //create some image attributes
- ImageAttributes attributes = new ImageAttributes();
-
- //set the color matrix attribute
- attributes.SetColorMatrix(colorMatrix);
-
- //draw the original image on the new image
- //using the grayscale color matrix
- g.DrawImage(original,
- new Rectangle(0, 0, original.Width, original.Height),
- 0, 0, original.Width, original.Height,
- GraphicsUnit.Pixel, attributes);
-
- //dispose the Graphics object
- g.Dispose();
- return newBitmap;
- }
-
- private static void PaintArrow(Graphics g, Rectangle Rect,bool Horiz,bool Up)
- {
- Point middle = new Point((Rect.Left + Rect.Width / 2),(Rect.Top + Rect.Height / 2));
-
- //if the width is odd - favor pushing it over one pixel right.
- middle.X += (Rect.Width % 2);
- if (Horiz)
- middle.X -= PushButtonWidth / 2;
- Point[] arrow;
- if (Up)//Up Arrow
- arrow = new Point[] { new Point(middle.X - 3, middle.Y + 1), new Point(middle.X + 3, middle.Y + 1), new Point(middle.X, middle.Y - 4) };
- else//Down Arrow
- arrow = new Point[] { new Point(middle.X - 2, middle.Y - 1), new Point(middle.X + 3, middle.Y - 1), new Point(middle.X, middle.Y + 4) };
-
- g.FillPolygon(Brushes.Green, arrow);
- }
-
- private void ShowContextMenuStrip()
- {
- if (skipNextOpen)
- {
- // we were called because we're closing the context menu strip
- // when clicking the dropdown button.
- skipNextOpen = false;
- return;
- }
- State = PushButtonState.Pressed;
-
- if (ContextMenuStrip != null)
- {
- ContextMenuStrip.Closing += ContextMenuStrip_Closing;
- ContextMenuStrip.Show(this, new Point(0, Height), ToolStripDropDownDirection.Default);
- }
- }
-
- void ContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e)
- {
- ContextMenuStrip cms = sender as ContextMenuStrip;
- if (cms != null)
- {
- cms.Closing -= ContextMenuStrip_Closing;
- }
-
- SetButtonDrawState();
-
- if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
- {
- Point pt = this.PointToClient(Cursor.Position);
- skipNextOpen = (dropDownRectangle.Contains(pt) || UpRectangle.Contains(pt) || DownRectangle.Contains(pt));
- }
- }
-
-
- private void SetButtonDrawState()
- {
- if (Bounds.Contains(Parent.PointToClient(Cursor.Position)))
- State = PushButtonState.Hot;
- else if (Focused)
- State = PushButtonState.Default;
- else
- State = PushButtonState.Normal;
- }
- }
-}
-
+namespace ImgRip
+{
+ using System;
+ using System.ComponentModel;
+ using System.Drawing;
+ using System.Drawing.Imaging;
+ using System.Windows.Forms;
+ using System.Windows.Forms.VisualStyles;
+
+ internal class SplitButton : Button
+ {
+ private PushButtonState _state;
+ private const int PushButtonWidth = 14;
+ private static int BorderSize = SystemInformation.Border3DSize.Width * 2;
+ private bool skipNextOpen;
+ private Rectangle dropDownRectangle;
+ private Rectangle UpRectangle, DownRectangle;
+ private bool showSplit = true;
+ [Category("Mouse")]
+ public event EventHandler UpArrowMouseDown, UpArrowMouseUp, DownArrowMouseDown, DownArrowMouseUp;
+
+ [DefaultValue(true)]
+ [Category("Appearance")]
+ [DisplayName("Show Split")]
+ [Description("Check to set whether to show context menu")]
+ public bool ShowSplit
+ {
+ get
+ {
+ return showSplit;
+ }
+ set
+ {
+ if (value != showSplit)
+ {
+ showSplit = value;
+ Invalidate();
+ if (this.Parent != null)
+ {
+ this.Parent.PerformLayout();
+ }
+ }
+ }
+ }
+
+ private PushButtonState State
+ {
+ get
+ {
+ return _state;
+ }
+ set
+ {
+ if (!_state.Equals(value))
+ {
+ _state = value;
+ Invalidate();
+ }
+ }
+ }
+
+ public override Size GetPreferredSize(Size proposedSize)
+ {
+ Size preferredSize = base.GetPreferredSize(proposedSize);
+ if (showSplit && !string.IsNullOrEmpty(Text) && TextRenderer.MeasureText(Text, Font).Width + PushButtonWidth > preferredSize.Width)
+ {
+ return preferredSize + new Size(PushButtonWidth + BorderSize * 2, 0);
+ }
+ return preferredSize;
+ }
+
+ protected override bool IsInputKey(Keys keyData)
+ {
+ if (keyData.Equals(Keys.Down) && showSplit)
+ {
+ return true;
+ }
+ else
+ {
+ return base.IsInputKey(keyData);
+ }
+ }
+
+ protected override void OnGotFocus(EventArgs e)
+ {
+ if (!showSplit)
+ {
+ base.OnGotFocus(e);
+ return;
+ }
+
+ if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
+ {
+ State = PushButtonState.Default;
+ }
+ }
+
+ protected override void OnKeyDown(KeyEventArgs kevent)
+ {
+ if (showSplit)
+ {
+ if (kevent.KeyCode.Equals(Keys.Down))
+ {
+ ShowContextMenuStrip();
+ }
+ else if (kevent.KeyCode.Equals(Keys.Space) && kevent.Modifiers == Keys.None)
+ {
+ State = PushButtonState.Pressed;
+ }
+ }
+ base.OnKeyDown(kevent);
+ }
+
+ protected override void OnKeyUp(KeyEventArgs kevent)
+ {
+ if (kevent.KeyCode.Equals(Keys.Space))
+ {
+ if (Control.MouseButtons == MouseButtons.None)
+ {
+ State = PushButtonState.Normal;
+ }
+ }
+ base.OnKeyUp(kevent);
+ }
+
+ protected override void OnLostFocus(EventArgs e)
+ {
+ if (!showSplit)
+ {
+ base.OnLostFocus(e);
+ return;
+ }
+ if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
+ {
+ State = PushButtonState.Normal;
+ }
+ }
+
+ protected override void OnMouseDown(MouseEventArgs e)
+ {
+ if (!showSplit || e.Button == MouseButtons.Right)
+ {
+ base.OnMouseDown(e);
+ return;
+ }
+
+ if (dropDownRectangle.Contains(e.Location))
+ {
+ ShowContextMenuStrip();
+ }
+ else if (UpRectangle.Contains(e.Location))
+ {
+ if (UpArrowMouseDown != null)
+ UpArrowMouseDown(this, e);
+ State = PushButtonState.Pressed;
+ }
+ else if (DownRectangle.Contains(e.Location))
+ {
+ if (DownArrowMouseDown != null)
+ DownArrowMouseDown(this, e);
+ State = PushButtonState.Pressed;
+ }
+ else
+ {
+ State = PushButtonState.Pressed;
+ }
+ }
+
+ protected override void OnMouseEnter(EventArgs e)
+ {
+ if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
+ {
+ State = PushButtonState.Hot;
+ }
+ base.OnMouseEnter(e);
+ }
+
+ protected override void OnMouseLeave(EventArgs e)
+ {
+ if (!showSplit)
+ {
+ base.OnMouseLeave(e);
+ return;
+ }
+ if (UpArrowMouseUp != null) UpArrowMouseUp(this, e);
+ if (DownArrowMouseUp != null) DownArrowMouseUp(this, e);
+ if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled))
+ {
+ if (Focused)
+ {
+ State = PushButtonState.Default;
+ }
+ else
+ {
+ State = PushButtonState.Normal;
+ }
+ }
+ }
+
+ protected override void OnMouseUp(MouseEventArgs mevent)
+ {
+ if (!showSplit || mevent.Button.Equals( MouseButtons.Right))
+ {
+ base.OnMouseUp(mevent);
+ return;
+ }
+
+ if (ContextMenuStrip == null || !ContextMenuStrip.Visible)
+ {
+ SetButtonDrawState();
+ if (Bounds.Contains(Parent.PointToClient(Cursor.Position)) && !dropDownRectangle.Contains(mevent.Location) && !DownRectangle.Contains(mevent.Location) && !UpRectangle.Contains(mevent.Location))
+ {
+ OnClick(mevent);
+ }
+ if (UpRectangle.Contains(mevent.Location) && UpArrowMouseUp != null) UpArrowMouseUp(this, mevent);
+ if (DownRectangle.Contains(mevent.Location) && DownArrowMouseUp != null) DownArrowMouseUp(this, mevent);
+ }
+ }
+
+ protected override void OnPaint(PaintEventArgs pevent)
+ {
+ base.OnPaint(pevent);
+
+ if (!showSplit)
+ {
+ return;
+ }
+
+ Graphics g = pevent.Graphics;
+ Rectangle bounds = this.ClientRectangle;
+
+ // draw the button background as according to the current state.
+ if (State != PushButtonState.Pressed && IsDefault && !Application.RenderWithVisualStyles)
+ {
+ Rectangle backgroundBounds = bounds;
+ backgroundBounds.Inflate(-1, -1);
+ ButtonRenderer.DrawButton(g, backgroundBounds, State);
+
+ // button renderer doesnt draw the black frame when themes are off =(
+ g.DrawRectangle(SystemPens.WindowFrame, 0, 0, bounds.Width - 1, bounds.Height - 1);
+ }
+ else
+ {
+ ButtonRenderer.DrawButton(g, bounds, State);
+ }
+ // calculate the current dropdown rectangle.
+ dropDownRectangle = new Rectangle(bounds.Right - PushButtonWidth - 1, BorderSize, PushButtonWidth, bounds.Height - BorderSize * 2);
+ UpRectangle = new Rectangle(BorderSize, BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth);
+ DownRectangle = new Rectangle(BorderSize, bounds.Height - PushButtonWidth - BorderSize, bounds.Width - BorderSize * 2, PushButtonWidth);
+
+ Rectangle focusRect =
+ new Rectangle(BorderSize,
+ PushButtonWidth,
+ bounds.Width - dropDownRectangle.Width - BorderSize,
+ bounds.Height - (PushButtonWidth * 2));
+
+ bool drawSplitLine = (State == PushButtonState.Hot || State == PushButtonState.Pressed || !Application.RenderWithVisualStyles);
+
+ if (RightToLeft == RightToLeft.Yes)
+ {
+ dropDownRectangle.X = bounds.Left + 1;
+ focusRect.X = dropDownRectangle.Right;
+ if (drawSplitLine)
+ {
+ // draw two lines at the edge of the dropdown button
+ g.DrawLine(SystemPens.ButtonShadow, bounds.Left + PushButtonWidth, BorderSize, bounds.Left + PushButtonWidth, bounds.Bottom - BorderSize);
+ g.DrawLine(SystemPens.ButtonFace, bounds.Left + PushButtonWidth + 1, BorderSize, bounds.Left + PushButtonWidth + 1, bounds.Bottom - BorderSize);
+ }
+ }
+ else
+ {
+ if (drawSplitLine)
+ {
+ // draw two lines at the right edge of the dropdown button
+ g.DrawLine(SystemPens.ButtonShadow, bounds.Right - PushButtonWidth, BorderSize, bounds.Right - PushButtonWidth, bounds.Bottom - BorderSize);
+ g.DrawLine(SystemPens.ButtonFace, bounds.Right - PushButtonWidth - 1, BorderSize, bounds.Right - PushButtonWidth - 1, bounds.Bottom - BorderSize);
+ // draw two lines at the up edge of the dropdown button
+ g.DrawLine(SystemPens.ButtonShadow, BorderSize-1, PushButtonWidth, bounds.Right - PushButtonWidth, PushButtonWidth);
+ g.DrawLine(SystemPens.ButtonFace, BorderSize-1, PushButtonWidth - 1, bounds.Right - PushButtonWidth, PushButtonWidth - 1);
+ // draw two lines at the bottom edge of the dropdown button
+ g.DrawLine(SystemPens.ButtonShadow, BorderSize - 1, bounds.Bottom - PushButtonWidth, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth);
+ g.DrawLine(SystemPens.ButtonFace, BorderSize - 1, bounds.Bottom - PushButtonWidth - 1, bounds.Right - PushButtonWidth, bounds.Bottom - PushButtonWidth - 1);
+ }
+ }
+
+ // Draw an arrow in the correct location
+ PaintArrow(g, dropDownRectangle,false,false);
+ PaintArrow(g, UpRectangle,true,true);
+ PaintArrow(g, DownRectangle,true,false);
+
+ // Figure out how to draw the text
+ TextFormatFlags formatFlags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
+
+
+ // If we dont' use mnemonic, set formatFlag to NoPrefix as this will show ampersand.
+ if (!UseMnemonic)
+ {
+ formatFlags = formatFlags | TextFormatFlags.NoPrefix;
+ }
+ else if (!ShowKeyboardCues)
+ {
+ formatFlags = formatFlags | TextFormatFlags.HidePrefix;
+ }
+
+ if (!string.IsNullOrEmpty(this.Text))
+ {
+ if (Enabled)
+ TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.ControlText, formatFlags);
+ else
+ TextRenderer.DrawText(g, Text, Font, focusRect, SystemColors.GrayText, formatFlags);
+ }
+
+ if (Image != null)
+ {
+ if (Enabled)
+ g.DrawImage(Image, focusRect);
+ else
+ g.DrawImage(MakeGrayscale(Image), focusRect);
+
+ }
+
+ // draw the focus rectangle.
+
+ if (State != PushButtonState.Pressed && Focused)
+ {
+ ControlPaint.DrawFocusRectangle(g, focusRect);
+ }
+ }
+
+ Image MakeGrayscale(Image original)
+ {
+ //create a blank bitmap the same size as original
+ Image newBitmap =
+ new Bitmap(original.Width, original.Height);
+
+ //get a graphics object from the new image
+ Graphics g = Graphics.FromImage(newBitmap);
+
+ //create the grayscale ColorMatrix
+ ColorMatrix colorMatrix = new ColorMatrix(new float[][] {
+ new float[] { .3f, .3f, .3f, 0, 0 },
+ new float[] { .59f, .59f, .59f, 0, 0 },
+ new float[] { .11f, .11f, .11f, 0, 0 },
+ new float[] { 0, 0, 0, 1, 0 },
+ new float[] { 0, 0, 0, 0, 1 } });
+
+ //create some image attributes
+ ImageAttributes attributes = new ImageAttributes();
+
+ //set the color matrix attribute
+ attributes.SetColorMatrix(colorMatrix);
+
+ //draw the original image on the new image
+ //using the grayscale color matrix
+ g.DrawImage(original,
+ new Rectangle(0, 0, original.Width, original.Height),
+ 0, 0, original.Width, original.Height,
+ GraphicsUnit.Pixel, attributes);
+
+ //dispose the Graphics object
+ g.Dispose();
+ return newBitmap;
+ }
+
+ private static void PaintArrow(Graphics g, Rectangle Rect,bool Horiz,bool Up)
+ {
+ Point middle = new Point((Rect.Left + Rect.Width / 2),(Rect.Top + Rect.Height / 2));
+
+ //if the width is odd - favor pushing it over one pixel right.
+ middle.X += (Rect.Width % 2);
+ if (Horiz)
+ middle.X -= PushButtonWidth / 2;
+ Point[] arrow;
+ if (Up)//Up Arrow
+ arrow = new Point[] { new Point(middle.X - 3, middle.Y + 1), new Point(middle.X + 3, middle.Y + 1), new Point(middle.X, middle.Y - 4) };
+ else//Down Arrow
+ arrow = new Point[] { new Point(middle.X - 2, middle.Y - 1), new Point(middle.X + 3, middle.Y - 1), new Point(middle.X, middle.Y + 4) };
+
+ g.FillPolygon(Brushes.Green, arrow);
+ }
+
+ private void ShowContextMenuStrip()
+ {
+ if (skipNextOpen)
+ {
+ // we were called because we're closing the context menu strip
+ // when clicking the dropdown button.
+ skipNextOpen = false;
+ return;
+ }
+ State = PushButtonState.Pressed;
+
+ if (ContextMenuStrip != null)
+ {
+ ContextMenuStrip.Closing += ContextMenuStrip_Closing;
+ ContextMenuStrip.Show(this, new Point(0, Height), ToolStripDropDownDirection.Default);
+ }
+ }
+
+ void ContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e)
+ {
+ ContextMenuStrip cms = sender as ContextMenuStrip;
+ if (cms != null)
+ {
+ cms.Closing -= ContextMenuStrip_Closing;
+ }
+
+ SetButtonDrawState();
+
+ if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
+ {
+ Point pt = this.PointToClient(Cursor.Position);
+ skipNextOpen = (dropDownRectangle.Contains(pt) || UpRectangle.Contains(pt) || DownRectangle.Contains(pt));
+ }
+ }
+
+
+ private void SetButtonDrawState()
+ {
+ if (Bounds.Contains(Parent.PointToClient(Cursor.Position)))
+ State = PushButtonState.Hot;
+ else if (Focused)
+ State = PushButtonState.Default;
+ else
+ State = PushButtonState.Normal;
+ }
+ }
+}
+
diff --git a/app.config b/app.config
index 1e5c552..0a802ab 100644
--- a/app.config
+++ b/app.config
@@ -1,55 +1,55 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+