From 9227335d25ceba45a8d092bec3bcd50e04cef831 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Wed, 23 Aug 2017 17:29:48 -0500 Subject: [PATCH] -removes flag penality when unflagging a player -fixed 'just now ago' on webfront -webfront playerlist level colors are hidden to non admin users -tempban length can now be specified (m, h, d, y) --- Admin/Application.csproj | 7 +- Admin/PenaltyList.cs | 2 +- Admin/Server.cs | 102 ++++++++++--------- Admin/WebService.cs | 5 +- Admin/lib/SharedLibrary.dll | Bin 97792 -> 98816 bytes Admin/version.txt | 4 + Admin/webfront/admins.html | 120 +++++++++++------------ Admin/webfront/header.html | 5 +- Admin/webfront/main.css | 13 +-- Admin/webfront/penalties.html | 2 +- Plugins/Welcome/Plugin.cs | 8 +- SharedLibrary/Commands/NativeCommands.cs | 25 ++--- SharedLibrary/Database.cs | 17 ++-- SharedLibrary/Penalty.cs | 4 +- SharedLibrary/Player.cs | 4 +- SharedLibrary/Server.cs | 2 +- SharedLibrary/SharedLibrary.csproj | 1 + SharedLibrary/Utilities.cs | 57 +++++++++-- 18 files changed, 221 insertions(+), 157 deletions(-) diff --git a/Admin/Application.csproj b/Admin/Application.csproj index 6f64bf84a..a33717bfa 100644 --- a/Admin/Application.csproj +++ b/Admin/Application.csproj @@ -48,6 +48,7 @@ 4 true false + ..\..\..\RuleSet1.ruleset x86 @@ -204,7 +205,7 @@ PreserveNewest - Always + PreserveNewest PreserveNewest @@ -212,9 +213,9 @@ PreserveNewest - + PreserveNewest - + diff --git a/Admin/PenaltyList.cs b/Admin/PenaltyList.cs index e40ad159a..2b652881e 100644 --- a/Admin/PenaltyList.cs +++ b/Admin/PenaltyList.cs @@ -15,7 +15,7 @@ namespace IW4MAdmin public void AddPenalty(Penalty P) { - ApplicationManager.GetInstance().GetClientDatabase().AddBan(P); + ApplicationManager.GetInstance().GetClientDatabase().AddPenalty(P); } public void RemovePenalty(Penalty P) diff --git a/Admin/Server.cs b/Admin/Server.cs index d576a746e..92f3324ec 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -17,18 +17,18 @@ namespace IW4MAdmin override public async Task AddPlayer(Player P) { - if (P.ClientID < 0 || P.ClientID > (Players.Count-1) || P.Ping < 1 || P.Ping == 999) // invalid index + if (P.ClientID < 0 || P.ClientID > (Players.Count - 1) || P.Ping < 1 || P.Ping == 999) // invalid index return false; if (Players[P.ClientID] != null && Players[P.ClientID].NetworkID == P.NetworkID) // if someone has left and a new person has taken their spot between polls { // update their ping - Players[P.ClientID].Ping = P.Ping; + Players[P.ClientID].Ping = P.Ping; return true; } Logger.WriteDebug($"Client slot #{P.ClientID} now reserved"); - + try { Player NewPlayer = Manager.GetClientDatabase().GetPlayer(P.NetworkID, P.ClientID); @@ -57,19 +57,19 @@ namespace IW4MAdmin Manager.GetAliasesDatabase().AddPlayerAliases(new Aliases(NewPlayer.DatabaseID, NewPlayer.Name, NewPlayer.IP)); NewPlayer.Alias = Manager.GetAliasesDatabase().GetPlayerAliases(NewPlayer.DatabaseID); } - + if (P.lastEvent == null || P.lastEvent.Owner == null) NewPlayer.lastEvent = new Event(Event.GType.Say, null, NewPlayer, null, this); // this is messy but its throwing an error when they've started in too late else NewPlayer.lastEvent = P.lastEvent; - + // lets check aliases - if ((NewPlayer.Alias.Names.Find(m => m.Equals(P.Name))) == null || NewPlayer.Name == null || NewPlayer.Name == String.Empty) + if ((NewPlayer.Alias.Names.Find(m => m.Equals(P.Name))) == null || NewPlayer.Name == null || NewPlayer.Name == String.Empty) { NewPlayer.UpdateName(P.Name.Trim()); NewPlayer.Alias.Names.Add(NewPlayer.Name); } - + // and ips if (NewPlayer.Alias.IPS.Find(i => i.Equals(P.IP)) == null || P.IP == null || P.IP == String.Empty) NewPlayer.Alias.IPS.Add(P.IP); @@ -111,8 +111,14 @@ namespace IW4MAdmin return true; } + + var activeTB = IsTempBanned(aP); + if (activeTB != null) + { + await this.ExecuteCommandAsync($"clientkick {NewPlayer.ClientID} \"You are temporarily banned. ({(activeTB.Expires - DateTime.Now).TimeSpanText()} left)\""); + } } - + Players[NewPlayer.ClientID] = NewPlayer; Logger.WriteInfo($"Client {NewPlayer.Name}::{NewPlayer.NetworkID} connecting..."); // they're clean @@ -171,10 +177,15 @@ namespace IW4MAdmin } //Check ban list for every banned player and return ban if match is found - override public Penalty IsBanned(Player C) - { - return Manager.GetClientPenalties().FindPenalties(C).Where(b => b.BType == Penalty.Type.Ban).FirstOrDefault(); - } + override public Penalty IsBanned(Player C) + { + return Manager.GetClientPenalties().FindPenalties(C).Where(b => b.BType == Penalty.Type.Ban).FirstOrDefault(); + } + + public Penalty IsTempBanned(Player C) + { + return Manager.GetClientPenalties().FindPenalties(C).FirstOrDefault(b => b.BType == Penalty.Type.TempBan && b.Expires > DateTime.Now); + } //Process requested command correlating to an event // todo: this needs to be removed out of here @@ -197,7 +208,7 @@ namespace IW4MAdmin } E.Data = E.Data.RemoveWords(1); - String[] Args = E.Data.Trim().Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries); + String[] Args = E.Data.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (E.Origin.Level < C.Permission) { @@ -211,7 +222,7 @@ namespace IW4MAdmin throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} did not supply enough arguments for \"{C.Name}\""); } - if (C.RequiresTarget || Args.Length > 0) + if (C.RequiresTarget || Args.Length > 0) { int cNum = -1; int.TryParse(Args[0], out cNum); @@ -222,7 +233,7 @@ namespace IW4MAdmin if (Args[0][0] == '@') // user specifying target by database ID { int dbID = -1; - int.TryParse(Args[0].Substring(1, Args[0].Length-1), out dbID); + int.TryParse(Args[0].Substring(1, Args[0].Length - 1), out dbID); Player found = Manager.GetClientDatabase().GetPlayer(dbID); if (found != null) @@ -233,7 +244,7 @@ namespace IW4MAdmin } } - else if(Args[0].Length < 3 && cNum > -1 && cNum < 18) // user specifying target by client num + else if (Args[0].Length < 3 && cNum > -1 && cNum < 18) // user specifying target by client num { if (Players[cNum] != null) E.Target = Players[cNum]; @@ -259,7 +270,7 @@ namespace IW4MAdmin if (Throttled) return; - await ProcessEvent(E); + await ProcessEvent(E); foreach (IPlugin P in SharedLibrary.Plugins.PluginImporter.ActivePlugins) { @@ -325,7 +336,7 @@ namespace IW4MAdmin LastPoll = DateTime.Now; } - catch(SharedLibrary.Exceptions.NetworkException e) + catch (SharedLibrary.Exceptions.NetworkException e) { ConnectionErrors++; if (ConnectionErrors == 1) @@ -354,9 +365,9 @@ namespace IW4MAdmin playerCountStart = DateTime.Now; } - if (LastMessage.TotalSeconds > MessageTime && BroadcastMessages.Count > 0 && ClientNum > 0) + if (LastMessage.TotalSeconds > MessageTime && BroadcastMessages.Count > 0 /*&& ClientNum > 0*/) { - Console.WriteLine(Utilities.ProcessMessageToken(Manager.GetMessageTokens(), BroadcastMessages[NextMessage])); + await Broadcast(Utilities.ProcessMessageToken(Manager.GetMessageTokens(), BroadcastMessages[NextMessage])); NextMessage = NextMessage == (BroadcastMessages.Count - 1) ? 0 : NextMessage + 1; start = DateTime.Now; } @@ -477,14 +488,14 @@ namespace IW4MAdmin logfile = await this.GetDvarAsync("g_log"); } #if DEBUG - basepath.Value = (GameName == Game.IW4) ? - @"\\tsclient\K\MW2" : + basepath.Value = (GameName == Game.IW4) ? + @"\\tsclient\K\MW2" : @"\\tsclient\G\Program Files (x86)\Steam\SteamApps\common\Call of Duty 4"; #endif string mainPath = (GameName == Game.IW4) ? "userraw" : "main"; - string logPath = (game.Value == "" || onelog?.Value == 1) ? - $"{ basepath.Value.Replace("\\", "/")}/{mainPath}/{logfile.Value}" : + string logPath = (game.Value == "" || onelog?.Value == 1) ? + $"{ basepath.Value.Replace("\\", "/")}/{mainPath}/{logfile.Value}" : $"{basepath.Value.Replace("\\", "/")}/{game.Value}/{logfile.Value}"; if (!File.Exists(logPath)) @@ -529,7 +540,7 @@ namespace IW4MAdmin if (E.Type == Event.GType.Say && E.Data.Length >= 2) { - if (E.Data.Substring(0, 1) == "!" || E.Data.Substring(0, 1) == "@" || E.Origin.Level == Player.Permission.Console) + if (E.Data.Substring(0, 1) == "!" || E.Data.Substring(0, 1) == "@" || E.Origin.Level == Player.Permission.Console) { Command C = null; @@ -611,7 +622,7 @@ namespace IW4MAdmin await Target.Kick("Too many warnings!", Origin); else { - Penalty newPenalty = new Penalty(Penalty.Type.Warning, Reason.StripColors(), Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP); + Penalty newPenalty = new Penalty(Penalty.Type.Warning, Reason.StripColors(), Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP, DateTime.Now); Manager.GetClientPenalties().AddPenalty(newPenalty); Target.Warnings++; String Message = String.Format("^1WARNING ^7[^3{0}^7]: ^3{1}^7, {2}", Target.Warnings, Target.Name, Target.lastOffense); @@ -624,23 +635,20 @@ namespace IW4MAdmin if (Target.ClientID > -1) { String Message = "^1Player Kicked: ^5" + Reason; - Penalty newPenalty = new Penalty(Penalty.Type.Kick, Reason.StripColors().Trim(), Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP); + Penalty newPenalty = new Penalty(Penalty.Type.Kick, Reason.StripColors().Trim(), Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP, DateTime.Now); Manager.GetClientPenalties().AddPenalty(newPenalty); await this.ExecuteCommandAsync($"clientkick {Target.ClientID} \"{Message}^7\""); } } - public override async Task TempBan(String Reason, Player Target, Player Origin) + public override async Task TempBan(String Reason, TimeSpan length, Player Target, Player Origin) { - if (Target.ClientID > -1) + await this.ExecuteCommandAsync($"tempbanclient {Target.ClientID } \"^1Player Temporarily Banned: ^5{ Reason }\""); + Penalty newPenalty = new Penalty(Penalty.Type.TempBan, Reason.StripColors(), Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP, DateTime.Now + length); + await Task.Run(() => { - await this.ExecuteCommandAsync($"tempbanclient {Target.ClientID } \"^1Player Temporarily Banned: ^5{ Reason } (1 hour)\""); - Penalty newPenalty = new Penalty(Penalty.Type.TempBan, Reason.StripColors(), Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP); - await Task.Run(() => - { - Manager.GetClientPenalties().AddPenalty(newPenalty); - }); - } + Manager.GetClientPenalties().AddPenalty(newPenalty); + }); } override public async Task Ban(String Message, Player Target, Player Origin) @@ -670,7 +678,7 @@ namespace IW4MAdmin if (Origin != null) { Target.SetLevel(Player.Permission.Banned); - Penalty newBan = new Penalty(Penalty.Type.Ban, Target.lastOffense, Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP); + Penalty newBan = new Penalty(Penalty.Type.Ban, Target.lastOffense, Target.NetworkID, Origin.NetworkID, DateTime.Now, Target.IP, DateTime.MaxValue); await Task.Run(() => { @@ -701,17 +709,21 @@ namespace IW4MAdmin // database stuff can be time consuming await Task.Run(() => { - var FoundPenalaties = Manager.GetClientPenalties().FindPenalties(Target); - var PenaltyToRemove = FoundPenalaties.Find(b => b.BType == Penalty.Type.Ban); + var FoundPenalties = Manager.GetClientPenalties().FindPenalties(Target); - if (PenaltyToRemove == null) - return; - - Manager.GetClientPenalties().RemovePenalty(PenaltyToRemove); + FoundPenalties.Where(p => p.BType > Penalty.Type.Kick) + .All(p => + { + Manager.GetClientPenalties().RemovePenalty(p); + return true; + }); Player P = Manager.GetClientDatabase().GetPlayer(Target.NetworkID, -1); - P.SetLevel(Player.Permission.User); - Manager.GetClientDatabase().UpdatePlayer(P); + if (P.Level < Player.Permission.Trusted) + { + P.SetLevel(Player.Permission.User); + Manager.GetClientDatabase().UpdatePlayer(P); + } }); } diff --git a/Admin/WebService.cs b/Admin/WebService.cs index ada778714..2e31c1c94 100644 --- a/Admin/WebService.cs +++ b/Admin/WebService.cs @@ -209,6 +209,8 @@ namespace IW4MAdmin chatHistory = S.ChatHistory, players = new List() }; + bool authed = ApplicationManager.GetInstance().GetClientDatabase().GetAdmins().FindAll(x => x.IP == querySet["IP"] && x.Level > Player.Permission.Trusted).Count > 0 + || querySet["IP"] == "127.0.0.1"; foreach (Player P in S.GetPlayersAsList()) { @@ -216,7 +218,7 @@ namespace IW4MAdmin { playerID = P.DatabaseID, playerName = P.Name, - playerLevel = P.Level.ToString() + playerLevel = authed ? P.Level.ToString() : Player.Permission.User.ToString() }; eachServer.players.Add(pInfo); } @@ -383,7 +385,6 @@ namespace IW4MAdmin try { - //selectedPenalties = Manager.GetInstance().Servers.First().Bans.OrderByDescending(x => x.When).ToList().GetRange(Convert.ToInt32(querySet["from"]), 15); selectedPenalties = ((ApplicationManager.GetInstance().GetClientPenalties()) as PenaltyList).AsChronoList(Convert.ToInt32(querySet["from"]), 15).OrderByDescending(b => b.When).ToList(); } diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index 3421cb94df749199766dd8821b29a4604b4bee4b..b819a852d69b1ba1aa6ce4c970542c6897aabe11 100644 GIT binary patch literal 98816 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 bgWpt6_t=3SwiJ)$@5h%6e*5?TKMDLVR$%m_ literal 97792 zcmeFad4N>K)i+%CcK7X`o`vb@>7Es4SY~Kvh8=WZ5D-OiM@2<(0r!R2*n^7pG=d9m z;EEfHqH&8`lxSkq7>!DdTX2anMi6(C_!u>6h*5lhzf;wHZ}&_S$n(A5_s@rRRh@IH zPMve=)Tz34m)ZN!%au_9tG&pd?;n0^f4%KmtSL*cJW+%z`|S2utoH zAhKio5*5hWRCJ`Rs?ihrkJyP4;KEfZ1!#UE4!&&z>@)y>+aTMQkpd8O13^du2#ljf zNC5~)pb=64B9KK$0SE}EYe*qwwD2V&6waTBG7C^Ohav>CwWR;Kx#LR9wtvX98B$raux;c!=

0Qs<&HdIvkH^(s^4M~_G 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

)*|v9 zR%Pp(U!MY*gxpR|8<=&!1ac|PAmX@V-Gpn1z{G#F zH&96a5lL!59K!BO{4S9&9|;LB@Wbn(rHhV&>HY)Iy6CFBkL^sZ@%m z0-e9X2&wMdFvp^0k#K4jYR8jrp?P)U&+H(uel;qXUZUlZvPk)Y0q8699eP@HG`lO? z?A*>xE~0HXxgN=|-3%ekO34jC8DUPKFl8EDgErZ6Ey~MI!cfYSCt`9AA#O%in3gxP zWk`lDQlW20cCx>JLlL}zmbE#;)a0i)EzL7(m!iC(%=?yv;rBN9h2)yN#Jw_?BcB>f zvYp^8{0AA;O5_hBABvpw8LlMHoMM-){)t~1VE#L(`yB|hm?O}=ktG@jy!dWg0`ze( zqn&sclmrH&J-nf|G&QjX*C6JdI;zu+SKpkovhR7}IhqRh-7EON+Fp3PkD9RP2gn?* z8{rN8OH=2OmEd~u%f3&AXGdbnyaVaudLsOM%UU30LNhh|Ae!*&gOz!nUwFxTVFUCP zu-r}=0P&@O#WCDA6^mS;!e0@X3)A zay;@KpeJLRvLyDL3vvc~D2Y9rkvnNZI%d@Am_bBdEF&M-RQUKke0)-lWo+b5nvmvG zulW$siw}4SpOCcGu{9{=SO(WM;6q6BfsZh@648s#1jDCH+G;-7KZ{;r(j(TmR{!w1tK#|P`b@M%EqqzP$0&6*Dpz4%Nv zeDFqJjt?$ggijN4CrwE68L0UX(TmR%!w2u6<@gMdax60#xsxWO`3%y0i0H*BYQywCE@xhuX^K@5ftNBcmaxAk8awknl^Fd4|A0m43+0F35rEzZD zcb9T3gJ)d8hmhujb2RcHq8Fd(hR+OXtL52O%CXEo$elDH%?I(1e2D192m3wI>tJcC z`5YwWSmr?FPMVPBgEJuVA)*(bJq(}2rLE?3n3Q9g*~pzVA}&X(E^W0u zr%5@M!NCmp5Yl|G-zFa-dhwZI_@t$+=5v;mV;Sr}z=x3LgMBvn5YdazeumFtX{-6* zh)d?zBIHh*kmiGZ2Kf-ti_iXs&r)ft`J6B1Smr$BPMVPBgDn*K5Ydaz0fx^qX{-5M zBIQ`-V&qPmkmiGZ6ZsI)i_c8M=Spd-`CK98Smtu%PMVPBgS`{^5YdazfrigYX{-5M zFXdR~I^<58kmiHE3HcDwi_bxZ&&|?S^SMdNvCJyuPMVPBgS`p)5TW_t_}~O=V&pEH z6o5D}i;w~kCuI>*c-cHz&~psXn`3ZEd>sK!6V4n91Rf?h23ssVM0q@+n#^%*3?{5C z_tLR<@|;Vh*(i57^_Se9%&$&1^}z8sa!eeHH2GK5u+wDPR5vPU_~X$9L;y#hboJ(_ zsfXBUiZl;7o6nm)D}nd`zB$?3jx(xt|BdQE0H~9hhpY{E^?}A+`3k%KxBvdC4r{+1g-jTK`R8Sj{2UC-XCaVbx`&f=N`S5OpG-vTuhITk5q#ykh{T#x6(yKv&bKHuo)alqYm`2F( zr<;-3=^rBv^0t?g{0c40;7VU3A2!jBw}dlni6;SWW7cyE(ke^?Tr{+AIM_}TTW0q# z+Z=;dmK`%qz~rA`Qe|uWhMID_X|rY~TuKs~K;96|$0q&-WcHe_LY;n|s^N9%_PS?Z z;#(nOj`-EXIo)nY@6hc|WYBG|Jl*aBGH9oNf-HGM5e?ZM8s5#U=MJRQ5SKHeA+gYq znMXr5>03i#CS1H4x>%zjl&XXRc$=i>;+&4`yNHhWfCL@yL)J^j`+74S?(vf`^(eXi$pySVw_0sVnAfY1$ z-OpQ*eR?X}L&u*p>sf=8I^r@=bR-r!GV|!jCVlHD%!G?qM;E ocsg9e)85bo?c< zUOGMsBy@ZX8SlFGsUzD%$H$rVJc5)u;u2MKBo;a{^XSMXed{R9go{^47rP}L*|*Vg zcsKSs&f;f)X^Z=+H~ZR_`Z^l*3w`qNfGtnTxz7>crUutJzj_Wc;82NAzeQu%<#)(n zm&1YyNa55D56X)M?Sa&1SP094sqc`5?DX@frdL6%1P%|%!sYmg)OW~D)FMB-B=Z8Z z9(3cc^4SSog12ut)J_vyZuc5H{4|u`I+bVJCd>-hvyr zT(mY-c1|z9LDeDz8pI_9@O0A<6Mc} z=A0~x07Zp4Ut!ks5>lEIClT%I5s}b639u+Lk44$4(4t;Z$MkP1O>Bl1MugWOzkI{0 zzrj*aSBZ{zFnusEp4v$qjfJy=BtnXGd4uGlbN-xtx1$2WPr`WYg zLXvO!;!Qa`1Sr_e@pdSy-}5z?7%^E(iV)I!o+Vwhv83KJ4puijA+K3NzzX&HdpY07 zc;?&jr>Jq5*zrw}V8^$R!H&~{si|;HJN;+C@*1b>iQJBOCN>))0KUzv=TAr(0C(cV zo@J+rMF3>xaYHr%6Fsr9AK{EQ`w`(LY`hWB#b))agy7K4vmasCc|L*_%ILNpBWaXg^Tu#`Gn#uZ1*xXskDXDvRRi6Xw2iIf)~P6GSp zb_vx{eicB5bSDWeY=aMjWpJzfUm#N{!tGCU7hfGWo;aru>6L)~Er(o(Xn1%4=BlSq^TaXZ0G8A_#?h5@cRVi++9 zp1H;IEa45+`RHH*C*s&IXX9BAJ~$O7!-1VQp3$Vf1cDf^vp8PZeyAg4y#5EHiSarJ z?%%dWkm^sO7AR4~Z1Rdcf zY)TTiO3t zmmRQ_cX2JQ=87$_tDr3w zIW=8;5X??vh4!{WaB`A6py`CWVLwA2fJTjcTNC|CeIinuU`BVjrt^E2YxV=@$1)EK zLKL{Q%@>W^*TZGOmjw7fGtY9(R^S7d3Df;$x$a9sj~K}vAy#|RgGtS=>r=3ab`7q< ziwefe_N|s`Lyb&IVJ7N%C#8$cPD*ba+689c6TceRp+WD3X`j6LiStJ@Uf8B!yvE}? z9Zw{5b;yumjQr^)8klQ|Ki!C84IfJ|FZpTg0AOWvWoog3z&kFJ5s;>=lzIsE@>V(n zoFvK@9bHO=(Z#}n(M2?t(cP1y`>yaN0i(;zGrDY5FuI-RyRvvRVo|>LVZ;($PJ>u- z5R-E?J)%X0;fQXvBxXc~nW*F)Q5UO6)H|Ly996gn;T=y}ByT)Ff|f_g{BuCUcrFpO zvHs|RTm;y>o0`rc^*gDl#(IuU4y!*01LwgD?Hbz*W62R&pBKjL5TUGuncSdeDBFvn z4AvnQp^TYloY(}ROlD#JF_kbAF5X>}i_Q9bHikX)ST2TPkK(n7qjt2jK8|G{Hksyw zO&-H${K z%CYgxMZa1L+FY57d};z~;W7BS4NB=|40`Hu(OO{fD{5`%^gh}4@i@9yB;t`U8Nw+d z%zCh`6sOq7%r#=+5zIUu!6pSBVGJP5gp1bzE;eg`>|9%MLvF6IYmd%8c@|E`A3ot> z=GyHrLTMa)oFHxhb(c4f7@Sna#n=d& z+3Bqo!%V82;;DE8gL#20LlMmTkVQ|bqOx#OZM7g~hb_#+u-^FXVzWNwUEjWf<^PSJ zXHIcsJpSdVPQ>oHGN1~b z63c@#Y>=IrB4*6h7LSx?Iy2ZL``erUQw<}E$9Z$SwDUd+xlJW@+=R16sX>W7jZIPS zTykP=dF7ym5G3lE^!*ZLY$+G<| z-aF4K?DV$wP7|h1$R7@wVIJw^8y-4xruq$W5dXWUlX$3$^aOorJT#a*nPao+jnU@n#8=b3Nx63=||t35DQb7j8aFo$c{ zOk5niE0*G8bh4D$X(`e-lQ;Kab}m?K4PP9g9{l znOOXJvAEm0UP4{?ObAoV8}yF8s8}3$;Y>ogN5ETA~b%fWIl?MWum~8x8m~BVIi1gTFZ9 zMV;+dt@q+Hz$adp`VC(ExkM%4tGr0a2@!N%KDXfMd)d?g>+T?CJ{l*KZug+#B^pE+~ALcaGahdBBGnufOVy7W-yJwuRI1#EusynX#j z;Y0$CWP6x>gqgh?KZBmaG-m6^1_oL;0Sf=~cq)b#Pr>D|M?B>(M|y^5_m| z!96r8hI?qkne}Xkl=skPayZ|EUig3xP`HQ2%rly7Rd5fj28)8oieMa`u#4v|8nK(> z!(ry^T{OYOhzU;ETe=a;i4ONd@IIyGF1)z3W4BG(&NmP`Fi~xB!3?f>Fj68!{;0r{ z@fMqBXllEj!mv1XU1Kqpou?r23=zCnGm-etNQ{?(1|gd~jTO`ECdEMlnqw)Wq~F9j z3FCN`E*=_66@TXL;n)oaE^$_rlXNu-rZsH&qE#--dy0U+7WF+jDN? z=INQ6rQ$tbCc164OL+zdL#5x=^E%l%3?UtNu8|1IwqWn0#-xkYx`b~Y%w_8uN z8@ANrhB@0XP@#uj2ZxaF_2Q8d)rm2RBj-Qj!$|Ouomzzn zmc^6C`)79{?EMr!PYh)U@x)M{;@k7bN(>zVlDQ7VeFOC&etUuOW8xH}K$LBftiuy7 z0ui6$BC;8?AT^~wFOqYWJQwV}4_@@S0eizfb~Lk|kx03ZJ&=LzR_Txgge+#Bz{XYu z``GrBSCDHUh&$(UmkIhxs(7F9dFZp%eKtQ*ikDciKMLocZcmm&wc_3UR?N25-FOw- z48{6jr2AO$oeu*Xfev&}A$(VR|gD$qu_4)@` z(19;`_TL=UBEE*`T-?{T2eFs02~vEmb^v`XS7|GJjlIFwu>FU5#v!Gz9qjrV3Gg*$ z9$#atK77p;b=-i`LPt?tHHR4n{F6f5d$(qkxtIFvOe zd~KHTHDcjw%sjp(mh9Wtgqw_s*VkO^*7_Pp)%Y5o@!<8CogNRIoR8|$4BQ*X&05}D zEk{f|PGa5!R6)!OU|wE~-x+Y?o#Di<zCOPweaOENhc!Bkh4a(op@pH zFUIr~Vp1FFFu7&f6P$QqPf_5clbQ8&A*GWZLMNRodnXd$q|7`{%2owVx_$ubdpmaz z?Go!?nam_K!iT?*HjZiXR?O{-1`H3{F>k#oh~tQmw1HNcj*`3w+|q}kG_1F>Lz;>x z%Z*}jWf#Eo_y!sJ**azA>o1~9Y|?cS#S3J-6EY@)as!@}&Cb&(yI(KF6K(i}v@l5U zc6q2{VJNj8vTL0C<)Jw>%*oKZSL`ks=(uDbc zCw%fCRGu~)={38|o>!B&1<^=<4CXb~8^n6OLxVo+A$Np^oteoSl?)AsGUUP<#A2#2 z^TY)tN^>%Xy^vq{1E7kk9{*KW+@?NFY7 z%{De67RwMbk4@O5@AEHVCS1H8;$jPI^6=w1o8ZFHYZJfR%RE7BG94t?=qN4-f- zy?6#YYJcbLEaPj1D9iRa$%7Mon-H*^d1dxQ2_G*+I{qlum7*L%)lAwihtOMbj0!3U zFYg8Elxxwir;pSj0~t)n(>={Hu!NLOIAou@87@xL1s=FJGkJ%W9*Dr-z8*t|Zb*O= zGV>UmtqPp5^Ga7N2?JXtR?Z1LYbKYG;$mGY-E6g3xHi)^=NRCxn&OCyB|Rn{E6Pae zBd#u9-Rf6?L<}*D*L_@UHo$n#PdCDDALHkVFT0~h&;0VK_Yr^QiZAU0k~!bn9-3u; zmtnE|2EXI+2gk*j*Id zp4V52)Ej;`lbO78O}{&we)l}ow$miQ@0fY~j;#v(uJ|sRepI}hqqnUakD^|Kt?olT zZXJsE`!})LR;#!EF4nKsBc(?USNh=z<2*+&9M8@15uS5C!NiF1$ep@D21o{QXt9{U zZANk7hi{wk#m9zQf#Ti#7EZejF5uD8PE);P?_tsBJw?0Zdb`zQV%A$>Ccf)kZ(Xbj z4*Zr4e2vfD%hB}|0CAMF|AHtyh-v;v{+?uC=;4VO0l5Z0QDVk{AYuJkiiTK!o6ZNWgSu=9#W+RWM!GZV>Zqy`(p=zV1JXI}PCs>ioqh3Jcb>NLBb>d@wX`WgkNS{iF`|a{AIwTp2Cpw>$%)nBFoJ~+0)~; zplefn0<5py9aqQV2GtX7s|{+bg_sha@EgyHNE>dBk90K_tI7u&`2JXkcP~W^A|&1bsRNFktDGtyj44=b6UGiP z1&?LcgXnj_BH&RPsO|aQ1sdQZn>+) ze9Ebt6x(o;WUxDxnY9E~#9hOGA?w5yD6036B-1Bz3`)K1ceaON>TuW(AM9X@pLqi7>BhD>y-BL%((C3;K+|Ku0u<|;ZePb$}#7w@C z#MKO9wXgq327m-iC1#$f#8w4U$ss6^cBZnZdOP=%T3m7P(c30+=Yz1dHkUCP zBT-&Z%9*mpD|j=fzg*b)uvfz)ic(F7v0MvtcT8Xzu`@Xsct#GdIJ=e31+p7rILWZ= zkcC42O_jabl8vXaDYAC)2dlXp7Ppw*vTXGrn;ym2F58BI(~l1q6=MT#Yi+9x?ig^t z?6Hcx_Gl)r^eAraoxCnqPhRhN;r^JHhv4U#yPOqf?!M(qR$;8{G=@xHRgD?wOIC9D zIJyQetAmWT+zaKWOK?BbQJ>;|=v;}f3((x0GhPiM1MepMeCYUb{F10>cfSR_GH0Ns zo!05;C}-HSMra|#4i8G_thL$sGn#de!d4+U8c7FCOS~&_>M;yl(RfYC5DykIldteG z9^hJ}ef=m3l_ml4fSD&AuvK9^_za48`=(XAFrA1uZwsUgwiJ<$Q@^-$S4nSMFWrnj zq>}^tLV*N1=^BhuAtf~#qI!|JT|x1X%h_05iI*jQZM_ngNd24vy|VO*WVu>;8FxKK zdq!WQQ^>Eo9~~XeiU{VilVEV{wwr<*<>IDz8q;ALyv-{RXGBv!FGfe^e38BMLgmS! zctquCX>q|3#{V~hr>-inB+YBKnyvylPxER)E%nX3l^mz9u+rqV#rnXtsMOpTZMEB( z*ec8}wvo8uLo;IBOMR;MkVUqea0|<{^#_QdYRF@IGke7^WBvcAgJog1wFSdK742Xt3%;a05jE2WD z8on>0kbr2&%o7dSsxTU^c15Qw{4)?vaxA7&4G-yDae}Qy#9{a=F3!wt6eq&^re9Z{ zagZmIf%N>4)|s6*)4V-|6FB(@I6ligY%Q1=G3IWf$RLC2y_@J_jsKc+-Lqk^Mm`(pea4$l(j$#|ZJ3g(<}CQLR241bT`DX3tlmx3tQZ#>`@K!VOi zd8W%fa-lED$PkZQ;4}?Gcs^1-a&bI|kbh6iPLqJAE|__SkgW=yx>!HlmBBTkPqxcB z!IEWwOYPvIbHPCVs5v#>?0mp&WGCiT%VJWJ;~5(+K*>%s&DZC#V)`&@71!q$*lAnz zIfC_#9bJX|q7a2j;-tfgCC4GnTqvS4%@?(Ns5iiROwX-ZaZ$g)&~A&UKa=|Ih+l(l zJ?>yubc$z+B0n~zg^@ESp}vMHDj}Eft@aEP0)?5lm^TEvSUqL(-WPfhF7*h0o>)g0 z^{nB3bt=@r0*rH{i$OAT<0=?r2*z(WH2zlnav6x`y?QCSBN~tq&C%t)24C}V^k1D% z=P2p%hzuOx947TavGHYeq&%2fmobxXXme`eF{1YMPl`w+U}`b*Of9x5oLZTD6;cxt z9N(N6GN`GkKK{EUB{n6lS{H_zjUkQR- zOxkHF^7=!bZ0O^ecD=HZ6{g<`W<6IR<@Ced?)LSog(C@=e#|_NwX+qb-}g{E_gyq> zajpUyivhFD)hx#|*B~=bz6mBx#7aDFAo9`SO7x%F&H0*qSP&|OhwUUE0T2oCVZm$3 zP>YBU3*v&LeLece3P1usEXdpwB1A^Ney=l&x21bL;zlVnV5cb;{wmXK>{W4dM@vZ+ zE**yVYjR?yQgqBdq?{ygz7&^|->Thu5wq?k{6yP4_j1v__fBtOz}~^n<3k)!j}HaJ zO_Jh6a2W1+_rad`95LfcAoNoSYw|SpTqiJIvmJ)|24?a%2DqEWwyS;pWN{c0u$yJ( z84R{6*v;DVH@K2$70%oUGHyu?U(ku`WL)47PD}v>7dWn5Z$Pe)d{GXsl43oQKgbnI z)}dJZ+J@Vm;xg-No2{2wOSTgvn{bfl+J^FOj_=^Pwh>H>7_+d83}P_v!tP?tc$#Y) ztPJvP^xa|8!fTu3fWvJU?|Oed`uB{pPd-gGSH^i2NEl~?xSLVZ16;KoSH>JH4+Ir^ zuwFlhO)eO9!~~4`O-MQF*iguG*u-MUnR$ksO$vtG98(B0;o`k4aIq$GW}m~p=6-n1fIyFj6g``6z-CppYN7kY3 z%aUF#nEk5a)sEVG(9JPN{VYPxXZ2(GjTqDF*tG+~>gAew5l7Yfz6ylZm1XlHN2=Sf z$vj^D8cUR;7S*z52-FHSrsXB1e<^}NvPQ^mpIHwQa`4T*E2n-YFuNL8Yet=x33-GsFCr%MjdsPV79Z# z?F{?xjpvGNRqFEUF-=u!X3fl?gXg!t3RI~R2hSW>rJfvo#vn%>ftrq*A#HDOp~cRZ z^4~4;nO}W#tU@g;yQ?;=7QzByb#MK=NQHW;=B`>toeEtl)Ri^V_x3ub57rSsui_+> zU#NTuy6iE8eC~o&ab;DUP#4FnIib!`-&nNC2(iZ5by5d?RjHj@#=uJ5G1_5FIn(V1 zGQG2s=~BV}RjhP=6YHN)L+!3>V)}F?+a|!XO1(LVI_^4^L{12lKy5bw=wOEz@$)>>-4Ls-Ic{+C622!k93G>bG3 z1MQ@&=1SE(h&3Z>x+)o1seV5Ajh3tNXLa|MnvVjShP~200v%dGXpovA&?gq57W}mn z^4zD6&`|sh4MJlF5ZVr3lqIxN1ECJQ6SoA=rg}nM>LQ_i8Gob2!C&}zK`lWj+P6Px zhpU%_R$i{5KdTbZYM{~8_!jRw>K0gJI%qsudPjKfBQ@u$_cfQmy6S1_DD`*Y@fxZ{$-XWS6wpOEuI$J~K7IoMW&@{BGu-N-?aZQT~Em3=W z(=yQN1v=b74Fc_Dphkhl1Nsqa_7~`60}T-9i$T*HD?w`#=-PS>4HW3zS`7^rXhEHZ zS_FE&T0=txI-*5G+X?hVOhfGg{n2I7sqYZ5b zfewo3n&Sl;W_Wf9lquJ=9R*s`PeYRh8rr0xodg*kv=U0H1+vVJ z#(bZKzZ-m}Wn+2j#&WqIptCF==H};Eyr!vzfJi$=Xlb=bpzEzrY(El;t8U zyZfnMsY^WlJwpgwevSDu4c}P2RG|M6F27Zm3$$6F7uA&l#f0apYK1^Y3hhmGjX*ya zXg&7UF3wXVZVLjl1s;o60C~iIEff}rzd!Q!k z5f3!jdej3Ytj9gj2o*?S1nU_OG{su$fp)Q;^FY(B=RMFq){7qK zKG}~I|f#zDTdZ6R2*FDh5)*BuuX}u|smb2S>%R^gWz3qX{v^IF4Mb<`-pPgg9 z=b@cvedvKMwm$Yims@}FK-XD+^FXVt|G{jW9)1lD^U?^x=`r8}a|-%FdkA&b<-# z_(XIjQu4RdUKIzUObH!zcXWBFE?Y{=`H%2nppFPJ?Fmz6t;|l@O-4RN){j;TDlPF z+ag1%bP39n$}UFQRCX28XF{uxZV-!2E}Y4+E&e{z zoBPp=KCY$Ar?xOXGxQ1YPnZ4;>HLzOQe%3e?Y27;qIuv(o)(3cZ8;n^BZ`= zL5pV(8Qbrm#p9}(J{@KHf|S3EvHT6v?Ny7vtTL|lR1u`Nsm97|+nIrBsB@pB4$h>BH4b|4`2K)H0?=Nvp$z`hrluk@CF}Qa`U{ zI$P>I9o<(XY=vy_)0}KyI8#vP&U&W5l5$s&FQILo(4otp%6YQ+?c#oP$} zt-gM2rK6S);EdoLvGCdG@xb&=b=1&$&f@>q>li!l99RWiCi<9OBbsXc>o_Yl zby+=TgwgRQfdebyGm@^5v>B-@=Q42qL1NeDBK%#dqwa`uzU0erD7fi5tNY+^w4r8O zUDa|bFo^&omDiHQ^rid%xA?JE-#+}`Np+;f$kTg#HMchDYmI#xeBcKAtUf)#?bpK1 ztU^!dO(mu;JFl_M1^++TTv>|Av#t0+7U%M__Lg)!UUYoPrmx;$U$_Mwms?y@Cujs0x_)un-m?Y0vKl>5R1(IVUn1tzsweua zbCdO3@PFU#J928vOtt7mpWED56w_{o^@7NGB=#gX*etjBICkIKg%Mlx%u4?IKBXdc zMl&|;YH96z4R3T#Yd`ZyaPrDpi-MdFLPp&@P5HBW^_^YA-{Z9d`g7 zXlT^7N*!)!)V4|;r)lV+EE1(4__sE&qf;BHQ#Y7)msYG(_3Fo_-L(~!fbKQ43&FEN zJ!ELtfoFsIm7!HNu2YTbSwm~Yc}Amp+0ecmyh`;~Zx~wHkN}`}3~kMz>(v1Dv7tRX zC9ZwKPJ+qUd%x! zN7~i&p`>Y9I@C;o)++WsOfAzi^+xllkzuM5=isQRUT97OTFl3z1-c|MTz%fIp-Bxl zL`JCUVOi*w$Vm10@GNv^WR!YtgobWyzCSWXT|P=fH`QB_vFfnV8alrJF9AKo8=>go z{+4GW<5bx=4fSt2HL`>H%0TxwufiF5CojQJv!cNPEyP1}Ktlj^s!t8HG4@Jiyjt9; zX&=Wb)dY204*FxHE6)-;s^^5JEip-bZfZ6USRa|B=E>cIrK)+r`;p0NFFfhR{=V)1 zeq@Tew@X8R>Hk?|C)Lcue9+1Ud={CiZqX3N{j12%>In^n&MRN1c2#QyS`xavyb{pw z4ehXgo#nf!KN{Mx{XVSRO>NXPaQQAWU5(yRdH@uz+DFY1=o)ogb#2uF>bprsjiM9Q4P?Au6dMX*XM);b}KpEjBdHzr)mphQ|4Kn7Trswd#QC zbvRkQQP)Hd9aV>`>YWt+Ee-v;|Cp*ds!^aNq2KkN2&l!-t`CfJfVMZZ z^XgXNWOb6ET~-$Ww3|R{)%^o@tvXsAX`rFyt8f~2f^LW2_pCZbtpufSM=c^S4T86m0RIM`5 z@K{Ua0(F;x4vSq-b)nj1pckr_S6!rL>>{$LFJsHAE>U+G=)KzIRm&9)iSTc!`UbSi z)PWk3QMp1LE|4D0E7Wm@b{p1?E7d86wgzj*mFf&ba{{Z>RqAX*iv|LKE;O{dSW{$$ zy4=tPL+TakdP6(gzY3>Zw;0-`{s5r64ei*bRq7hG#z3bv1pqx}Ag)K(s;5mmu1D9Z z7Y!{5Ij>W%8`>F=^E$QO(B7%(EWciTXlP&7d{}wC`drg6VpmtKRCn*H?Xna-+^E(V zX#XLr06l7;8-|=3xslcIZ*8EWVO5n2jcT~7YLzB&J*vLH>L&GxY1gmcEs@nZ+TWd@ zSKX3>&MEs<)vapsZbYoL<~zTu`mvfS&{8#Oz$;a^nVQc8ZXR44xjonJNP|Jov^#3Z1yy&d)do5YBYl_JWT5J%3##tUwR@p@ebqfV=*!sps{3=$H-H|@LGRVB zuX-p4{X6z?)i2ca=|n75Ep-=EJ)*A5L7!FqGFNl$01Hpxej>E<)E}D&_3Tdad1^p^ zLL>Lk(6s{HEs&lakE-7av^2Cs{nu5Gs^9CHp`Gi$1@xw&&8t_@$J9oFmW0lz4*>d$ zp**(O)ThPw74Ma#J&)Qh}C+&P7CdLPZU2IU>pvs?pHy z7}y^DwHjieH3P>18fKu5)+x~^)i~2`V(T7&CK+0&^}y&;YFB}lgz8)80NU5ko~xJ_ z{f#=ns_XcOxe0lLl59*wP1zg71d+H&bz*@2 zCD2+m61u;r;&=)TeukNf{kUot=o+=Q@v`WPYA*xb(zqh}lDf@68wRe7{$4$^H``sK zo{8TPU8nr}Xy}mUsliv&3Il!KG&T6D`qDrjgZ7%L+*j8;yWzg*>*`(uHO3!`{z1)} zp=qnj_P741PB74wl~aRns;>_)?IKS_|D^mgHMGfjD*BeHJWxYRD}EdOvpP{jp|gg( z9DQ5O7wC%61w-Bhw9wT2bkO_J_3Auv5NHnTN|e>V_N?1MO~s&QrU?UpA_T3^b>r3()HZT3NSFy{q0e(4XoFeJ0RH7JGPC zeIw9Xi;}&Y>z$IltG+k1^5$=%F752WPW5}re-JBwWKrr5)Gh*Dp+0D-uKq~*XOVV| zI>>3N{)?Jvprf5p)qhj>8fZIbLiK0rI|H5P>{k7`+67N?D0PKO4mddYg*s25Yt+5Y ztm-fG?D-G%>1?T4`$@z5(SNXre`^CnFppg52V5h3rAeTjUtK8=)9IQc0ezFBU4{Mp zKXVZG(3^5l#}F@cG#*HDY3Cq0MvvMVJItEyp&gY+JKDP3 zLpw2#c9Qj`hc-WtcB<7p*X{3&JlaC*1P^Ud9_?)F0T1o`JlaxglZUn}kG9;Ja+KTO zRe7`()`cG0$~@W));bUEmOR?6R_)O)&%5$yKe6U`Xg|%PJz(ACq5V9M_6zHC5A9cZ zv?r|2W8D6p$)i1ME%wk}$fLbzJ?Ejlnn!!hsyx=^`KLVETh=TOZDStoU2C<6_HiEV z6YCQX?K5lGaqMAf=*V(ByJd|NXi4al@}F1#-I`=*or8O<&#hezZP&q%Rex^nYiM6r zxB0)Y4mPx4?8)jctT~#7oyXehFRc|CQd8qER)1yPXrOcZ9btcEJ!7EhktadxI$mT! zyL$DtHA_S4-T153-&mg-==|0c1~V9$G*-p_t>zDw(8e_|lgD(z-GP@Zj9X^%7zX%YK74=rMsb?cg>RoQPF zh!(8M(;;gARcPnpdnfg=s2y71wyU=9I?e5`+J3}9db@s@!T%L9I6a$e~ zZ>t`cR&Q4th_nVgzwgo->>&mst={d4T9ZA;K%_O>uV3KOn(Yq^MA|@mmy2B5KzpWvNE>9|c8N|ufwlf?N3cjwi{{>S?RVL zYL7J#X$gDC4K6KVk2Mf!+u5Bry0q===>{UL%|7oYm)2&lFc4|&_9M5tw08SB1CiEY zSKjW@I_zcxkv7b}{4SR^%wBCE(uUjX?r~|u?TrQ^ZG^q-K9@GazR^IWjkGu2@6txv zp`U7qv{Cj$Yh2o>JbR9|e}CUzHrD>+QI|H>-ee%s z#@VYMcWLA7`vuYwZ2P?4x3?b^+PS#DFf6vc{hVn>E<4z-|JvoUgZ+VlNb9t(d)lRS z+IJav z|EPOneDeL_ete?*&^p$6Ao`!v#{%S&Lh4i3BJHcyky58s>g*?dU5+xoXE1<$Ju0md zl5S0pQ>5m-73}xDg0fFN2)!(IrQqicVOiJI_}OK|B%!ILG@l?WV5xsMFzsq#dYQEC zkJMHVOU;8}6Wl8l{5yk)ZxzlOqtj!dm!(e1rMBUtd+~DC+}fpIozi-?nuHX8b6I-v z+F^DJsZR=(b^MAp4~Wh2EIG=SYHeYikD;AU@YyYG~DJT1tYe?%+1>nhgkjn{m8ejnnKf%k_6H;fdGjd(pyN#Ei|-& zlp9PSxyi4PhBi&$HkaK0|I9c0u+|F6ZSU`Qe>bw{d}q$Q&YU@O=FEJLy>%|WD5gFq zTAg2Kj)$}5FH=Kkt6W;FP|uW_7BQQ2Plf--t4Jrb@hs50#ivW@-B5Nz4{h~*nRi;R zv<5bVA6tEO30r?lMsQe0O3#|^rKIcpnxbJo=g&cJ@w}Y$<$E$xq`2@5A?d#xMc4TY z;pftKZ86@B9NtYHYNn-rDH7vYTk0nw2U0ZMQd<8tWuxTzE^Ll1rA(feRxtkqGRHRy z{sZZe=Ha6<-_H#&PeACKCFgvhp(u#+!7jVN!_p=$!PhUt!7Qnx86_4JZ1gGtoQG8 z>NW27Qu@7yO!sYmKRbRuJ7%^F(^tJ9{4`rlHgJug*T-kS3ANoOwACM-V<`E!@#0pA z<^PPVGMiD4@oDqhnkT-&pse8ZBypA?l%L5;cQ&|3a_UlN%cJSK&a>sw^_(sBccZ@> zuHH?}XXEXskUXAUJga=>;*_o)p5-3(S=EEkix5QEi?AQz3WNg)2NAAB=tl@43?PIN z1`&o3h7n>2S0fxkh$D<3BoLAaqX^d^q!2O)V+e;4jvyRG7)Q7k;W~ut5pFWyQ@jgY1L($A42UlUELZCQtJP+KtpYm)?h&|OU`SvLuok>A z|G29-$?S45G+%Kn(F;FbL?@4$!o)3d)suu{7mDLto{Bx9g2Y2G%l-Akqa?t;F!THvkxI21* zwOMLzwZFBr$7+^59rpL}++&CR_@cvBnU%)r`Q7TC*%Q`Jz}qqFR(UGxZuQ=pTdh6z zr|dh>R_8f)q3oljCy<|gZ$~{3S|R)2XMX|k&K1ui&#}2Kn-Hgq2xylwqxS(oc>#V5UPwb#`JT^y-F*E$*f zb=D)5hg^5q)R{YM%JXgO`-@YqyFoeP+KfCm1HQlZHrJ!}V|c#qlt}WFJp^g9=DS=G zwB=T(?62VNXGFys{t6WG7C|o_1OC?hue;*%=1g4iX}S#ZQ*Oa!-$*scM+tvrp z`3`uy9CF@c?XH?-?lY2_ONPl>co zSywH8%l)SP=nA)b(|#K8ZF_6YJMO2E>MlKH9avTc_?MM)0KYVQQE8d$eD?~#gLBR= zecS4*TnqZYVjSPJOFeh1Qx@mTe$;SL>5J+`_mq z{0uJkcwVvYX=ny~e(tksoomUgt)9)UYwLG-UPpi3s@2|)XB1ws9xT1m^K+5^uV6`z zcuFwWZpOWW%g^~RQcu_4>1nmmv{cXznvSKaHWw5Ua`)=w%QLY~fZ z9`Ve9lpeI|tglu6ou^JxD@Cex0$XiQ!&c9J*Vbh}1YE!Dm!1`JN50jb-Qe=R2(GGC z$i*5SP_NIg^e(WDVo! zw0fo8ZoOP}vwA>1wXnN9WUazj?6Kx}E(5+|xdr^X`B#_ku^I*EU5ZZYsf7=g2PJ0^ zd2WV%yK2!3<=3nC&prXYeSFdD(|r%%TDuak$*uw1WX}b}M{)sM>;Pc9-2k}LJ|FOM z`vSm&(pJB;6_K`vrLDNMH7adoq^+aU*7efXTT<#*QcAhVVTp?zdR^qO(nStG;$mO! zbg>s7mpmts$EWUfDflEesh53?cw2&Sw)(HNjd;)CZvmI9p8~E@zXaT%%I7xX-seWZ zHgyT$rK$(8SA_r%2t6$DkQxUit?mQ7PCYcYRqF2-7!o)ka8lq&f%giW5_n4BX@Rc@ zR2Dh31O@~y71$!MRbaoskiZFnlLAi)yjS3qz*7QW5vXj|?6ME3fj~g;r2<<7whC;s zDVcu3Cj_1p_^QyAi!}rUwg~JOI3e()z$t;J1*#IsFR(>mzrcG1z9P_aGtW|itpY;= zCk5Us@RYz;1X`t%Utp`ikibcedzd;Y@LqwZ1im8B@=95OtpY;=Ck5Us@RYz;1X^Xx z9}u`y;BtX20$T<43k(Si3!D%*DezT+%gb3$o4~NZn*`n`a7y55fv*a5RWSc@fh_{t z1ojII3!D&mlfaV#?-h8Tz$XQ&O4j2N7!bHzV2i*uf&Bu*0w)CCB=Drb`vg8I@Ku3U zmDDM4slep|TLrcW3=6zT;JpIx6ZoXSR|LK)(DF%b0+$PH@f}zHb8eg9{lEkB!h%l# z-#+gq!A}BD&bv?WDc~QQ_oU#b1->d!&61i01_Uk_*dnk^V86hyzzKmj2|OwAK7msL zpA>jn;Hv^vwbU;#AaJ?B7J+R7`vrytP6)h7;7Nh^37iu6q`=bxUlpioq<(>F_Hp%< zc>%y5&T9dzn6Ks>R~OC?0A4l!^c?0?wS)nIEdu)mP6#|Ha7y55foiVg7uX`OU*Lqm zlLDs%o))O)Nq&JX0{aC{2s|lpO5kaMYQE$b*dnlB;Do@F0;dF?7N{0Tet|6lrxwr_ zwJa2iBydXOi^7%sc_$kIxSX-U9re=eG#n5B$6Z{hGc45?e3&|FmcV zu%T`W@Txks5_Q(K0Dh}(0Z&Cj_1pI3-XuiX;V| z6gVaDv_N%%)UftG%242xK(&sP7J-5F#QO!F6nI)-U<2tV1)dfdXp)=)0~ZP|@T9=g z0s|KbUEoQ9rv(N!3SHnyfu{uqHj#c(;Aw$@&5~2#Nr9&Y1}+x5z>@+`3kpsuj?B3zt<-XQE=|189n)^xj z_ua3$_m)0X`nA&UmHxW4%JY5Co1Qt|<=*w)R&Ter&ztbx;JwZJ3GZjTk9wc-e%JdW z@4tCV%4U}>D_d9AQntJ7s&uRp{c+g?Wsj8oP1!$`{jf}xx0G)yzq9=1a!o!^0y|J(I@ zLH{#1;YSy+tWN!s=D|(Mx?0xrhb6?vmk?^Mu9H08`KLq#S`KKd4$v(1K0sSt z3L3r)18C#z#0KE|0BxLHo(uc{ppDbZ^MGFoXyXKP74Q(CjZ@4uz{7wxPGK$p9tE^< zD!C5$Q9v7Kf*XKe3uwdFz7Y8JfHqDjHv)e@pp7q8Z3aF8h%<0#FTQ^QXv4F<1o$yP z8z-0V1%3;ljnhkftq$jxt-$|WwE_P$ppCupHsGHDwAEi=F5sCEKpW?r9l$>aXsgeo z$2cCOB zfVO%fl=f360=64$vny)FgbqrAX-RXOlp?99%^nV%1MP*nrp ztNg(CsyV>-s{ru*Y8mh=)C%BNsB?fHP%D8SQ0D_bs8$0%s2YJ^iLZ+_0Imn#uQmbi zR~G{hsb=6IwFUTqY5_i=wgM01>&y*++kp?NZs3Ee2l$W*0v}SB0UuVE10Pmb0FSAI zz+>tv;8&}D;8&{w;D=NM_#ymk{kb?*9|j&*R|6kWao{5=0X(5bfhSZ7IKI6GJgE)? zA5}+zkE&~dU!$%EevNuR@RXVWo>Dgg&!`Up&!`UrA5*shA5;GY_+jj58vy?h_z~=D z8vySDeiXag2EacCKCVsxA6K6QeyutQ{95&=z^_yH1HVpv3i$Qv)4;D+p8T|%~uO0&ae)R?56Zoa>2EeZXpTv)6H2{7U_>F1`_>Jo8z>leK0zZcDoSlog^xuHr zteypai~2j@x2WfVe^C7c@DHjNfPYAR5BP`FOTbrRR$l?Ry&WZ*P)VB$+aanl^id5uw<$G^X|WOf7g9=>EY66N?$MC<%xO{o=MNAJzw{H)AK7& znfK>qwdI@3?=SyS`7g@1RSZ{rzH)!nC#ybH^<332ssg?a-yYxRd?gdS=aT=&uRE6H z5x(a8AGj~0bH$vzc;~N%w8DJfmVAY@KY<-TGvAkSw~bE-<^G=YJ%*=eVEr*;E`?3+ zg!S%1*o9oXVY9nosrMlCAoL;x5%wZn21~vV;c|ri2v;B+KsbnSCBjv(?tQS@{Rkn1 z0faC@1lB!@J0F9vzC-F9Xf<_uCA9cFXz%%u{wiqeYG~;iXlEm|@&ah%T4>=qoMfzr z2Cj$ZZGgr#LDMdThFt{B+6ax>1Wnou4Z0Yb^B#<0Gwkgp(3VS}C0n2!?}eRhfo8No zBU+&eTcH7M82NS)#(cRSiC?O9t`|GkDd+l%^_cr(>f6>I;jObz;CW!&tFr%>dfW9! z>K#{^wW6fV+JvwJ;WC71Nxk(W+{^e5@E;(&iJ;tN)-3lL>m66U^{D#;)``+GoP*wM zJzsjW;iqM9SfTPatWktp#Zvnn*K&jg`yVUT*uMhJU-^c$2%!;SBSH&82SN|R z0fa*cA3^vs!m|i3BfO6AZwOUYs2|}Hgl>co!eNAuA$%6$O9)>>cnaY~gf|f0L73-5 zJHG3{#~ao$;CCSW8N!$F1QPz5w`}g~Tidr*H8+Mc$<&qsCr0u*lD8d=hQ~6|*7SHH z%v2$63HSB2$I_$m(0E%slum0RimYdm9nnlrG#pK2x{)4DrCCf8&Mc;hDAwc@a|*Pk zJ7eh#i%9}`xu_rqlZ0|+jhl+G43;{Rp$H3U?%LupaJO}QS7;>aP`gvfa5SCnLI@2- zgULhDgh|wDYn@Ep$Pf#MGAyuXEIP)k$wE9B zN*`ifZOM2%8qUO$3B-g2rgTL!!^z0ju~-}}Ik{Vpgkl+q8Frw5tb${YYx9_}ubtXCb~>s9k`G(MUyWspS5xQ>|~?HHB#q4qDOrsD7yFHo-#p3BLSUy^{O1E!SdYYwyb+#$_ z$U6nVkG-dzE932FgQ3(AsLZr0nmLk89dh#IVoY^YD3)+?oJnK8 z-GhVC1oY3zk{4yFX4Xl|M%s3Fb+ztlSKEY(*50;`4%N1AIN3VV0e_%NZQrH#Ub;)Q zIV0E8wtJV_wL93cy`!x)*n!B7ZNa{dUE6o7-tlxMI?~v&TeWp`OKrGN4!G=yW&oi| zfO}-FIvIMM9KBLcZ?H9p@8-95ZtDrEL=etK?`7&R)wZt>6VNn42}*fEB8-is!^u=U zHh`fFn{2t6nr_??O<=l*)$RlhrKk_^y@_}>Rzx*bz6nD1AoN}rMSrpuh~3IX95cIj z6l_Jcp0f9OYKw}t9fn%zntGz4hzbs;cp+=5ttU#RRBI%nw#P$5L(z!pf`!3lL|-_V zD3Q!$;viDOxmZV9TU53gjE!Krr_;#9B5g^S+HeLjF-&_C>Cj+wcLH+}dQLJkb)<9g zU}_8_8evuYhNFq?$<#PMIf-Q&o`nHC`hw$47+hfr< zh#W9I6{e?Ub$)u%8OlCALr&GFrx{hBp3>1>jMh7yn3eDJBnlW4H!?k?XDrcr7;Df_ zbb6XuV5bR47VK%%9azSTr|e9oGYKy8)5>u4r&G5E$485h*+8af%D(788mrj!nxIaD zv7zbop6E4WQR)qs#p%hN(ZkXBbg~|#U1KBDlc;;ssoEG$r*m11rPHw3)6+V!FgUZI zXnK1z9ZtnYY3`>N#zajQqqmKvQkczL1E-Av`ZEwsO{aH-5>SgG37tvI_abyza;DeQ zg9R%+olI3JLe6!)NFw+zLN)&Fw4QZ^j_M&RQm7}2pESx8N#Jr9%}nQ)DicdZ(`QR> zkB(wp3nk88G}4+Hg2R`<@QxMB)(vrs$33khx`#XAk-=M;&RW}WD08+%_{%Doij8bb zL=??9Y0|OugbxK%jAAmwr9B)2+J+S;6YWT(Gob{cD7`b3 z9&SrUqG&T7g)^i}?@h$Q#5*WLwKLe&DG2h*l?~(!op6*FZQIMehH&9nJjr43wydit zdlJR@Y0`E@k7jXbv($qnu_u&3g^)1@hFC}9Fm^IzpG!-SzPvQodKliC#BxqQonGu+ z(n7v0mX0y=VdvVO9AgyBXJ9yKC3nI@1qD?zwmp>`aVWi5&ydhTImw#sAXwx;z${BA zaSg_>Jge=!G_9;et`rw%r-(t2uy%z7$J!VdJ1;{Zq(M|E2urdGiEz!&MurSk`y7&C zBs4152)0RrfB|#W^H%Q-MR1sU+!@PeQCd!rL$)jkTQrtTfYzokUj*wApNYOy zv?~-IW+I%gf;jX!ml$UbHY3ZPu&J>f98#rqNKnZHA6+7{Q4*{>J_eUt&>c~(9U0gd ziJ}`>T--UKV&j+^7mO8hh%#)*jF&`EQD-s?qi}6BlFdQY=^YNGqUy*nwyHT73wT>- zG&6>)OmA$Isp&c2Yb&_sFv=1UO*4@m7D;-fvlN_TWW-TI>ds6iyT{Z5zATy=NFt>z zPN-)Jv^X{19ZG?qmCG?3stq%+CrMGm;a=C*CsH>|v%yAf?j{;&EWU725?5Bc8taHV(rm^v7sSOnp_SPcBXcY)(RhZWFS5+ zQ!<~76Q6wL$xm`hq(YJCNGNqEm!ub|?J0~cH*C2C%}q45GZu+N6FK^}qfit&Bsr2{ zh@%d<7f*z?!ND3!$@X)4**s?@m#9T2C9sVM9ThB{OE(Q;ml7EZXQn5#B}d1x%^WV8 zG%^}WjOWTYwvuh4oq(iKZ+gmy|}hq>Fs z+z&@%hcR)kg*tE-Bs!xdA}Zscn1zs$>V`!&+NbwYB*>}H)^Q37ODQSa5?IUf@;W_e zbjE-wqMRkV4=i1o@UW;j z^jT--!b|!v=WI8x?O2x^vnrbXgH(dp>h>8o+8jqjRas(6}uBc04)@9}H#=)3MU&8{h zWf}MvBf_LhXm53AbKk)Zj_>k75#S=hT|+{wd@(A3C+d0sH-+?b*WFh&~zM* z5^Hl#lCX{>1`y{`(+kCw`nZ>nsst%=Bno2-cPJj0i6e)k92AZ0hDRo~=)H&3e9Q~3fn>*=nsP}9^(2qvQE)by7n70JXBF%p9cekZV8r;&S%Qe7U|T1`E8OXE z2&YqaMZrV1B3LmVNp3qDj>-m*V$=s3Ig&Hmas(dxo)%+MIPH29v6d z`yWgYiQsS+8&g5!Ou~T^R&;40x1W_(@}l~PU-ibL(NWcVC^o9vcH*d7^=6U)`t%QO z+BG;o1WRr4XedP&D<#$Ht*}(-ploy}e7tB1jyZKg_RI6HG;+29nm!3$=QA$I6(yA*OzmT^!j zpKR+@2mFFeY%qo%x9vWH14$~TM)sx=J7dnk{H6~%HxZcApxe03(;JT@{H2uA#s}xs z*mff-PN-H!$eYFhOIBy{2(B;|dc%uV6`M*2*S?(-(U#PSpj8JOmD@IIWJnKZ>lp5L zq+~d8E*Kq3ad(PI3>rkl4Nx|M_VuC?Olq1evD;E9=1pOx!nCJE@ojlz19jidaTlISgph*}bJz z_DCX2ktGNP_Gakj#ej+a$bCD;*m1e%sE=wL5U|ef>9>Jg-LAa=J)O07D!P5kX z3%a?&MHX?~EFE_|$+W`JR~ja#sjn|H9LtVV)>&=jTu-ZQ*NlbYQk~gJ^FD3m1+wf zK+xQXd4&kFUX2)8-SW=ln8Tg4k&EJv4-N*%2DZ^*J|ZBKS)Xb<9x_h66_fZQ3fNXd~%UJ$S)#*J|x60>UfOukNZmP=uM>z_nBRrte z7?^Odj_z&nQ?P;3;?hS%1tdB0S3K&|Sf2a}Zwus$@r;x(ZyR6|;V=@O5!fIDjNpJA z?u(-Tjd7$a!!C8h(c+C-I$XKM5;hG(n??#T+s)aw9u1MUb2~>5Ndbin(jMgJ$d6-VEDJQwxwuL0NMO7}JoOUiLyw)~ z&p9KhwvCKB$*Clk4d9LwVxnq!7oM`X0MAD9>GE;>3*haBop_RQ1ph9^bB}4ImbBwJ z$_zpP&tWF<3}gz=Q%3Q0<8^pC5}zZ*3lyvI0kjsSF6~gekY^j7*$g5#V?jL28Njoc zI&VMlmB81b+ zQt$bwXFK}18?rN86}HmvwB7Ht#QvgBi*kKhhql({w^oq02@=ZVq#$i`p)_s`w}F*y zSwRGW;fWwn0(dO84Ojx3v<80BITOV8Nq zx@oO;pr13fVYn*R)=cI078!v;?z^PFhtS8!j6AP(MzseyDUp;&_cxU}kBU24Gn0~S z#c*)mvm08yf*9a#4Ae{=BO4qjihibi#g(v71Ouo^4`2k!4{JS5X$$lJrojq|!k&$P z5y_F6Y(n9*3qTcnL~%JCwuMEQnYF;rV#Y*6&+>}SFq^inSJmp#k`*tq4WM2aq4Q)CCuz&&D(LKM7 zyz(vfnKkK^1T`+nwU*zjY>Rl7@9b9l%n{0Ou~=={R%aEKRQrDSRf#Z?wPkN?0`=PCRZgb_%mr;Lqgqfnp*wkrspdWhM zjkQ0Q&UFwYS7zpy0;Vm6s>-(qs1{~g z3*iTma=y4Gxdq}W!L0Ir4R^GrF zt9&tYQ>fBxW4d|41THguRXdo6^3m?qbZHd!>#UPB{2xNN2uGp$ba zFgu{d6kz@ul`j&mKZS0Kc0qQb9GwzfF6SssUrh>gnDhWt3Cm}Z!OID>kiSB)=JS~A zHob1zKK9G34R{~4BFC-rP*A-}&1iLJYFU>rv`wTbPm2tK!dq+Baw^CU$fymoxKAXg zJ$kOcj3d9RQK^aJ)3x{A3cw6NAu9m)ibM$qD;Gc?}7cQz^phTdZWq?L2EL2ky3fMZyH1$JV;QU2g7xrMt)wyTQ-ZBgHhjj498OuJ>ncq zy>8I9vo~D&_d#B&jQwmU=HXcG15fmFxiAN@k?f;;AbDX2W>eBf!RH0wCxd$8N}YEE zv;oM8qe)#lh%{49huxBXq&hqYdey^Zm9bF zSRYDJ8#(jDD%KoC58|kENcu=EIv?W{0S)81ZWr35RPu8KFuvq2A>3&%fI7vR6}GyX zOWG2|&+9=;teay(9pK#2YbpDpa|Q4r6g7+fSgswlq0^~Tm&oUV`Sr@V40Rm<&P^hI zRr0;X_<+E=&v}M)K}Q1ZlkaqN6&E0-c0YCuItP`(%(`$it)#}p~onOnyIDN zf}yE4rF~DYaS)X*;vT4Lf>-~bX*ac3%-NY+h52FZ0PHU31#NOj>@9VGxwMs~ z-qX%=ZKNMC3_4f5Bt}}#U2SXf=j&38HNAuBDb&Ka%qPw}uH?qHP&@NmLLEc<9nL71 zoNRM^8p}bA=Kg}~oSAni#OQ}n7qy>me1GlJ%OX?|EOAd7Qo%R*6vocs6A4rodtsq_kCg^ za@?!kEXnyn-%s1k={>se-S;T;e_r2j=u7R0aLk?E&E-y80ZpF;TfRAg2g>ACs0b22ap0Ucn;|_rXR;(_`vHk{>;Z!j@saq zTwrqK><1als7?9{5_`HSYgbb8)1ooM#T9ETYTX54SuQZp0OMpIW|Px8y> zEI7wJ4*p@48s1GgwdU-uS$+$eL$#{V9iTR79XGnGT`SH#t0H$`r{2?(*V~yba;_BH zTv~86U}VA?rgKLpH^ZK1U1S~-a`iFuj$=#9W899MjLytikjpuo&~B=+Otb>r%xFuH zKVslukG5z$45W4Ba&6psy=5`AkRxiCvGHfEapHqp(G(YVv#90FV_|VNmCp{Bi2{ZXxKz1(_`?UTdGUcS8v$(DKCdw6-!Ex(b#?B5 z@=v;@X&?BT4URkk+do<6t3wfAi9#Rz9`BhPxs~Os_m$SxTmvrHrX>~CqUZiGuiIn$ z_e*m=U!}+GANPmQqZ`l>GFHa|{u@LZlMBi{B}kW4omEi(xXT0K;n&1`b3L9~|HP!_ zZ}uVM#LfP(nlAsut%k^UCvFC>b*@qoWF7i#+rDZcli#SrY|X1O54Vzt;REth;X)s`i#XLFR4gOhn4ui>eHsd5gXROQ3Z zZy9{Ca+OLo|WlryECT>RuOK^7Ig>PFUR?}6}g&tP1 zLse{%XZ@li}37daebhkbSPj4UyrBFV{>`NH&i74@`c@)C%! z4j6fv?_w3+N>3@+z1!GO|ps(6tK0wB_9O319d zEMT*un#pLD!?e$bHodxEPz+U%2?ObPp&zKqi>Q~WYav&=)JIP5z(_i}0wqE33U#HV z9O)QhUpcf)5>bW6u9cz@kZh=hw-zzzGG6!ipCE97Cof7Rf z(Qb(bO*Ba6AGL%xj7=p~;!(>#8F0iZ*QcSU)d8)&v!UM;PoqN~%*@GtbYFVqZ?@+^ zO|!Z!#Kp>%)*`00h(w1?bXcNs6OBuB)I>)mnlaH#g~tu?Q{w(6hr6Z%EEb~x=x^m<{({LSUc<)4iCFx(>*n3?E>j6|u&2C2mhQv$8< zx}X;>M@L*VZFO~iGzo>D_CTyS?>pDrG%Y$Uiw=im5YsgO8INSGEon{UH?{{G#XUVV`ij|RWkY^DOL~7VsZ41y7{3RCf(-L zC}UEYACXMA!P3;b(N}b<-tBAj%&LbaoWKWqC*JgO!r_YezcG&g^{_7dU+tg#NS%L# za+!D&J@!!}U=l<_G5Qm4x)tm5&@#P=>a%sq*n_4!^l$8tsUKF;MhgCyVtS()iWTdx zvS`$tfvv_+A?CAnZgRsEOq-)lj-wT{twMu|@L-w63I?@XjCHXbDOl!ckic{ulq5rn zf|d0lBiY^SpL|$k{Ba}Wk4yA~iJp+?NfSLO(fdvGeu;kCL_aOj2Tk-ri9Tea4@vZk zCi+E*K4PMeNc3?NeO#hbCORe2ZI$zJ|)p-P4robK5wGWOY{X3eL)T zsa_NHO0?QUt0g+eMCV9!zKPD4Xq}1HNi<-hfeJAWdbyk9acLxvX2XbOFl)ISLXq(k zBT#RvuG;40t|RV)YC*-`hPUIf%U}pgyl_w^9>$yqphFLrueEKi9My|0Z#kTShp~QO zidp^<6WwW$PJ?tCBsk0C_WE0Vn62N&Z1#^(v!4LQNkbYm)k&)?hoO;NHItG2$S|f2 zjKHJt&QO)Zn=b#HQ~o(vY13rf#~!p~Tg^h zTdXkKU_fZn*o&OSo2{y|T#I?*#Is@TC+>BXq7IMCo2@v%>0{&(=E*eb$0Fz~CC=TEwubx+x53kcvS9>`Og?Uq6J;ptD@Z$O((X6Nrw#I;K^`*5 z7ojmeUwxg4KLXbrh83<+GuA)U>qVn9Yj@{mdb}2yY(EtKVTbQ(m|dts%>)Ln+SD~Q z3%nsuwofME8&F)hEBRgghDm!WpZXM)mz`_Qb^Tdc@t&aLkKKkT_I!opyq%fh(ZSI* zDKAh$N zke?ak=LUJpSq>^4!i~!GuQFTjjU`UK*-T!FQLBfrV>r06+NsVvPxK!8Lq$MNEQy=& zFPm`=GQzF#Z(;!^>P?8_bIL{5v%BHc}qot>PK8w#$(_o2eO;iQ7S0Ep@}2Hl>0j(B(6PYJ(hQ znNxOYm0gP6rhhNIEN0Z^oqXOabs%#*}8Mkh=<2_yEDfq#qPI z9d{ryJIUqb^%A2yR%P5eu|8k{9C7+PxvN>pGbWbp>Lx?k1olMxneSJIT8Y?=T4re4 zi&_yJdkX_`v@%c%`@a&?3ENdJJ={JkQ0U|0;tjaKF}CNJ$o^(oo0=<7h6Ui1^YjD0 z&`K%OqRX@}>;Ccpw&q%R)d815^_c>y@sDwX=k-;?|PD)UgJ{@b=lq?N_!eECy3NFfYxmKpj*;nWM9fmhU zIpRWjRw5mBqK}hxIDiAKOEO&U<6cUXD_E|avGE6C_$*(*uIctqyol8Qj><*VXf2$0 zRREiUY$`Ua^=RjM_+YT&RIMk#3ioiJc(I$^i)$UYkQ6EjepX$N1SoVd{4HS1_77*J z(~`xi+3`5Rd;)zwsQaSxpj%LAR!0mofJ)(C>E|qD%QzpYguYo-1a%_8y|VX&(!=*W zC6pFS35yOL=bx?({jT%3VES6@HOw966s&?5A}<3DRJ06gg&Lq{AmP}74cPvp0xJc2 zT`RGbT8ZV~4KTS9sJ|IB(rqENcvtFSU^b{2K!l*Z%%MY<3|5)N0_8%}n!=hdXPI2i z<}$AtT(ne)P=!#(Onbfjc{%VfcHYI?(4VDTNh@eq_WnxwC$1w2tz}a)<{kn%*iJ#LuTV46T z*D*tN`~s5mYaD6?ezmW7bz8H)&7sb>R6}7V{RN#>(|+BfNUJ7m-tT_Mh!n5Td8~IBbtN4p1{D`1@(?%-qhhnU^aL2OX zdt-%#@RgQ=LKx1?mTH=*NReN+U~}loyWmiNY$wYjx&?(?TiBfQv5|D6{<7UF^HVR` zQs~$8rgEjICPfQP?^$6X`OaX`k~1|&B`;cNgQXhJ)-!zUq-dFqmRf(dGS1gXiY}qTxIOnho}y)E z(hz(dOn;}kXvs~M+Hkg3G0EgpxJ3)jI12n$ebG`gje`E@dC_7QTk68Iami88pKU8z zbSBMoOj^-$Gc}p}u3piiTP(HtY}~SF?t^AUi_bKe?5unvuxQDd8ZP{yfuhA{8XWzT zJVlGmG)4H~>Y{~aZi`=)Dq3u&Ng}e*Urj4ob|yZ%@a@5(g?>|mFjD-6Y|*m6X&~hz zi$zP$)T;UZt1O=RKhGpfxKcAIyz}|PqHRuJa&xOpM|aU8bo4G-7um3B{pRSJ!SFzI zO;b~3!gjFo{reN2 znt0c^{8~Bx ze%*jNc;5B8MY9yP!)JP9$WI>h%cuI`EIwh$7ijqCmU-rmk58E=uyfCA zE7gM0FzxWwO+Gcd3s-q@742E>d_j(mk#+f zWeU%KbJX--r?k1-X@eTUmW}Kf(^7vo{5Rn@nJqm0#;5cnc-W55T;?Qz^8

- - + +
+
+
Owner
+
+
-
-
Name
-
Aliases
-
IP
-
Level
-
Connections
-
V2
-
Last Seen
+
+
+
Senior Administrator
+
+
-
+ +
+
+
Administrator
+
+
-
+ +
+
+
Moderator
+
+
+
+ +
+
+
Trusted
+
+
+
+
\ No newline at end of file diff --git a/Admin/webfront/header.html b/Admin/webfront/header.html index 11599a9aa..989efcc04 100644 --- a/Admin/webfront/header.html +++ b/Admin/webfront/header.html @@ -183,10 +183,7 @@ function formatPlayers(players) function checkJustNow(timestr) { - if (timestr.includes("just now")) - return timestr; - else - return timestr + " ago"; + return timestr } function getDate(datestr) diff --git a/Admin/webfront/main.css b/Admin/webfront/main.css index 1a28a075c..111990e20 100644 --- a/Admin/webfront/main.css +++ b/Admin/webfront/main.css @@ -126,8 +126,6 @@ div#threadContainer .threadContent a:hover { color: #fff !important; } div.threadContent ol, div.threadContent ol { margin: 1em; } div.categoryThread .threadActions { color: rgba(255, 69, 69, 0.85); font-size: 18pt; width: 19px; } - - div#postReplyContainer { position: fixed; bottom: 0; left: 0; width: 100%; height: 20em; background-color: #181818; } div#postReplyClose { position: absolute; right: 0.25em; font-size: 24pt; } div#postReplyClose:hover { color: #007ACC; cursor: pointer; } @@ -192,9 +190,12 @@ div.threadInfo .actionHover { float: right; color: rgba(255, 69, 69, 0.85); marg .datThing { background-color: #007ACC; font-size: 16pt; border: none; color: #fff; font-size: 15pt; padding: 0.5em 10px; } span.light { opacity: 0.5; } span.userTitle span:hover {color: #007ACC !important; } - - input#bannercolor { margin: 0.35em; width: 265px; border: none; height: 45px; } - - div#footer { position: fixed; bottom: 0.5em; right: 0.5em; opacity: 0.5; } + +.privilege-title { font-size: 24pt; } +.privilege-title + hr { margin-bottom: 10px; } +.privilege hr { margin-top: 10px !important; } +.admin-name a { font-size: 14pt; color: #007ACC !important; } +.admin-name a:hover { color: #fff !important; } +.clients { margin: 0.5em; } diff --git a/Admin/webfront/penalties.html b/Admin/webfront/penalties.html index 59914c75c..ffcedb978 100644 --- a/Admin/webfront/penalties.html +++ b/Admin/webfront/penalties.html @@ -33,7 +33,7 @@ function getPenalties(from)
"+ getColorForLevel(penalty['penaltyType'], penalty['penaltyType']) + "
\
"+ penalty['penaltyReason'] + "
\
"+ getColorForLevel(penalty['adminLevel'], penalty['adminName']) + "
\ -
"+ penalty['penaltyTime'] + " ago
\ +
"+ penalty['penaltyTime'] + "
\
" ) }); diff --git a/Plugins/Welcome/Plugin.cs b/Plugins/Welcome/Plugin.cs index 5fac30885..8ae1f3d65 100644 --- a/Plugins/Welcome/Plugin.cs +++ b/Plugins/Welcome/Plugin.cs @@ -98,6 +98,10 @@ namespace Welcome_Plugin public async Task OnTickAsync(Server S) { + return; + + // TODO: check if this works + int MaxPing = (await S.GetDvarAsync("sv_maxping")).Value; if (MaxPing == 0) @@ -144,12 +148,12 @@ namespace Welcome_Plugin } - PlayerPings.Add(E.Origin.DatabaseID, 1.0f); + //PlayerPings.Add(E.Origin.DatabaseID, 1.0f); } if (E.Type == Event.GType.Disconnect) { - PlayerPings.Remove(E.Origin.DatabaseID); + //PlayerPings.Remove(E.Origin.DatabaseID); } } } diff --git a/SharedLibrary/Commands/NativeCommands.cs b/SharedLibrary/Commands/NativeCommands.cs index 935eb7f2e..d16559ac7 100644 --- a/SharedLibrary/Commands/NativeCommands.cs +++ b/SharedLibrary/Commands/NativeCommands.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Linq; using SharedLibrary.Network; +using SharedLibrary.Helpers; using System.Threading.Tasks; namespace SharedLibrary.Commands @@ -96,10 +97,15 @@ namespace SharedLibrary.Commands { E.Target.lastOffense = Utilities.RemoveWords(E.Data, 1); String Message = E.Target.lastOffense; + var length = Message.ParseTimespan(); + + if (length.TotalHours != 1) + Message = Utilities.RemoveWords(Message, 1); + if (E.Origin.Level > E.Target.Level) { - await E.Target.TempBan(Message, E.Origin); - await E.Origin.Tell($"Successfully temp banned {E.Target.Name}"); + await E.Target.TempBan(Message, length, E.Origin); + await E.Origin.Tell($"Successfully temp banned ^5{E.Target.Name} ^7for ^5{length.TimeSpanText()}"); } else await E.Origin.Tell("You cannot temp ban " + E.Target.Name); @@ -391,7 +397,7 @@ namespace SharedLibrary.Commands foreach (Player P in db_players) { - String mesg = String.Format("[^3{0}^7] [^3@{1}^7] - [{2}^7] - {3} | last seen {4} ago", P.Name, P.DatabaseID, Utilities.ConvertLevelToColor(P.Level), P.IP, P.GetLastConnection()); + String mesg = String.Format("[^3{0}^7] [^3@{1}^7] - [{2}^7] - {3} | last seen {4}", P.Name, P.DatabaseID, Utilities.ConvertLevelToColor(P.Level), P.IP, P.GetLastConnection()); await E.Origin.Tell(mesg); } } @@ -510,6 +516,7 @@ namespace SharedLibrary.Commands if (E.Target.Level == Player.Permission.Flagged) { E.Target.SetLevel(Player.Permission.User); + E.Owner.Manager.GetClientPenalties().RemovePenalty(new Penalty(Penalty.Type.Flag, "", E.Target.NetworkID, "", DateTime.Now, "", DateTime.Now)); await E.Origin.Tell("You have ^5unflagged ^7" + E.Target.Name); } @@ -517,7 +524,7 @@ namespace SharedLibrary.Commands { E.Data = Utilities.RemoveWords(E.Data, 1); E.Target.SetLevel(Player.Permission.Flagged); - E.Owner.Manager.GetClientPenalties().AddPenalty(new Penalty(Penalty.Type.Flag, E.Data, E.Target.NetworkID, E.Origin.NetworkID, DateTime.Now, E.Target.IP)); + E.Owner.Manager.GetClientPenalties().AddPenalty(new Penalty(Penalty.Type.Flag, E.Data, E.Target.NetworkID, E.Origin.NetworkID, DateTime.Now, E.Target.IP, DateTime.Now)); await E.Owner.ExecuteEvent(new Event(Event.GType.Flag, E.Data, E.Origin, E.Target, E.Owner)); await E.Origin.Tell("You have ^5flagged ^7" + E.Target.Name); } @@ -617,7 +624,7 @@ namespace SharedLibrary.Commands } var B = E.Owner.Manager.GetClientPenalties().FindPenalties(E.Target); - var BannedPenalty = B.Find(b => b.BType == Penalty.Type.Ban); + var BannedPenalty = B.Find(b => b.BType > Penalty.Type.Kick && b.Expires > DateTime.Now); if (BannedPenalty == null) { @@ -627,13 +634,7 @@ namespace SharedLibrary.Commands Player Banner = E.Owner.Manager.GetClientDatabase().GetPlayer(BannedPenalty.PenaltyOriginID, -1); - if (Banner == null) - { - await E.Origin.Tell("Ban was found for the player, but origin of the ban is unavailable."); - return; - } - - await E.Origin.Tell(String.Format("^1{0} ^7was banned by ^5{1} ^7for: {2}", E.Target.Name, Banner.Name, BannedPenalty.Reason)); + await E.Origin.Tell(String.Format("^1{0} ^7was banned by ^5{1} ^7for: {2} {3}", E.Target.Name, Banner?.Name ?? "IW4MAdmin", BannedPenalty.Reason, BannedPenalty.BType == Penalty.Type.TempBan ? $"({(BannedPenalty.Expires - DateTime.Now).TimeSpanText()} remaining)" : "")); } } diff --git a/SharedLibrary/Database.cs b/SharedLibrary/Database.cs index 40385f49b..6ae9b9f03 100644 --- a/SharedLibrary/Database.cs +++ b/SharedLibrary/Database.cs @@ -227,7 +227,7 @@ namespace SharedLibrary { String Create = "CREATE TABLE [CLIENTS] ( [Name] TEXT NULL, [npID] TEXT NULL, [Number] INTEGER PRIMARY KEY AUTOINCREMENT, [Level] INT DEFAULT 0 NULL, [LastOffense] TEXT NULL, [Connections] INT DEFAULT 1 NULL, [IP] TEXT NULL, [LastConnection] TEXT NULL, [UID] TEXT NULL, [Masked] INT DEFAULT 0, [Reserved] INT DEFAULT 0);"; ExecuteNonQuery(Create); - Create = "CREATE TABLE [BANS] ( [TYPE] TEXT NULL, [Reason] TEXT NULL, [npID] TEXT NULL, [bannedByID] TEXT NULL, [IP] TEXT NULL, [TIME] TEXT NULL);"; + Create = "CREATE TABLE [BANS] ( [TYPE] TEXT NULL, [Reason] TEXT NULL, [npID] TEXT NULL, [bannedByID] TEXT NULL, [IP] TEXT NULL, [TIME] TEXT NULL, [EXPIRES] TEXT);"; ExecuteNonQuery(Create); } } @@ -453,7 +453,7 @@ namespace SharedLibrary if (Row["TYPE"].ToString().Length != 0) BanType = (Penalty.Type)Enum.Parse(typeof(Penalty.Type), Row["TYPE"].ToString()); - ClientPenalties.Add(new Penalty(BanType, Row["Reason"].ToString().Trim(), Row["npID"].ToString(), Row["bannedByID"].ToString(), DateTime.Parse(Row["TIME"].ToString()), Row["IP"].ToString())); + ClientPenalties.Add(new Penalty(BanType, Row["Reason"].ToString().Trim(), Row["npID"].ToString(), Row["bannedByID"].ToString(), DateTime.Parse(Row["TIME"].ToString()), Row["IP"].ToString(), DateTime.Parse(Row["EXPIRES"].ToString()))); } @@ -470,12 +470,8 @@ namespace SharedLibrary if (Row["TIME"].ToString().Length < 2) //compatibility with my old database Row["TIME"] = DateTime.Now.ToString(); - Penalty.Type BanType = Penalty.Type.Ban; - if (Row["TYPE"].ToString().Length != 0) - BanType = (Penalty.Type)Enum.Parse(typeof(Penalty.Type), Row["TYPE"].ToString()); - - ClientPenalties.Add(new Penalty(BanType, Row["Reason"].ToString().Trim(), Row["npID"].ToString(), Row["bannedByID"].ToString(), DateTime.Parse(Row["TIME"].ToString()), Row["IP"].ToString())); - + var BanType = (Penalty.Type)Enum.Parse(typeof(Penalty.Type), Row["TYPE"].ToString()); + ClientPenalties.Add(new Penalty(BanType, Row["Reason"].ToString().Trim(), Row["npID"].ToString(), Row["bannedByID"].ToString(), DateTime.Parse(Row["TIME"].ToString()), Row["IP"].ToString(), DateTime.Parse(Row["EXPIRES"].ToString()))); } return ClientPenalties; @@ -542,7 +538,7 @@ namespace SharedLibrary //Add specified ban to database - public void AddBan(Penalty B) + public void AddPenalty(Penalty B) { Dictionary newBan = new Dictionary { @@ -551,7 +547,8 @@ namespace SharedLibrary { "bannedByID", B.PenaltyOriginID }, { "IP", B.IP }, { "TIME", Utilities.DateTimeSQLite(DateTime.Now) }, - { "TYPE", B.BType } + { "TYPE", B.BType }, + { "EXPIRES", B.Expires } }; Insert("BANS", newBan); } diff --git a/SharedLibrary/Penalty.cs b/SharedLibrary/Penalty.cs index dceccf321..b78d43b62 100644 --- a/SharedLibrary/Penalty.cs +++ b/SharedLibrary/Penalty.cs @@ -5,12 +5,13 @@ namespace SharedLibrary { public class Penalty { - public Penalty(Type BType, String Reas, String TargID, String From, DateTime time, String ip) + public Penalty(Type BType, String Reas, String TargID, String From, DateTime time, String ip, DateTime exp) { Reason = Reas.CleanChars().StripColors(); OffenderID = TargID; PenaltyOriginID = From; When = time; + Expires = exp; IP = ip; this.BType = BType; } @@ -34,6 +35,7 @@ namespace SharedLibrary public String OffenderID { get; private set; } public String PenaltyOriginID { get; private set; } public DateTime When { get; private set; } + public DateTime Expires { get; private set; } public String IP { get; private set; } public Type BType { get; private set; } } diff --git a/SharedLibrary/Player.cs b/SharedLibrary/Player.cs index 9a1e55fcc..2e0aea8e3 100644 --- a/SharedLibrary/Player.cs +++ b/SharedLibrary/Player.cs @@ -154,9 +154,9 @@ namespace SharedLibrary await lastEvent.Owner.Kick(Message, this, Sender); } - public async Task TempBan(String Message, Player Sender) + public async Task TempBan(String Message, TimeSpan Length, Player Sender) { - await lastEvent.Owner.TempBan(Message, this, Sender); + await lastEvent.Owner.TempBan(Message, Length, this, Sender); } public async Task Warn(String Message, Player Sender) diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index b7abea14b..68fd9ab72 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -210,7 +210,7 @@ namespace SharedLibrary /// /// Reason for banning the player /// The player to ban - abstract public Task TempBan(String Reason, Player Target, Player Origin); + abstract public Task TempBan(String Reason, TimeSpan length, Player Target, Player Origin); /// /// Perm ban a player from the server diff --git a/SharedLibrary/SharedLibrary.csproj b/SharedLibrary/SharedLibrary.csproj index 672cbd65c..1d1a1f8a9 100644 --- a/SharedLibrary/SharedLibrary.csproj +++ b/SharedLibrary/SharedLibrary.csproj @@ -25,6 +25,7 @@ prompt 4 false + ..\..\..\RuleSet1.ruleset AnyCPU diff --git a/SharedLibrary/Utilities.cs b/SharedLibrary/Utilities.cs index cb197c9ae..7048a55d7 100644 --- a/SharedLibrary/Utilities.cs +++ b/SharedLibrary/Utilities.cs @@ -229,23 +229,23 @@ namespace SharedLibrary if (Elapsed.TotalMinutes < 120) { if (Elapsed.TotalMinutes < 1.5) - return "1 minute"; - return Math.Round(Elapsed.TotalMinutes, 0) + " minutes"; + return "1 minute ago"; + return Math.Round(Elapsed.TotalMinutes, 0) + " minutes ago"; } if (Elapsed.TotalHours <= 24) { if (Elapsed.TotalHours < 1.5) - return "1 hour"; - return Math.Round(Elapsed.TotalHours, 0) + " hours"; + return "1 hour ago"; + return Math.Round(Elapsed.TotalHours, 0) + " hours ago"; } if (Elapsed.TotalDays <= 365) { if (Elapsed.TotalDays < 1.5) - return "1 day"; - return Math.Round(Elapsed.TotalDays, 0) + " days"; + return "1 day ago"; + return Math.Round(Elapsed.TotalDays, 0) + " days ago"; } else - return "a very long time"; + return "a very long time ago"; } public static Game GetGame(string gameName) @@ -263,5 +263,48 @@ namespace SharedLibrary return Game.UKN; } + + public static TimeSpan ParseTimespan(this string input) + { + var expressionMatch = Regex.Match(input, @"[0-9]+.\b"); + + if (!expressionMatch.Success) // fallback to default tempban length of 1 hour + return new TimeSpan(1, 0, 0); + + char lengthDenote = expressionMatch.Value[expressionMatch.Value.Length - 1]; + int length = Int32.Parse(expressionMatch.Value.Substring(0, expressionMatch.Value.Length - 1)); + + switch (lengthDenote) + { + case 'm': + return new TimeSpan(0, length, 0); + case 'h': + return new TimeSpan(length, 0, 0); + case 'd': + return new TimeSpan(length, 0, 0, 0); + case 'w': + return new TimeSpan(length * 7, 0, 0, 0); + case 'y': + return new TimeSpan(length * 365, 0, 0, 0); + default: + return new TimeSpan(1, 0, 0); + } + } + + public static string TimeSpanText(this TimeSpan span) + { + if (span.TotalMinutes < 6) + return $"{span.Minutes} minutes"; + else if (span.TotalHours < 24) + return $"{span.Hours} hours"; + else if (span.TotalDays < 7) + return $"{span.Days} days"; + else if (span.TotalDays > 7 && span.TotalDays < 365) + return $"{Math.Ceiling(span.Days / 7.0)} weeks"; + else if (span.TotalDays >= 365) + return $"{Math.Ceiling(span.Days / 365.0)} years"; + + return "1 hour"; + } } }