From 5e25201032502dfba8733039b95b8887cc64cdb2 Mon Sep 17 00:00:00 2001
From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Date: Thu, 28 Sep 2023 10:05:42 -0400
Subject: [PATCH] Health alert tweaks (#20557)
---
.../Mobs/Systems/MobThresholdSystem.cs | 94 +++++++++++-------
.../Alerts/human_alive.rsi/health0.png | Bin 2153 -> 2177 bytes
.../Alerts/human_alive.rsi/health1.png | Bin 2155 -> 2267 bytes
.../Alerts/human_alive.rsi/health2.png | Bin 2152 -> 2249 bytes
.../Alerts/human_alive.rsi/health3.png | Bin 2207 -> 2331 bytes
.../Alerts/human_alive.rsi/health4.png | Bin 2269 -> 2401 bytes
6 files changed, 60 insertions(+), 34 deletions(-)
diff --git a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs
index 1cb32543eb..f34240d8fe 100644
--- a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs
+++ b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs
@@ -5,7 +5,6 @@ using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.Mobs.Components;
using Robust.Shared.GameStates;
-using Robust.Shared.Utility;
namespace Content.Shared.Mobs.Systems;
@@ -52,6 +51,38 @@ public sealed class MobThresholdSystem : EntitySystem
#region Public API
+ ///
+ /// Gets the next available state for a mob.
+ ///
+ /// Target entity
+ /// Supplied MobState
+ /// The following MobState. Can be null if there isn't one.
+ /// Threshold Component Owned by the target
+ /// True if the next mob state exists
+ public bool TryGetNextState(
+ EntityUid target,
+ MobState mobState,
+ [NotNullWhen(true)] out MobState? nextState,
+ MobThresholdsComponent? thresholdsComponent = null)
+ {
+ nextState = null;
+ if (!Resolve(target, ref thresholdsComponent))
+ return false;
+
+ MobState? min = null;
+ foreach (var state in thresholdsComponent.Thresholds.Values)
+ {
+ if (state <= mobState)
+ continue;
+
+ if (min == null || state < min)
+ min = state;
+ }
+
+ nextState = min;
+ return nextState != null;
+ }
+
///
/// Get the Damage Threshold for the appropriate state if it exists
///
@@ -261,7 +292,7 @@ public sealed class MobThresholdSystem : EntitySystem
threshold.Thresholds.Remove(damageThreshold);
}
threshold.Thresholds[damage] = mobState;
- Dirty(threshold);
+ Dirty(target, threshold);
VerifyThresholds(target, threshold);
}
@@ -291,7 +322,7 @@ public sealed class MobThresholdSystem : EntitySystem
if (!Resolve(uid, ref component, false))
return;
component.AllowRevives = val;
- Dirty(component);
+ Dirty(uid, component);
VerifyThresholds(uid, component);
}
@@ -344,42 +375,37 @@ public sealed class MobThresholdSystem : EntitySystem
if (!threshold.TriggersAlerts)
return;
- var dict = threshold.StateAlertDict;
- var healthAlert = AlertType.HumanHealth;
- var critAlert = AlertType.HumanCrit;
- var deadAlert = AlertType.HumanDead;
+ if (!threshold.StateAlertDict.TryGetValue(currentMobState, out var currentAlert))
+ {
+ Log.Error($"No alert alert for mob state {currentMobState} for entity {ToPrettyString(target)}");
+ return;
+ }
- dict.TryGetValue(MobState.Alive, out healthAlert);
- dict.TryGetValue(MobState.Critical, out critAlert);
- dict.TryGetValue(MobState.Dead, out deadAlert);
+ if (!_alerts.TryGet(currentAlert, out var alertPrototype))
+ {
+ Log.Error($"Invalid alert type {currentAlert}");
+ return;
+ }
- switch (currentMobState)
+ if (alertPrototype.SupportsSeverity)
{
- case MobState.Alive:
+ var severity = _alerts.GetMinSeverity(currentAlert);
+ if (TryGetNextState(target, currentMobState, out var nextState, threshold) &&
+ TryGetPercentageForState(target, nextState.Value, damageable.TotalDamage, out var percentage))
{
- var severity = _alerts.GetMinSeverity(healthAlert);
- if (TryGetIncapPercentage(target, damageable.TotalDamage, out var percentage))
- {
- severity = (short) MathF.Floor(percentage.Value.Float() *
- _alerts.GetSeverityRange(healthAlert));
- severity += _alerts.GetMinSeverity(healthAlert);
- }
- _alerts.ShowAlert(target, healthAlert, severity);
- break;
- }
- case MobState.Critical:
- {
- _alerts.ShowAlert(target, critAlert);
- break;
- }
- case MobState.Dead:
- {
- _alerts.ShowAlert(target, deadAlert);
- break;
+ percentage = FixedPoint2.Clamp(percentage.Value, 0, 1);
+
+ severity = (short) MathF.Round(
+ MathHelper.Lerp(
+ _alerts.GetMinSeverity(currentAlert),
+ _alerts.GetMaxSeverity(currentAlert),
+ percentage.Value.Float()));
}
- case MobState.Invalid:
- default:
- throw new ArgumentOutOfRangeException(nameof(currentMobState), currentMobState, null);
+ _alerts.ShowAlert(target, currentAlert, severity);
+ }
+ else
+ {
+ _alerts.ShowAlert(target, currentAlert);
}
}
diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health0.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health0.png
index cce1b027b6101b060904679943dcbe32610f9910..6c9b54e52e29d1909a41d0562da1efb4eba88035 100644
GIT binary patch
literal 2177
zcma)7c{J2(A0G`yiXl-(H7
;SK*A|gTLKoTn
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
diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health1.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health1.png
index 2ec0eb65515ba5b665988c0d2333bb717e256065..186d07386ec845d1b7f0e5174546f06f38cda0e6 100644
GIT binary patch
literal 2267
zcmX|?4LH+lAIB}8Mi=HBN#6RGo)UG`$;w-{aws}X7e|Mz|Wuiy7`f4_I;DbxwQO{SYP
zG&J-)J=}a%W2Ne8*WRe=Q=G%&RRiRP?+I58YM=S6hK4rD)9sl5Z)JjVWVo5<=5&go
zQPhU04IAuj$M-|-e1Hei{V$%{X`sy{S)MwF6W}!8EWng4_rIunh{SG%vVVIM)}pU}=(Ax^0A(Bz^(*bjOkv
z*WvdWqdy%|Rwon`ajP;i;8VWjfsxv-X3n#^+y?nAy;~NoQJe>i0yv7B-R70|@w&_=
zxI_>lyMp`I3LWeyICr0T^E%es?NS5U2dCgU^@y-TlWfLv?m+1NljK160vQvipj_U1
z>Ybwm6MJCTJvO*-===%M$#jwyYOXY`Hm7(b7`Nnz@G(UBJf32775}Ir}2A(HLKuaLXG<*tc&9z{eTjEb-(@m^Vk+g1OjpJ;>hqQOc5U2NxY?8#{W4-EEA2L)#E`lNWppEKLGRhkYt?iFBA@=2O!FE{l#HK*|o(<)dC(h!6u?lffx4{eQ7Jr>Q~pY-|n@83g78
zD0hv2!!JW`1&miZk94OP7UT%TmwFn!J}H`BmHT&9zRucn25*+rESx(l<;Inn+fPvw
z=)woPZ%$!DqMW&L*;MbflTG2Au}lx%J4RjZQoSHvCb#cw{y_X)PCeccj~Ejle$mQB
z3^ymz6px(_gJ1uHOz==NhICbN1Y8O)TUqXdlq8AK;67%O4Nvnc?FI7N{J>(JN@W{V
zx8$byJ+uROrUsshKPs;!2q8;#Qb(;68~FC8u88e~IOIBw_Q^+y7F!ibpr9^%X*I|m
z@cCPbGk>96NU$etd8h(-z{-;{nabz&K)sfAaF~*kjC`;+Z*|E|<%=;r2YPN9k7=~@
zpuNHX=m^K_I~ugSa8P&r
z@Z_vN&pP;v)0+Jn=v&1U;2qdn&s$o?B+*N&O;_GZgG&{UgRj8$IGvwVI#3HYjvv
zHnrLJibE2yLEDtWVLGEq+`d!=rs8r*@@Fg8;Ft2RC4X)P_rHIu_xbnS+lcb_&-4cw
zefj$Rz)D<%co5XkFtXy|o#ZO0u+OZ6y6d>m|G@sAr_{RAfpvfri=W!`b%`$WS3?j1
ztA@VEGLM5t84>>i_qnaZF5C;8a;Dh!TCFSvGAY+K^ldAb?1+v9l0&ALQ`4Rt8qV^R
zF>(QN%xL|H_|0fiJL@y&PJZqRymUR7LF*o^6(_dt@|i?XUKWsG#|I9g-sz3n`oL$42<|4
z-%jVTCx=%X4fJaJlPXVA@$F7i>KAIO$n{PashH9UyZ^Btn!&~iVP=S67``&=ukK
z30l4KDQLaz$^D~80Ne8kT+)(n_>B{`Wvwn!D|eD3n3foq%^2b^Xt@VL&$!>-L*cZf
zpnbBacvKmn?2(G^?6Pn-4SD=pVyQ+A+hPv;qu>FV#_R7>lq_
zhXItY{<>~Z%6dTPzp31$r@db6IBdPNXmL0Ox`ocL^*;-bBlidaIlxCY-?l5I!CeO{x7*c$L~iBa1Q|o^sKDcmS%kv
zrvowxIzO+ci-B;(sPSJJiq5B`V-v0Dy<+Mm{06|IQXI(fRI+^DXh$^QkAkdG4p
literal 2155
zcmbVOX;4#H7ETNbE|3gOfdVF=(;|%`Dq;Z53vTRaqk_sNEsJ17fg&ziutoMT5Z-UCwennXFruGChv6a5$sp`M_VdGqS+p3|4#Y
zaXXY!AT8W{!NPqd$7T=5qG{VX!gl+Ci)^){ZOC0`CX2~@oSYho9H%l*c(5V`j#I>D
zh5dkmUd)OZ6tw9nqx8JTwb
z?#KCqoSD*fwTD``Z>J@r+e_NQ5k_G5P)o1(ElkQKWfxhB2LPk$cSq0_W&S6Rrxe=x4O;L;OB&kl4ziglnPtQK0fX*E(w4~z{_y%3wT
zDzm;CmAr*u$Y}uV0e(2$>jv)GL?9au#r*I-y*BHYY7x}6jV)l1b(={-rpbS!^7&$1
zzj>2FNIX)3&7gIn^sz12?`oOU9%XX{TQUqzuyL6t2;NREno*@Ct?~zjAp+j=DEjzI
zKCr3jqD}PCqKhD1ll7Qd$hFj8^Fl`h*nkJ^4n6R*xDMsTokpr2pX{P+?dSCq$Hxi}
zp^3DCN=>xPtX35u=`pF#(e}1&KLu}u)Jk|q*j$`tAR|BqKT4j9{`yx+yEySMPzX;{
zmcUb+b3X>n+VAIaa!X)i5Ni*#o+R&H3Ug#gp}KBjfcV%;DfN?Hox{5FV1Ml>^#x;y1#=zpu#w7^SEJMo8FuhXdR{H$x^YxxB1swNnSNp*bvYn{pY}!z&f{(6
zgyB47;twbvyINVERvwmW^|Lalgfl~r
zm`gA}ZF#{#r-X$kwxVp>fT&8^F@mt$OH)Qz+D55W6$`eDeBZ99d0*Pliie6TdqLWrn|I+LIYM!wl0vBSr0{
z5jWtQp>BA>Sv?!K-D=K!%~{mO7Ubc_f~q68`~cFcNdd^yy-E@qYV89QvxCjP?Oj~Q
z{IN^BK#D0whQ1)yYsKoz&
z#QnkV0{QwX!svUh#e0>wVz^q=X1rqFmUM)bPw~CyI5e$`CM&98gs)seVArn*&15N>
z45MzV?1*~LhUeANPSnX}|CGLbA}OS+>w#~Dpzjc*OUE>2NuK`b?i=q)!3G-2BsX5U
zMh1!J8nL-+Zx|^ChqY%8d~xgVJ7YSDW1{rKM|32-tQaJYB`TT~QvNAK^pm&bxkvMe
zTb!h)Ror12dp&6|yeA``;=Lm~7_3v=eHwK&x|{mS-Z)L~3zW9iX}@qAs_l8UIVRsP
ze}#<8a!DKhK`#7V+>olGE<-3`|B9-w54l`2`$0x__o@sCgIG(HMXfE8TVoUY^1+k3
zhHV4Cf)|3e4RJOk_&?BdC^~CWj!sY7gnwNP>;{T!c=30XytjM`33~JwvCb~z8NqM<
z12gpw=%P6WY}H{-Zdi<_%ueWkC%8=^!JWKElwUe?*w7R0B+5Rk9?EF|j$!dAJHLJv
z#$Y|UZDtQ7M#;)Ls5{}^
zOzow$-oWvfXyWW6(65P|y8|EGewiEANj#DctOl!iIz#ja)C&{o^WOXC;F`Bs#br*c
z8V_ewDll!Eq4f)#x5NBcD-(e9An-aE1X>ey_FC2lHk3eow^XZ{fe3Rdsdu%`0(Jq%
zztrCM_XUbK)h3;K&ggdfQrFsjRU6?D5veip?zq0Zz049#GhiV*6K&mLa%1NhP5z6i
zRNrUl`DwM2DNU7XAZdAd>wa6zPcYV3e~Hs}mfSd-z>0e3=bX-2MB0>=
z1C~ig++P#NAMymUhhm!MM3&IOD$)dHPfzl#iqK+;oDeWcA?Wf{_3FWd|`t7;5>v-nB0oqL(2><{9
diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health2.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health2.png
index 4fa9ffeccc324cbd18cd79aa7fa5c8a5a9a8ad4f..6463eb386facd0e5a56bcbca291eb2ecfbf5248d 100644
GIT binary patch
literal 2249
zcmbVNdpy(YAD>HSatViWYpo&*S-BL$=3dm<${{MO`bA3U9M_Yz$xg(nMycgGDR&{t
zkbE&Un!CzzkC9x)n6TS-zp3B(}o
zu1B5RB{oMg8s&bH%p~i;D2b5@b3ft$DeK%m1A)kqT%GJaqBGf92eCS?n(^r5t$8(Z
zangCY4yTG!Z#U;AVZ6Lk_dYagLD;q4y5*Cj20%{MCb?((Jn=Xs@04bE=H$sI>OGsY
z+`acr7`6Y+@@HrHF0TJ4D!bsI0v$!|ud2#^Avz-~c~%mM;!B-xsstgkGTRGedp(O(
z;dn8qB{I_Ln_wy)ZNpL>oRUr86`q!q{lj4xhh0(^h*EurQ$p+RESwmY^1WWyRi#R_
z5Mf~5ervo{qx-b-S%smC`=yCBU^)}6S;U-YFzg#~zT&~AvS)_~f?|_tT&{&c@pkCY
zC6^wiEJ{Qz3!UP0`Pvc}qlNTSK_M`d=#5!Qzs_0K-Mgd~B%UASO23@RMf9ZC1|Oc)
zt+Fi-?zxnMCDI1m>YtUi6V0Rfmk-dkP{F^#VuF&r6R_f8SnWB4TYA-nG|{+nSC^?`
zq5Dzj2TK8mrI9jQk5D37i6D?Y0hZhE#nZ=Icet^DD%yiV7K2KOP)%77MD_B7o_BHt
z;K=cttC96LRGmL7_ix-%X|j7`t8Q`33Y%9|jkr!+FJV!A;;QD`8G9ha#{`q69C?^Z
zc$?`a+K`6DRtCHp{sZOhfnBj2FFF>rli-O~=-D{su?wyO6jN3I?GOXR1#?5q!buq<
z-&&MiCcc8}CoWkQJsrBb^@{<#TPm#EQ*=aT#)r*3AM~4&pHPF`YdetK`H^sCsGS!}
z?(f4l{$cf719#@CzJ+&0c*g!vucbs1vpz=Zz29o
z_zp?z?>V+I&F~6fq>vm>rd{ddL_S4nyD*ADM$qO#V$A6~XtBe}+Gu46#BcLWdLGad#k@csqH}H*d{8~Q
zgm{m8uc}h)Sj&~7ov8!22Xne6GL-}4&px=9`r+LrlrPuOyofGqn6^^p$(~CMB
zF)(m!iMZ&$+CQJA|D64S#=u%Ks9J?&%phgAX$JXH2zQbWn>Vly=EH-<(PJpl67niA
zBdcFr8ukkDyI!qmNszvxS=viop}o#1V4R)RRb`_8u*vsw>EC(Mk-ZRr%p4uD3GJqM
zqcYVq$dt)D;*gKv`WT)+wd)H$dbH)Oc!nRTUt?O1E_#%PZ^>O0n@Y&t(^Ph6OJsx}
z1-}_QA6~l9f8BSuUjNMGuaorU*}
z;0L~`E$?VTHwZo7cF8>^ef4`CH=F!gCcX6M=LXICC3+rWKB)n?ohT=f7WV~7-Q=xV
zPs^l_k2*ypw(A?c(qa9n2ZuKKMfI+V32JS8$KO%e<*hzmKzV@^N`&FXcJi+6zA({T
zsh$#F+hSc(jYwk06lQ>TEnlsZnV_aRvl3%AllRv(UPI!ygv&e5
z>!p;QC4?nl2UEhy@7M-7R>eoR=ei|h+YwYdja7@E6=uCZ0aY4_MRYyNpnbO4
zxc%k`<0)*7>BvZ{-chrLMc4hOV6UEyn`1uVEiYHQ=o=q=xQQ2@2*#6$rqWyVUTrBS
z(BqK!^-C@}O%q5PzMu<4J|0G{k)2=aFsJGJ=YTiruNHqX19KY=?FfTQRML7@ct)5|l*eY_v-PFfK}t8fI|
z@~j>C30Cj8K{)X%
zuSE8Lx?SWif(o8SYX=I*;Qb!u9v
msZZPnO~2-5DQncB!$GLxlg!ej$jY*fQgL<0IF&h^i~BETrgA#~
literal 2152
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
XPo2HGQNQlwHz;1XBOW#GL0A3;FXX>}
literal 2207
zcmbW3c~BEs9>(}3U?~nKT
z`}uu;opbO2)yl%b0)xR=1^Dj@G|eTZ!6Pm6M=?JyJhMX!-`iM}B;WBq
zHT2z<&1e#07t3uT{1_;XsE%?;n2Ok^5Xd-J?lzOt0)9+>(bv>;RvR54HA*`6f0&JV(tK|pYPf#1f^j6C;7}j57V+fDljVi|M%6e<
z;o7q`G%1uCjW$^4eE)nCb+7T%lymbxj1SUMG8~Gm0rscFUt7q
zDr~1}u9e;doWuC3@$Sv^VgR-%Pmzpy^z=B}mf8B``(k!lVDaww|0G`9T%}KQDYj5Q
z4R8S~INmP)rN1iB#}Ei0EbV;|#?ITQi+tVsD(rAD7DthYIL5Dnx$=0_6WS8omDz1f
zWh4$goFrON5Y`QYI-n4S!XB&38Q-m@(rtY_!0u?Z>~?bN
zum=i^ni^w?$|#bwG-@l5b~Ymjz$fEEe4RW1}U?7q9~QZi)U2A(
zb;PY3#EwnTwUI$UNr0a35qUFWjVw6ahPl`H(+cJdgmtaDIs%s7>Xa`mGpzO?K3C(0
zACY1!c$@c@BN3~?;q#^Q4NF@NP7&HDiyB-ky+3ttpeVGL2R>W*p(>sdg4^`ZZY2+XIU8D3i*Yv`5{Fk!SZ*$0e%T?mxokhq_#^QRjGevKv`wG<
zL0RjB#Hq8@?9@r6z8kF{$={;euT>X
zl1Jd@7CuW8_TQrF(Nkf*?~^XuF8
z6<@Wet-|*L1L#IgZicNUEa{;
zVw;cU@)r|{1Jw7Pl|B3Ksf0&QXNn(zt{`Y{88}XedDguB)laZ?gQLi?RGc5BnjgE}
z?zv+5rqe*l6fJ9qmTGwQx*TnRb^ZUUz5m0u8fD*@0KTWf)e_p5pcl=~x0i#wJFrv{
zg?tTTC5z>U_RV6W6Z6llJkPN;oYvh_;wCXnwy7?7NA>3YI}w(AtBKhG}5Ren6;|ID%knp(V%>gyjis
zrW$3U$zGwF%`SdA2+|7}4OBS1xJqhhDrolPhxgIeK@96mF+0NyE%PSm(*T#l(tc1s
z$2Y}lW6Vwb2Ep{igwKqp)407FxBO>XHeL2Hb^oWR4k?G0PZ6A?5DAV-2YLSJzEbGa
zATFH*W2st?Omw(}vLT)0lba3lZlr`H?N{u$YN)ZTp*(H_>q7>8F0R;U31gSe3oH;;
zTHeXvI@jz_Um>j*b07Ez#mbu*2oD;(VV(1bt!pct$6i2gDPVJ
zImk^WJWfd}N0a%uy}*fZblAVwCL|CDwSYnqA{{VC@2VxE
zW4W4%Cvc`8aAG&Qtd#P2BlGNIQ+NLT&eU#Xb%{6@$a6c>9|tC2_kmrHd{3nR6N5`!
A6951J
diff --git a/Resources/Textures/Interface/Alerts/human_alive.rsi/health4.png b/Resources/Textures/Interface/Alerts/human_alive.rsi/health4.png
index ea55a429b2415d560556620a05de0fe6a5b3b640..9ae49ead79fb7cec528dcbaf4ab1b9b43a2d45e8 100644
GIT binary patch
literal 2401
zcma)7X;4$i8U;~SHEv_{1<PP|hfbBBD6CfS@uWn*xH$GN7Uc!wv%^H-IP#iYy9(
z5R}0vDly6y7Hb2+$7
z|6lqV8XC)-4mo%ra|zO!y4uK?ViOXJOq!7%2kkW~x(vrOH1se|4tB@l?uv^x5d??U
z*+Lci_mh*{2~C44y(I+HWNjQf~4oa|{iXA8Xs)_YJU^!_Ghs#nzwR$wqh3X2h5BLd-
zOo(6gKud_bI4bsqx}ifDe!5}phV$=a?c;!yk#*~K#%AL@ZL-{#1KsT$au*TMpD3rXK(Nn3S)_3`&8yxb_qy=|bpt*yy0(Uf
zar+|PPXV+dN8`wUo=YA6cxtb;!8x&-VY{Ur+-
zE+zIXgDT3XC5!FL4o{q6pK({Uh8xOWWZ*W!
zQL3t?bk{5XTsFeFK7vIsBON1efoBo6-+gNyaOJsTS0ESP
zAwHkp|71m7iA*l6t`upx5H1d7vP@^|S&FLT>t2KdZ)pP{HVeE-WX^pj&7c}H(JWx-
zCsx2bx!&vADu#uK)VYg39_y`p4lw=cyXc4!REBxaWeR;nG4ees1mP2d2b*mo^_v$1@e>?VtUNkvFZ<23gv)8uahvYsj
zhLS~(tz%TtPLvAk8?+mI7gjzzXnj&$KOP(ZN2rRQIjiaDP*JXI!<$qcCVVr;q>qE0
zk#dnNQ><$w*77s*DH`z@)hehZHtd+nL^PT@20A{oSP!;d$`H~{2VUk%j*6$Ksp&B{jul
z&!^cH&z@!Mr-{xFYS48nXWh-!KsXAvy1-_1CV6ym+QKOQ9Yqd?RSBYlwYR{VO1Bxh#
z3-){c*0+-Soo8MIz|TXA%S~HYc*w^1%}3=utE(cV=jspA?xBSwJarFc`rO>uh_`Z2
znQQEGwQzH-`cXenZM>tAv69jF^a&$ouqHP{a7;~?3pQ-J^L9i>VEz4%%e7}&W^Zxr
zr%lP2u*z1KNnDZ65oLAvm;Y=|yvDCcQVhmkc&@W$K$ldny;VUx%A!g&uSZZ&pa<-`
zc35zD@viwO^)!bhaR?~>NAcwz1wHr
z5p$`)5S$^A&xA+^rl?{>D#V|E8X#`|Kk0th7V$CXM}{H$03#4PA0>-ciFg{a=^Fd_
zN{mu(9(`sXaj&ut4j?kAwiLToBuife+TQXaGA-s7q)(aEY@a3fPk!ddFS=2-kRDh(
z=3QG#rPU>|Rx)@T-biGcF##7S78~|t;Up3b7w{H$7Zs|yXQg*pgqq7XSGuVNsYN#@(kxSO{kF=WR9wkO#6*vH6I=K)NS%MRN5{~f(xqcF
z_PSbLZt~|Oz3C&Hp5CXkwZ2c>q7qwlyd$A0y=e*UYPTsYZ)M=Yvf_Rs^MUy-?+qy#
zW72z9p|QhN!^Mf%5|s6J;N$id+^GLci;J1^L%0>QW*zN#3sg_qaiJbQpZe#nMY%>Kqp+
NadLEVsIU)6{x6GD9+3b5
literal 2269
zcmai0do+~m8lOSNmNE9qilT-sNww2XnNoZ%U5whMP1&`CZYRnX%BC9geUnS-NJ=hU
z%%vhk$P`g#=t3%ubHpf@8KE-G6>~8&-#2Gy?X&k;XSMbp&--&+qsA-uK-0
zpeNNqmvEOckuzckE2kQ&!!EXzs%AOg)++_ZuH%8
zqDV}0jI$%6GU{_nDvT^hvCTue^bb@)^PMF%=4G$eaGMqW{lAcm?r=XkbJJRo(YKQx_s~v#`c=39t$pag&9($e2~HJnj!(-`uLKM3aE7h0A{cif!>=tVnz?N+uqEBJ%n`tAI>
zY^M@vCvZ?Pd4FD7oV_c|V#k=M8eNHz
zJ_RVyThy7#?}AgIQ^;p`<}vP5zzc|(DVO1ROFK}`3)Mw(l$CaU;-A=7mDF@
zH{9W)i<84fWO0w_3Azu}g=kl}BSH7E+CKnrK=$iqqMurBTil5|8!0TsTXEi!W^!KR
z5a4J?7L{skWEO1pSEm*uBWJ@?JFy6?jKVVW^?GHjqOCsei*_Bs2pO1&VxY787nn@%
z;+U82L~NK|!!oZ*I_}4eHt-zO$y`Pgeq~QqYvdUy9$>=s$~%lVASrZ|z+aq5(|&}`
zj^IHvcEi*^d_u&f%bxR#tZKD(bNrUSD1}T1DX7y*a0-
zsL2FM`1Z(Z+AcYKS%lF^HI1iW`K{N|+S!OJ$?UQib3femW9aF_dE2!e+e98=WjaZE
zr;P!_EiFN26w=1q1Gp1O%6|N`ce2OWERH>#sN7Tm;}$}Fmb-KL>C%VF>wSkP
zd-~F?`f(?ukIS66#yvdpM>j(Tm5Nl>HT|GX?`EEq)!@|oR9`KCZnGH4<9A1+Igikcc3&%?F
z@s*t6%IXvPlz!z5sNATQ|6^_?+V}5hZ=eT1@++^*61cJpY>N
zl|Q+#7Z^bide{fBx#|0o3HtB}Bggl_OOskSOJ3kh@bNb0cKJwnuVXiI!@`m&Ub@a&
z(eci2n8;6=F4p^^IWvDoNWSvzL$d*mc!qnj7+6{pn8jsG)UdMP6z9i?
z0Q9*o@y?`OffKV(5Uar}gTvj2fr>#N?QQMc>k`k-Nt5b`M&W*C*E^em(d6Bp(0Zo=
zezKBR=ij@E6tb{*ywCZUKq$;%Am(x(ojmtgAZ74#rhBh8Jc@ZhGqzb9cl4`F}#
z2^s;J=(q5}B@fB@B)0u7P!5NJP0splpUbEwhXQd-91##iag8U
zruqizP(8C>S8OA5aI8*>wFcX82#-Hnp5pu=zDk6#hTA){p=O3fw$LV`hJN#_Bz;@Q
z{^;gu=v2I~9sOV3LJX`fnd}KWuJuoxx!Ewj=#TG)$@^XeHr)L_j7Q0l)A#?eNdlWPPph(0Sd>2zYqF9j
z8XgW15sHRwl*U1o(=q*>iv5qI8JzY(oNX3GRcHiLjp0H+h}emMD~&C0+oa`^#f;^Tinf^Xng%1(+zJ)df}
zMn59H$F0o(8?Ao(oZ?~^dpgnok+?zS#cbE2DV${T2ezrjsye>&h)(fD9_gVAk7_P*
zjElN0YIC>8Sga}m(!CLOrtmo(lLt1Ro7(C`1O$1Sv0$}Wv_;)G#M*l?cM