From 93e7c91ee98effc95c9dc86f95d539da52ff4206 Mon Sep 17 00:00:00 2001 From: zeromus Date: Thu, 22 Oct 2015 16:28:44 -0500 Subject: [PATCH] clean up lua console pause/stop behaviour a little bit and add listview icons to make it more clear what's going on --- BizHawk.Client.Common/lua/LuaFile.cs | 36 ++++--- BizHawk.Client.Common/lua/LuaFileList.cs | 8 +- BizHawk.Client.EmuHawk/images/PlayButton.png | Bin 0 -> 790 bytes BizHawk.Client.EmuHawk/images/StopButton.png | Bin 0 -> 807 bytes .../tools/Lua/LuaConsole.Designer.cs | 100 ++++++++++-------- .../tools/Lua/LuaConsole.cs | 40 +++++-- .../tools/Lua/LuaConsole.resx | 94 ++++++++++++++-- 7 files changed, 194 insertions(+), 84 deletions(-) create mode 100644 BizHawk.Client.EmuHawk/images/PlayButton.png create mode 100644 BizHawk.Client.EmuHawk/images/StopButton.png diff --git a/BizHawk.Client.Common/lua/LuaFile.cs b/BizHawk.Client.Common/lua/LuaFile.cs index a7f2a70be6..3ca9959f0d 100644 --- a/BizHawk.Client.Common/lua/LuaFile.cs +++ b/BizHawk.Client.Common/lua/LuaFile.cs @@ -9,8 +9,7 @@ namespace BizHawk.Client.Common { Name = string.Empty; Path = path; - Enabled = true; - Paused = false; + State = RunState.Running; FrameWaiting = false; } @@ -29,28 +28,34 @@ namespace BizHawk.Client.Common IsSeparator = isSeparator; Name = string.Empty; Path = string.Empty; - Enabled = false; + State = RunState.Disabled; } public LuaFile(LuaFile file) { Name = file.Name; Path = file.Path; - Enabled = file.Enabled; - Paused = file.Paused; + State = file.State; IsSeparator = file.IsSeparator; CurrentDirectory = file.CurrentDirectory; } public string Name { get; set; } public string Path { get; set; } - public bool Enabled { get; set; } - public bool Paused { get; set; } + public bool Enabled { get { return State != RunState.Disabled; } } + public bool Paused { get { return State == RunState.Paused; } } public bool IsSeparator { get; set; } public LuaInterface.Lua Thread { get; set; } public bool FrameWaiting { get; set; } public string CurrentDirectory { get; set; } + public enum RunState + { + Disabled, Running, Paused + } + + public RunState State { get; set; } + public static LuaFile SeparatorInstance { get { return new LuaFile(true); } @@ -58,22 +63,25 @@ namespace BizHawk.Client.Common public void Stop() { - Enabled = false; + State = RunState.Disabled; Thread = null; } public void Toggle() { - Enabled ^= true; - if (Enabled) - { - Paused = false; - } + if (State == RunState.Paused) + State = RunState.Running; + else if (State == RunState.Disabled) + State = RunState.Running; + else State = RunState.Disabled; } public void TogglePause() { - Paused ^= true; + if (State == RunState.Paused) + State = RunState.Running; + else if(State == RunState.Running) + State = RunState.Paused; } } } diff --git a/BizHawk.Client.Common/lua/LuaFileList.cs b/BizHawk.Client.Common/lua/LuaFileList.cs index f246be5858..8ea0f8bfc3 100644 --- a/BizHawk.Client.Common/lua/LuaFileList.cs +++ b/BizHawk.Client.Common/lua/LuaFileList.cs @@ -45,7 +45,7 @@ namespace BizHawk.Client.Common public void StopAllScripts() { - ForEach(x => x.Enabled = false); + ForEach(x => x.State = LuaFile.RunState.Disabled); } public new void Clear() @@ -105,8 +105,10 @@ namespace BizHawk.Client.Common Add(new LuaFile(scriptPath) { - Enabled = !Global.Config.DisableLuaScriptsOnLoad && - line.Substring(0, 1) == "1", + State = ( + !Global.Config.DisableLuaScriptsOnLoad + && line.Substring(0, 1) == "1" + ) ? LuaFile.RunState.Running : LuaFile.RunState.Disabled }); } } diff --git a/BizHawk.Client.EmuHawk/images/PlayButton.png b/BizHawk.Client.EmuHawk/images/PlayButton.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5db08ef4facd7e36a8f87233895b54c824f1dc GIT binary patch literal 790 zcmV+x1L^#UP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;js(W8VM(0*6UNK~y+Tb(394Q(+j#-56=Z{d z*HSBRI^FH^;M#MEi!VZy!-yk>L^_Uu7(g#;6Yfs5iKCojJzujuu(+GkD>2W{?D)TI zBsNk1vMy>GH%7Cr*5J|dJ!vldK0=GONT!kyVuI>vq+%(QTTftQ*+D1EH89T`m1I7P zKNeAJD#mJfRgI{mGFWi4sAS5hM@avYU2ymY3TCHJA-PIWVk$vUr2CgcmSjkw6l%Lq z%RQeMff(L4z$b8OT7xzyG8BO{5R_Uw0=dYyh+n2u%;6XOs&s`%x@Pf#okCsTd7NRYrDGk3v!$A*paHd(QA4z< zs|@>0JF(xi3wupFaG-TJ4z}&V<-v=}f9G3)lW)$InKg%N2;=TCO#7z(`IG^WKkb4w UyO(_4zW@LL07*qoM6N<$f+;Oxpa1{> literal 0 HcmV?d00001 diff --git a/BizHawk.Client.EmuHawk/images/StopButton.png b/BizHawk.Client.EmuHawk/images/StopButton.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0820f0e0693fdaa8f915b0cd6941395e0b9373 GIT binary patch literal 807 zcmV+?1K9kDP)N2bZe?^J zG%heMHvEiZ-v9strAb6VR5(wKQ|(JrVH~|5t1m(ICFo!1V^Ne8l@{6*qzED^GGDSq z4HREWhgmr*HF4&Om9CW{l8VScC6UaR=G=5sr+2xuZ4O=YF4x_5y>6%HUdg#g>cD|} zp7Z?9@7~|@Tna!8zw3uR)|v{;Dl0KpTLqi40(AXLxJ^d)pL+$y2mF4KdV&? z_2F&~7@8JM0emosp_EiC70KZs0bg_TKxbyd)AC;QL#wMKAdH@dSJ0l9fcjXRkDm)J z(G(yA^d}|5kyn6OSq`S9w_&-QhNb2f(dRf03?IROt`qf=cu;!9eR$1dqA6gNWzlo= z80=X$F?~G?mMdu(PrZOe%^T4Vk$@#K$lgXR8j??gGOO$S(;e+z(IwzXz{D*X-1QnP zXtZ#V!ue_?7SyjrKN#X*ceM&!_=4wjm3rDuBQryEJbf(&56U|FQ!pPn7j!~Qv76?%gYQr zUN3C68GLg(VCd^Z+Y^OXc{YLnUAGY+P<8weRB;C|($NmuMq_e(9A?7^j6vZ2bTL002ovPDHLkV1oH^bA { file.Thread = LuaImp.SpawnCoroutine(file.Path); - file.Enabled = true; + file.State = LuaFile.RunState.Running; }, () => { - file.Enabled = false; + file.State = LuaFile.RunState.Disabled; }); } catch (Exception ex) @@ -172,10 +174,10 @@ namespace BizHawk.Client.EmuHawk LuaSandbox.Sandbox(() => { luaFile.Thread = LuaImp.SpawnCoroutine(processedPath); - luaFile.Enabled = true; + luaFile.State = LuaFile.RunState.Running; }, () => { - luaFile.Enabled = false; + luaFile.State = LuaFile.RunState.Disabled; }); } catch (Exception e) @@ -185,10 +187,10 @@ namespace BizHawk.Client.EmuHawk } else { - luaFile.Enabled = false; + luaFile.State = LuaFile.RunState.Disabled; } - luaFile.Paused = false; + //luaFile.Paused = false; } else { @@ -225,7 +227,7 @@ namespace BizHawk.Client.EmuHawk file.Thread = LuaImp.SpawnCoroutine(file.Path); }, () => { - file.Enabled = false; + file.State = LuaFile.RunState.Disabled; }); } catch (Exception e) @@ -247,6 +249,21 @@ namespace BizHawk.Client.EmuHawk Path.GetFileName(_luaList.Filename); } + + private void LuaListView_QueryItemImage(int item, int subItem, out int imageIndex) + { + imageIndex = -1; + if (subItem != 0) return; + if (_luaList[item].Paused) imageIndex = 2; + else if (_luaList[item].Enabled) imageIndex = 1; + else imageIndex = 0; + } + + void LuaListView_QueryItemIndent(int item, out int itemIndent) + { + itemIndent = 0; + } + private void LuaListView_QueryItemBkColor(int index, int column, ref Color color) { if (column == 0) @@ -261,7 +278,7 @@ namespace BizHawk.Client.EmuHawk } else if (_luaList[index].Enabled && _luaList[index].Paused) { - color = Color.IndianRed; + color = Color.LightPink; } } @@ -271,7 +288,6 @@ namespace BizHawk.Client.EmuHawk private void LuaListView_QueryItemText(int index, int column, out string text) { text = string.Empty; - if (column == 0) { text = Path.GetFileNameWithoutExtension(_luaList[index].Path); // TODO: how about allow the user to name scripts? @@ -439,7 +455,7 @@ namespace BizHawk.Client.EmuHawk } }, () => { - lf.Enabled = false; + lf.State = LuaFile.RunState.Disabled; lf.Thread = null; }); } @@ -731,7 +747,7 @@ namespace BizHawk.Client.EmuHawk item.Thread = LuaImp.SpawnCoroutine(item.Path); }, () => { - item.Enabled = false; + item.State = LuaFile.RunState.Disabled; }); } @@ -763,6 +779,8 @@ namespace BizHawk.Client.EmuHawk } UpdateDialog(); + UpdateNumberOfScripts(); + LuaListView.Refresh(); } private void PauseScriptMenuItem_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx index 866e9cdbd3..33fe22b72b 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx @@ -133,17 +133,89 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPlZNdSNNRGMb/F110ZZEVhVBgeeHNICiiuggp - olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdPKMgr7kApFItTUkWZqVhSVYmao5Nev/xyoQ4k88Nyc - 8z6/93nP4QjCfy6lwc4ltZVso4P/tMyXRcmMHqZ0EeY6jZQVInzuf0e1Tb9Ina3P/tkpLD6XkNg8BJe5 - u93C+HDVrP4M2ZkcMOOw5tLZ9nxJyJE4HSExBoKkBQhVpTrGhso9zNPfiph0JlB+U01ZcRbmwnRMeWlc - 08opUCV6QissGsZ+WOY6z4hmuuXglC6pRYBbJSp+fzXNxnaZ66o1s3rkyKHWruJuWRYOcwZ2kxKr8TI3 - DCkU6+QYNUnuNGWmLEY+5uOK3degoKZcx3SfEvozPfVB3OtNhi4ZvI2nrTIc23U9gtmYwa8eNXzScq8i - l6bHWnfRwhHeREJzGFONgYw/CeB9qQSZNNR9FyUGBT87lfQ3plJj1zLTq4COGDegLVo0HmeqKZjx+gOM - PNzDYPU2lLF+4jhyN6BIl8pgexK3bRpaXopJuhJEwGloiWDmVSgTLw4xWreXoZrtfK/wp/nKak4E+s6/ - hDFHTkd9GndsOdCTBq1i3NdHmWgIYvRpAMO1OxlwSPhi2YpT641CuoWzsSfnAfnZiVRZ1Tjvx9GsF+bU - pF1BvWolD9JXUZmyDnOiD1cvbCZiYXfXCPrMi+gVZ8hOiiL53DHORwdzKnw/hw/uYt9uCTskfvj7+rBp - 41rWr/Fig7fX8j/Tsn/fcgx/ARfG3ml6M3rzAAAAAElFTkSuQmCC + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + 489, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6 + DgAAAk1TRnQBSQFMAgEBAwEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABECoAAo8BmAHlAbIBtAHSAf8BuwG+AdcB/wKQAZkB5zAAAY8BmAGQAeUBsgHS + AbYB/wG7AdcBvgH/AZABmQGRAecwAAGYAZMBjwHlAdIBvgGyAf8B1wHFAbsB/wGZAZIBkAHnaAABbwF0 + AaAB9QE5AUABlwH/AQUBEAGHAf8BBgEQAYcB/wEEAQ8BhwH/AQsBFQGIAf8BDgEYAYkB/wFmAWoBoQH5 + IAABbwGgAXsB9QE5AZcBRQH/AQUBhwEUAf8BBgGHARUB/wEEAYcBEgH/AQsBiAEZAf8BDgGJARwB/wFm + AaEBagH5IAABoAGFAW8B9QGXAVsBOQH/AYcBMwEFAf8BhwE0AQYB/wGHATIBBAH/AYgBNwELAf8BiQE6 + AQ4B/wGhAXoBZgH5XAABNAE8AZgB/wExATkBmAH/AbABsgHLAf8B2gHbAdoB/wLRAdUB/wHLAcwB0gH/ + AcQBxwHOAf8BWAFeAaUB/wFKAVEBjgH5ASkBMgGPAf8YAAEmAZIBMgH/ATEBmAE9Af8BsAHLAbMB/wHb + AtoB/wHRAdUB0gH/AcsB0gHLAf8BxQHOAcQB/wFYAaUBYQH/AUoBjgFSAfkBKQGPATQB/xgAAZIBTAEm + Af8BmAFWATEB/wHLAboBsAH/AtoB2wH/AdUB0wHRAf8B0gHNAcsB/wHOAcYBxAH/AaUBcwFYAf8BjgFo + AUoB+QGPAUwBKQH/VAABPQFAAZMB/QKMAZMB4wL+Af0B/wH+Af0B9QH/AvcB8wH/Ae8C7gH/Au0B6wH/ + AdkC2wH/AeMB5AHiAf8CwAHMAf8BdwF6AY0B7QFGAUwBkAH7EAABPQGTAUAB/QGMAZMBjAHjAf8B/gL/ + Af4B9QH9Af8B9wHzAfYB/wLuAe8B/wHtAesB7QH/AtsB2QH/AeQB4gHjAf8BwAHMAcIB/wF3AY0BegHt + AUYBkAFQAfsQAAGTAVMBPQH9AZMBjQGMAeMB/gP/AfUB+wH+Af8B8wH1AfcB/wHuAe8B7gH/AesB7AHt + Af8B2wHZAdoB/wLiAeQB/wHMAcUBwAH/AY0BgAF3Ae0BkAFfAUYB+0wAAXIBewGeAfMBiwGMAZ0B6wX/ + Af4B/Rf/Af4B/wHwAe8B8AH/Ac8B0AHWAf8BbgFxAYkB7QF2AXsBlAHvCAABcgGeAXwB8wGLAZ0BjgHr + Bf8B/Qb/AeMB8AHjAf8BnAHNAZwK/wH+Av8B7wLwAf8BzwHWAc8B/wFuAYkBcgHtAXYBlAF7Ae8IAAGe + AYQBcgHzAZ0BkQGLAesE/wH9F/8B/gP/AuMB4AH/Ac8ByQHHAf8BiQF5AW4B7QGUAYMBdgHvSAACagGp + AfkD/iX/AfAB8gHwAf8CxgHNAf8CRwGKAfkIAAFqAakBawH5EP8B3AHtAdwB/wERAXkBEQH/AYMBwQGD + Df8B8gHxAfAB/wHHAc4ByAH/AUcBigFNAfkIAAGpAYQBagH5DP8B4QHNAb4B/wG+AZIBjQH/AfcB8QHv + Af8B+wH4AfcB/wHBAZgBjwH/AeoB2gHRBf8B5QHiAeYB/wHOAcoBxwH/AYoBYgFHAflEAAGGAYkBrQHz + Ao4BpQHtCP8C9QH7Af8BbQFpAdQB/wGhAZ8B5wH/AaMBoQHmAf8BogGhAeUB/wGUAZEB4QH/AZ4BnAHm + Bf8B+QH4AfcB/wHnAeQB3gH/AWABZgGRAfUBWgFfAZwB+wGGAa0BjAHzAY4BpgGSAe0Q/wHkAfEB5AH/ + AQEBdQEBAf8BEQF7AREB/wGcAc4BnAn/AfkB9wH5Af8B5gHeAecB/wFgAZEBbAH1AVoBnAFfAfsBrQGV + AYYB8wGmAZcBjgHtDP8BrgF2AVQB/wFZAgAB/wH4AfUB8gH/AfoB9wH1Af8BWQIAAf8BswF7AVoF/wHx + AfQB9QH/Ad4B5gHnAf8BkQFxAWAB9QGcAW0BWgH7QAABggGIAcoB/wHQAdIB7Qn/AvUB+gH/ATsBOAG7 + Af8BZwFkAd4B/wFkAWAB2AH/AV8BWwHTAf8BUwFOAdEB/wGiAaEB6QX/AvkB+AH/AfwB+wHqAf8BowGm + Ab4B/wFDAUoBoAH/AYIBygGKAf8B0AHtAdQR/wHiAfAB4gH/AQIBdgECAf8BAAF2AQAB/wERAYQBEQH/ + AZgBzAGYBf8B+QH4AfkB/wH8AeoB+gH/AaMBvgGlAf8BQwGgAU4B/wHKAZwBggH/Ae0B2wHQDf8BugGM + AWoB/wGNASIBAAL/Av4B/wP+Af8BjQEhAQAB/wG7AYkBaAX/AfIB9AH1Af8B6gH1AfwB/wG+AawBowH/ + AaABZAFDAf9AAAF0AXoBwgH/AeUB5gH0Cf8C9wH7Af8BSgFHAcMB/wF1AXMB4wH/AXABbQHdAf8BawFo + AdgB/wFfAVoB0wH/AasBqQHqBf8D+QH/Af4B+wHvAf8BtAG2AcUB/wFBAUkBnwH/AXQBwgGBAf8B5QH0 + AecR/wHiAfAB4gH/AQEBeAEBAf8BAAF6AQAB/wEAAXIBAAH/AREBhAERAf8B+gH8AfoB/wP5Af8B/gHv + Af4B/wG0AcUBtgH/AUEBnwFMAf8BwgGTAXQB/wH0AesB5Q3/AbkBjAFrAf8BpwE4AQsB/wH7AfkB+AH/ + AfsB+gH5Af8BpwE4AQsB/wG9AYwBawX/A/QB/wHvAfoB/gH/AcUBugG0Af8BnwFiAUEB/0AAAXABdwG9 + Af8C2gHvCf8C9wH7Af8BTgFLAccB/wF7AXkB6gH/AXYBdQHjAf8BcwFxAd8B/wFmAWMB2gH/Aa0BqwHr + Bf8C+gH4Af8B/QH8Ae4B/wGdAaABuwH/AUkBUQGjAf8BcAG9AXgB/wHaAe8B3hH/AeIB8AHiAf8BAgF4 + AQIB/wEAAXABAAH/ASwBjgEsAf8B4gHwAeIF/wH6AfgB+gH/Af0B7gH7Af8BnQG7AaEB/wFJAaMBUgH/ + Ab0BjgFwAf8B7wHjAdoN/wG3AYgBZgH/AcQBRwEkAf8C/QH8Af8B/AH6AfkB/wHGAUoBJgH/AcIBjwFw + Bf8B8gH1AfcB/wHuAfcB/QH/AbsBqAGdAf8BowFoAUkB/0AAAYcBjAGkAe8BlAGVAbIB8Qj/AvYB+wH/ + AUsBRwHFAf8BegF5AesB/wF2AXUB5AH/AXQBcQHhAf8BZAFhAdsB/wGpAacB6wX/AvsB+QH/AfsB/AHu + Af8BSAFOAZQB+wGCAYMBnwHvAYcBpAGMAe8BlAGyAZkB8RD/AeIB8AHiAf8BAAFuAQAB/wEoAYcBKAH/ + AecB8wHnCf8B+wH5AfsB/wH8Ae4B+QH/AUgBlAFSAfsBggGfAYYB7wGkAZIBhwHvAbIBoAGUAfEM/wHB + AZcBegH/AaQBPgEWAf8B/QH7AfoB/wH8AfoB+QH/AZMBOQEPAf8BzAGpAZQF/wH0AfcB+QH/Ae4B9QH8 + Af8BlAFfAUgB+wGfAYwBggHvRAABewGBAc8J/wLzAfkB/wFJAUYBuQH/AYcBhgHWAf8BhwGFAdUB/wGH + AYUB1QH/AWUBYgHIAf8BbQFsAcwG/wH+AfwB/wLOAdcB/wE5AUEBmAH/CAABewHPAY0R/wHTAegB0wH/ + ASQBhwEkAf8B4gHwAeIN/wH+AfwC/wHOAdcB0AH/ATkBmAFDAf8IAAHPAaEBeyn/AfsD/wHXAdIBzgH/ + AZgBWgE5Af9IAAGMAY0BwgH5AqABvAHxJP8B/AH7AfYB/wE3AT8BlgH/AYoBiwGbAekIAAGMAcIBkAH5 + AaABvAGmAfEM/wH6AfwB+gH/Ae8B9gHvEf8B/AH2AfwB/wE3AZYBQQH/AYoBmwGKAekIAAHCAZ4BjAH5 + AbwBrQGgAfEk/wH1AfoB/AH/AZYBWAE3Af8BmwGRAYoB6UwAAYMBiQHMAf0CnAGpAekc/wHyAfUB+AH/ + AV4BaAGTAfUBcQF4AaMB9RAAAYMBzAGOAf0BnAGqAZ0B6Rz/AfQB+AHyAf8BXgGTAWgB9QFxAaMBfwH1 + EAABzAGjAYMB/QGqAaMBnAHpHP8B+ALyAf8BkwFvAV4B9QGjAYYBcQH1VAABhgGMAcgB+wGVAZcBzgH5 + AtMB9wH/AfEB8AH7Af8B9gH3Av8B9wH4Af0B/wHkAecB8wH/AYMBhgGiAe8BfwGBAaEB8wGPAZABogHr + GAABhgHIAZAB+wGVAc4BoQH5AdMB9wHaAf8B8AH7AfMB/wH2Af8B9wH/AfcB/QH4Af8B5AHzAeQB/wGD + AaIBhgHvAX8BoQGCAfMBjwGiAZAB6xgAAcgBmwGGAfsBzgGwAZUB+QH3AeMB0wH/AfsB9gHwAv8B+QH2 + Af8B/QH5AfcB/wHzAegB5AH/AaIBjwGDAe8BoQGMAX8B8wGiAZcBjwHrXAACmAGrAesBjQGTAdcB/wGO + AZQB3QH/AY8BlQHgAf8BjQGUAdsB/wGaAZ8B2gH/AZIBkwGeAeckAAGYAasBmgHrAY0B1wGWAf8BjgHd + AZgB/wGPAeABmQH/AY0B2wGWAf8BmgHaAaIB/wGSAZ4BlQHnJAABqwGhAZgB6wHXAagBjQH/Ad0BrAGO + Af8B4AGtAY8B/wHbAakBjQH/AdoBsgGaAf8BngGYAZIB51QAAUIBTQE+BwABPgMAASgDAAFAAwABEAMA + AQEBAAEBBQABgBcAA/8BAAH8AT8B/AE/AfwBPwIAAfABDwHwAQ8B8AEPAgAB4AEHAeABBwHgAQcCAAHA + AQMBwAEDAcABAwIAAYABAQGAAQEBgAEBAgABgAEBAYABAQGAAQEqAAGAAQEBgAEBAYABAQIAAYABAQGA + AQEBgAEBAgABwAEDAcABAwHAAQMCAAHgAQcB4AEHAeABBwIAAfABHwHwAR8B8AEfAgAL