diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..84ed7fd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,92 @@ +name: Bug report +description: Report a bug in APK Tool GUI +labels: bug +body: + - type: checkboxes + attributes: + label: Prerequisites + description: To rule out invalid issues, confirm and check each one of the checkboxes. + options: + - label: This is not a support issue or a question. For support, questions, or help, see [support links](https://github.com/AndnixSH/APKToolGUI/issues/new/choose). + required: true + - label: I performed a cursory search of the issue tracker on [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/issues?q=is%3Aissue) to avoid opening a duplicate issue + required: true + - label: I am running the latest version of [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/releases). + required: true + - label: I have read the [FAQ](https://github.com/AndnixSH/APKToolGUI#faq) + required: true + + - type: textarea + attributes: + label: Describe the bug + description: | + A clear and concise description of what the bug is. + Feel free to upload/attach link to screenshot or video + Only place logs in 'Logs' box + validations: + required: true + + - type: textarea + attributes: + label: To Reproduce + description: Steps to reproduce the behavior + validations: + required: true + + - type: textarea + attributes: + label: Logs + description: Please surround the logs with 3 backticks (```) to format it properly + placeholder: | + Copy and paste the logs here + + This is an example how you should surround the logs with 3 backticks (```) + ``` + [12:50:54]java version "19.0.2" 2023-01-17 + Java(TM) SE Runtime Environment (build 19.0.2+7-44) + Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing) + [12:50:55] Apktool version "2.7.0" + [12:50:55] Drag & drop is supported + [12:50:55] Temp directory: "D:\Temp\ATG\xeaMO" + [12:50:55] Parsing APK Info... + [12:50:55] Done + [12:50:55] Getting devices... + [12:50:57] No devices found. Make sure your device is connected to the computer with the adb debugging turned on. If you use an emulator, restart it and wait until it boot up + ``` + validations: + required: true + + - type: textarea + attributes: + label: APK + description: If this APK can be freely shared, please upload/attach a link to it. Please warn with "NSFW" where applicable, if the APK or the link contains adult content + placeholder: | + https://apkcombo.com/downloader/ + validations: + required: false + + - type: input + attributes: + label: APK Tool GUI version + validations: + required: true + + - type: input + attributes: + label: Apktool version + validations: + required: true + + - type: input + attributes: + label: Java version + validations: + required: true + + - type: input + attributes: + label: Operating system and version + placeholder: | + (Example: Windows 11 2h22) + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..18cd9c7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,17 @@ +blank_issues_enabled: false +contact_links: + - name: Apktool Issues List + url: https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue + about: Check Apktool issues before reporting issue here. Your issue might already exists + - name: Apktool forum + url: https://github.com/iBotPeaches/Apktool/discussions + about: For support, questions or help with Apktool, development and modding + - name: Smali Issues List + url: https://github.com/JesusFreke/smali/issues?q=is%3Aissue + about: Check Baksmali issues before reporting issue here. Your issue might already exists + - name: Smali Issues List 2 + url: https://github.com/google/smali/issues?q=is%3Aissue + about: Check Baksmali issues before reporting issue here. Your issue might already exists + - name: Android development and modding support forum + url: https://forum.xda-developers.com/c/android-development-and-hacking.564/ + about: For support, questions or help with development and modding' diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..c1aa6b8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,23 @@ +name: Feature request +description: Request a feature for APK Tool GUI +labels: enhancement +body: + - type: checkboxes + attributes: + label: Prerequisites + description: To rule out invalid issues, confirm and check each one of the checkboxes. + options: + - label: This is not a support issue or a question. For support, questions, or help, see [support links](https://github.com/AndnixSH/APKToolGUI/issues/new/choose). + required: true + - label: I performed a cursory search of the issue tracker on [APK Tool GUI](https://github.com/AndnixSH/APKToolGUI/issues?q=is%3Aissue) to avoid opening a duplicate issue + required: true + - label: I have read the [FAQ](https://github.com/AndnixSH/APKToolGUI#faq) + required: true + + - type: textarea + attributes: + label: Describe the feature you'd like + description: A clear and concise description of what you want to happen. Not all features will be accepted + validations: + required: true + diff --git a/.github/ISSUE_TEMPLATE/language.yml b/.github/ISSUE_TEMPLATE/language.yml new file mode 100644 index 0000000..cbddda9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/language.yml @@ -0,0 +1,16 @@ +name: Language suggestion/error +description: Suggest a change or report an error of language. Use this form if you can't pull request +labels: language +body: + - type: input + attributes: + label: Language + validations: + required: true + - type: textarea + attributes: + label: Description + description: A clear and concise description of what you want to be changed. You can upload/paste screenshots here. For full translation, please upload zip file of translated files or full project + validations: + required: true + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..3f2aedd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,46 @@ +name: Build + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + name: Checkout Code + + - name: Setup MSBuild Path + uses: microsoft/setup-msbuild@v1.3.1 + + - name: Setup NuGet + uses: NuGet/setup-nuget@v2 + + - name: Restore NuGet Packages + run: nuget restore APKToolGUI.sln + + - name: Build Application + run: msbuild APKToolGUI.sln /p:Configuration=Release + + - name: Create package directory + run: mkdir package + + - name: Copy essential files to package + run: | + cp APKToolGUI/bin/Release/APKToolGUI.exe package/ + cp -r APKToolGUI/bin/Release/Resources package/ + cp APKToolGUI/bin/Release/*.dll package/ + + - name: Create placeholder config.xml + run: New-Item -Path package/ -Name "config.xml" -ItemType "file" + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: APKToolGUI + path: package/ diff --git a/APKToolGUI/APKToolGUI.csproj b/APKToolGUI/APKToolGUI.csproj index c906840..ce481cd 100644 --- a/APKToolGUI/APKToolGUI.csproj +++ b/APKToolGUI/APKToolGUI.csproj @@ -1,5 +1,7 @@ - - + + + + Debug x86 @@ -10,8 +12,9 @@ Properties APKToolGUI APKToolGUI - v4.0 - Client + v4.8 + + 512 false Properties\AssemblyInfo.cs @@ -20,6 +23,8 @@ False None.None.None.Increment None.None.None.Increment + + publish\ true Disk @@ -45,7 +50,7 @@ prompt 4 true - true + false AnyCPU @@ -57,10 +62,10 @@ 4 Auto false - true + false - android.ico + android-thin.ico LocalIntranet @@ -72,9 +77,206 @@ + + ..\packages\Costura.Fody.6.0.0\lib\netstandard2.0\Costura.dll + + + + ..\packages\DarkNet.2.3.0\lib\net452\DarkNet.dll + + + ..\packages\Microsoft.Bcl.HashCode.6.0.0\lib\net462\Microsoft.Bcl.HashCode.dll + + + + + + ..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll + True + True + + + ..\packages\Microsoft-WindowsAPICodePack-Core.1.1.5\lib\net48\Microsoft.WindowsAPICodePack.dll + + + ..\packages\Microsoft-WindowsAPICodePack-Shell.1.1.5\lib\net48\Microsoft.WindowsAPICodePack.Shell.dll + + + ..\packages\Ookii.Dialogs.WinForms.4.0.0\lib\net462\Ookii.Dialogs.WinForms.dll + + + ..\packages\OSVersionExt.3.0.0\lib\net462\OSVersionExt.dll + + + ..\packages\PortableSettingsProvider.0.2.5\lib\net45\PortableSettingsProvider.dll + + + + + ..\packages\ProDotNetZip.1.20.0\lib\netstandard2.0\ProDotNetZip.dll + + + ..\packages\ResourceLoader.3.3.1\lib\netstandard2.0\ResourceLoader.dll + + + ..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll + True + True + + + ..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll + + + ..\packages\System.Collections.Immutable.9.0.10\lib\net462\System.Collections.Immutable.dll + + + + ..\packages\System.Console.4.3.1\lib\net46\System.Console.dll + True + True + + + + + ..\packages\System.Diagnostics.DiagnosticSource.9.0.10\lib\net462\System.Diagnostics.DiagnosticSource.dll + + + ..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll + True + True + + + + ..\packages\System.Formats.Nrbf.9.0.10\lib\net462\System.Formats.Nrbf.dll + + + ..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll + True + True + + + ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + + + + ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll + True + True + + + ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll + True + True + + + ..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll + True + True + + + ..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll + True + True + + + + ..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll + + + + ..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll + True + True + + + ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll + True + True + + + + ..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll + + + ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll + True + True + + + ..\packages\System.Reflection.Metadata.9.0.10\lib\net462\System.Reflection.Metadata.dll + + + ..\packages\System.Resources.Extensions.9.0.10\lib\net462\System.Resources.Extensions.dll + + + ..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll + True + True + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll + True + True + + + ..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll + True + True + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + + + + ..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll + + + ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll + True + True + + + ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + True + + + ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + True + + + ..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + True + + + ..\packages\System.Security.Permissions.9.0.10\lib\net462\System.Security.Permissions.dll + + + ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll + + + + ..\packages\System.Text.Encoding.CodePages.9.0.10\lib\net462\System.Text.Encoding.CodePages.dll + + + ..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll + True + True + + + @@ -82,84 +284,147 @@ + + ..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll + True + True + + + - + + + + + Component - + Component - - - - Form - - - FormAboutBox.cs + + Component - - Form + + Component - - FormBuild.cs + + Component - + + + + + + + + + + + + + + + + + + + + + + + Form - - FormDecode.cs + + FormAboutBox.cs - + Form - + FormMain.cs - + Form - + FormSettings.cs Component - + + - + True True Language.resx - - + + + + + + Component + + + FormAboutBox.cs + Designer + + + FormAboutBox.cs + + + FormAboutBox.cs + + FormAboutBox.cs - + FormAboutBox.cs - - FormBuild.cs + + FormMain.cs + + + FormMain.cs - - FormDecode.cs + + FormMain.cs - + FormMain.cs - + FormMain.cs - + + FormSettings.cs + + + FormSettings.cs + + + FormSettings.cs + + FormSettings.cs - + FormSettings.cs - + + + + + + + ResXFileCodeGenerator Resources.Designer.cs @@ -170,11 +435,12 @@ Resources.resx True - + ResXFileCodeGenerator Language.Designer.cs + SettingsSingleFileGenerator @@ -187,14 +453,13 @@ - + + + + - - - - @@ -222,8 +487,25 @@ - xcopy $(ProjectDir)tools $(ProjectDir)$(OutDir)bin /Y /I /S + if not exist "$(ProjectDir)\$(OutDir)\Resources" xcopy "$(SolutionDir)\Tools" "$(ProjectDir)\$(OutDir)\Resources" /Y /I /S + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/APKToolGUI/APKToolGUI.csproj.user b/APKToolGUI/APKToolGUI.csproj.user index 67d14de..35b92b7 100644 --- a/APKToolGUI/APKToolGUI.csproj.user +++ b/APKToolGUI/APKToolGUI.csproj.user @@ -1,4 +1,4 @@ - + publish\ @@ -9,6 +9,7 @@ ru-RU false + ShowAllFiles false diff --git a/APKToolGUI/ApkTool/AaptParser.cs b/APKToolGUI/ApkTool/AaptParser.cs new file mode 100644 index 0000000..786e27b --- /dev/null +++ b/APKToolGUI/ApkTool/AaptParser.cs @@ -0,0 +1,362 @@ +using APKToolGUI.Web; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Documents; + +namespace APKToolGUI.Utils +{ + public class AaptParser + { + public string ApkFile; + + public string RealApkFile; + + public string Armv7ApkFile; + + public string Arm64ApkFile; + + public string AppName; + + public string PackageName; + + public string VersionName; + + public string VersionCode; + + public string MinSdkVersionDetailed; + + public string TargetSdkVersionDetailed; + + public string MinSdkVersion; + + public string TargetSdkVersion; + + public string LaunchableActivity; + + public string Permissions; + + public string Screens; + + public string Locales; + + public string Densities; + + public string NativeCode; + + public string PlayStoreLink; + + public string ApkComboLink; + + public string ApkPureLink; + + public string ApkAioLink; + + public string ApkGkLink; + + public string ApkSupportLink; + + public string ApkSosLink; + + public string ApkMirrorLink; + + public string ApkDlLink; + + public string FullInfo; + + internal string AppIcon = null; + + internal string AppIcon120 = null; + + internal string AppIcon160 = null; + + internal string AppIcon240 = null; + + internal string AppIcon320 = null; + + internal string AppIcon480 = null; + + internal string AppIcon640 = null; + + internal string AppIcon65534 = null; + + public bool Parse(string file) + { + bool result = true; + + string info = ParseApkInfo(file); + + FullInfo = info; + + if (!String.IsNullOrEmpty(info)) + { + string[] lines = info.Split( + new string[] { "\r\n", "\r", "\n" }, + StringSplitOptions.None); + + List nativecode = new List { }; + List nativecode2 = new List { }; + StringBuilder permissionsBuilder = new StringBuilder(); + foreach (string line in lines) + { + switch (line.Split(':')[0]) + { + case "package": + PackageName = StringExt.RegexExtract(@"(?<=package: name=\')(.*?)(?=\')", line); + VersionName = StringExt.RegexExtract(@"(?<=versionName=\')(.*?)(?=\')", line); + VersionCode = StringExt.RegexExtract(@"(?<=versionCode=\')(.*?)(?=\')", line); + break; + case "uses-permission": + permissionsBuilder.AppendLine(StringExt.RegexExtract(@"(?<=name=\')(.*?)(?=\')", line)); + break; + case "sdkVersion": + MinSdkVersionDetailed = SdkToAndroidVer(StringExt.RegexExtract(@"(?<=sdkVersion:\')(.*?)(?=\')", line)); + MinSdkVersion = StringExt.RegexExtract(@"(?<=sdkVersion:\')(.*?)(?=\')", line); + break; + case "targetSdkVersion": + TargetSdkVersionDetailed = SdkToAndroidVer(StringExt.RegexExtract(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line)); + TargetSdkVersion = StringExt.RegexExtract(@"(?<=targetSdkVersion:\')(.*?)(?=\')", line); + break; + case "application-label": + AppName = StringExt.RegexExtract(@"(?<=application-label:\')(.*?)(?=\')", line); + break; + case "launchable-activity": + LaunchableActivity = StringExt.RegexExtract(@"(?<=name=\')(.*?)(?=\')", line); + break; + case "supports-screens": + var screens = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast().Select(m => m.Value).ToList(); + Screens = string.Join(", ", screens); + break; + case "locales": + var locales = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast().Select(m => m.Value).ToList(); + Locales = string.Join(", ", locales); + break; + case "densities": + var densities = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast().Select(m => m.Value).ToList(); + Densities = string.Join(", ", densities); + break; + case "alt-native-code": + nativecode2 = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast().Select(m => m.Value).ToList(); + break; + case "native-code": + nativecode = Regex.Matches(line.Split(':')[1], @"(?<= \')(.*?)(?=\')").Cast().Select(m => m.Value).ToList(); + break; + } + } + + Permissions = permissionsBuilder.ToString(); + List combinedList = nativecode2.Concat(nativecode).ToList(); + NativeCode += string.Join(", ", combinedList); + ApkFile = file; + PlayStoreLink = "https://play.google.com/store/apps/details?id=" + PackageName; + ApkComboLink = "https://apkcombo.com/a/" + PackageName; + ApkPureLink = "https://apkpure.com/a/" + PackageName; + ApkSupportLink = "https://apk.support/app/" + PackageName; + ApkMirrorLink = "https://www.apkmirror.com/?post_type=app_release&searchtype=apk&s=" + PackageName; + ApkGkLink = "https://apkgk.com/" + PackageName + "/download"; + + AppIcon120 = StringExt.RegexExtract(@"(?<=application-icon-120:\')(.*?)(?=\')", FullInfo); + AppIcon160 = StringExt.RegexExtract(@"(?<=application-icon-160:\')(.*?)(?=\')", FullInfo); + AppIcon240 = StringExt.RegexExtract(@"(?<=application-icon-240:\')(.*?)(?=\')", FullInfo); + AppIcon320 = StringExt.RegexExtract(@"(?<=application-icon-320:\')(.*?)(?=\')", FullInfo); + AppIcon480 = StringExt.RegexExtract(@"(?<=application-icon-480:\')(.*?)(?=\')", FullInfo); + AppIcon640 = StringExt.RegexExtract(@"(?<=application-icon-640:\')(.*?)(?=\')", FullInfo); + AppIcon65534 = StringExt.RegexExtract(@"(?<=application-icon-65534:\')(.*?)(?=\')", FullInfo); + + result = true; + } + else + result = false; + + return result; + } + + private string ParseApkInfo(string path) + { + //For some reason, aapt2 hangs, so we will only use aapt2 when aapt1 fails to read UTF-8 character + string apkinfo = CMD.ProcessStartWithOutput(Program.AAPT_PATH, "dump badging \"" + path + "\""); + if (String.IsNullOrEmpty(apkinfo)) + { + string apkinfo2 = CMD.ProcessStartWithOutput(Program.AAPT2_PATH, "dump badging \"" + path + "\""); + if (!String.IsNullOrEmpty(apkinfo2)) + { + return apkinfo2; + } + else + return ""; + } + else + return apkinfo; + } + + public string GetIcon(string apkPath) + { + string[] png = { "mipmap-xxxhdpi-v4", "mipmap-xxhdpi-v4", "mipmap-xhdpi-v4", "mipmap-hdpi-v4", "mipmap-mdpi-v4", "mipmap-xhdpi", "mipmap-hdpi", "drawable-xxxhdpi-v4", "drawable-xxhdpi-v4", "drawable-xhdpi-v4", "drawable-hdpi-v4", "drawable-mdpi-v4" }; + string icon = ""; + + if (!string.IsNullOrEmpty(AppIcon65534)) + icon = AppIcon65534; + else if (!string.IsNullOrEmpty(AppIcon640)) + icon = AppIcon640; + else if (!string.IsNullOrEmpty(AppIcon480)) + icon = AppIcon480; + else if (!string.IsNullOrEmpty(AppIcon320)) + icon = AppIcon320; + else if (!string.IsNullOrEmpty(AppIcon240)) + icon = AppIcon240; + else if (!string.IsNullOrEmpty(AppIcon160)) + icon = AppIcon160; + else if (!string.IsNullOrEmpty(AppIcon120)) + icon = AppIcon120; + + icon = icon.Replace(".xml", ".png"); + + Debug.WriteLine("Icon: " + icon); + + string cacheDir = Path.Combine(Program.TEMP_PATH, PackageName); + string iconLocation = Path.Combine(cacheDir, Path.GetFileName(icon)); + Directory.CreateDirectory(cacheDir); + + if (icon.Contains("anydpi-v26")) + { + foreach (string Png in png) + { + string icon2 = icon.Replace("mipmap-anydpi-v26", Png).Replace("drawable-anydpi-v26", Png); + ZipUtils.ExtractFile(apkPath, icon2, cacheDir); + if (File.Exists(iconLocation)) + { + break; + } + } + } + else if (icon.Contains("v26")) + { + string icon2 = icon.Replace("v26", "v4"); + ZipUtils.ExtractFile(apkPath, icon2, cacheDir); + icon2 = icon.Replace("-v26", ""); + ZipUtils.ExtractFile(apkPath, icon2, cacheDir); + } + else + { + ZipUtils.ExtractFile(apkPath, icon, cacheDir); + } + + if (!File.Exists(iconLocation)) + { + try + { + WebDownload w = new WebDownload(); + string ps = w.DownloadString("https://play.google.com/store/apps/details?id=" + PackageName); + //File.WriteAllText("R:\\t.txt", ps); + string icondl = Path.Combine(cacheDir, "icon.png"); + Directory.CreateDirectory(cacheDir); + w.DownloadFile(StringExt.RegexExtract(@"(?<=\""image\"":\"")(.*?)(?=\"",\"")", ps), icondl); + iconLocation = icondl; + } + catch (System.Net.WebException ex) + { + Debug.WriteLine($"[AaptParser] Failed to download icon from web: {ex.Message}"); + // Icon download failure is not critical, use default value + } + catch (IOException ex) + { + Debug.WriteLine($"[AaptParser] Failed to save icon file: {ex.Message}"); + } + catch (Exception ex) + { + Debug.WriteLine($"[AaptParser] Unexpected error getting icon: {ex.Message}"); + } + } + + return iconLocation; + } + + //https://apilevels.com/ + public string SdkToAndroidVer(string sdk) + { + switch (sdk) + { + case "36": + return sdk + ": Android 16"; + case "35": + return sdk + ": Android 15"; + case "34": + return sdk + ": Android 14"; + case "33": + return sdk + ": Android 13"; + case "32": + return sdk + ": Android 12.0L"; + case "31": + return sdk + ": Android 12"; + case "30": + return sdk + ": Android 11"; + case "29": + return sdk + ": Android 10"; + case "28": + return sdk + ": Android 9 (Pie)"; + case "27": + return sdk + ": Android 8.1 (Oreo)"; + case "26": + return sdk + ": Android 8.0 (Oreo)"; + case "25": + return sdk + ": Android 7.1 (Nougat)"; + case "24": + return sdk + ": Android 7.0 (Nougat)"; + case "23": + return sdk + ": Android 6 (Marshmallow)"; + case "22": + return sdk + ": Android 5.1 (Lollipop)"; + case "21": + return sdk + ": Android 5.0 (Lollipop)"; + case "20": + return sdk + ": Android 4.4W (KitKat Watch)"; + case "19": + return sdk + ": Android 4.4 (KitKat)"; + case "18": + return sdk + ": Android 4.3 (Jelly Bean)"; + case "17": + return sdk + ": Android 4.2 (Jelly Bean)"; + case "16": + return sdk + ": Android 4.1 (Jelly Bean)"; + case "15": + return sdk + ": Android 4.0.3 (Ice Cream Sandwich)"; + case "14": + return sdk + ": Android 4.0 (Ice Cream Sandwich)"; + case "13": + return sdk + ": Android 3.2 (Honeycomb)"; + case "12": + return sdk + ": Android 3.1 (Honeycomb)"; + case "11": + return sdk + ": Android 3.0 (Honeycomb)"; + case "10": + return sdk + ": Android 2.3.3 Gingerbread"; + case "9": + return sdk + ": Android 2.3 (Gingerbread)"; + case "8": + return sdk + ": Android 2.2 (Froyo)"; + case "7": + return sdk + ": Android 2.1 (Eclair)"; + case "6": + return sdk + ": Android 2.0.1 (Eclair)"; + case "5": + return sdk + ": Android 2.0 (Eclair)"; + case "4": + return sdk + ": Android 1.6 (Donut)"; + case "3": + return sdk + ": Android 1.5 (Cupcake)"; + case "2": + return sdk + ": Android 1.1 (Base 1.1)"; + case "1": + return sdk + ": Android 1.0 (Base)"; + default: + return sdk; + } + } + } +} diff --git a/APKToolGUI/ApkTool/Adb.cs b/APKToolGUI/ApkTool/Adb.cs new file mode 100644 index 0000000..88cd096 --- /dev/null +++ b/APKToolGUI/ApkTool/Adb.cs @@ -0,0 +1,201 @@ +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Java; +using Microsoft.Build.Framework.XamlTypes; +using System; +using System.Diagnostics; +using System.IO; +using System.Text.RegularExpressions; +using System.Windows.Shapes; + +namespace APKToolGUI +{ + public class Adb : IDisposable + { + Process processAdb; + private bool disposed = false; + + static class Keys + { + public const string Devices = " devices -l"; //list connected devices (-l for long output) + public const string Serial = " -s"; // use device with given serial (overrides $ANDROID_SERIAL) + public const string Vendor = " -i"; //Vendor + public const string ApkPath = " -r"; + public const string Abi = " --abi"; //override platform's default ABI + } + + public event DataReceivedEventHandler OutputDataReceived + { + add { processAdb.OutputDataReceived += value; } + remove { processAdb.OutputDataReceived -= value; } + } + + public event DataReceivedEventHandler ErrorDataReceived + { + add { processAdb.ErrorDataReceived += value; } + remove { processAdb.ErrorDataReceived -= value; } + } + + public event EventHandler Exited; + public int ExitCode { get { return processAdb.ExitCode; } } + string adbFileName = null; + public Adb(string AdbFileName) + { + adbFileName = AdbFileName; + processAdb = new Process(); + processAdb.EnableRaisingEvents = true; + processAdb.StartInfo.FileName = AdbFileName; + processAdb.StartInfo.UseShellExecute = false; // Disable shell execution to read output data + processAdb.StartInfo.RedirectStandardOutput = true; // Allow output redirection + processAdb.StartInfo.RedirectStandardError = true; // Allow error redirection + processAdb.StartInfo.CreateNoWindow = true; // Do not create window for the launched program + processAdb.Exited += processAdb_Exited; + } + + void processAdb_Exited(object sender, EventArgs e) + { + processAdb.CancelOutputRead(); + processAdb.CancelErrorRead(); + if (this.Exited != null) + Exited(this, new EventArgs()); + } + + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("adb")) + { + using (process) + { + if (process.Id == processAdb.Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)processAdb.Id); + process.Kill(); + } + } + } + } + catch (Exception ex) + { + Debug.WriteLine($"[Adb] Cancel failed: {ex.Message}"); + // Process termination failure is not critical, so continue + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + if (processAdb != null) + { + try + { + if (!processAdb.HasExited) + { + processAdb.Kill(); + } + } + catch (Exception ex) + { + Debug.WriteLine($"[Adb] Error disposing process: {ex.Message}"); + } + finally + { + processAdb.Dispose(); + processAdb = null; + } + } + } + disposed = true; + } + } + + ~Adb() + { + Dispose(false); + } + + public int Install(string device, string inputApk) + { + Regex regex = new Regex(@"^(\S+)\s+.*model:(\w+).*"); + Match mdevice = regex.Match(device); + + string setVendor = null, abi = null; + if (Settings.Default.Adb_SetVendor) + setVendor = $"{Keys.Vendor} com.android.vending {Keys.ApkPath}"; + if (Settings.Default.Adb_SetOverrideAbi) + { + switch (Settings.Default.Adb_OverrideAbi) + { + case 0: + abi = Keys.Abi + " arm64-v8a"; + break; + case 1: + abi = Keys.Abi + " armeabi-v7a"; + break; + case 2: + abi = Keys.Abi + " x86"; + break; + case 3: + abi = Keys.Abi + " x86_64"; + break; + } + } + + string args = String.Format($"{Keys.Serial} {mdevice.Groups[1].Value} install {setVendor} {abi} \"{inputApk}\""); + + Log.d("ADB: " + adbFileName + " " + args); + Debug.WriteLine("Adb: " + args); + + processAdb.EnableRaisingEvents = false; + processAdb.StartInfo.Arguments = args; + processAdb.Start(); + processAdb.BeginOutputReadLine(); + processAdb.BeginErrorReadLine(); + processAdb.WaitForExit(); + + return ExitCode; + } + + public string GetDevices() + { + Log.d("ADB: " + adbFileName + " " + Keys.Devices); + + using (Process process = new Process()) + { + process.EnableRaisingEvents = true; + process.StartInfo.FileName = adbFileName; + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; + process.StartInfo.CreateNoWindow = true; + process.EnableRaisingEvents = false; + process.StartInfo.Arguments = Keys.Devices; + process.Start(); + string devices = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + return devices; + } + } + + public void KillProcess() + { + foreach (var process in Process.GetProcessesByName("adb")) + { + using (process) + { + process.Kill(); + } + } + } + } +} diff --git a/APKToolGUI/ApkTool/ApkEditor.cs b/APKToolGUI/ApkTool/ApkEditor.cs new file mode 100644 index 0000000..9a7bdd2 --- /dev/null +++ b/APKToolGUI/ApkTool/ApkEditor.cs @@ -0,0 +1,243 @@ +using System; +using Java; +using System.Diagnostics; +using APKToolGUI.Properties; +using System.IO; +using APKToolGUI.Utils; +using System.Windows.Forms; + +namespace APKToolGUI +{ + public class ApkEditor : JarProcess, IDisposable + { + private bool disposed = false; + + public new event ApkEditorExitedEventHandler Exited; + + string _jarPath; + public ApkEditor(string javaPath, string jarPath) + : base(javaPath, jarPath) + { + this._jarPath = jarPath; + base.Exited += ApkEditor_Exited; + OutputDataReceived += ApkEditor_OutputDataReceived; + ErrorDataReceived += ApkEditor_ErrorDataReceived; //Output makes process way slower + } + + ApkEditorDataReceivedEventHandler onApkEditorOutputDataRecieved; + ApkEditorDataReceivedEventHandler onApkEditorErrorDataRecieved; + + public event ApkEditorDataReceivedEventHandler ApkEditorOutputDataRecieved + { + add + { + onApkEditorOutputDataRecieved += value; + } + remove + { + onApkEditorOutputDataRecieved -= value; + } + } + public event ApkEditorDataReceivedEventHandler ApkEditorErrorDataRecieved + { + add + { + onApkEditorErrorDataRecieved += value; + } + remove + { + onApkEditorErrorDataRecieved -= value; + } + } + + + private void ApkEditor_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (onApkEditorErrorDataRecieved != null && e.Data != null) + onApkEditorErrorDataRecieved(this, new ApkEditorDataReceivedEventArgs(e.Data)); + } + + private void ApkEditor_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (onApkEditorOutputDataRecieved != null && e.Data != null) + onApkEditorOutputDataRecieved(this, new ApkEditorDataReceivedEventArgs(e.Data)); + } + + void ApkEditor_Exited(object sender, EventArgs e) + { + if (Exited != null) + Exited(this, new ApkEditorExitedEventArgs(ExitCode)); + } + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("java")) + { + using (process) + { + if (process.Id == Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)Id); + process.Kill(); + } + } + } + } + catch (InvalidOperationException ex) + { + Debug.WriteLine($"[ApkEditor] Process already exited: {ex.Message}"); + } + catch (System.ComponentModel.Win32Exception ex) + { + Debug.WriteLine($"[ApkEditor] Failed to access process: {ex.Message}"); + } + catch (Exception ex) + { + Debug.WriteLine($"[ApkEditor] Failed to cancel process: {ex.Message}"); + } + } + + public int Merge(string input, string output) + { + string inputFile = String.Format("-i \"{0}\"", input); + string keyOutputDir = String.Format("-o \"{0}\"", output); + + string args = String.Format("m {0} {1} -f", inputFile, keyOutputDir); + + Log.d("ApkEditor CMD: " + _jarPath + " " + args); + + Start(args); + + BeginOutputReadLine(); + BeginErrorReadLine(); + + WaitForExit(); + + CancelOutputRead(); + CancelErrorRead(); + return ExitCode; + } + + public int Decompile(string input, string output) + { + string inputFile = String.Format("-i \"{0}\"", input); + string keyOutputDir = String.Format("-o \"{0}\"", output); + + string args = String.Format("d {0} {1} -f", inputFile, keyOutputDir); + + Log.d("ApkEditor CMD: " + _jarPath + " " + args); + + Start(args); + + BeginOutputReadLine(); + BeginErrorReadLine(); + + WaitForExit(); + + CancelOutputRead(); + CancelErrorRead(); + return ExitCode; + } + + public int Build(string input, string output) + { + string inputFile = String.Format("-i \"{0}\"", input); + string keyOutputDir = String.Format("-o \"{0}\"", output); + + string args = String.Format("b {0} {1} -f", inputFile, keyOutputDir); + + Log.d("ApkEditor CMD: " + _jarPath + " " + args); + + Start(args); + + BeginOutputReadLine(); + BeginErrorReadLine(); + + WaitForExit(); + + CancelOutputRead(); + CancelErrorRead(); + return ExitCode; + } + public string GetVersion() + { + using (JarProcess jar = new JarProcess(JavaPath, JarPath)) + { + jar.EnableRaisingEvents = false; + jar.Start("-version"); + + //APKEditor always print as errors as usual :) + string version = jar.StandardOutput.ReadToEnd(); + version += jar.StandardError.ReadToEnd(); + jar.WaitForExit(3000); + return version.Replace("\r\n", ""); + } + } + + public new void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected new virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + try + { + Cancel(); + } + catch (Exception ex) + { + Debug.WriteLine($"[ApkEditor] Error during disposal: {ex.Message}"); + } + finally + { + base.Dispose(); + } + } + disposed = true; + } + } + + ~ApkEditor() + { + Dispose(false); + } + } + + public class ApkEditorExitedEventArgs : EventArgs + { + public ApkEditorExitedEventArgs(int exitCode) + { + ExitCode = exitCode; + } + + public int ExitCode { get; private set; } + } + + public delegate void ApkEditorExitedEventHandler(object sender, ApkEditorExitedEventArgs e); + + public delegate void ApkEditorDataReceivedEventHandler(Object sender, ApkEditorDataReceivedEventArgs e); + + public class ApkEditorDataReceivedEventArgs : EventArgs + { + string message; + + public ApkEditorDataReceivedEventArgs(string _data) + { + message = _data; + } + public String Message + { + get + { + return message; + } + } + } +} diff --git a/APKToolGUI/ApkTool/ApkFixer.cs b/APKToolGUI/ApkTool/ApkFixer.cs new file mode 100644 index 0000000..4b18b2d --- /dev/null +++ b/APKToolGUI/ApkTool/ApkFixer.cs @@ -0,0 +1,115 @@ + + +using APKToolGUI.Utils; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace APKToolGUI.ApkTool +{ + public class ApkFixer + { + public static bool FixAndroidManifest(string decompilePath) + { + string manifestPath = Path.Combine(decompilePath, "AndroidManifest.xml"); + if (!File.Exists(manifestPath)) + return false; + + try + { + string manifestText = File.ReadAllText(manifestPath); + manifestText = manifestText.Replace("\\ ", "\\u003"); + manifestText = manifestText.Replace("android:isSplitRequired=\"true\"", ""); + manifestText = manifestText.Replace("android:extractNativeLibs=\"false\"", ""); + manifestText = manifestText.Replace("android:useEmbeddedDex=\"true\"", ""); + manifestText = manifestText.Replace("android:manageSpace=\"true\"", ""); + manifestText = manifestText.Replace("android:localeConfig=\"@xml/locales_config\"", ""); + manifestText = manifestText.Replace("STAMP_TYPE_DISTRIBUTION_APK", "STAMP_TYPE_STANDALONE_APK"); + manifestText = manifestText.Replace("android:requiredSplitTypes=\"(.*?)\"", ""); + manifestText = manifestText.Replace("android:splitTypes=\"(.*?)\"", ""); + + File.WriteAllText(manifestPath, manifestText); + return true; + } + catch (IOException ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Failed to fix AndroidManifest.xml: {ex.Message}"); + return false; + } + catch (UnauthorizedAccessException ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Access denied to AndroidManifest.xml: {ex.Message}"); + return false; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Unexpected error fixing AndroidManifest.xml: {ex.Message}"); + return false; + } + } + + public static bool FixApktoolYml(string decompilePath) + { + string ymlPath = Path.Combine(decompilePath, "apktool.yml"); + if (!File.Exists(ymlPath)) + return false; + + try + { + string yml = File.ReadAllText(ymlPath); + yml = yml.Replace("sparseResources: true", "sparseResources: false"); + + File.WriteAllText(ymlPath, yml); + return true; + } + catch (IOException ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Failed to fix apktool.yml: {ex.Message}"); + return false; + } + catch (UnauthorizedAccessException ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Access denied to apktool.yml: {ex.Message}"); + return false; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Unexpected error fixing apktool.yml: {ex.Message}"); + return false; + } + } + + public static bool RemoveApkToolDummies(string path) + { + string resPath = Path.Combine(path, "res", "values"); + if (!Directory.Exists(resPath)) + return false; + + try + { + DirectoryUtils.ReplaceinFilesRegex(resPath, "(.*(?:APKTOOL_DUMMY).*)", ""); + return true; + } + catch (IOException ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Failed to remove APKTOOL_DUMMY: {ex.Message}"); + return false; + } + catch (UnauthorizedAccessException ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Access denied while removing APKTOOL_DUMMY: {ex.Message}"); + return false; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ApkFixer] Unexpected error removing APKTOOL_DUMMY: {ex.Message}"); + return false; + } + } + } +} diff --git a/APKToolGUI/ApkTool/Apktool.cs b/APKToolGUI/ApkTool/Apktool.cs new file mode 100644 index 0000000..0e667ac --- /dev/null +++ b/APKToolGUI/ApkTool/Apktool.cs @@ -0,0 +1,404 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Java; + +namespace APKToolGUI +{ + public class Apktool : JarProcess, IDisposable + { + private bool disposed = false; + + enum ApktoolActionType + { + Decompile, + Build, + InstallFramework, + ClearFramework, + Null + } + + static class DecompileKeys + { + public const string NoSource = " -s"; //Do not decode sources. + public const string NoResource = " -r"; //Do not decode resources. + public const string NoDebugInfo = " -b"; //don't write out debug info (.local, .param, .line, etc.) + public const string Force = " -f"; //Skip changes detection and build all files. + public const string FrameworkPath = " -p"; //Uses framework files located in . + public const string KeepBrokenResource = " -k"; //Use if there was an error and some resources were dropped + public const string MatchOriginal = " -m"; //Keeps files to closest to original as possible. Prevents rebuild. + public const string OutputDir = " -o"; //The name of folder that gets written. Default is apk.out + public const string OnlyMainClasses = " -only-main-classes"; //Only disassemble the main dex classes (classes[0-9]*.dex) in the root. + public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS. + public const string Jobs = " -j"; // Sets the number of threads to use. + } + + static class BuildKeys + { + public const string ForceAll = " -f"; //Skip changes detection and build all files. + public const string CopyOriginal = " -c"; //opies original AndroidManifest.xml and META-INF. See project page for more info. + public const string Aapt = " -a"; //Loads aapt from specified location. + public const string FrameworkPath = " -p"; //Uses framework files located in . + public const string OutputAppPath = " -o"; // The name of apk that gets written. Default is dist/name.apk + public const string NoCrunch = " -nc"; // Disable crunching of resource files during the build step. + public const string ApiLevel = " -api"; //The numeric api-level of the file to generate, e.g. 14 for ICS. + public const string UseAapt2 = " --use-aapt2"; //Upgrades apktool to use experimental aapt2 binary. + public const string NetSecConf = " --net-sec-conf"; //Add a generic Network Security Configuration file in the output APK + public const string Jobs = " -j"; // Sets the number of threads to use. + } + + static class InstallFrameworkKeys + { + public const string FrameDir = " -p"; //Stores framework files into . + public const string Tag = " -t"; //Tag frameworks using . + } + + static class EmptyFrameworkKeys + { + public const string FrameDir = " -p"; //Stores framework files into . + public const string ForceDelete = " -f"; //Force delete destination directory. + } + + ApktoolDataReceivedEventHandler onApktoolOutputDataRecieved; + ApktoolDataReceivedEventHandler onApktoolErrorDataRecieved; + + public event ApktoolDataReceivedEventHandler ApktoolOutputDataRecieved + { + add + { + onApktoolOutputDataRecieved += value; + } + remove + { + onApktoolOutputDataRecieved -= value; + } + } + public event ApktoolDataReceivedEventHandler ApktoolErrorDataRecieved + { + add + { + onApktoolErrorDataRecieved += value; + } + remove + { + onApktoolErrorDataRecieved -= value; + } + } + + string _jarPath; + public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath) + { + _jarPath = jarPath; + Exited += Apktool_Exited; + OutputDataReceived += Apktool_OutputDataReceived; + ErrorDataReceived += Apktool_ErrorDataReceived; + } + + private void Apktool_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (onApktoolErrorDataRecieved != null && e.Data != null) + onApktoolErrorDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data)); + } + + private void Apktool_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (onApktoolOutputDataRecieved != null && e.Data != null) + onApktoolOutputDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data)); + } + + private void Apktool_Exited(object sender, EventArgs e) + { + CancelOutputRead(); + CancelErrorRead(); + } + + public int Decompile(string inputPath, string outputDir) + { + string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyMatchOriginal = null, keyOutputDir = null, onlyMainClasses = null, noDebugInfo = null, keyKeepBrokenRes = null, apiLevel = null; + + if (Settings.Default.Decode_NoSrc) + keyNoSrc = DecompileKeys.NoSource; + if (Settings.Default.Decode_NoRes) + keyNoRes = DecompileKeys.NoResource; + if (Settings.Default.Decode_Force) + keyForce = DecompileKeys.Force; + if (Settings.Default.Decode_KeepBrokenRes) + keyKeepBrokenRes = DecompileKeys.KeepBrokenResource; + if (Settings.Default.Decode_MatchOriginal) + keyMatchOriginal = DecompileKeys.MatchOriginal; + if (Settings.Default.Decode_OnlyMainClasses && !Settings.Default.Decode_NoSrc) + onlyMainClasses = DecompileKeys.OnlyMainClasses; + if (Settings.Default.Decode_NoDebugInfo) + noDebugInfo = DecompileKeys.NoDebugInfo; + if (Settings.Default.Decode_UseFramework) + keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Settings.Default.Framework_FrameDir); + else + keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR); + if (Settings.Default.Decode_SetApiLevel) + apiLevel = String.Format("{0} {1}", DecompileKeys.ApiLevel, Settings.Default.Decode_ApiLevel); + if (Settings.Default.Decode_SetJobs) + apiLevel = String.Format("{0} {1}", DecompileKeys.Jobs, Settings.Default.Decode_Jobs); + keyOutputDir = String.Format("{0} \"{1}\"", DecompileKeys.OutputDir, outputDir); + + string args = String.Format($"d{keyNoSrc}{keyNoRes}{keyForce}{onlyMainClasses}{noDebugInfo}{keyMatchOriginal}{keyFramePath}{keyKeepBrokenRes}{apiLevel}{keyOutputDir} \"{inputPath}\""); + + Log.d("Apktool CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + return ExitCode; + } + + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("java")) + { + using (process) + { + if (process.Id == Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)Id); + process.Kill(); + } + } + } + } + catch (InvalidOperationException ex) + { + Debug.WriteLine($"[Apktool] Process already exited: {ex.Message}"); + } + catch (System.ComponentModel.Win32Exception ex) + { + Debug.WriteLine($"[Apktool] Failed to access process: {ex.Message}"); + } + catch (Exception ex) + { + Debug.WriteLine($"[Apktool] Failed to cancel process: {ex.Message}"); + } + } + + public int Build(string inputFolder, string outputFile) + { + string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, noCrunch = null, keyFramePath = null, keyOutputAppPath = null, apiLevel = null, useAapt2 = null, netSecConf = null; + + if (Settings.Default.Build_ForceAll) + keyForceAll = BuildKeys.ForceAll; + if (Settings.Default.Build_CopyOriginal) + keyCopyOriginal = BuildKeys.CopyOriginal; + if (Settings.Default.Build_NoCrunch) + noCrunch = BuildKeys.NoCrunch; + if (Settings.Default.Build_UseAapt) + keyAapt = String.Format("{0} \"{1}\"", BuildKeys.Aapt, Settings.Default.Build_AaptPath); + if (Settings.Default.Build_UseFramework) + keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Settings.Default.Framework_FrameDir); + else + keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR); + if (Settings.Default.Build_SetApiLevel) + apiLevel = String.Format("{0} {1}", BuildKeys.ApiLevel, Settings.Default.Build_ApiLevel); + if (Settings.Default.Build_SetJobs) + apiLevel = String.Format("{0} {1}", BuildKeys.Jobs, Settings.Default.Build_Jobs); + if (Settings.Default.Build_UseAapt2) + useAapt2 = BuildKeys.UseAapt2; + if (Settings.Default.Build_NetSecConf) + netSecConf = BuildKeys.NetSecConf; + keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, outputFile); + + string args = String.Format($"b{keyForceAll}{keyAapt}{keyCopyOriginal}{noCrunch}{keyFramePath}{apiLevel}{useAapt2}{netSecConf}{keyOutputAppPath} \"{inputFolder}\""); + + Log.d("Apktool CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + return ExitCode; + } + + public int InstallFramework() + { + string inputPath = Settings.Default.InstallFramework_InputFramePath; + string keyFrameDir = null, keyTag = null; + + if (Settings.Default.Framework_UseFrameDir) + keyFrameDir = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, Settings.Default.Framework_FrameDir); + if (Settings.Default.InstallFramework_UseTag) + keyTag = String.Format("{0} \"{1}\"", InstallFrameworkKeys.Tag, Settings.Default.InstallFramework_Tag); + + string args = String.Format($"if{keyFrameDir}{keyTag} \"{inputPath}\""); + + Log.d("Apktool CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + return ExitCode; + } + + public int ClearFramework() + { + string keyFramePath = null; + if (Settings.Default.Decode_UseFramework) + keyFramePath = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, Settings.Default.Framework_FrameDir); + else + keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, Program.STANDALONE_FRAMEWORK_DIR); + + string args = String.Format($"empty-framework-dir {EmptyFrameworkKeys.ForceDelete} {keyFramePath}"); + + Log.d("Apktool CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + return ExitCode; + } + + public string GetVersion() + { + using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath)) + { + apktoolJar.EnableRaisingEvents = false; + apktoolJar.Start("version"); + string version = apktoolJar.StandardOutput.ReadToEnd(); + apktoolJar.WaitForExit(3000); + return version.Replace("\r\n", ""); + } + } + + public string GetVersionOld() + { + using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath)) + { + apktoolJar.EnableRaisingEvents = false; + apktoolJar.Start("-version"); + string version = apktoolJar.StandardOutput.ReadToEnd(); + apktoolJar.WaitForExit(3000); + return version.Replace("\r\n", ""); + } + } + + public new void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected new virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + try + { + Cancel(); + } + catch (Exception ex) + { + Debug.WriteLine($"[Apktool] Error during disposal: {ex.Message}"); + } + finally + { + base.Dispose(); + } + } + disposed = true; + } + } + + ~Apktool() + { + Dispose(false); + } + } + + public delegate void ApktoolDataReceivedEventHandler(Object sender, ApktoolDataReceivedEventArgs e); + + public class ApktoolDataReceivedEventArgs : EventArgs + { + string data; + string message; + ApktoolEventType eventType; + + public ApktoolDataReceivedEventArgs(string _data) + { + data = _data; + SetData(); + } + public String Message + { + get + { + return message; + } + } + public ApktoolEventType EventType + { + get + { + return eventType; + } + } + + private void SetData() + { + MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$"); + if (mCol.Count > 0) + { + switch (mCol[0].Groups[1].Value) + { + case "W": + eventType = ApktoolEventType.Warning; + message = mCol[0].Groups[2].Value; + break; + case "Warning": + eventType = ApktoolEventType.Warning; + message = mCol[0].Groups[2].Value; + break; + case "I": + eventType = ApktoolEventType.None; + message = mCol[0].Groups[2].Value; + break; + case "Error": + eventType = ApktoolEventType.Error; + message = mCol[0].Groups[2].Value; + break; + case "E": + eventType = ApktoolEventType.Error; + message = mCol[0].Groups[2].Value; + break; + default: + eventType = ApktoolEventType.Unknown; + message = data; + break; + } + } + else + { + eventType = ApktoolEventType.Unknown; + message = data; + } + } + } + + public enum ApktoolEventType + { + None, + Success, + Infomation, + Warning, + Error, + Unknown + } +} diff --git a/APKToolGUI/ApkTool/Baksmali.cs b/APKToolGUI/ApkTool/Baksmali.cs new file mode 100644 index 0000000..3a3a2bd --- /dev/null +++ b/APKToolGUI/ApkTool/Baksmali.cs @@ -0,0 +1,184 @@ +using System; +using Java; +using System.Diagnostics; +using APKToolGUI.Properties; +using System.IO; +using APKToolGUI.Utils; + +namespace APKToolGUI +{ + public class Baksmali : JarProcess, IDisposable + { + private bool disposed = false; + + public new event BaksmaliExitedEventHandler Exited; + + string _jarPath; + public Baksmali(string javaPath, string jarPath) + : base(javaPath, jarPath) + { + _jarPath = jarPath; + base.Exited += Baksmali_Exited; + OutputDataReceived += Baksmali_OutputDataReceived; + ErrorDataReceived += Baksmali_ErrorDataReceived; + } + + BaksmaliDataReceivedEventHandler onBaksmaliOutputDataRecieved; + BaksmaliDataReceivedEventHandler onBaksmaliErrorDataRecieved; + + public event BaksmaliDataReceivedEventHandler BaksmaliOutputDataRecieved + { + add + { + onBaksmaliOutputDataRecieved += value; + } + remove + { + onBaksmaliOutputDataRecieved -= value; + } + } + public event BaksmaliDataReceivedEventHandler BaksmaliErrorDataRecieved + { + add + { + onBaksmaliErrorDataRecieved += value; + } + remove + { + onBaksmaliErrorDataRecieved -= value; + } + } + + + private void Baksmali_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (onBaksmaliErrorDataRecieved != null && e.Data != null) + onBaksmaliErrorDataRecieved(this, new BaksmaliDataReceivedEventArgs(e.Data)); + } + + private void Baksmali_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (onBaksmaliOutputDataRecieved != null && e.Data != null) + onBaksmaliOutputDataRecieved(this, new BaksmaliDataReceivedEventArgs(e.Data)); + } + + void Baksmali_Exited(object sender, EventArgs e) + { + if (Exited != null) + Exited(this, new BaksmaliExitedEventArgs(ExitCode)); + } + + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("java")) + { + using (process) + { + if (process.Id == Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)Id); + process.Kill(); + } + } + } + } + catch (InvalidOperationException ex) + { + Debug.WriteLine($"[Baksmali] Process already exited: {ex.Message}"); + } + catch (System.ComponentModel.Win32Exception ex) + { + Debug.WriteLine($"[Baksmali] Failed to access process: {ex.Message}"); + } + catch (Exception ex) + { + Debug.WriteLine($"[Baksmali] Failed to cancel process: {ex.Message}"); + } + } + + public int Disassemble(string input, string output) + { + string inputFile = String.Format("\"{0}\"", input); + string keyOutputDir = String.Format("-o \"{0}\"", output); + + string args = String.Format("d {0} {1}", inputFile, keyOutputDir); + + Log.v("Baksmali CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + CancelOutputRead(); + CancelErrorRead(); + return ExitCode; + } + + public new void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected new virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + try + { + Cancel(); + } + catch (Exception ex) + { + Debug.WriteLine($"[Baksmali] Error during disposal: {ex.Message}"); + } + finally + { + base.Dispose(); + } + } + disposed = true; + } + } + + ~Baksmali() + { + Dispose(false); + } + } + + public class BaksmaliExitedEventArgs : EventArgs + { + public BaksmaliExitedEventArgs(int exitCode) + { + ExitCode = exitCode; + } + + public int ExitCode { get; private set; } + } + + public delegate void BaksmaliExitedEventHandler(object sender, BaksmaliExitedEventArgs e); + + public delegate void BaksmaliDataReceivedEventHandler(Object sender, BaksmaliDataReceivedEventArgs e); + + public class BaksmaliDataReceivedEventArgs : EventArgs + { + string message; + + public BaksmaliDataReceivedEventArgs(string _data) + { + message = _data; + } + public String Message + { + get + { + return message; + } + } + } +} diff --git a/APKToolGUI/ApkTool/Signapk.cs b/APKToolGUI/ApkTool/Signapk.cs new file mode 100644 index 0000000..bf9c889 --- /dev/null +++ b/APKToolGUI/ApkTool/Signapk.cs @@ -0,0 +1,243 @@ +using System; +using Java; +using System.Diagnostics; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using System.IO.Packaging; + +namespace APKToolGUI +{ + public class Signapk : JarProcess, IDisposable + { + private bool disposed = false; + + public new event SignapkExitedEventHandler Exited; + + private string lastSourceApk; + private string lastOutApk; + public bool silent; + + SignapkDataReceivedEventHandler onSignapkOutputDataRecieved; + SignapkDataReceivedEventHandler onSignapkErrorDataRecieved; + + public event SignapkDataReceivedEventHandler SignapkOutputDataRecieved + { + add + { + onSignapkOutputDataRecieved += value; + } + remove + { + onSignapkOutputDataRecieved -= value; + } + } + public event SignapkDataReceivedEventHandler SignapkErrorDataRecieved + { + add + { + onSignapkErrorDataRecieved += value; + } + remove + { + onSignapkErrorDataRecieved -= value; + } + } + + string _jarPath; + public Signapk(string javaPath, string jarPath) + : base(javaPath, jarPath) + { + _jarPath = jarPath; + Exited += Signapk_Exited; + OutputDataReceived += Signapk_OutputDataReceived; + ErrorDataReceived += Signapk_ErrorDataReceived; + } + + private void Signapk_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (onSignapkErrorDataRecieved != null && e.Data != null) + onSignapkErrorDataRecieved(this, new SignapkDataReceivedEventArgs(e.Data)); + } + + private void Signapk_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (onSignapkOutputDataRecieved != null && e.Data != null) + onSignapkOutputDataRecieved(this, new SignapkDataReceivedEventArgs(e.Data)); + } + + private void Signapk_Exited(object sender, EventArgs e) + { + if (Exited != null) + Exited(this, new SignapkExitedEventArgs(base.ExitCode, lastSourceApk, lastOutApk)); + } + + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("java")) + { + using (process) + { + if (process.Id == Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)Id); + process.Kill(); + } + } + } + } + catch (InvalidOperationException ex) + { + Debug.WriteLine($"[Signapk] Process already exited: {ex.Message}"); + } + catch (System.ComponentModel.Win32Exception ex) + { + Debug.WriteLine($"[Signapk] Failed to access process: {ex.Message}"); + } + catch (Exception ex) + { + Debug.WriteLine($"[Signapk] Failed to cancel process: {ex.Message}"); + } + } + + public int Sign(string input, string output) + { + lastSourceApk = input; + lastOutApk = Settings.Default.Sign_OutputDir; + + //--key : pk file | --cert : pem + string key = String.Format("--key \"{0}\" --cert \"{1}\"", Settings.Default.Sign_PrivateKey, Settings.Default.Sign_PublicKey); + if (Settings.Default.Sign_UseKeystoreFile) + key = String.Format("--ks \"{0}\" --ks-pass pass:{1}", Settings.Default.Sign_KeystoreFilePath, Settings.Default.Sign_KeystorePassword); + + string alias = String.Format("--ks-key-alias CERT"); + if (Settings.Default.Sign_SetAlias) + alias = String.Format("--ks-key-alias {0}", Settings.Default.Sign_Alias); + + string outputDir = null; + if (Settings.Default.Sign_UseOutputDir || !Settings.Default.Sign_OverwriteInputFile) + outputDir = String.Format("--out \"{0}\"", output); + + string v1 = null; + if (Settings.Default.Sign_Schemev1 == 1) + v1 = "--v1-signing-enabled true"; + if (Settings.Default.Sign_Schemev1 == 2) + v1 = "--v1-signing-enabled false"; + + string v2 = null; + if (Settings.Default.Sign_Schemev2 == 1) + v2 = "--v2-signing-enabled true"; + if (Settings.Default.Sign_Schemev2 == 2) + v2 = "--v2-signing-enabled false"; + + string v3 = null; + if (Settings.Default.Sign_Schemev3 == 1) + v3 = "--v3-signing-enabled true"; + if (Settings.Default.Sign_Schemev3 == 2) + v3 = "--v3-signing-enabled false"; + + string v4 = null; + if (Settings.Default.Sign_Schemev4 == 1) + v4 = "--v4-signing-enabled true"; + if (Settings.Default.Sign_Schemev4 == 2) + v4 = "--v4-signing-enabled false"; + + string args = String.Format("sign {0} {1} {2} {3} {4} {5} {6} \"{7}\"", key, alias, v1, v2, v3, v4, outputDir, lastSourceApk); + + Log.v("Signapk CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + CancelOutputRead(); + CancelErrorRead(); + return ExitCode; + } + + public string GetSignature(string apkFile) + { + using (JarProcess apktoolJar = new JarProcess(JavaPath, JarPath)) + { + apktoolJar.EnableRaisingEvents = false; + apktoolJar.Start($"verify --print-certs \"{apkFile}\""); + string version = apktoolJar.StandardOutput.ReadToEnd(); + version += apktoolJar.StandardError.ReadToEnd(); + apktoolJar.WaitForExit(); + return version; + } + } + + public new void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected new virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + try + { + Cancel(); + } + catch (Exception ex) + { + Debug.WriteLine($"[Signapk] Error during disposal: {ex.Message}"); + } + finally + { + base.Dispose(); + } + } + disposed = true; + } + } + + ~Signapk() + { + Dispose(false); + } + } + + public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e); + + public class SignapkExitedEventArgs : EventArgs + { + public SignapkExitedEventArgs(int exitCode, string sourceFilePath, string outFilePath) + { + ExitCode = exitCode; + SourceFilePath = sourceFilePath; + OutFilePath = outFilePath; + } + + public int ExitCode { get; private set; } + + public string SourceFilePath { get; private set; } + + public string OutFilePath { get; private set; } + } + + public delegate void SignapkDataReceivedEventHandler(Object sender, SignapkDataReceivedEventArgs e); + + public class SignapkDataReceivedEventArgs : EventArgs + { + string message; + + public SignapkDataReceivedEventArgs(string _data) + { + message = _data; + } + public String Message + { + get + { + return message; + } + } + } +} diff --git a/APKToolGUI/ApkTool/Smali.cs b/APKToolGUI/ApkTool/Smali.cs new file mode 100644 index 0000000..d67932c --- /dev/null +++ b/APKToolGUI/ApkTool/Smali.cs @@ -0,0 +1,181 @@ +using System; +using Java; +using System.Diagnostics; +using APKToolGUI.Properties; +using System.IO; +using APKToolGUI.Utils; + +namespace APKToolGUI +{ + public class Smali : JarProcess, IDisposable + { + private bool disposed = false; + + public new event SmaliExitedEventHandler Exited; + + string _jarPath; + public Smali(string javaPath, string jarPath) + : base(javaPath, jarPath) + { + _jarPath = jarPath; + base.Exited += Smali_Exited; + } + + SmaliDataReceivedEventHandler onSmaliOutputDataRecieved; + SmaliDataReceivedEventHandler onSmaliErrorDataRecieved; + + public event SmaliDataReceivedEventHandler SmaliOutputDataRecieved + { + add + { + onSmaliOutputDataRecieved += value; + } + remove + { + onSmaliOutputDataRecieved -= value; + } + } + public event SmaliDataReceivedEventHandler SmaliErrorDataRecieved + { + add + { + onSmaliErrorDataRecieved += value; + } + remove + { + onSmaliErrorDataRecieved -= value; + } + } + + + private void Smali_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (onSmaliErrorDataRecieved != null && e.Data != null) + onSmaliErrorDataRecieved(this, new SmaliDataReceivedEventArgs(e.Data)); + } + + private void Smali_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (onSmaliOutputDataRecieved != null && e.Data != null) + onSmaliOutputDataRecieved(this, new SmaliDataReceivedEventArgs(e.Data)); + } + void Smali_Exited(object sender, EventArgs e) + { + if (Exited != null) + Exited(this, new SmaliExitedEventArgs(ExitCode)); + } + + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("java")) + { + using (process) + { + if (process.Id == Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)Id); + process.Kill(); + } + } + } + } + catch (InvalidOperationException ex) + { + Debug.WriteLine($"[Smali] Process already exited: {ex.Message}"); + } + catch (System.ComponentModel.Win32Exception ex) + { + Debug.WriteLine($"[Smali] Failed to access process: {ex.Message}"); + } + catch (Exception ex) + { + Debug.WriteLine($"[Smali] Failed to cancel process: {ex.Message}"); + } + } + + public int Assemble(string input, string output) + { + string inputFile = String.Format("\"{0}\"", input); + string keyOutputDir = String.Format("-o \"{0}\"", output); + + string args = String.Format("a {0} {1}", inputFile, keyOutputDir); + + Log.v("Smali CMD: " + _jarPath + " " + args); + + Start(args); + BeginOutputReadLine(); + BeginErrorReadLine(); + WaitForExit(); + CancelOutputRead(); + CancelErrorRead(); + return ExitCode; + } + + public new void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected new virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + try + { + Cancel(); + } + catch (Exception ex) + { + Debug.WriteLine($"[Smali] Error during disposal: {ex.Message}"); + } + finally + { + base.Dispose(); + } + } + disposed = true; + } + } + + ~Smali() + { + Dispose(false); + } + } + + public class SmaliExitedEventArgs : EventArgs + { + public SmaliExitedEventArgs(int exitCode) + { + ExitCode = exitCode; + } + + public int ExitCode { get; private set; } + } + + public delegate void SmaliExitedEventHandler(object sender, SmaliExitedEventArgs e); + + public delegate void SmaliDataReceivedEventHandler(Object sender, SmaliDataReceivedEventArgs e); + + public class SmaliDataReceivedEventArgs : EventArgs + { + string message; + + public SmaliDataReceivedEventArgs(string _data) + { + message = _data; + } + public String Message + { + get + { + return message; + } + } + } +} diff --git a/APKToolGUI/ApkTool/Zipalign.cs b/APKToolGUI/ApkTool/Zipalign.cs new file mode 100644 index 0000000..2a84b63 --- /dev/null +++ b/APKToolGUI/ApkTool/Zipalign.cs @@ -0,0 +1,216 @@ +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using System; +using System.Diagnostics; +using System.IO; + +namespace APKToolGUI +{ + public class Zipalign : IDisposable + { + Process processZipalign; + private bool disposed = false; + + static class Keys + { + public const string CheckOnly = " -c"; + public const string OverwriteOutputFile = " -f"; + public const string VerboseOut = " -v"; + public const string Recompress = " -z"; + } + + public event DataReceivedEventHandler OutputDataReceived + { + add { processZipalign.OutputDataReceived += value; } + remove { processZipalign.OutputDataReceived -= value; } + } + public event DataReceivedEventHandler ErrorDataReceived + { + add { processZipalign.ErrorDataReceived += value; } + remove { processZipalign.ErrorDataReceived -= value; } + } + public event EventHandler Exited; + public int ExitCode { get { return processZipalign.ExitCode; } } + + string _zipalignFileName; + public Zipalign(string zipalignFileName) + { + _zipalignFileName = zipalignFileName; + processZipalign = new Process(); + processZipalign.EnableRaisingEvents = true; + processZipalign.StartInfo.FileName = zipalignFileName; + processZipalign.StartInfo.UseShellExecute = false; // Disable shell execution to read output data + processZipalign.StartInfo.RedirectStandardOutput = true; // Allow output redirection + processZipalign.StartInfo.RedirectStandardError = true; // Allow error redirection + processZipalign.StartInfo.CreateNoWindow = true; // Do not create window for the launched program + processZipalign.Exited += processZipalign_Exited; + } + + void processZipalign_Exited(object sender, EventArgs e) + { + processZipalign.CancelOutputRead(); + processZipalign.CancelErrorRead(); + if (this.Exited != null) + Exited(this, new EventArgs()); + } + + public void Cancel() + { + try + { + foreach (var process in Process.GetProcessesByName("zipalign")) + { + using (process) + { + if (process.Id == processZipalign.Id) + { + ProcessUtils.KillAllProcessesSpawnedBy((uint)processZipalign.Id); + process.Kill(); + } + } + } + } + catch (Exception ex) + { + Debug.WriteLine($"[Zipalign] Cancel failed: {ex.Message}"); + // Process termination failure is not critical, so continue + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + if (processZipalign != null) + { + try + { + if (!processZipalign.HasExited) + { + processZipalign.Kill(); + } + } + catch (Exception ex) + { + Debug.WriteLine($"[Zipalign] Error disposing process: {ex.Message}"); + } + finally + { + processZipalign.Dispose(); + processZipalign = null; + } + } + } + disposed = true; + } + } + + ~Zipalign() + { + Dispose(false); + } + + public int Align(string input, string output) + { + string keyCheckOnly = null, keyVerbose = null, keyRecompress = null, keyOverwriteOutputFile = null, keyOutputFile = null; + + if (Settings.Default.Zipalign_Verbose) + keyVerbose = Keys.VerboseOut; + if (Settings.Default.Zipalign_CheckOnly) + { + keyCheckOnly = Keys.CheckOnly; + } + else + { + if (Settings.Default.Zipalign_Recompress) + keyRecompress = Keys.Recompress; + if (Settings.Default.Zipalign_OverwriteOutputFile) + { + keyOverwriteOutputFile = Keys.OverwriteOutputFile; + } + //if (Settings.Default.Zipalign_OverwriteOutputFile) + keyOutputFile = String.Format(" \"{0}\"", PathUtils.GetDirectoryNameWithoutExtension(output) + "_align_temp.apk"); + //else + // keyOutputFile = String.Format(" \"{0}\"", output); + } + + string args = String.Format("{0}{1}{2}{3} {4} \"{5}\" {6}", keyCheckOnly, keyOverwriteOutputFile, keyVerbose, keyRecompress, Settings.Default.Zipalign_AlignmentInBytes, input, keyOutputFile); + + Log.v("Zipalign: " + _zipalignFileName + " " + args); + + processZipalign.StartInfo.Arguments = args; + processZipalign.Start(); + processZipalign.BeginOutputReadLine(); + processZipalign.BeginErrorReadLine(); + processZipalign.WaitForExit(); + + // Handle temp file (only when not in CheckOnly mode) + if (!Settings.Default.Zipalign_CheckOnly) + { + string tempFile = PathUtils.GetDirectoryNameWithoutExtension(output) + "_align_temp.apk"; + + try + { + // 1. Delete output file + if (File.Exists(output)) + { + File.Delete(output); + Debug.WriteLine($"[Zipalign] Deleted existing output: {output}"); + } + + // 2. Check temp file existence and move + if (File.Exists(tempFile)) + { + File.Move(tempFile, output); + Debug.WriteLine($"[Zipalign] Moved temp file to output: {tempFile} -> {output}"); + } + else + { + Debug.WriteLine($"[Zipalign] Warning: Temp file not found: {tempFile}"); + return 1; // Return failure code + } + } + catch (IOException ex) + { + Debug.WriteLine($"[Zipalign] Failed to process output file: {ex.Message}"); + + // Attempt to cleanup temp file + try + { + if (File.Exists(tempFile)) + { + File.Delete(tempFile); + Debug.WriteLine($"[Zipalign] Cleaned up temp file: {tempFile}"); + } + } + catch (Exception cleanupEx) + { + Debug.WriteLine($"[Zipalign] Failed to cleanup temp file: {cleanupEx.Message}"); + } + + return 1; + } + catch (UnauthorizedAccessException ex) + { + Debug.WriteLine($"[Zipalign] Access denied: {ex.Message}"); + return 1; + } + catch (Exception ex) + { + Debug.WriteLine($"[Zipalign] Unexpected error processing output: {ex.Message}"); + return 1; + } + } + + return ExitCode; + } + } +} diff --git a/APKToolGUI/Apktool.cs b/APKToolGUI/Apktool.cs deleted file mode 100644 index 0b4f055..0000000 --- a/APKToolGUI/Apktool.cs +++ /dev/null @@ -1,554 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Text.RegularExpressions; -using Java; - -namespace APKToolGUI -{ - public class Apktool : JarProcess - { - enum ApktoolActionType - { - Decompile, - Build, - InstallFramework, - Null - } - static class DecompileKeys - { - public const string NoSource = " -s"; - public const string NoResource = " -r"; - public const string Force = " -f"; - public const string FrameworkPath = " -p"; - public const string KeepBrokenResource = " -k"; - public const string MatchOriginal = " -m"; - public const string OutputDir = " -o"; - } - static class BuildKeys - { - public const string ForceAll = " -f"; - public const string CopyOriginal = " -c"; - public const string Aapt = " -a"; - public const string FrameworkPath = " -p"; - public const string OutputAppPath = " -o"; - } - static class InstallFrameworkKeys - { - public const string FrameDir = " -p"; - public const string Tag = " -t"; - } - ApktoolActionType lastActionType = ApktoolActionType.Null; - string lastFilePath; - string lastProjectDir; - ApktoolDataReceivedEventHandler onApktoolOutputDataRecieved; - ApktoolDataReceivedEventHandler onApktoolErrorDataRecieved; - ApktoolEventCompletedEventHandler onBuildCompleted; - ApktoolEventCompletedEventHandler onDecompilingCompleted; - ApktoolEventCompletedEventHandler onInstallFrameworkCompleted; - - public event ApktoolDataReceivedEventHandler ApktoolOutputDataRecieved - { - add - { - onApktoolOutputDataRecieved += value; - } - remove - { - onApktoolOutputDataRecieved -= value; - } - } - public event ApktoolDataReceivedEventHandler ApktoolErrorDataRecieved - { - add - { - onApktoolErrorDataRecieved += value; - } - remove - { - onApktoolErrorDataRecieved -= value; - } - } - - public event ApktoolEventCompletedEventHandler BuildCompleted - { - add - { - onBuildCompleted += value; - } - remove - { - onBuildCompleted -= value; - } - } - public event ApktoolEventCompletedEventHandler DecompilingCompleted - { - add - { - onDecompilingCompleted += value; - } - remove - { - onDecompilingCompleted -= value; - } - } - public event ApktoolEventCompletedEventHandler InstallFrameworkCompleted - { - add - { - onInstallFrameworkCompleted += value; - } - remove - { - onInstallFrameworkCompleted -= value; - } - } - - public Apktool(string javaPath, string jarPath) : base(javaPath, jarPath) - { - this.Exited += Apktool_Exited; - this.OutputDataReceived += Apktool_OutputDataReceived; - this.ErrorDataReceived += Apktool_ErrorDataReceived; - } - - private void Apktool_ErrorDataReceived(object sender, DataReceivedEventArgs e) - { - if (onApktoolErrorDataRecieved != null && e.Data != null) - onApktoolErrorDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data)); - } - - private void Apktool_OutputDataReceived(object sender, DataReceivedEventArgs e) - { - if (onApktoolOutputDataRecieved != null && e.Data != null) - onApktoolOutputDataRecieved(this, new ApktoolDataReceivedEventArgs(e.Data)); - } - - private void Apktool_Exited(object sender, EventArgs e) - { - this.CancelOutputRead(); - this.CancelErrorRead(); - switch (lastActionType) - { - case ApktoolActionType.Build: - if (onBuildCompleted != null) - onBuildCompleted(this, new ApktoolEventCompletedEventArgs(this.ExitCode, lastFilePath, lastProjectDir)); - lastActionType = ApktoolActionType.Null; - break; - case ApktoolActionType.Decompile: - if (onDecompilingCompleted != null) - onDecompilingCompleted(this, new ApktoolEventCompletedEventArgs(this.ExitCode, lastFilePath, lastProjectDir)); - lastActionType = ApktoolActionType.Null; - break; - case ApktoolActionType.InstallFramework: - if (onInstallFrameworkCompleted != null) - onInstallFrameworkCompleted(this, new ApktoolEventCompletedEventArgs(this.ExitCode, lastFilePath, lastProjectDir)); - lastActionType = ApktoolActionType.Null; - break; - case ApktoolActionType.Null: - break; - default: - break; - } - } - - public bool Decompile(DecompileOptions options) - { - lastActionType = ApktoolActionType.Decompile; - lastFilePath = options.AppPath; - lastProjectDir = options.OutputDirectory; - - string keyNoSrc = null, keyNoRes = null, keyForce = null, keyFramePath = null, keyKeepBrokenRes = null, keyMatchOriginal = null, keyOutputDir = null; - - if (options.NoSource) - keyNoSrc = DecompileKeys.NoSource; - if (options.NoResource) - keyNoRes = DecompileKeys.NoResource; - if (options.Force) - keyForce = DecompileKeys.Force; - if (options.KeepBrokenResource) - keyKeepBrokenRes = DecompileKeys.KeepBrokenResource; - if (options.MatchOriginal) - keyMatchOriginal = DecompileKeys.MatchOriginal; - if (!String.IsNullOrWhiteSpace(options.FrameworkPath)) - keyFramePath = String.Format("{0} \"{1}\"", DecompileKeys.FrameworkPath, options.FrameworkPath); - if (!String.IsNullOrWhiteSpace(options.OutputDirectory)) - keyOutputDir = String.Format("{0} \"{1}\"", DecompileKeys.OutputDir, options.OutputDirectory); - - //string args = String.Format("d{0}{1}{2}{3}{4}{5} -o \"{6}\" \"{7}\"", keyNoSrc, keyNoRes, keyForce, keyKeepBrokenRes, keyMatchOriginal, keyFramePath, options.ProjectDirectory, options.AppPath); - string args = String.Format("d{0}{1}{2}{3}{4}{5}{6} \"{7}\"", keyNoSrc, keyNoRes, keyForce, keyKeepBrokenRes, keyMatchOriginal, keyFramePath, keyOutputDir, options.AppPath); - - bool started = this.Start(args); - this.BeginOutputReadLine(); - this.BeginErrorReadLine(); - return started; - } - - public bool Build(BuildOptions options) - { - lastActionType = ApktoolActionType.Build; - lastFilePath = options.AppPath; - lastProjectDir = options.ProjectDirectory; - - string keyForceAll = null, keyAapt = null, keyCopyOriginal = null, keyFramePath = null, keyOutputAppPath = null; - if (options.ForceAll) - keyForceAll = BuildKeys.ForceAll; - if (options.CopyOriginal) - keyCopyOriginal = BuildKeys.CopyOriginal; - if (!String.IsNullOrEmpty(options.AaptPath)) - keyAapt = String.Format("{0} \"{1}\"", BuildKeys.Aapt, options.AaptPath); - if (!String.IsNullOrEmpty(options.FrameworkPath)) - keyFramePath = String.Format("{0} \"{1}\"", BuildKeys.FrameworkPath, options.FrameworkPath); - if (!String.IsNullOrWhiteSpace(options.AppPath)) - keyOutputAppPath = String.Format("{0} \"{1}\"", BuildKeys.OutputAppPath, options.AppPath); - - string args = String.Format("b{0}{1}{2}{3}{4} \"{5}\"", keyForceAll, keyAapt, keyCopyOriginal, keyFramePath, keyOutputAppPath, options.ProjectDirectory); - - bool started = this.Start(args); - this.BeginOutputReadLine(); - this.BeginErrorReadLine(); - return started; - } - - public bool InstallFramework(InstallFrameworkOptions options) - { - lastActionType = ApktoolActionType.InstallFramework; - lastFilePath = options.InputFramePath; - lastProjectDir = null; - - string keyFrameDir = null, keyTag = null; - - if (!String.IsNullOrWhiteSpace(options.FrameDir)) - keyFrameDir = String.Format("{0} \"{1}\"", InstallFrameworkKeys.FrameDir, options.FrameDir); - if (!String.IsNullOrWhiteSpace(options.Tag)) - keyTag = String.Format("{0} \"{1}\"", InstallFrameworkKeys.Tag, options.Tag); - - string args = String.Format("if{0}{1} \"{2}\"", keyFrameDir, keyTag, options.InputFramePath); - - bool started = this.Start(args); - this.BeginOutputReadLine(); - this.BeginErrorReadLine(); - return started; - } - - public string GetVersion() - { - using (JarProcess apktoolJar = new JarProcess(this.JavaPath, this.JarPath)) - { - apktoolJar.EnableRaisingEvents = false; - apktoolJar.Start("-version"); - string version = apktoolJar.StandardOutput.ReadToEnd(); - apktoolJar.WaitForExit(3000); - return version; - } - } - - private static ApktoolEventType GetEventType(string message) - { - MatchCollection mCol = Regex.Matches(message, @"^(\w+):\s(.+)$"); - if (mCol.Count > 0) - { - switch (mCol[0].Groups[1].Value) - { - case "W": - return ApktoolEventType.Warning; - case "Warning": - return ApktoolEventType.Warning; - case "I": - return ApktoolEventType.Information; - case "Error": - return ApktoolEventType.Error; - case "E": - return ApktoolEventType.Error; - default: - return ApktoolEventType.Unknown; - } - } - else - return ApktoolEventType.Unknown; - } - } - - public delegate void ApktoolEventCompletedEventHandler(Object sender, ApktoolEventCompletedEventArgs e); - - public class ApktoolEventCompletedEventArgs : EventArgs - { - private int _exitCode; - private string _filePath; - private string _projectDir; - - public ApktoolEventCompletedEventArgs(int exitCode, string filePath, string projectDir) - { - _exitCode = exitCode; - _filePath = filePath; - _projectDir = projectDir; - } - - public int ExitCode - { - get - { - return _exitCode; - } - } - public string FilePath - { - get - { - return _filePath; - } - } - public string ProjectDir - { - get - { - return _projectDir; - } - } - } - - public delegate void ApktoolDataReceivedEventHandler(Object sender, ApktoolDataReceivedEventArgs e); - - public class ApktoolDataReceivedEventArgs : EventArgs - { - string data; - string message; - ApktoolEventType eventType; - - public ApktoolDataReceivedEventArgs(string data) - { - this.data = data; - SetData(); - } - public String Message{ - get{ - return message;}} - public ApktoolEventType EventType{ - get{ - return eventType;}} - - private void SetData() - { - MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$"); - if (mCol.Count > 0) - { - switch (mCol[0].Groups[1].Value) - { - case "W": - eventType = ApktoolEventType.Warning; - message = mCol[0].Groups[2].Value; - break; - case "Warning": - eventType = ApktoolEventType.Warning; - message = mCol[0].Groups[2].Value; - break; - case "I": - eventType = ApktoolEventType.Information; - message = mCol[0].Groups[2].Value; - break; - case "Error": - eventType = ApktoolEventType.Error; - message = mCol[0].Groups[2].Value; - break; - case "E": - eventType = ApktoolEventType.Error; - message = mCol[0].Groups[2].Value; - break; - default: - eventType = ApktoolEventType.Unknown; - message = data; - break; - } - } - else - { - eventType = ApktoolEventType.Unknown; - message = data; - } - } - } - - public enum ApktoolEventType - { - Information, - Warning, - Error, - Unknown - } - - public class BuildOptions - { - public BuildOptions(string projectDir) - { - this.ProjectDirectory = projectDir; - } - //public BuildOptions(string projectDir, string apkPath) - //{ - // this.ProjectDirectory = projectDir; - // this.AppPath = apkPath; - //} - public string ProjectDirectory { get; set; } - /// - /// The name of apk that gets written. - /// - public string AppPath { get; set; } - /// - /// Loads aapt from specified location. - /// - public string AaptPath { get; set; } - /// - /// Skip changes detection and build all files. - /// - public bool ForceAll { get; set; } - /// - /// Copies original AndroidManifest.xml and META-INF. - /// - public bool CopyOriginal { get; set; } - /// - /// Uses framework files located in dir. - /// - public string FrameworkPath { get; set; } - } - - public class DecompileOptions - { - public DecompileOptions(string apkPath) - { - this.AppPath = apkPath; - this.OutputDirectory = String.Format("{0}\\{1}", System.IO.Path.GetDirectoryName(apkPath), System.IO.Path.GetFileNameWithoutExtension(apkPath)); - } - /// - /// The name of folder that gets written. - /// - public string OutputDirectory { get; set; } - public string AppPath { get; set; } - /// - /// Do not decode sources. - /// - public bool NoSource { get; set; } - /// - /// Do not decode resources. - /// - public bool NoResource { get; set; } - /// - /// Force delete destination directory. - /// - public bool Force { get; set; } - /// - /// Uses framework files located in dir. - /// - public string FrameworkPath { get; set; } - /// - /// Use if there was an error and some resourceswere dropped, e.g."Invalid config flags detected. Dropping resources", - /// but you want to decode them anyway, even with errors. You will have to fix them manually before building. - /// - public bool KeepBrokenResource { get; set; } - /// - /// Keeps files to closest to original as possible. Prevents rebuild. - /// - public bool MatchOriginal { get; set; } - } - - public class InstallFrameworkOptions - { - public InstallFrameworkOptions(string framePath) - { - this.InputFramePath = framePath; - } - public string InputFramePath { get; set; } - /// - /// Stores framework files into directory - /// - public string FrameDir { get; set; } - /// - /// Frameworks tag - /// - public string Tag { get; set; } - } - - //public class ApktoolMessage - //{ - // public ApktoolEventType EventType { get; private set; } - // public string Message { get; private set; } - // private string data; - - // public ApktoolMessage(string data) - // { - // this.data = data; - // SetData(); - // } - - // private void SetData() - // { - // MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$"); - // if (mCol.Count > 0) - // { - // switch (mCol[0].Groups[1].Value) - // { - // case "W": - // this.EventType = ApktoolEventType.Warning; - // this.Message = mCol[0].Groups[2].Value; - // break; - // case "Warning": - // this.EventType = ApktoolEventType.Warning; - // this.Message = mCol[0].Groups[2].Value; - // break; - // case "I": - // this.EventType = ApktoolEventType.Information; - // this.Message = mCol[0].Groups[2].Value; - // break; - // case "Error": - // this.EventType = ApktoolEventType.Error; - // this.Message = mCol[0].Groups[2].Value; - // break; - // case "E": - // this.EventType = ApktoolEventType.Error; - // this.Message = mCol[0].Groups[2].Value; - // break; - // default: - // this.EventType = ApktoolEventType.Unknown; - // this.Message = data; - // break; - // } - // } - // else - // { - // this.EventType = ApktoolEventType.Unknown; - // this.Message = data; - // } - // } - - // public static ApktoolEventType GetEventType(string data) - // { - // MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$"); - // if (mCol.Count > 0) - // { - // switch (mCol[0].Groups[1].Value) - // { - // case "W": - // return ApktoolEventType.Warning; - // case "Warning": - // return ApktoolEventType.Warning; - // case "I": - // return ApktoolEventType.Information; - // case "Error": - // return ApktoolEventType.Error; - // case "E": - // return ApktoolEventType.Error; - // default: - // return ApktoolEventType.Unknown; - // } - // } - // else - // return ApktoolEventType.Unknown; - // } - - // public static string GetMessage(string data) - // { - // MatchCollection mCol = Regex.Matches(data, @"^(\w+):\s(.+)$"); - // if (mCol.Count > 0) - // return mCol[0].Groups[2].Value; - // else - // return data; - // } - //} -} diff --git a/APKToolGUI/Controls/DarkTheme.cs b/APKToolGUI/Controls/DarkTheme.cs new file mode 100644 index 0000000..10e2886 --- /dev/null +++ b/APKToolGUI/Controls/DarkTheme.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls.Primitives; +using System.Windows.Forms; + +namespace APKToolGUI.Controls +{ + internal class DarkTheme + { + public static Color bgColor = Color.FromArgb(32, 32, 32); + public static Color txtBoxColor = Color.FromArgb(64, 64, 64); + public static Color btnColor = Color.FromArgb(51, 51, 51); + public static Color btnBorderColor = Color.FromArgb(155, 155, 155); + public static Color tabBorderColor = Color.FromArgb(45, 45, 45); + public static Color menuItemHoverColor = Color.FromArgb(51, 51, 51); + public static Color menuItemSelectedColor = Color.FromArgb(41, 41, 41); + public static Color separatorColor = Color.FromArgb(62, 62, 62); + + public static void SetTheme(Control.ControlCollection container, Form form) + { + form.BackColor = bgColor; + form.ForeColor = Color.White; + foreach (Control component in container) + { + Debug.WriteLine(component.GetType()); + component.BackColor = bgColor; + component.ForeColor = Color.White; + + SetThemeTabControl(component, container); + } + } + + public static void SetThemeTabControl(Control component, Control.ControlCollection container) + { + if (component is SplitContainer) + { + foreach (Control control in component.Controls) + { + SetThemeTabControl(control, container); + } + } + if (component is TabControl) + { + ((TabControl)component).DrawMode = TabDrawMode.OwnerDrawFixed; + + foreach (Control tabControl in component.Controls) + { + SetThemeTabControl(tabControl, container); + + //Debug.WriteLine("tabPage " + tabControl.GetType()); + + ((TabControl)component).DrawItem += (sender, e) => + { + // Set Border header + e.Graphics.FillRectangle(new SolidBrush(tabBorderColor), e.Bounds); + Rectangle paddedBounds = e.Bounds; + + paddedBounds.Inflate(0, 0); + + // Set the rectangle for the tab button + Rectangle tabRect = ((TabControl)component).GetTabRect(e.Index); + + // Draw the border color + using (Pen borderPen = new Pen(tabBorderColor, 7)) + { + e.Graphics.DrawRectangle(borderPen, tabRect); + } + + StringFormat stringFlags = new StringFormat(); + stringFlags.Alignment = StringAlignment.Center; + stringFlags.LineAlignment = StringAlignment.Center; + + e.Graphics.DrawString(((TabControl)component).TabPages[e.Index].Text, FormMain.Instance.Font, SystemBrushes.HighlightText, tabRect, stringFlags); + + //set Tabcontrol border + Graphics g = e.Graphics; + Pen p = new Pen(tabBorderColor, 8); + g.DrawRectangle(p, tabControl.Bounds.X, tabControl.Bounds.Y, tabControl.Bounds.Width, tabControl.Bounds.Height); + + SolidBrush fillbrush = new SolidBrush(bgColor); + + //draw rectangle behind the tabs + Rectangle lasttabrect = ((TabControl)component).GetTabRect(((TabControl)component).TabPages.Count - 1); + Rectangle background = new Rectangle(); + background.Location = new Point(lasttabrect.Right, 0); + + //pad the rectangle to cover the 1 pixel line between the top of the tabpage and the start of the tabs + background.Size = new Size(((TabControl)component).Right - background.Left, lasttabrect.Height + 1); + e.Graphics.FillRectangle(fillbrush, background); + }; + + foreach (Control tabPage in tabControl.Controls) + { + SetThemeTabControl(tabPage, container); + } + } + } + else if (component is Panel) + { + foreach (Control control in component.Controls) + { + SetThemeTabControl(control, container); + } + component.BackColor = bgColor; + component.ForeColor = Color.White; + } + if (component is MenuStrip menuStrip) + { + ((MenuStrip)component).Renderer = new ToolStripProfessionalRenderer(new MenuItemColorTable()); + + foreach (ToolStripItem item in menuStrip.Items) + { + if (item is ToolStripMenuItem toolStripMenuItem) + { + foreach (ToolStripMenuItem dditem in toolStripMenuItem.DropDownItems.OfType()) + { + dditem.BackColor = bgColor; + dditem.ForeColor = Color.White; + //Debug.WriteLine(dditem.Text); + } + foreach (ToolStripSeparator toolStripSeparator in toolStripMenuItem.DropDownItems.OfType()) + { + toolStripSeparator.BackColor = Color.Blue; + toolStripSeparator.ForeColor = Color.Blue; + Debug.WriteLine(toolStripSeparator.Name); + } + + toolStripMenuItem.BackColor = bgColor; + toolStripMenuItem.ForeColor = Color.White; + } + } + } + else if (component is GroupBox) + { + foreach (Control control in component.Controls) + { + SetThemeTabControl(control, container); + } + component.BackColor = bgColor; + component.ForeColor = Color.White; + } + else if (component is ComboBox) + { + component.BackColor = bgColor; + component.ForeColor = Color.White; + ((ComboBox)component).FlatStyle = FlatStyle.Flat; + } + else if (component is Button) + { + component.BackColor = btnColor; + component.ForeColor = Color.White; + ((Button)component).FlatStyle = FlatStyle.Flat; + ((Button)component).FlatAppearance.BorderColor = btnBorderColor; + + } + else if (component is TextBox) + { + component.BackColor = txtBoxColor; + component.ForeColor = Color.White; + ((TextBox)component).BorderStyle = BorderStyle.FixedSingle; + } + else if (component is RichTextBox) + { + if (component.Name == "logTxtBox") + ((RichTextBox)component).BorderStyle = BorderStyle.None; + component.BackColor = bgColor; + component.ForeColor = Color.White; + } + else + { + component.BackColor = bgColor; + component.ForeColor = Color.White; + } + } + + public class MenuItemColorTable : ProfessionalColorTable + { + /// + /// Gets the starting color of the gradient used when + /// a top-level System.Windows.Forms.ToolStripMenuItem is pressed. + /// + public override Color MenuItemPressedGradientBegin => menuItemSelectedColor; + + /// + /// Gets the end color of the gradient used when a top-level + /// System.Windows.Forms.ToolStripMenuItem is pressed. + /// + public override Color MenuItemPressedGradientEnd => menuItemSelectedColor; + + /// + /// Gets the border color to use with a + /// System.Windows.Forms.ToolStripMenuItem. + /// + public override Color MenuItemBorder => menuItemSelectedColor; + + /// + /// Gets the starting color of the gradient used when the + /// System.Windows.Forms.ToolStripMenuItem is selected. + /// + public override Color MenuItemSelectedGradientBegin => menuItemSelectedColor; + + /// + /// Gets the end color of the gradient used when the + /// System.Windows.Forms.ToolStripMenuItem is selected. + /// + public override Color MenuItemSelectedGradientEnd => menuItemSelectedColor; + + /// + /// Gets the border color to use with a + /// System.Windows.Forms.ToolStripMenuItem. + /// + public override Color MenuItemSelected => menuItemHoverColor; + + /// + /// Gets the solid background color of the + /// System.Windows.Forms.ToolStripDropDown. + /// + public override Color ToolStripDropDownBackground => bgColor; + + /// + /// Gets the starting color of the gradient used in the image + /// margin of a System.Windows.Forms.ToolStripDropDownMenu. + /// + public override Color ImageMarginGradientBegin => bgColor; + + /// + /// Gets the middle color of the gradient used in the image + /// margin of a System.Windows.Forms.ToolStripDropDownMenu. + /// + public override Color ImageMarginGradientMiddle => bgColor; + + /// + /// Gets the end color of the gradient used in the image + /// margin of a System.Windows.Forms.ToolStripDropDownMenu. + /// + public override Color ImageMarginGradientEnd => bgColor; + + /// + /// Gets the color to use to for shadow effects on + /// the System.Windows.Forms.ToolStripSeparator. + /// + public override Color SeparatorDark => separatorColor; + + /// + /// Gets the color that is the border color to use + /// on a System.Windows.Forms.MenuStrip. + /// + public override Color MenuBorder => menuItemHoverColor; + } + } +} diff --git a/APKToolGUI/ExplorerContextMenu.cs b/APKToolGUI/ExplorerContextMenu.cs deleted file mode 100644 index 1d9dfb7..0000000 --- a/APKToolGUI/ExplorerContextMenu.cs +++ /dev/null @@ -1,228 +0,0 @@ -using System; -using Microsoft.Win32; - -namespace APKToolGUI -{ - public class ExplorerContextMenu - { - public static Status Create() - { - string executablePath = System.Reflection.Assembly.GetExecutingAssembly().Location; - if (IsAdmin()) - { - if (Environment.OSVersion.Version >= new Version("6.0.0.0")) // Vista и новее - { - return CreateVistaAndLater(executablePath); - } - else if (Environment.OSVersion.Version < new Version("6.0.0.0") && Environment.OSVersion.Version >= new Version("5.1.0.0")) - { - return CreateXP(executablePath); - } - else - return new Status(false, "Unsupported OS"); - } - else - return new Status(false, "Administrator rights are required"); - } - - public static Status Remove() - { - if (Environment.OSVersion.Version >= new Version("6.0.0.0")) // Vista и новее - { - return RemoveVistaAndLater(); - } - else - { - if (Environment.OSVersion.Version < new Version("6.0.0.0") && Environment.OSVersion.Version >= new Version("5.1.0.0")) - { - return RemoveXP(); - } - else - return new Status(false, "Unsupported OS"); - } - } - - public static bool IsAdmin() - { - System.Security.Principal.WindowsIdentity id = System.Security.Principal.WindowsIdentity.GetCurrent(); - System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(id); - - return p.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator); - } - - private static Status CreateVistaAndLater(string executablePath) - { - try - { - #region Add context menu to registry - - RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree); - apkToolGUIFolderShell.SetValue("Icon", executablePath); - apkToolGUIFolderShell.SetValue("MUIVerb", "APKToolGUI"); - apkToolGUIFolderShell.SetValue("SubCommands", "APKToolGUI.Build"); - apkToolGUIFolderShell.Close(); - - Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".apk", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString); - RegistryKey shellAPK = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("APKToolGUI", RegistryKeyPermissionCheck.ReadWriteSubTree); - shellAPK.SetValue("Icon", "\"" + executablePath + "\""); - shellAPK.SetValue("MUIVerb", "APKToolGUI"); - shellAPK.SetValue("SubCommands", "APKToolGUI.Decompile;APKToolGUI.InstallFramework;APKToolGUI.Sign"); - shellAPK.Close(); - - #endregion - - #region Add command to registry - - RegistryKey shell; - if (Environment.Is64BitOperatingSystem) - shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); - else - shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); - - RegistryKey decompile = shell.CreateSubKey("APKToolGUI.Decompile", RegistryKeyPermissionCheck.ReadWriteSubTree); - decompile.SetValue("", Language.Decode, RegistryValueKind.String); - decompile.SetValue("Icon", executablePath, RegistryValueKind.String); - decompile.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"d\" \"%1\""); - decompile.Close(); - - RegistryKey installFramework = shell.CreateSubKey("APKToolGUI.InstallFramework", RegistryKeyPermissionCheck.ReadWriteSubTree); - installFramework.SetValue("", Language.InstallFramework, RegistryValueKind.String); - installFramework.SetValue("Icon", executablePath, RegistryValueKind.String); - installFramework.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"if\" \"%1\""); - installFramework.Close(); - - RegistryKey sign = shell.CreateSubKey("APKToolGUI.Sign", RegistryKeyPermissionCheck.ReadWriteSubTree); - sign.SetValue("", Language.Sign, RegistryValueKind.String); - sign.SetValue("Icon", executablePath, RegistryValueKind.String); - sign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"sign\" \"%1\""); - sign.Close(); - - RegistryKey build = shell.CreateSubKey("APKToolGUI.Build", RegistryKeyPermissionCheck.ReadWriteSubTree); - build.SetValue("", Language.Build, RegistryValueKind.String); - build.SetValue("Icon", executablePath, RegistryValueKind.String); - build.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"b\" \"%1\"", RegistryValueKind.String); - build.Close(); - - shell.Close(); - - #endregion - } - catch (Exception exc) - { - return new Status(false, exc.Message); - } - - return new Status(true, "Done!"); - } - - private static Status CreateXP(string executablePath) - { - try - { - RegistryKey folderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey("APKToolGUI.Build", RegistryKeyPermissionCheck.ReadWriteSubTree); - folderShell.SetValue("Icon", executablePath); - folderShell.SetValue("MUIVerb", Language.Build); - folderShell.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"b\" \"%1\"", RegistryValueKind.String); - folderShell.Close(); - - RegistryKey apk = Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(".apk", RegistryKeyPermissionCheck.ReadWriteSubTree); - apk.CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString); - RegistryKey shell = apk.CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree); - - RegistryKey decode = shell.CreateSubKey("APKToolGUI.Decode", RegistryKeyPermissionCheck.ReadWriteSubTree); - RegistryKey installFramework = shell.CreateSubKey("APKToolGUI.InstallFramework", RegistryKeyPermissionCheck.ReadWriteSubTree); - RegistryKey sign = shell.CreateSubKey("APKToolGUI.Sign", RegistryKeyPermissionCheck.ReadWriteSubTree); - - decode.SetValue("Icon", executablePath); - decode.SetValue("MUIVerb", Language.Decode); - decode.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"d\" \"%1\""); - decode.Close(); - - installFramework.SetValue("Icon", executablePath); - installFramework.SetValue("MUIVerb", Language.InstallFramework); - installFramework.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"if\" \"%1\""); - installFramework.Close(); - - sign.SetValue("Icon", executablePath); - sign.SetValue("MUIVerb", Language.Sign); - sign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"sign\" \"%1\""); - sign.Close(); - - shell.Close(); - apk.Close(); - } - catch (Exception exc) - { - return new Status(false, exc.Message); - } - - return new Status(true, "Done!"); - } - - private static Status RemoveVistaAndLater() - { - try - { - Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI", false); - - Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("DefaultIcon", false); - - Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKey("APKToolGUI", false); - - RegistryKey shell; - if (Environment.Is64BitOperatingSystem) - shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); - else - shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); - shell.DeleteSubKeyTree("APKToolGUI.Decompile", false); - shell.DeleteSubKeyTree("APKToolGUI.InstallFramework", false); - shell.DeleteSubKeyTree("APKToolGUI.Sign", false); - shell.DeleteSubKeyTree("APKToolGUI.Build", false); - shell.Close(); - } - catch (Exception exc) - { - return new Status(false, exc.Message); - } - - return new Status(true, "Done!"); - } - - private static Status RemoveXP() - { - try - { - Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.Build", false); - - Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("DefaultIcon", false); - - Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.Decode", false); - Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.InstallFramework", false); - Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI.Sign", false); - } - catch (Exception exc) - { - return new Status(false, exc.Message); - } - - return new Status(true, "Done!"); - } - - public class Status - { - public Status(bool result, string message) - { - Result = result; - Message = message; - } - public bool Result { get; set; } - public String Message { get; set; } - } - - public enum Action - { - Create, - Remove - } - } -} \ No newline at end of file diff --git a/APKToolGUI/FodyWeavers.xml b/APKToolGUI/FodyWeavers.xml new file mode 100644 index 0000000..dcd2f9f --- /dev/null +++ b/APKToolGUI/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/APKToolGUI/FodyWeavers.xsd b/APKToolGUI/FodyWeavers.xsd new file mode 100644 index 0000000..f2dbece --- /dev/null +++ b/APKToolGUI/FodyWeavers.xsd @@ -0,0 +1,176 @@ + + + + + + + + + + + + A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks + + + + + A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. + + + + + A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks + + + + + A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. + + + + + Obsolete, use UnmanagedWinX86Assemblies instead + + + + + A list of unmanaged X86 (32 bit) assembly names to include, delimited with line breaks. + + + + + Obsolete, use UnmanagedWinX64Assemblies instead. + + + + + A list of unmanaged X64 (64 bit) assembly names to include, delimited with line breaks. + + + + + A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with line breaks. + + + + + The order of preloaded assemblies, delimited with line breaks. + + + + + + This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. + + + + + Controls if .pdbs for reference assemblies are also embedded. + + + + + Controls if runtime assemblies are also embedded. + + + + + Controls whether the runtime assemblies are embedded with their full path or only with their assembly name. + + + + + Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. + + + + + As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. + + + + + The attach method no longer subscribes to the `AppDomain.AssemblyResolve` (.NET 4.x) and `AssemblyLoadContext.Resolving` (.NET 6.0+) events. + + + + + Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. + + + + + Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. + + + + + A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | + + + + + A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. + + + + + A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with | + + + + + A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |. + + + + + Obsolete, use UnmanagedWinX86Assemblies instead + + + + + A list of unmanaged X86 (32 bit) assembly names to include, delimited with |. + + + + + Obsolete, use UnmanagedWinX64Assemblies instead + + + + + A list of unmanaged X64 (64 bit) assembly names to include, delimited with |. + + + + + A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with |. + + + + + The order of preloaded assemblies, delimited with |. + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/APKToolGUI/FormAboutBox.resx b/APKToolGUI/FormAboutBox.resx deleted file mode 100644 index 8679789..0000000 --- a/APKToolGUI/FormAboutBox.resx +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 490, 265 - - - &ОК - - - tableLayoutPanel - - - - Fill - - - 2 - - - FormAboutBox - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 256, 26 - - - 256, 26 - - - 6, 3, 3, 3 - - - Center - - - - 21 - - - labelProductName - - - 6, 0, 3, 0 - - - 6 - - - 256, 26 - - - CenterParent - - - Version - - - textBoxDescription - - - 0 - - - MiddleLeft - - - 219, 259 - - - 12 - - - tableLayoutPanel - - - Bottom, Right - - - Both - - - linkLabel1 - - - labelVersion - - - tableLayoutPanel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 6, 13 - - - 2 - - - 256, 126 - - - Fill - - - MiddleLeft - - - 75, 23 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="logoPictureBox" Row="0" RowSpan="6" Column="0" ColumnSpan="1" /><Control Name="labelProductName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelVersion" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelCopyright" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="okButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="textBoxDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,46,0039,Percent,53,9961" /><Rows Styles="Percent,10,Percent,10,Percent,10,Percent,10,Percent,50,Percent,10" /></TableLayoutSettings> - - - 0 - - - labelCopyright - - - 412, 239 - - - $this - - - tableLayoutPanel - - - okButton - - - Fill - - - 25 - - - Description - - - 19 - - - 231, 78 - - - 0 - - - 6, 0, 3, 0 - - - tableLayoutPanel - - - 256, 26 - - - Product Name - - - 231, 107 - - - MiddleLeft - - - 23 - - - 4 - - - tableLayoutPanel - - - Fill - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 231, 0 - - - 231, 26 - - - 5 - - - Fill - - - 1 - - - 6, 0, 3, 0 - - - 6 - - - logoPictureBox - - - 231, 52 - - - CenterImage - - - 9, 9 - - - tableLayoutPanel - - - Fill - - - 3, 3 - - - 9, 9, 9, 9 - - - Copyright - - - Page - - - About - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MiddleLeft - - - 508, 283 - - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - 6, 0, 3, 0 - - - tableLayoutPanel - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 24 - - - True - - - 3 - - - True - - \ No newline at end of file diff --git a/APKToolGUI/FormBuild.Designer.cs b/APKToolGUI/FormBuild.Designer.cs deleted file mode 100644 index 35c82ad..0000000 --- a/APKToolGUI/FormBuild.Designer.cs +++ /dev/null @@ -1,381 +0,0 @@ -namespace APKToolGUI -{ - partial class FormBuild - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.toolStripStatusLabelStateImage = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabelStateText = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); - this.groupBoxOptions = new System.Windows.Forms.GroupBox(); - this.textBoxFrameworkPath = new System.Windows.Forms.TextBox(); - this.buttonBrowseFrameworkPath = new System.Windows.Forms.Button(); - this.checkBoxUseFramework = new System.Windows.Forms.CheckBox(); - this.checkBoxCopyOriginal = new System.Windows.Forms.CheckBox(); - this.textBoxAaptPath = new System.Windows.Forms.TextBox(); - this.buttonBrowseAaptPath = new System.Windows.Forms.Button(); - this.checkBoxCustomAapt = new System.Windows.Forms.CheckBox(); - this.checkBoxForceAll = new System.Windows.Forms.CheckBox(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.ColumnImage = new System.Windows.Forms.DataGridViewImageColumn(); - this.ColumnTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ColumnMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.buttonStart = new System.Windows.Forms.Button(); - this.openFileDialogBrowseAapt = new System.Windows.Forms.OpenFileDialog(); - this.saveFileDialogApk = new System.Windows.Forms.SaveFileDialog(); - this.folderBrowserDialogFrameworks = new System.Windows.Forms.FolderBrowserDialog(); - this.textBoxOutputApkPath = new System.Windows.Forms.TextBox(); - this.buttonBrowseOutputApk = new System.Windows.Forms.Button(); - this.statusStrip1.SuspendLayout(); - this.groupBoxOptions.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.SuspendLayout(); - // - // statusStrip1 - // - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripStatusLabelStateImage, - this.toolStripStatusLabelStateText, - this.toolStripProgressBar1}); - this.statusStrip1.Location = new System.Drawing.Point(0, 360); - this.statusStrip1.Margin = new System.Windows.Forms.Padding(0, 9, 0, 0); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(570, 22); - this.statusStrip1.TabIndex = 19; - this.statusStrip1.Text = "statusStrip1"; - // - // toolStripStatusLabelStateImage - // - this.toolStripStatusLabelStateImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripStatusLabelStateImage.Name = "toolStripStatusLabelStateImage"; - this.toolStripStatusLabelStateImage.Size = new System.Drawing.Size(0, 17); - this.toolStripStatusLabelStateImage.Text = "toolStripStatusLabel1"; - // - // toolStripStatusLabelStateText - // - this.toolStripStatusLabelStateText.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.toolStripStatusLabelStateText.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.toolStripStatusLabelStateText.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripStatusLabelStateText.Name = "toolStripStatusLabelStateText"; - this.toolStripStatusLabelStateText.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.toolStripStatusLabelStateText.Size = new System.Drawing.Size(453, 17); - this.toolStripStatusLabelStateText.Spring = true; - this.toolStripStatusLabelStateText.Text = "Done"; - this.toolStripStatusLabelStateText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // toolStripProgressBar1 - // - this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.toolStripProgressBar1.AutoSize = false; - this.toolStripProgressBar1.MarqueeAnimationSpeed = 50; - this.toolStripProgressBar1.Name = "toolStripProgressBar1"; - this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16); - this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; - // - // groupBoxOptions - // - this.groupBoxOptions.Controls.Add(this.textBoxFrameworkPath); - this.groupBoxOptions.Controls.Add(this.buttonBrowseFrameworkPath); - this.groupBoxOptions.Controls.Add(this.checkBoxUseFramework); - this.groupBoxOptions.Controls.Add(this.checkBoxCopyOriginal); - this.groupBoxOptions.Controls.Add(this.textBoxAaptPath); - this.groupBoxOptions.Controls.Add(this.buttonBrowseAaptPath); - this.groupBoxOptions.Controls.Add(this.checkBoxCustomAapt); - this.groupBoxOptions.Controls.Add(this.checkBoxForceAll); - this.groupBoxOptions.Location = new System.Drawing.Point(12, 200); - this.groupBoxOptions.Name = "groupBoxOptions"; - this.groupBoxOptions.Size = new System.Drawing.Size(546, 118); - this.groupBoxOptions.TabIndex = 28; - this.groupBoxOptions.TabStop = false; - this.groupBoxOptions.Text = "Options"; - // - // textBoxFrameworkPath - // - this.textBoxFrameworkPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "BUILD_FrameworkPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBoxFrameworkPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_UseFramework; - this.textBoxFrameworkPath.Location = new System.Drawing.Point(230, 90); - this.textBoxFrameworkPath.Name = "textBoxFrameworkPath"; - this.textBoxFrameworkPath.Size = new System.Drawing.Size(280, 22); - this.textBoxFrameworkPath.TabIndex = 17; - this.textBoxFrameworkPath.Text = global::APKToolGUI.Properties.Settings.Default.BUILD_FrameworkPath; - // - // buttonBrowseFrameworkPath - // - this.buttonBrowseFrameworkPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonBrowseFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.buttonBrowseFrameworkPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_UseFramework; - this.buttonBrowseFrameworkPath.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonBrowseFrameworkPath.Location = new System.Drawing.Point(512, 89); - this.buttonBrowseFrameworkPath.Name = "buttonBrowseFrameworkPath"; - this.buttonBrowseFrameworkPath.Size = new System.Drawing.Size(28, 24); - this.buttonBrowseFrameworkPath.TabIndex = 18; - this.buttonBrowseFrameworkPath.Text = "..."; - this.buttonBrowseFrameworkPath.UseVisualStyleBackColor = true; - this.buttonBrowseFrameworkPath.Click += new System.EventHandler(this.buttonBrowseFrameworkPath_Click); - // - // checkBoxUseFramework - // - this.checkBoxUseFramework.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_UseFramework; - this.checkBoxUseFramework.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxUseFramework.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxUseFramework.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxUseFramework.Location = new System.Drawing.Point(6, 91); - this.checkBoxUseFramework.Name = "checkBoxUseFramework"; - this.checkBoxUseFramework.Size = new System.Drawing.Size(218, 18); - this.checkBoxUseFramework.TabIndex = 16; - this.checkBoxUseFramework.Text = "Uses framework files located in"; - this.checkBoxUseFramework.UseVisualStyleBackColor = true; - // - // checkBoxCopyOriginal - // - this.checkBoxCopyOriginal.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxCopyOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_CopyOriginal; - this.checkBoxCopyOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_CopyOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxCopyOriginal.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxCopyOriginal.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxCopyOriginal.Location = new System.Drawing.Point(6, 43); - this.checkBoxCopyOriginal.Name = "checkBoxCopyOriginal"; - this.checkBoxCopyOriginal.Size = new System.Drawing.Size(534, 18); - this.checkBoxCopyOriginal.TabIndex = 15; - this.checkBoxCopyOriginal.Text = "Copies original AndroidManifest.xml and META-INF folder into built apk."; - this.checkBoxCopyOriginal.UseVisualStyleBackColor = true; - // - // textBoxAaptPath - // - this.textBoxAaptPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_CustomAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBoxAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "BUILD_AaptPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBoxAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_CustomAapt; - this.textBoxAaptPath.Location = new System.Drawing.Point(230, 66); - this.textBoxAaptPath.Name = "textBoxAaptPath"; - this.textBoxAaptPath.Size = new System.Drawing.Size(280, 22); - this.textBoxAaptPath.TabIndex = 13; - this.textBoxAaptPath.Text = global::APKToolGUI.Properties.Settings.Default.BUILD_AaptPath; - // - // buttonBrowseAaptPath - // - this.buttonBrowseAaptPath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonBrowseAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "BUILD_CustomAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.buttonBrowseAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.BUILD_CustomAapt; - this.buttonBrowseAaptPath.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonBrowseAaptPath.Location = new System.Drawing.Point(512, 65); - this.buttonBrowseAaptPath.Name = "buttonBrowseAaptPath"; - this.buttonBrowseAaptPath.Size = new System.Drawing.Size(28, 24); - this.buttonBrowseAaptPath.TabIndex = 14; - this.buttonBrowseAaptPath.Text = "..."; - this.buttonBrowseAaptPath.UseVisualStyleBackColor = true; - this.buttonBrowseAaptPath.Click += new System.EventHandler(this.buttonBsowseAaptPath_Click); - // - // checkBoxCustomAapt - // - this.checkBoxCustomAapt.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_CustomAapt; - this.checkBoxCustomAapt.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_CustomAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxCustomAapt.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxCustomAapt.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxCustomAapt.Location = new System.Drawing.Point(6, 67); - this.checkBoxCustomAapt.Name = "checkBoxCustomAapt"; - this.checkBoxCustomAapt.Size = new System.Drawing.Size(218, 18); - this.checkBoxCustomAapt.TabIndex = 12; - this.checkBoxCustomAapt.Text = "Uses aapt.exe located in"; - this.checkBoxCustomAapt.UseVisualStyleBackColor = true; - // - // checkBoxForceAll - // - this.checkBoxForceAll.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxForceAll.Checked = global::APKToolGUI.Properties.Settings.Default.BUILD_ForceAll; - this.checkBoxForceAll.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "BUILD_ForceAll", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxForceAll.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxForceAll.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxForceAll.Location = new System.Drawing.Point(6, 19); - this.checkBoxForceAll.Name = "checkBoxForceAll"; - this.checkBoxForceAll.Size = new System.Drawing.Size(534, 18); - this.checkBoxForceAll.TabIndex = 0; - this.checkBoxForceAll.Text = "Skip changes detection and build all files"; - this.checkBoxForceAll.UseVisualStyleBackColor = true; - // - // dataGridView1 - // - this.dataGridView1.AllowUserToAddRows = false; - this.dataGridView1.AllowUserToDeleteRows = false; - this.dataGridView1.AllowUserToResizeRows = false; - this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Window; - this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - this.dataGridView1.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; - this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - this.dataGridView1.ColumnHeadersHeight = 24; - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ColumnImage, - this.ColumnTime, - this.ColumnMessage}); - this.dataGridView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); - this.dataGridView1.Location = new System.Drawing.Point(12, 12); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.ReadOnly = true; - this.dataGridView1.RowHeadersVisible = false; - this.dataGridView1.RowTemplate.Height = 19; - this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView1.ShowEditingIcon = false; - this.dataGridView1.Size = new System.Drawing.Size(546, 182); - this.dataGridView1.TabIndex = 26; - // - // ColumnImage - // - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.NullValue = null; - this.ColumnImage.DefaultCellStyle = dataGridViewCellStyle2; - this.ColumnImage.Frozen = true; - this.ColumnImage.HeaderText = ""; - this.ColumnImage.Name = "ColumnImage"; - this.ColumnImage.ReadOnly = true; - this.ColumnImage.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.ColumnImage.Width = 20; - // - // ColumnTime - // - this.ColumnTime.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ColumnTime.Frozen = true; - this.ColumnTime.HeaderText = "Time"; - this.ColumnTime.Name = "ColumnTime"; - this.ColumnTime.ReadOnly = true; - this.ColumnTime.Width = 55; - // - // ColumnMessage - // - this.ColumnMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ColumnMessage.HeaderText = "Message"; - this.ColumnMessage.Name = "ColumnMessage"; - this.ColumnMessage.ReadOnly = true; - // - // buttonStart - // - this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonStart.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.buttonStart.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonStart.Location = new System.Drawing.Point(438, 325); - this.buttonStart.Name = "buttonStart"; - this.buttonStart.Size = new System.Drawing.Size(120, 24); - this.buttonStart.TabIndex = 27; - this.buttonStart.Text = "Build"; - this.buttonStart.UseVisualStyleBackColor = true; - this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); - // - // openFileDialogBrowseAapt - // - this.openFileDialogBrowseAapt.Filter = "*.exe|*.exe"; - // - // saveFileDialogApk - // - this.saveFileDialogApk.DefaultExt = "apk"; - this.saveFileDialogApk.Filter = "Android App|*.apk"; - // - // folderBrowserDialogFrameworks - // - this.folderBrowserDialogFrameworks.ShowNewFolderButton = false; - // - // textBoxOutputApkPath - // - this.textBoxOutputApkPath.Location = new System.Drawing.Point(12, 326); - this.textBoxOutputApkPath.Name = "textBoxOutputApkPath"; - this.textBoxOutputApkPath.Size = new System.Drawing.Size(390, 22); - this.textBoxOutputApkPath.TabIndex = 29; - // - // buttonBrowseOutputApk - // - this.buttonBrowseOutputApk.Location = new System.Drawing.Point(404, 325); - this.buttonBrowseOutputApk.Name = "buttonBrowseOutputApk"; - this.buttonBrowseOutputApk.Size = new System.Drawing.Size(28, 24); - this.buttonBrowseOutputApk.TabIndex = 30; - this.buttonBrowseOutputApk.Text = "..."; - this.buttonBrowseOutputApk.UseVisualStyleBackColor = true; - this.buttonBrowseOutputApk.Click += new System.EventHandler(this.buttonBrowseOutputApk_Click); - // - // FormBuild - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(570, 382); - this.Controls.Add(this.buttonBrowseOutputApk); - this.Controls.Add(this.textBoxOutputApkPath); - this.Controls.Add(this.groupBoxOptions); - this.Controls.Add(this.dataGridView1); - this.Controls.Add(this.buttonStart); - this.Controls.Add(this.statusStrip1); - this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.Name = "FormBuild"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "FormBuild"; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormBuild_FormClosed); - this.Load += new System.EventHandler(this.FormBuild_Load); - this.Shown += new System.EventHandler(this.FormBuild_Shown); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - this.groupBoxOptions.ResumeLayout(false); - this.groupBoxOptions.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.StatusStrip statusStrip1; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText; - private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; - private System.Windows.Forms.GroupBox groupBoxOptions; - private System.Windows.Forms.TextBox textBoxAaptPath; - private System.Windows.Forms.Button buttonBrowseAaptPath; - private System.Windows.Forms.CheckBox checkBoxCustomAapt; - private System.Windows.Forms.CheckBox checkBoxForceAll; - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.DataGridViewImageColumn ColumnImage; - private System.Windows.Forms.DataGridViewTextBoxColumn ColumnTime; - private System.Windows.Forms.DataGridViewTextBoxColumn ColumnMessage; - private System.Windows.Forms.Button buttonStart; - private System.Windows.Forms.OpenFileDialog openFileDialogBrowseAapt; - private System.Windows.Forms.SaveFileDialog saveFileDialogApk; - private System.Windows.Forms.CheckBox checkBoxCopyOriginal; - private System.Windows.Forms.TextBox textBoxFrameworkPath; - private System.Windows.Forms.Button buttonBrowseFrameworkPath; - private System.Windows.Forms.CheckBox checkBoxUseFramework; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogFrameworks; - private System.Windows.Forms.TextBox textBoxOutputApkPath; - private System.Windows.Forms.Button buttonBrowseOutputApk; - } -} \ No newline at end of file diff --git a/APKToolGUI/FormBuild.cs b/APKToolGUI/FormBuild.cs deleted file mode 100644 index 4d3b4c5..0000000 --- a/APKToolGUI/FormBuild.cs +++ /dev/null @@ -1,226 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace APKToolGUI -{ - public partial class FormBuild : Form - { - public FormBuild(string[] args) - { - Program.SetLanguage(); - InitializeComponent(); - this.Icon = Properties.Resources.android_thin; - this.Text = Application.ProductName; - projectDir = args[1]; - } - - private string projectDir; - private Apktool apktool; - private Apktool apktoolSync; - - bool StartButtonEnabled - { - set - { - if (buttonStart.InvokeRequired) - buttonStart.BeginInvoke(new Action(() => - { - buttonStart.Enabled = value; - })); - else - buttonStart.Enabled = value; - } - } - ProgressBarStyle progressBarStyle - { - set - { - if (toolStripProgressBar1.GetCurrentParent().InvokeRequired) - { - toolStripProgressBar1.GetCurrentParent().BeginInvoke(new Action(() => - { - toolStripProgressBar1.Style = value; - })); - } - else - toolStripProgressBar1.Style = value; - } - } - - private void ToLog(string time, string message, Image statusImage, Color backColor) - { - if (dataGridView1.InvokeRequired) - dataGridView1.BeginInvoke(new Action(() => - { - int i = dataGridView1.Rows.Add(statusImage, time, message); - dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor; - dataGridView1.FirstDisplayedScrollingRowIndex = i; - })); - else - { - int i = dataGridView1.Rows.Add(statusImage, time, message); - dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor; - dataGridView1.FirstDisplayedScrollingRowIndex = i; - } - } - - private void ToLog(ApktoolEventType eventType, String message) - { - switch (eventType) - { - case ApktoolEventType.Information: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.Window)); - //ToStatus(result.Message, Properties.Resources.info); - break; - case ApktoolEventType.Error: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink)); - //ToStatus(result.Message, Properties.Resources.error); - break; - case ApktoolEventType.Warning: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.warning, Color.FromKnownColor(KnownColor.LightYellow)); - //ToStatus(result.Message, Properties.Resources.warning); - break; - default: - break; - } - } - - #region Form event handlers - - private void FormBuild_Load(object sender, EventArgs e) - { - if (String.IsNullOrEmpty(Properties.Settings.Default.JavaExe)) - { - MessageBox.Show("Java location is not specified in the settings. Please, configure program first.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - this.Close(); - } - if (!System.IO.File.Exists(Program.APKTOOL_PATH)) - { - MessageBox.Show(String.Format("apktool не найден в каталоге назначения '{0}'.", Program.APKTOOL_PATH), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - this.Close(); - } - - apktoolSync = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH); - apktool = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH); - apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved; - apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved; - apktool.BuildCompleted += apktool_BuildCompleted; - } - - private void FormBuild_Shown(object sender, EventArgs e) - { - this.Update(); - - textBoxOutputApkPath.Text = String.Format("{0}\\{1}_{2}.apk", System.IO.Path.GetDirectoryName(projectDir), projectDir.Replace(System.IO.Path.GetDirectoryName(projectDir) + "\\", String.Empty), DateTime.Now.ToString("yyyyMMdd_HH-mm-ss"), System.IO.Path.GetExtension(projectDir)); - - Version javaVersion = apktool.GetJavaVersion(); - if (javaVersion != null) - { - ToLog(ApktoolEventType.Information, String.Format("Java version \"{0} Update {1}\"", javaVersion.Minor, javaVersion.Revision)); - string apktoolVersion = apktool.GetVersion(); - if (!String.IsNullOrWhiteSpace(apktoolVersion)) - ToLog(ApktoolEventType.Information, String.Format("Apktool version \"{0}\"", apktoolVersion)); - else - ToLog(ApktoolEventType.Error, "Can't detect apktool version."); - } - else - MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - private void FormBuild_FormClosed(object sender, FormClosedEventArgs e) - { - Properties.Settings.Default.Save(); - } - - #endregion - - #region apktool event handlers - void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e) - { - ToLog(e.EventType, e.Message); - } - - void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e) - { - ToLog(e.EventType, e.Message); - } - - void apktool_BuildCompleted(object sender, ApktoolEventCompletedEventArgs e) - { - if (e.ExitCode == 0) - ToLog(ApktoolEventType.Information, "Сборка успешно завршена."); - else - ToLog(ApktoolEventType.Warning, String.Format("Внимание! При сборке приложения произошла ошибка. Код выхода: '{0}'.", e.ExitCode)); - StartButtonEnabled = true; - progressBarStyle = ProgressBarStyle.Continuous; - } - #endregion - - private void buttonBsowseAaptPath_Click(object sender, EventArgs e) - { - if (openFileDialogBrowseAapt.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBoxAaptPath.Text = openFileDialogBrowseAapt.FileName; - } - - private void buttonBrowseFrameworkPath_Click(object sender, EventArgs e) - { - if (folderBrowserDialogFrameworks.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBoxFrameworkPath.Text = folderBrowserDialogFrameworks.SelectedPath; - } - - private void buttonStart_Click(object sender, EventArgs e) - { - BuildOptions options = new BuildOptions(projectDir); - options.ForceAll = checkBoxForceAll.Checked; - options.CopyOriginal = checkBoxCopyOriginal.Checked; - if (checkBoxCustomAapt.Checked) - { - if (System.IO.File.Exists(textBoxAaptPath.Text)) - options.AaptPath = textBoxAaptPath.Text; - else - { - MessageBox.Show("Указанного файла aapt не существует.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } - } - if (checkBoxUseFramework.Checked) - options.FrameworkPath = textBoxFrameworkPath.Text; - options.AppPath = textBoxOutputApkPath.Text; - - bool started = false; -#if !DEBUG - try - { -#endif - started = apktool.Build(options); -#if !DEBUG - } - catch (Exception ex) - { - MessageBox.Show(ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } -#endif - if (started) - { - progressBarStyle = ProgressBarStyle.Marquee; - StartButtonEnabled = false; - } - - } - - private void buttonBrowseOutputApk_Click(object sender, EventArgs e) - { - saveFileDialogApk.InitialDirectory = System.IO.Path.GetDirectoryName(projectDir); - string foldername = projectDir.Replace(System.IO.Path.GetDirectoryName(projectDir) + "\\", String.Empty); - saveFileDialogApk.FileName = String.Format("{0}_{1}", foldername, DateTime.Now.ToString("yyyyMMdd_HH-mm-ss")); - if (saveFileDialogApk.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBoxOutputApkPath.Text = saveFileDialogApk.FileName; - } - } -} diff --git a/APKToolGUI/FormDecode.Designer.cs b/APKToolGUI/FormDecode.Designer.cs deleted file mode 100644 index 0eeaff2..0000000 --- a/APKToolGUI/FormDecode.Designer.cs +++ /dev/null @@ -1,383 +0,0 @@ -namespace APKToolGUI -{ - partial class FormDecode - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormDecode)); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.toolStripStatusLabelStateImage = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabelStateText = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.ColumnImage = new System.Windows.Forms.DataGridViewImageColumn(); - this.ColumnTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ColumnMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.buttonStart = new System.Windows.Forms.Button(); - this.groupBoxOptions = new System.Windows.Forms.GroupBox(); - this.checkBoxMatchOriginal = new System.Windows.Forms.CheckBox(); - this.checkBoxKeepBrokenResource = new System.Windows.Forms.CheckBox(); - this.textBoxFrameworkPath = new System.Windows.Forms.TextBox(); - this.buttonFramePath = new System.Windows.Forms.Button(); - this.checkBoxFrameworkPath = new System.Windows.Forms.CheckBox(); - this.checkBoxForce = new System.Windows.Forms.CheckBox(); - this.checkBoxNoRes = new System.Windows.Forms.CheckBox(); - this.checkBoxNoSrc = new System.Windows.Forms.CheckBox(); - this.folderBrowserDialogFrameworks = new System.Windows.Forms.FolderBrowserDialog(); - this.folderBrowserDialogProjectDir = new System.Windows.Forms.FolderBrowserDialog(); - this.textBoxOutputProjectDir = new System.Windows.Forms.TextBox(); - this.buttonBrowseOutputProjectDir = new System.Windows.Forms.Button(); - this.statusStrip1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.groupBoxOptions.SuspendLayout(); - this.SuspendLayout(); - // - // statusStrip1 - // - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripStatusLabelStateImage, - this.toolStripStatusLabelStateText, - this.toolStripProgressBar1}); - this.statusStrip1.Location = new System.Drawing.Point(0, 408); - this.statusStrip1.Margin = new System.Windows.Forms.Padding(0, 9, 0, 0); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(570, 22); - this.statusStrip1.TabIndex = 22; - this.statusStrip1.Text = "statusStrip1"; - // - // toolStripStatusLabelStateImage - // - this.toolStripStatusLabelStateImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripStatusLabelStateImage.Name = "toolStripStatusLabelStateImage"; - this.toolStripStatusLabelStateImage.Size = new System.Drawing.Size(0, 17); - this.toolStripStatusLabelStateImage.Text = "toolStripStatusLabel1"; - // - // toolStripStatusLabelStateText - // - this.toolStripStatusLabelStateText.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.toolStripStatusLabelStateText.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.toolStripStatusLabelStateText.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripStatusLabelStateText.Name = "toolStripStatusLabelStateText"; - this.toolStripStatusLabelStateText.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.toolStripStatusLabelStateText.Size = new System.Drawing.Size(453, 17); - this.toolStripStatusLabelStateText.Spring = true; - this.toolStripStatusLabelStateText.Text = "Done"; - this.toolStripStatusLabelStateText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // toolStripProgressBar1 - // - this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.toolStripProgressBar1.AutoSize = false; - this.toolStripProgressBar1.MarqueeAnimationSpeed = 50; - this.toolStripProgressBar1.Name = "toolStripProgressBar1"; - this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16); - this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; - // - // dataGridView1 - // - this.dataGridView1.AllowUserToAddRows = false; - this.dataGridView1.AllowUserToDeleteRows = false; - this.dataGridView1.AllowUserToResizeRows = false; - this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Window; - this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - this.dataGridView1.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; - this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - this.dataGridView1.ColumnHeadersHeight = 24; - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ColumnImage, - this.ColumnTime, - this.ColumnMessage}); - this.dataGridView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); - this.dataGridView1.Location = new System.Drawing.Point(12, 12); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.ReadOnly = true; - this.dataGridView1.RowHeadersVisible = false; - this.dataGridView1.RowTemplate.Height = 19; - this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView1.ShowEditingIcon = false; - this.dataGridView1.Size = new System.Drawing.Size(546, 182); - this.dataGridView1.TabIndex = 25; - // - // ColumnImage - // - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.NullValue = ((object)(resources.GetObject("dataGridViewCellStyle1.NullValue"))); - this.ColumnImage.DefaultCellStyle = dataGridViewCellStyle1; - this.ColumnImage.Frozen = true; - this.ColumnImage.HeaderText = ""; - this.ColumnImage.Name = "ColumnImage"; - this.ColumnImage.ReadOnly = true; - this.ColumnImage.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.ColumnImage.Width = 20; - // - // ColumnTime - // - this.ColumnTime.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ColumnTime.Frozen = true; - this.ColumnTime.HeaderText = "Time"; - this.ColumnTime.Name = "ColumnTime"; - this.ColumnTime.ReadOnly = true; - this.ColumnTime.Width = 55; - // - // ColumnMessage - // - this.ColumnMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ColumnMessage.HeaderText = "Message"; - this.ColumnMessage.Name = "ColumnMessage"; - this.ColumnMessage.ReadOnly = true; - // - // buttonStart - // - this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonStart.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.buttonStart.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonStart.Location = new System.Drawing.Point(438, 371); - this.buttonStart.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12); - this.buttonStart.Name = "buttonStart"; - this.buttonStart.Size = new System.Drawing.Size(120, 24); - this.buttonStart.TabIndex = 27; - this.buttonStart.Text = "Decompile"; - this.buttonStart.UseVisualStyleBackColor = true; - this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); - // - // groupBoxOptions - // - this.groupBoxOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBoxOptions.Controls.Add(this.checkBoxMatchOriginal); - this.groupBoxOptions.Controls.Add(this.checkBoxKeepBrokenResource); - this.groupBoxOptions.Controls.Add(this.textBoxFrameworkPath); - this.groupBoxOptions.Controls.Add(this.buttonFramePath); - this.groupBoxOptions.Controls.Add(this.checkBoxFrameworkPath); - this.groupBoxOptions.Controls.Add(this.checkBoxForce); - this.groupBoxOptions.Controls.Add(this.checkBoxNoRes); - this.groupBoxOptions.Controls.Add(this.checkBoxNoSrc); - this.groupBoxOptions.Location = new System.Drawing.Point(12, 200); - this.groupBoxOptions.Name = "groupBoxOptions"; - this.groupBoxOptions.Size = new System.Drawing.Size(546, 166); - this.groupBoxOptions.TabIndex = 26; - this.groupBoxOptions.TabStop = false; - this.groupBoxOptions.Text = "Options"; - // - // checkBoxMatchOriginal - // - this.checkBoxMatchOriginal.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxMatchOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_MatchOriginal; - this.checkBoxMatchOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_MatchOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxMatchOriginal.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxMatchOriginal.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxMatchOriginal.Location = new System.Drawing.Point(6, 115); - this.checkBoxMatchOriginal.Name = "checkBoxMatchOriginal"; - this.checkBoxMatchOriginal.Size = new System.Drawing.Size(534, 18); - this.checkBoxMatchOriginal.TabIndex = 13; - this.checkBoxMatchOriginal.Text = "Keeps files to closest to original as possible. Prevents rebuild."; - this.checkBoxMatchOriginal.UseVisualStyleBackColor = true; - // - // checkBoxKeepBrokenResource - // - this.checkBoxKeepBrokenResource.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxKeepBrokenResource.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_KeepBrokenResource; - this.checkBoxKeepBrokenResource.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_KeepBrokenResource", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxKeepBrokenResource.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxKeepBrokenResource.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxKeepBrokenResource.Location = new System.Drawing.Point(6, 91); - this.checkBoxKeepBrokenResource.Name = "checkBoxKeepBrokenResource"; - this.checkBoxKeepBrokenResource.Size = new System.Drawing.Size(534, 18); - this.checkBoxKeepBrokenResource.TabIndex = 12; - this.checkBoxKeepBrokenResource.Text = "Keep broken resource"; - this.checkBoxKeepBrokenResource.UseVisualStyleBackColor = true; - // - // textBoxFrameworkPath - // - this.textBoxFrameworkPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBoxFrameworkPath.Enabled = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_UseFramework; - this.textBoxFrameworkPath.Location = new System.Drawing.Point(230, 138); - this.textBoxFrameworkPath.Name = "textBoxFrameworkPath"; - this.textBoxFrameworkPath.Size = new System.Drawing.Size(280, 22); - this.textBoxFrameworkPath.TabIndex = 10; - // - // buttonFramePath - // - this.buttonFramePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonFramePath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.buttonFramePath.Enabled = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_UseFramework; - this.buttonFramePath.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonFramePath.Location = new System.Drawing.Point(512, 137); - this.buttonFramePath.Name = "buttonFramePath"; - this.buttonFramePath.Size = new System.Drawing.Size(28, 24); - this.buttonFramePath.TabIndex = 11; - this.buttonFramePath.Text = "..."; - this.buttonFramePath.UseVisualStyleBackColor = true; - this.buttonFramePath.Click += new System.EventHandler(this.buttonFramePath_Click); - // - // checkBoxFrameworkPath - // - this.checkBoxFrameworkPath.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_UseFramework; - this.checkBoxFrameworkPath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxFrameworkPath.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxFrameworkPath.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxFrameworkPath.Location = new System.Drawing.Point(6, 139); - this.checkBoxFrameworkPath.Name = "checkBoxFrameworkPath"; - this.checkBoxFrameworkPath.Size = new System.Drawing.Size(218, 18); - this.checkBoxFrameworkPath.TabIndex = 9; - this.checkBoxFrameworkPath.Text = "Uses framework files located in"; - this.checkBoxFrameworkPath.UseVisualStyleBackColor = true; - // - // checkBoxForce - // - this.checkBoxForce.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxForce.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_Force; - this.checkBoxForce.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_Force", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxForce.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxForce.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxForce.Location = new System.Drawing.Point(6, 67); - this.checkBoxForce.Name = "checkBoxForce"; - this.checkBoxForce.Size = new System.Drawing.Size(534, 18); - this.checkBoxForce.TabIndex = 8; - this.checkBoxForce.Text = "Force delete destination directory"; - this.checkBoxForce.UseVisualStyleBackColor = true; - // - // checkBoxNoRes - // - this.checkBoxNoRes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxNoRes.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_NoRes; - this.checkBoxNoRes.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_NoRes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxNoRes.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxNoRes.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxNoRes.Location = new System.Drawing.Point(6, 43); - this.checkBoxNoRes.Name = "checkBoxNoRes"; - this.checkBoxNoRes.Size = new System.Drawing.Size(534, 18); - this.checkBoxNoRes.TabIndex = 7; - this.checkBoxNoRes.Text = "Do not decode resources"; - this.checkBoxNoRes.UseVisualStyleBackColor = true; - // - // checkBoxNoSrc - // - this.checkBoxNoSrc.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.checkBoxNoSrc.Checked = global::APKToolGUI.Properties.Settings.Default.DECOMPILE_NoSrc; - this.checkBoxNoSrc.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DECOMPILE_NoSrc", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxNoSrc.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkBoxNoSrc.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.checkBoxNoSrc.Location = new System.Drawing.Point(6, 19); - this.checkBoxNoSrc.Name = "checkBoxNoSrc"; - this.checkBoxNoSrc.Size = new System.Drawing.Size(534, 18); - this.checkBoxNoSrc.TabIndex = 6; - this.checkBoxNoSrc.Text = "Do not decode sources"; - this.checkBoxNoSrc.UseVisualStyleBackColor = true; - // - // folderBrowserDialogFrameworks - // - this.folderBrowserDialogFrameworks.ShowNewFolderButton = false; - // - // textBoxOutputProjectDir - // - this.textBoxOutputProjectDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxOutputProjectDir.Location = new System.Drawing.Point(12, 372); - this.textBoxOutputProjectDir.Name = "textBoxOutputProjectDir"; - this.textBoxOutputProjectDir.Size = new System.Drawing.Size(390, 22); - this.textBoxOutputProjectDir.TabIndex = 28; - // - // buttonBrowseOutputProjectDir - // - this.buttonBrowseOutputProjectDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonBrowseOutputProjectDir.Location = new System.Drawing.Point(404, 371); - this.buttonBrowseOutputProjectDir.Name = "buttonBrowseOutputProjectDir"; - this.buttonBrowseOutputProjectDir.Size = new System.Drawing.Size(28, 24); - this.buttonBrowseOutputProjectDir.TabIndex = 29; - this.buttonBrowseOutputProjectDir.Text = "..."; - this.buttonBrowseOutputProjectDir.UseVisualStyleBackColor = true; - this.buttonBrowseOutputProjectDir.Click += new System.EventHandler(this.buttonBrowseOutputProjectDir_Click); - // - // FormDecode - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(570, 430); - this.Controls.Add(this.buttonBrowseOutputProjectDir); - this.Controls.Add(this.textBoxOutputProjectDir); - this.Controls.Add(this.dataGridView1); - this.Controls.Add(this.buttonStart); - this.Controls.Add(this.groupBoxOptions); - this.Controls.Add(this.statusStrip1); - this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.Name = "FormDecode"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "FormDecode"; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormDecompile_FormClosed); - this.Load += new System.EventHandler(this.FormDecompile_Load); - this.Shown += new System.EventHandler(this.FormDecompile_Shown); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.groupBoxOptions.ResumeLayout(false); - this.groupBoxOptions.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.StatusStrip statusStrip1; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText; - private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.DataGridViewImageColumn ColumnImage; - private System.Windows.Forms.DataGridViewTextBoxColumn ColumnTime; - private System.Windows.Forms.DataGridViewTextBoxColumn ColumnMessage; - private System.Windows.Forms.Button buttonStart; - private System.Windows.Forms.GroupBox groupBoxOptions; - private System.Windows.Forms.TextBox textBoxFrameworkPath; - private System.Windows.Forms.Button buttonFramePath; - private System.Windows.Forms.CheckBox checkBoxFrameworkPath; - private System.Windows.Forms.CheckBox checkBoxForce; - private System.Windows.Forms.CheckBox checkBoxNoRes; - private System.Windows.Forms.CheckBox checkBoxNoSrc; - private System.Windows.Forms.CheckBox checkBoxMatchOriginal; - private System.Windows.Forms.CheckBox checkBoxKeepBrokenResource; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogFrameworks; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogProjectDir; - private System.Windows.Forms.TextBox textBoxOutputProjectDir; - private System.Windows.Forms.Button buttonBrowseOutputProjectDir; - } -} \ No newline at end of file diff --git a/APKToolGUI/FormDecode.cs b/APKToolGUI/FormDecode.cs deleted file mode 100644 index 6de2a6a..0000000 --- a/APKToolGUI/FormDecode.cs +++ /dev/null @@ -1,226 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace APKToolGUI -{ - public partial class FormDecode : Form - { - public FormDecode(string[] args) - { - Program.SetLanguage(); - InitializeComponent(); - this.Icon = Properties.Resources.android_thin; - this.Text = Application.ProductName; - - textBoxOutputProjectDir.Multiline = true; - textBoxOutputProjectDir.MinimumSize = new Size(textBoxOutputProjectDir.Size.Width, textBoxOutputProjectDir.Size.Height); - textBoxOutputProjectDir.Size = new Size(textBoxOutputProjectDir.Size.Width, textBoxOutputProjectDir.Size.Height); - textBoxOutputProjectDir.Multiline = false; - - this.apkPath = args[1]; - } - - private string apkPath; - private Apktool apktool; - private Apktool apktoolSync; - bool StartButtonEnabled - { - set - { - if (buttonStart.InvokeRequired) - buttonStart.BeginInvoke(new Action(() => - { - buttonStart.Enabled = value; - })); - else - buttonStart.Enabled = value; - } - } - ProgressBarStyle progressBarStyle - { - set - { - if (toolStripProgressBar1.GetCurrentParent().InvokeRequired) - { - toolStripProgressBar1.GetCurrentParent().BeginInvoke(new Action(() => - { - toolStripProgressBar1.Style = value; - })); - } - else - toolStripProgressBar1.Style = value; - } - } - - private void ToLog(string time, string message, Image statusImage, Color backColor) - { - if (dataGridView1.InvokeRequired) - dataGridView1.BeginInvoke(new Action(() => - { - int i = dataGridView1.Rows.Add(statusImage, time, message); - dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor; - dataGridView1.FirstDisplayedScrollingRowIndex = i; - })); - else - { - int i = dataGridView1.Rows.Add(statusImage, time, message); - dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor; - dataGridView1.FirstDisplayedScrollingRowIndex = i; - } - } - - private void ToLog(ApktoolEventType eventType, String message) - { - switch (eventType) - { - case ApktoolEventType.Information: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.Window)); - //ToStatus(result.Message, Properties.Resources.info); - break; - case ApktoolEventType.Error: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink)); - //ToStatus(result.Message, Properties.Resources.error); - break; - case ApktoolEventType.Warning: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.warning, Color.FromKnownColor(KnownColor.LightYellow)); - //ToStatus(result.Message, Properties.Resources.warning); - break; - default: - break; - } - } - - #region Form event handlers - - private void FormDecompile_Load(object sender, EventArgs e) - { - if (String.IsNullOrEmpty(Properties.Settings.Default.JavaExe)) - { - MessageBox.Show("Java location is not specified in the settings. Please, configure program first.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - this.Close(); - } - if (!System.IO.File.Exists(Program.APKTOOL_PATH)) - { - MessageBox.Show(String.Format("Apktool not fount in '{0}'.", Program.APKTOOL_PATH), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - this.Close(); - } - - //apktoolSync = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH); - apktool = new Apktool(Properties.Settings.Default.JavaExe, Program.APKTOOL_PATH); - apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved; - apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved; - apktool.DecompilingCompleted += apktool_DecompilingCompleted; - } - - private void FormDecompile_Shown(object sender, EventArgs e) - { - this.Update(); - - textBoxOutputProjectDir.Text = System.IO.Path.GetDirectoryName(apkPath) + "\\" + System.IO.Path.GetFileNameWithoutExtension(apkPath); - - Version javaVersion = apktool.GetJavaVersion(); - if (javaVersion != null) - { - ToLog(ApktoolEventType.Information, String.Format("Java version \"{0} Update {1}\"", javaVersion.Minor, javaVersion.Revision)); - string apktoolVersion = apktool.GetVersion(); - if (!String.IsNullOrWhiteSpace(apktoolVersion)) - ToLog(ApktoolEventType.Information, String.Format("Apktool version \"{0}\"", apktoolVersion)); - else - ToLog(ApktoolEventType.Error, "Can't detect apktool version."); - } - else - MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - private void FormDecompile_FormClosed(object sender, FormClosedEventArgs e) - { - Properties.Settings.Default.Save(); - } - - #endregion - - #region apktool event handlers - - void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e) - { - ToLog(e.EventType, e.Message); - } - - void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e) - { - ToLog(e.EventType, e.Message); - } - - void apktool_DecompilingCompleted(object sender, ApktoolEventCompletedEventArgs e) - { - if (e.ExitCode == 0) - ToLog(ApktoolEventType.Information, "Декомпиляция успешно завршена."); - else - ToLog(ApktoolEventType.Warning, String.Format("Внимание! При декомпиляции приложения произошла ошибка. Код выхода: '{0}'.", e.ExitCode)); - StartButtonEnabled = true; - progressBarStyle = ProgressBarStyle.Continuous; - } - - #endregion - - private void buttonFramePath_Click(object sender, EventArgs e) - { - if (folderBrowserDialogFrameworks.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBoxFrameworkPath.Text = folderBrowserDialogFrameworks.SelectedPath; - } - - private void buttonStart_Click(object sender, EventArgs e) - { - DecompileOptions options = new DecompileOptions(apkPath); - options.NoResource = checkBoxNoRes.Checked; - options.NoSource = checkBoxNoSrc.Checked; - options.Force = checkBoxForce.Checked; - options.KeepBrokenResource = checkBoxKeepBrokenResource.Checked; - options.MatchOriginal = checkBoxMatchOriginal.Checked; - if (checkBoxFrameworkPath.Checked) - { - if (System.IO.Directory.Exists(textBoxFrameworkPath.Text)) - options.FrameworkPath = textBoxFrameworkPath.Text; - else - { - MessageBox.Show("Указанной директорию расположения фреймворков не существует.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } - } - - options.OutputDirectory = textBoxOutputProjectDir.Text; - - bool started = false; -#if !DEBUG - try - { -#endif - started = apktool.Decompile(options); -#if !DEBUG - } - catch (Exception ex) - { - MessageBox.Show(ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } -#endif - if (started) - { - progressBarStyle = ProgressBarStyle.Marquee; - StartButtonEnabled = false; - } - } - - private void buttonBrowseOutputProjectDir_Click(object sender, EventArgs e) - { - folderBrowserDialogProjectDir.SelectedPath = System.IO.Path.GetDirectoryName(apkPath); - if (folderBrowserDialogProjectDir.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBoxOutputProjectDir.Text = folderBrowserDialogProjectDir.SelectedPath; - } - } -} \ No newline at end of file diff --git a/APKToolGUI/FormMain.Designer.cs b/APKToolGUI/FormMain.Designer.cs deleted file mode 100644 index 9cb68f0..0000000 --- a/APKToolGUI/FormMain.Designer.cs +++ /dev/null @@ -1,1219 +0,0 @@ -namespace APKToolGUI -{ - partial class FormMain - { - /// - /// Требуется переменная конструктора. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Освободить все используемые ресурсы. - /// - /// истинно, если управляемый ресурс должен быть удален; иначе ложно. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Код, автоматически созданный конструктором форм Windows - - /// - /// Обязательный метод для поддержки конструктора - не изменяйте - /// содержимое данного метода при помощи редактора кода. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - this.button_DECODE_BrowseInputAppPath = new System.Windows.Forms.Button(); - this.button_DECODE_Decode = new System.Windows.Forms.Button(); - this.tabControlMain = new System.Windows.Forms.TabControl(); - this.tabPageDecode = new System.Windows.Forms.TabPage(); - this.groupBox_DECODE_Options = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel_DECODE_Options = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox_DECODE_MatchOriginal = new System.Windows.Forms.CheckBox(); - this.checkBox_DECODE_KeepBrokenRes = new System.Windows.Forms.CheckBox(); - this.checkBox_DECODE_Force = new System.Windows.Forms.CheckBox(); - this.checkBox_DECODE_NoRes = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanelDecodeOutputDir = new System.Windows.Forms.TableLayoutPanel(); - this.button_DECODE_BrowseOutputDirectory = new System.Windows.Forms.Button(); - this.checkBox_DECODE_OutputDirectory = new System.Windows.Forms.CheckBox(); - this.textBox_DECODE_OutputDirectory = new System.Windows.Forms.TextBox(); - this.tableLayoutPanelDecodeUseFramework = new System.Windows.Forms.TableLayoutPanel(); - this.textBox_DECODE_FrameDir = new System.Windows.Forms.TextBox(); - this.checkBox_DECODE_UseFramework = new System.Windows.Forms.CheckBox(); - this.button_DECODE_BrowseFrameDir = new System.Windows.Forms.Button(); - this.checkBox_DECODE_NoSrc = new System.Windows.Forms.CheckBox(); - this.textBox_DECODE_InputAppPath = new System.Windows.Forms.TextBox(); - this.tabPageBuild = new System.Windows.Forms.TabPage(); - this.groupBox_BUILD_Options = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel_BUILD_Options = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanelBuildOutputApk = new System.Windows.Forms.TableLayoutPanel(); - this.button_BUILD_BrowseOutputAppPath = new System.Windows.Forms.Button(); - this.checkBox_BUILD_OutputAppPath = new System.Windows.Forms.CheckBox(); - this.textBox_BUILD_OutputAppPath = new System.Windows.Forms.TextBox(); - this.checkBox_BUILD_CopyOriginal = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanelBuildUseFramework = new System.Windows.Forms.TableLayoutPanel(); - this.button_BUILD_BrowseFrameDir = new System.Windows.Forms.Button(); - this.checkBox_BUILD_UseFramework = new System.Windows.Forms.CheckBox(); - this.textBox_BUILD_FrameDir = new System.Windows.Forms.TextBox(); - this.tableLayoutPanelBuildUseAapt = new System.Windows.Forms.TableLayoutPanel(); - this.textBox_BUILD_AaptPath = new System.Windows.Forms.TextBox(); - this.checkBox_BUILD_UseAapt = new System.Windows.Forms.CheckBox(); - this.button_BUILD_BrowseAaptPath = new System.Windows.Forms.Button(); - this.checkBox_BUILD_ForceAll = new System.Windows.Forms.CheckBox(); - this.button_BUILD_BrowseInputProjectDir = new System.Windows.Forms.Button(); - this.button_BUILD_Build = new System.Windows.Forms.Button(); - this.textBox_BUILD_InputProjectDir = new System.Windows.Forms.TextBox(); - this.tabPageInstallFramework = new System.Windows.Forms.TabPage(); - this.groupBox_IF_Options = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel_IF_Options = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel_IF_Tag = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox_IF_Tag = new System.Windows.Forms.CheckBox(); - this.textBox_IF_Tag = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel_IF_FramePath = new System.Windows.Forms.TableLayoutPanel(); - this.textBox_IF_FrameDir = new System.Windows.Forms.TextBox(); - this.checkBox_IF_FramePath = new System.Windows.Forms.CheckBox(); - this.button_IF_BrowseFrameDir = new System.Windows.Forms.Button(); - this.button_IF_InstallFramework = new System.Windows.Forms.Button(); - this.button_IF_BrowseInputFramePath = new System.Windows.Forms.Button(); - this.textBox_IF_InputFramePath = new System.Windows.Forms.TextBox(); - this.tabPageSign = new System.Windows.Forms.TabPage(); - this.groupBox_SIGN_Options = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel_SIGN_Options = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel_SIGN_PrivateKey = new System.Windows.Forms.TableLayoutPanel(); - this.label_SIGN_PrivateKey = new System.Windows.Forms.Label(); - this.button_SIGN_BrowsePrivateKey = new System.Windows.Forms.Button(); - this.textBox_SIGN_PrivateKey = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel_SIGN_PublicKey = new System.Windows.Forms.TableLayoutPanel(); - this.label_SIGN_PublicKey = new System.Windows.Forms.Label(); - this.button_SIGN_BrowsePublicKey = new System.Windows.Forms.Button(); - this.textBox_SIGN_PublicKey = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel_SIGN_OutputFile = new System.Windows.Forms.TableLayoutPanel(); - this.label_SIGN_OutputFile = new System.Windows.Forms.Label(); - this.button_SIGN_BrowseOutputFile = new System.Windows.Forms.Button(); - this.textBox_SIGN_OutputFile = new System.Windows.Forms.TextBox(); - this.textBox_SIGN_InputFile = new System.Windows.Forms.TextBox(); - this.button_SIGN_BrowseInputFile = new System.Windows.Forms.Button(); - this.button_SIGN_Sign = new System.Windows.Forms.Button(); - this.tabPageZipAlign = new System.Windows.Forms.TabPage(); - this.groupBox_ZIPALIGN_Options = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel_ZIPALIGN_Options = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox_ZIPALIGN_Recompress = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes = new System.Windows.Forms.TableLayoutPanel(); - this.label_ZIPALIGN_AlignmentBytes = new System.Windows.Forms.Label(); - this.numericUpDown_ZIPALIGN_AlignmentBytes = new System.Windows.Forms.NumericUpDown(); - this.checkBox_ZIPALIGN_VerboseOutput = new System.Windows.Forms.CheckBox(); - this.checkBox_ZIPALIGN_CheckAlignment = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel_ZIPALIGN_OutputFile = new System.Windows.Forms.TableLayoutPanel(); - this.label_ZIPALIGN_OutputFile = new System.Windows.Forms.Label(); - this.button_ZIPALIGN_BrowseOutputFile = new System.Windows.Forms.Button(); - this.textBox_ZIPALIGN_OutputFile = new System.Windows.Forms.TextBox(); - this.checkBox_ZIPALIGN_OverwriteOutputFile = new System.Windows.Forms.CheckBox(); - this.button_ZIPALIGN_Align = new System.Windows.Forms.Button(); - this.button_ZIPALIGN_BrowseInputFile = new System.Windows.Forms.Button(); - this.textBox_ZIPALIGN_InputFile = new System.Windows.Forms.TextBox(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.toolStripStatusLabelStateImage = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabelStateText = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.ColumnImage = new System.Windows.Forms.DataGridViewImageColumn(); - this.ColumnTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ColumnMessage = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.contextMenuStripLog = new System.Windows.Forms.ContextMenuStrip(this.components); - this.clearLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components); - this.menuItemFile = new System.Windows.Forms.MenuItem(); - this.menuItemSettings = new System.Windows.Forms.MenuItem(); - this.menuItemExit = new System.Windows.Forms.MenuItem(); - this.menuItemHelp = new System.Windows.Forms.MenuItem(); - this.menuItemCheckUpdate = new System.Windows.Forms.MenuItem(); - this.menuItemAbout = new System.Windows.Forms.MenuItem(); - this.openFileDialogApk = new System.Windows.Forms.OpenFileDialog(); - this.folderBrowserDialogBuild = new System.Windows.Forms.FolderBrowserDialog(); - this.tabControlMain.SuspendLayout(); - this.tabPageDecode.SuspendLayout(); - this.groupBox_DECODE_Options.SuspendLayout(); - this.tableLayoutPanel_DECODE_Options.SuspendLayout(); - this.tableLayoutPanelDecodeOutputDir.SuspendLayout(); - this.tableLayoutPanelDecodeUseFramework.SuspendLayout(); - this.tabPageBuild.SuspendLayout(); - this.groupBox_BUILD_Options.SuspendLayout(); - this.tableLayoutPanel_BUILD_Options.SuspendLayout(); - this.tableLayoutPanelBuildOutputApk.SuspendLayout(); - this.tableLayoutPanelBuildUseFramework.SuspendLayout(); - this.tableLayoutPanelBuildUseAapt.SuspendLayout(); - this.tabPageInstallFramework.SuspendLayout(); - this.groupBox_IF_Options.SuspendLayout(); - this.tableLayoutPanel_IF_Options.SuspendLayout(); - this.tableLayoutPanel_IF_Tag.SuspendLayout(); - this.tableLayoutPanel_IF_FramePath.SuspendLayout(); - this.tabPageSign.SuspendLayout(); - this.groupBox_SIGN_Options.SuspendLayout(); - this.tableLayoutPanel_SIGN_Options.SuspendLayout(); - this.tableLayoutPanel_SIGN_PrivateKey.SuspendLayout(); - this.tableLayoutPanel_SIGN_PublicKey.SuspendLayout(); - this.tableLayoutPanel_SIGN_OutputFile.SuspendLayout(); - this.tabPageZipAlign.SuspendLayout(); - this.groupBox_ZIPALIGN_Options.SuspendLayout(); - this.tableLayoutPanel_ZIPALIGN_Options.SuspendLayout(); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown_ZIPALIGN_AlignmentBytes)).BeginInit(); - this.tableLayoutPanel_ZIPALIGN_OutputFile.SuspendLayout(); - this.statusStrip1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.contextMenuStripLog.SuspendLayout(); - this.SuspendLayout(); - // - // button_DECODE_BrowseInputAppPath - // - resources.ApplyResources(this.button_DECODE_BrowseInputAppPath, "button_DECODE_BrowseInputAppPath"); - this.button_DECODE_BrowseInputAppPath.Name = "button_DECODE_BrowseInputAppPath"; - this.button_DECODE_BrowseInputAppPath.UseVisualStyleBackColor = true; - this.button_DECODE_BrowseInputAppPath.Click += new System.EventHandler(this.button_DECODE_BrowseInputAppPath_Click); - // - // button_DECODE_Decode - // - resources.ApplyResources(this.button_DECODE_Decode, "button_DECODE_Decode"); - this.button_DECODE_Decode.Name = "button_DECODE_Decode"; - this.button_DECODE_Decode.UseVisualStyleBackColor = true; - this.button_DECODE_Decode.Click += new System.EventHandler(this.button_DECODE_Decode_Click); - // - // tabControlMain - // - resources.ApplyResources(this.tabControlMain, "tabControlMain"); - this.tabControlMain.Controls.Add(this.tabPageDecode); - this.tabControlMain.Controls.Add(this.tabPageBuild); - this.tabControlMain.Controls.Add(this.tabPageInstallFramework); - this.tabControlMain.Controls.Add(this.tabPageSign); - this.tabControlMain.Controls.Add(this.tabPageZipAlign); - this.tabControlMain.Name = "tabControlMain"; - this.tabControlMain.SelectedIndex = 0; - // - // tabPageDecode - // - this.tabPageDecode.BackColor = System.Drawing.SystemColors.Window; - this.tabPageDecode.Controls.Add(this.groupBox_DECODE_Options); - this.tabPageDecode.Controls.Add(this.textBox_DECODE_InputAppPath); - this.tabPageDecode.Controls.Add(this.button_DECODE_Decode); - this.tabPageDecode.Controls.Add(this.button_DECODE_BrowseInputAppPath); - resources.ApplyResources(this.tabPageDecode, "tabPageDecode"); - this.tabPageDecode.Name = "tabPageDecode"; - // - // groupBox_DECODE_Options - // - resources.ApplyResources(this.groupBox_DECODE_Options, "groupBox_DECODE_Options"); - this.groupBox_DECODE_Options.Controls.Add(this.tableLayoutPanel_DECODE_Options); - this.groupBox_DECODE_Options.Name = "groupBox_DECODE_Options"; - this.groupBox_DECODE_Options.TabStop = false; - // - // tableLayoutPanel_DECODE_Options - // - resources.ApplyResources(this.tableLayoutPanel_DECODE_Options, "tableLayoutPanel_DECODE_Options"); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.checkBox_DECODE_MatchOriginal, 0, 4); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.checkBox_DECODE_KeepBrokenRes, 0, 3); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.checkBox_DECODE_Force, 0, 2); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.checkBox_DECODE_NoRes, 0, 1); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.tableLayoutPanelDecodeOutputDir, 0, 6); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.tableLayoutPanelDecodeUseFramework, 0, 5); - this.tableLayoutPanel_DECODE_Options.Controls.Add(this.checkBox_DECODE_NoSrc, 0, 0); - this.tableLayoutPanel_DECODE_Options.Name = "tableLayoutPanel_DECODE_Options"; - // - // checkBox_DECODE_MatchOriginal - // - this.checkBox_DECODE_MatchOriginal.AutoEllipsis = true; - this.checkBox_DECODE_MatchOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_MatchOriginal; - this.checkBox_DECODE_MatchOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_MatchOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_MatchOriginal, "checkBox_DECODE_MatchOriginal"); - this.checkBox_DECODE_MatchOriginal.Name = "checkBox_DECODE_MatchOriginal"; - this.checkBox_DECODE_MatchOriginal.UseVisualStyleBackColor = true; - // - // checkBox_DECODE_KeepBrokenRes - // - this.checkBox_DECODE_KeepBrokenRes.AutoEllipsis = true; - this.checkBox_DECODE_KeepBrokenRes.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_KeepBrokenRes; - this.checkBox_DECODE_KeepBrokenRes.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_KeepBrokenRes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_KeepBrokenRes, "checkBox_DECODE_KeepBrokenRes"); - this.checkBox_DECODE_KeepBrokenRes.Name = "checkBox_DECODE_KeepBrokenRes"; - this.checkBox_DECODE_KeepBrokenRes.UseVisualStyleBackColor = true; - // - // checkBox_DECODE_Force - // - this.checkBox_DECODE_Force.AutoEllipsis = true; - this.checkBox_DECODE_Force.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_Force; - this.checkBox_DECODE_Force.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_Force", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_Force, "checkBox_DECODE_Force"); - this.checkBox_DECODE_Force.Name = "checkBox_DECODE_Force"; - this.checkBox_DECODE_Force.UseVisualStyleBackColor = true; - // - // checkBox_DECODE_NoRes - // - this.checkBox_DECODE_NoRes.AutoEllipsis = true; - this.checkBox_DECODE_NoRes.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_NoRes; - this.checkBox_DECODE_NoRes.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_NoRes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_NoRes, "checkBox_DECODE_NoRes"); - this.checkBox_DECODE_NoRes.Name = "checkBox_DECODE_NoRes"; - this.checkBox_DECODE_NoRes.UseVisualStyleBackColor = true; - // - // tableLayoutPanelDecodeOutputDir - // - resources.ApplyResources(this.tableLayoutPanelDecodeOutputDir, "tableLayoutPanelDecodeOutputDir"); - this.tableLayoutPanelDecodeOutputDir.Controls.Add(this.button_DECODE_BrowseOutputDirectory, 2, 0); - this.tableLayoutPanelDecodeOutputDir.Controls.Add(this.checkBox_DECODE_OutputDirectory, 0, 0); - this.tableLayoutPanelDecodeOutputDir.Controls.Add(this.textBox_DECODE_OutputDirectory, 1, 0); - this.tableLayoutPanelDecodeOutputDir.Name = "tableLayoutPanelDecodeOutputDir"; - // - // button_DECODE_BrowseOutputDirectory - // - this.button_DECODE_BrowseOutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.button_DECODE_BrowseOutputDirectory.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_UseOutputDir; - resources.ApplyResources(this.button_DECODE_BrowseOutputDirectory, "button_DECODE_BrowseOutputDirectory"); - this.button_DECODE_BrowseOutputDirectory.Name = "button_DECODE_BrowseOutputDirectory"; - this.button_DECODE_BrowseOutputDirectory.UseVisualStyleBackColor = true; - this.button_DECODE_BrowseOutputDirectory.Click += new System.EventHandler(this.button_DECODE_BrowseOutputDirectory_Click); - // - // checkBox_DECODE_OutputDirectory - // - this.checkBox_DECODE_OutputDirectory.AutoEllipsis = true; - this.checkBox_DECODE_OutputDirectory.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_UseOutputDir; - this.checkBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_OutputDirectory, "checkBox_DECODE_OutputDirectory"); - this.checkBox_DECODE_OutputDirectory.Name = "checkBox_DECODE_OutputDirectory"; - this.checkBox_DECODE_OutputDirectory.UseVisualStyleBackColor = true; - // - // textBox_DECODE_OutputDirectory - // - this.textBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_DECODE_OutputDirectory, "textBox_DECODE_OutputDirectory"); - this.textBox_DECODE_OutputDirectory.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_UseOutputDir; - this.textBox_DECODE_OutputDirectory.Name = "textBox_DECODE_OutputDirectory"; - this.textBox_DECODE_OutputDirectory.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_OutputDir; - // - // tableLayoutPanelDecodeUseFramework - // - resources.ApplyResources(this.tableLayoutPanelDecodeUseFramework, "tableLayoutPanelDecodeUseFramework"); - this.tableLayoutPanelDecodeUseFramework.Controls.Add(this.textBox_DECODE_FrameDir, 0, 0); - this.tableLayoutPanelDecodeUseFramework.Controls.Add(this.checkBox_DECODE_UseFramework, 0, 0); - this.tableLayoutPanelDecodeUseFramework.Controls.Add(this.button_DECODE_BrowseFrameDir, 2, 0); - this.tableLayoutPanelDecodeUseFramework.Name = "tableLayoutPanelDecodeUseFramework"; - // - // textBox_DECODE_FrameDir - // - this.textBox_DECODE_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_DECODE_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_DECODE_FrameDir, "textBox_DECODE_FrameDir"); - this.textBox_DECODE_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_UseFramework; - this.textBox_DECODE_FrameDir.Name = "textBox_DECODE_FrameDir"; - this.textBox_DECODE_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_FrameDir; - // - // checkBox_DECODE_UseFramework - // - this.checkBox_DECODE_UseFramework.AutoEllipsis = true; - this.checkBox_DECODE_UseFramework.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_UseFramework; - this.checkBox_DECODE_UseFramework.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_UseFramework, "checkBox_DECODE_UseFramework"); - this.checkBox_DECODE_UseFramework.Name = "checkBox_DECODE_UseFramework"; - this.checkBox_DECODE_UseFramework.UseVisualStyleBackColor = true; - // - // button_DECODE_BrowseFrameDir - // - this.button_DECODE_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.button_DECODE_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_UseFramework; - resources.ApplyResources(this.button_DECODE_BrowseFrameDir, "button_DECODE_BrowseFrameDir"); - this.button_DECODE_BrowseFrameDir.Name = "button_DECODE_BrowseFrameDir"; - this.button_DECODE_BrowseFrameDir.UseVisualStyleBackColor = true; - this.button_DECODE_BrowseFrameDir.Click += new System.EventHandler(this.button_DECODE_BrowseFrameDir_Click); - // - // checkBox_DECODE_NoSrc - // - this.checkBox_DECODE_NoSrc.AutoEllipsis = true; - this.checkBox_DECODE_NoSrc.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_NoSrc; - this.checkBox_DECODE_NoSrc.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_NoSrc", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_DECODE_NoSrc, "checkBox_DECODE_NoSrc"); - this.checkBox_DECODE_NoSrc.Name = "checkBox_DECODE_NoSrc"; - this.checkBox_DECODE_NoSrc.UseVisualStyleBackColor = true; - // - // textBox_DECODE_InputAppPath - // - resources.ApplyResources(this.textBox_DECODE_InputAppPath, "textBox_DECODE_InputAppPath"); - this.textBox_DECODE_InputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Decode_InputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_DECODE_InputAppPath.Name = "textBox_DECODE_InputAppPath"; - this.textBox_DECODE_InputAppPath.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Decode_InputAppPath; - // - // tabPageBuild - // - this.tabPageBuild.Controls.Add(this.groupBox_BUILD_Options); - this.tabPageBuild.Controls.Add(this.button_BUILD_BrowseInputProjectDir); - this.tabPageBuild.Controls.Add(this.button_BUILD_Build); - this.tabPageBuild.Controls.Add(this.textBox_BUILD_InputProjectDir); - resources.ApplyResources(this.tabPageBuild, "tabPageBuild"); - this.tabPageBuild.Name = "tabPageBuild"; - this.tabPageBuild.UseVisualStyleBackColor = true; - // - // groupBox_BUILD_Options - // - resources.ApplyResources(this.groupBox_BUILD_Options, "groupBox_BUILD_Options"); - this.groupBox_BUILD_Options.Controls.Add(this.tableLayoutPanel_BUILD_Options); - this.groupBox_BUILD_Options.Name = "groupBox_BUILD_Options"; - this.groupBox_BUILD_Options.TabStop = false; - // - // tableLayoutPanel_BUILD_Options - // - resources.ApplyResources(this.tableLayoutPanel_BUILD_Options, "tableLayoutPanel_BUILD_Options"); - this.tableLayoutPanel_BUILD_Options.Controls.Add(this.tableLayoutPanelBuildOutputApk, 0, 4); - this.tableLayoutPanel_BUILD_Options.Controls.Add(this.checkBox_BUILD_CopyOriginal, 0, 1); - this.tableLayoutPanel_BUILD_Options.Controls.Add(this.tableLayoutPanelBuildUseFramework, 0, 3); - this.tableLayoutPanel_BUILD_Options.Controls.Add(this.tableLayoutPanelBuildUseAapt, 0, 2); - this.tableLayoutPanel_BUILD_Options.Controls.Add(this.checkBox_BUILD_ForceAll, 0, 0); - this.tableLayoutPanel_BUILD_Options.Name = "tableLayoutPanel_BUILD_Options"; - // - // tableLayoutPanelBuildOutputApk - // - resources.ApplyResources(this.tableLayoutPanelBuildOutputApk, "tableLayoutPanelBuildOutputApk"); - this.tableLayoutPanelBuildOutputApk.Controls.Add(this.button_BUILD_BrowseOutputAppPath, 2, 0); - this.tableLayoutPanelBuildOutputApk.Controls.Add(this.checkBox_BUILD_OutputAppPath, 0, 0); - this.tableLayoutPanelBuildOutputApk.Controls.Add(this.textBox_BUILD_OutputAppPath, 1, 0); - this.tableLayoutPanelBuildOutputApk.Name = "tableLayoutPanelBuildOutputApk"; - // - // button_BUILD_BrowseOutputAppPath - // - this.button_BUILD_BrowseOutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.button_BUILD_BrowseOutputAppPath.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseOutputAppPath; - resources.ApplyResources(this.button_BUILD_BrowseOutputAppPath, "button_BUILD_BrowseOutputAppPath"); - this.button_BUILD_BrowseOutputAppPath.Name = "button_BUILD_BrowseOutputAppPath"; - this.button_BUILD_BrowseOutputAppPath.UseVisualStyleBackColor = true; - this.button_BUILD_BrowseOutputAppPath.Click += new System.EventHandler(this.button_BUILD_BrowseOutputAppPath_Click); - // - // checkBox_BUILD_OutputAppPath - // - this.checkBox_BUILD_OutputAppPath.AutoEllipsis = true; - this.checkBox_BUILD_OutputAppPath.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseOutputAppPath; - this.checkBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_BUILD_OutputAppPath, "checkBox_BUILD_OutputAppPath"); - this.checkBox_BUILD_OutputAppPath.Name = "checkBox_BUILD_OutputAppPath"; - this.checkBox_BUILD_OutputAppPath.UseVisualStyleBackColor = true; - // - // textBox_BUILD_OutputAppPath - // - this.textBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_OutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_BUILD_OutputAppPath, "textBox_BUILD_OutputAppPath"); - this.textBox_BUILD_OutputAppPath.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseOutputAppPath; - this.textBox_BUILD_OutputAppPath.Name = "textBox_BUILD_OutputAppPath"; - this.textBox_BUILD_OutputAppPath.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_OutputAppPath; - // - // checkBox_BUILD_CopyOriginal - // - this.checkBox_BUILD_CopyOriginal.AutoEllipsis = true; - this.checkBox_BUILD_CopyOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_CopyOriginal; - this.checkBox_BUILD_CopyOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_CopyOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_BUILD_CopyOriginal, "checkBox_BUILD_CopyOriginal"); - this.checkBox_BUILD_CopyOriginal.Name = "checkBox_BUILD_CopyOriginal"; - this.checkBox_BUILD_CopyOriginal.UseVisualStyleBackColor = true; - // - // tableLayoutPanelBuildUseFramework - // - resources.ApplyResources(this.tableLayoutPanelBuildUseFramework, "tableLayoutPanelBuildUseFramework"); - this.tableLayoutPanelBuildUseFramework.Controls.Add(this.button_BUILD_BrowseFrameDir, 2, 0); - this.tableLayoutPanelBuildUseFramework.Controls.Add(this.checkBox_BUILD_UseFramework, 0, 0); - this.tableLayoutPanelBuildUseFramework.Controls.Add(this.textBox_BUILD_FrameDir, 1, 0); - this.tableLayoutPanelBuildUseFramework.Name = "tableLayoutPanelBuildUseFramework"; - // - // button_BUILD_BrowseFrameDir - // - this.button_BUILD_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.button_BUILD_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseFramework; - resources.ApplyResources(this.button_BUILD_BrowseFrameDir, "button_BUILD_BrowseFrameDir"); - this.button_BUILD_BrowseFrameDir.Name = "button_BUILD_BrowseFrameDir"; - this.button_BUILD_BrowseFrameDir.UseVisualStyleBackColor = true; - this.button_BUILD_BrowseFrameDir.Click += new System.EventHandler(this.button_BUILD_BrowseFrameDir_Click); - // - // checkBox_BUILD_UseFramework - // - this.checkBox_BUILD_UseFramework.AutoEllipsis = true; - this.checkBox_BUILD_UseFramework.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseFramework; - this.checkBox_BUILD_UseFramework.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_BUILD_UseFramework, "checkBox_BUILD_UseFramework"); - this.checkBox_BUILD_UseFramework.Name = "checkBox_BUILD_UseFramework"; - this.checkBox_BUILD_UseFramework.UseVisualStyleBackColor = true; - // - // textBox_BUILD_FrameDir - // - this.textBox_BUILD_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_BUILD_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_BUILD_FrameDir, "textBox_BUILD_FrameDir"); - this.textBox_BUILD_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseFramework; - this.textBox_BUILD_FrameDir.Name = "textBox_BUILD_FrameDir"; - this.textBox_BUILD_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_FrameDir; - // - // tableLayoutPanelBuildUseAapt - // - resources.ApplyResources(this.tableLayoutPanelBuildUseAapt, "tableLayoutPanelBuildUseAapt"); - this.tableLayoutPanelBuildUseAapt.Controls.Add(this.textBox_BUILD_AaptPath, 0, 0); - this.tableLayoutPanelBuildUseAapt.Controls.Add(this.checkBox_BUILD_UseAapt, 0, 0); - this.tableLayoutPanelBuildUseAapt.Controls.Add(this.button_BUILD_BrowseAaptPath, 2, 0); - this.tableLayoutPanelBuildUseAapt.Name = "tableLayoutPanelBuildUseAapt"; - // - // textBox_BUILD_AaptPath - // - this.textBox_BUILD_AaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_AaptPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_BUILD_AaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_BUILD_AaptPath, "textBox_BUILD_AaptPath"); - this.textBox_BUILD_AaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseAapt; - this.textBox_BUILD_AaptPath.Name = "textBox_BUILD_AaptPath"; - this.textBox_BUILD_AaptPath.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_AaptPath; - // - // checkBox_BUILD_UseAapt - // - this.checkBox_BUILD_UseAapt.AutoEllipsis = true; - this.checkBox_BUILD_UseAapt.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseAapt; - this.checkBox_BUILD_UseAapt.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_BUILD_UseAapt, "checkBox_BUILD_UseAapt"); - this.checkBox_BUILD_UseAapt.Name = "checkBox_BUILD_UseAapt"; - this.checkBox_BUILD_UseAapt.UseVisualStyleBackColor = true; - // - // button_BUILD_BrowseAaptPath - // - this.button_BUILD_BrowseAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.button_BUILD_BrowseAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_UseAapt; - resources.ApplyResources(this.button_BUILD_BrowseAaptPath, "button_BUILD_BrowseAaptPath"); - this.button_BUILD_BrowseAaptPath.Name = "button_BUILD_BrowseAaptPath"; - this.button_BUILD_BrowseAaptPath.UseVisualStyleBackColor = true; - this.button_BUILD_BrowseAaptPath.Click += new System.EventHandler(this.button_BUILD_BrowseAaptPath_Click); - // - // checkBox_BUILD_ForceAll - // - this.checkBox_BUILD_ForceAll.AutoEllipsis = true; - this.checkBox_BUILD_ForceAll.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_ForceAll; - this.checkBox_BUILD_ForceAll.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_ForceAll", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_BUILD_ForceAll, "checkBox_BUILD_ForceAll"); - this.checkBox_BUILD_ForceAll.Name = "checkBox_BUILD_ForceAll"; - this.checkBox_BUILD_ForceAll.UseVisualStyleBackColor = true; - // - // button_BUILD_BrowseInputProjectDir - // - resources.ApplyResources(this.button_BUILD_BrowseInputProjectDir, "button_BUILD_BrowseInputProjectDir"); - this.button_BUILD_BrowseInputProjectDir.Name = "button_BUILD_BrowseInputProjectDir"; - this.button_BUILD_BrowseInputProjectDir.UseVisualStyleBackColor = true; - this.button_BUILD_BrowseInputProjectDir.Click += new System.EventHandler(this.button_BUILD_BrowseInputProjectDir_Click); - // - // button_BUILD_Build - // - resources.ApplyResources(this.button_BUILD_Build, "button_BUILD_Build"); - this.button_BUILD_Build.Name = "button_BUILD_Build"; - this.button_BUILD_Build.UseVisualStyleBackColor = true; - this.button_BUILD_Build.Click += new System.EventHandler(this.button_BUILD_Build_Click); - // - // textBox_BUILD_InputProjectDir - // - resources.ApplyResources(this.textBox_BUILD_InputProjectDir, "textBox_BUILD_InputProjectDir"); - this.textBox_BUILD_InputProjectDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Build_InputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_BUILD_InputProjectDir.Name = "textBox_BUILD_InputProjectDir"; - this.textBox_BUILD_InputProjectDir.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Build_InputDir; - // - // tabPageInstallFramework - // - this.tabPageInstallFramework.Controls.Add(this.groupBox_IF_Options); - this.tabPageInstallFramework.Controls.Add(this.button_IF_InstallFramework); - this.tabPageInstallFramework.Controls.Add(this.button_IF_BrowseInputFramePath); - this.tabPageInstallFramework.Controls.Add(this.textBox_IF_InputFramePath); - resources.ApplyResources(this.tabPageInstallFramework, "tabPageInstallFramework"); - this.tabPageInstallFramework.Name = "tabPageInstallFramework"; - this.tabPageInstallFramework.UseVisualStyleBackColor = true; - // - // groupBox_IF_Options - // - resources.ApplyResources(this.groupBox_IF_Options, "groupBox_IF_Options"); - this.groupBox_IF_Options.Controls.Add(this.tableLayoutPanel_IF_Options); - this.groupBox_IF_Options.Name = "groupBox_IF_Options"; - this.groupBox_IF_Options.TabStop = false; - // - // tableLayoutPanel_IF_Options - // - resources.ApplyResources(this.tableLayoutPanel_IF_Options, "tableLayoutPanel_IF_Options"); - this.tableLayoutPanel_IF_Options.Controls.Add(this.tableLayoutPanel_IF_Tag, 0, 1); - this.tableLayoutPanel_IF_Options.Controls.Add(this.tableLayoutPanel_IF_FramePath, 0, 0); - this.tableLayoutPanel_IF_Options.Name = "tableLayoutPanel_IF_Options"; - // - // tableLayoutPanel_IF_Tag - // - resources.ApplyResources(this.tableLayoutPanel_IF_Tag, "tableLayoutPanel_IF_Tag"); - this.tableLayoutPanel_IF_Tag.Controls.Add(this.checkBox_IF_Tag, 0, 0); - this.tableLayoutPanel_IF_Tag.Controls.Add(this.textBox_IF_Tag, 1, 0); - this.tableLayoutPanel_IF_Tag.Name = "tableLayoutPanel_IF_Tag"; - // - // checkBox_IF_Tag - // - this.checkBox_IF_Tag.AutoEllipsis = true; - this.checkBox_IF_Tag.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_UseTag; - this.checkBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_UseTag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_IF_Tag, "checkBox_IF_Tag"); - this.checkBox_IF_Tag.Name = "checkBox_IF_Tag"; - this.checkBox_IF_Tag.UseVisualStyleBackColor = true; - // - // textBox_IF_Tag - // - this.textBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_Tag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_UseTag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_IF_Tag, "textBox_IF_Tag"); - this.textBox_IF_Tag.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_UseTag; - this.textBox_IF_Tag.Name = "textBox_IF_Tag"; - this.textBox_IF_Tag.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_Tag; - // - // tableLayoutPanel_IF_FramePath - // - resources.ApplyResources(this.tableLayoutPanel_IF_FramePath, "tableLayoutPanel_IF_FramePath"); - this.tableLayoutPanel_IF_FramePath.Controls.Add(this.textBox_IF_FrameDir, 0, 0); - this.tableLayoutPanel_IF_FramePath.Controls.Add(this.checkBox_IF_FramePath, 0, 0); - this.tableLayoutPanel_IF_FramePath.Controls.Add(this.button_IF_BrowseFrameDir, 2, 0); - this.tableLayoutPanel_IF_FramePath.Name = "tableLayoutPanel_IF_FramePath"; - // - // textBox_IF_FrameDir - // - this.textBox_IF_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_IF_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_IF_FrameDir, "textBox_IF_FrameDir"); - this.textBox_IF_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_UseFrameDir; - this.textBox_IF_FrameDir.Name = "textBox_IF_FrameDir"; - this.textBox_IF_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_FrameDir; - // - // checkBox_IF_FramePath - // - this.checkBox_IF_FramePath.AutoEllipsis = true; - this.checkBox_IF_FramePath.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_UseFrameDir; - this.checkBox_IF_FramePath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_IF_FramePath, "checkBox_IF_FramePath"); - this.checkBox_IF_FramePath.Name = "checkBox_IF_FramePath"; - this.checkBox_IF_FramePath.UseVisualStyleBackColor = true; - // - // button_IF_BrowseFrameDir - // - this.button_IF_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.button_IF_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_UseFrameDir; - resources.ApplyResources(this.button_IF_BrowseFrameDir, "button_IF_BrowseFrameDir"); - this.button_IF_BrowseFrameDir.Name = "button_IF_BrowseFrameDir"; - this.button_IF_BrowseFrameDir.UseVisualStyleBackColor = true; - this.button_IF_BrowseFrameDir.Click += new System.EventHandler(this.button_IF_BrowseFrameDir_Click); - // - // button_IF_InstallFramework - // - resources.ApplyResources(this.button_IF_InstallFramework, "button_IF_InstallFramework"); - this.button_IF_InstallFramework.Name = "button_IF_InstallFramework"; - this.button_IF_InstallFramework.UseVisualStyleBackColor = true; - this.button_IF_InstallFramework.Click += new System.EventHandler(this.button_IF_InstallFramework_Click); - // - // button_IF_BrowseInputFramePath - // - resources.ApplyResources(this.button_IF_BrowseInputFramePath, "button_IF_BrowseInputFramePath"); - this.button_IF_BrowseInputFramePath.Name = "button_IF_BrowseInputFramePath"; - this.button_IF_BrowseInputFramePath.UseVisualStyleBackColor = true; - this.button_IF_BrowseInputFramePath.Click += new System.EventHandler(this.button_IF_BrowseInputFramePath_Click); - // - // textBox_IF_InputFramePath - // - resources.ApplyResources(this.textBox_IF_InputFramePath, "textBox_IF_InputFramePath"); - this.textBox_IF_InputFramePath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_InstallFramework_InputFramePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_IF_InputFramePath.Name = "textBox_IF_InputFramePath"; - this.textBox_IF_InputFramePath.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_InstallFramework_InputFramePath; - // - // tabPageSign - // - this.tabPageSign.BackColor = System.Drawing.SystemColors.Window; - this.tabPageSign.Controls.Add(this.groupBox_SIGN_Options); - this.tabPageSign.Controls.Add(this.textBox_SIGN_InputFile); - this.tabPageSign.Controls.Add(this.button_SIGN_BrowseInputFile); - this.tabPageSign.Controls.Add(this.button_SIGN_Sign); - resources.ApplyResources(this.tabPageSign, "tabPageSign"); - this.tabPageSign.Name = "tabPageSign"; - // - // groupBox_SIGN_Options - // - resources.ApplyResources(this.groupBox_SIGN_Options, "groupBox_SIGN_Options"); - this.groupBox_SIGN_Options.Controls.Add(this.tableLayoutPanel_SIGN_Options); - this.groupBox_SIGN_Options.Name = "groupBox_SIGN_Options"; - this.groupBox_SIGN_Options.TabStop = false; - // - // tableLayoutPanel_SIGN_Options - // - resources.ApplyResources(this.tableLayoutPanel_SIGN_Options, "tableLayoutPanel_SIGN_Options"); - this.tableLayoutPanel_SIGN_Options.Controls.Add(this.tableLayoutPanel_SIGN_PrivateKey, 0, 1); - this.tableLayoutPanel_SIGN_Options.Controls.Add(this.tableLayoutPanel_SIGN_PublicKey, 0, 0); - this.tableLayoutPanel_SIGN_Options.Controls.Add(this.tableLayoutPanel_SIGN_OutputFile, 0, 2); - this.tableLayoutPanel_SIGN_Options.Name = "tableLayoutPanel_SIGN_Options"; - // - // tableLayoutPanel_SIGN_PrivateKey - // - resources.ApplyResources(this.tableLayoutPanel_SIGN_PrivateKey, "tableLayoutPanel_SIGN_PrivateKey"); - this.tableLayoutPanel_SIGN_PrivateKey.Controls.Add(this.label_SIGN_PrivateKey, 0, 0); - this.tableLayoutPanel_SIGN_PrivateKey.Controls.Add(this.button_SIGN_BrowsePrivateKey, 2, 0); - this.tableLayoutPanel_SIGN_PrivateKey.Controls.Add(this.textBox_SIGN_PrivateKey, 1, 0); - this.tableLayoutPanel_SIGN_PrivateKey.Name = "tableLayoutPanel_SIGN_PrivateKey"; - // - // label_SIGN_PrivateKey - // - resources.ApplyResources(this.label_SIGN_PrivateKey, "label_SIGN_PrivateKey"); - this.label_SIGN_PrivateKey.Name = "label_SIGN_PrivateKey"; - // - // button_SIGN_BrowsePrivateKey - // - resources.ApplyResources(this.button_SIGN_BrowsePrivateKey, "button_SIGN_BrowsePrivateKey"); - this.button_SIGN_BrowsePrivateKey.Name = "button_SIGN_BrowsePrivateKey"; - this.button_SIGN_BrowsePrivateKey.UseVisualStyleBackColor = true; - this.button_SIGN_BrowsePrivateKey.Click += new System.EventHandler(this.button_SIGN_BrowsePrivateKey_Click); - // - // textBox_SIGN_PrivateKey - // - this.textBox_SIGN_PrivateKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_SIGN_PrivateKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_SIGN_PrivateKey, "textBox_SIGN_PrivateKey"); - this.textBox_SIGN_PrivateKey.Name = "textBox_SIGN_PrivateKey"; - this.textBox_SIGN_PrivateKey.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_SIGN_PrivateKey; - // - // tableLayoutPanel_SIGN_PublicKey - // - resources.ApplyResources(this.tableLayoutPanel_SIGN_PublicKey, "tableLayoutPanel_SIGN_PublicKey"); - this.tableLayoutPanel_SIGN_PublicKey.Controls.Add(this.label_SIGN_PublicKey, 0, 0); - this.tableLayoutPanel_SIGN_PublicKey.Controls.Add(this.button_SIGN_BrowsePublicKey, 2, 0); - this.tableLayoutPanel_SIGN_PublicKey.Controls.Add(this.textBox_SIGN_PublicKey, 1, 0); - this.tableLayoutPanel_SIGN_PublicKey.Name = "tableLayoutPanel_SIGN_PublicKey"; - // - // label_SIGN_PublicKey - // - resources.ApplyResources(this.label_SIGN_PublicKey, "label_SIGN_PublicKey"); - this.label_SIGN_PublicKey.Name = "label_SIGN_PublicKey"; - // - // button_SIGN_BrowsePublicKey - // - resources.ApplyResources(this.button_SIGN_BrowsePublicKey, "button_SIGN_BrowsePublicKey"); - this.button_SIGN_BrowsePublicKey.Name = "button_SIGN_BrowsePublicKey"; - this.button_SIGN_BrowsePublicKey.UseVisualStyleBackColor = true; - this.button_SIGN_BrowsePublicKey.Click += new System.EventHandler(this.button_SIGN_BrowsePublicKey_Click); - // - // textBox_SIGN_PublicKey - // - this.textBox_SIGN_PublicKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_SIGN_PublicKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_SIGN_PublicKey, "textBox_SIGN_PublicKey"); - this.textBox_SIGN_PublicKey.Name = "textBox_SIGN_PublicKey"; - this.textBox_SIGN_PublicKey.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_SIGN_PublicKey; - // - // tableLayoutPanel_SIGN_OutputFile - // - resources.ApplyResources(this.tableLayoutPanel_SIGN_OutputFile, "tableLayoutPanel_SIGN_OutputFile"); - this.tableLayoutPanel_SIGN_OutputFile.Controls.Add(this.label_SIGN_OutputFile, 0, 0); - this.tableLayoutPanel_SIGN_OutputFile.Controls.Add(this.button_SIGN_BrowseOutputFile, 2, 0); - this.tableLayoutPanel_SIGN_OutputFile.Controls.Add(this.textBox_SIGN_OutputFile, 1, 0); - this.tableLayoutPanel_SIGN_OutputFile.Name = "tableLayoutPanel_SIGN_OutputFile"; - // - // label_SIGN_OutputFile - // - resources.ApplyResources(this.label_SIGN_OutputFile, "label_SIGN_OutputFile"); - this.label_SIGN_OutputFile.Name = "label_SIGN_OutputFile"; - // - // button_SIGN_BrowseOutputFile - // - resources.ApplyResources(this.button_SIGN_BrowseOutputFile, "button_SIGN_BrowseOutputFile"); - this.button_SIGN_BrowseOutputFile.Name = "button_SIGN_BrowseOutputFile"; - this.button_SIGN_BrowseOutputFile.UseVisualStyleBackColor = true; - this.button_SIGN_BrowseOutputFile.Click += new System.EventHandler(this.button_SIGN_BrowseOutputFile_Click); - // - // textBox_SIGN_OutputFile - // - this.textBox_SIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_SIGN_OutputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_SIGN_OutputFile, "textBox_SIGN_OutputFile"); - this.textBox_SIGN_OutputFile.Name = "textBox_SIGN_OutputFile"; - this.textBox_SIGN_OutputFile.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_SIGN_OutputFile; - // - // textBox_SIGN_InputFile - // - resources.ApplyResources(this.textBox_SIGN_InputFile, "textBox_SIGN_InputFile"); - this.textBox_SIGN_InputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_SIGN_InputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_SIGN_InputFile.Name = "textBox_SIGN_InputFile"; - this.textBox_SIGN_InputFile.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_SIGN_InputFile; - // - // button_SIGN_BrowseInputFile - // - resources.ApplyResources(this.button_SIGN_BrowseInputFile, "button_SIGN_BrowseInputFile"); - this.button_SIGN_BrowseInputFile.Name = "button_SIGN_BrowseInputFile"; - this.button_SIGN_BrowseInputFile.UseVisualStyleBackColor = true; - this.button_SIGN_BrowseInputFile.Click += new System.EventHandler(this.button_SIGN_BrowseInputFile_Click); - // - // button_SIGN_Sign - // - resources.ApplyResources(this.button_SIGN_Sign, "button_SIGN_Sign"); - this.button_SIGN_Sign.Name = "button_SIGN_Sign"; - this.button_SIGN_Sign.UseVisualStyleBackColor = true; - this.button_SIGN_Sign.Click += new System.EventHandler(this.button_SIGN_Sign_Click); - // - // tabPageZipAlign - // - this.tabPageZipAlign.Controls.Add(this.groupBox_ZIPALIGN_Options); - this.tabPageZipAlign.Controls.Add(this.button_ZIPALIGN_Align); - this.tabPageZipAlign.Controls.Add(this.button_ZIPALIGN_BrowseInputFile); - this.tabPageZipAlign.Controls.Add(this.textBox_ZIPALIGN_InputFile); - resources.ApplyResources(this.tabPageZipAlign, "tabPageZipAlign"); - this.tabPageZipAlign.Name = "tabPageZipAlign"; - this.tabPageZipAlign.UseVisualStyleBackColor = true; - // - // groupBox_ZIPALIGN_Options - // - resources.ApplyResources(this.groupBox_ZIPALIGN_Options, "groupBox_ZIPALIGN_Options"); - this.groupBox_ZIPALIGN_Options.Controls.Add(this.tableLayoutPanel_ZIPALIGN_Options); - this.groupBox_ZIPALIGN_Options.Name = "groupBox_ZIPALIGN_Options"; - this.groupBox_ZIPALIGN_Options.TabStop = false; - // - // tableLayoutPanel_ZIPALIGN_Options - // - resources.ApplyResources(this.tableLayoutPanel_ZIPALIGN_Options, "tableLayoutPanel_ZIPALIGN_Options"); - this.tableLayoutPanel_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_Recompress, 0, 3); - this.tableLayoutPanel_ZIPALIGN_Options.Controls.Add(this.tableLayoutPanel_ZIPALIGN_AlignmentBytes, 0, 0); - this.tableLayoutPanel_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_VerboseOutput, 0, 2); - this.tableLayoutPanel_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_CheckAlignment, 0, 1); - this.tableLayoutPanel_ZIPALIGN_Options.Controls.Add(this.tableLayoutPanel_ZIPALIGN_OutputFile, 0, 5); - this.tableLayoutPanel_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_OverwriteOutputFile, 0, 4); - this.tableLayoutPanel_ZIPALIGN_Options.Name = "tableLayoutPanel_ZIPALIGN_Options"; - // - // checkBox_ZIPALIGN_Recompress - // - this.checkBox_ZIPALIGN_Recompress.AutoEllipsis = true; - this.checkBox_ZIPALIGN_Recompress.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_Recompress; - this.checkBox_ZIPALIGN_Recompress.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_Recompress", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_ZIPALIGN_Recompress, "checkBox_ZIPALIGN_Recompress"); - this.checkBox_ZIPALIGN_Recompress.Name = "checkBox_ZIPALIGN_Recompress"; - this.checkBox_ZIPALIGN_Recompress.UseVisualStyleBackColor = true; - // - // tableLayoutPanel_ZIPALIGN_AlignmentBytes - // - resources.ApplyResources(this.tableLayoutPanel_ZIPALIGN_AlignmentBytes, "tableLayoutPanel_ZIPALIGN_AlignmentBytes"); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes.Controls.Add(this.label_ZIPALIGN_AlignmentBytes, 0, 0); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes.Controls.Add(this.numericUpDown_ZIPALIGN_AlignmentBytes, 1, 0); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes.Name = "tableLayoutPanel_ZIPALIGN_AlignmentBytes"; - // - // label_ZIPALIGN_AlignmentBytes - // - resources.ApplyResources(this.label_ZIPALIGN_AlignmentBytes, "label_ZIPALIGN_AlignmentBytes"); - this.label_ZIPALIGN_AlignmentBytes.Name = "label_ZIPALIGN_AlignmentBytes"; - // - // numericUpDown_ZIPALIGN_AlignmentBytes - // - this.numericUpDown_ZIPALIGN_AlignmentBytes.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_AlignmentInBytes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.numericUpDown_ZIPALIGN_AlignmentBytes, "numericUpDown_ZIPALIGN_AlignmentBytes"); - this.numericUpDown_ZIPALIGN_AlignmentBytes.Maximum = new decimal(new int[] { - 32, - 0, - 0, - 0}); - this.numericUpDown_ZIPALIGN_AlignmentBytes.Name = "numericUpDown_ZIPALIGN_AlignmentBytes"; - this.numericUpDown_ZIPALIGN_AlignmentBytes.Value = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_AlignmentInBytes; - // - // checkBox_ZIPALIGN_VerboseOutput - // - this.checkBox_ZIPALIGN_VerboseOutput.AutoEllipsis = true; - this.checkBox_ZIPALIGN_VerboseOutput.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_Verbose; - this.checkBox_ZIPALIGN_VerboseOutput.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_Verbose", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_ZIPALIGN_VerboseOutput, "checkBox_ZIPALIGN_VerboseOutput"); - this.checkBox_ZIPALIGN_VerboseOutput.Name = "checkBox_ZIPALIGN_VerboseOutput"; - this.checkBox_ZIPALIGN_VerboseOutput.UseVisualStyleBackColor = true; - // - // checkBox_ZIPALIGN_CheckAlignment - // - this.checkBox_ZIPALIGN_CheckAlignment.AutoEllipsis = true; - this.checkBox_ZIPALIGN_CheckAlignment.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_CheckOnly; - this.checkBox_ZIPALIGN_CheckAlignment.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_CheckOnly", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_ZIPALIGN_CheckAlignment, "checkBox_ZIPALIGN_CheckAlignment"); - this.checkBox_ZIPALIGN_CheckAlignment.Name = "checkBox_ZIPALIGN_CheckAlignment"; - this.checkBox_ZIPALIGN_CheckAlignment.UseVisualStyleBackColor = true; - this.checkBox_ZIPALIGN_CheckAlignment.CheckedChanged += new System.EventHandler(this.checkBox_ZIPALIGN_CheckAlignment_CheckedChanged); - // - // tableLayoutPanel_ZIPALIGN_OutputFile - // - resources.ApplyResources(this.tableLayoutPanel_ZIPALIGN_OutputFile, "tableLayoutPanel_ZIPALIGN_OutputFile"); - this.tableLayoutPanel_ZIPALIGN_OutputFile.Controls.Add(this.label_ZIPALIGN_OutputFile, 0, 0); - this.tableLayoutPanel_ZIPALIGN_OutputFile.Controls.Add(this.button_ZIPALIGN_BrowseOutputFile, 2, 0); - this.tableLayoutPanel_ZIPALIGN_OutputFile.Controls.Add(this.textBox_ZIPALIGN_OutputFile, 1, 0); - this.tableLayoutPanel_ZIPALIGN_OutputFile.Name = "tableLayoutPanel_ZIPALIGN_OutputFile"; - // - // label_ZIPALIGN_OutputFile - // - resources.ApplyResources(this.label_ZIPALIGN_OutputFile, "label_ZIPALIGN_OutputFile"); - this.label_ZIPALIGN_OutputFile.Name = "label_ZIPALIGN_OutputFile"; - // - // button_ZIPALIGN_BrowseOutputFile - // - resources.ApplyResources(this.button_ZIPALIGN_BrowseOutputFile, "button_ZIPALIGN_BrowseOutputFile"); - this.button_ZIPALIGN_BrowseOutputFile.Name = "button_ZIPALIGN_BrowseOutputFile"; - this.button_ZIPALIGN_BrowseOutputFile.UseVisualStyleBackColor = true; - this.button_ZIPALIGN_BrowseOutputFile.Click += new System.EventHandler(this.button_ZIPALIGN_BrowseOutputFile_Click); - // - // textBox_ZIPALIGN_OutputFile - // - this.textBox_ZIPALIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_OutputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.textBox_ZIPALIGN_OutputFile, "textBox_ZIPALIGN_OutputFile"); - this.textBox_ZIPALIGN_OutputFile.Name = "textBox_ZIPALIGN_OutputFile"; - this.textBox_ZIPALIGN_OutputFile.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_OutputFile; - // - // checkBox_ZIPALIGN_OverwriteOutputFile - // - this.checkBox_ZIPALIGN_OverwriteOutputFile.AutoEllipsis = true; - this.checkBox_ZIPALIGN_OverwriteOutputFile.Checked = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_OverwriteOutputFile; - this.checkBox_ZIPALIGN_OverwriteOutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_OverwriteOutputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - resources.ApplyResources(this.checkBox_ZIPALIGN_OverwriteOutputFile, "checkBox_ZIPALIGN_OverwriteOutputFile"); - this.checkBox_ZIPALIGN_OverwriteOutputFile.Name = "checkBox_ZIPALIGN_OverwriteOutputFile"; - this.checkBox_ZIPALIGN_OverwriteOutputFile.UseVisualStyleBackColor = true; - // - // button_ZIPALIGN_Align - // - resources.ApplyResources(this.button_ZIPALIGN_Align, "button_ZIPALIGN_Align"); - this.button_ZIPALIGN_Align.Name = "button_ZIPALIGN_Align"; - this.button_ZIPALIGN_Align.UseVisualStyleBackColor = true; - this.button_ZIPALIGN_Align.Click += new System.EventHandler(this.button_ZIPALIGN_Align_Click); - // - // button_ZIPALIGN_BrowseInputFile - // - resources.ApplyResources(this.button_ZIPALIGN_BrowseInputFile, "button_ZIPALIGN_BrowseInputFile"); - this.button_ZIPALIGN_BrowseInputFile.Name = "button_ZIPALIGN_BrowseInputFile"; - this.button_ZIPALIGN_BrowseInputFile.UseVisualStyleBackColor = true; - this.button_ZIPALIGN_BrowseInputFile.Click += new System.EventHandler(this.button_ZIPALIGN_BrowseInputFile_Click); - // - // textBox_ZIPALIGN_InputFile - // - resources.ApplyResources(this.textBox_ZIPALIGN_InputFile, "textBox_ZIPALIGN_InputFile"); - this.textBox_ZIPALIGN_InputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "MAIN_Zipalign_InputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBox_ZIPALIGN_InputFile.Name = "textBox_ZIPALIGN_InputFile"; - this.textBox_ZIPALIGN_InputFile.Text = global::APKToolGUI.Properties.Settings.Default.MAIN_Zipalign_InputFile; - // - // statusStrip1 - // - this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripStatusLabelStateImage, - this.toolStripStatusLabelStateText, - this.toolStripProgressBar1}); - resources.ApplyResources(this.statusStrip1, "statusStrip1"); - this.statusStrip1.Name = "statusStrip1"; - // - // toolStripStatusLabelStateImage - // - this.toolStripStatusLabelStateImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripStatusLabelStateImage.Name = "toolStripStatusLabelStateImage"; - resources.ApplyResources(this.toolStripStatusLabelStateImage, "toolStripStatusLabelStateImage"); - // - // toolStripStatusLabelStateText - // - this.toolStripStatusLabelStateText.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.toolStripStatusLabelStateText.Image = global::APKToolGUI.Properties.Resources.waiting; - resources.ApplyResources(this.toolStripStatusLabelStateText, "toolStripStatusLabelStateText"); - this.toolStripStatusLabelStateText.Name = "toolStripStatusLabelStateText"; - this.toolStripStatusLabelStateText.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.toolStripStatusLabelStateText.Spring = true; - // - // toolStripProgressBar1 - // - this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - resources.ApplyResources(this.toolStripProgressBar1, "toolStripProgressBar1"); - this.toolStripProgressBar1.MarqueeAnimationSpeed = 30; - this.toolStripProgressBar1.Name = "toolStripProgressBar1"; - this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; - // - // dataGridView1 - // - this.dataGridView1.AllowUserToAddRows = false; - this.dataGridView1.AllowUserToDeleteRows = false; - this.dataGridView1.AllowUserToResizeRows = false; - resources.ApplyResources(this.dataGridView1, "dataGridView1"); - this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Window; - this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - this.dataGridView1.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; - this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ColumnImage, - this.ColumnTime, - this.ColumnMessage}); - this.dataGridView1.ContextMenuStrip = this.contextMenuStripLog; - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.ReadOnly = true; - this.dataGridView1.RowHeadersVisible = false; - this.dataGridView1.RowTemplate.Height = 19; - this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView1.ShowEditingIcon = false; - // - // ColumnImage - // - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.NullValue = null; - this.ColumnImage.DefaultCellStyle = dataGridViewCellStyle2; - this.ColumnImage.Frozen = true; - resources.ApplyResources(this.ColumnImage, "ColumnImage"); - this.ColumnImage.Name = "ColumnImage"; - this.ColumnImage.ReadOnly = true; - this.ColumnImage.Resizable = System.Windows.Forms.DataGridViewTriState.False; - // - // ColumnTime - // - this.ColumnTime.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ColumnTime.Frozen = true; - resources.ApplyResources(this.ColumnTime, "ColumnTime"); - this.ColumnTime.Name = "ColumnTime"; - this.ColumnTime.ReadOnly = true; - // - // ColumnMessage - // - this.ColumnMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - resources.ApplyResources(this.ColumnMessage, "ColumnMessage"); - this.ColumnMessage.Name = "ColumnMessage"; - this.ColumnMessage.ReadOnly = true; - // - // contextMenuStripLog - // - this.contextMenuStripLog.ImageScalingSize = new System.Drawing.Size(20, 20); - this.contextMenuStripLog.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.clearLogToolStripMenuItem}); - this.contextMenuStripLog.Name = "contextMenuStripLog"; - resources.ApplyResources(this.contextMenuStripLog, "contextMenuStripLog"); - // - // clearLogToolStripMenuItem - // - this.clearLogToolStripMenuItem.Name = "clearLogToolStripMenuItem"; - resources.ApplyResources(this.clearLogToolStripMenuItem, "clearLogToolStripMenuItem"); - this.clearLogToolStripMenuItem.Click += new System.EventHandler(this.clearLogToolStripMenuItem_Click); - // - // mainMenu1 - // - this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItemFile, - this.menuItemHelp}); - // - // menuItemFile - // - this.menuItemFile.Index = 0; - this.menuItemFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItemSettings, - this.menuItemExit}); - resources.ApplyResources(this.menuItemFile, "menuItemFile"); - // - // menuItemSettings - // - this.menuItemSettings.Index = 0; - resources.ApplyResources(this.menuItemSettings, "menuItemSettings"); - this.menuItemSettings.Click += new System.EventHandler(this.menuItemSettings_Click); - // - // menuItemExit - // - this.menuItemExit.Index = 1; - resources.ApplyResources(this.menuItemExit, "menuItemExit"); - this.menuItemExit.Click += new System.EventHandler(this.menuItemExit_Click); - // - // menuItemHelp - // - this.menuItemHelp.Index = 1; - this.menuItemHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItemCheckUpdate, - this.menuItemAbout}); - resources.ApplyResources(this.menuItemHelp, "menuItemHelp"); - // - // menuItemCheckUpdate - // - this.menuItemCheckUpdate.Index = 0; - resources.ApplyResources(this.menuItemCheckUpdate, "menuItemCheckUpdate"); - this.menuItemCheckUpdate.Click += new System.EventHandler(this.menuItemCheckUpdate_Click); - // - // menuItemAbout - // - this.menuItemAbout.Index = 1; - resources.ApplyResources(this.menuItemAbout, "menuItemAbout"); - this.menuItemAbout.Click += new System.EventHandler(this.menuItemAbout_Click); - // - // openFileDialogApk - // - resources.ApplyResources(this.openFileDialogApk, "openFileDialogApk"); - // - // folderBrowserDialogBuild - // - this.folderBrowserDialogBuild.ShowNewFolderButton = false; - // - // FormMain - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.dataGridView1); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.tabControlMain); - this.DoubleBuffered = true; - this.Menu = this.mainMenu1; - this.Name = "FormMain"; - this.Shown += new System.EventHandler(this.FormMain_Shown); - this.tabControlMain.ResumeLayout(false); - this.tabPageDecode.ResumeLayout(false); - this.tabPageDecode.PerformLayout(); - this.groupBox_DECODE_Options.ResumeLayout(false); - this.tableLayoutPanel_DECODE_Options.ResumeLayout(false); - this.tableLayoutPanelDecodeOutputDir.ResumeLayout(false); - this.tableLayoutPanelDecodeOutputDir.PerformLayout(); - this.tableLayoutPanelDecodeUseFramework.ResumeLayout(false); - this.tableLayoutPanelDecodeUseFramework.PerformLayout(); - this.tabPageBuild.ResumeLayout(false); - this.tabPageBuild.PerformLayout(); - this.groupBox_BUILD_Options.ResumeLayout(false); - this.tableLayoutPanel_BUILD_Options.ResumeLayout(false); - this.tableLayoutPanelBuildOutputApk.ResumeLayout(false); - this.tableLayoutPanelBuildOutputApk.PerformLayout(); - this.tableLayoutPanelBuildUseFramework.ResumeLayout(false); - this.tableLayoutPanelBuildUseFramework.PerformLayout(); - this.tableLayoutPanelBuildUseAapt.ResumeLayout(false); - this.tableLayoutPanelBuildUseAapt.PerformLayout(); - this.tabPageInstallFramework.ResumeLayout(false); - this.tabPageInstallFramework.PerformLayout(); - this.groupBox_IF_Options.ResumeLayout(false); - this.tableLayoutPanel_IF_Options.ResumeLayout(false); - this.tableLayoutPanel_IF_Tag.ResumeLayout(false); - this.tableLayoutPanel_IF_Tag.PerformLayout(); - this.tableLayoutPanel_IF_FramePath.ResumeLayout(false); - this.tableLayoutPanel_IF_FramePath.PerformLayout(); - this.tabPageSign.ResumeLayout(false); - this.tabPageSign.PerformLayout(); - this.groupBox_SIGN_Options.ResumeLayout(false); - this.tableLayoutPanel_SIGN_Options.ResumeLayout(false); - this.tableLayoutPanel_SIGN_PrivateKey.ResumeLayout(false); - this.tableLayoutPanel_SIGN_PrivateKey.PerformLayout(); - this.tableLayoutPanel_SIGN_PublicKey.ResumeLayout(false); - this.tableLayoutPanel_SIGN_PublicKey.PerformLayout(); - this.tableLayoutPanel_SIGN_OutputFile.ResumeLayout(false); - this.tableLayoutPanel_SIGN_OutputFile.PerformLayout(); - this.tabPageZipAlign.ResumeLayout(false); - this.tabPageZipAlign.PerformLayout(); - this.groupBox_ZIPALIGN_Options.ResumeLayout(false); - this.tableLayoutPanel_ZIPALIGN_Options.ResumeLayout(false); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes.ResumeLayout(false); - this.tableLayoutPanel_ZIPALIGN_AlignmentBytes.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown_ZIPALIGN_AlignmentBytes)).EndInit(); - this.tableLayoutPanel_ZIPALIGN_OutputFile.ResumeLayout(false); - this.tableLayoutPanel_ZIPALIGN_OutputFile.PerformLayout(); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.contextMenuStripLog.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button button_DECODE_Decode; - private System.Windows.Forms.TextBox textBox_DECODE_InputAppPath; - private System.Windows.Forms.Button button_DECODE_BrowseInputAppPath; - private System.Windows.Forms.TabControl tabControlMain; - private System.Windows.Forms.TabPage tabPageDecode; - private System.Windows.Forms.TabPage tabPageSign; - private System.Windows.Forms.TextBox textBox_SIGN_InputFile; - private System.Windows.Forms.Button button_SIGN_BrowseInputFile; - private System.Windows.Forms.Button button_SIGN_Sign; - private System.Windows.Forms.TabPage tabPageZipAlign; - private System.Windows.Forms.TextBox textBox_ZIPALIGN_InputFile; - private System.Windows.Forms.Button button_ZIPALIGN_BrowseInputFile; - private System.Windows.Forms.Button button_ZIPALIGN_Align; - private System.Windows.Forms.StatusStrip statusStrip1; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText; - private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage; - private System.Windows.Forms.ContextMenuStrip contextMenuStripLog; - private System.Windows.Forms.ToolStripMenuItem clearLogToolStripMenuItem; - private System.Windows.Forms.TabPage tabPageBuild; - private System.Windows.Forms.TextBox textBox_BUILD_InputProjectDir; - private System.Windows.Forms.Button button_BUILD_Build; - private System.Windows.Forms.Button button_BUILD_BrowseInputProjectDir; - private System.Windows.Forms.TabPage tabPageInstallFramework; - private System.Windows.Forms.TextBox textBox_IF_InputFramePath; - private System.Windows.Forms.Button button_IF_BrowseInputFramePath; - private System.Windows.Forms.Button button_IF_InstallFramework; - private System.Windows.Forms.MainMenu mainMenu1; - private System.Windows.Forms.MenuItem menuItemFile; - private System.Windows.Forms.MenuItem menuItemHelp; - private System.Windows.Forms.MenuItem menuItemSettings; - private System.Windows.Forms.MenuItem menuItemExit; - private System.Windows.Forms.MenuItem menuItemCheckUpdate; - private System.Windows.Forms.MenuItem menuItemAbout; - private System.Windows.Forms.GroupBox groupBox_DECODE_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_DECODE_Options; - private System.Windows.Forms.CheckBox checkBox_DECODE_MatchOriginal; - private System.Windows.Forms.CheckBox checkBox_DECODE_KeepBrokenRes; - private System.Windows.Forms.CheckBox checkBox_DECODE_Force; - private System.Windows.Forms.CheckBox checkBox_DECODE_NoRes; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelDecodeOutputDir; - private System.Windows.Forms.Button button_DECODE_BrowseOutputDirectory; - private System.Windows.Forms.CheckBox checkBox_DECODE_OutputDirectory; - private System.Windows.Forms.TextBox textBox_DECODE_OutputDirectory; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelDecodeUseFramework; - private System.Windows.Forms.TextBox textBox_DECODE_FrameDir; - private System.Windows.Forms.CheckBox checkBox_DECODE_UseFramework; - private System.Windows.Forms.Button button_DECODE_BrowseFrameDir; - private System.Windows.Forms.CheckBox checkBox_DECODE_NoSrc; - private System.Windows.Forms.GroupBox groupBox_BUILD_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_BUILD_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBuildOutputApk; - private System.Windows.Forms.Button button_BUILD_BrowseOutputAppPath; - private System.Windows.Forms.CheckBox checkBox_BUILD_OutputAppPath; - private System.Windows.Forms.TextBox textBox_BUILD_OutputAppPath; - private System.Windows.Forms.CheckBox checkBox_BUILD_CopyOriginal; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBuildUseFramework; - private System.Windows.Forms.Button button_BUILD_BrowseFrameDir; - private System.Windows.Forms.CheckBox checkBox_BUILD_UseFramework; - private System.Windows.Forms.TextBox textBox_BUILD_FrameDir; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBuildUseAapt; - private System.Windows.Forms.TextBox textBox_BUILD_AaptPath; - private System.Windows.Forms.CheckBox checkBox_BUILD_UseAapt; - private System.Windows.Forms.Button button_BUILD_BrowseAaptPath; - private System.Windows.Forms.CheckBox checkBox_BUILD_ForceAll; - private System.Windows.Forms.GroupBox groupBox_IF_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_IF_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_IF_Tag; - private System.Windows.Forms.CheckBox checkBox_IF_Tag; - private System.Windows.Forms.TextBox textBox_IF_Tag; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_IF_FramePath; - private System.Windows.Forms.TextBox textBox_IF_FrameDir; - private System.Windows.Forms.CheckBox checkBox_IF_FramePath; - private System.Windows.Forms.Button button_IF_BrowseFrameDir; - private System.Windows.Forms.GroupBox groupBox_ZIPALIGN_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_ZIPALIGN_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_ZIPALIGN_AlignmentBytes; - private System.Windows.Forms.Label label_ZIPALIGN_AlignmentBytes; - private System.Windows.Forms.NumericUpDown numericUpDown_ZIPALIGN_AlignmentBytes; - private System.Windows.Forms.CheckBox checkBox_ZIPALIGN_VerboseOutput; - private System.Windows.Forms.CheckBox checkBox_ZIPALIGN_CheckAlignment; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_ZIPALIGN_OutputFile; - private System.Windows.Forms.Label label_ZIPALIGN_OutputFile; - private System.Windows.Forms.Button button_ZIPALIGN_BrowseOutputFile; - private System.Windows.Forms.TextBox textBox_ZIPALIGN_OutputFile; - private System.Windows.Forms.CheckBox checkBox_ZIPALIGN_OverwriteOutputFile; - private System.Windows.Forms.CheckBox checkBox_ZIPALIGN_Recompress; - private System.Windows.Forms.DataGridViewImageColumn ColumnImage; - private System.Windows.Forms.DataGridViewTextBoxColumn ColumnTime; - private System.Windows.Forms.DataGridViewTextBoxColumn ColumnMessage; - private System.Windows.Forms.GroupBox groupBox_SIGN_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_SIGN_Options; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_SIGN_PrivateKey; - private System.Windows.Forms.Label label_SIGN_PrivateKey; - private System.Windows.Forms.Button button_SIGN_BrowsePrivateKey; - private System.Windows.Forms.TextBox textBox_SIGN_PrivateKey; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_SIGN_PublicKey; - private System.Windows.Forms.Label label_SIGN_PublicKey; - private System.Windows.Forms.Button button_SIGN_BrowsePublicKey; - private System.Windows.Forms.TextBox textBox_SIGN_PublicKey; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel_SIGN_OutputFile; - private System.Windows.Forms.Label label_SIGN_OutputFile; - private System.Windows.Forms.Button button_SIGN_BrowseOutputFile; - private System.Windows.Forms.TextBox textBox_SIGN_OutputFile; - private System.Windows.Forms.OpenFileDialog openFileDialogApk; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogBuild; - } -} - diff --git a/APKToolGUI/FormMain.cs b/APKToolGUI/FormMain.cs deleted file mode 100644 index 6585f5e..0000000 --- a/APKToolGUI/FormMain.cs +++ /dev/null @@ -1,936 +0,0 @@ -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Windows.Forms; -using Java; - -namespace APKToolGUI -{ - public partial class FormMain : Form - { - public FormMain() - { - Program.SetLanguage(); - InitializeComponent(); - this.Icon = Properties.Resources.android_thin; - this.Text += " - v" + ProductVersion; - Application.ApplicationExit += new EventHandler(Application_ApplicationExit); - - CheckAlignSwitch = !Properties.Settings.Default.MAIN_Zipalign_CheckOnly; - } - - //private void FormMain_Shown(object sender, EventArgs e) - //{ - // this.Update(); - // if (!JavaSearch.TrySearchJava(ref javaExe)) - // { - // if (MessageBox.Show(Language.DoYouWantToSelectJavaLocation, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) - // { - // OpenFileDialog openJavaExe = new OpenFileDialog() - // { - // Multiselect = false, - // Filter = "java.exe|java.exe" - // }; - // if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK) - // { - // Properties.Settings.Default.JavaExe = openJavaExe.FileName; - // Properties.Settings.Default.Save(); - // Application.Restart(); - // } - // else - // Application.Exit(); - // } - // else - // Application.Exit(); - // } - // ToLog(ApktoolEventType.Information, "Java location: " + javaExe); - - // InitializeUpdateChecker(); - // InitializeAPKTool(); - // InitializeSignApk(); - // InitializeZipalign(); - - // String javaVersion = apktoolSync.GetJavaVersionSync(); - // if (javaVersion != null) - // { - // ToLog(ApktoolEventType.Information, "Java version: " + javaVersion); - - // string apktoolVersion = apktoolSync.GetVersionSync(); - - // if (apktoolVersion != null) - // ToLog(ApktoolEventType.Information, "APKTool version: " + apktoolVersion); - // } - // else - // { - // MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - // } - - // TimeSpan updateInterval = DateTime.Now - Properties.Settings.Default.LastUpdateCheck; - // if (updateInterval.Days > 0 && Properties.Settings.Default.CheckForUpdateAtStartup) - // updateCheker.CheckAsync(true); - // ToStatus(Language.Done, Properties.Resources.done); - //} - - private void GetJavaPath() - { - if (!File.Exists(Properties.Settings.Default.JavaExe)) - { - javaExe = JavaUtils.SearchPath(); - if (!File.Exists(javaExe)) - { - if (MessageBox.Show(Language.DoYouWantToSelectJavaLocation, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) - { - using (OpenFileDialog openJavaExe = new OpenFileDialog()) - { - openJavaExe.Filter = "java.exe|java.exe"; - if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK) - { - javaExe = Program.GetPortablePath(openJavaExe.FileName); - Properties.Settings.Default.JavaExe = javaExe; - Properties.Settings.Default.Save(); - } - else - Environment.Exit(0); - } - } - else - Environment.Exit(0); - } - else - { - Properties.Settings.Default.JavaExe = javaExe; - Properties.Settings.Default.Save(); - } - } - - ToLog(ApktoolEventType.Information, String.Format("Java path \"{0}\"", javaExe/*"Java path: " + javaExe*/)); - } - - private void FormMain_Shown(object sender, EventArgs e) - { - this.Update(); - GetJavaPath(); - - InitializeUpdateChecker(); - InitializeAPKTool(); - InitializeSignApk(); - InitializeZipalign(); - - Version javaVer = apktool.GetJavaVersion(); - if (javaVer != null) - { - ToLog(ApktoolEventType.Information, String.Format("Java version \"{0} Update {1}\"", javaVer.Minor, javaVer.Revision)); - string apktoolVersion = apktool.GetVersion(); - if (!String.IsNullOrWhiteSpace(apktoolVersion)) - ToLog(ApktoolEventType.Information, String.Format("Apktool version \"{0}\"", apktoolVersion)); - else - ToLog(ApktoolEventType.Error, "Can't detect apktool version."); - } - else - MessageBox.Show(Language.ErrorJavaDetect, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - - TimeSpan updateInterval = DateTime.Now - Properties.Settings.Default.LastUpdateCheck; - if (updateInterval.Days > 0 && Properties.Settings.Default.CheckForUpdateAtStartup) - updateCheker.CheckAsync(true); - ToStatus(Language.Done, Properties.Resources.done); - } - - private void Application_ApplicationExit(object sender, EventArgs e) - { - Properties.Settings.Default.Save(); - } - - private string javaExe = Properties.Settings.Default.JavaExe; - Apktool apktool; - Signapk signapk; - Zipalign zipalign; - UpdateChecker updateCheker; - - #region UpdateChecker - - private void InitializeUpdateChecker() - { - updateCheker = new UpdateChecker("http://infinum.orgfree.com/_Update/APKToolGUI/version.txt", Version.Parse(Application.ProductVersion)); - updateCheker.Completed += new RunWorkerCompletedEventHandler(updateCheker_Completed); - } - - private void updateCheker_Completed(object sender, RunWorkerCompletedEventArgs e) - { - if (e.Result is UpdateChecker.Result) - { - UpdateChecker.Result result = (UpdateChecker.Result)e.Result; - switch (result.State) - { - case UpdateChecker.State.NeedUpdate: - if (MessageBox.Show(Language.UpdateNewVersion, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) - Process.Start("http://4pda.ru/forum/index.php?showtopic=452034"); - break; - case UpdateChecker.State.NoUpdate: - if (!result.Silently) - MessageBox.Show(Language.UpdateNoUpdates, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); - break; - case UpdateChecker.State.Error: - if (!result.Silently) - MessageBox.Show("Error update checking:" + Environment.NewLine + result.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - break; - } - Properties.Settings.Default.LastUpdateCheck = DateTime.Now; - } - } - - #endregion - - #region Log&Status - - private void ToStatus(string message, Image statusImage) - { - BeginInvoke(new MethodInvoker(delegate - { - toolStripStatusLabelStateText.Text = message; - toolStripStatusLabelStateImage.Image = statusImage; - })); - } - - private void ToLog(string time, string message, Image statusImage, Color backColor) - { - if (dataGridView1.InvokeRequired) - dataGridView1.BeginInvoke(new Action(() => - { - int i = dataGridView1.Rows.Add(statusImage, time, message); - dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor; - dataGridView1.FirstDisplayedScrollingRowIndex = i; - })); - else - { - int i = dataGridView1.Rows.Add(statusImage, time, message); - dataGridView1.Rows[i].DefaultCellStyle.BackColor = backColor; - dataGridView1.FirstDisplayedScrollingRowIndex = i; - } - } - - private void ToLog(ApktoolEventType eventType, String message) - { - switch (eventType) - { - case ApktoolEventType.Information: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.Window)); - //ToStatus(result.Message, Properties.Resources.info); - break; - case ApktoolEventType.Error: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink)); - //ToStatus(result.Message, Properties.Resources.error); - break; - case ApktoolEventType.Warning: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.warning, Color.FromKnownColor(KnownColor.LightYellow)); - //ToStatus(result.Message, Properties.Resources.warning); - break; - case ApktoolEventType.Unknown: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.error, Color.FromKnownColor(KnownColor.LightPink)); - //ToStatus(result.Message, Properties.Resources.warning); - break; - default: - ToLog(DateTime.Now.ToString("[dd.MM.yyyy HH:mm:ss]"), message, Properties.Resources.info, Color.FromKnownColor(KnownColor.LightBlue)); - break; - } - } - - private void Done() - { - if (statusStrip1.InvokeRequired) - statusStrip1.BeginInvoke(new Action(delegate { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; })); - - ActionButtonsEnabled = true; - - ToStatus(Language.Done, Properties.Resources.done); - } - - private void ClearLog() - { - if (Properties.Settings.Default.ClearLogBeforeAction) - dataGridView1.Rows.Clear(); - } - - #endregion - - #region signapk - - private void InitializeSignApk() - { - signapk = new Signapk(javaExe, Program.SIGNAPK_PATH); - signapk.Exited += signapk_SignapkExited; - } - - void signapk_SignapkExited(object sender, SignapkExitedEventArgs e) - { - if (e.ExitCode == 0) - { - ToLog(ApktoolEventType.Information, String.Format("Signing successfully completed. File saved to \"{0}\".", e.OutFilePath)); - } - Done(); - } - - private bool Singning() - { - return signapk.Sign(textBox_SIGN_PublicKey.Text, textBox_SIGN_PrivateKey.Text, textBox_SIGN_InputFile.Text, textBox_SIGN_OutputFile.Text); - } - - #endregion - - #region apktool - - private void InitializeAPKTool() - { - apktool = new Apktool(javaExe, Program.APKTOOL_PATH); - apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved; - apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved; - apktool.DecompilingCompleted += apktool_DecompilingCompleted; - apktool.BuildCompleted += apktool_BuildCompleted; - apktool.InstallFrameworkCompleted += apktool_InstallFrameworkCompleted; - } - - void apktool_InstallFrameworkCompleted(object sender, ApktoolEventCompletedEventArgs e) - { - Done(); - } - - void apktool_BuildCompleted(object sender, ApktoolEventCompletedEventArgs e) - { - Done(); - } - - void apktool_DecompilingCompleted(object sender, ApktoolEventCompletedEventArgs e) - { - if (e.ExitCode == 0) - { - ToLog(ApktoolEventType.Information, String.Format("Decompiling successfully completed. Output directory \"{0}\".", e.ProjectDir)); - } - Done(); - } - - void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e) - { - if (e.EventType == ApktoolEventType.Unknown) - ToLog(ApktoolEventType.Error, e.Message); - else - ToLog(e.EventType, e.Message); - } - - void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e) - { - ToLog(e.EventType, e.Message); - } - - private bool InstallFramework() - { - InstallFrameworkOptions options = new InstallFrameworkOptions(textBox_IF_InputFramePath.Text); - if (checkBox_IF_FramePath.Checked) - options.FrameDir = textBox_IF_FrameDir.Text; - if (checkBox_IF_Tag.Checked) - options.Tag = textBox_IF_Tag.Text; - - return apktool.InstallFramework(options); - } - - private bool Decompiling() - { - //string projectDir = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text) + "\\" + System.IO.Path.GetFileNameWithoutExtension(textBox_DECODE_InputAppPath.Text); - - DecompileOptions options = new DecompileOptions(textBox_DECODE_InputAppPath.Text); - options.NoSource = checkBox_DECODE_NoSrc.Checked; - options.NoResource = checkBox_DECODE_NoRes.Checked; - options.Force = checkBox_DECODE_Force.Checked; - options.KeepBrokenResource = checkBox_DECODE_KeepBrokenRes.Checked; - options.MatchOriginal = checkBox_DECODE_MatchOriginal.Checked; - if (checkBox_DECODE_UseFramework.Checked) - options.FrameworkPath = textBox_DECODE_FrameDir.Text; - if (checkBox_DECODE_OutputDirectory.Checked) - options.OutputDirectory = textBox_DECODE_OutputDirectory.Text; - - return apktool.Decompile(options); - } - - private bool Build() - { - //String outputAPK = textBox_BUILD_InputProjectDir.Text + DateTime.Now.ToString("_yyyyMMdd_HH-mm-ss") + ".apk"; - - BuildOptions options = new BuildOptions(textBox_BUILD_InputProjectDir.Text); - options.ForceAll = checkBox_BUILD_ForceAll.Checked; - options.CopyOriginal = checkBox_BUILD_CopyOriginal.Checked; - if (checkBox_BUILD_UseAapt.Checked) - options.AaptPath = textBox_BUILD_AaptPath.Text; - if (checkBox_BUILD_UseFramework.Checked) - options.FrameworkPath = textBox_BUILD_FrameDir.Text; - if (checkBox_BUILD_OutputAppPath.Checked) - options.AppPath = textBox_BUILD_OutputAppPath.Text; - - return apktool.Build(options); - } - - #endregion - - #region zipalign - - private void InitializeZipalign() - { - zipalign = new Zipalign(Program.ZIPALIGN_PATH); - zipalign.OutputDataReceived += zipalign_OutputDataReceived; - zipalign.ErrorDataReceived += zipalign_ErrorDataReceived; - zipalign.Exited += zipalign_Exited; - } - - void zipalign_OutputDataReceived(object sender, DataReceivedEventArgs e) - { - if (!String.IsNullOrWhiteSpace(e.Data)) - ToLog(ApktoolEventType.Information, e.Data); - } - - void zipalign_ErrorDataReceived(object sender, DataReceivedEventArgs e) - { - if (!String.IsNullOrWhiteSpace(e.Data)) - ToLog(ApktoolEventType.Error, e.Data); - } - - void zipalign_Exited(object sender, EventArgs e) - { - Zipalign za = (Zipalign)sender; - if (za.ExitCode == 0) - ToLog(ApktoolEventType.Information, "File saved to " + za.Options.OutputFile); - else - ToLog(ApktoolEventType.Warning, "Exit code: " + za.ExitCode); - Done(); - //ActionButtonsEnabled = true; - } - - private bool Align() - { - ZipalignOptions options = new ZipalignOptions(textBox_ZIPALIGN_InputFile.Text, Convert.ToInt32(numericUpDown_ZIPALIGN_AlignmentBytes.Value)); - options.CheckOnly = checkBox_ZIPALIGN_CheckAlignment.Checked; - options.OverwriteOutputFile = checkBox_ZIPALIGN_OverwriteOutputFile.Checked; - options.Recompress = checkBox_ZIPALIGN_Recompress.Checked; - options.VerboseOut = checkBox_ZIPALIGN_VerboseOutput.Checked; - options.OutputFile = textBox_ZIPALIGN_OutputFile.Text; - - return zipalign.Align(options); - } - - //void zipalign_ZipalignExited(object sender, ZipalignExitedEventArgs e) - //{ - // ToLog_Done(); - //} - - //private void ZipAlign(string inputFilePath) - //{ - // string outputFile = Path.GetDirectoryName(inputFilePath) + @"\" + Path.GetFileNameWithoutExtension(inputFilePath) + "_zipaligned.apk"; - // zipalign.Align(inputFilePath, outputFile, 4, true, false, false); - //} - - #endregion - - private bool ActionButtonsEnabled - { - set - { - if (button_BUILD_Build.InvokeRequired) - button_BUILD_Build.BeginInvoke(new Action(delegate - { - button_BUILD_Build.Enabled = value; - })); - else - button_BUILD_Build.Enabled = value; - - if (button_DECODE_Decode.InvokeRequired) - button_DECODE_Decode.BeginInvoke(new Action(delegate - { - button_DECODE_Decode.Enabled = value; - })); - else - button_DECODE_Decode.Enabled = value; - - if (button_IF_InstallFramework.InvokeRequired) - button_IF_InstallFramework.BeginInvoke(new Action(delegate - { - button_IF_InstallFramework.Enabled = value; - })); - else - button_IF_InstallFramework.Enabled = value; - if (button_ZIPALIGN_Align.InvokeRequired) - button_ZIPALIGN_Align.BeginInvoke(new Action(delegate - { - button_ZIPALIGN_Align.Enabled = value; - })); - else - button_ZIPALIGN_Align.Enabled = value; - } - } - - private void ShowMessage(string message, MessageBoxIcon status) - { - MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, status); - } - - private bool IsValidPath(string path) - { - try - { - Path.GetFileName(path); - } - catch (ArgumentException) - { - return false; - } - return true; - - //if (path.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) - // return false; - //else - // return true; - } - - - - #region Main menu event handlers - - private void menuItemSettings_Click(object sender, EventArgs e) - { - FormSettings frm = new FormSettings(); - frm.ShowDialog(); - } - - private void menuItemExit_Click(object sender, EventArgs e) - { - Application.Exit(); - } - - private void menuItemCheckUpdate_Click(object sender, EventArgs e) - { - updateCheker.CheckAsync(); - } - - private void menuItemAbout_Click(object sender, EventArgs e) - { - FormAboutBox frm = new FormAboutBox(); - frm.ShowDialog(); - } - - #endregion - - #region Control event handlers - - private void clearLogToolStripMenuItem_Click(object sender, EventArgs e) - { - dataGridView1.Rows.Clear(); - } - - #region DECODE - - private void button_DECODE_BrowseFrameDir_Click(object sender, EventArgs e) - { - using (FolderBrowserDialog fbd = new FolderBrowserDialog()) - { - if (!String.IsNullOrWhiteSpace(textBox_DECODE_FrameDir.Text)) - fbd.SelectedPath = textBox_DECODE_FrameDir.Text; - if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_DECODE_FrameDir.Text = fbd.SelectedPath; - } - } - - private void button_DECODE_BrowseOutputDirectory_Click(object sender, EventArgs e) - { - using (FolderBrowserDialog fbd = new FolderBrowserDialog()) - { - - if (!String.IsNullOrWhiteSpace(textBox_DECODE_OutputDirectory.Text)) - fbd.SelectedPath = textBox_DECODE_OutputDirectory.Text; - else - if (!String.IsNullOrWhiteSpace(textBox_DECODE_InputAppPath.Text)) - fbd.SelectedPath = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text); - if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_DECODE_OutputDirectory.Text = fbd.SelectedPath; - } - } - - private void button_DECODE_BrowseInputAppPath_Click(object sender, EventArgs e) - { - if (openFileDialogApk.ShowDialog() == DialogResult.OK) - { - textBox_DECODE_InputAppPath.Text = openFileDialogApk.FileName; - //textBox_BUILD_InputProjectDir.Text = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text) + @"\" + Path.GetFileNameWithoutExtension(textBox_DECODE_InputAppPath.Text); - if (checkBox_DECODE_OutputDirectory.Checked) - textBox_DECODE_OutputDirectory.Text = Path.GetDirectoryName(textBox_DECODE_InputAppPath.Text) + "\\" + System.IO.Path.GetFileNameWithoutExtension(textBox_DECODE_InputAppPath.Text); - } - else - return; - } - - private void button_DECODE_Decode_Click(object sender, EventArgs e) - { - if (File.Exists(textBox_DECODE_InputAppPath.Text)) - { - if (checkBox_DECODE_UseFramework.Checked && !Directory.Exists(textBox_DECODE_FrameDir.Text)) - { - ShowMessage("Выбранный каталог фреймворков не существует.", MessageBoxIcon.Warning); - return; - } - if (checkBox_DECODE_OutputDirectory.Checked) - { - if (String.IsNullOrWhiteSpace(textBox_DECODE_OutputDirectory.Text)) - { - ShowMessage("Не выбран каталог декомпиляции.", MessageBoxIcon.Warning); - return; - } - else - if (!IsValidPath(textBox_DECODE_OutputDirectory.Text)) - { - ShowMessage("Выбранный каталог декомпиляции не может быть создан, т.к. содержит недопустимые символы.", MessageBoxIcon.Warning); - return; - } - } - bool started = Decompiling(); - if (started) - { - toolStripProgressBar1.Style = ProgressBarStyle.Marquee; - ClearLog(); - ToLog(ApktoolEventType.Information, "Decoding " + Path.GetFileName(textBox_DECODE_InputAppPath.Text)); - ToStatus(String.Format("Decoding \"{0}\"...", Path.GetFileName(textBox_DECODE_InputAppPath.Text)), Properties.Resources.waiting); - ActionButtonsEnabled = false; - } - else - ToLog(ApktoolEventType.Error, "Error. Decoding is not started."); - } - else - MessageBox.Show(Language.WarningFileForDecodingNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - #endregion - - #region BUILD - - private void button_BUILD_BrowseAaptPath_Click(object sender, EventArgs e) - { - using (OpenFileDialog ofd = new OpenFileDialog()) - { - ofd.Filter = "Executable file|*.exe"; - if (!String.IsNullOrWhiteSpace(textBox_BUILD_AaptPath.Text)) - { - ofd.InitialDirectory = Path.GetDirectoryName(textBox_BUILD_AaptPath.Text); - ofd.FileName = Path.GetFileName(textBox_BUILD_AaptPath.Text); - } - if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_BUILD_AaptPath.Text = ofd.FileName; - } - } - - private void button_BUILD_BrowseFrameDir_Click(object sender, EventArgs e) - { - using (FolderBrowserDialog fbd = new FolderBrowserDialog()) - { - if (!String.IsNullOrWhiteSpace(textBox_BUILD_FrameDir.Text)) - fbd.SelectedPath = textBox_BUILD_FrameDir.Text; - if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_BUILD_FrameDir.Text = fbd.SelectedPath; - } - } - - private void button_BUILD_BrowseOutputAppPath_Click(object sender, EventArgs e) - { - using (SaveFileDialog sfd = new SaveFileDialog()) - { - if (!String.IsNullOrWhiteSpace(textBox_BUILD_OutputAppPath.Text)) - { - sfd.InitialDirectory = Path.GetDirectoryName(textBox_BUILD_OutputAppPath.Text); - sfd.FileName = Path.GetFileNameWithoutExtension(textBox_BUILD_OutputAppPath.Text); - sfd.DefaultExt = Path.GetExtension(textBox_BUILD_OutputAppPath.Text); - } - - if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_BUILD_OutputAppPath.Text = sfd.FileName; - } - } - - private void button_BUILD_BrowseInputProjectDir_Click(object sender, EventArgs e) - { - if (Directory.Exists(textBox_BUILD_InputProjectDir.Text)) - folderBrowserDialogBuild.SelectedPath = textBox_BUILD_InputProjectDir.Text; - if (folderBrowserDialogBuild.ShowDialog() == DialogResult.OK) - { - textBox_BUILD_InputProjectDir.Text = folderBrowserDialogBuild.SelectedPath; - if (checkBox_BUILD_OutputAppPath.Checked) - textBox_BUILD_OutputAppPath.Text = textBox_BUILD_InputProjectDir.Text + DateTime.Now.ToString("_yyyyMMdd_HH-mm-ss") + ".apk"; - //String outputAPK = textBox_BUILD_InputProjectDir.Text + DateTime.Now.ToString("_yyyyMMdd_HH-mm-ss") + ".apk"; - } - } - - private void button_BUILD_Build_Click(object sender, EventArgs e) - { - if (Directory.Exists(textBox_BUILD_InputProjectDir.Text)) - { - bool started = Build(); - if (started) - { - toolStripProgressBar1.Style = ProgressBarStyle.Marquee; - ActionButtonsEnabled = false; - ClearLog(); - ToLog(ApktoolEventType.Information, "Build " + Path.GetFileName(textBox_BUILD_InputProjectDir.Text)); - ToStatus(String.Format("Build \"{0}\"...", textBox_BUILD_InputProjectDir.Text.Replace(Path.GetDirectoryName(textBox_BUILD_InputProjectDir.Text) + @"\", String.Empty)), Properties.Resources.waiting); - } - else - ToLog(ApktoolEventType.Error, "Error. Build is not started."); - } - else - MessageBox.Show(Language.WarningDecodingFolderNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - #endregion - - #region INSTALL FRAMEWORK - - private void button_IF_BrowseFrameDir_Click(object sender, EventArgs e) - { - using (FolderBrowserDialog fbd = new FolderBrowserDialog()) - { - if (Directory.Exists(textBox_IF_FrameDir.Text)) - fbd.SelectedPath = textBox_IF_FrameDir.Text; - if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_IF_FrameDir.Text = fbd.SelectedPath; - } - } - - private void button_IF_BrowseInputFramePath_Click(object sender, EventArgs e) - { - using (OpenFileDialog ofd = new OpenFileDialog()) - { - if (File.Exists(textBox_IF_InputFramePath.Text)) - { - ofd.InitialDirectory = Path.GetDirectoryName(textBox_IF_InputFramePath.Text); - ofd.FileName = Path.GetFileNameWithoutExtension(textBox_IF_InputFramePath.Text); - } - ofd.Filter = "apk|*.apk|jar|*.jar"; - - if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_IF_InputFramePath.Text = ofd.FileName; - } - } - - private void button_IF_InstallFramework_Click(object sender, EventArgs e) - { - if (checkBox_IF_FramePath.Checked) - { - if (String.IsNullOrWhiteSpace(textBox_IF_FrameDir.Text) || !Directory.Exists(textBox_IF_FrameDir.Text)) - { - ShowMessage("Ошибка выбора директории фреймворка.", MessageBoxIcon.Warning); - return; - } - } - if (checkBox_IF_Tag.Checked && String.IsNullOrWhiteSpace(textBox_IF_Tag.Text)) - { - ShowMessage("Ошибка ввода тега фреймворка.", MessageBoxIcon.Warning); - return; - } - if (!File.Exists(textBox_IF_InputFramePath.Text)) - { - ShowMessage("Ошибка выбора файла фреймворка. Файл не существует.", MessageBoxIcon.Warning); - return; - } - - bool started = InstallFramework(); - if (started) - { - toolStripProgressBar1.Style = ProgressBarStyle.Marquee; - ActionButtonsEnabled = false; - ClearLog(); - ToLog(ApktoolEventType.Information, "Installing framework " + Path.GetFileName(textBox_IF_InputFramePath.Text)); - ToStatus(String.Format("Installing framework \"{0}\"...", Path.GetFileName(textBox_IF_InputFramePath.Text)), Properties.Resources.waiting); - } - else - ToLog(ApktoolEventType.Error, "Error. Framework installation is not started."); - - } - - #endregion - - #region SIGN - - private void button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e) - { - using (OpenFileDialog ofd = new OpenFileDialog()) - { - ofd.Filter = "*.pem|*.pem"; - if (File.Exists(textBox_SIGN_PublicKey.Text)) - { - ofd.InitialDirectory = Path.GetDirectoryName(textBox_SIGN_PublicKey.Text); - ofd.FileName = Path.GetFileNameWithoutExtension(textBox_SIGN_PublicKey.Text); - } - if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_SIGN_PublicKey.Text = Program.GetPortablePath(ofd.FileName); - } - } - - private void button_SIGN_BrowsePrivateKey_Click(object sender, EventArgs e) - { - using (OpenFileDialog ofd = new OpenFileDialog()) - { - ofd.Filter = "*.pk8|*.pk8"; - if (File.Exists(textBox_SIGN_PrivateKey.Text)) - { - ofd.InitialDirectory = Path.GetDirectoryName(textBox_SIGN_PrivateKey.Text); - ofd.FileName = Path.GetFileNameWithoutExtension(textBox_SIGN_PrivateKey.Text); - } - if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_SIGN_PrivateKey.Text = Program.GetPortablePath(ofd.FileName); - } - } - - private void button_SIGN_BrowseOutputFile_Click(object sender, EventArgs e) - { - using (SaveFileDialog sfd = new SaveFileDialog()) - { - sfd.Filter = "(*.apk)|*.apk|(*.jar)|*.jar|(*.zip)|*.zip"; - - if (File.Exists(textBox_SIGN_InputFile.Text)) - { - sfd.Filter = String.Format("(*{0})|*{0}", Path.GetExtension(textBox_SIGN_InputFile.Text)); - sfd.InitialDirectory = Path.GetDirectoryName(textBox_SIGN_InputFile.Text); - sfd.FileName = String.Format("{0}_signed{1}", Path.GetFileNameWithoutExtension(textBox_SIGN_InputFile.Text), Path.GetExtension(textBox_SIGN_InputFile.Text)); - } - - if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - { - textBox_SIGN_OutputFile.Text = sfd.FileName; - } - } - } - - private void button_SIGN_BrowseInputFile_Click(object sender, EventArgs e) - { - using (OpenFileDialog ofd = new OpenFileDialog()) - { - ofd.Filter = "(*.apk;*.jar;*.zip)|*.apk;*.jar;*.zip"; - - if (ofd.ShowDialog() == DialogResult.OK) - { - textBox_SIGN_InputFile.Text = ofd.FileName; - textBox_SIGN_OutputFile.Text = - String.Format("{0}{1}{2}_signed{3}", - Path.GetDirectoryName(textBox_SIGN_InputFile.Text), - Path.DirectorySeparatorChar, - Path.GetFileNameWithoutExtension(textBox_SIGN_InputFile.Text), - Path.GetExtension(textBox_SIGN_InputFile.Text)); - } - } - } - - private void button_SIGN_Sign_Click(object sender, EventArgs e) - { - if (!File.Exists(textBox_SIGN_PublicKey.Text)) - { - ShowMessage("Public key not found.", MessageBoxIcon.Warning); - return; - } - if (!File.Exists(textBox_SIGN_PrivateKey.Text)) - { - ShowMessage("Private key not found.", MessageBoxIcon.Warning); - return; - } - if (!File.Exists(textBox_SIGN_InputFile.Text)) - { - ShowMessage("Input file not found.", MessageBoxIcon.Warning); - return; - } - - bool started = Singning(); - if (started) - { - toolStripProgressBar1.Style = ProgressBarStyle.Marquee; - ActionButtonsEnabled = false; - ClearLog(); - ToLog(ApktoolEventType.Information, "Signing " + Path.GetFileName(textBox_SIGN_InputFile.Text)); - ToStatus(String.Format("Signing \"{0}\"...", Path.GetFileName(textBox_SIGN_InputFile.Text)), Properties.Resources.waiting); - } - else - ToLog(ApktoolEventType.Error, "Error. Signing is not started."); - } - - #endregion - - #region ZIPALIGN - - private bool CheckAlignSwitch - { - set - { - checkBox_ZIPALIGN_Recompress.Enabled = value; - checkBox_ZIPALIGN_OverwriteOutputFile.Enabled = value; - tableLayoutPanel_ZIPALIGN_OutputFile.Enabled = value; - } - } - - private void checkBox_ZIPALIGN_CheckAlignment_CheckedChanged(object sender, EventArgs e) - { - CheckAlignSwitch = !checkBox_ZIPALIGN_CheckAlignment.Checked; - } - - private void button_ZIPALIGN_BrowseOutputFile_Click(object sender, EventArgs e) - { - using (SaveFileDialog sfd = new SaveFileDialog()) - { - if (File.Exists(textBox_ZIPALIGN_InputFile.Text)) - { - sfd.InitialDirectory = Path.GetDirectoryName(textBox_ZIPALIGN_InputFile.Text); - sfd.Filter = String.Format("{0}|*.{0}", Path.GetExtension(textBox_ZIPALIGN_InputFile.Text).Replace(".", String.Empty)); - sfd.FileName = String.Format("{0}_zipaligned", Path.GetFileNameWithoutExtension(textBox_ZIPALIGN_InputFile.Text)); - } - if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBox_ZIPALIGN_OutputFile.Text = sfd.FileName; - } - } - - private void button_ZIPALIGN_BrowseInputFile_Click(object sender, EventArgs e) - { - using (OpenFileDialog ofd = new OpenFileDialog()) - { - ofd.Filter = "ZIP archives(*.apk;*.zip;*.jar)|*.apk;*.zip;*.jar"; - if (File.Exists(textBox_ZIPALIGN_InputFile.Text)) - { - ofd.InitialDirectory = Path.GetDirectoryName(textBox_ZIPALIGN_InputFile.Text); - ofd.FileName = Path.GetFileName(textBox_ZIPALIGN_InputFile.Text); - } - if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) - { - textBox_ZIPALIGN_InputFile.Text = ofd.FileName; - if (!checkBox_ZIPALIGN_CheckAlignment.Checked) - textBox_ZIPALIGN_OutputFile.Text = String.Format("{0}\\{1}_zipaligned{2}", - Path.GetDirectoryName(ofd.FileName), - Path.GetFileNameWithoutExtension(ofd.FileName), - Path.GetExtension(ofd.FileName)); - } - } - } - - private void button_ZIPALIGN_Align_Click(object sender, EventArgs e) - { - if (!File.Exists(textBox_ZIPALIGN_InputFile.Text)) - { - ShowMessage("Ошибка. Выбранный файл не существует.", MessageBoxIcon.Warning); - return; - } - - bool started = Align(); - if (started) - { - toolStripProgressBar1.Style = ProgressBarStyle.Marquee; - ActionButtonsEnabled = false; - ClearLog(); - ToLog(ApktoolEventType.Information, "Aligning " + Path.GetFileName(textBox_ZIPALIGN_InputFile.Text)); - ToStatus(String.Format("Aligning \"{0}\"...", Path.GetFileName(textBox_ZIPALIGN_InputFile.Text)), Properties.Resources.waiting); - } - else - ToLog(ApktoolEventType.Error, "Error. Aligning is not started."); - } - - #endregion - - #endregion - } -} \ No newline at end of file diff --git a/APKToolGUI/FormMain.resx b/APKToolGUI/FormMain.resx deleted file mode 100644 index 74ea77c..0000000 --- a/APKToolGUI/FormMain.resx +++ /dev/null @@ -1,3276 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Right - - - System - - - NoControl - - - - 569, 304 - - - 4, 4, 4, 4 - - - 37, 35 - - - - 5 - - - ... - - - button_DECODE_BrowseInputAppPath - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDecode - - - 3 - - - Top, Right - - - System - - - NoControl - - - 613, 304 - - - 4, 4, 4, 4 - - - 140, 35 - - - 3 - - - Decompile - - - button_DECODE_Decode - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDecode - - - 2 - - - Top, Left, Right - - - Top, Left, Right - - - 1 - - - Fill - - - NoControl - - - 4, 152 - - - 4, 4, 4, 4 - - - 729, 29 - - - 6 - - - Keeps files to closest to original as possible. Prevents rebuild. - - - checkBox_DECODE_MatchOriginal - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 0 - - - Fill - - - NoControl - - - 4, 115 - - - 4, 4, 4, 4 - - - 729, 29 - - - 5 - - - Keep broken resource. - - - checkBox_DECODE_KeepBrokenRes - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 1 - - - Fill - - - NoControl - - - 4, 78 - - - 4, 4, 4, 4 - - - 729, 29 - - - 4 - - - Force delete destination directory. - - - checkBox_DECODE_Force - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 2 - - - Fill - - - NoControl - - - 4, 41 - - - 4, 4, 4, 4 - - - 729, 29 - - - 3 - - - Do not decode resources. - - - checkBox_DECODE_NoRes - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 3 - - - 3 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_DECODE_BrowseOutputDirectory - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelDecodeOutputDir - - - 0 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 341, 29 - - - 3 - - - Output directory: - - - checkBox_DECODE_OutputDirectory - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelDecodeOutputDir - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_DECODE_OutputDirectory - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelDecodeOutputDir - - - 2 - - - Fill - - - 0, 222 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 0 - - - tableLayoutPanelDecodeOutputDir - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 4 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="button_DECODE_BrowseOutputDirectory" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBox_DECODE_OutputDirectory" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBox_DECODE_OutputDirectory" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - 3 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 5 - - - textBox_DECODE_FrameDir - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelDecodeUseFramework - - - 0 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 341, 29 - - - 3 - - - Uses framework files located in: - - - checkBox_DECODE_UseFramework - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelDecodeUseFramework - - - 1 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 6 - - - ... - - - button_DECODE_BrowseFrameDir - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelDecodeUseFramework - - - 2 - - - Fill - - - 0, 185 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 1 - - - tableLayoutPanelDecodeUseFramework - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 5 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBox_DECODE_FrameDir" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_DECODE_UseFramework" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_DECODE_BrowseFrameDir" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 729, 29 - - - 2 - - - Do not decode sources. - - - checkBox_DECODE_NoSrc - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_DECODE_Options - - - 6 - - - Fill - - - 4, 23 - - - 4, 4, 4, 4 - - - 8 - - - 737, 259 - - - 0 - - - tableLayoutPanel_DECODE_Options - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox_DECODE_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBox_DECODE_MatchOriginal" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_DECODE_KeepBrokenRes" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_DECODE_Force" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_DECODE_NoRes" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanelDecodeOutputDir" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanelDecodeUseFramework" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_DECODE_NoSrc" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,37,Absolute,37,Absolute,37,Absolute,37,Absolute,37,Absolute,37,Absolute,37,AutoSize,0" /></TableLayoutSettings> - - - 8, 9 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 745, 286 - - - 6 - - - Options - - - groupBox_DECODE_Options - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDecode - - - 0 - - - Top, Left, Right - - - 8, 305 - - - 4, 4, 4, 4 - - - 557, 26 - - - 4 - - - textBox_DECODE_InputAppPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDecode - - - 1 - - - 4, 28 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 764, 354 - - - 0 - - - Decode - - - tabPageDecode - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControlMain - - - 0 - - - Top, Left, Right - - - 1 - - - 3 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_BUILD_BrowseOutputAppPath - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildOutputApk - - - 0 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 341, 29 - - - 3 - - - Output app: - - - checkBox_BUILD_OutputAppPath - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildOutputApk - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_BUILD_OutputAppPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildOutputApk - - - 2 - - - Fill - - - 0, 148 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 4 - - - tableLayoutPanelBuildOutputApk - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_BUILD_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="button_BUILD_BrowseOutputAppPath" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBox_BUILD_OutputAppPath" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBox_BUILD_OutputAppPath" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - NoControl - - - 4, 41 - - - 4, 4, 4, 4 - - - 729, 29 - - - 3 - - - Copies original AndroidManifest.xml and META-INF folder into built apk - - - checkBox_BUILD_CopyOriginal - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_BUILD_Options - - - 1 - - - 3 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_BUILD_BrowseFrameDir - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildUseFramework - - - 0 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 341, 29 - - - 3 - - - Uses framework files located in: - - - checkBox_BUILD_UseFramework - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildUseFramework - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_BUILD_FrameDir - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildUseFramework - - - 2 - - - Fill - - - 0, 111 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 0 - - - tableLayoutPanelBuildUseFramework - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_BUILD_Options - - - 2 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="button_BUILD_BrowseFrameDir" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBox_BUILD_UseFramework" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBox_BUILD_FrameDir" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - 3 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 5 - - - textBox_BUILD_AaptPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildUseAapt - - - 0 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 341, 29 - - - 3 - - - Uses aapt.exe located in: - - - checkBox_BUILD_UseAapt - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildUseAapt - - - 1 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 6 - - - ... - - - button_BUILD_BrowseAaptPath - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBuildUseAapt - - - 2 - - - Fill - - - 0, 74 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 1 - - - tableLayoutPanelBuildUseAapt - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_BUILD_Options - - - 3 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBox_BUILD_AaptPath" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_BUILD_UseAapt" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_BUILD_BrowseAaptPath" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 729, 29 - - - 2 - - - Skip changes detection and build all files. - - - checkBox_BUILD_ForceAll - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_BUILD_Options - - - 4 - - - Fill - - - 4, 23 - - - 4, 4, 4, 4 - - - 6 - - - 737, 186 - - - 0 - - - tableLayoutPanel_BUILD_Options - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox_BUILD_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanelBuildOutputApk" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_BUILD_CopyOriginal" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanelBuildUseFramework" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanelBuildUseAapt" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_BUILD_ForceAll" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,37,Absolute,37,Absolute,37,Absolute,37,Absolute,37,AutoSize,0,Absolute,29,Absolute,29" /></TableLayoutSettings> - - - 8, 9 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 745, 213 - - - 9 - - - Options - - - groupBox_BUILD_Options - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageBuild - - - 0 - - - Top, Right - - - System - - - NoControl - - - 569, 304 - - - 4, 4, 4, 4 - - - 37, 35 - - - 8 - - - ... - - - button_BUILD_BrowseInputProjectDir - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageBuild - - - 1 - - - Top, Right - - - System - - - NoControl - - - 613, 304 - - - 4, 4, 4, 4 - - - 140, 35 - - - 6 - - - Build - - - button_BUILD_Build - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageBuild - - - 2 - - - Top, Left, Right - - - 8, 305 - - - 4, 4, 4, 4 - - - 557, 26 - - - 7 - - - textBox_BUILD_InputProjectDir - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageBuild - - - 3 - - - 4, 28 - - - 4, 4, 4, 4 - - - 764, 354 - - - 3 - - - Build - - - tabPageBuild - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControlMain - - - 1 - - - Top, Left, Right - - - 1 - - - 2 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 342, 29 - - - 3 - - - Tag frameworks using: - - - checkBox_IF_Tag - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_Tag - - - 0 - - - Fill - - - 351, 1 - - - 1, 1, 4, 1 - - - 382, 26 - - - 4 - - - textBox_IF_Tag - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_Tag - - - 1 - - - Fill - - - 0, 37 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 0 - - - tableLayoutPanel_IF_Tag - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBox_IF_Tag" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBox_IF_Tag" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,47,55877,Percent,52,44123" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - 3 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 5 - - - textBox_IF_FrameDir - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_FramePath - - - 0 - - - Fill - - - NoControl - - - 4, 4 - - - 4, 4, 4, 4 - - - 341, 29 - - - 3 - - - Stores framework files into: - - - checkBox_IF_FramePath - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_FramePath - - - 1 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 6 - - - ... - - - button_IF_BrowseFrameDir - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_FramePath - - - 2 - - - Fill - - - 0, 0 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 1 - - - tableLayoutPanel_IF_FramePath - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_IF_Options - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBox_IF_FrameDir" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_IF_FramePath" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_IF_BrowseFrameDir" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - 4, 23 - - - 4, 4, 4, 4 - - - 3 - - - 737, 77 - - - 0 - - - tableLayoutPanel_IF_Options - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox_IF_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel_IF_Tag" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel_IF_FramePath" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,37,Absolute,37,AutoSize,0,Absolute,29" /></TableLayoutSettings> - - - 8, 9 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 745, 104 - - - 10 - - - Options - - - groupBox_IF_Options - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageInstallFramework - - - 0 - - - Top, Right - - - System - - - NoControl - - - 613, 304 - - - 4, 4, 4, 4 - - - 140, 35 - - - 1 - - - Install - - - button_IF_InstallFramework - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageInstallFramework - - - 1 - - - Top, Right - - - System - - - NoControl - - - 569, 304 - - - 4, 4, 4, 4 - - - 37, 35 - - - 0 - - - ... - - - button_IF_BrowseInputFramePath - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageInstallFramework - - - 2 - - - Top, Left, Right - - - 8, 305 - - - 4, 4, 4, 4 - - - 557, 26 - - - 9 - - - textBox_IF_InputFramePath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageInstallFramework - - - 3 - - - 4, 28 - - - 4, 4, 4, 4 - - - 764, 354 - - - 4 - - - Install Framework - - - tabPageInstallFramework - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControlMain - - - 2 - - - Top, Left, Right - - - 1 - - - 3 - - - True - - - Fill - - - NoControl - - - 3, 3 - - - 3, 3, 3, 3 - - - 343, 31 - - - 8 - - - Private key - - - MiddleLeft - - - label_SIGN_PrivateKey - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_PrivateKey - - - 0 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_SIGN_BrowsePrivateKey - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_PrivateKey - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_SIGN_PrivateKey - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_PrivateKey - - - 2 - - - Fill - - - 0, 37 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 6 - - - tableLayoutPanel_SIGN_PrivateKey - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label_SIGN_PrivateKey" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_SIGN_BrowsePrivateKey" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBox_SIGN_PrivateKey" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - 3 - - - True - - - Fill - - - NoControl - - - 3, 3 - - - 3, 3, 3, 3 - - - 343, 31 - - - 8 - - - Public key - - - MiddleLeft - - - label_SIGN_PublicKey - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_PublicKey - - - 0 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_SIGN_BrowsePublicKey - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_PublicKey - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_SIGN_PublicKey - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_PublicKey - - - 2 - - - Fill - - - 0, 0 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 5 - - - tableLayoutPanel_SIGN_PublicKey - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_Options - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label_SIGN_PublicKey" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_SIGN_BrowsePublicKey" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBox_SIGN_PublicKey" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - 3 - - - True - - - Fill - - - NoControl - - - 3, 3 - - - 3, 3, 3, 3 - - - 343, 31 - - - 8 - - - Output file - - - MiddleLeft - - - label_SIGN_OutputFile - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_OutputFile - - - 0 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_SIGN_BrowseOutputFile - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_OutputFile - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_SIGN_OutputFile - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_OutputFile - - - 2 - - - Fill - - - 0, 74 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 4 - - - tableLayoutPanel_SIGN_OutputFile - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_SIGN_Options - - - 2 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label_SIGN_OutputFile" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_SIGN_BrowseOutputFile" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBox_SIGN_OutputFile" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - 4, 23 - - - 4, 4, 4, 4 - - - 4 - - - 737, 113 - - - 0 - - - tableLayoutPanel_SIGN_Options - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox_SIGN_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel_SIGN_PrivateKey" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel_SIGN_PublicKey" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel_SIGN_OutputFile" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,37,Absolute,37,Absolute,37,AutoSize,0,Absolute,29,Absolute,29,Absolute,29" /></TableLayoutSettings> - - - 8, 9 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 745, 140 - - - 17 - - - Options - - - groupBox_SIGN_Options - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageSign - - - 0 - - - Top, Left, Right - - - 8, 305 - - - 4, 4, 4, 4 - - - 557, 26 - - - 9 - - - textBox_SIGN_InputFile - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageSign - - - 1 - - - Top, Right - - - System - - - NoControl - - - 569, 304 - - - 4, 4, 4, 4 - - - 37, 35 - - - 0 - - - ... - - - button_SIGN_BrowseInputFile - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageSign - - - 2 - - - Top, Right - - - System - - - NoControl - - - 613, 304 - - - 4, 4, 4, 4 - - - 140, 35 - - - 1 - - - Sign - - - button_SIGN_Sign - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageSign - - - 3 - - - 4, 28 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 764, 354 - - - 1 - - - Sign - - - tabPageSign - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControlMain - - - 3 - - - Top, Left, Right - - - 1 - - - Fill - - - NoControl - - - 4, 115 - - - 4, 4, 4, 4 - - - 729, 29 - - - 8 - - - Recompress using Zopfli - - - checkBox_ZIPALIGN_Recompress - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_Options - - - 0 - - - 2 - - - True - - - Fill - - - NoControl - - - 3, 3 - - - 3, 3, 3, 3 - - - 686, 31 - - - 0 - - - Alignment in bytes, e.g. '4' provides 32-bit alignment - - - MiddleLeft - - - label_ZIPALIGN_AlignmentBytes - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_AlignmentBytes - - - 0 - - - Fill - - - 693, 1 - - - 1, 1, 1, 1 - - - 43, 26 - - - 1 - - - Center - - - numericUpDown_ZIPALIGN_AlignmentBytes - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_AlignmentBytes - - - 1 - - - Fill - - - 0, 0 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 7 - - - tableLayoutPanel_ZIPALIGN_AlignmentBytes - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_Options - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label_ZIPALIGN_AlignmentBytes" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numericUpDown_ZIPALIGN_AlignmentBytes" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,45,Absolute,27" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - NoControl - - - 4, 78 - - - 4, 4, 4, 4 - - - 729, 29 - - - 6 - - - Verbose output - - - checkBox_ZIPALIGN_VerboseOutput - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_Options - - - 2 - - - Fill - - - NoControl - - - 4, 41 - - - 4, 4, 4, 4 - - - 729, 29 - - - 5 - - - Check alignment only (does not modify file) - - - checkBox_ZIPALIGN_CheckAlignment - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_Options - - - 3 - - - 3 - - - True - - - Fill - - - NoControl - - - 3, 3 - - - 3, 3, 3, 3 - - - 343, 31 - - - 8 - - - Output file - - - MiddleLeft - - - label_ZIPALIGN_OutputFile - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_OutputFile - - - 0 - - - NoControl - - - 699, 0 - - - 1, 0, 1, 1 - - - 35, 35 - - - 7 - - - ... - - - button_ZIPALIGN_BrowseOutputFile - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_OutputFile - - - 1 - - - Fill - - - 350, 1 - - - 1, 1, 1, 1 - - - 347, 26 - - - 4 - - - textBox_ZIPALIGN_OutputFile - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_OutputFile - - - 2 - - - Fill - - - 0, 185 - - - 0, 0, 0, 0 - - - 1 - - - 737, 37 - - - 4 - - - tableLayoutPanel_ZIPALIGN_OutputFile - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_Options - - - 4 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label_ZIPALIGN_OutputFile" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button_ZIPALIGN_BrowseOutputFile" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBox_ZIPALIGN_OutputFile" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50,Absolute,39" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - Fill - - - NoControl - - - 4, 152 - - - 4, 4, 4, 4 - - - 729, 29 - - - 3 - - - Overwrite existing output file - - - checkBox_ZIPALIGN_OverwriteOutputFile - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel_ZIPALIGN_Options - - - 5 - - - Fill - - - 4, 23 - - - 4, 4, 4, 4 - - - 7 - - - 737, 223 - - - 0 - - - tableLayoutPanel_ZIPALIGN_Options - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox_ZIPALIGN_Options - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBox_ZIPALIGN_Recompress" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel_ZIPALIGN_AlignmentBytes" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_ZIPALIGN_VerboseOutput" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_ZIPALIGN_CheckAlignment" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel_ZIPALIGN_OutputFile" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBox_ZIPALIGN_OverwriteOutputFile" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,37,Absolute,37,Absolute,37,Absolute,37,Absolute,37,Absolute,37,AutoSize,0" /></TableLayoutSettings> - - - 8, 9 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 745, 250 - - - 16 - - - Options - - - groupBox_ZIPALIGN_Options - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageZipAlign - - - 0 - - - Top, Right - - - System - - - NoControl - - - 613, 304 - - - 4, 4, 4, 4 - - - 140, 35 - - - 15 - - - Align - - - button_ZIPALIGN_Align - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageZipAlign - - - 1 - - - Top, Right - - - System - - - NoControl - - - 569, 304 - - - 4, 4, 4, 4 - - - 37, 35 - - - 0 - - - ... - - - button_ZIPALIGN_BrowseInputFile - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageZipAlign - - - 2 - - - Top, Left, Right - - - 8, 305 - - - 4, 4, 4, 4 - - - 557, 26 - - - 9 - - - textBox_ZIPALIGN_InputFile - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageZipAlign - - - 3 - - - 4, 28 - - - 4, 4, 4, 4 - - - 4, 4, 4, 4 - - - 764, 354 - - - 2 - - - Zip align - - - tabPageZipAlign - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControlMain - - - 4 - - - 12, 13 - - - 0, 0, 0, 0 - - - 772, 386 - - - 15 - - - tabControlMain - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 172, 17 - - - 0, 700 - - - 1, 0, 19, 0 - - - 793, 29 - - - 17 - - - statusStrip1 - - - statusStrip1 - - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 0, 24 - - - toolStripStatusLabel1 - - - MiddleLeft - - - None - - - 638, 24 - - - Loading... - - - MiddleLeft - - - False - - - 133, 23 - - - Top, Bottom, Left, Right - - - 24 - - - True - - - - - - 20 - - - True - - - Time - - - 68 - - - True - - - Message - - - 478, 17 - - - 139, 28 - - - contextMenuStripLog - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Microsoft Sans Serif, 8.25pt - - - 12, 403 - - - 4, 4, 4, 4 - - - Vertical - - - 769, 281 - - - 0 - - - dataGridView1 - - - System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - 138, 24 - - - Clear log - - - 647, 17 - - - File - - - Settings - - - Exit - - - Help - - - Check for update - - - About - - - 17, 17 - - - apk, jar|*.apk;*.jar|*.*|*.* - - - 288, 17 - - - True - - - 33 - - - 8, 19 - - - 793, 729 - - - Segoe UI, 8.25pt - - - 4, 4, 4, 4 - - - 127, 124 - - - CenterScreen - - - APKTool GUI - - - toolStripStatusLabelStateImage - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripStatusLabelStateText - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripProgressBar1 - - - System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ColumnImage - - - System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ColumnTime - - - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ColumnMessage - - - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - clearLogToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - mainMenu1 - - - System.Windows.Forms.MainMenu, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemFile - - - System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemSettings - - - System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemExit - - - System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemHelp - - - System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemCheckUpdate - - - System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemAbout - - - System.Windows.Forms.MenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - openFileDialogApk - - - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - folderBrowserDialogBuild - - - System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - FormMain - - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/APKToolGUI/FormSettings.Designer.cs b/APKToolGUI/FormSettings.Designer.cs deleted file mode 100644 index b38c271..0000000 --- a/APKToolGUI/FormSettings.Designer.cs +++ /dev/null @@ -1,229 +0,0 @@ -namespace APKToolGUI -{ - partial class FormSettings - { - /// - /// Требуется переменная конструктора. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Освободить все используемые ресурсы. - /// - /// истинно, если управляемый ресурс должен быть удален; иначе ложно. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Код, автоматически созданный конструктором форм Windows - - /// - /// Обязательный метод для поддержки конструктора - не изменяйте - /// содержимое данного метода при помощи редактора кода. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSettings)); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox(); - this.groupBoxJava = new System.Windows.Forms.GroupBox(); - this.labelCustomJavaLocation = new System.Windows.Forms.Label(); - this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox(); - this.buttonCustomJavaLocation = new System.Windows.Forms.Button(); - this.groupBoxLanguage = new System.Windows.Forms.GroupBox(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.groupBoxContextMenu = new System.Windows.Forms.GroupBox(); - this.labelAdminRights = new System.Windows.Forms.Label(); - this.buttonAddContextMenu = new System.Windows.Forms.Button(); - this.buttonRemoveContextMenu = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.buttonОК = new System.Windows.Forms.Button(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBoxJava.SuspendLayout(); - this.groupBoxLanguage.SuspendLayout(); - this.groupBoxContextMenu.SuspendLayout(); - this.SuspendLayout(); - // - // tabControl1 - // - resources.ApplyResources(this.tabControl1, "tabControl1"); - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - // - // tabPage1 - // - resources.ApplyResources(this.tabPage1, "tabPage1"); - this.tabPage1.Controls.Add(this.groupBox1); - this.tabPage1.Controls.Add(this.groupBoxJava); - this.tabPage1.Controls.Add(this.groupBoxLanguage); - this.tabPage1.Controls.Add(this.groupBoxContextMenu); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // groupBox1 - // - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Controls.Add(this.checkBoxCheckUpdateStartup); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // checkBox1 - // - resources.ApplyResources(this.checkBox1, "checkBox1"); - this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction; - this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // checkBoxCheckUpdateStartup - // - resources.ApplyResources(this.checkBoxCheckUpdateStartup, "checkBoxCheckUpdateStartup"); - this.checkBoxCheckUpdateStartup.Checked = global::APKToolGUI.Properties.Settings.Default.CheckForUpdateAtStartup; - this.checkBoxCheckUpdateStartup.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBoxCheckUpdateStartup.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "CheckForUpdateAtStartup", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.checkBoxCheckUpdateStartup.Name = "checkBoxCheckUpdateStartup"; - this.checkBoxCheckUpdateStartup.UseVisualStyleBackColor = true; - // - // groupBoxJava - // - resources.ApplyResources(this.groupBoxJava, "groupBoxJava"); - this.groupBoxJava.Controls.Add(this.labelCustomJavaLocation); - this.groupBoxJava.Controls.Add(this.textBoxCustomJavaLocation); - this.groupBoxJava.Controls.Add(this.buttonCustomJavaLocation); - this.groupBoxJava.Name = "groupBoxJava"; - this.groupBoxJava.TabStop = false; - // - // labelCustomJavaLocation - // - resources.ApplyResources(this.labelCustomJavaLocation, "labelCustomJavaLocation"); - this.labelCustomJavaLocation.Name = "labelCustomJavaLocation"; - // - // textBoxCustomJavaLocation - // - resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation"); - this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window; - this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); - this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation"; - this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe; - // - // buttonCustomJavaLocation - // - resources.ApplyResources(this.buttonCustomJavaLocation, "buttonCustomJavaLocation"); - this.buttonCustomJavaLocation.Name = "buttonCustomJavaLocation"; - this.buttonCustomJavaLocation.UseVisualStyleBackColor = true; - this.buttonCustomJavaLocation.Click += new System.EventHandler(this.buttonCustomJavaLocation_Click); - // - // groupBoxLanguage - // - resources.ApplyResources(this.groupBoxLanguage, "groupBoxLanguage"); - this.groupBoxLanguage.Controls.Add(this.comboBox1); - this.groupBoxLanguage.Name = "groupBoxLanguage"; - this.groupBoxLanguage.TabStop = false; - // - // comboBox1 - // - resources.ApplyResources(this.comboBox1, "comboBox1"); - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Name = "comboBox1"; - // - // groupBoxContextMenu - // - resources.ApplyResources(this.groupBoxContextMenu, "groupBoxContextMenu"); - this.groupBoxContextMenu.Controls.Add(this.labelAdminRights); - this.groupBoxContextMenu.Controls.Add(this.buttonAddContextMenu); - this.groupBoxContextMenu.Controls.Add(this.buttonRemoveContextMenu); - this.groupBoxContextMenu.Name = "groupBoxContextMenu"; - this.groupBoxContextMenu.TabStop = false; - // - // labelAdminRights - // - resources.ApplyResources(this.labelAdminRights, "labelAdminRights"); - this.labelAdminRights.Name = "labelAdminRights"; - // - // buttonAddContextMenu - // - resources.ApplyResources(this.buttonAddContextMenu, "buttonAddContextMenu"); - this.buttonAddContextMenu.Name = "buttonAddContextMenu"; - this.buttonAddContextMenu.UseVisualStyleBackColor = true; - this.buttonAddContextMenu.Click += new System.EventHandler(this.buttonAddContextMenu_Click); - // - // buttonRemoveContextMenu - // - resources.ApplyResources(this.buttonRemoveContextMenu, "buttonRemoveContextMenu"); - this.buttonRemoveContextMenu.Name = "buttonRemoveContextMenu"; - this.buttonRemoveContextMenu.UseVisualStyleBackColor = true; - this.buttonRemoveContextMenu.Click += new System.EventHandler(this.buttonRemoveContextMenu_Click); - // - // buttonCancel - // - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // buttonОК - // - resources.ApplyResources(this.buttonОК, "buttonОК"); - this.buttonОК.Name = "buttonОК"; - this.buttonОК.UseVisualStyleBackColor = true; - this.buttonОК.Click += new System.EventHandler(this.buttonОК_Click); - // - // FormSettings - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonОК); - this.Controls.Add(this.tabControl1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "FormSettings"; - this.Load += new System.EventHandler(this.FormSettings_Load); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBoxJava.ResumeLayout(false); - this.groupBoxJava.PerformLayout(); - this.groupBoxLanguage.ResumeLayout(false); - this.groupBoxContextMenu.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.GroupBox groupBoxJava; - private System.Windows.Forms.GroupBox groupBoxLanguage; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.GroupBox groupBoxContextMenu; - private System.Windows.Forms.Label labelAdminRights; - private System.Windows.Forms.Button buttonAddContextMenu; - private System.Windows.Forms.Button buttonRemoveContextMenu; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Button buttonОК; - private System.Windows.Forms.TextBox textBoxCustomJavaLocation; - private System.Windows.Forms.Button buttonCustomJavaLocation; - private System.Windows.Forms.Label labelCustomJavaLocation; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox checkBoxCheckUpdateStartup; - private System.Windows.Forms.CheckBox checkBox1; - - } -} \ No newline at end of file diff --git a/APKToolGUI/FormSettings.cs b/APKToolGUI/FormSettings.cs deleted file mode 100644 index 019c1b0..0000000 --- a/APKToolGUI/FormSettings.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.IO; - -namespace APKToolGUI -{ - public partial class FormSettings : Form - { - public FormSettings() - { - InitializeComponent(); - if (!ExplorerContextMenu.IsAdmin()) - { - SetButtonShield(buttonAddContextMenu, true); - SetButtonShield(buttonRemoveContextMenu, true); - } - } - - #region GUI - - private void FormSettings_Load(object sender, EventArgs e) - { - LoadSettings(); - } - - private void buttonОК_Click(object sender, EventArgs e) - { - SaveSettings(); - this.Close(); - } - - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - public static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); - - private static void SetButtonShield(Button btn, bool showShield) - { - // BCM_SETSHIELD = 0x0000160C - SendMessage(new HandleRef(btn, btn.Handle), 0x160C, IntPtr.Zero, showShield ? new IntPtr(1) : IntPtr.Zero); - } - - private void buttonAddContextMenu_Click(object sender, EventArgs e) - { - if(MessageBox.Show(Language.DoYouRealyWantToInstallCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) - RunAsAdmin(Application.ExecutablePath, "ccm"); - } - - private void buttonRemoveContextMenu_Click(object sender, EventArgs e) - { - if (MessageBox.Show(Language.DoYouRealyWantToRemoveCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) - RunAsAdmin(Application.ExecutablePath, "rcm"); - } - - #endregion - - private void LoadSettings() - { - //textBox1.Font = Properties.Settings.Default.FontLogMainWindow; - //textBox2.Font = Properties.Settings.Default.FontLogContextMenuWindow; - //textBox1.Text = textBox1.Font.Name + ", " + textBox1.Font.Size; - //textBox2.Text = textBox2.Font.Name + ", " + textBox2.Font.Size; - - String sysLang = Language.SystemLanguage; - comboBox1.Items.Add(sysLang); - comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("ru")); - comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("en")); - //comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("uk")); - //comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("ru-RU")); - //comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("en-US")); - //comboBox1.Items.Add(System.Globalization.CultureInfo.GetCultureInfo("uk-UA")); - - comboBox1.DisplayMember = "NativeName"; // <= System.Globalization.CultureInfo.GetCultureInfo("ru-RU").NativeName - comboBox1.ValueMember = "Name"; // <= System.Globalization.CultureInfo.GetCultureInfo("ru-RU").Name - - // Если в настройках есть язык, выбираем его в списке. - String _culture = Properties.Settings.Default.Culture; - if (_culture.Equals("Auto")) - comboBox1.SelectedItem = sysLang; - else - { - var qwe = System.Globalization.CultureInfo.GetCultureInfo(_culture); - comboBox1.SelectedItem = qwe; - } - - } - - private void SaveSettings() - { - //Properties.Settings.Default.FontLogMainWindow = textBox1.Font; - //Properties.Settings.Default.FontLogContextMenuWindow = textBox2.Font; - - if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString())) - Properties.Settings.Default.Culture = "Auto"; - else - Properties.Settings.Default.Culture = comboBox1.SelectedItem.ToString(); - Properties.Settings.Default.Save(); - } - - public static void RunAsAdmin(string aFileName, string anArguments) - { - System.Diagnostics.ProcessStartInfo processInfo = new System.Diagnostics.ProcessStartInfo(); - - processInfo.FileName = aFileName; - processInfo.Arguments = anArguments; - processInfo.UseShellExecute = true; - processInfo.Verb = "runas"; // здесь вся соль - - try - { - System.Diagnostics.Process.Start(processInfo); - } - catch (Exception e) - { - MessageBox.Show(e.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - //private void button1_Click(object sender, EventArgs e) - //{ - // FontDialog fontDialog1 = new FontDialog(); - // fontDialog1.Font = textBox1.Font; - // if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) - // { - // textBox1.Text = fontDialog1.Font.Name + ", " + fontDialog1.Font.Size; - // textBox1.Font = fontDialog1.Font; - // } - //} - - //private void button2_Click(object sender, EventArgs e) - //{ - // FontDialog fontDialog1 = new FontDialog(); - // fontDialog1.Font = textBox2.Font; - // if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) - // { - // textBox2.Text = fontDialog1.Font.Name + ", " + fontDialog1.Font.Size; - // textBox2.Font = fontDialog1.Font; - // } - //} - - private void buttonCustomJavaLocation_Click(object sender, EventArgs e) - { - using(OpenFileDialog openJavaExe = new OpenFileDialog()) - { - openJavaExe.Filter = "java.exe|java.exe"; - if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK) - textBoxCustomJavaLocation.Text = Program.GetPortablePath(openJavaExe.FileName); - } - - //OpenFileDialog openJavaExe = new OpenFileDialog() - //{ - // Multiselect = false, - // Filter = "java.exe|java.exe" - //}; - //if (openJavaExe.ShowDialog() == System.Windows.Forms.DialogResult.OK) - //{ - // textBoxCustomJavaLocation.Text = openJavaExe.FileName; - //} - } - } -} diff --git a/APKToolGUI/FormAboutBox.Designer.cs b/APKToolGUI/Forms/FormAboutBox.Designer.cs similarity index 98% rename from APKToolGUI/FormAboutBox.Designer.cs rename to APKToolGUI/Forms/FormAboutBox.Designer.cs index 956f238..a112372 100644 --- a/APKToolGUI/FormAboutBox.Designer.cs +++ b/APKToolGUI/Forms/FormAboutBox.Designer.cs @@ -55,7 +55,6 @@ private void InitializeComponent() // logoPictureBox // resources.ApplyResources(this.logoPictureBox, "logoPictureBox"); - this.logoPictureBox.Image = global::APKToolGUI.Properties.Resources.android; this.logoPictureBox.Name = "logoPictureBox"; this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); this.logoPictureBox.TabStop = false; @@ -91,6 +90,7 @@ private void InitializeComponent() // linkLabel1 // resources.ApplyResources(this.linkLabel1, "linkLabel1"); + this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue; this.linkLabel1.Name = "linkLabel1"; this.linkLabel1.TabStop = true; this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); diff --git a/APKToolGUI/FormAboutBox.cs b/APKToolGUI/Forms/FormAboutBox.cs similarity index 94% rename from APKToolGUI/FormAboutBox.cs rename to APKToolGUI/Forms/FormAboutBox.cs index 07c6509..49645f1 100644 --- a/APKToolGUI/FormAboutBox.cs +++ b/APKToolGUI/Forms/FormAboutBox.cs @@ -1,4 +1,5 @@ -using System; +using APKToolGUI.Controls; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; @@ -13,6 +14,10 @@ partial class FormAboutBox : Form public FormAboutBox() { InitializeComponent(); + + if (Program.IsDarkTheme()) + DarkTheme.SetTheme(Controls, this); + this.Text = String.Format("{0} {1}", this.Text, AssemblyTitle); this.labelProductName.Text = AssemblyProduct; this.labelVersion.Text = String.Format("{0} {1}", labelVersion.Text, AssemblyVersion); @@ -103,7 +108,7 @@ public string AssemblyCompany private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - System.Diagnostics.Process.Start("http://4pda.ru/forum/index.php?showtopic=452034"); + System.Diagnostics.Process.Start("https://github.com/AndnixSH/APKToolGUI"); } } } diff --git a/APKToolGUI/FormBuild.resx b/APKToolGUI/Forms/FormAboutBox.de.resx similarity index 72% rename from APKToolGUI/FormBuild.resx rename to APKToolGUI/Forms/FormAboutBox.de.resx index 4f10a29..fa43366 100644 --- a/APKToolGUI/FormBuild.resx +++ b/APKToolGUI/Forms/FormAboutBox.de.resx @@ -1,4 +1,4 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 2 + + + + Center + + + Fill + + + + + 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 + RK5CYII= + + + + 3, 3 + + + 219, 259 + + + CenterImage + + + 12 + + + logoPictureBox + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 0 + + + Fill + + + 231, 0 + + + 6, 0, 3, 0 + + + 256, 26 + + + 19 + + + Product Name + + + MiddleLeft + + + labelProductName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 1 + + + Fill + + + 231, 26 + + + 6, 0, 3, 0 + + + 256, 26 + + + 0 + + + Version + + + MiddleLeft + + + labelVersion + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 2 + + + Fill + + + 231, 52 + + + 6, 0, 3, 0 + + + 256, 26 + + + 21 + + + Copyright + + + MiddleLeft + + + labelCopyright + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 3 + + + Bottom, Right + + + 412, 239 + + + 75, 23 + + + 24 + + + &ОК + + + okButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 4 + + + Fill + + + 231, 107 + + + 6, 3, 3, 3 + + + True + + + Both + + + 256, 126 + + + 23 + + + Description + + + textBoxDescription + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 5 + + + Fill + + + 231, 78 + + + 6, 0, 3, 0 + + + 256, 26 + + + 25 + + + Github Repo + + + MiddleLeft + + + linkLabel1 + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 6 + + + Fill + + + 9, 9 + + + 6 + + + 490, 265 + + + 0 + + + tableLayoutPanel + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="logoPictureBox" Row="0" RowSpan="6" Column="0" ColumnSpan="1" /><Control Name="labelProductName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelVersion" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelCopyright" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="okButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="textBoxDescription" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,46,0039,Percent,53,9961" /><Rows Styles="Percent,10,Percent,10,Percent,10,Percent,10,Percent,50,Percent,10" /></TableLayoutSettings> + + + True + + + 6, 13 + + + 508, 283 + + + Segoe UI, 8.25pt + + + 9, 9, 9, 9 + + + CenterParent + + + About + + + FormAboutBox + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/APKToolGUI/FormAboutBox.ru.resx b/APKToolGUI/Forms/FormAboutBox.ru.resx similarity index 100% rename from APKToolGUI/FormAboutBox.ru.resx rename to APKToolGUI/Forms/FormAboutBox.ru.resx diff --git a/APKToolGUI/FormDecode.resx b/APKToolGUI/Forms/FormAboutBox.vi-VN.resx similarity index 66% rename from APKToolGUI/FormDecode.resx rename to APKToolGUI/Forms/FormAboutBox.vi-VN.resx index a4c8165..a49d0e0 100644 --- a/APKToolGUI/FormDecode.resx +++ b/APKToolGUI/Forms/FormAboutBox.vi-VN.resx @@ -1,4 +1,4 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Язык системы - - - Доступна новая версия. Выполнить обновление? - - - Готово - - - Java не установлена или установлена не корректно. Программа будет закрыта. - - - Нет доступных обновлений. - - - Java не найдена. Хотите указать расположение вручную? - - - Фреймворк не выбран! - - - Вы действительно хотите установить контекстное меню? - - - Вы действительно хотите удалить контекстное меню? - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 软件名 + + + 版本 + + + 版权 + + + 描述 + + + Github 仓库 + + + 关于 + \ No newline at end of file diff --git a/APKToolGUI/Forms/FormMain.Designer.cs b/APKToolGUI/Forms/FormMain.Designer.cs new file mode 100644 index 0000000..e983b9b --- /dev/null +++ b/APKToolGUI/Forms/FormMain.Designer.cs @@ -0,0 +1,2472 @@ +namespace APKToolGUI +{ + partial class FormMain + { + /// + /// Требуется переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором форм Windows + + /// + /// Обязательный метод для поддержки конструктора - не изменяйте + /// содержимое данного метода при помощи редактора кода. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); + this.tabControlMain = new System.Windows.Forms.TabControl(); + this.tabPageMain = new System.Windows.Forms.TabPage(); + this.mergePanel = new System.Windows.Forms.Panel(); + this.splitApkTxt = new System.Windows.Forms.Label(); + this.splitApkPathTxtBox = new System.Windows.Forms.TextBox(); + this.selSplitApkBtn = new System.Windows.Forms.Button(); + this.mergeApkBtn = new System.Windows.Forms.Button(); + this.comApkOpenDir = new System.Windows.Forms.Button(); + this.decOutOpenDirBtn = new System.Windows.Forms.Button(); + this.signApkOpenDirBtn = new System.Windows.Forms.Button(); + this.alignApkOpenDirBtn = new System.Windows.Forms.Button(); + this.decApkOpenDirBtn = new System.Windows.Forms.Button(); + this.compileOutputOpenDirBtn = new System.Windows.Forms.Button(); + this.button_OpenMainActivity = new System.Windows.Forms.Button(); + this.openApktoolYmlBtn = new System.Windows.Forms.Button(); + this.openAndroidMainfestBtn = new System.Windows.Forms.Button(); + this.signPanel = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.textBox_SIGN_InputFile = new System.Windows.Forms.TextBox(); + this.button_SIGN_BrowseInputFile = new System.Windows.Forms.Button(); + this.button_SIGN_Sign = new System.Windows.Forms.Button(); + this.zipalignPanel = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.button_ZIPALIGN_Align = new System.Windows.Forms.Button(); + this.button_ZIPALIGN_BrowseInputFile = new System.Windows.Forms.Button(); + this.textBox_ZIPALIGN_InputFile = new System.Windows.Forms.TextBox(); + this.comPanel = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.button_BUILD_BrowseInputProjectDir = new System.Windows.Forms.Button(); + this.button_BUILD_Build = new System.Windows.Forms.Button(); + this.textBox_BUILD_InputProjectDir = new System.Windows.Forms.TextBox(); + this.decPanel = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox_DECODE_InputAppPath = new System.Windows.Forms.TextBox(); + this.button_DECODE_Decode = new System.Windows.Forms.Button(); + this.button_DECODE_BrowseInputAppPath = new System.Windows.Forms.Button(); + this.tabPageApkInfo = new System.Windows.Forms.TabPage(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.basicInfoTabPage = new System.Windows.Forms.TabPage(); + this.sigTxtBox = new System.Windows.Forms.RichTextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.launchActivityTxtBox = new System.Windows.Forms.TextBox(); + this.label31 = new System.Windows.Forms.Label(); + this.archSdkTxtBox = new System.Windows.Forms.TextBox(); + this.label30 = new System.Windows.Forms.Label(); + this.apkMirrorLinkBtn = new System.Windows.Forms.Button(); + this.apkSupportLinkBtn = new System.Windows.Forms.Button(); + this.apkGkLinkBtn = new System.Windows.Forms.Button(); + this.label17 = new System.Windows.Forms.Label(); + this.localsTxtBox = new System.Windows.Forms.RichTextBox(); + this.selApkFileInfoBtn = new System.Windows.Forms.Button(); + this.label18 = new System.Windows.Forms.Label(); + this.appTxtBox = new System.Windows.Forms.TextBox(); + this.permTxtBox = new System.Windows.Forms.RichTextBox(); + this.apkComboLinkBtn = new System.Windows.Forms.Button(); + this.label15 = new System.Windows.Forms.Label(); + this.fileTxtBox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.densityTxtBox = new System.Windows.Forms.TextBox(); + this.packNameTxtBox = new System.Windows.Forms.TextBox(); + this.apkPureLinkBtn = new System.Windows.Forms.Button(); + this.verTxtBox = new System.Windows.Forms.TextBox(); + this.psLinkBtn = new System.Windows.Forms.Button(); + this.minSdkTxtBox = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.targetSdkTxtBox = new System.Windows.Forms.TextBox(); + this.screenTxtBox = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.buildTxtBox = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.apkIconPicBox = new System.Windows.Forms.PictureBox(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.fullInfoTextBox = new System.Windows.Forms.RichTextBox(); + this.tabPageDecode = new System.Windows.Forms.TabPage(); + this.groupBox_DECODE_Options = new System.Windows.Forms.GroupBox(); + this.decJobsLvlUpDown = new System.Windows.Forms.NumericUpDown(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox7 = new System.Windows.Forms.CheckBox(); + this.decApiLvlUpDown = new System.Windows.Forms.NumericUpDown(); + this.decSetApiLvlChkBox = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_FixError = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_OnlyMainClasses = new System.Windows.Forms.CheckBox(); + this.textBox_DECODE_FrameDir = new System.Windows.Forms.TextBox(); + this.button_DECODE_BrowseOutputDirectory = new System.Windows.Forms.Button(); + this.checkBox_DECODE_UseFramework = new System.Windows.Forms.CheckBox(); + this.button_DECODE_BrowseFrameDir = new System.Windows.Forms.Button(); + this.checkBox_DECODE_MatchOriginal = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_OutputDirectory = new System.Windows.Forms.CheckBox(); + this.textBox_DECODE_OutputDirectory = new System.Windows.Forms.TextBox(); + this.checkBox_DECODE_KeepBrokenRes = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_NoSrc = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_Force = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_NoRes = new System.Windows.Forms.CheckBox(); + this.checkBox_DECODE_NoDebugInfo = new System.Windows.Forms.CheckBox(); + this.tabPageBuild = new System.Windows.Forms.TabPage(); + this.groupBox_BUILD_Options = new System.Windows.Forms.GroupBox(); + this.comJobsLvlUpDown = new System.Windows.Forms.NumericUpDown(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.checkBox_BUILD_NetSecConf = new System.Windows.Forms.CheckBox(); + this.useAapt2ChkBox = new System.Windows.Forms.CheckBox(); + this.buildApiLvlUpDown = new System.Windows.Forms.NumericUpDown(); + this.buildSetApiLvlChkBox = new System.Windows.Forms.CheckBox(); + this.createUnsignApkChkBox = new System.Windows.Forms.CheckBox(); + this.signAfterBuildChkBox = new System.Windows.Forms.CheckBox(); + this.zipalignAfterBuildChkBox = new System.Windows.Forms.CheckBox(); + this.checkBox_BUILD_NoCrunch = new System.Windows.Forms.CheckBox(); + this.button_BUILD_BrowseOutputAppPath = new System.Windows.Forms.Button(); + this.checkBox_BUILD_ForceAll = new System.Windows.Forms.CheckBox(); + this.button_BUILD_BrowseFrameDir = new System.Windows.Forms.Button(); + this.button_BUILD_BrowseAaptPath = new System.Windows.Forms.Button(); + this.checkBox_BUILD_OutputAppPath = new System.Windows.Forms.CheckBox(); + this.checkBox_BUILD_CopyOriginal = new System.Windows.Forms.CheckBox(); + this.textBox_BUILD_OutputAppPath = new System.Windows.Forms.TextBox(); + this.checkBox_BUILD_UseAapt = new System.Windows.Forms.CheckBox(); + this.textBox_BUILD_AaptPath = new System.Windows.Forms.TextBox(); + this.textBox_BUILD_FrameDir = new System.Windows.Forms.TextBox(); + this.checkBox_BUILD_UseFramework = new System.Windows.Forms.CheckBox(); + this.tabPageSign = new System.Windows.Forms.TabPage(); + this.groupBox_SIGN_Options = new System.Windows.Forms.GroupBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.autoDelIdsigChkBox = new System.Windows.Forms.CheckBox(); + this.schemev4ComboBox = new System.Windows.Forms.ComboBox(); + this.label27 = new System.Windows.Forms.Label(); + this.schemev3ComboBox = new System.Windows.Forms.ComboBox(); + this.label26 = new System.Windows.Forms.Label(); + this.schemev2ComboBox = new System.Windows.Forms.ComboBox(); + this.label25 = new System.Windows.Forms.Label(); + this.schemev1ComboBox = new System.Windows.Forms.ComboBox(); + this.label24 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.selectKeyStoreFileBtn = new System.Windows.Forms.Button(); + this.aliasTxtBox = new System.Windows.Forms.TextBox(); + this.useAliasChkBox = new System.Windows.Forms.CheckBox(); + this.label22 = new System.Windows.Forms.Label(); + this.keyStoreFileTxtBox = new System.Windows.Forms.TextBox(); + this.label21 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.useKeyStoreChkBox = new System.Windows.Forms.CheckBox(); + this.useSigningOutputDir = new System.Windows.Forms.CheckBox(); + this.label_SIGN_PrivateKey = new System.Windows.Forms.Label(); + this.label_SIGN_PublicKey = new System.Windows.Forms.Label(); + this.button_SIGN_BrowseOutputFile = new System.Windows.Forms.Button(); + this.textBox_SIGN_OutputFile = new System.Windows.Forms.TextBox(); + this.button_SIGN_BrowsePublicKey = new System.Windows.Forms.Button(); + this.button_SIGN_BrowsePrivateKey = new System.Windows.Forms.Button(); + this.textBox_SIGN_PublicKey = new System.Windows.Forms.TextBox(); + this.textBox_SIGN_PrivateKey = new System.Windows.Forms.TextBox(); + this.tabPageZipAlign = new System.Windows.Forms.TabPage(); + this.groupBox_ZIPALIGN_Options = new System.Windows.Forms.GroupBox(); + this.zipalignOutputDirChkBox = new System.Windows.Forms.CheckBox(); + this.signAfterZipalignChkBox = new System.Windows.Forms.CheckBox(); + this.checkBox_ZIPALIGN_Recompress = new System.Windows.Forms.CheckBox(); + this.label_ZIPALIGN_AlignmentBytes = new System.Windows.Forms.Label(); + this.button_ZIPALIGN_BrowseOutputFile = new System.Windows.Forms.Button(); + this.checkBox_ZIPALIGN_CheckAlignment = new System.Windows.Forms.CheckBox(); + this.textBox_ZIPALIGN_OutputFile = new System.Windows.Forms.TextBox(); + this.checkBox_ZIPALIGN_VerboseOutput = new System.Windows.Forms.CheckBox(); + this.numericUpDown_ZIPALIGN_AlignmentBytes = new System.Windows.Forms.NumericUpDown(); + this.checkBox_ZIPALIGN_OverwriteOutputFile = new System.Windows.Forms.CheckBox(); + this.tabPageInstallFramework = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.openFwFolderBtn = new System.Windows.Forms.Button(); + this.clearFwBtn = new System.Windows.Forms.Button(); + this.clearFwBeforeDecodeChkBox = new System.Windows.Forms.CheckBox(); + this.groupBox_IF_Options = new System.Windows.Forms.GroupBox(); + this.checkBox_IF_Tag = new System.Windows.Forms.CheckBox(); + this.checkBox_IF_FramePath = new System.Windows.Forms.CheckBox(); + this.textBox_IF_Tag = new System.Windows.Forms.TextBox(); + this.button_IF_InstallFramework = new System.Windows.Forms.Button(); + this.button_IF_BrowseFrameDir = new System.Windows.Forms.Button(); + this.button_IF_BrowseInputFramePath = new System.Windows.Forms.Button(); + this.textBox_IF_InputFramePath = new System.Windows.Forms.TextBox(); + this.textBox_IF_FrameDir = new System.Windows.Forms.TextBox(); + this.tabPageBaksmali = new System.Windows.Forms.TabPage(); + this.smaliGroupBox = new System.Windows.Forms.GroupBox(); + this.label29 = new System.Windows.Forms.Label(); + this.smaliUseOutputChkBox = new System.Windows.Forms.CheckBox(); + this.comSmaliBtn = new System.Windows.Forms.Button(); + this.smaliBrowseOutputBtn = new System.Windows.Forms.Button(); + this.smaliBrowseInputDirTxtBox = new System.Windows.Forms.TextBox(); + this.smaliBrowseOutputTxtBox = new System.Windows.Forms.TextBox(); + this.smaliBrowseInputDirBtn = new System.Windows.Forms.Button(); + this.bakSmaliGroupBox = new System.Windows.Forms.GroupBox(); + this.label28 = new System.Windows.Forms.Label(); + this.baksmaliUseOutputChkBox = new System.Windows.Forms.CheckBox(); + this.baksmaliBrowseOutputBtn = new System.Windows.Forms.Button(); + this.baksmaliBrowseOutputTxtBox = new System.Windows.Forms.TextBox(); + this.decSmaliBtn = new System.Windows.Forms.Button(); + this.baksmaliBrowseInputDexBtn = new System.Windows.Forms.Button(); + this.baksmaliBrowseInputDexTxtBox = new System.Windows.Forms.TextBox(); + this.tabPageAdb = new System.Windows.Forms.TabPage(); + this.overrideAbiComboBox = new System.Windows.Forms.ComboBox(); + this.selAdbDeviceLbl = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.killAdbBtn = new System.Windows.Forms.Button(); + this.installApkBtn = new System.Windows.Forms.Button(); + this.refreshDevicesBtn = new System.Windows.Forms.Button(); + this.selApkAdbBtn = new System.Windows.Forms.Button(); + this.overrideAbiCheckBox = new System.Windows.Forms.CheckBox(); + this.setVendorChkBox = new System.Windows.Forms.CheckBox(); + this.apkPathAdbTxtBox = new System.Windows.Forms.TextBox(); + this.label32 = new System.Windows.Forms.Label(); + this.devicesListBox = new System.Windows.Forms.ListBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabelStateImage = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelStateText = new System.Windows.Forms.ToolStripStatusLabel(); + this.progressBar = new System.Windows.Forms.ToolStripProgressBar(); + this.contextMenuStripLog = new System.Windows.Forms.ContextMenuStrip(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clearLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.logTxtBox = new System.Windows.Forms.RichTextBox(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newInsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveLogToFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.openTempFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.clearTempFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.useAPKEditorForDecompilingItem = new System.Windows.Forms.ToolStripMenuItem(); + this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.reportAnIsuueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.apktoolIssuesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.baksmaliIssuesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolTip1 = new System.Windows.Forms.ToolTip(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tabControlMain.SuspendLayout(); + this.tabPageMain.SuspendLayout(); + this.mergePanel.SuspendLayout(); + this.signPanel.SuspendLayout(); + this.zipalignPanel.SuspendLayout(); + this.comPanel.SuspendLayout(); + this.decPanel.SuspendLayout(); + this.tabPageApkInfo.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.basicInfoTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.apkIconPicBox)).BeginInit(); + this.tabPage3.SuspendLayout(); + this.tabPageDecode.SuspendLayout(); + this.groupBox_DECODE_Options.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.decJobsLvlUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.decApiLvlUpDown)).BeginInit(); + this.tabPageBuild.SuspendLayout(); + this.groupBox_BUILD_Options.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comJobsLvlUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.buildApiLvlUpDown)).BeginInit(); + this.tabPageSign.SuspendLayout(); + this.groupBox_SIGN_Options.SuspendLayout(); + this.tabPageZipAlign.SuspendLayout(); + this.groupBox_ZIPALIGN_Options.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown_ZIPALIGN_AlignmentBytes)).BeginInit(); + this.tabPageInstallFramework.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox_IF_Options.SuspendLayout(); + this.tabPageBaksmali.SuspendLayout(); + this.smaliGroupBox.SuspendLayout(); + this.bakSmaliGroupBox.SuspendLayout(); + this.tabPageAdb.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.contextMenuStripLog.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // tabControlMain + // + this.tabControlMain.AllowDrop = true; + this.tabControlMain.Controls.Add(this.tabPageMain); + this.tabControlMain.Controls.Add(this.tabPageApkInfo); + this.tabControlMain.Controls.Add(this.tabPageDecode); + this.tabControlMain.Controls.Add(this.tabPageBuild); + this.tabControlMain.Controls.Add(this.tabPageSign); + this.tabControlMain.Controls.Add(this.tabPageZipAlign); + this.tabControlMain.Controls.Add(this.tabPageInstallFramework); + this.tabControlMain.Controls.Add(this.tabPageBaksmali); + this.tabControlMain.Controls.Add(this.tabPageAdb); + resources.ApplyResources(this.tabControlMain, "tabControlMain"); + this.tabControlMain.Name = "tabControlMain"; + this.tabControlMain.SelectedIndex = 0; + this.tabControlMain.SelectedIndexChanged += new System.EventHandler(this.tabControlMain_SelectedIndexChanged); + // + // tabPageMain + // + this.tabPageMain.BackColor = System.Drawing.Color.White; + this.tabPageMain.Controls.Add(this.mergePanel); + this.tabPageMain.Controls.Add(this.comApkOpenDir); + this.tabPageMain.Controls.Add(this.decOutOpenDirBtn); + this.tabPageMain.Controls.Add(this.signApkOpenDirBtn); + this.tabPageMain.Controls.Add(this.alignApkOpenDirBtn); + this.tabPageMain.Controls.Add(this.decApkOpenDirBtn); + this.tabPageMain.Controls.Add(this.compileOutputOpenDirBtn); + this.tabPageMain.Controls.Add(this.button_OpenMainActivity); + this.tabPageMain.Controls.Add(this.openApktoolYmlBtn); + this.tabPageMain.Controls.Add(this.openAndroidMainfestBtn); + this.tabPageMain.Controls.Add(this.signPanel); + this.tabPageMain.Controls.Add(this.zipalignPanel); + this.tabPageMain.Controls.Add(this.comPanel); + this.tabPageMain.Controls.Add(this.decPanel); + resources.ApplyResources(this.tabPageMain, "tabPageMain"); + this.tabPageMain.Name = "tabPageMain"; + // + // mergePanel + // + this.mergePanel.AllowDrop = true; + this.mergePanel.Controls.Add(this.splitApkTxt); + this.mergePanel.Controls.Add(this.splitApkPathTxtBox); + this.mergePanel.Controls.Add(this.selSplitApkBtn); + this.mergePanel.Controls.Add(this.mergeApkBtn); + resources.ApplyResources(this.mergePanel, "mergePanel"); + this.mergePanel.Name = "mergePanel"; + // + // splitApkTxt + // + resources.ApplyResources(this.splitApkTxt, "splitApkTxt"); + this.splitApkTxt.Name = "splitApkTxt"; + // + // splitApkPathTxtBox + // + this.splitApkPathTxtBox.AllowDrop = true; + resources.ApplyResources(this.splitApkPathTxtBox, "splitApkPathTxtBox"); + this.splitApkPathTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "SplitApk_InputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.splitApkPathTxtBox.Name = "splitApkPathTxtBox"; + this.splitApkPathTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.SplitApk_InputFile; + // + // selSplitApkBtn + // + resources.ApplyResources(this.selSplitApkBtn, "selSplitApkBtn"); + this.selSplitApkBtn.Name = "selSplitApkBtn"; + this.selSplitApkBtn.UseVisualStyleBackColor = true; + // + // mergeApkBtn + // + this.mergeApkBtn.AllowDrop = true; + resources.ApplyResources(this.mergeApkBtn, "mergeApkBtn"); + this.mergeApkBtn.Name = "mergeApkBtn"; + this.mergeApkBtn.UseVisualStyleBackColor = true; + // + // comApkOpenDir + // + resources.ApplyResources(this.comApkOpenDir, "comApkOpenDir"); + this.comApkOpenDir.Name = "comApkOpenDir"; + this.comApkOpenDir.UseVisualStyleBackColor = true; + // + // decOutOpenDirBtn + // + resources.ApplyResources(this.decOutOpenDirBtn, "decOutOpenDirBtn"); + this.decOutOpenDirBtn.Name = "decOutOpenDirBtn"; + this.decOutOpenDirBtn.UseVisualStyleBackColor = true; + // + // signApkOpenDirBtn + // + resources.ApplyResources(this.signApkOpenDirBtn, "signApkOpenDirBtn"); + this.signApkOpenDirBtn.Name = "signApkOpenDirBtn"; + this.signApkOpenDirBtn.UseVisualStyleBackColor = true; + // + // alignApkOpenDirBtn + // + resources.ApplyResources(this.alignApkOpenDirBtn, "alignApkOpenDirBtn"); + this.alignApkOpenDirBtn.Name = "alignApkOpenDirBtn"; + this.alignApkOpenDirBtn.UseVisualStyleBackColor = true; + // + // decApkOpenDirBtn + // + resources.ApplyResources(this.decApkOpenDirBtn, "decApkOpenDirBtn"); + this.decApkOpenDirBtn.Name = "decApkOpenDirBtn"; + this.decApkOpenDirBtn.UseVisualStyleBackColor = true; + // + // compileOutputOpenDirBtn + // + resources.ApplyResources(this.compileOutputOpenDirBtn, "compileOutputOpenDirBtn"); + this.compileOutputOpenDirBtn.Name = "compileOutputOpenDirBtn"; + this.compileOutputOpenDirBtn.UseVisualStyleBackColor = true; + // + // button_OpenMainActivity + // + resources.ApplyResources(this.button_OpenMainActivity, "button_OpenMainActivity"); + this.button_OpenMainActivity.Name = "button_OpenMainActivity"; + this.button_OpenMainActivity.UseVisualStyleBackColor = true; + // + // openApktoolYmlBtn + // + resources.ApplyResources(this.openApktoolYmlBtn, "openApktoolYmlBtn"); + this.openApktoolYmlBtn.Name = "openApktoolYmlBtn"; + this.openApktoolYmlBtn.UseVisualStyleBackColor = true; + // + // openAndroidMainfestBtn + // + resources.ApplyResources(this.openAndroidMainfestBtn, "openAndroidMainfestBtn"); + this.openAndroidMainfestBtn.Name = "openAndroidMainfestBtn"; + this.openAndroidMainfestBtn.UseVisualStyleBackColor = true; + // + // signPanel + // + this.signPanel.AllowDrop = true; + this.signPanel.Controls.Add(this.label4); + this.signPanel.Controls.Add(this.textBox_SIGN_InputFile); + this.signPanel.Controls.Add(this.button_SIGN_BrowseInputFile); + this.signPanel.Controls.Add(this.button_SIGN_Sign); + resources.ApplyResources(this.signPanel, "signPanel"); + this.signPanel.Name = "signPanel"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // textBox_SIGN_InputFile + // + this.textBox_SIGN_InputFile.AllowDrop = true; + resources.ApplyResources(this.textBox_SIGN_InputFile, "textBox_SIGN_InputFile"); + this.textBox_SIGN_InputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_InputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_SIGN_InputFile.Name = "textBox_SIGN_InputFile"; + this.textBox_SIGN_InputFile.Text = global::APKToolGUI.Properties.Settings.Default.Sign_InputFile; + // + // button_SIGN_BrowseInputFile + // + resources.ApplyResources(this.button_SIGN_BrowseInputFile, "button_SIGN_BrowseInputFile"); + this.button_SIGN_BrowseInputFile.Name = "button_SIGN_BrowseInputFile"; + this.button_SIGN_BrowseInputFile.UseVisualStyleBackColor = true; + // + // button_SIGN_Sign + // + this.button_SIGN_Sign.AllowDrop = true; + resources.ApplyResources(this.button_SIGN_Sign, "button_SIGN_Sign"); + this.button_SIGN_Sign.Name = "button_SIGN_Sign"; + this.button_SIGN_Sign.UseVisualStyleBackColor = true; + // + // zipalignPanel + // + this.zipalignPanel.AllowDrop = true; + this.zipalignPanel.Controls.Add(this.label3); + this.zipalignPanel.Controls.Add(this.button_ZIPALIGN_Align); + this.zipalignPanel.Controls.Add(this.button_ZIPALIGN_BrowseInputFile); + this.zipalignPanel.Controls.Add(this.textBox_ZIPALIGN_InputFile); + resources.ApplyResources(this.zipalignPanel, "zipalignPanel"); + this.zipalignPanel.Name = "zipalignPanel"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // button_ZIPALIGN_Align + // + this.button_ZIPALIGN_Align.AllowDrop = true; + resources.ApplyResources(this.button_ZIPALIGN_Align, "button_ZIPALIGN_Align"); + this.button_ZIPALIGN_Align.Name = "button_ZIPALIGN_Align"; + this.button_ZIPALIGN_Align.UseVisualStyleBackColor = true; + // + // button_ZIPALIGN_BrowseInputFile + // + resources.ApplyResources(this.button_ZIPALIGN_BrowseInputFile, "button_ZIPALIGN_BrowseInputFile"); + this.button_ZIPALIGN_BrowseInputFile.Name = "button_ZIPALIGN_BrowseInputFile"; + this.button_ZIPALIGN_BrowseInputFile.UseVisualStyleBackColor = true; + // + // textBox_ZIPALIGN_InputFile + // + this.textBox_ZIPALIGN_InputFile.AllowDrop = true; + resources.ApplyResources(this.textBox_ZIPALIGN_InputFile, "textBox_ZIPALIGN_InputFile"); + this.textBox_ZIPALIGN_InputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Zipalign_InputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_ZIPALIGN_InputFile.Name = "textBox_ZIPALIGN_InputFile"; + this.textBox_ZIPALIGN_InputFile.Text = global::APKToolGUI.Properties.Settings.Default.Zipalign_InputFile; + // + // comPanel + // + this.comPanel.AllowDrop = true; + this.comPanel.Controls.Add(this.label2); + this.comPanel.Controls.Add(this.button_BUILD_BrowseInputProjectDir); + this.comPanel.Controls.Add(this.button_BUILD_Build); + this.comPanel.Controls.Add(this.textBox_BUILD_InputProjectDir); + resources.ApplyResources(this.comPanel, "comPanel"); + this.comPanel.Name = "comPanel"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // button_BUILD_BrowseInputProjectDir + // + resources.ApplyResources(this.button_BUILD_BrowseInputProjectDir, "button_BUILD_BrowseInputProjectDir"); + this.button_BUILD_BrowseInputProjectDir.Name = "button_BUILD_BrowseInputProjectDir"; + this.button_BUILD_BrowseInputProjectDir.UseVisualStyleBackColor = true; + // + // button_BUILD_Build + // + this.button_BUILD_Build.AllowDrop = true; + resources.ApplyResources(this.button_BUILD_Build, "button_BUILD_Build"); + this.button_BUILD_Build.Name = "button_BUILD_Build"; + this.button_BUILD_Build.UseVisualStyleBackColor = true; + // + // textBox_BUILD_InputProjectDir + // + this.textBox_BUILD_InputProjectDir.AllowDrop = true; + resources.ApplyResources(this.textBox_BUILD_InputProjectDir, "textBox_BUILD_InputProjectDir"); + this.textBox_BUILD_InputProjectDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Build_InputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_InputProjectDir.Name = "textBox_BUILD_InputProjectDir"; + this.textBox_BUILD_InputProjectDir.Text = global::APKToolGUI.Properties.Settings.Default.Build_InputDir; + // + // decPanel + // + this.decPanel.AllowDrop = true; + this.decPanel.BackColor = System.Drawing.Color.White; + this.decPanel.Controls.Add(this.label1); + this.decPanel.Controls.Add(this.textBox_DECODE_InputAppPath); + this.decPanel.Controls.Add(this.button_DECODE_Decode); + this.decPanel.Controls.Add(this.button_DECODE_BrowseInputAppPath); + resources.ApplyResources(this.decPanel, "decPanel"); + this.decPanel.Name = "decPanel"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // textBox_DECODE_InputAppPath + // + this.textBox_DECODE_InputAppPath.AllowDrop = true; + resources.ApplyResources(this.textBox_DECODE_InputAppPath, "textBox_DECODE_InputAppPath"); + this.textBox_DECODE_InputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Decode_InputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_DECODE_InputAppPath.Name = "textBox_DECODE_InputAppPath"; + this.textBox_DECODE_InputAppPath.Text = global::APKToolGUI.Properties.Settings.Default.Decode_InputAppPath; + // + // button_DECODE_Decode + // + this.button_DECODE_Decode.AllowDrop = true; + resources.ApplyResources(this.button_DECODE_Decode, "button_DECODE_Decode"); + this.button_DECODE_Decode.Name = "button_DECODE_Decode"; + this.button_DECODE_Decode.UseVisualStyleBackColor = true; + // + // button_DECODE_BrowseInputAppPath + // + resources.ApplyResources(this.button_DECODE_BrowseInputAppPath, "button_DECODE_BrowseInputAppPath"); + this.button_DECODE_BrowseInputAppPath.Name = "button_DECODE_BrowseInputAppPath"; + this.button_DECODE_BrowseInputAppPath.UseVisualStyleBackColor = true; + // + // tabPageApkInfo + // + this.tabPageApkInfo.AllowDrop = true; + this.tabPageApkInfo.BackColor = System.Drawing.Color.White; + this.tabPageApkInfo.Controls.Add(this.tabControl1); + resources.ApplyResources(this.tabPageApkInfo, "tabPageApkInfo"); + this.tabPageApkInfo.Name = "tabPageApkInfo"; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.basicInfoTabPage); + this.tabControl1.Controls.Add(this.tabPage3); + resources.ApplyResources(this.tabControl1, "tabControl1"); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + // + // basicInfoTabPage + // + this.basicInfoTabPage.AllowDrop = true; + resources.ApplyResources(this.basicInfoTabPage, "basicInfoTabPage"); + this.basicInfoTabPage.Controls.Add(this.sigTxtBox); + this.basicInfoTabPage.Controls.Add(this.label5); + this.basicInfoTabPage.Controls.Add(this.launchActivityTxtBox); + this.basicInfoTabPage.Controls.Add(this.label31); + this.basicInfoTabPage.Controls.Add(this.archSdkTxtBox); + this.basicInfoTabPage.Controls.Add(this.label30); + this.basicInfoTabPage.Controls.Add(this.apkMirrorLinkBtn); + this.basicInfoTabPage.Controls.Add(this.apkSupportLinkBtn); + this.basicInfoTabPage.Controls.Add(this.apkGkLinkBtn); + this.basicInfoTabPage.Controls.Add(this.label17); + this.basicInfoTabPage.Controls.Add(this.localsTxtBox); + this.basicInfoTabPage.Controls.Add(this.selApkFileInfoBtn); + this.basicInfoTabPage.Controls.Add(this.label18); + this.basicInfoTabPage.Controls.Add(this.appTxtBox); + this.basicInfoTabPage.Controls.Add(this.permTxtBox); + this.basicInfoTabPage.Controls.Add(this.apkComboLinkBtn); + this.basicInfoTabPage.Controls.Add(this.label15); + this.basicInfoTabPage.Controls.Add(this.fileTxtBox); + this.basicInfoTabPage.Controls.Add(this.label14); + this.basicInfoTabPage.Controls.Add(this.densityTxtBox); + this.basicInfoTabPage.Controls.Add(this.packNameTxtBox); + this.basicInfoTabPage.Controls.Add(this.apkPureLinkBtn); + this.basicInfoTabPage.Controls.Add(this.verTxtBox); + this.basicInfoTabPage.Controls.Add(this.psLinkBtn); + this.basicInfoTabPage.Controls.Add(this.minSdkTxtBox); + this.basicInfoTabPage.Controls.Add(this.label19); + this.basicInfoTabPage.Controls.Add(this.targetSdkTxtBox); + this.basicInfoTabPage.Controls.Add(this.screenTxtBox); + this.basicInfoTabPage.Controls.Add(this.label7); + this.basicInfoTabPage.Controls.Add(this.label9); + this.basicInfoTabPage.Controls.Add(this.buildTxtBox); + this.basicInfoTabPage.Controls.Add(this.label8); + this.basicInfoTabPage.Controls.Add(this.apkIconPicBox); + this.basicInfoTabPage.Controls.Add(this.label11); + this.basicInfoTabPage.Controls.Add(this.label10); + this.basicInfoTabPage.Controls.Add(this.label13); + this.basicInfoTabPage.Controls.Add(this.label12); + this.basicInfoTabPage.Name = "basicInfoTabPage"; + this.basicInfoTabPage.UseVisualStyleBackColor = true; + // + // sigTxtBox + // + resources.ApplyResources(this.sigTxtBox, "sigTxtBox"); + this.sigTxtBox.Name = "sigTxtBox"; + this.sigTxtBox.ReadOnly = true; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // launchActivityTxtBox + // + resources.ApplyResources(this.launchActivityTxtBox, "launchActivityTxtBox"); + this.launchActivityTxtBox.Name = "launchActivityTxtBox"; + this.launchActivityTxtBox.ReadOnly = true; + // + // label31 + // + resources.ApplyResources(this.label31, "label31"); + this.label31.Name = "label31"; + // + // archSdkTxtBox + // + resources.ApplyResources(this.archSdkTxtBox, "archSdkTxtBox"); + this.archSdkTxtBox.Name = "archSdkTxtBox"; + this.archSdkTxtBox.ReadOnly = true; + // + // label30 + // + resources.ApplyResources(this.label30, "label30"); + this.label30.Name = "label30"; + // + // apkMirrorLinkBtn + // + resources.ApplyResources(this.apkMirrorLinkBtn, "apkMirrorLinkBtn"); + this.apkMirrorLinkBtn.Name = "apkMirrorLinkBtn"; + this.apkMirrorLinkBtn.UseVisualStyleBackColor = true; + // + // apkSupportLinkBtn + // + resources.ApplyResources(this.apkSupportLinkBtn, "apkSupportLinkBtn"); + this.apkSupportLinkBtn.Name = "apkSupportLinkBtn"; + this.apkSupportLinkBtn.UseVisualStyleBackColor = true; + // + // apkGkLinkBtn + // + resources.ApplyResources(this.apkGkLinkBtn, "apkGkLinkBtn"); + this.apkGkLinkBtn.Name = "apkGkLinkBtn"; + this.apkGkLinkBtn.UseVisualStyleBackColor = true; + // + // label17 + // + resources.ApplyResources(this.label17, "label17"); + this.label17.Name = "label17"; + // + // localsTxtBox + // + resources.ApplyResources(this.localsTxtBox, "localsTxtBox"); + this.localsTxtBox.Name = "localsTxtBox"; + this.localsTxtBox.ReadOnly = true; + // + // selApkFileInfoBtn + // + resources.ApplyResources(this.selApkFileInfoBtn, "selApkFileInfoBtn"); + this.selApkFileInfoBtn.Name = "selApkFileInfoBtn"; + this.selApkFileInfoBtn.UseVisualStyleBackColor = true; + // + // label18 + // + resources.ApplyResources(this.label18, "label18"); + this.label18.Name = "label18"; + // + // appTxtBox + // + resources.ApplyResources(this.appTxtBox, "appTxtBox"); + this.appTxtBox.Name = "appTxtBox"; + this.appTxtBox.ReadOnly = true; + // + // permTxtBox + // + resources.ApplyResources(this.permTxtBox, "permTxtBox"); + this.permTxtBox.Name = "permTxtBox"; + this.permTxtBox.ReadOnly = true; + // + // apkComboLinkBtn + // + resources.ApplyResources(this.apkComboLinkBtn, "apkComboLinkBtn"); + this.apkComboLinkBtn.Name = "apkComboLinkBtn"; + this.apkComboLinkBtn.UseVisualStyleBackColor = true; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // fileTxtBox + // + resources.ApplyResources(this.fileTxtBox, "fileTxtBox"); + this.fileTxtBox.Name = "fileTxtBox"; + this.fileTxtBox.ReadOnly = true; + // + // label14 + // + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; + // + // densityTxtBox + // + resources.ApplyResources(this.densityTxtBox, "densityTxtBox"); + this.densityTxtBox.Name = "densityTxtBox"; + this.densityTxtBox.ReadOnly = true; + // + // packNameTxtBox + // + resources.ApplyResources(this.packNameTxtBox, "packNameTxtBox"); + this.packNameTxtBox.Name = "packNameTxtBox"; + this.packNameTxtBox.ReadOnly = true; + // + // apkPureLinkBtn + // + resources.ApplyResources(this.apkPureLinkBtn, "apkPureLinkBtn"); + this.apkPureLinkBtn.Name = "apkPureLinkBtn"; + this.apkPureLinkBtn.UseVisualStyleBackColor = true; + // + // verTxtBox + // + resources.ApplyResources(this.verTxtBox, "verTxtBox"); + this.verTxtBox.Name = "verTxtBox"; + this.verTxtBox.ReadOnly = true; + // + // psLinkBtn + // + resources.ApplyResources(this.psLinkBtn, "psLinkBtn"); + this.psLinkBtn.Name = "psLinkBtn"; + this.psLinkBtn.UseVisualStyleBackColor = true; + // + // minSdkTxtBox + // + resources.ApplyResources(this.minSdkTxtBox, "minSdkTxtBox"); + this.minSdkTxtBox.Name = "minSdkTxtBox"; + this.minSdkTxtBox.ReadOnly = true; + // + // label19 + // + resources.ApplyResources(this.label19, "label19"); + this.label19.Name = "label19"; + // + // targetSdkTxtBox + // + resources.ApplyResources(this.targetSdkTxtBox, "targetSdkTxtBox"); + this.targetSdkTxtBox.Name = "targetSdkTxtBox"; + this.targetSdkTxtBox.ReadOnly = true; + // + // screenTxtBox + // + resources.ApplyResources(this.screenTxtBox, "screenTxtBox"); + this.screenTxtBox.Name = "screenTxtBox"; + this.screenTxtBox.ReadOnly = true; + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // + // buildTxtBox + // + resources.ApplyResources(this.buildTxtBox, "buildTxtBox"); + this.buildTxtBox.Name = "buildTxtBox"; + this.buildTxtBox.ReadOnly = true; + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + // + // apkIconPicBox + // + this.apkIconPicBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + resources.ApplyResources(this.apkIconPicBox, "apkIconPicBox"); + this.apkIconPicBox.Name = "apkIconPicBox"; + this.apkIconPicBox.TabStop = false; + this.apkIconPicBox.Click += new System.EventHandler(this.apkIconPicBox_Click); + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // label10 + // + resources.ApplyResources(this.label10, "label10"); + this.label10.Name = "label10"; + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // label12 + // + resources.ApplyResources(this.label12, "label12"); + this.label12.Name = "label12"; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.fullInfoTextBox); + resources.ApplyResources(this.tabPage3, "tabPage3"); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // fullInfoTextBox + // + resources.ApplyResources(this.fullInfoTextBox, "fullInfoTextBox"); + this.fullInfoTextBox.Name = "fullInfoTextBox"; + // + // tabPageDecode + // + resources.ApplyResources(this.tabPageDecode, "tabPageDecode"); + this.tabPageDecode.BackColor = System.Drawing.SystemColors.Window; + this.tabPageDecode.Controls.Add(this.groupBox_DECODE_Options); + this.tabPageDecode.Name = "tabPageDecode"; + // + // groupBox_DECODE_Options + // + this.groupBox_DECODE_Options.Controls.Add(this.decJobsLvlUpDown); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox3); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox7); + this.groupBox_DECODE_Options.Controls.Add(this.decApiLvlUpDown); + this.groupBox_DECODE_Options.Controls.Add(this.decSetApiLvlChkBox); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_FixError); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_OnlyMainClasses); + this.groupBox_DECODE_Options.Controls.Add(this.textBox_DECODE_FrameDir); + this.groupBox_DECODE_Options.Controls.Add(this.button_DECODE_BrowseOutputDirectory); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_UseFramework); + this.groupBox_DECODE_Options.Controls.Add(this.button_DECODE_BrowseFrameDir); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_MatchOriginal); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_OutputDirectory); + this.groupBox_DECODE_Options.Controls.Add(this.textBox_DECODE_OutputDirectory); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_KeepBrokenRes); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_NoSrc); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_Force); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_NoRes); + this.groupBox_DECODE_Options.Controls.Add(this.checkBox_DECODE_NoDebugInfo); + resources.ApplyResources(this.groupBox_DECODE_Options, "groupBox_DECODE_Options"); + this.groupBox_DECODE_Options.Name = "groupBox_DECODE_Options"; + this.groupBox_DECODE_Options.TabStop = false; + // + // decJobsLvlUpDown + // + this.decJobsLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Decode_Jobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + resources.ApplyResources(this.decJobsLvlUpDown, "decJobsLvlUpDown"); + this.decJobsLvlUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.decJobsLvlUpDown.Name = "decJobsLvlUpDown"; + this.decJobsLvlUpDown.Value = global::APKToolGUI.Properties.Settings.Default.Decode_Jobs; + // + // checkBox3 + // + resources.ApplyResources(this.checkBox3, "checkBox3"); + this.checkBox3.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_SetJobs; + this.checkBox3.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_SetJobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox7 + // + resources.ApplyResources(this.checkBox7, "checkBox7"); + this.checkBox7.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_DontParseApkInfo; + this.checkBox7.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_DontParseApkInfo", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox7.Name = "checkBox7"; + this.checkBox7.UseVisualStyleBackColor = true; + // + // decApiLvlUpDown + // + this.decApiLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Decode_ApiLevel", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + resources.ApplyResources(this.decApiLvlUpDown, "decApiLvlUpDown"); + this.decApiLvlUpDown.Name = "decApiLvlUpDown"; + this.decApiLvlUpDown.Value = global::APKToolGUI.Properties.Settings.Default.Decode_ApiLevel; + // + // decSetApiLvlChkBox + // + resources.ApplyResources(this.decSetApiLvlChkBox, "decSetApiLvlChkBox"); + this.decSetApiLvlChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_SetApiLevel; + this.decSetApiLvlChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_SetApiLevel", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.decSetApiLvlChkBox.Name = "decSetApiLvlChkBox"; + this.decSetApiLvlChkBox.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_FixError + // + resources.ApplyResources(this.checkBox_DECODE_FixError, "checkBox_DECODE_FixError"); + this.checkBox_DECODE_FixError.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_FixError; + this.checkBox_DECODE_FixError.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox_DECODE_FixError.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_FixError", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_FixError.Name = "checkBox_DECODE_FixError"; + this.toolTip1.SetToolTip(this.checkBox_DECODE_FixError, resources.GetString("checkBox_DECODE_FixError.ToolTip")); + this.checkBox_DECODE_FixError.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_OnlyMainClasses + // + resources.ApplyResources(this.checkBox_DECODE_OnlyMainClasses, "checkBox_DECODE_OnlyMainClasses"); + this.checkBox_DECODE_OnlyMainClasses.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_OnlyMainClasses; + this.checkBox_DECODE_OnlyMainClasses.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox_DECODE_OnlyMainClasses.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_OnlyMainClasses", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_OnlyMainClasses.Name = "checkBox_DECODE_OnlyMainClasses"; + this.toolTip1.SetToolTip(this.checkBox_DECODE_OnlyMainClasses, resources.GetString("checkBox_DECODE_OnlyMainClasses.ToolTip")); + this.checkBox_DECODE_OnlyMainClasses.UseVisualStyleBackColor = true; + // + // textBox_DECODE_FrameDir + // + resources.ApplyResources(this.textBox_DECODE_FrameDir, "textBox_DECODE_FrameDir"); + this.textBox_DECODE_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_DECODE_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Framework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_DECODE_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseFramework; + this.textBox_DECODE_FrameDir.Name = "textBox_DECODE_FrameDir"; + this.textBox_DECODE_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.Framework_FrameDir; + // + // button_DECODE_BrowseOutputDirectory + // + resources.ApplyResources(this.button_DECODE_BrowseOutputDirectory, "button_DECODE_BrowseOutputDirectory"); + this.button_DECODE_BrowseOutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.button_DECODE_BrowseOutputDirectory.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseOutputDir; + this.button_DECODE_BrowseOutputDirectory.Name = "button_DECODE_BrowseOutputDirectory"; + this.button_DECODE_BrowseOutputDirectory.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_UseFramework + // + resources.ApplyResources(this.checkBox_DECODE_UseFramework, "checkBox_DECODE_UseFramework"); + this.checkBox_DECODE_UseFramework.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_UseFramework; + this.checkBox_DECODE_UseFramework.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_UseFramework.Name = "checkBox_DECODE_UseFramework"; + this.checkBox_DECODE_UseFramework.UseVisualStyleBackColor = true; + // + // button_DECODE_BrowseFrameDir + // + resources.ApplyResources(this.button_DECODE_BrowseFrameDir, "button_DECODE_BrowseFrameDir"); + this.button_DECODE_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.button_DECODE_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseFramework; + this.button_DECODE_BrowseFrameDir.Name = "button_DECODE_BrowseFrameDir"; + this.button_DECODE_BrowseFrameDir.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_MatchOriginal + // + resources.ApplyResources(this.checkBox_DECODE_MatchOriginal, "checkBox_DECODE_MatchOriginal"); + this.checkBox_DECODE_MatchOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_MatchOriginal; + this.checkBox_DECODE_MatchOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_MatchOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_MatchOriginal.Name = "checkBox_DECODE_MatchOriginal"; + this.checkBox_DECODE_MatchOriginal.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_OutputDirectory + // + resources.ApplyResources(this.checkBox_DECODE_OutputDirectory, "checkBox_DECODE_OutputDirectory"); + this.checkBox_DECODE_OutputDirectory.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_UseOutputDir; + this.checkBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_OutputDirectory.Name = "checkBox_DECODE_OutputDirectory"; + this.checkBox_DECODE_OutputDirectory.UseVisualStyleBackColor = true; + // + // textBox_DECODE_OutputDirectory + // + resources.ApplyResources(this.textBox_DECODE_OutputDirectory, "textBox_DECODE_OutputDirectory"); + this.textBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Decode_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_DECODE_OutputDirectory.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Decode_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_DECODE_OutputDirectory.Enabled = global::APKToolGUI.Properties.Settings.Default.Decode_UseOutputDir; + this.textBox_DECODE_OutputDirectory.Name = "textBox_DECODE_OutputDirectory"; + this.textBox_DECODE_OutputDirectory.Text = global::APKToolGUI.Properties.Settings.Default.Decode_OutputDir; + // + // checkBox_DECODE_KeepBrokenRes + // + resources.ApplyResources(this.checkBox_DECODE_KeepBrokenRes, "checkBox_DECODE_KeepBrokenRes"); + this.checkBox_DECODE_KeepBrokenRes.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_KeepBrokenRes; + this.checkBox_DECODE_KeepBrokenRes.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_KeepBrokenRes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_KeepBrokenRes.Name = "checkBox_DECODE_KeepBrokenRes"; + this.checkBox_DECODE_KeepBrokenRes.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_NoSrc + // + resources.ApplyResources(this.checkBox_DECODE_NoSrc, "checkBox_DECODE_NoSrc"); + this.checkBox_DECODE_NoSrc.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_NoSrc; + this.checkBox_DECODE_NoSrc.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_NoSrc", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_NoSrc.Name = "checkBox_DECODE_NoSrc"; + this.checkBox_DECODE_NoSrc.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_Force + // + resources.ApplyResources(this.checkBox_DECODE_Force, "checkBox_DECODE_Force"); + this.checkBox_DECODE_Force.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_Force; + this.checkBox_DECODE_Force.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox_DECODE_Force.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_Force", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_Force.Name = "checkBox_DECODE_Force"; + this.checkBox_DECODE_Force.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_NoRes + // + resources.ApplyResources(this.checkBox_DECODE_NoRes, "checkBox_DECODE_NoRes"); + this.checkBox_DECODE_NoRes.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_NoRes; + this.checkBox_DECODE_NoRes.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_NoRes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_NoRes.Name = "checkBox_DECODE_NoRes"; + this.checkBox_DECODE_NoRes.UseVisualStyleBackColor = true; + // + // checkBox_DECODE_NoDebugInfo + // + resources.ApplyResources(this.checkBox_DECODE_NoDebugInfo, "checkBox_DECODE_NoDebugInfo"); + this.checkBox_DECODE_NoDebugInfo.Checked = global::APKToolGUI.Properties.Settings.Default.Decode_NoDebugInfo; + this.checkBox_DECODE_NoDebugInfo.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Decode_NoDebugInfo", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_DECODE_NoDebugInfo.Name = "checkBox_DECODE_NoDebugInfo"; + this.checkBox_DECODE_NoDebugInfo.UseVisualStyleBackColor = true; + // + // tabPageBuild + // + resources.ApplyResources(this.tabPageBuild, "tabPageBuild"); + this.tabPageBuild.BackColor = System.Drawing.Color.White; + this.tabPageBuild.Controls.Add(this.groupBox_BUILD_Options); + this.tabPageBuild.Name = "tabPageBuild"; + // + // groupBox_BUILD_Options + // + this.groupBox_BUILD_Options.Controls.Add(this.comJobsLvlUpDown); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox4); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_NetSecConf); + this.groupBox_BUILD_Options.Controls.Add(this.useAapt2ChkBox); + this.groupBox_BUILD_Options.Controls.Add(this.buildApiLvlUpDown); + this.groupBox_BUILD_Options.Controls.Add(this.buildSetApiLvlChkBox); + this.groupBox_BUILD_Options.Controls.Add(this.createUnsignApkChkBox); + this.groupBox_BUILD_Options.Controls.Add(this.signAfterBuildChkBox); + this.groupBox_BUILD_Options.Controls.Add(this.zipalignAfterBuildChkBox); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_NoCrunch); + this.groupBox_BUILD_Options.Controls.Add(this.button_BUILD_BrowseOutputAppPath); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_ForceAll); + this.groupBox_BUILD_Options.Controls.Add(this.button_BUILD_BrowseFrameDir); + this.groupBox_BUILD_Options.Controls.Add(this.button_BUILD_BrowseAaptPath); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_OutputAppPath); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_CopyOriginal); + this.groupBox_BUILD_Options.Controls.Add(this.textBox_BUILD_OutputAppPath); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_UseAapt); + this.groupBox_BUILD_Options.Controls.Add(this.textBox_BUILD_AaptPath); + this.groupBox_BUILD_Options.Controls.Add(this.textBox_BUILD_FrameDir); + this.groupBox_BUILD_Options.Controls.Add(this.checkBox_BUILD_UseFramework); + resources.ApplyResources(this.groupBox_BUILD_Options, "groupBox_BUILD_Options"); + this.groupBox_BUILD_Options.Name = "groupBox_BUILD_Options"; + this.groupBox_BUILD_Options.TabStop = false; + // + // comJobsLvlUpDown + // + this.comJobsLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Build_Jobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + resources.ApplyResources(this.comJobsLvlUpDown, "comJobsLvlUpDown"); + this.comJobsLvlUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.comJobsLvlUpDown.Name = "comJobsLvlUpDown"; + this.comJobsLvlUpDown.Value = global::APKToolGUI.Properties.Settings.Default.Build_Jobs; + // + // checkBox4 + // + resources.ApplyResources(this.checkBox4, "checkBox4"); + this.checkBox4.Checked = global::APKToolGUI.Properties.Settings.Default.Build_SetJobs; + this.checkBox4.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_SetJobs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // checkBox_BUILD_NetSecConf + // + resources.ApplyResources(this.checkBox_BUILD_NetSecConf, "checkBox_BUILD_NetSecConf"); + this.checkBox_BUILD_NetSecConf.Checked = global::APKToolGUI.Properties.Settings.Default.Build_NetSecConf; + this.checkBox_BUILD_NetSecConf.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_NetSecConf", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_NetSecConf.Name = "checkBox_BUILD_NetSecConf"; + this.checkBox_BUILD_NetSecConf.UseVisualStyleBackColor = true; + // + // useAapt2ChkBox + // + resources.ApplyResources(this.useAapt2ChkBox, "useAapt2ChkBox"); + this.useAapt2ChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Build_UseAapt2; + this.useAapt2ChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.useAapt2ChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_UseAapt2", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.useAapt2ChkBox.Name = "useAapt2ChkBox"; + this.useAapt2ChkBox.UseVisualStyleBackColor = true; + // + // buildApiLvlUpDown + // + this.buildApiLvlUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Build_ApiLevel", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + resources.ApplyResources(this.buildApiLvlUpDown, "buildApiLvlUpDown"); + this.buildApiLvlUpDown.Name = "buildApiLvlUpDown"; + this.buildApiLvlUpDown.Value = global::APKToolGUI.Properties.Settings.Default.Build_ApiLevel; + // + // buildSetApiLvlChkBox + // + resources.ApplyResources(this.buildSetApiLvlChkBox, "buildSetApiLvlChkBox"); + this.buildSetApiLvlChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Build_SetApiLevel; + this.buildSetApiLvlChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_SetApiLevel", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.buildSetApiLvlChkBox.Name = "buildSetApiLvlChkBox"; + this.buildSetApiLvlChkBox.UseVisualStyleBackColor = true; + // + // createUnsignApkChkBox + // + resources.ApplyResources(this.createUnsignApkChkBox, "createUnsignApkChkBox"); + this.createUnsignApkChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Build_CreateUnsignedApk; + this.createUnsignApkChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_CreateUnsignedApk", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.createUnsignApkChkBox.Name = "createUnsignApkChkBox"; + this.toolTip1.SetToolTip(this.createUnsignApkChkBox, resources.GetString("createUnsignApkChkBox.ToolTip")); + this.createUnsignApkChkBox.UseVisualStyleBackColor = true; + // + // signAfterBuildChkBox + // + resources.ApplyResources(this.signAfterBuildChkBox, "signAfterBuildChkBox"); + this.signAfterBuildChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Build_SignAfterBuild; + this.signAfterBuildChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.signAfterBuildChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_SignAfterBuild", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.signAfterBuildChkBox.Name = "signAfterBuildChkBox"; + this.signAfterBuildChkBox.UseVisualStyleBackColor = true; + // + // zipalignAfterBuildChkBox + // + resources.ApplyResources(this.zipalignAfterBuildChkBox, "zipalignAfterBuildChkBox"); + this.zipalignAfterBuildChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Build_ZipalignAfterBuild; + this.zipalignAfterBuildChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.zipalignAfterBuildChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_ZipalignAfterBuild", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.zipalignAfterBuildChkBox.Name = "zipalignAfterBuildChkBox"; + this.zipalignAfterBuildChkBox.UseVisualStyleBackColor = true; + // + // checkBox_BUILD_NoCrunch + // + resources.ApplyResources(this.checkBox_BUILD_NoCrunch, "checkBox_BUILD_NoCrunch"); + this.checkBox_BUILD_NoCrunch.Checked = global::APKToolGUI.Properties.Settings.Default.Build_NoCrunch; + this.checkBox_BUILD_NoCrunch.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_NoCrunch", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_NoCrunch.Name = "checkBox_BUILD_NoCrunch"; + this.checkBox_BUILD_NoCrunch.UseVisualStyleBackColor = true; + // + // button_BUILD_BrowseOutputAppPath + // + resources.ApplyResources(this.button_BUILD_BrowseOutputAppPath, "button_BUILD_BrowseOutputAppPath"); + this.button_BUILD_BrowseOutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.button_BUILD_BrowseOutputAppPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseOutputAppPath; + this.button_BUILD_BrowseOutputAppPath.Name = "button_BUILD_BrowseOutputAppPath"; + this.button_BUILD_BrowseOutputAppPath.UseVisualStyleBackColor = true; + // + // checkBox_BUILD_ForceAll + // + resources.ApplyResources(this.checkBox_BUILD_ForceAll, "checkBox_BUILD_ForceAll"); + this.checkBox_BUILD_ForceAll.Checked = global::APKToolGUI.Properties.Settings.Default.Build_ForceAll; + this.checkBox_BUILD_ForceAll.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox_BUILD_ForceAll.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_ForceAll", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_ForceAll.Name = "checkBox_BUILD_ForceAll"; + this.checkBox_BUILD_ForceAll.UseVisualStyleBackColor = true; + // + // button_BUILD_BrowseFrameDir + // + resources.ApplyResources(this.button_BUILD_BrowseFrameDir, "button_BUILD_BrowseFrameDir"); + this.button_BUILD_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.button_BUILD_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseFramework; + this.button_BUILD_BrowseFrameDir.Name = "button_BUILD_BrowseFrameDir"; + this.button_BUILD_BrowseFrameDir.UseVisualStyleBackColor = true; + // + // button_BUILD_BrowseAaptPath + // + resources.ApplyResources(this.button_BUILD_BrowseAaptPath, "button_BUILD_BrowseAaptPath"); + this.button_BUILD_BrowseAaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.button_BUILD_BrowseAaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseAapt; + this.button_BUILD_BrowseAaptPath.Name = "button_BUILD_BrowseAaptPath"; + this.button_BUILD_BrowseAaptPath.UseVisualStyleBackColor = true; + // + // checkBox_BUILD_OutputAppPath + // + resources.ApplyResources(this.checkBox_BUILD_OutputAppPath, "checkBox_BUILD_OutputAppPath"); + this.checkBox_BUILD_OutputAppPath.Checked = global::APKToolGUI.Properties.Settings.Default.Build_UseOutputAppPath; + this.checkBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_OutputAppPath.Name = "checkBox_BUILD_OutputAppPath"; + this.toolTip1.SetToolTip(this.checkBox_BUILD_OutputAppPath, resources.GetString("checkBox_BUILD_OutputAppPath.ToolTip")); + this.checkBox_BUILD_OutputAppPath.UseVisualStyleBackColor = true; + // + // checkBox_BUILD_CopyOriginal + // + resources.ApplyResources(this.checkBox_BUILD_CopyOriginal, "checkBox_BUILD_CopyOriginal"); + this.checkBox_BUILD_CopyOriginal.Checked = global::APKToolGUI.Properties.Settings.Default.Build_CopyOriginal; + this.checkBox_BUILD_CopyOriginal.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_CopyOriginal", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_CopyOriginal.Name = "checkBox_BUILD_CopyOriginal"; + this.checkBox_BUILD_CopyOriginal.UseVisualStyleBackColor = true; + // + // textBox_BUILD_OutputAppPath + // + resources.ApplyResources(this.textBox_BUILD_OutputAppPath, "textBox_BUILD_OutputAppPath"); + this.textBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseOutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_OutputAppPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Build_OutputAppPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_OutputAppPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseOutputAppPath; + this.textBox_BUILD_OutputAppPath.Name = "textBox_BUILD_OutputAppPath"; + this.textBox_BUILD_OutputAppPath.Text = global::APKToolGUI.Properties.Settings.Default.Build_OutputAppPath; + // + // checkBox_BUILD_UseAapt + // + resources.ApplyResources(this.checkBox_BUILD_UseAapt, "checkBox_BUILD_UseAapt"); + this.checkBox_BUILD_UseAapt.Checked = global::APKToolGUI.Properties.Settings.Default.Build_UseAapt; + this.checkBox_BUILD_UseAapt.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_UseAapt.Name = "checkBox_BUILD_UseAapt"; + this.checkBox_BUILD_UseAapt.UseVisualStyleBackColor = true; + // + // textBox_BUILD_AaptPath + // + resources.ApplyResources(this.textBox_BUILD_AaptPath, "textBox_BUILD_AaptPath"); + this.textBox_BUILD_AaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseAapt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_AaptPath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Build_AaptPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_AaptPath.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseAapt; + this.textBox_BUILD_AaptPath.Name = "textBox_BUILD_AaptPath"; + this.textBox_BUILD_AaptPath.Text = global::APKToolGUI.Properties.Settings.Default.Build_AaptPath; + // + // textBox_BUILD_FrameDir + // + resources.ApplyResources(this.textBox_BUILD_FrameDir, "textBox_BUILD_FrameDir"); + this.textBox_BUILD_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Framework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_BUILD_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Build_UseFramework; + this.textBox_BUILD_FrameDir.Name = "textBox_BUILD_FrameDir"; + this.textBox_BUILD_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.Framework_FrameDir; + // + // checkBox_BUILD_UseFramework + // + resources.ApplyResources(this.checkBox_BUILD_UseFramework, "checkBox_BUILD_UseFramework"); + this.checkBox_BUILD_UseFramework.Checked = global::APKToolGUI.Properties.Settings.Default.Build_UseFramework; + this.checkBox_BUILD_UseFramework.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Build_UseFramework", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_BUILD_UseFramework.Name = "checkBox_BUILD_UseFramework"; + this.checkBox_BUILD_UseFramework.UseVisualStyleBackColor = true; + // + // tabPageSign + // + resources.ApplyResources(this.tabPageSign, "tabPageSign"); + this.tabPageSign.BackColor = System.Drawing.Color.White; + this.tabPageSign.Controls.Add(this.groupBox_SIGN_Options); + this.tabPageSign.Name = "tabPageSign"; + // + // groupBox_SIGN_Options + // + this.groupBox_SIGN_Options.Controls.Add(this.checkBox2); + this.groupBox_SIGN_Options.Controls.Add(this.checkBox1); + this.groupBox_SIGN_Options.Controls.Add(this.autoDelIdsigChkBox); + this.groupBox_SIGN_Options.Controls.Add(this.schemev4ComboBox); + this.groupBox_SIGN_Options.Controls.Add(this.label27); + this.groupBox_SIGN_Options.Controls.Add(this.schemev3ComboBox); + this.groupBox_SIGN_Options.Controls.Add(this.label26); + this.groupBox_SIGN_Options.Controls.Add(this.schemev2ComboBox); + this.groupBox_SIGN_Options.Controls.Add(this.label25); + this.groupBox_SIGN_Options.Controls.Add(this.schemev1ComboBox); + this.groupBox_SIGN_Options.Controls.Add(this.label24); + this.groupBox_SIGN_Options.Controls.Add(this.textBox3); + this.groupBox_SIGN_Options.Controls.Add(this.selectKeyStoreFileBtn); + this.groupBox_SIGN_Options.Controls.Add(this.aliasTxtBox); + this.groupBox_SIGN_Options.Controls.Add(this.useAliasChkBox); + this.groupBox_SIGN_Options.Controls.Add(this.label22); + this.groupBox_SIGN_Options.Controls.Add(this.keyStoreFileTxtBox); + this.groupBox_SIGN_Options.Controls.Add(this.label21); + this.groupBox_SIGN_Options.Controls.Add(this.label20); + this.groupBox_SIGN_Options.Controls.Add(this.useKeyStoreChkBox); + this.groupBox_SIGN_Options.Controls.Add(this.useSigningOutputDir); + this.groupBox_SIGN_Options.Controls.Add(this.label_SIGN_PrivateKey); + this.groupBox_SIGN_Options.Controls.Add(this.label_SIGN_PublicKey); + this.groupBox_SIGN_Options.Controls.Add(this.button_SIGN_BrowseOutputFile); + this.groupBox_SIGN_Options.Controls.Add(this.textBox_SIGN_OutputFile); + this.groupBox_SIGN_Options.Controls.Add(this.button_SIGN_BrowsePublicKey); + this.groupBox_SIGN_Options.Controls.Add(this.button_SIGN_BrowsePrivateKey); + this.groupBox_SIGN_Options.Controls.Add(this.textBox_SIGN_PublicKey); + this.groupBox_SIGN_Options.Controls.Add(this.textBox_SIGN_PrivateKey); + resources.ApplyResources(this.groupBox_SIGN_Options, "groupBox_SIGN_Options"); + this.groupBox_SIGN_Options.Name = "groupBox_SIGN_Options"; + this.groupBox_SIGN_Options.TabStop = false; + // + // checkBox2 + // + resources.ApplyResources(this.checkBox2, "checkBox2"); + this.checkBox2.Checked = global::APKToolGUI.Properties.Settings.Default.Sign_InstallApkAfterSign; + this.checkBox2.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Sign_InstallApkAfterSign", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // checkBox1 + // + resources.ApplyResources(this.checkBox1, "checkBox1"); + this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.Sign_OverwriteInputFile; + this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Sign_OverwriteInputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // autoDelIdsigChkBox + // + resources.ApplyResources(this.autoDelIdsigChkBox, "autoDelIdsigChkBox"); + this.autoDelIdsigChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.AutoDeleteIdsigFile; + this.autoDelIdsigChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.autoDelIdsigChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "AutoDeleteIdsigFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.autoDelIdsigChkBox.Name = "autoDelIdsigChkBox"; + this.autoDelIdsigChkBox.UseVisualStyleBackColor = true; + // + // schemev4ComboBox + // + this.schemev4ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.schemev4ComboBox.FormattingEnabled = true; + this.schemev4ComboBox.Items.AddRange(new object[] { + resources.GetString("schemev4ComboBox.Items"), + resources.GetString("schemev4ComboBox.Items1"), + resources.GetString("schemev4ComboBox.Items2")}); + resources.ApplyResources(this.schemev4ComboBox, "schemev4ComboBox"); + this.schemev4ComboBox.Name = "schemev4ComboBox"; + // + // label27 + // + resources.ApplyResources(this.label27, "label27"); + this.label27.Name = "label27"; + // + // schemev3ComboBox + // + this.schemev3ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.schemev3ComboBox.FormattingEnabled = true; + this.schemev3ComboBox.Items.AddRange(new object[] { + resources.GetString("schemev3ComboBox.Items"), + resources.GetString("schemev3ComboBox.Items1"), + resources.GetString("schemev3ComboBox.Items2")}); + resources.ApplyResources(this.schemev3ComboBox, "schemev3ComboBox"); + this.schemev3ComboBox.Name = "schemev3ComboBox"; + // + // label26 + // + resources.ApplyResources(this.label26, "label26"); + this.label26.Name = "label26"; + // + // schemev2ComboBox + // + this.schemev2ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.schemev2ComboBox.FormattingEnabled = true; + this.schemev2ComboBox.Items.AddRange(new object[] { + resources.GetString("schemev2ComboBox.Items"), + resources.GetString("schemev2ComboBox.Items1"), + resources.GetString("schemev2ComboBox.Items2")}); + resources.ApplyResources(this.schemev2ComboBox, "schemev2ComboBox"); + this.schemev2ComboBox.Name = "schemev2ComboBox"; + // + // label25 + // + resources.ApplyResources(this.label25, "label25"); + this.label25.Name = "label25"; + // + // schemev1ComboBox + // + this.schemev1ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.schemev1ComboBox.FormattingEnabled = true; + this.schemev1ComboBox.Items.AddRange(new object[] { + resources.GetString("schemev1ComboBox.Items"), + resources.GetString("schemev1ComboBox.Items1"), + resources.GetString("schemev1ComboBox.Items2")}); + resources.ApplyResources(this.schemev1ComboBox, "schemev1ComboBox"); + this.schemev1ComboBox.Name = "schemev1ComboBox"; + // + // label24 + // + resources.ApplyResources(this.label24, "label24"); + this.label24.Name = "label24"; + // + // textBox3 + // + resources.ApplyResources(this.textBox3, "textBox3"); + this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_KeystorePassword", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox3.Name = "textBox3"; + this.textBox3.Text = global::APKToolGUI.Properties.Settings.Default.Sign_KeystorePassword; + this.textBox3.UseSystemPasswordChar = true; + // + // selectKeyStoreFileBtn + // + resources.ApplyResources(this.selectKeyStoreFileBtn, "selectKeyStoreFileBtn"); + this.selectKeyStoreFileBtn.Name = "selectKeyStoreFileBtn"; + this.selectKeyStoreFileBtn.UseVisualStyleBackColor = true; + // + // aliasTxtBox + // + resources.ApplyResources(this.aliasTxtBox, "aliasTxtBox"); + this.aliasTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_Alias", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.aliasTxtBox.Name = "aliasTxtBox"; + this.aliasTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Sign_Alias; + // + // useAliasChkBox + // + resources.ApplyResources(this.useAliasChkBox, "useAliasChkBox"); + this.useAliasChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Sign_SetAlias; + this.useAliasChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.useAliasChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Sign_SetAlias", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.useAliasChkBox.Name = "useAliasChkBox"; + this.useAliasChkBox.UseVisualStyleBackColor = true; + // + // label22 + // + this.label22.ForeColor = System.Drawing.Color.Maroon; + resources.ApplyResources(this.label22, "label22"); + this.label22.Name = "label22"; + // + // keyStoreFileTxtBox + // + resources.ApplyResources(this.keyStoreFileTxtBox, "keyStoreFileTxtBox"); + this.keyStoreFileTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_KeystoreFilePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.keyStoreFileTxtBox.Name = "keyStoreFileTxtBox"; + this.keyStoreFileTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Sign_KeystoreFilePath; + // + // label21 + // + resources.ApplyResources(this.label21, "label21"); + this.label21.Name = "label21"; + // + // label20 + // + resources.ApplyResources(this.label20, "label20"); + this.label20.Name = "label20"; + // + // useKeyStoreChkBox + // + resources.ApplyResources(this.useKeyStoreChkBox, "useKeyStoreChkBox"); + this.useKeyStoreChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Sign_UseKeystoreFile; + this.useKeyStoreChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Sign_UseKeystoreFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.useKeyStoreChkBox.Name = "useKeyStoreChkBox"; + this.useKeyStoreChkBox.UseVisualStyleBackColor = true; + // + // useSigningOutputDir + // + resources.ApplyResources(this.useSigningOutputDir, "useSigningOutputDir"); + this.useSigningOutputDir.Checked = global::APKToolGUI.Properties.Settings.Default.Sign_UseOutputDir; + this.useSigningOutputDir.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Sign_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.useSigningOutputDir.Name = "useSigningOutputDir"; + this.useSigningOutputDir.UseVisualStyleBackColor = true; + // + // label_SIGN_PrivateKey + // + resources.ApplyResources(this.label_SIGN_PrivateKey, "label_SIGN_PrivateKey"); + this.label_SIGN_PrivateKey.Name = "label_SIGN_PrivateKey"; + // + // label_SIGN_PublicKey + // + resources.ApplyResources(this.label_SIGN_PublicKey, "label_SIGN_PublicKey"); + this.label_SIGN_PublicKey.Name = "label_SIGN_PublicKey"; + // + // button_SIGN_BrowseOutputFile + // + resources.ApplyResources(this.button_SIGN_BrowseOutputFile, "button_SIGN_BrowseOutputFile"); + this.button_SIGN_BrowseOutputFile.Name = "button_SIGN_BrowseOutputFile"; + this.button_SIGN_BrowseOutputFile.UseVisualStyleBackColor = true; + // + // textBox_SIGN_OutputFile + // + resources.ApplyResources(this.textBox_SIGN_OutputFile, "textBox_SIGN_OutputFile"); + this.textBox_SIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_SIGN_OutputFile.Name = "textBox_SIGN_OutputFile"; + this.textBox_SIGN_OutputFile.Text = global::APKToolGUI.Properties.Settings.Default.Sign_OutputDir; + // + // button_SIGN_BrowsePublicKey + // + resources.ApplyResources(this.button_SIGN_BrowsePublicKey, "button_SIGN_BrowsePublicKey"); + this.button_SIGN_BrowsePublicKey.Name = "button_SIGN_BrowsePublicKey"; + this.button_SIGN_BrowsePublicKey.UseVisualStyleBackColor = true; + // + // button_SIGN_BrowsePrivateKey + // + resources.ApplyResources(this.button_SIGN_BrowsePrivateKey, "button_SIGN_BrowsePrivateKey"); + this.button_SIGN_BrowsePrivateKey.Name = "button_SIGN_BrowsePrivateKey"; + this.button_SIGN_BrowsePrivateKey.UseVisualStyleBackColor = true; + // + // textBox_SIGN_PublicKey + // + resources.ApplyResources(this.textBox_SIGN_PublicKey, "textBox_SIGN_PublicKey"); + this.textBox_SIGN_PublicKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_PublicKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_SIGN_PublicKey.Name = "textBox_SIGN_PublicKey"; + this.textBox_SIGN_PublicKey.Text = global::APKToolGUI.Properties.Settings.Default.Sign_PublicKey; + // + // textBox_SIGN_PrivateKey + // + resources.ApplyResources(this.textBox_SIGN_PrivateKey, "textBox_SIGN_PrivateKey"); + this.textBox_SIGN_PrivateKey.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Sign_PrivateKey", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_SIGN_PrivateKey.Name = "textBox_SIGN_PrivateKey"; + this.textBox_SIGN_PrivateKey.Text = global::APKToolGUI.Properties.Settings.Default.Sign_PrivateKey; + // + // tabPageZipAlign + // + resources.ApplyResources(this.tabPageZipAlign, "tabPageZipAlign"); + this.tabPageZipAlign.BackColor = System.Drawing.Color.White; + this.tabPageZipAlign.Controls.Add(this.groupBox_ZIPALIGN_Options); + this.tabPageZipAlign.Name = "tabPageZipAlign"; + // + // groupBox_ZIPALIGN_Options + // + this.groupBox_ZIPALIGN_Options.Controls.Add(this.zipalignOutputDirChkBox); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.signAfterZipalignChkBox); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_Recompress); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.label_ZIPALIGN_AlignmentBytes); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.button_ZIPALIGN_BrowseOutputFile); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_CheckAlignment); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.textBox_ZIPALIGN_OutputFile); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_VerboseOutput); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.numericUpDown_ZIPALIGN_AlignmentBytes); + this.groupBox_ZIPALIGN_Options.Controls.Add(this.checkBox_ZIPALIGN_OverwriteOutputFile); + resources.ApplyResources(this.groupBox_ZIPALIGN_Options, "groupBox_ZIPALIGN_Options"); + this.groupBox_ZIPALIGN_Options.Name = "groupBox_ZIPALIGN_Options"; + this.groupBox_ZIPALIGN_Options.TabStop = false; + // + // zipalignOutputDirChkBox + // + resources.ApplyResources(this.zipalignOutputDirChkBox, "zipalignOutputDirChkBox"); + this.zipalignOutputDirChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Zipalign_UseOutputDir; + this.zipalignOutputDirChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Zipalign_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.zipalignOutputDirChkBox.Name = "zipalignOutputDirChkBox"; + this.zipalignOutputDirChkBox.UseVisualStyleBackColor = true; + // + // signAfterZipalignChkBox + // + resources.ApplyResources(this.signAfterZipalignChkBox, "signAfterZipalignChkBox"); + this.signAfterZipalignChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Zipalign_SignAfterZipAlign; + this.signAfterZipalignChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.signAfterZipalignChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Zipalign_SignAfterZipAlign", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.signAfterZipalignChkBox.Name = "signAfterZipalignChkBox"; + this.signAfterZipalignChkBox.UseVisualStyleBackColor = true; + // + // checkBox_ZIPALIGN_Recompress + // + resources.ApplyResources(this.checkBox_ZIPALIGN_Recompress, "checkBox_ZIPALIGN_Recompress"); + this.checkBox_ZIPALIGN_Recompress.Checked = global::APKToolGUI.Properties.Settings.Default.Zipalign_Recompress; + this.checkBox_ZIPALIGN_Recompress.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Zipalign_Recompress", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_ZIPALIGN_Recompress.Name = "checkBox_ZIPALIGN_Recompress"; + this.checkBox_ZIPALIGN_Recompress.UseVisualStyleBackColor = true; + // + // label_ZIPALIGN_AlignmentBytes + // + resources.ApplyResources(this.label_ZIPALIGN_AlignmentBytes, "label_ZIPALIGN_AlignmentBytes"); + this.label_ZIPALIGN_AlignmentBytes.Name = "label_ZIPALIGN_AlignmentBytes"; + // + // button_ZIPALIGN_BrowseOutputFile + // + resources.ApplyResources(this.button_ZIPALIGN_BrowseOutputFile, "button_ZIPALIGN_BrowseOutputFile"); + this.button_ZIPALIGN_BrowseOutputFile.Name = "button_ZIPALIGN_BrowseOutputFile"; + this.button_ZIPALIGN_BrowseOutputFile.UseVisualStyleBackColor = true; + // + // checkBox_ZIPALIGN_CheckAlignment + // + resources.ApplyResources(this.checkBox_ZIPALIGN_CheckAlignment, "checkBox_ZIPALIGN_CheckAlignment"); + this.checkBox_ZIPALIGN_CheckAlignment.Checked = global::APKToolGUI.Properties.Settings.Default.Zipalign_CheckOnly; + this.checkBox_ZIPALIGN_CheckAlignment.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Zipalign_CheckOnly", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_ZIPALIGN_CheckAlignment.Name = "checkBox_ZIPALIGN_CheckAlignment"; + this.checkBox_ZIPALIGN_CheckAlignment.UseVisualStyleBackColor = true; + // + // textBox_ZIPALIGN_OutputFile + // + resources.ApplyResources(this.textBox_ZIPALIGN_OutputFile, "textBox_ZIPALIGN_OutputFile"); + this.textBox_ZIPALIGN_OutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Zipalign_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_ZIPALIGN_OutputFile.Name = "textBox_ZIPALIGN_OutputFile"; + this.textBox_ZIPALIGN_OutputFile.Text = global::APKToolGUI.Properties.Settings.Default.Zipalign_OutputDir; + // + // checkBox_ZIPALIGN_VerboseOutput + // + resources.ApplyResources(this.checkBox_ZIPALIGN_VerboseOutput, "checkBox_ZIPALIGN_VerboseOutput"); + this.checkBox_ZIPALIGN_VerboseOutput.Checked = global::APKToolGUI.Properties.Settings.Default.Zipalign_Verbose; + this.checkBox_ZIPALIGN_VerboseOutput.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Zipalign_Verbose", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_ZIPALIGN_VerboseOutput.Name = "checkBox_ZIPALIGN_VerboseOutput"; + this.checkBox_ZIPALIGN_VerboseOutput.UseVisualStyleBackColor = true; + // + // numericUpDown_ZIPALIGN_AlignmentBytes + // + this.numericUpDown_ZIPALIGN_AlignmentBytes.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::APKToolGUI.Properties.Settings.Default, "Zipalign_AlignmentInBytes", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + resources.ApplyResources(this.numericUpDown_ZIPALIGN_AlignmentBytes, "numericUpDown_ZIPALIGN_AlignmentBytes"); + this.numericUpDown_ZIPALIGN_AlignmentBytes.Maximum = new decimal(new int[] { + 32, + 0, + 0, + 0}); + this.numericUpDown_ZIPALIGN_AlignmentBytes.Name = "numericUpDown_ZIPALIGN_AlignmentBytes"; + this.numericUpDown_ZIPALIGN_AlignmentBytes.Value = global::APKToolGUI.Properties.Settings.Default.Zipalign_AlignmentInBytes; + // + // checkBox_ZIPALIGN_OverwriteOutputFile + // + resources.ApplyResources(this.checkBox_ZIPALIGN_OverwriteOutputFile, "checkBox_ZIPALIGN_OverwriteOutputFile"); + this.checkBox_ZIPALIGN_OverwriteOutputFile.Checked = global::APKToolGUI.Properties.Settings.Default.Zipalign_OverwriteOutputFile; + this.checkBox_ZIPALIGN_OverwriteOutputFile.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Zipalign_OverwriteOutputFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_ZIPALIGN_OverwriteOutputFile.Name = "checkBox_ZIPALIGN_OverwriteOutputFile"; + this.checkBox_ZIPALIGN_OverwriteOutputFile.UseVisualStyleBackColor = true; + // + // tabPageInstallFramework + // + this.tabPageInstallFramework.BackColor = System.Drawing.Color.White; + this.tabPageInstallFramework.Controls.Add(this.groupBox1); + this.tabPageInstallFramework.Controls.Add(this.groupBox_IF_Options); + resources.ApplyResources(this.tabPageInstallFramework, "tabPageInstallFramework"); + this.tabPageInstallFramework.Name = "tabPageInstallFramework"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.openFwFolderBtn); + this.groupBox1.Controls.Add(this.clearFwBtn); + this.groupBox1.Controls.Add(this.clearFwBeforeDecodeChkBox); + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // openFwFolderBtn + // + resources.ApplyResources(this.openFwFolderBtn, "openFwFolderBtn"); + this.openFwFolderBtn.Name = "openFwFolderBtn"; + this.openFwFolderBtn.UseVisualStyleBackColor = true; + // + // clearFwBtn + // + resources.ApplyResources(this.clearFwBtn, "clearFwBtn"); + this.clearFwBtn.Name = "clearFwBtn"; + this.clearFwBtn.UseVisualStyleBackColor = true; + // + // clearFwBeforeDecodeChkBox + // + resources.ApplyResources(this.clearFwBeforeDecodeChkBox, "clearFwBeforeDecodeChkBox"); + this.clearFwBeforeDecodeChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Framework_ClearBeforeDecode; + this.clearFwBeforeDecodeChkBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.clearFwBeforeDecodeChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Framework_ClearBeforeDecode", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.clearFwBeforeDecodeChkBox.Name = "clearFwBeforeDecodeChkBox"; + this.clearFwBeforeDecodeChkBox.UseVisualStyleBackColor = true; + // + // groupBox_IF_Options + // + this.groupBox_IF_Options.Controls.Add(this.checkBox_IF_Tag); + this.groupBox_IF_Options.Controls.Add(this.checkBox_IF_FramePath); + this.groupBox_IF_Options.Controls.Add(this.textBox_IF_Tag); + this.groupBox_IF_Options.Controls.Add(this.button_IF_InstallFramework); + this.groupBox_IF_Options.Controls.Add(this.button_IF_BrowseFrameDir); + this.groupBox_IF_Options.Controls.Add(this.button_IF_BrowseInputFramePath); + this.groupBox_IF_Options.Controls.Add(this.textBox_IF_InputFramePath); + this.groupBox_IF_Options.Controls.Add(this.textBox_IF_FrameDir); + resources.ApplyResources(this.groupBox_IF_Options, "groupBox_IF_Options"); + this.groupBox_IF_Options.Name = "groupBox_IF_Options"; + this.groupBox_IF_Options.TabStop = false; + // + // checkBox_IF_Tag + // + resources.ApplyResources(this.checkBox_IF_Tag, "checkBox_IF_Tag"); + this.checkBox_IF_Tag.Checked = global::APKToolGUI.Properties.Settings.Default.InstallFramework_UseTag; + this.checkBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "InstallFramework_UseTag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_IF_Tag.Name = "checkBox_IF_Tag"; + this.checkBox_IF_Tag.UseVisualStyleBackColor = true; + // + // checkBox_IF_FramePath + // + resources.ApplyResources(this.checkBox_IF_FramePath, "checkBox_IF_FramePath"); + this.checkBox_IF_FramePath.Checked = global::APKToolGUI.Properties.Settings.Default.Framework_UseFrameDir; + this.checkBox_IF_FramePath.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Framework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox_IF_FramePath.Name = "checkBox_IF_FramePath"; + this.checkBox_IF_FramePath.UseVisualStyleBackColor = true; + // + // textBox_IF_Tag + // + resources.ApplyResources(this.textBox_IF_Tag, "textBox_IF_Tag"); + this.textBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "InstallFramework_Tag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_IF_Tag.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "InstallFramework_UseTag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_IF_Tag.Enabled = global::APKToolGUI.Properties.Settings.Default.InstallFramework_UseTag; + this.textBox_IF_Tag.Name = "textBox_IF_Tag"; + this.textBox_IF_Tag.Text = global::APKToolGUI.Properties.Settings.Default.InstallFramework_Tag; + // + // button_IF_InstallFramework + // + resources.ApplyResources(this.button_IF_InstallFramework, "button_IF_InstallFramework"); + this.button_IF_InstallFramework.Name = "button_IF_InstallFramework"; + this.button_IF_InstallFramework.UseVisualStyleBackColor = true; + // + // button_IF_BrowseFrameDir + // + resources.ApplyResources(this.button_IF_BrowseFrameDir, "button_IF_BrowseFrameDir"); + this.button_IF_BrowseFrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Framework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.button_IF_BrowseFrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Framework_UseFrameDir; + this.button_IF_BrowseFrameDir.Name = "button_IF_BrowseFrameDir"; + this.button_IF_BrowseFrameDir.UseVisualStyleBackColor = true; + // + // button_IF_BrowseInputFramePath + // + resources.ApplyResources(this.button_IF_BrowseInputFramePath, "button_IF_BrowseInputFramePath"); + this.button_IF_BrowseInputFramePath.Name = "button_IF_BrowseInputFramePath"; + this.button_IF_BrowseInputFramePath.UseVisualStyleBackColor = true; + // + // textBox_IF_InputFramePath + // + resources.ApplyResources(this.textBox_IF_InputFramePath, "textBox_IF_InputFramePath"); + this.textBox_IF_InputFramePath.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "InstallFramework_InputFramePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_IF_InputFramePath.Name = "textBox_IF_InputFramePath"; + this.textBox_IF_InputFramePath.Text = global::APKToolGUI.Properties.Settings.Default.InstallFramework_InputFramePath; + // + // textBox_IF_FrameDir + // + resources.ApplyResources(this.textBox_IF_FrameDir, "textBox_IF_FrameDir"); + this.textBox_IF_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Enabled", global::APKToolGUI.Properties.Settings.Default, "Framework_UseFrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_IF_FrameDir.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Framework_FrameDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox_IF_FrameDir.Enabled = global::APKToolGUI.Properties.Settings.Default.Framework_UseFrameDir; + this.textBox_IF_FrameDir.Name = "textBox_IF_FrameDir"; + this.textBox_IF_FrameDir.Text = global::APKToolGUI.Properties.Settings.Default.Framework_FrameDir; + // + // tabPageBaksmali + // + this.tabPageBaksmali.AllowDrop = true; + this.tabPageBaksmali.BackColor = System.Drawing.Color.White; + this.tabPageBaksmali.Controls.Add(this.smaliGroupBox); + this.tabPageBaksmali.Controls.Add(this.bakSmaliGroupBox); + resources.ApplyResources(this.tabPageBaksmali, "tabPageBaksmali"); + this.tabPageBaksmali.Name = "tabPageBaksmali"; + // + // smaliGroupBox + // + this.smaliGroupBox.Controls.Add(this.label29); + this.smaliGroupBox.Controls.Add(this.smaliUseOutputChkBox); + this.smaliGroupBox.Controls.Add(this.comSmaliBtn); + this.smaliGroupBox.Controls.Add(this.smaliBrowseOutputBtn); + this.smaliGroupBox.Controls.Add(this.smaliBrowseInputDirTxtBox); + this.smaliGroupBox.Controls.Add(this.smaliBrowseOutputTxtBox); + this.smaliGroupBox.Controls.Add(this.smaliBrowseInputDirBtn); + resources.ApplyResources(this.smaliGroupBox, "smaliGroupBox"); + this.smaliGroupBox.Name = "smaliGroupBox"; + this.smaliGroupBox.TabStop = false; + // + // label29 + // + resources.ApplyResources(this.label29, "label29"); + this.label29.Name = "label29"; + // + // smaliUseOutputChkBox + // + resources.ApplyResources(this.smaliUseOutputChkBox, "smaliUseOutputChkBox"); + this.smaliUseOutputChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Smali_UseOutputDir; + this.smaliUseOutputChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Smali_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.smaliUseOutputChkBox.Name = "smaliUseOutputChkBox"; + this.smaliUseOutputChkBox.UseVisualStyleBackColor = true; + // + // comSmaliBtn + // + resources.ApplyResources(this.comSmaliBtn, "comSmaliBtn"); + this.comSmaliBtn.Name = "comSmaliBtn"; + this.comSmaliBtn.UseVisualStyleBackColor = true; + // + // smaliBrowseOutputBtn + // + resources.ApplyResources(this.smaliBrowseOutputBtn, "smaliBrowseOutputBtn"); + this.smaliBrowseOutputBtn.Name = "smaliBrowseOutputBtn"; + this.smaliBrowseOutputBtn.UseVisualStyleBackColor = true; + // + // smaliBrowseInputDirTxtBox + // + resources.ApplyResources(this.smaliBrowseInputDirTxtBox, "smaliBrowseInputDirTxtBox"); + this.smaliBrowseInputDirTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Smali_InputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.smaliBrowseInputDirTxtBox.Name = "smaliBrowseInputDirTxtBox"; + this.smaliBrowseInputDirTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Smali_InputDir; + // + // smaliBrowseOutputTxtBox + // + resources.ApplyResources(this.smaliBrowseOutputTxtBox, "smaliBrowseOutputTxtBox"); + this.smaliBrowseOutputTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Smali_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.smaliBrowseOutputTxtBox.Name = "smaliBrowseOutputTxtBox"; + this.smaliBrowseOutputTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Smali_OutputDir; + // + // smaliBrowseInputDirBtn + // + resources.ApplyResources(this.smaliBrowseInputDirBtn, "smaliBrowseInputDirBtn"); + this.smaliBrowseInputDirBtn.Name = "smaliBrowseInputDirBtn"; + this.smaliBrowseInputDirBtn.UseVisualStyleBackColor = true; + // + // bakSmaliGroupBox + // + this.bakSmaliGroupBox.Controls.Add(this.label28); + this.bakSmaliGroupBox.Controls.Add(this.baksmaliUseOutputChkBox); + this.bakSmaliGroupBox.Controls.Add(this.baksmaliBrowseOutputBtn); + this.bakSmaliGroupBox.Controls.Add(this.baksmaliBrowseOutputTxtBox); + this.bakSmaliGroupBox.Controls.Add(this.decSmaliBtn); + this.bakSmaliGroupBox.Controls.Add(this.baksmaliBrowseInputDexBtn); + this.bakSmaliGroupBox.Controls.Add(this.baksmaliBrowseInputDexTxtBox); + resources.ApplyResources(this.bakSmaliGroupBox, "bakSmaliGroupBox"); + this.bakSmaliGroupBox.Name = "bakSmaliGroupBox"; + this.bakSmaliGroupBox.TabStop = false; + // + // label28 + // + resources.ApplyResources(this.label28, "label28"); + this.label28.Name = "label28"; + // + // baksmaliUseOutputChkBox + // + resources.ApplyResources(this.baksmaliUseOutputChkBox, "baksmaliUseOutputChkBox"); + this.baksmaliUseOutputChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Baksmali_UseOutputDir; + this.baksmaliUseOutputChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Baksmali_UseOutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.baksmaliUseOutputChkBox.Name = "baksmaliUseOutputChkBox"; + this.baksmaliUseOutputChkBox.UseVisualStyleBackColor = true; + // + // baksmaliBrowseOutputBtn + // + resources.ApplyResources(this.baksmaliBrowseOutputBtn, "baksmaliBrowseOutputBtn"); + this.baksmaliBrowseOutputBtn.Name = "baksmaliBrowseOutputBtn"; + this.baksmaliBrowseOutputBtn.UseVisualStyleBackColor = true; + // + // baksmaliBrowseOutputTxtBox + // + resources.ApplyResources(this.baksmaliBrowseOutputTxtBox, "baksmaliBrowseOutputTxtBox"); + this.baksmaliBrowseOutputTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Baksmali_OutputDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.baksmaliBrowseOutputTxtBox.Name = "baksmaliBrowseOutputTxtBox"; + this.baksmaliBrowseOutputTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Baksmali_OutputDir; + // + // decSmaliBtn + // + resources.ApplyResources(this.decSmaliBtn, "decSmaliBtn"); + this.decSmaliBtn.Name = "decSmaliBtn"; + this.decSmaliBtn.UseVisualStyleBackColor = true; + // + // baksmaliBrowseInputDexBtn + // + resources.ApplyResources(this.baksmaliBrowseInputDexBtn, "baksmaliBrowseInputDexBtn"); + this.baksmaliBrowseInputDexBtn.Name = "baksmaliBrowseInputDexBtn"; + this.baksmaliBrowseInputDexBtn.UseVisualStyleBackColor = true; + // + // baksmaliBrowseInputDexTxtBox + // + resources.ApplyResources(this.baksmaliBrowseInputDexTxtBox, "baksmaliBrowseInputDexTxtBox"); + this.baksmaliBrowseInputDexTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Baksmali_InputDexFile", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.baksmaliBrowseInputDexTxtBox.Name = "baksmaliBrowseInputDexTxtBox"; + this.baksmaliBrowseInputDexTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Baksmali_InputDexFile; + // + // tabPageAdb + // + this.tabPageAdb.AllowDrop = true; + this.tabPageAdb.Controls.Add(this.overrideAbiComboBox); + this.tabPageAdb.Controls.Add(this.selAdbDeviceLbl); + this.tabPageAdb.Controls.Add(this.label33); + this.tabPageAdb.Controls.Add(this.killAdbBtn); + this.tabPageAdb.Controls.Add(this.installApkBtn); + this.tabPageAdb.Controls.Add(this.refreshDevicesBtn); + this.tabPageAdb.Controls.Add(this.selApkAdbBtn); + this.tabPageAdb.Controls.Add(this.overrideAbiCheckBox); + this.tabPageAdb.Controls.Add(this.setVendorChkBox); + this.tabPageAdb.Controls.Add(this.apkPathAdbTxtBox); + this.tabPageAdb.Controls.Add(this.label32); + this.tabPageAdb.Controls.Add(this.devicesListBox); + resources.ApplyResources(this.tabPageAdb, "tabPageAdb"); + this.tabPageAdb.Name = "tabPageAdb"; + this.tabPageAdb.UseVisualStyleBackColor = true; + // + // overrideAbiComboBox + // + this.overrideAbiComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.overrideAbiComboBox.FormattingEnabled = true; + this.overrideAbiComboBox.Items.AddRange(new object[] { + resources.GetString("overrideAbiComboBox.Items"), + resources.GetString("overrideAbiComboBox.Items1"), + resources.GetString("overrideAbiComboBox.Items2"), + resources.GetString("overrideAbiComboBox.Items3")}); + resources.ApplyResources(this.overrideAbiComboBox, "overrideAbiComboBox"); + this.overrideAbiComboBox.Name = "overrideAbiComboBox"; + // + // selAdbDeviceLbl + // + this.selAdbDeviceLbl.ForeColor = System.Drawing.Color.ForestGreen; + resources.ApplyResources(this.selAdbDeviceLbl, "selAdbDeviceLbl"); + this.selAdbDeviceLbl.Name = "selAdbDeviceLbl"; + // + // label33 + // + resources.ApplyResources(this.label33, "label33"); + this.label33.Name = "label33"; + // + // killAdbBtn + // + resources.ApplyResources(this.killAdbBtn, "killAdbBtn"); + this.killAdbBtn.Name = "killAdbBtn"; + this.killAdbBtn.UseVisualStyleBackColor = true; + // + // installApkBtn + // + resources.ApplyResources(this.installApkBtn, "installApkBtn"); + this.installApkBtn.Name = "installApkBtn"; + this.installApkBtn.UseVisualStyleBackColor = true; + // + // refreshDevicesBtn + // + resources.ApplyResources(this.refreshDevicesBtn, "refreshDevicesBtn"); + this.refreshDevicesBtn.Name = "refreshDevicesBtn"; + this.refreshDevicesBtn.UseVisualStyleBackColor = true; + // + // selApkAdbBtn + // + resources.ApplyResources(this.selApkAdbBtn, "selApkAdbBtn"); + this.selApkAdbBtn.Name = "selApkAdbBtn"; + this.selApkAdbBtn.UseVisualStyleBackColor = true; + // + // overrideAbiCheckBox + // + resources.ApplyResources(this.overrideAbiCheckBox, "overrideAbiCheckBox"); + this.overrideAbiCheckBox.Checked = global::APKToolGUI.Properties.Settings.Default.Adb_SetOverrideAbi; + this.overrideAbiCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Adb_SetOverrideAbi", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.overrideAbiCheckBox.Name = "overrideAbiCheckBox"; + this.overrideAbiCheckBox.UseVisualStyleBackColor = true; + // + // setVendorChkBox + // + resources.ApplyResources(this.setVendorChkBox, "setVendorChkBox"); + this.setVendorChkBox.Checked = global::APKToolGUI.Properties.Settings.Default.Adb_SetVendor; + this.setVendorChkBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Adb_SetVendor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.setVendorChkBox.Name = "setVendorChkBox"; + this.setVendorChkBox.UseVisualStyleBackColor = true; + // + // apkPathAdbTxtBox + // + resources.ApplyResources(this.apkPathAdbTxtBox, "apkPathAdbTxtBox"); + this.apkPathAdbTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "Adb_SelectedApkPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.apkPathAdbTxtBox.Name = "apkPathAdbTxtBox"; + this.apkPathAdbTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.Adb_SelectedApkPath; + // + // label32 + // + resources.ApplyResources(this.label32, "label32"); + this.label32.Name = "label32"; + // + // devicesListBox + // + resources.ApplyResources(this.devicesListBox, "devicesListBox"); + this.devicesListBox.FormattingEnabled = true; + this.devicesListBox.Name = "devicesListBox"; + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelStateImage, + this.toolStripStatusLabelStateText, + this.progressBar}); + resources.ApplyResources(this.statusStrip1, "statusStrip1"); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.SizingGrip = false; + // + // toolStripStatusLabelStateImage + // + this.toolStripStatusLabelStateImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripStatusLabelStateImage.Name = "toolStripStatusLabelStateImage"; + resources.ApplyResources(this.toolStripStatusLabelStateImage, "toolStripStatusLabelStateImage"); + // + // toolStripStatusLabelStateText + // + this.toolStripStatusLabelStateText.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + resources.ApplyResources(this.toolStripStatusLabelStateText, "toolStripStatusLabelStateText"); + this.toolStripStatusLabelStateText.Name = "toolStripStatusLabelStateText"; + this.toolStripStatusLabelStateText.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; + this.toolStripStatusLabelStateText.Spring = true; + this.toolStripStatusLabelStateText.Click += new System.EventHandler(this.toolStripStatusLabelStateText_Click); + // + // progressBar + // + this.progressBar.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + resources.ApplyResources(this.progressBar, "progressBar"); + this.progressBar.MarqueeAnimationSpeed = 30; + this.progressBar.Name = "progressBar"; + this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous; + this.progressBar.Click += new System.EventHandler(this.toolStripProgressBar1_Click); + // + // contextMenuStripLog + // + this.contextMenuStripLog.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStripLog.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyToolStripMenuItem, + this.clearLogToolStripMenuItem}); + this.contextMenuStripLog.Name = "contextMenuStripLog"; + resources.ApplyResources(this.contextMenuStripLog, "contextMenuStripLog"); + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + resources.ApplyResources(this.copyToolStripMenuItem, "copyToolStripMenuItem"); + // + // clearLogToolStripMenuItem + // + this.clearLogToolStripMenuItem.Name = "clearLogToolStripMenuItem"; + resources.ApplyResources(this.clearLogToolStripMenuItem, "clearLogToolStripMenuItem"); + // + // logTxtBox + // + this.logTxtBox.ContextMenuStrip = this.contextMenuStripLog; + resources.ApplyResources(this.logTxtBox, "logTxtBox"); + this.logTxtBox.HideSelection = false; + this.logTxtBox.Name = "logTxtBox"; + this.logTxtBox.ReadOnly = true; + this.logTxtBox.TabStop = false; + // + // menuStrip1 + // + this.menuStrip1.GripMargin = new System.Windows.Forms.Padding(2); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.settingsToolStripMenuItem1, + this.helpToolStripMenuItem}); + resources.ApplyResources(this.menuStrip1, "menuStrip1"); + this.menuStrip1.Name = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newInsToolStripMenuItem, + this.saveLogToFileToolStripMenuItem, + this.toolStripMenuItem1, + this.openTempFolderToolStripMenuItem, + this.clearTempFolderToolStripMenuItem, + this.toolStripMenuItem2, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); + // + // newInsToolStripMenuItem + // + this.newInsToolStripMenuItem.Name = "newInsToolStripMenuItem"; + resources.ApplyResources(this.newInsToolStripMenuItem, "newInsToolStripMenuItem"); + // + // saveLogToFileToolStripMenuItem + // + this.saveLogToFileToolStripMenuItem.Name = "saveLogToFileToolStripMenuItem"; + resources.ApplyResources(this.saveLogToFileToolStripMenuItem, "saveLogToFileToolStripMenuItem"); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + // + // openTempFolderToolStripMenuItem + // + this.openTempFolderToolStripMenuItem.Name = "openTempFolderToolStripMenuItem"; + resources.ApplyResources(this.openTempFolderToolStripMenuItem, "openTempFolderToolStripMenuItem"); + // + // clearTempFolderToolStripMenuItem + // + this.clearTempFolderToolStripMenuItem.Name = "clearTempFolderToolStripMenuItem"; + resources.ApplyResources(this.clearTempFolderToolStripMenuItem, "clearTempFolderToolStripMenuItem"); + this.clearTempFolderToolStripMenuItem.Click += new System.EventHandler(this.clearTempFolderToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2"); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + resources.ApplyResources(this.exitToolStripMenuItem, "exitToolStripMenuItem"); + // + // settingsToolStripMenuItem1 + // + this.settingsToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.useAPKEditorForDecompilingItem, + this.settingsToolStripMenuItem}); + this.settingsToolStripMenuItem1.Name = "settingsToolStripMenuItem1"; + resources.ApplyResources(this.settingsToolStripMenuItem1, "settingsToolStripMenuItem1"); + // + // useAPKEditorForDecompilingItem + // + this.useAPKEditorForDecompilingItem.Checked = global::APKToolGUI.Properties.Settings.Default.UseApkeditor; + this.useAPKEditorForDecompilingItem.CheckOnClick = true; + this.useAPKEditorForDecompilingItem.Name = "useAPKEditorForDecompilingItem"; + resources.ApplyResources(this.useAPKEditorForDecompilingItem, "useAPKEditorForDecompilingItem"); + // + // settingsToolStripMenuItem + // + this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; + resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem"); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.checkForUpdateToolStripMenuItem, + this.reportAnIsuueToolStripMenuItem, + this.apktoolIssuesToolStripMenuItem, + this.baksmaliIssuesToolStripMenuItem, + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); + // + // checkForUpdateToolStripMenuItem + // + this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem"; + resources.ApplyResources(this.checkForUpdateToolStripMenuItem, "checkForUpdateToolStripMenuItem"); + // + // reportAnIsuueToolStripMenuItem + // + this.reportAnIsuueToolStripMenuItem.Name = "reportAnIsuueToolStripMenuItem"; + resources.ApplyResources(this.reportAnIsuueToolStripMenuItem, "reportAnIsuueToolStripMenuItem"); + // + // apktoolIssuesToolStripMenuItem + // + this.apktoolIssuesToolStripMenuItem.Name = "apktoolIssuesToolStripMenuItem"; + resources.ApplyResources(this.apktoolIssuesToolStripMenuItem, "apktoolIssuesToolStripMenuItem"); + // + // baksmaliIssuesToolStripMenuItem + // + this.baksmaliIssuesToolStripMenuItem.Name = "baksmaliIssuesToolStripMenuItem"; + resources.ApplyResources(this.baksmaliIssuesToolStripMenuItem, "baksmaliIssuesToolStripMenuItem"); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + resources.ApplyResources(this.aboutToolStripMenuItem, "aboutToolStripMenuItem"); + // + // toolTip1 + // + this.toolTip1.AutoPopDelay = 10000; + this.toolTip1.InitialDelay = 500; + this.toolTip1.ReshowDelay = 100; + // + // splitContainer1 + // + resources.ApplyResources(this.splitContainer1, "splitContainer1"); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tabControlMain); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.logTxtBox); + // + // FormMain + // + this.AllowDrop = true; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.menuStrip1); + this.DoubleBuffered = true; + this.Name = "FormMain"; + this.Activated += new System.EventHandler(this.FormMain_Activated); + this.Shown += new System.EventHandler(this.FormMain_Shown); + this.tabControlMain.ResumeLayout(false); + this.tabPageMain.ResumeLayout(false); + this.mergePanel.ResumeLayout(false); + this.mergePanel.PerformLayout(); + this.signPanel.ResumeLayout(false); + this.signPanel.PerformLayout(); + this.zipalignPanel.ResumeLayout(false); + this.zipalignPanel.PerformLayout(); + this.comPanel.ResumeLayout(false); + this.comPanel.PerformLayout(); + this.decPanel.ResumeLayout(false); + this.decPanel.PerformLayout(); + this.tabPageApkInfo.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.basicInfoTabPage.ResumeLayout(false); + this.basicInfoTabPage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.apkIconPicBox)).EndInit(); + this.tabPage3.ResumeLayout(false); + this.tabPageDecode.ResumeLayout(false); + this.groupBox_DECODE_Options.ResumeLayout(false); + this.groupBox_DECODE_Options.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.decJobsLvlUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.decApiLvlUpDown)).EndInit(); + this.tabPageBuild.ResumeLayout(false); + this.groupBox_BUILD_Options.ResumeLayout(false); + this.groupBox_BUILD_Options.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comJobsLvlUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.buildApiLvlUpDown)).EndInit(); + this.tabPageSign.ResumeLayout(false); + this.groupBox_SIGN_Options.ResumeLayout(false); + this.groupBox_SIGN_Options.PerformLayout(); + this.tabPageZipAlign.ResumeLayout(false); + this.groupBox_ZIPALIGN_Options.ResumeLayout(false); + this.groupBox_ZIPALIGN_Options.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown_ZIPALIGN_AlignmentBytes)).EndInit(); + this.tabPageInstallFramework.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox_IF_Options.ResumeLayout(false); + this.groupBox_IF_Options.PerformLayout(); + this.tabPageBaksmali.ResumeLayout(false); + this.smaliGroupBox.ResumeLayout(false); + this.smaliGroupBox.PerformLayout(); + this.bakSmaliGroupBox.ResumeLayout(false); + this.bakSmaliGroupBox.PerformLayout(); + this.tabPageAdb.ResumeLayout(false); + this.tabPageAdb.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.contextMenuStripLog.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.TabControl tabControlMain; + internal System.Windows.Forms.TabPage tabPageDecode; + internal System.Windows.Forms.TabPage tabPageSign; + internal System.Windows.Forms.TabPage tabPageZipAlign; + internal System.Windows.Forms.StatusStrip statusStrip1; + internal System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateText; + internal System.Windows.Forms.ToolStripProgressBar progressBar; + internal System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelStateImage; + internal System.Windows.Forms.ContextMenuStrip contextMenuStripLog; + internal System.Windows.Forms.ToolStripMenuItem clearLogToolStripMenuItem; + internal System.Windows.Forms.TabPage tabPageBuild; + internal System.Windows.Forms.TabPage tabPageInstallFramework; + internal System.Windows.Forms.TextBox textBox_IF_InputFramePath; + internal System.Windows.Forms.Button button_IF_BrowseInputFramePath; + internal System.Windows.Forms.Button button_IF_InstallFramework; + internal System.Windows.Forms.GroupBox groupBox_BUILD_Options; + internal System.Windows.Forms.Button button_BUILD_BrowseOutputAppPath; + internal System.Windows.Forms.CheckBox checkBox_BUILD_OutputAppPath; + internal System.Windows.Forms.TextBox textBox_BUILD_OutputAppPath; + internal System.Windows.Forms.CheckBox checkBox_BUILD_CopyOriginal; + internal System.Windows.Forms.Button button_BUILD_BrowseFrameDir; + internal System.Windows.Forms.CheckBox checkBox_BUILD_UseFramework; + internal System.Windows.Forms.TextBox textBox_BUILD_FrameDir; + internal System.Windows.Forms.TextBox textBox_BUILD_AaptPath; + internal System.Windows.Forms.CheckBox checkBox_BUILD_UseAapt; + internal System.Windows.Forms.Button button_BUILD_BrowseAaptPath; + internal System.Windows.Forms.CheckBox checkBox_BUILD_ForceAll; + internal System.Windows.Forms.GroupBox groupBox_IF_Options; + internal System.Windows.Forms.CheckBox checkBox_IF_Tag; + internal System.Windows.Forms.TextBox textBox_IF_Tag; + internal System.Windows.Forms.TextBox textBox_IF_FrameDir; + internal System.Windows.Forms.CheckBox checkBox_IF_FramePath; + internal System.Windows.Forms.Button button_IF_BrowseFrameDir; + internal System.Windows.Forms.GroupBox groupBox_ZIPALIGN_Options; + internal System.Windows.Forms.Label label_ZIPALIGN_AlignmentBytes; + internal System.Windows.Forms.NumericUpDown numericUpDown_ZIPALIGN_AlignmentBytes; + internal System.Windows.Forms.CheckBox checkBox_ZIPALIGN_VerboseOutput; + internal System.Windows.Forms.CheckBox checkBox_ZIPALIGN_CheckAlignment; + internal System.Windows.Forms.Button button_ZIPALIGN_BrowseOutputFile; + internal System.Windows.Forms.TextBox textBox_ZIPALIGN_OutputFile; + internal System.Windows.Forms.CheckBox checkBox_ZIPALIGN_OverwriteOutputFile; + internal System.Windows.Forms.CheckBox checkBox_ZIPALIGN_Recompress; + internal System.Windows.Forms.GroupBox groupBox_SIGN_Options; + internal System.Windows.Forms.Label label_SIGN_PrivateKey; + internal System.Windows.Forms.Button button_SIGN_BrowsePrivateKey; + internal System.Windows.Forms.TextBox textBox_SIGN_PrivateKey; + internal System.Windows.Forms.Label label_SIGN_PublicKey; + internal System.Windows.Forms.Button button_SIGN_BrowsePublicKey; + internal System.Windows.Forms.TextBox textBox_SIGN_PublicKey; + internal System.Windows.Forms.Button button_SIGN_BrowseOutputFile; + internal System.Windows.Forms.TextBox textBox_SIGN_OutputFile; + internal System.Windows.Forms.TabPage tabPageMain; + internal System.Windows.Forms.GroupBox groupBox_DECODE_Options; + internal System.Windows.Forms.CheckBox checkBox_DECODE_MatchOriginal; + internal System.Windows.Forms.CheckBox checkBox_DECODE_KeepBrokenRes; + internal System.Windows.Forms.CheckBox checkBox_DECODE_Force; + internal System.Windows.Forms.Panel signPanel; + internal System.Windows.Forms.TextBox textBox_SIGN_InputFile; + internal System.Windows.Forms.Button button_SIGN_BrowseInputFile; + internal System.Windows.Forms.Button button_SIGN_Sign; + internal System.Windows.Forms.Panel zipalignPanel; + internal System.Windows.Forms.Button button_ZIPALIGN_Align; + internal System.Windows.Forms.Button button_ZIPALIGN_BrowseInputFile; + internal System.Windows.Forms.TextBox textBox_ZIPALIGN_InputFile; + internal System.Windows.Forms.Panel comPanel; + internal System.Windows.Forms.Label label2; + internal System.Windows.Forms.Button button_BUILD_BrowseInputProjectDir; + internal System.Windows.Forms.Button button_BUILD_Build; + internal System.Windows.Forms.TextBox textBox_BUILD_InputProjectDir; + internal System.Windows.Forms.Panel decPanel; + internal System.Windows.Forms.Label label1; + internal System.Windows.Forms.TextBox textBox_DECODE_InputAppPath; + internal System.Windows.Forms.Button button_DECODE_Decode; + internal System.Windows.Forms.Button button_DECODE_BrowseInputAppPath; + internal System.Windows.Forms.Label label4; + internal System.Windows.Forms.Label label3; + internal System.Windows.Forms.TextBox textBox_DECODE_FrameDir; + internal System.Windows.Forms.Button button_DECODE_BrowseOutputDirectory; + internal System.Windows.Forms.CheckBox checkBox_DECODE_UseFramework; + internal System.Windows.Forms.Button button_DECODE_BrowseFrameDir; + internal System.Windows.Forms.CheckBox checkBox_DECODE_OutputDirectory; + internal System.Windows.Forms.TextBox textBox_DECODE_OutputDirectory; + internal System.Windows.Forms.CheckBox checkBox_DECODE_NoSrc; + internal System.Windows.Forms.CheckBox checkBox_DECODE_NoRes; + internal System.Windows.Forms.Button button_OpenMainActivity; + internal System.Windows.Forms.Button openAndroidMainfestBtn; + internal System.Windows.Forms.CheckBox checkBox_DECODE_OnlyMainClasses; + internal System.Windows.Forms.CheckBox checkBox_BUILD_NoCrunch; + internal System.Windows.Forms.CheckBox checkBox_DECODE_FixError; + internal System.Windows.Forms.TabPage tabPageApkInfo; + internal System.Windows.Forms.RichTextBox permTxtBox; + internal System.Windows.Forms.TextBox buildTxtBox; + internal System.Windows.Forms.PictureBox apkIconPicBox; + internal System.Windows.Forms.Label label10; + internal System.Windows.Forms.Label label12; + internal System.Windows.Forms.Label label15; + internal System.Windows.Forms.Label label14; + internal System.Windows.Forms.Label label13; + internal System.Windows.Forms.Label label11; + internal System.Windows.Forms.Label label8; + internal System.Windows.Forms.Label label9; + internal System.Windows.Forms.Label label7; + internal System.Windows.Forms.TextBox densityTxtBox; + internal System.Windows.Forms.TextBox screenTxtBox; + internal System.Windows.Forms.TextBox minSdkTxtBox; + internal System.Windows.Forms.TextBox verTxtBox; + internal System.Windows.Forms.TextBox packNameTxtBox; + internal System.Windows.Forms.TextBox appTxtBox; + internal System.Windows.Forms.CheckBox checkBox_DECODE_NoDebugInfo; + internal System.Windows.Forms.RichTextBox localsTxtBox; + internal System.Windows.Forms.Label label18; + internal System.Windows.Forms.Label label17; + internal System.Windows.Forms.TextBox targetSdkTxtBox; + internal System.Windows.Forms.TextBox fileTxtBox; + internal System.Windows.Forms.Button comApkOpenDir; + internal System.Windows.Forms.Button decApkOpenDirBtn; + internal System.Windows.Forms.Button compileOutputOpenDirBtn; + internal System.Windows.Forms.Button apkComboLinkBtn; + internal System.Windows.Forms.Button apkPureLinkBtn; + internal System.Windows.Forms.Button psLinkBtn; + internal System.Windows.Forms.Label label19; + internal System.Windows.Forms.CheckBox zipalignAfterBuildChkBox; + internal System.Windows.Forms.CheckBox clearFwBeforeDecodeChkBox; + internal System.Windows.Forms.Button clearFwBtn; + internal System.Windows.Forms.GroupBox groupBox1; + internal System.Windows.Forms.CheckBox signAfterBuildChkBox; + internal System.Windows.Forms.CheckBox signAfterZipalignChkBox; + internal System.Windows.Forms.CheckBox zipalignOutputDirChkBox; + internal System.Windows.Forms.CheckBox useSigningOutputDir; + internal System.Windows.Forms.Label label22; + internal System.Windows.Forms.TextBox keyStoreFileTxtBox; + internal System.Windows.Forms.Label label21; + internal System.Windows.Forms.Label label20; + internal System.Windows.Forms.CheckBox useKeyStoreChkBox; + internal System.Windows.Forms.TextBox textBox3; + internal System.Windows.Forms.Button selectKeyStoreFileBtn; + internal System.Windows.Forms.TextBox aliasTxtBox; + internal System.Windows.Forms.CheckBox useAliasChkBox; + internal System.Windows.Forms.CheckBox createUnsignApkChkBox; + internal System.Windows.Forms.ComboBox schemev4ComboBox; + internal System.Windows.Forms.Label label27; + internal System.Windows.Forms.ComboBox schemev3ComboBox; + internal System.Windows.Forms.Label label26; + internal System.Windows.Forms.ComboBox schemev2ComboBox; + internal System.Windows.Forms.Label label25; + internal System.Windows.Forms.ComboBox schemev1ComboBox; + internal System.Windows.Forms.Label label24; + internal System.Windows.Forms.NumericUpDown decApiLvlUpDown; + internal System.Windows.Forms.CheckBox decSetApiLvlChkBox; + internal System.Windows.Forms.NumericUpDown buildApiLvlUpDown; + internal System.Windows.Forms.CheckBox buildSetApiLvlChkBox; + internal System.Windows.Forms.TabPage tabPageBaksmali; + internal System.Windows.Forms.Button openFwFolderBtn; + internal System.Windows.Forms.Button selApkFileInfoBtn; + internal System.Windows.Forms.GroupBox smaliGroupBox; + internal System.Windows.Forms.GroupBox bakSmaliGroupBox; + internal System.Windows.Forms.Button comSmaliBtn; + internal System.Windows.Forms.TextBox smaliBrowseInputDirTxtBox; + internal System.Windows.Forms.Button smaliBrowseInputDirBtn; + internal System.Windows.Forms.Button decSmaliBtn; + internal System.Windows.Forms.Button baksmaliBrowseInputDexBtn; + internal System.Windows.Forms.TextBox baksmaliBrowseInputDexTxtBox; + internal System.Windows.Forms.CheckBox smaliUseOutputChkBox; + internal System.Windows.Forms.Button smaliBrowseOutputBtn; + internal System.Windows.Forms.TextBox smaliBrowseOutputTxtBox; + internal System.Windows.Forms.CheckBox baksmaliUseOutputChkBox; + internal System.Windows.Forms.Button baksmaliBrowseOutputBtn; + internal System.Windows.Forms.TextBox baksmaliBrowseOutputTxtBox; + internal System.Windows.Forms.Button openApktoolYmlBtn; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Label label28; + internal System.Windows.Forms.Button signApkOpenDirBtn; + internal System.Windows.Forms.Button alignApkOpenDirBtn; + internal System.Windows.Forms.Button decOutOpenDirBtn; + private System.Windows.Forms.CheckBox useAapt2ChkBox; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.RichTextBox fullInfoTextBox; + internal System.Windows.Forms.TabPage basicInfoTabPage; + internal System.Windows.Forms.Button apkMirrorLinkBtn; + internal System.Windows.Forms.Button apkSupportLinkBtn; + internal System.Windows.Forms.Button apkGkLinkBtn; + internal System.Windows.Forms.TextBox archSdkTxtBox; + internal System.Windows.Forms.Label label30; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.CheckBox autoDelIdsigChkBox; + private System.Windows.Forms.CheckBox checkBox1; + internal System.Windows.Forms.TextBox launchActivityTxtBox; + internal System.Windows.Forms.Label label31; + internal System.Windows.Forms.RichTextBox logTxtBox; + internal System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolTip toolTip1; + internal System.Windows.Forms.Button selApkAdbBtn; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label33; + internal System.Windows.Forms.TabPage tabPageAdb; + internal System.Windows.Forms.Button installApkBtn; + internal System.Windows.Forms.TextBox apkPathAdbTxtBox; + internal System.Windows.Forms.ListBox devicesListBox; + internal System.Windows.Forms.CheckBox setVendorChkBox; + internal System.Windows.Forms.Button killAdbBtn; + internal System.Windows.Forms.Button refreshDevicesBtn; + internal System.Windows.Forms.Label selAdbDeviceLbl; + private System.Windows.Forms.CheckBox checkBox2; + internal System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem checkForUpdateToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem apktoolIssuesToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem baksmaliIssuesToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem openTempFolderToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem reportAnIsuueToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem saveLogToFileToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem clearTempFolderToolStripMenuItem; + internal System.Windows.Forms.CheckBox checkBox_BUILD_NetSecConf; + private System.Windows.Forms.CheckBox checkBox7; + internal System.Windows.Forms.ToolStripMenuItem newInsToolStripMenuItem; + internal System.Windows.Forms.Panel mergePanel; + internal System.Windows.Forms.Label splitApkTxt; + internal System.Windows.Forms.TextBox splitApkPathTxtBox; + internal System.Windows.Forms.Button selSplitApkBtn; + internal System.Windows.Forms.Button mergeApkBtn; + private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem1; + internal System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; + internal System.Windows.Forms.ToolStripMenuItem useAPKEditorForDecompilingItem; + internal System.Windows.Forms.CheckBox overrideAbiCheckBox; + internal System.Windows.Forms.ComboBox overrideAbiComboBox; + internal System.Windows.Forms.RichTextBox sigTxtBox; + internal System.Windows.Forms.Label label5; + internal System.Windows.Forms.NumericUpDown decJobsLvlUpDown; + internal System.Windows.Forms.CheckBox checkBox3; + internal System.Windows.Forms.NumericUpDown comJobsLvlUpDown; + internal System.Windows.Forms.CheckBox checkBox4; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} + diff --git a/APKToolGUI/Forms/FormMain.cs b/APKToolGUI/Forms/FormMain.cs new file mode 100644 index 0000000..41eb619 --- /dev/null +++ b/APKToolGUI/Forms/FormMain.cs @@ -0,0 +1,1719 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Windows.Forms; +using Java; +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.ApkTool; +using APKToolGUI.Utils; +using System.Threading.Tasks; +using APKToolGUI.Handlers; +using Microsoft.WindowsAPICodePack.Taskbar; +using System.Media; +using System.Linq; +using APKToolGUI.Controls; +using Ionic.Zip; +using System.Text.RegularExpressions; + +namespace APKToolGUI +{ + public partial class FormMain : Form + { + internal Adb adb; + internal ApkEditor apkeditor; + internal Apktool apktool; + internal Signapk signapk; + internal Baksmali baksmali; + internal Smali smali; + internal Zipalign zipalign; + internal UpdateChecker updateCheker; + internal AaptParser aapt; + + private bool IgnoreOutputDirContextMenu; + private bool isRunning; + + private string javaPath; + + private Stopwatch stopwatch = new Stopwatch(); + private string lastStartedDate; + + private Image previousApkIcon; + + internal static FormMain Instance { get; private set; } + + public FormMain() + { + Instance = this; + + Program.SetLanguage(); + + InitializeComponent(); + + if (Program.IsDarkTheme()) + DarkTheme.SetTheme(Controls, this); + + Text += " - v" + ProductVersion; + Application.ApplicationExit += new EventHandler(Application_ApplicationExit); + + aapt = new AaptParser(); + + if (!File.Exists(Settings.Default.Decode_InputAppPath)) + Settings.Default.Decode_InputAppPath = ""; + if (!Directory.Exists(Settings.Default.Build_InputDir)) + Settings.Default.Build_InputDir = ""; + if (!File.Exists(Settings.Default.Sign_InputFile)) + Settings.Default.Sign_InputFile = ""; + if (!File.Exists(Settings.Default.Zipalign_InputFile)) + Settings.Default.Zipalign_InputFile = ""; + + if (!File.Exists(Settings.Default.Sign_PrivateKey) || String.IsNullOrEmpty(Settings.Default.Sign_PrivateKey)) + Settings.Default.Sign_PrivateKey = Program.SIGNAPK_KEYPRIVATE; + if (!File.Exists(Settings.Default.Sign_PublicKey) || String.IsNullOrEmpty(Settings.Default.Sign_PublicKey)) + Settings.Default.Sign_PublicKey = Program.SIGNAPK_KEYPUBLIC; + + int v1 = (schemev1ComboBox.Items.Count + 1 > Settings.Default.Sign_Schemev1) ? Settings.Default.Sign_Schemev1 : 0; + schemev1ComboBox.SelectedIndex = v1; + Settings.Default.Sign_Schemev1 = v1; + + int v2 = (schemev2ComboBox.Items.Count + 1 > Settings.Default.Sign_Schemev2) ? Settings.Default.Sign_Schemev2 : 0; + schemev2ComboBox.SelectedIndex = v2; + Settings.Default.Sign_Schemev2 = v2; + + int v3 = (schemev3ComboBox.Items.Count + 1 > Settings.Default.Sign_Schemev3) ? Settings.Default.Sign_Schemev3 : 0; + schemev3ComboBox.SelectedIndex = v3; + Settings.Default.Sign_Schemev3 = v3; + + int v4 = (schemev4ComboBox.Items.Count + 1 > Settings.Default.Sign_Schemev4) ? Settings.Default.Sign_Schemev4 : 2; + schemev4ComboBox.SelectedIndex = v4; + Settings.Default.Sign_Schemev4 = v4; + + int overrideAbi = (overrideAbiComboBox.Items.Count + 1 > Settings.Default.Adb_OverrideAbi) ? Settings.Default.Adb_OverrideAbi : 0; + overrideAbiComboBox.SelectedIndex = overrideAbi; + Settings.Default.Adb_OverrideAbi = overrideAbi; + + useAPKEditorForDecompilingItem.Checked = Settings.Default.UseApkeditor; + + new DecodeControlEventHandlers(this); + new BuildControlEventHandlers(this); + new SignControlEventHandlers(this); + new ZipalignControlEventHandlers(this); + new FrameworkControlEventHandlers(this); + new BaksmaliControlEventHandlers(this); + new SmaliControlEventHandlers(this); + new AdbControlEventHandlers(this); + new DragDropHandlers(this); + new ApkinfoControlEventHandlers(this); + new MainWindowEventHandlers(this); + new MenuItemHandlers(this); + new TaskBarJumpList(Handle); + } + + #region Context menu args + private async void RunCmdArgs() + { + try + { + if (Environment.GetCommandLineArgs().Length == 3) + { + if (Settings.Default.IgnoreOutputDirContextMenu) + IgnoreOutputDirContextMenu = true; + + string file = Environment.GetCommandLineArgs()[2]; + switch (Environment.GetCommandLineArgs()[1]) + { + case "decapk": + if (file.ContainsAny(".xapk", ".zip", ".apks", ".apkm")) + { + if (await MergeAndDecompile(file) == 0) + Close(); + } + else + { + if (await Decompile(file) == 0) + Close(); + } + break; + case "comapk": + if (await Build(file) == 0) + Close(); + break; + case "sign": + if (await Sign(file) == 0) + Close(); + break; + case "zipalign": + if (await Align(file) == 0) + Close(); + break; + case "baksmali": + if (await Baksmali(file) == 0) + Close(); + break; + case "smali": + if (await Smali(file) == 0) + Close(); + break; + case "viewinfo": + tabControlMain.SelectedIndex = 1; + await GetApkInfo(file); + break; + default: + IgnoreOutputDirContextMenu = false; + break; + } + } + } + catch (Exception ex) + { + ToLog(ApktoolEventType.Error, ex.Message); + } + } + #endregion + + #region Get APK Info + internal async Task GetApkInfo(string file) + { + if (!File.Exists(file)) + return; + + ToLog(ApktoolEventType.None, Language.ParsingApkInfo); + ToStatus(Language.ParsingApkInfo, Resources.waiting); + + try + { + string splitPath = Path.Combine(Program.TEMP_PATH, "SplitInfo"); + + // Parse APK in background + var parseResult = await ParseApkInBackgroundAsync(file, splitPath); + + if (parseResult.Success) + { + // UI update is automatically executed on UI thread + UpdateApkInfoUI(parseResult); + + // Get signature info in background + var signature = await Task.Run(() => signapk.GetSignature(parseResult.ActualFilePath)); + + // Update signature info UI + InvokeOnUIThread(() => sigTxtBox.Text = signature); + } + + ToLog(ApktoolEventType.Success, Language.Done); + ToStatus(Language.Done, Resources.done); + } + catch (Exception ex) + { +#if DEBUG + ToLog(ApktoolEventType.Warning, Language.ErrorGettingApkInfo + "\n" + ex.ToString()); +#else + ToLog(ApktoolEventType.Warning, Language.ErrorGettingApkInfo); +#endif + } + } + + private async Task ParseApkInBackgroundAsync(string file, string splitPath) + { + return await Task.Run(() => + { + try + { + DirectoryUtils.Delete(splitPath); + List archList = new List(); + string actualFile = file; + + if (file.ContainsAny(".xapk", ".zip", ".apks", ".apkm")) + { + Directory.CreateDirectory(splitPath); + + using (ZipFile zipDest = ZipFile.Read(file)) + { + bool mainApkFound = false; + + foreach (ZipEntry entry in zipDest.Entries) + { + if (!mainApkFound && !entry.FileName.Contains("config.") && entry.FileName.EndsWith(".apk")) + { + Debug.WriteLine("Found main APK: " + entry.FileName); + string extractPath = Path.Combine(splitPath, entry.FileName); + Directory.CreateDirectory(Path.GetDirectoryName(extractPath)); + entry.Extract(splitPath, ExtractExistingFileAction.OverwriteSilently); + actualFile = extractPath; + mainApkFound = true; + } + + if (entry.FileName.Contains("lib/armeabi-v7a") && !archList.Contains("armeabi-v7a")) + archList.Add("armeabi-v7a"); + if (entry.FileName.Contains("lib/arm64-v8a") && !archList.Contains("arm64-v8a")) + archList.Add("arm64-v8a"); + if (entry.FileName.Contains("lib/x86") && !archList.Contains("x86")) + archList.Add("x86"); + if (entry.FileName.Contains("lib/x86_64") && !archList.Contains("x86_64")) + archList.Add("x86_64"); + } + } + } + + var aaptParser = new AaptParser(); + var parsed = aaptParser.Parse(actualFile); + + DirectoryUtils.Delete(splitPath); + + return new ApkParseResult + { + Success = parsed, + Aapt = aaptParser, + Architecture = string.Join(", ", archList), + ActualFilePath = actualFile + }; + } + catch (Exception ex) + { + Debug.WriteLine($"Error parsing APK: {ex.Message}"); + DirectoryUtils.Delete(splitPath); + return new ApkParseResult { Success = false }; + } + }); + } + + private void UpdateApkInfoUI(ApkParseResult result) + { + // Explicitly dispose previous image + if (previousApkIcon != null) + { + previousApkIcon.Dispose(); + previousApkIcon = null; + Debug.WriteLine("[FormMain] Disposed previous APK icon"); + } + + // Remove PictureBox image reference + if (apkIconPicBox.Image != null) + { + apkIconPicBox.Image = null; + } + + fileTxtBox.Text = result.Aapt.ApkFile; + appTxtBox.Text = result.Aapt.AppName; + packNameTxtBox.Text = result.Aapt.PackageName; + verTxtBox.Text = result.Aapt.VersionName; + buildTxtBox.Text = result.Aapt.VersionCode; + minSdkTxtBox.Text = result.Aapt.MinSdkVersionDetailed; + targetSdkTxtBox.Text = result.Aapt.TargetSdkVersionDetailed; + screenTxtBox.Text = result.Aapt.Screens; + densityTxtBox.Text = result.Aapt.Densities; + permTxtBox.Text = result.Aapt.Permissions; + localsTxtBox.Text = result.Aapt.Locales; + fullInfoTextBox.Text = result.Aapt.FullInfo; + launchActivityTxtBox.Text = result.Aapt.LaunchableActivity; + + if (!String.IsNullOrEmpty(result.Aapt.NativeCode)) + archSdkTxtBox.Text = result.Aapt.NativeCode; + else + archSdkTxtBox.Text = result.Architecture; + + // Load new image and save reference + previousApkIcon = BitmapUtils.LoadBitmap(result.Aapt.GetIcon(result.ActualFilePath)); + apkIconPicBox.Image = previousApkIcon; + + sigTxtBox.Text = "Loading..."; + } + + private class ApkParseResult + { + public bool Success { get; set; } + public AaptParser Aapt { get; set; } + public string Architecture { get; set; } + public string ActualFilePath { get; set; } + } + #endregion + + #region Update checker + private void InitializeUpdateChecker() + { + updateCheker = new UpdateChecker("https://repo.andnixsh.com/tools/APKToolGUI/version.txt", Version.Parse(Application.ProductVersion)); + updateCheker.Completed += new RunWorkerCompletedEventHandler(updateCheker_Completed); + } + + private void updateCheker_Completed(object sender, RunWorkerCompletedEventArgs e) + { + if (e.Result is UpdateChecker.Result) + { + UpdateChecker.Result result = (UpdateChecker.Result)e.Result; + + switch (result.State) + { + case UpdateChecker.State.NeedUpdate: + if (MessageBox.Show(Language.UpdateNewVersion + "\n\n" + result.Changelog, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + Process.Start("https://repo.andnixsh.com/tools/APKToolGUI/APKToolGUI.zip"); + break; + case UpdateChecker.State.NoUpdate: + if (!result.Silently) + MessageBox.Show(Language.UpdateNoUpdates, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); + break; + case UpdateChecker.State.Error: + if (!result.Silently) + MessageBox.Show(Language.ErrorUpdateChecking + " " + Environment.NewLine + result.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + } + + Settings.Default.LastUpdateCheck = DateTime.Now; + } + } + #endregion + + #region Log & Status + internal void ToStatus(string message, Image statusImage) + { + BeginInvokeOnUIThread(() => + { + toolStripStatusLabelStateText.Text = message.Replace("\n", "").Replace("\r", ""); + toolStripStatusLabelStateImage.Image = statusImage; + }); + } + + internal void ToLog(string time, string message, Color backColor) + { + Debug.WriteLine(time + " " + message); + + InvokeOnUIThread(() => + { + logTxtBox.SelectionColor = backColor; + logTxtBox.AppendText(time + " " + message + Environment.NewLine); + }); + } + + internal void ToLog(ApktoolEventType eventType, string message) + { + if (String.IsNullOrWhiteSpace(message) || message.Contains("_JAVA_OPTIONS")) + return; + + Color color = Color.Black; + + switch (eventType) + { + case ApktoolEventType.None: + if (Program.IsDarkTheme()) + color = Color.White; + break; + case ApktoolEventType.Success: + if (Program.IsDarkTheme()) + color = Color.LightGreen; + else + color = Color.DarkGreen; + break; + case ApktoolEventType.Infomation: + if (Program.IsDarkTheme()) + color = Color.LightBlue; + else + color = Color.Blue; + break; + case ApktoolEventType.Error: + if (Program.IsDarkTheme()) + color = Color.LightPink; + else + color = Color.Red; + break; + case ApktoolEventType.Warning: + if (Program.IsDarkTheme()) + color = Color.DarkOrange; + else + color = Color.Orange; + color = Color.White; + break; + case ApktoolEventType.Unknown: + if (Program.IsDarkTheme()) + color = Color.White; + break; + } + + ToLog(DateTime.Now.ToString("[HH:mm:ss]"), message, color); + } + + internal void Running(string msg) + { + Invoke(new Action(delegate () + { + TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Indeterminate, Handle); + progressBar.Style = ProgressBarStyle.Marquee; + progressBar.Visible = true; + ActionButtonsEnabled = false; + ClearLog(); + })); + + isRunning = true; + stopwatch.Reset(); + stopwatch.Start(); + lastStartedDate = DateTime.Now.ToString("HH:mm:ss"); + + ToLog(ApktoolEventType.Infomation, "=====[ " + msg + " ]====="); + ToStatus(msg, Resources.waiting); + } + + internal void Done(string msg = null) + { + isRunning = false; + + stopwatch.Stop(); + TimeSpan ts = stopwatch.Elapsed; + + ToLog(ApktoolEventType.Success, "=====[ " + Language.AllDone + " ]====="); + if (msg != null) + ToLog(ApktoolEventType.Success, msg); + ToLog(ApktoolEventType.None, String.Format(Language.TimeStarted, lastStartedDate)); + ToLog(ApktoolEventType.None, String.Format(Language.TimeEnded, DateTime.Now.ToString("HH:mm:ss") + " (" + ts.ToString("mm\\:ss") + ")")); + + if (Settings.Default.PlaySoundWhenDone) + SystemSounds.Beep.Play(); + + TaskbarManager.Instance.SetProgressValue(1, 1); + if (statusStrip1.InvokeRequired) + statusStrip1.BeginInvoke(new Action(delegate { progressBar.Style = ProgressBarStyle.Continuous; })); + else + progressBar.Style = ProgressBarStyle.Continuous; + + Invoke(new Action(delegate () + { + progressBar.Visible = false; + })); + + ActionButtonsEnabled = true; + + ToStatus(Language.Done, Resources.done); + } + + internal void Error(Exception ex) + { +#if DEBUG + Error(ex.ToString()); +#else + Error(ex.Message); +#endif + } + + internal void Error(string msg, string status = null) + { + isRunning = false; + + stopwatch.Stop(); + TimeSpan ts = stopwatch.Elapsed; + + ToLog(ApktoolEventType.Error, "=====[ " + Language.Error + " ]====="); + ToLog(ApktoolEventType.Error, msg); + ToLog(ApktoolEventType.None, "Time started: " + lastStartedDate); + ToLog(ApktoolEventType.None, "Time elapsed: " + ts.ToString("mm\\:ss")); + + if (Settings.Default.PlaySoundWhenDone) + SystemSounds.Beep.Play(); + + TaskbarManager.Instance.SetProgressValue(1, 1); + if (statusStrip1.InvokeRequired) + statusStrip1.BeginInvoke(new Action(delegate { progressBar.Style = ProgressBarStyle.Continuous; })); + else + progressBar.Style = ProgressBarStyle.Continuous; + + Invoke(new Action(delegate () + { + progressBar.Visible = false; + })); + + ActionButtonsEnabled = true; + + if (status == null) + ToStatus(msg, Resources.error); + else + ToStatus(status, Resources.error); + } + + internal void ClearLog() + { + if (Settings.Default.ClearLogBeforeAction) + logTxtBox.Text = ""; + } + #endregion + + #region ApkEditor + private void InitializeApkEditor() + { + apkeditor = new ApkEditor(javaPath, Program.APKEDITOR_PATH); + apkeditor.ApkEditorOutputDataRecieved += ApkEditorOutputDataRecieved; + apkeditor.ApkEditorErrorDataRecieved += ApkEditorErrorDataRecieved; + } + + void ApkEditorErrorDataRecieved(object sender, ApkEditorDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.Error, e.Message); + } + + void ApkEditorOutputDataRecieved(object sender, ApkEditorDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.None, e.Message); + } + + internal async Task MergeAndDecompile(string inputSplitApk) + { + int code = 0; + + Running(Language.MergingApk); + + string apkFileName = Path.GetFileName(inputSplitApk); + + string tempApk = Path.Combine(Program.TEMP_PATH, "dec.apk"); + string tempDecApk = Path.Combine(Program.TEMP_PATH, "dec"); + + string splitDir = Path.Combine(Program.TEMP_PATH, "SplitTmp"); + string extractedDir = Path.Combine(splitDir, "ExtractedApks"); + string mergedDir = Path.Combine(splitDir, "Merged"); + + string outputDir = PathUtils.GetDirectoryNameWithoutExtension(inputSplitApk); + if (Settings.Default.Decode_UseOutputDir && !IgnoreOutputDirContextMenu) + outputDir = Path.Combine(Settings.Default.Decode_OutputDir, Path.GetFileNameWithoutExtension(inputSplitApk)); + + try + { + DirectoryUtils.Delete(splitDir); + Directory.CreateDirectory(splitDir); + + await Task.Run(() => + { + if (Settings.Default.Framework_ClearBeforeDecode) + { + ToLog(ApktoolEventType.Infomation, Language.ClearingFramework); + if (apktool.ClearFramework() == 0) + { + ToLog(ApktoolEventType.Success, Language.FrameworkCacheCleared); + } + else + ToLog(ApktoolEventType.Error, Language.ErrorClearingFw); + } + + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputSplitApk)); + + //Extract all apk files + ToLog(ApktoolEventType.None, Language.ExtractingAllApkFiles); + ZipUtils.ExtractAll(inputSplitApk, extractedDir, true); + + var apkfiles = Directory.EnumerateFiles(extractedDir, "*.apk"); + + ToLog(ApktoolEventType.None, Language.MergingApkEditor); + + code = apkeditor.Merge(extractedDir, tempApk); + if (code == 0) + { + if (useAPKEditorForDecompilingItem.Checked) + code = apkeditor.Decompile(tempApk, tempDecApk); + else + code = apktool.Decompile(tempApk, tempDecApk); + + if (code == 0) + { + ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkFileToOutput, tempDecApk, outputDir)); + DirectoryUtils.Delete(outputDir); + DirectoryUtils.Copy(tempDecApk, outputDir); + + BeginInvokeOnUIThread(() => + { + textBox_BUILD_InputProjectDir.Text = outputDir; + }); + + ToLog(ApktoolEventType.None, String.Format(Language.DecompilingSuccessfullyCompleted, outputDir)); + if (Settings.Default.Decode_FixError) + { + if (ApkFixer.FixAndroidManifest(outputDir)) + ToLog(ApktoolEventType.None, Language.FixAndroidManifest); + if (ApkFixer.FixApktoolYml(outputDir)) + ToLog(ApktoolEventType.None, Language.FixApktoolYml); + if (ApkFixer.RemoveApkToolDummies(outputDir)) + ToLog(ApktoolEventType.None, Language.RemoveApkToolDummies); + } + ToLog(ApktoolEventType.None, String.Format(Language.MergeFinishedMoveDir, outputDir)); + + Done(); + } + else + { + Error(Language.ErrorDecompiling); + } + } + else + { + Error(Language.ErrorMerging); + } + }); + } + catch (Exception ex) + { + code = 1; + Error(ex); + } + + return code; + } + + internal async Task Merge(string inputSplitApk) + { + int code = 0; + + Running(Language.MergingApk); + + string apkFileName = Path.GetFileName(inputSplitApk); + string tempFile = Path.Combine(Program.TEMP_PATH, "tempsplit"); + string tempFileMerged = Path.Combine(Program.TEMP_PATH, "tempsplitmerged"); + + string outputFile = PathUtils.GetDirectoryNameWithoutExtension(inputSplitApk) + " merged.apk"; + + try + { + await Task.Run(() => + { + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputSplitApk)); + + ToLog(ApktoolEventType.None, Language.MergingApkEditor); + + ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, inputSplitApk, tempFile)); + FileUtils.Copy(inputSplitApk, tempFile, true); + + code = apkeditor.Merge(tempFile, tempFileMerged); + if (code == 0) + { + ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkToOutput, tempFile, outputFile)); + FileUtils.Move(tempFileMerged, outputFile, true); + Done(); + } + else + { + Error(Language.ErrorMerging); + } + }); + } + catch (Exception ex) + { + code = 1; + Error(ex); + } + + return code; + } + #endregion + + #region Apktool + public async void SetApktoolPath() + { + apktool.JarPath = Program.APKTOOL_PATH; + if (Settings.Default.UseCustomApktool) + { + apktool.JarPath = Settings.Default.ApktoolPath; + } + + string apktoolVersion = apktool.GetVersion(); + string apktoolVersionOld = apktool.GetVersionOld(); + if (!String.IsNullOrWhiteSpace(apktoolVersion) && !Regex.IsMatch(apktoolVersion, @"\r\n?|\n")) + ToLog(ApktoolEventType.None, $"{Language.APKToolVersion} \"{apktoolVersion}\""); + else if (!String.IsNullOrWhiteSpace(apktoolVersionOld) && !Regex.IsMatch(apktoolVersionOld, @"\r\n?|\n")) + ToLog(ApktoolEventType.None, $"{Language.APKToolVersion} \"{apktoolVersionOld}\""); + else + ToLog(ApktoolEventType.Error, Language.CantDetectApktoolVersion); + + if (MessageBox.Show(Language.ClearFrameworkPrompt, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) + { + await ClearFramework(); + } + } + + private void InitializeAPKTool() + { + string apktoolPath = Program.APKTOOL_PATH; + if (Settings.Default.UseCustomApktool) + { + apktoolPath = Settings.Default.ApktoolPath; + } + apktool = new Apktool(javaPath, apktoolPath); + apktool.ApktoolOutputDataRecieved += apktool_ApktoolOutputDataRecieved; + apktool.ApktoolErrorDataRecieved += apktool_ApktoolErrorDataRecieved; + } + + void apktool_ApktoolErrorDataRecieved(object sender, ApktoolDataReceivedEventArgs e) + { + if (e.EventType == ApktoolEventType.Unknown) + ToLog(ApktoolEventType.Error, e.Message); + else + ToLog(e.EventType, e.Message); + } + + void apktool_ApktoolOutputDataRecieved(object sender, ApktoolDataReceivedEventArgs e) + { + ToLog(e.EventType, e.Message); + } + + internal async Task ClearFramework() + { + int code = 0; + + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.ClearingFramework + " ]====="); + ToStatus(Language.ClearingFramework, Resources.waiting); + + try + { + await Task.Run(() => + { + if (apktool.ClearFramework() == 0) + { + Done(Language.FrameworkCacheCleared); + } + else + Error(Language.ErrorClearingFw); + }); + } + catch (Exception ex) + { + Error(ex); + code = 1; + } + + return code; + } + + internal async Task Decompile(string inputApk) + { + Debug.WriteLine(useAPKEditorForDecompilingItem.Checked); + + int code = 0; + + Running(Language.Decoding); + + string apkFileName = Path.GetFileName(inputApk); + string outputDir = PathUtils.GetDirectoryNameWithoutExtension(inputApk); + if (Settings.Default.Decode_UseOutputDir && !IgnoreOutputDirContextMenu) + outputDir = Path.Combine(Settings.Default.Decode_OutputDir, Path.GetFileNameWithoutExtension(inputApk)); + + string tempApk = Path.Combine(Program.TEMP_PATH, "dec.apk"); + string tempDecApk = Path.Combine(Program.TEMP_PATH, "dec"); + string outputTempDir = tempApk.Replace(".apk", ""); + string outputDecDir = outputDir; + string decOrigDir = Path.Combine(tempDecApk, "original"); + + try + { + if (!Settings.Default.Decode_Force && Directory.Exists(outputDir)) + { + ToLog(ApktoolEventType.Error, String.Format(Language.DecodeDesDirExists, outputDir)); + return 1; + } + await Task.Run(() => + { + if (Settings.Default.Framework_ClearBeforeDecode && !Settings.Default.UseApkeditor) + { + ToLog(ApktoolEventType.Infomation, Language.ClearingFramework); + if (apktool.ClearFramework() == 0) + { + ToLog(ApktoolEventType.Success, Language.FrameworkCacheCleared); + } + else + ToLog(ApktoolEventType.Error, Language.ErrorClearingFw); + } + + if (Settings.Default.Utf8FilenameSupport) + { + DirectoryUtils.Delete(outputTempDir); + + ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, inputApk, tempApk)); + + FileUtils.Copy(inputApk, tempApk, true); + + inputApk = tempApk; + outputDecDir = outputTempDir; + } + + if (useAPKEditorForDecompilingItem.Checked) + code = apkeditor.Decompile(inputApk, outputDecDir); + else + code = apktool.Decompile(inputApk, outputDecDir); + + if (code == 0) + { + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkFileToOutput, outputTempDir, outputDir)); + DirectoryUtils.Delete(outputDir); + DirectoryUtils.Copy(outputTempDir, outputDir); + } + + BeginInvokeOnUIThread(() => + { + textBox_BUILD_InputProjectDir.Text = outputDir; + }); + + ToLog(ApktoolEventType.None, String.Format(Language.DecompilingSuccessfullyCompleted, outputDir)); + if (Settings.Default.Decode_FixError && !useAPKEditorForDecompilingItem.Checked) + { + if (ApkFixer.FixAndroidManifest(outputDir)) + ToLog(ApktoolEventType.None, Language.FixAndroidManifest); + if (ApkFixer.FixApktoolYml(outputDir)) + ToLog(ApktoolEventType.None, Language.FixApktoolYml); + if (ApkFixer.RemoveApkToolDummies(outputDir)) + ToLog(ApktoolEventType.None, Language.RemoveApkToolDummies); + } + + Done(); + } + else + Error(Language.ErrorDecompiling); + }); + } + catch (Exception ex) + { + code = 1; + Error(ex.ToString(), Language.ErrorDecompiling); + } + + return code; + } + + internal async Task Build(string inputFolder) + { + int code = 0; + + Running(Language.Build); + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputFolder)); + + try + { + await Task.Factory.StartNew(() => + { + string outputFile = inputFolder + " compiled.apk"; + string outputUnsignedApk = inputFolder + " unsigned.apk"; + if (Settings.Default.Build_SignAfterBuild) + outputFile = inputFolder + " signed.apk"; + if (Settings.Default.Build_UseOutputAppPath && !IgnoreOutputDirContextMenu) + { + outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(inputFolder)) + ".apk"; + if (Settings.Default.Build_SignAfterBuild) + outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(inputFolder)) + " signed.apk"; + } + + string outputCompiledApkFile = outputFile; + + string tempDecApkFolder = Path.Combine(Program.TEMP_PATH, "dec"); + string outputTempApk = tempDecApkFolder + ".apk"; + + bool isDecompiledUsingApkEditor = File.Exists(Path.Combine(inputFolder, "path-map.json")); + + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.CopyFolderToTemp, inputFolder, tempDecApkFolder)); + DirectoryUtils.Delete(tempDecApkFolder); + DirectoryUtils.Copy(inputFolder, tempDecApkFolder); + + inputFolder = tempDecApkFolder; + outputFile = outputTempApk; + } + + if (isDecompiledUsingApkEditor) + code = apkeditor.Build(inputFolder, outputFile); + else + code = apktool.Build(inputFolder, outputFile); + + if (code == 0) + { + ToLog(ApktoolEventType.None, String.Format(Language.CompilingSuccessfullyCompleted, outputFile)); + + if (Settings.Default.Build_CreateUnsignedApk) + { + ToStatus(Language.CreateUnsignedApk, Resources.waiting); + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.CreateUnsignedApk + " ]====="); + + if (Directory.Exists(Path.Combine(inputFolder, "original", "META-INF"))) + { + string unsignedApkPath = Path.Combine(Path.GetDirectoryName(outputCompiledApkFile), Path.GetFileName(outputUnsignedApk)); + ZipUtils.UpdateDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF"); + if (File.Exists(Path.Combine(inputFolder, "original", "stamp-cert-sha256"))) + ZipUtils.UpdateFile(outputFile, Path.Combine(inputFolder, "original", "stamp-cert-sha256")); + ToLog(ApktoolEventType.Infomation, String.Format(Language.CopyFileTo, outputFile, unsignedApkPath)); + File.Copy(outputFile, unsignedApkPath, true); + } + else + ToLog(ApktoolEventType.Warning, Language.MetainfNotExist); + } + + if (Settings.Default.Build_ZipalignAfterBuild) + { + ToStatus(Language.Aligning, Resources.waiting); + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.Aligning + " ]====="); + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputFolder)); + + if (zipalign.Align(outputFile, outputFile) == 0) + { + ToLog(ApktoolEventType.None, Language.Done); + } + else + { + Error(Language.ErrorZipalign); + return; + } + } + + if (Settings.Default.Build_SignAfterBuild) + { + ToStatus(Language.Signing, Resources.waiting); + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.Signing + " ]====="); + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputFolder)); + + if (signapk.Sign(outputFile, outputFile) == 0) + { + ToLog(ApktoolEventType.None, Language.Done); + + if (Settings.Default.AutoDeleteIdsigFile) + { + ToLog(ApktoolEventType.None, String.Format(Language.DeleteFile, outputFile + ".idsig")); + FileUtils.Delete(outputFile + ".idsig"); + } + + string device = selAdbDeviceLbl.Text; + if (Settings.Default.Sign_InstallApkAfterSign) + { + if (!String.IsNullOrEmpty(device)) + { + ToStatus(Language.InstallingApk, Resources.waiting); + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.InstallingApk + " ]====="); + + if (adb.Install(device, outputFile) == 0) + ToLog(ApktoolEventType.None, Language.InstallApkSuccessful); + else + ToLog(ApktoolEventType.Error, Language.InstallApkFailed); + } + else + ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, outputFile)); + } + } + else + ToLog(ApktoolEventType.Error, Language.ErrorSigning); + } + + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkToOutput, outputTempApk, outputCompiledApkFile)); + FileUtils.Move(outputTempApk, outputCompiledApkFile, true); + } + + Done(); + } + else + { + Error(Language.ErrorCompiling); + } + }); + } + catch (Exception ex) + { + Error(ex); + code = 1; + } + + return code; + } + #endregion + + #region Baksmali + private void InitializeBaksmali() + { + baksmali = new Baksmali(javaPath, Program.BAKSMALI_PATH); + baksmali.BaksmaliOutputDataRecieved += BaksmaliOutputDataRecieved; + baksmali.BaksmaliErrorDataRecieved += BaksmaliErrorDataRecieved; + } + + void BaksmaliErrorDataRecieved(object sender, BaksmaliDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.Error, e.Message); + } + + void BaksmaliOutputDataRecieved(object sender, BaksmaliDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.None, e.Message); + } + + internal async Task Baksmali(string inputFile) + { + int code = 0; + try + { + Running(Language.DecompilingDex); + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputFile)); + + await Task.Run(() => + { + string outputDir = String.Format("{0}", Path.Combine(Path.GetDirectoryName(inputFile), "dexout", Path.GetFileNameWithoutExtension(inputFile))); + if (Settings.Default.Baksmali_UseOutputDir && !IgnoreOutputDirContextMenu) + outputDir = String.Format("{0}", Path.Combine(Settings.Default.Baksmali_OutputDir, Path.GetFileNameWithoutExtension(inputFile))); + + code = baksmali.Disassemble(inputFile, outputDir); + if (code == 0) + { + BeginInvokeOnUIThread(() => + { + smaliBrowseInputDirTxtBox.Text = outputDir; + }); + Done(String.Format(Language.DecompilingSuccessfullyCompleted, outputDir)); + } + else + Error(Language.ErrorDecompiling); + }); + } + catch (Exception ex) + { + code = 1; + Error(ex); + } + + return code; + } + #endregion + + #region Smali + private void InitializeSmali() + { + smali = new Smali(javaPath, Program.SMALI_PATH); + smali.SmaliOutputDataRecieved += SmaliOutputDataRecieved; + smali.SmaliErrorDataRecieved += SmaliErrorDataRecieved; + } + + void SmaliErrorDataRecieved(object sender, SmaliDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.Error, e.Message); + } + + void SmaliOutputDataRecieved(object sender, SmaliDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.None, e.Message); + } + + internal async Task Smali(string inputDir) + { + int code = 0; + try + { + Running(Language.CompilingDex); + + ToLog(ApktoolEventType.None, String.Format(Language.InputDirectory, inputDir)); + + await Task.Run(() => + { + string outputDir = String.Format("{0}.dex", inputDir); + if (Settings.Default.Smali_UseOutputDir && !IgnoreOutputDirContextMenu) + outputDir = String.Format("{0}.dex", Path.Combine(Settings.Default.Smali_OutputDir, Path.GetFileNameWithoutExtension(inputDir))); + + code = smali.Assemble(inputDir, outputDir); + if (code == 0) + Done(String.Format(Language.CompilingSuccessfullyCompleted, outputDir)); + else + Error(Language.ErrorCompiling); + }); + } + catch (Exception ex) + { + Error(ex); + code = 1; + } + + return code; + } + #endregion + + #region Zipalign + private void InitializeZipalign() + { + zipalign = new Zipalign(Program.ZIPALIGN_PATH); + zipalign.OutputDataReceived += zipalign_OutputDataReceived; + zipalign.ErrorDataReceived += zipalign_ErrorDataReceived; + } + + void zipalign_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + ToLog(ApktoolEventType.None, e.Data); + } + + void zipalign_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + ToLog(ApktoolEventType.Error, e.Data); + } + + internal async Task Align(string inputFile) + { + int code = 0; + + Running(Language.Aligning); + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, inputFile)); + + string outputDir = inputFile; + if (Settings.Default.Zipalign_UseOutputDir && !IgnoreOutputDirContextMenu) + outputDir = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile)); + + if (!Settings.Default.Zipalign_OverwriteOutputFile) + outputDir = PathUtils.GetDirectoryNameWithoutExtension(outputDir) + " aligned.apk"; + + try + { + await Task.Run(() => + { + string tempApk = Path.Combine(Program.TEMP_PATH, "tempapk.apk"); + string outputApkFile = outputDir; + + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, inputFile, tempApk)); + FileUtils.Copy(inputFile, tempApk, true); + inputFile = tempApk; + outputDir = tempApk; + } + + code = zipalign.Align(inputFile, outputDir); + if (code == 0) + { + if (Settings.Default.Zipalign_SignAfterZipAlign) + { + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.Signing + " ]====="); + if (signapk.Sign(outputDir, outputDir) == 0) + { + ToLog(ApktoolEventType.None, Language.Done); + + if (Settings.Default.AutoDeleteIdsigFile) + { + ToLog(ApktoolEventType.None, String.Format(Language.DeleteFile, outputDir + ".idsig")); + FileUtils.Delete(outputDir + ".idsig"); + } + } + else + ToLog(ApktoolEventType.Error, Language.ErrorSigning); + } + + ToLog(ApktoolEventType.None, String.Format(Language.ZipalignFileSavedTo, outputDir)); + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkToOutput, tempApk, outputApkFile)); + FileUtils.Move(tempApk, outputApkFile, true); + } + + Done(); + } + else + Error(Language.ErrorZipalign); + }); + } + catch (Exception ex) + { + Error(ex); + code = 1; + } + + return code; + } + #endregion + + #region Signapk + private void InitializeSignapk() + { + signapk = new Signapk(javaPath, Program.APKSIGNER_PATH); + signapk.SignapkOutputDataRecieved += SignApkOutputDataRecieved; + signapk.SignapkErrorDataRecieved += SignApkErrorDataRecieved; + } + + void SignApkErrorDataRecieved(object sender, SignapkDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.Error, e.Message); + } + + void SignApkOutputDataRecieved(object sender, SignapkDataReceivedEventArgs e) + { + ToLog(ApktoolEventType.None, e.Message); + } + + internal async Task Sign(string input) + { + int code = 0; + + Running(Language.Signing); + + string outputFile = input; + if (Settings.Default.Zipalign_UseOutputDir && !IgnoreOutputDirContextMenu) + outputFile = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(input)); + if (!Settings.Default.Sign_OverwriteInputFile) + outputFile = PathUtils.GetDirectoryNameWithoutExtension(outputFile) + "_signed.apk"; + + string tempApk = Path.Combine(Program.TEMP_PATH, "tempapk.apk"); + string outputApkFile = outputFile; + + ToLog(ApktoolEventType.None, String.Format(Language.InputFile, input)); + + try + { + await Task.Run(() => + { + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.CopyFileToTemp, input, tempApk)); + FileUtils.Copy(input, tempApk, true); + input = tempApk; + outputFile = tempApk; + } + + code = signapk.Sign(input, outputFile); + + if (code == 0) + { + ToLog(ApktoolEventType.None, String.Format(Language.SignSuccessfullyCompleted, outputFile)); + + string device = selAdbDeviceLbl.Text; + + if (Settings.Default.Sign_InstallApkAfterSign) + { + if (!string.IsNullOrEmpty(device)) + { + ToLog(ApktoolEventType.Infomation, "=====[ " + Language.InstallingApk + " ]====="); + if (adb.Install(device, outputFile) == 0) + { + ToLog(ApktoolEventType.Success, Language.InstallApkSuccessful); + } + else + ToLog(ApktoolEventType.Error, Language.InstallApkFailed); + } + else + ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, outputFile)); + } + + if (Settings.Default.AutoDeleteIdsigFile) + { + ToLog(ApktoolEventType.None, String.Format(Language.DeleteFile, outputFile + ".idsig")); + FileUtils.Delete(outputFile + ".idsig"); + } + + if (Settings.Default.Utf8FilenameSupport) + { + ToLog(ApktoolEventType.None, String.Format(Language.MoveTempApkToOutput, tempApk, outputApkFile)); + FileUtils.Move(tempApk, outputApkFile, true); + } + + Done(); + } + else + Error(String.Format(Language.ErrorSigning, outputFile)); + }); + } + catch (Exception ex) + { + code = 1; + Error(ex); + } + + return code; + } + #endregion + + #region Adb + private void InitializeAdb() + { + adb = new Adb(Program.ADB_PATH); + adb.OutputDataReceived += AdbOutputDataReceived; + adb.ErrorDataReceived += AdbErrorDataReceived; + } + + void AdbErrorDataReceived(object sender, DataReceivedEventArgs e) + { + ToLog(ApktoolEventType.Error, e.Data); + } + + void AdbOutputDataReceived(object sender, DataReceivedEventArgs e) + { + ToLog(ApktoolEventType.None, e.Data); + } + + internal async Task ListDevices() + { + int code = 0; + AdbActionButtonsEnabled = false; + ToLog(ApktoolEventType.None, Language.GettingDevices); + ToStatus(Language.GettingDevices, Resources.waiting); + + string devices = null; + int numOfDevices = 0; + + try + { + devicesListBox.Items.Clear(); + + await Task.Run(() => + { + devices = adb.GetDevices(); + }); + if (!String.IsNullOrEmpty(devices)) + { + string[] deviceLines = devices.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string line in deviceLines.Skip(1)) + { + numOfDevices++; + devicesListBox.Items.Add(line); + } + } + } + catch (Exception ex) + { + code = 1; + ToLog(ApktoolEventType.Error, ex.ToString()); + } + + if (numOfDevices != 0) + ToLog(ApktoolEventType.None, String.Format(Language.DevicesFound, numOfDevices)); + else + ToLog(ApktoolEventType.None, Language.NoDevicesFound); + + ToStatus(Language.Done, Resources.done); + AdbActionButtonsEnabled = true; + + return code; + } + + internal async Task Install(string inputApk) + { + string device = selAdbDeviceLbl.Text; + if (String.IsNullOrEmpty(device)) + { + ToLog(ApktoolEventType.Error, String.Format(Language.DeviceNotSelected, inputApk)); + return 1; + } + + int code = 0; + + Running(Language.InstallingApk); + + AdbActionButtonsEnabled = false; + + ToLog(ApktoolEventType.None, String.Format(Language.InstallingApkPath, inputApk)); + + try + { + await Task.Run(() => + { + code = adb.Install(device, inputApk); + if (code == 0) + { + Done(Language.InstallApkSuccessful); + } + else + Error(Language.InstallApkFailed); + }); + } + catch (Exception ex) + { + code = 1; + Error(ex); + } + + AdbActionButtonsEnabled = true; + + return code; + } + #endregion + + #region Form handlers + private async void FormMain_Shown(object sender, EventArgs e) + { + await Task.Run(() => + { + InitializeUpdateChecker(); + InitializeZipalign(); + + javaPath = JavaUtils.GetJavaPath(); + if (javaPath != null) + { + InitializeBaksmali(); + InitializeSmali(); + InitializeAPKTool(); + InitializeSignapk(); + InitializeApkEditor(); + + string javaVersion = apktool.GetJavaVersion(); + if (javaVersion != null) + { + ToLog(ApktoolEventType.None, javaVersion); + string apktoolVersion = apktool.GetVersion(); + string apktoolVersionOld = apktool.GetVersionOld(); + + if (!String.IsNullOrWhiteSpace(apktoolVersion) && !Regex.IsMatch(apktoolVersion, @"\r\n?|\n")) + ToLog(ApktoolEventType.None, $"{Language.APKToolVersion} {apktoolVersion}"); + else if (!String.IsNullOrWhiteSpace(apktoolVersionOld) && !Regex.IsMatch(apktoolVersionOld, @"\r\n?|\n")) + ToLog(ApktoolEventType.None, $"{Language.APKToolVersion} {apktoolVersionOld}"); + else + ToLog(ApktoolEventType.Error, Language.CantDetectApktoolVersion); + + string apkeditorVersion = apkeditor.GetVersion(); + if (!String.IsNullOrWhiteSpace(apkeditorVersion)) + ToLog(ApktoolEventType.None, apkeditorVersion); + else + ToLog(ApktoolEventType.Error, Language.CantDetectApkeditorVersion); + } + else + ToLog(ApktoolEventType.Error, Language.ErrorJavaDetect); + } + else + { + ToLog(ApktoolEventType.Error, Language.ErrorJavaDetect); + BeginInvoke(new MethodInvoker(delegate + { + tabPageMain.Enabled = false; + tabPageBaksmali.Enabled = false; + tabPageInstallFramework.Enabled = false; + })); + } + + InitializeAdb(); + + if (AdminUtils.IsAdministrator()) + ToLog(ApktoolEventType.Warning, Language.DragDropNotSupported); + else + ToLog(ApktoolEventType.None, Language.DragDropSupported); + + ToLog(ApktoolEventType.None, String.Format(Language.TempDirectory, Program.TEMP_PATH)); + + TimeSpan updateInterval = DateTime.Now - Settings.Default.LastUpdateCheck; + if (updateInterval.Days > 0 && Settings.Default.CheckForUpdateAtStartup) + updateCheker.CheckAsync(true); + }); + ToStatus(Language.Done, Resources.done); + + RunCmdArgs(); + + await ListDevices(); + } + + private async void clearTempFolderToolStripMenuItem_Click(object sender, EventArgs e) + { + Running(Language.ClearTempFolder); + try + { + await Task.Run(() => + { + foreach (var subDir in new DirectoryInfo(Program.TEMP_MAIN).EnumerateDirectories()) + { + ToLog(ApktoolEventType.None, String.Format(Language.DeletingFolder, subDir)); + DirectoryUtils.Delete(subDir.FullName); + } + Directory.CreateDirectory(Program.TEMP_PATH); + }); + Done(); + } + catch (Exception ex) + { + Error(ex); + } + } + + private async void tabControlMain_SelectedIndexChanged(object sender, EventArgs e) + { + if (tabControlMain.SelectedIndex == 1 && String.IsNullOrEmpty(appTxtBox.Text) && Environment.GetCommandLineArgs().Length == 1) + { + await GetApkInfo(Settings.Default.Decode_InputAppPath); + } + } + + private void FormMain_Activated(object sender, EventArgs e) + { + if (!isRunning) + TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress, Handle); + } + + private void Application_ApplicationExit(object sender, EventArgs e) + { + Save(); + + // Dispose APK icon image + try + { + if (previousApkIcon != null) + { + previousApkIcon.Dispose(); + previousApkIcon = null; + Debug.WriteLine("[FormMain] Cleaned up APK icon on exit"); + } + } + catch (Exception ex) + { + Debug.WriteLine($"[FormMain] Error disposing APK icon: {ex.Message}"); + } + + // Dispose all tool instances + try + { + adb?.Dispose(); + zipalign?.Dispose(); + apktool?.Dispose(); + signapk?.Dispose(); + baksmali?.Dispose(); + smali?.Dispose(); + apkeditor?.Dispose(); + + Debug.WriteLine("[FormMain] All tool instances disposed successfully"); + } + catch (Exception ex) + { + Debug.WriteLine($"[FormMain] Error disposing resources: {ex.Message}"); + } + + DirectoryUtils.Delete(Program.TEMP_PATH); + } + + private bool ActionButtonsEnabled + { + set + { + BeginInvokeOnUIThread(() => + { + button_BUILD_Build.Enabled = value; + button_DECODE_Decode.Enabled = value; + button_IF_InstallFramework.Enabled = value; + button_ZIPALIGN_Align.Enabled = value; + button_SIGN_Sign.Enabled = value; + decSmaliBtn.Enabled = value; + comSmaliBtn.Enabled = value; + mergeApkBtn.Enabled = value; + }); + } + } + + private bool AdbActionButtonsEnabled + { + set + { + InvokeOnUIThread(() => + { + killAdbBtn.Enabled = value; + refreshDevicesBtn.Enabled = value; + installApkBtn.Enabled = value; + devicesListBox.Enabled = value; + apkPathAdbTxtBox.Enabled = value; + selApkAdbBtn.Enabled = value; + setVendorChkBox.Enabled = value; + overrideAbiCheckBox.Enabled = value; + overrideAbiComboBox.Enabled = value; + }); + } + } + + internal void ShowMessage(string message, MessageBoxIcon status) + { + MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, status); + } + + #region UI Thread Helpers + /// + /// Execute action synchronously on UI thread + /// + private void InvokeOnUIThread(Action action) + { + if (InvokeRequired) + { + Invoke(action); + } + else + { + action(); + } + } + + /// + /// Execute action asynchronously on UI thread (Fire and forget) + /// + private void BeginInvokeOnUIThread(Action action) + { + if (InvokeRequired) + { + BeginInvoke(action); + } + else + { + action(); + } + } + + /// + /// Execute function on UI thread and return result + /// + private T InvokeOnUIThread(Func func) + { + if (InvokeRequired) + { + return (T)Invoke(func); + } + else + { + return func(); + } + } + #endregion + #endregion + + #region Config + internal void Save() + { + Settings.Default.Sign_Schemev1 = schemev1ComboBox.SelectedIndex; + Settings.Default.Sign_Schemev2 = schemev2ComboBox.SelectedIndex; + Settings.Default.Sign_Schemev3 = schemev3ComboBox.SelectedIndex; + Settings.Default.Sign_Schemev4 = schemev4ComboBox.SelectedIndex; + Settings.Default.Adb_OverrideAbi = overrideAbiComboBox.SelectedIndex; + Settings.Default.UseApkeditor = useAPKEditorForDecompilingItem.Checked; + Settings.Default.Save(); + } + #endregion + + #region Cancel + private void toolStripStatusLabelStateText_Click(object sender, EventArgs e) + { + if (MessageBox.Show(Language.CancelProcess, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + CancelProcess(); + } + + private void toolStripProgressBar1_Click(object sender, EventArgs e) + { + if (MessageBox.Show(Language.CancelProcess, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + CancelProcess(); + } + + private void CancelProcess() + { + try + { + ToStatus(Language.PleaseWait, Resources.waiting); + + apkeditor.Cancel(); + apktool.Cancel(); + baksmali.Cancel(); + smali.Cancel(); + zipalign.Cancel(); + signapk.Cancel(); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + ActionButtonsEnabled = true; + } + } + #endregion + + private void apkIconPicBox_Click(object sender, EventArgs e) + { + if (apkIconPicBox.Image != null) + { + using (SaveFileDialog saveFile = new SaveFileDialog()) + { + saveFile.Filter = "PNG Image|*.png"; + saveFile.Title = "Save an Image File"; + saveFile.FileName = appTxtBox.Text; // Set default filename to app name + + if (saveFile.ShowDialog() == DialogResult.OK && !String.IsNullOrEmpty(saveFile.FileName)) + { + apkIconPicBox.Image.Save(saveFile.FileName, System.Drawing.Imaging.ImageFormat.Png); + } + } + } + } + } +} \ No newline at end of file diff --git a/APKToolGUI/Forms/FormMain.de.resx b/APKToolGUI/Forms/FormMain.de.resx new file mode 100644 index 0000000..1024514 --- /dev/null +++ b/APKToolGUI/Forms/FormMain.de.resx @@ -0,0 +1,2827 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hauptseite + + + APK-Info + + + Dekompilieren + + + Signieren + + + Zip ausrichten + + + + 245, 13 + + + Geteilte APKs zu einer APK zusammenführen: + + + + + + Zusammenführen + + + APK-Ort kompilieren + + + Ausgabeort dekompilieren + + + APK-Ort signieren + + + APK-Verzeichnis zipalign + + + APK-Ort dekompilieren + + + Ausgabeort kompilieren + + + 136, 13 + + + APK-Datei zum Signieren: + + + + + + Signieren + + + 142, 13 + + + APK-Dateiausrichtung optimieren: + + + Ausrichtung optimieren + + + + + + + + + Kompilieren + + + 170, 13 + + + APK/XAPK/APKS/ZIP/APKM-Datei: + + + Dekompilieren + + + + + + Basisinfos + + + 75, 13 + + + Startaktivität: + + + 80, 13 + + + Architekturen: + + + 37, 13 + + + Datei: + + + + + + 43, 13 + + + Lokale: + + + 92, 13 + + + Berechtigungen: + + + 50, 13 + + + Dichten: + + + 64, 13 + + + App-Name: + + + 66, 13 + + + Paketname: + + + 99, 13 + + + Bildschirmgrößen: + + + 52, 13 + + + Ziel-SDK: + + + Vollständige Infos + + + Optionen + + + Anzahl der zu verwendenden Threads festlegen. + + + 457, 17 + + + Analysiere die APK-Informationen nicht, wenn du APK zum Dekompilieren auswählst + + + 373, 17 + + + API-Ebene der zu generierenden Datei fest, z. B. 14 für ICS festlegen + + + 287, 17 + + + ApkTool-Fehler nach der Dekompilierung beheben + + + Es entfernt extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY, teilt zugehörige Attribute und setzt sparseResources auf false + + + 392, 17 + + + Nur Haupt-Dex-Klassen (classes[0-9]*.dex) im Stammverzeichnis zerlegen + + + Aktivieren, um seltsame ApkTool Fehler zu beheben + + + + + + 201, 17 + + + Verwendet Framework-Dateien in: + + + + + + 447, 17 + + + Hält die Dateien so nah wie möglich am Original. Verhindert einen Wiederaufbau. + + + 134, 17 + + + Ausgabeverzeichnis: + + + 193, 17 + + + Defekte Ressourcen beibehalten + + + 168, 17 + + + Quellen nicht entschlüsseln + + + 200, 17 + + + Zielverzeichnis löschen erzwingen + + + 187, 17 + + + Ressourcen nicht entschlüsseln + + + 376, 17 + + + Keine Debug-Informationen schreiben aus (.local, .param, .line usw.) + + + Optionen + + + 450, 17 + + + Ausgabe-APK eine generische Netzwerksicherheitskonfigurationsdatei hinzufügen + + + 510, 17 + + + aapt2 verwenden (Aktualisiert apktool, um die experimentelle aapt2-Binärdatei zu verwenden) + + + 373, 17 + + + API-Ebene der zu generierenden Datei fest, z. B. 14 für ICS festlegen + + + 364, 17 + + + Nach Build eine unsignierte APK mit der Originalsignatur erstellen + + + Nur kompatibel mit Core Patch-Modul. Ein gerootetes Gerät ist erforderlich. + + + 178, 17 + + + Nach Build/Zipalign signieren + + + Zipalign nach Build + + + 423, 17 + + + Verarbeitung von Ressourcendateien während des Build-Schritts deaktivieren + + + + + + 357, 17 + + + Änderungserkennung überspringwen und alle Dateien erstellen + + + + + + + + + 153, 17 + + + APK-Ausgabeverzeichnis: + + + Das Ausgabeverzeichnis wird nach dem Kompilieren auch für Zipalign und Signieren verwendet + + + 354, 17 + + + Originalordner "AndroidManifest.xml" und "META-INF" kopieren + + + 149, 17 + + + Verwendete aapt.exe in: + + + 201, 17 + + + Verwendet Framework-Dateien in: + + + Optionen + + + 510, 30 + + + APK nach Signieren installieren (Stelle sicher, dass das Gerät zuerst auf der Registerkarte "ADB" +ausgewählt ist.) + + + 171, 17 + + + Eingabedatei überschreiben + + + 194, 17 + + + IDSIG-Datei automatisch löschen + + + Standard + + + Schema v4: + + + Standard + + + Schema v3: + + + Standard + + + Schema v2: + + + Standard + + + Schema v1: + + + + + + Es wird dringend empfohlen, deinen eigenen Schlüssel zu verwenden, der über Android Studio oder andere Tools erstellt wurde + + + 56, 13 + + + Passwort: + + + 102, 13 + + + keystore/jks-Datei: + + + 129, 17 + + + Keystore verwenden + + + 153, 17 + + + APK-Ausgabeverzeichnis: + + + 98, 13 + + + Privater Schlüssel: + + + 122, 13 + + + Öffentlicher Schlüssel: + + + + + + + + + + + + Optionen + + + 148, 17 + + + Nach Zipalign signieren + + + 187, 17 + + + Mit Zopfli erneut komprimieren + + + 282, 13 + + + Ausrichtung in Bytes, z.B. '4' bietet 32-Bit-Ausrichtung + + + + + + 290, 17 + + + Nur Ausrichtung prüfen (Datei wird nicht geändert) + + + 139, 17 + + + Ausführliche Ausgabe + + + 240, 17 + + + Vorhandene Ausgabedatei überschreiben + + + Optionen + + + Framework-Ordner öffnen + + + Framework bereinigen + + + 247, 17 + + + Framework vor Dekompilierung bereinigen + + + Framework installieren + + + 164, 17 + + + Frameworks markieren mit: + + + 194, 17 + + + Speichert Framework-Dateien in: + + + Installieren + + + + + + + + + 166, 13 + + + Smali-Ordner zum Kompilieren: + + + 153, 17 + + + Dex-Ausgabeverzeichnis: + + + Kompilieren + + + + + + + + + 131, 13 + + + Dex zum Dekompilieren: + + + 171, 17 + + + Ordner-Ausgabeverzeichnis: + + + + + + Dekompilieren + + + + + + 113, 13 + + + Ausgewähltes Gerät: + + + ADB-Prozess beenden + + + APK installieren + + + Aktualisieren + + + + + + 315, 17 + + + Anbieter auf Play Store einstellen (com.android.vending) + + + 99, 13 + + + Ausgewählte APK: + + + + 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 + + + + Laden … + + + 167, 48 + + + 166, 22 + + + Kopieren + + + 166, 22 + + + Protokoll löschen + + + 46, 20 + + + Datei + + + 236, 22 + + + Neue Instanz + + + 236, 22 + + + Protokoll in Datei speichern + + + 236, 22 + + + Einstellungen + + + 233, 6 + + + 236, 22 + + + Temporären Ordner öffnen + + + 236, 22 + + + Temporären Ordner bereinigen + + + 233, 6 + + + 236, 22 + + + Beenden + + + Hilfe + + + 217, 22 + + + Auf Update überprüfen + + + 217, 22 + + + Problem melden + + + 217, 22 + + + Apktool Fehlerverfolgung + + + 217, 22 + + + Baksmali Fehlerverfolgung + + + 217, 22 + + + Über + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA + IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAA + AAAAAAAAAAAAAAAAAAA9ZR0AKEESCVyYK0lwuzSje8w5233QOvB0wjbwb7gz22esMKNVjSdJJDwRCTle + GwAAAAAAAAAAAAEBAABvuDQATYAkGHG8NYx+0jvqg9o9/4LYPP94yDj/c8A2/3XDN/93xTf/dcI26miu + MY1GdSEYZqowAAABAABjpS4AVIwnF3fGN6mC2D39hNs9/4HXPP91wzb/b7o0/3G9Nf9zwDb/dcM3/3fG + N/94xzj9brYzqUt9IxdZlSkAKkYTBXfGN4iC2T39g9s9/4HWPP9zvzX/bLQy/263M/9vujT/cb01/3PA + Nv91wzf/d8Y3/3jIOP5stDKJHTAOBXG9NECB1jzng9o9/37VOf9uujH/Zq0u/2iwL/9qsy//bLYw/225 + Mf9vvDL/cb8z/3PCNP93xjf/dcM26GSmLkF90DqZg9o9/4faQ/+Py2D/ibxg/4q/Yf+MwWH/jcNi/4/G + Yv+QyGP/kctk/5PNZf+RzWD/esU9/3rLOP92xTeagdc81YLaPP+N3U7/4/TW//j69v/1+fP/9vn0//f6 + 9P/3+vT/9/r0//b68//4+/f/4fDU/4PNSP+B1zv/ftI714LZPO+D2j3/hNo+/8rvrf/+/f7/yuC5/+/1 + 6//+/v///v7///D26//O5bv//v3+/8bqqv+C1z3/g9o9/4DVO++C2T3ug9o9/4LaO/+W31v/5vbZ/+/1 + 6//5+/j//f39//39/f/5+/j/8Pbr/+b22f+V31r/gto7/4PaPf+A1jzvg9k91IPaPf+D2j3/gto7/5vh + Y//j9tP/+fz2//39/f/9/f3/+fz2/+P20/+b4WP/gto7/4PaPf+D2j3/gNU71YPZPZSD2j3/g9o9/4La + PP+O3U7/quV6/6Ljbf+z6In/s+iI/6HjbP+s5n3/jt1P/4LaPP+D2j3/g9o9/3/TO5aD2jw6g9o95YPa + Pf+C2jz/kN5S/43dTf+B2Tn/gdk6/4HZOv+B2Tn/jt1O/5DeUv+C2jz/g9o9/4LYPOZ8zzo7g9o7AoPa + PYGD2j39g9o9/4PaPP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPP+D2jz/g9o9/4PaPf2B1jyCaK8vAoPb + PQCD2z0Rg9s9oYPaPf2D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf2C2T2hf9M7EYDV + OwCF2zwAhNs9AITcPRGD2z2Bg9o954PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPeeD2j2Bgtk8EYPa + PQB6yTgAAAAAAAAAAACE3D0Ahd09BITbPTqD2z2Wg9s91YPaPe+D2j3vg9o91YPbPZaE2z06hdw9BITc + PQAAAAAAAAAAAOAHAADAAwAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAQAAwAMAAOAHAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEChCEzJPgyVmZacvmnC7NMJ2xTfZeco45HbF + N+RstDLZZqovwl2ZK5pJeSJmJT0RMgAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADTleGjlioy6JdcM3z37SO/OC2Dz+g9o9/4Pb + Pf+A1jz/eMc4/3XDN/92xDf/dsQ3/nTBNvNstTLPW5cqiTRXGToAAAANAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyM5ECBenCx7eMg424HXPP6D2z3/g9o9/4Pa + Pf+D2j3/gNU8/3bEN/9zvzb/dME2/3XDN/92xDf/d8Y3/3jIOP94xzf+b7k021eQKXwgNA8gAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwUCAAAAAAQ9ZRw0b7g0r4DVO/mD2z3/g9o9/4Pa + Pf+D2j3/g9o9/3/UO/90wjb/cb01/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yjj/d8Y3+Waq + MLA3Wxo1AAAABAMEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGAgAAAAADR3chPHXDNsaC2T3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf9/1Dv/c8A1/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jI + OP95yjj/eck4/2yzMsdAaR48AAAAAwMFAgAAAAAAAAAAAAAAAAAAAAAAAAAAAUVzIDB2xTfFg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/f9M7/3G9Nf9ttzP/brkz/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XD + N/92xDf/d8Y3/3jIOP95yTj/eco4/2y0MsY8ZBwxAAAAAQAAAAAAAAAAAAAAAOP/aQAxURcZc8A1rILZ + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/37TO/9wuzT/bLQy/222M/9uuDP/brkz/2+6NP9wvDT/cb41/3K+ + Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yTj/eck4/2itMK4oQhMZtP9UAAAAAAAbLQ0AAAAABWqx + MXSB1zz5g9o9/4PaPf+D2j3/g9o9/4PbPf9+0jv/brg0/2qxMf9rsjL/bLQy/222M/9uuDP/brkz/2+6 + NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yjj/d8Y3+V2bK3YAAAAFFSMKAMT/ + WwBVjScsfdA62YPaPf+D2j3/g9o9/4PaPf+D2z3/ftI7/222M/9orTD/abAx/2qxMf9rszL/bLQy/222 + M/9uuDP/brkz/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yjj/cbw02kZ0 + IS6i/0wAAAAAA3PANX+D2T3/g9o9/4PaPf+D2j3/g9s9/33ROv9rtDL/Zqsw/2esMP9orjH/abAx/2qx + Mf9rszL/bLQy/222M/9uuDP/brkz/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jI + OP94xzf/ZKYugQAAAANSiCYeftI6y4PaPf+D2j3/g9o9/4PaPf97zzf/Z68u/2GmK/9iqCz/ZKos/2Wr + Lf9mrC3/Z64u/2iwLv9osS//abMv/2q1L/9rtjD/bLcw/225Mf9uuzH/b7wy/3C9Mv9xvzP/csAz/3XD + Nv92xDf/d8U3/3rLOf92xDfNRXIgIHC6NFOC2Dzyg9o9/4PaPf+D2jz/ittJ/6DQev+exn7/n8h+/5/J + fv+gyn7/oct//6HLf/+izH//os6A/6PPgP+jz4D/pNCA/6TSgf+l0oH/pdOB/6bUgf+n1YL/p9aC/6jX + g/+k1Xz/fcVD/3XCNv94xzj/gNU8/4DUO/Njpi5Wesw5jYPaPf+D2j3/g9o9/4LaPP+S3lX/7fjk//79 + /v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//v3+/+r04f+Cxkz/dcQ2/3/UO/+D2j3/gtk8/3G8NJB/0zu6g9o9/4PaPf+D2j3/g9o9/4fb + RP/b88j///7///39/f/9/f3//v7+///+///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39///+ + ///+/v7//f39//39/f///v//1OrC/3jEPP9+0zv/g9o9/4PaPf+D2j3/d8c3vYHWO9WD2j3/g9o9/4Pa + Pf+D2j3/gto7/7nqkv/9/f3//f39//7+/v/m8N7/xd2x//X48v/+/f7//f39//39/f/9/f3//f39//39 + /v/1+fL/yOKz/+jy3//+/f7//f39//39/f+v3Iv/fNE4/4PaPf+D2j3/g9o9/4PaPf97zTnXgdg84oPa + Pf+D2j3/g9o9/4PaPf+C2jv/k95V/+r33v/+/f////7//73YqP93sUn/5O/b///+///9/f3//f39//39 + /f/9/f3///7//+Pw2f99vEz/xOCu///+///+/f//6PXc/4/ZU/+C2jz/g9o9/4PaPf+D2j3/g9o9/33Q + OuSC2Dzig9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/s+iJ//r8+P/+/f7/8fbt/+Ds1v/6+/n//f39//39 + /f/9/f3//f39//39/f/9/f3/+fv4/+Hv1v/z+O///v3+//n89/+y54f/gto7/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/fdE65ILYPNSD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+H20P/x+2n//z9+//+/v////7///39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3///7///79///8/fv/xu2m/4bbQv+D2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf98zzrWgtg8uIPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+J3Eb/w+yi//f7 + 8//+/f7//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/v/+/f7/9/vz/8Psof+J3Eb/gto8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/3vNObqB1zyIg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+E2j//tOiL//L66//4/PX///3////+/////f////3////+/////f//+Pv0//L66/+06Ir/hNo//4La + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eMk4i4HXO0uD2j3xg9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+56pL/sueG/6Tkcf/E7aP/1/LB/9/1zv/f9M7/1vLA/8Lsof+j427/teiM/7rq + lP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HXPPJ1wzZOf9M6FoPaPceD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jv/nOFk/8ftqP+I20X/gdk6/4LaO/+F20H/iNtF/4jbRf+F20D/gto7/4HZ + Ov+K3Ef/y++u/5zhZP+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/f9M7yWy0MheO7EIAg9o8doPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+26Y3/n+Jq/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4HaO/+j42//t+mO/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf97zTl4q/9QAIPa + PACC2Twhg9s91YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4rcSP+E2j//g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4TaP/+K3En/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gNU71nXD + NiJ3xzcAgNQ7AIfiPwCD2z1og9o9+YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZ + Pfl90Dppov9MAGitMAAAAAAAg9o8AIPZPAyD2z2jg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gNU7pHXDNg13yDcAAAAAAAAAAAAAAAAAg9s9AIPbPR+D2z2/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LYPL99zzogf9M7AAAAAAAAAAAAAAAAAAAAAACFyzQAhN0+AITbPSmD2z2/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j2/gNU7KoTfPwBsoSoAAAAAAAAAAAAAAAAAAAAAAAAAAACD1z0AhN09AITc + PR+E2z2kg9o9+YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j35g9s9pILYPCCF3j0Aecg6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABoQBQAhNw9AITcPQyE2z1og9s91oPaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3+g9s91oTbPWiE3D0MhNw9AE0oDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAhd08AIfeOwCE3D0hhNw9d4PbPcmD2z3yg9o9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf6D2j3yg9s9yYTbPXeE3D0hiOA7AIXdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjfPQCM4z4Bhd09FoTcPUyE2z2JhNs9uYPb + PdaD2z3kg9s95IPbPdaE2z25hNs9iYTcPUyF3T0WjOM+AYjfPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP8AAP/8AAA/+AAAH/AAAA/gAAAHwAAAA8AAAAOAAAABgAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AA + AA/4AAAf/AAAP/8AAP//gAH/KAAAADAAAABgAAAAAQAgAAAAAAAAJAAAEwsAABMLAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAA + ABYCBAEkIDMQPEBqHl5WjyiEY6UvpWyzMr5wujTNcr811XO/NdVrszLNYqItvluWKqVPgyWEO2EcXh0w + DzwCBAEkAAAAFgAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAsAAAAXGCgMMUZ0IWJipC6ecr410HvMOe1/1Dv6gdg8/4LZPf+D2j3/g9o9/3/TO/93xjf/dcM3/3XD + Nv90wTX6cbs07WmvMdBblyqeQWseYhYlCzEAAAAXAAAACwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAHAAAAFB8yDjNTiSd3brczxXzOOfOC2Dz/g9s9/4PbPf+D2j3/g9o9/4PaPf+D2j3/ftI7/3XE + N/91wjb/dcM3/3bEN/93xTf/d8Y3/3jIOP93xzf/c78182aqL8VNfyR3HC4OMwAAABQAAAAHAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAwMEwYjS3wjZm+4M8V+0jr5g9o9/4PbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf9+0Tv/dME2/3O/Nv90wTb/dcI2/3XDN/92xDf/dsU3/3fGN/94xzj/eck4/3nKOP91wzb5Z6swxkRx + IWYKEQUjAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAECpFFDhkpS6de8058IPaPf+D2z3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/33ROv9zwTb/cr41/3K+Nf9zwDb/dME2/3XCNv91wzf/dsQ3/3bFN/93xjf/eMc4/3jI + OP95yjj/eco4/3O+NfBbmCueJj4SOQAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAATQGkeTXC7NMWB1jz9g9s9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/fdA6/3K/Nf9wvDX/cb41/3K+Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bE + N/92xTf/d8Y3/3jHOP94yDj/eck4/3rLOP94xzj9Z6wwxjleG04AAAATAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABNKeyNadsQ32ILZPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf98zzr/cbw1/2+6NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PA + Nv90wTb/dcI2/3XDN/92xDf/dsU3/3fGN/94xzj/eMg4/3nJOP96yjj/eco4/220MtlCbR9bAAAAEwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD01/JFl4yDjeg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3zPOv9wuzT/brgz/2+5NP9vujT/cLs0/3G9 + Nf9xvjX/cr41/3K+Nf9zwDb/dME2/3XCNv91wzf/dsQ3/3bFN/93xjf/eMc4/3jIOP95yTj/eso4/3rL + Of9utzPfQ28fWgAAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKRnQgSXfH + N9eD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fM46/2+5NP9ttjP/brgz/264 + M/9vuTT/b7o0/3C7NP9xvTX/cb41/3K+Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bEN/92xTf/d8Y3/3jH + OP94yDj/eck4/3nKOP96yzn/bbUy2TxkHEsAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAU1WBkxdMI2xIPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf97zTr/brcz/2y0 + Mv9stTL/bbcz/264M/9uuDP/b7k0/2+6NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PANv90wTb/dcI2/3XD + N/92xDf/dsU3/3fGN/94xzj/eMg4/3nJOP95yjj/eso4/2itMMUsSRUyAAAABQAAAAAAAAAAAAAAAAAA + AAAAAQAAAAAAAhAbCBdstDKagtg8/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3vN + Of9ttjP/arIy/2uzMv9stDL/bLUy/223M/9uuDP/brgz/2+5NP9vujT/cLs0/3G9Nf9xvjX/cr41/3K+ + Nf9zwDb/dME2/3XCNv91wzf/dsQ3/3bFN/93xjf/eMc4/3jIOP95yTj/eso4/3jHOP5enSycDBQGGAAA + AAIAAQAAAAAAAAAAAAAAAAAAAAAACFuYKl1+0zvwg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/e8w5/2y0Mv9psDH/arEx/2uyMv9rszL/bLQy/2y1Mv9ttzP/brgz/264M/9vuTT/b7o0/3C7 + NP9xvTX/cb41/3K+Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bEN/92xTf/d8Y3/3jHOP94yDj/eck4/3rL + OP9zwDXxTH8kYAAAAAgAAAAAAAAAAAICAAAAAAACNVcYJHjIN8KD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf96zDn/arEx/2itMP9przH/abAx/2qxMf9rsjL/a7My/2y0Mv9stTL/bbcz/264 + M/9uuDP/b7k0/2+6NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PANv90wTb/dcI2/3XDN/92xDf/dsU3/3fG + N/94xzj/eMg4/3nJOP95yjj/aa8xxChDEyUAAAACAAMAAGWbKQAAAAAGZ6wwbYHYPPmD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/3rLOf9psDH/Z6ww/2itMP9orjH/aa8x/2mwMf9qsTH/a7Iy/2uz + Mv9stDL/bLUy/223M/9uuDP/brgz/2+5NP9vujT/cLs0/3G9Nf9xvjX/cr41/3K+Nf9zwDb/dME2/3XC + Nv91wzf/dsQ3/3bFN/93xjf/eMc4/3jIOP95yjj/dcQ2+laOKG8AAAAGMl8cAAAAAAA2WRkdesw5wYPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/eco5/2iuMf9lqi//Zqsw/2esMP9orTD/aK4x/2mv + Mf9psDH/arEx/2uyMv9rszL/bLQy/2y1Mv9ttzP/brgz/264M/9vuTT/b7o0/3C7NP9xvTX/cb41/3K+ + Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bEN/92xTf/d8Y3/3jHOP94yDj/eco4/2qxMcMoQxMeAAAAAAAA + AAJkpy5Rgdc88oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf95yjj/Z6ww/2SnL/9lqS//Zaov/2ar + MP9nrDD/Z60w/2iuMf9przH/abAx/2qxMf9rsjL/a7My/2y0Mv9stTL/bbcz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PANv90wTb/dcI2/3XDN/92xDf/dsU3/3fGN/94xzj/eck4/3jJ + OPRWjyhVAAAAAgAAAAp3xjeUg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3jJN/9lqi7/YqUt/2Om + Lf9jpy7/ZKgu/2WqLv9mqy//Zqwv/2esL/9nrTD/aK4w/2mwMP9psTD/arIx/2qyMf9rtDH/bLUx/2y2 + Mv9ttzL/bbgy/265M/9vujP/b7sz/3C8NP9wvTT/cb40/3K+NP9yvzX/c8A1/3XCNv91wzf/dsQ3/3bE + N/94xzf/ftE7/4LYPP9sszKYAAAAC0x9IyJ/0zvMg9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/j9xS/7XY + mf+21J//t9We/7fVnv+31Z//uNaf/7jXn/+415//uNif/7nYn/+52J//udmg/7rZoP+62qD/utqg/7rb + oP+726D/u9yg/7vcof+73aH/vN2h/7zeof+83qH/vd+h/73fof+94KL/veCi/77gov++4aP/uN+a/4LH + S/90wTX/dcM3/3bFN/990Dr/g9o9/4PbPf93xjfPPGIbJWmvMUiC2Dzsg9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jv/lt9a//H66v///v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v//7fbm/4bIUf9ywDT/dcM2/3zPOv+D2j3/g9o9/4PbPf990DruWJIpTHXDNnOD2j36g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2jz/i9xJ/+L10////f///f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f///v//2+7M/3nBP/9zwDb/fM46/4PZPf+D2j3/g9o9/4PaPf+A1jv7ZqsveHvO + OZuD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/8nurP///f///f39//39/f/9/f3//f39//39 + /f/+/v///v7///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+ + ///+/v7//f39//39/f/9/f3//f39//39/f///v//vuCi/3K/Nf97zTn/g9k9/4PaPf+D2j3/g9o9/4Pa + Pf+C2Dz/b7kzn37TOraD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdo6/6jld//5/Pb//f39//39 + /f/9/f3//f39//z9/P/m8N7/5e/d//z8+//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//Pz8/+fy3v/o8t///P38//39/f/9/f3//f39//39/v/3+vT/mM9t/3nMNv+D2T3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2T3/dME1uoDVO8mD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto8/4vc + Sv/g9c7///3///39/f/9/f3///7//+Lt2f97s0//erNN/+Ht1////v///f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f///v//4e/W/4G+UP+EwFT/5fHc//7+///9/f3//f39///+///Z7cn/gs9F/4LZ + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/d8c3zIHXO9OD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaO/+v54P/+vz4//39/v/9/f3///7//9zq0f9wrEH/cq5D/97r0////v///f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f///v//3OzP/3e4Q/98u0n/4u/X///+///9/f3//f3+//n8 + 9/+r4n7/gdk7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/eco41oHXPNOD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+J3Eb/1fK+//79///9/f3//f39//r7+f/Y58v/2enN//v8 + +v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+vv5/9nqy//c7ND/+/z6//39 + /f/9/f3//v3//9Pxu/+I20X/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/eco41oHX + O8iD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/mOBe/+j33P/+/f///f39//39 + /f///v////7///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39///+ + /////v///f39//39/f///f//5/fa/5fgXP+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/eMk3zIHWO7WD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/6Tj + cf/u+eX//v3///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//79///t+OT/o+Nv/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/d8Y3uYDVO5iD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaPP+k43H/6ffe//79///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3//+n33f+k43D/gto8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2Tz/dMI2nH/TO26D2j37g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/meBg/9fywP/5/Pf//v3+//39/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//79/v/5/Pf/1vLA/5ngX/+C2jv/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+B1zz7cbw0cn3QOUCD2j3rg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/4vcSv/Z88T/9Pru//j8 + 9v///f///v3///79/v/9/f7//f39//39/f/9/f7//v3+///9/////f//9/v0//T67//Z88T/i9xK/4La + O/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/1Dvta7IxQ3jI + NxiD2jzJg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5zh + ZP/h9dH/peRy/6jldv/L767/5PbV//D56f/3+/P/+fz3//n89//2+/P/8Pno/+L10//I7qr/peRy/6jl + eP/l9tf/m+Fj/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf98zznMYKAsGhoWBwGC2DyOg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/httC/9Dwtv/C7KH/g9o9/4HZOv+D2j7/jNxK/5bfW/+f4mr/pORx/6Tjcf+f4mn/ld9a/4vc + Sf+D2j3/gdk6/4TaP//J7qv/0fC3/4bbQv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf94xzeRAAAAAonkQACA1jtFg9s98oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jv/quV6/+D1z/+S3lT/gto8/4PaPf+D2j3/gto8/4LaO/+B2jr/gdk6/4HZ + Ov+B2jr/gto7/4PaPP+D2j3/g9o9/4LaO/+W31r/5PbW/6nlef+C2jv/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DVO/NxvTRIfdI7AH7TOwB8zjgPg9o9vIPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+K3En/2fPF/7PoiP+C2jv/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/uemS/9vzx/+K3Ej/g9o8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3zPOb5kpy0QabExAG+4MACK50IAgtk8X4Pb + PfmD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+L3En/ruaB/4rcSP+D2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/jN1L/7Dn + g/+K3Ef/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdc8+nbFN2KQ8UUAVIkjAHTF + AwCB1z0AgNU7E4PbPb2D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o8/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fdE6v2y0 + MhRvuTUAacwCAAAAAAB6zjsAhd8+AIPaPEyD2z3vg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+B1zzweMg3ToPcPQBjpy8AAAAAAAAAAAD//7EAgNU6AIDSOgWD2z2Og9s9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf980DqQZqkuBm63MgDU/3oAAAAAAAAAAAAAAAAAAAAAAIPaPQCC2TwbhNs9vYPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DVO792xDccess4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIXX + PgCD3DwAg9s9MoTbPdSD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdc81XvNOTOD2jwAZ6kyAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB+zTkAiu5CAIPbPEOE2z3dg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2TzdftE6RJv/SwBusTIAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhtw9AGLhRwCE3D1DhNs91YPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPdWB1jxE///hAH3N + OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAILYPACH5T8AhNw9M4Tc + Pb+D2z39g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j39g9s9v4HY + PDOS9kUAe804AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACG3j8AhNw9AITcPRuE3D2Pg9s98IPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + PfCE2z2PhNs9G4bfPQCB2D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAITbPACE2zwGhNw9TYTcPb6D2z35g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2z35hNs9voTcPU2E2zwGhNs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI5DMAgtdCAIXdPBOE3D1hhNw9voPb + PfOD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9s984TbPb6E3D1hhd09E4LWQgCI5TMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIzh + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAABQDBAIkOFsbU2OlLqx4yDjvgdc8/4Pb + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2T3/e805/3PANv9zvzb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3nJOP95yjj/eMg3/3C6NO9cmCusMlMYVAME + AiUAAAAUAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACwAAABkbKw01V48ph3TB + NuKA1jv/g9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2T3/e805/3K/ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nK + OP96yzj/eMc3/2yzMuNPgyWIFyYMNQAAABkAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADQAA + AB01WBpMaK0wt33QOvmD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2T3/esw5/3K+Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yzn/dME2+WCfLLgwThdNAAAAHQAAAA0AAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAADgAAACBHdiFicr411oHXPP+D2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2T3/ess5/3G8NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/dME2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3rLOf94yDj/aa4w1z9p + HmQAAAAhAAAADgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADQYKAyNRhiZydsU35YLZPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eco5/3C7NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP95yjj/eso5/3rKOP9ttjLlR3YhdAUIAiMAAAANAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAYJAyFVjih5eco47IPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eco4/2+6M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yjn/ess5/2+5NO1MfCN7BAcCIgAAAAwAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQAAABxUjCdxess57IPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eck4/265 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3rKOf96yzn/cLo07Ul5 + InMAAAAdAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA + ABZNgCRfeMk45IPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2T3/eMg4/223M/9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv90wTb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP95yjj/eso5/3rLOf9utzPmQm0fYQAAABcAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABA/aB1HdsQ21YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/eMg4/2y1Mv9stDL/bLUy/222M/9ttzP/brgz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yjn/eso4/2qvMdc0VRhIAAAAEAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAojOhAsb7oztYLYPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/d8c4/2y0Mv9rsjL/a7My/2y0Mv9stTL/bbYz/223 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3rKOf94yDj/YaIttxsu + DS0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAXYqQug3/VO/qD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/d8Y3/2uyMv9qsTH/arIy/2uy + Mv9rszL/bLQy/2y1Mv9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP95yjj/ess5/3XCNvpTiieGAAAAGAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMSXoiSXvN + OeKD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/d8Y3/2qx + Mv9przH/abAx/2qxMf9qsjL/a7Iy/2uzMv9stDL/bLUy/222M/9ttzP/brgz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3TBNv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yzn/bbYz4zphG0wAAAAMAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAFFyUKHnG8NKiC2Tz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2T3/dsU3/2mvMf9orTH/aa8x/2mwMf9psDH/arEx/2qyMv9rsjL/a7My/2y0Mv9stTL/bbYz/223 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3jIOP9fni2sDxoIHwAA + AAUAAAAAAAAAAAAAAAAAAAABAAAACliSKVh/1Dvvg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/dsQ3/2iuMf9nrDD/aK0w/2iuMf9przH/abAx/2mwMf9qsTH/arIy/2uy + Mv9rszL/bLQy/2y1Mv9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP96yzj/cbw08EZ0IVsAAAALAAAAAQAAAAAkKgcAAAAAAxwtDBt1wzaug9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/dcM3/2etMP9mqzD/Z6ww/2esMP9orTD/aK4x/2mv + Mf9psDH/abAx/2qxMf9qsjL/a7Iy/2uzMv9stDL/bLUy/222M/9ttzP/brgz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eco4/3jIN/9ioy2xEiAJHQAAAAMGIAYAAAAAAAAAAAdYkyhLf9U764Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/dMM2/2arMP9lqS//Zaov/2ar + MP9nrDD/Z6ww/2itMP9orjH/aa8x/2mwMf9psDH/arEx/2qyMv9rsjL/a7My/2y0Mv9stTL/bbYz/223 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/dME2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yjj/cLs07EVyIE8AAAAHAAAAAAAA + AAICAwAQcr81k4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/dMI2/2Wp + L/9kpy//Zakv/2WpL/9lqi//Zqsw/2esMP9nrDD/aK0w/2iuMf9przH/abAx/2mwMf9qsTH/arIy/2uy + Mv9rszL/bLQy/2y1Mv9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eck4/3rM + OP9jpS6YAQAAEQAAAAIAAAADRnMgKn7ROtGD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2Tz/c8E2/2SoLv9jpi3/Y6Yu/2SnL/9kqC//Zakv/2WqL/9mqy//Z6ww/2esL/9nrTD/aK4w/2iu + Mf9przD/abAx/2qxMf9qsjH/a7Iy/2uzMv9stDH/bLUy/2y2Mv9ttzP/bbgz/264M/9uuDP/b7kz/2+6 + NP9wuzP/cLw0/3C9NP9xvjX/cb41/3K+Nf9yvzX/c782/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3vNOv+C2Dz/dME21TdaGS0AAAADAAAABmisMFmC2Tz0g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2T7/eMM8/2ipNf9nqDT/aKk1/2ipNf9pqTX/aao1/2mrNf9qrDb/aq02/2uu + Nv9srjb/bK82/22vN/9tsDf/bbE3/26yN/9uszf/b7Q4/2+0OP9wtTj/cLU4/3G2OP9xtzn/cbg5/3K5 + Of9yujn/c7o5/3O7Ov9zuzr/dLw6/3S9Ov91vjv/db87/3bAO/92wDv/d8A7/3fBPP93wjz/eMI8/3XC + OP91wjb/dcM3/3bEN/92xDf/d8U3/3vMOf+C2Dz/g9s9/33QOvZWjyheAAAABgEAAA13xjeRg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/lt5c/8ritv/N4b3/zeG9/87ivf/O4r3/zuK9/87i + vf/O4r3/zuO9/87jvv/P5L7/z+S+/8/kvv/P5L7/z+S+/8/lvv/P5b7/0OW+/9Dlvv/Q5r7/0Oa+/9Dm + vv/Q5r7/0Oa+/9Dnvv/Q57//0ee//9Hov//R6L//0ei//9Hov//R6L//0um//9Lpv//S6b//0um//9Lp + v//S6b//0+rA/8znt/+JylX/c8E0/3XCNv91wzf/dsQ3/3rLOf+C2Dz/g9o9/4PaPf+B1zz/Z6wwlgAA + AA49ZBweftI6wIPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5nhYP/z++z///7////+ + /////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v////7////+/////v////7////+///v9+j/icpW/3LANP90wTb/dcI2/3rLOf+B2Dz/g9o9/4Pa + Pf+D2j3/g9o9/3K+NcQtShUgXp4sOYHXPOCD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+O3U7/5/fa//79///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f///v//3/DS/3zDQ/9yvzX/c8A2/3nJ + OP+B1zz/g9o9/4PaPf+D2j3/g9o9/4PbPf95yjjjS30jPm22MlmC2Tzyg9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/hdtA/9Pxu////f///f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3///7//8jl + sP9zvzf/cr81/3jIOP+B1zz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fdE69FqWKl52xTd8g9o9/IPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaO/+26Y7//P38//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79/v/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//v8+v+n1oL/cL0z/3fHOP+B1zz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DV + O/xlqC+Ce805l4PaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/meBf//D5 + 6P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//Pz8//P48P/5+vf//v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//n7+P/0+PD//P38//39 + /f/9/f3//f39//39/f/9/f3//f39//7+///r9eT/h8dU/3bGNv+B1zz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+B1zz/bLMxnH3ROquD2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4bbQf/R8Lf///3///39/f/9/f3//f39//39/f/9/f3/+/z7/77ZqP+CuFj/n8h+/+/1 + 6v/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//D2 + 6v+k0IH/isNc/8Tgrf/8/Pv//f39//39/f/9/f3//f39//39/f///v//xuOu/3jGOv+B1zz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtk8/2+6M7B/1Du6g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/peRy//b78f/+/f7//f39//39/f/9/f3//v7+/+zz + 5/97s1D/XqMp/2WnMf/M4bv///7///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39///+///L47f/bbM0/2exLf+GwVf/8Pbr//79/v/9/f3//f39//39/f/+/f7/8/jv/5rV + av9/1jr/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP9zvzW/gNU7woPa + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/4fbRP/R8bj//v3///39 + /f/9/f3//f39//79/v/z9/D/jr1p/2GkLP91sEf/3evS///+///9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f///v//2erL/3i5Rf9qsjH/m8t1//b69P/9/f7//f39//39 + /f/9/f3//v3//83ts/+F2EL/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/dMI2x4DWO8KD2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jv/nOFk/+755f/+/f///f39//39/f/9/f3//f3+/+Xv3f+/2qv/2OjL//v8+//9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//r8+f/V6cb/xOCu/+rz + 4//+/f7//f39//39/f/9/f3//v3//+344/+a4WH/gto7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o8/3XDNseA1Tu6g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+26Y7/+fz3//39/v/9/f3//f39//39/f/+/v7///7////+ + ///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3///7////+///+/f7//f39//39/f/9/f3//v3+//j89v+06Ir/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP90wTa/f9U7qoPaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/iNtE/8nuqv/8/fz//f3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//z9+//H7af/h9tD/4Pa + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2Tz/cr41r3/T + O5WD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+N3Uz/0fG5//39/P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//39 + /P/Q8Lb/jNxL/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gdg8/3C7NJp90Tp4g9s9/IPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/43dTf/O77L/+/z6//79/v/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//v3+//v8+v/N77H/jd1N/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DWO/xttTJ+e805U4PbPfKD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/itxI/7/rnP/0+u///v3///39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//v3///T67v+/65v/itxI/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/0zvzaKwwV3jHNzCD2j3gg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+F2j//qOR2/+H10P/8/fv//v3///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/v/+/f///P37/+D10P+n5Hb/hNo//4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fM454mGi + LTRstDATgtk8vYPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HZOv+n5Hb/9fvw/+/55//5/Pb///3///79///9/f7//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//v3///79///3+/T/7/nn//b78f+n5HX/gdk6/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/3jIOMFRhyUVJS8LAoHXPIuD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+H20T/0vG6/+P21P+a4WH/q+Z8/8/w + tP/q997/9/vz//z9+//+/f////3////+/////v////3///79///8/fv/9vvy/+f32//L76//p+R1/53h + Zf/p997/0vG5/4fbRP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPP9zwDWPDQ8DA5X/SAB/1DtOg9s99YPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/q+V7//L6 + 7P+u54H/gdk6/4HaO/+F20D/kd5S/6Pjb/+z6Ij/wuyf/8rurf/P8LX/z/C1/8rurP/A7J3/seeG/6Hj + bP+P3VD/hNo//4HaOv+C2jv/t+mO//T78P+q5Xv/gto7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/1Dv2bbUyUoftQQCE3kQAess4G4Pa + PdCD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jz/jd1N/+H10P/W8r//idxG/4PaPP+D2j3/g9o9/4LaPP+B2jr/gdo6/4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/gto7/4HaOv+B2jv/gto8/4PaPf+D2j3/gto8/4zdS//e9Mv/4PXQ/43dTf+C2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/e8050mKk + LR5qszcAZaY4AEx8IwKC2TyLg9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o8/7rqk//w+ej/oOJr/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/p+V2//T6 + 7v+56pL/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg8/3XDNo8pQBMDSXcqAGSSGwCL7kUAgNU7O4PbPeqD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5bgW//r+OH/x+2n/4XaP/+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o8/4bbQv/P8LT/7Pjh/5bfW/+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/37SOuxttjI/e9Q9AFmCGACW2iAAdsk/AHrJNwmD2jyng9s9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaO/+n5HX/3fTK/5Tf + WP+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/muFh/+H10f+l5HL/gto7/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf95yTiqW5YoClycMQCEvxwAAAAAAFSM + IACO7UcAgdc8RoTbPe6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/iNtE/47dTv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4TaPv+P3VD/h9tD/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/1Dvvcbw0Sovm + RQBAaxgAAAAAAAAAAACF6RQAd8pAAHnJNwiD2z2gg9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gto8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2Tz/ess4o1yaKwlfoTMAe9sUAAAAAAAAAAAA//8AAGquTACF4D0Agtk8NITbPeCD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/f9M74nO/NTd70DgAVY09AP//AAAAAAAAAAAAAAAAAAC2/1sAc842AH+x + LwGD2j11g9s9+oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdg8+3jJOHc6XBgBYKgtAInMRAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMr/aAB+1zoAgdY8EoPbPa6D2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/33QOrBuuTMTccA0AJLY + SwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARHYcAILhPACC2TwuhNw904PbPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DV + O9R2xTcwe9Y5ADNYEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//EABZx04Af+E+AIPb + PUmE2z3kg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4HXPOV7zDlKkv5EAEygPAD//xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6f96AHfPNAB8xzcCg9o8X4TbPe2D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPO590DphYZgsAme2LgD//4kAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg9o7AIPYOQSE3D1phNw97YPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPe5/1Dtqcrs0BHjHNwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACD2T0Agtc8BITb + PWCE3D3kg9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPeWA1jxhd8U5BXvM + OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAILXPACB0jsChNw9SoTcPdSD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + PdSB2DxKdcA1AnvMOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi986AFvEUACE3D0vhNw9r4TbPfqD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9s9+oTbPa+D2jwvhf9qAIbWNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI3TsAgto9AITb + PRKE3D12hNw94oPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2z3/hNs94oTcPXaE2zwSgto+AIreOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACE2D0Ag9c9A4TcPTaE3D2ihNs974PbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+E2z3vhNw9ooTcPTaE1z0DhNk9AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AACF3D0Ahdw9CYTcPUiE3D2phNs97IPb + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/4TbPeyE3D2phNw9SIbdPQmG3D0A//8AAP// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv/wAAb/8AAGb/ + AACB2jgAht48CYTcPT2E3D2OhNw90oTbPfaD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf+D2z32hNw90oTcPY6E3D09ht48CYDa + OgBj/wAAb/8AAG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH3zoAiuI+A4XdPByE3D1QhNw9jYTcPcCE2z3ihNs99IPb + Pf2D2z3/g9s9/4PbPf+D2j3/g9o9/4PaPf+D2z3/g9s9/4PbPf2D2z30hNs94oTcPcCE3D2NhNw9UIXd + PByK4j4Dh986AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgdQ6AIze + QgOF3T0ShNw9MITcPVSE3D16hNw9l4TcPa6E3D2/hNw9x4TcPceE3D2/hNw9roTcPZeE3D16hNw9VITd + PTCF3j0SjN9CA4LUOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAAAB/////gAAAAB////8 + AAAAAD////AAAAAAD///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//AAAAAAA + AD/4AAAAAAAAH/gAAAAAAAAf8AAAAAAAAA/gAAAAAAAAB+AAAAAAAAAHwAAAAAAAAAPAAAAAAAAAA4AA + AAAAAAABgAAAAAAAAAGAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAcAAAAAAAAADwAAAAAAAAAPgAAAAAAAAB+AA + AAAAAAAH8AAAAAAAAA/wAAAAAAAAD/gAAAAAAAAf/AAAAAAAAD/+AAAAAAAAf/4AAAAAAAB//wAAAAAA + AP//gAAAAAAB///AAAAAAAP///AAAAAAD///+AAAAAAf///8AAAAAD////8AAAAA/////8AAAAP///// + 8AAAD//////+AAB///8oAAAAgAAAAAABAAABACAAAAAAAAAAAQATCwAAEwsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABQAAAAgAAAAMAAAAEQAAABUAAAAaAAAAHwEB + ACMDBgEoBgcDKwYHAi4GCQMvBgYELwMDBC8CAQMxDhcKOiAzEEcsRRVRNFMaWzleHGM9ZB1rQWsgdUZ0 + In5IeCOES3sjh0t7I4dIeCOERnUifkJsIHU9Yx5qNVcaYzBMGFsnPxRRHS4PRw4VCToBAQMxAQEELwID + BC8EBwMvAwcCLgQGAysDBgEoAQEAIwAAAB8AAAAaAAAAFQAAABEAAAAMAAAACAAAAAUAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAADAAAABgAA + AAkAAAANAAAAEwAAABgAAAAeAQEAIwMFACgEBgIrBAQDLAMEAy8JCwcyCxAHNyE1EUk4WxtkRnMhfFCD + JpNYkyusYJ8twmapL9FqsDLdbrcz5nG7NOxzvzXwdcM283bFN/V3xjf2d8Y49nbFN/V2xDfzc7818Guz + Muxkpy/mYaAt3V2ZK9FYkinDUYYmrEl4IpNAaR98NFQZZB8xD0kLDwc3BwkGMwQEAy8CAwMsBAYCKwEF + ACcAAQAjAAAAHgAAABgAAAATAAAADQAAAAkAAAAGAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAEAAAADAAAABgAAAAoAAAAQAAAAFQAAABsBAgAhBAUBJwQGASsCAwEtAQECLhEZ + CTklOhNJOl8dZ06BJZFaliu1ZKcv0221MulzvzXzeMk4+33QOv9/1Dv/gNY7/4LYPP+C2Tz/gto8/4Pb + PP+D2zz+g9s8/oPbPP6D2zz+g9s8/oLaPP5+0Tr/d8c2/3bENv91wzb/dME1/3TANf9yvjT/brcz+2mv + MPNkpi7pXZor01SLJ7VIdyKRNVcaaCE2EkkPFwk6AQECLwEBAi0CBgEsAgUBJwECACEAAAAbAAAAFQAA + ABAAAAAKAAAABgAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAABgAAAAoAAAAQAAAAFwAA + AB0BAgEjBQcCKQQHAi0FBQMvDRIJNixIFlJEciB4V5ApqGSmLtNvuDPud8Y3/HzPOf6B1zv/g9o8/4Pa + PP+D2zz+g9s8/oPbPf6D2j3/g9o9/4PaPP+D2jz/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2T3/fdA6/3bF + N/91xDb/dsQ2/3bEN/92xDf/dsU3/njGNv54xjb+d8Y2/3fHNv92xTb/c741/m62M/xmqjDuXZor01GF + JqlAaR55KUIUUwsRCDcEBgQvBQcCLQMGAikAAQEjAAAAHQAAABYAAAAQAAAACgAAAAYAAAADAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAACAAAABQAAAAkAAAAPAAAAFgABAB0CAwAkBQYCKgEBAS0IDAYzGyoPQkFrH3FWjyimZakw1nG9 + NPF6zDn9f9Q7/4LZPP6D2zz+g9o8/oPaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtk9/33QOv92xDf/dcI3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fHN/54yDf+eck3/njIN/51xDb/cbw0/WqvMPFenCzWUIQlpztiHHEYJg5CBwoGMwEB + Ai0BBAIqAQMAJAABAB0AAAAWAAAADwAAAAkAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABAAAAAgAAAAOAAAAFQAAAB0DBAEkBQYCKwMD + Ai0OFgg2ME8YVU2BJY1hoS7KcLk08nnKOP2A1jv/g9o8/4PbPf6D2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PZPf98zzr/dcQ3/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + N/95yjf+eMk3/3fGN/9xvTT9aK0w8VqVKstHdiKOLEgWVg0UCDYDBAItAwYCKwIEASQAAAAdAAAAFQAA + AA4AAAAIAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAA + AAYAAAAMAAAAEgAAABoDAwAiBQYCKQUEAy4MEQc1OFsaYFSLKJ5mqjDadMI2+n3ROv+C2jz/g9o8/oPa + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/fM86/3XDN/90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eck3/3rKN/55yjf/dcM1/2y1 + MvpfnizbToAlnzRUGWALEAg1AwMDLgEDAikAAwAiAAAAGgAAABIAAAAMAAAABgAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAJAAAADwAAABcBAQAgBAYCKAIDAiwOFQg1N1kaXFeQ + KaZqsDHkd8Y3+4DVO/+D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9k9/3zOOv90wjf/c8A2/3TB + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP96yjf/ess3/nbGNv9vuTT7Y6Qv5FCEJqcyURhdDBMINgEC + AiwDBAIoAAEAIAAAABcAAAAPAAAACQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAGAAAADAAA + ABMAAAAcAwQBJQUFAisJDQYyMFAXVFWNKJ5qsDHjeMg3/YHXO/+D2z3+g9s9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf98zjr/dME2/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/ecs3/3nLN/54yTf/cLs0/WKiLuROgCWfLEgWVQkNBjMCBQIrAwQBJQAAABwAAAATAAAADAAA + AAYAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAA4AAAAWAQIAIAMFACgDAwItGykOPk6AJYhlqC/TdsU2+4DW + O/6D2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/fM46/3PANv9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nLOP96yzj+eMc3/m+4 + M/tdmizURXIhihglDT8CAgMtAwUAKAECACAAAAAWAAAADgAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAkAAAAQAAEAGgME + ASQDBAIqDRQGMz9nH2Zgni29c781937TOv+C2jz+g9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtk9/3vNOv9zwDb/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP96yzj/e8s5/nfFN/9rsjL3Vo8pvzdbG2gMEwc0AwQCKwIE + ASQAAQAaAAAAEAAAAAkAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAUAAAAKAAAAEwABABwEBgImAgMCLSI3EUNShyeQbLMy5XvMOf6C2Tz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf97zTn/csA1/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/ess5/3rLOP9yvjX+YqQu5kh5IpIeMhBEAQMCLQIEAiYAAAAcAAAAEwAAAAoAAAAFAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAACwAAABQBAgAeAwQCKAME + Ai45XhtdYJ8tvXTBNvd/1Tv/g9o9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2T3/e806/3PANv9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TB + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3vLOP54yDf/a7My+FeQ + Kb8zUxleAwQCLgMEAigBAQAfAAAAFAAAAAsAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABQAAAAwAAAAWAgQAIAQEACkYJQw5THwkfGqwMd57zDj+g9o8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtk9/3rMOf9yvjX/cLw0/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rLOP96yzj+c781/mGgLeBCbh9/FiELOgEEASoCBAAhAAAAFgAA + AAwAAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAFgQGAiIAAAApIjcRQFmS + KptxuzXuf9Q7/4PaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LY + Pf97zDn/cr41/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rK + Of96zDj+dsY3/2erMO9OgCSeHjAPQQAAACkCBAIiAAAAFgAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAGAAAADQAAABcEBgIjAgMBKitHFUlfniy0dsQ3+ILYPP+D2z3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/ess5/3G9Nf9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96zDn/eck4/220MvlVjCe3JT0SSgID + ASsEBgIjAAAAFwAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAAAA0AAAAXBQYCIwMEAiw3WRpVY6YuwnnJ + OP2C2Tz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3rM + Of9xvDX/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rKOf96yzn/ess4/nG7NP1YkinEL0sXWAQFAi0DBwEkAAAAFwAAAA0AAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAUAAAAMAAAAFgUGAiMGBwItPWQdXmisMc56zDj9g9o8/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf96yzn/cLs0/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzj/e8w4/nK+ + NP1cmCvQM1UYYQQIAi0DBgIjAAAAFgAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAACwAAABUFBgIiCA0ELUJtIGVrsjLYfdA6/4Pa + Pf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/ess5/3C7 + NP9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/esw5/nTBNv9enSzaOl0baAgNBC4DBgIiAAAAFgAA + AAsAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAoAAAAUBQcCIQYHAitDbx9ka7My133ROv6D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtk9/3nLOf9wuzT/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rK + Of96yzn/esw5/nXBNv5fnSzZOl4bZwQIAiwDBwIhAAAAFAAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAJAAAAEgQGAh8EBQIqP2kfXmy0Mtd90Tr+g9o9/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf95yjn/b7o0/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/e8w5/nXCNv5fnSzaNVcZYQMG + AioEBgIfAAAAEgAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABwAA + ABAFBwIdAQABJzthHFRrsjHOftI7/4PaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/eco4/2+5NP9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rKOf96yzn/esw5/nTBNv9cmivRMFAYWAABASgDBQIdAAAAEAAAAAcAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAANAwUAGgAAACQtSxZGaK0wwXzPOf2D2j3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3nKOP9uuTP/bLUy/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TB + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/esw5/nO/ + NP1alCrFJj4SSAAAACQCBQAaAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACwID + ABYEBAEjJT0SPWWoL7N7zjn9g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf94yTj/brgz/2y0Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/e8w5/nG8NP5Wjii3HzMPPwADASMAAgAWAAAACwAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgBAQASAwMCHxsrDDRfny2Zecs4+YLaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/eck4/223M/9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rK + Of96yzj/e8w4/262M/pPgiWeFiMLNgIEAh8AAQASAAAACAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADwUI + AhwGCQMoVY0nenbGN+6C2Tz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg9/3jIOP9ttjP/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/eck4/2isMPBFciB/BAcDKQMF + AhwAAQAPAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAsEBwEXAgQAJENwH1lzvzXegdc7/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf94yDj/bLUz/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rKOf96zDn/d8Y3/mKjLeE2WRlcAQMAJAMGARcAAAALAAAABAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAgMBEgIC + AR8qRxQ+a7MyvX/UOv6D2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2D3/eMg4/2y1Mv9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf97zDj+dME1/1mT + KcEiOhBBAwQCHwIDARIAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA4DBgAaDRUFKl+eLI57zjn3g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg8/3jHOP9stDL/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzj+bLUy+Ex/JJQLEgUrAwYAGgAAAA0AAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAJBQcCFQAA + ACFNgCNhdsU35YLZO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZ + Pf93yDj/a7Qy/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rL + OP94yTf/Zagv6D1lHGYAAQAiBQcCFQAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABgMFAA8EBwEdJDsRN263M7x/1Tv+g9o8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/d8c4/2uzMv9przH/abAx/2mwMf9psDH/arEx/2qx + Mf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3vLOP50wTb+WZUqwRosDTkECAEdAwUADwAA + AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAKBgoDFgwS + BSZfniyEfM8594PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3fG + OP9qsjL/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rLOP9stDL4SnoiigoRBSgEBwMWAAAACgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABgYHAQ8AAAAbQmwfTHXDNtOB2Dv/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPP93xjf/arEx/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mw + Mf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/ess5/3fGN/9goC3XMlQZUAAA + ABsBBgEPAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBAAAKBgcCFhQi + CilorjCcgNU7/IPbPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/d8U3/2mw + Mf9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/e8s4/nC6NP1SiCehEBwIKgEEAhYAAAAKAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQcJAg8BAAAcSXohVHnKOOSD2jz+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtg8/3fGN/9psDH/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mv + Mf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP96yjj/eMg4/mWo + L+c4XRpZAAIAHAUKAg8AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAICAoCFQ8Z + BydstDKjgdc8/YPbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf92xTf/aa8x/2es + MP9nrDD/Z6ww/2esMP9orTD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qx + Mf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP96yzj+cr01/lSLKKkMEwYoAwkCFQACAAgAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAYHAQ0AAAAZT4MkVnvOOeSE2z3/g9o9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2Dz/dsU3/2iuMf9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2it + MP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP55yTf/Zqkv5zxiHFwAAAAaAgcBDQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHCAoDEhQh + CSVstTKbgdg8/YPbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3bFN/9orjD/Zaov/2Wq + L/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9orTD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mw + Mf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3rLOP5yvTT+VIonohAdCSgABgISAAAABwAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAwoMAgsAAAAWSXohSnrNOdmD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LYPP91xDb/Z60w/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2es + MP9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/ecs4/3jHN/9kpS7eN1saTwAAABYEDAILAAAAAwAAAAAAAAAAAAAAAAAAAAEAAAAFDBIGEA0U + Bh9przCHgdg8+4PbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/dcM3/2esMP9kqC//Zakv/2Wp + L/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mv + Mf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/ess3/m+5M/tQhSaQDBQGIAwS + BhAAAAAFAAAAAQAAAAAAAAAAAAAAAgUJAAgGCgEUMlMYM3nKOMiD2zz/g9o9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg8/3XDN/9mqzD/ZKcv/2SoL/9kqC//Zakv/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2es + MP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qx + Mf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yjf+eMk3/2SnL84oQRQ3BgsBFAUJAAgAAAACAAAAAAAAAAAAAAADCgwDDAIB + ARhfnyxngNY88oPbPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf91wzb/Zqov/2OmLv9kpy//ZKcv/2So + L/9kqC//Zakv/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2it + MP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3vNOf+A1jv/c8A29Et9 + JG8CAwEZCQwDDAAAAAMAAAAAAAAAAQMEAQUNEQQPGCYKInTBNqKD2jz9g9o8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+B1zz/dcM3/2aqL/9jpi7/Y6Yu/2OmLv9kpy//ZKcv/2SoL/9kqC//Zakv/2WpL/9lqS//Zaov/2Wq + L/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mw + Mf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP96zDn/gNU8/4PaPP58zzn+Xp0sqRQhCSUNEAQQAwQBBQAAAAEAAAACBQUBBwAA + ABFNfyRCfdA604TbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg8/3XDNv9lqi//Y6Uu/2OmLv9jpi7/Y6Yu/2Om + Lv9kpy//ZKcv/2SoL/9kqC//Zakv/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2es + MP9orTD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/ess5/4DVPP+D2j3/g9o8/4LY + PP9rszLZPGMcSQAAABEFBQEHAAAAAgAAAAMRFgUKAAAAFGisMG6C2Dzxg9s9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HX + PP90wjb/Zakv/2KlLv9ipS7/Y6Yu/2OmLv9jpi7/Y6Yu/2OmLv9kpy//ZKcv/2SoL/9kqC//ZKgv/2Wp + L/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mv + Mf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bLUy/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cLw0/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3rLOP+A1Tz/g9o9/4PaPf+D2j3/g9o8/nbFN/RShiZ2AAAAFhEVBQoAAAADAAAABAwQ + Bg0mPBEid8Q3oYPbPf+D2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2D7/d8Q5/2apMf9kpTD/ZKUx/2SmMf9kpjH/Zacx/2Wn + Mf9lpzH/Zacx/2WnMf9mqDH/Zqgy/2apMv9mqTL/Z6oy/2eqMv9nqjL/Z6sy/2erMv9orDP/aKwz/2mt + M/9prTP/aa0z/2mtM/9qrjP/aq4z/2quM/9qrzP/aq80/2uwNP9rsDT/a7E0/2uxNP9rsTT/bLI0/2yy + NP9sszT/bLM0/22zNP9tszT/bbQ0/220NP9utTT/brU0/262NP9utjT/brY1/2+3Nf9vtzX/b7g1/2+4 + Nf9wuTX/cLk1/3C5Nf9wuTX/cLk2/3G6Nv9xujf/cbs2/3G7Nv9yvDb/crw2/3K8Nv9yvTf/cr03/3O+ + N/9zvjj/c784/3O/OP90vzj/dL84/3S/OP90vzj/dcA4/3XAOP91wDj/dcE4/3XBOf91wTf/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/95yjj/gNU8/4PaPf+D2j3/g9o9/4Pa + Pf+D2zz+fdE6/2CgLaweMQ4lDREGDQAAAAQQFQQGAAAADkZ0IDZ+0jvPg9s8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/5fa + YP+t0pD/q82P/6vOj/+szpD/rM6Q/6zOkP+szpD/rM6Q/6zOkP+szpD/rM6Q/63PkP+tz5D/rc+Q/63P + kP+tz5D/rdCQ/63Qkf+t0ZH/rdGR/67Rkf+u0pH/rtKR/67Skf+u0pH/rtKR/6/Tkf+v05H/r9OR/6/T + kf+v05L/r9OS/6/Tkv+v1JL/r9SS/6/Ukv+w1ZL/sNWS/7DVkv+w1ZL/sNWS/7DVkv+w1ZL/sNaS/7DW + kv+x1pL/sdaS/7HWkv+x15L/sdeS/7HXkv+x2JL/sdiS/7HYkv+y2ZL/stmS/7LZkv+y2ZP/stmT/7PZ + k/+z2ZP/s9mT/7Pak/+z2pP/s9qT/7Pak/+z2pP/s9uU/7PblP+z25T/s9uU/7TblP+03JT/tNyU/7Tc + lP+03JT/tNyU/7TclP+03ZT/s9yS/43MW/90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/eck4/4DVPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+B1zv/bLMy1zRXGDsDAAAPEBQEBhUf + CgkEBAISYaItWYLZPPCD2zz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/r+aC//b68v/7+/r/+vv5//r7+f/6+/n/+vv5//r7 + +f/6+/n/+vv5//r7+f/6+/n/+vv5//r7+f/6+/n/+vv5//r7+f/6+/n/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//v8+v/z+e//otV5/3PA + Nf90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3jIOP9/1Tz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PbPP50wjbySnwiYwUHAxMUHgoJERgHCg4WBxZyvjWFg9s9/IPaPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+o5Xj/8/ru//79/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//v3+/+735/+Y0Gr/csA0/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/94yDj/f9Q7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/nvMOf1aliqQDBMGFxAY + BwoSFwUMITUQHXvNObCD2z3+g9o9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5/iaP/t+OP//v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v//5PLa/4zK + Wv9yvzT/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/eMg4/3/UPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2jz+f9Q7/2SnL7gXKAwhEhYFDBAWCA5JeyMyf9U704PbPP+D2j3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jv/lN9Y/+L10////f///f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39///+///W7MX/gMVJ/3K/NP9zwDb/c8A2/3PANv90wTb/dME2/3jH + OP9/1Dz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP6C2Tz/bLUy2Dde + GzsQFwgOAAAAD2OlLlCC2DznhNs9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+K3Ef/1PG7///+///9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3///7//8Xk + rP91vzn/cr81/3O/Nv9zwDb/c8A2/3PANv93xjj/f9Q7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPP9zwDXsS34kWgICAA4AAAAObrgzbYPaPPOD2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaO//A657//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/v/6/Pn/r9qM/3C9Mv9yvjX/c782/3O/Nv9zwDb/dsU3/3/U + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/njJ + OPZVjih1AAAADwAAABJ3xTeKg9s9/IPaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdo6/6rlfP/0+u///v3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+/+72 + 6P+Wzmn/cb0z/3K+Nf9yvjX/c782/3bEN/9+0zv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2zz+fNA5/V+cLJIFBQMVMVMXHnvNOaiE3D3/g9o8/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jz/lt9a/+X22P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/+/f7/2+3M/4DESv9xvjT/cr41/3K+Nf92xDf/f9M7/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + Pf5/1Tv/ZakvsChCEyRLfiMsftI6vYTbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+H20T/0PC2//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /P/A4aX/c784/3G+Nf9yvjX/dcM2/37TO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HXO/9rsjHFOmAaMlqWKjmA1TvNg9s8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+v54L/+fz2//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/9fny/5zQcf9xvTT/cb41/3XEN/9+0zv/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg8/2+4M9REcSA/Y6UuRYHXO9uD2zz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto8/5bf + Wv/m9tj//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/v/6+/n/9fjy//r8+f/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pz7//b58//5+/f//f3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79 + /v/b7cz/gsRM/3C8NP91wzb/ftM7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+C2Tz/cr414Ux9I0porTBOgtk85oPb + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/h9tC/8btpf/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/3+vX/yeC4/5fDc/+LvWT/oMh//9no + zP/7/Pr//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3/+/z7/9vszv+m0YT/k8dn/53Ndv/Q577/+Pr2//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pz7/7Xblf9yvDb/dMI2/37SO/+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPP91wzbqT4MkVW63NFyC2jztg9s8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+B2Tr/o+Nu/+755f/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//P38/8PcsP9yrkP/YaUs/2GlK/9jpi7/gLZU/97s1P/+/v7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79/v/f7dL/h8FY/2uzMv9qsy//a7Mw/329 + Sv/L5Lf//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+ + ///n8t3/jslf/3LBM/9+0jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/3fHN/BVjCdlcb41aIPa + PfOD2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+L3Ej/zu+y//39/P/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+///t9Oj/jr1p/2CkK/9ipS7/Y6Yu/2Om + Lv9jpi7/sNGV//v8+v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3/+vv4/6/UkP9rsjL/a7My/2uzMv9stDL/arMv/5rLcv/x9+3//v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pz7/8Dgpv95wz7/ftE6/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2zz+eco49ViUKnJ1wzZxg9s994LaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPP+k5HD/8frq//79/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3///7//+Ht2P99s1P/YKMs/2KlLv9ipS7/Y6Yu/2OmLv+dxnz/+Pr2//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/1+fH/mspz/2uyMv9rsjL/a7My/2uz + Mv9qszD/jMRf/+jz4P///v///f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79 + /v/s9eX/k89j/33ROv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPP56zDn4XZsqe3bF + N3eD2z36gto8/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4jcRv/N77D//P37//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v//6/Pl/4u7Zf9goyv/YqQu/2Kl + Lv9ipS7/ZKYv/7XUm//8/Pv//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//n7+P+r04z/arIy/2uyMv9rsjL/a7My/2myL/+czHb/8/jv//79/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/z6/8Llpf+D1EH/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s8/nvNOftgnyyBd8Y3eoPbPfyC2jz+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/6Hja//s+OP//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/8/Pv/udaj/2upOv9hoyz/YKMs/2OlL/+Btlb/4u3Y//7+///9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+/9nqy/98u0r/arIy/2mx + MP9qsjH/e7tJ/8rjt//9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79 + /v/o9t3/m95k/4LZPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2zz+fM45/GCh + LYR4yDh6g9s9/ILaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/httC/77r + mf/5/Pb//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/0+PH/wdqt/5TB + cf+MvGb/pcqG/97r0//8/fz//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/+vz5/9Pnw/+izn//ksZo/5/Mef/R5sD/+fv4//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/+/f7/9/v0/7npkv+F20D/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPP58zjn9YaIthHjIOHaD2z37gto8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/kt9U/9z0yf/+/f7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/7/Pv/8/fv//D27P/3+fX//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//P38//b5 + 8//x9+z/9fny//z8/P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /v/Z88P/kN5R/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s8/nvO + OfthoS2Ad8Y3cIPbPfiD2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/peRy/+355P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/+/f7//v3+//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//79/v/+/f7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/+/f7/6/jh/6HibP+D2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2zz+esw5+V+eLXp1xDZng9s99IPaPP6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+G20L/uuqU//X78P/+/f7//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//P6 + 7v+26Y3/hdtA/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + PP56yzj1XZwrcHTCNVqD2jzug9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPP+L3En/ye6r//v8+f/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/v/6/Pj/xu2m/4rcR/+D2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s8/3jIOPBalipicr40SoPaPOaD2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+S3lT/1fG+//z9 + +//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/z6/9Lx + uf+Q3lH/gto8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/dsU26laQJ1FvuTNAgtk83IPbPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+Y4F//3fTL//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/P/b88b/l99b/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP90wjbhVpApRGuzMjKB2DzNhNs9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+f4mj/3/XN//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/fz/3fTL/5zh + Zf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/gtk8/3K9NNRSiSU4ZKcuJIHXPLyE2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+Z4F//2/PH//v8+v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/+/z6/9rzxf+Y4F3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+B1zz/b7kzw0x/IypUjCYWgNU7p4Tc + Pf+D2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+Z4F//1fK///v8+v/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//r8+f/U8bz/mOBe/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9s9/oDWO/9sszKuPmkcGxciDQh+0jqIhNw9/YTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+R3lL/ye6r//X7 + 8P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//79/v/0++//yO6p/5DeUf+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+E2z3+ftI6/misMI8XHg0LAAAAAnvN + OWiD2z3zhNs9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+L3Er/teiM/+r43//9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/6ffe/7Toi/+L3En/gto8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PbPf57zDn2YqQubwAAAAMAAAADeMY3SYPbPeiE2z3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+F2kD/ouNs/9jywv/5/Pb//v3///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/+/f//+Pz2/9fywf+h4mv/hdpA/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/3fGN+tdmytRAAAAAjhN + HwNttDIog9o81ITcPf+D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/kd5S/7zrlv/n99r/+/z6//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/z6/+b32f+765b/kN5R/4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf6D2jz/c8A12FOIJzA3TB4ER3gSA1CEIw+B1zyvhNw9/4PbPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2jz/hNo+/6vlfP/z+u7//f3+//79/v/+/f///v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79/v/+/f///v3+//39 + /f/z+u3/q+V7/4TaPv+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oHWO/9utzO2N10aEz5o + DwNwogkCMVQRBn/TO4GE3D38g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+G20H/v+ub//r8 + +f/8/fv/5/fa/+n33P/4/PX//v3///79/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//79/v/+/f7/9vvx/+X21v/r+OD//P38//r8+f++65n/httB/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2z3+fdE6/WiuMIolQA0HZ5YJAneyOgIfKRADesw4UITbPfKE3D3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/6HibP/s+OL//v3//+v44v+d4mb/lN9Y/7jpj//X8sH/8Pno//v8 + +f/9/f7//v3+//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//v3+//39/f/5/Pf/6/jh/9Hwt/+w54P/j95Q/6rl + ev/0+u7//v3//+v44f+g4mv/gto8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf54yTj0YKItWR4s + DwRgkTACiqogAQAAAAFyvjUmg9o90YTcPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+K3Ej/ze+x//39 + /f/5/Pf/wOyd/4bbQf+C2jz/hNo//47dTv+h42z/veqX/9rzxf/v+ef/+Pv1//v8+v/9/f3//v3////9 + ///+/f///v3///79/v/+/f7//f3+//39/v/+/f7//v3+//79///+/f////3///79/v/8/fz/+vz5//f7 + 8//s+OP/0/G7/7fpjf+c4WP/i9xJ/4PaPf+C2jz/itxI/9Dwtv/8/fz//f39/8zvsP+K3Ef/gto8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtk8/nTBNtZXkSkrAAAAAXqWHAFezlUAVWstAWeqMBCB1zufhNw9/4Pa + PP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/6zmff/z+uz///7//9/0zf+U31j/gto7/4PaPf+D2j3/gto8/4La + O/+F2kD/itxI/5bgWv+u5oD/weye/8/wtP/b88f/5vbY/+355P/x+ur/9Prv//f78//6/Pj/+fz3//b7 + 8v/z+u7/8Pnp/+z44v/k9tX/2fPD/8zvsP+965n/qeV4/5LeVf+J3Eb/hNo+/4LaO/+C2jz/g9o9/4Pa + Pf+C2jz/n+Jp/+r33v///v//8vrs/6vlfP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf5/1Dr/brYyp05/ + JBNffjIBTKhFAICnJwB+myIBAAAAAn7SOmaE2z30g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+Q3VH/2vPG//79 + /v/1+/D/suiG/4TaPv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/4PaPP+E2j//idxG/47d + Tv+W31v/oOJq/6Tkcv+o5Xf/rOZ9/6/ng/+v5oL/q+Z8/6fldv+k43H/nuJo/5TfWP+N3U3/iNtF/4Ta + Pv+C2jz/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+H20P/weye//r8+P/9/f7/2vPF/4/d + UP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/nvNOPZnqy9tAAAAA3SPIAFvkSIAgGoAAIWVCAD///8Aeso5MoPa + PdSE3D3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o+/7npkf/4/PX//f39/9Txvf+L3Er/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/gto8/4LaO/+B2Tr/gdk6/4HZOf+A2Tn/gNk5/4DZ + Of+B2Tn/gdk5/4HZOv+B2jr/gto7/4LaPP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaPP+U31j/4fXS//79///4/PX/uOmR/4PaPv+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2Tz/dcM22WGf + LTn///8Ajp8JAIx0AAAAAAAAr/89AGShHAJdni0Ngdg8n4TcPf6D2z3+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+Y4F7/5fbX///+ + ///u+eX/pONx/4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+z6Ij/9fvx///9 + ///l9tf/mOBe/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/n/UO/9uuTOlR3YfEV+cHAKM5zEAAAAAAAAAAABUQGgAec4lARQN + DQJ/1DtbhNw98oTbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jz/iNtE/8Xtpf/7/Pr//P38/8btpv+I20T/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/47dTv/U8r3//v3///v8+f/F7aT/h9tE/4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3/esw59Get + MGMYGA4CfM8lAU1CXwAAAAAAAAAAAILCQQCO0kkBUXojAnPENh6C2jzJhNw9/oPaPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+j427/7vnl///9 + ///l9tf/muBi/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/6bk + dP/v+eb//v3//+755f+j427/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/oHYPP5zwTXOWpcqI0xzIAJyqToBa6A1AAAAAAAAAAAAAAAAAGKg + IQBemR4BXJgnBoHXO4GE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/itxJ/9Txvf/9/f3/+Pz1/7jpkP+E2j//g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/iNtF/8btp//7/fv//f39/9Txvf+K3En/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+fdE6/W22 + MolHdR4IVYobAlaOHgAAAAAAAAAAAAAAAAAAAAAAoL4iAKXCIgH//5EAfM85N4PbPduE3D3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4TaPv+t5n7/9Prv//79 + ///a88b/kd5S/4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/muBg/+f32v/+/f//9Prv/6zmfv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP93xjffZKguO///oACSrB8BjagfAAAAAAAAAAAAAAAAAAAA + AAAAAAAAc7sqAHrBHQFxujQMgtg8lYTcPf6E2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jz/idxG/83vsv/+/f7/8/ru/6jleP+C2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+E2j//uOmP//r89//9/f3/yu+t/4jc + Rf+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+f9M7/3C6 + M5tWiyYOf80jAWeoJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpsx4Aet4VAQAAAAB/0zpFhNs95YTc + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+G20L/uuqU//D5 + 6P/G7ab/i9xJ/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaO/+R3lP/1PG8/+/55v+z6Ij/hdtA/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf95yTjoZ6svTAAAAABerhABWJgZAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHjdEgCL/w4AYK8QAW+1MQyD2T2fhNw9/oTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+K3Ej/l+Bb/4vcSf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPv+O3U7/luBa/4jc + Rf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+f9Q7/nK9 + NaVUiCUOT5ANAmO7CgBapw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG63JABwvCUBK0YAAX/U + O0GD2z3mhNw9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+C2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP55yjjoaa8wRypGBAJipCEBYKEgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAif8AAHP/AADP/z8AdsY3C4LaPJaE3D3+hNs9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+f9M7/nK/ + NZxbmSwN//9YAIP/AACS/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/8WAOr7 + GAC7/2EAgNU8NYTcPdWE3D3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP95yjjYarAxOcb/aADw/xkA7/8WAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyv6TAHKpKwFpty4Hgto8e4TcPfiE2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+ftI6+XK/ + NIBSkiMIZJUmAX6gXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACa8EQAoPlHAIfKOwF+0TkchNs9vYTcPf6D2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/oHYPP93xjfAaKkvIHWwMwF8wDcAer02AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOr/lQCQxioAm8w1AYeLHAGC2DxPhNw954Tc + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz+fM456W+7 + NFNYbRwBm801AZnLLACUyV4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA///4AH3ROwqC2j2KhNw9+oTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/n/UO/t0wjaOYaYvDOD7YQD//wAA//8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKXjPgCm4jwA/7QEAX/V + OyGD2z29hNw9/4PbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6B2Dz/eco4wGq1 + MiX/9REBlsw3AJLINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//8AAAT//wDR/zAB//9QAIHYPUSE3D3hhNw9/oPbPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/nzPOuNxvTVI//9LANL/MAEF//8A//8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApv9ZAMP/ + bQCLxkkBeMg4BYPaPHKE3D3xhNw9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf9/1DvydsU3dl2a + LgaHwkYB0P90AKb/WQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL9AAIjDPAD/ZgQAgtg7EYPbPZSE3D36hNs9/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2z3+gdc8+3nKOZdvujQT//80AJPRQACN0kYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPv8AALn/AACw/wAAgdc8HIPbPbCE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/oLZPP58zjmzb7k1Hv// + AAC5/wAAPv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA/wAA////AKb/SQFQqg8Agtk8LYTb + PcWE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf6D2Tz9ftE6x3TCNjBMrAQApv9JAf///wCA/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgL9AAIK7QwFupDUCgtg7QYTcPNKE3D3/g9s9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+g9o9/3/TOtR3xDZDXIkyAonG + RgGBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAv0AAlfBGAHyx + QQFroTADgtk7S4TcPd2E3D3+g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/oPbPf6A1TzfeMc4TmKPLASGwUYBhdRAAIC/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLz0UAu6QHAJ+8MwF8xTkEgts8VYTcPd6E3D3/g9s9/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6D2z3/gdc833rMOVhuqzMErM83AdjF + CACLz0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD//wAA/f8EAP//JwF/1jsGg9o8VYTcPd+E3D3/g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3+hNs9/4LYPN99zzpXdcI3Bv//KwH8/wQA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf/wAA5/8AAPr/FAGF0D4Dg9s9TITc + PdOE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oTbPf2C2DzUfdE7TnO1OgT//xYA5/8AAN// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD8/wMA//8AAKC+MgF+wj4Dg9s8QYTcPcWE3D39hNs9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + Pf6D2z39gtk8xn3ROkNvrzsDq8o0Af//AAD8/wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAv0AAgdA9AIC2 + QwF1qzcChNo8LoTcPbKE3D35hNw9/oPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+g9s9+YHYPLN90Tovbp4xAoe/RgF5xDsAgL9AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAv0AAef8SAIC4QgGI+kQAhN47HITcPZWE3D30hNw9/oPb + Pf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+g9s9/oPb + PfSC2TyWf9U5HZH/RgCEvUQBUtYJAIC/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAnutQAIfJRAHg/3sAgto8E4TbPHWE3D3ihNw9/oTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/oTcPf6E2z3igtk8dX7VOxPu/4EAh8lEAaDrUQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/1UAhv95AM7/MQD//wAAgtM9BYTc + PkWE3D29hNw9+4TcPf+D2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oPbPf+E3D37hNw9vYXc + PUWAzzwF//8AAM7/MQCG/3kAqv9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD//wAA//8AAJXTPACEvEgBUtQAAIPaPSKE3D2NhNw96YTcPf+D2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PbPf6E3D3/hNw96YTcPY2D2j0iS9MAAIW9SQGV0zwA//8AAP//AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqv9VAKD/ + XwDK/zYBAP/TAILbOwqE2zxRhNw9wYTcPfiE3D3/hNs9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6D2z3/hNw9+ITcPcGE2zxRgts7CgD/ + 0wDK/zYBoP9fAKr/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AACJwDwAfrRCAYHFOwKC2z0ehNw9f4Tc + PdiE3D39hNw9/oPbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + Pf6D2z3+hNw9/YTcPdiE3D1/gts9HoHFOwJ+tEIBicA8AP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAAmsw0Acr3bgGE2T8Hhdw9N4TcPZqE3D3ohNw9/oTcPf+E2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6D2z3/hNw9/oTcPeiE3D2Zhd09N4TZPwfK924Bmsw0Af// + AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8Ax/88AMPR + IAFzmj8Ahto+DITcPUSE3D2jhNw954TcPf2E3D3+hNs9/oPaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oPaPf6D2z3+hNs9/YTc + PeeE3D2khNw9RIfcPwx4oEIAw9EgAcf/PAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAApLVIAIX8CwHH/1cBf7dCAYLbOwyD3D1JhNw9moTc + PeCE3D3+hNw9/oPbPf6D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/oPbPf6E3D3+hNw9/oTcPeCE3D2ahNs8SYXbPwx/uEQBxf9VAYX8CwGktUgA//8AAP// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAgP8AAID/AACB1isBpu5VAXDILwCG2z0Nhdw8OYTcPYeE3D3PhNw99ITcPf6E2z3/g9s9/oPa + Pf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+g9s9/oTbPf+E3D3+hNw99ITcPc+E3D2Hhdw8OYbb + PQ1xyDEApe5TAYHWKwGA/wAAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKr/VQCw/2AAjv8dAYD/ + AAB1sk8Ah9k8BYbbPCCE3T1ghNw9pYTcPdiE3D32hNw9/4TcPf6D2zz+g9s9/oPaPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oPaPf6D2zz+hNw9/oTc + Pf+E3D32hNw92ITcPaWE3T1ghtw8IIfZPAV1sk8AgP8AAI7/HQGw/2AAqv9VAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAD/ALfZJAGEvz4B0v9wAf///wCI2j4NhNw8NYTc + PWuE3D2lhNw914TcPfWE3D39hNw9/oTbPf+D2z3/g9s9/oPbPf6D2jz+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/oPb + Pf6D2z3+g9s9/4PbPf+E2z3+hNw9/YTcPfWE3D3XhNw9pYTcPWuE3Dw1iNo+Df///wDS/3ABhL8+AbfZ + JAEAAP8A//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKr/VQCt/1oAk/8rAaf/MwEMvQAAh9c9AoXePQ+E3Twnhdw9VYTcPYeE3D23hNw92oTc + PeqE3D32hNw9/oTcPf+D2z3/hNw9/4TbPf+D2z3+g9s9/oPbPf6D2zz+g9s8/oPbPP6D2zz+g9s8/oPb + PP6D2z3+g9s9/oPbPf6D2z3/hNs9/4PbPf+E2z3/hNw9/oTcPfaE3D3qhNw92YTcPbeE3D2Hhdw9VYTd + PCeF3j0Ph9c9Agy9AACn/zMBk/8rAa3/WgCq/1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AAB8/wAAn/8+AIX/ + AAB+1SMBkbthAVqlCACCv0ABgtk/A4PbPg+D3D4rg9w+TITcPW2E3D2PhNw9roTcPcGE3D3UhNw94YTc + PeuE3D30hNw9+oPbPf2D2z3+g9s9/4PbPf+D2z3+g9s9/YPbPfqE3D30hNw964TcPeGE3D3UhNw9wYTc + Pa6E3D2PhNw9bYPbPUyE3D0qhN4/D4LYPwOCv0ABWqUIAJG7YQF+1SMBhf8AAJ//PgB8/wAAgP8AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AABs/wAAk/8jAZPZSAG46BIBov8oAdf/ + gwCQ/wAAb+9BAIfaOwaD3T0VhN09I4TbPjGE3D0+hNw9ToTcPl+E3D1shNw9doTcPX6E3D2ChNw9goTc + PX6E3D12hNw9bITcPl+E3D1OhNw9PoTbPjGE3T0jg909FYfaOwZv70IAW/8AANX/hACh/ycBuOgSAZPZ + SAGT/yMBbP8AAID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP/////wAAAAAAAAD///////////wAAAAAAAAAP//////////wAAAAAAAAAA//////// + //4AAAAAAAAAAH/////////4AAAAAAAAAAAf////////4AAAAAAAAAAAB////////8AAAAAAAAAAAAP/ + //////8AAAAAAAAAAAAA///////+AAAAAAAAAAAAAH///////AAAAAAAAAAAAAA///////gAAAAAAAAA + AAAAH//////wAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAH/////8AAAAAAAAAAAAAAA/////+AAAAA + AAAAAAAAAAH/////AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAA////4 + AAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAA + A///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAA + AAAAAAD//gAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/+AAAAAAA + AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAA + AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAA + AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH6AAAAAAA + AAAAAAAAAAAAF/AAAAAAAAAAAAAAAAAAAA/0AAAAAAAAAAAAAAAAAAAv+AAAAAAAAAAAAAAAAAAAH/gA + AAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAA + AH//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAA + AAAAAAP//9AAAAAAAAAAAAAAAAAL///gAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAB////wAAAAA + AAAAAAAAAAA////6AAAAAAAAAAAAAAAAX////AAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAB///// + AAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAf/////4AAAAAAAAAAAAAAH + //////AAAAAAAAAAAAAAD//////6AAAAAAAAAAAAAF///////QAAAAAAAAAAAAC///////+AAAAAAAAA + AAAB////////oAAAAAAAAAAABf///////9AAAAAAAAAAAAv////////wAAAAAAAAAAAP////////+AAA + AAAAAAAAH/////////6AAAAAAAAAAX//////////AAAAAAAAAAD//////////8gAAAAAAAAT//////// + ///2AAAAAAAAb////////////EAAAAAAAj////////////+QAAAAAAn/////////////8gAAAABP//// + //////////w4AAAcP/////// + + + + + Inherit + + + Dekompilierter APK-Ordner: + + + APKEditor zum Dekompilieren verwenden + + + Einstellungen + + + APK-Ausgabeverzeichnis: + + + Main activity smali + + + Apktool.yml + + + AndroidManifest.xml + + + Apk-DL + + + ApkSos + + + Apk Mirror + + + Apk Mirror +Apk.support + + + ApkGk + + + ApkCombo + + + ApkAio + + + ApkPure + + + Play Store + + + Links: + + + Version: + + + Version: + + + Build: + + + True + + + False + + + True + + + False + + + True + + + False + + + Alias: + + + True + + + False + + + Framework + + + Smali + + + Baksmali + + + Baksmali + + + ADB + + + toolStripStatusLabel1 + + + statusStrip1 + + + menuStrip1 + + + APK Tool GUI + + diff --git a/APKToolGUI/Forms/FormMain.resx b/APKToolGUI/Forms/FormMain.resx new file mode 100644 index 0000000..c464836 --- /dev/null +++ b/APKToolGUI/Forms/FormMain.resx @@ -0,0 +1,10621 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 0 + + + comApkOpenDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 1 + + + decOutOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 2 + + + signApkOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 3 + + + alignApkOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 4 + + + decApkOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 5 + + + compileOutputOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 6 + + + button_OpenMainActivity + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 7 + + + openApktoolYmlBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 8 + + + openAndroidMainfestBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 9 + + + signPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 10 + + + zipalignPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 11 + + + comPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 12 + + + decPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 13 + + + + 4, 27 + + + 594, 314 + + + + 5 + + + Main + + + tabPageMain + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 0 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageApkInfo + + + 0 + + + 4, 27 + + + 594, 314 + + + 6 + + + APK Info + + + tabPageApkInfo + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 1 + + + True + + + groupBox_DECODE_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageDecode + + + 0 + + + 4, 27 + + + + 3, 3, 3, 3 + + + 594, 314 + + + 0 + + + Decode + + + tabPageDecode + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 2 + + + True + + + 491, 321 + + + 60, 22 + + + 24 + + + comJobsLvlUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 0 + + + True + + + NoControl + + + 8, 323 + + + 199, 17 + + + 23 + + + Set the number of threads to use. + + + checkBox4 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 1 + + + True + + + NoControl + + + 8, 172 + + + 376, 17 + + + 20 + + + Add a generic Network Security Configuration file in the output APK + + + checkBox_BUILD_NetSecConf + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 2 + + + True + + + NoControl + + + 8, 273 + + + 403, 17 + + + 19 + + + Use aapt2 (Upgrades apktool to use experimental aapt2 binary.) (< 2.11.1) + + + useAapt2ChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 3 + + + 492, 17 + + + 60, 22 + + + 18 + + + buildApiLvlUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 4 + + + True + + + NoControl + + + 8, 20 + + + 283, 17 + + + 17 + + + Set API level of the file to generate, e.g. 14 for ICS. + + + buildSetApiLvlChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 5 + + + True + + + NoControl + + + 8, 247 + + + 311, 17 + + + 15 + + + Create unsigned APK with original signature after build + + + Only compatible with Core Patch module. Rooted device is required. + + + createUnsignApkChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 6 + + + True + + + NoControl + + + 8, 222 + + + 157, 17 + + + 10 + + + Sign after build / zipalign + + + signAfterBuildChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 7 + + + True + + + NoControl + + + 8, 197 + + + 125, 17 + + + 10 + + + Zipalign after build + + + zipalignAfterBuildChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 8 + + + True + + + NoControl + + + 8, 147 + + + 320, 17 + + + 8 + + + Disable crunching of resource files during the build step. + + + checkBox_BUILD_NoCrunch + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 9 + + + Top, Right + + + NoControl + + + 524, 118 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_BUILD_BrowseOutputAppPath + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 10 + + + True + + + NoControl + + + 8, 45 + + + 241, 17 + + + 2 + + + Skip changes detection and build all files. + + + checkBox_BUILD_ForceAll + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 11 + + + Top, Right + + + NoControl + + + 524, 92 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_BUILD_BrowseFrameDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 12 + + + Top, Right + + + NoControl + + + 524, 66 + + + 1, 0, 1, 1 + + + 40, 24 + + + 6 + + + ... + + + button_BUILD_BrowseAaptPath + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 13 + + + True + + + NoControl + + + 8, 122 + + + 135, 17 + + + 3 + + + APK output directory: + + + Output directory will be used for Zipalign and Signing too after compile + + + checkBox_BUILD_OutputAppPath + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 14 + + + True + + + NoControl + + + 8, 298 + + + 313, 17 + + + 3 + + + Copy original AndroidManifest.xml and META-INF folder + + + checkBox_BUILD_CopyOriginal + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 15 + + + Top, Left, Right + + + 287, 119 + + + 1, 1, 1, 1 + + + 232, 22 + + + 4 + + + textBox_BUILD_OutputAppPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 16 + + + True + + + NoControl + + + 8, 69 + + + 153, 17 + + + 3 + + + Uses aapt.exe located in: + + + checkBox_BUILD_UseAapt + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 17 + + + Top, Left, Right + + + 287, 67 + + + 1, 1, 1, 1 + + + 232, 22 + + + 5 + + + textBox_BUILD_AaptPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 18 + + + Top, Left, Right + + + 287, 93 + + + 1, 1, 1, 1 + + + 232, 22 + + + 4 + + + textBox_BUILD_FrameDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 19 + + + True + + + NoControl + + + 8, 96 + + + 189, 17 + + + 3 + + + Uses framework files located in: + + + checkBox_BUILD_UseFramework + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_BUILD_Options + + + 20 + + + Top + + + 0, 0 + + + 577, 358 + + + 9 + + + Options + + + groupBox_BUILD_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageBuild + + + 0 + + + 4, 27 + + + 594, 314 + + + 3 + + + Build + + + tabPageBuild + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 3 + + + True + + + groupBox_SIGN_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageSign + + + 0 + + + 4, 27 + + + 3, 3, 3, 3 + + + 594, 314 + + + 1 + + + Sign + + + tabPageSign + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 4 + + + True + + + groupBox_ZIPALIGN_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageZipAlign + + + 0 + + + 4, 27 + + + 3, 3, 3, 3 + + + 594, 314 + + + 2 + + + Zip align + + + tabPageZipAlign + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 5 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageInstallFramework + + + 0 + + + groupBox_IF_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageInstallFramework + + + 1 + + + 4, 27 + + + 594, 314 + + + 4 + + + Framework + + + tabPageInstallFramework + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 6 + + + smaliGroupBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageBaksmali + + + 0 + + + bakSmaliGroupBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageBaksmali + + + 1 + + + 4, 27 + + + 3, 3, 3, 3 + + + 594, 314 + + + 7 + + + Baksmali + + + tabPageBaksmali + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 7 + + + overrideAbiComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 0 + + + selAdbDeviceLbl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 1 + + + label33 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 2 + + + killAdbBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 3 + + + installApkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 4 + + + refreshDevicesBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 5 + + + selApkAdbBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 6 + + + overrideAbiCheckBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 7 + + + setVendorChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 8 + + + apkPathAdbTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 9 + + + label32 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 10 + + + devicesListBox + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 11 + + + 4, 27 + + + 3, 3, 3, 3 + + + 594, 314 + + + 8 + + + ADB + + + tabPageAdb + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControlMain + + + 8 + + + Fill + + + 48, 23 + + + 0, 0 + + + 0, 0, 0, 0 + + + 602, 345 + + + 15 + + + tabControlMain + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer1.Panel1 + + + 0 + + + splitApkTxt + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 0 + + + splitApkPathTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 1 + + + selSplitApkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 2 + + + mergeApkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 3 + + + Top + + + 0, 180 + + + 594, 45 + + + 25 + + + mergePanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 0 + + + True + + + NoControl + + + 3, 4 + + + 170, 13 + + + 23 + + + Merge split APK into single APK: + + + splitApkTxt + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 0 + + + Top, Left, Right + + + 4, 20 + + + 441, 22 + + + 15 + + + splitApkPathTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 1 + + + Top, Right + + + System + + + NoControl + + + 451, 18 + + + 28, 24 + + + 13 + + + ... + + + selSplitApkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 2 + + + Top, Right + + + System + + + NoControl + + + 484, 18 + + + 105, 24 + + + 14 + + + Merge + + + mergeApkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mergePanel + + + 3 + + + Center + + + NoControl + + + 211, 255 + + + 180, 24 + + + 24 + + + Compiled APK location + + + comApkOpenDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 1 + + + Center + + + NoControl + + + 6, 227 + + + 180, 24 + + + 16 + + + Decompile output location + + + decOutOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 2 + + + Center + + + NoControl + + + 414, 255 + + + 180, 24 + + + 16 + + + Sign APK location + + + signApkOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 3 + + + Center + + + NoControl + + + 414, 227 + + + 180, 24 + + + 16 + + + Zipalign APK location + + + alignApkOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 4 + + + Center + + + NoControl + + + 211, 227 + + + 180, 24 + + + 16 + + + Decompiled APK location + + + decApkOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 5 + + + Center + + + NoControl + + + 6, 255 + + + 180, 24 + + + 13 + + + Compile output location + + + compileOutputOpenDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 6 + + + NoControl + + + 414, 283 + + + 180, 24 + + + 5 + + + Main activity smali + + + button_OpenMainActivity + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 7 + + + NoControl + + + 211, 283 + + + 180, 24 + + + 4 + + + Apktool.yml + + + openApktoolYmlBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 8 + + + NoControl + + + 6, 283 + + + 180, 24 + + + 4 + + + AndroidManifest.xml + + + openAndroidMainfestBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 9 + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 0 + + + textBox_SIGN_InputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 1 + + + button_SIGN_BrowseInputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 2 + + + button_SIGN_Sign + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 3 + + + Top + + + 0, 135 + + + 594, 45 + + + 3 + + + signPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 10 + + + True + + + NoControl + + + 3, 4 + + + 89, 13 + + + 23 + + + APK File to sign: + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 0 + + + Top, Left, Right + + + 4, 20 + + + 441, 22 + + + 15 + + + textBox_SIGN_InputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 1 + + + Top, Right + + + System + + + NoControl + + + 451, 18 + + + 28, 24 + + + 13 + + + ... + + + button_SIGN_BrowseInputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 2 + + + Top, Right + + + System + + + NoControl + + + 484, 18 + + + 105, 24 + + + 14 + + + Sign + + + button_SIGN_Sign + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + signPanel + + + 3 + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 0 + + + button_ZIPALIGN_Align + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 1 + + + button_ZIPALIGN_BrowseInputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 2 + + + textBox_ZIPALIGN_InputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 3 + + + Top + + + 0, 90 + + + 594, 45 + + + 2 + + + zipalignPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 11 + + + True + + + NoControl + + + 3, 3 + + + 91, 13 + + + 22 + + + APK file to align: + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 0 + + + Top, Right + + + System + + + NoControl + + + 484, 18 + + + 105, 24 + + + 21 + + + Align + + + button_ZIPALIGN_Align + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 1 + + + Top, Right + + + System + + + NoControl + + + 451, 18 + + + 28, 24 + + + 19 + + + ... + + + button_ZIPALIGN_BrowseInputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 2 + + + Top, Left, Right + + + 3, 20 + + + 443, 22 + + + 20 + + + textBox_ZIPALIGN_InputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + zipalignPanel + + + 3 + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 0 + + + button_BUILD_BrowseInputProjectDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 1 + + + button_BUILD_Build + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 2 + + + textBox_BUILD_InputProjectDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 3 + + + Top + + + 0, 45 + + + 594, 45 + + + 1 + + + comPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 12 + + + True + + + NoControl + + + 3, 3 + + + 127, 13 + + + 15 + + + Decompiled APK folder: + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 0 + + + Top, Right + + + System + + + NoControl + + + 451, 18 + + + 28, 24 + + + 14 + + + ... + + + button_BUILD_BrowseInputProjectDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 1 + + + Top, Right + + + System + + + NoControl + + + 484, 18 + + + 105, 24 + + + 12 + + + Compile + + + button_BUILD_Build + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 2 + + + Top, Left, Right + + + 4, 19 + + + 442, 22 + + + 13 + + + textBox_BUILD_InputProjectDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comPanel + + + 3 + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 0 + + + textBox_DECODE_InputAppPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 1 + + + button_DECODE_Decode + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 2 + + + button_DECODE_BrowseInputAppPath + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 3 + + + Top + + + 0, 0 + + + 594, 45 + + + 0 + + + decPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageMain + + + 13 + + + True + + + NoControl + + + 3, 3 + + + 160, 13 + + + 12 + + + APK/XAPK/APKS/ZIP/APKM File: + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 0 + + + Top, Left, Right + + + 3, 19 + + + 443, 22 + + + 10 + + + textBox_DECODE_InputAppPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 1 + + + Top, Right + + + System + + + NoControl + + + 484, 18 + + + 105, 24 + + + 9 + + + Decompile + + + button_DECODE_Decode + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 2 + + + Top, Right + + + System + + + NoControl + + + 451, 18 + + + 28, 24 + + + 11 + + + ... + + + button_DECODE_BrowseInputAppPath + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + decPanel + + + 3 + + + basicInfoTabPage + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 0 + + + tabPage3 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 1 + + + Fill + + + 293, 23 + + + 0, 0 + + + 122, 3 + + + 594, 314 + + + 12 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageApkInfo + + + 0 + + + True + + + sigTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 0 + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 1 + + + launchActivityTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 2 + + + label31 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 3 + + + archSdkTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 4 + + + label30 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 5 + + + apkMirrorLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 6 + + + apkSupportLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 7 + + + apkGkLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 8 + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 9 + + + localsTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 10 + + + selApkFileInfoBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 11 + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 12 + + + appTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 13 + + + permTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 14 + + + apkComboLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 15 + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 16 + + + fileTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 17 + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 18 + + + densityTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 19 + + + packNameTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 20 + + + apkPureLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 21 + + + verTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 22 + + + psLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 23 + + + minSdkTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 24 + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 25 + + + targetSdkTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 26 + + + screenTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 27 + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 28 + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 29 + + + buildTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 30 + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 31 + + + apkIconPicBox + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 32 + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 33 + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 34 + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 35 + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 36 + + + 4, 27 + + + 3, 3, 3, 3 + + + 586, 283 + + + 0 + + + Basic info + + + basicInfoTabPage + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 0 + + + 130, 570 + + + 437, 165 + + + 21 + + + + + + sigTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 0 + + + True + + + NoControl + + + 9, 572 + + + 60, 13 + + + 20 + + + Signature: + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 1 + + + 130, 168 + + + 437, 22 + + + 19 + + + launchActivityTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 2 + + + True + + + NoControl + + + 9, 173 + + + 85, 13 + + + 18 + + + Launch activity: + + + label31 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 3 + + + 393, 251 + + + 174, 22 + + + 17 + + + archSdkTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 4 + + + True + + + NoControl + + + 306, 254 + + + 77, 13 + + + 16 + + + Architectures: + + + label30 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 5 + + + MiddleLeft + + + NoControl + + + 435, 127 + + + 130, 23 + + + 13 + + + Apk Mirror + + + apkMirrorLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 6 + + + NoControl + + + 282, 127 + + + 130, 23 + + + 12 + + + Apk.support + + + apkSupportLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 7 + + + NoControl + + + 128, 127 + + + 130, 23 + + + 12 + + + ApkGk + + + apkGkLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 8 + + + True + + + NoControl + + + 6, 10 + + + 28, 13 + + + 1 + + + File: + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 9 + + + 130, 305 + + + 437, 88 + + + 7 + + + + + + localsTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 10 + + + NoControl + + + 452, 7 + + + 28, 23 + + + 11 + + + ... + + + selApkFileInfoBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 11 + + + True + + + NoControl + + + 9, 307 + + + 44, 13 + + + 6 + + + Locals: + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 12 + + + 128, 34 + + + 354, 22 + + + 0 + + + appTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 13 + + + 130, 399 + + + 437, 165 + + + 4 + + + + + + permTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 14 + + + MiddleLeft + + + NoControl + + + 282, 101 + + + 130, 23 + + + 10 + + + ApkCombo + + + apkComboLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 15 + + + True + + + NoControl + + + 9, 401 + + + 73, 13 + + + 1 + + + Permissions: + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 16 + + + 128, 7 + + + 316, 22 + + + 0 + + + fileTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 17 + + + True + + + NoControl + + + 9, 281 + + + 60, 13 + + + 1 + + + Densities: + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 18 + + + 130, 277 + + + 437, 22 + + + 0 + + + densityTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 19 + + + 128, 62 + + + 354, 22 + + + 0 + + + packNameTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 20 + + + MiddleLeft + + + NoControl + + + 435, 101 + + + 130, 23 + + + 10 + + + ApkPure + + + apkPureLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 21 + + + 130, 195 + + + 170, 22 + + + 0 + + + verTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 22 + + + MiddleLeft + + + NoControl + + + 128, 101 + + + 130, 23 + + + 10 + + + Play Store + + + psLinkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 23 + + + 130, 222 + + + 170, 22 + + + 0 + + + minSdkTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 24 + + + True + + + NoControl + + + 6, 92 + + + 36, 13 + + + 9 + + + Links: + + + label19 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 25 + + + 394, 223 + + + 174, 22 + + + 0 + + + targetSdkTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 26 + + + 130, 250 + + + 170, 22 + + + 0 + + + screenTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 27 + + + True + + + NoControl + + + 6, 38 + + + 62, 13 + + + 1 + + + App name: + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 28 + + + True + + + NoControl + + + 6, 65 + + + 83, 13 + + + 1 + + + Package name: + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 29 + + + 394, 195 + + + 174, 22 + + + 3 + + + buildTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 30 + + + True + + + NoControl + + + 9, 199 + + + 48, 13 + + + 1 + + + Version: + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 31 + + + NoControl + + + 488, 7 + + + 77, 77 + + + StretchImage + + + 2 + + + apkIconPicBox + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 32 + + + True + + + NoControl + + + 9, 226 + + + 53, 13 + + + 1 + + + Min. SDK + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 33 + + + True + + + NoControl + + + 307, 198 + + + 37, 13 + + + 1 + + + Build: + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 34 + + + True + + + NoControl + + + 9, 254 + + + 74, 13 + + + 1 + + + Screen sizes: + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 35 + + + True + + + NoControl + + + 307, 226 + + + 64, 13 + + + 1 + + + Target SDK: + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + basicInfoTabPage + + + 36 + + + fullInfoTextBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage3 + + + 0 + + + 4, 27 + + + 3, 3, 3, 3 + + + 586, 283 + + + 1 + + + Full info + + + tabPage3 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 1 + + + Fill + + + 3, 3 + + + 580, 277 + + + 0 + + + + + + fullInfoTextBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage3 + + + 0 + + + decJobsLvlUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 0 + + + checkBox3 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 1 + + + checkBox7 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 2 + + + decApiLvlUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 3 + + + decSetApiLvlChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 4 + + + checkBox_DECODE_FixError + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 5 + + + checkBox_DECODE_OnlyMainClasses + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 6 + + + textBox_DECODE_FrameDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 7 + + + button_DECODE_BrowseOutputDirectory + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 8 + + + checkBox_DECODE_UseFramework + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 9 + + + button_DECODE_BrowseFrameDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 10 + + + checkBox_DECODE_MatchOriginal + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 11 + + + checkBox_DECODE_OutputDirectory + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 12 + + + textBox_DECODE_OutputDirectory + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 13 + + + checkBox_DECODE_KeepBrokenRes + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 14 + + + checkBox_DECODE_NoSrc + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 15 + + + checkBox_DECODE_Force + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 16 + + + checkBox_DECODE_NoRes + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 17 + + + checkBox_DECODE_NoDebugInfo + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 18 + + + Top + + + 3, 3 + + + 571, 379 + + + 6 + + + Options + + + groupBox_DECODE_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageDecode + + + 0 + + + 491, 319 + + + 60, 22 + + + 22 + + + decJobsLvlUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 0 + + + True + + + NoControl + + + 8, 321 + + + 199, 17 + + + 21 + + + Set the number of threads to use. + + + checkBox3 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 1 + + + True + + + NoControl + + + 8, 295 + + + 320, 17 + + + 20 + + + Don't parse APK info when selecting APK for decompiling + + + checkBox7 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 2 + + + 491, 18 + + + 60, 22 + + + 14 + + + decApiLvlUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 3 + + + True + + + NoControl + + + 8, 20 + + + 283, 17 + + + 13 + + + Set API level of the file to generate, e.g. 14 for ICS. + + + decSetApiLvlChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 4 + + + 454, 16 + + + True + + + NoControl + + + 8, 246 + + + 200, 17 + + + 9 + + + Fix ApkTool errors after decompile + + + It will remove extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY, split related attributes and set sparseResources to false + + + checkBox_DECODE_FixError + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 5 + + + True + + + NoControl + + + 8, 221 + + + 375, 17 + + + 8 + + + Only disassemble the main dex classes (classes[0-9]*.dex) in the root. + + + Enable to fix strange ApkTool error + + + checkBox_DECODE_OnlyMainClasses + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 6 + + + Top, Left, Right + + + 282, 165 + + + 1, 1, 1, 1 + + + 236, 22 + + + 5 + + + textBox_DECODE_FrameDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 7 + + + Top, Right + + + NoControl + + + 522, 190 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_DECODE_BrowseOutputDirectory + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 8 + + + True + + + NoControl + + + 8, 170 + + + 189, 17 + + + 3 + + + Uses framework files located in: + + + checkBox_DECODE_UseFramework + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 9 + + + Top, Right + + + NoControl + + + 522, 164 + + + 1, 0, 1, 1 + + + 40, 24 + + + 6 + + + ... + + + button_DECODE_BrowseFrameDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 10 + + + True + + + NoControl + + + 8, 145 + + + 341, 17 + + + 6 + + + Keeps files to closest to original as possible. Prevents rebuild. + + + checkBox_DECODE_MatchOriginal + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 11 + + + True + + + NoControl + + + 8, 196 + + + 115, 17 + + + 3 + + + Output directory: + + + checkBox_DECODE_OutputDirectory + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 12 + + + Top, Left, Right + + + 282, 191 + + + 1, 1, 1, 1 + + + 236, 22 + + + 4 + + + textBox_DECODE_OutputDirectory + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 13 + + + True + + + NoControl + + + 8, 120 + + + 141, 17 + + + 5 + + + Keep broken resource. + + + checkBox_DECODE_KeepBrokenRes + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 14 + + + True + + + NoControl + + + 8, 45 + + + 148, 17 + + + 2 + + + Do not decode sources. + + + checkBox_DECODE_NoSrc + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 15 + + + True + + + NoControl + + + 8, 95 + + + 202, 17 + + + 4 + + + Force delete destination directory. + + + checkBox_DECODE_Force + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 16 + + + True + + + NoControl + + + 8, 70 + + + 158, 17 + + + 3 + + + Do not decode resources. + + + checkBox_DECODE_NoRes + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 17 + + + True + + + NoControl + + + 8, 270 + + + 295, 17 + + + 12 + + + Don't write out debug info (.local, .param, .line, etc.) + + + checkBox_DECODE_NoDebugInfo + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_DECODE_Options + + + 18 + + + checkBox2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 0 + + + checkBox1 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 1 + + + autoDelIdsigChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 2 + + + schemev4ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 3 + + + label27 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 4 + + + schemev3ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 5 + + + label26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 6 + + + schemev2ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 7 + + + label25 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 8 + + + schemev1ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 9 + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 10 + + + textBox3 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 11 + + + selectKeyStoreFileBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 12 + + + aliasTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 13 + + + useAliasChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 14 + + + label22 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 15 + + + keyStoreFileTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 16 + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 17 + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 18 + + + useKeyStoreChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 19 + + + useSigningOutputDir + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 20 + + + label_SIGN_PrivateKey + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 21 + + + label_SIGN_PublicKey + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 22 + + + button_SIGN_BrowseOutputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 23 + + + textBox_SIGN_OutputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 24 + + + button_SIGN_BrowsePublicKey + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 25 + + + button_SIGN_BrowsePrivateKey + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 26 + + + textBox_SIGN_PublicKey + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 27 + + + textBox_SIGN_PrivateKey + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 28 + + + Top + + + 3, 3 + + + 571, 419 + + + 17 + + + Options + + + groupBox_SIGN_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageSign + + + 0 + + + True + + + NoControl + + + 8, 357 + + + 402, 17 + + + 31 + + + Install APK after signing (Make sure the device is selected in ADB tab first) + + + checkBox2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 0 + + + True + + + NoControl + + + 8, 331 + + + 126, 17 + + + 30 + + + Overwrite input file + + + checkBox1 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 1 + + + True + + + NoControl + + + 8, 305 + + + 133, 17 + + + 29 + + + Auto delete idsig file + + + autoDelIdsigChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 2 + + + Default + + + True + + + False + + + 437, 276 + + + 121, 21 + + + 28 + + + schemev4ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 3 + + + True + + + NoControl + + + 292, 279 + + + 63, 13 + + + 27 + + + Scheme v4: + + + label27 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 4 + + + Default + + + True + + + False + + + 155, 276 + + + 121, 21 + + + 26 + + + schemev3ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 5 + + + True + + + NoControl + + + 7, 279 + + + 63, 13 + + + 25 + + + Scheme v3: + + + label26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 6 + + + Default + + + True + + + False + + + 437, 249 + + + 121, 21 + + + 24 + + + schemev2ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 7 + + + True + + + NoControl + + + 292, 252 + + + 63, 13 + + + 23 + + + Scheme v2: + + + label25 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 8 + + + Default + + + True + + + False + + + 155, 249 + + + 121, 21 + + + 22 + + + schemev1ComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 9 + + + True + + + NoControl + + + 7, 252 + + + 63, 13 + + + 21 + + + Scheme v1: + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 10 + + + Top, Left, Right + + + 262, 191 + + + 295, 22 + + + 20 + + + textBox3 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 11 + + + Top, Right + + + NoControl + + + 517, 163 + + + 1, 0, 1, 1 + + + 40, 24 + + + 19 + + + ... + + + selectKeyStoreFileBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 12 + + + Top, Left, Right + + + 260, 109 + + + 297, 22 + + + 18 + + + aliasTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 13 + + + True + + + NoControl + + + 8, 111 + + + 53, 17 + + + 17 + + + Alias: + + + useAliasChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 14 + + + NoControl + + + 5, 16 + + + 555, 26 + + + 16 + + + It is strongly recommended that you use your own key, created via Android Studio or other tools + + + label22 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 15 + + + Top, Left, Right + + + 262, 163 + + + 247, 22 + + + 15 + + + keyStoreFileTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 16 + + + True + + + NoControl + + + 7, 194 + + + 2, 2, 2, 2 + + + 59, 13 + + + 14 + + + Password: + + + MiddleLeft + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 17 + + + True + + + NoControl + + + 7, 166 + + + 2, 2, 2, 2 + + + 90, 13 + + + 14 + + + keystore/jks file: + + + MiddleLeft + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 18 + + + True + + + NoControl + + + 8, 139 + + + 91, 17 + + + 13 + + + Use keystore + + + useKeyStoreChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 19 + + + True + + + NoControl + + + 9, 223 + + + 135, 17 + + + 11 + + + APK output directory: + + + useSigningOutputDir + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 20 + + + True + + + NoControl + + + 7, 85 + + + 2, 2, 2, 2 + + + 64, 13 + + + 8 + + + Private key: + + + MiddleLeft + + + label_SIGN_PrivateKey + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 21 + + + True + + + NoControl + + + 7, 57 + + + 2, 2, 2, 2 + + + 61, 13 + + + 8 + + + Public key: + + + MiddleLeft + + + label_SIGN_PublicKey + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 22 + + + Top, Right + + + NoControl + + + 517, 219 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_SIGN_BrowseOutputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 23 + + + Top, Left, Right + + + 262, 219 + + + 1, 1, 1, 1 + + + 247, 22 + + + 4 + + + textBox_SIGN_OutputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 24 + + + Top, Right + + + NoControl + + + 517, 53 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_SIGN_BrowsePublicKey + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 25 + + + Top, Right + + + NoControl + + + 517, 80 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_SIGN_BrowsePrivateKey + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 26 + + + Top, Left, Right + + + 260, 53 + + + 1, 1, 1, 1 + + + 249, 22 + + + 4 + + + textBox_SIGN_PublicKey + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 27 + + + Top, Left, Right + + + 260, 80 + + + 1, 1, 1, 1 + + + 249, 22 + + + 4 + + + textBox_SIGN_PrivateKey + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_SIGN_Options + + + 28 + + + zipalignOutputDirChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 0 + + + signAfterZipalignChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 1 + + + checkBox_ZIPALIGN_Recompress + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 2 + + + label_ZIPALIGN_AlignmentBytes + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 3 + + + button_ZIPALIGN_BrowseOutputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 4 + + + checkBox_ZIPALIGN_CheckAlignment + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 5 + + + textBox_ZIPALIGN_OutputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 6 + + + checkBox_ZIPALIGN_VerboseOutput + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 7 + + + numericUpDown_ZIPALIGN_AlignmentBytes + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 8 + + + checkBox_ZIPALIGN_OverwriteOutputFile + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 9 + + + Top + + + 3, 3 + + + 588, 299 + + + 16 + + + Options + + + groupBox_ZIPALIGN_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageZipAlign + + + 0 + + + True + + + NoControl + + + 6, 167 + + + 135, 17 + + + 10 + + + APK output directory: + + + zipalignOutputDirChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 0 + + + True + + + NoControl + + + 6, 142 + + + 120, 17 + + + 9 + + + Sign after zipalign + + + signAfterZipalignChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 1 + + + True + + + NoControl + + + 6, 92 + + + 152, 17 + + + 8 + + + Recompress using Zopfli + + + checkBox_ZIPALIGN_Recompress + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 2 + + + True + + + NoControl + + + 4, 17 + + + 2, 2, 2, 2 + + + 278, 13 + + + 0 + + + Alignment in bytes, e.g. '4' provides 32-bit alignment + + + MiddleLeft + + + label_ZIPALIGN_AlignmentBytes + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 3 + + + Top, Right + + + NoControl + + + 541, 164 + + + 1, 0, 1, 1 + + + 40, 24 + + + 7 + + + ... + + + button_ZIPALIGN_BrowseOutputFile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 4 + + + True + + + NoControl + + + 6, 41 + + + 249, 17 + + + 5 + + + Check alignment only (does not modify file) + + + checkBox_ZIPALIGN_CheckAlignment + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 5 + + + Top, Left, Right + + + 297, 165 + + + 1, 1, 1, 1 + + + 239, 22 + + + 4 + + + textBox_ZIPALIGN_OutputFile + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 6 + + + True + + + NoControl + + + 6, 67 + + + 106, 17 + + + 6 + + + Verbose output + + + checkBox_ZIPALIGN_VerboseOutput + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 7 + + + 547, 15 + + + 1, 1, 1, 1 + + + 32, 22 + + + 1 + + + Center + + + numericUpDown_ZIPALIGN_AlignmentBytes + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 8 + + + True + + + NoControl + + + 6, 117 + + + 177, 17 + + + 3 + + + Overwrite existing output file + + + checkBox_ZIPALIGN_OverwriteOutputFile + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_ZIPALIGN_Options + + + 9 + + + openFwFolderBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + clearFwBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + clearFwBeforeDecodeChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + Top + + + 0, 115 + + + 594, 157 + + + 11 + + + Options + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageInstallFramework + + + 0 + + + NoControl + + + 6, 63 + + + 179, 23 + + + 9 + + + Open framework folder + + + openFwFolderBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + NoControl + + + 462, 17 + + + 127, 23 + + + 7 + + + Clear framework + + + clearFwBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + True + + + NoControl + + + 6, 21 + + + 214, 17 + + + 8 + + + Clear framework before decompiling + + + clearFwBeforeDecodeChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + checkBox_IF_Tag + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 0 + + + checkBox_IF_FramePath + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 1 + + + textBox_IF_Tag + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 2 + + + button_IF_InstallFramework + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 3 + + + button_IF_BrowseFrameDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 4 + + + button_IF_BrowseInputFramePath + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 5 + + + textBox_IF_InputFramePath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 6 + + + textBox_IF_FrameDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 7 + + + Top + + + 0, 0 + + + 594, 115 + + + 10 + + + Install Framework + + + groupBox_IF_Options + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageInstallFramework + + + 1 + + + True + + + NoControl + + + 6, 44 + + + 141, 17 + + + 3 + + + Tag frameworks using: + + + checkBox_IF_Tag + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 0 + + + True + + + NoControl + + + 6, 18 + + + 167, 17 + + + 3 + + + Stores framework files into: + + + checkBox_IF_FramePath + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 1 + + + Top, Left, Right + + + 301, 42 + + + 1, 1, 3, 1 + + + 287, 22 + + + 4 + + + textBox_IF_Tag + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 2 + + + Top, Right + + + System + + + NoControl + + + 483, 82 + + + 105, 24 + + + 1 + + + Install + + + button_IF_InstallFramework + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 3 + + + Top, Right + + + NoControl + + + 550, 15 + + + 1, 0, 1, 1 + + + 40, 24 + + + 6 + + + ... + + + button_IF_BrowseFrameDir + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 4 + + + Top, Right + + + System + + + NoControl + + + 450, 82 + + + 30, 24 + + + 0 + + + ... + + + button_IF_BrowseInputFramePath + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 5 + + + Top, Left, Right + + + 6, 83 + + + 440, 22 + + + 9 + + + textBox_IF_InputFramePath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 6 + + + Top, Left, Right + + + 301, 16 + + + 1, 1, 1, 1 + + + 246, 22 + + + 5 + + + textBox_IF_FrameDir + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox_IF_Options + + + 7 + + + label29 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 0 + + + smaliUseOutputChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 1 + + + comSmaliBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 2 + + + smaliBrowseOutputBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 3 + + + smaliBrowseInputDirTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 4 + + + smaliBrowseOutputTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 5 + + + smaliBrowseInputDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 6 + + + Top + + + 3, 123 + + + 588, 120 + + + 1 + + + Smali + + + smaliGroupBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageBaksmali + + + 0 + + + True + + + NoControl + + + 3, 74 + + + 128, 13 + + + 19 + + + Smali folder to compile: + + + label29 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 0 + + + True + + + NoControl + + + 6, 17 + + + 135, 17 + + + 18 + + + Dex output directory: + + + smaliUseOutputChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 1 + + + Top, Right + + + System + + + NoControl + + + 479, 89 + + + 105, 24 + + + 14 + + + Compile + + + comSmaliBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 2 + + + Top, Right + + + NoControl + + + 544, 14 + + + 1, 0, 1, 1 + + + 40, 24 + + + 17 + + + ... + + + smaliBrowseOutputBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 3 + + + Top, Left, Right + + + 6, 90 + + + 436, 22 + + + 15 + + + smaliBrowseInputDirTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 4 + + + Top, Left, Right + + + 282, 15 + + + 1, 1, 1, 1 + + + 258, 22 + + + 16 + + + smaliBrowseOutputTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 5 + + + Top, Right + + + System + + + NoControl + + + 446, 89 + + + 30, 24 + + + 13 + + + ... + + + smaliBrowseInputDirBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + smaliGroupBox + + + 6 + + + label28 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 0 + + + baksmaliUseOutputChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 1 + + + baksmaliBrowseOutputBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 2 + + + baksmaliBrowseOutputTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 3 + + + decSmaliBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 4 + + + baksmaliBrowseInputDexBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 5 + + + baksmaliBrowseInputDexTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 6 + + + Top + + + 3, 3 + + + 588, 120 + + + 0 + + + Baksmali + + + bakSmaliGroupBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageBaksmali + + + 1 + + + True + + + NoControl + + + 2, 75 + + + 99, 13 + + + 16 + + + Dex to decompile: + + + label28 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 0 + + + True + + + NoControl + + + 6, 17 + + + 149, 17 + + + 15 + + + Folder output directory: + + + baksmaliUseOutputChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 1 + + + Top, Right + + + NoControl + + + 544, 13 + + + 1, 0, 1, 1 + + + 40, 24 + + + 14 + + + ... + + + baksmaliBrowseOutputBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 2 + + + Top, Left, Right + + + 282, 14 + + + 1, 1, 1, 1 + + + 258, 22 + + + 13 + + + baksmaliBrowseOutputTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 3 + + + Top, Right + + + System + + + NoControl + + + 477, 90 + + + 105, 24 + + + 11 + + + Decompile + + + decSmaliBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 4 + + + Top, Right + + + System + + + NoControl + + + 444, 90 + + + 30, 24 + + + 10 + + + ... + + + baksmaliBrowseInputDexBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 5 + + + Top, Left, Right + + + 4, 91 + + + 436, 22 + + + 12 + + + baksmaliBrowseInputDexTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bakSmaliGroupBox + + + 6 + + + arm64-v8a + + + armeabi-v7a + + + x86 + + + x86_64 + + + 223, 46 + + + 121, 21 + + + 23 + + + overrideAbiComboBox + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 0 + + + NoControl + + + 147, 6 + + + 432, 15 + + + 17 + + + TopRight + + + selAdbDeviceLbl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 1 + + + True + + + NoControl + + + 8, 7 + + + 91, 13 + + + 16 + + + Selected device: + + + label33 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 2 + + + NoControl + + + 7, 101 + + + 121, 23 + + + 15 + + + Kill adb process + + + killAdbBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 3 + + + Top, Right + + + NoControl + + + 426, 101 + + + 166, 23 + + + 14 + + + Install APK + + + installApkBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 4 + + + NoControl + + + 134, 101 + + + 121, 23 + + + 14 + + + Refresh + + + refreshDevicesBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 5 + + + Top, Right + + + System + + + NoControl + + + 552, 71 + + + 40, 24 + + + 12 + + + ... + + + selApkAdbBtn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 6 + + + True + + + NoControl + + + 9, 48 + + + 191, 17 + + + 18 + + + Override platform's default ABI: + + + overrideAbiCheckBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 7 + + + True + + + NoControl + + + 9, 26 + + + 267, 17 + + + 13 + + + Set vendor to Play Store (com.android.vending) + + + setVendorChkBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 8 + + + Top, Left, Right + + + 224, 72 + + + 323, 22 + + + 2 + + + apkPathAdbTxtBox + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 9 + + + True + + + NoControl + + + 9, 77 + + + 78, 13 + + + 1 + + + Selected APK: + + + label32 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 10 + + + Top, Bottom, Left, Right + + + 7, 130 + + + 579, 173 + + + 0 + + + devicesListBox + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdb + + + 11 + + + 32, 9 + + + 0, 542 + + + 602, 22 + + + 17 + + + statusStrip1 + + + statusStrip1 + + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 0, 17 + + + toolStripStatusLabel1 + + + + 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 + + + + MiddleLeft + + + None + + + 587, 17 + + + Loading... + + + MiddleLeft + + + False + + + 100, 16 + + + False + + + 138, 10 + + + 122, 48 + + + contextMenuStripLog + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 121, 22 + + + Copy + + + 121, 22 + + + Clear log + + + Fill + + + Consolas, 8.25pt + + + 0, 0 + + + 602, 169 + + + 18 + + + + + + logTxtBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer1.Panel2 + + + 0 + + + 309, 13 + + + 0, 0 + + + 3, 2, 0, 2 + + + 602, 24 + + + 19 + + + menuStrip1 + + + menuStrip1 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 37, 20 + + + File + + + 168, 22 + + + New instance + + + 168, 22 + + + Save log to file + + + 165, 6 + + + 168, 22 + + + Open temp folder + + + 168, 22 + + + Clear temp folder + + + 165, 6 + + + 168, 22 + + + Exit + + + 61, 20 + + + Settings + + + 237, 22 + + + Use APKEditor for decompiling + + + 237, 22 + + + Open settings... + + + 44, 20 + + + Help + + + 189, 22 + + + Check for update + + + 189, 22 + + + Report an issue + + + 189, 22 + + + Apktool issue tracker + + + 189, 22 + + + Baksmali issue tracker + + + 189, 22 + + + About + + + 454, 16 + + + Fill + + + 0, 24 + + + Horizontal + + + splitContainer1.Panel1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer1 + + + 0 + + + splitContainer1.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer1 + + + 1 + + + 602, 518 + + + 345 + + + 20 + + + splitContainer1 + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 41 + + + 96, 96 + + + 602, 564 + + + Segoe UI, 8.25pt + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAQEAAAAEA + IAAoQgAADjsAAICAAAABACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAA + AAAAAAAAAAAAAAAAAAA9ZR0AKEESCVyYK0lwuzSje8w5233QOvB0wjbwb7gz22esMKNVjSdJJDwRCTle + GwAAAAAAAAAAAAEBAABvuDQATYAkGHG8NYx+0jvqg9o9/4LYPP94yDj/c8A2/3XDN/93xTf/dcI26miu + MY1GdSEYZqowAAABAABjpS4AVIwnF3fGN6mC2D39hNs9/4HXPP91wzb/b7o0/3G9Nf9zwDb/dcM3/3fG + N/94xzj9brYzqUt9IxdZlSkAKkYTBXfGN4iC2T39g9s9/4HWPP9zvzX/bLQy/263M/9vujT/cb01/3PA + Nv91wzf/d8Y3/3jIOP5stDKJHTAOBXG9NECB1jzng9o9/37VOf9uujH/Zq0u/2iwL/9qsy//bLYw/225 + Mf9vvDL/cb8z/3PCNP93xjf/dcM26GSmLkF90DqZg9o9/4faQ/+Py2D/ibxg/4q/Yf+MwWH/jcNi/4/G + Yv+QyGP/kctk/5PNZf+RzWD/esU9/3rLOP92xTeagdc81YLaPP+N3U7/4/TW//j69v/1+fP/9vn0//f6 + 9P/3+vT/9/r0//b68//4+/f/4fDU/4PNSP+B1zv/ftI714LZPO+D2j3/hNo+/8rvrf/+/f7/yuC5/+/1 + 6//+/v///v7///D26//O5bv//v3+/8bqqv+C1z3/g9o9/4DVO++C2T3ug9o9/4LaO/+W31v/5vbZ/+/1 + 6//5+/j//f39//39/f/5+/j/8Pbr/+b22f+V31r/gto7/4PaPf+A1jzvg9k91IPaPf+D2j3/gto7/5vh + Y//j9tP/+fz2//39/f/9/f3/+fz2/+P20/+b4WP/gto7/4PaPf+D2j3/gNU71YPZPZSD2j3/g9o9/4La + PP+O3U7/quV6/6Ljbf+z6In/s+iI/6HjbP+s5n3/jt1P/4LaPP+D2j3/g9o9/3/TO5aD2jw6g9o95YPa + Pf+C2jz/kN5S/43dTf+B2Tn/gdk6/4HZOv+B2Tn/jt1O/5DeUv+C2jz/g9o9/4LYPOZ8zzo7g9o7AoPa + PYGD2j39g9o9/4PaPP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPP+D2jz/g9o9/4PaPf2B1jyCaK8vAoPb + PQCD2z0Rg9s9oYPaPf2D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf2C2T2hf9M7EYDV + OwCF2zwAhNs9AITcPRGD2z2Bg9o954PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPeeD2j2Bgtk8EYPa + PQB6yTgAAAAAAAAAAACE3D0Ahd09BITbPTqD2z2Wg9s91YPaPe+D2j3vg9o91YPbPZaE2z06hdw9BITc + PQAAAAAAAAAAAOAHAADAAwAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAQAAwAMAAOAHAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEChCEzJPgyVmZacvmnC7NMJ2xTfZeco45HbF + N+RstDLZZqovwl2ZK5pJeSJmJT0RMgAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADTleGjlioy6JdcM3z37SO/OC2Dz+g9o9/4Pb + Pf+A1jz/eMc4/3XDN/92xDf/dsQ3/nTBNvNstTLPW5cqiTRXGToAAAANAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyM5ECBenCx7eMg424HXPP6D2z3/g9o9/4Pa + Pf+D2j3/gNU8/3bEN/9zvzb/dME2/3XDN/92xDf/d8Y3/3jIOP94xzf+b7k021eQKXwgNA8gAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwUCAAAAAAQ9ZRw0b7g0r4DVO/mD2z3/g9o9/4Pa + Pf+D2j3/g9o9/3/UO/90wjb/cb01/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yjj/d8Y3+Waq + MLA3Wxo1AAAABAMEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGAgAAAAADR3chPHXDNsaC2T3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf9/1Dv/c8A1/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jI + OP95yjj/eck4/2yzMsdAaR48AAAAAwMFAgAAAAAAAAAAAAAAAAAAAAAAAAAAAUVzIDB2xTfFg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/f9M7/3G9Nf9ttzP/brkz/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XD + N/92xDf/d8Y3/3jIOP95yTj/eco4/2y0MsY8ZBwxAAAAAQAAAAAAAAAAAAAAAOP/aQAxURcZc8A1rILZ + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/37TO/9wuzT/bLQy/222M/9uuDP/brkz/2+6NP9wvDT/cb41/3K+ + Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yTj/eck4/2itMK4oQhMZtP9UAAAAAAAbLQ0AAAAABWqx + MXSB1zz5g9o9/4PaPf+D2j3/g9o9/4PbPf9+0jv/brg0/2qxMf9rsjL/bLQy/222M/9uuDP/brkz/2+6 + NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yjj/d8Y3+V2bK3YAAAAFFSMKAMT/ + WwBVjScsfdA62YPaPf+D2j3/g9o9/4PaPf+D2z3/ftI7/222M/9orTD/abAx/2qxMf9rszL/bLQy/222 + M/9uuDP/brkz/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jIOP95yjj/cbw02kZ0 + IS6i/0wAAAAAA3PANX+D2T3/g9o9/4PaPf+D2j3/g9s9/33ROv9rtDL/Zqsw/2esMP9orjH/abAx/2qx + Mf9rszL/bLQy/222M/9uuDP/brkz/2+6NP9wvDT/cb41/3K+Nf9zwDb/dME2/3XDN/92xDf/d8Y3/3jI + OP94xzf/ZKYugQAAAANSiCYeftI6y4PaPf+D2j3/g9o9/4PaPf97zzf/Z68u/2GmK/9iqCz/ZKos/2Wr + Lf9mrC3/Z64u/2iwLv9osS//abMv/2q1L/9rtjD/bLcw/225Mf9uuzH/b7wy/3C9Mv9xvzP/csAz/3XD + Nv92xDf/d8U3/3rLOf92xDfNRXIgIHC6NFOC2Dzyg9o9/4PaPf+D2jz/ittJ/6DQev+exn7/n8h+/5/J + fv+gyn7/oct//6HLf/+izH//os6A/6PPgP+jz4D/pNCA/6TSgf+l0oH/pdOB/6bUgf+n1YL/p9aC/6jX + g/+k1Xz/fcVD/3XCNv94xzj/gNU8/4DUO/Njpi5Wesw5jYPaPf+D2j3/g9o9/4LaPP+S3lX/7fjk//79 + /v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//v3+/+r04f+Cxkz/dcQ2/3/UO/+D2j3/gtk8/3G8NJB/0zu6g9o9/4PaPf+D2j3/g9o9/4fb + RP/b88j///7///39/f/9/f3//v7+///+///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39///+ + ///+/v7//f39//39/f///v//1OrC/3jEPP9+0zv/g9o9/4PaPf+D2j3/d8c3vYHWO9WD2j3/g9o9/4Pa + Pf+D2j3/gto7/7nqkv/9/f3//f39//7+/v/m8N7/xd2x//X48v/+/f7//f39//39/f/9/f3//f39//39 + /v/1+fL/yOKz/+jy3//+/f7//f39//39/f+v3Iv/fNE4/4PaPf+D2j3/g9o9/4PaPf97zTnXgdg84oPa + Pf+D2j3/g9o9/4PaPf+C2jv/k95V/+r33v/+/f////7//73YqP93sUn/5O/b///+///9/f3//f39//39 + /f/9/f3///7//+Pw2f99vEz/xOCu///+///+/f//6PXc/4/ZU/+C2jz/g9o9/4PaPf+D2j3/g9o9/33Q + OuSC2Dzig9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/s+iJ//r8+P/+/f7/8fbt/+Ds1v/6+/n//f39//39 + /f/9/f3//f39//39/f/9/f3/+fv4/+Hv1v/z+O///v3+//n89/+y54f/gto7/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/fdE65ILYPNSD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+H20P/x+2n//z9+//+/v////7///39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3///7///79///8/fv/xu2m/4bbQv+D2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf98zzrWgtg8uIPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+J3Eb/w+yi//f7 + 8//+/f7//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/v/+/f7/9/vz/8Psof+J3Eb/gto8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/3vNObqB1zyIg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+E2j//tOiL//L66//4/PX///3////+/////f////3////+/////f//+Pv0//L66/+06Ir/hNo//4La + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eMk4i4HXO0uD2j3xg9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+56pL/sueG/6Tkcf/E7aP/1/LB/9/1zv/f9M7/1vLA/8Lsof+j427/teiM/7rq + lP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HXPPJ1wzZOf9M6FoPaPceD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jv/nOFk/8ftqP+I20X/gdk6/4LaO/+F20H/iNtF/4jbRf+F20D/gto7/4HZ + Ov+K3Ef/y++u/5zhZP+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/f9M7yWy0MheO7EIAg9o8doPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+26Y3/n+Jq/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4HaO/+j42//t+mO/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf97zTl4q/9QAIPa + PACC2Twhg9s91YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4rcSP+E2j//g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4TaP/+K3En/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gNU71nXD + NiJ3xzcAgNQ7AIfiPwCD2z1og9o9+YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZ + Pfl90Dppov9MAGitMAAAAAAAg9o8AIPZPAyD2z2jg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gNU7pHXDNg13yDcAAAAAAAAAAAAAAAAAg9s9AIPbPR+D2z2/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LYPL99zzogf9M7AAAAAAAAAAAAAAAAAAAAAACFyzQAhN0+AITbPSmD2z2/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j2/gNU7KoTfPwBsoSoAAAAAAAAAAAAAAAAAAAAAAAAAAACD1z0AhN09AITc + PR+E2z2kg9o9+YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j35g9s9pILYPCCF3j0Aecg6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABoQBQAhNw9AITcPQyE2z1og9s91oPaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3+g9s91oTbPWiE3D0MhNw9AE0oDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAhd08AIfeOwCE3D0hhNw9d4PbPcmD2z3yg9o9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf6D2j3yg9s9yYTbPXeE3D0hiOA7AIXdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjfPQCM4z4Bhd09FoTcPUyE2z2JhNs9uYPb + PdaD2z3kg9s95IPbPdaE2z25hNs9iYTcPUyF3T0WjOM+AYjfPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP8AAP/8AAA/+AAAH/AAAA/gAAAHwAAAA8AAAAOAAAABgAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AA + AA/4AAAf/AAAP/8AAP//gAH/KAAAADAAAABgAAAAAQAgAAAAAAAAJAAAEwsAABMLAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAA + ABYCBAEkIDMQPEBqHl5WjyiEY6UvpWyzMr5wujTNcr811XO/NdVrszLNYqItvluWKqVPgyWEO2EcXh0w + DzwCBAEkAAAAFgAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAsAAAAXGCgMMUZ0IWJipC6ecr410HvMOe1/1Dv6gdg8/4LZPf+D2j3/g9o9/3/TO/93xjf/dcM3/3XD + Nv90wTX6cbs07WmvMdBblyqeQWseYhYlCzEAAAAXAAAACwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAHAAAAFB8yDjNTiSd3brczxXzOOfOC2Dz/g9s9/4PbPf+D2j3/g9o9/4PaPf+D2j3/ftI7/3XE + N/91wjb/dcM3/3bEN/93xTf/d8Y3/3jIOP93xzf/c78182aqL8VNfyR3HC4OMwAAABQAAAAHAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAwMEwYjS3wjZm+4M8V+0jr5g9o9/4PbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf9+0Tv/dME2/3O/Nv90wTb/dcI2/3XDN/92xDf/dsU3/3fGN/94xzj/eck4/3nKOP91wzb5Z6swxkRx + IWYKEQUjAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAECpFFDhkpS6de8058IPaPf+D2z3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/33ROv9zwTb/cr41/3K+Nf9zwDb/dME2/3XCNv91wzf/dsQ3/3bFN/93xjf/eMc4/3jI + OP95yjj/eco4/3O+NfBbmCueJj4SOQAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAATQGkeTXC7NMWB1jz9g9s9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/fdA6/3K/Nf9wvDX/cb41/3K+Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bE + N/92xTf/d8Y3/3jHOP94yDj/eck4/3rLOP94xzj9Z6wwxjleG04AAAATAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABNKeyNadsQ32ILZPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf98zzr/cbw1/2+6NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PA + Nv90wTb/dcI2/3XDN/92xDf/dsU3/3fGN/94xzj/eMg4/3nJOP96yjj/eco4/220MtlCbR9bAAAAEwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD01/JFl4yDjeg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3zPOv9wuzT/brgz/2+5NP9vujT/cLs0/3G9 + Nf9xvjX/cr41/3K+Nf9zwDb/dME2/3XCNv91wzf/dsQ3/3bFN/93xjf/eMc4/3jIOP95yTj/eso4/3rL + Of9utzPfQ28fWgAAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKRnQgSXfH + N9eD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fM46/2+5NP9ttjP/brgz/264 + M/9vuTT/b7o0/3C7NP9xvTX/cb41/3K+Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bEN/92xTf/d8Y3/3jH + OP94yDj/eck4/3nKOP96yzn/bbUy2TxkHEsAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAU1WBkxdMI2xIPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf97zTr/brcz/2y0 + Mv9stTL/bbcz/264M/9uuDP/b7k0/2+6NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PANv90wTb/dcI2/3XD + N/92xDf/dsU3/3fGN/94xzj/eMg4/3nJOP95yjj/eso4/2itMMUsSRUyAAAABQAAAAAAAAAAAAAAAAAA + AAAAAQAAAAAAAhAbCBdstDKagtg8/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3vN + Of9ttjP/arIy/2uzMv9stDL/bLUy/223M/9uuDP/brgz/2+5NP9vujT/cLs0/3G9Nf9xvjX/cr41/3K+ + Nf9zwDb/dME2/3XCNv91wzf/dsQ3/3bFN/93xjf/eMc4/3jIOP95yTj/eso4/3jHOP5enSycDBQGGAAA + AAIAAQAAAAAAAAAAAAAAAAAAAAAACFuYKl1+0zvwg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/e8w5/2y0Mv9psDH/arEx/2uyMv9rszL/bLQy/2y1Mv9ttzP/brgz/264M/9vuTT/b7o0/3C7 + NP9xvTX/cb41/3K+Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bEN/92xTf/d8Y3/3jHOP94yDj/eck4/3rL + OP9zwDXxTH8kYAAAAAgAAAAAAAAAAAICAAAAAAACNVcYJHjIN8KD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf96zDn/arEx/2itMP9przH/abAx/2qxMf9rsjL/a7My/2y0Mv9stTL/bbcz/264 + M/9uuDP/b7k0/2+6NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PANv90wTb/dcI2/3XDN/92xDf/dsU3/3fG + N/94xzj/eMg4/3nJOP95yjj/aa8xxChDEyUAAAACAAMAAGWbKQAAAAAGZ6wwbYHYPPmD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/3rLOf9psDH/Z6ww/2itMP9orjH/aa8x/2mwMf9qsTH/a7Iy/2uz + Mv9stDL/bLUy/223M/9uuDP/brgz/2+5NP9vujT/cLs0/3G9Nf9xvjX/cr41/3K+Nf9zwDb/dME2/3XC + Nv91wzf/dsQ3/3bFN/93xjf/eMc4/3jIOP95yjj/dcQ2+laOKG8AAAAGMl8cAAAAAAA2WRkdesw5wYPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/eco5/2iuMf9lqi//Zqsw/2esMP9orTD/aK4x/2mv + Mf9psDH/arEx/2uyMv9rszL/bLQy/2y1Mv9ttzP/brgz/264M/9vuTT/b7o0/3C7NP9xvTX/cb41/3K+ + Nf9yvjX/c8A2/3TBNv91wjb/dcM3/3bEN/92xTf/d8Y3/3jHOP94yDj/eco4/2qxMcMoQxMeAAAAAAAA + AAJkpy5Rgdc88oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf95yjj/Z6ww/2SnL/9lqS//Zaov/2ar + MP9nrDD/Z60w/2iuMf9przH/abAx/2qxMf9rsjL/a7My/2y0Mv9stTL/bbcz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cb01/3G+Nf9yvjX/cr41/3PANv90wTb/dcI2/3XDN/92xDf/dsU3/3fGN/94xzj/eck4/3jJ + OPRWjyhVAAAAAgAAAAp3xjeUg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3jJN/9lqi7/YqUt/2Om + Lf9jpy7/ZKgu/2WqLv9mqy//Zqwv/2esL/9nrTD/aK4w/2mwMP9psTD/arIx/2qyMf9rtDH/bLUx/2y2 + Mv9ttzL/bbgy/265M/9vujP/b7sz/3C8NP9wvTT/cb40/3K+NP9yvzX/c8A1/3XCNv91wzf/dsQ3/3bE + N/94xzf/ftE7/4LYPP9sszKYAAAAC0x9IyJ/0zvMg9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/j9xS/7XY + mf+21J//t9We/7fVnv+31Z//uNaf/7jXn/+415//uNif/7nYn/+52J//udmg/7rZoP+62qD/utqg/7rb + oP+726D/u9yg/7vcof+73aH/vN2h/7zeof+83qH/vd+h/73fof+94KL/veCi/77gov++4aP/uN+a/4LH + S/90wTX/dcM3/3bFN/990Dr/g9o9/4PbPf93xjfPPGIbJWmvMUiC2Dzsg9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jv/lt9a//H66v///v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v//7fbm/4bIUf9ywDT/dcM2/3zPOv+D2j3/g9o9/4PbPf990DruWJIpTHXDNnOD2j36g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2jz/i9xJ/+L10////f///f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f///v//2+7M/3nBP/9zwDb/fM46/4PZPf+D2j3/g9o9/4PaPf+A1jv7ZqsveHvO + OZuD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/8nurP///f///f39//39/f/9/f3//f39//39 + /f/+/v///v7///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+ + ///+/v7//f39//39/f/9/f3//f39//39/f///v//vuCi/3K/Nf97zTn/g9k9/4PaPf+D2j3/g9o9/4Pa + Pf+C2Dz/b7kzn37TOraD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdo6/6jld//5/Pb//f39//39 + /f/9/f3//f39//z9/P/m8N7/5e/d//z8+//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//Pz8/+fy3v/o8t///P38//39/f/9/f3//f39//39/v/3+vT/mM9t/3nMNv+D2T3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2T3/dME1uoDVO8mD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto8/4vc + Sv/g9c7///3///39/f/9/f3///7//+Lt2f97s0//erNN/+Ht1////v///f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f///v//4e/W/4G+UP+EwFT/5fHc//7+///9/f3//f39///+///Z7cn/gs9F/4LZ + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/d8c3zIHXO9OD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaO/+v54P/+vz4//39/v/9/f3///7//9zq0f9wrEH/cq5D/97r0////v///f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f///v//3OzP/3e4Q/98u0n/4u/X///+///9/f3//f3+//n8 + 9/+r4n7/gdk7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/eco41oHXPNOD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+J3Eb/1fK+//79///9/f3//f39//r7+f/Y58v/2enN//v8 + +v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+vv5/9nqy//c7ND/+/z6//39 + /f/9/f3//v3//9Pxu/+I20X/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/eco41oHX + O8iD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/mOBe/+j33P/+/f///f39//39 + /f///v////7///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39///+ + /////v///f39//39/f///f//5/fa/5fgXP+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/eMk3zIHWO7WD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/6Tj + cf/u+eX//v3///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//79///t+OT/o+Nv/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/d8Y3uYDVO5iD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaPP+k43H/6ffe//79///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3//+n33f+k43D/gto8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2Tz/dMI2nH/TO26D2j37g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/meBg/9fywP/5/Pf//v3+//39/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//79/v/5/Pf/1vLA/5ngX/+C2jv/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+B1zz7cbw0cn3QOUCD2j3rg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/4vcSv/Z88T/9Pru//j8 + 9v///f///v3///79/v/9/f7//f39//39/f/9/f7//v3+///9/////f//9/v0//T67//Z88T/i9xK/4La + O/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/1Dvta7IxQ3jI + NxiD2jzJg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5zh + ZP/h9dH/peRy/6jldv/L767/5PbV//D56f/3+/P/+fz3//n89//2+/P/8Pno/+L10//I7qr/peRy/6jl + eP/l9tf/m+Fj/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf98zznMYKAsGhoWBwGC2DyOg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/httC/9Dwtv/C7KH/g9o9/4HZOv+D2j7/jNxK/5bfW/+f4mr/pORx/6Tjcf+f4mn/ld9a/4vc + Sf+D2j3/gdk6/4TaP//J7qv/0fC3/4bbQv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf94xzeRAAAAAonkQACA1jtFg9s98oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jv/quV6/+D1z/+S3lT/gto8/4PaPf+D2j3/gto8/4LaO/+B2jr/gdk6/4HZ + Ov+B2jr/gto7/4PaPP+D2j3/g9o9/4LaO/+W31r/5PbW/6nlef+C2jv/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DVO/NxvTRIfdI7AH7TOwB8zjgPg9o9vIPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+K3En/2fPF/7PoiP+C2jv/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/uemS/9vzx/+K3Ej/g9o8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/3zPOb5kpy0QabExAG+4MACK50IAgtk8X4Pb + PfmD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+L3En/ruaB/4rcSP+D2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/jN1L/7Dn + g/+K3Ef/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdc8+nbFN2KQ8UUAVIkjAHTF + AwCB1z0AgNU7E4PbPb2D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o8/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fdE6v2y0 + MhRvuTUAacwCAAAAAAB6zjsAhd8+AIPaPEyD2z3vg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+B1zzweMg3ToPcPQBjpy8AAAAAAAAAAAD//7EAgNU6AIDSOgWD2z2Og9s9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf980DqQZqkuBm63MgDU/3oAAAAAAAAAAAAAAAAAAAAAAIPaPQCC2TwbhNs9vYPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DVO792xDccess4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIXX + PgCD3DwAg9s9MoTbPdSD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdc81XvNOTOD2jwAZ6kyAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB+zTkAiu5CAIPbPEOE2z3dg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2TzdftE6RJv/SwBusTIAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhtw9AGLhRwCE3D1DhNs91YPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPdWB1jxE///hAH3N + OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAILYPACH5T8AhNw9M4Tc + Pb+D2z39g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j39g9s9v4HY + PDOS9kUAe804AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACG3j8AhNw9AITcPRuE3D2Pg9s98IPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + PfCE2z2PhNs9G4bfPQCB2D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAITbPACE2zwGhNw9TYTcPb6D2z35g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2z35hNs9voTcPU2E2zwGhNs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI5DMAgtdCAIXdPBOE3D1hhNw9voPb + PfOD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9s984TbPb6E3D1hhd09E4LWQgCI5TMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIzh + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAABQDBAIkOFsbU2OlLqx4yDjvgdc8/4Pb + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2T3/e805/3PANv9zvzb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3nJOP95yjj/eMg3/3C6NO9cmCusMlMYVAME + AiUAAAAUAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACwAAABkbKw01V48ph3TB + NuKA1jv/g9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2T3/e805/3K/ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nK + OP96yzj/eMc3/2yzMuNPgyWIFyYMNQAAABkAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADQAA + AB01WBpMaK0wt33QOvmD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2T3/esw5/3K+Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yzn/dME2+WCfLLgwThdNAAAAHQAAAA0AAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAADgAAACBHdiFicr411oHXPP+D2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2T3/ess5/3G8NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/dME2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3rLOf94yDj/aa4w1z9p + HmQAAAAhAAAADgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADQYKAyNRhiZydsU35YLZPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eco5/3C7NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP95yjj/eso5/3rKOP9ttjLlR3YhdAUIAiMAAAANAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAYJAyFVjih5eco47IPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eco4/2+6M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yjn/ess5/2+5NO1MfCN7BAcCIgAAAAwAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQAAABxUjCdxess57IPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/eck4/265 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3rKOf96yzn/cLo07Ul5 + InMAAAAdAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA + ABZNgCRfeMk45IPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2T3/eMg4/223M/9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv90wTb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP95yjj/eso5/3rLOf9utzPmQm0fYQAAABcAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABA/aB1HdsQ21YPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/eMg4/2y1Mv9stDL/bLUy/222M/9ttzP/brgz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yjn/eso4/2qvMdc0VRhIAAAAEAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAojOhAsb7oztYLYPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/d8c4/2y0Mv9rsjL/a7My/2y0Mv9stTL/bbYz/223 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3rKOf94yDj/YaIttxsu + DS0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAXYqQug3/VO/qD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/d8Y3/2uyMv9qsTH/arIy/2uy + Mv9rszL/bLQy/2y1Mv9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP95yjj/ess5/3XCNvpTiieGAAAAGAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMSXoiSXvN + OeKD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/d8Y3/2qx + Mv9przH/abAx/2qxMf9qsjL/a7Iy/2uzMv9stDL/bLUy/222M/9ttzP/brgz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3TBNv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eck4/3nKOP96yzn/bbYz4zphG0wAAAAMAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAFFyUKHnG8NKiC2Tz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2T3/dsU3/2mvMf9orTH/aa8x/2mwMf9psDH/arEx/2qyMv9rsjL/a7My/2y0Mv9stTL/bbYz/223 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/c8A2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yTj/eco4/3jIOP9fni2sDxoIHwAA + AAUAAAAAAAAAAAAAAAAAAAABAAAACliSKVh/1Dvvg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/dsQ3/2iuMf9nrDD/aK0w/2iuMf9przH/abAx/2mwMf9qsTH/arIy/2uy + Mv9rszL/bLQy/2y1Mv9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eMg4/3nJ + OP96yzj/cbw08EZ0IVsAAAALAAAAAQAAAAAkKgcAAAAAAxwtDBt1wzaug9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/dcM3/2etMP9mqzD/Z6ww/2esMP9orTD/aK4x/2mv + Mf9psDH/abAx/2qxMf9qsjL/a7Iy/2uzMv9stDL/bLUy/222M/9ttzP/brgz/264M/9uuDP/b7k0/2+6 + NP9wuzT/cLw0/3G9Nf9xvjX/cr41/3K+Nf9zvzb/c8A2/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3jIOP94yDj/eco4/3jIN/9ioy2xEiAJHQAAAAMGIAYAAAAAAAAAAAdYkyhLf9U764Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/dMM2/2arMP9lqS//Zaov/2ar + MP9nrDD/Z6ww/2itMP9orjH/aa8x/2mwMf9psDH/arEx/2qyMv9rsjL/a7My/2y0Mv9stTL/bbYz/223 + M/9uuDP/brgz/264M/9vuTT/b7o0/3C7NP9wvDT/cb01/3G+Nf9yvjX/cr41/3O/Nv9zwDb/dME2/3TB + Nv91wjb/dcM3/3bEN/92xDf/d8U3/3fGN/94xzj/eMg4/3jIOP95yjj/cLs07EVyIE8AAAAHAAAAAAAA + AAICAwAQcr81k4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/dMI2/2Wp + L/9kpy//Zakv/2WpL/9lqi//Zqsw/2esMP9nrDD/aK0w/2iuMf9przH/abAx/2mwMf9qsTH/arIy/2uy + Mv9rszL/bLQy/2y1Mv9ttjP/bbcz/264M/9uuDP/brgz/2+5NP9vujT/cLs0/3C8NP9xvTX/cb41/3K+ + Nf9yvjX/c782/3PANv9zwDb/dME2/3XCNv91wzf/dsQ3/3bEN/93xTf/d8Y3/3jHOP94yDj/eck4/3rM + OP9jpS6YAQAAEQAAAAIAAAADRnMgKn7ROtGD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2Tz/c8E2/2SoLv9jpi3/Y6Yu/2SnL/9kqC//Zakv/2WqL/9mqy//Z6ww/2esL/9nrTD/aK4w/2iu + Mf9przD/abAx/2qxMf9qsjH/a7Iy/2uzMv9stDH/bLUy/2y2Mv9ttzP/bbgz/264M/9uuDP/b7kz/2+6 + NP9wuzP/cLw0/3C9NP9xvjX/cb41/3K+Nf9yvzX/c782/3PANv90wTb/dcI2/3XDN/92xDf/dsQ3/3fF + N/93xjf/eMc4/3vNOv+C2Dz/dME21TdaGS0AAAADAAAABmisMFmC2Tz0g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2T7/eMM8/2ipNf9nqDT/aKk1/2ipNf9pqTX/aao1/2mrNf9qrDb/aq02/2uu + Nv9srjb/bK82/22vN/9tsDf/bbE3/26yN/9uszf/b7Q4/2+0OP9wtTj/cLU4/3G2OP9xtzn/cbg5/3K5 + Of9yujn/c7o5/3O7Ov9zuzr/dLw6/3S9Ov91vjv/db87/3bAO/92wDv/d8A7/3fBPP93wjz/eMI8/3XC + OP91wjb/dcM3/3bEN/92xDf/d8U3/3vMOf+C2Dz/g9s9/33QOvZWjyheAAAABgEAAA13xjeRg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/lt5c/8ritv/N4b3/zeG9/87ivf/O4r3/zuK9/87i + vf/O4r3/zuO9/87jvv/P5L7/z+S+/8/kvv/P5L7/z+S+/8/lvv/P5b7/0OW+/9Dlvv/Q5r7/0Oa+/9Dm + vv/Q5r7/0Oa+/9Dnvv/Q57//0ee//9Hov//R6L//0ei//9Hov//R6L//0um//9Lpv//S6b//0um//9Lp + v//S6b//0+rA/8znt/+JylX/c8E0/3XCNv91wzf/dsQ3/3rLOf+C2Dz/g9o9/4PaPf+B1zz/Z6wwlgAA + AA49ZBweftI6wIPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5nhYP/z++z///7////+ + /////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+ + /////v////7////+/////v////7////+///v9+j/icpW/3LANP90wTb/dcI2/3rLOf+B2Dz/g9o9/4Pa + Pf+D2j3/g9o9/3K+NcQtShUgXp4sOYHXPOCD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+O3U7/5/fa//79///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f///v//3/DS/3zDQ/9yvzX/c8A2/3nJ + OP+B1zz/g9o9/4PaPf+D2j3/g9o9/4PbPf95yjjjS30jPm22MlmC2Tzyg9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/hdtA/9Pxu////f///f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3///7//8jl + sP9zvzf/cr81/3jIOP+B1zz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fdE69FqWKl52xTd8g9o9/IPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaO/+26Y7//P38//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79/v/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//v8+v+n1oL/cL0z/3fHOP+B1zz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DV + O/xlqC+Ce805l4PaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/meBf//D5 + 6P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//Pz8//P48P/5+vf//v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//n7+P/0+PD//P38//39 + /f/9/f3//f39//39/f/9/f3//f39//7+///r9eT/h8dU/3bGNv+B1zz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+B1zz/bLMxnH3ROquD2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4bbQf/R8Lf///3///39/f/9/f3//f39//39/f/9/f3/+/z7/77ZqP+CuFj/n8h+/+/1 + 6v/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//D2 + 6v+k0IH/isNc/8Tgrf/8/Pv//f39//39/f/9/f3//f39//39/f///v//xuOu/3jGOv+B1zz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtk8/2+6M7B/1Du6g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/peRy//b78f/+/f7//f39//39/f/9/f3//v7+/+zz + 5/97s1D/XqMp/2WnMf/M4bv///7///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39///+///L47f/bbM0/2exLf+GwVf/8Pbr//79/v/9/f3//f39//39/f/+/f7/8/jv/5rV + av9/1jr/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP9zvzW/gNU7woPa + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/4fbRP/R8bj//v3///39 + /f/9/f3//f39//79/v/z9/D/jr1p/2GkLP91sEf/3evS///+///9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f///v//2erL/3i5Rf9qsjH/m8t1//b69P/9/f7//f39//39 + /f/9/f3//v3//83ts/+F2EL/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/dMI2x4DWO8KD2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jv/nOFk/+755f/+/f///f39//39/f/9/f3//f3+/+Xv3f+/2qv/2OjL//v8+//9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//r8+f/V6cb/xOCu/+rz + 4//+/f7//f39//39/f/9/f3//v3//+344/+a4WH/gto7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o8/3XDNseA1Tu6g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+26Y7/+fz3//39/v/9/f3//f39//39/f/+/v7///7////+ + ///9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3///7////+///+/f7//f39//39/f/9/f3//v3+//j89v+06Ir/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP90wTa/f9U7qoPaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/iNtE/8nuqv/8/fz//f3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//z9+//H7af/h9tD/4Pa + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2Tz/cr41r3/T + O5WD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+N3Uz/0fG5//39/P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//39 + /P/Q8Lb/jNxL/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gdg8/3C7NJp90Tp4g9s9/IPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/43dTf/O77L/+/z6//79/v/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//v3+//v8+v/N77H/jd1N/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DWO/xttTJ+e805U4PbPfKD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/itxI/7/rnP/0+u///v3///39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//v3///T67v+/65v/itxI/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/0zvzaKwwV3jHNzCD2j3gg9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+F2j//qOR2/+H10P/8/fv//v3///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/v/+/f///P37/+D10P+n5Hb/hNo//4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/fM454mGi + LTRstDATgtk8vYPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HZOv+n5Hb/9fvw/+/55//5/Pb///3///79///9/f7//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//v3///79///3+/T/7/nn//b78f+n5HX/gdk6/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/3jIOMFRhyUVJS8LAoHXPIuD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+H20T/0vG6/+P21P+a4WH/q+Z8/8/w + tP/q997/9/vz//z9+//+/f////3////+/////v////3///79///8/fv/9vvy/+f32//L76//p+R1/53h + Zf/p997/0vG5/4fbRP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPP9zwDWPDQ8DA5X/SAB/1DtOg9s99YPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/q+V7//L6 + 7P+u54H/gdk6/4HaO/+F20D/kd5S/6Pjb/+z6Ij/wuyf/8rurf/P8LX/z/C1/8rurP/A7J3/seeG/6Hj + bP+P3VD/hNo//4HaOv+C2jv/t+mO//T78P+q5Xv/gto7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/1Dv2bbUyUoftQQCE3kQAess4G4Pa + PdCD2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jz/jd1N/+H10P/W8r//idxG/4PaPP+D2j3/g9o9/4LaPP+B2jr/gdo6/4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/gto7/4HaOv+B2jv/gto8/4PaPf+D2j3/gto8/4zdS//e9Mv/4PXQ/43dTf+C2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/e8050mKk + LR5qszcAZaY4AEx8IwKC2TyLg9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o8/7rqk//w+ej/oOJr/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/p+V2//T6 + 7v+56pL/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg8/3XDNo8pQBMDSXcqAGSSGwCL7kUAgNU7O4PbPeqD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5bgW//r+OH/x+2n/4XaP/+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o8/4bbQv/P8LT/7Pjh/5bfW/+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/37SOuxttjI/e9Q9AFmCGACW2iAAdsk/AHrJNwmD2jyng9s9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaO/+n5HX/3fTK/5Tf + WP+C2jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jv/muFh/+H10f+l5HL/gto7/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf95yTiqW5YoClycMQCEvxwAAAAAAFSM + IACO7UcAgdc8RoTbPe6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/iNtE/47dTv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4TaPv+P3VD/h9tD/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf9/1Dvvcbw0Sovm + RQBAaxgAAAAAAAAAAACF6RQAd8pAAHnJNwiD2z2gg9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gto8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2Tz/ess4o1yaKwlfoTMAe9sUAAAAAAAAAAAA//8AAGquTACF4D0Agtk8NITbPeCD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/f9M74nO/NTd70DgAVY09AP//AAAAAAAAAAAAAAAAAAC2/1sAc842AH+x + LwGD2j11g9s9+oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdg8+3jJOHc6XBgBYKgtAInMRAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMr/aAB+1zoAgdY8EoPbPa6D2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/33QOrBuuTMTccA0AJLY + SwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARHYcAILhPACC2TwuhNw904PbPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4DV + O9R2xTcwe9Y5ADNYEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//EABZx04Af+E+AIPb + PUmE2z3kg9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4HXPOV7zDlKkv5EAEygPAD//xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6f96AHfPNAB8xzcCg9o8X4TbPe2D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPO590DphYZgsAme2LgD//4kAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg9o7AIPYOQSE3D1phNw97YPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPe5/1Dtqcrs0BHjHNwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACD2T0Agtc8BITb + PWCE3D3kg9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPeWA1jxhd8U5BXvM + OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAILXPACB0jsChNw9SoTcPdSD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + PdSB2DxKdcA1AnvMOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi986AFvEUACE3D0vhNw9r4TbPfqD2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9s9+oTbPa+D2jwvhf9qAIbWNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI3TsAgto9AITb + PRKE3D12hNw94oPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2z3/hNs94oTcPXaE2zwSgto+AIreOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACE2D0Ag9c9A4TcPTaE3D2ihNs974PbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+E2z3vhNw9ooTcPTaE1z0DhNk9AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AACF3D0Ahdw9CYTcPUiE3D2phNs97IPb + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/4TbPeyE3D2phNw9SIbdPQmG3D0A//8AAP// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv/wAAb/8AAGb/ + AACB2jgAht48CYTcPT2E3D2OhNw90oTbPfaD2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf+D2z32hNw90oTcPY6E3D09ht48CYDa + OgBj/wAAb/8AAG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH3zoAiuI+A4XdPByE3D1QhNw9jYTcPcCE2z3ihNs99IPb + Pf2D2z3/g9s9/4PbPf+D2j3/g9o9/4PaPf+D2z3/g9s9/4PbPf2D2z30hNs94oTcPcCE3D2NhNw9UIXd + PByK4j4Dh986AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgdQ6AIze + QgOF3T0ShNw9MITcPVSE3D16hNw9l4TcPa6E3D2/hNw9x4TcPceE3D2/hNw9roTcPZeE3D16hNw9VITd + PTCF3j0SjN9CA4LUOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAAAB/////gAAAAB////8 + AAAAAD////AAAAAAD///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//AAAAAAA + AD/4AAAAAAAAH/gAAAAAAAAf8AAAAAAAAA/gAAAAAAAAB+AAAAAAAAAHwAAAAAAAAAPAAAAAAAAAA4AA + AAAAAAABgAAAAAAAAAGAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAcAAAAAAAAADwAAAAAAAAAPgAAAAAAAAB+AA + AAAAAAAH8AAAAAAAAA/wAAAAAAAAD/gAAAAAAAAf/AAAAAAAAD/+AAAAAAAAf/4AAAAAAAB//wAAAAAA + AP//gAAAAAAB///AAAAAAAP///AAAAAAD///+AAAAAAf///8AAAAAD////8AAAAA/////8AAAAP///// + 8AAAD//////+AAB///8oAAAAgAAAAAABAAABACAAAAAAAAAAAQATCwAAEwsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABQAAAAgAAAAMAAAAEQAAABUAAAAaAAAAHwEB + ACMDBgEoBgcDKwYHAi4GCQMvBgYELwMDBC8CAQMxDhcKOiAzEEcsRRVRNFMaWzleHGM9ZB1rQWsgdUZ0 + In5IeCOES3sjh0t7I4dIeCOERnUifkJsIHU9Yx5qNVcaYzBMGFsnPxRRHS4PRw4VCToBAQMxAQEELwID + BC8EBwMvAwcCLgQGAysDBgEoAQEAIwAAAB8AAAAaAAAAFQAAABEAAAAMAAAACAAAAAUAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAADAAAABgAA + AAkAAAANAAAAEwAAABgAAAAeAQEAIwMFACgEBgIrBAQDLAMEAy8JCwcyCxAHNyE1EUk4WxtkRnMhfFCD + JpNYkyusYJ8twmapL9FqsDLdbrcz5nG7NOxzvzXwdcM283bFN/V3xjf2d8Y49nbFN/V2xDfzc7818Guz + Muxkpy/mYaAt3V2ZK9FYkinDUYYmrEl4IpNAaR98NFQZZB8xD0kLDwc3BwkGMwQEAy8CAwMsBAYCKwEF + ACcAAQAjAAAAHgAAABgAAAATAAAADQAAAAkAAAAGAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAEAAAADAAAABgAAAAoAAAAQAAAAFQAAABsBAgAhBAUBJwQGASsCAwEtAQECLhEZ + CTklOhNJOl8dZ06BJZFaliu1ZKcv0221MulzvzXzeMk4+33QOv9/1Dv/gNY7/4LYPP+C2Tz/gto8/4Pb + PP+D2zz+g9s8/oPbPP6D2zz+g9s8/oLaPP5+0Tr/d8c2/3bENv91wzb/dME1/3TANf9yvjT/brcz+2mv + MPNkpi7pXZor01SLJ7VIdyKRNVcaaCE2EkkPFwk6AQECLwEBAi0CBgEsAgUBJwECACEAAAAbAAAAFQAA + ABAAAAAKAAAABgAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAABgAAAAoAAAAQAAAAFwAA + AB0BAgEjBQcCKQQHAi0FBQMvDRIJNixIFlJEciB4V5ApqGSmLtNvuDPud8Y3/HzPOf6B1zv/g9o8/4Pa + PP+D2zz+g9s8/oPbPf6D2j3/g9o9/4PaPP+D2jz/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2T3/fdA6/3bF + N/91xDb/dsQ2/3bEN/92xDf/dsU3/njGNv54xjb+d8Y2/3fHNv92xTb/c741/m62M/xmqjDuXZor01GF + JqlAaR55KUIUUwsRCDcEBgQvBQcCLQMGAikAAQEjAAAAHQAAABYAAAAQAAAACgAAAAYAAAADAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAACAAAABQAAAAkAAAAPAAAAFgABAB0CAwAkBQYCKgEBAS0IDAYzGyoPQkFrH3FWjyimZakw1nG9 + NPF6zDn9f9Q7/4LZPP6D2zz+g9o8/oPaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtk9/33QOv92xDf/dcI3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fHN/54yDf+eck3/njIN/51xDb/cbw0/WqvMPFenCzWUIQlpztiHHEYJg5CBwoGMwEB + Ai0BBAIqAQMAJAABAB0AAAAWAAAADwAAAAkAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABAAAAAgAAAAOAAAAFQAAAB0DBAEkBQYCKwMD + Ai0OFgg2ME8YVU2BJY1hoS7KcLk08nnKOP2A1jv/g9o8/4PbPf6D2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PZPf98zzr/dcQ3/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + N/95yjf+eMk3/3fGN/9xvTT9aK0w8VqVKstHdiKOLEgWVg0UCDYDBAItAwYCKwIEASQAAAAdAAAAFQAA + AA4AAAAIAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAA + AAYAAAAMAAAAEgAAABoDAwAiBQYCKQUEAy4MEQc1OFsaYFSLKJ5mqjDadMI2+n3ROv+C2jz/g9o8/oPa + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/fM86/3XDN/90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eck3/3rKN/55yjf/dcM1/2y1 + MvpfnizbToAlnzRUGWALEAg1AwMDLgEDAikAAwAiAAAAGgAAABIAAAAMAAAABgAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAJAAAADwAAABcBAQAgBAYCKAIDAiwOFQg1N1kaXFeQ + KaZqsDHkd8Y3+4DVO/+D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9k9/3zOOv90wjf/c8A2/3TB + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP96yjf/ess3/nbGNv9vuTT7Y6Qv5FCEJqcyURhdDBMINgEC + AiwDBAIoAAEAIAAAABcAAAAPAAAACQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAGAAAADAAA + ABMAAAAcAwQBJQUFAisJDQYyMFAXVFWNKJ5qsDHjeMg3/YHXO/+D2z3+g9s9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf98zjr/dME2/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/ecs3/3nLN/54yTf/cLs0/WKiLuROgCWfLEgWVQkNBjMCBQIrAwQBJQAAABwAAAATAAAADAAA + AAYAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAA4AAAAWAQIAIAMFACgDAwItGykOPk6AJYhlqC/TdsU2+4DW + O/6D2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/fM46/3PANv9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nLOP96yzj+eMc3/m+4 + M/tdmizURXIhihglDT8CAgMtAwUAKAECACAAAAAWAAAADgAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAkAAAAQAAEAGgME + ASQDBAIqDRQGMz9nH2Zgni29c781937TOv+C2jz+g9s9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtk9/3vNOv9zwDb/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP96yzj/e8s5/nfFN/9rsjL3Vo8pvzdbG2gMEwc0AwQCKwIE + ASQAAQAaAAAAEAAAAAkAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAUAAAAKAAAAEwABABwEBgImAgMCLSI3EUNShyeQbLMy5XvMOf6C2Tz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf97zTn/csA1/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/ess5/3rLOP9yvjX+YqQu5kh5IpIeMhBEAQMCLQIEAiYAAAAcAAAAEwAAAAoAAAAFAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAACwAAABQBAgAeAwQCKAME + Ai45XhtdYJ8tvXTBNvd/1Tv/g9o9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2T3/e806/3PANv9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TB + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3vLOP54yDf/a7My+FeQ + Kb8zUxleAwQCLgMEAigBAQAfAAAAFAAAAAsAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABQAAAAwAAAAWAgQAIAQEACkYJQw5THwkfGqwMd57zDj+g9o8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtk9/3rMOf9yvjX/cLw0/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rLOP96yzj+c781/mGgLeBCbh9/FiELOgEEASoCBAAhAAAAFgAA + AAwAAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAFgQGAiIAAAApIjcRQFmS + KptxuzXuf9Q7/4PaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LY + Pf97zDn/cr41/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rK + Of96zDj+dsY3/2erMO9OgCSeHjAPQQAAACkCBAIiAAAAFgAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAGAAAADQAAABcEBgIjAgMBKitHFUlfniy0dsQ3+ILYPP+D2z3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/ess5/3G9Nf9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96zDn/eck4/220MvlVjCe3JT0SSgID + ASsEBgIjAAAAFwAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAAAA0AAAAXBQYCIwMEAiw3WRpVY6YuwnnJ + OP2C2Tz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3rM + Of9xvDX/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rKOf96yzn/ess4/nG7NP1YkinEL0sXWAQFAi0DBwEkAAAAFwAAAA0AAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAUAAAAMAAAAFgUGAiMGBwItPWQdXmisMc56zDj9g9o8/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPf96yzn/cLs0/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzj/e8w4/nK+ + NP1cmCvQM1UYYQQIAi0DBgIjAAAAFgAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAACwAAABUFBgIiCA0ELUJtIGVrsjLYfdA6/4Pa + Pf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2T3/ess5/3C7 + NP9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/esw5/nTBNv9enSzaOl0baAgNBC4DBgIiAAAAFgAA + AAsAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAoAAAAUBQcCIQYHAitDbx9ka7My133ROv6D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtk9/3nLOf9wuzT/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rK + Of96yzn/esw5/nXBNv5fnSzZOl4bZwQIAiwDBwIhAAAAFAAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAJAAAAEgQGAh8EBQIqP2kfXmy0Mtd90Tr+g9o9/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf95yjn/b7o0/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/e8w5/nXCNv5fnSzaNVcZYQMG + AioEBgIfAAAAEgAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABwAA + ABAFBwIdAQABJzthHFRrsjHOftI7/4PaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2T3/eco4/2+5NP9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rKOf96yzn/esw5/nTBNv9cmivRMFAYWAABASgDBQIdAAAAEAAAAAcAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAANAwUAGgAAACQtSxZGaK0wwXzPOf2D2j3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3nKOP9uuTP/bLUy/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TB + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/esw5/nO/ + NP1alCrFJj4SSAAAACQCBQAaAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACwID + ABYEBAEjJT0SPWWoL7N7zjn9g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LZPf94yTj/brgz/2y0Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/e8w5/nG8NP5Wjii3HzMPPwADASMAAgAWAAAACwAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgBAQASAwMCHxsrDDRfny2Zecs4+YLaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/eck4/223M/9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rK + Of96yzj/e8w4/262M/pPgiWeFiMLNgIEAh8AAQASAAAACAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADwUI + AhwGCQMoVY0nenbGN+6C2Tz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg9/3jIOP9ttjP/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzn/eck4/2isMPBFciB/BAcDKQMF + AhwAAQAPAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAsEBwEXAgQAJENwH1lzvzXegdc7/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf94yDj/bLUz/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rKOf96zDn/d8Y3/mKjLeE2WRlcAQMAJAMGARcAAAALAAAABAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAgMBEgIC + AR8qRxQ+a7MyvX/UOv6D2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2D3/eMg4/2y1Mv9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rKOf97zDj+dME1/1mT + KcEiOhBBAwQCHwIDARIAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA4DBgAaDRUFKl+eLI57zjn3g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg8/3jHOP9stDL/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/eso5/3rKOf96yzj+bLUy+Ex/JJQLEgUrAwYAGgAAAA0AAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAJBQcCFQAA + ACFNgCNhdsU35YLZO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZ + Pf93yDj/a7Qy/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3rL + OP94yTf/Zagv6D1lHGYAAQAiBQcCFQAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABgMFAA8EBwEdJDsRN263M7x/1Tv+g9o8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/d8c4/2uzMv9przH/abAx/2mwMf9psDH/arEx/2qx + Mf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/eso5/3vLOP50wTb+WZUqwRosDTkECAEdAwUADwAA + AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAKBgoDFgwS + BSZfniyEfM8594PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3fG + OP9qsjL/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP95yjj/eso5/3rLOP9stDL4SnoiigoRBSgEBwMWAAAACgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABgYHAQ8AAAAbQmwfTHXDNtOB2Dv/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPP93xjf/arEx/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mw + Mf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP95yjj/ess5/3fGN/9goC3XMlQZUAAA + ABsBBgEPAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBAAAKBgcCFhQi + CilorjCcgNU7/IPbPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/d8U3/2mw + Mf9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/eco4/3nKOP95yjj/e8s4/nC6NP1SiCehEBwIKgEEAhYAAAAKAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQcJAg8BAAAcSXohVHnKOOSD2jz+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtg8/3fGN/9psDH/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mv + Mf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP96yjj/eMg4/mWo + L+c4XRpZAAIAHAUKAg8AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAICAoCFQ8Z + BydstDKjgdc8/YPbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf92xTf/aa8x/2es + MP9nrDD/Z6ww/2esMP9orTD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qx + Mf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yTj/eco4/3nKOP96yzj+cr01/lSLKKkMEwYoAwkCFQACAAgAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAYHAQ0AAAAZT4MkVnvOOeSE2z3/g9o9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2Dz/dsU3/2iuMf9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2it + MP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3nK + OP55yTf/Zqkv5zxiHFwAAAAaAgcBDQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHCAoDEhQh + CSVstTKbgdg8/YPbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg9/3bFN/9orjD/Zaov/2Wq + L/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9orTD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mw + Mf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/eco4/3rLOP5yvTT+VIonohAdCSgABgISAAAABwAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAwoMAgsAAAAWSXohSnrNOdmD2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LYPP91xDb/Z60w/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2es + MP9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJ + OP95yTj/ecs4/3jHN/9kpS7eN1saTwAAABYEDAILAAAAAwAAAAAAAAAAAAAAAAAAAAEAAAAFDBIGEA0U + Bh9przCHgdg8+4PbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2D3/dcM3/2esMP9kqC//Zakv/2Wp + L/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mv + Mf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3nJOP95yTj/ess3/m+5M/tQhSaQDBQGIAwS + BhAAAAAFAAAAAQAAAAAAAAAAAAAAAgUJAAgGCgEUMlMYM3nKOMiD2zz/g9o9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg8/3XDN/9mqzD/ZKcv/2SoL/9kqC//Zakv/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2es + MP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qx + Mf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223 + M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9 + Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jI + OP94yDj/eMg4/3nJOP95yjf+eMk3/2SnL84oQRQ3BgsBFAUJAAgAAAACAAAAAAAAAAAAAAADCgwDDAIB + ARhfnyxngNY88oPbPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LYPf91wzb/Zqov/2OmLv9kpy//ZKcv/2So + L/9kqC//Zakv/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2it + MP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uz + Mv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5 + NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+ + Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/eMc4/3jIOP94yDj/eMg4/3vNOf+A1jv/c8A29Et9 + JG8CAwEZCQwDDAAAAAMAAAAAAAAAAQMEAQUNEQQPGCYKInTBNqKD2jz9g9o8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+B1zz/dcM3/2aqL/9jpi7/Y6Yu/2OmLv9kpy//ZKcv/2SoL/9kqC//Zakv/2WpL/9lqS//Zaov/2Wq + L/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mw + Mf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222 + M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8 + NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PA + Nv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fG + N/94xzj/eMc4/3jIOP96zDn/gNU8/4PaPP58zzn+Xp0sqRQhCSUNEAQQAwQBBQAAAAEAAAACBQUBBwAA + ABFNfyRCfdA604TbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gtg8/3XDNv9lqi//Y6Uu/2OmLv9jpi7/Y6Yu/2Om + Lv9kpy//ZKcv/2SoL/9kqC//Zakv/2WpL/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2es + MP9orTD/aK0w/2itMP9orjH/aK4x/2mvMf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uy + Mv9rsjL/a7My/2uzMv9stDL/bLQy/2y1Mv9stTL/bbYz/222M/9ttjP/bbcz/223M/9uuDP/brgz/264 + M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6NP9wuzT/cLs0/3C8NP9wvDT/cb01/3G9Nf9xvTX/cb41/3G+ + Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/93xTf/d8Y3/3fGN/94xzj/ess5/4DVPP+D2j3/g9o8/4LY + PP9rszLZPGMcSQAAABEFBQEHAAAAAgAAAAMRFgUKAAAAFGisMG6C2Dzxg9s9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HX + PP90wjb/Zakv/2KlLv9ipS7/Y6Yu/2OmLv9jpi7/Y6Yu/2OmLv9kpy//ZKcv/2SoL/9kqC//ZKgv/2Wp + L/9lqS//Zaov/2WqL/9mqzD/Zqsw/2esMP9nrDD/Z6ww/2esMP9nrDD/aK0w/2itMP9orjH/aK4x/2mv + Mf9przH/abAx/2mwMf9psDH/arEx/2qxMf9qsjL/arIy/2uyMv9rsjL/a7My/2uzMv9stDL/bLQy/2y1 + Mv9stTL/bLUy/222M/9ttjP/bbcz/223M/9uuDP/brgz/264M/9uuDP/brgz/2+5NP9vuTT/b7o0/2+6 + NP9wuzT/cLs0/3C8NP9wvDT/cLw0/3G9Nf9xvTX/cb41/3G+Nf9yvjX/cr41/3K+Nf9yvjX/c782/3O/ + Nv9zwDb/c8A2/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fF + N/93xTf/d8Y3/3rLOP+A1Tz/g9o9/4PaPf+D2j3/g9o8/nbFN/RShiZ2AAAAFhEVBQoAAAADAAAABAwQ + Bg0mPBEid8Q3oYPbPf+D2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2D7/d8Q5/2apMf9kpTD/ZKUx/2SmMf9kpjH/Zacx/2Wn + Mf9lpzH/Zacx/2WnMf9mqDH/Zqgy/2apMv9mqTL/Z6oy/2eqMv9nqjL/Z6sy/2erMv9orDP/aKwz/2mt + M/9prTP/aa0z/2mtM/9qrjP/aq4z/2quM/9qrzP/aq80/2uwNP9rsDT/a7E0/2uxNP9rsTT/bLI0/2yy + NP9sszT/bLM0/22zNP9tszT/bbQ0/220NP9utTT/brU0/262NP9utjT/brY1/2+3Nf9vtzX/b7g1/2+4 + Nf9wuTX/cLk1/3C5Nf9wuTX/cLk2/3G6Nv9xujf/cbs2/3G7Nv9yvDb/crw2/3K8Nv9yvTf/cr03/3O+ + N/9zvjj/c784/3O/OP90vzj/dL84/3S/OP90vzj/dcA4/3XAOP91wDj/dcE4/3XBOf91wTf/dME2/3XC + Nv91wjb/dcM3/3XDN/91wzf/dsQ3/3bEN/92xDf/dsQ3/3fFN/95yjj/gNU8/4PaPf+D2j3/g9o9/4Pa + Pf+D2zz+fdE6/2CgLaweMQ4lDREGDQAAAAQQFQQGAAAADkZ0IDZ+0jvPg9s8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/5fa + YP+t0pD/q82P/6vOj/+szpD/rM6Q/6zOkP+szpD/rM6Q/6zOkP+szpD/rM6Q/63PkP+tz5D/rc+Q/63P + kP+tz5D/rdCQ/63Qkf+t0ZH/rdGR/67Rkf+u0pH/rtKR/67Skf+u0pH/rtKR/6/Tkf+v05H/r9OR/6/T + kf+v05L/r9OS/6/Tkv+v1JL/r9SS/6/Ukv+w1ZL/sNWS/7DVkv+w1ZL/sNWS/7DVkv+w1ZL/sNaS/7DW + kv+x1pL/sdaS/7HWkv+x15L/sdeS/7HXkv+x2JL/sdiS/7HYkv+y2ZL/stmS/7LZkv+y2ZP/stmT/7PZ + k/+z2ZP/s9mT/7Pak/+z2pP/s9qT/7Pak/+z2pP/s9uU/7PblP+z25T/s9uU/7TblP+03JT/tNyU/7Tc + lP+03JT/tNyU/7TclP+03ZT/s9yS/43MW/90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3bE + N/92xDf/eck4/4DVPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+B1zv/bLMy1zRXGDsDAAAPEBQEBhUf + CgkEBAISYaItWYLZPPCD2zz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/r+aC//b68v/7+/r/+vv5//r7+f/6+/n/+vv5//r7 + +f/6+/n/+vv5//r7+f/6+/n/+vv5//r7+f/6+/n/+vv5//r7+f/6+/n/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8 + +v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//r8+v/6/Pr/+vz6//v8+v/z+e//otV5/3PA + Nf90wTb/dME2/3XCNv91wjb/dcM3/3XDN/91wzf/dsQ3/3jIOP9/1Tz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PbPP50wjbySnwiYwUHAxMUHgoJERgHCg4WBxZyvjWFg9s9/IPaPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+o5Xj/8/ru//79/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//v3+/+735/+Y0Gr/csA0/3PANv90wTb/dME2/3XCNv91wjb/dcM3/3XD + N/94yDj/f9Q7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/nvMOf1aliqQDBMGFxAY + BwoSFwUMITUQHXvNObCD2z3+g9o9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/5/iaP/t+OP//v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v//5PLa/4zK + Wv9yvzT/c8A2/3TBNv90wTb/dME2/3XCNv91wjb/eMg4/3/UPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2jz+f9Q7/2SnL7gXKAwhEhYFDBAWCA5JeyMyf9U704PbPP+D2j3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jv/lN9Y/+L10////f///f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39///+///W7MX/gMVJ/3K/NP9zwDb/c8A2/3PANv90wTb/dME2/3jH + OP9/1Dz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP6C2Tz/bLUy2Dde + GzsQFwgOAAAAD2OlLlCC2DznhNs9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+K3Ef/1PG7///+///9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3///7//8Xk + rP91vzn/cr81/3O/Nv9zwDb/c8A2/3PANv93xjj/f9Q7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPP9zwDXsS34kWgICAA4AAAAObrgzbYPaPPOD2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaO//A657//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/v/6/Pn/r9qM/3C9Mv9yvjX/c782/3O/Nv9zwDb/dsU3/3/U + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/njJ + OPZVjih1AAAADwAAABJ3xTeKg9s9/IPaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gdo6/6rlfP/0+u///v3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+/+72 + 6P+Wzmn/cb0z/3K+Nf9yvjX/c782/3bEN/9+0zv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2zz+fNA5/V+cLJIFBQMVMVMXHnvNOaiE3D3/g9o8/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jz/lt9a/+X22P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/+/f7/2+3M/4DESv9xvjT/cr41/3K+Nf92xDf/f9M7/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + Pf5/1Tv/ZakvsChCEyRLfiMsftI6vYTbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+H20T/0PC2//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /P/A4aX/c784/3G+Nf9yvjX/dcM2/37TO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4HXO/9rsjHFOmAaMlqWKjmA1TvNg9s8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+v54L/+fz2//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/9fny/5zQcf9xvTT/cb41/3XEN/9+0zv/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/gtg8/2+4M9REcSA/Y6UuRYHXO9uD2zz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto8/5bf + Wv/m9tj//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/v/6+/n/9fjy//r8+f/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pz7//b58//5+/f//f3+//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79 + /v/b7cz/gsRM/3C8NP91wzb/ftM7/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+C2Tz/cr414Ux9I0porTBOgtk85oPb + PP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/h9tC/8btpf/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/3+vX/yeC4/5fDc/+LvWT/oMh//9no + zP/7/Pr//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3/+/z7/9vszv+m0YT/k8dn/53Ndv/Q577/+Pr2//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pz7/7Xblf9yvDb/dMI2/37SO/+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPP91wzbqT4MkVW63NFyC2jztg9s8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+B2Tr/o+Nu/+755f/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//P38/8PcsP9yrkP/YaUs/2GlK/9jpi7/gLZU/97s1P/+/v7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79/v/f7dL/h8FY/2uzMv9qsy//a7Mw/329 + Sv/L5Lf//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+ + ///n8t3/jslf/3LBM/9+0jv/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/3fHN/BVjCdlcb41aIPa + PfOD2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+L3Ej/zu+y//39/P/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+///t9Oj/jr1p/2CkK/9ipS7/Y6Yu/2Om + Lv9jpi7/sNGV//v8+v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3/+vv4/6/UkP9rsjL/a7My/2uzMv9stDL/arMv/5rLcv/x9+3//v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pz7/8Dgpv95wz7/ftE6/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2zz+eco49ViUKnJ1wzZxg9s994LaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPP+k5HD/8frq//79/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3///7//+Ht2P99s1P/YKMs/2KlLv9ipS7/Y6Yu/2OmLv+dxnz/+Pr2//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/1+fH/mspz/2uyMv9rsjL/a7My/2uz + Mv9qszD/jMRf/+jz4P///v///f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79 + /v/s9eX/k89j/33ROv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPP56zDn4XZsqe3bF + N3eD2z36gto8/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4jcRv/N77D//P37//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v//6/Pl/4u7Zf9goyv/YqQu/2Kl + Lv9ipS7/ZKYv/7XUm//8/Pv//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//n7+P+r04z/arIy/2uyMv9rsjL/a7My/2myL/+czHb/8/jv//79/v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/z6/8Llpf+D1EH/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s8/nvNOftgnyyBd8Y3eoPbPfyC2jz+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/6Hja//s+OP//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/8/Pv/udaj/2upOv9hoyz/YKMs/2OlL/+Btlb/4u3Y//7+///9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+/9nqy/98u0r/arIy/2mx + MP9qsjH/e7tJ/8rjt//9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79 + /v/o9t3/m95k/4LZPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2zz+fM45/GCh + LYR4yDh6g9s9/ILaPP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/httC/77r + mf/5/Pb//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/0+PH/wdqt/5TB + cf+MvGb/pcqG/97r0//8/fz//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/+vz5/9Pnw/+izn//ksZo/5/Mef/R5sD/+fv4//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/+/f7/9/v0/7npkv+F20D/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPP58zjn9YaIthHjIOHaD2z37gto8/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/kt9U/9z0yf/+/f7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/7/Pv/8/fv//D27P/3+fX//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//P38//b5 + 8//x9+z/9fny//z8/P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /v/Z88P/kN5R/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s8/nvO + OfthoS2Ad8Y3cIPbPfiD2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/peRy/+355P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/+/f7//v3+//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//79/v/+/f7//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/+/f7/6/jh/6HibP+D2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2zz+esw5+V+eLXp1xDZng9s99IPaPP6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+G20L/uuqU//X78P/+/f7//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//P6 + 7v+26Y3/hdtA/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + PP56yzj1XZwrcHTCNVqD2jzug9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPP+L3En/ye6r//v8+f/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/v/6/Pj/xu2m/4rcR/+D2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s8/3jIOPBalipicr40SoPaPOaD2jz/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+S3lT/1fG+//z9 + +//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/z6/9Lx + uf+Q3lH/gto8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/dsU26laQJ1FvuTNAgtk83IPbPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+Y4F//3fTL//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/P/b88b/l99b/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP90wjbhVpApRGuzMjKB2DzNhNs9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+f4mj/3/XN//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/fz/3fTL/5zh + Zf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/gtk8/3K9NNRSiSU4ZKcuJIHXPLyE2z3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+Z4F//2/PH//v8+v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3/+/z6/9rzxf+Y4F3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+B1zz/b7kzw0x/IypUjCYWgNU7p4Tc + Pf+D2jz+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+Z4F//1fK///v8+v/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v3+//r8+f/U8bz/mOBe/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9s9/oDWO/9sszKuPmkcGxciDQh+0jqIhNw9/YTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+R3lL/ye6r//X7 + 8P/+/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//79/v/0++//yO6p/5DeUf+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+E2z3+ftI6/misMI8XHg0LAAAAAnvN + OWiD2z3zhNs9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+L3Er/teiM/+r43//9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/6ffe/7Toi/+L3En/gto8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PbPf57zDn2YqQubwAAAAMAAAADeMY3SYPbPeiE2z3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4La + PP+F2kD/ouNs/9jywv/5/Pb//v3///39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/+/f//+Pz2/9fywf+h4mv/hdpA/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/3fGN+tdmytRAAAAAjhN + HwNttDIog9o81ITcPf+D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2jz/kd5S/7zrlv/n99r/+/z6//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/z6/+b32f+765b/kN5R/4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf6D2jz/c8A12FOIJzA3TB4ER3gSA1CEIw+B1zyvhNw9/4PbPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2jz/hNo+/6vlfP/z+u7//f3+//79/v/+/f///v3+//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//79/v/+/f///v3+//39 + /f/z+u3/q+V7/4TaPv+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oHWO/9utzO2N10aEz5o + DwNwogkCMVQRBn/TO4GE3D38g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+G20H/v+ub//r8 + +f/8/fv/5/fa/+n33P/4/PX//v3///79/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//79/v/+/f7/9vvx/+X21v/r+OD//P38//r8+f++65n/httB/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2z3+fdE6/WiuMIolQA0HZ5YJAneyOgIfKRADesw4UITbPfKE3D3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/6HibP/s+OL//v3//+v44v+d4mb/lN9Y/7jpj//X8sH/8Pno//v8 + +f/9/f7//v3+//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//v3+//39/f/5/Pf/6/jh/9Hwt/+w54P/j95Q/6rl + ev/0+u7//v3//+v44f+g4mv/gto8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf54yTj0YKItWR4s + DwRgkTACiqogAQAAAAFyvjUmg9o90YTcPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+K3Ej/ze+x//39 + /f/5/Pf/wOyd/4bbQf+C2jz/hNo//47dTv+h42z/veqX/9rzxf/v+ef/+Pv1//v8+v/9/f3//v3////9 + ///+/f///v3///79/v/+/f7//f3+//39/v/+/f7//v3+//79///+/f////3///79/v/8/fz/+vz5//f7 + 8//s+OP/0/G7/7fpjf+c4WP/i9xJ/4PaPf+C2jz/itxI/9Dwtv/8/fz//f39/8zvsP+K3Ef/gto8/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gtk8/nTBNtZXkSkrAAAAAXqWHAFezlUAVWstAWeqMBCB1zufhNw9/4Pa + PP6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/6zmff/z+uz///7//9/0zf+U31j/gto7/4PaPf+D2j3/gto8/4La + O/+F2kD/itxI/5bgWv+u5oD/weye/8/wtP/b88f/5vbY/+355P/x+ur/9Prv//f78//6/Pj/+fz3//b7 + 8v/z+u7/8Pnp/+z44v/k9tX/2fPD/8zvsP+965n/qeV4/5LeVf+J3Eb/hNo+/4LaO/+C2jz/g9o9/4Pa + Pf+C2jz/n+Jp/+r33v///v//8vrs/6vlfP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf5/1Dr/brYyp05/ + JBNffjIBTKhFAICnJwB+myIBAAAAAn7SOmaE2z30g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+Q3VH/2vPG//79 + /v/1+/D/suiG/4TaPv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/4PaPP+E2j//idxG/47d + Tv+W31v/oOJq/6Tkcv+o5Xf/rOZ9/6/ng/+v5oL/q+Z8/6fldv+k43H/nuJo/5TfWP+N3U3/iNtF/4Ta + Pv+C2jz/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+H20P/weye//r8+P/9/f7/2vPF/4/d + UP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/nvNOPZnqy9tAAAAA3SPIAFvkSIAgGoAAIWVCAD///8Aeso5MoPa + PdSE3D3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o+/7npkf/4/PX//f39/9Txvf+L3Er/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/gto8/4LaO/+B2Tr/gdk6/4HZOf+A2Tn/gNk5/4DZ + Of+B2Tn/gdk5/4HZOv+B2jr/gto7/4LaPP+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaPP+U31j/4fXS//79///4/PX/uOmR/4PaPv+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+C2Tz/dcM22WGf + LTn///8Ajp8JAIx0AAAAAAAAr/89AGShHAJdni0Ngdg8n4TcPf6D2z3+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LaPP+Y4F7/5fbX///+ + ///u+eX/pONx/4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+z6Ij/9fvx///9 + ///l9tf/mOBe/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/n/UO/9uuTOlR3YfEV+cHAKM5zEAAAAAAAAAAABUQGgAec4lARQN + DQJ/1DtbhNw98oTbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jz/iNtE/8Xtpf/7/Pr//P38/8btpv+I20T/g9o8/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/gto8/47dTv/U8r3//v3///v8+f/F7aT/h9tE/4LaPP+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3/esw59Get + MGMYGA4CfM8lAU1CXwAAAAAAAAAAAILCQQCO0kkBUXojAnPENh6C2jzJhNw9/oPaPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+j427/7vnl///9 + ///l9tf/muBi/4LaO/+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/gto7/6bk + dP/v+eb//v3//+755f+j427/g9o8/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/oHYPP5zwTXOWpcqI0xzIAJyqToBa6A1AAAAAAAAAAAAAAAAAGKg + IQBemR4BXJgnBoHXO4GE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/itxJ/9Txvf/9/f3/+Pz1/7jpkP+E2j//g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz/iNtF/8btp//7/fv//f39/9Txvf+K3En/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+fdE6/W22 + MolHdR4IVYobAlaOHgAAAAAAAAAAAAAAAAAAAAAAoL4iAKXCIgH//5EAfM85N4PbPduE3D3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4TaPv+t5n7/9Prv//79 + ///a88b/kd5S/4PaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2jz/muBg/+f32v/+/f//9Prv/6zmfv+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP93xjffZKguO///oACSrB8BjagfAAAAAAAAAAAAAAAAAAAA + AAAAAAAAc7sqAHrBHQFxujQMgtg8lYTcPf6E2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+C2jz/idxG/83vsv/+/f7/8/ru/6jleP+C2jz/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+E2j//uOmP//r89//9/f3/yu+t/4jc + Rf+D2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+f9M7/3C6 + M5tWiyYOf80jAWeoJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpsx4Aet4VAQAAAAB/0zpFhNs95YTc + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+G20L/uuqU//D5 + 6P/G7ab/i9xJ/4LaPP+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4LaO/+R3lP/1PG8/+/55v+z6Ij/hdtA/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf95yTjoZ6svTAAAAABerhABWJgZAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHjdEgCL/w4AYK8QAW+1MQyD2T2fhNw9/oTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+K3Ej/l+Bb/4vcSf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPv+O3U7/luBa/4jc + Rf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+f9Q7/nK9 + NaVUiCUOT5ANAmO7CgBapw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG63JABwvCUBK0YAAX/U + O0GD2z3mhNw9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+C2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPP+C2jz/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP55yjjoaa8wRypGBAJipCEBYKEgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAif8AAHP/AADP/z8AdsY3C4LaPJaE3D3+hNs9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+f9M7/nK/ + NZxbmSwN//9YAIP/AACS/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/8WAOr7 + GAC7/2EAgNU8NYTcPdWE3D3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4LZPP95yjjYarAxOcb/aADw/xkA7/8WAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyv6TAHKpKwFpty4Hgto8e4TcPfiE2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+ftI6+XK/ + NIBSkiMIZJUmAX6gXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACa8EQAoPlHAIfKOwF+0TkchNs9vYTcPf6D2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/oHYPP93xjfAaKkvIHWwMwF8wDcAer02AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOr/lQCQxioAm8w1AYeLHAGC2DxPhNw954Tc + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2jz+fM456W+7 + NFNYbRwBm801AZnLLACUyV4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA///4AH3ROwqC2j2KhNw9+oTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/n/UO/t0wjaOYaYvDOD7YQD//wAA//8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKXjPgCm4jwA/7QEAX/V + OyGD2z29hNw9/4PbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6B2Dz/eco4wGq1 + MiX/9REBlsw3AJLINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//8AAAT//wDR/zAB//9QAIHYPUSE3D3hhNw9/oPbPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/nzPOuNxvTVI//9LANL/MAEF//8A//8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApv9ZAMP/ + bQCLxkkBeMg4BYPaPHKE3D3xhNw9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PbPf9/1DvydsU3dl2a + LgaHwkYB0P90AKb/WQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL9AAIjDPAD/ZgQAgtg7EYPbPZSE3D36hNs9/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2z3+gdc8+3nKOZdvujQT//80AJPRQACN0kYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPv8AALn/AACw/wAAgdc8HIPbPbCE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9s9/oLZPP58zjmzb7k1Hv// + AAC5/wAAPv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA/wAA////AKb/SQFQqg8Agtk8LYTb + PcWE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf6D2Tz9ftE6x3TCNjBMrAQApv9JAf///wCA/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgL9AAIK7QwFupDUCgtg7QYTcPNKE3D3/g9s9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+g9o9/3/TOtR3xDZDXIkyAonG + RgGBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAv0AAlfBGAHyx + QQFroTADgtk7S4TcPd2E3D3+g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/oPbPf6A1TzfeMc4TmKPLASGwUYBhdRAAIC/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLz0UAu6QHAJ+8MwF8xTkEgts8VYTcPd6E3D3/g9s9/oPa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6D2z3/gdc833rMOVhuqzMErM83AdjF + CACLz0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD//wAA/f8EAP//JwF/1jsGg9o8VYTcPd+E3D3/g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3+hNs9/4LYPN99zzpXdcI3Bv//KwH8/wQA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf/wAA5/8AAPr/FAGF0D4Dg9s9TITc + PdOE3D39g9s9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oTbPf2C2DzUfdE7TnO1OgT//xYA5/8AAN// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD8/wMA//8AAKC+MgF+wj4Dg9s8QYTcPcWE3D39hNs9/oPaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + Pf6D2z39gtk8xn3ROkNvrzsDq8o0Af//AAD8/wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAv0AAgdA9AIC2 + QwF1qzcChNo8LoTcPbKE3D35hNw9/oPbPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2z3+g9s9+YHYPLN90Tovbp4xAoe/RgF5xDsAgL9AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAv0AAef8SAIC4QgGI+kQAhN47HITcPZWE3D30hNw9/oPb + Pf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+g9s9/oPb + PfSC2TyWf9U5HZH/RgCEvUQBUtYJAIC/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAnutQAIfJRAHg/3sAgto8E4TbPHWE3D3ihNw9/oTbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9s9/oTcPf6E2z3igtk8dX7VOxPu/4EAh8lEAaDrUQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq/1UAhv95AM7/MQD//wAAgtM9BYTc + PkWE3D29hNw9+4TcPf+D2z3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oPbPf+E3D37hNw9vYXc + PUWAzzwF//8AAM7/MQCG/3kAqv9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD//wAA//8AAJXTPACEvEgBUtQAAIPaPSKE3D2NhNw96YTcPf+D2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PbPf6E3D3/hNw96YTcPY2D2j0iS9MAAIW9SQGV0zwA//8AAP//AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqv9VAKD/ + XwDK/zYBAP/TAILbOwqE2zxRhNw9wYTcPfiE3D3/hNs9/oPaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6D2z3/hNw9+ITcPcGE2zxRgts7CgD/ + 0wDK/zYBoP9fAKr/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AACJwDwAfrRCAYHFOwKC2z0ehNw9f4Tc + PdiE3D39hNw9/oPbPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pb + Pf6D2z3+hNw9/YTcPdiE3D1/gts9HoHFOwJ+tEIBicA8AP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAAmsw0Acr3bgGE2T8Hhdw9N4TcPZqE3D3ohNw9/oTcPf+E2z3+g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf6D2z3/hNw9/oTcPeiE3D2Zhd09N4TZPwfK924Bmsw0Af// + AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8Ax/88AMPR + IAFzmj8Ahto+DITcPUSE3D2jhNw954TcPf2E3D3+hNs9/oPaPf6D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oPaPf6D2z3+hNs9/YTc + PeeE3D2khNw9RIfcPwx4oEIAw9EgAcf/PAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAApLVIAIX8CwHH/1cBf7dCAYLbOwyD3D1JhNw9moTc + PeCE3D3+hNw9/oPbPf6D2j3+g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/oPbPf6E3D3+hNw9/oTcPeCE3D2ahNs8SYXbPwx/uEQBxf9VAYX8CwGktUgA//8AAP// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAgP8AAID/AACB1isBpu5VAXDILwCG2z0Nhdw8OYTcPYeE3D3PhNw99ITcPf6E2z3/g9s9/oPa + Pf6D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3+g9s9/oTbPf+E3D3+hNw99ITcPc+E3D2Hhdw8OYbb + PQ1xyDEApe5TAYHWKwGA/wAAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKr/VQCw/2AAjv8dAYD/ + AAB1sk8Ah9k8BYbbPCCE3T1ghNw9pYTcPdiE3D32hNw9/4TcPf6D2zz+g9s9/oPaPf6D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/oPaPf6D2zz+hNw9/oTc + Pf+E3D32hNw92ITcPaWE3T1ghtw8IIfZPAV1sk8AgP8AAI7/HQGw/2AAqv9VAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAD/ALfZJAGEvz4B0v9wAf///wCI2j4NhNw8NYTc + PWuE3D2lhNw914TcPfWE3D39hNw9/oTbPf+D2z3/g9s9/oPbPf6D2jz+g9o9/4PaPf+D2j3/g9o9/4Pa + Pf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o9/4PaPf+D2j3/g9o8/oPb + Pf6D2z3+g9s9/4PbPf+E2z3+hNw9/YTcPfWE3D3XhNw9pYTcPWuE3Dw1iNo+Df///wDS/3ABhL8+AbfZ + JAEAAP8A//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKr/VQCt/1oAk/8rAaf/MwEMvQAAh9c9AoXePQ+E3Twnhdw9VYTcPYeE3D23hNw92oTc + PeqE3D32hNw9/oTcPf+D2z3/hNw9/4TbPf+D2z3+g9s9/oPbPf6D2zz+g9s8/oPbPP6D2zz+g9s8/oPb + PP6D2z3+g9s9/oPbPf6D2z3/hNs9/4PbPf+E2z3/hNw9/oTcPfaE3D3qhNw92YTcPbeE3D2Hhdw9VYTd + PCeF3j0Ph9c9Agy9AACn/zMBk/8rAa3/WgCq/1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AAB8/wAAn/8+AIX/ + AAB+1SMBkbthAVqlCACCv0ABgtk/A4PbPg+D3D4rg9w+TITcPW2E3D2PhNw9roTcPcGE3D3UhNw94YTc + PeuE3D30hNw9+oPbPf2D2z3+g9s9/4PbPf+D2z3+g9s9/YPbPfqE3D30hNw964TcPeGE3D3UhNw9wYTc + Pa6E3D2PhNw9bYPbPUyE3D0qhN4/D4LYPwOCv0ABWqUIAJG7YQF+1SMBhf8AAJ//PgB8/wAAgP8AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/AABs/wAAk/8jAZPZSAG46BIBov8oAdf/ + gwCQ/wAAb+9BAIfaOwaD3T0VhN09I4TbPjGE3D0+hNw9ToTcPl+E3D1shNw9doTcPX6E3D2ChNw9goTc + PX6E3D12hNw9bITcPl+E3D1OhNw9PoTbPjGE3T0jg909FYfaOwZv70IAW/8AANX/hACh/ycBuOgSAZPZ + SAGT/yMBbP8AAID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP/////wAAAAAAAAD///////////wAAAAAAAAAP//////////wAAAAAAAAAA//////// + //4AAAAAAAAAAH/////////4AAAAAAAAAAAf////////4AAAAAAAAAAAB////////8AAAAAAAAAAAAP/ + //////8AAAAAAAAAAAAA///////+AAAAAAAAAAAAAH///////AAAAAAAAAAAAAA///////gAAAAAAAAA + AAAAH//////wAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAH/////8AAAAAAAAAAAAAAA/////+AAAAA + AAAAAAAAAAH/////AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAA////4 + AAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAA + A///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAA + AAAAAAD//gAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/+AAAAAAA + AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAA + AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAA + AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH6AAAAAAA + AAAAAAAAAAAAF/AAAAAAAAAAAAAAAAAAAA/0AAAAAAAAAAAAAAAAAAAv+AAAAAAAAAAAAAAAAAAAH/gA + AAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAA + AH//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAA + AAAAAAP//9AAAAAAAAAAAAAAAAAL///gAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAB////wAAAAA + AAAAAAAAAAA////6AAAAAAAAAAAAAAAAX////AAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAB///// + AAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAf/////4AAAAAAAAAAAAAAH + //////AAAAAAAAAAAAAAD//////6AAAAAAAAAAAAAF///////QAAAAAAAAAAAAC///////+AAAAAAAAA + AAAB////////oAAAAAAAAAAABf///////9AAAAAAAAAAAAv////////wAAAAAAAAAAAP////////+AAA + AAAAAAAAH/////////6AAAAAAAAAAX//////////AAAAAAAAAAD//////////8gAAAAAAAAT//////// + ///2AAAAAAAAb////////////EAAAAAAAj////////////+QAAAAAAn/////////////8gAAAABP//// + //////////w4AAAcP/////// + + + + 99, 97 + + + APK Tool GUI + + + toolStripStatusLabelStateImage + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripStatusLabelStateText + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + progressBar + + + System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + copyToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + clearLogToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + fileToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + newInsToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + saveLogToFileToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openTempFolderToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + clearTempFolderToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem2 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + exitToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + settingsToolStripMenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + useAPKEditorForDecompilingItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + settingsToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + helpToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + checkForUpdateToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + reportAnIsuueToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + apktoolIssuesToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + baksmaliIssuesToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + aboutToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolTip1 + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + FormMain + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/APKToolGUI/FormMain.ru.resx b/APKToolGUI/Forms/FormMain.ru.resx similarity index 100% rename from APKToolGUI/FormMain.ru.resx rename to APKToolGUI/Forms/FormMain.ru.resx diff --git a/APKToolGUI/Forms/FormMain.vi-VN.resx b/APKToolGUI/Forms/FormMain.vi-VN.resx new file mode 100644 index 0000000..d2b45ef --- /dev/null +++ b/APKToolGUI/Forms/FormMain.vi-VN.resx @@ -0,0 +1,549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hợp nhất các tệp APK bị chia nhỏ thành một tệp APK duy nhất: + + + Hợp nhất + + + Thư mục APK đã biên dịch + + + Thư mục đầu ra dịch ngược + + + Thư mục APK đã ký + + + Thư mục APK đã Zipalign + + + Thư mục APK đã dịch ngược + + + Thư mục đầu ra biên dịch + + + Smali của Activity khởi động + + + Ký APK: + + + + + + Zipalign tệp APK: + + + Zipalign + + + Thư mục APK đã dịch ngược: + + + Biên dịch + + + Tệp APK/XAPK/APKS/ZIP/APKM: + + + Dịch ngược + + + Trang chính + + + Activity khởi động: + + + Kiến trúc: + + + Tệp: + + + Bản địa hóa: + + + Quyền: + + + Mật độ (DPI): + + + Liên kết cửa hàng: + + + Tên ứng dụng: + + + Tên gói ứng dụng: + + + Phiên bản: + + + SDK tương thích tối thiểu: + + + Tên mã: + + + Kích thước màn hình + + + SDK mục tiêu: + + + Thông tin cơ bản + + + Thông tin đầy đủ + + + Thông tin APK + + + Không phân tích thông tin APK khi chọn APK để dịch ngược + + + Đặt cấp độ API cho các tệp sẽ được tạo, ví dụ: 14 cho ICS. + + + Sửa lỗi ApkTool sau khi dịch ngược + + + Sẽ xóa extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY, các thuộc tính liên quan đến split và đặt sparseresource thành false + + + Chỉ dịch ngược các tệp dex chính trong thư mục gốc (classes[0-9]*.dex). + + + Sửa lỗi ApkTool bất thường + + + Sử dụng vị trí tệp framework: + + + Giữ các tệp gần với bản gốc nhất có thể, ngăn việc xây dựng lại + + + Thư mục đầu ra: + + + Giữ lại tài nguyên bị hỏng + + + Không dịch ngược mã nguồn + + + Buộc xóa thư mục đích + + + Không dịch ngược tài nguyên (resources) + + + Không xuất thông tin gỡ lỗi (.local, .param, .line, v.v.) + + + Tùy chọn + + + Dịch ngược + + + Thêm cấu hình bảo mật mạng chung vào APK đầu ra + + + Sử dụng aapt2 (Nâng cấp apktool để sử dụng tệp nhị phân aapt2 thử nghiệm) + + + Đặt cấp độ API cho các tệp sẽ được tạo, ví dụ: 14 cho ICS. + + + Tạo APK chưa ký với chữ ký gốc sau khi biên dịch + + + Chỉ tương thích với các mô-đun vá lõi, yêu cầu thiết bị đã root. + + + Ký sau khi Biên dịch/Zipalign + + + Zipalign sau khi biên dịch + + + Vô hiệu hóa việc xử lý các tệp tài nguyên trong bước biên dịch + + + Bỏ qua kiểm tra thay đổi và biên dịch tất cả các tệp + + + Thư mục đầu ra APK + + + Thư mục đầu ra đã biên dịch cũng sẽ được sử dụng cho Zipalign và ký + + + Sao chép thư mục AndroidManifest.xml và META-INF gốc + + + Sử dụng vị trí tệp aapt.exe: + + + Sử dụng vị trí tệp framework: + + + Tùy chọn + + + Biên dịch + + + Cài đặt APK sau khi ký (đảm bảo đã chọn thiết bị trong tùy chọn ADB trước) + + + Ghi đè tệp đầu vào + + + Tự động xóa tệp idsig + + + Mặc định + + + Bật + + + Tắt + + + Lược đồ ký v4: + + + Mặc định + + + Bật + + + Tắt + + + Lược đồ ký v3: + + + Mặc định + + + Bật + + + Tắt + + + Lược đồ ký v2: + + + Mặc định + + + Bật + + + Tắt + + + Lược đồ ký v1: + + + Tên bí danh (Alias) + + + Rất khuyến khích bạn sử dụng khóa của riêng mình, được tạo bằng Android Studio hoặc các công cụ khác + + + Mật khẩu: + + + Tệp keystore/jks: + + + Sử dụng keystore + + + Thư mục đầu ra APK: + + + Khóa riêng: + + + Khóa công khai: + + + Tùy chọn + + + + + + Thư mục đầu ra APK: + + + Ký sau khi zipalign + + + Nén lại bằng Zopfli + + + Căn chỉnh theo byte, ví dụ: '4' cung cấp căn chỉnh 32-bit + + + Chỉ kiểm tra căn chỉnh (không sửa đổi tệp) + + + Đầu ra chi tiết + + + Ghi đè tệp đầu ra hiện có + + + Tùy chọn + + + Zipalign + + + Mở thư mục framework + + + Xóa bộ nhớ đệm framework + + + Xóa bộ nhớ đệm Framework trước khi dịch ngược + + + Tùy chọn + + + Gắn thẻ frameworks bằng: + + + Lưu trữ tệp framework vào: + + + Cài đặt + + + Tùy chọn + + + Thư mục biên dịch Smali: + + + Thư mục đầu ra Dex: + + + Biên dịch + + + Dịch ngược Dex: + + + Thư mục đầu ra: + + + Dịch ngược + + + Chọn thiết bị + + + Dừng tiến trình ADB + + + Cài đặt APK + + + Làm mới + + + Ghi đè ABI mặc định của nền tảng: + + + Đặt nhà cung cấp là Play Store (com.android.vending) + + + Chọn APK: + + + Đang tải... + + + Xóa nhật ký + + + Tiến trình mới + + + Lưu nhật ký + + + Mở thư mục tạm + + + Xóa thư mục tạm + + + Thoát + + + Tệp + + + Sử dụng APKEditor để dịch ngược + + + Cài đặt + + + Kiểm tra cập nhật + + + Báo cáo sự cố + + + Sự cố Apktool + + + Sự cố Baksmali + + + Giới thiệu + + + Trợ giúp + + + Sử dụng APKEditor.jar để hợp nhất/tách APK (nhanh hơn) + + diff --git a/APKToolGUI/Forms/FormMain.zh-CN.resx b/APKToolGUI/Forms/FormMain.zh-CN.resx new file mode 100644 index 0000000..d259bc7 --- /dev/null +++ b/APKToolGUI/Forms/FormMain.zh-CN.resx @@ -0,0 +1,549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 将拆分的 APK 合并为单个 APK: + + + 合并 + + + 编译的 APK 目录 + + + 反编译输出目录 + + + 签名的 APK 目录 + + + Zip 对齐的 APK 目录 + + + 反编译的 APK 目录 + + + 编译输出目录 + + + 启动项 smail + + + APK 签名: + + + 签名 + + + APK 文件对齐优化: + + + 对齐优化 + + + 反编译 APK 目录: + + + 编译 + + + APK/XAPK/APKS/ZIP/APKM 文件: + + + 反编译 + + + 首页 + + + 启动 activity: + + + 架构: + + + 文件: + + + 本地化: + + + 权限: + + + 密度: + + + 商店链接: + + + 应用名: + + + 应用包名: + + + 版本: + + + 最小兼容 SDK: + + + 代号: + + + 屏幕尺寸 + + + 目标 SDK: + + + 基本信息 + + + 完整信息 + + + APK 信息 + + + 在选择 APK 进行反编译时,不要解析 APK 信息 + + + 设置要生成的文件的 API 级别,例如 ICS 的 14。 + + + 修复反编译后的 ApkTool 错误 + + + 将删除 extractNativeLibs, useEmbeddedDex, APKTOOL_DUMMY,拆分相关属性并将 sparseresource 设置为 false + + + 只反汇编根目录中的主索引类(classes[0-9]*.dex)。 + + + 修复异常的 ApkTool 错误 + + + 使用的 framework 文件位置: + + + 尽可能保持文件最接近原始,防止重建 + + + 输出目录: + + + 保留损坏资源 + + + 不反编译源码 + + + 强制删除目标目录 + + + 不反编译 resouces + + + 不要输出调试信息(.Local, .param, .line等) + + + 选项 + + + 反编译 + + + 在输出 APK 中添加通用的网络安全配置文件 + + + 使用 aapt2(升级 apktool 使用实验性 aapt2 二进制) + + + 设置要生成的文件的 API 级别,例如 ICS 的 14。 + + + 构建后创建具有原始签名的未签名 APK + + + 只兼容核心补丁模块,需要 root 设备。 + + + 在 构建/zip对齐 后进行签名 + + + 在构建后进行 zip对齐 + + + 在构建步骤中禁用对 resource 文件的处理 + + + 跳过变更检测并构建所有文件 + + + APK 输出目录 + + + 编译后的输出目录也将用于 Zipalign 和签名 + + + 复制原来的 AndroidManifest.xml 和 META-INF 文件夹 + + + 使用的 aapt.exe 文件位置: + + + 使用的 framework 文件位置: + + + 选项 + + + 构建 + + + 签名后安装 APK(确保首先在 ADB 选项中选择设备) + + + 覆盖输入文件 + + + 自动删除 idsig 文件 + + + 默认 + + + 开启 + + + 关闭 + + + 签名方案 v4: + + + 默认 + + + 开启 + + + 关闭 + + + 签名方案 v3: + + + 默认 + + + 启用 + + + 关闭 + + + 签名方案 v2: + + + 默认 + + + 开启 + + + 关闭 + + + 签名方案 v1: + + + 别名 + + + 强烈建议您使用自己的密钥,通过 Android Studio 或其他工具创建 + + + 密码: + + + keystore/jks 文件: + + + 使用 keystore + + + APK 输出目录: + + + 私钥: + + + 公钥: + + + 选项 + + + 签名 + + + APK 输出目录: + + + zip对齐后进行签名 + + + 使用 Zopfli 重新压缩 + + + 以 bytes 为单位的对齐,例如: '4' 提供 32-bit 对齐 + + + 只检查对齐(不修改文件) + + + 详细输出 + + + 覆盖现有的输出文件 + + + 选项 + + + Zip对齐 + + + 打开 framework 目录 + + + 清空 framework 缓存 + + + 反编译前清空 Framework 缓存 + + + 选项 + + + 标签 frameworks 使用: + + + 将 framework 文件存储到: + + + 安装 + + + 选项 + + + Smali 编译目录: + + + Dex 输出目录: + + + 编译 + + + Dex 反编译: + + + 输出目录: + + + 反编译 + + + 选择设备 + + + 结束 ADB 进程 + + + 安装 APK + + + 刷新 + + + 覆盖平台的默认 ABI: + + + 设置 vendor 为 Play Store (com.android.vending) + + + 选择 APK: + + + 加载中... + + + 清除日志 + + + 新进程 + + + 保存日志 + + + 打开缓存目录 + + + 清空缓存目录 + + + 退出 + + + 文件 + + + 使用 APKEditor 进行反编译 + + + 设置 + + + 检查更新 + + + 反馈问题 + + + Apktool 问题反馈 + + + Baksmail 问题反馈 + + + 关于 + + + 帮助 + + + 使用 APKEditor.jar 合并、分离 APK(速度更快) + + \ No newline at end of file diff --git a/APKToolGUI/Forms/FormSettings.Designer.cs b/APKToolGUI/Forms/FormSettings.Designer.cs new file mode 100644 index 0000000..355447d --- /dev/null +++ b/APKToolGUI/Forms/FormSettings.Designer.cs @@ -0,0 +1,381 @@ +namespace APKToolGUI +{ + partial class FormSettings + { + /// + /// Требуется переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором форм Windows + + /// + /// Обязательный метод для поддержки конструктора - не изменяйте + /// содержимое данного метода при помощи редактора кода. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSettings)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.themeComboBox = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.customApktoolBtn = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.buttonCustomTempLocation = new System.Windows.Forms.Button(); + this.buttonCustomJavaLocation = new System.Windows.Forms.Button(); + this.groupBoxLanguage = new System.Windows.Forms.GroupBox(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.groupBoxContextMenu = new System.Windows.Forms.GroupBox(); + this.labelAdminRights = new System.Windows.Forms.Label(); + this.buttonAddContextMenu = new System.Windows.Forms.Button(); + this.buttonRemoveContextMenu = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonОК = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.checkBox7 = new System.Windows.Forms.CheckBox(); + this.checkBox6 = new System.Windows.Forms.CheckBox(); + this.customApkToolTxtBox = new System.Windows.Forms.TextBox(); + this.useCustomApktoolChk = new System.Windows.Forms.CheckBox(); + this.checkBox5 = new System.Windows.Forms.CheckBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.customTempLocationTxtBox = new System.Windows.Forms.TextBox(); + this.textBoxCustomJavaLocation = new System.Windows.Forms.TextBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.checkBoxCheckUpdateStartup = new System.Windows.Forms.CheckBox(); + this.ignoreOutputContextMenuBox = new System.Windows.Forms.CheckBox(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBoxLanguage.SuspendLayout(); + this.groupBoxContextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + resources.ApplyResources(this.tabControl1, "tabControl1"); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + // + // tabPage1 + // + resources.ApplyResources(this.tabPage1, "tabPage1"); + this.tabPage1.Controls.Add(this.groupBox1); + this.tabPage1.Controls.Add(this.groupBoxLanguage); + this.tabPage1.Controls.Add(this.groupBoxContextMenu); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.checkBox7); + this.groupBox1.Controls.Add(this.checkBox6); + this.groupBox1.Controls.Add(this.themeComboBox); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.customApkToolTxtBox); + this.groupBox1.Controls.Add(this.customApktoolBtn); + this.groupBox1.Controls.Add(this.useCustomApktoolChk); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.checkBox5); + this.groupBox1.Controls.Add(this.checkBox4); + this.groupBox1.Controls.Add(this.customTempLocationTxtBox); + this.groupBox1.Controls.Add(this.textBoxCustomJavaLocation); + this.groupBox1.Controls.Add(this.buttonCustomTempLocation); + this.groupBox1.Controls.Add(this.checkBox3); + this.groupBox1.Controls.Add(this.buttonCustomJavaLocation); + this.groupBox1.Controls.Add(this.checkBox2); + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.checkBoxCheckUpdateStartup); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // themeComboBox + // + this.themeComboBox.FormattingEnabled = true; + this.themeComboBox.Items.AddRange(new object[] { + resources.GetString("themeComboBox.Items"), + resources.GetString("themeComboBox.Items1"), + resources.GetString("themeComboBox.Items2")}); + resources.ApplyResources(this.themeComboBox, "themeComboBox"); + this.themeComboBox.Name = "themeComboBox"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // customApktoolBtn + // + resources.ApplyResources(this.customApktoolBtn, "customApktoolBtn"); + this.customApktoolBtn.Name = "customApktoolBtn"; + this.customApktoolBtn.UseVisualStyleBackColor = true; + this.customApktoolBtn.Click += new System.EventHandler(this.customApktoolBtn_Click); + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.ForeColor = System.Drawing.Color.DimGray; + this.label6.Name = "label6"; + // + // buttonCustomTempLocation + // + resources.ApplyResources(this.buttonCustomTempLocation, "buttonCustomTempLocation"); + this.buttonCustomTempLocation.Name = "buttonCustomTempLocation"; + this.buttonCustomTempLocation.UseVisualStyleBackColor = true; + this.buttonCustomTempLocation.Click += new System.EventHandler(this.buttonCustomTempLocation_Click); + // + // buttonCustomJavaLocation + // + resources.ApplyResources(this.buttonCustomJavaLocation, "buttonCustomJavaLocation"); + this.buttonCustomJavaLocation.Name = "buttonCustomJavaLocation"; + this.buttonCustomJavaLocation.UseVisualStyleBackColor = true; + this.buttonCustomJavaLocation.Click += new System.EventHandler(this.buttonCustomJavaLocation_Click); + // + // groupBoxLanguage + // + resources.ApplyResources(this.groupBoxLanguage, "groupBoxLanguage"); + this.groupBoxLanguage.Controls.Add(this.comboBox1); + this.groupBoxLanguage.Name = "groupBoxLanguage"; + this.groupBoxLanguage.TabStop = false; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + resources.ApplyResources(this.comboBox1, "comboBox1"); + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Name = "comboBox1"; + // + // groupBoxContextMenu + // + resources.ApplyResources(this.groupBoxContextMenu, "groupBoxContextMenu"); + this.groupBoxContextMenu.Controls.Add(this.ignoreOutputContextMenuBox); + this.groupBoxContextMenu.Controls.Add(this.labelAdminRights); + this.groupBoxContextMenu.Controls.Add(this.buttonAddContextMenu); + this.groupBoxContextMenu.Controls.Add(this.buttonRemoveContextMenu); + this.groupBoxContextMenu.Name = "groupBoxContextMenu"; + this.groupBoxContextMenu.TabStop = false; + // + // labelAdminRights + // + resources.ApplyResources(this.labelAdminRights, "labelAdminRights"); + this.labelAdminRights.Name = "labelAdminRights"; + // + // buttonAddContextMenu + // + resources.ApplyResources(this.buttonAddContextMenu, "buttonAddContextMenu"); + this.buttonAddContextMenu.Name = "buttonAddContextMenu"; + this.buttonAddContextMenu.UseVisualStyleBackColor = true; + this.buttonAddContextMenu.Click += new System.EventHandler(this.buttonAddContextMenu_Click); + // + // buttonRemoveContextMenu + // + resources.ApplyResources(this.buttonRemoveContextMenu, "buttonRemoveContextMenu"); + this.buttonRemoveContextMenu.Name = "buttonRemoveContextMenu"; + this.buttonRemoveContextMenu.UseVisualStyleBackColor = true; + this.buttonRemoveContextMenu.Click += new System.EventHandler(this.buttonRemoveContextMenu_Click); + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonОК + // + resources.ApplyResources(this.buttonОК, "buttonОК"); + this.buttonОК.Name = "buttonОК"; + this.buttonОК.UseVisualStyleBackColor = true; + this.buttonОК.Click += new System.EventHandler(this.buttonОК_Click); + // + // textBox1 + // + resources.ApplyResources(this.textBox1, "textBox1"); + this.textBox1.BackColor = System.Drawing.SystemColors.Window; + this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "CustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBox1.Name = "textBox1"; + this.textBox1.Text = global::APKToolGUI.Properties.Settings.Default.CustomJVMArgs; + // + // checkBox7 + // + resources.ApplyResources(this.checkBox7, "checkBox7"); + this.checkBox7.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJVMArgs; + this.checkBox7.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJVMArgs", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox7.Name = "checkBox7"; + this.checkBox7.UseVisualStyleBackColor = true; + // + // checkBox6 + // + resources.ApplyResources(this.checkBox6, "checkBox6"); + this.checkBox6.Checked = global::APKToolGUI.Properties.Settings.Default.DebugMode; + this.checkBox6.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "DebugMode", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox6.Name = "checkBox6"; + this.checkBox6.UseVisualStyleBackColor = true; + // + // customApkToolTxtBox + // + resources.ApplyResources(this.customApkToolTxtBox, "customApkToolTxtBox"); + this.customApkToolTxtBox.BackColor = System.Drawing.SystemColors.Window; + this.customApkToolTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "ApktoolPath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.customApkToolTxtBox.Name = "customApkToolTxtBox"; + this.customApkToolTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.ApktoolPath; + // + // useCustomApktoolChk + // + resources.ApplyResources(this.useCustomApktoolChk, "useCustomApktoolChk"); + this.useCustomApktoolChk.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomApktool; + this.useCustomApktoolChk.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomApktool", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.useCustomApktoolChk.Name = "useCustomApktoolChk"; + this.useCustomApktoolChk.UseVisualStyleBackColor = true; + // + // checkBox5 + // + resources.ApplyResources(this.checkBox5, "checkBox5"); + this.checkBox5.Checked = global::APKToolGUI.Properties.Settings.Default.Utf8FilenameSupport; + this.checkBox5.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "Utf8FilenameSupport", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox5.Name = "checkBox5"; + this.checkBox5.UseVisualStyleBackColor = true; + // + // checkBox4 + // + resources.ApplyResources(this.checkBox4, "checkBox4"); + this.checkBox4.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomJavaExe; + this.checkBox4.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomJavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // customTempLocationTxtBox + // + resources.ApplyResources(this.customTempLocationTxtBox, "customTempLocationTxtBox"); + this.customTempLocationTxtBox.BackColor = System.Drawing.SystemColors.Window; + this.customTempLocationTxtBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "TempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.customTempLocationTxtBox.Name = "customTempLocationTxtBox"; + this.customTempLocationTxtBox.Text = global::APKToolGUI.Properties.Settings.Default.TempDir; + // + // textBoxCustomJavaLocation + // + resources.ApplyResources(this.textBoxCustomJavaLocation, "textBoxCustomJavaLocation"); + this.textBoxCustomJavaLocation.BackColor = System.Drawing.SystemColors.Window; + this.textBoxCustomJavaLocation.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::APKToolGUI.Properties.Settings.Default, "JavaExe", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.textBoxCustomJavaLocation.Name = "textBoxCustomJavaLocation"; + this.textBoxCustomJavaLocation.Text = global::APKToolGUI.Properties.Settings.Default.JavaExe; + // + // checkBox3 + // + resources.ApplyResources(this.checkBox3, "checkBox3"); + this.checkBox3.Checked = global::APKToolGUI.Properties.Settings.Default.UseCustomTempDir; + this.checkBox3.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "UseCustomTempDir", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox2 + // + resources.ApplyResources(this.checkBox2, "checkBox2"); + this.checkBox2.Checked = global::APKToolGUI.Properties.Settings.Default.PlaySoundWhenDone; + this.checkBox2.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "PlaySoundWhenDone", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // checkBox1 + // + resources.ApplyResources(this.checkBox1, "checkBox1"); + this.checkBox1.Checked = global::APKToolGUI.Properties.Settings.Default.ClearLogBeforeAction; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "ClearLogBeforeAction", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // checkBoxCheckUpdateStartup + // + resources.ApplyResources(this.checkBoxCheckUpdateStartup, "checkBoxCheckUpdateStartup"); + this.checkBoxCheckUpdateStartup.Checked = global::APKToolGUI.Properties.Settings.Default.CheckForUpdateAtStartup; + this.checkBoxCheckUpdateStartup.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxCheckUpdateStartup.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "CheckForUpdateAtStartup", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.checkBoxCheckUpdateStartup.Name = "checkBoxCheckUpdateStartup"; + this.checkBoxCheckUpdateStartup.UseVisualStyleBackColor = true; + // + // ignoreOutputContextMenuBox + // + resources.ApplyResources(this.ignoreOutputContextMenuBox, "ignoreOutputContextMenuBox"); + this.ignoreOutputContextMenuBox.Checked = global::APKToolGUI.Properties.Settings.Default.IgnoreOutputDirContextMenu; + this.ignoreOutputContextMenuBox.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::APKToolGUI.Properties.Settings.Default, "IgnoreOutputDirContextMenu", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.ignoreOutputContextMenuBox.Name = "ignoreOutputContextMenuBox"; + this.ignoreOutputContextMenuBox.UseVisualStyleBackColor = true; + // + // FormSettings + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonОК); + this.Controls.Add(this.tabControl1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormSettings"; + this.Load += new System.EventHandler(this.FormSettings_Load); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBoxLanguage.ResumeLayout(false); + this.groupBoxContextMenu.ResumeLayout(false); + this.groupBoxContextMenu.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.GroupBox groupBoxLanguage; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.GroupBox groupBoxContextMenu; + private System.Windows.Forms.Label labelAdminRights; + private System.Windows.Forms.Button buttonAddContextMenu; + private System.Windows.Forms.Button buttonRemoveContextMenu; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonОК; + private System.Windows.Forms.TextBox textBoxCustomJavaLocation; + private System.Windows.Forms.Button buttonCustomJavaLocation; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox checkBoxCheckUpdateStartup; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.CheckBox ignoreOutputContextMenuBox; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.CheckBox checkBox4; + private System.Windows.Forms.TextBox customTempLocationTxtBox; + private System.Windows.Forms.Button buttonCustomTempLocation; + private System.Windows.Forms.CheckBox checkBox3; + internal System.Windows.Forms.Label label6; + private System.Windows.Forms.CheckBox checkBox5; + private System.Windows.Forms.TextBox customApkToolTxtBox; + private System.Windows.Forms.Button customApktoolBtn; + private System.Windows.Forms.CheckBox useCustomApktoolChk; + private System.Windows.Forms.ComboBox themeComboBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox checkBox6; + private System.Windows.Forms.CheckBox checkBox7; + private System.Windows.Forms.TextBox textBox1; + } +} \ No newline at end of file diff --git a/APKToolGUI/Forms/FormSettings.cs b/APKToolGUI/Forms/FormSettings.cs new file mode 100644 index 0000000..9aeaff4 --- /dev/null +++ b/APKToolGUI/Forms/FormSettings.cs @@ -0,0 +1,227 @@ +using System; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.IO; +using APKToolGUI.Languages; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System.Globalization; +using System.Reflection; +using System.Collections.Generic; +using System.Windows.Shapes; +using static APKToolGUI.UpdateChecker; +using APKToolGUI.Properties; +using APKToolGUI.Controls; +using System.Diagnostics; +using System.Linq; + +namespace APKToolGUI +{ + public partial class FormSettings : Form + { + string currentLanguage; + bool currentUseApktoolChk; + string currentApktoolPath; + int currentTheme; + + public FormSettings() + { + InitializeComponent(); + + if (Program.IsDarkTheme()) + DarkTheme.SetTheme(Controls, this); + + currentUseApktoolChk = useCustomApktoolChk.Checked; + currentApktoolPath = customApkToolTxtBox.Text; + + if (!AdminUtils.IsAdministrator()) + { + SetButtonShield(buttonAddContextMenu, true); + SetButtonShield(buttonRemoveContextMenu, true); + } + + int themeInt = (themeComboBox.Items.Count + 1 > Settings.Default.Theme) ? Settings.Default.Theme : 0; + themeComboBox.SelectedIndex = themeInt; + currentTheme = themeInt; + } + + #region GUI + + private void FormSettings_Load(object sender, EventArgs e) + { + LoadSettings(); + } + + private void buttonОК_Click(object sender, EventArgs e) + { + SaveSettings(); + Close(); + } + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); + + private static void SetButtonShield(Button btn, bool showShield) + { + // BCM_SETSHIELD = 0x0000160C + SendMessage(new HandleRef(btn, btn.Handle), 0x160C, IntPtr.Zero, showShield ? new IntPtr(1) : IntPtr.Zero); + } + + private void buttonAddContextMenu_Click(object sender, EventArgs e) + { + if (MessageBox.Show(Language.DoYouRealyWantToInstallCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + RunAsAdmin(Application.ExecutablePath, "ccm"); + } + + private void buttonRemoveContextMenu_Click(object sender, EventArgs e) + { + if (MessageBox.Show(Language.DoYouRealyWantToRemoveCM, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + RunAsAdmin(Application.ExecutablePath, "rcm"); + } + + #endregion + + private void LoadSettings() + { + string sysLang = Language.SystemLanguage; + + comboBox1.Items.Add(sysLang); + comboBox1.Items.Add(CultureInfo.GetCultureInfo("en")); + + CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); + string _culture = Settings.Default.Culture; + + foreach (CultureInfo culture in cultures) + { + foreach (string resourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames()) + { + //Debug.WriteLine(resourceName); + string[] cultName = resourceName.Split('.'); + if (cultName[1] == culture.Name) + { + //Debug.WriteLine("Lang: " + cultName[1] + " " + culture.Name); + string lang = string.Format("{0} [{1}]", culture.DisplayName, culture.Name); + comboBox1.Items.Add(lang); + + if (culture.Name == _culture) + comboBox1.SelectedItem = lang; + } + } + } + + comboBox1.DisplayMember = "NativeName"; // <= System.Globalization.CultureInfo.GetCultureInfo("ru-RU").NativeName + comboBox1.ValueMember = "Name"; // <= System.Globalization.CultureInfo.GetCultureInfo("ru-RU").Name + + if (_culture.Equals("Auto")) + { + currentLanguage = sysLang; + comboBox1.SelectedItem = sysLang; + } + else if (string.IsNullOrEmpty(_culture)) + { + comboBox1.SelectedIndex = 1; + } + else + { + try + { + currentLanguage = Settings.Default.Culture; + comboBox1.SelectedItem = _culture; + } + catch { } + } + } + + private void SaveSettings() + { + try + { + if (Language.SystemLanguage.Equals(comboBox1.SelectedItem.ToString())) + Settings.Default.Culture = "Auto"; + else + Settings.Default.Culture = StringExt.RegexExtract(@"(?<=\[)(.*?)(?=\])", comboBox1.SelectedItem.ToString()); + + Settings.Default.Theme = themeComboBox.SelectedIndex; + Settings.Default.Save(); + + if (string.IsNullOrEmpty(currentLanguage)) + currentLanguage = "en"; + + Debug.WriteLine("Combobox: " + comboBox1.SelectedItem.ToString() + " Language: " + currentLanguage); + + if (!comboBox1.SelectedItem.ToString().Contains(currentLanguage) || themeComboBox.SelectedIndex != currentTheme) + if (MessageBox.Show(Language.RestartApplicationPrompt, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + Application.Restart(); + + if (currentUseApktoolChk != useCustomApktoolChk.Checked || currentApktoolPath != customApkToolTxtBox.Text) + { + FormMain.Instance.SetApktoolPath(); + } + } + catch (Exception ex) + { + Log.e(ex.ToString()); + } + } + + public static void RunAsAdmin(string aFileName, string anArguments) + { + System.Diagnostics.ProcessStartInfo processInfo = new System.Diagnostics.ProcessStartInfo(); + + processInfo.FileName = aFileName; + processInfo.Arguments = anArguments; + processInfo.UseShellExecute = true; + processInfo.Verb = "runas"; + + try + { + System.Diagnostics.Process.Start(processInfo); + } + catch (Exception e) + { + MessageBox.Show(e.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCustomJavaLocation_Click(object sender, EventArgs e) + { + using (OpenFileDialog openJavaExe = new OpenFileDialog()) + { + openJavaExe.Filter = "java.exe|java.exe"; + if (openJavaExe.ShowDialog() == DialogResult.OK) + textBoxCustomJavaLocation.Text = Program.GetPortablePath(openJavaExe.FileName); + } + } + + private void buttonCustomTempLocation_Click(object sender, EventArgs e) + { + using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog()) + { + if (!String.IsNullOrWhiteSpace(customTempLocationTxtBox.Text)) + fbd.SelectedPath = customTempLocationTxtBox.Text; + if (fbd.ShowDialog() == DialogResult.OK) + { + customTempLocationTxtBox.Text = fbd.SelectedPath; + //Clear temp folder + DirectoryUtils.Delete(Program.TEMP_PATH); + + //Create new temp folder + Program.TEMP_PATH = Program.RandTempDirectory(); + Directory.CreateDirectory(Program.TEMP_PATH); + } + } + } + + private async void customApktoolBtn_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "Apktool (*.jar)|*.jar"; + if (ofd.ShowDialog() == DialogResult.OK) + { + customApkToolTxtBox.Text = ofd.FileName; + } + } + } + } +} diff --git a/APKToolGUI/Forms/FormSettings.de.resx b/APKToolGUI/Forms/FormSettings.de.resx new file mode 100644 index 0000000..23d9a3b --- /dev/null +++ b/APKToolGUI/Forms/FormSettings.de.resx @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 206, 17 + + + Benutzerdefinierte JVM-Argumente + + + 101, 17 + + + Debug-Modus + + + Automatisch + + + Hell + + + Dunkel + + + Thema + + + + + + 232, 17 + + + Benutzerdefinierter APKTool-Speicherort + + + 502, 13 + + + Der Vorgang wird langsamer sein, da die Dateien in den temporären Ordner verschoben werden + + + 218, 17 + + + Unterstützung für UTF-8-Dateinamen + + + 212, 17 + + + Benutzerdefinierter Java-Speicherort + + + + + + 233, 17 + + + Benutzerdefinierter temporärer Standort + + + + + + 203, 17 + + + Ton abspielen, wenn du fertig bist + + + 281, 17 + + + Protokoll löschen, bevor du Maßnahmen ergreifst + + + 191, 17 + + + Beim Start nach Updates suchen + + + Allgemein + + + Sprache + + + 376, 17 + + + Benutzerdefiniertes Ausgabeverzeichnis für Kontextmenü ignorieren + + + Administratorrechte erforderlich + + + Install … + + + Deinstall … + + + Kontextmenü + + + Allgemein + + + Abbrechen + + + Einstellungen + + \ No newline at end of file diff --git a/APKToolGUI/FormSettings.resx b/APKToolGUI/Forms/FormSettings.resx similarity index 56% rename from APKToolGUI/FormSettings.resx rename to APKToolGUI/Forms/FormSettings.resx index 08d66f4..8d83d83 100644 --- a/APKToolGUI/FormSettings.resx +++ b/APKToolGUI/Forms/FormSettings.resx @@ -118,534 +118,954 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System - - - Administrator rights required - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Top, Bottom, Left, Right - - 1 - - - groupBoxContextMenu + + True - + Top, Left, Right - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Top, Right + + Top, Left, Right - - NoControl + + + 274, 139 - - NoControl + + 239, 22 - - NoControl + + 20 - - Top, Bottom, Left, Right + + False - - 0 + + textBox1 - - groupBoxContextMenu + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabControl1 + + groupBox1 - - Uninstall + + 0 - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - + NoControl - - - 247, 23 + + 9, 141 - - MiddleLeft + + 147, 17 - - tabPage1 + + 19 - - 0 + + Custom JVM arguments - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + checkBox7 - - Cancel + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Settings + + groupBox1 - - Clear log before action + + 1 - - NoControl + + True - - buttonCustomJavaLocation + + NoControl - - 83, 23 + + 9, 265 - - 160, 17 + + 93, 17 - - Top, Left, Right + + 18 - - comboBox1 + + Debug mode - - 0 + + checkBox6 - - 4 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 129, 19 + + groupBox1 - - groupBoxJava + + 2 - - buttonAddContextMenu + + Auto - - groupBox1 + + Light - - groupBox1 + + Dark - - Top, Left, Right + + 276, 234 - - checkBoxCheckUpdateStartup + + 153, 21 - - textBoxCustomJavaLocation + + 17 - - groupBoxJava + + themeComboBox - - 183, 23 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 9 + + groupBox1 - - 4, 22 + + 3 - - groupBoxContextMenu + + True - - Top, Right + + NoControl - - labelAdminRights + + 7, 239 - - 0 + + 41, 13 - - 11 + + 16 - - System + + Theme - - Context menu + + label1 - - 2 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 12 + + groupBox1 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 - - checkBox1 + + Top, Left, Right - - tabControl1 + + 274, 205 - - False + + 203, 22 - - 1 + + 15 - - buttonCancel + + False - - 454, 265 + + customApkToolTxtBox - - tabPage1 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Top, Left, Right + + groupBox1 - + 5 - - groupBox1 + + Top, Right - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System - - Bottom, Right + + NoControl - - 0 + + 483, 205 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 30, 23 - - 132, 17 + + 14 - - 3, 3, 3, 3 + + ... - - 3 + + customApktoolBtn - - NoControl + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - FormSettings + + groupBox1 - - Bottom, Right + + 6 - - System + + True - - $this + + NoControl - - Top, Left, Right + + 9, 207 - - 0 + + 153, 17 - - 1 + + 13 - - 5 + + Custom apktool location - - 1 + + useCustomApktoolChk - - 0 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBoxJava + + groupBox1 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 7 - - tabPage1 + + True - - CenterParent + + NoControl - - 405, 17 + + 6, 185 - - 345, 21 + + 349, 13 - - 385, 278 + + 12 - - buttonОК + + The process will be slower since files will be moved to temp folder - - Check for updates at startup + + label6 - - groupBoxLanguage + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + groupBox1 - - System + + 8 - - ImageBeforeText + + True - - 2 + + NoControl - - 256, 21 + + 9, 165 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 147, 17 - - Top, Left, Right + + 9 - - 6, 168 + + UTF-8 filename support - - 2 + + checkBox5 - - 6, 115 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 21 + + groupBox1 - - Language + + 9 - - $this + + True - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - 6, 6 + + 9, 115 - - 2 + + 134, 17 - - groupBoxContextMenu + + 8 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Custom Java location - - 23, 20 + + checkBox4 - - 1 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 75, 23 + + groupBox1 - - System + + 10 - - 304, 278 + + Top, Left, Right - - 9, 19 + + 274, 86 - - 446, 239 + + 203, 22 - - 2 + + 7 - - 0 + + False - - 299, 21 + + customTempLocationTxtBox - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBox1 + + + 11 + + Top, Left, Right - - tabPage1 + + 274, 112 - + + 203, 22 + + + 5 + + + False + + + textBoxCustomJavaLocation + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 12 + + + buttonCustomTempLocation + + + Top, Right + + + System + + + NoControl + + + 483, 86 + + + 30, 23 + + 6 - - 0 + + ... - + + buttonCustomTempLocation + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBoxJava + + groupBox1 - + + 13 + + + True + + + NoControl + + + 9, 90 + + + 139, 17 + + + 2 + + + Custom temp location + + + checkBox3 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 14 + + + Top, Right + + System - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - Install + + 483, 112 + + + 30, 23 + + + 4 + + + ... + + + buttonCustomJavaLocation + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 15 + + + True + + + NoControl + + + 9, 65 + + + 144, 17 + + + 1 + + + Play sound when done + + + checkBox2 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 16 + + + True + + + NoControl 9, 42 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 144, 17 - - 4 + + 1 + + + Clear log before action + + + checkBox1 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 17 True - + + NoControl + + + 9, 19 + + + 173, 17 + + + 0 + + + Check for updates at startup + + + checkBoxCheckUpdateStartup + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 18 + + + 8, 6 + + + 521, 299 + + + 12 + + General - - 1 + + groupBox1 - - Custom Java location + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 59 + + tabPage1 - - Java + + 0 - - 6, 13 + + Top, Left, Right - - buttonRemoveContextMenu + + System - - ... + + 9, 17 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 347, 21 + + + 2 + + + comboBox1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxLanguage + + + 0 + + + 8, 311 + + + 522, 47 8 - - 6, 6 + + Language - - NoControl + + groupBoxLanguage - + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabPage1 - - 466, 308 + + 1 - + + Top, Left, Right + + + True + + + NoControl + + + 6, 45 + + + 278, 17 + + + 3 + + + Ignore custom output directory for context menu + + + MiddleCenter + + + ignoreOutputContextMenuBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxContextMenu + + + 0 + + + NoControl + + + 3, 18 + + + 267, 23 + + + 2 + + + Administrator rights required + + + MiddleLeft + + + labelAdminRights + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxContextMenu + + 1 - - Top, Right + + System - + + NoControl + + + 343, 18 + + + 83, 23 + + + 0 + + + Install + + + ImageBeforeText + + + buttonAddContextMenu + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 434, 65 + + groupBoxContextMenu - - 209, 20 + + 2 - - ОК + + System - - 75, 23 + + NoControl + + + 432, 18 83, 23 - + 1 - - True + + Uninstall + + + buttonRemoveContextMenu - - labelCustomJavaLocation + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 17 + + groupBoxContextMenu - - groupBoxLanguage + + 3 - + + 8, 364 + + + 523, 74 + + + 9 + + + Context menu + + + groupBoxContextMenu + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 2 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 442 + + + 0 + + + General + + + tabPage1 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 0 + + + Segoe UI, 8.25pt + + + 0, 1 + + + 543, 468 + + + 1 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Bottom, Right + + + System + + NoControl - + + 461, 475 + + + 75, 23 + + + 4 + + + Cancel + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 - - 434, 47 + + Bottom, Right + + + System NoControl - - 434, 50 - - - 2 + + 380, 475 - - Other + + 75, 23 - - 434, 47 + + 5 - - MiddleRight + + ОК - - 195, 18 + + buttonОК - + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this + + + 1 + True - - ru - + + 6, 13 + + + 542, 503 + + + NoControl + + + CenterParent + + + Settings + + + FormSettings + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/APKToolGUI/FormSettings.ru.resx b/APKToolGUI/Forms/FormSettings.ru.resx similarity index 100% rename from APKToolGUI/FormSettings.ru.resx rename to APKToolGUI/Forms/FormSettings.ru.resx diff --git a/APKToolGUI/Forms/FormSettings.vi-VN.resx b/APKToolGUI/Forms/FormSettings.vi-VN.resx new file mode 100644 index 0000000..20df113 --- /dev/null +++ b/APKToolGUI/Forms/FormSettings.vi-VN.resx @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tùy chỉnh lệnh JVM + + + Chế độ gỡ lỗi + + + Tự động + + + Sáng + + + Tối + + + Giao diện + + + + + + + Vị trí apktool tùy chỉnh + + + Việc di chuyển các tệp trong quá trình xử lý vào thư mục tạm có thể mất thời gian, vui lòng kiên nhẫn chờ đợi + + + Hỗ trợ tên tệp UTF-8 (bật khi tên tệp bị lỗi hiển thị) + + + Vị trí Java tùy chỉnh + + + Vị trí bộ đệm tùy chỉnh + + + Âm báo hoàn thành + + + Xóa nhật ký trước khi thực hiện + + + Kiểm tra cập nhật khi khởi động + + + Chung + + + Ngôn ngữ + + + Bỏ qua thư mục đầu ra tùy chỉnh của menu chuột phải + + + Yêu cầu quyền quản trị + + + Cài đặt + + + Gỡ cài đặt + + + Menu chuột phải + + + Chung + + + Hủy + + + OK + + + Cài đặt + + diff --git a/APKToolGUI/Language.resx b/APKToolGUI/Forms/FormSettings.zh-CN.resx similarity index 67% rename from APKToolGUI/Language.resx rename to APKToolGUI/Forms/FormSettings.zh-CN.resx index 8818c1b..ea39a13 100644 --- a/APKToolGUI/Language.resx +++ b/APKToolGUI/Forms/FormSettings.zh-CN.resx @@ -1,210 +1,199 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - About - - - Apktool version - - - Check for update - - - Debug mode - - - Exit - - - File - - - Help - - - Settings - - - Java is not installed or is installed incorrectly. The program will be closed. - - - Error reading settings! - - - New version is available. Do you want to update? - - - No update is available. - - - Decoding folder not selected! - - - File for decoding not selected! - - - File for signing not selected! - - - Framework not selected! - - - Error saving settings! - - - For the changes to take effect you must restart the program. You want to do it now? - - - File not found - - - Folder is not exist - - - Error - - - Build - - - Decode - - - Install framework - - - Sign - - - System language - - - Do you realy want to install context menu? - - - Do you realy want to remove context menu? - - - Done - - - Java is not found. Do you want to select custom location? - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 自定义 JVM 命令 + + + 调试模式 + + + 自动 + + + 浅色 + + + 深色 + + + 主题 + + + + + + + 自定义 apktool 位置 + + + 操作过程的文件移动到缓存目录中需要时间,请耐心等待 + + + UTF-8 文件名支持,中文乱码开启 + + + 自定义 Java 位置 + + + 自定义缓存位置 + + + 完成提示音 + + + 操作前清除日志 + + + 启动时检查更新 + + + 常规 + + + 语言 + + + 忽略右键菜单的自定义输出目录 + + + 需要管理员权限 + + + 安装 + + + 卸载 + + + 右键菜单 + + + 常规 + + + 取消 + + + 确定 + + + 设置 + \ No newline at end of file diff --git a/APKToolGUI/Handlers/AdbControlEventHandlers.cs b/APKToolGUI/Handlers/AdbControlEventHandlers.cs new file mode 100644 index 0000000..7d01763 --- /dev/null +++ b/APKToolGUI/Handlers/AdbControlEventHandlers.cs @@ -0,0 +1,74 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + internal class AdbControlEventHandlers + { + private static FormMain main; + public AdbControlEventHandlers(FormMain Main) + { + main = Main; + main.killAdbBtn.Click += KillAdbBtn_Click; + main.installApkBtn.Click += InstallApkBtn_Click; + main.refreshDevicesBtn.Click += RefreshDevicesBtn_Click; + main.selApkAdbBtn.Click += SelApkAdbBtn_Click; + main.devicesListBox.SelectedValueChanged += DevicesListBox_SelectedValueChanged; + main.overrideAbiComboBox.SelectedIndexChanged += OverrideAbiComboBox_SelectedIndexChanged; + } + + private void OverrideAbiComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + Settings.Default.Adb_OverrideAbi = main.overrideAbiComboBox.SelectedIndex; + } + + private async void RefreshDevicesBtn_Click(object sender, EventArgs e) + { + await main.ListDevices(); + } + + private async void KillAdbBtn_Click(object sender, EventArgs e) + { + if (MessageBox.Show(Language.ConfirmKillingAdbServer, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + main.adb.KillProcess(); + await main.ListDevices(); + } + } + + private async void InstallApkBtn_Click(object sender, EventArgs e) + { + string inputFile = main.apkPathAdbTxtBox.Text; + if (File.Exists(inputFile)) + { + await main.Install(inputFile); + } + else + MessageBox.Show(Language.ErrorSelectedFileNotExist, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + private void SelApkAdbBtn_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + if (ofd.ShowDialog() == DialogResult.OK) + { + main.apkPathAdbTxtBox.Text = ofd.FileName; + } + } + } + + private void DevicesListBox_SelectedValueChanged(object sender, EventArgs e) + { + main.ToLog(ApktoolEventType.None, String.Format(Language.DeviceSelected, main.devicesListBox.SelectedItem)); + main.selAdbDeviceLbl.Text = main.devicesListBox.GetItemText(main.devicesListBox.SelectedItem); + } + } +} diff --git a/APKToolGUI/Handlers/ApkinfoControlEventHandlers.cs b/APKToolGUI/Handlers/ApkinfoControlEventHandlers.cs new file mode 100644 index 0000000..c4ac519 --- /dev/null +++ b/APKToolGUI/Handlers/ApkinfoControlEventHandlers.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + internal class ApkinfoControlEventHandlers + { + private static FormMain main; + public ApkinfoControlEventHandlers(FormMain Main) + { + main = Main; + main.selApkFileInfoBtn.Click += SelApkFileInfoBtn_Click; + main.psLinkBtn.Click += PsLinkBtn_Click; + main.apkComboLinkBtn.Click += ApkComboLinkBtn_Click; + main.apkPureLinkBtn.Click += ApkPureLinkBtn_Click; + main.apkGkLinkBtn.Click += ApkGkLinkBtn_Click; + main.apkSupportLinkBtn.Click += ApkSupportLinkBtn_Click; + main.apkMirrorLinkBtn.Click += ApkMirrorLinkBtn_Click; + } + + private async void SelApkFileInfoBtn_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + if (ofd.ShowDialog() == DialogResult.OK) + { + await main.GetApkInfo(ofd.FileName); + } + } + } + + private void PsLinkBtn_Click(object sender, EventArgs e) + { + if (main.aapt != null) + Process.Start(main.aapt.PlayStoreLink); + } + + private void ApkComboLinkBtn_Click(object sender, EventArgs e) + { + if (main.aapt != null) + Process.Start(main.aapt.ApkComboLink); + } + + private void ApkPureLinkBtn_Click(object sender, EventArgs e) + { + if (main.aapt != null) + Process.Start(main.aapt.ApkPureLink); + } + + private void ApkGkLinkBtn_Click(object sender, EventArgs e) + { + if (main.aapt != null) + Process.Start(main.aapt.ApkGkLink); + } + + private void ApkSupportLinkBtn_Click(object sender, EventArgs e) + { + if (main.aapt != null) + Process.Start(main.aapt.ApkSupportLink); + } + + private void ApkMirrorLinkBtn_Click(object sender, EventArgs e) + { + if (main.aapt != null) + Process.Start(main.aapt.ApkMirrorLink); + } + } +} diff --git a/APKToolGUI/Handlers/BaksmaliControlEventHandlers.cs b/APKToolGUI/Handlers/BaksmaliControlEventHandlers.cs new file mode 100644 index 0000000..8351007 --- /dev/null +++ b/APKToolGUI/Handlers/BaksmaliControlEventHandlers.cs @@ -0,0 +1,69 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + class BaksmaliControlEventHandlers + { + private static FormMain main; + public BaksmaliControlEventHandlers(FormMain Main) + { + main = Main; + main.baksmaliBrowseOutputBtn.Click += BaksmaliBrowseOutputBtn_Click; + main.baksmaliBrowseInputDexBtn.Click += BaksmaliBrowseInputDexBtn_Click; + main.decSmaliBtn.Click += DecSmaliBtn_Click; + } + + internal void BaksmaliBrowseOutputBtn_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.baksmaliBrowseOutputTxtBox.Text = dlg.SelectedPath; + } + } + + internal void BaksmaliBrowseInputDexBtn_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "dex|*.dex"; + + if (ofd.ShowDialog() == DialogResult.OK) + main.baksmaliBrowseInputDexTxtBox.Text = ofd.FileName; + } + } + + internal async void DecSmaliBtn_Click(object sender, EventArgs e) + { + if (main.baksmaliUseOutputChkBox.Checked) + { + if (String.IsNullOrWhiteSpace(main.baksmaliBrowseOutputTxtBox.Text) || !Directory.Exists(main.baksmaliBrowseOutputTxtBox.Text)) + { + main.ShowMessage(Language.ErrorSelectedOutputFolderNotExist, MessageBoxIcon.Warning); + return; + } + } + + if (!File.Exists(main.baksmaliBrowseInputDexTxtBox.Text)) + { + main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning); + return; + } + + await main.Baksmali(Settings.Default.Baksmali_InputDexFile); + } + } +} diff --git a/APKToolGUI/Handlers/BuildControlEventHandlers.cs b/APKToolGUI/Handlers/BuildControlEventHandlers.cs new file mode 100644 index 0000000..cd45bdb --- /dev/null +++ b/APKToolGUI/Handlers/BuildControlEventHandlers.cs @@ -0,0 +1,90 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + + +namespace APKToolGUI.Handlers +{ + class BuildControlEventHandlers + { + private static FormMain main; + + public BuildControlEventHandlers(FormMain Main) + { + main = Main; + main.button_BUILD_BrowseAaptPath.Click += Button_BUILD_BrowseAaptPath_Click; + main.button_BUILD_BrowseFrameDir.Click += Button_BUILD_BrowseFrameDir_Click; + main.button_BUILD_BrowseOutputAppPath.Click += Button_BUILD_BrowseOutputAppPath_Click; + main.button_BUILD_BrowseInputProjectDir.Click += Button_BUILD_BrowseInputProjectDir_Click; + main.button_BUILD_Build.Click += Button_BUILD_Build_Click; + } + + internal void Button_BUILD_BrowseAaptPath_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = Language.ExecutableFile + "|*.exe"; + if (!String.IsNullOrWhiteSpace(main.textBox_BUILD_AaptPath.Text)) + { + ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_BUILD_AaptPath.Text); + ofd.FileName = Path.GetFileName(main.textBox_BUILD_AaptPath.Text); + } + if (ofd.ShowDialog() == DialogResult.OK) + main.textBox_BUILD_AaptPath.Text = ofd.FileName; + } + } + + internal void Button_BUILD_BrowseFrameDir_Click(object sender, EventArgs e) + { + using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog()) + { + if (!String.IsNullOrWhiteSpace(main.textBox_BUILD_FrameDir.Text)) + fbd.SelectedPath = main.textBox_BUILD_FrameDir.Text; + if (fbd.ShowDialog() == DialogResult.OK) + main.textBox_BUILD_FrameDir.Text = fbd.SelectedPath; + } + } + + internal void Button_BUILD_BrowseOutputAppPath_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.textBox_BUILD_OutputAppPath.Text = dlg.SelectedPath; + } + } + + internal void Button_BUILD_BrowseInputProjectDir_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.textBox_BUILD_InputProjectDir.Text = dlg.SelectedPath; + } + } + + internal async void Button_BUILD_Build_Click(object sender, EventArgs e) + { + string decApkDir = main.textBox_BUILD_InputProjectDir.Text; + if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text)) + { + await main.Build(decApkDir); + } + else + MessageBox.Show(Language.WarningDecodingFolderNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} diff --git a/APKToolGUI/Handlers/DecodeControlEventHandlers.cs b/APKToolGUI/Handlers/DecodeControlEventHandlers.cs new file mode 100644 index 0000000..e6efa5e --- /dev/null +++ b/APKToolGUI/Handlers/DecodeControlEventHandlers.cs @@ -0,0 +1,110 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + class DecodeControlEventHandlers + { + private static FormMain main; + public DecodeControlEventHandlers(FormMain Main) + { + main = Main; + main.button_DECODE_BrowseFrameDir.Click += Button_DECODE_BrowseFrameDir_Click; + main.button_DECODE_BrowseOutputDirectory.Click += Button_DECODE_BrowseOutputDirectory_Click; + main.button_DECODE_BrowseInputAppPath.Click += Button_DECODE_BrowseInputAppPath_Click; + main.button_DECODE_Decode.Click += Button_DECODE_Decode_Click; + } + + internal void Button_DECODE_BrowseFrameDir_Click(object sender, EventArgs e) + { + using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog()) + { + if (!String.IsNullOrWhiteSpace(main.textBox_DECODE_FrameDir.Text)) + fbd.SelectedPath = main.textBox_DECODE_FrameDir.Text; + if (fbd.ShowDialog() == DialogResult.OK) + main.textBox_DECODE_FrameDir.Text = fbd.SelectedPath; + } + } + + internal void Button_DECODE_BrowseOutputDirectory_Click(object sender, EventArgs e) + { + using (VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog()) + { + if (!String.IsNullOrWhiteSpace(main.textBox_DECODE_OutputDirectory.Text)) + fbd.SelectedPath = main.textBox_DECODE_OutputDirectory.Text; + else + if (!String.IsNullOrWhiteSpace(main.textBox_DECODE_InputAppPath.Text)) + fbd.SelectedPath = Path.GetDirectoryName(main.textBox_DECODE_InputAppPath.Text); + if (fbd.ShowDialog() == DialogResult.OK) + main.textBox_DECODE_OutputDirectory.Text = fbd.SelectedPath; + } + } + + internal async void Button_DECODE_BrowseInputAppPath_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "Android Package (*.apk;*.xapk;*.zip;*.apkm;*.apks)|*.apk;*.xapk;*.zip;*.apkm;*.apks"; + + if (ofd.ShowDialog() == DialogResult.OK) + { + main.textBox_DECODE_InputAppPath.Text = ofd.FileName; + + if (!Settings.Default.Decode_DontParseApkInfo) + await main.GetApkInfo(ofd.FileName); + + if (main.checkBox_DECODE_OutputDirectory.Checked) + { + main.textBox_DECODE_OutputDirectory.Text = Path.Combine(Path.GetDirectoryName(main.textBox_DECODE_InputAppPath.Text), Path.GetFileNameWithoutExtension(main.textBox_DECODE_InputAppPath.Text)); + } + } + } + } + + internal async void Button_DECODE_Decode_Click(object sender, EventArgs e) + { + string inputFile = main.textBox_DECODE_InputAppPath.Text; + if (File.Exists(inputFile)) + { + if (main.checkBox_DECODE_UseFramework.Checked && !Directory.Exists(main.textBox_DECODE_FrameDir.Text)) + { + main.ShowMessage(Language.DecodeSelectedFrameworkNotExist, MessageBoxIcon.Warning); + return; + } + if (main.checkBox_DECODE_OutputDirectory.Checked) + { + if (String.IsNullOrWhiteSpace(Settings.Default.Decode_OutputDir)) + { + main.ShowMessage(Language.DecodeDirNotSelected, MessageBoxIcon.Warning); + return; + } + else + if (!PathUtils.IsValidPath(Settings.Default.Decode_OutputDir)) + { + main.ShowMessage(Language.DecodeCouldNotCreate, MessageBoxIcon.Warning); + return; + } + } + + if (inputFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm")) + { + await main.MergeAndDecompile(inputFile); + } + else + await main.Decompile(inputFile); + } + else + MessageBox.Show(Language.WarningFileForDecodingNotSelected, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} diff --git a/APKToolGUI/Handlers/DragDropHandlers.cs b/APKToolGUI/Handlers/DragDropHandlers.cs new file mode 100644 index 0000000..a16b423 --- /dev/null +++ b/APKToolGUI/Handlers/DragDropHandlers.cs @@ -0,0 +1,231 @@ +using APKToolGUI.ApkTool; +using APKToolGUI.Controls; +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using SaveToGameWpf.Logic.Utils; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +namespace APKToolGUI.Handlers +{ + class DragDropHandlers + { + private static FormMain main; + + string[] apks = { ".apk", ".xapk", ".zip", ".apks", ".apkm" }; + string[] apk = { ".apk" }; + + public DragDropHandlers(FormMain Main) + { + main = Main; + + //Decode + DragEventHandler decEventHandler = new DragEventHandler((sender, e) => { DropApkToDec(e); }); + Register(main.decPanel, null, decEventHandler, apks); + Register(main.textBox_DECODE_InputAppPath, main.decPanel, decEventHandler, apks); + Register(main.button_DECODE_Decode, main.decPanel, decEventHandler, apks); + + DragEventHandler comEventHandler = new DragEventHandler((sender, e) => { DropDirToCom(e); }); + Register(main.comPanel, null, comEventHandler, null); + Register(main.textBox_BUILD_InputProjectDir, main.comPanel, comEventHandler, null); + Register(main.button_BUILD_Build, main.comPanel, comEventHandler, null); + + DragEventHandler alignEventHandler = new DragEventHandler((sender, e) => { DropApkToAlign(e); }); + Register(main.zipalignPanel, null, alignEventHandler, apk); + Register(main.textBox_ZIPALIGN_InputFile, main.zipalignPanel, alignEventHandler, apk); + Register(main.button_ZIPALIGN_Align, main.zipalignPanel, alignEventHandler, apk); + + DragEventHandler signEventHandler = new DragEventHandler((sender, e) => { DropApkToSign(e); }); + Register(main.signPanel, null, signEventHandler, apk); + Register(main.textBox_SIGN_InputFile, main.signPanel, signEventHandler, apk); + Register(main.button_SIGN_Sign, main.signPanel, signEventHandler, apk); + + DragEventHandler mergeEventHandler = new DragEventHandler((sender, e) => { DropApkToMerge(e); }); + Register(main.mergePanel, null, mergeEventHandler, apks); + Register(main.splitApkPathTxtBox, main.mergePanel, mergeEventHandler, apks); + Register(main.mergeApkBtn, main.mergePanel, mergeEventHandler, apks); + + DragEventHandler baksmaliEventHandler = new DragEventHandler((sender, e) => { DropDexToBaksmali(e); }); + Register(main.bakSmaliGroupBox, null, baksmaliEventHandler, new string[] { ".dex" }); + main.bakSmaliGroupBox.AllowDrop = true; + + DragEventHandler smaliEventHandler = new DragEventHandler((sender, e) => { DropDirToSmali(e); }); + Register(main.smaliGroupBox, null, smaliEventHandler, null); + main.smaliGroupBox.AllowDrop = true; + + DragEventHandler apkInfoEventHandler = new DragEventHandler((sender, e) => { DropApkToGetInfo(e); }); + Register(main.basicInfoTabPage, null, apkInfoEventHandler, apks); + Register(main.fileTxtBox, null, apkInfoEventHandler, apks); + + DragEventHandler adbEventHandler = new DragEventHandler((sender, e) => { DropApkToInstall(e); }); + Register(main.tabPageAdb, null, adbEventHandler, apk); + Register(main.installApkBtn, null, adbEventHandler, apk); + } + + void Register(Control ctrl, Control extCtrl, DragEventHandler dragHandler, string[] extension) + { + if (extCtrl == null) + extCtrl = ctrl; + ctrl.DragLeave += new EventHandler((sender, e) => extCtrl.BackColor = PanelBackColor()); + ctrl.DragEnter += new DragEventHandler((sender, e) => e.CheckDragEnter(extension)); + ctrl.DragOver += new DragEventHandler((sender, e) => { if (e.CheckManyDragOver(extension)) extCtrl.BackColor = PanelHoverBackColor(); }); + ctrl.DragDrop += dragHandler; + } + + private async void DropApkToDec(DragEventArgs e) + { + string[] apkFiles = null; + if (e.DropManyByEnd(file => apkFiles = file, apks)) + { + main.decPanel.BackColor = PanelBackColor(); + + foreach (var apkFile in apkFiles) + { + main.textBox_DECODE_InputAppPath.Text = apkFile; + + if (!Settings.Default.Decode_DontParseApkInfo) + await main.GetApkInfo(apkFile); + + if (apkFile.ContainsAny(".xapk", ".zip", ".apks", ".apkm")) + { + await main.MergeAndDecompile(apkFile); + } + else + await main.Decompile(apkFile); + } + } + } + + private async void DropDirToCom(DragEventArgs e) + { + string[] folders = null; + if (e.DropManyByEnd(file => folders = file, "")) + { + foreach (var folder in folders) + { + if (File.Exists(Path.Combine(folder, "AndroidManifest.xml"))) + { + main.textBox_BUILD_InputProjectDir.Text = folder; + main.comPanel.BackColor = PanelBackColor(); + await main.Build(folder); + } + else + main.ToLog(ApktoolEventType.Error, Language.ErrorNotAnApk); + } + } + } + + private async void DropApkToAlign(DragEventArgs e) + { + string[] apkFiles = null; + if (e.DropManyByEnd(file => apkFiles = file, apks)) + { + main.zipalignPanel.BackColor = PanelBackColor(); + + foreach (var apkFile in apkFiles) + { + main.textBox_ZIPALIGN_InputFile.Text = apkFile; + + await main.Align(apkFile); + } + } + } + + private async void DropApkToSign(DragEventArgs e) + { + string[] apkFiles = null; + if (e.DropManyByEnd(file => apkFiles = file, apks)) + { + main.signPanel.BackColor = PanelBackColor(); + + foreach (var apkFile in apkFiles) + { + main.textBox_SIGN_InputFile.Text = apkFile; + + await main.Sign(apkFile); + } + } + } + + private async void DropApkToMerge(DragEventArgs e) + { + string[] apkFiles = null; + if (e.DropManyByEnd(file => apkFiles = file, apks)) + { + main.mergePanel.BackColor = PanelBackColor(); + + foreach (var apkFile in apkFiles) + { + main.splitApkPathTxtBox.Text = apkFile; + + await main.Merge(apkFile); + } + } + } + + private async void DropDexToBaksmali(DragEventArgs e) + { + string apkFile = null; + if (e.DropOneByEnd(file => apkFile = file, ".dex")) + { + main.baksmaliBrowseInputDexTxtBox.Text = apkFile; + main.bakSmaliGroupBox.BackColor = PanelBackColor(); + await main.Baksmali(apkFile); + } + } + + private async void DropDirToSmali(DragEventArgs e) + { + string dir = null; + if (e.DropOneByEnd(file => dir = file, null)) + { + main.smaliBrowseInputDirTxtBox.Text = dir; + main.smaliGroupBox.BackColor = PanelBackColor(); + await main.Smali(dir); + } + } + + private async void DropApkToInstall(DragEventArgs e) + { + string dir = null; + if (e.DropOneByEnd(file => dir = file, ".apk")) + { + main.apkPathAdbTxtBox.Text = dir; + main.tabPageAdb.BackColor = PanelBackColor(); + await main.Install(dir); + } + } + + private async void DropApkToGetInfo(DragEventArgs e) + { + string apkFile = null; + if (e.DropOneByEnd(file => apkFile = file, apks)) + { + main.smaliBrowseInputDirTxtBox.Text = apkFile; + main.basicInfoTabPage.BackColor = PanelBackColor(); + await main.GetApkInfo(apkFile); + } + } + + Color PanelBackColor() + { + if (Program.IsDarkTheme()) + return DarkTheme.bgColor; + return Color.White; + } + + Color PanelHoverBackColor() + { + if (Program.IsDarkTheme()) + return Color.Gray; + return Color.LightGreen; + } + } +} diff --git a/APKToolGUI/Handlers/FrameworkControlEventHandlers.cs b/APKToolGUI/Handlers/FrameworkControlEventHandlers.cs new file mode 100644 index 0000000..b0faa8d --- /dev/null +++ b/APKToolGUI/Handlers/FrameworkControlEventHandlers.cs @@ -0,0 +1,109 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + class FrameworkControlEventHandlers + { + private static FormMain main; + + public FrameworkControlEventHandlers(FormMain Main) + { + main = Main; + main.button_IF_BrowseFrameDir.Click += Button_IF_BrowseFrameDir_Click; + main.button_IF_BrowseInputFramePath.Click += Button_IF_BrowseInputFramePath_Click; + main.button_IF_InstallFramework.Click += Button_IF_InstallFramework_Click; + main.clearFwBtn.Click += ClearFwBtn_Click; + main.openFwFolderBtn.Click += OpenFwFolderBtn_Click; + } + + internal void Button_IF_BrowseFrameDir_Click(object sender, EventArgs e) + { + main.clearFwBeforeDecodeChkBox.Checked = false; + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.textBox_IF_FrameDir.Text = dlg.SelectedPath; + } + } + + internal void Button_IF_BrowseInputFramePath_Click(object sender, EventArgs e) + { + main.clearFwBeforeDecodeChkBox.Checked = false; + using (OpenFileDialog ofd = new OpenFileDialog()) + { + if (File.Exists(main.textBox_IF_InputFramePath.Text)) + { + ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_IF_InputFramePath.Text); + ofd.FileName = Path.GetFileNameWithoutExtension(main.textBox_IF_InputFramePath.Text); + } + ofd.Filter = "apk|*.apk"; + + if (ofd.ShowDialog() == DialogResult.OK) + main.textBox_IF_InputFramePath.Text = ofd.FileName; + } + } + + internal async void Button_IF_InstallFramework_Click(object sender, EventArgs e) + { + if (main.checkBox_IF_FramePath.Checked) + { + if (String.IsNullOrWhiteSpace(main.textBox_IF_FrameDir.Text) || !Directory.Exists(main.textBox_IF_FrameDir.Text)) + { + main.ShowMessage(Language.ErrorSelectingFrameworkDirectory, MessageBoxIcon.Warning); + return; + } + } + if (main.checkBox_IF_Tag.Checked && String.IsNullOrWhiteSpace(main.textBox_IF_Tag.Text)) + { + main.ShowMessage(Language.ErrorEnteringFrameworkTag, MessageBoxIcon.Warning); + return; + } + if (!File.Exists(main.textBox_IF_InputFramePath.Text)) + { + main.ShowMessage(Language.ErrorSelectingFrameworkFile, MessageBoxIcon.Warning); + return; + } + + main.Running(Language.InstallingFramework); + main.ToLog(ApktoolEventType.None, Language.InstallingFramework + " " + Path.GetFileName(main.textBox_IF_InputFramePath.Text)); + + await Task.Factory.StartNew(() => + { + if (main.apktool.InstallFramework() == 0) + main.Done(Language.FrameworkInstalled); + else + main.Error(Language.FrameworkInstallationNotStarted); + }); + } + + internal async void ClearFwBtn_Click(object sender, EventArgs e) + { + main.Running(Language.ClearingFramework); + + await main.ClearFramework(); + } + + internal void OpenFwFolderBtn_Click(object sender, EventArgs e) + { + if (main.checkBox_IF_FramePath.Checked && Directory.Exists(main.textBox_IF_FrameDir.Text)) + Process.Start("explorer.exe", main.textBox_IF_FrameDir.Text); + else if (Directory.Exists(Program.FRAMEWORK_DIR)) + Process.Start("explorer.exe", Program.FRAMEWORK_DIR); + else + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFolderNotExist); + } + } +} diff --git a/APKToolGUI/Handlers/MainWindowEventHandlers.cs b/APKToolGUI/Handlers/MainWindowEventHandlers.cs new file mode 100644 index 0000000..ba9e274 --- /dev/null +++ b/APKToolGUI/Handlers/MainWindowEventHandlers.cs @@ -0,0 +1,238 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + internal class MainWindowEventHandlers + { + private static FormMain main; + public MainWindowEventHandlers(FormMain Main) + { + main = Main; + main.clearLogToolStripMenuItem.Click += ClearLogToolStripMenuItem_Click; + main.copyToolStripMenuItem.Click += CopyToolStripMenuItem_Click; + main.openAndroidMainfestBtn.Click += OpenAndroidMainfestBtn_Click; + main.openApktoolYmlBtn.Click += OpenApktoolYmlBtn_Click; + main.compileOutputOpenDirBtn.Click += CompiledApkOpenDirBtn_Click; + main.button_OpenMainActivity.Click += Button_OpenMainActivity_Click; + main.decApkOpenDirBtn.Click += DecApkOpenDirBtn_Click; + main.decOutOpenDirBtn.Click += DecOutOpenDirBtn_Click; + main.comApkOpenDir.Click += ComApkOpenDir_Click; + main.signApkOpenDirBtn.Click += SignApkOpenDirBtn_Click; + main.alignApkOpenDirBtn.Click += AlignApkOpenDirBtn_Click; + main.mergeApkBtn.Click += MergeApkBtn_Click; + main.selSplitApkBtn.Click += SelSplitApkBtn_Click; + } + + internal void SelSplitApkBtn_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "Split APK Package (*.xapk;*.zip;*.apkm;*.apks)|*.xapk;*.zip;*.apkm;*.apks"; + + if (ofd.ShowDialog() == DialogResult.OK) + { + main.splitApkPathTxtBox.Text = ofd.FileName; + } + } + } + + internal async void MergeApkBtn_Click(object sender, EventArgs e) + { + try + { + main.Save(); + if (!File.Exists(Settings.Default.SplitApk_InputFile)) + { + main.ShowMessage(Language.SplitApkNotFound, MessageBoxIcon.Warning); + return; + } + + await main.Merge(Settings.Default.SplitApk_InputFile); + } + catch (Exception ex) + { + main.ToLog(ApktoolEventType.Error, ex.Message); + } + } + + private void ClearLogToolStripMenuItem_Click(object sender, EventArgs e) + { + main.logTxtBox.Text = ""; + } + + private void CopyToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + System.Windows.Forms.Clipboard.SetText(main.logTxtBox.SelectedText); + } + catch (Exception ex) + { + main.ToLog(ApktoolEventType.Error, ex.Message); + } + } + + internal void DecApkOpenDirBtn_Click(object sender, EventArgs e) + { + if (Directory.Exists(main.textBox_BUILD_InputProjectDir.Text)) + Process.Start("explorer.exe", main.textBox_BUILD_InputProjectDir.Text); + else + { + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist); + } + } + + internal void DecOutOpenDirBtn_Click(object sender, EventArgs e) + { + if (Directory.Exists(Settings.Default.Decode_OutputDir)) + Process.Start("explorer.exe", Settings.Default.Decode_OutputDir); + else + { + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedOutputFolderNotExist); + } + } + + private void OpenAndroidMainfestBtn_Click(object sender, EventArgs e) + { + if (File.Exists(Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "AndroidManifest.xml"))) + Process.Start("explorer.exe", Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "AndroidManifest.xml")); + else + main.ToLog(ApktoolEventType.Error, Language.AndroidManifestNotExist); + } + + private void OpenApktoolYmlBtn_Click(object sender, EventArgs e) + { + if (File.Exists(Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "apktool.yml"))) + Process.Start("explorer.exe", Path.Combine(main.textBox_BUILD_InputProjectDir.Text, "apktool.yml")); + else + main.ToLog(ApktoolEventType.Error, Language.AndroidManifestNotExist); + } + + private void CompiledApkOpenDirBtn_Click(object sender, EventArgs e) + { + if (Directory.Exists(Settings.Default.Build_OutputAppPath)) + { + Process.Start("explorer.exe", Settings.Default.Build_OutputAppPath); + } + else + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist); + } + + private void Button_OpenMainActivity_Click(object sender, EventArgs e) + { + string decPath = main.textBox_BUILD_InputProjectDir.Text; + if (Directory.Exists(decPath)) + { + var launchActivityList = new List + { + main.aapt != null ? main.aapt.LaunchableActivity : CommonUtils.GetActivityFromManifest(decPath), + "com\\unity3d\\player\\UnityPlayerActivity", + CommonUtils.GetApplicationNameFromManifest(decPath) + }; + + foreach (string launchActivity in launchActivityList) + { + if (String.IsNullOrEmpty(launchActivity)) + continue; + + Debug.WriteLine(launchActivity); + + string path = null; + bool activityFound = false; + for (int i = 1; i < 100; i++) + { + string smaliFolder = (i == 1) ? "smali" : "smali_classes" + i; + path = Path.Combine(decPath, smaliFolder, launchActivity.Replace(".", "\\") + ".smali"); + if (File.Exists(path)) + { + Debug.WriteLine(path); + activityFound = true; + break; + } + } + + if (activityFound && !CommonUtils.OnCreateExists(path)) + continue; + + if (activityFound) + { + main.ToLog(ApktoolEventType.None, String.Format(Language.MainActivityFound, path)); + Process.Start("explorer.exe", path); + return; + } + else + continue; + } + + main.ToLog(ApktoolEventType.Warning, Language.MainActivityNotFoundPleaseFindManually); + } + else + main.ToLog(ApktoolEventType.Error, Language.DecompiledAPKNotExist); + } + + internal void ComApkOpenDir_Click(object sender, EventArgs e) + { + string decApkDir = main.textBox_BUILD_InputProjectDir.Text; + + string outputFile = decApkDir + " compiled.apk"; + if (Settings.Default.Build_SignAfterBuild) + outputFile = decApkDir + " signed.apk"; + if (Settings.Default.Build_UseOutputAppPath) + { + outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(decApkDir)) + ".apk"; + if (Settings.Default.Build_SignAfterBuild) + outputFile = Path.Combine(Settings.Default.Build_OutputAppPath, Path.GetFileName(decApkDir)) + " signed.apk"; + } + + if (File.Exists(outputFile)) + Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile)); + else + { + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist); + } + } + + internal void SignApkOpenDirBtn_Click(object sender, EventArgs e) + { + string inputFile = Settings.Default.Sign_InputFile; + string outputFile = inputFile; + if (Settings.Default.Zipalign_UseOutputDir) + outputFile = Path.Combine(Settings.Default.Sign_OutputDir, Path.GetFileName(inputFile)); + + if (File.Exists(outputFile)) + Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile)); + else + { + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist); + } + } + + internal void AlignApkOpenDirBtn_Click(object sender, EventArgs e) + { + string inputFile = Settings.Default.Zipalign_InputFile; + + string outputFile = inputFile; + if (!String.IsNullOrEmpty(outputFile)) + { + if (Settings.Default.Zipalign_UseOutputDir) + outputFile = Path.Combine(Settings.Default.Zipalign_OutputDir, Path.GetFileName(inputFile)); + + if (!Settings.Default.Zipalign_OverwriteOutputFile) + outputFile = PathUtils.GetDirectoryNameWithoutExtension(outputFile) + " aligned.apk"; + } + if (File.Exists(outputFile)) + Process.Start("explorer.exe", string.Format("/select,\"{0}\"", outputFile)); + else + { + main.ToLog(ApktoolEventType.Error, Language.ErrorSelectedFileNotExist); + } + } + } +} diff --git a/APKToolGUI/Handlers/MenuItemHandlers.cs b/APKToolGUI/Handlers/MenuItemHandlers.cs new file mode 100644 index 0000000..4902e76 --- /dev/null +++ b/APKToolGUI/Handlers/MenuItemHandlers.cs @@ -0,0 +1,116 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using Dark.Net; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + internal class MenuItemHandlers + { + private static FormMain main; + public MenuItemHandlers(FormMain Main) + { + main = Main; + main.saveLogToFileToolStripMenuItem.Click += SaveLogItem_Click; + main.settingsToolStripMenuItem.Click += MenuItemSettings_Click; + main.exitToolStripMenuItem.Click += MenuItemExit_Click; + main.openTempFolderToolStripMenuItem.Click += OpenTempFolderToolStripMenuItem_Click; + main.checkForUpdateToolStripMenuItem.Click += MenuItemCheckUpdate_Click; + main.aboutToolStripMenuItem.Click += MenuItemAbout_Click; + main.apktoolIssuesToolStripMenuItem.Click += ApktoolIssuesLinkItem_Click; + main.baksmaliIssuesToolStripMenuItem.Click += BaksmaliIssuesLinkItem_Click; + main.reportAnIsuueToolStripMenuItem.Click += ReportAnIsuueToolStripMenuItem_Click; + main.newInsToolStripMenuItem.Click += NewInsToolStripMenuItem_Click; + } + + private void NewInsToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location); + } + + private void SaveLogItem_Click(object sender, EventArgs e) + { + using (var sfd = new SaveFileDialog()) + { + sfd.FileName = "APK Tool GUI logs"; + sfd.Filter = Language.TextFile + " (*.txt)|*.txt"; + sfd.FilterIndex = 2; + + if (sfd.ShowDialog() == DialogResult.OK) + { + File.WriteAllText(sfd.FileName, main.logTxtBox.Text); + } + } + } + + private void MenuItemSettings_Click(object sender, EventArgs e) + { + Theme theme = (Theme)Settings.Default.Theme; + + if (Program.IsWin10OrAbove()) + DarkNet.Instance.SetCurrentProcessTheme(theme); + + FormSettings frm = new FormSettings(); + + if (Program.IsWin10OrAbove()) + DarkNet.Instance.SetWindowThemeForms(frm, theme); + frm.ShowDialog(); + } + + private void MenuItemExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void OpenTempFolderToolStripMenuItem_Click(object sender, EventArgs e) + { + if (Directory.Exists(Program.TEMP_PATH)) + Process.Start("explorer.exe", Program.TEMP_PATH); + else + { + Directory.CreateDirectory(Program.TEMP_PATH); + Process.Start("explorer.exe", Program.TEMP_PATH); + } + } + + private void MenuItemCheckUpdate_Click(object sender, EventArgs e) + { + main.updateCheker.CheckAsync(); + } + + private void MenuItemAbout_Click(object sender, EventArgs e) + { + Theme theme = (Theme)Settings.Default.Theme; + + if (Program.IsWin10OrAbove()) + DarkNet.Instance.SetCurrentProcessTheme(theme); + + FormAboutBox frm = new FormAboutBox(); + if (Program.IsWin10OrAbove()) + DarkNet.Instance.SetWindowThemeForms(frm, theme); + frm.ShowDialog(); + } + + private void ApktoolIssuesLinkItem_Click(object sender, EventArgs e) + { + Process.Start("https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue"); + } + + private void BaksmaliIssuesLinkItem_Click(object sender, EventArgs e) + { + Process.Start("https://github.com/JesusFreke/smali/issues?q=is%3Aissue"); + } + + private void ReportAnIsuueToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start("https://github.com/AndnixSH/APKToolGUI/issues/new/choose"); + } + } +} diff --git a/APKToolGUI/Handlers/SignControlEventHandlers.cs b/APKToolGUI/Handlers/SignControlEventHandlers.cs new file mode 100644 index 0000000..080c6c9 --- /dev/null +++ b/APKToolGUI/Handlers/SignControlEventHandlers.cs @@ -0,0 +1,146 @@ +using APKToolGUI.ApkTool; +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + + +namespace APKToolGUI.Handlers +{ + class SignControlEventHandlers + { + private static FormMain main; + + public SignControlEventHandlers(FormMain Main) + { + main = Main; + main.button_SIGN_BrowsePublicKey.Click += Button_SIGN_BrowsePublicKey_Click; + main.button_SIGN_BrowsePrivateKey.Click += Button_SIGN_BrowsePrivateKey_Click; + main.button_SIGN_BrowsePrivateKey.Click += Button_SIGN_BrowsePrivateKey_Click; + main.button_SIGN_BrowseInputFile.Click += Button_SIGN_BrowseInputFile_Click; + main.button_SIGN_BrowseOutputFile.Click += Button_SIGN_BrowseOutputFile_Click; + main.schemev1ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged; + main.schemev2ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged; + main.schemev3ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged; + main.schemev4ComboBox.SelectedIndexChanged += SchemeComboBox_SelectedIndexChanged; + main.button_SIGN_Sign.Click += Button_SIGN_Sign_Click; + main.selectKeyStoreFileBtn.Click += SelectKeyStoreFileBtn_Click; + } + + internal void Button_SIGN_BrowsePublicKey_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "*.pem|*.pem"; + if (File.Exists(main.textBox_SIGN_PublicKey.Text)) + { + ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_SIGN_PublicKey.Text); + ofd.FileName = Path.GetFileNameWithoutExtension(main.textBox_SIGN_PublicKey.Text); + } + if (ofd.ShowDialog() == DialogResult.OK) + main.textBox_SIGN_PublicKey.Text = Program.GetPortablePath(ofd.FileName); + } + } + + internal void Button_SIGN_BrowsePrivateKey_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "*.pk8|*.pk8"; + if (File.Exists(main.textBox_SIGN_PrivateKey.Text)) + { + ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_SIGN_PrivateKey.Text); + ofd.FileName = Path.GetFileNameWithoutExtension(main.textBox_SIGN_PrivateKey.Text); + } + if (ofd.ShowDialog() == DialogResult.OK) + main.textBox_SIGN_PrivateKey.Text = Program.GetPortablePath(ofd.FileName); + } + } + + internal void Button_SIGN_BrowseOutputFile_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.textBox_SIGN_OutputFile.Text = dlg.SelectedPath; + } + } + + internal async void Button_SIGN_BrowseInputFile_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "(*.apk;*.jar;*.zip)|*.apk;*.jar;*.zip"; + + if (ofd.ShowDialog() == DialogResult.OK) + { + main.textBox_SIGN_InputFile.Text = ofd.FileName; + await main.GetApkInfo(ofd.FileName); + main.textBox_SIGN_OutputFile.Text = + String.Format("{0}{1}{2}_signed{3}", + Path.GetDirectoryName(main.textBox_SIGN_InputFile.Text), + Path.DirectorySeparatorChar, + Path.GetFileNameWithoutExtension(main.textBox_SIGN_InputFile.Text), + Path.GetExtension(main.textBox_SIGN_InputFile.Text)); + } + } + } + + internal async void Button_SIGN_Sign_Click(object sender, EventArgs e) + { + try + { + main.Save(); + if (!File.Exists(Settings.Default.Sign_PublicKey)) + { + main.ShowMessage(Language.SignPublicKeyNotFound, MessageBoxIcon.Warning); + return; + } + if (!File.Exists(Settings.Default.Sign_PrivateKey)) + { + main.ShowMessage(Language.SignPrivateKeyNotFound, MessageBoxIcon.Warning); + return; + } + if (!File.Exists(main.textBox_SIGN_InputFile.Text)) + { + main.ShowMessage(Language.SignInputFileNotFound, MessageBoxIcon.Warning); + return; + } + + await main.Sign(Settings.Default.Sign_InputFile); + } + catch (Exception ex) + { + main.ToLog(ApktoolEventType.Error, ex.Message); + } + } + + internal void SelectKeyStoreFileBtn_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + ofd.Filter = "Keystore|*.keystore;*.jks"; + if (ofd.ShowDialog() == DialogResult.OK) + main.keyStoreFileTxtBox.Text = ofd.FileName; + } + } + + private void SchemeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + Settings.Default.Sign_Schemev1 = main.schemev1ComboBox.SelectedIndex; + Settings.Default.Sign_Schemev2 = main.schemev2ComboBox.SelectedIndex; + Settings.Default.Sign_Schemev3 = main.schemev3ComboBox.SelectedIndex; + Settings.Default.Sign_Schemev4 = main.schemev4ComboBox.SelectedIndex; + } + } +} diff --git a/APKToolGUI/Handlers/SmaliControlEventHandlers.cs b/APKToolGUI/Handlers/SmaliControlEventHandlers.cs new file mode 100644 index 0000000..dc1c7df --- /dev/null +++ b/APKToolGUI/Handlers/SmaliControlEventHandlers.cs @@ -0,0 +1,69 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + class SmaliControlEventHandlers + { + private static FormMain main; + public SmaliControlEventHandlers(FormMain Main) + { + main = Main; + main.smaliBrowseOutputBtn.Click += SmaliBrowseOutputBtn_Click; + main.smaliBrowseInputDirBtn.Click += SmaliBrowseInputDirBtn_Click; + main.comSmaliBtn.Click += ComSmaliBtn_Click; + } + + internal void SmaliBrowseOutputBtn_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.smaliBrowseOutputTxtBox.Text = dlg.SelectedPath; + } + } + + internal void SmaliBrowseInputDirBtn_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.smaliBrowseInputDirTxtBox.Text = dlg.SelectedPath; + } + } + + internal async void ComSmaliBtn_Click(object sender, EventArgs e) + { + if (main.smaliUseOutputChkBox.Checked) + { + if (String.IsNullOrWhiteSpace(main.smaliBrowseOutputTxtBox.Text) || !Directory.Exists(main.smaliBrowseOutputTxtBox.Text)) + { + main.ShowMessage(Language.ErrorSelectedOutputFolderNotExist, MessageBoxIcon.Warning); + return; + } + } + + if (!Directory.Exists(main.smaliBrowseInputDirTxtBox.Text)) + { + main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning); + return; + } + + await main.Smali(Settings.Default.Smali_InputDir); + } + } +} diff --git a/APKToolGUI/Handlers/ZipalignControlEventHandlers.cs b/APKToolGUI/Handlers/ZipalignControlEventHandlers.cs new file mode 100644 index 0000000..fb07e47 --- /dev/null +++ b/APKToolGUI/Handlers/ZipalignControlEventHandlers.cs @@ -0,0 +1,92 @@ +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Ookii.Dialogs.WinForms; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Handlers +{ + class ZipalignControlEventHandlers + { + private static FormMain main; + + public ZipalignControlEventHandlers(FormMain Main) + { + main = Main; + CheckAlignSwitch = !Settings.Default.Zipalign_CheckOnly; + main.checkBox_ZIPALIGN_CheckAlignment.Click += CheckBox_ZIPALIGN_CheckAlignment_CheckedChanged; + main.button_ZIPALIGN_BrowseOutputFile.Click += Button_ZIPALIGN_BrowseOutputFile_Click; + main.button_ZIPALIGN_BrowseInputFile.Click += Button_ZIPALIGN_BrowseInputFile_Click; + main.button_ZIPALIGN_Align.Click += Button_ZIPALIGN_Align_Click; + } + + internal bool CheckAlignSwitch + { + set + { + main.checkBox_ZIPALIGN_Recompress.Enabled = value; + main.checkBox_ZIPALIGN_OverwriteOutputFile.Enabled = value; + } + } + + internal void CheckBox_ZIPALIGN_CheckAlignment_CheckedChanged(object sender, EventArgs e) + { + CheckAlignSwitch = !main.checkBox_ZIPALIGN_CheckAlignment.Checked; + } + + internal void Button_ZIPALIGN_BrowseOutputFile_Click(object sender, EventArgs e) + { + VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog(); + dlg.ShowNewFolderButton = true; + + if (dlg.ShowDialog() == DialogResult.OK) + { + main.textBox_ZIPALIGN_OutputFile.Text = dlg.SelectedPath; + } + } + + internal async void Button_ZIPALIGN_BrowseInputFile_Click(object sender, EventArgs e) + { + using (OpenFileDialog ofd = new OpenFileDialog()) + { + // ofd.Filter = "ZIP archives(*.apk;*.zip;*.jar)|*.apk;*.zip;*.jar"; + ofd.Filter = Language.ZIPArchives + " (*.apk)|*.apk"; + if (File.Exists(main.textBox_ZIPALIGN_InputFile.Text)) + { + ofd.InitialDirectory = Path.GetDirectoryName(main.textBox_ZIPALIGN_InputFile.Text); + ofd.FileName = Path.GetFileName(main.textBox_ZIPALIGN_InputFile.Text); + } + if (ofd.ShowDialog() == DialogResult.OK) + { + main.textBox_ZIPALIGN_InputFile.Text = ofd.FileName; + await main.GetApkInfo(ofd.FileName); + if (!main.checkBox_ZIPALIGN_CheckAlignment.Checked) + main.textBox_ZIPALIGN_OutputFile.Text = String.Format("{0}\\{1}_zipaligned{2}", + Path.GetDirectoryName(ofd.FileName), + Path.GetFileNameWithoutExtension(ofd.FileName), + Path.GetExtension(ofd.FileName)); + } + } + } + + internal async void Button_ZIPALIGN_Align_Click(object sender, EventArgs e) + { + if (!File.Exists(main.textBox_ZIPALIGN_InputFile.Text)) + { + main.ShowMessage(Language.ErrorSelectedFileNotExist, MessageBoxIcon.Warning); + return; + } + + string inputFile = Settings.Default.Zipalign_InputFile; + + await main.Align(inputFile); + } + } +} diff --git a/APKToolGUI/Java/JarProcess.cs b/APKToolGUI/Java/JarProcess.cs index 87ff27b..e2072f0 100644 --- a/APKToolGUI/Java/JarProcess.cs +++ b/APKToolGUI/Java/JarProcess.cs @@ -1,55 +1,111 @@ -using System; +using APKToolGUI.Properties; +using System; using System.Diagnostics; +using System.Linq; +using System.Text; using System.Text.RegularExpressions; namespace Java { public class JarProcess : Process { + public string JavaPath { get; set; } + public string JarPath { get; set; } + public JarProcess(string javaPath, string jarPath) { - this.JavaPath = javaPath; - this.JarPath = jarPath; + JavaPath = javaPath.Equals("java") ? "" : javaPath; + JarPath = jarPath; Initialize(); } private void Initialize() { - this.EnableRaisingEvents = true; - this.StartInfo.FileName = JavaPath; //задаем имя запускного файла - this.StartInfo.UseShellExecute = false; //отключаем использование оболочки, чтобы можно было читать данные вывода - this.StartInfo.RedirectStandardOutput = true; // разрешаем перенаправление данных вывода - this.StartInfo.RedirectStandardError = true; // разрешаем перенаправление данных вывода - this.StartInfo.CreateNoWindow = true; //запрещаем создавать окно для запускаемой программы + EnableRaisingEvents = true; + StartInfo.FileName = JavaPath; + StartInfo.StandardOutputEncoding = Encoding.GetEncoding("UTF-8"); + StartInfo.UseShellExecute = false; + StartInfo.RedirectStandardOutput = true; + StartInfo.RedirectStandardError = true; + StartInfo.CreateNoWindow = true; } - public string JavaPath { get; set; } - public string JarPath { get; set; } - public new bool Start(string args) { - this.EnableRaisingEvents = true; - this.StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args); + EnableRaisingEvents = true; + string customArgs = null; + + if (Settings.Default.UseCustomJVMArgs) + customArgs = Settings.Default.CustomJVMArgs; + + StartInfo.Arguments = String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args); + Debug.WriteLine(String.Format("-jar {0} \"{1}\" {2}", customArgs, JarPath, args)); return base.Start(); } - - public Version GetJavaVersion() + + public string GetString(string args) { - using (Process javaProcess = new Process()) + try + { + using (Process javaProcess = new Process()) + { + javaProcess.StartInfo.FileName = JavaPath; + javaProcess.StartInfo.Arguments = String.Format("-jar \"{0}\" {1}", JarPath, args); + javaProcess.StartInfo.CreateNoWindow = true; + javaProcess.StartInfo.UseShellExecute = false; + javaProcess.StartInfo.RedirectStandardError = true; + javaProcess.StartInfo.RedirectStandardOutput = true; + javaProcess.Start(); + string output = javaProcess.StandardOutput.ReadToEnd(); + javaProcess.WaitForExit(3000); + if (!String.IsNullOrEmpty(output)) + return output; + else + return null; + } + } + catch + { + throw; + } + } + + public string GetJavaVersion() + { + try + { + using (Process javaProcess = new Process()) + { + javaProcess.StartInfo.FileName = JavaPath; + javaProcess.StartInfo.Arguments = "-version"; + javaProcess.StartInfo.CreateNoWindow = true; + javaProcess.StartInfo.UseShellExecute = false; + javaProcess.StartInfo.RedirectStandardError = true; + javaProcess.Start(); + string output = javaProcess.StandardError.ReadToEnd(); + javaProcess.WaitForExit(3000); + + //I use _JAVA_OPTIONS so I want the prompt removed + if (output.Contains("_JAVA_OPTIONS")) + { + int n = 2; + string[] lines = output + .Split(Environment.NewLine.ToCharArray()) + .Skip(n) + .ToArray(); + + output = string.Join(Environment.NewLine, lines); + } + + if (!String.IsNullOrEmpty(output)) + return output.Replace("\r\n\r\n", "\n").Trim(); + else + return null; + } + } + catch { - javaProcess.StartInfo.FileName = this.JavaPath; - javaProcess.StartInfo.Arguments = "-version"; - javaProcess.StartInfo.CreateNoWindow = true; - javaProcess.StartInfo.UseShellExecute = false; - javaProcess.StartInfo.RedirectStandardError = true; - bool started = javaProcess.Start(); - string output = javaProcess.StandardError.ReadToEnd(); - javaProcess.WaitForExit(3000); - System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(output, @"^java version ""(\d+)\.(\d+)\.(\d+)_(\d+)"".$", System.Text.RegularExpressions.RegexOptions.Multiline); - if (match.Groups.Count == 5) - return new Version(Convert.ToInt32(match.Groups[1].Value), Convert.ToInt32(match.Groups[2].Value), Convert.ToInt32(match.Groups[3].Value), Convert.ToInt32(match.Groups[4].Value)); - else - return null; + return null; } } } diff --git a/APKToolGUI/Java/JavaUtils.cs b/APKToolGUI/Java/JavaUtils.cs index f37eedd..194f787 100644 --- a/APKToolGUI/Java/JavaUtils.cs +++ b/APKToolGUI/Java/JavaUtils.cs @@ -1,10 +1,48 @@ -using System; +using APKToolGUI; +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using System; using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Windows.Forms; +using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System; namespace Java { public class JavaUtils { + public static string GetSystemVariable() + { + try + { + using (Process javaProcess = new Process()) + { + javaProcess.StartInfo.FileName = "where"; + javaProcess.StartInfo.Arguments = "java"; + javaProcess.StartInfo.CreateNoWindow = true; + javaProcess.StartInfo.UseShellExecute = false; + javaProcess.StartInfo.RedirectStandardError = true; + javaProcess.StartInfo.RedirectStandardOutput = true; + javaProcess.Start(); + string output = javaProcess.StandardOutput.ReadToEnd(); + javaProcess.WaitForExit(); + if (!String.IsNullOrEmpty(output)) + { + string[] paths = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string path in paths) + { + return path; + } + } + } + } + catch + { + return null; + } + return null; + } private static string GetJavaInstallationPath() { string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME"); @@ -45,5 +83,26 @@ public static string SearchPath() else return null; } + + public static string GetJavaPath() + { + if (Settings.Default.UseCustomJavaExe) + { + return Settings.Default.JavaExe; + } + else + { + string javaExec = JavaUtils.GetSystemVariable(); + if (String.IsNullOrEmpty(javaExec)) + { + javaExec = JavaUtils.SearchPath(); + if (File.Exists(javaExec)) + { + return javaExec; + } + } + return javaExec; + } + } } } diff --git a/APKToolGUI/Language.Designer.cs b/APKToolGUI/Language.Designer.cs deleted file mode 100644 index d8f4384..0000000 --- a/APKToolGUI/Language.Designer.cs +++ /dev/null @@ -1,333 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программой. -// Исполняемая версия:4.0.30319.34209 -// -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. -// -//------------------------------------------------------------------------------ - -namespace APKToolGUI { - using System; - - - /// - /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. - /// - // Этот класс создан автоматически классом StronglyTypedResourceBuilder - // с помощью такого средства, как ResGen или Visual Studio. - // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen - // с параметром /str или перестройте свой проект VS. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Language { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Language() { - } - - /// - /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. - /// - [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("APKToolGUI.Language", typeof(Language).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Перезаписывает свойство CurrentUICulture текущего потока для всех - /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Ищет локализованную строку, похожую на About. - /// - internal static string About { - get { - return ResourceManager.GetString("About", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Apktool version. - /// - internal static string APKToolVersion { - get { - return ResourceManager.GetString("APKToolVersion", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Build. - /// - internal static string Build { - get { - return ResourceManager.GetString("Build", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Check for update. - /// - internal static string CheckForUpdate { - get { - return ResourceManager.GetString("CheckForUpdate", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Debug mode. - /// - internal static string DebugMode { - get { - return ResourceManager.GetString("DebugMode", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Decode. - /// - internal static string Decode { - get { - return ResourceManager.GetString("Decode", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Done. - /// - internal static string Done { - get { - return ResourceManager.GetString("Done", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Do you realy want to install context menu?. - /// - internal static string DoYouRealyWantToInstallCM { - get { - return ResourceManager.GetString("DoYouRealyWantToInstallCM", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Do you realy want to remove context menu?. - /// - internal static string DoYouRealyWantToRemoveCM { - get { - return ResourceManager.GetString("DoYouRealyWantToRemoveCM", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Java is not found. Do you want to select custom location?. - /// - internal static string DoYouWantToSelectJavaLocation { - get { - return ResourceManager.GetString("DoYouWantToSelectJavaLocation", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Error. - /// - internal static string Error { - get { - return ResourceManager.GetString("Error", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Java is not installed or is installed incorrectly. The program will be closed.. - /// - internal static string ErrorJavaDetect { - get { - return ResourceManager.GetString("ErrorJavaDetect", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Error reading settings!. - /// - internal static string ErrorReadSettings { - get { - return ResourceManager.GetString("ErrorReadSettings", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Error saving settings!. - /// - internal static string ErrorSaveSettings { - get { - return ResourceManager.GetString("ErrorSaveSettings", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Exit. - /// - internal static string Exit { - get { - return ResourceManager.GetString("Exit", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на File. - /// - internal static string File { - get { - return ResourceManager.GetString("File", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на File not found. - /// - internal static string FileNotFound { - get { - return ResourceManager.GetString("FileNotFound", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Folder is not exist. - /// - internal static string FolderNotExist { - get { - return ResourceManager.GetString("FolderNotExist", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Help. - /// - internal static string Help { - get { - return ResourceManager.GetString("Help", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Install framework. - /// - internal static string InstallFramework { - get { - return ResourceManager.GetString("InstallFramework", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на For the changes to take effect you must restart the program. You want to do it now?. - /// - internal static string NeedRestart { - get { - return ResourceManager.GetString("NeedRestart", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Settings. - /// - internal static string Settings { - get { - return ResourceManager.GetString("Settings", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Sign. - /// - internal static string Sign { - get { - return ResourceManager.GetString("Sign", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на System language. - /// - internal static string SystemLanguage { - get { - return ResourceManager.GetString("SystemLanguage", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на New version is available. Do you want to update?. - /// - internal static string UpdateNewVersion { - get { - return ResourceManager.GetString("UpdateNewVersion", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на No update is available.. - /// - internal static string UpdateNoUpdates { - get { - return ResourceManager.GetString("UpdateNoUpdates", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Decoding folder not selected!. - /// - internal static string WarningDecodingFolderNotSelected { - get { - return ResourceManager.GetString("WarningDecodingFolderNotSelected", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на File for decoding not selected!. - /// - internal static string WarningFileForDecodingNotSelected { - get { - return ResourceManager.GetString("WarningFileForDecodingNotSelected", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на File for signing not selected!. - /// - internal static string WarningFileForSigningNotSelected { - get { - return ResourceManager.GetString("WarningFileForSigningNotSelected", resourceCulture); - } - } - - /// - /// Ищет локализованную строку, похожую на Framework not selected!. - /// - internal static string WarningFrameworkNotSelected { - get { - return ResourceManager.GetString("WarningFrameworkNotSelected", resourceCulture); - } - } - } -} diff --git a/APKToolGUI/Languages/Language.Designer.cs b/APKToolGUI/Languages/Language.Designer.cs new file mode 100644 index 0000000..eeac4b0 --- /dev/null +++ b/APKToolGUI/Languages/Language.Designer.cs @@ -0,0 +1,1341 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace APKToolGUI.Languages { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // 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 Language { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Language() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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("APKToolGUI.Languages.Language", typeof(Language).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Aborted. + /// + internal static string Aborted { + get { + return ResourceManager.GetString("Aborted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to About. + /// + internal static string About { + get { + return ResourceManager.GetString("About", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Aligning. + /// + internal static string Aligning { + get { + return ResourceManager.GetString("Aligning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to All done!. + /// + internal static string AllDone { + get { + return ResourceManager.GetString("AllDone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to AndroidManifest.xml does not exist. + /// + internal static string AndroidManifestNotExist { + get { + return ResourceManager.GetString("AndroidManifestNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to APK Selected:. + /// + internal static string APKSelected { + get { + return ResourceManager.GetString("APKSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apktool version. + /// + internal static string APKToolVersion { + get { + return ResourceManager.GetString("APKToolVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Baksmali. + /// + internal static string Baksmali { + get { + return ResourceManager.GetString("Baksmali", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build. + /// + internal static string Build { + get { + return ResourceManager.GetString("Build", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Are you sure you want to cancel the process?. + /// + internal static string CancelProcess { + get { + return ResourceManager.GetString("CancelProcess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Can't detect APKEditor version. + /// + internal static string CantDetectApkeditorVersion { + get { + return ResourceManager.GetString("CantDetectApkeditorVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Can't detect apktool version.. + /// + internal static string CantDetectApktoolVersion { + get { + return ResourceManager.GetString("CantDetectApktoolVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Changed target SDK to 29. + /// + internal static string ChangedTargetSdkTo29 { + get { + return ResourceManager.GetString("ChangedTargetSdkTo29", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Check for update. + /// + internal static string CheckForUpdate { + get { + return ResourceManager.GetString("CheckForUpdate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to It is required to clear framework cache after changing Apktool version to avoid unexpected errors. Do you want to clear it now?. + /// + internal static string ClearFrameworkPrompt { + get { + return ResourceManager.GetString("ClearFrameworkPrompt", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clearing Framework. + /// + internal static string ClearingFramework { + get { + return ResourceManager.GetString("ClearingFramework", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clearing temp folder. + /// + internal static string ClearTempFolder { + get { + return ResourceManager.GetString("ClearTempFolder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Compile APK. + /// + internal static string CompileApk { + get { + return ResourceManager.GetString("CompileApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Assemble DEX. + /// + internal static string CompileDex { + get { + return ResourceManager.GetString("CompileDex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Compiling dex. + /// + internal static string CompilingDex { + get { + return ResourceManager.GetString("CompilingDex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Compiling successfully completed. Output directory "{0}". + /// + internal static string CompilingSuccessfullyCompleted { + get { + return ResourceManager.GetString("CompilingSuccessfullyCompleted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Are you sure you want to kill ADB server? You might need to reconnect your device or restart emulator. + /// + internal static string ConfirmKillingAdbServer { + get { + return ResourceManager.GetString("ConfirmKillingAdbServer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Copy file "{0}" to "{1}". + /// + internal static string CopyFileTo { + get { + return ResourceManager.GetString("CopyFileTo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Copy file "{0}" to temp directory "{1}". + /// + internal static string CopyFileToTemp { + get { + return ResourceManager.GetString("CopyFileToTemp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Copy decompiled apk folder "{0}" to temp directory "{1}". + /// + internal static string CopyFolderToTemp { + get { + return ResourceManager.GetString("CopyFolderToTemp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Creating Unsigned APK. + /// + internal static string CreateUnsignedApk { + get { + return ResourceManager.GetString("CreateUnsignedApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Debug mode. + /// + internal static string DebugMode { + get { + return ResourceManager.GetString("DebugMode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decode. + /// + internal static string Decode { + get { + return ResourceManager.GetString("Decode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected decompilation directory could not be created because contains invalid characters.. + /// + internal static string DecodeCouldNotCreate { + get { + return ResourceManager.GetString("DecodeCouldNotCreate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Destination directory "{0}" already exists. Enable "Force delete destination directory" if you want to overwrite it.. + /// + internal static string DecodeDesDirExists { + get { + return ResourceManager.GetString("DecodeDesDirExists", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompilation directory not selected.. + /// + internal static string DecodeDirNotSelected { + get { + return ResourceManager.GetString("DecodeDirNotSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected framework directory does not exist.. + /// + internal static string DecodeSelectedFrameworkNotExist { + get { + return ResourceManager.GetString("DecodeSelectedFrameworkNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decoding. + /// + internal static string Decoding { + get { + return ResourceManager.GetString("Decoding", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompile APK. + /// + internal static string DecompileApk { + get { + return ResourceManager.GetString("DecompileApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompiled APK directory does not exist. + /// + internal static string DecompiledAPKNotExist { + get { + return ResourceManager.GetString("DecompiledAPKNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Disassemble DEX. + /// + internal static string DecompileDex { + get { + return ResourceManager.GetString("DecompileDex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompiling all APK files. + /// + internal static string DecompilingAllApkFiles { + get { + return ResourceManager.GetString("DecompilingAllApkFiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompiling dex. + /// + internal static string DecompilingDex { + get { + return ResourceManager.GetString("DecompilingDex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompiling successfully completed. Output directory "{0}".. + /// + internal static string DecompilingSuccessfullyCompleted { + get { + return ResourceManager.GetString("DecompilingSuccessfullyCompleted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Delete file "{0}". + /// + internal static string DeleteFile { + get { + return ResourceManager.GetString("DeleteFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Deleting folder: {0}. + /// + internal static string DeletingFolder { + get { + return ResourceManager.GetString("DeletingFolder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} detected as base. + /// + internal static string DetectedAsBase { + get { + return ResourceManager.GetString("DetectedAsBase", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} detected as split. + /// + internal static string DetectedAsSplit { + get { + return ResourceManager.GetString("DetectedAsSplit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Device is not selected. + /// + internal static string DeviceNotSelected { + get { + return ResourceManager.GetString("DeviceNotSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Device selected "{0}". + /// + internal static string DeviceSelected { + get { + return ResourceManager.GetString("DeviceSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} devices found. + /// + internal static string DevicesFound { + get { + return ResourceManager.GetString("DevicesFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The directory "{0}" does not exist. + /// + internal static string DirectoryNotExist { + get { + return ResourceManager.GetString("DirectoryNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Directory "{0}" does not exist. + /// + internal static string DirNotExist { + get { + return ResourceManager.GetString("DirNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Done. + /// + internal static string Done { + get { + return ResourceManager.GetString("Done", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do you realy want to install context menu?. + /// + internal static string DoYouRealyWantToInstallCM { + get { + return ResourceManager.GetString("DoYouRealyWantToInstallCM", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do you realy want to remove context menu?. + /// + internal static string DoYouRealyWantToRemoveCM { + get { + return ResourceManager.GetString("DoYouRealyWantToRemoveCM", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You are running as administrator. Drag & drop may not be supported. + /// + internal static string DragDropNotSupported { + get { + return ResourceManager.GetString("DragDropNotSupported", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Drag & drop is supported. + /// + internal static string DragDropSupported { + get { + return ResourceManager.GetString("DragDropSupported", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error. + /// + internal static string Error { + get { + return ResourceManager.GetString("Error", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error clearing framework. + /// + internal static string ErrorClearingFw { + get { + return ResourceManager.GetString("ErrorClearingFw", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Compiling failed. + /// + internal static string ErrorCompiling { + get { + return ResourceManager.GetString("ErrorCompiling", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decompiling failed. + /// + internal static string ErrorDecompiling { + get { + return ResourceManager.GetString("ErrorDecompiling", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error entering framework tag.. + /// + internal static string ErrorEnteringFrameworkTag { + get { + return ResourceManager.GetString("ErrorEnteringFrameworkTag", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There was an error getting APK infomation. + /// + internal static string ErrorGettingApkInfo { + get { + return ResourceManager.GetString("ErrorGettingApkInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Java is not installed or is installed incorrectly. Please install Java or set custom location in Settings. + /// + internal static string ErrorJavaDetect { + get { + return ResourceManager.GetString("ErrorJavaDetect", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Merging failed. + /// + internal static string ErrorMerging { + get { + return ResourceManager.GetString("ErrorMerging", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This directory is not an Android package. + /// + internal static string ErrorNotAnApk { + get { + return ResourceManager.GetString("ErrorNotAnApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error reading settings!. + /// + internal static string ErrorReadSettings { + get { + return ResourceManager.GetString("ErrorReadSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error saving settings!. + /// + internal static string ErrorSaveSettings { + get { + return ResourceManager.GetString("ErrorSaveSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected file does not exist.. + /// + internal static string ErrorSelectedFileNotExist { + get { + return ResourceManager.GetString("ErrorSelectedFileNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected folder does not exist.. + /// + internal static string ErrorSelectedFolderNotExist { + get { + return ResourceManager.GetString("ErrorSelectedFolderNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected output folder does not exist.. + /// + internal static string ErrorSelectedOutputFolderNotExist { + get { + return ResourceManager.GetString("ErrorSelectedOutputFolderNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error selecting framework directory.. + /// + internal static string ErrorSelectingFrameworkDirectory { + get { + return ResourceManager.GetString("ErrorSelectingFrameworkDirectory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error selecting framework file. The file does not exist.. + /// + internal static string ErrorSelectingFrameworkFile { + get { + return ResourceManager.GetString("ErrorSelectingFrameworkFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Signing failed.. + /// + internal static string ErrorSigning { + get { + return ResourceManager.GetString("ErrorSigning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error update checking:. + /// + internal static string ErrorUpdateChecking { + get { + return ResourceManager.GetString("ErrorUpdateChecking", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Failed to parse version. + /// + internal static string ErrorVersionParsing { + get { + return ResourceManager.GetString("ErrorVersionParsing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Zipaligning failed. + /// + internal static string ErrorZipalign { + get { + return ResourceManager.GetString("ErrorZipalign", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Executable file. + /// + internal static string ExecutableFile { + get { + return ResourceManager.GetString("ExecutableFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Exit. + /// + internal static string Exit { + get { + return ResourceManager.GetString("Exit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Extracting all APK files. + /// + internal static string ExtractingAllApkFiles { + get { + return ResourceManager.GetString("ExtractingAllApkFiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File. + /// + internal static string File { + get { + return ResourceManager.GetString("File", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File is not found. + /// + internal static string FileNotFound { + get { + return ResourceManager.GetString("FileNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fixed AndroidManifest.xml. + /// + internal static string FixAndroidManifest { + get { + return ResourceManager.GetString("FixAndroidManifest", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fixed apktool.yml. + /// + internal static string FixApktoolYml { + get { + return ResourceManager.GetString("FixApktoolYml", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder does not exist. + /// + internal static string FolderNotExist { + get { + return ResourceManager.GetString("FolderNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Framework cache cleared. + /// + internal static string FrameworkCacheCleared { + get { + return ResourceManager.GetString("FrameworkCacheCleared", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Framework directory does not exist. + /// + internal static string FrameworkDirNotExist { + get { + return ResourceManager.GetString("FrameworkDirNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error. Framework installation is not started.. + /// + internal static string FrameworkInstallationNotStarted { + get { + return ResourceManager.GetString("FrameworkInstallationNotStarted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Framework has been installed successfully. + /// + internal static string FrameworkInstalled { + get { + return ResourceManager.GetString("FrameworkInstalled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to View APK Info. + /// + internal static string GetApkInfo { + get { + return ResourceManager.GetString("GetApkInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Getting devices.... + /// + internal static string GettingDevices { + get { + return ResourceManager.GetString("GettingDevices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Help. + /// + internal static string Help { + get { + return ResourceManager.GetString("Help", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Input directory: {0}. + /// + internal static string InputDirectory { + get { + return ResourceManager.GetString("InputDirectory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Input file: {0}. + /// + internal static string InputFile { + get { + return ResourceManager.GetString("InputFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to APK Installation failed. + /// + internal static string InstallApkFailed { + get { + return ResourceManager.GetString("InstallApkFailed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to APK Installation successfully. + /// + internal static string InstallApkSuccessful { + get { + return ResourceManager.GetString("InstallApkSuccessful", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Install framework. + /// + internal static string InstallFramework { + get { + return ResourceManager.GetString("InstallFramework", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installing APK. + /// + internal static string InstallingApk { + get { + return ResourceManager.GetString("InstallingApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installing APK "{0}". + /// + internal static string InstallingApkPath { + get { + return ResourceManager.GetString("InstallingApkPath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installing framework. + /// + internal static string InstallingFramework { + get { + return ResourceManager.GetString("InstallingFramework", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Main activity found in "{0}". + /// + internal static string MainActivityFound { + get { + return ResourceManager.GetString("MainActivityFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Could not find MainActivity. Please find it manually. + /// + internal static string MainActivityNotFoundPleaseFindManually { + get { + return ResourceManager.GetString("MainActivityNotFoundPleaseFindManually", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Merge finished. Moving directory to "{0}". + /// + internal static string MergeFinishedMoveDir { + get { + return ResourceManager.GetString("MergeFinishedMoveDir", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Merging APK. + /// + internal static string MergingApk { + get { + return ResourceManager.GetString("MergingApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Merging APK using APKEditor.jar. + /// + internal static string MergingApkEditor { + get { + return ResourceManager.GetString("MergingApkEditor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to META-INF folder does not exist. Skipped. + /// + internal static string MetainfNotExist { + get { + return ResourceManager.GetString("MetainfNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Move temp folder "{0}" to output directory "{1}". + /// + internal static string MoveTempApkFileToOutput { + get { + return ResourceManager.GetString("MoveTempApkFileToOutput", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Move temp apk "{0}" to output directory "{1}". + /// + internal static string MoveTempApkToOutput { + get { + return ResourceManager.GetString("MoveTempApkToOutput", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Moving base directory to "{0}". + /// + internal static string MovingBasedirectory { + get { + return ResourceManager.GetString("MovingBasedirectory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to For the changes to take effect you must restart the program. You want to do it now?. + /// + internal static string NeedRestart { + get { + return ResourceManager.GetString("NeedRestart", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No devices found. Make sure your device is connected to the computer with the adb debugging turned on. If you use an emulator, restart it and wait until it boot up. + /// + internal static string NoDevicesFound { + get { + return ResourceManager.GetString("NoDevicesFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This folder is not a decompiled APK. + /// + internal static string NotDecompiledApk { + get { + return ResourceManager.GetString("NotDecompiledApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This folder is not a decompiled DEX. + /// + internal static string NotDecompiledDex { + get { + return ResourceManager.GetString("NotDecompiledDex", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Open compile output folder. + /// + internal static string OpenComFolder { + get { + return ResourceManager.GetString("OpenComFolder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Open decompile output folder. + /// + internal static string OpenDecFolder { + get { + return ResourceManager.GetString("OpenDecFolder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parsing APK Info.... + /// + internal static string ParsingApkInfo { + get { + return ResourceManager.GetString("ParsingApkInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Please wait.... + /// + internal static string PleaseWait { + get { + return ResourceManager.GetString("PleaseWait", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Removed all ApkTool dummies. + /// + internal static string RemoveApkToolDummies { + get { + return ResourceManager.GetString("RemoveApkToolDummies", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Required files are missing. + /// + internal static string RequiredFilesMissing { + get { + return ResourceManager.GetString("RequiredFilesMissing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Restart is required to apply changes. Do you want to restart the application?. + /// + internal static string RestartApplicationPrompt { + get { + return ResourceManager.GetString("RestartApplicationPrompt", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string SetLanguageRestartApplication { + get { + return ResourceManager.GetString("SetLanguageRestartApplication", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Settings. + /// + internal static string Settings { + get { + return ResourceManager.GetString("Settings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sign. + /// + internal static string Sign { + get { + return ResourceManager.GetString("Sign", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sign APK. + /// + internal static string SignApk { + get { + return ResourceManager.GetString("SignApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Signing. + /// + internal static string Signing { + get { + return ResourceManager.GetString("Signing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Input file not found.. + /// + internal static string SignInputFileNotFound { + get { + return ResourceManager.GetString("SignInputFileNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Private key not found.. + /// + internal static string SignPrivateKeyNotFound { + get { + return ResourceManager.GetString("SignPrivateKeyNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Public key not found.. + /// + internal static string SignPublicKeyNotFound { + get { + return ResourceManager.GetString("SignPublicKeyNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Signing successfully completed. File saved to "{0}".. + /// + internal static string SignSuccessfullyCompleted { + get { + return ResourceManager.GetString("SignSuccessfullyCompleted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Smali. + /// + internal static string Smali { + get { + return ResourceManager.GetString("Smali", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Split APK is not selected. + /// + internal static string SplitApkNotFound { + get { + return ResourceManager.GetString("SplitApkNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to System language. + /// + internal static string SystemLanguage { + get { + return ResourceManager.GetString("SystemLanguage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Temp directory: "{0}". + /// + internal static string TempDirectory { + get { + return ResourceManager.GetString("TempDirectory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Text file. + /// + internal static string TextFile { + get { + return ResourceManager.GetString("TextFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Time ended: {0}. + /// + internal static string TimeEnded { + get { + return ResourceManager.GetString("TimeEnded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Time started: {0}. + /// + internal static string TimeStarted { + get { + return ResourceManager.GetString("TimeStarted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to New version is available. Do you want to update?. + /// + internal static string UpdateNewVersion { + get { + return ResourceManager.GetString("UpdateNewVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No update is available.. + /// + internal static string UpdateNoUpdates { + get { + return ResourceManager.GetString("UpdateNoUpdates", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Decoding folder not selected!. + /// + internal static string WarningDecodingFolderNotSelected { + get { + return ResourceManager.GetString("WarningDecodingFolderNotSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File for decoding not selected!. + /// + internal static string WarningFileForDecodingNotSelected { + get { + return ResourceManager.GetString("WarningFileForDecodingNotSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File for signing not selected!. + /// + internal static string WarningFileForSigningNotSelected { + get { + return ResourceManager.GetString("WarningFileForSigningNotSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Framework not selected!. + /// + internal static string WarningFrameworkNotSelected { + get { + return ResourceManager.GetString("WarningFrameworkNotSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Zipalign. + /// + internal static string Zipalign { + get { + return ResourceManager.GetString("Zipalign", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Zipalign APK. + /// + internal static string ZipalignApk { + get { + return ResourceManager.GetString("ZipalignApk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Zipalign successfully completed. File saved to "{0}". + /// + internal static string ZipalignFileSavedTo { + get { + return ResourceManager.GetString("ZipalignFileSavedTo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ZIP archives. + /// + internal static string ZIPArchives { + get { + return ResourceManager.GetString("ZIPArchives", resourceCulture); + } + } + } +} diff --git a/APKToolGUI/Languages/Language.de.resx b/APKToolGUI/Languages/Language.de.resx new file mode 100644 index 0000000..346a7b1 --- /dev/null +++ b/APKToolGUI/Languages/Language.de.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Über + + + Apktool-Version + + + Auf Aktualisierung prüfen + + + Debug-Modus + + + Beenden + + + Datei + + + Hilfe + + + Einstellungen + + + Java ist nicht oder nicht korrekt installiert. Java installieren oder einen eigenen Speicherort in den Einstellungen festlegen. + + + Einstellungen für das Fehlerlesen + + + Eine neue Version ist verfügbar. Möchtest du aktualisieren? + + + Aktualisierung verfügbar + + + Dekompilierungsordner nicht ausgewählt! + + + Datei zum Dekompilieren nicht ausgewählt! + + + Datei zum Signieren nicht ausgewählt! + + + Framework nicht ausgewählt! + + + Fehler beim Einstellungen speichern! + + + Damit die Änderungen wirksam werden, musst du das Programm neu starten. Willst du es jetzt tun? + + + Datei wird nicht gefunden + + + Der Ordner existiert nicht + + + Fehler + + + Build + + + Dekompilieren + + + Framework installieren + + + Signieren + + + Systemsprache + + + Möchtest du das Kontextmenü wirklich installieren? + + + Möchtest du das Kontextmenü wirklich entfernen? + + + Fertig + + + Apktool-Version wird nicht erkannt + + + Dekompilieren erfolgreich abgeschlossen. Ausgabeverzeichnis "{0}" + + + Fehlerhafte Aktualisierungsprüfung: + + + Signieren erfolgreich abgeschlossen. Datei gespeichert unter "{0}" + + + Abgleichen + + + Kompilieren fehlgeschlagen + + + Fehler bei der Eingabe des Framework-Tags + + + Ausgewählte Datei nicht vorhanden + + + Fehler bei Auswahl des Framework-Verzeichnisses + + + Fehler bei Auswahl der Framework-Datei. Datei existiert nicht. + + + Signieren fehlgeschlagen + + + Fehler - Framework-Installation wird nicht gestartet + + + Framework installieren + + + Signieren + + + Eingabedatei nicht gefunden + + + Privater Schlüssel - nicht gefunden + + + Öffentlicher Schlüssel - nicht gefunden + + + ZIP archivieren + + + Ausgewähltes Dekompilierungsverzeichnis konnte nicht erstellt werden, da es ungültige Zeichen enthält. + + + Dekompilierungsverzeichnis nicht ausgewählt + + + Ausgewähltes Framework-Verzeichnis nicht vorhanden + + + Dekompilieren + + + Dekompilieren fehlgeschlagen + + + Ausführbare Datei + + + Ziel-SDK auf 29 geändert + + + Version parsen nicht möglich + + + AndroidManifest.xml repariert + + + Alle Apk-Tool-Dummys entfernt + + + APK ausgewählt: + + + Ausgewählter Ordner nicht vorhanden + + + AndroidManifest.xml nicht vorhanden + + + Dekompiliertes APK-Verzeichnis existiert nicht + + + Hauptaktivität gefunden in "{0}" + + + MainActivity konnte nicht gefunden werden, manuell suchen. + + + Framework bereinigen + + + Kompilieren erfolgreich abgeschlossen. Ausgabeverzeichnis "{0}" + + + Zipaligning fehlgeschlagen + + + Zipalign erfolgreich abgeschlossen. Datei gespeichert unter "{0}" + + + Framework-Fehler bereinigen + + + Framework Fehlerbereinigung + + + Alles fertig! + + + Framework erfolgreich installiert + + + Framework-Verzeichnis nicht vorhanden + + + Dex dekompilieren + + + Ausgewählter Ausgabeordner nicht vorhanden + + + Dex dekompilieren + + + Wird als Administrator ausgeführt. Drag & Drop wird möglicherweise nicht unterstützt + + + Drag & Drop wird unterstützt + + + Verzeichnis ist kein Android-Paket + + + Baksmali + + + Smali + + + Zipalign + + + APK kompilieren + + + DEX kompilieren + + + APK dekompilieren + + + DEX dekompilieren + + + APK-Info anzeigen + + + Ordner ist keine dekompilierte APK + + + Ordner ist kein dekompilierte DEX + + + Erforderliche Dateien fehlen + + + APK signieren + + + Textdatei + + + Zipalign APK + + + Unsignierte APK erstellen + + + Ordner META-INF existiert nicht. Übersprungen + + + Fehler beim Abrufen von APK-Informationen + + + Eingabeverzeichnis: {0} + + + Eingabedatei: {0} + + + Datei löschen "{0}" + + + Datei "{0}" in temporäres Verzeichnis "{1}" kopieren + + + Dekompilierten Apk-Ordner "{0}" in temporäre Verzeichnis "{1}" kopieren + + + Zielverzeichnis "{0}" existiert bereits. Aktivieren "Löschen des Zielverzeichnisses erzwingen", wenn du es überschreiben möchtest. + + + Temporären Ordner "{0}" in das Ausgabeverzeichnis "{1}" verschieben + + + Temporäre Apk "{0}" in das Ausgabeverzeichnis "{1}" verschieben + + + APK-Informationen parsen … + + + Ein Neustart ist erforderlich, um die Änderungen zu übernehmen. Möchtest du die Anwendung neu starten? + + + Alle APK-Dateien dekompilieren + + + {0} als Basis erkannt + + + {0} als gesplittet erkannt + + + Alle APK-Dateien extrahieren + + + Zusammenführen abgeschlossen. Verzeichnis verschieben nach "{0}" + + + APK zusammenführen + + + Basisverzeichnis verschieben nach "{0}" + + + Verzeichnis "{0}" existiert nicht + + + Temp-Verzeichnis: "{0}" + + + Zusammenführen fehlgeschlagen + + + APK mit APKEditor.jar zusammenführen + + + Abgebrochen + + + Sicher, dass du den Vorgang abbrechen willst? + + + Geräte erkennen … + + + Bitte warten … + + + Sicher, dass du den ADB-Server beenden willst? Möglicherweise musst du dein Gerät neu anschließen oder den Emulator neu starten. + + + Kein Gerät ausgewählt + + + Gerät ausgewählt "{0}" + + + {0} Gerät gefunden + + + APK Installation fehlgeschlagen + + + APK Installation erfolgreich + + + APK installieren + + + APK installieren "{0}" + + + Keine Geräte gefunden. Vergewissere dich, dass dein Gerät mit dem Computer verbunden ist und das ADB-Debugging aktiviert ist. Wenn du einen Emulator verwendest, starte ihn neu und warte, bis er hochgefahren ist + + + Beendet: {0} + + + Gestartet: {0} + + + Es ist erforderlich, den Framework-Cache nach einer Änderung der Apktool-Version zu löschen, um unerwartete Fehler zu vermeiden. Möchtest du ihn jetzt löschen? + + + Temp-Ordner löschen + + + Ordner löschen: {0} + + + Verzeichnis "{0}" existiert nicht + + + Kompilier-Ausgabeordner öffnen + + + Dekompilier-Ausgabeordner öffnen + + + Apktool.yml repariert + + + Datei "{0}" nach "{1}" kopieren + + + Split-APK nicht ausgewählt + + + APKEditor Version wird nicht erkannt + + + Sprache installiert. Programm neu starten? + + \ No newline at end of file diff --git a/APKToolGUI/Languages/Language.hu.resx b/APKToolGUI/Languages/Language.hu.resx new file mode 100644 index 0000000..614566e --- /dev/null +++ b/APKToolGUI/Languages/Language.hu.resx @@ -0,0 +1,516 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rólunk + + + Apktool verzió + + + Frissítés keresése + + + Hibakereső mód + + + Kilépés + + + Fájl + + + Súgó + + + Beállítások + + + Java nincs vagy rosszul van telepítve. Telepítse a Javát vagy adja meg az egyéni helyét a Beállításokban + + + Hiba a beállítások olvasásakor! + + + Új verzió érhető el. Szeretne frissíteni? + + + Nincs frissítés. + + + Dekódolási mappa nincs kiválasztva! + + + A dekódolandó fájl nincs kiválasztva! + + + Az aláírni szánt fájl nincs kiválasztva! + + + A framework nincs kiválasztva! + + + Hiba a beállítások mentése során! + + + A módosítások érvényesítéséhez újra kell indítania a programot. Most akarja megtenni? + + + A fájl nem található + + + A mappa nem létezik + + + Hiba + + + Build + + + Dekódolás + + + A keretrendszer telepítése + + + Aláírás + + + Rendszer nyelve + + + Tényleg telepíteni szeretné a kontextus menüt? + + + Tényleg el akarja távolítani a kontextus menüt? + + + Kész + + + Nem érzékeli az apktool verzióját. + + + A dekompilálás sikeresen befejeződött. Kimeneti könyvtár "{0}". + + + Frissítés ell. hiba: + + + Az aláírás sikeresen befejeződött. Fájl mentve: "{0}". + + + Igazítás + + + A kódolás sikertelen + + + Hiba a framework címke bevitelében. + + + A kiválasztott fájl nem létezik. + + + Hiba a keretrendszer könyvtár kiválasztásában. + + + Hiba a keretrendszer fájl kiválasztásában. A fájl nem létezik. + + + Az aláírás sikertelen. + + + Hiba. A keretrendszer telepítése nem indult el. + + + A keretrendszer telepítése + + + Aláírás + + + A bemeneti fájl nem található. + + + Privát kulcs nem található. + + + Nyilvános kulcs nem található. + + + ZIP archívumok + + + A kiválasztott dekompilációs könyvtárat nem lehetett létrehozni, mert érvénytelen karaktereket tartalmaz. + + + A dekompilációs könyvtár nincs kiválasztva. + + + A kiválasztott keretkönyvtár nem létezik. + + + Dekódolás + + + A dekompilálás sikertelen + + + Végrehajtható fájl + + + A cél SDK 29-re változott + + + Nem sikerült elemezni a verziót + + + Javított AndroidManifest.xml + + + Eltávolítottuk az összes ApkTool dummie-t + + + APK kiválasztva: + + + A kiválasztott mappa nem létezik. + + + Az AndroidManifest.xml nem létezik + + + A dekompilált APK könyvtár nem létezik + + + A MainActivity itt, "{0}" található + + + Nem találta a MainActivity-t. Kérjük keresse meg manuálisan + + + Keretrendszer tisztítás + + + Az összeállítás sikeresen befejeződött. Kimeneti könyvtár "{0}" + + + A Zipalign nem sikerült + + + A Zipalign sikeresen befejeződött. Fájl ide mentve "{0}" + + + Keretrendszer törlési hiba + + + A keretrendszer gyorsítótára törölve + + + Minden kész! + + + A keretrendszer sikeresen települt + + + A keretrendszer könyvtár nem létezik + + + Dex dekódolása + + + A kiválasztott kimeneti mappa nem létezik. + + + Dex összeállítása + + + Rendszergazdaként fut. A Húzd & Dobd nem támogatott + + + A Húzd & Dobd támogatott + + + Ez a könyvtár nem egy Android csomag + + + Baksmali + + + Smali + + + Zipalign + + + APK összeállítása + + + DEX összeszerelése + + + APK dekompilálása + + + DEX szétszerelése + + + APK infó beszerzése + + + Ez a mappa nem egy dekompilált APK + + + Ez a mappa nem dekompilált DEX + + + Szükséges fájlok hiányoznak + + + APK aláírása + + + Szöveg fájl + + + APK Zipalign + + + Aláírás nélküli APK létrehozása + + + A META-INF mappa nem létezik. Kihagyva + + + Hiba történt az APK-infó megszerzésében + + + Bemeneti könyvtár: {0} + + + Bemeneti fájl: {0} + + + "{0}" fájl törlése + + + "{0}" fájl másolása "{1}" ideiglenes könyvtárba. + + + Dekompilált apk mappa "{0}" másolása "{1}" ideiglenes könyvtárba. + + + A "{0}" célkönyvtár már létezik. Ha felül szeretné írni, engedélyezze a "Célkönyvtár kényszerített törlésének" beállítását. + + + A "{0}" ideiglenes mappa áthelyezése a "{1}" kimeneti könyvtárba + + + A(z) "{0}" ideiglenes apk áthelyezése a "{1}" kimeneti könyvtárba + + + APK információk elemzése... + + + Az összes APK fájl visszafejtése + + + {0} bázisként észlelve + + + {0} részeként észlelve + + + Az összes APK fájl kicsomagolása + + + Egyesítés kész. Könyvtár áthelyezése ide: "{0}" + + + APK egyesítése + + + Bázis könyvtár áthelyezése ide: "{0}" + + + A(z) "{0}" könyvtár nem létezik + + + Temp könyvtár: "{0}" + + + Az ˘egyesítés nem sikerült + + + APK egyesítése az APKEditor.jar használatával + + + Megszakítva + + + Biztosan megszakítja a folyamatot? + + + Eszközök keresése... + + + Kis türelmet... + + + Biztosan leállítja az ADB szervert? Lehet, hogy újra kell csatlakoztatnia az eszközt, vagy újra kell indítania az emulátort + + + Az eszköz nincs kiválasztva + + + Kiválasztott eszköz: "{0}" + + + {0} eszköz található + + + Az APK telepítése nem sikerült + + + Az APK telepítése sikeres volt + + + APK telepítése + + + "{0}" APK telepítése + + + Nem találhatók eszközök. Győződjön meg róla, hogy eszközén be van kapcsolva az adb hibakeresés. Ha emulátort használ, indítsa újra és várja meg amíg elindul + + + Befejezve: {0} + + + Elkezdve: {0} + + + A váratlan hibák elkerülése érdekében az Apktool verziójának módosítása után törölni kell a framework gyorsítótárát. Szeretné most törölni? + + + A nyelv be van állítva. Újra akarja indítani az alkalmazást? + + \ No newline at end of file diff --git a/APKToolGUI/Languages/Language.ja.resx b/APKToolGUI/Languages/Language.ja.resx new file mode 100644 index 0000000..b84679d --- /dev/null +++ b/APKToolGUI/Languages/Language.ja.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + バージョン情報 + + + Apktool のバージョン + + + 更新を確認する + + + デバッグモード + + + 終了 + + + ファイル + + + ヘルプ + + + 設定 + + + Java がインストールされていないか、正しくインストールされていません。 Java をインストールするか、設定でカスタムの場所を設定してください。 + + + 設定の読み取りエラーです! + + + 新しいバージョン利用可能です。 更新しますか? + + + 利用可能な更新はありません。 + + + デコード先のフォルダーが未選択です! + + + デコードするファイルが未選択です! + + + 署名用のファイルが未選択です! + + + フレームワークが未選択です! + + + 設定の保存エラーです! + + + 設定を有効化するにはプログラムを再起動してください。 今すぐしますか? + + + ファイルが見つかりません + + + フォルダーが存在しません + + + エラー + + + ビルド + + + デコード + + + フレームワークをインストール + + + 署名 + + + システムの言語 + + + コンテキストメニューをインストールしますか? + + + コンテキストメニューを削除しますか? + + + 完了 + + + apktool のバージョンを検出できません。 + + + デコンパイルが正常に完了しました。 出力先のディレクトリ: {0} + + + 更新の確認でエラーが発生しました: + + + 署名は正常に完了しました。 ファイルの保存先: {0} + + + 最適化中 + + + コンパイルに失敗しました + + + フレームワークタグの入力エラーです。 + + + 選択したファイルは存在しません。 + + + フレームワークディレクトリの選択中にエラーが発生しました。 + + + フレームワークファイルの選択中にエラーが発生しました。 ファイルが存在しません。 + + + 署名に失敗しました。 + + + エラーが発生しました。 フレームワークのインストールが開始されていません。 + + + フレームワークをインストール + + + 署名 + + + 入力先のファイルがありません。 + + + 秘密鍵がありません。 + + + 公開鍵がありません。 + + + ZIP アーカイブ + + + 無効な文字が含まれているため、選択したデコンパイルディレクトリを作成できませんでした。 + + + デコンパイルディレクトリが未選択です。 + + + 選択したフレームワークディレクトリが存在しません。 + + + デコード中 + + + デコンパイルに失敗しました + + + 実行可能なファイル + + + ターゲット SDK を 29 に変更する + + + バージョンの解析に失敗しました + + + AndroidManifest.xml を修正しました + + + すべての ApkTook ダミーを削除しました + + + 選択した APK: + + + 選択したフォルダーは存在しません。 + + + AndroidManifest.xml が存在しません + + + デコンパイルされた APK ディレクトリが存在しません + + + 「{0}」でメインアクティビティが見つかりました + + + メインアクティビティが見つかりませんでした。 手動で検索してください + + + フレームワークを消去 + + + コンパイルが正常に完了しました。 出力先ディレクトリ: {0} + + + Zipaligning に失敗しました + + + Zipalign が正常に完了しました。 ファイルは「{0}」に保存されました + + + フレームワークの消去でエラーが発生しました + + + フレームワークキャッシュを消去しました + + + すべて完了しました! + + + フレームワークが正常にインストールされました + + + フレームワークディレクトリが存在しません + + + DEX をデコンパイル中 + + + 選択した出力先フォルダーが存在しません。 + + + DEX をコンパイル中 + + + 管理者として実行中です。 ドラッグ & ドロップはサポートされていない可能性があります + + + ドラッグ & ドロップはサポートされています + + + このディレクトリは Android パッケージではありません + + + Baksmali + + + Smali + + + Zipalign + + + APK をコンパイル + + + DEX を組み立て + + + APK をデコンパイル + + + DEX を分解 + + + APK 情報を表示 + + + このフォルダーはデコンパイルされた APK ではありません + + + このフォルダーはデコンパイルされた DEX ではありません + + + 必要なファイルが見つかりません + + + APK を署名 + + + テキストファイル + + + APK を最適化 + + + 未署名の APK を作成 + + + META-INF フォルダーがありません。 スキップしました + + + アプリ情報の取得中にエラーが発生しました + + + 入力先のディレクトリ: {0} + + + 入力ファイル: {0} + + + 「{0}」のファイルを削除 + + + 「{0}」のファイルを一時ディレクトリ「{1}」にコピーします + + + デコンパイルされた apk フォルダー「{0}」を一時ディレクトリの「{1}」コピーします + + + 宛先のディレクトリ「{0}」は既に存在します。 上書きする場合は「宛先のディレクトリを強制的に削除」を有効化してください。 + + + 一時フォルダー「{0}」を出力先ディレクトリ「{1}」に移動します + + + 一時 APK「{0}」を出力先ディレクトリ「{1}」に移動します + + + APK 情報を解析中です... + + + 変更を適用するには再起動が必要です。 アプリを再起動しますか? + + + すべての APK ファイルをデコンパイル中 + + + {0} がベースとして検出されました + + + {0} が分割として検出されました + + + すべての APK ファイルを展開中 + + + 統合が完了しました。 ディレクトリを「{0}」に移動中です + + + APK を統合中 + + + ベースディレクトリを「{0}」に移動中です + + + ディレクトリ「{0}」は存在しません + + + 一時ディレクトリ: {0} + + + 統合に失敗しました + + + APKEditor.jar を使用して APK を統合する + + + 中断しました + + + プロセスをキャンセルしますか? + + + デバイスを取得中です... + + + お待ちください... + + + ADB サーバーを強制終了しますか? デバイスを再接続するか、エミュレーターを再起動する必要があるかもしれません + + + デバイスが未選択です + + + 選択されたデバイス: {0} + + + {0} 件のデバイスを検出 + + + APK のインストールに失敗しました + + + APK のインストールに成功しました + + + APK をインストール中 + + + APK「{0}」をインストール中です + + + デバイスはありません。 adb デバイスが ON になっている状態でデバイスがコンピューターに接続されていることを確認してください。 エミュレーターを使用する場合は、再起動して起動まで待機します + + + 終了時間: {0} + + + 開始時間: {0} + + + 予期しないエラーを回避するには、Apktook のバージョンを変更後にフレームワークキャッシュを消去する必要があります。 今すぐに消去しますか? + + + 一時フォルダーを削除中 + + + 削除するフォルダー: {0} + + + ディレクトリ「{0}」は存在しません + + + コンパイル出力先フォルダーを開く + + + デコンパイル出力先フォルダーを開く + + + apktool.yml を修正しました + + + 「{0}」のファイルを「{1}」にコピー + + + 分割 APK は未選択です + + + APKEditor バージョンの検出ができません + + + + + diff --git a/APKToolGUI/Languages/Language.pt-BR.resx b/APKToolGUI/Languages/Language.pt-BR.resx new file mode 100644 index 0000000..7906006 --- /dev/null +++ b/APKToolGUI/Languages/Language.pt-BR.resx @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sobre + + + Alinhar + + + Tudo concluído! + + + AndroidManifest.xml não existe + + + APK selecionado: + + + Versão do apktool + + + Baksmali + + + Compilar + + + Não foi possível detectar a versão do apktool. + + + SDK de destino alterado para 29 + + + Verificar por atualizações + + + Limpando framework + + + Compilar APK + + + Montar DEX + + + Compilando DEX + + + Compilado com sucesso. Pasta de saída: "{0}" + + + Copiar arquivo "{0}" para pasta temporária "{1}" + + + Copiar pasta "{0}" do APK descompilado para pasta temporária "{1}" + + + Criando APK não assinado + + + Modo de depuração + + + Decodificar + + + A pasta de descompilação selecionada não pôde ser criado porque contém caracteres inválidos. + + + A pasta de destino "{0}" já existe. Ative "Forçar excluir pasta de destino" se quiser substituí-la. + + + Pasta de descompilação não selecionada. + + + A pasta do framework selecionado não existe. + + + Decodificando + + + Descompilar APK + + + A pasta do APK descompilado não existe + + + Desmontar DEX + + + Descompilando DEX + + + Descompilado com sucesso. Pasta de saída "{0}". + + + Excluir arquivo "{0}" + + + Concluído + + + Você realmente deseja instalar o menu de contexto? + + + Você realmente deseja remover o menu de contexto? + + + Você está executando como Administrador. Arrastar e soltar não é suportado + + + Arrastar e soltar é suportado + + + Erro + + + Erro ao limpar o framework + + + Falha ao compilar + + + Falha ao descompilar + + + Erro ao entrar etiqueta do framework. + + + Ocorreu um erro ao obter as informações do APK + + + O Java não está instalado ou está instalado incorretamente. Instale o Java ou defina um local personalizado em Configurações + + + Esta pasta não é um pacote do Android + + + Erro ao ler as configurações! + + + Erro ao salvar as configurações! + + + O arquivo selecionado não existe. + + + A pasta selecionada não existe. + + + A pasta de saída selecionada não existe. + + + Erro ao selecionar a pasta do framework. + + + Erro ao selecionar arquivo do framework. O arquivo não existe. + + + Falha ao assinar. + + + Erro ao verificar por atualizações: + + + Falha ao analisar a versão + + + Falha ao alinhar ZIP + + + Arquivo executável + + + Sair + + + Arquivo + + + Arquivo não encontrado + + + AndroidManifest.xml corigido + + + A pasta não existe + + + Cache do framework limpo + + + A pasta do framework não existe + + + Erro: A instalação do framewoek não foi iniciada. + + + Framework instalado com sucesso + + + Obter informações do APK + + + Ajuda + + + Pasta de entrada: {0} + + + Arquivo de entrada: {0} + + + Instalar framework + + + Instalando framework + + + MainActivity encontrado em "{0}" + + + Não foi possível localizar MainActivity. Por favor, encontre-o manualmente. + + + A pasta META-INF não existe. Ignorado + + + Mova a pasta temporária "{0}" para a pasta de saída "{1}" + + + Mover o APK temporário "{0}" para a pasta de saída "{1}" + + + Para que as alterações entrem em vigor, você deve reiniciar o programa. Você quer fazer isso agora? + + + Esta pasta não é um APK descompilado + + + Esta pasta não é um DEX descompilado + + + Removidos todos os dummies do apktool + + + Arquivos necessários ausentes + + + Configurações + + + Assinar + + + Assinar APK + + + Assinando + + + Arquivo de entrada não localizado. + + + Chave privada não localizada. + + + Chave pública não localizada. + + + Assinatura concluída com sucesso. Arquivo salvo em "{0}". + + + Smali + + + Idioma do sistema + + + Arquivo de texto + + + Nova versão disponível. Deseja atualizar? + + + Nenhuma atualização está disponível. + + + Pasta de decodificação não selecionada! + + + Arquivo para decodificação não selecionado! + + + Arquivo para assinar não selecionado! + + + Framework não selecionado! + + + Alinhar ZIP + + + Alinhar ZIP do APK + + + Alinhar ZIP concluído com sucesso. Arquivo salvo em "{0}" + + + Arquivos ZIP + + diff --git a/APKToolGUI/Languages/Language.resx b/APKToolGUI/Languages/Language.resx new file mode 100644 index 0000000..97f7be4 --- /dev/null +++ b/APKToolGUI/Languages/Language.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + About + + + Apktool version + + + Check for update + + + Debug mode + + + Exit + + + File + + + Help + + + Settings + + + Java is not installed or is installed incorrectly. Please install Java or set custom location in Settings + + + Error reading settings! + + + New version is available. Do you want to update? + + + No update is available. + + + Decoding folder not selected! + + + File for decoding not selected! + + + File for signing not selected! + + + Framework not selected! + + + Error saving settings! + + + For the changes to take effect you must restart the program. You want to do it now? + + + File is not found + + + Folder does not exist + + + Error + + + Build + + + Decode + + + Install framework + + + Sign + + + System language + + + Do you realy want to install context menu? + + + Do you realy want to remove context menu? + + + Done + + + Can't detect apktool version. + + + Decompiling successfully completed. Output directory "{0}". + + + Error update checking: + + + Signing successfully completed. File saved to "{0}". + + + Aligning + + + Compiling failed + + + Error entering framework tag. + + + The selected file does not exist. + + + Error selecting framework directory. + + + Error selecting framework file. The file does not exist. + + + Signing failed. + + + Error. Framework installation is not started. + + + Installing framework + + + Signing + + + Input file not found. + + + Private key not found. + + + Public key not found. + + + ZIP archives + + + The selected decompilation directory could not be created because contains invalid characters. + + + Decompilation directory not selected. + + + The selected framework directory does not exist. + + + Decoding + + + Decompiling failed + + + Executable file + + + Changed target SDK to 29 + + + Failed to parse version + + + Fixed AndroidManifest.xml + + + Removed all ApkTool dummies + + + APK Selected: + + + The selected folder does not exist. + + + AndroidManifest.xml does not exist + + + Decompiled APK directory does not exist + + + Main activity found in "{0}" + + + Could not find MainActivity. Please find it manually + + + Clearing Framework + + + Compiling successfully completed. Output directory "{0}" + + + Zipaligning failed + + + Zipalign successfully completed. File saved to "{0}" + + + Error clearing framework + + + Framework cache cleared + + + All done! + + + Framework has been installed successfully + + + Framework directory does not exist + + + Decompiling dex + + + The selected output folder does not exist. + + + Compiling dex + + + You are running as administrator. Drag & drop may not be supported + + + Drag & drop is supported + + + This directory is not an Android package + + + Baksmali + + + Smali + + + Zipalign + + + Compile APK + + + Assemble DEX + + + Decompile APK + + + Disassemble DEX + + + View APK Info + + + This folder is not a decompiled APK + + + This folder is not a decompiled DEX + + + Required files are missing + + + Sign APK + + + Text file + + + Zipalign APK + + + Creating Unsigned APK + + + META-INF folder does not exist. Skipped + + + There was an error getting APK infomation + + + Input directory: {0} + + + Input file: {0} + + + Delete file "{0}" + + + Copy file "{0}" to temp directory "{1}" + + + Copy decompiled apk folder "{0}" to temp directory "{1}" + + + Destination directory "{0}" already exists. Enable "Force delete destination directory" if you want to overwrite it. + + + Move temp folder "{0}" to output directory "{1}" + + + Move temp apk "{0}" to output directory "{1}" + + + Parsing APK Info... + + + Restart is required to apply changes. Do you want to restart the application? + + + Decompiling all APK files + + + {0} detected as base + + + {0} detected as split + + + Extracting all APK files + + + Merge finished. Moving directory to "{0}" + + + Merging APK + + + Moving base directory to "{0}" + + + Directory "{0}" does not exist + + + Temp directory: "{0}" + + + Merging failed + + + Merging APK using APKEditor.jar + + + Aborted + + + Are you sure you want to cancel the process? + + + Getting devices... + + + Please wait... + + + Are you sure you want to kill ADB server? You might need to reconnect your device or restart emulator + + + Device is not selected + + + Device selected "{0}" + + + {0} devices found + + + APK Installation failed + + + APK Installation successfully + + + Installing APK + + + Installing APK "{0}" + + + No devices found. Make sure your device is connected to the computer with the adb debugging turned on. If you use an emulator, restart it and wait until it boot up + + + Time ended: {0} + + + Time started: {0} + + + It is required to clear framework cache after changing Apktool version to avoid unexpected errors. Do you want to clear it now? + + + Clearing temp folder + + + Deleting folder: {0} + + + The directory "{0}" does not exist + + + Open compile output folder + + + Open decompile output folder + + + Fixed apktool.yml + + + Copy file "{0}" to "{1}" + + + Split APK is not selected + + + Can't detect APKEditor version + + + + + \ No newline at end of file diff --git a/APKToolGUI/Languages/Language.ru.resx b/APKToolGUI/Languages/Language.ru.resx new file mode 100644 index 0000000..dcc47b3 --- /dev/null +++ b/APKToolGUI/Languages/Language.ru.resx @@ -0,0 +1,516 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + О программе + + + Версия Apktool + + + Проверить обновления + + + Режим Debug + + + Выход + + + Файл + + + Помощь + + + Настройки + + + Java не установлена или установлена некорректно. Пожалуйста, установите Java или укажите путь в настройках + + + Ошибка при чтении файла настроек! + + + Доступна новая версия. Загрузить обновление? + + + Нет обновлений. + + + Папка для декодирования не выбрана! + + + Файл для декодирования не выбран! + + + Файл для подписи не выбран! + + + Не выбраны необходимые компоненты! + + + Ошибка при сохранении файла настроек! + + + Для завершения обновления необходим перезапуск. Перезапустить сейчас? + + + Файл не найден + + + Папка не найдена + + + Ошибка + + + Build + + + Декодирование + + + Установка + + + Подпись + + + Язык системы + + + Вы действительно хотите установить контекстное меню? + + + Вы действительно хотите удалить контекстное меню? + + + Готово + + + Не определена версия apktool. + + + Декомпиляция успешно завершена. Выходная директория "{0}". + + + Ошибка при проверке обновлений: + + + Операция успешно завершена. Файл сохранен в "{0}". + + + Aligning + + + Ошибка при компиляции + + + Ошибка ввода тегов + + + Выбранный файл не существует. + + + Ошибка при выборе папки. + + + Ошибка при выборе файла. Файл не существует. + + + Sign: ошибка + + + Ошибка. Установка не запущена. + + + Установка + + + Подписывание + + + Входной файл не найден. + + + Приватный ключ не найден. + + + Публичный ключ не найден. + + + ZIP архивы + + + Выбранная директория содержит недопустимые символы и не может быть создана. + + + Папка для декомпиляции не выбрана. + + + Выбранная папка не существует + + + Декодирование + + + Ошибка при декодировании + + + Исполняемый файл + + + Изменена версия SDK на 29 + + + Ошибка при считывании версии + + + Измененный AndroidManifest.xml + + + Удалены все дополнения для ApkTool + + + Выбранный APK: + + + Выбранная папка не существует. + + + AndroidManifest.xml не найден + + + Декомпилированный каталог APK не существует + + + MainActivity найден в "{0}" + + + Не найден MainActivity. Попробуйте выполнить поиск вручную + + + Очистка + + + Компиляция успешно завершена. Выходная папка "{0}" + + + Zipalign: ошибка + + + Zipalign: успешно завершено. Файл сохранен в "{0}" + + + Ошибка при очистке + + + Кеш очищен + + + Завершено! + + + Успешно установлено + + + Папка не существует + + + Декомпиляция DEX + + + Выбранная выходная папка не существует. + + + Компиляция DEX + + + Программа запущена в режиме администратора. Drag & drop не поддерживается + + + Drag & drop поддерживается + + + Эта папка не является пакетом Android + + + Baksmali + + + Smali + + + Zipalign + + + Компиляция APK + + + Assemble DEX + + + Декомпиляция APK + + + Дизассемблирование DEX + + + Информация о APK + + + Эта папка не является декомпилированным АРК + + + Эта папка не является декомпилированным DEX + + + Отсутствуют необходимые файлы + + + Подпись APK + + + Текстовый файл + + + Zipalign APK + + + Создание APK (unsigned) + + + Папка META-INF не существует. + + + Ошибка при получении информации о APK + + + Входная папка: {0} + + + Входной файл: {0} + + + Удален файл "{0}" + + + Файл "{0}" скопирован во временную папку "{1}" + + + Копирование декомпилированного АРК "{0}" во временную папку "{1}" + + + Целевая папка "{0}" уже существует. Используйте опцию принудительного удаления, если вы хотите ее перезаписать. + + + Перемещение временной папки "{0}" в выходной каталог "{1}" + + + Перемещение временного АРК "{0}" в выходной каталог "{1}" + + + Чтение информации о APK... + + + Декомпиляция всех APK файлов + + + {0} определен как базовый + + + {0} определен как split + + + Извлечение всех APK файлов + + + Слияние завершено. Перемещение каталога в "{0}" + + + Слияние APK + + + Перемещение базового каталога в "{0}" + + + Папка "{0}" не существует + + + Временная папка: "{0}" + + + Ошибка при слиянии + + + Слияние APK с помощью APKEditor.jar + + + Отменено + + + Вы действительно хотите прервать процесс? + + + Получение устройств... + + + Пожалуйста, подождите... + + + Вы действительно хотите завершить работу ADB сервера? После завершения работы необходимо переподключить устройство или перезапустить эмулятор + + + Устройство не выбрано + + + Выбрано устройство "{0}" + + + Найдено {0} устройств + + + Ошибка при установке АРК + + + Установка АРК успешно завершена + + + Установка APK + + + Установлено APK "{0}" + + + Устройств не обнаружено. Убедитесь, что ваше устройство подключено к компьютеру с включенной отладкой ADB. Если вы используете эмулятор, перезапустите его и дождитесь завершения загрузки + + + Время завершения: {0} + + + Время начала: {0} + + + После изменения версии Apktool необходимо очистить кеш. Вы хотите очистить его сейчас? + + + Язык установлен. Хотите перезапустить программу? + + \ No newline at end of file diff --git a/APKToolGUI/Languages/Language.tr.resx b/APKToolGUI/Languages/Language.tr.resx new file mode 100644 index 0000000..081ee83 --- /dev/null +++ b/APKToolGUI/Languages/Language.tr.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hakkında + + + Apktool sürümü + + + Güncellemeleri kontrol et + + + Hata ayıklama modu + + + Çıkış + + + Dosya + + + Yardım + + + Ayarlar + + + Java yüklü değil veya yanlış yüklenmiş. Lütfen Java’yı yükleyin veya Ayarlar’dan özel konumu ayarlayın + + + Ayarlar okunurken hata oluştu! + + + Yeni bir sürüm mevcut. Güncellemek ister misiniz? + + + Güncelleme mevcut değil. + + + Çözümleme klasörü seçilmedi! + + + Çözümleme için dosya seçilmedi! + + + İmzalama için dosya seçilmedi! + + + Çerçeve seçilmedi! + + + Ayarlar kaydedilirken hata oluştu! + + + Değişikliklerin etkili olması için programı yeniden başlatmanız gerekiyor. Şimdi yapmak ister misiniz? + + + Dosya bulunamadı + + + Klasör mevcut değil + + + Hata + + + Derle + + + Çözümle + + + Çerçeveyi yükle + + + İmzala + + + Sistem dili + + + Bağlam menüsünü gerçekten yüklemek istiyor musunuz? + + + Bağlam menüsünü gerçekten kaldırmak istiyor musunuz? + + + Tamamlandı + + + Apktool sürümü tespit edilemedi. + + + Çözümleme başarıyla tamamlandı. Çıkış dizini "{0}". + + + Güncelleme kontrolü hatası: + + + İmzalama başarıyla tamamlandı. Dosya "{0}" konumuna kaydedildi. + + + Hizalama + + + Derleme başarısız + + + Çerçeve etiketi girilirken hata oluştu. + + + Seçilen dosya mevcut değil. + + + Çerçeve dizini seçilirken hata oluştu. + + + Çerçeve dosyası seçilirken hata oluştu. Dosya mevcut değil. + + + İmzalama başarısız. + + + Hata. Çerçeve kurulumu başlatılmadı. + + + Çerçeve yükleniyor + + + İmzalanıyor + + + Giriş dosyası bulunamadı. + + + Özel anahtar bulunamadı. + + + Genel anahtar bulunamadı. + + + ZIP arşivleri + + + Seçilen çözümleme dizini, geçersiz karakterler içerdiği için oluşturulamadı. + + + Çözümleme dizini seçilmedi. + + + Seçilen çerçeve dizini mevcut değil. + + + Çözümleniyor + + + Çözümleme başarısız + + + Çalıştırılabilir dosya + + + Hedef SDK 29’a değiştirildi + + + Sürüm ayrıştırılamadı + + + AndroidManifest.xml düzeltildi + + + Tüm ApkTool kuklaları kaldırıldı + + + APK Seçildi: + + + Seçilen klasör mevcut değil. + + + AndroidManifest.xml mevcut değil + + + Çözümlenmiş APK dizini mevcut değil + + + Ana aktivite "{0}" içinde bulundu + + + MainActivity bulunamadı. Lütfen manuel olarak bulun + + + Çerçeve temizleniyor + + + Derleme başarıyla tamamlandı. Çıkış dizini "{0}" + + + Zipalign başarısız + + + Zipalign başarıyla tamamlandı. Dosya "{0}" konumuna kaydedildi + + + Çerçeve temizlenirken hata oluştu + + + Çerçeve önbelleği temizlendi + + + Hepsi tamamlandı! + + + Çerçeve başarıyla yüklendi + + + Çerçeve dizini mevcut değil + + + Dex çözümlemesi yapılıyor + + + Seçilen çıkış klasörü mevcut değil. + + + Dex derleniyor + + + Yönetici olarak çalışıyorsunuz. Sürükle ve bırak desteklenmeyebilir + + + Sürükle ve bırak destekleniyor + + + Bu dizin bir Android paketi değil + + + Baksmali + + + Smali + + + Zipalign + + + APK’yı derle + + + DEX’i birleştir + + + APK’yı çözümle + + + DEX’i parçala + + + APK Bilgilerini Görüntüle + + + Bu klasör çözümlenmiş bir APK değil + + + Bu klasör çözümlenmiş bir DEX değil + + + Gerekli dosyalar eksik + + + APK’yı imzala + + + Metin dosyası + + + APK’yı zipalign yap + + + İmzasız APK oluşturuluyor + + + META-INF klasörü mevcut değil. Atlandı + + + APK bilgileri alınırken hata oluştu + + + Giriş dizini: {0} + + + Giriş dosyası: {0} + + + "{0}" dosyasını sil + + + "{0}" dosyasını "{1}" geçici dizinine kopyala + + + Çözümlenmiş apk klasörünü "{0}" "{1}" geçici dizinine kopyala + + + Hedef dizin "{0}" zaten mevcut. Üzerine yazmak istiyorsanız "Hedef dizini zorla sil" seçeneğini etkinleştirin. + + + Geçici klasörü "{0}" çıkış dizinine "{1}" taşı + + + Geçici apk’yı "{0}" çıkış dizinine "{1}" taşı + + + APK Bilgileri Ayrıştırılıyor... + + + Değişiklikleri uygulamak için yeniden başlatma gerekiyor. Uygulamayı şimdi yeniden başlatmak ister misiniz? + + + Tüm APK dosyaları çözümleniyor + + + {0} temel olarak algılandı + + + {0} bölünmüş olarak algılandı + + + Tüm APK dosyaları çıkarılıyor + + + Birleştirme tamamlandı. Dizin "{0}" konumuna taşınıyor + + + APK birleştiriliyor + + + Temel dizin "{0}" konumuna taşınıyor + + + "{0}" dizini mevcut değil + + + Geçici dizin: "{0}" + + + Birleştirme başarısız + + + APK, APKEditor.jar kullanılarak birleştiriliyor + + + İptal edildi + + + İşlemi iptal etmek istediğinizden emin misiniz? + + + Cihazlar alınıyor... + + + Lütfen bekleyin... + + + ADB sunucusunu sonlandırmak istediğinizden emin misiniz? Cihazınızı yeniden bağlamanız veya emülatörü yeniden başlatmanız gerekebilir + + + Cihaz seçilmedi + + + Cihaz seçildi "{0}" + + + {0} cihaz bulundu + + + APK Kurulumu başarısız + + + APK Kurulumu başarılı + + + APK yükleniyor + + + "{0}" APK’sı yükleniyor + + + Cihaz bulunamadı. Cihazınızın bilgisayara bağlı olduğundan ve adb hata ayıklamasının açık olduğundan emin olun. Emülatör kullanıyorsanız, yeniden başlatın ve açılmasını bekleyin + + + Bitiş zamanı: {0} + + + Başlangıç zamanı: {0} + + + Apktool sürümü değiştirildikten sonra beklenmedik hataları önlemek için çerçeve önbelleğini temizlemek gerekiyor. Şimdi temizlemek ister misiniz? + + + Geçici klasör temizleniyor + + + Klasör siliniyor: {0} + + + "{0}" dizini mevcut değil + + + Derleme çıkış klasörünü aç + + + Çözümleme çıkış klasörünü aç + + + apktool.yml düzeltildi + + + "{0}" dosyasını "{1}" konumuna kopyala + + + Bölünmüş APK seçilmedi + + + APKEditor sürümü tespit edilemedi + + + + + \ No newline at end of file diff --git a/APKToolGUI/Languages/Language.vi-VN.resx b/APKToolGUI/Languages/Language.vi-VN.resx new file mode 100644 index 0000000..f68034c --- /dev/null +++ b/APKToolGUI/Languages/Language.vi-VN.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Giới thiệu + + + Phiên bản Apktool + + + Kiểm tra cập nhật + + + Chế độ gỡ lỗi + + + Thoát + + + Tệp + + + Trợ giúp + + + Cài đặt + + + Java chưa được cài đặt hoặc đã cài đặt không đúng. Vui lòng cài đặt Java hoặc đặt vị trí tùy chỉnh trong Cài đặt + + + Lỗi đọc cài đặt! + + + Có phiên bản mới. Bạn có muốn cập nhật không? + + + Không có bản cập nhật nào. + + + Thư mục dịch ngược chưa được chọn! + + + Tệp để dịch ngược chưa được chọn! + + + Tệp để ký chưa được chọn! + + + Framework chưa được chọn! + + + Lỗi lưu cài đặt! + + + Để các thay đổi có hiệu lực, bạn phải khởi động lại chương trình. Bạn có muốn thực hiện ngay bây giờ không? + + + Không tìm thấy tệp + + + Thư mục không tồn tại + + + Lỗi + + + Biên dịch + + + Dịch ngược + + + Cài đặt framework + + + + + + Ngôn ngữ hệ thống + + + Bạn có thực sự muốn cài đặt menu ngữ cảnh không? + + + Bạn có thực sự muốn xóa menu ngữ cảnh không? + + + Hoàn tất + + + Không thể phát hiện phiên bản apktool. + + + Dịch ngược thành công. Thư mục đầu ra "{0}". + + + Lỗi kiểm tra cập nhật: + + + Ký thành công. Tệp đã được lưu vào "{0}". + + + Đang căn chỉnh + + + Biên dịch thất bại + + + Lỗi nhập thẻ framework. + + + Tệp đã chọn không tồn tại. + + + Lỗi chọn thư mục framework. + + + Lỗi chọn tệp framework. Tệp không tồn tại. + + + Ký thất bại. + + + Lỗi. Việc cài đặt framework chưa được bắt đầu. + + + Đang cài đặt framework + + + Đang ký + + + Không tìm thấy tệp đầu vào. + + + Không tìm thấy khóa riêng. + + + Không tìm thấy khóa công khai. + + + Tệp nén ZIP + + + Thư mục dịch ngược đã chọn không thể được tạo vì chứa các ký tự không hợp lệ. + + + Thư mục dịch ngược chưa được chọn. + + + Thư mục framework đã chọn không tồn tại. + + + Đang dịch ngược + + + Dịch ngược thất bại + + + Tệp thực thi + + + Đã thay đổi target SDK thành 29 + + + Phân tích phiên bản thất bại + + + Đã sửa tệp AndroidManifest.xml + + + Đã xóa tất cả các tệp giả của ApkTool + + + APK đã chọn: + + + Thư mục đã chọn không tồn tại. + + + Tệp AndroidManifest.xml không tồn tại + + + Thư mục APK đã dịch ngược không tồn tại + + + Đã tìm thấy activity chính trong "{0}" + + + Không thể tìm thấy MainActivity. Vui lòng tìm thủ công + + + Đang xóa Framework + + + Biên dịch thành công. Thư mục đầu ra "{0}" + + + Zipalign thất bại + + + Zipalign thành công. Tệp đã được lưu vào "{0}" + + + Lỗi xóa framework + + + Đã xóa bộ nhớ đệm của Framework + + + Đã xong tất cả! + + + Framework đã được cài đặt thành công + + + Thư mục Framework không tồn tại + + + Đang dịch ngược dex + + + Thư mục đầu ra đã chọn không tồn tại. + + + Đang biên dịch dex + + + Bạn đang chạy với quyền quản trị viên. Kéo và thả có thể không được hỗ trợ + + + Kéo và thả được hỗ trợ + + + Thư mục này không phải là một gói Android + + + Baksmali + + + Smali + + + Zipalign + + + Biên dịch APK + + + Biên dịch DEX + + + Dịch ngược APK + + + Dịch ngược DEX + + + Xem thông tin APK + + + Thư mục này không phải là một APK đã được dịch ngược + + + Thư mục này không phải là một DEX đã được dịch ngược + + + Các tệp cần thiết bị thiếu + + + Ký APK + + + Tệp văn bản + + + Zipalign APK + + + Đang tạo APK chưa ký + + + Thư mục META-INF không tồn tại. Đã bỏ qua + + + Đã xảy ra lỗi khi lấy thông tin APK + + + Thư mục đầu vào: {0} + + + Tệp đầu vào: {0} + + + Xóa tệp "{0}" + + + Sao chép tệp "{0}" vào thư mục tạm "{1}" + + + Sao chép thư mục apk đã dịch ngược "{0}" vào thư mục tạm "{1}" + + + Thư mục đích "{0}" đã tồn tại. Bật "Buộc xóa thư mục đích" nếu bạn muốn ghi đè lên nó. + + + Di chuyển thư mục tạm "{0}" đến thư mục đầu ra "{1}" + + + Di chuyển apk tạm "{0}" đến thư mục đầu ra "{1}" + + + Đang phân tích thông tin APK... + + + Cần khởi động lại để áp dụng các thay đổi. Bạn có muốn khởi động lại ứng dụng không? + + + Đang dịch ngược tất cả các tệp APK + + + {0} được phát hiện là base + + + {0} được phát hiện là split + + + Đang giải nén tất cả các tệp APK + + + Hợp nhất hoàn tất. Đang di chuyển thư mục đến "{0}" + + + Đang hợp nhất APK + + + Đang di chuyển thư mục base đến "{0}" + + + Thư mục "{0}" không tồn tại + + + Thư mục tạm: "{0}" + + + Hợp nhất thất bại + + + Đang hợp nhất APK bằng APKEditor.jar + + + Đã hủy + + + Bạn có chắc muốn hủy tiến trình không? + + + Đang lấy danh sách thiết bị... + + + Vui lòng đợi... + + + Bạn có chắc muốn tắt máy chủ ADB không? Bạn có thể cần kết nối lại thiết bị hoặc khởi động lại trình giả lập + + + Thiết bị chưa được chọn + + + Đã chọn thiết bị "{0}" + + + Đã tìm thấy {0} thiết bị + + + Cài đặt APK thất bại + + + Cài đặt APK thành công + + + Đang cài đặt APK + + + Đang cài đặt APK "{0}" + + + Không tìm thấy thiết bị nào. Hãy chắc chắn rằng thiết bị của bạn được kết nối với máy tính và đã bật chế độ gỡ lỗi adb. Nếu bạn sử dụng trình giả lập, hãy khởi động lại và đợi cho đến khi nó khởi động xong + + + Thời gian kết thúc: {0} + + + Thời gian bắt đầu: {0} + + + Cần phải xóa bộ nhớ đệm của framework sau khi thay đổi phiên bản Apktool để tránh các lỗi không mong muốn. Bạn có muốn xóa ngay bây giờ không? + + + Đang xóa thư mục tạm + + + Đang xóa thư mục: {0} + + + Thư mục "{0}" không tồn tại + + + Mở thư mục đầu ra biên dịch + + + Mở thư mục đầu ra dịch ngược + + + Đã sửa tệp apktool.yml + + + Sao chép tệp "{0}" đến "{1}" + + + Split APK chưa được chọn + + + Không thể phát hiện phiên bản APKEditor + + + + + diff --git a/APKToolGUI/Languages/Language.zh-CN.resx b/APKToolGUI/Languages/Language.zh-CN.resx new file mode 100644 index 0000000..888098e --- /dev/null +++ b/APKToolGUI/Languages/Language.zh-CN.resx @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 关于 + + + Apktool 版本 + + + 检查更新 + + + 调试模式 + + + 退出 + + + 文件 + + + 帮助 + + + 设置 + + + Java 没有安装或安装不正确。该程序将被关闭。 + + + 读取设置时出错! + + + 新版本可用。是否要更新? + + + 没有更新可用。 + + + 未选择反编译文件夹! + + + 未选择用于反编译的文件! + + + 未选择用于签名的文件! + + + Framework 未选择! + + + 保存设置时出错! + + + 为了使这些更改生效,你必须重新启动程序。你想立即重启吗? + + + 未找到文件 + + + 文件夹不存在 + + + 错误 + + + 构建 + + + 反编译 + + + 安装 Framework + + + 签名 + + + 系统语言 + + + 你真的想安装上下文菜单吗? + + + 你真的想删除上下文菜单吗? + + + 完成 + + + 无法检测 apktool 版本。 + + + 反编译成功完成。输出目录"{0}"。 + + + 检查更新错误: + + + 签名成功完成。文件保存到"{0}"。 + + + 正在对齐 + + + 编译失败 + + + 输入 Framework 标签错误。 + + + 所选文件不存在。 + + + 选择 Framework 目录错误。 + + + 选择 Framework 文件时出错。该文件不存在。 + + + 签名失败。 + + + 错误。Framework 安装没有开始。 + + + 正在安装 Framework + + + 正在签名 + + + 未找到输入文件。 + + + 未找到私钥。 + + + 未找到公钥。 + + + ZIP 存档 + + + 所选的反编译目录无法创建,因为包含无效的字符。 + + + 未选择反编译目录。 + + + 所选的 Framework 目录不存在。 + + + 正在反编译 + + + 反编译失败 + + + 可执行文件 + + + 更改目标 SDK 到 29 + + + 分析版本失败 + + + 修复 AndroidManifest.xml + + + 删除所有 ApkTool 假象 + + + APK 选择: + + + 所选的文件夹不存在。 + + + AndroidManifest.xml 不存在 + + + 反编译的 APK 目录不存在 + + + 在 "{0}" 找到主要 Activity + + + 找不到 MainActivity。请手动查找 + + + 正在清理 Framework + + + 编译成功完成。输出目录"{0}" + + + Zip 对齐失败 + + + Zip 对齐成功完成。文件保存到 "{0}" + + + 清除 Framework 错误 + + + Framework 缓存已清除 + + + 全部完成! + + + Framework 已成功安装 + + + Framework 目录不存在 + + + 正在反编译 dex + + + 所选的输出文件夹不存在。 + + + 正在编译 dex + + + 您正在以管理员身份运行。不支持拖放。 + + + 支持拖放 + + + 此目录不是安卓软件包 + + + Baksmali + + + Smali + + + Zip 对齐 + + + 编译 APK + + + 编译 DEX + + + 反编译 APK + + + 反编译 DEX + + + 获取 APK 信息 + + + 此文件夹不是已反编译的 APK + + + 此文件夹不是反编译的 DEX + + + 缺少必需的文件 + + + 签名 APK + + + 文本文件 + + + Zip 对齐 APK + + + 创建未签名的 APK + + + META-INF 文件夹不存在。已跳过 + + + 获取 APK 信息时发生错误 + + + 输入目录:{0} + + + 输入文件:{0} + + + 删除文件 "{0}" + + + 复制文件 "{0}" 到临时目录 "{1}" + + + 复制反编译的 apk 文件夹 "{0}" 到临时目录 "{1}" + + + 目标目录 "{0}" 已经存在。如果你想覆盖它,请启用 "强制删除目标目录"。 + + + 移动临时文件夹 "{0}" 到输出目录 "{1}"。 + + + 移动临时 apk"{0}" 到输出目录 "{1}" + + + 正在解析 APK 信息... + + + 需要重新启动才能应用更改。 是否要重新启动应用程序? + + + 正在反编译所有 APK 文件 + + + {0} 检测为基本模块 + + + {0} 检测为拆分 + + + 提取所有 APK 文件 + + + 合并完成。移动目录到 "{0}" + + + 正在合并 APK + + + 将基目录移动到 "{0}" + + + 目录 "{0}" 不存在 + + + 临时目录: "{0}" + + + 合并失败 + + + 使用 APKEditor.jar 合并 APK + + + 已终止 + + + 您确定要取消该进程吗? + + + 正在获取设备... + + + 请稍候... + + + 您确定要终止 ADB 服务吗? 您可能需要重新连接设备或重新启动模拟器 + + + 未选择设备 + + + 已选择 "{0}" 设备 + + + 发现 {0} 设备 + + + APK 安装失败 + + + APK 安装成功 + + + 正在安装 APK + + + 正在安装 APK "{0}" + + + 未找到设备。 确保您的设备已连接到计算机并打开了 adb 调试。 如果您使用模拟器,请重新启动它并等待它启动 + + + 结束时间: {0} + + + 开始时间: {0} + + + 更改 Apktool 版本后需要清除 Framework 缓存以避免意外错误。 你想现在清除它吗? + + + 清除临时文件夹 + + + 正在删除文件夹: {0} + + + 目录 "{0}" 不存在 + + + 打开编译输出文件夹 + + + 打开反编译输出文件夹 + + + Apktool.yml 已修复 + + + 复制文件 "{0}" 到 "{1}" + + + 未选择拆分的 APK + + + 无法检测 APKEditor 版本 + + \ No newline at end of file diff --git a/APKToolGUI/PortableSettingsProvider.cs b/APKToolGUI/PortableSettingsProvider.cs deleted file mode 100644 index 6e1cd33..0000000 --- a/APKToolGUI/PortableSettingsProvider.cs +++ /dev/null @@ -1,331 +0,0 @@ -/************************************************************* - * PortableSettingsProvider.cs - * Portable Settings Provider for C# applications - * - * 2010- Michael Nathan - * http://www.Geek-Republic.com - * - * Licensed under Creative Commons CC BY-SA - * http://creativecommons.org/licenses/by-sa/3.0/legalcode - * - * - * - * - *************************************************************/ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Configuration; -using System.Linq; -using System.Text; -using Microsoft.Win32; -using System.Xml; -using System.Xml.Serialization; - -public class PortableSettingsProvider : SettingsProvider -{ - // Define some static strings later used in our XML creation - // XML Root node - const string XMLROOT = "configuration"; - - // Configuration declaration node - const string CONFIGNODE = "configSections"; - - // Configuration section group declaration node - const string GROUPNODE = "sectionGroup"; - - // User section node - const string USERNODE = "userSettings"; - - // Application Specific Node - string APPNODE = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Properties.Settings"; - - private System.Xml.XmlDocument xmlDoc = null; - - - - // Override the Initialize method - public override void Initialize(string name, NameValueCollection config) - { - base.Initialize(this.ApplicationName, config); - } - - // Override the ApplicationName property, returning the solution name. No need to set anything, we just need to - // retrieve information, though the set method still needs to be defined. - public override string ApplicationName - { - get - { - return (System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); - } - set - { - return; - } - } - - // Simply returns the name of the settings file, which is the solution name plus ".config" - public virtual string GetSettingsFilename() - { - return ApplicationName + ".config"; - } - - // Gets current executable path in order to determine where to read and write the config file - public virtual string GetAppPath() - { - return new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName; - } - - // Retrieve settings from the configuration file - public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext sContext, SettingsPropertyCollection settingsColl) - { - // Create a collection of values to return - SettingsPropertyValueCollection retValues = new SettingsPropertyValueCollection(); - - // Create a temporary SettingsPropertyValue to reuse - SettingsPropertyValue setVal; - - // Loop through the list of settings that the application has requested and add them - // to our collection of return values. - foreach (SettingsProperty sProp in settingsColl) - { - setVal = new SettingsPropertyValue(sProp); - setVal.IsDirty = false; - setVal.SerializedValue = GetSetting(sProp); - retValues.Add(setVal); - } - return retValues; - } - - // Save any of the applications settings that have changed (flagged as "dirty") - public override void SetPropertyValues(SettingsContext sContext, SettingsPropertyValueCollection settingsColl) - { - // Set the values in XML - foreach (SettingsPropertyValue spVal in settingsColl) - { - SetSetting(spVal); - } - - // Write the XML file to disk - try - { - XMLConfig.Save(System.IO.Path.Combine(GetAppPath(), GetSettingsFilename())); - } - catch (Exception ex) - { - // Create an informational message for the user if we cannot save the settings. - // Enable whichever applies to your application type. - - // Uncomment the following line to enable a MessageBox for forms-based apps - System.Windows.Forms.MessageBox.Show(ex.Message, "Error writting configuration file to disk", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); - - // Uncomment the following line to enable a console message for console-based apps - //Console.WriteLine("Error writing configuration file to disk: " + ex.Message); - } - } - - private XmlDocument XMLConfig - { - get - { - // Check if we already have accessed the XML config file. If the xmlDoc object is empty, we have not. - if (xmlDoc == null) - { - xmlDoc = new XmlDocument(); - - // If we have not loaded the config, try reading the file from disk. - try - { - xmlDoc.Load(System.IO.Path.Combine(GetAppPath(), GetSettingsFilename())); - } - - // If the file does not exist on disk, catch the exception then create the XML template for the file. - catch (Exception) - { - // XML Declaration - // - XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null); - xmlDoc.AppendChild(dec); - - // Create root node and append to the document - // - XmlElement rootNode = xmlDoc.CreateElement(XMLROOT); - xmlDoc.AppendChild(rootNode); - - // Create Configuration Sections node and add as the first node under the root - // - XmlElement configNode = xmlDoc.CreateElement(CONFIGNODE); - xmlDoc.DocumentElement.PrependChild(configNode); - - // Create the user settings section group declaration and append to the config node above - // - XmlElement groupNode = xmlDoc.CreateElement(GROUPNODE); - groupNode.SetAttribute("name", USERNODE); - groupNode.SetAttribute("type", "System.Configuration.UserSettingsGroup"); - configNode.AppendChild(groupNode); - - // Create the Application section declaration and append to the groupNode above - //
- XmlElement newSection = xmlDoc.CreateElement("section"); - newSection.SetAttribute("name", APPNODE); - newSection.SetAttribute("type", "System.Configuration.ClientSettingsSection"); - groupNode.AppendChild(newSection); - - // Create the userSettings node and append to the root node - // - XmlElement userNode = xmlDoc.CreateElement(USERNODE); - xmlDoc.DocumentElement.AppendChild(userNode); - - // Create the Application settings node and append to the userNode above - // - XmlElement appNode = xmlDoc.CreateElement(APPNODE); - userNode.AppendChild(appNode); - } - } - return xmlDoc; - } - } - - // Retrieve values from the configuration file, or if the setting does not exist in the file, - // retrieve the value from the application's default configuration - private object GetSetting(SettingsProperty setProp) - { - object retVal; - try - { - // Search for the specific settings node we are looking for in the configuration file. - // If it exists, return the InnerText or InnerXML of its first child node, depending on the setting type. - - // If the setting is serialized as a string, return the text stored in the config - if (setProp.SerializeAs.ToString() == "String") - { - return XMLConfig.SelectSingleNode("//setting[@name='" + setProp.Name + "']").FirstChild.InnerText; - } - - // If the setting is stored as XML, deserialize it and return the proper object. This only supports - // StringCollections at the moment - I will likely add other types as I use them in applications. - else - { - string settingType = setProp.PropertyType.ToString(); - string xmlData = XMLConfig.SelectSingleNode("//setting[@name='" + setProp.Name + "']").FirstChild.InnerXml; - XmlSerializer xs = new XmlSerializer(typeof(string[])); - string[] data = (string[])xs.Deserialize(new XmlTextReader(xmlData, XmlNodeType.Element, null)); - - switch (settingType) - { - case "System.Collections.Specialized.StringCollection": - StringCollection sc = new StringCollection(); - sc.AddRange(data); - return sc; - default: - return ""; - } - } - } - catch (Exception) - { - // Check to see if a default value is defined by the application. - // If so, return that value, using the same rules for settings stored as Strings and XML as above - if ((setProp.DefaultValue != null)) - { - if (setProp.SerializeAs.ToString() == "String") - { - retVal = setProp.DefaultValue.ToString(); - } - else - { - string settingType = setProp.PropertyType.ToString(); - string xmlData = setProp.DefaultValue.ToString(); - XmlSerializer xs = new XmlSerializer(typeof(string[])); - string[] data = (string[])xs.Deserialize(new XmlTextReader(xmlData, XmlNodeType.Element, null)); - - switch (settingType) - { - case "System.Collections.Specialized.StringCollection": - StringCollection sc = new StringCollection(); - sc.AddRange(data); - return sc; - - default: return ""; - } - } - } - else - { - retVal = ""; - } - } - return retVal; - } - - private void SetSetting(SettingsPropertyValue setProp) - { - // Define the XML path under which we want to write our settings if they do not already exist - XmlNode SettingNode = null; - - try - { - // Search for the specific settings node we want to update. - // If it exists, return its first child node, (the data here node) - SettingNode = XMLConfig.SelectSingleNode("//setting[@name='" + setProp.Name + "']").FirstChild; - } - catch (Exception) - { - SettingNode = null; - } - - // If we have a pointer to an actual XML node, update the value stored there - if ((SettingNode != null)) - { - if (setProp.Property.SerializeAs.ToString() == "String") - { - SettingNode.InnerText = setProp.SerializedValue.ToString(); - } - else - { - // Write the object to the config serialized as Xml - we must remove the Xml declaration when writing - // the value, otherwise .Net's configuration system complains about the additional declaration. - SettingNode.InnerXml = setProp.SerializedValue.ToString().Replace(@"", ""); - } - } - else - { - // If the value did not already exist in this settings file, create a new entry for this setting - - // Search for the application settings node () and store it. - XmlNode tmpNode = XMLConfig.SelectSingleNode("//" + APPNODE); - - // Create a new settings node and assign its name as well as how it will be serialized - XmlElement newSetting = xmlDoc.CreateElement("setting"); - newSetting.SetAttribute("name", setProp.Name); - - if (setProp.Property.SerializeAs.ToString() == "String") - { - newSetting.SetAttribute("serializeAs", "String"); - } - else - { - newSetting.SetAttribute("serializeAs", "Xml"); - } - - // Append this node to the application settings node () - tmpNode.AppendChild(newSetting); - - // Create an element under our named settings node, and assign it the value we are trying to save - XmlElement valueElement = xmlDoc.CreateElement("value"); - if (setProp.Property.SerializeAs.ToString() == "String") - { - valueElement.InnerText = setProp.SerializedValue.ToString(); - } - else - { - // Write the object to the config serialized as Xml - we must remove the Xml declaration when writing - // the value, otherwise .Net's configuration system complains about the additional declaration - valueElement.InnerXml = setProp.SerializedValue.ToString().Replace(@"", ""); - } - - //Append this new element under the setting node we created above - newSetting.AppendChild(valueElement); - } - } -} \ No newline at end of file diff --git a/APKToolGUI/Program.cs b/APKToolGUI/Program.cs index ad98048..2335c01 100644 --- a/APKToolGUI/Program.cs +++ b/APKToolGUI/Program.cs @@ -1,5 +1,16 @@ -using System; +using APKToolGUI.Languages; +using APKToolGUI.Properties; +using APKToolGUI.Utils; +using Bluegrams.Application; +using Dark.Net; +using OSVersionExtension; +using System; using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; using System.Windows.Forms; namespace APKToolGUI @@ -7,68 +18,161 @@ namespace APKToolGUI static class Program { /// - /// Главная точка входа для приложения. + /// Main entry point for the application. /// + [DllImport("Shcore.dll")] + static extern int SetProcessDpiAwareness(int PROCESS_DPI_AWARENESS); + + [DllImport("user32.dll")] + private static extern bool SetProcessDPIAware(); + [STAThread] static void Main(String[] arg) { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - if (arg.Length > 0) + try { - switch (arg[0]) + //Debug.WriteLine(Application.ProductName); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + if (Environment.OSVersion.Version.Major == 6) + { + SetProcessDPIAware(); + } + + PortableSettingsProvider.SettingsFileName = "config.xml"; + PortableSettingsProvider.ApplyProvider(Settings.Default); + + if (arg.Length == 1) + { + switch (arg[0]) + { + case "ccm": + ExplorerContextMenuMethod(ExplorerContextMenu.Action.Create); + break; + case "rcm": + ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove); + break; + case "opendecfolder": + if (Settings.Default.Decode_UseOutputDir) + { + string outDir = Settings.Default.Decode_OutputDir; + if (Directory.Exists(outDir)) + Process.Start(outDir); + else + MessageBox.Show(String.Format(Language.DirectoryNotExist, outDir), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + break; + case "opencomfolder": + if (Settings.Default.Build_UseOutputAppPath) + { + string outDir = Settings.Default.Build_OutputAppPath; + if (Directory.Exists(outDir)) + Process.Start(outDir); + else + MessageBox.Show(String.Format(Language.DirectoryNotExist, outDir), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + break; + } + } + else { - case "ccm": - ExplorerContextMenuMethod(ExplorerContextMenu.Action.Create); - break; - case "rcm": - ExplorerContextMenuMethod(ExplorerContextMenu.Action.Remove); - break; - case "b": - Application.Run(new FormBuild(arg)); - break; - case "d": - Application.Run(new FormDecode(arg)); - break; - default: - break; + if (arg.Length == 2) + { + switch (arg[0]) + { + case "comapk": + if (!File.Exists(Path.Combine(arg[1], "AndroidManifest.xml"))) + { + MessageBox.Show(Language.NotDecompiledApk, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return; + } + break; + } + } + if (FilesCheck() == true) + { + TEMP_PATH = RandTempDirectory(); + TEMP_MAIN = TempDirectory(); + Directory.CreateDirectory(TEMP_PATH); + + Theme theme = (Theme)Settings.Default.Theme; + if (IsWin10OrAbove()) + DarkNet.Instance.SetCurrentProcessTheme(theme); + + Form mainForm = new FormMain(); + + if (IsWin10OrAbove()) + DarkNet.Instance.SetWindowThemeForms(mainForm, theme); + + Application.Run(mainForm); + } } } - else - if (FilesCheck() == true) - Application.Run(new FormMain()); + catch (Exception ex) + { + Debug.WriteLine(ex); + //MessageBox.Show(ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } } - public static void SetLanguage() + public static bool IsWin10OrAbove() { - String settingsCulture = Properties.Settings.Default.Culture; + // Check if the operating system is Windows 10 or above + return OSVersion.GetOSVersion().Version.Major >= 10; + } + + public static bool IsDarkTheme() + { + if (IsWin10OrAbove()) + return DarkNet.Instance.EffectiveCurrentProcessThemeIsDark; + else if (Settings.Default.Theme == 2) + return true; + return false; + } + + public static void SetLanguage() + { + String settingsCulture = Settings.Default.Culture; if (settingsCulture.Equals("Auto")) { - System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InstalledUICulture; - System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InstalledUICulture; + // Let .NET handle the resource fallback process. + // It will automatically use the system's language if a satellite assembly is available, + // otherwise it will fall back to the neutral language defined in the main assembly (English). + return; } - else + + try + { + System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.GetCultureInfo(settingsCulture); + System.Threading.Thread.CurrentThread.CurrentUICulture = culture; + System.Threading.Thread.CurrentThread.CurrentCulture = culture; + } + catch (System.Globalization.CultureNotFoundException ex) { - System.Globalization.CultureInfo _settingsCulture = System.Globalization.CultureInfo.GetCultureInfo(settingsCulture); - System.Threading.Thread.CurrentThread.CurrentUICulture = _settingsCulture; - System.Threading.Thread.CurrentThread.CurrentCulture = _settingsCulture; + Debug.WriteLine($"[Program] Invalid culture '{settingsCulture}': {ex.Message}"); + // Fall back to system default culture + } + catch (ArgumentException ex) + { + Debug.WriteLine($"[Program] Failed to set culture: {ex.Message}"); } } private static bool FilesCheck() { - // проверка файлов + // File verification List missigFiles = MissingFilesCheck(); if (missigFiles.Count > 0) { - String files = Environment.NewLine; + StringBuilder filesBuilder = new StringBuilder(); + filesBuilder.AppendLine(); foreach (String file in missigFiles) { - files += file + Environment.NewLine; + filesBuilder.AppendLine(file); } - MessageBox.Show("Отсутствуют необходимые файлы:" + files, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(Language.RequiredFilesMissing + filesBuilder.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); //Application.Exit(); return false; } @@ -82,12 +186,22 @@ private static List MissingFilesCheck() String[] fileList = new String[]{ APKTOOL_PATH, ZIPALIGN_PATH, - SIGNAPK_PATH, + APKSIGNER_PATH, + BAKSMALI_PATH, + SMALI_PATH, + AAPT_PATH, + AAPT2_PATH, SIGNAPK_KEYPRIVATE, - SIGNAPK_KEYPUBLIC}; + SIGNAPK_KEYPUBLIC, + APKEDITOR_PATH, + ADB_PATH, + ADBWINAPI_PATH, + ADBWINUSBAPI_PATH, + LIBWINP_PATH, + }; for (int i = 0; i < fileList.Length; i++) - if (!System.IO.File.Exists(fileList[i])) - missingFiles.Add(System.IO.Path.GetFileName(fileList[i])); + if (!File.Exists(fileList[i])) + missingFiles.Add(Path.GetFileName(fileList[i])); return missingFiles; } @@ -116,24 +230,49 @@ private static void ExplorerContextMenuMethod(ExplorerContextMenu.Action action) public static string GetPortablePath(string path) { - string startupPath = Application.StartupPath + System.IO.Path.DirectorySeparatorChar; + string startupPath = Application.StartupPath + Path.DirectorySeparatorChar; if (path.Contains(startupPath)) return path.Replace(startupPath, String.Empty); else return path; } - private static readonly string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); - public static string APKTOOL_PATH { get { return appPath + @"\bin\apktool.jar"; } } - public static string SIGNAPK_PATH { get { return appPath + @"\bin\signapk.jar"; } } - public static string SIGNAPK_KEYPRIVATE { get { return appPath + @"\bin\testkey.pk8"; } } - public static string SIGNAPK_KEYPUBLIC { get { return appPath + @"\bin\testkey.x509.pem"; } } - public static string ZIPALIGN_PATH { get { return appPath + @"\bin\zipalign.exe"; } } - - //public static readonly string APKTOOL_PATH = appPath + @"\bin\apktool.jar"; - //public static readonly string SIGNAPK_PATH = appPath + @"\bin\signapk.jar"; - //public static readonly string SIGNAPK_KEYPRIVATE = appPath + @"\bin\testkey.pk8"; - //public static readonly string SIGNAPK_KEYPUBLIC = appPath + @"\bin\testkey.x509.pem"; - //public static readonly string ZIPALIGN_PATH = appPath + @"\bin\zipalign.exe"; + public static string TempDirectory() + { + //Generate new every new instance to avoid conflict + //We want to keep obfuscated path short as possible to prevent long path error + if (Settings.Default.UseCustomTempDir) + return Path.Combine(Settings.Default.TempDir); + else + return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, "Temp"); + } + + public static string RandTempDirectory() + { + return Path.Combine(TempDirectory(), StringExt.RandStrWithCaps(5)); + } + + public static string ASSEMBLY_NAME { get { return AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location).Name; } } + public static string TEMP_PATH { get; set; } + public static string TEMP_MAIN { get; set; } + public static string LOCAL_APPDATA_PATH { get { return Environment.GetEnvironmentVariable("LocalAppData"); } } + public static string APP_PATH { get { return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } } + public static string RES_PATH { get { return Path.Combine(APP_PATH, "Resources"); } } + public static string APKTOOL_PATH { get { return Path.Combine(RES_PATH, "apktool.jar"); } } + public static string APKSIGNER_PATH { get { return Path.Combine(RES_PATH, "apksigner.jar"); } } + public static string BAKSMALI_PATH { get { return Path.Combine(RES_PATH, "baksmali.jar"); } } + public static string SMALI_PATH { get { return Path.Combine(RES_PATH, "smali.jar"); } } + public static string SIGNAPK_KEYPRIVATE { get { return Path.Combine(RES_PATH, "testkey.pk8"); } } + public static string SIGNAPK_KEYPUBLIC { get { return Path.Combine(RES_PATH, "testkey.x509.pem"); } } + public static string ZIPALIGN_PATH { get { return Path.Combine(RES_PATH, "zipalign.exe"); } } + public static string AAPT_PATH { get { return Path.Combine(RES_PATH, "aapt.exe"); } } + public static string AAPT2_PATH { get { return Path.Combine(RES_PATH, "aapt2.exe"); } } + public static string APKEDITOR_PATH { get { return Path.Combine(RES_PATH, "apkeditor.jar"); } } + public static string ADB_PATH { get { return Path.Combine(RES_PATH, "adb.exe"); } } + public static string ADBWINAPI_PATH { get { return Path.Combine(RES_PATH, "AdbWinApi.dll"); } } + public static string ADBWINUSBAPI_PATH { get { return Path.Combine(RES_PATH, "AdbWinUsbApi.dll"); } } + public static string LIBWINP_PATH { get { return Path.Combine(RES_PATH, "libwinpthread-1.dll"); } } + public static string FRAMEWORK_DIR { get { return Path.Combine(LOCAL_APPDATA_PATH, "apktool", "framework"); } } + public static string STANDALONE_FRAMEWORK_DIR { get { return Path.Combine(LOCAL_APPDATA_PATH, ASSEMBLY_NAME, "framework"); } } } } diff --git a/APKToolGUI/Properties/AssemblyInfo.cs b/APKToolGUI/Properties/AssemblyInfo.cs index 826754c..74816e1 100644 --- a/APKToolGUI/Properties/AssemblyInfo.cs +++ b/APKToolGUI/Properties/AssemblyInfo.cs @@ -2,35 +2,35 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -// Управление общими сведениями о сборке осуществляется с помощью -// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, -// связанные со сборкой. -[assembly: AssemblyTitle("APKTool GUI")] -[assembly: AssemblyDescription("Графический интерфейс для утилит akptool, signapk и zipalign.")] +// 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("APK Tool GUI")] +[assembly: AssemblyDescription("GUI for apktool, signapk and zipalign utilities.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("APKTool GUI")] -[assembly: AssemblyCopyright("© INFINUM, 2012-2015")] +[assembly: AssemblyProduct("APK Tool GUI")] +[assembly: AssemblyCopyright("Original owner: INFINUM, 2012-2015 | Maintained by: AndnixSH, 2022-2025")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми -// для COM-компонентов. Если требуется обратиться к типу в этой сборке через -// COM, задайте атрибуту ComVisible значение TRUE для этого типа. +// 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)] -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("12cc5907-c237-4d52-8c7e-08d622828cf4")] +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("49ccb60c-22a6-4a25-a4bf-9208712ad928")] -// Сведения о версии сборки состоят из следующих четырех значений: +// 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.4.0.446")] -[assembly: AssemblyFileVersion("2.4.0.446")] +[assembly: AssemblyVersion("3.3.2.1")] +[assembly: AssemblyFileVersion("3.3.2.1")] diff --git a/APKToolGUI/Properties/Resources.Designer.cs b/APKToolGUI/Properties/Resources.Designer.cs index 051ce98..a7965e5 100644 --- a/APKToolGUI/Properties/Resources.Designer.cs +++ b/APKToolGUI/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.34209 +// 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. // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace APKToolGUI.Properties { /// - /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// A strongly-typed resource class, for looking up localized strings, etc. /// - // Этот класс создан автоматически классом StronglyTypedResourceBuilder - // с помощью такого средства, как ResGen или Visual Studio. - // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen - // с параметром /str или перестройте свой проект VS. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // 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 { @@ -33,7 +33,7 @@ internal Resources() { } /// - /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Перезаписывает свойство CurrentUICulture текущего потока для всех - /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resources() { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap android { get { @@ -71,7 +71,7 @@ internal static System.Drawing.Bitmap android { } /// - /// Поиск локализованного ресурса типа System.Drawing.Icon, аналогичного (Значок). + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// internal static System.Drawing.Icon android_thin { get { @@ -81,7 +81,7 @@ internal static System.Drawing.Icon android_thin { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap done { get { @@ -91,7 +91,7 @@ internal static System.Drawing.Bitmap done { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap error { get { @@ -101,7 +101,7 @@ internal static System.Drawing.Bitmap error { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap info { get { @@ -111,7 +111,7 @@ internal static System.Drawing.Bitmap info { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap waiting { get { @@ -121,7 +121,7 @@ internal static System.Drawing.Bitmap waiting { } /// - /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap warning { get { diff --git a/APKToolGUI/Properties/Resources.resx b/APKToolGUI/Properties/Resources.resx index f0454f7..f401f56 100644 --- a/APKToolGUI/Properties/Resources.resx +++ b/APKToolGUI/Properties/Resources.resx @@ -117,26 +117,291 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\Info1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Done.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\exclamation-red-frame-icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\android.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + EQAACxEBf2RfkQAAAtVJREFUeF7tmzFu3DAQRfcoPoKBXGCP4pMErtK6TuVD5AB7gQBbGqncJU0AV6k3 + /wdDQFgMxSFFDqlQH3jVcobzKYmSKO7p0KFDh1rq8/dPD+AJvIILuCVgG7ZlzIOk2ZdYOHgB70AzmQNz + MNf4g4Eiz8BylEth7rN0N45Q1KMUpxXdAvb1KN33FQp5XhTmzbOU4S90zqN+XRTTC9bgezagQ17rH1LA + CLAWn7kBHfH2pBUxAk9SZhuxg7sOR6TNICAxT3utwxGpezkgISe8ka75FKy13sSIZCPM9rlcpfxtQqKe + 9/mtbHtOQAKe+lriPVF+KSDY8/G2FRexkycE7mnWT5F/V0DQ/3D0A3lnAQL4Pq8l6saX6/l2+flV/c2I + fT0BjbkAoSXpAs3/+vPjRl1/f1PbGHgRe2mhcY2VnCoszQcVDsK72FsXGg5z+mvmgwoHIX0ZoNEQLzxr + 5oMK5oT0ixIacUVWC3bDYp6/s50Wv8Kr2IwLjbre/hqaJ+nboRLkRmPz/xCbcWlBVlgYJ6eSAj3ME7EZ + lxZk5e3jUlSol3kiNuPSgizwyC9lLdjTPBGbcWlBKe7NB6UK9zZPxGZcWtAavBevKWagh3kiNuPSgtYo + MdLLPBGbcWlBKXIM9TRPxGZcaFT0IGQ11tM8MD0IFT8KWwZhTY3NE9Oj8KaXodJBcDBPTC9Dm1+HcwfB + yTyxrQqh4eYFEesgOJq3LYhQaFxlSSw1CI7mSdaSWLVVodggOJsneZusEFBtXeB+EDqYz/84gqCqH0bC + IHQwT8o+lyOw6uoQjXcwX/ZpjELw3B9HKSSY9/N4EBLNu0GCQrI9bpGpu7cYCefdJBWExPNukwtiB3cd + jkRb80HoaN6tskHokO8Lo2yWrjvh5Qidz7ldfikUwtuk50dV9jXGHyaWQlGcG1oOBHP7XuslQpGcH+b7 + 05QmFg5465znb3OHDh3aiU6nv6AL+Yl8pM6XAAAAAElFTkSuQmCC + - - ..\Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + 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 + + ..\Resources\android-thin.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Info.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\waiting.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/APKToolGUI/Properties/Settings.Designer.cs b/APKToolGUI/Properties/Settings.Designer.cs index bd32703..043d673 100644 --- a/APKToolGUI/Properties/Settings.Designer.cs +++ b/APKToolGUI/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:4.0.30319.34209 +// 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. // //------------------------------------------------------------------------------ @@ -12,7 +12,7 @@ namespace APKToolGUI.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -24,171 +24,172 @@ public static Settings Default { } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_NoSrc { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_NoSrc { get { - return ((bool)(this["MAIN_Decode_NoSrc"])); + return ((bool)(this["Decode_NoSrc"])); } set { - this["MAIN_Decode_NoSrc"] = value; + this["Decode_NoSrc"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_NoRes { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_NoRes { get { - return ((bool)(this["MAIN_Decode_NoRes"])); + return ((bool)(this["Decode_NoRes"])); } set { - this["MAIN_Decode_NoRes"] = value; + this["Decode_NoRes"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_Force { - get { - return ((bool)(this["MAIN_Decode_Force"])); - } - set { - this["MAIN_Decode_Force"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_UseFramework { + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_Force { get { - return ((bool)(this["MAIN_Decode_UseFramework"])); + return ((bool)(this["Decode_Force"])); } set { - this["MAIN_Decode_UseFramework"] = value; + this["Decode_Force"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Build_ForceAll { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_UseFramework { get { - return ((bool)(this["MAIN_Build_ForceAll"])); + return ((bool)(this["Decode_UseFramework"])); } set { - this["MAIN_Build_ForceAll"] = value; + this["Decode_UseFramework"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_Decode_InputAppPath { + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_ForceAll { get { - return ((string)(this["MAIN_Decode_InputAppPath"])); + return ((bool)(this["Build_ForceAll"])); } set { - this["MAIN_Decode_InputAppPath"] = value; + this["Build_ForceAll"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_Decode_FrameDir { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Decode_InputAppPath { get { - return ((string)(this["MAIN_Decode_FrameDir"])); + return ((string)(this["Decode_InputAppPath"])); } set { - this["MAIN_Decode_FrameDir"] = value; + this["Decode_InputAppPath"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_BuildProjectDir { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string BuildProjectDir { get { - return ((string)(this["MAIN_BuildProjectDir"])); + return ((string)(this["BuildProjectDir"])); } set { - this["MAIN_BuildProjectDir"] = value; + this["BuildProjectDir"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_InstallFramework_InputFramePath { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string InstallFramework_InputFramePath { get { - return ((string)(this["MAIN_InstallFramework_InputFramePath"])); + return ((string)(this["InstallFramework_InputFramePath"])); } set { - this["MAIN_InstallFramework_InputFramePath"] = value; + this["InstallFramework_InputFramePath"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_SIGN_InputFile { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_InputFile { get { - return ((string)(this["MAIN_SIGN_InputFile"])); + return ((string)(this["Sign_InputFile"])); } set { - this["MAIN_SIGN_InputFile"] = value; + this["Sign_InputFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_SIGN_OutputFile { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_OutputDir { get { - return ((string)(this["MAIN_SIGN_OutputFile"])); + return ((string)(this["Sign_OutputDir"])); } set { - this["MAIN_SIGN_OutputFile"] = value; + this["Sign_OutputDir"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Build_UseAapt { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_UseAapt { get { - return ((bool)(this["MAIN_Build_UseAapt"])); + return ((bool)(this["Build_UseAapt"])); } set { - this["MAIN_Build_UseAapt"] = value; + this["Build_UseAapt"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_Build_AaptPath { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Build_AaptPath { get { - return ((string)(this["MAIN_Build_AaptPath"])); + return ((string)(this["Build_AaptPath"])); } set { - this["MAIN_Build_AaptPath"] = value; + this["Build_AaptPath"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("Auto")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] public string Culture { get { return ((string)(this["Culture"])); @@ -199,8 +200,9 @@ public string Culture { } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] public string JavaExe { get { return ((string)(this["JavaExe"])); @@ -211,8 +213,9 @@ public string JavaExe { } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] public global::System.DateTime LastUpdateCheck { get { return ((global::System.DateTime)(this["LastUpdateCheck"])); @@ -223,9 +226,10 @@ public string JavaExe { } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] public bool CheckForUpdateAtStartup { get { return ((bool)(this["CheckForUpdateAtStartup"])); @@ -236,9 +240,10 @@ public bool CheckForUpdateAtStartup { } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] public bool ClearLogBeforeAction { get { return ((bool)(this["ClearLogBeforeAction"])); @@ -249,453 +254,1124 @@ public bool ClearLogBeforeAction { } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool BUILD_ForceAll { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_MatchOriginal { get { - return ((bool)(this["BUILD_ForceAll"])); + return ((bool)(this["Decode_MatchOriginal"])); } set { - this["BUILD_ForceAll"] = value; + this["Decode_MatchOriginal"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool BUILD_CustomAapt { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_KeepBrokenRes { get { - return ((bool)(this["BUILD_CustomAapt"])); + return ((bool)(this["Decode_KeepBrokenRes"])); } set { - this["BUILD_CustomAapt"] = value; + this["Decode_KeepBrokenRes"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string BUILD_AaptPath { + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_CopyOriginal { get { - return ((string)(this["BUILD_AaptPath"])); + return ((bool)(this["Build_CopyOriginal"])); } set { - this["BUILD_AaptPath"] = value; + this["Build_CopyOriginal"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DECOMPILE_NoRes { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_UseFramework { get { - return ((bool)(this["DECOMPILE_NoRes"])); + return ((bool)(this["Build_UseFramework"])); } set { - this["DECOMPILE_NoRes"] = value; + this["Build_UseFramework"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DECOMPILE_NoSrc { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_UseOutputDir { get { - return ((bool)(this["DECOMPILE_NoSrc"])); + return ((bool)(this["Decode_UseOutputDir"])); } set { - this["DECOMPILE_NoSrc"] = value; + this["Decode_UseOutputDir"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DECOMPILE_Force { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Decode_OutputDir { get { - return ((bool)(this["DECOMPILE_Force"])); + return ((string)(this["Decode_OutputDir"])); } set { - this["DECOMPILE_Force"] = value; + this["Decode_OutputDir"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DECOMPILE_UseFramework { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_UseOutputAppPath { + get { + return ((bool)(this["Build_UseOutputAppPath"])); + } + set { + this["Build_UseOutputAppPath"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Build_OutputAppPath { + get { + return ((string)(this["Build_OutputAppPath"])); + } + set { + this["Build_OutputAppPath"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Build_InputDir { get { - return ((bool)(this["DECOMPILE_UseFramework"])); + return ((string)(this["Build_InputDir"])); } set { - this["DECOMPILE_UseFramework"] = value; + this["Build_InputDir"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool BUILD_CopyOriginal { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Framework_UseFrameDir { get { - return ((bool)(this["BUILD_CopyOriginal"])); + return ((bool)(this["Framework_UseFrameDir"])); } set { - this["BUILD_CopyOriginal"] = value; + this["Framework_UseFrameDir"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool BUILD_UseFramework { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool InstallFramework_UseTag { get { - return ((bool)(this["BUILD_UseFramework"])); + return ((bool)(this["InstallFramework_UseTag"])); } set { - this["BUILD_UseFramework"] = value; + this["InstallFramework_UseTag"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string BUILD_FrameworkPath { + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string InstallFramework_Tag { get { - return ((string)(this["BUILD_FrameworkPath"])); + return ((string)(this["InstallFramework_Tag"])); } set { - this["BUILD_FrameworkPath"] = value; + this["InstallFramework_Tag"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Framework_FrameDir { + get { + return ((string)(this["Framework_FrameDir"])); + } + set { + this["Framework_FrameDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("4")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public decimal Zipalign_AlignmentInBytes { + get { + return ((decimal)(this["Zipalign_AlignmentInBytes"])); + } + set { + this["Zipalign_AlignmentInBytes"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DECOMPILE_KeepBrokenResource { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Zipalign_OverwriteOutputFile { get { - return ((bool)(this["DECOMPILE_KeepBrokenResource"])); + return ((bool)(this["Zipalign_OverwriteOutputFile"])); } set { - this["DECOMPILE_KeepBrokenResource"] = value; + this["Zipalign_OverwriteOutputFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool DECOMPILE_MatchOriginal { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Zipalign_CheckOnly { get { - return ((bool)(this["DECOMPILE_MatchOriginal"])); + return ((bool)(this["Zipalign_CheckOnly"])); } set { - this["DECOMPILE_MatchOriginal"] = value; + this["Zipalign_CheckOnly"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_MatchOriginal { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Zipalign_Verbose { + get { + return ((bool)(this["Zipalign_Verbose"])); + } + set { + this["Zipalign_Verbose"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Zipalign_OutputDir { + get { + return ((string)(this["Zipalign_OutputDir"])); + } + set { + this["Zipalign_OutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Zipalign_InputFile { + get { + return ((string)(this["Zipalign_InputFile"])); + } + set { + this["Zipalign_InputFile"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Zipalign_Recompress { + get { + return ((bool)(this["Zipalign_Recompress"])); + } + set { + this["Zipalign_Recompress"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_PublicKey { + get { + return ((string)(this["Sign_PublicKey"])); + } + set { + this["Sign_PublicKey"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_PrivateKey { + get { + return ((string)(this["Sign_PrivateKey"])); + } + set { + this["Sign_PrivateKey"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_OnlyMainClasses { get { - return ((bool)(this["MAIN_Decode_MatchOriginal"])); + return ((bool)(this["Decode_OnlyMainClasses"])); } set { - this["MAIN_Decode_MatchOriginal"] = value; + this["Decode_OnlyMainClasses"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_FixError { + get { + return ((bool)(this["Decode_FixError"])); + } + set { + this["Decode_FixError"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_KeepBrokenRes { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_NoCrunch { get { - return ((bool)(this["MAIN_Decode_KeepBrokenRes"])); + return ((bool)(this["Build_NoCrunch"])); } set { - this["MAIN_Decode_KeepBrokenRes"] = value; + this["Build_NoCrunch"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Build_CopyOriginal { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_NoDebugInfo { + get { + return ((bool)(this["Decode_NoDebugInfo"])); + } + set { + this["Decode_NoDebugInfo"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Framework_ClearBeforeDecode { + get { + return ((bool)(this["Framework_ClearBeforeDecode"])); + } + set { + this["Framework_ClearBeforeDecode"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_ZipalignAfterBuild { get { - return ((bool)(this["MAIN_Build_CopyOriginal"])); + return ((bool)(this["Build_ZipalignAfterBuild"])); } set { - this["MAIN_Build_CopyOriginal"] = value; + this["Build_ZipalignAfterBuild"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_Build_FrameDir { + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_SignAfterBuild { get { - return ((string)(this["MAIN_Build_FrameDir"])); + return ((bool)(this["Build_SignAfterBuild"])); } set { - this["MAIN_Build_FrameDir"] = value; + this["Build_SignAfterBuild"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Build_UseFramework { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Zipalign_UseOutputDir { + get { + return ((bool)(this["Zipalign_UseOutputDir"])); + } + set { + this["Zipalign_UseOutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Zipalign_SignAfterZipAlign { get { - return ((bool)(this["MAIN_Build_UseFramework"])); + return ((bool)(this["Zipalign_SignAfterZipAlign"])); } set { - this["MAIN_Build_UseFramework"] = value; + this["Zipalign_SignAfterZipAlign"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("CERT")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_Alias { + get { + return ((string)(this["Sign_Alias"])); + } + set { + this["Sign_Alias"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Decode_UseOutputDir { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Sign_SetAlias { get { - return ((bool)(this["MAIN_Decode_UseOutputDir"])); + return ((bool)(this["Sign_SetAlias"])); } set { - this["MAIN_Decode_UseOutputDir"] = value; + this["Sign_SetAlias"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - public string MAIN_Decode_OutputDir { + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_CreateUnsignedApk { get { - return ((string)(this["MAIN_Decode_OutputDir"])); + return ((bool)(this["Build_CreateUnsignedApk"])); } set { - this["MAIN_Decode_OutputDir"] = value; + this["Build_CreateUnsignedApk"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Build_UseOutputAppPath { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Sign_UseKeystoreFile { get { - return ((bool)(this["MAIN_Build_UseOutputAppPath"])); + return ((bool)(this["Sign_UseKeystoreFile"])); } set { - this["MAIN_Build_UseOutputAppPath"] = value; + this["Sign_UseKeystoreFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] - public string MAIN_Build_OutputAppPath { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_KeystoreFilePath { get { - return ((string)(this["MAIN_Build_OutputAppPath"])); + return ((string)(this["Sign_KeystoreFilePath"])); } set { - this["MAIN_Build_OutputAppPath"] = value; + this["Sign_KeystoreFilePath"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] - public string MAIN_Build_InputDir { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Sign_KeystorePassword { get { - return ((string)(this["MAIN_Build_InputDir"])); + return ((string)(this["Sign_KeystorePassword"])); } set { - this["MAIN_Build_InputDir"] = value; + this["Sign_KeystorePassword"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_InstallFramework_UseFrameDir { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Sign_UseOutputDir { + get { + return ((bool)(this["Sign_UseOutputDir"])); + } + set { + this["Sign_UseOutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public int Sign_Schemev1 { get { - return ((bool)(this["MAIN_InstallFramework_UseFrameDir"])); + return ((int)(this["Sign_Schemev1"])); } set { - this["MAIN_InstallFramework_UseFrameDir"] = value; + this["Sign_Schemev1"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public int Sign_Schemev2 { + get { + return ((int)(this["Sign_Schemev2"])); + } + set { + this["Sign_Schemev2"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public int Sign_Schemev3 { + get { + return ((int)(this["Sign_Schemev3"])); + } + set { + this["Sign_Schemev3"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public int Sign_Schemev4 { + get { + return ((int)(this["Sign_Schemev4"])); + } + set { + this["Sign_Schemev4"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("4")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public decimal Decode_ApiLevel { + get { + return ((decimal)(this["Decode_ApiLevel"])); + } + set { + this["Decode_ApiLevel"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("29")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public decimal Build_ApiLevel { + get { + return ((decimal)(this["Build_ApiLevel"])); + } + set { + this["Build_ApiLevel"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_InstallFramework_UseTag { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_SetApiLevel { get { - return ((bool)(this["MAIN_InstallFramework_UseTag"])); + return ((bool)(this["Build_SetApiLevel"])); } set { - this["MAIN_InstallFramework_UseTag"] = value; + this["Build_SetApiLevel"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_SetApiLevel { + get { + return ((bool)(this["Decode_SetApiLevel"])); + } + set { + this["Decode_SetApiLevel"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] - public string MAIN_InstallFramework_Tag { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Baksmali_InputDexFile { get { - return ((string)(this["MAIN_InstallFramework_Tag"])); + return ((string)(this["Baksmali_InputDexFile"])); } set { - this["MAIN_InstallFramework_Tag"] = value; + this["Baksmali_InputDexFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] - public string MAIN_InstallFramework_FrameDir { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Smali_OutputDexFile { get { - return ((string)(this["MAIN_InstallFramework_FrameDir"])); + return ((string)(this["Smali_OutputDexFile"])); } set { - this["MAIN_InstallFramework_FrameDir"] = value; + this["Smali_OutputDexFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("4")] - public decimal MAIN_Zipalign_AlignmentInBytes { + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Baksmali_OutputDir { + get { + return ((string)(this["Baksmali_OutputDir"])); + } + set { + this["Baksmali_OutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Baksmali_UseOutputDir { + get { + return ((bool)(this["Baksmali_UseOutputDir"])); + } + set { + this["Baksmali_UseOutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Smali_InputDir { + get { + return ((string)(this["Smali_InputDir"])); + } + set { + this["Smali_InputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Smali_OutputDir { + get { + return ((string)(this["Smali_OutputDir"])); + } + set { + this["Smali_OutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Smali_UseOutputDir { + get { + return ((bool)(this["Smali_UseOutputDir"])); + } + set { + this["Smali_UseOutputDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool IgnoreOutputDirContextMenu { + get { + return ((bool)(this["IgnoreOutputDirContextMenu"])); + } + set { + this["IgnoreOutputDirContextMenu"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_UseAapt2 { + get { + return ((bool)(this["Build_UseAapt2"])); + } + set { + this["Build_UseAapt2"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool PlaySoundWhenDone { + get { + return ((bool)(this["PlaySoundWhenDone"])); + } + set { + this["PlaySoundWhenDone"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool UseCustomTempDir { + get { + return ((bool)(this["UseCustomTempDir"])); + } + set { + this["UseCustomTempDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string TempDir { + get { + return ((string)(this["TempDir"])); + } + set { + this["TempDir"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool UseCustomJavaExe { + get { + return ((bool)(this["UseCustomJavaExe"])); + } + set { + this["UseCustomJavaExe"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool AutoDeleteIdsigFile { + get { + return ((bool)(this["AutoDeleteIdsigFile"])); + } + set { + this["AutoDeleteIdsigFile"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Utf8FilenameSupport { get { - return ((decimal)(this["MAIN_Zipalign_AlignmentInBytes"])); + return ((bool)(this["Utf8FilenameSupport"])); } set { - this["MAIN_Zipalign_AlignmentInBytes"] = value; + this["Utf8FilenameSupport"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Zipalign_OverwriteOutputFile { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Sign_OverwriteInputFile { get { - return ((bool)(this["MAIN_Zipalign_OverwriteOutputFile"])); + return ((bool)(this["Sign_OverwriteInputFile"])); } set { - this["MAIN_Zipalign_OverwriteOutputFile"] = value; + this["Sign_OverwriteInputFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Zipalign_CheckOnly { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Adb_SetVendor { get { - return ((bool)(this["MAIN_Zipalign_CheckOnly"])); + return ((bool)(this["Adb_SetVendor"])); } set { - this["MAIN_Zipalign_CheckOnly"] = value; + this["Adb_SetVendor"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string Adb_SelectedApkPath { + get { + return ((string)(this["Adb_SelectedApkPath"])); + } + set { + this["Adb_SelectedApkPath"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Zipalign_Verbose { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Sign_InstallApkAfterSign { get { - return ((bool)(this["MAIN_Zipalign_Verbose"])); + return ((bool)(this["Sign_InstallApkAfterSign"])); } set { - this["MAIN_Zipalign_Verbose"] = value; + this["Sign_InstallApkAfterSign"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool UseCustomApktool { + get { + return ((bool)(this["UseCustomApktool"])); + } + set { + this["UseCustomApktool"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] - public string MAIN_Zipalign_OutputFile { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string ApktoolPath { + get { + return ((string)(this["ApktoolPath"])); + } + set { + this["ApktoolPath"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public int Theme { + get { + return ((int)(this["Theme"])); + } + set { + this["Theme"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool DebugMode { get { - return ((string)(this["MAIN_Zipalign_OutputFile"])); + return ((bool)(this["DebugMode"])); } set { - this["MAIN_Zipalign_OutputFile"] = value; + this["DebugMode"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Build_NetSecConf { + get { + return ((bool)(this["Build_NetSecConf"])); + } + set { + this["Build_NetSecConf"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool Decode_DontParseApkInfo { + get { + return ((bool)(this["Decode_DontParseApkInfo"])); + } + set { + this["Decode_DontParseApkInfo"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool UseCustomJVMArgs { + get { + return ((bool)(this["UseCustomJVMArgs"])); + } + set { + this["UseCustomJVMArgs"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("-Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.n" + + "io.zipfs.allowDotZipEntry=true")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string CustomJVMArgs { + get { + return ((string)(this["CustomJVMArgs"])); + } + set { + this["CustomJVMArgs"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] - public string MAIN_Zipalign_InputFile { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public string SplitApk_InputFile { get { - return ((string)(this["MAIN_Zipalign_InputFile"])); + return ((string)(this["SplitApk_InputFile"])); } set { - this["MAIN_Zipalign_InputFile"] = value; + this["SplitApk_InputFile"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] + [global::System.Configuration.SettingsProviderAttribute(typeof(Bluegrams.Application.PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool MAIN_Zipalign_Recompress { + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool UseApkeditor { get { - return ((bool)(this["MAIN_Zipalign_Recompress"])); + return ((bool)(this["UseApkeditor"])); } set { - this["MAIN_Zipalign_Recompress"] = value; + this["UseApkeditor"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("bin\\testkey.x509.pem")] - public string MAIN_SIGN_PublicKey { + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int Adb_OverrideAbi { get { - return ((string)(this["MAIN_SIGN_PublicKey"])); + return ((int)(this["Adb_OverrideAbi"])); } set { - this["MAIN_SIGN_PublicKey"] = value; + this["Adb_OverrideAbi"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("bin\\testkey.pk8")] - public string MAIN_SIGN_PrivateKey { + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool Adb_SetOverrideAbi { + get { + return ((bool)(this["Adb_SetOverrideAbi"])); + } + set { + this["Adb_SetOverrideAbi"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("4")] + public decimal Build_Jobs { + get { + return ((decimal)(this["Build_Jobs"])); + } + set { + this["Build_Jobs"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("4")] + public decimal Decode_Jobs { + get { + return ((decimal)(this["Decode_Jobs"])); + } + set { + this["Decode_Jobs"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool Decode_SetJobs { + get { + return ((bool)(this["Decode_SetJobs"])); + } + set { + this["Decode_SetJobs"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool Build_SetJobs { get { - return ((string)(this["MAIN_SIGN_PrivateKey"])); + return ((bool)(this["Build_SetJobs"])); } set { - this["MAIN_SIGN_PrivateKey"] = value; + this["Build_SetJobs"] = value; } } } diff --git a/APKToolGUI/Properties/Settings.settings b/APKToolGUI/Properties/Settings.settings index 46b6595..17fc993 100644 --- a/APKToolGUI/Properties/Settings.settings +++ b/APKToolGUI/Properties/Settings.settings @@ -2,164 +2,299 @@ - + False - + False - - False - - - False + + True - + False - - + + True - + - + - + - + - + - + False - + - + Auto - + - + - + True - + + True + + + False + + + False + + False - + False - + False - + - + False - + + + + + + + + False + + False - + + + + + + + + 4 + + False - + False - + False - + + + + + + + False - + + + + - + + True + + + True + + + False + + False - + + True + + + True + + + True + + False - + + True + + + CERT + + False - + False - + False - + - + + + + False - + + 0 + + + 0 + + + 0 + + + 0 + + + 4 + + + 29 + + False - + + False + + + + + + + + - + False - + - + - + False - + False - - + + False + + + False + + + False - + - - 4 + + False + + + True - + False - + False - + False - + - + + False + + + False + + - + + 0 + + + False + + + False + + + False + + False - - bin\testkey.x509.pem + + -Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true - - bin\testkey.pk8 + + + + + False + + + 0 + + + False + + + 4 + + + 4 + + + False + + + False \ No newline at end of file diff --git a/APKToolGUI/Properties/app.manifest b/APKToolGUI/Properties/app.manifest index fe9bb4e..70eed58 100644 --- a/APKToolGUI/Properties/app.manifest +++ b/APKToolGUI/Properties/app.manifest @@ -1,38 +1,68 @@  - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + + - \ No newline at end of file + + --> + + diff --git a/APKToolGUI/Resources/Done.png b/APKToolGUI/Resources/Done.png index 4a5c5e1..ef01d09 100644 Binary files a/APKToolGUI/Resources/Done.png and b/APKToolGUI/Resources/Done.png differ diff --git a/APKToolGUI/Resources/Error.png b/APKToolGUI/Resources/Error.png new file mode 100644 index 0000000..bd620ac Binary files /dev/null and b/APKToolGUI/Resources/Error.png differ diff --git a/APKToolGUI/Resources/GUI.png b/APKToolGUI/Resources/GUI.png deleted file mode 100644 index 59a013c..0000000 Binary files a/APKToolGUI/Resources/GUI.png and /dev/null differ diff --git a/APKToolGUI/Resources/Info1.png b/APKToolGUI/Resources/Info1.png deleted file mode 100644 index dc30625..0000000 Binary files a/APKToolGUI/Resources/Info1.png and /dev/null differ diff --git a/APKToolGUI/Resources/android-thin.ico b/APKToolGUI/Resources/android-thin.ico index 3926338..a0b3400 100644 Binary files a/APKToolGUI/Resources/android-thin.ico and b/APKToolGUI/Resources/android-thin.ico differ diff --git a/APKToolGUI/Resources/android.png b/APKToolGUI/Resources/android.png index 2d1dc05..493ee84 100644 Binary files a/APKToolGUI/Resources/android.png and b/APKToolGUI/Resources/android.png differ diff --git a/APKToolGUI/Resources/exclamation-red-frame-icon.png b/APKToolGUI/Resources/exclamation-red-frame-icon.png deleted file mode 100644 index 0496522..0000000 Binary files a/APKToolGUI/Resources/exclamation-red-frame-icon.png and /dev/null differ diff --git a/APKToolGUI/Resources/info.png b/APKToolGUI/Resources/info.png new file mode 100644 index 0000000..bc29217 Binary files /dev/null and b/APKToolGUI/Resources/info.png differ diff --git a/APKToolGUI/Resources/waiting.png b/APKToolGUI/Resources/waiting.png index 57b03ce..7f2b317 100644 Binary files a/APKToolGUI/Resources/waiting.png and b/APKToolGUI/Resources/waiting.png differ diff --git a/APKToolGUI/Resources/warning.png b/APKToolGUI/Resources/warning.png index 2ad8493..279d85e 100644 Binary files a/APKToolGUI/Resources/warning.png and b/APKToolGUI/Resources/warning.png differ diff --git a/APKToolGUI/Signapk.cs b/APKToolGUI/Signapk.cs deleted file mode 100644 index 1033920..0000000 --- a/APKToolGUI/Signapk.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using Java; -using System.Diagnostics; - -namespace APKToolGUI -{ - public class Signapk : JarProcess - { - public new event SignapkExitedEventHandler Exited; - public string PublicKeyPath { get; set; } - public string PrivateKeyPath { get; set; } - private string lastSourceApk; - private string lastOutApk; - - public Signapk(string javaPath, string jarPath) - : base(javaPath, jarPath) - { - base.Exited += Signapk_Exited; - } - - void Signapk_Exited(object sender, EventArgs e) - { - if (this.Exited != null) - this.Exited(this, new SignapkExitedEventArgs(base.ExitCode, lastSourceApk, lastOutApk)); - } - - public bool Sign(string sourceApk, string outApk) - { - return Sign(PublicKeyPath, PrivateKeyPath, sourceApk, outApk); - } - - public bool Sign(string publicKeyPath, string privateKeyPath, string sourceApk, string outApk) - { - lastSourceApk = sourceApk; - lastOutApk = outApk; - string args = String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\"", publicKeyPath, privateKeyPath, sourceApk, outApk); - return base.Start(args); - } - } - - public class SignapkExitedEventArgs : EventArgs - { - public SignapkExitedEventArgs(int exitCode, string sourceFilePath, string outFilePath) - { - this.ExitCode = exitCode; - this.SourceFilePath = sourceFilePath; - this.OutFilePath = outFilePath; - } - - public int ExitCode { get; private set; } - public string SourceFilePath { get; private set; } - public string OutFilePath { get; private set; } - } - public delegate void SignapkExitedEventHandler(object sender, SignapkExitedEventArgs e); -} diff --git a/APKToolGUI/TaskBar/TaskBarJumpList.cs b/APKToolGUI/TaskBar/TaskBarJumpList.cs new file mode 100644 index 0000000..9d02d3f --- /dev/null +++ b/APKToolGUI/TaskBar/TaskBarJumpList.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Microsoft.WindowsAPICodePack.Taskbar; +using System.IO; +using System.Reflection; +using Microsoft.WindowsAPICodePack.Shell; +using APKToolGUI.Languages; + +namespace APKToolGUI +{ + public class TaskBarJumpList + { + private JumpList list; + + /// + /// Creating a JumpList for the application + /// + /// + public TaskBarJumpList(IntPtr windowHandle) + { + list = JumpList.CreateJumpListForIndividualWindow(TaskbarManager.Instance.ApplicationId, windowHandle); + list.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent; + BuildList(); + } + + public void AddToRecent(string destination) + { + //Call JumpList.AddToRecent(destination); because of bug + JumpList.AddToRecent(destination); + list.Refresh(); + } + + public void AddTasks(string titleValue, string args) + { + JumpListLink jumpListLink = new JumpListLink(Assembly.GetEntryAssembly().Location, titleValue); + jumpListLink.IconReference = new IconReference(Assembly.GetEntryAssembly().Location, 3); + jumpListLink.Arguments = args; + + list.AddUserTasks(jumpListLink); + } + + /// + /// Builds the Jumplist + /// + private void BuildList() + { + JumpListCustomCategory userActionsCategory = new JumpListCustomCategory("Actions"); + + AddTasks(Language.OpenDecFolder, "opendecfolder"); + AddTasks(Language.OpenComFolder, "opencomfolder"); + + list.Refresh(); + } + } +} diff --git a/APKToolGUI/Utils/AdminUtils.cs b/APKToolGUI/Utils/AdminUtils.cs new file mode 100644 index 0000000..bc00617 --- /dev/null +++ b/APKToolGUI/Utils/AdminUtils.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Principal; +using System.Text; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + public class AdminUtils + { + public static bool IsAdministrator() + { + return (new WindowsPrincipal(WindowsIdentity.GetCurrent())) + .IsInRole(WindowsBuiltInRole.Administrator); + } + } +} diff --git a/APKToolGUI/Utils/BitmapUtils.cs b/APKToolGUI/Utils/BitmapUtils.cs new file mode 100644 index 0000000..a3d701a --- /dev/null +++ b/APKToolGUI/Utils/BitmapUtils.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace APKToolGUI.Utils +{ + internal class BitmapUtils + { + public static Bitmap LoadBitmap(string path) + { + if (File.Exists(path)) + { + // open file in read only mode + using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) + // get a binary reader for the file stream + using (BinaryReader reader = new BinaryReader(stream)) + { + // copy the content of the file into a memory stream + var memoryStream = new MemoryStream(reader.ReadBytes((int)stream.Length)); + // make a new Bitmap object the owner of the MemoryStream + return new Bitmap(memoryStream); + } + } + else + { + return null; + } + } + } +} diff --git a/APKToolGUI/Utils/CMD.cs b/APKToolGUI/Utils/CMD.cs new file mode 100644 index 0000000..558baf3 --- /dev/null +++ b/APKToolGUI/Utils/CMD.cs @@ -0,0 +1,46 @@ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + public class CMD + { + public static string ProcessStartWithOutput(string FileName, string Arguments) + { + Log.d("CMD: " + FileName + " " + Arguments); + + string result = string.Empty; + + try + { + using (Process process = new Process()) + { + process.StartInfo.FileName = FileName; + process.StartInfo.Arguments = Arguments; + process.StartInfo.CreateNoWindow = true; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; + process.StartInfo.UseShellExecute = false; + process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("utf-8"); + process.Start(); + result = process.StandardOutput.ReadToEnd().Trim(); + process.WaitForExit(); + } + } + catch (Exception e) + { + Debug.WriteLine("Start", e); + } + + return result; + } + } +} diff --git a/APKToolGUI/Utils/CommonUtils.cs b/APKToolGUI/Utils/CommonUtils.cs new file mode 100644 index 0000000..fb18eab --- /dev/null +++ b/APKToolGUI/Utils/CommonUtils.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + internal static class CommonUtils + { + public static string GetApplicationNameFromManifest(string decompileFolder) + { + string[] Manifest = File.ReadAllLines(Path.Combine(decompileFolder, "AndroidManifest.xml")); + foreach (string mf in Manifest) + { + if (mf.Contains(" Path.GetDirectoryName(s)); + foreach (var folder in files) + { + var targetFolder = folder.Key.Replace(sourcePath, targetPath); + + //Debug.WriteLine("Create directory: " + folder); + Directory.CreateDirectory(targetFolder); + foreach (var file in folder) + { + var targetFile = Path.Combine(targetFolder, Path.GetFileName(file)); + File.Copy("\\\\?\\" + file, "\\\\?\\" + targetFile, true); + } + } + } + + public static void Move(string source, string target) + { + var sourcePath = source.TrimEnd('\\', ' '); + var targetPath = target.TrimEnd('\\', ' '); + var files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories) + .GroupBy(s => Path.GetDirectoryName(s)); + foreach (var folder in files) + { + var targetFolder = folder.Key.Replace(sourcePath, targetPath); + + //Debug.WriteLine("Create directory: " + folder); + Directory.CreateDirectory(targetFolder); + foreach (var file in folder) + { + var targetFile = Path.Combine(targetFolder, Path.GetFileName(file)); + if (File.Exists(targetFile)) + File.Delete(targetFile); + File.Move(file, targetFile); + } + } + } + + public static void ReplaceinFiles( + string folderPath, + string old, + string replace, + string extenstion = "*" + ) + { + if (Directory.Exists(folderPath)) + { + DirectoryInfo DR = new DirectoryInfo(folderPath); + var filePaths = DR.EnumerateFiles(extenstion, SearchOption.AllDirectories).AsParallel(); + foreach (FileInfo filePath in filePaths) + { + if (File.Exists(filePath.FullName)) + { + string file = File.ReadAllText(filePath.FullName); + if (file.Contains(old)) + { + file = file.Replace(old, replace); + File.WriteAllText(filePath.FullName, file); + } + } + } + } + } + + public static void ReplaceinFilesRegex( + string folderPath, + string pattern, + string replace, + string extenstion = "*" + ) + { + if (Directory.Exists(folderPath)) + { + DirectoryInfo DR = new DirectoryInfo(folderPath); + var filePaths = DR.EnumerateFiles(extenstion, SearchOption.AllDirectories).AsParallel(); + foreach (FileInfo filePath in filePaths) + { + if (File.Exists(filePath.FullName)) + { + string file = File.ReadAllText(filePath.FullName); + if (Regex.IsMatch(file, pattern)) + { + file = Regex.Replace(file, pattern, replace); + File.WriteAllText(filePath.FullName, file); + } + } + } + } + } + + + public static void ReplaceinFilesRegex( + string folderPath, + string[] pattern, + string replace, + string extenstion = "*.*" + ) + { + if (Directory.Exists(folderPath)) + { + DirectoryInfo DR = new DirectoryInfo(folderPath); + var filePaths = DR.EnumerateFiles(extenstion, SearchOption.AllDirectories).AsParallel(); + foreach (FileInfo filePath in filePaths) + { + if (File.Exists(filePath.FullName)) + { + bool match = false; + string file = File.ReadAllText(filePath.FullName); + foreach (string pat in pattern) + { + if (Regex.IsMatch(file, pat)) + { + file = Regex.Replace(file, pat, replace); + match = true; + } + } + if (match) + File.WriteAllText(filePath.FullName, file); + } + } + } + } + + public static void MoveTo(this FileInfo file, string destination, bool autoCreateDirectory) + { + if (autoCreateDirectory) + { + var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination)); + + if (!destinationDirectory.Exists) + destinationDirectory.Create(); + } + + file.MoveTo(destination); + } + } +} diff --git a/APKToolGUI/Utils/DragDropUtils.cs b/APKToolGUI/Utils/DragDropUtils.cs new file mode 100644 index 0000000..9e12f82 --- /dev/null +++ b/APKToolGUI/Utils/DragDropUtils.cs @@ -0,0 +1,120 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Windows.Forms; +using System.Windows.Markup; + +namespace SaveToGameWpf.Logic.Utils +{ + public static class DragDropUtils + { + private static readonly string[] EmptyStrings = new string[0]; + + public static string[] GetFilesDrop(this DragEventArgs args) + { + return (string[])args.Data.GetData(DataFormats.FileDrop) ?? EmptyStrings; + } + + public static string[] GetFilesDrop(this DragEventArgs args, string ending) + { + // ReSharper disable once ConvertIfStatementToReturnStatement + if (string.IsNullOrEmpty(ending)) + return args.GetFilesDrop(); + + return args.GetFilesDrop(it => it.EndsWith(ending, StringComparison.Ordinal)); + } + + public static string[] GetFilesDrop(this DragEventArgs args, Func filter) + { + var items = args.GetFilesDrop(); + + if (items == null) + return EmptyStrings; + + return filter == null ? items : items.Where(filter).ToArray(); + } + + public static void CheckDragEnter(this DragEventArgs e, params string[] extensions) + { + string[] files = e.GetFilesDrop(); + if (extensions == null && Directory.Exists(files[0])) + e.Effect = DragDropEffects.Copy; + else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal))) + e.Effect = DragDropEffects.Copy; + else + e.Effect = DragDropEffects.None; + } + + public static bool CheckDragOver(this DragEventArgs e, params string[] extensions) + { + string[] files = e.GetFilesDrop(); + if (extensions == null && Directory.Exists(files[0])) + { + e.Effect = DragDropEffects.Move; + return true; + } + else if (files.Length == 1 && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal))) + { + e.Effect = DragDropEffects.Move; + return true; + } + e.Effect = DragDropEffects.None; + + return false; + } + + + public static bool CheckManyDragOver(this DragEventArgs e, params string[] extensions) + { + string[] files = e.GetFilesDrop(); + + if (extensions == null && Directory.Exists(files[0])) + { + e.Effect = DragDropEffects.Move; + return true; + } + else if (extensions != null && extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal))) + { + e.Effect = DragDropEffects.Move; + return true; + } + e.Effect = DragDropEffects.None; + + return false; + } + + public static bool DropOneByEnd(this DragEventArgs e, Action onSuccess, params string[] extensions) + { + string[] files = e.GetFilesDrop(); + if (extensions == null && Directory.Exists(files[0])) + { + onSuccess(files[0]); + return true; + } + else if (extensions.Any(ext => files[0].EndsWith(ext, StringComparison.Ordinal))) + { + onSuccess(files[0]); + return true; + } + + return false; + } + + public static bool DropManyByEnd(this DragEventArgs e, Action onSuccess, params string[] extensions) + { + foreach (string apk in extensions) + { + Debug.WriteLine(apk); + string[] files = e.GetFilesDrop(apk); + + if (files.Length > 0) + { + onSuccess(files); + return true; + } + } + return false; + } + } +} diff --git a/APKToolGUI/Utils/ExplorerContextMenu.cs b/APKToolGUI/Utils/ExplorerContextMenu.cs new file mode 100644 index 0000000..56d8a7f --- /dev/null +++ b/APKToolGUI/Utils/ExplorerContextMenu.cs @@ -0,0 +1,163 @@ +using System; +using Microsoft.Win32; +using APKToolGUI.Languages; +using APKToolGUI.Utils; +using Microsoft.Build.Framework.XamlTypes; +using System.Windows.Forms; + +namespace APKToolGUI +{ + public class ExplorerContextMenu + { + public static Status Create() + { + string executablePath = System.Reflection.Assembly.GetExecutingAssembly().Location; + if (AdminUtils.IsAdministrator()) + { + return CreateContextMenu(executablePath); + } + else + return new Status(false, "Administrator rights are required"); + } + + private static Status CreateContextMenu(string executablePath) + { + try + { + #region Add context menu to registry + RegistryKey apkToolGUIFolderShell = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(Application.ProductName, RegistryKeyPermissionCheck.ReadWriteSubTree); + apkToolGUIFolderShell.SetValue("Icon", executablePath); + apkToolGUIFolderShell.SetValue("MUIVerb", Application.ProductName); + apkToolGUIFolderShell.SetValue("SubCommands", "APKToolGUI.Build;APKToolGUI.Smali"); + apkToolGUIFolderShell.Close(); + + CreateFileAssociationsSubKey(executablePath, ".apk", "APKToolGUI.Apkinfo;APKToolGUI.Decompile;APKToolGUI.Sign;APKToolGUI.Zipalign"); + CreateFileAssociationsSubKey(executablePath, ".xapk", "APKToolGUI.Decompile"); + CreateFileAssociationsSubKey(executablePath, ".apks", "APKToolGUI.Decompile"); + CreateFileAssociationsSubKey(executablePath, ".zip", "APKToolGUI.Decompile"); + CreateFileAssociationsSubKey(executablePath, ".apkm", "APKToolGUI.Decompile"); + + CreateFileAssociationsSubKey(executablePath, ".dex", "APKToolGUI.Baksmali"); + #endregion + + #region Add command to registry + RegistryKey shell; + if (Environment.Is64BitOperatingSystem) + shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); + else + shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); + + RegistryKey decompile = shell.CreateSubKey("APKToolGUI.Decompile", RegistryKeyPermissionCheck.ReadWriteSubTree); + decompile.SetValue("", Language.DecompileApk, RegistryValueKind.String); + decompile.SetValue("Icon", executablePath, RegistryValueKind.String); + decompile.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"decapk\" \"%1\""); + decompile.Close(); + + RegistryKey build = shell.CreateSubKey("APKToolGUI.Build", RegistryKeyPermissionCheck.ReadWriteSubTree); + build.SetValue("", Language.CompileApk, RegistryValueKind.String); + build.SetValue("Icon", executablePath, RegistryValueKind.String); + build.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"comapk\" \"%1\"", RegistryValueKind.String); + build.Close(); + + RegistryKey sign = shell.CreateSubKey("APKToolGUI.Sign", RegistryKeyPermissionCheck.ReadWriteSubTree); + sign.SetValue("", Language.SignApk, RegistryValueKind.String); + sign.SetValue("Icon", executablePath, RegistryValueKind.String); + sign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"sign\" \"%1\""); + sign.Close(); + + RegistryKey zipalign = shell.CreateSubKey("APKToolGUI.Zipalign", RegistryKeyPermissionCheck.ReadWriteSubTree); + zipalign.SetValue("", Language.ZipalignApk, RegistryValueKind.String); + zipalign.SetValue("Icon", executablePath, RegistryValueKind.String); + zipalign.CreateSubKey("command", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", "\"" + executablePath + "\" \"zipalign\" \"%1\""); + zipalign.Close(); + + RegistryKey baksmali = shell.CreateSubKey("APKToolGUI.Baksmali", RegistryKeyPermissionCheck.ReadWriteSubTree); + baksmali.SetValue("", Language.DecompileDex, RegistryValueKind.String); + baksmali.SetValue("Icon", executablePath, RegistryValueKind.String); + baksmali.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"baksmali\" \"%1\"", RegistryValueKind.String); + baksmali.Close(); + + RegistryKey smali = shell.CreateSubKey("APKToolGUI.Smali", RegistryKeyPermissionCheck.ReadWriteSubTree); + smali.SetValue("", Language.CompileDex, RegistryValueKind.String); + smali.SetValue("Icon", executablePath, RegistryValueKind.String); + smali.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"smali\" \"%1\"", RegistryValueKind.String); + smali.Close(); + + RegistryKey apkinfo = shell.CreateSubKey("APKToolGUI.Apkinfo", RegistryKeyPermissionCheck.ReadWriteSubTree); + apkinfo.SetValue("", Language.GetApkInfo, RegistryValueKind.String); + apkinfo.SetValue("Icon", executablePath, RegistryValueKind.String); + apkinfo.CreateSubKey("command").SetValue("", "\"" + executablePath + "\" \"viewinfo\" \"%1\"", RegistryValueKind.String); + apkinfo.Close(); + + shell.Close(); + #endregion + } + catch (Exception exc) + { + return new Status(false, exc.Message); + } + + return new Status(true, "Done!"); + } + + public static void CreateFileAssociationsSubKey(string executablePath, string fileExtension, string subCommands) + { + Registry.ClassesRoot.OpenSubKey("SystemFileAssociations", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).CreateSubKey(fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("", executablePath, RegistryValueKind.ExpandString); + + RegistryKey shell = Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\" + fileExtension, RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.CreateSubKey).CreateSubKey("shell", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey(Application.ProductName, RegistryKeyPermissionCheck.ReadWriteSubTree); + + shell.SetValue("Icon", "\"" + executablePath + "\""); + shell.SetValue("MUIVerb", Application.ProductName); + shell.SetValue("SubCommands", subCommands); + shell.Close(); + } + + public static Status Remove() + { + try + { + Registry.ClassesRoot.OpenSubKey(@"Directory\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("APKToolGUI", false); + + Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKeyTree("DefaultIcon", false); + + Registry.ClassesRoot.OpenSubKey(@"SystemFileAssociations\.apk\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl).DeleteSubKey("APKToolGUI", false); + + RegistryKey shell; + if (Environment.Is64BitOperatingSystem) + shell = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); + else + shell = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); + shell.DeleteSubKeyTree("APKToolGUI.Decompile", false); + shell.DeleteSubKeyTree("APKToolGUI.Sign", false); + shell.DeleteSubKeyTree("APKToolGUI.Zipalign", false); + shell.DeleteSubKeyTree("APKToolGUI.Build", false); + shell.DeleteSubKeyTree("APKToolGUI.Baksmali", false); + shell.DeleteSubKeyTree("APKToolGUI.Smali", false); + shell.Close(); + } + catch (Exception exc) + { + return new Status(false, exc.Message); + } + + return new Status(true, "Done!"); + } + + public class Status + { + public Status(bool result, string message) + { + Result = result; + Message = message; + } + public bool Result { get; set; } + public String Message { get; set; } + } + + public enum Action + { + Create, + Remove + } + } +} \ No newline at end of file diff --git a/APKToolGUI/Utils/FileUtils.cs b/APKToolGUI/Utils/FileUtils.cs new file mode 100644 index 0000000..4cff8fe --- /dev/null +++ b/APKToolGUI/Utils/FileUtils.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + internal class FileUtils + { + public static void Move(string sourceFileName, string destFileName, bool overwrite = false) + { + if (File.Exists(destFileName) && overwrite) + File.Delete(destFileName); + File.Move(sourceFileName, destFileName); + } + + public static void Copy(string sourceFileName, string destFileName, bool overwrite = false) + { + if (File.Exists(sourceFileName)) + File.Copy(sourceFileName, destFileName, overwrite); + } + + public static void Delete(string sourceFileName) + { + if (File.Exists(sourceFileName)) + File.Delete(sourceFileName); + } + } +} diff --git a/APKToolGUI/Utils/Log.cs b/APKToolGUI/Utils/Log.cs new file mode 100644 index 0000000..ba99965 --- /dev/null +++ b/APKToolGUI/Utils/Log.cs @@ -0,0 +1,62 @@ +using APKToolGUI; +using APKToolGUI.Properties; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Windows.Media; + +namespace APKToolGUI.Utils +{ + /// + /// simple logging wrapper class + /// + public static class Log + { + /// + /// log message with level VERBOSE (may be disabled) + /// + /// the string to log + public static void v(string s) + { + if (!Settings.Default.DebugMode) return; + FormMain.Instance.ToLog(ApktoolEventType.None, s); + } + + /// + /// log message with level DEBUG (may be disabled) + /// + /// the string to log + public static void d(string s) + { + if (!Settings.Default.DebugMode) return; + FormMain.Instance.ToLog(ApktoolEventType.Infomation, s); + } + + /// + /// log message with level INFO + /// + /// the string to log + public static void i(string s) + { + FormMain.Instance.ToLog(ApktoolEventType.Infomation, s); + } + + /// + /// log message with level WARNING + /// + /// the string to log + public static void w(string s) + { + FormMain.Instance.ToLog(ApktoolEventType.Warning, s); + } + + /// + /// log message with level ERROR + /// + /// the string to log + public static void e(string s) + { + FormMain.Instance.ToLog(ApktoolEventType.Error, s); + } + } +} diff --git a/APKToolGUI/Utils/PathUtils.cs b/APKToolGUI/Utils/PathUtils.cs new file mode 100644 index 0000000..8264168 --- /dev/null +++ b/APKToolGUI/Utils/PathUtils.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + public class PathUtils + { + public static bool IsValidPath(string path) + { + try + { + Path.GetFileName(path); + } + catch (ArgumentException) + { + return false; + } + return true; + + //if (path.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) + // return false; + //else + // return true; + + } + + public static string GetDirectoryNameWithoutExtension(string path) + { + return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path)); + } + + public static string GetRelativePath(string basePath, string fullPath) + { + // Ensure both paths are absolute + basePath = Path.GetFullPath(basePath); + fullPath = Path.GetFullPath(fullPath); + + if (!fullPath.StartsWith(basePath, StringComparison.OrdinalIgnoreCase)) + { + throw new ArgumentException("The fullPath is not within the basePath."); + } + + return fullPath.Substring(basePath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + } + } +} diff --git a/APKToolGUI/Utils/ProcessUtils.cs b/APKToolGUI/Utils/ProcessUtils.cs new file mode 100644 index 0000000..5a5de4e --- /dev/null +++ b/APKToolGUI/Utils/ProcessUtils.cs @@ -0,0 +1,61 @@ +using Microsoft.Build.Utilities; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Management; +using System.Text; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + internal class ProcessUtils + { + public static void KillAllProcessesSpawnedBy(UInt32 parentProcessId) + { + // NOTE: Process Ids are reused! + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher( + "SELECT * " + + "FROM Win32_Process " + + "WHERE ParentProcessId=" + parentProcessId)) + { + using (ManagementObjectCollection collection = searcher.Get()) + { + if (collection.Count > 0) + { + foreach (var item in collection) + { + UInt32 childProcessId = (UInt32)item["ProcessId"]; + if ((int)childProcessId != Process.GetCurrentProcess().Id) + { + Debug.WriteLine($"Kill child process {childProcessId}"); + + // Recursively kill child processes + KillAllProcessesSpawnedBy(childProcessId); + + // Kill and dispose the child process + try + { + using (Process childProcess = Process.GetProcessById((int)childProcessId)) + { + childProcess.Kill(); + } + } + catch (ArgumentException) + { + // Process already exited + Debug.WriteLine($"Process {childProcessId} already exited"); + } + catch (InvalidOperationException ex) + { + // Process is terminating or has exited + Debug.WriteLine($"Process {childProcessId} is terminating: {ex.Message}"); + } + } + } + } + } + } + } + } +} diff --git a/APKToolGUI/Utils/StringExt.cs b/APKToolGUI/Utils/StringExt.cs new file mode 100644 index 0000000..18fccfa --- /dev/null +++ b/APKToolGUI/Utils/StringExt.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; + +namespace APKToolGUI.Utils +{ + public static class StringExt + { + [ThreadStatic] + private static Random threadRandom; + + private static Random ThreadRandom + { + get + { + if (threadRandom == null) + threadRandom = new Random(unchecked(Environment.TickCount * 31 + Thread.CurrentThread.ManagedThreadId)); + return threadRandom; + } + } + + /// + /// Extracts a string from the input using the provided regex pattern. + /// + /// The regex pattern to match. + /// The input string to search. + /// The matched string or empty string if no match found. + public static string RegexExtract(string pattern, string input) + { + Regex regex = new Regex(pattern); + Match matched = regex.Match(input); + return matched.ToString(); + } + + public static string RandStr(int length) + { + const string chars = "abcdefghijklmnopqrstuvwxyz"; + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[ThreadRandom.Next(s.Length)]).ToArray()); + } + + public static string RandStrWithCaps(int length) + { + const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[ThreadRandom.Next(s.Length)]).ToArray()); + } + + /// + /// Method that limits the length of text to a defined length. + /// + /// The source text. + /// The maximum limit of the string to return. + // string limit5 = "The quick brown fox jumped over the lazy dog.".LimitLength(5); + public static string LimitLength(this string source, int maxLength) + { + if (source.Length <= maxLength) + { + return source; + } + + return source.Substring(0, maxLength); + } + + public static IEnumerable SplitByLength(this string str, int maxLength) + { + for (int index = 0; index < str.Length; index += maxLength) + { + yield return str.Substring(index, Math.Min(maxLength, str.Length - index)); + } + } + + public static string RemoveLast(this string text, string character) + { + try + { + if (text.Length < 1) return text; + return text.Remove(text.ToString().LastIndexOf(character), character.Length); + } + catch (ArgumentOutOfRangeException ex) + { + Debug.WriteLine($"[StringExt] Character not found in text: {ex.Message}"); + return text; + } + catch (Exception ex) + { + Debug.WriteLine($"[StringExt] Failed to remove last character: {ex.Message}"); + return text; + } + } + + public static bool ContainsAny(this string haystack, params string[] needles) + { + foreach (string needle in needles) + { + if (haystack.Contains(needle)) + return true; + } + + return false; + } + } +} diff --git a/APKToolGUI/Utils/ZipUtils.cs b/APKToolGUI/Utils/ZipUtils.cs new file mode 100644 index 0000000..8cf287a --- /dev/null +++ b/APKToolGUI/Utils/ZipUtils.cs @@ -0,0 +1,160 @@ +using Ionic.Zip; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Documents; + +namespace APKToolGUI.Utils +{ + public class ZipUtils + { + public static void ExtractAllStream(string path, string embeddedZip) + { + Assembly _assembly = Assembly.GetExecutingAssembly(); + Stream _zipFileStream = _assembly.GetManifestResourceStream(embeddedZip); + using (ZipFile zipFile = ZipFile.Read(_zipFileStream)) + { + zipFile.ExtractAll(path); + } + } + + public static string GetFileName(string path, string fileNameContains, string folderContains = "") + { + using (ZipFile zipDest = ZipFile.Read(path)) + { + foreach (ZipEntry entry in zipDest.Entries) + { + if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains)) + return Path.GetFileName(entry.FileName); + } + } + return ""; + } + + public static string GetFileNameWithoutExtension(string path, string fileNameContains, string folderContains = "") + { + using (ZipFile zipDest = ZipFile.Read(path)) + { + foreach (ZipEntry entry in zipDest.Entries) + { + if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains)) + return Path.GetFileNameWithoutExtension(entry.FileName); + } + } + return ""; + } + public static bool Exists(string path, string fileNameContains, string folderContains = "") + { + using (ZipFile zipDest = ZipFile.Read(path)) + { + foreach (ZipEntry entry in zipDest.Entries) + { + if (entry.FileName.Contains(fileNameContains) && String.IsNullOrEmpty(folderContains)) + return true; + else if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains)) + return true; + } + } + return false; + } + + public static void AddFile(string zipFile, string fileName, string directoryPathInArchive = "") + { + using (ZipFile zip = ZipFile.Read(zipFile)) + { + if (!String.IsNullOrEmpty(directoryPathInArchive)) + zip.AddFile(fileName, directoryPathInArchive); + else + zip.AddFile(fileName); + zip.Save(); + } + } + + public static void UpdateFile(string zipFile, string fileName, string directoryPathInArchive = "") + { + using (ZipFile zip = ZipFile.Read(zipFile)) + { + if (!String.IsNullOrEmpty(directoryPathInArchive)) + zip.UpdateFile(fileName, directoryPathInArchive); + else + zip.UpdateFile(fileName); + zip.Save(); + } + } + + public static void RemoveFile(string zipFile, string fileName) + { + using (ZipFile zip = ZipFile.Read(zipFile)) + { + bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName)); + if (chkresult2) + { + zip.RemoveEntry(fileName); + zip.Save(); + } + } + } + + public static void ExtractFile(string path, string fileName, string destination) + { + using (ZipFile zip = ZipFile.Read(path)) + { + bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName)); + if (chkresult2) + { + zip.FlattenFoldersOnExtract = true; + ZipEntry e = zip[fileName]; + e.Extract(destination, ExtractExistingFileAction.OverwriteSilently); + } + } + } + + public static void ExtractAll(string path, string destination, bool flattenFoldersOnExtract = false) + { + using (ZipFile zip = ZipFile.Read(path)) + { + zip.FlattenFoldersOnExtract = flattenFoldersOnExtract; + zip.ExtractAll(destination, ExtractExistingFileAction.OverwriteSilently); + } + } + + public static void AddDirectory(string path, string fileName, string directoryPathInArchive = "") + { + ZipFile zip = new ZipFile(); + if (!String.IsNullOrEmpty(directoryPathInArchive)) + zip.AddDirectory(fileName, directoryPathInArchive); + else + zip.AddDirectory(fileName); + zip.Save(path); + } + + public static void UpdateDirectory(string path, string dirName, string directoryPathInArchive = "") + { + using (ZipFile zip = ZipFile.Read(path)) + { + if (!String.IsNullOrEmpty(directoryPathInArchive)) + zip.UpdateDirectory(dirName, directoryPathInArchive); + else + zip.UpdateDirectory(dirName); + zip.Save(); + } + } + + public static void ExtractDirectory(string path, string folderName, string destination, bool flattenFoldersOnExtract = false) + { + using (ZipFile zip = ZipFile.Read(path)) + { + zip.FlattenFoldersOnExtract = flattenFoldersOnExtract; + foreach (ZipEntry e in zip.Where(x => x.FileName.Contains(folderName))) + { + e.Extract(destination, ExtractExistingFileAction.OverwriteSilently); + } + } + } + + } +} \ No newline at end of file diff --git a/APKToolGUI/UpdateChecker.cs b/APKToolGUI/Web/UpdateChecker.cs similarity index 77% rename from APKToolGUI/UpdateChecker.cs rename to APKToolGUI/Web/UpdateChecker.cs index dfaf617..4674040 100644 --- a/APKToolGUI/UpdateChecker.cs +++ b/APKToolGUI/Web/UpdateChecker.cs @@ -1,4 +1,5 @@ -using System; +using APKToolGUI.Languages; +using System; using System.ComponentModel; using System.Net; @@ -30,9 +31,11 @@ private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerComplet private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { Version latestVersion = null; + string changelog = null; try { latestVersion = GetVersion(); + changelog = GetChangelog(); } catch (Exception exc) { @@ -42,13 +45,13 @@ private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { if (CompareVersion(latestVersion)) { - e.Result = new Result(State.NeedUpdate, latestVersion.ToString(), (bool)e.Argument); + e.Result = new Result(State.NeedUpdate, latestVersion.ToString(), (bool)e.Argument, changelog); } else e.Result = new Result(State.NoUpdate, null, (bool)e.Argument); } else - e.Result = new Result(State.Error, "Error version parsing", (bool)e.Argument); + e.Result = new Result(State.Error, Language.ErrorVersionParsing, (bool)e.Argument); } private bool CompareVersion(Version latestVersion) @@ -82,6 +85,17 @@ private Version GetVersion() return null; } + private string GetChangelog() + { + string changelog; + using (WebClient webClient = new WebClient()) + { + changelog = webClient.DownloadString("https://repo.andnixsh.com/tools/APKToolGUI/changelog.txt"); + } + + return changelog; + } + public enum State { NoUpdate, @@ -91,15 +105,17 @@ public enum State public class Result { - public Result(State state, string message, bool silently) + public Result(State state, string message, bool silently, string changelog = null) { - this.State = state; - this.Message = message; - this.Silently = silently; + State = state; + Message = message; + Silently = silently; + Changelog = changelog; } public State State { get; private set; } public string Message { get; private set; } public bool Silently { get; private set; } + public string Changelog { get; private set; } } } } diff --git a/APKToolGUI/Web/WebDownload.cs b/APKToolGUI/Web/WebDownload.cs new file mode 100644 index 0000000..d5d5e9a --- /dev/null +++ b/APKToolGUI/Web/WebDownload.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace APKToolGUI.Web +{ + public class WebDownload : WebClient + { + /// + /// Time in milliseconds + /// + public int Timeout { get; set; } + + public WebDownload() : this(15000) { } + + public WebDownload(int timeout) + { + this.Timeout = timeout; + } + + protected override WebRequest GetWebRequest(Uri address) + { + var request = base.GetWebRequest(address); + if (request != null) + { + request.Timeout = this.Timeout; + } + return request; + } + } +} diff --git a/APKToolGUI/Zipalign.cs b/APKToolGUI/Zipalign.cs deleted file mode 100644 index 71108ae..0000000 --- a/APKToolGUI/Zipalign.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Diagnostics; - -namespace APKToolGUI -{ - public class Zipalign - { - string _zipalignPath; - Process processZipalign; - static class Keys - { - public const string CheckOnly = " -c"; - public const string OverwriteOutputFile = " -f"; - public const string VerboseOut = " -v"; - public const string Recompress = " -z"; - } - - public ZipalignOptions Options { get; set; } - public event DataReceivedEventHandler OutputDataReceived - { - add { processZipalign.OutputDataReceived += value; } - remove { processZipalign.OutputDataReceived -= value; } - } - public event DataReceivedEventHandler ErrorDataReceived - { - add { processZipalign.ErrorDataReceived += value; } - remove { processZipalign.ErrorDataReceived -= value; } - } - public event EventHandler Exited; - public int ExitCode { get { return processZipalign.ExitCode; } } - - public Zipalign(string zipalignFileName) - { - _zipalignPath = zipalignFileName; - processZipalign = new Process(); - processZipalign.EnableRaisingEvents = true; - processZipalign.StartInfo.FileName = zipalignFileName; - processZipalign.StartInfo.UseShellExecute = false; //отключаем использование оболочки, чтобы можно было читать данные вывода - processZipalign.StartInfo.RedirectStandardOutput = true; // разрешаем перенаправление данных вывода - processZipalign.StartInfo.RedirectStandardError = true; // разрешаем перенаправление данных вывода - processZipalign.StartInfo.CreateNoWindow = true; //запрещаем создавать окно для запускаемой программы - processZipalign.Exited += processZipalign_Exited; - } - - void processZipalign_Exited(object sender, EventArgs e) - { - processZipalign.CancelOutputRead(); - processZipalign.CancelErrorRead(); - if (this.Exited != null) - Exited(this, new EventArgs()); - } - - public bool Align(ZipalignOptions options) - { - this.Options = options; - string keyCheckOnly = null, keyVerbose = null, keyRecompress = null, keyOverwriteOutputFile = null, keyOutputFile = null; - - if (options.VerboseOut) - keyVerbose = Keys.VerboseOut; - if (options.CheckOnly) - { - keyCheckOnly = Keys.CheckOnly; - } - else - { - if(options.Recompress) - keyRecompress = Keys.Recompress; - if (options.OverwriteOutputFile) - keyOverwriteOutputFile = Keys.OverwriteOutputFile; - keyOutputFile = String.Format(" \"{0}\"", options.OutputFile); - } - - string args = String.Format("{0}{1}{2}{3} {4} \"{5}\"{6}", keyCheckOnly, keyOverwriteOutputFile, keyVerbose, keyRecompress, options.AlignmentInBytes, options.InputFile, keyOutputFile); - - processZipalign.StartInfo.Arguments = args; - bool started = processZipalign.Start(); - processZipalign.BeginOutputReadLine(); - processZipalign.BeginErrorReadLine(); - return started; - } - } - - public class ZipalignOptions - { - public ZipalignOptions(string inputFile, int alignmentInBytes) - { - this.InputFile = inputFile; - this.AlignmentInBytes = alignmentInBytes; - } - - public string InputFile { get; set; } - public string OutputFile { get; set; } - public int AlignmentInBytes { get; set; } - public bool CheckOnly { get; set; } - public bool OverwriteOutputFile { get; set; } - public bool Recompress { get; set; } - public bool VerboseOut { get; set; } - } -} diff --git a/APKToolGUI/android-thin.ico b/APKToolGUI/android-thin.ico new file mode 100644 index 0000000..a0b3400 Binary files /dev/null and b/APKToolGUI/android-thin.ico differ diff --git a/APKToolGUI/android.ico b/APKToolGUI/android.ico deleted file mode 100644 index bd25179..0000000 Binary files a/APKToolGUI/android.ico and /dev/null differ diff --git a/APKToolGUI/app.config b/APKToolGUI/app.config index 197a52f..8a10d09 100644 --- a/APKToolGUI/app.config +++ b/APKToolGUI/app.config @@ -1,171 +1,343 @@ - + -
+
- + False - + False - - False - - - False + + True - + False - - + + True - - + + - - + + - - + + - - + + - - + + - + False - - + + Auto - + - + True + True + + + False + + + False + + False - + False - + False - - + + + + + False + + + + + + + + + False + + + False + + + + + + + + + 4 + + + False + + + False + + + False + + + + + + + + + False + + + + + + + + + True + + + True + + + False - + False - + + True + + + True + + + True + + False - + + True + + + CERT + + False - + False - + False - + + + + + + + False - - + + 0 - + + 0 + + + 0 + + + 0 + + + 4 + + + 29 + + False - + False - + + + + + + + + + + False - + + + + + + + False - + False - - + + False - + False - + + False + + + + + False - - + + True - + False - - + + False - - + + False - + + + + False - + False - - + + - - + + 0 - - 4 + + False - + False - + False - + False - - + + -Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true - - + + - + False - - bin\testkey.x509.pem + + 0 + + + False + + + 4 + + + 4 - - bin\testkey.pk8 + + False + + + False - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/APKToolGUI/packages.config b/APKToolGUI/packages.config new file mode 100644 index 0000000..962013d --- /dev/null +++ b/APKToolGUI/packages.config @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/APKToolGUI/tools/apktool.jar b/APKToolGUI/tools/apktool.jar deleted file mode 100644 index c1febb8..0000000 Binary files a/APKToolGUI/tools/apktool.jar and /dev/null differ diff --git a/APKToolGUI/tools/signapk.jar b/APKToolGUI/tools/signapk.jar deleted file mode 100644 index 967e07c..0000000 Binary files a/APKToolGUI/tools/signapk.jar and /dev/null differ diff --git a/APKToolGUI/tools/zipalign.exe b/APKToolGUI/tools/zipalign.exe deleted file mode 100644 index 761b22b..0000000 Binary files a/APKToolGUI/tools/zipalign.exe and /dev/null differ diff --git a/Assets/Image.png b/Assets/Image.png new file mode 100644 index 0000000..bcbafb6 Binary files /dev/null and b/Assets/Image.png differ diff --git a/Assets/add-language-VS2022.mp4 b/Assets/add-language-VS2022.mp4 new file mode 100644 index 0000000..da7b807 Binary files /dev/null and b/Assets/add-language-VS2022.mp4 differ diff --git a/Assets/android.png b/Assets/android.png new file mode 100644 index 0000000..59f43e2 Binary files /dev/null and b/Assets/android.png differ diff --git a/Assets/ic_launcher_round.webp b/Assets/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/Assets/ic_launcher_round.webp differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fdddb29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000..6077ac9 --- /dev/null +++ b/README.md @@ -0,0 +1,124 @@ +# APK Tool GUI +![](Assets/Image.png) + +[![](https://img.shields.io/github/downloads/AndnixSH/APKToolGUI/total?style=for-the-badge)](https://github.com/AndnixSH/APKToolGUI/releases) [![](https://img.shields.io/github/v/release/andnixsh/APKToolGUI?style=for-the-badge)](https://github.com/AndnixSH/APKToolGUI/releases) + +GUI for apktool, signapk, zipalign and baksmali utilities. + +It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc. + +# Download links +https://github.com/AndnixSH/APKToolGUI/releases + +Any alert from your antivirus regarding this application is a **false positive**, caused by how the application operates. To resolve this, manually add **APKToolGUI.exe** to your antivirus’s whitelist or exclusion list. + +If you remain unsure, you can compile the app yourself or refrain from using it until you confirm its safety with your antivirus provider. + +# Requirements +- Windows 7 32-bit/64-bit and above +- [Java](https://www.java.com/en/) or [JDK](https://www.oracle.com/java/technologies/downloads/) 8 or above. Using latest JDK is not really necessary. Java 8 and 17 (long-term support release) is enough. Use 64-bit version if your system is 64-bit +- [.NET Framework 4.8](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48) (Windows 8 and above already have it preinstalled) + +# Features +- Decompile & compile APK using Apktool +- Decompile APK/XAPK/APKS/ZIP/APKM & compile APK using APKEditor.jar. Automatically detect if APK was decompiled using Apktool or APKEditor +- Merge XAPK/APKS/ZIP/APKM using APKEditor.jar +- Sign APK +- Zipalign APK +- ADB +- Framework +- Drag and drop +- APK info +- Log output +- All other features from [Apktool](https://ibotpeaches.github.io/Apktool/documentation/). +- Fix some Apktool errors, such as removing DUMMY_APKTOOL, clear framework before decompiling +- Multi language +- Right-click context menu +- Create unsigned APK for Core Patch +- High DPI support +- Long path support (Windows 10 and above) + +# Languages +- English +- Brazilian Portuguese (Incomplete) +- Hungary (Incomplete) +- Russian (Incomplete) +- Chinese Simplified (Incomplete) +- German + +### Translation +If you like to help translate with your native language, I recommend using Visual Studio 2022. You don't need any programming knowledge, you just edit the GUI and the `.resx` files + +Create new `.resx` file under `Languages` folder, and `Forms/FormXXX.cs/`. To create a new `.resx` under `Forms/FormXXX.cs/`, open the form and select the form to show the properties. In the properties, scroll down until you see Language, and select any language you would like to translate. + +
+ +Video tutorial + +https://user-images.githubusercontent.com/40742924/227244601-6f796141-ac2d-4c60-b5cd-7f6872604cd7.mp4 + +
+ +If you can't use Visual Studio, you can use translator tools like [resxtranslator](https://github.com/HakanL/resxtranslator) or [RESX Translator automat](https://www.utilstudio.com/en/resx-translator/), but make sure the `.resx` file is added to [APKToolGUI.csproj](https://github.com/AndnixSH/APKToolGUI/blob/master/APKToolGUI/APKToolGUI.csproj), otherwise Visual Studio would not be able to detect it + +3rd party tools can't be translated. + +Make pull request when you are done + +# Issues +Issues with Apktool? Please do cursory search of the issue tracker of [Apktool](https://github.com/iBotPeaches/Apktool/issues?q=is%3Aissue) and [Baksmali](https://github.com/JesusFreke/smali/issues?q=is%3Aissue), see if your question may be answered + +For Framework/system apps related issues, check on [XDA Forum](https://forum.xda-developers.com/) + +**Some apps may been protected or obfuscated for content protection purposes or against cheaters. Bypassing of such is beyond the scope of this tool, so please DO NOT post an issue regarding to it. This tool does not support bypassing such protections, and never will be!** + +Anything else, [create a new issue](https://github.com/AndnixSH/APKToolGUI/issues) + +# FAQ +##### Can it be ported to macOS or Linux? +Microsoft has not made it easy to port, and .NET Core remains impractical for this purpose. While I could use Avalonia UI as an alternative, I currently don’t have the time to port the entire project. Pull requests are welcome! + +In the meantime, you can use [WineHQ](https://www.winehq.org/) or similar tools to run the .exe file. + +##### How to update Apktool? +Download [Apktool.jar](https://github.com/iBotPeaches/Apktool/releases) and replace it on Resources folder + +##### How to update Baksmali/Smali? +Download [Baksmali.jar/Smali.jar](https://bitbucket.org/JesusFreke/smali/downloads/) and replace it on Resources folder + +##### How to reset? +Simply delete the config.xml file from the directory of the executeable + +##### Can you help me with modding APKs in general? +No, I do not provide support for APK modding. + +##### Can you make an automatic APK injecting tool? +No, I'm not interested. + +##### Can you implement APK to AAB conversion? +No, APKTool is designed for decompiling and recompiling APKs, not for converting between formats. AAB (Android App Bundle) is used exclusively for distributing apps on the Google Play Store and is not directly installable on devices. + +If you need to convert an APK to AAB, you can try using a tool like [APK2AAB](https://github.com/sensei-z/APK2AAB) + +##### Can you implement features to protect, pack, or obfuscate APKs? +No, APK protection is beyond the scope of this tool. + +##### Can you implement features to deobfuscate, unpack APKs, or bypass anti-cheat/security? +No, these features are also beyond the scope of this tool. I do not support or condone bypassing such protections. + +# Development +This project is written in C# + +Use Visual Studio 2019 and above. NET Framework 4.8 SDK is required + +# Credits +- AndnixSH +- INF1NUM (Original author of [APKToolGUI](https://github.com/INF1NUM/APKToolGUI)) +- iBotPeaches ([Apktool CLI](https://ibotpeaches.github.io/Apktool/)) +- REAndroid ([APKEditor](https://github.com/REAndroid/APKEditor)) + +# Disclaimer +Same as Apktool by iBotPeaches, It is NOT intended for piracy and other non-legal uses. It could be used for localizing, adding some features or support for custom platforms and other GOOD purposes. Just try to be fair with authors of an app, that you use and probably like. + +# License +The original repo does not have a license but I have permission from the author to use ane distribute this project as "open source"... I don't know what license to use so I'll just add license as unlicensed diff --git a/Tools/APKEditor.jar b/Tools/APKEditor.jar new file mode 100644 index 0000000..25f8858 Binary files /dev/null and b/Tools/APKEditor.jar differ diff --git a/Tools/AdbWinApi.dll b/Tools/AdbWinApi.dll new file mode 100644 index 0000000..1da794e Binary files /dev/null and b/Tools/AdbWinApi.dll differ diff --git a/Tools/AdbWinUsbApi.dll b/Tools/AdbWinUsbApi.dll new file mode 100644 index 0000000..7f75aec Binary files /dev/null and b/Tools/AdbWinUsbApi.dll differ diff --git a/Tools/aapt.exe b/Tools/aapt.exe new file mode 100644 index 0000000..cb263cd Binary files /dev/null and b/Tools/aapt.exe differ diff --git a/Tools/aapt2.exe b/Tools/aapt2.exe new file mode 100644 index 0000000..9f36f12 Binary files /dev/null and b/Tools/aapt2.exe differ diff --git a/Tools/adb.exe b/Tools/adb.exe new file mode 100644 index 0000000..34a0fd2 Binary files /dev/null and b/Tools/adb.exe differ diff --git a/Tools/apksigner.jar b/Tools/apksigner.jar new file mode 100644 index 0000000..0e297b7 Binary files /dev/null and b/Tools/apksigner.jar differ diff --git a/Tools/apktool.jar b/Tools/apktool.jar new file mode 100644 index 0000000..ec66018 Binary files /dev/null and b/Tools/apktool.jar differ diff --git a/Tools/baksmali.jar b/Tools/baksmali.jar new file mode 100644 index 0000000..8eff5bd Binary files /dev/null and b/Tools/baksmali.jar differ diff --git a/Tools/libwinpthread-1.dll b/Tools/libwinpthread-1.dll new file mode 100644 index 0000000..4f2f43c Binary files /dev/null and b/Tools/libwinpthread-1.dll differ diff --git a/Tools/smali.jar b/Tools/smali.jar new file mode 100644 index 0000000..7f5aa5e Binary files /dev/null and b/Tools/smali.jar differ diff --git a/APKToolGUI/tools/testkey.pk8 b/Tools/testkey.pk8 similarity index 100% rename from APKToolGUI/tools/testkey.pk8 rename to Tools/testkey.pk8 diff --git a/APKToolGUI/tools/testkey.x509.pem b/Tools/testkey.x509.pem similarity index 100% rename from APKToolGUI/tools/testkey.x509.pem rename to Tools/testkey.x509.pem diff --git a/Tools/zipalign.exe b/Tools/zipalign.exe new file mode 100644 index 0000000..adf6260 Binary files /dev/null and b/Tools/zipalign.exe differ diff --git a/changelog.txt b/changelog.txt index a048719..f73c30e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,65 +1,263 @@ +3.3.2.1 +- Updated APKEditor to 1.4.5 +- Updated Apktool to 2.12.1 +- Updated Aapt & Zipalign +- Fixed *.zip and *.apkm not selectable for merging +- Export image when clicking on icon box in APK Info + +3.3.2.0 +- Remove flickering fix due to tabs flickering in Russian language. I will look into WPF for modern UI instead +- Updated tools (Apktool, APKEditor, AAPT, etc.) to latest versions +- Fixed issues that *.zip and *.apkm are not selectable +- Partially added Japanese language +- Partially added Turkish language +- Updated Vietnamese language +- Updated German language + +Note: "Use Aapt2" must be disabled for Apktool 2.12.0 and above + +3.3.1.6 +- Fixed APK installation issue (Revert back to DotNetZip but using ProDotNetZip for fixed vulnerability) +- Update packages +- Reduced UI flickering +- Removed APK links that are no longer available +- Fixed icon not displaying. It will load icon from Play Store as a last resort +- Faster apk parsing + +3.3.1.5 +- Updated Apktool and Apkeditor to latest version +- Splitter between logs box and tab window is now draggable +- Fixed an issue with creating unsigned APK + +3.3.1.4 +- Fixed issues adding original signature back to unsigned APK +- Fixed a critical vulnerability by removing DotNetZip library and transition to System.IO.Compression +- Added option to set threads +- Added Vietnamese language +- Updated Chinese Simplified language + +3.3.1.3 +- Updated APKTool to 2.10.0, APKEditor to 1.4.0 and all other tools +- Minor fixes of drag and drop on merge APK section +- Support window resizing +- Fixed issue decompiling split apk using Apkeditor + +3.3.1.2 +- Option to override ABI for ADB +- Fixed Target SDK showing wrong API level +- Target SDK will detect up to API level 35/Android 15 + +3.3.1.1 +- Fixed buttons not ungraying after ADB installation +- Fixed "Merge APK" button not greying out during the process +- Updated German language + +3.3.1.0 +- Updated dependencies +- Print exceptions +- Support decompiling/compiling using ApkEditor +- Adjust settings saving +- Merge split APK to single APK without decompiling +- Added german language +- Updated Apktool to 2.9.3 +- Updated APKeditor to 1.3.4 +- Print APKEditor version + +3.3.0.1 +- Fixed an issue that caused installation fail after compiling + +3.3.0.0 +- Updated Simplified Chinese translation +- Removed android.intent.action.MAIN from "Fix ApkTool errors after decompile" +- Updated tools (apktool.jar (2.8.1), APKEditor.jar (1.3.2), aapt.exe (SDK 34), aapt2.exe (SDK 34), adb.exe (34.0.4-10411341), apksigner.jar (SDK 34), zipalign.exe (SDK 34)) +- Added debug mode to print more logs +- Fixed java version +- "Fix ApkTool errors after decompile" No longer change target SDK to 29 +- Added option to clear temp folder +- Improve dark theme a bit +- Added option to not parse APK info when selecting APK for decompiling +- Fixed sign after zipalign +- Added option to open new Instance +- Added jump list +- Parse alt-native-code from aapt +- Added custom JVM args +- All settings portable +- Move labels to tooltips to keep UI clean +- Change sparseResources to false for "Fix ApkTool errors after decompile" +- Fix crash when drag and dropping APK file + +If you are using Java 20 and encountered "Invalid CEN header (invalid zip64 extra data field size)" error, enable "custom JVM arguments" in settings to temporary fix this issue. See issue #13 on Github repo + +3.2.2.0 +- Dark theme (Currently there is no dark scrollbar, and tabs looks quite ugly) +- Fix crash when dropping decompiled APK on compile panel +- Added View APK info in context menu (You must reinstall context menu) +- Fixed attempting to install APK even it's disabled +- Updated APKEditor.jar to 1.2.0 + +3.2.1.0 +- Fixed an error when decompiling split APK for the second time +- Updated Russian language +- Updated Hungarian language +- Updated dependencies +- Make log output read only +- Updated resources: aapt.exe, aapt2.exe, apksigner.jar, zipalign.exe, adb.exe +- Removed libaapt2_jni.dll + +3.2.0.0 +- Added split APK merging (Build-in and APKEditor.jar) for decompilation. APKEditor.jar is set to default +- Added incompleted Hungarian translation +- Added incompleted Portuguese translation +- Improve performance +- Improve Java logic +- Added launcable activity text box +- Improve directory logic +- Support high DPI +- Support long path (Windows 10 and above) +- Use own framework path to avoid conflict with other tools +- Allow drop multiple files +- Status bar is clickable to cancel the process +- Added ADB to install APK +- Clean up log calls +- Kill process by clicking on status bar +- Option to use custom apktool path +- Added menu item "Report an issue" +- Fixed issue that caused some anti-virus to detect as virus. It's false positive +- Fixed crash if Java is not installed + +3.1.0.0 +- Disable maximize +- Sign after align settings fixed +- Sign after align enabled by default +- Update dependencies +- Added incomplete Chinese Simplified language +- Prevent error with apkinfo when file is not found +- Make config fully portable +- Fixed "Do not decode sources" +- Added chinese language. It is currently incomplete +- Simple log output +- Added UTF-8 filename support workaround. It will move to temp folder so it will process slower +- Fixed paths of baksmali +- Improved temp logic +- Improved Java logic +- Improved Apkinfo +- Added option to overwrite input apk of signing +- Updated apktool to 2.7.0 +- Updated apksigner, aapt, and zipalign + +3.0.2.0 +- Bring back status bar. VS kept messing up with the design for some reason +- Added timelapse +- Added taskbar progress +- Play sound when done (OFF by default) +- Grid no longer sortable + +3.0.1.0 +- Fix filename to signed APK +- Fix minimum API changer +- Added button to open decompile project output folder +- Added "use aapt2" + +3.0.0.2 +- Fix APK input for decompilation +- Save log in temp folder + +3.0.0.1 +- Show changelog on update prompt +- Implement unsigned APK creation after compile. Totally forgotten it +- Compiled APK named "signed" instead "compiled" when signng after compile + +3.0.0.0 +- Updated apktool to 2.6.1 +- Updated apksinger, aapt, and zipalign to SDK 31 +- Detect installed Java +- Word wrap in log box +- Upgrade to .NET 4.8. XP and Vista support will be removed +- Removed .jar and .zip signing +- Modern folder browser dialog +- Removed all exited event handler. It is buggy +- Added button to open selected APK, decompiled APK, compiled APK, signed APK and aligned APK location +- Added button to open AndroidManifest.xml, apktool.xml and main activity smali +- Added Sign after compile +- Added Zipalign after compile +- Added Button to clear framework +- Added Clear framework before decompile +- APK info with icon and links to Playstore, Apkcombo and APKpure +- Added option no crunching on build +- Added options to use keystore file to sign APK +- Added APK scheme version selections +- Added option to save log as file +- Removed mini forms +- Added .dex for context menu +- Added baksmali +- Added framework cleaning +- Added option to ignore output directory options for context menu +- New modern icons + +--------------------------------------------------------------------- + 2.4.0.0 - "" apktool. - apktool. +Once again, the "wrapper" for apktool has been completely rewritten. +Added several options to apktool. 2.3.3.1 - . +Fixed window freezing when starting the program. 2.3.3.0 - (-20% ). +Graphic resource optimization (-20% executable file size). 2.3.2.0 - - . - +Added an optional ability to clear the event log before performing an action +Added the ability to clear the event log from the context menu of the log. +The ability to select files of any type has been added to the file selection dialogs for decompilation and signing 2.3.1.2 - +Fixed file type detection when signing from the main program window 2.3.1.1 - . +Fixed progressbar in window from context menu. 2.3.1.0 -+ . ++ Now the program settings are stored in the program directory. 2.3.0.1 -- / -- / Windows XP +- Fixed window appearance when installing/removing context menu +- Fixed error installing/removing context menu on Windows XP 2.3.0.0 -+ , -+ -+ ( , ). . -+ -- -- . ++ New log, more readable ++ Statusbar ++ Check for updates at startup (but not more than once a day). Disabled in settings. ++ Added the ability to specify a custom location in case of an unsuccessful Java search +- Slightly accelerated the launch of the program +- Another refactoring and optimization. 2.2.1.0 -- -- . -+ zip- -+ zipalign.exe -- +- Fixed a bug when closing the program in case of an unsuccessful search for the location of Java +- Fixed a bug where restarting a running task would cause the program to crash. ++ Added ability to sign zip archives ++ Updated zipalign.exe +- Minor optimizations and refactorings 2.2.0.0 -- -- -+ Java Runtime () -+ Java Runtime () -+ apktool -- +- Refactoring anything and everything +- Optimized memory usage ++ Added multi-level Java Runtime location search system (more info) ++ Added ability to use portable Java Runtime (more info) ++ Blocking the form for the period of apktool operations to prevent restarting the running process +- Other small optimizations 2.1.3.2 -- "", " " .. -+ apktool 2.0.0 BETA 9 +- Fixed adding objects such as "Recycle Bin", "My Computer", etc. to the context menu. ++ apktool updated to version 2.0.0 BETA 9 2.1.3.1 -- -- - -2.1.3.0 (21.11.2013) -- (! 2.1.2.1) -- -- -+ ( LinXP) -- \ No newline at end of file +- Fixed program freezing when checking for updates +- Fixed file signature from the main program window + +2.1.3.0 (11/21/2013) +- Grouping context menu items (Attention! First remove the old menu with version 2.1.2.1) +- Translation for context menu items +- Fixed the choice of languages ++ Added Ukrainian localization (thanks to LinXP) +- Other minor changes \ No newline at end of file