From 4599fe0f9550c2553a213b5e1b6aa0a6f18f067f Mon Sep 17 00:00:00 2001 From: Rbanh <Rbanh15@gmail.com> Date: Tue, 29 Aug 2023 02:07:30 -0400 Subject: [PATCH] first commit --- .editorconfig | 100 +++++++++ .gitignore | 18 ++ .sbproj | 35 +++ Maps/rbanhdevmap.vmap | Bin 0 -> 60960 bytes Maps/rbanhdevmap.vmap.meta | 28 +++ README.md | 11 + .../project_1/DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 86946 bytes ...f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx | Bin 0 -> 69168 bytes code/.vs/project_1/FileContentIndex/read.lock | 0 code/.vs/project_1/v17/.futdcache.v2 | Bin 0 -> 115 bytes code/.vs/project_1/v17/.suo | Bin 0 -> 6144 bytes code/Game.cs | 59 +++++ code/pawn/Pawn.cs | 194 +++++++++++++++++ code/pawn/PawnAnimator.cs | 21 ++ code/pawn/PawnController.cs | 174 +++++++++++++++ code/ui/Hud.razor | 20 ++ code/ui/Hud.razor.scss | 21 ++ code/ui/mainmenu/ActiveLobby.razor | 118 ++++++++++ code/ui/mainmenu/FrontPage.razor | 39 ++++ code/ui/mainmenu/LoadingScreen.razor | 30 +++ code/ui/mainmenu/LoadingScreen.razor.scss | 50 +++++ code/ui/mainmenu/LobbyBrowser.razor | 64 ++++++ code/ui/mainmenu/MainMenu.razor | 39 ++++ code/ui/mainmenu/MainMenu.razor.scss | 195 +++++++++++++++++ code/ui/mainmenu/SavedGames.razor | 42 ++++ code/ui/mainmenu/SetupGame.razor | 76 +++++++ code/ui/mainmenu/SlimPackageCard.razor | 30 +++ code/weapon/Pistol.cs | 32 +++ code/weapon/Weapon.cs | 205 ++++++++++++++++++ code/weapon/WeaponViewModel.cs | 22 ++ untitled.prefab | 6 + 31 files changed, 1629 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .sbproj create mode 100644 Maps/rbanhdevmap.vmap create mode 100644 Maps/rbanhdevmap.vmap.meta create mode 100644 README.md create mode 100644 code/.vs/project_1/DesignTimeBuild/.dtbcache.v2 create mode 100644 code/.vs/project_1/FileContentIndex/f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx create mode 100644 code/.vs/project_1/FileContentIndex/read.lock create mode 100644 code/.vs/project_1/v17/.futdcache.v2 create mode 100644 code/.vs/project_1/v17/.suo create mode 100644 code/Game.cs create mode 100644 code/pawn/Pawn.cs create mode 100644 code/pawn/PawnAnimator.cs create mode 100644 code/pawn/PawnController.cs create mode 100644 code/ui/Hud.razor create mode 100644 code/ui/Hud.razor.scss create mode 100644 code/ui/mainmenu/ActiveLobby.razor create mode 100644 code/ui/mainmenu/FrontPage.razor create mode 100644 code/ui/mainmenu/LoadingScreen.razor create mode 100644 code/ui/mainmenu/LoadingScreen.razor.scss create mode 100644 code/ui/mainmenu/LobbyBrowser.razor create mode 100644 code/ui/mainmenu/MainMenu.razor create mode 100644 code/ui/mainmenu/MainMenu.razor.scss create mode 100644 code/ui/mainmenu/SavedGames.razor create mode 100644 code/ui/mainmenu/SetupGame.razor create mode 100644 code/ui/mainmenu/SlimPackageCard.razor create mode 100644 code/weapon/Pistol.cs create mode 100644 code/weapon/Weapon.cs create mode 100644 code/weapon/WeaponViewModel.cs create mode 100644 untitled.prefab diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..fb22870 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,100 @@ +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true + +# C# files +[*.cs] +indent_style = tab +indent_size = tab +tab_size = 4 + +# New line preferences +end_of_line = crlf +insert_final_newline = true + + +#### C# Coding Conventions #### + +# Expression-bodied members +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_switch_expression = true:suggestion + +# Null-checking preferences +csharp_style_conditional_delegate_call = true:suggestion + +# Code-block preferences +csharp_prefer_braces = true:silent + +# Expression-level preferences +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:silent + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = no_change +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = true +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = true +csharp_space_between_parentheses = control_flow_statements +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..34ee852 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ + +# This file describes files and paths that should not be tracked by Git version control +# https://git-scm.com/docs/gitignore + +# Auto-generated code editor files +.vs/* +.vscode/* +*.csproj +obj/* +Properties/* +code/obj/* +code/Properties/* + +# Auto-generated asset related files +*.generated.* +*.*_c +*.los +*.vpk \ No newline at end of file diff --git a/.sbproj b/.sbproj new file mode 100644 index 0000000..e00e64a --- /dev/null +++ b/.sbproj @@ -0,0 +1,35 @@ +{ + "Title": "Project 1", + "Type": "game", + "Org": "local", + "Ident": "project_1", + "Tags": null, + "Schema": 1, + "HasAssets": true, + "AssetsPath": "", + "Resources": null, + "MenuResources": null, + "HasCode": true, + "CodePath": "/code/", + "PackageReferences": [], + "EditorReferences": null, + "Metadata": { + "MaxPlayers": 16, + "MinPlayers": 1, + "GameNetworkType": "Multiplayer", + "MapSelect": "Unrestricted", + "MapList": [ + "facepunch.square" + ], + "RankType": "None", + "PerMapRanking": false, + "LeaderboardType": "None", + "GameCategory": "TechDemos", + "ProjectTemplate": null, + "CsProjName": "", + "HttpAllowList": null, + "SavedGames": true, + "MapDependentSaves": false, + "SaveFormatVersion": 1001 + } +} \ No newline at end of file diff --git a/Maps/rbanhdevmap.vmap b/Maps/rbanhdevmap.vmap new file mode 100644 index 0000000000000000000000000000000000000000..e9488ce8a5c607cbab4ce971da7c5126f31ab419 GIT binary patch literal 60960 zcmbTdbzBsG6gE1`0*gq9EDF*BQi`O6z=BHGvV@2z-Q5ifDCN>2-Hnuz(nxnngOsFz zbS?0XzqdZ0``5j9*kIXV=6mLx^PK0zh%!ET!eC_W#$aq?XlrC{W6EG)Zlmwu&LGTS zV(Vb7@5JC@t#8M`E6niZi8vtu0RR9BKJ^_Pjh%Gu9E@Geja_w}%$%(aZ1l~o0Q^CH z0JxdDSp@FLOUp?E5C{a&1Al;<S>PoA#liXa05@Flfk%Lchl`6x2!r7h5D^j)-6p(! zo0#P89bytPlH0fM+`B_Y4yT}?AR@g_c@Iu`7fu2HcMu2^{2yGrTX=Z4;Ka9y;s2kv zn-+kK00+PUppb_E4jBYW2Dxbm=m7wN2d?(tg8$bB!2#EZ4<oomcpKcI>JESdfkJU` zq5oD5?(GeJ58#sF-DTvF#3xtPhds21^ZG?)5-`1}Xr(}n{AK1daPYrHc<(+X)dQAC ztZeKY`~uGeg@i?3zLJubk(HBIQ`gXZt@TFR(8$=t)Xdz%(aG7x)y>@_;KRqjpx}_u z=$P2J_|FN6Nm<!Bxq0~og+*V#RaRBk)Yg4(`_bOf+11_CJ32Q0b7FF8dS+>PW%c*k z`o`wg{=wnV@yY4g`NcoEAfTN8d;6b){XgU)1LeZO#f9R+{>cTwaRr}HGF&`H9{jtK zsxW<f@`t>B1n?J8nH8<KnD|hCDGVG&2=6iTFR|?Z6YW3A{@)4a|Nl#}|0CG{m1_nd zf<i#$LCF9FfTlU(uPb|BTVCBD5i{Gxu`c9{YdZ0b%Zoa9?z1gJ`yZZ!sR9~jX#S=I zoe{}Im*Hq?(vHnF?W;wCr?eishw9I~c`ycb(_Z(Bv=zAD26Oq>^xfMjmA0Sr5i^56 z!~CpsQj(u<>(l2p;C;rme_m>lAiOC-G60W7Lcb~5*U8d)s!E$dG-?2E^XY=&r9@vc z<qVi=k~|y4QF`P^d=6#unV&$Imimz5{coEG68d@=nAqWfR^Iw)@%83)EZRz~7GnH@ z)P=G`nVN~ef7F^TL3|F0TbC_B&(yreHYcN+o|$orPa!G7ZLe!0_L=*j8Ki$!JzX;C zj<pnR%UX7%Kinhgnjbp`na<{)8%e@P@S7wi@kx*lQ019K{W3e<V1uX(F8UH4_*7!Y z;MPdKbTx3rZ#3!{yv?~~q!H3<n2{tv@awV8Wq>?0?uzIIU1eg95EHKHHh2($bhBfz zpb~C$07Kk`hUF*oe2zBMM`a1Mh&I1_<AyP(5xN#G76hw$wUKy;_Z*6&|1D$G1WlV} zHXz7<7wE~r8xVYcK|`vo(m3h2sUSfpL}SO61FjBd)Fg)A#P5@=JEiDo7Jq3$=({O& zQ8shB<hww>MJgMnx2Y2F7f_b(DZ=Y#wTp&hX`TjX;YLo$`kyJEjHf9FjlF_fX}@iE zFM3SopZT`k^SB!{!^Ktm$Q<ZR(c3wq^%c*{{UmE<gn9azxWW5j7&otq{%m1MlmsEW zIo=b1Ef-Fx4X|Z}0!Gtpz?K$i!4M+PLQ=Kqf!XKUzKA~hO92H5O0BHVa3mx&(?0LX z&sJZa;ljaTAGN4C%|Q0lM;B!WH^A{QuHAHw49ByyMJL2Zmd;dbS4z3XaAVkirubz< zf>N;Q_88Y`6#3hF!?lnKj0Z`2uCb1n2x_If(OA)eS*Z)58v17=gY;SLU-4pG&p4)( zb!r12pN8eHyH1|l&+G+q`pS)y^*QkQQo=bW%{o0W!?4ijct1{PRjSBTXnyc~uRT^v zI-wrm7`y^%t3$1zH6BpRap{`|#=LnsUY3~I?k?9v@~@uQjC~0jO>@V0m>Yl;%4J=e zNb;-Bu8yTCJ7aTd;@yzHfTef6zT9ETxw6p3IvnybiBFTusjm;gJ!H)<A4Jsufo+}E zLqpFDGM$&+)Eu16kMS|OxB*`Nvo=tr88DMj8?yo6IsXUf@o_f437WCC`fXWM&kRi7 zNwtB2&3jACV=Qvr{+R#IC_uU$b)1jiy|})qG=PiaPBY91T5!K%CSnj1wPB9Nj!Di< z{}G~~8I8s4pmfXgX6Hig;N<aLP2}K#7HiFA2D+GeT{b_Fi}|gVBY0w7M9TV^CzA2U z+VhA-QVX3?lTbk0W@I)Zm&=?TBd$LuI1zT85ix-oz1Ibeksvr^Hq$C^*;5MCsFi$} z5-=93_Mql5lwL;-Me%9Zt7*OfM`t9-W?3Yn7u~X-=FJ9~&KY14Cd+Yth1%_cs2j!X zNZd*q8L7NI?_wQa;nlGAx?8Htz}ub1b5d$)C}{K@hmM73W-z)B=RX5p37>c02|c=P zsb#gKl@Y=i;_;9TK;p{;VHu4x3hbKAzAq-`KsoFKYK9$r#jC!v;|U?5x@WM$8(@3f zKf!n6>2Ojc5+aWWuLLSpr2u#qnq4A;VDgcxm_J&)Vf{kA3Qlv5L4*u#b{!Q;0s71F zp=>}Nf+*-0{KBZ&E?wD|1Mr6DI7+iYc%<2<vf)5NHvEqX28m;kc!wG|S~)1>QHnSV z%Jx0pfY?hthZ~?DNK2D4Efnc&-V?N;^OQBV<E9$E3(I}iL772fv)<yNGqMwATq8WV z>Yy^VHej&TOft<BwNrKi@cOOvz-YTqPq5pK9WtT@vZ3YO%tk)^kl*=jB46HX7x@24 zS^dF)>n+)#T3=pQ@#N%_J0qle*O}4rj|W|9@udFOz-bCHK;tswFf_J+3D?N;P=fAB z65sn8=S=g{FFOJ$T)W)5dc<S29urDKXs4d)b7@O2=c&tYH-NVZT6CMA&l=^;S^oXZ znIq)E!ajX^6!QzAAqT$MnTje>n8is3$J-~ZLTkbR)e-Z`D4G{UMln1t^Y;sD1V40U zl&o%b8e#m>6{8df01?cXxueAGBtE$$OPbWCMxR)qcxYgIY*U$mE-N||;MtX;vNgO= zO=1J)w+J%0#YoHsc$yp|2GMsEqh$?Aa>_J@1h_27tto|}`p0UaZrw-xz#q`I_K;?C zq%Xm6LY0%Z?y8(t2`o<w(V9W&wUq;KFvB=&m{F5|Z;^`_Iw=lL*{$H*>2MssXq8-7 zI=VBrp^#%`7-FN><Kk}1l^fkJd0_Qu;O@4D0|TmnFHx5fax_RPCPZ`iK6U9A!L*tE zmt?QYY=4tTqQXv+Uy_r*(yCl9>1KrdnGJ--*0jccBR!7jZh%xXKhSU3GLSf-+IVbm zARtktoPHu*QKe!1*M+)28jc!84MU{hn5}@A2o(>&nP~gLJp&4fo<~Ik-WAwNO><H` zUf+vfVJ1JkPA9|2h{&WVce;C8I(JhKI{?d;!4U@ab?D<cqSK4<tUGhvUOzTGd~{b- z;FXY%QlQNdAzwR0ZOgNpK`K&53dQV|JDxEfL~V5DbN~$S+T0E<HVF922CvP)Urx%t zD|7<GUTZvJZ)Bm{zV=N8xY#;GLIIoqUd`b>GP_fk>Xj4kdSwbSa399Nf1k(Ft15&7 z5%7dU0`QR1Qj)GVT$wx-9MqWbtS?cDF=+AZ^I<$Ut7sM|^P*u|(BDnuJ2MaOmFG(4 z<n@^QGlEWC@2fJTSO7;sI$$hU&(M7lFtn(aJY6M!b00y<6~%`)hpP4viCx(qaIO4+ zgngcOQ&6wuCAVJ7BKjQW2gCdoxsD6%5v#iaWUJGrDi{?DUb~2KPXDH_*Z*UY^1v>r z_}gKm2$6?jF5u4Pz&7BKI}}v8U4Ctx^ETyo>T65#ly#=0zS_T!(m4ae^3V|ff@#>V zNF~7i+HAmCke+ncQ1OQ|O<7uaF1~ofgxC!bc&tFVYG^Y0QHbshas38g`Y4)DuBT;N zUWgJtA;-XI5-3X>xbw9T<-PeIs8)jEJLx6HQT8o7)g2KBFflkYMdlBWJq+lk)MW7{ zR!CAD#@S^m;I{#(LhdW`cdF|3JOCRN^92%TBJbl;-++&mM6#adZRUZI=hv)Lo=znt zu$HA#Ly<^5Ijh-BA;9%9>4sR{&ifD|Ib2H`vx?4a!Xj=UgQyYOc9Mjv*V$y;^RDc< zvkjKy$L5B}#4vnB84iS<`s9#K<m3tdjZjm`z==f>+Q9)ryBv7V4(<ifFpd=XeLDF4 zt9nD#4IX(TV9_`tBLg<}rtPo0ctDI?)$AT^_K0t1N)cQi1i@O@8$i#;B&CAmX!~k+ zEmc8+_+S!OPw)6N$B58C3gGg9Op)$)$g<bY+h1?p0DL#VM8>Uue4%CTN0H!Cs4h22 z9X--~8RUYvp&s0bFj2y1{=&eOxoFOx3~!+fh)`5lDe2L5ELP+Bny1FySG3{6s_~EF z7uMX>pY;b!j{DFc@%m9?lD;P@YwWJvTOY0nK=P>cD?Br3NuklV0dn*ReJ|<9x{71O zXqs@2J({%k+6gegsO|q-J_z2bp@0cn2Lkk(hZq9^x&ZhV6aCX=-&D{?*a`9tqR|he zWEjqU$*@}%Mggm=V@ZHH{Db-jHQ5Y;eJP<(b2u<b&*{w$oXd=+cs!80{B)FoAEop# zO^QDh(5HBRFm1D<H5Vyp%2Y;S7OH>QCqc&YU7GuTgvU_r--$$rWbHv_szF0)(ls9K zykrTQfg$vtT(051$IKCN4pfp|&4?1C1-H9fxbqb4D8JO%Rz+WtJ@yzjx8Cw@Q8EcS zZ7)P&C$nkQAq9!xi`E0aR%qF#hH2ni)7$*E<YbXw*-<hp?<*sj8E}yqL;%b}jxpSr zW25v7_e&ywF*a!TH)+e!Qc<2fofYS-M+<4XJ=lt*GSfvd;XMW6#FgI-S!cR=GGbSr zNElP5o5P-N0s*-d;jB?&6R6FQ6T0kN4^6)%PbC~~LtWn0(#h2CH9j!?qa#{N6lFBQ zgwO~|fKo#hjVC8T+=A!nh$6Ig#%?a7;cDm{_>u&H&p|{N_S$L77F$Wzmcj;+5>k^R z<dubv4^t)YhKs$;1w_@!=Nag<7*o%n{F@BC?07@tz8_yJ@jU$grlwA~MQ8t5JU_e= z;w1fcuUaN!QLTlL8y{Bn1P*`@3u3UgJZRq##R!&F*2^h+Mc;4>`Eb%>dEdrEAFpBD z*ncqg1HL57-i8KQ0e~8YGSg%p*{*jWDD(QROBw^s&p;<31afiE0K2_B9%vM4DDu>7 z@!C8kN-|+QKPXd-+OmHg?gL;D%qwHd50W|T53zNpG#Wqe8m5?zQRa8`Ti6fciKCg$ zyEN$ivR#YHv3%Gfc{UueEs+%8#tt^dI$Zk9{4se>XQWRSnld1sF7PvjrrY{kztxDy ztG#5((+;h0VV=WU)}JzG!#K;4p)Q@*f0^b`cW!`r`c!~F)F}JZ_J|*ww$YZ<PZ-sG z0m^L-FWOqX({e@p1cYb)&`8iuAyn{j&^ikV@>nmbE|7o}|JY^@5=zVy)X(vPJ!tO< zz(4xHK8GKeu{@$z#cqyI?i|B`ykuqmK=cEPj?nA<<XXxb01+o)(Gm0pLAot*U+M|S z>#;94RdABT_b&+DGVtI_N(=Cn!XsJ>;RU_sddYO3aR{ScshrRv>AEsra>k69%9)0@ zm@(PCM3>$!W>cY)0c|+o&rQI(CZ3lAN2`4Va01s}(W_niiXhoxyy?c^8GF(6QgA{* zRh}JB1WoA70J6895Hev}`>u%;d;pq}*EiU4tbgHn#eM{2fjX6-G)Tc?$cIP(@Jdw) zd_KARJY@xx`4G7~ol6_Pu6)6y?4MHq+aW_W^j`u4el#-tjg`GJpUQ-Bfq0*hzl^31 z<xv4?8a{{?CnKRiFzJHeu&=g`T5x;7+yfmXlr7&N1`dp}=csM+NKg%%UrL%pCGd1p zb&54^4aH_Sb&Z9_!FDG%Wu*YAZzBml!Z~d73G@YE(99r^wV$HzqR`~rn6p}Uz~*ni z4wHlve5zCD6hy(affp-tK5$z#?90RaBlsv}iw%;O@XOoxfqMwzJ8ZP*{o~?q-M_yL zuFRlW`2!OvKikmyiPz>bcActhN<i`iH7>?NY_`wUQT-J=PvfYzqyPma{#&X+MC=Zv z%4U!%n^rs8MrDqYw-q;l=C3^@UJ;(4i_gZ;L5|z>Bz14h)ePWf_YQp?yn>TPk-SGk zDtRqHoI-Dk$uwBEe;%d<2Z}Ofpztku)d@72Fl@^=RXmZNjkI7u7Ifh!4Edn0l$75M zH6i4kpCP`h6e0%E^q}&DK<W)<jQ>$@p1MRCy<4DiOXQGW3fFoLjWAp=R_r0l*6|d1 z1GI#*;mE71esI}Z@|~w&QCMZX{Nd}Hu!iR8c)~3UL;gDL$vwP3=Pd~bE|Bd0ude@M zH@8}j7_Rw&3}l1s!r}wFoKEJK$MlmINN7uL2AHLSOrH?R27sDJg1_RkwPVEm@|Q6N zQm3#BwT*v-2t*B#&ewuY_=6<>Z!YIclGjr=fV?xn9r}X(h)jZvOzC0n!z3x-Rl4gw zKbd^?Z-g3l(+uY!dyaaJ8bJoWx`ntTicCrJU>Hh}M}~@01f3}?Xz%`pg}kBf7u`&d zJ|&p1swn~7<AQf`Tht?s9aBsxg!AZ|DuJJ2NId{np3#|K6zU8*E5?P{N5G|*fw70> ztK)#WfX~>~i)-*gKFTLF11~Un{<4LnV#IEQkA<YfZCPcAcx)wx_k+j21c_=TWP`me z5_BcDe25YVvoLwtKqj5z4qkIrRX_b&jA5fFAN}{BtvS;D3|OeD;>>z6-VNYnbnTSI zBIfXGkA72v&`82gmUY;{+_mDez^9}`Se>l}Ahpm20;OZwXCSt_5&HtkZj*KDvi+DT zn5`66g+A8`#WRIj2;hg%MqAbB9E&DZD22H^EX(K+`p1L8YfdBra$-DqJ^UEBhWn@B z0XWRpi}W959O)ji@Y0ZB$khmG9jQsqG6-FoEu$P3r5D16wv)aW%ulV)(l5!ANH8^u zBB3v8Ot2k7oHu~G%F+!mnTrD+h=Ft?e?J#52t?R?)G#h@-|rn06r4_3CV%3?_mFN# zD{HxM{s3h(Z%H?^>0uVN)}lmkGuvhwNOpy|j}V|SEi_J%mWUFemeG_{DlbS^6hiHh z9%ysX%Ighm0VJFoL5AIIS2M=AD}@tKQ3?<@IPP4n=&k3;W!&1AQz&2ABRf|uk66Zb z0M8;rQ6*alj+eDA_-H2Rp67!X9IW+P`8?(4Lk!R~9@H&C%twAejUfMC*Wai!HH8S@ z?tk|3RHc3V<K*OFLELyiAT5{`5abESy61sr7o~*o_6bar;=Ve*0ChuPo|k4Gh^90T z+Kb36B<8*WzR<svxFv-j3cP&16F7CpM?hi%gV<8L8j&D{?<>LcKO*D-C&N|UTv0Va zj=!=)xoi#|?BeU8fH#u^Y}{AGd_hKEBU>TxJDm-Ygfp!00*N=jMZ!0f?}1!Bdf`2U z^AX|(h0df)5EFu?azS)mDM~#awl1EZK9(!XZU%jRDIC2kEV^u{)^23VIw@9vRKj8C z&@I+;g}6A{2Wv%AET9dHNP$sVp%=0xkxyvp_}Fla6%73lhFqLTwE~FwxPLsFy8w=4 zgS4fvXMtRxEfqX8q{6#(r$ZKxSNwK_*SJ5L1~hC!X8@i764wk|`-5j<>?=t?PQ;b= zdMO)Z{9inmXSWAm4T%crvSOX!f7Fm(ASJ`WpqBqpIsVXS(0^Z6C`3yPm9SIhb`AP~ z=Y9Av!9p6|2?si<ie3yTeib%(9x*=%6nAE+{_s`;qz&JL`ZN!*AETF#9a92c7((lP zoHc)&kkUsxrtGqo7l)~)H;D(LnWSRq`7oD+FX%6S>{GDkB>}-fH-OPk^HQ%6)i<|H zVAK}V1^b8Txd6AYerjOY+4Vha;T1a@Bv5i!JgYKGC`=v44jANlv+k!I;3okPdBe7m zb1ymLI3K~uYRSem{N#N$!0_(C_8v{>&97DfWS>oLn8C9@i?^Zaz>3^|p2n7ee;n&c zx_$#}72-)Zbgz#=kA{v5@jy5Lp#ur#o&WIpy@}xl0OBub69((<$A;JRqiANF6m~qe z3>YC>*8kQ;8oPfQsEhbW)G!VS%SFU*u#{3L^~%jj{0uCR2&onRs{(>iAHFYfTS@tY zXZpHwj&jNIbu6%?5DFd(3I|DcZ3b?~OXiWcZ{_$$nUU>OX)=06MZ(N6!w|Je*nawZ zYgmh5AC+^`aYqtw0Rw)I*LsDNebk`rMR>y_I<1CRY%=cr;Z{n{f!QLXm+arlMyn`~ z!?*^oDVzhh;HeZXL=>^ygM5R;Zyq*8oOtb<&hq!AlMeoBtn5F*I)@~$(~$H#MmxA( zJn`747)jL2{k*&$^jRi9Y4gnI5hanjeXZH+2#vBb-F9Pm4(fG+2d>-s&}igX#6{~7 z$cNh4F&r;P6UHI5(lFxVLM3St!3i|w_>3b6<kCN>ZU8Ouz+3^c%asi?An$=U|1gwT z25Y*(@ly2$p!R_Sfzh#}NJx!)m*T#*b1MBs`$gyo99WX~4ceAv_YE<_kyQ9+=~B1* z1b<6pKEF%?B2l4|V6q01mkeCYI_r4)-~3P`ozDDBCjJY+E;mC}0*@^R3<9@iZXM-( zFkl(dag-Ch$fIk13NlxZGEFFm>!YC&gBafjAf`KApZKJJWS7u1CI7PP8ppRSR&FEQ zmk0?HB>E=juZ}0WOLGHgr@#>HFf8l_C{s|707$PuO*i>o94*rS^nH5Why!}0^bMea zEtKA~04Wwx?AOk>z|MM!6n^&lx{>jI>x^S)`D=%`W6Jzj#Z_8txR_yR)O^r9eF$Pn z8Sm=;HCW`_MuB7t{|4AC1C4VcA7>%pFb6aoe3krdRXMxrz0bHdl$2|Ed2)B<w;NwV zhRM>*AcnPXNB|o#X%305%b=qSHY7m#Z!J*zUHZ{jp6kskc5^dG9b(?%eEa0XWc&@# zaqqhU1-t&e^>bN$<^<-uZcG-P(qby&>91Z#oJA}$Uo-8KWELtczbJ9$lfSFL$0)`6 zTWLYBTNN!t1JPCeF@<?VN_C9UIagP!4%<4~NLNS~OGCCVmpA<&rk*d}ivRS!#JOVm z`u;xd!o7XG@M2)@WYmT|Qm}C8Gc%2`990+9fVZcyFMh7Et*ce1g8RxFL+>0LO)3~H zEwJIK%2hhu#i1Jd%unsl>)ZHy<?B8M;ff%JuUwftKN|8lZibwpZ1K*#`3s#%cPN*m zl2{L3y``v|MJxLlbTQum_nyD5Xg~YXOiQVei8{WoAmG-hS@KrpXPPeQQbnzxh;ybH zLLggPywUfS&1bL}6~|~N=F1T|rsU(}U3j~<XiKhT)lqIO+etWU88_Xc$v)+;y)s#m z6G(L3KW!_T-@p9Ho>v7(yz^~9h+t$B^|YLi3ulT1vPAcojAH!4$AJ^)e{?H3sGyJ# z&7;UbHx6{_Zy`j2%NK-cIW$!_I7&K-hB)rZf9z@5JI=VpD`uV(p?!}<6+`4X%KP+G z=C=fa1!CF4Q96B|K2F0@;*{hvn1(pp58QWvg-+Y=R7$W<S00FGndcx$3DCy*R+6nN z=62;>Eb$PeDM)B5U8U{2l{H#1bJ41<dFbCfNvm?jKXuR1i$`z>A}M_V-eho@o{<aB z7{;}AhU<D)U%BOXJwo33BDr4m%+hU_$vEmIJ52zp{aI)BFhqiowz<|<9;y44w0-O& zm<E0G>y2nxztEtndKNapL=`S4gamougOR-2-UywDbqPX>mdn1gr#Ha+6tal@^cF%@ zuvaAtR!zmIk8S`$(Te$mYyOLWsp3Vo_td!B>~n{&6!h~@VeD3SE*uhLZ0j(oyUBw_ zV;c&GXq90!6D?sfQqaEz7XwGS|G~Btzy`R$w<HxL@PyRN+tA!>dD*s7wyH_aAmo1J zR`UaSn=?O{u6}&1>q_?_RPvQ6(aMJJ&~J&m;NQV;DkZ9hC-eYtX57jj9vwx@Uzve) zS_$OdUs~bc?iAt6i9#gfAT7@NTlsc~7eWsMky{#QV<ud()&i&6_3O^DyfiiTq=(3F zcV84&>d{<Swa_ILr96?DDP%s6b>5mYX0eTBarEHLrb1ZXXR!%;I>?I+X;?kJVi*1S zD`g*}cBoQAWTU1JIVneZ(%4^2rUw^lex#bP7FS=GkGo6@V?`IE_^(oa&gjy3+yHZY zX@9ZBS0&3f9$U9&uT!6FTMp>zjy5@;sg%xYV|BiLIP>>R%#D|2t&7H2Z;lM?)r)>j z{TUZyOh6lQA>fCSTnx{uE_`32_%hcyhrKa<CZcF7F-&ODd}Q5eZI8VyT#V%!HWGFI zX<Pojm(^k^94);_D!em(w0(38&#NgDw<Ubb_S?UGl_c|34MTd~8)<JXkIBywoj+SH zY2l4ID<nm8^RC{04Kyn($|*55Z}OUUrOs1UoOMfxU!GhH|J<cB>$OxXERi6qk`}3% zyil7-5UBzLiuhD43~6(qtzvw?Hj(R;(}I?<S@VAat6urs081$F?fgO`nuUL?Fb_>> z!Sl1Jim{-}w*+9!$>ooQJSl(VES`wSeNUl0bY*^_F(N?%FFqY$$W>|hrMoF{7YUY_ z!5D7e6vt37yL<gG2MjA<EExw-f{)X6u45}xjp=@1Zve1q!S=7-a$5?H#2G96$F3?4 z4(Ppn;@Ao@*0}$xhKy%{W$EF6{5%T`Kfszby%XSZm%}69=!~oGwAcWw+4$v+21wi` zv@2-M4+Wf|A+XwObresl+J+epSi;N3Pa_6IQiz|S&2S{l^y8Su)g<$w5`-kuU|V-= z7qZ!b;0G2hs^gdkj12XDnN%k!xQV}~cxlU-hOHAlJS4RMD^L1vcR5oLwin6yb%%VD z{pu@pvm)y$C#41K@*h?x+23?3-vGv(U5V}s@*<Yz;-6UytsLLK+kd<Kb0~<lX_TMZ z(|otYP@|zf>HR~~PD2U4z!{IU<RF^Y#w+yqx|Wn~mFh<e3vfpM-Tb>t-w?~?>Uys3 z)wQV$*3+KvJZ+mv(Jl=t=*fL2qBCn*W8APE(#P2ZgIWTwS(&{uo*Et`6qUCx-=ovT z87ZDkQpwxe;(WtZqmV6A_98i3VW#YpbMBw|^JhmYxygU*lf(+cJIDTn2-ViqD<phS zN==|r-E6&`63)|UxmEVz2B5ORzO$zYY>1B%Yd790H8_7mNfx{&+__R8;Fsc5mTWw_ zyR$a&r1CV3v9dbUEc85cS3M%pfqAJ8>K9Onad@_UW+=ChE6y^>@69Ryxjne;mWk}0 zPOrSX&nTwDDevjrZApJ@=g#!A->h{s@R5URQbdR68+QJ(uT{}XVmrUo2nEVC)y+Hi ztv##fYdd#ri><4+55$L^**diJ!U+T#tuKdet1vli!y^MW{4HIehfzZ-e>nTRAS=K3 zX%zA--j*EKBA1K?H{%=#Y~=u&@Rg*a?OPKnuz8VP<Ev9f73@)ES<C<rC%Fp#LbOKV zyo<;2R=Uhj3JxwzPL0xY#J1_Ylkm9+X+e=kf7rbkkBtsmJqIdfg6Ap^bL+nIv}wKM zPhjFG48UO0?1X5pDPjsOx!-S0E@*ir&`{|6=j2J~kJH?-b6;y}rf?1_m^3}7qvNpP zHz_miy#ZJ&KrEg0hyWd6-uKrUh~O$ajWXB1yUlxtzF}%v%_&V)!8bs9^yM`6_i=*^ z7W;W&Na1h8fsWa;uL?{GOg4S>M(GKsB~O=a+rUo4Eel{HO1eNUBvFo)N_hTC%Bo~= zc^bkO(V&cw)EyR9zske;Q0D7^@Q%9y$S=s*(<}Qn<WEnTPN#MEnOz8PF$2QP6CQF; zI>r?bI@@@En2dg4A6!@$B^^H6;F^<p9Pc3dmL|^1x@VnU8S$W}>QkRN4IjRHwn^JQ zMzGO1ywGAiW5svKx#DQbY$0VeHB1_0o$H&*nnXXi09IPzi{q|sHI}b2YxfQ5TvDuQ zu3TSNx_5Z!7v_Cnz?Dl$p|9^+mCLg}XNDRYrk*og11n%-;)R94hEHDQy@g){Mo%A< z4>5xmO>!;3EL@?j$pVA9Gk4(xP48+1Oq1lRCzOZ``vaAR+9KyKi41aGg8Uvc$O5<o z)i=N+I7E9uB}qk(=d~1bxeR?DSy=2r2lJHo_lj%v{_X>Jz0?dNg0}8oA(R=nK61ET zjA`!Pqn!RmOO^1unZdkuxbw|>#(=?165l745Eh&)Icz&ol>B<r&u;AIL3bpiF?dL^ zm~@Q|vR-s$zMSc9sHxMPdcj?I64xn7uMMaw=Y@i4;irC#PXL%zR)!3&Y=I55Q7|iN zOa6~agCR91awjZ!JDgpLx#1(-7ep6W8XCq!J|}d`3$^>7Ne>((-tuhF$RIBi{tVCX z;p_YT473#(u-9J#&m#z2WQ7e!%4~+JRPvT{6eMhZpz&c%0^H?Z_^Se9qzMgUxIb*< zRs&k7T2C`m6y@T|y)|Hn_px$B=23M&e4RhjPlf_^vAl&OAzh3$<moM_^Dr#0bl2C9 zR_UXW??lp=qt34%F)?kB9_NctSL*Uo<xxU~7gzqC@&oO)E?t~47!FL#pwPc=cCN8A z2TC2WK(^jY<8o!uP`yn?U&j+L9i%&~mgSdF*j5zta}aU^h=X*^C3tBqQAIb2g?=I_ zW^n3i5veTr42&D1<2krMa2B&;-}=$KMnb&sl^7e&jNHRCEd>4H2tFyju1ClkVLLgO zcV71u9<yboksRfa$qV0Hk~d%LvpF&G>QMSTGf0+9v_vs;FsV|%%0Ye?*JzGTknkY2 z&zz42PPqw?6P)3_6z+HiG9!c>wk_mCylVI-4C%TAaWqnS>_K<kpaKu<5bP2}OHn_A zcHS{PPjdX$6V^Wvo*ZtzWWWre`EX%Nza&AbAeL|UruGKN^SS{<taG|cJS|s)8q&<( zv+_Lc4W-rcH2O+Is$%ilUwVnjk@B*E{OqXs0paXhi_c%*dtu^VwcVQORN=wD&up~w z1beBf>6M`PQq{q$M$Tr=m`cjSk;RuY357A$B#ZfK`+8bzP<s1E-wNWsT#<@h`qX#F zPg?g_ktSr3?;w;d=8*X<3UhIOOM7#~Ez!5GPH%hTr?lBfN}0?Pq`v^0HDFszYZ7H$ zl7ZHqYKcFokp1&%&2*0@#pvh+TO4&(my@cnga|FUMj2GU9j#rU(zpA={XCL$mC4_! zoWt$o-h08_&my)>Wy>*2m-AL}jm=*;5=ymoNty+FN6(!UYKp~eKD8|Gp{o3eO_pY^ z$K$@&r16^(7RAlrn8GOMyXHlWRy~^kEIr)#o*#U4J3rd<G8nZ+T^!g)xy+)-WCpvP z646!SKJa~;*gHo~JYC<G`QC=X+xt<!qrBP)Xp>lGvh6AHf}f5>TV|cTeN>cA<;5u4 zV-o*)!8Ly3Gp}4iJMnlda_$7Q#MdJxMNe_^VOW8ILrmSDE2qoLG)+P^w|uIr;-@j8 z;c4+T-KXzde^{2hZ!I)GkhCsseJCI9aMwhw(?Q6}$TSm%UtdO~BUO0j;*O0A$%_6h zOEnJ<vlQu15bDN<cS<1AIFmju+@m&fq8jS;oP4vi9Z_liz|X{#?TauHGEg$4L$7~M zcoxpwH&4XB&u?tTV)DIsqr@hxCoe5TUUQ+#`?0#km{U=ir_&8E^n0>L*D&f+pV~(g z15e7h=8~5MQ+=+sBFxZ!vowLI3;_KjD#eZ$rXru1MLE|{wk1|L_31JKoQR0{TQ+Qp zCsZqzRI}iw!QT0WhUJ?Ol^3fgIolI5wV&e^z$!q{>3Q4<z?e0PpW+M5ak9?t{GBU{ zZS|uKm!p`n%Dse2o48rWu|^WrbH+W!hf)yndYEQ1K+^EVHEB5Gq!y626Ux6nChm_c zDSl5mucP^F%6g{#%dz^j`9<KTyq=7i#+vkX&N|0%NH>&*d{djiKtJF?;qmj}D^mIr z4Z+axwq+j6!#gGQY(E%ClPjL1TU!V1Bl$F!_5JV4QeWc+Hl+p9rQM4)8`TV*EnD{1 zyqEd_9`}H7BtpsQ^7yjNO(s^JpKYq!XwE0qBKP}C;)KZT)$XGD<T9n~QlIVXp#7>f z9=#vG#X`fHd$WyW{w%}2b4_2?<Ju5@>c&cQ_IF8LYO94#+yJYd32(UMI!;&*Bg5_T zYwwi8s-!oD7|diH(QeeT;%L%M)U!=DUOu+<HPP!gIcC{Z=jnETUeixB#tagC7`ZzD zPuP;}X5F$+K{YO{93&bJUGX!M{s5~JiZ6P?w^Md@l=Z1}<0zjAu{2+d1OC&IpTpI0 zoz7cq*RRZP&0v~MF-0lSbwXH2B{FWWAZeXNoE-Aw^^0*#9VHnX^CHC%LfH%l@ksD- zr$i#n!*$?V29YWvcyLQ=ty}*vy7}ojmi_l5rT$)JkI!Is&LgkYPiZB^8ij_F4q?r3 z9)F2ilfE4=Lgt8V&61>XB#oMcW}M3+!p+y1Zq0oKWEAOq6~{t*H<t3A%MjhZi%<*& ztkn1liJ5oTv$9nkVTASEa)T#;(cyR;&A5*?6W85mw>N5sCNuN@d?;i2Vfyv2*!N+m zVX$a!Lk?TI`%66^qw(<9eH>fGbUw(iX8OP_jC67ca~v&XF?}5+^z`>fqOLPZyEA%4 zB%U2^k)X(<1#WeJUq-bdM*PRjMAVhCe6yu8@cyM)FN>~Wf1WcUWCy(sx&E&Ds*eoT z3}WPZ2)Lv%hGSgmH<c|5Dbe3n#=k?b-&Dm`UD!q&+cp2@W2+PJprX#}6Pe$}7n=@^ zs_JWM8T{AS$wFhs^5si4Cj}~boeK+#lob+>nwsr1DGtAJvr|DcNo&rBKbQVE)%-KH z9gx2HrY32)%A`8&`PUVyhcl+IW+VasWr$Zn4fEaJA5^b6>zWc7JP*u%M^{a(79Hgd z^f8~iDrhz-ygh$V<`ES~N>f1UqN5(-cpDS)dSB?;ImFVLrE}Gc>j~51H8zj(iY$59 zx#)1t;=NT=tFblnt=>MCuK0m7E7r;8TyYsspMuZ9{{DrgrdQLtyH%5OPHk>Ifb54f zfQbF9LvOA_G=AC-b#I3=TjY3`7m<*~Q}wW?J%e~R+ut+txi_y*)w9vHxuN9v8Q0N; z)EnS7^>XAPM|cbQwXgQN_>kjC1;fPCXEyV{zju8rb-8M@pDnexn45ENP%M=e76Kx= z;4=!Q4(x+!&HOsn3o};(*N<BA3Hy{@EG78etyLRrQQ1z47SqVFyN9z-uPjR+Cs&cf zR%BV&v4(5xHl$eI$zkXT=!yR9InB7$!B&7;W7R9>xF;4sG~O}{L);ZQ_mLVTF}gjr zza!uKr<oh$HwaN3TAB>Clr9k0)I34@7G%Q74~=CCsIDs^)HXst_}vCYt2ummdaxG8 zB#m6N`>y;VY@KayCz;?CSrNzRmFlsfgA4*(JtsiDkH}M!tFP<S_u_iItlSqIw5;Lh z)Qj$=N!Pgn!T|1%G;Bllq?_{f$_jxdtir?*o5~K<l*n|&!}DQ`no#RdQGf(lIm!nq zaVnfE0beb!HB9o1UT2NS=wLII*!a@xVdn;GUbzN`R3Dsio>GviVpgwBkF$hUt-p}F zEa2Z~K#7&jtR7N|Vh}UTq-_!39=qXlH>*mJx;QVzsYlI&z2c;b`&4+o_i)n6qw$~l zUH^qAi(8RLcmSI58q8F>;sZ%cucoxV`?~=FU7N}Wjw3%KGKS7ntF#uQ;UwH(y8=Sa zhKqLf41MxN6D)UDed^~~<_wXWO|K&t7df4c=*%%vJ(UBeO)=8~SG&m;33rEFY2>vQ zak^;s_ugr_JJij1ef}^hP}b)r=lHgy%+t9l#G8NTJOGmZIcl#%s?a=YJLz6ouCUql zys<!Cl<c`fP+FW>!4TlLr~1pnGJERXLb7qf+g9d4u?|;sK9lH*c-4x@9mh5ejO%Zg z<LV%(2j!WX0v2BE^B2xo(o}IeOUq^5duG2SBfP`Ptxga#ngz0SiE3vCrCxVOoN><* z^RyTE6>OKz_ORc`jq}_hqFssX#J!G(D28U<a7E<}#zRU*IbC0<4(^0SO3U@Y+$nDW zvq}BGMb~S;mK&>n?o8K3yngcs?S9KCDob-tl2Z6U*lIO?a}Mi!l42ig(aT;ilyn`X zzIOve*Ex$eL<DnB=LzT+j@er-*_I@G%$mAX{xolXIUCHpo?qom2Qw5Kn-%}XIZzXe z&R)CPYFED~e3L@<D|{N3_HHB^!nqv~x+!`){$~zz%yl+6yP03WIli2JP7a2Z8sDRW zv=Y)~rUcnl=JFRU$1RJady%x6^X@Hp-%&eXZV%C&*>p~?$LLfTDH^>L>BXkl6-RrV zP@M1={QR;b&!y6%vr?#;%Hk2N@N;U;j1YsZJ<&6#;Pv^d>!=ffeX>Vz0}Sil04#Yo zz%pmSSQWLm=1(r`#03~oT&d{i2lxv@A|<zkN-XvEg^W@y974UvbQ8lwO&(O%v8!X! zjmC_IDCyg&H;C24+owCKf1YFoRL^(yU|#|AucM#e!C53!^+wEyHvj1>Nj^EB&6>qr z?KP*kZl+tL?UbUpt@Xpr`FaP~F_7)ZlAW3IZ`!VhFC6n#g{K$9+>O%vlwL2S1}}dP ze@%uRQNWy|(9{{MG?DhTIFd}FCaL5>e$sN{X12b^FVp)Y29v4}erY$jPW;Ve{TOQE zlfV!-lXJ(zFb{&CSsS=DNXiQrbacn`XP{lu{2V0y)b-HbqMsLc;lkvjQZkzEmoCWI zP?Pm2+jt6Oe{0STEAy2q{mxaRuD6O_=u8=iYmvyFMNE8)owJDa+1>tQm2;09t>aZU z)4S#JSF#m2Dt3vFo^98BTga7=vKNOW+c_wpzy7}W`)mELiov2o<&m&S?<eQK{ytI* zXt|xP8YSC1D5$6BiUjE6UPs6Ua%S7nEq2RU3G{yy2FJ{*fBm3Qk1;=)<o)q@SmtqL z^~U`0-Jo#wv>?B+(Fm8z8$j2MUGukf$NQ^=h3a3uL*r3KQPR+II`q%m-VSZM_B0PZ zR*s2Fcdu)j?7G2{nyoGIzOWM^Wr!3;9wO1Mi;(bR)_9&)dU>&V$)cgSywA=i*Xz!w zRR?VI7GzpGhbYruV?BPWojg~=_GjbqhceE0Wz!6pOhXKfn9^TBt~h!y0sh?Ho6l5p z8+zsQpIeu{pP1Zh-Z0L~<%!c&;yr*fJ<>dwem(YFC+b|Sl(p#)HeJFPE$T3)Y$$xx zB3<(AL)ijKJnOT5r}6|<5AK0)iMX-n!L{$2QNd8m=b7iHr?#7aXaCkAtJ>q&#kF;K z50s5GtbA}WSA09FGr6PZ=@#*~<T{5QKEgaLb=XN;hy&B)tyu}$^PUW8zCQaD;%s4r zyv~f)*mOS2v-!znENbMc(|aPFrN2IV+_VbG^OZk>c<+$O@oc=aCuy#Ik2%|9B1#Ki z)KFMQ?}}$f^I54|k8bzyRz9^Py;_oR>KDRTc<z&Tr}fs}1JhnnFD4a3M?%6C;)l#_ zj3T}5`lY=$KYwQl%tfTSni97sy97o-TEL`1Y+E(=aSjD;R9F}Db!F(K%sj0aWPN`? z++8>6BI?+JCao{Z;pA)0oJ586Gc*CTaL|`S_c2)K8N^v!9WOpeDUK7`9{al-+1Va* z8qRCyh;+hm_Yi&1j~h1)|1lBtTH|?WY8Ue=`T21+d}rrib=_9N9S8k@j7svkG>m~f z=7LO#;6qBh>MRtoq{8aY&8zIVDLEt8!ohRAhNgU|gNbZOu^uEnQ%ij}ukrF(Ys-@c zLiONo^{0=0gGOW9TB@a=rQCG`+idv!Mg1x<blzVPC4z2Kz3O^LGeFl0=DIR)>tP#{ z$f65zEopBK37u-4Lw2nW^xObV`NdErT1Hb$V$sJvo0z^g+Mhb0G7>>E);ZtBCObrF zWq;Iq?SzY5iBvzabHhrmp_y(m&Oaz{9N&RNtg+{Wp{>Ex-7_UAQ8jKpwiITFF`VT$ z&<b39M-lGEObB2YA|W(3x=kd$il`z88(FtT7j6?deTj_dZM$S0)0ABr!S#uhDCrLd zVg;~ylyBkyprzFcd{+JAcnwc`Ps$2CA5ZL>hj?H9w5;#5BxwKqn(VE#^6+RaQYBAi zcucOw=+*iIdxzw&@A_Z{5s}q<C@^Yv5R&%aqU)ldDA}nxGEuM$F1<sWn`PHRuNYDC zO2E^%(w&j3W^X$Et3r)%*TO8ua~*!pJgdp;7RnPElk{y?qb%QH7Vr9w%=r2Rsub?v z*Es0gnOR@!Y4$_LQecccEOH0e6Wb5lR<IQPOcozK@m3Q?&B7*kdae~QSw&Mi`E;f$ zeR|th#<pn!D@V}N4R{i|JIFkj*i6mv)DTEIdk10pa@$G^y=kYd=<?hJvYDQYITkf( zobSx$M{7$*;W5XEvb1jCi#wlgZ_k9kv-)*>z%=`w1o_Ej(-QGnpy?`%W$5p3_oX1* z8zAWX6uxF+A84Y#YtdNVa4B-Wb}#uXlwI}Q2%K?6&X`Zy^_OuK+S_Fdhphy&Uo1hc z%)U;levj5^TAB2&Jf1wLbG7E0DRa%2@lqRzcAiaf=WBT9?LwB`nOjq-V5Z4$PFQMZ z6qWk@^syYjxh-!@;oz9U=f>m9l8cH<i^jEV(|oJTcXRh<4{HV^AN_IeR1uTn{UteO z&GJTXY)3!NL)5OQd}o}np#pQ^Id-bH+q8Gc_kIECT4{V34HiXZea7xoUA|~eq<-{w zg!u9^Rqu-MP>r_#n415=i>Tb*a;pC7ubqfzNCaV%w46}OQMUC{m!TIk#r-8LHs8g( z1;%!bZx>HnuimChcXX;9Jj3WgHxEV9#~Pn>%uSTP^t@Zu*iTBczdNI7L%_roX@3^l zSY5ou9rBnJhGDc3tGkYy^><o$6kP~k>5tiVS|}_@vXuTF)5BJ$klOr&|LAM;!ZZyN zDtt}0%xbZEI*yUmM6czD!%)YyV6ViMOHM1d^4_2N_ngUw+&*=%bya_%R=TQ@Wa<Gc zkh^rBu(SNSc*)ifV)u593GYDUNOa^X?5@{03m0V1Jnw<wHEwXPFOILs`OuE2sCRGl zr-I5@eUEr=C!N8bO_!1yhct@bbmrBW-Cy9CQIESynyB33^G3c-*9XKoMpN%v-p?Gk zKF)iR&eyHMT~BZ0?I%|5-0);E*%A@bMEBi)zSL=U%D3uqsZ9=@#miOwWhY$X)@fyR zvO~QU%qcy5M><F#upYmVw(W<hctU)X#Hze0ZarW1Xr@;s6X7&NIA79g177K7Qfw1# z{Up6cb;IA^wV}PV4<_Wo+IZ31yhU|@HBtq-wi(H}_V=8N=eNebo5$1Xj@qpx2NVkB z5|>t;TXd@Ndq&Q4+LU;t&7i6ALsl#cd^g!8I@Z0UUSVOj?`z$L-~$?0S7QDeLBH98 z&@I`?zZ!b5rFZl}atd|hhL2!zZ_oy1_gG&*Rv4GxXHRawiEm;XJ$8w5N+&!kR!^Zn z=AKcwulqV4H_Qze+s}s~N`YqQZ+lebb{}3-S-QmM(t+JNPqTT|*i4p%4VijaEszFK zQ3wyZzi`u@(vJNl$obVFH@j*jzjDvi(q*_UTvf!;VHG1>)0p)ut=hJ<smb`sOUbb# zB}-I*%2)qEmRhIVMEX7&1^{alti)cBp1@1My+~JgUR%MQWiHK<NqH-{izRf2;Xqkg z?xbb;`#W3JeWlKCzE4lYgI(ujrz76PjsFf=yoxpQ{Q30TS>DQNy7kBr*dOStnP&Mu zeFIo~P1Tr|%~1{tcdASoQ)1r{v9L=!sM$sE)hlh3xtvb+uN24X&u40=A(dt|SWab< z4{8QGb?6BiSZ(<oO2c!b0)RvLE!p+B$C7mI2H%sP-}V-nezNmqxw=MiClpRl91{bM z8AMxhUc$7$pYJv(2s8wszrRc2k(MbWzm@Fz{v`xsKMwW}KFBLX#Dg8?iKk06!Pukf zA0E3kvUB@sx5<VS(K6mvHk@~(OV|~#sOGIMg{Q4c$N54}|91Sk0pvn2XP#A$R9C3@ z@qcTNDAal7bM*Q_$#_NWZfO{!rrK~Z4#A>7+YRv1eaZIXUS$Lp_ymq}m%bhU({uxz z!DJqhU;8NB01#bl;^E{D_5OXWv1^7+7j3#`(R+7h@zTV^SF=i5<9<%O_(0pj;q}Ew zS28ByNM#1mA>z`}^j1t8!T-E+#NEMag)NsmJF}I;UF_nu?&T{i`M9VhBB;zuAnylr zbyPBEuwkM;C&18Aq4j~Vxq-&<und<(01LSk-t>4V<GRe7RGslf>uqP(pTa;qH-`J7 zj`hFKgJ<kx7Jp`A;#n?PZN=07s!WtqMG%klWK@ig&x}a-3|_f>liS#HJ~UbXu@_wZ z3vQ^FB%PT%Cq=#6NcaF(ukW%dx&Dr7Xk06>N;X+zZc=UcC}JQag)JVBxm2$6_qN{w z26G_CC{gTkQa<yx1DA}M`&A}WxBy{61~{GxKxT4U$})0?DA~rnhISG3U02%Gk2K2F zuVUZ#?&^AaUi%o4H8@H~zgm`^!+)(7*>VK7LA!PA2*lSilUm#ZEnP1~*X@~!vZH~% zGU|$t>kRuCv@-JjIqKY%ebscgFQs$ZI>Tm#$f1G8VT!uk@~!TY=nY`8l&kSiTyft= zJ%54DVU;rePjQ<O?IyXi(lap`7(VuHq0A=7Xk~A?0fdb?C7#t?h*$(TMf&pi0%eek z;Dr1dCj$Gx1g%i&pn?p73TX~hklhS~ZXG`=au?U`c_38=!FlI%L%&TK+%%rCe2b{h zj|tB0r<`)w<LA4@yWqe;BEwVWb+mAfF=4CLN7ipNYSYkX%e)KuC5#fi>X^bUf^L2Y zR7WD($~;PC63gCFsE_#y4rxj~)OwqfCwX_5HChN8BzdmhZaA6efrQF2Uf3!c#tb5~ z#owJzJzD`xn+y4uKX{86p$yQ}m9}#vLYF!AM|(2yYf62oQ$yXpZK<J(NL;J>WJiat zx^3Cl;>Y5LUBX>Z(dC%mVy_SQA=+9fbKK~My^GdFTa<n~X|aES8G=RU)>Z*-DMUwv zPN*a~cel=!a0WpzC2PvM-(*Ay-TSwMy>q6*Em!7iy!dX|O?fseo9<&AG~<jNiI5m+ z3DlopG5nZK1LY=6?-YPR%JIat^awv02PYTlPUf_*?Wg+b>+<lgG>`0i^phfc5(TYi z{lH;=3tnC@mqzf272uQ)JB`?%M3ieMp4uKNa@M;zrhw7bqp{M1v^VWejfBc*EaRXE zy$?r9N{xy7##pYeDZH#PE>Jbp{e>9&n-`c}N}6<w7?dc=GzFkMOqaY?vHgw0JH(0X z&n|ton1<j{ex(6eFFHXnNL-6#&uDKYu9-+8m!T?lD)DrAAOfTsk%!<kU^XjdPZv0Q zD6ImX6P<XJ4-U24^wZcYvsW65d9%M*!;ni5&xk4e#AXmV315uv<jzVEQ__A@9lD=R z6t!-1%$Z_JMOj!qx>JNnVa}x;zGqF6h?heqXYR@z)mb!HBbyma$xQlqWi#fuFud5t zWAmQr7I@<Q-t6kIs^8-+sA54BDs{I0>bF#LblfL3^S4K@-aia{O1{ZwKIu|jY;iXG z`)%jfS28cY8oJ07GN(xnDmygLFV)-Ps@OmJEY|LdDj>EqYWG9b#dT5XT<)hVYEH0! zbm{+sgKjAl>)Aq_SnTB!sJ8XtDYK*EOP`H23Ro7qyly%f-wGEbf1v!qLI5^;ac}on zVf(DzRj}qh0m))?Z$IR?ReY_;x{yb<{pkV&c=LPqi+DP^K@9x0QM9gu(5$Vdpf$C* zVkiN%A9w>0YN`|8S7rTeu+7Y~vBBLRhe8>FV%!LAz>M+&iAqsVJG)S=VS=%OHv+}w z=#f(g(`&n9XiV3-6c6R^(+Xt}ga8*;_+|_keFe{Pa5@q~rIrRT%`HborX@gYnFPSw z?*NnP^d}jQI)1_dJaDe4m=XoN&qV}fFhM_p_XytpG@Crc>L9TgRW;bjKo+kGR;-^g z>_?K2NX&Q0@RQ9wnpQPJzSIx2lk7$yr7h0O_Gz|a^0BPOv-w!kzV0vaAIry{KaV)6 zy?&8@D?)d$`0?v!WPVhZQ|fl%znbXX7I~JMKM+re$r)I5RE@t5)_ydPu|W}jy$gZF z9*__Si5|*zRUnH}vsp}MvGv#{!|IXH7<dB3qjtCKs1CW%XTwl#QY&wE!W-a!wD;X{ zO(oyrmnMh>QP>5QCPgC35=5maReCibHdYKtfG7!&1QcDRS+i6@L<B(ru`DWziUq}j zU_lXZRX|11#fC1rVnclA+z=Ms-S_tUexLW(FPG1moH;XdX6DS9GjlKZ&Pn%facXSx zkzG;9aZO$5nW&os`e@Lc5vu;Y%gOxd`+E3V>`}z(z0%{C43C>->3727hIg?}XDQ+2 zlVaOpT^^?XJU!`AbV+-{t~lMQ&V<!gH04Vs)<+E<JpD-HSak08b|dIhay#W)gzU=} zGn>{fVRl#5$(cl~te25dPI>=CX+nI8sdYsOr^pCiUoIKnaeG4Q<lH48v(}lH8Z;BZ z&C{FW(o^^;ajz*-YQ({IB{M05<{!(SF{qr{>^DO!Q--XLz3{ZrqCje!ZvyX5?VP61 z6xE?R`H86&N;19db`$mOTGVH&Pbo$>!>h-4V9E@yHf~<ite|M>CBGLw9@)w<e%!34 zaiQeujn~EZUO%FQhb`$VC$@*SxMvxqRahrQy06zgoPRCWjWD6Q#=9Tg`1sIj+v3-+ zO<ZkCUKhv~q!sG5t;`9Wteh}I$)V0%dvTmnG2vXnu&C|%ZR<>?^y)HU2263{=iG?X zpK_*`X~g$F`?35~sPvSz@oyMUCK+X)nH@IOEKK1;S$utdZO-vy+sy1k^M+1Rcd315 zD5JS(iko|a?A}N6YR0_i&(zOLZyn2-JKyU*cQt&UF}6}B=Fp`_qudhg)U=zj3lwkO zy`VY$VnIr--%j~2#J-|xSQ^SX@F9hd%=DYb@`dnS%=8ABN>1>F(_lKa%XWB+>#-vE zphltR*0M@#tFp}tDRDXzH@44yq^Y#qw$?&^e8QxchSg@x%V&Ej=LRqjY|DMqy3k}y zP3OgHD(=#`xIq7*W!O6PvfeuBUoPk^SJo@DygDZC$`hW#EQM*-lk%?TsGUC6uzK_3 z6K_;l^LtO9{DZ49{Ou*%3HzPTtoQWWeNZbV`uXeF&Ns|Yp)GTpzYs63?Tyh&Q$Ihs z>SgjKJ;NKnXTWf7y7{??q8)7mgKsi*JE?D-ajss_!T<;e=&PLu4*w}(n)7gd#X z6@hiU`@RAC4&TC}PQy2Zy441gJQSzb%L?*rW;U&3Q*D*Is@`^-EtMU4zoMk8kV8xj zSMSg)-_9<LRJ*tSzTKVk)QZ$S<AuX6zmeUTJ4!13kiuKF%kUY2F;u9Met6ir;VUMc zKG@FBzjEZ|?$g(HhMluFUF_Ui(m2V|XUO_5M7dFyevs^lXS}-SNdk={Z)+G{%d&%# z%A$Ofv~$O2yjnmFoxyh-`>cKH`g^a3a9Wq&OSAZ6f7aLucWW0se)GP~Y^jZ={6pI@ z8g8uy4&PZ^BBp#ys^5BP?l|qt&5@_*Rqr}gBMfDTC97y%1qzH9y|v#tC2zbDmdY*i zJzw@?(dJqF#E*X4+0pf~Yvvo3Cmk&0yX{d~GF-`y#u3d0%0oy5-4L#Umz?9-(T#hm z34>;;SM|71@+12GTreP@Anu?+BjpzxN*_Jw>T{;Y8Ma3uX*RmPoFer_S#s;u?S?%_ zDS4|pab~yeh?Xv==ID`DGVUob*P|Pjj4V<4e71C4WJBDz_}n=u<u9PcLpUAvH;?D6 zX$F&|2%mg)6&d9aXt(2T{0bTyjiZN}iyG@lI3LU4xC&v+w$z2>S-a2LeJ;z)C-!Eb zweL>_hQ2qpCMlg%czlND<+PhJz0tFf(wOY|Zjtr=kDqqju+N;)eL1pcxqm{3+*(=` zOJ1F3uDi4C5m#MiT8N4#N8@~0*0glqxZ$RzBkevWNcB!iOL*>m@9}q)$BCft!|(4= zTrtlkRu7h+M`cs$eGjivuCt6Cee&h;4+n3p{<Z0p(DSH9Y3qy~A(?kW?-UkF|58$) zSlc1H61FG8?HqUi)@D=Myq{01A4@Lpr3EFd=M=TjXiI!#SFx$CJ$qcP*lfGr_&DLc z_4|U;C006@#;K>r$*xQad5enXK~rOez1$jlFa7ZzdCd(LH=eru8aaLW!R%q&iyI>3 zn`9b)FHoqv#xUnRn%*$#JMB;L4T*Xitmu!%ujv+Xk^V*5^;n!X^~#59r<`6S3#X<! z<aWMRNoJ3EWceX3?@n5ldXIek`?<;G*)SwE4H+D3{C<3$%y8xOCrblh$EPLyvHW*1 zT2i1&jb-p1F{nb;Ru!U^*3b?=%~bDUcA6zBL_GzPo43M?G@&Y|*fBLrLTk*3?1Hwa z_T29>jV*m-_;usoRNHWj4W(y}o;AYw{>sLlhW0q!yKdi0=fm6QrIUg}nTjW5_cEGf zp29oWU3(5P9)#7<({_%YG^E*8UN`@INi{J8>}dde8SGgeln44SqFPO*tDFO0%P0B5 ztrh5(=<tX0Cq90xAF?{N*oLFy@d;i-@`Q<fA)oOSzAZk*hK~o)HfHZN1dG=YR8*}) z49|#%<w0#vR?qh>k56P%t3op?dR^Mqm<^qn!Cn+QIV6ADCFlC#oo`f#t3MlZ7iiob zU2-pd<n1|W5el8MdupFVUSE3nD!;@@u69{%CO>lYPw&U2ERgq&E2QLRyz`q|7Cx0@ z8o-b*a#7Jbz>C$jJrt*^Kl6NvPLY1?$1yoYAE&C*yaKwTWAhKj)(Mur5KeJwZZ}(@ z|2^CfMzwut>eHQ&Sw|r@&SscfFN^=cFl$Mk!FQeVOFr`i*F$Iu_j+e4$E}l@Io({= z-(Y8n9?z<Elk(l}aWgNTzvikqW0adf!^yObVvw?^SMSq2`K7}9t8LnT`t;=f?zJbA zLS0r>UMtyhJoSN^#f{kFdFwwKZ8OOVpRj-R(@jCMs^A&F^_Gl?=Czh<4;{$ecSqkN z^20WtS+0s+E>#~^eGERiOn239oE?U;<`3()aP#lMyC>bRel2=p(E8}7vh=?0>X|a} zJI>rfLrq)(^8$-Ix7nWZzNlabC}$BIRNyT1@T-7rfO1e0SS&EonY1?0jWH?=mA3Mo zk+vgh%nG#Jq74gV&s7^+6q5$(*L7-|nH8{YwnANO&pSryWW3j|I5>-fJV^mQvcpfw zi>s~hJcXdGDlg!@Y{i$dE4%0Z@p!@&y=zGf%>`^H^<#M_W{#}5(c%BBc)RN9%5}R( zo3OU{7%S=yCt^CcFm_me@{!A>brr**BHKfO8QcX4p&M%O?Tmq(6$f6=hlv2&MWS_% zFq(4Ma`w8s1j9#1#!J~MT+V0Qsh1z0G&b>*{luEhnjN~@7uUi+&f-@;_%&X?wW3AZ zzG(cmz{xgkMrpCH_7V9iw^_;VR&sM%a}_r(^muQ2&*J%(P4*P{Uu$uy*YV^nrwd-5 zje2zT5U?1ZLnH;BGk9QF{^_Jz=HdMJquSOO#Oq&M=hpIz8$aLT(!=-0cD>aBu#ffR z?B=X@PfYWg?V`Hqd2W7f{jpILd&d1*SO3hd^gkvVl(r|AOKBRGw8Lk!%^tpGAh+#o z#l~(&g5|#ZM({qtW!-i2`hH}|p1(lI1@N`*5e#i+UQyG{rOM^!ht4f639_#-hVMrz z-+4Pdbgi<GQI|d#RJfzrD7(jfZ0)uYM=v?yj@Q;^UEs7n-EFiU&PlKPKU)8IW?|G3 zy3nnt{>P_PYQq+{7+S3N|NKPCN&3X6)|3>U`<M#Gkh;njGs2#Z>+81e<tm<hZL9BX zuJ5JfkTTWvz@Ca*p06)2=vxE-@85rCbCU1IqH5Pet+b$gSD4MP;Di0rtyXzWK}%sk zxd>7HYCLCy&{rz~g&^uh2Mmmrqo}Do3)fFAfFlTYM!saTBS8XqkPKv<p;AHS1trVE z^JKvI1;vd{@-2gp+2AM+8xAa&75g@yE_;^MVK}8Ix#@Ar8*S|aL#RpNH>~sc)i36b z2q>p6x}Md(Tqu~?HDub9qphP?8BxtU)nzQI2{>=2WRC4nSRTqRhos2foBZ?GkEaMj zsg}@c|FN08*uAb?Q`6z0(fRL{;a=Ebv75QjTuOt<xn|R*o7%fFZgTs!$>~+=9z`X~ z`!nJuX_Z}``0@E(HRUUgYXdK6ne;yGe%kYUMbsvb#8hfu2z)w}Y9^)C(jNQPuCun5 zN|_Yf7P$Ov;p(P}7Dao7=SHk}_>v<6bn!TtS5@np$=PqXx!nn6gfMoy()FxamiK4O zQ#NurJyh$r*iTR1_?J0?O*Wu3`N$}kca&=DY$!Qi?CQztjQI56I!xf~lD)%c&9Z|H z0TE20(l{{LO@+~h6XMi`(;LfNg?MIz?-P*)$i~F|t#=%vYhM<*<@5aXe{{0bR=z%T zPI`Su?yX;F%J$KBwmG^kbbE5`&4EAK&Ocn(bI<l-w*iZwTo!1pO1~wqUsldAcr>Ou zN^9HjO_P`h9$Bc%!#O;%YgDIC%57$Hs5`z}wrIUY$j^nJADl*msmC0-cJ94d*Ze}f zA1+_K>hl+(@Y7X2TF{;Y#rl~`mWCec8h_8Zuc%|<#F-_-GET*($xutj%g`Df&lfG7 zGNbF(%Jg<&j7oOVQd3X}=nfZV&r?IGHZVx2LGEsHU?wiHMJE)LJk~7V89}j6xcf|A zIuBIRm=an|sL*g7ZKcI~!R-mbrP#vv&bZD|Lg5=dT6^J+_HlFXne817S^>ARtBog> z^lY{n<uL8s7b0k;%pbv3HhIR+pPqRU(UMYqr}n`{HLX%&VYS~a8ceWuqmrS+(+^J% z47O8iOHg>;oYy0t@j0sXy24|I^};^24`&x{9$|U^-n$}0y-PFCo7Oz5$szW0_NjNZ z+k|ZEG#s{TqGBtPYwnx4W5ZFmu|0vORQ#VgFHk$Bv@c01uzio&qs>NE&qEjcZ&oiF zs(0Z)$7x2K!nk9p?;?112UgWKjSW3>Z|}v!my#MTzLpD64alopp>qPBnx&;AJlvHq zH28GWqAQ!0yXY<v7T$jRVT1R=1IK^$aqs(i>0ysCM!JXOQt1`F7rO&$oBmj}OyTtU z6P0t+j&IRPK7Lp(ns)Al&ap$jsoCi%N9&*5J~{W|Rj%~5#KRX4GjoS0y{WO9-%;-) z8`!e2_^F-hKBuIs8JAhK?I%~S2@IOlI+pY3fZpa9S67DvA50YA(d0|GJ3c=b7|w|! zq_eWG^!X*fE2@HjZO5jt9S=(n9k=nx{7$VrZ%1OPN>KivVK%u(rMkjxo`IpXfkW=W z5xr0RTT$U@K{=N*POJ#;gztYRrCq51L%WBxCE0j#3C;^V-UMa@98`dYHyw2ck2N9B zEuebi!-s`+t4-b2E;p*vtJ;6{_#j_UC6n2<gww{{{L8X=937R$&?|zDIm^zj*<ZhN zWKpu|Im>CK7sgL=Z}2)Bd2)uLm%MhA^Z{S)lwBt`)|k1PF%yqADW~y9D(xitRP9P% zncdrcH>c;W-L)~+EW+?ojm@g`n>X~2R7fTIdk2j#@ot~Dcv0`|XJ<Mb;8>OE$LsGM z*+m^)@?g`sd5c|S_jbxACf0W(EUk7J*x?F2e7jwRidw<|TD;qL&`B_~cv#B;7c~uU z*yGLqaH6Z;hmh~5Q{7=_Sy3P>y;a3;#*AY<w&ON+#A(WBKjeR?mu;GB(`Bb^6LRcC zg?7ir9;H1$#5p&bm3*@2oO7()2XA*#O><YJX3D(JAx;Q|?azie-kW*z;+X?geiJ>W za^Ji>pfCSk_4H9K&kCDu)25xt4-b3Xo?ynmbw0V~*~%Ou@sn%d1ciwex}WwQ^}e|s zzIrcuHioNsXpz#xU<0RK+bXSX`_cB#>8oSAzIoZ1ruES2b=61Cx!yYWA$gpz#~le~ zX>TLWQa|q4T?*D)NOgBIBzED-VA{b~+W1>?C++z3E8XXg4=+~R5Z0OY(?zu!wO2b# zrkx$;x##(@(q&;&I$RgJa@{ElRMYlL7lq7B;<x;M;ODt9r7z3x`drfaUNfNOPU6um zTcW!!-}gOWexv^B5+8Z$!~7w~;(4!KV|wDIY;Kq~zo*@7B0I>n^^W<C<6g@ax7e2* z*{rU6EYMQ#&f!B>rQVj}hx7g072G7_$_`r<JY0uM88}1(spX{oa)ZSmRFSdU>+!?N zPxU1c9f|dc&H0{8i`LU7y{Toe=TR&6A300OUI{<x1`YPEHUO4IgSQTAVF3n?V9#fk z>ZlOc=6F@h`pCdEi76^j+?w;#_xBfUG3}oI{+{bRhi7WMSxS5KG)K&xx|m(@X3N2@ zIE$QVpI;M&S$6N<Bwit62+E^hcee4Xik{bN)d-8a3aMN49+>@@AN%H2%j+Xe3BxuX zD14)n&hpsOTB57nmbynf_52R+f*X}~*14Ol+|@tLx~h85Z0V`&9~>>@bu(`7_A-gt z*FnpwG1@z!W^8=lHm#3YZJXyurK-*1Raysm86NE!v;Rd`m)V=AUkI7b68F|yV5lRV zCV5_fBaMvB_r0@RSDJ1Y$yd?8ersggch+&sizWoCkFz^x)>c7`l=B%|Xf-396&0~O zb7Dx=KKY+c1f)jQ8ICRL$XFIE6Mc`$`a;y0#9G2hgL7XV9kxj0Y-oj0qh{%clp)>) zdxoU`2Fca;Zr!M>keQeze{2lbxvXx%(Z<rS<*RqxHyoB*mMooRU7``H9{6d|wHtT4 zj1QQ!xW4W^H0$*zp7plEJ_CNI7OPynt+#Qsb-uAu=R&pOYVE0Ch{GNyJ~=*a>V0IG zaYd%(QM1d(4F4(R&lgRolRNEmgm-PDRQTRk{_u(Zk{K!mzOb$vP(o`~2KY$(3}H6~ z!E~1LswQCn19w`mH%Fb?6=&M(Iec^IyyOx4?zdjtAs99NL5|;t47m#V2(^hj&y}h% z7d%XvZQ<-w^)Z2RExu{*6Q>c(6)yXpn6wm`wiIu#+*M-{^pL?5x`t(JnXA2{An|_O zbgCmhXVoWn)R{DR2p|obMg=p9WCO!$HQ3>+1Z9a7co%FWNUJF|M(6tDhZ_z$ykO5g zu4HeS*yNYJ+j9KN0IpWLW+o9NR6U*w)H~4hv5p3m&urAsl5~-p+NfmWws&Kl0c;c} zWT?D}_q;r7h<qh6?GQfVYjmAh(CcZlWc*v}-I;KE9QwTJV@?3AJ;88PD@_@d+f?|h zZn||HE6RK#JJ{P$iGNl$wZLp=lxz2i(y&V}?bm0gzx`lq6JI(CtR8WFtoiEQzrB3+ zXg^my<Eoa2LA~?sX|s;yFJonQmF|k0zM!{!SpLEBoxMwMYLE1iU%8ZG5!{wvA6+2N zP&wUj)5V?vCKfjhakO}$kKy=wLQZ3Egrf#K$<956jav%1Iflo5FqV)nZEdy6t|VWz zAR*p3y8%T=c=(SLb~nG@9$5DMm^!`n<6dv>Y8fSX-Lsqcz?b5>TJW!%4Cymc^4<Qz z+UO>0)zK8A@|?>Y;Tyemv-h1layKX=iGONOjrO<|#l_@(kjS7I4%{5U%@D}58>CxN zL=sWvcXq{%OJT!(9~{L2H%cQzr6^Rd8aH^V1LL$<ZRH=<m)0%ms83Ot<>>0M;`Q<$ zMtsy_xY#)=IwYllz42j3dN3kg;r<aeRxXZm328&0H)s47-s4=dl5o;l+2}H*@5b4c zD=+QM9qH}cltZH^q%M&+@4Q{9_S+6eC<I1otYxEAk*`Zhx}%IbE>|v&IwL1!j-;^F z*3!JWO_!+a-wnI-Q_aU%__vPA#)|Q9R>}&MwRkjNaW!?5qehvVoc8EEAsm@vPixOq zgvlZ0?r3bWTN)mQ#M@r1SvjWx&a(iCPk~8C-GuV5$6;7VO|%_4UvrxO2G^9&*4I-@ zS{(%qtx9hrjg-vyp1YuSHU8~6^E!d_o@LFm4sJA?<=|0ye9<YRTFv{RS}$vpid3yH zg6(-`WORPU@v*7v%`U(4ar|k?+>^=kO<XfM={$4uB^PuXjy{nxG^>Dy3>6Z^GwaDa z7*D)SRVxq%!goEpGVA3_aS9n*6ppW#aVdnGpv^FoDR<xz$cVz6NELVp^wvzXyxd3D zYi-`u3#p4Y+-cY^ul~eY7S8NABoCkaS9SIAUFL3oMU^>uu<`a6;+97cRVJnMiRBk! z2SxEnl(}YNFT2+7z`UJ3y-)Ad=_v18H(pVpq&*Fv3uRYZroj{T%(cFIDM@VD1T`qT zI8foRHaA#};Pz}uquL9a>H}@9^QZF<hIjYwy?%e;cbB~B&sNPD8|HK3^2^n5`bspI zfZ}Rt!m8n>69rBagK>bzJLR;Fq(&)9WS5=F>3V5RPs2huj4GQvOR-2g2#yvq+)bs} z7OEGIA4_=foh*u_v*N~RC94(hiW{X!b$29q_vQV{@-JF?L}x6tW9@b6R=>Ob#)2&& zF)GLBnqHmMU1exnrKaH-Sr-*v{8NBCW6Fgem#v)Yrfc&|cadvmWX;G29E;13w5!xC zUf9;*rhaprBE@^58yv+eV+J>jLMt#mqd_5jq%}il(r&_;Fbx?yOK8frLtVX|x`av@ zR!_Y)+1l=GeMWrC*$y|~=;e7AK2@H=_qWZCt(a5Mm-nepB`j!7aP1AL6?+Y<b%rad z5JQL#=`?tN3zNuHmGjJW)xmdX;XH@VCv6Ud-=ncnPEY){+GX5}t%L)4;5#o{c|n0t zb*)grLZ#A^nml2<a5b*Xb{bDzii&isXhFF!Pm|o(Dt%xdGX*8eFhQi#b$6KiCVk9* z^O^mbqAa^qCHj?@G<43kSSE+Cg+pB&31Ut|rVk~_B=i!6%~r5;cL%d11-H$@0AIDt zg5a%Svqvdi&lJLgW&#FA5l<$TRjD)_lCnE~12;3V)T$CrU7gtOv43~Kd*_8)X`3(I z_P(v1GJnpnVF%0i-!0-Kn8<FWo^jEordXvkMK+&E-PEUXvfKMY*DBA(x_wIzH(Rma z+}92*I5p?wP?t$}C=&`36YP9!YfJN$o=?B8S1-7?@XFkr>wV2udzcPem{G%vv^<n; zzc0%ne#>*z8S3m70Nc3wo22>F*SCTNA#a4SWxXRj-D!Xi(KB>n^hUNes%0kG@70Tw z*UJe_FP2}rMPu6~8?UoFDCdUocs0jXMLqpcFXLXeM0Kdf-4yx2H+^ObZ?5Lm{L$6& zd&x~(1-9s^QBARqT5;jdf+07B(UuKx<Gd@+iK4JBZU6UP-cfz;;C0#F&*Oj5a2T1{ zPMvdDmGi{Zd+u9!s0Lre7RVejoUm@m^YmIX!EP#8L93(s@PH!oHKoW$XM_PI(ouVy zUGdDDxjBsQ@Hj2D0<Na#cALPWR#B{?;6ZC>Xipmo=jFjjP(q7g$?z&K;5)BeNO+Z( z2MIx0b%j(H*<#IdhKes?R%y5^Eg=b&6&{8}f;m5sFq=i+LQgOfzPDLsoZj~81*Mcx z)_3vriN+;IQ@l+amu^0OSIR0oqlY17VbPhZX;e`iabIn1=vkH1bh^eb-RJf?uz&fy zFW>{;Yi{XdzYeVli&{oY**qT-nVuyd3HxYA?J+9K?v5s+H6EVe<ax#@D-5@ts5i1x zBf_eI*nMQJ`ot$z`NfoxA8Kl6t=#d2_{?zARdkifcyRUuyd|ohuQtwk{~C?6*5#Aw zE)yp|xIZiQhN_Orde}Dzig*1Smm8EZ6DFgf)Chg6@ndK0kt)xuG~8`6Q|Q$MkHKZD z^{tB4I-6miprg`Gb%o_gHRy?H?55SR<jmT4?$YB&e%X8S6w3sU-UYsjg|WGDQz4o% zLh)SFDBcLT<*^ic(9(spsU8g2^hT)_>14vh(kHA`3W76A%_BYNf9%3#B0-2p-6_aT zQK<mq<h)SHivmX<<GFWoU_YR>l@$IHie<gDZ!$5*#SV5suzB!+hm7zbw0g=EeG@pp ziHNk7i&#v}nli3EJU+@|V%oT0Pt{-49<lZ+oaS0~!zb)~>btt-CpuIw{uInEU88yb zSw!o&@E4m(-?Hb2Oi?YrJaZ%U^W)^L8rIxU^_CswQAH_^S<?hoTjG{DN4nb%v8a|8 zE@ae7T^csyo%7-^#8x*V%B+GWHFL*>gCBlN_@$THeCFr(?|M(J5$u}g(dBc(!d&h0 z+kzp<Hxky^J#B(_il3)GciXear106QoM^*y1=7N)&+W{JOq!6Qz=nNXk}uwRxPaoi zu$z3Oqdqn$y9*WSV2ePbx_~W0+iX^EQ8Jc8sARqfhIM3J$E50dc%O4L3<oLuE9Y)& zi$-KK%$55CLqela-G0&FjdX;gLz3#9D4{cbWMB@$T(}hb<?cVYdI%J`halvZMuZUH zA|g<fkH-pT@xYe^i%;lFgTDdrAi?6X>0$gIn5^g@AT^A|5U``!f|$UmCdS}fLO^iB znJh?;2&2cact7w3^sr?tULZ3(Eaa;QWM+mDZ-A$RCq04|9xiYUV{uqq0YT`2BZ^@5 zia@$Rz+(qR30QgrlNG_@GWkAq#xi;c%asZF_yiYfa^*q|(7xGp0iECk204WDnBiPL zoQTd23S%L~l`o=!GYp8*#2sRKviPCCTzUjQG#q&GpaH%tvNz#eUlw$O9^p@it^yZ6 z5zXcYvBRL3#PV=n7?YUFWY9S*9-R*j3#Lbf2}DtXEnsn+*ibJpT|Si=!ecWD4EPar z2G-Aq`gq|2x_}+drE^32Gm_a@Otv7L7tP}FA&n5lf}+?^8Jmytpa&6LsFRq@5zFas zN9lhUUL4(j$U->G=CHiJ6{#r!O%kwHc(6l41<(bba6TJb4>I|RPRbug@+%?o2T7F7 zF__?m-C=}67eT{FEf5Qwlz*T@XgHg}a^{6cML=!+W8oJQ!SbQ=peQKf*JR}PC&iy0 z7Bwg;N^~Igf*eWD5FQcAW`ZU;h0#Mq%JgSxKRPdjC2(iO@CgBr&gJ9m@CautV=)Op z8LU82(f)Dr=7z-(Fh-)O;yPQTnX?H#gO1umjx?VL=dnZBqK?iZwFm}qE+5nx`$V7` zGwD3w&t4G~;m8$$wuu_eWvvj*W&tZ;40?}q4U{MX#LouijBqX&=O7FTDPbN9CZ11N zR0tV!1g&xgxj2NusQW-EKEdYk=u9@wnLtK(SU4|`Y$ZV@!f=RDsUo9bjst5BeMR5^ zk;mePhecsMgb5Ku2T6$10^!pN)`~#LOPEfZ{&y+R=ZI*&06R%FAq1pkx#ZYmqezUL zRWM1Gb3wmZ*m@5(UjUPf&)~5mMEVv1RFo9VIhgAr3=8u~)xp_JMDba6d~XILEQ-nE z5fPy=d^Usc$^}iKGX#9c6=cF+==0cu(7zDv_+k>NfH1nyO`aV`ASU~v(tt={hWA(G z%jQIcv4hzRa(X-Rc;N$W_&UiOrVbbduujlua+vx#kc!Z6Q3#lA0tXx*g3kft6bh5i zjx-reHXp5$Zz!D^z8owU*)qRyho~SHj2^U`$6|zYBEW8vg9o}21VX|gBjad?g6T}i zy8<`~L^up0DR2>M7Z$3*Y%n}wbcV<%i)vX8qGHB?)Y%NQiL8E!l6*ySVn8dv3V7l8 zqCxQq4~q#2=aR$2j|yVKT7d?R>~%0OClMAiM1&y4pR_9^U1VZNbYS6u_KHfmLX&Y_ z!nh+a5XX_(pF9Rrk<s9|6O<er_kxKwIPM)0f!6M;JR;8GTz@w3Ys%pEd?N+lZ-l@X z@K|&XsM4Qw4^}j+px=rQTW<$*H-_M|SF-*t)t6*NfVCDx@mRiSd@N1K*)o{BJsSiE zI=}>ezOWRrMD|bA75k`Quwr28NF65lpe0~&7|=V`ih&q8xPxmMFkW`z6?<?NyA^Ey zTxdvt2{Jl3;{SD;|G*{#8p>J$iQ=&*<3uo;YoL<914fJNtv#ELDPo&7K*QP?;jl9h z)kLCTqro3m7*IqA7$$BAm{-gq!U!K0Pc+;f{fi%@{e?!5Isz&UiDHzrNFoyst2dZk z28$WRqlfjALfHZ@vT~>ij7S(rJIt80!hC|N4S)Tl{&mAd8~*x9{c8vqIvk@g@8DoQ z>{TM@Fg*nzd^#f(w@{??MMN%6L^d}#JW#YD3xsus2a`TL1Qrg__6nB{&>U_Em_eY6 z%sOhwU#vV5>6{=oR3TbBh;THvIH3bsD<Z<VkU&t4VQiwp!eRo+L?$d0!DxRW6S<=N zSp-cEu0sTMI+PJJ9!LkJ<%))q%?*OJGgQE3@%hA5Q-Z%NrayO3cofONY=$;f1en;b zX{1O8#X*M4VJjNS;(%ofg~d9M%?}I$6SoXAfw^UIVY<WoS{6gDjIf|h)9we@(V@9z z(19r|1Otm9H0JLUsQ;8;@^yk(2&RMy2;nPc;-qg_iOHb3QJnq;fmm>x5fuhI2sR8k zEO{{MOg1b90#b&=U|eL($&C$&g3pd-^{*oQ2o?i*^hcTO;9yWSLL_C8I7x0HxG95$ zh7I}%0_*1&j>ex{g19U?j}gX>0G;E)9*@o!h&l$#(4PY-k}->miy2ciX#-i@Xf`jL zOWp@e`EyG`RviSh8@fR*erzs`Wn>hc+>?v#Lpazla$P0c2+G<&TSU$K%aG#GiuvJ6 z3>$jbpNZ675H8y2!)n#9#XQ)J2*4*^2rC@K%ZmYJVuqoi2I(+kNP&P6Uj~~U*t4)e zlVHmayLMRR`<pD5z;w|a(tmcJgd0Abx?qb52Vb~RU@;wFnDGuod?$iaEE=|nNc}nw zG&Ot~+?h=jd%}ZXmFV4Nb5x!?|FY=fo`-j6obQ2#uJXDU{JPDUX5x5M<0n6-4QnIE z15E>9itiiWu!>^uqj%|fx_V}j+Cann$E18Ok7HYTC&^f~ln#~G)9a@@MJxOmO%HH5 z9yzzcvvFSCq<;FD&SwT2!p1rk{t!F9BiVS<^nUuCvnzShw5uMc5*O>MJy^fTx}Uy| zm$2=H%_pZ#L6uVR>*k#E=%;5c<iw09|J8P1)A@Af8Y8_q{dDV#U2h+pj`iH5J%7~! z^~w`rKo0=8xqSlXveFRegjTadn?^`qUEQBQ`eKOX#_%KV70UWaOP7TmitDG3;Jlq4 zy4-$tneU;quipN!Isxd30M0Wijlyf|><->OAY1XECl2XJ06XXCH^ncKciQ^>gpjMU z*3*!l0<e)mq2K$$_fFfdHrr~RP9@UQ0KQn(?LVK8H@mo8dPnLQnibMF1L(*WC}u2Q z;eF&_4o_2l6c_2400yrwf44=Quq{2Kmh7Rm$vO^bDF2MM;Tfum#?Fb?GQR6Gdo@|i z=Sk5E&qj{r?86Ba#*|5OEX4VB&%39#869;kSv4*5-mQiV%%26Yq>}F2W6|ogY2xgv z(^F=fBRw0yKT&u1#*xh)Wy4e#yiQuIg!CMMfEyQn-<CPedqZ^kw8r?FKBVUYnC9Hf z8>czVW&PAIQOn-FG>roqwo}(^)s7Hfnr&vv=B#TQP00K^fbNvEHzt+$*7NuXN}!yc z-l2m2{Ew|BpR=0&$vtuId1b2=PxgxS!F1(sHqtd?UANpk9A^7NU5{8FREi^y$SMTb zm$)XbKXTL5L(FIIiM3^4Mi2MiIPK@}uK0Qn5%XF0c&y#;V+>s5j=jyk!&q7)=A%5{ z(9Ue>80P|Elk?k3PNJC4?op}LU!H!n-`6#K)dN$um6#8G_|NY?6lT~R5VlSpWf4t? z`KWz)IO^_1S%*{4UjDc#>8{4h{(cRMD&FO_jPOo%lfLuwsNd&y_tR(XRQP_#(I@Wv zYRrC{xjlXD7@(^H$Py|LN_!X(1d^oFK$xSEE~Si7B?v|V$Ph%FJw{}uMnWiuA|C-D z1?7n0i0DHw43QxaC?X;U!B9lN{UxD*2ylUK%0LML;2AsCj+tcP4~WQ98US-4Hxd~K zzY;H@5-*|u?EX~ZB~;=iRN^I6;w4n#B~;=iRN^I6;w4n#B@|u-mv{-4cnOtw36*#W zm3Rr2cnOtw36*#Wm3Rr2cnOtw36*#Wm3Rr2cnOtw36*#Wm3Rr2cnOtw36*#Wm3Rr2 zcnOtw36*#Wm3Rr2cnOtw36*#Wm3Rr2cnOtw36*#Woh<PZD)AC3@e(TW5-RZ$D)AC3 z@e(TW5-RZ$D)AC3@e(TW5-RZ$D)AC3@e(TW5-RZ$+9>f7D)AC3@e(TW5-RZ$D)AC3 z@e(TW5-RZ$D)AC3@e(TW5-RZ$D)AC3@e(TW5-RZ$D)AC3@e(TW5-RZ$D)AC3@e(TW z5-RZ$D)AC3@e&H2@FZSBC0;@$UP2{aLM2{8C0;@$UP2{aLM2{8|G)DRst#@)<i<jv z2JnC4`4c@!XaN{v4IUmIMszye$j!~oh{<Fc`S|!4Euk+l^7r>Q@}K8#6c7+#WNT|{ z6c`w2WNvOwrcIqX)rjUxGg=g|$jHLN!f4^5g+_jUen#`>&o^4Uc(IYs93L`{Wi_D= z^gu(ptk8vD(!<3BKuAv+7?b(}7kay(0Fdr248;ig%^@l1OoK!)AX%V~jcEYrP-EaS z0}Op`3|vzIgB)=-VlV{)3IMz=5(K*KAg_UjnLt#Q_<;<K$#4pUWX%Jun+z1P2}Xcm zPY84f^1p416qNmIThQ$XdI&)$KsZ)d&A(~eEXXH?9z|vXkd3rL3c41t1R#5E0f?;B z3<%}SA;8>j7;%Td6%lNbGa@b!I3eNy!E8hvA+Q%y>=3bq0HiBIu-QHUq`<rZA;se* zMm)tyDDQ6s7U%FU2M_x|3haiVKau0(m-rtI-ZCgnc5tZ}VFMydgpy$h83scr0}6AN zB|->-iF7Fj83vId9YbOXgpgC)J`fNE)Z-rkky{J_x;~OZ<y-_HODu#CauURR0J#Ma z%ma}A0)anLQ08;Rh@Tko6(cl2WJ!NBKLIuY#|)j);JBjyD4YzaE=WhEMn5&H0LYB+ zOF9BV!C@0{kmLZ+%?vVF2`~X|0bbY+1WZK0LKq)h5DQ}*0U2OEq#<LB<0byZ@(7p~ z13*@U4Dmt+m^ipFG81<Nz2=|@v3oeJv1{mL2j?65-a!#yS5*PfSr3ZhJAf4cWJQ=D zZV48~$}kgFj7*UcGDNvy#aJ0K#0FvI$c*&i1Ha-5u_ss=HgY+@fatIgUdS9T%!oMB zvBww}ixPjuy%tMBOcRR?vJ8kW8t{RNFaa|oh%+M-1gr!BnImAY5KsyT*i!^-Jp%R^ z0eg!O1wdAWUBrS|35p1rqd2fa6bXt0MT$(2F&4)0z{-)KSS<l1#Vi&p4hc3u05Ab7 zKmv{fG8YdpGUNl08Q^!ItKu$V*LVQ>*gUZpy8p&Cb|mt^RW$+;tTG%CY%muQ>=6eM z>;`r*7T_y^L;U~bS_52lkTcdAkH07sl8OjwDT*H@gCa*sp(s&8KLf}KA=o5FHUfft zhz(+7y%<>s2)WX(1%!gE2_nw=KY@WNlc6YCB_jW}N~8WNajh71;mZ8&^(}31d@zpX zzK#zxF%^=?CL;15Hj!j|7Q;WUxNqW^@-6M(#Rr<04lKwfBJvMSRDh(f25w+NK*C?H z0oECiM6yQYA6Vl|`d_f#B4&-qKd{C*`R`c|=snIsQtz=mnxFs2{vf~q^crXku7_k} z(4L`bLVJcp+@B9LY%4@aK_l{Sr9ly`wQ*ITLI}3~FgPxzi)r7)3AnH<US#<y(eFUq zc2K-O?JxO|-VX#^VtjxvrrGub;$i^WAQ5bX2q^+Y{;dcmi9~>mzMjAkhne>6Od|93 z&%kff#BnhnaU9Fw^_RHKUuk4Mpb!2P#UStB<o{cq{pJ6OhnOFkepbZyTiVxU2efQE z&`A*^@^3|K)URdOtT+I;$gccNGY3QmX=40u^MBLq0e*3q`_Hms9s}v3WYN$Lt{?c} z^*`p1BeVUr{r|SSsQ7>?4Al2+d5Du~|5TsNpY1>l)j-Tk94CLp`OXduA(}LD2=f5> zdI<J%IFI%;umW#A?J<iE&9Bqz2djtvsZmhIjyJ1qcR~r*RM&7~Fh_kb{fJ*MkcL z(cu1Nxt)ak;JPS+I0yKhJqSlS#J{3n5T%oJ#4$hS8H^(zEDI2K0e6hk0B}P-aG3%2 z)!H}}2$17XIhq1NS_T3tfRfkJS<bOTjTY!aL<ivCKZwwT%wIo<&;ZIVfI$t4v)Ks* zS@K504KTT1AaF$lC&Yd+vQLccMFe}f2ays8c8ifBM2aCOL<Eb=0{8&v0}$Q-6A<wd zBc6beNq-}#Ht_?AEPH}510cZD_umN$>mUWC(7E&kKYGu?|6EWg)~^Mn4U~Tnlrbcc zg1QUHe<LVTJ}3lIK8TR=L1aLNcOW8X3&Cwfsv!6kk;4$&Lc|t=CNa_|Mj8;oA-IVM zGOR}gOWi=k7J}<yq)v=n6C+o}$Q4AeR4pQxA*ey58iGq=<f0h4fCyH4UW}X*BWDq* zg5V4y$gmO-TL?}gf-O9S2qv9C<Rk>g5vhRS7$V5I9Fe0C96<y#mx+->h?GEZ5D{Al z3K2oh2N1D^pj3?fZ?x_LOu+Nn##?O%P0tP3sDIEpIY=S3&d&1Pq}s9v4|IW`gZWJW z{-<Y{vmlR@9t2-&9rE}Gt;6jEsdZg|JO_|_0l@-9o<Z;w5p3=gG17_1VhDai1O@dN zk!A>j#Rv-#EcHl?bcm65G4fE1JV2xkg8PUd!vXah&`bs<*+Os+5zNzy2v*S|Mwp0T zGeX6be>+~%P~dj}X?)W63J@It@`f8NzoOsJVHeDuPh7CQeZc-T5=u%HFYp^HE@Uq` GVE<oLOvp0; literal 0 HcmV?d00001 diff --git a/Maps/rbanhdevmap.vmap.meta b/Maps/rbanhdevmap.vmap.meta new file mode 100644 index 0000000..083bcdf --- /dev/null +++ b/Maps/rbanhdevmap.vmap.meta @@ -0,0 +1,28 @@ +{ + "publish": { + "Allowed": true, + "Enabled": false, + "ProjectConfig": { + "Title": "rbanhdevmap", + "Type": "map", + "Org": "local", + "Ident": "rbanhdevmap", + "Tags": null, + "Schema": 0, + "HasAssets": false, + "AssetsPath": null, + "Resources": null, + "MenuResources": null, + "HasCode": false, + "CodePath": null, + "PackageReferences": [], + "EditorReferences": [ + "sboxmp.stalker_dolg#35122", + "kittito.usfishmongertw#9784" + ], + "Metadata": { + "SingleAssetSource": "maps/rbanhdevmap.vmap" + } + } + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..25cf273 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Shooter Template +Designed as a minimal starting point for your projects in s&box. + +## Features +- First person pawn +- Simple pawn controller +- Simple weapon system + +## Controls +- Regular movement with WASD +- Shoot weapon with LMB \ No newline at end of file diff --git a/code/.vs/project_1/DesignTimeBuild/.dtbcache.v2 b/code/.vs/project_1/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..f6f3c986a3d4843fb2a268c85c3eced6c92609d9 GIT binary patch literal 86946 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 IeakKX4;>9U7XSbN literal 0 HcmV?d00001 diff --git a/code/.vs/project_1/FileContentIndex/f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx b/code/.vs/project_1/FileContentIndex/f8cc6325-60b7-47bb-9394-1a94f2951e42.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..1868686a1fc306c2a46da4347fa0909dda5bb580 GIT binary patch literal 69168 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 literal 0 HcmV?d00001 diff --git a/code/.vs/project_1/FileContentIndex/read.lock b/code/.vs/project_1/FileContentIndex/read.lock new file mode 100644 index 0000000..e69de29 diff --git a/code/.vs/project_1/v17/.futdcache.v2 b/code/.vs/project_1/v17/.futdcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..279c2511b54e7971002bffaa8b6de6b89f4447d4 GIT binary patch literal 115 zcmZQ%U|=wEvx*5;OUkcM2q?<WN=+^)jwvol)-47J8O9{%r=-RdKqTS~^^%K0Y$l*K wUg!M0w9NF<qQsKS{5)2d)TGjMj)0uRlC=DyTsFtNO6P#kJD;ZV0+pfw08)Y>;Q#;t literal 0 HcmV?d00001 diff --git a/code/.vs/project_1/v17/.suo b/code/.vs/project_1/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..dce9f7f6aa0af4e29ffbbfc17be1960ec78fab35 GIT binary patch literal 6144 zcmeHLO=uHQ5S}!)+EUOW77-7@L-1gt3AReWC`!{5E3GXpLRVz7i8VFtLN?J@<4M%B zC$IG;2vQO8qPFN!QL(3Zs;GFdH^GbA_|0ZtyGhgLuLub{VRzn}nZB7fZ)V<XKfLc) zy#IL5XDR?c*=af3N-ZY3%`~PRr1O}zoXuvL#bXRDs3Q*yk&0h}9MnToz;U|9M_D#> zQuE50H<$RUnT3Ow_kGIP+8{UIloK9=MwKS0585wc)I+HftK_pgsmW$`cRsiHjP)aY zbr_%|b{(TA^z$=L!<fr>A~Z@K>ZT)juMhhT{hTLk$NG}_oIA#Jm=yeSUbq4a!q6Kh zH>^-$726iYXbO~mU>W>Vz)4UN`U-wS{}#;3)o+LFHbehb;J;=E8e`6Bei#_H8tdx> z>(wwG_^<gNa_RZ6$KK}U|4RMgLovd7L&Pz^iTSVVuh;w+fy}j=>wr1$nI~$1kh5@O zd4PL1PDOF<90y`-oqc1Sb+O%4(tpULq3bw_{zOLqq0lA7$_Ye|d0mi70>_mQIzvM= zg6^}h-*Hd?olgwikS0WnVki0^5yNapQK14N_ewE?HinKf3{44iRdG5GOZu@p-Y0j& zIS$iQ?3cU3TsOA5;8COh;-0Ep{d`yKU0tH)5$hFD>0-inBInKd&-XO<eS#-+Sh#UK zVCBEa^6K-S`^jqaznt$+?*>VY@6U?sFWY<9SaT>qK9W#=ofJZmOQGzEPx1&#UIL|1 z(#xSjE?^<$0abxKf38Z@i_$oWksCCPzCL}Ww4^dWp831}C`)f=g1ZMEed!x~{%vG- z>FT{V{j9k#fedRZM_j)c=HBgk(0%&FTy9qWo9}_`y0{G+Aqx1UVP{B9IR@kEL_|qw zl9o_h8k0PdqJ|?<uRIxXD_Z*cAp=~D3tobEBkk=z;O$BW<d_yIW)<H9tiK&kGAad= zVRu}fR^xWsSxkHlZ8o{|b1s<iR=a=w{F1oVBnsl+3SpcfU+>fUb(mgM`W9|RAHKdd y{=H-L!V|@J?C{6iFWcwa&K>_fcJ>!rQ{ze2Z2uaMScFPEVC8>(=f6~A{r(3qK8$q$ literal 0 HcmV?d00001 diff --git a/code/Game.cs b/code/Game.cs new file mode 100644 index 0000000..b35b98d --- /dev/null +++ b/code/Game.cs @@ -0,0 +1,59 @@ + +using Sandbox; +using System; +using System.Linq; + +// +// You don't need to put things in a namespace, but it doesn't hurt. +// +namespace MyGame; + +/// <summary> +/// This is your game class. This is an entity that is created serverside when +/// the game starts, and is replicated to the client. +/// +/// You can use this to create things like HUDs and declare which player class +/// to use for spawned players. +/// </summary> +public partial class MyGame : Sandbox.GameManager +{ + /// <summary> + /// Called when the game is created (on both the server and client) + /// </summary> + public MyGame() + { + if ( Game.IsClient ) + { + Game.RootPanel = new Hud(); + } + } + + /// <summary> + /// A client has joined the server. Make them a pawn to play with + /// </summary> + public override void ClientJoined( IClient client ) + { + base.ClientJoined( client ); + + // Create a pawn for this client to play with + var pawn = new Pawn(); + client.Pawn = pawn; + pawn.Respawn(); + pawn.DressFromClient( client ); + + // Get all of the spawnpoints + var spawnpoints = Entity.All.OfType<SpawnPoint>(); + + // chose a random one + var randomSpawnPoint = spawnpoints.OrderBy( x => Guid.NewGuid() ).FirstOrDefault(); + + // if it exists, place the pawn there + if ( randomSpawnPoint != null ) + { + var tx = randomSpawnPoint.Transform; + tx.Position = tx.Position + Vector3.Up * 50.0f; // raise it up + pawn.Transform = tx; + } + } +} + diff --git a/code/pawn/Pawn.cs b/code/pawn/Pawn.cs new file mode 100644 index 0000000..9d7b89d --- /dev/null +++ b/code/pawn/Pawn.cs @@ -0,0 +1,194 @@ +using Sandbox; +using System.ComponentModel; + +namespace MyGame; + +public partial class Pawn : AnimatedEntity +{ + [Net, Predicted] + public Weapon ActiveWeapon { get; set; } + + [ClientInput] + public Vector3 InputDirection { get; set; } + + [ClientInput] + public Angles ViewAngles { get; set; } + + /// <summary> + /// Position a player should be looking from in world space. + /// </summary> + [Browsable( false )] + public Vector3 EyePosition + { + get => Transform.PointToWorld( EyeLocalPosition ); + set => EyeLocalPosition = Transform.PointToLocal( value ); + } + + /// <summary> + /// Position a player should be looking from in local to the entity coordinates. + /// </summary> + [Net, Predicted, Browsable( false )] + public Vector3 EyeLocalPosition { get; set; } + + /// <summary> + /// Rotation of the entity's "eyes", i.e. rotation for the camera when this entity is used as the view entity. + /// </summary> + [Browsable( false )] + public Rotation EyeRotation + { + get => Transform.RotationToWorld( EyeLocalRotation ); + set => EyeLocalRotation = Transform.RotationToLocal( value ); + } + + /// <summary> + /// Rotation of the entity's "eyes", i.e. rotation for the camera when this entity is used as the view entity. In local to the entity coordinates. + /// </summary> + [Net, Predicted, Browsable( false )] + public Rotation EyeLocalRotation { get; set; } + + public BBox Hull + { + get => new + ( + new Vector3( -16, -16, 0 ), + new Vector3( 16, 16, 64 ) + ); + } + + [BindComponent] public PawnController Controller { get; } + [BindComponent] public PawnAnimator Animator { get; } + + public override Ray AimRay => new Ray( EyePosition, EyeRotation.Forward ); + + /// <summary> + /// Called when the entity is first created + /// </summary> + public override void Spawn() + { + SetModel( "models/citizen/citizen.vmdl" ); + + EnableDrawing = true; + EnableHideInFirstPerson = true; + EnableShadowInFirstPerson = true; + } + + public void SetActiveWeapon( Weapon weapon ) + { + ActiveWeapon?.OnHolster(); + ActiveWeapon = weapon; + ActiveWeapon.OnEquip( this ); + } + + public void Respawn() + { + Components.Create<PawnController>(); + Components.Create<PawnAnimator>(); + + SetActiveWeapon( new Pistol() ); + } + + public void DressFromClient( IClient cl ) + { + var c = new ClothingContainer(); + c.LoadFromClient( cl ); + c.DressEntity( this ); + } + + public override void Simulate( IClient cl ) + { + SimulateRotation(); + Controller?.Simulate( cl ); + Animator?.Simulate(); + ActiveWeapon?.Simulate( cl ); + EyeLocalPosition = Vector3.Up * (64f * Scale); + } + + public override void BuildInput() + { + InputDirection = Input.AnalogMove; + + if ( Input.StopProcessing ) + return; + + var look = Input.AnalogLook; + + if ( ViewAngles.pitch > 90f || ViewAngles.pitch < -90f ) + { + look = look.WithYaw( look.yaw * -1f ); + } + + var viewAngles = ViewAngles; + viewAngles += look; + viewAngles.pitch = viewAngles.pitch.Clamp( -89f, 89f ); + viewAngles.roll = 0f; + ViewAngles = viewAngles.Normal; + } + + bool IsThirdPerson { get; set; } = false; + + public override void FrameSimulate( IClient cl ) + { + SimulateRotation(); + + Camera.Rotation = ViewAngles.ToRotation(); + Camera.FieldOfView = Screen.CreateVerticalFieldOfView( Game.Preferences.FieldOfView ); + + if ( Input.Pressed( "view" ) ) + { + IsThirdPerson = !IsThirdPerson; + } + + if ( IsThirdPerson ) + { + Vector3 targetPos; + var pos = Position + Vector3.Up * 64; + var rot = Camera.Rotation * Rotation.FromAxis( Vector3.Up, -16 ); + + float distance = 80.0f * Scale; + targetPos = pos + rot.Right * ((CollisionBounds.Mins.x + 50) * Scale); + targetPos += rot.Forward * -distance; + + var tr = Trace.Ray( pos, targetPos ) + .WithAnyTags( "solid" ) + .Ignore( this ) + .Radius( 8 ) + .Run(); + + Camera.FirstPersonViewer = null; + Camera.Position = tr.EndPosition; + } + else + { + Camera.FirstPersonViewer = this; + Camera.Position = EyePosition; + } + } + + public TraceResult TraceBBox( Vector3 start, Vector3 end, float liftFeet = 0.0f ) + { + return TraceBBox( start, end, Hull.Mins, Hull.Maxs, liftFeet ); + } + + public TraceResult TraceBBox( Vector3 start, Vector3 end, Vector3 mins, Vector3 maxs, float liftFeet = 0.0f ) + { + if ( liftFeet > 0 ) + { + start += Vector3.Up * liftFeet; + maxs = maxs.WithZ( maxs.z - liftFeet ); + } + + var tr = Trace.Ray( start, end ) + .Size( mins, maxs ) + .WithAnyTags( "solid", "playerclip", "passbullets" ) + .Ignore( this ) + .Run(); + + return tr; + } + + protected void SimulateRotation() + { + EyeRotation = ViewAngles.ToRotation(); + Rotation = ViewAngles.WithPitch( 0f ).ToRotation(); + } +} diff --git a/code/pawn/PawnAnimator.cs b/code/pawn/PawnAnimator.cs new file mode 100644 index 0000000..d8ed4ff --- /dev/null +++ b/code/pawn/PawnAnimator.cs @@ -0,0 +1,21 @@ +using Sandbox; +using System; + +namespace MyGame; + +public class PawnAnimator : EntityComponent<Pawn>, ISingletonComponent +{ + public void Simulate() + { + var helper = new CitizenAnimationHelper( Entity ); + helper.WithVelocity( Entity.Velocity ); + helper.WithLookAt( Entity.EyePosition + Entity.EyeRotation.Forward * 100 ); + helper.HoldType = CitizenAnimationHelper.HoldTypes.None; + helper.IsGrounded = Entity.GroundEntity.IsValid(); + + if ( Entity.Controller.HasEvent( "jump" ) ) + { + helper.TriggerJump(); + } + } +} diff --git a/code/pawn/PawnController.cs b/code/pawn/PawnController.cs new file mode 100644 index 0000000..73bd01b --- /dev/null +++ b/code/pawn/PawnController.cs @@ -0,0 +1,174 @@ +using Sandbox; +using System; +using System.Collections.Generic; + +namespace MyGame; + +public class PawnController : EntityComponent<Pawn> +{ + public int StepSize => 24; + public int GroundAngle => 45; + public int JumpSpeed => 300; + public float Gravity => 800f; + + HashSet<string> ControllerEvents = new( StringComparer.OrdinalIgnoreCase ); + + bool Grounded => Entity.GroundEntity.IsValid(); + + public void Simulate( IClient cl ) + { + ControllerEvents.Clear(); + + var movement = Entity.InputDirection.Normal; + var angles = Entity.ViewAngles.WithPitch( 0 ); + var moveVector = Rotation.From( angles ) * movement * 320f; + var groundEntity = CheckForGround(); + + if ( groundEntity.IsValid() ) + { + if ( !Grounded ) + { + Entity.Velocity = Entity.Velocity.WithZ( 0 ); + AddEvent( "grounded" ); + } + + Entity.Velocity = Accelerate( Entity.Velocity, moveVector.Normal, moveVector.Length, 200.0f * ( Input.Down( "run" ) ? 2.5f : 1f ), 7.5f ); + Entity.Velocity = ApplyFriction( Entity.Velocity, 4.0f ); + } + else + { + Entity.Velocity = Accelerate( Entity.Velocity, moveVector.Normal, moveVector.Length, 100, 20f ); + Entity.Velocity += Vector3.Down * Gravity * Time.Delta; + } + + if ( Input.Pressed( "jump" ) ) + { + DoJump(); + } + + var mh = new MoveHelper( Entity.Position, Entity.Velocity ); + mh.Trace = mh.Trace.Size( Entity.Hull ).Ignore( Entity ); + + if ( mh.TryMoveWithStep( Time.Delta, StepSize ) > 0 ) + { + if ( Grounded ) + { + mh.Position = StayOnGround( mh.Position ); + } + Entity.Position = mh.Position; + Entity.Velocity = mh.Velocity; + } + + Entity.GroundEntity = groundEntity; + } + + void DoJump() + { + if ( Grounded ) + { + Entity.Velocity = ApplyJump( Entity.Velocity, "jump" ); + } + } + + Entity CheckForGround() + { + if ( Entity.Velocity.z > 100f ) + return null; + + var trace = Entity.TraceBBox( Entity.Position, Entity.Position + Vector3.Down, 2f ); + + if ( !trace.Hit ) + return null; + + if ( trace.Normal.Angle( Vector3.Up ) > GroundAngle ) + return null; + + return trace.Entity; + } + + Vector3 ApplyFriction( Vector3 input, float frictionAmount ) + { + float StopSpeed = 100.0f; + + var speed = input.Length; + if ( speed < 0.1f ) return input; + + // Bleed off some speed, but if we have less than the bleed + // threshold, bleed the threshold amount. + float control = (speed < StopSpeed) ? StopSpeed : speed; + + // Add the amount to the drop amount. + var drop = control * Time.Delta * frictionAmount; + + // scale the velocity + float newspeed = speed - drop; + if ( newspeed < 0 ) newspeed = 0; + if ( newspeed == speed ) return input; + + newspeed /= speed; + input *= newspeed; + + return input; + } + + Vector3 Accelerate( Vector3 input, Vector3 wishdir, float wishspeed, float speedLimit, float acceleration ) + { + if ( speedLimit > 0 && wishspeed > speedLimit ) + wishspeed = speedLimit; + + var currentspeed = input.Dot( wishdir ); + var addspeed = wishspeed - currentspeed; + + if ( addspeed <= 0 ) + return input; + + var accelspeed = acceleration * Time.Delta * wishspeed; + + if ( accelspeed > addspeed ) + accelspeed = addspeed; + + input += wishdir * accelspeed; + + return input; + } + + Vector3 ApplyJump( Vector3 input, string jumpType ) + { + AddEvent( jumpType ); + + return input + Vector3.Up * JumpSpeed; + } + + Vector3 StayOnGround( Vector3 position ) + { + var start = position + Vector3.Up * 2; + var end = position + Vector3.Down * StepSize; + + // See how far up we can go without getting stuck + var trace = Entity.TraceBBox( position, start ); + start = trace.EndPosition; + + // Now trace down from a known safe position + trace = Entity.TraceBBox( start, end ); + + if ( trace.Fraction <= 0 ) return position; + if ( trace.Fraction >= 1 ) return position; + if ( trace.StartedSolid ) return position; + if ( Vector3.GetAngle( Vector3.Up, trace.Normal ) > GroundAngle ) return position; + + return trace.EndPosition; + } + + public bool HasEvent( string eventName ) + { + return ControllerEvents.Contains( eventName ); + } + + void AddEvent( string eventName ) + { + if ( HasEvent( eventName ) ) + return; + + ControllerEvents.Add( eventName ); + } +} diff --git a/code/ui/Hud.razor b/code/ui/Hud.razor new file mode 100644 index 0000000..211327f --- /dev/null +++ b/code/ui/Hud.razor @@ -0,0 +1,20 @@ +@using Sandbox; +@using Sandbox.UI; + +@namespace MyGame +@inherits RootPanel +@attribute [StyleSheet] + +<root> + <ChatBox/> + <VoiceList/> + + <div class="header"> + <label>Shooter Game</label> + <label class="subtitle">A template to kick start the production of your own games.</label> + </div> +</root> + +@code +{ +} \ No newline at end of file diff --git a/code/ui/Hud.razor.scss b/code/ui/Hud.razor.scss new file mode 100644 index 0000000..62f8300 --- /dev/null +++ b/code/ui/Hud.razor.scss @@ -0,0 +1,21 @@ +Hud +{ + .header + { + left: 128px; + top: 128px; + flex-direction: column; + + label + { + font-family: Roboto; + color: white; + font-size: 32px; + + &.subtitle + { + font-size: 16px; + } + } + } +} diff --git a/code/ui/mainmenu/ActiveLobby.razor b/code/ui/mainmenu/ActiveLobby.razor new file mode 100644 index 0000000..5807256 --- /dev/null +++ b/code/ui/mainmenu/ActiveLobby.razor @@ -0,0 +1,118 @@ +@using Sandbox; +@using System; +@using System.Linq; +@using System.Threading.Tasks; +@using Sandbox.Menu; +@using Sandbox.UI; + +<root> + <label class="game-title"> + @Game.Menu.Package.Title + </label> + + @if ( Lobby == null ) + { + <div class="controls"> + <a class="button">Loading...</a> + + <a class="button" href="/lobby/list">Return</a> + </div> + } + else + { + + <div class="controls"> + <div class="col"> + <label>Members (@Lobby.MemberCount/@Lobby.MaxMembers)</label> + + <div class="span"> + @foreach (var member in Lobby.Members) + { + <img class="avatar" src="avatar:@member.Id" tooltip="@member.Name" /> + } + </div> + </div> + + @if ( Lobby.Owner.IsMe ) + { + <div class="span"> + @if ( MaxPlayersSupported > 1 ) + { + <FormGroup class="form-group"> + <Label>Maximum Players</Label> + <Control> + <SliderControl ShowRange=@true Min=@(1f) Max=@MaxPlayersSupported Value:bind=@Game.Menu.Lobby.MaxMembers /> + </Control> + </FormGroup> + } + + <FormGroup class="form-group"> + <Label>Map</Label> + <Control> + <SlimPackageCard OnLaunch=@OnMapClicked Package=@MapPackage /> + </Control> + </FormGroup> + </div> + } + + <div class="spacer" /> + + + <a class="button" @onclick=@LeaveLobby>Leave Lobby</a> + + <a class="button" @onclick=@Start>Start</a> + + <a class="button" href="/lobby/list">Return</a> + </div> + } +</root> + +@code +{ + Friend Owner => Lobby.Owner; + ILobby Lobby => Game.Menu.Lobby; + + int MaxPlayersSupported { get; set; } = 1; + Package MapPackage { get; set; } + + void OnMapClicked() + { + Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected ); + StateHasChanged(); + } + + void OnMapSelected( Package map ) + { + MapPackage = map; + Game.Menu.Lobby.Map = map.FullIdent; + + StateHasChanged(); + } + + public void LeaveLobby() + { + Lobby?.Leave(); + + this.Navigate( "/lobby/list" ); + } + + async Task Start() + { + await Game.Menu.StartServerAsync( Game.Menu.Lobby.MaxMembers, $"{Game.Menu.Lobby.Owner.Name}'s game", Game.Menu.Lobby.Map ); + } + + async void FetchPackage() + { + MapPackage = await Package.FetchAsync( Game.Menu.Lobby?.Map ?? "facepunch.square", true ); + } + + protected override void OnAfterTreeRender( bool firstTime ) + { + FetchPackage(); + } + + protected override void OnParametersSet() + { + MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 ); + } +} \ No newline at end of file diff --git a/code/ui/mainmenu/FrontPage.razor b/code/ui/mainmenu/FrontPage.razor new file mode 100644 index 0000000..30237db --- /dev/null +++ b/code/ui/mainmenu/FrontPage.razor @@ -0,0 +1,39 @@ +@using Sandbox; +@using System.Linq; +@using System.Threading.Tasks; +@using Sandbox.Menu; +@using Sandbox.UI; + +<root> + <div class="game-title"> + @Game.Menu.Package.Title + </div> + + <div class="controls"> + @if (Game.InGame) + { + <a class="button" onclick=@LeaveGame>Leave</a> + } + else + { + <a class="button" href="/setup">Play</a> + + <a class="button" href="/lobby/list">Lobbies</a> + + @if ( Game.Menu.Package.SupportsSavedGames && Game.Menu.SavedGames.Any()) + { + <a class="button" href="/setup/save">Load Save</a> + } + } + + <a class="button" @onclick=@Game.Menu.Close>Quit</a> + </div> +</root> + +@code +{ + void LeaveGame() + { + Game.Menu.LeaveServer( "Leaving" ); + } +} \ No newline at end of file diff --git a/code/ui/mainmenu/LoadingScreen.razor b/code/ui/mainmenu/LoadingScreen.razor new file mode 100644 index 0000000..2a66ced --- /dev/null +++ b/code/ui/mainmenu/LoadingScreen.razor @@ -0,0 +1,30 @@ +@using Sandbox; +@using Sandbox.UI; +@using System.Linq; +@using System.Threading.Tasks; +@using Sandbox.Menu; + +@inherits RootPanel +@implements Sandbox.Menu.ILoadingScreenPanel +@attribute [StyleSheet] + +<root style="flex-direction: column;"> + <div class="background" /> + + <div style="flex-grow: 1;" /> + + <div class="controls" style="flex-direction: row; justify-content: center;"> + <a class="button">@( Progress.Title ?? "Loading..." )</a> + </div> +</root> + +@code +{ + public LoadingProgress Progress; + + public void OnLoadingProgress( LoadingProgress progress ) + { + Progress = progress; + StateHasChanged(); + } +} diff --git a/code/ui/mainmenu/LoadingScreen.razor.scss b/code/ui/mainmenu/LoadingScreen.razor.scss new file mode 100644 index 0000000..6c5893a --- /dev/null +++ b/code/ui/mainmenu/LoadingScreen.razor.scss @@ -0,0 +1,50 @@ + +LoadingScreen +{ + background-color: #262934; + padding: 128px 128px; + opacity: 1; + flex-direction: column; + font-size: 25px; + width: 100%; + height: 100%; + position: absolute; + transition: all 0.3s ease-out; + color: rgba( white, 0.8 ); + + .background + { + position: absolute; + width: 100%; + height: 100%; + background-image: url( https://files.facepunch.com/tony/1b1311b1/boxes.webm ); + opacity: 0.2; + background-size: contain; + filter: blur( 20px ); + mask: linear-gradient( 45deg, white, white, black ); + mask-scope: filter; + } + + &:intro + { + opacity: 0; + transform: scaleX( 1.1 ); + } + + .game-title + { + font-family: Roboto; + font-weight: 700; + font-size: 70px; + color: rgba( white, 1 ); + } + + .controls + { + flex-direction: column; + gap: 50px; + align-items: flex-start; + font-family: Roboto; + text-transform: uppercase; + } +} diff --git a/code/ui/mainmenu/LobbyBrowser.razor b/code/ui/mainmenu/LobbyBrowser.razor new file mode 100644 index 0000000..e778e23 --- /dev/null +++ b/code/ui/mainmenu/LobbyBrowser.razor @@ -0,0 +1,64 @@ +@using Sandbox; +@using System; +@using System.Linq; +@using System.Threading.Tasks; +@using Sandbox.Menu; +@using Sandbox.UI; + +<root> + <label class="game-title"> + @Game.Menu.Package.Title + </label> + + <div class="controls"> + <div class="span"> + <label>Showing @Game.Menu.Lobbies.Count() @(Game.Menu.Lobbies.Count() == 1 ? "lobby" : "lobbies")</label> + <i class="with-click" tooltip="Refresh lobbies" @onclick=@Refresh>refresh</i> + </div> + + <div class="scroll"> + @foreach ( var lobby in Game.Menu.Lobbies ) + { + <a class="button" @onclick=@( () => JoinLobby( lobby ) ) >@(lobby.Owner.Name)'s lobby (@lobby.MemberCount/@lobby.MaxMembers)</a> + } + </div> + + <div class="spacer" /> + + <a class="button" @onclick=@CreateLobbyAsync>Create Lobby</a> + <a class="button" href="/">Return</a> + </div> +</root> + +@code +{ + public async void CreateLobbyAsync() + { + await Game.Menu.CreateLobbyAsync( 64, "game", true ); + Game.Menu.Lobby.Map = "facepunch.square"; + this.Navigate( "/lobby/active" ); + } + + public async void JoinLobby( ILobby lobby ) + { + if ( lobby == null ) return; + + // don't exist in two lobbies at once + Game.Menu.Lobby?.Leave(); + + await lobby.JoinAsync(); + this.Navigate( "/lobby/active" ); + } + + public async void Refresh() + { + await Game.Menu.QueryLobbiesAsync( null, 1 ); + + StateHasChanged(); + } + + protected override int BuildHash() + { + return HashCode.Combine( Game.Menu.Lobbies.Count() ); + } +} \ No newline at end of file diff --git a/code/ui/mainmenu/MainMenu.razor b/code/ui/mainmenu/MainMenu.razor new file mode 100644 index 0000000..247e7bc --- /dev/null +++ b/code/ui/mainmenu/MainMenu.razor @@ -0,0 +1,39 @@ +@using System; +@using Sandbox; +@using Sandbox.UI; + +@inherits Sandbox.UI.NavHostPanel +@implements Sandbox.Menu.IGameMenuPanel +@attribute [StyleSheet] + +<root style="flex-direction: column;"> + <div class="background" /> + <div class="navigator-canvas" slot="navigator-canvas" /> +</root> + +@code +{ + public MainMenu() + { + DefaultUrl = "/"; + + AddDestination( "/", typeof( FrontPage ) ); + AddDestination( "/setup", typeof( SetupGame ) ); + + AddDestination( "/lobby/list", typeof( LobbyBrowser ) ); + AddDestination( "/lobby/active", typeof( ActiveLobby ) ); + + BindClass( "ingame", () => Game.InGame ); + } + + [GameEvent.Menu.ServerJoined] + public void OnServerJoined() => Navigate( "/" ); + + [GameEvent.Menu.ServerLeave] + public void OnServerLeave() => Navigate ("/" ); + + protected override int BuildHash() + { + return HashCode.Combine( Game.InGame, Game.Menu.Lobby, Game.Menu.Lobby?.Map ); + } +} diff --git a/code/ui/mainmenu/MainMenu.razor.scss b/code/ui/mainmenu/MainMenu.razor.scss new file mode 100644 index 0000000..745df88 --- /dev/null +++ b/code/ui/mainmenu/MainMenu.razor.scss @@ -0,0 +1,195 @@ + +MainMenu +{ + background-color: #262934; + padding: 128px 128px; + opacity: 1; + flex-direction: column; + font-size: 25px; + width: 100%; + height: 100%; + position: absolute; + transition: all 0.3s ease-out; + color: rgba( white, 0.8 ); + + .background + { + position: absolute; + width: 100%; + height: 100%; + background-image: url( https://files.facepunch.com/tony/1b1311b1/boxes.webm ); + opacity: 0.2; + background-size: cover; + filter: blur( 20px ); + mask: linear-gradient( 45deg, white, white, black ); + mask-scope: filter; + background-repeat: no-repeat; + } + + &:intro + { + opacity: 0; + transform: scaleX( 1.1 ); + } + + &.ingame + { + background-color: #262934ee; + backdrop-filter: blur(10px); + + .background + { + opacity: 0; + } + } + + .scroll + { + flex-direction: column; + max-height: 386px; + overflow: scroll; + gap: 50px; + } + + .spacer + { + height: 1px; + background-image: linear-gradient( to right, rgba( white, 0.4 ), rgba( white, 0 ) ); + width: 512px; + margin: 16px 0px; + } + + .game-title + { + font-family: Roboto Condensed; + font-weight: 700; + font-size: 70px; + color: rgba( white, 1 ); + padding-bottom: 64px; + } + + .col + { + flex-direction: column; + gap: 16px; + } + + .controls + { + flex-direction: column; + gap: 50px; + align-items: flex-start; + text-transform: uppercase; + + a, .button + { + font-family: Roboto; + + &:hover + { + color: rgba( white, 1 ); + font-weight: 900; + sound-in: ui.button.over; + cursor: pointer; + } + + &:active + { + sound-in: ui.button.press; + } + } + + .span + { + gap: 128px; + } + } + + .navigator-canvas + { + flex-direction: column; + height: 100%; + flex-grow: 1; + flex-shrink: 0; + } + + .navigator-body + { + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + flex-direction: column; + justify-content: center; + transition: opacity 0.15s ease-out; + + &.hidden + { + opacity: 0; + } + } +} + +FormGroup +{ + flex-direction: column; + min-width: 300px; + gap:16px; +} + +SlimPackageCard +{ + flex-direction: row; + gap: 12px; + align-items: center; + + > i + { + &:hover + { + cursor: pointer; + color: white; + transform: scale( 1.1 ); + sound-in: ui.button.over; + } + + &:active + { + sound-in: ui.button.press; + } + } +} + +i +{ + font-family: Material Icons; + text-transform: lowercase; + + &.with-click + { + &:hover + { + cursor: pointer; + color: white; + transform: scale( 1.1 ); + sound-in: ui.button.over; + } + + &:active + { + sound-in: ui.button.press; + } + } +} + +.avatar +{ + width: 64px; + height: 64px; + + &:hover + { + border: 1px solid white; + } +} \ No newline at end of file diff --git a/code/ui/mainmenu/SavedGames.razor b/code/ui/mainmenu/SavedGames.razor new file mode 100644 index 0000000..a7c0d1e --- /dev/null +++ b/code/ui/mainmenu/SavedGames.razor @@ -0,0 +1,42 @@ +@using Sandbox; +@using System; +@using System.Linq; +@using Sandbox.UI; + +<root> + <label class="game-title"> + @Game.Menu.Package.Title + </label> + + <div class="controls"> + @foreach ( var save in Game.Menu.SavedGames.OrderByDescending( x => x.Time ) ) + { + <a class="button" @onclick=@(() => LoadSavedGame( save ))>@save.Name - @save.Time</a> + } + + <div class="spacer" /> + + <a class="button" href="/">Return</a> + </div> +</root> + +@code +{ + async void LoadSavedGame( SavedGame save ) + { + if ( save != null ) + { + Game.Menu.Lobby.SavedGame = save.Name; + + if ( !string.IsNullOrEmpty( save.Map ) ) + Game.Menu.Lobby.Map = save.Map; + + await Game.Menu.StartServerAsync( Game.Menu.Lobby.MaxMembers, Game.Menu.Lobby.Title, Game.Menu.Lobby.Map ?? "facepunch.square" ); + } + } + + protected override int BuildHash() + { + return HashCode.Combine( Game.Menu.Lobby, Game.Menu.Lobby?.Map ); + } +} \ No newline at end of file diff --git a/code/ui/mainmenu/SetupGame.razor b/code/ui/mainmenu/SetupGame.razor new file mode 100644 index 0000000..4d4de0e --- /dev/null +++ b/code/ui/mainmenu/SetupGame.razor @@ -0,0 +1,76 @@ +@using Sandbox; +@using System; +@using System.Linq; +@using System.Threading.Tasks; +@using Sandbox.Menu; +@using Sandbox.UI; + +<root> + <label class="game-title"> + @Game.Menu.Package.Title + </label> + + <div class="controls"> + <div class="span"> + @if ( MaxPlayersSupported > 1 ) + { + <FormGroup class="form-group"> + <Label>Maximum Players</Label> + <Control> + <SliderControl ShowRange=@true Min=@(1f) Max=@MaxPlayersSupported Value:bind=@Game.Menu.Lobby.MaxMembers /> + </Control> + </FormGroup> + } + + <FormGroup class="form-group"> + <Label>Map</Label> + <Control> + <SlimPackageCard OnLaunch=@OnMapClicked Package=@MapPackage /> + </Control> + </FormGroup> + </div> + + <div class="spacer" /> + + <a class="button" onclick=@Play>Start</a> + <a class="button" href="/">Return</a> + </div> +</root> + +@code +{ + int MaxPlayersSupported { get; set; } = 1; + int MaxPlayers { get; set; } = 1; + Package MapPackage { get; set; } + + void OnMapClicked() + { + Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected ); + StateHasChanged(); + } + + void OnMapSelected( Package map ) + { + MapPackage = map; + StateHasChanged(); + } + + protected override async Task OnParametersSetAsync() + { + MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 ); + MaxPlayers = MaxPlayersSupported; + + MapPackage = await Package.FetchAsync( "facepunch.square", false ); + StateHasChanged(); + } + + async Task Play() + { + await Game.Menu.StartServerAsync( MaxPlayers, $"My game", MapPackage.FullIdent ); + } + + protected override int BuildHash() + { + return HashCode.Combine( MaxPlayers, MapPackage ); + } +} \ No newline at end of file diff --git a/code/ui/mainmenu/SlimPackageCard.razor b/code/ui/mainmenu/SlimPackageCard.razor new file mode 100644 index 0000000..0a0d37a --- /dev/null +++ b/code/ui/mainmenu/SlimPackageCard.razor @@ -0,0 +1,30 @@ +@using System; +@using Sandbox; + +<root> + @if ( Package == null ) + { + <div class="button" @onclick=@OnCardClicked>Select Package</div> + } + else + { + <div class="button" @onclick=@OnCardClicked>@Package.Title</div> + <i tooltip="See information about this package" @onclick=@( () => Game.Overlay.ShowPackageModal( Package.FullIdent ) )>info</i> + } +</root> + +@code +{ + public Package Package { get; set; } + public System.Action OnLaunch { get; set; } + + void OnCardClicked() + { + OnLaunch?.Invoke(); + } + + protected override int BuildHash() + { + return HashCode.Combine( Package ); + } +} diff --git a/code/weapon/Pistol.cs b/code/weapon/Pistol.cs new file mode 100644 index 0000000..eca7827 --- /dev/null +++ b/code/weapon/Pistol.cs @@ -0,0 +1,32 @@ +using Sandbox; + +namespace MyGame; + +public partial class Pistol : Weapon +{ + public override string ModelPath => "weapons/rust_pistol/rust_pistol.vmdl"; + public override string ViewModelPath => "weapons/rust_pistol/v_rust_pistol.vmdl"; + + [ClientRpc] + protected virtual void ShootEffects() + { + Game.AssertClient(); + + Particles.Create( "particles/pistol_muzzleflash.vpcf", EffectEntity, "muzzle" ); + + Pawn.SetAnimParameter( "b_attack", true ); + ViewModelEntity?.SetAnimParameter( "fire", true ); + } + + public override void PrimaryAttack() + { + ShootEffects(); + Pawn.PlaySound( "rust_pistol.shoot" ); + ShootBullet( 0.1f, 100, 20, 1 ); + } + + protected override void Animate() + { + Pawn.SetAnimParameter( "holdtype", (int)CitizenAnimationHelper.HoldTypes.Pistol ); + } +} diff --git a/code/weapon/Weapon.cs b/code/weapon/Weapon.cs new file mode 100644 index 0000000..bca09ff --- /dev/null +++ b/code/weapon/Weapon.cs @@ -0,0 +1,205 @@ +using Sandbox; +using System.Collections.Generic; + +namespace MyGame; + +public partial class Weapon : AnimatedEntity +{ + /// <summary> + /// The View Model's entity, only accessible clientside. + /// </summary> + public WeaponViewModel ViewModelEntity { get; protected set; } + + /// <summary> + /// An accessor to grab our Pawn. + /// </summary> + public Pawn Pawn => Owner as Pawn; + + /// <summary> + /// This'll decide which entity to fire effects from. If we're in first person, the View Model, otherwise, this. + /// </summary> + public AnimatedEntity EffectEntity => Camera.FirstPersonViewer == Owner ? ViewModelEntity : this; + + public virtual string ViewModelPath => null; + public virtual string ModelPath => null; + + /// <summary> + /// How often you can shoot this gun. + /// </summary> + public virtual float PrimaryRate => 5.0f; + + /// <summary> + /// How long since we last shot this gun. + /// </summary> + [Net, Predicted] public TimeSince TimeSincePrimaryAttack { get; set; } + + public override void Spawn() + { + EnableHideInFirstPerson = true; + EnableShadowInFirstPerson = true; + EnableDrawing = false; + + if ( ModelPath != null ) + { + SetModel( ModelPath ); + } + } + + /// <summary> + /// Called when <see cref="Pawn.SetActiveWeapon(Weapon)"/> is called for this weapon. + /// </summary> + /// <param name="pawn"></param> + public void OnEquip( Pawn pawn ) + { + Owner = pawn; + SetParent( pawn, true ); + EnableDrawing = true; + CreateViewModel( To.Single( pawn ) ); + } + + /// <summary> + /// Called when the weapon is either removed from the player, or holstered. + /// </summary> + public void OnHolster() + { + EnableDrawing = false; + DestroyViewModel( To.Single( Owner ) ); + } + + /// <summary> + /// Called from <see cref="Pawn.Simulate(IClient)"/>. + /// </summary> + /// <param name="player"></param> + public override void Simulate( IClient player ) + { + Animate(); + + if ( CanPrimaryAttack() ) + { + using ( LagCompensation() ) + { + TimeSincePrimaryAttack = 0; + PrimaryAttack(); + } + } + } + + /// <summary> + /// Called every <see cref="Simulate(IClient)"/> to see if we can shoot our gun. + /// </summary> + /// <returns></returns> + public virtual bool CanPrimaryAttack() + { + if ( !Owner.IsValid() || !Input.Down( "attack1" ) ) return false; + + var rate = PrimaryRate; + if ( rate <= 0 ) return true; + + return TimeSincePrimaryAttack > (1 / rate); + } + + /// <summary> + /// Called when your gun shoots. + /// </summary> + public virtual void PrimaryAttack() + { + } + + /// <summary> + /// Useful for setting anim parameters based off the current weapon. + /// </summary> + protected virtual void Animate() + { + } + + /// <summary> + /// Does a trace from start to end, does bullet impact effects. Coded as an IEnumerable so you can return multiple + /// hits, like if you're going through layers or ricocheting or something. + /// </summary> + public virtual IEnumerable<TraceResult> TraceBullet( Vector3 start, Vector3 end, float radius = 2.0f ) + { + bool underWater = Trace.TestPoint( start, "water" ); + + var trace = Trace.Ray( start, end ) + .UseHitboxes() + .WithAnyTags( "solid", "player", "npc" ) + .Ignore( this ) + .Size( radius ); + + // + // If we're not underwater then we can hit water + // + if ( !underWater ) + trace = trace.WithAnyTags( "water" ); + + var tr = trace.Run(); + + if ( tr.Hit ) + yield return tr; + } + + /// <summary> + /// Shoot a single bullet + /// </summary> + public virtual void ShootBullet( Vector3 pos, Vector3 dir, float spread, float force, float damage, float bulletSize ) + { + var forward = dir; + forward += (Vector3.Random + Vector3.Random + Vector3.Random + Vector3.Random) * spread * 0.25f; + forward = forward.Normal; + + // + // ShootBullet is coded in a way where we can have bullets pass through shit + // or bounce off shit, in which case it'll return multiple results + // + foreach ( var tr in TraceBullet( pos, pos + forward * 5000, bulletSize ) ) + { + tr.Surface.DoBulletImpact( tr ); + + if ( !Game.IsServer ) continue; + if ( !tr.Entity.IsValid() ) continue; + + // + // We turn predictiuon off for this, so any exploding effects don't get culled etc + // + using ( Prediction.Off() ) + { + var damageInfo = DamageInfo.FromBullet( tr.EndPosition, forward * 100 * force, damage ) + .UsingTraceResult( tr ) + .WithAttacker( Owner ) + .WithWeapon( this ); + + tr.Entity.TakeDamage( damageInfo ); + } + } + } + + /// <summary> + /// Shoot a single bullet from owners view point + /// </summary> + public virtual void ShootBullet( float spread, float force, float damage, float bulletSize ) + { + Game.SetRandomSeed( Time.Tick ); + + var ray = Owner.AimRay; + ShootBullet( ray.Position, ray.Forward, spread, force, damage, bulletSize ); + } + + [ClientRpc] + public void CreateViewModel() + { + if ( ViewModelPath == null ) return; + + var vm = new WeaponViewModel( this ); + vm.Model = Model.Load( ViewModelPath ); + ViewModelEntity = vm; + } + + [ClientRpc] + public void DestroyViewModel() + { + if ( ViewModelEntity.IsValid() ) + { + ViewModelEntity.Delete(); + } + } +} diff --git a/code/weapon/WeaponViewModel.cs b/code/weapon/WeaponViewModel.cs new file mode 100644 index 0000000..7294980 --- /dev/null +++ b/code/weapon/WeaponViewModel.cs @@ -0,0 +1,22 @@ +using Sandbox; + +namespace MyGame; + +public partial class WeaponViewModel : BaseViewModel +{ + protected Weapon Weapon { get; init; } + + public WeaponViewModel( Weapon weapon ) + { + Weapon = weapon; + EnableShadowCasting = false; + EnableViewmodelRendering = true; + } + + public override void PlaceViewmodel() + { + base.PlaceViewmodel(); + + Camera.Main.SetViewModelCamera( 80f, 1, 500 ); + } +} diff --git a/untitled.prefab b/untitled.prefab new file mode 100644 index 0000000..66d4db8 --- /dev/null +++ b/untitled.prefab @@ -0,0 +1,6 @@ +{ + "SchemaVersion": 1, + "Name": null, + "Description": null, + "Root": null +} \ No newline at end of file