├── SDToolkit ├── ico.ico ├── Resources │ ├── help.png │ └── cross.png ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── App.config ├── Program.cs ├── packages.config ├── Tools │ ├── Upscaler.cs │ ├── FaceRestoration.cs │ └── Generator.cs ├── SDToolkit.csproj ├── Window.cs ├── Window.Designer.cs └── Window.resx ├── SDToolkitUpdater ├── ico.ico ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── App.config ├── Program.cs ├── packages.config ├── Downloader │ └── Downloader.cs ├── Window.cs ├── Window.Designer.cs ├── SDToolkitUpdater.csproj └── Window.resx ├── SDToolkit.sln ├── .gitattributes ├── README.md └── .gitignore /SDToolkit/ico.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkit/ico.ico -------------------------------------------------------------------------------- /SDToolkitUpdater/ico.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkitUpdater/ico.ico -------------------------------------------------------------------------------- /SDToolkit/Resources/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkit/Resources/help.png -------------------------------------------------------------------------------- /SDToolkit/Resources/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkit/Resources/cross.png -------------------------------------------------------------------------------- /SDToolkit/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SDToolkit/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /SDToolkit/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 SDToolkit 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Window()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SDToolkitUpdater/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /SDToolkitUpdater/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 SDToolkitUpdater 8 | { 9 | internal static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Window()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SDToolkitUpdater/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /SDToolkit/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /SDToolkit/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 | 12 | namespace SDToolkit.Properties 13 | { 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 17 | { 18 | 19 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 20 | 21 | public static Settings Default 22 | { 23 | get 24 | { 25 | return defaultInstance; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /SDToolkitUpdater/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 SDToolkitUpdater.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SDToolkit/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("SDToolkit")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SDToolkit")] 13 | [assembly: AssemblyCopyright("Copyright © 2022")] 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("8a9e9de0-c4b2-4dcf-8198-cb2ccbd58514")] 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.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /SDToolkitUpdater/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("SDToolkitUpdater")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SDToolkitUpdater")] 13 | [assembly: AssemblyCopyright("Copyright © 2022")] 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("4de1e61d-ee11-488b-a3c2-770711e3b8c7")] 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.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /SDToolkit.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.3.32929.385 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDToolkit", "SDToolkit\SDToolkit.csproj", "{8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDToolkitUpdater", "SDToolkitUpdater\SDToolkitUpdater.csproj", "{4DE1E61D-EE11-488B-A3C2-770711E3B8C7}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {BF8F32F4-9FE7-4921-9050-AAA25636B2E5} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Properties/Resources.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 SDToolkitUpdater.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SDToolkitUpdater.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Downloader/Downloader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Diagnostics; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Net.Http; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | 12 | namespace SDToolkitUpdater.Downloader 13 | { 14 | internal class Downloader 15 | { 16 | public static async Task DownloadAsync(ProgressBar progressBar, Label progressLabel, Label updateLabel, string address, int fileSize) 17 | { 18 | HttpClientHandler handler = new HttpClientHandler(); 19 | handler.ClientCertificateOptions = ClientCertificateOption.Automatic; 20 | 21 | HttpClient client = new HttpClient(handler); 22 | client.DefaultRequestHeaders.ExpectContinue = false; 23 | 24 | HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, address); 25 | HttpResponseMessage response = await client.SendAsync(message, 26 | HttpCompletionOption.ResponseHeadersRead); 27 | 28 | var stream = await response.Content.ReadAsStreamAsync(); 29 | var memStream = new MemoryStream(); 30 | 31 | var res = stream.CopyToAsync(memStream); 32 | var timer = new Stopwatch(); 33 | timer.Start(); 34 | 35 | while (true) 36 | { 37 | 38 | var streamInKb = memStream.Length / 1024.0; 39 | var progress = 100.0 * ((double)streamInKb / (double)fileSize); 40 | Console.WriteLine(progress + " : " + streamInKb / 1024 + " : " + fileSize / 1024); 41 | 42 | progressBar.Invoke(new MethodInvoker(delegate () 43 | { 44 | if (progress < 100) 45 | { 46 | progressBar.Value = (int)progress; 47 | progressLabel.Text = (int)progress + "%"; 48 | 49 | if (timer.ElapsedMilliseconds >= 1000) 50 | { 51 | timer.Restart(); 52 | updateLabel.Text = "Downloading... " + Math.Round(streamInKb / 1024.0) + " / " + Math.Round(fileSize / 1024.0) + " MB"; 53 | } 54 | } 55 | else 56 | { 57 | progressBar.Value = 100; 58 | progressLabel.Text = "100%"; 59 | 60 | } 61 | })); 62 | 63 | if (res.IsCompleted) 64 | { 65 | break; 66 | } 67 | } 68 | 69 | byte[] responseContent = new byte[memStream.Length]; 70 | memStream.Position = 0; 71 | memStream.Read(responseContent, 0, responseContent.Length); 72 | 73 | using (FileStream fileStream = new FileStream("patch.zip", FileMode.Create, FileAccess.Write)) 74 | { 75 | fileStream.Write(responseContent, 0, responseContent.Length); 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SDToolkit 2 | 3 | All in one, batteries-included software to easily generate and upscale AI art using [Stable Diffusion](https://github.com/CompVis/stable-diffusion) 4 | 5 |
6 |

Disclaimer: This software is still in beta, bugs can and will occur at some point. Please use the Issues tab to report a bug. Thank you for using SDToolkit!

7 |
8 |
9 | 10 | ![img](https://i.imgur.com/5c2EjT5.png) 11 | ![img](https://i.imgur.com/yXfs4YY.png) 12 | 13 | ## Features 14 | 15 | - No setup required, just install and run 16 | - Video2x upscaler 17 | - GFPGAN face restoration 18 | - Ability to choose a context image for AI to try to match 19 | - Result image viewer with zoom 20 | - Optimized for low VRAM GPUs 21 | - Many helpful tooltips that make it very easy to use 22 | - Decent amount of configuration options 23 | 24 | ## GFPGAN Integration 25 | 26 | SDToolkit offers a built-in GFPGAN for face restoration. This is quite a powerful tool to remove face artifacts and beautify the result. It's definitely recommended to use GFPGAN for every prompt that might have faces in it. 27 | 28 | ![img](https://i.imgur.com/UecbKYL.png) 29 | 30 | ## Video2x Upscaler 31 | 32 | SDToolkit offers a built-in Video2x upscaler. Please remember that it isn't perfect, and upscaling by a very large factor can cause artifacts. 33 | 34 | ![img](https://i.imgur.com/OQqkZW7.png) 35 | 36 | ## Requirements / Info 37 | 38 | - OS: Windows 64-bit 39 | - At least 35GB of disk space 40 | - At least 8GB of GPU VRAM is recommended 41 | - At least 16GB of RAM is recommended 42 | - CUDA-enabled GPU is recommended (Nvidia) 43 | 44 | Since SDToolkit is all-in-one software, the model, upscaling software (video2x/GFPGAN) and execution environment (Conda/Python) is included in the setup. 45 | 46 | Tested with i7-12700KF and GTX 1080 with full precision. (around 6.7GB of VRAM usage) 47 | 48 | Half precision is recommended for RTX cards. 49 | 50 | ## Installation 51 | 52 | Just download and run the setup from the Releases tab. Be reminded that it's a huge file, you should have at least 35GB of free disk space. Users running the v0.2-beta release, please refer to this hotfix for a comprehensive installation. 53 | 54 | ## License 55 | 56 | The software is licensed under GNU Affero Public License and the SD model is licensed under CreativeML Open RAIL-M. You're required to accept both to use this software. You're free to use the generated art files for commercial purposes as long as they conform to the license terms and conditions. 57 | 58 | ## Used software/models 59 | 60 | This software uses Stable Diffusion v1-4 model licensed under CreativeML Open RAIL-M. 61 | You're free to download it yourself at [CompVis's huggingface repository](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original). 62 | 63 | Scripts and model execution software provided by [basujindal's fork of stable diffusion](https://github.com/basujindal/stable-diffusion/). 64 | 65 | Upscaling model and algorithm is provided by [video2x](https://github.com/k4yt3x/video2x). 66 | 67 | GFPGAN 1.3 model and algorithm provided by [Tencent's GFPGAN](https://github.com/TencentARC/GFPGAN). 68 | -------------------------------------------------------------------------------- /SDToolkit/Tools/Upscaler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Drawing; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace SDToolkit 12 | { 13 | class Upscaler 14 | { 15 | public static void Upscale(Generator.GeneratorConfig config, string[] images) 16 | { 17 | var outputNames = new string[images.Length]; 18 | for (var i = 0; i < images.Length; i++) 19 | { 20 | outputNames[i] = DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + "_" + i + ".png"; 21 | } 22 | var process = new Process 23 | { 24 | StartInfo = new ProcessStartInfo 25 | { 26 | FileName = "cmd.exe", 27 | RedirectStandardInput = true, 28 | UseShellExecute = false, 29 | CreateNoWindow = true, 30 | RedirectStandardOutput = true, 31 | RedirectStandardError = true, 32 | WorkingDirectory = Generator.WorkingDirectory, 33 | }, 34 | EnableRaisingEvents = true, 35 | }; 36 | 37 | process.Exited += (s, e) => 38 | { 39 | if (config.GenerateButton.InvokeRequired) 40 | { 41 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 42 | { 43 | for (var i = 0; i < images.Length; i++) 44 | { 45 | var pictureBox = config.PictureBoxes[i]; 46 | pictureBox.Image = Image.FromFile("video2x\\outputs\\" + outputNames[i]); 47 | } 48 | config.GenerateButton.Text = "Generate"; 49 | 50 | config.GenerateButton.Enabled = true; 51 | 52 | config.DebugTextBox.Clear(); 53 | config.ProgressBar.Value = 0; 54 | })); 55 | } 56 | }; 57 | 58 | process.OutputDataReceived += (s, e) => 59 | { 60 | Generator.PrintToDebug(config.DebugTextBox, e.Data); 61 | }; 62 | process.ErrorDataReceived += (s, e) => 63 | { 64 | Generator.PrintToDebug(config.DebugTextBox, e.Data); 65 | }; 66 | process.Start(); 67 | process.BeginErrorReadLine(); 68 | process.BeginOutputReadLine(); 69 | 70 | using (var sw = process.StandardInput) 71 | { 72 | if (sw.BaseStream.CanWrite) 73 | { 74 | sw.WriteLine("cd video2x"); 75 | for (var i = 0; i < images.Length; i++) 76 | { 77 | var scale = config.UseGFPGANandVideo2x ? config.Upscale / 2 : config.Upscale; 78 | var res = config.ResHeight * scale; 79 | 80 | var image = images[i]; 81 | sw.WriteLine(".\\video2x.exe -i \"" + image + "\"" 82 | + " -o outputs\\" + outputNames[i] 83 | + " -h " + res 84 | + " -w " + res 85 | + " -d realsr_ncnn_vulkan" 86 | + " -p 3"); 87 | } 88 | } 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /SDToolkit/Properties/Resources.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 SDToolkit.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SDToolkit.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap cross { 67 | get { 68 | object obj = ResourceManager.GetObject("cross", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap help { 77 | get { 78 | object obj = ResourceManager.GetObject("help", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Window.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | using RestSharp; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Diagnostics; 8 | using System.Drawing; 9 | using System.IO; 10 | using System.IO.Compression; 11 | using System.Linq; 12 | using System.Text; 13 | using System.Threading.Tasks; 14 | using System.Windows.Forms; 15 | 16 | namespace SDToolkitUpdater 17 | { 18 | public partial class Window : Form 19 | { 20 | private string _patchUrl; 21 | private int _patchSize; 22 | 23 | public Window() 24 | { 25 | InitializeComponent(); 26 | } 27 | 28 | private void Window_Load(object sender, EventArgs e) 29 | { 30 | var client = new RestClient("https://api.github.com/repos/SocketByte/SDToolkit/releases"); 31 | var request = new RestRequest(); 32 | request.AddHeader("Accept", "application/vnd.github+json"); 33 | RestResponse response = client.Execute(request); 34 | 35 | var releases = JArray.Parse(response.Content); 36 | var asset = releases[0]["assets"][0]; 37 | _patchUrl = asset["browser_download_url"].ToString(); 38 | _patchSize = int.Parse(asset["size"].ToString()); 39 | } 40 | 41 | private void Window_Shown(object sender, EventArgs e) 42 | { 43 | var thread = new System.Threading.Thread(async () => 44 | { 45 | if (File.Exists("patch.zip")) 46 | { 47 | File.Delete("patch.zip"); 48 | } 49 | 50 | await Downloader.Downloader.DownloadAsync( 51 | downloadBar, downloadLabel, updateLabel, 52 | _patchUrl, _patchSize / 1024); 53 | 54 | if (Directory.Exists("patch")) 55 | { 56 | Directory.Delete("patch", true); 57 | } 58 | 59 | ZipFile.ExtractToDirectory("patch.zip", "patch"); 60 | 61 | var files = Directory.GetFiles("patch", "*.*", SearchOption.AllDirectories); 62 | var total = files.Length; 63 | var current = 1; 64 | foreach (var file in files) 65 | { 66 | var dest = file.Replace("patch\\", ""); 67 | if (Path.GetDirectoryName(dest) == String.Empty || Directory.Exists(Path.GetDirectoryName(dest))) 68 | { 69 | File.Copy(file, dest, true); 70 | } 71 | else 72 | { 73 | Directory.CreateDirectory(Path.GetDirectoryName(dest)); 74 | File.Copy(file, dest, true); 75 | } 76 | 77 | Console.WriteLine(dest); 78 | var progress = (int)Math.Round(100.0 * ((double)total / (double)current)); 79 | installBar.Invoke(new MethodInvoker(delegate () 80 | { 81 | if (progress < 100) 82 | { 83 | installBar.Value = progress; 84 | installLabel.Text = progress.ToString() + "%"; 85 | } 86 | else 87 | { 88 | installBar.Value = 100; 89 | installLabel.Text = "100%"; 90 | } 91 | updateLabel.Text = "Installing... " + current + " / " + total; 92 | })); 93 | current++; 94 | } 95 | 96 | Directory.Delete("patch", true); 97 | File.Delete("patch.zip"); 98 | 99 | var process = new Process(); 100 | process.StartInfo.FileName = "SDToolkit.exe"; 101 | process.Start(); 102 | 103 | Environment.Exit(0); 104 | }); 105 | 106 | thread.Start(); 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /SDToolkit/Tools/FaceRestoration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Drawing; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace SDToolkit 12 | { 13 | class FaceRestoration 14 | { 15 | public static void RestoreWithGFPGAN(Generator.GeneratorConfig config, string[] images) 16 | { 17 | var outputNames = new string[images.Length]; 18 | for (var i = 0; i < images.Length; i++) 19 | { 20 | outputNames[i] = DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + "_" + i + ".png"; 21 | } 22 | 23 | var inputs = "GFPGAN\\inputs\\temp"; 24 | if (Directory.Exists(inputs)) 25 | { 26 | Directory.Delete(inputs, true); 27 | } 28 | Directory.CreateDirectory(inputs); 29 | for (var i = 0; i < images.Length; i++) 30 | { 31 | var image = images[i]; 32 | File.Copy(image, inputs + "\\" + outputNames[i]); 33 | } 34 | 35 | var process = new Process 36 | { 37 | StartInfo = new ProcessStartInfo 38 | { 39 | FileName = "cmd.exe", 40 | RedirectStandardInput = true, 41 | UseShellExecute = false, 42 | CreateNoWindow = true, 43 | RedirectStandardOutput = true, 44 | RedirectStandardError = true, 45 | WorkingDirectory = Generator.WorkingDirectory, 46 | }, 47 | EnableRaisingEvents = true, 48 | }; 49 | 50 | process.Exited += (s, e) => 51 | { 52 | if (config.GenerateButton.InvokeRequired) 53 | { 54 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 55 | { 56 | if (config.UseGFPGANandVideo2x) 57 | { 58 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 59 | { 60 | config.GenerateButton.Text = "Upscaling with Video2x..."; 61 | config.DebugTextBox.Clear(); 62 | })); 63 | 64 | Upscaler.Upscale(config, images); 65 | return; 66 | } 67 | 68 | for (var i = 0; i < images.Length; i++) 69 | { 70 | var image = images[i]; 71 | var pictureBox = config.PictureBoxes[i]; 72 | pictureBox.Image = Image.FromFile("GFPGAN\\results\\restored_imgs\\" + outputNames[i]); 73 | } 74 | config.GenerateButton.Text = "Generate"; 75 | 76 | config.GenerateButton.Enabled = true; 77 | 78 | config.DebugTextBox.Clear(); 79 | config.ProgressBar.Value = 0; 80 | })); 81 | } 82 | }; 83 | 84 | process.OutputDataReceived += (s, e) => 85 | { 86 | Console.WriteLine(e.Data); 87 | Generator.PrintToDebug(config.DebugTextBox, e.Data); 88 | }; 89 | process.ErrorDataReceived += (s, e) => 90 | { 91 | Console.WriteLine(e.Data); 92 | Generator.PrintToDebug(config.DebugTextBox, e.Data); 93 | }; 94 | process.Start(); 95 | process.BeginErrorReadLine(); 96 | process.BeginOutputReadLine(); 97 | 98 | using (var sw = process.StandardInput) 99 | { 100 | if (sw.BaseStream.CanWrite) 101 | { 102 | var scale = config.Upscale; 103 | if (config.UseGFPGANandVideo2x) 104 | { 105 | scale = 2; 106 | } 107 | sw.WriteLine("conda\\Scripts\\activate.bat"); 108 | sw.WriteLine("activate"); 109 | sw.WriteLine("cd GFPGAN"); 110 | sw.WriteLine("python inference_gfpgan.py -i inputs/temp -o results -v 1.3 -s " + scale); 111 | } 112 | } 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Properties/Resources.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 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Window.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SDToolkitUpdater 2 | { 3 | partial class Window 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.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 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Window)); 32 | this.installBar = new System.Windows.Forms.ProgressBar(); 33 | this.downloadBar = new System.Windows.Forms.ProgressBar(); 34 | this.updateLabel = new System.Windows.Forms.Label(); 35 | this.downloadLabel = new System.Windows.Forms.Label(); 36 | this.installLabel = new System.Windows.Forms.Label(); 37 | this.SuspendLayout(); 38 | // 39 | // installBar 40 | // 41 | this.installBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 42 | | System.Windows.Forms.AnchorStyles.Right))); 43 | this.installBar.Location = new System.Drawing.Point(12, 60); 44 | this.installBar.Name = "installBar"; 45 | this.installBar.Size = new System.Drawing.Size(434, 23); 46 | this.installBar.TabIndex = 0; 47 | // 48 | // downloadBar 49 | // 50 | this.downloadBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 51 | | System.Windows.Forms.AnchorStyles.Right))); 52 | this.downloadBar.Location = new System.Drawing.Point(12, 31); 53 | this.downloadBar.Name = "downloadBar"; 54 | this.downloadBar.Size = new System.Drawing.Size(434, 23); 55 | this.downloadBar.TabIndex = 1; 56 | // 57 | // updateLabel 58 | // 59 | this.updateLabel.AutoSize = true; 60 | this.updateLabel.Location = new System.Drawing.Point(9, 9); 61 | this.updateLabel.Name = "updateLabel"; 62 | this.updateLabel.Size = new System.Drawing.Size(59, 13); 63 | this.updateLabel.TabIndex = 2; 64 | this.updateLabel.Text = "Updating..."; 65 | // 66 | // downloadLabel 67 | // 68 | this.downloadLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 69 | this.downloadLabel.AutoSize = true; 70 | this.downloadLabel.Location = new System.Drawing.Point(453, 36); 71 | this.downloadLabel.Name = "downloadLabel"; 72 | this.downloadLabel.Size = new System.Drawing.Size(21, 13); 73 | this.downloadLabel.TabIndex = 3; 74 | this.downloadLabel.Text = "0%"; 75 | // 76 | // installLabel 77 | // 78 | this.installLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 79 | this.installLabel.AutoSize = true; 80 | this.installLabel.Location = new System.Drawing.Point(453, 65); 81 | this.installLabel.Name = "installLabel"; 82 | this.installLabel.Size = new System.Drawing.Size(21, 13); 83 | this.installLabel.TabIndex = 4; 84 | this.installLabel.Text = "0%"; 85 | // 86 | // Window 87 | // 88 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 89 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 90 | this.ClientSize = new System.Drawing.Size(489, 95); 91 | this.Controls.Add(this.installLabel); 92 | this.Controls.Add(this.downloadLabel); 93 | this.Controls.Add(this.updateLabel); 94 | this.Controls.Add(this.downloadBar); 95 | this.Controls.Add(this.installBar); 96 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 97 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 98 | this.MaximizeBox = false; 99 | this.MaximumSize = new System.Drawing.Size(505, 134); 100 | this.MinimumSize = new System.Drawing.Size(505, 134); 101 | this.Name = "Window"; 102 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 103 | this.Text = "SDToolkit Updater"; 104 | this.Load += new System.EventHandler(this.Window_Load); 105 | this.Shown += new System.EventHandler(this.Window_Shown); 106 | this.ResumeLayout(false); 107 | this.PerformLayout(); 108 | 109 | } 110 | 111 | #endregion 112 | 113 | private System.Windows.Forms.ProgressBar installBar; 114 | private System.Windows.Forms.ProgressBar downloadBar; 115 | private System.Windows.Forms.Label updateLabel; 116 | private System.Windows.Forms.Label downloadLabel; 117 | private System.Windows.Forms.Label installLabel; 118 | } 119 | } 120 | 121 | -------------------------------------------------------------------------------- /SDToolkit/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\resources\cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | -------------------------------------------------------------------------------- /SDToolkitUpdater/SDToolkitUpdater.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7} 8 | WinExe 9 | SDToolkitUpdater 10 | SDToolkitUpdater 11 | v4.7.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | ico.ico 37 | 38 | 39 | 40 | ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll 41 | 42 | 43 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll 44 | 45 | 46 | ..\packages\RestSharp.108.0.2\lib\netstandard2.0\RestSharp.dll 47 | 48 | 49 | 50 | ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll 51 | 52 | 53 | 54 | 55 | ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll 56 | True 57 | True 58 | 59 | 60 | ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll 61 | 62 | 63 | 64 | ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll 65 | 66 | 67 | ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll 68 | 69 | 70 | ..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll 71 | 72 | 73 | ..\packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll 74 | 75 | 76 | ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll 77 | 78 | 79 | ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | Form 95 | 96 | 97 | Window.cs 98 | 99 | 100 | 101 | 102 | Window.cs 103 | 104 | 105 | ResXFileCodeGenerator 106 | Resources.Designer.cs 107 | Designer 108 | 109 | 110 | True 111 | Resources.resx 112 | 113 | 114 | 115 | SettingsSingleFileGenerator 116 | Settings.Designer.cs 117 | 118 | 119 | True 120 | Settings.settings 121 | True 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /SDToolkit/Tools/Generator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Text; 8 | using System.Threading; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | 12 | namespace SDToolkit 13 | { 14 | class Generator 15 | { 16 | public static readonly string WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 17 | 18 | public delegate void OnEnd(); 19 | 20 | public class GeneratorConfig 21 | { 22 | public string Prompt { get; set; } 23 | public int ResHeight { get; set; } 24 | public int ResWidth { get; set; } 25 | public int Seed { get; set; } 26 | public int Steps { get; set; } 27 | public string Precision { get; set; } 28 | public int Upscale { get; set; } 29 | public bool UseContextImage { get; set; } 30 | 31 | public string ContextImage { get; set; } 32 | 33 | public bool UseTurbo { get; set; } 34 | 35 | public bool UseGFPGAN { get; set; } 36 | 37 | public bool UseGFPGANandVideo2x { get; set; } 38 | 39 | public string Sampler { get; set; } 40 | 41 | public OnEnd OnEnd { get; set; } 42 | 43 | public TextBox DebugTextBox { get; set; } 44 | public ProgressBar ProgressBar { get; set; } 45 | public Button GenerateButton { get; set; } 46 | public PictureBox[] PictureBoxes { get; set; } 47 | } 48 | 49 | public static void PrintToDebug(TextBox debugBox, string message) 50 | { 51 | if (message == null) 52 | { 53 | return; 54 | } 55 | debugBox.Invoke(new MethodInvoker(delegate () 56 | { 57 | if (message.Length <= 0) 58 | { 59 | return; 60 | } 61 | debugBox.AppendText(message + "\r\n"); 62 | debugBox.ScrollToCaret(); 63 | })); 64 | } 65 | 66 | public static void GenerateFromPrompt(GeneratorConfig config) 67 | { 68 | new Thread(() => 69 | { 70 | Thread.CurrentThread.IsBackground = true; 71 | 72 | Run(config); 73 | }).Start(); 74 | } 75 | 76 | private static void Run(GeneratorConfig config) 77 | { 78 | var samples = config.UseContextImage ? "img2img-samples" : "txt2img-samples"; 79 | var samplesDir = WorkingDirectory + "\\stable-diffusion\\outputs\\" + samples; 80 | if (Directory.Exists(samplesDir)) 81 | { 82 | Directory.Delete(samplesDir, true); 83 | } 84 | 85 | var path = DateTimeOffset.Now.ToUnixTimeSeconds().ToString(); 86 | 87 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 88 | { 89 | config.GenerateButton.Text = "Generating..."; 90 | })); 91 | 92 | var process = new Process 93 | { 94 | StartInfo = new ProcessStartInfo 95 | { 96 | FileName = "cmd.exe", 97 | RedirectStandardInput = true, 98 | UseShellExecute = false, 99 | CreateNoWindow = true, 100 | RedirectStandardOutput = true, 101 | RedirectStandardError = true, 102 | WorkingDirectory = WorkingDirectory, 103 | }, 104 | EnableRaisingEvents = true, 105 | }; 106 | 107 | process.Exited += (s, e) => 108 | { 109 | try 110 | { 111 | var prompt = config.Prompt; 112 | var converted = string.Join("_", prompt.Split(' ')); 113 | 114 | var dir = Directory.GetDirectories(WorkingDirectory + @"\stable-diffusion\outputs\" + samples)[0]; 115 | var images = Directory.GetFiles(dir, "*.png"); 116 | 117 | if (config.UseGFPGAN) 118 | { 119 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 120 | { 121 | config.GenerateButton.Text = "Restoring faces and upscaling with GFPGAN..."; 122 | config.DebugTextBox.Clear(); 123 | })); 124 | FaceRestoration.RestoreWithGFPGAN(config, images); 125 | return; 126 | } 127 | 128 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 129 | { 130 | config.GenerateButton.Text = "Upscaling with Video2x..."; 131 | config.DebugTextBox.Clear(); 132 | })); 133 | 134 | Upscaler.Upscale(config, images); 135 | } 136 | catch (Exception ex) 137 | { 138 | MessageBox.Show(ex.Message, "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error); 139 | 140 | } 141 | }; 142 | 143 | process.ErrorDataReceived += (s, e) => 144 | { 145 | Console.WriteLine(e.Data); 146 | PrintToDebug(config.DebugTextBox, e.Data); 147 | 148 | if (e.Data == null) 149 | { 150 | return; 151 | } 152 | if (e.Data.Contains("Sampler:") || e.Data.Contains("Decoding image:")) 153 | { 154 | var percentage = e.Data.Split(':')[1].Split('%')[0].Trim(); 155 | if (percentage.Length == 0) 156 | { 157 | return; 158 | } 159 | config.ProgressBar.Invoke(new MethodInvoker(delegate () 160 | { 161 | config.ProgressBar.Value = int.Parse(percentage); 162 | })); 163 | 164 | config.GenerateButton.Invoke(new MethodInvoker(delegate () 165 | { 166 | config.GenerateButton.Text = "Generating... (" + percentage + "%)"; 167 | })); 168 | } 169 | }; 170 | 171 | process.OutputDataReceived += (s, e) => 172 | { 173 | Console.WriteLine(e.Data); 174 | PrintToDebug(config.DebugTextBox, e.Data); 175 | }; 176 | 177 | process.Start(); 178 | process.BeginErrorReadLine(); 179 | process.BeginOutputReadLine(); 180 | 181 | using (var sw = process.StandardInput) 182 | { 183 | if (sw.BaseStream.CanWrite) 184 | { 185 | sw.WriteLine("conda\\Scripts\\activate.bat"); 186 | sw.WriteLine("activate ldm"); 187 | sw.WriteLine("cd stable-diffusion"); 188 | sw.WriteLine("pip install -e ."); 189 | sw.WriteLine("pip install taming-transformers-rom1504"); 190 | sw.WriteLine("pip install clip"); 191 | if (!config.UseContextImage) 192 | { 193 | sw.WriteLine("python optimizedSD/optimized_txt2img.py --prompt \"" + config.Prompt + "\"" 194 | + " --sampler " + config.Sampler.ToLower() 195 | + " --H " + config.ResHeight 196 | + " --W " + config.ResWidth 197 | + " --seed " + config.Seed 198 | + (config.UseTurbo ? " --turbo" : "") 199 | + " --precision " + config.Precision 200 | + " --n_iter 1 --n_samples 8 --ddim_steps " + config.Steps); 201 | } 202 | else 203 | { 204 | sw.WriteLine("python optimizedSD/optimized_img2img.py --strength 0.8 --prompt \"" + config.Prompt + "\"" 205 | + " --init-img \"" + config.ContextImage + "\"" 206 | + " --H " + config.ResHeight 207 | + " --W " + config.ResWidth 208 | + " --seed " + config.Seed 209 | + (config.UseTurbo ? " --turbo" : "") 210 | + " --precision " + config.Precision 211 | + " --n_iter 1 --n_samples 8 --ddim_steps " + config.Steps); 212 | 213 | } 214 | } 215 | } 216 | } 217 | } 218 | } 219 | -------------------------------------------------------------------------------- /SDToolkit/SDToolkit.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514} 8 | WinExe 9 | SDToolkit 10 | SDToolkit 11 | v4.7.2 12 | 512 13 | true 14 | true 15 | publish\ 16 | true 17 | Disk 18 | false 19 | Foreground 20 | 7 21 | Days 22 | false 23 | false 24 | true 25 | 0 26 | 1.0.0.%2a 27 | false 28 | false 29 | true 30 | 31 | 32 | x64 33 | true 34 | full 35 | false 36 | bin\Debug\ 37 | DEBUG;TRACE 38 | prompt 39 | 4 40 | 41 | 42 | AnyCPU 43 | pdbonly 44 | true 45 | bin\Release\ 46 | TRACE 47 | prompt 48 | 4 49 | 50 | 51 | SDToolkit.Program 52 | 53 | 54 | ico.ico 55 | 56 | 57 | 58 | ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll 59 | 60 | 61 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll 62 | 63 | 64 | ..\packages\NvAPIWrapper.Net.0.8.1.101\lib\net45\NvAPIWrapper.dll 65 | 66 | 67 | ..\packages\RestSharp.108.0.2\lib\netstandard2.0\RestSharp.dll 68 | 69 | 70 | 71 | ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll 72 | 73 | 74 | ..\packages\System.CodeDom.6.0.0\lib\net461\System.CodeDom.dll 75 | 76 | 77 | 78 | 79 | ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll 80 | 81 | 82 | 83 | ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll 84 | 85 | 86 | ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll 87 | 88 | 89 | ..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll 90 | 91 | 92 | ..\packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll 93 | 94 | 95 | ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll 96 | 97 | 98 | ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | Form 116 | 117 | 118 | Window.cs 119 | 120 | 121 | 122 | 123 | Window.cs 124 | 125 | 126 | ResXFileCodeGenerator 127 | Resources.Designer.cs 128 | Designer 129 | 130 | 131 | True 132 | Resources.resx 133 | True 134 | 135 | 136 | 137 | SettingsSingleFileGenerator 138 | Settings.Designer.cs 139 | 140 | 141 | True 142 | Settings.settings 143 | True 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | False 161 | Microsoft .NET Framework 4.7.2 %28x86 and x64%29 162 | true 163 | 164 | 165 | False 166 | .NET Framework 3.5 SP1 167 | false 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /SDToolkit/Window.cs: -------------------------------------------------------------------------------- 1 | 2 | using Newtonsoft.Json.Linq; 3 | using NvAPIWrapper.Display; 4 | using RestSharp; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.ComponentModel; 8 | using System.Data; 9 | using System.Diagnostics; 10 | using System.Drawing; 11 | using System.IO; 12 | using System.Linq; 13 | using System.Management; 14 | using System.Text; 15 | using System.Threading; 16 | using System.Threading.Tasks; 17 | using System.Windows.Forms; 18 | using System.Xml.Serialization; 19 | using static SDToolkit.Window; 20 | 21 | namespace SDToolkit 22 | { 23 | public partial class Window : Form 24 | { 25 | private uint _vram = 0; 26 | private DateTime _start; 27 | private string _latestVersion; 28 | 29 | public Window() 30 | { 31 | InitializeComponent(); 32 | 33 | var gpus = NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs(); 34 | var gpu = gpus[0]; 35 | 36 | var vramInGb = gpu.MemoryInformation.DedicatedVideoMemoryInkB / 1024 / 1024; 37 | 38 | gpuInfoLabel.Text = gpu.FullName + " / " + gpu.MemoryInformation.RAMType + " / " + vramInGb + " GB VRAM"; 39 | 40 | _vram = vramInGb; 41 | 42 | if (gpu.FullName.Contains("RTX")) 43 | { 44 | precisionCheck.Checked = false; 45 | } else 46 | { 47 | precisionCheck.Checked = true; 48 | } 49 | 50 | } 51 | 52 | private void GenerateButton_Click(object sender, EventArgs e) 53 | { 54 | try 55 | { 56 | _start = DateTime.Now; 57 | 58 | new Thread(() => 59 | { 60 | while (!GenerateButton.Enabled) 61 | { 62 | timerLabel.Invoke(new MethodInvoker(delegate () 63 | { 64 | var now = DateTime.Now - _start; 65 | var minutes = now.Minutes < 10 ? "0" + now.Minutes : now.Minutes.ToString(); 66 | var seconds = now.Seconds < 10 ? "0" + now.Seconds : now.Seconds.ToString(); 67 | timerLabel.Text = minutes + ":" + seconds; 68 | })); 69 | Thread.Sleep(1000); 70 | } 71 | }).Start(); 72 | 73 | GenerateButton.Enabled = false; 74 | Generator.GenerateFromPrompt(new Generator.GeneratorConfig 75 | { 76 | Prompt = promptBox.Text, 77 | ResHeight = int.Parse(resHBox.Text), 78 | ResWidth = int.Parse(resWBox.Text), 79 | Seed = int.Parse(seedBox.Text), 80 | Steps = int.Parse(stepsBox.Text), 81 | Precision = precisionCheck.Checked ? "full" : "autocast", 82 | 83 | Sampler = samplerCombo.Text, 84 | 85 | UseContextImage = contextImage.Image != null, 86 | ContextImage = contextImage.ImageLocation, 87 | 88 | UseTurbo = _vram >= 32, 89 | 90 | Upscale = int.Parse(upscaleCombo.Text.Replace("x", "")), 91 | 92 | DebugTextBox = debugBox, 93 | ProgressBar = progressBar, 94 | GenerateButton = GenerateButton, 95 | PictureBoxes = new PictureBox[] 96 | { 97 | pictureBox0, 98 | pictureBox1, 99 | pictureBox2, 100 | pictureBox3, 101 | pictureBox4, 102 | pictureBox5, 103 | pictureBox6, 104 | pictureBox7 105 | }, 106 | 107 | UseGFPGAN = useGFPGAN.Checked, 108 | UseGFPGANandVideo2x = false, 109 | }); 110 | } 111 | catch (Exception ex) 112 | { 113 | MessageBox.Show(ex.Message, "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error); 114 | } 115 | } 116 | 117 | private void Maximize(int id) 118 | { 119 | var pictureBoxes = new PictureBox[] 120 | { 121 | pictureBox0, 122 | pictureBox1, 123 | pictureBox2, 124 | pictureBox3, 125 | pictureBox4, 126 | pictureBox5, 127 | pictureBox6, 128 | pictureBox7, 129 | }; 130 | 131 | if (pictureBoxes[id].Dock == DockStyle.None) 132 | { 133 | for (var i = 0; i < pictureBoxes.Length; i++) 134 | { 135 | if (i == id) 136 | { 137 | pictureBoxes[i].Dock = DockStyle.Fill; 138 | continue; 139 | } 140 | pictureBoxes[i].Dock = DockStyle.None; 141 | pictureBoxes[i].Hide(); 142 | } 143 | } 144 | else 145 | { 146 | for (var i = 0; i < pictureBoxes.Length; i++) 147 | { 148 | if (i == id) 149 | { 150 | pictureBoxes[i].Dock = DockStyle.None; 151 | continue; 152 | } 153 | pictureBoxes[i].Dock = DockStyle.None; 154 | pictureBoxes[i].Show(); 155 | } 156 | } 157 | } 158 | 159 | private void pictureBox0_Click(object sender, EventArgs e) 160 | { 161 | Maximize(0); 162 | } 163 | 164 | private void pictureBox1_Click(object sender, EventArgs e) 165 | { 166 | Maximize(1); 167 | } 168 | 169 | private void pictureBox2_Click(object sender, EventArgs e) 170 | { 171 | Maximize(2); 172 | } 173 | 174 | private void pictureBox3_Click(object sender, EventArgs e) 175 | { 176 | Maximize(3); 177 | } 178 | 179 | private void pictureBox4_Click(object sender, EventArgs e) 180 | { 181 | Maximize(4); 182 | } 183 | 184 | private void pictureBox5_Click(object sender, EventArgs e) 185 | { 186 | Maximize(5); 187 | } 188 | 189 | private void pictureBox6_Click(object sender, EventArgs e) 190 | { 191 | Maximize(6); 192 | } 193 | 194 | private void pictureBox7_Click(object sender, EventArgs e) 195 | { 196 | Maximize(7); 197 | } 198 | 199 | private void contextButton_Click(object sender, EventArgs e) 200 | { 201 | // Open file selectors 202 | var openFileDialog = new OpenFileDialog(); 203 | openFileDialog.Filter = "Image Files (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp"; 204 | openFileDialog.Multiselect = false; 205 | openFileDialog.Title = "Select a context image"; 206 | 207 | if (openFileDialog.ShowDialog() == DialogResult.OK) 208 | { 209 | var path = openFileDialog.FileName; 210 | contextImage.Image = Image.FromFile(path); 211 | contextImage.ImageLocation = path; 212 | 213 | contextButton.Enabled = false; 214 | 215 | samplerCombo.Enabled = false; 216 | samplerCombo.SelectedIndex = 0; 217 | 218 | contextRemoveButton.Enabled = true; 219 | } 220 | } 221 | 222 | private void contextRemoveButton_Click(object sender, EventArgs e) 223 | { 224 | contextImage.Image = null; 225 | contextImage.ImageLocation = null; 226 | 227 | contextButton.Enabled = true; 228 | 229 | samplerCombo.Enabled = true; 230 | samplerCombo.SelectedIndex = 1; 231 | 232 | contextRemoveButton.Enabled = false; 233 | } 234 | 235 | private void toolTip1_Popup(object sender, PopupEventArgs e) 236 | { 237 | 238 | } 239 | 240 | private void SetUpscaleInfo() 241 | { 242 | var upscaleValue = int.Parse(upscaleCombo.Text.Replace("x", "")); 243 | var x = upscaleValue * int.Parse(resWBox.Text); 244 | var y = upscaleValue * int.Parse(resHBox.Text); 245 | var upscaler = useGFPGAN.Checked ? "GFPGAN" : "Video2x (RealSR)"; 246 | upscaleLabel.Text = "Final image resolution after upscaling: " + x + " x " + y + ", upscaler: " + upscaler; 247 | } 248 | 249 | public class App 250 | { 251 | public string AppVersion { get; set; } 252 | } 253 | 254 | private void Window_Load(object sender, EventArgs e) 255 | { 256 | SetUpscaleInfo(); 257 | 258 | var app = new App(); 259 | var serializer = new XmlSerializer(typeof(App)); 260 | using (var reader = new StreamReader("App.xml")) 261 | { 262 | app = (App)serializer.Deserialize(reader); 263 | } 264 | Text = "SDToolkit " + app.AppVersion; 265 | 266 | var client = new RestClient("https://api.github.com/repos/SocketByte/SDToolkit/releases"); 267 | var request = new RestRequest(); 268 | request.AddHeader("Accept", "application/vnd.github+json"); 269 | RestResponse response = client.Execute(request); 270 | 271 | var releases = JArray.Parse(response.Content); 272 | 273 | _latestVersion = releases[0]["tag_name"].ToString().Replace("v", ""); 274 | 275 | } 276 | 277 | private void upscaleCombo_SelectedIndexChanged(object sender, EventArgs e) 278 | { 279 | SetUpscaleInfo(); 280 | } 281 | 282 | private void resHBox_TextChanged(object sender, EventArgs e) 283 | { 284 | SetUpscaleInfo(); 285 | } 286 | 287 | private void resWBox_TextChanged(object sender, EventArgs e) 288 | { 289 | SetUpscaleInfo(); 290 | } 291 | 292 | private void useGFPGAN_CheckedChanged(object sender, EventArgs e) 293 | { 294 | SetUpscaleInfo(); 295 | } 296 | 297 | private void Window_Shown(object sender, EventArgs e) 298 | { 299 | var app = new App(); 300 | var serializer = new XmlSerializer(typeof(App)); 301 | using (var reader = new StreamReader("App.xml")) 302 | { 303 | app = (App)serializer.Deserialize(reader); 304 | } 305 | if (_latestVersion != app.AppVersion) 306 | { 307 | var result = MessageBox.Show("A new version of SDToolkit is available: " + _latestVersion + ". \nDo you want to download the update now?", "New version available", 308 | MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 309 | 310 | if (result.Equals(DialogResult.OK)) 311 | { 312 | var process = new Process(); 313 | process.StartInfo.FileName = "SDToolkitUpdater.exe"; 314 | process.Start(); 315 | 316 | Environment.Exit(0); 317 | } 318 | } 319 | } 320 | } 321 | 322 | 323 | } 324 | -------------------------------------------------------------------------------- /SDToolkitUpdater/Window.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 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAMMOAADDDgAAAAAAAAAA 124 | AACJmrECi5qzBI6dtECWpr8ffYinBZWXrAaamqgBfoKrCoiLqxSUjZ7/lZCa/5mTnP+clp7/h4u//5WT 125 | tf+PhpT/jouX/5mQnP9AQXz/QkeD/0JKhP9ETYb/R1OL/0ZOhf9PVYX/GzMq/xk1Kf9dXnP/VVNr/z48 126 | SP8vS0r/NVVP/ypIQP8vRj//JTwz/ytBOP8xL2z/KyFJ/0JCd/8/M1P/UFl2/1dge/9cYnz/Zmt9/3Fw 127 | eP9feob/WXmF/116iP9ieoj/Y3mI/2Bygf9QY23/IGR6/zJQVf9EXWLKTGZqPktscBQxYWgUAAAAAKKh 128 | owXY08tWyczQFLvJ1hW63/MEkJ6xApOgsgqZpLgBAAAAAJ2csQKVl6lYl5Wp85ucqPucmaX5nJyn/5iW 129 | pv+Yk6f/lpGo/5OOo/+NiZr/kI+f/39/lP+Sjpf/QUJ8/0JEgv9GTIj/TFWL/1Zhkf9QV4j/UleC/xkr 130 | Jv8ZMSX/WFlp/0NDUv83LVH/JSI5/zlYV/85UUz/NE5I/yc4N/8oJUH/KSpf/y8eOf85NWD/NCJL/0o/ 131 | Yv9XX3r/YmqD/2Vsgf9jZnP/bHmF/2F7if9feoj/YnqI/2B0g/8cPDz/IDpA/xw6Q/9FXGL/UWpv/09r 132 | a/87Y2P/SnVz+0h1cyFyk7cErdv1BanK5gPT19kC0c3PBAAAAAClrbwOAAAAAKOyywJ/pMw0gZ7L/46Y 133 | rf+Tm6v/kJWn/4uRpP+LkKH/d4Cb/1toj/97gJ3/lZKk/5ybo/+KiZT/UVOO/3+Akf9DSYX/S1CK/1Jc 134 | jv9caZT/V1+O/zlAW/8bOSz/XVtr/09NXf89NkX/LitE/yAZNf8wPlX/MUtL/zcvev8xIW3/NTBq/zFE 135 | dP8vMGX/Qi1Y/0VHdP9JTGj/WFBy/19nff9ob4L/Z3OF/2dvfP9sgI3/ZX+N/2Z/jf8oPUT/L0xV/yle 136 | bf8eTUT/R2Fi/1FrbP8/aW7/On16/zp/d/9GsKD/T6uacoeRsgGJk7ADk5y1AZ6ftiIAAAAAAAAAAAAA 137 | AAC9tbOuxbiy+MW7rP+8s5z/wr2l/8zIrP/KyLb/y8q8/77Buf+ztrT/q62//3+Ltf9CTIv/QkyM/0RP 138 | iv9CSon/REqH/0tRif9YYpL/XGiU/1hgj/9KTl//Wlhk/15baP9FQVD/JCRP/15eav8mGUL/LSJi/xgW 139 | Kf83M2X/TkOA/zkpcf8sI1D/IhJM/yseVP9LQmP/HQw3/1NYbv9jaXv/XmB3/25ygf9YaYL/WW+F/2N8 140 | jP9rhJP/Zn6O/zVWYf9Ja3L/F1BB/z9bWv9TcnL/TYmT/zqIfv9AmYr/PpaJ/0uzpv+EkrFbAAAAAAAA 141 | AACPmbMdAAAAAAAAAACgyugYmsbg/9r4+v9AaHL/MWZd/zBlYP9Qcnz/W3t2/1eEcv9ci3j/S5ie/1Rx 142 | fv9MWYr/SVCM/0VQi/9DUIr/QEiG/0ZNif9JUoj/VmKR/1tolf9ZYJD/UVhm/2Vlc/9UVGb/Gi5d/2Zl 143 | bv9kYW//LjNU/ywmbf8sIkD/Sj9J/0ZHXv81QV3/PS1k/zQeZf8wNnL/ZVpm/1Znkv9hV2//ZmV4/2Zw 144 | gf9pgJD/WW+G/1lwi/9ieI//YXiL/2Z9jv86ZXT/XnmB/zBfWP9FY2H/Smdk/zJ4dP83in7/Q5uN/0Gh 145 | kv9Blon/j5+7/5Cbt5WSnrsBk5y3EwAAAACQj5wBnpuo3X+Ek/9jfIT/NmxZ/zVrVv8xbFL/PGVR/1eC 146 | cv9chXP/caNu/3KqZ/91qnT/U3CU/0hQiv9IUoz/RE+J/0RMh/9FTIb/UFqL/1tpk/9hbpn/VV6P/1pZ 147 | c/9eYHL/VVBr/3Ryfv9tb3r/Z2Fy/1Yqav9bOlL/MSla/zsjlP8+PYT/OB2O/zYdUf9FSI3/Njl4/3Rq 148 | c/9DP3D/OyQ9/3BkdP9xdYT/aXiK/1xwjP9ldpP/YnmR/2N6jf9ddIn/SnF4/2J9h/8/Xlv/VWhq/1tx 149 | c/84fXb/Not8/0SUiP9Dn5H/Q56S/2KUn/+Sm7b/mJ66B5ObtwcAAAAAkpCYJpaVof+Kjpr/goCP/zVr 150 | Vv81YlH/UGpd/1qDc/9agnH/WWWS/2JpnP9ka5r/XGKU/1BYj/9IU4v/RE6H/0VMhf9PWY//TFCJ/1pk 151 | kv9lcp3/YWya/1BTg/9XWnL/YGN6/zQ6Uv9ycn3/b26B/3RzgP9MEnf/MDmN/z1Yev83G4j/UDuO/ztB 152 | bP9qU3T/YlFh/z8ViP95cHb/dm52/zQ4bv9xaXf/dHeC/25xiP90f5H/ZHaR/2Z6jv9jd5L/S1KI/0Bd 153 | Yf89VlH/R19u/0pjY/9OZmf/OYJ0/zyLgf9GiX//QJeM/zyTh/9Pe4X/kpi2/4+ausaJlbYFp6OlAZ6b 154 | nuSTkpn/mZSe/4OIlv+Gg5L/gIGT/6mqu/9/e57/dnea/1Zgkf9ha5r/XmWV/2JomP9KUYr/SFGK/0ZL 155 | hP9RW5D/YXCc/1lllf9ga5f/b3ii/2Zwnv82NHn/WVx1/0dRhv9bXW3/YGB+/3Z3gP95eYP/eXZ7/1cR 156 | Yv9BV3r/PSx2/0ZGkP9CUI//VVOd/4R5lf97dXr/hHp//4B1ef9WT2j/Z2V3/3x6hv95d4r/f4GN/1pj 157 | iv9XWpX/P1Rf/zdPT/8yUE//Gzc1/1Niiv9Vbm//UGhq/zJ7bP8+g33/QYF7/0iViv9Nm5L/b4ik/46X 158 | uP+Sm7v/mJ67BqulphCloKH/lJee/5SRm/+Ni5b/gYSV/2pulf99e5v/fnyf/3R0mf9cYpX/YWia/2hu 159 | mv9nbZv/WWCT/1BXif9XYY//Y26c/3F3of9cZZX/YGmY/3B5pP9weKP/YGOT/1NXbf9fXnb/ZmiC/25w 160 | e/9nan//bm54/3Z0fP9ydHf/ZB+S/2prff9iZ3j/XUeW/3pVhv94c3//gXuD/4R7gv+AeYP/dG11/1NP 161 | jf96eIj/eXuL/3J1l/9XXZj/NDd1/0FaXP9Rbmn/OVVT/zhCcf9NXIj/TWhp/1Bpbf85fnL/Uo+N/0eL 162 | g/9Ih3//Zo2G/4OTu/+Umrr/lJu995uivgOrp6isr66w/6ijpP+jnqH/m5me/4CBj/9tbJj/fnyc/4B/ 163 | of94eKD/YGaX/2Npmv96fqX/eHei/2tzn/9faJb/anab/3mApP9+gqb/ZmiW/zs3bv9hZpX/dHqk/2Rp 164 | lv9JRnv/VVZx/2xsgP9hZ3n/Ymd7/2Bld/92cnr/e3V//3JyfP9xc3//b3F//25vfP9xcnz/enWE/4V7 165 | h/+Ee4L/gniC/3x6iP8vKlb/REaG/0xTkf9KUZH/PUKD/zpCf/9MY2P/UW5l/zxYV/8/SYH/V2OR/0xl 166 | df9Sb3D/PYF0/0l+dv89dmn/V3Vy/4+byv+Rnsn/mJ27/6CkvvaUnr1VpKOu/6SjpP+npqr/ko2T/6Gf 167 | ov+AgJD/XmCR/4F7n/+Cf6X/eHum/3J6tf9vdaL/hYao/4mHqP97faX/XmWW/1hgjf9xd6H/fH6n/3l6 168 | ov9gYZD/NjZv/2Nnlv9iZZT/UFCE/2dpeP9vbIH/Y2SD/1Vaef9/eoH/dnR//396gv93dH7/eHaC/3Fv 169 | ev90doP/bnCB/312gf9+dH//hH2H/3Zxg/9xb4n/TFCT/1VgoP9WX5v/RkqP/0JIjP9DS47/UWxo/1l3 170 | bv9GUof/RE2M/15qm/9WYpP/TWpq/0t5cv/08vT/YnWD/2x7sv9sfLj/bXm3/6Ssyf+nqML/l6C+/8a6 171 | sP+/ta7/qa2z/6CirP+Ok6X/Vl2R/3Fxof+HhKX/hIOr/4qPv/+rwfD/jYyw/3d5pP+Dg6b/fn6m/2xv 172 | nv9QVIz/Ozhv/2Rpmf92eaP/am2b/1RVjP8mHmf/R0eB/1FTgf9QT4H/bmx7/3x8gP95dn7/d3R//2Vs 173 | fP+Gg4X/gH2C/3t4gf99eoP/aWR0/3FvgP92c3//aGV3/01TmP9QWZ3/VFue/1tjov9gYpr/TVKY/0pO 174 | lv9MT5f/T1Wb/1Jdo/9QX6H/SFmh/0NLj/9ibZ//ZXGg/1Rgjv9pdZr/Z3Sk/2p3rP9te7L/dYK+/8TP 175 | 4//DyNj/ur3Q/7y6x/+jpaj/u7Ov/6iqsP+ip6//iY+k/1laoP9xdKH/dXmp/4OKt/+hv/H/kIWq/5ud 176 | rv95dJn/aGub/4J/pv94d6T/VluT/zQubf83Lmb/Xl6R/2dmmf9oZ5v/XWCR/1BLh/9YVYr/R0d4/0lK 177 | ff+Df4b/f3qC/4B6gf+EgIX/hn2D/4aChP95d37/dnaE/3t5gf+JhI//bGd6/05UnP9UZbT/XXfM/15y 178 | vP9WVIv/VFib/1teoP9aX6P/Xmen/2Nqrf9ZZav/RVWh/0JQnf89SI//ZXCk/3F8rf9qdKX/VmGY/2h2 179 | pf9pdqr/bXuz/3J/vP+DmeT/ssXa/7e/1P+jpbr/1c7D/7a7vP+ys7b/pqmw/3+Hov9zcJ7/cXGi/3t6 180 | q/+cv/b/qsDb/5qXrf+GgJz/enmT/35+mP9wbpn/e3ej/2Vlmv9OUYv/JRla/zAkZP9eW4z/Y2SV/3J1 181 | nf9sb5f/XlyN/1BMjf9PSYD/bHGC/3Jzgv9UYnj/e3uI/4WBif+Phov/hn+G/3Fwgf9tbX//cWx4/1dl 182 | r/9icbL/PEB+/295tv9SYJf/VFeX/1Zanv9fY6j/aW+w/3yEvP96hL3/anKy/1Rdp/9JUp7/R1Ca/2Bq 183 | pf9tdav/cHqp/3B6qv9qcaX/bXmt/216tP9terr/fJzw/3+W9v+dzvb/wb7I/9DJwP/Z08n/0NHO/4qZ 184 | x/+dosD/eXOf/316p/94k9X/hJG5/4qPpv+DjbH/jY+g/4qJmv+Sjpf/eXeV/3Rxnv90cKH/Xl+X/0I7 185 | f/8vJGr/KBxp/yEYaf9gW5D/a2+Y/2lqk/9lY47/gX2B/2R1j/9ibob/gX+M/3t8hf+Nhov/ioOH/4mC 186 | if92c37/a2p8/29vgP92dYT/e3uM/3aBmf9urur/ZWWe/0xWn/9eYab/bnS6/3N6wP90e9L/Yo7p/2hv 187 | rv9pcbD/aG6s/2Vtqv9PWaD/SVic/3N9qv9+hrf/fIW2/4CMv/93hL3/bXq5/26B2/93ovr/kKTh/97g 188 | 4v96ibP/fI28/6a+6P+Bj8P/gH+n/395o/+HgKz/ipe+/36QuP9+jLT/doSs/3SAqP+RkZr/ko+V/4F+ 189 | j/9hY5X/a2ea/2Jgm/9iYJv/YV2Z/0xHjf9HP4f/OzCE/ywiff8wMn//i4aL/2lkeP9fdJD/bHmP/2Vv 190 | hv9ycYH/d3iD/3R4iP+FgIn/gX2K/29wff9fZn7/a26E/09XgP+Kho3/doCv/1xfl/9gY6D/a220/5XF 191 | /v9ue9r/ZHbG/2Nnqf9iZqj/XWao/3mBtP+HjLr/f4W2/2x2rf9hbKn/foq3/4yYxf+Nmsf/fIfA/3J8 192 | uP9we7r/eZv5/4ei7/+OqeX/e4m0/3aDsv90grH/d4az/35+of+Df6v/tdHz/4uZv/+Dkrn/eomw/3yJ 193 | rv9zgan/hIOW/3l6jf9qbIT/eXqU/1tcmf9maJr/dXaj/3t7pv91cqD/fXym/21qnP92b6D/hoie/0lb 194 | hf8tR3b/U2eH/1Nmiv91eoz/aHCI/2Vpfv96fpP/a3Sg/1xqm/9ZZJb/Z3CI/2Nnhf+LiY7/g4KJ/2Bh 195 | k/9mY5j/XGSo/3GN2f+Bo/D/d8f8/1tdn/9XXKD/U1qg/1Jaov9QXKT/V3GM/5my3v+Nl8T/eoK1/3N+ 196 | tv91gbj/bHa0/4ms5/9+jMX/cHq3/258uv+Jo+z/i5vL/3CErP+LmML/h5rE/4Kawf+Ef6D/i5K//5Sg 197 | w/+XocT/jZi9/4KPs/+CjrH/d4Sr/2dzm/9WXYv/V1d3/29yif9FL2T/kYB6/2lXZf9zb4f/d2+J/3Fu 198 | lf9wbZv/hH+T/4uDlv9vbof/UF6B/21yiP9wcoj/YGaF/25yjP9yeZ3/X26g/1ppnf9baZ3/XWqf/1Rg 199 | oP9fapD/enqD/4eGj/+Jip3/VFuW/1dlpP9ck9D/WV+u/0lPo/9QU5r/TFGb/z1KmP9kisr/VWy4/4aT 200 | 1v9qgNP/aYLY/3yu9/+Rns//f4vA/252tf+XnMf/iaXg/3yLx/91gLn/e5TV/6a92/9wiK7/l7DZ/4Wg 201 | xP+Oqc7/iIWj/6On0v+cqMX/nqbF/5igvv+Wn7n/jJa0/3OAp/9ZZpn/S1qS/0BGhf9nXHf/m4+A/1hX 202 | h/9ZXYr/bGmK/2trjf92do3/eHSO/2h6mv9yg6D/bXiX/2dvkv9raY3/bGqI/2Fpiv9zdpL/YWue/1pq 203 | nP9Zapz/WWqc/1homv9baJr/ZXid/2l9of9fcpv/Xm+Z/0Ril/8+QYD/Tmup/1Vgqv9rfrL/cInC/36O 204 | yf94isf/gY/H/4WRyf+Fk87/hpTR/4ud3P+Co/H/j5/X/4GLw/9uc7T/n6fP/5mk0f+DmND/c4K+/3N+ 205 | uP+Zud3/cYy1/3mWvP9tkbb/ZYSw/42Mq/+Gi7//haTM/5ijwv+boL3/lp+5/3yGqP9cZp3/SliT/0tW 206 | kv9maXr/jYR9/yIldP87Qo3/R1KU/3Bzlf9maI3/amqP/253mf9oeZ//a3ac/0Rhkf9SXpT/XWGQ/2Zn 207 | jP9tcI3/Y22Q/1RlmP9XaZr/VmmY/1Vnl/9WZpj/UGCU/2h0lv9weJj/SWOX/z5dlv9KbJj/VG2d/zs9 208 | Yf+hoaj/qKqy/6est/+op7T/gICp/5KNq/97daH/doG9/2l2wP9ncsL/ZXPL/4KV0f99h8L/kZ7Q/56n 209 | 0f+SodD/kKDP/32Sx/99ksz/eo3F/2uSu/90mcD/c5S3/3SWuv+Slrn/iqLX/3aZvv9znb//d6bF/4Cr 210 | xv9fc6v/VGSg/298m/+PkZP/X15w/1ZfoP9FTZn/RE6X/0BHkP9IWZL/TVmO/0ZWlP9PYJ7/ZXSb/0ld 211 | kf8yQ4H/PlKN/0tbk/9UYZT/WGmU/1Jolf9PZJb/T2OU/1Rnl/9TZZX/T2GU/21+nv9ve5v/cn2c/2Rt 212 | kP9beKP/P1iT/2ZdfP/Sy8D/qqSo/5SKkf9ASnb/P0uR/0RMmv8+TKL/ZHzA/2d4uv9qe7//anbE/4OT 213 | 2v9/ktT/cHW7/46h3v+OntL/jZ7Q/46ez/+Nmcj/kbPn/3iJv/9rmsD/bpi9/3OWtv9rlrX/cZq4/3yj 214 | wv92m8D/cqC9/3alv/97qsH/aHuf/1Rai/+boJz/NDFf/0xYn/9SXab/Tlyk/0JKl/81Nor/P1CP/ztH 215 | i/9EUZT/Y3Sh/09fmP9HXJf/SVyO/0VPgf9DVZD/SFmT/0xilf9LYJX/TGGY/01kmP9PZZn/VGeb/05j 216 | mP9OYpX/XnCb/2JvlP9ocZD/S2eX/zhdl/+zrrf/sKqk/2FYb/9UWHb/mI+N/yUgP/9ae7//i5TC/5OY 217 | v/+NlMP/jpLG/4aPwP+po7D/l6TL/5Gr2v9/kNT/fYzS/4SV0f+fvu7/kbPo/5W32/+Mp8r/Y5O3/2iS 218 | tf9pl7j/dZ26/3GWsP9xm7r/dKLE/26fwf9+pML/iK/H/0pGev+hq7X/Znml/1dtqv9Yaa//Slmr/0ZU 219 | p/9LXKn/QU2d/zpAkv9LW5f/XHCi/0pXk/9BSYD/QEt//1Rcf/9aaYv/PEuI/0FSjv9HXZT/SWCW/0df 220 | lv9JYJj/TWKc/1Fln/9QZZ7/UWad/1Vpnf9baZr/d3mQ/25viv9ZXof/TGek/zEemP87Nav/c293/31m 221 | hf+IhoP/eHym/01uzf9biOH/eKXr/4Wg5P/C1O3/l36V/3Jxuf9of9f/aIDW/4a9/P+Nwfz/nc/9/5W3 222 | 5v+Tstf/javO/2iOrf9rkbD/aZW1/2yVsv9plbD/b5m2/2qYuf94n7//fZq8/4Gauf82LWX/ZazX/2d/ 223 | uv9OZLP/Slqw/0ZXrf9FVav/RVar/z5In/9KW5z/UGOb/zxFif89RX//P0Zx/zxDdP9DSXX/Q0l4/1Rj 224 | if9BUY3/R12V/0lfl/9EW5P/Q1iT/0ZbmP9HXJr/S2Cb/1Bmnv9RZJ7/VGWb/1VgmP9WYZn/SFKU/zpA 225 | iv84TYv/Lkh2/3Rtcf9+bnr/iIWh/2ljYv9JYLr/UXPR/3Nknf96Y3//nI2j/7i+uP+mkq3/aYTc/2eC 226 | 2/9zqfT/lc/9/5TB+P+g1/z/ndb7/5W43/9rkKv/cpCq/2mSsP9ok7D/bpGw/2aXt/9smLn/fZy8/3qX 227 | uf+Am7v/o7zb/3GJxP9Rabf/RFix/0Zbs/8/Ua3/OUeo/zY/oP85QZv/RVGY/ztCj/87Qob/Nzh1/0dO 228 | ev86PnP/Q0hy/01Uf/8+Sof/QlOP/0Zbkv9HWpH/QFKL/0BRjf9AU4//RFeT/0hcl/9MZJ7/UGmi/01j 229 | nv9OX5r/R1SW/zg+i/8yN4L/MTN5/ztTiv85PGP/kYSC/7Snnv9bbqD/VGyw/0pfuP9ScMr/e6Hq/150 230 | zv9tiNv/a43g/2mJ3/9qh+D/dqv3/5HJ/f+Yxvf/krfn/6jc+/+f0fn/Yoij/2qOqP9qj6v/ZJGs/2yU 231 | sv9xlLb/cpK0/42rzf+BncD/iabH/4mozf93mNT/T2S3/0dcsv9DV6//T2as/05nqf9Ra6r/SmGl/0ha 232 | nv8/TJL/OkSG/yUkYf82OW7/ODxx/zY8dP8zNn7/OkOH/z9Ujv9CVY3/QVCI/z1Mhf9BUIr/PUyJ/0JU 233 | k/9DWJb/R2Cd/09ppf9OZ6L/R1mc/z5Kkf85PIj/MTF8/zU1fP9MWZ//W2ay/1pmt/9ea7L/YW+2/2Bw 234 | uf9keMD/YnfE/2iAzf9lh9r/bZHm/22K3v9ym+v/eZ7r/4Sz9v+c0/3/mcf3/4+04f+Ns93/iqzV/2eK 235 | ov9qjqn/a46o/2qSrf9ykrD/d5K2/4ifvf99m8D/fZ/E/4Ghzv+Ds+f/h7Xv/1Bouv9IX6r/SGGm/1Rr 236 | rf9Va6z/WXOx/153tP9Ybqv/UWSn/0RPlf9BSo7/RE+L/zU4e/8pK3b/LjJ//zpGiv8+UY3/PUuG/zxF 237 | gv9ASYn/RE+P/0VPj/9FUZL/RFKR/0Namv9IYKH/SmSi/0FUmv87R5H/ODeC/1pho/9QUqf/V1+u/15t 238 | t/9lc7r/YnW7/19stP9rcrj/aXfB/2t8yf9vhdT/cZbl/3OW7P96q/j/fqv0/5nI/P+Wz/v/msf0/5O0 239 | 4P+Mr93/ibDg/5vT+/9lh6D/aY6p/2SNqv9ymLP/dJGz/3uSt/98m8T/gaHM/4Kl1P+Ht+j/j8L1/4rA 240 | 8/9Na7//Rlir/0hWqv9MWqr/UGCq/1dprv9ecrP/X3W0/2Fztv9VZav/SlSc/yolcv8oIXL/KCd1/y4z 241 | gv86R4v/PEuJ/ztEhP9OW5r/VGOj/1hop/9ZaKj/Vman/1Fcnf9HU5T/Rlue/0ddoP8/UJj/OECM/zEv 242 | fP9TU6j/WViw/19quP9icL3/YG2//19pv/9qdb//bHa6/2Zvuf9nesr/c5Tn/3qq+P9/uvv/gqbx/4ml 243 | 6v+QvP3/jLX1/4Sm1f+LqdH/g6PI/46x2v+JqdD/aIuk/2mNqf9kjK3/bJCy/67S8P+axOn/kb3o/5TB 244 | 7/+LvO//m9H7/4nI+P+Gvu//WH3R/1yD0v9wkc7/aHq7/1Nmsv9bcLb/WGqy/1Vpr/9fcrT/UmOn/01Z 245 | n/8sJnn/JBxr/yIdav8tMoL/NkKI/zlChf9PX5z/YHGp/217sf9wf7f/cIC3/2l8tv9gc6//U2Gh/0hU 246 | mf9FWJ3/QE+Y/zY2iP9FRJz/SUOj/1VbtP9jbr//ZXTB/3SIxv9ygMn/anHB/2p1xP9qc8D/YXvM/3GS 247 | 5v97u/z/gqb2/4ux9v+FtPz/hqzv/3+izf95pdr/gaHH/4Ciyv+JqtT/haPK/2GBnP9pjar/ZIyw/2mO 248 | s/9mjrT/a5K4/3Kbwv9mnL//dazS/4Gr0P+Yu9//gKfW/1x9x/9QZbr/TmO8/2l/2f9/p+f/dZHO/2R4 249 | uv9bcLT/VGiw/1FgpP9QXaL/QkmW/yIZZ/8eGGX/Ky2A/zU8hf9MW5r/WWuj/11vpf9aaqX/T12c/05g 250 | of9Ya6v/XHCt/1drqv9UYaP/RE6Z/z9KmP85Moz/Qzqg/1FPrP9ZX7f/ZXbC/3KHzP+Cnt3/eI7Y/3yT 251 | 3f9xfcv/cHnH/219z/9jj+b/fLH4/5LD//+Btfn/fJ/m/4Cj0v+HqdT/gand/32ex/94ncr/eZfC/3mV 252 | wf9niqb/Zoys/26dwP9mkbb/cJW5/4+31v9vmsL/ZqXT/3Oew/9+ocf/hq/X/4Sn1P9sktH/VGi7/1Jm 253 | u/9XacD/XG3C/19sxf91lN//gaLc/1pvtP9KXKD/Sled/0FFkf8dFWD/Hxpl/ywrgP9HVZj/U2Sf/1xt 254 | ov9YZp3/QTCZ/0Eonf9CLaP/Pzya/1Zqqv9abKz/Wmyv/1lxwv89QZj/OjWU/z83nv9PTq7/VmG6/2uB 255 | yf94ltf/c5Xg/3+t8f+Lr/X/f5jp/3OJ2/9rgtn/WZv2/2iN6P+Ht/n/grX6/4es7/+FpdT/g6bb/4ar 256 | 4P93oN3/epnF/3aSwf93k77/W5a3/1+Psf9kk7//ZpK8/12Eqv9mjLH/bJS6/2mWwP92msD/dZ3E/4Wy 257 | 3f+FsN3/fK/p/2Z7wP9Wa8D/VGfA/1hpv/9caL//gpvf/2Nwwv9whcf/VWeu/0JMk/88QY3/Hxhk/x8Z 258 | aP9GUJn/UWCe/1hroP9hb6L/RC+Z/2dNtP9qVbz/cVy8/2pVuv9OS6b/Wm6t/1Zprf9dc8L/W3bQ/zgx 259 | lP89OJz/Skqw/1dmvf9ngMv/aIvc/3ie6P+UvvP/eo3h/2x30f9ugNn/XH7e/2Oh9v9ukub/gKLw/4Cv 260 | 9f+Gquv/i67r/36cx/9+ncP/dZbB/3iWvv93jrT/cY23/1uIp/9dia7/YZO4/2GKrf92m7//aIyx/3if 261 | xP91nsf/dZi9/3Oawf9wpMr/iLfs/5K57/+Ev/f/gJvb/3mN0/9WZb//WmS//2Jmw/9YX77/W2W1/2N1 262 | tf9TYaj/P0eS/yYfbf9ITZf/VWCh/1xrpP9ca6H/NDZ6/y8jhv82LJL/OCya/zUonv81KJf/NTKY/0hY 263 | nv9fcbH/Y3a8/2uN3P8tJ5L/NzSa/z9Dqv9SYrz/W3PJ/1eC4f9mluv/cYDY/2t0z/9qedT/Y3jX/2uV 264 | 7P9ph97/frL5/32k9P9+nev/hqHS/4yz2P+Cn8L/e5m+/36ZvP+Jo8n/eZO7/3mVv/9eh6b/X4io/2OI 265 | qv9jiKn/aI+0/2iMuP9nirP/cZa//3GZwv9znMX/dqfO/3e48/+NrOH/g7bz/4nG/v+Etvj/e57k/4Kd 266 | 3f9faL7/e4bg/0tOqP9JU6n/XGqw/zo8iv8dGWP/U12j/15qp/9odKv/b3uv/3uItP+IlLr/gYm6/4OL 267 | u/+LkcD/h5S//4CQvP94h7r/dIK7/218u/9oesT/aIjW/zAtlv85Paj/P0Ws/05hx/9Lb9f/XGnK/2Bp 268 | yf9jcc3/YXLO/22F2P9uh9r/c5bp/36g8/94l+n/i7f5/4Shxf9/mrz/gJq6/4Gcvf+Cn8T/dJS8/3aR 269 | uv9yj7f/Xoej/2WKp/9qjrH/a4ys/3OTsf92lrz/f6LF/2+Zwf9xmsP/bKPQ/3eo1v97w/r/g8n7/47T 270 | /v+EufX/iL77/4rF+f9qiNv/ZnvO/1BZvP9KUaj/SU+n/0BKm/8/RZb/TFCc/1pkp/9nca3/c320/4GL 271 | u/+Nlr//hY+7/297rv9VYqH/YXGs/3SDuP+KlcH/j5jE/4OMwP91gL3/a3m9/2Z4xf83QKf/NTam/zg8 272 | pP9ASLj/RU+8/05Uuv9bZMT/W2fG/2d6yP9zitj/fary/3ah8v9/p/P/fqj1/4Go7/+EnsD/fZe5/3eU 273 | tf9wjbD/bY21/3ORuf9zkLb/c5C3/16Gn/9ni6b/aYup/2ONr/9ukLL/bZK4/3CUtP9xlbr/fqLH/3ed 274 | yP93ncr/f6bZ/4S98P+Kx/v/mtX+/5XW/v+Xzvv/aInc/1tpyP9IT63/TVOo/0JJn/85QZf/Li+E/1Vb 275 | pf9jaq3/cXiz/36Fuv+Kkb7/kZjA/1xmo/8jKXn/UFuj/0hSnf8hKX//hpC//5Oaw/+Mk8L/fIW+/3F8 276 | vP9odbz/YG+//y0un/8tLpv/Pj+t/z0+qv9KTLX/UFS6/2BsyP9nfND/bJPn/3ae8P9xkuj/h634/4Sq 277 | 6/95m9L/iqTH/36bvP94lLT/c5Cw/3aSt/9xhqv/boiu/3GKr/9mg5r/ZYKa/3eMpv9xiqf/b4mi/2iL 278 | sf9qiKn/cJrA/3Sew/9/ocX/i6vN/4Gjzf+AqNv/ir3z/6LZ/v+g2P7/jMn5/22W4/9eacj/T1Sx/0xR 279 | q/9AQ5z/NDWR/0hLnP9dYqz/bHOy/3qAuv+Jj8D/jZTB/4uTv/9rcav/Zm+r/4ONu/9/iLz/YWus/32H 280 | uf+Rl8P/jZXC/4KJv/95gb3/cHi8/2Vwuf8jIpf/KCeR/zIzn/85OaL/SUyy/1RZvP9casf/YoDV/26R 281 | 5P9vlen/fqT0/4Sz+P+Rs9n/k8X0/5i73P96lrj/fpi4/3WStf94kbP/dYyu/3SIq/9yia3/aIec/2eF 282 | nv9yi6f/c46o/26Mqv9tjKz/bYyu/2yGq/9virL/eZK5/3Wcxv+JoMf/hq/j/4at5P+MwP7/jL/+/47I 283 | +v9oit7/WWDE/0lLrf9JS6f/OjuU/yglgP9RVaf/ZWmx/3d8uv+Dib//jpPD/5GXxP+JkcD/a3Go/4eP 284 | uf+qr8j/lJvD/3F6tP97hbr/k5vF/5Saxv+LksP/gonA/3d+vf9rc7r/U1u2/zMvlv81OJ//Nzeb/0hM 285 | rv9WXbz/YXTK/2mC1P9ri9//eqXy/3Wd7/+ArPH/gK3s/4az8v+Dnr3/iKHC/3mTtP92lLn/fpi6/3iV 286 | uv92iq3/doms/2uGnv9uiaD/co2m/2uKpP9li6r/bYyr/3WVtf9zj7P/ZZTQ/4e16/99reP/g67j/4Wp 287 | 4v9/ouX/jMD7/4/D/f98r/X/YXDT/1VYvf9FRqn/QkKj/zo4lv8iH3X/Wl6s/3J2uf+BhsD/i5DE/5GW 288 | xv+Umsf/jJfD/3R/s/97hbX/p6nH/5OZxP9wfLT/go7B/5igyv+aoMr/lJvI/4yRxf+AhsH/c3y9/1xl 289 | t/8nIor/KiWO/1JXtP9KTa3/VF24/2F0yf9ridb/eKPw/4av+v+DtPb/f630/42/9/9ykrX/hZ6//4yh 290 | vf93k7T/c5S//4Gcvv91ia//cIOq/3SKsf9rjqX/Xoik/2WLpf9jiaX/Yomq/26Qrv9vkq//cJGu/3md 291 | vP+AocX/e5bC/4Sr5/+Zyvz/i7r7/5bN/f+Juvz/Z4vk/1Vdx/9SU7v/QT6h/zc1lP88OZX/REOb/2Vq 292 | tP99hL7/iI3D/4+Vxf+Smcf/lp7K/5KcyP+HksL/foe5/6KlyP+MlcT/e4i8/42Xxv+aosv/nKPM/5qh 293 | y/+SmMj/ipHF/32EwP9mcLn/KiSL/zErlf8vKpD/SU6q/1dhuP9shNH/e6Tt/3+2+f+Dtvn/h6vj/4Ws 294 | z/95osP/dJO4/3SQtP94lLT/kaW8/4Obt/+Ala7/gZGo/3CDqP9tgKb/YIea/2mJnf9jh6D/bIyn/2iP 295 | qP9tiaP/cI2l/3SSt/9ujLr/dJLD/3iVu/99msL/fZm7/4Sk1P+RvPj/gav2/3Wg7v9PVL//RUWu/zMt 296 | j/80MI3/OjaT/05Mo/9xeLj/g4u//4uSwf+PlcT/kJbE/5ObyP+WoMr/j5rI/4OOv/+jpsn/jJfE/4KP 297 | wf+RnMj/mqHL/5qgyf+Ynsj/lJrH/46Wxv+EjML/bHS5/ygnh/8zLZT/Mi6P/0JBnf9mdcb/cpPe/3uv 298 | 9/95sfb/fqrv/4msz/+AosP/cI+3/3WRt/9zjrT/dI+w/3GMrP9xi67/cIWr/3KHqv98kLD/dYep/2SH 299 | mv9ohpn/Youc/2qMoP9qi6P/d5Gs/2yOsf9tkbb/aoe1/2+Mtf9zj7X/epa7/32cwv98nrz/h7D4/4u3 300 | +v9+q/D/QECv/zcxmv8uKY3/KCJ5/zg3jv9TWKX/cny1/3yFt/93f7P/dn6z/4CGuP+Mj77/kJnE/5Gc 301 | xv+Gk8P/n6XJ/4yYxv+Hk8H/lJ7G/5OZxf+QlcH/hoy9/3+Iuf+Aibr/f4m8/294tv81NZD/OzSU/zMq 302 | gf9XXq//U122/2qO3v9xqvP/eqHp/32p7f9+ocT/epvA/3GPtf9xja3/c4yu/3SNrv91jq7/co6s/3CJ 303 | p/9xjK7/eJCv/3SPuv9qjJ3/a4mb/2iNnP9jiqb/aI6s/2qNrP9xlrf/bo6x/26Nsf9wkLX/dJa7/3eb 304 | v/9+oMT/hajv/4649/+Jtfj/cpbm/zs6qf8qJYf/JiB+/yAcav80MYj/VWCl/255sP9kbqT/SkuB/0I4 305 | bv9AOWj/T02C/251qf+Gkr7/e4q+/5mjyP+CkcL/eIa3/4OPvf9+grT/enen/z84cf9SUo3/UV2X/3B6 306 | r/9odLL/PT6W/zIugv85NYj/VFeq/1dluv9xqPD/dqbv/4Cq8P+Fsen/gaLF/3uYvP93k7T/dI+y/3ON 307 | rv9wjK3/c4yt/2yKrv9qg6T/d5Cy/3eKp/9wirX/aYqa/2WFlf9qjJz/bI6r/2mLpv9si63/aIin/2mI 308 | rP9vjrj/cZCx/3aUu/96mL3/d5q8/3qg5f+Pse3/g6/0/3+q7P8yLZr/LiiJ/yUge/8eGmj/Kyp8/1Je 309 | ov9ja6b/OjZv/2tphP8TESH/EBc2/4N6hv8QE13/XGup/2Z4tP+ElMP/eYvB/1JjpP9baqn/UliA/xsW 310 | Kf8ZIUb/fnaE/yonYf9bYp7/Y26r/zs8lP8xLYH/MS6E/z5AoP9LWK//YY3g/26Q4v9/qPH/iavX/3+c 311 | wP97l7z/eJG6/3aPtf9xia7/fZO2/3GKrP9siKr/coqo/4GVsv92iKn/eI20/2eFlf9qiZf/b5Cd/26K 312 | pf9qian/aoWk/2mGqf9riKz/co+3/3aVtv96l7r/gaPH/4Gew/9zpuv/erv4/3mm7f9HW8b/KieJ/ycl 313 | ff8mIHv/Ihxr/y0sd/9HU5r/Rk2O/xcPH/8aEiD/DQoX/xELEf8ODBv/Qk6O/0lYnf9qe7X/fI3A/3OG 314 | vP9RYqX/R1aa/zNBf/8PCxn/DwoV/0w9SP8NCBP/Mzh2/1llpf80N4r/NCyE/yUgeP8sJ4n/PkSz/05z 315 | 0P91qPP/fKrv/4iozf+Anb7/fJi8/3iXrv9zirb/cYex/22IrP9uiKn/bomq/2yHqP+AlK3/laOy/3yP 316 | q/9ohZT/aIWR/2WOlv9riqH/b4ef/2uHqP9siKr/a4mx/3GOtf9yj7b/epS6/4Gbvf9+oeL/irHt/2+c 317 | 6/80OcD/Kian/yginv8kHn7/LCd9/ygld/8nI27/RUyU/0lQkf8zNnj/EAw7/xYQG/8bETP/QkiH/0JN 318 | j/9RW5v/eoq9/4WUw/9/j8D/aHi0/0tXm/9CUZL/Eg9L/w8JEP8NBhP/KSVq/0lSlf9SW6D/OTqN/ykf 319 | df8lHnr/KR+H/yommP8+Rsj/a5vx/3mr8f+Pq87/iJ++/3iWuP92kbn/b4a0/26Frv9rh6//dIyp/3GL 320 | p/9viaT/boar/3+Vrf9of5z/aYac/2WFlP9ohJz/bYWc/3CJn/9qhqb/a4eo/22Lsv9wjbb/b5G+/3yV 321 | vP+Amr3/f6Pi/3Kb6f84PMP/KSWr/yYgn/8lH5P/Jh2N/yEYdf85NIT/KSRt/0JIk/9lb6T/ZW6i/15j 322 | mf9ISYf/JyFL/yMfRf85PXL/gY+9/4+dxf+Wosj/kp7G/4OQvf8wNXT/HB5J/ywrY/9OVZb/Y2mj/294 323 | qv9ncqf/REyP/zIsf/8hGWf/Hxtz/ycgiv8xLZ//MzKr/zo6xf9bguj/gaHS/6Cz0P+AnML/dI+9/3OK 324 | uP9thK7/a4ar/3CJpP9wiKL/a36i/2h5of9se6L/bn6f/2eEnf9og57/aISc/2aCov9rhJz/aoak/2uF 325 | pP9riLD/cY66/3CRv/94lr3/f5rA/3mi5P87PsH/Liuq/zUxq/8pIp//JB2S/y8sj/8rI4T/GxZd/ywr 326 | cP8+QIz/Nz59/ztBdP8uLVf/Mi9Z/19nlf+Nm8H/lKLJ/5iny/+frM7/oKzN/56qzP+XpMn/j5zD/4eT 327 | uf9LRXT/MSZM/zItW/9dZJT/TVOJ/0FIiP8jHGD/Ix1r/yYdgv8oIYv/MCia/y4lof8vJqj/PjrG/26Y 328 | 0v+Kocr/f5jA/3SMvP90irj/bIWv/2p8ov9tf6X/boSn/2h8o/9peKH/a3if/2x6oP9ohJ//Z4Kf/2yE 329 | nv9siKv/boWd/2uFp/9thaX/aoev/2+Jtf9xkcL/c5TG/4Ggy/9LWMr/NTGr/zk5qv88Par/Miyg/ygf 330 | jf8gGHb/IRpz/yMcb/8ZFFL/MjSA/15trP92h7j/gZK9/4qZwv+Rocn/mKfO/52t0v+gsNP/o7HT/6Wy 331 | 0/+jsdL/oK7P/52rzv+Zpsr/k6DF/42Zvf9/iK7/aXKd/1xqn/8uMXP/Ihlb/yIcZv8yMIT/NCmK/y8j 332 | jv8mHZH/KR+Z/zYvs/8+Usf/fpzI/3+UxP90irf/boa1/3CGtP9tg6r/bH+k/2p9qf9oe6X/a3qi/3uK 333 | p/9tfKD/aYSe/2eAnP9lgp7/aYWl/2iCof9pgqH/a4Cb/2eCqv9thaz/bpbG/2+c0v94o9j/PUK7/zUx 334 | nf81Mpv/KiKG/2J/pf9fgaj/U3Wj/1VypP9Xda//RVeU/yEgZP9MWaH/eYy+/4WYxv+Lncr/j6HN/5an 335 | 0P+drtP/orHV/6Sy1v+jstb/obDU/5+u0v+cq9D/l6bM/5Oiyf+OnMX/hZO9/3CAsf9ET4//R1SW/1Rn 336 | pf9Xf7H/QW6c/0Jvnf9airb/XY+z/ysjg/8uIp//NC6s/3uby/94k8f/dIq+/2+Etv9vg7L/anui/2Z5 337 | oP9mdZ3/aXun/21/ov9vgqD/bn6f/2V9lv9ngZr/aIOg/2iCo/9mg6f/ZoKg/2x+mv9lf6n/aYKr/3Sg 338 | zf91nMv/c53I/zQumf8wKIf/XnWX/16Ckv9ZeZz/Z4mz/2uOuP9hgbH/S2GY/01jn/9JVZr/NTyD/15x 339 | rv+Ak8P/ip7L/4yfzf+Wp9H/nK3V/6Kz1/+ltdj/pbPX/6Oy1/+fr9T/m6vR/5anzv+Rosn/hZfE/3OE 340 | uf9AT5b/S1ym/0VUm/9RZ6b/RF+g/0BYl/9Sbqr/SWGY/0xkif9Gb3r/UmaJ/ysik/9iZK3/fpXI/2+I 341 | vf9ugrT/aoGx/2l5oP9nfqn/anul/2t9pf9vgKL/dImg/32Oof9mgJn/ZoGa/2aEof9mgJ//ZoGj/2iB 342 | pv9qfZj/Zn6q/2+Dqf9zncb/c5vB/2+KtP9ofrb/W353/1d3fv9Tdov/UnKZ/1JtoP9GXJL/QVGN/z5L 343 | iP9LWJf/Oj5//z5Ahv9DS5L/YnOx/4aZyP+Qos//lqfS/5yt1v+jsdj/p7TZ/6e12f+mtdj/o7HW/5+u 344 | 1P+ZqdH/j6HL/3+Swv9EVJ3/Tl2l/z9Mkv86RI3/MTmB/yMhW/85PI3/SVqg/0pekf9AWZL/Qmdk/0Jg 345 | WP9DWHH/MjGQ/3iFs/93lMr/aoG1/2h/rv9mdZv/aHul/25/qP9ugKf/boCi/21+p/9sfaX/Z4Se/2V+ 346 | lf9lg5//ZX+d/2d/ov9lgKn/aX6b/26Bpv9ug6j/dZK2/3egwf9wl9f/k7KT/1qBd/9cfoT/UXKN/1Nv 347 | mv9MaaD/QVmU/zs9d/8mJV//KiRn/x8aWv8uK3H/PT2A/ztDj/9rern/jZ7M/5an0f+aqtT/nazU/6Ox 348 | 1/+ksdb/pLHX/6Cs1P+dqtP/lqbP/4aayf9kdbX/Wmuv/0lSmf81OIP/Lit7/0RBj/9GTpv/QEWi/yMg 349 | Yf8mJFn/ZEVj/2dhX/9Pdm//QmVi/0xgjP8jMHn/aYzB/2aCuf9keKn/anqk/2R4n/9sfab/aXqh/2x+ 350 | o/9peZ//aXqk/2KBnpBnfJX6ZYKf/2J9nv9mgab/ZoGt/2l+mf9sf5//d4er/0lxv//by6L/9/Cy/8Hk 351 | 3P+Eu6v/l8XA/0BRef80Q3j/QVOM/52aw/89Omr/KB1P/xsXRv8fH2D/Sleg/0hTnP9FTZr/Rkya/32N 352 | wf+OnMv/lKHO/5Shz/+ToM//jZvK/5ek0P+aptH/lqTP/42dy/96jMH/Znm2/1Fgo/84PYL/TlCQ/zIz 353 | ef9NTHv/Pzxq/zAseP85PJn/T0p9/1tJY/9gmNX/Z5as/4a92/9/wN3/W7je/1damv9ikM7/X3iw/2V6 354 | qP9kdp3/aXul/2Z7qf9oeJ//Z3if/2h4ov9ihKFGXoGg7mGDov9egKD/ZX+g/3GYy/8pRmX/l5mc/7qy 355 | sf/Zz8z/zs3F/6HK5v+Yz/7/kNL9/8Xt+v/I3+7/t8vU/zg4Y/8mFzD/SlCP/0lanf9KYaL/N0iO/0ZU 356 | mf9FU5b/MzqD/0BBif8+QpH/ZG+x/3yJvv9verf/R0qZ/z5Hk/9VX7H/gZDE/4uYx/+BksT/aXi2/1Jh 357 | nv9XYp7/Q0KG/0A6hf88MHL/OiZC/2BThP8zL2b/Oyxs/1lHeP9RQGX/nN3z/3C+9v+c1fX/WXOs/12N 358 | w/9qq97/RHGt/06Evf9FN2T/ZHih/2V6pP9nfq7/Znih/2V3oP9ecJj/YH+hOluDpe1ffp//X36f/1x5 359 | lf9khbD/ZYCh/3mOuP9reLL/UWaR/3TWzv+H7ef/QL25/1bLzP+A6/D/odPw/z89X/9BSWD/QUZ5/1ls 360 | rP9cc7D/S16g/z5Tmf8wPYj/Iyt0/y83ff8xMXn/LSlv/yIfa/8pKXn/JiZ4/0JGkP9GTZj/MD2D/0tS 361 | pP9KV6L/Tluh/0dQj/9GS4r/Iho9/yIWMv8mHUf/Jxs5/zoqWP9BOGD/OjFn/zQsaf9VQmz/aHOa/0aW 362 | wP9Qsc3/RrfO/z6uzP9xm+X/aIXD/2aIuP9je6b/ZXuh/2R6pP9kd5//Y3yq/2V8qv9hc5//XnCdTgAA 363 | AABbgaXTXn6f/119nv9efp3/Y4Oq/1x4nf95o9X/e6re/3+x5P+ZzPb/l8/8/6vh+/+Qx/b/ibby/1Zr 364 | mv9MRnz/PzhW/3qX0/9hfLv/X3y5/0xmqv9BWqP/Q1qg/zNCkP81Por/OD2E/z1Bjf87P4j/Tluh/zM8 365 | hv9RZaX/U2Sp/zU+g/9MV6b/TFel/zU7hf8pLE7/JiFK/355lf81FzX/SStE/3Vvn/8sK2T/cXm3/0I+ 366 | gv9eWpv/cmqT/1ldnv99qdv/l837/4aw8/+GsfL/h7nz/2mIu/9gfbj/Y3qj/2J3oP9geKP/X3ai/15y 367 | oP9geaj/XnGg/11xoQ0AAAAAVXqhXluBpPVafJv/W3ua/158mv9hgqv/aYat/32o2/98sef/f6rb/4vE 368 | +f+Mv/X/j77z/5vM+/+lz/b/Rjlg/1Vdlv+Go9T/eprV/22Nx/9ggsL/VXa4/0ttsf9FZKj/Tmiq/09l 369 | pP9KWqH/co/E/0pdov9kgLv/T2mm/1pusP9TZKv/S1ul/1Zlr/9DSJb/Ihoz/yculv8/JUb/h2uB/2tO 370 | Zf96Z3n/Li9u/zkzbP8zLWz/OTBl/1BCeP9RRWz/n9D9/5zM/f+Hq+v/g67y/4mw7/9jgbX/X3iw/193 371 | p/9heKP/YXml/155q/9ddKH/XXal/193qOUAAAAAAAAAAFV9pBdZf6PFXH+f/1p+nv9bfJz/X4Ck/2GA 372 | pf99r+T/fbfr/4a/8v+Guu//fKvj/43I+f9yndj/ksj2/1JWe/8yN3L/YXPA/4Om2f+buOX/Z4vH/2GH 373 | xf9uls3/bpXK/3qh0f98o8//cZbH/2OFv/91ns3/Zoe9/116s/9GW5r/Vm21/1Vnsf9bbLP/TVGk/y0f 374 | Pf8pN6L/b1pu/1c+U/+OeIb/XEVh/15Ubv9APIz/Pj6A/zxWkf9iVYH/pLnQ/5jN/f+GqOf/lMb8/4Om 375 | 7P9yjsz/YoPB/151q/9ieKf/WXOi/1lunv9ed6n/X3Wj/1tzpO9jfq0QWW6bFVJ+pQFUfaICV3yjSVmB 376 | o+lbfZr/Wnuc/1t5l/9fhKz/Y4Ww/3Kk2/+At+z/grjt/3il3f+HuvD/ir3x/46+8/90k8P/U1af/yks 377 | X/9DTqH/P0md/2aGy/9XesH/T3fA/1OBxP9cjcr/Z5XM/26cz/92odD/ZI/E/2qRxf9nhb7/cY7G/15z 378 | uf9ierv/V2ax/1ZQp/80Kmz/RD+N/3RYa/93ZoL/qpqj/6aVrf+Xkaz/aW6s/4CRvf/G4e7/foCk/5Kh 379 | 0P+czPz/i6/s/4629v99n+b/YXy9/1twrP9bd7H/XHOn/1Zun/9Zdar/W2+e/1drmP9deKaPYHuoBFlw 380 | mhxRfaMDAAAAAFh7pAJZgaVDWnmU4ll5mP9afZv/XoGm/1+Bq/9kjMH/cajg/4O37f+Lw/f/i77y/4q9 381 | 8v+SyPr/ptf9/46bvP++y9H/VVmR/zwzc/9SU4//m7Tf/2OEyf9PecD/Un/D/09/wP9ZhsX/apXL/2iO 382 | xv9pjcT/fJrN/3KNx/9qgsH/ZXy8/2NzuP9NO3P/bXCv/0lKhf97YXP/j3CA/6aNmv95Xn//W1d6/4qs 383 | tf9eXX7/eJjp/6nL8f+94v3/irLv/6zd/f+LtPT/aofL/1x5vf9YdK3/WW+p/1Rzq/9Uapz/Vmye/1Vt 384 | nv9UaJX/W3imIwAAAABadZ8CUHmfBFCHrQEAAAAAVHigAlZ2mVVdfZi3WHuezVl8ofdcfaj/X3+u/2CL 385 | xP99te7/jsT5/3ii3P+Ryfz/mM39/3GMpv8+TJb/f4KW/4uMpf92YZf/RkCk/yMQPf9FT5L/O0SK/2OJ 386 | zv9hicv/XYjK/2eOx/92m87/e5zN/4Ofz/91j8T/Z325/214sf/Ry9P/UkiG/ygjQP9XV5H/fIO7/11O 387 | Zv9pVXP/fYGl/8PE2P+QoeD/c3/o/3+Q8P+bxfj/pdD8/57N/P+gz/3/e5/h/1p4u/9ac7j/VXGy/1Bv 388 | rv9SaZ//VG+k/1hxo/9VcaTDU2eWDll4pAFaeaIBXnylAk54nwJLia4FVXqiAVZ6ogFVe6IPWHWVKll6 389 | m0pYe6LDW3qn+1p5p/9efq//bJXM/4vD+P+HufL/eKLZ/5TK+v+o2Pj/Jz5n/zcwXv9OQIz/eHS1/y8H 390 | e/9sVYT/WkWA/xoRU/8wJor/Vn/M/ysxmP8sLYf/Kyd2/zM1fv8wMHP/gIK4/3NpiP9EPVz/SUVw/4WF 391 | mP9OTpj/S2S4/1denP9LT4n/SU92/8HN4/96jfD/fYrw/4GL9P+Rr/7/kLby/3+k4P+Yyvz/Z4fM/2KC 392 | yP9dhcT/WHK6/1Rytv9QaaH/T2mf/09qnP9Vdao+UWmaA1BqmAVYeqQYVHOdBVl+qBNNeZ8HR4SoBll7 393 | oxJYfaQLV32kEld7pBFWeJ8MVnSbG1VslzZadKjJWXWm/1p4q/9jfbL/ernv/4S98f9wmcr/fLTh/6jo 394 | /f9hoL7/d2C5/0lPnf9pQqn/Ok+L/zhIgf94lKz/UIi//zo9lP9CVpP/GS5g/yIXWv8xLXH/R1eA/0Q9 395 | dv83OWv/VVeb/42Vvf9KTpT/SmWj/0tyqP9IYJv/T2eh/1Rpmf+Lo/X/hJr2/5S0//+ey/7/q9T+/6PH 396 | +P+Txfr/ZYbL/1t9xP9Qa7P/ZI3J/1RyvP9QaqPfTmujNEtml0pMdqZYT3KlQlFpmi9SbJktWH2nKFFx 397 | mx9Tf6kUAAAAAAAAACAQAAAAAAAAAKAAAAAAAAAA4AAAAAAAAAbAAAAAAAAAAIAAAAAAAAAAgAAAAAAA 398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 399 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 400 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 403 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 404 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAAAAA 405 | AAAAAAAAQAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 406 | 407 | 408 | -------------------------------------------------------------------------------- /SDToolkit/Window.Designer.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace SDToolkit 3 | { 4 | partial class Window 5 | { 6 | /// 7 | /// Required designer variable. 8 | /// 9 | private System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Clean up any resources being used. 13 | /// 14 | /// true if managed resources should be disposed; otherwise, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Windows Form Designer generated code 25 | 26 | /// 27 | /// Required method for Designer support - do not modify 28 | /// the contents of this method with the code editor. 29 | /// 30 | private void InitializeComponent() 31 | { 32 | this.components = new System.ComponentModel.Container(); 33 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Window)); 34 | this.progressBar = new System.Windows.Forms.ProgressBar(); 35 | this.GenerateButton = new System.Windows.Forms.Button(); 36 | this.panel1 = new System.Windows.Forms.Panel(); 37 | this.pictureBox7 = new System.Windows.Forms.PictureBox(); 38 | this.pictureBox6 = new System.Windows.Forms.PictureBox(); 39 | this.pictureBox5 = new System.Windows.Forms.PictureBox(); 40 | this.pictureBox4 = new System.Windows.Forms.PictureBox(); 41 | this.pictureBox3 = new System.Windows.Forms.PictureBox(); 42 | this.pictureBox2 = new System.Windows.Forms.PictureBox(); 43 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 44 | this.pictureBox0 = new System.Windows.Forms.PictureBox(); 45 | this.useGFPGAN = new System.Windows.Forms.CheckBox(); 46 | this.debugBox = new System.Windows.Forms.TextBox(); 47 | this.samplerCombo = new System.Windows.Forms.ComboBox(); 48 | this.label8 = new System.Windows.Forms.Label(); 49 | this.resWBox = new System.Windows.Forms.TextBox(); 50 | this.label5 = new System.Windows.Forms.Label(); 51 | this.resHBox = new System.Windows.Forms.TextBox(); 52 | this.label4 = new System.Windows.Forms.Label(); 53 | this.stepsBox = new System.Windows.Forms.TextBox(); 54 | this.label3 = new System.Windows.Forms.Label(); 55 | this.seedBox = new System.Windows.Forms.TextBox(); 56 | this.label2 = new System.Windows.Forms.Label(); 57 | this.promptBox = new System.Windows.Forms.TextBox(); 58 | this.label1 = new System.Windows.Forms.Label(); 59 | this.contextButton = new System.Windows.Forms.Button(); 60 | this.contextImage = new System.Windows.Forms.PictureBox(); 61 | this.contextRemoveButton = new System.Windows.Forms.Button(); 62 | this.upscaleCombo = new System.Windows.Forms.ComboBox(); 63 | this.label6 = new System.Windows.Forms.Label(); 64 | this.upscaleLabel = new System.Windows.Forms.Label(); 65 | this.precisionCheck = new System.Windows.Forms.CheckBox(); 66 | this.gpuInfoLabel = new System.Windows.Forms.Label(); 67 | this.timerLabel = new System.Windows.Forms.Label(); 68 | this.toolTip = new System.Windows.Forms.ToolTip(this.components); 69 | this.panel1.SuspendLayout(); 70 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit(); 71 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit(); 72 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); 73 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); 74 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); 75 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); 76 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 77 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox0)).BeginInit(); 78 | ((System.ComponentModel.ISupportInitialize)(this.contextImage)).BeginInit(); 79 | this.SuspendLayout(); 80 | // 81 | // progressBar 82 | // 83 | this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 84 | | System.Windows.Forms.AnchorStyles.Right))); 85 | this.progressBar.Location = new System.Drawing.Point(12, 728); 86 | this.progressBar.Name = "progressBar"; 87 | this.progressBar.Size = new System.Drawing.Size(906, 23); 88 | this.progressBar.TabIndex = 0; 89 | // 90 | // GenerateButton 91 | // 92 | this.GenerateButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 93 | | System.Windows.Forms.AnchorStyles.Right))); 94 | this.GenerateButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 95 | this.GenerateButton.Location = new System.Drawing.Point(12, 690); 96 | this.GenerateButton.Name = "GenerateButton"; 97 | this.GenerateButton.Size = new System.Drawing.Size(906, 32); 98 | this.GenerateButton.TabIndex = 1; 99 | this.GenerateButton.Text = "Generate"; 100 | this.GenerateButton.UseVisualStyleBackColor = true; 101 | this.GenerateButton.Click += new System.EventHandler(this.GenerateButton_Click); 102 | // 103 | // panel1 104 | // 105 | this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 106 | | System.Windows.Forms.AnchorStyles.Left) 107 | | System.Windows.Forms.AnchorStyles.Right))); 108 | this.panel1.Controls.Add(this.pictureBox7); 109 | this.panel1.Controls.Add(this.pictureBox6); 110 | this.panel1.Controls.Add(this.pictureBox5); 111 | this.panel1.Controls.Add(this.pictureBox4); 112 | this.panel1.Controls.Add(this.pictureBox3); 113 | this.panel1.Controls.Add(this.pictureBox2); 114 | this.panel1.Controls.Add(this.pictureBox1); 115 | this.panel1.Controls.Add(this.pictureBox0); 116 | this.panel1.Controls.Add(this.useGFPGAN); 117 | this.panel1.Controls.Add(this.debugBox); 118 | this.panel1.Controls.Add(this.samplerCombo); 119 | this.panel1.Controls.Add(this.label8); 120 | this.panel1.Controls.Add(this.resWBox); 121 | this.panel1.Controls.Add(this.label5); 122 | this.panel1.Controls.Add(this.resHBox); 123 | this.panel1.Controls.Add(this.label4); 124 | this.panel1.Controls.Add(this.stepsBox); 125 | this.panel1.Controls.Add(this.label3); 126 | this.panel1.Controls.Add(this.seedBox); 127 | this.panel1.Controls.Add(this.label2); 128 | this.panel1.Controls.Add(this.promptBox); 129 | this.panel1.Controls.Add(this.label1); 130 | this.panel1.Controls.Add(this.contextButton); 131 | this.panel1.Controls.Add(this.contextImage); 132 | this.panel1.Controls.Add(this.contextRemoveButton); 133 | this.panel1.Controls.Add(this.upscaleCombo); 134 | this.panel1.Controls.Add(this.label6); 135 | this.panel1.Controls.Add(this.upscaleLabel); 136 | this.panel1.Controls.Add(this.precisionCheck); 137 | this.panel1.Location = new System.Drawing.Point(12, 12); 138 | this.panel1.Name = "panel1"; 139 | this.panel1.Size = new System.Drawing.Size(906, 657); 140 | this.panel1.TabIndex = 2; 141 | // 142 | // pictureBox7 143 | // 144 | this.pictureBox7.BackColor = System.Drawing.SystemColors.ControlLight; 145 | this.pictureBox7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 146 | this.pictureBox7.Cursor = System.Windows.Forms.Cursors.Hand; 147 | this.pictureBox7.Location = new System.Drawing.Point(683, 434); 148 | this.pictureBox7.Name = "pictureBox7"; 149 | this.pictureBox7.Size = new System.Drawing.Size(220, 220); 150 | this.pictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 151 | this.pictureBox7.TabIndex = 28; 152 | this.pictureBox7.TabStop = false; 153 | this.pictureBox7.Click += new System.EventHandler(this.pictureBox7_Click); 154 | // 155 | // pictureBox6 156 | // 157 | this.pictureBox6.BackColor = System.Drawing.SystemColors.ControlLight; 158 | this.pictureBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 159 | this.pictureBox6.Cursor = System.Windows.Forms.Cursors.Hand; 160 | this.pictureBox6.Location = new System.Drawing.Point(457, 434); 161 | this.pictureBox6.Name = "pictureBox6"; 162 | this.pictureBox6.Size = new System.Drawing.Size(220, 220); 163 | this.pictureBox6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 164 | this.pictureBox6.TabIndex = 27; 165 | this.pictureBox6.TabStop = false; 166 | this.pictureBox6.Click += new System.EventHandler(this.pictureBox6_Click); 167 | // 168 | // pictureBox5 169 | // 170 | this.pictureBox5.BackColor = System.Drawing.SystemColors.ControlLight; 171 | this.pictureBox5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 172 | this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Hand; 173 | this.pictureBox5.Location = new System.Drawing.Point(231, 434); 174 | this.pictureBox5.Name = "pictureBox5"; 175 | this.pictureBox5.Size = new System.Drawing.Size(220, 220); 176 | this.pictureBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 177 | this.pictureBox5.TabIndex = 26; 178 | this.pictureBox5.TabStop = false; 179 | this.pictureBox5.Click += new System.EventHandler(this.pictureBox5_Click); 180 | // 181 | // pictureBox4 182 | // 183 | this.pictureBox4.BackColor = System.Drawing.SystemColors.ControlLight; 184 | this.pictureBox4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 185 | this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Hand; 186 | this.pictureBox4.Location = new System.Drawing.Point(3, 434); 187 | this.pictureBox4.Name = "pictureBox4"; 188 | this.pictureBox4.Size = new System.Drawing.Size(220, 220); 189 | this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 190 | this.pictureBox4.TabIndex = 25; 191 | this.pictureBox4.TabStop = false; 192 | this.pictureBox4.Click += new System.EventHandler(this.pictureBox4_Click); 193 | // 194 | // pictureBox3 195 | // 196 | this.pictureBox3.BackColor = System.Drawing.SystemColors.ControlLight; 197 | this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 198 | this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Hand; 199 | this.pictureBox3.Location = new System.Drawing.Point(683, 208); 200 | this.pictureBox3.Name = "pictureBox3"; 201 | this.pictureBox3.Size = new System.Drawing.Size(220, 220); 202 | this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 203 | this.pictureBox3.TabIndex = 24; 204 | this.pictureBox3.TabStop = false; 205 | this.pictureBox3.Click += new System.EventHandler(this.pictureBox3_Click); 206 | // 207 | // pictureBox2 208 | // 209 | this.pictureBox2.BackColor = System.Drawing.SystemColors.ControlLight; 210 | this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 211 | this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Hand; 212 | this.pictureBox2.Location = new System.Drawing.Point(457, 208); 213 | this.pictureBox2.Name = "pictureBox2"; 214 | this.pictureBox2.Size = new System.Drawing.Size(220, 220); 215 | this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 216 | this.pictureBox2.TabIndex = 23; 217 | this.pictureBox2.TabStop = false; 218 | this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click); 219 | // 220 | // pictureBox1 221 | // 222 | this.pictureBox1.BackColor = System.Drawing.SystemColors.ControlLight; 223 | this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 224 | this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand; 225 | this.pictureBox1.Location = new System.Drawing.Point(231, 208); 226 | this.pictureBox1.Name = "pictureBox1"; 227 | this.pictureBox1.Size = new System.Drawing.Size(220, 220); 228 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 229 | this.pictureBox1.TabIndex = 22; 230 | this.pictureBox1.TabStop = false; 231 | this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); 232 | // 233 | // pictureBox0 234 | // 235 | this.pictureBox0.BackColor = System.Drawing.SystemColors.ControlLight; 236 | this.pictureBox0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 237 | this.pictureBox0.Cursor = System.Windows.Forms.Cursors.Hand; 238 | this.pictureBox0.Location = new System.Drawing.Point(3, 208); 239 | this.pictureBox0.Name = "pictureBox0"; 240 | this.pictureBox0.Size = new System.Drawing.Size(220, 220); 241 | this.pictureBox0.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 242 | this.pictureBox0.TabIndex = 19; 243 | this.pictureBox0.TabStop = false; 244 | this.pictureBox0.Click += new System.EventHandler(this.pictureBox0_Click); 245 | // 246 | // useGFPGAN 247 | // 248 | this.useGFPGAN.AutoSize = true; 249 | this.useGFPGAN.Location = new System.Drawing.Point(3, 137); 250 | this.useGFPGAN.Name = "useGFPGAN"; 251 | this.useGFPGAN.Size = new System.Drawing.Size(252, 17); 252 | this.useGFPGAN.TabIndex = 29; 253 | this.useGFPGAN.Text = "Use GFPGAN for face restoration and upscaling"; 254 | this.toolTip.SetToolTip(this.useGFPGAN, "Helpful for generating much better looking faces using GFPGAN 1.3 AI model.\r\n"); 255 | this.useGFPGAN.UseVisualStyleBackColor = true; 256 | this.useGFPGAN.CheckedChanged += new System.EventHandler(this.useGFPGAN_CheckedChanged); 257 | // 258 | // debugBox 259 | // 260 | this.debugBox.BackColor = System.Drawing.SystemColors.ControlLightLight; 261 | this.debugBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 262 | this.debugBox.Cursor = System.Windows.Forms.Cursors.Arrow; 263 | this.debugBox.Enabled = false; 264 | this.debugBox.Location = new System.Drawing.Point(457, 46); 265 | this.debugBox.Multiline = true; 266 | this.debugBox.Name = "debugBox"; 267 | this.debugBox.ReadOnly = true; 268 | this.debugBox.Size = new System.Drawing.Size(446, 151); 269 | this.debugBox.TabIndex = 21; 270 | // 271 | // samplerCombo 272 | // 273 | this.samplerCombo.FormattingEnabled = true; 274 | this.samplerCombo.Items.AddRange(new object[] { 275 | "DDIM", 276 | "PLMS", 277 | "HEUN", 278 | "EULER", 279 | "EULER_A", 280 | "DPM2", 281 | "DPM2_A", 282 | "LMS"}); 283 | this.samplerCombo.Location = new System.Drawing.Point(215, 110); 284 | this.samplerCombo.Name = "samplerCombo"; 285 | this.samplerCombo.Size = new System.Drawing.Size(236, 21); 286 | this.samplerCombo.TabIndex = 16; 287 | this.samplerCombo.Text = "PLMS"; 288 | this.toolTip.SetToolTip(this.samplerCombo, "Sampler that the AI will use. PLMS is recommended."); 289 | // 290 | // label8 291 | // 292 | this.label8.AutoSize = true; 293 | this.label8.Location = new System.Drawing.Point(215, 94); 294 | this.label8.Name = "label8"; 295 | this.label8.Size = new System.Drawing.Size(45, 13); 296 | this.label8.TabIndex = 15; 297 | this.label8.Text = "Sampler"; 298 | this.toolTip.SetToolTip(this.label8, "Sampler that the AI will use. PLMS is recommended."); 299 | // 300 | // resWBox 301 | // 302 | this.resWBox.Location = new System.Drawing.Point(344, 70); 303 | this.resWBox.Name = "resWBox"; 304 | this.resWBox.Size = new System.Drawing.Size(107, 20); 305 | this.resWBox.TabIndex = 14; 306 | this.resWBox.Text = "512"; 307 | this.resWBox.TextChanged += new System.EventHandler(this.resWBox_TextChanged); 308 | // 309 | // label5 310 | // 311 | this.label5.AutoSize = true; 312 | this.label5.Location = new System.Drawing.Point(328, 73); 313 | this.label5.Name = "label5"; 314 | this.label5.Size = new System.Drawing.Size(12, 13); 315 | this.label5.TabIndex = 9; 316 | this.label5.Text = "x"; 317 | // 318 | // resHBox 319 | // 320 | this.resHBox.Location = new System.Drawing.Point(215, 70); 321 | this.resHBox.Name = "resHBox"; 322 | this.resHBox.Size = new System.Drawing.Size(107, 20); 323 | this.resHBox.TabIndex = 7; 324 | this.resHBox.Text = "512"; 325 | this.resHBox.TextChanged += new System.EventHandler(this.resHBox_TextChanged); 326 | // 327 | // label4 328 | // 329 | this.label4.AutoSize = true; 330 | this.label4.Location = new System.Drawing.Point(215, 53); 331 | this.label4.Name = "label4"; 332 | this.label4.Size = new System.Drawing.Size(57, 13); 333 | this.label4.TabIndex = 6; 334 | this.label4.Text = "Resolution"; 335 | // 336 | // stepsBox 337 | // 338 | this.stepsBox.Location = new System.Drawing.Point(109, 70); 339 | this.stepsBox.Name = "stepsBox"; 340 | this.stepsBox.Size = new System.Drawing.Size(100, 20); 341 | this.stepsBox.TabIndex = 5; 342 | this.stepsBox.Text = "50"; 343 | // 344 | // label3 345 | // 346 | this.label3.AutoSize = true; 347 | this.label3.Location = new System.Drawing.Point(109, 53); 348 | this.label3.Name = "label3"; 349 | this.label3.Size = new System.Drawing.Size(34, 13); 350 | this.label3.TabIndex = 4; 351 | this.label3.Text = "Steps"; 352 | this.toolTip.SetToolTip(this.label3, "Generation steps. Higher number means better quality, \r\nbut also more processing " + 353 | "time.\r\n"); 354 | // 355 | // seedBox 356 | // 357 | this.seedBox.Location = new System.Drawing.Point(3, 70); 358 | this.seedBox.Name = "seedBox"; 359 | this.seedBox.Size = new System.Drawing.Size(100, 20); 360 | this.seedBox.TabIndex = 3; 361 | this.seedBox.Text = "0"; 362 | // 363 | // label2 364 | // 365 | this.label2.AutoSize = true; 366 | this.label2.Location = new System.Drawing.Point(3, 53); 367 | this.label2.Name = "label2"; 368 | this.label2.Size = new System.Drawing.Size(32, 13); 369 | this.label2.TabIndex = 2; 370 | this.label2.Text = "Seed"; 371 | // 372 | // promptBox 373 | // 374 | this.promptBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 375 | | System.Windows.Forms.AnchorStyles.Right))); 376 | this.promptBox.Location = new System.Drawing.Point(3, 20); 377 | this.promptBox.Name = "promptBox"; 378 | this.promptBox.Size = new System.Drawing.Size(681, 20); 379 | this.promptBox.TabIndex = 1; 380 | this.promptBox.Text = "a teddy bear with a yellow hat"; 381 | // 382 | // label1 383 | // 384 | this.label1.AutoSize = true; 385 | this.label1.Location = new System.Drawing.Point(3, 4); 386 | this.label1.Name = "label1"; 387 | this.label1.Size = new System.Drawing.Size(40, 13); 388 | this.label1.TabIndex = 0; 389 | this.label1.Text = "Prompt"; 390 | // 391 | // contextButton 392 | // 393 | this.contextButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 394 | this.contextButton.Location = new System.Drawing.Point(690, 5); 395 | this.contextButton.Name = "contextButton"; 396 | this.contextButton.Size = new System.Drawing.Size(129, 35); 397 | this.contextButton.TabIndex = 30; 398 | this.contextButton.Text = "Add context image"; 399 | this.toolTip.SetToolTip(this.contextButton, "When you add a context image, then the AI will try to match it as closely as poss" + 400 | "ible \r\nwhen generating your prompt. Uses img2img algorithm."); 401 | this.contextButton.UseVisualStyleBackColor = true; 402 | this.contextButton.Click += new System.EventHandler(this.contextButton_Click); 403 | // 404 | // contextImage 405 | // 406 | this.contextImage.BackColor = System.Drawing.SystemColors.ControlLight; 407 | this.contextImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 408 | this.contextImage.Location = new System.Drawing.Point(866, 5); 409 | this.contextImage.Name = "contextImage"; 410 | this.contextImage.Size = new System.Drawing.Size(35, 35); 411 | this.contextImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 412 | this.contextImage.TabIndex = 31; 413 | this.contextImage.TabStop = false; 414 | // 415 | // contextRemoveButton 416 | // 417 | this.contextRemoveButton.Enabled = false; 418 | this.contextRemoveButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 419 | this.contextRemoveButton.Image = global::SDToolkit.Properties.Resources.cross; 420 | this.contextRemoveButton.Location = new System.Drawing.Point(825, 5); 421 | this.contextRemoveButton.Name = "contextRemoveButton"; 422 | this.contextRemoveButton.Size = new System.Drawing.Size(35, 35); 423 | this.contextRemoveButton.TabIndex = 32; 424 | this.contextRemoveButton.UseVisualStyleBackColor = true; 425 | this.contextRemoveButton.Click += new System.EventHandler(this.contextRemoveButton_Click); 426 | // 427 | // upscaleCombo 428 | // 429 | this.upscaleCombo.FormattingEnabled = true; 430 | this.upscaleCombo.Items.AddRange(new object[] { 431 | "2x", 432 | "4x", 433 | "8x"}); 434 | this.upscaleCombo.Location = new System.Drawing.Point(3, 110); 435 | this.upscaleCombo.Name = "upscaleCombo"; 436 | this.upscaleCombo.Size = new System.Drawing.Size(206, 21); 437 | this.upscaleCombo.TabIndex = 34; 438 | this.upscaleCombo.Text = "4x"; 439 | this.toolTip.SetToolTip(this.upscaleCombo, "Upscale the image by an order of magnitude. \r\nFor example: 2x means resolution ti" + 440 | "mes two."); 441 | this.upscaleCombo.SelectedIndexChanged += new System.EventHandler(this.upscaleCombo_SelectedIndexChanged); 442 | // 443 | // label6 444 | // 445 | this.label6.AutoSize = true; 446 | this.label6.Location = new System.Drawing.Point(3, 94); 447 | this.label6.Name = "label6"; 448 | this.label6.Size = new System.Drawing.Size(46, 13); 449 | this.label6.TabIndex = 33; 450 | this.label6.Text = "Upscale"; 451 | this.toolTip.SetToolTip(this.label6, "Upscale the image by an order of magnitude. \r\nFor example: 2x means resolution ti" + 452 | "mes two.\r\n"); 453 | // 454 | // upscaleLabel 455 | // 456 | this.upscaleLabel.AutoSize = true; 457 | this.upscaleLabel.Location = new System.Drawing.Point(0, 192); 458 | this.upscaleLabel.Name = "upscaleLabel"; 459 | this.upscaleLabel.Size = new System.Drawing.Size(41, 13); 460 | this.upscaleLabel.TabIndex = 35; 461 | this.upscaleLabel.Text = ""; 462 | // 463 | // precisionCheck 464 | // 465 | this.precisionCheck.AutoSize = true; 466 | this.precisionCheck.Location = new System.Drawing.Point(3, 160); 467 | this.precisionCheck.Name = "precisionCheck"; 468 | this.precisionCheck.Size = new System.Drawing.Size(114, 17); 469 | this.precisionCheck.TabIndex = 36; 470 | this.precisionCheck.Text = "Force full precision"; 471 | this.toolTip.SetToolTip(this.precisionCheck, "Helpful for generating much better looking faces using GFPGAN 1.3 AI model.\r\n"); 472 | this.precisionCheck.UseVisualStyleBackColor = true; 473 | // 474 | // gpuInfoLabel 475 | // 476 | this.gpuInfoLabel.AutoSize = true; 477 | this.gpuInfoLabel.Location = new System.Drawing.Point(9, 674); 478 | this.gpuInfoLabel.Name = "gpuInfoLabel"; 479 | this.gpuInfoLabel.Size = new System.Drawing.Size(92, 13); 480 | this.gpuInfoLabel.TabIndex = 20; 481 | this.gpuInfoLabel.Text = "No GPU detected"; 482 | // 483 | // timerLabel 484 | // 485 | this.timerLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 486 | this.timerLabel.Location = new System.Drawing.Point(818, 672); 487 | this.timerLabel.Name = "timerLabel"; 488 | this.timerLabel.Size = new System.Drawing.Size(100, 15); 489 | this.timerLabel.TabIndex = 21; 490 | this.timerLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 491 | // 492 | // toolTip 493 | // 494 | this.toolTip.ShowAlways = true; 495 | this.toolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info; 496 | this.toolTip.ToolTipTitle = "Help"; 497 | this.toolTip.Popup += new System.Windows.Forms.PopupEventHandler(this.toolTip1_Popup); 498 | // 499 | // Window 500 | // 501 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 502 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 503 | this.AutoSize = true; 504 | this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 505 | this.ClientSize = new System.Drawing.Size(930, 761); 506 | this.Controls.Add(this.timerLabel); 507 | this.Controls.Add(this.gpuInfoLabel); 508 | this.Controls.Add(this.panel1); 509 | this.Controls.Add(this.GenerateButton); 510 | this.Controls.Add(this.progressBar); 511 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 512 | this.MaximizeBox = false; 513 | this.MaximumSize = new System.Drawing.Size(946, 800); 514 | this.MinimumSize = new System.Drawing.Size(946, 800); 515 | this.Name = "Window"; 516 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 517 | this.Text = "SDToolkit"; 518 | this.Load += new System.EventHandler(this.Window_Load); 519 | this.Shown += new System.EventHandler(this.Window_Shown); 520 | this.panel1.ResumeLayout(false); 521 | this.panel1.PerformLayout(); 522 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit(); 523 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit(); 524 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); 525 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); 526 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); 527 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); 528 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 529 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox0)).EndInit(); 530 | ((System.ComponentModel.ISupportInitialize)(this.contextImage)).EndInit(); 531 | this.ResumeLayout(false); 532 | this.PerformLayout(); 533 | 534 | } 535 | 536 | #endregion 537 | 538 | private System.Windows.Forms.ProgressBar progressBar; 539 | private System.Windows.Forms.Button GenerateButton; 540 | private System.Windows.Forms.Panel panel1; 541 | private System.Windows.Forms.TextBox promptBox; 542 | private System.Windows.Forms.Label label1; 543 | private System.Windows.Forms.Label label2; 544 | private System.Windows.Forms.TextBox seedBox; 545 | private System.Windows.Forms.TextBox stepsBox; 546 | private System.Windows.Forms.Label label3; 547 | private System.Windows.Forms.TextBox resHBox; 548 | private System.Windows.Forms.Label label4; 549 | private System.Windows.Forms.Label label5; 550 | private System.Windows.Forms.TextBox resWBox; 551 | private System.Windows.Forms.ComboBox samplerCombo; 552 | private System.Windows.Forms.Label label8; 553 | private System.Windows.Forms.Label gpuInfoLabel; 554 | private System.Windows.Forms.PictureBox pictureBox3; 555 | private System.Windows.Forms.PictureBox pictureBox2; 556 | private System.Windows.Forms.PictureBox pictureBox1; 557 | private System.Windows.Forms.TextBox debugBox; 558 | private System.Windows.Forms.PictureBox pictureBox0; 559 | private System.Windows.Forms.PictureBox pictureBox7; 560 | private System.Windows.Forms.PictureBox pictureBox6; 561 | private System.Windows.Forms.PictureBox pictureBox5; 562 | private System.Windows.Forms.PictureBox pictureBox4; 563 | private System.Windows.Forms.CheckBox useGFPGAN; 564 | private System.Windows.Forms.Label timerLabel; 565 | private System.Windows.Forms.Button contextButton; 566 | private System.Windows.Forms.PictureBox contextImage; 567 | private System.Windows.Forms.Button contextRemoveButton; 568 | private System.Windows.Forms.ToolTip toolTip; 569 | private System.Windows.Forms.ComboBox upscaleCombo; 570 | private System.Windows.Forms.Label label6; 571 | private System.Windows.Forms.Label upscaleLabel; 572 | private System.Windows.Forms.CheckBox precisionCheck; 573 | } 574 | } 575 | 576 | -------------------------------------------------------------------------------- /SDToolkit/Window.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 | 36, 15 122 | 123 | 124 | 125 | 126 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAMMOAADDDgAAAAAAAAAA 127 | AACJmrECi5qzBI6dtECWpr8ffYinBZWXrAaamqgBfoKrCoiLqxSUjZ7/lZCa/5mTnP+clp7/h4u//5WT 128 | tf+PhpT/jouX/5mQnP9AQXz/QkeD/0JKhP9ETYb/R1OL/0ZOhf9PVYX/GzMq/xk1Kf9dXnP/VVNr/z48 129 | SP8vS0r/NVVP/ypIQP8vRj//JTwz/ytBOP8xL2z/KyFJ/0JCd/8/M1P/UFl2/1dge/9cYnz/Zmt9/3Fw 130 | eP9feob/WXmF/116iP9ieoj/Y3mI/2Bygf9QY23/IGR6/zJQVf9EXWLKTGZqPktscBQxYWgUAAAAAKKh 131 | owXY08tWyczQFLvJ1hW63/MEkJ6xApOgsgqZpLgBAAAAAJ2csQKVl6lYl5Wp85ucqPucmaX5nJyn/5iW 132 | pv+Yk6f/lpGo/5OOo/+NiZr/kI+f/39/lP+Sjpf/QUJ8/0JEgv9GTIj/TFWL/1Zhkf9QV4j/UleC/xkr 133 | Jv8ZMSX/WFlp/0NDUv83LVH/JSI5/zlYV/85UUz/NE5I/yc4N/8oJUH/KSpf/y8eOf85NWD/NCJL/0o/ 134 | Yv9XX3r/YmqD/2Vsgf9jZnP/bHmF/2F7if9feoj/YnqI/2B0g/8cPDz/IDpA/xw6Q/9FXGL/UWpv/09r 135 | a/87Y2P/SnVz+0h1cyFyk7cErdv1BanK5gPT19kC0c3PBAAAAAClrbwOAAAAAKOyywJ/pMw0gZ7L/46Y 136 | rf+Tm6v/kJWn/4uRpP+LkKH/d4Cb/1toj/97gJ3/lZKk/5ybo/+KiZT/UVOO/3+Akf9DSYX/S1CK/1Jc 137 | jv9caZT/V1+O/zlAW/8bOSz/XVtr/09NXf89NkX/LitE/yAZNf8wPlX/MUtL/zcvev8xIW3/NTBq/zFE 138 | dP8vMGX/Qi1Y/0VHdP9JTGj/WFBy/19nff9ob4L/Z3OF/2dvfP9sgI3/ZX+N/2Z/jf8oPUT/L0xV/yle 139 | bf8eTUT/R2Fi/1FrbP8/aW7/On16/zp/d/9GsKD/T6uacoeRsgGJk7ADk5y1AZ6ftiIAAAAAAAAAAAAA 140 | AAC9tbOuxbiy+MW7rP+8s5z/wr2l/8zIrP/KyLb/y8q8/77Buf+ztrT/q62//3+Ltf9CTIv/QkyM/0RP 141 | iv9CSon/REqH/0tRif9YYpL/XGiU/1hgj/9KTl//Wlhk/15baP9FQVD/JCRP/15eav8mGUL/LSJi/xgW 142 | Kf83M2X/TkOA/zkpcf8sI1D/IhJM/yseVP9LQmP/HQw3/1NYbv9jaXv/XmB3/25ygf9YaYL/WW+F/2N8 143 | jP9rhJP/Zn6O/zVWYf9Ja3L/F1BB/z9bWv9TcnL/TYmT/zqIfv9AmYr/PpaJ/0uzpv+EkrFbAAAAAAAA 144 | AACPmbMdAAAAAAAAAACgyugYmsbg/9r4+v9AaHL/MWZd/zBlYP9Qcnz/W3t2/1eEcv9ci3j/S5ie/1Rx 145 | fv9MWYr/SVCM/0VQi/9DUIr/QEiG/0ZNif9JUoj/VmKR/1tolf9ZYJD/UVhm/2Vlc/9UVGb/Gi5d/2Zl 146 | bv9kYW//LjNU/ywmbf8sIkD/Sj9J/0ZHXv81QV3/PS1k/zQeZf8wNnL/ZVpm/1Znkv9hV2//ZmV4/2Zw 147 | gf9pgJD/WW+G/1lwi/9ieI//YXiL/2Z9jv86ZXT/XnmB/zBfWP9FY2H/Smdk/zJ4dP83in7/Q5uN/0Gh 148 | kv9Blon/j5+7/5Cbt5WSnrsBk5y3EwAAAACQj5wBnpuo3X+Ek/9jfIT/NmxZ/zVrVv8xbFL/PGVR/1eC 149 | cv9chXP/caNu/3KqZ/91qnT/U3CU/0hQiv9IUoz/RE+J/0RMh/9FTIb/UFqL/1tpk/9hbpn/VV6P/1pZ 150 | c/9eYHL/VVBr/3Ryfv9tb3r/Z2Fy/1Yqav9bOlL/MSla/zsjlP8+PYT/OB2O/zYdUf9FSI3/Njl4/3Rq 151 | c/9DP3D/OyQ9/3BkdP9xdYT/aXiK/1xwjP9ldpP/YnmR/2N6jf9ddIn/SnF4/2J9h/8/Xlv/VWhq/1tx 152 | c/84fXb/Not8/0SUiP9Dn5H/Q56S/2KUn/+Sm7b/mJ66B5ObtwcAAAAAkpCYJpaVof+Kjpr/goCP/zVr 153 | Vv81YlH/UGpd/1qDc/9agnH/WWWS/2JpnP9ka5r/XGKU/1BYj/9IU4v/RE6H/0VMhf9PWY//TFCJ/1pk 154 | kv9lcp3/YWya/1BTg/9XWnL/YGN6/zQ6Uv9ycn3/b26B/3RzgP9MEnf/MDmN/z1Yev83G4j/UDuO/ztB 155 | bP9qU3T/YlFh/z8ViP95cHb/dm52/zQ4bv9xaXf/dHeC/25xiP90f5H/ZHaR/2Z6jv9jd5L/S1KI/0Bd 156 | Yf89VlH/R19u/0pjY/9OZmf/OYJ0/zyLgf9GiX//QJeM/zyTh/9Pe4X/kpi2/4+ausaJlbYFp6OlAZ6b 157 | nuSTkpn/mZSe/4OIlv+Gg5L/gIGT/6mqu/9/e57/dnea/1Zgkf9ha5r/XmWV/2JomP9KUYr/SFGK/0ZL 158 | hP9RW5D/YXCc/1lllf9ga5f/b3ii/2Zwnv82NHn/WVx1/0dRhv9bXW3/YGB+/3Z3gP95eYP/eXZ7/1cR 159 | Yv9BV3r/PSx2/0ZGkP9CUI//VVOd/4R5lf97dXr/hHp//4B1ef9WT2j/Z2V3/3x6hv95d4r/f4GN/1pj 160 | iv9XWpX/P1Rf/zdPT/8yUE//Gzc1/1Niiv9Vbm//UGhq/zJ7bP8+g33/QYF7/0iViv9Nm5L/b4ik/46X 161 | uP+Sm7v/mJ67BqulphCloKH/lJee/5SRm/+Ni5b/gYSV/2pulf99e5v/fnyf/3R0mf9cYpX/YWia/2hu 162 | mv9nbZv/WWCT/1BXif9XYY//Y26c/3F3of9cZZX/YGmY/3B5pP9weKP/YGOT/1NXbf9fXnb/ZmiC/25w 163 | e/9nan//bm54/3Z0fP9ydHf/ZB+S/2prff9iZ3j/XUeW/3pVhv94c3//gXuD/4R7gv+AeYP/dG11/1NP 164 | jf96eIj/eXuL/3J1l/9XXZj/NDd1/0FaXP9Rbmn/OVVT/zhCcf9NXIj/TWhp/1Bpbf85fnL/Uo+N/0eL 165 | g/9Ih3//Zo2G/4OTu/+Umrr/lJu995uivgOrp6isr66w/6ijpP+jnqH/m5me/4CBj/9tbJj/fnyc/4B/ 166 | of94eKD/YGaX/2Npmv96fqX/eHei/2tzn/9faJb/anab/3mApP9+gqb/ZmiW/zs3bv9hZpX/dHqk/2Rp 167 | lv9JRnv/VVZx/2xsgP9hZ3n/Ymd7/2Bld/92cnr/e3V//3JyfP9xc3//b3F//25vfP9xcnz/enWE/4V7 168 | h/+Ee4L/gniC/3x6iP8vKlb/REaG/0xTkf9KUZH/PUKD/zpCf/9MY2P/UW5l/zxYV/8/SYH/V2OR/0xl 169 | df9Sb3D/PYF0/0l+dv89dmn/V3Vy/4+byv+Rnsn/mJ27/6CkvvaUnr1VpKOu/6SjpP+npqr/ko2T/6Gf 170 | ov+AgJD/XmCR/4F7n/+Cf6X/eHum/3J6tf9vdaL/hYao/4mHqP97faX/XmWW/1hgjf9xd6H/fH6n/3l6 171 | ov9gYZD/NjZv/2Nnlv9iZZT/UFCE/2dpeP9vbIH/Y2SD/1Vaef9/eoH/dnR//396gv93dH7/eHaC/3Fv 172 | ev90doP/bnCB/312gf9+dH//hH2H/3Zxg/9xb4n/TFCT/1VgoP9WX5v/RkqP/0JIjP9DS47/UWxo/1l3 173 | bv9GUof/RE2M/15qm/9WYpP/TWpq/0t5cv/08vT/YnWD/2x7sv9sfLj/bXm3/6Ssyf+nqML/l6C+/8a6 174 | sP+/ta7/qa2z/6CirP+Ok6X/Vl2R/3Fxof+HhKX/hIOr/4qPv/+rwfD/jYyw/3d5pP+Dg6b/fn6m/2xv 175 | nv9QVIz/Ozhv/2Rpmf92eaP/am2b/1RVjP8mHmf/R0eB/1FTgf9QT4H/bmx7/3x8gP95dn7/d3R//2Vs 176 | fP+Gg4X/gH2C/3t4gf99eoP/aWR0/3FvgP92c3//aGV3/01TmP9QWZ3/VFue/1tjov9gYpr/TVKY/0pO 177 | lv9MT5f/T1Wb/1Jdo/9QX6H/SFmh/0NLj/9ibZ//ZXGg/1Rgjv9pdZr/Z3Sk/2p3rP9te7L/dYK+/8TP 178 | 4//DyNj/ur3Q/7y6x/+jpaj/u7Ov/6iqsP+ip6//iY+k/1laoP9xdKH/dXmp/4OKt/+hv/H/kIWq/5ud 179 | rv95dJn/aGub/4J/pv94d6T/VluT/zQubf83Lmb/Xl6R/2dmmf9oZ5v/XWCR/1BLh/9YVYr/R0d4/0lK 180 | ff+Df4b/f3qC/4B6gf+EgIX/hn2D/4aChP95d37/dnaE/3t5gf+JhI//bGd6/05UnP9UZbT/XXfM/15y 181 | vP9WVIv/VFib/1teoP9aX6P/Xmen/2Nqrf9ZZav/RVWh/0JQnf89SI//ZXCk/3F8rf9qdKX/VmGY/2h2 182 | pf9pdqr/bXuz/3J/vP+DmeT/ssXa/7e/1P+jpbr/1c7D/7a7vP+ys7b/pqmw/3+Hov9zcJ7/cXGi/3t6 183 | q/+cv/b/qsDb/5qXrf+GgJz/enmT/35+mP9wbpn/e3ej/2Vlmv9OUYv/JRla/zAkZP9eW4z/Y2SV/3J1 184 | nf9sb5f/XlyN/1BMjf9PSYD/bHGC/3Jzgv9UYnj/e3uI/4WBif+Phov/hn+G/3Fwgf9tbX//cWx4/1dl 185 | r/9icbL/PEB+/295tv9SYJf/VFeX/1Zanv9fY6j/aW+w/3yEvP96hL3/anKy/1Rdp/9JUp7/R1Ca/2Bq 186 | pf9tdav/cHqp/3B6qv9qcaX/bXmt/216tP9terr/fJzw/3+W9v+dzvb/wb7I/9DJwP/Z08n/0NHO/4qZ 187 | x/+dosD/eXOf/316p/94k9X/hJG5/4qPpv+DjbH/jY+g/4qJmv+Sjpf/eXeV/3Rxnv90cKH/Xl+X/0I7 188 | f/8vJGr/KBxp/yEYaf9gW5D/a2+Y/2lqk/9lY47/gX2B/2R1j/9ibob/gX+M/3t8hf+Nhov/ioOH/4mC 189 | if92c37/a2p8/29vgP92dYT/e3uM/3aBmf9urur/ZWWe/0xWn/9eYab/bnS6/3N6wP90e9L/Yo7p/2hv 190 | rv9pcbD/aG6s/2Vtqv9PWaD/SVic/3N9qv9+hrf/fIW2/4CMv/93hL3/bXq5/26B2/93ovr/kKTh/97g 191 | 4v96ibP/fI28/6a+6P+Bj8P/gH+n/395o/+HgKz/ipe+/36QuP9+jLT/doSs/3SAqP+RkZr/ko+V/4F+ 192 | j/9hY5X/a2ea/2Jgm/9iYJv/YV2Z/0xHjf9HP4f/OzCE/ywiff8wMn//i4aL/2lkeP9fdJD/bHmP/2Vv 193 | hv9ycYH/d3iD/3R4iP+FgIn/gX2K/29wff9fZn7/a26E/09XgP+Kho3/doCv/1xfl/9gY6D/a220/5XF 194 | /v9ue9r/ZHbG/2Nnqf9iZqj/XWao/3mBtP+HjLr/f4W2/2x2rf9hbKn/foq3/4yYxf+Nmsf/fIfA/3J8 195 | uP9we7r/eZv5/4ei7/+OqeX/e4m0/3aDsv90grH/d4az/35+of+Df6v/tdHz/4uZv/+Dkrn/eomw/3yJ 196 | rv9zgan/hIOW/3l6jf9qbIT/eXqU/1tcmf9maJr/dXaj/3t7pv91cqD/fXym/21qnP92b6D/hoie/0lb 197 | hf8tR3b/U2eH/1Nmiv91eoz/aHCI/2Vpfv96fpP/a3Sg/1xqm/9ZZJb/Z3CI/2Nnhf+LiY7/g4KJ/2Bh 198 | k/9mY5j/XGSo/3GN2f+Bo/D/d8f8/1tdn/9XXKD/U1qg/1Jaov9QXKT/V3GM/5my3v+Nl8T/eoK1/3N+ 199 | tv91gbj/bHa0/4ms5/9+jMX/cHq3/258uv+Jo+z/i5vL/3CErP+LmML/h5rE/4Kawf+Ef6D/i5K//5Sg 200 | w/+XocT/jZi9/4KPs/+CjrH/d4Sr/2dzm/9WXYv/V1d3/29yif9FL2T/kYB6/2lXZf9zb4f/d2+J/3Fu 201 | lf9wbZv/hH+T/4uDlv9vbof/UF6B/21yiP9wcoj/YGaF/25yjP9yeZ3/X26g/1ppnf9baZ3/XWqf/1Rg 202 | oP9fapD/enqD/4eGj/+Jip3/VFuW/1dlpP9ck9D/WV+u/0lPo/9QU5r/TFGb/z1KmP9kisr/VWy4/4aT 203 | 1v9qgNP/aYLY/3yu9/+Rns//f4vA/252tf+XnMf/iaXg/3yLx/91gLn/e5TV/6a92/9wiK7/l7DZ/4Wg 204 | xP+Oqc7/iIWj/6On0v+cqMX/nqbF/5igvv+Wn7n/jJa0/3OAp/9ZZpn/S1qS/0BGhf9nXHf/m4+A/1hX 205 | h/9ZXYr/bGmK/2trjf92do3/eHSO/2h6mv9yg6D/bXiX/2dvkv9raY3/bGqI/2Fpiv9zdpL/YWue/1pq 206 | nP9Zapz/WWqc/1homv9baJr/ZXid/2l9of9fcpv/Xm+Z/0Ril/8+QYD/Tmup/1Vgqv9rfrL/cInC/36O 207 | yf94isf/gY/H/4WRyf+Fk87/hpTR/4ud3P+Co/H/j5/X/4GLw/9uc7T/n6fP/5mk0f+DmND/c4K+/3N+ 208 | uP+Zud3/cYy1/3mWvP9tkbb/ZYSw/42Mq/+Gi7//haTM/5ijwv+boL3/lp+5/3yGqP9cZp3/SliT/0tW 209 | kv9maXr/jYR9/yIldP87Qo3/R1KU/3Bzlf9maI3/amqP/253mf9oeZ//a3ac/0Rhkf9SXpT/XWGQ/2Zn 210 | jP9tcI3/Y22Q/1RlmP9XaZr/VmmY/1Vnl/9WZpj/UGCU/2h0lv9weJj/SWOX/z5dlv9KbJj/VG2d/zs9 211 | Yf+hoaj/qKqy/6est/+op7T/gICp/5KNq/97daH/doG9/2l2wP9ncsL/ZXPL/4KV0f99h8L/kZ7Q/56n 212 | 0f+SodD/kKDP/32Sx/99ksz/eo3F/2uSu/90mcD/c5S3/3SWuv+Slrn/iqLX/3aZvv9znb//d6bF/4Cr 213 | xv9fc6v/VGSg/298m/+PkZP/X15w/1ZfoP9FTZn/RE6X/0BHkP9IWZL/TVmO/0ZWlP9PYJ7/ZXSb/0ld 214 | kf8yQ4H/PlKN/0tbk/9UYZT/WGmU/1Jolf9PZJb/T2OU/1Rnl/9TZZX/T2GU/21+nv9ve5v/cn2c/2Rt 215 | kP9beKP/P1iT/2ZdfP/Sy8D/qqSo/5SKkf9ASnb/P0uR/0RMmv8+TKL/ZHzA/2d4uv9qe7//anbE/4OT 216 | 2v9/ktT/cHW7/46h3v+OntL/jZ7Q/46ez/+Nmcj/kbPn/3iJv/9rmsD/bpi9/3OWtv9rlrX/cZq4/3yj 217 | wv92m8D/cqC9/3alv/97qsH/aHuf/1Rai/+boJz/NDFf/0xYn/9SXab/Tlyk/0JKl/81Nor/P1CP/ztH 218 | i/9EUZT/Y3Sh/09fmP9HXJf/SVyO/0VPgf9DVZD/SFmT/0xilf9LYJX/TGGY/01kmP9PZZn/VGeb/05j 219 | mP9OYpX/XnCb/2JvlP9ocZD/S2eX/zhdl/+zrrf/sKqk/2FYb/9UWHb/mI+N/yUgP/9ae7//i5TC/5OY 220 | v/+NlMP/jpLG/4aPwP+po7D/l6TL/5Gr2v9/kNT/fYzS/4SV0f+fvu7/kbPo/5W32/+Mp8r/Y5O3/2iS 221 | tf9pl7j/dZ26/3GWsP9xm7r/dKLE/26fwf9+pML/iK/H/0pGev+hq7X/Znml/1dtqv9Yaa//Slmr/0ZU 222 | p/9LXKn/QU2d/zpAkv9LW5f/XHCi/0pXk/9BSYD/QEt//1Rcf/9aaYv/PEuI/0FSjv9HXZT/SWCW/0df 223 | lv9JYJj/TWKc/1Fln/9QZZ7/UWad/1Vpnf9baZr/d3mQ/25viv9ZXof/TGek/zEemP87Nav/c293/31m 224 | hf+IhoP/eHym/01uzf9biOH/eKXr/4Wg5P/C1O3/l36V/3Jxuf9of9f/aIDW/4a9/P+Nwfz/nc/9/5W3 225 | 5v+Tstf/javO/2iOrf9rkbD/aZW1/2yVsv9plbD/b5m2/2qYuf94n7//fZq8/4Gauf82LWX/ZazX/2d/ 226 | uv9OZLP/Slqw/0ZXrf9FVav/RVar/z5In/9KW5z/UGOb/zxFif89RX//P0Zx/zxDdP9DSXX/Q0l4/1Rj 227 | if9BUY3/R12V/0lfl/9EW5P/Q1iT/0ZbmP9HXJr/S2Cb/1Bmnv9RZJ7/VGWb/1VgmP9WYZn/SFKU/zpA 228 | iv84TYv/Lkh2/3Rtcf9+bnr/iIWh/2ljYv9JYLr/UXPR/3Nknf96Y3//nI2j/7i+uP+mkq3/aYTc/2eC 229 | 2/9zqfT/lc/9/5TB+P+g1/z/ndb7/5W43/9rkKv/cpCq/2mSsP9ok7D/bpGw/2aXt/9smLn/fZy8/3qX 230 | uf+Am7v/o7zb/3GJxP9Rabf/RFix/0Zbs/8/Ua3/OUeo/zY/oP85QZv/RVGY/ztCj/87Qob/Nzh1/0dO 231 | ev86PnP/Q0hy/01Uf/8+Sof/QlOP/0Zbkv9HWpH/QFKL/0BRjf9AU4//RFeT/0hcl/9MZJ7/UGmi/01j 232 | nv9OX5r/R1SW/zg+i/8yN4L/MTN5/ztTiv85PGP/kYSC/7Snnv9bbqD/VGyw/0pfuP9ScMr/e6Hq/150 233 | zv9tiNv/a43g/2mJ3/9qh+D/dqv3/5HJ/f+Yxvf/krfn/6jc+/+f0fn/Yoij/2qOqP9qj6v/ZJGs/2yU 234 | sv9xlLb/cpK0/42rzf+BncD/iabH/4mozf93mNT/T2S3/0dcsv9DV6//T2as/05nqf9Ra6r/SmGl/0ha 235 | nv8/TJL/OkSG/yUkYf82OW7/ODxx/zY8dP8zNn7/OkOH/z9Ujv9CVY3/QVCI/z1Mhf9BUIr/PUyJ/0JU 236 | k/9DWJb/R2Cd/09ppf9OZ6L/R1mc/z5Kkf85PIj/MTF8/zU1fP9MWZ//W2ay/1pmt/9ea7L/YW+2/2Bw 237 | uf9keMD/YnfE/2iAzf9lh9r/bZHm/22K3v9ym+v/eZ7r/4Sz9v+c0/3/mcf3/4+04f+Ns93/iqzV/2eK 238 | ov9qjqn/a46o/2qSrf9ykrD/d5K2/4ifvf99m8D/fZ/E/4Ghzv+Ds+f/h7Xv/1Bouv9IX6r/SGGm/1Rr 239 | rf9Va6z/WXOx/153tP9Ybqv/UWSn/0RPlf9BSo7/RE+L/zU4e/8pK3b/LjJ//zpGiv8+UY3/PUuG/zxF 240 | gv9ASYn/RE+P/0VPj/9FUZL/RFKR/0Namv9IYKH/SmSi/0FUmv87R5H/ODeC/1pho/9QUqf/V1+u/15t 241 | t/9lc7r/YnW7/19stP9rcrj/aXfB/2t8yf9vhdT/cZbl/3OW7P96q/j/fqv0/5nI/P+Wz/v/msf0/5O0 242 | 4P+Mr93/ibDg/5vT+/9lh6D/aY6p/2SNqv9ymLP/dJGz/3uSt/98m8T/gaHM/4Kl1P+Ht+j/j8L1/4rA 243 | 8/9Na7//Rlir/0hWqv9MWqr/UGCq/1dprv9ecrP/X3W0/2Fztv9VZav/SlSc/yolcv8oIXL/KCd1/y4z 244 | gv86R4v/PEuJ/ztEhP9OW5r/VGOj/1hop/9ZaKj/Vman/1Fcnf9HU5T/Rlue/0ddoP8/UJj/OECM/zEv 245 | fP9TU6j/WViw/19quP9icL3/YG2//19pv/9qdb//bHa6/2Zvuf9nesr/c5Tn/3qq+P9/uvv/gqbx/4ml 246 | 6v+QvP3/jLX1/4Sm1f+LqdH/g6PI/46x2v+JqdD/aIuk/2mNqf9kjK3/bJCy/67S8P+axOn/kb3o/5TB 247 | 7/+LvO//m9H7/4nI+P+Gvu//WH3R/1yD0v9wkc7/aHq7/1Nmsv9bcLb/WGqy/1Vpr/9fcrT/UmOn/01Z 248 | n/8sJnn/JBxr/yIdav8tMoL/NkKI/zlChf9PX5z/YHGp/217sf9wf7f/cIC3/2l8tv9gc6//U2Gh/0hU 249 | mf9FWJ3/QE+Y/zY2iP9FRJz/SUOj/1VbtP9jbr//ZXTB/3SIxv9ygMn/anHB/2p1xP9qc8D/YXvM/3GS 250 | 5v97u/z/gqb2/4ux9v+FtPz/hqzv/3+izf95pdr/gaHH/4Ciyv+JqtT/haPK/2GBnP9pjar/ZIyw/2mO 251 | s/9mjrT/a5K4/3Kbwv9mnL//dazS/4Gr0P+Yu9//gKfW/1x9x/9QZbr/TmO8/2l/2f9/p+f/dZHO/2R4 252 | uv9bcLT/VGiw/1FgpP9QXaL/QkmW/yIZZ/8eGGX/Ky2A/zU8hf9MW5r/WWuj/11vpf9aaqX/T12c/05g 253 | of9Ya6v/XHCt/1drqv9UYaP/RE6Z/z9KmP85Moz/Qzqg/1FPrP9ZX7f/ZXbC/3KHzP+Cnt3/eI7Y/3yT 254 | 3f9xfcv/cHnH/219z/9jj+b/fLH4/5LD//+Btfn/fJ/m/4Cj0v+HqdT/gand/32ex/94ncr/eZfC/3mV 255 | wf9niqb/Zoys/26dwP9mkbb/cJW5/4+31v9vmsL/ZqXT/3Oew/9+ocf/hq/X/4Sn1P9sktH/VGi7/1Jm 256 | u/9XacD/XG3C/19sxf91lN//gaLc/1pvtP9KXKD/Sled/0FFkf8dFWD/Hxpl/ywrgP9HVZj/U2Sf/1xt 257 | ov9YZp3/QTCZ/0Eonf9CLaP/Pzya/1Zqqv9abKz/Wmyv/1lxwv89QZj/OjWU/z83nv9PTq7/VmG6/2uB 258 | yf94ltf/c5Xg/3+t8f+Lr/X/f5jp/3OJ2/9rgtn/WZv2/2iN6P+Ht/n/grX6/4es7/+FpdT/g6bb/4ar 259 | 4P93oN3/epnF/3aSwf93k77/W5a3/1+Psf9kk7//ZpK8/12Eqv9mjLH/bJS6/2mWwP92msD/dZ3E/4Wy 260 | 3f+FsN3/fK/p/2Z7wP9Wa8D/VGfA/1hpv/9caL//gpvf/2Nwwv9whcf/VWeu/0JMk/88QY3/Hxhk/x8Z 261 | aP9GUJn/UWCe/1hroP9hb6L/RC+Z/2dNtP9qVbz/cVy8/2pVuv9OS6b/Wm6t/1Zprf9dc8L/W3bQ/zgx 262 | lP89OJz/Skqw/1dmvf9ngMv/aIvc/3ie6P+UvvP/eo3h/2x30f9ugNn/XH7e/2Oh9v9ukub/gKLw/4Cv 263 | 9f+Gquv/i67r/36cx/9+ncP/dZbB/3iWvv93jrT/cY23/1uIp/9dia7/YZO4/2GKrf92m7//aIyx/3if 264 | xP91nsf/dZi9/3Oawf9wpMr/iLfs/5K57/+Ev/f/gJvb/3mN0/9WZb//WmS//2Jmw/9YX77/W2W1/2N1 265 | tf9TYaj/P0eS/yYfbf9ITZf/VWCh/1xrpP9ca6H/NDZ6/y8jhv82LJL/OCya/zUonv81KJf/NTKY/0hY 266 | nv9fcbH/Y3a8/2uN3P8tJ5L/NzSa/z9Dqv9SYrz/W3PJ/1eC4f9mluv/cYDY/2t0z/9qedT/Y3jX/2uV 267 | 7P9ph97/frL5/32k9P9+nev/hqHS/4yz2P+Cn8L/e5m+/36ZvP+Jo8n/eZO7/3mVv/9eh6b/X4io/2OI 268 | qv9jiKn/aI+0/2iMuP9nirP/cZa//3GZwv9znMX/dqfO/3e48/+NrOH/g7bz/4nG/v+Etvj/e57k/4Kd 269 | 3f9faL7/e4bg/0tOqP9JU6n/XGqw/zo8iv8dGWP/U12j/15qp/9odKv/b3uv/3uItP+IlLr/gYm6/4OL 270 | u/+LkcD/h5S//4CQvP94h7r/dIK7/218u/9oesT/aIjW/zAtlv85Paj/P0Ws/05hx/9Lb9f/XGnK/2Bp 271 | yf9jcc3/YXLO/22F2P9uh9r/c5bp/36g8/94l+n/i7f5/4Shxf9/mrz/gJq6/4Gcvf+Cn8T/dJS8/3aR 272 | uv9yj7f/Xoej/2WKp/9qjrH/a4ys/3OTsf92lrz/f6LF/2+Zwf9xmsP/bKPQ/3eo1v97w/r/g8n7/47T 273 | /v+EufX/iL77/4rF+f9qiNv/ZnvO/1BZvP9KUaj/SU+n/0BKm/8/RZb/TFCc/1pkp/9nca3/c320/4GL 274 | u/+Nlr//hY+7/297rv9VYqH/YXGs/3SDuP+KlcH/j5jE/4OMwP91gL3/a3m9/2Z4xf83QKf/NTam/zg8 275 | pP9ASLj/RU+8/05Uuv9bZMT/W2fG/2d6yP9zitj/fary/3ah8v9/p/P/fqj1/4Go7/+EnsD/fZe5/3eU 276 | tf9wjbD/bY21/3ORuf9zkLb/c5C3/16Gn/9ni6b/aYup/2ONr/9ukLL/bZK4/3CUtP9xlbr/fqLH/3ed 277 | yP93ncr/f6bZ/4S98P+Kx/v/mtX+/5XW/v+Xzvv/aInc/1tpyP9IT63/TVOo/0JJn/85QZf/Li+E/1Vb 278 | pf9jaq3/cXiz/36Fuv+Kkb7/kZjA/1xmo/8jKXn/UFuj/0hSnf8hKX//hpC//5Oaw/+Mk8L/fIW+/3F8 279 | vP9odbz/YG+//y0un/8tLpv/Pj+t/z0+qv9KTLX/UFS6/2BsyP9nfND/bJPn/3ae8P9xkuj/h634/4Sq 280 | 6/95m9L/iqTH/36bvP94lLT/c5Cw/3aSt/9xhqv/boiu/3GKr/9mg5r/ZYKa/3eMpv9xiqf/b4mi/2iL 281 | sf9qiKn/cJrA/3Sew/9/ocX/i6vN/4Gjzf+AqNv/ir3z/6LZ/v+g2P7/jMn5/22W4/9eacj/T1Sx/0xR 282 | q/9AQ5z/NDWR/0hLnP9dYqz/bHOy/3qAuv+Jj8D/jZTB/4uTv/9rcav/Zm+r/4ONu/9/iLz/YWus/32H 283 | uf+Rl8P/jZXC/4KJv/95gb3/cHi8/2Vwuf8jIpf/KCeR/zIzn/85OaL/SUyy/1RZvP9casf/YoDV/26R 284 | 5P9vlen/fqT0/4Sz+P+Rs9n/k8X0/5i73P96lrj/fpi4/3WStf94kbP/dYyu/3SIq/9yia3/aIec/2eF 285 | nv9yi6f/c46o/26Mqv9tjKz/bYyu/2yGq/9virL/eZK5/3Wcxv+JoMf/hq/j/4at5P+MwP7/jL/+/47I 286 | +v9oit7/WWDE/0lLrf9JS6f/OjuU/yglgP9RVaf/ZWmx/3d8uv+Dib//jpPD/5GXxP+JkcD/a3Go/4eP 287 | uf+qr8j/lJvD/3F6tP97hbr/k5vF/5Saxv+LksP/gonA/3d+vf9rc7r/U1u2/zMvlv81OJ//Nzeb/0hM 288 | rv9WXbz/YXTK/2mC1P9ri9//eqXy/3Wd7/+ArPH/gK3s/4az8v+Dnr3/iKHC/3mTtP92lLn/fpi6/3iV 289 | uv92iq3/doms/2uGnv9uiaD/co2m/2uKpP9li6r/bYyr/3WVtf9zj7P/ZZTQ/4e16/99reP/g67j/4Wp 290 | 4v9/ouX/jMD7/4/D/f98r/X/YXDT/1VYvf9FRqn/QkKj/zo4lv8iH3X/Wl6s/3J2uf+BhsD/i5DE/5GW 291 | xv+Umsf/jJfD/3R/s/97hbX/p6nH/5OZxP9wfLT/go7B/5igyv+aoMr/lJvI/4yRxf+AhsH/c3y9/1xl 292 | t/8nIor/KiWO/1JXtP9KTa3/VF24/2F0yf9ridb/eKPw/4av+v+DtPb/f630/42/9/9ykrX/hZ6//4yh 293 | vf93k7T/c5S//4Gcvv91ia//cIOq/3SKsf9rjqX/Xoik/2WLpf9jiaX/Yomq/26Qrv9vkq//cJGu/3md 294 | vP+AocX/e5bC/4Sr5/+Zyvz/i7r7/5bN/f+Juvz/Z4vk/1Vdx/9SU7v/QT6h/zc1lP88OZX/REOb/2Vq 295 | tP99hL7/iI3D/4+Vxf+Smcf/lp7K/5KcyP+HksL/foe5/6KlyP+MlcT/e4i8/42Xxv+aosv/nKPM/5qh 296 | y/+SmMj/ipHF/32EwP9mcLn/KiSL/zErlf8vKpD/SU6q/1dhuP9shNH/e6Tt/3+2+f+Dtvn/h6vj/4Ws 297 | z/95osP/dJO4/3SQtP94lLT/kaW8/4Obt/+Ala7/gZGo/3CDqP9tgKb/YIea/2mJnf9jh6D/bIyn/2iP 298 | qP9tiaP/cI2l/3SSt/9ujLr/dJLD/3iVu/99msL/fZm7/4Sk1P+RvPj/gav2/3Wg7v9PVL//RUWu/zMt 299 | j/80MI3/OjaT/05Mo/9xeLj/g4u//4uSwf+PlcT/kJbE/5ObyP+WoMr/j5rI/4OOv/+jpsn/jJfE/4KP 300 | wf+RnMj/mqHL/5qgyf+Ynsj/lJrH/46Wxv+EjML/bHS5/ygnh/8zLZT/Mi6P/0JBnf9mdcb/cpPe/3uv 301 | 9/95sfb/fqrv/4msz/+AosP/cI+3/3WRt/9zjrT/dI+w/3GMrP9xi67/cIWr/3KHqv98kLD/dYep/2SH 302 | mv9ohpn/Youc/2qMoP9qi6P/d5Gs/2yOsf9tkbb/aoe1/2+Mtf9zj7X/epa7/32cwv98nrz/h7D4/4u3 303 | +v9+q/D/QECv/zcxmv8uKY3/KCJ5/zg3jv9TWKX/cny1/3yFt/93f7P/dn6z/4CGuP+Mj77/kJnE/5Gc 304 | xv+Gk8P/n6XJ/4yYxv+Hk8H/lJ7G/5OZxf+QlcH/hoy9/3+Iuf+Aibr/f4m8/294tv81NZD/OzSU/zMq 305 | gf9XXq//U122/2qO3v9xqvP/eqHp/32p7f9+ocT/epvA/3GPtf9xja3/c4yu/3SNrv91jq7/co6s/3CJ 306 | p/9xjK7/eJCv/3SPuv9qjJ3/a4mb/2iNnP9jiqb/aI6s/2qNrP9xlrf/bo6x/26Nsf9wkLX/dJa7/3eb 307 | v/9+oMT/hajv/4649/+Jtfj/cpbm/zs6qf8qJYf/JiB+/yAcav80MYj/VWCl/255sP9kbqT/SkuB/0I4 308 | bv9AOWj/T02C/251qf+Gkr7/e4q+/5mjyP+CkcL/eIa3/4OPvf9+grT/enen/z84cf9SUo3/UV2X/3B6 309 | r/9odLL/PT6W/zIugv85NYj/VFeq/1dluv9xqPD/dqbv/4Cq8P+Fsen/gaLF/3uYvP93k7T/dI+y/3ON 310 | rv9wjK3/c4yt/2yKrv9qg6T/d5Cy/3eKp/9wirX/aYqa/2WFlf9qjJz/bI6r/2mLpv9si63/aIin/2mI 311 | rP9vjrj/cZCx/3aUu/96mL3/d5q8/3qg5f+Pse3/g6/0/3+q7P8yLZr/LiiJ/yUge/8eGmj/Kyp8/1Je 312 | ov9ja6b/OjZv/2tphP8TESH/EBc2/4N6hv8QE13/XGup/2Z4tP+ElMP/eYvB/1JjpP9baqn/UliA/xsW 313 | Kf8ZIUb/fnaE/yonYf9bYp7/Y26r/zs8lP8xLYH/MS6E/z5AoP9LWK//YY3g/26Q4v9/qPH/iavX/3+c 314 | wP97l7z/eJG6/3aPtf9xia7/fZO2/3GKrP9siKr/coqo/4GVsv92iKn/eI20/2eFlf9qiZf/b5Cd/26K 315 | pf9qian/aoWk/2mGqf9riKz/co+3/3aVtv96l7r/gaPH/4Gew/9zpuv/erv4/3mm7f9HW8b/KieJ/ycl 316 | ff8mIHv/Ihxr/y0sd/9HU5r/Rk2O/xcPH/8aEiD/DQoX/xELEf8ODBv/Qk6O/0lYnf9qe7X/fI3A/3OG 317 | vP9RYqX/R1aa/zNBf/8PCxn/DwoV/0w9SP8NCBP/Mzh2/1llpf80N4r/NCyE/yUgeP8sJ4n/PkSz/05z 318 | 0P91qPP/fKrv/4iozf+Anb7/fJi8/3iXrv9zirb/cYex/22IrP9uiKn/bomq/2yHqP+AlK3/laOy/3yP 319 | q/9ohZT/aIWR/2WOlv9riqH/b4ef/2uHqP9siKr/a4mx/3GOtf9yj7b/epS6/4Gbvf9+oeL/irHt/2+c 320 | 6/80OcD/Kian/yginv8kHn7/LCd9/ygld/8nI27/RUyU/0lQkf8zNnj/EAw7/xYQG/8bETP/QkiH/0JN 321 | j/9RW5v/eoq9/4WUw/9/j8D/aHi0/0tXm/9CUZL/Eg9L/w8JEP8NBhP/KSVq/0lSlf9SW6D/OTqN/ykf 322 | df8lHnr/KR+H/yommP8+Rsj/a5vx/3mr8f+Pq87/iJ++/3iWuP92kbn/b4a0/26Frv9rh6//dIyp/3GL 323 | p/9viaT/boar/3+Vrf9of5z/aYac/2WFlP9ohJz/bYWc/3CJn/9qhqb/a4eo/22Lsv9wjbb/b5G+/3yV 324 | vP+Amr3/f6Pi/3Kb6f84PMP/KSWr/yYgn/8lH5P/Jh2N/yEYdf85NIT/KSRt/0JIk/9lb6T/ZW6i/15j 325 | mf9ISYf/JyFL/yMfRf85PXL/gY+9/4+dxf+Wosj/kp7G/4OQvf8wNXT/HB5J/ywrY/9OVZb/Y2mj/294 326 | qv9ncqf/REyP/zIsf/8hGWf/Hxtz/ycgiv8xLZ//MzKr/zo6xf9bguj/gaHS/6Cz0P+AnML/dI+9/3OK 327 | uP9thK7/a4ar/3CJpP9wiKL/a36i/2h5of9se6L/bn6f/2eEnf9og57/aISc/2aCov9rhJz/aoak/2uF 328 | pP9riLD/cY66/3CRv/94lr3/f5rA/3mi5P87PsH/Liuq/zUxq/8pIp//JB2S/y8sj/8rI4T/GxZd/ywr 329 | cP8+QIz/Nz59/ztBdP8uLVf/Mi9Z/19nlf+Nm8H/lKLJ/5iny/+frM7/oKzN/56qzP+XpMn/j5zD/4eT 330 | uf9LRXT/MSZM/zItW/9dZJT/TVOJ/0FIiP8jHGD/Ix1r/yYdgv8oIYv/MCia/y4lof8vJqj/PjrG/26Y 331 | 0v+Kocr/f5jA/3SMvP90irj/bIWv/2p8ov9tf6X/boSn/2h8o/9peKH/a3if/2x6oP9ohJ//Z4Kf/2yE 332 | nv9siKv/boWd/2uFp/9thaX/aoev/2+Jtf9xkcL/c5TG/4Ggy/9LWMr/NTGr/zk5qv88Par/Miyg/ygf 333 | jf8gGHb/IRpz/yMcb/8ZFFL/MjSA/15trP92h7j/gZK9/4qZwv+Rocn/mKfO/52t0v+gsNP/o7HT/6Wy 334 | 0/+jsdL/oK7P/52rzv+Zpsr/k6DF/42Zvf9/iK7/aXKd/1xqn/8uMXP/Ihlb/yIcZv8yMIT/NCmK/y8j 335 | jv8mHZH/KR+Z/zYvs/8+Usf/fpzI/3+UxP90irf/boa1/3CGtP9tg6r/bH+k/2p9qf9oe6X/a3qi/3uK 336 | p/9tfKD/aYSe/2eAnP9lgp7/aYWl/2iCof9pgqH/a4Cb/2eCqv9thaz/bpbG/2+c0v94o9j/PUK7/zUx 337 | nf81Mpv/KiKG/2J/pf9fgaj/U3Wj/1VypP9Xda//RVeU/yEgZP9MWaH/eYy+/4WYxv+Lncr/j6HN/5an 338 | 0P+drtP/orHV/6Sy1v+jstb/obDU/5+u0v+cq9D/l6bM/5Oiyf+OnMX/hZO9/3CAsf9ET4//R1SW/1Rn 339 | pf9Xf7H/QW6c/0Jvnf9airb/XY+z/ysjg/8uIp//NC6s/3uby/94k8f/dIq+/2+Etv9vg7L/anui/2Z5 340 | oP9mdZ3/aXun/21/ov9vgqD/bn6f/2V9lv9ngZr/aIOg/2iCo/9mg6f/ZoKg/2x+mv9lf6n/aYKr/3Sg 341 | zf91nMv/c53I/zQumf8wKIf/XnWX/16Ckv9ZeZz/Z4mz/2uOuP9hgbH/S2GY/01jn/9JVZr/NTyD/15x 342 | rv+Ak8P/ip7L/4yfzf+Wp9H/nK3V/6Kz1/+ltdj/pbPX/6Oy1/+fr9T/m6vR/5anzv+Rosn/hZfE/3OE 343 | uf9AT5b/S1ym/0VUm/9RZ6b/RF+g/0BYl/9Sbqr/SWGY/0xkif9Gb3r/UmaJ/ysik/9iZK3/fpXI/2+I 344 | vf9ugrT/aoGx/2l5oP9nfqn/anul/2t9pf9vgKL/dImg/32Oof9mgJn/ZoGa/2aEof9mgJ//ZoGj/2iB 345 | pv9qfZj/Zn6q/2+Dqf9zncb/c5vB/2+KtP9ofrb/W353/1d3fv9Tdov/UnKZ/1JtoP9GXJL/QVGN/z5L 346 | iP9LWJf/Oj5//z5Ahv9DS5L/YnOx/4aZyP+Qos//lqfS/5yt1v+jsdj/p7TZ/6e12f+mtdj/o7HW/5+u 347 | 1P+ZqdH/j6HL/3+Swv9EVJ3/Tl2l/z9Mkv86RI3/MTmB/yMhW/85PI3/SVqg/0pekf9AWZL/Qmdk/0Jg 348 | WP9DWHH/MjGQ/3iFs/93lMr/aoG1/2h/rv9mdZv/aHul/25/qP9ugKf/boCi/21+p/9sfaX/Z4Se/2V+ 349 | lf9lg5//ZX+d/2d/ov9lgKn/aX6b/26Bpv9ug6j/dZK2/3egwf9wl9f/k7KT/1qBd/9cfoT/UXKN/1Nv 350 | mv9MaaD/QVmU/zs9d/8mJV//KiRn/x8aWv8uK3H/PT2A/ztDj/9rern/jZ7M/5an0f+aqtT/nazU/6Ox 351 | 1/+ksdb/pLHX/6Cs1P+dqtP/lqbP/4aayf9kdbX/Wmuv/0lSmf81OIP/Lit7/0RBj/9GTpv/QEWi/yMg 352 | Yf8mJFn/ZEVj/2dhX/9Pdm//QmVi/0xgjP8jMHn/aYzB/2aCuf9keKn/anqk/2R4n/9sfab/aXqh/2x+ 353 | o/9peZ//aXqk/2KBnpBnfJX6ZYKf/2J9nv9mgab/ZoGt/2l+mf9sf5//d4er/0lxv//by6L/9/Cy/8Hk 354 | 3P+Eu6v/l8XA/0BRef80Q3j/QVOM/52aw/89Omr/KB1P/xsXRv8fH2D/Sleg/0hTnP9FTZr/Rkya/32N 355 | wf+OnMv/lKHO/5Shz/+ToM//jZvK/5ek0P+aptH/lqTP/42dy/96jMH/Znm2/1Fgo/84PYL/TlCQ/zIz 356 | ef9NTHv/Pzxq/zAseP85PJn/T0p9/1tJY/9gmNX/Z5as/4a92/9/wN3/W7je/1damv9ikM7/X3iw/2V6 357 | qP9kdp3/aXul/2Z7qf9oeJ//Z3if/2h4ov9ihKFGXoGg7mGDov9egKD/ZX+g/3GYy/8pRmX/l5mc/7qy 358 | sf/Zz8z/zs3F/6HK5v+Yz/7/kNL9/8Xt+v/I3+7/t8vU/zg4Y/8mFzD/SlCP/0lanf9KYaL/N0iO/0ZU 359 | mf9FU5b/MzqD/0BBif8+QpH/ZG+x/3yJvv9verf/R0qZ/z5Hk/9VX7H/gZDE/4uYx/+BksT/aXi2/1Jh 360 | nv9XYp7/Q0KG/0A6hf88MHL/OiZC/2BThP8zL2b/Oyxs/1lHeP9RQGX/nN3z/3C+9v+c1fX/WXOs/12N 361 | w/9qq97/RHGt/06Evf9FN2T/ZHih/2V6pP9nfq7/Znih/2V3oP9ecJj/YH+hOluDpe1ffp//X36f/1x5 362 | lf9khbD/ZYCh/3mOuP9reLL/UWaR/3TWzv+H7ef/QL25/1bLzP+A6/D/odPw/z89X/9BSWD/QUZ5/1ls 363 | rP9cc7D/S16g/z5Tmf8wPYj/Iyt0/y83ff8xMXn/LSlv/yIfa/8pKXn/JiZ4/0JGkP9GTZj/MD2D/0tS 364 | pP9KV6L/Tluh/0dQj/9GS4r/Iho9/yIWMv8mHUf/Jxs5/zoqWP9BOGD/OjFn/zQsaf9VQmz/aHOa/0aW 365 | wP9Qsc3/RrfO/z6uzP9xm+X/aIXD/2aIuP9je6b/ZXuh/2R6pP9kd5//Y3yq/2V8qv9hc5//XnCdTgAA 366 | AABbgaXTXn6f/119nv9efp3/Y4Oq/1x4nf95o9X/e6re/3+x5P+ZzPb/l8/8/6vh+/+Qx/b/ibby/1Zr 367 | mv9MRnz/PzhW/3qX0/9hfLv/X3y5/0xmqv9BWqP/Q1qg/zNCkP81Por/OD2E/z1Bjf87P4j/Tluh/zM8 368 | hv9RZaX/U2Sp/zU+g/9MV6b/TFel/zU7hf8pLE7/JiFK/355lf81FzX/SStE/3Vvn/8sK2T/cXm3/0I+ 369 | gv9eWpv/cmqT/1ldnv99qdv/l837/4aw8/+GsfL/h7nz/2mIu/9gfbj/Y3qj/2J3oP9geKP/X3ai/15y 370 | oP9geaj/XnGg/11xoQ0AAAAAVXqhXluBpPVafJv/W3ua/158mv9hgqv/aYat/32o2/98sef/f6rb/4vE 371 | +f+Mv/X/j77z/5vM+/+lz/b/Rjlg/1Vdlv+Go9T/eprV/22Nx/9ggsL/VXa4/0ttsf9FZKj/Tmiq/09l 372 | pP9KWqH/co/E/0pdov9kgLv/T2mm/1pusP9TZKv/S1ul/1Zlr/9DSJb/Ihoz/yculv8/JUb/h2uB/2tO 373 | Zf96Z3n/Li9u/zkzbP8zLWz/OTBl/1BCeP9RRWz/n9D9/5zM/f+Hq+v/g67y/4mw7/9jgbX/X3iw/193 374 | p/9heKP/YXml/155q/9ddKH/XXal/193qOUAAAAAAAAAAFV9pBdZf6PFXH+f/1p+nv9bfJz/X4Ck/2GA 375 | pf99r+T/fbfr/4a/8v+Guu//fKvj/43I+f9yndj/ksj2/1JWe/8yN3L/YXPA/4Om2f+buOX/Z4vH/2GH 376 | xf9uls3/bpXK/3qh0f98o8//cZbH/2OFv/91ns3/Zoe9/116s/9GW5r/Vm21/1Vnsf9bbLP/TVGk/y0f 377 | Pf8pN6L/b1pu/1c+U/+OeIb/XEVh/15Ubv9APIz/Pj6A/zxWkf9iVYH/pLnQ/5jN/f+GqOf/lMb8/4Om 378 | 7P9yjsz/YoPB/151q/9ieKf/WXOi/1lunv9ed6n/X3Wj/1tzpO9jfq0QWW6bFVJ+pQFUfaICV3yjSVmB 379 | o+lbfZr/Wnuc/1t5l/9fhKz/Y4Ww/3Kk2/+At+z/grjt/3il3f+HuvD/ir3x/46+8/90k8P/U1af/yks 380 | X/9DTqH/P0md/2aGy/9XesH/T3fA/1OBxP9cjcr/Z5XM/26cz/92odD/ZI/E/2qRxf9nhb7/cY7G/15z 381 | uf9ierv/V2ax/1ZQp/80Kmz/RD+N/3RYa/93ZoL/qpqj/6aVrf+Xkaz/aW6s/4CRvf/G4e7/foCk/5Kh 382 | 0P+czPz/i6/s/4629v99n+b/YXy9/1twrP9bd7H/XHOn/1Zun/9Zdar/W2+e/1drmP9deKaPYHuoBFlw 383 | mhxRfaMDAAAAAFh7pAJZgaVDWnmU4ll5mP9afZv/XoGm/1+Bq/9kjMH/cajg/4O37f+Lw/f/i77y/4q9 384 | 8v+SyPr/ptf9/46bvP++y9H/VVmR/zwzc/9SU4//m7Tf/2OEyf9PecD/Un/D/09/wP9ZhsX/apXL/2iO 385 | xv9pjcT/fJrN/3KNx/9qgsH/ZXy8/2NzuP9NO3P/bXCv/0lKhf97YXP/j3CA/6aNmv95Xn//W1d6/4qs 386 | tf9eXX7/eJjp/6nL8f+94v3/irLv/6zd/f+LtPT/aofL/1x5vf9YdK3/WW+p/1Rzq/9Uapz/Vmye/1Vt 387 | nv9UaJX/W3imIwAAAABadZ8CUHmfBFCHrQEAAAAAVHigAlZ2mVVdfZi3WHuezVl8ofdcfaj/X3+u/2CL 388 | xP99te7/jsT5/3ii3P+Ryfz/mM39/3GMpv8+TJb/f4KW/4uMpf92YZf/RkCk/yMQPf9FT5L/O0SK/2OJ 389 | zv9hicv/XYjK/2eOx/92m87/e5zN/4Ofz/91j8T/Z325/214sf/Ry9P/UkiG/ygjQP9XV5H/fIO7/11O 390 | Zv9pVXP/fYGl/8PE2P+QoeD/c3/o/3+Q8P+bxfj/pdD8/57N/P+gz/3/e5/h/1p4u/9ac7j/VXGy/1Bv 391 | rv9SaZ//VG+k/1hxo/9VcaTDU2eWDll4pAFaeaIBXnylAk54nwJLia4FVXqiAVZ6ogFVe6IPWHWVKll6 392 | m0pYe6LDW3qn+1p5p/9efq//bJXM/4vD+P+HufL/eKLZ/5TK+v+o2Pj/Jz5n/zcwXv9OQIz/eHS1/y8H 393 | e/9sVYT/WkWA/xoRU/8wJor/Vn/M/ysxmP8sLYf/Kyd2/zM1fv8wMHP/gIK4/3NpiP9EPVz/SUVw/4WF 394 | mP9OTpj/S2S4/1denP9LT4n/SU92/8HN4/96jfD/fYrw/4GL9P+Rr/7/kLby/3+k4P+Yyvz/Z4fM/2KC 395 | yP9dhcT/WHK6/1Rytv9QaaH/T2mf/09qnP9Vdao+UWmaA1BqmAVYeqQYVHOdBVl+qBNNeZ8HR4SoBll7 396 | oxJYfaQLV32kEld7pBFWeJ8MVnSbG1VslzZadKjJWXWm/1p4q/9jfbL/ernv/4S98f9wmcr/fLTh/6jo 397 | /f9hoL7/d2C5/0lPnf9pQqn/Ok+L/zhIgf94lKz/UIi//zo9lP9CVpP/GS5g/yIXWv8xLXH/R1eA/0Q9 398 | dv83OWv/VVeb/42Vvf9KTpT/SmWj/0tyqP9IYJv/T2eh/1Rpmf+Lo/X/hJr2/5S0//+ey/7/q9T+/6PH 399 | +P+Txfr/ZYbL/1t9xP9Qa7P/ZI3J/1RyvP9QaqPfTmujNEtml0pMdqZYT3KlQlFpmi9SbJktWH2nKFFx 400 | mx9Tf6kUAAAAAAAAACAQAAAAAAAAAKAAAAAAAAAA4AAAAAAAAAbAAAAAAAAAAIAAAAAAAAAAgAAAAAAA 401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 403 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 404 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 406 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 407 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAAAAA 408 | AAAAAAAAQAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 409 | 410 | 411 | --------------------------------------------------------------------------------