├── .gitattributes ├── .gitignore ├── .vs └── config │ └── applicationhost.config ├── KcptunGUI.Resource ├── Byte.Designer.cs ├── Byte.resx ├── Class.cs ├── KcptunGUI.Resource.csproj ├── Properties │ └── AssemblyInfo.cs ├── Resources │ └── normal.cur ├── 图标.Designer.cs ├── 图标.resx ├── 图片.Designer.cs ├── 图片.resx ├── 字符串.Designer.cs └── 字符串.resx ├── KcptunGUI.sln ├── KcptunGUI.v12.suo ├── KcptunGUI ├── App.config ├── App.xaml ├── App.xaml.cs ├── Class │ ├── ConfigJson.cs │ ├── LanguageJson.cs │ └── LocalFunction.cs ├── KcptunGUI.csproj ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resx │ └── readme.html ├── SubFrame │ ├── About.xaml │ ├── About.xaml.cs │ ├── ClientMode.xaml │ ├── ClientMode.xaml.cs │ ├── Configure.xaml │ ├── Configure.xaml.cs │ ├── ServerMode.xaml │ ├── ServerMode.xaml.cs │ ├── Status.xaml │ └── Status.xaml.cs ├── app.ico ├── app.manifest ├── config.json └── packages.config └── readme.md /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | 19 | # Roslyn cache directories 20 | *.ide/ 21 | 22 | # MSTest test Results 23 | [Tt]est[Rr]esult*/ 24 | [Bb]uild[Ll]og.* 25 | 26 | #NUNIT 27 | *.VisualState.xml 28 | TestResult.xml 29 | 30 | # Build Results of an ATL Project 31 | [Dd]ebugPS/ 32 | [Rr]eleasePS/ 33 | dlldata.c 34 | 35 | *_i.c 36 | *_p.c 37 | *_i.h 38 | *.ilk 39 | *.meta 40 | *.obj 41 | *.pch 42 | *.pdb 43 | *.pgc 44 | *.pgd 45 | *.rsp 46 | *.sbr 47 | *.tlb 48 | *.tli 49 | *.tlh 50 | *.tmp 51 | *.tmp_proj 52 | *.log 53 | *.vspscc 54 | *.vssscc 55 | .builds 56 | *.pidb 57 | *.svclog 58 | *.scc 59 | 60 | # Chutzpah Test files 61 | _Chutzpah* 62 | 63 | # Visual C++ cache files 64 | ipch/ 65 | *.aps 66 | *.ncb 67 | *.opensdf 68 | *.sdf 69 | *.cachefile 70 | 71 | # Visual Studio profiler 72 | *.psess 73 | *.vsp 74 | *.vspx 75 | 76 | # TFS 2012 Local Workspace 77 | $tf/ 78 | 79 | # Guidance Automation Toolkit 80 | *.gpState 81 | 82 | # ReSharper is a .NET coding add-in 83 | _ReSharper*/ 84 | *.[Rr]e[Ss]harper 85 | *.DotSettings.user 86 | 87 | # JustCode is a .NET coding addin-in 88 | .JustCode 89 | 90 | # TeamCity is a build add-in 91 | _TeamCity* 92 | 93 | # DotCover is a Code Coverage Tool 94 | *.dotCover 95 | 96 | # NCrunch 97 | _NCrunch_* 98 | .*crunch*.local.xml 99 | 100 | # MightyMoose 101 | *.mm.* 102 | AutoTest.Net/ 103 | 104 | # Web workbench (sass) 105 | .sass-cache/ 106 | 107 | # Installshield output folder 108 | [Ee]xpress/ 109 | 110 | # DocProject is a documentation generator add-in 111 | DocProject/buildhelp/ 112 | DocProject/Help/*.HxT 113 | DocProject/Help/*.HxC 114 | DocProject/Help/*.hhc 115 | DocProject/Help/*.hhk 116 | DocProject/Help/*.hhp 117 | DocProject/Help/Html2 118 | DocProject/Help/html 119 | 120 | # Click-Once directory 121 | publish/ 122 | 123 | # Publish Web Output 124 | *.[Pp]ublish.xml 125 | *.azurePubxml 126 | ## TODO: Comment the next line if you want to checkin your 127 | ## web deploy settings but do note that will include unencrypted 128 | ## passwords 129 | #*.pubxml 130 | 131 | # NuGet Packages Directory 132 | packages/* 133 | ## TODO: If the tool you use requires repositories.config 134 | ## uncomment the next line 135 | #!packages/repositories.config 136 | 137 | # Enable "build/" folder in the NuGet Packages folder since 138 | # NuGet packages use it for MSBuild targets. 139 | # This line needs to be after the ignore of the build folder 140 | # (and the packages folder if the line above has been uncommented) 141 | #!packages/build/ 142 | 143 | # Windows Azure Build Output 144 | csx/ 145 | *.build.csdef 146 | 147 | # Windows Store app package directory 148 | AppPackages/ 149 | 150 | # Others 151 | sql/ 152 | *.Cache 153 | ClientBin/ 154 | [Ss]tyle[Cc]op.* 155 | ~$* 156 | *~ 157 | *.dbmdl 158 | *.dbproj.schemaview 159 | *.pfx 160 | *.publishsettings 161 | node_modules/ 162 | 163 | # RIA/Silverlight projects 164 | Generated_Code/ 165 | 166 | # Backup & report files from converting an old project file 167 | # to a newer Visual Studio version. Backup files are not needed, 168 | # because we have git ;-) 169 | _UpgradeReport_Files/ 170 | Backup*/ 171 | UpgradeLog*.XML 172 | UpgradeLog*.htm 173 | 174 | # SQL Server files 175 | *.mdf 176 | *.ldf 177 | 178 | # Business Intelligence projects 179 | *.rdl.data 180 | *.bim.layout 181 | *.bim_*.settings 182 | 183 | # Microsoft Fakes 184 | FakesAssemblies/ 185 | 186 | # LightSwitch generated files 187 | GeneratedArtifacts/ 188 | _Pvt_Extensions/ 189 | ModelManifest.xml -------------------------------------------------------------------------------- /KcptunGUI.Resource/Byte.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace KcptunGUI.Resource { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | public class Byte { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Byte() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | public static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KcptunGUI.Resource.Byte", typeof(Byte).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 使用此强类型资源类,为所有资源查找 51 | /// 重写当前线程的 CurrentUICulture 属性。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | public static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 查找 System.Byte[] 类型的本地化资源。 65 | /// 66 | public static byte[] cur_normal { 67 | get { 68 | object obj = ResourceManager.GetObject("cur_normal", resourceCulture); 69 | return ((byte[])(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/Byte.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | Resources\normal.cur;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 123 | 124 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/Class.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace KcptunGUI.Resource { 8 | /// 9 | public class Class { 10 | /// 版本 11 | public const String Version = "2017-02-04"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/KcptunGUI.Resource.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {31173083-171C-4488-8CA2-C01D3651E15E} 8 | Library 9 | Properties 10 | KcptunGUI.Resource 11 | KcptunGUI.Resource 12 | v4.0 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | true 25 | bin\Debug\KcptunGUI.Resource.XML 26 | 27 | 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | AnyCPU 35 | false 36 | bin\Release\KcptunGUI.Resource.XML 37 | true 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | True 49 | True 50 | Byte.resx 51 | 52 | 53 | 54 | True 55 | True 56 | 图标.resx 57 | 58 | 59 | True 60 | True 61 | 图片.resx 62 | 63 | 64 | 65 | True 66 | True 67 | 字符串.resx 68 | 69 | 70 | 71 | 72 | PublicResXFileCodeGenerator 73 | Byte.Designer.cs 74 | 75 | 76 | PublicResXFileCodeGenerator 77 | 图标.Designer.cs 78 | 79 | 80 | PublicResXFileCodeGenerator 81 | 图片.Designer.cs 82 | 83 | 84 | PublicResXFileCodeGenerator 85 | 字符串.Designer.cs 86 | 87 | 88 | 89 | 90 | 91 | 92 | 99 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("KcptunGUI.Resource")] 9 | [assembly: AssemblyDescription("KcptunGUI资源集")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("SkyDust")] 12 | [assembly: AssemblyProduct("KcptunGUI.Resource")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | //将 ComVisible 设置为 false 将使此程序集中的类型 18 | //对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("31173083-171c-4488-8ca2-c01d3651e15e")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, 33 | // 方法是按如下所示使用“*”: : 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("0.0.0.0")] 36 | [assembly: AssemblyFileVersion("0.0.0.0")] 37 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/Resources/normal.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ragnaroks/KcptunGUI/fb8821a7ed0e1bd53fbe3a2a5810328cf1c06ff3/KcptunGUI.Resource/Resources/normal.cur -------------------------------------------------------------------------------- /KcptunGUI.Resource/图标.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace KcptunGUI.Resource { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | public class 图标 { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal 图标() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | public static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KcptunGUI.Resource.图标", typeof(图标).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 使用此强类型资源类,为所有资源查找 51 | /// 重写当前线程的 CurrentUICulture 属性。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | public static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 查找类似于 (Icon) 的 System.Drawing.Icon 类型的本地化资源。 65 | /// 66 | public static System.Drawing.Icon ico_64x64_appicon { 67 | get { 68 | object obj = ResourceManager.GetObject("ico_64x64_appicon", resourceCulture); 69 | return ((System.Drawing.Icon)(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/图标.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA 124 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7CQAAW0gAAGs2AABnPwAAYEoAAmRH 126 | AAJuTQACdC8ABHQtAARzMQAEb00AAmtNAAJvTQACZy4AAEs0AABQUAAAgAAAAAAAAAAAAAAAAAAAAAAA 127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 129 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAAGk8AABwOAACcjoABmVJ 130 | AAhpQwAMaUkAEGhOARRpTgIYbVECGmxWAhxtWAMcbFYCHG5RAhptUQIYcFABFGxBABBfRQAKZUsABngy 131 | AARnPgAClEIAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQAAAdTsAAmlN 134 | AAZsSAAMa0gAFG5RACJsTgIubE8DOm5RBEhvUgVSblQHWm9VCF5wVQhgcVYJYnBVCGBvVQdeb1QHWHBT 135 | Bk5wUgRCbVADNG5QAihuTwAabUoAEnRHAApoVgAEbCcAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYz 138 | AABoOgACbEUACGxIABJqSgAibE8BNmxQA0xuUgRmb1MIfHBUCZFyVQqjc1cJr3RYCrd1WQu7dlkLvXZZ 139 | DL12WQy9dVkLu3NYC7VzVwyrcVYMm3BVColwVQh0bVMFWG5RBEJsTgEsak8AHGxFABBoOAAGdRUAAoAA 140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 142 | AAAAAAAAAAAAAHpAAAJqRAAIa0sAFmtNACpsUAJGbVEFZm9TB4lxVQmndlkKw31eC9WCYgzhiWgP645s 143 | EPGRbxHzkm8R9ZJvEvWSbxL1km8S9ZFvEfOObRHxiWkP7YNkDeV+YAzbd1sNy3NXC7FwVQuXblIIdm9S 144 | BVhwUAM6bk8BIGpGABBvOwAGVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 145 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAl0fAARsSAAQZUsAKGlPAkptUQRyb1MIm3RYC8N7XAjfi2oO75Z0 147 | E/eZdRL9m3YR/Z14Ev+feRP/n3oS/595Ev+feRP/nnkT/555Ev+feRL/nnkT/5x4Ev+adhH9mXUS/Zd0 148 | FPmMahDxfV0L5XZaDs1xVQ2tcFQJh29UBl5sUQQ4bEsAGmZDAAqAKwAEAAAAAAAAAAAAAAAAAAAAAAAA 149 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 150 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAlhBAAprTAAaakwAQGtPAm5tUwefdFgJy4Rk 151 | DOmWcxL3m3cT/Z55E/+gehP/nngR/5x3EP+adQ//mnQO/5p0Df+Zcwz/mHIM/5hyDP+Ycwz/mHMN/5lz 152 | Df+adQ7/m3YQ/514Ef+feRP/nnkT/5t2E/2WcxP5hWUO73daDtdyVw+zb1QJhW5TBVRrTQAoaVAAEF4y 153 | AASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 154 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUkAAmJKAA5nTQAmak8CUGxQ 155 | BY9xVQnDgWAL65ZyEfufehT/oHoT/555Ef+bdg7/mnQN/5lzDP+adRH/nXke/5l0Ev+WcAj/lm8I/5Zv 156 | CP+Vbwj/lW4I/5VuCP+Vbwn/lXAK/5ZwCv+XcQv/l3IN/5p1Dv+deBH/n3oT/595FP+WcxL7g2QN73Va 157 | D9FwVg2nblMIam5TAzhqUgAYaUkACIBAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 158 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAyEAACUzgABmdK 159 | ABZpTQA4bE8CcG9TB61/XwvllHAP/aN8Ff+hexP/nXcQ/5t1Df+Zcwv/mHEJ/5dwCP+Wbwj/nHsi/6GF 160 | Pf+VcRP/lW4G/5VuBf+VbgX/lW4F/5VuBf+VbgX/lW4F/5RuBv+Ubgb/lG4H/5NtB/+Ubwn/lnEL/5hz 161 | Df+bdRD/n3kT/6F8Ff+VchH9gWIP7XNYD8FwVAqLbVIDUGpRASZlTgAMZzwAAmYzAAAAAAAAAAAAAAAA 162 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA 163 | AAB6FAACbTgABmlMABhqTwFCa1AFfnVYCb+GZQ3vn3oT/6J8FP+feRD/nHYN/5pzC/+YcQn/l3AH/5dw 164 | Bv+XbwX/l28G/518Jf+mjEv/mHUc/5ZvB/+YcAX/mHAF/5dvBf+WbwX/lm8F/5ZuBf+VbgX/lW4F/5Vu 165 | Bf+TbQX/k20G/5RuB/+Vbwn/lnEL/5hzDf+cdxD/oHsU/556FP+GZhD1eFwP0XBXDJluUwdcbFEBKm1L 166 | AA5rPQACZjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 167 | AAAAAAAAAAAAAAAAAABqKgAAaToABmZMABppTwFGbVEFiXhcC8mObQ71on0U/6B6Ev+ddw7/m3QL/5ly 168 | Cf+YcQj/mHEG/5hwBf+YcAX/mXEF/5pyBv+ffST/rpZZ/6SEOf+WcRD/mXEG/5pyBf+acQX/mXEF/5lx 169 | Bf+YcAX/l28F/5dvBf+WbwX/lG0F/5VuBf+UbQX/lG0G/5RuB/+Ubgn/lnEL/5l0Dv+eeBL/oHwV/5Fv 170 | Efl8XxHZcVYMo29TB2JuUAIsbEUADmc3AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 171 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZEMABGlLABhoTgFEblEFiXxdC82TcBH1on0T/6B6 172 | Ef+cdQ3/mnMK/5lyCP+YcQf/mXEG/5pyBf+bcgX/nHMF/510Bf+ddQf/oYAq/7WhcP+5omz/poQ0/5t0 173 | Ef+cdAf/nnQG/550Bf+ddAX/nHMF/5pyBf+ZcQX/l3AF/5dvBf+WbgX/lW4F/5RtBf+TbQX/k20G/5Nt 174 | B/+Vbwr/mHIM/514Ef+gexT/lHES+X9hEN1yVwylblMIYGpOAihjSgAMQEAAAgAAAAAAAAAAAAAAAAAA 175 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZjMAAmJJABRqTQA+bFADhXtd 176 | CcuVcRH1onwU/6B6EP+cdg3/mnIK/5lyB/+Zcgb/m3IG/51zBf+edAX/n3UF/6F2Bf+idwb/oXgL/6iM 177 | Qv/FtpT/yLqY/8Oufv+xkUj/oHka/6F4B/+ieAb/oXcG/6B2Bv+edQb/nXQG/5tzBf+acgX/mHAF/5Zv 178 | Bf+VbgX/lG0F/5RtBf+TbQX/k20H/5RvCf+Ycg3/nHcQ/596E/+VchL5f2EP23JXDaFuUwZYak8AJGE+ 179 | AAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmdH 180 | AApkTAA0ak8CeHdaCMWTcBD1onwU/6B6Ef+cdgz/mnMJ/5pyB/+bcwb/nHMF/551Bf+gdgX/ongF/6R5 181 | Bv+leQb/pnsG/6Z8Cv+ukUP/yb+j/8/Grv/Pxq3/y7uY/7qdXf+ddxX/pnwI/6Z7B/+kegf/o3kG/6F3 182 | Bv+fdgb/nXQG/5tzBf+ZcQX/mHAF/5ZvBf+VbgX/lG0F/5NtBf+TbQb/lG4I/5dyDP+bdhD/n3oT/5Vy 183 | E/l8Xw/VclYLlW9QA0xqRwAWYzgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 184 | AAAAAAAAAAAAAFdCAAZpSgAgaE4AZnRWBrePbA7zonwU/6B6EP+ddgz/m3QJ/5pzB/+ccwb/nnQF/6B2 185 | Bf+ieAX/pHoG/6Z7Bv+pfQb/qn4G/6t/B/+rfwj/ro0x/8S3l//UzLj/1M26/9TNuf/Pvpv/row//6R6 186 | Df+qfgj/qH0I/6d8B/+legf/o3kH/6F3Bv+fdgb/nXQG/5tyBf+ZcQX/l28F/5ZuBf+VbgX/k20F/5Nt 187 | Bv+Ubgj/l3IM/5x3EP+hfRr/lXMW93pcDc1wUwiFcFADNGhFABCAQAACAAAAAAAAAAAAAAAAAAAAAAAA 188 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAJiSAAWZkwARm1RA6GDZAvto30U/6F7Ef+ddg3/nHQJ/5t0 189 | B/+ddAb/n3UF/6J4Bf+legX/qHwG/6p+Bv+sgAb/roEH/6+CB/+wgwf/sYQI/66GGf++q3f/2dPE/9nT 190 | xf/Z1MX/2dLB/8mzg/+rhiz/qn8L/6yACP+rfwj/qX4I/6d8B/+legf/o3gG/6F3Bv+edQb/m3MF/5py 191 | Bf+XcAX/lm8F/5VuBf+TbQb/k20G/5RuCP+Xcg3/o4Ek/6yKLv+NbBbzdFcMu21TBmRuUQAkbDsACIAA 192 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0JAAJhQAAMZ0sAMmlOAn59XgnfoHoT/6J8 193 | Ev+edw3/nHUK/5x1B/+edQb/oXcF/6V6Bf+ofAb/q38G/66AB/+wggf/soQH/7WGCP+1hwj/togI/7eI 194 | CP+1iAz/uZ1R/9HLuP/d2s//3dnO/97Zzv/a08L/xq9+/6eBI/+rgQz/roIJ/66BCf+rgAj/qn4I/6h8 195 | B/+legf/ongH/592Bv+cdAb/mnIG/5hwBf+WbwX/lW4F/5NtBf+TbQb/lG8M/6GBKv+vkT7/qogs/4Vm 196 | E+twVQqdbVADTmpOABZtSAAEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkMgAGZ0cAHGlN 197 | AFxvUgS1lHAO+6R+FP+geQ7/nnYK/510B/+fdQb/oncF/6Z6Bf+qfQb/rYAH/6+CB/+yhAj/tYYI/7eI 198 | CP+5ign/uooJ/7qKCf+7iwr/uowM/7ubRf/Rx7D/39vS/+Dc1P/f3dT/3dnN/9rPuv/Ep2z/q4Qk/62C 199 | Df+xhAn/roIJ/62ACf+rfwj/qX4I/6Z7B/+jeAf/oHYG/510Bv+acgb/mHAF/5ZvBf+UbgX/lG4K/5d0 200 | Gv+khTX/r5JF/7CQOv+dfCD9dloNzXBUCHptUAEwbUoADGAhAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 201 | AAAzMwACYEYADmdMADhrUAKLf18I46V+Ff+hexD/n3cM/551CP+fdQb/oncG/6Z7Bv+qfgb/roEH/7GE 202 | B/+0hgj/t4gI/7mKCP+7iwn/vYwJ/76NCf++jgr/v48K/76PDP+9nED/08qx/+Lg2v/i39j/4+Hb/+He 203 | 1v/h3NL/3NG7/8etd/+0jjT/socS/7KFCf+wgwn/rYEJ/6yACP+pfgj/pnsH/6N5B/+gdwb/nXQG/5py 204 | Bv+XcAX/lW4F/5ZyE/+kh0D/r5ZU/6+VUP+wlEX/r40y/4hoE+1yVQupblEFUmtNABpdRgAEAAAAAAAA 205 | AAAAAAAAAAAAAAAAAAAAAAAAWE0ABGVLABxnTQBacVQDu5ZyD/ekfRP/oHkO/552Cf+fdgf/ongG/6Z6 206 | Bv+qfgb/roEG/7OEB/+2hwj/uYkI/7uMCP+9jQn/v48J/8GQCf/CkQr/w5IK/8KRCv+8jhD/uZhD/9PH 207 | rP/j4dv/4+Hb/+Pi3v/k49//4+Da/+Hd0//d1ML/y7WH/7iQKf+0hwn/s4YJ/7GDCf+vggn/rIAI/6p+ 208 | CP+nfAf/o3kH/6B2Bv+ddAb/mnIF/5dvBf+Ubwz/oIQ8/7GbYv+wmFf/sJVM/7CSPv+gfSP7eVoM0XBT 209 | CHpsTwIwYEgADD4fAAAAAAAAAAAAAAAAAAAAAAAAQEAAAGJFAApnSwAyaE4CgYJhCN+iexT9onsQ/593 210 | DP+fdwj/ongG/6V6Bv+qfQb/roEG/7KEBv+3hwj/uooI/72NCP/Ajwn/wpEJ/8STCf/GlAr/x5QK/8eU 211 | Cv+/kRP/uJI3/8mwfP/d1MP/4+Db/+Th3P/k4t7/5ePg/+Xk4f/l5OH/5OHc/9TGqP+6lTf/tokL/7aI 212 | Cf+zhgn/soUJ/6+CCf+tgAj/qn4I/6d7B/+jeQf/oHYG/5tzBf+ZcQX/lW8H/5x+L/+tmGD/sZpd/7CW 213 | Uf+wlEj/rIsz/4xrFutwVQqhbVIETGlNABZmRgACAAAAAAAAAAAAAAAAAAAAAFA6AAJeSAAUZkwATG9T 214 | A62VcRDzpH0T/6F5Dv+gdwn/oXcH/6R5Bv+ofQb/roEG/7KEB/+3hwf/vIsI/7+OCP/CkAn/xJIJ/8aU 215 | Cf/Jlgr/ypcK/8uXCv/HlhD/uppK/9LAnP/g2Mj/5uPf/+bm5P/m5eT/5ubk/+bl4//m5OL/5uXk/+Xk 216 | 4v/b0Ln/tJVL/7WJEP+5ign/t4gJ/7SGCf+xhAn/r4IJ/6yACP+pfgj/pnsH/6J4B/+edQb/m3IF/5dw 217 | B/+bfCv/rJdh/7OdZf+wmFf/sJVN/7CRPv+ffST3dloNxW5TB2psTQIkbU0ABoCAAAAAAAAAAAAAAAAA 218 | AABePwAEYkcAImdMAWh2WAPPnHcR+6N8Ef+geQz/oXcI/6N4Bv+oewb/rH8G/7KEBv+3hwf/u4sH/8CO 219 | CP/DkQn/x5QJ/8mWCf/LmAr/zpkK/8+aCv/Qmwr/yZsc/8C0lP/k4Nn/5+Xj/+bl4v/n5uX/5+Xj/+Xk 220 | 3v/n5+b/5eTg/+Th2v/m5eL/5N/X/8+7k/+8kyr/vY0L/7qLCf+3iQn/tIYJ/7KFCf+vggn/rIAI/6l+ 221 | CP+legf/oXcG/510Bv+Zcgj/nX8w/6+aZ/+0n2j/sZtd/6+VUP+vkkH/p4Yt/YBgEN9vUwmJbU4DOG1I 222 | AAxpPAAAAAAAAAAAAABVAAAAYDwACmVJADJrUAKHimcK5aJ7Ev+jew//oXgK/6J4B/+megb/qn8G/7CC 223 | Bv+2hwb/u4sH/8CPB//Ekgn/yJUJ/8yXCv/OmQr/0JsK/9GcCv/SnQv/050L/82iKv/b2ND/5uXi/+fm 224 | 4v/n5uT/5+fl/+jm5v/n5eL/5uLc/+fm5P/l4+D/5ePe/+jn5P/Ry7v/v5o1/8CPDP++jQn/uosJ/7eJ 225 | Cf+zhgn/sYQJ/62BCf+rgAj/qH0H/6N5B/+fdQf/lnAN/5x+M/+ynmr/taFu/7GaX/+wl1X/sJRH/62M 226 | Nf+Tchvtc1cLpWxQBExuSAAUfj8AAgAAAAAAAAAAVzAAAmNFABBnTQBGcVQCp5l0EfGlfhP/onkN/6F4 227 | CP+kegb/qH0G/66BBv+0hQb/u4oH/8COCP/Fkgn/yZYK/82ZCv/Qmwr/050L/9WeC//Wnwv/16AM/9ih 228 | DP/ToRv/zLyR/+np5//o5+b/6Ofm/+jn5//o6Of/6Ojo/+jo6P/q6en/6ejm/+fk3f/XzLD/xKA+/8KS 229 | Df/CkQv/wZAK/76NCv+6ign/tIcM/6yBEf+mfBX/pXwR/6R7Dv+geBD/nXge/6mIPv+4n2b/uql7/7im 230 | dv+zn2j/sZlb/7CVTf+xkkD/oIAm93hcDsFtUgZkZ08AHmRSAASAgAAAAAAAAGFKAAJlTAAYaE4AWHtb 231 | BMGcdxH5pX0S/6J6Df+ieQj/pnsG/6t/Bv+xgwb/uIgH/76NCP/EkQn/yZYJ/86ZCv/RnAr/1J4L/9ag 232 | C//Zogv/2qIM/9mjDP/aowz/2KIP/9CsSP/g3dj/6Obk/+fk4f/n5uT/6Ofm/+fm5P/n5OD/4t7T/9fH 233 | nf/Cplj/w5Ye/8eWDP/GlAv/xJML/8OSC//Ajwr/uowO/7SOMP+/nVj/x6Nc/72ZUf+ohjv/rI1H/8Or 234 | dv/FtY//w7WR/76vh/+5pnj/s55n/7GaXv+wllH/sZND/6WELP2CZBLTcFMHdmxTAShoXAAGaGgAAIAA 235 | AABiOgAEZEkAIGlNAGp/XwXPnngR/aR9Ef+jegv/pHoH/6h8Bv+ugAb/tYYG/7yLB//CkAj/yJQJ/8yY 236 | Cf/RnAr/1J4L/9egC//ZoQv/26ML/9ykDP/cpQz/3aUM/9iiEP/Kp0n/2dTJ/+jo6P/p6Of/6efj/+nn 237 | 5P/s7Ov/3dXB/8qvZ//MmxX/zpoN/82ZC//MmAv/yZYL/8aUC//Ekwv/wZEL/7qRIv/Er33/39nM/+De 238 | 1v/b1cX/1Mis/9HEqf/QyLL/y8Gm/8W4lv+/sIj/u6p+/7Wib/+ym2H/sJZT/7CUSP+oiDP9iGkX4XBU 239 | CIltUQE0YkoACkw7AACAOAAAbUQABmZKAChsTwF6h2UJ3aF7Ev+kfA//o3oK/6V6B/+rfgb/sYIG/7mI 240 | B/+/jgj/xZMI/8uXCf/Pmgn/054K/9egC//aogv/3KQL/92lDP/bow3/1Z8O/9GdFv/Op0P/yK9v/9zS 241 | uP/q6ur/5uXg/9/Yw//e0rD/386i/82qS//SnxL/054M/9KdC//Pmwv/zpoL/8uYC//Ilgv/xpUL/8GS 242 | DP/Cn0H/1cu1/+He1v/h3tj/3dnO/9vWyP/X0MD/08q2/83Dqv/HvJ3/wbSP/7ysgv+3pHT/spxj/6+W 243 | VP+wlEn/q405/45wHOlyVgibbFABPmRCAAxWKgAAaGgAAGNPAAZkSgAubFABh49sDOOlfRL/pHwO/6N6 244 | Cf+newb/rX8G/7SFB/+7iwf/wpAI/8eUCP/NmAn/0pwJ/9egCv/aogv/2aIM/9KdEP/Jlxj/w5Ql/8if 245 | P//Qtnn/yq9q/9mwQP/Vtlz/3dGt/9jDhv/UsE3/06k1/9OkJP/ZpBD/2aMN/9ahDf/Unw3/0p4N/9Cc 246 | DP/Omgz/y5gM/8eWDP/ElA7/xaZR/9zY0P/k4t7/4uDa/97a0f/b1sn/19C+/9PKtf/OxKv/yb2f/8K0 247 | kP+8rIH/t6V2/7OfaP+wmFf/sJRK/6yNOf+RcRnvdFYHpWxQA0RjRAAOVzUAAEREAABbRwAIZkoAMG5Q 248 | AI2Tbw3npn8T/6R8Dv+kewn/qXwG/6+BBv+2hwb/vYwH/8SRCP/Llgn/0JoJ/9WeCv/ZoQv/0JwQ/72N 249 | HP/HnUH/0ruI/9fJrP/f07z/1My4/9mtMf/krRT/4a4g/9ywN//cqyX/36gT/+GpEP/hqA//3qcP/92l 250 | D//apA//2aIP/9ahD//Unw//0J0O/86aDv/LmA7/x5YP/8inSv/b1cX/4t3U/+Lf1//h3tb/3dnP/9jS 251 | w//UzLj/zsSr/8m9nv/EtpP/vq6F/7ildv+0n2n/sJhZ/7CVTf+sjjv/lHQd8XVYCqttTwNIZ0gAEGBA 252 | AABAQAAAWEYACmZLADJvUQCPlXAO56eAE/+kfA3/pXsJ/6p9Bv+xgwb/uYgG/7+OB//Gkwj/zZgJ/9Kc 253 | Cf/XoQv/ypoZ/8mlUv/Tv5X/39S//9XKrP/RuXr/0byD/8m+of/mrxj/6LAV/+S3Pv/ey5b/1Lhu/92r 254 | I//nrhH/5awQ/+SrEP/iqRD/4KgQ/96mEP/bpRD/2KMQ/9WgEP/TnxD/z5wP/8qYEP/Dnzj/0ces/+Tg 255 | 2P/h28//39rO/93Zzf/Z1Mb/1M67/8/Frf/JvZ7/w7WR/7+viP+4pnf/s59p/7CaW/+tkkv/pocx/5h5 256 | I/F3WQytbU4ESmZGABBgQAAAQEAAAFhGAAplSgAyb1EAkZVxDueogBP/pXwN/6V8Cf+qfgf/s4QH/7qJ 257 | B//Bjwf/yJQI/8+aCf/Unwr/zJoS/8WmYv/bzrP/497T/+Dd1v/UvHz/368r/+izIf/lsyz/5LAm/9Kv 258 | Wv/nsyP/57Yx/+u1I//ttBb/7rMT/+2yE//rsRP/6K8T/+WtE//iqhL/36gS/92mEv/apRL/16IS/9Og 259 | Ev/OnBL/xZoh/867iP/n5OD/4+DX/+Db0P/d2Mv/2dPF/9XPvf/QyLL/ysCk/8W4lv/AsIr/uql8/7Wg 260 | a/+xmlz/qI1C/6KBJv+aeiXxd1kMrW1OBExmRgAQYEAAAEBAAABYRgAKZksAMm5RAI+VcQ7nqIAT/6Z8 261 | Df+mfAn/rH8H/7OEB/+7igf/w5AH/8qWCP/Rmwn/zZoT/7+eUf/Zyq3/4t7W/+Tg2f/Yy7D/zKlQ/96r 262 | Iv/osh7/5LAi/9CpQ//bv3v/6rQi//G4HP/yuRr/87kY//O5F//ytxb/8bYW/+60Fv/rshb/6LAV/+Wt 263 | Ff/hqxX/3qgV/9umFf/YpBX/1KEU/8+fFf/IpD3/2Myr/+bj3f/j4Nn/3trP/9nTwv/Uy7f/0Mau/8vA 264 | pP/DtZP/rJdh/6qUWv+njkv/o4c+/51+Lf+qjDj/nHwn8XZZC6trUANKZEcAEGBAAABCQgAAW0cACGdM 265 | ADBuUQCNlXEO56iBE/+mfQ3/pn0J/61/B/+zhQb/vIoG/8SRB//Llwn/ypcQ/7mXQ//Qv5f/39vP/+Pf 266 | 1//k4Nn/4NbB/8mudf/Gn0H/zaM7/8igQf/JrXX/1Ld4/9usMf/xuiT/9Lsj//S7If/0uh//9Loe//S5 267 | G//zuBn/8bYY/+61F//rshf/6LEX/+StFv/gqxb/3qkW/9qlFv/Vohb/z54Z/8epVP/UyKr/2tPA/9jS 268 | xP/b1sj/2NHA/9HJsv/LwaX/tKJ0/5t7J/+WcA3/lW8J/5VxDf+Ydhn/poYw/5t8KPF1WAqpalADSGRJ 269 | ABBbQQAAVVUAAF1IAAhjSAAwbVEAi5NwDeWogBP/pn4O/6d9Cf+tfwf/tIUG/7yLBv/EkQj/xpUP/7mU 270 | N//Ltoj/2dG+/+Dazf/j3tX/5uTf/+fm4v/l3tD/3s2s/9zKpv/g0bT/5+DS/9vNsf/LqFb/7bks//O9 271 | Kf/0vSj/9L0n//S9Jv/0vCT/9Lsh//S6H//zuRz/8bgb/+61Gv/qsxr/5rAa/+KsGf/eqRn/2qYZ/9Si 272 | Gf/Mnh3/uZhA/7GXVP+wnGz/xrqY/83Bn//Iu5n/v7CJ/6eMRP+Zcw3/lG4J/5NtCf+WcA//nHgb/6aF 273 | LP+ZeiXxdFgKpWpQA0RdSQAOSTwAAGhoAABhTQAGY0kALG1RAIOQbQzhpn4S/6d+Dv+nfQn/rIAH/7SF 274 | B/+8iwf/wpAL/76WMP/Hr3n/1suz/9zWxv/g3ND/4+DX/+Xi2f/n5uD/6Ofi/+no4//q6OX/6urn/+vp 275 | 6P/m3c//2Lt7/9+yOP/xvjL/9L8w//S/Lv/0viz/9L0q//S9KP/0vSf/9Lwk//O7If/zuh7/8Lcd/+y0 276 | HP/lrxz/4qwb/96qG//Zphv/0KEf/8KlXf/FrHX/vJ9i/6yPSP+qjkL/q49H/6WIPP+ceR//mXMT/5dz 277 | Gv+Zdh3/oX4o/6mJNf+ujjr/l3kl7XRYCZ1rTwE+YUIADFMpAAA4OAAAWEEABmRIACZrTwB2iGYI2aN8 278 | Ev+ofw//p34K/6x/B/+0hAf/vIsH/76QFP/Cp2D/z8Ol/9fPvP/c1sb/4NzP/+Pg1v/k4dj/5+Xf/+no 279 | 5P/q6eb/6ujl/+rp5f/s6ur/6eTc/9nEmv/Mpkv/3bA5/+69Of/zwTf/9MA1//TAMv/0vy//9L8t//S+ 280 | K//0vSj/9L0l//O7If/wuCD/67Qf/+exH//irR7/3aoe/9OmK//YxJT/39fF/9jLrv+9oWX/qYc2/6WC 281 | L/+gfSf/n3wq/6eHPv+rj03/rJFM/66SS/+wlEn/rI48/5BzIeVxVQiRa04BNmFGAApQOgAAAAAAAFQ2 282 | AARlRwAeZ00AZIBeBcugehH9qYAR/6h+C/+rfwf/soMH/7uKB/++khv/xq9z/9LIrf/Xzrn/29XF/9/a 283 | z//i3tP/5uPd/+fm4P/o5+T/6unm/+rq6P/r6OX/6+rn/+zq6f/l3tD/2cWd/8+tYP/LokH/57k///PC 284 | Pf/0wzv/9MI4//TBNv/0wDL/9L8v//S/Lf/zvir/8rsm//C4I//ttiL/5rIi/+CtIf/Zqij/0LJf/9XM 285 | sv/e2cv/0sWo/8Syhv+/qnn/uqNu/7eha/+3o3D/taBs/7KcYf+wllL/sJRH/6iKNv2GahjZbVMGfGhO 286 | ACpjPgAIYCAAAAAAAABgPgACZEcAFmVLAFJ5WgS5nnkR+amBEv+ofg3/q38I/7GDB/+6igr/wJQg/8ew 287 | dP/Rx63/1s64/9rTwv/f2cz/4d3R/+Tf1//n5N7/6Ofj/+no5v/q6OX/6+rn/+zs6v/t7Oz/7evq/+vn 288 | 4f/n3s3/4dW9/9W+gf/vw0v/9cVC//XEP//0xD7/9MI7//TBOP/0wDT/878w//O+Lf/xvCn/8Lom/+u2 289 | Jf/ksST/3qwk/9SnK//Fp1T/z8Wr/9nSwf/Ty7T/z8So/8m9nP/Cs43/uah6/7Ofav+xm1//sJZQ/7GV 290 | Rf+lhzT7gGIUy2tPA2hlSwAgYUMABIAAAAAAAAAAZDUAAGRHAA5mSwBAb1IBn5p2EO+pghP/qH8N/6p/ 291 | Cf+vggf/uYoN/7+WJ//ErXD/zsOl/9TKsf/Yz7v/3dbG/+Dbzv/i3M//5eLa/+jm4f/q6eT/6unl/+vn 292 | 4//r6OL/7Ovn/+zq5//s6uf/5eDW/9jJo//avGv/7sNP//TGS//1xkf/9cVF//TFQ//0xD//88I7//PA 293 | N//zvzT/8b4w//G9LP/vuSf/6LUn/+KvJ//Zqij/ya5p/9bMtf/Y0L3/1Mu1/9DGq//Kvp7/w7SP/7mn 294 | eP+ynWb/sZla/7GVTv+xlEP/oYIt83VZDLNqTwJUZkoAFl9BAAIAAAAAAAAAAAAAAABPOgAIYkgALGpO 295 | AH6KZwnhpX4T/6mAD/+qfwr/roEI/7WIEf+3kjL/vqZs/83Bof/TyrL/2NC8/9zWxv/g287/49/U/+Tg 296 | 1f/m49n/6OXe/+nn4f/s6+j/7Orm/+zq5//s6+f/7Ovo/+Tcyv/NtHv/xKJW/82oU//ZslH/88hQ//TI 297 | Tf/0xkr/9MVH//TERP/zwz//8sE7//G/Nv/wvTP/77st/+u4K//ksyz/0qk5/8CnYv/NwKD/1s22/8u/ 298 | nf+0n2n/wLGJ/8O1jv+4pnX/sZpf/7CWU/+xlEn/rpA+/5J2JOdvUwaTaUsAPGxFAAyAPAAAAAAAAAAA 299 | AAAAAAAAXDgABGFEAB5mSgBed1YAx6B6EfupgRH/qX8M/6uACv+shiH/tppY/8Kuff/LvZr/0ces/9XM 300 | tf/a07//3tfI/+HbzP/k4df/5+Td/+jm4P/p5+T/7Ovo/+no5P/s6+n/7Ovn/+3s6v/s6uX/5dzI/+HS 301 | s//k177/18GO//DHV//1yVP/9chR//THTf/zxkr/88VH//LDQ//wwT3/7745/+69Nf/suTD/4rQ4/9e6 302 | cf/DsIP/vKVq/7eibf+2oGL/sJJB/7WgaP/Csoj/t6Rx/7GbXv+vllD/sJNC/6eINf18XxDTaU8DcmVL 303 | AChoQAAGgAAAAAAAAAAAAAAAAAAAAGk+AAJgRAAQZEkAQm1RAaGXcw/vqYET/6mADv+mfQ//p4o7/8Cv 304 | gf/GuJP/y7+e/8/FqP/TybD/2M+5/9zVxP/g283/49/U/+Xi2f/o5d7/5eTd/+beyv/a0LT/49/W/+3s 305 | 6f/s6+f/7Onl/+zp4//o5uP/5uTd/9zQrv/ux1//9Mta//XKV//0yVT/88hS//LGTv/xxEr/8MJE/+6/ 306 | P//svTv/6ro2/+e3M//esTX/zbmC/9LEpf/Fr33/uJY8/7OUQf+3oWn/wa+C/7eibP+sk0//sJRM/7GU 307 | Qv+fgS/zclYKsWlNAVJjSgAYVkIAAgAAAAAAAAAAAAAAAAAAAABVAAAAXEAACGRJACplSwB0gmEG2aZ/ 308 | FP2ngBH/o3wV/6mMQf/Arn//xbaO/8m8mf/OwqP/0ses/9bOuP/a0r//3dfG/+Dbzv/j39X/4t7R/93R 309 | rv/exX7/3cF2/9XJqf/s6+j/7evo/+3t6v/v7uv/3tS6/93Lmv/ly4L/8ctk//PMYP/zy13/88pa//LJ 310 | V//xx1P/8MVP/+/CSv/twEb/671A/+i6PP/mtzf/4LI1/8isYP/SyK3/wKho/7iXP/+yl1T/t6R0/7qo 311 | d/+wml7/n4Ev/6qNPf+ukDz9iGwd4WpPA4doTAA2YEQADCQkAAIAAAAAAAAAAAAAAAAAAAAAAAAAAGA/ 312 | AAJmSAAWZksATm9SAK2ZdRf1qoQg/6eDKP+wlU//v6x6/8Oyh//HuZT/zL+f/9DEqP/UyrL/2NC6/9rS 313 | v//e2Mf/3NXF/9fIoP/gxHX/68hr/+fHcf/UxZ3/6+nk/+fl3v/p5+H/6ujk/+PNkP/uy3D/885q//PO 314 | Z//yzWX/7chh/+fBXf/sxVz/8MhZ/+/FVP/twk//68BL/+m9Rv/mukH/47Y9/+CzOP/UrEL/zbNt/8Kf 315 | Qv+3nl3/u6Vx/7aibP+0nWP/pIc8/5t5Hv+nhzD/oYMw93JXCr1oSwBeZkgAIGBDAAYAAAAAAAAAAAAA 316 | AAAAAAAAAAAAAAAAAABmMwAAZUIACmVHAC5mSgB6f2AN2bCPOP+wkj//tJpW/76qd//CsIP/xbWL/8m7 317 | lv/OwaL/0ses/9bMtP/Z0Lz/29TC/9XJrf/SuXr/48Jq/+vJbP/lx3P/zsOo/+Tg1//YzbD/2sqg/+DO 318 | nv/rzXv/8c9w//LPb//yzm3/6MVq/9a0Yv/Rr2H/4L1i/+3GXf/txVn/68JU/+jAUP/jukz/3bVG/92z 319 | Qf/csT7/2a04/9CnOv/HoTn/vqJa/8Szif/BrX3/u6Rr/6WGNf+eehv/qYox/4VnGONpTgOLZksAOmRE 320 | AA50KwACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEg2AARiRQAWZUgATGtPAaObfCj5s5ZD/7SZ 321 | UP+8p23/wq+A/8SziP/HuZL/y76c/8/DpP/SyKz/1s22/9nQuv/WyKn/w6px/9KzZP/iwWv/3sN7/9XP 322 | wv/a0Lf/2cKC/9O5c//VuG3/58hx/+/Oc//xz3L/68tx/9q/ev/Zx6H/28up/9G3dv/iwGH/6sRd/+nB 323 | WP/fuVb/yKhX/8qnWv/EoUr/0alC/9asPP/RqDj/yKE5/7+eQf+9pWj/wa+A/7ula/+tjj7/pIIk/5p8 324 | JvtvVAaxaEwAWmVKABxpMgAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMwAAXjMACGVI 325 | AChkSgBsfWAP0auNOv+0lkj/uaFg/8Guev/CsYL/xLSJ/8i5kv/Lvpz/z8Ok/9HFp//WzLT/2M61/9LA 326 | mP/Hq27/xaRb/8OmYv/NuH//3cSA/9q/e//SuH3/07mA/93Ad//rzHX/7cx0/+PHff/YyKf/4trI/+LZ 327 | xP/QuIb/zq9g/+C9YP/gvV3/07dx/9TEoP/UxaT/yrSD/8inVP/QqUD/z6c7/8eiO//AnTz/upxL/7ym 328 | bP+5oWH/spRC/6mJM/+BYxTbZ00CfGdLADJYRQAMHQkAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 329 | AAAAAAAAAAAAAFUAAAJlSgAOZEgAOGlOAYuGaRThsJI9/7aaT/+/qW3/w7B+/8Szhv/Gto7/ybqV/83A 330 | oP/Qxab/08is/9bLsv/Y0Ln/2tG7/9nMsP/VxJ7/0b6N/9q/eP/UwY3/2dC6/9TGqP/Ir3n/0rd0/+XI 331 | ef/Zwoj/39bB/+Tf0//j3tH/39fC/823if/Fp2T/xaZd/8Svdv/Qw6D/1cqt/9THp//LsGr/zahE/8ym 332 | P//Goj7/wJ0+/7ybQf+3mkr/s5dK/7CSPv+JbBvpbVAEmWVKAEBfQwAUMzMAAgAAAAAAAAAAAAAAAAAA 333 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbUkABGJJABhlSgBUb1UIpZR3Ju2xk0H/u6Jd/8Ku 334 | d//Dr3v/wKx3/7qlbf/Gt5D/yLiS/8a1iv/DtI3/0MWo/9fOt//a0r3/1cyz/8Swff/KsXH/z72R/9zV 335 | wf/h2sn/39W9/9K/j//bwnz/zLyV/97Vwf/g2cj/4NnJ/9/YyP/c0rz/1cal/864hv/IrnX/xapm/8ar 336 | Yf/Jqlj/zalN/82oRf/KpUL/xaFC/8CeQ/+8m0P/sY4y/6mIK/+WeSbxdFkLr2dMAF5lRwAeTzUABgAA 337 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcPwAGZUcAJmRJ 338 | AGJ2Wwyxm3wo77KTQP++pFz/vqNb/7yhV/+7omL/vKh1/76ocv+/pmf/wK16/8y/nf/NwaH/08em/8m7 339 | lP/BrX//xK18/9PEov/b0rz/29K4/97TtP/Vwo3/1L2A/9DFqv/d1cL/3NS//9zTv//b07//2dC4/9fO 340 | tv/Vyq//zr6Y/8atcP/MrFb/z6xQ/82pTP/Kp0j/yKRF/8SiR//An0f/uJY6/6eDHv+TcBDzdlgGu2dM 341 | AGxlRwAuaTgACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 342 | AAAAAAAAVQAAAGVCAA5kSQAuZ0wAbHtdCbmYdhjvsIwp/8CeRf+9oVn/wq12/8Sxf//EsH7/w69+/8e3 343 | jf/NwJ3/w7GD/8myd//JtX7/zsKj/9TIq//RxaT/0cKb/9C7hv/Runv/1bx4/8y4gv/YzrX/2tK8/9nQ 344 | uf/YzrX/1820/9XLsf/TyKv/0cSm/82/nP/Isnz/yKpY/8yrUf/KqE3/yKdL/8elSf/Do0r/vZxB/6yI 345 | Jf+UchHzelwHw2lOAXhlSwA2Y0YAEFVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 346 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvRQACXEoAEGNJADRpTQFwelsFuZdyD++xjS7/v6Re/8Ww 347 | ef/Fs4D/xbKD/7+sef+/rHr/w7KG/7+qdP/Jrmn/y7Jw/8i3iv/MvZf/xbF9/863ev/Ks3b/yK1t/8Sq 348 | av/FsH3/1cmr/9bMs//Vy6//1Mis/9PIq//Sxqj/0MSl/87Bof/LvJb/xa95/8WoWv/JqlL/yKhP/8in 349 | Tv/Hp07/wKBF/6+LKf+UcRDxeVsHwWpOAXpmSQA6YksAFFlTAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 350 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAE1BAARdRAASYkgANGdM 351 | AGx1VgOvkW8Q7a6POf/BpVv/xKxt/8OveP++qW//wKt1/7yocP/BrXr/v6Vm/8KoZv/Aq3f/yLaK/8Kr 352 | cP/IsXH/y7mL/8y7kv/ItYn/y7uT/9HEpP/Rxqf/0cao/9HFpv/Pw6P/zsGg/82/nf/LvJf/ybqS/8Sv 353 | ev/Cplv/yKlU/8ioU//IqFL/wqJJ/66JJv+ObQ7xdVgEt2lOAXZlSQA6YEEAFFlDAARVVQAAAAAAAAAA 354 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 355 | AAAzMwAASDcABFxDABBkSAAuZUkAYG9TAqOEYwrhqIYq/72iVv/Dqmf/w610/8Ktdv+/p2b/v6t1/8Ks 356 | dv/BqnD/xLGB/8m3jP/DrHb/wKhs/8SxgP/HuZb/zsKf/87Bn//OwZ//zsGf/82/nP/Mv5v/y76Z/8q8 357 | lv/Ku5P/yLmP/8e2iv/Drnj/waZf/8ipV//Jqlf/v51A/6iEIf+DYgjlcFQDq2ZNAGhlSwA0ZEMAFFkz 358 | AARVKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 359 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzAABKGwACWjgADmRHACZjSABSaE0Ai3xdCtGaeyf3tZlK/8Gp 360 | Z//Fr3T/wqps/8Oudv/ItYX/x7WH/8i3jP/JupD/yLaK/8Cpcv++pmn/watx/8Oyhf/MvZj/y72W/8u8 361 | lv/Ku5P/yrqR/8m5j//IuI3/yLeL/8e2hv/HtYT/xbB6/8OqZP/EpVD/tpMy/5h1FPl7XQbXaU0Ak2VM 362 | AFhjSAAqYEMAEGQ4AARVKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 363 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUPwAGYkkAGGRI 364 | ADhlSQBqak8BoX9fCteceRv1spVE/cKra//GsHX/w6xt/8Gqa//DsH3/x7WE/8Wzgv/GsoH/wqtx/76l 365 | af/Dr3r/ybmN/8m4jP/KuY3/ybiL/8m3if/Jtob/yLaD/8i1gf/ItH//x7N5/8Osbf+0mEf9mngZ9X5d 366 | BttsUACnZksAcGRJADxgSQAaTj0ACFVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 367 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 368 | AAAAAAAAAAAAAG1JAARlTQAOZUkAKGNHAExmSwB4blEAq4JkENeegS7vrY84+7qcSf/Ap13/w61x/8av 369 | c//ErXD/xrN//8m2hP/ItYL/ybaE/8e0gP/CrXL/yLR+/8m1gv/JtoL/ybV+/8eyeP/FrnD/vaZk/7CV 370 | SvuggzLvhmgX2XBTA7FoTAB+ZksAUGRKACxnRgAQYEAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 371 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 372 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVUAAmNLAAheRwAWY0kALGRLAExkSwBwbVAAn3ZW 373 | AMeIZwzfoIMw7ayPQfewk0P7t5xR/7+mZP/ErW3/xK5u/8Wub/+/pmH/wKRU/7+iVP+8oVn/u6Jg/7Wc 374 | V/2tkkb5pIY075BzIuF3WAbJblECoWdLAHZlSQBQZEkAMGBDABhWPwAIVVUAAgAAAAAAAAAAAAAAAAAA 375 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 376 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMwAASDYABGBC 377 | AApfSQAWY0kAKmVKAEJmSwBeaE0AfHBSA516XAi5f18Gy4lpENmWdyTjnYAv5Z+CMeefgjLnmXkh55p4 378 | GeeYdRflknAU44trGNuCZBLNe10Mu3BUBKFpTQCBZUsAYGVKAERkSAAsYkYAGFlCAAxbOgAEFAoAAgAA 379 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 380 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 381 | AAAAAAAAAAAAAAAAAABmMwAAWjwABF5EAAhmSgAQZEYAHGFIACxmSQBAZUkAUGVKAGJqTgB0bVABgW9R 382 | AYdvUQGLblEBi25RAItuUACLblAAiW1QAINrTgF2ZksAZGZJAFJmSQBAZEcALmJFAB5lRQASX0UACGNG 383 | AAQzGQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 384 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAAaT4AAmM8AARPOwAIZUMADlpF 386 | ABReRgAcZEgAJGNHACplRwAsZUkALmNIAC5jSAAuY0gALmRIACxiSQAqY0gAJGNGABxkRAAWZEIADlg6 387 | AAhbOAAEXjgAAlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 388 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 390 | AAAAAAAAAAAAAF41AABEPgACWEEAAmk+AARnRAAGalIABmRMAAZfSAAIX0gACF9IAAhjTgAGZkgABmY+ 391 | AARkQQACYD4AAmQ1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 392 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 393 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgEcAAICAAABeXgAAVVUAAFVV 395 | AABVVQAAY2MAAIBHAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 396 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 397 | AAAAAAAA////////////////////////////////////wAH///////wAAD//////8AAAB//////AAAAB 398 | /////wAAAAD////+AAAAAD////wAAAAAH///8AAAAAAP///gAAAAAAf//8AAAAAAA///wAAAAAAB//+A 399 | AAAAAAD//wAAAAAAAP//AAAAAAAAf/4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gAAAAAAAAf+AAAAAAA 400 | AB/4AAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAH8AAAAAAAAAfgAAAAAAAAB+AA 401 | AAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH8AAAAAAA 402 | AAfwAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/4AAAAAAAAD/gAAAAAAAAf+AAAAAAAAB/8AAAAAAAAH/wA 403 | AAAAAAA//gAAAAAAAD/+AAAAAAAAf/8AAAAAAAD//wAAAAAAAP//gAAAAAAB///AAAAAAAP//+AAAAAA 404 | B///8AAAAAAP///4AAAAAB////wAAAAAP////gAAAAB/////gAAAAf/////gAAAH//////gAAB////// 405 | /wAAf///////8A////////////////////////////////////8= 406 | 407 | 408 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/图片.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace KcptunGUI.Resource { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | public class 图片 { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal 图片() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | public static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KcptunGUI.Resource.图片", typeof(图片).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 使用此强类型资源类,为所有资源查找 51 | /// 重写当前线程的 CurrentUICulture 属性。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | public static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 65 | /// 66 | public static System.Drawing.Bitmap png_32x32_connect_1 { 67 | get { 68 | object obj = ResourceManager.GetObject("png_32x32_connect_1", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 75 | /// 76 | public static System.Drawing.Bitmap png_32x32_disconnect_1 { 77 | get { 78 | object obj = ResourceManager.GetObject("png_32x32_disconnect_1", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 85 | /// 86 | public static System.Drawing.Bitmap png_32x32_signal0_1 { 87 | get { 88 | object obj = ResourceManager.GetObject("png_32x32_signal0_1", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 95 | /// 96 | public static System.Drawing.Bitmap png_32x32_signal1_1 { 97 | get { 98 | object obj = ResourceManager.GetObject("png_32x32_signal1_1", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 105 | /// 106 | public static System.Drawing.Bitmap png_32x32_signal2_1 { 107 | get { 108 | object obj = ResourceManager.GetObject("png_32x32_signal2_1", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 115 | /// 116 | public static System.Drawing.Bitmap png_32x32_signal3_1 { 117 | get { 118 | object obj = ResourceManager.GetObject("png_32x32_signal3_1", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | 123 | /// 124 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 125 | /// 126 | public static System.Drawing.Bitmap png_32x32_signal4_1 { 127 | get { 128 | object obj = ResourceManager.GetObject("png_32x32_signal4_1", resourceCulture); 129 | return ((System.Drawing.Bitmap)(obj)); 130 | } 131 | } 132 | 133 | /// 134 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 135 | /// 136 | public static System.Drawing.Bitmap png_72x72_appicon { 137 | get { 138 | object obj = ResourceManager.GetObject("png_72x72_appicon", resourceCulture); 139 | return ((System.Drawing.Bitmap)(obj)); 140 | } 141 | } 142 | 143 | /// 144 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 145 | /// 146 | public static System.Drawing.Bitmap png_72x72_archive_1 { 147 | get { 148 | object obj = ResourceManager.GetObject("png_72x72_archive_1", resourceCulture); 149 | return ((System.Drawing.Bitmap)(obj)); 150 | } 151 | } 152 | 153 | /// 154 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 155 | /// 156 | public static System.Drawing.Bitmap png_72x72_chart_1 { 157 | get { 158 | object obj = ResourceManager.GetObject("png_72x72_chart_1", resourceCulture); 159 | return ((System.Drawing.Bitmap)(obj)); 160 | } 161 | } 162 | 163 | /// 164 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 165 | /// 166 | public static System.Drawing.Bitmap png_72x72_colorful_1 { 167 | get { 168 | object obj = ResourceManager.GetObject("png_72x72_colorful_1", resourceCulture); 169 | return ((System.Drawing.Bitmap)(obj)); 170 | } 171 | } 172 | 173 | /// 174 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 175 | /// 176 | public static System.Drawing.Bitmap png_72x72_configure_1 { 177 | get { 178 | object obj = ResourceManager.GetObject("png_72x72_configure_1", resourceCulture); 179 | return ((System.Drawing.Bitmap)(obj)); 180 | } 181 | } 182 | 183 | /// 184 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 185 | /// 186 | public static System.Drawing.Bitmap png_72x72_download_1 { 187 | get { 188 | object obj = ResourceManager.GetObject("png_72x72_download_1", resourceCulture); 189 | return ((System.Drawing.Bitmap)(obj)); 190 | } 191 | } 192 | 193 | /// 194 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 195 | /// 196 | public static System.Drawing.Bitmap png_72x72_driver_1 { 197 | get { 198 | object obj = ResourceManager.GetObject("png_72x72_driver_1", resourceCulture); 199 | return ((System.Drawing.Bitmap)(obj)); 200 | } 201 | } 202 | 203 | /// 204 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 205 | /// 206 | public static System.Drawing.Bitmap png_72x72_log_1 { 207 | get { 208 | object obj = ResourceManager.GetObject("png_72x72_log_1", resourceCulture); 209 | return ((System.Drawing.Bitmap)(obj)); 210 | } 211 | } 212 | 213 | /// 214 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 215 | /// 216 | public static System.Drawing.Bitmap png_72x72_mac_1 { 217 | get { 218 | object obj = ResourceManager.GetObject("png_72x72_mac_1", resourceCulture); 219 | return ((System.Drawing.Bitmap)(obj)); 220 | } 221 | } 222 | 223 | /// 224 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 225 | /// 226 | public static System.Drawing.Bitmap png_72x72_save_1 { 227 | get { 228 | object obj = ResourceManager.GetObject("png_72x72_save_1", resourceCulture); 229 | return ((System.Drawing.Bitmap)(obj)); 230 | } 231 | } 232 | 233 | /// 234 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 235 | /// 236 | public static System.Drawing.Bitmap png_72x72_server_1 { 237 | get { 238 | object obj = ResourceManager.GetObject("png_72x72_server_1", resourceCulture); 239 | return ((System.Drawing.Bitmap)(obj)); 240 | } 241 | } 242 | 243 | /// 244 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 245 | /// 246 | public static System.Drawing.Bitmap png_72x72_status_1 { 247 | get { 248 | object obj = ResourceManager.GetObject("png_72x72_status_1", resourceCulture); 249 | return ((System.Drawing.Bitmap)(obj)); 250 | } 251 | } 252 | 253 | /// 254 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 255 | /// 256 | public static System.Drawing.Bitmap png_72x72_status_2 { 257 | get { 258 | object obj = ResourceManager.GetObject("png_72x72_status_2", resourceCulture); 259 | return ((System.Drawing.Bitmap)(obj)); 260 | } 261 | } 262 | 263 | /// 264 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 265 | /// 266 | public static System.Drawing.Bitmap png_72x72_text_1 { 267 | get { 268 | object obj = ResourceManager.GetObject("png_72x72_text_1", resourceCulture); 269 | return ((System.Drawing.Bitmap)(obj)); 270 | } 271 | } 272 | 273 | /// 274 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 275 | /// 276 | public static System.Drawing.Bitmap png_72x72_unload_1 { 277 | get { 278 | object obj = ResourceManager.GetObject("png_72x72_unload_1", resourceCulture); 279 | return ((System.Drawing.Bitmap)(obj)); 280 | } 281 | } 282 | 283 | /// 284 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 285 | /// 286 | public static System.Drawing.Bitmap png_72x72_upload_1 { 287 | get { 288 | object obj = ResourceManager.GetObject("png_72x72_upload_1", resourceCulture); 289 | return ((System.Drawing.Bitmap)(obj)); 290 | } 291 | } 292 | 293 | /// 294 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 295 | /// 296 | public static System.Drawing.Bitmap png_72x72_user_1 { 297 | get { 298 | object obj = ResourceManager.GetObject("png_72x72_user_1", resourceCulture); 299 | return ((System.Drawing.Bitmap)(obj)); 300 | } 301 | } 302 | 303 | /// 304 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 305 | /// 306 | public static System.Drawing.Bitmap png_none { 307 | get { 308 | object obj = ResourceManager.GetObject("png_none", resourceCulture); 309 | return ((System.Drawing.Bitmap)(obj)); 310 | } 311 | } 312 | } 313 | } 314 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/字符串.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace KcptunGUI.Resource { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | public class 字符串 { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal 字符串() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | public static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KcptunGUI.Resource.字符串", typeof(字符串).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 使用此强类型资源类,为所有资源查找 51 | /// 重写当前线程的 CurrentUICulture 属性。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | public static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 查找类似 {"Language":"简体中文","LangTag":"zh_CN","LCID":2052,"Text":["KcptunGUI","客户端","服务端","首选项","状态","关于","显示当前运行状态","关于本程序","进行首选项设定","客户端模式","服务端模式","以下选项会即时生效并自动保存","是否自动关闭导航菜单","是否记住窗口位置","是否读取系统状态","区域ID,据此提供不同的内容","程序显示语言","处理器","处理器负载:","程序处理器占用:","内存","内存负载:","程序占用:","网络","系统上传速率:","系统下载速率:","KcptunGUI总出网速率:","KcptunGUI总入网速率:","Kcptun总出网速率:","Kcptun总入网速率:","有效流量比:","退出"]} 的本地化字符串。 65 | /// 66 | public static string String_Language_CHS { 67 | get { 68 | return ResourceManager.GetString("String_Language_CHS", resourceCulture); 69 | } 70 | } 71 | 72 | /// 73 | /// 查找类似 {"Language":"English","LangTag":"en_us","LCID":1033,"Text":["KcptunGUI","Client","Server","Config","Status","About","Display application status","About application","Configure settings","Client mode","Server mode","These settings will apply immediately","Whether or not auto close menu","Whether or not remember window location","Whether or not fetch application status","Location ID","Applocation display language","Processor","Processor load:","Application occupied:","Memory","System occupied:","Application o [字符串的其余部分被截断]"; 的本地化字符串。 74 | /// 75 | public static string String_Language_ENG { 76 | get { 77 | return ResourceManager.GetString("String_Language_ENG", resourceCulture); 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /KcptunGUI.Resource/字符串.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | {"Language":"简体中文","LangTag":"zh_CN","LCID":2052,"Text":["KcptunGUI","客户端","服务端","首选项","状态","关于","显示当前运行状态","关于本程序","进行首选项设定","客户端模式","服务端模式","以下选项会即时生效并自动保存","是否自动关闭导航菜单","是否记住窗口位置","是否读取系统状态","区域ID,据此提供不同的内容","程序显示语言","处理器","处理器负载:","程序处理器占用:","内存","内存负载:","程序占用:","网络","系统上传速率:","系统下载速率:","KcptunGUI总出网速率:","KcptunGUI总入网速率:","Kcptun总出网速率:","Kcptun总入网速率:","有效流量比:","退出"]} 122 | 内置简体中文 123 | 124 | 125 | {"Language":"English","LangTag":"en_us","LCID":1033,"Text":["KcptunGUI","Client","Server","Config","Status","About","Display application status","About application","Configure settings","Client mode","Server mode","These settings will apply immediately","Whether or not auto close menu","Whether or not remember window location","Whether or not fetch application status","Location ID","Applocation display language","Processor","Processor load:","Application occupied:","Memory","System occupied:","Application occupied:","Network","System rate[upload]:","System rate[download]:","KcptunGUI rate[upload]:","KcptunGUI rate[download]:","Kcptun rate[upload]:","Kcptun rate[download]:","Availability flow ratio:","Exit"]} 126 | 内置英文 127 | 128 | -------------------------------------------------------------------------------- /KcptunGUI.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KcptunGUI", "KcptunGUI\KcptunGUI.csproj", "{E8AB7C42-3E50-436D-8171-DAE15E9C7522}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KcptunGUI.Resource", "KcptunGUI.Resource\KcptunGUI.Resource.csproj", "{31173083-171C-4488-8CA2-C01D3651E15E}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Debug|x64 = Debug|x64 14 | Debug|x86 = Debug|x86 15 | Release|Any CPU = Release|Any CPU 16 | Release|x64 = Release|x64 17 | Release|x86 = Release|x86 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x64.ActiveCfg = Debug|x64 23 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x64.Build.0 = Debug|x64 24 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x86.ActiveCfg = Debug|x86 25 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x86.Build.0 = Debug|x86 26 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x64.ActiveCfg = Release|x64 29 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x64.Build.0 = Release|x64 30 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x86.ActiveCfg = Release|x86 31 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x86.Build.0 = Release|x86 32 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x64.ActiveCfg = Debug|Any CPU 35 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x64.Build.0 = Debug|Any CPU 36 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x86.ActiveCfg = Debug|Any CPU 37 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x86.Build.0 = Debug|Any CPU 38 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|Any CPU.ActiveCfg = Release|Any CPU 39 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|Any CPU.Build.0 = Release|Any CPU 40 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x64.ActiveCfg = Release|Any CPU 41 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x64.Build.0 = Release|Any CPU 42 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x86.ActiveCfg = Release|Any CPU 43 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x86.Build.0 = Release|Any CPU 44 | EndGlobalSection 45 | GlobalSection(SolutionProperties) = preSolution 46 | HideSolutionNode = FALSE 47 | EndGlobalSection 48 | EndGlobal 49 | -------------------------------------------------------------------------------- /KcptunGUI.v12.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ragnaroks/KcptunGUI/fb8821a7ed0e1bd53fbe3a2a5810328cf1c06ff3/KcptunGUI.v12.suo -------------------------------------------------------------------------------- /KcptunGUI/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /KcptunGUI/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 24 | 28 | 34 | 37 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /KcptunGUI/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows; 3 | using System.IO; 4 | using System.Windows.Input; 5 | using Newtonsoft.Json; 6 | using System.Diagnostics; 7 | 8 | namespace KcptunGUI 9 | { 10 | /// 11 | /// App.xaml 的交互逻辑 12 | /// 13 | public partial class App : Application{ 14 | public const String AppName = "KcptunGUI"; 15 | public const String AppFileName = "KcptunGUI.exe"; 16 | public static readonly String AppVersion = String.Format( 17 | "{0}.{1}.{2}({3})", 18 | Application.ResourceAssembly.GetName().Version.Major, 19 | Application.ResourceAssembly.GetName().Version.Minor, 20 | Application.ResourceAssembly.GetName().Version.Build, 21 | Application.ResourceAssembly.GetName().Version.Revision 22 | ); 23 | public static readonly String AppRunPath = Environment.CurrentDirectory;//运行目录,无路径分隔符,默认是D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86 24 | public static readonly String AppFilePath = AppDomain.CurrentDomain.BaseDirectory;//程序集目录,有路径分隔符,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\ 25 | public static readonly String AppExecFilePath = Path.Combine(AppFilePath,AppFileName);//可执行文件,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\KcptunGUI.exe 26 | public static readonly String AppResxPath = Path.Combine(AppFilePath,"Resx");//资源目录,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\Resx 27 | public static readonly String AppConfigFilePath = Path.Combine(AppFilePath,"config.json");//配置文件,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\config.json 28 | public static readonly System.Text.UTF8Encoding UTF8EncodingNoBom = new System.Text.UTF8Encoding(false,true);//无BOM编码 29 | public static Class.ConfigJson AppConfigObject; 30 | public static Class.LanguageJson AppLanguageObject; 31 | public static System.Windows.Forms.NotifyIcon nicon = new System.Windows.Forms.NotifyIcon();//托盘图标 32 | public static Cursor[] AppCursor = new Cursor[2]; 33 | public static readonly Process AppProcess=Process.GetCurrentProcess(); 34 | 35 | protected override void OnStartup( StartupEventArgs e ) { 36 | String AppConfigJson = String.Empty; 37 | //环境检查 38 | if(!File.Exists(AppConfigFilePath)){//若配置文件不存在 39 | MessageBox.Show("配置文件不存在(Not found config.json file)","错误(Error)",MessageBoxButton.OK,MessageBoxImage.Error); 40 | Environment.Exit(0); 41 | }else{ 42 | AppConfigJson = File.ReadAllText( AppConfigFilePath,App.UTF8EncodingNoBom);//读取配置文件字符串 43 | if(!Class.LocalFunction.ValidateJSONBySchema(AppConfigJson,KcptunGUI.Properties.Resources.String_AppConfigJsonSchema)){//若配置文件无效 44 | if(MessageBox.Show("配置文件无效,是否重建配置文件?(Configure file is invalid,set up?)",App.AppName,MessageBoxButton.YesNo,MessageBoxImage.Question) == MessageBoxResult.Yes) { 45 | File.WriteAllText(AppConfigFilePath,KcptunGUI.Properties.Resources.String_AppConfigJsonDefault,UTF8EncodingNoBom);//写入默认配置 46 | MessageBox.Show("配置文件重建完成(Configure file is set up)",AppName,MessageBoxButton.OK,MessageBoxImage.Information); 47 | AppConfigJson = File.ReadAllText(AppConfigFilePath,UTF8EncodingNoBom);//重读配置文件字符串 48 | } else { Environment.Exit(0); } 49 | } 50 | AppConfigObject = JsonConvert.DeserializeObject(AppConfigJson);//加载配置文件 51 | } 52 | //if(!Directory.Exists(Class.AppAttributes.ResxPath)){ MessageBox.Show("Resx目录不存在(Not found Resx folder)","错误(Error)",MessageBoxButton.OK,MessageBoxImage.Error); Environment.Exit(0); }//若resx目录不存在 53 | AppLanguageObject = Class.LocalFunction.LoadLanguageObjectFromJSON(App.AppConfigObject.LCID); 54 | AppCursor[0]=new Cursor(Class.LocalFunction.BytesToStream(Resource.Byte.cur_normal));//默认鼠标样式 55 | // 56 | base.OnStartup( e ); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /KcptunGUI/Class/ConfigJson.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace KcptunGUI.Class { 5 | /// 6 | /// 配置文件实体类 7 | /// 8 | public class ConfigJson { 9 | /// 区域ID 10 | public Int32 LCID { get; set; } 11 | 12 | /// 是否自动关闭菜单 13 | public Boolean TabAutoHide { get; set; } 14 | 15 | /// 是否记住窗口位置 16 | public Boolean RememberWinLocation { get; set; } 17 | 18 | /// 窗口显示位置 19 | public Int32[] WinLocation { get; set; } 20 | 21 | /// 是否获取系统状态 22 | public Boolean FetchSystemStatus { get; set; } 23 | 24 | /// 服务器节点子类 25 | public class NodesItems { 26 | /// 主机名 27 | public String hostname { get; set; } 28 | /// IP 29 | public String ip { get; set; } 30 | /// 描述 31 | public String description { get; set; } 32 | /// 本地端口 33 | public Int32 localport { get; set; } 34 | /// 远程端口 35 | public Int32 remoteport { get; set; } 36 | /// 是否自动链接 37 | public Boolean autoconnect { get; set; } 38 | } 39 | /// 服务器节点 40 | public List Nodes { get; set; } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /KcptunGUI/Class/LanguageJson.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace KcptunGUI.Class { 5 | /// 语言配置文件实体类 6 | public class LanguageJson { 7 | /// 语言描述 8 | public String Language { get; set; } 9 | /// 语言标签 10 | public String LangTag { get; set; } 11 | /// LCID 12 | public Int32 LCID { get; set; } 13 | /// 14 | /// 文本列表 15 | /// 16 | public List Text { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /KcptunGUI/Class/LocalFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Newtonsoft.Json; 4 | using Newtonsoft.Json.Linq; 5 | using Newtonsoft.Json.Schema; 6 | using System.Diagnostics; 7 | using System.Runtime.InteropServices; 8 | using System.IO; 9 | using System.Net.NetworkInformation; 10 | 11 | namespace KcptunGUI.Class { 12 | class LocalFunction { 13 | #region 非托管方法 14 | [DllImport("user32.dll",CharSet = CharSet.Auto)] 15 | public static extern Boolean IsWindowVisible(IntPtr hWnd);//当前窗体是否显示 16 | #endregion 17 | 18 | #region 托管方法 19 | /// 清除空白字符 20 | /// 要处理的字符串 21 | /// false清理空格,true清理全部 22 | /// 已处理的字符串 23 | static public String TrimJSON(String _JSON,Boolean _All=false) { 24 | return _All ? System.Text.RegularExpressions.Regex.Replace(_JSON.Trim(),@"\s","") : _JSON.Trim(); 25 | } 26 | 27 | /// 字节组转内存流 28 | /// 字节组 29 | /// 内存流 30 | public static Stream BytesToStream(Byte[] _bytes) { 31 | return new MemoryStream(_bytes); 32 | } 33 | 34 | /// 内存流转字节组 35 | /// 内存流 36 | /// 字节组 37 | public static Byte[] StreamToBytes(Stream _stream) { 38 | Byte[] bytes = new Byte[_stream.Length]; 39 | _stream.Read(bytes,0,bytes.Length); 40 | _stream.Seek(0,SeekOrigin.Begin); 41 | return bytes; 42 | } 43 | 44 | /// 验证指定JSON合法性 45 | /// 待验证的JSON 46 | /// 验证器字符串 47 | /// 是否合法 48 | public static Boolean ValidateJSONBySchema( String _JSON , String _SchemaString ) { 49 | if( String.IsNullOrWhiteSpace( _JSON ) || String.IsNullOrWhiteSpace( _SchemaString ) || _JSON.IndexOf( "}{" , 0 ) > -1 || _SchemaString.IndexOf( "}{" , 0 ) > -1 ) { return false; } 50 | JSchema schema = JSchema.Parse( _SchemaString ); 51 | JObject jo = JObject.Parse( _JSON ); 52 | IList errors; 53 | Boolean v = jo.IsValid( schema , out errors ); 54 | if( errors.Count == 0 && v == true ) { 55 | return true; 56 | } else { 57 | foreach( var value in errors ) { Console.WriteLine( "验证失败: " + value ); } 58 | return false; 59 | } 60 | } 61 | 62 | /// 通过LCID来加载对应的语言文件 63 | /// LCID 64 | /// 已经反序列化的语言对象 65 | public static Class.LanguageJson LoadLanguageObjectFromJSON(Int32 _LCID) { 66 | switch(_LCID) { 67 | case 1033: 68 | return JsonConvert.DeserializeObject(KcptunGUI.Resource.字符串.String_Language_ENG);//英文 69 | case 2052: 70 | default: 71 | return JsonConvert.DeserializeObject(KcptunGUI.Resource.字符串.String_Language_CHS);//简体中文 72 | } 73 | } 74 | 75 | /// 根据控件Uid返回对应的全球化文本 76 | /// 控件的Uid属性 77 | /// 全球化文本 78 | public static String GetString(String _SenderUid) { 79 | UInt16 index = 0; 80 | if(String.IsNullOrWhiteSpace(_SenderUid)) { 81 | return App.AppLanguageObject.Text[0]; 82 | } else { 83 | UInt16.TryParse(_SenderUid,out index); 84 | return App.AppLanguageObject.Text[index]; 85 | } 86 | } 87 | 88 | /// 根据控件索引返回对应的全球化文本 89 | /// 手动指定的索引 90 | /// 全球化文本 91 | public static String GetString(UInt16 _Index) { 92 | return App.AppLanguageObject.Text[_Index]; 93 | } 94 | 95 | /// 将当前对象写入文件 96 | /// JSON对象 97 | /// 文件完整路径 98 | public static void SaveJsonToFile(Object _JSON,String _Path) { 99 | System.IO.File.WriteAllText( App.AppConfigFilePath , JsonConvert.SerializeObject( _JSON ) , App.UTF8EncodingNoBom ); 100 | } 101 | 102 | /// 保存配置文件 103 | public static void SaveAppConfig(){ 104 | Class.LocalFunction.SaveJsonToFile(App.AppConfigObject , App.AppConfigFilePath); 105 | } 106 | 107 | /// 获取活动网卡实例的设备描述 108 | /// 设备描述 109 | public static String GetNetworkInterfaceInstance() { 110 | NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces(); 111 | String InstanceName = ""; 112 | foreach(NetworkInterface item in ni) { 113 | if(item.IsReceiveOnly != true 114 | && item.NetworkInterfaceType != NetworkInterfaceType.Loopback 115 | && item.NetworkInterfaceType != NetworkInterfaceType.Tunnel 116 | && item.NetworkInterfaceType != NetworkInterfaceType.Unknown 117 | && item.OperationalStatus == OperationalStatus.Up 118 | && item.GetPhysicalAddress() != PhysicalAddress.None 119 | ) { 120 | InstanceName = item.Description; 121 | } 122 | } 123 | return InstanceName; 124 | } 125 | 126 | /// 字节单位换算 127 | /// 字节计数 128 | /// out 换算后的数据 129 | /// out 换算后的数据的单位 130 | public static void BytesCountUnitScaler_Single(Single _BytesCount,out Single _Value,out String _Unit) { 131 | if(1024<=_BytesCount && _BytesCount<1048576) {//1024² 132 | _Value=_BytesCount/1024;//kbyte 133 | _Unit="KB"; 134 | } else if(1048576<=_BytesCount && _BytesCount<1073741824) {//1024³ 135 | _Value=_BytesCount/1048576;//mbyte 136 | _Unit="MB"; 137 | } else if(1073741824<=_BytesCount && _BytesCount<1099511627776) {//1024⁴ 138 | _Value=_BytesCount/1073741824;//gbyte 139 | _Unit="GB"; 140 | }else { 141 | _Value=_BytesCount;//byte 142 | _Unit="B"; 143 | } 144 | } 145 | #endregion 146 | 147 | #region 处理器状态 148 | /// 获得系统处理器性能计数器 149 | /// 处理器总负载 150 | /// KcptunGUI的处理器占用 151 | public static void GetPerformanceCounter_Processor(out PerformanceCounter _pc1,out PerformanceCounter _pc2) { 152 | _pc1=new PerformanceCounter("Processor","% Processor Time","_Total"); 153 | _pc2=new PerformanceCounter("Process","% Processor Time",App.AppProcess.ProcessName); 154 | } 155 | 156 | /// 获取处理器状态 157 | /// 计数器 158 | /// 已处理的数据 159 | public static String[] GetStatus_Processor(PerformanceCounter[] _pcs) { 160 | String[] Status = { 161 | String.Format("{0:N0}%",_pcs[0].NextValue()), 162 | String.Format("{0:N2}%",_pcs[1].NextValue()) 163 | }; 164 | return Status; 165 | } 166 | #endregion 167 | 168 | #region 内存状态 169 | /// 获取系统内存计数器 170 | /// out 系统内存总量计数器 171 | /// out 系统可用内存计数器 172 | public static void GetSystemMemoryPerformanceCounter(out PerformanceCounter _pc1,out PerformanceCounter _pc2) { 173 | _pc1=new PerformanceCounter(readOnly:true,instanceName:String.Empty,categoryName:"Memory",counterName: "Commit Limit");//计数器_系统内存总字节 174 | _pc2=new PerformanceCounter(readOnly:true,instanceName:String.Empty,categoryName:"Memory",counterName:"Available Bytes");//计数器_系统当前可用内存字节数 175 | //pcs[2]=new PerformanceCounter(readOnly:true,instanceName:String.Empty,categoryName:"Memory",counterName:"Modified Page List Bytes");//计数器_系统当前"已修改"内存字节数 176 | } 177 | 178 | /// 根据进程名获取内存占用计数器 179 | /// 进程名 180 | /// 进程专用工作集计数器 181 | /// 专用工作集计数器 182 | public static void GetApplicationWorkingSetPrivateMemoryPerformanceCounter(String _ProcessName,out PerformanceCounter _pc) { 183 | _pc=new PerformanceCounter(readOnly:true,instanceName:_ProcessName,categoryName:"Process",counterName: "Working Set - Private"); 184 | } 185 | 186 | /// 获取内存状态 187 | /// 计数器 188 | /// 已转化的数据 189 | public static String[] GetStatus_Memory(PerformanceCounter[] pcs){ 190 | //当前可用内存 191 | Single AvailableMemory_Bytes = pcs[1].NextValue(); 192 | Single AvailableMemory_HumanBytes; 193 | String AvailableMemory_Unit; 194 | BytesCountUnitScaler_Single(AvailableMemory_Bytes,out AvailableMemory_HumanBytes,out AvailableMemory_Unit); 195 | //系统总内存 196 | Single TotalMemory_Bytes = pcs[0].NextValue(); 197 | Single TotalMemory_HumanBytes; 198 | String TotalMemory_Unit; 199 | BytesCountUnitScaler_Single(TotalMemory_Bytes,out TotalMemory_HumanBytes,out TotalMemory_Unit); 200 | //当前占用内存 201 | Single UsedMemory_Bytes = TotalMemory_Bytes-AvailableMemory_Bytes; 202 | Single UsedMemory_HumanBytes; 203 | String UsedMemory_Unit; 204 | BytesCountUnitScaler_Single(UsedMemory_Bytes,out UsedMemory_HumanBytes,out UsedMemory_Unit); 205 | //内存负载 206 | Single SystemOccupied = UsedMemory_Bytes/TotalMemory_Bytes;//0.05=5% 207 | //本应用程序虚拟内存 208 | Single AppVirtualMemory_Bytes = Process.GetCurrentProcess().VirtualMemorySize64; 209 | Single AppVirtualMemory_HumanBytes; 210 | String AppVirtualMemory_Unit; 211 | BytesCountUnitScaler_Single(AppVirtualMemory_Bytes,out AppVirtualMemory_HumanBytes,out AppVirtualMemory_Unit); 212 | //本应用程序独享内存 213 | Single AppPrivateMemory_Bytes = Process.GetCurrentProcess().PrivateMemorySize64; 214 | Single AppPrivateMemory_HumanBytes; 215 | String AppPrivateMemory_Unit; 216 | BytesCountUnitScaler_Single(AppPrivateMemory_Bytes,out AppPrivateMemory_HumanBytes,out AppPrivateMemory_Unit); 217 | //本应用程序实际内存 218 | Single AppRealMemory_Bytes = pcs[2].NextValue(); 219 | Single AppRealMemory_HumanBytes; 220 | String AppRealMemory_Unit; 221 | BytesCountUnitScaler_Single(AppRealMemory_Bytes,out AppRealMemory_HumanBytes,out AppRealMemory_Unit); 222 | //内存状态 223 | String[] Status = { 224 | String.Format("{0:N1}{1} / {2:N1}{3} {4:N1}%",UsedMemory_HumanBytes,UsedMemory_Unit,TotalMemory_HumanBytes,TotalMemory_Unit,SystemOccupied*100),//内存负载: 3.2GB/31.9GB 10.1% 225 | String.Format("{0:N1}{1}",AppVirtualMemory_HumanBytes,AppVirtualMemory_Unit),//应用程序分配的虚拟内存 226 | String.Format("{0:N1}{1}",AppPrivateMemory_HumanBytes,AppPrivateMemory_Unit),//应用程序分配的物理内存 227 | String.Format("{0:N1}{1}",AppRealMemory_HumanBytes,AppRealMemory_Unit)//应用程序分配的专用工作集 228 | }; 229 | return Status; 230 | } 231 | #endregion 232 | 233 | /// 获取网络计数器 234 | /// 出网字节计数器 235 | /// 入网字节计数器 236 | public static void GetPerformanceCounter_Network(out PerformanceCounter _pc1,out PerformanceCounter _pc2) { 237 | NetworkInterface ni = null; 238 | NetworkInterface[] nis = NetworkInterface.GetAllNetworkInterfaces(); 239 | foreach(NetworkInterface item in nis) {//遍历出活动网卡,一般来说单网卡不会有问题 240 | if(item.IsReceiveOnly != true 241 | && item.NetworkInterfaceType != NetworkInterfaceType.Loopback 242 | && item.NetworkInterfaceType != NetworkInterfaceType.Tunnel 243 | && item.NetworkInterfaceType != NetworkInterfaceType.Unknown 244 | && item.OperationalStatus == OperationalStatus.Up 245 | && item.GetPhysicalAddress() != PhysicalAddress.None 246 | ) {ni = item;} 247 | } 248 | /* fix issue #1 by github@Lensual */ 249 | _pc1=(ni.Description.IndexOf("Intel")>-1) ? new PerformanceCounter("Network Interface","Bytes Sent/sec",ni.Description.Replace('(','[').Replace(')',']')) : new PerformanceCounter("Network Interface","Bytes Sent/sec",ni.Description); 250 | _pc2=(ni.Description.IndexOf("Intel")>-1) ? new PerformanceCounter("Network Interface","Bytes Received/sec",ni.Description.Replace('(','[').Replace(')',']')) : new PerformanceCounter("Network Interface","Bytes Received/sec",ni.Description); 251 | } 252 | 253 | /// 获取网络状态 254 | /// 计数器 255 | /// 已处理的数据 256 | public static String[] GetStatus_Network(PerformanceCounter[] _pcs){ 257 | //1s内出网字节 258 | Single Sent_Bytes = _pcs[0].NextValue(); 259 | Single Sent_HumanBytes; 260 | String Sent_Unit; 261 | BytesCountUnitScaler_Single(Sent_Bytes,out Sent_HumanBytes,out Sent_Unit); 262 | //1s内入网字节 263 | Single Received_Bytes = _pcs[1].NextValue(); 264 | Single Received_HumanBytes; 265 | String Received_Unit; 266 | BytesCountUnitScaler_Single(Received_Bytes,out Received_HumanBytes,out Received_Unit); 267 | String[] Status = { 268 | String.Format("{0:N2} {1}/s",Sent_HumanBytes,Sent_Unit), 269 | String.Format("{0:N2} {1}/s",Received_HumanBytes,Received_Unit) 270 | }; 271 | return Status; 272 | } 273 | // 274 | } 275 | } -------------------------------------------------------------------------------- /KcptunGUI/KcptunGUI.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522} 8 | WinExe 9 | Properties 10 | KcptunGUI 11 | KcptunGUI 12 | v4.5 13 | 512 14 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15 | 4 16 | 17 | false 18 | 19 | 20 | 发布\ 21 | true 22 | Disk 23 | false 24 | Foreground 25 | 7 26 | Days 27 | false 28 | false 29 | true 30 | 0 31 | 1.0.0.0 32 | false 33 | true 34 | 35 | 36 | AnyCPU 37 | true 38 | full 39 | false 40 | bin\Debug\Any\ 41 | DEBUG;TRACE 42 | prompt 43 | 4 44 | NativeRecommendedRules.ruleset 45 | true 46 | true 47 | false 48 | true 49 | 50 | 51 | AnyCPU 52 | none 53 | true 54 | bin\Release\Any\ 55 | TRACE 56 | prompt 57 | 4 58 | false 59 | Auto 60 | true 61 | 62 | 63 | 64 | 65 | KcptunGUI.App 66 | 67 | 68 | app.ico 69 | 70 | 71 | 72 | true 73 | bin\Debug\x64\ 74 | DEBUG;TRACE 75 | true 76 | full 77 | x64 78 | prompt 79 | NativeRecommendedRules.ruleset 80 | false 81 | 82 | 83 | bin\Release\x64\ 84 | true 85 | pdbonly 86 | x64 87 | prompt 88 | MinimumRecommendedRules.ruleset 89 | false 90 | 91 | 92 | true 93 | bin\Debug\x86\ 94 | DEBUG;TRACE 95 | true 96 | full 97 | x86 98 | prompt 99 | NativeRecommendedRules.ruleset 100 | false 101 | false 102 | 103 | 104 | bin\Release\x86\ 105 | true 106 | pdbonly 107 | x86 108 | prompt 109 | MinimumRecommendedRules.ruleset 110 | false 111 | TRACE 112 | 113 | 114 | false 115 | 116 | 117 | 118 | 119 | 120 | 121 | false 122 | 123 | 124 | 125 | 126 | app.manifest 127 | 128 | 129 | 130 | ..\packages\MaterialDesignColors.1.1.3\lib\net45\MaterialDesignColors.dll 131 | True 132 | 133 | 134 | ..\packages\MaterialDesignThemes.2.2.1.750\lib\net45\MaterialDesignThemes.Wpf.dll 135 | True 136 | 137 | 138 | ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll 139 | True 140 | 141 | 142 | ..\packages\Newtonsoft.Json.Schema.2.0.8\lib\net45\Newtonsoft.Json.Schema.dll 143 | True 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 4.0 153 | 154 | 155 | 156 | 157 | 158 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.dll 159 | True 160 | 161 | 162 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll 163 | True 164 | 165 | 166 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll 167 | True 168 | 169 | 170 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll 171 | True 172 | 173 | 174 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.DataGrid.dll 175 | True 176 | 177 | 178 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.Toolkit.dll 179 | True 180 | 181 | 182 | 183 | 184 | MSBuild:Compile 185 | Designer 186 | 187 | 188 | 189 | 190 | 191 | MainWindow.xaml 192 | 193 | 194 | App.xaml 195 | Code 196 | 197 | 198 | About.xaml 199 | 200 | 201 | ClientMode.xaml 202 | 203 | 204 | Configure.xaml 205 | 206 | 207 | ServerMode.xaml 208 | 209 | 210 | Status.xaml 211 | 212 | 213 | MSBuild:Compile 214 | Designer 215 | 216 | 217 | Designer 218 | MSBuild:Compile 219 | 220 | 221 | Designer 222 | MSBuild:Compile 223 | 224 | 225 | Designer 226 | MSBuild:Compile 227 | 228 | 229 | Designer 230 | MSBuild:Compile 231 | 232 | 233 | Designer 234 | MSBuild:Compile 235 | 236 | 237 | 238 | 239 | Code 240 | 241 | 242 | True 243 | True 244 | Resources.resx 245 | 246 | 247 | True 248 | Settings.settings 249 | True 250 | 251 | 252 | ResXFileCodeGenerator 253 | Resources.Designer.cs 254 | Designer 255 | 256 | 257 | 258 | 259 | 260 | SettingsSingleFileGenerator 261 | Settings.Designer.cs 262 | 263 | 264 | 265 | Always 266 | 267 | 268 | 269 | 270 | False 271 | .NET Framework 3.5 SP1 Client Profile 272 | false 273 | 274 | 275 | False 276 | .NET Framework 3.5 SP1 277 | true 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | {31173083-171c-4488-8ca2-c01d3651e15e} 289 | KcptunGUI.Resource 290 | 291 | 292 | 293 | 294 | 295 | 296 | 303 | -------------------------------------------------------------------------------- /KcptunGUI/MainWindow.xaml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |