diff --git a/App.config b/App.config
new file mode 100644
index 0000000..59df92c
--- /dev/null
+++ b/App.config
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Image/steam-token.ico b/Assets/Image/steam-token.ico
new file mode 100644
index 0000000..a5bd0d5
Binary files /dev/null and b/Assets/Image/steam-token.ico differ
diff --git a/Assets/Image/steam-token.png b/Assets/Image/steam-token.png
new file mode 100644
index 0000000..453d678
Binary files /dev/null and b/Assets/Image/steam-token.png differ
diff --git a/Entity/Config.cs b/Entity/Config.cs
new file mode 100644
index 0000000..ef10cdc
--- /dev/null
+++ b/Entity/Config.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace steam_token.Entity
+{
+ public class Config
+ {
+ public SteamGuard SteamGuard { get; set; }
+
+ }
+}
diff --git a/Entity/SteamGuard.cs b/Entity/SteamGuard.cs
new file mode 100644
index 0000000..10eb480
--- /dev/null
+++ b/Entity/SteamGuard.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace steam_token.Entity
+{
+ public class SteamGuard
+ {
+ public string shared_secret { get; set; }
+ public string serial_number { get; set; }
+ public string revocation_code { get; set; }
+ public string uri { get; set; }
+ public string server_time { get; set; }
+ public string account_name { get; set; }
+ public string token_gid { get; set; }
+ public string identity_secret { get; set; }
+ public string secret_1 { get; set; }
+ public string status { get; set; }
+ public string steamguard_scheme { get; set; }
+ public string steamid { get; set; }
+ }
+}
diff --git a/FodyWeavers.xml b/FodyWeavers.xml
new file mode 100644
index 0000000..a5dcf04
--- /dev/null
+++ b/FodyWeavers.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
new file mode 100644
index 0000000..655446b
--- /dev/null
+++ b/MainForm.Designer.cs
@@ -0,0 +1,215 @@
+
+namespace steam_token
+{
+ partial class mainForm
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(mainForm));
+ this.menuStrip = new System.Windows.Forms.MenuStrip();
+ this.SettingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.GuardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.ProgramToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.AboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.progressBar_refresh = new System.Windows.Forms.ProgressBar();
+ this.groupBox_display = new System.Windows.Forms.GroupBox();
+ this.label_guard = new System.Windows.Forms.Label();
+ this.button_recalc = new System.Windows.Forms.Button();
+ this.button_copy = new System.Windows.Forms.Button();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.timer_time = new System.Windows.Forms.Timer(this.components);
+ this.label_datetime = new System.Windows.Forms.Label();
+ this.menuStrip.SuspendLayout();
+ this.groupBox_display.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // menuStrip
+ //
+ this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.SettingToolStripMenuItem,
+ this.AboutToolStripMenuItem});
+ this.menuStrip.Location = new System.Drawing.Point(0, 0);
+ this.menuStrip.Name = "menuStrip";
+ this.menuStrip.Size = new System.Drawing.Size(644, 25);
+ this.menuStrip.TabIndex = 0;
+ this.menuStrip.Text = "menuStrip1";
+ //
+ // SettingToolStripMenuItem
+ //
+ this.SettingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.GuardToolStripMenuItem,
+ this.ProgramToolStripMenuItem});
+ this.SettingToolStripMenuItem.Name = "SettingToolStripMenuItem";
+ this.SettingToolStripMenuItem.Size = new System.Drawing.Size(44, 21);
+ this.SettingToolStripMenuItem.Text = "设置";
+ //
+ // GuardToolStripMenuItem
+ //
+ this.GuardToolStripMenuItem.Name = "GuardToolStripMenuItem";
+ this.GuardToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.GuardToolStripMenuItem.Text = "令牌配置";
+ this.GuardToolStripMenuItem.Click += new System.EventHandler(this.GuardToolStripMenuItem_Click);
+ //
+ // ProgramToolStripMenuItem
+ //
+ this.ProgramToolStripMenuItem.Name = "ProgramToolStripMenuItem";
+ this.ProgramToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.ProgramToolStripMenuItem.Text = "程序设置";
+ this.ProgramToolStripMenuItem.Visible = false;
+ this.ProgramToolStripMenuItem.Click += new System.EventHandler(this.ProgramToolStripMenuItem_Click);
+ //
+ // AboutToolStripMenuItem
+ //
+ this.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem";
+ this.AboutToolStripMenuItem.Size = new System.Drawing.Size(44, 21);
+ this.AboutToolStripMenuItem.Text = "关于";
+ this.AboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItem_Click);
+ //
+ // progressBar_refresh
+ //
+ this.progressBar_refresh.BackColor = System.Drawing.SystemColors.Control;
+ this.progressBar_refresh.ForeColor = System.Drawing.SystemColors.Control;
+ this.progressBar_refresh.Location = new System.Drawing.Point(12, 28);
+ this.progressBar_refresh.Maximum = 30;
+ this.progressBar_refresh.Name = "progressBar_refresh";
+ this.progressBar_refresh.Size = new System.Drawing.Size(620, 23);
+ this.progressBar_refresh.TabIndex = 2;
+ this.progressBar_refresh.Value = 30;
+ //
+ // groupBox_display
+ //
+ this.groupBox_display.Controls.Add(this.label_guard);
+ this.groupBox_display.Location = new System.Drawing.Point(13, 57);
+ this.groupBox_display.Name = "groupBox_display";
+ this.groupBox_display.Size = new System.Drawing.Size(620, 313);
+ this.groupBox_display.TabIndex = 3;
+ this.groupBox_display.TabStop = false;
+ this.groupBox_display.Text = "Steam Guard";
+ //
+ // label_guard
+ //
+ this.label_guard.Font = new System.Drawing.Font("微软雅黑", 72F);
+ this.label_guard.ForeColor = System.Drawing.Color.DodgerBlue;
+ this.label_guard.Location = new System.Drawing.Point(6, 25);
+ this.label_guard.Name = "label_guard";
+ this.label_guard.Size = new System.Drawing.Size(608, 299);
+ this.label_guard.TabIndex = 1;
+ this.label_guard.Text = "令二哈";
+ this.label_guard.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // button_recalc
+ //
+ this.button_recalc.Location = new System.Drawing.Point(428, 384);
+ this.button_recalc.Name = "button_recalc";
+ this.button_recalc.Size = new System.Drawing.Size(99, 30);
+ this.button_recalc.TabIndex = 4;
+ this.button_recalc.Text = "重新计算";
+ this.button_recalc.UseVisualStyleBackColor = true;
+ this.button_recalc.Click += new System.EventHandler(this.button_recalc_Click);
+ //
+ // button_copy
+ //
+ this.button_copy.Location = new System.Drawing.Point(534, 384);
+ this.button_copy.Name = "button_copy";
+ this.button_copy.Size = new System.Drawing.Size(99, 30);
+ this.button_copy.TabIndex = 4;
+ this.button_copy.Text = "复制";
+ this.button_copy.UseVisualStyleBackColor = true;
+ this.button_copy.Click += new System.EventHandler(this.button_copy_Click);
+ //
+ // comboBox1
+ //
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Location = new System.Drawing.Point(199, 385);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(223, 29);
+ this.comboBox1.TabIndex = 5;
+ this.comboBox1.Visible = false;
+ //
+ // timer_time
+ //
+ this.timer_time.Tick += new System.EventHandler(this.timer_time_Tick);
+ //
+ // label_datetime
+ //
+ this.label_datetime.AutoSize = true;
+ this.label_datetime.Location = new System.Drawing.Point(12, 389);
+ this.label_datetime.Name = "label_datetime";
+ this.label_datetime.Size = new System.Drawing.Size(105, 21);
+ this.label_datetime.TabIndex = 6;
+ this.label_datetime.Text = " ";
+ //
+ // mainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(644, 425);
+ this.Controls.Add(this.label_datetime);
+ this.Controls.Add(this.comboBox1);
+ this.Controls.Add(this.button_copy);
+ this.Controls.Add(this.button_recalc);
+ this.Controls.Add(this.groupBox_display);
+ this.Controls.Add(this.progressBar_refresh);
+ this.Controls.Add(this.menuStrip);
+ this.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MainMenuStrip = this.menuStrip;
+ this.Margin = new System.Windows.Forms.Padding(5);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "mainForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Steam令牌计算器";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.mainForm_FormClosed);
+ this.menuStrip.ResumeLayout(false);
+ this.menuStrip.PerformLayout();
+ this.groupBox_display.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.MenuStrip menuStrip;
+ private System.Windows.Forms.ToolStripMenuItem SettingToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem AboutToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem GuardToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem ProgramToolStripMenuItem;
+ private System.Windows.Forms.ProgressBar progressBar_refresh;
+ private System.Windows.Forms.GroupBox groupBox_display;
+ private System.Windows.Forms.Button button_recalc;
+ private System.Windows.Forms.Button button_copy;
+ private System.Windows.Forms.ComboBox comboBox1;
+ private System.Windows.Forms.Label label_guard;
+ private System.Windows.Forms.Timer timer_time;
+ private System.Windows.Forms.Label label_datetime;
+ }
+}
+
diff --git a/MainForm.cs b/MainForm.cs
new file mode 100644
index 0000000..79eadf6
--- /dev/null
+++ b/MainForm.cs
@@ -0,0 +1,93 @@
+using steam_token.Entity;
+using steam_token.UI;
+using steam_token.UI.Set;
+using steam_token.Util;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Util;
+
+namespace steam_token
+{
+ public partial class mainForm : Form
+ {
+ public mainForm()
+ {
+ InitializeComponent();
+
+ this.timer_time.Start();
+
+ // 先计算一次
+ this.label_guard.Text = CalcOnce();
+
+ // 新开一个线程去初始化数据
+ SteamGuardCalcThread.StartThread(this.label_guard, this.progressBar_refresh);
+ }
+
+ ///
+ /// 打开令牌配置页面
+ ///
+ ///
+ ///
+ private void GuardToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ GuardConfig guard = new GuardConfig();
+ guard.ShowDialog(this);
+ }
+
+ ///
+ /// 打开程序设置页面
+ ///
+ ///
+ ///
+
+ private void ProgramToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ ProgramConfig program = new ProgramConfig();
+ program.ShowDialog(this);
+ }
+
+ private void button_recalc_Click(object sender, EventArgs e)
+ {
+ this.label_guard.Text = CalcOnce();
+
+ SteamGuardCalcThread.StartThread(this.label_guard, this.progressBar_refresh);
+ }
+
+ private string CalcOnce()
+ {
+ Config config = ConfigUtil.Read();
+ string guard = SteamTwoFactorToken.GenerateSteamGuardCode(config.SteamGuard.shared_secret);
+ Console.WriteLine("guard = " + guard);
+ return guard;
+ }
+
+ private void button_copy_Click(object sender, EventArgs e)
+ {
+ Clipboard.SetDataObject(this.label_guard.Text);
+ }
+
+ private void timer_time_Tick(object sender, EventArgs e)
+ {
+ this.label_datetime.Text = DateTime.Now.ToString();
+ }
+
+ private void mainForm_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ Environment.Exit(0);
+ }
+
+ private void AboutToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ AboutForm about = new AboutForm();
+ about.ShowDialog(this);
+ }
+ }
+}
diff --git a/MainForm.resx b/MainForm.resx
new file mode 100644
index 0000000..a2dba95
--- /dev/null
+++ b/MainForm.resx
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 130, 17
+
+
+ True
+
+
+
+
+ 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
+
+
+
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..e01e7ae
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Util;
+
+namespace steam_token
+{
+ static class Program
+ {
+ ///
+ /// 应用程序的主入口点。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Control.CheckForIllegalCrossThreadCalls = false;
+ ConfigUtil.Init(new steam_token.Entity.Config());
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new mainForm());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..4ff727f
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("steam-token")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("steam-token")]
+[assembly: AssemblyCopyright("Copyright © 2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("26555785-e311-4f28-a28d-dd96b3165b98")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..0f94583
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,91 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace steam_token.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [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("steam_token.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 查找类似 SteamGuard 的本地化字符串。
+ ///
+ internal static string CONFIG_FOLDER {
+ get {
+ return ResourceManager.GetString("CONFIG_FOLDER", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 config.json 的本地化字符串。
+ ///
+ internal static string CONFIG_NAME {
+ get {
+ return ResourceManager.GetString("CONFIG_NAME", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap steam_token {
+ get {
+ object obj = ResourceManager.GetObject("steam_token", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..0c2ea96
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ SteamGuard
+
+
+ config.json
+ 配置文件
+
+
+
+ ..\Assets\Image\steam-token.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..96f4a25
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+namespace steam_token.Properties
+{
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/UI/AboutForm.Designer.cs b/UI/AboutForm.Designer.cs
new file mode 100644
index 0000000..c945380
--- /dev/null
+++ b/UI/AboutForm.Designer.cs
@@ -0,0 +1,136 @@
+
+namespace steam_token.UI
+{
+ partial class AboutForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm));
+ this.label1 = new System.Windows.Forms.Label();
+ this.linkLabel_openurl = new System.Windows.Forms.LinkLabel();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.pictureBox1 = new System.Windows.Forms.PictureBox();
+ this.button_about_confirm = new System.Windows.Forms.Button();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(105, 30);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(286, 21);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Steam令牌计算器 v1.0 @niushuai233";
+ //
+ // linkLabel_openurl
+ //
+ this.linkLabel_openurl.AutoSize = true;
+ this.linkLabel_openurl.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
+ this.linkLabel_openurl.Location = new System.Drawing.Point(105, 115);
+ this.linkLabel_openurl.Name = "linkLabel_openurl";
+ this.linkLabel_openurl.Size = new System.Drawing.Size(390, 21);
+ this.linkLabel_openurl.TabIndex = 1;
+ this.linkLabel_openurl.TabStop = true;
+ this.linkLabel_openurl.Text = "https://github.com/niushuai233/steam-token-win";
+ this.linkLabel_openurl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_openurl_LinkClicked);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(21, 115);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(78, 21);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "开源地址:";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(105, 70);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(72, 21);
+ this.label3.TabIndex = 3;
+ this.label3.Text = "欢迎Star";
+ //
+ // pictureBox1
+ //
+ this.pictureBox1.InitialImage = global::steam_token.Properties.Resources.steam_token;
+ this.pictureBox1.Location = new System.Drawing.Point(24, 20);
+ this.pictureBox1.Name = "pictureBox1";
+ this.pictureBox1.Size = new System.Drawing.Size(75, 75);
+ this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.pictureBox1.TabIndex = 4;
+ this.pictureBox1.TabStop = false;
+ //
+ // button_about_confirm
+ //
+ this.button_about_confirm.Location = new System.Drawing.Point(394, 156);
+ this.button_about_confirm.Name = "button_about_confirm";
+ this.button_about_confirm.Size = new System.Drawing.Size(90, 32);
+ this.button_about_confirm.TabIndex = 5;
+ this.button_about_confirm.Text = "关闭";
+ this.button_about_confirm.UseVisualStyleBackColor = true;
+ this.button_about_confirm.Click += new System.EventHandler(this.button_about_confirm_Click);
+ //
+ // AboutForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(496, 200);
+ this.Controls.Add(this.button_about_confirm);
+ this.Controls.Add(this.pictureBox1);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.linkLabel_openurl);
+ this.Controls.Add(this.label1);
+ this.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Margin = new System.Windows.Forms.Padding(5);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AboutForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "关于";
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.LinkLabel linkLabel_openurl;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.PictureBox pictureBox1;
+ private System.Windows.Forms.Button button_about_confirm;
+ }
+}
\ No newline at end of file
diff --git a/UI/AboutForm.cs b/UI/AboutForm.cs
new file mode 100644
index 0000000..a302b05
--- /dev/null
+++ b/UI/AboutForm.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace steam_token.UI
+{
+ public partial class AboutForm : Form
+ {
+ public AboutForm()
+ {
+ InitializeComponent();
+ // 初始化图片
+ this.pictureBox1.Image = Properties.Resources.steam_token;
+ }
+
+ private void button_about_confirm_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+
+ private void linkLabel_openurl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ System.Diagnostics.Process.Start(this.linkLabel_openurl.Text);
+ }
+ }
+}
diff --git a/UI/AboutForm.resx b/UI/AboutForm.resx
new file mode 100644
index 0000000..ed11fcd
--- /dev/null
+++ b/UI/AboutForm.resx
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ True
+
+
+
+
+ AAABAAEAAAAAAAEAIABLNQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAlw
+ SFlzAAAOwwAADsMBx2+oZAAAIABJREFUeJztnXmcFNW1x3/n9mwsgxiYQRQFEcGZutWgE6O4EhcURY0+
+ jTtGY4waYyIaE32aaFwSkri8aPQpmqhxiyaKiktMQFwiGDMiXbcaVDSiIo8GF3ZmprvO+2N6yDDMdFd3
+ VXX1cr+fT3+0um+d++tm6txzt3MBjUaj0Wg0Go1Go9FoNJUAhS1A441JkyZVrVq1aqwQYqzjOGMBbE9E
+ AwAMANAfwAAiGsDM/bu/l36/PzNvZuY1RLQGwJYXEa1h5jVdnzHzGiHEGmZeE4lE3lu0aNHykL6yxke0
+ AygRmpqaRkYikbHMPJaIxhLRWGYeC2B0SJI2AXgPwFIiWuo4zntEtFQ7h9JCO4AiZI899hhbVVV1ABEd
+ xMx7ARgLoDZsXTmwlXMA8HokEnn57bff/jJkXZoeaAdQBEgpv8rMXxNCHMDMBwHYKWxNAfEvAC8BeKW6
+ uvqNhQsXrgpbUKWjHUCBGTduXH1tbe3XmHlvZv4agAMANIStKyTmE9GrzLwglUotWLx48YqwBVUa2gEU
+ gIkTJ/Zbv379VABHM/NUAEPC1lSkvM7MC4QQz1uW9fewxVQC2gEEiGmaR6Uf+KkAdg5bT4nRysyzIpHI
+ rFgspsIWU65oB+AzUspJ6HzgpwIYF66asuFZZn6qpqZmlh438BftAHwgPYh3rBBiKjPvGbaeMuYzAE8x
+ 8yzbtp8JW0w5oB2ABwzDOFIIMY2ZTw1bSwUSBzCLiJ6wLKs1bDGlinYAeSClPAPANACHh61FAwC4Vwhx
+ TywWWxC2kFJDOwCXmKa5PTNPQ+eDv1fYejS98oDjOPfE4/FXwxZSKmgHkIWmpqbdq6qqpqUf/l3C1qPJ
+ DhE94jjOPbZtzw1bS7GjHUAfGIbRTETfR2eL3z9sPZq8eBzAPUqpF8MWUqxoB9CD5ubmgZFIZDozTwew
+ Xdh6NL4wC52O4NmwhRQb2gF0wzTNs5n5EgBm2Fo0/kNEjzDzL5VSsbC1FAvaAQCIRqOHOo4zHcBRYWvR
+ BM46ADOGDh06Y968ecmwxYRNRTuApqam3SORyHQA54etRVNwFhDRDMuyZoUtJEwq0gGMGTOmtq6ubjqA
+ 6QCGhq1HEyr3plKpGYsXL34vbCFhEAlbQKGRUh5dVVX1IIAzoEf3NcBeQohvDhs2LJVIJCpuIVFFRQCm
+ aV7HzFeFrUNTnBDRXGaeUUnThhXhAJqbm/cRQlwP4LCwtWhKgpuUUpcDcMIWEjRl7wCklD8AcAM6M+Fq
+ NK4gorkALi/3jUZl6wBM0xzNzDcAOCVsLZqS5Qtm/rFt2zPDFhIUZekATNM83XGc64loVNhaNGXBnY7j
+ XB6Px9eHLcRvymoWYOLEif222267WwD8kogGh61HUzbsTUSH7LDDDu+uXLnyo7DF+EnZOAApZbS9vf1B
+ Ivpm2Fo0ZckIZj6tsbFxbSKReCNsMX5RFg5ASnkCgAcBRMPWoilrqgBMaWhoGDV8+PD5K1eu3BC2IK+U
+ vAMwDONyIpoJYFDYWjSVARFNYObJw4YNW5RIJD4JW48XStoBSClnEtGPw9ahqUh2AHBcY2Pj+4lEYnHY
+ YvKlZB2AlPIlACeErUNT0fQHcHJDQ8OqVatWvRm2mHwoOQfQ0tLSf8iQIf+G7u9rigQiOnrYsGFViUTi
+ pbC15EpJOYDm5uY9Hcf5CLq/ryk+DmpsbNw5kUg8HbaQXCiZhUDNzc17CiHeCluHRpOF55RSR4ctwi0l
+ 4QDSy3rfD1uHRuOSt5RSLWGLcEPROwAp5c4Aymr1laYiWKGU2jFsEdkoagcgpRwGYCmAgWFr0WjyQSlV
+ 1M+YCFtAXxiG8RUAr0E//JoSRkr5YdgaMlGUDmDcuHH1QohZAMaErUWj8chIKeXLYYvoi6JzAKNGjaqr
+ rq5+hJkPDFuLRuMTB0kpHwhbRG8U2zqAyIgRI/4E4NiwhWg0PjO+GBcLFZUDMAxDb+fVlDMHDRs2bHMi
+ kfhH2EK6KBoHIKW8kYguDFuHRhMwhzU2Nn6eSCT+GbYQoEgcgGma3wUwI2wdGk2BmNLY2PhJIpFYGLaQ
+ 0B2AYRhHEtFDKMIBSY0mQI5taGh4d9WqVSpMEaEuUpBSNgF4FsCuYerQhM5yZl4CYAkRLSeitY7jrCOi
+ dUKItcxcy8z1zDxICFHPzIMA7NHtVRuq+vxZ5zjOYfF4PLTuQFVYFbe0tPRva2u7A/rhrzTaAMwhojmp
+ VOq1VCq1+J133lnnxWB6r8h4Zj6UiA5Fp1MoBeojkcgv0HlgDYchILQIwDTN+5j5rLDq1xQOZv4QwOxI
+ JPK3tra2l7w+8NmQUkYBfB2dx71PDrIuP2DmGbZt/ySMukNxAIZhXEtEPw2jbk3B+IyZnwEwm5mficfj
+ 7WGIME3TZOapAI4BMDEMDW5g5hNt2/5LoestuAOQUp4D4N5C16spDET0KTPPTKVSdy1evHhF2Hq6I6Wc
+ CuA8dDqDYuO99HhAQXe+FtQBSCm/CmAOdEafsqOYH/yeFKsjYOaHbds+vZB1FnQasLGx8Q8AmgtZpyZw
+ UgBuEUKca1nW06tXry7647MSicS7iUTikYaGBpuIdgKwS9iaAICIzIaGhjWrVq1aULA6C1WR7veXH8z8
+ MIBbbdsuyYy4XUgpvw/ghwBGh60FwGZmPsy27YIsFy6IAzBNcwozP1eIujQF4WMAP1RKPRG2EL+IRqON
+ zHw9M38nbC3M/CozH1aIgdPAuwCmaW7PzPcBGB50XZqC8DdmPsO27VfCFuInK1eu3JBIJJ4ZNmzYOgBH
+ hKmFiEYCGLBq1aoXg64r8OW3zHw9gL2CrkcTPMx8e1NT0xTbtuNhawkKy7JuBjAVnanoQoOIpkspA1/D
+ EGgXQEp5JoCiTISgyZlrlVLXhC2iUBiG0SyEeIyZjbA0ENFcy7IODbKOwLoATU1Nuwsh7gewXVB1aApG
+ RT38ALBq1apVO+6448PMfAyAxpBk7Dps2LC1iUQisFmBwCIAKeVjAE4Kyr6mMBDR6ZZlPRy2jjCRUi4E
+ MCGk6lemUqkDFy9e/F4QxgMZA5BSXgD98Jc8RLRfpT/8AKCU2hPA7JCqHxaJRAI7Adv3LkBLS8t2qVRq
+ JoChftvWFA7HcQ60bfv1sHUUC4lE4pHGxsbRAMaHUP1ew4YNW5RIJJb4bdj3LoBpmlcz88/9tqspHER0
+ tGVZBVu3EY1G93Ic51giGsrMQ4moIf3foczcAGAjgFUAVnf772pmXgjgr7Ztf14orVLK+wFMK1R93Vgw
+ dOjQA+fNm5f006ivDkBKuRuABdCtf8niOM7Z8Xj8viDrSC+6OZiZv47O9fgjvNgjojnM/ILjOK8UIrmG
+ lPIlAJOCrqcXrlJK3eCnQb8dwP8AuNhPm5rCwcz32bZ9dlD2pZSTiOgSZj4SQE1A1Swhovs3bdp0y9Kl
+ S9uCqEBKOQlAGOm91wE4QCkV88ugb2MAzc3N+xDRTL/saQoLM3+YSqXOXr169Zd+25ZS7tbY2Hg9gN8B
+ GIdgV6AOBXBYVVXVUY2NjRsTiYRvD0sXiUTiw8bGRkLho4BaIhqcSCR8yxvgWwRgGMZDRHSaX/Y0hSWI
+ 0H/MmDG1/fr1u4SZpwNo8NO2W4joaWa+RSk1z2/bIXYFpiqlnvXDkC/TgFLKo/XDX7ow831+P/yGYRxS
+ V1f3OjP/AiE9/ADAzMcCeElK+asAzF8bgE03nOuXIb/WAeh+f4mSDv19/UM2DON7RPQCimsPyI+klE/7
+ aTAdVYThBL7h1z4Bz10AwzDOIqL7fNCiCQG/Q3/TNG9m5ks8mFiHzjThy4loefr/BxHRjgB26vbKl6VC
+ iP1jsVjCg42tCKkr8LhSyvMxep4dgJTynwD29mpHU3j8HvWXUv4ZwH/leh8R2cz8Z2Z+zO1OQynl8QC+
+ AeB4APW51glgb6XUv/K4rzctkxDCrAAzH2rb9lwvNjw5ACnlCQAKnslU4w+O4+wbj8ff8MNW+vjrM3O5
+ h5nvjkQij8VisTn51jtu3Lj6qqqqqUR0KnLM8ec4zvB4PP5/+dbdHcMw7iKi8/yw5RYiesSyLE9jb14d
+ QF4eX1MUPKSUOsMPQ6ZpnsTMj7ktz8x3CyHutiyr1Y/6u8gj2edKpdQOftRtmmYLM/sSUeSC4zgHxePx
+ V/O9P+/52HSG31vyvV8TLkKI6StXrvy3VzumaU5k5hdcFv8TEX1LKXV3IpHwPXNwV7LPxsbGVgAGgGwP
+ 98DGxsYRiUTiGR/qXtHQ0LAjEbV4tZULRBRJJBKz8r0/71kAPe1XujDzU17C7i6i0egIZn7EZfF7lFKn
+ +N3q94ZSanYqlZoCwE1izXMNw7jcj3qFEHf7YSdHpkWj0X3zvTkvB5Bey60dQOnyJz+MOI5zJ4CRLore
+ qJQqaLLNxYsXr1BKHZCejswIEc0wDMPz37NlWa3M/LxXO7niOE7e6wLycgCpVOo0AMPyrVQTHkT0aTKZ
+ 9Ly33TTNS9CZOy8jzHykUuq/vdaXL5ZlTYGLuXohxJVjxozxfGANERXcAQD4tmmaeXU98nIAOvwvXRzH
+ me31cM506D89WzkiOt627b96qcsP0unMHs1UhpmNurq6rN8pG2FEAADgOM6J+dyXswNIT/3pef8ShYg8
+ D3ilUqnpyLKFl4gutSwr78Epv1FKnUpEC7MUu8QwDE8nV9m2vTQMJ0BExyOPWb18IgDd+pcuHymlPIX/
+ pmlOJKKMK/2IaGY6vXZRkUqlzkdncpG+GEREnqMAAH/zwUaujEsvjsqJnBxAeupPz/uXKETk+bipbMt8
+ 02MMP/NaTxCkk4Vcn6XYtw3D8HQwCBHlPS/vkWAdQDpFsqZEYWZPf5jpBiBjsldmnlnMpwPX19ffCmBR
+ pjJE5OmE3vQS4zAOFjm+ubk5p4NOc3IARHRUbno0xYTjOF73kGfcgUZEn6ZSqbs81hEo8+fP30REt2Yp
+ Nhnek5aEcXTaACFETlGAawdgGMb+AL6asyRNsWDF4/GPPNrI6ACKvfXvwrKs+7KsDxhmGIbXxs6XhB15
+ EIwDIKKjc9eiKSI8pZRubm7eAcDBmcow84Ne6igwGRdDeY12mdn3FN4uOVhKuZ/bwrl0AXT4X8Iw8yde
+ 7hdCZPz3Z+bnbdsO9UDNXCCiv2cp4mkgsK2tzdPv7RHXUYArB5De7xzGgQganxBCfOzRRMYIkIh8zbYT
+ NLFY7BNk3iuwq2maZr72ly5duhbA2nzv98jxzc3NrrIuu40AdPhf+nhtkZoyfbh+/fr7PNovONl2MTKz
+ p0VBROTV6ebLbm4HA906AB3+lzipVMrr4FymTT8vfvjhh5s92i84QohsOyJzmlLrieM4viQbyZPD3RTK
+ 6gCklIcD8OQJNeFDRHmv/29paRkKoH+GIsvztR0mqVQqo24icrPTMdP9YXUBAMDVQKCbCECH/2WAECJv
+ B9De3p7xQUgn7yw5DMPIqJuZPUUA6ExwGhZN0WhUZivkxgHo8L8MaGtry7s1YuaMDoCZS9IBPP744ykA
+ KzMU8RQBMHOYDgDMvH+2MhkdQHqP8e6+KdKEhuM4ef8xZmsJS9UBpMmkvZS7AGDmrN2AbBFAQfObaYIj
+ qIMyNUWNNwfgOI52AGUAM1/t5X4iyriEmIi8HNQRNpm0L/NimJnzOa/AT8ZEo9FxmQpkdACFznCqCYTn
+ bNvOtgU2I0SU8UEoVQdw0kknRZA5tZ0nBwBgoMf7PcPMB2X6vE8HMGHChMHQXYBS50shhKfWHwBqamoy
+ PgjMXJIOwLbtjLqzRT7ZIKKwIwAwc8b9G306gI6Ojn38l6MpJER0dSwWe8urndbW1tXInEmnJB1AJBLJ
+ qJuZvUYAoTsAAAdk+rBPByCE+Jr/WjSFIn1s1O0+msz0MEweM2ZMrY91FQRmzvhwAPC6fXpHj/f7wUjT
+ NEf39WGfDoCZdeLP0mWZ14G/Xsh4aGddXd03fK4vcJg5444/IYTtsYqM+ycKSJ/jAH06AD0AWNJcpZR6
+ 30+DzJxtt19J5Ypsbm7egYgOzVDk37FYTOVrv6mpaXd4zyrkC8y8V1+f9eoAotHorsxcDOGLJnfuVEr5
+ npijqqoq28aZkzKFmsWGECLbZhlP25uFEHt4ud9PmHlMX5/16gAcx9H9/9JkUW1t7RWBGF60aHm2pKLM
+ nPcRVYXGxeE22RKGZLNfNA6AiPpczdurA2DmPYOTowkKZr66tbV1TVD2hRDZ8t3/0DCMok8cY5rmt5j5
+ yAxFNnR0dLzssZpi6kLnFgEQ0a7BadEEATP/0rZtz6f+ZCFbptt+AH4YsAZPTJw4sR8zZ9P4otfj01Bk
+ p2cZhtGrE+hrEFA7gNLiFdu2Awn9u2NZ1ssA5mcqQ0TfMgwjU+saKuvWrfshsqS383q0V3ospKjGQ4QQ
+ vXYD+nIARSVek5EkM19ZqMqI6BYXZa6PRqMDCqEnF6SUkwFck6XY67Ztz/RSTzFOofc1ELiNAxg1alQd
+ gCGBK9L4AhFdZdu25yO/3GJZ1uMAHs9SrMVxnEcKoScXmPkuABmTZRLRHT5UlXH9fUi4iwAGDBigW/8S
+ gYietixrRgj1Zo0CABwjpfxV4GJcIqV8nYhGZSrDzHMsy3rISz1NTU3DAZzsxUYQuI4AiEg7gNJgNYAf
+ h1GxZVnzmdmNE/iRYRiHBC4oC1LKawBMzFbOj9ZfCHEyijCC7msqsLcxAO0ASoOrLcsK6/QZRCKRm+Hi
+ AEwimmOaZsYDRYNESvlbAG5OK/6LUuoJr/URUdG1/mlczwJoB1D8PKCU+t8wBaQP1sh4VHgXzPyYYRhX
+ BSxpKyZMmDDYNM2HAHzfRfE3hRBnea1TSjkVwL5e7QRFb1OB2gGUHkvb29svDVsEACilZgO43E1ZIrpO
+ SvnHdJ7JQJFSTk0mk88zc7bVfgCwMpVKHReLxTb4UPXZPtgIjEgksk2OQz0GUGIIIa549913V4etowul
+ 1K8B3Omy+BnM/C/DMO4KwhFIKadKKZ8G8AxctsRENMmPE43Tx+ed4NVOkDiOs13P96p6KacdQPFyWywW
+ +3PYInqilLpQSrkLXJ4hQUTnMfN5hmHcLYSYZVlW3gtvWlpatmtrazsWwEkAjsnlXsdx9o3H436NoxR1
+ 6w8ARLSNA6Ceb5imaTLzZQCmFUSVxi2tSqmvhi0iE1LKOwGcn8etS4lodiqVuj8ej7/t5gbTNE9j5hPR
+ eQRWzrn3iKjJr0FUKeVXAbzph60gYeZLbNu+tft72ziA7hiG8UMiuhTAiECVadzwdaXUvLBFZENKeSaA
+ BzyYWAdgOTMvT584tJyZBxHRjuhMPdb1ypcFtbW1R/q5aUpK+SSAUkiIcq1S6prub2R0AF2YpnlwOiqY
+ GoQqTWaY+ee2bbuZyioKTNM8ipn/AqAubC09uEsplU+E0ifpRtLNmojQIaJbLMua3v09V6cDW5b1slLq
+ mKqqqu2Z+TpkThCp8RFmnlNKDz8AWJb1nOM4BwPwnJDUR27w++Fvbm6eQEQl82/DzNuMAbg9HhwA8Pbb
+ b39p2/ZPlVID0Dni+bpf4jS9skkI4WquvdiIx+P/3Lx5835EdAWAVWHpIKKn0dl98n0dghDiZwAG+203
+ QLIPAuZKeuvjdGb+nldbmm24WCl1W9givCKl3A3AdAAXFrDatwDcEkR6NAAwDOMqIrouCNsB8nel1Fap
+ 0Dw7gO5IKb8N4DIARZMOqYR5QilVUok2syGlnERElzDzFADVQdTBzO8KIf6wadOmW4I6D1FKeTSA2UHY
+ Dpg3lVJbpfvz1QF0IaX8KhFNZ+ZTg7BfAaxIpVItfixQKUaampqGV1VVHcHMhwE4FMAOHk2+zsxzIpHI
+ 32KxWMa8hV5pamoaHolEXgQgg6wnCIjoXcuytjorMBAH0MWIESP6DR48+CJ0RgWNQdZVTjDzabZtF91+
+ +qCIRqP7Oo5zJIBdiGhk+jjykegRJTDz6vQ5hcuI6CNmbq2trX0hfXJRQZBSPobORUelyEql1FbONlAH
+ 0J10NpbpADIexlDpMPPdtm1/N2wdxUBTU9Pw6urqkY7jrKmtrV3W2toa6uxTiT/8ALBZKdWv+xsFcwBd
+ jB8/fqdkMnkREV2G3pciVzJLamtro62trR1hC9FsTRk8/EAxOIDuGIZxChFNR5FlUA2RyUqpbKm3NQUm
+ nVCkZOb7M7BNFyCndQB+Y9v2o0qprxFRlJnvDlNLEfAL/fAXHzkkFCl6iGib5c+hRgC9QIZhXEhElwDY
+ LWwxBWS+Umq/sEVo/sOECRMGp1Kp37nMKVAqbDMNGGoE0Ats2/bvlFJjiGgSERXd1tcgEEJcFLYGzX8w
+ DGP/HBKKlBLbRADF5gC2YFnWy5ZlnZRMJocS0U8BfBG2piAgoktjsVgxrZmvaKSU3yeiv6GIU3t5oOi7
+ ABmRUh5PRBcxc+iZZn3iGaXUsWGL0ADRaLQxlUrNIKJvha0lQH6vlPp29zeKNgLoDaXUk5ZlHZpKpcYS
+ 0a3Z7yhq1jmOo0P/IkBKeabjOC+W+cPf6yBgSc7DL168+D10ZqS9JL3/4CIAE8JVlRvMfFE8Hv8obB2V
+ jGmah6UPCnWVyqzUYea1Pd8rSQfQHaXUvQDujUaj+ziOcyFKI5XZH2zb9pI1R+MB0zRbmPl8Zj43bC2F
+ hJm/7PleyTuALmKx2BsA3ohGoxemHcFFAHYJWdY2MPOHdXV1OvQPAdM0WxzHOY+ZzwtbSxgIIUp7EDBX
+ TNOcwswXovCpzD4DYKEzc9IGZt4AYD2ADUKIVyzLeq7Aeioa0zSnOI7zDSKqyAe/G//V8/SjsnYAXUgp
+ d2bmC4noIuSRQTYLHwCYT0QWMyvHcSzdtw+ftPOfAmAK+jgWq9IQQhwWi8XmdH+vIhxAd0zTPD0dFXhZ
+ ebcGwNPM/FRdXd3TevNOuKTPBjgAwP7MPIGI9oT3HANlBzPvbtv2Vuc5VpwD6CKd0PGCHMPC54jo6WQy
+ +XS5JusoJgzDGE9E2/fy0R7pV1P6v0U31lOMKKW2ed4r1gF0MWnSpKrVq1dfgM58dX2lMlvEzDfrkfvC
+ YRjGd4joRgBDvdhhZmzqNwQb95+G5M5RpOrqARIgEmB2tpTzeu3JBjuIbF6Hqo9j6P+P+9Fv0+cg8v3R
+ XKqU2uaI8Ip3AN0xDOMQIcQF6RNnAOBLANcrpW4KU1clMXbs2KG1tbU3MvN3vNpKUgRf7nsW2qNHApFq
+ Xx94Xx1At2ukOlATewGDF9yPKk7l+9W3gZmft237qJ7vawfQC9FotNFxnAt7nqKiCZb0gSI3Ahjv1Va7
+ Q/jyhBuR3HEcSu/PnFH16TsY/MSVqBHsl9HblFIX93wz4pf1cmLlypUbEonEvLB1VBLppBt3w4fBu5TD
+ +HzqVUiO6MrbySCidGvLgVz7axNw6oegfdju6PfOyxD+dAceSiQS/+z5ZtksBNKUJumBvhsBbBOe5sva
+ 0fshNaplm3afQICTBNIP2bafe7vO2wYJQHQ+ikT/2Z6TGtWCtaP3w/Yfzu+lptwgoqW9va8dgM9IKaPM
+ fCiA0UQ0HMCOzDw8fbjlWgDLASwnouXMvNxxnKfcnohbbvg10NcdhxntB3We1N3VmhIDte++ito3HkZk
+ Q3HuKk8N2B5t+5yGtrEHgtNegkig/aCz4fz7dc9RgOM47/X2fql1joqOiRMn9lu7du1JRHQSOjMe53Pg
+ xQfpI6xejkQi895+++1t1myXEy0tLdu1t7f/2o+Bvp5sGtCIL866a6v3+s+7G9vZz8P/gXV/YQbWGFOw
+ cdLWM9Pb3/9d9NuQ8GS7tylAQI8BeOaTTz5J7rTTTstSqVQVEQ1AfqnMtkdnAopTHMc5o7GxMTJ06NB/
+ rVq1yr9h4CLBNM2jksnkg/Ax5O/OxlF7o33017b0p6s/W4btX7odIoeHv616ANprBqKjqp/nl0MRVDnu
+ 1okRATWJpdg8el+k+g3a8h0iq/6Nus8/zO8H6WRpIpHo9Yg53QXwgXSLPRPATMMwvk5E30RnCukheZgb
+ AeDXQohTDcP4n3JaeyClvIaZA02wmaqr39KPJhKotl7M7eGnanx2zn1AxKdHw0liyF2noZbdOQFBQLX1
+ IpJf74wCiETn2gUPMHOv4T9QYglBSgHbtl9SSl0ghJgA4DIieiNPU3sR0f2maT4vpSzphKGGYTRLKZ9F
+ AbLrOlX9tvT9mR1ENm+zBT47qY4t93e9sl33VQapZM7VRzav3cqeU9Uvyx2Z6WsAENARQGDEYrFPANwE
+ 4CbDMI4FcHJ6nCCnMQJmPhLAAVLKHyml/jcAqYESxEBfJjhSvVUEwIkPcrq/hjvwlT98G1w3yBc9tHkt
+ aly2/l1w4oOtv4PHaISZW/v6TDuAAmDb9tMAnjZN8zpmPhnAyehcx+6WgQDulFLuoZT6YSAifaalpaV/
+ e3v7rUEM9GWC0dlqbllll2zP6X4CUJfaBGzYFIg+VyTbt/oO7HGsnplf6usz3QUoIJZlLVFKXdvU1GQS
+ 0enpkf9c+IGUMtd7Co6UcnJbW9vrhX74u+jeeiYHDsHmFErqlRw4ZKvv4JH3M21PL/KJkfLHMIy9iehi
+ AGfkcFuvyzqLgbCP0Up89XR07H2C72v9C7UXoLfr6jefQOO/HnL/I2zNPUqpPh2xjgBCxrbtN5VSZzLz
+ cQDmubzt+4ZhnBqgrJzZY489xhZqoC8b3VvPrlfQ10HW4e23oD7Df0A7gKLBtu2nlVJfJ6Ir3JQnooeb
+ m5sPDVqXG0zTPLuqquofCGhuP1fcjNr7fR1kHd5+C844C6UdQJFhWdYvARyDXk5x6YkQYmY0GpXZygVF
+ c3NzjWmadzPz71GgUX436AhgC4uVUu9nKqBnAYoQpdRsAIOllP9A5tRluzqOcwmAb2coEwjpBU+3MLPn
+ rbt+030EnTo2g5JtnRtuuremfl/7aJOrasHVdb2OM+TIy9kKZHUApmkebFlWVkMa/1FK7S+lXIdR8PXL
+ AAAU8UlEQVTMiUzPiUaj98VisVcLpcswjKuI6LpC1Zcr3VvP/o9ejvq1H4esKDfWDdoZG6fdDsBbBMDM
+ C7KVyeoAmPkA0zQvAvBsVVXVswsXLlyVtyJNPhwDIONATvochMAdQDQa3dVxnNtRJH39vugZAUREafV0
+ qWPz1msZ8iQSiWR1AFl/mUgkch8zn8jMf+jo6HjBMIyfNzc375O3Kk1OKKXmAbg2S7FTDMM4MkgdUsoz
+ HMf5J4r84QfgV/85VHz4DioWi72TrVBW64sWLVrOzO+mL/cioquFEC9IKR80DOOUfNVp3JNMJm8DkHEw
+ h4guDKh6klLeCeCPKKKBvkz4NYIeJj58h6ytP+ByFkAI8dsebw0GcDoRPSKl/IeU8kopZS5LWzU5sGTJ
+ ks+Y+fYsxY4aP378Tn7W29zcfICUciGA8/20GzQ6AgAA/N1NIVfWk8nkixk+3g/ADQDmSinvkVIe78am
+ JjcaGhpuB/BWhiKRZDI5xa/6TNP8sRDiVfiQoLPQ6AgA7zuO86Sbgq4cQPo47myJyXZA53TUE6ZpzjFN
+ c/qECRMGu7Gvyc68efOSAJ7JUuwIr/VEo9ERUsqnmfmXXm2FhY4A8GQ8Hne1CyoX6648CgAw8yHMfFNH
+ R8dCwzBuj0ajB+ZQj6YPhBB/zlJkshf7UsqTHcdZiM6Zh5JFRwDun1XXDoCZM3UDeoWIRhHR9xzHeUVK
+ +axhGEENVFUEsVhMZUowQkSDpJST8rEtpfwtgEdRIgN9majwCOBlpdTrbgu7tm7b9iIArg33wlFE9Dsp
+ 5WIp5W+klPnkzqt4mDljN4CZh+dir7m5eR8pZSuA73sSVkRUeATguvUHct8L8Lccy/fGHgAuBRCXUv5F
+ DxrmBjNnzGudTj/uCtM0pwshFgDYy7OwIqKCI4ANbgf/ushpLwARPcrM/53rfX1QA+AEACdIKd8moidr
+ amp+09rautEH2+VMtsT2WSMAKeUwAHcw8wn+SCou/FhFFzZ5focnMyX/6I2c3ItlWUvQ2U/0mwnMfG1b
+ W9sK0zQfjkajeqVh33iOAJj5EnQ637KkgiOAnFp/IL/twEE4gC4GMfOpjuMskFLONwwjlJRSpYzLMYDt
+ AxcSIhU6BvCOUip4B6CUehbZ1wT4wb5EdLeUcqWU8rfNzc27FKDOUiDj2goiWpHNABGVtQOoxAiAmZ9E
+ Z07UnMj3FwoyCuhJI4DvCyGWSSlfklIeXcC6iw4iyugAmPlTF2bK2gFUYgTgYo1I7/fldZMQjwLwdlhZ
+ fkwCMFtKucw0zZ9MmjSp4hKaZHMAALJGAChzB1CBEcC9lmX1mfs/E3n9QrFYLIHCRgE92YWZf7F69eqO
+ 9KBhWU1jZSJbBh4dAVReBCCEuCffevJ2kUQUpgPYQnrQsFVKaRmGcVbYeoJk1KhRdQC+kamMmzEAlLkD
+ qLAI4IFYLOZq629v5P0LWZY1H9k3pxQSSUT3SSk7pJS/aW5u3iFsQX5TX19/DIC6DEW+SCcQyUZZO4BK
+ igAcx8m79Qc8ZgVm5t95uT8gqgBcKoRYIaV8saWlZbuwBfkFM2fbpDMrmw3TNH3bMqwJFyJ6JB6Pe0oF
+ 58kB2Lb9V4Q7FpCNw9vb2/cPW4QfpDf5nJmpjJsNW8xc9g6gUroAXlt/wIdzARzHKcYoYAvMXNJHa3dB
+ RJdkKZJi5nkuTJW9A6iQLsDjtm3P9VqPZwcQj8dfA3CvVzsBUvIRgJTyDGY+Nkux5+Lx+P9lKmCaZguA
+ Mf4pK04qJALw3PoDPp0MlI4Ckn7YCoD9m5qasi6PNU1zYiHE5IppmqMB/DhbOWa+w4W5w7wrKn4qIAKY
+ pZTKOT9Hb/jiAOLx+EIAxdoVqBZCZO0GMPMn6VwFGfvZhYaZ7weQ7fivR23bfsGFrYpwABUQAfjS+gM+
+ ng0YiUTugIvz7EIia6ospdTHzHwzgAeklB2GYVwrpdy5ANr6REr5KIADspUTQmRt/cePH78ndARQMvT1
+ HYjokfR+HF/wzQEsWrToXRRpFEBE56X7vxmxbXsmOrdUVhHRTwF8JKV8MN80W16QUv4awMkuiv7ezbFg
+ juMU/PzAsCjjCGCd38laff2F0lHAMj9t+oXjOOe5KSeEuB5A94yqpwN4yTTNBVLKc1paWvoHIjBNc3Pz
+ QCnl/QAuc1H8EyK6NVshKWUTM1eMAyjjCGCGUirmZz2+OoD0KUI3+GnTL9xGAbFY7C30chQXM+8D4N62
+ traPpJQ3mKZp+q3RNM0pQoi/ApjmpjwRXWRZluWi6LeReQVhWVGmEcCCoUOHzvC7Ht9/Idu2ZxJRXlsT
+ g8ZtFKCUuhF9L3AaAuBKZo5JKR81TfM4r7qklPuZpvkwMz+HzMeBd+dcy7KeylYoGo3uihCODw+TcowA
+ iGhG+mwIXwlkO20qlbpBCHEEgPog7OdLOgq4283WSaXUqVLKDcj88JzMzCdLKd9k5teI6LX6+vrn58+f
+ vymbfdM0RzPz0egc5Psmc065HC5TSrlae5Hu+1fUAS3lFgGkagd+ZFlW1mXe+RCIA4jH428bhnEDERXd
+ 6TLpLoqrk3SVUudKKTcie8rsvYlobwCXrFu3DlLKecz8IREtcxznQyHEhwBGAxhNRKOZ2WTmbFN7fXGx
+ Uuo2NwXHjx8/NpVKnZNnPSVLuSUFTQ0YsjSoegJLqGHb9gzTNCcz8yFB1ZEnRxiG8Qvbtq9wU1gpdbFp
+ mpuY+fIc6phERAAA0eNs+hxb+q0QQuwbi8X6PBikJ6lU6m64yBJcbpRbBOBU120Iqp5AfyHHcYp1QPAn
+ Uspvui1vWdaPAVyDkNY5ENEcIcToXB7+9BqCgwOUVbSU1xiAhxbDBYE6ANu25xKR7yOXfsDMM5qamnZ3
+ W14pdS2Aicx8d4CytoGIZhLRcbFY7N9u75FS3gp3awjKkvKKANKhZEAE/gu1t7ffAODtoOvJFSIaFYlE
+ ZgCIuL1HKbXYtu3vCiEOAzA7OHWdK76Y+QDLss6LxWKuQ0Ap5QkAfhCgtKJHRwDuCdwBvPPOO+uI6Mqg
+ 68mT46WUs8aMGTMol5tisdgcpdQxAKYxs+uw3AUpAM8w85GWZZ1m2/Y/crk5fRz7X3zUU5KUegSQosjS
+ sokAAMCyrOeJ6GeFqCsPpvbr1+/JfFKIKaX+aNv2vgDGM/OPmXlOrjaYeS0z/5mZvxOJREYqpY5NJ1rJ
+ iXHjxu2YTCazHRtWEZR4BLB5Y/XAp7pa/qAjgIKl1bYs6+dSyr0BTC1UnW5h5kOEEE9KKc9QSr2f6/3p
+ 5ZkxAL+aOHFiv3Xr1h3IzDsA2EEIMbzr/4loRTpr7wpm/pSIVti2Pc+r/ubm5gOFEK94tVMulHIEwMxX
+ bKoe2DYg3fIHHQEUNK++EOIKx3H2BjCskPW6ZF8ATxiGcWGuoXd30ouAfNmr7QbDMM4iovsKVV8pUKrr
+ AJj5Ydu2b609aPwFzMxERCU/BtCdWCymiMjV/HtIRInoRdM0LwpbiBsMw/i5fvi3pUQjgPeYecuzQQWK
+ AAr+C1mW9QcAbrLXhEV/Zr5NSnnv2LFjh4YtpjeklFEp5YNEdHXYWoqRUhwDYOYruh/tXagxgFBcZG1t
+ 7ZUA3gyj7hw4p7a29kUp5eFhC+lCSrmzlPJXAN5A5zZlTS+UWgTAzDNs295q9qZsIwAAaG1tXSOEKOau
+ AACAmfcE8KKU8n7DMEJb0jxu3Lh6KeUV6Hzwf4QK2tqbD6UUARDR3N6WpZd1BAB0zqUDuDCs+nNkGhHN
+ kVI+Y5rmSYWqdOzYsUOllBdUV1cvAHAjKnBdfz6UUASwLpVKXYFejvUuVAQQ6um6Sqk7DcPYhYh+EqaO
+ HJjKzFOllPOJ6HEAC9JHpPlGS0tL/7a2tlMAHIHOXIYVtZXXD0poFuB78Xj8n719UKhZgNCP17Zt+4q0
+ EzgtbC05MJGZJwKAlPITAPMBzAXwt3zWEQCAYRinADi1ra1tMnSI74lSiACI6FLLsv6Y4fPyjwC6sG37
+ dCnlLnCRAbcIGQHgpPQLUso16MyLuIyIPmLmZQA+AvAFEe3EzDsC2JGZdyKiLf8NTX0ZUgIRwC8sy7o5
+ U4GKiQC6UEodKKVcBmCXsLV4ZDsAUQDRnv923a+7HHvADr4iKeYIgIhmWpaVdW9MWc8C9EVHR0e+WXI0
+ mi0U8SzAk5ZlucpLWfazAL2R3jnYFLYOTWlTjBEAEb2qlDohh/KVFwEAgGVZS4QQB4WtQ1O6FGEEsMSy
+ rJz+pisyAugiFou96jiO7g5o8qLIIoDVSqmco9qKjQC6iMfjdiqV0qPjmpwppghAKdWQz30VHQF0sXjx
+ 4hWbN2+uAxD+v6SmZCiGCICZ31VK5d16V3wE0MXSpUvblFIRZl4dthZNaVAEEcBs27bHeTGgI4Ae2Lbd
+ AOCdsHVoNJlg5pvT+SJLgpJxAACglNoDnctuNZo+CbELcLFt25f6YUh3AfpAKbUfgD7XUGs0YXQBmPlb
+ bo9sc2lPdwH6Qik1DZ374jWabSh0BEBEx9u2fb/PNnUEkAml1G+I6Bth69AUHwWMAD5m5kODOLlXRwAu
+ sCzrKSKqyPPvNH1ToAhgUbrlnxuEcR0BuMSyrFeEECY68/JrNIFHAMx8nxBismVZrYFUAB0B5EQsFlPV
+ 1dVTUMB8/JriJcAIoA3AD2zbPjsWiyX8Nt4dHQHkyMKFCz+tr6//BhH5OhijKT0CigAWCCEOV0r91k+j
+ faEjgDyYP3/+JsuyvsXM5wH4v7D1aMIhgAjgTsdxDo/FYq/6ZTAbOgLwgG3bM5n5UOiTcisSHyOAL5j5
+ PKXUhfF4fL1nYTlQdoeDFhrbtuMATjQM4xIi+jmAgWFr0hSG7hEAi0ieNuglh/nH9nsftKKmX2EbykiN
+ qKikoEFi2/YthmG8RkTXoTPVtqbM6Z4UtP2YK/DZugQAwtbp9/u+Tg0Y+n7HkF03gHD19i7Ku7GZ0zVh
+ VMUlBQ0S27bfBHCkYRhXp6MBTRnTPQJIDh2F5NBRuZrYjYDderGc5dpNmdyu9RiAj9i2fZ3jOAcCeC5s
+ LZrg6D4G0PVyd/0fcr3O5x6310H+VhXlAAAgHo+/ppQ6mpm/B+DjsPVo/Kd7BND1cnf9H3K9zucet9dB
+ /lYV5wC6sG37jmQyeRCAu8LWovGXQrT4Pa9LNQKoiDGAvliyZMmHAM43DONZIroCwMSQJWl8oHsLX/2v
+ J1DzaXzLZ0zU1tHvK69sHDrmZSYqylRzYuiIfap22uM4QM8CFATbtp8B8JyU8icArgAwIGRJGg90nwWo
+ WfQctmv7DABARI8w8y+VUkW9b6T2oNMuiJx8zbGFmAWo2C5AL6SUUjekBwnvIKJNYQvS5EcvKwFnAZhq
+ WdZpfj38NKihPw1q6O+HrV7t63UA4RCPxxcC+J5pmrcBOAfA2QCGhqtKkwvdI4D1NYNu+7j15Yv9sk39
+ 6gcMOP2GS2v2nDIVANoXPj97w0P/fRNvWrfBrzqACjwctNiwLGsJgMullLcR0dkAzmbmUSHL0rigewSw
+ obp+sW+Ga/vXDPrR43+K7LDbFKSj55q9prREdhz7tTUzTjgBbRvb/apKzwIUCUqpjy3L+jmAvQBcRkR2
+ 2Jo0ffJA++Cd/hHUCHr/4y47QwwbfRQzU5d9ZiYxbPRR/Y+77Aw/6yrULIB2AC6xLOsLpdRNqVRqLyI6
+ H8C8sDVptnCvEGKiUuqsVO3Az4NoPatGja+tm3Tm9L7m7OsmnTm9atT4Wr/q02MARUo8Hm9H59qBu0zT
+ PIiZTwRwIoDh4SqrOOIAZhHREz0z8wTRf2bmoczcgPTi/V7sNzDzEACf+lSfHgModizLegXAK6Zp/sxx
+ nBOJ6EQAk8PWVcZ8BuApZp6VnrrtlYBazyqAqoj+s1i/u31mVAGo9qsyHQGUEJZlfQFgJoCZ0Wh0X8dx
+ uqKCkeEqKxueZeanampqZi1cuHBVtsJBtJ7EzmcE5wtm2h7YNgIg8BfEzmd+1acjgBIlFostALAgGo3+
+ LJVKHQfgcACTiUifdJwbrcw8KxKJzIrFYsrtTYStW0+qq/elBU1+pNZ3fLBwbvVuLVt2CXZvnTvef2tu
+ 8iPlS9IQqqvfepxh233HvqEdQEDEYrENAB5OvyClnMrMRwI4nIjGhiquSGHmNwC8LoR4zrKsv+dpZmP3
+ 1rMmekT/zS/6s91j48M/vWG7q2afwMBXurfOBHy+8eGf3uBLJQBqokf07xEBBLYoTTuAAqGUmg1gNgCY
+ ptnCzFMBHAOgJVRh4dLKzPMBvE5Er9m27cfuzC+7t54s/BucTa14d9m6/z1/8sBz/+cBVNcZRETcsdle
+ d88PpqVWvLvMr3pYYHiPMYAv/bLdE+0AQiA9at0K4NqmpqbhQohJRNSCTmfQAqA+VIHBESOiV5n5FQAv
+ K6VW+l0BEX3SvfWs3rnpiMiIpmtTnyxe64f9DmvuW2uumbx3zcQTRwNA+/w/f+B8scK3FjoyomlQ9c5N
+ R3T/DkT0iV/2exLoCKMmP8aPHz82mUy2lLBT2ATgPQBLiWgpMy9g5pdt2/486IoH/teVR9QcevYL3d9L
+ fhz/zfq7LrzK+Xx5W9D1e0F8Zafagd+94/qqnZsv6/5++5w/HLn+Lzf+NYg6tQMoEcaPHz/WcZwmZh7J
+ zCOJaBQ6ZxlGIpy9Cls95I7jvEdESyORyHuLFi1aHoIeAIAYMmLA4OvmxgHapVsf3eH1X7y4+ZWHH0gu
+ W/QxgFRY+vogUjVy/M51B502jQZuP5nTC/TS438ffXn1Ic3OZ5/4utegC+0AyoBoNDoglUqNFEJ0OYed
+ AAxk5oHozIbc/VXf43ozM68hojUAtryIaA0zr+n6jJnXCCHWMPOasB/ybAy84K4ba8xDrujlI4eBdgDF
+ lgdAEFCDXlbmtltzf7H+zu9eGVTF2gFoyg4xdOevDLr00b/ToIYJXe9tM2/v83UQNnntqrfX3nTKYc7q
+ jwPrOmkHoClLqkbvuUf9937/OPUbaKD0/s6ZN6231/3unJOSHyxcEmRF+Z2aoNEUOc4X/7faWfXh7Mgu
+ ciT1HzSGiCIlEgG0O6s/fmrjY9dO61j82gfef4nMlJpn1GhygvpvV1s76ayDa4+cfm6kquNAdA6YFtv0
+ dxLA6lSy+tW2F26e2Tbv/ld445qCzFj8Pxd0KwXjNXOEAAAAAElFTkSuQmCC
+
+
+
\ No newline at end of file
diff --git a/UI/Set/GuardConfig.Designer.cs b/UI/Set/GuardConfig.Designer.cs
new file mode 100644
index 0000000..ae94ac0
--- /dev/null
+++ b/UI/Set/GuardConfig.Designer.cs
@@ -0,0 +1,135 @@
+
+namespace steam_token.UI.Set
+{
+ partial class GuardConfig
+ {
+ ///
+ /// 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.button_confirm = new System.Windows.Forms.Button();
+ this.openFileDialog_steam = new System.Windows.Forms.OpenFileDialog();
+ this.textBox_shared_secret = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.button_openfile = new System.Windows.Forms.Button();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // button_confirm
+ //
+ this.button_confirm.Location = new System.Drawing.Point(451, 97);
+ this.button_confirm.Name = "button_confirm";
+ this.button_confirm.Size = new System.Drawing.Size(85, 30);
+ this.button_confirm.TabIndex = 1;
+ this.button_confirm.Text = "确定";
+ this.button_confirm.UseVisualStyleBackColor = true;
+ this.button_confirm.Click += new System.EventHandler(this.button_confirm_Click);
+ //
+ // openFileDialog_steam
+ //
+ this.openFileDialog_steam.FileName = "openFileDialog1";
+ this.openFileDialog_steam.Title = "请选择Steam令牌文件";
+ //
+ // textBox_shared_secret
+ //
+ this.textBox_shared_secret.Location = new System.Drawing.Point(16, 59);
+ this.textBox_shared_secret.Name = "textBox_shared_secret";
+ this.textBox_shared_secret.Size = new System.Drawing.Size(428, 29);
+ this.textBox_shared_secret.TabIndex = 2;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(363, 21);
+ this.label1.TabIndex = 3;
+ this.label1.Text = "请输入位于Steam令牌文件中的[shared_secret]值";
+ //
+ // button_openfile
+ //
+ this.button_openfile.Location = new System.Drawing.Point(451, 59);
+ this.button_openfile.Name = "button_openfile";
+ this.button_openfile.Size = new System.Drawing.Size(85, 30);
+ this.button_openfile.TabIndex = 1;
+ this.button_openfile.Text = "选择文件";
+ this.button_openfile.UseVisualStyleBackColor = true;
+ this.button_openfile.Click += new System.EventHandler(this.button_openfile_Click);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Font = new System.Drawing.Font("微软雅黑", 9F);
+ this.label2.ForeColor = System.Drawing.Color.Red;
+ this.label2.Location = new System.Drawing.Point(13, 36);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(462, 17);
+ this.label2.TabIndex = 4;
+ this.label2.Text = "/data/data/com.valvesoftware.android.steam.community/files/Steamguard-xxx";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("微软雅黑", 10F);
+ this.label3.Location = new System.Drawing.Point(16, 101);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(309, 20);
+ this.label3.TabIndex = 5;
+ this.label3.Text = "Tips: 手机需root或者能通过备份手段拿到该文件";
+ //
+ // GuardConfig
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(539, 132);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.textBox_shared_secret);
+ this.Controls.Add(this.button_openfile);
+ this.Controls.Add(this.button_confirm);
+ this.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "GuardConfig";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "令牌配置";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.Button button_confirm;
+ private System.Windows.Forms.OpenFileDialog openFileDialog_steam;
+ private System.Windows.Forms.TextBox textBox_shared_secret;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button button_openfile;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ }
+}
\ No newline at end of file
diff --git a/UI/Set/GuardConfig.cs b/UI/Set/GuardConfig.cs
new file mode 100644
index 0000000..b4f79af
--- /dev/null
+++ b/UI/Set/GuardConfig.cs
@@ -0,0 +1,95 @@
+using Newtonsoft.Json;
+using steam_token.Entity;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Util;
+
+namespace steam_token.UI.Set
+{
+ public partial class GuardConfig : Form
+ {
+ private SteamGuard steamGuard;
+ public GuardConfig()
+ {
+ InitializeComponent();
+ // 先初始化组件 再使用
+ Config config = ConfigUtil.Read();
+ steamGuard = config.SteamGuard;
+ if (null != steamGuard && !string.IsNullOrEmpty(steamGuard.shared_secret))
+ {
+ this.textBox_shared_secret.Text = steamGuard.shared_secret;
+ }
+ }
+
+ private void button_openfile_Click(object sender, EventArgs e)
+ {
+ this.openFileDialog_steam.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+ if (this.openFileDialog_steam.ShowDialog() == DialogResult.OK)
+ {
+ ReadFile(this.openFileDialog_steam.FileName);
+ }
+ }
+
+ private void ReadFile(string fileName)
+ {
+ FileInfo file = new FileInfo(fileName);
+ if (!file.Exists)
+ {
+ MessageBox.Show("文件" + fileName + "不存在");
+ }
+
+ if (file.Length > 1024 * 2)
+ {
+ MessageBox.Show("文件大小错误, 鉴定为不合适的文件");
+ }
+
+ byte[] bytes = File.ReadAllBytes(fileName);
+ string fileStr = Encoding.UTF8.GetString(bytes);
+
+ ParseSteamGuard(fileStr);
+
+
+ }
+
+ private void ParseSteamGuard(string fileStr)
+ {
+ try
+ {
+ steamGuard = JsonConvert.DeserializeObject(fileStr);
+ Console.WriteLine(steamGuard);
+
+ this.textBox_shared_secret.Text = steamGuard.shared_secret;
+ }
+ catch (JsonReaderException)
+ {
+ MessageBox.Show("文件内容不符合要求, 请不要修改拷贝出来的文件");
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("未知异常, 请通知作者, 感谢!");
+ }
+ }
+
+ private void button_confirm_Click(object sender, EventArgs e)
+ {
+ if (null == steamGuard)
+ {
+ MessageBox.Show("熬, 未知操作!!!");
+ return;
+ }
+
+ Config config = ConfigUtil.Read();
+ config.SteamGuard = steamGuard;
+ ConfigUtil.Save(config);
+ this.Dispose();
+ }
+ }
+}
diff --git a/UI/Set/GuardConfig.resx b/UI/Set/GuardConfig.resx
new file mode 100644
index 0000000..227aca0
--- /dev/null
+++ b/UI/Set/GuardConfig.resx
@@ -0,0 +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
+
+
+ True
+
+
\ No newline at end of file
diff --git a/UI/Set/ProgramConfig.Designer.cs b/UI/Set/ProgramConfig.Designer.cs
new file mode 100644
index 0000000..9d97c17
--- /dev/null
+++ b/UI/Set/ProgramConfig.Designer.cs
@@ -0,0 +1,52 @@
+
+namespace steam_token.UI.Set
+{
+ partial class ProgramConfig
+ {
+ ///
+ /// 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.SuspendLayout();
+ //
+ // ProgramConfig
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(539, 294);
+ this.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.Margin = new System.Windows.Forms.Padding(5);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ProgramConfig";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "设置";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UI/Set/ProgramConfig.cs b/UI/Set/ProgramConfig.cs
new file mode 100644
index 0000000..84b46b3
--- /dev/null
+++ b/UI/Set/ProgramConfig.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace steam_token.UI.Set
+{
+ public partial class ProgramConfig : Form
+ {
+ public ProgramConfig()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/UI/Set/ProgramConfig.resx b/UI/Set/ProgramConfig.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/UI/Set/ProgramConfig.resx
@@ -0,0 +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
+
+
\ No newline at end of file
diff --git a/Util/ConfigUtil.cs b/Util/ConfigUtil.cs
new file mode 100644
index 0000000..08938c9
--- /dev/null
+++ b/Util/ConfigUtil.cs
@@ -0,0 +1,63 @@
+using Newtonsoft.Json;
+using steam_token.Entity;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Util
+{
+ public class ConfigUtil
+ {
+ public static string CONFIG_NAME = steam_token.Properties.Resources.CONFIG_NAME;
+ public static string CONFIG_FOLDER = steam_token.Properties.Resources.CONFIG_FOLDER;
+
+ public static void Init(T t)
+ {
+ string configPath = GetConfigPath();
+ if (File.Exists(configPath))
+ {
+ return;
+ }
+ File.WriteAllText(configPath, JsonConvert.SerializeObject(t));
+ }
+
+ public static T Read()
+ {
+ string json = File.ReadAllText(GetConfigPath());
+
+ try
+ {
+ return JsonConvert.DeserializeObject(json);
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("配置文件内容异常, 请检查", json);
+ }
+
+ return default;
+ }
+
+ public static void Save(T config)
+ {
+ if (null == config)
+ {
+ return;
+ }
+ File.WriteAllText(GetConfigPath(), JsonConvert.SerializeObject(config));
+ }
+
+ private static string GetConfigPath()
+ {
+ string folder = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/niushuai233/" + CONFIG_FOLDER;
+ if (!Directory.Exists(folder))
+ {
+ Directory.CreateDirectory(folder);
+ }
+ return folder + "/" + CONFIG_NAME;
+ }
+ }
+}
diff --git a/Util/SteamGuardCalcThread.cs b/Util/SteamGuardCalcThread.cs
new file mode 100644
index 0000000..ebdbfd6
--- /dev/null
+++ b/Util/SteamGuardCalcThread.cs
@@ -0,0 +1,69 @@
+using steam_token.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Util;
+
+namespace steam_token.Util
+{
+ public class SteamGuardCalcThread
+ {
+ private static Thread thread;
+ private static Label label_guard;
+ private static ProgressBar progressBar_refresh;
+ internal static void StartThread(Label label, ProgressBar progressBar)
+ {
+ label_guard = label;
+ progressBar_refresh = progressBar;
+
+ StartThread();
+ }
+
+ private static void StartThread()
+ {
+ if (thread != null && thread.IsAlive)
+ {
+ // 先停止原先的线程
+ thread.Abort();
+ Console.WriteLine("中止线程");
+ }
+ // 等1s 保证停止
+ // Thread.Sleep(1000);
+
+ // 初始化线程
+ thread = new Thread(Calc);
+ thread.Name = "SteamGuardCalcThread";
+ // 开启线程
+ thread.Start();
+ }
+
+ private static void Calc()
+ {
+ Config config = ConfigUtil.Read();
+ string shared_secret = config.SteamGuard.shared_secret;
+ if (string.IsNullOrEmpty(shared_secret))
+ {
+ Console.WriteLine("未发现配置的秘钥");
+ return;
+ }
+
+ for (int i = 30; i >= 0; i--)
+ {
+ Thread.Sleep(1000);
+ if (i == 0)
+ {
+ string guard = SteamTwoFactorToken.GenerateSteamGuardCode(shared_secret);
+ label_guard.Text = guard;
+ i = 30;
+ Console.WriteLine("重新设值: " + guard);
+ }
+
+ progressBar_refresh.Value = i;
+ }
+ }
+ }
+}
diff --git a/Util/SteamTwoFactorToken.cs b/Util/SteamTwoFactorToken.cs
new file mode 100644
index 0000000..64cff66
--- /dev/null
+++ b/Util/SteamTwoFactorToken.cs
@@ -0,0 +1,107 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace steam_token.Util
+{
+ public class SteamTwoFactorToken
+ {
+ private static byte[] s_rgchSteamguardCodeChars = { 50, 51, 52, 53, 54, 55, 56, 57, 66, 67, 68, 70, 71, 72, 74, 75, 77, 78, 80, 81, 82, 84, 86, 87, 88, 89 };
+ private byte[] mSecret;
+
+ public SteamTwoFactorToken(String sharedSecret)
+ {
+ if (!string.IsNullOrEmpty(sharedSecret))
+ {
+ this.mSecret = Convert.FromBase64String(sharedSecret);
+ }
+ else
+ {
+ MessageBox.Show("未知的shared_secret");
+ }
+ }
+
+ public static string GenerateSteamGuardCode(String sharedSecret)
+ {
+ return new SteamTwoFactorToken(sharedSecret).GenerateSteamGuardCode();
+ }
+
+ public string GenerateSteamGuardCode()
+ {
+ return GenerateSteamGuardCodeForTime(CurrentTime());
+ }
+
+ private string GenerateSteamGuardCodeForTime(long calcTime)
+ {
+ if (this.mSecret == null)
+ {
+ return "";
+ }
+ byte[] bArr = new byte[8];
+ long j2 = calcTime / 30;
+
+ int i = 8;
+ while (true)
+ {
+ int i2 = i - 1;
+ if (i <= 0)
+ {
+ break;
+ }
+ bArr[i2] = (byte)((int)j2);
+ j2 = RightMove(j2, 8);
+ i = i2;
+ }
+
+ HMACSHA1 hmacsha1 = new HMACSHA1();
+ hmacsha1.Key = (this.mSecret);
+
+ byte[] doFinal = hmacsha1.ComputeHash(bArr);
+ int i3 = doFinal[19] & 15;
+ int i4 = (doFinal[i3 + 3] & 255) | ((doFinal[i3 + 2] & 255) << 8) | ((doFinal[i3] & 127) << 24) | ((doFinal[i3 + 1] & 255) << 16);
+ byte[] bArr2 = new byte[5];
+ for (int i5 = 0; i5 < 5; i5++)
+ {
+ byte[] bArr3 = s_rgchSteamguardCodeChars;
+ bArr2[i5] = bArr3[i4 % bArr3.Length];
+ i4 /= bArr3.Length;
+ }
+
+ return System.Text.Encoding.UTF8.GetString(bArr2);
+ }
+
+ public long CurrentTime()
+ {
+ return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() / 1000;
+ }
+
+
+ ///
+ /// 无符号右移, 相当于java里的 value>>>pos
+ ///
+ ///
+ ///
+ ///
+ public long RightMove(long value, int pos)
+ {
+ //移动 0 位时直接返回原值
+ if (pos != 0)
+ {
+ // int.MaxValue = 0x7FFFFFFF 整数最大值
+ int mask = int.MaxValue;
+ //无符号整数最高位不表示正负但操作数还是有符号的,有符号数右移1位,正数时高位补0,负数时高位补1
+ value = value >> 1;
+ //和整数最大值进行逻辑与运算,运算后的结果为忽略表示正负值的最高位
+ value = value & mask;
+ //逻辑运算后的值无符号,对无符号的值直接做右移运算,计算剩下的位
+ value = value >> pos - 1;
+ }
+
+ return value;
+ }
+ }
+}
diff --git a/XXXSteamTwoFactorToken.cs b/XXXSteamTwoFactorToken.cs
new file mode 100644
index 0000000..d7d5892
--- /dev/null
+++ b/XXXSteamTwoFactorToken.cs
@@ -0,0 +1,47 @@
+using steam_token.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Util;
+
+namespace steam_token
+{
+ public class XXXSteamTwoFactorToken
+ {
+ private static byte[] s_rgchSteamguardCodeChars = { 50, 51, 52, 53, 54, 55, 56, 57, 66, 67, 68, 70, 71, 72, 74, 75, 77, 78, 80, 81, 82, 84, 86, 87, 88, 89 };
+ private byte[] mSecret;
+
+ public XXXSteamTwoFactorToken(String sharedSecret)
+ {
+ if (string.IsNullOrEmpty(sharedSecret))
+ {
+ this.mSecret = Convert.FromBase64String(sharedSecret);
+ }
+ else
+ {
+ MessageBox.Show("未知参数 shared_secret");
+ }
+ }
+
+ public static String GenerateSteamGuardCode()
+ {
+ string sharedSecret = ConfigUtil.Read().SteamGuard.shared_secret;
+
+ return new XXXSteamTwoFactorToken(sharedSecret).GenerateSteamGuardCodeForTime(CurrentTime());
+ }
+
+ private String GenerateSteamGuardCodeForTime(long calcTime)
+ {
+
+ return null;
+ }
+
+ private static long CurrentTime()
+ {
+ return DateTime.Now.Millisecond / 1000;
+ }
+ }
+}
diff --git a/packages.config b/packages.config
new file mode 100644
index 0000000..c8fdfd1
--- /dev/null
+++ b/packages.config
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/steam-token.csproj b/steam-token.csproj
new file mode 100644
index 0000000..dbfef78
--- /dev/null
+++ b/steam-token.csproj
@@ -0,0 +1,276 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {26555785-E311-4F28-A28D-DD96B3165B98}
+ WinExe
+ steam_token
+ steam-token
+ v4.8
+ 512
+ true
+ true
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ steam-token.ico
+
+
+
+ packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll
+
+
+ packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
+ True
+ True
+
+
+ packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
+
+
+
+ packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll
+ True
+ True
+
+
+
+ packages\System.Console.4.3.0\lib\net46\System.Console.dll
+ True
+ True
+
+
+
+ packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll
+
+
+ packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll
+ True
+ True
+
+
+ packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
+ True
+ True
+
+
+ packages\System.IO.4.3.0\lib\net462\System.IO.dll
+ True
+ True
+
+
+ packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
+ True
+ True
+
+
+
+ packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
+ True
+ True
+
+
+ packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
+ True
+ True
+
+
+ packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
+ True
+ True
+
+
+ packages\System.Linq.4.3.0\lib\net463\System.Linq.dll
+ True
+ True
+
+
+ packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll
+ True
+ True
+
+
+ packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll
+ True
+ True
+
+
+ packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
+ True
+ True
+
+
+
+ packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
+ True
+ True
+
+
+ packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll
+ True
+ True
+
+
+ packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll
+ True
+ True
+
+
+ packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll
+ True
+ True
+
+
+ packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll
+ True
+ True
+
+
+ packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll
+ True
+ True
+
+
+
+
+
+
+
+
+
+
+
+ packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll
+ True
+ True
+
+
+
+
+
+
+ Form
+
+
+ MainForm.cs
+
+
+
+
+ Form
+
+
+ AboutForm.cs
+
+
+ Form
+
+
+ ProgramConfig.cs
+
+
+ Form
+
+
+ GuardConfig.cs
+
+
+
+
+
+ MainForm.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ AboutForm.cs
+
+
+ GuardConfig.cs
+
+
+ ProgramConfig.cs
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/steam-token.ico b/steam-token.ico
new file mode 100644
index 0000000..a5bd0d5
Binary files /dev/null and b/steam-token.ico differ
diff --git a/steam-token.sln b/steam-token.sln
new file mode 100644
index 0000000..5448f29
--- /dev/null
+++ b/steam-token.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32106.194
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "steam-token", "steam-token.csproj", "{26555785-E311-4F28-A28D-DD96B3165B98}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {26555785-E311-4F28-A28D-DD96B3165B98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {26555785-E311-4F28-A28D-DD96B3165B98}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {26555785-E311-4F28-A28D-DD96B3165B98}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {26555785-E311-4F28-A28D-DD96B3165B98}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {820E8374-01AD-41B9-82C1-388ADF797885}
+ EndGlobalSection
+EndGlobal