├── .gitignore
├── App.config
├── FodyWeavers.xml
├── FodyWeavers.xsd
├── Program.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
├── README.md
├── Resources
├── banner.png
└── icon.ico
├── app.manifest
├── extra
├── banner.ufo
└── icon.ufo
├── packages.config
├── rdp-portal.csproj
├── rdp-portal.sln
├── rdp-portal.sln.DotSettings.user
└── src
├── About.Designer.cs
├── About.cs
├── About.resx
├── Config.cs
├── MainForm.Designer.cs
├── MainForm.cs
├── MainForm.resx
├── Mstscpw.cs
├── Profile.cs
├── RdpFile.cs
└── StringUtil.cs
/.gitignore:
--------------------------------------------------------------------------------
1 | bin/
2 | obj/
3 | /packages/
4 | riderModule.iml
5 | /_ReSharper.Caches/
--------------------------------------------------------------------------------
/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/FodyWeavers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/FodyWeavers.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
13 |
14 |
15 |
16 |
17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
18 |
19 |
20 |
21 |
22 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
23 |
24 |
25 |
26 |
27 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
28 |
29 |
30 |
31 |
32 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks.
33 |
34 |
35 |
36 |
37 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks.
38 |
39 |
40 |
41 |
42 | The order of preloaded assemblies, delimited with line breaks.
43 |
44 |
45 |
46 |
47 |
48 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.
49 |
50 |
51 |
52 |
53 | Controls if .pdbs for reference assemblies are also embedded.
54 |
55 |
56 |
57 |
58 | Controls if runtime assemblies are also embedded.
59 |
60 |
61 |
62 |
63 | Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.
64 |
65 |
66 |
67 |
68 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.
69 |
70 |
71 |
72 |
73 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.
74 |
75 |
76 |
77 |
78 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.
79 |
80 |
81 |
82 |
83 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.
84 |
85 |
86 |
87 |
88 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
89 |
90 |
91 |
92 |
93 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.
94 |
95 |
96 |
97 |
98 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
99 |
100 |
101 |
102 |
103 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.
104 |
105 |
106 |
107 |
108 | A list of unmanaged 32 bit assembly names to include, delimited with |.
109 |
110 |
111 |
112 |
113 | A list of unmanaged 64 bit assembly names to include, delimited with |.
114 |
115 |
116 |
117 |
118 | The order of preloaded assemblies, delimited with |.
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
127 |
128 |
129 |
130 |
131 | A comma-separated list of error codes that can be safely ignored in assembly verification.
132 |
133 |
134 |
135 |
136 | 'false' to turn off automatic generation of the XML Schema file.
137 |
138 |
139 |
140 |
141 |
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace RDP_Portal {
8 | static class Program {
9 | ///
10 | /// The main entry point for the application.
11 | ///
12 | [STAThread]
13 | static void Main() {
14 | Application.EnableVisualStyles();
15 | Application.SetCompatibleTextRenderingDefault(false);
16 | Application.Run(new MainForm());
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("RDP Portal")]
9 | [assembly: AssemblyDescription("A slightly smarter and simple Remote Desktop manager for Windows.")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Louis Lam")]
12 | [assembly: AssemblyProduct("RDP Protal")]
13 | [assembly: AssemblyCopyright("Copyright © 2022 Louis Lam")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("6C4D655E-4C37-4E07-87E0-A4EB9DCAA651")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.4.0")]
36 | [assembly: AssemblyFileVersion("1.0.4.0")]
37 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | //
5 | // Changes to this file may cause incorrect behavior and will be lost if
6 | // the code is regenerated.
7 | //
8 | //------------------------------------------------------------------------------
9 |
10 | namespace rdp_portal.Properties {
11 | using System;
12 |
13 |
14 | ///
15 | /// A strongly-typed resource class, for looking up localized strings, etc.
16 | ///
17 | // This class was auto-generated by the StronglyTypedResourceBuilder
18 | // class via a tool like ResGen or Visual Studio.
19 | // To add or remove a member, edit your .ResX file then rerun ResGen
20 | // with the /str option, or rebuild your VS project.
21 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
22 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
23 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
24 | internal class Resources {
25 |
26 | private static global::System.Resources.ResourceManager resourceMan;
27 |
28 | private static global::System.Globalization.CultureInfo resourceCulture;
29 |
30 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
31 | internal Resources() {
32 | }
33 |
34 | ///
35 | /// Returns the cached ResourceManager instance used by this class.
36 | ///
37 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
38 | internal static global::System.Resources.ResourceManager ResourceManager {
39 | get {
40 | if (object.ReferenceEquals(resourceMan, null)) {
41 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RDP_Portal.Properties.Resources", typeof(Resources).Assembly);
42 | resourceMan = temp;
43 | }
44 | return resourceMan;
45 | }
46 | }
47 |
48 | ///
49 | /// Overrides the current thread's CurrentUICulture property for all
50 | /// resource lookups using this strongly typed resource class.
51 | ///
52 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
53 | internal static global::System.Globalization.CultureInfo Culture {
54 | get {
55 | return resourceCulture;
56 | }
57 | set {
58 | resourceCulture = value;
59 | }
60 | }
61 |
62 | ///
63 | /// Looks up a localized resource of type System.Drawing.Bitmap.
64 | ///
65 | internal static System.Drawing.Bitmap banner {
66 | get {
67 | object obj = ResourceManager.GetObject("banner", resourceCulture);
68 | return ((System.Drawing.Bitmap)(obj));
69 | }
70 | }
71 |
72 | ///
73 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
74 | ///
75 | internal static System.Drawing.Icon icon {
76 | get {
77 | object obj = ResourceManager.GetObject("icon", resourceCulture);
78 | return ((System.Drawing.Icon)(obj));
79 | }
80 | }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | text/microsoft-resx
51 |
52 |
53 | 2.0
54 |
55 |
56 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
57 |
58 |
59 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
60 |
61 |
62 |
63 | ..\Resources\banner.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
64 |
65 |
66 | ..\Resources\icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
67 |
68 |
69 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace rdp_portal.Properties {
12 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
13 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute(
14 | "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
15 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
16 | private static Settings defaultInstance =
17 | ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
18 |
19 | public static Settings Default {
20 | get { return defaultInstance; }
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RDP Portal
2 |
3 | A slightly smarter and simple Remote Desktop manager for Windows.
4 |
5 |
6 |
7 | ## Why RDP Portal?
8 |
9 | By default, Remote Desktop Connection (mstsc.exe) is not possible to backup the saved passwords and the connection management is not good.
10 |
11 | With RDP Portal, it is possible to save password and use it on any other Windows PCs.
12 |
13 | ## ⭐ Features
14 | - Portable
15 | - Backup-able Saved Passwords
16 | - Same user experience while connected to your remote desktop.
17 | - The workflow is similar to WinSCP or HeidiSQL
18 |
19 | ## Download
20 |
21 | From GitHub:
22 | https://github.com/louislam/rdp-portal/releases/latest
23 |
24 | ## FAQ
25 |
26 | 1. How to Backup?
27 |
28 | > RDP Portal is a portable application, you just need to backup the folder.
29 |
30 | 2. How to config more settings like screen resolution?
31 |
32 | > You can click `Options` in RDP Portal, it will open the original Remote Desktop Connection application. You can set anything there, but you have to click `Save` at the end. Don't click `Connect`.
33 |
34 |
35 |
36 | ## Credit
37 |
38 | - Computer icons created by Freepik - Flaticon
39 |
40 |
41 | ## Development
42 |
43 | - IDE: Rider
44 | - .NET Framework 4.7.2
45 | - Windows Form
46 |
--------------------------------------------------------------------------------
/Resources/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/Resources/banner.png
--------------------------------------------------------------------------------
/Resources/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/Resources/icon.ico
--------------------------------------------------------------------------------
/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | true
6 | PerMonitorV2
7 |
8 |
9 |
10 |
11 |
12 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/extra/banner.ufo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/extra/banner.ufo
--------------------------------------------------------------------------------
/extra/icon.ufo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/extra/icon.ufo
--------------------------------------------------------------------------------
/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/rdp-portal.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Debug
7 | AnyCPU
8 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}
9 | WinExe
10 | RDP_Portal
11 | RDP-Portal
12 | v4.7.2
13 | 512
14 | true
15 | true
16 | 8
17 | enable
18 | Resources\icon.ico
19 | true
20 | ..\visual-studio-sign-key.snk
21 |
22 |
23 | AnyCPU
24 | true
25 | full
26 | false
27 | bin\Debug\
28 | DEBUG;TRACE
29 | prompt
30 | 4
31 |
32 |
33 | AnyCPU
34 | pdbonly
35 | true
36 | bin\Release\
37 | TRACE
38 | prompt
39 | 4
40 |
41 |
42 | app.manifest
43 |
44 |
45 |
46 | packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll
47 |
48 |
49 | packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
50 |
51 |
52 |
53 | packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll
54 |
55 |
56 |
57 | packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll
58 |
59 |
60 | packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
61 |
62 |
63 |
64 | packages\System.Console.4.3.1\lib\net46\System.Console.dll
65 |
66 |
67 |
68 | packages\System.Diagnostics.DiagnosticSource.7.0.0\lib\net462\System.Diagnostics.DiagnosticSource.dll
69 |
70 |
71 | packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll
72 |
73 |
74 | packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
75 |
76 |
77 | packages\System.IO.4.3.0\lib\net462\System.IO.dll
78 |
79 |
80 | packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
81 |
82 |
83 |
84 | packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
85 |
86 |
87 | packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
88 |
89 |
90 | packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
91 |
92 |
93 | packages\System.Linq.4.3.0\lib\net463\System.Linq.dll
94 |
95 |
96 | packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll
97 |
98 |
99 | packages\System.Memory.4.5.5\lib\net461\System.Memory.dll
100 |
101 |
102 | packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll
103 |
104 |
105 | packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
106 |
107 |
108 |
109 | packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
110 |
111 |
112 | packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
113 |
114 |
115 | packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll
116 |
117 |
118 | packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll
119 |
120 |
121 | packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll
122 |
123 |
124 | packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll
125 |
126 |
127 | packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
128 |
129 |
130 | packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll
131 |
132 |
133 | packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
134 |
135 |
136 | packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
137 |
138 |
139 | packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll
140 |
141 |
142 | packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 | packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll
154 |
155 |
156 |
157 |
158 |
159 |
160 | Form
161 |
162 |
163 | About.cs
164 |
165 |
166 |
167 | Form
168 |
169 |
170 | MainForm.cs
171 |
172 |
173 |
174 |
175 |
176 |
177 | ResXFileCodeGenerator
178 | Resources.Designer.cs
179 | Designer
180 |
181 |
182 | True
183 | Resources.resx
184 |
185 |
186 | About.cs
187 |
188 |
189 | MainForm.cs
190 |
191 |
192 | visual-studio-sign-key.snk
193 |
194 |
195 |
196 | SettingsSingleFileGenerator
197 | Settings.Designer.cs
198 |
199 |
200 | True
201 | Settings.settings
202 | True
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}.
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
--------------------------------------------------------------------------------
/rdp-portal.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rdp-portal", "rdp-portal.csproj", "{6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}"
4 | EndProject
5 | Global
6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
7 | Debug|Any CPU = Debug|Any CPU
8 | Release|Any CPU = Release|Any CPU
9 | EndGlobalSection
10 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
11 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
12 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Debug|Any CPU.Build.0 = Debug|Any CPU
13 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Release|Any CPU.ActiveCfg = Release|Any CPU
14 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Release|Any CPU.Build.0 = Release|Any CPU
15 | EndGlobalSection
16 | EndGlobal
17 |
--------------------------------------------------------------------------------
/rdp-portal.sln.DotSettings.user:
--------------------------------------------------------------------------------
1 |
2 | False
3 | True
4 | True
5 | False
--------------------------------------------------------------------------------
/src/About.Designer.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace RDP_Portal {
4 | partial class About {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing) {
15 | if (disposing && (components != null)) {
16 | components.Dispose();
17 | }
18 |
19 | base.Dispose(disposing);
20 | }
21 |
22 | #region Windows Form Designer generated code
23 |
24 | ///
25 | /// Required method for Designer support - do not modify
26 | /// the contents of this method with the code editor.
27 | ///
28 | private void InitializeComponent() {
29 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About));
30 | this.linkLabel1 = new System.Windows.Forms.LinkLabel();
31 | this.labelName = new System.Windows.Forms.Label();
32 | this.label2 = new System.Windows.Forms.Label();
33 | this.buttonOK = new System.Windows.Forms.Button();
34 | this.SuspendLayout();
35 | //
36 | // linkLabel1
37 | //
38 | this.linkLabel1.Location = new System.Drawing.Point(12, 67);
39 | this.linkLabel1.Name = "linkLabel1";
40 | this.linkLabel1.Size = new System.Drawing.Size(503, 23);
41 | this.linkLabel1.TabIndex = 0;
42 | this.linkLabel1.TabStop = true;
43 | this.linkLabel1.Text = "https://github.com/louislam/rdp-portal";
44 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
45 | //
46 | // labelName
47 | //
48 | this.labelName.Location = new System.Drawing.Point(12, 21);
49 | this.labelName.Name = "labelName";
50 | this.labelName.Size = new System.Drawing.Size(301, 23);
51 | this.labelName.TabIndex = 1;
52 | this.labelName.Text = "RDP Portal";
53 | //
54 | // label2
55 | //
56 | this.label2.Location = new System.Drawing.Point(12, 44);
57 | this.label2.Name = "label2";
58 | this.label2.Size = new System.Drawing.Size(301, 23);
59 | this.label2.TabIndex = 2;
60 | this.label2.Text = "By Louis Lam";
61 | //
62 | // buttonOK
63 | //
64 | this.buttonOK.Location = new System.Drawing.Point(238, 110);
65 | this.buttonOK.Name = "buttonOK";
66 | this.buttonOK.Size = new System.Drawing.Size(75, 23);
67 | this.buttonOK.TabIndex = 3;
68 | this.buttonOK.Text = "OK";
69 | this.buttonOK.UseVisualStyleBackColor = true;
70 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
71 | //
72 | // About
73 | //
74 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
75 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
76 | this.ClientSize = new System.Drawing.Size(325, 145);
77 | this.Controls.Add(this.buttonOK);
78 | this.Controls.Add(this.label2);
79 | this.Controls.Add(this.labelName);
80 | this.Controls.Add(this.linkLabel1);
81 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
82 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
83 | this.MaximizeBox = false;
84 | this.MinimizeBox = false;
85 | this.Name = "About";
86 | this.ShowInTaskbar = false;
87 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
88 | this.Text = "About";
89 | this.Load += new System.EventHandler(this.About_Load);
90 | this.ResumeLayout(false);
91 | }
92 |
93 | private System.Windows.Forms.LinkLabel linkLabel1;
94 | private System.Windows.Forms.Label labelName;
95 | private System.Windows.Forms.Label label2;
96 | private System.Windows.Forms.Button buttonOK;
97 |
98 | #endregion
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/src/About.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Windows.Forms;
4 |
5 | namespace RDP_Portal {
6 | public partial class About : Form {
7 | public About() {
8 | InitializeComponent();
9 | }
10 |
11 | private void About_Load(object sender, EventArgs e) {
12 |
13 | Location = new Point(Owner.Location.X + Owner.Width / 2 - ClientSize.Width / 2,
14 | Owner.Location.Y + Owner.Height / 2 - ClientSize.Height / 2);
15 |
16 | // https://stackoverflow.com/questions/909555/how-can-i-get-the-assembly-file-version
17 | System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
18 | System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
19 | string version = fvi.FileVersion;
20 |
21 | labelName.Text = "RDP Portal v" + version;
22 | }
23 |
24 | private void buttonOK_Click(object sender, EventArgs e) {
25 | this.Close();
26 | }
27 |
28 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
29 | System.Diagnostics.Process.Start(((LinkLabel)sender).Text);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/Config.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.IO;
5 | using Newtonsoft.Json;
6 |
7 | namespace RDP_Portal {
8 | public class Config {
9 |
10 | private static Config? _instance;
11 | public static string filename = "config.json";
12 | public static string rdpDir = "rdp-files";
13 |
14 | public static Config GetConfig() {
15 | if (!File.Exists(filename)) {
16 | File.AppendAllText(filename, "{}");
17 | }
18 |
19 | if (!Directory.Exists(rdpDir)) {
20 | Directory.CreateDirectory(rdpDir);
21 | }
22 |
23 | var json = File.ReadAllText(filename);
24 |
25 | _instance = JsonConvert.DeserializeObject(json);
26 |
27 | if (_instance == null) {
28 | throw new Exception("Cannot read config.json");
29 | }
30 |
31 | if (_instance.Profiles == null) {
32 | _instance.Profiles = new BindingList();
33 | _instance.Save();
34 | }
35 |
36 | return _instance;
37 | }
38 |
39 | public BindingList Profiles { get; set; }
40 |
41 | public bool KeepOpening { get; set; } = true;
42 |
43 | public void Save() {
44 | var json = JsonConvert.SerializeObject(this, Formatting.Indented);
45 | File.WriteAllText(filename, json);
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/MainForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace RDP_Portal {
2 | partial class MainForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 |
17 | base.Dispose(disposing);
18 | }
19 |
20 | #region Windows Form Designer generated code
21 |
22 | ///
23 | /// Required method for Designer support - do not modify
24 | /// the contents of this method with the code editor.
25 | ///
26 | private void InitializeComponent() {
27 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
28 | this.checkBoxKeepOpening = new System.Windows.Forms.CheckBox();
29 | this.buttonAbout = new System.Windows.Forms.Button();
30 | this.buttonConnect = new System.Windows.Forms.Button();
31 | this.textBoxComputer = new System.Windows.Forms.TextBox();
32 | this.label1 = new System.Windows.Forms.Label();
33 | this.label2 = new System.Windows.Forms.Label();
34 | this.label3 = new System.Windows.Forms.Label();
35 | this.label4 = new System.Windows.Forms.Label();
36 | this.buttonNew = new System.Windows.Forms.Button();
37 | this.textBoxUsername = new System.Windows.Forms.TextBox();
38 | this.textBoxPassword = new System.Windows.Forms.TextBox();
39 | this.textBoxDomain = new System.Windows.Forms.TextBox();
40 | this.groupBox1 = new System.Windows.Forms.GroupBox();
41 | this.buttonSave = new System.Windows.Forms.Button();
42 | this.buttonDelete = new System.Windows.Forms.Button();
43 | this.buttonOptions = new System.Windows.Forms.Button();
44 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
45 | this.buttonCancel = new System.Windows.Forms.Button();
46 | this.buttonEdit = new System.Windows.Forms.Button();
47 | this.textBoxName = new System.Windows.Forms.TextBox();
48 | this.listBox = new System.Windows.Forms.ListBox();
49 | this.groupBox1.SuspendLayout();
50 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
51 | this.SuspendLayout();
52 | //
53 | // checkBoxKeepOpening
54 | //
55 | this.checkBoxKeepOpening.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
56 | this.checkBoxKeepOpening.Location = new System.Drawing.Point(13, 432);
57 | this.checkBoxKeepOpening.Margin = new System.Windows.Forms.Padding(4);
58 | this.checkBoxKeepOpening.Name = "checkBoxKeepOpening";
59 | this.checkBoxKeepOpening.Size = new System.Drawing.Size(367, 30);
60 | this.checkBoxKeepOpening.TabIndex = 1;
61 | this.checkBoxKeepOpening.Text = "Keep opening RDP Portal";
62 | this.checkBoxKeepOpening.UseVisualStyleBackColor = true;
63 | this.checkBoxKeepOpening.CheckedChanged += new System.EventHandler(this.checkBoxKeepOpening_CheckedChanged);
64 | //
65 | // buttonAbout
66 | //
67 | this.buttonAbout.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
68 | this.buttonAbout.Location = new System.Drawing.Point(487, 432);
69 | this.buttonAbout.Margin = new System.Windows.Forms.Padding(4);
70 | this.buttonAbout.Name = "buttonAbout";
71 | this.buttonAbout.Size = new System.Drawing.Size(100, 28);
72 | this.buttonAbout.TabIndex = 2;
73 | this.buttonAbout.Text = "About";
74 | this.buttonAbout.UseVisualStyleBackColor = true;
75 | this.buttonAbout.Click += new System.EventHandler(this.buttonAbout_Click);
76 | //
77 | // buttonConnect
78 | //
79 | this.buttonConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
80 | this.buttonConnect.Location = new System.Drawing.Point(358, 432);
81 | this.buttonConnect.Margin = new System.Windows.Forms.Padding(4);
82 | this.buttonConnect.Name = "buttonConnect";
83 | this.buttonConnect.Size = new System.Drawing.Size(121, 28);
84 | this.buttonConnect.TabIndex = 3;
85 | this.buttonConnect.Text = "Connect";
86 | this.buttonConnect.UseVisualStyleBackColor = true;
87 | this.buttonConnect.Click += new System.EventHandler(this.buttonConnect_Click);
88 | //
89 | // textBoxComputer
90 | //
91 | this.textBoxComputer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
92 | this.textBoxComputer.Location = new System.Drawing.Point(123, 32);
93 | this.textBoxComputer.Margin = new System.Windows.Forms.Padding(4);
94 | this.textBoxComputer.Name = "textBoxComputer";
95 | this.textBoxComputer.Size = new System.Drawing.Size(209, 22);
96 | this.textBoxComputer.TabIndex = 4;
97 | //
98 | // label1
99 | //
100 | this.label1.Location = new System.Drawing.Point(8, 36);
101 | this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
102 | this.label1.Name = "label1";
103 | this.label1.Size = new System.Drawing.Size(107, 21);
104 | this.label1.TabIndex = 5;
105 | this.label1.Text = "Computer:";
106 | //
107 | // label2
108 | //
109 | this.label2.Location = new System.Drawing.Point(8, 73);
110 | this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
111 | this.label2.Name = "label2";
112 | this.label2.Size = new System.Drawing.Size(108, 23);
113 | this.label2.TabIndex = 6;
114 | this.label2.Text = "User name:";
115 | //
116 | // label3
117 | //
118 | this.label3.Location = new System.Drawing.Point(8, 110);
119 | this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
120 | this.label3.Name = "label3";
121 | this.label3.Size = new System.Drawing.Size(108, 23);
122 | this.label3.TabIndex = 7;
123 | this.label3.Text = "Password:";
124 | //
125 | // label4
126 | //
127 | this.label4.Location = new System.Drawing.Point(8, 146);
128 | this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
129 | this.label4.Name = "label4";
130 | this.label4.Size = new System.Drawing.Size(108, 23);
131 | this.label4.TabIndex = 8;
132 | this.label4.Text = "Domain:";
133 | //
134 | // buttonNew
135 | //
136 | this.buttonNew.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
137 | this.buttonNew.Location = new System.Drawing.Point(13, 396);
138 | this.buttonNew.Margin = new System.Windows.Forms.Padding(4);
139 | this.buttonNew.Name = "buttonNew";
140 | this.buttonNew.Size = new System.Drawing.Size(103, 28);
141 | this.buttonNew.TabIndex = 9;
142 | this.buttonNew.Text = "New";
143 | this.buttonNew.UseVisualStyleBackColor = true;
144 | this.buttonNew.Click += new System.EventHandler(this.buttonNew_Click);
145 | //
146 | // textBoxUsername
147 | //
148 | this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
149 | this.textBoxUsername.Location = new System.Drawing.Point(123, 69);
150 | this.textBoxUsername.Margin = new System.Windows.Forms.Padding(4);
151 | this.textBoxUsername.Name = "textBoxUsername";
152 | this.textBoxUsername.Size = new System.Drawing.Size(209, 22);
153 | this.textBoxUsername.TabIndex = 10;
154 | //
155 | // textBoxPassword
156 | //
157 | this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
158 | this.textBoxPassword.Location = new System.Drawing.Point(124, 106);
159 | this.textBoxPassword.Margin = new System.Windows.Forms.Padding(4);
160 | this.textBoxPassword.Name = "textBoxPassword";
161 | this.textBoxPassword.Size = new System.Drawing.Size(208, 22);
162 | this.textBoxPassword.TabIndex = 11;
163 | this.textBoxPassword.UseSystemPasswordChar = true;
164 | //
165 | // textBoxDomain
166 | //
167 | this.textBoxDomain.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
168 | this.textBoxDomain.Location = new System.Drawing.Point(124, 143);
169 | this.textBoxDomain.Margin = new System.Windows.Forms.Padding(4);
170 | this.textBoxDomain.Name = "textBoxDomain";
171 | this.textBoxDomain.Size = new System.Drawing.Size(208, 22);
172 | this.textBoxDomain.TabIndex = 12;
173 | //
174 | // groupBox1
175 | //
176 | this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
177 | this.groupBox1.Controls.Add(this.label3);
178 | this.groupBox1.Controls.Add(this.textBoxDomain);
179 | this.groupBox1.Controls.Add(this.textBoxComputer);
180 | this.groupBox1.Controls.Add(this.textBoxPassword);
181 | this.groupBox1.Controls.Add(this.label1);
182 | this.groupBox1.Controls.Add(this.textBoxUsername);
183 | this.groupBox1.Controls.Add(this.label2);
184 | this.groupBox1.Controls.Add(this.label4);
185 | this.groupBox1.Location = new System.Drawing.Point(234, 141);
186 | this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
187 | this.groupBox1.Name = "groupBox1";
188 | this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
189 | this.groupBox1.Size = new System.Drawing.Size(353, 190);
190 | this.groupBox1.TabIndex = 13;
191 | this.groupBox1.TabStop = false;
192 | this.groupBox1.Text = "Connection";
193 | //
194 | // buttonSave
195 | //
196 | this.buttonSave.Location = new System.Drawing.Point(232, 339);
197 | this.buttonSave.Margin = new System.Windows.Forms.Padding(4);
198 | this.buttonSave.Name = "buttonSave";
199 | this.buttonSave.Size = new System.Drawing.Size(100, 28);
200 | this.buttonSave.TabIndex = 14;
201 | this.buttonSave.Text = "Save";
202 | this.buttonSave.UseVisualStyleBackColor = true;
203 | this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click);
204 | //
205 | // buttonDelete
206 | //
207 | this.buttonDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
208 | this.buttonDelete.Location = new System.Drawing.Point(124, 396);
209 | this.buttonDelete.Margin = new System.Windows.Forms.Padding(4);
210 | this.buttonDelete.Name = "buttonDelete";
211 | this.buttonDelete.Size = new System.Drawing.Size(100, 28);
212 | this.buttonDelete.TabIndex = 15;
213 | this.buttonDelete.Text = "Delete";
214 | this.buttonDelete.UseVisualStyleBackColor = true;
215 | this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click);
216 | //
217 | // buttonOptions
218 | //
219 | this.buttonOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
220 | this.buttonOptions.Location = new System.Drawing.Point(487, 339);
221 | this.buttonOptions.Margin = new System.Windows.Forms.Padding(4);
222 | this.buttonOptions.Name = "buttonOptions";
223 | this.buttonOptions.Size = new System.Drawing.Size(100, 28);
224 | this.buttonOptions.TabIndex = 16;
225 | this.buttonOptions.Text = "Options";
226 | this.buttonOptions.UseVisualStyleBackColor = true;
227 | this.buttonOptions.Click += new System.EventHandler(this.buttonMoreOptions_Click);
228 | //
229 | // pictureBox1
230 | //
231 | this.pictureBox1.Image = global::rdp_portal.Properties.Resources.banner;
232 | this.pictureBox1.Location = new System.Drawing.Point(0, 0);
233 | this.pictureBox1.Margin = new System.Windows.Forms.Padding(0);
234 | this.pictureBox1.Name = "pictureBox1";
235 | this.pictureBox1.Size = new System.Drawing.Size(600, 90);
236 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
237 | this.pictureBox1.TabIndex = 17;
238 | this.pictureBox1.TabStop = false;
239 | //
240 | // buttonCancel
241 | //
242 | this.buttonCancel.Location = new System.Drawing.Point(340, 339);
243 | this.buttonCancel.Margin = new System.Windows.Forms.Padding(4);
244 | this.buttonCancel.Name = "buttonCancel";
245 | this.buttonCancel.Size = new System.Drawing.Size(100, 28);
246 | this.buttonCancel.TabIndex = 18;
247 | this.buttonCancel.Text = "Cancel";
248 | this.buttonCancel.UseVisualStyleBackColor = true;
249 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
250 | //
251 | // buttonEdit
252 | //
253 | this.buttonEdit.Location = new System.Drawing.Point(232, 339);
254 | this.buttonEdit.Margin = new System.Windows.Forms.Padding(4);
255 | this.buttonEdit.Name = "buttonEdit";
256 | this.buttonEdit.Size = new System.Drawing.Size(100, 28);
257 | this.buttonEdit.TabIndex = 19;
258 | this.buttonEdit.Text = "Edit";
259 | this.buttonEdit.UseVisualStyleBackColor = true;
260 | this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click);
261 | //
262 | // textBoxName
263 | //
264 | this.textBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
265 | this.textBoxName.Location = new System.Drawing.Point(234, 107);
266 | this.textBoxName.Margin = new System.Windows.Forms.Padding(4);
267 | this.textBoxName.Name = "textBoxName";
268 | this.textBoxName.Size = new System.Drawing.Size(353, 22);
269 | this.textBoxName.TabIndex = 13;
270 | //
271 | // listBox
272 | //
273 | this.listBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left)));
274 | this.listBox.DisplayMember = "Name";
275 | this.listBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
276 | this.listBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
277 | this.listBox.FormattingEnabled = true;
278 | this.listBox.ItemHeight = 32;
279 | this.listBox.Location = new System.Drawing.Point(13, 107);
280 | this.listBox.Margin = new System.Windows.Forms.Padding(4);
281 | this.listBox.Name = "listBox";
282 | this.listBox.Size = new System.Drawing.Size(211, 276);
283 | this.listBox.TabIndex = 0;
284 | this.listBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox_DrawItem);
285 | this.listBox.SelectedValueChanged += new System.EventHandler(this.listBox_SelectedValueChanged);
286 | this.listBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox_MouseDoubleClick);
287 | //
288 | // MainForm
289 | //
290 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
291 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
292 | this.BackColor = System.Drawing.SystemColors.Control;
293 | this.ClientSize = new System.Drawing.Size(600, 473);
294 | this.Controls.Add(this.textBoxName);
295 | this.Controls.Add(this.buttonEdit);
296 | this.Controls.Add(this.buttonCancel);
297 | this.Controls.Add(this.pictureBox1);
298 | this.Controls.Add(this.buttonOptions);
299 | this.Controls.Add(this.buttonDelete);
300 | this.Controls.Add(this.buttonSave);
301 | this.Controls.Add(this.groupBox1);
302 | this.Controls.Add(this.buttonNew);
303 | this.Controls.Add(this.buttonConnect);
304 | this.Controls.Add(this.buttonAbout);
305 | this.Controls.Add(this.checkBoxKeepOpening);
306 | this.Controls.Add(this.listBox);
307 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
308 | this.Location = new System.Drawing.Point(15, 15);
309 | this.Margin = new System.Windows.Forms.Padding(4);
310 | this.MaximizeBox = false;
311 | this.MaximumSize = new System.Drawing.Size(618, 5528);
312 | this.MinimumSize = new System.Drawing.Size(618, 520);
313 | this.Name = "MainForm";
314 | this.Text = "RDP Portal";
315 | this.Load += new System.EventHandler(this.MainForm_Load);
316 | this.groupBox1.ResumeLayout(false);
317 | this.groupBox1.PerformLayout();
318 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
319 | this.ResumeLayout(false);
320 | this.PerformLayout();
321 | }
322 |
323 | private System.Windows.Forms.TextBox textBoxName;
324 |
325 | private System.Windows.Forms.Button buttonEdit;
326 |
327 | private System.Windows.Forms.ListBox listBox;
328 |
329 | private System.Windows.Forms.Button buttonCancel;
330 |
331 | private System.Windows.Forms.PictureBox pictureBox1;
332 |
333 | private System.Windows.Forms.Button buttonOptions;
334 |
335 | private System.Windows.Forms.Button buttonSave;
336 | private System.Windows.Forms.Button buttonDelete;
337 |
338 | private System.Windows.Forms.GroupBox groupBox1;
339 |
340 | private System.Windows.Forms.TextBox textBoxUsername;
341 | private System.Windows.Forms.TextBox textBoxPassword;
342 | private System.Windows.Forms.TextBox textBoxDomain;
343 |
344 | private System.Windows.Forms.Button buttonNew;
345 |
346 | private System.Windows.Forms.TextBox textBoxComputer;
347 | private System.Windows.Forms.Label label1;
348 | private System.Windows.Forms.Label label2;
349 | private System.Windows.Forms.Label label3;
350 | private System.Windows.Forms.Label label4;
351 |
352 | private System.Windows.Forms.Button buttonConnect;
353 |
354 | private System.Windows.Forms.Button buttonAbout;
355 |
356 | private System.Windows.Forms.CheckBox checkBoxKeepOpening;
357 |
358 | #endregion
359 | }
360 | }
361 |
--------------------------------------------------------------------------------
/src/MainForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Diagnostics;
6 | using System.Drawing;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 | using System.Windows.Forms;
11 |
12 | namespace RDP_Portal {
13 | public partial class MainForm : Form {
14 |
15 | private Config _config;
16 | private bool _editMode = false;
17 | private Profile selectedProfile = null;
18 |
19 | public MainForm() {
20 | InitializeComponent();
21 | _config = Config.GetConfig();
22 | }
23 |
24 | private void MainForm_Load(object sender, EventArgs e) {
25 | listBox.DataSource = _config.Profiles;
26 |
27 | if (_config.Profiles.Count == 0) {
28 | AddNewProfile();
29 | }
30 |
31 | checkBoxKeepOpening.Checked = _config.KeepOpening;
32 | }
33 |
34 | public bool EditMode {
35 | get => _editMode;
36 | set {
37 | buttonEdit.Visible = !value;
38 | buttonSave.Visible = value;
39 | buttonCancel.Visible = value;
40 | buttonOptions.Enabled = !value;
41 |
42 | buttonConnect.Enabled = !value;
43 |
44 | textBoxName.Enabled = value;
45 | textBoxComputer.Enabled = value;
46 | textBoxUsername.Enabled = value;
47 | textBoxPassword.Enabled = value;
48 | textBoxDomain.Enabled = value;
49 | }
50 | }
51 |
52 | private void AddNewProfile() {
53 | var profile = new Profile();
54 | profile.JustAdded = true;
55 | _config.Profiles.Add(profile);
56 | listBox.SelectedIndex = _config.Profiles.Count - 1;
57 | }
58 |
59 | private void buttonMoreOptions_Click(object sender, EventArgs e) {
60 | ProcessStartInfo startInfo = new ProcessStartInfo {
61 | CreateNoWindow = false,
62 | UseShellExecute = false,
63 | FileName = "mstsc.exe",
64 | Arguments = "/edit " + GetSelectedProfile().Filename,
65 | };
66 |
67 | try {
68 | var exeProcess = Process.Start(startInfo) ?? throw new InvalidOperationException();
69 | exeProcess.WaitForExit();
70 | } catch (Exception ex) {
71 | MessageBox.Show(ex.ToString());
72 | }
73 | }
74 |
75 |
76 | private void buttonConnect_Click(object sender, EventArgs e) {
77 | var profile = GetSelectedProfile();
78 |
79 | if (String.IsNullOrWhiteSpace(profile.Computer) || String.IsNullOrWhiteSpace(profile.Computer)) {
80 | MessageBox.Show("Invalid connection");
81 | return;
82 | }
83 |
84 | profile.PrepareRdpFile();
85 |
86 | ProcessStartInfo startInfo = new ProcessStartInfo {
87 | CreateNoWindow = false,
88 | UseShellExecute = false,
89 | FileName = "mstsc.exe",
90 | Arguments = profile.Filename,
91 | };
92 |
93 | try {
94 | var exeProcess = Process.Start(startInfo) ?? throw new InvalidOperationException();
95 | exeProcess.WaitForExit();
96 |
97 | if (!_config.KeepOpening) {
98 | this.Close();
99 | }
100 |
101 | } catch (Exception ex) {
102 | MessageBox.Show(ex.ToString());
103 | }
104 | }
105 |
106 | private void listBox_SelectedValueChanged(object sender, EventArgs e) {
107 | SelectProfile();
108 | }
109 |
110 | private Profile GetSelectedProfile() {
111 | return (Profile) listBox.SelectedItem;
112 | }
113 |
114 | private void SelectProfile(bool force = false) {
115 | var profile = (Profile) listBox.SelectedItem;
116 |
117 | // Avoid click empty area reset value
118 | if (profile == selectedProfile && !force) {
119 | return;
120 | }
121 |
122 | selectedProfile = profile;
123 |
124 | EditMode = profile.JustAdded;
125 |
126 | textBoxName.Text = profile.Name ;
127 | textBoxComputer.Text = profile.Computer;
128 | textBoxUsername.Text = profile.Username ;
129 | textBoxPassword.Text = profile.Password;
130 | textBoxDomain.Text = profile.Domain;
131 | }
132 |
133 | private void buttonEdit_Click(object sender, EventArgs e) {
134 | EditMode = true;
135 | }
136 |
137 | private void buttonCancel_Click(object sender, EventArgs e) {
138 | EditMode = false;
139 |
140 | var profile = GetSelectedProfile();
141 |
142 | if (profile.JustAdded && _config.Profiles.Count > 1) {
143 | buttonDelete_Click(null, null);
144 | } else {
145 | SelectProfile(true);
146 | }
147 | }
148 |
149 | private void buttonNew_Click(object sender, EventArgs e) {
150 | AddNewProfile();
151 | }
152 |
153 | private void buttonDelete_Click(object sender, EventArgs e) {
154 | // show confirm dialog
155 | var confirmResult = MessageBox.Show(
156 | "Are you sure to delete this profile?",
157 | "Confirm",
158 | MessageBoxButtons.YesNo);
159 |
160 | // if confirm delete
161 | if (confirmResult == DialogResult.Yes) {
162 | var selectedItems = (Profile) listBox.SelectedItem;
163 | selectedItems.Delete();
164 | _config.Profiles.Remove(selectedItems);
165 | _config.Save();
166 |
167 | if (_config.Profiles.Count == 0) {
168 | AddNewProfile();
169 | SelectProfile(true);
170 | }
171 | }
172 | }
173 |
174 | private void buttonSave_Click(object sender, EventArgs e) {
175 | var profile = (Profile) listBox.SelectedItem;
176 |
177 | profile.JustAdded = false;
178 |
179 | profile.Name = textBoxName.Text;
180 | profile.Computer = textBoxComputer.Text;
181 | profile.Username = textBoxUsername.Text;
182 | profile.Password = textBoxPassword.Text;
183 | profile.Domain = textBoxDomain.Text;
184 |
185 | profile.PrepareRdpFile();
186 |
187 | _config.Save();
188 | EditMode = false;
189 |
190 | // Refresh the list
191 | listBox.DisplayMember = null;
192 | listBox.DisplayMember = "Name";
193 | }
194 |
195 | private void checkBoxKeepOpening_CheckedChanged(object sender, EventArgs e) {
196 | _config.KeepOpening = checkBoxKeepOpening.Checked;
197 | _config.Save();
198 | }
199 |
200 | private void buttonAbout_Click(object sender, EventArgs e) {
201 | About about = new About();
202 | about.ShowDialog(this);
203 | }
204 |
205 | private void listBox_MouseDoubleClick(object sender, MouseEventArgs e) {
206 | buttonConnect_Click(sender, e);
207 | }
208 |
209 | /**
210 | * From https://stackoverflow.com/questions/8333282/how-can-i-include-icons-in-my-listbox
211 | */
212 | private void listBox_DrawItem(object sender, DrawItemEventArgs e) {
213 | if (e.Index == -1)
214 | return;
215 |
216 | e.DrawBackground();
217 | Brush myBrush = Brushes.Black;
218 |
219 |
220 | var iconWidth = listBox.ItemHeight;
221 | var iconMargin = 4;
222 | var textMargin = (iconWidth - 18) / 2;
223 | var rect = new Rectangle(e.Bounds.X + iconMargin, e.Bounds.Y, iconWidth, iconWidth);
224 | //assuming the icon is already added to project resources
225 |
226 | e.Graphics.DrawIcon(rdp_portal.Properties.Resources.icon, rect);
227 |
228 | var profile = (Profile)listBox.Items[e.Index];
229 |
230 | e.Graphics.DrawString(
231 | profile.Name,
232 | e.Font,
233 | myBrush,
234 | new Rectangle(e.Bounds.X + iconMargin * 2 + iconWidth, e.Bounds.Y + textMargin, e.Bounds.Width, e.Bounds.Height),
235 | StringFormat.GenericDefault
236 | );
237 |
238 | // If the ListBox has focus, draw a focus rectangle around the selected item.
239 | e.DrawFocusRectangle();
240 | }
241 |
242 | }
243 | }
244 |
--------------------------------------------------------------------------------
/src/MainForm.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 | AAABAAYAICAAAAEAIAAfBQAAZgAAADAwAAABACAAGAgAAIUFAABgYAAAAQAgAHAQAACdDQAAgIAAAAEA
124 | IAC9FgAADR4AAAAAAAABACAA9jAAAMo0AAAAAAAAAQAgAANxAADAZQAAiVBORw0KGgoAAAANSUhEUgAA
125 | ACAAAAAgCAYAAABzenr0AAAE5klEQVRYR+2WbWwTdRzHv3fXa69P67qOsWFnSdm6bjIbgkMzzXBKkCga
126 | TMTsjYlGjSSIb5QYwARiZFOQoNEEJb7jhZH4hugrH4aYkT27oW5mMtgcsN4YZem1uz5de/7utpLBRtct
127 | GHzBP2nSu8v///v8vr+nP4O7vJi7bB/3AP5/CvS2t7/M8MlmgU/F1QybnsmROZw3IWsP6s1plH2kT4yB
128 | gapmGCYNIabwooHPbA8ENo7M3TBPgb6eX64aLBUrhkYy4Li5h99iKEf2MgyDVEpBIp4kAAYMC2yqt2FC
129 | vNgSWNewNyfA7/0/Xxq65HP/0OGEYFKWlaUcy0KKTCMUChMAR44A+3cqMDOTh3wPNrybE+DP31pHz4tr
130 | PKe7HTAZKQJM/p5ng8USQDQq4/p16QbA7lczsBhDzZXVj+3LD6BHA1ieAlmAqSkJmVkFdAA+D4CBvtbR
131 | v4OkwB0DYCkEDO4B5K3AYH/r6ND4XQzBnQeYKcP8FaAkHLqjSbhUAArBX5crPD91USOiMlzO4jgWkRuN
132 | SKsCFvt2KNQHJqkPNOTuA1oZjkx6PGfPWWDiZ0fBkihUUCeGLCcgSbLeillWxY4mFgZm8mBNbeN7ORtR
133 | T0fbqNUueGQ5Om/OLMahaoNJVWHgTeCNZvKc17eoahp2mw3j4+N7NzzS0LIogM1u1gFu14SzE0xRFPKO
134 | pR+nTT39XLPFoRvXh4h+gKYIB6e9GKGpawOuEle9y+WSshDzpmFvZ9uoxWr2RKenczqskqcFjkIkEwnE
135 | YrIuu9nqhJGMZzIajKaHCo6MWwxWXJJH1Yr7KplwSBqoqKyopYmp480D6O5sE+02y8pcAJoBDWB93aOY
136 | vBrExQtDsFgKYLYVglVZmDgTZGVaN15oLMKpsW/w+eBH+OChT7E1sA3DY8N7KisrP1wQgBToX+31BMJh
137 | TaWFgxCPx5FW0hmG9Ndg0mkFRlMBeF5AJBnG9cQ1rHWuQ1SRcGL4S/x45Xu84X8bDSufhGATaFRL41VV
138 | VW5NhXkK/NHVVZ5A/HUaIHQ45tUhyxpUcUJsVJT0xlgspivB80ZU+WvhEJw4K57G+/278U7tATSWbsZr
139 | bS/AyAn4ov5rPaRJNqH7lUwmV9XU1ASXdSc8cuTQd3a7dWskEiXv03oibtnyDEwmAbxqRPvVM/hk8CCe
140 | dj+PJu8raDm3DyPRYTSv/wwehxcpJJFIJLx+v39kyQChUEfBr2f+CRuNRs0L3augKKKurh6FhYV067FQ
141 | CELY1fESXKYSfLzhOFi6k50YPo7HSZE1xT5EZCnh8/mcFIJYToBjxw4/EY+zLeSgltZ6OKik3FarsDpr
142 | XMtjWZ6G378WdYGH0Sd2Y0/PTt3YWw/shZJJ0aVE1SshrsbUomInIwbFUyT/tgWTcG7tHT16ZMztXlUe
143 | iURuvNYkl2VZf9Yun1oOaIkokPxbNj+La+kJdF5uw3P3vwhFTSGejhMiA47lVKvNysyUKHzl5eXn8wA4
144 | fEAQhP2at7Mbb9sbKKZYsaIEmxqfQqmrDOJUEIkkJRwtg8EAh8Ohh4wSd7vX6/32to3oVgsnT35VNDER
145 | Emw2ZqbV5Vjd3d1oatpVUlZadpCc3mqj9qstrVoIsIP+vlldXd0794glJ+FiENnv1PeLJUmqomTlUqnU
146 | Bar7Kwvt/c8A8gX9F14TdT8xUQUfAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYA
147 | AABXAvmHAAAH30lEQVRoQ+1Za2wcVxX+Zmd2Z3ZnJ7vrVxw3dlwnftSPpLHiEIuS1CK4pVDR0hYEAglR
148 | VAn+BAECZEAJFEhpKUUNpbIUxX+QQG1UNaKi0NLEqdIgxyGJExdXKY0dU/m1L+/D+5wH5856bcexvV4n
149 | VmvJ11prvHfmzvm+75xzz7nmsMYHt8btxzqAj1rBdQXWFbhFBpZ0ob6+03fGo6ntGqAahs3Ivku84aU8
150 | cOMXyzcpyW6l1aeH+ScNjktxhqHyPC+FW1vbupdacFEAvb1vP6rIysuyQ4CmpuatcTtDh/HCgbPMrsmu
151 | OI6DRXBgdGT0VCSmt7e1takLAVnUknM93f2bNm5suPa/CFIaDwtHL8pqkH1qRpPlk37TnbSWQeto6qwS
152 | Bn3BfkoLeZQUuTAxHr5nZ0vLO/kBOHvyveJipfb4yRIMjrohWmdfcAvm3vSohZhX0xrGxv0mQUQ8VD0D
153 | 6tuPBVFTJcEXjD/Q3Nz6el4Aev/VfaWoyNn4yqliDI26VhVAmtgfnwNA0zkTwBOPBrFtiwivN3zfrj37
154 | 3lgRgFe7izA0tnoAmK+rBGBiIkBGG6bvZwF864sZAOFAsr2pZc+b+QE4Rwp4nI3rAHIEzOop0EsKuNey
155 | AmsdwPne01cK3fLajYEMAAcBoDS6FrPQv3vPXClwi+sAcu3aq5aF1hXIRf1M6bxKO/G6Ah8XBY6/tRHX
156 | RjwQbaycntsQ5GoGWNOQ+34LZ6FiTsXomC9zOz2ma1SN0sV3vhxA9Z02hP0rKOaYC3lcUuObPTJGfDKs
157 | AhXpqzA4apRYNRoMRjOdGf3WdB06VaaP7E+gcrMd0eAKAPQSAEWWG2NTISpxmfG3s41kDQv1XIYOi0WA
158 | YBNhtYrU9VF/TUM3NFIhjVRahyRSOR2N3rt7997T+ZXT0wCi0QgBmNNO3qoKZguZcS1RcsJmc1A/zJv0
159 | sDaSDVMHky8LARDg9fk+09zc8s8VAYhEIis2WSdXYBsV+2QHY50jv3c4PRAE0VQhC2j+i3hSRLLbEU/G
160 | QoRtX21tbd/8e5Y4lci40EoBGMx46nd13SA3sZjvzXRcIOMLyXgbzS3cZzMlrBYbbPShNXS7Ill8fh9E
161 | Uaysqqq6PhfEqgDQNBVOxYWGxmb4vGP47/sDoEMes1OXHNSeSvKSxjsE2XSjFwaehiwo+Hr1E0ZBUQE3
162 | PjHWRyrcvVwA7ymyozYSYdkhv8HSottdgLr6HQiFghh49yKpwBPrVshKodmwU6iC56ym52sUtNmhWF2Y
163 | UiN4rv9JvP7hq9hRsAu/2nUETqsTBSUF1DtPPFZdXX08e/+iCpzvfftySXFJk89Hxx1mYC2e1eceE2V8
164 | mpGtU4CKdGSiUlZhWcwg5hXYRGKfDBY4gbKOxcw8bD6lJ+EktkdiH+K3/QdxOXABbZvuw4H6n0DkJST1
165 | BIoKiyjdBt8hFe7JCeBSz9nPC3bhrw6HA+l0epq1XEoYiMcT4C0WQ6PdSNM000iOYoABEu0uciUrMc8j
166 | rafxu/5fQLFuwHcbfgrmNhf8PTh44XuIpEN4pPJrZHwHImoYMXXKdCk7C+h4PF1XV+ehxDCVJXZRqwYH
167 | 3y0Nh6ca9FRSMww+x9arwmqX0hfPXz7G24TaZCKRCVz2oYDmeQG7WlpZIII3BIRSQRy69H2T6U9v+ix+
168 | vP2XECxWPNv/c5wa/bvpOgxYhVyJYCpgrmW1WskNBXZZX1lZOZATQC6+F5r/zdO/TlgpP6ZSs+epmkYb
169 | kiSivf0BE4BKQS7xdjqBS+P5/xzGWyN/Q42rHh07DqNmQz2OXn0ex64eQaFYjAMNHWgu3EOKpcALvPk8
170 | pedmAnDxtgN46c9/elhySK+Ew5Fpv6etiFyIZEcoHMb+/fdDlmWz9mGpUhaccNk8ONzXgRPDL9G1G7//
171 | xDE0enbixPW/4KnLP8NmuYK+6yJ1BHBCJtrIfWbS6W2tD1478fJrisv1uVAoPCOOhRJ/mgz+4Nogdu9u
172 | xR13bEYylTTjwG0rwNmJbvxx4Bn4k158tepxPFjxJZqzmOnznPcMJMGObUpdJsidTsRiMV9NTc1GAmEW
173 | Z3kBOHr0hW1TU/EOw+Cc9Hx6rgtxnCArivwFk13avG6Yow2NqVJevgUtLeQOyZQZlIz1rvf/QClSwQ8a
174 | D2FfaTsmyd9VQzXnmUIsxca1mPl3aWkpnaGOd1EQfzNnFprv311dz7knJ9Xh4uIiJUEBOl3OzNzGdtlo
175 | 1NwzKGaNaWJmgbB5FoDMjVyyG8GYHwd6vmFyeGjns7jL3YRgMkC7gzZdk85aQDu5QQHMSZLE3LF269at
176 | V/MG8OKLRz5J/ntmcnISLD3OrW+yiy1W02Tnk8kktmypRGvrp2CoBq6HP6ByQUSFs8pMnQsNZjxDWV5e
177 | juHh4WeI/R/eoO5yM01n51OuRIIfLCws9jAFZre15a7AjswNJJMJNDXdTWXGdqSmUmBrJbT4TayzVZnx
178 | VIJwZWVlzPh/kPH3z39bXjHQ2dlZkUhEfkTGbyBS0qRCrrbsJnRp+mdGIhHD3r332svKyr/i8XgoPsJg
179 | aTerIFOXuZuiKGYh6PV6j5Hxjy9EVV4Alsv1cu8bGhq6ixR4kgx+yOVyEdnTDQ1tfKwKJlc9Q6AOkvEn
180 | F1vzIwWQNcrv928IBALNlMEqCQxP7I+QIpfq6+tHc5HxsQCQy8il5tc8gP8DeTt3bbPfmfYAAAAASUVO
181 | RK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAYAAAAGAIBgAAAOKYdzgAABA3SURBVHhe7V17cFTVGf/2cfe9
182 | yW6yG/IEQl4kkJBilFKkFZWHM9rKFJXWVxGpttqKgtaZVq3WVgWkUFCEUYdpHa3Bjk37hwPqGIlFUxGw
183 | GKMo8grkubt573u333cuC5vNbrJ32eSy5h7nDpvdc8859/c73/Oec5SBVERFQCZq71LnIBEg8iSQCJAI
184 | EBkBkbuXJEAiQGQERO5ekgCJAJERELl7SQIkAkRGQOTuJQmQCBAZAZG7lyRAIkBkBETuPmEJaGxszJQF
185 | XSs8Pv/0oM8fAJksOORZ5ACKqA83/Af85mwZfofi/I/DW6Mf/fR1IGpPOKoohd0w/A7+62G/UBvUjTfg
186 | V+KPPqoRDAblcuBAq1d/WlOjeVkmqxlMlMeECPj0wN6rPF54JycnGzweDw4o0e4j70taQxEN02OGt53Q
187 | Y7M2Qy3JZTLgVBy0t7cNKDjt/OrqSw8mgoLgkRxrasq2DzpaTaZ0cDi6aTrgqAQ3c3asBEro3rECPxYs
188 | iY45NHT+ua0WC3TaOnvyC0rzsrOzB4SSIHgUjR++9/u8vLzHWlvbGPZKRRBUSv+Q+SV0EBdFfTYXZCCX
189 | jw4J1XB5ZODz8/WzsydBW2vHqpo5l78o9FlG7y2ixb3v7X4jPz/vxza7HXVjEBwDamjr1rLPqVxIiAOB
190 | IHhcTM2fKyGAAkGcZLIATjoZkF0oyvGB2RhknzMzM8Hm6N5SUzPv10IxEExAff1buwry8pc5HA5Qcz44
191 | /E0W1B+cAmqVf5gdFjoYMevLZXJwuz2o0+34HLFgCUIACaDZf9u1dqgqcYLTrYCMDDPY7Y6/1Fw2/z6h
192 | z5AAAXtqC/JybggR8PlxK/znfwWMgKGGTuhQxK0vR7/Gg55FR4ed2aVYHJAEEAE3LXZAxTQnfuYJcHT3
193 | bL6kZt5qoU+RHAIOIwEoDQnbYqGjHoP6pMvdbi90djpY67GkALUUuD1yuHGRSAQ01O+pzY2UAImA8ZMA
194 | iQBJAsZAAQFzJ1NDBTW8W5ubnTXUCH/rVFBsIyy+DSACJiEB3bwbyrygbx0BF7ER3ocETJrAEkDRv0tM
195 | L4gRIEmAeG7ovn1IgEVSQaLFARIBIruhjfvqay2WzG+5Eb6IvSCJgItFAigbqpLc0HFPxjU21tdmmjNv
196 | 6JYIECcbKhEgsgra39hQazKbJAkQKx09MQi4iL0giQBJBU3sdPTEkICLOBsqESCpoHFQQSOtihA5HS1J
197 | gCQBokqA6K8kJQmQJGAcJEDygsYE5JEaTZllKZIKklTQmEjHUAlIyVxQii9Px9XR/Mq4kVdH0/J0N66O
198 | Fu2l/DkVdHZhFr8/YCpo8O2Y4KXWYzKXE2tUxgig/QE2Wpx+fudURHNsebpbBrdeZxuyP2DclqeHCKD9
199 | AZwyAC2dGvjylAE4RfSdionBMf530dJ62uw50O+JOpGCQdwdg5skg/irzyeD71b6IS8rCF78PK77A8IJ
200 | 4PeIBZAI2iOWovMfHwK3nTLGaZOGUqkCuUIBMjlebMMDXqyOHwJ+vAJIAn4mKfAH5Owe0QgIzdOU3JiB
201 | mNOspl0lBDqnwn1uSg4Bpb3KsScT3RPw+3A3jQu8eBEZtEesu6d3fHbIhEvA+CuK5PTIz/ggcJwWVBo9
202 | KBTc2YbPS0PMnpCwkI0IBgJIghOMBjXYujqeqZmz4GGhIxSsN1KdAAKNVIxGlw5KTs22tTFJSKTQtlbc
203 | 3JeebkTvqf2VysrqW4U2M6EICAT8qGo0oNWZUPPIEwc+AmVSW0ajEfr7+3aWlpauEELChCGAwFep9Qh+
204 | OlM/IcMrBKxYddEQB9Fgy3Jzc6GlpeW96dOnXxlvuylLAAFIqoNmcux9vTwMQTbzdXi4homg549XSEIh
205 | 9UMlgOMgErDI8BQBIuGd8vLyhfF0kZIEBFCPE/hK9Fq8Xi/u0kcS8IpWqB4ZWb0xkycjCeATiZxcBSq8
206 | qD1XwIUk+HEceG4DulBEwpkzZ7agOhp153zKEUDgK9CIlpTOhLR0E+5Q74SjXzUztULSMKScBVtvtKDh
207 | VSZF5xP4eqWBAb+1+RnI0ebBLcWroMfTDb6gj5GA45ORa9rV1bWkpKRk90iSkHIEeL0eKCouh6xJueee
208 | q+XUcTh18ii6laqh+CNZaq0RNHiRDUhGSePSodfbA39uehIaOxuAk3GwsvRXcE3BUnD5nEzFkTpCoyzr
209 | 6+vrQinIRhUZs/OUIoBmnc/nhfKKajCZeZVCpaP9DBz9unkIAVSXolSa/WwL/wWqHvL9TeoMONb3Faw/
210 | /BicHDgGGSoLDPj6GSHrarZBhXkWDPr4E2vILuXk5JAqehDtwYZY5AsnYH/DLlOaiR3WIUbxYxRqMKRB
211 | xczZ7CF9Ph80Hf4EXC4nU02hQv4+zX61FtUFfk600IxWypRgUmXARzjjNzf9EUHvgzTOBIP+AUxH+OC2
212 | 4l/AwrxrwY8qiAxyqJBrilJgR6/IimONOgjhBDQ27DJnmJfZ8bgasQqRoEJ/Xm9A37uvhzfEYeDzh4bI
213 | mOElHz2a4SVgVXI1A8wX9PLRbUQJ1TFyafCvk7Xw0pEtoJQrQafQs1mvU+rgvorfwtysH4DDY2cEhLdD
214 | Eki2oLOz84coBf+OhpdgAg4daPiN1Zr9NH9gU3LcuUSI5BNjfFRLDxpeeA9JDTpDRlTDS8BqFFpUF/2g
215 | lmswmlWAGz2ZcPCoDgFNgL985DmoO/l3ICLI+yGwC3RT4MHKx6EorRQcbjvv3kYpFjxRCydrbVlZ2U1J
216 | IeDgwYMmn6ev1Wq1aGw27HgcSBDaBxGg1hjwMg4jgIAyKFFyUI08+slqmKTNhTUzH2XA9vl6z5HAyTlw
217 | +Z2w7Ytn4cOO95kKUiBRpOMrTFWwesbv2He9Xjy2bYRiMBgwQu5vQwnISQoB1Mj+/ftny4KD72ZlTTKR
218 | DhYKkJAZ73a5MU/vQycGc79xFhqPUm1gWc7IsZHvTjN442d/gCO9Tez3CtMsWFv5GFg12ehOOhBoJQP7
219 | iUNr0dP5APL1UxgxBP4MczX86ZIt4Pa7mOs5WhCoUvFj0Gq1kzE+OBX5CIJV0DkjFwxyH3/ccBOnkE33
220 | +5Uof96k6yOO4/wd7ba5bq9nscfjjgv+IK6cov9KSmeg+6ljOfxQIRD1nBF2t9TBxqY/gEWdhapIA91I
221 | CIFPJBAZ9DcZ3uP9R9HXXwctA8chXWXmI16MNZZNvQV+NHk5IyRSdUUOkmwTScHAwMACjAnqk0ZAXGgk
222 | odJTTz25E09ovB29ibgOBiTAyS4sXnQN6PUG5iWFFyJBp9TD3rZ34AVUL3gIGQZWpJJ6EXQO7il/CBbk
223 | LEESHKweqRiSlgO2j9DtzMRjSgNMSq7Jvx5+XnY/a5pc0WhGnH4j+2QymcgbWl5cXPx6ShFQW1uraG09
224 | ZVcqlWl0Pmk8xY8EYH246qpFoFZrgP4OLyQdpF7MCOYh+8fw7GdPoBG1oT43M51P181Fd8KNhT9jMxwj
225 | Wwbuji83wVstb0I6up9ktB0eG8zOnAMPzHgEpSO2LSACzGYz2Gy2FWgHdqYUARs3rpuv02n3Op2YaxnF
226 | lyf9R4ep8rkfJSxYsBD1rg4JGCoB4QCQET0zeIoFVl/1NkOG2gI+9Ot7vA5YlHcd3D19DXNO6TuSkl3H
227 | /wp/+3oHqBVq5kWRqspHb+iBmY+gnZjKyIssIQlAT+hmJODVlCLghReeX2806tb29vaOGMgyQ4bgk5RQ
228 | TECG8Yorroa0tLRhKigSAAO6li7fIFNH+20fMm+IjCaBW5VxCdxV9gBYNFb2HdmB99veRrvwNHj8HuaW
229 | Uj2KJ9ZftgOy0aOKJIFsAAVkTqdz8bRp0/akFAH/fLO2Sa/XVfT3j34gLT1oV5cN6DxTAmvevO/jgao5
230 | jJSRCqmkLOb9dMOa/94JdncXm93egBdaBk+gOloFK0vuZXqeilmdCV90H4YNnz0OrYMtzOBfP+Un8NNp
231 | K1lAFx4JU310JFiQiBJcVlRUdCRlCNizZ0+ux91/mlQPP6vZNMcrurNFEa/T5YLTp8+w+tXVs6GsrBzX
232 | +ozsPZEaOj14kqUYTvR/g+pFgy6mm6UZbpx6GywrvJWRQenmUCFJ6HS1wZOHHoZCYzHcjzEBxRVUL9IY
233 | 63Q6TJO4ejApZ0HJHKYPE3ZD4zGIF1Knru6Nl9LTjHd0d3fHlUcjtUM2oLW9nSJPKCiYAnPnzkcy6HDx
234 | oaRFM8TdaIgJ2NBMvws9nCXo6ZAX5AnQWqHzUPFRsg6cqPPJoNNv3hjpjIyMDBrP26j/F0XDY8wJ2L59
235 | e87AQE8lx8lllD2IhxS93liVZc3YgHpzmBcz0v30UsaPbmd7RyfzhBYuXMIypOGeEHuZgu4mgb37dB3q
236 | /o2sScrxk/FN58xoVB9lHg55On6c+dFdTP6lTIAytDHAp0mRlZWFh8F23IkJuZfGnYDNmze+qFQqVvLR
237 | IL3Figd+PpWLgQtVxkRmQNAkoXvpcrtdUFMzB4qKSkgFnOuYZiyR8OaJ1+Afx19hvj4ZUTtKQDHmddZi
238 | foc8G4oDLvQkYIx+SQUGUApMVqu1b1wJ2Lx5w2sWi3U5qZDIYGg0GkhlMLeTrcGJv4Qfhk92gAKgK69c
239 | xCQg5MZSHohepDxyYDWLfinnQzOdMpqU2aQMZ5+3N/5OR6hJ7wNaW1ufQ/Vzb6xqQp4v7kFt3bp1tkaj
240 | /IRUCD644Fkcd0cjVCQSyQDPmfM9KCwsYu8LqFAqgbyc14/thFePvsiCqqXoxawouYf5+2R8hdE+fBD0
241 | Rkyj0ciofzTClvz8fNu4ErBly4aH9Pq0Z3j/PU69kwzUI9qgt2cajRauvnoJswksccheqHMs1fx883qw
242 | aifB8ml3QL+3D42t+4LBZySjLaIlKjj7V6P3s3lEuzUGzw2bNm1ck5Zm2CA2AfRsNPOnTClkHhEl9NiK
243 | CpaOUOK7ADWzFxQ8xTa2whE6C349Gt4Fo909Jipo27b1M5VKw2ESQdS/oqig0IOzZSNohGfN+g7MnFlF
244 | Eek5qSR1xNYXxZXmGw1KNvOD+AJGhl5PG4JfjOSOGkGOCQE01E2b1u+wWrNW9fT0sBfpI604Hv3RLqwG
245 | zXqa/bNnX4rBWQWTimSOiYAnbw3/HzLQ1tZm1+v1lZMnTz4Tz6jHjACehA3rcIY9SNEgv5JNHHtAaoY8
246 | IQrKZsyogqqqapaiwDdV8WA0Yh0CH+2LjPx9XBH3OXpeV6D30xlvw2NKAA2irq7OeOLEiXIEQIF5kbgC
247 | sXgHL7Se09kLvb3tsHTp7dMwQfY8gmaiqDk8ThDSJuV4yNWlgu1sR7Vzt5D7qe6YEyB0QONVH1cqGBG0
248 | pxHEX9LKBQr8iIjwmCFyLCzdgR4OBZaoZtjPuPrtAP59HybaPkhk7BOWgBBYSEQuBov3oIt6C746nEzR
249 | K6nKcCIIeJrtBD59j8R58PNbqHq2IPDvJgJ86J4JT0A4eM3NzZUI9uVIQDUCPBkNqwn/VeDfA/hvK/77
250 | BarRjwoLC/dhvQs3IBNZBV3IrE3mvZIEJBPNBNqSCEgAtGTeIhGQTDQTaEsiIAHQknnL/wEjOYL3aqli
251 | LwAAAABJRU5ErkJggolQTkcNChoKAAAADUlIRFIAAACAAAAAgAgGAAAAwz5hywAAFoRJREFUeF7tXQmU
252 | VNWZ/mvfeq1uoPemaXoBJDEMgiigLBrjmJMcHYeZZDQmx5iYo0GMYzSjUfR4hsgqOkbHyeFkYkaHxOhx
253 | gaPoKCgcwVYhIIKKhqUbsNfqrbr2+f776tHV3bV11evqat+7fep0Le/ed+//f/ff7v/u1ZFWVE0BnapH
254 | rw2eNACoHAQaADQAqJwCKh++JgE0AKicAiofviYBNAConAIqH74mATQAqJwCKh++JgE0AKicAiofviYB
255 | NAConAIqH74mATQAqJwCKh++JgE0AKicAiofviYBNAAoS4G9e99a4O7zXBDy+2x+nSHIrZuG3yL8hX74
256 | 93o9jfyOLxrxbbim1NDIX/VkilJFH+3LYX0I+kSXhxTpq6HfD/3ki0JEXDGyKQoGR34ZCIRCwaDOSOQz
257 | YDAeHpHfq9MZDH4dgSZ2e94pq1W3Y86cxa3KcouUSwnbv3/fLL9v4JmC/ILZBoMh6kDT6zwLqxBestCK
258 | fJ9ey+nXHt6vVFuUxzhYX4fx6vQ66upyUSAU+M3cuYvuSrX1aPUUUQEfgfnegP+Q01lIHR2dFAgESCda
259 | Ht58LAby9+Eiv43gs6g1jDYRNZSkR8ptDRkpPoTQQYkG8UokmGV8R6eZxWKhSZOK6dTJ5q1/N2/hikQt
260 | J/t7wi4m09B7+94+Oqm4qL69vQOiLKhIm8ncV03X6PX6EF66KVMm06mWluvmzVv8tBLjT5tZBz7YtSwv
261 | v/j1zk5p5stFr8u2OaoEuVJvI7E0iCYxYUaAjCxNuDAI8vLydJ1drsPz5i+alXpvBmumDYDXX3v5gdra
262 | mnsx+9HRQabrJftPK2EK6ICARMQOCRtnaGGBGooQqqwKfD5fsMBpddbWznWlS+BEfUrY/vZXXt7Q0DB1
263 | Fet+BoA88984UEWufjOZjGEgRNHtUe254ddxD6LZe4nsweF1xvH+zPy+bje5+z3CoIta0L9gyE+hsOTk
264 | 7g54dbR0jpvOr/OQ2yPVM5vN5Pf7yaazls2cO/d0QgYluCBtALy6fdvauulVd3RABQgA6CVKv7CrkTq7
265 | bWQyDaqFdDs7UetDdMM4dlFPTx+L8TjDGJQSLEz7B/T03aVddNH5vdTnluoxACABqGiSs7SmZtaZdGmS
266 | PgBeBQBqAQBZAoQB8PKeOurqsQ5KgHR7OoHrM9M7O7upt7c/AQAGB8kAcHv09PeLXDR/dp8AAxcLAODN
267 | JgDsAABqNQDEhacGgAk8e5XoupIAyDoVsGPH9rW1NZWaCoiDFCUBkHUq4E0AoFoDgHpVwM43t6+trNQk
268 | QDwEKCkBsk4FaABIbCUoCYCsUwG7dm5fW1GuSYBMSYAsBMCrAED5SCNwN+IAvVocgIGhpATIOhWwaxcA
269 | UBYFAFog6JxQ0ACQWE1+pa9QEgDZpwJ27YAEKNXiAGqNA7wDAJRpAFBvHEADQGLtpaQKyDoj8J1db0IC
270 | TNJUgFpVwJ53dq4tKSnSAKABYGhCiJYPMIgIJVVA1nkB+/bsXFs8WZMAqo0E7tuzCwBwapHADKmArDMC
271 | mwAAZzQAaJHAMYkEZp0KaNoHADijSAANAOoAwPtNu9YWFmgqIFM2QNapgJgA0CSAyiWABgANANpzARIG
272 | vtJxAE0FZHYtIOu8AA0AmQWAZgQmpnfWXaGpgKxjSWY7pAEgs/TOurtpAMg6lmS2Q0oCYOLYAFpa+JjE
273 | ASYOALRA0JgAQHMDMyu9FbmbkipAA4AiLMlsI0oCQFMBmeWdIndTEgCaBFCEJZltRANAZumddXdTEgCa
274 | Csg69ibukJIA0FRAYnpn3RXqBIAWCBqTOMDEUQG767UNIsIQkCVAwp1CsW2nvFeovFPoVYu7hmwUmfUA
275 | MGCnUN4s9rm3GqkDW8Wata1iRUZQR0c3dXdLW8XG2jk8crNtpmE/toe9ZnkXLfxG37mtYrPeBpAHd/i4
276 | GZsd4wiY8NaxWaeYM9ghntU+bxB7/IbCzMckidgYXDoLA7uC82bR5MM1eI/vsCc0NVTrqWIy6uM9l6wH
277 | gExXC2Y+74scOdAM0jxLbiVt9s/M1IOpegPPfgN2DOf//GLWS+zHqUHYFj4ojtrh91yPf/b49GA+IBTe
278 | 1XnCAIA5MPIEnCzhyxh1Y3C8zFCe02C8wURGo5kMeOkNxvBm0azsh54fIE0UqV4oGMDhGz5IAA/5fV4B
279 | DHE9XhMKAGNE56xulmcvs9Zoxg5pZptgfMQm8GGJGO80FXm2S1M+CDDgMC6oELcAhXRghD97tosfnhSa
280 | 1dwZw84JsY3CTLdYcsRsF3NaTO3Uj8+JVBM+7wCa8pLb3Y+DJWzF8+fPb093SGmfF6ABADzBLGVRb7Xn
281 | kdFkEfyWAZEugwbrS8fHmU0m6u9zUe/J0/kXXnlld7rtawBIi4Ksr4NksjjIasuTrPewJEir2TiV2Xh0
282 | OOzU19fXBHXw7ZqamrRODdEAkCKnZNHOjDdbHZK1nyGXh08PmzRpkq61tXXAaDQuqq2tbUpxGAkPskrY
283 | ripVgHDtQmSz55MZs58NtUwXBkF+fr7O7XbzrS+FJNiZSh80CTBqqrHYD5HVkQ9jb3yYL3eZQZCbm6vz
284 | er18ZuMFqUgCVQKARbU45JJPOUNwRq83JA0Dnu1WW67Q+Zma+exGWgxW8gY9fH5whFspHSbJkgAHd/qs
285 | VmvVaG0C1QFAZn5eHsS32YL4vIu8cK+MxhFnnI8ABRt4RqOF7DnOtN27ZBDHasaAQ8VtBhud6jtOJfZy
286 | 8gV94nzByHOZI2yCAw0NDecn07Z8jaoAwMznWVs7fQYVTyo556cfOXyAXK5OMFfy3aMVEdmDle/ILRYS
287 | Y6ytfWa+WW+hXFMevXhiKz11dBP9YPrNdG3N9dTl7SA/QBAZS+S+lZeXU0tLy2qA4P5kQaAqAPhx3t7k
288 | kjKaVts4hD4+hFv3f/Bu+ODL6Ac7srvHfr7ZmiP8/rEszHy7wU4mvZl+/9lv6S/HnwEYcGIoZv9NDavo
289 | 21XXUqenXRiikfYAlop1DGKsJ9RWV1d/nkwfVQUAZvT0+lk4hl2a/ZHlr/v3iQibwTDSHuDZb0Bkz5Fb
290 | lEQoNxmyx78mB7N+IOCmRw//O71z9v+owFxIRr2JvAEv9fhcdEPdzwQI+Joh5zXDHiguLta1tbVthxS4
291 | MpmeqAwAPiopraCaafVDaOP3+4QE4JW4aEe7sri32QtEmHesRX+B2Ukt/Sdp3cH76ZPuw1RoKYKox8oh
292 | euwJDlC310XXTP0+/UvtTeJzcFjgyYRIocPhoP7+/q/BKziYCARpA6Bp3+51Tmf+L+SjYxPdcDx/l2yA
293 | INU3nEeFzuJzXTl65CB1drRGNQSl85ANQvdLJfW4fqyxS8aegQrNRbS/4z3acOgB6oCIzzcXiCqs6/v8
294 | veL9TxpX0WVlV5ELQMBoojY5efJkam9vf7a+vv6fE9E7fQA0vb3eWeC8vaNj6PHxiW48Xr/L6+0FBUUI
295 | 4ljI1dVJAwP9Mb0AnvEW6H0LXD+xLJtUSX4hnJnPuj7fVECvNr9ITx7ZALYGKceI+4XB1u3rwu9Ouv28
296 | e2lO0Xzq9LaPcAcjuwV3EJ6Nl9VBQVFRUdz1grQB8P57e24pLip8tLWtLWOh0KR4EOciyRVE9k14dkfT
297 | +3J1vsaR64QNYEo4PhEdhPFm1Bupz9cbnqGxSSxfzz7+H489RVu/+L2ob4XbJ60hBqnL00G1efV0x3mr
298 | qcJRjZmPTbkTSCFWY2A+0tA6rq+rq/tDPHqlDYCDB/dVQkOdCCI6xqjDDEu7zXQZrFR9ARAYhY6cZMR/
299 | CC5bAX3iOix0+NKyKwQIfCGkeEWJuDMTc4158Ou99B8fP0xvnnkVIr+QTDopHsFuHrt7CyZfQitn/ors
300 | RgcMwOQX/zDzWQ08P2PGjKvHFADceBPUQGV5xe0tLadZx35lQMDinw0/NgDjGX/MzHxTIZ12n6Jff7CK
301 | mhG0+WH9LbSi5gZyB/qFtR4JAsnNcwhRvuHQg3S46wAsfSfSxiQXlA07ZvZVldfQj9COP+in/kBfVCDF
302 | Yi4bglgxPNPY2FiGGEFMw0Wx2dq09+2tpWUl1w64B8g9MJBQXCo1S2O144PPzxEyhHxTHiMz3YzkDl7w
303 | iQcAjtS1eVrpwf130ll3C9kwW13eLrocxtpPG38hGNvr7znHQBbxzX0n6N4PbhNuHVv6cgki1OuFv39j
304 | /a1w9f4RxmArPntHxXxui9PHuYD5U6dNm3Y8Fp1SJk60Bpua9nwPma236YM0A56LKRjEu3EoGLQ/GPTb
305 | cGtjOku0zHRHThGkgDUmADhA0+/vo182/YzOuJup2DJZjJhj9jzDz3fOhfF2HznBZAYFF7YRvAEPgjxP
306 | 0Bst26A6EJZGOywZePazWlhefhXdgMgff8ceQDQ1Eo+0bNdgoYh6enouhzewIyMAkG8Cops79u61Bmv9
307 | yvtMCQAVCtWHPvzwQ/vRox99bjabHF6vLyUIsrfAZtjChZdSfn4hEjSjt8OzWw8X7pWTz9Gzn2+BRW8S
308 | hpxsqLEeL7NXwoi7n+rzZ4oIHlv5zPAc2ADPHf8j/TeAwJ8j6/F1s51z6PZZv6Yia/E58CQ7GDYECwsL
309 | 2RC8EWrgdxkFQLKdHKvr1qxZszA/3/H2AFRRIJCaEOI1AybismXfpJycHAAgnJg/rNORPvxuRO02I3rH
310 | Op+jeXLphT63QOzfOvMuWjRlGYy7Thh5PjLC4OMo39tn30DUbw15ztWT3EgGT6mtgu6YfT815M8SEiVZ
311 | icZrA2wIAgB3Iyq4RlUA2Lx57eMOR+7N3d09KWOMl4s5rr506eVktdqE2xi7cAo4ZhzEPHsB6w7dLzwB
312 | NuyEHsYfG4Osy38w/ad0NSJ57CFwJA/yQ9Q76vpIRP/YkOR6XIfB1evrAXgsdMuMu2hxyfJz4EmkEiIA
313 | EHdxSFEbIGVqK1xx48b1x2w28zQ3DNJUiwyAJUsuI5vNngAAg3fh6B1H8Tiax1E9ju5xlI8Lr+ezdX9l
314 | xdX044aVQ/Q712sfaEO91XSg8wPUQ+whXE+ABzbDddN/Qv8w9TphEzB44oFABkBXV9d9iAU8oBoJsGHD
315 | hukmk+5TZqDfP9pVOw77Sk/ssA3A/5csWQ4VkBtTBQwnLM9ajuKxMffEkfX0WstLIsrH0T4uAfj3nRDt
316 | c4sX0KpZ91IeDEAXIn1cpHoB+i3q7Wh5eUg9lh7sMXyr4rv0/dofizwBbitW4XHgJBcCAG4HADaqBgBP
317 | PfXkz3Nz7Y90d3cnrS9l4jDDPQMePIolRQnZC1i0aKnQpexWJlsYBOzqsXv4v4juPY/lXCNmMxuLXPh3
318 | tgOqHTWwC+6mSsdUIR0G69mFQfk/n/9OtMFtSeAJ0Mm+v9H1UCM31N0s1EOsqKBsBMIL+B4WhZ5RDQBe
319 | eP7Z15Hts6zbBQBEGXVklF7Wf3wdP3vHiz5dXS76srVVSAJm+vz5F1FlZRVHOZPlv8RkAIh1d5m9CpG+
320 | 39Cf//Y0DMPcIWKb7YS6vBm0Zu7jwjXkbB+xNgDjkKOC7CI+fmStYDxLB5Yc7EncOXs1OfCZ3cVYhe0X
321 | m83GY1iANLF3VQGAbdu2WbwDvS6jyWjxeDyjYhhfLDP9VHOLqMtMnzVrtniNpj15gYfF+47ml+kPx/5T
322 | zHAjxPY5CRCO8bMEYEuff5eL7FmwMXio80NaD3vieO/n1AhPYPWcjVAbBQgsdce1AcILQkH8L0ZySKcq
323 | APDSC8+ssOcUPMviX/LjR1dYIvCTu6dPn8Gz+fwsXoBKS8vp4osXCWmQjAs2uMBjoaeP/Rf9SSzw4MER
324 | LPhwkWP8F05aTCtn/RtmsoO6odtjGXTsJh7v/YK2fPqYyAGoya3D9V0JA0N5eXnU29v7MVzAmfGo8JXy
325 | Ap7/y59O2u3WCsTAR8f5iKsNyBJm76EFIGAA8MOYy5d/UywXi0ziuAUGIPx/ztzhBZ63hi3weDDLOSbw
326 | naoVYq2AjTiOIsaz5mW7gKUHq4hE1r/cPTw4Qnhw5DEsBt2a9QDYsmWL1eEI2NvavClFDrHwobdbTY85
327 | iwr/ifMS0i0cRmVboKOzU7h/F120mMrKIKa98dUKz9az7tOIA6ymj7v+Kvx52ZVjRvPs/1HdLfSd6hUC
328 | CAyIRP68PBZuh22BZAr3H6niLAH4qaF3shYAjzyyfglE9X2QuhdwziU6Onq5Lelunc1mNfT3u9NeAGJi
329 | sTcgu4Ks+6urp8IYvFgAIJYa4Fj/oc4D0NerqW3grDDi5B0S2Pfn5Vxe1uXl3WhZvckwNtlrwmsApzH7
330 | yxLVGTcV8OijG+/FzH2ACcoh22T0a7zBsI7mZU8l8xEYBCz22ThcvvwKYVUPDwnzw5pmxP/fOv0a9PTj
331 | Qqyzxc6FY/7s7lUikeNfkdAxDYkdnOCRKKEjEdPizmj0uaSkhL788st7sAj0UKK2xgUAmzY9fE1hYdGf
332 | IaKYoIoyLdGAU/mdATpz5nn09a9/A/aBeBbvXOGADLtwD+2/i/a17YZFXy5+k1cD5xRdKFK5OF+Ajbex
333 | Lna7nSdUEEGgAtgBCWPhGQcAZrpu8+Z1J2w2RwWImfXMF8yEFGC9KkuB4UEhkbOPmf/Qgbuh+w9CAuQI
334 | y/4KRO1uarhN8DyVJd3RgoUlVllZGbyY0/fB+o8Z/o1sN+MA2LRp09esVuOB8AONox3juF3PUqCmppYu
335 | vPCiESpLDv9y0sc97/+cPus+KmL91069Pqm4vRKD4uQXuH46uMBfQvRzFlBSFuN4AOAqh8PyEvLWU/LV
336 | lSBWKm1wWJhzCy6+eDFVVFQBBENVgZzj90XvZyLb55LSy2DpQ8XFyAlMpQ+x6jDzEfnTseUP128JjL+3
337 | km0/4wB44omNC/R68x72tVMJ1iQ7sLG4jpNC+IFSzhFgg3B4eFj22TmUyyJfytsfWxIz8/km/FzgiRMn
338 | Hp45c+YvRzP2se1dlJ5s3brV1tx8st1qNdsmYhaxxzOAlOvJdMklS8XoYiWKjIYJ6Vwr6/3m5uYdmPmX
339 | j7atjAOAO7h584Z7nM7CB9vbRdBmQhiCkYRlT6CqqpoWLFgopNh4gIBnPhvUbPSB+R8i7euCZPX+uBqB
340 | 8s03bVq3rbi46Fs9Pb2jXmkbLcrH4np+kLSqSgoQiWVkSIZMFWY+7qkrLS1li38v1vsX4+PolivDnR0X
341 | CRABgtWI3dxptdqtCOaFn7zNFBnTvU9IxASmTCkVngFnDSH5YswlGjMfK3w6TvgE87fC3VuRzkjGFQDc
342 | cV7CPXHi6Byv1+DU67Gb8gQrZ86cocbG8/Tz5i1YiYcylyMBg2Pwio9CnvWcnMKrnYhNrJw+ffrmdG80
343 | 7gBIdwDZVP/IkSM3QxRvnDJlisXlcgkJkW6Im8fHyR28vMvBKLh5u5ClfGNlZeWnSoxdA4ASVIxo49ix
344 | Y/mYnb8C41ciFCsSUxgIHD1M1u1lm4KZzUvRHNplIxOA2g8g3IPVvVeU7LIGACWpGdEWZmoubILrAIYf
345 | gplzCwqkZ/2Zmfzi8HKkdGCG84tnO/9nwEDUu1DlRVz3JKz83WPRVQ0AY0HVYW1iy5ZyzOBLwdSFmN2z
346 | IQkqodML8N+G//xEKGecsuHQitcnuKYJTN+JkO67eJ98NmoKY9EAkALRlKgCBtsOHjxoRb6eDhLBj9W7
347 | vlT8+HT7ogEgXQpO8PoaACY4A9PtvgaAdCk4wetrAJjgDEy3+xoA0qXgBK+vAWCCMzDd7v8/bYsdYouY
348 | w4UAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYAACAASURBVHhe7X0J
349 | nFxFtX71vs2+9Uz2fQWyQkhIyMLigqKoUR+KD3yCij5BUd4DwZ2HyJIQAYl57giI+CAiKgh/fAg8AgmL
350 | AZIASYAkpGcmk8kks/b09PzPV9030zPTPd13674991x/Y0LmVt2qr+p8derUOaccgh9GgBGwLQIO2/ac
351 | O84IMAKCCYAnASNgYwSYAGw8+Nx1RoAJgOcAI2BjBJgAbDz43HVGgAmA5wAjYGMEmABsPPjcdUaACYDn
352 | ACNgYwSYAGw8+Nx1RoAJgOcAI2BjBJgAbDz43HVGgAmA5wAjYGMEmABsPPjcdUaACYDnACNgYwSYAGw8
353 | +Nx1RoAJgOcAI2BjBJgAbDz43HVGgAmA5wAjYGMEmABsPPjcdUaACYDnACNgYwSYAGw8+Nx1RoAJgOcA
354 | I2BjBJgAbDz43HVGgAmA5wAjYGMEmABsPPjcdUaACYDnACNgYwSYAGw8+Nx1RoAJgOcAI2BjBJgAbDz4
355 | 3HVGgAmA5wAjYGMEmABsPPjcdUaACYDnACNgYwSYAGw8+Nx1RoAJgOcAI2BjBJgAbDz43HVGgAmA5wAj
356 | YGMEmABsPPjcdUaACYDnACNgYwSYAGw8+Nx1RqAYCcBFw9Y/6oauf6BLo69zQhyfaI6imHLuRYsWubdt
357 | 2xaleRbPMtfQob5inY+WH43nn/37WTR9Phbrjc2PxmK1ffE+r9Pp6JcUkKn18t9H7pojze9RIlFtsuyg
358 | KlzDS9DvwUYDz/ByiX8Z3BbH4EKJ4imCkbblI/Z1+PRL17/BLU1UmAAy85Px95mKZfj34/8siU5BeuC7
359 | /cNEKOXLA4WPF5CvD/lW4j9TKkr5feZ+Dv6Ny+GK9/X1BuPxuN/hdLQ74s7e/kFgJt9PfqbfGXc4HK5e
360 | n899yO3x/lP0xR9Ysmz1n0YE1UK/tCwBbNnyzPlOZ9/3K8srpjidTtEXixG2hHqaCaZvxdRXOu1YjlCl
361 | CV8bLgl5mWDGTp2stWV9QW2nR6iQSAr/czicqbw8wgccwkVz1OV2iX4qe7i1NSIc/decfPLKn6ltVb7f
362 | NxxWvR144okn3CUlrnvramo/2tMTFe3t7aKvr2g1LL1wcPkiQ8DlcolQKCiCgaCIRJoemzgldl5d3ep2
363 | q3bDUgRA7Ol9/vknnx7bMGZxU1OzIDWsn34s1UarDiS3yzoIkMbaT/sCR11drYi8e/DNiVPnLKytrT1m
364 | nRYOtMRSwrV1y5MPN4xpeP/BgxGpSvHDCBQ7Ag0N9aLxYNOzi5YsX2rFvliGALb935MXh8fW/xQrPwk/
365 | r/xWnC3cJtUIwH5VXx8WBw/uv2rxKat/qLoCkwtYggD+/Oc/+2qqS5vKSkJlHZ2dLPwmDzpXnz8EsB3w
366 | +/2Ozs7OPre3r2bBgtVH8vf17F+yBAFs2fK//1pfW/fLQy0t2PdnbzW/wQgUEQJkDhB1tbXiYCRyxZKl
367 | q26xUtMtQQDPPfePv1RXVrz38OFWK2HDbWEEDEOgorxctB1pe27xqacvMaxSAyoqOAF85zvfcZ+x5rS3
368 | a6qrx+DIL9tTHI5k2XrBv7c6ArkKBkzVudirA4GA6OrqOTppihhXW7vcMicCufbTtPFau3Zt1ecv/tem
369 | hoawq7Oza8TvAGyvu0/Qtmo0OgObhrGtKqYVgjxFB7ps4mESFqM+2rF2R8lhKAvIXq+Htrf9IhAKTZk1
370 | a95eq4xJtnab3s5LL720/mMf/eDButpqYsjujN8D2G5nXDy7t1Y0HfMJr0uxFaR2QRntdN1K9R1O50ec
371 | 7fdoWrr6M31z6DdSXWAVV1ilnSP9Tvnu0D6pacvQOkZp/wmieCwuuo/ChZ+eVJhzIQIJsYMElbxOyfO0
372 | 39kn4vSTya28NyZEdVm/OGdRjMrQt0f4hsfjFm63h8jCMXvx4sU7TResHD9QcAK4+uqrw2edsSJSm4UA
373 | 4P7vccfFQ8/MEPsay4TPw96BOY6xbV7Dyt8T7RWNjS1J+Td3emPlHxeOii9+vJm8VaENZP6ex+MhAnAz
374 | AQydjbkSgCNJAI8+N1UcaC4VXiYA2wh2rh11kpoYjcZEUzOMyfDlN5cAeogAxtRGxUUfbhGxPmgOmVuq
375 | EEBff8+sefOW78q1T2a/Zy5CObReEsCZpAHUZNsCJDQAEMB+IgDWAHIA12avQAOQBNCULwJwEAH0qiIA
376 | 3gIMmZQJAjidCKAqiw2ACcBm8qy6u8VAAKwBDCWA64gAljIBqJ7tXGAYAsVAAKwBDBm26667Lnza0kWR
377 | GtYAWKR1IlAoArjwQy3yOHCkwFW2AWQYXEkAyxZHaqoqRVf3SMeAvAXQKR+jvnihCICNgDqmFghgORFA
378 | NROADhS5KBBgAlA/Dwp+CqAQQBURQDdrAOpHkEscR6BQBMBbAB2TUBLAaYsjVZVMADpg5KKsAWiaA9bQ
379 | AE47mQiggjUATUPIhRQECqUBsA1AxxyEBrCCCKCSCUAHilyUbQDa5oAlNIAVy4kAKlgD0DaEXIo1AO1z
380 | gAlAO3Zc0mIIFGoLwEZAHRMBW4DTl58SqagoZxuADhy5KB8DapkDhdcA1hMBLGAC0DJ4XGYwAoXSANgI
381 | qGMmrl+/Prxo4dwIcqaxH4AOILlowRyBeAugY/KBABYvPCFSXl7GBKADRy5aHFsADgYaMlOZAFh0jUKA
382 | twDqkSy4DUASwCLSAMpKSQPoydiD1IxAnBBE/UDboUQxEABrAGk0gJOJAMqYAOwgo6b2sRgIgBOCDJkC
383 | mzatD8+ZdSIRQAlrAKaKx+ivvBgIgDWAdAQwmwiglAlg9IuouT0sFAHwKYCOcd20aVN47uwpkVImAB0o
384 | clEgwASgfh4U3AiYIICpkdKSkOjuYSOg+iHkEgoChSIAdgTSMQeZAHSAx0UHIcAEoH5CWEMDmEMaQIg1
385 | APXDxyVSESgGAmAj4JA5e/fdm8KTJ06NhIgAengLwBKtA4FCEQAbAXUM2t13300E0EAEEGQC0IEjF2Uj
386 | oJY5UPAtgCSASUQAQSYALQPIZQYQKJQGoMYIyFuAYVuAu8NTiACCTAAsyzoRYAJQD2DBNYDNm+8Oh2vH
387 | EAEEeAugfvy4RAoCxUAA7Ao8ZMpKAqgjAggwAbA060OACUA9fpbQAOqJAAJMAOpHj0tYwg+ATwF0TMTN
388 | mzeH6+vKmQB0YMhFEwgUgwbARsBhWwAQQAURgJ9tACzJuhBgAlAPnwW2AJvDDeGKiN/PBKB++LhEKgJM
389 | AOrnQ8EJ4LHHNofLSpgA1A8dlxiKQKEIgG0AOuYiE4AO8LioJYyAahyB+BhwyKQFAZSXVkZ8Pi/ZAKIZ
390 | pzTnBGRpz4YAawDZEBr+ewtsAR4jAvAyAagfOy4xBIFCEYAaDYBPAYZpAEwALMnGIFAoAmAbgI7x2/7Y
391 | Y+GeMl/E6/XwFkAHjly0OPwA2AYwZKZu304E0EUE4CECiLINgAVZOwKF0gDUbAGYADIQgIcIIMoEoH32
392 | c8mCeQLyFkDH5JMaQLcv4nEzAeiAkYsSAsWgAbARcJgGsD0c7W6LuN1u1gBYjHUhUCgCYA1Ax7Dt2b49
393 | 3MoEoANBLqogUCgCYBuAjjm4Zw8RQAtrADog5KJJBApFAKwB6JiCIIAjh49GXC4XbwF04MhF2QagZQ4U
394 | 3BOQCUDLsHGZdAgUSgNQswVgI+CQkWMCYGE2CgEmAPVIsgagHjMuYVEECkUAbAPQMSFYA9ABHhcdhECh
395 | CEDNFoA9AXkLwGJrEgJMAOqB5S2Aesy4hEURKAYCYCMgawAWFZ/ibxYTgPoxZA1APWZcwqIIFIoA2Aio
396 | Y0KwEVAHeFzUEkZAJgAdE5EJQAd4XNQSBKDmFIBtAGwDYLE1CYFCbQHUEAAfAzIBmDT9uVomAPVzgI2A
397 | 6jHjEhZFoFAEwDYAHROCbQA6wOOilrABMAHomIhMADrA46KWIAA1NgA2ArINgMXWJAQKtQVQQwBsBGQC
398 | MGn6c7XFQACsATABsKSahEAxEABrAEwAJk1/rrYYCIA1ACYAllSTECgUAfApgI4B5VMAHeBx0aI7BeAt
399 | AGsALLYmIVAoDYBPAXQMKGsAOsDjopbQAHgLoGMiMgHoAI+LWoIAWAPQMRGZAHSAx0WZAHTOAQ4G0gkg
400 | F7cOAmwDUD8WTADqMeMSFkWACUD9wDABqMeMS1gUgUIRABsBdUwItgHoAI+Lsg1A5xxgDUAngFzcOggU
401 | SgPgUwAdc4A1AB3gcVFLaAC8BdAxEZkAdIDHRS1BAGo0AA4GGjJpmQBYio1CgLcA6pFkG4B6zLiERREo
402 | BgJgDYA1AIuKT/E3qxgIgKMBmQCKX9Is2oNiIADWAJgALCo+xd+sQhEAnwLomDtsBNQBHhct8CmAU4yp
403 | jQomAB0TUS0B/PXZmWJ/c7nweWI6vspFRyMCDqdTRHuiorGxJdE9jSbuRDGlsJP+3p8Wrp6oU4yti4rP
404 | fbRR9PUJ0RfP/EGPxyPcbrdgG4DmLYAQHne/+POWMrGvySt83vSDMhonNvcpNwQcJH+x3n5xrE3H4kB1
405 | 9Mf7Rbw/Th+Nkuj3ZGQS4hrRUCPERR90kvALEUeRDA8TQAZgctUAFEqPxXvk4Di00ntuc4nfKkoEsCg4
406 | hNPhSbZe2yIhS/Xj/+NEAJhriUepLfW/HcQ6bqcvK1oKAbARUKMGoBRzkUYGpueHERgZgQHh75fCPPiR
407 | C0jqPEq+0p+i7ifeUV5KLjlD5h6qjvVlJxrWAAzRAHjSMwKZEUgI+sA6jdXZ6XTJHwd+HE7600kaQmIV
408 | SdUipeBTedTRTxpmPN5HWwH8GaMf0gTklmBw3WrGggmACUDNfOF3c0QgVeilsLtgbPPIP6XgO/CDytKp
409 | jUNX7qHvgAzAC0ki6IuJvlgvGfx6JUEkCIFoJAeVlLcATAA5Tml+LTsCiZUaj9PpFm6Pj4TeJ1wk+Fjl
410 | B56EAGey4mf/ToI4hhIICAEkEOuNiliMbFJEDPjG4C3D4NqZAJgAcptv/FZGBJTVHkIOgfd4/ST03uNC
411 | r6jx5kM4sOqjTX19UdEb7SZC6E5uFYZrBbwFYAIwf16O0i9Iwacf7OM93oDw+gJy5Zdr+6B9fyEAGBB2
412 | bAt6o13000laAW0RYGdIbg+YAJgACjE7i/ybtKbTmTwMd15fSAo/9vVQt9NZ9gvd2YSwO6QWACLo6ekQ
413 | /Uki8Hq97AiUboDU+QEUeoj5+/lCIGF1d5DgB6XwO10k+Ekrfb7aoPU7qUQQJRKI9nQKN51fe4gE+vp9
414 | s+bNm7dLa91Glyv4iToTgNFDWtz1Keq+y+MV/kCp3OMXi+APRV4SAf3EY3R60NdF2gz92dU1ecHS1W9Z
415 | ZZSYAKwyEtwOqTrDku4jwceqn9jjj+BfWySYwWjp8bipZ32ivfXo7JMWL95plaYzAVhlJGzejn4yoGG1
416 | 9wfL5Z9wwtF3fGc1QB0iEAiQXaC7iQyCa6dMmfKkFVrIBGCFUbB1G2DoiwsPrfj+QJm0mo+GVT/dkDqd
417 | zv6ysjIHtjmdnZ1XTps27cZCDz0TQKFHwMbfV47wfP5S4fOXyBXfitZ9I4cIJEAnAo7KykoKW268a+bM
418 | mRcYWb/aupgA1CLG7xuCgCLogVA5WceDo1DlzwwTSIB+HOFwWLz77rvPEAmcSZpPlyHAqqyECUAlYPy6
419 | fgQU4Q+WVJJxzJ/0q9dfbzHVABKgx1FfXy8ikcgun8936uTJk4/kuw9MAPlG3ObfGxD+KunDD+Of3R+Q
420 | QFNT016/379o4sSJrfnEgwkgn2jb/FupK7+bVn4W/oEJge0A2QRenzVr1kLaDnTka6owAeQLabt/B158
421 | 9L9AqCK55+eVf+iUaGhoAAk8RzaBJfmaLkwA+ULa5t/BUZ8/WCa8ZO3nlT/9ZMAR6JgxY2AYvJ80gbX5
422 | mDJMAPlA2YLfgDqeSyILI5oOgcc5f4CcfEbrGX8qTvBmTE0tliuGMAzSmCiGwWtmzJhxXa5ltb7HBKAV
423 | uSIsl4hdp1RXSZdbmc+GVh0XBdqYRQb4louy8wRLq2VOntF+zu93BYTL4RadsXaZUFRtbnKQAHkKOkKh
424 | kOjq6lozadKkJ8ycakwAZqJroboRn47cdmUVlaKiologPLW3t1e0HTksjhxpkUk1QARGPgktQ4hgSbUk
425 | gdG8+mPVL/NWiJ1HXhH7OvaKM8a8X3TEOiiDNbIFqRMzkEBpaamjra2tg04Gxpl5PKiuZUbOjmRdHA1o
426 | AqhDqsSqD+GeOm22qKyiRPZDnqNtreLNN14T0WhUxqwb9dhh3w9VHyt+hbdSvNCyRdzyyvfEoe5Gcdnc
427 | b4r3jTtPHIkeTt4xoB7VpI/An2bPnv1B9aVzK8EEkBtORfsWVn08c09cKEKh0oz96OnuEtv/uVVqCbQC
428 | 6e4vVnuk7QqWVFkga4/u7qStAMLvdXpFqadMPLL/j+Knr98qtRy30yN6+rrFl2dfKc4a+0HNJADSrq2t
429 | xcnAJ8goeJ8ZvWACMANVC9XZS4krJ0ycKsaOm5S1VY2RA2LP7p3knUcx+LqeRDLOEO37R6vqL480XUHh
430 | IQK4e/d/i/vf+o3A/h8/eLop/r833iu+MucqsWbM+0QraQJqt0DYCpAtwNHe3n6MjgbDZrgLMwHomujW
431 | LozVHMa9+QtPzUmokdPuxW3/Jw2FerQAqP5eP0X30bFfIqx39D0lnlK5yt+x40bxv5G/iTIP+TfQyq9Y
432 | /2ETAAnEKAkItgOrGs4WrT0tmk4H4B9A7sIbSAu4zGgkmQCMRtRC9UGQA4GgOGn+KTm36tXtL4j29jZa
433 | ubXZAhKGP6coKatJhvZmvzUn58ZZ4kWHKCdjX6TzgLjl1e+T0W87/Xdl4rKRIQ9IoKuPEoTStuCrJ1wr
434 | lofXSBJQ+1CcgCRkIvOp5Cq8R235kd5nAjASTYvVBQIIBkPixHkn59yy1155QRw7SgSg0RiIFd9HK7+P
435 | zv3Vqrw5N7IgL/aTkLvI2Fcltre+KNa/8n3RRMY+kMHIAjZAAl+c9Q1xWniV1BzU+gnU1dWJ5uZmwx2E
436 | mAAKMpny81HFoDd/4dKcrPtYvV/c9gxddtGbzL6rrp0oj5UqVEonDTj/S3Mnn7oarfE2hBV7/TJPuXj8
437 | 3T+Ljbtukfv7kBs5DEZ+oAX09vfSyUCT+OD4teKSmZeLnni36pMBHNsitTgd3c6cOnXq69m+m+vvmQBy
438 | RapI34MRcPKUmaK+YVzWHhxqbhRvvP6qJAstjkFY8ZXkHqNl9YfwJ4x7fnHvnl/Szy+Ej/4eoH/Ltoor
439 | W4Ao3Wj9qSmfEx+e+C+0Jegi4dcWB5HUAn5LtoBPZx3MHF9gAsgRqGJ9DYY95NLHNsDn82fsRh9db/Xy
440 | i1ukc5AmhyCs9rTqY/WHFjBaPP6wysdotd+4a5147N2HpRYAbSCb8APo9tgx4aOrw78w6wqxuuG94mj0
441 | iNQGtF5tT05BcnwI3zClE2syYk4yARiBosXriFFaahiSZsw6Ma0vQHd3p9i1c7vo6uyQF2tqebDiI7PP
442 | aPL3x/6+mVT39a/+QPzz8Da5/4cdIJdkpW3RVlEXaBBfnXuNOKFyPvkCtCZXfu0iB60MWsDhw4evJQL4
443 | gZZxGlpGe2uM+DrV8eqrT9T3dHkPYtWBJxo/5iCAFR4uqdU1daKyskZeUhGj1QRuwFD9YS/Q4wWIFR8Z
444 | fuD8U9zqv2LsqxQ7yK33lle/Jy3+cPPNvnLTHQCk3sP7b07FPPE1svyHA2MEyMCoh1yE6ZSm/W3aBkwy
445 | os6CE8D+/VuqGw/2IlWys6enx4g+cR0ZEEgEA8Wkeo6jOvknvSuDgXR4/6EeHBsi4EfemJ34v6J7pLHP
446 | 4ZHC/mTkMXH7jh9Jiz3O/LM9irEPav6q+rPFF2d/g2wFPtHeeyxbUVW/B0mXlJQIihNYTiTwtKrCaV4u
447 | OAFs3brV09/XvS8Y9IcpVbLe/nD5HBBI3Z9rMfYN/UTC+FciDYDFuvonjH1++gmKP7x1l/gteffBsQfe
448 | ftn2+4rTDxx/PjbpAvGpqZ8T0XhU+gBk1xpyGLAhr8A9+NChQxuJAL6gvvTgEgUnADRn25YnHy+vrFjT
449 | 2pr3nIh68ePyMpU3uf2Sz7+80MPgm3wgfG4KtlH8680AHN+AsQ/E+N/kz//X/Zvlqu8lA1424ce2CqG/
450 | EPSL6YjvPePOpVX/qCQAM4Qf/YcGQIvlAcoXMIEIXJerpSUIYOvWJ79YW117R3PzoVFjPTZjolqxzsTZ
451 | v0v6/SfCXo1T/5Xzd5BKG6nWYTKqdVKIbXahVIcU3HiPRFvI2PdfFNH3rIzsQ4RfLt852ntEVHqrpbvv
452 | wuol0tjXRyHAZgk/egZ/ABh1ybi7gEKFX1LXWwtqAJQRtWTfOzsPBfxBX1dXNzmTxS1BTHqAtUvZhPU/
453 | QNb/CkNXfyXSDivznTtvkf72V5zwLXFK7XJpVIsZIGQQ0gpflXizbac09u3reEu69eYivGgfjH3TS2dL
454 | N9/xoUmyXbmQht65gW1bTU2NaG1tvWr69Ok/1FOfZQRt69Z/XNEQrr8pEklYpPkpDgRAAP5AubzG2yj1
455 | X1n5S9yl4ldv/kTcv/c3cj+OVfmzM/5dvH/8edK4BgebXIR1mM0iua2AsD/T9Hdx22s3UPKOdhnWm+3B
456 | 90A+EPZldavEl+f8h9w+HCO1P58PbhYiAniUcgW8R893LUMA6MQLzz35TF04vPQgkQA/xYEAtgChUtr/
457 | y4w/+tX/hPB7RKm7XPxm90/F78jzrsxbTnYAirEnF1psAT4y8VPigmmXSAedTpWGNtQP5xwI7eZ37hO/
458 | fOMO4aItTNBFsQtZti8QfrQBmX7OHf9xcdH0S0nd76M2dGgiIj0jnEwZdojsAPWkEWhzLUxu2vS0w9Cy
459 | LS3Plu3Z0/tiQzg8pbFROjrxdsBQhI2t7Pj+nwyAZAjQ7fufegz3292bKM7+Z6KUhB9Hc/hd6lHbivAZ
460 | 4lJKuBFwB6XRLdcHWgTsFPfs+bl46J3fixAZ+0AI2YQf9SO0F/v7TxP5gAA6yNOvR6MWkmt7M72H2IBk
461 | 7MUsuml4l9b6LKUBoBPPPvtsmcfR96dwQ+2KY8eOkbWTfKd5S6B1fE0tJ8//yXMQJwB6V/+Etd9De/By
462 | 6XP/mzc3SpU8ndstthowts0on0PONt8SY4PjpZEwmxAjZBfHehvJpoAEHmNCE46TSzagIPhx6u/XT/i2
463 | WF5/hmjsOmi6sW+kNsF3o7y8XJCMnEdegQ9ma3+m31uOAJSGUlTa5bFY/Hs1NZWlIIBoT1TEKLx1uJU5
464 | tQuKCpquWzIHbrL61L8rX8z2e6mQJF/O5ZtDv6H899A/lXoVC3rqn8PblvQF76dQ34KPHYQeN/z4Azj/
465 | 16f+Qzhx7PanffeLX5Pwl5CKns3nHk431f5acTm5286rWiyNclDJR7ILoE7k7Nu061bx0uGt0uKfi3sv
466 | +tdLR3vLKJz3oulfJs0jYLiTjxohhiGwqqqKPDmP6EofXvBJNFKnKQtK6MA7uz9OjH8uZVqfT1eq1tGx
467 | p8vAkyY1mBf0XXmxjtMZd5DMkfB79QqcEZ1JGADLkgSgz3CLPflLh58X12z7Cq385Ylz+RwGGsY7+Alc
468 | MvOrlH/vA2SMaxvxDF4580eSjp9SgM+jBx6S30Nuv1y+Jy3/ZbPF1+ZeK8aGJubN8p9uvKqrq0VLS8uv
469 | yBB4odbxtDQBDO0UTXrvtm3bAi7XMUdZWam+JUcrYgUqV1ER66+qWhK74471L3u9vmnd3d0JhSTd0Xs6
470 | ZUItWlnqgLBAG1mwYLGYOHGy7jgOrMJYuf+6/0Fx956fafDC6xZrJ39GnD/ls1m98AZCfAPivr2/EveQ
471 | rcFLbru5eP1h+KF5VPpqZKDP/OqT83L2n27a4SSAXIIfx/XiWqdlURGA1k6OlnI33HDDOJ/PtQ/9icU0
472 | G34NgQOrPzIOLVu2QowdO043ASgefziagx/+HeSH363GD59OBOCUg7DbL1L4rYe2EzDSZXqU0wY4AT1x
473 | 8K/ka3CzNOjh6DH745B1u4i0Lp5xmTg7D95/6dpUVlaGwKCXiQDmZ29z+jeYALQiV4Byt9128+WBQGjd
474 | sWN064zOPbfe5sMugzasWLFKVFfXSG1A/5OIxAMJ7KBce+so7Vak60Ay7Vb2qQq1HsZBhN9idUY47siR
475 | eAORf6+0vizWUY6/JjLu4fvZnqH+/+eT/z9sBGb5/6drD44COzo63qEtwMRs7c30++yoaq2ZyxmOwLp1
476 | Nz0eCgXX0KAbXrfaCpWTmZUrz5DWaOQcMPKRsfhdjSSUP6AcfC+ojsVHGC5IYK6Mxc9uHITQN3a9Sxd7
477 | fF+8duSfORkH5bFkUvNYSRGAl87+uswWZHQEYCZcg8EgYgIOU1AQUoZrGgAmACNnrYl13XXXXWUtLQcb
478 | 3W6v3wp5ExQCWLPmLApOKTWcAAClzMZDx29Qz5GLT202HpwqYDsgs/HQ9gDCOtIJQSLVd4/4yY6bxN8j
479 | jwxL9Z1peBOaB3IAnESkc62oD46Vx5JGxkWk+3YgEMD9gZ1EAFVEAJpi6ZkATBRaI6vesOHGc0j9/5NV
480 | /CKUOwdAAKEQCarBGgCwU4x1WFXv3f1z8Tsy2CVCdtXl4zuf8vGtnXyBtCkgZDcTCeB7MATiRABOSL9/
481 | 69fHL/vI5YQAQl/rD9Ox5DfFSVWLkjcCwVZjjpiBACiHRg95A1ZqvTTEnJYZOfO5LonA+vU33kkr7efh
482 | HGWFJ0EAQqxefbYMTzWDABQSwNk9nIIeO/CwPLqDVpBrRl6E5cJTEFd0XTLzMhlPgFx9I5HAoOu+dq2X
483 | RBSUGYCzH6UkjiU9lAfwq3RB6DmkebRJ24CWmIVs45wkgC7yCqyiqEA6FlL/MAGox6wgJdavv3mvz+ed
484 | JI//LPAoW4BVq84UsEabRQAKCcDijpx8L5PzDuwCLd3NWXPyJ2BCmq6YNA7OrzpZOg1V+WvkUV6mBwKf
485 | euHnra9eR1d7tcgtQbZnwDjYLT455ULxickXYOW+PQAAELFJREFU0bFkt8wGbDQJwAZA86GNNIBa0gA0
486 | WWGZALKNqAV+v3HjTbNiMc8OZPgt9PGfAodyCnD66avJI63aoFOAkcGGAME4eKBznzwh2NX2qjTWIb1Z
487 | tgdCDRUdbsPI1TejfK4khZEiGBPfqxT7O96Wt/6+cXSHJKFsWZQSxsGoXP3XNLyPtIGvZT2WzNb+dL/H
488 | KQAZAd+lY8Bx1Kbs6kmaSpgAtCCf5zLr1t18eWlpaB2d+Rb8+E/pesIPIC79AMLh+rwQgPLtEtoOdFFE
489 | 3u10L99TjY9LUoDancs+HduBgDskvkQ5+5ZTQBFIIZYlVTe2H4gAvO21H8rw4dy+pyQIVY4lrxVVvuoR
490 | tx9qpxUShNKW8DU6BpyrtqzyPhOAVuTyWO6mm374OO2z17QbdfyXLRRiQMrlapfuolD4AOAGoZNPPlVM
491 | mDBJtyOQGjjlnpyMdS4KG0bQ0ANv30179BBF9fmzkgBWZ4Tv9lFk3wXTPi/Om3i+DDFGmO9IdgGEC2Mb
492 | 8kvKT7D5nd+RDSK376FfIBkIPwKX4EYMQ6QRT0VFhTh69Og/SAM4XWt9TABakctTuUceeSTUcihy2O1x
493 | e6Mya3JqQBMaYZ4vsMNJqmy0VxxubU2j9vaTBToq5s1bIGbOnA1rdJ4QSXwmkTHIR8bBUgog+oP4+eu3
494 | yQs6c3HnhaAjmcgxSipyzviPiM9ScA+CiLKRQCKPAL53v/j5G7dJwsgWs4B3YBgEeVwz/wYxo2yOdBYy
495 | 4kEsACUF+R0RwCe11scEoBW5PJV76KH73x8MBB/u6KBbZmU0ZP4epArHXn/f/v2k4seGaQLRaI+YNm2m
496 | mD9/odwC5Ns7MdVYh4s7frLzJtHSc0ge42V7IJgQehj3TqhYIO0C2Fpg757pSXVXfq75KbHhtetlJqBM
497 | mYQUbQPBSlfPu17MpbsCYBcw4lGiASkY6HraAlyttU4mAK3I5anc5vvv+UlJRcUXKOwzT18c/BmXyyma
498 | mg6Jo+R+jL+nPrh3sL5+jLQD4BQg3wSgtAWGOqyy//XyVdJQBy0g25NI7UUXo5Ah8JSa02RykSAlF4Gz
499 | ULZH5hKkb+459oY0Dr7dsWdYLkHlNAAkcwXlEMCtwId7DkvdxYgH2zIEA9EtQReQI9BdWutkAtCKXJ7K
500 | /eEP9+wOBYNToAEU4kHiCfgeNDY1D7szEEIPL8BVq86Q2kF+E7cMvsEH13c1U5x/Luf1UjhxNEd7/49O
501 | /LT41LSL5QUganMMwjMRBAJNYOuhZyQJYLXHg7qg6n959n+Is8eeK1p7WrLaJ9SMLzID44e8QhdRYtAX
502 | 1JRNfZcJQCtyeSj3l7/cNzPe596Joz8zz9lH6oqTjIBIxLL/wLvJG4UGpoziDQhfAFik89XG1NRhaiMH
503 | U/P4/9uMr1CC0Q9LW4Ba4QdmSm4B/P1nr/9YPLzvf+R2ALYI+Bl8juo/b9L5SY9AffkSho5R0g24nbSA
504 | eno0B4cwAeRBkLV+4o8P3vvdktLybx050lYw9Rptx+oeaWykyLPOQVqAzJJDe/8lS5aJ8eMn5OUkIOEe
505 | nHqDzyaZOSgX4x/6gj04zvIvm3OVWFSzVHcsfyLJqF+eQvwPnUb8+s07SbPoFJ+hEwbkDgQRIJ2Y0e7A
506 | CMCiY+Et5AR0qtb5hXJMAHrQM7EsCZfzwQfubfT5AjUU8GHil7JX7SIC6KBr25Ct2Yl7BFOKwPo/Y8Ys
507 | aQjEqYBRe9x0rVJWXBDPJrrB5xEVN/igLNT1qaXTKZvPt8SEkimGZfNR8hkiezHaBNvAv1H6cmgVZtwQ
508 | BANgMhvQjbT/vzL7CGZ+gwlAD3omln3ggd9fWVFeegOuSyuUcU3pHiYcfg4ejIhOIiPYBZQHGkBlZZVA
509 | WDCcg8y0A8AVF1Z7uOa+0LIlpxt8UvP4L6ldIb5CKz+i/szI449vIUsxHgQemXVDEPDHlou8AM+cOnXq
510 | 43qmIROAHvRMKvuXBx6YFHXE9mKg832+nqlL2AYgDPnAuweVdNTyVSUoaNWqs2hSIiYguxVdLWzS6k43
511 | +LzRtoNu8Pk+uebmdoNPIo9/jzwhOHf8WnEh5fEnipKOP0b75R8nS9RMZIkQYbMexACQVniMzv9xJ4Au
512 | 6zATgFmjpLFeWu09Dz5w/6tlZSXTaY83LPtv/tyABqccxHdddDU1eZ7JEwFFK4B2AmJYsGCRmD59pqGE
513 | NZAqvEI83fj/xG2UJgzCm+sNPvD4Q/zEhTO+JAkARFCoPP4ap0PaYkkHoAeJAM7TWy8TQAqCv/jFuoq2
514 | NoeP0i0bc1ircnSczh6vxxP8RU111ZktLcqZsXWGCOG/0EqwLTnS1nbcMQgEgHiA5ctXSQ3AiC1LqnHt
515 | wbfvlca1XG/wAexQ8eGl9+9z/lMsrVtp2H2CKofU8NehiSXTga+l47/79X7AOrNLb080lr/11ptXx+P9
516 | F5E9dCkptBPI2YVSbmusTGcxrKoU8isvQ4EQZYs60/k5zcXRrlQhH5wdSP82IPV4DS6+D5Orb67XdSei
517 | /lrlZZ3wvZ9WNkscIQecXAKFNAOSx4LJNGAdfr+/RmsOgNTm2pYA7rxz3dLu7tgdFGQzHxMarq6F9GZT
518 | BsUKbchlPg8lp56ebjF37knihBNOQox6LlVkfCeTg83IQjwQ97+o+lS6rvtqedxnlOutrg4ZWLiurg7e
519 | f5to9b/EiGptSQA//vFNV3q9/htcLjeyqppquTZikIqhDhAXUoMhRRji87H31vJAaPfSMdrN5GL7ThoX
520 | 23R1JoJ7olLtf++4D8lU3SCoTtrzj6aTbnj+0coPgj2RrgN7RQu+Q8vYjgAotv47VVXl325v78CKz5eP
521 | GjGLqA7FGAinoIkTJ6k2BkKIcSswjvd+Smm4RgqyGazCOqTLLYJ4kPvvYzL3X6c8hjPL0m8QZKqrSe79
522 | nybj33LVhTMUsBUBUFqtteXlZfdh1adLLVj4jZpFyXoQHITsQCtXnik1ADU+ARB+3L571dYviT3tb4iw
523 | vyGnfTtScCNp6KWU4GNl/VnS8643S4IPg7udl+pgfEXwT3Nz89lz5sz5m1EftQ0BrFu3jhK6xRrJh9pL
524 | Z+ss/EbNoJR6FC0A0YHjxo1XrQUg2++BznfEdRTV10ZptkvcZRlJAPYACHt9YKwM5Z1VcaI0/sUp+m40
525 | qf2Alyz//ZT8w0F7/xcp9HehkUNnGwIga/8NtPpfiSMsfsxDAFpAZWW1jBCEBqBGC0CrEGa748gr4gcv
526 | XymifVHpYz/Y+DeQautEuvTjcsrDXxcIJ/Pwm9evQtbsJv8L+P6T59+aSZMmPWFkW2xBAPfdd5/3wIF9
527 | B/1+b5VeC7WR4I/GuqAFwHvxlFNOFVOmTNN0IlBJ6bOeb35a3LD9WtrHI8tP4h6A9Mk2vdLBZ7Q+WP3J
528 | 8cdBqv9jtPqfZXQ/bUEAGzbcssLn8z0J4Ve7IhkNuB3qgzOQ3x8QZ575XoHVS22YMAQdJPDEwUfI7/8H
529 | 8uZeRNwhlx5+PjHlQvHJybgF2Jx021YZIwg/5fynxExOnGpMmzBhwm6j22YTArjxG8FgyY9g+TfCS83o
530 | QRiN9XV3d1GU4GyxcOHJpBF0q8YdMfU4EkT+vY0718kIRB9pApfMvJwu+fiAqRduWGU8cJTZ0NBAQVgH
531 | r6Oov2vMaJdNCOCWH5MH1ZetcquOGQNptTqhaeH6cNweHA43SBJQ+yCRJrLs/OqNn4hHDzwkrjjx22Jh
532 | 9ZKcLvtU+y2rva8Y/igV3F469ptiVvtsQQB0q+5GCq655OhRa1yrZdZgWq1eGARLSsqkcxCOsdRuBZQk
533 | nNgSHKPrvGp8tTIYaLS49WYaL0X1h+MPYbaQDH8vmjW2tiCAW2+95fpQKPCfvAUwaxplrhdbgcmTp1HW
534 | oKUyYchIN/Gkq0XJ/OtxuuXNvaP9gfCT6u8Ih8MiEol8nVb/m83ssy0I4Pbbb/qU1xu6Cw5AbAMwczoN
535 | rztxKtAtFi1aQjaBmYhjz28DivBrY8aMwb7/j7Tv/5DZzbcFAWzcuHFCNEoXvCEVtAnXWJs9SMVeP2wB
536 | IIKEPaBe09FgsWOQS/uVIz/K9b+Xcv3NIkUg8yUFuVSYwzu2IADgsG7djU9R5N9puF+Pn/wjgNRhdBQr
537 | U4fhNmGrZDrKPxLpvwjhJ2cfR1tbWzfN0xljx47dl4+22YYANmzYcGYo5PtbMg4gH9jyN4YgAKGH8J9+
538 | +hoRCAQpk9Do39PnMgkg/JTjz4HFiQx/CyjO/6Vcyhnxjm0IIKkFPFhVVfmhw4dbjcCO69CAAJyxENW2
539 | YsVqqREgm5CdH0X4k7aRFZTk86l84mErAti8eXPpW2+9/nppaXk9qVr5xJm/lYJAggSqKYXYStIEArbd
540 | DihqP/xT6O95F34Mia0IAB2+/fbbx8dinc+Vl1fWI8ElDFT85B8BkACut1627HS5LbBjjEZtba0gg18P
541 | uUsvp5V/a/5HwYYEAJDpVKC8u7v9LjK2fAAea5h8ChHwMWH+piFsALAFnHrqaaKurl4eF472WA2s+lh4
542 | k+f8b9GefyUJ/zv5Q33wl2ynAaR2f8OGG8+hC3iupkFZFgj4k7+yNSR5nYfIMgwbgNPporTiiyl6cKq8
543 | iJT+bVTma1A8/GADoXP+R8jJ5yN68/rrHTCe7VIj+NHUWMx5ajzumkuZbCrjcYfb4YgXKDew3iEtvvI9
544 | Pb2kgfWKpUtP944fP/4ztCVA8gtEwI0KIoDgk2bjQEYfaDh0EvUdSur5XSuMFBOAFUaB23Acgd27d59I
545 | GsC9FAU3hwJhit5zEMJPar4Dq35jY+N+2u//S74t/SNNLyYAFj5LIrBjx47vUiz8t5AJp7WVUn3R5Q1Y
546 | RS3Z2DSNUnz6serDxkSr/q2k8n+dtBpcFWyZp2gAtQxi3JC8IbBnz56Z5EG4nk4L3ouP4ui2GE5tkMAD
547 | JxtIhkJW/mdIA7isUFb+bIPFBJANIf59wREgbeA91IjrKTXWApzSwFAI12KrPRB43NqLPw8dOrSLQqCv
548 | MeL6LjP7yQRgJrpct6EI7Nq16/1EAN8kIVsGL0K4dRc6zRtWe9qqUN6DEhloRr4lL5PgX08Xd/zO0M6b
549 | VBkTgEnAcrXmIbB3794lZCj8En3hY2RcC8CyDldaHCni72b7cihCDy/GpJrfR998kH5uo8Sdfzev58bX
550 | zARgPKZcY54QICKoIJvAh2k7cD59ciWRgRfCCSLAD1ZkhRC0kIJyBTrqREYjrPTQPFAXGSap6vhT9O/3
551 | 0InFH0grac5Ttw39DBOAoXByZYVCgAyEVU1NTcuJEN5HArqchHZ2KBRyKQKr3FEAI6KSnyCVFIYKOwQe
552 | /6YQCtzG6b93Qejp3x5FlmmK2osUqr9GfZcJwCgkuR5LIfD2229XkmYwn7QAJNY4gQR3Ggl1mIS+ihpa
553 | Rv8dpH/3KI2mf4+RYHfSfx+lv7fS75rond1kwX+F/txJq/xLxbrKjzQwTACWmrbcGLMRIOF2k4U+QOTg
554 | o/wEbuV7dMIQo3+L0jaii4TfekcMJgHDBGASsFwtI1AMCDABFMMocRsZAZMQYAIwCViulhEoBgSYAIph
555 | lLiNjIBJCDABmAQsV8sIFAMCTADFMErcRkbAJASYAEwClqtlBIoBASaAYhglbiMjYBICTAAmAcvVMgLF
556 | gAATQDGMEreRETAJASYAk4DlahmBYkCACaAYRonbyAiYhAATgEnAcrWMQDEg8P8BQKc6w8hxAbsAAAAA
557 | SUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAACAAAAAgAIBgAAAPR41PoAACAASURBVHhe7L0HYFzFtf8/
558 | 24tWqy6527IkW3LBgG2MAQOmBkIIpEAaNYSQhPSEvJK8vJf3f7+XhGpTTQshBHgONSTUEGIgBIPpARds
559 | gcG4q3ftavU/Z3avLRvJmr3a2/Z+hyhWmb135jNnd773zJkzHoECAiAAAiAAAiDgOgIe1/UYHQYBEAAB
560 | EAABEBAQADACEAABEAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAA
561 | AhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACw
562 | ARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAAB
563 | EAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQ
564 | cCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEI
565 | ABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46
566 | ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIg
567 | AAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAA
568 | AhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACw
569 | ARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAAB
570 | EAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQ
571 | 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
1039 | YMBnk+bmEAAAAABJRU5ErkJggg==
1040 |
1041 |
1042 |
--------------------------------------------------------------------------------
/src/Mstscpw.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Runtime.InteropServices;
4 | using System.ComponentModel;
5 | using System.Security.Cryptography;
6 | using System.Linq;
7 | using System.Text;
8 |
9 | namespace RDP_Portal {
10 | /**
11 | * By ChipForster
12 | * https://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/
13 | */
14 | class Mstscpw {
15 | private const int CRYPTPROTECT_UI_FORBIDDEN = 0x1;
16 |
17 | // Wrapper for the NULL handle or pointer.
18 | static private IntPtr NullPtr = ((IntPtr)((int)(0)));
19 |
20 | // Wrapper for DPAPI CryptProtectData function.
21 | [DllImport( "crypt32.dll", SetLastError = true,
22 | CharSet = System.Runtime.InteropServices.CharSet.Auto )]
23 |
24 | private static extern bool CryptProtectData(
25 | ref DATA_BLOB pPlainText,
26 | [MarshalAs(UnmanagedType.LPWStr)] string szDescription,
27 | IntPtr pEntroy,
28 | IntPtr pReserved,
29 | IntPtr pPrompt,
30 | int dwFlags,
31 | ref DATA_BLOB pCipherText);
32 |
33 | // BLOB structure used to pass data to DPAPI functions.
34 | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
35 | internal struct DATA_BLOB {
36 | public int cbData;
37 | public IntPtr pbData;
38 | }
39 |
40 | private static void InitBLOB(byte[] data, ref DATA_BLOB blob) {
41 | blob.pbData = Marshal.AllocHGlobal(data.Length);
42 | if (blob.pbData == IntPtr.Zero)
43 | throw new Exception( "Unable to allocate buffer for BLOB data." );
44 |
45 | blob.cbData = data.Length;
46 | Marshal.Copy(data, 0, blob.pbData, data.Length);
47 | }
48 |
49 | public string encryptpw(string pw) {
50 | byte[] pwba = Encoding.Unicode.GetBytes(pw);
51 | DATA_BLOB dataIn = new DATA_BLOB();
52 | DATA_BLOB dataOut = new DATA_BLOB();
53 | StringBuilder epwsb = new StringBuilder();
54 | try {
55 | try {
56 | InitBLOB(pwba, ref dataIn);
57 | } catch (Exception ex) {
58 | throw new Exception( "Cannot initialize dataIn BLOB.", ex );
59 | }
60 |
61 | bool success = CryptProtectData(
62 | ref dataIn,
63 | "psw",
64 | NullPtr,
65 | NullPtr,
66 | NullPtr,
67 | CRYPTPROTECT_UI_FORBIDDEN,
68 | ref dataOut );
69 |
70 | if (!success) {
71 | int errCode = Marshal.GetLastWin32Error();
72 | throw new Exception( "CryptProtectData failed.", new Win32Exception(errCode) );
73 | }
74 |
75 | byte[] epwba = new byte[dataOut.cbData];
76 | Marshal.Copy(dataOut.pbData, epwba, 0, dataOut.cbData);
77 |
78 | // Convert hex data to hex characters (suitable for a string)
79 | for (int i = 0; i < dataOut.cbData; i++) {
80 | epwsb.Append(Convert.ToString(epwba[i], 16).PadLeft(2, '0').ToUpper());
81 | }
82 |
83 | } catch (Exception ex) {
84 | throw new Exception( "unable to encrypt data.", ex );
85 | } finally {
86 | if (dataIn.pbData != IntPtr.Zero)
87 | Marshal.FreeHGlobal(dataIn.pbData);
88 |
89 | if (dataOut.pbData != IntPtr.Zero)
90 | Marshal.FreeHGlobal(dataOut.pbData);
91 | }
92 |
93 | return epwsb.ToString();
94 | }
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/Profile.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Drawing;
4 | using System.IO;
5 | using System.Windows.Forms;
6 | using Newtonsoft.Json;
7 |
8 | namespace RDP_Portal {
9 | public class Profile {
10 | private string _name = "";
11 |
12 | public string Name {
13 | get {
14 | if (_name == "") {
15 | return "";
16 | }
17 | return _name;
18 | }
19 | set => _name = value;
20 | }
21 |
22 | public string Filename { get; set; } = "";
23 | public string Computer { get; set; }
24 | public string Username { get; set; }
25 |
26 | /**
27 | * Encrypted Password used by mstsc.exe
28 | */
29 | public string GetRDPEncryptedPassword() {
30 | var mstscpw = new Mstscpw();
31 | return mstscpw.encryptpw(this.Password);
32 | }
33 |
34 | /**
35 | * Encrypted Password in config.json
36 | */
37 | public string EncryptedPassword { get; set; } = "";
38 |
39 | [JsonIgnore]
40 | public string Password {
41 | get {
42 | if (EncryptedPassword == "") {
43 | return EncryptedPassword;
44 | }
45 | return EncryptedPassword.Decrypt();
46 | }
47 | set => EncryptedPassword = value.Encrypt();
48 | }
49 |
50 | public string Domain { get; set; }
51 |
52 | public void PrepareRdpFile() {
53 | var justCreated = false;
54 |
55 | if (Filename == null || Filename == "") {
56 | String name;
57 | while (true) {
58 | name = Config.rdpDir + "\\" + StringUtil.GenerateName(8) + ".rdp";
59 | if (!File.Exists(name)) {
60 | var file = File.Create(name);
61 | file.Close();
62 | justCreated = true;
63 | break;
64 | }
65 | }
66 | Filename = name;
67 | }
68 |
69 | if (!File.Exists(Filename)) {
70 | var file = File.Create(Filename);
71 | file.Close();
72 | justCreated = true;
73 | }
74 |
75 | var lines = File.ReadAllLines(Filename);
76 | var removeList = new [] {
77 | "full address:",
78 | "username:",
79 | "password",
80 | "domain:",
81 | "winposstr",
82 | };
83 |
84 | var result = new List();
85 | var width = 1280;
86 | var height = 720;
87 |
88 | foreach (var line in lines) {
89 | var ok = true;
90 |
91 | foreach (var startKeyword in removeList) {
92 | if (line.StartsWith(startKeyword)) {
93 | ok = false;
94 | break;
95 | }
96 | }
97 |
98 | // Extract Width & Height
99 | try {
100 | int w = width, h = height;
101 |
102 | if (line.StartsWith("desktopwidth:i:")) {
103 | w = int.Parse(line.Replace("desktopwidth:i:", ""));
104 | }
105 | if (line.StartsWith("desktopheight:i:")) {
106 | h = int.Parse(line.Replace("desktopheight:i:", ""));
107 | }
108 | width = w;
109 | height = h;
110 | } catch (Exception ex) {
111 |
112 | }
113 |
114 |
115 | if (ok) {
116 | result.Add(line);
117 | }
118 | }
119 |
120 | if (Computer != "") {
121 | result.Add("full address:s:" + Computer);
122 | }
123 |
124 | if (Username != "") {
125 | result.Add("username:s:" + Username);
126 | }
127 |
128 | if (Password != "") {
129 | result.Add("password 51:b:" + GetRDPEncryptedPassword());
130 | }
131 |
132 | if (Domain != "") {
133 | result.Add("domain:s:" + Domain);
134 | }
135 |
136 | // Reset the start position
137 | var xBuffer = 10;
138 | var yBuffer = 25;
139 |
140 | Rectangle resolution = Screen.PrimaryScreen.Bounds;
141 | var left = resolution.Size.Width / 2 - width / 2 - xBuffer;
142 | var top = resolution.Size.Height / 2 - height / 2 - yBuffer;
143 | var right = resolution.Size.Width / 2 + width / 2 + xBuffer;
144 | var bottom = resolution.Size.Height / 2 + height / 2 + yBuffer;
145 | result.Add($"winposstr:s:0,1,{left},{top},{right},{bottom}");
146 |
147 | if (justCreated) {
148 | result.Add("desktopwidth:i:1280");
149 | result.Add("desktopheight:i:720");
150 | result.Add("use multimon:i:0");
151 | result.Add("screen mode id:i:1");
152 | result.Add("authentication level:i:0");
153 | result.Add("prompt for credentials:i:0");
154 | result.Add("promptcredentialonce:i:0");
155 | }
156 |
157 | var writer = new StreamWriter(Filename, false);
158 |
159 | foreach (var line in result) {
160 | writer.WriteLine(line);
161 | }
162 |
163 | writer.Close();
164 | }
165 |
166 | [JsonIgnore] public bool JustAdded { get; set; } = false;
167 |
168 | public void Delete() {
169 | try {
170 | File.Delete(Filename);
171 | } catch (Exception ex) {
172 |
173 | }
174 | }
175 | }
176 | }
177 |
--------------------------------------------------------------------------------
/src/RdpFile.cs:
--------------------------------------------------------------------------------
1 | namespace RDP_Portal {
2 | public class RdpFile {
3 |
4 | }
5 | }
--------------------------------------------------------------------------------
/src/StringUtil.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Security.Cryptography;
4 | using System.Text;
5 |
6 | public static class StringUtil {
7 | private static byte[] key = new byte[8] {226, 175, 129, 22, 187, 4, 143, 171};
8 | private static byte[] iv = new byte[8] {181, 239, 77, 174, 238, 148, 206, 164};
9 |
10 | public static string Encrypt(this string text) {
11 | SymmetricAlgorithm algorithm = DES.Create();
12 | ICryptoTransform transform = algorithm.CreateEncryptor(key, iv);
13 | byte[] inputbuffer = Encoding.Unicode.GetBytes(text);
14 | byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
15 | return Convert.ToBase64String(outputBuffer);
16 | }
17 |
18 | public static string Decrypt(this string text) {
19 | SymmetricAlgorithm algorithm = DES.Create();
20 | ICryptoTransform transform = algorithm.CreateDecryptor(key, iv);
21 | byte[] inputbuffer = Convert.FromBase64String(text);
22 | byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
23 | return Encoding.Unicode.GetString(outputBuffer);
24 | }
25 |
26 | public static string GenerateName(int len) {
27 | Random random = new Random();
28 | const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
29 | return new string(Enumerable.Repeat(chars, len)
30 | .Select(s => s[random.Next(s.Length)]).ToArray());
31 | }
32 | }
33 |
--------------------------------------------------------------------------------