From 1dafc383bbb5ebc4fa563db8678641092f5c47da Mon Sep 17 00:00:00 2001 From: domdoc Date: Thu, 12 May 2022 15:12:25 +0200 Subject: [PATCH 01/16] Fixed hit anims showing for Idle hits --- scripts/gameplay.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gameplay.lua b/scripts/gameplay.lua index ab78608..72771b4 100644 --- a/scripts/gameplay.lua +++ b/scripts/gameplay.lua @@ -109,7 +109,7 @@ function button_hit(button, rating, delta) if (showHitAnims) then if (rating == 1) then HitFX.TriggerAnimation("Near", button + 1) - else + elseif (rating == 2) then HitFX.TriggerAnimation("Crit", button + 1) end end -- 2.40.1 From 5b34b1313b25177f0643d122e113104568b29a65 Mon Sep 17 00:00:00 2001 From: domdoc Date: Sat, 14 May 2022 10:54:17 +0200 Subject: [PATCH 02/16] Early/Late display with ms + settings --- config-definitions.json | 21 +++++++ scripts/gameplay.lua | 7 +++ scripts/gameplay/earlylate.lua | 104 ++++++++++++++++++++++++++------- 3 files changed, 112 insertions(+), 20 deletions(-) diff --git a/config-definitions.json b/config-definitions.json index ac1c731..a60dc15 100644 --- a/config-definitions.json +++ b/config-definitions.json @@ -69,6 +69,27 @@ "default": true }, + "gameplay_earlyLateFor": { + "label": "Show Early/Late display for", + "type": "selection", + "default": "NEAR (or worse)", + "values": ["CRITICAL (or worse)", "NEAR (or worse)", "OFF"] + }, + + "gameplay_earlyLatePosition": { + "label": "Early/Late display position", + "type": "selection", + "default": "STANDARD", + "values": ["UPPER+", "UPPER", "STANDARD", "LOWER"] + }, + + "gameplay_msFor": { + "label": "Show millisecond display for", + "type": "selection", + "default": "NEAR (or worse)", + "values": ["ALL", "CRITICAL (or worse)", "NEAR (or worse)", "NONE"] + }, + "separator_f": {}, "Debug": { "type": "label" }, diff --git a/scripts/gameplay.lua b/scripts/gameplay.lua index 72771b4..024c25b 100644 --- a/scripts/gameplay.lua +++ b/scripts/gameplay.lua @@ -18,6 +18,7 @@ local Chain = require('gameplay.chain') local LaserAlert = require('gameplay.laser_alert') local HitFX = require 'gameplay.hitfx' +local EarlyLate = require 'gameplay.earlylate' local TrackEnd = require('gameplay.track_end') @@ -59,6 +60,8 @@ function render(deltaTime) Chain.render(deltaTime, gameplay.comboState, chain, gameplay.critLine.x, gameplay.critLine.y); LaserAlert.render(deltaTime); + + EarlyLate.render(deltaTime) end function render_crit_base(deltaTime) @@ -113,6 +116,10 @@ function button_hit(button, rating, delta) HitFX.TriggerAnimation("Crit", button + 1) end end + + if 0 < rating and rating < 3 then + EarlyLate.TriggerAnimation(rating, delta) + end end function laser_slam_hit(slamLength, startPos, endPost, index) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index ce6aadf..df6fa69 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -1,30 +1,94 @@ +local Dimensions = require "common.dimensions" -local desw = 1080; -local desh = 1920; +-- Used for comparing button_hit()'s delta parameter with the +-- gameplay_earlyLateFor/gameplay_msDisplay skin settings values. +-- If the number is <= delta then the EarlyLate/ms should be shown +local compare = { + ["ALL"] = 2, + ["CRITICAL (or worse)"] = 2, + ["NEAR (or worse)"] = 1, + ["NONE"] = -1, + ["OFF"] = -1 +} -local transitionExistScale = 0; +local heightFractions = { + ["UPPER+"] = 2, + ["UPPER"] = 3, + ["STANDARD"] = 3.5, + ["LOWER"] = 5, +} -local tickTransitions = function (deltaTime) - - if transitionExistScale < 1 then - transitionExistScale = transitionExistScale + deltaTime / 2 -- transition should last for that time in seconds +local earlyLateFor = compare[game.GetSkinSetting("gameplay_earlyLateFor")] +local msFor = compare[game.GetSkinSetting("gameplay_msFor")] +local heightFraction = heightFractions[game.GetSkinSetting("gameplay_earlyLatePosition")] + +local EarlyLate = { + timer = 0, + lastMillisec = 0, + showEarlyLate = false, + showMillisec = false, +} + +function EarlyLate.render(deltaTime) + if EarlyLate.timer <= 0 then + return + end + + EarlyLate.timer = EarlyLate.timer - deltaTime * 100 + + local screenW, screenH = Dimensions.screen.width, Dimensions.screen.height + local screenCenterX = screenW / 2 + + local desh + + if screenH > screenW then + desh = 1920 + else + desh = 1080 + end + + local scale = desh / screenH + local y = screenH / 8 * heightFraction + + gfx.BeginPath() + gfx.LoadSkinFont("dfmarugoth.ttf") + gfx.FontSize(12 * scale) + + if EarlyLate.showEarlyLate then + gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_BASELINE) + + if EarlyLate.lastMillisec < 0 then + gfx.FillColor(224, 153, 179) + gfx.FastText("EARLY", screenCenterX - 100 * scale, y) + else + gfx.FillColor(90, 131, 211) + gfx.FastText("LATE", screenCenterX - 100 * scale, y) + end + end + + if EarlyLate.showMillisec then + local msString = string.format("%dms", EarlyLate.lastMillisec) + + if EarlyLate.lastMillisec >= 0 then + msString = "+"..msString -- prepend + sign for lates + end + + gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_BASELINE) + + gfx.FastText(msString, screenCenterX + 100 * scale, y) end end -local render = function (deltaTime, comboState, combo, critLineCenterX, critLineCenterY) - tickTransitions(deltaTime) +function EarlyLate.TriggerAnimation(rating, millisec) + local showEarlyLate = rating <= earlyLateFor + local showMillisec = rating <= msFor - if (transitionExistScale >= 1) then - return; + if showEarlyLate or showMillisec then + EarlyLate.timer = 120 + EarlyLate.lastMillisec = millisec + EarlyLate.showEarlyLate = showEarlyLate + EarlyLate.showMillisec = showMillisec end - - end -local trigger = function () - -end - -return { - render=render -} \ No newline at end of file +return EarlyLate \ No newline at end of file -- 2.40.1 From 48d1424b63b75d53c43a1582cd5a07762350f4aa Mon Sep 17 00:00:00 2001 From: domdoc Date: Sat, 14 May 2022 19:35:35 +0200 Subject: [PATCH 03/16] Added hold animations --- scripts/gameplay.lua | 2 +- scripts/gameplay/hitfx.lua | 134 +++++++++++++++++++++++++------------ 2 files changed, 92 insertions(+), 44 deletions(-) diff --git a/scripts/gameplay.lua b/scripts/gameplay.lua index 024c25b..4e1ed12 100644 --- a/scripts/gameplay.lua +++ b/scripts/gameplay.lua @@ -66,11 +66,11 @@ end function render_crit_base(deltaTime) CritLine.renderBase(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); - HitFX.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); Console.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation); end function render_crit_overlay(deltaTime) + HitFX.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); end function render_intro(deltaTime) diff --git a/scripts/gameplay/hitfx.lua b/scripts/gameplay/hitfx.lua index ec9cd1e..5a4cc5e 100644 --- a/scripts/gameplay/hitfx.lua +++ b/scripts/gameplay/hitfx.lua @@ -13,26 +13,51 @@ local Animations = { Near = Animation.new('gameplay/hit_animation_frames/near_taps', { centered = true, }), + + HoldCrit = Animation.new('gameplay/hit_animation_frames/hold_critical', { + centered = true, + loop = true, + }), + + HoldDome = Animation.new('gameplay/hit_animation_frames/hold_dome', { + centered = true, + loop = true, + loopPoint = 10 + }), + + HoldEnd = Animation.new('gameplay/hit_animation_frames/hold_end', { + centered = true, + }), + + HoldInner = Animation.new('gameplay/hit_animation_frames/hold_inner', { + centered = true, + loop = true, + }), }; -local animationStates = { - ---@type AnimationState[] - Hold = { }, - ---@type AnimationState[] - Tap = { } -}; +---@class HoldStateTable +---@field Crit AnimationState +---@field Dome AnimationState +---@field End AnimationState +---@field Inner AnimationState + +---@type HoldStateTable[] +local holdStateTables = {} + +for i = 1, 6 do + holdStateTables[i] = { + Crit = Animations.HoldCrit:createState(), + Dome = Animations.HoldDome:createState(), + End = Animations.HoldEnd:createState(), + Inner = Animations.HoldInner:createState() + } +end + +---@type AnimationState[] +local tapStates = {} local HitFX = { }; -local LanePositions = { - 1.5 / 6, - 2.5 / 6, - 3.5 / 6, - 4.5 / 6, - 1 / 3, - 2 / 3 -}; - local function setupLaneTransform(lanePosition, critCenterX, critCenterY) local critLine = gameplay.critLine; local x = critCenterX + (critLine.line.x2 - critLine.line.x1) * lanePosition; @@ -55,40 +80,63 @@ function HitFX.render(deltaTime, critCenterX, critCenterY, critRotation, cursors lanePosition = -track.GetCurrentLaneXPos(6) - laneWidth / 2 end - local holdState = animationStates.Hold[i]; - local tapState = animationStates.Tap[i]; + -- Holds + local isHeld = gameplay.noteHeld[i] + local holdStates = holdStateTables[i] + local isAnimationPlaying = holdStates.Dome.running - local isHeld = gameplay.noteHeld[i]; - if (isHeld) then - if (holdState) then - if (not holdState.running) then - holdState:restart(); - end - - setupLaneTransform(lanePosition, critCenterX, critCenterY); - holdState:render(deltaTime); - gfx.ResetTransform(); - end - else - if (holdState and holdState.running) then - holdState:restart(); - end - - if (tapState and tapState.running) then - setupLaneTransform(lanePosition, critCenterX, critCenterY); - tapState:render(deltaTime, { - centered = true, - width = hitSize, - height = hitSize, - }); - gfx.ResetTransform(); - end + if isHeld and not isAnimationPlaying then + holdStates.Crit:restart() + holdStates.Dome:restart() + holdStates.Inner:restart() end + + if not isHeld and isAnimationPlaying then + holdStates.Crit:stop() + holdStates.Dome:stop() + holdStates.Inner:stop() + + holdStates.End:restart() + end + + setupLaneTransform(lanePosition, critCenterX, critCenterY) + holdStates.Inner:render(deltaTime, { + centered = true, + width = hitSize, + height = hitSize + }) + holdStates.Dome:render(deltaTime, { + centered = true, + width = hitSize, + height = hitSize + }) + holdStates.Crit:render(deltaTime, { + centered = true, + width = hitSize, + height = hitSize + }) + holdStates.End:render(deltaTime, { + centered = true, + width = hitSize, + height = hitSize + }) + + -- Taps + local tapState = tapStates[i] + + if tapState then + tapState:render(deltaTime, { + centered = true, + width = hitSize, + height = hitSize, + }); + end + gfx.ResetTransform() end end function HitFX.TriggerAnimation(name, lane) - animationStates.Tap[lane] = Animations[name]:start(); + tapStates[lane] = Animations[name]:start(); end return HitFX; -- 2.40.1 From f2288ecf7166f42c7a0a72e2af300a16bdbada0d Mon Sep 17 00:00:00 2001 From: domdoc Date: Sun, 15 May 2022 11:07:07 +0200 Subject: [PATCH 04/16] Added laser HitFX --- scripts/gameplay.lua | 3 +- scripts/gameplay/hitfx.lua | 122 +++++++++++++++++++++++++++++++++---- 2 files changed, 113 insertions(+), 12 deletions(-) diff --git a/scripts/gameplay.lua b/scripts/gameplay.lua index 4e1ed12..d152053 100644 --- a/scripts/gameplay.lua +++ b/scripts/gameplay.lua @@ -65,12 +65,13 @@ function render(deltaTime) end function render_crit_base(deltaTime) + HitFX.renderLasers(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); CritLine.renderBase(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); Console.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation); end function render_crit_overlay(deltaTime) - HitFX.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); + HitFX.renderButtons(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation); end function render_intro(deltaTime) diff --git a/scripts/gameplay/hitfx.lua b/scripts/gameplay/hitfx.lua index 5a4cc5e..a96a7ef 100644 --- a/scripts/gameplay/hitfx.lua +++ b/scripts/gameplay/hitfx.lua @@ -33,8 +33,44 @@ local Animations = { centered = true, loop = true, }), + + LaserCrit = Animation.new('gameplay/hit_animation_frames/laser_critical', { + loop = true, + }), + + LaserDome = Animation.new('gameplay/hit_animation_frames/laser_dome', { + loop = true, + }), + + LaserEndOuter = Animation.new('gameplay/hit_animation_frames/laser_end_outer', {}), + + LaserEndLeft = Animation.new('gameplay/hit_animation_frames/laser_end_l_inner', {}), + + LaserEndRight = Animation.new('gameplay/hit_animation_frames/laser_end_r_inner', {}), }; +---@class LaserStateTable +---@field Crit AnimationState +---@field Dome AnimationState +---@field EndInner AnimationState +---@field EndOuter AnimationState + +---@type LaserStateTable[] +local laserStateTables = { + { + Crit = Animations.LaserCrit:createState(), + Dome = Animations.LaserDome:createState(), + EndInner = Animations.LaserEndLeft:createState(), + EndOuter = Animations.LaserEndOuter:createState() + }, + { + Crit = Animations.LaserCrit:createState(), + Dome = Animations.LaserDome:createState(), + EndInner = Animations.LaserEndRight:createState(), + EndOuter = Animations.LaserEndOuter:createState() + } +} + ---@class HoldStateTable ---@field Crit AnimationState ---@field Dome AnimationState @@ -58,16 +94,77 @@ local tapStates = {} local HitFX = { }; -local function setupLaneTransform(lanePosition, critCenterX, critCenterY) - local critLine = gameplay.critLine; - local x = critCenterX + (critLine.line.x2 - critLine.line.x1) * lanePosition; - local y = critCenterY + (critLine.line.y2 - critLine.line.y1) * lanePosition; - Dimensions.setUpTransforms(x, y, -critLine.rotation); +local function setUpTransform(critCenterX, critCenterY, critRotation, xScalar) + local critLine = gameplay.critLine + local x = critCenterX + (critLine.line.x2 - critLine.line.x1) * xScalar + local y = critCenterY + (critLine.line.y2 - critLine.line.y1) * xScalar + + Dimensions.setUpTransforms(x, y, critRotation) end -function HitFX.render(deltaTime, critCenterX, critCenterY, critRotation, cursors) +function HitFX.renderLasers(deltaTime, critCenterX, critCenterY, critRotation, cursors) + local baseHitSize = 325 * 1.25; + + -- Lasers + for laser = 1, 2 do + -- Update + local isActive = gameplay.laserActive[laser] + local laserState = laserStateTables[laser] + local isAnimationPlaying = laserState.Dome.running + + if isActive and not isAnimationPlaying then + laserState.Crit:restart() + laserState.Dome:restart() + end + + if not isActive and isAnimationPlaying then + laserState.Crit:stop() + laserState.Dome:stop() + + laserState.EndInner:restart() + laserState.EndOuter:restart() + end + + -- Render + local laserColor = {game.GetLaserColor(laser - 1)} + local x = cursors[laser - 1].pos + + Dimensions.setUpTransforms(critCenterX, critCenterY, critRotation) + + laserState.Dome:render(deltaTime, { + centered = true, + width = baseHitSize, + height = baseHitSize, + color = laserColor, + x = x, + }) + + laserState.Crit:render(deltaTime, { + centered = true, + width = baseHitSize, + height = baseHitSize, + x = x, + }) + laserState.EndInner:render(deltaTime, { + centered = true, + width = baseHitSize, + height = baseHitSize, + x = x, + }) + laserState.EndOuter:render(deltaTime, { + centered = true, + width = baseHitSize, + height = baseHitSize, + color = laserColor, + x = x, + }) + end +end + +function HitFX.renderButtons(deltaTime, critCenterX, critCenterY, critRotation) local baseHitSize = 325; + -- BT + FX for i = 1, 6 do local hitSize = baseHitSize; if (i > 4) then @@ -80,7 +177,7 @@ function HitFX.render(deltaTime, critCenterX, critCenterY, critRotation, cursors lanePosition = -track.GetCurrentLaneXPos(6) - laneWidth / 2 end - -- Holds + -- Update Holds local isHeld = gameplay.noteHeld[i] local holdStates = holdStateTables[i] local isAnimationPlaying = holdStates.Dome.running @@ -95,11 +192,13 @@ function HitFX.render(deltaTime, critCenterX, critCenterY, critRotation, cursors holdStates.Crit:stop() holdStates.Dome:stop() holdStates.Inner:stop() - + holdStates.End:restart() end - setupLaneTransform(lanePosition, critCenterX, critCenterY) + -- Render holds + setUpTransform(critCenterX, critCenterY, critRotation, lanePosition) + holdStates.Inner:render(deltaTime, { centered = true, width = hitSize, @@ -121,7 +220,7 @@ function HitFX.render(deltaTime, critCenterX, critCenterY, critRotation, cursors height = hitSize }) - -- Taps + -- Render Taps local tapState = tapStates[i] if tapState then @@ -131,8 +230,9 @@ function HitFX.render(deltaTime, critCenterX, critCenterY, critRotation, cursors height = hitSize, }); end - gfx.ResetTransform() end + + gfx.ResetTransform() end function HitFX.TriggerAnimation(name, lane) -- 2.40.1 From e86ff7754ac9a9a0a7d94581825bda5d1e05c2c8 Mon Sep 17 00:00:00 2001 From: domdoc Date: Mon, 16 May 2022 10:21:31 +0200 Subject: [PATCH 05/16] Added cursor tail (LiqidWave placeholder texture) --- scripts/gameplay.lua | 2 +- scripts/gameplay/crit_line.lua | 31 +++++++++++++++--- textures/gameplay/crit_line/cursor_tail_l.png | Bin 0 -> 44226 bytes textures/gameplay/crit_line/cursor_tail_r.png | Bin 0 -> 42394 bytes 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 textures/gameplay/crit_line/cursor_tail_l.png create mode 100644 textures/gameplay/crit_line/cursor_tail_r.png diff --git a/scripts/gameplay.lua b/scripts/gameplay.lua index d152053..ea2cdaa 100644 --- a/scripts/gameplay.lua +++ b/scripts/gameplay.lua @@ -66,7 +66,7 @@ end function render_crit_base(deltaTime) HitFX.renderLasers(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); - CritLine.renderBase(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); + CritLine.renderBase(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors, gameplay.laserActive); Console.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation); end diff --git a/scripts/gameplay/crit_line.lua b/scripts/gameplay/crit_line.lua index 0541641..a558e8b 100644 --- a/scripts/gameplay/crit_line.lua +++ b/scripts/gameplay/crit_line.lua @@ -17,6 +17,10 @@ local cursorGlowTopImages = { gfx.CreateSkinImage("gameplay/crit_line/cursor_glow_top_left.png", 0), gfx.CreateSkinImage("gameplay/crit_line/cursor_glow_top_right.png", 0), } +local cursorTailImages = { + gfx.CreateSkinImage("gameplay/crit_line/cursor_tail_l.png", 0), + gfx.CreateSkinImage("gameplay/crit_line/cursor_tail_r.png", 0), +} local CRITBAR_W = 1080 local CRITBAR_H = 251 @@ -24,10 +28,15 @@ local CRITBAR_H = 251 local scale = 1; local isLandscape = false; -local drawCursors = function (centerX, centerY,cursors) +local drawCursors = function (centerX, centerY,cursors, laserActive) local cursorW = 598 * 0.165; local cursorH = 673 * 0.14; + + local tailW = cursorW * 9 + local tailH = cursorH * 9 + for i = 0, 1, 1 do + local luaIndex = i + 1 local cursor = cursors[i]; gfx.Save(); @@ -39,6 +48,18 @@ local drawCursors = function (centerX, centerY,cursors) local cursorX = cursor.pos * (1 / scale) - cursorW / 2; local cursorY = -cursorH / 2; + if laserActive[luaIndex] then + gfx.ImageRect( + cursor.pos - tailW / 2, + - tailH / 2, + tailW, + tailH, + cursorTailImages[luaIndex], + cursor.alpha, + 0 + ) + end + gfx.ImageRect( cursorX, cursorY, @@ -54,7 +75,7 @@ local drawCursors = function (centerX, centerY,cursors) cursorY, cursorW, cursorH, - cursorGlowBottomImages[i+1], + cursorGlowBottomImages[luaIndex], cursor.alpha, 0 ); @@ -74,7 +95,7 @@ local drawCursors = function (centerX, centerY,cursors) cursorY, cursorW, cursorH, - cursorGlowTopImages[i+1], + cursorGlowTopImages[luaIndex], cursor.alpha, 0 ); @@ -83,7 +104,7 @@ local drawCursors = function (centerX, centerY,cursors) end end -local renderBase = function (deltaTime, centerX, centerY, rotation, cursors) +local renderBase = function (deltaTime, centerX, centerY, rotation, cursors, laserActive) scale, isLandscape = Dimensions.setUpTransforms(centerX, centerY, rotation) gfx.BeginPath() @@ -99,7 +120,7 @@ local renderBase = function (deltaTime, centerX, centerY, rotation, cursors) gfx.ImageRect(-CRITBAR_W/2, -CRITBAR_H/2, CRITBAR_W, CRITBAR_H, baseImage, 1, 0); end - drawCursors(centerX, centerY, cursors) + drawCursors(centerX, centerY, cursors, laserActive) gfx.ResetTransform() end diff --git a/textures/gameplay/crit_line/cursor_tail_l.png b/textures/gameplay/crit_line/cursor_tail_l.png new file mode 100644 index 0000000000000000000000000000000000000000..f94892e25df8816445abdc654bea3a403831181b GIT binary patch literal 44226 zcmdSBRa9J2vo6}WHWJ+3g1fs13lKu%4oz?m4#8c6yC)DFg1ZLm#@#h&aL2ggFP(lvC1xR?sN|gX4*z~4gjvDQlB7To)y5MsBNhLsQwA)8plGb1t6mX zIMl;Km;mtJ0OKJVn$LjXbO5g0xwgn3=1Q!+w=b4TuN7&g6_gFsLuPeC($;1pXB<}~ zV8-P$fi=mHVC(TrC*lg^!Cb$1S%(#7to!+gALL0+-{;QYcVAn0C@+C+82(mwvo+`Z(dl~ z+1{Ri*C(ZC@=M$I*{a8=OZ&<8&QIj==4!oTlQxjcAW$CucD-lxQn{FPA`vCnba^*U z{_!W;-$$}3>OMu&X3$&QE%i4}u`(Ia7hJ{E5mJdv{dALm%{SLr9^k~*cmdU)#9+J= zSj!B|;I5Szut2U|n>PT!d8+7d9U#C`G0_PCFqENX`|zty zd=MD`kjV>tTP;a)*-gmOg-F_su-uLIXv`NZMcdaSg(Zb*9zg1B%vAA3iZOJon(VDH z`?LfZPnSA4G|3Tztw*Z~L(~!T-UKbQA^h(tTu%INF zjnq(ApqCF2SAVR4YmK-vo2c=Ce-kL%g~A8#Aw_9IE~x-g2C2>~lu?q>@?bBb@T0&5 ztM@QaCzUDH)3;#X^%0tKafX2uSZHS7#Nn`Gd525)@zcJEkmh1&j)zsODf%$^W>Rj_ zUW4X<6@~$u`xw9%{C!gj3P2<|d=YuTSrY zcCdDMb`UMnxFod-Gc;Dp@;_kn#_3A^$ZyoBQV%P`;c?3l91Fr%R4V>a@O6q9OaQ*I zuG)8P!Cv`Fu9^zbo*X%l-%s6#yYxT@hT;VchFdWbWfCG0S`m2=R;4MI5KTo94SwL@ z=R8c?OUF!i&;q?}eCvak@C)_pyRYHX_sx)c?iUi9DK*1&meCV zH;$0Kr@5fHQi@uNuOcdRRmt|BE!V zed(1vItZ~2ofdHkeVkCFpV!Gjgp7S~>5sa!L9c{#vB_7H)Q#YTW~fNvj9iQyX0-Ky z{ub?)-GJRdAw42J6}^(mZv7aQO-H8z0AGLxy-en z#=4(%SsKe4n=BM-w{=T&P8!?nLv#goia}bs26b{jvVYLcw*F`>#V&1DO;Rn-nYHSz z{?jt8yr1m7=7T=gBQ6ym40!BHRE}5T8y)&-R zN1@e>@vIYZ-~P*#19mIW1lGhn_f{j$2veVRwr1v(ycK~}vrEuLcvOVaml3v9F}6&S zft8{5?RTzMP6iuZlULc9b(uZKWlL2jd?(f?VavIrJh@CcI@~Uh-XZCA^&O}yTpag!a}q|#bX`ALBvqbR9+A0 zvb4*Z%)LyC%xb0;rpR}JV&B<5i7fKB@U(~zuvzMi&VaH(indCmf^2Uq`Rr{w z)*g>9!Zx!v(YCw^(%6R#96j^LdoDvt@xQUXVG&A^P!3lWNIsLqdRvAcO?QstK^Kea z*+bT2Ma>T7gNDyb>%S#eJy&?E;+1%m(8lXY+s|FhveO*Q@GZVg8K}IHDU^es;ZAAC zB`Va;8I+h1?bKRdrTa*QMM&*)zkSqCcJi-C!!~vC6$m=4sEtx3`yX@} z=iVaKT3KjYc8*2-5=<%2VIDgkt^2hU&!2Ug`}g=w&zp_J#^O*VZB{bSZhOTi!CDa~ z&n46?JOt*@kBAi_O_7an?Pk=#_Obr>>RNV*J#~z6sWqrky1B4Zq^ZrKba;GBSo}lLhszK5ANWot zR~k&_ZtbBbB;IY;JV!H2dTlpPV#6IvS}V07^LWU&OY^E1@Zy4VzLG{X&hxdw-0Vm)^5mw zLW}Ov-W3~2QxxuGR%Gm-q%zJkZ({&J zC=CE0a7Z-jmjeLuj}>JkKYU(1dNN2Nm2ad){!Y$)6Ru1N6W`|ha9uGp-aFJ0bEG!^ zmz}v5bE=A&nX6q`lxxbj^Sc6UI<~$1%?9bknKCRTNcLl(mOPUpE!S4>iiq*=J*BUS z?-_AXLweXlX5PHqrSg%BUInt0FCX7C!ZN+euoYfD{*SUqiPu-&!)v^b@n6sVHyL&O z>oB;1|Azjr=l+}QzkS_*J@?;a|6i#P^1oK=KPvpME%RS9{%_X$pRDjd$^K)R|IGOR zR~7z`UY!4O$Nvrg_`iE`{b79;%qnNF z*XaT$Zi~S%&ge{Jbyg1Gv+etF#E8uAukDlA_0vf10e4(~)Wzh4KC|z})x%=tpWJgQ ztz%fcmmu*!3GHLQeOBU|YQFP3;)RcXeE8ZGM%PiP$Oe~7RjroLmzqPPyR50GQn8&}hW79`k7r^R-hXBK z&YFj$C)$^gTx>H6!*kr}UULEa3Hr`zT=B%E$c<{r8@lmd3@l6D8IR@1lz`QQ1;Ttdxxp_o zZ9@Q#<~ckJ>Dh%nd0{#ByHJQ2C3Vpa?=WBkI?o>1eGL;7Hmd$&Hfey2o-iJ4N)b9r zk_S>ta&FVdQYe~(#M?q~nqURUe*5a#UlItnu{zLJS53)xSXpYh4pml=_f2EkJZyKt zb{WnZ8kTfj67}4E_@m!>mho&q1^U|a{l%A{{kd;^eH82e)QB5lA*Wklz^LJyb8#71 zaA)`Lz1Zx?ChH;dOL%1@?i}p;_T8em$MgMAt~i0#Ba^y%CAts!2{>q4ei|INGw{02pW@R5T=EzyPODJ16Ge2*R z=|ujQHEKU&3;M83-cE-;MC^IV;Sa6}2T%}YejXW|I-ekjdrC*2tyA$+^R&2xk>z|w zUB|Oez)WoOaSwdbmweL92IamTAozy+VrT!kgn_|u7^AZr0{==RsdOf0s-a%{1J*zv z>Ln?63)Q!B61JE!mVxmDy|YK)KT9!PO|U{J>pp7S#>ltoKlk^x!~8!{MDZ9V_U%!} z8fC1$eI2zEwPRpx$L!~wzbR`UiU_r(fWo?{ykI^&hX4ncF z4wolJ{`og|#c>bQ**AOCaa*UgbRNSzGhwuW?uQ+3BAC&++|ewdAs^Z@B6z5i)B(v* zh3(v-zzQ#9wr-~gxP6SJELa23I;AV~I40(1(+JqS5hzX~@mSpVx47tn*XZFju&Lua z=jAS&h4og&#?=5F{yJz>@SDV$Ui^#135XKoXMKo6d|kWitaJ^Xt;Ud9$`MAoUi1op z34~s#k`iAh9@$xS`wQbqm5_3izrFO|wCPAc`P>@ngqM_=Fj(b>^hUidy)(gD zv9e*f^OR>|gT&*x-yw%Id-qC(;Z^x^8nhZO%;K>>JoNT61Agba)7?`DR8IJ-3wH=D zY-*WjmqemmElL+`njnxwAuN6KG@F6}3ul?m1IdC`XdAu?`($)wVFSQMc~3rUZXg4k zmy@AAWLRnws}(cS_*}K=`I6GlGFP#mXER50Nql`^5KZC4ig|{ahI=ttn|)^O8vgF_ zz*PuB0Egx_l3X!TE@8YiZruSo%4^<^bX_}yQQdUtw#0BnN?7Z?#&Gb;Ij45~#MJiO zv~UTZ^fcR?5YCEj>z;JyHmZn19+_GUUlaU>HVv7dk8~|rTQUsBC)rg;$P8YQo7SD9aJm-n_70ox{PFxgkCL=1s;_`!|#Y zSGVG=`f{i3+eLvp&zyEm4^LxvNNr= zj2C$8hXp_Xrle^A$D1G(xFYZhWOkqfFc1Tb6@%xlVU@Cx8VpcZq{PVYmXEH%M4G2o zZ?J}$Hco}HkIjccfm_35(k$pN;&udzrs;sN43*ue@0z`ah zv&s=ZF$XX9hddkVMmK=9MvIB1_An~n3m^zAhm4zx!yNO>8-N`zPi&oa3R99Q%&NuJ zOsu^N_#?E5NmStA?I82@cIMaDQgbi?wt!#;YzBZ`<8=niNmm@A2(nS7O>tcOFNcK9 z`vx%^S<06Q_ZS6(J7m5;^{-qh%yn(~^)F>V;1oWa@aPZu!H~>n=C29fXV*1gRq9d_ z>qqG;F)X3}C?Yl&{CdJ>qR^H$jiN7U2$PPYy@VWgOPdFjf;0y9MV6(AU^i)#?^oVu zGO=*%N)wCWNcwyWFfFeCXXDm=xLidiU*!@}8Vt2JR5`K~Q;pJc`qm?O_1*NfKY+*P zN6gjp#uvb-U_{4!7lVk^z$C#%Dm(h05UJ*HJyp+mk}y^Yn_6I7C5EqK8Oo+sOClmS zlK%W|XQLVJd2&J2eRJ#WS^-KyLHtWJZ+H+n`JCM3ritY)3*=+L3icDaJMtl-D?x_fM~TC?l~GOabQLgpWuOOb#1qR&`rk9Km zBlrXPfvh3KG9ap2k2?bnvi=761v1H~OPvH#f!Hx3Q6*>T(^|t#1h4swC3lbyWjp@) zjziC*28|N7Pfm&lr^%jEq%5$6`N3IAm?U*>U^Q4Q7(pt`CZzgJV~%pEY)6aP3cu4k z%ND|g&`d@9Gs;-{YV1{oCu4}z!MzMPA)|XquGMu|wii+DtH%y!>E(lWpCi?UK0}!M z)0YO8g4Y7V&%+x2nJ8|@iaL%IJxh#SX|))$q;%ktV$e_j4JPWV3`-j=@r$4~#% zzXZPiewKxI3aBY0$B9k&a%;*i#_N5NFQnHl#p8fNMwcpmA0Q~o4JStomPZ!fq{Df4q%@7tE zmG$hvjyxD3hohT;ogXHifH}-q3pmv;AKzQS?6C>6_e7j=hbQ&R2xU1-s8DMskYp9X zQKBp^1PaHimHc6s`%A;gCXG>G9W<3Ug&3o1=t}yQ)*gOS0G-q?0`K;e%1#R^|B_nH z$`kw8uE)vs0RV`Ty6^QZw+XEew%#`u%50oQLzhkiFp z5vicS7P+sw5>v*7)mhS6)7t=2IAbJXYwh9wX56KbW-JSjh5UhwI+^Z? zqQ>V%=sQ`ee+Wct;8qrBO9Zfu?m3T)w^{qlZROS0K8sMl0!n#lF)(KUFJ~Y|ME6Sr zSL2R7p$#yHusH}hq-`#@E5nYR#HRv|)J~>v!r=+#@q@By4a0gj#orjik$zbtdbBI- zrOm%&kC1zN{u(pS^h4`PFf1*3W!tKrzw4#k0Y_4M*;F>VAKt`_kn|pmJGLa+B%OS8`szr0 z*2?TO7v72>04Gvvx@FjeZ;aN5FJFuhOYegEDUtXfO3?w`Z>{M^=wag>Aqg=tuyPu9?A;;nFqxH1I!lM1*w>EzdGTH$<5^kDY1UniO- z>hsKH&nJZ?3I7`URU=HU5EBk6dkRMW8dnH zOWozW8!&7v|E`PHUGB`#r1qmu1<%KSJ}l2d5hdkJll`OR*QKf&?1DXNBXw)7oi=5d zt_L?#i(p3Jh^am~`pAnDuhxjYvtdwEt;ASWZ-H|Xg4@Gu>P%!%XXvT}NHPo|RC5Pl z26#BRV#$4GkV_h9@9pHY#SFFJWJ9#wU7Uwxy4dz+3YiDZ%G$$9(n+GrB|}j}Ebn8R z@aDvY4%NLtujKml-2PN)tk5rTc$%j00zB>!-3FH%S6A`&;Zb-4@RK7xaR@OU4oK1p zWc!i7!f&+7qi2Xc0$Zs9YIStBz$R--ax@H*`1rn5GP_#4dI$I?3V25U8EzVe-^8^$ zvxzmJv!K#}IOSn?_H4x_-u1o=;r=-45~gTJLWTR;SKj zj*dRfZFWT=yogsM4)eI{Ol91bMYSOY*3Oi2XMBZl&GdtsG5BVm^Y}O^B333dY2K<1>9|-rMkwfyqmct1} z(d|06oBF)+`N;~LP~E+-4W5U9or$K=8|{*nb4ru;ERh2HS%-`LZIk|r%2CLYzeL=c z!DYxS*Kx@smM5PJkOA>T{-{ZSY5A*oL%hT069wiat-tl9~W$_~GHe$YH1(412H< zo!tqzv3nE}3WZ9(i$-gZr)nBbJKC%2&3H^~nALtpzUH z@T^x}yUh~8M6dQ#&Lfe)$jAapZG|E_=@7h_Xcnor1$87|)j%KuB*WJ0G&dwnqiUcl z?BqQENgfv4oKiST`kY+l!z!(75c~8bO)Zg1n+W0T9B}R{NT3PgCMz9O=hOu(Km%jk z1E71B;&i{$?b>5OK?iuI>~s4~14h(N=e$@-2`^B+!5k;m(WnxTtELU3pe0k3;3-24 z;&<$_@u2g(LtDN#1(APbaS&Fu>$Mh0r89JNGHFJRqULVk zGd`|9>8r&y5JZydZVh0&0Cv1tghxl!BS=BG%ZRmc$y#-{#bjoSGRd!-@`0|;0LMss z`O^47G`xI}hYv*8%6bjU`+F>-5*5Q=dUfw6iW>Zwbdsx0U$NmQ7So^iJU@d1r<+8t zP~A(NAhr-JyS5*8U@^$fk=&K=)`3B<7bXj?D%LC_%NtdaYInzDh;^}QxszR2t;{9# z`dOzZCE3nM@yBGqKG`y{>v0db3(=&wdIc`k19+IdVLqKCER58Gok^Gw4n*fKFLQg|D}k5z=w51M)uQ@ zsy+qF>O-3&@27-1PewR?(rrg=YxCMv=$~}S9{D2bW0QNY5+@$LPf*34?vCz7iLHT>bmA{9MfQDOooAQ! z{myC?bpfg-2l+!ygj@w!UPz-~kVgq8kI}jijIAD{@6s?p+9GpO-n53??>3l2rbKHx z^lFybMTlzN{YG>{R`DFQ%eyLDt4>;G5WBv}P8f<-CfD5E-kbg7aUod7So9K3+VpW% z0%TXkRU61x3oBcX{k=EK;`Pu`NmQN$QjT{jU(~^gLMrVZdgS=m4#cT=AOjFBi)#he zM_4kcuxTI|4XQUQfevO>=w+GG4h@$fhNM!)B7UP$D3t~sfQrGGhJja^13M-rrz`ln zSbC&pq})iOeF6kX4Nx)n@t<^c`h}(Xb!+!6k7ItJXfIe@b)*_=boMlu(>sq|H4z3+ z^ED}C>!r4X10gANAHnt_wj>eSz9H#HtVv&RJ^_&vryzYY2XD*68_&u|9m4f3r&g;d`qp+`rREN?dejGb9)SVvJ?Ti+b0=eAAq5O8c}a_PU+cpib_J zsOlChk~T<$=y|x1LgPWGkav6twuqmT>J2vEk`F8DMN}YK_tTZZe$;0B%NwoMbTtb5 zgsXOCy->o{V{=@n^gHz-U1TRsGIx;+@w?%S8LOt(g5pW$P3Ps_ec#QU)gZ1s`W*(P z{Sjt}Im3e-U-vx#$YIN2$00Gp2@&igtb(b%x$``6`=^Yt?1mZP zIXQ+>;U|%)HT6fL_Jj)UVZXzG=yHT#bU6T>c#~=p`jt&JLl)}$1qnB^GK@uqM|0$< zp86LFF}b@Q72aO#+;k2!u)Or)o(Brz*3gE1=n2FNW0LGWW<-jrHl66>qusU97Thz+ zp)>2h6O}n!@~eP{{LFLwK%2M>8JFU>h4o%oDvzSNZVZY?-^!)`m|V~F#K#Q}Zq4G` zVz?CYTWf@DJ@Q7#C5(8iwnXnP_ew0z!&2V!+F+AQQ}da-CPML-=-ef;x1H_vSKU|~(3Rls zXK3C5pvZ@J&8Lz3f%vo#tXk@UxcV;^2IjhSdsPCDA9o`A_=17 zeUGSn^Wjr+K}w(_BZC#0%(_TW5OcF47VZTl20HdG_E%Sk3KXRgRmAO68{g$m(b$M+ zGoCqW=Z$1zCms?;JZ`OBV2qT&J*x}gB#UT(_ zCrSI|_i}WChcy&9-IuTtKDx8wyESUxaL&$zQ2$~}p%wRsH^4lp^qym)rD#rVN~AU+ ze+tM%6y|fqNJCVPbUDgvFjzDnA0VBxsKgUbX}q7;J=AVtD&zT>kG$=nOlb5VUM=2@ z_Jop<;yJ+jKvpd%fMwJcKuB2_GuPD3F&*wmKrk(N=`H;?Ec7Y|q<@6!5GR+9ZJX2Y zAOl|;WlP7@C$;v4`~dRUr&o%P+YrfE1g9>Coe@r7&^mt_u|q*T>n)8`7+#sqMe<3R z0>>+7X~(@|m%>IQ?eH?q=0<7mp`1POZ;sfhEM)^cp64UpF#RC~LlNd}RI633!}_qI zOZA}K5<0CZ<;1y7f-Mzvykw`lx`VeuX<9Ia>XItMe9D*>1!;f~otC>N52NP*>0@Tk zIdZ{5F3w7S8m(pG0+t=)syEEN9-4e#oi!DdR&O(H>z0ZSPEr04gFDXUWQncfwxF!T zyf@IlXQ4*y@L%b%75hi~7TN2!h%dlV5;xZ6ndbD;b6D6J$xU`DUh-3L3uf>$UUl1V z{WbH46IixPh}`EQ56=2B(rQUaAY%T{Q6v=OSvk{W&S%vLGFE?ifNcQPZ%S695lS9T zTBXoJJ1M=coj}m)r2rosK2vNuw0VZdyrqCD6m3|k?9#dOF-HY~ppSTL0Iqz(?-iZ- zz2&bFz9o6WwQt)7U60iOtAX4*;o%}Iwg((8#H3_!%m9*c%Rc9|<~F_R9M;S7O2K*g zYNcv$v8=qi@c|$0XMNkuKF$c4Fn?yxKKd`#LNmdiDNy99TOn1bV--m6TUPiOc z%bdtiXu=~_M8}%Yur{q2WAeWY2DLJacQpE6H+=t(sb=g^n^kg?1S-Q74_SD^L6y+S zU%+~xB~Oo8p&P|mK0;o1jX*V@nRf%&a|(Kb4m3`J$nv6+#nQ|2Y!F#Qm$k{1+PiD- zTq497S+m%LuW3f_-LoEByg`;X>nIJzs9qsj%#6MM1f7f?3&e}1`@OBZEZ?i3h)--6 zuiT&&PwMOuW-K42CocMiF=1`=a;wIabQ?T`vuLO?u zNVN_BkdB^C&b zND7?iiCgMcc=}M_oPOzE(04+Yy9|rHc9+y6`Ph`+$_wL!VNVwBG8GycC}0(_tJz2^ z+vVun+;N`{K6RPfooL_v*N3nAI;)FKRD9>V7E^TJh>gpOY$%D*n3bAW`N`F-AIk)8 zMsLo`u)fV;-soq%E=89!!hT|R;Wd>iMSQrFD`TDw{%9RvLFQMy{`NGnJ=7ZoL`h;O z8@j7Ni;{cHz6GbF=L%$v?PyO{=}=eFO)xW9AhkTB=l86@{AUDS^QD=Jb3PnBvm(O|jeN5g1CgDFwcdWz*3f)pr$ajZ!)V z-=HnFhF$?{-h(scO_uuk0_aVLr?nUr$GW>bjekN#TQp=0TB}8-J`fD&t!Q2ip7e zE4Ek7jEsu@D4iI4E(NXOd}d!4#V`#71b66+`o!BxZzI;hw8YWh$fZiEOCvi;UD|^v zgl12Lj_{fVY6PZD&1ph#qz5B);Q9MGj5&}rwdpjqw$}T^?4SLki!@Gt{k;4*8iwpD zxo|K8!xxr;Gs5hASJ_K0G;0sa_kG(gJ-g4<%zp#54Olj|>%-0n@~xA0m={DkSfiPX z52Fn74>^1-m2jV_&664&81efc&kpL zO2J8Rk<9VF(ZtimR8Lr_uRq&BCP}1ihKx)#$XHB*J5lcv@5Zk1n5|K-azVdyC-vw` z7WEbFwH0x5xj4NNr@G8V#Ju32X#iqfN}6Kw>1CHMx2$FEl>N`Ck`^hExv zz@6@Yo3R!(*R)S;NWMME6Ye4Vc(lZ8$wqoaJto@{t+#lFt+Gno<`!Pg%Q6D%4T8K- z+!GCfKh%x@1LIWr>A?C<(UNR;lfJC0&tid1#Z&(g^*8NO%Tb>gwV8NDpUSv6kBJNNeB+9qHDRoVMT)Qnfv!43x*nD_x_;!dDm9Ltu zvQEHy72Y8_Q2XVe|t9C>fvJ9141yLLl~b8(QhRJ^w}-x zC4-Jsb$Jv6sW)`je-js2nr|Gz+8*po=Ux_1dh2bx5~*BP|a0VU@>o_9l5`nuPSx@b>J( z8z7V_Jzh1gpB}qFt#ote!4pMQAE5I87Vn*r@8+rMy43oEa(4x?N-62w2uOlN3J#4a zcwdqO1oT$ zN&dz_Sn2m|#(P&AARuv{ZP(a@zqZr9`sL-0LJ!lxYR2ey=+$Wz9-KeiNq&N&^o|Ne zYF#QzX0JIVtY?8zZ)AjB&{QdbpqSCbUT>ehHbmva$xFvWHm?$pPwWfM;wLZ z)RkC~=r+&xevML?Wbr3!?Aqu;9jE|OJT`~x9_DN+ZI1Ht2eo5eV3ZD zfOg2ouv}<6q6nA{Q2Eh7uncYYfFO&r&BmDfifcnipB|7F1qFASnr&SnrhmopEwa+x z>I#gZ1V%nWpra=U9Mvxv;H2u}wSv7F*Vf|&Hj^ax(%-G`U=9Cv8T0d`yj6e6Xp0!{ zb>DR@6#Y3GsL;Ie6p(qX<&Ft;s3H-h+)CjlX4{g$nK%9voFRW~tfR}g(qU7rt<$th z%1261kne~-Iuu~7-7jjAlC;y55P*RZ{Q1uldD`gkRr>pLrVhg6UczYD4t-LLB@t3I zBdXY|{6bbBRm0{{FtM_V@s>o=$dJMoQ_(7>wsGYQnf)S2oRVSk&duQB^`ynwUCho- z{363HHewIp07m^5A)s_xCT_{6HGahmc>-_S1WqNBn9R~NsSsF(Qq9Z1zSzfUSmpWo-O%a5W<^~9icM>>{z2aO{Ar9TyZh-a!&F$KCa6N)3)a3(JUbBh<~tpVIC zg)yaRjA#FujKWzuJVt6CkU{GrU;&n6vyt`(K{^g>OE0e^ifX9KoVvbxX@v<59R1q7 zIClSjOl?CxxY^Rz{#f&u(=NwyZbsPyC`BV&x9lM6*0+wR7T`OzK;C2gouqjPLaM5W zSSGlFe@-myirW zOaRQL3Y<+zMb2?Y80@{WUEtlayOO7hv-5=I8dDrKLbrYZUteQry|@3|7Ac{+63#pm z+SPhmqk~ih0-g;V5>SSMb?pylW{lC^qMz;9-y<7Pg7PblWyX)Pr*VP^jl^MZ1EKY< zp?YwnU}`}yTZS;P{(z)&8q`|B;R2?TGDS12UC(-r70e*LMB9o?Xq*Hlw`+SxqC39X zj8@rH9@Y;P!hjCbMzeNa51EQ_tY6#-B5j753ULP~1SNyvYzbt2cg?{s1Dt+b{MIYM z0;kX9`aVW=i(`v&gX@Jz#stmE^kCbBa+?DEhj_COANsf7yZt+^aFf`755swh2;%@? z(Ps||9n-Jh<#xlX!yIObIYA>u(`VKv!wzIovhr@t^Pe**tsbkME{GITkb{NGC;uAa zDDSQ;dtvWxMTWZD65}uO@C*W_UPF5sD+g^_;NGqLFyOZVjGA#F9m_0wkiAp^MnWWJ zdDT0(_o#zXHwb5lKi&0{cJrbv=WW}gX`}g@OV;*?wXeUQrAk)OF+R#cQT*=S zSWk9x0Z2Rf3MVAsJA~Bq!shajxlmqYdU=EFXZPrCf_YGj$ABpX6-WwzJj2R`>E2NXw%-Iz0E<#*Ze|ab8_rhy35yvamuW+U zkX1in53PRXaN%pAP!|eN=ZutL&US_G5rfj(9Pe`9@YW1=E8(*y1Xh{*u=o2Oq0eJI zJ8ouro1SARh0}~YHwA>_MJ{gSK!1@?Rr2KI)uko43c=^fQZ$51Ox20Y|AHJ8r zHVn(Rt7>O1*N9MxaTaGConZzPpth7qqx~f&eG-L`gHMShEJKCZPxg{80Zf5DE7>x1 z$da{(KJXZA^&wB^Z<{O0?Lx(dZ4}PCc8axVTuam_s?ZK3yfBB|y2~SG|I$5%!t1suG(QCglUb7<^T;~Y1#ZZfCdKYeN&&|0^z`)a5A| zOic`?Ey<{fCCLH`S8H`f@A{{WGb`XHrjjzYJgD(r$ni?#bz^S}#NZQL_3_6bffjUX z-*I1U0ra!Pv@Euld-RfKk`jy?7fR_8eO?;Qy0dQPVBHo!MhNI& zI5W#|%`&bXqA*af=MWf0=$)+?4nKPi|90+(eFVGMod37?%XMR5HV1)S@MFYSvL^o6 z*8^sYVv!l;Jk>6Yq@9VeBC&hkrOya`F5VwD_s*K#cUG5hg)y0GMC5cCj_lz6nnbun z$icW0pl7|gwpEd{Wu5IaSvGEo$1>*P&C;0N9@JmTRY*@p@_I$P)?WGK33fn^3~v^@ zhZDEI8;hQDtcwg%3gRe?OFoP};wfxKZ${sE8qC2O>ybnBip1xlFczx;s}}h!`u@tx z-x8|D-bnCp#@+<8O8wWV3_N;X*zJbc{m5rLeZB!0YkF&*imU?8I_@eJ%o-wbO=w5Bpalm%7f3tVMOj z!GA=?oQDsX`y4%FY0j9ImtF^LZ*Egm*Z;Ws6{mV;-iW`RpUkd!6k!S8HkvU&aIRaL z*yde*>$SJ5?t3}neaqx->5=J;!`oJlv|_9l8i`1O7I&g#QD5HN5lUXWUO2AnFN80_LVrurkqc;Bug;4Oe@_K{1 z8hlO}GfF86hrV=)biwcnyaT;WJTHn0MxlAsF!{%`71(8Ip6*IOuUh^=)ZZoPpCTd z0>be0mF0%FC28Y%lX$x`ms#5!|t>hr7u@u#GD-UlSln-rtDBlvdc^+-Jv+El!XU%q^1q7 ztHWUzqW7@IHN#!oNk6!obQ;Z9^b77@5bIN2o!Cm*Br3D@0-RKsWf)chRUrCnMvkI) z42Bo4zu!44Fa35I0SxC1y@5wvoL}#7B=Tey>j9zA7FuEy&c|P265vMwB^;#0dFNXZ zA5!Ys&J??5Zd}zf1Vl+-r$`W~m3MT>0;CMR$`)$7@~`!!qk zI*`r{nfXS#bNMMPwjv7if}$>t-(;epNo90s+By<0qjT~(kXG{rSO8AY_#2f6M5$)) zleo#hU%vF-i_Yd^<@^+#Qo3jY09@YZMYro011R%~eOBLS`283=C-%0C{e|IhN2Hzv zkl9p+Z;?Nkes)CD@i2tZrw-j9>vkYsJPcipHu!aqWNcg+Xuey+2N;#P&=(F)CZMSF z&}V0jg^lZCCwar7wfgFhHYy$l*yEnSJ{yRnUC^S0!NOvmQ&$rwi%=ii4I?>PC>GJt zn6U@&S|zMK=5s${>7pHmSCQ~Q8n!}wSnFB=8~{9QjOE_j`}ZBkpKK&dvG9Vd@qhH32zBZsCgJ!C&`GJEB#EIz=V zg6rFLfFoz~`qtd08FlZ!B33(&^qH0`z3OWf|BrP12B>3;K4T;+JzTmjO`j#Sqb0vP zJ245{lLfW~ZXb9&^X1wgwcWY^=bEreH8*$XsOcAR@WaLZ;PVZF<5JiZckUI!l67S9 zDR!8oF4x;XBp##R+=@NFQr=E4oG0sh!mkInTW@+8Tz`^01hN*EsG8=_(=sf7V_i(I z(Qz%=A#Nn(**I`EApv$3Wa7<^9I9vkJ7P5_%kn4#pZL2vr$k82vVg%D!RR7Bcu0yY@Rn-P)psZ2> z7K?4bipD6k@~BP2!_`HKVD5c)1MRIs+bgWW_2044`**nT4G540gE~fG=0Xf$=UJL; z@(EZpcID|IHo^8~Jn5r?Am^a_tUy%`rvuNuWYY|G9`#y; zsEM%xo(A{0zkm8=yu=U@%ZeK|@>2?Y1vsZYt=O1ip<8M4(-KGUjXwvjTMDyT#_^mC znRa@74fer{8vLV@OEQLF&D`QUv(c`t=v?(()_?R$%STeoH`TUw%2t$@!*$HMl9G-BGwMRz?IE$g_%htI>P^T!enQ!P zEdLKlSHTulw}l6W?(S}+rMpYIq`RfNyE~QcR=S&^5owT)p+N+OZn*f}UvSQO_StK% z_0}#v4{VOK*0Q;vo^JA=4ET^D=<;`zy;)WQV!yQkV`x@C^EoV_E7S?E)p31Vf4qeP zrEqrT$ZXtO`kH6V6S0v4$!iTxC?I`ZG$7$WsM_hhYaTbhPeT|wTy}r`gM`J-k1&gn zDNR)lWy3lQN3=dS5#7dgorLVe1I`wf6{k?+pZ?H#&RELm9}Uc6u(u)h!e2e?ZSAUH z34CNCIhb}zx)||R>O*Dwf^P0_O(YKylIi3^gwYnW2EMvbZq+6eZku7t#T*n7ZHaLK znWI>g$n2s|nolhgx6;UC=Kt4*HS-Qr{St~I<=0jGvKtyG%jE^xIc5mWp#?|U;7vgd^yGa;V)UA3DBeKRNtK$M zgLV3TcGV|*Ss3nLeS5~-9B(8+eyRIvH&xuuss8zCSy}rs{>Lb|8)f1Quuu^e&4LAy*YvfFmsd$4bsF= ziFii*!)9OyTc%riGn)k2nB9QR^3EFnPlM*;?ZBo0-ZdLuabn2{34_9F?W@v?M1_6*YdFGDfAuIgiyt*$-6n46mR3Zhfnz$31pPhS}w{mkc6TD zFNv=6dfOm`{cI_&IR>ux(x^neG-vY>DkntX!mQzzt!`BNIg9b1oElC3FpW43@rb-! z;cnc8mN%J43@vjwvx6}TUL$7lh7}mnSOMZecnw@&Q|K1!UZ`s0#tt%?$-Pnl@0{Fa ziN9a#`B~ex@MP&NwA^FqG`Vy)NcSFXa%0WLSICp+Hu3=BQDIG=Y>X-tRg`QOqCaV+ zpgjyb(1!e=$d;Q}`!p)jEx>KN3ITj=9v{s0>*-87>Nx%n=AI5O*%0I(l znh-gonP2w%^9cCPfrlC)Jab1kt2Mjq0wQ-fd1o#vsocNipDPK;mE|3_oAP8^N4j-E zf!@i)89johQu7W&5w}j>a=%>r`m#QA@E~bXEf1ptv_G?Fn(7;TxaSkR@as0s0Aa+E3_%$VR12+=As z*uk6&KGY&RWw%S|jnzhZZYZjhL9=~rZ4rrfaffq{g!>GXnzJ5V5IcJNF#agdGLMba z+f{aGo;x=t5I1^z#u9~?#~=1l!+2=Sk$tZrqC3X(*vqg);};&ZQ}%r=@?D-ijCfWs zo$R!9Qb$&Z3_Pk85xYnTo$HE4cW=}^^;tl2(vtDM9v%|88X1k*QGMBuJi+_UraZ}=u&dgDd8M`3@O3Z0luBMcK7!#B zs9Da=`he`PF##TfqBb%%XHE@xPnV%1WGewx%e^_*31{WDtuKt%A(@GHVa0XG$_iCq zk3g#>j95Yyn@b&W3fjbE8=v`?2_(`a+<-YMQ3EKIFf-yuNbw;Nqzfl(zjGL|7&ZSP zN7(R5TLMsqKSj*SbF{Ph6DWks_}JZ^fJ(uP&9%#8o=YLT^mgcR+@b!l+k%EAY4SvV zIH6%T%#D^yb(~r-3|D%M>0BN1btm5f<~XZ1at=>5WfYZXXQ^W^vd8WSR#h%A@-I-V??>%1L zye3LVihS>bV!pn&86Zj_6Cf4s<~u$D_6yr&1`nFm5Ze=E16k}SCXOoY3d`E5_8VFq zf?tr*FelGk+EVTzaqx)95uZ$PUtNE=<7cGrXBIz#J#0;=a~=U#;&I^nfkAx;LybKK&s ze*!~A?ip=Q`0U+tpA*c(MWz~bkM<_eV6-)fC zi~U}gg*c>gG~Q?RUQ8FQDZ+3F4U?XRQP!A}tNY9QVRI(R;ewHloD_oq-X!SzOtt7= z!l5Dce=ytt>^c5}m_ybP8~xtO3;>1DiS2L2U7WkzB<67vop5f~VQqxiLl~upT%ENm zXwR)F=bv}h&C%#0sEFt2N!{oyYK_ObaakB(rJI14%Ry&1=RSTR+o%L zh|6Rw(%s|fB{`!@PzKZTUU9f~<`Zmymf%F(msg>XZ{!uOFs=I6WpJj6bIZ$f4!(}v z9vPf%&L8Xi9lzS27(FpmRsH9!zK^BG0J$zgYa8qz{i&ao<8>|Rmq+E9t{fC2hS`8c zLM_aazP|Y0f0kVj^RNtHN8W9M&To6k$Ns}P$<@_3;WIz-QJjzwvZ&P36<|^OY1&O> zGX1Vo6pP5>rNA<_JH$sLtw#%*hbvT9fQ4Xs?3oK zkuXFnVkH*NnW#KiLvST2A1iDJ%TbZx1g1v~Bs~oNjkLy4YC>$-LwNguO<pmbi*aL7%5q*Rf-~0i;9iHq`7!tjLoFnMe{E8OC8j4r@_vB;K zZymxEK9df;OcYZ|f4-4L=9r@uu2g)#@f6EmCRp=k{W*eZ- zuZ+7+mnMxdKK)+@K%ds1@%ns)5sY4liJ{#Lb&alldlJ#Rk#1o+#(15>3@=HCOwr7> z9Z0#!y2mt!v)7>FI%wYH*3TJXX^M%QWMkz8W0B}XFaSTqI0NMc4{z4#gxB_h5iHci z><&UCLW8~ZrtFaRbKI>3A@9`}PEOU}=#a!mn-7YphgL_}Fic^>7^U2LLY?EA+78Ui zbVTQqeaIHjjkNk^_lJU42OgouU7v!^+8=NMp~oJo7%P)IJSWkTVteMFkrh$X6Lg-2 zN?+4N*52T+|Mi}`}53r<)k-H40_PwPSsK3oZ%!uVa4#c^Hm@;En50bXQF2N0I8 zK6g~zl7mGjfL4T@>+fMszSZJw`T^7@AN?lfP-f-%m*En^AW+%p>cm{E?S~+u*{I$l zB0Qw`J^1?J9&-kUo+Z#|gS*J{+gCb4F38ecbAgATrqS<4k^@^l ztP#lnhqbhsf2=2gcTWZFoH*}ucgk4xJ89lL0Se)3qo+3_bl)<=+gp(55mS>>Su<`) z_BG{W32@ANM=YuFZdh@zdx!-&sTJ9zQFI3zywHAm@&NJdTOhnUZiHU~IM9 zTKM>;MxlNFCQ|;O;q5h~gIG>mUFA$EfUOH}L!E0#iUJbn5&Pl6@cEkJ{gY|m$XEsV7;|-o1Xjzes1Z~Izhczw# zD;!!e7I6-3cLX2|gOaojC}hODtS1h9;(_S_b+-?#GN9`IMdjWzdvsLK*w-z_FlF*t z+x=OOvVJ*a>8`(%SrGQOhNptIjeO7V+n*#a!|qNsUA+F5YgQ#>&YjQR&?X&D67A?Y-?9e;stmRUc}7o%%{~5jeX-JZTU}%_KVZoh0cY`|u;qp(kNc3@vm8 zUGE?854c*?5qnvy((M6r-bHpPJb1GNUTUGmz#gOHQ@`)1U4F54*FR70=IsnF&myLa zzfeRNvn5!9@}OGP*5-RymgtXmNW$=LfSKIR#2mt;62V2ROc5biCS^$%v`Jv49R6Grk--gShd$|4V~<|j`HIuyQjy>4Z zahKSX^Ek3`T&`MsqitygEU3ATTQLSLw5Q+519B>{Syp#4Y>02OSwk&YRFAkUbawPI zY}jVy&cBp%*CELDn+cNZej!$)Ty zddM-&J5LhWE!OGH7q!l@mg!d=lgY_dg+D@J^3jg6vvHq5SiiQ1vo=CvHNPD^l4`tW zUHR{i5gf*@e+AU?r}o4%<*;3sN%y`={28AC5!rvr`3xm925Rq!GLeD&{^ZxCUbln& zT{bEou3r9=$J&Zd#3Y9h7rd;e!X%N@vj1M;HdosC&l~e1;Zv?X4A`Wh48e6_E5RM> z+?5~tsQZgI5w;(`exujeb19z}nyB2-;T{vUkm_rnbT_f9$7P4yAn6rlKX_@KPg>X0-Fq0;=6Cv4|XW}?#fa19|ONQc4(Jp0$ zqOzS)WQVe`ZH0}jM3vc9JiY$9UTNMvD6bQ@klN>s)b750SsQXJkmW|# z)3#-GksFR0RrOP>$;#$X+P^2&Nx(T{yjunM+Hb0|8U=AQIx;WV)Ig$3Rm{3ueo-u? z@rlFvW(|X7L{)|Sbrz)pXgUVVd1p0Q2_-gG%B7HDB%T8s)4awk$53x4!%fiq7d1aI zd!a_wrB2k|fsNIW^@j&jS@%fAWeB`^P33Yd zL-NqaHOH4*?>P8D7u9-^D|3^4-f6>yI;qFIHiVK6(UzR~TDLR9e5QEQl`z^3uAb-E z6w`=h$gH%C0}<1%+(yEN@?Kew;To&R&S^vLwh0_AGSh658FWn)^k)_SAHgQd!hMr9 zdhS(+bAPsFKE1ES*VCs8=-_kVz$%oB6ST&VNSm+hnA~dp(el&CqnQ`g0M(c1@-FQ3 z&#XgBlJ^sHBr@4R`!|WmTu!26?K6ZtmKHe{X=Eo1(8A;Z--1wK5{jrI;zsgEO2SV4 zrr@SByw8%#`Fnm(BIH=Gw~Va>h6b@mgJC+%g5$L?o9JNMG3~HTE{K-4zW#Sz(qq4& z)zmLo3>CUj9P5%}!;A(#zUU&YoXuG0ucXh;Z8=V;OqiHR62#jZ`v}^qV?A<*|Z7Zm(sJ<=9PI#A6D{0}QlzlRLGeYX7 zsqAwds&3^#_)EEyrDOE3xQWU7PtX^?eT;t+;QJ3xu8N?(FKumq+HX>HfJ4~Z}3){3K7Z>UT@i-)>g(6rW+hcWY; zCJ$MmI7v;8cOx1fvyOdFuv0Jm8|1*6I*BUs9~ss*d>pmRH;Ns7F5M>EdID_#MPBHa zJd%60>_vAP+Xy30-A?q^1AdDetO!mD72$i92jiV>y7mhpfJ%PY@i1W0;ONud0-y#k zG#;rDB3V&re%`NlC;4-@>9&!6&7z7!pn9@NYrZAKiQ9P%z6D!((N-uGBr8T+o|+Fe z@T=pWykoQ0J+zQos5-yu1X8On>X2E-BJiZ$FpHl5DH4e1-j%jj)Xm)$*8LF*l=Jxa zKUb*bvluv+_|7(&1i3*P{+kV*)Vr`zAzk*#5zTdezRuRRz6;i0CpZeu6GRUGwd!(;?!g8@gDy2?LbN`+@Ipv!s^J$D~aDDuhEs?&JCjOVU|)CKCL1pH3=I z9F6uEL9#SyAD1Ag&Kb^=3D@a35aXPRvx1_75BUx4w-K^f7#B6GvAN_K3v3!MMjE;&;IqK9XVZSmd+(MGm61X-zRx|U-LQlnOe)S}{* z+%>$bKz2K`j0u*k;xxBKMTT4ae1t_^Ymg)URU_0h5x_4vBUFf}3e2$0QoG$zVN_7dvSiqPUBLfVrgI zPk?~-AJfkNpy{<;dTDoJP$Lv^|Ah$eB0BkuUi%KJ)RGo)aU9)jvHm9vIV%=P7$Ot9 zFkxnnI}izpzpFEGN^17dwzzKmM=}kYpg^J_!+pMq0Ul;)FTS>TUnQ(fl)(8qB%thmC zX2;v1E%p*}{O=k*XWg_)IJ7xFv0d0sgxg25UE%hP;g%-MK_>E!#sAn?UU^d}fHFSh zlpIt+dv>q{$GT{{)bFyNK0-UpV^*Rt>efo)n?uY$5v&omS-sa4feH{si64Dm5=^gK z2Q-Ao1$pbumZ+7~(lvK}*Mhc6)OO2^#d2Xw&We@09X`iMb)mEJDDeS)CFNbETCZ#c zLNJOjYrmJYk!g8Pds6ye=*0ZJz12f0e*|BWnW&J9nSL+iwH#a_?w@}bwQ_@au=RPe z#X|{~>uu9uBe+BU=52z00GwvlM1zC;0V3-GnsYsJ|MmI~GjI^{SHC~v5sCsC$b9x? zN6i;D{BEYYQ{~}2UoEWlqMb9s;E1O_AZGN@{4_G&v_L3QP^-I1ylwXZ-)`QZ<3AT1|Es5LU#F>@Ujg^f_elV@LSZO#Ka0`|xrAte zy>0Up4RFJ;^cs+q2vm0?w5WiB$ICJIt0$N5ne90?Nh zx>i8IRN~(kof$32`@Y_$IPyaE?FxPu)~pxGp2;MX7xUn+(0duH~;eF8|69DJECcsUAIi}&T=JYq#n4} zBVhUN^!Z2&J{|-gC5q&aV~)gpuy6?Iz1(p_=TGT4~KkLI9WGe610Q z_$g$R5OdPgsD~n%&?j8emum(I^G2*_;$-Dv|G{6j`9`Kbja0Yai=#@Uj96GhAFsM} z8(b1Rs(N(O1=sxtl!M!;4L5?Ds; zega~t1&_L3urAT>R_!`lJlxfXvE zqkXXOpFiCDg^2Pk!&H}UR)bGqpO@&2c%@twZJ8sOtAXE;Qqu?FhIxp7tH6W^0?A<= zGbqa1f&fMsa+oszRW2#oL%ZZro2T-)1JFLuCM?|q=a{(g8yW6O|DKq6bN1PXD69G_ z=w73rE#fLp^n^*0TOublUbyCb!8c=mb^=Wf|`I zPrco}1q|VREw0D<{Z}HYYhwHvjNAGLz7pw3M6#QA>vnBr37@G9-7F&PW9|6lpP0Q zfgJ(XnW-CbDid|jfjDP>eN1m)aP@3mTuq5BGspvKHOb@+AMkcP+ETVZgmvJK%gL9y|2{RKDQf8>D1gaFSY-*Ip2 zAm)C|a`iFybPa+L!-yqBo7UIPP)*mfaFO4>DR6Q8S%IXW`QYx+)ovs68UavlHF}c! zX=%BRU8B5|6depoxhYZDUaTc7t9CNbH>th+-U-lKWB4CF!~#J8qv^ci)|2hc&QT23 z!98XzVCR_V%iyP2#h|h-prLQ0hggBDFujtHXh1oIP?0m-l| zthm{$cv>`vruwYMY|~G@cpgtHWR??0d(L)~`s#6=sIMD=Kb^l{;>eV;6AUIiscwsO z4k((hxJ@TZo@9Wx!~9(CHN2bbIF4$8?~nO1pmg=IzeNibfL?SWV_uvEX>e+XfA`a-?Y{jY?*RUnVl&YhtzK)&pG{^Ci- zt}vN}ES8q+cuWuWK6->}xXqfO4GCtJQVAYV0i3ss9JPkfJTLWkgtKEtW%OeV2S_?E zAp*AnBm9Fa+7L^rVx&+@U9LVB>+jWPKC{S6k4A#CnaCll+)?xfSC@t-%#$*nxN?oEbqb zu!R2!9^#&0_x{#7=ew)#A2CWf-e>WpS@pe$IT0$9Hpt*rv`D8c!ZUcOC-Jm8x`(+^ zyQ!jVp!wNe(M!MVI>Mey2H*oB^hJg^NNxPoEWR>;xTRq#DtfUtc9@>^H z=c{x1@3;EB`|Sk*h z7~+9?XZH1ke5+5${L>k;C{9puV@Iu_*a>RN(F>|yZ2PHwmn%@OhUcseDDtZqtrVPb zx|-P9T-Z9{8Alx78CcdKbJ^u6sg;p1oolmD!zjuT3ht<`em^O**ZvZo1p+D8w$OyO zZyP>&bS~wVZ1^8fsHnt2314P&ozo*;n2f z9`Ga4@+%A0UsCXHi9I246gI`3SqBwsW}d=~*5{UuI z*3D7yr7*NwtdPtLY&;tCzM`BQC=H+vJKIFi=Y{9j%xK5w9n&vS6TRK{1gqy;y=|b; zRWsXraGZh0xNlht`pA9HIA1Jyf}g8|#;7xs2aB@D{J9_Var}b$b^9 z>lAI?q{u4|DYGNYm4oG+l#U{&e!dER=~7PoBy2WrkLE{9C%K)bUUt=nb~DQ#A5Bo4 z;eZ1JPpY=`ip3#c!YnEXmTCh4qml;mZ(PCTZy06ok^1k0iJdglP+!PBRK1|HU##W= zDd-fbQiC~zv>_Z$Ufz~mN%4P=RB;biz%={_8ptt6O*FsT|z>mij8XBEGlTFL=@Ytf%iEmaJ@h08SM`c zp^g8ZdHh}IRng&Lp;g=cO=i+;JlCX?QQdI?;7-VY+$&)n;)VP-Fk}%7av0p*cmUeURk~g#zY=&ptcJ$9is#MPLcJr(Q^EOO2ihvoghi%Ih%DUS z_tc!mGSp>I^YfIOxEj2a7(JSaOamD*sd=7zV3B$G(=2GozIuCM38P_7nE};xI5doj zdVhhs4oT$3^Z!mo#TW29MYwTv4oc|#G8?hT42Mb(H;}1D#jx|TZt$#t_3n&(7KBxT z%Tv-CGwXqp;*3?Wc%*rx2;#bL2kaJvXy3Ucyal}>ZRb3W{fETinKj7@R#fivg~Wvb z!+u32gvm5SkW~Xvv$uHU_%Oc^ul{!N(5vjic3F~8gfJeEy~mKqT+>bNJm9E>kDA=4 zhuuYgpy;pYJZF|5mXNjUjg)oqQ6FSA|9Hsi+L!S7CJSDXZ{13}`n)7Q-a((G*gw?c zJzaH{WBXn6VwDtSo)w>e4U1A;c{nNMw0kyXpYEtu+>3svS!#twnl_8Y@Y@a1@WcE9 zmvO-|53BZ}jvzjdBRSQMjrGxQ*x%#&?|qm*5ADsb{5u$MLD4J-xqq_%t4UWVF)X(< zq0cW$t~FkdOu1DN!H*~1RKaCwhY><;%O-55rcCIB=w9fII0=W0bfU?sj=7wVav>fB zF9&*K4Bc+dbpheeh*mcwqhK?9`P@?1F#}U{Au3_%RuZwFi*@V{Dg$zJ_4-9Ya3WI- zfBdHM09nxUT!bBn+_4;`(G?V!m};B?Yf7brTG|G1^#C%RA0xPkv0ZHn2Mg$ZeEY zM};{Sjwr>aw7D-94ci5k7&dq{=3%bHJQp{LP)7;-$Cz~mhbnHjT6duhh9l_K zbnrwyj^{eeM#s1tkn-KszX`LcI<<4Zt)7BqtX5X96_W6&PCxa1j8;+3D2y0DPxp&Z5+1;+@VReU0` zPRfR=V@ACf5cdu#U@~Sqgaarl{?s_GYIWf}nU-4|rslwp#WRdS#xW#DNUJt;95s1+ zm~6eM(np;ij2I5{d(9H8e3w@fPV9A*@NwQV*`_kQ0mWmJgFi44=D-eT7)mFky(b|>Bz@f~Z3-FARi z%+!iIM&8*^@_0v~k|lFawHpp?;XU-6Qe5{uND_ zrFBT=&leeneAlx?3`BFeOvTXTVg66wq+cW#_JON#ICSBV_rT5m z={Rq_V5D<}Svgt@w&!L4rm(6yG=-OMB2g01U$w)?P02>Ae@b^g@4`$lD$r zAv4P{2#$I~ysvme_x>sC351ZT7Vwj+^}29|IiR3oe&W}al?eCo4&{?ersvEZ6#JCO zP-twPwzsSv!Aq;?ol8|6u3a(e)J9Targ4?RdKM`pM2Srs72PXcK)X?#4GM*w*SgAdmT_|OCP<}DOL4tU;T>io}5uwb)q4EhBR zxghVqfLA>)(FuWEjg)|TLkOb38Qskc%qgXO3PrDCwAZPLg6};0Y;&45;CgQfk}3Z_ zF`xU}=`3vJ>#(g44aNHSZtqiNLfPM3Dzu&OE?ZywGtLhw*WF@dPd7D!+M|ryi#pKp2!BCKY{sLcVr%ip};Nus?^agm+WR#^FR+0F2YL>ZwJl$X++< z>qFd399}gWG(LcI_M>M%}+{>UOcID z#6we=Zbq5aNZ0MKAPB$l{b82fQcY1dOsHo*N^;2#fk^;tEpgZJt-?SbEm)t-x08q{ zw9tghR_v%*9D;=eMN~+(vufqX@j6I)Z`=pp`UbrnR2}r6n}BT?J=i$p7in-16hwBY z#woVNe0>N}Qfz#VkeWvUD-~6BM(mn~n=`L-HxT#RyVIA?nGj-UBO=|58A$3WcmB7g ze|iTP^~(wC9A4>%;WxY1o2l=Y{_E>Q=w{LFT3?*yzHAT$3{58t9q(Z7j!57m10-#!%^SY~@5i-y7DDfYL7)VX6&I*xkG# z%#DnJnwsm1-8<1^x10i)3ul3ktqauRRRR0{KN%%GZB6kOH6zW1B@K%6Esd2(-<5Vku>}c_e0$^DAWlGqYOE9s&;R5U)6Jv zBkT^xgY#<##IKOr9sYJ@@Sz_wky51{Qm(SpxSv3;8J|-uBQJ6KrSRtlCI8ApHQ;@z zF^t_WH);IUfsMm#Wz_gpTjf}_oxr^hq(b^d$tKtEr^}FdV!9N8ekDBnA11T0i3vB& zU*cmyK#^`>9jb)?%er-?+q^c zIR!>@WDy>U59>Lo$rZ$oOh|NYvK3X8VP=H6e}dE5y$+R)J7BgE3)76Vy|p9DK?h5L z3-W{CUW9LpGXD+E!3CQJeIQs+5S$C#+XV_UbYMM2GMt$9J50z&jfn1iewXg*1wGmf zdtt-jfVUxWhwQ8u+$y$&JYor~1D03XF4H8*ze@!hmgx7|D4nMG<9+Z?z0VShG%*&9 z)<*h+NQxZ|wY$`7M`#NCr%r9Nza;RIU%ezaicd^vLbXASX8GobMwF}Sz&Z1~SMpoC zBA8oAHd#PU0Bpqm2zraop54>R)mF1>U`oc^eR>Y773ya(f8vDS#F9(#6pQU6g993W z$frSXfp8ZEP|uL^kooKS?$!8Gn9Q-s$06+a|A z;kckTl&wH0_9J~LwO>K;S08bdf5f|-f;shwZL`* zNhud3WHkJ_kgpw8Zi~PnYa`X%FgHE|gdI9XzNo2!hd{*@6H>vRM8Q(4Ss(iP_t9+Y z`K2{rYTS#a(X*gRo~n)Dxbji(x2C$WU9Zp4&Q|vveE>>^>-U1SVB^{ukD+=CYImcf ziZY)==c(J^^mSZGg9vw%u6No=$>%tD?v5Jyjt2aa+I%B=J}a9d{STIbZ3n&`qdk8H z-7ULa?!kiuqff+%#v6gQdpKbc7-zLs5i4Ry>mJK<;?&I!kWo~BBG9s{c?JT%@Vrzz z?pRA3$FZ~5S>divh;LmG9=O&cwEn!pUtF?RPS;mD27q>vmgnXFr$yt|$L* zZdFag5@X^)$n>1@Rfmua#pwDk6iY{S2HB139MrKQi~-3RSDM1S(o|=QHZH7!Llh?> zeSU|0bXR1Tku|r&OiJ;ev{8{LOH41vNcQyK7Qy*}g;R7(>N!GqVO_ew1=a zzTOey#^)5NaA`P=l;4tNo+m#4d_2>L+c=P>>)Aip^VzH|&~WZ{Da*pr%@I?ed1y0s z=jo2WN7PtZzOa|KjIn2t1*JT{cINjW`HN#ri*Vic1#X^=r@|lUn^@;zoFX}c%XR(Q zEoj%c&)cVn&xd~C0`l#9W56>yVCwz)g@3T@*`nyfnxv83xn$!mA|Nmt=IckVJ-qU@ z89Z9Z;z!d0Vr8HnFH78$Z>Tb|)BtaPt-iohnGRJtRwzGqMMub&rMO~d-Z?&=KlPN; zp*;Qt4a>;uZUuKGK1H^60#|2@hC7P{PDodJW~xOyCE7&DUPoF(;9A` z%~j8!)S_xK`6y55t?5b1G17KN5Z#gD{d;gbb~E$4WuQyqLNQ?lV*~@H14VgGs1(2s zLVrI)x$BLZiomZcEW;W8-(q#%za^rZ`V{1Wh^vnQ={o8im^U5GeISs?Q5*cO_Nkn z>~>W7jZ7=A{wu*1Ea4v#8d@v37qfrDm*-5xSMQT3eNsCJf_DC*hI}CzeVYyHg1z4! zeO7!{fmf>k4_tw6Q{6~Em#fZHDlQ1z4o z+vHBZu!oJ{Wh<|7Tk{u3{VKI4(q3=~i%KOxi*WkeL@}hMuvF1mgF$>oR_x5ytr7m5 z{QQY>Xo63et@SBdGrKH(L0L6z$jU_&*AE@`8luwYQ!V?Ij+WBv+>H$BvZ`iZw$Hs! zni(m{%f5&*vO(NxrW4vL&W>9kK^>V&O8LIc7KpNr#PZ9*HHB=6;IRE*EeQBJuMbXA z0g=CHQy{+IXZv0V=#Y*TWm|hSiY6X#G6Ro z)B)5nO!~b0?TVbNm#V?fj?W_Ux`odo+Ui0uhH)H`H{r*cBKdqV&sx9>2%2B9vN|g| z>go8wn~XZt5Q8=-{|Z}o27P+CdRXd7^Vyz5|Q#jYmh|;g%ELsRbNSV6SNq-NDe~3dkeaq zI+ShPYd{~iSsObL%t+6KL^{Y*py+;- z3fXhb7~IIqI;-`~!W5C(OZt;SIX$EQQ*uf2-L&5yfA>W@^tqV>MF)`3A0{{GjL z0aCF&kIPH>Vz)Or#JY7M#-S|mr6iG&^F0GMJ}`z?l%7{>&U?0K7^wx{X^~r52ev6l z@VxE?^GundKc{|(%pQUibtZI@KM#L(qLmBJNJn*Wr3oCjPBp0GAU{^#MmdXINygZQ z&Rg4Vb%+;9IH+)ObyheC{=iZ-q39i>mP`?cT4o%&zPyg`bK941Z;e!J|MkxXO5992 zm&b=`9}fN^^|t-Mx>r1XJdsTa&KT)w4e=elx}t&5Y(DwRmZVNoeop{* zE-=T=#IFFMy{c+=oU1$E-?HXs=P!#8V$KxXUX!K^88^g&xFiTF;cw&#PxZ;+8LIlY zPj9(3sYi^qu1x9d=p0sK4fH~^+=#ZHc3NH|5r7{f;jc;N9<+5BS7h zjQx{6@={VjLDpd|)#zsFT1tQevN1b|qSc@$nYGldP6hJQ?f%%h@GTfJDD3msPKCm+>_X`TCa%9?I$7Q1S9Cr} zR{B|re?s_mCsSvuuG}B0sNOFVz|ZGJ(WR!(hM;)C|%MyG|12mN(@~BLw8A+bjQ$*gvbEONF&_>0@B^_>GOW~7u}LMs4xKw4Jppr?$RKFlP&Ty1aBnio-bzS+^BAuV3O&SMqejstGTtUk)J5!Of#mBZXrI7&g4S z{N+0~uQz!ZPfFI7t$>$O#SB-Dr5Mmxn=U<-WGsqj=upQ3;+aLQ6Rw+mZn+TZvrbl> z9NadBPw01N+2VRFIhQPr)@IFby-YW?^;0YP_-6hB&on*MoS368P+~Hd#D0-2>)mr7 zy9zxzc(@JB#?h8%Y5YJ(pR#uTu5YTRq(;3^MgQTQ3WF8a!ig>CSuo$)(eDjtm{j-* zeSkR>Wns?1#r3en99b$vGborw)74>78wZXx6rD?`;=(;CXLm$P-p)9pY-C}YywAC{ zxBG<*ri^z>JTo1U|C*Kfs)IYzj8<+qAfqAljmB|_QS?NXtkN*Eu73nhPPrafUNF_D zI*Orq1`$dNSkC%A%iXdiE2L`DC?Pr|4FwXb!}`#>?TREa;xZ9Rrv8Oe>2iBLa2uG} z44A$&mBia?psqg2>(aK6Ro-Ffc&Fnx5RDx|@XQ$7fMx^z<7zFA?SDsib}iL+W4%u4 zO8va@AABU#KT{(gT?Z2+}}Y+#(PqtOOICvs%Y}DV_elT?lq_J>bC2-G4D4g%pN%~!|~bvUYZ$3 zIPJ9ib|^OuWd|E)Laa4msG}*TRNIsg%vM~GSpCgxyI}@H+o#ixijmy4TvWo z%(r|nT~3!;;Y^SSIoLNf$&|a08obeb5rjkEEuCNc6{^KyHArT>RJF=CwKEaxsd=$z zOK&=(=UQ;&6_WNQ7~CH#CN{)DYh@$%^GD4`$jl&)TuL|<(@Daem#>HR308NJ-B5+G zu&1oaSXk*x57Hb@x7J6k7~UQU$BWMaH5%X$P7)#SC_ojMB1Ey-6B%?B%v~9)y209; zQAf5gKz)vcXRu2zbf|C`k;UrS9Bc39<0YsxQ5Iesw+5xeV}ZbsiRpGTN*Gl`WQR}V z@ft^i)IMMBoh|G^H;138K$}vMDs)i3g}+$2ifBbPN0o|5eCEDd4SiUA<1=r{*5!=9 zFf-!|09AO$K~;Q^rt8ieMDJrnb|~PXFh(OnPJ@|pqjb=(4hJIzF^8FjpWGp8Qd5f} z%ojECiYgO07wLHY?2z#9RLewCr`7hGdhysHh8lAiW9{v8(=)!cAJ>gDChME%_h&94Qn3=vN4;YI60EC(Cu%q75D`WX*lS|grKZ1Y zia1|GKA_VH0g5VZg;G|mh|}t{G~_P7-`{ZD<)hejW?y;&{|OCE!kZc67uN61M)S(i zwLa+{WTqtV@!w~45(^pc)7Zd{9wB)~B)y&v1QJK+;}B@hZ-6u6_2v~6wt_NnQk1R# zIwF=W7AvOTb6fS8oq@h{O-9^syOO%9%<|dpthT_$DF4(z+B;fvHz{A}{oEQ62?yr! zzqJs(;|JpyFYWOiwS61x7t z`GR9Re@75aa@qeiaQyZ5AuMe?P5SG8}bx*Eb(1FM{V;gdPqr3E2eF)PxD(LTr+Ixs5^S|X1Zyx*l z-H9qVZw+AFJ{R}X&WKbA(%#rji`!%(@hy@dB6k}(+` z`-f+hl?l1B-c-t3-<_oUnZqf?uY~TTvvoI3yWV6Ny%37^WGCri zlj1URw3H`%Q7r`5SC~w*B4?bn@}LR<*IFhjbc^vS*O?snDn{!vmdhQ(Kto+`zMy{x zMnFosupLgJ`|jU14y*h3#sOG0++n#se)9 zfWMwTY~3QDW&p*ZBtA?`SbKTc7W0-kEW1jcpI^r(_vd?nHenJg?`^~RB}9GY)!;z4 z!aKwcptW;c#b|P{T1uR*JI`xT%zv(!`E>C>(sOt!EKc(Fz}{H-51sm4e4M!D-}hId z2qMRf`45DT=R47#aNyi00ogul(bMWp5}JMeEZ}9*DIi}sa*mawnT3QOBZA@35??f3 zXJVD{EIgU(7O}9bt0JG*J{cNx6BZY*N5YUhk3l{Ao@ms>L2ua!c~wno*h+`nP-)IP z8uIs}6-EGs;wwGRj4{;|UJo-8PgwAPbvviK@vW@=Sp?l^Ye5~2IXZ&EmM|Qejcnt( z+p^OSyc4g`Rbn`>cfx4M9VM)Mi%K?aIC2ISw&j5HG_;ENQ`WTig&uCiW6w8+2YEpe zr>jrZEq|Gj#O0;W)2Vg1`1*_P#5Y|bnn%g^OE=I#N1&nNLHInS;k)@u^cMZnP;O)g zFM4cM$}VhjG4>(9*aZyI%xNtJ;%F8n8AC6&I`y;|SnB!O!H3oE5#UIL?MfEn zy+u0cBgj>#dAhKl+{fyt^9{3=P@EL|#t8m*JT?F$hp(E=S2f5;|9Q!hQ)o)mJQLm^ znTr%KkK(550Hl$LycX(QWjS9KTedeKy`%-s*2?6rmI_O=*4cX6i?kvp7El-c7Tk(9 z_d9r=_sIV8!aWG5fF^0&r9t?Z=>dC_=W4?Ijf3qW>g7L3!>Ut#`kq)!c3MV)CiOXV zU;l)U0T!K~hx!%zVh51^t^la(c4kQMQjR;*q;W7=dh4M4Lrzf{K%uLl@M7XHwrvXG z?zW33g^PqW-+;bTBAizPrr{&ns!2UDszz`t2o$#gbOw6{jWHF=-FmYAD3}6LtUR5i zGs-U*x0Km3l5O7WI+0wL2Z^BU$$RIbkwm>M_U2Z#XMQZ#T~OjrCJK|X;{L>87o%bm zcc0zt;Y!};ekhw77Dpd*koG{OqnYrF$UVwl;o`+LmL%UnDrZM^A@zyOL6OUn^?w~; zz8%?_w){A?f%(^KlBShNpi@f>?tq2_$Y6e9id&nSzzUmMv@hE~DaWqg`M|^W01=7`(9{rwDoGLtXV6r0?HJ+(aMR;eA$&V>=7Y)iX|3pIcQ*kU#TTMB) zH0!ytBO`OLN8+W31Kab)xP`ib#+ZPuitLa;5NNe6<-T%HBh1#Cr*z0W&i^^!<`(C` zlLWd`vQ|9xKc+PRBM9!j*b9@A-AnHmQt;2J`_Q497qX0k>0;|vZrI@MZD@{<`9UQiN%v@NAhoJ_BQOh)^2B93PC zs^xM=LWYx8eef~k1L@`~qNn~bm9>AAr1lcB?qVmW4L#+Q{}O(;j0&qG@|d|r)+0o$ z$QiqPM~W?^TgCkJQrS%beILXt)wx)PL_dA%Jox4)%OhFn5~-Q7VMBkOFnNU)>C=iN zNVy`uMeJ$p=NV+oAIRtJj^S%&@zDZ?S~U~u!r-4D@IB6ytD_6ax1f%IM3)_8t~~6!$#%j89F0n z&5GFI7)>|Lv*BA?Gau^$J1T9NpV6SF$ldJz|mxjvX5+7t4^3k@n-Ee(~8oXri7m}rkd+waV_A)vm8Fgp^sl8kH zKHOYcj(W`m+k=_VTHS(#n@LeS2aVPcdxh0X0!bgY{ z=k}#Phu%f?)Wn8WK=I~spu5|sH}Z= z&Q_$^erT@jxdGixZkir#na{U(y8e;jk}FA>y#ywf4;}|)z4O)o(Pj2} zBC()^b1A*$*dtNXak<3PR$>`{>gJ@?$f|}dJNp*YuDA6H(iwK2UeLm;!9_4krnd!h zTy;kfSOSKMBo<*h{?cU|Snj>xu}7ZKtGCyj@S+9jW23jDXA3e^{z;Kv9ZpU9JrRD@ zyNnCWJEoq=JRoFh=dFHEwM&+SYQhvQZigEez@lt`YaaSq0_$d&s5TvarZ|Q=C$qQEsN>!uRzYdR_=u zRbF`w4VpJR^D-=t@Fbj9+^%I>IF0xa@LOiAa$f3~V5hx4!fLm=MERcr4FjnOKXmbx zKZ4|`b$xJ@nG{uqD%-8#n1e#Mw!YKHgd15a!@Kqo?sbBqucW?mCfWGq>=l2`2u-rj z|DaPi!5n2!N`eg>lt^S=&-@)TO`iQ33djDw>IA7i_{pHLVy2;RvebixvY3ViT`y5`O8KXtn|+_xD~e1bgrW~ z0T=r&47IDv2h2bh5HOPwVMCxON@$=;C;3~iaM{|ZgjRP2(giB`j+l$ur|!$JZV8#j z9NY-I$oLScQ$G=`o#HS*hfiH8Gdq#r%}lv?LpX&~i$HQ<1SsCCSh|bF^JK@W4z*X- z`u+L96Iqt@MW018g`tJ5@90DIYSK#?))hG~#NCx`ac4uUp`vo7Ud=L-_o34lQn?Gk zdwvkkx6k+05MD09nO{R+2z-)Cs4I@h-2Lb$?{DsX2@ZdB|3@>m0w~6$T|QpVB}sXv zvY8fc@3yz-8;cM|4qG(KIIS-3u|ltJ^b7{M!TR-zE#xWWwuNC#@eY*h=G?s2(ael* zH91g>_VOvKg3u<{BhaeFIk0)H8;>-3R?frf=F`=**rGF-na`Ua3zIOvh`h_0ivFZ0 zujBcBxrVvj4VdRV(r{H#4Vm@G(Qs3GwYNng1oj^qjJUI_nQ1fdph>#S|283OO&2TCQ1i zJ-5%-rgZ_eIqS;=HX;9)l5IM^GJO1CPuqSDzihW25x+XZZjT zEpNsz(h?!viVoi-{m}n~QgMvjPSM_25g6V99ek&#+nvtnR_?-9Gs_RVdBa>u zZMxq5b~w+DO%DqPE;&x|^HLy1NqnX{1}6WqQg({GbH}5(oA& ze7z5Q+4-D&`JW>!%DKJ>AIx6=(5cu>4ly5Cy%UBG{!{5BRxaUDt)yc3?P@OyyYC30 z5V{?E2ZdZ^8r}?Pn>^mx-JS0i#_*7n-N4;)ax{2WbtxhG2(*<1|sSAfYW5)%MR9T3UQZ)CJP?F!f*1mL9rJ@|7QM6?WeYw~!VPDSv%Oi2 zuh>i?Iqf3t`uB0zXfsp9xy7G{M9CVWTz-=G^yJ>%dYW2wrtkpudF|zw^6n#|El^=N zxpK>3Zzc(x%A$E1XvOt?6>z0u-<(P_muu~E_*VkH_k-^%eJwzGM!n%_LK#19ILx-e zzKeU&r1XIz{wvDPi+SpKqIV1)SA|S*y*#3pqvtva{q68J2IGctPD!ndD$~^MRo}e| z7b)4yv2{CCXZrMk>j8gxzv>tY4$UI-a!aW4p3&=7tgWoni|jv+II&_t{68@W`36$= zT_KdN53S{Ww_Cp@&+^slk%!3&{ zeJfBmDy+*&v$LKoX#62Wu@@fdGEY{*x<>7dwfNvUd*!AKWb5qmm|KsD^Z{*QN zUrkK?jcnF^8hEvW38*hxW%zw|vu+6jDf~-}Ai8Un^T5RjGARz3DBdM(a(@D&@mVbuP85eF_E<#x2Ee+}JEjW?* zQ;Niw4p^-< zZhOFD>~D@Mwfn%;Y>}(hznS)kV}4ahybv4|f8ydQ2A>n2=clbtzFQxmSdPh;XWmkF zczCubN_Azce_z`99F^5PYVS=c<9R+eURx~c%Wf6>!?V*&R#ZRA(?65E28~Ls)1>p9 zH*|D0)ZN)(e{@&^rK2itvhCb`IZRJITHV$j&uc{hZztKJ8B?SPLtjCnBi3U}!af?{ zTlqqmqM7*|xz%W-D%6-U!~v=cQp9;h8dHntwF|~^^nh2q4`Qh$i3-DcLz$t>%*WC0 z%$NR+C!0h?XN|vt>4fF#hZN(({fSyo_w#?TNyG^0p?~o?;SBurUXA7(XB!~*e$7{W zhfujh=s?dAp^W`&ARZd*S=7G~xMci#7D93o_m#GPL*81refE>j1g->&RpAm*`BaTb zKyZD?3ymgAK~4M^-0)9|#hkTM(QZC@{*pEt)S2O8aTc!xZPel3ZHe6ONXR;uKjfo! zq9~K%?j4y~x2GGkQkOga19Gh6i%&c8k$eYZNSI91k5 z(Q^92G{tQr_^DtTS?JHxIv|O}h(yo0Db;!2=HraIa%BTLmmZ^Gge@q}Cx!LBpPhgZ z*e4kS>k7tXQU5sL)I9zz{AmfvXDwgd`fBNViZ_OvY&30A`O@^EeNmUW_Ap`7Bqzt2-uZqGbI4c(Gv zQSaZg|0Ydl`z~&{Q&ogP!z^- znDI@%wcQo|tDh>d)`#Oo4Y8K0yb876aV_R zSOaqsN7l45x7FxRbJ%M=VaN0g1z{d1xKoiVOrHQoQFaARlSi&?9c5&O#5J7W(O24n zrFt#oY%@g4qReVs46QQe)D#Z5X;sM2WPLCOb`H{7W`seE9w=i>?OLqxn?*j)t);;W z2E`Lqq66>*bLqOPNQ9gTtxvSMmrp}0r=u8{Hx^{yr#s;o=;W|s@q-8<*|qzE%fThD z3c_&*Fvt2>7n@{aBA=c{ZTUKC?cv2D<7a{;Am&8TZBtt87V#5c!9FP}zP7p=ka+;k z+LF%7yD#dC4heF9~t(hDc;Ocj9;5K{*zhk>pu(rPSUyG z5cK~bGmH0wvMsZa@)y2{T5%L-2DSqw7HJAFWFJ=;z;0~}8P~PLP~u%}mQCsoyQ^lFv_GC(&tc&pDeT+vmS9oIJ+gKyAax0#9BZy*bwybb^5G${{p`Zy( zQ@?Xt>(L07FO>;l>Oq5kdYtjTtHm|5?cnnlu0R5Jg{6r+*-cXe_h0fl33bMq6bY2k zYpAV!G4wq7=wV2SzGtsL8Y=O+n64lJt#{U&rAI*6ERYU#Y7JtEFf(xjtJ(%d>a#fG z_#IR1=hOVf|K>jUTyYt*WL)(Rx}CI)!QH3z&Bzd4ns&k;_1~}>IYoHJyfsjU`EV0q zR^EwPuVV|Mo$T{o+m_<2MjA0${IL6Okg%>>vf}l1hqd-{MwGH@xU2ykdE#W>IU|5S zwooSGZS&I$6mtkCdjE1|<~k~5sM*fC49Jnj(xDh3{R{b}8*GE;%0&Q*t1GN7tYpiW$33ibddk zGktS^0IsI_^|Zb;6sJYG!n$ta_+#1vF@K1kmGE`dR z9qbIr3c$=VO&0sH4lIALs;TYIIR@MtYKw+ra(oLU^7v;Dz|?Ww_X-g@PJi}*lXuu= zpo?AbJ}OJ72_e?^%#W1XGq5y4eI4Fj3 zQ%0tMVSHb=o@95K8f3_1s6^J1rcG;UmhMDmC|pCD#?(}2mk`TquS@IXO|or9yb5qX z8_&Sr8hkX6?Cnd4a(48p`qHHj_}2oZ*77T!bYeWwY)UctC!8*K36;V1Kg@shYiFZ> zEfGS~{hW6slZd~sz7b~bc9AedR%$&2y@{7m-E>P!s=#LGE$ft3p<)bNOmk#yTyo>; zeKUD2^cFOq5rFSbI*)r;+(RxA&~@?KXE?z3p%uU1Z#VL69U}SA?h>GxvuGMs)Rq&X zux`V%_J!p+2)Zr>&pI86;o?J-HUj&nVOzmh#HH|qhE;_XVqsvAo=zyhVf9G`ZzPFf zMalg$T&M4B@||4@qxniv85lzSZO3i=ZzOl^o!|e{{hkKva33rmZh8FV=K!2sp}BfD zw~zy$2pUL>GVT=C&lz9b$ye8GO?L;f92rgeFFtn$U1j9GsgO}?AvHH%F9bLtRlhB^ zV_nE1&$Ni!QOpm<@vp^R9=6jTO&(4ex0C-O+I)qL;)exz2=eP`-!u`j5i64F-XNiwkq@Y0sHj%9jJ zkG_J0W!#ciepZ=W@QUzn&7?T~S2OWz6!9G=RtOpo^@r-$EV}8%46x~G8WP7OyC$eW zTO6TwH`+s3s+h_+O?C5DuHNJ=DqfIf-1j>GmTw3@>cFidT0W+9(ndZ|`%;;1SHvH% z`}=NI?7Xa5H7x^bJ_e7uI(>|fnnYNb)S;1y#G%%a3Z4`uf;R{K*BPgNy^(xCp>oL8 zz~00!v7wZ8xl<~$%Z-i56<%$s1kQ_wl=wSkY!;=OP9vl?OJha+ZMK>g`E<8fZ?G%W z?~({J>Js-A!F;CrFA-F8g|i#N&4FOwf@|~Ye-&}XFq8n)`}HPJ>o%>(%?oaGDKz*9 z)jCSf>9Xsm@yAFZo#N-RWu^tOqu;SI%owv~95o1kJ^c{{$7|~>B}8%T>+lV<%{9+c zLOOC{Zx2YP3DMKLrtB*km{r4E0A#YE6ys&E__#P!JhDV*F}Y28h5z_q*9o7h?z>GU$vAFU!W||O?~YYD7ofqpmu#FDr(QD&{a?Qm%84;C zG#%=L;h)ei>_Vu~z&-RTxQqYF(F>!aHn2&Zv%I>!VW3!{sn7dRZP%DGT!ym{NAKm% z#}}>!VI%slCAuO>YK;(qF>&qo@^PxANy($1X)(rbwO9$SgeGYNt)zS)pt0(HpG;{# za7e32iZZdCf{>fy4cgk{HgmCr=#7?Cbclk5hYt^E&U@v&_%86 z<7Q{}u*z#rW+=M`IaRU0sULjAyRmQxi8L8Cwo&^Z;Y3_w9j%=7{wde-$K0Gd3K;W< z7vE|fNO~kc3oS#RB%2b|(yT7=n!*ub_5|CU7b<;;*Z@U?i}Fo%kQvhFH07{5_Tx+iOA!R<>AB0Zvsi74*!`tQcW_IYX~+opN=W;1J5~^f;2mZbNh0P zMV7y2CwroLMm>_@ zH)`9(9;&LGES>a`+}~ZBV|=>SkdU^=^iiPB(CtYr)$Ld|(f2_VJhvjo%4(pq`O(UN zr@B4c9pd|o>&!uU<-w~A?$)>0%Gz8e>lcQA=u;@qJ@tH`gnGoek$}I?5nK(J4DO{# zOZxBUFa3x8%=%0*Jt$^Y{)B2L`V@07=qaho-f8hCeQ+s*T+GBR$@Hm^xb7x88d-npk2B`PVTcjC9A9LFk3UFoN{=0V!z6*U4Ih{vYUSsEz;t literal 0 HcmV?d00001 diff --git a/textures/gameplay/crit_line/cursor_tail_r.png b/textures/gameplay/crit_line/cursor_tail_r.png new file mode 100644 index 0000000000000000000000000000000000000000..e77f1dcc9de72d91a18a2384b292eb9104a712b8 GIT binary patch literal 42394 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 Date: Mon, 16 May 2022 10:32:41 +0200 Subject: [PATCH 06/16] Moved cursor rendering to overlay --- scripts/gameplay.lua | 16 ++++++++++++---- scripts/gameplay/crit_line.lua | 10 ++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/scripts/gameplay.lua b/scripts/gameplay.lua index ea2cdaa..5673702 100644 --- a/scripts/gameplay.lua +++ b/scripts/gameplay.lua @@ -65,13 +65,21 @@ function render(deltaTime) end function render_crit_base(deltaTime) - HitFX.renderLasers(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors); - CritLine.renderBase(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation, gameplay.critLine.cursors, gameplay.laserActive); - Console.render(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation); + local cl = gameplay.critLine + + CritLine.renderBase(deltaTime, cl.x, cl.y, -cl.rotation); + Console.render(deltaTime, cl.x, cl.y, -cl.rotation); end function render_crit_overlay(deltaTime) - HitFX.renderButtons(deltaTime, gameplay.critLine.x, gameplay.critLine.y, -gameplay.critLine.rotation); + local cl = gameplay.critLine + local centerX = cl.x + local centerY = cl.y + local rot = -cl.rotation + + HitFX.renderButtons(deltaTime, centerX, centerY, rot); + HitFX.renderLasers(deltaTime, centerX, centerY, rot, cl.cursors); + CritLine.renderOverlay(deltaTime, centerX, centerY, rot, cl.cursors, gameplay.laserActive) end function render_intro(deltaTime) diff --git a/scripts/gameplay/crit_line.lua b/scripts/gameplay/crit_line.lua index a558e8b..518636e 100644 --- a/scripts/gameplay/crit_line.lua +++ b/scripts/gameplay/crit_line.lua @@ -104,7 +104,7 @@ local drawCursors = function (centerX, centerY,cursors, laserActive) end end -local renderBase = function (deltaTime, centerX, centerY, rotation, cursors, laserActive) +local renderBase = function (deltaTime, centerX, centerY, rotation) scale, isLandscape = Dimensions.setUpTransforms(centerX, centerY, rotation) gfx.BeginPath() @@ -120,13 +120,15 @@ local renderBase = function (deltaTime, centerX, centerY, rotation, cursors, las gfx.ImageRect(-CRITBAR_W/2, -CRITBAR_H/2, CRITBAR_W, CRITBAR_H, baseImage, 1, 0); end - drawCursors(centerX, centerY, cursors, laserActive) - gfx.ResetTransform() end -local renderOverlay = function (deltaTime) +local renderOverlay = function (deltaTime, centerX, centerY, rotation, cursors, laserActive) + scale, isLandscape = Dimensions.setUpTransforms(centerX, centerY, rotation) + drawCursors(centerX, centerY, cursors, laserActive) + + gfx.ResetTransform() end return { -- 2.40.1 From 4be2617944299151205d3c9a4b5f6f4fd02e3488 Mon Sep 17 00:00:00 2001 From: domdoc Date: Mon, 16 May 2022 10:35:11 +0200 Subject: [PATCH 07/16] Lowered cursor tail alpha --- scripts/gameplay/crit_line.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gameplay/crit_line.lua b/scripts/gameplay/crit_line.lua index 518636e..916f7a7 100644 --- a/scripts/gameplay/crit_line.lua +++ b/scripts/gameplay/crit_line.lua @@ -55,7 +55,7 @@ local drawCursors = function (centerX, centerY,cursors, laserActive) tailW, tailH, cursorTailImages[luaIndex], - cursor.alpha, + cursor.alpha / 2, 0 ) end -- 2.40.1 From 3b1860db70aab8e179cc7b9be348aa93d0a96fa0 Mon Sep 17 00:00:00 2001 From: domdoc Date: Mon, 16 May 2022 10:44:36 +0200 Subject: [PATCH 08/16] Commented HitFX scaling on FX buttons --- scripts/gameplay/hitfx.lua | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/scripts/gameplay/hitfx.lua b/scripts/gameplay/hitfx.lua index a96a7ef..71acc74 100644 --- a/scripts/gameplay/hitfx.lua +++ b/scripts/gameplay/hitfx.lua @@ -103,7 +103,7 @@ local function setUpTransform(critCenterX, critCenterY, critRotation, xScalar) end function HitFX.renderLasers(deltaTime, critCenterX, critCenterY, critRotation, cursors) - local baseHitSize = 325 * 1.25; + local hitSize = 406 -- Lasers for laser = 1, 2 do @@ -133,28 +133,28 @@ function HitFX.renderLasers(deltaTime, critCenterX, critCenterY, critRotation, c laserState.Dome:render(deltaTime, { centered = true, - width = baseHitSize, - height = baseHitSize, + width = hitSize, + height = hitSize, color = laserColor, x = x, }) laserState.Crit:render(deltaTime, { centered = true, - width = baseHitSize, - height = baseHitSize, + width = hitSize, + height = hitSize, x = x, }) laserState.EndInner:render(deltaTime, { centered = true, - width = baseHitSize, - height = baseHitSize, + width = hitSize, + height = hitSize, x = x, }) laserState.EndOuter:render(deltaTime, { centered = true, - width = baseHitSize, - height = baseHitSize, + width = hitSize, + height = hitSize, color = laserColor, x = x, }) @@ -162,14 +162,17 @@ function HitFX.renderLasers(deltaTime, critCenterX, critCenterY, critRotation, c end function HitFX.renderButtons(deltaTime, critCenterX, critCenterY, critRotation) - local baseHitSize = 325; + --local baseHitSize = 325; + local hitSize = 406 -- BT + FX for i = 1, 6 do + --[[ local hitSize = baseHitSize; if (i > 4) then hitSize = hitSize * 1.5; end + ]] local laneWidth = (track.GetCurrentLaneXPos(2) - track.GetCurrentLaneXPos(1)) * (i <= 4 and 1 or 2); local lanePosition = track.GetCurrentLaneXPos(i) + laneWidth / 2 -- 2.40.1 From ee2ab97f45231016b8731de0503ced739c8192c4 Mon Sep 17 00:00:00 2001 From: domdoc Date: Mon, 16 May 2022 11:02:06 +0200 Subject: [PATCH 09/16] Adjusted Early/Late fontsize --- scripts/gameplay/earlylate.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index df6fa69..ef016ce 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -52,7 +52,7 @@ function EarlyLate.render(deltaTime) gfx.BeginPath() gfx.LoadSkinFont("dfmarugoth.ttf") - gfx.FontSize(12 * scale) + gfx.FontSize(18 * scale) if EarlyLate.showEarlyLate then gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_BASELINE) -- 2.40.1 From 8bbea73be5c7467841fee542739c2a6ff68835a8 Mon Sep 17 00:00:00 2001 From: domdoc Date: Mon, 16 May 2022 11:21:19 +0200 Subject: [PATCH 10/16] Adjusted Early/Late display colors --- scripts/gameplay/earlylate.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index ef016ce..6ff32e6 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -58,10 +58,10 @@ function EarlyLate.render(deltaTime) gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_BASELINE) if EarlyLate.lastMillisec < 0 then - gfx.FillColor(224, 153, 179) + gfx.FillColor(206, 94, 135) gfx.FastText("EARLY", screenCenterX - 100 * scale, y) else - gfx.FillColor(90, 131, 211) + gfx.FillColor(53, 102, 197) gfx.FastText("LATE", screenCenterX - 100 * scale, y) end end -- 2.40.1 From 962f2c27d7ac4fa609397064021ae9c87e7d7c81 Mon Sep 17 00:00:00 2001 From: domdoc Date: Tue, 24 May 2022 11:04:06 +0200 Subject: [PATCH 11/16] Early/Late scaling + Digital-Serial-Bold font --- scripts/gameplay/earlylate.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index 6ff32e6..f639a25 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -47,12 +47,12 @@ function EarlyLate.render(deltaTime) desh = 1080 end - local scale = desh / screenH + local scale = screenH / desh local y = screenH / 8 * heightFraction gfx.BeginPath() - gfx.LoadSkinFont("dfmarugoth.ttf") - gfx.FontSize(18 * scale) + gfx.LoadSkinFont("Digital-Serial-Bold.ttf") + gfx.FontSize(20 * scale) if EarlyLate.showEarlyLate then gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_BASELINE) -- 2.40.1 From 39631eb320d287f6353de2f082e12dd84a68fe35 Mon Sep 17 00:00:00 2001 From: domdoc Date: Wed, 25 May 2022 20:32:50 +0200 Subject: [PATCH 12/16] Added separate landscape/portrait Early/Late pos. --- scripts/gameplay/earlylate.lua | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index f639a25..6e2f1ac 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -11,16 +11,23 @@ local compare = { ["OFF"] = -1 } -local heightFractions = { - ["UPPER+"] = 2, +local portraitHeightFractions = { + ["UPPER+"] = 2.4, ["UPPER"] = 3, - ["STANDARD"] = 3.5, - ["LOWER"] = 5, + ["STANDARD"] = 4, + ["LOWER"] = 5.3, +} + +local landscapeHeightFractions = { + ["UPPER+"] = 1.4, + ["UPPER"] = 2.7, + ["STANDARD"] = 5.1, + ["LOWER"] = 6.7, } local earlyLateFor = compare[game.GetSkinSetting("gameplay_earlyLateFor")] local msFor = compare[game.GetSkinSetting("gameplay_msFor")] -local heightFraction = heightFractions[game.GetSkinSetting("gameplay_earlyLatePosition")] +local earlyLatePosition = game.GetSkinSetting("gameplay_earlyLatePosition") local EarlyLate = { timer = 0, @@ -39,16 +46,18 @@ function EarlyLate.render(deltaTime) local screenW, screenH = Dimensions.screen.width, Dimensions.screen.height local screenCenterX = screenW / 2 - local desh + local desh, fractionTable if screenH > screenW then desh = 1920 + fractionTable = portraitHeightFractions else desh = 1080 + fractionTable = landscapeHeightFractions end local scale = screenH / desh - local y = screenH / 8 * heightFraction + local y = screenH / 8 * fractionTable[earlyLatePosition] gfx.BeginPath() gfx.LoadSkinFont("Digital-Serial-Bold.ttf") -- 2.40.1 From d1d620a599746d3087ab0011146bf2c24fff48ce Mon Sep 17 00:00:00 2001 From: domdoc Date: Thu, 26 May 2022 11:36:20 +0200 Subject: [PATCH 13/16] Added Digital-Serial-ExtraBold for Early/Late --- fonts/Digital-Serial-ExtraBold.ttf | Bin 0 -> 43772 bytes scripts/gameplay/earlylate.lua | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 fonts/Digital-Serial-ExtraBold.ttf diff --git a/fonts/Digital-Serial-ExtraBold.ttf b/fonts/Digital-Serial-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..52d9fd6a4097e8a9935245710c5c122f3c691a24 GIT binary patch literal 43772 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 Date: Thu, 26 May 2022 11:40:26 +0200 Subject: [PATCH 14/16] Adjusted landscape UPPER+ EarlyLate position --- scripts/gameplay/earlylate.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index 1f2573b..0db9e58 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -19,7 +19,7 @@ local portraitHeightFractions = { } local landscapeHeightFractions = { - ["UPPER+"] = 1.4, + ["UPPER+"] = 1.5, ["UPPER"] = 2.7, ["STANDARD"] = 5.1, ["LOWER"] = 6.7, -- 2.40.1 From e5594c59780e6d87ce83d744f934c771e6609a4f Mon Sep 17 00:00:00 2001 From: domdoc Date: Thu, 26 May 2022 12:00:22 +0200 Subject: [PATCH 15/16] Adjusted STANDARD Early/Late position --- scripts/gameplay/earlylate.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index 0db9e58..b9aa464 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -14,14 +14,14 @@ local compare = { local portraitHeightFractions = { ["UPPER+"] = 2.4, ["UPPER"] = 3, - ["STANDARD"] = 4, + ["STANDARD"] = 4.2, ["LOWER"] = 5.3, } local landscapeHeightFractions = { ["UPPER+"] = 1.5, ["UPPER"] = 2.7, - ["STANDARD"] = 5.1, + ["STANDARD"] = 4.1, ["LOWER"] = 6.7, } -- 2.40.1 From 96f331e1e332c5a503a63558320174f1e838fb56 Mon Sep 17 00:00:00 2001 From: domdoc Date: Thu, 26 May 2022 12:21:11 +0200 Subject: [PATCH 16/16] Fixed Early/Late text or ms show when it shouldn't --- scripts/gameplay/earlylate.lua | 68 ++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/scripts/gameplay/earlylate.lua b/scripts/gameplay/earlylate.lua index b9aa464..78909bb 100644 --- a/scripts/gameplay/earlylate.lua +++ b/scripts/gameplay/earlylate.lua @@ -31,9 +31,9 @@ local earlyLatePosition = game.GetSkinSetting("gameplay_earlyLatePosition") local EarlyLate = { timer = 0, - lastMillisec = 0, - showEarlyLate = false, - showMillisec = false, + color = {}, + earlyLateText = "", + millisecText = "" } function EarlyLate.render(deltaTime) @@ -49,7 +49,7 @@ function EarlyLate.render(deltaTime) local desh, fractionTable if screenH > screenW then - desh = 1920 + desh = 1600 fractionTable = portraitHeightFractions else desh = 1080 @@ -63,41 +63,47 @@ function EarlyLate.render(deltaTime) gfx.LoadSkinFont("Digital-Serial-ExtraBold.ttf") gfx.FontSize(20 * scale) - if EarlyLate.showEarlyLate then - gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_BASELINE) + local color = EarlyLate.color + gfx.FillColor(color[1], color[2], color[3]) + + gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_BASELINE) - if EarlyLate.lastMillisec < 0 then - gfx.FillColor(206, 94, 135) - gfx.FastText("EARLY", screenCenterX - 100 * scale, y) - else - gfx.FillColor(53, 102, 197) - gfx.FastText("LATE", screenCenterX - 100 * scale, y) - end - end - - if EarlyLate.showMillisec then - local msString = string.format("%dms", EarlyLate.lastMillisec) - - if EarlyLate.lastMillisec >= 0 then - msString = "+"..msString -- prepend + sign for lates - end - - gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_BASELINE) - - gfx.FastText(msString, screenCenterX + 100 * scale, y) - end + gfx.FastText(EarlyLate.earlyLateText, screenCenterX - 100 * scale, y) + gfx.FastText(EarlyLate.millisecText, screenCenterX + 100 * scale, y) end function EarlyLate.TriggerAnimation(rating, millisec) local showEarlyLate = rating <= earlyLateFor local showMillisec = rating <= msFor + local isEarly = millisec < 0 - if showEarlyLate or showMillisec then - EarlyLate.timer = 120 - EarlyLate.lastMillisec = millisec - EarlyLate.showEarlyLate = showEarlyLate - EarlyLate.showMillisec = showMillisec + if millisec == 0 then return end + if not showEarlyLate and not showMillisec then return end + + if showEarlyLate then + EarlyLate.earlyLateText = isEarly and "EARLY" or "LATE" + else + EarlyLate.earlyLateText = "" end + + if showMillisec then + local millisecText = string.format("%dms", millisec) + + -- prepend + sign for lates + millisecText = isEarly and millisecText or "+"..millisecText + + EarlyLate.millisecText = millisecText + else + EarlyLate.millisecText = "" + end + + if isEarly then + EarlyLate.color = {206, 94, 135} + else + EarlyLate.color = {53, 102, 197} + end + + EarlyLate.timer = 120 end return EarlyLate \ No newline at end of file -- 2.40.1