Compare commits

29 Commits
Author SHA1 Message Date
Xytrizareal 9fdfc54c24 re add this 2024-04-25 14:24:59 -07:00
Xytrizareal dfd98e303c revert https://github.com/masckmaster2007/XPSLauncher/commit/bcd8d0053e115050510df49ac05377af2fa5506b 2024-04-25 14:24:13 -07:00
Xytrizareal bcd8d0053e 19gjpfix toggle option (not in ui, yet.) and tweaked sizes for render 2024-04-19 23:51:48 -07:00
Xytrizareal d2b651bcf9 fix jeans drug usage 2024-04-19 23:38:28 -07:00
Xytrizareal 1a778d9699 Merge pull request #1 from Xytrizareal/master
merge remove select app & replace with force launch and a queue
2024-04-19 23:36:33 -07:00
Xytrizareal 36d1b59544 remove select app & replace with force launch and a queue 2024-04-19 23:34:04 -07:00
Jean 5eefa3f4b5 wth is wrong with me 2024-04-20 08:24:02 +02:00
Jean 4f06d070a8 1.9 GJP Proxy soon... 2024-04-20 08:20:11 +02:00
Xytrizareal 4d16e0edad Update README.md 2024-04-09 22:08:42 -07:00
Xytrizareal 16d9b8d65c Merge branch 'master' of https://github.com/Xytrizareal/XPSLauncher 2024-04-02 20:42:26 -07:00
Xytrizareal 14e05ae658 change tools -> dashboard (2.3.8) 2024-04-02 20:42:14 -07:00
Xytrizareal 11b232540f nvm workflows 2024-04-02 02:14:18 -07:00
Xytrizareal b72842f931 Rename dotnet-desktop.yml to dotnet.yml 2024-04-02 02:12:09 -07:00
Xytrizareal 1cc7bcded6 fix 2024-04-02 02:09:44 -07:00
Xytrizareal 02cb27d095 oops 2024-04-02 02:06:51 -07:00
Xytrizareal e875b8eef6 testing workflows 2024-04-02 02:05:08 -07:00
Xytrizareal 2a8b403901 2.3.6 / 2.3.7 2024-03-23 14:20:52 -07:00
Xytrizareal 33c59eb1b9 2.3.5 2024-03-10 18:10:34 -07:00
Xytrizareal c5bbafc13a 2.3.4 2024-03-10 18:08:16 -07:00
Xytrizareal 05b9cf3a6d 2.3.3 2024-03-10 18:07:57 -07:00
Xytrizareal 84f4779a19 2.3.2 2024-03-08 18:24:06 -07:00
Xytrizareal e1ed1298a8 2.3.1 2024-03-08 18:19:28 -07:00
Xytrizareal d3eeda1ad1 2.3.0 2024-03-08 15:30:22 -07:00
Xytrizareal 595e5828bc 2.2.0 2024-03-07 21:24:04 -07:00
Xytrizareal e544b389ce AAAAAAAA 2024-03-07 16:30:11 -07:00
Xytrizareal bb9f8914c8 2.1.1 2024-03-07 16:25:35 -07:00
Xytrizareal 2b72547f1c 2.1.0 2024-03-06 20:24:00 -07:00
Xytrizareal d4d8bedc3f font thing 2024-03-03 17:38:17 -07:00
Xytrizareal c9ee51457d 2.0.0 2024-03-03 15:55:59 -07:00
31 changed files with 2526 additions and 225 deletions

No files matched your search

+4
View File
@@ -2,3 +2,7 @@
The official windows launcher source for XPS The official windows launcher source for XPS
More information coming soon More information coming soon
---
# If you wish to use this launcher for your project, fork the repo please!
+8 -6
View File
@@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.8.34511.84 VisualStudioVersion = 17.8.34511.84
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XPSLauncher", "XPSLauncher\XPSLauncher.csproj", "{A9B79EA0-39D4-47E9-A506-05BE547D83C1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XPSLauncher", "XPSLauncher\XPSLauncher.csproj", "{1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{17082187-CDB9-4EDA-9617-B06AACFC731E}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,15 +13,15 @@ Global
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Release|Any CPU.Build.0 = Release|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {18E8BD81-78AC-4652-B81A-25117C7B197C} SolutionGuid = {8069D002-54EA-4D55-8E41-E575FC45A6D8}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
+570
View File
@@ -0,0 +1,570 @@
using System.Windows.Forms;
namespace XPSLauncher
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.button5 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.label5 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.label6 = new System.Windows.Forms.Label();
this.panel4 = new System.Windows.Forms.Panel();
this.button7 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.pictureBox13 = new System.Windows.Forms.PictureBox();
this.pictureBox12 = new System.Windows.Forms.PictureBox();
this.pictureBox11 = new System.Windows.Forms.PictureBox();
this.pictureBox10 = new System.Windows.Forms.PictureBox();
this.pictureBox9 = new System.Windows.Forms.PictureBox();
this.pictureBox8 = new System.Windows.Forms.PictureBox();
this.pictureBox7 = new System.Windows.Forms.PictureBox();
this.pictureBox6 = new System.Windows.Forms.PictureBox();
this.pictureBox5 = new System.Windows.Forms.PictureBox();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox13)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button1.Location = new System.Drawing.Point(240, 176);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(120, 40);
this.button1.TabIndex = 0;
this.button1.Text = "2.2";
this.button1.UseVisualStyleBackColor = true;
this.button1.UseWaitCursor = true;
//
// button2
//
this.button2.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button2.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button2.Location = new System.Drawing.Point(240, 275);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(120, 40);
this.button2.TabIndex = 1;
this.button2.Text = "2.1";
this.button2.UseVisualStyleBackColor = true;
//
// button3
//
this.button3.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button3.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button3.Location = new System.Drawing.Point(240, 374);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(120, 40);
this.button3.TabIndex = 2;
this.button3.Text = "2.0";
this.button3.UseVisualStyleBackColor = true;
this.button3.UseWaitCursor = true;
//
// button4
//
this.button4.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button4.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button4.Location = new System.Drawing.Point(240, 473);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(120, 40);
this.button4.TabIndex = 3;
this.button4.Text = "1.9";
this.button4.UseVisualStyleBackColor = true;
this.button4.UseWaitCursor = true;
//
// label1
//
this.label1.AutoSize = true;
this.label1.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label1.Location = new System.Drawing.Point(96, 111);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(172, 13);
this.label1.TabIndex = 4;
this.label1.Text = "What version do you want to load?";
//
// button5
//
this.button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button5.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button5.Location = new System.Drawing.Point(190, 452);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(222, 40);
this.button5.TabIndex = 14;
this.button5.Text = "Open App Folder";
this.button5.UseVisualStyleBackColor = true;
this.button5.Visible = false;
this.button5.Click += new System.EventHandler(this.OpenAppFolderButton);
//
// button6
//
this.button6.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button6.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button6.Location = new System.Drawing.Point(190, 498);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(222, 40);
this.button6.TabIndex = 15;
this.button6.Text = "Open AppData Folder";
this.button6.UseVisualStyleBackColor = true;
this.button6.Visible = false;
this.button6.Click += new System.EventHandler(this.OpenAppDataButton);
//
// label2
//
this.label2.AutoSize = true;
this.label2.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label2.Location = new System.Drawing.Point(243, 278);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(45, 13);
this.label2.TabIndex = 17;
this.label2.Text = "Themes";
this.label2.Visible = false;
//
// panel1
//
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel1.Location = new System.Drawing.Point(150, 328);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(64, 64);
this.panel1.TabIndex = 18;
this.panel1.Visible = false;
this.panel1.Click += new System.EventHandler(this.DarkThemeButton);
//
// label3
//
this.label3.AutoSize = true;
this.label3.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label3.Location = new System.Drawing.Point(156, 400);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(30, 13);
this.label3.TabIndex = 19;
this.label3.Text = "Dark";
this.label3.Visible = false;
//
// label4
//
this.label4.AutoSize = true;
this.label4.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label4.Location = new System.Drawing.Point(224, 400);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(42, 13);
this.label4.TabIndex = 21;
this.label4.Text = "Amoled";
this.label4.Visible = false;
//
// panel2
//
this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel2.Location = new System.Drawing.Point(229, 328);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(64, 64);
this.panel2.TabIndex = 20;
this.panel2.Visible = false;
this.panel2.Click += new System.EventHandler(this.AmoledThemeButton);
//
// label5
//
this.label5.AutoSize = true;
this.label5.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label5.Location = new System.Drawing.Point(304, 400);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(37, 13);
this.label5.TabIndex = 23;
this.label5.Text = "Purple";
this.label5.Visible = false;
//
// panel3
//
this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(0)))), ((int)(((byte)(50)))));
this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel3.Location = new System.Drawing.Point(309, 328);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(64, 64);
this.panel3.TabIndex = 22;
this.panel3.Visible = false;
this.panel3.Click += new System.EventHandler(this.PurpleThemeButton);
//
// label6
//
this.label6.AutoSize = true;
this.label6.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label6.Location = new System.Drawing.Point(399, 400);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(27, 13);
this.label6.TabIndex = 25;
this.label6.Text = "Red";
this.label6.Visible = false;
//
// panel4
//
this.panel4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel4.Location = new System.Drawing.Point(388, 328);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(64, 64);
this.panel4.TabIndex = 24;
this.panel4.Visible = false;
this.panel4.Click += new System.EventHandler(this.RedThemeButton);
//
// button7
//
this.button7.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button7.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button7.Location = new System.Drawing.Point(190, 544);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(222, 40);
this.button7.TabIndex = 26;
this.button7.Text = "Restart Launcher";
this.button7.UseVisualStyleBackColor = true;
this.button7.Visible = false;
this.button7.Click += new System.EventHandler(this.RestartButton);
//
// button8
//
this.button8.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button8.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button8.Location = new System.Drawing.Point(190, 590);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(222, 40);
this.button8.TabIndex = 27;
this.button8.Text = "Reset Launcher Settings";
this.button8.UseVisualStyleBackColor = true;
this.button8.Visible = false;
this.button8.Click += new System.EventHandler(this.ResetConfigButton);
//
// label7
//
this.label7.AutoSize = true;
this.label7.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label7.Location = new System.Drawing.Point(141, 123);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(144, 13);
this.label7.TabIndex = 29;
this.label7.Text = "Close launcher on game load";
this.label7.Visible = false;
this.label7.Click += new System.EventHandler(this.ToggleCloseOnLoad);
//
// label8
//
this.label8.AutoSize = true;
this.label8.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label8.Location = new System.Drawing.Point(166, 174);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(118, 13);
this.label8.TabIndex = 30;
this.label8.Text = "Allow multiple instances";
this.label8.Visible = false;
this.label8.Click += new System.EventHandler(this.ToggleMultiInstance);
//
// pictureBox13
//
this.pictureBox13.Image = global::XPS.Properties.Resources.Checked;
this.pictureBox13.Location = new System.Drawing.Point(109, 119);
this.pictureBox13.Name = "pictureBox13";
this.pictureBox13.Size = new System.Drawing.Size(31, 31);
this.pictureBox13.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox13.TabIndex = 34;
this.pictureBox13.TabStop = false;
this.pictureBox13.Visible = false;
this.pictureBox13.Click += new System.EventHandler(this.ToggleCloseOnLoad);
//
// pictureBox12
//
this.pictureBox12.Image = global::XPS.Properties.Resources.Checked;
this.pictureBox12.Location = new System.Drawing.Point(135, 170);
this.pictureBox12.Name = "pictureBox12";
this.pictureBox12.Size = new System.Drawing.Size(31, 31);
this.pictureBox12.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox12.TabIndex = 33;
this.pictureBox12.TabStop = false;
this.pictureBox12.Visible = false;
this.pictureBox12.Click += new System.EventHandler(this.ToggleMultiInstance);
//
// pictureBox11
//
this.pictureBox11.Image = global::XPS.Properties.Resources.Unchecked;
this.pictureBox11.Location = new System.Drawing.Point(112, 120);
this.pictureBox11.Name = "pictureBox11";
this.pictureBox11.Size = new System.Drawing.Size(28, 28);
this.pictureBox11.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox11.TabIndex = 32;
this.pictureBox11.TabStop = false;
this.pictureBox11.Visible = false;
this.pictureBox11.Click += new System.EventHandler(this.ToggleCloseOnLoad);
//
// pictureBox10
//
this.pictureBox10.Image = global::XPS.Properties.Resources.Unchecked;
this.pictureBox10.Location = new System.Drawing.Point(137, 171);
this.pictureBox10.Name = "pictureBox10";
this.pictureBox10.Size = new System.Drawing.Size(28, 28);
this.pictureBox10.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox10.TabIndex = 31;
this.pictureBox10.TabStop = false;
this.pictureBox10.Visible = false;
this.pictureBox10.Click += new System.EventHandler(this.ToggleMultiInstance);
//
// pictureBox9
//
this.pictureBox9.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox9.Image = global::XPS.Properties.Resources.Exit;
this.pictureBox9.Location = new System.Drawing.Point(0, 0);
this.pictureBox9.Name = "pictureBox9";
this.pictureBox9.Size = new System.Drawing.Size(84, 93);
this.pictureBox9.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox9.TabIndex = 28;
this.pictureBox9.TabStop = false;
this.pictureBox9.Click += new System.EventHandler(this.ExitButton);
//
// pictureBox8
//
this.pictureBox8.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox8.Image = global::XPS.Properties.Resources.Settings;
this.pictureBox8.Location = new System.Drawing.Point(500, 0);
this.pictureBox8.Name = "pictureBox8";
this.pictureBox8.Size = new System.Drawing.Size(84, 93);
this.pictureBox8.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox8.TabIndex = 12;
this.pictureBox8.TabStop = false;
this.pictureBox8.Click += new System.EventHandler(this.SettingsButton);
//
// pictureBox7
//
this.pictureBox7.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox7.Image = global::XPS.Properties.Resources.Dashboard;
this.pictureBox7.Location = new System.Drawing.Point(4, 520);
this.pictureBox7.Name = "pictureBox7";
this.pictureBox7.Size = new System.Drawing.Size(155, 62);
this.pictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox7.TabIndex = 11;
this.pictureBox7.TabStop = false;
this.pictureBox7.Click += new System.EventHandler(this.DashboardButton);
//
// pictureBox6
//
this.pictureBox6.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox6.Image = global::XPS.Properties.Resources.Website;
this.pictureBox6.Location = new System.Drawing.Point(4, 575);
this.pictureBox6.Name = "pictureBox6";
this.pictureBox6.Size = new System.Drawing.Size(155, 62);
this.pictureBox6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox6.TabIndex = 10;
this.pictureBox6.TabStop = false;
this.pictureBox6.Click += new System.EventHandler(this.WebsiteButton);
//
// pictureBox5
//
this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox5.Image = global::XPS.Properties.Resources.Twitch;
this.pictureBox5.Location = new System.Drawing.Point(517, 571);
this.pictureBox5.Name = "pictureBox5";
this.pictureBox5.Size = new System.Drawing.Size(64, 64);
this.pictureBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox5.TabIndex = 9;
this.pictureBox5.TabStop = false;
this.pictureBox5.Click += new System.EventHandler(this.TwitchButton);
//
// pictureBox4
//
this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox4.Image = global::XPS.Properties.Resources.YouTube;
this.pictureBox4.Location = new System.Drawing.Point(447, 571);
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.Size = new System.Drawing.Size(64, 64);
this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox4.TabIndex = 8;
this.pictureBox4.TabStop = false;
this.pictureBox4.Click += new System.EventHandler(this.YoutubeButton);
//
// pictureBox3
//
this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox3.Image = global::XPS.Properties.Resources.Twitter;
this.pictureBox3.Location = new System.Drawing.Point(376, 571);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(64, 64);
this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox3.TabIndex = 7;
this.pictureBox3.TabStop = false;
this.pictureBox3.Click += new System.EventHandler(this.TwitterButton);
//
// pictureBox2
//
this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox2.Image = global::XPS.Properties.Resources.Discord;
this.pictureBox2.Location = new System.Drawing.Point(306, 571);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(64, 64);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox2.TabIndex = 6;
this.pictureBox2.TabStop = false;
this.pictureBox2.Click += new System.EventHandler(this.DiscordButton);
//
// pictureBox1
//
this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Default;
this.pictureBox1.Image = global::XPS.Properties.Resources.logoPng;
this.pictureBox1.Location = new System.Drawing.Point(172, -60);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(256, 256);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.ClientSize = new System.Drawing.Size(584, 636);
this.Controls.Add(this.pictureBox13);
this.Controls.Add(this.pictureBox12);
this.Controls.Add(this.pictureBox11);
this.Controls.Add(this.pictureBox10);
this.Controls.Add(this.label8);
this.Controls.Add(this.label7);
this.Controls.Add(this.pictureBox9);
this.Controls.Add(this.button8);
this.Controls.Add(this.button7);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.panel4);
this.Controls.Add(this.label4);
this.Controls.Add(this.panel3);
this.Controls.Add(this.label3);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.Controls.Add(this.label2);
this.Controls.Add(this.button6);
this.Controls.Add(this.button5);
this.Controls.Add(this.pictureBox8);
this.Controls.Add(this.pictureBox7);
this.Controls.Add(this.pictureBox6);
this.Controls.Add(this.pictureBox5);
this.Controls.Add(this.pictureBox4);
this.Controls.Add(this.pictureBox3);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.label1);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.pictureBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Form1";
this.Text = "XPS";
((System.ComponentModel.ISupportInitialize)(this.pictureBox13)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private PictureBox pictureBox3;
private PictureBox pictureBox4;
private PictureBox pictureBox5;
private PictureBox pictureBox6;
private PictureBox pictureBox7;
private PictureBox pictureBox8;
private Button button5;
private Button button6;
private Label label2;
private Panel panel1;
private Label label3;
private Label label4;
private Panel panel2;
private Label label5;
private Panel panel3;
private Label label6;
private Panel panel4;
private Button button7;
private Button button8;
private PictureBox pictureBox9;
private Label label7;
private Label label8;
private PictureBox pictureBox10;
private PictureBox pictureBox11;
private PictureBox pictureBox12;
private PictureBox pictureBox13;
}
}
+894
View File
@@ -0,0 +1,894 @@
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Text;
using System.IO;
using System.Net.Http;
using System.Security.Principal;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Compression;
using System.Collections.Generic;
using System.Linq;
namespace XPSLauncher
{
public partial class Form1 : Form
{
private static readonly HttpClient client = new HttpClient();
private static readonly string currentVersion = "2.3.9";
private PrivateFontCollection privateFonts = new PrivateFontCollection();
private Dictionary<string, bool> downloadingVersions = new Dictionary<string, bool>()
{
{ "2.2", false },
{ "2.1", false },
{ "2.0", false },
{ "1.9", false }
};
private Dictionary<string, bool> errorVersions = new Dictionary<string, bool>()
{
{ "2.2", false },
{ "2.1", false },
{ "2.0", false },
{ "1.9", false }
};
private Dictionary<string, bool> launcheQueue = new Dictionary<string, bool>()
{
{ "2.2", false },
{ "2.1", false },
{ "2.0", false },
{ "1.9", false }
};
private static bool settingsOpen = false;
private static bool settingCloseOnLoad = false;
private static bool settingAllowMultipleInstances = false;
public Form1()
{
try
{
if (!IsRunningAsAdministrator())
{
MessageBox.Show($"XPS requires administrator due to how the installer works. Please re-run XPS with administrator to continue", $"Administrator Required", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(0);
}
InitializeComponent();
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
pictureBox1.SendToBack();
ConvertOnLoad();
LoadFontFromFile();
CheckVersion();
CheckDownloaded();
}
catch (Exception ex)
{
MessageBox.Show($"Error loading XPS. Error message: {ex.Message}", $"Error loading XPS", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(0);
}
}
private void LoadFontFromFile()
{
string fontPath = "Pusab.ttf";
privateFonts.AddFontFile(fontPath);
button1.Font = new Font(privateFonts.Families[0], 17.5F);
button2.Font = new Font(privateFonts.Families[0], 17.5F);
button3.Font = new Font(privateFonts.Families[0], 17.5F);
button4.Font = new Font(privateFonts.Families[0], 17.5F);
button5.Font = new Font(privateFonts.Families[0], 14.5F);
button6.Font = new Font(privateFonts.Families[0], 12.5F);
button7.Font = new Font(privateFonts.Families[0], 13.5F);
button8.Font = new Font(privateFonts.Families[0], 10.5F);
label1.Font = new Font(privateFonts.Families[0], 15.75F);
label7.Font = new Font(privateFonts.Families[0], 15.75F);
label8.Font = new Font(privateFonts.Families[0], 15.75F);
label2.Font = new Font(privateFonts.Families[0], 20.0F);
label3.Font = new Font(privateFonts.Families[0], 13.5F);
label4.Font = new Font(privateFonts.Families[0], 13.5F);
label5.Font = new Font(privateFonts.Families[0], 13.5F);
label6.Font = new Font(privateFonts.Families[0], 13.5F);
button7.Font = new Font(privateFonts.Families[0], 13.5F);
}
private void load22(object sender, EventArgs e)
{
launchGDPS("2.2");
}
private void load21(object sender, EventArgs e)
{
launchGDPS("2.1");
}
private void load20(object sender, EventArgs e)
{
launchGDPS("2.0");
}
private void load19(object sender, EventArgs e)
{
launchGDPS("1.9");
}
private void OpenUrl(string url)
{
try
{
Process.Start(new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
});
}
catch (Exception ex)
{
MessageBox.Show($"Failed to open URL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void launchGDPS(string version, bool forceOpen = false)
{
if (!button1.Visible || !button2.Visible || !button3.Visible || !button4.Visible)
{
return;
}
string executionPath = GetExecutionPath();
string path = "";
if (ModifierKeys == Keys.Shift)
{
ResetGDPS(version);
return;
}
if (launcheQueue[version])
{
return;
}
if (downloadingVersions[version])
{
DialogResult dialogResult = MessageBox.Show($"Version {version} is currently being downloaded. Would you like to add it to the launch queue?", $"Downloading {version}", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dialogResult == DialogResult.Yes && downloadingVersions[version])
{
launcheQueue[version] = true;
return;
}
return;
}
if (errorVersions[version])
{
MessageBox.Show($"Version {version} had an issue while downloading and cannot be launched. Please create a support ticket in our Discord server for assistance.", $"Error downloading {version}", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
switch (version)
{
case "2.2":
path = Path.Combine(executionPath, "gdps", "2.2", "XPS.exe");
break;
case "2.1":
path = Path.Combine(executionPath, "gdps", "2.1", "XPS.exe");
break;
case "2.0":
path = Path.Combine(executionPath, "gdps", "2.0", "XPS.exe");
break;
case "1.9":
path = Path.Combine(executionPath, "gdps", "1.9", "XPS.exe");
break;
default:
return;
}
if (File.Exists(path) && !downloadingVersions[version] && !errorVersions[version])
{
if ((settingAllowMultipleInstances && !IsProcessOpen(path)) || forceOpen)
{
StartProcess(path);
if(version == "1.9") {
StartProcess(Path.Combine(executionPath, "gdps", "1.9", "XPS-Proxy.exe"));
}
if (settingCloseOnLoad && !downloadingVersions["2.2"] && !downloadingVersions["2.1"] && !downloadingVersions["2.0"] && !downloadingVersions["1.9"])
{
Environment.Exit(0);
}
}
else
{
DialogResult result = MessageBox.Show($"XPS is already running. Would you like to force open XPS?\n\nContinuing can result in save data loss.", "XPS already open", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
if (result == DialogResult.Yes)
{
launchGDPS(version, true);
}
return;
}
}
else
{
MessageBox.Show($"Error loading version {version}. Create a support ticket in the Discord and we will try to help you.", $"Error loading {version}", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ResetGDPS(string version)
{
if (downloadingVersions[version])
{
return;
}
DialogResult dialogResult = MessageBox.Show($"Are you sure you would like to reset {version}? This will delete all game files and replace them with fresh ones. This will not effect save files.", $"Reset keybind pressed", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes)
{
downloadingVersions[version] = true;
string executionPath = GetExecutionPath();
string path = Path.Combine(executionPath, "gdps", version);
if (Directory.Exists(path))
{
Directory.Delete(path, true);
}
DownloadAndExtractFiles(version);
}
}
private void DiscordButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/discord");
}
private void TwitterButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/twitter");
}
private void YoutubeButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/youtube");
}
private void TwitchButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/twitch");
}
private void WebsiteButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com");
}
private void DashboardButton(object sender, EventArgs e)
{
OpenUrl("https://dashboard.xps.xytriza.com");
}
private void SettingsButton(object sender, EventArgs e)
{
ToggleSettings();
}
private void ExitButton(object sender, EventArgs e)
{
Environment.Exit(0);
}
private void RestartButton(object sender, EventArgs e)
{
Application.Restart();
Environment.Exit(0);
}
private void ResetConfigButton(object sender, EventArgs e)
{
ResetConfig();
}
private void DarkThemeButton(object sender, EventArgs e)
{
WriteConfig("theme", 0);
LoadTheme();
}
private void AmoledThemeButton(object sender, EventArgs e)
{
WriteConfig("theme", 1);
LoadTheme();
}
private void PurpleThemeButton(object sender, EventArgs e)
{
WriteConfig("theme", 2);
LoadTheme();
}
private void RedThemeButton(object sender, EventArgs e)
{
WriteConfig("theme", 3);
LoadTheme();
}
private void OpenAppDataButton(object sender, EventArgs e)
{
string localAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string xpsPath = Path.Combine(localAppDataPath, "XPS");
if (!Directory.Exists(xpsPath))
{
Directory.CreateDirectory(xpsPath);
}
try
{
Process.Start("explorer.exe", xpsPath);
}
catch (Exception ex)
{
MessageBox.Show($"Error opening the XPS folder. Create a support ticket in the Discord and we will try to help you.\n\nError message: {ex.Message}", $"Error opening XPS folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void OpenAppFolderButton(object sender, EventArgs e)
{
string executionPath = GetExecutionPath();
try
{
Process.Start("explorer.exe", executionPath);
}
catch (Exception ex)
{
MessageBox.Show($"Error opening the XPS folder. Create a support ticket in the Discord and we will try to help you.\n\nError message: {ex.Message}", $"Error opening XPS folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private async void CheckVersion()
{
var versionCheckResult = await CheckVersionAsync();
button1.UseWaitCursor = false;
button2.UseWaitCursor = false;
button3.UseWaitCursor = false;
button4.UseWaitCursor = false;
if (versionCheckResult.HasError)
{
MessageBox.Show("Error checking version. Check your internet connection or try again later", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (versionCheckResult.IsNewVersionAvailable)
{
MessageBox.Show("New version released! Click \"OK\" to download the update", "Update Required", MessageBoxButtons.OK, MessageBoxIcon.Information);
OpenUrl("https://xps.xytriza.com/download/windows");
}
else
{
button1.Cursor = Cursors.Hand;
button2.Cursor = Cursors.Hand;
button3.Cursor = Cursors.Hand;
button4.Cursor = Cursors.Hand;
button1.Click += new EventHandler(load22);
button2.Click += new EventHandler(load21);
button3.Click += new EventHandler(load20);
button4.Click += new EventHandler(this.load19);
KeyPreview = true;
KeyPress += MainForm_KeyPress;
}
}
private void CheckDownloaded()
{
string executionPath = GetExecutionPath();
string[] versions = { "2.2", "2.1", "2.0", "1.9" };
foreach (string version in versions)
{
string folder = Path.Combine(executionPath, "gdps", version);
string path = Path.Combine(executionPath, "gdps", version, "XPS.exe");
if (!Directory.Exists(folder) || !File.Exists(path))
{
downloadingVersions[version] = true;
Directory.CreateDirectory(folder);
DownloadAndExtractFiles(version);
}
}
}
private async void DownloadAndExtractFiles(string version)
{
string executionPath = GetExecutionPath();
string zipPath = Path.Combine(executionPath, $"pkg-{version}.zip");
string extractPath = Path.Combine(executionPath, "gdps", version);
string downloadUrl = $"https://xps.xytriza.com/assets/package-win-{version}.zip";
try
{
using (var client = new HttpClient())
{
var response = await client.GetAsync(downloadUrl, HttpCompletionOption.ResponseHeadersRead);
if (response.IsSuccessStatusCode)
{
using (var fileStream = File.Create(zipPath))
{
await response.Content.CopyToAsync(fileStream);
}
if (Directory.Exists(extractPath))
{
DirectoryInfo di = new DirectoryInfo(extractPath);
foreach (FileInfo file in di.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
dir.Delete(true);
}
}
ZipFile.ExtractToDirectory(zipPath, extractPath);
if (File.Exists(zipPath))
{
File.Delete(zipPath);
}
downloadingVersions[version] = false;
errorVersions[version] = false;
if (launcheQueue[version])
{
launcheQueue[version] = false;
launchGDPS(version);
}
}
else
{
errorVersions[version] = true;
downloadingVersions[version] = false;
if (Directory.Exists(extractPath))
{
Directory.Delete(extractPath);
}
if (File.Exists(zipPath))
{
File.Delete(zipPath);
}
MessageBox.Show($"Error downloading files for version {version}. Create a support ticket in the Discord and we will try to help you.", $"Error downloading {version}", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
catch (Exception ex)
{
errorVersions[version] = true;
downloadingVersions[version] = false;
if (Directory.Exists(extractPath))
{
Directory.Delete(extractPath);
}
if (File.Exists(zipPath))
{
File.Delete(zipPath);
}
MessageBox.Show($"Error downloading files for version {version}. Create a support ticket in the Discord and we will try to help you.\n\nError message: {ex.Message}", $"Error downloading {version}", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
public static async Task<VersionCheckResult> CheckVersionAsync()
{
try
{
HttpResponseMessage response = await client.GetAsync("https://xps.xytriza.com/getLatestWindowsVersion.php");
if (response.IsSuccessStatusCode)
{
string latestVersion = await response.Content.ReadAsStringAsync();
return new VersionCheckResult
{
IsNewVersionAvailable = IsNewerVersion(currentVersion, latestVersion.Trim()),
HasError = false
};
}
else
{
return new VersionCheckResult { HasError = true };
}
}
catch
{
return new VersionCheckResult { HasError = true };
}
}
private static bool IsNewerVersion(string currentVersion, string latestVersion)
{
Version currentVer, latestVer;
if (Version.TryParse(currentVersion, out currentVer) && Version.TryParse(latestVersion, out latestVer))
{
return latestVer > currentVer;
}
return false;
}
static string GetExecutionPath() => AppDomain.CurrentDomain.BaseDirectory;
static void StartProcess(string path)
{
try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = path,
WorkingDirectory = Path.GetDirectoryName(path),
UseShellExecute = false
};
Process.Start(startInfo);
}
catch (Exception ex)
{
MessageBox.Show($"Error launching that GDPS version. Create a support ticket in the Discord and we will try to help you.\n\nError message: {ex.Message}", $"Error laucnhing GDPS", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private static bool IsRunningAsAdministrator()
{
using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
}
private void MainForm_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
//will fix this later
case '1':
button1.Focus();
button1.PerformClick();
break;
case '!':
button1.Focus();
ResetGDPS("2.2");
break;
case '2':
button2.Focus();
button2.PerformClick();
break;
case '@':
button2.Focus();
ResetGDPS("2.1");
break;
case '3':
button3.Focus();
button3.PerformClick();
break;
case '#':
button3.Focus();
ResetGDPS("2.0");
break;
case '4':
button4.Focus();
button4.PerformClick();
break;
case '$':
button4.Focus();
ResetGDPS("1.9");
break;
default:
break;
}
}
private void ToggleSettings()
{
if (settingsOpen)
{
//enable stuff
button1.Visible = true;
button2.Visible = true;
button3.Visible = true;
button4.Visible = true;
label1.Visible = true;
pictureBox7.Visible = true;
pictureBox6.Visible = true;
pictureBox5.Visible = true;
pictureBox4.Visible = true;
pictureBox3.Visible = true;
pictureBox2.Visible = true;
//disable stuff
button5.Visible = false;
button6.Visible = false;
button7.Visible = false;
button8.Visible = false;
label2.Visible = false;
panel1.Visible = false;
label3.Visible = false;
panel2.Visible = false;
label4.Visible = false;
panel3.Visible = false;
label5.Visible = false;
panel4.Visible = false;
label6.Visible = false;
label7.Visible = false;
label8.Visible = false;
pictureBox10.Visible = false;
pictureBox11.Visible = false;
pictureBox12.Visible = false;
pictureBox13.Visible = false;
button1.Focus();
settingsOpen = false;
}
else
{
//disable stuff
button1.Visible = false;
button2.Visible = false;
button3.Visible = false;
button4.Visible = false;
label1.Visible = false;
pictureBox7.Visible = false;
pictureBox6.Visible = false;
pictureBox5.Visible = false;
pictureBox4.Visible = false;
pictureBox3.Visible = false;
pictureBox2.Visible = false;
//enable stuff
button5.Visible = true;
button6.Visible = true;
button7.Visible = true;
button8.Visible = true;
label2.Visible = true;
panel1.Visible = true;
label3.Visible = true;
panel2.Visible = true;
label4.Visible = true;
panel3.Visible = true;
label5.Visible = true;
panel4.Visible = true;
label6.Visible = true;
label7.Visible = true;
label8.Visible = true;
if (!settingCloseOnLoad)
{
pictureBox11.Visible = true;
}
else
{
pictureBox13.Visible = true;
}
if (!settingAllowMultipleInstances)
{
pictureBox10.Visible = true;
}
else
{
pictureBox12.Visible = true;
}
button5.Focus();
settingsOpen = true;
}
}
private void ResetConfig()
{
string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string xpsPath = Path.Combine(userPath, "Xytriza", "XPS");
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "xytriza", "xpslauncher.json");
if (!Directory.Exists(xpsPath))
{
Directory.CreateDirectory(xpsPath);
}
if (File.Exists(configPath))
{
File.Delete(configPath);
}
if (settingsOpen && settingCloseOnLoad)
{
pictureBox13.Visible = false;
pictureBox11.Visible = true;
}
if (settingsOpen && settingAllowMultipleInstances)
{
pictureBox12.Visible = false;
pictureBox10.Visible = true;
}
settingAllowMultipleInstances = false;
settingAllowMultipleInstances = false;
SetThemeColor(Color.FromArgb(50, 50, 50));
dynamic json = new
{
lastVersion = currentVersion,
closeOnLoad = false,
allowMultipleInstances = false,
theme = 0
};
string jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(configPath, jsonText);
}
private void WriteConfig<T>(string key, T value)
{
dynamic json = ReadConfig();
json[key] = value;
string jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "xytriza", "xpslauncher.json");
File.WriteAllText(configPath, jsonText);
}
private void RemoveConfigValue(string key)
{
dynamic json = ReadConfig();
json.Remove(key);
string jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "xytriza", "xpslauncher.json");
File.WriteAllText(configPath, jsonText);
}
private dynamic ReadConfig()
{
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "xytriza", "xpslauncher.json");
string oldConfigFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "XPS");
string oldConfigPath = Path.Combine(oldConfigFolder, "launcher.json");
if (!File.Exists(configPath))
{
ResetConfig();
}
if (Directory.Exists(oldConfigFolder) && File.Exists(oldConfigPath))
{
string oldConfigText = File.ReadAllText(oldConfigPath);
File.WriteAllText(configPath, oldConfigText);
File.Delete(oldConfigPath);
}
string jsonText = File.ReadAllText(configPath);
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonText);
return json ?? new { };
}
public static bool IsProcessOpen(string filePath)
{
var processes = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(filePath));
return processes.Any(p => p.MainModule.FileName.Equals(filePath, StringComparison.OrdinalIgnoreCase));
}
private void ConvertOnLoad()
{
try
{
dynamic config = ReadConfig();
if (config.lastVersion == "2.2.0")
{
RemoveConfigValue("closeOnExit");
WriteConfig("closeOnLoad", config.closeOnExit ?? false);
WriteConfig("allowMultipleInstances", false);
WriteConfig("theme", 0);
config.allowMultipleInstances = false;
config.closeOnLoad = config.closeOnExit ?? false;
}
settingCloseOnLoad = config.closeOnLoad;
settingAllowMultipleInstances = config.allowMultipleInstances;
if (settingsOpen && settingCloseOnLoad)
{
pictureBox13.Visible = false;
pictureBox11.Visible = true;
}
if (settingsOpen && settingAllowMultipleInstances)
{
pictureBox12.Visible = false;
pictureBox10.Visible = true;
}
LoadTheme();
WriteConfig("lastVersion", currentVersion);
}
catch
{
ResetConfig();
}
}
private void LoadTheme()
{
dynamic config = ReadConfig();
int theme = config.theme;
try
{
switch (theme)
{
case 1:
SetThemeColor(Color.FromArgb(0, 0, 0));
break;
case 2:
SetThemeColor(Color.FromArgb(25, 0, 50));
break;
case 3:
SetThemeColor(Color.FromArgb(35, 0, 0));
break;
default:
SetThemeColor(Color.FromArgb(50, 50, 50));
break;
}
}
catch (Exception ex)
{
MessageBox.Show($"Error loading theme. Error message: {ex.Message}", $"Error loading theme", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void SetThemeColor(Color color)
{
this.BackColor = color;
pictureBox8.BackColor = color;
pictureBox7.BackColor = color;
pictureBox6.BackColor = color;
pictureBox5.BackColor = color;
pictureBox4.BackColor = color;
pictureBox3.BackColor = color;
pictureBox2.BackColor = color;
pictureBox1.BackColor = color;
}
private void ToggleCloseOnLoad(object sender = null, EventArgs e = null)
{
if (settingCloseOnLoad)
{
settingCloseOnLoad = false;
pictureBox13.Visible = false;
pictureBox11.Visible = true;
}
else
{
settingCloseOnLoad = true;
pictureBox13.Visible = true;
pictureBox11.Visible = false;
}
WriteConfig("closeOnLoad", settingCloseOnLoad);
}
private void ToggleMultiInstance(object sender = null, EventArgs e = null)
{
if (settingAllowMultipleInstances)
{
settingAllowMultipleInstances = false;
pictureBox12.Visible = false;
pictureBox10.Visible = true;
}
else
{
settingAllowMultipleInstances = true;
pictureBox12.Visible = true;
pictureBox10.Visible = false;
}
WriteConfig("allowMultipleInstances", settingAllowMultipleInstances);
}
public List<int> GetPIDsByApplicationPath(string applicationPath)
{
var pids = new List<int>();
var query = $"Get-WmiObject Win32_Process | Where-Object {{$_.ExecutablePath -eq '{applicationPath}'}} | Select-Object ProcessId";
var startInfo = new ProcessStartInfo("powershell", $"-Command \"{query}\"")
{
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (var process = Process.Start(startInfo))
{
if (process != null)
{
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
var lines = output.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
if (int.TryParse(line, out var pid))
{
pids.Add(pid);
}
}
}
}
return pids;
}
}
}
public class VersionCheckResult
{
public bool IsNewVersionAvailable { get; set; }
public bool HasError { get; set; }
}
+511
View File
@@ -0,0 +1,511 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="button1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="panel2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="panel3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="panel4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="button8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox13.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox12.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox11.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox10.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox9.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox8.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox7.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox6.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox5.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox4.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox3.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIABgQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP7+/gDt7e0A7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAO3t7QD+/v4A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDt7e0AJSUlAA8PDwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTAA8PDwAlJSUA7e3tAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsAA8P
DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADw8PAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs
7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs
7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMT
EwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAABQAA
AAgAAAALAAAACgAAAAIAAAAAAAAAAAAAAAAAAAALAAAAEAAAAA8AAAAPAAAADQAAAAgAAAAAAAAAAAAA
AAQAAAAKAAAACwAAAA0AAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAACAAAABEAAAAWAAAAFQAAABIAAAAOAAAABwAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMT
EwAAAAAHAAAASgAAAGgAAABzAAAAawAAAEoAAAApAAAAAAAAAB0AAABxAAAAiwAAAI0AAACKAAAAfwAA
AGMAAAA8AAAAIAAAAEYAAABwAAAAewAAAH0AAABtAAAATwAAADAAAAATAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAUAAAAyAAAAZwAAAI0AAAChAAAAogAAAJYAAACAAAAAXQAAADoAAAAjAAAACwAA
AAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AOzs7AASEREFAAcIrB1NU/wlY2z/Km55/yRdZf8FDxDaAAAAVAAAAE0IGBrcLXR//zaN
m/81jJn/MoaR/y53gf8bR037AAEBtAADA7sbR036Km55/y12gP8ud4L/JF9o/w0jJuoAAACUAAAAOQAA
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAACpDykt7CZkbf82jZr/PZ+v/z2gr/83kqD/LHN9/xc+
Q/cBBQXKAAAAcwAAADYAAAAQAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wDs7OwAEA0MFwsnK/Bc6///XfL//13x//9g9///PJqo/wAA
AMMHFRbhS8LU/1/1//9d8f//XfD//13x//9e9P//WOL4/wUWGP8ud4L/XvP//13x//9d8f//XfH//13x
//9W3fP/FTtB/QAAAGYAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAFgPKS3wP6Ox/1jj+v9d8f//XfH//1zv
//9c7///XfD//13x//9b6///R7nK/xIxNvgAAACFAAAAMAAAAAUTExMA7OzsAP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMSEgAAAACNN5Gg/1vv
//9W5P//VuX//1np//8ZSlL/NpCf/1vw//9W4///VuT//1bk//9W5P//Wu3//z6ktP8ABAX/Sb7T/1nr
//9W5P//V+T//1fk//9W5P//XPL//zGCjv8AAACJAAAADQAAAAAAAAAAAAAAAAAAABELIyfnUdXr/1rv
//9X5v//V+b//1bk//9W5P//VuP//1bj//9W5P//VuT//1ru//9Q0+r/CiAj7gAAAFgAAAATExMTAOzs
7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs
7AATExMAAAAAEgcZHN5Kzef/UuT//1Df//9R4v//TdXy/0/d/P9Q4P//UN///1Df//9Q3///UeL//1Db
+P8NKi/vAwgI40jK5P9S4///UN///1Df//9Q3///UN///1Tq//8vgI7/AAAAiAAAABQAAAAGAAAABAAA
AAAAAAAWETU87lTn//9S5v//UeL//0vT8P9Q3/7/UN///1Df//9Q3///UN///1Df//9Q3///Vez//yx8
i/8AAACRAAAAGhMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDs7OwAExMTAAAAAAAAAABTG1Rg/07j//9K2///Str//0vd//9L3P//Stv//0rb
//9K2///Stv//0/m//8odof/AAAAiQcXGsVFzez/TN7//0vb//9L2///S9v//0vb//9O5v//LYCR/wAA
AKoAAABeAAAATAAAADUAAAAiAAAADAADBKgzmK3/Qb3Y/xZCS/8NLDP/SdT1/0vd//9K2///Stv//0rb
//9L2///Stv//03j//85pLv/AAAAsAAAABoTExMA7OzsAP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAKIvkqv/SOD//0TW
//9E1v//RNb//0TW//9E1v//RNb//0fd//86s9P/AQoM0QAAABoIHSLMQszx/0XZ//9E1v//Rdb//0XW
//9F1v//Rtn//z/E6P8gbH//FklW+w0sM+wCCQrMAAAAigAAAEAAAAA2AQUFqQAAAPkFFhr/LpOt/0ba
//9F1///Rdb//0XW//9F1v//Rdb//0XW//9H3v//NqTA/wAAAK8AAAARExMTAOzs7AD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAA
AAAAAAATBBUZ2jm63/9A1v//PtL//z7S//8+0v//PtL//z/U//8/0Pv/DjZA+AAAAEoAAAAACB8l0T3J
8/8/1P//PtL//z7S//8+0v//P9L//z7S//8/1f//Qtz//0Ha//8+0v3/NbXa/xpbbf8AAAC8AAAAOwAA
AIYVTl37PMny/0Lb//8+0v//PtL//z/S//8+0v//PtL//z7S//8+0v//Q9///yJyif8AAAB+AAAAABMT
EwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDs7OwAExMTAAAAAAAAAAAAAAAADwIRFdcytN3/OdH//zjN//84zf//OM3//zjN//871v//H3OM/wAA
AKoAAAAeAAAACAcfJtI3xvT/Oc///zjO//84zv//OM3//zjN//84zf7/OM///zrV//861v//OdH//zrT
//892v//GV1y/wAAALoRRFP9O9P//zrS//84zf7/OM7//zjO//85zv//Oc7//zjO/v85zv//O9j//zGv
1v8DEhfdAAAAHgAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAJcfgKD/NdL//zHJ/v8yyf//Msn//zLJ
//8yyf//NM///yWVu/8ABAbOAAAASQAAAB4GHSXPMMHz/zLL//8yyf//Msn+/zLJ//8yyf//Msr//zHF
+f8jjrD/IYio/y++8P8yyv//NM///yqn0v8ABwr/KaPL/zTR//8yyf7/Msn//zLJ//8yyf//Msn+/zLJ
/v8zy///NND//yWVuv8EFBjwAAAAaAAAAR4AAAAEExMTAOzs7AD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAEYMP1H8Lcn//yvF
//8rxP//K8T//yvE//8rxP//K8T//yvE//8uzv//F2yL/wAAAKkAAAA4BBoi0ym68f8rxv//K8T//yvE
//8rxP//K8T//y3N//8dfqD/AAAAwAAAAK0RVmz/L83//yzI//8msOL/ByIr/yi16f8tx///LMX//yzF
//8sxf//LMX//yzF//8sx///K770/xBKXv8AAAD/BRoi9wEJC8UAAABWAAAAGhMTEwDs7OwA////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAA
AAoADRLTIKfb/yXF//8kv///JMD//yTA//8kv///JML//yTC//8kv/7/JMH//yXC//8IOEn7AAAAdgMU
GtIhs+v/JML//yTA//8kv///JMD//yTA//8lxf//HJTD/wQjLugEHCXgFXec/ybG//8lxP//H6ba/wIW
Hf8hrOL/JcT//yXA//8lwP//JMD//yXA//8lwP//JsX//x+j1/8EKDX/FXWZ/ybD//8WdZn/AAAAqgAA
ACkTExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A7OzsABMTEwAAAACAD2qP/x7E//8cu///HLv//xy7//8cu///Hb7//xip5f8Zq+f/Hb7//xy6
//8dwf//GaHZ/wAJDdoCCQzWGKnk/x2+//8cu///HLv//xy7//8cu///HLr//x2+//8cuvz/G7j5/x2+
//8buv//Hsb//xN3oP8AAAD1Foe0/x/F//8du///Hbz//x28//8dvP//Hbz//x28//8dvP//Hr7//x/D
//8ewf//HLLv/wEQFtsAAAAoExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOzs7AASDgwZACEw6xa3/f8Tuf//FLf//xS3//8Ut///E7r//xW7
//8DNEj/BkRe/xW+//8UuP//FLf//xXB//8KZo3/AAAA/BGW0P8UwP//FLj//xO3//8Ut///E7f//xO3
//8Ut///FLj//xS5//8Uu///FMH//xKd2P8BFyDkAAAAVgMpOPMWsfT/Fr///xa4//8Vt///Fbf//xW3
//8Wt///Frf//xW5//8WvP//F8H//w59q/8AAwSzAAAABRMTEwDs7OwA////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAEw4LIgAmN/kLp+z/CbL9/wm1
//8Jtf//CbT//wqs8/8FU3b/AAAAigAAAKkIfK//Crf//wm0//8Jtf//CZra/wAGCf4DOE//CZjX/wmr
9P8Jsvz/CbT//wm0//8JtP//CbT//wmy/f8JrPT/CJfX/wZhif8AEBfXAAAAOwAAAAAAAABeAik59QqJ
wP8Msfr/DLr//wy7//8Muv//DLv//wy6//8MtP//C5fU/wVObf8AAgS2AAAAGwAAAAATExMA7OzsAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMT
EwAAAABjABIazAAlNOYBMEbvADFH7wEqPewAFh/UAAAAegAAAAAAAAAYAAYJtQEoOekALEDsACU15gAW
H9QAAABbAAAATgAFB60AGSTTACU15gAtQe0AL0XuAC9F7gAtQu4AJjbpABom1gAGCLAAAABnAAAAEAAA
AAAAAAAAAAAAAAAAADIAAACiASEv5AJCXf0CV3z/AmGN/wJdh/8CSWf/ASg66gAFCLMAAABUAAAAAQAA
AAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AOzs7AATExMAAAAAAAAAAAMAAAAUAAAAHAAAABwAAAAYAAAABwAAAAAAAAAAAAAAAAAA
AAAAAAAWAAAAGQAAABQAAAAHAAAAAAAAAAAAAAAAAAAABgAAABMAAAAZAAAAGgAAABoAAAAaAAAAFgAA
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAyAAAASgAAAFcAAABRAAAAOQAA
ABgAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs
7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs
7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMT
EwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsAA8P
DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADw8PAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AO3t7QAlJSUADw8PABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMADw8PACUlJQDt7e0A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD+/v4A7e3tAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADt7e0A/v7+AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</value>
</data>
</root>
+12 -183
View File
@@ -1,190 +1,19 @@
using Newtonsoft.Json; using System;
using System.Diagnostics; using System.Windows.Forms;
class Program namespace XPSLauncher
{ {
private static readonly HttpClient client = new HttpClient(); internal static class Program
private static readonly string currentVersion = "1.0.300";
static async Task Main(string[] args)
{ {
Console.WriteLine("Loading..."); /// <summary>
/// The main entry point for the application.
var versions = LoadVersionConfig(); /// </summary>
[STAThread]
var versionCheckResult = await CheckVersionAsync(); static void Main()
if (versionCheckResult.HasError || versionCheckResult.IsNewVersionAvailable)
{ {
Console.Clear(); Application.EnableVisualStyles();
if (versionCheckResult.HasError) Application.SetCompatibleTextRenderingDefault(false);
{ Application.Run(new Form1());
Console.WriteLine("Error checking version. Check your internet connection or try again later");
}
else
{
Console.WriteLine("New version available! Download it here: https://xps.xytriza.com/download/windows");
}
Console.ReadLine();
return;
} }
Console.Clear();
Console.WriteLine("Welcome to Xytriza's GDPS!\n");
if (versions.Versions.Count == 0)
{
Console.WriteLine("No versions to load.");
Console.ReadLine();
return;
}
for (int i = 0; i < versions.Versions.Count; i++)
{
Console.WriteLine($"{i + 1}: Load {versions.Versions[i].name}");
}
Console.WriteLine();
if (int.TryParse(Console.ReadLine(), out int choice) && choice >= 1 && choice <= versions.Versions.Count)
{
var selectedVersion = versions.Versions[choice - 1];
string executionPath = GetExecutionPath();
string path = Path.Combine(executionPath, selectedVersion.path);
if (FileExists(path) && path.StartsWith(Path.Combine(executionPath, "gdps"), StringComparison.OrdinalIgnoreCase))
{
StartProcess(path);
}
else
{
Console.WriteLine("File does not exist.");
Console.ReadLine();
}
}
else
{
Console.WriteLine("Invalid choice.");
Console.ReadLine();
}
}
public static async Task<VersionCheckResult> CheckVersionAsync()
{
try
{
HttpResponseMessage response = await client.GetAsync("https://xps.xytriza.com/getLatestWindowsVersion.php");
if (response.IsSuccessStatusCode)
{
string latestVersion = await response.Content.ReadAsStringAsync();
return new VersionCheckResult
{
IsNewVersionAvailable = IsNewerVersion(currentVersion, latestVersion.Trim()),
HasError = false
};
}
else
{
return new VersionCheckResult { HasError = true };
}
}
catch
{
return new VersionCheckResult { HasError = true };
}
}
private static bool IsNewerVersion(string currentVersion, string latestVersion)
{
Version currentVer, latestVer;
if (Version.TryParse(currentVersion, out currentVer) && Version.TryParse(latestVersion, out latestVer))
{
return latestVer > currentVer;
}
return false;
}
static bool FileExists(string path) => File.Exists(path);
static string GetExecutionPath() => AppDomain.CurrentDomain.BaseDirectory;
static void StartProcess(string path)
{
try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = path,
WorkingDirectory = Path.GetDirectoryName(path),
UseShellExecute = false
};
Console.Clear();
Process.Start(startInfo);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
Console.ReadLine();
}
}
static VersionConfig LoadVersionConfig()
{
string filePath = Path.Combine(GetExecutionPath(), "versions.json");
if (!File.Exists(filePath) || !TryReadConfig(filePath, out VersionConfig? config))
{
config = ResetConfig(filePath);
}
config.Versions = config.Versions.Where(v => FileExists(Path.Combine(GetExecutionPath(), v.path))).ToList();
return config!;
}
static bool TryReadConfig(string filePath, out VersionConfig? config)
{
try
{
string json = File.ReadAllText(filePath);
config = JsonConvert.DeserializeObject<VersionConfig>(json);
return config != null;
}
catch
{
config = null;
return false;
}
}
static VersionConfig ResetConfig(string filePath)
{
var config = new VersionConfig
{
Versions = new List<VersionInfo>
{
new VersionInfo { name = "GD 2.2", path = @"gdps/2.2/XPS.exe" },
new VersionInfo { name = "GD 2.1", path = @"gdps/2.1/XPS.exe" },
new VersionInfo { name = "GD 2.0", path = @"gdps/2.0/XPS.exe" },
new VersionInfo { name = "GD 1.9", path = @"gdps/1.9/XPS.exe" }
}
};
File.WriteAllText(filePath, JsonConvert.SerializeObject(config, Formatting.Indented));
return config;
} }
} }
public class VersionConfig
{
public List<VersionInfo> Versions { get; set; } = new List<VersionInfo>();
}
public class VersionInfo
{
public string? name { get; set; }
public string? path { get; set; }
}
public class VersionCheckResult
{
public bool IsNewVersionAvailable { get; set; }
public bool HasError { get; set; }
}
+36
View File
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("XPS")]
[assembly: AssemblyDescription("Xytriza's Geometry Dash Private Server")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("XPS")]
[assembly: AssemblyCopyright("Copyright © Xytriza 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("1dfb73e7-c99e-43e8-a0ab-f271d8f36c80")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.3.8")]
[assembly: AssemblyFileVersion("2.3.8")]
+183
View File
@@ -0,0 +1,183 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace XPS.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XPS.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Checked {
get {
object obj = ResourceManager.GetObject("Checked", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Dashboard {
get {
object obj = ResourceManager.GetObject("Dashboard", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Discord {
get {
object obj = ResourceManager.GetObject("Discord", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Exit {
get {
object obj = ResourceManager.GetObject("Exit", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap logoIco {
get {
object obj = ResourceManager.GetObject("logoIco", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap logoPng {
get {
object obj = ResourceManager.GetObject("logoPng", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Settings {
get {
object obj = ResourceManager.GetObject("Settings", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Twitch {
get {
object obj = ResourceManager.GetObject("Twitch", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Twitter {
get {
object obj = ResourceManager.GetObject("Twitter", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Unchecked {
get {
object obj = ResourceManager.GetObject("Unchecked", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Website {
get {
object obj = ResourceManager.GetObject("Website", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap YouTube {
get {
object obj = ResourceManager.GetObject("YouTube", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
+157
View File
@@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Exit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Exit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="YouTube" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\YouTube.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Twitch" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Twitch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="logoIco" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\XPS.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="logoPng" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\XPS.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Twitter" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Twitter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Dashboard" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Dashboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Unchecked" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Unchecked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Discord" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Discord.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Website" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Website.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Settings" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Checked" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Checked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
+26
View File
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace XPS.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
+7
View File
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

+108 -15
View File
@@ -1,23 +1,116 @@
<Project Sdk="Microsoft.NET.Sdk"> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<TargetFramework>net8.0-windows10.0.17763.0</TargetFramework> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ImplicitUsings>enable</ImplicitUsings> <ProjectGuid>{1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}</ProjectGuid>
<Nullable>enable</Nullable> <OutputType>WinExe</OutputType>
<ApplicationIcon>XPS.ico</ApplicationIcon> <RootNamespace>XPS</RootNamespace>
<DebugType>none</DebugType> <AssemblyName>XPS</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>none</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>XPS.ico</ApplicationIcon>
</PropertyGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="del $(TargetDir)Newtonsoft.Json.xml" />
<Exec Command="del $(TargetDir)$(TargetName).exe.config" />
</Target>
<ItemGroup> <ItemGroup>
<Content Include="XPS.ico" /> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<Content Include="versions.json"> <HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
<CopyToOutputDirectory>Always</CopyToOutputDirectory> </Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Content Include="Pusab.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<None Include="XPSLauncher_TemporaryKey.pfx" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\XPS.png" />
<None Include="discord.png" />
<None Include="Resources\Discord.png" />
<None Include="Resources\Twitter.png" />
<None Include="Resources\YouTube.png" />
<None Include="Resources\Twitch.png" />
<None Include="Resources\Tools.png" />
<None Include="Resources\Website.png" />
<None Include="Resources\Settings.png" />
<None Include="Resources\Exit.png" />
<None Include="Resources\Unchecked.png" />
<None Include="Resources\Checked.png" />
<Content Include="XPS.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>
-1
View File
@@ -1 +0,0 @@
dotnet publish -r win-x64 -c Release --self-contained true
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
</packages>
-20
View File
@@ -1,20 +0,0 @@
{
"Versions": [
{
"name": "GD 2.2",
"path": "gdps/2.2/XPS.exe"
},
{
"name": "GD 2.1",
"path": "gdps/2.1/XPS.exe"
},
{
"name": "GD 2.0",
"path": "gdps/2.0/XPS.exe"
},
{
"name": "GD 1.9",
"path": "gdps/1.9/XPS.exe"
}
]
}