From b8c10c2f41a4b4622f91d9b5506535128f4d3039 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 1 Apr 2016 17:27:28 +0200 Subject: [PATCH] A working escort function for helicopters, first version --- Embedded/Moose_Embedded.lua | 36 +- Moose/Base.lua | 5 +- Moose/Client.lua | 21 +- Moose/Escort.lua | 268 ++++-- Moose/Group.lua | 112 ++- .../miz/MOOSE_Escort_Test_Follow.miz | Bin 40939 -> 40198 bytes .../l10n/DEFAULT/MOOSE_Escort_Test_Follow.lua | 17 +- .../l10n/DEFAULT/dictionary | 22 +- .../miz/MOOSE_Escort_Test_Follow/mission | 800 ++++++++++++------ .../miz/MOOSE_Escort_Test_Follow/warehouses | 2 +- 10 files changed, 881 insertions(+), 402 deletions(-) diff --git a/Embedded/Moose_Embedded.lua b/Embedded/Moose_Embedded.lua index 721e46db9..0993bef6d 100644 --- a/Embedded/Moose_Embedded.lua +++ b/Embedded/Moose_Embedded.lua @@ -3683,7 +3683,7 @@ end --- Holding weapons. -- @param self -- @return #GROUP self -function GROUP:HoldFire() +function GROUP:OptionROEHoldFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3695,7 +3695,7 @@ end --- Return fire. -- @param self -- @return #GROUP self -function GROUP:ReturnFire() +function GROUP:OptionROEReturnFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3707,7 +3707,7 @@ end --- Openfire. -- @param self -- @return #GROUP self -function GROUP:OpenFire() +function GROUP:OptionROEOpenFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3719,7 +3719,7 @@ end --- Weapon free. -- @param self -- @return #GROUP self -function GROUP:WeaponFree() +function GROUP:OptionROEWeaponFree() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3731,7 +3731,7 @@ end --- No evasion on enemy threats. -- @param self -- @return #GROUP self -function GROUP:EvasionNoReaction() +function GROUP:OptionEvasionNoReaction() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3743,7 +3743,7 @@ end --- Evasion passive defense. -- @param self -- @return #GROUP self -function GROUP:EvasionPassiveDefense() +function GROUP:OptionROTPassiveDefense() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3755,7 +3755,7 @@ end --- Evade fire. -- @param self -- @return #GROUP self -function GROUP:EvasionEvadeFire() +function GROUP:OptionROTEvadeFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -3767,7 +3767,7 @@ end --- Vertical manoeuvres. -- @param self -- @return #GROUP self -function GROUP:EvasionVertical() +function GROUP:OptionROTVertical() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -11167,7 +11167,7 @@ function ESCORT:New( EscortClient, EscortGroup, EscortName ) self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._EvasionNoReaction, { ParamSelf = self, } ) self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._EvasionPassiveDefense, { ParamSelf = self, } ) self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._EvasionEvadeFire, { ParamSelf = self, } ) - self.EscortMenuEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._EvasionVertical, { ParamSelf = self, } ) + self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._OptionEvasionVertical, { ParamSelf = self, } ) self.ScanForTargetsFunction = routines.scheduleFunction( self._ScanForTargets, { self }, timer.getTime() + 1, 30 ) @@ -11194,49 +11194,49 @@ end function ESCORT._ROEHoldFire( MenuParam ) - MenuParam.ParamSelf.EscortGroup:HoldFire() + MenuParam.ParamSelf.EscortGroup:OptionROEHoldFire() MESSAGE:New( "Holding weapons.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end function ESCORT._ROEReturnFire( MenuParam ) - MenuParam.ParamSelf.EscortGroup:ReturnFire() + MenuParam.ParamSelf.EscortGroup:OptionROEReturnFire() MESSAGE:New( "Returning enemy fire.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end function ESCORT._ROEOpenFire( MenuParam ) - MenuParam.ParamSelf.EscortGroup:OpenFire() + MenuParam.ParamSelf.EscortGroup:OptionROEOpenFire() MESSAGE:New( "Open fire on ordered targets.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end function ESCORT._ROEWeaponFree( MenuParam ) - MenuParam.ParamSelf.EscortGroup:WeaponFree() + MenuParam.ParamSelf.EscortGroup:OptionROEWeaponFree() MESSAGE:New( "Engaging targets.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end function ESCORT._EvasionNoReaction( MenuParam ) - MenuParam.ParamSelf.EscortGroup:EvasionNoReaction() + MenuParam.ParamSelf.EscortGroup:OptionEvasionNoReaction() MESSAGE:New( "We'll fight until death.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end function ESCORT._EvasionPassiveDefense( MenuParam ) - MenuParam.ParamSelf.EscortGroup:EvasionPassiveDefense() + MenuParam.ParamSelf.EscortGroup:OptionROTPassiveDefense() MESSAGE:New( "We will use flares, chaff and jammers.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end function ESCORT._EvasionEvadeFire( MenuParam ) - MenuParam.ParamSelf.EscortGroup:EvasionEvadeFire() + MenuParam.ParamSelf.EscortGroup:OptionROTEvadeFire() MESSAGE:New( "We'll evade enemy fire.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end -function ESCORT._EvasionVertical( MenuParam ) +function ESCORT._OptionEvasionVertical( MenuParam ) - MenuParam.ParamSelf.EscortGroup:EvasionVertical() + MenuParam.ParamSelf.EscortGroup:OptionROTVertical() MESSAGE:New( "We'll perform vertical evasive manoeuvres.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackUnit" ):ToClient( MenuParam.ParamSelf.EscortClient ) end diff --git a/Moose/Base.lua b/Moose/Base.lua index 80f3f50e6..268156f5c 100644 --- a/Moose/Base.lua +++ b/Moose/Base.lua @@ -16,7 +16,7 @@ local _TraceClass = { --ZONE = true, --GROUP = true, --UNIT = true, - --CLIENT = true, + --CLIENT = true, --CARGO = true, --CARGO_GROUP = true, --CARGO_PACKAGE = true, @@ -25,7 +25,7 @@ local _TraceClass = { --CLEANUP = true, --MENU_CLIENT = true, --MENU_CLIENT_COMMAND = true, - ESCORT = true, + --ESCORT = true, } --- The BASE Class @@ -256,6 +256,7 @@ end -- Trace section -- Log a trace (only shown when trace is on) +-- TODO: Make trace function using variable parameters. function BASE:F( Arguments ) diff --git a/Moose/Client.lua b/Moose/Client.lua index ca8a03f21..d91618860 100644 --- a/Moose/Client.lua +++ b/Moose/Client.lua @@ -71,35 +71,44 @@ end function CLIENT:Alive( CallBack ) self:F() - self.ClientAlive = false + self.ClientAlive2 = false self.ClientCallBack = CallBack - self.AliveCheckFunction = routines.scheduleFunction( self._AliveCheckCallBack, { self }, timer.getTime() + 1, 1 ) + self.AliveCheckFunction = routines.scheduleFunction( self._AliveCheckCallBack, { self }, timer.getTime() + 1, 5 ) + + return self end --- Checks if client is alive and returns true or false. -- @param #CLIENT self -- @param #boolean Returns true if client is alive. function CLIENT:IsAlive() - self:F() + self:F( self.ClientName ) local ClientDCSGroup = self:GetDCSGroup() if ClientDCSGroup then + self:T("true") return true end + self:T( "false" ) return false end --- @param #CLIENT self function CLIENT:_AliveCheckCallBack() + self:F( { self.ClientName, self.ClientAlive2 } ) if self:IsAlive() then - if self.ClientAlive == false then + if self.ClientAlive2 == false then + self:T("Calling Callback function") self.ClientCallBack( self ) - self.ClientAlive = true - routines.removeFunction( self.AliveCheckFunction ) + self.ClientAlive2 = true + end + else + if self.ClientAlive2 == true then + self.ClientAlive2 = false end end end diff --git a/Moose/Escort.lua b/Moose/Escort.lua index ea9d9d1bc..71c76ea3b 100644 --- a/Moose/Escort.lua +++ b/Moose/Escort.lua @@ -8,7 +8,7 @@ -- * Report identified targets -- * Perform tasks per identified target: Report vector to target, paint target, kill target -- --- @module ESCORT +-- @module Escort -- @author FlightControl Include.File( "Routines" ) @@ -24,6 +24,9 @@ Include.File( "Zone" ) -- @field Group#GROUP EscortGroup -- @field #string EscortName -- @field #number FollowScheduler The id of the _FollowScheduler function. +-- @field #boolean ReportTargets If true, nearby targets are reported. +-- @Field DCSTypes#AI.Option.Air.val.ROE OptionROE Which ROE is set to the EscortGroup. +-- @field DCSTypes#AI.Option.Air.val.REACTION_ON_THREAT OptionReactionOnThreat Which REACTION_ON_THREAT is set to the EscortGroup. ESCORT = { ClassName = "ESCORT", EscortName = nil, -- The Escort Name @@ -31,6 +34,9 @@ ESCORT = { EscortGroup = nil, Targets = {}, -- The identified targets FollowScheduler = nil, + ReportTargets = true, + OptionROE = AI.Option.Air.val.ROE.OPEN_FIRE, + OptionReactionOnThreat = AI.Option.Air.val.REACTION_ON_THREAT.ALLOW_ABORT_MISSION } --- MENUPARAM type @@ -48,10 +54,9 @@ function ESCORT:New( EscortClient, EscortGroup, EscortName ) local self = BASE:Inherit( self, BASE:New() ) self:F( { EscortClient, EscortGroup, EscortName } ) - self.EscortClient = EscortClient - self.EscortGroup = EscortGroup + self.EscortClient = EscortClient -- Client#CLIENT + self.EscortGroup = EscortGroup -- Group#GROUP self.EscortName = EscortName - self.ReportTargets = true self.EscortMenu = MENU_CLIENT:New( self.EscortClient, "Escort" .. self.EscortName ) @@ -88,25 +93,39 @@ function ESCORT:New( EscortClient, EscortGroup, EscortName ) -- Reaction to Threats self.EscortMenuEvasion = MENU_CLIENT:New( self.EscortClient, "Evasion", self.EscortMenu ) - self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._EvasionNoReaction, { ParamSelf = self, } ) - self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._EvasionPassiveDefense, { ParamSelf = self, } ) - self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._EvasionEvadeFire, { ParamSelf = self, } ) - self.EscortMenuEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._EvasionVertical, { ParamSelf = self, } ) + self.EscortMenuEvasionNoReaction = MENU_CLIENT_COMMAND:New( self.EscortClient, "Fight until death", self.EscortMenuEvasion, ESCORT._OptionROTNoReaction, { ParamSelf = self, } ) + self.EscortMenuEvasionPassiveDefense = MENU_CLIENT_COMMAND:New( self.EscortClient, "Use flares, chaff and jammers", self.EscortMenuEvasion, ESCORT._OptionROTPassiveDefense, { ParamSelf = self, } ) + self.EscortMenuEvasionEvadeFire = MENU_CLIENT_COMMAND:New( self.EscortClient, "Evade enemy fire", self.EscortMenuEvasion, ESCORT._OptionROTEvadeFire, { ParamSelf = self, } ) + self.EscortMenuOptionEvasionVertical = MENU_CLIENT_COMMAND:New( self.EscortClient, "Go below radar and evade fire", self.EscortMenuEvasion, ESCORT._OptionROTVertical, { ParamSelf = self, } ) -- Cancel current Task - self.EscortMenuCancelTask = MENU_CLIENT_COMMAND:New( self.EscortClient, "Cancel current task", self.EscortMenu, ESCORT._CancelCurrentTask, { ParamSelf = self, } ) + self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume Mission", self.EscortMenu ) + self.EscortMenuResumeWayPoints = {} + local TaskPoints = self:RegisterRoute() + for WayPointID, WayPoint in pairs( TaskPoints ) do + self.EscortMenuResumeWayPoints[WayPointID] = MENU_CLIENT_COMMAND:New( self.EscortClient, "Resume from waypoint " .. WayPointID, self.EscortMenuResumeMission, ESCORT._ResumeMission, { ParamSelf = self, ParamWayPoint = WayPointID } ) + end + -- Initialize the EscortGroup - self.ScanForTargetsScheduler = routines.scheduleFunction( self._ScanForTargets, { self }, timer.getTime() + 1, 30 ) + self.EscortGroup:OptionROTVertical() + self.EscortGroup:OptionROEOpenFire() + + self.EscortGroup:PushTask( EscortGroup:TaskRoute( TaskPoints ) ) + + self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) end --- @param #MENUPARAM MenuParam function ESCORT._HoldPosition( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + routines.removeFunction( self.FollowScheduler ) + EscortGroup:PushTask( EscortGroup:TaskHoldPosition( 300 ) ) MESSAGE:New( "Holding Position at ... for 5 minutes.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/TaskHoldPosition" ):ToClient( EscortClient ) end @@ -114,10 +133,13 @@ end --- @param #MENUPARAM MenuParam function ESCORT._HoldPositionNearBy( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient --MenuParam.ParamSelf.EscortGroup:TaskOrbitCircleAtVec2( MenuParam.ParamSelf.EscortClient:GetPointVec2(), 300, 30, 0 ) + + routines.removeFunction( self.FollowScheduler ) local PointFrom = {} local GroupPoint = EscortGroup:GetPointVec2() @@ -141,8 +163,7 @@ function ESCORT._HoldPositionNearBy( MenuParam ) local Points = { PointFrom, PointTo } - - EscortGroup:PushTask( EscortGroup:TaskMission( Points ) ) + EscortGroup:PushTask( EscortGroup:TaskRoute( Points ) ) MESSAGE:New( "Rejoining to your location. Please hold at your location.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/HoldPositionNearBy" ):ToClient( EscortClient ) end @@ -150,8 +171,8 @@ end function ESCORT._JoinUpAndFollow( MenuParam ) local self = MenuParam.ParamSelf - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient local Distance = MenuParam.ParamDistance @@ -167,18 +188,32 @@ end function ESCORT._ReportNearbyTargets( MenuParam ) - MenuParam.ParamSelf:T() - - MenuParam.ParamSelf.ReportTargets = MenuParam.ParamReportTargets + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + self.ReportTargets = MenuParam.ParamReportTargets + + if self.ReportTargets then + if not self.ReportTargetsScheduler then + self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, 30 ) + end + else + routines.removeFunction( self.ReportTargetsScheduler ) + self.ReportTargetsScheduler = nil + end end --- @param #MENUPARAM MenuParam function ESCORT._ScanTargets30Seconds( MenuParam ) MenuParam.ParamSelf:T() - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + routines.removeFunction( self.FollowScheduler ) EscortGroup:PushTask( EscortGroup:TaskControlled( @@ -193,8 +228,11 @@ end function ESCORT._ScanTargets60Seconds( MenuParam ) MenuParam.ParamSelf:T() - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + routines.removeFunction( self.FollowScheduler ) EscortGroup:PushTask( EscortGroup:TaskControlled( @@ -208,12 +246,16 @@ end --- @param #MENUPARAM MenuParam function ESCORT._AttackTarget( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient local AttackUnit = MenuParam.ParamUnit - - EscortGroup:OpenFire() - EscortGroup:EvasionVertical() + + routines.removeFunction( self.FollowScheduler ) + self.FollowScheduler = nil + + EscortGroup:OptionROEOpenFire() + EscortGroup:OptionROTVertical() EscortGroup:PushTask( EscortGroup:TaskAttackUnit( AttackUnit ) ) MESSAGE:New( "Attacking Unit", MenuParam.ParamSelf.EscortName, 10, "ESCORT/AttackTarget" ):ToClient( EscortClient ) end @@ -221,91 +263,131 @@ end --- @param #MENUPARAM MenuParam function ESCORT._ROEHoldFire( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:HoldFire() + EscortGroup:OptionROEHoldFire() MESSAGE:New( "Holding weapons.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/ROEHoldFire" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam function ESCORT._ROEReturnFire( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:ReturnFire() + EscortGroup:OptionROEReturnFire() MESSAGE:New( "Returning enemy fire.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/ROEReturnFire" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam function ESCORT._ROEOpenFire( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:OpenFire() + EscortGroup:OptionROEOpenFire() MESSAGE:New( "Open fire on ordered targets.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/ROEOpenFire" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam function ESCORT._ROEWeaponFree( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:WeaponFree() + EscortGroup:OptionROEWeaponFree() MESSAGE:New( "Engaging targets.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/ROEWeaponFree" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam -function ESCORT._EvasionNoReaction( MenuParam ) +function ESCORT._OptionROTNoReaction( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:EvasionNoReaction() - MESSAGE:New( "We'll fight until death.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/EvasionNoReaction" ):ToClient( EscortClient ) + EscortGroup:OptionEvasionNoReaction() + MESSAGE:New( "We'll fight until death.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/OptionEvasionNoReaction" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam -function ESCORT._EvasionPassiveDefense( MenuParam ) +function ESCORT._OptionROTPassiveDefense( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:EvasionPassiveDefense() - MESSAGE:New( "We will use flares, chaff and jammers.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/EvasionPassiveDefense" ):ToClient( EscortClient ) + EscortGroup:OptionROTPassiveDefense() + MESSAGE:New( "We will use flares, chaff and jammers.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/OptionROTPassiveDefense" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam -function ESCORT._EvasionEvadeFire( MenuParam ) +function ESCORT._OptionROTEvadeFire( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:EvasionEvadeFire() - MESSAGE:New( "We'll evade enemy fire.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/EvasionEvadeFire" ):ToClient( EscortClient ) + EscortGroup:OptionROTEvadeFire() + MESSAGE:New( "We'll evade enemy fire.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/OptionROTEvadeFire" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam -function ESCORT._EvasionVertical( MenuParam ) +function ESCORT._OptionROTVertical( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient - EscortGroup:EvasionVertical() - MESSAGE:New( "We'll perform vertical evasive manoeuvres.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/EvasionVertical" ):ToClient( EscortClient ) + EscortGroup:OptionROTVertical() + MESSAGE:New( "We'll perform vertical evasive manoeuvres.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/OptionROTVertical" ):ToClient( EscortClient ) end --- @param #MENUPARAM MenuParam -function ESCORT._CancelCurrentTask( MenuParam ) +function ESCORT._ResumeMission( MenuParam ) - local EscortGroup = MenuParam.ParamSelf.EscortGroup - local EscortClient = MenuParam.ParamSelf.EscortClient + local self = MenuParam.ParamSelf + local EscortGroup = self.EscortGroup + local EscortClient = self.EscortClient + + local WayPoint = MenuParam.ParamWayPoint + + routines.removeFunction( self.FollowScheduler ) + self.FollowScheduler = nil + local WayPoints = EscortGroup:GetTaskRoute() + self:T( WayPoint, WayPoints ) + + for WayPointIgnore = 1, WayPoint do + table.remove( WayPoints, 1 ) + end + EscortGroup:PopCurrentTask() - MESSAGE:New( "Cancelling with current orders, continuing our mission.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/CancelCurrentTask" ):ToClient( EscortClient ) + EscortGroup:PushTask( EscortGroup:TaskRoute( WayPoints ) ) + MESSAGE:New( "Resuming mission.", MenuParam.ParamSelf.EscortName, 10, "ESCORT/ResumeMission" ):ToClient( EscortClient ) +end + +function ESCORT:RegisterRoute() + + local EscortGroup = self.EscortGroup -- Group#GROUP + + local TaskPoints = EscortGroup:GetTaskRoute() + self:T( TaskPoints ) + + for TaskPointID, TaskPoint in pairs( TaskPoints ) do + self:T( TaskPointID ) + TaskPoint.task.params.tasks[#TaskPoint.task.params.tasks+1] = EscortGroup:TaskRegisterWayPoint( TaskPointID ) + self:T( TaskPoint.task.params.tasks[#TaskPoint.task.params.tasks] ) + end + + self:T( TaskPoints ) + + return TaskPoints end --- @param Escort#ESCORT self @@ -355,46 +437,49 @@ function ESCORT:_FollowScheduler( FollowDistance ) local GV = { x = GV2.x - CV2.x, y = GV2.y - CV2.y, z = GV2.z - CV2.z } -- Calculate GH2, GH2 with the same height as CV2. - local GH2 = { x = GV2.x, y = GV2.y, z = CV2.z } + local GH2 = { x = GV2.x, y = CV2.y, z = GV2.z } -- Calculate the angle of GV to the orthonormal plane - local alpha = math.atan2( GV.y, GV.x ) + local alpha = math.atan2( GV.z, GV.x ) -- Now we calculate the intersecting vector between the circle around CV2 with radius FollowDistance and GH2. - -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(CV2) + FollowDistance sin(alpha), z(GH2)) + -- From the GeoGebra model: CVI = (x(CV2) + FollowDistance cos(alpha), y(GH2) + FollowDistance sin(alpha), z(CV2)) local CVI = { x = CV2.x + FollowDistance * math.cos(alpha), - y = CV2.y + FollowDistance * math.sin(alpha), - z = GH2.z - } + y = GH2.y, + z = CV2.z + FollowDistance * math.sin(alpha), + } + + -- Calculate the direction vector DV of the escort group. We use CVI as the base and CV2 as the direction. + local DV = { x = CV2.x - CVI.x, y = CV2.y - CVI.y, z = CV2.z - CVI.z } + + -- We now calculate the unary direction vector DVu, so that we can multiply DVu with the speed, which is expressed in meters / s. + -- We need to calculate this vector to predict the point the escort group needs to fly to according its speed. + -- The distance of the destination point should be far enough not to have the aircraft starting to swipe left to right... + local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } + + -- Now we can calculate the group destination vector GDV. + local GDV = { x = DVu.x * CS * 2 + CVI.x, y = CVI.y, z = DVu.z * CS * 2 + CVI.z } + self:T2( { "CV2:", CV2 } ) + self:T2( { "CVI:", CVI } ) + self:T2( { "GDV:", GDV } ) -- Measure distance between client and group - local CatchUpDistance = ( ( CVI.x - GV2.x )^2 + ( CVI.y - GV2.y )^2 + ( CVI.z - GV2.z )^2 ) ^ 0.5 - local Distance = CatchUpDistance - FollowDistance + local CatchUpDistance = ( ( GDV.x - GV2.x )^2 + ( GDV.y - GV2.y )^2 + ( GDV.z - GV2.z )^2 ) ^ 0.5 -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome -- the requested Distance). - local Time = 1600 / FollowDistance - local CatchUpSpeed = ( Distance / Time ) * ( CatchUpDistance / 1000 ) - - -- Follow speed required = Client Speed - Group Speed + Speed to overcome distance. - local BreakSpeed = ( GS * ( ( 1 ) / Distance ) ) - if BreakSpeed < 0 then - BreakSpeed = 0 - end + local Time = 30 + local CatchUpSpeed = ( CatchUpDistance - ( CS * 2 ) ) / Time - if BreakSpeed > CS then - BreakSpeed = CS - end - - local Speed = CS + CatchUpSpeed --- - BreakSpeed + local Speed = CS + CatchUpSpeed if Speed < 0 then Speed = 0 end - self:T( { "Client Speed, Client Time, Escort Speed, Speed, CatchUpSpeed, BreakSpeed, Distance, Time:", CS, CT, GS, Speed, CatchUpSpeed, BreakSpeed, Distance, Time } ) + self:T( { "Client Speed, Escort Speed, Speed, FlyDistance, Time:", CS, GS, Speed, Distance, Time } ) -- Now route the escort to the desired point with the desired speed. - self.EscortGroup:TaskRouteToVec3( CVI, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) + self.EscortGroup:TaskRouteToVec3( GDV, Speed / 3.6 ) -- DCS models speed in Mps (Miles per second) end else routines.removeFunction( self.FollowScheduler ) @@ -403,7 +488,7 @@ function ESCORT:_FollowScheduler( FollowDistance ) end -function ESCORT:_ScanForTargets() +function ESCORT:_ReportTargetsScheduler() self:F() self.Targets = {} @@ -511,6 +596,7 @@ function ESCORT:_ScanForTargets() end else - routines.removeFunction( self.ScanForTargetsScheduler ) + routines.removeFunction( self.ReportTargetsScheduler ) + self.ReportTargetsScheduler = nil end end diff --git a/Moose/Group.lua b/Moose/Group.lua index 7754f9e01..98399764c 100644 --- a/Moose/Group.lua +++ b/Moose/Group.lua @@ -26,7 +26,8 @@ GROUP = { -- @type DCSGroup -- @field id_ The ID of the group in DCS -GROUPS = {} +--- The GROUPS structure contains references to all the created GROUP instances. +local GROUPS = {} --- Create a new GROUP from a DCSGroup -- @param self @@ -44,6 +45,8 @@ function GROUP:New( DCSGroup ) else self:E( { "DCSGroup is nil or does not exist, cannot initialize GROUP!", self.DCSGroup } ) end + + GROUPS[self.GroupID] = self return self end @@ -64,6 +67,8 @@ function GROUP:NewFromName( GroupName ) self.Controller = self.DCSGroup:getController() end + GROUPS[self.GroupID] = self + return self end @@ -82,6 +87,8 @@ function GROUP:NewFromDCSUnit( DCSUnit ) self.Controller = self.DCSGroup:getController() end + GROUPS[self.GroupID] = self + return self end @@ -556,13 +563,27 @@ function GROUP:TaskEmbarkToTransportAtVec2( Point, Radius ) return DCSTask end ---- Return a Misson task to follow a given route. +--- Return a Misson task from a mission template. -- @param #GROUP self --- @param #table Points A table of Route Points. +-- @param #table TaskMission A table containing the mission task. -- @return #DCSTask -function GROUP:TaskMission( Points ) +function GROUP:TaskMission( TaskMission ) self:F( Points ) + local DCSTask + DCSTask = { id = 'Mission', params = { TaskMission, }, } + + self:T( { DCSTask } ) + return DCSTask +end + +--- Return a Misson task to follow a given route defined by Points. +-- @param #GROUP self +-- @param #table Points A table of route points. +-- @return #DCSTask +function GROUP:TaskRoute( Points ) + self:F( Points ) + local DCSTask DCSTask = { id = 'Mission', params = { route = { points = Points, }, }, } @@ -622,6 +643,33 @@ function GROUP:Route( GoPoints ) return self end +function GROUP:TaskRegisterWayPoint( WayPoint ) + + local DCSTask + + DCSTask = { id = "WrappedAction", + enabled = true, + auto = false, + number = 1, + params = + { + action = + { + id = "Script", + params = + { + command = "local MissionGroup = GROUP.FindGroup( ... ) " .. + "env.info( MissionGroup:GetName() ) " .. + "MissionGroup:RegisterWayPoint ( " .. WayPoint .. " )", + }, -- end of ["params"] + }, -- end of ["action"] + }, -- end of ["params"] + } + self:T( DCSTask ) + + return DCSTask +end + --- Route the group to a given zone. -- The group final destination point can be randomized. -- A speed can be given in km/h. @@ -678,6 +726,24 @@ function GROUP:TaskRouteToZone( Zone, Randomize, Speed, Formation ) return self end +--- Return the mission template of the group. +-- @param #GROUP self +-- @return #table The MissionTemplate +function GROUP:GetTaskMission() + self:F( self.GroupName ) + + return _Database.Groups[self.GroupName].Template +end + +--- Return the mission route of the group. +-- @param #GROUP self +-- @return #table The mission route defined by points. +function GROUP:GetTaskRoute() + self:F( self.GroupName ) + + return _Database.Groups[self.GroupName].Template.route.points +end + --- Return the route of a group by using the @{Database#DATABASE} class. -- @param #GROUP self -- @param #number Begin The route point from where the copy will start. The base route point is 0. @@ -757,7 +823,7 @@ end --- Holding weapons. -- @param #GROUP self -- @return #GROUP self -function GROUP:HoldFire() +function GROUP:OptionROEHoldFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -769,7 +835,7 @@ end --- Return fire. -- @param #GROUP self -- @return #GROUP self -function GROUP:ReturnFire() +function GROUP:OptionROEReturnFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -781,7 +847,7 @@ end --- Openfire. -- @param #GROUP self -- @return #GROUP self -function GROUP:OpenFire() +function GROUP:OptionROEOpenFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -793,7 +859,7 @@ end --- Weapon free. -- @param #GROUP self -- @return #GROUP self -function GROUP:WeaponFree() +function GROUP:OptionROEWeaponFree() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -805,7 +871,7 @@ end --- No evasion on enemy threats. -- @param #GROUP self -- @return #GROUP self -function GROUP:EvasionNoReaction() +function GROUP:OptionEvasionNoReaction() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -817,7 +883,7 @@ end --- Evasion passive defense. -- @param #GROUP self -- @return #GROUP self -function GROUP:EvasionPassiveDefense() +function GROUP:OptionROTPassiveDefense() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -829,7 +895,7 @@ end --- Evade fire. -- @param #GROUP self -- @return #GROUP self -function GROUP:EvasionEvadeFire() +function GROUP:OptionROTEvadeFire() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -841,7 +907,7 @@ end --- Vertical manoeuvres. -- @param #GROUP self -- @return #GROUP self -function GROUP:EvasionVertical() +function GROUP:OptionROTVertical() self:F( { self.GroupName } ) local Controller = self:_GetController() @@ -908,3 +974,25 @@ function GROUP:MessageToClient( Message, Duration, Client ) self:Message( Message, Duration ):ToClient( Client ) end +function GROUP:RegisterWayPoint( WayPoint ) + + self:Message( "Moving over wayPoint " .. WayPoint, 20 ):ToAll() + self.WayPoint = WayPoint +end + + + + +--- Find the created GROUP using the DCSGroup ID. If a GROUP was created with the DCSGroupID, the the GROUP instance will be returned. +-- Otherwise nil will be returned. +-- @param DCSGroup#Group Group +-- @return #GROUP +function GROUP.FindGroup( DCSGroup ) + + local self = GROUPS[DCSGroup:getID()] -- Group#GROUP + self:T( self:GetClassNameAndID() ) + return self + +end + + diff --git a/Test Missions/miz/MOOSE_Escort_Test_Follow.miz b/Test Missions/miz/MOOSE_Escort_Test_Follow.miz index a7692717ed46e8caa4692233c582b2591bf28113..9c73feb6297b46e5cc3729416100f9c18d24e758 100644 GIT binary patch delta 36808 zcmZU(18^Wg*Df5}$;P&A+qO1#HpvDXCllMYZ5tb#8=D*3{`dXsdvDcuZ&mlyO!s+C zJ=1f#`}CP})(aNW0R||`fkR+`fPuh(fPfH#OcL12R?vZfyqJK2K>us8vvzj2cCf$j znXum<&G;*rD|%glWK=1xs>SXpBG*)HDs!JtZfTxvkJ2Q*o|PocLBTVjaXfT>gb0=9 zmIjJ@JXQ470W_G&dG6vBlV-ySulpcKhn$iRkkX z>>clYNFCe?usAbh{1kmplmARpJutOf8^O38$&e6SD)y;Le_rV|T&k(DY3Z!;m^m&Z zA+zpXy^P_FTY*R7BAa1)T+eQuetF-uIPeJLA7OXO*@s}_cRPVt@WbAc}1 zH5teS1-m_$^{CDIG)TWSpg8N6ef9b_?v<%?WmnP*w5EGAaq{je=b3_Q+C8qEzjrI_ zG3<7Twr|NBjMPIa&w99#^N*b0Tx@Q+0e*(h@E(NXZu9}!<1Q_fU0fUWHUJ5-<6gX_ zZF8~UA9?TqCiI||LDkGldZ2Zixw>tiZKdDTOY1ybDG0Csj+B?*+pE*?Vss?*>AlNI zpYIoNP)3&3#fAK)I$b@9Mfs$#ww3%s`y<-8m+&Rv+UDq@O5-|tn8N7=HVggRSDm3) z39v#uY>{B-*KoK)F1KejIh0gl+cf4 zf{aD6rXU1v@GbX4({C|tvkoRdyGpAsdVQ2AvwOm33}(J8UgYlH#AJQbJBa&nq;=6& z^kX%D``R*%Y&j8SwjICswx6~**r=V2wc4K6J>DDqsY*@$j@Q+>w5AiJG<2BVYbgH& zXgQU-Ha2Y3wkUZ})_YoTX)#zU;{}>-ITEkX>*}M;*!|w`4>loob_LNi57j6D#QWKA z-@?hGKLs;`Uf^k4R5J;4$@6Dl&y5+0a-}lKZjukxAN^~WV?tYcTGf&lp5}ec4>m7` zI8RAGG0pAhknua0EN2WEcAF{@L$BGKmsjm@FvZ&fneB;;_zd_!On^gvAxi*}PtXK< zNQMb6iqGd~!}%=u4OfIbW-lJVGS$5zc=-OZ=zP(|nSE@KA&BKm{(9OP=X?+g7P3;( zi|pI=`~iF{179CPzF)mx4??HS+h0dlUoUT8uwTFYS)VfZEy9kLYTzw21oMqM>&F5_ zp6}*w?xelupwYSQ!DV(jNqM|k{UtuP_~ZBa`+Si@QJZNxmi~-$=5_;Edl?O`who=3 zccYwcS9pBo>z9w8=-OZlT!T#C_C&aFgAMIYx{;2 z`8Yu$pN1lg;dwS=8m$2w(Vn)(kJ5|F2B;}1to7*n6K0(<{xwjFTe|1b6#fE- z=_L;*&FM=4GgbIrW9!cKfm(u&>^UzPWz>Z0Re!u|b406#6uos{pV&U+G9M%!@BB-* zt+i$*+swtSdRt)&kVcqHOl$+%RXOOK_&Hg>KiPt>$8>Xj`X0dBVM=hjQ(^pY_h78j z66atkIgtxzPxs3ChTX6UUmkh3*vN?&_q#z~uoXvEQF@?He{=a7&g0ffwp8Uvh<6vm z4$7-x0MYuCLFZ<5E3c~BWeaa=eIeIvh;;O`5y95A+V$Bt_Zm8yhhs!E6>pe2Z(i(* zs&DpXuhBz<*xEq9dAQj}3VDKmr(A>4#Pg!&&*tdwcF?sNb(I9}-we|>cQoH2yZxqC zB+5}YB6~#=uI*U5@aHM_Q^EH#!aKolGs4}V?;ox!NqoZHARzYCmCm zZ*@mbJmlU7VMC(Gn!-J>JbqsCOnwJ-E|^PY@F!6uA?@!h|1^lh8;X9jQr~ z%tfVXsqky)DW;c5rb=DGQP4NmY6j8IO*C#hz}hD0Sm`}pF>rWeAd(Ainv}oksU%r8FEe zF$spGh2NEIcDQz2GxyzCglirw?D?rse`L2`&O)PK@oSfYhv-v6SzlegKOt)?D_V{J zo(d;7JN1RPBZ(RE6h{mC%Bm~EudBIO1R@&^Edvr@^DqdNH-E_cOf;vgdaJ_3W#|v2 zLMLA7bm9jtll$2?`r90VJXChOSK~Zdd^JUkRha!?0Bhk~9#n0pNBrSt_hQH<(hQr& z%b%yanr81!=dnXc@(U)eL*ILxC8V|Gs27Dw(*>-Se)%u2RA5;*;>XC{MxazbY#w8|liuAu`tB_V^UQ+R!v_twt;@T`9#Pa!nlxW81+SiMaNuEb#n`_x zu3?5h^TEJ8$oHo29btig=)(B8m30?>H55OKbEq>KEg8cT61_?Swr|q%^d0;39%S`r z-)oMtGXF%TW~Z9|=uorG@no(0Bk=yK?ou9`zn(YZW|C>`d29I5EoO?D;aQR;0uH2~ zkOq!?`_FoCbHklI2gGnElLR3^_x$c^DMdody1w7G435J#yt`yUi~L#mN&Mu=N<&Y) zE$7Q43FU&@?TL*wtFFBrAWa%CcXDR|y(v_(V4U++`phD8veY>u)Gg;a4P?+c+;Dj6 zu|mh~y1ZO#V9T(G%r;=P9lQU%8@{dP80qN?&Cv1W-nQgXY`gQ}&bWVjP-E?hzWQ!> z;f6^Nqw^Wry^iT?i)}R4nFPc4<$IKUVJ`9aZqG!((%i9&;WzM-H?I2?0B7;wL_5fHi)d~a|=wg$SOXRJAyC-bz{b-_3o zv;IgdeN&dx)H@pbm~E$KvB#n6&Qe*1o6DxnR^N%^0Id{#audan{5^{jR_g7EC=wDLfsv>@0S73Z*D#Kp^QbOqyZ zvYNAn!uD5Nzw8`3BcH6e#*|^xp_oF`X_bD!HMRbxUg2_$Q754Vw8LbtWd}k;Bpe>) zb6IHlG@|6p0m16Y(&U#Wn= zQ3~>Rn&2QxZj?g{xzmV|<4VtWC6l~sF=^_?! zI7zY=Wo99=7SxfG#B{0z)K3>F^R}&gS)^i>%hnw20PNaI(R zS?G#ESGpUq`!VB%p*zw!!tT`5(wGwU(aT_aqapQ`z~maO+7XcqnL0Lm|6jK`nAJo$ z#f;@qz$rC&LHHRAds&0VFBwdm6;e6=(6jT8tt?{s<`0(2?-aY0h&vrPu3 zXu{Q%zVFeMFb1d)IF@L!cPJ8X{+Xw&s1EjGnWTeY}q}DR4==wX{$EM-4uZi4cZ?_kq+Mq zUvG$FD19_8yGP$DoUXQ!7p$Ar54UJ!W&br{e^r1W`^%xK^Xe8CYVfY%Gyrg!vfoc1 zc^ek&nmZV_(v-{BfBXy$aP1^2C>y%~i_opqaLE2_s#KnpRjVWq#zz@fKKx!GD#8;~ z<}4L(*{Tfc`4t1XwQJ4Ou$j7PYm?U>x_YgQdcW0SQy(mdJDYlcvui=*yFzcku-vS* z{giiH1j%_|8b!aTmo)=T8xL$$xN+w?l>ADb@$SH5{54(b1#KO6_d;ACy8G7~C1Bxn z(JPBdx&Pb5iwoamX9vA!OYUE9|3BGtHGO4asWv>Jj=a&HwIh5C1G8n4-HV6vdq}NG zlHIEZJ|fuAkY4cA5|7D}->s=7I5B?*<*1uEfRamZ?9U>B*PEA*enJ4!aqxD^M)-J} zqFzbr4o!LzoHX31?r!bOlnp9Z(wn4w-wU@6b7bd@Sz99T8=^fkEs2FpI?btzLwp1i z7M^bd$*14*EVNErJge<17p)wNp>JL`BHz~kynU*lh*-)ZCuCF$(F>HROdk+$QD_`O z!DiqsptW8g?>|oTUX%bwP!AO~Lg!}|6knZB`gOFBzWnfr*%lP`KmeH zi2RbIk4l)4?rG;=#Lml-zq%rtD$RmqCCki$VpCCh;b!OcHW`(d^$3cm=vbuZdB~w& zOv$0zDdg?dzd31zBYa_#2D%FXwDI|9IR7qfqaYI+wAC&1DL@B7`v?Q;=y>^&Qmmet zm8_-R!=G~UU|H2N^5834ny_W~f&>g&nfwHd>G)x2#b-?=`&KWz^1k&o5$mycYwv&i zjp_VzM{<#}3|w;2^>>P3%D|%8ivQ7&APuKbt_6MMtY_WQ(Ooi`dA)6QAJaUU2`LUG zQ!Zry1Dr&Wiq-yy)GoLnp7(2P_1vSe#KiQP9Jgkf-SOvnyX&r#-BFdImWI{@&&O6=q->k<(G7xA>%IAx)7+t0)$);xIjY`gt-3WMq%~i!xU5P~yD#liy+{!sTdh;Q z;vS7tJ)MPCPUTMW^2G$No!>h(%an4mH`EP4&BECYVMDoqH(v6qX1PQ1&{Jmw!UY{a%yck+D^cp$nC{IQ9Zoe`F7s1Ic6+4ZA(H1c1)3WCEOt3F}2PL5e1 zv6~NVhn+%M2^w@H?0tpJEpVW$_8fMwb`U3e7tef*!%NM*#v!<2hyKtf2(d1HQZ_pM zv#fQdMJ45?D~haAgE`<7Q&O_bi2?~cu6`KGFod-8BK$e6FUWhXjmey%QU#1_9{XjH z1QC7cIzySttC_X5j47ZKFRKl!Yio@rriLYK7$z5Wv`_xp=w^4KvXz%JYbhDqjO=s$ z^FFH1ow)jZoLi>V#39uDOUk<&u=pt9=R(!>*6it@&YKhJ{*b&53(3BeY!Ly6s{1uw zWC_q03!NpKhtt7Akofo0r(i0KpMDWMVf6^j$@N-SBHwFX@0_Rn#yt-u%QvV2Pp$}c zFfQ3j{$Dg-lhgPI_*pnw-#J_Rk&a2%5m6eeOOrq9IUTQyi(7Lj1V@kYMvjEveY^>i zF-wtUeHwkvhI)2>mRv``ZxjHc7043ttKQUfXPb|2DSX%2T$!egk(qON0l0cPBVist z=IyE?Ty9iS=GBHasTtk&E(~^mW|dR2_CDN|nOWjOM}4?v4nQoCtUz|~yMpSn+Dt|p zzbWxB|AI~P)F19QK$7422~?k~S9ec6ed)j}HhbH6!bI`jjG6TZ>WYGj$} zeN7RYWc#fwGZb~@U;Tl8BV&6Q6fsk374F5n#?+$}v^*(hr_tv0ej%clP&BZJb)bcb?jPupCrhldUr zKJ1RNFZ3yApM>x%QmO%)(ry}EJqeEk#Gbd|=RAUDL$iYky@plGvy&oe(o~1BL2NI$ z__)Kwr1dat7S5)uSqPKRKHTZnAs&TDQfkfxnXxv2AQAjn8vW#?{J2>^mHLKubz#GO z!3{;gu>7Y#dC>U!%OJir7n?IT%gC!YE1Oh@;9?MYW=L{6vN}+JI=rIiY+dbNW*^hH zCFs&;&>ksTFR>2~Nz0~ZMP9hI<)BBR1LDZ?2M;9>rBqS=msyinY+nyESCbVHhb8TX zerT&38%g*~U}ic`dzwEpvLeoa!6g>o3|DFGQl@~*FG~vY0W0nFba4t?kF>ywwAA0~65PKa=fxjhETIChi9Um{MFn~=Z5!u1a!@%OCYSgwZRdEB za3{ISd;yKD9|IXWUA%ZCJYs%hlc;FrW#ToDeUx51%ksJ9WGux$!4zG`GR5f?wD8Uv zS<7rlCQUMQ#cBJ)Pu@k?Ufn7j;W3hC#Kh!v_`?&@ks$z4RL=WFkuP?`CYClW$kWWU zjl2MJ3%KkbL0nvS<(#SxeTb(Agg@#l(vBEFDcOXii}px6EjaOFDORM*jb4JBNmpSU zE?rEY8wFWv`}+9jEO*3nrX)>jh~U&MdS;~+b6I?Rz>+e;F=gqD=rT4^%s=Dua!ol= zbpi;M!G8j0KVaGz&PkHR$9`#>1{L7lNWYC`Wh_4-|CJ^XN&~-;JevuLHE9TpN%7Gu zK_^W785&>Vg8r_+1^s#yo+rwPN*kIbM~TDMzJ(u6ZD9y6Ketm+C#l7%%h*U4{4+>^ z?9HRJohimP(q593%-jM#*l452Bx#_>B&)B-MEL@s3pJE{GNPQ4GSSsQBTjFRBS+s9 z8uqz+jLauOvSn#S#3z5Vk0(aoBp+u+mJB}XqqZa5kW;v`cuwS`4m=luoR~!CT`gkc zL@}Ij8r(B_QCfjmEwg0fw@v9evYVt15S8zxgr)A(N|a`#E#4Bue;_nwcz}&NPp}S< zuV@AowBg}EEkxk;`fcWyAL4n_(~&#ug*mY4^Lx_N0-}<#iOd4n#6kxJ9U7Q(Xid$|{CQ%P?vW_Uy;%0eOe6$D zzoy!U$$njER#@+Twe!rmoU$K*6YCZ*LYN4I#)S}y4SaSXKs%vPzJZDpCu8KpJSEKs zQU7}vQw(%7bi^uW$0^D z?vs29+39Q2c!30((w`_stZc#mOdQqBL0kPwv4O0u6DR=1Dnt?x%t~J_v=y0ZVsFA<(xu%k<3nMsMsP(Z zRd#J9j@M@oalh(aDcSAnl8lEm8AhQ}ZWuwKf|bx1`19*-7sR*fKQKt?7j z6LmHqW(vGr9Xf@V!T$};kN&tTz^tIsw**&t4sy?@%`l?<6rFli%O^ou9so9BDtqmp z@0SthWN`St1-q&a$2;-SumsSApP#zppJNrsg0fcyqpg~X7iQpMpd#3@FW65?{kktp z|I?Fijov6U@8HnvpXRBDY30hmn230cd3(U8cei+(x=k+?)t512i8vtZH)fAa87IpW zP4Y8?5!PzX345$9C3IIhH~nc~P8tuUyAjRb$z4VIU_Q%XImEYCp#YNN=Si{r?2!IX zaZX}>uP*TM$;mFLPPUy2#^b*U;$xHF!15uSrEwGqa5e1{rPoft8KhF`N|+;OFf4{* zlk-`8X4$DT5JEouP)PxY5}Kc@v1u6dGAZ@cNT<4xXd9#NRe0$2)us?#@0hG;H?Wa2 zOI};B_BTAD2Tjje(nX$$vhlSjV!E@r;^UfO{FP!NcKk5>f@)UcxTg$|xOJSF8UD>j zDg-B{b|tVrDJ5hUZfzxOewyb_2R?tY7Xuv}S_>>xOLiGF@6iCN9Be=zEfoRvhkx5X zM(Lz*jAAhp*-v+PT)GsHvB^mC^l;*DeFO-waakm^7^R|R7dUt2*SjNBQCYMMqU5wa zc<7ClX{S4svT^8YHcEMBSWAgP!{0bm7TFmoqK|npk11zWJ~@|z9y79)oxCPdL}4`} zY{k^Brq0^S`Z58Tw2cl!XULQarGgX15#p=KItR0w4OiL4V75dgXnxp@?63yOfqNT+)H5HRLljiH_@|j z^cB^3BclZC?&N63zr9)K7ez37AkH%T0k|5d-nqzwXgk zlaG_0^g{qMpazok6{-%ORXCnBaOFcFSTzNhR78u3(5l)W8t(;+7-i?4Y{6#qTSpf7 zLEgs{+)=7KP7)w<(n{Lc!(1P%*qA2FJQuKzswz5$oV5?D@K0y-uAQX#>0vM7wv8nK; zz&Z(1cEV%|%w|4h(IVD1ez&Wo+@*vhZ(d50@m6=~dx-MG_(i6s76y9;L4KFrzm@i% zaKkj`4PmNaWJ zt~?8bMJ1`F%FtQ6z|f>A5hB>px*Ui@#Piwg36m01Qlyf2#6To5Y0E023Ko1iqi=f8 z3Ju6I--U+GVa0b|?kaoeT~bI(l0oycAWorRd5QaBaS?C(;9&FKTV*I02GW_)Rv<|D zk8e#Ui8}RbL8}4dJ7tmk2lw;Fg9WtVoc_Q?LLfi2aWe`6S?8WVI?fqMe)OcNXK2|3 zS$IOBt$2X4s?77QcBTXc$8Mi)#QZhJ{EltZY|Zk zhLKG*X-Y0V21EZz2zPePpPzX+AAE~#!5qJWtBHjD#t2!Yi8)qjoj;k;dNuySk~;vE z@zby29LMXg}3k({S~*C<$qmk ziRhV-J36@x5~JWnuJ&eIv27+nATA5#?T0N0p{0zpesg z>hWX{YM{>cZ0xsl5OW{X>)doolfL{^F6UzfRQ;@_L-%(-mwM^un!-SGt#$E7XHMZ& zb8?6+PoYI8(b$^eUnP$5>rqJDLbSz=whZ`oMLu*Ed^ngM?_AeK(gP}mMnZsh^ko@-&2&6_g$(Utc zL8{Pyatb{bo@SY(T=t1Hq+ZIzh3C|t8mR{uL4e6W{z(z0ooj&Ulu4PalMd4VT_bHF zB3gxfww<px}DB>xrY`>It?(?xntH{i3%} zet{+QV&@UX?F*rYw-ZZwu^VM|6~-9OOVjn6?l=+0pwPO>On)3R`(2RW^s=bjwOi5dM*+;%_!3n%v7uDN->EdqDVj zAuX6g*=b*CSECkuG}`9j;j{VZ!bs2#i%cK&!w&e`b7h5@cMf*_jxXZm#h_?bFudrv z9i-X>I}r*e&^so*I#mIf1%y+eIM^*eR%ag#7zy>s5f9g6Qu~LYD$s~R26{M14ft~s zoFHdhFP1U41&^!l7Ezf;4play>SVxN-;5)ZIMOf}$o>I&(NAAd-?L`e8>z_ihmc7c z$`}j{LR<4rB3%oCOX+NvvPn`fL|$J=F1l5R(~mh&<2^~bcj*I6U#OMgi;LArUuGZY z3b@2dj2RZ#GM6ws%w=lN&t4xVLkLVLpM-r@Fcf|aF6D~a9?yBKY zakgs(Uy?jG$uow~ZR_Kzm2f@?a*C6HCYE3=S(DHEZF?Ai6v1S3gfz2|#EBq`7aR5} z;T|xPkI6sdGUuykV0OlaWJ~iqEfJ2kbNy*YU&Y5zqL~4e_MJ$9f+#vx2v>VV_e(Jw zq12=yG$>I(Hb?viVW1>2d3YzqVV{p+BGfnnKRg}%CWDg&87QS86sDvN>4=pbPtD15 z&xggE9`tX3bGvFWli}wQDk6&|AzCshJE+yQc|lC5&rNV1_^e65Y`nh9>G==>Q9#>D zX`djWAbZy2WSMk9nF7H--_95rJDi0_D|cF6482*oACw>z!Hb+eUX3_1TZ0&DlrHXO zGQiZZnz){JNnh?f#N?k#qc9{rm?*cBoM*sGU>6VEy3s7ogAa^hu^|8`%c~-OV+I&W z|7PwIHypLaQu!I*PR--J{)IZ9X}!|Q8lonkqSp9t0Nw` zg?_+)3_8Kl;dT4(8Z|XLjm`H0a#=wo&#c)X2qq44e@OSR7&TvH7`gCqMx{_5w4Hv( z)dfZ8x~1{qRR#k{CaOS_16pcyGFGi2jlRIdvbY&-2M&^veSsjN(B%+b^d>5lZ$EaI z#;6+hDV={g@kb+6*CG-@3i#3}d&nP&C)5M`S`1q2W)D$ziHqkgWB%rwLJO7OI6Wdj z5(OZWg=smpUWZf5M-%t`Vr@C`!w1N}aq}oHUjF`OERjU6%D5UN%&bDK6Q1D_Awo}_ zP<74!2M^~58gjoIQmpZTH69@q>#C7G0^N1Y!cE`~gQ@DyEoTN<0%4^U2hP@Up+650 z@K6)fjDu$6w9qD-AUldnFXCnhr+)dPFR7-7W#&HLjX)j(Z5xkBOmC8chzj3!Lo4Jl znLJBB`fVOpi;y>0l!XK4H#~S?(B*A}>7o5o1~D(@4s-T)nsF{|SrA&pOjqkVXqIuB`j9EBWf zm)@0_D6E)eUzg+FNt#BgXb9VhG_5UQ{GcJ{%Ea@5a7y|Gvs>!z~mCVnApE7J+OKX-Jqvmf!}-&)Xq-eLeU zXmZqNLIIT}OjbA55Ym_PpH!?WGc-;6Ikat&CyYbP4R6wpq=_}AbvAk8Tm)N+;;uM_ z%pTu|SX5{a)Bs!VXH?dxu}E=(lQ7Y#fiY#98xCacuw(wpyuW(Nujo zzr&i=6mq^sY}lrrq%sT{kSFa~E~ewO}KUTZNrOC3II=oO)YMAuP_CXl8VlTH&%U!=HtEN>)O(Nr}46D?wcY48XlNqH7X|Hz=?9f3q`sR}*p#~YZ0JU^(K*yg;|qDQWLyfl;@r&eZ?_#A4?mg^?_=s~61FLI{U z$se6hhUcvJ($V0Db`Bx&ats#amt)fXI(1npx8(do@F4LG;x``LYheCpu>ESh1;1zU zz720B6;i-~wfv$X9hml;R0k1S6sK7C~!(M)BweUr&4gr8j#{3y|K9|HDPYr$`w$m{B zK$<|knjS}vvABdaBZ`_+?I8BM9JGF~gl(=ahvc3keJKgo>U#xLg5$zbG`CU^tkMy3 z#$2yjw4PN7rcNI@nR%;00<2_e8VgIOENp{MnD8nVR{Vyxx8HBDy$C&F{dfrRF5V@MzRnNwp2ZtcVxbN^>fe1}S-RSc;&a0vUSnd@|8}>2`2Y zmH<<|p?>FWh)rrREBtkFX*AJ8Lyfct%5tzsqja-5tI6>_&g_qFb_ zW}HN7_$930wyYJ%&i{#)KxQz26R4m^U?cwv90)Q0j=>V|f-x{>MrU_ZG3CV*j7Osr zU1pwKeRDeqZEoD;&3QZd0{`D>!t~fDVQ8QrAe9h_bQXj_(s#K5W{i-lH#($;C6UCo zb_4faWeg0|a(9-ZpaX<{n}3|}_kh;M#!6Y&wTXM4D~}nef@rwmrFpwuu!LBMHHUPA z=2Evd28XOocH~<`xs=jchIj)n^Y4BmvP)?>pM8cIvwc;8U!XJ1ConnDad>7&z1MnG zQ4I>hSj_-&Lm1>X95($7X)mz%k_CcY9;fCP1`^m&O5hZ$DwR<*M`xL_iIS^~HD4>I zc={K7m28S1BJ4vP{vMQ3EY8MfQpW!(pFGtsyk6}>Y_O+g6Ev&N-NAGWni6Xfs`rhe zOvKR!>#te)YFo@x#F4nHNJfsz?<95svesIxLVMys;@XM)J*6~x5L-l7$POSkf$4vZ zS0ayPHSpgQ>tK^;UMDaR5K%)A5V(IS)^5g5=2i~BoXwptHsoyAg)u^QyMf@@HJX+r z?lDq$EPd)Wh9rw`5vWVt>7;TM>=j-lU)>Q!)KdH8cEmWc9^DK0+39nKeUZo)1)|^0 zHOghLChYLAS3AGetk2CeMQm-SX%+4@@xJv|p8E32ttV#|sG3%~R8DFnS&Z3K z_GVVNhnrt28CUO$)kKUQ-#eA}l$&uZODr!N{HW4cRe0@^>$3YXrS(^K$S!cT641G8 zOjSS4J^iF%eD~DjjeO9}BvO!R(^Ap&$g$E$0@f0n4IFb89kV55oF_74KHr93N@MSe z9hBZB(iclS<83{bUvJjCo->4gX1k=eP0)UaAfRV(>`HRxblKl4`saRMFCP?^SVT9yO0GmRA z@&8x!;n)+w2+014qky$z9Bae51pG$?=0G(Moo1HizhK2+;Xa7}$fJzr3v=*_=KY_Z z5>;Z>x&I%bPMjW&G%8Lu+Y8Xno*lk``F?Wwni2C7qaX^sgNhQDf{h8g2ovM}M@<$S zIrto?zZHZiF@zIs9D+DBL;>o5w3iFBq7a~jNfQ6-`F{W;{{x^=rUsw;@56u4q5lW{ zo!Ap_px<0R@0?k`dX3#$Cu(bTBY~4zHaWI8y2txprV5gwG3|zw7?*$v>`9{ZylJ&@ zXJYglFAE;{)w7gytTF_3hpNjiN;9zESV?jqH*PI_J~hRG2uNa=I%(UNdA;5|n0826 zgvjL20DMAkN9S3-z#}Q<2z}E=*W>4S?~x(Au1GAyEdvEq&CS1m{B@!=t?Y$AqJ#1b zu~7V-awo^o(@Qk#P@E!xEKya;mGhe=2GPRyBPYlW50@czb#2Zv-<04tB?K-#lh57Y zPl(?hwc}~|vgzs6v*Buja%$!Bp-%236!Z(o#7me<+GS`5$M8!{L9E`>X&xqPV1|>~ z{j6c!^*q*aYz_Sc{y`GQc$zss`bvpS=A(JdF5`UJ${?=s`CDayY-6k6(!ZW4ZBIN1 zNHA=tVXkQljnnl47R$UrR|QiTp!#I3JZW%;`V9p9(ihB5bI43MtDS?AXeJ>3h`pQD zrVpx3FNHgbb%~5h53+pu1WcUbDVt6oLXoxRaSXGN=%wYOz>qh(9gPfm^a3%Yys3_b z853YL++78);I1)%w@FqZZET_oq>kw7Y0c*h`NSz?BwrQ+MXE&n6JzKDn(8Qp_yS}a zLy%V?=!cC=gps|w<5p#{Y8cqW3OR(M!YveacT1D;!yWveAI*7Dv>#cmrZyO)8bUWL z)8ipWh?0RS)!wZh`m??-+ArT1GYkpcH(N|xJFPm|o<{b8i{%Mi*K_l7;#e(9w2%#4 zCs(9xdzxe7{{Gf8V?@b4<==w|vI`XiKWMxw!)0k`R&AVfVF*UaCL}d{mIW)6{ z$+_gfCepj=4>yp*X*YOKSrF-BOx5S7e!h9ET~3jtww$kWoSPt7=x`r9TsYl7eCN?P zuJ#RklYM{!w3`3L%F+v_ybz6kN$i*t+`ug~Kc8u#@*=tm=U=r1pT|K5SX(DeMr6G= z%NF9J^4_`8EQqrCU#)~7u2>@H_r!;q9k=o1V>%ZbIQp^68t-{El11rk1VsRLcW?pwl!y>|$|Yy^aF?wpKI_81 zeo0iI;sUnyjbONyDkkKnxcu9G@4eL41>Ugjce|x6qn|gv7|1&6+-{=Ea({5!dGGDF z#uxcSe#J`tY-Fb`PAnL6ZG3s_cW&$YcZTv6A4_6Px^g$UOi|R(&wi{Gl#lHk6A>3w zz~4W1aI*4z*u9T9kC-7+-Cu@?e}hs{X?bM_w4J*8$PK}&cuR^JGw?oBax{Fh^>g%# z`;y>%oHin9-!M0Azq+A^ONp-S0B+uFfh(e`q|Y07JUcz$i}58jm8zx3F3aX{r8k2q zH^kwwho_Ub`2+PVEkk^`jUJs(!Z_wOcZI?FD?dC4%MFgeOUm#9jMXqaMfKLZa$N>+ zNrsv$$<2+>WW~onf#CbM!q49yUCi>WS2VvjUwucmuLTqXk(V^&eX}0AR~@~GEU74U z?59%s-T0jS$9ElFZ8+Xb<&eC;gC@Xo5uRQk&Y#5PzisI}up7c^RCh!WqOMv$mOd5aEW<>iu&c{-AgFIgVn;tj zUupZrRY<(4xFXM*#mW>9C|76;PeEl=kW{vy1$DHg{hNsG( zI;|b|^HylTL1t0;90JSHCR)M?(Qi&*t^p((=aS}PX(Kvs+h5{JOB<h%sSN^qOpzHkzvRJ3wXt1_%Ur4Eh(0_^`b}MboS+Gfc9~U|<04ehue8{Qyb8QI zA!DgANabb!L2S?@-%H@H zf&h-2Lp52)*#sHEqa+o92`cwP`iVIVOV*OFz;t%QYQZ`7pN>WHmkI0R{`qmNt6^u; ztYfWr$)kD&5(l>gsD69$bqJxd5)Q9z`}vO~^N!7XdrRUe)u~;`C;lap{*pEJ=RwOc zZ^dT0O=*TWUy%Rx{Tdg{BtW76$1_bVG2#a%?DvFGx}?U1nz(UjwAX&aT9ehspm%{m z8_(uYTQiW)%~dGD|;ABg*il=jNE1rdZlnsJc<88vCllmGeF5 zuI6f?XbDB8nkHJam~zjE+Y;oksGapXzxOpSO0awwUOtKD>$W@?dU>T>K2hN9*1COJ zJ=K}>vglY4yZuFO(jX6&a<;)ezb6E+ z38xS1+J--^e=Tj=1*4`EXIzQ~;qQZqetQ&w!x#9_6fLx~Dav3TMb~kH;~N9oHwIGa zzh9$~3SuOXu5~4uTP@MJt-l!dDDs(XBJD=VDK!$FT0u+@M+CH@kUCrnIbeO_7EJx< zUah&jvMH0;C?nR%*SdhvF|Fum6jw0_xS%7;Ws8`eO;Kr=KQGFNTJ7W&RY+7WD#7`` z=Q7NRuvsIYp&2OBe~&6ta6?_lsEI@J)PQ;GuaGO~v@d4v)@sGJp3$L5gEB>342A3k zCuIytl2P>4Z@d|>78n>J@n5I<7}OcV3Qh!hhbbH}oXdM7f1{ZANwJV;cxDX9w^NI1 z7=?O!UXLozdOvQI1iQOBJRh`b`zNrph=Aum7tq(YLlanB4wnvFTV0G_@3Drx-hiW{ zN<`1sF4nGLj_>CYk+);V>tbl=`r9AP`>JlAY$d?s>+s@jgtw0AW$caViqL+GA2a*& zZxhq|+}U!g1JTxYcaPWeqG`1I@FYpldL)XK;nQ8`+xnTC;djH&JuHVygKck*r@y9g zSsZjuZ6A>+gFX*uywO%|>LVSQ9mK7%e={`+kW?pK74pvSQ2Mc3{EV7ZxP6f56gaQr)?_VWM z>;pqBQ$q#igb$WJ4mnSR#$CkvYfNnYru~Ri>+dU>y#S?~(KPUigZ8(2G z?1_&tZk~zvV;lMM3?TeV{K$hs+upE8{D=u>E?6s4s0km;os75#0zo>5Th9$bLJ7As zn5F_cK1mj*)(9(FAtH@VTqFR~!L;iC(_;+_7iC-)DO-i4+Apqyn0#x?8&Z@v2W4Je zRGI*3rz#<-@y}1Md=zwO6RN?YK+%g9gC>ql3@ZhHMdds%IN-LYNXGy5M3^Q~2D(Gk z-<2jTF6hiyBvvg?4Z|umAW8NUrF8dk17t#$qyXK7ns^$LwbUXpKwmA6ih4BJ6XQ{W z55d=E4U1Q85T%bYuq#01k}9x4nfX>lFh(S&pZEzHGMu8f@lQG?w08+>?ZQsbIS=)3 zVQG|XgVrIkLV&bCDhj4K21Y~2c@Cx~iJHRL3vE6j1xA2HWkyH#w)_YN1yj9q)s7idzoHQK$Rwy0W&6qpVt$xI|t>6%Dn2C0$BzZ3XyH zM%{`QCL3k=gBmQ|{9aMZ3ObgWG5at|*X6xrq`XeoC9q&k3PH(6;$PDRBWW0f|hD3Y6DayV~w8*VulnNW1&^~*n{psV5TQBcd10;z7H0WM+af?>>F zKtNv>129wZ^$WW}kVmiDb~d(+f|}l&*i2dD@h0ds(g+8}6BJ!ub_@b}hEeUX%?VO*54^Y!Tr;4Bgkk#1^|C!-2B{f~mc7=rm+(rRQm z6^8kau(ZJxC%R;E5RMKS?RT^$TH6{ClGn)DHuLWTg9)6lK8~s;IKOR6!S=w=olnUT z4rCIl3Jd^V^oUWM3mXd0@B(_(9|gy7Nk$m5Y4Ozg^VB3-<`?4e?|o!YQYAqY*=VnT zXt9+C4cmmiGOe*liQ`s~I1WABiBVsTry|H9{kZi-Ca&j|U z@N1#exIu|_0)q&2dVncsVf|w&p$8kQX!m_uBBRKgdRfZ1a(4ooTB&kx1Ea^0vP2s9 zKh}X-|Mbi;8B6{SlI;^O8()))J(mMkl_|v}$3rMk(O+pP19{JSA#u?Ey2y`y6hqrg zyMC!%A``Vw5^{KokeoCgfiY%}0nI6R9gS zH`1S>gAX61)V=F{rXCdewE=bn@ngRm7fbdqLJ!bVIc_G!Z15)p)_5KB5DqXq%WbKn za>H2zDAfWei_0ssXa++`fvXTh)fX;|U&6{xNfyJgkizIkj~e;+tiiRIZH~2L^-(`* z?G*V-VDK*_^v>bZEg*hmqO#SYu_;y57vK2TwUMe$3?}4;JJxp5CcSt}4F-J4G2yG6 z0vO_B*6j_%;=_RLQwh2XBR^Zn=<$*btKq#|<{WF?JS+2;q4pKjT_hB=+#jE%txsd5 zSfqXlrpJoq;-)&Ytjtr<1Z6$<+l{sfuI&qHW)cR>RI;;czGLRgx7)23EqP2{l+(v) z8YgKO<@Ij)v%|Xs3#^XPGlSjPV*zVY>aDe?=tui-I?hCPDlA;Yw9+AGG`kWwQR1=QYZ+>>S_koPijKuZ8U(vTBz-PnR5fz*h zK7`LLa5?bafxOZI$+`G`4JGt2P4Y;whGow$?Y904bq#;AA5t1CnjEk2ja}!7T$B6A zHpAjJ{n7?X*u^E~{6|vJWa34_A5;@})11zZo*wVk56>5&ZrLA(yjU&_d-0j&<$~R> zr;l~Jp;zHvZktmU9T=3{C9`}Na(PoP#+tvKfs&8`Ze%dNY0M7?#Z0bREa&zzuI#n<}ox zo@o;o&D6H@Znt|@FBJ1bkyZ$v7?$=`vIBTGkRAMEE~(>h7@fuIuvyLl$8IB)^GwQ% zTDxTD4l#sBsX1I*6fXEqc8sREn$u;T0A)_;05>9c3G6f|6sVoZ2<<5E^AJ&Nu=AJU zAF;_CTRq~9_2}|Cj_wbq(xV5MGEeF)VIA!|BHgn&<|(T-&9v3Y zgqd?69X5dv5=?uJaw|9x8lY?+I#&l|`ec7$K#nM;J(FhU&KFC9`Hu&kUos^D^n3h` z%f`F5koryqy{MhcIy$kria)!Ve?22pW~TO?37zaVh!QlXi#)5qq(hx?ofueO@S#Dg zcSTg=5@$Hg=MSAVcXcEp;F-OdCAoidPn#CD#$^e~a^~1ezUJc@S9^@MM(h7a&t0eN zX%wrWgF34m=RFIh%mY3o|7c*!n}XUcJE$!rl=Ybn#vuoyGN2RJ=RP~A^`3liF0nRC z!_~+uJxWHCU^!hbGvm+TM?o%0YN7=O^omX#S)-UeT#X-SfqK&e^`Pa=OOTx)S8YBz@Uh>6y;$3g{`M_;vav zO!Dq#T4}ao8^K7zKA>t_SIuyCOTOJ(R{kdk1~)R|mjzdPwkRn<6n; zlG0k9lHj&qnlSrLgB#(emx?nPMX12BX(}5nM#l=8aPjC^#UGF?-Pq)9*!!cO6kjTG z5PqNWszkUT3ql~64W;}(lUj)j4a#u*6Ow!3{sN~Ut@tisY@95S-JCV`E?{ijnezJp z$bF$i#eVfzI?&R^gfUe$uwA87#J68MekZO?NF$sk1mVt>uy;~7Pu7|JeIk$Ith%zWDdVEUE);9Rb^H`uw{ixd|y9% zH;-03d_+|{L^=^INjA?^%N6#MZC4ZC^jho?Ncx?rc8Gc+XE&)dfArtt8orm|Wnwl; z;y1u&Eu+Lf#&xV#U@F9Y7+R@Ck7wL2qX(Ts+5VaRoj)1OE^gh6B%ZAVZXJFg# zAv9kj&pxUH?wtQDI|Enn=?DSp9 z*azF2fpxre@bKP|vy}n>u6Kt67ZcdO)t8Vzi2i?$ZAE$;?Eg|KxY6H{hMD3qz5_ZV zbq9Ah>eTn=r=`|vO9P&z6AWYE3G=9ymN8V6_=vgEq%e7ytrk!&&s*lE?xIlsy1m1u z6Qs~^6QpY({^uKM)(55sW49{>?h|(f4`aZ`2@&uw_VeLk=ho-p;qzlg@EzJWSYNL? zrR2FNMdsb}4li^<_RZ@lGG~SA2)MeD?PvUaG5@$<`g}h)cDZ}__!z8lY4-}P3E2Ag z?`*2(bLRH;_ru)S%UV;-3v#)cVxFl|q)I;_p%-cZb3d1+O{HEU?B|A0{~_x&&Fe&> z=!bPOe1hOd=ljLog#L5JQipyv9dM}c+vVQQ$E!)ipfL0_(eOmH+>`yQ75GvlJ@DY> zW^Jxxs-^Ww^!=hG_P6;Pzi-wpGT{0Cl;gJbxOHdc>6c^vRIa~lE_t+`6AKvMP3^SA zu25aYOfw?AFmgKPU0*;)%t2v)`aGa%xIe+2Vf~yiXe2Kw>hT)t`?q@^^{J!xKK;5h z*YR}p#(vR1j?%P9GAfh-2%08U`+-N0lUNqG(#GApAK6aFH2#I#xelFH4YC zE-bU^F|4r0xTxqdKL8V~t4AdXs7z49V;>r=VHD`>d47@FKlm70 zdp$V0MfbiG5dO>b_d?-Y-TKm1mR=_D+uOT`>#ZGnQIhHoVPJ8=!oULiNA(G1lT}`$ zD+W8ES=q2$IkrE5A=u#&-FDFcrY{U-ZlpL(ePFMtQ6_$`C1Eb=Qh(Ne*$!XQCo`T0 zN1Dbx%o9&5O>$#P+AU$(i0f(y_fHSmx2^N7_QQ1Yk#V8nwK5r=FB(+|)XZ&<*}pL! zi3lSw3l05QxpG-g67QigHTU}1+gdt~MOCAqb5uetuiz1oSKZPoD}ajr_Yw8*elj<6 zw$OlV9WT%+sK47Y9Q8V-FhhjWFLJe8CVEVO3^Q+=z~C!yUkni>{m8awz9jeW0zCp6Y>suXiKhiK-XFP;WHRqe~} zsbJLa5HuSg9r`L*yc9dF5v@onLv9`h&T_HV_mxAz>v3qaWg@Wwd18W>?ArN{I@$(` zr%pQxuP}(`6iF?&x&692@m+irZ2}y5xE=J`Hr6ntJ=r{ATXtFU{7UqN^NpXks+gw1 zxhT4LA(q%R{bI;g;-Bbm+7++}YO%IU#2*Uk5k*f(~*ZA>g``IZ+5m=^9d2XMPl;N9Zk){;FX>~ zKbot62N7D^xIKcMDVCP9!2DpS_G^=|kg;O5vSI@#6lN=s?IKdp{djRX)uKu#@oqc? zH}rtJvxAcv+1h%gP~Z0fd^HIeQ>inTXLYC!JJW`1Z5;&nC^izV?>=;mYWrl6SCo)u zR|)Qc1Y)3IqLo}+exGRJ#r4W0CN;7id=(x*+lNOh;gmb821ehq2l=V)j4k=HX-8+BUeD!@hyj93fDhzz3u;m{ysFeFw8Q8AWVW@i6sL6Ku{tObTQk3Ea z9L>vol6>-a5c^WYV&+i^)#!13gmeWarW*s`_08~+8zmToAhPJTzaSwt^+Ek%-!4di z?H#ON3q4(eGtygrbWzGoI@>{u!dOiBC{_sRZv>+vUcLnqapKsh3$9!A%WV4TSdcnTblQF(U>l@$h>~1HYCLR-+_eOy4Ho+e_dNr%^XYo; z)sgUas)Fcf+ZhDnxpo;6ZtwEE6N;XRwwGL-5a2y)f;<8|yl9Ne&{whYF}_4-(4t;5 z9@w9wO3L7vT$CQ8>wltywAw&=UFI}9F(1DfbxY81Zwgl!1l)AA-1!<)fea{$q7SQz z>G41`P%pz@K;tGPFQ+-$bD#s;myrh}2PbehZe8D4?;_bGd)dwQpw+C-hIceoY)ovE zNZ3hW6g4cIGDzcZ=M=y@=e`AzP+h0ULcn%0`W^Ldp<#v#DM|mPf(*B$u|;|fs1uJf zfhRgs@g|oHHi*j@VFpKw1q0)F<}oDC8-h&a$rU&Oi7$ad3?inYr*;G?gjZ{OFocJM zTk$9T5YnycW{j>m0qv|z`{UayZAMh*e-A2$Xm=^HR zkiJ0Ea?tE9*-Yhpm*%k~>Yqp()FP8o68#?xytJAvS|bIGbx-PRTW=R8zj(f-Z}~jE z^`(6!CWB&*mY~*Qr!xTB4vJoAetpQhk%N%}3a5Dp0mp}V=-DuXB?P(vStGrPX!s#L zs|Al#|KEPg4^ku}#0Bx;5!W*pgecqe&rE2jOd*b5XnC_u+!xzfEGu;9^WvzsBqZ=c zZcC6bbFSM}>dG>G=vHQ|20GR0+!dpi6kS)UQ(r#Hhv)q>QWuz5Cti`X)UJk9DSi(u=M@*0Rs0qp|Ix-Bq3Z>DUeFeW zQ*gi605|TPK%#N7cOes{bqtg0*DHnbu@u{yQcU@S3Ij+;x4{XbA#sYGAE1cFBq_}g z$&|4-fZe|I1r{>;20vV)Mv)#^F$cI;@v50i-;YDX?<>f-ft9<7ZKwTNDze6j89Mf$A0u;q+ChJl!bmQT@b#$a4-E=nz={2nhd~fA=zSbvPOYd#acf5Z!76ju zr(C5_m7KZn_I&=kdFOI{x6TOc4Ecc-%pHX{q6Jtj_(Y9LE=XJ!lT;krHi)8qK@3V* zpyHF_NzFq2@ZbZK{>fE<_T5E+1q2{>p=!Sc!Py|h4@8?VhYA`~7Y90fL4eYcwgwI? z*j68JymP@blRGG&qppIRlaTv!ZRUm8w_Ey^%z5CnF(s$EA20P zb0M`LsRxI2oDQlr{Kc?-V*|P)&~~eN@!(@I?8Jsfse0Nzm?u>3#Bt?v+dM{M#SO2$ z7LL?R9(kuGw?$SD+|%(SNOoQa-JG&;TmbYrWCD}?EO{dQ{+oxb$ER0~d!IjeALO~T z0_%gFi?PgSC-45;MS8|xhoL((*bb0DVkU^l&y!1#Fis&;lOH&+eSC+=HNz{+USC{n zbqfRF!goGIVEQ%gx@XPuOb36v*0Q-T81VQi*g1b_2UEkhh;5#7*mmupA`(e>#{sB= z)1ai{48ogh16|Hm8@SraC{^r-rlIzbLSwz3{R#pa^MORr%}V?e==wdYk{^fnlZX=R z2Rl7EL9PWLxcs6RAcBFCXnYBcr_WW(*)2p-xEUA+f5S`JH6?fc@XUBH=lIoFNKdC;oXfqTju_M13_YK$NSLIh| zMfa{B6&TNXoXI{0xPTP?)wgokI2A9`qa%$Z?(P|w|q8R=ddxadvTbxOhrCx# z&J>bZZ-;Aijef7sT@P0QJu4s9P~E`&JaG8=Z^Ic;#9by)$>TxHvqh*SFW;rwn@N>&@j*Q4D->QRCLx!Ebw-oqNU=gCQ_mKdX2 z{j($^8kKy+2Ni>_1~IVE>~I5$(cYnB*8lFfH}Wu&xU_a^0^l=sX7){ksIGfds+>>F zx7u=r#P4PrtZ~3XAh@As1=@dOYgJRViKm!HH@bzexyh_c&41LpMUgpH!O5zN z*WTv|nv2#Sx<^v#*K6A@xjgGDAc!*YKpIxKxV12go{ku`HtY4L(=*N}9b3t-l53X? zUwWsg-+4Yh2Yect9(krvquga^J5?9f-Z_0=zXgRcndgC;*uc!g6|ziuFRGFA$BoiZ zV?$lZ;*D4gZwUG$U%ooJ@{P}b{Cj)#^4K`2<{?wH*YMQV-L^c`Tw`1{a2&(#iva0o zFx)~SH{;uOexB&l!znpA+kuNOT3#?w_+Tc<-)c$9 z85@l|4se#k==Hb2d6*$L!i4pc@@}*8$^TTwFPS)`Y0A9n-tgSe-ZN%stgOKDAVkP_ zLdc!ggk?$lroItalSAZss8Px3)c1E3Dk$E}ADeh`J1wU@ zS6Re4Y`B&Mm%JARNh~4|U4lxx98WIqhF1LE7l^33yTylfm>hhWq6>CSn7_rRiJfp; zmcw{5ZM7sUnM@Ej;hA_FygvU4xc+Nb&4?{pIuBk9UKc?{VE9c(-AZc=)#bcrYn0&C z|IC21@iO8niTTxYK1Uj(PQlJv4Z4l(c7|jy;Wd4nAvdWagUVz6{d}A&{zq+oT6!iT z6riNxj=aAxE@W};gfY&R!In)klqP& zGd9=#IZf57MroB9nQAL(Qq?#^qC{L77l6&>k?19@wI!*6N1GtFxF$z$1{M6RSt{^+ zkC$2KVw{U%lzYqpzKv8+bU)@ULK*M?kMif#=vQ zhGzapmMPh6sh{D9bkJW&4N6<(08mmESy~IB(z5#M>PC)zG;wxZf5QW0u@qb^H^45J z38C!x<`#!~_FV^O$3Tbr>7m6L#Q(w!3tlT)f$6yd7aB`G54Q_5XhOvgQ7QA#!5S2* z)ML(QvNup*BF=0Z-do@9?uk<0VzVMY;E-CjwiYxD5e9CFk^oi+f!x%mc4K2J6KB)^ z!tLnh<1B-llwKE7>&)x!hc*jBIlxo`bt8yk_Jf@Ut|SXXjVK|E9Yd)ADjK8n$j$shX9Aeg|;KXb==V6;){kasF9I!fYWx@pSdh5 zOq0XV3F@ROTd07Sw(XERZbhL%h_Qflw_jqWdY~;}0C}6PrdR;qtE@J+11R*j8wQ_3 zhhMVHGu~Z()%LKp(%V;q-b{(06%aq%%ZMB}7<#$lh`aI$6Kd*hnvZGmG>PhrlhGN& zU4Q^P9Lm8{m~W3S?odDck<*w6st< z)^Kc=L0@5NaxlUium)#b4`e=MhH)g3Aci+eWmDlGsmprMofS%5oErR6G&`1Kvf#8u zx7C@l!^$^kc3nN@PwRMkd8_=w+@2{Q9ebZi@ck+WNlrFmV2NL*530q)A2`2Y_r##Mau?&vWh zcgoLZ;T?7|?L@P_ZMTAdMF)#Jlw=Lx+mHgBAX~)=gV86brNGij7|7E`Py^?!0%|`_ zU0ho~ngZ>5J`It~%zzf9-{cR2mTs;Pcoy>>gnCWA>y-Sm2!r9enR%-u&*TZxfwelH zaGKtzp10Ve%~rQrW4~TNF49Gpt6$;)&)K!okDVp_TlQ=Y&}A@;;~1YQN=GTaK`VJE zrJpPUDzUj4QMLAnEE$bT)FW&PyOvUWP2U9l-@66$KfKyMOo3l?dcf<1Q-K4gfH}`d zZJS6gw=xGS3nAuuZ1&2$i-KTk6BBQ^Y=un%;Cq&DbfN|8%zSHrY=*RV7+&NpS80M z-#pBBSZjn{(LBo0Lav})Vb$Sekg&_E*sc%HU!AA+irv24l7^EbKk7hK=v^eF+aeqM zhh%;*S0KZm`HPX4W~G>EIreFCRUne~h3PvCG%BjrfyU@!hMx?dO z<--pD5$)yX7Z$MeKQ>7>3^?6IhbA56GZ(HcwagXsPl$Ye;Saa|eHXs9y$+ll#Nd zO_6tTXNlO8DsH23^Apb9{g(paprc@4Jo_fU2w=lSmmi6ga}{;Z=4noPnt6={_midp zE@h`8QMGVG&S^@TcU8X4ra!ukvqC>+rKBS8sY0*hcIwGFioUh#v}lJv8_C;weK})^ z&9-fvPU;3116D{}`OH)mdbX*MGi&_7-(X2YsouICF|eM1#GK-wF>9Qc?RK*>J5X-* z0?>->E3o(O5A;ut)7UW@A8yLxs2DU0WhKQyz!merO(DIW6_^#NrUjqdU!_TCJHqvo z*T06iuTm@8aq52RA4B6_suGJJ9ws(YqNq)qO+#SqlgH5yh#$d2w+!ixWW#9D@rNwu z87EoCsN#B%yVmS05h_~8*e3|MmFeXz0j7d!#1^&_aCU{lV4&^At0`c71Fd9+kozWm z@ejq{1Dfvb+np@Eq&8*dDotoanA!~Z;A51=aA(9AyXF>Ch9GV_f4@v5&vY1GD^X>V zR=@VLqO>$RR#W!ms4vhk2+b6l#oroud83bpqarMCxZZ_fHiJduL*_KU$;%^y1KcDT za{Yw(gtgDk=)KrVEf&Hkdq-Y@d$FLA_Oo#*UxZB{iw+?)_aFXJ7|}S54Ml0g3AZ^r zXtPAd$4 z&OYksnKCpqZ5$@EH!O~E>e=AfdzPOsOw>!LcvP3cU64s@hDI=6~*f9KE%kpPP5E@+@2Y} zG342t+3gV>T8m8mdbUM609Vk(B&#yaJUEeBevNKS)Y!OdHj{8gQBm{8f2=|%KvYHr zCuc~Ap;TXgKc2YsPdyX+R*Q3I7xBYlo`wqFh~oQ`IdRFdJJWPlT=NU_i8|I83@eEkP#4nnkWvVLL2%#wEK#s3cb+i!mD<>YqY^`_Xj z+%VbVdsEbMQ17kEq0iwfv6LT4}KU(!lqD%5Ccj zhR*aysmAMsG!7@acl#CDe?EW)=Irn;xGvn1zOe7kjnW}Q{8{&exL!qiAHQjyTW0)` z_2(vO%9e4w{|)-CSsgE>VgCHR!$B2q60g0Q$0&rhPSD-(AV4PAYu?5c|Lw`rIwkw| zT>SZpVMV`^Xv=DQjMkJ8;Wnclj2X+ZpokcMm)?K91?MtdwauLL`uM0@?R1lAgmA-N z=5&vpsQr)lptj**)JT%eL(#W9oqS#6MQ#cix z?_(!GE)Ih##m%9uaVeWJ{mW2trq<{FH}@eesZTN^^ZK+Q$Ywk!O-iLKzZ2}$CIRk{ zan0sUw7E5qcSr!wH& z3r&J@Tj5us^brf0{lVTDsFm(t+H3=5!tq6w!cys*U*GA)D@D;9V2)Q9x}u`WmL}!H0-mrH>l-E5J-Voiy|yEYAUV{a+NP-_?Hu>O6bV3{B}2jXngdJna(4V5GQgxS;Y!;?)JhNiAT5qh70Wr*3L1CU=K}}o_Afm>X!^Df#uBRXzNvw< z-oVs%J!XlO3f(`^21Ja%a2{-!NdmBuEk{WaOSp!hJd>svo-PkJ+*j+(DG^D_hPF3%=kjfdEfVb zl3oqd)@=^kp@m^ZZ5Ld-bh<5*Inv)UBFIZ6Mqw@`v6iMD5vOYk`j_uJ+7Qug^x5D$ z6@L&6YPcSGlrqNXdJdqts}Y1916DqKTzvm5q*mP-Fkm-(l}x*+CAN(RBL`CXi~|h$ zh6Z`blvoAv=*b>(l^#@3@eO7dmH=_U3`D9B_ezQrjUiM|S7)l^*1E*3M(^+}?nZd7 zbx_joXlv+%w|ASLdc)+t=zg0?l%^>uDBDOq-*?7_sx48)avDuTCw7w>UzX#5~y$e=}8wAg*tyn z|6Rc+zDlAmVt2^or?mSe-H+AvPSM?K`vZ7%?oP-GD~6;h3`zt))#(N<>Dqwg9*kUT zaf?gpNkL1+oh59JGKYcc6+jh-lJ6B=9M6uiV#={H8Iz#0p7?V-U5Y>)nvgbX{MAAN zkw#a{3ra6xoIiK|-EjT<>}L^*o|6-W%oI(sheAoJ}rx^^%H90%-9hi8ot= zJV%sAdR$b01hGMEm_H-4Mm~*LPeK14Dm39%H}C#xzp+-gj_KOgs_O~OlC@A!(p`Bx zbIUq_73yB#D>&?wf&BLggFiWoyBytY)z3q7iuy| z4oD2UAa7~ebI|u+hYhrJj)El+_Tep>^g-#XHqhy6L{Bo^<{ zq%y?G{kb?oJAmyULN#RBe@YK7k_iii zXJH*$VP@YzJfkY%NW(D05fmozYmuBDukB~3iZn6ve{W4D4d@dsk4zNEEBZEZj$EuC zztlqC#4pck`>kS}YGzmtEC1$v%BK>lg|7U$6<|m#(r{k-jqjgYd`dGX8ZCXzSFYlZ z*GM}1+L@+PfEf_;>JrL7xSE6owd!BgSU9Rm%7XD*w}J+=nExNh)MiUXV!_uR_cZMy z=K$TRuq}^zXU--~TWReW?jNY4oT?U8zi`z8+R?g*MlIaUnYn->YnpLBmA}j;VNWea zJ^VafI&OUKA$FDV@C40}7!^k6S<>tH&EnX_GMvPkx?f6;yAex3FL?lu!{-3kY1h053-=T`X^qXOeJqk_bW zP`5%u@1m_Wy-p96t1+_4IsuOU4Pf&@1Xbb+uL(ea@DO%t1n6SY!)@;1tBjSgQV1Ca zT%Lsk7~Zk(&SgEJr7Fi zr~>uUG44?PLAo0q7?S$G+7dNdPU+QxITpdJ4%#;BdobFrVP6%K@lYt8JR%6SdrH|Q zr6Z%DN&U{Oesm>ZArE<}^$=i^m`)MzqfPOk*%cOJVr`P5lj2G6x_&f4>iTeKw)VCU z+DBuLl~7wzhs!)5UjBO-9c&25hn?5KGXUCX(62l!e&U|&7MSe52*(dX2A6$vr!4vg zg&wTF1cOI_+@plHhz2hLj<;C;K8f>R>mhA0KUwK`E89Wf?N~pvb z9RDsx#!HCKiBx~%s0cH3t>(ano)1%ZGlXsqRo&!yCMbw03}Gw~zW2B3We4w0Ya3`r zB4H_Iw!L^&foRgHRbdPe=%fo8lSEFiQ>t6#(9eZ4qu4dr+3*c>@?$h#PNBA%&aKr)hi{^jcDR4! zDtHlFkLNYu-B5*DNC8^_8*k(aLkGyU!K`5%RBBm^^LsJwOr7pK{Q8qz<)wVIZIvrW zNHn+t@P4C>ptAI=_%1-CUctjT=tiHvLs66LMykFfcF!$=^;6M~51|!S$JXBS+SjMQ zc2Y@XRhOS+a4lx>;86qFo}i5;DL_z^2hJb5&f-s7Hl3#yAGea0vX1V?7yifz^P{|- zx{xJC;h%qYovE=@@wggd@a>Btv>VlK0)}fDI9SsB@N<0l0PLc_0$thmb@j`bHw)wr z=Q{Deq9j{k1n7>_hP_bI3JQJ zZ)cJAdvr@LKYCr;kUer9tDsIXUD;|Xhj8yYem=Kb*92C&x zGmNenSO0L{;wjohRAVX?Y}kb0p(Y-@?i3?wg6X(Oh?H!I{Nd%{)%$E0c>9Zmjq7?b zT?m%rF7h?tLSPb4FR}U;Fdlq6eN!#Uw$PjiV%79hIN~&vx>AsdRH`Vr1@bDdx@m1h zVdCu|)!dXvH@nA&b0nK|KGnR)QK)f~gIZzrHZ;RUTa$jf(C3_|e+TnsuE27jxx1Xt z0#}?PL>2Rd{>l#_pF%qe&&W!&M8mH5{1*WuXC{Yq_=!pg`e0;*bZ9?p8VF z!CB;O=F!|I(RH^RPNmZD6qrcrw@6w<4}KQOYlzkxPVb*UNY!T8|F*+fa+VnTTR*%5 zIpDLAGt~8+1J7f=9vya4{%#p{sucYugK`ezm|eK%nDY778GppUmQ3Qt2R?Kd+frjA zEOgng+9$WVHGUxhP`8qV+fs%?*00&3SBPQU{Gpw@*7ZmdsM~>m-8sBRzt;<2rIvQH z9+LYLYx@goWzG>(IfFaq9^r9sUdd$9hFI*m9e8wkUx+$w0c9V!xUK5r{5acVWP*N zz<|8zep=0_Kjp9461g#bgW_eLIl%Lg~kDqWJFhxhVrm{REGEpeD=RIjrg;exgc{N6KM2W&iL1?KTQ#*K_f+!{;= z;4%7#NeKZ4(BQ^3P~Tc>$nt~v@N#3&qkD?wDFN4ew~g^a;2wShp&NF89K2WCm?SA5 zlrHpR9HW`|PGLssa&YQ4=Of+q4e@yVow1~%_oxD*_@KdSJh?tEs7-ik@+Y$ zla^y*dLfLV80sMgm0GOfw?2*anXEZmhiya zgu9L;hpThSge!J2JAYXCW7L3?`a3oLIeM`USi#)G3+|QnZPaxJ)Dh@3)}sx^O)#)3 z9_!60j1sodvTrnEq*Z7F*|{Al-sX-nC@Ygc@89XX4@O0QS_`}{?+p3){5E9X3lD`a zK%=izlE29W9XjEBqwzRA?(R)elsXh%zPI$(4>eN|D#j|d zc&IbaQ?lzudSWI8l`kSxm3HSt+klelnAqu+td7{45N955T4w~?T(jGiFf8;s#Z$pHNA80lpxR-GeGCr`K=Ila-KJU}>M`nb!7CDvHHG6@{ zG|zRS|FS{o>y7@w*sNHFl02QQz%+xJr2oz&O8|!4g@mW8$x4`l3aA(%Xaz{8NiLEU zf<`XFoU@cOW%-etU1~|KXyhAW8k!X^g^?CYYeF15dZ6aGDO^oqdn;b4(R3fIqJe~{ zV^OAHW!vbWbVDh|A7)IPI`e2zuZg6gAp(`N64XLXumDx02Q zVOgW95ukKxc=erz0%n#w3fnO?!@dk=9j ziHx5Son$F`g7dYuJo4Q04mBGiw$W}B<|iT`d)@+nq}xk~fYKYdvDZ;HmTyi=?Lm>l z)-0(jTECt8euwTC=NwYe2CI4KlL&v!>KyP#U4x*JAxLimJ&qi%fHwq-_|^7y?dy5{ zF>vdF(cdlYEVOD%63!QU7ArXB*uhI5osavyBZn4W4mT{DHr&Cw&?gikXGOP9w#xj3 z@Z#cm3O+@4o7vLQ_0X_yfM zg+%;cZVH8*fkd{%9Bz7GD;BQ>btK2Q_j7<$fj+K?I}_Ilh7A&-|C-UuzVBGy9?|{M1^zUV{Dac6uV^}$K6OD{)#J>$aeqrH8V?y%zS;K#$WlI|5yjkSJiRF|p#@5xG+ zex+jKrTC9tRn70Clfb(>@%ECv8k>`Pr=ez%Qx#L^M(V$me?6U7 zrt4lUTMh0m*_1s2uI#{r^Mh4a+7-Pg_xkkH)7t0s{qz-hplEy}P^M>w?k8rA_yGnc=!sGf&O5S_9|F)Ws{&=7+!+P0!uM zgOhp{TbbuH)P-v|}$=~%Ymk4y~@_wEK>wmPZPpYjC zL)&R>e!5S*W;{4~nlG1N`~LX!-l;!SX4`y0@k%4Ax`AQ%x!{8$%S@QAe+G%LypZ?q z)px@WX`luIXa&a83p0Y6%!->A(SQWP6XSxWjInU?Zf`y+FZ-J9DXxYpyMn;;cDh5~ z*XG<^08yWTe`bg?ZvdA*-rsdwkd7Q*EE3ck?K&+WIoP?~x%{$q>d-iZUT+~Z96;>y zZ=Yw3Xu;k5nY9{h*Q9)FI1o`1;vvv=!N-=KqIY({gd3amYh2;#$Ki?q4h#cSy2$Im z-^os$8lc*&!-`vdx>S#mBje#vQN5O6pug!pvQd8g*g1c`P{Q!n0s~Ev&{wZLRc< zkO2j51<)|$YjzNbWy_H6)cA82gKllP7kq7_+&kG!+hcjCS+FT_^-2SEH**cvaKz{V zenTXX1^}pSwqzen-5pEeyQhVieXo~nCNhK(ISlmHF{pij2I8|Q?Wl1VTq5jBWP6r`-L6sV^SInx}hUsggQE~2ut~H*H2tx< z^}*p(*x36hC7Qk!5c8Lie0dNj)ew$g7M@@YuR<1S{3mQ2YUDRBWZq%o_Kv|3#qxi- z#wF!irl=^eKZKWm&EBN;6;vNRkhL&yhow_;e=t?75$4z+NWh923ED}sfWgIN+W>=N ziUNZ+HI8s=aHpZl@>SSkmWT#IuXUIm0ndCKw5^g3!~z3dJO{jRPfda^S;kIrs3^1C z02?P1+a}9?Vi8S67@?6(9Pde^F)GtQbZ#ZlFL`01?x~vW1Uxbva{p9aUjJyyT5xx+ zi@>?nkX@F?5sYb8Lb1ZgWVvS4RbaO&mM}Pax^`Z*r?&{Ha07|s_XWk5RSRk~*EKv? z*S239nB%?hbaf@v&;I5BWQ-*1UHDkbfuLN`?`QmaRKnZqhi_~LC{Yc}V1OlvjHL>S zJ8v&kkc6y!2gSnMHZf-C(TG;SpB6C*X#(U%N$5L zQzA_}A4i`nM>3`WE>fkiSd@;hSY=M5Fxt6%Q}y8?aOzeZM>Qx<>jcsvHg-~8;B~j` zT4s74OB~a1ZzA7chcMYEjrwl5-B91PLL{1G@I=6;_B*)$(mO3Y%52L-OMM*OCAY*j zhZ%9aSr}>ynL#N-0E>M2KsATR=aDeoX?>O{8*|pX7cUAX*$|f8_Ja_;Qv0-MubQV} z%>1r15@--@x7FGD!@5d-6ecXBF1y>nqa`!b-Pu!CyPsT7r zWg9|d%&#p#%#C!1UwN&@c+2ilgkP$+FfaR258E{2BcWgksHJ!{5?%4V!oqTI^3Zn~ zeDZ6Gmx02|eagcq`oL(v_b=h$gWDR1-h%I!ji%M?Gx-c>)$AEkh}+5B6FUJi%bd+y zPz&X^f$imu<>W(%*p7Ypk^^$J!~v@3Sn=DTAJrx9h(WJPoon>$RU@_MSY_##sv; z<>3RdU+6vj(385@K|F_nHQ%1|3{iRV&6D&QMa=D68l+;L{bT+U&Q-`{C=ow?-Baa? z7bg{2tFr!D6Lr@>NoPlZ@z~fWq|f-*YHAIS3^08d{d;cGtolkIXvf{=-88+am)c>N zlvZ0l8PmtG#AgHzX=3)g!!34_BjghLz@~f)H=CwfE+VXIJpKL2fEwW}Z=Zr2AeHOO zc=@hJj0Cnsrx-C7YAOk6q6;G3#$p%fNr?1lZH~m7I(SlMM01LkU!ux@$R(QPsU`T= zxcf;04uoiSp<@~snIE(y0Bvon#r=jH%Wz}Nn?Y4xW|1UZtcia8juz~4pV$t%U#ZhS zR4adQDM@NGto^=eiH#10nq zWa206_1G&6&OiFfWv|8A$dK)*x3(=%#y0$@Do7CZ*dL)JkNDWEWT*u_~A@@EZFuPxA*o_@9z zb%vvMx~n^-yLQ0H76ax?V8(pijlYNUdWtxo)UGWriOQ8$Jxix)!(t^5)3$Hkp5lm0 zu{-YFZ|U*oAl(e9H##0dnLVY;Q5UMK+L$k!Dq`^Oi%N=%w+6LxuFe(%!Ye8X6^+~O zHE5G$(`d@lkT%23fhl3aha$MMYh!=3yD9MlnYFce{%^iQdFR*Ed#0uC-m!Gbn&5F^ z^YDlvB&?EoV>T@>nN!i)NFv-YpMNtFl1^USw8&0?{&A#>_}OQ?%x^mc9rKJ6Zrh@c;l6!1CZ>m_?+X=ePok>Uij3%c*E>kdCEEy2EaY<|nzfJSNMb zW}CRzxe{ZJVtRDiLf)XmOolQ3an)I}v&W<5j#LnJmo&uT_1={t%u4i72fKfvo^@>>U&S?A}AaCS~J7g}&^ zHwK;irgMwd8xAjxzE~mgukw_}5nM?K?*P~QJl*@PzB?|48mead zrK<-eP4^i8pyN5?CGT=G8jU37mB6!3UV1HNa2`>i;b3tFD%|mQ*6P~VYN}KZ3`9BN zxmJ0&KbeZoB`rfHY*Vwi`;o~vB*zyL$O>i6gPTB#q2fqA#@m1F0W zj+;46b@^Dx#{S>0Pk(FcN>(0mzt+IE(V!}`O@^ojLPZnsaW%8_w%O#l`6@*pQ{?`nEwux_L9u5q_gB+1Q~AIA}u*j=tt{) zitNOqRA;M#@m>Ls&9jfqi@*5h46kt=Tr%-4-oW_ny!JJ9&usXU(SPjiU6RkT@wwsw zF^+7{@o|?lU6Z>p%kDMZ1*ZD9n5(;sIm`v+mjAGh#D@ngclmvsbDVhP(#?~+_--$M zcD-`KEkC)8bq9GFT`pEF_HB5*^9!8#=Ja-?Aupz2S9N=1$hY#_t9ixP!V@3Yn&fjD z%F{M6=g7l#LaMtUt22eB5#*OM2X#Sq@hSD%Y7Nu(^MeBI8p||Au1=X(Ed+=v>KJrf z@W~i!e>w-bwc%e!{Ta3xHYZNJDxZ}FAC zsD|0Kd)7jvtO?h0s-_|6x#mp zg`$A)@8a%!^QN<>$M07E(MbRRj()gDZEC@BrKVIkRt|~tLFRu?TN7oLX-`U=; zm(<@kef=D|niTz?+uyHAz@GZs@w1a-fW8dFkp60~V?*0WZENqFr>oyH0HU|)?YQ?x zCb#FSw>L|#s&_|_@I9F!rS@L+PFvrv{pa~tQ|GsVhrhR@>zN(UC>}GQ7?C^$zDP+K z>sgETH`E+IGEwavP%UWqjs2EXIQ$O%-8|r-KnU3WdRcyEe43uPW}L+oTx9I^ajS3R z)6b@3SaXk>@7x4vC{KJ2&7Vx&It`(ZD>0=(~Mb6a*_ z1Q(qgqjSwaEA-V;OVu-T?4n}VYzMsAg##bi}LsOnucoB4ECXfgV+huya=yfJOaR9cTL2K~uIye__C z%0aWLQ*$N{Ox60aRRcRkRIm=^?{NW|kW~*T8c&Dr{s1ClEO(zsd7Z zeC<44os61X=AHz+{XQB zocSXeHt%WC%o`tJ-tP2xzCKdRMisiJ+GAiw@xE;N1-6-YY%5l*U7x%%>|~REeLdQE z{&?XR2V?lf2_K#hj}OBD)O)3yv4WRIAR@xjqcWtA_o@MT=9slgodT10=xv-d9)?Ls zcB2C#aQ)H*(J%dXC9s*B40w{$whtkilc>WQgGTjPjy{>;wE?u{6%01rTbKQ_n5+L; za>?eGk6_E3o$!tgLJT}@eaSd5ITF`rZO=7qQsx7VzBo}Bavc*DjKH_F*;K7;pa~_G zd>A%Sm82Pw4csgAkKHfx+vftIAztd+w^m|_12Mr`V;>f`X-tiLJ zGs||lcjj3}Me4XJPf%Frn(h)aSr*Ycsb-yehw6-FQ82CASlnaYG@ota>GWy*dTz2B zu}92(-Y>*ul?iw|wK8K1+5}URhqmcy`^a?CSqDI6mdtaPAYW)UDA#4R$I{4vg=nx> zZFWuT&I)+HJRf{LTpxV&L-|O3I>B;^5uA>wE1~CD9I*%WnMLn3Gm4%x@`W3Ov~F$S zJHy&Tn074!Th3;rl!wH(##}4A`Fn?e=NMk0qHEM8n(xT>$i4A1$SaH4e;h`mr#`U+FpVn=}cLyS-@C`?uGZg(WYT#yV)%i;^4NtSoLb><}fm1nE&T% zjD9-VD!{jogPqMdZ7n1~san<*Yr=@iv;fGulPZVKmK0D-W#UoXC{EeyG%aXesXSQo z=H;HvC6bgg)dxB-XrL~n6kty>3?pRb2$lHTi}4y#u3inDuPz|kN}i{v+tWH05h`IV z((haBtCr;DJ&rc48?39?WcQ%PzEPs$ItGo~jQIlv12+mD){B3pL`*}GhsJNU%>Wye zaj4tG#CBnCZ;j!{<jv)Mq(BZNxMV z7=;Vu_i$o#mp!;IpLPIwo0J4B9n3n|c#-fQVZgQn;|t5YTY%wU&lsYv*M7a(4%l5o?wi9DWHyB% zspSW59NS<%m$)fB*(mGatVC%0oIdzIFpBW#)LNPPn%<{1gKCqh{uXjBuM8K47moi| zj4~0ao4dnY^&He>rb~vx&?eA_+a!X;0%y-H86PhR=YjA=zcGbO6`B05BwWB)JZ-4Y z)B==HwQn3_g;-j)2S9gn#%CqEhaxfvsXe5HriT-|@c(E77Q2DRff5e2{&P_7QSv<> z=!q<0mY`0`VnL@#IJC$3ThG_4wRkKzvX=w1Hv%-vYo`tIn%5^mRXfcPMA{SZ3hSs9 zpzyZcM{MX&8)4;dZjWlNn54i{fu|vtgCib}t>n12OJ?kx0QgJ&OjZ5#L-RQa$f{+i z$bUcHMI_9k_Xka$yYI5nAMR(`@0h5e-xEc2cpHK_iHmwIg*_@l5O924h|5FPi{fwj zM8gm!XQq7L2oa%emgbx4lNGw`ToDx#l4zuXiUPQK3;DP14N8giVNI}UW4J?w&?WwZ z*ctyTEypNl01!5x^ne&+U;!mwfi)B1n*R%PQJ0}bE8vfRZ?brG`6No z@8%g*_?^?+mZLmgmk}d(8Dijglp?Qna`4OrjJu?bhCjT0tDdS}slWann7sVn$yl@V zSFE~)*31AJ$}O`*F@8hslG85U?;EC%d4BQl=aSoS89ak6IV&j$LKl^GJ0dki3&?vYsDZ_Ft90s@qsxj8=c`1&>5ITl#afuF4j5^4edvs9Qfu9yHlf1 zq21>5I-s)>oJvJ8qr>xjw1}EjvR)RUPat6;ocN9=HX+Di#_5*b-LMsf6apIv6$z{Q zx%ZXSuDCqq`bLh@WU_eK&xGbvh+hUWRVBldu>tGvRCNHkf9LnlTFXo0e|0B@45f3u zX;jtvM^p=@WMEVKxj(D}Hlc%KMK%n`HpAda0e}a7m>o!W35_`1RG^jO7=UgJs*#6A zyaXvQ70_YK>azUrEaVYqY!_w+s%$|6HitR}p>y`*=Ov903GOaTO2byoyVs5jq#IPr z^dvj6uDO27xw=fmSXS8TxFe@A`svf~_k5GHGU|Bw(@N@l|57vK@=~W3_~+8156+L5 z98geo)&Dn_uPeSZz6)V0&L1p;7Mv}f+&_8eQf?T@-qK&9;1c}>C7SLkE^u`)!w17+MentC^)Q1n3W9KS*`f^A& zgrvwXFJ=Il6%r42;15Wq!&BCpAXz?N$@hv2Q?wJ(W&w*K981r`QGpd?y=OkM(=LaB z^B-cPJjiAjzE$fmu(l0)Wzpy&oYrv{1RFF^T8r02{u|(oJNuQyH7QYqRqRl`0+?Pb zg!cnVD?XuPcc|njc}Z&ml0&%BB5WfLlR#+dSn&^zF!UjQ7PtIMh0cc z766feH4g1>qz{!$jY0#AaI*~cyVh;AQu)h*0P5gBF{Qn7 z-ZUkgbB9O)0Iw5*!VAy0*TgzAv^p7r9s7vfeo}hA1)2FfZEAd5K`PZuwBqduqT=O| z5A937=Y}g#KU#l$l{C0a7vUPMoGhl?WaIg0RCYs)s*^<8W=6#T7l3BADlcnw`sa|m;w-c0HWk*pwq_jQCc!V{EG!~zhjhfI~M_Zsh*^-iPCu8YRzs= zk8U=7N^gVt?M!S2X#VaIcS|0}HGEC>6Fh7f{C2Y0j-_uDScZy>oP+S6C@(mKmXw7% z@|wSn;~xAg z>Yh1dn5YV}kVI~c0L#wHb^@CTl2T$0KR(RHAP}T{LA4zY+E{n!f!3(TLj?`*|1v!g zDG%=@me4@sMtq$4x_axlyObyiRN?51f)S~?w-PytrK$x@*B(_!`6l|V--}0RZ zU)2E&V9>UABVe+Skh!M;;$`-+MsJ{clP2OZ(s{yH^_})0B)Indsy*7S9`TQ7Lqo(M zQMnIFEw_%y#mp{=B>cd3=2<3MgK^6D;b08T1g^$1qF{l>**7)d0z#RH1`OS%+NHA` zmurn`ZJV0`U}({VfKBN5WwxAezAs$@=O3?G65(yD00&Ae470c)StJW|%>&0fN3cs* ztSw$8JAkgcy_7UjHdqS=B2;`^SL;$amABRLSbjZCr&~~8k74%GfBzlM4Wevg$e36JV4X5zGr%0JVyR4kaMdwxaav?- z)Bxs&oZX#CX5m0hayjK(W-s_We1u@*IHq9}l7+c-3Glrx)>CO&8$N%g)0dN}fKbj9SQC z=k`Iq`u6fwHZ&0;^wx%rX4_Y?>NJHWb1s8tnB^pY2f~}7>Y5cn^*w<=ATWS7f{R7y zc;vhpr>#ql*W)#H8PJWT=2LcFv^w2oEaa>JZdRCVJh(Z&Pr4fC9(9^K55cu(_baKfxuh5A+?IJSQaU}BGmEwX z#xcMcPf9>MO5(^L!w2ZF_gMK9bTY#Y0M3ZS}{Xwa>CIdy5>%m)#zGc&fM6@aV?JOv8%%bS9VII{17L$P|C zcw@RWk0l1aE$jW3(pL_n(2xw^B8>+HB!*(7BS z8`x&a8%==I6;K70*gBW=vU_Zo$3ys%kFZkHH$;Hp7>U=oxeM)8h}W}N6R9l$C8-m2 zMO|izH1igrSt)0I&U}rpgOr4fzc`^wN27@0m>| z(OcD-*w(;y7hYMU@*Qjl-FnG$I<(c!NfYs#joyJOo~%63_azf=DIqN z@MkC(aY<}Ce=I2(-#Q(@wY@@gZNFRQqsOnS$3Js1EpJo{*Y3$sk9y+4JQ!yyq~B1c z%E-t7Y)h`ihoOc)K4#=nMBzw(A7aAuUKt<0zD+zm+uxXc7B}MFKH*4?OpFrB5_1eh zw}&DV6}aK(r}y0ys$4Y5-%4WHm_|a3i0>oHlZ3pY8uRAilefMBcg>)l_PbhwMh|-|jagYfV7?JmIc^s~5ds)>ZLA$T- zTUGLnbmG!xGE<%+^%;Zu)g1pJ5l8#ywxBhQA9<^a3iOko`L zKB&tyt9ILnMVm{gjm?^SzAmf2%@KTQxZoLvnY8CKT@$6@f0h-1cQSlfws%+)?V@UD zh~;{z?@qUAXv@_vsa`%i8x??{C_gdWObuui1XUSeCbUhs1{HEtl#}TSS ziTPWGxX}?mjY;g0D<@Q=cDW7V<@3Pm{&M&tbs5|H{+ThVc|g~9#wFI!nH#G2$%=1(phGiQg|z^-zSS6@>OV$LE((q~X(gK*drrP}TM>q4z!D@xo?(C(p<6t)=iG2=>wlxGcjyIzbuJ z96l=KjJfhL$W4d@Z%N^Sf}&GfhY4q$@Bv0Be8Mm^nsz66P=)mPg>Q2i$dI$?#s+PD&XMUE`I+>4JIzz|x_KQ>}w!s9@ zZvz+6G7s{I{VTrNz44ajY#DtL`5pWD{e18ZTG{*ic*hNQZ-8n=zophpA=I)grHdP| zQ-A4|jkWTpDD;wd)QMhQKzq{1Wyv*U^i{$V?)7!NjhiCbO{OYI;~+LN z+z1#+*B$JMr3Ik{G5SA$3uSx&TX0?P!x}pfzo_NwxSY^!6AgOuW43YVsZhDyxDgOD z1Trj1;Pl&wN!r6Fv^ZbTzsr~iF3~-492ndhArRGP4FgVUtv?s%cbXEVLhYKENAQ6U z3H`jCBqC_xB|Bmqq4Ojpc)dpDCbMVoG|Xn4A3UL4M~-RsX6>n8Vogtg+fJvPBdqKb zn}w_*sQ#laCo(QGXBiI)t@G)Z7CN4x$DC5`wXMbY*-rDj3e=bIOTQ!RaD3aW%<4KL4_}Eh5sN4B?YKXsEP-TW_N@s<}7`A_Gk|a*0<;kdjDRn@+ za4LshZL5Wm8$|@BLRjhH3>wIqH4L3Hl$XSpFKrZe+bw5O*BI?n!rP0YUSf})H~I@b znPRv&26%gVn7X?={u|KOFsP-bmaeAyYLRWO>I+uwJd9dgwfA!a7}3iQ!8EV2{~=^i zmhH=zL6}Gm%xu+ANAARob=*$va^Y~cqomhGrclCxLuIcey=j2qt1AIUCiRHtgcU_B ztFfsUT>4~f<~l`@@l(6yu$t~1E|Ba*e3a5nJt5gQK_T=ES41QNcD08;~IqL z^Z3bcwK%7qKRpB!COXI;a75+~AGl)kxFP_WGzCa4X;0naj%K(Q!s4=;Y2J$w5b9Hx{Q?3ga z^bTIPAp`PsBEpv@HjkX-r{xHK)Etb)?~TCo9(Vxq-VjoaBhzrIdZ zk2RI6K<@rb0q)a@4HxtI2nNJ%O1#uoD=8JAVL=pvn3KrOkG`U?*;oL?1g-e*Q12Dm z<#t?-tcxYU)6uEh!s4O`J5t2WVY4O+&J`M-*CzBY-F4SAw>OKYB}@*m89uZWLo8QR zJDQry45^{;ZktObFW$?bcw~#f=_K|^>DNmZWLIlG$6o048=5ZCabpF%$$n(1m(P?- z!^2x}F|u&~IukU(vWXV|cdV??{lkUP{fm5eIiWcqp3`}A7#-QfH*C%>EKHcFDf2Nt z@^QU(7Fd%=2Pb`jPTCNA6&x-Lv+jB{iCAFwK2FGTQj-aoT>el4zEt~0Vhsjv2LQE% zASNuunadFETEb2!DY=>6XN$A%PR%c?BbK5ZFH+KH>op}aLRj5pD(x3125~_-v|Pte zksk<%M;Gc+^t=QWDGV*95+%#_wO8l!@Etm*t>Z+<}4IJ>6Gp{`mgcMXQ|Es zZ`EDAe98rnuRI!xL;;q#!~QGdlsiLPE*ihSE|Y;*^Dih1IolM#{- zso%iMpdsWuF(PRCYP|7XmV!7AA~ zy54nb{RQ9sCo6~sSP5%iMN4xviBxgK8>H;wLUKf4IdNGR1BFG%F(YllMehtSL|C7O zHlEAP4naP3bP>Vuq~Y=Wcz%3*P~iA`vJOW)V52R*(wP~h%G;)4XIPJtZynYS3m(Ko zaUENJEp*ibxF;*VwE0&E~2A2@1sD4c}Oi}p!CS3V(#FYAMoquDd$b;pZw&!jn!LK=liuz z(G}ydLqBsVD+>kVukscdp|Yc09^df$Hb63H`lI4-seQlHpGutu#u<}g*C3VRR4*4h zJX}?k93xP2@|j#n@P{A3+toLp*e=*5Iv2iqz->?y{tWbzU{q^psvL3DIyH7VfyCkB zaXnkAj!7T0&VqQt;#cTyb+OQGmPdmrfR=NYqbnxfCjw(B9UbaUb6@u7P9d6(TzX^i zCe1UI&LB{}T#orz2UF5FYgex~Q*u`ua!#XfKATw@k+R z&itUm7fhDW3}+E*;+YcbxlaO1N)*Y|RWve{zQ^xk=;`=Xf`fz5+fsZLbH%KjQHEhX zrDie#lCP%HO{)NF1q?NT&y)>4?R2wkX4ar^S(Pq=6|flDXS7ccp1(#V5jUnyn7-6g z2-^fyU>hM%NU#W?5ofaMcA(?8k7w-7!TA?nVmPx7kz@116Dud7Ro1GKi>w0-NVmC0 zqoBndNYEXXtli1&sa1%^^IOyo6}IKMmB{eYoQE@n#R@@Xjb*c$EXRMGzaFr*X8Smi zco3E>;7$ivFJ}grI~LDrq^U+aO14&I z6-U{SGby9Z(r6-^9?mF_?wo+4g#D(8>;JGu;@$LBBs9opupUeH(Hu%;4OvS}=!48P z6R~lkoe;8@F-@M`m}jZ9nXhirz~RsOm0AqmG;H9FYDv!v!@@r>Ho+_#f{D9hHp33I z=T(FrQ4j(6K^YyDurX{i?q@{p7uhz(i7=~iA;ti7CI7^xhNO<6|M`CBWAYdK*QV4R zj(>&%{MaY+@S};dNvF*>i7H)aRB%BW;uiO}vB?ohu*s!?1_x6vmZ4$)3Q-MvCq1N@ z65x`E;Ri+S>h$vRe7A#V_N3=y=Rx*vkGwRHUpE1;KlYnYcR|IcwI;>qN78$_b(`Js z(3EiQ-9cdCNf&FYjDW}d!F_-kb?^RKxEj5d7RP=(!zrQBjdOQ+M*%J(GnbYjyo$?v3PRaVA8?!jMA>?tHs87+|MYM?1H-A9Pj z$%kVOqZisf6qdJI6z}RIdi1pUb$*2Ke|`Y3mpXZbc*>aX(8$X5ty@*i1r={ARlo&r z;N1vi`YS;2H48s%CleG2&p|u10nL3OKVSi*O~jC<3sl*do#lAO#`}Bmvy&)P!`1vQ zv5q|aKHOYexNO0W?aehVk)iNi)&>{;t0dr*{nq`1(M6Uz;XpU;P%3-;StU5wEQi+0ieG(oB637Idf zgxUVP@JYoMyteG!zr|Pd9Ayv6rkMobA--z8psxo)C}-6wOelk_E+Ao7TUhK=0M8xh ziF4NKg0?mK6GYO*64@{SE4J$H^~d(lEoe~d-Enc)k?_jhs?Lzr= z`Z-?LE z&0%PHIMu~pI0JpV;b!0$QC-LJg@yMIQkCEh1P_JKo7oAbd7b*g#U8)E6iZu_wGZJy ze{btvY(k3NSECv)y$lUP&td;ePuF7&O{b`Szhp%p8P4c#DUDE(Ps0HsgR@+l_UO(E z(xY64RK@T;yIJ>m-5d#(@v`&Fo>eI7-7e_0-Yn^`mnM|Dk1hI@OHf~Wpjb)d$bPZ- zTileaV-r$T5yF9LXiW<(_f|yfW0&kJNs5ZFgLO!xC5>9GiJ}R!Bq+o<;B0Ta0Om`R zR|zsx9t-4t#duK+5NZIQSPo3ie%)U_miwZ-GCuWI2#uS`AzYjcv`F<2NPd?4r#uH) z@DRNiUUcL8LYS$Df;5EC&|Mo7w@5N5c$>V;umu}Q%zM^lcyCH{(50AMWzdfv|Ha@6y}Z8q8&a+eU1YfvahBYn;)t(I|OTdCT2my`OO}wt^#@ z(t!gh=g?Y<3Mv5jba+TmG%S0%SGY&R>tfD?-5LL_d;)%*OuZ8MVvXnF&{4b36!675`s{5|F6;t=S7R+ zKc0AAO&WmoI)$r{KZ-K7dOFut9)gRJv`3KpwCnA-N$_qF|DkdIJeSq%M4#qUF;K`R zl?i`}o4j3XglLYT>rMHeuurfx*jy)>4Ct7>id0DlgLn%FxiYHe2ct`R2g#uW$I^Jc zsXw*8B%|?eLr<%jSoq)dFEbLA{1|U=*UVZcP(lDjqVSdF%qW+NN#GA}U~d&kq*iSy zD_@3!0R*j)&P9U6#26Z}nISS^$hP8l4HV<&h5m^I1nFrWns9FEMAjDlkioX{xr9}*QjR7r5O`Sex`c184KB||s{JMc z?_U6}_NSg7Xk<*kTzYcfYUX}qNZGkx8;$V+5N6E3xg2e&Sp~*fwcZ+qpSodj5#3GJ z^1joUIozjE#Kll`NQOaFJ}7gzYaX!W)@-mpv>|s{=$sHG+x12{u;W=X9*CyYi9b)4 z>Al(WRdR)skFD4b>G?%BQkHl~)y?oSs4aje!wx&zC}0Jd(Hc-ZJq;eOB~F{mNU6f3 z0PKOX?t zmpkFRTr(+qGlxu@y{f7>rpjx-w1pA3?eFiQfmKNP0)n&Ue0>)}pLXt8g2{`~am4bVu#Z##o*3uG0BHNv?v-|YGUN-VfoYl2L^NU!oQAAu;yG4Q8d`NwMNG_peDL_-nrPgHj1tW@vLoC}#>WF*ycn zgJ0A7`bYrRDl^HWkE5UOSBa9luYl-amOW;BOg`~bM)G!FtN0+I`nDN#z5&3%g{G2> zf?e7@C;rPGi~TS}@~syozrSx~`$LqePLnF2_*zq*R07^hHi!s<8D!Se^^c>z{XE>n z9JOv^AjaZ+I5^!h7NRBNe$=m)zq;De^k8Kvh+shq3 z6VHnU)FWtJSw}2#-kQYL6cM1}>8<|MMOwi^i&`mrF1cb;bAkN1fGm&pxi^{)E|-xc zEk*W#Sv{u%VRl9d8dDE9UKlspT8H>Sg=$s#KTw#mnnUCa_}ocgG(S!MT>&N`~4_@VD%w1DD&>-0E@4R~1l428>xi9+rJJ zmpD%+w^L_%)CGlp53v#-li=>dOM*#;OCRDKQCs$(6}A`|8jc=EUUwk^cj3kmigY=}@H{}V{Ak?z^P zBH?zoIU0@gRqtD0T2Jm(YX`N({$azFNoN?W{(}zM8&0RK9E+-VJQCgQqoZwu0lJ97 ziqd<~phOiPXom(u*>2To22h8i)3|6hkl}=Z73a}QFd%kvfCfl<(1nb_oa$Agm81NO zpJwu`OaMOY5VV7m_WM&^KC1hp&fggNjRsJ8TXtxpt*-NunF3GXY+lv4??PO;(K)Dj zgj?n^$Z^qeeV^7bEa?Ezdq?J$+)aL^gpv6F=#8j7xxojpu;HqS!Q3I*$YR7kZsAC?u zt^G5`MYufpn`n!2;Q=v=Kn_V*Gmy3x<*VvG4qOO(dH{6&;Gli`Z5RzGmuJqy&_Nl# zyst+_3piLwLqCb!9V)?1_frUI6T@ zS5AB+Tp{`N(LC$4KKBVQj)nrN?Inh)4roTicXI;)e+Kr+b!qw3e0+m)z8Uu}Ye4h725LS+cWo3rut&qxjLhayj8oN)IU; zvL$JxhVI${8F;hZ4GET&hK7{|Q^dC)ySFApD<`RFZ0s^uE^uhUlT?x0>-~9BARITz z2D_eTy(Ixgf0598U{;*qp|VO-%M|o@xgX5Y4ro&ke;PBUX1O`kx>K(wE6WsU52S>% zJJ;GM$B#PWHywLB>~$n|lKfhoJ4PP@2PQ$RpyPYQL9j8Q=2P^`(CHpnEJWn!(bLV+ z?X_KqbW9l;enASquMpU^fNZSEk~Z(oa4s#{W374!jH&P^qlMqZsMbJc(Pk{bEtR}h z0QeE~O@3u zpt%1%h}dLauD?yJD%V6tqNmDZhsf6zN+TklH?Stp^<`)0raEsP;I-7bUD2c=?i`P! zTmOgiR7+P^A7c~g7Wfa@RXM18JT_>%6o9#U8@sE+*yGVsk&E8HqP2~d=buPbh;605K7 zZz0{_R~qnujh+@%E+@74Z8Z&F-sd-@Qtp@(YHOsd5OGe5ViBEHa~?8|nOQv@1K=m@ z{f*a?{PW`$T2%^xB z6e(xNQr-jhBo>F^)DTZGuwg_*05H*7RLWMYVHd2#Z)zb2dIBRMbL@@sqMXI)+1M-{7l%!``p%(5oX#W(E&7Pjc<4MgHid7ewkFCp>#V(tlmdklW8uwg`ANowO+^wggmZDCaclj7VD}KAB!FgYO0yU}&@a@)9-wxggoI50tZtMBKT6LqMg7@8OPM1dh**6bB; z{BwzO>F|3DJVLS1!dowP%iIsr0Xe>%(Df)HkS&69WK83z|7Kba{{6mW{6+kKpEijc z2?Fr{`?`^7h@&}A3`igaY};?}paCEve)r1|)vJ?^D2So&=E5Rt7MIm*ah844DNMqF z?TLkB7gN-}ZeQ2li2{;@Q*V0cl%pbMQ@=m64~<>$e@vf%52(#)kwr_ZFPWm%tY=PO zflmiv>*N>b_wdsp(P~zSH5)8#TsBteC=&e<3Xg-KEJ^M5ouOF)C_`v-6EU!W{y%p@ zy^g%s?s0(+@nE?WyXPuHgoWpbO+->$#r|3;5pjlY8-?Oe4w7$Kk$?eBu{9N3wXKyhLz?0!@hE?uf_^a&o)GQp#XDJ*A7mhg+Q55~JsI2eKq!R<%^CiSf|I|E==?&>^NrqFu4zx&@9BqJkQ< z91-AAh9gWUUvQ*Q1r7?_AF&C2sgXCkg~UR)pv z;ZQ*af1`ci7s0cC{4Iwp>tVReA=vi}h3}7fWco^3F)E06aYQ|$>i_ulP}Yx`l4nY) zKt+>7pnNa^V8&&X_|Rh+$(9<)#8^`YfP%P7OHUm>5u8YROICCh4TiIB>;wj~KD51D6*?I7bRgAe!-G3KyS>@9p%du{0d}d+M z9lUs54DSrWvBF<|*l^`xZ0X8Sr=d{*bnhtWx7k*(Z#zHkD{Ok!Y1hqs%m@; zX>Y7kyqD;7CAkqqW`{U!d_TKNYqp6C=2&AE9zG0w6(=>prnEoPSu>DJM%Z=2 zyO--$Rk$gr*P`&hSj#s-HZ;0?SPtV|wY|}!FDCBL2b;SG*aOe%9=>sTF2%m8y{&;# z4wv43BfhnjySv*5*ayzqCQ3#F{^FrNPs=w7YE9^0&_YiAgWqa7UG%QyF|Uy2Z4cPw zMfLMiyHYSQ4_WQgR1$Lg@~vTR;k^B1+VqCUEX-kcfTZ5Ww>D6VQbKJWW4>Av#{Aq8 zM#XiJp%ziWTbJ2ab#nLY)rqv)J9k6pYp!$M_yzudRRID>F?TTWEpZ}@9$;&aJBmE2 zzvoTM~M*iwlR~~!0vhS*FUOrDhkaRox)l21$=ju%} zFkn&eYi{E&?;>rlc3FGHj_&L`r`;;&^6-~a{l;(G``dWb@@TF*;IsEhpL28j`}U_R zt(Q0V*3D+EC8L_5;&J&(-pldxC$+U#k*0Fm$GdS$^-}hyt#bYHwIKnk#e~;;5@cQe z^ph~>@$h<`@W=0`wD;#eT0EOyyOse{-TYj1R=}r2YiBBl@8>PmSN;2S74rA@AhVSH ztaSH_l;7jw4g3lKFc96LGjAR5oqVndq>Lln=HJgH=sxBY(ABN)yQPtox&3`_sR6t_ z&Ys^t|E!bxmEGoE?>_GzZ?uIW{(R4Fo3(7T>^Nk4eha3ra$X)k>{Nvz`pN%#8j3wK z)0k(yc2C7=al=v=ZTdjr7~5p%KZ0I150-p?_00u~ zQ~M)*>yEj?Iy3;qg4=0EcjE}nFMY4(7JPbp2#%ezI{ZLW@QnNUjdd?&v;h4%>mKIH z|1}1Dvi_U`l1!uHn2MkCJ~Q=sYx^?K?$N#wUr8UGx_^o@t}BkSxC_0y*KAfYOBiZ- zJ3_{rWXBLDR-_9S^85{|=V%esO>rtXqAD-9kyM|h#~a)muzt)UP7|V2vV_k}C{r7M zTSKB}VOTIs=*BeS>xqnoM*^e4v0?ucOpzWUvd;k=OpeT4fCz%tqWh>-aqTk(s#UY< zW0IO;L{X(tZsxo`hx6xgj@h-)8bgVX3rH6+{3kwvHWa9dKx1@4oc@LBfs-AAS>Vn3 zVdGT)&C8ZZKo$Pe5BX5D45IL!$GxvuE;KTNg!bPRR}vZ!EfIcTVJJvlbba2uJhjk> z1QY5|t8{5X@>Y;ypZETOAU&!JwraOZR#CQHnX&Y-W1Q_rR z&LMB|GIvW-_cq}owe*s> zMB#Qd&+|Z7qV>Y{>t1d`xI*pK2|!~cxx|%)%`MP%T0<@ocPNZ>Hj|Agi=c;%Pdax> zk*6XNVsOK=7Ccur@6ZT!b4nIe?Fg{%av~LfF@bt0DnHTWc87~9hhycJ$lb2rlhjoU7Mx}_R+Bk zs7mmVy!MSs%RZ7+@Png3Kc=5D1D%@Qy5@}Xhee`7FktCpDf0fu^!jOi-M4zZ3|}BT zI(J%HPuUCMPybxar~cdshQ4E~U9kvuX1-H_ut@4d3@eTTAWr75X0v>-Q3OYs1f8Eu zHNNmf{o$g54o2ndyWyfl3r?X%%>R$8cZ{wi>b8bsr_-@*n;jb++v(W0Dz@1{$9Bh7 z$F^&w*t^4( z<7uIi;mwnYIILKw8#JV+LQ;f;3g3natzg$<4MdM;Uzooe#w`B_I1E3%U{|t>k0*2g zAZ^OG2tuy84+NTTBLWgIp9r+yUBjMKXWQ(z@C^;~cj9 zyim=PiA*GExW&JnXIUHbCla<;+zGE1rX+^rFo@35l@n)_Wm(UHpCMwX$;=p1yuXb* zdcP0XPl&GO2-iFsJu;tur3(oeQUJNdssLsIUs%`3GEJD0Cj8Mh>+MEeo~dlNa={y=83XKG##j zgEGdviPG7f&-jEJG6~1Igjmq*fbYRgKf~?t6e_nbpPqlpREJC}4=yOPZC#jDdFl*DKVtzoCraVPiQ=p}do;!-TzOSO zr85;(QmWX6de0X{WBhu!b#$+mdiW#;WT@{9C{r!i4Bjc}2(%yPPBf7d%VRW#a!s<2 z>;qJ~0E-r_DMs$BdAOWjAG?3Ub;-sE7T%xVw(yxOCdRIGH*?e{emf?ME?Q!oP=Yk$ zpvzRcUK~KW-&uboPc)Y!&K4}Gyr}hQS!n&?7;1bP3zD%~ZX1ta6pdfxTvSe+Z2;4+ zkzu8xsv##n7_FF3oyT=`wEzta{LvR{UFOTz^go0~&bhVSv9xfR zbXvoZcajc9>#^eTk2@}$T;xVFp`y|pi{cq+T_FG@4>1gc`l<__fY;YbAuAKMQIu*G zQfaS&Jez65El}Cn`tO@o$gMJ}nL8jDhBtuwgBJ2qUWm@yoTQWN>dLU@R!z zH*Suv#rw$_khjjhx}?4`_r7mTs7Y{}9f+NI;NNh+~&iFx(m+(B3GAR0!4%PT5q0_A# zd|Y*hbMzk5iy<9z>$YL|hbnHOC3eOM8@0b~lrf4&E?{WU)qnBBf5<8x0`1Gd{<4V6 zrgjzuBR|3aPmx^L9smjn{r~k&>gMFOz%c%|kuna~-!6y(0^%3|0)hjQh@623{Q0A6 zM?UBfa*4V0S;N%?OQ}ov?y?Op?ixT8V;u<>Ajkw`DN8N-@NcOQ8O#5(+#8vw#;E_H z!N1^;PJKs3Rh`pI9aBr~F>`y2b$sQ z`j>qn;CDFr_1)wCg+t!^EV&TSw}G5dfZ^9|fLvobOK`ADgP>y^f}@ zV{G`}=T8~!Hvg=4Gv6e->2IuWw)2F_0d71{z}?OMdB&@o8{_2#;A0!lQGqAi+yUbs zVU4KP<}e9|8X3nzZ_`egJ}ux#7!&y>#;t`Vb2{ z$p7i=b$jq~Gro${bOw;vLNGhA#e5JFPJ)z#NZ5OWCV>Cm0*S%fVs_lxN}Odb;iA%R z(~^$p4xzosv8|{st^P_)}9LJoBQ&ox$O znazI*mN0Lj0|-m~e$u81@~8s%;8{4ROFbZ~O!}+eP4JrKg-Y1t+MB*={mKJ{$e(Oy zLf^?D9KZtHgNX1+*L#UpAPu{7h{I^VixPs3{2l2f;>Qo*N`}u9AhRE;d|-@f~5f%IdjpDad@l*4F2>*E_ID`_!3o6VXpb!%e4wG7J zq~Jeg>S!JX=K&dX77*w0xep2Rd<;u0Pabq;52793Qd5Cg`$JJO4Sd)*yV7~8Wc@I* z)g(251fZruMN1-uyvI6LQaE!~C`pipHVF>cQHmpyNcku1!2@X$@gK`+l<-Czy@{in zLs`->M3W9K%qnoqe7P`38tw!FQnf^48;i%_D*r34NnynPa!@XifhUxK9Eu7ziatD0 zE^vV-NN~&zZw#X!C-&XA4Xw39#%k!$h*$s&c7nr#&$VP}7!xUJz#OtrUu&W`Q(@l{ zN+UTjy+!y|c(_UVUvffCQomw~2Ng0I**RW6O3Fs$Z0+-6TO9WQ5*zNuI(6aS#8kZ) zt6`%o?0(f$mQoJV%4m5cabYfyXI=y=5%}tX09Zv!Xna9V8 zRoE$~JMLBe(F`0+Ab{;8O6$GY8a{2wkqjW0!ug57CNQ!L}IwkP4#=mcw;8Z1szpph3sj^_@@m>svM;IiE(T=w+jl? z4OzdI;opftYAO`oN`gY!xIh*Io)y6 z7JTyG`dB5^g8(I1Cna)st^IHPdWt2QLB(nps*(Y5^OXyp5&j}WK?hT#9XY~ zE=X+D1LvRi!9SO3=E@cYJfuy*OB+xAmTZeyr4h2(Oznr3o8~F8I*5;p=9-d3XmG0L zl$tuWbq(NP=_s*I>*HVp+)&9h_Cn)*-0Y~j>~*r(G9^+mW?UKsX^yY-WYQ)3V-L;2 zDtXJbNWuSeofgpq(TXnK2^H4m2Yv^saZ&y8pAF+6^Kf;L?5KxxKkw$pl2}yxgSu1_ ztmH;O#VSo_pn~hZcH!&Om8#3g(WjzWQq+dINFcGzkF{>w0&p~B3kyGAEKTWnzFEToTRf>S{dBY_q7e{ndgcqfw#@6X^@*u=3IPr;}L~hts%7&GO<{nIkk7 z@g@J48o(XX{g~?oUR{Wx)TF5Xq%~^z7>%x%=K%u|hoO*dQ#ZE| zDxXlDthLgp&P=C-{1n}56k8eOUCI4eq-!|V3Z;hZs{)k}su_eVS^$M9@~Ih|@>Ecz z?_o%;`I|G9w-D}Bkk;M+&_goHA)RdQn!ql$Re*VuM{Ayk z!sZ}8B}!~=i2S$e+W${ON{wBt!cRKb^dtCmSmE+Pa#Z*L3ax;mo*+u|3lhkIyxLd6 zNznnH`{HRSIX-E)@cFra^Q?+r=>7}tZ-fSLbwt;;XDrL-&F7?_*2_#y;mucvh#y=~ z0z|=kQfPS=F}u2Znr3*~Z(t7N6z?Xb!E%-TAvdS%+KZO)vLD-h%vJEDm^ezKy88)7 zvLKIEl%@H&E(V1r<4N)2Ng+`o-P#)*{QG|b-YDu%t$II(G&lBe6)4S+k`8OLCs>-3 zUux?6`M9(5i}C8C>uP6J;Nzj|^9>lk{JaUZ`?&1?{PLF<=Hrw9Z{1Qr>I%H(&Ur!a_?gTioOl~dZ`Ai9X+}`ivL$V|Cc;7s{ zpEg}qBca;H9sWY}>t6{ylBwm};FWUK_leiA8S90V!bm2=HGC~^ejr;0n!lc!m6U1m zin%u3PETnf2yxi{ogem;wt=Y)U81zp@9J#p`Vea)B2-ddYJ#+};fu81ZMS@-s9kf-Z{!3(DNS~2SUC;%h&`1~icH?vmNi6yG|lIZ;4LX}B~c<|$UDqp z>KfFUKfH+lNV>WxORrK8Go3wL0m&IFpi0|(N(SGVNwAn?@*k5Pt{2o%r~L-_I_iYm z)L(H;?5O~IIccsY?#H0p0S`D$bo@Qo!&kUy;RX1OKLWojeEW$b zMLTN!8gR*FP>!Q4{2IzTlnCjGEL@N_5r|=4e0G_C(xsB&u?VbN-<30se74@=rW}S^ ze5pky)fF<~?T8})g;*yX$1fZcJp#s*x%o%NHg7vu-Q1A_@`r1zTobSzCHGMEHz_bC z_G}~3i=ysO5{$X8qYbQ~W#!2KHoNH!GZ01%vk-vYuN#2#p)ok4$ofnqs|xd#i#jlz zC6Ed8O?V8o*yeI0eGvb6&J?30%|0|%J?b=@-JQI(o&cWl=B0hKGy>&DYX9E0m@Q|* z-{FkS9v|MKtla6%(}$SM!U^LB?y%Qj=<=yGtju4f!E5SD?&&TSBDT48L zFcu>G_ow6$Mu;b=fNjyzq@pv6>jR~e{Z+@{2I;m(EFl4G1C<{}yM)q4J|CC+2C0pS zet>C~+~>MqZr?+8W@);eZz(q}PwX!~0>cz{@IxsZuJED*)a#Py8|KnOBbvG3)MvmQ z6H|&YQFKf~w~0yN5ouZI&(}}%Dsk#!w)dlq4}wqPK8hz{q!B)bhFW4??jtL|HGe}v zOK;7oyV3AiFfuv*3x#~@HzATZZ~n{gf^bIeI98pg z#-cW$!y+*Cry4<81$(*k5d04h_X#7DNuzaTPnwhHq%)5S#5<0kH0TlIizt9lVc&^r zY0ThA(V+Ad$cs^FLMQ<(ZEUg`pIXXmfMB0z4wCGb^PoK6cz)+dOb=7dKH5Z;{X8U3 zOqQUqsQOCrNF%YFO*BfhlQDI}|ao0X_JFMnc$&~Vb!MwJH*LUX0=x%EX7G{Lh5KO@;DW1h^%ysoxZ(__KZ zq$M~~v_j%#%8XqLtCbgt=eMdS`k#u+eInXo#^(y&D@|A-)#LW9x>{hr4kyQp|5UF~ z8Map1%#9S=#^3Uv@`3X|bDKbN45eyNqd{|%S@U%#&v+9aq-eE;>c?z$EzJuVBjnR~ zerK&{45;I;%r3y39!`(dsz%x;FHVM*qa{vUJ}fPmI2#hA$+P(7$$)J6JVl39gPzWopj$O&tUmJKNW#9ROiD1hw%E}%xIf8(z<1P? zv*Xz=kM{A&vphoBFEuG1cRfcFkE4+jm#g-zk(*4~(ZF$k_9K=)P7@gmB$rcio-aKu zv%z?i*?4x_ob2ml^wBysx>3#|NaRz{|2i$web}y6zQ_h_$(Yh2jjMrQ1^httN@=?z3|9-`NICsL1 z_>|x>B62zh;@!iu&wZNoUOmPH`k1M_!BvJ}yHv#2jlY^CyE@nG&%ZT7zpvSpRHz+6 zvHXU+`aJwegnDGT1Ymw3}n$quT2CFLiESc1UlH)tg^SdHzT#q&h{ho89%m5gHX0;k z2aT2aFvok&huU)JA&hqVFu!|K#JxIN&i@rj#p=%Xn4Rt?F^C&o#A&%ENN8^oF`%i; zHd5^y{vTB45jg(=wVd}~P~OvAH)8bNm|vfVk>Zn>U;Y4)i2h?+(>0=Aem{T|b2fU# zU8om7T1K`B&s;^{c-jAgV*DRai2ns;96At>ZwcD@wT*J3C3o6MX!IJ4m_4Ld$7NCCV|YY5A|_lBtO83;;YN zL=x;4ila=YU1mIYrjhI6-2~*lk8o)*Y1Gmgkq~s(Y~IF*d^5v3)Qu-1ew7Q$2qt0w zexEDM2ign+8>)*O+EM{&OYLEnnam|IAsoN=TgzaCno1B6m<~oLl@8wgUSSHnm&U#p z;nb4_8r6q)73N8*OfW(UP-LELE|Aad>XuyVmJG`)G>~!HZ!F>(gL*4RBgKZwxJ}kB2g=>SJ;`_De;nrz)Dc z*yVrwqu&PwJQFTIb1#O`wz_DQdj&2#Flu?zt`}fuotSgOPu`b<1wx{Dy4RB3(tbjb z$n>Lywf9SeScJz(zz|}^Cxnwg{+$JKj!AfU)0J&%<~`nixpSrdJFt8%UdMKMWEa;+ zr)ow7bwqHwGFhP6Ap^GanjBRv1G zw55ISpUxrYySn3-ot-?E<;IBD+y!)dJrdg=T#UMIR}n9bEo7XRZI%nm_I-0qIIx_T zBeD8f@IxjlQs&p~$k0Jl9y^;&5=W$)u$=g%ZZdJP6qSu_ zj1Z9l8}*W{8S79pq6rn4*IgOL>awfo@Or`t9%+xJEUdfnEad7nJ96E4dR2p@xtqV| z8i?Jk+{sQW}j5QOM z#AR!wF8B10A8hdPA}Y}2`A3m06nxqhvr%`SnO-J!BFoH0F2zzeskc+Xg~`<$vX}#0 z)74Lb6Gj;#8y94VLGO~Tu)c~Mve28hv+pS;t*dvoc0{^`>Hpv_JSs$jY#J=C!mAUW z(=Ah5wp;(r4ltEVEwt*Ev@2LQwZQ^Gh*3$+8Af0f@J9p8)UiF zKJ&}ZD}AJTffvvRR~Rztsg=OO%|RZPUt-PQE%2i(PxSG^;-DKN{>3~=76$Af>yUAX zAG@x?mP0r<&fP&#bfeX-a&nvlV_mYVxfZqlf6dL;NXUyKbwOJZaAZ!8`8MKqi6p6a zBt++7wcP$sG(gIP-=%%O0xWc5BqVLbgyTC(G1wus~G6gc>f)#8_uA1s9)hQ)?X!tX~l&3`iPW#dmGX9 zTP=Vzao2NX^p&_0;@LN-L;1$jamTFNxAmSa?ofaNjo> zliL%<1c^T5;Yk?KF1NyZZ5g{J3iGC{d0W1Y_12tqakaMSJ6Bx5x@~TqxCv|nm(8;7 za-3rAh1Z6Aa}jcrbLrB;8X0Zr@}bY^E^BJj`d@$S6CAMp82A(>#ircSv(i79fL-33 zsdSiqb2h%v>x5$=c=QXbnOVf9`MP)9m7IO&;ZOlwzN)ehTfqJs(WzLwd(emHkJYQx z*!|mEI*q4NH#v78blK>3NMdELN;?g)_Vz$Xc(|y9S^T|q5z@Rt)3#mHIr#+o>K;{# zQu@6_Kb%Uia4I{6M6pXe{VL?rwr>F3{o=g?^(TjJp27Lamui?y^BP0Z`Mx14gW20P zeg$FRvLhgVs7+P`}G(`7u^k;KI1#|SSi`3$Xf|`zh;r(S4lo@m^{tH7hgPv_UUPI z5lJHLA;Okb50VFckng={DvsgK$2A9omfFtT>dc<8&|8VFBF zul(rBLTmyK8%+0I59m9ea<}kI@1krc8KdP2V^cirt`lyh-*2@Vv}|_s@o!U8ma7p0 zTd?K|(=cV7@2Du@g4SM!d8&8+X@6Mbk8yrr@^5Tiw42rkxX_tSKF0mQWq2FLjPm|* z`wf-B>*Co3xcjTtf~2;rZpo(}bt1dJ-5#G9tdOX?dF@Tq(RsU z{K4g%pO7uAL+EJd#DX=|;V15Kw2=8WzOKl8=(>-Zj-{XK(Wc|Y4G5=<*Bgf1x=c6? zJRT1C?E9W}na!G${uJ-`hEMtI-?Wcyek$!i@L{w5>O~51!FC*u%fEO1*;K*X)b2-B zwk!v*AU^7LyI@~#e@&U~bcp3OJ$Dqi>2+Cr-bI$EPt)V`sBRF#9H zITlOQ_gQfkXtV9G;6)tUN11vQ7i`=+&c4Jywn$Q<_yr>1oDO8?-w%tJhvBg^@945B z$Q0DT4_1Qqysz%CztnmpH-jdAsT2W*aNKxuqip1HlNaw-79GzDJ=>(#>pUNkU6Mof zr*y*697Ex60SvVVo6}7O_`HyH2Dfsetp!NGUn1`>7K^whn!SH%e22>h;{^puh~yWv zRTlI&P_IZECq=heo!T@fFh4>^EE^Hu;A*iI81q^ogViOyaJJZ42wr_8IVq^NBn5{dzB)u7j4>adefNK=3E-A zZBKo@n4V@TZQ-Q5b%z@f{In^^o4r>~ce|<`wmSNHY|-N9FSVM1kM~U`Z)|%k9@Vah zZ+P$SdTpI7IH{Ngp!q!w1S9|zbH(sX#zz+1*;H*Bg{^CTWyCe}W}bpNzqBX>X{GIUOkol`!hwcsQFgK`=U zGmN$TuLeTE=bw-9hgo|Yk< zSIU{#B^2M(tLY`sib#Mp9cm|rn?m|I8Mn=ZNU=eocW7ibH_!-tH<~!~+Ud=ur$Z(Etw06mJnNW()@_?Oxz>C@SD~e`=3FQVRod zyxh?|%iUb-mJ;B(?=LsSj~W-Z=)>2-xSu|)jm=uAB26pqWmx&nZw7~|*!=!hiFMB7 zwK6d^_I`1AB5OugGI9w zsrOuCZ)kojAGNOzIZoMOW<%QB^5s|&^=+960EZaF6VSSOD91X4<@NfeSI12ogahH3 zMs9N`i0nCQz#WBJS^`n%e0B}O9!l*xwjFhDD69m~nmO3>J~m9zZxlEqJq<5}vr%jP ziM8Ui{Lv;*%8tkGd(gj1XQ}#fZS~Od3K3N|&7rgPvsi*oB&JQ`*YC5}=fCvh9HI4b zbt%V7GqSvl|2)_(bTWT1uV!4&AXfJ7k05b^PHK+446Tbfc5oV>T_*_M{OQPYXZ^L} z{BXPh?Ck%Z-HhP{I<9vSlGE3Y@05}3C&}!Z*jZGsF5g2}#%0f6c39-#<7|u%jdPUC zIWZj!{knI)H-XW`KgG`!&qE1(I7AmYe+m@DV&9)ep1w%Goqy!(bN-23E11a3-(*~u$Hza%YN>(}7iTHz%y1+=XX z<*hw4w6yi#+^|V0I{xaa*J3bkL<-#WVghyit*Qz7r94SX5AEls9<>88$B$P|I@v@T z9PwME#1vg#Ymhmx=-(V%}dV1ol(ra7_1<^G_2MU}R zN#y8#IAYl|QnY{SXQW2oxjPa~b@X)fb=fo2IXTtyx+|KKI|kLNIovdt0wl|tW~SSi3T5FAV`u`WiE?v(e&oY0l#5S9Jg-0%cp*IP*I8* zp)~q5UeN_nr^)+k987=YgJ&2GNmg2^P6!V4g8bQQXS;o#hp1=}Qj5B}x(Z;lQlEc8 z?C2orh$a=O91PX;faiFqmx@wNdKj>?*zcH3Auv;SSdmz`)yTEFnkkd>!uRBlVx&1m zvwn9sn9JZ)^~g5-nxkNdijIL#d&A|AZxx<5qZ}I@w5){8r)F!oWS&#ym$LD=5-)em zyKpV!buL%6Pene{ahWW6iGU?sCkCwga2AC4!&6f?6WI%4hn+=rQ6IeqLsm+&;k2QQ zYh0FUbi0Tk&xsIb8PTclH+Uh357lfpk6Ze0_Ekecv@2k7)?kOUBr%C19OC?_$X@Mw zVb&oAS*up!vkFI_s|)%+H+GlF{*foOdT{rucsMHCw?mrsbPm%h6#*r0zo=;x6Juf% zBR1aR`4XI6NAOZvyhqqnLga6=KPcg{X%3rp^#70;u2kqPFoYorE)osdl9L+;FKysF6ZGEbjPmtum9EN*J$PsiaWv=K8}8z|>jxa?h@jjFsztS+QVensCqsHjIVvk>EarDc-+3{xV@z`Ha)i zu)4;3sw@5WT;oCP{pqbSjIH5wFg_I8G0jA%R``8Ik-MIHn|=abPdxxvR$j7z1mDU0 zrp8JRxdRut;7w2zWmHG(u)m<+;CAB;KMn~DZ!ZIriSWl}U60w`X-1ht^oMQ$P%zLU&+ zQK3aO{3oaUf2FMpQ^b@;@u^JW=Sr@9g3fBa$26!3SyN)MKTF<8?@tOH0*nhhcQeRH zrTPIbNuyAZyZ!zC{cY0sy@oXbl6&eo@PVV5{SRbYqp#DxdS32>t0`{Z^MF03e3E)KF?TteO9J4WSn(D6`d zw|;o*A3b1aHxjZx-c5xvkK}hhOm*ar`{rA6cYZt3`E1DQagPBHJosQnm}-TH94yB( zvF{2yHjRF~4RMy~>PdD!SpmLD+{77HEdsCU2rm6~cCNa5*Kbq}c~uqONs&QgfXMJ6 z=qprSw~Van6BTqmgGJ>o(x1KN%Ug+xiv-YbQn7dd9BZajuiX94fp~*<0$%A!|9(Tk z;9t93DID{mRyt@H#2H~(Y~g4&h3Ybn@1)J`icznLEs%oCoBeg)jvn0c5XW*qjY z$|d;hLbR05^OgmlV?B`1#19TF zQLo^rkfcfEY~S<_;TZ=nd{;Pp&We$7VRSxD_@j74RF5>&JFdiWBI`c5Ocz9qW>Tt$n^dpHP5K9=DCCh27(`114lg)=Es}Oz* zo`O2_i52!zX#db%4L$b6Q)|sm6Jk7tu8Gqb#XP6imOJ%9p zCf-%4x!^Cy(aC?mkyeVilgu7ets1fOD|B73kN4=8(o|E);DfPdceZ^=>M819DZoZ-}Dsm3r*_C~sp!Q}jb#ZghIHj-QSFcI`K{MfdsYZqLy9^25|jLL&fEUjI#aMi2`)m+NSG+-dV+YjDFf zFEfsqw91PFDXXU=8JU`VYh6$Ri;_vV6NQRng|1q5sQ7w>9ZO?Vt8JVA@)rcP^m|3R!$cuHj?lk&?vuubq~Oro zW`{b`j19$=2asnL@JK9bb10lOi&A;Hqv9h`9jOx4*1&K0F6aK8R;ZCm7STmvz0W|C z+56eI^@V@=tE{iFwu7w=EBO}^eEZ+?le44y`%pt{I3MC{^Si8@i~t<-(rA#f0FTjP z1eG44!BwBLJ{xUC2ppgCLMFp{>1j1k2O{}NU_&D^)nNOSfNzI1IYmqmOA@6YC(|%U zH4`;R74MgZ$)n6A=zW2M{GciTc*hDN!q5LSv36%mz z9h>+VdTYmelk`)#RZ551SOClGOr_s%qBs>ZK_kV8>IXh!4i$FxVW1wO<}PEf2x<6t zfy=n@o%t@-qCu+sKgmdB5i>>G8(;z@U^Fa1!jGMxry1-8eCL!18Ky{~Pz&Jix`%x{ zJ^3Kg*mi$^H;VXnp2c3%hHq$pWE*iaMU$SVvm=<*(B!(=QGGE6EC5cAB49c7FjAg= zj~f|IuWGLwc+R1owh`OgNoxKw7-82-Vlt6lc4?%GCz?KNp_ZkP&_(rVyk&y0XGfQ3 z%B)(#E2h=2k%eZyd03V84Ag!8yvtH#?hVsQ<(X53!K1XW&QCv!Oj(VGwrCG8mKIpQDl{F4~%ZImotjR~6ac=+j0+f`Jc zAfG0s4N$NwdtOkkPCq*M!(2|YS_JUoQ7ifxcX)4@6M(OXs6>I{Qz_~0U0D}?Uqwcd zOm2k?Wr{NnL*V$wUKWzVf;T0l4BZE!J7_DQk)MkT3Gk=$wb@0}RbtLK_s!HA!+;b> zqdA|^cdhiCG2bm(={`yqZ6~KtC-buB$AxJM0a;V_Jp{;9KRv`}OZ#PJ4hghc*vCrz9zoD9@Y`R#hCXeq5>?*#@Lk1rw4E=lEU|fs_?v!4wQ?8L%&b?b>d+c+iyi_hkFs$lW9b zgV;#DuuNnf<4QY#PTGX~n~H_5Xp%pTJ!NKR3j&?A1wEH&3pn)PTqLWbdA$Szeh63G zp~vau+WqUwdeDa9`&sCP3AnMX-}UxT6NVlD@r6;#>%MKm)^6JYsw^hY_5K_Sx=kQ52$4!!h~E^6 z{$W-A5Yx01)7am&C7IEYVDfF$%*6ZtZHshGh``75o_c~b7OmORO7Q_4Dd9!8oP!;S z2P`wm0hLM7lF)TH!n7T{U-Wa&7{9pv%{4309%8$*au1-GSj!GrPqo= z60njRxhg*vg?{}LZ1aKUf@g7Kke1g;{J{ZvHr=!7ZDf|Y`4AMr=I!Do$Y8L z&s90z%o$JnVd2z1oGna%T%xVOS(nKo>LvzS7DX=7sJuyA@ZRN%cyAJkWzf>)+h&f| zJJ}=3ZFYiH%@k{yMl)12NkDq?I2FvP;lHXVehLVx#JC-k6T?~LK@HR6r2SdzyTrMPz zVQxkRIGnOmM(-&`RHl>?=*DK?Od>!aaMRAcFqbpdiEoBiQ>bN-(LQn-9GNqMWRk3G7-00GM&n8;{i0s#?pNx|qzj`SCOb zO5od=^@`gpIFCmZ!m!vYhN|R%paXY?{6H^@YmN%3)*#PisyHH{p^+yTvW|P7w-k_q zLWV3oTMPqsg3snSW%>U1ybKu{XKdnTy7YWWzQh|eEf+4p^40a6;T*ZS!X z1tdH>;7Ck}Y_TWPjrD?G7b`-iR{g`h8!*?S3x`*q9y(NphKq0dXY~q41R}2mDv8L{ z2<0}!<@9NJ@_eESBA?D&0EKl4_LrR=mT-z%;`FMGH=N6xLFR-c3!X2d{F;QfRc{3dPAaasw6S<6CJDGc0W33GFs zFU!-kFS15j=8Fh}S_n_^1N@%~ASL6#3l1lh>4yzOItDiV!3L zk2b$tShnWVCS7Z>w&v!Nh4+kD75<|UN(9U>ANTDE{ioa}%`d&*bt7c8=YAnkoE1bS zR0X>q36Uxr5nHIH(c!~ZIc7(QJId@>Fx*^b3e}?2y%W~Rde6_K(cXp*pmv&<8R-Y; zHB{&+m?2bgzaG`1gvmBxdZZ&siV)j?Fj+lA^*CV_YWw{kvT!a-Ufn4+4Sq;RY*rtG1Ceo1^&x)V+Eu#YJv9Yx&yT)Rj(~dWXZl)|#EcwVqeVOyidMKIyZVTp~pekX~%?IYK^3?4*E ziaH^Q&G4F4VBf$`FCFWsl6TetLufB`)G`oU-eyU3FeIH`K@=UKNjf!TYfv2vhnW%) zeZ#JDq1%W-otztf@UId@Gf$Lk_IOuB^5%w^UP`-|4Y#3PF_At^S2h75ed*girzDXkhnTqCm810v->#sQq*z7cPkicG?MG)MysMda?6u z{`TGaaXh2r*aE(YG-ZKO#80$%*<>m=ZPfO(rIVQmod-b{)it#;Yghm)^{sM~A`xgE zf{B7BIc-cU1JsWMWrUt2 z_bcJ~e=Ui9V_e^Ge{xxUol~NBk@BbA)Kw~RLbvq5b)IWG=mpLc2yzFrsPKMlCD*tw z9A``f7F{Ny3MLcsfqn5fUNruPjrD!rO?;~wuAw4L@E__g&hhD`X8_aqtzv{zQBP&K z!fUf*ytmVC90RSPOUmGrgUV1<3&)YDK7KkV7&T+bM3(!bIU6t%5!aW9`^p-~J=CIN z^*6Msljd_pVA5t;z=|3MsdxoVCK1vwYOIlaiBU3UzOj{%UDqE{0bMxTdt~Z7@c$Kd z-BC?!UpG|gAVmyFFG@m_8j2F>5Rgu2Qk0GqsY(k~dXWGkMQV^DA|MI`5K%F7f>M+w zASeg~kroj74f>w%>096WZZdz|m9x(|b7xj&-&uE`YiW1MWXy({rmVH$6~M&QpKbUc z-OVRbE&{V~#q|nf7R?Ew@*4#f`#1x)sBv^O3mL;*iah(~^+XdV1+s>3rniJh^QC|A z@0RTOoKi2&3Bg@PeH5*7A|4Wx90Lsf6WJg~75Bq|b#hIjE5AN74Sc#`^i^X}i1VS* z*V`}4Ig!ox8b9U=oF&erx{QgQsk6JB^b6F2vUv+)I|e7eHI&%S=7+ ztdNPN@0S@TvlGw)T5CfbDKcWgr-3O)VthUB%!OBPUrK6kYo|$TGQ>m*#_4Wq1gGu%yszN)A;NU7|cCn~ya!*D)mMW8|?yH_LSLe)qP(Cl0+uD+9RfQ%+PMhi%GqCCk zzGCM$@7JnkwPa>GwjpR@t(B^9avR$;ou7@`h{x;pqE&4^fL`2{t=rk$qHT~Y6l_gr zBB7G=v-=jCUC-n={NajfH(x__{xH|6DtdPvs~9t)^id52kiQDP-o>=5gRz;yZ(BeVFu zlw^QGwNO!!>6FkPQ~QkfFTwd?U1p{%gWZ9-fmmX^)D`Dt>u;oUCNffQOV}OteY?~O z*f}W6=7wqAIu$bgDKlc_PbuKB$VaSEX{O0_wp ztwgLKb;s^8jcvT$LB;H~OGuc8+S%f6*xhw#+9Omu8uc72JK|fZo=R##oA`t3w*(J& zx}lR8A$x6A5_jyBnBv$ad!wGD4rcwnZy#zJ7^iF*C605XQInX)-Y7HxUu4z`u4u>R zs#`3araSI-hVJcV>7fUzqzS$tG&@WYJR}Px1W%>PuJ9dRLYNu9*Y!Ya7JPvVS1U_m!2P`|UHb%C@~wO?0*BBPVf&Q=7MXP7Uag`3z5VB(VMIdftabK5cplhwmY zB5p7l_fRZErheb5DvQP2LGB`(Nj|yAg0`-R>QR@g+RoDmvxj!noB>N=3@E9?7dwUip4`Bds@yhyC{MelDUJO>c&}dJA%KE_w{?xv9|2(0oBcJNPMqdJHEs6;SPgarRqi&|88XX_~mkq_wAK`Jn>_A#Cg+UKG?rsjL@<(?*@3;NTxKnWa<`gIgek1IXUn!GQ}w;Q zADZ`tY_C$(f*J1S$e?xAr{DxOr+J%4epN!CdY-K_rH^NCMC0vEOTAG>uP`f57_(*q zYKRL7NKc8y*G@|Lu`1l`cD3%~_*LBuWxE26lTxK;$0>+%FUwfCv+JhlJS0nQ3TD=( zmuRjzAiAIAR|~h_R8M8_U7Lbq=lEUJrRU<#>a{(fgH8!8yP4OO{N7t?Fv$^4n=x~OYgw-xK{mpS zEgBi{0%|z6QEPkslmB~?rWR=Y%0n%fnJVH|mMk&E?51p|*&+c^5$mkluEr_n>OJDh zrZvaI5&PC~8c!uWKflv*KT{=1MnIQhJKj^#6yjMXsZ1kti*pD?vQYP#s;ZJXmy-Hn zAM^JZ;l~PGw09_T9=RZAM^`z-j7ut^Nc#K@T(wR4PMG(j@?{xrA|)eyS2x)$(WBMq z9s(`F$S=4;0=D&)(mNCQbosu0n0%;led99_R;YmImV2g-K)Ehc)=*cNx1<7>dG8q2 z<){M8SaX)F)!Rjsz)~7zZPBYu-MMrPqBDu&@d5NTZ%-LO6+&ux-zRQnHZ)|;73O`Z z26l*1*(k4t)tWY1hD4i}55V!coe)U0l0fBXqh<|5+r*grR;mDDmfVX{3*&Dr_ts1H z5U#9+L%{3nSn~ST;l#B}CHFB(GwOiRr{O9}T*3m%8>nk@C$$dk;SHa6K1$a^RSILG zYNMq4*#XQV2x`guzTpDI=@SQHy=cq44 z+R)cLsRPKt{a2hdDA<(d#PrP5?(ZWbcWP>JCMl^0z-Fs%yY2+*q0fF3JXNW6I*yst z*5e}UEP^PF18J<#G|GqHVc||x@AME78_`#*4&}25ub!~>HzIRt7&LH#f&-=J<6Q!5 zat~U#f(h1Hy}(M-e*56B9*Uux59T)JTM7LJ`};7J2Ar>V`-jE}OIq!?SH$M4y9Qa~ z%>nHa)P;vOb5wD8PtQZF93d8L{a#zBLDP`x2dKL5k}oGJ!$Ypexb<&3ET|JU#WBWf zGdlS>h`Mispx1EPYpH2+`p-GlCVC%7f%nx-_HA3=5W(s{0!Hl zn0F3f+pWA^U`eVpH6s%jIl9D;@0J$=E##%BaH%nC>8Dk3@xCQ|ImTH}ld?iXc=t9g z@ILcEZb+6L=f=cPoGo7Qned)^`ehib%7h?O_qck3Wc}M00bj**6$U}(gmtdxqG@9c zrI6#;BG{Yg#&}zfQI1M?!H;t;8t#O7_CwO&H5D_&n)l(PAdm)nR*VJJ@0AB=ho)4``%9E!flc$Q9vP{Vd33fu&4S+?0qNxLk9!p#et z82tkB%wr*wv|~4XCij9?V-*L7TSZ$52FSt(jRO6j`UnrUwca(#JKXA0G_v&`{oWV2 z9jAVq0A-VJaCyB{CjSw*pSii3AqkWIQ_yqc4Z4@x@R-E&<^kslgjc(JTaD4r-lRah zp9`kk<~*przwrdN`29q*bm)L7ceY}4v$2X!9o7+SQk_OHEp#;>zQ-xXi?N zq+f%+F3Kw#7avwUx3&ohuvSdj)V=*QPvqHja!F6UMRn^g(jfXPDls5Bv05fMPixwA z^Zcdo{XM5^3-t2sCJVlo+Pd2&v*c73dwJf{rZtCzVb3wPHE$LAX2pHpXxzDYpVPDz z>9GCHj(8Y61@XhqeQz5ll#CfaUHbk&R#CMG6v;#t$%GqU!;w-L7hNG&<13;?C?K-lXmMpG7#oCa(bTz zB`A$Qf5-JGnR-ZipZfm)i}(X@>@Pq$JhD&y@6J&?uJpg-c}nB=+dNfV30JL`+e4my zUY;G&Rlwh1Rl|~eWS1~RkN`I$DEF(i70_z=5W&CG)N!@d7$paR^ng^3l0Rxcv*=VuljL&)nxr4+ zgI3PtB<;~bTjnYJ!v0=F?BCcrJ)oqR;4f@#E+?so9l9@3j8jIM!kp!?-$|1-XCo-eD=03bf#vH+fb zw4Z18$`Jqw{|E4oN)3>s{sv%iMt_Ea{{#3<)%6=d)CJ9RhyVW+c^%pQOy#}HFUi-R zm+%Kq{ufRD2Nae80{umr{{;Q|Q?vttXwLqYQ&SEw+77->uHFHDPJV_63cxoA!~}eT M$Uz|6yrbU#06UA~WB>pF diff --git a/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/MOOSE_Escort_Test_Follow.lua b/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/MOOSE_Escort_Test_Follow.lua index e6aaa973d..5bcce439c 100644 --- a/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/MOOSE_Escort_Test_Follow.lua +++ b/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/MOOSE_Escort_Test_Follow.lua @@ -1,18 +1,27 @@ Include.File( "Mission" ) Include.File( "Client" ) +Include.File( "Spawn" ) Include.File( "Escort" ) do local function EventAliveHelicopter( Client ) - local EscortGroupHeli = GROUP:NewFromName( "Escort Helicopter" ) - local EscortHeli = ESCORT:New( Client, EscortGroupHeli, "Escort Test Helicopter" ) + local SpawnEscortHeli = SPAWN:New( "Escort Helicopter" ) + local EscortGroupHeli1 = SpawnEscortHeli:Spawn() + local EscortGroupHeli2 = SpawnEscortHeli:Spawn() + local EscortGroupHeli3 = SpawnEscortHeli:Spawn() + local EscortGroupHeli4 = SpawnEscortHeli:Spawn() + local EscortHeli1 = ESCORT:New( Client, EscortGroupHeli1, "Escort Alpha" ) + local EscortHeli2 = ESCORT:New( Client, EscortGroupHeli2, "Escort Bravo" ) + local EscortHeli3 = ESCORT:New( Client, EscortGroupHeli3, "Escort Delta" ) + local EscortHeli4 = ESCORT:New( Client, EscortGroupHeli4, "Escort Gamma" ) end local function EventAlivePlane( Client ) - local EscortGroupPlane = GROUP:NewFromName( "Escort Plane" ) - local EscortPlane = ESCORT:New( EscortClientPlane, EscortGroupPlane, "Escort Test Plane" ) + local SpawnEscortPlane = SPAWN:New( "Escort Plane" ) + local EscortGroupPlane = SpawnEscortPlane:Spawn() + local EscortPlane = ESCORT:New( Client, EscortGroupPlane, "Escort Test Plane" ) end local EscortClientHeli = CLIENT:New( "Lead Helicopter", "Fly around and observe the behaviour of the escort helicopter" ):Alive( EventAliveHelicopter ) diff --git a/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/dictionary b/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/dictionary index a731c15a0..50ee177b8 100644 --- a/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/dictionary +++ b/Test Missions/miz/MOOSE_Escort_Test_Follow/l10n/DEFAULT/dictionary @@ -3,23 +3,31 @@ dictionary = ["DictKey_GroupName_19"] = "Escort Plane", ["DictKey_WptName_11"] = "", ["DictKey_UnitName_20"] = "Escort Plane", - ["DictKey_GroupName_15"] = "Lead Plane", + ["DictKey_GroupName_12"] = "Escort Helicopter", + ["DictKey_WptName_30"] = "", ["DictKey_sortie_4"] = "", + ["DictKey_WptName_28"] = "", + ["DictKey_WptName_14"] = "", + ["DictKey_WptName_29"] = "", ["DictKey_WptName_23"] = "", + ["DictKey_GroupName_15"] = "Lead Plane", ["DictKey_descriptionRedTask_2"] = "", - ["DictKey_descriptionBlueTask_3"] = "", ["DictKey_GroupName_9"] = "Lead Helicopter", + ["DictKey_GroupName_31"] = "Test Attack", ["DictKey_descriptionText_1"] = "", - ["DictKey_UnitName_10"] = "Lead Helicopter", + ["DictKey_UnitName_13"] = "Escort Helicopter", + ["DictKey_UnitName_32"] = "Unit #1", + ["DictKey_WptName_21"] = "", + ["DictKey_descriptionBlueTask_3"] = "", ["DictKey_WptName_22"] = "", ["DictKey_WptName_18"] = "", - ["DictKey_WptName_14"] = "", + ["DictKey_UnitName_10"] = "Lead Helicopter", ["DictKey_WptName_17"] = "", - ["DictKey_UnitName_13"] = "Escort Helicopter", + ["DictKey_WptName_33"] = "", ["DictKey_WptName_26"] = "", ["DictKey_WptName_25"] = "", ["DictKey_UnitName_16"] = "Lead Plane", - ["DictKey_WptName_21"] = "", ["DictKey_WptName_24"] = "", - ["DictKey_GroupName_12"] = "Escort Helicopter", + ["DictKey_WptName_34"] = "", + ["DictKey_WptName_27"] = "", } -- end of dictionary diff --git a/Test Missions/miz/MOOSE_Escort_Test_Follow/mission b/Test Missions/miz/MOOSE_Escort_Test_Follow/mission index 6c1f6e2bf..25ec48b82 100644 --- a/Test Missions/miz/MOOSE_Escort_Test_Follow/mission +++ b/Test Missions/miz/MOOSE_Escort_Test_Follow/mission @@ -83,7 +83,7 @@ mission = }, -- end of ["func"] }, -- end of ["red"] }, -- end of ["result"] - ["maxDictId"] = 26, + ["maxDictId"] = 34, ["groundControl"] = { ["isPilotControlVehicles"] = false, @@ -222,9 +222,9 @@ mission = }, -- end of ["needModules"] ["map"] = { - ["centerY"] = 633185.71428572, - ["zoom"] = 50000, - ["centerX"] = -286145.14285714, + ["centerY"] = 649668.57142857, + ["zoom"] = 100000, + ["centerX"] = -285813.71428571, }, -- end of ["map"] ["coalitions"] = { @@ -302,7 +302,6 @@ mission = { }, -- end of ["rules"] ["eventlist"] = "", - ["predicate"] = "triggerOnce", ["actions"] = { [1] = @@ -316,6 +315,7 @@ mission = }, -- end of ["ai_task"] }, -- end of [1] }, -- end of ["actions"] + ["predicate"] = "triggerOnce", ["comment"] = "MOOSE Load Method", }, -- end of [1] [2] = @@ -331,7 +331,6 @@ mission = }, -- end of [1] }, -- end of ["rules"] ["eventlist"] = "", - ["predicate"] = "triggerOnce", ["actions"] = { [1] = @@ -345,6 +344,7 @@ mission = }, -- end of ["ai_task"] }, -- end of [1] }, -- end of ["actions"] + ["predicate"] = "triggerOnce", ["comment"] = "MOOSE Load Dynamic", }, -- end of [2] [3] = @@ -360,7 +360,6 @@ mission = }, -- end of [1] }, -- end of ["rules"] ["eventlist"] = "", - ["predicate"] = "triggerOnce", ["actions"] = { [1] = @@ -374,6 +373,7 @@ mission = }, -- end of ["ai_task"] }, -- end of [1] }, -- end of ["actions"] + ["predicate"] = "triggerOnce", ["comment"] = "MOOSE Load Embedded", }, -- end of [3] [4] = @@ -382,7 +382,6 @@ mission = { }, -- end of ["rules"] ["eventlist"] = "", - ["predicate"] = "triggerOnce", ["actions"] = { [1] = @@ -396,6 +395,7 @@ mission = }, -- end of ["ai_task"] }, -- end of [1] }, -- end of ["actions"] + ["predicate"] = "triggerOnce", ["comment"] = "MOOSE Load Mission", }, -- end of [4] }, -- end of ["trigrules"] @@ -603,7 +603,7 @@ mission = }, -- end of [1] [2] = { - ["lateActivation"] = false, + ["lateActivation"] = true, ["tasks"] = { }, -- end of ["tasks"] @@ -612,7 +612,7 @@ mission = ["uncontrolled"] = false, ["route"] = { - ["routeRelativeTOT"] = false, + ["routeRelativeTOT"] = true, ["points"] = { [1] = @@ -643,24 +643,6 @@ mission = { ["tasks"] = { - [1] = - { - ["number"] = 1, - ["key"] = "CAS", - ["id"] = "EngageTargets", - ["enabled"] = true, - ["auto"] = true, - ["params"] = - { - ["targetTypes"] = - { - [1] = "Helicopters", - [2] = "Ground Units", - [3] = "Light armed ships", - }, -- end of ["targetTypes"] - ["priority"] = 0, - }, -- end of ["params"] - }, -- end of [1] }, -- end of ["tasks"] }, -- end of ["params"] }, -- end of ["task"] @@ -681,9 +663,9 @@ mission = ["vangle"] = 0, ["steer"] = 2, }, -- end of ["properties"] - ["ETA"] = 23.784032372968, - ["y"] = 631664.28571429, - ["x"] = -285595.14285714, + ["ETA"] = 48.824518671544, + ["y"] = 634468.57142857, + ["x"] = -283642.28571428, ["name"] = "DictKey_WptName_22", ["speed"] = 138.88888888889, ["ETA_locked"] = false, @@ -714,13 +696,66 @@ mission = ["vangle"] = 0, ["steer"] = 2, }, -- end of ["properties"] - ["ETA"] = 37.530380607896, - ["y"] = 633007.14285715, - ["x"] = -284238, + ["ETA"] = 231.0526539667, + ["y"] = 659754.28571428, + ["x"] = -284642.28571428, ["name"] = "DictKey_WptName_23", ["speed"] = 138.88888888889, ["ETA_locked"] = false, ["task"] = + { + ["id"] = "ComboTask", + ["params"] = + { + ["tasks"] = + { + [1] = + { + ["number"] = 1, + ["auto"] = false, + ["id"] = "WrappedAction", + ["enabled"] = true, + ["params"] = + { + ["action"] = + { + ["id"] = "SwitchWaypoint", + ["params"] = + { + ["goToWaypointIndex"] = 2, + ["fromWaypointIndex"] = 3, + }, -- end of ["params"] + }, -- end of ["action"] + }, -- end of ["params"] + }, -- end of [1] + }, -- end of ["tasks"] + }, -- end of ["params"] + }, -- end of ["task"] + ["speed_locked"] = true, + }, -- end of [3] + [4] = + { + ["alt"] = 13, + ["type"] = "Land", + ["action"] = "Landing", + ["alt_type"] = "BARO", + ["formation_template"] = "", + ["properties"] = + { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + }, -- end of ["properties"] + ["ETA"] = 322.67941016458, + ["airdromeId"] = 23, + ["y"] = 647369.87369832, + ["x"] = -281713.83114196, + ["name"] = "DictKey_WptName_34", + ["speed"] = 138.88888888889, + ["ETA_locked"] = false, + ["task"] = { ["id"] = "ComboTask", ["params"] = @@ -731,7 +766,7 @@ mission = }, -- end of ["params"] }, -- end of ["task"] ["speed_locked"] = true, - }, -- end of [3] + }, -- end of [4] }, -- end of ["points"] }, -- end of ["route"] ["groupId"] = 4, @@ -747,7 +782,7 @@ mission = ["speed"] = 138.88888888889, ["type"] = "Su-25T", ["unitId"] = 4, - ["psi"] = -1.1260144038135, + ["psi"] = -1.0438895175357, ["y"] = 628607.14285715, ["x"] = -287052.28571429, ["name"] = "DictKey_UnitName_20", @@ -761,7 +796,7 @@ mission = ["chaff"] = 128, ["gun"] = 100, }, -- end of ["payload"] - ["heading"] = 1.1260144038135, + ["heading"] = 1.0438895175357, ["callsign"] = { [1] = 1, @@ -870,10 +905,10 @@ mission = ["steer"] = 2, }, -- end of ["properties"] ["ETA"] = 0, - ["y"] = 630514.28571429, - ["x"] = -283495.14285714, + ["y"] = 628382.85714286, + ["x"] = -290099.42857143, ["name"] = "DictKey_WptName_11", - ["speed"] = 55.555555555556, + ["speed"] = 27.777777777778, ["ETA_locked"] = true, ["task"] = { @@ -920,9 +955,9 @@ mission = ["vangle"] = 0, ["steer"] = 2, }, -- end of ["properties"] - ["ETA"] = 33.043857683573, - ["y"] = 630528.57142858, - ["x"] = -281659.42857143, + ["ETA"] = 243.18972185585, + ["y"] = 641840, + ["x"] = -288899.42857143, ["name"] = "DictKey_WptName_26", ["speed"] = 55.555555555556, ["ETA_locked"] = false, @@ -951,7 +986,7 @@ mission = ["livery_id"] = "us army", ["skill"] = "Client", ["ropeLength"] = 15, - ["speed"] = 55.555555555556, + ["speed"] = 27.777777777778, ["type"] = "Ka-50", ["Radio"] = { @@ -975,12 +1010,12 @@ mission = { ["channels"] = { - [15] = 0.995, + [4] = 0.591, [13] = 0.583, [7] = 0.443, - [14] = 0.283, + [1] = 0.625, [2] = 0.303, - [4] = 0.591, + [15] = 0.995, [8] = 0.215, [16] = 1.21, [9] = 0.525, @@ -990,14 +1025,14 @@ mission = [11] = 0.718, [6] = 0.803, [12] = 0.35, - [1] = 0.625, + [14] = 0.283, }, -- end of ["channels"] }, -- end of [2] }, -- end of ["Radio"] ["unitId"] = 1, - ["psi"] = -0.0077819440762977, - ["y"] = 630514.28571429, - ["x"] = -283495.14285714, + ["psi"] = -1.481859585505, + ["y"] = 628382.85714286, + ["x"] = -290099.42857143, ["name"] = "DictKey_UnitName_10", ["payload"] = { @@ -1009,7 +1044,7 @@ mission = ["chaff"] = 0, ["gun"] = 100, }, -- end of ["payload"] - ["heading"] = 0.0077819440762977, + ["heading"] = 1.481859585505, ["callsign"] = { [1] = 1, @@ -1020,8 +1055,8 @@ mission = ["onboard_num"] = "050", }, -- end of [1] }, -- end of ["units"] - ["y"] = 630514.28571429, - ["x"] = -283495.14285714, + ["y"] = 628382.85714286, + ["x"] = -290099.42857143, ["name"] = "DictKey_GroupName_9", ["communication"] = true, ["start_time"] = 0, @@ -1029,7 +1064,7 @@ mission = }, -- end of [1] [2] = { - ["lateActivation"] = false, + ["lateActivation"] = true, ["tasks"] = { }, -- end of ["tasks"] @@ -1038,7 +1073,7 @@ mission = ["uncontrolled"] = false, ["route"] = { - ["routeRelativeTOT"] = false, + ["routeRelativeTOT"] = true, ["points"] = { [1] = @@ -1057,8 +1092,8 @@ mission = ["steer"] = 2, }, -- end of ["properties"] ["ETA"] = 0, - ["y"] = 630514.28571429, - ["x"] = -283788, + ["y"] = 630782.85714286, + ["x"] = -290756.57142857, ["name"] = "DictKey_WptName_14", ["speed"] = 55.555555555556, ["ETA_locked"] = true, @@ -1069,24 +1104,6 @@ mission = { ["tasks"] = { - [1] = - { - ["number"] = 1, - ["key"] = "CAS", - ["id"] = "EngageTargets", - ["enabled"] = true, - ["auto"] = true, - ["params"] = - { - ["targetTypes"] = - { - [1] = "Helicopters", - [2] = "Ground Units", - [3] = "Light armed ships", - }, -- end of ["targetTypes"] - ["priority"] = 0, - }, -- end of ["params"] - }, -- end of [1] }, -- end of ["tasks"] }, -- end of ["params"] }, -- end of ["task"] @@ -1107,11 +1124,115 @@ mission = ["vangle"] = 0, ["steer"] = 2, }, -- end of ["properties"] - ["ETA"] = 23.658540331395, - ["y"] = 630528.57142858, - ["x"] = -282473.71428571, + ["ETA"] = 73.425880995736, + ["y"] = 631182.85714286, + ["x"] = -292756.57142857, ["name"] = "DictKey_WptName_25", - ["speed"] = 55.555555555556, + ["speed"] = 27.777777777778, + ["ETA_locked"] = false, + ["task"] = + { + ["id"] = "ComboTask", + ["params"] = + { + ["tasks"] = + { + [1] = + { + ["enabled"] = true, + ["auto"] = false, + ["id"] = "WrappedAction", + ["number"] = 1, + ["params"] = + { + ["action"] = + { + ["id"] = "Script", + ["params"] = + { + ["command"] = "local DCSGroup = GROUP.FindGroup( ... )\ +DCSGroup:RegisterWayPoint ( 2 )", + }, -- end of ["params"] + }, -- end of ["action"] + }, -- end of ["params"] + }, -- end of [1] + }, -- end of ["tasks"] + }, -- end of ["params"] + }, -- end of ["task"] + ["speed_locked"] = true, + }, -- end of [2] + [3] = + { + ["alt"] = 500, + ["type"] = "Turning Point", + ["action"] = "Turning Point", + ["alt_type"] = "BARO", + ["formation_template"] = "", + ["properties"] = + { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + }, -- end of ["properties"] + ["ETA"] = 138.35636187296, + ["y"] = 632354.28571429, + ["x"] = -294128, + ["name"] = "DictKey_WptName_27", + ["speed"] = 27.777777777778, + ["ETA_locked"] = false, + ["task"] = + { + ["id"] = "ComboTask", + ["params"] = + { + ["tasks"] = + { + [1] = + { + ["enabled"] = true, + ["auto"] = false, + ["id"] = "WrappedAction", + ["number"] = 1, + ["params"] = + { + ["action"] = + { + ["id"] = "Script", + ["params"] = + { + ["command"] = "local DCSGroup = GROUP.FindGroup( ... )\ +DCSGroup:RegisterWayPoint ( 3 )", + }, -- end of ["params"] + }, -- end of ["action"] + }, -- end of ["params"] + }, -- end of [1] + }, -- end of ["tasks"] + }, -- end of ["params"] + }, -- end of ["task"] + ["speed_locked"] = true, + }, -- end of [3] + [4] = + { + ["alt"] = 500, + ["type"] = "Turning Point", + ["action"] = "Turning Point", + ["alt_type"] = "BARO", + ["formation_template"] = "", + ["properties"] = + { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + }, -- end of ["properties"] + ["ETA"] = 338.52413460414, + ["y"] = 635240, + ["x"] = -294699.42857143, + ["name"] = "DictKey_WptName_28", + ["speed"] = 27.777777777778, ["ETA_locked"] = false, ["task"] = { @@ -1124,7 +1245,91 @@ mission = }, -- end of ["params"] }, -- end of ["task"] ["speed_locked"] = true, - }, -- end of [2] + }, -- end of [4] + [5] = + { + ["alt"] = 500, + ["type"] = "Turning Point", + ["action"] = "Turning Point", + ["alt_type"] = "BARO", + ["formation_template"] = "", + ["properties"] = + { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + }, -- end of ["properties"] + ["ETA"] = 513.40850223263, + ["y"] = 640097.14285714, + ["x"] = -294613.71428571, + ["name"] = "DictKey_WptName_29", + ["speed"] = 27.777777777778, + ["ETA_locked"] = false, + ["task"] = + { + ["id"] = "ComboTask", + ["params"] = + { + ["tasks"] = + { + [1] = + { + ["enabled"] = true, + ["auto"] = false, + ["id"] = "EngageTargetsInZone", + ["number"] = 1, + ["params"] = + { + ["targetTypes"] = + { + [1] = "Ground Units", + }, -- end of ["targetTypes"] + ["x"] = -288242.28571428, + ["priority"] = 0, + ["y"] = 641982.85714286, + ["zoneRadius"] = 5000, + }, -- end of ["params"] + }, -- end of [1] + }, -- end of ["tasks"] + }, -- end of ["params"] + }, -- end of ["task"] + ["speed_locked"] = true, + }, -- end of [5] + [6] = + { + ["alt"] = 500, + ["type"] = "Turning Point", + ["action"] = "Turning Point", + ["alt_type"] = "BARO", + ["formation_template"] = "", + ["properties"] = + { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + }, -- end of ["properties"] + ["ETA"] = 467.11155297145, + ["y"] = 642132.85714286, + ["x"] = -281992.28571428, + ["name"] = "DictKey_WptName_30", + ["speed"] = 27.777777777778, + ["ETA_locked"] = false, + ["task"] = + { + ["id"] = "ComboTask", + ["params"] = + { + ["tasks"] = + { + }, -- end of ["tasks"] + }, -- end of ["params"] + }, -- end of ["task"] + ["speed_locked"] = true, + }, -- end of [6] }, -- end of ["points"] }, -- end of ["route"] ["groupId"] = 2, @@ -1141,9 +1346,9 @@ mission = ["speed"] = 55.555555555556, ["type"] = "Ka-50", ["unitId"] = 2, - ["psi"] = -0.010869137177245, - ["y"] = 630514.28571429, - ["x"] = -283788, + ["psi"] = -2.9441970937399, + ["y"] = 630782.85714286, + ["x"] = -290756.57142857, ["name"] = "DictKey_UnitName_13", ["payload"] = { @@ -1155,7 +1360,7 @@ mission = ["chaff"] = 0, ["gun"] = 100, }, -- end of ["payload"] - ["heading"] = 0.010869137177245, + ["heading"] = 2.9441970937399, ["callsign"] = { [1] = 2, @@ -1166,8 +1371,8 @@ mission = ["onboard_num"] = "051", }, -- end of [1] }, -- end of ["units"] - ["y"] = 630514.28571429, - ["x"] = -283788, + ["y"] = 630782.85714286, + ["x"] = -290756.57142857, ["name"] = "DictKey_GroupName_12", ["communication"] = true, ["start_time"] = 0, @@ -1225,6 +1430,79 @@ mission = [7] = { ["id"] = 0, + ["vehicle"] = + { + ["group"] = + { + [1] = + { + ["visible"] = false, + ["taskSelected"] = true, + ["route"] = + { + ["spans"] = + { + }, -- end of ["spans"] + ["points"] = + { + [1] = + { + ["alt"] = 9, + ["type"] = "Turning Point", + ["ETA"] = 0, + ["alt_type"] = "BARO", + ["formation_template"] = "", + ["y"] = 641868.57142857, + ["x"] = -288928, + ["name"] = "DictKey_WptName_33", + ["ETA_locked"] = true, + ["speed"] = 5.5555555555556, + ["action"] = "Off Road", + ["task"] = + { + ["id"] = "ComboTask", + ["params"] = + { + ["tasks"] = + { + }, -- end of ["tasks"] + }, -- end of ["params"] + }, -- end of ["task"] + ["speed_locked"] = true, + }, -- end of [1] + }, -- end of ["points"] + }, -- end of ["route"] + ["groupId"] = 5, + ["tasks"] = + { + }, -- end of ["tasks"] + ["hidden"] = false, + ["units"] = + { + [1] = + { + ["type"] = "BTR-80", + ["transportable"] = + { + ["randomTransportable"] = false, + }, -- end of ["transportable"] + ["unitId"] = 5, + ["skill"] = "Average", + ["y"] = 641868.57142857, + ["x"] = -288928, + ["name"] = "DictKey_UnitName_32", + ["playerCanDrive"] = true, + ["heading"] = 0, + }, -- end of [1] + }, -- end of ["units"] + ["y"] = 641868.57142857, + ["x"] = -288928, + ["name"] = "DictKey_GroupName_31", + ["start_time"] = 0, + ["task"] = "Ground Nothing", + }, -- end of [1] + }, -- end of ["group"] + }, -- end of ["vehicle"] ["name"] = "Russia", }, -- end of [7] [8] = @@ -1255,7 +1533,7 @@ mission = ["goals"] = { }, -- end of ["goals"] - ["currentKey"] = 452, + ["currentKey"] = 1192, ["start_time"] = 43200, ["forcedOptions"] = { @@ -1703,15 +1981,15 @@ mission = ["id"] = "sas_yaw_left", ["mm"] = 0, }, -- end of ["sas_yaw_left"] - ["DEFECTIVE_MECHANISM"] = + ["BOMBS_ARMING_NO_VOLATAGE_LEFT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "DEFECTIVE_MECHANISM", + ["id"] = "BOMBS_ARMING_NO_VOLATAGE_LEFT", ["mm"] = 0, - }, -- end of ["DEFECTIVE_MECHANISM"] + }, -- end of ["BOMBS_ARMING_NO_VOLATAGE_LEFT"] ["PITOT_HEAT_ELEMENT"] = { ["hh"] = 0, @@ -1810,15 +2088,15 @@ mission = ["id"] = "asc_p", ["mm"] = 0, }, -- end of ["asc_p"] - ["sas_pitch_left"] = + ["COOLANT_SHORT_CIRCUIT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "sas_pitch_left", + ["id"] = "COOLANT_SHORT_CIRCUIT", ["mm"] = 0, - }, -- end of ["sas_pitch_left"] + }, -- end of ["COOLANT_SHORT_CIRCUIT"] ["GUN_LEFT_IN_AMMUN_FAULT"] = { ["hh"] = 0, @@ -1882,24 +2160,24 @@ mission = ["id"] = "ecm", ["mm"] = 0, }, -- end of ["ecm"] - ["TGP_FAILURE_RIGHT"] = + ["CLOCK_FAILURE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TGP_FAILURE_RIGHT", + ["id"] = "CLOCK_FAILURE", ["mm"] = 0, - }, -- end of ["TGP_FAILURE_RIGHT"] - ["BOMBS_ARMING_BROKEN_WIRING_LEFT"] = + }, -- end of ["CLOCK_FAILURE"] + ["TURNIND_INCORRECT_SENS_VAC_HIGH"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "BOMBS_ARMING_BROKEN_WIRING_LEFT", + ["id"] = "TURNIND_INCORRECT_SENS_VAC_HIGH", ["mm"] = 0, - }, -- end of ["BOMBS_ARMING_BROKEN_WIRING_LEFT"] + }, -- end of ["TURNIND_INCORRECT_SENS_VAC_HIGH"] ["OIL_RADIATOR_WIRING"] = { ["hh"] = 0, @@ -1936,15 +2214,15 @@ mission = ["id"] = "PILOT_KILLED_FAILURE", ["mm"] = 0, }, -- end of ["PILOT_KILLED_FAILURE"] - ["GUN_LEFT_CENTER_MOUNT_LOOSE"] = + ["BOMBS_ARMING_BROKEN_WIRING_RIGHT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_LEFT_CENTER_MOUNT_LOOSE", + ["id"] = "BOMBS_ARMING_BROKEN_WIRING_RIGHT", ["mm"] = 0, - }, -- end of ["GUN_LEFT_CENTER_MOUNT_LOOSE"] + }, -- end of ["BOMBS_ARMING_BROKEN_WIRING_RIGHT"] ["VHF_VT_BURNED_OUT"] = { ["hh"] = 0, @@ -1990,15 +2268,15 @@ mission = ["id"] = "GUN_LEFT_CENTER_BARREL_WORN", ["mm"] = 0, }, -- end of ["GUN_LEFT_CENTER_BARREL_WORN"] - ["TURNIND_POINTER_VIBRATES"] = + ["abris_software"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TURNIND_POINTER_VIBRATES", + ["id"] = "abris_software", ["mm"] = 0, - }, -- end of ["TURNIND_POINTER_VIBRATES"] + }, -- end of ["abris_software"] ["GUN_FAIL_LEFT_OUT_GUN"] = { ["hh"] = 0, @@ -2008,15 +2286,15 @@ mission = ["id"] = "GUN_FAIL_LEFT_OUT_GUN", ["mm"] = 0, }, -- end of ["GUN_FAIL_LEFT_OUT_GUN"] - ["SAR_1_101"] = + ["PUMP_FAILS"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "SAR_1_101", + ["id"] = "PUMP_FAILS", ["mm"] = 0, - }, -- end of ["SAR_1_101"] + }, -- end of ["PUMP_FAILS"] ["ROCKETS_INTERVALOMETER_WIRING"] = { ["hh"] = 0, @@ -2026,15 +2304,15 @@ mission = ["id"] = "ROCKETS_INTERVALOMETER_WIRING", ["mm"] = 0, }, -- end of ["ROCKETS_INTERVALOMETER_WIRING"] - ["GUN_RIGHT_OUT_AMMUN_FAULT"] = + ["MainReductor_LowOilPressure"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_RIGHT_OUT_AMMUN_FAULT", + ["id"] = "MainReductor_LowOilPressure", ["mm"] = 0, - }, -- end of ["GUN_RIGHT_OUT_AMMUN_FAULT"] + }, -- end of ["MainReductor_LowOilPressure"] ["GUN_RIGHT_IN_AMMUN_FAULT"] = { ["hh"] = 0, @@ -2071,15 +2349,15 @@ mission = ["id"] = "BOMBS_RUST_LEFT", ["mm"] = 0, }, -- end of ["BOMBS_RUST_LEFT"] - ["GUN_RIGHT_CENTER_BARREL_WORN"] = + ["ARN_83_ADF_DAMAGE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_RIGHT_CENTER_BARREL_WORN", + ["id"] = "ARN_83_ADF_DAMAGE", ["mm"] = 0, - }, -- end of ["GUN_RIGHT_CENTER_BARREL_WORN"] + }, -- end of ["ARN_83_ADF_DAMAGE"] ["asc"] = { ["hh"] = 0, @@ -2619,15 +2897,15 @@ mission = ["id"] = "AN_ALE_40V_FAILURE_CONTAINER_RIGHT_WING", ["mm"] = 0, }, -- end of ["AN_ALE_40V_FAILURE_CONTAINER_RIGHT_WING"] - ["GUN_LEFT_CENTER_OPEN_CIRCUIT"] = + ["TACH_POOR_CONNECTION"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_LEFT_CENTER_OPEN_CIRCUIT", + ["id"] = "TACH_POOR_CONNECTION", ["mm"] = 0, - }, -- end of ["GUN_LEFT_CENTER_OPEN_CIRCUIT"] + }, -- end of ["TACH_POOR_CONNECTION"] ["GUN_RIGHT_IN_MOUNT_LOOSE"] = { ["hh"] = 0, @@ -2835,15 +3113,15 @@ mission = ["id"] = "es_damage_GeneratorLeft", ["mm"] = 0, }, -- end of ["es_damage_GeneratorLeft"] - ["SUPERCHARGER_SOLENOID"] = + ["ILS_FAILURE_ANT_GLIDESLOPE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "SUPERCHARGER_SOLENOID", + ["id"] = "ILS_FAILURE_ANT_GLIDESLOPE", ["mm"] = 0, - }, -- end of ["SUPERCHARGER_SOLENOID"] + }, -- end of ["ILS_FAILURE_ANT_GLIDESLOPE"] ["engine_chip"] = { ["hh"] = 0, @@ -2853,15 +3131,15 @@ mission = ["id"] = "engine_chip", ["mm"] = 0, }, -- end of ["engine_chip"] - ["ARN_83_TOTAL_FAILURE"] = + ["GUN_LEFT_CENTER_AMMUN_FAULT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "ARN_83_TOTAL_FAILURE", + ["id"] = "GUN_LEFT_CENTER_AMMUN_FAULT", ["mm"] = 0, - }, -- end of ["ARN_83_TOTAL_FAILURE"] + }, -- end of ["GUN_LEFT_CENTER_AMMUN_FAULT"] ["CADC_FAILURE_MACH"] = { ["hh"] = 0, @@ -2916,15 +3194,15 @@ mission = ["id"] = "laser_failure", ["mm"] = 0, }, -- end of ["laser_failure"] - ["ARN_83_ADF_DAMAGE"] = + ["RADAR_ALTIMETR_RIGHT_ANT_FAILURE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "ARN_83_ADF_DAMAGE", + ["id"] = "RADAR_ALTIMETR_RIGHT_ANT_FAILURE", ["mm"] = 0, - }, -- end of ["ARN_83_ADF_DAMAGE"] + }, -- end of ["RADAR_ALTIMETR_RIGHT_ANT_FAILURE"] ["AN_ALR69V_FAILURE_SENSOR_TAIL_LEFT"] = { ["hh"] = 0, @@ -2934,42 +3212,33 @@ mission = ["id"] = "AN_ALR69V_FAILURE_SENSOR_TAIL_LEFT", ["mm"] = 0, }, -- end of ["AN_ALR69V_FAILURE_SENSOR_TAIL_LEFT"] - ["PUMP_FAILS"] = + ["COMPASS_ERRATIC_OPERATION"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "PUMP_FAILS", + ["id"] = "COMPASS_ERRATIC_OPERATION", ["mm"] = 0, - }, -- end of ["PUMP_FAILS"] - ["AN_ALE_40V_FAILURE_CONTAINER_RIGHT_GEAR"] = + }, -- end of ["COMPASS_ERRATIC_OPERATION"] + ["BOMBS_ARMING_BROKEN_WIRING_LEFT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "AN_ALE_40V_FAILURE_CONTAINER_RIGHT_GEAR", + ["id"] = "BOMBS_ARMING_BROKEN_WIRING_LEFT", ["mm"] = 0, - }, -- end of ["AN_ALE_40V_FAILURE_CONTAINER_RIGHT_GEAR"] - ["TACH_BREAK_IN_INDICATOR"] = + }, -- end of ["BOMBS_ARMING_BROKEN_WIRING_LEFT"] + ["VHF_SHORTED_CTL_BOX"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TACH_BREAK_IN_INDICATOR", + ["id"] = "VHF_SHORTED_CTL_BOX", ["mm"] = 0, - }, -- end of ["TACH_BREAK_IN_INDICATOR"] - ["BATTERY_OVERHEAT"] = - { - ["hh"] = 0, - ["prob"] = 100, - ["enable"] = false, - ["mmint"] = 1, - ["id"] = "BATTERY_OVERHEAT", - ["mm"] = 0, - }, -- end of ["BATTERY_OVERHEAT"] + }, -- end of ["VHF_SHORTED_CTL_BOX"] ["CARBAIR_SHORT_CIRCUIT_LEADS"] = { ["hh"] = 0, @@ -2979,6 +3248,15 @@ mission = ["id"] = "CARBAIR_SHORT_CIRCUIT_LEADS", ["mm"] = 0, }, -- end of ["CARBAIR_SHORT_CIRCUIT_LEADS"] + ["BATTERY_OVERHEAT"] = + { + ["hh"] = 0, + ["prob"] = 100, + ["enable"] = false, + ["mmint"] = 1, + ["id"] = "BATTERY_OVERHEAT", + ["mm"] = 0, + }, -- end of ["BATTERY_OVERHEAT"] ["NOSE_AIRSPEED_INDICATOR_FAILURE"] = { ["hh"] = 0, @@ -2988,42 +3266,33 @@ mission = ["id"] = "NOSE_AIRSPEED_INDICATOR_FAILURE", ["mm"] = 0, }, -- end of ["NOSE_AIRSPEED_INDICATOR_FAILURE"] - ["GUN_FAIL_RIGHT_IN_GUN"] = + ["es_damage_GeneratorRight"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_FAIL_RIGHT_IN_GUN", + ["id"] = "es_damage_GeneratorRight", ["mm"] = 0, - }, -- end of ["GUN_FAIL_RIGHT_IN_GUN"] - ["abris_software"] = + }, -- end of ["es_damage_GeneratorRight"] + ["GUN_RIGHT_OUT_AMMUN_FAULT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "abris_software", + ["id"] = "GUN_RIGHT_OUT_AMMUN_FAULT", ["mm"] = 0, - }, -- end of ["abris_software"] - ["ILS_FAILURE_ANT_GLIDESLOPE"] = + }, -- end of ["GUN_RIGHT_OUT_AMMUN_FAULT"] + ["BOMBS_NO_VOLATAGE_BOTH"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "ILS_FAILURE_ANT_GLIDESLOPE", + ["id"] = "BOMBS_NO_VOLATAGE_BOTH", ["mm"] = 0, - }, -- end of ["ILS_FAILURE_ANT_GLIDESLOPE"] - ["COPILOT_KILLED_FAILURE"] = - { - ["hh"] = 0, - ["prob"] = 100, - ["enable"] = false, - ["mmint"] = 1, - ["id"] = "COPILOT_KILLED_FAILURE", - ["mm"] = 0, - }, -- end of ["COPILOT_KILLED_FAILURE"] + }, -- end of ["BOMBS_NO_VOLATAGE_BOTH"] ["CADC_FAILURE_IAS"] = { ["hh"] = 0, @@ -3033,33 +3302,42 @@ mission = ["id"] = "CADC_FAILURE_IAS", ["mm"] = 0, }, -- end of ["CADC_FAILURE_IAS"] - ["COOLANT_RADIATOR_SENSOR"] = + ["BOMBS_DAMAGE_ELINKAGE_RIGHT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "COOLANT_RADIATOR_SENSOR", + ["id"] = "BOMBS_DAMAGE_ELINKAGE_RIGHT", ["mm"] = 0, - }, -- end of ["COOLANT_RADIATOR_SENSOR"] - ["GUN_LEFT_CENTER_AMMUN_FAULT"] = + }, -- end of ["BOMBS_DAMAGE_ELINKAGE_RIGHT"] + ["ROOF_AIRSPEED_INDICATOR_FAILURE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_LEFT_CENTER_AMMUN_FAULT", + ["id"] = "ROOF_AIRSPEED_INDICATOR_FAILURE", ["mm"] = 0, - }, -- end of ["GUN_LEFT_CENTER_AMMUN_FAULT"] - ["BOMBS_ARMING_NO_VOLATAGE_LEFT"] = + }, -- end of ["ROOF_AIRSPEED_INDICATOR_FAILURE"] + ["AAR_47_FAILURE_SENSOR_BOTTOM"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "BOMBS_ARMING_NO_VOLATAGE_LEFT", + ["id"] = "AAR_47_FAILURE_SENSOR_BOTTOM", ["mm"] = 0, - }, -- end of ["BOMBS_ARMING_NO_VOLATAGE_LEFT"] + }, -- end of ["AAR_47_FAILURE_SENSOR_BOTTOM"] + ["DEFECTIVE_MECHANISM"] = + { + ["hh"] = 0, + ["prob"] = 100, + ["enable"] = false, + ["mmint"] = 1, + ["id"] = "DEFECTIVE_MECHANISM", + ["mm"] = 0, + }, -- end of ["DEFECTIVE_MECHANISM"] ["AN_ALR69V_FAILURE_SENSOR_NOSE_RIGHT"] = { ["hh"] = 0, @@ -3087,15 +3365,15 @@ mission = ["id"] = "hydro_main_irreversible_valve", ["mm"] = 0, }, -- end of ["hydro_main_irreversible_valve"] - ["TAIL_GEAR_D_LOCK"] = + ["CADC_FAILURE_DYNAMIC"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TAIL_GEAR_D_LOCK", + ["id"] = "CADC_FAILURE_DYNAMIC", ["mm"] = 0, - }, -- end of ["TAIL_GEAR_D_LOCK"] + }, -- end of ["CADC_FAILURE_DYNAMIC"] ["hud"] = { ["hh"] = 0, @@ -3168,15 +3446,15 @@ mission = ["id"] = "es_damage_MainGenerator", ["mm"] = 0, }, -- end of ["es_damage_MainGenerator"] - ["MainReductor_LowOilPressure"] = + ["RIGHT_WING_TANK_LEAK"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "MainReductor_LowOilPressure", + ["id"] = "RIGHT_WING_TANK_LEAK", ["mm"] = 0, - }, -- end of ["MainReductor_LowOilPressure"] + }, -- end of ["RIGHT_WING_TANK_LEAK"] ["IGNITION_TERM_CONNECT"] = { ["hh"] = 0, @@ -3222,24 +3500,24 @@ mission = ["id"] = "VHF_SQUELCH_RELAY", ["mm"] = 0, }, -- end of ["VHF_SQUELCH_RELAY"] - ["COMPASS_ERRATIC_OPERATION"] = + ["SAR_1_101"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "COMPASS_ERRATIC_OPERATION", + ["id"] = "SAR_1_101", ["mm"] = 0, - }, -- end of ["COMPASS_ERRATIC_OPERATION"] - ["TACAN_FAILURE_RECEIVER"] = + }, -- end of ["SAR_1_101"] + ["GUN_LEFT_CENTER_OPEN_CIRCUIT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TACAN_FAILURE_RECEIVER", + ["id"] = "GUN_LEFT_CENTER_OPEN_CIRCUIT", ["mm"] = 0, - }, -- end of ["TACAN_FAILURE_RECEIVER"] + }, -- end of ["GUN_LEFT_CENTER_OPEN_CIRCUIT"] ["sas_pitch_right"] = { ["hh"] = 0, @@ -3258,24 +3536,24 @@ mission = ["id"] = "BOMBS_NO_VOLATAGE_AT_RACK_LEFT", ["mm"] = 0, }, -- end of ["BOMBS_NO_VOLATAGE_AT_RACK_LEFT"] - ["TransitionalReductor_ShaveInOil"] = + ["TURNIND_POINTER_VIBRATES"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TransitionalReductor_ShaveInOil", + ["id"] = "TURNIND_POINTER_VIBRATES", ["mm"] = 0, - }, -- end of ["TransitionalReductor_ShaveInOil"] - ["TACH_POOR_CONNECTION"] = + }, -- end of ["TURNIND_POINTER_VIBRATES"] + ["TACAN_FAILURE_RECEIVER"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TACH_POOR_CONNECTION", + ["id"] = "TACAN_FAILURE_RECEIVER", ["mm"] = 0, - }, -- end of ["TACH_POOR_CONNECTION"] + }, -- end of ["TACAN_FAILURE_RECEIVER"] ["VHF_AM_RADIO_FAILURE_TOTAL"] = { ["hh"] = 0, @@ -3303,24 +3581,24 @@ mission = ["id"] = "VHF_CRYSTAL", ["mm"] = 0, }, -- end of ["VHF_CRYSTAL"] - ["COOLANT_SHORT_CIRCUIT"] = + ["GUN_FAIL_RIGHT_IN_GUN"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "COOLANT_SHORT_CIRCUIT", + ["id"] = "GUN_FAIL_RIGHT_IN_GUN", ["mm"] = 0, - }, -- end of ["COOLANT_SHORT_CIRCUIT"] - ["BOMBS_ARMING_BROKEN_WIRING_RIGHT"] = + }, -- end of ["GUN_FAIL_RIGHT_IN_GUN"] + ["sas_pitch_left"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "BOMBS_ARMING_BROKEN_WIRING_RIGHT", + ["id"] = "sas_pitch_left", ["mm"] = 0, - }, -- end of ["BOMBS_ARMING_BROKEN_WIRING_RIGHT"] + }, -- end of ["sas_pitch_left"] ["F2_TOP_CYLINDER"] = { ["hh"] = 0, @@ -3348,15 +3626,15 @@ mission = ["id"] = "MANIFOLD_LINE_LEAK", ["mm"] = 0, }, -- end of ["MANIFOLD_LINE_LEAK"] - ["CADC_FAILURE_DYNAMIC"] = + ["COPILOT_KILLED_FAILURE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "CADC_FAILURE_DYNAMIC", + ["id"] = "COPILOT_KILLED_FAILURE", ["mm"] = 0, - }, -- end of ["CADC_FAILURE_DYNAMIC"] + }, -- end of ["COPILOT_KILLED_FAILURE"] ["CADC_FAILURE_PRESSURE_ALT"] = { ["hh"] = 0, @@ -3375,24 +3653,24 @@ mission = ["id"] = "K14_NO_POWER_SUPPLY", ["mm"] = 0, }, -- end of ["K14_NO_POWER_SUPPLY"] - ["RADAR_ALTIMETR_RIGHT_ANT_FAILURE"] = + ["COOLANT_RADIATOR_SENSOR"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "RADAR_ALTIMETR_RIGHT_ANT_FAILURE", + ["id"] = "COOLANT_RADIATOR_SENSOR", ["mm"] = 0, - }, -- end of ["RADAR_ALTIMETR_RIGHT_ANT_FAILURE"] - ["es_damage_GeneratorRight"] = + }, -- end of ["COOLANT_RADIATOR_SENSOR"] + ["INSUF_FUEL_PRES"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "es_damage_GeneratorRight", + ["id"] = "INSUF_FUEL_PRES", ["mm"] = 0, - }, -- end of ["es_damage_GeneratorRight"] + }, -- end of ["INSUF_FUEL_PRES"] ["BOMBS_DAMAGE_LINKAGE_RIGHT"] = { ["hh"] = 0, @@ -3411,15 +3689,15 @@ mission = ["id"] = "fs_damage_engine_pump", ["mm"] = 0, }, -- end of ["fs_damage_engine_pump"] - ["VHF_SHORTED_CTL_BOX"] = + ["GUN_RIGHT_OUT_OPEN_CIRCUIT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "VHF_SHORTED_CTL_BOX", + ["id"] = "GUN_RIGHT_OUT_OPEN_CIRCUIT", ["mm"] = 0, - }, -- end of ["VHF_SHORTED_CTL_BOX"] + }, -- end of ["GUN_RIGHT_OUT_OPEN_CIRCUIT"] ["CADC_FAILURE_STATIC"] = { ["hh"] = 0, @@ -3456,51 +3734,51 @@ mission = ["id"] = "IFFCC_FAILURE_TOTAL", ["mm"] = 0, }, -- end of ["IFFCC_FAILURE_TOTAL"] - ["CLOCK_FAILURE"] = + ["UNLOAD_VALVE_NOT_UNLOAD"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "CLOCK_FAILURE", + ["id"] = "UNLOAD_VALVE_NOT_UNLOAD", ["mm"] = 0, - }, -- end of ["CLOCK_FAILURE"] - ["GUN_LEFT_OUT_AMMUN_FAULT"] = + }, -- end of ["UNLOAD_VALVE_NOT_UNLOAD"] + ["TAIL_GEAR_D_LOCK"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_LEFT_OUT_AMMUN_FAULT", + ["id"] = "TAIL_GEAR_D_LOCK", ["mm"] = 0, - }, -- end of ["GUN_LEFT_OUT_AMMUN_FAULT"] - ["BOMBS_NO_VOLATAGE_BOTH"] = + }, -- end of ["TAIL_GEAR_D_LOCK"] + ["TACH_BREAK_IN_INDICATOR"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "BOMBS_NO_VOLATAGE_BOTH", + ["id"] = "TACH_BREAK_IN_INDICATOR", ["mm"] = 0, - }, -- end of ["BOMBS_NO_VOLATAGE_BOTH"] - ["BOMBS_DAMAGE_ELINKAGE_RIGHT"] = + }, -- end of ["TACH_BREAK_IN_INDICATOR"] + ["GMC_TOTAL_FAILURE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "BOMBS_DAMAGE_ELINKAGE_RIGHT", + ["id"] = "GMC_TOTAL_FAILURE", ["mm"] = 0, - }, -- end of ["BOMBS_DAMAGE_ELINKAGE_RIGHT"] - ["GUN_LEFT_OUT_BARREL_WORN"] = + }, -- end of ["GMC_TOTAL_FAILURE"] + ["GUN_RIGHT_CENTER_BARREL_WORN"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_LEFT_OUT_BARREL_WORN", + ["id"] = "GUN_RIGHT_CENTER_BARREL_WORN", ["mm"] = 0, - }, -- end of ["GUN_LEFT_OUT_BARREL_WORN"] + }, -- end of ["GUN_RIGHT_CENTER_BARREL_WORN"] ["EXT_HYDRO_LEAK"] = { ["hh"] = 0, @@ -3645,15 +3923,15 @@ mission = ["id"] = "TACAN_FAILURE_TRANSMITTER", ["mm"] = 0, }, -- end of ["TACAN_FAILURE_TRANSMITTER"] - ["engine_surge_failure"] = + ["AN_ALE_40V_FAILURE_CONTAINER_RIGHT_GEAR"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "engine_surge_failure", + ["id"] = "AN_ALE_40V_FAILURE_CONTAINER_RIGHT_GEAR", ["mm"] = 0, - }, -- end of ["engine_surge_failure"] + }, -- end of ["AN_ALE_40V_FAILURE_CONTAINER_RIGHT_GEAR"] ["l_gen"] = { ["hh"] = 0, @@ -3663,15 +3941,15 @@ mission = ["id"] = "l_gen", ["mm"] = 0, }, -- end of ["l_gen"] - ["RIGHT_WING_TANK_LEAK"] = + ["TransitionalReductor_ShaveInOil"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "RIGHT_WING_TANK_LEAK", + ["id"] = "TransitionalReductor_ShaveInOil", ["mm"] = 0, - }, -- end of ["RIGHT_WING_TANK_LEAK"] + }, -- end of ["TransitionalReductor_ShaveInOil"] ["GUN_LEFT_IN_BARREL_WORN"] = { ["hh"] = 0, @@ -3690,15 +3968,15 @@ mission = ["id"] = "r_gen", ["mm"] = 0, }, -- end of ["r_gen"] - ["l_conv"] = + ["GUN_LEFT_OUT_BARREL_WORN"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "l_conv", + ["id"] = "GUN_LEFT_OUT_BARREL_WORN", ["mm"] = 0, - }, -- end of ["l_conv"] + }, -- end of ["GUN_LEFT_OUT_BARREL_WORN"] ["AAR_47_FAILURE_SENSOR_RIGHT"] = { ["hh"] = 0, @@ -3753,15 +4031,15 @@ mission = ["id"] = "BOOSTER_COIL", ["mm"] = 0, }, -- end of ["BOOSTER_COIL"] - ["INSUF_FUEL_PRES"] = + ["engine_surge_failure"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "INSUF_FUEL_PRES", + ["id"] = "engine_surge_failure", ["mm"] = 0, - }, -- end of ["INSUF_FUEL_PRES"] + }, -- end of ["engine_surge_failure"] ["FAULTY_ROCKET_RIGHT"] = { ["hh"] = 0, @@ -3834,15 +4112,15 @@ mission = ["id"] = "CLOGGED_FUEL_STRAINER", ["mm"] = 0, }, -- end of ["CLOGGED_FUEL_STRAINER"] - ["TURNIND_INCORRECT_SENS_VAC_HIGH"] = + ["GUN_LEFT_OUT_AMMUN_FAULT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "TURNIND_INCORRECT_SENS_VAC_HIGH", + ["id"] = "GUN_LEFT_OUT_AMMUN_FAULT", ["mm"] = 0, - }, -- end of ["TURNIND_INCORRECT_SENS_VAC_HIGH"] + }, -- end of ["GUN_LEFT_OUT_AMMUN_FAULT"] ["r_engine"] = { ["hh"] = 0, @@ -3888,15 +4166,14 @@ mission = ["id"] = "D2_RIGHT_CYLINDER", ["mm"] = 0, }, -- end of ["D2_RIGHT_CYLINDER"] - ["UNLOAD_VALVE_NOT_UNLOAD"] = + ["ecf"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "UNLOAD_VALVE_NOT_UNLOAD", ["mm"] = 0, - }, -- end of ["UNLOAD_VALVE_NOT_UNLOAD"] + }, -- end of ["ecf"] ["AN_ALR69V_FAILURE_TOTAL"] = { ["hh"] = 0, @@ -3906,15 +4183,6 @@ mission = ["id"] = "AN_ALR69V_FAILURE_TOTAL", ["mm"] = 0, }, -- end of ["AN_ALR69V_FAILURE_TOTAL"] - ["GMC_TOTAL_FAILURE"] = - { - ["hh"] = 0, - ["prob"] = 100, - ["enable"] = false, - ["mmint"] = 1, - ["id"] = "GMC_TOTAL_FAILURE", - ["mm"] = 0, - }, -- end of ["GMC_TOTAL_FAILURE"] ["BOMBS_ARMING_BROKEN_SOLENOID_LEFT"] = { ["hh"] = 0, @@ -3924,15 +4192,24 @@ mission = ["id"] = "BOMBS_ARMING_BROKEN_SOLENOID_LEFT", ["mm"] = 0, }, -- end of ["BOMBS_ARMING_BROKEN_SOLENOID_LEFT"] - ["GUN_RIGHT_OUT_OPEN_CIRCUIT"] = + ["SUPERCHARGER_SOLENOID"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "GUN_RIGHT_OUT_OPEN_CIRCUIT", + ["id"] = "SUPERCHARGER_SOLENOID", ["mm"] = 0, - }, -- end of ["GUN_RIGHT_OUT_OPEN_CIRCUIT"] + }, -- end of ["SUPERCHARGER_SOLENOID"] + ["ARN_83_TOTAL_FAILURE"] = + { + ["hh"] = 0, + ["prob"] = 100, + ["enable"] = false, + ["mmint"] = 1, + ["id"] = "ARN_83_TOTAL_FAILURE", + ["mm"] = 0, + }, -- end of ["ARN_83_TOTAL_FAILURE"] ["l_engine"] = { ["hh"] = 0, @@ -3942,24 +4219,24 @@ mission = ["id"] = "l_engine", ["mm"] = 0, }, -- end of ["l_engine"] - ["ROOF_AIRSPEED_INDICATOR_FAILURE"] = + ["GUN_LEFT_CENTER_MOUNT_LOOSE"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "ROOF_AIRSPEED_INDICATOR_FAILURE", + ["id"] = "GUN_LEFT_CENTER_MOUNT_LOOSE", ["mm"] = 0, - }, -- end of ["ROOF_AIRSPEED_INDICATOR_FAILURE"] - ["AAR_47_FAILURE_SENSOR_BOTTOM"] = + }, -- end of ["GUN_LEFT_CENTER_MOUNT_LOOSE"] + ["TGP_FAILURE_RIGHT"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, - ["id"] = "AAR_47_FAILURE_SENSOR_BOTTOM", + ["id"] = "TGP_FAILURE_RIGHT", ["mm"] = 0, - }, -- end of ["AAR_47_FAILURE_SENSOR_BOTTOM"] + }, -- end of ["TGP_FAILURE_RIGHT"] ["COOLANT_DEFECTIVE_IND"] = { ["hh"] = 0, @@ -3969,14 +4246,15 @@ mission = ["id"] = "COOLANT_DEFECTIVE_IND", ["mm"] = 0, }, -- end of ["COOLANT_DEFECTIVE_IND"] - ["ecf"] = + ["l_conv"] = { ["hh"] = 0, ["prob"] = 100, ["enable"] = false, ["mmint"] = 1, + ["id"] = "l_conv", ["mm"] = 0, - }, -- end of ["ecf"] + }, -- end of ["l_conv"] ["JADRO_1A_FAILURE_TOTAL"] = { ["hh"] = 0, diff --git a/Test Missions/miz/MOOSE_Escort_Test_Follow/warehouses b/Test Missions/miz/MOOSE_Escort_Test_Follow/warehouses index 68ca70eb9..4da4b8597 100644 --- a/Test Missions/miz/MOOSE_Escort_Test_Follow/warehouses +++ b/Test Missions/miz/MOOSE_Escort_Test_Follow/warehouses @@ -442,7 +442,7 @@ warehouses = ["suppliers"] = { }, -- end of ["suppliers"] - ["coalition"] = "NEUTRAL", + ["coalition"] = "BLUE", ["jet_fuel"] = { ["InitFuel"] = 100,