commit c2befca3266df742cf510ce9053253fbac392553 Author: timerix Date: Sun Oct 30 14:24:48 2022 +0600 added files diff --git a/.idea/.idea.paradox-mod-merger/.idea/.gitignore b/.idea/.idea.paradox-mod-merger/.idea/.gitignore new file mode 100644 index 0000000..fd3236c --- /dev/null +++ b/.idea/.idea.paradox-mod-merger/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/projectSettingsUpdater.xml +/modules.xml +/.idea.stellaris-mod-merger.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.idea.paradox-mod-merger/.idea/encodings.xml b/.idea/.idea.paradox-mod-merger/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/.idea.paradox-mod-merger/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.paradox-mod-merger/.idea/indexLayout.xml b/.idea/.idea.paradox-mod-merger/.idea/indexLayout.xml new file mode 100644 index 0000000..f5a863a --- /dev/null +++ b/.idea/.idea.paradox-mod-merger/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.paradox-mod-merger/.idea/misc.xml b/.idea/.idea.paradox-mod-merger/.idea/misc.xml new file mode 100644 index 0000000..f98d778 --- /dev/null +++ b/.idea/.idea.paradox-mod-merger/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/.idea.paradox-mod-merger/.idea/vcs.xml b/.idea/.idea.paradox-mod-merger/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/.idea.paradox-mod-merger/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.stellaris-mod-merger/.idea/workspace.xml b/.idea/.idea.stellaris-mod-merger/.idea/workspace.xml new file mode 100644 index 0000000..1d6e20f --- /dev/null +++ b/.idea/.idea.stellaris-mod-merger/.idea/workspace.xml @@ -0,0 +1,93 @@ + + + + paradox-localisation-auto.csproj + stellaris-mod-merger.csproj + + + + + + + + + + + + + + + + + + + + + + + + + 1667114752922 + + + + + + + + + \ No newline at end of file diff --git a/7z/7-zip.dll b/7z/7-zip.dll new file mode 100644 index 0000000..f13af69 Binary files /dev/null and b/7z/7-zip.dll differ diff --git a/7z/7-zip32.dll b/7z/7-zip32.dll new file mode 100644 index 0000000..44ccc78 Binary files /dev/null and b/7z/7-zip32.dll differ diff --git a/7z/7z.dll b/7z/7z.dll new file mode 100644 index 0000000..b32d7bf Binary files /dev/null and b/7z/7z.dll differ diff --git a/7z/7z.exe b/7z/7z.exe new file mode 100644 index 0000000..37b8514 Binary files /dev/null and b/7z/7z.exe differ diff --git a/ParadoxModMerger.cs b/ParadoxModMerger.cs new file mode 100644 index 0000000..a83280c --- /dev/null +++ b/ParadoxModMerger.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using DTLib; +using DTLib.Filesystem; +using DTLib.Logging; +using DTLib.Extensions; + +static class ParadoxModMerger +{ + + // вывод лога в консоль и файл + static ConsoleLogger logger = new ConsoleLogger("merger-logs", "merger"); + static void Log(params string[] msg) => logger.Log(msg); + + static void Main(string[] args) + { + try + { + PublicLog.LogEvent += Log; + + // хелп + if (args.Length == 0 || args[0] == "/?" || args[0] == "-h") + { + Log( + "b", "paradox mod merger help:\n", + "c", "-clear \"steamworkshop dir\" -out \"utput dir\" ", + "b", "clear mod files and put them into separate dirs in output dir\n", + "c", "-merge \"dir with mods\" -out \"output dir\" ", + "b", "merge mods and show conflicts\n", + "c", "-merge-single \"dir with mod\" -out \"output dir\" ", + "b", "copy single mod files and show conflicts\n", + "c", "-diff \"dir with mods\" \"another dir with mods\" -out \"output file\" ", + "b", "compare mod files hashes for finding different files"); + Console.ResetColor(); + return; + } + + Log("c", "args: "); + string srcdir = ""; + string srcdir2 = ""; + string outdir = ""; + int mode = -1; + // определение всех аргументов + for (sbyte i = 0; i < args.Length; i++) + { + Log("g", $" {args[i]}"); + switch (args[i]) + { + case "-clear": + srcdir = args[++i].Replace("\"", ""); + Log("g", $" {args[i]}"); + mode = 0; + break; + case "-merge": + srcdir = args[++i].Replace("\"", ""); + Log("g", $" {args[i]}"); + mode = 1; + break; + case "-diff": + srcdir = args[++i].Replace("\"", ""); + Log("g", $" {args[i]}"); + srcdir2 = args[++i].Replace("\"", ""); + Log("g", $" {args[i]}"); + mode = 2; + break; + case "-merge-single": + srcdir = args[++i].Replace("\"", ""); + Log("g", $" {args[i]}"); + mode = 3; + break; + case "-out": + outdir = args[++i].Replace("\"", ""); + Log("g", $" {args[i]}"); + break; + default: + throw new Exception($"invalid argument: <{args[i]}>"); + } + } + Log(""); + + var conflicts = new List(); + string[] moddirs = Directory.GetDirectories(srcdir); + switch (mode) + { + case 0: + Log("b", $"found {moddirs.Length} mod dirs"); + for (int i = 0; i < moddirs.Length; i++) + { + string modarch = ""; + if (Directory.GetFiles(moddirs[i], "*.zip").Length != 0) modarch = Directory.GetFiles(moddirs[i], "*.zip")[0]; + string modname = ""; + if (modarch.Length != 0) + { + Log("y", $"archive found: {modarch}"); + var pr = new Process(); + pr.StartInfo.CreateNoWindow = true; + pr.StartInfo.UseShellExecute = false; + pr.StartInfo.FileName = "7z\\7z.exe"; + pr.StartInfo.Arguments = $"x -y -o_TEMP \"{modarch}\""; + pr.Start(); + pr.WaitForExit(); + moddirs[i] = "_TEMP"; + Log("g", "\tfiles extracted"); + } + modname = File.ReadAllText($"{moddirs[i]}\\descriptor.mod"); + modname = modname.Remove(0, modname.IndexOf("name=\"") + 6); + modname = modname.Remove(modname.IndexOf("\"")) + .Replace("\\", "").Replace(":", "").Replace("?", "").Replace("\"", "").Replace("/", "") + .Replace("\'", "").Replace("|", "").Replace("<", "").Replace(">", "").Replace("*", ""); + Log("b", $"[{i + 1}/{moddirs.Length}] copying mod ", "c", $"{modname}"); + string[] subdirs = Directory.GetDirectories(moddirs[i]); + for (sbyte n = 0; n < subdirs.Length; n++) + { + subdirs[n] = subdirs[n].Remove(0, subdirs[n].LastIndexOf('\\') + 1); + switch (subdirs[n]) + { + // stellaris + case "common": + case "events": + case "flags": + case "fonts": + case "gfx": + case "interface": + case "localisation": + case "localisation_synced": + case "map": + case "music": + case "prescripted_countries": + case "sound": + // hoi4 + case "history": + case "portraits": + Directory.Copy($"{moddirs[i]}\\{subdirs[n]}", $"{outdir}\\{modname}\\{subdirs[n]}", out List _conflicts, true); + conflicts.AddRange(_conflicts); + break; + default: + break; + } + } + if (Directory.Exists("_TEMP")) Directory.Delete("_TEMP"); + } + break; + case 1: + Log("b", $"found {moddirs.Length} mod dirs"); + for (short i = 0; i < moddirs.Length; i++) + { + Log("b", $"[{i + 1}/{moddirs.Length}] merging mod ", "c", $"{moddirs[i]}"); + Directory.Copy(moddirs[i], outdir, out List _conflicts, true); + conflicts.AddRange(_conflicts); + } + break; + case 2: + var hasher = new Hasher(); + var diff = new Dictionary(); + // добавление файлов из первой папки + List files = Directory.GetAllFiles(srcdir); + var mods = new List(); + for (short i = 0; i < files.Count; i++) + { + byte[] hash = hasher.HashFile(files[i]); + files[i] = files[i].Replace(srcdir, ""); + diff.Add(files[i], hash); + AddMod(files[i]); + } + // убирание совпадающих файлов + files = Directory.GetAllFiles(srcdir2); + for (short i = 0; i < files.Count; i++) + { + byte[] hash = hasher.HashFile(files[i]); + files[i] = files[i].Replace(srcdir2, ""); + if (diff.ContainsKey(files[i]) && diff[files[i]].HashToString() == hash.HashToString()) diff.Remove(files[i]); + else + { + diff.Add(srcdir2 + files[i], hash); + AddMod(files[i]); + } + } + void AddMod(string mod) + { + mod = mod.Remove(0, 1); + mod = mod.Remove(mod.IndexOf('\\')); + if (!mods.Contains(mod)) mods.Add(mod); + } + // вывод результата + StringBuilder output = new StringBuilder(); + output.Append($"[{DateTime.Now}]\n\n"); + foreach (string mod in mods) + { + output.Append('\n').Append(mod).Append("\n{\n"); + foreach (string file in diff.Keys) + { + if (file.Contains(mod)) + { + output.Append('\t'); + if (!file.Contains(srcdir2)) output.Append(srcdir).Append(file).Append('\n'); + output.Append(file).Append('\n'); + } + } + output.Append("}\n"); + // не убирать, это полезное + if (output[output.Length - 4] == '{') output.Remove(output.Length - mod.Length - 5, mod.Length + 5); + } + // хоть называется outdir, в данном случае это путь к файлу + var _outStr = output.ToString(); + File.WriteAllText(outdir, _outStr); + Log("g", $"output written to {outdir}"); + break; + case 3: + Directory.Copy(srcdir, outdir, out List __conflicts, true); + conflicts.AddRange(__conflicts); + break; + } + // вывод конфликтующих файлов при -merge и -clear если такие есть + if (conflicts.Count > 0) + { + Log("r", $"found {conflicts.Count} conflicts:"); + foreach (string conflict in conflicts) Log("m", $"{conflict}"); + } + } + catch (Exception ex) + { + Log("r", $"{ex.Message}\n{ex.StackTrace}"); + } + Console.ResetColor(); + } +} \ No newline at end of file diff --git a/ParadoxRusLocalisationGen.cs b/ParadoxRusLocalisationGen.cs new file mode 100644 index 0000000..bbf4e9f --- /dev/null +++ b/ParadoxRusLocalisationGen.cs @@ -0,0 +1,37 @@ +using System; +using DTLib; +using DTLib.Extensions; +using DTLib.Filesystem; +using DTLib.Logging; + +static class ParadoxRusLocalisationGen +{ + static ConsoleLogger logger = new ConsoleLogger("autoloc-logs", "merger"); + + static void Main(string[] args) + { + if (args.Length != 2 || args[0] == "/?" || args[0] == "help" || args[0] == "--help") + { + Console.WriteLine("[dir with eng localisation] [dir with rus localisation]"); + return; + } + + string engDir = args[0]; + string rusir = args[1]; + foreach (string enfFileName in Directory.GetAllFiles(engDir)) + { + string rusFileName = enfFileName + .Replace(engDir, rusir) + .Replace("l_english", "l_russian"); + if(!File.Exists(rusFileName)) + { + string text = File.ReadAllText(enfFileName) + .Replace("l_english:", "l_russian: "); + byte[] bytes = StringConverter.UTF8BOM.GetBytes(text); + File.WriteAllBytes(rusFileName, bytes); + ColoredConsole.Write("g",$"file {rusFileName} created\n"); + } + else ColoredConsole.Write("y", $"file {rusFileName} already exists\n"); + } + } +} \ No newline at end of file diff --git a/bin/7z/7-zip.dll b/bin/7z/7-zip.dll new file mode 100644 index 0000000..f13af69 Binary files /dev/null and b/bin/7z/7-zip.dll differ diff --git a/bin/7z/7-zip32.dll b/bin/7z/7-zip32.dll new file mode 100644 index 0000000..44ccc78 Binary files /dev/null and b/bin/7z/7-zip32.dll differ diff --git a/bin/7z/7z.dll b/bin/7z/7z.dll new file mode 100644 index 0000000..b32d7bf Binary files /dev/null and b/bin/7z/7z.dll differ diff --git a/bin/7z/7z.exe b/bin/7z/7z.exe new file mode 100644 index 0000000..37b8514 Binary files /dev/null and b/bin/7z/7z.exe differ diff --git a/bin/DTLib.dll b/bin/DTLib.dll new file mode 100644 index 0000000..ee46e1b Binary files /dev/null and b/bin/DTLib.dll differ diff --git a/bin/paradox-mod-merger.exe b/bin/paradox-mod-merger.exe new file mode 100644 index 0000000..11f2b82 Binary files /dev/null and b/bin/paradox-mod-merger.exe differ diff --git a/bin/paradox-rus-localisation-gen.exe b/bin/paradox-rus-localisation-gen.exe new file mode 100644 index 0000000..ead6b7a Binary files /dev/null and b/bin/paradox-rus-localisation-gen.exe differ diff --git a/obj/Build/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/obj/Build/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..3cf0af3 --- /dev/null +++ b/obj/Build/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/obj/Build/paradox-mod-merger.csproj.AssemblyReference.cache b/obj/Build/paradox-mod-merger.csproj.AssemblyReference.cache new file mode 100644 index 0000000..06fb8ef Binary files /dev/null and b/obj/Build/paradox-mod-merger.csproj.AssemblyReference.cache differ diff --git a/obj/Build/paradox-mod-merger.csproj.CoreCompileInputs.cache b/obj/Build/paradox-mod-merger.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..8179370 --- /dev/null +++ b/obj/Build/paradox-mod-merger.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +cd5b5a8959157e453943c7f5e137b9f6db4c3a48 diff --git a/obj/Build/paradox-mod-merger.csproj.FileListAbsolute.txt b/obj/Build/paradox-mod-merger.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..8cd1ab4 --- /dev/null +++ b/obj/Build/paradox-mod-merger.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-mod-merger.csproj.AssemblyReference.cache +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-mod-merger.csproj.SuggestedBindingRedirects.cache +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-mod-merger.csproj.CoreCompileInputs.cache +C:\projects\c#\paradox-mod-merger\bin\paradox-mod-merger.exe +C:\projects\c#\paradox-mod-merger\bin\DTLib.dll +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-mod-merger.csproj.CopyComplete +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-mod-merger.exe +C:\projects\c#\paradox-mod-merger\bin\7z\7-zip.dll +C:\projects\c#\paradox-mod-merger\bin\7z\7-zip32.dll +C:\projects\c#\paradox-mod-merger\bin\7z\7z.dll +C:\projects\c#\paradox-mod-merger\bin\7z\7z.exe diff --git a/obj/Build/paradox-mod-merger.csproj.SuggestedBindingRedirects.cache b/obj/Build/paradox-mod-merger.csproj.SuggestedBindingRedirects.cache new file mode 100644 index 0000000..e69de29 diff --git a/obj/Build/paradox-mod-merger.exe b/obj/Build/paradox-mod-merger.exe new file mode 100644 index 0000000..11f2b82 Binary files /dev/null and b/obj/Build/paradox-mod-merger.exe differ diff --git a/obj/Build/paradox-rus-localisation-gen.csproj.AssemblyReference.cache b/obj/Build/paradox-rus-localisation-gen.csproj.AssemblyReference.cache new file mode 100644 index 0000000..e0d0852 Binary files /dev/null and b/obj/Build/paradox-rus-localisation-gen.csproj.AssemblyReference.cache differ diff --git a/obj/Build/paradox-rus-localisation-gen.csproj.CopyComplete b/obj/Build/paradox-rus-localisation-gen.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/obj/Build/paradox-rus-localisation-gen.csproj.CoreCompileInputs.cache b/obj/Build/paradox-rus-localisation-gen.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..bdd1e29 --- /dev/null +++ b/obj/Build/paradox-rus-localisation-gen.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +2cf7a3a56d0e3301c25b927c61148c0736238ae8 diff --git a/obj/Build/paradox-rus-localisation-gen.csproj.FileListAbsolute.txt b/obj/Build/paradox-rus-localisation-gen.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..f8bad79 --- /dev/null +++ b/obj/Build/paradox-rus-localisation-gen.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +C:\projects\c#\paradox-mod-merger\bin\paradox-rus-localisation-gen.exe +C:\projects\c#\paradox-mod-merger\bin\DTLib.dll +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-rus-localisation-gen.csproj.AssemblyReference.cache +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-rus-localisation-gen.csproj.SuggestedBindingRedirects.cache +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-rus-localisation-gen.csproj.CoreCompileInputs.cache +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-rus-localisation-gen.csproj.CopyComplete +C:\projects\c#\paradox-mod-merger\obj\Build\paradox-rus-localisation-gen.exe diff --git a/obj/Build/paradox-rus-localisation-gen.csproj.SuggestedBindingRedirects.cache b/obj/Build/paradox-rus-localisation-gen.csproj.SuggestedBindingRedirects.cache new file mode 100644 index 0000000..e69de29 diff --git a/obj/Build/paradox-rus-localisation-gen.exe b/obj/Build/paradox-rus-localisation-gen.exe new file mode 100644 index 0000000..ead6b7a Binary files /dev/null and b/obj/Build/paradox-rus-localisation-gen.exe differ diff --git a/paradox-mod-merger.csproj b/paradox-mod-merger.csproj new file mode 100644 index 0000000..14b6c36 --- /dev/null +++ b/paradox-mod-merger.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + {076BFCFF-1D3E-44FB-B434-73716B79A135} + Exe + v4.8 + 10 + + + AnyCPU + none + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + {e22e3abf-b364-46a0-814e-48e1035697cb} + DTLib + + + + + Always + + + + + del /f stellaris-mod-merger.exe.config + + \ No newline at end of file diff --git a/paradox-mod-merger.sln b/paradox-mod-merger.sln new file mode 100644 index 0000000..7a18261 --- /dev/null +++ b/paradox-mod-merger.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30907.101 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "paradox-mod-merger", "paradox-mod-merger.csproj", "{076BFCFF-1D3E-44FB-B434-73716B79A135}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTLib", "..\DTLib\DTLib\DTLib.csproj", "{E22E3ABF-B364-46A0-814E-48E1035697CB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "paradox-rus-localisation-gen", "paradox-rus-localisation-gen.csproj", "{839133EF-6481-498A-B70D-878404BB78A4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Build|Any CPU = Build|Any CPU + Build|x64 = Build|x64 + Build|x86 = Build|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|Any CPU.ActiveCfg = Build|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|Any CPU.Build.0 = Build|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x64.ActiveCfg = Build|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x64.Build.0 = Build|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x86.ActiveCfg = Build|Any CPU + {076BFCFF-1D3E-44FB-B434-73716B79A135}.Build|x86.Build.0 = Build|Any CPU + {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|Any CPU.ActiveCfg = Debug|Any CPU + {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|Any CPU.Build.0 = Debug|Any CPU + {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x64.ActiveCfg = Debug|Any CPU + {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x64.Build.0 = Debug|Any CPU + {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x86.ActiveCfg = Debug|Any CPU + {E22E3ABF-B364-46A0-814E-48E1035697CB}.Build|x86.Build.0 = Debug|Any CPU + {839133EF-6481-498A-B70D-878404BB78A4}.Build|Any CPU.ActiveCfg = Build|Any CPU + {839133EF-6481-498A-B70D-878404BB78A4}.Build|Any CPU.Build.0 = Build|Any CPU + {839133EF-6481-498A-B70D-878404BB78A4}.Build|x64.ActiveCfg = Build|Any CPU + {839133EF-6481-498A-B70D-878404BB78A4}.Build|x64.Build.0 = Build|Any CPU + {839133EF-6481-498A-B70D-878404BB78A4}.Build|x86.ActiveCfg = Build|Any CPU + {839133EF-6481-498A-B70D-878404BB78A4}.Build|x86.Build.0 = Build|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7288F317-0289-4953-8D01-F04EC8809E0F} + EndGlobalSection +EndGlobal diff --git a/paradox-rus-localisation-gen.csproj b/paradox-rus-localisation-gen.csproj new file mode 100644 index 0000000..d5a7e2d --- /dev/null +++ b/paradox-rus-localisation-gen.csproj @@ -0,0 +1,40 @@ + + + + + Build + AnyCPU + {839133EF-6481-498A-B70D-878404BB78A4} + Exe + v4.8 + 10 + + + AnyCPU + none + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + {e22e3abf-b364-46a0-814e-48e1035697cb} + DTLib + + + + + del /f paradox_localisation_auto.exe.config + + \ No newline at end of file