diff --git a/.github/issue_template.md b/.github/issue_template.md
index b538ab52..79efbbc9 100644
--- a/.github/issue_template.md
+++ b/.github/issue_template.md
@@ -1,4 +1,4 @@
-在提出问题前请先自行排除服务器端问题,同时也请通过搜索确认是否有人提出过相同问题。
+在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
### 预期行为
描述你认为应该发生什么
@@ -19,7 +19,7 @@
```
-### 环境信息
+### 环境信息(客户端请升级至最新正式版)
### 额外信息(可选)
diff --git a/.gitignore b/.gitignore
index b416e378..afeea2ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,11 +5,14 @@
/v2rayN/.vs/
/v2rayN/v2rayN/bin/Debug/app.publish
/v2rayN/v2rayN/bin/Debug
-/v2rayN/v2rayN/obj/Debug
-/v2rayN/.vs/v2rayN/DesignTimeBuild
/v2rayN/v2rayN/bin/Release
-/v2rayN/v2rayN/obj/Release
+/v2rayN/v2rayN/obj/
+/v2rayN/.vs/v2rayN/DesignTimeBuild
/v2rayN/packages
.vs/ProjectSettings.json
.vs/slnx.sqlite
.vs/VSWorkspaceState.json
+/v2rayN/v2rayUpgrade/bin/Debug
+/v2rayN/v2rayUpgrade/obj/Debug
+/v2rayN/v2rayUpgrade/bin/Release
+/v2rayN/v2rayUpgrade/obj/Release
\ No newline at end of file
diff --git a/README.md b/README.md
index bb10c507..c1197a8b 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
# v2rayN
### How to use
-- Download exe from release download
-- Also need to download v2ray core in the same folder
+- If you are newbie please download v2rayN-Core.zip from releases
+- Otherwise please download v2rayN.zip (Also need to download v2ray core in the same folder)
- Run v2rayN.exe
### Requirements
- Microsoft [.NET Framework 4.6](https://docs.microsoft.com/zh-cn/dotnet/framework/install/guide-for-developers) or higher
-- Project V core [https://github.com/v2ray/v2ray-core/releases](https://github.com/v2ray/v2ray-core/releases)
+- Project V core [https://github.com/v2fly/v2ray-core/releases](https://github.com/v2fly/v2ray-core/releases)
diff --git a/v2rayN/v2rayN.sln b/v2rayN/v2rayN.sln
index 02f175e5..64cf71f4 100644
--- a/v2rayN/v2rayN.sln
+++ b/v2rayN/v2rayN.sln
@@ -5,6 +5,8 @@ VisualStudioVersion = 15.0.28010.2050
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "v2rayN", "v2rayN\v2rayN.csproj", "{0A9785E6-D256-4B73-9757-4EF59955FD1E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "v2rayUpgrade", "v2rayUpgrade\v2rayUpgrade.csproj", "{F82BE52A-155C-492C-9E0A-1E917EC62C78}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -20,11 +22,20 @@ Global
{0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|Any CPU.Build.0 = Release|Any CPU
{0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|x86.ActiveCfg = Release|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|x86.Build.0 = Debug|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|x86.ActiveCfg = Release|Any CPU
+ {F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
+ RESX_SortFileContentOnSave = True
SolutionGuid = {56B88873-C9CC-4069-A1E5-DABD6C6E865E}
EndGlobalSection
EndGlobal
diff --git a/v2rayN/v2rayN/Base/HttpWebServer.cs b/v2rayN/v2rayN/Base/HttpWebServer.cs
index bbf26c53..9fa72495 100644
--- a/v2rayN/v2rayN/Base/HttpWebServer.cs
+++ b/v2rayN/v2rayN/Base/HttpWebServer.cs
@@ -57,7 +57,7 @@ namespace v2rayN.Base
{
ThreadPool.QueueUserWorkItem((c) =>
{
- var ctx = c as HttpListenerContext;
+ HttpListenerContext ctx = c as HttpListenerContext;
try
{
string address = ctx.Request.LocalEndPoint.Address.ToString();
diff --git a/v2rayN/v2rayN/Base/HttpWebServerB.cs b/v2rayN/v2rayN/Base/HttpWebServerB.cs
index a440efec..fcbca1dd 100644
--- a/v2rayN/v2rayN/Base/HttpWebServerB.cs
+++ b/v2rayN/v2rayN/Base/HttpWebServerB.cs
@@ -17,8 +17,10 @@ namespace v2rayN.Base
this.port = port;
this._responderMethod = method;
- Thread thread = new Thread(StartListen);
- thread.IsBackground = true;
+ Thread thread = new Thread(StartListen)
+ {
+ IsBackground = true
+ };
thread.Start();
}
@@ -33,42 +35,51 @@ namespace v2rayN.Base
private void StartListen()
{
- listener = new TcpListener(IPAddress.Any, port);
- listener.Start();
- Utils.SaveLog("WebserverB running...");
-
- while (true)
+ try
{
- if (!listener.Pending())
- {
- Thread.Sleep(100);
- continue;
- }
+ listener = new TcpListener(IPAddress.Any, port);
+ listener.Start();
+ Utils.SaveLog("WebserverB running...");
- TcpClient socket = listener.AcceptTcpClient();
- Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread));
- thread.IsBackground = true;
- thread.Start(socket);
- Thread.Sleep(1);
+ while (true)
+ {
+ if (!listener.Pending())
+ {
+ Thread.Sleep(100);
+ continue;
+ }
+
+ TcpClient socket = listener.AcceptTcpClient();
+ Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread))
+ {
+ IsBackground = true
+ };
+ thread.Start(socket);
+ Thread.Sleep(1);
+ }
+ }
+ catch
+ {
+ Utils.SaveLog("WebserverB start fail.");
}
}
private void ProcessThread(object obj)
{
try
{
- var socket = obj as TcpClient;
+ TcpClient socket = obj as TcpClient;
- var inputStream = new BufferedStream(socket.GetStream());
- var outputStream = new StreamWriter(new BufferedStream(socket.GetStream()));
+ BufferedStream inputStream = new BufferedStream(socket.GetStream());
+ StreamWriter outputStream = new StreamWriter(new BufferedStream(socket.GetStream()));
if (inputStream.CanRead)
{
- var data = ReadStream(inputStream);
+ string data = ReadStream(inputStream);
if (data.Contains("/pac/"))
{
if (_responderMethod != null)
{
- var address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString();
+ string address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString();
Utils.SaveLog("WebserverB Request " + address);
string pac = _responderMethod(address);
@@ -118,7 +129,7 @@ namespace v2rayN.Base
private void WriteStream(StreamWriter outputStream, string pac)
{
- var content_type = "application/x-ns-proxy-autoconfig";
+ string content_type = "application/x-ns-proxy-autoconfig";
outputStream.WriteLine("HTTP/1.1 200 OK");
outputStream.WriteLine(String.Format("Content-Type:{0}", content_type));
outputStream.WriteLine("Connection: close");
diff --git a/v2rayN/v2rayN/Base/ListViewFlickerFree.cs b/v2rayN/v2rayN/Base/ListViewFlickerFree.cs
index 7fc58205..a113a7bc 100644
--- a/v2rayN/v2rayN/Base/ListViewFlickerFree.cs
+++ b/v2rayN/v2rayN/Base/ListViewFlickerFree.cs
@@ -18,37 +18,31 @@ namespace v2rayN.Base
{
try
{
- int count = this.Columns.Count;
- int MaxWidth = 0;
+ this.SuspendLayout();
Graphics graphics = this.CreateGraphics();
- Font font = this.Font;
- ListView.ListViewItemCollection items = this.Items;
-
- string str;
- int width;
+ // 原生 ColumnHeaderAutoResizeStyle.ColumnContent 将忽略列头宽度
this.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
- for (int i = 0; i < count; i++)
+ for (int i = 0; i < this.Columns.Count; i++)
{
- str = this.Columns[i].Text;
- MaxWidth = this.Columns[i].Width;
+ ColumnHeader c = this.Columns[i];
+ int cWidth = c.Width;
+ string MaxStr = "";
+ Font font = this.Items[0].SubItems[0].Font;
- foreach (ListViewItem item in items)
+ foreach (ListViewItem item in this.Items)
{
- str = item.SubItems[i].Text;
- width = (int)graphics.MeasureString(str, font).Width;
- if (width > MaxWidth)
- {
- MaxWidth = width;
- }
+ // 整行视作相同字形,不单独计算每个单元格
+ font = item.SubItems[i].Font;
+ string str = item.SubItems[i].Text;
+ if (str.Length > MaxStr.Length) // 未考虑非等宽问题
+ MaxStr = str;
}
- if (i == 0)
- {
- this.Columns[i].Width = MaxWidth;
- }
- this.Columns[i].Width = MaxWidth;
+ int strWidth = (int)graphics.MeasureString(MaxStr, font).Width;
+ c.Width = System.Math.Max(cWidth, strWidth);
}
+ this.ResumeLayout();
}
catch { }
}
diff --git a/v2rayN/v2rayN/Base/StringEx.cs b/v2rayN/v2rayN/Base/StringEx.cs
index e7f87a44..40544106 100644
--- a/v2rayN/v2rayN/Base/StringEx.cs
+++ b/v2rayN/v2rayN/Base/StringEx.cs
@@ -24,7 +24,7 @@ namespace v2rayN.Base
public static bool IsWhiteSpace(this string value)
{
- foreach (var c in value)
+ foreach (char c in value)
{
if (char.IsWhiteSpace(c)) continue;
diff --git a/v2rayN/v2rayN/Base/WebClientEx.cs b/v2rayN/v2rayN/Base/WebClientEx.cs
index 0a435692..096826cc 100644
--- a/v2rayN/v2rayN/Base/WebClientEx.cs
+++ b/v2rayN/v2rayN/Base/WebClientEx.cs
@@ -17,17 +17,7 @@ namespace v2rayN.Base
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request;
- if (address.Scheme == "https")
- {
- ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => { return true; };
- request = (HttpWebRequest)base.GetWebRequest(address);
- request.ProtocolVersion = HttpVersion.Version10;
- }
- else
- {
- request = (HttpWebRequest)base.GetWebRequest(address);
- }
-
+ request = (HttpWebRequest)base.GetWebRequest(address);
request.Timeout = Timeout;
request.ReadWriteTimeout = Timeout;
//request.AllowAutoRedirect = false;
diff --git a/v2rayN/v2rayN/Forms/AddServer2Form.cs b/v2rayN/v2rayN/Forms/AddServer2Form.cs
index a88afb44..999b0c25 100644
--- a/v2rayN/v2rayN/Forms/AddServer2Form.cs
+++ b/v2rayN/v2rayN/Forms/AddServer2Form.cs
@@ -5,10 +5,8 @@ using v2rayN.Mode;
namespace v2rayN.Forms
{
- public partial class AddServer2Form : BaseForm
- {
- public int EditIndex { get; set; }
- VmessItem vmessItem;
+ public partial class AddServer2Form : BaseServerForm
+ {
public AddServer2Form()
{
@@ -63,7 +61,7 @@ namespace v2rayN.Forms
}
else
{
- UI.Show(UIRes.I18N("OperationFailed"));
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
diff --git a/v2rayN/v2rayN/Forms/AddServer2Form.resx b/v2rayN/v2rayN/Forms/AddServer2Form.resx
index c98d40e0..969bc410 100644
--- a/v2rayN/v2rayN/Forms/AddServer2Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer2Form.resx
@@ -117,274 +117,148 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- txtAddress
-
-
- Address
-
-
- 0
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Bottom
-
-
- True
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- btnOK
-
-
- txtRemarks
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- AddServer2Form
-
-
- label1
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- panel2
-
-
- 12, 27
-
-
- Fill
-
-
- True
-
-
- 313, 21
-
-
- groupBox1
-
6, 12
-
- True
-
-
- Alias (remarks)
-
-
- 127, 23
-
-
- 6
-
-
- 7
-
-
- groupBox1
-
-
- 113, 12
-
-
- 4
-
-
- Server
-
-
- 23
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 0
-
-
- 611, 60
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Edit custom configuration server
-
-
- 432, 104
-
-
- 611, 10
-
-
- groupBox1
-
-
- * Fill in manually
-
-
- 11
-
-
- 10
-
-
- panel1
-
-
- 75, 23
-
-
- 2
-
-
- btnClose
-
-
- 303, 17
-
-
- 0, 211
-
-
- 75, 23
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- Top
-
-
- 0, 10
-
-
- 3
-
-
- 611, 201
-
-
- 2
-
-
- 4
-
-
- 3
-
-
- 127, 62
-
-
- groupBox1
-
-
- True
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 83, 12
-
-
- &Cancel
-
-
- 12, 62
-
-
- &OK
-
-
- 0
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 446, 26
-
-
- groupBox1
-
-
- label6
-
-
- $this
-
-
- 1
-
-
- 0, 0
-
-
- panel2
-
-
- label13
-
-
- 83, 12
-
-
- 22
-
-
- 1
-
-
- panel2
-
-
- 5
-
611, 271
-
- 0
+
+ True
-
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- $this
+
+ Edit custom configuration server
396, 17
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 75, 23
-
- 1
+
+ 4
-
+
+ &Cancel
+
+
+ 303, 17
+
+
+ 75, 23
+
+
+ 5
+
+
+ &OK
+
+
+ Fill
+
+
+ 0, 10
+
+
+ 611, 201
+
+
+ 3
+
+
+ Server
+
+
True
-
+
+
+ 12, 62
+
+
+ 83, 12
+
+
+ 0
+
+
+ Address
+
+
+ True
+
+
+ 446, 26
+
+
+ 113, 12
+
+
+ 22
+
+
+ * Fill in manually
+
+
+ True
+
+
+ 12, 27
+
+
+ 83, 12
+
+
+ 10
+
+
+ Alias (remarks)
+
+
+ Top
+
+
+ 0, 0
+
+
+ 611, 10
+
+
+ 6
+
+
+ Bottom
+
+
+ 0, 211
+
+
+ 611, 60
+
+
+ 7
+
+
+ 127, 62
+
+
+ True
+
+
+ 432, 104
+
+
+ 23
+
+
+ 127, 23
+
+
+ 313, 21
+
+
+ 11
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer2Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer2Form.zh-Hans.resx
index a01d4dfa..482593c4 100644
--- a/v2rayN/v2rayN/Forms/AddServer2Form.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServer2Form.zh-Hans.resx
@@ -117,25 +117,25 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 编辑自定义配置服务器
+
取消(&C)
+
+ 确定(&O)
+
+
+ 服务器
+
+
+ 地址(address)
+
*手填,方便识别管理
别名(remarks)
-
- 地址(address)
-
-
- 服务器
-
-
- 确定(&O)
-
-
- 编辑自定义配置服务器
-
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
index 3515e6b9..06312421 100644
--- a/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
@@ -55,14 +55,15 @@
//
// btnClose
//
- this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
+ this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// groupBox1
//
+ resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.cmbSecurity);
this.groupBox1.Controls.Add(this.txtRemarks);
@@ -74,7 +75,6 @@
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.txtAddress);
this.groupBox1.Controls.Add(this.label1);
- resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -85,6 +85,7 @@
//
// cmbSecurity
//
+ resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbSecurity.FormattingEnabled = true;
this.cmbSecurity.Items.AddRange(new object[] {
@@ -96,7 +97,6 @@
resources.GetString("cmbSecurity.Items5"),
resources.GetString("cmbSecurity.Items6"),
resources.GetString("cmbSecurity.Items7")});
- resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
this.cmbSecurity.Name = "cmbSecurity";
//
// txtRemarks
@@ -146,9 +146,9 @@
//
// panel2
//
+ resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
- resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -165,22 +165,22 @@
//
// menuServer
//
+ resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItem1});
- resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Name = "menuServer";
//
// MenuItem1
//
+ resources.ApplyResources(this.MenuItem1, "MenuItem1");
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuItemImportClipboard});
this.MenuItem1.Name = "MenuItem1";
- resources.ApplyResources(this.MenuItem1, "MenuItem1");
//
// menuItemImportClipboard
//
- this.menuItemImportClipboard.Name = "menuItemImportClipboard";
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
+ this.menuItemImportClipboard.Name = "menuItemImportClipboard";
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
//
// AddServer3Form
diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.cs b/v2rayN/v2rayN/Forms/AddServer3Form.cs
index c39f2cfe..8113a784 100644
--- a/v2rayN/v2rayN/Forms/AddServer3Form.cs
+++ b/v2rayN/v2rayN/Forms/AddServer3Form.cs
@@ -5,10 +5,8 @@ using v2rayN.Mode;
namespace v2rayN.Forms
{
- public partial class AddServer3Form : BaseForm
- {
- public int EditIndex { get; set; }
- VmessItem vmessItem = null;
+ public partial class AddServer3Form : BaseServerForm
+ {
public AddServer3Form()
{
@@ -96,7 +94,7 @@ namespace v2rayN.Forms
}
else
{
- UI.Show(UIRes.I18N("OperationFailed"));
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
private void btnClose_Click(object sender, EventArgs e)
@@ -121,11 +119,10 @@ namespace v2rayN.Forms
{
ClearServer();
- string msg;
- VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out msg);
+ VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
{
- UI.Show(msg);
+ UI.ShowWarning(msg);
return;
}
diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.resx b/v2rayN/v2rayN/Forms/AddServer3Form.resx
index f2f23bba..272c310f 100644
--- a/v2rayN/v2rayN/Forms/AddServer3Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer3Form.resx
@@ -118,489 +118,489 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 396, 17
-
-
- 75, 23
-
-
-
- 4
-
-
- &Cancel
-
-
- btnClose
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 0
-
-
- True
-
-
- 337, 158
-
113, 12
-
- 22
+
+ 53, 12
-
- * Fill in manually
+
+ label6
-
- label13
+
+ groupBox1
-
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 547, 25
+
+
+
+ 11
+
+
+ $this
+
groupBox1
+
+ 8
+
+
+
+ Bottom
+
+
+ Import configuration file
+
+
+ groupBox1
+
+
+ panel1
+
+
+ 3
+
+
+ Password
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuItemImportClipboard
+
+
+ Fill
+
+
+ groupBox1
+
+
+ 8
+
+
+ 89, 12
+
+
+ 127, 27
+
+
+ System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
0
aes-256-cfb
-
- aes-128-cfb
-
-
- chacha20
-
-
- chacha20-ietf
-
-
- aes-256-gcm
-
-
- aes-128-gcm
-
-
- chacha20-poly1305
-
-
- chacha20-ietf-poly1305
-
-
- 127, 120
-
-
- 194, 20
-
6
-
- cmbSecurity
+
+ 5
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 303, 17
-
- groupBox1
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 1
+
+ 4
-
- 127, 154
+
+ MenuItem1
-
- 194, 21
+
+ 0
-
- 11
+
+ 359, 21
-
- txtRemarks
-
-
+
System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- groupBox1
+
+ 396, 17
-
- 2
-
-
- True
-
-
- 12, 158
-
-
- 95, 12
-
-
- 10
-
-
- Alias (remarks)
-
-
- label6
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 3
-
-
- True
-
-
- 12, 124
-
-
- 65, 12
-
-
+
8
+
+ 0, 0
+
+
+ label1
+
+
+ 547, 60
+
+
+ 0, 25
+
Encryption
-
- label5
+
+ groupBox1
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ True
+
+
+ 22
+
+
+ 162, 21
+
+
+ 127, 123
+
+
+ 127, 91
groupBox1
-
- 4
+
+ panel2
-
- 127, 85
-
-
- *
-
-
- 278, 21
-
-
+
5
+
+ 2
+
+
+ Alias (remarks)
+
+
+ groupBox1
+
+
+ True
+
+
+ label5
+
txtId
System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- groupBox1
-
-
- 5
-
-
- True
-
-
- 12, 89
-
-
- 53, 12
-
-
- 4
-
-
- Password
-
-
- label3
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 6
-
-
- 127, 56
-
-
- 194, 21
-
-
- 3
-
-
- txtPort
-
-
+
System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- groupBox1
-
-
- 7
-
-
- True
-
-
- 12, 60
-
-
- 71, 12
-
-
- 2
-
-
- Server port
-
-
- label2
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 8
-
-
- 127, 27
-
-
- 359, 21
-
-
- 1
-
-
- txtAddress
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 9
-
-
- True
-
12, 31
-
- 89, 12
+
+ groupBox1
+
+
+ 1
+
+
+ AddServer3Form
+
+
+ 194, 21
+
+
+ groupBox1
+
+
+ 127, 59
+
+
+ 0
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 71, 12
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 12, 124
+
+
+ 2
+
+
+ 10
+
+
+ txtPort
+
+
+ aes-128-cfb
+
+
+ 547, 10
+
+
+ 0, 35
+
+
+ 5
+
+
+ 235, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Edit or add a [Shadowsocks] server
+
+
+ &OK
+
+
+ chacha20
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ btnClose
+
+
+ panel2
0
-
- Server address
+
+ 3
-
- label1
+
+ 12, 93
-
+
+ 194, 20
+
+
+ 10
+
+
+ chacha20-ietf
+
+
+ True
+
+
+ panel2
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 194, 21
+
+
+ 1
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 6
+
+
+ 1
+
+
+ 7
+
+
+ label13
+
+
+ aes-256-gcm
+
+
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
groupBox1
-
- 10
+
+ v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- Fill
+
+ label3
-
- 0, 35
-
-
- 547, 196
-
-
- 3
-
-
- Server
-
-
- groupBox1
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 0
-
-
- 303, 17
-
-
- 75, 23
-
-
- 5
-
-
- &OK
-
-
- btnOK
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 1
-
-
- Bottom
-
-
- 0, 231
-
-
- 547, 60
-
-
- 7
-
-
- panel2
+
+ Server port
System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- $this
+
+ 0, 231
-
- 1
+
+ 9
-
- Top
+
+ aes-128-gcm
-
- 0, 25
+
+ 4
-
- 547, 10
+
+ &Cancel
-
- 6
+
+ True
-
- panel1
+
+ 6, 12
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ True
-
- $this
-
-
- 2
-
-
- 17, 17
-
-
- 235, 22
-
-
- Import URL from clipboard
-
-
- 162, 21
-
-
- Import configuration file
-
-
- 0, 0
-
-
- 547, 25
-
-
- 8
+
+ Server address
menuServer
-
- System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ txtAddress
-
+
+ 127, 154
+
+
+ chacha20-poly1305
+
+
+ 95, 12
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ * Fill in manually
+
+
+ 7
+
+
+ label2
+
+
+ 12, 62
+
+
+ 547, 291
+
+
+ chacha20-ietf-poly1305
+
+
+ btnOK
+
+
+ cmbSecurity
+
+
$this
-
+
+ 547, 196
+
+
+ 3
+
+
+ 75, 23
+
+
+ 6
+
+
+ 337, 158
+
+
+ 65, 12
+
+
+ 4
+
+
+ 2
+
+
+ 1
+
+
+ *
+
+
+ 75, 23
+
+
+ Import URL from clipboard
+
+
+ groupBox1
+
+
+ Server
+
+
+ txtRemarks
+
+
+ 12, 155
+
+
+ True
+
+
+ 278, 21
+
+
+ Top
+
+
3
True
-
- 6, 12
-
-
- 547, 291
-
-
- Edit or add a [Shadowsocks] server
-
-
- MenuItem1
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuItemImportClipboard
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- AddServer3Form
-
-
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
+
+ 17, 17
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx
index 2a5968ca..e2cbcede 100644
--- a/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServer3Form.zh-Hans.resx
@@ -120,39 +120,58 @@
取消(&C)
+
+ 服务器
+
*手填,方便识别管理
+
+
+ 83, 12
+
别名(remarks)
+
+ 53, 12
+
加密方式
+
+ 29, 12
+
密码
+
+ 65, 12
+
服务器端口
+
+ 65, 12
+
服务器地址
-
- 服务器
-
确定(&O)
-
- 从剪贴板导入URL
-
-
- 扫描屏幕上的二维码
+
+ 92, 21
导入配置文件
+
+ 171, 22
+
+
+ 从剪贴板导入URL
+
编辑或添加[Shadowsocks]服务器
diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs
index 3ae98f0b..bdcd694a 100644
--- a/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServer4Form.Designer.cs
@@ -55,14 +55,15 @@
//
// btnClose
//
- this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
+ this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// groupBox1
//
+ resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.txtSecurity);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.txtId);
@@ -74,7 +75,6 @@
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.txtAddress);
this.groupBox1.Controls.Add(this.label1);
- resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -135,9 +135,9 @@
//
// panel2
//
+ resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
- resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -154,22 +154,22 @@
//
// menuServer
//
+ resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.MenuItem1});
- resources.ApplyResources(this.menuServer, "menuServer");
this.menuServer.Name = "menuServer";
//
// MenuItem1
//
+ resources.ApplyResources(this.MenuItem1, "MenuItem1");
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuItemImportClipboard});
this.MenuItem1.Name = "MenuItem1";
- resources.ApplyResources(this.MenuItem1, "MenuItem1");
//
// menuItemImportClipboard
//
- this.menuItemImportClipboard.Name = "menuItemImportClipboard";
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
+ this.menuItemImportClipboard.Name = "menuItemImportClipboard";
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
//
// AddServer4Form
diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.cs b/v2rayN/v2rayN/Forms/AddServer4Form.cs
index d331bec2..23ec6aaa 100644
--- a/v2rayN/v2rayN/Forms/AddServer4Form.cs
+++ b/v2rayN/v2rayN/Forms/AddServer4Form.cs
@@ -5,10 +5,8 @@ using v2rayN.Mode;
namespace v2rayN.Forms
{
- public partial class AddServer4Form : BaseForm
- {
- public int EditIndex { get; set; }
- VmessItem vmessItem = null;
+ public partial class AddServer4Form : BaseServerForm
+ {
public AddServer4Form()
{
@@ -85,7 +83,7 @@ namespace v2rayN.Forms
}
else
{
- UI.Show(UIRes.I18N("OperationFailed"));
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
private void btnClose_Click(object sender, EventArgs e)
@@ -110,11 +108,10 @@ namespace v2rayN.Forms
{
ClearServer();
- string msg;
- VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out msg);
+ VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
{
- UI.Show(msg);
+ UI.ShowWarning(msg);
return;
}
diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.resx b/v2rayN/v2rayN/Forms/AddServer4Form.resx
index 566de4b3..d245b984 100644
--- a/v2rayN/v2rayN/Forms/AddServer4Form.resx
+++ b/v2rayN/v2rayN/Forms/AddServer4Form.resx
@@ -118,471 +118,471 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 396, 17
-
-
- 75, 23
-
-
-
- 4
-
-
- &Cancel
-
-
- btnClose
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 0
-
-
- 127, 84
-
-
- 278, 21
-
-
- 26
-
-
- txtSecurity
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 0
-
-
- True
-
-
-
- NoControl
-
-
- 12, 88
-
-
- 89, 12
-
-
- 25
-
-
- User(Optional)
-
-
- label4
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 1
-
-
- 127, 117
-
-
- *
-
-
- 278, 21
-
-
- 24
-
-
- txtId
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 2
-
-
- True
-
-
- NoControl
-
-
- 12, 121
+
+ 113, 12
113, 12
-
- 23
+
+ label6
-
- Password(Optional)
-
-
- label3
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
+
groupBox1
-
- 3
-
-
+
+
True
-
- 337, 158
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 113, 12
+
+ panel2
-
- 22
-
-
- * Fill in manually
-
-
- label13
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 4
-
-
- 127, 154
-
-
- 194, 21
+
+ 547, 25
11
-
- txtRemarks
+
+
+ Bottom
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Import configuration file
-
- groupBox1
+
+ panel1
-
- 5
+
+ 3
-
- True
+
+ Password(Optional)
-
- 12, 158
-
-
- 95, 12
-
-
- 10
-
-
- Alias (remarks)
-
-
- label6
-
-
+
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
groupBox1
-
- 6
-
-
- 127, 56
-
-
- 194, 21
-
-
- 3
-
-
- txtPort
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 7
-
-
- True
-
-
- 12, 60
-
-
- 71, 12
-
-
- 2
-
-
- Server port
-
-
- label2
-
System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- groupBox1
-
-
- 8
-
-
- 127, 27
-
-
- 359, 21
-
-
- 1
-
-
- txtAddress
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 9
-
-
- True
-
-
- 12, 31
-
-
- 89, 12
-
-
- 0
-
-
- Server address
-
-
- label1
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 10
+
+ menuItemImportClipboard
Fill
-
- 0, 35
-
-
- 547, 196
-
-
- 3
-
-
- Server
-
-
+
groupBox1
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 0
-
-
- 303, 17
-
-
- 75, 23
-
-
- 5
-
-
- &OK
-
-
- btnOK
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 1
-
-
- Bottom
-
-
- 0, 231
-
-
- 547, 60
-
-
- 7
-
-
- panel2
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 1
-
-
- Top
-
-
- 0, 25
-
-
- 547, 10
-
-
- 6
-
-
- panel1
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 2
-
-
- 17, 17
-
-
- 235, 22
-
-
- Import URL from clipboard
-
-
- 162, 21
-
-
- Import configuration file
-
-
- 0, 0
-
-
- 547, 25
-
8
-
- menuServer
+
+ 89, 12
+
+
+ 127, 27
System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 4
+
+
+ Edit or add a [Socks] server
+
+
+ NoControl
+
+
+ 10
+
+
+ 24
+
+
+ Import URL from clipboard
+
+
+ 303, 17
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 23
+
+
+ MenuItem1
+
+
+ 0
+
+
+ 359, 21
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 396, 17
+
+
+ 8
+
+
+ 0, 0
+
+
+ label1
+
+
+ 547, 60
+
+
+ 0, 25
+
+
+ groupBox1
+
+
+ True
+
+
+ 22
+
+
+ 162, 21
+
+
+ True
+
+
+ Server
+
+
+ 127, 120
+
+
+ panel2
+
+
+ groupBox1
+
+
+ 5
+
+
+ 2
+
+
+ 26
+
+
+ groupBox1
+
+
+ menuServer
+
+
+ groupBox1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ NoControl
+
+
+ txtId
+
+
+ 235, 22
+
+
+ 12, 93
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 12, 31
+
+
+ groupBox1
+
+
+ 1
+
+
+ AddServer4Form
+
+
+ 194, 21
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 127, 58
+
+
+ 1
+
+
+ 0
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 71, 12
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ groupBox1
+
+
+ txtPort
+
+
+ panel2
+
+
+ 547, 10
+
+
+ *
+
+
+ 2
+
+
+ txtSecurity
+
$this
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ label4
+
+
+ &OK
+
+
+ btnClose
+
+
+ 278, 21
+
+
+ 0
+
3
+
+ 12, 124
+
+
+ 2
+
+
+ 10
+
+
+ btnOK
+
+
+ 194, 21
+
+
+ 1
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 6
+
+
+ 1
+
+
+ 7
+
+
+ label13
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ label3
+
+
+ Server port
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 231
+
+
+ 9
+
+
+ &Cancel
+
+
+ True
+
+
+ 6, 12
+
+
+ Server address
+
+
+ 25
+
+
+ txtAddress
+
+
+ 127, 151
+
+
+ 95, 12
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Alias (remarks)
+
+
+ * Fill in manually
+
+
+ 7
+
+
+ label2
+
+
+ 12, 62
+
+
+ 547, 291
+
+
+ $this
+
+
+ 547, 196
+
+
+ 6
+
+
+ 0
+
+
+ 75, 23
+
+
+ 3
+
+
+ 127, 89
+
+
+ 337, 155
+
+
+ True
+
+
+ 4
+
+
+ 5
+
+
+ 75, 23
+
+
+ 89, 12
+
+
+ groupBox1
+
+
+ groupBox1
+
+
+ 0, 35
+
+
+ txtRemarks
+
+
+ 12, 155
+
+
+ True
+
+
+ User(Optional)
+
+
+ 278, 21
+
+
+ Top
+
+
+ 3
+
True
-
- 6, 12
-
-
- 547, 291
-
-
- Edit or add a [Socks] server
-
-
- MenuItem1
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuItemImportClipboard
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- AddServer4Form
-
-
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
+
+ 17, 17
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx
index 6a3cc081..2e8e0912 100644
--- a/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServer4Form.zh-Hans.resx
@@ -124,11 +124,8 @@
服务器
-
- 127, 85
-
-
- 12, 89
+
+ 194, 21
77, 12
@@ -136,11 +133,8 @@
用户名(可选)
-
- 127, 115
-
-
- 12, 119
+
+ 194, 21
65, 12
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
new file mode 100644
index 00000000..423b7386
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.Designer.cs
@@ -0,0 +1,513 @@
+namespace v2rayN.Forms
+{
+ partial class AddServer5Form
+ {
+ ///
+ /// 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(AddServer5Form));
+ this.btnClose = new System.Windows.Forms.Button();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cmbFlow = new System.Windows.Forms.ComboBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.btnGUID = new System.Windows.Forms.Button();
+ this.label13 = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label24 = new System.Windows.Forms.Label();
+ this.label23 = new System.Windows.Forms.Label();
+ this.panTlsMore = new System.Windows.Forms.Panel();
+ this.label21 = new System.Windows.Forms.Label();
+ this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label20 = new System.Windows.Forms.Label();
+ this.txtPath = new System.Windows.Forms.TextBox();
+ this.cmbNetwork = new System.Windows.Forms.ComboBox();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label19 = new System.Windows.Forms.Label();
+ this.label18 = new System.Windows.Forms.Label();
+ this.label17 = new System.Windows.Forms.Label();
+ this.label16 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
+ this.label12 = new System.Windows.Forms.Label();
+ this.txtRequestHost = new System.Windows.Forms.TextBox();
+ this.label11 = new System.Windows.Forms.Label();
+ this.label10 = new System.Windows.Forms.Label();
+ this.cmbHeaderType = new System.Windows.Forms.ComboBox();
+ this.label8 = new System.Windows.Forms.Label();
+ this.cmbSecurity = new System.Windows.Forms.ComboBox();
+ this.txtRemarks = new System.Windows.Forms.TextBox();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.txtId = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtAddress = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.btnOK = new System.Windows.Forms.Button();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.menuServer = new System.Windows.Forms.MenuStrip();
+ this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.MenuItemImportClient = new System.Windows.Forms.ToolStripMenuItem();
+ this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.panTlsMore.SuspendLayout();
+ this.panel2.SuspendLayout();
+ this.menuServer.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // btnClose
+ //
+ this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ resources.ApplyResources(this.btnClose, "btnClose");
+ this.btnClose.Name = "btnClose";
+ this.btnClose.UseVisualStyleBackColor = true;
+ this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.cmbFlow);
+ this.groupBox1.Controls.Add(this.label4);
+ this.groupBox1.Controls.Add(this.btnGUID);
+ this.groupBox1.Controls.Add(this.label13);
+ this.groupBox1.Controls.Add(this.groupBox2);
+ this.groupBox1.Controls.Add(this.label8);
+ this.groupBox1.Controls.Add(this.cmbSecurity);
+ this.groupBox1.Controls.Add(this.txtRemarks);
+ this.groupBox1.Controls.Add(this.label6);
+ this.groupBox1.Controls.Add(this.label5);
+ this.groupBox1.Controls.Add(this.txtId);
+ this.groupBox1.Controls.Add(this.label3);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.txtAddress);
+ this.groupBox1.Controls.Add(this.label1);
+ resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.TabStop = false;
+ //
+ // cmbFlow
+ //
+ this.cmbFlow.FormattingEnabled = true;
+ this.cmbFlow.Items.AddRange(new object[] {
+ resources.GetString("cmbFlow.Items"),
+ resources.GetString("cmbFlow.Items1"),
+ resources.GetString("cmbFlow.Items2"),
+ resources.GetString("cmbFlow.Items3"),
+ resources.GetString("cmbFlow.Items4")});
+ resources.ApplyResources(this.cmbFlow, "cmbFlow");
+ this.cmbFlow.Name = "cmbFlow";
+ //
+ // label4
+ //
+ resources.ApplyResources(this.label4, "label4");
+ this.label4.Name = "label4";
+ //
+ // btnGUID
+ //
+ resources.ApplyResources(this.btnGUID, "btnGUID");
+ this.btnGUID.Name = "btnGUID";
+ this.btnGUID.UseVisualStyleBackColor = true;
+ this.btnGUID.Click += new System.EventHandler(this.btnGUID_Click);
+ //
+ // label13
+ //
+ resources.ApplyResources(this.label13, "label13");
+ this.label13.Name = "label13";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.label24);
+ this.groupBox2.Controls.Add(this.label23);
+ this.groupBox2.Controls.Add(this.panTlsMore);
+ this.groupBox2.Controls.Add(this.label9);
+ this.groupBox2.Controls.Add(this.label20);
+ this.groupBox2.Controls.Add(this.txtPath);
+ this.groupBox2.Controls.Add(this.cmbNetwork);
+ this.groupBox2.Controls.Add(this.label7);
+ this.groupBox2.Controls.Add(this.label19);
+ this.groupBox2.Controls.Add(this.label18);
+ this.groupBox2.Controls.Add(this.label17);
+ this.groupBox2.Controls.Add(this.label16);
+ this.groupBox2.Controls.Add(this.label14);
+ this.groupBox2.Controls.Add(this.label15);
+ this.groupBox2.Controls.Add(this.cmbStreamSecurity);
+ this.groupBox2.Controls.Add(this.label12);
+ this.groupBox2.Controls.Add(this.txtRequestHost);
+ this.groupBox2.Controls.Add(this.label11);
+ this.groupBox2.Controls.Add(this.label10);
+ this.groupBox2.Controls.Add(this.cmbHeaderType);
+ resources.ApplyResources(this.groupBox2, "groupBox2");
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.TabStop = false;
+ //
+ // label24
+ //
+ resources.ApplyResources(this.label24, "label24");
+ this.label24.Name = "label24";
+ //
+ // label23
+ //
+ resources.ApplyResources(this.label23, "label23");
+ this.label23.Name = "label23";
+ //
+ // panTlsMore
+ //
+ this.panTlsMore.Controls.Add(this.label21);
+ this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
+ resources.ApplyResources(this.panTlsMore, "panTlsMore");
+ this.panTlsMore.Name = "panTlsMore";
+ //
+ // label21
+ //
+ resources.ApplyResources(this.label21, "label21");
+ this.label21.Name = "label21";
+ //
+ // cmbAllowInsecure
+ //
+ this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbAllowInsecure.FormattingEnabled = true;
+ this.cmbAllowInsecure.Items.AddRange(new object[] {
+ resources.GetString("cmbAllowInsecure.Items"),
+ resources.GetString("cmbAllowInsecure.Items1"),
+ resources.GetString("cmbAllowInsecure.Items2")});
+ resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
+ this.cmbAllowInsecure.Name = "cmbAllowInsecure";
+ //
+ // label9
+ //
+ resources.ApplyResources(this.label9, "label9");
+ this.label9.Name = "label9";
+ //
+ // label20
+ //
+ resources.ApplyResources(this.label20, "label20");
+ this.label20.Name = "label20";
+ //
+ // txtPath
+ //
+ resources.ApplyResources(this.txtPath, "txtPath");
+ this.txtPath.Name = "txtPath";
+ //
+ // cmbNetwork
+ //
+ this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbNetwork.FormattingEnabled = true;
+ this.cmbNetwork.Items.AddRange(new object[] {
+ resources.GetString("cmbNetwork.Items"),
+ resources.GetString("cmbNetwork.Items1"),
+ resources.GetString("cmbNetwork.Items2"),
+ resources.GetString("cmbNetwork.Items3"),
+ resources.GetString("cmbNetwork.Items4")});
+ resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
+ this.cmbNetwork.Name = "cmbNetwork";
+ this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
+ //
+ // label7
+ //
+ resources.ApplyResources(this.label7, "label7");
+ this.label7.Name = "label7";
+ //
+ // label19
+ //
+ resources.ApplyResources(this.label19, "label19");
+ this.label19.Name = "label19";
+ //
+ // label18
+ //
+ resources.ApplyResources(this.label18, "label18");
+ this.label18.Name = "label18";
+ //
+ // label17
+ //
+ resources.ApplyResources(this.label17, "label17");
+ this.label17.Name = "label17";
+ //
+ // label16
+ //
+ resources.ApplyResources(this.label16, "label16");
+ this.label16.Name = "label16";
+ //
+ // label14
+ //
+ resources.ApplyResources(this.label14, "label14");
+ this.label14.Name = "label14";
+ //
+ // label15
+ //
+ resources.ApplyResources(this.label15, "label15");
+ this.label15.Name = "label15";
+ //
+ // cmbStreamSecurity
+ //
+ this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbStreamSecurity.FormattingEnabled = true;
+ this.cmbStreamSecurity.Items.AddRange(new object[] {
+ resources.GetString("cmbStreamSecurity.Items"),
+ resources.GetString("cmbStreamSecurity.Items1"),
+ resources.GetString("cmbStreamSecurity.Items2")});
+ resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
+ this.cmbStreamSecurity.Name = "cmbStreamSecurity";
+ this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
+ //
+ // label12
+ //
+ resources.ApplyResources(this.label12, "label12");
+ this.label12.Name = "label12";
+ //
+ // txtRequestHost
+ //
+ resources.ApplyResources(this.txtRequestHost, "txtRequestHost");
+ this.txtRequestHost.Name = "txtRequestHost";
+ //
+ // label11
+ //
+ resources.ApplyResources(this.label11, "label11");
+ this.label11.Name = "label11";
+ //
+ // label10
+ //
+ resources.ApplyResources(this.label10, "label10");
+ this.label10.Name = "label10";
+ //
+ // cmbHeaderType
+ //
+ this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbHeaderType.FormattingEnabled = true;
+ this.cmbHeaderType.Items.AddRange(new object[] {
+ resources.GetString("cmbHeaderType.Items"),
+ resources.GetString("cmbHeaderType.Items1"),
+ resources.GetString("cmbHeaderType.Items2"),
+ resources.GetString("cmbHeaderType.Items3"),
+ resources.GetString("cmbHeaderType.Items4"),
+ resources.GetString("cmbHeaderType.Items5"),
+ resources.GetString("cmbHeaderType.Items6")});
+ resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
+ this.cmbHeaderType.Name = "cmbHeaderType";
+ //
+ // label8
+ //
+ resources.ApplyResources(this.label8, "label8");
+ this.label8.Name = "label8";
+ //
+ // cmbSecurity
+ //
+ this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple;
+ this.cmbSecurity.FormattingEnabled = true;
+ this.cmbSecurity.Items.AddRange(new object[] {
+ resources.GetString("cmbSecurity.Items")});
+ resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
+ this.cmbSecurity.Name = "cmbSecurity";
+ //
+ // txtRemarks
+ //
+ resources.ApplyResources(this.txtRemarks, "txtRemarks");
+ this.txtRemarks.Name = "txtRemarks";
+ //
+ // label6
+ //
+ resources.ApplyResources(this.label6, "label6");
+ this.label6.Name = "label6";
+ //
+ // label5
+ //
+ resources.ApplyResources(this.label5, "label5");
+ this.label5.Name = "label5";
+ //
+ // txtId
+ //
+ resources.ApplyResources(this.txtId, "txtId");
+ this.txtId.Name = "txtId";
+ //
+ // label3
+ //
+ resources.ApplyResources(this.label3, "label3");
+ this.label3.Name = "label3";
+ //
+ // txtPort
+ //
+ resources.ApplyResources(this.txtPort, "txtPort");
+ this.txtPort.Name = "txtPort";
+ //
+ // label2
+ //
+ resources.ApplyResources(this.label2, "label2");
+ this.label2.Name = "label2";
+ //
+ // txtAddress
+ //
+ resources.ApplyResources(this.txtAddress, "txtAddress");
+ this.txtAddress.Name = "txtAddress";
+ //
+ // label1
+ //
+ resources.ApplyResources(this.label1, "label1");
+ this.label1.Name = "label1";
+ //
+ // panel2
+ //
+ this.panel2.Controls.Add(this.btnClose);
+ this.panel2.Controls.Add(this.btnOK);
+ resources.ApplyResources(this.panel2, "panel2");
+ this.panel2.Name = "panel2";
+ //
+ // btnOK
+ //
+ resources.ApplyResources(this.btnOK, "btnOK");
+ this.btnOK.Name = "btnOK";
+ this.btnOK.UseVisualStyleBackColor = true;
+ this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+ //
+ // panel1
+ //
+ resources.ApplyResources(this.panel1, "panel1");
+ this.panel1.Name = "panel1";
+ //
+ // menuServer
+ //
+ this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.MenuItem1});
+ resources.ApplyResources(this.menuServer, "menuServer");
+ this.menuServer.Name = "menuServer";
+ //
+ // MenuItem1
+ //
+ this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.MenuItemImportClient,
+ this.MenuItemImportServer,
+ this.toolStripSeparator1,
+ this.MenuItemImportClipboard});
+ this.MenuItem1.Name = "MenuItem1";
+ resources.ApplyResources(this.MenuItem1, "MenuItem1");
+ //
+ // MenuItemImportClient
+ //
+ this.MenuItemImportClient.Name = "MenuItemImportClient";
+ resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient");
+ this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click);
+ //
+ // MenuItemImportServer
+ //
+ this.MenuItemImportServer.Name = "MenuItemImportServer";
+ resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer");
+ this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click);
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+ //
+ // MenuItemImportClipboard
+ //
+ this.MenuItemImportClipboard.Name = "MenuItemImportClipboard";
+ resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard");
+ this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click);
+ //
+ // AddServer5Form
+ //
+ resources.ApplyResources(this, "$this");
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnClose;
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.panel2);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.menuServer);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Name = "AddServer5Form";
+ this.Load += new System.EventHandler(this.AddServer5Form_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.panTlsMore.ResumeLayout(false);
+ this.panTlsMore.PerformLayout();
+ this.panel2.ResumeLayout(false);
+ this.menuServer.ResumeLayout(false);
+ this.menuServer.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button btnClose;
+ private System.Windows.Forms.Button btnOK;
+ private System.Windows.Forms.TextBox txtRemarks;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.TextBox txtId;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtAddress;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.ComboBox cmbSecurity;
+ private System.Windows.Forms.ComboBox cmbNetwork;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.TextBox txtRequestHost;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.ComboBox cmbHeaderType;
+ private System.Windows.Forms.Label label12;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.Label label13;
+ private System.Windows.Forms.MenuStrip menuServer;
+ private System.Windows.Forms.ToolStripMenuItem MenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient;
+ private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.ComboBox cmbStreamSecurity;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard;
+ private System.Windows.Forms.Button btnGUID;
+ private System.Windows.Forms.Label label16;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label label17;
+ private System.Windows.Forms.Label label18;
+ private System.Windows.Forms.Label label19;
+ private System.Windows.Forms.TextBox txtPath;
+ private System.Windows.Forms.Label label20;
+ private System.Windows.Forms.Label label21;
+ private System.Windows.Forms.ComboBox cmbAllowInsecure;
+ private System.Windows.Forms.Panel panTlsMore;
+ private System.Windows.Forms.Label label24;
+ private System.Windows.Forms.Label label23;
+ private System.Windows.Forms.ComboBox cmbFlow;
+ private System.Windows.Forms.Label label4;
+ }
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.cs b/v2rayN/v2rayN/Forms/AddServer5Form.cs
new file mode 100644
index 00000000..d426e5c6
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.cs
@@ -0,0 +1,286 @@
+using System;
+using System.Windows.Forms;
+using v2rayN.Handler;
+using v2rayN.Mode;
+
+namespace v2rayN.Forms
+{
+ public partial class AddServer5Form : BaseServerForm
+ {
+
+ public AddServer5Form()
+ {
+ InitializeComponent();
+ }
+
+ private void AddServer5Form_Load(object sender, EventArgs e)
+ {
+ if (EditIndex >= 0)
+ {
+ vmessItem = config.vmess[EditIndex];
+ BindingServer();
+ }
+ else
+ {
+ vmessItem = new VmessItem();
+ ClearServer();
+ }
+ }
+
+ ///
+ /// 绑定数据
+ ///
+ private void BindingServer()
+ {
+ txtAddress.Text = vmessItem.address;
+ txtPort.Text = vmessItem.port.ToString();
+ txtId.Text = vmessItem.id;
+ cmbFlow.Text = vmessItem.flow;
+ cmbSecurity.Text = vmessItem.security;
+ cmbNetwork.Text = vmessItem.network;
+ txtRemarks.Text = vmessItem.remarks;
+
+ cmbHeaderType.Text = vmessItem.headerType;
+ txtRequestHost.Text = vmessItem.requestHost;
+ txtPath.Text = vmessItem.path;
+ cmbStreamSecurity.Text = vmessItem.streamSecurity;
+ cmbAllowInsecure.Text = vmessItem.allowInsecure;
+ }
+
+
+ ///
+ /// 清除设置
+ ///
+ private void ClearServer()
+ {
+ txtAddress.Text = "";
+ txtPort.Text = "";
+ txtId.Text = "";
+ cmbFlow.Text = "";
+ cmbSecurity.Text = Global.None;
+ cmbNetwork.Text = Global.DefaultNetwork;
+ txtRemarks.Text = "";
+
+ cmbHeaderType.Text = Global.None;
+ txtRequestHost.Text = "";
+ cmbStreamSecurity.Text = "";
+ cmbAllowInsecure.Text = "";
+ txtPath.Text = "";
+ }
+
+
+ private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ SetHeaderType();
+ }
+
+ ///
+ /// 设置伪装选项
+ ///
+ private void SetHeaderType()
+ {
+ cmbHeaderType.Items.Clear();
+
+ string network = cmbNetwork.Text;
+ if (Utils.IsNullOrEmpty(network))
+ {
+ cmbHeaderType.Items.Add(Global.None);
+ return;
+ }
+
+ cmbHeaderType.Items.Add(Global.None);
+ if (network.Equals(Global.DefaultNetwork))
+ {
+ cmbHeaderType.Items.Add(Global.TcpHeaderHttp);
+ }
+ else if (network.Equals("kcp") || network.Equals("quic"))
+ {
+ cmbHeaderType.Items.Add("srtp");
+ cmbHeaderType.Items.Add("utp");
+ cmbHeaderType.Items.Add("wechat-video");
+ cmbHeaderType.Items.Add("dtls");
+ cmbHeaderType.Items.Add("wireguard");
+ }
+ else
+ {
+ }
+ cmbHeaderType.Text = Global.None;
+ }
+
+ private void btnOK_Click(object sender, EventArgs e)
+ {
+ string address = txtAddress.Text;
+ string port = txtPort.Text;
+ string id = txtId.Text;
+ string flow = cmbFlow.Text;
+ string security = cmbSecurity.Text;
+ string network = cmbNetwork.Text;
+ string remarks = txtRemarks.Text;
+
+ string headerType = cmbHeaderType.Text;
+ string requestHost = txtRequestHost.Text;
+ string path = txtPath.Text;
+ string streamSecurity = cmbStreamSecurity.Text;
+ string allowInsecure = cmbAllowInsecure.Text;
+
+ if (Utils.IsNullOrEmpty(address))
+ {
+ UI.Show(UIRes.I18N("FillServerAddress"));
+ return;
+ }
+ if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
+ {
+ UI.Show(UIRes.I18N("FillCorrectServerPort"));
+ return;
+ }
+ if (Utils.IsNullOrEmpty(id))
+ {
+ UI.Show(UIRes.I18N("FillUUID"));
+ return;
+ }
+
+
+ vmessItem.address = address;
+ vmessItem.port = Utils.ToInt(port);
+ vmessItem.id = id;
+ vmessItem.flow = flow;
+ vmessItem.security = security;
+ vmessItem.network = network;
+ vmessItem.remarks = remarks;
+
+ vmessItem.headerType = headerType;
+ vmessItem.requestHost = requestHost.Replace(" ", "");
+ vmessItem.path = path.Replace(" ", "");
+ vmessItem.streamSecurity = streamSecurity;
+ vmessItem.allowInsecure = allowInsecure;
+
+ if (ConfigHandler.AddVlessServer(ref config, vmessItem, EditIndex) == 0)
+ {
+ this.DialogResult = DialogResult.OK;
+ }
+ else
+ {
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
+ }
+ }
+
+ private void btnGUID_Click(object sender, EventArgs e)
+ {
+ txtId.Text = Utils.GetGUID();
+ }
+
+ private void btnClose_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = DialogResult.Cancel;
+ }
+
+ private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ string security = cmbStreamSecurity.Text;
+ if (Utils.IsNullOrEmpty(security))
+ {
+ panTlsMore.Hide();
+ }
+ else
+ {
+ panTlsMore.Show();
+ }
+ }
+
+ #region 导入客户端/服务端配置
+
+ ///
+ /// 导入客户端
+ ///
+ ///
+ ///
+ private void MenuItemImportClient_Click(object sender, EventArgs e)
+ {
+ MenuItemImport(1);
+ }
+
+ ///
+ /// 导入服务端
+ ///
+ ///
+ ///
+ private void MenuItemImportServer_Click(object sender, EventArgs e)
+ {
+ MenuItemImport(2);
+ }
+
+ private void MenuItemImport(int type)
+ {
+ ClearServer();
+
+ OpenFileDialog fileDialog = new OpenFileDialog
+ {
+ Multiselect = false,
+ Filter = "Config|*.json|All|*.*"
+ };
+ if (fileDialog.ShowDialog() != DialogResult.OK)
+ {
+ return;
+ }
+ string fileName = fileDialog.FileName;
+ if (Utils.IsNullOrEmpty(fileName))
+ {
+ return;
+ }
+ string msg;
+ VmessItem vmessItem;
+ if (type.Equals(1))
+ {
+ vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg);
+ }
+ else
+ {
+ vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg);
+ }
+ if (vmessItem == null)
+ {
+ UI.ShowWarning(msg);
+ return;
+ }
+
+ txtAddress.Text = vmessItem.address;
+ txtPort.Text = vmessItem.port.ToString();
+ txtId.Text = vmessItem.id;
+ txtRemarks.Text = vmessItem.remarks;
+ cmbNetwork.Text = vmessItem.network;
+ cmbHeaderType.Text = vmessItem.headerType;
+ txtRequestHost.Text = vmessItem.requestHost;
+ txtPath.Text = vmessItem.path;
+ cmbStreamSecurity.Text = vmessItem.streamSecurity;
+ }
+
+ ///
+ /// 从剪贴板导入URL
+ ///
+ ///
+ ///
+ private void MenuItemImportClipboard_Click(object sender, EventArgs e)
+ {
+ ClearServer();
+
+ VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
+ if (vmessItem == null)
+ {
+ UI.ShowWarning(msg);
+ return;
+ }
+
+ txtAddress.Text = vmessItem.address;
+ txtPort.Text = vmessItem.port.ToString();
+ txtId.Text = vmessItem.id;
+ txtRemarks.Text = vmessItem.remarks;
+ cmbNetwork.Text = vmessItem.network;
+ cmbHeaderType.Text = vmessItem.headerType;
+ txtRequestHost.Text = vmessItem.requestHost;
+ txtPath.Text = vmessItem.path;
+ cmbStreamSecurity.Text = vmessItem.streamSecurity;
+ }
+ #endregion
+
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.resx b/v2rayN/v2rayN/Forms/AddServer5Form.resx
new file mode 100644
index 00000000..e4c57a41
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.resx
@@ -0,0 +1,1386 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ 396, 17
+
+
+ 75, 23
+
+
+
+ 4
+
+
+ &Cancel
+
+
+ btnClose
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel2
+
+
+ 0
+
+
+
+
+
+ xtls-rprx-origin
+
+
+ xtls-rprx-origin-udp443
+
+
+ xtls-rprx-direct
+
+
+ xtls-rprx-direct-udp443
+
+
+ 127, 123
+
+
+ 211, 20
+
+
+ 24
+
+
+ cmbFlow
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 0
+
+
+ True
+
+
+
+ NoControl
+
+
+ 12, 127
+
+
+ 29, 12
+
+
+ 25
+
+
+ Flow
+
+
+ label4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 1
+
+
+ 411, 91
+
+
+ 75, 23
+
+
+ 23
+
+
+ &Generate
+
+
+ btnGUID
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 2
+
+
+ True
+
+
+ 353, 189
+
+
+ 113, 12
+
+
+ 22
+
+
+ * Fill in manually
+
+
+ label13
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 3
+
+
+ True
+
+
+ NoControl
+
+
+ 529, 207
+
+
+ 119, 12
+
+
+ 35
+
+
+ 3)QUIC key/Kcp seed
+
+
+ label24
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 0
+
+
+ True
+
+
+ NoControl
+
+
+ 465, 140
+
+
+ 89, 12
+
+
+ 34
+
+
+ 4)QUIC securty
+
+
+ label23
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 1
+
+
+ True
+
+
+ NoControl
+
+
+ 12, 11
+
+
+ 83, 12
+
+
+ 31
+
+
+ allowInsecure
+
+
+ label21
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panTlsMore
+
+
+ 0
+
+
+
+
+
+ true
+
+
+ false
+
+
+ 107, 7
+
+
+ 91, 20
+
+
+ 30
+
+
+ cmbAllowInsecure
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panTlsMore
+
+
+ 1
+
+
+ 284, 232
+
+
+ 338, 35
+
+
+ 33
+
+
+ panTlsMore
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 2
+
+
+ True
+
+
+ 353, 32
+
+
+ 113, 12
+
+
+ 15
+
+
+ *Default value tcp
+
+
+ label9
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 3
+
+
+ True
+
+
+ 464, 124
+
+
+ 203, 12
+
+
+ 29
+
+
+ 3)h2 host Separated by commas (,)
+
+
+ label20
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 4
+
+
+ 127, 169
+
+
+ True
+
+
+ 396, 54
+
+
+ 28
+
+
+ txtPath
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 5
+
+
+ tcp
+
+
+ kcp
+
+
+ ws
+
+
+ h2
+
+
+ quic
+
+
+ 192, 28
+
+
+ 143, 20
+
+
+ 12
+
+
+ cmbNetwork
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 6
+
+
+ True
+
+
+ 9, 32
+
+
+ 167, 12
+
+
+ 13
+
+
+ Transport protocol(network)
+
+
+ label7
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 7
+
+
+ True
+
+
+ 9, 169
+
+
+ 29, 12
+
+
+ 27
+
+
+ Path
+
+
+ label19
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 8
+
+
+ True
+
+
+ 529, 189
+
+
+ 59, 12
+
+
+ 26
+
+
+ 2)h2 path
+
+
+ label18
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 9
+
+
+ True
+
+
+ 464, 109
+
+
+ 59, 12
+
+
+ 25
+
+
+ 2)ws host
+
+
+ label17
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 10
+
+
+ True
+
+
+ 529, 172
+
+
+ 59, 12
+
+
+ 24
+
+
+ 1)ws path
+
+
+ label16
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 11
+
+
+ True
+
+
+ 464, 94
+
+
+ 215, 12
+
+
+ 23
+
+
+ 1)http host Separated by commas (,)
+
+
+ label14
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 12
+
+
+ True
+
+
+ 9, 243
+
+
+ 23, 12
+
+
+ 22
+
+
+ TLS
+
+
+ label15
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 13
+
+
+
+
+
+ tls
+
+
+ xtls
+
+
+ 127, 239
+
+
+ 143, 20
+
+
+ 21
+
+
+ cmbStreamSecurity
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 14
+
+
+ True
+
+
+ 282, 68
+
+
+ 299, 12
+
+
+ 20
+
+
+ *tcp or kcp or QUIC camouflage type, default none
+
+
+ label12
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 15
+
+
+ 158, 100
+
+
+ True
+
+
+ 300, 53
+
+
+ 16
+
+
+ txtRequestHost
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 16
+
+
+ True
+
+
+ 9, 68
+
+
+ 95, 12
+
+
+ 19
+
+
+ Camouflage type
+
+
+ label11
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 17
+
+
+ True
+
+
+ 9, 100
+
+
+ 143, 12
+
+
+ 17
+
+
+ Camouflage domain(host)
+
+
+ label10
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 18
+
+
+ none
+
+
+ http
+
+
+ srtp
+
+
+ utp
+
+
+ wechat-video
+
+
+ dtls
+
+
+ wireguard
+
+
+ 127, 64
+
+
+ 143, 20
+
+
+ 18
+
+
+ cmbHeaderType
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 19
+
+
+ Bottom
+
+
+ 3, 215
+
+
+ 723, 281
+
+
+ 21
+
+
+ Transport
+
+
+ groupBox2
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 4
+
+
+ True
+
+
+ NoControl
+
+
+ 353, 157
+
+
+ 119, 12
+
+
+ 14
+
+
+ *Recommended (none)
+
+
+ label8
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 5
+
+
+ none
+
+
+ 127, 154
+
+
+ 211, 20
+
+
+ 6
+
+
+ cmbSecurity
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 6
+
+
+ 127, 185
+
+
+ 211, 21
+
+
+ 11
+
+
+ txtRemarks
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 7
+
+
+ True
+
+
+ 12, 189
+
+
+ 95, 12
+
+
+ 10
+
+
+ Alias (remarks)
+
+
+ label6
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 8
+
+
+ True
+
+
+ 12, 158
+
+
+ 65, 12
+
+
+ 8
+
+
+ Encryption
+
+
+ label5
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 9
+
+
+ 127, 91
+
+
+ 278, 21
+
+
+ 5
+
+
+ txtId
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 10
+
+
+ True
+
+
+ 12, 95
+
+
+ 53, 12
+
+
+ 4
+
+
+ UUID(id)
+
+
+ label3
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 11
+
+
+ 127, 59
+
+
+ 143, 21
+
+
+ 3
+
+
+ txtPort
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 12
+
+
+ True
+
+
+ 12, 63
+
+
+ 29, 12
+
+
+ 2
+
+
+ Port
+
+
+ label2
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 13
+
+
+ 127, 27
+
+
+ 359, 21
+
+
+ 1
+
+
+ txtAddress
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 14
+
+
+ True
+
+
+ 12, 31
+
+
+ 47, 12
+
+
+ 0
+
+
+ Address
+
+
+ label1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 15
+
+
+ Fill
+
+
+ 0, 35
+
+
+ 729, 499
+
+
+ 3
+
+
+ Server
+
+
+ groupBox1
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 0
+
+
+ 303, 17
+
+
+ 75, 23
+
+
+ 5
+
+
+ &OK
+
+
+ btnOK
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel2
+
+
+ 1
+
+
+ Bottom
+
+
+ 0, 534
+
+
+ 729, 60
+
+
+ 7
+
+
+ panel2
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
+ Top
+
+
+ 0, 25
+
+
+ 729, 10
+
+
+ 6
+
+
+ panel1
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 2
+
+
+ 17, 17
+
+
+ 237, 22
+
+
+ Import client configuration
+
+
+ 237, 22
+
+
+ Import server configuration
+
+
+ 234, 6
+
+
+ 237, 22
+
+
+ Import URL from clipboard
+
+
+ 162, 21
+
+
+ Import configuration file
+
+
+ 0, 0
+
+
+ 729, 25
+
+
+ 8
+
+
+ menuServer
+
+
+ System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 3
+
+
+ True
+
+
+ 25
+
+
+ 6, 12
+
+
+ 729, 594
+
+
+ Edit or add a [VLESS] server
+
+
+ MenuItem1
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MenuItemImportClient
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MenuItemImportServer
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolStripSeparator1
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MenuItemImportClipboard
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ AddServer5Form
+
+
+ v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
new file mode 100644
index 00000000..46ec6353
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer5Form.zh-Hans.resx
@@ -0,0 +1,344 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 取消(&C)
+
+
+ 服务器
+
+
+
+ 220, 20
+
+
+ 65, 12
+
+
+ 流控(flow)
+
+
+ 生成(&G)
+
+
+ *手填,方便识别管理
+
+
+ 底层传输方式(transport)
+
+
+ 149, 12
+
+
+ 3)QUIC 加密密钥/Kcp seed
+
+
+ 95, 12
+
+
+ 4)QUIC 加密方式
+
+
+ 167, 12
+
+
+ 跳过证书验证(allowInsecure)
+
+
+ 223, 7
+
+
+ 353, 36
+
+
+ 143, 12
+
+
+ *默认tcp,选错会无法连接
+
+
+ 149, 12
+
+
+ 3)h2 host中间逗号(,)隔开
+
+
+ 127, 168
+
+
+ 127, 32
+
+
+ 220, 20
+
+
+ 9, 36
+
+
+ 107, 12
+
+
+ 传输协议(network)
+
+
+ 9, 168
+
+
+ 65, 12
+
+
+ 路径(path)
+
+
+ 161, 12
+
+
+ 1)http host中间逗号(,)隔开
+
+
+ 9, 241
+
+
+ 107, 12
+
+
+ 底层传输安全(tls)
+
+
+ 127, 237
+
+
+ 282, 71
+
+
+ 197, 12
+
+
+ *tcp或kcp或QUIC伪装类型,默认none
+
+
+ 127, 102
+
+
+ 334, 51
+
+
+ 9, 71
+
+
+ 89, 12
+
+
+ 伪装类型(type)
+
+
+ 9, 102
+
+
+ 89, 12
+
+
+ 伪装域名(host)
+
+
+ 127, 67
+
+
+ 353, 158
+
+
+ 71, 12
+
+
+ *非空(none)
+
+
+ 220, 20
+
+
+ 220, 21
+
+
+ 83, 12
+
+
+ 别名(remarks)
+
+
+ 101, 12
+
+
+ 加密(encryption)
+
+
+ 65, 12
+
+
+ 用户ID(id)
+
+
+ 65, 12
+
+
+ 端口(port)
+
+
+ 83, 12
+
+
+ 地址(address)
+
+
+ 确定(&O)
+
+
+
+ False
+
+
+ 92, 21
+
+
+ 导入配置文件
+
+
+ 171, 22
+
+
+ 导入客户端配置
+
+
+ 171, 22
+
+
+ 导入服务端配置
+
+
+ 168, 6
+
+
+ 171, 22
+
+
+ 从剪贴板导入URL
+
+
+ 编辑或添加[VLESS]服务器
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs
new file mode 100644
index 00000000..eba21fc8
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.Designer.cs
@@ -0,0 +1,173 @@
+namespace v2rayN.Forms
+{
+ partial class AddServer6Form
+ {
+ ///
+ /// 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(AddServer6Form));
+ this.btnClose = new System.Windows.Forms.Button();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label13 = new System.Windows.Forms.Label();
+ this.txtRemarks = new System.Windows.Forms.TextBox();
+ this.label6 = new System.Windows.Forms.Label();
+ this.txtId = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtAddress = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.btnOK = new System.Windows.Forms.Button();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.groupBox1.SuspendLayout();
+ this.panel2.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // btnClose
+ //
+ resources.ApplyResources(this.btnClose, "btnClose");
+ this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnClose.Name = "btnClose";
+ this.btnClose.UseVisualStyleBackColor = true;
+ this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+ //
+ // groupBox1
+ //
+ resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Controls.Add(this.label13);
+ this.groupBox1.Controls.Add(this.txtRemarks);
+ this.groupBox1.Controls.Add(this.label6);
+ this.groupBox1.Controls.Add(this.txtId);
+ this.groupBox1.Controls.Add(this.label3);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.txtAddress);
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.TabStop = false;
+ //
+ // label13
+ //
+ resources.ApplyResources(this.label13, "label13");
+ this.label13.Name = "label13";
+ //
+ // txtRemarks
+ //
+ resources.ApplyResources(this.txtRemarks, "txtRemarks");
+ this.txtRemarks.Name = "txtRemarks";
+ //
+ // label6
+ //
+ resources.ApplyResources(this.label6, "label6");
+ this.label6.Name = "label6";
+ //
+ // txtId
+ //
+ resources.ApplyResources(this.txtId, "txtId");
+ this.txtId.Name = "txtId";
+ //
+ // label3
+ //
+ resources.ApplyResources(this.label3, "label3");
+ this.label3.Name = "label3";
+ //
+ // txtPort
+ //
+ resources.ApplyResources(this.txtPort, "txtPort");
+ this.txtPort.Name = "txtPort";
+ //
+ // label2
+ //
+ resources.ApplyResources(this.label2, "label2");
+ this.label2.Name = "label2";
+ //
+ // txtAddress
+ //
+ resources.ApplyResources(this.txtAddress, "txtAddress");
+ this.txtAddress.Name = "txtAddress";
+ //
+ // label1
+ //
+ resources.ApplyResources(this.label1, "label1");
+ this.label1.Name = "label1";
+ //
+ // panel2
+ //
+ resources.ApplyResources(this.panel2, "panel2");
+ this.panel2.Controls.Add(this.btnClose);
+ this.panel2.Controls.Add(this.btnOK);
+ this.panel2.Name = "panel2";
+ //
+ // btnOK
+ //
+ resources.ApplyResources(this.btnOK, "btnOK");
+ this.btnOK.Name = "btnOK";
+ this.btnOK.UseVisualStyleBackColor = true;
+ this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+ //
+ // panel1
+ //
+ resources.ApplyResources(this.panel1, "panel1");
+ this.panel1.Name = "panel1";
+ //
+ // AddServer6Form
+ //
+ resources.ApplyResources(this, "$this");
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnClose;
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.panel2);
+ this.Controls.Add(this.panel1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.MinimizeBox = true;
+ this.Name = "AddServer6Form";
+ this.Load += new System.EventHandler(this.AddServer6Form_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.panel2.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button btnClose;
+ private System.Windows.Forms.Button btnOK;
+ private System.Windows.Forms.TextBox txtRemarks;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.TextBox txtId;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtAddress;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.Label label13;
+ }
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.cs b/v2rayN/v2rayN/Forms/AddServer6Form.cs
new file mode 100644
index 00000000..37e3f565
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Windows.Forms;
+using v2rayN.Handler;
+using v2rayN.Mode;
+
+namespace v2rayN.Forms
+{
+ public partial class AddServer6Form : BaseServerForm
+ {
+ public AddServer6Form()
+ {
+ InitializeComponent();
+ }
+
+ private void AddServer6Form_Load(object sender, EventArgs e)
+ {
+ if (EditIndex >= 0)
+ {
+ vmessItem = config.vmess[EditIndex];
+ BindingServer();
+ }
+ else
+ {
+ vmessItem = new VmessItem();
+ ClearServer();
+ }
+ }
+
+ ///
+ /// 绑定数据
+ ///
+ private void BindingServer()
+ {
+
+ txtAddress.Text = vmessItem.address;
+ txtPort.Text = vmessItem.port.ToString();
+ txtId.Text = vmessItem.id;
+ txtRemarks.Text = vmessItem.remarks;
+ }
+
+
+ ///
+ /// 清除设置
+ ///
+ private void ClearServer()
+ {
+ txtAddress.Text = "";
+ txtPort.Text = "";
+ txtId.Text = "";
+ txtRemarks.Text = "";
+ }
+
+ private void btnOK_Click(object sender, EventArgs e)
+ {
+ string address = txtAddress.Text;
+ string port = txtPort.Text;
+ string id = txtId.Text;
+ string remarks = txtRemarks.Text;
+
+ if (Utils.IsNullOrEmpty(address))
+ {
+ UI.Show(UIRes.I18N("FillServerAddress"));
+ return;
+ }
+ if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
+ {
+ UI.Show(UIRes.I18N("FillCorrectServerPort"));
+ return;
+ }
+ if (Utils.IsNullOrEmpty(id))
+ {
+ UI.Show(UIRes.I18N("FillPassword"));
+ return;
+ }
+
+ vmessItem.address = address;
+ vmessItem.port = Utils.ToInt(port);
+ vmessItem.id = id;
+ vmessItem.remarks = remarks;
+
+ if (ConfigHandler.AddTrojanServer(ref config, vmessItem, EditIndex) == 0)
+ {
+ this.DialogResult = DialogResult.OK;
+ }
+ else
+ {
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
+ }
+ }
+ private void btnClose_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = DialogResult.Cancel;
+ }
+
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.resx b/v2rayN/v2rayN/Forms/AddServer6Form.resx
new file mode 100644
index 00000000..e3935dc5
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.resx
@@ -0,0 +1,486 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ groupBox1
+
+
+ Server address
+
+
+
+ 3
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ Bottom
+
+
+ txtPort
+
+
+ True
+
+
+ groupBox1
+
+
+ 4
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ btnOK
+
+
+ txtRemarks
+
+
+
+ 194, 21
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ AddServer6Form
+
+
+ label1
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ panel2
+
+
+ 12, 155
+
+
+ True
+
+
+ 53, 12
+
+
+ Fill
+
+
+ 194, 21
+
+
+ groupBox1
+
+
+ 6, 12
+
+
+ True
+
+
+ label3
+
+
+ 127, 154
+
+
+ True
+
+
+ 6
+
+
+ 7
+
+
+ groupBox1
+
+
+ 113, 12
+
+
+ 12, 93
+
+
+ 8
+
+
+ Server
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ 2
+
+
+ 547, 60
+
+
+ 89, 12
+
+
+ 278, 21
+
+
+ 359, 21
+
+
+ label6
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ *
+
+
+ groupBox1
+
+
+ * Fill in manually
+
+
+ 11
+
+
+ 10
+
+
+ 71, 12
+
+
+ 75, 23
+
+
+ panel1
+
+
+ txtId
+
+
+ 12, 62
+
+
+ 1
+
+
+ btnClose
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ &OK
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Password
+
+
+ 75, 23
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ txtAddress
+
+
+ 547, 10
+
+
+ Top
+
+
+ 0, 10
+
+
+ 2
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 547, 221
+
+
+ 2
+
+
+ groupBox1
+
+
+ 4
+
+
+ 3
+
+
+ 127, 27
+
+
+ 5
+
+
+ groupBox1
+
+
+ True
+
+
+ 127, 59
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Alias (remarks)
+
+
+ 5
+
+
+ groupBox1
+
+
+ 303, 17
+
+
+ $this
+
+
+ 6
+
+
+ &Cancel
+
+
+ 12, 31
+
+
+ Edit or add a [Trojan] server
+
+
+ 0
+
+
+ Server port
+
+
+ 4
+
+
+ 337, 158
+
+
+ groupBox1
+
+
+ 127, 91
+
+
+ 5
+
+
+ $this
+
+
+ 1
+
+
+ 0, 0
+
+
+ 1
+
+
+ label13
+
+
+ 3
+
+
+ 95, 12
+
+
+ label2
+
+
+ 0
+
+
+ panel2
+
+
+ 0, 231
+
+
+ 22
+
+
+ 7
+
+
+ 547, 291
+
+
+ 0
+
+
+ v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ $this
+
+
+ 396, 17
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 1
+
+
+ panel2
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx
new file mode 100644
index 00000000..d7642edd
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/AddServer6Form.zh-Hans.resx
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 取消(&C)
+
+
+ 服务器
+
+
+ *手填,方便识别管理
+
+
+
+ 83, 12
+
+
+ 别名(remarks)
+
+
+ 29, 12
+
+
+ 密码
+
+
+ 65, 12
+
+
+ 服务器端口
+
+
+ 65, 12
+
+
+ 服务器地址
+
+
+ 确定(&O)
+
+
+ 编辑或添加[Trojan]服务器
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
index c398397b..a96b32ab 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
@@ -37,11 +37,13 @@
this.label24 = new System.Windows.Forms.Label();
this.label23 = new System.Windows.Forms.Label();
this.panTlsMore = new System.Windows.Forms.Panel();
- this.label22 = new System.Windows.Forms.Label();
this.label21 = new System.Windows.Forms.Label();
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
+ this.label9 = new System.Windows.Forms.Label();
this.label20 = new System.Windows.Forms.Label();
this.txtPath = new System.Windows.Forms.TextBox();
+ this.cmbNetwork = new System.Windows.Forms.ComboBox();
+ this.label7 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label();
this.label18 = new System.Windows.Forms.Label();
this.label17 = new System.Windows.Forms.Label();
@@ -54,10 +56,7 @@
this.label11 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.cmbHeaderType = new System.Windows.Forms.ComboBox();
- this.label9 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
- this.cmbNetwork = new System.Windows.Forms.ComboBox();
- this.label7 = new System.Windows.Forms.Label();
this.cmbSecurity = new System.Windows.Forms.ComboBox();
this.txtRemarks = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
@@ -99,10 +98,7 @@
this.groupBox1.Controls.Add(this.btnGUID);
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.groupBox2);
- this.groupBox1.Controls.Add(this.label9);
this.groupBox1.Controls.Add(this.label8);
- this.groupBox1.Controls.Add(this.cmbNetwork);
- this.groupBox1.Controls.Add(this.label7);
this.groupBox1.Controls.Add(this.cmbSecurity);
this.groupBox1.Controls.Add(this.txtRemarks);
this.groupBox1.Controls.Add(this.label6);
@@ -136,8 +132,11 @@
this.groupBox2.Controls.Add(this.label24);
this.groupBox2.Controls.Add(this.label23);
this.groupBox2.Controls.Add(this.panTlsMore);
+ this.groupBox2.Controls.Add(this.label9);
this.groupBox2.Controls.Add(this.label20);
this.groupBox2.Controls.Add(this.txtPath);
+ this.groupBox2.Controls.Add(this.cmbNetwork);
+ this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.label19);
this.groupBox2.Controls.Add(this.label18);
this.groupBox2.Controls.Add(this.label17);
@@ -166,17 +165,11 @@
//
// panTlsMore
//
- this.panTlsMore.Controls.Add(this.label22);
this.panTlsMore.Controls.Add(this.label21);
this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
resources.ApplyResources(this.panTlsMore, "panTlsMore");
this.panTlsMore.Name = "panTlsMore";
//
- // label22
- //
- resources.ApplyResources(this.label22, "label22");
- this.label22.Name = "label22";
- //
// label21
//
resources.ApplyResources(this.label21, "label21");
@@ -193,6 +186,11 @@
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
//
+ // label9
+ //
+ resources.ApplyResources(this.label9, "label9");
+ this.label9.Name = "label9";
+ //
// label20
//
resources.ApplyResources(this.label20, "label20");
@@ -203,6 +201,25 @@
resources.ApplyResources(this.txtPath, "txtPath");
this.txtPath.Name = "txtPath";
//
+ // cmbNetwork
+ //
+ this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbNetwork.FormattingEnabled = true;
+ this.cmbNetwork.Items.AddRange(new object[] {
+ resources.GetString("cmbNetwork.Items"),
+ resources.GetString("cmbNetwork.Items1"),
+ resources.GetString("cmbNetwork.Items2"),
+ resources.GetString("cmbNetwork.Items3"),
+ resources.GetString("cmbNetwork.Items4")});
+ resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
+ this.cmbNetwork.Name = "cmbNetwork";
+ this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
+ //
+ // label7
+ //
+ resources.ApplyResources(this.label7, "label7");
+ this.label7.Name = "label7";
+ //
// label19
//
resources.ApplyResources(this.label19, "label19");
@@ -279,35 +296,11 @@
resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
this.cmbHeaderType.Name = "cmbHeaderType";
//
- // label9
- //
- resources.ApplyResources(this.label9, "label9");
- this.label9.Name = "label9";
- //
// label8
//
resources.ApplyResources(this.label8, "label8");
this.label8.Name = "label8";
//
- // cmbNetwork
- //
- this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.cmbNetwork.FormattingEnabled = true;
- this.cmbNetwork.Items.AddRange(new object[] {
- resources.GetString("cmbNetwork.Items"),
- resources.GetString("cmbNetwork.Items1"),
- resources.GetString("cmbNetwork.Items2"),
- resources.GetString("cmbNetwork.Items3"),
- resources.GetString("cmbNetwork.Items4")});
- resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
- this.cmbNetwork.Name = "cmbNetwork";
- this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
- //
- // label7
- //
- resources.ApplyResources(this.label7, "label7");
- this.label7.Name = "label7";
- //
// cmbSecurity
//
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -508,7 +501,6 @@
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.ComboBox cmbAllowInsecure;
- private System.Windows.Forms.Label label22;
private System.Windows.Forms.Panel panTlsMore;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.Label label23;
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.cs b/v2rayN/v2rayN/Forms/AddServerForm.cs
index 816b7013..bd80867b 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.cs
+++ b/v2rayN/v2rayN/Forms/AddServerForm.cs
@@ -5,10 +5,8 @@ using v2rayN.Mode;
namespace v2rayN.Forms
{
- public partial class AddServerForm : BaseForm
- {
- public int EditIndex { get; set; }
- VmessItem vmessItem = null;
+ public partial class AddServerForm : BaseServerForm
+ {
public AddServerForm()
{
@@ -166,7 +164,7 @@ namespace v2rayN.Forms
}
else
{
- UI.Show(UIRes.I18N("OperationFailed"));
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
@@ -180,6 +178,18 @@ namespace v2rayN.Forms
this.DialogResult = DialogResult.Cancel;
}
+ private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ string security = cmbStreamSecurity.Text;
+ if (Utils.IsNullOrEmpty(security))
+ {
+ panTlsMore.Hide();
+ }
+ else
+ {
+ panTlsMore.Show();
+ }
+ }
#region 导入客户端/服务端配置
@@ -207,9 +217,11 @@ namespace v2rayN.Forms
{
ClearServer();
- OpenFileDialog fileDialog = new OpenFileDialog();
- fileDialog.Multiselect = false;
- fileDialog.Filter = "Config|*.json|All|*.*";
+ OpenFileDialog fileDialog = new OpenFileDialog
+ {
+ Multiselect = false,
+ Filter = "Config|*.json|All|*.*"
+ };
if (fileDialog.ShowDialog() != DialogResult.OK)
{
return;
@@ -231,7 +243,7 @@ namespace v2rayN.Forms
}
if (vmessItem == null)
{
- UI.Show(msg);
+ UI.ShowWarning(msg);
return;
}
@@ -256,11 +268,10 @@ namespace v2rayN.Forms
{
ClearServer();
- string msg;
- VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out msg);
+ VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
if (vmessItem == null)
{
- UI.Show(msg);
+ UI.ShowWarning(msg);
return;
}
@@ -277,17 +288,5 @@ namespace v2rayN.Forms
}
#endregion
- private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
- {
- string security = cmbStreamSecurity.Text;
- if (Utils.IsNullOrEmpty(security))
- {
- panTlsMore.Hide();
- }
- else
- {
- panTlsMore.Show();
- }
- }
}
}
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.resx b/v2rayN/v2rayN/Forms/AddServerForm.resx
index e519eab6..6d3eec6c 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.resx
+++ b/v2rayN/v2rayN/Forms/AddServerForm.resx
@@ -171,7 +171,7 @@
True
- 285, 203
+ 285, 175
113, 12
@@ -202,16 +202,16 @@
NoControl
- 526, 165
+ 529, 207
- 65, 12
+ 119, 12
35
- 3)QUIC key
+ 3)QUIC key/Kcp seed
label24
@@ -232,7 +232,7 @@
NoControl
- 470, 99
+ 465, 146
89, 12
@@ -255,33 +255,6 @@
1
-
- True
-
-
- 205, 11
-
-
- 113, 12
-
-
- 32
-
-
- Default value true
-
-
- label22
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panTlsMore
-
-
- 0
-
True
@@ -307,7 +280,7 @@
panTlsMore
- 1
+ 0
@@ -337,10 +310,10 @@
panTlsMore
- 2
+ 1
- 284, 189
+ 284, 234
338, 35
@@ -360,11 +333,38 @@
2
+
+ True
+
+
+ 350, 32
+
+
+ 113, 12
+
+
+ 15
+
+
+ *Default value tcp
+
+
+ label9
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 3
+
True
- 469, 83
+ 464, 130
203, 12
@@ -385,10 +385,10 @@
groupBox2
- 3
+ 4
- 124, 125
+ 127, 169
True
@@ -409,13 +409,76 @@
groupBox2
- 4
+ 5
+
+
+ tcp
+
+
+ kcp
+
+
+ ws
+
+
+ h2
+
+
+ quic
+
+
+ 192, 28
+
+
+ 143, 20
+
+
+ 12
+
+
+ cmbNetwork
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 6
+
+
+ True
+
+
+ 9, 32
+
+
+ 167, 12
+
+
+ 13
+
+
+ Transport protocol(network)
+
+
+ label7
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ 7
True
- 9, 125
+ 9, 169
29, 12
@@ -436,13 +499,13 @@
groupBox2
- 5
+ 8
True
- 526, 147
+ 529, 189
59, 12
@@ -463,13 +526,13 @@
groupBox2
- 6
+ 9
True
- 469, 68
+ 464, 115
59, 12
@@ -490,13 +553,13 @@
groupBox2
- 7
+ 10
True
- 526, 130
+ 529, 172
59, 12
@@ -517,13 +580,13 @@
groupBox2
- 8
+ 11
True
- 469, 53
+ 464, 100
215, 12
@@ -544,13 +607,13 @@
groupBox2
- 9
+ 12
True
- 9, 201
+ 9, 243
23, 12
@@ -571,7 +634,7 @@
groupBox2
- 10
+ 13
@@ -580,7 +643,7 @@
tls
- 124, 197
+ 127, 239
143, 20
@@ -598,13 +661,13 @@
groupBox2
- 11
+ 14
True
- 282, 34
+ 282, 66
299, 12
@@ -625,10 +688,10 @@
groupBox2
- 12
+ 15
- 158, 58
+ 158, 100
True
@@ -649,13 +712,13 @@
groupBox2
- 13
+ 16
True
- 9, 34
+ 9, 66
95, 12
@@ -676,13 +739,13 @@
groupBox2
- 14
+ 17
True
- 9, 62
+ 9, 100
143, 12
@@ -703,7 +766,7 @@
groupBox2
- 15
+ 18
none
@@ -727,7 +790,7 @@
wireguard
- 124, 30
+ 127, 64
143, 20
@@ -745,22 +808,22 @@
groupBox2
- 16
+ 19
Bottom
- 3, 237
+ 3, 215
- 723, 234
+ 723, 281
21
- Keep the default value if it is not clear
+ Transport
groupBox2
@@ -774,33 +837,6 @@
2
-
- True
-
-
- 353, 175
-
-
- 113, 12
-
-
- 15
-
-
- *Default value tcp
-
-
- label9
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 3
-
True
@@ -826,70 +862,7 @@
groupBox1
- 4
-
-
- tcp
-
-
- kcp
-
-
- ws
-
-
- h2
-
-
- quic
-
-
- 195, 171
-
-
- 143, 20
-
-
- 12
-
-
- cmbNetwork
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 5
-
-
- True
-
-
- 12, 175
-
-
- 167, 12
-
-
- 13
-
-
- Transport protocol(network)
-
-
- label7
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 6
+ 3
aes-128-gcm
@@ -922,10 +895,10 @@
groupBox1
- 7
+ 4
- 127, 199
+ 127, 171
143, 21
@@ -943,13 +916,13 @@
groupBox1
- 8
+ 5
True
- 12, 203
+ 12, 175
95, 12
@@ -970,7 +943,7 @@
groupBox1
- 9
+ 6
True
@@ -997,7 +970,7 @@
groupBox1
- 10
+ 7
127, 114
@@ -1018,7 +991,7 @@
groupBox1
- 11
+ 8
True
@@ -1045,7 +1018,7 @@
groupBox1
- 12
+ 9
127, 85
@@ -1066,7 +1039,7 @@
groupBox1
- 13
+ 10
True
@@ -1093,7 +1066,7 @@
groupBox1
- 14
+ 11
127, 56
@@ -1114,7 +1087,7 @@
groupBox1
- 15
+ 12
True
@@ -1141,7 +1114,7 @@
groupBox1
- 16
+ 13
127, 27
@@ -1162,7 +1135,7 @@
groupBox1
- 17
+ 14
True
@@ -1189,7 +1162,7 @@
groupBox1
- 18
+ 15
Fill
@@ -1198,7 +1171,7 @@
0, 35
- 729, 474
+ 729, 499
3
@@ -1246,7 +1219,7 @@
Bottom
- 0, 509
+ 0, 534
729, 60
@@ -1344,11 +1317,14 @@
True
+
+ 25
+
6, 12
- 729, 569
+ 729, 594
Edit or add a [VMess] server
@@ -1387,6 +1363,6 @@
AddServerForm
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+ v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx
index 7c5b3623..489f5fd2 100644
--- a/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/AddServerForm.zh-Hans.resx
@@ -130,14 +130,14 @@
*手填,方便识别管理
- 不清楚则保持默认值
+ 底层传输方式(transport)
- 95, 12
+ 149, 12
- 3)QUIC 加密密钥
+ 3)QUIC 加密密钥/Kcp seed
95, 12
@@ -145,11 +145,23 @@
4)QUIC 加密方式
-
- 53, 12
+
+ 167, 12
-
- 默认true
+
+ 跳过证书验证(allowInsecure)
+
+
+ 223, 7
+
+
+ 350, 36
+
+
+ 143, 12
+
+
+ *默认tcp,选错会无法连接
149, 12
@@ -157,6 +169,27 @@
3)h2 host中间逗号(,)隔开
+
+ 127, 168
+
+
+ 127, 32
+
+
+ 211, 20
+
+
+ 9, 36
+
+
+ 107, 12
+
+
+ 传输协议(network)
+
+
+ 9, 168
+
65, 12
@@ -169,11 +202,20 @@
1)http host中间逗号(,)隔开
+
+ 9, 237
+
- 77, 12
+ 107, 12
- 底层传输安全
+ 底层传输安全(tls)
+
+
+ 127, 237
+
+
+ 282, 71
197, 12
@@ -182,28 +224,31 @@
*tcp或kcp或QUIC伪装类型,默认none
- 124, 58
+ 127, 102
334, 51
+
+ 9, 71
+
89, 12
伪装类型(type)
+
+ 9, 102
+
89, 12
伪装域名(host)
-
- 143, 12
-
-
- *默认tcp,选错会无法连接
+
+ 127, 67
113, 12
@@ -211,18 +256,6 @@
*随便选,建议(auto)
-
- 127, 171
-
-
- 211, 20
-
-
- 107, 12
-
-
- 传输协议(network)
-
127, 143
diff --git a/v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs b/v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs
new file mode 100644
index 00000000..7fe6a797
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs
@@ -0,0 +1,51 @@
+namespace v2rayN.Forms
+{
+ partial class BaseServerForm
+ {
+ ///
+ /// 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(BaseServerForm));
+ this.SuspendLayout();
+ //
+ // BaseServerForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(292, 273);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "BaseServerForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "BaseServerForm";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/BaseServerForm.cs b/v2rayN/v2rayN/Forms/BaseServerForm.cs
new file mode 100644
index 00000000..84711727
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/BaseServerForm.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Windows.Forms;
+using v2rayN.Mode;
+
+namespace v2rayN.Forms
+{
+ public partial class BaseServerForm : BaseForm
+ {
+ public int EditIndex { get; set; }
+ protected VmessItem vmessItem = null;
+
+ public BaseServerForm()
+ {
+ InitializeComponent();
+ }
+
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/BaseServerForm.resx b/v2rayN/v2rayN/Forms/BaseServerForm.resx
new file mode 100644
index 00000000..61360d3d
--- /dev/null
+++ b/v2rayN/v2rayN/Forms/BaseServerForm.resx
@@ -0,0 +1,1253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAACAAAAAwAA
+ AAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAADAAAAAwAAAAMAAAADAAAAAgAAAAIAAAACAAAAAQAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA
+ AAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAgAAAAKAAAACgAAAAsAAAAMAAAADQAAAA0AAAANAAAADQAA
+ AAwAAAALAAAACgAAAAoAAAAIAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAUAAAAHAAAACQAAAAwAAAAOAAAAEQAAABMAAAAVAAAAFwAA
+ ABgAAAAaAAAAGwAAABwAAAAcAAAAHQAAAB0AAAAcAAAAHAAAABsAAAAaAAAAGAAAABcAAAAVAAAAEwAA
+ ABEAAAAOAAAADAAAAAkAAAAHAAAABQAAAAQAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAAEAAAABwAAAAkAAAAMAAAAEAAA
+ ABMAAAAXAAAAGgAAAB4BAQAgAgEBIwMDASUDAgEmAwMBKAUEASkGAwMrCAUDKwgFAysIBQMsCAUDLAgF
+ AysIBQMrBgMDKwUEASkDAwEoAwIBJgMDASUCAQEjAQEAIAAAAB4AAAAaAAAAFwAAABMAAAAQAAAADAAA
+ AAkAAAAHAAAABAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA
+ AAQAAAAHAAAACgAAAA4AAAASAAAAFwAAABwAAAAgAwIBJAUDAicGBAIqBQUCKwICAi0FAwMvCQcEMQgH
+ BjACAwQwAAECMQYFBTURDgg5GRMJPBwWCz0cFgs9GRMJPBEOCDkGBQU1AAECMQICBDAIBwYwCQcEMQUD
+ Ay8CAgItBQUCKwYEAioFAwInAwIBJAAAACAAAAAcAAAAFwAAABIAAAAOAAAACgAAAAcAAAAEAAAAAgAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAUAAAAIAAAADQAAABIAAAAXAQAAHQIBASIDAgEmBgMDKgQD
+ AywAAAEtBQQEMRYRCTckHA0+OCoTSlU/G19sUCF1elomhoZjKZWOaCufkmstqphwL7Kccy+3nnQwup51
+ MLqccy+3mXEvspNsLaqOaSufh2QqlHtbJ4ZtTyJ1Vj8cXzgpE0okHA0+FhEJNwUEBDEAAAEtBAMDLAYD
+ AyoDAgEmAgEBIgAAAB0AAAAXAAAAEgAAAA0AAAAIAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAADwAA
+ ABUAAAAcAgIAIgQCAicFBAErBAMDLgUEBDAWEQo5QjEWT2BHH2d6WiaHkGssq6B2MMWtfzTbt4Y367+M
+ OfXEjzv5yZM8/M2WPv7PmD7/0Zk//9KaP//Tmz//05s//9OaP//Smj//0Jg+/82WPv3KlD37xZA7+cCM
+ OvW4iDjrroA126F2McWRbCyre1smh2FHH2dCMRZPFhEKOQUEBDAEAwMuBQQBKwQCAicCAgAiAAAAHAAA
+ ABUAAAAPAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAAAwAAAAYAAAAKAAAAEAAAABcBAQAeAwIBJAYDAyoBAAEsBwUEMSIaDDxSPBtaelomhpRt
+ LbGoezPVt4Y37MSQO/nMlj3/0Zk//9WcQP/YnkH/2J5B/9ieQP/XnkD/155A/9eeQP7XnkD+155A/tee
+ QP7XnkD+155A/teeQP7XnkD+155A/9eeQP/YnkD/2J5B/9ieQf/WnED/0po//82WPf/FkTv5uog47Kp8
+ M9WVbi6xelomh1E8GlshGQw8BwUFMgEAASwGAwMqAwIBJAEBAB4AAAAXAAAAEAAAAAoAAAAGAAAAAwAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAAEQAAABgBAQAgBAMBJgUD
+ AysDAgMvGRIKOVQ+G1p+XSiKm3MvvrKDNubCjjr5zZY+/tWcQP/XnUD/2J9B/tieQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/2J5A/9ifQf7XnUD/1ZxA/8+YPv7Djzv5s4M25pxyL799XCeLUj0bWhkT
+ CzkDAgMvBQMDKwQDASYBAQAfAAAAGAAAABEAAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA
+ AAQAAAAJAAAADwAAABcBAQAfBAMBJgMCASsIBgQwMSQRQ2xQIXOUbS2xr4A14cOOO/nPmD7/1p1A/9ie
+ QP/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/tieQP/WnUD/0Jg+/8SPO/mvgTXhlG0usWtOInQwIxJDCAYEMAMCASsEAwEnAQEAHwAA
+ ABcAAAAPAAAACQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADQAAABQBAQAdBQQBJQUFAiwGBQQwRDMXTXxc
+ J4ahdjHKuog48syVPf7VnED/155B/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/9Wc
+ QP/Nlj3+uok486B2Mcp6WiaGQjIWTgYFBDAEAwIsBAMBJQEBAB0AAAAUAAAADQAAAAcAAAADAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAACgAA
+ ABEAAAAaAwIBIwUDAioHBgQvQDAVSoFeKIynejLTv4w6+NCYPv/XnkD/155A/teeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7XnkD/0Jk+/8CNOvimejLTfl0njT0u
+ FEoGBQQvBQMCKgMCASMAAAAaAAAAEQAAAAoAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAA0AAAAWAQAAHwQDASgDAgIuNScSRHxbJoOnejPSwY06+dKa
+ P//YnkD+2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/2J5B/tObP//Bjjr5pXky03hZJoQzJhJEAwMCLgQDASgBAAAfAAAAFgAA
+ AA0AAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgAAAAQAAAAGQQC
+ AiQDAQIqFBAINWlOIWuedDDBvos59dGZP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie
+ Qf/Smj//vYs59ZtyL8JlSh9sEw8INQMBAioEAgIkAAAAGQAAABAAAAAIAAAAAwAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAQAAAAKAAAAEwIBAR0FAwInAQECLUg1GE2QaiyjtoU3686WPf/XnUD/2J5A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/zpc+/7SEN+yLZiqlRTMXTwEB
+ Ai4FAwInAgEBHQAAABMAAAAKAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADAAAABUDAgEgBAIBKBoU
+ CTVxUyNxpnkyzcWQO/zVnED/2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/1ZxA/8WQO/yidzHPak8hcxkTCTUEAgEoAwIBIAAAABUAAAAMAAAABQAA
+ AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAABgAAAA0AAAAXAwMBIgIBAis4KhNDj2ksm7iHN+7QmD7/155A/teeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/tCZ
+ Pv+2hTfviGQqnTUnEkUDAgIrAwMBIwAAABcAAAANAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAQEAGQQCAiQIBgMsXEQdWaB2
+ Mb3Djzr51ZxA/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tacQP/Cjjr5mnAvv1U/G1sIBgMtBAICJAEB
+ ABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAHAAAADwEBABkFAwIlCQcDLnVWJHCvgDXZzJY9/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/LlT3/qHwz2m1QInIJBwMvBQMCJgEBABkAAAAPAAAABwAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA8CAQAaAwIBJhIOBjJ/Xid+toY35tGZ
+ P//YnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7RmT7/sYI26HZX
+ JYARDQYzBAIBJgIBABoAAAAPAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AAYAAAAOAQEAGgYFASYjGgw4jGcrkLuJOO7Tmz//2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7UnD//toY374FeKJIgGAs5BgUBJwEBABoAAAAOAAAABgAA
+ AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADQIBABkBAQEkLCENOpJrLZnAjTrz1Js//9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/VnED/u4k49IdjKZwpHw07AgEBJAIBABkAAAANAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA
+ AAwBAQAXBgQBJSwiDjmXby2fw4469tadQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vYs594tmKqEqHg07BwUBJQEB
+ ABcAAAAMAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAQEAFgMCASImHAw2lm4umMSPO/bVnED+155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/VnED+vos59ohkKZsiGgw4AwIBIgEBABYAAAAKAAAABAAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQEB
+ ABMGBAIhFQ8IMJJrLY/Djzrz1p1A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vIo59INh
+ KZMUDggxBgQCIQEBABMAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAQBQICHQgGAyqHYyl8wI067tWcQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/uIc38HhYJYAIBgMrBQICHQAAABAAAAAGAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQQD
+ ARoEAwEnf10mbr2LOebVnED/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/UnD//s4M26HBSInEFAwEnBAQBGgAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAoFAwIWAQABI2hNIFW5hzjY05o//9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/RmT//qn0021tCHFoDAQEjBAMCFgAA
+ AAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAwICEgAA
+ AB9GNBU/roA0vdCZPv7XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP7Mlj3/nXIwwTwsEkEAAAEfAwICEgAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0GBAMbHRUJLaF2MJnMlT35155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Djzv6jGcrnhoT
+ CC8HBAMbAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJBgQDFgAA
+ ACOGYiluxpE779adQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQ//cq1n/2qVN/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9adQP+5hzfwc1QjcwAAACQGAwMWAAAACQAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABgIBARAAAAEdW0MbR7mIN83Um0D/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/2KFH/+XCiP/pypf/26dS/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZ
+ P/+nejPRTjkYSgAAAR0CAQEQAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMBAAEKBgMDGBwU
+ CSypfDOh0Jg+/deeQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Zokf/6cqX//jw5P/qzZ7/2aNL/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155B/seSPP2SayynGBEILQcDAxgBAAELAAAAAwAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAABwcEAxECAAIghWEoZciSPOvXnUD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/154//9iiR//pyZf//Pr3//n06//mw4v/2aRM/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/1p1A/reHN+1uUSFqBAICIAcEAhEAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAwALAAAAGE05
+ Fzm6iDe/1ZtA/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f7+//jv
+ 4//nxY7/2aJJ/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0Jg+/6F3McVBMBQ9AgIAGAID
+ AAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABggGAhIHBQMgnHMvf8+YPvbXnkH/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeP//Yokf/6cmX//z69//9/f7//f39//jw4v/kvX//2aJI/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/YnkH/wY4694JhKIQIBgMhCAYCEgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEBAELAQEAGFxC
+ G0DCjjrR151A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39
+ /f/9/f3//f39//bs3P/kv4L/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Tmz//q3401Us3
+ F0MCAgAYBQMBCwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABQkHARACAgEgpXgxh9KaP/rYnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//fz8//br2f/huHX/2KFF/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/FkDv7iWQpjQQCASEJBwERAAAABQAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAwAJAAAAFWhL
+ H0HGkTzS2J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6
+ +P/9/f3//f39//39/f/9/f3//f39//Xo1P/iuXf/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSb
+ QP+tfzTWVD0ZRQAAABUDAwAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABAsIAw4HBQIdpnkygNObP/nYnkH+155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//fz6//Tl
+ zv/fs2v/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/sSQO/qJZCmHCQYCHgsIAw4AAAAEAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGBQEHBgYAE1Q+
+ GTTFkTvI155B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ
+ l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Pky//gtW3/159C/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/0po//6p8M85FMRQ4BwcBEwYFAQcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwkGBAsCAAEZnHMvatObP/LYnkH/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//Pv4//Hfwf/er2H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/wI069H5cJnIDAgIZCQYECwAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFCgQFDzUn
+ ESfAjTqt155B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii
+ R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv5//Hfwv/esWb/155B/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP7QmD7/n3YwtCwhDioLBQYQAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoJAQgAAAAShmIoTM+YPt/YnkH/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//Pn1/+/Ztv/drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9adQP+2hjfkaE0gUgAA
+ ABIJCQEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEw0GCw4K
+ BRmygjWC1p1A+teeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pn2/+/Y
+ tf/drV3/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/2J5B/siTPPuOaSuKDwsFGxMNBgsAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUEAAQEBAANRjQVKMiSPLrYnkH/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+/fx/+3Uq//bqVX/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0po//6h7
+ M8I2JxErBgUADQUEAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgoFBgYE
+ AhGOaCpK05s/5tieQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f7/+/fy/+zSqP/bqVX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUD/vIk56m1PIVMJBQMSDgoEBgAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUEQMIAAAAFLSENnvXnUH5155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+vTs/+rOof/apk//154//9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie
+ QP/Ikzz6jWgrhAAAABUUEQMIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxcP
+ Bws+LBMhyJI8rdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3/+vTs/+rMnP/apU7/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tKZP/+keDK0MSMPJRcPBwsAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQADAAAADIRgJznRmT/S2J9B/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+fHm/+jJ
+ lv/Zo0r/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/1p1A/7SFNthlSh5AAAAADAABAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARsV
+ BgUAAAAMpXkyV9acQOvYnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+PLm/+fGj//Zo0r/154//9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/wY06735cJl4AAAANGRQFBgAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIxcMBwwHBRK7iTl82J5B/NeeQf7XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/fz/9+7g/+bDi//YoUb/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9ieQf7LlT38lGwthg8KBhQiFgsHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEQCAcIQS4UG8iSPKLZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pz/9+7g/+S/gv/YoUf/154//9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tGZPv+leTGsMyQPHRMK
+ CAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABkVw0ACwoAAgAAAAhcQxwizpg+wdmfQf/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6
+ +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/Pz/9erX/+S+gP/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/1ZxA/7CBNchCMBQmAgEACAoKAAJLQQoAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAcEQsCBwAFCodiKTPUmz/c2J5B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/9uvZ/+K5
+ dv/YoEX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUH/uog34GRK
+ HjoLBAYKGxALAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8VCgMLBgQLpXkxTNadQO7YnkH/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ
+ l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8+TM/+G3c//Xn0L/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9ieQf/Cjjrwf10mVQ4IBQweFAoDAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAIBcJAwsIAg21hDZj155A9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/8+/r/9ObR/9+zaf/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8eS
+ PPeOaCtsDgoEDR8WCQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVDgcEAAABDL+MOXfXnkH4155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii
+ R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8d/C/9+yaf/Xn0H/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/y5U9+phwLoAAAAIMFQ4HBAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAASAfAQQAAAAMxpA7idieQfzXnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/8+/n/8uDF/92vYv/Xn0L/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Plz79oHYwkAAAAAwfHgEEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABKxoQBQwKBQ/JkzyX2J5B/tee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/8+/n/79m2/92t
+ X//XnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZP/+leTKeDAkFEigYDwUAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAE4IxUFRC8UE82WPaTYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/8+vf/8Nu6/9ysW//Xn0H/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD+05s//6x+M6s0JBEYNiMTBgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAS8eEAZcQhwXz5g+rtie
+ Qf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/7+fX/7NOq/9upV//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Um0D/sIE0tEYzFhwvHhEGAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAABKRoPBmlMIBnQmT+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PP/7dWu/9uoVf/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/tWcQP+0gza7UzoYHioaDwYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAE5Kg4FcVMiGtGZ
+ PrjYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/69u//6s2d/9qmT//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+1ZxA/7WENr5aQBkfOSsPBgAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAADwsDwV1VSIa0Zk+uNieQf/XnkD+155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/69vD/69Ci/9qm
+ UP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP7VnED/tYU2vltCGh89LRAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCATBHNU
+ IhjSmj+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/58+n/6MiU/9qkTP/Xnj//155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tWcQP+1hTa6WUAaHTUh
+ EwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKRcEa04gFdGZP67YnkH/155A/teeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /v/58uj/6MiU/9mkS//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD+1ZtA/7ODNbRSPRcaPSYWBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFM0
+ HgRbQhwQ0Jg+pdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/37+H/5cGH/9miSP/Xnj//155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Tmz//sIE0q0Uy
+ FhVKLxoEAAAAAAAAAAAAAAAAAAAAAAAAAACCRD4AYC4xAyQXDArPlz6W2J5B/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//YoUf/6cmX//z6
+ 9//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PT/+fLo//38+//9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/37uD/5cKI/9iiSP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/tKaP/+rfTOdHRMKDlQpKwNpNzIAAAAAAAAAAAAAAAAAAAAAACQb
+ CgBVPhcCAAAABs2WPYfYnkH8155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/154//9ihR//pyZf//Pr3//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f7///ft3v/pypn/9ejT//38+//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/P/27Nv/471//9ih
+ Rf/Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/0Jg+/ah7
+ Mo4AAAAHUDsWAiMaCQAAAAAAAAAAAAAAAAAAAAAAPzMNADUvCgEAAAAFyZM9ddieQfnYnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ
+ l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/96wZP/ht3P/8+TM//z7
+ +v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/P/26tj/47x9/9igRP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Nlj36pHgxfQAAAAU2MAoBPzMNAAAAAAAAAAAAAAAAAAAA
+ AABuUB4AVj8XARsTBQbGkDte2J5B9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//3+///26tn/3a5f/9igQ//htnD/8+LJ//z7+f/9/f7//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38
+ +v/159P/4rh0/9ifQ//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8mT
+ PPadcy9nIBcHBlE7FgFmShsAAAAAAAAAAAAAAAAAAAAAAH1bIgBrTh0BKB0JBcCMOkbYnkHu2J5B/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii
+ R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150+/9ef
+ Qv/gs2v/8d/B//z6+P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38+//05c7/4bdy/9efQv/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/xZE78JduLU8rHwoFYEYaAW1QHgAAAAAAAAAAAAAA
+ AAAAAAAAi1M4ALluSwASABEDsYI2LNedQN3Zn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9efQv/fsWf/8d6///z59v/9/f7//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//z7+P/z48r/37Nq/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie
+ Qf/AjTnghGIoMhsGEgOPVToAckQuAAAAAAAAAAAAAAAAAAAAAAB/dAsAvasRAAARAAKacC4Y1ZxAwdmf
+ Qf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed
+ P//XnkD/155A/9eeQf/esGT/79m3//v49P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//z7+f/x4MP/37Np/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/1ZxA/7mHN8dwUiIbCh4AArGgEAB6bwoAAAAAAAAA
+ AAAAAAAAAAAAAEZHAAAADwAATT8MAolkKQ7Smj+g2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9efQf/drV7/7tex//v3
+ 8P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//z59v/w3sD/3a5g/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Smj//soI2qWhMIBBZSA8CABAAAEdIAAAAAAAAAAAAAAAAAAAAAAAAAAAAALR4PACfZzcBRTAXBs+Y
+ PnjZn0H92J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u
+ YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/cq1n/69Gl//r28P/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//v6
+ 9v/v2rf/3q5h/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/s6XPf2pfDOBOygVCIpZMAKVYzIAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAt25JAL9yTQEAAAAAyJI8TtieQezYn0H/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/bqVT/69Gl//r17P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//v48//u2LT/26lW/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/YnkH+yJI87590MFQAAAABlVk8AY5WOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADixB0A/+AeAAAA
+ AADAjDkt151A0tmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq
+ 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/aqFP/6cuZ//n07P/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//v49P/s0qj/3KpY/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edQP+/jDnXlGwsMgAAAADjyBsAy7AaAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcPx4AfU8rAqF1MBHVnD+r2Z9B/9ieQP7XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/apU3/6cyb//nx5v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//r27v/s0af/2qVO/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/YnkD+1JtA/7eGNrF3VyQWdksoAlM5GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdO
+ GQCMdxUBAAAAAtGZPnTZn0H52J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+
+ ///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//apEz/5sSL//ny
+ 5//9/Pz//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f3+//v48v/py5r/2qdS/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQP7Olz76rX40fAAAAAONeBUBZU0ZAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArXY3AMqKQQAtFhICyJM9PtieQejYnkH/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yokj/58eR//fv4f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//nz
+ 6f/pyZf/2aNL/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/2J5B/8aRO+ueczBGOSAVAq53OACZaDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACSghAAtrAHAAADAAGwgDYV1p1AutmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ P//Yokf/5L6B//ft3v/8/Pr//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//r17f/nxpH/2qVN/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/u4k4wIJfKBgbGAABop0GAId4
+ DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+dEsAvWpTAXdSJgXSmj972Z9B/Nie
+ QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6
+ +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoEX/5cGF//br2f/9/fz//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//jw4//mxIz/2KJH/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/2J5B/s+YPv2xgjWDWz0cB6pgSQGkZEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAO+CbgD+iXYA//+JAMuUPTvYnkHf2J9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/YoET/4bh1//Xo1P/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//ny6P/lwof/2aNJ/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/xZA746J3MUH//4YA8oJxAd55
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJMKACQVDgBtIM3Etad
+ QKvZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KFH/+nJ
+ l//8+vf//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoET/4rp5//Tn
+ 0P/9/Pv//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//bs3P/kvX//2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/2J5A/tObP/+6iDiwiGMrFZpcOQFrRyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAnVxAALlxSAEAABMB0po/XtmfQfTYnkH/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ Qf/Xn0L/159C/9efQv/Xn0L/159C/9efQv/Zo0n/6cqY//z6+P/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0L/37Jn//Lgxf/8+vf//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//fu
+ 4P/kvX7/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH+y5U99q6ANGUGABcCn2E+AY1T
+ OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyiycAyJ0rAB4k
+ AAHDjzse155BydmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2qZQ/+K5dv/kvoH/5L6A/+S+gP/kvoD/5L6A/+XA
+ hf/v27r//Pv5//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Yn0L/4LNr//LgxP/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Tn0v/iuXb/2J9D/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9WdQP/AjTrNmXEuITk1AAGphSUAm3kiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKfU4AynRVAaNvNQPUmz922Z9B+tifQP7XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ P//gtGz/9OjU//r38P/69u//+vbv//r27//69u//+vbw//v59f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0H/3a5g/+/auP/8+fT//f3+//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//fz8//Xo1P/iuHT/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D+zpc9+7OENn10UCYFv25PAbRw
+ RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+B
+ gwD/i5AA//91AMuWPSzYnkHS2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/150//+C2b//37uD//f7+//39/v/9/f7//f3+//39
+ /v/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed
+ P//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/Xn0H/3a9h/+/Ztv/7+fX//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv6//LiyP/fs2v/159B/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9adQP/EkDrWo3gxMf//ZAC2Wl0AqlVWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZaPQDLZWYBjmcpBdWcP37Zn0H62J9A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnT//4LZv//fu3//9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KtZ/+3U
+ rf/69/D//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//Pv5//Lhxv/fsmj/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/z5g++7eGNoRoSx4GolBQAX9L
+ MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAwXFRANB5VwBGAEQBzZc+KNieQdLZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edP//gtm//9+7f//39/v/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u
+ YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KpZ/+zSqf/69vD//f3+//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pr3//Dd
+ vf/er2P/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9adQP/FkDvVpnozLFoORQG3a00ArGRJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/mswA87wPAP/AWgDCjzUD1p1Ac9mf
+ QfjYn0D+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/150//+C2b//37t///f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/26hT/+rPov/69Oz//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39
+ /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pr2/+/bu//drV//155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0D+z5g++bmIN3mMaSUE/+FqAPSv
+ DgD/v/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD//wAA//8AAP/+agDTmkEf2J5Bv9mfQf/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnT//4LZv//fu4P/9/v7//f3+//39
+ /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//v7///br
+ 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/26hU/+rMnf/59Or//f3+//39
+ /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39
+ /v/9/f7/+/n1/+7Xs//drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9WdQP/EkDvDrH00Iv//dwD//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGdVEA1YJTAF4h
+ PQHVnEBW2Z9B7difQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeP//gtW3/9erY//z59v/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5
+ 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+vf/9OfS/92tX//XnT//155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/2qVP/+nJlv/37+H//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5
+ 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX/+fPq/+zSqP/bp1P/154//9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+zZY97riHN1pbJTECtm9HAbBo
+ SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+sVQD/3nIAwXpDAceROw3XnkGd2Z9B/tifQP7XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9upV//mxYz/6syb/+rM
+ m//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM
+ nP/mw4n/2qZP/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2qVO/+O9
+ f//pzJr/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM
+ m//qzJv/6syb/+rMm//qzJv/58WO/9yrW//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/tObP//CjjqhnnIvD7RzPgHLh0UAwIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfK
+ HgDu0xsA5aVJANKZPy7YnkHO2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155B/9igQ//YoET/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig
+ Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBE/9ifQ//XnkH/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159C/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig
+ Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igRP/YoET/159C/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnkD/yZM80bKCNjHVmkcA9tkcAOfK
+ HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaSNADwpkgBpXwvA9acP2HZn0Hy2J9B/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/2J5B/8+YPvO9iThliGQpBMuNPQG8ijEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA6s8bAOXPFgD//wAAzZc8C9edQJPZn0H62J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9efQP7Tmz/7xJA7l6h9MQz//wAA5ccWAOrP
+ GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6pWAP+wWQD//0MA0Jg/JNif
+ Qb/Zn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/YnkD+1p1A/8qUPcG0hDcn//9RAP+0WwD/qlYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwIs2AMaKPABOQBEB151AP9mfQdrZn0H/2J5A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQf/Plz7cwIw5QlxRGwHWlEAAyJE4AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP+7
+ dgDXik8B151BW9mfQejZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Yn0D/0Zo/6cSPO16dYz0C/+KKAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gIAA/3yEAP+6egDVmj8H2J5Ac9mfQfHYn0H+155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSbP/LJkjx2sYA1CP/ikQD/fIQA/4CAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADAgEAAxIVAAKJbQAHOlj4O2J5AitmfQfbYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9if
+ QP7VnD/3ypQ9jbKAOA++bkkBwoRAAMGBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/gEAAxYRCAP///wDOmD4U2J9Bldmf
+ QfrYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0H+155A+82XPZi3hzgW//9PAMeGQwC/gEAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADSpiwA0qoqAMabGQDUmj8Z2J5BntmfQfrYn0H+155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/tee
+ QPrRmT6gwo07GvrDIgDUrCoA1qktAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD/4CcA/+seAMN8
+ TwDZnkEY2Z9BltmfQffYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7XnkD30po/mMiTPBm6dUkA/+0eAP/gJwD//wAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3SsA//YVAPHUHgDVm0EU2Z5Bi9mfQfLZn0H/2J5A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D/2J5A8tOa
+ P4zGkD0V//8qAP/4FQD/4iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ AAB+AIEAyZQ3AP//SADUmkAO2Z9BdNmfQejZn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD+2J5B/9edQOnTmj91xo88D///KgDKlTcAfgCBAP//AAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6ekAAv4FAAJ5YPwHJlj4G2Z5BXNmf
+ QdvZn0H/2J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159A/tifQf/YnkHb1Js/XbiI
+ NwepYUMBwoNAAL19QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAC/gEAAv4BAALdxQQHXnEED2J9BQNmfQcHZn0H72J9B/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9ifQf/Zn0H72J9BwdSdQEHPlz0DvXVEAb+AQAC/gEAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/qlUA/6pVAP+t
+ WQDBjC4A2Z5BJdmfQZTZn0Hy2Z9B/9ifQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Yn0H/2Z9B8tmfQZTXnUAlqHoqAP+v
+ WQD/q1UA/6tVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAOCaRQAIAEwA155AC9ieQWLZn0HQ2Z9B/dif
+ Qf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/Yn0H+2Z9B/dmfQdDYnkFi155ACwoAUwDinEUA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/6tWAP+sVgD/k2MAx4tCA9ieQS/YnkGg2Z9B7tmfQf/Yn0D+155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQe7YnkGg2J5BL8eLQgP/k2MA/6xWAP+r
+ VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAypc1APXnDwC4eD4Bn1w2ANab
+ Qg/Zn0FZ2Z9BxNmfQfjZn0H/2J5B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mf
+ QfjZn0HE2Z9BWdabQg+fXDYAuHg+AfXnDwDKlzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaVMQDjzRMAxopOAeGlUAHZoEEh2J5Bd9mfQdXZn0H72Z9B/9if
+ QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQfvZn0HV2Z9BdtmgQSHhpVABxopOAePNEwDGlTEAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+q
+ VQD/q1gA7dAbAYdJLQDbnUUE2J9CKtmfQYLZn0HV2Z9B+tmfQf/Yn0D/155A/teeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD/2J9B/9ifQfrZn0HV2Z9Bg9if
+ QirgoEYEh0ktAO3QGwH/q1gA/6pVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/f4EA/3+BAP+fcgEMAIwA1pxIBNme
+ Qi7Zn0F72Z9BztmfQffZn0H/2J9B/tieQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie
+ QP7Yn0D+2J9B/9mfQffZn0HO2Z9Be9qfQi7ZlkMFAgCRAP+ecgH/f4EA/3+BAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD/gIAA/4CqANp/XADzpFQB/9emAN6gQQTZn0Ae2Z9CY9mfQbDZn0Hj2Z9B/dif
+ Qf/YnkH/2J5A/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD+2J5A/9ieQf/Yn0H/2Z9B/dmfQePZn0Gw2Z9CY9mfQB7eoEEE/+ezAPOm
+ VQHaf1wA/4CqAP+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+
+ hAD/foQA/6BzAY5EQwC6cUYB2Z9DEtmfQT7Zn0GB2Z9Bv9mfQezZn0H62Z9B/9ifQf/Yn0H+155A/tee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee
+ QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD+2J5B/9ifQf/Zn0H62Z9B7Nmf
+ Qb/Zn0GB2Z9BPtmfQxK6cUYBjkRDAP+gcwH/foQA/36EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA0KMtAN+pPwD/uGIAAAAAAOGi
+ SATbnkMV2aBBQtmfQXnZn0Gx2Z9B1tmfQfDZn0H+2Z9B/9mfQf/YnkH/2J5A/9eeQP/YnkD+155A/tee
+ QP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP/XnkD/2J5B/9if
+ Qf/Zn0H/2Z9B/tmfQfDZn0HW2Z9BsdmfQXnZoEFC255DFeGiSAQAAAAA/7hiAN+pPwDQoy0A//8AAP//
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+ZbAD/iHsA/6BoAbohkgCBMUIA3aFBAdmeQBHYnkEt2Z9AUtqf
+ QX/Zn0Gm2Z9ByNmfQePZn0Hx2Z9B9tmfQfrZn0H+2Z9B/9ieQf/YnkH/2J5B/9ieQf/YnkH/2J5B/9ie
+ Qf/YnkH/2Z9B/9mfQf7Zn0H62Z9B9tmfQfHZn0Hj2Z9ByNmfQabZn0F+2Z9AUtieQS3ZnkAR3aFBAYEx
+ QgC6IZIA/6BoAf+IewD/mWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADSgFMA635uANaMSgD/jXgB7qBwAQAAIAD//2kA46NHBNueRAvYn0MW2Z9CLtmfQEnZn0Fj2Z9Bedie
+ QYzZn0Ge2Z9BrNmfQbbZn0G82Z9Bv9mfQb/Zn0G82Z9BttmfQazZn0Ge2J5BjNmfQXnZn0Fj2Z9ASdmf
+ Qi7Yn0MW255EC+GkSgP///8AAAAbAO6gcAH/jXgB1oxKAOt+bgDSgFMAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/p1oA/94hAP+Z
+ awH/rGAB/2SnAP/B6gC9f2oAqngnAcCcGgDRpzoA0ao7AdudPwfZnD8M2KBBEdmgQxTaoEIX2qBCF9mg
+ QxTYoEER2Zw/DNudPwfRqjsB0ac6AMCcGgCqeCcBvX9qAP/B6gD/Y6YA/6xgAf+ZagH/3iEA/6daAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA/6NgAOOUUADLkzkB951ZAP/P
+ MQD/mW4B9qlcAbJxQwGhWz8Bj0U8AX0yOgF9MjoBj0U8AaFbPwGycUMB9qlcAf+ZbgH/zzEA951ZAMuT
+ OQHjlFAA/6NgAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA////////4AAAB///////////////+AAAAAAf/////////////+AAAAAA
+ B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////4AAAAAAAAAf//////////8AA
+ AAAAAAAD//////////8AAAAAAAAAAP/////////+AAAAAAAAAAB/////////+AAAAAAAAAAAH///////
+ //AAAAAAAAAAAA/////////AAAAAAAAAAAAD////////wAAAAAAAAAAAA////////wAAAAAAAAAAAAD/
+ //////4AAAAAAAAAAAAAf//////8AAAAAAAAAAAAAD//////+AAAAAAAAAAAAAAf//////AAAAAAAAAA
+ AAAAD//////gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAA
+ AAAAAAAAAAD////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAf///4
+ AAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA
+ B///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAAf//gAAAAAAAAAAA
+ AAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAA
+ AAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/gA
+ AAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAA
+ AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA
+ AAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAA
+ AAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AA
+ AAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA
+ AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAA
+ AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA
+ AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AA
+ AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA
+ AAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAA
+ AAAAAAAP8AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA
+ AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAA//QAAAAAAAAAAAAAAAAAAv/4A
+ AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA
+ AP//QAAAAAAAAAAAAAAAAAL//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAA
+ AAAAAAP//9AAAAAAAAAAAAAAAAAL///gAAAAAAAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAf///QAAAAA
+ AAAAAAAAAAAv///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////0AAAAAAAAAAAAAAAC////+
+ AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAB
+ /////9AAAAAAAAAAAAAAC//////gAAAAAAAAAAAAAAf/////9AAAAAAAAAAAAAAv//////gAAAAAAAAA
+ AAAAH//////9AAAAAAAAAAAAAL///////gAAAAAAAAAAAAB///////8AAAAAAAAAAAAA////////gAAA
+ AAAAAAAAAf///////8AAAAAAAAAAAAP////////wAAAAAAAAAAAP////////+AAAAAAAAAAAH///////
+ //4AAAAAAAAAAH//////////AAAAAAAAAAD//////////8AAAAAAAAAD///////////gAAAAAAAAB///
+ /////////AAAAAAAAD////////////4QAAAAAAh/////////////4AAAAAAH//////////////gAAAAA
+ H///////////////gEACAf////////////////AAAA//////////////////////////////////////
+ //////////////////////////////////8=
+
+
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
index 13ce7b39..86a73954 100644
--- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs
@@ -30,12 +30,14 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
- this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.scMain = new System.Windows.Forms.SplitContainer();
this.lvServers = new v2rayN.Base.ListViewFlickerFree();
this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuAddVmessServer = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuAddVlessServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuAddShadowsocksServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuAddSocksServer = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuAddTrojanServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuAddCustomServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuAddServers = new System.Windows.Forms.ToolStripMenuItem();
this.menuScanScreen = new System.Windows.Forms.ToolStripMenuItem();
@@ -55,13 +57,14 @@
this.menuTcpingServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuRealPingServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsbTestMe = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.menuExport2ClientConfig = new System.Windows.Forms.ToolStripMenuItem();
this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem();
this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem();
this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem();
- this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton();
this.qrCodeControl = new v2rayN.Forms.QRCodeControl();
+ this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton();
this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components);
this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem();
@@ -70,10 +73,13 @@
this.menuGlobalPAC = new System.Windows.Forms.ToolStripMenuItem();
this.menuKeep = new System.Windows.Forms.ToolStripMenuItem();
this.menuKeepPAC = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuKeepPACNothing = new System.Windows.Forms.ToolStripMenuItem();
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
this.menuCopyPACUrl = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
this.bgwScan = new System.ComponentModel.BackgroundWorker();
@@ -98,6 +104,7 @@
this.tsbSub = new System.Windows.Forms.ToolStripDropDownButton();
this.tsbSubSetting = new System.Windows.Forms.ToolStripMenuItem();
this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
@@ -107,20 +114,22 @@
this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem();
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
this.tsbCheckUpdatePACList = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
this.tsbCheckClearPACList = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton();
this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsbV2rayWebsite = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
this.tsbLanguageDef = new System.Windows.Forms.ToolStripMenuItem();
this.tsbLanguageZhHans = new System.Windows.Forms.ToolStripMenuItem();
this.tsbPromotion = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();
this.tsbClose = new System.Windows.Forms.ToolStripButton();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
- this.splitContainer1.Panel1.SuspendLayout();
- this.splitContainer1.Panel2.SuspendLayout();
- this.splitContainer1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
+ this.scMain.Panel1.SuspendLayout();
+ this.scMain.Panel2.SuspendLayout();
+ this.scMain.SuspendLayout();
this.cmsLv.SuspendLayout();
this.cmsMain.SuspendLayout();
this.groupBox1.SuspendLayout();
@@ -129,25 +138,27 @@
this.tsMain.SuspendLayout();
this.SuspendLayout();
//
- // splitContainer1
+ // scMain
//
- resources.ApplyResources(this.splitContainer1, "splitContainer1");
- this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
- this.splitContainer1.Name = "splitContainer1";
+ resources.ApplyResources(this.scMain, "scMain");
+ this.scMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+ this.scMain.Name = "scMain";
//
- // splitContainer1.Panel1
+ // scMain.Panel1
//
- this.splitContainer1.Panel1.Controls.Add(this.lvServers);
+ resources.ApplyResources(this.scMain.Panel1, "scMain.Panel1");
+ this.scMain.Panel1.Controls.Add(this.lvServers);
//
- // splitContainer1.Panel2
+ // scMain.Panel2
//
- this.splitContainer1.Panel2.Controls.Add(this.qrCodeControl);
- this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);
+ resources.ApplyResources(this.scMain.Panel2, "scMain.Panel2");
+ this.scMain.Panel2.Controls.Add(this.qrCodeControl);
+ this.scMain.TabStop = false;
//
// lvServers
//
- this.lvServers.ContextMenuStrip = this.cmsLv;
resources.ApplyResources(this.lvServers, "lvServers");
+ this.lvServers.ContextMenuStrip = this.cmsLv;
this.lvServers.FullRowSelect = true;
this.lvServers.GridLines = true;
this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
@@ -158,6 +169,7 @@
this.lvServers.Name = "lvServers";
this.lvServers.UseCompatibleStateImageBehavior = false;
this.lvServers.View = System.Windows.Forms.View.Details;
+ this.lvServers.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvServers_ColumnClick);
this.lvServers.SelectedIndexChanged += new System.EventHandler(this.lvServers_SelectedIndexChanged);
this.lvServers.Click += new System.EventHandler(this.lvServers_Click);
this.lvServers.DoubleClick += new System.EventHandler(this.lvServers_DoubleClick);
@@ -165,11 +177,14 @@
//
// cmsLv
//
+ resources.ApplyResources(this.cmsLv, "cmsLv");
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuAddVmessServer,
+ this.menuAddVlessServer,
this.menuAddShadowsocksServer,
this.menuAddSocksServer,
+ this.menuAddTrojanServer,
this.menuAddCustomServer,
this.menuAddServers,
this.menuScanScreen,
@@ -189,201 +204,219 @@
this.menuTcpingServer,
this.menuRealPingServer,
this.menuSpeedServer,
+ this.tsbTestMe,
this.toolStripSeparator6,
this.menuExport2ClientConfig,
this.menuExport2ServerConfig,
this.menuExport2ShareUrl,
this.menuExport2SubContent});
this.cmsLv.Name = "cmsLv";
- this.cmsLv.OwnerItem = this.tsbServer;
- resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAddVmessServer
//
- this.menuAddVmessServer.Name = "menuAddVmessServer";
resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
+ this.menuAddVmessServer.Name = "menuAddVmessServer";
this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click);
//
+ // menuAddVlessServer
+ //
+ resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
+ this.menuAddVlessServer.Name = "menuAddVlessServer";
+ this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click);
+ //
// menuAddShadowsocksServer
//
- this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer");
+ this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click);
//
// menuAddSocksServer
//
- this.menuAddSocksServer.Name = "menuAddSocksServer";
resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
+ this.menuAddSocksServer.Name = "menuAddSocksServer";
this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click);
//
+ // menuAddTrojanServer
+ //
+ resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
+ this.menuAddTrojanServer.Name = "menuAddTrojanServer";
+ this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click);
+ //
// menuAddCustomServer
//
- this.menuAddCustomServer.Name = "menuAddCustomServer";
resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer");
+ this.menuAddCustomServer.Name = "menuAddCustomServer";
this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click);
//
// menuAddServers
//
- this.menuAddServers.Name = "menuAddServers";
resources.ApplyResources(this.menuAddServers, "menuAddServers");
+ this.menuAddServers.Name = "menuAddServers";
this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click);
//
// menuScanScreen
//
- this.menuScanScreen.Name = "menuScanScreen";
resources.ApplyResources(this.menuScanScreen, "menuScanScreen");
+ this.menuScanScreen.Name = "menuScanScreen";
this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click);
//
// toolStripSeparator1
//
- this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
//
// menuRemoveServer
//
- this.menuRemoveServer.Name = "menuRemoveServer";
resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer");
+ this.menuRemoveServer.Name = "menuRemoveServer";
this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click);
//
// menuRemoveDuplicateServer
//
- this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer");
+ this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click);
//
// menuCopyServer
//
- this.menuCopyServer.Name = "menuCopyServer";
resources.ApplyResources(this.menuCopyServer, "menuCopyServer");
+ this.menuCopyServer.Name = "menuCopyServer";
this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click);
//
// menuSetDefaultServer
//
- this.menuSetDefaultServer.Name = "menuSetDefaultServer";
resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
+ this.menuSetDefaultServer.Name = "menuSetDefaultServer";
this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click);
//
// toolStripSeparator3
//
- this.toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
+ this.toolStripSeparator3.Name = "toolStripSeparator3";
//
// menuMoveTop
//
- this.menuMoveTop.Name = "menuMoveTop";
resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
+ this.menuMoveTop.Name = "menuMoveTop";
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
//
// menuMoveUp
//
- this.menuMoveUp.Name = "menuMoveUp";
resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
+ this.menuMoveUp.Name = "menuMoveUp";
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
//
// menuMoveDown
//
- this.menuMoveDown.Name = "menuMoveDown";
resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
+ this.menuMoveDown.Name = "menuMoveDown";
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
//
// menuMoveBottom
//
- this.menuMoveBottom.Name = "menuMoveBottom";
resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
+ this.menuMoveBottom.Name = "menuMoveBottom";
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
//
// menuSelectAll
//
- this.menuSelectAll.Name = "menuSelectAll";
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
+ this.menuSelectAll.Name = "menuSelectAll";
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
//
// toolStripSeparator9
//
- this.toolStripSeparator9.Name = "toolStripSeparator9";
resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9");
+ this.toolStripSeparator9.Name = "toolStripSeparator9";
//
// menuPingServer
//
- this.menuPingServer.Name = "menuPingServer";
resources.ApplyResources(this.menuPingServer, "menuPingServer");
+ this.menuPingServer.Name = "menuPingServer";
this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click);
//
// menuTcpingServer
//
- this.menuTcpingServer.Name = "menuTcpingServer";
resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer");
+ this.menuTcpingServer.Name = "menuTcpingServer";
this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click);
//
// menuRealPingServer
//
- this.menuRealPingServer.Name = "menuRealPingServer";
resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer");
+ this.menuRealPingServer.Name = "menuRealPingServer";
this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click);
//
// menuSpeedServer
//
- this.menuSpeedServer.Name = "menuSpeedServer";
resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
+ this.menuSpeedServer.Name = "menuSpeedServer";
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
//
+ // tsbTestMe
+ //
+ resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
+ this.tsbTestMe.Name = "tsbTestMe";
+ this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click);
+ //
// toolStripSeparator6
//
- this.toolStripSeparator6.Name = "toolStripSeparator6";
resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6");
+ this.toolStripSeparator6.Name = "toolStripSeparator6";
//
// menuExport2ClientConfig
//
- this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig");
+ this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click);
//
// menuExport2ServerConfig
//
- this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig");
+ this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click);
//
// menuExport2ShareUrl
//
- this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl");
+ this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click);
//
// menuExport2SubContent
//
- this.menuExport2SubContent.Name = "menuExport2SubContent";
resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent");
+ this.menuExport2SubContent.Name = "menuExport2SubContent";
this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click);
//
- // tsbServer
- //
- this.tsbServer.DropDown = this.cmsLv;
- this.tsbServer.Image = global::v2rayN.Properties.Resources.server;
- resources.ApplyResources(this.tsbServer, "tsbServer");
- this.tsbServer.Name = "tsbServer";
- //
// qrCodeControl
//
resources.ApplyResources(this.qrCodeControl, "qrCodeControl");
this.qrCodeControl.Name = "qrCodeControl";
//
+ // tsbServer
+ //
+ resources.ApplyResources(this.tsbServer, "tsbServer");
+ this.tsbServer.DropDown = this.cmsLv;
+ this.tsbServer.Image = global::v2rayN.Properties.Resources.server;
+ this.tsbServer.Name = "tsbServer";
+ //
// notifyMain
//
- this.notifyMain.ContextMenuStrip = this.cmsMain;
resources.ApplyResources(this.notifyMain, "notifyMain");
+ this.notifyMain.ContextMenuStrip = this.cmsMain;
this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick);
//
// cmsMain
//
- this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
resources.ApplyResources(this.cmsMain, "cmsMain");
+ this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuSysAgentMode,
this.menuServers,
this.menuAddServers2,
this.menuScanScreen2,
this.menuCopyPACUrl,
+ this.menuUpdateSubscriptions,
this.toolStripSeparator2,
this.menuExit});
this.cmsMain.Name = "contextMenuStrip1";
@@ -393,77 +426,97 @@
//
// menuSysAgentMode
//
+ resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuNotEnabledHttp,
this.menuGlobal,
this.menuGlobalPAC,
this.menuKeep,
- this.menuKeepPAC});
+ this.menuKeepPAC,
+ this.menuKeepNothing,
+ this.menuKeepPACNothing});
this.menuSysAgentMode.Name = "menuSysAgentMode";
- resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
//
// menuNotEnabledHttp
//
- this.menuNotEnabledHttp.Name = "menuNotEnabledHttp";
resources.ApplyResources(this.menuNotEnabledHttp, "menuNotEnabledHttp");
+ this.menuNotEnabledHttp.Name = "menuNotEnabledHttp";
this.menuNotEnabledHttp.Click += new System.EventHandler(this.menuNotEnabledHttp_Click);
//
// menuGlobal
//
- this.menuGlobal.Name = "menuGlobal";
resources.ApplyResources(this.menuGlobal, "menuGlobal");
+ this.menuGlobal.Name = "menuGlobal";
this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click);
//
// menuGlobalPAC
//
- this.menuGlobalPAC.Name = "menuGlobalPAC";
resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC");
+ this.menuGlobalPAC.Name = "menuGlobalPAC";
this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click);
//
// menuKeep
//
- this.menuKeep.Name = "menuKeep";
resources.ApplyResources(this.menuKeep, "menuKeep");
+ this.menuKeep.Name = "menuKeep";
this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click);
//
// menuKeepPAC
//
- this.menuKeepPAC.Name = "menuKeepPAC";
resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC");
+ this.menuKeepPAC.Name = "menuKeepPAC";
this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click);
//
+ // menuKeepNothing
+ //
+ resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
+ this.menuKeepNothing.Name = "menuKeepNothing";
+ this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click);
+ //
+ // menuKeepPACNothing
+ //
+ resources.ApplyResources(this.menuKeepPACNothing, "menuKeepPACNothing");
+ this.menuKeepPACNothing.Name = "menuKeepPACNothing";
+ this.menuKeepPACNothing.Click += new System.EventHandler(this.menuKeepPACNothing_Click);
+ //
// menuServers
//
- this.menuServers.Name = "menuServers";
resources.ApplyResources(this.menuServers, "menuServers");
+ this.menuServers.Name = "menuServers";
//
// menuAddServers2
//
- this.menuAddServers2.Name = "menuAddServers2";
resources.ApplyResources(this.menuAddServers2, "menuAddServers2");
+ this.menuAddServers2.Name = "menuAddServers2";
this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click);
//
// menuScanScreen2
//
- this.menuScanScreen2.Name = "menuScanScreen2";
resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
+ this.menuScanScreen2.Name = "menuScanScreen2";
this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click);
//
// menuCopyPACUrl
//
- this.menuCopyPACUrl.Name = "menuCopyPACUrl";
resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl");
+ this.menuCopyPACUrl.Name = "menuCopyPACUrl";
this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click);
//
+ // menuUpdateSubscriptions
+ //
+ resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
+ this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
+ this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click);
+ //
// toolStripSeparator2
//
- this.toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
//
// menuExit
//
- this.menuExit.Name = "menuExit";
resources.ApplyResources(this.menuExit, "menuExit");
+ this.menuExit.Name = "menuExit";
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
//
// bgwScan
@@ -474,30 +527,31 @@
//
// groupBox1
//
- this.groupBox1.Controls.Add(this.splitContainer1);
resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Controls.Add(this.scMain);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// groupBox2
//
+ resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.txtMsgBox);
this.groupBox2.Controls.Add(this.ssMain);
- resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// txtMsgBox
//
+ resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52)))));
this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
- resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228)))));
this.txtMsgBox.Name = "txtMsgBox";
this.txtMsgBox.ReadOnly = true;
//
// ssMain
//
+ resources.ApplyResources(this.ssMain, "ssMain");
this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolSslSocksPortLab,
this.toolSslSocksPort,
@@ -510,7 +564,6 @@
this.toolSslBlank3,
this.toolSslServerSpeed,
this.toolSslBlank4});
- resources.ApplyResources(this.ssMain, "ssMain");
this.ssMain.Name = "ssMain";
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
//
@@ -521,8 +574,8 @@
//
// toolSslSocksPort
//
- this.toolSslSocksPort.Name = "toolSslSocksPort";
resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
+ this.toolSslSocksPort.Name = "toolSslSocksPort";
//
// toolSslBlank1
//
@@ -537,8 +590,8 @@
//
// toolSslHttpPort
//
- this.toolSslHttpPort.Name = "toolSslHttpPort";
resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
+ this.toolSslHttpPort.Name = "toolSslHttpPort";
//
// toolSslBlank2
//
@@ -553,8 +606,8 @@
//
// toolSslPacPort
//
- this.toolSslPacPort.Name = "toolSslPacPort";
resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort");
+ this.toolSslPacPort.Name = "toolSslPacPort";
//
// toolSslBlank3
//
@@ -570,8 +623,8 @@
//
// toolSslBlank4
//
- this.toolSslBlank4.Name = "toolSslBlank4";
resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
+ this.toolSslBlank4.Name = "toolSslBlank4";
//
// panel1
//
@@ -580,11 +633,13 @@
//
// tsMain
//
+ resources.ApplyResources(this.tsMain, "tsMain");
this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32);
this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbServer,
this.toolStripSeparator4,
this.tsbSub,
+ this.tsbQRCodeSwitch,
this.toolStripSeparator8,
this.tsbOptionSetting,
this.toolStripSeparator5,
@@ -596,51 +651,60 @@
this.tsbPromotion,
this.toolStripSeparator11,
this.tsbClose});
- resources.ApplyResources(this.tsMain, "tsMain");
this.tsMain.Name = "tsMain";
+ this.tsMain.TabStop = true;
//
// toolStripSeparator4
//
- this.toolStripSeparator4.Name = "toolStripSeparator4";
resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4");
+ this.toolStripSeparator4.Name = "toolStripSeparator4";
//
// tsbSub
//
+ resources.ApplyResources(this.tsbSub, "tsbSub");
this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbSubSetting,
this.tsbSubUpdate});
this.tsbSub.Image = global::v2rayN.Properties.Resources.sub;
- resources.ApplyResources(this.tsbSub, "tsbSub");
this.tsbSub.Name = "tsbSub";
//
// tsbSubSetting
//
- this.tsbSubSetting.Name = "tsbSubSetting";
resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting");
+ this.tsbSubSetting.Name = "tsbSubSetting";
this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click);
//
// tsbSubUpdate
//
- this.tsbSubUpdate.Name = "tsbSubUpdate";
resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate");
+ this.tsbSubUpdate.Name = "tsbSubUpdate";
this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click);
//
+ // tsbQRCodeSwitch
+ //
+ resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch");
+ this.tsbQRCodeSwitch.CheckOnClick = true;
+ this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black;
+ this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share;
+ this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch";
+ this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged);
+ //
// toolStripSeparator8
//
- this.toolStripSeparator8.Name = "toolStripSeparator8";
resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8");
+ this.toolStripSeparator8.Name = "toolStripSeparator8";
//
// tsbOptionSetting
//
- this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option;
resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
+ this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option;
this.tsbOptionSetting.Name = "tsbOptionSetting";
this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click);
//
// toolStripSeparator5
//
- this.toolStripSeparator5.Name = "toolStripSeparator5";
resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5");
+ this.toolStripSeparator5.Name = "toolStripSeparator5";
//
// tsbReload
//
@@ -650,95 +714,108 @@
//
// toolStripSeparator7
//
- this.toolStripSeparator7.Name = "toolStripSeparator7";
resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7");
+ this.toolStripSeparator7.Name = "toolStripSeparator7";
//
// tsbCheckUpdate
//
+ resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbCheckUpdateN,
this.tsbCheckUpdateCore,
this.tsbCheckUpdatePACList,
+ this.toolStripSeparator13,
this.tsbCheckClearPACList});
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
- resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
//
// tsbCheckUpdateN
//
- this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN");
+ this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click);
//
// tsbCheckUpdateCore
//
- this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
+ this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
//
// tsbCheckUpdatePACList
//
- this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList";
resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList");
+ this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList";
this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click);
//
+ // toolStripSeparator13
+ //
+ resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13");
+ this.toolStripSeparator13.Name = "toolStripSeparator13";
+ //
// tsbCheckClearPACList
//
- this.tsbCheckClearPACList.Name = "tsbCheckClearPACList";
resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList");
+ this.tsbCheckClearPACList.Name = "tsbCheckClearPACList";
this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click);
//
// toolStripSeparator10
//
- this.toolStripSeparator10.Name = "toolStripSeparator10";
resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10");
+ this.toolStripSeparator10.Name = "toolStripSeparator10";
//
// tsbHelp
//
+ resources.ApplyResources(this.tsbHelp, "tsbHelp");
this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbAbout,
+ this.tsbV2rayWebsite,
this.toolStripSeparator12,
this.tsbLanguageDef,
this.tsbLanguageZhHans});
this.tsbHelp.Image = global::v2rayN.Properties.Resources.help;
- resources.ApplyResources(this.tsbHelp, "tsbHelp");
this.tsbHelp.Name = "tsbHelp";
//
// tsbAbout
//
- this.tsbAbout.Name = "tsbAbout";
resources.ApplyResources(this.tsbAbout, "tsbAbout");
+ this.tsbAbout.Name = "tsbAbout";
this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click);
//
+ // tsbV2rayWebsite
+ //
+ resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
+ this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
+ this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click);
+ //
// toolStripSeparator12
//
- this.toolStripSeparator12.Name = "toolStripSeparator12";
resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12");
+ this.toolStripSeparator12.Name = "toolStripSeparator12";
//
// tsbLanguageDef
//
- this.tsbLanguageDef.Name = "tsbLanguageDef";
resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef");
+ this.tsbLanguageDef.Name = "tsbLanguageDef";
this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click);
//
// tsbLanguageZhHans
//
- this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans");
+ this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click);
//
// tsbPromotion
//
+ resources.ApplyResources(this.tsbPromotion, "tsbPromotion");
this.tsbPromotion.ForeColor = System.Drawing.Color.Black;
this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion;
- resources.ApplyResources(this.tsbPromotion, "tsbPromotion");
this.tsbPromotion.Name = "tsbPromotion";
this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click);
//
// toolStripSeparator11
//
- this.toolStripSeparator11.Name = "toolStripSeparator11";
resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11");
+ this.toolStripSeparator11.Name = "toolStripSeparator11";
//
// tsbClose
//
@@ -762,10 +839,10 @@
this.Shown += new System.EventHandler(this.MainForm_Shown);
this.VisibleChanged += new System.EventHandler(this.MainForm_VisibleChanged);
this.Resize += new System.EventHandler(this.MainForm_Resize);
- this.splitContainer1.Panel1.ResumeLayout(false);
- this.splitContainer1.Panel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
- this.splitContainer1.ResumeLayout(false);
+ this.scMain.Panel1.ResumeLayout(false);
+ this.scMain.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit();
+ this.scMain.ResumeLayout(false);
this.cmsLv.ResumeLayout(false);
this.cmsMain.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
@@ -780,7 +857,7 @@
}
- #endregion
+#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
@@ -804,7 +881,6 @@
private System.Windows.Forms.ToolStrip tsMain;
private System.Windows.Forms.ToolStripDropDownButton tsbServer;
private System.Windows.Forms.ToolStripButton tsbOptionSetting;
- private System.Windows.Forms.ToolStripButton tsbReload;
private System.Windows.Forms.ToolStripButton tsbClose;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
@@ -823,7 +899,7 @@
private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer;
- private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.SplitContainer scMain;
private QRCodeControl qrCodeControl;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator10;
private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate;
@@ -869,6 +945,16 @@
private System.Windows.Forms.ToolStripMenuItem menuTcpingServer;
private System.Windows.Forms.ToolStripMenuItem menuRealPingServer;
private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
+ private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions;
+ private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite;
+ private System.Windows.Forms.ToolStripMenuItem menuKeepNothing;
+ private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing;
+ private System.Windows.Forms.ToolStripMenuItem tsbTestMe;
+ private System.Windows.Forms.ToolStripButton tsbReload;
+ private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch;
+ private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer;
+ private System.Windows.Forms.ToolStripMenuItem menuAddTrojanServer;
}
}
diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs
index bef32c86..7d041432 100644
--- a/v2rayN/v2rayN/Forms/MainForm.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.cs
@@ -1,1398 +1,1577 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.IO;
-using System.IO.Compression;
-using System.Text;
-using System.Windows.Forms;
-using v2rayN.Handler;
-using v2rayN.HttpProxyHandler;
-using v2rayN.Mode;
-using v2rayN.Base;
-
-namespace v2rayN.Forms
-{
- public partial class MainForm : BaseForm
- {
- private V2rayHandler v2rayHandler;
- private PACListHandle pacListHandle;
- private DownloadHandle downloadHandle;
- private List lvSelecteds = new List();
- private StatisticsHandler statistics = null;
-
- #region Window 事件
-
- public MainForm()
- {
- InitializeComponent();
- this.ShowInTaskbar = false;
- this.WindowState = FormWindowState.Minimized;
- HideForm();
- this.Text = Utils.GetVersion();
-
- Application.ApplicationExit += (sender, args) =>
- {
- Utils.ClearTempPath();
-
- v2rayHandler.V2rayStop();
-
- HttpProxyHandle.CloseHttpAgent(config);
- PACServerHandle.Stop();
-
- ConfigHandler.SaveConfig(ref config);
- statistics?.SaveToFile();
- statistics?.Close();
- };
- }
-
- private void MainForm_Load(object sender, EventArgs e)
- {
- ConfigHandler.LoadConfig(ref config);
- v2rayHandler = new V2rayHandler();
- v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent;
-
- if (config.enableStatistics)
- {
- statistics = new StatisticsHandler(config, UpdateStatisticsHandler);
- }
- }
-
- private void MainForm_VisibleChanged(object sender, EventArgs e)
- {
- if (statistics == null || !statistics.Enable) return;
- if ((sender as Form).Visible)
- {
- statistics.UpdateUI = true;
- }
- else
- {
- statistics.UpdateUI = false;
- }
- }
-
- private void MainForm_Shown(object sender, EventArgs e)
- {
- InitServersView();
- RefreshServers();
- lvServers.AutoResizeColumns();
-
- LoadV2ray();
-
- HideForm();
-
- }
-
- private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (e.CloseReason == CloseReason.UserClosing)
- {
- e.Cancel = true;
- HideForm();
- return;
- }
- }
-
- private void MainForm_Resize(object sender, EventArgs e)
- {
- //if (this.WindowState == FormWindowState.Minimized)
- //{
- // HideForm();
- //}
- //else
- //{
- // //this.splitContainer1.SplitterDistance = config.uiItem.mainQRCodeWidth;
- //}
- }
-
- private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
- {
- //config.uiItem.mainQRCodeWidth = splitContainer1.SplitterDistance;
- }
-
- //private const int WM_QUERYENDSESSION = 0x0011;
- //protected override void WndProc(ref Message m)
- //{
- // switch (m.Msg)
- // {
- // case WM_QUERYENDSESSION:
- // Utils.SaveLog("Windows shutdown UnsetProxy");
-
- // ConfigHandler.ToJsonFile(config);
- // statistics?.SaveToFile();
- // ProxySetting.UnsetProxy();
- // m.Result = (IntPtr)1;
- // break;
- // default:
- // base.WndProc(ref m);
- // break;
- // }
- //}
- #endregion
-
- #region 显示服务器 listview 和 menu
-
- ///
- /// 刷新服务器
- ///
- private void RefreshServers()
- {
- RefreshServersView();
- RefreshServersMenu();
- }
-
- ///
- /// 初始化服务器列表
- ///
- private void InitServersView()
- {
- lvServers.Items.Clear();
-
- lvServers.GridLines = true;
- lvServers.FullRowSelect = true;
- lvServers.View = View.Details;
- lvServers.Scrollable = true;
- lvServers.MultiSelect = true;
- lvServers.HeaderStyle = ColumnHeaderStyle.Nonclickable;
-
- lvServers.Columns.Add("", 30, HorizontalAlignment.Center);
- lvServers.Columns.Add(UIRes.I18N("LvServiceType"), 80, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvAlias"), 100, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvAddress"), 120, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvPort"), 50, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvEncryptionMethod"), 90, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvTransportProtocol"), 70, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvSubscription"), 50, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvTestResults"), 70, HorizontalAlignment.Left);
-
- if (statistics != null && statistics.Enable)
- {
- lvServers.Columns.Add(UIRes.I18N("LvTotalUploadDataAmount"), 70, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvTotalDownloadDataAmount"), 70, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvTodayUploadDataAmount"), 70, HorizontalAlignment.Left);
- lvServers.Columns.Add(UIRes.I18N("LvTodayDownloadDataAmount"), 70, HorizontalAlignment.Left);
- }
- }
-
- ///
- /// 刷新服务器列表
- ///
- private void RefreshServersView()
- {
- lvServers.Items.Clear();
-
- for (int k = 0; k < config.vmess.Count; k++)
- {
- string def = string.Empty;
- string totalUp = string.Empty,
- totalDown = string.Empty,
- todayUp = string.Empty,
- todayDown = string.Empty;
- if (config.index.Equals(k))
- {
- def = "√";
- }
-
- VmessItem item = config.vmess[k];
-
- ListViewItem lvItem = null;
- if (statistics != null && statistics.Enable)
- {
- var index = statistics.Statistic.FindIndex(item_ => item_.itemId == item.getItemId());
- if (index != -1)
- {
- totalUp = Utils.HumanFy(statistics.Statistic[index].totalUp);
- totalDown = Utils.HumanFy(statistics.Statistic[index].totalDown);
- todayUp = Utils.HumanFy(statistics.Statistic[index].todayUp);
- todayDown = Utils.HumanFy(statistics.Statistic[index].todayDown);
- }
-
- lvItem = new ListViewItem(new string[]
- {
- def,
- ((EConfigType)item.configType).ToString(),
- item.remarks,
- item.address,
- item.port.ToString(),
- //item.id,
- //item.alterId.ToString(),
- item.security,
- item.network,
- item.getSubRemarks(config),
- item.testResult,
- totalUp,
- totalDown,
- todayUp,
- todayDown
- });
- }
- else
- {
- lvItem = new ListViewItem(new string[]
- {
- def,
- ((EConfigType)item.configType).ToString(),
- item.remarks,
- item.address,
- item.port.ToString(),
- //item.id,
- //item.alterId.ToString(),
- item.security,
- item.network,
- item.getSubRemarks(config),
- item.testResult
- //totalUp,
- //totalDown,
- //todayUp,
- //todayDown,
- });
- }
-
- if (lvItem != null) lvServers.Items.Add(lvItem);
- }
-
- //if (lvServers.Items.Count > 0)
- //{
- // if (lvServers.Items.Count <= testConfigIndex)
- // {
- // testConfigIndex = lvServers.Items.Count - 1;
- // }
- // lvServers.Items[testConfigIndex].Selected = true;
- // lvServers.Select();
- //}
- }
-
- ///
- /// 刷新托盘服务器菜单
- ///
- private void RefreshServersMenu()
- {
- menuServers.DropDownItems.Clear();
-
- List lst = new List();
- for (int k = 0; k < config.vmess.Count; k++)
- {
- VmessItem item = config.vmess[k];
- string name = item.getSummary();
-
- ToolStripMenuItem ts = new ToolStripMenuItem(name);
- ts.Tag = k;
- if (config.index.Equals(k))
- {
- ts.Checked = true;
- }
- ts.Click += new EventHandler(ts_Click);
- lst.Add(ts);
- }
- menuServers.DropDownItems.AddRange(lst.ToArray());
- }
-
- private void ts_Click(object sender, EventArgs e)
- {
- try
- {
- ToolStripItem ts = (ToolStripItem)sender;
- int index = Utils.ToInt(ts.Tag);
- SetDefaultServer(index);
- }
- catch
- {
- }
- }
-
- private void lvServers_SelectedIndexChanged(object sender, EventArgs e)
- {
- int index = -1;
- try
- {
- if (lvServers.SelectedIndices.Count > 0)
- {
- index = lvServers.SelectedIndices[0];
- }
- }
- catch
- {
- }
- if (index < 0)
- {
- return;
- }
- //qrCodeControl.showQRCode(index, config);
- }
-
- private void DisplayToolStatus()
- {
- toolSslSocksPort.Text =
- toolSslHttpPort.Text =
- toolSslPacPort.Text = "NONE";
-
- toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
-
- if (config.listenerType != 0)
- {
- toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
- if (config.listenerType == 2 || config.listenerType == 4)
- {
- if (PACServerHandle.IsRunning)
- {
- toolSslPacPort.Text = $"{HttpProxyHandle.GetPacUrl()}";
- }
- else
- {
- toolSslPacPort.Text = UIRes.I18N("StartPacFailed");
- }
- }
- }
-
- notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
- }
- private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
- {
- if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
- {
- Utils.SetClipboardData(e.ClickedItem.Text);
- }
- }
-
- #endregion
-
- #region v2ray 操作
-
- ///
- /// 载入V2ray
- ///
- private void LoadV2ray()
- {
- if (Global.reloadV2ray)
- {
- ClearMsg();
- }
- v2rayHandler.LoadV2ray(config);
- Global.reloadV2ray = false;
- ConfigHandler.SaveConfig(ref config, false);
- statistics?.SaveToFile();
-
- ChangePACButtonStatus(config.listenerType);
- }
-
- ///
- /// 关闭V2ray
- ///
- private void CloseV2ray()
- {
- ConfigHandler.SaveConfig(ref config, false);
- statistics?.SaveToFile();
-
- ChangePACButtonStatus(0);
-
- v2rayHandler.V2rayStop();
- }
-
- #endregion
-
- #region 功能按钮
-
- private void lvServers_Click(object sender, EventArgs e)
- {
- int index = -1;
- try
- {
- if (lvServers.SelectedIndices.Count > 0)
- {
- index = lvServers.SelectedIndices[0];
- }
- }
- catch
- {
- }
- if (index < 0)
- {
- return;
- }
- qrCodeControl.showQRCode(index, config);
- }
-
- private void lvServers_DoubleClick(object sender, EventArgs e)
- {
- int index = GetLvSelectedIndex();
- if (index < 0)
- {
- return;
- }
-
- if (config.vmess[index].configType == (int)EConfigType.Vmess)
- {
- var fm = new AddServerForm();
- fm.EditIndex = index;
- if (fm.ShowDialog() == DialogResult.OK)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- }
- else if (config.vmess[index].configType == (int)EConfigType.Shadowsocks)
- {
- var fm = new AddServer3Form();
- fm.EditIndex = index;
- if (fm.ShowDialog() == DialogResult.OK)
- {
- RefreshServers();
- LoadV2ray();
- }
- }
- else if (config.vmess[index].configType == (int)EConfigType.Socks)
- {
- var fm = new AddServer4Form();
- fm.EditIndex = index;
- if (fm.ShowDialog() == DialogResult.OK)
- {
- RefreshServers();
- LoadV2ray();
- }
- }
- else
- {
- var fm2 = new AddServer2Form();
- fm2.EditIndex = index;
- if (fm2.ShowDialog() == DialogResult.OK)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- }
- }
-
- private void lvServers_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.Control)
- {
- switch (e.KeyCode)
- {
- case Keys.A:
- menuSelectAll_Click(null, null);
- break;
- case Keys.P:
- menuPingServer_Click(null, null);
- break;
- case Keys.O:
- menuTcpingServer_Click(null, null);
- break;
- case Keys.R:
- menuRealPingServer_Click(null, null);
- break;
- case Keys.T:
- menuSpeedServer_Click(null, null);
- break;
- }
- }
- switch (e.KeyCode)
- {
- case Keys.Enter:
- menuSetDefaultServer_Click(null, null);
- break;
- case Keys.Delete:
- menuRemoveServer_Click(null, null);
- break;
- case Keys.U:
- menuMoveUp_Click(null, null);
- break;
- case Keys.D:
- menuMoveDown_Click(null, null);
- break;
- }
- }
-
- private void menuAddVmessServer_Click(object sender, EventArgs e)
- {
- AddServerForm fm = new AddServerForm();
- fm.EditIndex = -1;
- if (fm.ShowDialog() == DialogResult.OK)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- }
-
- private void menuRemoveServer_Click(object sender, EventArgs e)
- {
-
- int index = GetLvSelectedIndex();
- if (index < 0)
- {
- return;
- }
- if (UI.ShowYesNo(UIRes.I18N("RemoveServer")) == DialogResult.No)
- {
- return;
- }
- for (int k = lvSelecteds.Count - 1; k >= 0; k--)
- {
- ConfigHandler.RemoveServer(ref config, lvSelecteds[k]);
- }
- //刷新
- RefreshServers();
- LoadV2ray();
-
- }
-
- private void menuRemoveDuplicateServer_Click(object sender, EventArgs e)
- {
- List servers = null;
- Utils.DedupServerList(config.vmess, out servers);
- if (servers != null)
- {
- config.vmess = servers;
- }
- //刷新
- RefreshServers();
- LoadV2ray();
- }
-
- private void menuCopyServer_Click(object sender, EventArgs e)
- {
- int index = GetLvSelectedIndex();
- if (index < 0)
- {
- return;
- }
- if (ConfigHandler.CopyServer(ref config, index) == 0)
- {
- //刷新
- RefreshServers();
- }
- }
-
- private void menuSetDefaultServer_Click(object sender, EventArgs e)
- {
- int index = GetLvSelectedIndex();
- if (index < 0)
- {
- return;
- }
- SetDefaultServer(index);
- }
-
-
- private void menuPingServer_Click(object sender, EventArgs e)
- {
- Speedtest("ping");
- }
- private void menuTcpingServer_Click(object sender, EventArgs e)
- {
- Speedtest("tcping");
- }
-
- private void menuRealPingServer_Click(object sender, EventArgs e)
- {
- //if (!config.sysAgentEnabled)
- //{
- // UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
- // return;
- //}
-
- //UI.Show(UIRes.I18N("SpeedServerTips"));
-
- Speedtest("realping");
- }
-
- private void menuSpeedServer_Click(object sender, EventArgs e)
- {
- //if (!config.sysAgentEnabled)
- //{
- // UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
- // return;
- //}
-
- //UI.Show(UIRes.I18N("SpeedServerTips"));
-
- Speedtest("speedtest");
- }
- private void Speedtest(string actionType)
- {
- GetLvSelectedIndex();
- ClearTestResult();
- var statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler);
- }
-
- private void menuExport2ClientConfig_Click(object sender, EventArgs e)
- {
- int index = GetLvSelectedIndex();
- MainFormHandler.Instance.Export2ClientConfig(index, config);
- }
-
- private void menuExport2ServerConfig_Click(object sender, EventArgs e)
- {
- int index = GetLvSelectedIndex();
- MainFormHandler.Instance.Export2ServerConfig(index, config);
- }
-
- private void menuExport2ShareUrl_Click(object sender, EventArgs e)
- {
- GetLvSelectedIndex();
-
- StringBuilder sb = new StringBuilder();
- for (int k = 0; k < lvSelecteds.Count; k++)
- {
- string url = ConfigHandler.GetVmessQRCode(config, lvSelecteds[k]);
- if (Utils.IsNullOrEmpty(url))
- {
- continue;
- }
- sb.Append(url);
- sb.AppendLine();
- }
- if (sb.Length > 0)
- {
- Utils.SetClipboardData(sb.ToString());
- UI.Show(UIRes.I18N("BatchExportURLSuccessfully"));
- }
- }
-
- private void menuExport2SubContent_Click(object sender, EventArgs e)
- {
- GetLvSelectedIndex();
-
- StringBuilder sb = new StringBuilder();
- for (int k = 0; k < lvSelecteds.Count; k++)
- {
- string url = ConfigHandler.GetVmessQRCode(config, lvSelecteds[k]);
- if (Utils.IsNullOrEmpty(url))
- {
- continue;
- }
- sb.Append(url);
- sb.AppendLine();
- }
- if (sb.Length > 0)
- {
- Utils.SetClipboardData(Utils.Base64Encode(sb.ToString()));
- UI.Show(UIRes.I18N("BatchExportSubscriptionSuccessfully"));
- }
- }
-
- private void tsbOptionSetting_Click(object sender, EventArgs e)
- {
- OptionSettingForm fm = new OptionSettingForm();
- if (fm.ShowDialog() == DialogResult.OK)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- }
-
- private void tsbReload_Click(object sender, EventArgs e)
- {
- Global.reloadV2ray = true;
- LoadV2ray();
- }
-
- private void tsbClose_Click(object sender, EventArgs e)
- {
- HideForm();
- //this.WindowState = FormWindowState.Minimized;
- }
-
- ///
- /// 设置活动服务器
- ///
- ///
- ///
- private int SetDefaultServer(int index)
- {
- if (index < 0)
- {
- UI.Show(UIRes.I18N("PleaseSelectServer"));
- return -1;
- }
- if (ConfigHandler.SetDefaultServer(ref config, index) == 0)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- return 0;
- }
-
- ///
- /// 取得ListView选中的行
- ///
- ///
- private int GetLvSelectedIndex()
- {
- int index = -1;
- lvSelecteds.Clear();
- try
- {
- if (lvServers.SelectedIndices.Count <= 0)
- {
- UI.Show(UIRes.I18N("PleaseSelectServer"));
- return index;
- }
-
- index = lvServers.SelectedIndices[0];
- foreach (int i in lvServers.SelectedIndices)
- {
- lvSelecteds.Add(i);
- }
- return index;
- }
- catch
- {
- return index;
- }
- }
-
- private void menuAddCustomServer_Click(object sender, EventArgs e)
- {
- UI.Show(UIRes.I18N("CustomServerTips"));
-
- OpenFileDialog fileDialog = new OpenFileDialog();
- fileDialog.Multiselect = false;
- fileDialog.Filter = "Config|*.json|All|*.*";
- if (fileDialog.ShowDialog() != DialogResult.OK)
- {
- return;
- }
- string fileName = fileDialog.FileName;
- if (Utils.IsNullOrEmpty(fileName))
- {
- return;
- }
-
- if (ConfigHandler.AddCustomServer(ref config, fileName) == 0)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer"));
- }
- else
- {
- UI.Show(UIRes.I18N("FailedImportedCustomServer"));
- }
- }
-
- private void menuAddShadowsocksServer_Click(object sender, EventArgs e)
- {
- var fm = new AddServer3Form();
- fm.EditIndex = -1;
- if (fm.ShowDialog() == DialogResult.OK)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- ShowForm();
- }
-
- private void menuAddSocksServer_Click(object sender, EventArgs e)
- {
- var fm = new AddServer4Form();
- fm.EditIndex = -1;
- if (fm.ShowDialog() == DialogResult.OK)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- ShowForm();
- }
-
- private void menuAddServers_Click(object sender, EventArgs e)
- {
- string clipboardData = Utils.GetClipboardData();
- if (AddBatchServers(clipboardData) == 0)
- {
- UI.Show(UIRes.I18N("SuccessfullyImportedServerViaClipboard"));
- }
- }
-
- private void menuScanScreen_Click(object sender, EventArgs e)
- {
- HideForm();
- bgwScan.RunWorkerAsync();
- }
-
- private int AddBatchServers(string clipboardData, string subid = "")
- {
- if (ConfigHandler.AddBatchServers(ref config, clipboardData, subid) != 0)
- {
- clipboardData = Utils.Base64Decode(clipboardData);
- if (ConfigHandler.AddBatchServers(ref config, clipboardData, subid) != 0)
- {
- return -1;
- }
- }
- RefreshServers();
- return 0;
- }
-
- #endregion
-
-
- #region 提示信息
-
- ///
- /// 消息委托
- ///
- ///
- ///
- void v2rayHandler_ProcessEvent(bool notify, string msg)
- {
- AppendText(notify, msg);
- }
-
- delegate void AppendTextDelegate(string text);
- void AppendText(bool notify, string msg)
- {
- try
- {
- AppendText(msg);
- if (notify)
- {
- notifyMsg(msg);
- }
- }
- catch
- {
- }
- }
-
- void AppendText(string text)
- {
- if (this.txtMsgBox.InvokeRequired)
- {
- Invoke(new AppendTextDelegate(AppendText), new object[] { text });
- }
- else
- {
- //this.txtMsgBox.AppendText(text);
- ShowMsg(text);
- }
- }
-
- ///
- /// 提示信息
- ///
- ///
- private void ShowMsg(string msg)
- {
- if (txtMsgBox.Lines.Length > 999)
- {
- ClearMsg();
- }
- this.txtMsgBox.AppendText(msg);
- if (!msg.EndsWith("\r\n"))
- {
- this.txtMsgBox.AppendText("\r\n");
- }
- }
-
- ///
- /// 清除信息
- ///
- private void ClearMsg()
- {
- this.txtMsgBox.Clear();
- }
-
- ///
- /// 托盘信息
- ///
- ///
- private void notifyMsg(string msg)
- {
- notifyMain.Text = msg;
- }
-
- #endregion
-
-
- #region 托盘事件
-
- private void notifyMain_MouseClick(object sender, MouseEventArgs e)
- {
- if (e.Button == System.Windows.Forms.MouseButtons.Left)
- {
- ShowForm();
- }
- }
-
- private void menuExit_Click(object sender, EventArgs e)
- {
-
- this.Visible = false;
- this.Close();
-
- Application.Exit();
- }
-
-
- private void ShowForm()
- {
- this.Show();
- this.WindowState = FormWindowState.Normal;
- this.Activate();
- //this.notifyIcon1.Visible = false;
- this.ShowInTaskbar = true;
- this.txtMsgBox.ScrollToCaret();
-
- SetVisibleCore(true);
- }
-
- private void HideForm()
- {
- //this.WindowState = FormWindowState.Minimized;
- this.Hide();
- //this.notifyMain.Icon = this.Icon;
- this.notifyMain.Visible = true;
- this.ShowInTaskbar = false;
-
- SetVisibleCore(false);
- }
-
- #endregion
-
- #region 后台测速
-
- private void SetTestResult(int k, string txt)
- {
- config.vmess[k].testResult = txt;
- lvServers.Items[k].SubItems[8].Text = txt;
- }
- private void ClearTestResult()
- {
- for (int k = 0; k < config.vmess.Count; k++)
- {
- SetTestResult(k, "");
- }
- }
- private void UpdateSpeedtestHandler(int index, string msg)
- {
- lvServers.Invoke((MethodInvoker)delegate
- {
- lvServers.SuspendLayout();
-
- SetTestResult(index, msg);
-
- lvServers.ResumeLayout();
- });
- }
-
- private void UpdateStatisticsHandler(ulong up, ulong down, List statistics)
- {
- try
- {
- up /= (ulong)(config.statisticsFreshRate / 1000f);
- down /= (ulong)(config.statisticsFreshRate / 1000f);
- toolSslServerSpeed.Text = string.Format("{0}/s↑ | {1}/s↓", Utils.HumanFy(up), Utils.HumanFy(down));
-
- List datas = new List();
- for (int i = 0; i < config.vmess.Count; i++)
- {
- var index = statistics.FindIndex(item_ => item_.itemId == config.vmess[i].getItemId());
- if (index != -1)
- {
- lvServers.Invoke((MethodInvoker)delegate
- {
- lvServers.SuspendLayout();
-
- var indexStart = 9;
- lvServers.Items[i].SubItems[indexStart++].Text = Utils.HumanFy(statistics[index].totalUp);
- lvServers.Items[i].SubItems[indexStart++].Text = Utils.HumanFy(statistics[index].totalDown);
- lvServers.Items[i].SubItems[indexStart++].Text = Utils.HumanFy(statistics[index].todayUp);
- lvServers.Items[i].SubItems[indexStart++].Text = Utils.HumanFy(statistics[index].todayDown);
-
- lvServers.ResumeLayout();
- });
- }
- }
- }
- catch (Exception ex)
- {
- Utils.SaveLog(ex.Message, ex);
- }
- }
-
- #endregion
-
- #region 移动服务器
-
- private void menuMoveTop_Click(object sender, EventArgs e)
- {
- MoveServer(EMove.Top);
- }
-
- private void menuMoveUp_Click(object sender, EventArgs e)
- {
- MoveServer(EMove.Up);
- }
-
- private void menuMoveDown_Click(object sender, EventArgs e)
- {
- MoveServer(EMove.Down);
- }
-
- private void menuMoveBottom_Click(object sender, EventArgs e)
- {
- MoveServer(EMove.Bottom);
- }
-
- private void MoveServer(EMove eMove)
- {
- int index = GetLvSelectedIndex();
- if (index < 0)
- {
- UI.Show(UIRes.I18N("PleaseSelectServer"));
- return;
- }
- if (ConfigHandler.MoveServer(ref config, index, eMove) == 0)
- {
- //刷新
- RefreshServers();
- LoadV2ray();
- }
- }
- private void menuSelectAll_Click(object sender, EventArgs e)
- {
- foreach (ListViewItem item in lvServers.Items)
- {
- item.Selected = true;
- }
- }
-
- #endregion
-
- #region 系统代理相关
-
- private void menuCopyPACUrl_Click(object sender, EventArgs e)
- {
- Utils.SetClipboardData(HttpProxyHandle.GetPacUrl());
- }
-
- private void menuNotEnabledHttp_Click(object sender, EventArgs e)
- {
- SetListenerType(0);
- }
-
- private void menuGlobal_Click(object sender, EventArgs e)
- {
- SetListenerType(1);
- }
-
- private void menuGlobalPAC_Click(object sender, EventArgs e)
- {
- SetListenerType(2);
- }
-
- private void menuKeep_Click(object sender, EventArgs e)
- {
- SetListenerType(3);
- }
-
- private void menuKeepPAC_Click(object sender, EventArgs e)
- {
- SetListenerType(4);
- }
-
- private void SetListenerType(int type)
- {
- config.listenerType = type;
- ChangePACButtonStatus(type);
- }
-
- private void ChangePACButtonStatus(int type)
- {
- if (type != 0)
- {
- HttpProxyHandle.RestartHttpAgent(config, false);
- }
- else
- {
- HttpProxyHandle.CloseHttpAgent(config);
- }
-
- for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
- {
- var item = ((ToolStripMenuItem)menuSysAgentMode.DropDownItems[k]);
- item.Checked = (type == k);
- }
-
- ConfigHandler.SaveConfig(ref config, false);
- DisplayToolStatus();
- }
-
- #endregion
-
-
- #region CheckUpdate
-
- private void tsbCheckUpdateN_Click(object sender, EventArgs e)
- {
- System.Diagnostics.Process.Start(Global.UpdateUrl);
- }
-
- private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
- {
- if (downloadHandle == null)
- {
- downloadHandle = new DownloadHandle();
- downloadHandle.AbsoluteCompleted += (sender2, args) =>
- {
- if (args.Success)
- {
- AppendText(false, UIRes.I18N("MsgParsingV2rayCoreSuccessfully"));
-
- string url = args.Msg;
- this.Invoke((MethodInvoker)(delegate
- {
-
- if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.No)
- {
- return;
- }
- else
- {
- downloadHandle.DownloadFileAsync(config, url, null, -1);
- }
- }));
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle.UpdateCompleted += (sender2, args) =>
- {
- if (args.Success)
- {
- AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
- AppendText(false, UIRes.I18N("MsgUnpacking"));
-
- try
- {
- CloseV2ray();
-
- string fileName = downloadHandle.DownloadFileName;
- fileName = Utils.GetPath(fileName);
- using (ZipArchive archive = ZipFile.OpenRead(fileName))
- {
- foreach (ZipArchiveEntry entry in archive.Entries)
- {
- if (entry.Length == 0)
- continue;
- entry.ExtractToFile(Utils.GetPath(entry.Name), true);
- }
- }
- AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
-
- Global.reloadV2ray = true;
- LoadV2ray();
-
- AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfully"));
- }
- catch (Exception ex)
- {
- AppendText(false, ex.Message);
- }
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle.Error += (sender2, args) =>
- {
- AppendText(true, args.GetException().Message);
- };
- }
-
- AppendText(false, UIRes.I18N("MsgStartUpdatingV2rayCore"));
- downloadHandle.AbsoluteV2rayCore(config);
- }
-
- private void tsbCheckUpdatePACList_Click(object sender, EventArgs e)
- {
- if (pacListHandle == null)
- {
- pacListHandle = new PACListHandle();
- pacListHandle.UpdateCompleted += (sender2, args) =>
- {
- if (args.Success)
- {
- AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully"));
- }
- else
- {
- AppendText(false, UIRes.I18N("MsgPACUpdateFailed"));
- }
- };
- pacListHandle.Error += (sender2, args) =>
- {
- AppendText(true, args.GetException().Message);
- };
- }
- AppendText(false, UIRes.I18N("MsgStartUpdatingPAC"));
- pacListHandle.UpdatePACFromGFWList(config);
- }
-
- private void tsbCheckClearPACList_Click(object sender, EventArgs e)
- {
- try
- {
- File.WriteAllText(Utils.GetPath(Global.pacFILE), Utils.GetEmbedText(Global.BlankPacFileName), Encoding.UTF8);
- AppendText(false, UIRes.I18N("MsgSimplifyPAC"));
- }
- catch (Exception ex)
- {
- Utils.SaveLog(ex.Message, ex);
- }
- }
- #endregion
-
- #region Help
-
-
- private void tsbAbout_Click(object sender, EventArgs e)
- {
- System.Diagnostics.Process.Start(Global.AboutUrl);
- }
-
- private void tsbPromotion_Click(object sender, EventArgs e)
- {
- System.Diagnostics.Process.Start($"{Utils.Base64Decode(Global.PromotionUrl)}?t={DateTime.Now.Ticks}");
- }
- #endregion
-
- #region ScanScreen
-
-
- private void bgwScan_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
- {
- string ret = Utils.ScanScreen();
- bgwScan.ReportProgress(0, ret);
- }
-
- private void bgwScan_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
- {
- ShowForm();
-
- string result = Convert.ToString(e.UserState);
- if (Utils.IsNullOrEmpty(result))
- {
- UI.Show(UIRes.I18N("NoValidQRcodeFound"));
- }
- else
- {
- if (AddBatchServers(result) == 0)
- {
- UI.Show(UIRes.I18N("SuccessfullyImportedServerViaScan"));
- }
- }
- }
-
- #endregion
-
- #region 订阅
- private void tsbSubSetting_Click(object sender, EventArgs e)
- {
- SubSettingForm fm = new SubSettingForm();
- if (fm.ShowDialog() == DialogResult.OK)
- {
- RefreshServers();
- }
- }
-
- private void tsbSubUpdate_Click(object sender, EventArgs e)
- {
- AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
-
- if (config.subItem == null || config.subItem.Count <= 0)
- {
- AppendText(false, UIRes.I18N("MsgNoValidSubscription"));
- return;
- }
-
- for (int k = 1; k <= config.subItem.Count; k++)
- {
- string id = config.subItem[k - 1].id.TrimEx();
- string url = config.subItem[k - 1].url.TrimEx();
- string hashCode = $"{k}->";
- if (config.subItem[k - 1].enabled == false)
- {
- continue;
- }
- if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
- {
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}");
- continue;
- }
-
- DownloadHandle downloadHandle3 = new DownloadHandle();
- downloadHandle3.UpdateCompleted += (sender2, args) =>
- {
- if (args.Success)
- {
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}");
- var result = Utils.Base64Decode(args.Msg);
- if (Utils.IsNullOrEmpty(result))
- {
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}");
- return;
- }
-
- ConfigHandler.RemoveServerViaSubid(ref config, id);
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
- RefreshServers();
- if (AddBatchServers(result, id) == 0)
- {
- }
- else
- {
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}");
- }
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}");
- }
- else
- {
- AppendText(false, args.Msg);
- }
- };
- downloadHandle3.Error += (sender2, args) =>
- {
- AppendText(true, args.GetException().Message);
- };
-
- downloadHandle3.WebDownloadString(url);
- AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
- }
-
-
- }
-
- #endregion
-
- #region Language
-
- private void tsbLanguageDef_Click(object sender, EventArgs e)
- {
- SetCurrentLanguage("en");
- }
-
- private void tsbLanguageZhHans_Click(object sender, EventArgs e)
- {
- SetCurrentLanguage("zh-Hans");
- }
- private void SetCurrentLanguage(string value)
- {
- Utils.RegWriteValue(Global.MyRegPath, Global.MyRegKeyLanguage, value);
- }
-
- #endregion
-
-
- }
-}
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Windows.Forms;
+using v2rayN.Handler;
+using v2rayN.HttpProxyHandler;
+using v2rayN.Mode;
+using v2rayN.Base;
+using v2rayN.Tool;
+using System.Diagnostics;
+using System.Drawing;
+using System.Net;
+
+namespace v2rayN.Forms
+{
+ public partial class MainForm : BaseForm
+ {
+ private V2rayHandler v2rayHandler;
+ private List lvSelecteds = new List();
+ private StatisticsHandler statistics = null;
+
+ #region Window 事件
+
+ public MainForm()
+ {
+ InitializeComponent();
+ this.ShowInTaskbar = false;
+ this.WindowState = FormWindowState.Minimized;
+ HideForm();
+ this.Text = Utils.GetVersion();
+ Global.processJob = new Job();
+
+ Application.ApplicationExit += (sender, args) =>
+ {
+ v2rayHandler.V2rayStop();
+
+ HttpProxyHandle.CloseHttpAgent(config);
+ PACServerHandle.Stop();
+
+ ConfigHandler.SaveConfig(ref config);
+ statistics?.SaveToFile();
+ statistics?.Close();
+ };
+ }
+
+ private void MainForm_Load(object sender, EventArgs e)
+ {
+ ConfigHandler.LoadConfig(ref config);
+ v2rayHandler = new V2rayHandler();
+ v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent;
+
+ if (config.enableStatistics)
+ {
+ statistics = new StatisticsHandler(config, UpdateStatisticsHandler);
+ }
+ }
+
+ private void MainForm_VisibleChanged(object sender, EventArgs e)
+ {
+ if (statistics == null || !statistics.Enable) return;
+ if ((sender as Form).Visible)
+ {
+ statistics.UpdateUI = true;
+ }
+ else
+ {
+ statistics.UpdateUI = false;
+ }
+ }
+
+ private void MainForm_Shown(object sender, EventArgs e)
+ {
+ InitServersView();
+ RefreshServers();
+ RestoreUI();
+
+ LoadV2ray();
+
+ HideForm();
+
+ }
+
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (e.CloseReason == CloseReason.UserClosing)
+ {
+ StorageUI();
+ e.Cancel = true;
+ HideForm();
+ return;
+ }
+ }
+
+ private void MainForm_Resize(object sender, EventArgs e)
+ {
+ //if (this.WindowState == FormWindowState.Minimized)
+ //{
+ // HideForm();
+ //}
+ //else
+ //{
+
+ //}
+ }
+
+
+ //private const int WM_QUERYENDSESSION = 0x0011;
+ //protected override void WndProc(ref Message m)
+ //{
+ // switch (m.Msg)
+ // {
+ // case WM_QUERYENDSESSION:
+ // Utils.SaveLog("Windows shutdown UnsetProxy");
+
+ // ConfigHandler.ToJsonFile(config);
+ // statistics?.SaveToFile();
+ // ProxySetting.UnsetProxy();
+ // m.Result = (IntPtr)1;
+ // break;
+ // default:
+ // base.WndProc(ref m);
+ // break;
+ // }
+ //}
+
+ private void RestoreUI()
+ {
+ scMain.Panel2Collapsed = true;
+
+ if (!config.uiItem.mainSize.IsEmpty)
+ {
+ this.Width = config.uiItem.mainSize.Width;
+ this.Height = config.uiItem.mainSize.Height;
+ }
+
+ for (int k = 0; k < lvServers.Columns.Count; k++)
+ {
+ var width = ConfigHandler.GetformMainLvColWidth(ref config, ((EServerColName)k).ToString(), lvServers.Columns[k].Width);
+ lvServers.Columns[k].Width = width;
+ }
+ }
+
+ private void StorageUI()
+ {
+ config.uiItem.mainSize = new Size(this.Width, this.Height);
+
+ for (int k = 0; k < lvServers.Columns.Count; k++)
+ {
+ ConfigHandler.AddformMainLvColWidth(ref config, ((EServerColName)k).ToString(), lvServers.Columns[k].Width);
+ }
+ }
+
+ #endregion
+
+ #region 显示服务器 listview 和 menu
+
+ ///
+ /// 刷新服务器
+ ///
+ private void RefreshServers()
+ {
+ RefreshServersView();
+ //lvServers.AutoResizeColumns();
+ RefreshServersMenu();
+ }
+
+ ///
+ /// 初始化服务器列表
+ ///
+ private void InitServersView()
+ {
+ lvServers.BeginUpdate();
+ lvServers.Items.Clear();
+
+ lvServers.GridLines = true;
+ lvServers.FullRowSelect = true;
+ lvServers.View = View.Details;
+ lvServers.Scrollable = true;
+ lvServers.MultiSelect = true;
+ lvServers.HeaderStyle = ColumnHeaderStyle.Clickable;
+
+ lvServers.Columns.Add("", 30);
+ lvServers.Columns.Add(UIRes.I18N("LvServiceType"), 80);
+ lvServers.Columns.Add(UIRes.I18N("LvAlias"), 100);
+ lvServers.Columns.Add(UIRes.I18N("LvAddress"), 120);
+ lvServers.Columns.Add(UIRes.I18N("LvPort"), 50);
+ lvServers.Columns.Add(UIRes.I18N("LvEncryptionMethod"), 90);
+ lvServers.Columns.Add(UIRes.I18N("LvTransportProtocol"), 70);
+ lvServers.Columns.Add(UIRes.I18N("LvSubscription"), 50);
+ lvServers.Columns.Add(UIRes.I18N("LvTestResults"), 70, HorizontalAlignment.Right);
+
+ if (statistics != null && statistics.Enable)
+ {
+ lvServers.Columns.Add(UIRes.I18N("LvTodayDownloadDataAmount"), 70);
+ lvServers.Columns.Add(UIRes.I18N("LvTodayUploadDataAmount"), 70);
+ lvServers.Columns.Add(UIRes.I18N("LvTotalDownloadDataAmount"), 70);
+ lvServers.Columns.Add(UIRes.I18N("LvTotalUploadDataAmount"), 70);
+ }
+ lvServers.EndUpdate();
+ }
+
+ ///
+ /// 刷新服务器列表
+ ///
+ private void RefreshServersView()
+ {
+ lvServers.BeginUpdate();
+ lvServers.Items.Clear();
+
+ for (int k = 0; k < config.vmess.Count; k++)
+ {
+ string def = string.Empty;
+ string totalUp = string.Empty,
+ totalDown = string.Empty,
+ todayUp = string.Empty,
+ todayDown = string.Empty;
+ if (config.index.Equals(k))
+ {
+ def = "√";
+ }
+
+ VmessItem item = config.vmess[k];
+
+ void _addSubItem(ListViewItem i, string name, string text)
+ {
+ i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text });
+ }
+ bool stats = statistics != null && statistics.Enable;
+ if (stats)
+ {
+ ServerStatItem sItem = statistics.Statistic.Find(item_ => item_.itemId == item.getItemId());
+ if (sItem != null)
+ {
+ totalUp = Utils.HumanFy(sItem.totalUp);
+ totalDown = Utils.HumanFy(sItem.totalDown);
+ todayUp = Utils.HumanFy(sItem.todayUp);
+ todayDown = Utils.HumanFy(sItem.todayDown);
+ }
+ }
+ ListViewItem lvItem = new ListViewItem(def);
+ _addSubItem(lvItem, EServerColName.configType.ToString(), ((EConfigType)item.configType).ToString());
+ _addSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks);
+ _addSubItem(lvItem, EServerColName.address.ToString(), item.address);
+ _addSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString());
+ _addSubItem(lvItem, EServerColName.security.ToString(), item.security);
+ _addSubItem(lvItem, EServerColName.network.ToString(), item.network);
+ _addSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config));
+ _addSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult);
+ if (stats)
+ {
+ _addSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown);
+ _addSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp);
+ _addSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown);
+ _addSubItem(lvItem, EServerColName.totalUp.ToString(), totalUp);
+ }
+
+ if (k % 2 == 1) // 隔行着色
+ {
+ lvItem.BackColor = Color.WhiteSmoke;
+ }
+ if (config.index.Equals(k))
+ {
+ //lvItem.Checked = true;
+ lvItem.ForeColor = Color.DodgerBlue;
+ lvItem.Font = new Font(lvItem.Font, FontStyle.Bold);
+ }
+
+ if (lvItem != null) lvServers.Items.Add(lvItem);
+ }
+ lvServers.EndUpdate();
+
+ //if (lvServers.Items.Count > 0)
+ //{
+ // if (lvServers.Items.Count <= testConfigIndex)
+ // {
+ // testConfigIndex = lvServers.Items.Count - 1;
+ // }
+ // lvServers.Items[testConfigIndex].Selected = true;
+ // lvServers.Select();
+ //}
+ }
+
+ ///
+ /// 刷新托盘服务器菜单
+ ///
+ private void RefreshServersMenu()
+ {
+ menuServers.DropDownItems.Clear();
+
+ List lst = new List();
+ for (int k = 0; k < config.vmess.Count; k++)
+ {
+ VmessItem item = config.vmess[k];
+ string name = item.getSummary();
+
+ ToolStripMenuItem ts = new ToolStripMenuItem(name)
+ {
+ Tag = k
+ };
+ if (config.index.Equals(k))
+ {
+ ts.Checked = true;
+ }
+ ts.Click += new EventHandler(ts_Click);
+ lst.Add(ts);
+ }
+ menuServers.DropDownItems.AddRange(lst.ToArray());
+ }
+
+ private void ts_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ ToolStripItem ts = (ToolStripItem)sender;
+ int index = Utils.ToInt(ts.Tag);
+ SetDefaultServer(index);
+ }
+ catch
+ {
+ }
+ }
+
+ private void lvServers_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ int index = -1;
+ try
+ {
+ if (lvServers.SelectedIndices.Count > 0)
+ {
+ index = lvServers.SelectedIndices[0];
+ }
+ }
+ catch
+ {
+ }
+ if (index < 0)
+ {
+ return;
+ }
+ //qrCodeControl.showQRCode(index, config);
+ }
+
+ private void DisplayToolStatus()
+ {
+ toolSslSocksPort.Text =
+ toolSslHttpPort.Text =
+ toolSslPacPort.Text = "OFF";
+
+ toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
+
+ if (config.listenerType != (int)ListenerType.noHttpProxy)
+ {
+ toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
+ if (config.listenerType == ListenerType.GlobalPac ||
+ config.listenerType == ListenerType.PacOpenAndClear ||
+ config.listenerType == ListenerType.PacOpenOnly)
+ {
+ if (PACServerHandle.IsRunning)
+ {
+ toolSslPacPort.Text = $"{HttpProxyHandle.GetPacUrl()}";
+ }
+ else
+ {
+ toolSslPacPort.Text = UIRes.I18N("StartPacFailed");
+ }
+ }
+ }
+
+ notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
+ }
+ private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
+ {
+ if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
+ {
+ Utils.SetClipboardData(e.ClickedItem.Text);
+ }
+ }
+
+ private void lvServers_ColumnClick(object sender, ColumnClickEventArgs e)
+ {
+ if (e.Column < 0)
+ {
+ return;
+ }
+
+ try
+ {
+ var tag = lvServers.Columns[e.Column].Tag?.ToString();
+ bool asc = Utils.IsNullOrEmpty(tag) ? true : !Convert.ToBoolean(tag);
+ if (ConfigHandler.SortServers(ref config, (EServerColName)e.Column, asc) != 0)
+ {
+ return;
+ }
+ lvServers.Columns[e.Column].Tag = Convert.ToString(asc);
+ RefreshServers();
+ }
+ catch (Exception ex)
+ {
+ Utils.SaveLog(ex.Message, ex);
+ }
+
+ if (e.Column < 0)
+ {
+ return;
+ }
+
+ }
+ #endregion
+
+ #region v2ray 操作
+
+ ///
+ /// 载入V2ray
+ ///
+ private void LoadV2ray()
+ {
+ tsbReload.Enabled = false;
+
+ if (Global.reloadV2ray)
+ {
+ ClearMsg();
+ }
+ v2rayHandler.LoadV2ray(config);
+ Global.reloadV2ray = false;
+ ConfigHandler.SaveConfig(ref config, false);
+ statistics?.SaveToFile();
+
+ ChangePACButtonStatus(config.listenerType);
+
+ tsbReload.Enabled = true;
+ }
+
+ ///
+ /// 关闭V2ray
+ ///
+ private void CloseV2ray()
+ {
+ ConfigHandler.SaveConfig(ref config, false);
+ statistics?.SaveToFile();
+
+ ChangePACButtonStatus(0);
+
+ v2rayHandler.V2rayStop();
+ }
+
+ #endregion
+
+ #region 功能按钮
+
+ private void lvServers_Click(object sender, EventArgs e)
+ {
+ int index = -1;
+ try
+ {
+ if (lvServers.SelectedIndices.Count > 0)
+ {
+ index = lvServers.SelectedIndices[0];
+ }
+ }
+ catch
+ {
+ }
+ if (index < 0)
+ {
+ return;
+ }
+ qrCodeControl.showQRCode(index, config);
+ }
+
+ private void lvServers_DoubleClick(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ return;
+ }
+ ShowServerForm(config.vmess[index].configType, index);
+ }
+ private void ShowServerForm(int configType, int index)
+ {
+ BaseServerForm fm;
+ switch (configType)
+ {
+ case (int)EConfigType.Vmess:
+ fm = new AddServerForm();
+ break;
+ case (int)EConfigType.Shadowsocks:
+ fm = new AddServer3Form();
+ break;
+ case (int)EConfigType.Socks:
+ fm = new AddServer4Form();
+ break;
+ case (int)EConfigType.VLESS:
+ fm = new AddServer5Form();
+ break;
+ case (int)EConfigType.Trojan:
+ fm = new AddServer6Form();
+ break;
+ default:
+ fm = new AddServer2Form();
+ break;
+ }
+ fm.EditIndex = index;
+ if (fm.ShowDialog() == DialogResult.OK)
+ {
+ //刷新
+ RefreshServers();
+ LoadV2ray();
+ }
+ }
+
+
+ private void lvServers_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Control)
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.A:
+ menuSelectAll_Click(null, null);
+ break;
+ case Keys.C:
+ menuExport2ShareUrl_Click(null, null);
+ break;
+ case Keys.V:
+ menuAddServers_Click(null, null);
+ break;
+ case Keys.P:
+ menuPingServer_Click(null, null);
+ break;
+ case Keys.O:
+ menuTcpingServer_Click(null, null);
+ break;
+ case Keys.R:
+ menuRealPingServer_Click(null, null);
+ break;
+ case Keys.S:
+ menuScanScreen_Click(null, null);
+ break;
+ case Keys.T:
+ menuSpeedServer_Click(null, null);
+ break;
+ }
+ }
+ else
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.Enter:
+ menuSetDefaultServer_Click(null, null);
+ break;
+ case Keys.Delete:
+ menuRemoveServer_Click(null, null);
+ break;
+ case Keys.T:
+ menuMoveTop_Click(null, null);
+ break;
+ case Keys.B:
+ menuMoveBottom_Click(null, null);
+ break;
+ case Keys.U:
+ menuMoveUp_Click(null, null);
+ break;
+ case Keys.D:
+ menuMoveDown_Click(null, null);
+ break;
+ }
+ }
+ }
+
+ private void menuAddVmessServer_Click(object sender, EventArgs e)
+ {
+ ShowServerForm((int)EConfigType.Vmess, -1);
+ }
+
+ private void menuAddVlessServer_Click(object sender, EventArgs e)
+ {
+ ShowServerForm((int)EConfigType.VLESS, -1);
+ }
+
+ private void menuRemoveServer_Click(object sender, EventArgs e)
+ {
+
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ return;
+ }
+ if (UI.ShowYesNo(UIRes.I18N("RemoveServer")) == DialogResult.No)
+ {
+ return;
+ }
+ for (int k = lvSelecteds.Count - 1; k >= 0; k--)
+ {
+ ConfigHandler.RemoveServer(ref config, lvSelecteds[k]);
+ }
+ //刷新
+ RefreshServers();
+ LoadV2ray();
+
+ }
+
+ private void menuRemoveDuplicateServer_Click(object sender, EventArgs e)
+ {
+ Utils.DedupServerList(config.vmess, out List servers, config.keepOlderDedupl);
+ int oldCount = config.vmess.Count;
+ int newCount = servers.Count;
+ if (servers != null)
+ {
+ config.vmess = servers;
+ }
+ //刷新
+ RefreshServers();
+ LoadV2ray();
+ UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount));
+ }
+
+ private void menuCopyServer_Click(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ return;
+ }
+ if (ConfigHandler.CopyServer(ref config, index) == 0)
+ {
+ //刷新
+ RefreshServers();
+ }
+ }
+
+ private void menuSetDefaultServer_Click(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ return;
+ }
+ SetDefaultServer(index);
+ }
+
+
+ private void menuPingServer_Click(object sender, EventArgs e)
+ {
+ Speedtest("ping");
+ }
+ private void menuTcpingServer_Click(object sender, EventArgs e)
+ {
+ Speedtest("tcping");
+ }
+
+ private void menuRealPingServer_Click(object sender, EventArgs e)
+ {
+ //if (!config.sysAgentEnabled)
+ //{
+ // UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
+ // return;
+ //}
+
+ //UI.Show(UIRes.I18N("SpeedServerTips"));
+
+ Speedtest("realping");
+ }
+
+ private void menuSpeedServer_Click(object sender, EventArgs e)
+ {
+ //if (!config.sysAgentEnabled)
+ //{
+ // UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
+ // return;
+ //}
+
+ //UI.Show(UIRes.I18N("SpeedServerTips"));
+
+ Speedtest("speedtest");
+ }
+ private void Speedtest(string actionType)
+ {
+ if (GetLvSelectedIndex() < 0) return;
+ ClearTestResult();
+ SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler);
+ }
+
+ private void tsbTestMe_Click(object sender, EventArgs e)
+ {
+ string result = httpProxyTest() + "ms";
+ AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result));
+ }
+ private int httpProxyTest()
+ {
+ SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler);
+ return statistics.RunAvailabilityCheck();
+ }
+
+ private void menuExport2ClientConfig_Click(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ MainFormHandler.Instance.Export2ClientConfig(index, config);
+ }
+
+ private void menuExport2ServerConfig_Click(object sender, EventArgs e)
+ {
+ int index = GetLvSelectedIndex();
+ MainFormHandler.Instance.Export2ServerConfig(index, config);
+ }
+
+ private void menuExport2ShareUrl_Click(object sender, EventArgs e)
+ {
+ GetLvSelectedIndex();
+
+ StringBuilder sb = new StringBuilder();
+ foreach (int v in lvSelecteds)
+ {
+ string url = ConfigHandler.GetVmessQRCode(config, v);
+ if (Utils.IsNullOrEmpty(url))
+ {
+ continue;
+ }
+ sb.Append(url);
+ sb.AppendLine();
+ }
+ if (sb.Length > 0)
+ {
+ Utils.SetClipboardData(sb.ToString());
+ AppendText(false, UIRes.I18N("BatchExportURLSuccessfully"));
+ //UI.Show(UIRes.I18N("BatchExportURLSuccessfully"));
+ }
+ }
+
+ private void menuExport2SubContent_Click(object sender, EventArgs e)
+ {
+ GetLvSelectedIndex();
+
+ StringBuilder sb = new StringBuilder();
+ foreach (int v in lvSelecteds)
+ {
+ string url = ConfigHandler.GetVmessQRCode(config, v);
+ if (Utils.IsNullOrEmpty(url))
+ {
+ continue;
+ }
+ sb.Append(url);
+ sb.AppendLine();
+ }
+ if (sb.Length > 0)
+ {
+ Utils.SetClipboardData(Utils.Base64Encode(sb.ToString()));
+ UI.Show(UIRes.I18N("BatchExportSubscriptionSuccessfully"));
+ }
+ }
+
+ private void tsbOptionSetting_Click(object sender, EventArgs e)
+ {
+ OptionSettingForm fm = new OptionSettingForm();
+ if (fm.ShowDialog() == DialogResult.OK)
+ {
+ //刷新
+ RefreshServers();
+ LoadV2ray();
+ HttpProxyHandle.RestartHttpAgent(config, true);
+ }
+ }
+
+ private void tsbReload_Click(object sender, EventArgs e)
+ {
+ Global.reloadV2ray = true;
+ LoadV2ray();
+ }
+
+ private void tsbClose_Click(object sender, EventArgs e)
+ {
+ HideForm();
+ //this.WindowState = FormWindowState.Minimized;
+ }
+
+ ///
+ /// 设置活动服务器
+ ///
+ ///
+ ///
+ private int SetDefaultServer(int index)
+ {
+ if (index < 0)
+ {
+ UI.Show(UIRes.I18N("PleaseSelectServer"));
+ return -1;
+ }
+ if (ConfigHandler.SetDefaultServer(ref config, index) == 0)
+ {
+ //刷新
+ RefreshServers();
+ LoadV2ray();
+ }
+ return 0;
+ }
+
+ ///
+ /// 取得ListView选中的行
+ ///
+ ///
+ private int GetLvSelectedIndex()
+ {
+ int index = -1;
+ lvSelecteds.Clear();
+ try
+ {
+ if (lvServers.SelectedIndices.Count <= 0)
+ {
+ UI.Show(UIRes.I18N("PleaseSelectServer"));
+ return index;
+ }
+
+ index = lvServers.SelectedIndices[0];
+ foreach (int i in lvServers.SelectedIndices)
+ {
+ lvSelecteds.Add(i);
+ }
+ return index;
+ }
+ catch
+ {
+ return index;
+ }
+ }
+
+ private void menuAddCustomServer_Click(object sender, EventArgs e)
+ {
+ UI.Show(UIRes.I18N("CustomServerTips"));
+
+ OpenFileDialog fileDialog = new OpenFileDialog
+ {
+ Multiselect = false,
+ Filter = "Config|*.json|All|*.*"
+ };
+ if (fileDialog.ShowDialog() != DialogResult.OK)
+ {
+ return;
+ }
+ string fileName = fileDialog.FileName;
+ if (Utils.IsNullOrEmpty(fileName))
+ {
+ return;
+ }
+
+ if (ConfigHandler.AddCustomServer(ref config, fileName) == 0)
+ {
+ //刷新
+ RefreshServers();
+ LoadV2ray();
+ UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer"));
+ }
+ else
+ {
+ UI.ShowWarning(UIRes.I18N("FailedImportedCustomServer"));
+ }
+ }
+
+ private void menuAddShadowsocksServer_Click(object sender, EventArgs e)
+ {
+ ShowServerForm((int)EConfigType.Shadowsocks, -1);
+ ShowForm();
+ }
+
+ private void menuAddSocksServer_Click(object sender, EventArgs e)
+ {
+ ShowServerForm((int)EConfigType.Socks, -1);
+ ShowForm();
+ }
+
+ private void menuAddTrojanServer_Click(object sender, EventArgs e)
+ {
+ ShowServerForm((int)EConfigType.Trojan, -1);
+ ShowForm();
+ }
+
+ private void menuAddServers_Click(object sender, EventArgs e)
+ {
+ string clipboardData = Utils.GetClipboardData();
+ int result = AddBatchServers(clipboardData);
+ if (result > 0)
+ {
+ UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), result));
+ }
+ }
+
+ private void menuScanScreen_Click(object sender, EventArgs e)
+ {
+ HideForm();
+ bgwScan.RunWorkerAsync();
+ }
+
+ private int AddBatchServers(string clipboardData, string subid = "")
+ {
+ int counter;
+ int _Add()
+ {
+ return ConfigHandler.AddBatchServers(ref config, clipboardData, subid);
+ }
+ counter = _Add();
+ if (counter < 1)
+ {
+ clipboardData = Utils.Base64Decode(clipboardData);
+ counter = _Add();
+ }
+ RefreshServers();
+ return counter;
+ }
+
+ private void menuUpdateSubscriptions_Click(object sender, EventArgs e)
+ {
+ UpdateSubscriptionProcess();
+ }
+
+ #endregion
+
+
+ #region 提示信息
+
+ ///
+ /// 消息委托
+ ///
+ ///
+ ///
+ void v2rayHandler_ProcessEvent(bool notify, string msg)
+ {
+ AppendText(notify, msg);
+ }
+
+ delegate void AppendTextDelegate(string text);
+ void AppendText(bool notify, string msg)
+ {
+ try
+ {
+ AppendText(msg);
+ if (notify)
+ {
+ notifyMsg(msg);
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ void AppendText(string text)
+ {
+ if (this.txtMsgBox.InvokeRequired)
+ {
+ Invoke(new AppendTextDelegate(AppendText), new object[] { text });
+ }
+ else
+ {
+ //this.txtMsgBox.AppendText(text);
+ ShowMsg(text);
+ }
+ }
+
+ ///
+ /// 提示信息
+ ///
+ ///
+ private void ShowMsg(string msg)
+ {
+ if (txtMsgBox.Lines.Length > 999)
+ {
+ ClearMsg();
+ }
+ this.txtMsgBox.AppendText(msg);
+ if (!msg.EndsWith(Environment.NewLine))
+ {
+ this.txtMsgBox.AppendText(Environment.NewLine);
+ }
+ }
+
+ ///
+ /// 清除信息
+ ///
+ private void ClearMsg()
+ {
+ this.txtMsgBox.Clear();
+ }
+
+ ///
+ /// 托盘信息
+ ///
+ ///
+ private void notifyMsg(string msg)
+ {
+ notifyMain.Text = msg;
+ }
+
+ #endregion
+
+
+ #region 托盘事件
+
+ private void notifyMain_MouseClick(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ ShowForm();
+ }
+ }
+
+ private void menuExit_Click(object sender, EventArgs e)
+ {
+ this.Visible = false;
+ this.Close();
+
+ Application.Exit();
+ }
+
+
+ private void ShowForm()
+ {
+ this.Show();
+ this.WindowState = FormWindowState.Normal;
+ this.Activate();
+ this.ShowInTaskbar = true;
+ //this.notifyIcon1.Visible = false;
+ this.txtMsgBox.ScrollToCaret();
+ if (config.index >= 0 && config.index < lvServers.Items.Count)
+ {
+ lvServers.EnsureVisible(config.index); // workaround
+ }
+
+ SetVisibleCore(true);
+ }
+
+ private void HideForm()
+ {
+ //this.WindowState = FormWindowState.Minimized;
+ this.Hide();
+ //this.notifyMain.Icon = this.Icon;
+ this.notifyMain.Visible = true;
+ this.ShowInTaskbar = false;
+
+ SetVisibleCore(false);
+ }
+
+ #endregion
+
+ #region 后台测速
+
+ private void SetTestResult(int k, string txt)
+ {
+ if (k < lvServers.Items.Count)
+ {
+ config.vmess[k].testResult = txt;
+ lvServers.Items[k].SubItems["testResult"].Text = txt;
+ }
+ }
+ private void ClearTestResult()
+ {
+ foreach (int s in lvSelecteds)
+ {
+ SetTestResult(s, "");
+ }
+ }
+ private void UpdateSpeedtestHandler(int index, string msg)
+ {
+ lvServers.Invoke((MethodInvoker)delegate
+ {
+ SetTestResult(index, msg);
+ });
+ }
+
+ private void UpdateStatisticsHandler(ulong up, ulong down, List statistics)
+ {
+ try
+ {
+ up /= (ulong)(config.statisticsFreshRate / 1000f);
+ down /= (ulong)(config.statisticsFreshRate / 1000f);
+ toolSslServerSpeed.Text = string.Format("{0}/s↑ | {1}/s↓", Utils.HumanFy(up), Utils.HumanFy(down));
+
+ List datas = new List();
+ for (int i = 0; i < config.vmess.Count; i++)
+ {
+ int index = statistics.FindIndex(item_ => item_.itemId == config.vmess[i].getItemId());
+ if (index != -1)
+ {
+ lvServers.Invoke((MethodInvoker)delegate
+ {
+ lvServers.BeginUpdate();
+
+ lvServers.Items[i].SubItems["todayDown"].Text = Utils.HumanFy(statistics[index].todayDown);
+ lvServers.Items[i].SubItems["todayUp"].Text = Utils.HumanFy(statistics[index].todayUp);
+ lvServers.Items[i].SubItems["totalDown"].Text = Utils.HumanFy(statistics[index].totalDown);
+ lvServers.Items[i].SubItems["totalUp"].Text = Utils.HumanFy(statistics[index].totalUp);
+
+ lvServers.EndUpdate();
+ });
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Utils.SaveLog(ex.Message, ex);
+ }
+ }
+
+ #endregion
+
+ #region 移动服务器
+
+ private void menuMoveTop_Click(object sender, EventArgs e)
+ {
+ MoveServer(EMove.Top);
+ }
+
+ private void menuMoveUp_Click(object sender, EventArgs e)
+ {
+ MoveServer(EMove.Up);
+ }
+
+ private void menuMoveDown_Click(object sender, EventArgs e)
+ {
+ MoveServer(EMove.Down);
+ }
+
+ private void menuMoveBottom_Click(object sender, EventArgs e)
+ {
+ MoveServer(EMove.Bottom);
+ }
+
+ private void MoveServer(EMove eMove)
+ {
+ int index = GetLvSelectedIndex();
+ if (index < 0)
+ {
+ UI.Show(UIRes.I18N("PleaseSelectServer"));
+ return;
+ }
+ if (ConfigHandler.MoveServer(ref config, index, eMove) == 0)
+ {
+ //TODO: reload is not good.
+ RefreshServers();
+ LoadV2ray();
+ }
+ }
+ private void menuSelectAll_Click(object sender, EventArgs e)
+ {
+ foreach (ListViewItem item in lvServers.Items)
+ {
+ item.Selected = true;
+ }
+ }
+
+ #endregion
+
+ #region 系统代理相关
+
+ private void menuCopyPACUrl_Click(object sender, EventArgs e)
+ {
+ Utils.SetClipboardData(HttpProxyHandle.GetPacUrl());
+ }
+
+ private void menuNotEnabledHttp_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.noHttpProxy);
+ }
+ private void menuGlobal_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.GlobalHttp);
+ }
+ private void menuGlobalPAC_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.GlobalPac);
+ }
+ private void menuKeep_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.HttpOpenAndClear);
+ }
+ private void menuKeepPAC_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.PacOpenAndClear);
+ }
+ private void menuKeepNothing_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.HttpOpenOnly);
+ }
+ private void menuKeepPACNothing_Click(object sender, EventArgs e)
+ {
+ SetListenerType(ListenerType.PacOpenOnly);
+ }
+ private void SetListenerType(ListenerType type)
+ {
+ config.listenerType = type;
+ ChangePACButtonStatus(type);
+ }
+
+ private void ChangePACButtonStatus(ListenerType type)
+ {
+ if (type != ListenerType.noHttpProxy)
+ {
+ HttpProxyHandle.RestartHttpAgent(config, false);
+ }
+ else
+ {
+ HttpProxyHandle.CloseHttpAgent(config);
+ }
+
+ for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
+ {
+ ToolStripMenuItem item = ((ToolStripMenuItem)menuSysAgentMode.DropDownItems[k]);
+ item.Checked = ((int)type == k);
+ }
+
+ ConfigHandler.SaveConfig(ref config, false);
+ DisplayToolStatus();
+ }
+
+ #endregion
+
+
+ #region CheckUpdate
+
+ private void askToDownload(DownloadHandle downloadHandle, string url)
+ {
+ if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes)
+ {
+ if (httpProxyTest() > 0)
+ {
+ int httpPort = config.GetLocalPort(Global.InboundHttp);
+ WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
+ downloadHandle.DownloadFileAsync(url, webProxy, 600);
+ }
+ else
+ {
+ downloadHandle.DownloadFileAsync(url, null, 600);
+ }
+ }
+ }
+ private void tsbCheckUpdateN_Click(object sender, EventArgs e)
+ {
+ //System.Diagnostics.Process.Start(Global.UpdateUrl);
+ DownloadHandle downloadHandle = null;
+ if (downloadHandle == null)
+ {
+ downloadHandle = new DownloadHandle();
+ downloadHandle.AbsoluteCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ AppendText(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayN"));
+
+ string url = args.Msg;
+ this.Invoke((MethodInvoker)(delegate
+ {
+ askToDownload(downloadHandle, url);
+ }));
+ }
+ else
+ {
+ AppendText(false, args.Msg);
+ }
+ };
+ downloadHandle.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
+
+ try
+ {
+ string fileName = Utils.GetPath(downloadHandle.DownloadFileName);
+ Process process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "v2rayUpgrade.exe",
+ Arguments = "\"" + fileName + "\"",
+ WorkingDirectory = Utils.StartupPath()
+ }
+ };
+ process.Start();
+ if (process.Id > 0)
+ {
+ menuExit_Click(null, null);
+ }
+ }
+ catch (Exception ex)
+ {
+ AppendText(false, ex.Message);
+ }
+ }
+ else
+ {
+ AppendText(false, args.Msg);
+ }
+ };
+ downloadHandle.Error += (sender2, args) =>
+ {
+ AppendText(true, args.GetException().Message);
+ };
+ }
+
+ AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayN"));
+ downloadHandle.CheckUpdateAsync("v2rayN");
+ }
+
+ private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
+ {
+ DownloadHandle downloadHandle = null;
+ if (downloadHandle == null)
+ {
+ downloadHandle = new DownloadHandle();
+ downloadHandle.AbsoluteCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ AppendText(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayCore"));
+
+ string url = args.Msg;
+ this.Invoke((MethodInvoker)(delegate
+ {
+ askToDownload(downloadHandle, url);
+ }));
+ }
+ else
+ {
+ AppendText(false, args.Msg);
+ }
+ };
+ downloadHandle.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
+ AppendText(false, UIRes.I18N("MsgUnpacking"));
+
+ try
+ {
+ CloseV2ray();
+
+ string fileName = downloadHandle.DownloadFileName;
+ fileName = Utils.GetPath(fileName);
+ FileManager.ZipExtractToFile(fileName);
+
+ AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
+
+ Global.reloadV2ray = true;
+ LoadV2ray();
+
+ AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfully"));
+ }
+ catch (Exception ex)
+ {
+ AppendText(false, ex.Message);
+ }
+ }
+ else
+ {
+ AppendText(false, args.Msg);
+ }
+ };
+ downloadHandle.Error += (sender2, args) =>
+ {
+ AppendText(true, args.GetException().Message);
+ };
+ }
+
+ AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayCore"));
+ downloadHandle.CheckUpdateAsync("Core");
+ }
+
+ private void tsbCheckUpdatePACList_Click(object sender, EventArgs e)
+ {
+ DownloadHandle pacListHandle = null;
+ if (pacListHandle == null)
+ {
+ pacListHandle = new DownloadHandle();
+ pacListHandle.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ string result = args.Msg;
+ if (Utils.IsNullOrEmpty(result))
+ {
+ return;
+ }
+ pacListHandle.GenPacFile(result);
+
+ AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully"));
+ }
+ else
+ {
+ AppendText(false, UIRes.I18N("MsgPACUpdateFailed"));
+ }
+ };
+ pacListHandle.Error += (sender2, args) =>
+ {
+ AppendText(true, args.GetException().Message);
+ };
+ }
+ AppendText(false, UIRes.I18N("MsgStartUpdatingPAC"));
+ pacListHandle.WebDownloadString(config.urlGFWList);
+ }
+
+ private void tsbCheckClearPACList_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ File.WriteAllText(Utils.GetPath(Global.pacFILE), Utils.GetEmbedText(Global.BlankPacFileName), Encoding.UTF8);
+ AppendText(false, UIRes.I18N("MsgSimplifyPAC"));
+ }
+ catch (Exception ex)
+ {
+ Utils.SaveLog(ex.Message, ex);
+ }
+ }
+ #endregion
+
+ #region Help
+
+
+ private void tsbAbout_Click(object sender, EventArgs e)
+ {
+ Process.Start(Global.AboutUrl);
+ }
+
+ private void tsbV2rayWebsite_Click(object sender, EventArgs e)
+ {
+ Process.Start(Global.v2rayWebsiteUrl);
+ }
+
+ private void tsbPromotion_Click(object sender, EventArgs e)
+ {
+ Process.Start($"{Utils.Base64Decode(Global.PromotionUrl)}?t={DateTime.Now.Ticks}");
+ }
+ #endregion
+
+ #region ScanScreen
+
+
+ private void bgwScan_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
+ {
+ string ret = Utils.ScanScreen();
+ bgwScan.ReportProgress(0, ret);
+ }
+
+ private void bgwScan_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
+ {
+ ShowForm();
+
+ string result = Convert.ToString(e.UserState);
+ if (Utils.IsNullOrEmpty(result))
+ {
+ UI.ShowWarning(UIRes.I18N("NoValidQRcodeFound"));
+ }
+ else
+ {
+ if (AddBatchServers(result) > 0)
+ {
+ UI.Show(UIRes.I18N("SuccessfullyImportedServerViaScan"));
+ }
+ }
+ }
+
+ #endregion
+
+ #region 订阅
+ private void tsbSubSetting_Click(object sender, EventArgs e)
+ {
+ SubSettingForm fm = new SubSettingForm();
+ if (fm.ShowDialog() == DialogResult.OK)
+ {
+ RefreshServers();
+ }
+ }
+
+ private void tsbSubUpdate_Click(object sender, EventArgs e)
+ {
+ UpdateSubscriptionProcess();
+ }
+
+ ///
+ /// the subscription update process
+ ///
+ private void UpdateSubscriptionProcess()
+ {
+ AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
+
+ if (config.subItem == null || config.subItem.Count <= 0)
+ {
+ AppendText(false, UIRes.I18N("MsgNoValidSubscription"));
+ return;
+ }
+
+ for (int k = 1; k <= config.subItem.Count; k++)
+ {
+ string id = config.subItem[k - 1].id.TrimEx();
+ string url = config.subItem[k - 1].url.TrimEx();
+ string hashCode = $"{k}->";
+ if (config.subItem[k - 1].enabled == false)
+ {
+ continue;
+ }
+ if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
+ {
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}");
+ continue;
+ }
+
+ DownloadHandle downloadHandle3 = new DownloadHandle();
+ downloadHandle3.UpdateCompleted += (sender2, args) =>
+ {
+ if (args.Success)
+ {
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}");
+ string result = Utils.Base64Decode(args.Msg);
+ if (Utils.IsNullOrEmpty(result))
+ {
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}");
+ return;
+ }
+
+ ConfigHandler.RemoveServerViaSubid(ref config, id);
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
+ RefreshServers();
+ if (AddBatchServers(result, id) > 0)
+ {
+ }
+ else
+ {
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}");
+ }
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}");
+ }
+ else
+ {
+ AppendText(false, args.Msg);
+ }
+ };
+ downloadHandle3.Error += (sender2, args) =>
+ {
+ AppendText(true, args.GetException().Message);
+ };
+
+ downloadHandle3.WebDownloadString(url);
+ AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
+ }
+ }
+
+ private void tsbQRCodeSwitch_CheckedChanged(object sender, EventArgs e)
+ {
+ bool bShow = tsbQRCodeSwitch.Checked;
+ scMain.Panel2Collapsed = !bShow;
+ }
+ #endregion
+
+ #region Language
+
+ private void tsbLanguageDef_Click(object sender, EventArgs e)
+ {
+ SetCurrentLanguage("en");
+ }
+
+ private void tsbLanguageZhHans_Click(object sender, EventArgs e)
+ {
+ SetCurrentLanguage("zh-Hans");
+ }
+ private void SetCurrentLanguage(string value)
+ {
+ Utils.RegWriteValue(Global.MyRegPath, Global.MyRegKeyLanguage, value);
+ //Application.Restart();
+ }
+
+
+
+
+ #endregion
+
+
+ }
+}
diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx
index 0045a460..eb1e2e63 100644
--- a/v2rayN/v2rayN/Forms/MainForm.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.resx
@@ -117,190 +117,703 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Fill
+
+ Remove duplicate servers
-
- 3, 17
+
+ 355, 22
-
- 327, 17
-
-
- 447, 22
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Add [VMess] server
+
+ Magenta
-
- 447, 22
+
+ 355, 22
-
- Add [Shadowsocks] server
+
+ 97, 53
-
- 447, 22
+
+ groupBox2
+
+
+ Add [VLESS] server
+
+
+ 2
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Restart service
+
+
+ 184, 6
+
+
+ tsbSubSetting
+
+
+ 264, 22
+
+
+ groupBox2
+
+
+ menuMoveUp
Add [Socks] server
-
- 447, 22
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Add a custom configuration server
+
+
+ ImageAboveText
-
- 447, 22
+
+ 语言-[中文简体]
-
- Import bulk URL from clipboard
+
+ NoControl
-
- 447, 22
+
+ Top
-
- Scan QR code on the screen
+
+ tsbHelp
-
- 444, 6
+
+ 5
+
+
+
+ False
+
+
+ toolStripSeparator6
+
+
+ 355, 22
+
+
+ 99, 53
+
+
+ Update subscriptions
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 187, 22
+
+
+ toolSslBlank2
+
+
+ tsbCheckUpdateN
- 447, 22
+ 355, 22
-
- Remove selected server (multiple choice) (Delete)
-
-
- 447, 22
-
-
- Remove duplicate server
-
-
- 447, 22
-
-
- Copy selected server
-
-
- 447, 22
-
-
- Set as active server (Enter)
-
-
- 444, 6
-
-
- 447, 22
+
+ 355, 22
- Up to top
+ Move to top (T)
-
- 447, 22
+
+ 45, 53
-
- Upward (U)
+
+ Only open Http proxy and do nothing
-
- 447, 22
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Down (D)
+
+ toolStripSeparator7
-
- 447, 22
+
+ Update v2rayCore
-
- Moves down to the bottom
+
+ Magenta
-
- 447, 22
+
+ menuKeepNothing
-
- Select All (Ctrl+A)
+
+ 355, 22
-
- 444, 6
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 447, 22
+
+ menuExport2SubContent
-
- Test server ping (multiple choice)(Ctrl+P)
+
+ 52, 17
-
- 447, 22
+
+ Share
-
- Test server tcping (multiple choice)(Ctrl+O)
+
+ tsbQRCodeSwitch
-
- 447, 22
-
-
- Test server real ping (multiple choice)(Ctrl+R)
-
-
- 447, 22
-
-
- Test server speed (multiple choice)(Ctrl+T)
-
-
- 444, 6
-
-
- 447, 22
+
+ 355, 22
Export selected server for client configuration
-
- 447, 22
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Export selected server for server configuration
-
- 447, 22
-
-
- Batch export share URL to clipboard (multiple choice)
-
-
- 447, 22
-
-
- Batch export subscription content to clipboard (multiple choice)
-
-
- Magenta
-
-
- 64, 53
-
-
- Servers
-
-
+
ImageAboveText
-
- 448, 534
+
+ 952, 56
-
- cmsLv
+
+ System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ Test servers real delay (Ctrl+R)
+
+
+ menuTcpingServer
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ v2rayN
+
+
+ 411, 22
+
+
+ 355, 22
+
+
+ toolStripSeparator1
+
+
+ 3
+
+
+ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 393, 22
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbClose
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuPingServer
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbLanguageDef
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM
+ mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY
+ FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr
+ flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh
+ VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh
+ 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC
+
+
+
+ 411, 22
+
+
+ 3
+
+
+ 3, 17
+
+
+ 355, 22
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ 6, 56
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 220, 17
+
+
+ menuAddCustomServer
+
+
+ menuMoveDown
+
+
+ Import bulk URL from clipboard
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 411, 22
+
+
+ Move to bottom (B)
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 6, 12
+
+
+ 48, 53
+
+
+ 393, 22
+
+
+ 355, 22
+
+
+ System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel1
+
+
+ 195, 17
+
+
+ 0
+
+
+ 686, 331
+
+
+ toolStripSeparator4
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Bottom
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ scMain.Panel2
+
+
+ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 39, 17
+
+
+ menuAddServers2
+
+
+ Fill
+
+
+ tsbServer
+
+
+ Add [VMess] server
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ tsbAbout
+
+
+ 195, 17
+
+
+ toolStripSeparator5
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ 352, 6
+
+
+ 256, 331
+
+
+ 4, 4, 4, 4
+
+
+ Test servers with tcping (Ctrl+O)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 6, 56
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 195, 17
+
+
+ 2
+
+
+ 125, 22
+
+
+ 0, 17
+
+
+ scMain.Panel2
+
+
+ 58, 53
+
+
+ 355, 22
+
+
+ Not Enabled Http Proxy
+
+
+ 187, 22
+
+
+ 6, 56
+
+
+ Test servers download speed (Ctrl+T)
+
+
+ ssMain
+
+
+ 686
+
+
+ ImageAboveText
+
+
+ 265, 164
+
+
+ 355, 22
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ scMain
+
+
+ Check for updates
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolSslServerSpeed
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 4
+
+
+ 125, 22
+
+
+ Only open Http proxy and clear the proxy settings
+
+
+ scMain
+
+
+ HTTP:
+
+
+ Remove selected servers (Delete)
+
+
+ 411, 22
+
+
+ menuKeepPAC
+
+
+ 0
+
+
+ Help
+
+
+ menuSelectAll
+
+
+ $this
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Vertical
+
+
+ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Scan QR code on the screen (Ctrl+S)
+
+
+ ImageAboveText
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 187, 22
+
+
+ menuAddServers
+
+
+ 355, 22
+
+
+ menuAddVmessServer
+
+
+ tsbLanguageZhHans
+
+
+ menuRemoveDuplicateServer
+
+
+ BottomCenter
+
+
+ menuExport2ShareUrl
+
+
+ tsMain
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbReload
+
+
+ v2rayN (this software)
+
+
+ Magenta
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 66
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbV2rayWebsite
+
+
+ Server
+
+
+ v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ menuAddShadowsocksServer
+
+
+ txtMsgBox
+
+
+ toolSslBlank4
+
+
+ menuAddTrojanServer
+
+
+ 261, 6
+
+
+ v2rayN
+
+
+ Language-[English]
+
+
+ menuSpeedServer
+
+
+ 264, 22
+
+
+ 0
+
+
+ toolSslBlank3
+
+
+ 128, 53
+
+
+ Add [Trojan] server
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolStripSeparator11
System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Fill
+
+ 0, 417
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 352, 6
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ V2Ray Website
+
+
+ No
+
+
+ 1
+
+
+ toolSslPacPort
+
+
+ System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Settings
+
+
+ menuMoveTop
+
+
+ menuKeep
@@ -319,566 +832,539 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
-
- 0, 0
-
-
- 686, 331
-
-
-
- 1
-
-
- lvServers
-
-
- v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- splitContainer1.Panel1
-
-
- 0
-
-
- splitContainer1.Panel1
-
-
- System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- splitContainer1
-
-
- 0
-
-
- Fill
-
-
- 0, 0
-
-
- 256, 331
-
-
- 0
-
-
- qrCodeControl
-
-
- v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
-
- splitContainer1.Panel2
-
-
- 0
-
-
- splitContainer1.Panel2
-
-
- System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- splitContainer1
-
-
- 1
-
-
- 100
-
-
- 946, 331
-
-
- 686
-
-
- 2
-
-
- splitContainer1
-
-
- System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 0
-
-
- 17, 17
-
-
- 137, 17
-
-
- NoControl
-
-
- 547, 22
-
-
- Not Enabled Http Proxy
-
-
- 547, 22
-
-
- Open Http proxy and automatically configure proxy server (global mode)
-
-
- 547, 22
-
-
- Open PAC and automatically configure PAC (PAC mode)
-
-
- 547, 22
-
-
- Only open Http proxy, do not automatically configure proxy server (direct mode)
-
-
- 547, 22
-
-
- Only open PAC, do not automatically configure PAC
-
-
- 264, 22
-
-
- Http proxy
-
-
- 264, 22
-
-
- Server
-
-
- 264, 22
-
-
- Import bulk URL from clipboard
-
-
- 264, 22
-
-
- Scan QR code on the screen
-
-
- 264, 22
-
-
- Copy local PAC URL
-
-
- 261, 6
-
-
- 264, 22
-
-
- Exit
-
-
- 265, 142
-
-
- cmsMain
-
-
- System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- v2rayN
-
-
- True
-
-
- 498, 17
-
-
- Fill
-
-
- 0, 66
-
952, 351
-
- 2
+
+ menuScanScreen
-
- Server list
+
+ cmsLv
-
- groupBox1
+
+ toolStripSeparator12
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 6, 56
-
- $this
-
-
- 2
-
-
+
Fill
-
- 3, 17
+
+ toolSslBlank1
-
- 0
-
-
- True
-
-
- Vertical
-
-
- 946, 134
-
-
- 2
-
-
- txtMsgBox
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 0
-
-
- 228, 18
-
-
- 微软雅黑, 8pt
-
-
- 49, 17
-
-
- SOCKS5
-
-
- 0, 17
-
-
- 微软雅黑, 8pt
-
-
- 198, 17
+
+ tsbSubUpdate
微软雅黑, 8pt
-
- 36, 17
-
-
- HTTP
-
-
- 0, 17
-
-
- 微软雅黑, 8pt
-
-
- 198, 17
-
-
- 微软雅黑, 8pt
-
-
- 30, 17
-
-
- PAC
-
-
- 0, 17
-
-
- 微软雅黑, 8pt
-
-
- 198, 17
-
-
- False
-
-
- 微软雅黑, 8pt
-
-
- No
-
-
- 220, 17
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
SPEED Disabled
-
- MiddleRight
+
+ PAC:
-
+
+ Promotion
+
+
+ menuSysAgentMode
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 0
+
+
+ Export subscription (base64) share to clipboard
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuScanScreen2
+
+
+ cmsMain
+
+
+ 264, 22
+
+
+ menuServers
+
+
+ menuUpdateSubscriptions
+
+
+ $this
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolStripSeparator13
+
+
+ 1
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
0, 17
3, 151
-
- 946, 22
+
+ True
-
- 7
+
+ 355, 22
-
- statusStrip1
-
-
- ssMain
-
-
- System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 1
-
-
- Bottom
-
-
- 0, 417
-
-
- 952, 176
-
-
- 4
-
-
- Information
-
-
- groupBox2
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 3
-
-
- Top
-
-
- 0, 56
+
+ Subscriptions
952, 10
-
- 5
-
-
- panel1
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 4
-
-
- 409, 17
-
-
- 6, 56
-
-
- 197, 22
-
-
- Subscription settings
-
-
- 197, 22
-
- Update subscription
+ Updates
-
- Magenta
+
+ 264, 22
-
- 93, 53
+
+ menuNotEnabledHttp
-
- Subscription
+
+ 0
-
- ImageAboveText
+
+ Informations
-
- 6, 56
-
-
- Magenta
-
-
- 52, 53
-
-
- Setting
-
-
- ImageAboveText
-
-
- 6, 56
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
- QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
- jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
- 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
- NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY
- B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg==
-
-
-
- BottomCenter
-
-
- Magenta
-
-
- 97, 53
-
-
- Restart service
-
-
- ImageAboveText
-
-
- 6, 56
-
-
- 338, 22
-
-
- Check for updates to v2rayN
-
-
- 338, 22
-
-
- Check for updates to v2rayCore
-
-
- 338, 22
-
-
- Check for updated PAC (requires Http proxy)
-
-
- 338, 22
-
-
- Simplify PAC (please set Core route)
-
-
- Magenta
-
-
- 128, 53
-
-
- Check for updates
-
-
- ImageAboveText
-
-
- 6, 56
-
-
- 187, 22
-
-
- About
-
-
- 184, 6
-
-
- 187, 22
-
-
- Language-[English]
-
-
- 187, 22
-
-
- 语言-[中文简体]
-
-
- Magenta
-
-
- 48, 53
-
-
- Help
-
-
- ImageAboveText
-
-
- Magenta
+
+ toolStripSeparator8
89, 53
-
- Promotion
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ BottomCenter
+
+
+ Test servers ping (Ctrl+P)
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 355, 22
+
+
+ 264, 22
+
+
+ System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuSetDefaultServer
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Settings
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuCopyServer
+
+
+ Http proxy
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 411, 22
+
+
+ Only open PAC and clear the proxy settings
+
+
+ 355, 22
+
+
+ groupBox1
+
+
+ MainForm
+
+
+ toolStripSeparator9
+
+
+ menuExit
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Servers list
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ lvServers
+
+
+ menuRealPingServer
+
+
+ Magenta
+
+
+ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuGlobal
+
+
+ 100
+
+
+ 2
+
+
+ menuKeepPACNothing
+
+
+ Check for updated PAC (need the HTTP proxy are ON)
+
+
+ 355, 22
+
+
+ v2rayN Project
+
+
+ Servers
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Select All (Ctrl+A)
+
+
+ ImageAboveText
+
+
+ 3
+
+
+ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tsbCheckUpdateCore
+
+
+ SOCKS5:
+
+
+ 33, 17
+
+
+ 355, 22
+
+
+ menuRemoveServer
+
+
+ tsbTestMe
+
+
+ 355, 22
+
+
+ 946, 134
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ scMain
+
+
+ Down (D)
+
+
+ menuCopyPACUrl
+
+
+ 352, 6
+
+
+ Magenta
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Only open PAC and do nothing
+
+
+ 355, 22
+
+
+ tsbSub
+
+
+ Magenta
+
+
+ ImageAboveText
+
+
+ Clone selected server
+
+
+ 0, 0
+
+
+ 355, 22
+
+
+ groupBox2
+
+
+ tsbCheckUpdate
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 微软雅黑, 8pt
+
+
+ Export share URLs to clipboard (Ctrl+C)
+
+
+ 411, 22
+
+
+ 355, 22
+
+
+ v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+ 微软雅黑, 8pt
+
+
+ System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Simplify PAC (need to set Core route)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ $this
+
+
+ Fill
+
+
+ qrCodeControl
+
+
+ 264, 22
+
+
+ 355, 22
+
+
+ 0
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 微软雅黑, 8pt
+
+
+ tsbPromotion
+
+
+ ImageAboveText
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuGlobalPAC
+
+
+ 393, 22
+
+
+ 356, 600
+
+
+ 0, 0
+
+
+ scMain.Panel1
+
+
+ Up (U)
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ notifyMain
+
+
+ Open Http proxy and set the system proxy (global mode)
+
+
+ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MiddleRight
+
+
+ tsbOptionSetting
+
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ menuAddSocksServer
+
+
+ scMain.Panel1
+
+
+ 微软雅黑, 8pt
+
+
+ 64, 53
+
+
+ Magenta
+
+
+ 946, 22
+
+
+ Open PAC and set the system proxy (PAC mode)
+
+
+ 355, 22
+
+
+ Set as active server (Enter)
+
+
+ menuAddVlessServer
+
+
+ System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 946, 331
+
+
+ 6, 56
+
+
+ Add [Shadowsocks] server
+
+
+ 390, 6
+
+
+ 微软雅黑, 8pt
+
+
+ 952, 593
+
+
+ 411, 22
+
+
+ tsbCheckClearPACList
+
+
+ Test current service status
+
+
+ toolSslSocksPort
+
+
+ toolStripSeparator10
+
+
+ toolSslHttpPortLab
+
+
+ menuMoveBottom
+
+
+ 393, 22
+
+
+ 1
+
+
+ Magenta
+
+
+ menuExport2ClientConfig
+
+
+ 187, 22
+
+
+ menuExport2ServerConfig
+
+
+ 0
ImageAboveText
@@ -886,524 +1372,152 @@
6, 56
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
- GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
-
+
+ 0, 17
-
+
+ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
Magenta
52, 53
-
- Close
-
-
+
ImageAboveText
-
- 0, 0
-
-
- 952, 56
-
-
- 6
-
-
- tsMain
-
-
- System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 5
-
-
- True
-
-
- 65
-
-
- 6, 12
-
-
- 952, 593
-
-
- 4, 4, 4, 4
-
-
- v2rayN
-
-
- menuAddVmessServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddShadowsocksServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddSocksServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddCustomServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddServers
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuScanScreen
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator1
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuRemoveServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuRemoveDuplicateServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuCopyServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSetDefaultServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator3
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveTop
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveUp
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveDown
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuMoveBottom
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSelectAll
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator9
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuPingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuTcpingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuRealPingServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSpeedServer
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator6
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2ClientConfig
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2ServerConfig
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2ShareUrl
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExport2SubContent
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbServer
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- notifyMain
-
-
- System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuSysAgentMode
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuNotEnabledHttp
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuGlobal
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuGlobalPAC
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuKeep
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuKeepPAC
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuServers
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuAddServers2
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuScanScreen2
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuCopyPACUrl
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator2
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- menuExit
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- bgwScan
-
-
- System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslSocksPortLab
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslSocksPort
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank1
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslHttpPortLab
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslHttpPort
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank2
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
toolSslPacPortLab
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslPacPort
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank3
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslServerSpeed
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolSslBlank4
-
-
- System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator4
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbSub
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbSubSetting
-
-
+
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- tsbSubUpdate
+
+ Exit
-
+
+ bgwScan
+
+
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- toolStripSeparator8
+
+ Scan QR code on the screen
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 0, 56
-
- tsbOptionSetting
+
+ Close
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 264, 22
-
- toolStripSeparator5
+
+ 0, 17
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 0
-
- tsbReload
+
+ Import bulk URL from clipboard (Ctrl+V)
+
+
+ $this
+
+
+ toolStripSeparator2
+
+
+ toolSslSocksPortLab
+
+
+ Add a custom configuration server
+
+
+ toolSslHttpPort
System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- toolStripSeparator7
+
+ 352, 6
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 952, 176
-
- tsbCheckUpdate
+
+ statusStrip1
-
+
System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- tsbCheckUpdateN
+
+ 0
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Fill
-
- tsbCheckUpdateCore
+
+ Copy local PAC URL
-
+
+ 3, 17
+
+
+ toolStripSeparator3
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA
+ 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC
+
+
+
+ 355, 22
+
+
+ 微软雅黑, 8pt
+
+
+ 355, 22
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
tsbCheckUpdatePACList
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbCheckClearPACList
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator10
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbHelp
-
-
- System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbAbout
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator12
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbLanguageDef
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbLanguageZhHans
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbPromotion
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- toolStripSeparator11
-
-
- System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tsbClose
-
-
- System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- MainForm
-
-
- v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
-
+
+ 228, 18
+
+
+ True
+
+
+ 108
+
+
+ 137, 17
+
+
+ 498, 17
+
+
+ 17, 17
+
+
+ 409, 17
+
+
+ 327, 17
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
index d9fdbce0..83e8f530 100644
--- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx
@@ -119,163 +119,175 @@
- 278, 22
+ 300, 22
添加[VMess]服务器
+
+ 300, 22
+
+
+ 添加[VLESS]服务器
+
- 278, 22
+ 300, 22
添加[Shadowsocks]服务器
- 278, 22
+ 300, 22
添加[Socks]服务器
+
+ 300, 22
+
+
+ 添加[Trojan]服务器
+
- 278, 22
+ 300, 22
添加自定义配置服务器
- 278, 22
+ 300, 22
- 从剪贴板导入批量URL
+ 从剪贴板导入批量URL (Ctrl+V)
- 278, 22
+ 300, 22
- 扫描屏幕上的二维码
+ 扫描屏幕上的二维码 (Ctrl+S)
- 275, 6
+ 297, 6
- 278, 22
+ 300, 22
- 移除所选服务器(多选) (Delete)
+ 移除所选服务器(多选) (Delete)
- 278, 22
+ 300, 22
移除重复的服务器
- 278, 22
+ 300, 22
- 复制所选服务器
+ 克隆所选服务器
- 278, 22
+ 300, 22
- 设为活动服务器 (Enter)
+ 设为活动服务器 (Enter)
- 275, 6
+ 297, 6
- 278, 22
+ 300, 22
- 上移至顶
+ 上移至顶 (T)
- 278, 22
+ 300, 22
- 上移 (U)
+ 上移 (U)
- 278, 22
+ 300, 22
- 下移 (D)
+ 下移 (D)
- 278, 22
+ 300, 22
- 下移至底
+ 下移至底 (B)
- 278, 22
+ 300, 22
- 全选 (Ctrl+A)
+ 全选 (Ctrl+A)
- 275, 6
+ 297, 6
- 278, 22
+ 300, 22
- 测试服务器延迟Ping(多选)(Ctrl+P)
+ 测试服务器延迟Ping(多选) (Ctrl+P)
- 278, 22
+ 300, 22
- 测试服务器延迟Tcping(多选)(Ctrl+O)
+ 测试服务器延迟Tcping(多选) (Ctrl+O)
- 278, 22
+ 300, 22
- 测试服务器真连接延迟(多选)(Ctrl+R)
+ 测试服务器真连接延迟(多选) (Ctrl+R)
- 278, 22
+ 300, 22
- 测试服务器速度(多选)(Ctrl+T)
+ 测试服务器速度(多选) (Ctrl+T)
+
+
+ 300, 22
+
+
+ 测试当前服务状态
- 275, 6
+ 297, 6
- 278, 22
+ 300, 22
导出所选服务器为客户端配置
- 278, 22
+ 300, 22
导出所选服务器为服务端配置
- 278, 22
+ 300, 22
- 批量导出分享URL至剪贴板(多选)
+ 批量导出分享URL至剪贴板(多选) (Ctrl+C)
- 278, 22
+ 300, 22
批量导出订阅内容至剪贴板(多选)
-
- 73, 53
-
-
- 服务器
-
- 279, 534
+ 301, 600
@@ -294,35 +306,14 @@
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
-
- 340, 22
+
+ 73, 53
-
- 关闭Http代理
+
+ 服务器
-
- 340, 22
-
-
- 开启Http代理,并自动配置代理服务器(全局模式)
-
-
- 340, 22
-
-
- 开启PAC,并自动配置PAC(PAC模式)
-
-
- 340, 22
-
-
- 仅开启Http代理,不自动配置代理服务器(直连模式)
-
-
- 340, 22
-
-
- 仅开启PAC,不自动配置PAC
+
+ 196, 164
195, 22
@@ -330,6 +321,48 @@
Http代理
+
+ 316, 22
+
+
+ 关闭Http代理
+
+
+ 316, 22
+
+
+ 开启Http代理,并自动配置系统代理(全局模式)
+
+
+ 316, 22
+
+
+ 开启PAC,并自动配置系统代理(PAC模式)
+
+
+ 316, 22
+
+
+ 仅开启Http代理,并清除系统代理
+
+
+ 316, 22
+
+
+ 仅开启PAC,并清除系统代理
+
+
+ 316, 22
+
+
+ 仅开启Http代理,不改变系统代理
+
+
+ 316, 22
+
+
+ 仅开启PAC,不改变系统代理
+
195, 22
@@ -354,6 +387,12 @@
复制本地PAC网址
+
+ 195, 22
+
+
+ 更新订阅
+
192, 6
@@ -363,17 +402,20 @@
退出
-
- 196, 142
-
服务器列表
+
+ 信息
+
网速显示未启用
-
- 信息
+
+ 61, 53
+
+
+ 订阅
124, 22
@@ -387,11 +429,11 @@
更新订阅
-
- 61, 53
+
+ 52, 53
-
- 订阅
+
+ 分享
76, 53
@@ -402,7 +444,7 @@
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
@@ -416,38 +458,38 @@
重启服务
-
- 232, 22
-
-
- 检查更新v2rayN
-
-
- 232, 22
-
-
- 检查更新v2rayCore
-
-
- 232, 22
-
-
- 检查更新PAC (需要Http代理)
-
-
- 232, 22
-
-
- 简化PAC (请设置Core路由)
-
85, 53
检查更新
-
- 关于
+
+ 223, 22
+
+
+ v2rayN
+
+
+ 223, 22
+
+
+ v2rayCore
+
+
+ 223, 22
+
+
+ PAC
+
+
+ 220, 6
+
+
+ 223, 22
+
+
+ 简化PAC (请设置Core路由)
69, 53
@@ -455,6 +497,12 @@
帮助
+
+ v2rayN 项目
+
+
+ V2Ray 官网
+
68, 53
@@ -464,11 +512,14 @@
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
+
+ 76, 53
+
- 关闭
+ 关闭窗口
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
index 57488adc..62af6048 100644
--- a/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
+++ b/v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
@@ -33,6 +33,7 @@
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox();
this.label16 = new System.Windows.Forms.Label();
this.cmblistenerType = new System.Windows.Forms.ComboBox();
this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox();
@@ -65,10 +66,10 @@
this.tabPage8 = new System.Windows.Forms.TabPage();
this.cmbroutingMode = new System.Windows.Forms.ComboBox();
this.panel3 = new System.Windows.Forms.Panel();
+ this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel();
this.btnSetDefRountingRule = new System.Windows.Forms.Button();
this.labRoutingTips = new System.Windows.Forms.Label();
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
- this.label15 = new System.Windows.Forms.Label();
this.tabPage6 = new System.Windows.Forms.TabPage();
this.chkKcpcongestion = new System.Windows.Forms.CheckBox();
this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox();
@@ -84,6 +85,7 @@
this.txtKcpmtu = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.tabPage7 = new System.Windows.Forms.TabPage();
+ this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox();
this.cbFreshrate = new System.Windows.Forms.ComboBox();
this.lbFreshrate = new System.Windows.Forms.Label();
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
@@ -91,6 +93,10 @@
this.txturlGFWList = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.chkAutoRun = new System.Windows.Forms.CheckBox();
+ this.tabPage9 = new System.Windows.Forms.TabPage();
+ this.txtuserPacRule = new System.Windows.Forms.TextBox();
+ this.panel4 = new System.Windows.Forms.Panel();
+ this.label4 = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.btnOK = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
@@ -107,36 +113,41 @@
this.panel3.SuspendLayout();
this.tabPage6.SuspendLayout();
this.tabPage7.SuspendLayout();
+ this.tabPage9.SuspendLayout();
+ this.panel4.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// btnClose
//
- this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
+ this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// tabControl1
//
+ resources.ApplyResources(this.tabControl1, "tabControl1");
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage6);
this.tabControl1.Controls.Add(this.tabPage7);
- resources.ApplyResources(this.tabControl1, "tabControl1");
+ this.tabControl1.Controls.Add(this.tabPage9);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
//
// tabPage1
//
- this.tabPage1.Controls.Add(this.groupBox1);
resources.ApplyResources(this.tabPage1, "tabPage1");
+ this.tabPage1.Controls.Add(this.groupBox1);
this.tabPage1.Name = "tabPage1";
this.tabPage1.UseVisualStyleBackColor = true;
//
// groupBox1
//
+ resources.ApplyResources(this.groupBox1, "groupBox1");
+ this.groupBox1.Controls.Add(this.chkdefAllowInsecure);
this.groupBox1.Controls.Add(this.label16);
this.groupBox1.Controls.Add(this.cmblistenerType);
this.groupBox1.Controls.Add(this.chksniffingEnabled2);
@@ -157,10 +168,15 @@
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.txtlocalPort);
this.groupBox1.Controls.Add(this.label2);
- resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
+ // chkdefAllowInsecure
+ //
+ resources.ApplyResources(this.chkdefAllowInsecure, "chkdefAllowInsecure");
+ this.chkdefAllowInsecure.Name = "chkdefAllowInsecure";
+ this.chkdefAllowInsecure.UseVisualStyleBackColor = true;
+ //
// label16
//
resources.ApplyResources(this.label16, "label16");
@@ -168,6 +184,7 @@
//
// cmblistenerType
//
+ resources.ApplyResources(this.cmblistenerType, "cmblistenerType");
this.cmblistenerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmblistenerType.FormattingEnabled = true;
this.cmblistenerType.Items.AddRange(new object[] {
@@ -175,8 +192,9 @@
resources.GetString("cmblistenerType.Items1"),
resources.GetString("cmblistenerType.Items2"),
resources.GetString("cmblistenerType.Items3"),
- resources.GetString("cmblistenerType.Items4")});
- resources.ApplyResources(this.cmblistenerType, "cmblistenerType");
+ resources.GetString("cmblistenerType.Items4"),
+ resources.GetString("cmblistenerType.Items5"),
+ resources.GetString("cmblistenerType.Items6")});
this.cmblistenerType.Name = "cmblistenerType";
//
// chksniffingEnabled2
@@ -222,12 +240,12 @@
//
// cmbprotocol2
//
+ resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbprotocol2.FormattingEnabled = true;
this.cmbprotocol2.Items.AddRange(new object[] {
resources.GetString("cmbprotocol2.Items"),
resources.GetString("cmbprotocol2.Items1")});
- resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
this.cmbprotocol2.Name = "cmbprotocol2";
//
// label3
@@ -242,8 +260,8 @@
//
// cmbprotocol
//
- this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
+ this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbprotocol.FormattingEnabled = true;
this.cmbprotocol.Items.AddRange(new object[] {
resources.GetString("cmbprotocol.Items"),
@@ -269,6 +287,7 @@
//
// cmbloglevel
//
+ resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbloglevel.FormattingEnabled = true;
this.cmbloglevel.Items.AddRange(new object[] {
@@ -277,7 +296,6 @@
resources.GetString("cmbloglevel.Items2"),
resources.GetString("cmbloglevel.Items3"),
resources.GetString("cmbloglevel.Items4")});
- resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
this.cmbloglevel.Name = "cmbloglevel";
//
// label5
@@ -297,33 +315,33 @@
//
// tabPage2
//
- this.tabPage2.Controls.Add(this.groupBox2);
resources.ApplyResources(this.tabPage2, "tabPage2");
+ this.tabPage2.Controls.Add(this.groupBox2);
this.tabPage2.Name = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true;
//
// groupBox2
//
+ resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.tabControl2);
this.groupBox2.Controls.Add(this.panel3);
- resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// tabControl2
//
+ resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Controls.Add(this.tabPage3);
this.tabControl2.Controls.Add(this.tabPage4);
this.tabControl2.Controls.Add(this.tabPage5);
this.tabControl2.Controls.Add(this.tabPage8);
- resources.ApplyResources(this.tabControl2, "tabControl2");
this.tabControl2.Name = "tabControl2";
this.tabControl2.SelectedIndex = 0;
//
// tabPage3
//
- this.tabPage3.Controls.Add(this.txtUseragent);
resources.ApplyResources(this.tabPage3, "tabPage3");
+ this.tabPage3.Controls.Add(this.txtUseragent);
this.tabPage3.Name = "tabPage3";
this.tabPage3.UseVisualStyleBackColor = true;
//
@@ -334,8 +352,8 @@
//
// tabPage4
//
- this.tabPage4.Controls.Add(this.txtUserdirect);
resources.ApplyResources(this.tabPage4, "tabPage4");
+ this.tabPage4.Controls.Add(this.txtUserdirect);
this.tabPage4.Name = "tabPage4";
this.tabPage4.UseVisualStyleBackColor = true;
//
@@ -346,8 +364,8 @@
//
// tabPage5
//
- this.tabPage5.Controls.Add(this.txtUserblock);
resources.ApplyResources(this.tabPage5, "tabPage5");
+ this.tabPage5.Controls.Add(this.txtUserblock);
this.tabPage5.Name = "tabPage5";
this.tabPage5.UseVisualStyleBackColor = true;
//
@@ -358,13 +376,14 @@
//
// tabPage8
//
- this.tabPage8.Controls.Add(this.cmbroutingMode);
resources.ApplyResources(this.tabPage8, "tabPage8");
+ this.tabPage8.Controls.Add(this.cmbroutingMode);
this.tabPage8.Name = "tabPage8";
this.tabPage8.UseVisualStyleBackColor = true;
//
// cmbroutingMode
//
+ resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode");
this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbroutingMode.FormattingEnabled = true;
this.cmbroutingMode.Items.AddRange(new object[] {
@@ -372,18 +391,24 @@
resources.GetString("cmbroutingMode.Items1"),
resources.GetString("cmbroutingMode.Items2"),
resources.GetString("cmbroutingMode.Items3")});
- resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode");
this.cmbroutingMode.Name = "cmbroutingMode";
//
// panel3
//
+ resources.ApplyResources(this.panel3, "panel3");
+ this.panel3.Controls.Add(this.linkLabelRoutingDoc);
this.panel3.Controls.Add(this.btnSetDefRountingRule);
this.panel3.Controls.Add(this.labRoutingTips);
this.panel3.Controls.Add(this.cmbdomainStrategy);
- this.panel3.Controls.Add(this.label15);
- resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
+ // linkLabelRoutingDoc
+ //
+ resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc");
+ this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc";
+ this.linkLabelRoutingDoc.TabStop = true;
+ this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked);
+ //
// btnSetDefRountingRule
//
resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule");
@@ -393,28 +418,24 @@
//
// labRoutingTips
//
- this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
+ this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
this.labRoutingTips.Name = "labRoutingTips";
//
// cmbdomainStrategy
//
+ resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbdomainStrategy.FormattingEnabled = true;
this.cmbdomainStrategy.Items.AddRange(new object[] {
resources.GetString("cmbdomainStrategy.Items"),
resources.GetString("cmbdomainStrategy.Items1"),
resources.GetString("cmbdomainStrategy.Items2")});
- resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
//
- // label15
- //
- resources.ApplyResources(this.label15, "label15");
- this.label15.Name = "label15";
- //
// tabPage6
//
+ resources.ApplyResources(this.tabPage6, "tabPage6");
this.tabPage6.Controls.Add(this.chkKcpcongestion);
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
this.tabPage6.Controls.Add(this.label10);
@@ -428,7 +449,6 @@
this.tabPage6.Controls.Add(this.label7);
this.tabPage6.Controls.Add(this.txtKcpmtu);
this.tabPage6.Controls.Add(this.label6);
- resources.ApplyResources(this.tabPage6, "tabPage6");
this.tabPage6.Name = "tabPage6";
this.tabPage6.UseVisualStyleBackColor = true;
//
@@ -500,6 +520,8 @@
//
// tabPage7
//
+ resources.ApplyResources(this.tabPage7, "tabPage7");
+ this.tabPage7.Controls.Add(this.chkKeepOlderDedupl);
this.tabPage7.Controls.Add(this.cbFreshrate);
this.tabPage7.Controls.Add(this.lbFreshrate);
this.tabPage7.Controls.Add(this.chkEnableStatistics);
@@ -507,15 +529,20 @@
this.tabPage7.Controls.Add(this.txturlGFWList);
this.tabPage7.Controls.Add(this.label13);
this.tabPage7.Controls.Add(this.chkAutoRun);
- resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Name = "tabPage7";
this.tabPage7.UseVisualStyleBackColor = true;
//
+ // chkKeepOlderDedupl
+ //
+ resources.ApplyResources(this.chkKeepOlderDedupl, "chkKeepOlderDedupl");
+ this.chkKeepOlderDedupl.Name = "chkKeepOlderDedupl";
+ this.chkKeepOlderDedupl.UseVisualStyleBackColor = true;
+ //
// cbFreshrate
//
+ resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbFreshrate.FormattingEnabled = true;
- resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
this.cbFreshrate.Name = "cbFreshrate";
//
// lbFreshrate
@@ -551,11 +578,36 @@
this.chkAutoRun.Name = "chkAutoRun";
this.chkAutoRun.UseVisualStyleBackColor = true;
//
+ // tabPage9
+ //
+ resources.ApplyResources(this.tabPage9, "tabPage9");
+ this.tabPage9.Controls.Add(this.txtuserPacRule);
+ this.tabPage9.Controls.Add(this.panel4);
+ this.tabPage9.Name = "tabPage9";
+ this.tabPage9.UseVisualStyleBackColor = true;
+ //
+ // txtuserPacRule
+ //
+ resources.ApplyResources(this.txtuserPacRule, "txtuserPacRule");
+ this.txtuserPacRule.Name = "txtuserPacRule";
+ //
+ // panel4
+ //
+ resources.ApplyResources(this.panel4, "panel4");
+ this.panel4.Controls.Add(this.label4);
+ this.panel4.Name = "panel4";
+ //
+ // label4
+ //
+ resources.ApplyResources(this.label4, "label4");
+ this.label4.ForeColor = System.Drawing.Color.Brown;
+ this.label4.Name = "label4";
+ //
// panel2
//
+ resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
- resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -601,6 +653,9 @@
this.tabPage6.PerformLayout();
this.tabPage7.ResumeLayout(false);
this.tabPage7.PerformLayout();
+ this.tabPage9.ResumeLayout(false);
+ this.tabPage9.PerformLayout();
+ this.panel4.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
@@ -662,7 +717,6 @@
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.ComboBox cmbdomainStrategy;
- private System.Windows.Forms.Label label15;
private System.Windows.Forms.ComboBox cmbroutingMode;
private System.Windows.Forms.CheckBox chksniffingEnabled;
private System.Windows.Forms.CheckBox chksniffingEnabled2;
@@ -673,5 +727,12 @@
private System.Windows.Forms.Label label16;
private System.Windows.Forms.ComboBox cmblistenerType;
private System.Windows.Forms.TabPage tabPage8;
+ private System.Windows.Forms.TabPage tabPage9;
+ private System.Windows.Forms.TextBox txtuserPacRule;
+ private System.Windows.Forms.Panel panel4;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.CheckBox chkKeepOlderDedupl;
+ private System.Windows.Forms.LinkLabel linkLabelRoutingDoc;
+ private System.Windows.Forms.CheckBox chkdefAllowInsecure;
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/v2rayN/Forms/OptionSettingForm.cs
index cefc211a..78d4eeff 100644
--- a/v2rayN/v2rayN/Forms/OptionSettingForm.cs
+++ b/v2rayN/v2rayN/Forms/OptionSettingForm.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Windows.Forms;
using v2rayN.Handler;
using v2rayN.Base;
+using v2rayN.HttpProxyHandler;
namespace v2rayN.Forms
{
@@ -22,6 +23,8 @@ namespace v2rayN.Forms
InitKCP();
InitGUI();
+
+ InitUserPAC();
}
///
@@ -65,7 +68,9 @@ namespace v2rayN.Forms
//remoteDNS
txtremoteDNS.Text = config.remoteDNS;
- cmblistenerType.SelectedIndex = config.listenerType;
+ cmblistenerType.SelectedIndex = (int)config.listenerType;
+
+ chkdefAllowInsecure.Checked = config.defAllowInsecure;
}
///
@@ -75,8 +80,7 @@ namespace v2rayN.Forms
{
//路由
cmbdomainStrategy.Text = config.domainStrategy;
- int routingMode = 0;
- int.TryParse(config.routingMode, out routingMode);
+ int.TryParse(config.routingMode, out int routingMode);
cmbroutingMode.SelectedIndex = routingMode;
txtUseragent.Text = Utils.List2String(config.useragent, true);
@@ -110,13 +114,13 @@ namespace v2rayN.Forms
txturlGFWList.Text = config.urlGFWList;
chkAllowLANConn.Checked = config.allowLANConn;
+ chkEnableStatistics.Checked = config.enableStatistics;
+ chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
- var enableStatistics = config.enableStatistics;
- chkEnableStatistics.Checked = enableStatistics;
- var cbSource = new ComboItem[]
+ ComboItem[] cbSource = new ComboItem[]
{
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")},
new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = UIRes.I18N("MediumFresh")},
@@ -142,6 +146,11 @@ namespace v2rayN.Forms
}
+ private void InitUserPAC()
+ {
+ txtuserPacRule.Text = Utils.List2String(config.userPacRule, true);
+ }
+
private void btnOK_Click(object sender, EventArgs e)
{
if (SaveBase() != 0)
@@ -164,13 +173,18 @@ namespace v2rayN.Forms
return;
}
+ if (SaveUserPAC() != 0)
+ {
+ return;
+ }
+
if (ConfigHandler.SaveConfig(ref config) == 0)
{
this.DialogResult = DialogResult.OK;
}
else
{
- UI.Show(UIRes.I18N("OperationFailed"));
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
@@ -250,8 +264,11 @@ namespace v2rayN.Forms
//remoteDNS
config.remoteDNS = txtremoteDNS.Text.TrimEx();
-
- config.listenerType = cmblistenerType.SelectedIndex;
+
+ config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex);
+
+ config.defAllowInsecure = chkdefAllowInsecure.Checked;
+
return 0;
}
@@ -328,9 +345,10 @@ namespace v2rayN.Forms
config.allowLANConn = chkAllowLANConn.Checked;
- var lastEnableStatistics = config.enableStatistics;
+ bool lastEnableStatistics = config.enableStatistics;
config.enableStatistics = chkEnableStatistics.Checked;
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
+ config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
//if(lastEnableStatistics != config.enableStatistics)
//{
@@ -344,6 +362,15 @@ namespace v2rayN.Forms
return 0;
}
+ private int SaveUserPAC()
+ {
+ string userPacRule = txtuserPacRule.Text.TrimEx();
+ userPacRule = userPacRule.Replace("\"", "");
+
+ config.userPacRule = Utils.String2List(userPacRule);
+
+ return 0;
+ }
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
@@ -368,25 +395,29 @@ namespace v2rayN.Forms
txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag);
cmbroutingMode.SelectedIndex = 3;
- var lstUrl = new List();
- lstUrl.Add(Global.CustomRoutingListUrl + Global.agentTag);
- lstUrl.Add(Global.CustomRoutingListUrl + Global.directTag);
- lstUrl.Add(Global.CustomRoutingListUrl + Global.blockTag);
+ List lstUrl = new List
+ {
+ Global.CustomRoutingListUrl + Global.agentTag,
+ Global.CustomRoutingListUrl + Global.directTag,
+ Global.CustomRoutingListUrl + Global.blockTag
+ };
- var lstTxt = new List();
- lstTxt.Add(txtUseragent);
- lstTxt.Add(txtUserdirect);
- lstTxt.Add(txtUserblock);
+ List lstTxt = new List
+ {
+ txtUseragent,
+ txtUserdirect,
+ txtUserblock
+ };
for (int k = 0; k < lstUrl.Count; k++)
{
- var txt = lstTxt[k];
+ TextBox txt = lstTxt[k];
DownloadHandle downloadHandle = new DownloadHandle();
downloadHandle.UpdateCompleted += (sender2, args) =>
{
if (args.Success)
{
- var result = args.Msg;
+ string result = args.Msg;
if (Utils.IsNullOrEmpty(result))
{
return;
@@ -410,6 +441,11 @@ namespace v2rayN.Forms
{
labRoutingTips.Text = text;
}
+
+ private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html");
+ }
}
class ComboItem
diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.resx
index e2c26e28..2d85641a 100644
--- a/v2rayN/v2rayN/Forms/OptionSettingForm.resx
+++ b/v2rayN/v2rayN/Forms/OptionSettingForm.resx
@@ -117,1412 +117,34 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 355, 16
-
-
- 75, 23
-
-
- 7
-
-
- &Cancel
-
-
- btnClose
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 0
-
-
- True
-
-
-
- NoControl
-
-
- 42, 98
-
-
- 65, 12
-
-
- 34
-
-
- Http proxy
-
-
- label16
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 0
-
-
- Not Enabled Http Proxy
-
-
- Open Http proxy and automatically configure proxy server (global mode)
-
-
- Open PAC and automatically configure PAC (PAC mode)
-
-
- Only open Http proxy, do not automatically configure proxy server (direct mode)
-
-
- Only open PAC, do not automatically configure PAC
-
-
- 124, 94
-
-
- 464, 20
-
-
- 33
-
-
- cmblistenerType
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 1
-
-
- True
-
-
- NoControl
-
-
- 468, 60
-
-
- 120, 16
-
-
- 32
-
-
- Turn on Sniffing
-
-
- False
-
-
- chksniffingEnabled2
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 2
-
-
- True
-
-
- NoControl
-
-
- 468, 27
-
-
- 120, 16
-
-
- 31
-
-
- Turn on Sniffing
-
-
- chksniffingEnabled
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 3
-
-
- 33, 228
-
-
- 402, 21
-
-
- 30
-
-
- txtremoteDNS
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 4
-
-
- True
-
-
- 33, 204
-
-
- 281, 12
-
-
- 29
-
-
- Custom DNS (multiple, separated by commas (,))
-
-
- label14
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 5
-
-
- True
-
-
- 15, 129
-
-
- 174, 16
-
-
- 20
-
-
- Turn on Mux Multiplexing
-
-
- chkmuxEnabled
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 6
-
True
-
- 15, 63
-
-
- 120, 16
-
-
- 19
-
-
- listening port 2
-
-
- False
-
-
- chkAllowIn2
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 7
-
-
- True
-
-
- 369, 62
-
-
- 84, 16
-
-
- 18
-
-
- Enable UDP
-
-
- False
-
-
- chkudpEnabled2
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 8
-
-
- socks
-
-
- http
-
-
- 257, 60
-
-
- 97, 20
-
-
- 17
-
-
- False
-
-
- cmbprotocol2
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 9
-
-
- True
-
-
- 206, 64
-
-
- 53, 12
-
-
- 16
-
-
- protocol
-
-
- False
-
-
- label3
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 10
-
-
- 124, 60
-
-
- 78, 21
-
-
- 14
-
-
- False
-
-
- txtlocalPort2
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 11
-
-
- False
-
-
- socks
-
-
- http
-
-
- 257, 25
-
-
- 97, 20
-
-
- 12
-
-
- cmbprotocol
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 12
-
-
- True
-
-
- 206, 29
-
-
- 53, 12
-
-
- 11
-
-
- protocol
-
-
- label1
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 13
-
-
- True
-
-
- 369, 27
-
-
- 84, 16
-
-
- 10
-
-
- Enable UDP
-
-
- chkudpEnabled
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 14
-
-
- True
-
-
- 15, 160
-
-
- 126, 16
-
-
- 9
-
-
- Record local logs
-
-
- chklogEnabled
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 15
-
-
- debug
-
-
- info
-
-
- warning
-
-
- error
-
-
- none
-
-
- 257, 158
-
-
- 97, 20
-
-
- 6
-
-
- cmbloglevel
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 16
-
-
- True
-
-
- 193, 162
-
-
- 59, 12
-
-
- 8
-
-
- Log level
-
-
- label5
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 17
-
-
- 124, 25
-
-
- 78, 21
-
-
- 3
-
-
- txtlocalPort
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 18
-
-
- True
-
-
- 33, 29
-
-
- 89, 12
-
-
- 2
-
-
- Listening port
-
-
- label2
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox1
-
-
- 19
-
-
- Fill
-
-
- 3, 3
-
-
- 648, 573
-
-
- 6
-
-
- groupBox1
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage1
-
-
- 0
-
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 654, 579
-
-
- 0
-
-
- Core: basic settings
-
-
- tabPage1
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl1
-
-
- 0
-
-
- Fill
-
-
- 3, 3
-
-
- 0
-
-
- True
-
-
- Vertical
-
-
- 628, 454
-
-
- 0
-
-
- txtUseragent
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage3
-
-
- 0
-
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 634, 460
-
-
- 0
-
-
- 1.Proxy Domain or IP
-
-
- tabPage3
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl2
-
-
- 0
-
-
- Fill
-
-
- 3, 3
-
-
- 0
-
-
- True
-
-
- Vertical
-
-
- 628, 454
-
-
- 1
-
-
- txtUserdirect
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage4
-
-
- 0
-
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 634, 460
-
-
- 1
-
-
- 2.Direct Domain or IP
-
-
- tabPage4
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl2
-
-
- 1
-
-
- Fill
-
-
- 3, 3
-
-
- 0
-
-
- True
-
-
- Vertical
-
-
- 628, 454
-
-
- 1
-
-
- txtUserblock
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage5
-
-
- 0
-
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 634, 460
-
-
- 2
-
-
- 3.Block Domain or IP
-
-
- tabPage5
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl2
-
-
- 2
-
-
- Global
-
-
- Bypassing the LAN address
-
-
- Bypass mainland address
-
-
- Bypassing LAN and mainland address
-
-
- 21, 17
-
-
- 255, 20
-
-
- 14
-
-
- cmbroutingMode
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage8
-
-
- 0
-
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 634, 460
-
-
- 3
-
-
- 4.Pre-defined rules
-
-
- tabPage8
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl2
-
-
- 3
-
-
- Fill
-
-
- 3, 84
-
-
- 642, 486
-
-
- 12
-
-
- tabControl2
-
-
- System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 0
-
-
- 322, 10
-
-
- 229, 23
-
-
- 18
-
-
- Set default custom routing rules
-
-
- btnSetDefRountingRule
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel3
-
-
- 0
-
-
- 5, 45
-
-
- 598, 16
-
-
- 13
-
-
- *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP
-
-
- labRoutingTips
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel3
-
-
- 1
-
-
- AsIs
-
-
- IPIfNonMatch
-
-
- IPOnDemand
-
-
- 115, 10
-
-
- 165, 20
-
-
- 16
-
-
- cmbdomainStrategy
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel3
-
-
- 2
-
-
- True
-
-
- NoControl
-
-
- 5, 14
-
-
- 95, 12
-
-
- 17
-
-
- Domain strategy
-
-
- label15
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel3
-
-
- 3
-
-
- Top
-
-
- 3, 17
-
-
- 642, 67
-
-
- 19
-
-
- panel3
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- groupBox2
-
-
- 1
-
-
- Fill
-
-
- 3, 3
-
-
- 648, 573
-
-
- 12
-
-
- groupBox2
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage2
-
-
- 0
-
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 654, 579
-
-
- 1
-
-
- Core: Routing settings
-
-
- tabPage2
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl1
-
-
- 1
-
-
- True
-
-
- 20, 143
-
-
- 84, 16
-
-
- 20
-
-
- congestion
-
-
- chkKcpcongestion
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 0
-
-
- 345, 100
-
-
- 94, 21
-
-
- 15
-
-
- txtKcpwriteBufferSize
-
System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- tabPage6
+
+ 11
-
- 1
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- True
+
+ groupBox2
-
- 236, 104
-
-
- 95, 12
-
-
- 14
-
-
- writeBufferSize
-
-
- label10
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
+
2
-
- 111, 100
+
+
+ 30, 176
-
- 94, 21
+
+ Record local logs
-
- 13
-
-
- txtKcpreadBufferSize
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 3
-
-
- True
-
-
- 18, 104
-
-
- 89, 12
-
-
- 12
-
-
- readBufferSize
-
-
- label11
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 4
-
-
- 345, 62
-
-
- 94, 21
-
-
- 11
-
-
- txtKcpdownlinkCapacity
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 5
-
-
- True
-
-
- 236, 66
-
-
- 101, 12
-
-
- 10
-
-
- downlinkCapacity
-
-
- label8
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 6
-
-
- 111, 62
-
-
- 94, 21
-
-
- 9
-
-
- txtKcpuplinkCapacity
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 7
-
-
- True
-
-
- 18, 66
-
-
- 89, 12
-
-
- 8
-
-
- uplinkCapacity
-
-
- label9
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 8
-
-
- 345, 24
-
-
- 94, 21
-
-
- 7
-
-
- txtKcptti
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 9
-
-
- True
-
-
- 236, 28
-
-
- 23, 12
-
-
- 6
-
-
- tti
-
-
- label7
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 10
-
-
- 111, 24
-
-
- 94, 21
-
-
- 5
-
-
- txtKcpmtu
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
-
-
- 11
-
-
- True
-
-
- 18, 28
-
-
- 23, 12
-
-
- 4
-
-
- mtu
-
-
- label6
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage6
+
+ 634, 460
12
@@ -1530,355 +152,1922 @@
4, 22
-
- 3, 3, 3, 3
+
+ txtKcpwriteBufferSize
-
- 654, 579
-
-
- 2
-
-
- Core: KCP settings
-
-
- tabPage6
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl1
-
-
- 2
-
-
- 161, 84
-
-
- 58, 20
-
-
- 32
-
-
- cbFreshrate
-
-
- System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage7
-
-
- 0
-
-
- True
-
-
- NoControl
-
-
- 30, 92
-
-
- 125, 12
-
-
- 30
-
-
- Statistics freshrate
-
-
- lbFreshrate
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage7
+
+ txtuserPacRule
- 1
-
-
- True
-
-
- NoControl
-
-
- 15, 62
-
-
- 558, 16
-
-
- 29
-
-
- Enable Statistics(Realtime net speed and traffic data amount. Need restart v2rayN client)
-
-
- chkEnableStatistics
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage7
-
-
2
-
- True
+
+ False
-
- 15, 38
-
-
- 204, 16
-
-
- 29
-
-
- Allow connections from the LAN
-
-
- chkAllowLANConn
+
+ 18
System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- tabPage7
+
+ tabControl1
-
- 3
+
+ groupBox1
-
- 32, 205
-
-
- 544, 21
-
-
- 28
-
-
- txturlGFWList
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage7
-
-
- 4
-
-
- True
-
-
- 30, 176
-
-
- 431, 12
-
-
- 27
-
-
- Custom GFWList address (please fill in the blank without customization)
-
-
- label13
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabPage7
-
-
+
5
-
+
+ 94, 21
+
+
+ 9
+
+
+ groupBox1
+
+
+ tabPage9
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ linkLabelRoutingDoc
+
+
+ 468, 60
+
+
+
+ Top
+
+
+ 102, 16
+
+
+ 6
+
+
+ txtKcptti
+
+
+ tabPage3
+
+
+ 4, 22
+
+
+ cmblistenerType
+
+
+ 0
+
+
+ 634, 460
+
+
+ 0
+
+
+ 111, 100
+
+
True
-
- 15, 16
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 132, 16
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 23
+
+ 3, 3
-
- Boot automatically
+
+ 598, 16
-
- chkAutoRun
+
+ Core: basic settings
-
+
+ True
+
+
+ 120, 16
+
+
+ 281, 12
+
+
+ panel3
+
+
+ True
+
+
+ tti
+
+
System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 84, 16
+
+
+ groupBox1
+
+
+ 65, 12
+
+
+ 628, 454
+
tabPage7
-
- 6
+
+ Only open PAC, do not automatically configure PAC
-
- 4, 22
-
-
- 3, 3, 3, 3
-
-
- 654, 579
-
-
- 3
-
-
- v2rayN settings
-
-
- tabPage7
-
-
- System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tabControl1
-
-
- 3
-
-
- Fill
-
-
- 0, 10
-
-
- 662, 605
-
-
- 10
-
-
- tabControl1
-
-
- System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 0
-
-
- 267, 16
-
-
- 75, 23
-
-
- 8
-
-
- &OK
-
-
- btnOK
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 1
-
-
- Bottom
-
-
- 0, 615
+
+ 12
662, 60
-
- 11
+
+ 20
-
- panel2
+
+ http
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 7
-
- $this
+
+ chkdefAllowInsecure
-
+
+ 648, 573
+
+
+ 206, 64
+
+
+ 95, 12
+
+
+ tabPage6
+
+
+ 14
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 15, 63
+
+
+ tabControl2
+
+
+ 16
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ Enable UDP
+
+
+ 94, 21
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ &Cancel
+
+
+ label10
+
+
+ 648, 573
+
+
+ Vertical
+
+
+ groupBox1
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
1
-
+
+ Bypassing the LAN address
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Bypassing LAN and mainland address
+
+
+ Bypass mainland address
+
+
Top
-
- 0, 0
+
+ 12
-
- 662, 10
+
+ txtKcpmtu
-
- 9
+
+ lbFreshrate
-
- panel1
+
+ 1
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ label11
-
+
+ 29
+
+
+ 1
+
+
+ NoControl
+
+
+ Turn on Sniffing
+
+
+ Only open Http proxy, do not automatically configure proxy server (direct mode)
+
+
+ False
+
+
+ 4
+
+
+ tabPage6
+
+
+ False
+
+
+ tabControl2
+
+
+ 1
+
+
$this
-
- 2
+
+ 7
-
+
+ 3
+
+
+ 4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ readBufferSize
+
+
+ 0
+
+
+ tabPage6
+
+
+ 3
+
+
True
-
+
+
+ 18
+
+
+ True
+
+
+ Fill
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ congestion
+
+
+ NoControl
+
+
+ groupBox1
+
+
+ panel3
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 3, 3, 3, 3
+
+
+ 89, 12
+
+
+ info
+
+
+ txtUseragent
+
+
+ 1
+
+
+ tabPage7
+
+
+ v2rayN settings
+
+
+ 20
+
+
+ groupBox1
+
+
+ 16
+
+
+ Not Enabled Http Proxy
+
+
+ 14
+
+
+ 32
+
+
+ 628, 454
+
6, 12
-
- 662, 675
+
+ groupBox1
-
- 4, 4, 4, 4
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Settings
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- OptionSettingForm
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ txtKcpdownlinkCapacity
+
+
+ 198, 16
+
+
+ Automatically start at system startup
+
+
+ 3, 3, 3, 3
+
+
+ 1
+
+
+ Http proxy
+
+
+ 4
+
+
+ groupBox1
+
+
+ tabPage6
+
+
+ 355, 16
+
+
+ 3, 3, 3, 3
+
+
+ 97, 20
+
+
+ 3
+
+
+ 662, 605
+
+
+ 33, 29
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 78, 21
+
+
+ 5, 45
+
+
+ Custom DNS (multiple, separated by commas (,))
+
+
+ tabControl1
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 598, 16
v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
+ warning
+
+
+ groupBox1
+
+
+ 0
+
+
+ tabPage7
+
+
+ Statistics freshrate
+
+
+ label5
+
+
+ 120, 16
+
+
+ 20
+
+
+ 89, 12
+
+
+ Only open Http proxy and do nothing
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 18, 66
+
+
+ 20, 143
+
+
+ 11
+
+
+ 4, 4, 4, 4
+
+
+ tabPage6
+
+
+ btnClose
+
+
+ Turn on Sniffing
+
+
+ groupBox1
+
+
+ 18, 28
+
+
+ 30
+
+
+ 34
+
+
+ 20
+
+
+ 29
+
+
+ 0
+
+
+ 21, 17
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 2
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 14
+
+
+ 19
+
+
+ 4, 22
+
+
+ *Set user pac rules, separated by commas (,)
+
+
+ True
+
+
+ chksniffingEnabled
+
+
+ 6
+
+
+ 174, 16
+
+
+ 16
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox1
+
+
+ 18, 104
+
+
+ tabPage2
+
+
+ NoControl
+
+
+ 97, 20
+
+
+ socks
+
+
+ tabPage5
+
+
+ 576, 16
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 464, 20
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabPage9
+
+
+ True
+
+
+ tabPage6
+
+
+ *Set the rules, separated by commas (,); support Domain (pure string / regular / subdomain) and IP
+
+
+ tabPage3
+
+
+ 30
+
+
+ 53, 12
+
+
+ 17
+
+
+ label8
+
+
+ 468, 27
+
+
+ label13
+
+
+ chkAutoRun
+
+
+ tabControl2
+
+
+ 654, 579
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 345, 62
+
+
+ 15
+
+
+ 12
+
+
+ 1
+
+
+ chkudpEnabled
+
+
+ True
+
+
+ 33, 253
+
+
+ tabPage1
+
+
+ 5
+
+
+ tabPage6
+
+
+ 2
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 5
+
+
+ btnSetDefRountingRule
+
+
+ True
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 32
+
+
+ label1
+
+
+ 84, 16
+
+
+ tabPage8
+
+
+ True
+
+
+ panel4
+
+
+ label7
+
+
+ allowInsecure
+
+
+ txtlocalPort
+
+
+ True
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabPage7
+
+
+ 3, 17
+
+
+ 3, 40
+
+
+ labRoutingTips
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 3, 3, 3, 3
+
+
+ 124, 25
+
+
+ protocol
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabControl2
+
+
+ Top, Right
+
+
+ Turn on Mux Multiplexing
+
+
+ True
+
+
+ 23, 12
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 555, 100
+
+
+ socks
+
+
+ 0
+
+
+ 3, 3
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ chkAllowLANConn
+
+
+ 84, 16
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabControl1
+
+
+ tabControl1
+
+
+ True
+
+
+ tabPage6
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 15, 38
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 3
+
+
+ 10
+
+
+ 369, 62
+
+
+ 13
+
+
+ 1.Proxy Domain or IP
+
+
+ groupBox1
+
+
+ panel3
+
+
+ NoControl
+
+
+ 654, 579
+
+
+ chkEnableStatistics
+
+
+ 14
+
+
+ 8
+
+
+ 7
+
+
+ http
+
+
+ 53, 12
+
+
+ 193, 162
+
+
+ True
+
+
+ 2
+
+
+ 0
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabPage6
+
+
+ label2
+
+
+ 165, 20
+
+
+ False
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ 3, 3
+
+
+ 9
+
+
+ groupBox1
+
+
+ 4.Pre-defined rules
+
+
+ 101, 12
+
+
+ 3
+
+
+ 12
+
+
+ 431, 12
+
+
+ Domain strategy
+
+
+ cmbprotocol
+
+
+ 648, 37
+
+
+ True
+
+
+ Enable Statistics (Realtime netspeed and traffic records. Require restart the v2rayN client)
+
+
+ System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 4
+
+
+ Listening port
+
+
+ Vertical
+
+
+ Fill
+
+
+ 1
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Vertical
+
+
+ 1
+
+
+ 28
+
+
+ 257, 60
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 94, 21
+
+
+ True
+
+
+ cmbprotocol2
+
+
+ Open Http proxy and automatically configure proxy server (global mode)
+
+
+ groupBox2
+
+
+ chkKeepOlderDedupl
+
+
+ 15, 129
+
+
+ 255, 20
+
+
+ mtu
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ chkKcpcongestion
+
+
+ 1
+
+
+ 0
+
+
+ 257, 25
+
+
+ 3, 84
+
+
+ groupBox1
+
+
+ Top
+
+
+ listening port 2
+
+
+ 97, 20
+
+
+ chkAllowIn2
+
+
+ tabPage2
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ True
+
+
+ False
+
+
+ 3
+
+
+ 33
+
+
+ 4, 22
+
+
+ 9
+
+
+ 541, 100
+
+
+ Core: KCP settings
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ error
+
+
+ 15, 160
+
+
+ True
+
+
+ 59, 12
+
+
+ 5, 14
+
+
+ groupBox1
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 634, 460
+
+
+ 12
+
+
+ 120, 16
+
+
+ 662, 10
+
+
+ txtlocalPort2
+
+
+ Only open PAC and do nothing
+
+
+ True
+
+
+ Fill
+
+
+ groupBox1
+
+
+ 654, 579
+
+
+ 7
+
+
+ 27
+
+
+ 10
+
+
+ False
+
+
+ Vertical
+
+
+ 206, 29
+
+
+ 8
+
+
+ txtUserdirect
+
+
+ chkudpEnabled2
+
+
+ 0
+
+
+ 0
+
+
+ 648, 536
+
+
+ Allow connections from the LAN
+
+
+ 161, 84
+
+
+ panel3
+
+
+ 0
+
+
+ tabPage6
+
+
+ tabControl2
+
+
+ 30, 87
+
+
+ txtKcpreadBufferSize
+
+
+ 4
+
+
+ panel2
+
+
+ 3
+
+
+ 8
+
+
+ 35
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ User PAC settings
+
+
+ 95, 12
+
+
+ tabPage7
+
+
+ 10
+
+
+ none
+
+
+ Log level
+
+
+ tabControl1
+
+
+ protocol
+
+
+ 6
+
+
+ tabPage4
+
+
+ NoControl
+
+
+ 2
+
+
+ AsIs
+
+
+ 15, 62
+
+
+ 7
+
+
+ tabPage7
+
+
+ 642, 486
+
+
+ 4, 22
+
+
+ 58, 20
+
+
+ groupBox1
+
+
+ 1
+
+
+ 42, 98
+
+
+ 13
+
+
+ 13
+
+
+ 2
+
+
+ downlinkCapacity
+
+
+ True
+
+
+ 78, 21
+
+
+ tabPage7
+
+
+ True
+
+
+ 19
+
+
+ System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ cmbroutingMode
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 1
+
+
+ 23, 12
+
+
+ True
+
+
+ 8
+
+
+ True
+
+
+ 3, 3, 3, 3
+
+
+ Custom GFWList address (please fill in the blank without customization)
+
+
+ 345, 100
+
+
+ panel3
+
+
+ 75, 23
+
+
+ 654, 579
+
+
+ 10
+
+
+ 204, 16
+
+
+ 17
+
+
+ 628, 454
+
+
+ debug
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 6
+
+
+ 1
+
+
+ txtUserblock
+
+
+ 229, 23
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabPage1
+
+
+ 15
+
+
+ 2
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ 11
+
+
+ 18
+
+
+ 126, 16
+
+
+ 345, 24
+
+
+ NoControl
+
+
+ 4, 22
+
+
+ cmbdomainStrategy
+
+
+ False
+
+
+ 257, 158
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ &OK
+
+
+ 10
+
+
+ 634, 460
+
+
+ panel2
+
+
+ txtKcpuplinkCapacity
+
+
+ 115, 10
+
+
+ System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabPage4
+
+
+ chklogEnabled
+
+
+ chksniffingEnabled2
+
+
+ tabPage7
+
+
+ 642, 67
+
+
+ 0
+
+
+ 4, 22
+
+
+ True
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tabPage5
+
+
+ 9
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ IPIfNonMatch
+
+
+ groupBox1
+
+
+ 4, 22
+
+
+ 23
+
+
+ 3.Block Domain or IP
+
+
+ label3
+
+
+ 6
+
+
+ 236, 66
+
+
+ tabPage7
+
+
+ $this
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ $this
+
+
+ 8
+
+
+ txtremoteDNS
+
+
+ 3, 3
+
+
+ 0, 615
+
+
+ 19
+
+
+ 33
+
+
+ 94, 21
+
+
+ 4, 22
+
+
+ writeBufferSize
+
+
+ 11
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 89, 12
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ 31
+
+
+ 369, 27
+
+
+ 4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ tabPage6
+
+
+ groupBox1
+
+
+ groupBox1
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ panel4
+
+
+ True
+
+
+ 29
+
+
+ Fill
+
+
+ True
+
+
+ 3, 3
+
+
+ OptionSettingForm
+
+
+ 124, 94
+
+
+ Core: Routing settings
+
+
+ 13
+
+
+ tabPage8
+
+
+ 2
+
+
+ 236, 104
+
+
+ 5
+
+
+ Open PAC and automatically configure PAC (PAC mode)
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ NoControl
+
+
+ tabPage9
+
+
+ 94, 21
+
+
+ 75, 23
+
+
+ 15, 16
+
+
+ 33, 277
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 0, 0, 0
+
+
+ 662, 675
+
+
+ uplinkCapacity
+
+
+ IPOnDemand
+
+
+ NoControl
+
+
+ True
+
+
+ 6
+
+
+ 1
+
+
+ 0
+
+
+ Settings
+
+
+ 0
+
+
+ 3, 3, 3, 3
+
+
+ 3, 3
+
+
+ 32, 205
+
+
+ cmbloglevel
+
+
+ 111, 62
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ label4
+
+
+ System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ groupBox2
+
+
+ label16
+
+
+ btnOK
+
+
+ Set default custom routing rules
+
+
+ tabPage6
+
+
+ txturlGFWList
+
+
+ chkmuxEnabled
+
+
+ 654, 579
+
+
+ tabPage6
+
+
+ tabControl1
+
+
+ 0
+
+
+ 15, 110
+
+
+ 5, 11
+
+
+ 0
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0, 0
+
+
+ Enable UDP
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 3, 3, 3, 3
+
+
+ groupBox1
+
+
+ 19
+
+
+ 2.Direct Domain or IP
+
+
+ 267, 16
+
+
+ Global
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Fill
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 9
+
+
+ 0
+
+
+ 322, 10
+
+
+ 15, 192
+
+
+ 0
+
+
+ 94, 21
+
+
+ 3
+
+
+ Keep older when deduplication
+
+
+ 3, 3, 3, 3
+
+
+ 236, 28
+
+
+ Bottom
+
+
+ 3
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 0
+
+
+ groupBox1
+
+
+ 125, 12
+
+
+ 3, 3, 3, 3
+
+
+ 11
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 124, 60
+
+
+ cbFreshrate
+
+
+ 246, 16
+
+
+ tabPage6
+
+
+ label6
+
+
+ 111, 24
+
+
+ panel2
+
+
+ 21
+
+
+ label9
+
+
+ 0, 10
+
+
+ panel1
+
+
+ 2
+
+
+ label14
+
+
+ True
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx
index d1502a31..81c0d92c 100644
--- a/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/OptionSettingForm.zh-Hans.resx
@@ -124,6 +124,12 @@
Core:基础设置
+
+ 222, 16
+
+
+ 底层传输安全选tls时,默认跳过证书验证(allowInsecure)
+
53, 12
@@ -134,16 +140,22 @@
关闭Http代理
- 开启Http代理,并自动配置代理服务器(全局模式)
+ 开启Http代理,并自动配置系统代理(全局模式)
- 开启PAC,并自动配置PAC(PAC模式)
+ 开启PAC,并自动配置系统代理(PAC模式)
- 仅开启Http代理,不自动配置代理服务器(直连模式)
+ 仅开启Http代理,并清除系统代理
- 仅开启PAC,不自动配置PAC
+ 仅开启PAC,并清除系统代理
+
+
+ 仅开启Http代理,不改变系统代理
+
+
+ 仅开启PAC,不改变系统代理
96, 16
@@ -277,6 +289,12 @@
642, 72
+
+ 77, 12
+
+
+ 域名解析策略
+
NoControl
@@ -303,41 +321,29 @@
*设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP
-
- 81, 14
-
-
- 186, 20
-
-
- 53, 12
-
-
- 域名策略
-
Core:KCP设置
v2rayN设置
+
+ 156, 16
+
+
+ 去重时保留序号较小的项
+
77, 12
统计刷新频率
-
- 305, 12
-
-
- 缓存天数(0-30, 0关闭缓存单独每天的数据使用情况)
-
- 384, 16
+ 372, 16
- 启用统计(实时网速显示和使用流量显示,需要重启v2rayN客户端)
+ 启用统计(实时网速显示和使用流量显示,需要重启v2rayN客户端)
144, 16
@@ -357,6 +363,12 @@
开机自动启动(可能会不成功)
+
+ 用户PAC设置
+
+
+ *设置用户PAC规则,用逗号(,)隔开
+
确定(&O)
diff --git a/v2rayN/v2rayN/Forms/QRCodeControl.Designer.cs b/v2rayN/v2rayN/Forms/QRCodeControl.Designer.cs
index 5d0a2624..ca405968 100644
--- a/v2rayN/v2rayN/Forms/QRCodeControl.Designer.cs
+++ b/v2rayN/v2rayN/Forms/QRCodeControl.Designer.cs
@@ -31,7 +31,6 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QRCodeControl));
this.txtUrl = new System.Windows.Forms.TextBox();
this.picQRCode = new System.Windows.Forms.PictureBox();
- this.chkShow = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit();
this.SuspendLayout();
//
@@ -47,20 +46,12 @@
this.picQRCode.Name = "picQRCode";
this.picQRCode.TabStop = false;
//
- // chkShow
- //
- resources.ApplyResources(this.chkShow, "chkShow");
- this.chkShow.Name = "chkShow";
- this.chkShow.UseVisualStyleBackColor = true;
- this.chkShow.CheckedChanged += new System.EventHandler(this.chkShow_CheckedChanged);
- //
// QRCodeControl
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.picQRCode);
this.Controls.Add(this.txtUrl);
- this.Controls.Add(this.chkShow);
this.Name = "QRCodeControl";
this.Load += new System.EventHandler(this.QRCodeControl_Load);
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit();
@@ -73,6 +64,5 @@
private System.Windows.Forms.TextBox txtUrl;
private System.Windows.Forms.PictureBox picQRCode;
- private System.Windows.Forms.CheckBox chkShow;
}
}
diff --git a/v2rayN/v2rayN/Forms/QRCodeControl.cs b/v2rayN/v2rayN/Forms/QRCodeControl.cs
index ea5e7fda..02d59b48 100644
--- a/v2rayN/v2rayN/Forms/QRCodeControl.cs
+++ b/v2rayN/v2rayN/Forms/QRCodeControl.cs
@@ -12,7 +12,6 @@ namespace v2rayN.Forms
}
private void QRCodeControl_Load(object sender, System.EventArgs e)
{
- chkShow_CheckedChanged(null, null);
txtUrl.MouseUp += txtUrl_MouseUp;
}
@@ -32,16 +31,9 @@ namespace v2rayN.Forms
txtUrl.Text = string.Empty;
return;
}
- picQRCode.Image = QRCodeHelper.GetQRCode(url);
txtUrl.Text = url;
+ picQRCode.Image = QRCodeHelper.GetQRCode(url);
}
}
-
- private void chkShow_CheckedChanged(object sender, System.EventArgs e)
- {
- picQRCode.Visible =
- txtUrl.Visible = chkShow.Checked;
- }
-
}
}
diff --git a/v2rayN/v2rayN/Forms/QRCodeControl.resx b/v2rayN/v2rayN/Forms/QRCodeControl.resx
index ef0c4f04..a6ceff05 100644
--- a/v2rayN/v2rayN/Forms/QRCodeControl.resx
+++ b/v2rayN/v2rayN/Forms/QRCodeControl.resx
@@ -117,106 +117,76 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 0
-
-
-
- 356, 441
-
-
- 0, 0
-
-
-
- 0
-
-
- Show shared content
-
-
- System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 356, 16
-
-
- QRCodeControl
-
-
- 356, 355
-
-
- 0, 371
-
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
Bottom
-
- 24
-
-
- Top
-
-
- Fill
+
+
+ 0, 371
+
True
-
- Zoom
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 1
-
-
- $this
-
-
- 0, 16
-
-
- $this
-
-
- chkShow
-
-
- $this
-
-
- txtUrl
-
-
- 2
-
-
- picQRCode
-
356, 70
-
- 25
+
+ 0
-
- 6, 12
+
+ txtUrl
-
- True
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
+ Fill
+
+
+ 0, 0
+
+
+ 356, 371
+
+
+ Zoom
+
+
+ 24
+
+
+ picQRCode
+
+
+ System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 0
True
+
+ 6, 12
+
+
+ 356, 441
+
+
+ QRCodeControl
+
+
+ System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/QRCodeControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/QRCodeControl.zh-Hans.resx
index 991ed0d0..1af7de15 100644
--- a/v2rayN/v2rayN/Forms/QRCodeControl.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/QRCodeControl.zh-Hans.resx
@@ -117,7 +117,4 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 显示分享内容
-
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.cs b/v2rayN/v2rayN/Forms/SubSettingControl.cs
index a3f09593..9836be5d 100644
--- a/v2rayN/v2rayN/Forms/SubSettingControl.cs
+++ b/v2rayN/v2rayN/Forms/SubSettingControl.cs
@@ -54,10 +54,7 @@ namespace v2rayN.Forms
subItem.url = string.Empty;
}
- if (OnButtonClicked != null)
- {
- OnButtonClicked(sender, e);
- }
+ OnButtonClicked?.Invoke(sender, e);
}
}
}
diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.resx b/v2rayN/v2rayN/Forms/SubSettingControl.resx
index af5f03e9..a5dec524 100644
--- a/v2rayN/v2rayN/Forms/SubSettingControl.resx
+++ b/v2rayN/v2rayN/Forms/SubSettingControl.resx
@@ -118,213 +118,123 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- NoControl
-
-
- groupBox2
-
-
- 60, 16
-
-
- txtUrl
-
-
- &Remove
-
-
- 484, 21
-
-
- 24
-
-
- 432, 46
-
-
- SubSettingControl
-
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- True
-
-
- groupBox2
-
-
- 83, 12
-
-
- groupBox2
-
6, 12
-
- label3
+
+ zh-Hans
-
- 127, 21
-
-
+
True
-
- 0
-
-
- 12, 55
-
-
- 127, 55
-
-
- 10
-
-
- Bottom
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 2
-
-
- groupBox2
-
-
- 4
-
-
- 47, 12
-
-
- Subscription details
-
-
- 0, 9
-
-
- Enable
-
-
- chkEnabled
-
-
- 3
-
-
- NoControl
-
-
- Address (url)
-
-
- 25
-
-
- 23
-
-
- groupBox2
-
-
- groupBox2
-
-
- 406, 23
-
-
- True
-
-
- True
-
-
- btnRemove
-
-
- NoControl
-
-
- label2
-
-
- System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 584, 110
-
-
- NoControl
-
584, 119
-
- 11
+
+ NoControl
-
- Remarks
-
-
- 0
-
-
- 12, 25
+
+ 484, 21
75, 23
-
- groupBox2
+
+ 24
-
- 265, 21
+
+ &Remove
+
+
+ True
+
+
+ NoControl
+
+
+ 406, 23
+
+
+ 60, 16
+
+
+ 25
+
+
+ Enable
+
+
+ Bottom
+
+
+ 0, 9
+
+
+ 584, 110
10
-
- System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Subscription details
-
- 1
+
+ True
-
- $this
+
+ NoControl
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 12, 25
-
- System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 47, 12
-
+
+ 10
+
+
+ Remarks
+
+
+ True
+
+
+ NoControl
+
+
+ 12, 55
+
+
+ 83, 12
+
+
0
-
- txtRemarks
+
+ Address (url)
-
- 5
+
+ 127, 21
-
- System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 265, 21
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 11
-
+
+ 127, 55
+
+
True
-
-
- zh-Hans
-
+
+
+ 432, 46
+
+
+ 23
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx b/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx
index 12e6dbd4..95e5122f 100644
--- a/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx
+++ b/v2rayN/v2rayN/Forms/SubSettingControl.zh-Hans.resx
@@ -118,14 +118,17 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 移除
+
48, 16
启用
-
- 移除
+
+ 订阅详情
29, 12
@@ -139,7 +142,4 @@
地址 (url)
-
- 订阅详情
-
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Forms/SubSettingForm.cs b/v2rayN/v2rayN/Forms/SubSettingForm.cs
index 14b5fbf6..c8e7725b 100644
--- a/v2rayN/v2rayN/Forms/SubSettingForm.cs
+++ b/v2rayN/v2rayN/Forms/SubSettingForm.cs
@@ -35,7 +35,7 @@ namespace v2rayN.Forms
for (int k = config.subItem.Count - 1; k >= 0; k--)
{
- var item = config.subItem[k];
+ SubItem item = config.subItem[k];
if (Utils.IsNullOrEmpty(item.remarks)
&& Utils.IsNullOrEmpty(item.url))
{
@@ -47,9 +47,8 @@ namespace v2rayN.Forms
}
}
- for (int k = 0; k < config.subItem.Count; k++)
+ foreach (SubItem item in config.subItem)
{
- var item = config.subItem[k];
SubSettingControl control = new SubSettingControl();
control.OnButtonClicked += Control_OnButtonClicked;
control.subItem = item;
@@ -80,7 +79,7 @@ namespace v2rayN.Forms
}
else
{
- UI.Show(UIRes.I18N("OperationFailed"));
+ UI.ShowWarning(UIRes.I18N("OperationFailed"));
}
}
@@ -99,10 +98,12 @@ namespace v2rayN.Forms
private void AddSub()
{
- var subItem = new SubItem();
- subItem.id = string.Empty;
- subItem.remarks = "remarks";
- subItem.url = "url";
+ SubItem subItem = new SubItem
+ {
+ id = string.Empty,
+ remarks = "remarks",
+ url = "url"
+ };
config.subItem.Add(subItem);
}
}
diff --git a/v2rayN/v2rayN/Forms/SubSettingForm.resx b/v2rayN/v2rayN/Forms/SubSettingForm.resx
index 05d3db7b..e2001bb5 100644
--- a/v2rayN/v2rayN/Forms/SubSettingForm.resx
+++ b/v2rayN/v2rayN/Forms/SubSettingForm.resx
@@ -118,61 +118,19 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- NoControl
-
-
- 448, 17
-
-
- 75, 23
-
-
- 4
+
+ 6, 12
-
- &Cancel
+
+ 581, 629
-
- btnClose
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel2
-
-
- 1
-
-
+
True
-
- Fill
-
-
- 0, 0
-
-
- 581, 569
-
-
- 10
-
-
- panCon
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 0
+
+ Subscription settings
NoControl
@@ -189,17 +147,20 @@
&Add
-
- btnAdd
+
+ NoControl
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 448, 17
-
- panel2
+
+ 75, 23
-
- 0
+
+ 4
+
+
+ &Cancel
NoControl
@@ -216,17 +177,20 @@
&OK
-
- btnOK
+
+ True
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+