From a492d9a51e02768a4b258e00111d6e831e4d2bfe Mon Sep 17 00:00:00 2001 From: Nick Blakely Date: Sun, 27 Sep 2020 23:01:11 -0700 Subject: [PATCH] Remove unused/sample code. Compile using legacy Jun 2010 SDK. --- Giants.WebApi.Clients/Clients.cs | 6 +- GiantsTools.sln | 6 +- Shaders/Shaders.vcxproj | 40 +++++-- Shaders/fx/LandBump.fx | 176 +++---------------------------- Shaders/fx/Sky.fx | 8 -- Shaders/fxo/LandBump.fxo | Bin 0 -> 12768 bytes Shaders/fxo/Ocean.fxo | Bin 0 -> 4540 bytes Shaders/fxo/Sky.fxo | Bin 0 -> 2820 bytes Shaders/fxo/Water.fxo | Bin 0 -> 2516 bytes 9 files changed, 51 insertions(+), 185 deletions(-) create mode 100644 Shaders/fxo/LandBump.fxo create mode 100644 Shaders/fxo/Ocean.fxo create mode 100644 Shaders/fxo/Sky.fxo create mode 100644 Shaders/fxo/Water.fxo diff --git a/Giants.WebApi.Clients/Clients.cs b/Giants.WebApi.Clients/Clients.cs index 3ccae81..0bf85a0 100644 --- a/Giants.WebApi.Clients/Clients.cs +++ b/Giants.WebApi.Clients/Clients.cs @@ -790,8 +790,8 @@ namespace Giants.WebApi.Clients [Newtonsoft.Json.JsonProperty("numPlayers", Required = Newtonsoft.Json.Required.Always)] public int NumPlayers { get; set; } - - [Newtonsoft.Json.JsonProperty("maxPlayers", Required = Newtonsoft.Json.Required.Always)] + + [Newtonsoft.Json.JsonProperty("maxPlayers", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public int MaxPlayers { get; set; } [Newtonsoft.Json.JsonProperty("gameState", Required = Newtonsoft.Json.Required.Always)] @@ -930,4 +930,4 @@ namespace Giants.WebApi.Clients #pragma warning restore 1573 #pragma warning restore 472 #pragma warning restore 114 -#pragma warning restore 108 +#pragma warning restore 108 \ No newline at end of file diff --git a/GiantsTools.sln b/GiantsTools.sln index 3dc81dc..5878134 100644 --- a/GiantsTools.sln +++ b/GiantsTools.sln @@ -17,9 +17,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shaders", "Shaders\Shaders. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Giants.BinTools", "Giants.BinTools\Giants.BinTools.csproj", "{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Giants.EffectCompiler", "Giants.EffectCompiler\Giants.EffectCompiler.csproj", "{F5F3D216-9787-4CFF-88DF-8259CF667F88}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Giants.EffectCompiler", "Giants.EffectCompiler\Giants.EffectCompiler.csproj", "{F5F3D216-9787-4CFF-88DF-8259CF667F88}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Giants.EffectCompiler.Tests", "Giants.EffectCompiler.Tests\Giants.EffectCompiler.Tests.csproj", "{49423BA5-4A9F-47A3-9D2D-E83936272DD0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Giants.EffectCompiler.Tests", "Giants.EffectCompiler.Tests\Giants.EffectCompiler.Tests.csproj", "{49423BA5-4A9F-47A3-9D2D-E83936272DD0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -92,11 +92,13 @@ Global {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x86.ActiveCfg = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x86.Build.0 = Release|Any CPU {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|Any CPU.Build.0 = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x64.ActiveCfg = Debug|x64 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x64.Build.0 = Debug|x64 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x86.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x86.Build.0 = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|Any CPU.ActiveCfg = Release|Win32 + {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|Any CPU.Build.0 = Release|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x64.ActiveCfg = Release|x64 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x64.Build.0 = Release|x64 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x86.ActiveCfg = Release|Win32 diff --git a/Shaders/Shaders.vcxproj b/Shaders/Shaders.vcxproj index b343fb5..f2f0071 100644 --- a/Shaders/Shaders.vcxproj +++ b/Shaders/Shaders.vcxproj @@ -67,6 +67,7 @@ Effect 2.0 + /Gec %(AdditionalOptions) @@ -74,19 +75,42 @@ Effect 2.0 + /Gec %(AdditionalOptions) - - - /Gec %(AdditionalOptions) - /Gec %(AdditionalOptions) - - + + Document + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + fxo\%(Filename).fxo + fxo\%(Filename).fxo + + + Document + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + fxo\%(Filename).fxo + fxo\%(Filename).fxo + + - - + Document + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + fxo\%(Filename).fxo + fxo\%(Filename).fxo + + + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + Document + fxo\%(Filename).fxo + fxo\%(Filename).fxo + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + "$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo + diff --git a/Shaders/fx/LandBump.fx b/Shaders/fx/LandBump.fx index b76ef1f..30eb416 100644 --- a/Shaders/fx/LandBump.fx +++ b/Shaders/fx/LandBump.fx @@ -21,19 +21,6 @@ float4 g_TextureFactor : TextureFactor; int g_NumLights = 0; ////////////////////////////////////////////////////// -//The sizes of the various terrain UV Coordinates -float detailScale = 1; -float diffuseScale = 5; -float globalScale; -float detailMapStrength = 1; - -float3 sunlightVector = float3(.5,.5,.8); - -//The Colour (and brightness) of the Sunlight -float3 lightColour = float3(2,2,2); -//The colour (and birghtness) of the ambient light -float3 ambientColour = float3(.1,.1,.1); - texture g_LandTexture; texture g_LandBumpTexture; @@ -99,11 +86,11 @@ float4 bx2(float4 x) return float4(2.0f * x.xyzw - 1.0f); } - -VS_OUTPUT_BUMP LandBumpVS( float4 vPos : POSITION, - float3 vNormal : NORMAL, - float4 vDiffuse : COLOR0, - float4 vDiffuse2 : COLOR1) +VS_OUTPUT_BUMP LandBumpVS( + float4 vPos : POSITION, + float3 vNormal : NORMAL, + float4 vDiffuse : COLOR0, + float4 vDiffuse2 : COLOR1) { VS_OUTPUT_BUMP Output; @@ -137,17 +124,9 @@ float4 LandBumpPS(VS_OUTPUT_BUMP input) : COLOR0 float3 normalMap; normalMap = saturate((float4)dot((float3)normal, (float3)normalcol)).xyz; -#ifdef MIX_4X - float3 texel = tex2D(g_LandTextureSampler, input.LandTextureUV).rgb * tex2D(g_LandTextureSampler, input.LandTextureUV * -0.25).rgb * 4; - float3 finalColor = 2.0 * (normalMap * (texel) + input.LandBumpDiffuse); -#else float3 finalColor = 2.0 * (normalMap * (tex2D(g_LandTextureSampler, input.LandTextureUV)) + input.LandBumpDiffuse); - //finalColor *= tex2D(g_ShoreTextureSampler, input.ShoreTextureUV); -#endif - //finalColor = (g_TextureFactor * (1 - input.LandDiffuse)) + finalColor; - - for (int i = 0; i < MAX_LIGHTS; i++) + for (int i = 0; i < g_NumLights; i++) { // Get light direction for this fragment float3 lightDir = normalize(input.WorldPos - g_LightPositions[i]); // per pixel diffuse lighting @@ -171,135 +150,7 @@ technique LandBump pass P0 { VertexShader = compile vs_2_0 LandBumpVS(); - PixelShader = compile ps_2_0 LandBumpPS(); - } -} - -VS_OUTPUT_BUMP LandNormalVS( float4 vPos : POSITION, - float3 vNormal : NORMAL, - float4 vDiffuse : COLOR0, - float4 vDiffuse2 : COLOR1) -{ - VS_OUTPUT_BUMP Output; - - // Transform the position from object space to homogeneous projection space - Output.Position = mul(vPos, g_mWorldViewProjection); - - Output.LandBumpDiffuse = vDiffuse2 * .5f; - Output.LandBumpDiffuse.a = 1.0f; - - //Output.LandDiffuse - Output.LandDiffuse.rgb = vDiffuse; - Output.LandDiffuse.a = 1.0f; - - Output.WorldPos = mul(vPos, g_World); - - // Set dynamically generated tex coords - Output.LandBumpTextureUV = mul(vPos, g_TexGenTransform0); - Output.LandTextureUV = mul(vPos, g_TexGenTransform1); - Output.ShoreTextureUV = mul(vPos, g_ShoreGen); - - // Transform the normal from object space to world space - Output.Normal = normalize(mul(vNormal, (float3x3)g_World)); // normal (world space) - - return Output; -} - -float4 LandNormalPS(VS_OUTPUT_BUMP input) : COLOR0 -{ - float4 Output; - //Get Global Normal from the full terrain normal map - float3 Normal = tex2D(g_LandBumpTextureSampler, input.LandTextureUV); - Normal[0] -= .5; - Normal[1] -= .5; - Normal[2] -= .5; - Normal = normalize(Normal); - - - //{ - // - // //Get Detail Normal from the detail map - // float3 detailNormalMap = (tex2D(g_LandDetailTextureSampler, input.LandTextureUV*100/detailScale)); - // detailNormalMap[0] -= .5; - // detailNormalMap[1] -= .5; - // detailNormalMap[2] -= .5; - // //Multiply Detail Normal by detailMapStrength - // detailNormalMap[0] = mul(detailNormalMap[0], detailMapStrength); - // detailNormalMap[1] = mul(detailNormalMap[1], detailMapStrength); - // - // //Normalize detail Normal - // detailNormalMap = normalize(detailNormalMap); - // - // if(false) - // { - // //Generate the Tangent Basis for the Detail Normal Map. - // float3x3 tangentBasis; - // - // tangentBasis[0] = cross(Normal, float3(1,0,0)); - // tangentBasis[1] = cross(Normal, tangentBasis[0]); - // tangentBasis[2] = Normal; - // - // detailNormalMap = detailNormalMap, detailMapStrength; - // - // Normal = mul(detailNormalMap, tangentBasis); - // Normal = normalize(Normal); - // } - // else - // { - // Normal = normalize(Normal*2+detailNormalMap*detailMapStrength); - // } - //} - - float3 sv = normalize(sunlightVector); - float3 lightLevel; - lightLevel[0] = max(dot(Normal, sv), 0)*lightColour[0]*2;//+ambientColour[0]; - lightLevel[1] = max(dot(Normal, sv), 0)*lightColour[1]*2;//+ambientColour[1]; - lightLevel[2] = max(dot(Normal, sv), 0)*lightColour[2]*2;//+ambientColour[2]; - - return float4(tex2D(g_LandTextureSampler, input.LandTextureUV) * lightLevel, 1) + input.LandBumpDiffuse; - - - - float4 normal = bx2(tex2D(g_LandBumpTextureSampler, input.LandBumpTextureUV)); - float4 normalcol = bx2(input.LandDiffuse); - - float3 normalMap; - normalMap = saturate((float4)dot((float3)normal, (float3)normalcol)).xyz; -#ifdef MIX_4X - float3 texel = tex2D(g_LandTextureSampler, input.LandTextureUV).rgb * tex2D(g_LandTextureSampler, input.LandTextureUV * -0.25).rgb * 4; - float3 finalColor = 2.0 * (normalMap * (texel) + input.LandBumpDiffuse); -#else - float3 finalColor = 2.0 * (normalMap * (tex2D(g_LandTextureSampler, input.LandTextureUV)) + input.LandBumpDiffuse); - //finalColor *= tex2D(g_ShoreTextureSampler, input.ShoreTextureUV); -#endif - - //finalColor = (g_TextureFactor * (1 - input.LandDiffuse)) + finalColor; - - for (int i = 0; i < MAX_LIGHTS; i++) - { - // Get light direction for this fragment - float3 lightDir = normalize(input.WorldPos - g_LightPositions[i]); // per pixel diffuse lighting - - // Note: Non-uniform scaling not supported - float diffuseLighting = saturate(dot(input.Normal, -lightDir)); - - // Introduce fall-off of light intensity - diffuseLighting *= (g_LightRangeSquared[i] / dot(g_LightPositions[i] - input.WorldPos, g_LightPositions[i] - input.WorldPos)); - - float4 diffuseColor = diffuseLighting * g_LightDiffuseColors[i]; - - finalColor += diffuseColor; - } - - return float4(finalColor, 1); -} - -technique LandNormal -{ - pass P0 - { - VertexShader = compile vs_2_0 LandNormalVS(); - PixelShader = compile ps_2_0 LandNormalPS(); + PixelShader = compile ps_2_0 LandBumpPS(); } } @@ -315,9 +166,10 @@ struct VS_OUTPUT float3 WorldPos : TEXCOORD2; }; -VS_OUTPUT LandscapeVS( float4 vPos : POSITION, - float3 vNormal : NORMAL, - float4 vDiffuse : COLOR0) +VS_OUTPUT LandscapeVS( + float4 vPos : POSITION, + float3 vNormal : NORMAL, + float4 vDiffuse : COLOR0) { VS_OUTPUT Output; @@ -342,7 +194,7 @@ float4 LandscapePS(VS_OUTPUT input) : COLOR0 { float4 finalColor = 0; - for (int i = 0; i < MAX_LIGHTS; i++) + for (int i = 0; i < g_NumLights; i++) { // Get light direction for this fragment float3 lightDir = normalize(input.WorldPos - g_LightPositions[i]); // per pixel diffuse lighting @@ -358,11 +210,7 @@ float4 LandscapePS(VS_OUTPUT input) : COLOR0 finalColor += diffuseColor; } -#ifdef MIX_4X - float3 texel = tex2D(g_LandTextureSampler, input.TextureUV).rgb * tex2D(g_LandTextureSampler, input.TextureUV * -0.25).rgb * 4; -#else float3 texel = tex2D(g_LandTextureSampler, input.TextureUV); -#endif return float4(saturate((texel.xyz + input.Diffuse) + (finalColor)), 1.0f); } diff --git a/Shaders/fx/Sky.fx b/Shaders/fx/Sky.fx index 951c61b..c3ddc6c 100644 --- a/Shaders/fx/Sky.fx +++ b/Shaders/fx/Sky.fx @@ -29,9 +29,6 @@ void RenderSceneVS( out float2 oTexCoord0 : TEXCOORD0 ) { oPosition = mul(iPosition, g_mWorldViewProjection); - //oPosition = mul(iPosition, g_World); - //oPosition = mul(oPosition, g_View); - //oPosition = mul(oPosition, g_Projection); oColor0 = float4(1, 1, 1, 1); oTexCoord0 = iTexCoord0; } @@ -40,12 +37,7 @@ float4 RenderScenePS( float4 iColor : COLOR, float2 iTexCoord0 : TEXCOORD0) : COLOR0 { - //return float4(1, 1, 1, 1); return tex2D(g_SkyTextureSampler, iTexCoord0); - //oColor0 = tex2D(TextureDiffuse0Sampler, iTexCoord0); - //float intensity = dot(oColor0.rgb, float3(0.3, 0.59, 0.11)); - //float p = smoothstep(intensityThreshold, 1.f, intensity); - //oColor0 = oColor0 * p * colorMultiplier; } technique RenderWithPixelShader diff --git a/Shaders/fxo/LandBump.fxo b/Shaders/fxo/LandBump.fxo new file mode 100644 index 0000000000000000000000000000000000000000..327e6f1b73e814930da265dde087923eb0b9c063 GIT binary patch literal 12768 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 literal 0 HcmV?d00001 diff --git a/Shaders/fxo/Ocean.fxo b/Shaders/fxo/Ocean.fxo new file mode 100644 index 0000000000000000000000000000000000000000..c5085a7fee76f37ff51f2b56680c63b13488f6bd GIT binary patch literal 4540 zcmd^DO>7%Q6rSB|sS5#zpF))e;X^<{3XwyD+CW6x#A=I_su6XlB`g&;afngkwY;Vn zsKf?ADG-SW5cI&oNIAt7%7Ft14w1NU?12LZ4mtS1fddDQ$jkT5%x)&GZ3L}^P+s)> zy>H&k?7a78W>>Ke1kFs3ka9PE9q53f(J$RzQdpsXBJwCh`bUKzTF{c==X`8yl^7c4 z+@e<*8W&;oyLOJ|HC)qW`4TO%bfQ?nL|_V0*OOg+c{SW)h1Se`+?y; zpw0e=prH)HI2ICM3i^t{ufV=;@Lo(dWbB_4u+s*ghg~)J3>N}n(;02|!d_=1WEGBU zP;&NJ$4?FVC2a1^A7Ou|IfwrNyP>%QoD0vOayr-Vcrt+7wrwh4a#Y?;Hl9xTdn48a+z3f6Ydu}eDD~>Ew zMV<38)-?K1m0h24NADa<9GZtK&_=f5XgkT2lb!d%() z+=WVF=*1@!sUxY(ctR~EG373o3QPHNVti!unUSMM$48P7QLi_HC&X0xCT5~T@RuQ0OHBswxQLP=lU;=CXFqE}6<)75r z#lRFMD*4)2l8yK0C~>d z1v-d_`+#Tcec%A_DsUM10gz|y8j$DiLtqB@5s+u@V<698m%Ve+^YY7=+H9W3Fc#wD zmRqBZn)o(szE6?iEv$6S7LA(Xw&Xn#cO-Wr9+P|@IFrld&3q}(=W&)(hPdVsm$~g z*X3Xvs(h$>cT+zN?NWY+#38M5tNaV`3wz192cx(z=r%KMK3K)wFXJ8qPeJ*e^#cX44TTFmYL!)okdcEF*TiL;1SOd6kOYY46 z7?k^i`M|n%?GJUfc5>C~=l2sukG*C5gUT)ayf<3MKVta#4(qi4!dmU+T7>V%Fc+=4 zywAube7EHK0mI*}7JR2tIDfZV&_~(JwNUTO&gbG@m7PU%17G&Bq30Y9VQCN^%>;h6Pxd>nIZHtWgSH!ROCmN5(cvx}nLZu2}we5C^_^#+`_|1D4BQ1hIMGhV|h6ycOW z)(J$_F4)VstRe}!snN(j?$n5sK{Y3=PqO2qU7)d6%FOvbz_V7Yz7GBjV4Qz|F@GkI zp`4AfedCw2`5*FAgIQBlc0|rMeav)ruz%pk{%h9;`*R@Vy00#YkeMyTm@ZrZ$Gpu}H$sH>#3)mNd$7X7xDExxNJDxwvX0|wAh79LCDfPa2ax=(& z$PvE$bM~x*Ipy!5n^W0|*lr^o5IvRRUE+jLW{=1jo9`~lN~MI1&2*;IwT5udHpy+IGQNBaO@ez5 H`=9X^hfky1 literal 0 HcmV?d00001 diff --git a/Shaders/fxo/Water.fxo b/Shaders/fxo/Water.fxo new file mode 100644 index 0000000000000000000000000000000000000000..5653d5544ab5cc99966eddb9f43aa737ee95a3b8 GIT binary patch literal 2516 zcmb`Jv2R;d6vpqfL*rBt?oa^(5(YX1sfyAT2ti0dVkis3#BRu7DY260*2wj2QZ>Me&2of*{^99T26A_x#!&T&OP^> z^S#7dh>m~pjHN8k47>|}4vXd-TjdEJ&+zW`olk;JbAPMhe^%-QpZa@YBWRhm>Us7~ z+fhDB?GXMG7AYT>uGN#rITqJPwb1Xl zSBzQ2Cf`cxK-Fg&gLOi3xhI9iMR*BzcTUAD*KW3(eg`+*O*z|KkO@gwE+_5sFRjEm zZThW!zf<1xTfX(v+46tN$pSK=Z&@593i1g4C#9d~<#!ao(GPAdF>-6&`D?cyVr#?S zIQ=&3uV8-dog~u~L5Z!eOJt(xIQqgA*RNe&LOpbw5+!&6uE4sF&bf;$zF95$x2jhg zwN}`z1VOV~E#Ih7f^N0muiBn1*ZXFyc*aE0krGDQgpi9m7x^5L5}FIhOUPH9EFv$X zZ#(@4GF9VJ*^I{?!921`?vle_x6WX1wA#JUl!9)<4z!z}Yg@eL-pfqi+X$LW=6L)E zZ~p}U1yA6=ovt2w<}94GebRYzbXIlLwIrix!F2p?uNj*08EkPLQKY$y_p>JS`+k#i z;yF^D)B{pIb*|$6>h#}{nghkZfRxW$NcqWDbhfIqA(3M8dsy?JGo&l7&Mv~TN!Kjw z!y!yttnD^ZbQ13;dlY-ko)6BI)b8$F-dTC9>v2ENls4Zhe+(QwlOGu~ zczc$CF)zed8*rP0**ZUT>!HczN9*>gd3+`ZCN~*Ti>znnrGH6|BYMj3vjfjeWE;T) z=7#d*(4!$d!Y@NC?GNJ48%vsxctw9z(9AJ-98U3=Q{f@iB8^AQyk(fWjzrpw62e9-s z_Kwi!;RJia`xz`bzEB_aLIHkET2PEQ8p6u6n&QYR%n6^dhrScVM!nwa`rttIRh8rK z2j32C)-<)vZW6a7jx8VcKn;@poa>4H-pHmrR-A1Yse5Uw>1_R!ZQyMBh9`b^SU(=F zU!UUoJI>Qw5o(I-JFNBXRnE%s19%%g{eOZnwawx;``+UEM0D$a!1PJHo;8LN#@MCj zgA8l_elZr_A-DsFlToZ^tPWnCK4