From 8f0c6f7a1fd4a012a5c2770d9baf06370eccca74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 25 Jan 2015 00:56:23 -0300 Subject: [PATCH 01/47] common: function for drawing debug lines --- addons/common/XEH_preInit.sqf | 2 + .../functions/fnc_addLineToDebugDraw.sqf | 48 +++++++++++++++++++ .../fnc_createOrthonormalReference.sqf | 21 ++++++++ 3 files changed, 71 insertions(+) create mode 100644 addons/common/functions/fnc_addLineToDebugDraw.sqf create mode 100644 addons/common/functions/fnc_createOrthonormalReference.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index f33b3c47fe..498321b857 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -6,6 +6,7 @@ PREP(addActionEventHandler); PREP(addActionMenuEventHandler); PREP(addCameraEventHandler); PREP(addCustomEventHandler); +PREP(addLineToDebugDraw); PREP(addMapMarkerCreatedEventHandler); PREP(addScrollWheelEventHandler); PREP(adminKick); @@ -24,6 +25,7 @@ PREP(closeDialogIfTargetMoves); PREP(codeToLetter); PREP(codeToString); PREP(convertKeyCode); +PREP(createOrthonormalReference); PREP(currentChannel); PREP(disableUserInput); PREP(displayText); diff --git a/addons/common/functions/fnc_addLineToDebugDraw.sqf b/addons/common/functions/fnc_addLineToDebugDraw.sqf new file mode 100644 index 0000000000..cfe45359c9 --- /dev/null +++ b/addons/common/functions/fnc_addLineToDebugDraw.sqf @@ -0,0 +1,48 @@ +/* + * Author: CAA-Picard + * + * Add line to draw on debug + * + * Argument: + * 0: Start point ASL (Array) + * 1: End point ASL (Array) + * 2: Color (Array) + * + * Return value: + * + */ +#include "script_component.hpp" + +if (isNil QGVAR(debugLines)) then { + GVAR(debugLines) = []; + GVAR(debugLinesIndex) = 0; +}; + +if (count GVAR(debugLines) < 100) then { + GVAR(debugLines) pushBack _this; + GVAR(debugLinesIndex) = 0; +} else { + GVAR(debugLines) set [GVAR(debugLinesIndex), _this]; + GVAR(debugLinesIndex) = (GVAR(debugLinesIndex) + 1) mod 100; +}; + +if (isNil QGVAR(debugDrawHandler)) then { + GVAR(debugDrawHandler) = addMissionEventHandler ["Draw3D", { + if (count GVAR(debugLines) == 0) exitWith { + removeMissionEventHandler GVAR(debugDrawHandler); + GVAR(debugDrawHandler) = nil; + }; + + { + _p0 = _x select 0; + if (!surfaceIsWater _p0) then { + _p0 = ASLtoATL _p0; + }; + _p1 = _x select 1; + if (!surfaceIsWater _p1) then { + _p1 = ASLtoATL _p1; + }; + drawLine3D [_p0, _p1, _x select 2]; + } forEach GVAR(debugLines); + }]; +}; \ No newline at end of file diff --git a/addons/common/functions/fnc_createOrthonormalReference.sqf b/addons/common/functions/fnc_createOrthonormalReference.sqf new file mode 100644 index 0000000000..a92464a7f3 --- /dev/null +++ b/addons/common/functions/fnc_createOrthonormalReference.sqf @@ -0,0 +1,21 @@ +/* + * Author: CAA-Picard + * + * Returns a orthonormal system of reference aligned with the supplied vector + * + * Argument: + * Vector to align the coordinate system with (Array) + * + * Return value: + * 0: v1 (Array) + * 1: v2 (Array) + * 2: v3 (Array) + */ +#include "script_component.hpp" + +private ["_v1","_v2","_v3"]; +_v1 = vectorNormalized _this; +_v2 = vectorNormalized (_v1 vectorCrossProduct [0,0,1]); +_v3 = _v2 vectorCrossProduct _v1; + +[_v1,_v2,_v3] From 8d1ee8c2c2989241ee39b886c04f09728bb79c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 25 Jan 2015 00:59:20 -0300 Subject: [PATCH 02/47] backblast: overhaul - Replace firedNear by firedBIS XEH - Calculate the origin of the backblast and overpressure zones using the projectile position and direction - Handle all effects for each unit on their local machine - Posibility of drawing effect cone for debug - Simplified angle calculations --- addons/backblast/CfgEventHandlers.hpp | 14 ++- addons/backblast/XEH_postInit.sqf | 4 + addons/backblast/XEH_preInit.sqf | 6 +- .../functions/fnc_backblastDamage.sqf | 67 ++++++++++++++ .../functions/fnc_fireLauncherBackblast.sqf | 91 +++++++++++++++++++ .../functions/fnc_fireOverpressureZone.sqf | 65 +++++++++++++ .../backblast/functions/fnc_getDistance.sqf | 45 +++++---- .../functions/fnc_launcherBackblast.sqf | 72 --------------- .../functions/fnc_overpressureDamage.sqf | 65 +++++++++++++ .../functions/fnc_tankDangerZone.sqf | 54 ----------- 10 files changed, 334 insertions(+), 149 deletions(-) create mode 100644 addons/backblast/XEH_postInit.sqf create mode 100644 addons/backblast/functions/fnc_backblastDamage.sqf create mode 100644 addons/backblast/functions/fnc_fireLauncherBackblast.sqf create mode 100644 addons/backblast/functions/fnc_fireOverpressureZone.sqf delete mode 100644 addons/backblast/functions/fnc_launcherBackblast.sqf create mode 100644 addons/backblast/functions/fnc_overpressureDamage.sqf delete mode 100644 addons/backblast/functions/fnc_tankDangerZone.sqf diff --git a/addons/backblast/CfgEventHandlers.hpp b/addons/backblast/CfgEventHandlers.hpp index a336a5dd41..979a683aeb 100644 --- a/addons/backblast/CfgEventHandlers.hpp +++ b/addons/backblast/CfgEventHandlers.hpp @@ -5,13 +5,21 @@ class Extended_PreInit_EventHandlers { }; }; -class Extended_FiredNear_EventHandlers { +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit) ); + }; +}; + +class Extended_FiredBIS_EventHandlers { class CAManBase { class GVAR(LauncherBackblast) { - FiredNear = QUOTE( if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 3 >> 'ACE_Backblast_Damage') > 0}) then {_this call FUNC(launcherBackblast)} ); + firedBIS = QUOTE( if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Backblast_Damage') > 0}) then {_this call FUNC(fireLauncherBackblast)} ); }; + }; + class AllVehicles { class GVAR(TankDangerZone) { - FiredNear = QUOTE( if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 3 >> 'ACE_DangerZone_Damage') > 0}) then {_this call FUNC(tankDangerZone)} ); + firedBIS = QUOTE( if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_DangerZone_Damage') > 0}) then {_this call FUNC(fireOverpressureZone)} ); }; }; }; diff --git a/addons/backblast/XEH_postInit.sqf b/addons/backblast/XEH_postInit.sqf new file mode 100644 index 0000000000..72ca42a012 --- /dev/null +++ b/addons/backblast/XEH_postInit.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +["backblast", FUNC(backblastDamage)] call EFUNC(common,addEventHandler); +["overpressure", FUNC(overpressureDamage)] call EFUNC(common,addEventHandler); diff --git a/addons/backblast/XEH_preInit.sqf b/addons/backblast/XEH_preInit.sqf index 1becf28c05..1927bc850b 100644 --- a/addons/backblast/XEH_preInit.sqf +++ b/addons/backblast/XEH_preInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +PREP(backblastDamage); +PREP(fireLauncherBackblast); +PREP(fireOverpressureZone); PREP(getDistance); -PREP(launcherBackblast); -PREP(tankDangerZone); +PREP(overpressureDamage); diff --git a/addons/backblast/functions/fnc_backblastDamage.sqf b/addons/backblast/functions/fnc_backblastDamage.sqf new file mode 100644 index 0000000000..21d2e81736 --- /dev/null +++ b/addons/backblast/functions/fnc_backblastDamage.sqf @@ -0,0 +1,67 @@ +/* + * Author: Commy2 and CAA-Picard + * + * Calculate and apply backblast damage to potentially affected local units + * + * Argument: + * 0: Unit that fired (Object) + * 1: Pos ASL of the projectile (Array) + * 2: Direction of the projectile (Array) + * 3: Weapon fired (String) + * + * Return value: + * None + */ +#include "script_component.hpp" + +EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); + +private ["_backblastAngle","_backblastRange","_backblastDamage"]; +_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2; +_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range"); +_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage"); +TRACE_4("Parameters:",_backblastAngle,_backblastRange,_backblastDamage,_weapon); + +_pos = _posASL; +if (!surfaceIsWater _pos) then { + _pos = ASLtoATL _pos; +}; + +_affected = _pos nearEntities ["CAManBase", _backblastRange]; +{ + _unit = _x; + if (local _unit && _unit != _firer && vehicle _unit == _unit) then { + + _targetPositionASL = eyePos _unit; + _relativePosition = _targetPositionASL vectorDiff _posASL; + _axisDistance = _relativePosition vectorDotProduct _direction; + _distance = vectorMagnitude _relativePosition; + _angle = acos (_axisDistance / _distance); + + _line = [_posASL, _targetPositionASL, _firer, _unit]; + _line2 = [_posASL, _targetPositionASL]; + TRACE_4("Affected:",_unit,_axisDistance,_distance,_angle); + if (_angle < _backblastAngle && {_distance < _backblastRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { + _alpha = sqrt (1 - _distance / _backblastRange); + _beta = sqrt (1 - _angle / _backblastAngle); + + _damage = 2 * _alpha * _beta * _backblastDamage; + + // If the target is the ACE_player + if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; + + // TODO: Sort this interaction with medical + if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { + [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); + _unit spawn { + sleep 0.5; + [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); + }; + } else { + _unit setDamage (damage _unit + _damage); + }; + }; + }; +} forEach _affected; + + diff --git a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf new file mode 100644 index 0000000000..5970e7b9c2 --- /dev/null +++ b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf @@ -0,0 +1,91 @@ +/* + * Author: Commy2 and CAA-Picard + * + * Handle fire of local launchers + * + * Argument: + * 0: Unit that fired (Object) + * 1: Weapon fired (String) + * 2: Muzzle (String) + * 3: Mode (String) + * 4: Ammo (String) + * 5: Magazine (String) + * 6: Projectile (Object) + * + * Return value: + * None + */ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +// Prevent AI from causing backblast damage +if !([_firer] call EFUNC(common,isPlayer)) exitWith {}; + +private ["_position","_direction","_distance","_alpha","_beta","_damage","_affected"]; +_position = getPosASL _projectile; +_direction = [0, 0, 0] vectorDiff (vectorDir _projectile); + +private ["_backblastAngle","_backblastRange","_backblastDamage"]; +_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2; +_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range"); +_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage"); + + +// Damage to others +_affected = getPos _projectile nearEntities ["CAManBase", _backblastRange]; +// Let each client handle their own affected units +["backblast", _affected, [_firer,_position,_direction,_weapon]] call EFUNC(common,targetEvent); + + +// Damage to the firer +_distance = [_position, _direction, _backblastRange] call FUNC(getDistance); +TRACE_1("Distance", _distance); + +if (_distance < _backblastRange) then { + + _alpha = sqrt (1 - _distance / _backblastRange); + _beta = sqrt 0.5; + + _damage = 2 * _alpha * _beta * _backblastDamage; + [_damage * 100] call BIS_fnc_bloodEffect; + + // TODO: Sort this interaction with medical + if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { + [_firer, "HitBody", ([_firer, "", ((_firer getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); + } else { + _firer setDamage (damage _firer + _damage); + }; +}; + +// Draw debug lines +#ifdef DEBUG_MODE_FULL + [ _position, + _position vectorAdd (_direction vectorMultiply _backblastRange), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + + _ref = _direction call EFUNC(common,createOrthonormalReference); + [ _position, + _position vectorAdd (_direction vectorMultiply _backblastRange) vectorAdd ((_ref select 1) vectorMultiply _backblastRange * tan _backblastAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + [ _position, + _position vectorAdd (_direction vectorMultiply _backblastRange) vectorDiff ((_ref select 1) vectorMultiply _backblastRange * tan _backblastAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + [ _position, + _position vectorAdd (_direction vectorMultiply _backblastRange) vectorAdd ((_ref select 2) vectorMultiply _backblastRange * tan _backblastAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + [ _position, + _position vectorAdd (_direction vectorMultiply _backblastRange) vectorDiff ((_ref select 2) vectorMultiply _backblastRange * tan _backblastAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + + [ _position, + _position vectorAdd (_direction vectorMultiply (_distance min _backblastRange)), + [1,0,0,1] + ] call EFUNC(common,addLineToDebugDraw); +#endif \ No newline at end of file diff --git a/addons/backblast/functions/fnc_fireOverpressureZone.sqf b/addons/backblast/functions/fnc_fireOverpressureZone.sqf new file mode 100644 index 0000000000..c638f4ad82 --- /dev/null +++ b/addons/backblast/functions/fnc_fireOverpressureZone.sqf @@ -0,0 +1,65 @@ +/* + * Author: Commy2 and CAA-Picard + * + * Handle fire of local vehicle weapons creating overpressure zones + * + * Argument: + * 0: Unit that fired (Object) + * 1: Weapon fired (String) + * 2: Muzzle (String) + * 3: Mode (String) + * 4: Ammo (String) + * 5: Magazine (String) + * 6: Projectile (Object) + * + * Return value: + * None + *///#define DEBUG_MODE_FULL +#include "script_component.hpp" + +EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +// Prevent AI from causing backblast damage +if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {}; + +private ["_position","_direction","_distance","_alpha","_beta","_damage","_affected"]; +_position = getPosASL _projectile; +_direction = vectorDir _projectile; + +private ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"]; +_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2; +_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range"); +_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage"); + + +// Damage to others +_affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; +// Let each client handle their own affected units +["overpressure", _affected, [_firer,_position,_direction,_weapon]] call EFUNC(common,targetEvent); + +// Draw debug lines +#ifdef DEBUG_MODE_FULL + [ _position, + _position vectorAdd (_direction vectorMultiply _dangerZoneRange), + [1,0,0,1] + ] call EFUNC(common,addLineToDebugDraw); + + _ref = _direction call EFUNC(common,createOrthonormalReference); + [ _position, + _position vectorAdd (_direction vectorMultiply _dangerZoneRange) vectorAdd ((_ref select 1) vectorMultiply _dangerZoneRange * tan _dangerZoneAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + [ _position, + _position vectorAdd (_direction vectorMultiply _dangerZoneRange) vectorDiff ((_ref select 1) vectorMultiply _dangerZoneRange * tan _dangerZoneAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + [ _position, + _position vectorAdd (_direction vectorMultiply _dangerZoneRange) vectorAdd ((_ref select 2) vectorMultiply _dangerZoneRange * tan _dangerZoneAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + [ _position, + _position vectorAdd (_direction vectorMultiply _dangerZoneRange) vectorDiff ((_ref select 2) vectorMultiply _dangerZoneRange * tan _dangerZoneAngle), + [1,1,0,1] + ] call EFUNC(common,addLineToDebugDraw); + +#endif \ No newline at end of file diff --git a/addons/backblast/functions/fnc_getDistance.sqf b/addons/backblast/functions/fnc_getDistance.sqf index 83b290e2b0..b6f61548c6 100644 --- a/addons/backblast/functions/fnc_getDistance.sqf +++ b/addons/backblast/functions/fnc_getDistance.sqf @@ -1,31 +1,40 @@ -// by commy2 +/* + * Author: Commy2 and CAA-Picard + * + * Calculate the distance to the first intersection of a line + * + * Argument: + * 0: Pos ASL of origin (Array) + * 1: Direction (Array) + * 2: Max distance to search (Number) + * + * Return value: + * Distance to intersection (+- 0.1 m) + */ #include "script_component.hpp" -private ["_position", "_direction", "_maxDistance", "_distance", "_iteration", "_laser", "_line"]; +private ["_distance", "_interval", "_line", "_line"]; -_position = + _this select 0; -_direction = + _this select 1; -_maxDistance = _this select 2; +EXPLODE_3_PVT(_this,_posASL,_direction,_maxDistance); _distance = _maxDistance; -_iteration = _distance; -_laser = []; -_line = [_position, _laser]; +_interval = _distance; +_line = [_posASL, []]; while { - _iteration > 0.1 + _interval > 0.1 } do { - _iteration = _iteration / 2; + _interval = _interval / 2; - _laser set [0, (_position select 0) - _distance * (_direction select 0)]; - _laser set [1, (_position select 1) - _distance * (_direction select 1)]; - _laser set [2, (_position select 2) - _distance * (_direction select 2)]; + _line set [1, _posASL vectorAdd (_direction vectorMultiply _distance)]; - _intersections = { - _x isKindOf "Static" || {_x isKindOf "AllVehicles"} - } count (lineIntersectsWith _line); + _intersections = { + _x isKindOf "Static" || {_x isKindOf "AllVehicles"} + } count (lineIntersectsWith _line); - _distance = _distance + ([1, -1] select (_intersections > 0)) * _iteration; + _distance = _distance + ([1, -1] select (_intersections > 0 || {terrainIntersectASL _line})) * _interval; + + if (_distance > _maxDistance) exitWith {_distance = 999}; }; -if (_distance > _maxDistance) then {999} else {_distance} +_distance diff --git a/addons/backblast/functions/fnc_launcherBackblast.sqf b/addons/backblast/functions/fnc_launcherBackblast.sqf deleted file mode 100644 index b2cde50c5d..0000000000 --- a/addons/backblast/functions/fnc_launcherBackblast.sqf +++ /dev/null @@ -1,72 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -_unit = _this select 0; -_firer = _this select 1; -_distance = _this select 2; -_weapon = _this select 3; - -if (vehicle _unit != _unit || {!([_firer] call EFUNC(common,isPlayer))}) exitWith {}; - -_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2; -_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range"); -_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage"); - -_position = eyePos _firer; -_direction = _firer weaponDirection currentWeapon _firer; - -if (_unit == _firer) then { - _distance = [_position, _direction, _backblastRange] call FUNC(getDistance); - hint format ["%1", _distance]; - if (_distance < _backblastRange) then { - _alpha = sqrt (1 - _distance / _backblastRange); - _beta = sqrt 0.5; - - _damage = 2 * _alpha * _beta * _backblastDamage; - [_damage * 100] call BIS_fnc_bloodEffect; - - // TODO: Sort this interaction with medical - if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { - [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); - } else { - _unit setDamage (damage _unit + _damage); - }; - - }; -} else { - _direction = [0, 0, 0] vectorDiff _direction; - - _azimuth = (_direction select 0) atan2 (_direction select 1); - _inclination = asin (_direction select 2); - - _relativePosition = eyePos _unit; - _relativeDirection = _relativePosition vectorDiff _position; - - _relativeAzimuth = (_relativeDirection select 0) atan2 (_relativeDirection select 1); - _relativeInclination = asin (_relativeDirection select 2); - - _angle = sqrt ((_relativeAzimuth - _azimuth) ^ 2 + (_relativeInclination - _inclination) ^ 2); - _distance = vectorMagnitude _relativeDirection; - - _line = [_position, _relativePosition]; - - if (_angle < _backblastAngle && {_distance < _backblastRange} && {!lineIntersects _line} && {!terrainIntersectASL _line}) then { - _alpha = sqrt (1 - _distance / _backblastRange); - _beta = sqrt (1 - _angle / _backblastAngle); - - _damage = 2 * _alpha * _beta * _backblastDamage; - if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; - - // TODO: Sort this interaction with medical - if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { - [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); - _unit spawn { - sleep 0.5; - [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); - }; - } else { - _unit setDamage (damage _unit + _damage); - }; - - }; -}; diff --git a/addons/backblast/functions/fnc_overpressureDamage.sqf b/addons/backblast/functions/fnc_overpressureDamage.sqf new file mode 100644 index 0000000000..5dd7447ce8 --- /dev/null +++ b/addons/backblast/functions/fnc_overpressureDamage.sqf @@ -0,0 +1,65 @@ +/* + * Author: Commy2 and CAA-Picard + * + * Calculate and apply overpressure damage to potentially affected local units + * + * Argument: + * 0: Unit that fired (Object) + * 1: Pos ASL of the projectile (Array) + * 2: Direction of the projectile (Array) + * 3: Weapon fired (String) + * + * Return value: + * None + */ +#include "script_component.hpp" + +EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); + +private ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"]; +_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2; +_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range"); +_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage"); +TRACE_4("Parameters:",_dangerZoneAngle,_dangerZoneRange,_dangerZoneDamage,_weapon); + +_pos = _posASL; +if (!surfaceIsWater _pos) then { + _pos = ASLtoATL _pos; +}; + +_affected = _pos nearEntities ["CAManBase", _dangerZoneRange]; +{ + _unit = _x; + if (local _unit && _unit != _firer && vehicle _unit == _unit) then { + + _targetPositionASL = eyePos _unit; + _relativePosition = _targetPositionASL vectorDiff _posASL; + _axisDistance = _relativePosition vectorDotProduct _direction; + _distance = vectorMagnitude _relativePosition; + _angle = acos (_axisDistance / _distance); + + _line = [_posASL, _targetPositionASL, _firer, _unit]; + _line2 = [_posASL, _targetPositionASL]; + TRACE_4("Affected:",_unit,_axisDistance,_distance,_angle); + if (_angle < _dangerZoneAngle && {_distance < _dangerZoneRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { + _alpha = sqrt (1 - _distance / _dangerZoneRange); + _beta = sqrt (1 - _angle / _dangerZoneAngle); + + _damage = 2 * _alpha * _beta * _dangerZoneDamage; + + // If the target is the ACE_player + if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; + + // @todo: Sort this interaction with medical + if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { + [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); + _unit spawn { + sleep 0.5; + [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); + }; + } else { + _unit setDamage (damage _unit + _damage); + }; + }; + }; +} forEach _affected; diff --git a/addons/backblast/functions/fnc_tankDangerZone.sqf b/addons/backblast/functions/fnc_tankDangerZone.sqf deleted file mode 100644 index 0371ec9620..0000000000 --- a/addons/backblast/functions/fnc_tankDangerZone.sqf +++ /dev/null @@ -1,54 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -#define BARREL_MUZZLE "usti hlavne" - -_unit = _this select 0; -_vehicle = vehicle (_this select 1); -_distance = _this select 2; -_weapon = _this select 3; - -if (vehicle _unit != _unit || {!([gunner _firer] call EFUNC(common,isPlayer))}) exitWith {}; - -_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2; -_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range"); -_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage"); - -_position = ATLToASL (_vehicle modelToWorld (_vehicle selectionPosition BARREL_MUZZLE)); -_direction = _vehicle weaponDirection _weapon; - -if (_unit != _vehicle) then { - _azimuth = (_direction select 0) atan2 (_direction select 1); - _inclination = asin (_direction select 2); - - _relativePosition = eyePos _unit; - _relativeDirection = _relativePosition vectorDiff _position; - - _relativeAzimuth = (_relativeDirection select 0) atan2 (_relativeDirection select 1); - _relativeInclination = asin (_relativeDirection select 2); - - _angle = sqrt ((_relativeAzimuth - _azimuth) ^ 2 + (_relativeInclination - _inclination) ^ 2); - _distance = vectorMagnitude _relativeDirection; - - _line = [_position, _relativePosition]; - - if (_angle < _dangerZoneAngle && {_distance < _dangerZoneRange} && {!lineIntersects (_line + [_vehicle])} && {!terrainIntersectASL _line}) then { - _alpha = sqrt (1 - _distance / _dangerZoneRange); - _beta = sqrt (1 - _angle / _dangerZoneAngle); - - _damage = 2 * _alpha * _beta * _dangerZoneDamage; - if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; - - // TODO: Sort this interaction with medical - if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { - [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); - _unit spawn { - sleep 0.5; - [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); - }; - } else { - _unit setDamage (damage _unit + _damage); - }; - - }; -}; From 05d209191cf60d82ac8581a50f0f2fda18079d3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 25 Jan 2015 01:05:19 -0300 Subject: [PATCH 03/47] common: fixed fnc_addLineToDebugDraw --- addons/common/functions/fnc_addLineToDebugDraw.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_addLineToDebugDraw.sqf b/addons/common/functions/fnc_addLineToDebugDraw.sqf index cfe45359c9..1c7d5d5cd1 100644 --- a/addons/common/functions/fnc_addLineToDebugDraw.sqf +++ b/addons/common/functions/fnc_addLineToDebugDraw.sqf @@ -29,7 +29,7 @@ if (count GVAR(debugLines) < 100) then { if (isNil QGVAR(debugDrawHandler)) then { GVAR(debugDrawHandler) = addMissionEventHandler ["Draw3D", { if (count GVAR(debugLines) == 0) exitWith { - removeMissionEventHandler GVAR(debugDrawHandler); + removeMissionEventHandler ["Draw3D", GVAR(debugDrawHandler)]; GVAR(debugDrawHandler) = nil; }; From 30cd9a7499eda9287e7ae4815f8a349dd6041206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 25 Jan 2015 01:16:44 -0300 Subject: [PATCH 04/47] me too --- addons/backblast/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/backblast/config.cpp b/addons/backblast/config.cpp index 88de936cf9..8c59163c54 100644 --- a/addons/backblast/config.cpp +++ b/addons/backblast/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; - author[] = {"commy2", "KoffeinFlummi"}; + author[] = {"commy2", "KoffeinFlummi", "CAA-Picard"}; authorUrl = "https://github.com/commy2/"; VERSION_CONFIG; }; From 357927902dd893bc5361b7845087aaccbe00d79d Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 4 Feb 2015 02:14:55 +0200 Subject: [PATCH 05/47] Fixed incorrect variable getting in openPlaceUI function. --- addons/explosives/functions/fnc_openPlaceUI.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/explosives/functions/fnc_openPlaceUI.sqf b/addons/explosives/functions/fnc_openPlaceUI.sqf index 1bb78248d2..5ad79381b1 100644 --- a/addons/explosives/functions/fnc_openPlaceUI.sqf +++ b/addons/explosives/functions/fnc_openPlaceUI.sqf @@ -51,7 +51,7 @@ _actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosive }, { call EFUNC(interaction,hideMenu); - if !(profileNamespace getVariable [EGVAR(interaction,AutoCloseMenu), false]) then { + if !(profileNamespace getVariable [QUOTE(EGVAR(interaction,AutoCloseMenu)), false]) then { "ACE_Explosives" call EFUNC(interaction,openMenuSelf); }; } From f2ef53168bc25801dfaca7e19221b05be67d6635 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 4 Feb 2015 02:15:31 +0200 Subject: [PATCH 06/47] Added the cellphone as a item. --- addons/explosives/CfgWeapons.hpp | 14 ++++++++++++++ addons/explosives/Data/UI/Cellphone_UI.paa | Bin 0 -> 34032 bytes addons/explosives/config.cpp | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 addons/explosives/Data/UI/Cellphone_UI.paa diff --git a/addons/explosives/CfgWeapons.hpp b/addons/explosives/CfgWeapons.hpp index e239ed8841..fd142019e8 100644 --- a/addons/explosives/CfgWeapons.hpp +++ b/addons/explosives/CfgWeapons.hpp @@ -47,6 +47,20 @@ class CfgWeapons { ACE_Range = 100; ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { + mass = 2; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; + class ACE_Cellphone: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_cellphone_displayName; + descriptionShort = $STR_ACE_Explosives_cellphone_description; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 15000; + ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { mass = 2; uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; diff --git a/addons/explosives/Data/UI/Cellphone_UI.paa b/addons/explosives/Data/UI/Cellphone_UI.paa new file mode 100644 index 0000000000000000000000000000000000000000..38360ee4da26acbb2eb7a66449043e60a5049491 GIT binary patch literal 34032 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%0A&PpcZ=TY-uM>c!6a8ZU25}nEh-SZ$XM1!r4In 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 literal 0 HcmV?d00001 diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index 8bf463c9f4..5f2264c620 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch"}; + weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common", "ace_interaction"}; author[] = {"Garth 'L-H' de Wet"}; From 749d068d2df21efe4df9b9236a1177aacb1cae41 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 4 Feb 2015 02:16:47 +0200 Subject: [PATCH 07/47] Added IED handling (for the player and support for AI). Can dial an IED and it will ring before exploding. --- addons/explosives/CfgACE_Triggers.hpp | 6 + addons/explosives/CfgMagazines.hpp | 29 +++ addons/explosives/CfgVehicles.hpp | 33 +++ .../explosives/Data/Audio/Cellphone_Ring.wss | Bin 0 -> 87338 bytes addons/explosives/Data/Audio/DialTone.wss | Bin 0 -> 88158 bytes .../Data/UI/Cellphone_Background.paa | Bin 0 -> 258205 bytes addons/explosives/ExplosivesUI.hpp | 226 +++++++++++++++++- addons/explosives/XEH_postInit.sqf | 1 + addons/explosives/XEH_preInit.sqf | 6 + .../functions/fnc_addCellphoneIED.sqf | 47 ++++ .../functions/fnc_addToSpeedDial.sqf | 37 +++ addons/explosives/functions/fnc_dialPhone.sqf | 68 ++++++ .../functions/fnc_getSpeedDialExplosive.sqf | 28 +++ .../functions/fnc_removeFromSpeedDial.sqf | 26 ++ .../explosives/functions/fnc_setSpeedDial.sqf | 28 +++ 15 files changed, 529 insertions(+), 6 deletions(-) create mode 100644 addons/explosives/Data/Audio/Cellphone_Ring.wss create mode 100644 addons/explosives/Data/Audio/DialTone.wss create mode 100644 addons/explosives/Data/UI/Cellphone_Background.paa create mode 100644 addons/explosives/functions/fnc_addCellphoneIED.sqf create mode 100644 addons/explosives/functions/fnc_addToSpeedDial.sqf create mode 100644 addons/explosives/functions/fnc_dialPhone.sqf create mode 100644 addons/explosives/functions/fnc_getSpeedDialExplosive.sqf create mode 100644 addons/explosives/functions/fnc_removeFromSpeedDial.sqf create mode 100644 addons/explosives/functions/fnc_setSpeedDial.sqf diff --git a/addons/explosives/CfgACE_Triggers.hpp b/addons/explosives/CfgACE_Triggers.hpp index 1b686d6092..789786bb4f 100644 --- a/addons/explosives/CfgACE_Triggers.hpp +++ b/addons/explosives/CfgACE_Triggers.hpp @@ -24,6 +24,12 @@ class CfgACE_Triggers { picture = PATHTOF(Data\UI\DeadmanSwitch.paa); requires[] = {"ACE_DeadManSwitch"}; }; + class Cellphone:Command { + displayName = $STR_ACE_Explosives_cellphone_displayName; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + onPlace = QUOTE(_this call FUNC(addCellphoneIED);false); + requires[] = {"ACE_Cellphone"}; + }; class PressurePlate { displayName = $STR_ACE_Explosives_PressurePlate; picture = PATHTOF(Data\UI\PressurePlate.paa); diff --git a/addons/explosives/CfgMagazines.hpp b/addons/explosives/CfgMagazines.hpp index 7cc1c8a8bd..51c85e607f 100644 --- a/addons/explosives/CfgMagazines.hpp +++ b/addons/explosives/CfgMagazines.hpp @@ -95,4 +95,33 @@ class CfgMagazines { }; }; }; + + class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; + }; + class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; + }; }; diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 73477ddce5..983bc0972a 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -49,6 +49,15 @@ class CfgVehicles { priority = 0.8; hotkey = "F"; }; + class ACE_Cellphone { + displayName = $STR_ACE_Explosives_cellphone_displayName; + condition = "('ACE_Cellphone' in (items ace_player))"; + statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; + exceptions[] = {"ACE_Interaction_isNotSwimming"}; + showDisabled = 0; + icon = PATHTOF(Data\UI\Cellphone_UI.paa); + priority = 0.8; + }; }; }; }; @@ -105,6 +114,27 @@ class CfgVehicles { model = "\A3\Weapons_F\Explosives\mine_SLAM_directional"; }; + // IEDs + class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place { + displayName = "IED Urban Big"; + model = "\A3\Weapons_F\Explosives\IED_urban_big"; + }; + + class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place { + displayName = "IED Land Big"; + model = "\A3\Weapons_F\Explosives\IED_land_big"; + }; + + class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place { + displayName = "IED Urban Small"; + model = "\A3\Weapons_F\Explosives\IED_urban_small"; + }; + + class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place { + displayName = "IED Land Small"; + model = "\A3\Weapons_F\Explosives\IED_land_small"; + }; + class NATO_Box_Base; class EAST_Box_Base; class IND_Box_Base; @@ -133,6 +163,7 @@ class CfgVehicles { MACRO_ADDITEM(ACE_M26_Clacker,6) MACRO_ADDITEM(ACE_DefusalKit,12) MACRO_ADDITEM(ACE_Deadmanswitch,2) + MACRO_ADDITEM(ACE_Cellphone,3) }; }; @@ -142,6 +173,7 @@ class CfgVehicles { MACRO_ADDITEM(ACE_M26_Clacker,2) MACRO_ADDITEM(ACE_DefusalKit,2) MACRO_ADDITEM(ACE_Deadmanswitch,1) + MACRO_ADDITEM(ACE_Cellphone,2) }; }; @@ -151,6 +183,7 @@ class CfgVehicles { MACRO_ADDITEM(ACE_M26_Clacker,6) MACRO_ADDITEM(ACE_DefusalKit,12) MACRO_ADDITEM(ACE_Deadmanswitch,6) + MACRO_ADDITEM(ACE_Cellphone,10) }; }; diff --git a/addons/explosives/Data/Audio/Cellphone_Ring.wss b/addons/explosives/Data/Audio/Cellphone_Ring.wss new file mode 100644 index 0000000000000000000000000000000000000000..bafdf7596a9ca9e26d14a5daba6935887f79b505 GIT binary patch literal 87338 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

^*r4RY<=DJnI_HV6Kkq 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 literal 0 HcmV?d00001 diff --git a/addons/explosives/Data/UI/Cellphone_Background.paa b/addons/explosives/Data/UI/Cellphone_Background.paa new file mode 100644 index 0000000000000000000000000000000000000000..9cafe97af830d77d6d80293fba5ea24bd9483562 GIT binary patch literal 258205 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%0A#z#y(9ncxELCU~_D#0Z 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 z zNKfu6fDmxk={EP_tgK8hO?-j!?M&rnze|Gqlrx*Lk9}d^d&vrfR`E?G|n%K8CX?K9X*f>+l>*9+uL|M9(MW8 zR>t~L21vS1`~XI&p;GX3smnekXm0Rk)Ha=%VjoX~7FU{as9XRrG|%h3wzE0J&!v*B zr&i$cPf6LtC`8y1pBJG~+y{mSJQ@S!tl^(8Xq>K2JElXQ&`RaK$x;TS?Q5l*ib_ta zyRi(GKLgQw_7e@yKZs&p3ivshB#>pPT zF59qdl(9S$?<$&Fu)MwV02cU_;j*B-&pt2k7j^KsUN3rc7^OEh+7}9IP{a2@ds<0~ zYa&a8McCH1oRWM}?uaJOAzlbSrTwhCOZfM(lV8X2QD$c&Yx!DDHX@^|fYkG? z5qPk!$AIE($?1hkPMLCQ+!aA6RU=lm?P3)hXiGF{;pL#cO}HrYlq=LEH~Wjbf?AGp zw*e<7>azA>F!?5sHy(tYm-BZXG&_k2=nJepO;c>^$#pU zP-KC*vLcIhjlYT!CsPyG)*V0kz=Kc5X19dIaazDGTK5`wH}y3^sUc} zP+*6Q_UecVB>x3!(o`oTNp)ajO3G<4tGr zRFFs249q}vOaaV!@^9AJvJ6;Tmh zBz=dzbpi>r$LJK^YWA(uGGJO))0aML`VmW_r6iwG z{4AcPzdzT@WQqY7lM47^#&k@%Q=-23jfu&bPynG~FS@=&$tv_F2M0HS)s%{kq=jcK zYu%>lr)c*B!*VJ=3v9NFZ_oeX+o)SdeeHaFf%{}(hKHXEUgjs^ zf#4nN)+`-2msrC($4`S)>Q`-nF(%fz@0jM>dkM*mVbjl&d}5{M3&ybl(vu#qW_9%d z!ctN-vWQ6yOwPVJ_uOCZ8BS)R>BMt>A|e5M<$n;sc(IJos77(6w7rxE0HydhZQbQ! zqlh3QX;zJ(nB7beZ1nRWTiCgWHLYxP%rgDE#GvreHdmRBnhwLHo2(tQufw9Gs&1U3 zpsW&O5Tn`&74!^hC$=8ru!^cyl_#&lu~Jj~G2^T}0g1Mrnp>C;gJi^Kefh$fXxun; zlCU#3MV6#tVQ*NwMta7y2gkK@(+Dqo@>WScMxvql1k<$gyNJ#*f0V1UKG6jTA~ln?ZNbT!`Ei`gQk4 zY(jl7G6>)37b=~(1GGX(HgcTxue)CuhWTV^@{eZ5 z7CLpaq~#~RA5m=rO7-Sc3~7Loejp&i7d3z*P~@{*pP<ULQgVU#k%q8qugmbI_y>mbA=ES5*L59n`SSkY|#XN0c*x zaR#;dh*ExUfZ0l$^(q}bhlmg&&1svfOL%f-b6uryL!aHwTq>;l$L%~OcvC-k<6Y$P zyD=jCN$)@xXG~Swe`a3v5v!`cEi$v)vRG%7k9w#Y!~-cXNK=eZ^6+4d(H|9ghj_k@)SaMww4r7m%Zjeu+$XcY*SD%tjy>GBitw;8O5)p6Z=ZPp zH@<8H~0U)n54xYx$36qOk%CC2W~7sL2Mf76Mz6xyCluLP0W-6rp|b zUIeY|yzPQIuyj3be=;jOfw6dt!;>z?9ldh+4RBPD=UW+!qvuv^@X7Y9jXbpV7XQQ! zW#NA%d;dS0-aH_xy8j-Zdk16_VMxQF6fQ3J&P7DZy@46w$r3dc9YK~El1dU46iI~H z1ad*tGPeqZFcLwatZ{)^P@mK!!Hh&%TNa+l7{$0f0(&j$Ib-54wG4Oqw4p}%#DsG`u0KdU-X~9RS7GD9?}OEG75bYH zacHZBH8PJ#-TALMn*kqTV_}LwKw{EOKF&~NK~yb(yq@7#T0!VpjU_hMor!o&0!aiL_HK}h*x8dvhl8}Ha$#O#97YhX5o{%3s{Wir zAq#heU63I#Qlbm;0{av@g^M_k+)t?~qDEf{f+J;&Nuq5hoIfw@%P0tX9sod$;sPq% z8HN+oWV8@RNWSE%$;dS*VxfqR-}Tn*0aO$~XzJ9>EWoC|7ePQzw8W{3x~Z(%Mr;#* z{W>;Ab#+6uc1J%n6aoXSysulXt%Wfe)c|i}TB-tZrv}IhUPVGid04NY#aP@Um)Ooj z%S@H_9RK&b{tp>jq;kyDKE@R2Es9JcbCC;6!EX%^1fmoV6|LIV0tD*s`n|Mz5%v5- z(UozmQ3b!rR)Z{rkw)PwRk6whiQ1ox{yD+%UmR!fgcUJO5{`@Ll|j;2G}HiHfNyQ( zj8Vt)8;=K1^CwnRgDa1Sa_T@$>L)juu=Czxp|NAvE(tu7_a?_Js_$ToBZ{M2Ez1fGu6l?-CVrhXRv6*jiOHQ1TmO@&k+0B>v9%eZ^JVTh zrF}Uni57DP+3RyT6=PFUXX>JcTfB)pKR8rC*L2(`)mOcQ_9~LGzx|K5Q{IG|hCP%T zv=YH&%KkP2iGT{9l%tRs=LKT5*eLMH>sC|-AZa8Dt!$W}-_xs368?^%d6dvmDp9`! zHAED>XME&U-oo<&h0podh8Y?8yl8>9(*?iJ3%w!}xgK1j*M!~k6fss5Re{3GlG*{4 zp3#WAJ-@ayvOoKCE_ucWp_jQTiuleQm5{sBit66D9z6-=%c%;*N;+&5N;z=72PL-o z;M%Ti2n6#vFSsR(Hci}5g@0O6iD+lRtZ+&)TgKP}n-gA&!j78wlbCwjE(t(iH{c$? z2b%sIlSaFOe@ev3(n=m=dZRJ}h{iWP4s2IP;I<9*-LZpX73i2>na!A;TqE3%XCdl% zA=;N(8B@?mQAB^Kjm%nK1>TS_zzvy$MS9)d7ikY>rrn#}UKI1vW@y4AiQrPfn zHJD{-xFCOxO~@MZ6%fw1OjjfWrVtOttQX}c)|N7kZK3%I=PIBigL4CR7! z09}j?%I~lut|KB>WHzxjY$F;z!TLvuAom?O%br#R4^_dDT0jAq%^Y&jn(3RNNd+i* z&s#jY;qmnjNK_|1uy{x~^WKbf&*T`!C>2hY=#ygaFk!E~?Ijzib!T+sl{ugby*8WD zRwxD;nZVav{GZ4Tw zJoF3#>L|eIN2hb_V~jN3HT};gS*&pvG4M2fn6=O`X*+1!t3Ht~%X0RDHvn?Zj|Z|J zm*MKXi`b^CEatEmffp3P*b*G5>LSPU13zKw7vaG{kTaGsJ5^hO^6Z z-7sLB5EhUCD1dnS^C~!3p=mF}9t7!mst9GnCP&8>R{cKF5fF&1B`=2-w|!lxYB+V^ z7h1X)00o)TUs(w$DStBOr14f8%lQj?u#MqC+3u1V0pC|@kzLmdO8+guk4s7`8O@TB z;=Gbh61y`Z)A6Xcu@46tL!7V7h{!3BAXRln)EnLW_6qHswdS`AJKArX!fVfW& z9;6+`E6YcmoiT=&Uj#&-^*Fr?JX@HxWuaX7P%AQh* z_RTe+2@vp0Aa;i0^8Bl6d0FDlR=41rqT;X63u!Re4+>or$}Ao^3VwhUa9PQV122Mb zL2j+B$1=Ad{jrU9gdVK+3c1y11X6~Gqvc$^$%x`UaVzfJ>YffPr4mDeandIb!DO~cDe06E+H zuzFX*-vWI_Fr?xhHoa2tj^ zkT5_%yZ3geGAaAFMyuJ z{-5Bx>tn0G1N2LgQxqgk-V ztE4*{k53@n5vpu4A;f}V<|bsZe7oKdBr&~Xa=A0m3vUeSP{RAfgo^?n-T`iOv2}Rx zB!e1!bnz?3bcp#2;(PW%P0Z<&>V2tlJxQx4kV{hk>y5fK;?(ByQ6aU}$ctL%W?n#Y zd3^=+LkKLZl<@3)l9Zdj?%P;&Ezle5{)!yzJ^6kx}I;5BQJFepzN~ z6RG`f99zo|+i{6per!LTTz~rg*D?)!*7=FjE%kr(C~fz?MR9XBt$j*s)|lh3@;SVk=ZqVn^@-XKeQyEV>N{+5q$i_M0$E-ydfI+~t|04n6T z(FcV>M%v}fal`E~D|uf-x$xZ0L|yYCUcw>vlC`59^kBbFp31;I;YT8y8oj2$r7+F$ z7i|o~0UKSs76DiXf#x3%#OQhg7>DnKz~hRC8G1s zSlTw*`N+*f)e4mZlRDiQa~5rE^?`}i;4Hu#P=ig>EN{lAB`Yoc8ySBEw&UKU_DXD> ze)8WWwo_!z-vLQUSk3;BY#&@S7n9b8Q+NY)HJ^|-OYMDnjK_@X9yBwoOm2~BQGz4JWNCATSY3DV(<4}- z^%15x?if)rW93SB$KKC_u5HI%idgQ%vClx4%kha^khx;em$=j#$eqakRKnw6unw%H z8Do^n*3l-hQatD!={`fIJ0S|h( z1)d_~|0=sD!NYCNIN6)>lrdgHw5%(ugg~W8j>c$kz`=5wt}g~@b-vFyzliAXF9bjrz&{b_?~bnRD}gtZzoljdWBM~g#RUhm3@6(eDyNJG zJmt1p`>hhqt@n}zg6QbDxc~Js%PM{3NyPh5Dpqj^4~}7Ft*4Jb0RNRU2_F(&5$ESI z#;H(&G1uL>!>Gp!PnTD@oxo_!?6sK<^XwPrtuOw%ht?#7h%Z)s2|}5))2TVbV|i@+ zCM*tx3Fk|~kKWGWrL&);x_M5Tf!CIh1x|0QTJ%#4!S$?ukCn>B#Gm^hVW7x zhm)*vx^ZBQWKs)ysO2yju8_D14Xo{3!qHu}i_Pe-5Y5btI6O0m+`*30Ma z(Z!AX_I(HRH7zyqXE_r-a|E@DXkZ*p?sF;oB?JD)S2stxFj8kgcUzmx+`S$Aydn0I zqw-igW1A!V@@CA+rvr@IS-7<+QTO&B9Bm_dRJ73#o&>F?yreSdYX@k`LTKAy!V|K5 z=gxu`Xl2M-Usn+Bn`Rw&{~kD~GV@Mdrk4oK+R52@SCt z@sZ0Amea&2UEBv4&EzefUhe42TMa9f&H~_7SIFXq?>oc(SIhnE;6CIpbY``=>g)f* zFtFz~mXKc`Yj*k7tBRw;PMoG}?-2j2=pVsyegT2awC3$W)xx!Fb+r0j{H5K|4Jh08 zkbgA28#)7Hv6sdDUi&&9Cn1J8d&A&ug@1X{7puk z;r?u8!YBS3?H+&lB;t-Zw*$07Gk09#(;y@64xSkoXykm(TUPvQC5jv~l@!$8l1oJI z2@V=4bvQu0SLW%F5!yupUn13b>lPG?o*(d#Xu^FdE)&9ZY_&xE1rIA7{?ZGZ z%S|u)kZ=cy-neER0~=kB_{n0Zc#|D*m%M~QFm$*0wR3YsyB3kY#H$YMPi%=B!hrj= z2QCv2*Vgzp_&6u@kG;g@*lS!Oz_p#2i&4&yhguUox)New{c}sVx#I{ka&qp_Qo}8wBM}ob&jZiUgk+@e?9|Uv+ z>XvpW&+}hJ0TpM)fPj1S9Y|Y&x}?93gWZqzsJu2u-hfS5%90r!QGk5@CIEz;k{O29 zRwzGGvKZ1Mm_aF7ck@AE7DlJxNH8%`*PI#S8eE!7{nvt7n-js#@?%)bq!qf=v`KuM z(#ciFzopf*)0a2Te!4m-1*3PTTjg6m1SC(ZKXy8t8JlR6JpNKet5r@}AI2*Bde5TZMk{pF`m!GV!q&x(#zbYGFEw-Mzn zcWqd!Ur&xMzLNXB#P)zxlpliXHz}wgHx`yw0#=YuB6ftPXEEAUN18@m^u(5Wm~+B| z$2lok*;pv@CmIj87+6QK@isoTk(8+|M{L@a1%s{9O!qcaF8N>-Hwr5?OiiAuUbwkvBmJrc=inornxY zVi>Dkl)+msmV##Vyhz!YYy>n$1eEbojiz$zC3B&H9uM z|5c=RaVifEqji@>>NT(Ba)Mjp=`UQJ<$`EzT4J+`A2q)3@PFe=@%85;tou0MOY2h; zlpuGA)S|FbH_$$z)E)3RiwS@I_d;|4@~kF6mO~hBo)Rujer{9g7-=YmEp37cZIIC= zrX)9~Vepl{feOFnureBI9|gwDtfRgSp9qikzo8bov5pK)zgVjCC1+~-DV^TYoz5@m zcQxF?j4SSCP9y9A>co-PyN;oY4cyv9$(9Qm(iv%_aHmACRAAS3+*OIY1bp<^OVA(> zg5WWvl?*k5TV#BgRg`D1O>$+_=ZHnADgVym_8-^w(j|M8mVkYuRuJksNq(0&T%5@=Y9qBdg)B~FDrRHuN|tMqJD>9Nm-2Sia4su*|Iq*%SJzdSz&&WM zy<_IJ`VSqN0lC&v;!w{&iF_ZGb`6fZDA39(E3q~2kJV3oXBH3{7yPbu%p^}n?TK!a z)PqByW&nsKtc+3c(T%f5y<~OV+U&C+ntD^Zk{-zxY{+Bu^HHckK8n%GCsVO@AXzn4 z(N01}^UEqqJ%zaU*nzp?heXGRA7K3Z>AK0i{^a(tmnhxDggz|uO(05Zs%uzXYHQXN zTDRk1b&4{rQ^_CusJRU7DKQ>HWsqRjfNAPamUo#8e_~8NGe%u5?vR*eeQ_gaF&5c- z8UGcL9V-#;oXAU|!IB`_B>Y?)`9(quG(mm^Qn01?nHJDBE{R#T8`ou$cxIkGjK<7z zU;M~;Zqh8%SfO4f3^7#Ka@|J=0TJ*dry}&$ojb4p=TqoYo?hSf)g=}8Kc$!V@kvk< zhe~|pa-Rr6X(EqI?_PaB7VENRo~Y+vw+%ed)@apkR|ET)xVj2pt;f zW}&q`TRD^@fxy^JOf2?SPn8?y+Cy zuxdHD0gZD6LN{limXu|)GB%x6Pbaw6Eh|w&j<9USn%+TCE{VnVF!L*vwk@+2D+6yk z?ai1ZX^l;S{G0RO&#rHH1RF4AaM}oIwIFmR{&>|@jl5X?hiG~3ZSCV2`}kNd7wTRY zKQfwq>0@2>HU2mbX0w5sDxe)UGahS>9AlaK{m_dN6CU_Q+2!u!v#(rn`O7d?5n0UpJsAe|uVMWerf z^vPp?)~o^hiZZ@M9P8@ef%n#H*ZQ7+{j@0We3_oVdXt66=jc1FO2+sSS0tu&h9{3X zcqY36A|H2<;;zZl6RjNU9sPKWu8EvB(WV6UJh*q zW{NTvF|^u))WhMEXz1L8Y?MzV_a&@gjsArCS_yKpkmwtd53yX(ue~k44b^_~k*fqr zO!%_-l-mT}I+6CfpgTB&4}7&5gg_ubefhQ7N}EQVNr1CVOG^hUn`bfwp?MJ=GEAmA z(;0OxsD*!x<^R$oaBUXF_vR+yj;q8T$~z~gVx%Q|u=NIQ^!L+85T9k$Ll{aH{AdSl zoF_sZ7Dorupm)9@mOm8+dxiw-|M1Jxz0}oG(r*drPe1(>;9JCxDCao*y>dlzxp;5s z)+TS42>AxSNe#4>;NKV-ZT3Xx3pbM{FEz@oZMtcqi&MY<9<4wq0J9J+hhmH;RouUf zci1orEArW!?qOG}j*`7pDbpF_UKFwPnRYyiIO4r{A-Dzvy6CqaXuCVFvc|bYkF@78 ztDCDm+AcAEjqac^DsBlcl6Ig%vhwEdzca=+v8+Ml0q6kDzt!MTWvBsCFwmm(6=3kz zMpoB2W+KSW#xaYrC;m&PI#hkVuC9ZTj)B(IQ0_iPx4b4}E!@q~R|G{(@@>UyQHpm* z!pj0xnx4qGS(MB3$i5gl+lBn#`xBD>IV!v}HA$jArzR--Eg-#b3+GceW5M3By(HF1 zJgS-SfO9v!XwsvWc1*IiQ=BTW%FbVrtxXrreb|F_K9iMAOJ^b#jlI-0T!jG1)20)y z+BB^0yO`}$X_KT*C5(^5dcqulDx2zSt^&5KARercBgd8yCF2=C*5aI7iUT5s26Jh+ zt3_g*4@|(lVDvw%?9bDs2@+cz0BEgaF6w^)@ho9eG&FOr5YRHA{DkX!Dk{(+=ZkXL z(r$@#5oNJjwa8;0!tD}e>p@hQBZ!aZy1Anvd7P7Y4Cx|ZN z1^G|uu)=2Xg*yU0K9(jFb2~!Y4R|xextmQHtVV_oGnMG7zZuKlgZHbBJ!fUkNxhge zI{{(I3qLcJH9xqCI3sx9DYLq7wLmWi$uSE8Jf`>ek58-95y6_&q2W!&iH5#53pko#G1ybsA#?!{iO&@+DE>mT2=6VVBr zfVAv+)bGBCd#2+C{IMhzp*Yww1{Y(a!~bf#NG=fXl~1qsc8);LIO41)lI=L3yyq!d zsIXrlziL{h4#o&B;Msw6D7(Rlww>3+O#+me#Dus7l(LD zmAjUc&8%8LG-`7|pqUq|zC{~f#cD`lR6+t{n#GCFJ1v$A?8Fe*mud$#dOPv-iqGf} z&HVq?g5utKkWyz8A-!$8!TJvh3#b<5sTE4Fh(;6hCHPe%SWj_>Jxn)ocbzkCT&nutbs* z2!2}EaAGTzt%kSQfC9`oe%QA`OiA0xa`}a_t4MX=2Q@b#fYR+9v^v`-_v1Zon97?@ zi!Oe2b?Q~x=z?*}sRN}I!-!d~i$uBKSXF%5{W!X`2SWc5E=m}z?lGZ#3^k@_UY;_f!Lbt#JN z$$dGjk)X^E%qgDx23X^6Vu5N{!x|?LZ%!G7G$A9p9JXv$rYm&B(zbjb!EVAWxt2y+ zTW_5LH!*aKJ0+Li0^Yzj=hM|Q%G(lEEBLzC;s?{OFhP(& zN*hasW6I}K7@b>2E>6CPRs{Gy2*Vj8<2^1!$T23y0b9!*MIA^+y|fkqbr%V%BCJ)x z=rdoibYn&Vgd|MW|T+)MilBEz1Sv!pj-m~cf-h9Z{a-oY09{X1;8_8n3gXIVI2O}c9)^f)tH5T z;ry&oJ$a zlhG2TQ-M-3s3g)Q`UvU8${miucn{ zm%~Ux~ztip&phDeFvSvYdcmzsFfgG2z!>4gFoltdXmOFdK-kP-evvT%VBh=j)i zt1@}GaQ^|)y|R@tk2nS2s)+Nm!5OWrV6@{8R{P}sr$z+{V-fLj8SaAjkZ66aGhx@LwHY`4JdpTBpkyvTT znh42|cOPaE%vrHsCF&+cZmd-WbR+1BLW;8 z<|zS(MZ&O2^el-qL=+h?#Ort`;e(qoE95Y5w>xM`PEE~Wj9-JZy)M?q0K-ostZ8YJ zc+uuvy^G&wE&jP@z#SNmt($=1w;)>Q>2#{FH(IOWKpOi3ia~NclIv^EukM*d1se=# zsj`L3!E1J##H-(~Oc>5)b!|_-GSjwglw;1Nz0SaR0KWQ~wU4~^u(Hu1(w|Vc&B18S zYu51~RyHTQ`zK%Gz-*O$TRB`ZZcv+zWO-$7nU-;k_J&*K7UD+H+9;NrWxXk(j0VPb zO88pGAwxRe*qc7*OO>86qxjdJd@?(Wl?D(T*Yb=Fm(Oj54BKzh%Ux2s)~3@^C%-&F zK}Z5^TkVtAFv8pJEBKC@*_NLqalCl5Se%!y?G!N5PbXyw_JP37_ga<6m7YkpOR%UuTk%^UN ziD~?UQ7)BMNm%%Hd>xh!*Cjhq0=;8^vH!Be%Vo6!aw1R(3hjw8;RAsaOZb4r9dlvQ zHDaL3U1EHYIPA`Z8=n=8_+FoYEu4kRL>D^aG8ki>&&BWs!aJw}ET+DGTDsatXxBP0 z_!!}HQ5)BGf>w(my>VquXZn$ujKec3YSr5yd~RR8I-9ZmOxenbnEDOx@wdotlRNA+ zJWl-f5RY~gD!XMWO$^441w-I1bWyeiMAv;wCK!=T6{AqtXC^EoPNe*|01udgufs7Yb<~R<47vpGIkQ+{6Hg;+v=t1 zEN8yg2yM=0DDU=0Cn{ERjIG2Xl36B+RFYcIx*(Cc53%dwjtKB$J^ ziwvqmUg}x2>?mWrivy|2f})O0)SThKmvGbIWV%_WW9-%Wl*{6dmse5GgZ?$?ZYHWv zBYu~tyL%GydXzak5k$<0{>ErZla+z)qA}|J*juqlos6RsV4$T`-9JEu&lb8dwpGH| zCgra~708K1jiVmL%~r!OEYU~|P+CoKwqYGB{gQapyd{U_Mq90qBrwBxRus^EI|g+Q zxhPfNna$5;Hx)7wohYT%?~~@WQ3tCTlYgBk_tRY$QGsL*QkJc@%xsA|PV5nG&BkP^ zp_J(E8|(ldFLxoLR42YAw@-MVFJjpC>K<12XKVj|V5#gUm`B{vH0Q7~!hFj?+n)Ie z1s-K*X=xT#ul5%f%-%0Cegk@0Yp0%{IuaX_V;nf|SYQl_S2zGr`7{&}3SA}gM3@S~ z64HCbrBFp5QUsB4JX8^+79>0aOT$b3ou`YL4I>`lPe62u(r+|WRa|O%$2A=Aj>n~;)?j=y}M_o8Qbi) zYDnMnYlkR@S$l)|{Z*dCT>e#JE^IgDQ>sDnop4BWaiKdL+l@-68RfL3GYi{F4d01K znSnq3(7W&;a=}?@#8LlURRZNbS$~z)SDylvl#$CbGS}lFF9RGEv+8ji>Jv-eYLmY_ z*(XB3T)~80U##K`)yHUi?i0%P1|=w?&C^AjU&~V^jXjBf|55VbwQVXeEd`rkZ7Nvs znbU%=zWuUk3a_?Rydia#@2fMR|5G$p*r3Cn=i{9357bFPj)BJUi4%-T|3Z|vDIo!6 zy4)|XsU>x~mNknsR5P8d#JH8REbF$a zc=%;!Cn)ERaDg5V5B)|#w7vqy?Wkl6BEXn4renwM<0#cZ3`*51qB5$QW$d%FD6{-L z76E_qX_!N#KU9KSF{ZDsf;N(VFb!GVV@10^hL~vGBp2TQ6xKEio- z%Q}5YDzlop{7h#y!gp2H<%tQtSgco)2P%@-I-K0X-gAs`I8YW)`Jz!`+ycAu3%jc7 zP)A#juc5UdR(c6fI)6jkMvL|DlLumJY!)CSNs7EmS|fcXj#Raj?u0nWsRJ%M(*&-x zno<$@_d(wb^UF(8bf{^&+YOa4r^8Ci=G-U>b@_HMy98!egm?bc(~RBql-A$X0w@|W__QNwI>c2rugU+Ja{91?T;s-rY7*zvUx^O3fHL}Elh1F;- zqKMvM$7R+evpT2o3zBVBs88gr_$jx{tqT4E4V8?-YOt&}2)=e7`;fAdTgaBeL;N<# znH+HoAMoPGxrVb2|4LU>`xb?WoTu+(Y-Xp_=)VGDUmWId!`qS*9wh2ce=LJEBos9w zDTF`VO>1&D{A+J^w|OyGM`@aczVi1dV+R@4aw6astLxbOLQ5NINS=Niu|K4WMQwb! zvIk3%B1)H0ZM4vqWg_)MKfTKNI@3}z?$%G^CcOS35x;yT@3ghi?hme)pTIrPt{Q_n zv)1S0*+YklfM|A}DrD6b^cuwGqwQaT{*t9AM(hw!v%*q&H{#s!UYorxkGsDPI#Lj* z4+#cEZLCk;l-9guojx%{?7x`bT*w6p+(V|XNQwfylbWBUw8R;6Q%x19E- zE{KRxfWS$>A4oo_HI5JO8}sK=WRL-NTcgWI4GK_q2u_pFiae6_m|Hr1UdTl0Q92tB zLKmx4r3hle<}C2?H|%zY!yvgXd4LN-7_AdFrFxQp_-reP(mFfGO3x8<2NUaA^^Zi) zv2ZA^Sk|Opp*12y!f|3lMuCO3sGjl`I};R0;=+Eg>o|X78(jWI_~~Ut?F$P)GQrR} zEbh+%H?HWttABt{Ilkwm1Nbuf`2MYF{V05i-R8J*P$1~qFlfMmWq3%p3EDLNXU^(q zvtxQOW(@BA*g8UCrcA6m1SEhPybA~xO+|WsfOu^jO;AsqP1LSrV30Oxf-e zk5jZO`O4@q8`a55qlldoJ$UBZofiO-CsNW9vbyfGE-U{PUf=e6VGSy4Wg4w^_(ZaO zRx~wHnF&jXJF5GCv)qFHS8IdtwhL=dPiBn;grW}wc%8?rR;)IM_%uXPXD>j>_v-zC zELg!1>yuZzveLZ3@M&pT05Jk}vdUB&uMoUAdF1l;fnkSfosU@CQ6kr0wtRg^e0_S4V3;g87_ml4Tri{_{zW>g)2bAVwy*5_( z5pdI;Cit;%$+{IQSN#8w?7tK9xn|Kwk+W?dm(bsou@awbp(wK9KvEYIUi_>`yzR$u zMtYY#*Yx`VbUOYp1M*VG#%7`GO#>V|hF{NFUo<$XaRtb;6#T8?gD&HKy#aKst>X{$ z9lnnVzlL)~wzOhDWMWH|@r=KlpWu%9My-`|6T?J!<*6v)LwnxAiy$C0<3c}*q zA0zvS)Hk7Q;OrQ5i%{6Bz;^p-WIW1<3xlGF421^*yvXCj(h66^-vIV&NXsSr$vX&r z#jG-xJ5bis0}*)M^XbppEDMiHb?siy;gs4RZyoCdcQ4=D191qQL);70!AZjBMgQEp z!V|u0B!GielyM~?duTV|KHNR@3mrzRfG~OO_tt9Gku*>YB9fo5;q)Ll=cHd`=|DXc zJ;#hz*-IVR4R;a?8i=CdUmjoxO(A`RAAo;6PW-6@a|0J`z`=5x@)a#TBo^q%!p}y) zGtS~~{q77;c3f6yvv%M$%I-W$<~N5o7M{Ew3ON*iNMNvL)P{SaW*RsHGrHgisY&rFQ5bP%Ny5iJV|SI z*HE06D?#UK7Ln$`awd!n7UP=78!IY#O#!R|KlSFAQDv6`F&|622-13_J!{WB@*SC!>Uh=`p6^a1g1b$kv z0E9)s9axzT?Xx{A^2Tu7dB`-q*t#hh&TKM5J#^;|ZCSMS(r-9P4P;i+(tNeVl(b(Y zN5oUz*@6&}dFw1R&HeI3bLad_oBSWEUY03$)5e?x*v#%}+L6L?NzZl`(%NY6e5bz% zjcGB4paJbxP{9ex_!Al5GWg5^Ru{QAUXjrOGhe4snP(`@ ztGkmAXpv1bf8zhUp{wU9Yf}+RB=yK5Dx%@emC<|w^;OB-Q7q1vPNC_B$4)@kxgfON z_JzBavNi!RsNj~eT3Op_nA1UF=FxFlI^9oSLNKK#U+1ZZxd$%?@cBY`Fb~q@{sgo1 zLLtK2n+NwF(1i^k8_8Q=Kw4K`2+NdIa3*3hZ?|#bu{u#GUSWV4NOdEV3!d!Nl+23N->O=~ipC_`%&L zC(tHAmPj8?2(HIHLL@M+8)mp*!(=g)1(~Q(&c`K_#GR|m{g53ZcTk=!EfQlhU>8@9 zT>_-68CCF|d3Z=fT!=w)6U9)U>ELr_Cn6|ME05V#k!XsE!L`{>c00+^V*yMN-w1B(N&&n(EpZD{Yflm>4s+biW$0rk!( zPu}{zzy2;vz{j>9p|Nw`L|JBfPIY4(Z%hLhQLv4At{_tr1`fM0>I{Ifc@Hgj80@PD z$Loa!C=AHt`v>pN;$0A?#Mf0qbw~HU;@W^j+Kl;yM@0_`d;vKn-n_jO328cnj@ymq z9KH)(lw7H}W06?AljRNI=1g#2oLcUk-C3$9d57UzhAS`{t*&}-VO)Wz!eEkh$mLtvmjYOHoQDgKJ;v%!`h~c z^?wpZOTCG|RkJ!?JB(ho6U4}ENpDiN0K!~#<{`hLr%+bzLPd4WKA%=g{g6K#x~^XS zHC2pdyYVwVIa^8FZp)BR>Ro3#$d#QlfJ)C^azZD5U7zcal$D%b9;&%c>E_YBM;TXq} zndPa`(5_n>DCLNyPudIk6S~lP??0^6LRi*o-)6Ofs%MZfZ_g}m3_{p`oCoMc-3WpB ziBzk>6Y0%KT^VHxnOes~E;?B|)ZiUnBbSc|Q6>cG%$4Ec5@R?Sr|T%#%%I=zjjr7B zVK^un;|bNkFnqyf)!+)LC;ACX4%>%8b`;AwGUEHrTF_7Z!COD(RXxlb33x95(mZ_z zAQOM#8AEk&WTBR`clf}hj$ziN1knG>0G$7i#-;>rteajBoy0N4=kX6?8$&$KSUSX; z>TYd%oa*7>fnlQ0Mo|NHZqLVkPC-pV7e$ACv60g01~xo{Fy$8)@xKugxz1oQmt9!+uywS<>6;cSCL2OC0&;v$>75 z@wEgInLM!m&HnGg5pG3gP zR5V~Elx*O^(QJSDA3hDE38iJ&%AXHyRaF^(j!*603+a)P5rO7^>)lVt;#n^BXa4<) zO(_sP;Y9-)^kh&e&oNJ4pt0j`NW03g=t((jBorGbzbTRvgr?B=fKME!a^1G` z-#dP1*IT#@Rmsj0wH>pAhLXT8#O$h}v%d1b(KwR%9{b!+qeVEaMzuW-RXLf@E(zJm zhs(-#+j!QJq~go0*Zmr_#9Oot60H6?7kZF)JBZZ1XZEtj5<=VEC1dTScIR&gP&^Pn z4r>AGbP!9cBJbcw@6k-ArB{3|j$gMFs9=Kwq|<_{t5-Al0l&<_SU3E2j&tcu9|GCH zlX8(Y(pVNeN*b)aM+E?5+!lCz0!ufMAc&aLkaP^7^^@Aepwx z0YF1Q+&r0(&1cnCNW8OZGf_}b7R5NW?~cMBI(<>NT{47mvZj5K(q0|Jv#EAPnS#m+ z5bKC3@o~2pjq`fS7*5pwbFhz)YGtFmj#B zZOfS$I&9f`3{$fmVRYDcdsNO_`en2>*jw#Gmah0jV$_q-KUkXU8MTTSxxD&QXa|ZK zO1x5oJ={+Gf=#DivFQ{7%K5whGH5?XU|(9@lx9~#a|cmg_+#P4ZF$gu8w+`z_F2ky zCVbOxg{uw+GhuJ;4>WaRn3Mqxi>{{_H^A63IJqLYD;F*2?ZqnE7!P}#_3rl+2E6x1GMc2zsO@MXervflwXRo@xfS}ujjl?O&SxUWE^8gV6{G?nm@7agW68M zBINF^#VUhf_P2?+4aX9OHNM2`o8ULBxU0a$myyMJRWBhI;NO1sbdZrFIQ7%Re6)&K z+dlcB|AF4S18-FGH>Lh>4a(m-;@>he&O>qx0Th2BA z%M~giqW*a{$ba3Jq-6?T!0i>lSc{yWLB%kljsR>Si+sA4Ha_&rPX;VO1DzUqW^q# z*7HaFXO^XVl*a#x<{2gBEZW+P9g?m$Jo5SZ~ZkpLaE5;mBVJol& zUbKfOuHUt?8!ZrJkVUf^^L5dMaYHCafV)ZV8W>X}AHxk6me#IsO7;4!G%1ZXjt9v; z+F`i}Kuvb*tbjJM;)Zc#bbZ&I3JH*nxHVecc>eC^==!gq-Tk!K3?;E(kcBl(dtr9h zNf_?yATUoD_B;YOH4*|o1+_i2-D5EfFps@tOjE!vJs;vl1DXsKHGJw8T>j`&-G8wJ ztFvG9$y!RRT?=o5{}I|9-o)pQ^7FC??HN+5u-u|7(@Q;O@c0D;x4^Y zR-xa;F9BwjCyhVt?WFf7&d&M-6j0yF%3)}zWB(}C*3O@vh<&HF@#W6Z`k_<&tNv{` z2OS^6Zruee68RHPD$l|icRaB@?`jQ?L~Ko-`xgIo+B0=8SgpMO1cq(5N0&P-CGPZO z&&I`Hzr;ym+lG!8n&nphZd|tY%*6pZ5`@Y#>=jDgKs;(Gy3Wch+4^;~X8bb>W7rNy z0oI=ViIN_xB}i9tJuwr29MQ3_(hFZly_gN29D1hwdnc?t5~GS#x7-MCgH+$|anZDT zq+cXAJTwY|FYRPTYsbkZoS2T=M`+tiKuv7K(N|x66=5FMV1VCqal^XrSP;M`Q9I22 zSt{6v=k{7b5c1KN5%H?1ZdSU0FrN&;RR||8zW8Y-Uit9fOQ7otrep=__YdNL55Eoz;{qyxJ{~4$H6Q1trULN-Rr^?_7P1HZgk> zA7(nW;Y3VP4z|s~O&zrddY&yS)md1&tepzE#p^zi-W)XY!@T;H&MOoc1?$kuM6OM7Hjrnhg)=0GoPEt>|LF-Aurem;LfeW>ufT1nmv6zGTG9hYK_- z&&h0;mE4AS6&Dq?7L`0gJi!UvKKod(+1nL#yG{Aq@<6z1a2kEkTb&Xci{>a(#d%7g zaqF|caIA3N-2IfLID2g;c+sl<{w9m>w%}z6y@Y+u;0-88w5*4AS^(Ar7bRcqbuC~y zRZ#U#c-M;a+TuAZ49{EgIS)>7GVE>Y=7rsA;cd;=CmSsx1B^OJEVL^9eW9EGyFy3X zV!=ENPIf%DVv?NuUTQMHlPAb2YOWU$MFjbARCfAVa2BC8Gl_};{_#E@>wIw#q?~+i z8cvEfPV>M*uk)*?73JI(-A-0oN-U3=u4ko5#J#+9_$|v;TF=vA&rVYgnO(=I@2KmE zYTnzPlhv6gNTlPTTU*+7G)Pzach7A`(^-r~XT?f2$dY<(4jW`VN^tRaW7#lyfZMxf zNmxUn`;xd07Feb0$$vud##tYToHPLA`6v3lOjageFO2jhK6s{l+11Y2kNrRymBetn z7g!{GU5`RX++Ziwf%>^gJhu1ZSuGk78R7N)>gW6o)5UI90v12IHVMt~G8__CSbLwp znuC>U9>N;cv<~N1+)z)Z`ukNLXUs<*&JlqjM#_81FK>1xrPG>szY=fDFLGXf2sKO( z1YTfC<15O`vzkxSn%BpQ^b3f3t`V11Mr_tW6-1|%dRNlY3ZJ|Wc2=V9^f)ahy(@YE zm9UsQxJGn>-hWh>yggLQnP~MA^kEO??SW#u8M$3aglxB3S(!cQtT{+}l+XkBT?8u=as&(quc&JVcBS*++5TgcQ_BjGVw} zUuw|8#)V?7&VCu@8C<_Wpi9#&31I#oqGNHY`k$@SR9u2VgO7R@w@t#8WPp{8#KY@t z@*iMBV0dZPTE->|#Qg8}bdf<(2t){)!8*jmMr z@1Ll}N`j2o?KPd?JJ`y<;Onu%jXcog6jXseG`1_ySO2h8c=w{%Zng4eeKU$74S?b!RMg*c~UxS6{e z5p4E!8LzXoVfC6D6bP26mZ$>gSRT%d!ileykNPVLi*ZvO{{NRTmGeKFm5vILH1~UN zu145j58Cq6q7(*9KTtOJrs_V)NaH=C_ayJTugGLh(YKz_ZeAEu2MZ=>`D1vA!EiEz}6P$J%65ny@+jPf8aZb zoNM4Yp&kNx&gMfpQ!(0ZWQq&KWJ+SdmQkQVoO?mw!Kgt~n7m4W`_Pb6Q%O6{9xNB- zHMEuW;Udo^hI_xB&Eg2ZIN81%n=6&W(X{O~pFDXxS5IrUFNYKyQDs)3ND3f+uk->I zC>TtDV0r_jQV7MmIGjuwVHcJT;p)r`Df4y`$cdreAG^FJxNKlmYDOj7qk40twCI_`Eo zHX}Pk5i+Kc4v*h>KpZ)~VO-8RwrYV`KdEajLG zM)Ued9*3(zp)(cH7Af$b<@aetZta7o~ ze*@=KBn*!V0a+v!M5M+jn_ahs=RX>`mp|fzQfar->h;cx;(v{P`O#aYtXa@}3J>hs zV!SQy8q^UYp7j=gH!%cyT%NdsgQ`<${EpW@Q8^tU-!V1;3BPiSlGX?|i1Y+8c+ixI zygTMNX5%+Jrp8BISp9BO-wyj97W=J0hfKv2NxuLvS&MRB6w!H;w=6$XEo!KjW6JcZ zc-zJl1`8RtZ-%NRJW1$C)BXb~S?Tyg@PAUTBx$4gRq*%Xr;I9hmq?Xle4XsUC#*D# zC@K@aVkcIp+G4iMpzWd`c-?8ug6c#R651Q6?v_mB$KjIR+EYA2zCw|Su7x1>4z7K{ z+Vn(0yQ3X9`PwxFV@pzTcRMt`f@MB=~CG6f#*CscHo|Ct5j)Fx9)2T@R!bQQGSQl%TYkaT(A=+#@zu!-hf= zu$lTvPub-LM4OQn#k6f6c7U(uc8+xt5~ohzgjCLEbSOGm7kbd79~07WoRf&Xr`pV{ zwseUVuFGm65wq{fwIE%^@L|8I{OVylMid$4s z(L zfa%uw%k~r$-FsAo?FF#A2~DcrtX8-&aL5T^IXO_ua_D5?;4b(GJ04uCrA?Ris>UdE zvuK;ZX;Jd8QC;jX1N|Q%aqf^M7!N+>ML!+pG6mWH3Iq?XBnqP_qN|qy-gz?mGj=Cr zQ}m=~{5cc$)Cl({IiupQMnuSUKku`*xeIDDyk|6&;N-8uthS(L<_73IJqW>vX}F#t z&wtp|o4gL@Dl8kz$>e~eOscfB~-cwfozrd*5TxdC0{ zSRqM37*(AH3dBe2wjjyYpfoRpsug1#L+Rv}Y{dLm5%c@3IoQh_i>$G+cOa3K$(8*d z(e}V)DrcR>LfgK8YjA20_gff}$H!a=ZGUS&B~=mjm>4KB<`G8~36OIjno+Hqrqzh@ z9=F~>O&aENG17h&^Uy4`4l7#}SZo`EN2Tiwtdpt)_Xh2 z-zP3+r(R>#0;0dAPR1Wg^Qk@H#`qJr+WN3Xulg$f)L1g|;{L*~-F$0U={7=@ZMggI z@qMaW&EN2n8#N~Wa-@FMKZp;Qcu_Nqg{k%%b#08DC>QO%o0*vS|FQJ#0ZrBY|L2^s zl$$WrV3@)|@mvs*(hwYMj;utj1Sbe%Bk5w2N+OD|u>od^nq9=wFbN}Zh?IsG92-ih zX^)zQm?)4wCW4Bo2*S4Wd!6U|>!0uf!a1MI`~7;qE}-{Q>-vW7Vd~I9hD|Ag;#z>GhbKnB z93O#LTls}y`OaVzYd^?7O{k+Ne-OfSA zM*6OjN#?cK=VNDByjL)duYIcb{`W>M)97^`dp+k5n2(w&rs?pL?#5BhQ{5MNTkt=i zMxS`^Q(7tfd#fKsx2)+i@;=)L7WNyYX2qK(46u?rz|@i=ao(c-uJ|Cv3&E7SX85KG z*4j)92V-j^*tjX)Niw@#J$L=cle@2OUHE>Y=$7#%u*=szJG}hyaH3JD3ZP~Z4?`Tv zFf4GRGLJQVv2tB)n9FpjoOjs8@$g&PY_$1f$~nyll%C% z5Zy<>B$sRNll_@b)3KNT+VyXcib4ZRB?_heuvoBCsY8nsy2YxjV$*wezHr}behcMrdxxKyoPobdH0&Z{~ht`%!bBzu18($8N^Kh%>iFMqsXGCHTme{+h8SXa>0 zD%puksUWWT9s>zf8E9@Jv-9953;^T7TNyiftCbuWxcd-Z24QyOvS;J04~jVVCu=w| z>%SV-ZqBVb5MnGuGuxEgHxJksD4&o12Cd&$GP3MEOs#oE2R`M_P+}SftE^06@b6mQ zPW_Q?0wvSUuq7+L4^Za+4(O8}br(P-rqbFid>C(vj~KFHwyAZeax}>w%;Ow?Q)!P) zLr$^%6M8R z2p!^JVqWGevvi;mO`v)b?u@Xo4vkw@X@c%(*9M>ok#u7)4#Ys%073Zz$CsMKSLKcA zE)0vWhRS6{!XQjJhzK}-uPaDLDpwr+(PqCBh@prjF2NUruvlRCacT4LusFq~&D#4| zg#u!0XT!~v_`F;iAUR2NMSDxSS=TVb9dC&Z&SucO{}5?LWG?Zkmef3UA_zfVLUgq_ zS%ZQ)9hs+T0erkeroP!&gQa;BM{qIiyIkuiR zq>@h`RQ``fv74{l!&_eoz~=_rVqjKr;_Z-exuj}6>}^YNYsN%4;W+CGQCjKpkxfM z($<+&LgW3(C@{yuNN+~q*_+}K(2!*Vgb_q$J&wO6ZuQo0q9=;~ANcT1rRd+hJN*&J zdbIF#eVE|{Ib&!|8NfXMQ`Oh02S}`8`#o zCZ^8Q3tNp>{UpJu|2x#b5R^$@Jv9n<@H-z@RfRe2MVxc@NXTSFfs0Zr;CE8w&C{}% zEJ5%n;_5GCwYDIzxM>Uukkpg~{XDX`|1QukLNl~}@FeT_nHF?TO*&&}r=6x^TBKmT}}uS8kh|_UuOgMG+s&tcf*%XHQg;ngx9= zydi{a>zL%l+tqE47P8jAX=U;J^jv&JSijBEXu?dLyX)c^!$?{PPMQ)7#hdy8t-Lj; z0f%Wkt*r0uM=x&>%@UIYr`>}WiZjodnAoX5(T*b2T20K_jI~YyFxCwN+w34+4tmm*uN#PzWa#~u0 zxwzQV(IX_qW>$!uMZ+M@ETBI^iZ?30SlX_AF}DV-86e3S3psQoISr-cjg<#*Ajp2qF5 z@8V4_WPA;>XfOzoH$G`gXN=xp7Sp7qx8|&P{9WtLoWU!c73YuFxUQph8{QV@CGQfsDwy1mfa9%K7E=NX? zK18@)c+~(%L`HzqQ+w!Ht%wMHnicr<&Yd_L$z_?3)6oZRC2JDcO|0XwbXk@qu}K#T zaRlfJ8fRrCZ+qT|ve^HCUvYL%u~_w{cEBmrnKHt!`GV$x*mRIJiJLl5Y`XaxJk!Ej zOrn@DV%?;)p%%?n-lb9=WeaDF+T}Gyb3?-^GO4ttqZYK~QL%%Q8AGny7n|p08uf-S z)X^UfeR}|p<~S_o6v=w>`Vf+J3{$imd8s!Y+12CrKWXzX9`(iM5hLFyz!vVO<8onb z?O28M-ZW=LsRwJ2;IwbaJr5uvp3KcPzJsk-J~$)u!u>49~k&E2E? z!hO8qIr4f-;|^YUA?=tcprSJq-u133MPLo&?*=qg=-t^5;ehAbvu@OyJ zzSUXBDZfpP`;ax53;Qb%u?lBkytc%n8;&Qm{dG&FowXM0z4x0j<{B$`p3BFwW=BYZsB}g%2j;_Wj{O zH4|H0rz;XJv9Y0ZVc$IIO@HFn$oQE9dPE1jo%|;ntL3yKW4^bEMdeL3g+*{K<%bFI zTMeeS0?80#tiN^zRU8D|d3bsM({L0n1C5b}5}@e8vg2RpWDkJ-CLBAzGQy#xo%V+S zZ^67>y?P06j}HIO7GCiJnK|gl=NyR;`vf-)ri#vx2#&7*jx&HWv$JCG2y2MI!y@`C z0qYY~X+pKog5@-swx{$bUqM1$=kTFE&frIzQa)Xy7sb1KIgs^?tTOg=WHlGN=zv_3 zM-ayuM}*syb%-6`V8>Al@=);x2!8D2((BA1+~`|1>39ti%&dA68(Id7`MApKEo`j) zAPqX?Mb4UuH<+qx+ap#rLoIhBc*A0nJvd`JphVs)2(mg~l%ezWCL?;}zT;a^9@ptF z=eEZApNR3*%j{438Drjgz2t9wfykttlxB3al)-|X%G7j~FMtIAm9*4zzXx8*P+t<< zkr12w^7UjBXGo#E(!Pv17G|AJo@p!Y5Y1h7E9(RvL5X|6F4ptbugRJpW^`bs9iIWS zlXpg6Y4HU^cUkdyQj%VjYvfI{xV7z^fkZKVEH3+* zc-Dn9+ys6}lTnWauuaK{Yf(`)Jjj2{SW^R=Qs+zH)}o@)wxr*M_AG2b-z9=)sRzz_ zmOMF>|%=k`09#REN4+4RnFw*zBpA*2xGWCye1hcG}N}D2q}sTfrtLHyK$Y z>Fzgk^BT@DOPk9o-=CDZH~sx;NOB98Sv0IwNt>1smSomQtVi~-jVmP9!{+Infg#5o z{N^^VkdX%)l}E&$dyQ+ALu}Id6<6{AB04~zSNPFbjR`+r`|N+*IeSZlofk~u)1t6- zQFJGUIP}BD$8UB1^@;J?zXc&Kd#V_Kh=Ho~8-%ilA(wr!!!9E;*6~jLW!k08M&~dy zXf5qBg?S^!xijy4;E9R>Ankw3B%KQuqD=C4wO@zq_X6#jGBALqa;3B`hf{YP39W*W z8?pf&!Q7ZQBwcihi)n#*CF`Kcd084e0CPCCEzd+0bR3a#N-GJACBhM7FdUnx497J@ zdWFRFQ(ohdcboFGo(n^hvY_g2w5B6~RFRU$-=B`uB(tu93#fTD=wLvhJQG=yoD2>3 zC`iMj@%fE@XXHis2%nuHr=}t&$P|4pwZff@}M;mg>;UVNBE6Ef3VAD*vozJl(8haa<##i5zORi{yTTF}3 z79E}5z&c(vwJzFF%rxdL*Z-|Cf!RJ@Ht;%?xG0~1A=qD3YE|+;1q*xIbBSA9phUOg zeA^J^s^slf;ZHrUXroenHXKC(JZ{7f)&67whBvE(0ev7Tn61w313h`>`?E)!*3_|u zUb{X4cj-MSKfQ-J@uJA>wX@Ze41{il0I|He$*_Wr8qDjiJ5sZD-#e#DtLG6=(p)2)?^IFcj@lKP7wS4Xj$_jM~Pa~W`Uxqn@UXqur z$p=%Waa4oWiIx-5tr=YdoCAZRoS_0;CvP{pkZj@@={6~I*o&QA@Vj}FoE_s0@#Z|q znAW?|Eqz#+mr2E)sgPbZU2-$_9=meK1VBoAOShv-4PjLsq(O^}rzRt>GF9f~kML;AC z2cH8ureMUdxE-$d%1o{%I4AuHxo>!JvTA-LBCZ*9BtRkV=evJ?`j8#uhjYS@DM|uqk zFXYgy!2E5Tta(B;Ocq@;dQ$b0-enkK4C%=R4a?hJ^XP>)d)3@DT6ndzPZJh5k-(ib zUMC?C`!1QC{#!BQ99!!*Gu4c|T)Fd8FSs;8=zatqb`y0P##dmAP~oQ|-IJW0;kI0| z&I!AGr~3!me_7yL^|kj>dFQ0Vf#xvIItdKgk2bfMEoL;hGwthdg8<>z{PqU@1AvTh zTOPG*HZom5 z#MpvXSNRp4&)}?Kl3BF3bXq-Y_!l-3%(NpY&0nKkB|0r{T}<9^4*tYBCQu2Lt9rUb z+-9lTgQ9DAL1^@eU}F6)0xtAXt1^P3F+$pE{OeggLFki2sO1a6zO(M-LgCI~- z=^e^6CS}vYZlOJ&Q-r?S{X-3B?F8}ot(ewOv1vN@=08}rxkT^)z{t7!zbiTmL4z94 z`MlTChYU{nQrZ>e^k5xS`Z?I*%CEq6K_gI{bv$iS)KNrOp zecBq$T3@4l*S*IHDmT^;BKgIa2!&Uj2H?}u zFPF%A(;qO_1pLmX&jO^)D(BuG80!aqL?&q(P?~_)9Q!oUpNPP+w^;W06G1Su+?thP zM&7&hKZ*Yh@ZY`-VznQ!-mO0mb#RXLRHimBCB;`_ZX(N8wIh0A;)(%ih8{vUyD4!p zS5txGQWYL?jBy+wr2iKDo|vIltLeF)82{SpymkX#J4t%IFF_n6Gp@usl=6a=zC|9@97%0V5U&eyO**0O9M`gEUP(q4a8Hzj@)DGNVh24%FTJ58-QsPVzIaC zQp7XvZgfTEo+8e0g33(Lt=6-S)#xQh-wJDIt!)?wo^^FE5oa%Fq6hNZ#{r&pS7Sgh zb0G}MPS1X2xcGzl+xilIzs4$-;D$2aygwiK2>jGGm`lHfVfOEi4MFAt?PaQ#$||Vg z(O`G~=k75cM$3DDJn)%_>eOlqt6|b6v7Xr~PROD_|LXOx>E&IdQOg#l_cx9h#v-G! z$Pl1+|5uO7BX2FFO)Ztnr(FM4vK9Lv6q0U!-GOfxdvn5%F zqy(vt;Z9@)>>GJk;qDIBQ50g@v!-tvXT6R-V^ROPpWvYfV6v+_9~ykAjC?yBY?jWz zX8Vt;m-|b&>8B>kPJ))gy2g9HC?$CqQ15#)6VE#=L=i@6M%VZ80$)&L!x6S1ovMBF z@ZtObNy(hqyALr|4?oojvZ4JO0CNOsxz9`%`9n#@bdZ#S_M--mJsTizDuS3%;}lWG z=KJ0Z#_C}k!KVz)mBnYB4KK%KAW{lj2}Yl9_z@MPV<2EUFC0x>3fV@TAEJN@#ah>s7E*dXI1c~?J7ZD|5>%w^ z{bTN=3~1qBsDusky|;?-wS(}{hNI~lQN2(R>r^VUzsf*>Y*qBp>WS&Tk4)0MX4P`UQv}9`KGx)7k_GeBu6&qO-Ily?XK6wUNI0sPz@{Cf^V(IYFW$ZP zpo_7N3M6im+yA@fD2|KDZQ}L46MJLe%<@d!3}p9AqLX!OKqA3!9D(+x2y&Kg5ElaT z7KEMJEmcqlu#$X;<{2m9q8|Hh}PzfEogMwUSJ5(cgZ{74)H(tB) z+=jbF|lWjB8TfsS(3qsO{J-@jrEG+mh@s zM+cR4@!R~RFs_Kx#R1J~+Jb1j{5*u;I95}qIfvXd=`w|F<2qyt$Tqf!u0#z z`AfXwdD6M~b~10(kSkc74%f$w6(%umv%kJ3bxB5NCo3pF;X+mCSx1gvabS(1o}3u<|Xrrs$}VnHyMJpdh$SkXt{&@MBDe+biUcgD#N&-CX|+W300R%{$4h zQCFbwbo<5yg%RPl4Z)C9;ob2Q;<`fo{^VD4tf{V9G$*Qh2AJtxhyj>q&K*es=Im z*WeKtCmh4;T~mhCh3DG)-KLU>saNyh4xhakVu4=sjv_87=!)f}VxbQE7TDlPHew#z-66)(GV@dzHx#$G=$Pn!lS zWW=LiyON!8vzd1(Yt5`tIYUq0-ntsLljN8V*ozB(mp9J|2TN)Csk1lpwu-O3zTVPv zfl*9%d)hch-MN4fYnqo&O^PWK0ht0ShLCsiEG*m`b6I0 zT0J+h%g!5ONO%eN@yfJ((-FpS+s}NP{N*C?DX*Mp)Ldsw(YduX#y>LH!qABvE{cw9 zndEJQwve;-$l|HV4DCX#sGYi;ylpQI*1VEtJ>?U7>7ifhX|3 z%_vmx13eSDU|}9(@~W@jOBaULm!bMem^bw@W14ZeK8&{Qfq8%7C$G^SFBzd+0~D}G z;DDQF`Pj`V3xVkUh72hvAw^%?>PT}FYkTc-x%}jJ;bp8tM=L_1_+E|EN>5(e-I^x$ zE{%;>QRFJ!eWo+kLbM0(b4Xpbc^}AwnB8SctTzUzB7Tf9gFQ)B%R*0pDjnWD^B8KPn?B`TsMC=evRq z*H3oppM*K}Q)QG&s|%2r6QLtgMoZ~P#^SPJ7>++Mnw2D_p1&KB2OOlt%s1g#_h8?@${8{L>1*I+z4y!{r^FP|A zQe`mqv7@#mgyDu5b7%Ug69tWcKSwXmN>U>T=hLUK zZWi_Fud4<@d3vSX0vy4^FMdSAnQE~Xt%+IB`G575KW9Blm2vK{!L$Y;;9=X;mtW>= z!I21jGE-RDY>YbzuNV5s$0T={sRt@PT(X3_nw<|o+6&aerCFJCSfRZ-(wl3{F4GT% z97HyOG}kSe`hKu<1ID&N_%7B-i=f(g|B_2XCHn|E4Gs{d0&Nd*2A!1+E)=A%p1NT z2ljQ1;0@*E;4=G2R7oZ=oHBSiYN@O&wTNzBD40l>mzSfEl-wL)!}0W-pCm}K<~&T{ z!Od8iHUvW#w|@&}CyWXDma~OE*(M`dh!B4Ts5Rv%oLF41tlR+lVw&5vD=FvmKg@R;JomyQhrL#HLxhV!O$)d~>;D86ZAEAD@hJt7H&Y@DV*f^W`NowIr z))o4DV#;mC=GoTn7EDfb+ym;dFK_8B5O{GJ%hmzex6OH4KO(9Lr_9Ho*q-L#u8bA9 zl&bw;*^1XO2)N5V7eDGcYa4qvQacSZ(Yukn%?DA{J@uhc3__K1tHRS}lc}8Yl>~JL zClpmxi?y&Joa_<~pX0$I4d1bH4sQzW+tm_O^xSrEpgo2cBa@B#a`P-s>q`~;`WSrb zHkRyR9GqXt#jKn}4Bs&7aAqX~R#ieqwbOPJTTvDt|Lx)L(OOD=Pqg;iozNFhNlN8` z2&^mZ7_IQ!geRYjZL1&Kb`^$UX~_%4@V*_+pj<%xqj2>4QNa!!8>?T7)+A+gB1;H=vT-5N&PX}(Mew4-eKYuz#h(o{lqI*|7_X_cxM7Y{~s+o z8+hdjef@IAC|^ViFJC!w5V&{>ZCFh@Yb=v_q2NaAaev9p{>IZm-7mPZ3K{Hnex z9OuPzs}?5X3kAv4?|~U)e8GoSR=k}HX%G=7agQ0u%jn{)p`_Z=(}#6d3C|hehvD2l z1ZDnW^QRbJ;3HMrl~veE2%0IE@sL$aL|sftkbq*J70HCMg>Sdi z`wZKDJq5rn@Fvd~jG(NrO*l@nM{8(&{)!%*zv^w&RhPDvTFz#$Mz2u$$s3UMTSHNX z6iFbF6@tRY)-Z-ZKPvUk5Nq8lH;5Qx%5DMP!($wEuA|cRGU(M+m#8?)pf? zeDvgnoOUg%*cnJv(8uQ0u!VsiZC)hc#+e4DO`HIbt?^R%us>%Au%~N!LJR%>l zndEGOF2B11Mp=@s=vG}Gp!GK-U6BK>)*V&Q_C1>luAPM(xppmtiiJH^oy~n)G;hP!i4Lk3VOyoZ~XW4OTB@ zVmlr3;z0~wZ0244K5tf-MaXW@YYx?Dsa_1qn*`|2aLbZMIMvAF)V6LM^q&rO!mEsi znxV1&er+YMbhCfuWQ@PA)sxEyN;&+j3u@cDExd@0J{@tim3LLW2k48~M^D{LRq4(i zWyQ3Vsa1?SONa(D7nBQGUhwF*z(Da7+`2nlpFM(B0&Qk+h>*XZY9jgOvVQamss{rN9CjF|9+#Ro$SOX@i=sf3cAYp? zM>lq0wj6|Bl%Oga(ckgpoS`im-ugXx-ID*K2#tSbivXeZ7xG3+f07uU7vZWr$y+U? zw!^Xy3*C9VlCfT=6~6%QIq*pW=Xi(O2LIT6));zGR;o3F8y)KHbHqFd2LQFo3{fKW zo@||W??aSNCuB3@)oxI>6fNGOf9Aaj&1(d0{3B_EU`pbZzdn38gEdsi%@ldZo&m!) zrIK%8lsCPSEIyK-OFMXI@aqSC?7T}jQsqlZzPOmPc|5KI$qQSJZATh~q~T#W@-5Dw z09ky*+aLYSKpHi2m+z{Sivd?~nn*5huC3c&%fUc)^U-WTDd|WYoRoC*dbb01&%lo( z3N6Pt$O<#BwrJMk+*B4UJ;^i%yd^U)q+^2tYs1B*wXoaF+cSb=!6rQMqx%R+a4AX` zSvF#w0l5y zatuI2oTf+WEs4B=pdCMlSrPG5{(+j0BmOM+YbwUSx>hn=9o!A_gjGVaF%`hi$*6gB z+(7$Y)_O~(`kqQ~rznb3JR>vn-upDnE*~+mRHWDICAWrL{!KZ4s#nR5%N>8<7}cdT z1H;-bd6&!Ysy4F*HExNBM!2zA$H__*;vzxVy%u^;DO#DSRTY)UXO&)S_qP>v+v@-C z0yD-=^A@e>pM2fb%|nQO{p`6OKKAeDy`ioHxZUF1JsG#!qIO5niQ#KSxZBiW2T5kk z3TFi4d;fN8S@8YjqJtNE?kYy>!=hF&42E6o! z9)IU8IDS6p#1s`)(iN3WMhvP6?@U?&b1jZ~SgS`EOP+Ptu!ny*(wEHLQVK^}d=gj#a#fnt5;_+rY-AZjn>^WEdDWAGxx7 zBcm7<*qq*iycwJKd$p;U=;P>tv}EZbzVn5tjHyJVJNpk^t4#S7D$Sfg&4 z{`2&ZV9eP3;*)caRtKF327~kD)BWPbLv2hL3>nTCqo6Y5d5}5(Jr9$43zW^2c@g## zRo!u1oS@l*^}KP zZN#PW5%CoQDoxYnX13< z0WOpY-2BjnVJ~w!b@!o?>ebfJ|hZRDBJ4TUm2)MFJ*wx953G5^Yg$vjq2siy3h&Okj2iPaIlC?(xe-J z<;VC@H?V#UFZ)5>sQJiWB@c{`(>iZ3))d(ZW0w4cah9lnS@WwNbl`8UwO|Ch!;kta zD~okyud0&?{7U=JsjW?y3@~=D)QckA^L2 zzv~RfTfX{XkMtMNqR2>9n#Y_*I8Q~B9k#*G0DLC@hzJT2qGc||G+2!n7KnN{xd6-{ zXh+mx8c{p?wk-Y#Wde~P07(rS2v4lMPxZ%d*f9TWGNGQ+b%liBR9&JGa3~hGRQ0lu zu^q^{6KU@YLuF4wdU{oF8O~b$C3hl|TPzi9tg%Z*;3PTmlRSP%BPj8#mr@_7TRaF{ z5^k9r)isnEuyCkkc0#qqTxpZiL&J( z3GJ3rygu+Wjboj#_w$s+6BjOgia+~>%=tI%FOdnlw!;)5ibRBn$?#(HFhM!n=m8c! zmn>8=<)xNKMD4ZeF=8)K!XyDTTJIEO`TG7>0Vt)rYJMG-R)(*4O?u zDw`dX>sZHIw6ZfiJOW%?51HZj#3dO^GX&!G;t8)4A@#5SUo!Ac_#C@-*FQ!BgLIv- zsM{{&3^cKZdPKcl-n?()#(k`#9%dBTOTcwNgSjm0c&q+8FYL(8M@rtRK=oKB>M)`W zLO-|Rhkl3g8=OGw%Mvgf`uzOIaDjSD*8J=!ka%lO;K{KnfmKBNH4Tu3y%C7j_^fQ` zCYFd3B!ZOh4(8)0?JWQgai_dF=#PFBkE)-@4<6qTc+*eGjboX{u?S!ZX|4a0F;1AG z?IXj4UEu0Ejm9L#urjbIhdgrpXC+1y9X()J z=r6{&^Mb78_#W=#*~1)%K4G^Y2K z!tv#1I@|a@)=_9!vdF?)O$(_V_Gz3gK4CyQ=S3_UYNI+v)6apHQ<`AXdlIbSIodw) zZoiUqG*Sumn>J7)Vfku9<^l8v#&ma-yKeaYb8m-&!YO{^4MX=~wli+}E!51Ywtn5; z`aTMayxkZb-1CbkBw=5&hFA4}9kuKi4fDOyrZtVo2LY<`@*fyWEB%U#hPGle()zYT z!cGwrO?_~%0Xq1Z|4By6Lu{b#rG7OTy4kx@*j*;@lN%bu0e51uQ6I(Ih8->kqlqFKzLN;m(>0b-73a!0MB^=G$5yBTrx5B2qOZuxCAUujU)x z?vb9H&sgW{gHrErVHJ1%N=~gni`wWhPv`Rm)V)n}q~Vzsb@zrXILc;03P=S9i_`#F z$=L{}ja6jIB^gmlbcVls?@w5~IHU92HH45JF}7{ZF$!V@V{zz1ol4BqO~~&^ZNGvr z77g`yvpY#L$j`abIAvWn=1((YBDJ?j!{F8Zyfe_wDUt%4$4q|&$pG*lvhnKmw|To_ z_&^$?xGE=JuJpaEQhyJ#ToPT&3xAf*YScTJWFgzlBzo3FSwbSnU)VJonc51;6p8=aNAru_->^ zOeMTDytr;)6`tC=;NGU9de`gwDm5zXp^Y-?`*%-siVqMSa%Zcn z4#NXPApkGdM|23_>`3v|gM@w;?;2Nl4}e?cE{R1Q*I;TzTt{gF^%}(ZcBRL%7S`~#-urkm z=Bo<1YB81IY8fno-NV-O8B8OwTrUxlt3|jm{*|qq{o@GwIYv z>zcB&@#s~{wOYmz7$~vVAfP3duG6m_yt$Z(eenPtXSiuX^Q;foZw!^NfS|QoXh#`q z9N9~|RydQu@g8rVzR<4)~4R;F3f z^-z%@A(HT58%Hk-EY2fpSeGKF%f~aA2b?JbslsM1Mg$5a@yz^yHS@fU?lZBCu|MfM zlo}J~cpFEYeeyI=sD8!bUULeUez5LYEX>j>L8HsZS+JsT_VaU zq;hWwP9n43xFVK|E$z~+;KN~5K-;U%DeF1IhjR7Og?XGJgPuIU8wOBIagU|-xX$t> zH^H@raVC1{h2Xm=8txzhfJ%y}tE&azC4=MeV$@`3u{ zKwdtp_z_J;ROm*`|AJ}z7rL*ocaG|hw}ivV+)4HpKt`bW0!X3HI!y(-tSReo8D5P# zl`gFo*U0iLO*d|3nM9wd8RTtGEWiLug8gl*uUnIg%&mPF;x*#)ZL{Pj^AXJuXIjrK zXhjcxEoaxe#}wntdPxk{)OQ^PoIGCWK#37>K>sUs z#37D*6sgplGaff!!=#>SD`uUl3$!hDG7csGkhqtJV*wT?M;LUiN>J{{(Wcl9!vSvv zLv&G-pzKd?T{oNjcNlt9OKdpPCmrn*k{ zR9n({Q`Akfg>%G_o=LGs*~ZWh15f*W3>VAOc0*M5srOrnkN0N_6vNW~5B zW*v$SG(~~6Gxpc#tK9r z&b^U51`oG{Oz9c zOreL*I-fcEwl2;Qf`tm1HlPTt$>PBoo+giSn(Lv8pVqRAj5%3s+{>s z9$PqZc#PcG!NFRFIuotwtK%GFWNDo}2o;{6N=eqdeg<}T#LZ`$(60H#H^CN#QM}`)u0o2U!ssXI zJo@0czxg3LkE+S#Ylg&bbXwI0Qu2&d5=b6I>AiWGj4;cJnn#QM>6R=pu*D`fmr_Z| z3mpTTbvKoG{lkA8FoPlOH=@w$Whh%g$t3DzRK?`Uz9doMb1`R*TGgp)3Mxj8T_4-F z8)1T|KfZLC*45n*aBk~!a*zeGTXG=h_wtneY^?7g_!5w$=npt$U4H(Ml2tqe`Nfc? z1KZtz-tmpK9a`QNlzkB(-wr=XQ%2`a#$hIR_10zK5&dlvvQK)7?lV~7i_Ugqxd!FE z;b4^6DW^8c63!EEv9^(Kyts&P=S|Q0TE7f%BgTZ10I&N-3#VZ3SST(TZia!p2l`e@@>@w|B-jOo4On(F!k3O9Xhi6v9JQR3bN>_Z}Lh*cny+={#mBK zTU>#g1kuV1D{NnZ0Vr4515X4YukHDbbm4S6HK|cv%Gu=DRm$lpr_Re~jtdqQS%y9j zUJ*!rzU@W@AVLC>g;FA<8t6cfsdO@94VIPItJ0CzQoP6CHcXXV4WY$Mj5gm|mrU^1 zP!K(mD+uvWp$lVN6^t>kURE+p<1z;z5Y@z5XSjW_Z9S(+hDL;@Lg|PW;5g3ju<_nl}1^uv}XAItc=2ytKQgil+Be9%4dvLi06%0Q5KT_M1^2+MNfF+c8 zB)rFxL2;J1vtfU$cx#_2KKBV=3S@++PL{$E7k)Ty@|T~7Cz_<`HaTNP#9n}vXbZIX zkGIbeYMuVYx9=qm^Znko2b^YLDhJ|X8K)2IH+Gjju?0{P)#k(u6)|l1`X9sFeu{0g zUYR#lLVy(%J{rjg#gIjl>6X`5W4(&?^)I=D-q#BcGZ&4sHB2|O&_ zv@S~^uiTNkGJ`RWyr&mZE~WT4kL*d@CnL+6KoOA$!lzl@-k?ZH6n9n~nffCOiEzV} zJ8Rx$6h6{19mp-**Yh457woP^`JIO>4^JLH)nd22Q)TrJRTjMKcv*b?h_ox>n55O< z4ZLvl-rYH+LPj z4-~_r_nuU)o|u;*j``o?iZ|i;+wB8?LsH`*nh<9;)^|e=J2AaAlyP#O%Hp5P*I9#9 z6XA$klL!*abAins7kWYBPbK|ra}s!?`*vB$x5NOdiQ?F58r_DUeS&v z51c#k0WV0ufp58Du3r=E=HGl{6Z+OUb^kI}AHSww=-lFLUP&lpx_jZFj!`2GO+U#zDOLJCZLqpY2Xq%38PLRc+t?aujEPisoaR zup8;*2rKq}|0--{sl?S!^2Uhth?>Ouude+Gc0fkiw}|N+{v&PM9EN~p(AVm6vebSj zPfyiBw{dvcc&yz83p8TZ&F8KlV(tW&2{|{epvUDY0?Z+il`?&LxfYouu(6eFboWHG zHn@^`c`$~!Mx{M;>8_zgGcCV>A_;O{F=RbM+LO98A+u=H3Dy;KAHy*6=SILcmr~(@ zB<9fxnTwd%oEg|kg?30~ro(@7sT$Pe1)M@f#*h*Tx}#}-CB_C38GaawVtL&d7j8t>k^KXycYG0TRRk)=Zv! zg}0|x_P})}jXIlXxcUesSc9x&QT?<~Ko7_bPrV9MCwNG9a-C^3o@=LHyuNPLO~w_N za>~t2ww+~tA$)kdY+(?whDtuQFA_Gp6RAU+&v3!GI;q3;AF3&0n>ZlZUTZjh;3ziz z_vEASy$tUPd{f6-zYlDlkh{{3=v+T&PP6;`}I9<(~CRE(d z1j3yQFEnZ?d~zoGsqCPOe(^}uJLUK9oa!Q1*A7#;YT|%eY}Y$83Of*Puo^_7OCLbM z#7Z=^E3&`}c6htpOO?{k`$yqLVCwO5lpX!98GusCpE?j!EAUa{u?XCPbKs9*KM;pM zb)$Yy^}Q4rq?#$M%M4HZI5yS?$5ODY>Gbf7Nl8B~YpeHev-gj8?8Y|u!eyE>_XVor zrK-t-FlyIg&KdNW1|?Uk4HN91``kH)04ZdCp`nXajHKhXf}i7h;jPW`Vq5AXz{PK1 zD3Fg#!`)~~V>X?`2c+?i`~PF<%>$yU*Z=Wz&M?X<4lX#D!olb)h=ipG4h#<3f?9@* zAPfx2txR%BBoSs4EEQb(bV19jK^TgIh}S|)XF;emO|%kF6G6Quf{LjK!pxlC>-78n zb-5%kGv~cL&+B*t)^Z2?)W=7PjP|T99_&F3ZMj%#k&HnzDjXD99H& zyQ7wd!QV#;rh8J72C!=o-cZpi*}U#k>gT~mRfSmWEOEgS$IY)P{UHd&`^jfN9pw0! z*K%d2ulfM547N-me`qSEP?x0Zm-(9}LPW7GfjGW9mNmL9=ek7L8jX5Rs0WBfo*>Lm z&?I9)jFbq|f?)RgXf`gY@*YJc-uZPYZ4r@JT*4n5}&q8h2 zT=MF^gkb$D7&!;Mx!&bZ+?yyN{@!yD6{~E{gE)NVXnW?-9`i#uAtI|G5-|U7(w8^g zPjonv(@<6uULdU~4aRg)q9QBQNDl%kpWMaaVY{5HFbJ3jvEc1@gqiM0M-wgnWRjr0x0V57je8=ORA@9{+j&C< z@clNA+O1nfhh9Vh8df9#2L+9}+pz}9n>ZBztDVD>d1HmvNA`+iG%!zYdp-vTI*LtFB0i$xssNg`SJ7T<48RTp2u9tc-s~ZyUso{ zw~F<%UV^Y-%%KQij#a^MnETM7Ln{qGw}OlS$hjNxkvBaSaXCL_E?Wj`HR&SVOLPbm z32JQ@m34hd5^loyJsNE*GRbz(cH6mBmw&T={?FMOa3!grAKKDm7U5s~c;z?-bL+%p ztxK^}MvFDu&Aa37@W$v3mmn2;)&FPO_Cd-bfYWkSYFI1lXqKJWlVJy6+@5)E_V#jdzo!vCc7=><H;7^Fe7Sj*_waB5P5*>*VB1Hm`iq zHBW0ixBw^e5IJ+&{$bvh+Ol~x*+`HxszOy_({UtQDi7ft#jr)1nzrcrtE+kAOYPb7 zQ9uB<=|0<=&sqZ^HwZ;p+HU>G;Bo=73Mt%*<~(~Ba`lolN#cetPI&W|Uw&bY2hVc2 zHYDC{^>v{ZFKS)YL9P`xfVJ?2x&djO#f^@9KO%jtXkvxzvjn6nxqN@$<~ve7L(1s7 zC9hPSjcP@Tk~`}CU!n+{?}X%W>6VCoAJ+BxlfB*oIb+w}%eag>`qTY4zOB~2a(TiT z*xe%Jg`qP!``_NM z0SOZ9#!dLVWmH#A4vui?vC_Ki>({TP@~+P9fZzj=t3^q*4P9EaTx@zO zcbvn_A?W&=0>=14UJDnB10t`bL~IWplPNz>Lq>@tcl>b=Y@;Q}Mp)|U>#I?(FqzoQUAc1Q5gRjWe!%IYjjYq}7x2V%PV(f_&S4%^*N4K{0$|mX zW*eE zCS0i$OYFR#*RIXULN{Kyg#|+IN0gI|dFR}~4Y;%Y4vU#~QNW-(lyRvLC5C^peu#Cr zk!K^8fP)c-@BBi0_`s|TUl|NpTUoms7d@UN#^UW_dwU{?=9h@XcGjYSrMKVdKhb^# zQir&`rF%n#z|bmykwt;p)brx~ICfuO`Z57+NWmWP0ZfRuJ!p?KqbVjo;85u)D6%C7 znQ=PC7`}I4FH~NB%{8s*lWa7sGBAc9eO~}cc!b)`2k&gf=94_LdY-O~L&pc> zMR3Z@38%N7{sm(l>L6EEHjXp6{hI21inT3US2aPpadMJ8ZeB_V7|&FF?eYkizQoH5 zzEy4A3VPO2TKRf(2%zdWX+`h^w>cxm$cQa6>kCbsGgigx!lYyOor$=99Z`2^lK%U* zfZ}KbslH)6BW{Zjd5Q+gM1%A_&U3zmVs*cw*X_$*v6ce|G@)tr1OLVmur;hn^i)+| z64fLLs)MmMyVwQj+u_3+5x$i;O-CX2SQp_3v9k4(GFlN$=I6}RK*VWt$^*jrYgAP6}>do<^6-TE4a2JUi4yh9O~#hUin|L#t8|kvAD%z+z#Tbk^1dB z%k55G+r;YUnS)~neOTl559z&}0y2*cq|)>olq>5kaCwWx^KcdnOyaGwJNn0O|u2fR1hL$w@7MWN)zz~Ka_ z-D4L_ybHa@-GTr8k2l(TmMv#&`TjOv-$j{?obq0EgnojXNlLv>&j|D4Vt!mmD~fq* z^V#%pFV5xM!b#_!;GDnwk}foI78jKejjj)Q~5!7RG?efNqVSFnyu>Omrbdf!@-$q3rian85VU1LFIGb z{QO0be-o;^#N%Kbmi%s4V8VhI9i6nr3R|c4^!*=m4kOe|npdymb8#RzY-Fa5fu{ku%HAip53{ z`DfewXaIcIhHoUwJl`@|d1YMRM__Cb1axu*#T5;hu1s$-F)@lExn$x;SIqv6<0UCA zwb}UuZ#gCTt&|JGTi2zLJ43g<1;}jgj!Kb>-B$mC*Q2xI;;u8-#)1f^_`-AUk3|m>wC|_suL%u*<8GggJvqat1AyZ<~*$TkT7Tf1#R*=8{>S8MD^EJ)uUd1 z-LGg_GJN_K>*>gA5l6dlOPwKY1LyEY$RKp{d-|Q2W>(;JKXkatc|{e;ZCL?C%B|jX$mI2X+)lRV54I$ML>bZ(;rcT!T8EJcjw$F26a$ zX!fmAnJ$D&xxQ;RZ@=?#4m_H#V%XYs0ER^ck7&DHy|{yk_3A5~MxrpUB0)r0^YxtC{9mB#C_{|Fe z2({>Xyk-s7`8UqMpmgEM6qm83fOjUg%O$>9x0f-N3DPgN_2s1O9fY}RIa$hi_yTka zqDJewhcXy_+%Z{U>JpIxwDb>IbHIgkICo7Ovri^@S*?8y2uyO?V_a>2$Ql<>+}HVo zqS4M%^L`%&QL)}>XQPxl6NPOiQ#}m>J!O}?X{_CeUw>5=e}!*VLrfBeK}n(i$u^(x zAkn#qK&MY_@x;J`060=%;vq^{^7zqx#`16J$+q0uo*w=V23Wl{Qy3j)_MgzRkPStg z!n}=e7rhWE8FiiL0Rvi^V(VQ-n2oqE#>$$m za;UZ;MLc}svrE?StxpSmn53v;5LQ9 zMMPv6ueb$$_mK5gHM-=v4Xf%xfu6KDJ9qQK#P!)b8B10G(Mj(9o`;X*>7@1jjMXtq zD{*!L!`dK^E2K7=tKs!2EJa8efSYI-oV~_{gn5Cn+Vq;3XcrfdL5ARV`kzr!1OHlw zn_tn~o>f~I-6YJlUgu7%VV#mI+CZ<`e$L`fg)K&}$LY&gX_f*;_cH~`HwJ+T^CJrL zV$W#}z%kLC!sp$O@Fs%?%w@bKkbHQ&Is?%rA0Ksy#A@Ru^DPV`RpMVHyBHhdr{r^dhFF6a!aI7qT&xZ14BzDZfpWk>vSu#&Q21!lw8IavRiU>A z!XeY%cxq_08`=02PtN35)L2-M$~Z?(mBm$%vC~c>3yo;gAdgeBN*2E`&}CEP~|M)a7d`j*2T^2&8AugrT-hKnuBZfOf9T!n7>t54p;I1yG*p`WQ)& zmj@OqA$ez8${N=VluZ`L{UwZZWlP2fu~%6|bg*$KuRe{@uYX4t|A{kJi*PT$=6wbY zuF$wNc${bSRKWQ0idU=sjRNLc@E@)&l z^<0ZHQYASMMbxwktnGyl6VSOoCr593LxlqNQUU8LIg+ks^^e^3l3XMco{1RaNOg?S zenr??8O0b`Q8Z@~y)q*MnyB=Cd=Vfcqod?=GAqHPqP)@$odZ$ZR0vzxprDFYURRDb z64Y#A>338Ul=gl__B#WC7!rYzw&pQ`Hk+ajM&);5iKyKAOAkhH_3da?mdYrB2t^P1 zljMh%y6nP2*8Zmu!@ejFE2O}u8mWlOvD_gcvk9nKQ z9ILtlI6?+rC1Ianr>LPcXJ~UW_>sV+@`Q8vYu;L(#|SA4q`V}>@Q&*b<(7& zcea^R7D1mD2pH*l8|&=Yp>j$JC}~}GXxaw*s8hV%H~IG;7;8X_oSL3|5=(GNfMk085}Zh;7oejkQ75|)l>_QH zTLZJtJ`k!+L_Gk5L{4RvPD(}vuZMXEVEZ>!y;~ltv4g%Lf?P*v7TwKni6Z zz!p0W;RrD_a2S1W&?9v%W8DOMkH;CqtZVjYm|If9P8aG-N~Pvm79~6yb{Mfr;^pdL z%nILAcSL(Ci#^edj_}0wW11}^H<-NRLj|g<@DQU2l%7v~jlQu3R5pbhxjDiMVw$G7 z)!FI4)S}^d?iANi>tM&~&X#`}(ir-+HjN<&sG~#$4QR@0tMaMfzx3$+OAzFrf_40(%UQ$Gt|WtTpZxyl~F!3G1dg z|N78({-tCm7Rs_}kM&{|;Bd9WmzC3o3)NUy3|1-y>%hQtfx=WX{q1Nv%6OD@O5I15 zt3R6HRyY}|FbCK_M@IGgH@>d*P}wTbb$r^JK5~##bo#}=Whe~dbTmHjbp8nV6K<5M zwa~N^zw$-FT+BLxwf;wnhcPu;D2p!)Jq1><8)iChCYV-~;m^B~o$4Q|aXPiuZDB#> zadePTzdav>^p*VXy6XepKpZ7OW?H!*ZRF9)fm9C8Cg&4>IzI-~2!c$wdqL;FaoI)m zf9u-;J^RT`!Ia8=>cS~e?qF7hbJP|f^Icw^wwT(pox*da@FehPwpPgOdW3~tBLu#@ zDU*x2)J_Y^Ww+lIuLYST&T;(;Y*WZ%+YW7HV{8MoBbU6DZ*cL>2kS}b3>0HuzuYs1 zV|Ar~Be(Zm#IYRTRT)Y#*4+O?Ktyss$h5}Qnq+KX0tuFqB%_vb2!8PmE3|@tqYTr; z`-xr+tmU#_+))H}6om5jnJ)86TpA#1eX`^}43P-hHd76rZ&S>oZM5*Yb^!e{SWpS+ z!@aX{qFYII>kT}T>Fq(t$(ektR4d7i5m*Npl8FPteNffh(8_mAI|A6^ML2AWJh$G& zRbM+Kyt1md7Jl1f{F)on&r~tG*?vVoeEr82#v%8MzqUbxVA#EWs({>9Hg^AiOKD|( za&i(Nlb^`t6+t+BKGQzz!6Zn2AOa3SM4Y^F0vQdXRL+^&9WZBbXo93sPF5720#_^~ zV}CHC8>tzI4Yb9*h7}^uM6BoZ^i)t+wKXQdXQ(Twh;&5c@XCLwUDb@!|6^L1(&`*$ z9A@d%#jMIsm^xV`lf0>_;a#X4CXp*t#g&}yHF;rBMLKJV3O3HV`T#sR)0_Bc>ZjRz zu;k#~+a-FLg=KlouL&I90-0gOS#x0HOB&>j)vqkL4mm%Sc&{#|o_EYAcc1;mDC##B z9DCWs3+}BksPm|R_~E`Cjf|r)pjooy@i8dpGNPh8Jr)OxYsy14VBQhLTB#3dE8B$y z)1i&9iwqz4);dp=^b6&Zg=#yxxDPdVsD#`gsty}&f3pA&iXd6sJ~CW+ZM(?+=p6Xi zDHivqPEhxFyVu^`!%U1e%&(|w8WRhcuHpMZ##s~Q)=VbsFF%Eb<|1gzvdoL$@W%4T z1)zF|V!*cI_w`K7O>b>(`K}+q*k0*9l1dG$>3b0Bu>1Oi`Us~9_by^Y(538O6W6R2 z*L$VI=n$w*!FN+!m@6>r3Hq=`*@>N0PKqWKh8h2rtldOzcRHz9avD4kV~D^^wGee9BsUe}wrzvf~tr*x!E3}r3J!OCS$p%eL+U(kkIc}DiK zTd?IB`DkY;;+lxu0))uiyeNy`xBJ3*#@cj5>+!>z?Tms%q-~lW5^7eLNqH|8Lho?8 zFRdLfhANnbU~`@`tyEp7MfmxDAb5AQ1P?@W>Oe zx^~-9Zt5{%ssR{+0J#kBTJzP`PXr$P9xk_F+-ugQT@04F- zKdHW5QzJ&ntQQJ#Ji~yZ*z+91t<-jOe$fl$MRU~om0YZ1TR??6~qQwEMXQPdLk);0@n4Km3HZ>(Y!6 zoO${csgBHVU@SgmU}R_S>@_voe61LsqsM=LN^O@dtd_!2l@X>_^)G#JCS8o79md>X=RqT&(Kfs)(@kNY<+)cisvw*Ij5A#UF9>)cuWzaMI!bWFP^F7fjT z)r7efZEF8eVG!f+12pEfxPK_r%2{5ZvXcMj-NPv-rKxd-|Lzx`ZtXlT7Da_uD)A%4 z4SKWMZmfnX2l9$^SN}rRQ6!hl*?1FTzk%dVC8P5XD4LwEPQtB8Tc%J6^E(|U#e*m; ztuJiOan3Q0TKxKqPuj(iQ0FjI&&DA2og~J!c3~D`T3I^}TfCaeYvQ%pn|kZmF&)+i zxmX$|i2kM9bM7aucQk-)F&E|~wPm-lQx?Ai-Q!COHDkzHuah@IjnoroIV2y(3x14a zh6Xv2bw}<`5G5E!-SN8pVmyW+e$8!vB1L*XadXt8%!&$LDcSCGh_TYOTK}RtBNGDw zZR-bYLIy$;3q`jriHX&XqZ6 zyfin-;pJU&RK~M~zP+68KLFYzV~?DIpp-Hv7GD428m$HG<38+n%h(& zQ8$32ei?0Fnf|GbwUXz2+pGF~IU|{9e1O8|*Qr|4a2?=umRs7n#145l?(b3SdoLn7 zdek{zNnO!lAi*>49AIMHkI;%*K!TeTg$?_!{e_|?(Did-x zbU^jt0VaCgXR}yH4Fslxi3z(zLnM93ZmnJOU9i*s1Syz_d28|(VU<^dL42d*9hgNb zX`%DucRyyKQ)?r@F6jcRXG(Bo^mb?i-9zP#g!! zPxr%3CQa%+|ILKduOn+ggpjKy6J3mc`~sOo>1ywXzzPH44-?YUg+kVGnR1`5)ehmd zO{NvOsGqNZ6@NDht?3R}fQcDmgp9h%fjn{ginm|$Q+0YbhPc#c5tJ4F?~$8j+X=ZsE6&m zeQ$6bUIMmW2)VWm#`1!H!XOlGre{z}%<%2?_^!v0Se3GPaZ#VfJZ5t(;2n`jK-XP zJqLj6eBysyU^NHe#`?4Kw?Q6pErTZ}7mKXthABO-|8wYeS3lgq8<$ls$KCYSLSvu$ z5EOC*+1humnpf;2?PeaeO%W^y0Fxbr;HKKf>PiAsfx!m+1+BJ5UChS5dxl%8#!Q&mE`Wh2p8w_X~`KaZTt(e+xH`kpnb*=AwGB2tfNNio%LFTr!^T+4>eD&3i7Jw z?4eoqP}cD;O)`~uL)Q(K{*>WEI9~j;v??4*5{V4+7S+s?yWlq^L-MNcr+rYHmJ@D1 zX`HnoJk@0!EEoRPPKPpKD1Rs#>-!s^vjXwv=WcHhx#Z_@1n(-pd6RW&cgdSaId0qt zb(U8ESCqa|_0FcujAuI55(HZ9k^)^ar!Y{dC0<4YADi6R1?*=U*2RH{t(b_UNMG4^ zCMvld>{G>6`JD7nUTF8*2mg%$>4uip`s8BWFpdnezFwQgUY7jhey!c#2dxnS3%Crk z`5fygq&_cAHo;h9m*mS9UmX-5&Yb#yxG|&Mnq1~YtmYu{ne_}XZPQrt@m`DskqFXP z^ggXlcM+^*Er_#xE4sR`vfkGnVy)_IZ(sR@22L>s$YH+Fbpa3GkO?){B%B&5a=_5k z4DvUXP|+HG1QZnNe&RIy5-hwSd3@SMEv9uOT(urvT)zrt#i7?Aelp>BJ2KP}#4A(H z?GKq4NIQ(lMyHvxsPSKtYb3qk%3mL>U=;5L#A}72LEf>KOhD8lXE_Cuk(hh@zkuc+ z&E{$j5uvtn)(rnK3|P`Yv5f??xLAeEl}3B8HM!7d{Xy^n8p!q@$m|8{ouMx1!fR5-G z8u=IChIXtp7crcy;x3>`ePd69ChE4S8XcRpwF1+e|U3Gg?^ zB(g;E8tqwATg6(oQwy{88!m*}Hx9dQ_|GvfpkoU=1=gy zkN4(LO~I^kY)e4~{*xf7um4b`?O`ngu-0@#+C1yHEq!@i2<=thp1~UDnG+s*Fk5+J zCLP`@R)R%ecRC(`nBgah`*9Cc8>*EEI`H}&_wN1->A(|KKcZGsMV{+2tmpO3Caht} z#q7ILl@D3F(rYpNLaj(mz{}{48di5=w_uWNR0}+-)Uv8{PKf-y^!-rb#W7U}FngRw zB~^XKX#xN4dynRI1odREo6HEw#j(<qd^rjgkQNrmrdC(6dDTvXFLiKM8jC1n>+VU=$XqY=iL@CpI-_r6*^L*g}uyn0V zWh&~#Fkf;`RncXJ>)A~zg6Ph_!CF?**8S*rE8*^S9_PyG<~F(N*Va(ZKDmC)HW_gj z)U-&An(TL3!+53lzV_D{h0!nm#reet83n@80?GdC!>4$`E5P~{qkGY>F_zr1-2M^{ z_j&#Oa~Mmb%=9Vr9^(SW;9H*_jO}C;kNldot1MvIhoW2#@4GqLP14mWtoJ{?eTH^U zW}^we1`3S-O%NGY1{v{~%nk!_)z*7HVZ=qvAiDj&ka4W#ktC}|^^(yVs@p_br(EA3 z>M#;ySegB!3SmGgJP-W7G%QUEmr^YCQx2u%yKOgb<6PH`2jp_)#3C>%;E(Ec=$~&? zBirljQf(dzICPaYhHyF;mvE2%Z_cucB{fKOmEs;m43F1^N~J zFE?oyZMS zQ5oLASc8vZ4opDTRvW(kd*N>kOv`8NyO7wa)q(|yWgkd>u}v&y0*}chUDpS3a_7P6 zIAW7mNeMoZdIYrOtu^!@>l&oT!;iZ^;)Dj(AWE6S%;E(3#;BJ?VS+iaI-*OAQ!b!v zeZOVOeV z$=EVwy5C51B|8BZGub!PiN=j^)ntKHHcL)KlQq4?wWvv^+3gTYfI~Z@>iZ)HZ}Gy| z%JZwU+h1dHA=DqKCCUG4+C1?0xi_8-JI-gzZ4mv_t}5AQj5khhE=Pkl1~FL9S2 z3grfPM-!~U1HDpU$r?%|Cs~IVmVQQFW*6(2kFSbKe4y+6kxbhc(~s83 zgYsHTJ+2Qmmfsdu zDpa`G@!bgtOzejx3BGCL$IoOeanhG{y{X~$8R4w!xBID{r;;H4fY{?R-%}hE`W6F<*o)G#2g@A7sza>*GY!!tdKOp0xDD39V+l+Gz zxB}YL6p#xZcpPF3qt?}qxbDiB;MRDJ%F1JB8<2@j>XVcHWOWO1b6-ozNM#jq5NWQx z)y+WdzHeZ477Ui-x}=)EuUc*!@Bh=%e$|p6|1?wFr?YGxb(lDS|M$%LNuH#7w6EzY zoZWop>vBcLK>R?VITiD_-*T1`Ygr}n{Wj_i9UmKnNNYzf2;8!D6val0Nc$h9)ivF% ztRZmircu70ZEWmV*}A-`tWA3~dnu96#t^?{knZqsA~AxlvzPf3?UcIqeGbGZGUyAL zsewFnXlpI6h$0PzZDk4ram?P^Ta0;FYChax0C zAv1WFyu1SoG+z@&CeOZ8&)b$xJ_~l;1W7XjLHoeJaH_i2 zyFu>Qz&JN0gZP@2HGwSh{G;@<&=~3&Erbl2p|Z3G#J^|kj10BM<#ePmy2^k?3HfJp z|2q(E-9&tml^dXi7h9eWBMd@a^PLzM49DN+TAQ$HOx#MW@?Q}0B#FyT0r%LBp5h&y zmzM{8?moe|r(5S*&gy=k7G`NQNL<|@@mYMUFmn~Ejp-mj&GwQtufDZx1>@Xfkdr~- zfO`>V^Hqy(5GG2BOq||5`L016*F*A+-=LBuu(*db1+IU%kkgZvv>^^kGW6Fw>%f}V z4M9qDFKV=e{I*q21!*zDH;E}Gp3{A1jNi*T{3O3bbgj9BuclDdTx&rSD3H{?U%1E+ zi~{_nzwbRrUr)LWdu2B>jkBcy)M@xEx4}8?)hZcjV0c9tuIO?bl#wxG-;`6w;=q2F zzR!uDXRsolwCxHX;4z;!4qPzu%JRItAqX|d;kIi03n~b9;BzlKM6&n9&Xksc0TePP zwP9-GYJcKezvdg4kDo%i6bg|YztsVq#KC@s6Hi4oF6{)>oH=to1dI0|Jp)I)?g?2K z8g-Iagpg+s+iviBVw6-;io~$!hB`*aijg1#eHAczjLX)Sk9H#ja$w2iftUs^x zVfHe(_L@I&n7Y=MkT3&gk+02`m+a77M(5=DmHRQWepQ-*QOtEqsy!I71pI7$NWE;1 zwV5RJtgz|~Hx7H4Nb=py6Iaj*x^hRno=8lfHuA5^nyNgd(Al}=Rvn6}SabzJsnYLC z&qV}XS(M3IJgMchsc{*)+%=SEbn!xz@E_saxyMns54^E=&vDgz!B|7va)^ULgPndl zm5SiY$|5mHIyR*aa%?q*RgIiw6m30B^H#Ty(|67w_f@fuYGBv86Yd!(8-nlLI>E#S z-%pjtpFi;DEo>aQgzy|W1?MU~_kAj4R4Dts9}zdQKX7NZ2RfEa7Kh;$E=F{*I52FRME&BW3v>>s=T%3AY8t;o(=fvgJ6A!*6A?-l3v{DT;&-F+nLAPRR*x zehIekkFBKy0TSJc|F;9mjvZe;@px82xI^n!o49S`#*K(Nu_M(WRg<5>8WKO&r6ZX{ zF$z*mR(9uzSa z3@OrFHTLEZK3Ol-c67uPeo!Pj`Z)RjOx}||n-T2h*Su%uSil1zvc_IYb#{4IH)wLY_6gF)uSwqRrA^`r9IzTgjcFJVtPD7P zehsU4s}7iBf+*8X8w#>Cr++b#*H3;t!uto1+*H18_cYc#3KOLCq zlMHbLk)8uE4_8%HHBEW37A2Kibs(aRbG%MFgCa(0B_L)>C7bE%yV{dk+qC8My!&OL zHq$T9{2Q~S|1KRtL+r7H)rYwI^pdPK=wq2=T0w!HiMi+vQ--W>XET-&;)FEu_@lp? zID2Qpt`nol({TSN(zZIRFpk_w8!v=;gnGYC|HcNrNz~Dwtjf%sfR>gZq=s*fzxSWx zSrcEz^N{I^umO;OeKAKq$9FFv0kA^;gGiNd-5}^CmcRf>(D2(Cn6<%FVrACF^%%oE zgROF24?IaN-%$~+8`l;=c1vyMK3|jxeyH^8zNyjBd4S#YDrBMU8CTZwhAzDmTU3wY z=um1V0nf2KIaxmg=il>SAzJ(8EyliV*3StV0YwrTfJ<4t&J+xL`LrjNExf({lnaEV z4bY0sU$s1wwMQqYqy!-bRhHH2zupF75zyoYA$b;S8IOOIK2%)6+sd2_>ujGu3#YUL z)BH_^Zh(ZdOr|b)F}a27KI2eG;?|>uS2CW8^wL-)T)uL|W&pYX-lRqYrbfW$@*>CN ziC<%h21yogDk|CtnOS+IgofoN1`f}xMZG^O#4x>i+|%S+H!!Z+RHRdW32%r z0>~iXZ?6H4I&|-L4W~c|`17>K2ShZ-oYZjx=;A%y4(ECsDSWzm)0oaGX!+bEH6 zy1Udz*=iGz*J&@*zxJK+2`CY-rmZ77qBj_X)VM3trtv3wMmk7<$EL z#&rP|m-@wzM@_Btrc*_b6XtBjq;lI&J@9JAHUDLgfzHfZQ}9o z3^dJf7*Y5{Y(m{r#47ubWUt}$LYePK-Bu0@AyY01dV5tqqgx5@>mAvPwHUNYS7tv* zrJG)XkB=lOU7L;-(S-rra-a!`P@^A=*k2pQ#Pt0wD~btez*zbd>2RA@Gz`&O*_b_R z=+~x&wql3CU%Rll5QE!j2q)4eUX0;mXRknIN#p}%NUF-_gE7IeLQ7#8BLnbf^-Qef z6c*W=L^5mX@M|Vj8$fM+B##@SO1D=82cg4wPR7(1W61a)^5}oA0oEl7)^@Q@OFjK_ znQ}K?WFwLrf`I#taeKP=Ohjg$h}>l2h5JY#;-hs}sjQ!T5z2NTLaheG86b;Sdf@7{&8|deLmq6UU2!REczs$8tzS-Y)*IEdA<9JX z%FmMZg|Hl^>T*0hkcdZsO|416@ggV9Dh~;7aiB1;yM}Uj+34 zf6hCa$p;@kK7lK5q^pC&j(fFgczA6u^y;H^%farK7b&A=VAM>1v5oQ>nZoLcRT=BM zafyt8B|$~E)}MUiH(Aq7O*@`Z2@H=DLwt7Hc}q4~w|(I}Ru?2GNpL)D%3^^Lmn007 zya5R18&KwArdhEug5Xa!TWG_hyh#0;_*u#W|BZEzg25B33R6Zcnn(o6A@lQ$UcP*A zITn1aD{%B^-lcq0uv92wb*n%EfQC?S#L!KNziz^L`LYgOn``mQ>qcI3*=`_VQf5N< zr7%x--;=WWv`!vOq=(JaYnTP z5P3Iz2cxe%E`u)n!rKWMB4MDQKtQe+7SleX(-$<@X42VeK?^$ZzI;w}H{<+qT>2|O ztl|i1OOBg7%*)f0H)Bd5n)>s2p6zYx4(1lMpd}9 zOpN3$+Ldvulhu29%Ouqq>wn-3i$07Vm3+v=+cV77O4ibw!Sqy2AmcvvYkvLYw+9)g zbgEX8)T8&08v#~!iE2yczrmo2fH?ikp+giZHrl=@rWS92AlzeO!Vis}COqjBoKrM^ zkxHXc`TvT1qv`m&vyW%Zwh5z0vz9UBqXJYpA_2#kotHX+Y`h^|+A>;q=umA8ObDo# zb*ZT6F)o)$PT5?rmkaja|NYO72{ON=Hh#}w*<9u3!{jYiYb^4>#IRi z?~}zl)DMHu_fb(qM?ny4@q;lQ)q!vb`CAztL@uf((ywU1l&*%{Lf)7#|HjZ3E8@}|c<6JM= zy8XyanApGgR+b3l3|Nn51DJRFs^w{Eu{%&)WGdb8D#U%J^=p3Za0U3)?#Z-nE-CPp z8N6eNEF^gF`t9z7J8Ce$qGBHAQ4WOp&LdD?TLLofAd}E>)sGOpFrzQ;m61>gf$+C8 z=jVuS5r#O6!lpi^#2hNP755;-QE4j)^*`;t3S=b9gk_Tyi0Gq_3|&*$P4vNn8b<`xEVWNX_X|J1NdcMBjxR72eK^ z??$W)X9eZOoDY2)gh7#QzPZ^9oXK5w;xMTyOcmt^Hz8(tFvXJ<<9i-ElQ9FEr)|9x z*tp-X=s@_8l8M>8N-G@cZ1gKdWSs#?l9iX@pmV>6VnjqL<`!j03025x6+H*DS2xKx!Bws z4=(0n5~%dHMjb+ZY0M&)q%2D1oxiH3z2H{_VjP$wlmUl}CMN`6bRtLT&p+n*lPwo% zA?$+zClr1(Am_z@t_KgdVKfNo>US^)KTW-nuo?;{oq{$-B)jk^h+`O!)EQx)ZyAfx zO7MH@vGyuJVkrjS=xgm06^|LwbdhwSKnL&&$jrqmM;{C4$BeBA1&ATwdKy%HGM#a} z<45hHaKOMx>co~@WU4J|$&tlBs~*&gwk$B!n!D6&WLYGGLGg539Qom3YGw10<77>v3y9*n4kp&lXeP;G}yMf{AbaAggJL9zbjU+t{U7xbnFr$WDk(Je-!7lhVM z)*g5+!9{$DU@DyQeP_*oveqeP-w#|4&=kG#&p&xkJ6a@77AJ&CYR&^%G>uSt#e@)b z#z!OHAdEs>rdaD#Is;$AG(Yk$(YlS|s@FY)%tpU8ynY1H_e0<{+2!gae*XVybYP*bZkWIb~*LcIFFsO-%w1CE4WYQ-h z6_NY{(hHp)?`K72T@$Ma#&|k8Hw8cdC5wNqcE+&I$>-%w4bPu&y6IG^v+pJ#>{%Oq zG3GaA$(n9Ct|4GS22-@b|BLy}N!HTB-0uvI2~^RP-h@74EL6>Y`{eOgJ0^js9AB|A zf6)K*WMr5fSg&WD8+M@R7(S1cgBajbElhhuCG-?S*hmWst?d}Ab864qk0DiTJ?#pjPGW)0#+_Jb(t_7IiBg&Jhw-O= z5S-AnQ}Uwd+XRd-<9nPBCNVKyJLHo0JKL`#tpUccvl>q1FjnF%+Wu+n50U<-3tBXP zk{x>e1zcdAX){<|fi_0J5Q|MheW9B=B?qVPr+L~_4w3!-r_+TW*ijY?-y$BV=U=@@smxrzCf4OLnfvt=5o+IoKJY+ z-1b9u&V)GaasPjSlrtjFGy|i>N+y8iq>S_viTl4x_BpLtCR6JxEV*Ax@w9f@uER+^83(Ve`r38*=B=Hz0hNg#1Pol>_aE zQ891?8mBo14;$_lkBqBIfwk<@{?-qHkOj5Kq>eqw{&BqKG@1C|!9!LtMLX~)qtkz* z+f+y+^jA}IdBsGs!4~$2cgV@WSQpe)#0$qTeU8%34;=1blv5UM^P+7D>UCg}$eZ)y zG+!k~;$($UBXfOXkN!){CjRHHk-_{Rh~9g!D4#8hH5d zxqSY+mUp~CPV*EgBwNU#lYf58DqeuEiT`c~=TP8jZhy^~%_(B2go&rjb=aJ=ZGrn9 z-sbl7bJXYIV70hBo1i9qPVSfiv_!* zIXLpuxJ+?@pL7Ji=+c&yh->&r&d~DiJl42p^g18Tav5pvzPi*ad4rrXBP-8^hcA=G zHBxB{@66M)wju8{>UPF@PH~w^cRTa}7GIwLP@8 zz>H<=R=`cK^sG@sfeRZ7s+x`6_e#|$Ux$DT@QA!Q`XLO}4chyus7+@e?8mvKkg?5J zv`HqB8Jo^wqF&ez&5$ync?MBZ#>BX72jfxV-jK^HgJ1m|YO~z`(>_lr&`xke*XLDp zt%7$2zK#xIf?vE{f94sZpRx*wJemBY{|2v^Lbg9P@8^XdZlAx0>I!Z>!81I@bRbX? z!1*&hjBsCoyuGsL5V-fjRAPDZo}FkJT_wYK5})8vrlju&>*SMua%wohYx(>$>Bt^I zI9ai(Zdwhf5HF&*OHw1e57+9{w0G2Mvp5gu`>B${1a`dFXkGe@6mKtHY26x& zgV7DadiN7{Rn!cNd!;vV-g)(U-kx{fTE^%ntfK8x%5q_65_b-IqQL1#rilrl#Yk4W z4mgJRF#{e0skr$Zm2pA5Wir|6tb2k?ZpWWmXqh$R$Ze}C>%_Ck{J^V61kW?#MNYms z;cm@$`2YX;R_H*(wNiWYsnEkJhCv~-2%O{pqv_4#nmD`n;miaCMZ{n&2CEPhXEG6~ zwiLlYFjTFnON$09gbbCoF1RC#I9UYuwTnw@RVWrkC}6dSLKc*#u2tJA;0AH28>m&nIY$0whth(z>pVC@#d>~3DhsFsZ$;YG#D zkc$;R=r)+B+&ePWXf2qC7MX!)qwJ%nmC5yl4S0LdTC_aZ|K8Krv+mlW&0qO?nZT#< zTfI&ea|7O4C;jX3#R+^(Pbul>l0(YBR*v8fm+=!R>D~w#HQ6~%#<(lXGi0#_5<6@7 zg{oVMamT0N6R$UXjQixnW4{B6@bDMiCye$8Cs=)26X;#SONwm?VNB|#rO3U?yV|5h z*h4;=7q+3ErCcGGrE%57wxW8TvG+(~fsO4RDb0oN0`2@A9%a`K`+}j6LfGdS8yRI1 z(L3a8J$NtY54QqdlzAOHUcZCk$=G`MTg3+E#a&+3B)5!)W$TOTWt2fbN#>kDwC#F| zIyi>#+j$Ig~~0Un?hGH+MPlm%GyEQLe}>Y)|*%cFHiUoRu!m>Y$VZ{KcyK zZ_o&ifj@G45`JgAv^JYeD9LNz2_G`?1@-Y>Bnkb<`E9L~RoPo7AvU}){mm$8VpCRx zgHgq_xYYqfsE@9VDA`c@1{ogSw^>NHAdsy#GP#U$Fp;|J(s{gRmN?LVZ&=y;vh3A73K3V~+@mOMJrdDPL&r%?eWCkM#PsPG zX6n;#?*R~jAHB7AEkgN@Z1)>jpOhmvYzmd+PKsz?Y!eiS<~+pBA`)-Sn91;C^{;i5 zYY4b9BRfi7Fv>4bqVL{oqK&dA2|eN~eQC=npDF1T_shyOm8i$O^9-onbLVRMq9lvr zK0s!qL~P!&Wdmhor-N(~XQX5GS!I4=Utb@Ls9E@alMzLu)B;;doSuVtNN}NvayYbJ z53KujcFr{_b^($$yEnDWrkufW`+5{rFVJ6JK&;W0Sq2l6IKkYgb?#ko7_XId8Uy0S z2#J`vIb9ki_GMQcn)cDh!OwlE1r&J2!}?xP2U8k|B?72K+UMmqL88}ZH5*(|K*xGu zO=0=bqq6dRvesPyrZ|L9F8^tgywO@y3+47N&ountmfQENlanG3x#7w%Y3_Sgl*Ykg zO>}{o+<*(#-tEHdGM4SG?>I)eW|YY+dBm8cLm%KoDOSQXPCu+0$ zD6^dVXW+>R!F23DZJB-I!T5|BJ)e#DrjdYv+U(|+(=P9?km_QvOzz!JPt;^7RHEP# z0}~Ss1a*~jlFUB3#9T~Smdh;YG@mA)Z)5BsC0{zIn9%uB^EJY|WBGZ;o?^~jNn3u@ zd)}Qakg4)`<7EhP1h(qN#^fW6JH&+T#f36i?2lSc+7fRHFYAP5y6CaYcFx=tKqxN+ zlC@n)lwmN0m2O7`6)XCCyWu6GX-^LFlGd)FU5}$|!G#)?M(Q20qzLUEMepBYoqi$cRHbACl%ZE`lY@7c?1P@s>vf?h2p z5W!Scwq)~`ZCkd`+z60lj5*oajN7D;1MvI=#Ibi*AI||}))@||-jwCHI+@rhIh{bg z6H8^LU%!7xNjdw1J)V6Hv4DfbV;p~G!n@bGN>XbgFD1WtiFIEvtgoCEg@+O3;V{AF zh!Dgc=0s#xK<@aKr{lytMZSeEWf*kKfex+6pC}M~Ag6lWigK0pAg? zk+becX3ShG!m6<7_3$juST8TgMOX@_BBym9jfBWgNmzXjRWm9TudI?=Vj+GtnbsB| z3y&$qaUK?U>P>OU0C8Lt4CI3g*fzNnaoXm@`%sl`k&NxJT<&blzo_MVVIe597qr_+ z+A4jhFhy2YK2q3*R#wVlCh#6e^-$(K>~V_;tG^ zSE+3o(8CN#|AgVP7#Z5P-0{7q$qXU*SY4i5)4!CPdm)J!B=NcGl9IbU85O$8Ho4La z{9*XroEC=rf;eM;eUstF5*a^tV40&Leks&cGtOEf_)+uQ*c9m7tqLj@pJ=K;-XGi{ zRhO4l)7I59*w5NC7gN@8$JnXCZEq+p-aqe9_x&w+degC>n)cN43$1(?^rizfFZa!B{Fuj1ehPfuKDQp4n7vs?OUwa zrE3tDU`MwfvK8W)_>vsCInFGiE&C+ouw6TG+Rsa~N0BKpRXecK3P!8%hCMZ))duH6 znwtqg@A?l#l;N+bY^2K7PPxZPI0;tRo65>2O*VzN^Xm>v-gwN86XB5m>JDmZmKrkN zc#Ax$%KTRM+_FW^n=WU5BzM_&NJvRo7^v?{S$=j4!bQxVNyItEd2kTFL?+xWaL<*4 zkRG*jy9F^O9#0bvj2s+0SU6j{hnZYY#5dIjdkl1BU+R2*6o1!2j<)SvQb2J@&^HCx zUN(1@{=<$d2SfLMdDoko)(gw#w~F5Aol_b6`*+{FLE(yGe_ha7O~v{H_YvPv zH8r8fCk{mAJffXrAyvNL*EiyWJ>WR`NNaD?#%VA1$P8(rw87n1_Y=Wa=wN1~EA3ho zAX*`44vy*Sp$}b_Tt#1cQue}lrcffbI#F3|wv{H%{e-wm-l|aFMgGA;1y+sv1 zZH&@`*s#q8Wv2(R@P62jj5CzDzQmQqaGu26rCsxJz}@!;QLe@;w(jsR*YIuIaDV+$ z$iM#YL2gg~M=uc4MpV2MCY@!3c7$*f z6v_$W@zSszdXQU(ioHh_7Zh&5hgCNJ5*6d?C*zVOCl!+!(*f&^7Xsh&N%Go}z$s?I zw~to0SB43un~k>DXsGmz5bsZ+HnO zY%eS7v`86HQjiyAQCYf9M$Ptb&=J>gYu9t+m{jfM_)(sV`@x8w!f zLHl{$Xb3p{{8=`*Zf{{(W-c&)0PgSgU|(?@9tNx$bq0ZXjv$Pp8{Wc-KR)W_ZyyE_ zIgyf6(>v_6Wu~dItUD3?!@#_^^2AYsx}@J;JHOH*To%>(Md+0xTJO}rPu@R%#X(;y zq#zzU%dYI{ZvGh@No?@?r_X7l>U+F}m8TxJd9df?^s`YSG7qeSWKvUpqiqCZN^^b$ z8^`wo;~Tn?uTi#D-=Bt(r5!j(Fo+7jZa$O?&j95(qI*f&Y(_P%(@_ZhjZ7Izmf0NJ zyFnw#aNL6^<(SMpx-+^jA+~9Y7Rh?-5bY8?s=du6zY6O5Uz(~_jA~%Tf_ZZ19Gv*( zBML=wK4eo4)3nW@JSK*l{^8KAU{n@Sao z>Yd514rIp!<_)_LvxBns(8^TtGZw*ACK>PTe|>#?!zfsZkeX4U<`E1Z+I{u4oclwX zyE=oFE7u{)x@-4f;1UX83ou6oaP668z-q^nY^Z!P6Kmz#(hz=JFHhuQi>FHn1A`m0 z)-?HA=TU_{^zC|+!ajI}-*LIK*93F3UL%ws30F{T#;^3^!x`Se-hku!f>Ltu1}D6k zE3a*{fWQ+~YcwyJSkXCkU*gn=xAuZVcV_hk6~l>$>+{u}j6H4C5QLI=9hMm58eDCrvpMrCKGE@0JwBlt7Zo15j% zUBn#qZ0wFjdptJ69&5ny!<0*3B8l&J`}uQt5s-V^7Nz$b&;y*3@4asa3lBBx>h6Uv zX`%_*M7_r=tB*QzM+2D9h;ns&q61k=E@ld19lDDRPZxCgg2z z6H3QA6u;W*o_pH@Y`3Prx=I_q+#!qp491hDHRY!*|Jmg2|Gu4r{Pet|jZ%7f>?m6= zznzWYY1jzK$!ppH9;>1^_=Sf-)q%BW)bp}R0n01y^qvrS%Owr2%s{_VP z)XGeo<7z>lzTuJLA&rduAd)fNSFs(8rI}1Vd%*yF`5!`aCgm5m42cg>H zs$rBt#H(yWmGF-RSNMJ>{2z~QAM))-=dn)1HSoMc_^t@@)78xR^Az%${z&$aZQl-X zg@C+xczXZ-;K7^znxWHET%4qqC8IZPd$JppP*7oFN});e+7_ZJb%owX>WgRCG;vSR zJY;W?!HGpU;#F?d-_5d@?3-wTM5gsz=Bs&i;NkhkTrjJ+yU(~l@`tBoWK7u((o!xlrIAx0pbja4R zdvD~xyG^_)LFAkca}yOIkDkHO+&1xI?vcFz4lpP>tdiO&{7+Spry=Ys{Rzf@@%j1x zvXrw?S{p~En9adywC%0OQ8TQRHSwhcEZCTT+G%TqpP!FN6rteXztRgQFzCh=FS#WG z-DTq`Z!`}q!Sd?>s0Fr`#XyQE$=i^^-~NK*`!t@%txV|Ivl+?}xm9p?&(*ko*-3?U0N90j-6R^g$XyX0re zIm2^D6up)g8wzn7+}MGp zdN5>&6`8ehacQ*CGZeCxv8N~NkbT&Zc!e<)m|g-1zQYo_PAEo2*|OO2l@WBTm$gF@ zUzDgzWK>@kc7Y_5x8cl4R25prSqYhT{zbWymc?AC?A?#y#t~c2oi7*qGG<8l7YbFH zZQ~}|<##BMm;fe|2(hA}J;`2x$Gp`zHFfs4_Rf-7He$ddUhdhf9^hH)iBr7qNw085 zWi~X=pkl^F0BGLqbEpFdmgt{qOk-ZeTYEP{32yd-(ZxRlsv>DuuWzBBim<|DO0qyo zF5#RQ9}mea4pMXVVUC+o{a$?p_SN4>>e4jZ{P44bq8|UQoRWU1tZbcM2tY%X^QNOi zB$_&PD*JzJ`_U>;Svt4zQgbr7+N(#89&&e3W+!^Wmm#sWVO}%@2o05sSL=0)0Q=5| zIyI+j#tg*gw%)i&S*F5uW!=cRaespQPioGNys(M3=Q|tD$zq}-C}$rSf!}E6(CZRt zSXNwuIV_I*bn?g8Vf=pw?ll@T09cLl9oueRHkhgyid269g;;rM72|<8gt*Z6KB`} zWwzZu`;p*veM_JEn&JDa?mC3i`EvU+W!ZhkHf}Z^*P|Zu;de_#M&dmOVE?q5eg#=C z)b#Poo5uh*Z#I5U8P$n<`%Hj@!xghvTKA=H#&cY6H)N(YdUy&Q za6-prWYLg;xhGm@(asM;lwT1YDStZ{=a+=-o&oFIfqd(CLAB1nQ#l>T2^-5butfU@ z59Jm!4pDcP0at{SX#CRxd34alK~~B=^ZlYBF*F|OFU8|zp`M;af{M9R^U#jUY8v+D zDdNCtcLQPPvgaA;m`w-4g8b?R`U}ozgkxiX%oJ+pL2OnLr_V)UWLxE$FU_kvsnrIE zES~*#d?^cyh=8L?C^$3S)o&PH&UTCpsP%@S!t?)Xr2YLOndJ#)>hs9n2*3$mfYLKp zofbEMP;2~m$P5$8X!nACds)w3;B~5giiubb5N0~7=uTOTge$zM%oA)SCYAOFU`;Ic zjMz)bYtt5iB3~*Fl@)E+QYPn$$Yk$Ln@*v)J%Q%L84M$;iRyWO6oV}c2raHpJ4$;2 z-ZR65%V}CFi}<;puDz?uJKJ76ezhc7A?T)d7|9=Q8!7j4_UF?q&bd2GM4BT?vqi6xR{H#;_L zWh@^^K0J;M@X1BK$P|uCCZ2abhGuG~N;Mjw1$1N6UpL52wcl)>Nr)EFF>gYl6MP?9 zn=61|vQD#&u;!7)e3c}(T#>{pvuA${B_45f^*Mnp9tLjc*GzJbA`G7c`$EnpYqj4hP}cv$<2yt1Z;M#+|(r z3)stsZcvD%_1$-AXB_KOzZ_%)De-F0EWsZ?4nm=S29)hTgjC2c3DcQ}6k}0ID(AM+ z{15A*3b3A7Nmx7N(O8-3+C1PSytCmIV{iSG1)xlmm9u2R8GDD!Dw`!whp)VwTqk3c zTQKNV`+C60$OH3i`-;Z#=y9hx5U^PSjpE|X>a??Iw90)*?kTr@+z(wi6Eo?3sj#3T zLM%fG(~YE05oAS}Y^A@Ttl5>1f>x;#WvZ|C9(2R)QHyZFnnKj-TnJmo%d=)USr5h>3*FPFxIdF6sS<~@lHdmic;M0dXE33qtk_*may$g$_Ve(;=C(oD7Vwc61pj z>lZWFAy44*4C-a2^?*Dn5ur2K4xE+O#m|AecGMX?9}z07$j@E8djuF~#$DKuodEJZ z0s%dz;v1|o(@))QBib&0=P`vT)LjnbSWLcO^pOxxRyzw%>68>Peno{S&4ktTV!hDM zyVtapGOA&fJu4}0rbk3ks5E;9S`+gMY2E`dHb*Aj1yw!={dfwgIoZpPVN}ECe$++r z8T;DK%A6n5?qo-Y>4fLZM=($S-VpP^uRO7D9o7|8j(3oj{+bbFTZ+hgdbz)lbZge zVh^@udU_*%C~gS?P{x#QKsH)norx8OQL48jE{!<&@U34N`w@FsIpqq&8Z_AFP(|6c z@Q!@L&0hyydzvswhgHG!ht|ml4YNyB&|2QxeZ=7G?;zi=?h{RL%lgxzeK~;cQgiDp^q6 zW$`!Z2ctskX{DdXJC2^w;CR6A%A@+y)D#i?f5=t*kwB3^9RwO*SyIyLCt8^zy^x>L z`V-9!ME}CROaSpYh_KF$WrQ$|4r{xv!GTNrk`<7BW?_Bk`-;La;cW~VK)=dl1X_9|t7T!jtYMMvirQ_vk+0FPIS6~L| z=|hT8ZW_n8$&Dwlq{pK;`V%k-wDs)A@bV_c%WkIu117}!hsAOqWEq5}UIwplY{U<^ zz>@wQLpgT~-s`FE3=P9Y6W`ZtI8EC>JRLPd?iyDw6@RJKmZO;>9!4Pm%Q9Z3lFiR* zqAf#Z#!!53%5fgkie|}=CAvYV4gE+i87;%QjFt_L5zP)WiDt=jKqQ1>C@cj*G0yRU zwSd?L{xb!iL~A~7gdj=I-DES~NVMmlnZsna8md4p4mvlf08N@eC*5(W3~o#2@kG+i zBpsvr%GeF1%^+lVjFU&^>(Lnci2u-#NF)#pFph42=6vL0P>EYEyk0BJ4|{Ie5b9U* z`~7k%=6<8he!F41TJF3J{l$S@F*USBj9(q@=;=p09|BN5q{(40_M9!ac^>)!5P&{; ziHbJ1J; zFe*$@vJtV8p!mjYxz`F|(!xhcV3N1u$QQK2e93dGcL}L+WHvX`76&LI5Eq9*Ztx_b zzCS`}IF0v|^s=bSxxDD3+@TuL#pFqW|JTSkgS`1qJ;3YlE1GfXxq&|*obk@SU7l-A#QtTHshMy>Fd)e$Wy~o?xzl_r!gjzD_!u}Fk7YZ=GOAw=z9hd z!L+ci@{T?p)}BN=k&wX8%zFwxHE~w1GSP;E$dE@!R}F4M71;wd$k^b8XicXjz^%z-V zg2F;vRkl$h>O!}h|C^*Py?{5#0b0@ON30!wH+eM?VW^%u|Jvh3jne&(fC~6bd(mx3 zr=8y+hoGAObtPj8zIkvDT0?*F^qd@s3iCZ*WS$ur(a1uLCB;sb^ns9$`%qlJxr8n# zW1JwFFSViT9!#7mfGon2MoiEqJwO}UnGDI~xEYf8@vco}L2>WMxS?d_x~+YK;9iB6 zpcfS#%b;YtL)2IRNr{GA=`F(F=0^-;gh|nmvE*CEGKN_4;^q**T5q;SW7Xzyta8a} zCWMBczyn5dGUgFw3;b=nR1_>X9J(ZlcZHReQiiXP!+wIut$zKGv72nw$c-XAC#RGq zUlWz&;&pL3qo^3oa8T3d-o6cLdSG2jSfd_M7XM1>0HoqM>_H|L$)kJWs0Mpzi!#)r z5*`oY9|_YrTp@DqGcb~N%G^Ul!HO8swBaVv)8t^eQKT)B#tlU+*b-qRK>T+OmJoI~ zZ5Z*FMBQ58z?uLKNDs#rnD4^D^e{9gv zyo2Ia2a>AWXv}*B)~W7xH&9k4jPkKzXtrm$A5|R^8>yLua1qt5Xj=o$+$1ChuzDAxfL=+x3 z8Y(i|D=X!^15uJV&cU8pW%JWnJ)0m`P9YOs*mpO}4LK>Ifqgw|R}cywSzf?}f1CaI zBiiyl)*QwzL{lguq4@G<`eXFjFj z0ahOC3QIi)&BoXrDJ&5j0*c%#ct?`(k%OF!R_8o7=hAMh7d)qN@Ol@&$DNJpRYn_# zUD8w6MF^^hyHAX^m1)5H95>oF6|VpI&p`7yAWmN`;j+)u&>R1@nSmDH5{U-#%I038 zUijI#%+*puHcQ(F`*S$I@q-#Fw+-+RO_0{EhPm#zon<}dAq51q_lUiv2`J;{X!5(w z^5{qSGKzJ-6YArOmSMl*k@1nbDy*cG<`nQd?Q$lWgva_>2qr!i>_E&UMg`A-Cx^jX zHZGkV>0OPzyU1MFhJR%r90Jyh!uyhHYNDF-x(w=u0`D@hBshe2_K=7_Y$|7HWLrNP zYlZiwrI&!v^Ltb<#fzDUVfC#(8X{BQQ$U|fDrEn4c{>MiN0rHDk$B( zSkIAmXf#A2_#Eq11@M;aBguP^+YJyaZ(?z&n=*d*B-zi4YkULmOG({Xb$b}T%!BZ^ zClaPgrvS^B#Mj<6LEfiW*wsc^KbkBkBO)tUyP%Y8X!#psPVnv%3d-6xMIxRbRUSog z)B5z~7G_*@J)PLcTxGbn&2{bKIDR?~d!;k~7EkQ!fFyu_g}EHz_0H^U%B5~WNGgn#_a z&4aCO=XazE{S!(=ss>2=+rBC>u{JgNW{9D(*5vuAm(ZeSmy^w;;KnaebWm!jWn(e z>Lzy=_!*WteqPSvLRj*9ONqC@3KtV+qqJza#ew1jWWJDh{2>m_phY;+Kkf_}v1nsFC!qcUz zf-s?(cX>`t_lh=`7*Y{XAU!!Qn1N9q9Sv{fN;%vUMv7ikfpeaho6{Z>uqtSh%rum5 zFQF}zM>4H;iOB*6_a;LhW*NJ&_z^fSwZqx#IZ0N^6&uESCfN%q=j>FkXwQ|!a+`dE zy7$Ke2(jn0%#FG+2x;^`Wzv2Jh_XDRk6#i`8%ihX<=U>ko@4)MBs|bhh#__jZ*P%X z7~IzHW@T+;jPQJ+EkQuxgXzW=#x5!>Helz~D&t}ax>{S!*oXp9OmYj#GksOOcMat> z`b@(LsUp=D&hW!iOGARhUti9c=(nG5oheriCe@G3w@=U<$-a4AbAqMRfGCY->qXdT_XMS~?caM~cl(lRQ`Q1(txUwj&EFgXDf98uDk|oG3$gvI z+7Uo0TYUR2otp9Z@x*iLoB4)oRfBFC`580*JM*lSx9Ry;uV`0L1j}o21TSy68f!3n5z*I+7r{if@BORuy(m zH~iyVgyGm3aB18f2Zm8GQHvz;_AKq>fU$3HVYj7f+o>4xvIMWV(GAyFotR8;E^K!L zZji*+)clL5$pbvus^!jC3`Y_bNgZD>oS4|(HG2f~UQJE)lx2;i_8OVME^s^&27);n zQ|5l!GLUs8wG`ty&`IhJXn9161rsG%?py^QT!Q2QKJd)QTo_f*meGN$q7`!GXr${{ zf(zt)%-NA4-oyZp+QCGHcQMA3ag4}Y&P{-jaHdeqC3Rk+6du%nZ#TxDAcTF4@;0sa z#%XJmE6;`4gTqQoC`)yqIIyO=15hcS@06$0_%KJ8+rW1b6!TNy7{STo?NLRHLpv6z@zgnQG=Yi zTlg>?ukW7(^)5B0kTS4gtYLn|bc%b|Up(~X(=(LvoNg+iQ8`=!2jPMy=gs~sfr75S zaH1xLQT6yWH6OEj8lHls%jWHeTlM)zxKI;7f7NK*V=gJ|VORDZ0~>pa#C(w093D0p zl3x)Kf1&Q2F?XHodcNyg=4O#7IYDS(e)m5LbS4m@7!D=d-byHOVliWrkK( z(auWzBnKd!$C2%m)Ajlp!thEyNiGX4rCdkf6|y<9A}hgREw2y58apYlwwlO_8Ej{a z+XTRP)t-LRx-qF*9V+b`iQ3X}d4NYXveJWxujd)g;>*m3&ZP5Nz z72v(gj6-cK?!&skI`K8fnE+xuVu1KA{RlX4K=#B2X8}U}tl{1!N*O7v>3au#G=PZ> zu(n`c3cbYs)%60x2hTutkNQo5x03l5k@nt#STq1nEypNje}6Tnoh*;JlkP`7m}Czc z%U@>i@ZDu{;46?wKSuR zQLXs?xEQiMHcVqm1;rD=B${82au1-F8tHok~I3Pt14sctCGHX z5l|}+6cbHPJ1EzIa{bhNcr~5c^UdZyrs-PR<~4kpG;iqNQ;}U3GO)A-$-o{kcEL(^fu0XXw&X?RhKa~$^QL?} zq8SzZSHm^aLy;&cDQOxGH`rmG8VM2Xp0Q7ot0+b%^&+3oUUU}AC9*9uA|e8~BS^uE zsv)fl3WK1(HqEm<^NEJ#x70Bz_Qck2f=+_zZ7NWyj#1pjo{cHF$gaPJVu^Q%7)1~6TRbvNwd=3IJ3S>6fE zdoOs%Gm85L)MAwj#KyPFbpgbV#x?D@q%2n&V2k$cc9|*uO9VSP38MQ=IF^knqH|1D z0OJnMSK(pb9#|Vq9QnnT!ng;$S&w*KWP}c>e~HRN_{Xgv#(!DA{n?x(!A*$*@R6Nu?~&5*kw7jehNT!|DJ2Z;O-><6srbn|EsXOAqGr8o zg+P+O7Uw+5#P;ApOr2vI^3u5ye1hS+2}G7@{w2nK@kAqZ==#9gRYY^!wT-AUD{Fkv z?8{Vp<696_G9HmQB_%UU@mr|7FBNtZV<*{|M7c#Fv)@bd0;x^(Co#CY8|K}?78r-y zKYo%t$4~XWH;J#VJ;H%u>%oDN5V_?al!F_&d0U`qA~f|&^t8n;MT5R>?Lz$3kd>3G z;2xpUEY_m@-2p;Ks4EV&;c55Wmib4*h>I0glQe2cFWMcuCtb=cju;fBZTvpmtwi z9Ha-PrfG~SVAxR{3IEG%hrwXGaHPPjcHKF%4+b1rgUAY!+jAiy$qB=L*lsL5|-Ic-maNo^sv~j0+@Q z=UBHez;>Uy{SpOSWOC~3oeUR8ygFTqDiPwC{s|Sc8@cpBEe$%kbGxMO#*t~!5Cs@2 zrs9=Vq8~iJu#t!K>ys2l86e4X+N)*@X0;beJAT7=>X)@pVH3F*0RB4Y*_SKPB)Bfx zX&2F|zlZoz`#YVje9%dHG8^u>rC!brKua*{P|a~XYZP!WWHJ6!SHde*T<=tJquXz=j~O`9=+bbU+A=Y_S<=oF^!pLxgKPOwGx@|C4c_0oEt=nb(#LM={PSTf7>EQ!0P;?TAWjpFVispNLz8 z_JJP>x5k7{tfrR8RApJ0a!{kUlA5~;=TH~1g}v9^cv-Ie2ItUy^Ti8BRlgzUE@fS@ zSZ3qyp=vq&^N1PEhyYcNlo?iK_Vhx}*;i)2$=%o|Ohn5c{d)%i5b3>!2aWxpT*ilo zXFNobjZ8U~oMxeH&lr=DFaAKT%m+80-P4F@6;cz{soW??9{0a=++g@2CypYFdC20` zz2gbJKB5tlhk_UCO%cq>daFg}Z$FvKoX%KCc(Q+U7ilrZ?>b>i^ZOHNZec12D4|K?p3=%M zSikOWWb4!(LP5w%%KDvF%B6WH9I2^-swZ##2|J_G7kN#TJAcP_-KyB~LO71qW%f*l z*Zr21B3H&j3>+Exka8RRxIXV?L2Fzbf)@J16y+lZ5%wL_3s3?EB{^=%ox%7gR1dp( zMiuucqMYJ>lGe^86SUfhdO#+i0=(o|2VJW*s$EQdWa zXSrxgra0q?rtrp(V4^?~`?v|rPF2$9%OU#KRS@0xQc{G%(o$S~UhdSB$*CaU3&=&v zb>kY!`u5AfJiXS{9~RLajk{=KKmKXT>&Bey?R>|e?l$4tHm@FMNS_Ef+Aw4wQ%5L3h}E)^0+rR6<@0w6al zxmPRng+cS6DsJ0&=O@MYd*hN(r zKbKqfks8+aC(oG1cClBeSZgZ;4%XzIrD(1{`wqeq4IYnOf9$j218QCmS9>x1vEC}5 zBInkipPJtBu!`Z<6E6ND{-}x6R4u=<2-;;r)5YwfT#LbcU4{I(m~j;nv!2j)fK&j1 zoXN#bhHhk$Z2{#}%MjbGaiks$XH4rFkcS*IVTw#OmVdJ!%+NqU@ji$H_x?At$58c5 z@1-8u6~7L;`I~PupC}yYUs0PY9zI*>O67Njglf>4}sAvv}+8%yU?j-m$)5}T&& zfS#YR=`KJ{ct!V;)I|GaqTcBg-BT&2Hn5Hx9;#LFtE$@ZgyiGP`MYInr^3F>poJhS zyPbDa+^oR5UABr5L1wAM96=^DB~(-}%1C0avlBa;)Fv0o>0b8C!c8Vr*v}y%c8qYM z6z_Um4&c7Y-yA@!?hXeXO6h!7O$yudZ7OFQJwRG=Mg zW0GJn=Owd`b(OUNQzbVg)cAQSEFnbVwmmzUnAH59XEFi5kqH-Fxo3oDqENBg#F&Q6 zYQ88}rbD{q=N5$AG004i=`UsWme8da5xH)qRTs&6In zKa8+{01JsqlzU0sZpzwtL>6nGd6%~A46(Z-v|s`BDQ6$9xKdAX|H8jUQ`=RdFa_Ba zp8~O5yjdb%RoV2Z!f2jm0x1T9$|;0m(?aaa^gJ7ZCTgJ+SjdsCI^^^1`(MLy#9xt` zmS4hW%Q0>zzqrFQFh|T)?gtIcUsdG*g{ol_^8ntQ{^HoSEh`y|j!bCV{d_%K!1HyG zEWd?HRM>m1l2(qx6QN3~*D`$MQeFq!A6*^cJ(CP!IF5Me`jls4hQf?zmFHrqcx{q) zI*w4X6t8c|r-QO)qd(~LkJ+u5d?upLzF zXMb<+Go+mY-Oj(R{poNJ1-t`mA0WxIz8!fF{S)=HQs`fa?}AUO6ef=Otxz}#pDs^? z6koRK5Vju8tfXt@JvlcckUaAxaK$8?t@R~CPvHp0?(0KwqXS{yQJ-=>kWtEr`Q7^C z4EKiM^{!5#`?0s4YJ}z2osdVsvJhMo-4p>vA3{YFwk12WP%eL-)?1=8x+?}o`U#oEE&D6qT-<3o~rpG5xwdD5t4Whhog(O z#IgLQJ6Js5$N6NKd6ap9L$A-q0(D zR8Roc4j8q2o&z2-VPdjUb{EYD{gR+oi$phNiW;3Rx)f{}%-tv>4Y`6-<5)_6N zn@>@;ev4PLp0RFN83dEb6}Mt9$(*3aKlU5%qHK+BqinEj1XwX0YF0aOH3<;3Y71aD_kN1|z&}rPp$(3d z&8TeeR+*}W`aM@u-m(O17LrV6>&b5zlWE=QUUKW&62E}v-JJ|CGr8|jF+l=^GRyS& zd)Ss@m|f1lpp~;^rs$^?Xq^T|P1rA#WH0^o9LhapOD5a1er26pISzUCNl0qsvWeI2 zrr#Mp>cWGKlyZ=Nt%0!hi5-P*;5my8iwe!yH>s&rjNN(DemTHATBd|$#rJdf7YdL= zWW}>1j7fj{v5*<%pBMEsSw$IoZbdRi=X_T^W0!SjbSX@_dleb91!!wP$3r>Sg$H4F zL)R8LmrrVT=~5n{JviMAn5TwJ;CDamgJq7gdLCToC;G?VDGlEzq)_L%j=H8XPEX97 zx=MteI*!~Ep0Gh$b{b=`;Tp5^T9jbRhsc~(=wtr9D7W-L*jLjuw*vV&q&lnERt%Ja ztv(_LyiuZ|x@KXQp%-r$RY>G|GnQQ9{PTx{8LkKM)7%@kF&L#ThiSka(CKo=zzBd1 zlhlRWRku$I{T9)nJ^EA)0O@jtqNXo zX;hE1K5(>+tA&rbKAQu@D=Vi2@gZArID(G^-ec@PmaiW{S;H=|RlM;9WsoeA#p>su z0|W|19FbH1vPxl!)}`So51xz_D|g2~4l`B6AuD4~?YvPPAnNib4BLozFk=U68?z|x zcwqcrtkw`9>aROUs)H-ipvfe$0lCB1m;~dcQq46RfDC|@4(B{vxBZEO;m_cmA9TWr zb}z2@-NTf1$5!3HL`%s_BV$=ce0%nc9)hxcpTKlFPW(qgK}bFl?ylMQ;`y(U@%ker zR_qa1`-SV+@0;k9cwt9W!A%4be&StWHp zluEys3;&~+JN+IqDEhP5#kiy52&S|R)2r#$$DdP5mw((KqPlA(@N6=L9gWUI_mJqG zQhXjm*y!%jaB0V}@8!NTP|#zi7397r{6k!?Di!#Fm+!;B(rm>aIC?FlRCp^NKEG7P za52Q(ZJjxcg(jAyAbZcUm-zbTFB=)vIAuOc@NjmF@&jDYGFTi>RJWBB#?u@j&Pb^F z`*<}7+Ap+N1QPh(wsaB`gtg1m&$~`4R3VLy?;zIW6?6{ey1$K`Z`Gpc93Y+~G&j-C zT2Y^hOyBgdm@ox(n15;K|Fw@=?J2umkoKGqP5gG~N8b(&ak3I+-~T(#JyQQUw%{HD zDF(3onl(EpcgoH(kN*+5xp}LQD5uw<6EK6BbUCAEPhZNC?b-EU@n*d~8w!ATQ2FQ1 z&A!cWTL}J59zLc19rhV==M9vbXTF990!OMfIg@`l4|EJ!kg!k=;jP^Dd^tA|1o-Uh zR+^JwkvKhb&SQqVMfl7N|B>PL5fOH{wb`X@E-Pip_55UYiN?)$IE4*YTXXDBf;7u< z^k@SEX$i+yl%sT|*Q0>T^iJ?I9Mnz4IrdB#3%j`65(gciRa7v*^rY_bb6k7^Jcc$8#48iT(KJ_o9H3yxPoC zmIMB^Da2`8{ddCq;9cvVpzF-!aZ)yrC7R`YjNFn7l>QXg3|#PAxHl2^TP31f#Hm92 z0f9gJ(}icB&rA_J#Kq%09gJ z$8-Ji@-tH~mv(%ULt8eg!TCLK^?JmakhX4vY&%2xCvbK0|4j{jzjyK_|r}c>H*JTY5z0 z4rHn!Rp;+Lvs*x%@T{yX&tzFWG=@p@5Erf-E6EF-mXgF+l!QB$ufW3R_;2vy&ygwL zkjb7^Rc_E2P*+{;mzOjAK$nB3V#2que1{9RWdi{HecH1viM9lYdw*QzckV3iC%`(mbMDl4LZx|?TYixw=hksps zlJ;L*r>55KK-w}LsL6=4u3n5YTQZgay6+K$HMZ-E3fAxU2N-^gcqB91>i05k&mU*e z%Aep@->6T~Fs8k|CYCBJ1;l7|tBOGg#pNKx3I4(JW9d+OuVT%euGhZ z5p(>G?P4tN5bwT#B+@dI=%^Wk=ge!dAxWWh5svC#7U) z!q?R>{{dXC`}qj{>u@|C;1OpevY&5MDEP6zx5FtaZ=bz0K>fw!40e!?$4MZ@R6c`S zpDq&9!mP+@+<0^MD}=f_qUFMB#_qkgWET}f_{i)j`(yS85kvowSxyrB=5}phxWPp0 zrFK1Rz7PNP1GU3%vM!uR;>WcMFZ`BWfwyNP4E0wN80QznihAv3yv=#X|G^YDMaC5o zCOvBacPT&hHD&c0&LUw36Jx5Rc0BRw*|TT{k-{wp-}GV(#LonW;e0S*ap<9b@OE9n zgZ(KYYfTP##}mDL*~ts*ptcRi!}qcJwzu3_2guhR5(X*s0z>92{F#Ld*)`S}J7tlG zyuRJMAiXRibW2@}$$9gj;o3-SvOm%!B#0tJSOkg=IfF*9K7(I%_5Q=_(n5X)It;q_ zCm1v=liB$hixw$V=Iys;z$4sa#pzK?NuQpSDQwI`^bK*Exr`|?DYA=Frs>v^>YWwO zj?>CCnd$Y4fKVKt0S(JrY(;bs!^dPEwNWn76xOq9X(JT-Iv?WY z`CAE$>1|OjhH}0AF0f#NH<_}91<5Oi+YWPJcvV&3Q-I3o2xp8{2dh!F3Rv;gh0BB( zCeziG_t0(!&C_3za~7%Q>RMn%$H?=V$WPJJ2Ye$lx+nim8$P@wv%Rm!Sa?llEK11o zP=GP=txS1`xPSj*5~I`+*2X6sXa<9tQZbZzXU%y`TkgtKD=SKsaxNP5s;Pf4#R49D z?({uRkTH^5qhP}6w-jwRo1MZqErgfpDNrjnag}Y_iR#McSOP@r{No2&n-=x;i2wZH z#XR9jo2wqW(PucrAF%G&PIK|>zb_m>Tny*{0$r_j(6A6gf6QtUD(RjE9td&VhIRYE z?UMn=7&&D+5TirHEk~<^iBXR7ygY~D_gkuKGN=1jLEYp6Gw#DSNv(_cV0k?ladxUH2K-fDHnO;U7-ju)63bp)wiNqR z41k)fM#n8sw{Xq;p6kZYGexp0H-UCS;*l~@vt(t-XgTK~)%Al+XcO&Xjk@z|<^d+i z6`{*0>#D6X)4Y0j8D*3l&h#p-w1&dOVrlQ19?9p`>O~2g))_)KdPZKlyfP_KmxdYJq=Sk8$C==};fTcdS6K6@m>q2)s^(M&uGteIMx%DJU>p2L z!jYNh)pG7Inb3K+2nzz(hbP=0+P{H`m6o1I2lJk;j#Q6m*|$g7$yuFmaD0QNC(fmu zK(XIWZUUs2=3h$^J6u`sGnT=`#p>P!V~`8))*Yv0Y8sJY6jb+Z*F>!KeP%PrR=b9Rsi1 zeWg=3;fL=ZI!|$|q_#hq@R~Qm2yOJmrvM&qC$vpOg&DI|*Gg1If%9mJbT)7bdreK% zUCR9$;p%qn2CQit9#_~Yr83Zbj%dB`x`eTK5})z@5vbDI@o)4pygc!Z)v*|A*>)WzdO4Pji#1$QO;E!lQTA{Z`;8aZ)Kwl6ItYt zn^uDO@i~UrmNw;M#^gM{_KMv3CC+$hchNn@mh0X|Th4}H#ty&yBis^u49O|RH!C^* z6RGxom)JY#X&`pxe0R-sv&TeF#m zzi&s8l~PUw#rhA8Ut`-&Mm4FjzKBx(&+E$ODH-k7m@vQEp|*TOn{I=MaO?_DiO>q8 zA%6Y4NQ7}-81Mda2Fa|OzBaPU8+^(BEZe(zfy`k3e2DS?G54kcQPu4m@cGTcJ`8Av zwg`jEIdg_ZEcbyy%%`N>&=F&RA*Wmz1ru@O%p62ZMFs28EK@{zOdK||P=i^>p2td4 z`&Wo*g4rU1fT;+=%$)Z+zTe-^Z(kt5nKQrTUa$MQvQE6`BU}9-(Lc1QTz=r{xUH#~ z)(zssTaL-ux*?2OE1BZVHAzqkG?I;%b9Z5M^8@*$^R;>U)JzmKp2=+GXh+`V%=}ao z1fPwx9!NzGWPYUGKxVCP2I*4P+}=BMe8T)l_YJkyVZ4$2PaE@$EYj589IB& z49e@RXWbmRdd-eWsPJYzT1Yn~$+6wb0UJcyI%U`yw7 znMIrU+uY_Bjo>m?EMu)C0Ma|ZMgliJ?e5M}lrPDgx9;6ywMAt8wRhm{wvwbX1M5ZS z)KmIXJtC2sVjJoSva}URUjIV$bIon-+bUf&mMk@w&#K( zH>tK^hZ@nWx8^*;NNJinDL}@AZT>z=#nEK{<3|>Fvki@ifn}iBOcJ7;Vq0)lQuWC+ zFiYsBx}{oY(OHSwFO@m1g(3)*LF3oHCl9%QIaVTxZGjbgGyVd$-|qn$eY z<g^gBI<97dd%*Ae z7=_!92d3Fre!*t|t=d0_8;PoDiWCVT6Ba%AL(Bv8`bE=O-MD7Y{{Tx1ZCa%A9!yPF zbB&T@x3@Q6L;=~=eK%NsNrlD8aKEVR3&`Da%|n*^l;q?C76c-Yhf`x7vGHdM)$V?C|rf(i5_IBevS*vk9{?p{7?K-*Huq);Eps^SG zf1(lakZ)Fjv$VlD_#SJ2lMFogA4~r9Pu?(92N&3WW$oJlFZJrzvN~(@x$U&$fI_89Uo!|X-@CvJ z`;tAOJxesg$b~C5vhFO>P?3$bc%BS;H!fkh<>YKLha^-*ZoGDA4$D)`(T6qK(WJhw z1#Dw4R!2TB%I{(3zv1W4zhhm@VB=#TUeli^mr^(Ovf6lZvbYDfCw%9{wlJ_xeEEiC z>W&kUK>DaW>pN(!76hAvG^VtRjWe1vc@PBv4Jk=#JiZs1`&dK)r)=BTfIbbzf5T5M z0K_Hu&YSYY%kX})rcU&aC;_p7WM{I=+s}ZY-?U=t(FZ*U1POjt=Qu(0?8Ch|evST) z=-3q(1i^Rz>>JlJ_jj=V+ndHXbra8P?K)W8yNGxx%4hf^caM8r&ZyzWW#yX*4HWCc zgDXv#Hv$D-%GMxLyxM&T$}IO%0$dE&D9=B3GOy4kG&AsjkaZ!+SwQ7Tu%s+liC();^cx59|4Cv?lg1-xFZ z-4HtCk=_OP&U0rb^}#qI67ESiG_&q6$+?TmgCJvnt2%+@HcFEJK7DFBEBsa`GE7^I zKfio-2c59*gS|t}jpztu`LvkeuV}0O;XzKyXwlL+NK$J0&|*uA4yDGDzP8p$tZvHZ zabM8!OI8`r#0vgu`|;2%+QFk+#6xn$rbCnbYjUZeClwB2_r7Jcc4=r6hs5f)widN} z3uXaYQ`fQy9TQNTAcb{9wrC3mjjRwE(|!(J0AqYB*9XwUunC7*4k(Td&KRDxjC!E> z7^RIDAed1^ZK-B?`cmIA+VQU-iR)#lKim2G%lp>YWUSQW2sn{^W!vLmQi z1hAbxT>!Qt16k5)B@T*NBBY6I7-^vTce5U z6CN6sFWhi~-^0cxr%@4OpW0EJOhSfFToP&dp)A8ZMkPc|PZ1*Be1RaZ;baVE*(5pXa+061z{;X= zo`2(aG%Q~tgPnN->(wQ9v+g#P&bXiz0kILm)tUXeDA$zKYYRoxnSJuZM`CHgz`1X- z+_S{mF!(@BNd5}50M1g7+1iQ-;h^y@zpt0kQpjl5@U3O28LPaD2d-g0>DwPt#zYGq z{lZ0zU4RQq9XTPN6>jMtJpygbNuzw29w3WXRJu1?V-hsFvuDF&AO?sAXt6^tW|Q7^ zoxg}8!WSM~Ph;(GrH87uOH~PPmcB{gLr=Myr>`#xQR^g0_t8Sz zoNiJ%GT)^W0z%dfN%}3r7$T)0#&q9%5uLh6nfZ*p3HZ-XZ-`!LMN<3i&xS)hha|K4 zGcbkn!wBj0&jO0+_@pl2zk3pHLTtM;SvgdqISqR#OP-Z9HP?+Eeb%<)jhM7UU1(PF z?r4~#I+gtgsXl*#S^x$#A}B{T+oW&qjeb$~hGLoSjT?i=pV)w;S4i0ARouTVWL`u7 zCmKyEz#Sf|jTqx8{A7%~(C39_q13%D_tV9Z*2Hoda_X;*`Nj=U5cHA-i-cU-GHqVy zjOP4HJf=B@NW%sOZsKo_ke~(8y=v~7I9+vhy)a2c@Oc**-G~r#a`V-81ArXC%3i>0 zx>dRfeF*H_7&nC`$AkMZh~Uyma`vqo_zVVoREu6TlP^C)`6}__A=GB#x%s~g*8Y%` zSx=Q|T$x=wFjsF%lKWj5`&pggt4@pB4s|+iZp)bvY2r(yR_B7M>$45uIibEue{i7~ET+<{rVTJ6kId3aUQ+IRm)R&~M6<>n}0!8M9S(E6Ja*&mubQ zm)2~I0!8)IRsD?iQ<))q>e+K$J!)=*B#Ct#HZ$C|5i{bO`@RL9ZN!#vXc@4=fpS}M z7N~@mA@;*Nt0%T*xkQuFq+njX# z(W(q-wSV9hz)CYw?@bzWF`1%BRn`5)h(@hO7z3(Ku1;!p#0HH1XXz&o!!kVPpl$N# zz_1Ja8)RYvoZ4)bYB1c zTp@s1`pjFbZgTr~?X32iB-yoS6Jp(=i0m{;1!&p39}8%peV}qLBpoFd#93>|-JKpZ z&c8@_Cmz-*0c+{z9dHa2y6eh7A(37oNnU^EmqTilvXUP1ne;w+O=ewcFZ7PAciWCL zb{%(|L=-lLu)0Oc=kC&uu*;E_X*1RCqeg%FkOc=;f(5<#Q!3KiPt!{voqkRAr3b?) z9d}Q&)^O`-RB0helssbLFVk3e5fP$0d&Csup{o_>sS#xGTNjEo&(8Vex>%P)qBFpH z@37n?(%mSvrIyPZYx>sak` zWYkWbpNJ>B-S7giSMvUs)F6GhkRDFxm*bJmXn!D0wCCF(m2mF(;6F4M5ZeD0NoMLC zfKwP>l!DijJEsC_!E@yuIDOgSODLqYrW=Si53IYwn4?ctp_)`>9Gcv6-TA5ElNkH^BMM!T@wM$6 zoOnmcYg0cK{(;4W@Qn9n4GV7=q;JNj41W}9pC##a1PV9DSakKW;l8~+X~UHFl zo@p8)$u^`cq#_nQJ#f@>-f*8wqwQH1<$EeFQ8Kqf=yA`Ic+!c~`((4;_{-bFd`jJx zo~|WAb1KgAQ8;0)P=hP7ptL*mBe57 zQW}0Z-yvb_;#B4JUmH<}r}%x>SO=995N4r7?vyia@A)C3%u zv^Yun*OIAyrw1_}K3S67o6#Jg=JzJGfw^<~x!J}iEp2>w)6gL^4Ee?k9Bc;;wx<;| z@}TD~`Xm*lLn7UgbU6Pp#n?~7(q-tO=ObV&oJWH38%cHd`LV8o=Jf*YSdTHAuT)=Y zQM!Ge^a-6f2V=?2o2eM99D_8Zr${V5<~QHmj>p&c8sV#VgIt1FTVyMgGlYgh?6>1d zBL+oz-~7KoghDS!Z2?RvLz+q!N3yOr9aU&e%8b)J8+*`>H2Pl6&}a}%r8Zx!WOWix zTaViAD_JqV)??GSh~Ah9Vn?Iz;{iX^L&&V8R%4Wt%2>}h`~vyFt`2Z%pxG*bBRylV zN9~cWP?{}*MB^p-u&|;YMt+MxvD_@uEVv?ZZ}=Ox#5W!GSH^8HPWQT?>a_|fs_G<5 zTgVj^w<5zI8}vrzj9wRQrM}pko-c7o+J$cC;Jb-#-{*8no#l29_i-*$VZdq*{zZN-;X>%70b|D{XoV<&d~z zb4}@lb`O>Qb1>G_XhXqP5_fElX#l(f|E>>`rYq@q>ZK9q9t(B&hriSZYb;cX($^$Z zA$F4tITXC016q+OH8F}&F8slon&6;p5W75IS*L+2o8iBQdIlYerx%u2?sXu~qBJS3+u{gs=hn42#xEVtDEW>NT97$omUOI2BjsCTl++l8DW#+)94hNb05Eqz>J) z(H1gV{>n!lA}Jb=1&j{zY5l(=*76ioCt7&Uc8a=;n*A!*329tzo~e4@GALCw3N@Y>wzUYy?cV!MQkChR`RtQ zrLFe{)QFR)hk{FL6AGoit8OfI6VfUCEm+CFM<0?8lM%@{{@8?U7TX4-w`dk!=6q^ov`|h+mS0%nS}cBs)ZQl=;3e zLjjjZ`Z5&B0pxdYrtkxeupRW$~P>z z^Av5K%nbdo;4@=e6fJR?K5J_-2&I&&KlY(IlPE}5ONpOUA{=OKdVuM%|J%zXRq}fM zpTW{<;9=VJSUkBc#cyi+`r|e)_z;5b5aGrbMPBklN|2H?w>8GP35Zaj@am0;z#oHD z;AZ1F(ECwjYO1FSq8LF2Oy=u_fpRaYN>)A}Uh7ADsVGy>D3ZEf2*3~(M#r7hY*SDm zN$nj3lK>@6X^+znVoHF>JCh;xV(hN;knEr^$@pG<_jW+~e7}ujJ%hypQe7*l$x~=z zGsCm4{(FbeQxF_RdGLPht&<+>2cKLH_FGsLL}ZG;PRD;OJUmz`1!ho)=uD55yx`V- zu#1mNv>iP>p(uVIAFJ0VPvm?fsCKW?+-2SP&Y#@RzL?N#pLg~2s(Vk;uW_$RNu^iQ zxA@?CX>a{B0ixgeI>jy_&w;t{8R+F#^;Ol z0-JeZ z_;({vO`BxhlE?;ObiL~ICGR#W+n+@6Uv2d)I|!l8G?%|)+h`}oJtDO6k;BC6ndnw} z`YgZo`DnjB{Z>!+VZrmNeBZJ50M9LQP%d3?Y(?^hRJG^DWMkWtN(Mtwq>7bfYJ`Bo zOmKMxN|J1;HBfANK^^=@FAGoA3mI!2Rh3fXMm!c47?gPZ0fiS-6O9JWC5e_ zQf$(u!e~z@@+%5@sR1qJ;x|*u1M!W65-1s+5DHM@=NTQ0W!M5`V5$)#05ZSMv~T00 zQ+e-*kCbKaeYiJB7MP@Q2_srhD{g$?xj5mN@zsTCRS_V+d4~*(pk}z0K0!AoF8Q#T+`(|;xXq;DPA96M6uGg}_6N%alR)a|De)bn4Mm!6 zjNDSBq4wYbhNGkkLv8s3AYYZ_ws~i#xc1(gb<0G=-d*S5W%2*}48{(z+#O_Syzyp_ z_^LT)u0?r>0!T8~VY&)DK+(!DXB)h3mvML9jYG8DPvN6W&Qe>3DKe+Ev;*jcD-pPF zla1BAG*C2#=ED4I&Fyii#{MFmm%q<#_6;(83;ym@e)2uz=53y)AgOipyrc-~UAIzJ zLCGQtga3q5>9Aq%y(iqa4}y~UVoLg=RNPO0NUL`iw1&G0z)c_!mogT=663~-UH#&& zn|HN$4q@#|QeIV+Eq;{ly73RxoKj+X&{-USW3=eNMf!h|-A3u-?g7T@Z=S9Exu_>b z#0Er}GCS+evi1oYZ+}1h0e|1Ma5DF5pkmCK ztC?ruiBGoTI1jeH&Nmr88{MZj!?GWN|Z7&oT$$MFFvV!t~ zU7~RhAt|w4;IyRHW5mcaYIe{|5>sPcEy@8D$^EPWIN;DeuM=s~?w~%2DZeGBRZIl` zucxYy!JS%VI8{|gJA$Ipr38Q!2;vTDMYrA=veFb3MpAz^3amYtd>pu!`z@#d>g^rjWZom+W-zjf~(~0cbycy?SkSjARilw>lUc^;zc#2I_JQ4y{C7+?{HNxs|_W&#z!4kw|AcXjP}Hqq!ZGX&0c`D%E_xWH+Xvn#n;(w zvYlW7J%g3*t1HD+OTiP2t%QIS%3E!JYI;^VUb`nQ!ml?oF~=E9ekg3erLjgXAB$qO z#Bj9e6pKAQG!VdO+F+3j`js=Y%^&E%C_c*bl?E2DiGZ{206drxg2B{5~+xxNyN zp+cKZV+TFrWA8_-5K>!L%h)3^sQA!pQ$tlr@%n3wXJn4bts-r0gHXMg(Orp|8f9H& zCA_CX<&Go?jlJt}`817nv|9>h)>l+niHS{W?W>e@>V~wucLV+`^?c)UU#T;LH6=M2 zv&-|5`~035?761&euM#V@`(H`dw5X6r&AQ|9x3lkIUcusd3HZM6;T+-7Nqi*)7O*E z{v`t}rzCYf(KTMuQy{xVGS)i}iA9E+1!^t?*P$q&{2cz@&#zj*B0fciAQVYt=#po(?BL>}0x8pJowU%X!soj`-_s14he@%SIwqRPSk{F>QUrjC~w z0)}26WG#^;m^0;ekegNBPJFVyK3t3mn1N~jqzu^->hEeNoUD)$d0(?}!lm z5B)N0&)Ydc0t)0T`}A;+Xt^BpCF!pd)@Aa9s67+6%G{6vPEUhoh{`q5d*C_Rq3a21 zljIeC+&aK;3OLG+_NFXGtB}k#X#y3r)mU5LE30b*iAmy>V8NVC{&P~aoh5md_XcOd z)Jm_Iw-=r*g{hcZ2Zdae=OuZU?$kXHKWan!bC?{Y$kl0s4PvJ-ukIl>GK8ExkOR9E zk~@GBQQ#`&BvT`bLNCB!mzavFzyqvHxdcQ-j*+|5w~$9(v~FEg)#U^X4#~{BO-C0P z1To0`Hh|d<6kR|-kp^ye6x*}}FR7{hMD2-Lr8Mjvj*>2JjPbxH;x7NasBFK6*Y9un zUgJ_8t}IJ!w5AAR5a2nc?(kp?lA5kOw8YEN>sa*=++1N z`{RQ@aaGWEja2g7xd0?QS7JKmO23sT!vyw2MX(o#cUViKT zQ!jiWXM7RJIy&-TP$Hze&9&Q4Vw5FZu%>G4N#yejrF!wNPo3B~Q}n-I>Yt#Ip(KH} z7_k8PNBJ(beL9%5gpN}Z))nNf0Q- z-;o1P3)kk+Q4pmMCZGP%W5NHNtCvgu7LJQheHvH64K3sm7K( zq#eO?;K0s*R(BhBWzzsgOI0~a+R)j-a9JQcFD+|92Vud@j!fFK;EFNy%&>aesX~k{ zC7ECwXT8deKrAvaKBHB`L-wehk`+m+$@6>`K4%5_A^5R4$yDvU2x_=n>ASo6^jn70 zrosFgJN?+_Y`y%u)z|^6PjT{_8v*hSmvDYl<%%e+lFZ|luMtg8v|-+cYi{IzbCd${ zmoix3D|v#A*(;G#2dgw%LNt8i64AEkItB;CPj}BLb&yoNxnbTdTC0ST<9~}FWD9C8q{Qgao0LGgD&wNoha_IVwLrohp78nRMH-Z|6EQ+;E%y~F5_s;%Ija<&y zjq+>tyUiOmfWF@C2arWSw_y|HP})^aBat#(AQtLAbE{koYv!2J7d~3Y*w;%+%qLFN z(biz)R+*i&@%7Wh!}-g(!tLURTlLk6pKx2UD_PpRQHgMz^k!zJihJ>VZaA8mN#uU# zU?YOKrMG@%xL8?1t*IlR!-ioKuL}UU5QHx4p6opXT>aw?}*F%oENII|9~=3iAm$HYiDpCR+$cD-PVY{!rd^)Yn*ExH5weFKWpzIol7Lv zm>estu&!?c?HqTy-dC1qGO4+JDn9Qv6Ulg$V^pg6d4;fElDd+6XRZiO7S7%ii0>(LM>ddQerlD6y0XEam3Sk^DoipcUUK5?uQ~j zdq2WnrN9`zq!WLC`$@^6&npD%VWrkf?@1f?1H4Q=?zia(sX9W4Y+S5d1<7r5V3&Dv$lgx zP`VHR7&$rlbHtA8I3a^44H{QceM>#<4QZ*DWs&LAzy6x#mVo@X6@V}?m(I?vK!WG5 z7^6C}dGltrop-kh{}}7?wA!ry*8q(zKHuZ{yT^T|KGJT)3X_G$b|VtZ6`7FZHuU$y zi>Rd`oblSig=(uZuU+jho;2$2uJ|2CZ(Mo-@hHB3pMj7^2)D6K*)3*W_X~Qg7jEG@ z26;))uJv2(Pz~;Yo?Pg}k5;ByBg{))Xp3}C_XLXj+PmNLo9G1^PJ6#( zo%5?EGnO@TRKiHoov?Q8F_dI&lmiIAwjkhtc`0GA~qXPp1z`%$hedE{d0`r|$7N=iH$1xZbE>S^tYSCanaz}ELchd>7$>)7#;vi(g z&}WWi$`=7;h1yEb&3)hkij~S#TepsmV)${{NfUym`J73hW<3}^yJ+-i?~jWR5=G#; zNzDCMB60WyusJLQ%^yhOp#>$X2Vq-2+%+pHENs#woKF(6H63!I&xfe^Wr@q-Rl@HZ z`A`3SfaY8Xkh%Jj6P;orRC|s>2%+pO#}kI+U2I_D?ce=)zAvUr_bYR*s4XdG$*bEXOai4avD)7)BoSLH&8rx0^n$E7 zK{8VnUloAJi(E{p1pY*aLb{E|^^;x68>31SP~QDqvQ*tX#-+9+cr^V|RfSIDbO7lf zt2HYr8s*G9-&?l+0meNWQ4e2mWSxdjJiGlYip|m*)9tE`?QB9w)lr7aPcM*|wy!J% zxP>CYalc;@Yl5oyV>XR;KI!=9`yTj@6B|-#=iJHXRqq{9!0z`sf_)(Y$4!Y85^14} z){d3snBM^>>u}mTwks`22n=)S_GMi-8Gqx;7jNX6qO_}@nkB_P7sR^;4hz@nPwj1L zLYv0oPgGN(xR`@=0nqFl=ekfyTcSdY()B&v3>Se^w#Vx#!$(}!hg%kzFg-t>vG+u} z$C1p2?ncoDcQgewvG#E!cF*nCSPV^lSY9Sp^GIxVEmBsB(AU~H@fx)+-;~3;=aFUW zR?TLtv9;#K8#TI=WA%D4B41Y7V@cIl7}>-N)xK6<0lVe=;xXcqRVv-y#)e|X{f$uy zLMul5B_7GYq3k7An?fuT@(<&fKqr90d*Kz$s9r*5#=9 z*ogt-f!C9mx|93wvqJ0&jLvI6AYsmE6Fx__n zpk%+5g-K&2vIJjWr4kq)5O^COr>lk79P>2)q!lvkNb~TD0V!mEj z3gsPD!t`$k8OM$JNCi?KzpZve+*fphnwlc=D_h2K5N@>~m_A;|I932V9&x*4iCEPR z+1j0F^PUALm68Ph&}W*GC%eEg}>&q-k7R28*9&ShpXR0i9LE+niz? z=1p1j7)IG?6JKFP1j*-|p4{BV-$+u5IAVOMVTD7H62|HXA$ha#a#qssd5h`So zYdVh7&gF~G%byvONZ~93Y|QghmBlnysnWf#zJH5N2*^%Ow*;qWe!9(ay$%$*q98z8 zS{k;%tJLL2V&20%ZR6!AC*SXoRmZrMAX2~pK2%E7o{|rZ>u*>$(Y)_CE>|gh48>jN z{v1<)kbq)9SDz^Q+pWNPVv-Lf92C0sYSm&8>?~Q!euqL8SXXmD7+6v?%u9U62HFRpZ_lF zcz3{mF^Xg#z`?ZiJ;78G)y%JC>|dztM~JO>+IR-~871aFPPG9=ri_URR%_o=Ig3s$ z)^HS=P&3tvZ9JYcpvI_)Yx?0u06RyJmXC~Sfc2HXw;eexDl%oPm$Cn1lung?rsnoa z=9tD8on$yv;r=4GSO5g^zzO+rQWt66 zeA~=uLyi1b{D9i=aFufKCBGx$GDjSZjKBwqxOWnPo=P{avLhJlIssST8-67ZAurEI zHYCt!K;@Y3VkD}N@`*CMA9wVNiX&96aDOQOkMDSnqLP!dkphIebv|)aaC@Ti&jVM} z$Ecm9EspfhAuNQ{a#qsn4V!4~O6bm;lTI8tQUQKZ7@Nfd<+S(Ne+pFck7cNidV+Ta z@1Hn{5tJY9o#%V)toI%=Ch5FgOLKY zr(MeVyPz-H2|iqF$Q2x@4&HJqvRJL1j+^n)VDb}&qg1+|Y#qp;$B~UKDx2_Q%32&j}Z^a-_FWzxZa%~dBg+oX|ymDSK*#*70BCB>Oa%k@q@VQN$nkYaEg4Ayq0q|pr(D1=_@5U=1G%i+S_t!m#^$-n zGNc5RKcGCoRlyT{^RRyh>)hPlz-YsfeOX#ObHxv}Dqp`3d1OxunA1ZL@m54k7E4QC zT~ulKhzkL$Y44owEkVlpyOAi*CvB~ZLDTYwm~6G>NUhSy7AI?5fBgOBXL!fD zC4V#A0~q{Gr>^~?NkCazWA7!+neHd7JtFk0VbP+~sVl3j5}&%`>Z$_Py_%fqX{^G$ zL6lc{x&|9MN>{jO(J$bekX|u$bhO`QwR`+GZ`oNK8YOtbkpO^3Mm1%R?Wu{cybVR( zo^?5Qo*J7-Pb~OK7pW!~;uiC?H~i&ezW3fVSkaA@pV~WrYjXA`D~@=MS*f-p&JPkK zrmdD0nw(2sm|+FYs=whgT_&S zd4^;!S*~`kmX;W5nUfU5{TF%munExnl`lR&`F!7rpbjR%FUJh46A5ppVPnhLgp*g! zQ6&C+k42=^btr2#|ibbEy4bvM5}|HAto|?!Wdi z!|lY1x;eL-ar%UC0YcVtwV*VqQ9Vz@o6|HZwLfPToWRHHl0O8EdFvVh`yN8BZx4K0 z{n0b+5&o6kMe^5mB*|zuIE0Z{hXJU?O@gR|4M4}Zgxh9ZKBKOGA~=sa4Jb%-m+hp z)9yIAa&2iIKhV()ySQo-qb*cT_}d(62`^Hk)?hYn7|^)Fvu)K3w*_0;c(Ngg)y)eq z71Iex`)Y#1SoFdk|Fl-4w?`8eD6Cd>p@=6ID+2~ zmR9Pc;wdkqqvme?OsUk1(z{)mzIqQGCJQhu%^*PFJbxl3SUJ$lIO95iZDJF8I#PlI z^#Tx_X;E5=^T(#jSi?Iiy-+oYrveN!HQ43Ow3#aG;)Rq9UoR6+oybr&1J}7DIrvp@ zY3Zn?Y6)OEfhNm~D1(noAGKi=O0StxmmXyPIQ2G20lSr%a;jNvSu!(|Q~_^A(lu(` z&?|YbMRvv4u&6=s9h;7^eBu)uU>lNrR1bLJ(P+rBpMwbBDpVw)+l7@b364o+_%Gg9 z{|8ReyDZlnB>2`(m@r0Bh#q_CXzo6FCM-NWLU1b;{}KMRWbD%0WBVOQrBrHY%=)Cq zqSX@VqSau>=?_!+Y z_sp{2(pS*dpStp7?V;2z+8h0YSt0ePf!Mv5XEycrz#!?URE$u#D8<^>;ka$6FcV@n zHM@{_kgmL4rZ;oTSu4f&h}Yr=v&PU0CI$Hq=41m8g)*E5^13Mlt^G^Y#-Y4T0`j=7 zJWPG+`)UK=81ij};7iSXv8o8!wWK2@6;V7guU)3)$wnLK_hc(g%+yqfu!yf?V3J@d zJ_Hix&Xm*v#!Brn$W{W6uUYV~C=|j!s88((k(^7Et0c20wW5|BHGiqcuwg|Ju%Asm+Xi@B8Arjhg zYKHdszdYK01@v3c)!wF#5tQ!!0opU?r}P3CaM{*>@}Ar+-OM<`OEq5Qo?Xgq3l}ZI zc&XfX>P(fRuSyEdsLz7?dVxK-q)}E(b!Zs7QohU7nWBc|jv8PzLvL4wOUyZI42`S= zpF9|AX>2%3TS*M(`>18kc2pLmUFMzUKie7Zyu8}{gQqZ?feRqyAD!>`kvBC4X^BJ&!*!WViEkL>c9UL;aHIuywpiu1-Ke@`FEgFOiZ64 zK?}h?&sdhRht-8aTZqOcPz9 z@W<_gh)Qq4N1o#4`HulIBeH6<;_bzXGh+&_mq1%mTF~)`YxJ63W$__=@JX%N`uOpC^~gX-ucQ zmh><6mrjU_1-+KR7x}MzjnPf}c8Uh_UQH`Qza|p3{R4ikrZJ4xz9v_!ykvI7>rfa{ zkltxkVnKUq)t9s#TG3qe+WF_)55*g$SnK*TrlU1abnxNkJr&|7P+OVp{Q8Hhu-Li7`sNUSbHh2^0}js-wp|t=xvDF zh61WvYC*u2zvCDkKkS~7EcoLZXk@yA?numaXA*2MpC|dWcqdIAJ}+h)osQ*x5lJcMyccJYL18ul)FsZlM*3XJM<9Nix-^zIka|4 zx}edHh!p1CK6fAFomXTgiF!}So;^&$t>R?aai4^Q74N&;-|(JHo=s9nCq!Nyp>POqfvbAuEiQ8Cl6;MX}#b$#|7gV=!+P>p0S#aj~9I7#C7XFPVFr z_cgM(tDUykXT@4p@Y=qmUcAnkNiW#10kF-qKnHJNMA z!Zg*@uEg*L85&S=P&9q{T45Rf%+hn5ws?cl`&&8aJO#KwH0VX^N;(#^!nn$N1GMY) zuDpApNr)QN&T*z5xe3FTGvFEripoDkIxI11N~%P-hu}b)vFVbC*7UYH`owow_j9*h zyk$RKSqECsaAW5UhF|#Yl!a=0riC9PM)Vyi%M)SvV#!N~;Ge(vf{^|ex$ko^NTiBB~N_$W$mFa1x(+lM&8+(EEC{~yvn9K>AY&; zHu*>O3WH20^HJ;OnisAGd;{eY5r&G>(y$&#a(&WGNiUN5P`QDH1|x>Q1JRb3tJ`99bvRQZ1|3Z>2Ay3MY- z(y=0VFJ|q_zZpIhljeKTG*Y$o8pyat*(WdCj{T5@S!9A@QMc*Y4 z=H{$Db)vRF+_pnMFGywWK=YSwT8VvWc=8u*|5=4OAag_Y?P|Q-~5;@E^zN#&)blHAA}f+J24$OSj-f^a#XaAerQ7!C$BNzGu2h>Kz2i&_$Loo zupd;eF{3u!qU}U}$!s=UA9yez9<4=-Y!qSvR)kIj8nTvWXER>EKZnN%vCbPCXl@v0 zG2*sjUl7{X>n74xhynZTS+fR{8`E>rd7m#&+h4X_*SUWl<&BLtL_Boo28Iqfz3TbX zZ%q?~tB%A%NFPd0*GHRtP?FKE0I-5ki%j(rx;`umH zG_@q!qr?QRQu>ZssZd0-s9k3#FG-&04p*Iyg|zX`Kv531Zh}ipb4h)8>`1ZXFE`j{Nl@;z&J_)(eU;0Wn4Q;%xf{7;!(bj z1x5vH;jvWx^81V~vD6G8AmMmYdTQrRR*2oU?R_vLNSCS=feHodotwCXvA(tfa*=x4 zqu33hA6U&8@i0W#!`15TM!K~<4rXD(tNEDFdlDGGZUoVaSODu%E zdGQIHvI4RSx3~X*HWszORmNE6iza76%IlAigtzr9pdF_!K~cJ`t%J6l>cV10(Ho)!c?i!5FOx zL@!pc*7u;p1Hz@};WTu2YtcK7C3UWzMtB^;ow$L{SV%<-SohL$ai%S4%_y6PkkJ#5 z72?{qvO}c7zy77$ke8rR(NtSr_W4yr(}E^vX$qibTgQb05o zFYHl!=iV=f5#}y;BFoVK7}_)%YB!+`&myM_%PCg^>SHTcJ<} z!U!iXNuuLDnhbszu1{#ufCh*E#cq{lw+mhym#1c%3kB66;vYDW%{pUUC@OB|3dp+m z*&Nmt%&`7p(--6bR$Z`aqv$nj-io6w|A|3hRL}*2N|d~kemQrNp=Bo(WY(sxOf0hw*LySpYt!}83V5!ZWDk0ZpX=A zSuU0oUS}nEr6&h^Y5NeBd#%K@Wcj)G#r0lV^@&Skjo5lbZOPiDGUWnZV8N}d*Af{{NoK0XjENHF{&~HXw!f|N#B%Tn0aIc@lMld`d<5$b@VyK%YSQ7Vw^ ztI3>mmgW>7?73f%*pzh(hIR9(8rs?V(_V$|8MP;Cmday`R>zYQnS6Et!@Xt!&7XU? zRAY!$$g3E;5<$4bi zf1!gMLOTDNw@LiH_paHfbLdwGJt*_kHh?H}<_}_{qtCjgj)g?JsD=*fop|eL6{9Ue zZld>og3{4w+YFL_kpRCy`Q{kWb)|&67?7jNSM?<-C4HmRrE!cJ~cZZ)o|DBSxo$^<1~(crG##Y(MSVn`^XF) zj|2?CC`7Sc&f*w|tr^p4LV_w}#cuBX(^U zs*Z$Ye^qsw6|#(dix_Q|v7r3isIaE^^vx3U;9vowm2gsiyzndwmie}3<6)eY@BcNA z)>N_k~1CXzpDwCz=}WJ2kq9 z$Ja6$?o>KX%gAw_@DsLodyGs#~S`QD_qO|#A9_udU`4ea-KrC zn!)?XpLs|=@r-(5G!b+>AJOMkhMk8wC;Mv@kS#PmJg5}TpMM`>n`GayZE@Iwtilj7 zBXD2M{9xf$ISN{^GHSJd0OJyV%zF;0*}SOG>60EMQb3zrD2@`8v1~NMW#g!K)zlmp zIYc(A!OjK4u5R3kgRLXGA5_9~h7kGP+sKlG1B*_Ba-!7OEA%{IxNsPH^^$B9I_5z) z4b;I}LV9d~<7>mosfJAOw8wT0{>}g;m4B`RDzqwij*|l&NbLXw?Cd%YC;v;InYEWo z%#7-rE#k!)H7ydc5tZ-Cp*bJ<4|%~W2M28pFcs1t%wIj*eL}QgLjN)_?1q!uRcU2# z*15?i==lGKq;C&ss_y?k=ZwjnG1L&U;GlHQ4j@vZLSsXG>Phm7PLSJ3$`rhyh$3t| z11%F#%+RbvNkefoFbg%@1+~X~w2-d`_^1hKC4mBJ2*S4Wd#zvpKm*y?=kmV3-mjOB z4{d#8-9l+x6&Ygnw zG=!FM(;brjVlRQ9erfM$cX=i}?iB1l{tEWnSe;H6+z;3!v67&w36JWONV~)fyEL{+ z>fZDr5Fo0maH!c2HJ)x9$!e}<6}}%=x*!pYq$+Yl+}&l4&Vgbn2A~xleOrBmU(hZ2 zQpYDIhT9|EQT0ec811>Z!B`*0+1DvBv!Hp8JY#*NFNawZ)^v^m}cAvn{6(p0jdawf9mL zpv}(wx6Tm4qMf?z3(P$9gWo^fa_|+4Q>3E%+@F>In7fDOJMah>B?n~kJ;hG)AB95XjVgmuHUO^oA>EiEB72-%;%*?@!ez3Ze{R^k3(6lde5Gbgzu z9g|P5>>mvgBJCH~(bEP){9%ecXg|z5ethiM7{)Gn8ZcWsW5#sM zpU$+n+SHB_#+sNQ7LJDD^Yk3x{TZH7zbRY!F{1)}~C8r6B z@UWUWLG6utq)zfES9)=7+?htsQ#MLmXI|+8{F_!zQGDIw9PDY^cfAz{{MVg3S&g5| z#)tWa&azTx=HNI{chmXRs_cB={KZG7?w{b4_#g(r7U0-lw`PJ7SW1=~Y!0lkaHffo zD`|N=@Ox#4`<$!qcyJI+FiF1vbm4MZXfRB=%-a4>t<5@>$=Eg{BkM^e^l$)zgd<2+ z7_&ka51J6NseM%fj0y}=opMSDD-Vzou`>Dk5XED&6|@FZrJ~O_ENo@$q6*r!&PA@6 zKIK8bQq9}0J(k8V1l4SCze6G&OAk~?e_r74JEnO7%1A(Q*{uaWLh&o!m_W0RXJcPL zZiYAMXdGy|TgTdoCEfzIB?t|q*8HJof7|c@XwxP}Lx}fQeki+hCq0FQk$f;~Q_+Q7 z++1^nEX;O|jBAK9J8g5EvBu1qJW02m?pEiS-uK3@-(y3*9eo~Vt0%XPcAA|hezkVa zZeSO$7}p}RK=qYedbhKev)12#4!q-ej1!ful~}PEg@!X&W3|X<``2M`;%r0RJ-m7V zs7TWkth^iRc$-6ctuE0Ozy_lB?*kB$h)5426Pv6KPNO7OJ?=XITUK0;8x;a4{BBY2 zRan?s@T+FGuz!~?9Wdjq3PqYaNBm-#EBE&F+>wA`)iJhSh+>yZz(YH zIjrq-)cvHIJL%~u=xxPc&@-CbE>YW#N2R1J^e2YJS5nyoyU-EM%D)%6CAfQX9B1i| zXkbnH5Z)ebJQ3ztH|<+Cu3`ZcDkaOu&Gp68r>ew+6> z{O`-;k*3pvv!0W@v=59{K9X;yLe5id&)&Hcd^H-#{7mILQ5Aa0MdR~sUF}*pUtjY6 ziE;&}Bu{>Qn9)d;MF#w&0FLiYAAKdVgw85(HcD zuuU>WL0J2fi02j33x`+d()J&wvx<`g#b|oN7+pW;7JKIo8}~|z*Cg?6*co|-_)5~M#OdCV zj1$1`xj4cTy3RP5f)hSpL6BI@AR_J68;xg^HyLnp?7B6aCv9uS#$ z@viI@^vwekCc^!;H+l$EFsmfim+L`%cp}6a+5VuDkxz12zpWv^ZC@J`C-qeeCiz#4 z{hO26Ao}%pymkB2QRv%^tnaOO;-98qRrB*}!mw57Xk42+ZQ8hTtSuTyg6S{3Fdd@6 zi(MI!JkDC37mHb7m7YHu9KzbUg#2dGse%6d#e3yVA+1^A%JRXiv0 zQj{zr;(Pc}6wJMuDK*Z|ay7{l?H1O?Vc;`lS40hVsIKM|6PLRHB3kE0lwnE>_ez~i zJ|6|9@9f8BBG2tH|K?99P@`LY(b0X~*|Exx*H>?40T}k#_^ImG@wgL9mlddlR`z+G(FR+RrHWt^EnrZp3OeB-{iDz1d%)^D6q^tc6C<;&Lya=}kD4}Ttgt%UZH${trtu(ij~cKe&UVoK z?Gb?5cv;ox3V2RZMB3|E=-c+?j`okrOuius?U51qx0W%%9zCorUhVBsizMGz?jtgUgR{&piT{uQGCK_H+N{Z|IHj)at8$Z5VK(rh0mVI8LXiu(Fz#5MjQd z=~kGq+c3HUtOb40LB4miM`mlrm8d;ut>tQWYV;Wts2z{56SJUpI7x8t##jn_VHkqRH4Vr%bDdYUz!WLh*DPOa3L_=VS zY$2>dn-zTE>|VH{{PEF^jQzDW0b6}5c9i(*Wj+JN-f5xHanVFNKQLApkgN+PTpdAa zd0L?&Q;0|#BTNK9^YB!Vy~`B7R}!7(^YfO=QNXQ>p^6CSlb(8~o|P~3qrT~CX3hK8 z`dkgGW8%0Q(yip$wFsutuLOwJi#*Xb4RZ-ko0G`Zong$9xd9hv5tJts$&FIcs5>Qd ziZ&=>IkU{=u%=C-nU>Akks?+R zKeozEV6~5zNY5w#3ZcAY(cbd;*$M$;AL8}fx?`56Z`jEyvo1$@xQ})KG9zLWJlwbp z=pErZg7N_JWX>EZ`A!HcxaXFk-azciUX>}*7vLiYTyPL&GBaVwAU~3UJt2vJ=(vLZ zPC=$ph8~&DvnMIcPGlbxvvRX2-*d5tp;xB$3iIhO^g&uc>&iJHpZwM%U?8!V7-{S5 z;3GZZXyY0>IQh>cQF>49RA(YQ>N3LcCM@{p)FS;6i}U97CUt#e5S%x$%;8I&5AD?k zI4}Fb7oD^PKB7cS6Hw$_z%`&6>e7;XT-H;R31{B`@*i+6*rHvww7gcsaiDD+BRwz4 zhoB;*<4JA;S#ta-ZG9_oIfn9X?4qseTX!IMvW1jtBGN(>=k-5G|5lURwKsPziNVxJ zQm|l`w9yM^kTytb22x_0oEH~@Hfr{9HVPNCQpF1OnM8|Cl+DTZCi7dulf zO%M_OA&RNG9-yX(_CP8s55tVUE~gGYOiETIGjYCaG7FS#tSJygG2OB(4?Ny2vO7lY zgacfTDF9?Apt(mDNAw1ezp1<)Fcz*iNh=}{c}rs*G0E|TFpkHgGDKKl0;1DDwnu3}#KvifhuWZqFtaEoLsTo{37M*i<%!Rb99?O5y5iZ8$99Fj%b#t12etmBpbVqdZTPjn`I%ri@ZS4^Z=MmJ9xo6}VBhM2pyVTy8iH6NuKk7hXHEXIB?>E*Zs&smSHO->x zAjWL~N0|edV7IcQ3E~TDaNd=~{+gUH1<_#ydzliuQy@zG$K14+%~0_ktj#lA0Suf* zj0J1W*OHsz8BXfRHiSCFfR0R7&#)6x>{!%6#HPfCZ9Bv4;(e^R+}g=Bq{fjm;kw_2IUP3Tk@#d-_>ZsYq3G!6W{P^R;PJWh3=hSU9t>Rn;Rr z&=*pC$1Ux2PSSetAWHNoFfQ_XeFAmCHnz&=C};0xru6QQ(^+A!SrM0qg0%0 zvY_VYBq#W6sPXLtY)gmHK-+2O43g--QFfx%;G}r|IWa=dT8Ig!#lH~P#wE1rO&t0T z+OeWG89TGz=(CQi{C5}rnsjCxmCsrF9B8;5A*&6) z-Eh9S<=)P_c+(SWkP#<{8}cQqcN^-eSyW-JYkB3-^N(IzF!SQR_79zetzc?f;GO_7*eR zFF1GgM&*FvRf}_{Pn9=}^wa{4376EI^+`U!XnV`4A04+@+qZb>2Tkk}T;G5H?r75a zie?XfWB}S`b)bGc%FHXBN&NqklNp=dPk*1Z=G;Gp7Y-RRAwdy%adOi+P+>;DxHbAS zVRM*LvbQfByF?a;`B>nfE>ZpYr9>rTYZqTD_T9+V_nmbH%%51-_Tg{*_COV+&-aVJ zL6)AqYe1!JsP7+>NtzWofP;XEMoc%yXAL+5~;S!N{HPNVeow2=7JudE! zNr)$0^#{JmxP8j|w%6hbuJKcy4%}6LYt!1N5J_BOoC5nab=z<6yz>rg^T9{GIBWKK z*u(hr4A7SJHlf!jHNSV5l?T(?BWi6}g@22t)l}<2tmcrMs^m2DD1S@THXK*VQhdwCm>y!M+IN;Y=}c7Fue z#K+Q$(ZND8l3>5t9~c@`jAPoOZE9D-ti%4QJqc=Xf+&6*S${p#+xb{W&+59c#L20d zOx)%uH9s`?K6qmML^mAucEyXXPsWMJ*(W}U1 zojJ~F4YIG=(2hS<--KTGiU#%0QTuI1xp<)XjS#bP8Y|xm(s7$chbVcTm*A4LYudRf z!qbhUWK6JBlbEo4`SJ~miMOs#p1*gp%fGd}3aA~s8hGEKOmsq=b+k=25!qWyFiI#c zY>CpGFWIr<{}Td@+}&$~vOBpw>LljLtN_Y+rqxy--2#m~T{3hebUrP`>B*c)Le=Q% zM|Q9pNkGDSJs~qGKy>4Am(|9f2I&hyondq@pEioW)4RKR%TQ#lX}WhI3&r@5xHP1{ z#C>%^S8^lvWnT7}A(_+SV<1u$rgy-u8}%%oe!X(8x1<(g6@jJig6TjL?(%VEZz>@S zvfAu&Em?qBs3dHZi3mtgA#&1<%iESo5&{_boc@cjkc+lmOz*5a}jES`d9DP#wn@#b4`pU2I%Zidh)S~osjOPt|q#5--681 za<7L;XW~MQwcWzg!@}brskg8}W?C@8JwDHQXIy;mPhUHFI(yQ~J8M1w7$_LU$9cKf z4U@##X&fWk<&8-xD!22OztdSo{HjFyEYIkm4h@wjRa-Pn?A289xn4%&1|Fz6iEXM8 zcncpX9rSFFL{#?xBzr?G6;xK(xthJ`M>jc#iptuNRRVE_Dq@Ydj_)-Zgb_2jqTK0!nl6pV`w3q_N6<;mG2%1}h zRaFE`%vfncYh)v%oA!OX+A}#592>rPl7o5=R&J*S+K}8Wv-qsZ^%$ZEfLn|P&^`q> z_$;WsC$k4Vz`w07a@t(CSbbqK3QOb2V^I!(@)t(ec!hDgp&$KTE@U-NE3fiHJi=@vV-X{^P!t-=qGxh-V)S*5 z4-S|Uy9;KE+S0N}Baz7+v?iR&U7G&O5>_*vG9(oic7wXik9;%Kmn!v_KXCQc*t!{o zxvAZCI0=M)X5X2#HcBT`WWgVuQTL$z<&DjXXv@Te1aVwO$L$Hl=SJL+k*qFsTDUj) zv=L4lxltyc=W^OumNZK$X+7WuB z!C5@&FE)+v&o~`X+9y*;^0#Lc>skA=a!G$rCf@1=1fz2j+9I%hrbRHD8~iS&^i=0M zTOb8B0!t9-KPN>cv%ch(~ZMN!+bmetm@2E_j&YHW-SefgVl z=Ot3wR6(+}D_8!rPplHSg%`n9H*;(}LC0~wRVve;VhT&*I%W*Zd-`safF3+cTCyjd zGwly3&AW&8v5)wr&YZ;1XiTLet{c6(v@nm6|0KS3H|5gZTlWC82&AnGb-MpJ*paLxAHlmN!Jc1vsjeUQurQ$Td`411{+i| zes*Do9+L?jjbOpXSJ-YPaoU*dJ(fZ`+Bm(yg=EdPA*pDo!ZGAuB05bwX4l_lwQ~zF zb)|0xEtWX_!OEx|JGS2AEXs2@?SxC<)(^TnbN%BN1H5oKW|#@u!uK1F#5CpD{pyAdMVA@J4!gj>l%dvs6vnVks54{UK+ub`2v^?>VU6Fc=4tTw zQ5vzJ#2|_PC6|wY-TyPN)w1$3nLE(ar9qNUFoM8R_7HK>xS$q93oyhWyAMa(~H#hsKPG2%od?8ac2}rN<>R) zRLRMp%bS|j3_BGrdSCX+p`va!ZtM0CEe+ElLG>?htJeZhYgB~9PzN6vaRAimZ8=839Xsw#q*pP8Bo#s!Cj=n1$HJ6vH4 zQ3SIrAZ$L%Xw4L9T-&EC@8hdUmuUsaI6dPYl!D6(2(#4mmGCa&iJkA$5i`zoviwUa zm#Q(+Vhb0K-Ysky+SFOdYTZu+=u23KG^NF*lB_P(pXL-1$+ua}e_^T$jH@j&jg~T( zCk0}N_f+}=iEDal5@V}%DX5uN)1C<-6kiN6rex`5kc@jjY6eIc5pGE1i)HdtA@Ys1 zJ;{hH0*#^Wkup1n>irw5F0R9_X6EQ*@{PE#f2?~4SZdL!WgW1FL*_A)t83w569S0# zH}B|+SjQx{gk>aL-*{Ny%#LVJP!?mpv?MD%StclQ4VZtw&;azpjS*h$-~1KzSxa3~ zDDX8~XufaQf!h&0L2W#H)8Vh*fH!+uIkKF!4btC5Q}oj0n^Re5%PoPVI9md8zdv4z z-p*QmL+L!3IjALIYfMRLHKQ2^3c0I^qmG7`5gSMTx?~BXlsztvNEh5B-icKxk3sl$ z@scPqH7#xNKby4WRzURB_E!`qX`0o@kQK`h9ylno{Fz^fx-sxqk)=%^JJ0W$?C;Nc z{Dm67=uO%1%5LPSK4h(o@?^~s>DWAV5r)Zv;5l~4QuG{P%m!Jg2N9+W9OyX&&@Oa^ z7NM6EAbw`fNhtjMWi+INMEi_M=}VT%0KKX?yR!OgPLcQNoe89V4h&6x9t11IuT@=+ zQjb)FzvMzh8xk2`@sgScF+^RPnzc`K3zMtW{z*hI>>vL8l_WTc_Qr4vF|J19uOCs% zH0dB%8CEw^tT{v$Vveh3H6~Em%r5NUIe8@6lhZT8DZeC$c*gV^1gYmF&WK$1dgQ)1U3ls~EC@7!eNg02&^Z1QT_bcxFT?s#DqYub<6#QGCZ zK8KTjm{hcUxSqAm1Qp1PPt}acL;U&!E|#D~M%FGVpx;dTs0gRQt+o~%cyH7EHGOxc zlg;)@QekGJC#NOcW%hv6($ZIZdYtuRo~o*@`#cziX!H||WWESDeT_Pl!|{7ex+RPP zP=D$9Y(xhMG@qBPt_GIJ7aSGdjoq88385HbYYZKvkv5cx}sZnrc2Q5IXpuGOC!Pg?;0M#PK_tCx<_t7 zUWy+nViYg5o4ucQxGxxV=0?1E*E&4rMl0_h4_50ME`c*GbQxDQIUv3L3@iT_ycz3} zH!0Y8*%+x@0j`ejH8kHaw1j8O?(@~;>6&O{;XVWTiLnMpsgh&YVXj@qA|xYYFuQ7fOWF9+}S$ z|Gkv8yL8h!byps%5ld&kOz6MFGZtQlT8>MB*FCD{z~^pXu(|~m`QcW{8?wB39qV9L z0GIp%uT}Rc8O;K5c-q6Hg*P{WRMooRN-?8N02|mktHsP{rLEpVLcqUBx8)Pw_$Kc5 z$u+k(l!u!RgFwb1S*NFj{^>r#*qZRTJ)fqdl^!V-&8S2zM|*Oiw0SzYG!uk)LgWSR z7G!$;;=ds?RM8!r1~Z#YpU=mEnfKE}elmT#+pByMtWe%$kE{;yoZvMe{~4e^GHqX?=npgZbij_qZ=(s^?cCSpM0$blkkqy zeSJv0hnqm&(}0fkoSthxBYx>!Q_Lt{1n9UneE2?N?s|%qzuO6oU_K~h@-SoW{WxIj zSK+(sgG%bx2Wt zbYpklgJf1IUO}gL_s(GBB$s`9y{Rx^ZSgt25qiS3g)11<9+zr^xx&pfCF1ZrhJ|Vd&|5j3sJ*c8FFmdhsaB5EwA<2#(TRP1^7z zDM>`kDRpZ1uCH9+2kqW}ya>B2V49wqzV7~vO8}njSMzy!&@qr~0lsPWtl8O49P?;b z3N*1@1E>?)GYA?N(6$3qw$|dX%aHk}T{$@lWG@@A^T%&r8e%oUAi6Fd_C&EUj5;3W zpIOA(bS{mr&;;c@gN2g#K4T}ZPUmb5ZtEUG=yP%LUBmVJa;;~iN53c;p5a@L8jz_~I$WF;mKizzoQ#7AF%gU1=@-_5e zQ>N3tY%SlfMm4MVM45l{)E6&qMu6IbD=f}U1N&o`v7_HTF5x_?K& ziTc*lyzY*=fce0EcP9C#n$?u(iU;nY9KB*5nAje51TEmK>v~E@nYbklv~58^={oCt zmjkr9VrY`-F!|(ql3%c^#xt03w<*QJ@jhLIPuE=^;e&l_T=f}R_rK*&Fnu-i(ir{u zSp>mpmXYeE?F*fF#pdX9;m##+k3IYm6JHq6d1^w3Q*WfT8Lm;zKm9=M>MS2-a*S3kk4BA zVUCZi4o0W!)g`pBh|ps~XPWrN!5^av?+)1!g&vc6%jA*#P?ia42o(w$s($3Y_PO&&9=>(I!TD9SdFV&*q!oQGkq@ziaS<3-&t zF~3Sne(PW@)%%RJVkZ?L6V6|+G`M^2!0}Jcgp_zIj8yL;T@k13np1b0kx#)WQ{~;D zm8Doza`%e6tMP;1Ih4L1j;%rhr0EcNXMMn?cJe_-mNn!0b*7h)hUC>RIUi|clLm05 zLnD2_7^=iuS`rh3f`SgSmVHBJTDvKgwXH?L=WJ6qV(*~vH18oKoe9*3QF?$R?6c-d zFV?5;^JX-Q>A&-+q==(O`Z2cE{bDZ|P5|#%tb97Ek!d2S#jlS%d?2&-CB~w$Sei92 zO(GfnU?<~Pu`3tCAq6Vca#$#Ro&$P{>4HycbhOz#rU#%^ejrE?JYtdSbq1puC28ph zQJ#F~i&H2YOK17!lSH;m(Y5WObJ$(Dm6DmsXbNfDSt`57`m56E8ipPxqg6h&W2o1^ zJ*5 zul%!|Q=Fje=|Z_@&x_P|nRgj&*f%sv6}s=IfoC3UG{1A0+mPrU!5CuVPL~74$2f6+ z@#UD4S0r3=-AXjxsN5(XPQjzXE19L#%d_b(quml1sELC_(yGDZ?21n7J4aI$m6Mozsvczi32;s%Kxn zgNZv@5n^fxxX^s;u~g3o>|W5Ck7i;6)*e-RL*wb(*HPe_S`MuBaN|@BCZB^&WeVrd zvyhj)_+h3lot19~cfpebpP+I*l^j$DssITINqWSXwNup}*o9HXK5?qr{XYu;GKfS# zHs3LF*LiFYRW<_S2p(CUe}d2z?by~FLS1yh?fi9b$bb{eQNj44lpK<=&C9*QuXDn>&Z4)W^z;w5P8ny3u0A`lH0Y%cFBej$05;pnY3uTp<@EdKPG@7b$}eGI z{stiXfDR7W+P`4r8LJsmuXj9XL4bF{kD6E1!J-WKFtxO_fO9Tcc$#n(N;7f~d{@f0 z8Nw9npMZ_pv)HAal%Fe8A(-2F;4H=#)S|Rxp0!N?_#>_22$XdtA8(U*4*s9O*c1EJ zC4<6AkSN!Kqi3_F4U+5x|Neg%ix)uU45>Q1E(S#`NX;c%j$+2!18Ou!f@MmdAEO{& zORLEkl>y!VpXSl#2$US+#Jh8MBn)z;a2;O{_C-S{PrbQs5-{H`*x^joMu6{~8W=@S z-pS|85;Hl~h+?}U7A$#LyJ^!dvghkQo>Tfq28;>?+s48AUUC9OCJnrtnxL^@k3sFGRDbJ|{2iZRmf}jo$u=1uxEP%5=GXVq8i5pqbXYR4 zk9O9hDc+#|!f-+DKTESKQ}s*$=3HJc6}@Az6kv`u{Wh7(*6L7p#7otsXBhdcbSafB z*L^>PoP^327rv~4HX&C2*UjSxom9`^Y3%Tw_reqsM;Tg#9CZN7ABY=MzdoRnnIa+1 zd+*$lOjZ}PD#2ShBD28$_zZP;Vs$9Ndj=lxwX*cre5qM)7{eW7rd0v8uSPXjavZFM ztYY(k^S}tY!VR36O7Y&=h7PT3^!NM5fAW>mew7awyO{>3VG&`jF zZ>Yv_!_#Y=a82FS#l$^omtH8*5l#mm!^sb!PW_{-v7@ky)kI)Y)=+zN2W+MK)FUP? zszv=sFg%gjdeIp;VsJFFazAy3TII=FNH*42e4Z#nU3l@h^NUJZ%e_VeFd>Z(Cb-PL zwxmXu>CO|ZW$fh`biIQ^5MEUip3%@=Pzjw76iVMoEsreiL2m6Qnv+<1B_|N0YJle@ z4|>XMl~Qs6Fs&~2`GZh|gr{vh8+?QVHoUX9;t8j@MxH(-q;m3i$nMx&6gJjt3zjj8 zNEBIx{dZCr^U71{b!2hwl?9xzKs%fRQUhtJH8n2a!bcw;4bUs4yE;z>6Eol)Z3}3- z`t>P7&?ckr1eaM$Kcf{b@BD_Q#?(ca?zxkx1Czbv-9Mi(fEj7~_vE5OQ}Ox(S6fa} zxqowj`1|(6*x@@jTUpKjp^m2gZ$G+#*U*7-{D^k5)llTP$tc$PTgDvB1N~9yJ40sa z)`c660)9^*Sc&I2a7}oNjz=9oW;)1fUZh=LcljZmlaG?T`fw1Z{V77Gol=Mr#?P5W zjAfF)#aDbWamf5%S`qIN3RM+;OeLczcQ)ofX}o}flr(-ZW&G&RKlL2{$%La%nGeQv zsMn<#oCR0ZOfSb|W;N?s%@WkKs*jfJ;1n4=G@>?&ZngKO?u$m#Z#Rm*)hn|M*axTz z5s~}ua5gL1dq49u2dtF+`09m-U_17)@-DtObLpRO6AU%3%JBsllxOVsj;x~I|J4pO z2j<=v;y+w`$%6T78PkxTK9WrC|2vtpts4^o?d_c(^Y#vnfE}<$cDz&)yf?xTw5dkN zXLVtmZ>*2-&MctJHJMsc;tKiUkqamIbn>@+R7;h zw){2BC<9V1`24`1Ar^xZyfAIK-XfZNa~ToGWI3=CuO{ zfE)?oXSM6*I*WE4jX4RNVhsR!>?ZW?Dgl;DX*rzlfM=nojmG$3);ZAZ9{a+?anm{8 z?@BG`K-BG0DvQvwwoJd~#pEpeXBnL4C9?mTwUe{mA>AIXnB*Xb&93QJdcc`eI%S1S zYJQ~zROKCo8H|Fo4ACg+>^Q;cLjMLQxH80g_`tyz7`~*vv0NLL#o9P#igfD%k!TGXyX)a;-=6aqFoPbT>ee@J ziDcuvuhAx&(==22jcP}#OvxoCE(CGV_j@Z{e@f0=?37iPYIY>Pe8@54Y@DQAvW<*B zXDxnPT1fe7L@}e#9Kj$PgWB}DCTzAo`!hw#d@n+{;$$f|x&I?6kcrbO4& zvLD5>@>hXUTe$G%KBqdzn(Qa7tx$&WDNFPaAdnE-&NJBDwDVfx^QAadPq-u|*4#f{eZU}7fv zICkZyReWBUt$}`S#q5iEsQr}8b_VFfyc}P$`LOuAa<|wZ`%njK`b#RB>p2LRWzgEp zQ4cimiT$oW7^-WKQUwb|7-F%%eBaSy607UY27u#$nq|c+d^eH^V*YHVS>^tEe^oCyGYgr)Osfn zL>ID}pHed-)Trh9HRmNWcCtQ1*(##SSeqElGFy6b0is(`U1Dp|lL47c>5>$!G|TiA zfd&0GFJZ|Wf$>qn#9OvVzu7ag1_~LuH|?fb4obC!reA zPRY47QqiIIFu2gQ(u-D#P%~PtUOM{_RSnQf!tPv&L{C6B$pi2vx7ZnK*3rAAh1T*7 z@S`c0{7TMS0kB;A#xI=AAvENo=xz4ijTH$;#Z|waj+>w4evQXPn@X)p?8-#^v4Lb0 z&g@|2djejcmgI(3OX>1?*&&J&z&7Dr<|Gu>4xyg8oO&z4Gr1onOS1Axl83KLbA=PM zE2xC&3SvXK_uG1R&mqq0(yanV(;I%GuaZ5w8B0TW8nVwxmJ`(+pEr91wJk9Sf=315 z(Kq5$7YUkV;NsjKCRrQLH0G6INX!Pq^14kj)p1y|(N{#Zrd%3Rp1mAf=&NzrNZx%i z@{qIbA}?CZ@ZB$w!uH!B!Oa^|Iv8zi3)qpLQ{)e2I6Mf|}>0 zZ>18FYpV^Mv#q16)^j@V5%jw@;OwxmkeRUMiq_=MiT#yB*NXn`HWjl}Z}4P!ENh#$ zs{ui$apZMIJ874c`h5h-+VRq0B}hBF+c_J|R3!N;Mh)*cN>^7z~Oi{|M>D){KT6#_YN~ z-IKKU92w=5>%O_$FN-_&P*SS0-U0CinfR=wkI~NXqHTxCrx!*rTNM;XQ_ZXNu;-z6 zHSEb8+ky~V1!tGcpluc8^85F*kAtzUpo1+^rFK8t7AJwkmEZ*%-hEaDsU?0H`ORBDk)4O}ZB+`?el;5=HGY;aUFrgr*oD-}hs zgc<;V7=Wk9KjvnTXbv6mBYq*>2oJ>GB2wrrGjdwD1>$^@uc%o`E=o_&LcAj7h3I(w zWP2oX{TcS4A0|20WxqJp#?v-+m|b!mrT1*k`tn1QLuOOs)*U?bY!e!nqQu0uP$=36 z;p@v$keC^wd`G3Pmhr14nq!=eh@3i)Z&N zx)NZ3Z;!_4x*{I2-#GoIxQbLF3#S`b(szn2t=XLp^faK zNsflAOQj_qIqsF9?49b6oV)2HpLr+Jei%^GU7RDx-=gN9=HKHK-rWyDEz;GS2)1kOVARXrZcA2LAG3yggoy+=7fcHZv04X%_5vhVG+sQnX)_b`@4yX-eUJy>rQ7_(nA zZTo?<^S-oZGMO-Yc_N2VTD5R!E>;{gh7r+9;#KQ_EB{z@rja0u5)(nqjzzCIW)Xb1 zO%Wv5@`rJ>Pr+So0OxW=`chW$+%pYozh8azwVbsbo@B51r)Bwld&-5d6jn})auZ&8 zW&6KboyWSg^iD<@-)=6ab@P^jqQQ%r6FYO}LPqP;=yjEL$aZ|l!k|4$BmsPrcBoY^ z40S;EP35#&rh^ACUR&|kV7o7M@kwveKAA(5-VeL5WXUh-oS@;mK_c}M`OJJdYJy1r z1uf9B$WYdFG(?^OF11!fMUUnuPo4|}i}zvx<)-ZSyGU76Q79BiFRpv<_7JPdLO=-# zy=Et1;X_%;j*=6cwK-0uWo*F+2yu*UJe6|kM;SuKc%692?D{Gu%=WPs5aS{CR!{@^ zg(2{yRpdfeA+E??24$4EytP_#29A{ep#bMTR;;RdQ`Xvg^QJSReVCN6{K5tp1}f?L zKo=@u644CsD*DGP6le!Ov6Hr6o9{vde`=EiZ^lSPP-*L;@(H5m{ThCXO-bh8&(7zp zj`pv3M)M=;o*;|8d-o33UpjlfH*iq4!vIwDA-$L9iVn2PVmGUuOoAzw!V;WNR4-r; zaua6HerJ<&6TH(V1WsV$I+xIP%{G!KXBFJTq>No6PV+hGu(2~a%}Mg+&DH_Vs@M!l zO)E9NY7XtFIBaDd{AVpv?VL>KN36HJ%-H(;wwA}kb_r4Lq0@sBRQ?w4e`A#96WUfn zB~1QmVMb z@xQwHx@;|4Hu{8-PxT|Tx*Rjmdf+rpNdU?52-r^z zu!7gE_B_Ayzv6`>g}2T!){L2#JZM`utN98go9(h`)4eHH_YxY_maz6l$&VX<_d-_z z%fEd6Uxd>{%xmZk;cVs5_sJ^d924WS5KTS=%<_59FlOpRhNPUF?#nWpm`Xf)bcfMb zG)om92F~X0sC|(f|ArxP0vIW1E5GJ{Z&7iE=y(fk+`^_cJCfr1+P^=YxdBl zqq4Y^&e(bIB)yr_g`DWJ-|Xt+hq~bk0}%yB zs|R81IoiSxs(^!%mT2l&MbXSlzT)^h8Dyd}QW!F`v6#uBwe}u7gOQq((4}r;+C_cE zk{4_0su^uSKU|^`6z!TapgIbdgLh;7C``V4D2R%A?-1>)jkx#Is+JMnNJA>tS!4X0 zJyGa+JK+E_l|2EX#+&`OP!e*C~`-uN10BHRGps_W-AR*P9`X;%1+FUPO9{DtApkZ^>tpOnsp_JQApisWC|xZsNPIFWZ` zSma-il7!>-jAK5*M6@jk+0ONYxW0ZD-_ObdqU$h#uEnFp`S77R?HC0J(QanFZ@?k> zVAnVY`V)_^{Q81(hy^$#6yf`XFgZ^iIivcX)4lvRlD0#B&7gJoyHV#n%<4y$$H0SA zX}oIaDu@MF+pIE8IPUtD{=W)j=;Noo+yal=O55g=*M@}6oDF(Dor^kvWKwTf;)vq`&Xw3D+=Y->YX zZWq#c-HiNET%nh##rM5?I?yNXSoe&v53W@k9YPCuCj5vgWVLM_D0qGN%eQ56AE{`5 z>`V~K9HNqf4Pj>d+h8*F`KMCOx^`$gk2Z@mUPL99?G(;&N?z|3gNa6GPeQe2#^T?~aDq_%WfO(U*S(qOUE!K}L7y`*umbN(F>`xW9#tTO)9e7__}$AmX?v z*olnCDpm;EXmktH*j%P=`;a!&C1Zf*`xP`j{#C$vc6CRkK)g$Xy;{(Zg2aD~v?-iy zFh%Ba%82D7RQQzKpmN>o z09u_CpiigL+6tDSHRnT~tv!QdxSQ;)ja$p%oVMONhj878{QAgDAxs&uyZ1QG``1U> zaM0D#tqu+oIp!)iDLG!p#Obd~FRBG$5QUPBFV1qoc;ST{kXVqSX|(R7%Fdd{ETJ{8 zLNFenqnI|{myC}NAP!Jbb;ia@&el&RXR1*$JWMW2R)Y*;fz)~}^1C~k!gg(jFdt1I zyQCB<4_f|dge@rCCiunoN#nALaYo+K*%)Mi0w;Rt7Kss(qUZ)#$}hU%v;9^Tf&Z882LlLixpjc^BIWG78vJd7ZT3l z-VbFRm`AuCxYeV!`pcl^lYaVe(saFgB`0q{wo(l8!zqG#kTKV{)0SDhiZhq5^0p45 zaFy{+UAWDUvzPBn|1?~_i+m8HLhLnH{iRw@gxkDX#V5e&y@tuB#+#gSPqMmm0yVq9 zEA5EaPmCgTrbW6{%69@nEGFMd81&>Yz&&-FQ4cOpO(|(Ob%^Jz;=Jc;Wu^hlA(l?X z^YF_fj+8Ol5EU)-Q`Y^U;E--@tUGRIO}+rQqc(q{$Rs4?5*!DT6m~=0H&8rDy5}6DpMxU0aJxB5tAdnA$*0QryAb!y69(wLP|NG5SQ#WfW2?4D9sAB?;;aq-F}IdGU*# z*DFsLYQd{IUt{V4#*Az?UzTwuspdy*4YN1nid?=Gsq_@*oiPb3ld=YJ?W^5vI^R6`M}*asX;B*3T!@7lfl@~7zy9fqTPp-%?LW38 zM?aPfKIcbZUxF?m!@w_N69fnUF1t{ zUG&U+Tyj6F8E1qPZKpr~JR02rm;cfnU$M_PKg6E@nas2|MEeA^)|8GUmZMlDo&8eh zsK6>jKc%_|i0FOceSJ@y_!7l4D)pz!D_6=Khf_gdHs0SN3CqiBW*kA^luJZ=KHnGA zEb$XjZrgrG=hJVtaPfQ{V;Tqef30jc{^BPf0JxVXNx)Vt#`)~dfE|L z(1^V(F#6)N$D?wWeLwpt=UBINDR2%@U%xErI6Iuhf-@>7(HnCoh`oF>(pbwtVT+^} zS(i-F9G>d}G^{tGH1F*H;T{KzFkZ6wPqaZeGBNhA-&h@(^L&n0=KIQOTV$r+kWB<0uoWQ{qsa8TY5xb1e1K@`FFYh3gS(@EbDNC&a#{9y>)yja zb8zNe`=rfAaxd7LI34x-SAZ^~@F7ch`fegSRUhTJc|{IUc#hZdgbWMiZYPPKU(#y$oST*&M3@##|C(5RwS@~;PMJXp>^QH8nQ zUsk_*CAj?T1w-dNk2;Cm(ObuG2a(nHR~YYm?#PgZ?wH%?{c$EZmT~?O;Q?V0Kh9Dk zBxu*Y)A0YNv+kDJ^Gqio;XV$XZvV9>-#8>QhkgCsfFv^rdJlm~-Qf2vo7|#A5rn(1 z-%4(!k4$K*az4rVXMyc@dldHCUlopxHN@lczt}koB5v_^#fKbGPu8nQ?kiLK{MRh9!so^0uV*!*TbABY@MpYo>-~$jgY_I-F3?s>JdToS5&rPO_j>qPO#M<)7(Kw0%AzXfV&l102g3|n8) zZHB;Xrzy_af5DEOe)hA5Ec}w^IU`Nk?_al0>UlYP5Db6TRNXgds7SRnmCc{xuM5N(tGJSixnM2@goLLq|w2mE| zAv15Siv!~_D%lT_>TN?fE$hz(2TMXmLudL6#omKIL(o4%ESDLtxPe0}m(PgcqBl-5 zRKg3|MM$r3zCp0japB(=iikJNq;d0zU7vBFO3ParLXuJN6!=2U~h#5{kPof=73kMZG1-d?_&N&3*j{erjC3kQ!7k)iLGm(aO>hqfx3tEHJX7sDY>0_aLe-L)3!W9pDQ-wW(~RlMi3HTtir=c%|wR7!OhD zU{tP*_Z~7&@UQjrGZ&bBaNmBL=y9`K4^D9+|8IMuWM=)5w-5|u#ZvF=QOi>ty$a8Q`g6IG1?`o0@%kA7GAs*! zM+ir9O&kU%q}IZ9e!5R#8w#6rn3qfutys}>zbx#|J_O3FjYbtO+#C3?G&E~h^Q5C8 zu1;c^wK?9oOQvt`iXMdBJy8=fo#ge&ICY5MD@-%^`iF)DVBTAy^#9H*RY_2-6KDd0 z@dK#Q1cb)O-aZtIiC1ED1-OAC}gu+94t1lBV*#S5|gS`B;($ZQ=GB9gZ>Qp1AOxq;~CX5pni2 za2hi%9Aedq^68jq`t%GR?r(mOFO~MD-gcN&Fi@Rn7y~P>)%y$H_Tjw7Io8#6o|IoabAs;p*PBrUlLo26*d;0yN z6BoNx=ZWDnM>Ie0EUYiw($e3M=>FvWK(Z!1TdF%UN?H1>UwaxZ6#hJIk~rB3LdmJ3 z82<66(TfT{^U>gG&e-Q5sTecnSh&nQp5qP^TS#-Cwbl%INy^Z-ghN?Y`hKDGK>ZuC zdU0hjG#C@dPdfVbydjZ~Xv}!;2fq8`SOhp9KfBlsp0##OwQdtF`gqj?GJeLPeHMvr z-hoVh#%Ru4QsB!)Vh;1Yqu1W{fMKU;W4n`PkmzU-pJJy{f)!h#ZS!gbaq}Dqi5O_xa z*TWi~S_J^YC7oumuLGwNr6!*qyRP zOl&uu{KPJBLbZkNv8UM zwa>49b*+HE3SVxP4DXNi-%3Nrdcl(Ta|wUn zONEhsHhmmqkE1Wls>e1y8EopRh+)reR-IFSU1CY6FEp`WU)+|`gzGn`=!D z+_yz$TU|BPY??UHR~Aw;(U}WC;u>A}OXwxTYuWzwgZsdHHM}`BER^SAp0nr|KmEBW zd-h1OLgS!X7ni1!WZpi{PiGOmy>M;5bU}94xcdXvO7$Jj`4j%m6Q%h()f0C;7r*Gl z!Mn=)=(|@luK4RrPM3FwRivnJ{UN?wsOuT>w+B8183^a)>=yf=pGX8f7fitCYW6 z1^s@}0(gdm-P1SS6_WZDQ0(07?j)00i~K%{zT#gCom)jrbRsNp!pvr$Bi;wJQ|WeLaq_=nE!AgsoP)W=*xQcAoT}~v{}7&4(<52n z;)9)k;PJlG#F!$(h?uqB+3-J(z0x_=$Ng&e zU=lcees5r)WGs;c6x9#HvG5z>S>ezHBHD(z5g(Pyq&UQ-XMh*;x?|D+tQFGtd=07^Kp-^E)M(UI*^7sz&>}8{T{`h&V{S7^&eOxVUv?+K z8P+(R_fb#26%k%Ut2|?sd)uWUDkwHjtDKvQZmrCae(geJ(D_&HJWpK^q!it&3YTIV^(Sxi=v7u_1NWru&_0u#WFr? z!{7J-z3qamOrpClP9&BO=4XNNeZXmec%!>3$lIy7*Emmd7hHQ^vtN{i_>K#oEc)O|B2*9yM0&m}o^a(;_Eg>%5Vm>S_w}-nb)rYk zMK71t=8J0eWm#m09=QD?TtRW7=%HsOqx`7Te}j`8m43?7#gfb)f>hJ`Y7mjm*V}2y z_wUw9YVUEa)VjyIySun2ZTVpG>4WHL`wZRyr`*A%FXcVpU%ODxKY#qVq&8`s=t4C3 zr_ON?Og{5Ps>Ig2!+Xo?)+_LYme@?f2`TlfH_G&HT;8CQ*q%?$+Ps4I*?ij$KR$}T zd{|oR>&NFuM!{e$5N3Cl%pEBh=N>R}mQTT^(h>#{+v0IfcgS4lNEWyz$88bWA_vZq zli8*3>>m?;q~%jIW1BUUU`Uc?PVfhaq-W*d53Qa=Ow z%6In0M8h2LmWTbqUa<3hQw+`CxB^mCgjJlAF1W?$dApvs%JlZ_@D*yU^ln%z%D!^d zCaV`s7{aApN`+tjv_)s7b>k!bLhcgv%&)}USBW%VE{T(c`Hp_G&S&%T1969)+=JYm zpUM*P!~H$wDd<|Mlq&tgriF;IlnU*&$Mid-)>m-PwJa_gIyOfFcVIm@rppjj{D^Djov2^f8*M{c zf8AuUe0sbJOron3e7IKh93}dUM~dh6$@tKk4{QBvr-Q=_F?}5sP*?klG_%DOZqiSm zJA77FdxyxQrVQ~S+(q|BZv7mDtMW+k37?ISBZ`!?V|PQ%>uWnAm)_~>7ZNIZr+H{U zq4@>dYwr>lrrm@7wRgfV*y~G+i1l2I`u#1CZnfA-r7$aUPCaAt37_Wo!G~h`#^Bag zB7@y7uYAV@b;n0;WBaA6F%j(EjxB> zb(VyrI4{j{d-P;!Eh^_w!_ z&B+r&z4)iUAr(@U+kPNk;8S|@-8mG9=Ue zSrm1~mP(HN{jGoP10BxCOq10Au{Xxk>Cv+>KHLnfZV{ocRT~iyY-0uNtW)D~Q(1oM zA=m`MrrvG`K_2PuKIU(I&w0Ci^Nx?4_?}%N-$@M!Zg}zd@kM^g@5SraSoOZ#{nmm} zf2f8(-sY4&Cyix@Uovstqz62vA*_68*p*L4f0vLD=g&XZ8{^?VI-FEgvd4z?Fi4cr zeLjqM&VO_I7h>4-w&PG(+oc+v`X;1C>mG)psB78Q9c1Y1_<>j%w3py5G!mlbveoqn zfi&&`^QWop0WerOFh$ZU3v>I7HzRCZ+$ND#Z_h-l%n1m?bz4w^%ij`UBRAE2&)?!9 z(}}>qZEOFkU1qHposY`G6z~w;vTMT|q=UQc=KDyG4cRVRWFZKwSHahlP=(9a*{Vpd zoZpn6LDrY2o{KLfCL159)D}N_XA5S+N%QKUFDi2 zQK2U-IBAv{rJh2}mY3qg1HXZ|Ii-s9>y==O`gj;eWt^uZRh-a>>M`mX8? zP((^qPJq$bxCi0~Y;6IxVItebN1@K;u8w_660%@ic(3RaeLOL@zqTdA->SxD+1}Cd zH8Ga#+y8GE^W#K5XO#o8T6fXnn#0hb^7wl#cJ5B^qr2y8QVB^;TXy}GICgQ5diE6Q zdh2Ut5X5r!ro|HFm>!kwF-1ILnyZ}5Gxk87wdtpyCDsFR8^wzFv*s2Vg4I49DGhlh z&L(=h`VXCWui}+CJ|ac3U&!5@xUO!R|9xHjPoKgPO_9fOQzOC`%5-CWxj)-m?)zk1 z_!7~Y(;M5|tl|k1l(LiI&Z4fA3!79Tqp`#%V$!C@(FfqBOJbj!*5>_yEg`Lw+_OY2 zPlk26$3SqqKRlr{DJ&gLh@=wf)-IBlTc!upo)vAEG;f#HP7(FZNAM0kcksZE{#HAf zkiVq%V9W9qWdyfADGM8W-q<&B)Y0_Ld|1pbaZ`yhV9rptAYb)LeAGpl9;%$qK3OcW z-UH_Eqm(Xx-C~HxzSSGeQeC;9{&cVsgU~~CwrvPf#BdRBJd4|8u_*It7uM3 zJ*Sg(;>kK&BpK!TF&X`+N?Q1%(vSsy`UU2cPY@x;FRU*91hz7)cLk>hW%^k&CS?TZ z{dOo-65Z@^+0$cjU{ve%yw68)yX5VZa_XJSIJx7rpS!oL4=$g)k7jrLa!4AoUYskh zJ1q0pm2jhi)U8!j#}^(q+fF?<`SbwdmCIuk%YC^eR!^(w58&fmd|&+L=t(IG;jS`+lz*PmQIoB#2U?w`P(L_ae@=*Jmni-k^y$a|*B&0rV z@z;gpHmLPZi_ISzf%1wo_L%`;@hZJaX8la0Y*l>)UFr%|lz+&bs93h$>R-FssYyQ2 zvjPHVk532i{tFnT`;NgFT>q^y3hrf=z-zr>Q~U%O{J&eGu32T)Vo{IT97Zl%r zJsKcG;0|M1*Lkogla52J^8B)LvAna)7%B@BO|Q(9)E(_nUG~^l0EGc?$xRXa#oQJM z{>Ad1M@&Bv=3OIqhx&@=6B$Kl|3&EUY~Ma4sfRan_bKh1b#%~kU+|ZY7Q~;P7xxep zmJ~~7a@>&L=QHMDrGk$S=ir+jj{!g1DvI}dLh(}#ZfqhJ*I(~Df z%sN>#*5(7(qse85=lX|aLEp32m<5&D1!0G!I(}+xw8-O74xO?C!9lkuLDgNQlbRN#GoWWoy`{&^CV z$wEbKPd@T@5+2#^**+lC-}z8-rX*_=_B@|ARa(gcQXCc+1oY!-_s?^l}OB@a3Kw?&4d5f83DV zQ@!H!`nV9Mty?E37k{A;+fw|_=tY6*s7$Hdwlv4v=~d-b*wr3wP%2Y#5O5AuZoLIGdS1UE)w!rvoVH}jbS2`5ico&4%+0c+@wtdv(-E)q4|~BV z-vim&Ga?jA_+XH5X-GXIA!QXX)3 zwI_%Mx4Jnwdztw?{G2CF>$mi)a+lOcct1QUVRWv-wZq6cdAoA_vyUg>2FLwYCwEt$ z1X0Aw1d(Nnr_(l0z5SRwzfI?v>3r1hg?kcjzs>LVrSYOLcc;KAr9W(At&a>G0mMrJLs56~)#m=I5T*WwlQSUrTeD+q@H~4-38PN!t7%Ib#I6`C;RP|3>T*`*pYj=`|#kBr`xzCZ-|^d5=I-;Fy_hf*B}a;lev4z z#<*ZaXR&g3Tlg019Gz3VtIGXpZ|^4WFvFTN&ZBnZ5 zqa(A8ftfB!-#bIOY1s5IV12of=Z6r;?*6l17m}+M&cJcFGPs_J<9Iv_;FsU=@BQ)n zco2Hv_xbSqd=N&%@9X2gpAV#WN|w+*8W}A{sa}QMS_#W@o4{+QBBhUZw=)}vUoIf@m#H)c_U(l+Qyu^ZBnj5>_eC@^-_jaUtA7t-Bgk^j7&<#&tq zpRXL`8Saf4Ghb;pmhg5CdV?HSu8_`OpyDd{_`Oa9_rWdDSf$eDUw6Rv9O^f(k>eDV zJpbUaYWLInD}0d&?ZY2tccZ-rY)eMQTY0~jgUd!ZZXBtnF^ZH$p6mGkXMBm_!h7T) zeL{aHKmTvz|BU|GCPHuZw>k@<@7C{=cQ@`Kb@SA5+-CSxrL|rIdiCq8#1u!WSIJdX zv>!Oc?pP(SLeC57Zm}ltuL2HKC;VU>6tG+D`M&deDGpKx#2WXOPo+3e9TaN}n7&QG zZm~6e##~3-UD4I;i1~Nypy)_12ddp-(|O)bv0H4CJZ`w(N74y4r3v-Lc#6pKyvpk9 z7Ta}idsg;`tIlt>wev%KFg$e2E6s!MpONt~`DAYlnIFsk)A>Zc3r&rij{dI0;n76k^aiptkLir;y$E!jV4lE(_J>k z5hov%vi>9K9p}mz&esI0d5e)@k{;jJ!0--WrOMtTlm}53Z!BY29i)y*HI5ZybwnJZDPV+ykc8}HD&1Q=8 zHH#t^<=>X{mm`(7qhYpBgRpxk{&{0U;Of0p#KJb&f@`d)N_@k9OsOOwzox_D~~&K?hOG)s!KXM6DhW2tU>hE{cJt3 zWK?K3ss`D5(W0%;Dq|{G|B~^rwW^7$2Im7GGA{_G=`C8UPs*reE!X&;!jLN{cFg?uei|AKS~|QRoSuOFLAh-CaylN! zdpG0!cS>!v*nY5B-@tzV=KlTrY5Oc0{`2p=^UhEK2dP)$5ind#ibOC}A8DZ_qeYu= zYLN9`1u$Zl+i3bFjE|@&y`5q*KBD6Hu=Rai-c$Z#W#`yr2Hu7^E{Udl>Bh`A8qc%(PptoRR%O^LjDCdPJ=?Yk`v-81v66j{(7R_kKS;|X zxbIL6ODFUX^QoFk(=YFiR7Wje7DsU;_@VVrJn_Wn&JW^Gzn6J(1Lo86<;x$v+3COM z6zJb<;SXW`haRGVw#Q4iN-mL%9!;?&W3f7I?WGeGd+J)W-}rB5^e4E(KFIo)jEBCI zy;7Q=;4D>K7sV$snzj81phPhl4^JDr+4~h*x7b8<9!t*%j74B62YTF?p06oaxI5%0 z>&MTPHSBu?|6RZIEG>_$AI6GTt&aHZZh_uGntZk0g5h(0e3S8DI&|&|#j{Hz)p5~F z5Tt#C!jbAE`RcSKCqni-m-+X7wv)*?eJb#bq>i-XW}N@GZ@6maZF~4bRXa3^YuB!& z?U|Y5KY#RSPqx2%>hd+w(a~(Y&&+{dbwD}e|A8~?U4z~9eKHdV-AOz8hs=Xpj? zg87qs89iIHPx^D*8AgwRx(oO6gM0O~yjzQn=q(?0SzWoWlC3`zaaZ@~ zqgpL}pUnRkybc`j`Lfb>(ri1b$l~AzeW3$|5}5?{MY(Nm>kZN6)^KnLeJ9jDzty`a~Uh(e2rUdp+h>E{}Bd( zKOk6Ec9@O7WX%q>(YS@JKgpo?)a|nEw0yGu+cWIF6#LXCYt$=N+)pu~e+hg_&U+!u z+M>68TB*VL5YI62uh-*dpucl)^_ttOSKSv+_|V%0evt5&SrukBp2&W&K8hcp`3XPi+f~BqNATg6*WRJ&$vA(Q zD{ye9>p9Y+;xji=oUZ}JlLUS>8S8(*-XrBSJrcOGyu6O$fx3Ln{r7+TF~!MP|HH$> z8x9SIS(~n(2N&YG+33HZsCvcg@G4L04ZGqOX#Lx(5F$~h(^33lUcP4Y=4`gUd+92* z^|w!&MAO&hEzKEf?i?fFnK^u{p6%yLb7tl&Uw(zH-()=0|17Mxg#LVAH=BQi{z=_? zOK5qPj7n|UpnO;oEXWL}iG(VaD=WEJ3DUNPTMl8_h*?yC({z8G{Aa}+(7h_zk@0YSW*V-%C| zp&zVa@00amz}mz13$i{aRS7J;LR+9YY!uGxg#LWJBQDU`p;$)CC+S(;-RBtAV0}== zoTfM*=gYD(p?&ij*Qm*QPSa=RB!jx|$YE>yOaqa!h~5f8AOPuCBrjw-a&rA>+{o7hw!-n1-4}DyCL0@apU_VxRsUH zq8)?p+1U45w4{6)!d0VJP`%UD-oJkU2s{(_2LZ~6aOtSXq3Y#FBiFT26dGx{Ga zT%(3R#II>BV05cnxiXQ__x-{a?c~W*rqJ}6c~AOBFI(PDvFoFM@$0XeF_z*yILqn} z5VQGxQPZvHHwyfj`+AL9Y4m031jpZix2szn@=w>jt5NdC8e0BE?RK@Y+o3!i%Hsuo z^r9AcNSNPWXvW6s_X_#n)qF0Gawz{@a=+w&^VIuhIi|0Uebzr{u)#pTPjvMh>0fP1 z)+}2V7e~_`wTWe zrmw%KEv>6${M2-v`}%hChen#8;A{3DnEZ&~{tU|u$8=@tKnBI`D6je1hJynBLOW;| z_V0_@FEoSJJzvsvf}@rvu=D#D8k1)J)v{wW{kY~`bymBb?H})|KgD`g!p=hk8w}ZO zzn|AAo$t8*Ppr?^#Nnak6=+sPe1PZHi05p7$B~fd-D8P-^jIZ&S_QnKXSd@D;n6t%@YwI8^fkO(!@uJ&T>k-Pa%2bar(yeq*}s z3k|R0?KD5=uRd(Q%EsGq;Gx0#L7GnJ-<3F+L~$P4gX1t;pER+b-iz}P!_kfV{2l2Z z-AL#!$VZ6${1-e+pB|A1@%&=-%|QQA-Xro}9xi#|O_t67@x=(3a0C4>Wh90h8fbrf zx%-lK4<3qF%AZ55bZ0sAnM$5x`py^BNV)OS4?L`e=C7cg0YQE6qzH1QDHOJLZ zJ7(n*`fut!#l{DrKhAUEwEXMzXY!CujnB?m2F73hTei4fMZo zud4$;gxRb%nN0rleM0|>bw8F;JUwUe`pO~UJWj?#?4Te&p01m|-cTmo-;(v9#{M&- zmpjty%DV*&`kz0)vV@jT)`P)hL7wZe9_xWVOIQyy$2A>gD_^Ji3H?9oI>6osKOl!V z=LY)2D-omruI5i~p#SyxA5F_^!F}m^JZm#Se*}x>`Op8!^v6iTg}pGI{+l@bvjQvr zk^6mLKR-WO-|@eqe|6PMdGLD4=>KA#w{A*U9g}~ol<&LO<@xQo^nEh_T`?gj4q9!} znCj|G6chTJ!%8uMM`}#y{mssGO(*pCZ5HmE$^1WfelS8v$9`bkfHV9^ zd1U@~b=j{vVykUvJ;j9ndcB>Em*ZF;RLXW0O}~ioaAsxiGZeq8?pB012=vcW|8Vb? zEy8*i-8g1Gh65W9^RWLr%EvEhbIJVwE;SGPe}V1qJnsT|`af^}`=Z%c4B46Czl;6D zn=RJ16f4p90QnjHzbed?!};|%T4Gz(!NSC@h6aiiIhQhAw`_l&;y}&l`2z!2SpTk8 zkBM->0HEnu?KMFN>q#-8|7{m-(^^(zzp@jK3rKyH#~F|z&PIL<5K z1_SzdWPGhw@4I)iVe@8+H#PStKz_Er{hI&tTE9sC-3K4Moo)c}hv&b4#LYl|mphtM ztc@ww_PQJCKfbs}0ng|^)Asq)FDqTSQjm8L`hWg;(`PgtZsQ|x++9ZTYV|_7|1^Q# z9_#be0YL$5zbEvSI_+TmKUvRzem~tz-zW4=&jJar_xE(r`!!yD#avS znZ8Cv@kQaQoO5qT@J|4=$~q;!1-@^6ixTiEsA&>{Qs(r@RmJH|8m7Y zlmGkg&i9el3;IYdJ&h^+m6Qwd?$hR}u^t4_bVC0(U8YSF@bvYs*9hlzLf?z3Lu@>d z^WwQO<2IV#W4-%or!iu79&`sb$bM$)6QTFS*J|Z7Kf(4CK_9_=^>K~eZf5I0p?_7p zvX$odKzcf1C$5i|X*N z2eU)N?tiQx^VBf^7xYi%|Npo2uQ{_Jd7wJ^+xKxfM#dwp@8#Xn`MADd{W-DznH;eg z(QB^v2k5WEbdRGL`W6v5??h7!{oWhs@3DS|W`@Zmtk+5)6W0@Tlzm+4fdA(oZ1{y(m9g)Yoq)}MVEqVI2H=@&Ht zzrumP!Vjyty+Z!unulUJgMcp*Y_vO+_fV|CDCnCXC*>RaSh@-N#T-}RfP0{;Vbs(5 zo76pWgVD~`^R_DK{3%oBvh^~pu~G{^R53LFOL>bTjK*%Z{#?>FDT3$Do%3)}pQ zlR_Dl#?kzjcN-PtI70C=dAT>>_i>+mLwe4QxI*I(eSf};zTXq$GG8ec?rVC8K0ha5 zqL1x}*QkMwg8qM`x@(rwXlC_E#`#2Pv@@KqxiNpG7UkpP^!t(OG4op;%ClrNDg3LZ zjiu=?=Cx>-EEn!CTA=?K-f)23r(S~o(%j(Ss)EDs#h*SnLjRkA|MU16#IH`dkGKNZ zy0xf?w#TP_X-;Ef^RpD!G`q!4o9i=y;^;=7dU=w-5Bb!$RV8$vVf<8E)lQS4Yuipz@RGWz<|e^t1zG*-oQV|AF3s0+TpC+X5n@csrI`|F`oTiCSk7!<<7H-!E7ofR zqmP%aiRjibyd(!0?tSU|OLGw8HK2=~N7vzgIm>R-(R6aZ+%wpHiDFOaHyDle?EABH z71|*_inWi>e`7-Md79q~`faJL6`xRS$w-R$&VKD0|24;jb7Oo@Xp`hkEe}29eCK=a zu%8-U|3}~Q&y)ZA4$lqxb%DRfpNAh`{LkYVK|=aHTM7N2ynS}*jr5Oh^wQzF`d<15 z95%(Kr|H=IzP&>pp)@(jI~sH4{pkiaKZ{IBa?bq?M&BY+Z;SyZ>$E(~er@}3oknVu zX^B+pRX!4$zN`6IjIvyqPxBfr+J1-p6YIwp6JZz4KT!8&p~@iO>Z&ywy+is=6ZWGn zA^rA_AhqrLeWCRInK>=mwCr3aAFyQf#*78&XnJ*3lY-YHI{oz?RF*E1tFUKM99;VC zL>|EsC|;7&t5CsSB8gx0>Jy6!NBso)KlG4BgDMR_B;U<&{=1D^^uix;KTYi2CXn^- z-(ae8ix)Sq-jV_GAExag=ULomGx-j}*nuAq?)Ty>(T!0FS!}&0`fw%OcsAeKs>&6T zR}&4iJaS)ZMD%xxZ|^|*o#)aiu4%)1>@Z$7HE&Gi5{3SrSfBP}2?hYoKTwqxZ*aiX zRZ;QWG$FmnWXV8zi8TMIwm^00I~T4|?4^s;;C#>cw}CpNqC+Cw?^IVM6WX!&m8BTp z+*mfAm8GBE8=iRLRazeGV-#`G2~qCde7_1Fj+D^5SkP{!~>^4$#dr}gp0FJyg) zD7n_c4;Apr(r5DS3wr0@XnPQEM2q7-JMTSKFO8VeA?yc3=iWtsh*^L5AgYVVHAJ9K z-Rx3>!+bi`maKX1*=P6D@@Hc`2p_Hk{=>7Ytw}MhJ&W-Jo0?(YD>gCyJGv44KbOna zd!PD1V1fUyu380oO;#%{Kh^ZSJna>ekzzPnR+p3s`h?MqYcvy_1$xhGEHbUsWwG^N zS^AXU+6G}f5&DZcLpUujxOB|?UoP0#3L6;Pt7ty|_?Y@|0^r&V*CQZgL;*ozJGbQMGJFG_WqZJJuxZ={9>M4 zY^wua2mbAO2fP&fy`iD2ivhc* z`wuBr60z0sK9`*L9QA{U{x=`o-$C2ktW8$eRCt&vCiUN+ta>YnmTyd>DCDodLb(1bS7{L0c*5#dYP9O%6$ z!g2gYs(Tg2dMj)HVs($gyl4L0@}D8^el*wvwlVYFM4V^Y5rmQ4-05Vdi4FmB{_CpxX&Z>KcN%!H!kmneW5vw z(I?*0R;7y*G+O@b(uEO;=lZdrkCeX#`dgc~m9hO}4eWzAn)pnb4r?)m zy}LY@VnYA0xuJ7)Z<63VnI|vdbVKIPNNG1O{g)?=+z0-9`X}FD4?^sJ3Ni-ok8)k(nS$2?ZWt&js27pSK$vMJ$89F zFvqd|{L4Z&?Drg_4_W_#S^lLti@=Wv=S44_G@_v-f${gtP`*Kr;;xrZ{1bfO!m;&$ z(6^h{GkO#I@0k7#ti6$Hw@2+Y_3Zn=v8jhHv+rN0|BNNc2t5Y+pZJZ?|FI-o24V<& zwfk4|-*n^r_tF^^#zDIe?Y~r$QO-N~>-e$|=Owik3v>5mfa6k zK%f3n_J^r79sU4fOQz;NB4D@JXmKuEer`?2mUM!!I{QSO^Pwut6OWTsdgk6bBUhw%p7Kyd}^Pa)r6{1TzR zWX_xg3l~3^c@p}52Yw^;e|mLeioMxl`*-xOT64qvkGB}*2r)j5w*S<*eC)4@;S_Ib z9;i!*ImP5719i6+r*VS)Mm6m5&NT@0e_c*b48$c?`u?uwK=ki4cHTzB?pP%phS2mj z@E1xk$L?FJtBi7`K`3vhiO3@aO!V1!+b<{R`!zWKDV0SNDE6s`qkXY2lmAp#eOYMY zeA)MQnv|twozJlSA=NayxWrg-ioQR)c;Bpwx8Hu7;>GGFMOawa+`mS``13b3|GCv8 z`au7F{l9VkzhUW71P4!G^JC~-P%PA=*nHU4e6Y~4WZqiZ9|Ltua||&%loUfgSXi=m zGe@zqbXY%*$xDaM5q)amzF|}It)&KoaNcUG+8*KIx_JwIf2RrZLbr}cic?LMm~o>S zze)JF6DO`ResB}U7sjtM%|ExXYgT7xxC8wy+LDvM{6f=}r9tZOr0;*Ec&F*|?s5nD zG`a72`@24to(z64cal8B?4*V1k z)LFD=IgXtdAg_z@RHLkRZGdX|a6sprBt&*8jQS|3LrY`~G~K{~i5nk$T*W{QrMW{|chd7ESxF zLIe4_;VQd7C;H8XF-F$kJ2Xl15(j>b*zcbe3-<$LzpoqmnaSS>wtP{`_TPMzpH$|{ z=nHE;d25$(D*ZmNqE$JS@oSJK%8P6+Y(I!pA5-vSecAd#_;V8{t)cIe{r{OghuQZc zv0i7Db=qlqU~IWUX%OrI0%LRK{GuaFAE(+ zF_Fiq95CeZ^8SPdmfo!WLQ!A#=36xXyhgJBD_Qvibv-dkWdO@xU6mv!-ur0&A`|TU z9Wdr6@~5-(Wu?;jJa1$Cg-<=`1^-s`{ee2%Uz@lC6qEI%-=V&#(0{f$U?uLah%lGt zC-T3GKfKNMFS7rK&Ye5M#Silz`~OMYug3h!|HD6%{-hp)_U}l&{#W?Xk^P^Pw|{>b zn_tyc%{Rz@;w~IhOq&+W`tMX*Pt1WAmKbP%_|z{}b8EkShT>(ghZ|G)AuBJ{^h}PU zK1q>j*nbMsCp&d6kl0hP{W%(O6&k{Y@q+sVxl8tDcAmujl7c(Z-AKQe3Vv-~&cMqQ zD@%=v6EJX~cvJJk>IsNRNbx+}U(MUSdNsue(;Lf`ovEi-3I86PbSGOMhVj_Zx6t&j z3jGnayN{iJlhx&lIiX>5oo*fB|46>rSXT#qe=`3ufUZA09{M}^`LDwAM@P>8JU=Uk z=&RFORsU-KU#&CBeWC>UUJc~+25}YJALlhT#dJE{$NJRwz$2b;Kih`=mE*ctenS6c z@DEA9_gZrx^y4Nlys7zMo*|rL=S3gfPetDEI3D0HX79+jC;gX-`$qgoq~#HNX6r8q z1AV=h3IFFDEPRjLSG>xNW#4P73RHjSP~RflAIco;S5qM$bWMz6`71Oo^EdAm^cRQM z|KPd7zu4ZJd>U82JfET=_93KhlA`WKmo_1W3}4|`Yz{H2_u z{R!`1iZn#S{9jEQ&f7(f>nHY8j_aiDC;PMGc|7%3=kZkNPxAd~jQ$ny*RcOVZ4A|`YH7N zBBH;hM4*D}>%%a1xZht^3jMUj{{Mo0GxT@z#r%g!2%&#k+FBj$kIV1};duX7f%9%U!aveFewt0G*<@VHJta$e)&h4Di4 zj~(?lFYj(rq~U-^^OO3$6(!hnVSkr*I>?9JaK2Y6eI54yMG;xN;GdYJw+@WmM$2=< z{l3yvd&m)IA5pXW&=j)%2L~^ByBd>!c>iBK>>p-i_aOa5-yHeNO@r+Xp4J9WoMV^f zIIjO+Vtsb>2R9FqiKCRk?EFOJc}l%N|KamEE@)^gmE?Th+QsmnN|UfZwBB`dg3RgPF=f@XI=U+K_;si}6^61tH6WDm#3I370B=EP(O3D3! zpzm{eH`(t;kE8F8FaBzGeNFj?0$zmuU$`%z^xyh27XM*=|KG;^@9AaqF9i7==#TlI z_{=l3y&)HH|2LtCt*^V9cW9QBaIQ3cS94VrWQ1%zZ>w6ZmW&bRPkYs}Qe{*qUgvQpgta89f~vsn z!wkU4dJFjkav9nBT(r|LgBC`R9zxf5-LzGS>fR)(Z58zC^@YgFw$UIA2Y0Sl=OU z!}(mPr~Q#Syg#?LQv6ch@c!IEF_FJJDKi-VMAp+Oda&Qu_j@9r<4nSSj{85%e*qKy z1DFFa`V;*vgTws{k>|S{Q8Ios5b+!mYxb7V@@MJ5Ul4K5_3youw<=<|`0LnPmn-ii z#b3ug3dk4U;Koqg8`C7e)Scc#apm>(U;Y&4KUhGXpZ=TJ{~KBmC2^Skmv>|RXZz<@ zg}5)lL)%C8>%;f)Y`zk#(_4}q(|_*R*iSLJZ#mj@>Q0J@eoab7JCm0X{h7bp53~Fv z{c_Akboj`8CHFVA7cF`LHz}fq-oidLl1}z_+u>YaM_k{0^=FF7`yITcm|{2NuV}6b zb;LE(yYF$tz7Ks{;D|l)4{mhCeHK?X-w8iiF*vB9=?93tAD%g3IR71t1pR|ze+%>f z)sJ8gIwuAFI==HCiFgato;s(N%{`n z@)X77zHDREU)X(lAnwb5t}#2%%Psa&>P8jKPu2%}-)-k9CiEK`c*_CzDD<0tWaELP z8>VA8T^}F4F~{T;#=gB2lk|@ccc(hyf!7Pn3_seWh`)FobQ>98y^1D9*TCUsipl$b zs7ZAg59RWj(|i^`IGo?N0P?J$1wrl;W_&RDG(dj7(BHdiLy83uNRgY5qFmP&Y=3@fxRg{}? zoVwoML71;ygZ3#D6Z%^Y53&9aME{rNhO+ra^zC2OrL%N$KC^FMz}6=>&@+R-!01cf zf2CuHeUH$S|1pzcLhsYJJPGUF=yZ+!q*IPRBhnoe5U$+M$wR`nsboBgJ`2zl2%7yAG zDA)PExs}#Bx)Jeq;+|ps+l>2t9LL#yLFV&)_X+->$@*)k>G+hsPx@c%JDBB&$8>iv z`B^^n_flI`6KFc2Pl0&wD8=MHVT!7QeV?Rzc7?J1mtf1imFzr1=(+#w;M4SdvR+@U zuVnXiJ&JP0)X$E*Pt&2zt(ay0;X@?T=W;}H=?gBHqCjQ*ehlYz&^NDsm%V8ujHFkzFm*@ zL0r$|^)1>a`5>?Aq^%OH+1G z9EkU&RxG#I-zVii?eIR4&q&P!H8dUCI&wpaAP?+~G0JCj;B(jCA5PCc$M^+;L*E}_ z{2VE7kdLpV`3csmQm0p8MBo{{bl6_KNH+T-f9LQRj7fb* z@t(7X)A2pj_m*zn>E!VDfDN$lvs_a*jNsw+P5aPq^+`iUZ5qEj zu;s&em~$X`uBR(+y&eXY;(3|i0jhTdkA$V>qF#P`7~?vFxFO+`y0-`}_Tc#uH8;qk+9Uu3JVMG{oB<& zq%2(XDbBQA8KCW{MA%7XltoN&1;RRRbhx%A7-6K@F_452RCbrJ{#c_40v4{h*Fa3d zcMJI=)oyAYY$q)rIF=tO|s}Qa!Nfm{{mbgt3T?iHWB5c`9!9s*xELqOh z!*zMvAhB)Aq6)-z8X!uH_YPv7s;{u&SGXX!24ZUxsG#pqq3SqZl;?W{lM zH72XITJ4H?&mv|b!shWj%(UQ^>>q9aSNwyIPfIv|cd^Bi;drevyVOf}1`n-&KlVnZcpHqDuLFYn6)_e$HQ=I zjOMfUPuCqMZo8Sc=0iI}&F7l(#nVeB}SA{l56D z!?qb(&1El>+gfO2E!)^DRIkRWe`cK#8sa*qH11KhLx%+rK z6N}G)+wGKrfexDPzTRVX8T7aX47cm)`YehsYMM1Lp7nex!rsfvyGm0fk z_8un0w?f?iKchcwFS=p)@x}k7KR)Y$S=)8DCYvFKrQh?Z_tvd_=J5w8Cj0vbAJk&q z9eLklePFD3Y&qj^Jl3zi!OhfvfMX3MM#z~*-oL0>4gTK|KYRmzuh8`&-W)c8=HG?( zBdYH5RXb_>p{D#lnE$lBBVQNX{OM{&+MfzBHMxeQ-y>#rTSOv;+n|=KyejPHP^(Zl z^7rGR_Nr6~=|pXd%r;scQJZkgf3Pr#V7A`Bl$V6_f`MUjZ4x{~cz-F}0CXiKrE{_R zOFm&gdE(kM=AY62JCjD*Kfd@zw-#xQy)mBq+9kC9#I2>#Sd~U`k?G6Ak|WWKAC7Je zRCn`NoM`&I#vK|Salt4iZU^D@g5jMoo8b9Zd};d3oC@vW;D<>RD^1}4`3~0q%2K!u zRBcSFy=1=bCLY%cQ>ILz^mLrt0`cd)SQHTZ$ zi(HO>qc|`E?Faq89B#ire`40@*#2g?b=r`c#I8w+*@kUVvOT~Ckj1$Tu=im3iEz$lX?SG@@aLxW^sLft?lk9^BWez_= z&i@$u;?ItGC=LpqL)2O?5Vt18?3R9yxGA%qx#JFsLoVcNl&UhukF~*Vol@C}GDp5g z=m++Kt=B&FB;Dpq(_xkbtY`VZEPNPPIbKMInzVB47>ZL%fip>+N6JT-AVtUN6DQt! z2R1{)Y9k!?&uIVu*WT3!MRi^Ar$~w)tD6bCn`!;nj!DM&73*M1Vlxn?Rb$lXW?ol; zE*m#>h#L@#k{}y)jZ{!6S_h0;lx-R+t}arhkTe<8NoS-}rkLt1OF{~a(TIx*j%7gD z<@I;oU-22|W=broS$NBgj;n~EgSMiTvJ+%B&7{>JJt}tt#!fuL+ z#&db)Hp3D7lnS#;upA~+881iLi{b;V1N?kc=I_lDUYN_*PugFM#`k!Af^8{2t->~m zmED$@$>(|b8MqOA*47cI_ygSL>d0+oZ1`XNEV;FA`ReX{{D0i?M$&Np@tKVOLGUMv z>iGrh7ib%o&q0JiXys2~!k~FM&2P{i_C9^Ve43%y$@#CN5tJ+pW&2;_HQo`7b1RZLI#q zyqlKRwvM2yP=(1hMMXs^U&rWgoBp5nTYnI3eggbs{gb52rP?r-T)(5B%5A{NLgn3%3EiSxNIDNwuX~H~#nwo0DeFJkI6+mzG7Y({FZh z`EU1UI)wTd59{B@7#{-`07kFJ{{PY8RxhI!xA~czpB8){hm1zt;}rhN{LR^qY&$)Q zf8i5fIx7e4vZb~CU%}U%bu-#(7J&au$5`+`PMQ>6Ah+R)_bLvr*}(R{HDkhm-%!0{DPX>3{sBYF`a|;{SsvRN9S>M$&l52MqbcoI z=;RIFf57@U%9fZ6tejwBedXnc87)?BEynV~=Lhk3C^pu}%D4M}wi=7SjfNgcD>^hng4&6gMH3_E!@yu;V|F-)}j3;AwAZg zby&Z%Fd-OCVPx}m?B(aT`nqll+}wFNg$=?@oYN%#jr&v>I)Y7_j8gW#Or(WQ?bFa$ zUrYvrX~shEFMt2H#)SW@Hj@7vkbmqkE&sH>*=)(s(JS+p+&Hg<=HfeH^pupLrS2R? zliTL??QRW!-Ilk{Px7*Ia=V*4SXIO5zbD_syCWTprgCY>oyKT#%bPZI@$8=va0WZU ztUGy4mH_hRL>V#vYckp-sc9vp)lz!%@az5k_4OLJB@b}Q=3k5K4=>A{O|bW#qTm0T z^``{m5A{YWqvxZ)LP$*`L;W{DQ>fv;$uc`s&S`RE6ND?^Md<<2dwoN1Y3Zs^Mo_vb zmz&REy~lJ}V&4yp@DsW=avMAI%*#Jl`yW?17V}^GK0AmgJ|1zEWuTKv(l;w^O?ugl z%2V*PeZ~9HA#}8eKkabbYOx72cn>>rGZJyGc#VpZMCy^Th#_vmZ&y zZ61AonSP!7%%Kv^5>}Uf|DRUI!z?5sx{i;`H;0Aryaj7CH*2pg0KM5F)0c3~o=4X< zQNNbVq}+_nB|~CCxdH#lKi_=+e;3P?j{4W;NUX+HSHvuw|A;lx>F$yCB#+gQjqM8JBYIOSRa&jeB!$Y(Ehy+sm!l;ZQ8VK8EgL) zpz&(W3ZzDd8i5}JNsVr^<-1vZ$_BPRE6WZ=@trj3?z!!LG82A#`{t1`NZ*CVkfuMxOrBqO?U{Budj zCLo(dRy)cbF#fDRp8bmaCFx@Jmzc0>ds9-p9&wP-q~_YWC&1_XV?a0Y)>t`BXbR&! z;;A`HV3vSo?qSU`Tk{$JquU3%R*F}6hrj<2=so-DI30`jduwc*Cbi1@?~CHJ+3xT~ zng53~i%zKhx+j8T9_=_A7AoV`CJi_R==~OR$}RAn3JOkN4GQL}BqGYq|jK>yy{vUE{`XNOZI) z#(j?ZHKc9EX;+x2ODKi63>-!zsl=((7OaK!!rK0JCmW{f>@^N)Fw`|IQ}xz}Mpipt zBYVC(xwp5skJX>*+OyJ!<1C|f+g?sdOHWTfSX~(T0yw!ettctpZ_g`9Dal%+)mA=s zY;wx2hzcTcxzvxO-Qqy*DS&LsNmT**^1bNj)!TD25ybY@{o2m>v(?#iy8HNTH?A_n z5%X!@iKkPPBn^_ZMo!B5(i%lu@)LN&RYG0H`deRD;*4*Pw=()}`D#b;iK4z4a}fmXcsFgT~Atc@gcphagkAK0tGDT#ga+-RhG`Sf5zNO&-7C&l gMB2{9LVDKWvjdM8h8x}C!U?sdfQ+_p9=YrM2ah^=4FCWD literal 0 HcmV?d00001 diff --git a/addons/explosives/ExplosivesUI.hpp b/addons/explosives/ExplosivesUI.hpp index c6c76e573c..769b3dc167 100644 --- a/addons/explosives/ExplosivesUI.hpp +++ b/addons/explosives/ExplosivesUI.hpp @@ -4,16 +4,49 @@ #define GUI_GRID_H (0.04) #define ST_CENTER 0x02 +#define X_OFFSET 0.25 class RscText; class RscButton; - -#define X_OFFSET 0.25 - class RscXSliderH; class IGUIBack; +class RscPicture; +class RscEdit; -class Rsc_ACE_Timer_Slider:RscXSliderH{ +class Rsc_ACE_CallScreen_Edit:RscEdit { + canModify = 1; + colorBackground[] = {0,0,0,1}; + colorText[] = {0,0,0,1}; + colorDisabled[] = {1,1,1,0.25}; + colorSelection[] = { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + text = ""; + style = "0x00 + 0x40 + 0x200"; + shadow = 1; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; +}; +class Rsc_ACE_HiddenButton:RscButton { + colorText[] = {0, 0, 0, 0}; + colorDisabled[] = {0, 0, 0, 0}; + colorBackground[] = {0, 0, 0, 0}; + colorBackgroundDisabled[] = {0, 0, 0, 0}; + colorBackgroundActive[] = {0, 0, 0, 0}; + colorFocused[] = {0, 0, 0, 0}; + colorShadow[] = {0, 0, 0, 0}; + colorBorder[] = {0, 0, 0, 0}; + w = 0.095589; + h = 0.039216; + shadow = 0; +}; + +class Rsc_ACE_Timer_Slider:RscXSliderH { x = 0.4; y = 0.2; w = 0.3; @@ -21,8 +54,7 @@ class Rsc_ACE_Timer_Slider:RscXSliderH{ colorBackground[] = {0,0,0,0.5}; }; -class RscACE_SelectTimeUI -{ +class RscACE_SelectTimeUI { idd = 8854; movingEnable = 0; class controls { @@ -72,3 +104,185 @@ class RscACE_SelectTimeUI }; }; }; + +class Rsc_ACE_NumKeyButton: Rsc_ACE_HiddenButton{}; +class Rsc_ACE_PhoneInterface { + idd = 8855; + movingEnable = 1; + onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1); + class controls { + class RscPicture_1200: RscPicture { + idc = 1200; + text = PATHTOF(Data\UI\Cellphone_Background.paa); + x = 0.231875 * safezoneW + safezoneX; + y = 0.104 * safezoneH + safezoneY; + w = 0.195937 * safezoneW; + h = 0.704 * safezoneH; + }; + class numkey_1: Rsc_ACE_NumKeyButton { + idc = 1600; + x = 0.278281 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "1"; + action = "ctrlSetText [1400,((ctrlText 1400) + '1')];"; + }; + class numkey_2: Rsc_ACE_NumKeyButton { + idc = 1601; + x = 0.314375 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "2"; + action = "ctrlSetText [1400,((ctrlText 1400) + '2')];"; + }; + class numkey_3: Rsc_ACE_NumKeyButton { + idc = 1602; + x = 0.350469 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "3"; + action = "ctrlSetText [1400,((ctrlText 1400) + '3')];"; + }; + class numkey_4: Rsc_ACE_NumKeyButton { + idc = 1603; + x = 0.278281 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "4"; + action = "ctrlSetText [1400,((ctrlText 1400) + '4')];"; + }; + class numkey_5: Rsc_ACE_NumKeyButton { + idc = 1604; + x = 0.314375 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "5"; + action = "ctrlSetText [1400,((ctrlText 1400) + '5')];"; + }; + class numkey_6: Rsc_ACE_NumKeyButton { + idc = 1605; + x = 0.350469 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "6"; + action = "ctrlSetText [1400,((ctrlText 1400) + '6')];"; + }; + class numkey_7: Rsc_ACE_NumKeyButton { + idc = 1606; + x = 0.278281 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "7"; + action = "ctrlSetText [1400,((ctrlText 1400) + '7')];"; + }; + class numkey_8: Rsc_ACE_NumKeyButton { + idc = 1607; + x = 0.314375 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "8"; + action = "ctrlSetText [1400,((ctrlText 1400) + '8')];"; + }; + class numkey_9: Rsc_ACE_NumKeyButton { + idc = 1608; + x = 0.350469 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "9"; + action = "ctrlSetText [1400,((ctrlText 1400) + '9')];"; + }; + class numkey_0: Rsc_ACE_NumKeyButton { + idc = 1609; + x = 0.314375 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "0"; + action = "ctrlSetText [1400,((ctrlText 1400) + '0')];"; + }; + class speedDialAdd: Rsc_ACE_NumKeyButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial"; + action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial);); + }; + class clear: Rsc_ACE_HiddenButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Clear"; + action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];); + }; + class dial: Rsc_ACE_HiddenButton { + idc = 1611; + x = 0.309219 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.04125 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Dial"; + action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone);); + }; + class up: Rsc_ACE_HiddenButton { + idc = 1612; + x = 0.360781 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Up"; + action = QUOTE([true] call FUNC(setSpeedDial)); + }; + class down: Rsc_ACE_HiddenButton { + idc = 1613; + x = 0.345312 * safezoneW + safezoneX; + y = 0.485 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Down"; + action = QUOTE([false] call FUNC(setSpeedDial)); + }; + class speedDial_Text: RscText { + idc = 1405; + y = 0.302 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "Name"; + }; + class speedDial_edit: Rsc_ACE_CallScreen_Edit { + idc = 1401; + y = 0.302 * safezoneH + safezoneY; + x = 0.318 * safezoneW + safezoneX; + w = 0.1; + }; + class numberEdit_Text: RscText { + idc = 1406; + y = 0.348 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "#"; + }; + class number_edit: Rsc_ACE_CallScreen_Edit { + canModify = 0; + idc = 1400; + y = 0.348 * safezoneH + safezoneY; + x = 0.3 * safezoneW + safezoneX; + }; + }; +}; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 2ede878a37..e3b40308c3 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -18,6 +18,7 @@ if !(hasInterface) exitWith {}; GVAR(PlacedCount) = 0; GVAR(Setup) = objNull; GVAR(pfeh_running) = false; +GVAR(CurrentSpeedDial) = 0; [{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler); player addEventHandler ["Killed", { diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 801ded6615..d8f8dc1216 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -17,11 +17,14 @@ ADDON = false; +PREP(addCellphoneIED); PREP(addClacker); +PREP(addToSpeedDial); PREP(canDefuse); PREP(canDetonate); PREP(defuseExplosive); PREP(detonateExplosive); +PREP(dialPhone); PREP(handleScrollWheel); @@ -30,6 +33,7 @@ PREP(hasPlacedExplosives); PREP(getDetonators); PREP(getPlacedExplosives); +PREP(getSpeedDialExplosive); PREP(openDetonateUI); PREP(openPlaceUI); @@ -41,10 +45,12 @@ PREP(place_Approve); PREP(place_Cancel); PREP(placeExplosive); +PREP(removeFromSpeedDial); PREP(selectTrigger); PREP(setupExplosive); PREP(setPosition); +PREP(setSpeedDial); PREP(startDefuse); PREP(startTimer); PREP(triggerType); diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf new file mode 100644 index 0000000000..0678f56f6b --- /dev/null +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -0,0 +1,47 @@ +/* + * Author: Garth 'L-H' de Wet + * Adds an IED to the cellphone list + * + * Arguments: + * 0: Unit + * 1: Explosive + * 2: Magazine classname + * 3: Extra variables + * + * Return Value: + * None + * + * Example: + * Handled by PlaceExplosive. + * + * Public: No + */ +#include "script_component.hpp" +EXPLODE_4_PVT(_this,_unit,_explosive,_magazineClass,_extra); +// Config is the last item in the list of passed in items. +_config = (_this select 3) select (count (_this select 3) - 1); + +_requiredItems = getArray(_config >> "requires"); +_hasRequired = true; +_detonators = [_unit] call FUNC(getDetonators); +{ + if !(_x in _detonators) exitWith{ + _hasRequired = false; + }; +} count _requiredItems; +private ["_code", "_count"]; +_code = str(round (random 9999)); +_count = 4 - count (toArray _code); +while {_count > 0} do { + _code = "0" + _code; + _count = _count - 1; +}; +if (isNil QGVAR(CellphoneIEDs)) then { + GVAR(CellphoneIEDs) = []; +}; +_count = GVAR(CellphoneIEDs) pushBack [_explosive,_code]; +_count = _count + 1; +publicVariable QGVAR(CellphoneIEDs); +_unit sideChat format ["IED %1 code: %2", _count,_code]; +if !(_hasRequired) exitWith {}; +[format ["IED %1", _count],_code] call FUNC(addToSpeedDial); diff --git a/addons/explosives/functions/fnc_addToSpeedDial.sqf b/addons/explosives/functions/fnc_addToSpeedDial.sqf new file mode 100644 index 0000000000..142996e4c3 --- /dev/null +++ b/addons/explosives/functions/fnc_addToSpeedDial.sqf @@ -0,0 +1,37 @@ +/* + * Author: Garth 'L-H' de Wet + * Sets the speed dial for the UI. + * + * Arguments: + * 0: Name of speed dial + * 1: Code to add to speed dial + * + * Return Value: + * None + * + * Example: + * ["My Speed Dial","2131"] call ACE_explosives_fnc_addToSpeedDial; + * + * Public: Yes + */ +#include "script_component.hpp" +private ["_speedDial", "_found"]; +_speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; +_found = false; + +EXPLODE_2_PVT(_this,_name,_code); + +if ((_code) == "") ExitWith { + [_name] call FUNC(removeFromSpeedDial); +}; +{ + if ((_x select 0) == _name) exitWith { + _speedDial set [_foreachindex, _this]; + _found = true; + }; +} foreach _speedDial; +if (!_found) then { + _speedDial pushBack _this; +}; + +ace_player setVariable [QGVAR(SpeedDial), _speedDial]; diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf new file mode 100644 index 0000000000..3bb2cc45e8 --- /dev/null +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -0,0 +1,68 @@ +/* + * Author: Garth 'L-H' de Wet + * Dials the number passed and detonates the explosive. + * + * Arguments: + * 0: Unit to do dialing + * 1: Code to dial + * + * Return Value: + * None + * + * Example: + * [ace_player,"2131"] call ACE_explosives_fnc_dialPhone; + * + * Public: Yes + */ +#include "script_component.hpp" +private ["_arr", "_ran", "_i","_speedDial"]; +EXPLODE_2_PVT(_this,_unit,_code); +if (_unit getVariable [QGVAR(Dialing),false]) exitWith {}; +if !(alive _unit) exitWith {}; +_unit setVariable [QGVAR(Dialing), true, true]; + +_ran = (ceil(random 8)) + 1; +_arr = []; +for [{_i=0}, {_i<_ran}, {_i=_i+1}] do { + _arr = _arr + ['.','..','...','']; +}; +if (_unit == ace_player) then { + ctrlSetText [1400,"Calling"]; + [{ + EXPLODE_4_PVT(_this select 0,_unit,_i,_arr,_code); + if ((_i mod 4) == 0) then { + playSound3D [QUOTE(PATHTOF_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; + }; + ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]]; + if (_i >= (count _arr + 2)) then { + [_this select 1] call CALLSTACK(cba_fnc_removePerFrameHandler); + private "_explosive"; + _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); + if (!isNull (_explosive)) then { + [_unit, -1, [_explosive, 1]] call FUNC(detonateExplosive); + }; + _unit setVariable [QGVAR(Dialing), false, true]; + if (_unit == ace_player) then { + ctrlSetText [1400,"Call Ended!"]; + }; + }; + if (_i == (count _arr)) then { + private "_explosive"; + _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); + if (!isNull (_explosive)) then { + playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL _explosive,3.16228,1,75]; + }; + }; + (_this select 0) set [1, _i + 1]; + }, 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); +} else { + private ["_explosive"]; + _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); + if (!isNull (_explosive)) then { + [{ + playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL (_this select 1),3.16228,1,75]; + (_this select 0) setVariable [QGVAR(Dialing), false, true]; + }, [_unit,_explosive], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); + [_explosive,0.25 * (count _arr - 1)] call FUNC(startTimer); + }; +}; diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf new file mode 100644 index 0000000000..f5b3172c46 --- /dev/null +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -0,0 +1,28 @@ +/* + * Author: Garth 'L-H' de Wet + * Gets the explosive object or objNull from the speed dial entry. + * + * Arguments: + * 0: Unit + * 1: Speed dial entry + * + * Return Value: + * Associated explosive (or ObjNull) + * + * Example: + * [ace_player, "2113"] call ace_explosives_fnc_getSpeedDialExplosive; + * + * Public: Yes + */ +#include "script_component.hpp" +EXPLODE_2_PVT(_this,_unit,_code); +private ["_explosive"]; +if (isNil QGVAR(CellphoneIEDs)) exitWith {objNull}; +_explosive = objNull; +{ + if ((_x select 1) == _code) exitWith { + _explosive = _x select 0; + }; + false +} count GVAR(CellphoneIEDs); +_explosive diff --git a/addons/explosives/functions/fnc_removeFromSpeedDial.sqf b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf new file mode 100644 index 0000000000..c0a467e6f1 --- /dev/null +++ b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf @@ -0,0 +1,26 @@ +/* + * Author: Garth 'L-H' de Wet + * Removes the specified speed dial from unit's speed dial. + * + * Arguments: + * 0: Speed dial name + * + * Return Value: + * None + * + * Example: + * ["IED 1"] call ACE_explosives_fnc_removeFromSpeedDial; + * + * Public: Yes + */ +#include "script_component.hpp" +private "_speedDial"; +_speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; +if (count _speedDial == 0) exitWith {}; +{ + if ((_x select 0) == (_this select 0)) exitWith { + _speedDial set [_foreachIndex, "x"]; + _speedDial = _speedDial - ["x"]; + ace_player setVariable [QGVAR(SpeedDial),_speedDial]; + }; +} foreach _speedDial; diff --git a/addons/explosives/functions/fnc_setSpeedDial.sqf b/addons/explosives/functions/fnc_setSpeedDial.sqf new file mode 100644 index 0000000000..20a32a1224 --- /dev/null +++ b/addons/explosives/functions/fnc_setSpeedDial.sqf @@ -0,0 +1,28 @@ +/* + * Author: Garth 'L-H' de Wet + * Sets the speed dial for the UI. + * + * Arguments: + * 0: Whether to increase or decrease speed dial index + * + * Return Value: + * None + * + * Example: + * [true] call ACE_explosives_fnc_setSpeedDial; // increase + * [false] call ACE_explosives_fnc_setSpeedDial; // decrease + * + * Public: No + */ + #include "script_component.hpp" +private ["_speedDial", "_amount"]; +_speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; +if (count _speedDial == 0) exitWith {}; +_amount = if((_this select 0))then{1}else{-1}; + +GVAR(CurrentSpeedDial) = GVAR(CurrentSpeedDial) + _amount; +GVAR(CurrentSpeedDial) = if(GVAR(CurrentSpeedDial) < 0)then{(count _speedDial)-1}else{GVAR(CurrentSpeedDial)}; +GVAR(CurrentSpeedDial) = if(GVAR(CurrentSpeedDial) >= (count _speedDial))then{0}else{GVAR(CurrentSpeedDial)}; + +ctrlSetText [1400,(_speedDial select GVAR(CurrentSpeedDial)) select 1]; +ctrlSetText [1401,(_speedDial select GVAR(CurrentSpeedDial)) select 0]; From 4d38e19f8cd7327c16c69c372e953a3e0419833a Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 4 Feb 2015 02:19:56 +0200 Subject: [PATCH 08/47] Should avoid potential conflicts of IED codes. --- .../explosives/functions/fnc_addCellphoneIED.sqf | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index 0678f56f6b..b13473cf25 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -29,12 +29,16 @@ _detonators = [_unit] call FUNC(getDetonators); _hasRequired = false; }; } count _requiredItems; -private ["_code", "_count"]; -_code = str(round (random 9999)); -_count = 4 - count (toArray _code); -while {_count > 0} do { - _code = "0" + _code; - _count = _count - 1; +private ["_code", "_count", "_codeSet"]; +_codeSet = false; +while {!_codeSet} do { + _code = str(round (random 9999)); + _count = 4 - count (toArray _code); + while {_count > 0} do { + _code = "0" + _code; + _count = _count - 1; + }; + _codeSet = (isNull [objNull,_code] call FUNC(getSpeedDialExplosive)); }; if (isNil QGVAR(CellphoneIEDs)) then { GVAR(CellphoneIEDs) = []; From 8a348b002407f3973d93c155b0fd3656ef77275d Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 Feb 2015 10:26:52 +0100 Subject: [PATCH 09/47] aircraft, remove old/redundant mag configs --- addons/aircraft/CfgMagazines.hpp | 193 +------------------------------ 1 file changed, 3 insertions(+), 190 deletions(-) diff --git a/addons/aircraft/CfgMagazines.hpp b/addons/aircraft/CfgMagazines.hpp index 7328eda091..0c306f8f04 100644 --- a/addons/aircraft/CfgMagazines.hpp +++ b/addons/aircraft/CfgMagazines.hpp @@ -1,202 +1,15 @@ class CfgMagazines { + // shoot helper object to tripple rof class VehicleMagazine; - class 24Rnd_PG_missiles; - - class 12Rnd_PG_missiles: 24Rnd_PG_missiles { - count = 12; - displayName = "$STR_A3_CfgMagazines_12Rnd_PG_missiles0"; - displayNameShort = "$STR_A3_CfgMagazines_12Rnd_PG_missiles_dns"; - descriptionShort = "$STR_A3_CfgMagazines_12Rnd_PG_missiles1"; - }; - class 12Rnd_missiles: VehicleMagazine { - scope = 2; - count = 12; - ammo = "M_AT"; - displayName = "$STR_A3_CfgMagazines_24Rnd_PuG_missiles0"; - displayNameShort = "$STR_A3_CfgMagazines_24Rnd_PuG_missiles_dns"; - descriptionShort = "$STR_A3_CfgMagazines_24Rnd_PuG_missiles0"; - initSpeed = 44; - maxLeadSpeed = 800; - nameSound = "rockets"; - sound[] = {"A3\sounds_f\weapons\rockets\explosion_missile_01",1,1,1200}; - reloadSound[] = {"",0.000316228,1}; - }; - - //minigun magazines, muzzle velocities and tracercounts - class 200Rnd_65x39_Belt: VehicleMagazine {}; - class 2000Rnd_65x39_Belt: 200Rnd_65x39_Belt {}; - class 2000Rnd_65x39_Belt_Tracer_Red: 2000Rnd_65x39_Belt { - }; - class 2000Rnd_65x39_Belt_Green: 2000Rnd_65x39_Belt {}; - class 2000Rnd_65x39_Belt_Tracer_Green: 2000Rnd_65x39_Belt_Green { - tracersEvery = 1; - }; - class 2000Rnd_65x39_Belt_Yellow: 2000Rnd_65x39_Belt { - tracersEvery = 1; - }; - class 2000Rnd_65x39_Belt_Tracer_Yellow: 2000Rnd_65x39_Belt_Yellow { - tracersEvery = 1; - }; - - class 5000Rnd_762x51_Belt: 2000Rnd_65x39_Belt { - tracersEvery = 1; - count = 5000; - }; - class 5000Rnd_762x51_Yellow_Belt: 5000Rnd_762x51_Belt {}; - class 4000Rnd_762x51_M134 : 5000Rnd_762x51_Belt { - count = 4000; - tracersEvery = 1; - }; - class 2000Rnd_762x51_M134 : 4000Rnd_762x51_M134 { - count = 2000; - tracersEvery = 1; - }; - - class 2Rnd_AAA_missiles: VehicleMagazine { - scope = 2; - displayName = "$STR_A3_CfgMagazines_2Rnd_AAA_missiles0"; - displayNameShort = "$STR_A3_CfgMagazines_2Rnd_AAA_missiles_dns"; - ammo = "M_Air_AA"; - count = 2; - maxLeadSpeed = 950; - nameSound = "missiles"; - }; - class 2Rnd_AAA_missiles_MI02: 2Rnd_AAA_missiles { - ammo = "M_Air_AA_MI02"; - }; - class 4Rnd_AAA_missiles: 2Rnd_AAA_missiles { - displayName = "$STR_A3_CfgMagazines_4Rnd_AAA_missiles0"; - displayNameShort = "$STR_A3_CfgMagazines_4Rnd_AAA_missiles_dns"; - count = 4; - }; - class 4Rnd_AAA_missiles_MI02: 4Rnd_AAA_missiles { - ammo = "M_Air_AA_MI02"; - }; - - class 4Rnd_GAA_missiles: VehicleMagazine { - scope = 2; - displayName = "$STR_A3_CfgMagazines_4Rnd_GAA_missiles0"; - displayNameShort = "$STR_A3_CfgMagazines_4Rnd_GAA_missiles_dns"; - count = 4; - ammo = "M_Zephyr"; - maxLeadSpeed = 950; - nameSound = "missiles"; - }; - - class 300Rnd_20mm_shells: VehicleMagazine { - scope = 2; - displayName = "$STR_A3_CfgMagazines_300Rnd_20mm_shells0"; - displayNameShort = "$STR_A3_CfgMagazines_300Rnd_20mm_shells_dns"; - ammo = "B_20mm"; - count = 300; - deflecting = 3; - maxLeadSpeed = 300; - tracersEvery = 5; - nameSound = "cannon"; - }; - class 1000Rnd_Gatling_30mm_Plane_CAS_01_F: VehicleMagazine { - scope = 2; - displayNameShort = ""; ammo = "ACE_Gatling_30mm_HE_Plane_CAS_01_Deploy"; count = 1170; - //count = 390; - //initSpeed = 3852; - maxLeadSpeed = 300; - nameSound = "cannon"; - tracersEvery = 1; - }; - - class 2Rnd_Missile_AA_04_F: VehicleMagazine { - scope = 2; - displayNameShort = "$STR_A3_CFGMAGAZINES_4RND_AAA_MISSILES_DNS"; - ammo = "Missile_AA_04_F"; - count = 2; - maxLeadSpeed = 220; - nameSound = "missiles"; - }; - class 6Rnd_Missile_AGM_02_F: VehicleMagazine { - scope = 2; - displayNameShort = "$STR_A3_CFGMAGAZINES_38RND_80MM_ROCKETS_DNS"; - ammo = "Missile_AGM_02_F"; - count = 6; - maxLeadSpeed = 450; - nameSound = "missiles"; - }; - class 2Rnd_Missile_AGM_02_F: VehicleMagazine { - scope = 2; - displayNameShort = "$STR_A3_CFGMAGAZINES_38RND_80MM_ROCKETS_DNS"; - ammo = "Missile_AGM_02_F"; - count = 2; - maxLeadSpeed = 450; - nameSound = "missiles"; - }; - - class 7Rnd_Rocket_04_HE_F: VehicleMagazine { - scope = 2; - displayNameShort = "$STR_A3_CFGMAGAZINES_40RND_20MM_G_BELT_DNS"; - ammo = "Rocket_04_HE_F"; - count = 7; - maxLeadSpeed = 200; - nameSound = "rockets"; - }; - class 7Rnd_Rocket_04_AP_F: 7Rnd_Rocket_04_HE_F { - displayNameShort = "$STR_A3_CFGMAGAZINES_TITAN_AP_DNS"; - ammo = "Rocket_04_AP_F"; - }; - - class 4Rnd_Bomb_04_F: VehicleMagazine { - scope = 2; - displayNameShort = "$STR_A3_CFGVEHICLES_BOMB0"; - ammo = "Bomb_04_F"; - count = 4; - maxLeadSpeed = 1000; - nameSound = "cannon"; - }; - - class 500Rnd_Cannon_30mm_Plane_CAS_02_F: 1000Rnd_Gatling_30mm_Plane_CAS_01_F { - displayNameShort = ""; - ammo = "Cannon_30mm_HE_Plane_CAS_02_F"; - count = 500; - }; - - class 2Rnd_Missile_AA_03_F: 2Rnd_Missile_AA_04_F { - displayNameShort = "$STR_A3_CFGMAGAZINES_4RND_AAA_MISSILES_DNS"; - ammo = "Missile_AA_03_F"; - count = 2; - }; - class 4Rnd_Missile_AGM_01_F: 6Rnd_Missile_AGM_02_F { - displayNameShort = "$STR_A3_CFGMAGAZINES_38RND_80MM_ROCKETS_DNS"; - ammo = "Missile_AGM_01_F"; - count = 4; - }; - - class 20Rnd_Rocket_03_HE_F: 7Rnd_Rocket_04_HE_F { - displayNameShort = "$STR_A3_CFGMAGAZINES_40RND_20MM_G_BELT_DNS"; - ammo = "Rocket_03_HE_F"; - count = 20; - }; - class 20Rnd_Rocket_03_AP_F: 7Rnd_Rocket_04_AP_F { - displayNameShort = "$STR_A3_CFGMAGAZINES_TITAN_AP_DNS"; - ammo = "Rocket_03_AP_F"; - count = 20; - }; - - class 2Rnd_Bomb_03_F: 4Rnd_Bomb_04_F { - displayNameShort = "$STR_A3_CFGVEHICLES_BOMB0"; - ammo = "Bomb_03_F"; - count = 2; }; + // an extended magazine for the comanche + class 300Rnd_20mm_shells; class ACE_500Rnd_20mm_shells_Comanche: 300Rnd_20mm_shells { - displayName = "20mm"; - displayNameShort = "20mm"; - ammo = "B_20mm"; count = 500; - deflecting = 3; - initSpeed = 1030; - maxLeadSpeed = 300; - tracersEvery = 5; }; }; From f358d099e62c96bddf7cc3346d62740c0c099b14 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 Feb 2015 10:58:10 +0100 Subject: [PATCH 10/47] aircraft config cleanup --- addons/aircraft/CfgVehicles.hpp | 114 +++++++++++--------------------- 1 file changed, 38 insertions(+), 76 deletions(-) diff --git a/addons/aircraft/CfgVehicles.hpp b/addons/aircraft/CfgVehicles.hpp index bea27c85ff..5f419506c0 100644 --- a/addons/aircraft/CfgVehicles.hpp +++ b/addons/aircraft/CfgVehicles.hpp @@ -8,12 +8,9 @@ class CfgVehicles { class NewTurret { class Turrets; }; - class CargoTurret; }; - class Air: AllVehicles { - class AnimationSources; - }; + class Air: AllVehicles {}; class Helicopter: Air { class Turrets { @@ -33,6 +30,7 @@ class CfgVehicles { class Turrets: Turrets { class CopilotTurret; }; + class AnimationSources; }; class Helicopter_Base_H: Helicopter_Base_F { @@ -46,7 +44,7 @@ class CfgVehicles { lockDetectionSystem = 0; incomingMissileDetectionSystem = 16; driverCanEject = 1; - //class MFD {}; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; @@ -60,11 +58,6 @@ class CfgVehicles { class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { /*class Turrets: Turrets { class CopilotTurret: CopilotTurret {}; - - class CargoTurret_01: CargoTurret {}; - class CargoTurret_02: CargoTurret_01 {}; - class CargoTurret_03: CargoTurret_02 {}; - class CargoTurret_04: CargoTurret_01 {}; };*/ }; @@ -72,7 +65,7 @@ class CfgVehicles { lockDetectionSystem = 0; incomingMissileDetectionSystem = 16; driverCanEject = 1; - //class MFD {}; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; @@ -86,7 +79,8 @@ class CfgVehicles { driverCanEject = 1; lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - magazines[] = {"2000Rnd_762x51_Belt_T_Green", "12Rnd_PG_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; + magazines[] = {"2000Rnd_762x51_Belt_T_Green","12Rnd_PG_missiles","168Rnd_CMFlare_Chaff_Magazine"}; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; @@ -105,36 +99,7 @@ class CfgVehicles { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; - //class MFD {}; - class AnimationSources: AnimationSources { - class HitGlass1 { - source = "Hit"; - hitpoint = "HitGlass1"; - raw = 1; - }; - class HitGlass2: HitGlass1 { - hitpoint = "HitGlass2"; - }; - class HitGlass3: HitGlass1 { - hitpoint = "HitGlass3"; - }; - class HitGlass4: HitGlass1 { - hitpoint = "HitGlass4"; - }; - class Gatling { - source = "revolving"; - weapon = "ACE_gatling_20mm_Comanche"; - }; - class Hide { - source = "user"; - animPeriod = 0; - initPhase = 0; - }; - class Muzzle_flash { - source = "ammorandom"; - weapon = "ACE_gatling_20mm_Comanche"; - }; - }; + class Turrets: Turrets { class MainTurret: MainTurret { canEject = 1; @@ -143,6 +108,15 @@ class CfgVehicles { magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; }; }; + + class AnimationSources: AnimationSources { + class Gatling { + weapon = "ACE_gatling_20mm_Comanche"; + }; + class Muzzle_flash { + weapon = "ACE_gatling_20mm_Comanche"; + }; + }; }; class B_Heli_Attack_01_F: Heli_Attack_01_base_F {}; @@ -151,6 +125,7 @@ class CfgVehicles { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; + class Turrets: Turrets { class MainTurret: MainTurret { canEject = 1; @@ -162,6 +137,7 @@ class CfgVehicles { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; @@ -176,6 +152,7 @@ class CfgVehicles { canEject = 1; }; }; + /*class UserActions { class DoorL1_Open { available = 1; @@ -197,16 +174,14 @@ class CfgVehicles { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; - //class MFD {}; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; showHMD = 1; }; - - class CargoTurret_01: CargoTurret {}; - class CargoTurret_02: CargoTurret_01 {}; }; + /*class UserActions: UserActions { class DoorL1_Open { available = 1; @@ -248,9 +223,9 @@ class CfgVehicles { lockDetectionSystem = 0; incomingMissileDetectionSystem = 16; driverCanEject = 1; - //class MFD {}; weapons[] = {"M134_minigun","missiles_DAR","CMFlareLauncher"}; magazines[] = {"5000Rnd_762x51_Yellow_Belt","24Rnd_missiles","168Rnd_CMFlare_Chaff_Magazine"}; + class Turrets: Turrets { class MainTurret: MainTurret { canEject = 1; @@ -270,36 +245,37 @@ class CfgVehicles { class I_Heli_light_03_F: I_Heli_light_03_base_F { class Turrets: Turrets { class MainTurret: MainTurret {}; - - class CargoTurret_01: CargoTurret {}; - class CargoTurret_02: CargoTurret_01 {}; }; }; - class I_Heli_light_03_unarmed_base_F: I_Heli_light_03_base_F { - //class MFD {}; - }; + class I_Heli_light_03_unarmed_base_F: I_Heli_light_03_base_F {}; + class I_Heli_light_03_unarmed_F: I_Heli_light_03_unarmed_base_F {}; class Plane_CAS_01_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - //class MFD {}; + class Turrets; + #include }; class Plane_CAS_02_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; + class Turrets; + #include }; class Plane_Fighter_03_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; + class Turrets; + #include }; @@ -310,34 +286,34 @@ class CfgVehicles { }; class UAV_02_base_F: UAV { + weapons[] = {}; + magazines[] = {}; + class Turrets { class MainTurret; }; - weapons[] = {}; - magazines[] = {}; }; class UAV_02_CAS_base_F: UAV_02_base_F { + weapons[] = {}; + magazines[] = {}; + /*class Turrets: Turrets { class MainTurret: MainTurret {}; };*/ - weapons[] = {}; - magazines[] = {}; }; class B_Heli_Transport_03_base_F: Helicopter_Base_H { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; }; //class MainTurret: MainTurret {}; class RightDoorGun: MainTurret {}; - - class CargoTurret_01: CargoTurret {}; - class CargoTurret_02: CargoTurret_01 {}; }; }; @@ -348,9 +324,6 @@ class CfgVehicles { }; //class MainTurret: MainTurret {}; //class RightDoorGun: MainTurret {}; - - //class CargoTurret_01: CargoTurret {}; - //class CargoTurret_02: CargoTurret_01 {}; }; }; @@ -358,6 +331,7 @@ class CfgVehicles { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; + class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; @@ -376,15 +350,6 @@ class CfgVehicles { class LoadmasterTurret: LoadmasterTurret { canEject = 1; }; - - class CargoTurret_01: CargoTurret {}; - class CargoTurret_02: CargoTurret_01 {}; - class CargoTurret_03: CargoTurret_01 {}; - class CargoTurret_04: CargoTurret_01 {}; - class CargoTurret_05: CargoTurret_01 {}; - class CargoTurret_06: CargoTurret_05 {}; - class CargoTurret_07: CargoTurret_05 {}; - class CargoTurret_08: CargoTurret_05 {}; }; }; @@ -396,9 +361,6 @@ class CfgVehicles { class LoadmasterTurret: LoadmasterTurret { canEject = 1; }; - - class CargoTurret_01: CargoTurret {}; - class CargoTurret_02: CargoTurret_01 {}; }; }; }; From 075556c233bf32a893830582571dec35178a66c6 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 Feb 2015 11:36:54 +0100 Subject: [PATCH 11/47] author aircraft --- addons/aircraft/config.cpp | 2 +- addons/aircraft/config/config.cpp | 13 ------------- addons/aircraft/config/script_component.hpp | 1 - 3 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 addons/aircraft/config/config.cpp delete mode 100644 addons/aircraft/config/script_component.hpp diff --git a/addons/aircraft/config.cpp b/addons/aircraft/config.cpp index 93e4eb8efe..86135c4bc9 100644 --- a/addons/aircraft/config.cpp +++ b/addons/aircraft/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; - author[] = {"KoffeinFlummi","Crusty"}; + author[] = {"KoffeinFlummi","Crusty","commy2"}; authorUrl = "https://github.com/KoffeinFlummi/"; VERSION_CONFIG; }; diff --git a/addons/aircraft/config/config.cpp b/addons/aircraft/config/config.cpp deleted file mode 100644 index 7ac4cf3bad..0000000000 --- a/addons/aircraft/config/config.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -class CfgPatches { - class DOUBLES(ADDON,heli1) { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {QUOTE(ADDON)}; - author[] = {"commy2"}; - authorUrl = "https://github.com/commy2/"; - VERSION_CONFIG; - }; -}; diff --git a/addons/aircraft/config/script_component.hpp b/addons/aircraft/config/script_component.hpp deleted file mode 100644 index 7368add67c..0000000000 --- a/addons/aircraft/config/script_component.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\aircraft\script_component.hpp" \ No newline at end of file From 57f8595e9ccdc8f1afa05b13cea71b41832bfde5 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 Feb 2015 12:47:33 +0100 Subject: [PATCH 12/47] clean up aircraft weapons config --- addons/aircraft/CfgWeapons.hpp | 192 ++++++-------------------------- addons/aircraft/stringtable.xml | 14 ++- 2 files changed, 49 insertions(+), 157 deletions(-) diff --git a/addons/aircraft/CfgWeapons.hpp b/addons/aircraft/CfgWeapons.hpp index 321df4a3af..c5f22fc3a2 100644 --- a/addons/aircraft/CfgWeapons.hpp +++ b/addons/aircraft/CfgWeapons.hpp @@ -4,15 +4,10 @@ class Mode_Burst; class Mode_FullAuto; class CfgWeapons { - class MGunCore; - class MGun: MGunCore {}; - - class LMG_RCWS: MGun {}; - // Manual Switching Of Flare Mode class SmokeLauncher; class CMFlareLauncher: SmokeLauncher { - modes[] = {"Single", "Burst", "AIBurst"}; + modes[] = {"Single","Burst","AIBurst"}; class Single: Mode_SemiAuto { reloadTime = 0.1; }; @@ -21,13 +16,15 @@ class CfgWeapons { }; }; + // bigger mag for comanche class CannonCore; class gatling_20mm: CannonCore { - magazines[] = {"2000Rnd_20mm_shells","1000Rnd_20mm_shells","300Rnd_20mm_shells","ACE_500Rnd_20mm_shells_Comanche"}; + magazines[] += {"ACE_500Rnd_20mm_shells_Comanche"}; + // buff gatling rof class manual: CannonCore { - reloadTime = 0.023; - dispersion = 0.006; + reloadTime = 0.023; //0.04; + dispersion = 0.006; //0.0022; }; class close: manual {}; class short: close {}; @@ -36,21 +33,14 @@ class CfgWeapons { }; class ACE_gatling_20mm_Comanche: gatling_20mm { - displayName = "XM301"; - class close: close { - reloadTime = 0.04; - dispersion = 0.0022; - }; - class far: far { - reloadTime = 0.04; - dispersion = 0.0022; - }; + displayName = "$STR_ACE_Aircraft_gatling_20mm_Name"; + class manual: manual { reloadTime = 0.04; dispersion = 0.0022; - displayName = "XM301"; + displayName = "$STR_ACE_Aircraft_gatling_20mm_Name"; }; - class medium: medium { + class close: close { reloadTime = 0.04; dispersion = 0.0022; }; @@ -58,38 +48,53 @@ class CfgWeapons { reloadTime = 0.04; dispersion = 0.0022; }; + class medium: medium { + reloadTime = 0.04; + dispersion = 0.0022; + }; + class far: far { + reloadTime = 0.04; + dispersion = 0.0022; + }; }; + // buff gatling rof + class MGunCore; + class MGun: MGunCore {}; + + class LMG_RCWS: MGun {}; + class LMG_Minigun: LMG_RCWS { - magazines[] = {"1000Rnd_65x39_Belt","1000Rnd_65x39_Belt_Green","1000Rnd_65x39_Belt_Tracer_Green","1000Rnd_65x39_Belt_Tracer_Red","1000Rnd_65x39_Belt_Tracer_Yellow","1000Rnd_65x39_Belt_Yellow","2000Rnd_65x39_Belt","2000Rnd_65x39_Belt_Green","2000Rnd_65x39_Belt_Tracer_Green","2000Rnd_65x39_Belt_Tracer_Green_Splash","2000Rnd_65x39_Belt_Tracer_Red","2000Rnd_65x39_Belt_Tracer_Yellow","2000Rnd_65x39_Belt_Tracer_Yellow_Splash","2000Rnd_65x39_Belt_Yellow","2000Rnd_762x51_Belt_T_Green","2000Rnd_762x51_Belt_T_Red","2000Rnd_762x51_Belt_T_Yellow","200Rnd_65x39_Belt","200Rnd_65x39_Belt_Tracer_Green","200Rnd_65x39_Belt_Tracer_Red","200Rnd_65x39_Belt_Tracer_Yellow","5000Rnd_762x51_Belt","5000Rnd_762x51_Yellow_Belt"}; class manual: MGun { - reloadTime = 0.015; - dispersion = 0.006; + reloadTime = 0.075; //0.015; + dispersion = 0.00093; //0.006; }; class close: manual {}; class short: close {}; class medium: close {}; class far: close {}; }; + class LMG_Minigun_heli: LMG_Minigun { showAimCursorInternal = 0; class manual: manual { - reloadTime = 0.015; - dispersion = 0.006; + reloadTime = 0.015; //0.033; Note: This is a way to fast ROF (requires over 60 FPS) @todo + dispersion = 0.006; //0.0087; }; class close: manual {}; class short: close {}; class medium: close {}; class far: close {}; }; + class M134_minigun: MGunCore { class LowROF: Mode_FullAuto { - reloadTime = 0.015; - dispersion = 0.006; + reloadTime = 0.015; //0.03; same as above @todo + dispersion = 0.006; //0.0023; }; class HighROF: LowROF { - reloadTime = 0.015; - dispersion = 0.006; + reloadTime = 0.015; //0.03; + dispersion = 0.006; //0.0023; }; class close: HighROF {}; class short: close {}; @@ -100,19 +105,10 @@ class CfgWeapons { class Gatling_30mm_Plane_CAS_01_F: CannonCore { autoFire = 1; burst = 1; - reloadTime = 0.0154; class LowROF: Mode_FullAuto { autoFire = 0; - //burst = 65; - burst = 22; - //reloadTime = 0.0154; - reloadTime = 0.0462; - //sound[] = {"A3\Sounds_F_epc\weapons\cas_02_cannon",1.77828,1,3800}; - sound[] = {"A3\Sounds_F_EPC\Weapons\gau_03_burst",2.51189,1,4500,{25704,32159}}; - weaponSoundEffect = "DefaultRifle"; - dispersion = 0.005; - soundContinuous = 1; - textureType = "burst"; + burst = 22; //65; + reloadTime = 0.0462; //0.0154; //0.034; multiplier = 3; }; class close: LowROF {}; @@ -121,120 +117,4 @@ class CfgWeapons { class medium: close {}; class far: close {}; }; - - class RocketPods; - class Missile_AA_04_Plane_CAS_01_F: RocketPods { - holdsterAnimValue = 2; - aiRateOfFire = 5; - aiRateOfFireDistance = 500; - autoFire = 0; - cursor = "EmptyCursor"; - cursorAim = "missile"; - nameSound = "MissileLauncher"; - textureType = "fullAuto"; - weaponLockDelay = 3; - minRange = 300; - minRangeProbab = 0.25; - midRange = 2500; - midRangeProbab = 0.9; - maxRange = 9000; - maxRangeProbab = 0.01; - }; - - class MissileLauncher; - class Missile_AGM_02_Plane_CAS_01_F: MissileLauncher { - holdsterAnimValue = 3; - magazineReloadTime = 30; - reloadTime = 0.001; - textureType = "semi"; - weaponLockDelay = 3; - weaponSoundEffect = "DefaultRifle"; - }; - - class Rocket_04_HE_Plane_CAS_01_F: RocketPods { - holdsterAnimValue = 4; - canLock = 1; - modes[] = {"Far_AI","Medium_AI","Close_AI","Burst"}; - weaponLockDelay = 0; - class Far_AI: RocketPods { - canLock = 1; - weaponLockDelay = 0; - showToPlayer = 0; - minRange = 800; - minRangeProbab = 0.31; - midRange = 2500; - midRangeProbab = 0.71; - maxRange = 3200; - maxRangeProbab = 0.1; - burst = 1; - reloadTime = 0.001; - autoFire = 0; - aiRateOfFire = 5; - aiRateOfFireDistance = 500; - }; - class Medium_AI: Far_AI {}; - class Close_AI: Far_AI {}; - class Burst: RocketPods { - burst = 1; - reloadTime = 0.002; - minRange = 300; - minRangeProbab = 0.25; - midRange = 400; - midRangeProbab = 0.7; - maxRange = 1300; - maxRangeProbab = 0.1; - aiRateOfFire = 5; - aiRateOfFireDistance = 500; - autoFire = 0; - soundContinuous = 0; - textureType = "fullAuto"; - weaponSoundEffect = "DefaultRifle"; - }; - }; - - class Rocket_04_AP_Plane_CAS_01_F: Rocket_04_HE_Plane_CAS_01_F { - holdsterAnimValue = 5; - }; - - class Bomb_04_Plane_CAS_01_F: RocketPods { - holdsterAnimValue = 6; - aiRateOfFire = 5; - aiRateOfFireDistance = 500; - missileLockCone = 180; - nameSound = ""; - textureType = "fullAuto"; - weaponLockDelay = 1; - }; - - class Cannon_30mm_Plane_CAS_02_F: CannonCore { - scope = 1; - holdsterAnimValue = 1; - ballisticsComputer = 2; - canLock = 1; - modes[] = {"LowROF","close","near","short","medium","far"}; - nameSound = "cannon"; - shotFromTurret = 0; - muzzlePos = "Cannon_muzzleflash"; - muzzleEnd = "Cannon_barrel_end"; - selectionFireAnim = "Cannon_muzzleflash"; - autoFire = 1; - burst = 5; - reloadTime = 0.04; - class GunParticles { - class Effect { - effectName = "MachineGun2"; - positionName = "Cannon_barrel_start"; - directionName = "Cannon_barrel_end"; - }; - }; - class LowROF: Mode_FullAuto { - dispersion = 0.0055; - reloadTime = 0.04; - }; - class close: LowROF {}; - class near: close {}; - class short: close {}; - class medium: close {}; - class far: close {}; - }; }; diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index da013cac5e..4d1c49fff6 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -14,6 +14,18 @@ Rajada Raffica + + XM301 + XM301 + XM301 + XM301 + XM301 + XM301 + XM301 + XM301 + XM301 + XM301 + Open Cargo Door Laderampe öffnen @@ -35,4 +47,4 @@ Закрыть грузовой отсек - \ No newline at end of file + From 0ae41609c2db42373540a40319bdebaa0fca202d Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 Feb 2015 20:20:03 +0100 Subject: [PATCH 13/47] no fcs for ais --- addons/fcs/functions/fnc_firedEH.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index 38e2c90f3c..237b68fc87 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -25,7 +25,8 @@ private ["_gunner", "_turret"]; _gunner = [_vehicle, _weapon] call EFUNC(common,getGunner); _turret = [_gunner] call EFUNC(common,getTurretIndex); -//if (ACE_player != _gunner) exitWith {}; // global +// Exit if the unit isn't a player +if !([_unit] call EFUNC(common,isPlayer)) exitWith {}; private ["_FCSMagazines", "_FCSElevation", "_offset"]; From 13c21275744977da578b973f0a2c393b6cc85f69 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 14 Feb 2015 20:29:07 +0100 Subject: [PATCH 14/47] Clean up of old CSE code Removed all _F suffixes Reorganized the RPEP list. Removed unnecessary functions. --- addons/common/CfgEventHandlers.hpp | 2 +- addons/common/XEH_preInit.sqf | 131 ++++++++---------- .../functions/fnc_broadcastSound3D_f.sqf | 16 --- .../functions/fnc_closeAllDialogs_f.sqf | 14 -- ...{fnc_disableAI_f.sqf => fnc_disableAI.sqf} | 0 addons/common/functions/fnc_dropWeapon_f.sqf | 39 ------ addons/common/functions/fnc_findItem.sqf | 25 ---- addons/common/functions/fnc_findMagazine.sqf | 21 --- .../common/functions/fnc_getCanInteract.sqf | 12 -- .../functions/fnc_getCustomResults_f.sqf | 45 ------ .../common/functions/fnc_getWeaponItems_f.sqf | 14 -- .../{fnc_inWater_f.sqf => fnc_inWater.sqf} | 0 addons/common/functions/fnc_isHC.sqf | 24 ---- ..._isModLoaded_f.sqf => fnc_isModLoaded.sqf} | 0 ...nc_loadPerson_f.sqf => fnc_loadPerson.sqf} | 6 +- ...sonLocal_f.sqf => fnc_loadPersonLocal.sqf} | 6 +- .../common/functions/fnc_moveToTempGroup.sqf | 6 +- ...efaults_f.sqf => fnc_resetAllDefaults.sqf} | 10 +- .../common/functions/fnc_revealObject_f.sqf | 15 -- ..._sendRequest_f.sqf => fnc_sendRequest.sqf} | 0 .../fnc_setDisableUserInputStatus.sqf | 10 +- ...{fnc_setVolume_f.sqf => fnc_setVolume.sqf} | 0 ...upSide_f.sqf => fnc_switchToGroupSide.sqf} | 6 +- ...nloadPerson_f.sqf => fnc_unloadPerson.sqf} | 8 +- addons/medical/XEH_postInit.sqf | 4 +- addons/medical/XEH_preInit.sqf | 4 +- .../medical/functions/fnc_actionCarryUnit.sqf | 2 +- .../medical/functions/fnc_actionDragUnit.sqf | 2 +- .../medical/functions/fnc_actionLoadUnit.sqf | 2 +- .../functions/fnc_actionPlaceInBodyBag.sqf | 2 +- .../functions/fnc_actionUnloadUnit.sqf | 2 +- ...OfBody_f.sqf => fnc_cleanUpCopyOfBody.sqf} | 6 +- .../functions/fnc_getBloodVolumeChange.sqf | 2 +- .../functions/fnc_getUnconsciousCondition.sqf | 6 +- .../medical/functions/fnc_handleDropUnit.sqf | 2 +- ...c_handleTreatment_Action_fullHealLocal.sqf | 2 +- .../functions/fnc_handleUnitVitals.sqf | 2 +- ...opyOfBody_f.sqf => fnc_makeCopyOfBody.sqf} | 0 .../functions/fnc_moduleBasicRevive.sqf | 8 +- addons/medical/functions/fnc_onKilled.sqf | 4 +- .../functions/fnc_onStartMovingUnit.sqf | 2 +- .../fnc_registerUnconsciousCondition.sqf | 6 +- addons/medical/functions/fnc_setDead.sqf | 16 +-- .../functions/fnc_setUnconsciousState.sqf | 14 +- 44 files changed, 129 insertions(+), 369 deletions(-) delete mode 100644 addons/common/functions/fnc_broadcastSound3D_f.sqf delete mode 100644 addons/common/functions/fnc_closeAllDialogs_f.sqf rename addons/common/functions/{fnc_disableAI_f.sqf => fnc_disableAI.sqf} (100%) delete mode 100644 addons/common/functions/fnc_dropWeapon_f.sqf delete mode 100644 addons/common/functions/fnc_findItem.sqf delete mode 100644 addons/common/functions/fnc_findMagazine.sqf delete mode 100644 addons/common/functions/fnc_getCanInteract.sqf delete mode 100644 addons/common/functions/fnc_getCustomResults_f.sqf delete mode 100644 addons/common/functions/fnc_getWeaponItems_f.sqf rename addons/common/functions/{fnc_inWater_f.sqf => fnc_inWater.sqf} (100%) delete mode 100644 addons/common/functions/fnc_isHC.sqf rename addons/common/functions/{fnc_isModLoaded_f.sqf => fnc_isModLoaded.sqf} (100%) rename addons/common/functions/{fnc_loadPerson_f.sqf => fnc_loadPerson.sqf} (86%) rename addons/common/functions/{fnc_loadPersonLocal_f.sqf => fnc_loadPersonLocal.sqf} (83%) rename addons/common/functions/{fnc_resetAllDefaults_f.sqf => fnc_resetAllDefaults.sqf} (74%) delete mode 100644 addons/common/functions/fnc_revealObject_f.sqf rename addons/common/functions/{fnc_sendRequest_f.sqf => fnc_sendRequest.sqf} (100%) rename addons/common/functions/{fnc_setVolume_f.sqf => fnc_setVolume.sqf} (100%) rename addons/common/functions/{fnc_switchToGroupSide_f.sqf => fnc_switchToGroupSide.sqf} (92%) rename addons/common/functions/{fnc_unloadPerson_f.sqf => fnc_unloadPerson.sqf} (89%) rename addons/medical/functions/{fnc_cleanUpCopyOfBody_f.sqf => fnc_cleanUpCopyOfBody.sqf} (76%) rename addons/medical/functions/{fnc_makeCopyOfBody_f.sqf => fnc_makeCopyOfBody.sqf} (100%) diff --git a/addons/common/CfgEventHandlers.hpp b/addons/common/CfgEventHandlers.hpp index b9c5d7e4ce..522df03d4f 100644 --- a/addons/common/CfgEventHandlers.hpp +++ b/addons/common/CfgEventHandlers.hpp @@ -38,7 +38,7 @@ class Extended_Respawn_EventHandlers { respawn = QUOTE(_this call FUNC(setName)); }; class GVAR(RESETDefaults) { - respawn = QUOTE(_this call FUNC(resetAllDefaults_F)); + respawn = QUOTE(_this call FUNC(resetAllDefaults)); }; }; }; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 64a06a0f8c..7a70ae7bb3 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -15,12 +15,16 @@ PREP(addSetting); PREP(adminKick); PREP(ambientBrightness); PREP(applyForceWalkStatus); +PREP(beingCarried); PREP(binarizeNumber); PREP(callCustomEventHandlers); PREP(callCustomEventHandlersGlobal); PREP(canGetInPosition); +PREP(canInteract); PREP(canInteractWith); PREP(canUseWeapon); +PREP(carriedByObj); +PREP(carryObj); PREP(changeProjectileDirection); PREP(checkPBOs); PREP(claim); @@ -30,6 +34,10 @@ PREP(codeToString); PREP(convertKeyCode); PREP(createOrthonormalReference); PREP(currentChannel); +PREP(debug); +PREP(debugModule); +PREP(defineVariable); +PREP(disableAI); PREP(disableUserInput); PREP(displayText); PREP(displayTextPicture); @@ -42,12 +50,21 @@ PREP(execRemoteFnc); PREP(executePersistent); PREP(filter); PREP(fixLoweredRifleAnimation); +PREP(getAllDefinedSetVariables); PREP(getAllGear); PREP(getCaptivityStatus); +PREP(getCarriedBy); +PREP(getCarriedObj); PREP(getConfigCommander); PREP(getConfigGunner); +PREP(getDeathAnim); PREP(getDefaultAnim); +PREP(getDefinedVariable); +PREP(getDefinedVariableDefault); +PREP(getDefinedVariableInfo); PREP(getDoorTurrets); +PREP(getFirstObjectIntersection); +PREP(getFirstTerrainIntersection); PREP(getForceWalkStatus); PREP(getGunner); PREP(getHitPoints); @@ -56,6 +73,7 @@ PREP(getInPosition); PREP(getMarkerType); PREP(getName); PREP(getNumberFromMissionSQM); +PREP(getNumberMagazinesIn); PREP(getPitchBankYaw); PREP(getSettingData); PREP(getStringFromMissionSQM); @@ -74,29 +92,44 @@ PREP(getUavControlPosition); PREP(getVehicleCargo); PREP(getVehicleCodriver); PREP(getVehicleCrew); +PREP(getVersion); PREP(getWeaponAzimuthAndInclination); PREP(getWeaponIndex); PREP(getWeaponType); PREP(getWindDirection); PREP(goKneeling); PREP(hadamardProduct); +PREP(hasItem); +PREP(hasMagazine); +PREP(inheritsFrom); +PREP(insertionSort); PREP(interpolateFromArray); PREP(inTransitionAnim); +PREP(inWater); +PREP(isArrested); PREP(isAutoWind); +PREP(isAwake); PREP(isEngineer); PREP(isEOD); +PREP(isHC); PREP(isInBuilding); +PREP(isModLoaded); PREP(isPlayer); PREP(isTurnedOut); PREP(letterToCode); +PREP(limitMovementSpeed); +PREP(loadPerson); +PREP(loadPersonLocal); PREP(loadSettingsFromProfile); PREP(loadSettingsOnServer); PREP(map); PREP(moduleCheckPBOs); PREP(moduleLSDVehicles); +PREP(moveToTempGroup); PREP(muteUnit); PREP(numberToDigits); PREP(numberToDigitsString); +PREP(onAnswerRequest); PREP(onLoadRscDisplayChannel); PREP(owned); PREP(player); @@ -104,33 +137,53 @@ PREP(playerSide); PREP(progressBar); PREP(queueAnimation); PREP(readSettingFromModule); +PREP(receiveRequest); PREP(removeActionEventHandler); PREP(removeActionMenuEventHandler); PREP(removeCameraEventHandler); PREP(removeCustomEventHandler); PREP(removeMapMarkerCreatedEventHandler); PREP(removeScrollWheelEventHandler); +PREP(requestCallback); +PREP(resetAllDefaults); PREP(restoreVariablesJIP); PREP(revertKeyCodeLocalized); PREP(sanitizeString); +PREP(sendRequest); PREP(serverLog); +PREP(setArrestState); +PREP(setCanInteract); PREP(setCaptivityStatus); +PREP(setCarriedBy); +PREP(setDefinedVariable); +PREP(setDisableUserInputStatus); PREP(setForceWalkStatus); +PREP(setHearingCapability); PREP(setName); PREP(setParameter); PREP(setPitchBankYaw); -PREP(setVariableJIP); -PREP(setVariablePublic); +PREP(setProne); PREP(setSetting); PREP(setSettingFromConfig); +PREP(setVariableJIP); +PREP(setVariablePublic); +PREP(setVolume); +PREP(sortAlphabeticallyBy); +PREP(stringCompare); PREP(stringToColoredText); +PREP(string_removeWhiteSpace); PREP(subString); +PREP(switchToGroupSide); +PREP(throttledPublicVariable); PREP(toBin); PREP(toBitmask); PREP(toHex); PREP(toNumber); -PREP(throttledPublicVariable); +PREP(uniqueElementsOnly); +PREP(unloadPerson); PREP(unmuteUnit); +PREP(useItem); +PREP(useMagazine); PREP(waitAndExecute); // ACE_Debug @@ -195,74 +248,6 @@ if (hasInterface) then { }, 0, []] call cba_fnc_addPerFrameHandler; }; -PREP(stringCompare); -PREP(string_removeWhiteSpace); -PREP(isHC); -PREP(sendRequest_f); -PREP(requestCallback); -PREP(receiveRequest); -PREP(onAnswerRequest); -PREP(debug); -PREP(debugModule); -PREP(defineVariable); -PREP(setDefinedVariable); -PREP(getDefinedVariable); -PREP(getAllDefinedSetVariables); -PREP(getDefinedVariableInfo); -PREP(getDefinedVariableDefault); -PREP(getDeathAnim); -PREP(insertionSort); -PREP(uniqueElementsOnly); -PREP(sortAlphabeticallyBy); -PREP(hasMagazine); -PREP(useMagazine); -PREP(findMagazine); -PREP(hasItem); -PREP(useItem); -PREP(findItem); -PREP(getNumberMagazinesIn); -PREP(setCanInteract); -PREP(getCanInteract); -PREP(canInteract); -PREP(resetAllDefaults_f); -PREP(broadcastSound3D_f); - -PREP(isAwake); -PREP(setProne); - -PREP(setDisableUserInputStatus); - -PREP(dropWeapon_f); -PREP(inWater_f); -PREP(setVolume_f); -PREP(closeAllDialogs_f); -PREP(disableAI_f); -PREP(switchToGroupSide_f); -PREP(getFirstObjectIntersection); -PREP(getFirstTerrainIntersection); -PREP(setHearingCapability); -PREP(revealObject_f); -PREP(getWeaponItems_f); -PREP(isModLoaded_f); -PREP(inheritsFrom); -PREP(getVersion); -PREP(carryObj); -PREP(carriedByObj); -PREP(getCarriedObj); -PREP(getCarriedBy); -PREP(beingCarried); -PREP(setCarriedBy); - - -PREP(moveToTempGroup); - - -PREP(limitMovementSpeed); -PREP(setArrestState); -PREP(isArrested); -PREP(loadPerson_F); -PREP(loadPersonLocal_F); -PREP(unloadPerson_F); - - ADDON = true; + +isHC = !(hasInterface || isDedicated); diff --git a/addons/common/functions/fnc_broadcastSound3D_f.sqf b/addons/common/functions/fnc_broadcastSound3D_f.sqf deleted file mode 100644 index 93f95bb431..0000000000 --- a/addons/common/functions/fnc_broadcastSound3D_f.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/** - * fn_broadcastSound3D_f.sqf - * @Descr: Plays a sound in 3D - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, sound STRING] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -if (isDedicated) exitwith{}; -_unit = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; -_sound = [_this, 1, "",[""]] call BIS_fnc_Param; -_unit say3D _sound; \ No newline at end of file diff --git a/addons/common/functions/fnc_closeAllDialogs_f.sqf b/addons/common/functions/fnc_closeAllDialogs_f.sqf deleted file mode 100644 index b5ce1bc280..0000000000 --- a/addons/common/functions/fnc_closeAllDialogs_f.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/** - * fn_closeAllDialogs_f.sqf - * @Descr: Close all dialogs - * @Author: Glowbal - * - * @Arguments: [] - * @Return: void - * @PublicAPI: true - */ -#include "script_component.hpp" - -while {dialog} do { - closeDialog 0; -}; \ No newline at end of file diff --git a/addons/common/functions/fnc_disableAI_f.sqf b/addons/common/functions/fnc_disableAI.sqf similarity index 100% rename from addons/common/functions/fnc_disableAI_f.sqf rename to addons/common/functions/fnc_disableAI.sqf diff --git a/addons/common/functions/fnc_dropWeapon_f.sqf b/addons/common/functions/fnc_dropWeapon_f.sqf deleted file mode 100644 index bf1358b5e7..0000000000 --- a/addons/common/functions/fnc_dropWeapon_f.sqf +++ /dev/null @@ -1,39 +0,0 @@ -/** - * fn_dropWeapon_f.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ -#include "script_component.hpp" -private ["_unit","_currentWeapon","_currentAnimation", "_WeaponHolder"]; -_unit = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; - -_currentWeapon = currentWeapon _unit; -_currentAnimation = animationState _unit; -_WeaponHolder = "GroundWeaponHolder" createVehicle position _unit; - -_unit removeWeapon _currentWeapon; -_weaponHolder addWeaponCargoGlobal [_currentWeapon, 1]; -//_unit action [ "DropWeapon", _WeaponHolder, _currentWeapon ]; -_WeaponHolder setPos (getPos _unit); -//_unit switchMove _currentAnimation; - -_primairyWeapon = primaryWeapon _unit; -_secondairyWeapon = secondaryWeapon _unit; -_handGunWeapon = handgunWeapon _unit; - -switch (_currentWeapon) do { - case _primairyWeapon: { - - }; - case _secondairyWeapon: { - - }; - case _handGunWeapon: { - - }; - default {}; -}; \ No newline at end of file diff --git a/addons/common/functions/fnc_findItem.sqf b/addons/common/functions/fnc_findItem.sqf deleted file mode 100644 index 5c4469ea7f..0000000000 --- a/addons/common/functions/fnc_findItem.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/** - * fn_findItem.sqf - * @Descr: - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: true - */ -#include "script_component.hpp" -private ["_unit","_magazine","_return"]; -_unit = _this select 0; -_item = _this select 1; - -if (_item in (uniformItems _unit)) exitwith {1}; -if (_item in (vestItems _unit)) exitwith {2}; -if (_item in (backpackItems _unit)) exitwith {3}; -if (_item in (assignedItems _unit)) exitwith {4}; -if (_item in (primaryWeaponItems _unit)) exitwith {5}; -if (_item in (secondaryWeaponItems _unit)) exitwith {6}; -if (_item in (handgunItems _unit)) exitwith {7}; -if (_item in (items _unit)) exitwith {8}; // in case it is in items but cannot be found in any other container (should never reach this) - -// If we cannot find the item, return 0. -0; \ No newline at end of file diff --git a/addons/common/functions/fnc_findMagazine.sqf b/addons/common/functions/fnc_findMagazine.sqf deleted file mode 100644 index 549d016e8d..0000000000 --- a/addons/common/functions/fnc_findMagazine.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/** - * fn_findMagazine.sqf - * @Descr: Find where the current magazines are. Order: uniform, vest, backpack, any. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, magazine STRING (Classname of magazine)] - * @Return: NUMBER 0 = none, 1 = in uniform, 2 = in vest, 3 = in backpack, 4 = found outside container - * @PublicAPI: true - */ -#include "script_component.hpp" -private ["_unit","_magazine"]; -_unit = _this select 0; -_magazine = _this select 1; - -if (_magazine in (getMagazineCargo uniformContainer _unit)) exitwith {1}; -if (_magazine in (getMagazineCargo vestContainer _unit)) exitwith {2}; -if (_magazine in (getMagazineCargo backpackContainer _unit)) exitwith {3}; -if (_magazine in (magazines _unit)) exitwith {4}; // in case it cannot be found in any other container. Most likely loaded in a weapon. - -// If we cannot find the item, return 0. -0; \ No newline at end of file diff --git a/addons/common/functions/fnc_getCanInteract.sqf b/addons/common/functions/fnc_getCanInteract.sqf deleted file mode 100644 index 87f572b93d..0000000000 --- a/addons/common/functions/fnc_getCanInteract.sqf +++ /dev/null @@ -1,12 +0,0 @@ -/** - * fn_getCanInteract.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ -#include "script_component.hpp" - -((_this select 0) getvariable [QGVAR(canInteract),0]) \ No newline at end of file diff --git a/addons/common/functions/fnc_getCustomResults_f.sqf b/addons/common/functions/fnc_getCustomResults_f.sqf deleted file mode 100644 index 4b68f85c9c..0000000000 --- a/addons/common/functions/fnc_getCustomResults_f.sqf +++ /dev/null @@ -1,45 +0,0 @@ -/** - * fn_getCustomResults_f.sqf - * @Descr: Executes custom results eventhandlers, collects their output and returns this. - * @Author: Glowbal - * - * @Arguments: [arguments ANY, handle STRING] - * @Return: ARRAY Collection of all return values of all executed CustomResult handlers - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_arguments","_handle","_ehCfg","_eventHandlerCollection","_eventHandlerName","_cfg","_code","_classType", "_return"]; -_arguments = _this select 0; -_handle = _this select 1; - -_eventHandlerName = ("ace_f_custom_results_eventhandler_" + _handle); -_eventHandlerCollection = missionNamespace getvariable _eventHandlerName; -if (isnil "_eventHandlerCollection") then { - _eventHandlerCollection = []; - - // TODO Get a replacement for this - _cfg = (ConfigFile >> "Advanced_Combat_Environment" >> "CustomResults" >> _handle); - if (isClass _cfg) then { - _numberOfEH = count _cfg; - for [{_EHiterator=0}, {(_EHiterator< _numberOfEH)}, {_EHiterator=_EHiterator+1}] do { - _ehCfg = _cfg select _EHiterator; - if (isClass _ehCfg) then { - _classType = (ConfigName _ehCfg); - _code = (compile getText(_ehCfg >> "onCall")); - _eventHandlerCollection pushback [_classType, _code]; - true; - }; - }; - }; - missionNamespace setvariable [_eventHandlerName, _eventHandlerCollection]; -}; - -_return = []; -{ - _return pushback (_arguments call (_x select 1)); - false; -}count _eventHandlerCollection; - -_return diff --git a/addons/common/functions/fnc_getWeaponItems_f.sqf b/addons/common/functions/fnc_getWeaponItems_f.sqf deleted file mode 100644 index d18ce28a72..0000000000 --- a/addons/common/functions/fnc_getWeaponItems_f.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/** - * fn_getWeaponItems_f.sqf - * @Descr: Get the weapon items from the unit. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: - * @PublicAPI: false - */ -#include "script_component.hpp" -private "_unit"; -_unit = _this select 0; - -[primaryWeaponItems _unit, secondaryWeaponItems _unit, handgunItems _unit]; \ No newline at end of file diff --git a/addons/common/functions/fnc_inWater_f.sqf b/addons/common/functions/fnc_inWater.sqf similarity index 100% rename from addons/common/functions/fnc_inWater_f.sqf rename to addons/common/functions/fnc_inWater.sqf diff --git a/addons/common/functions/fnc_isHC.sqf b/addons/common/functions/fnc_isHC.sqf deleted file mode 100644 index 82a9d49ba2..0000000000 --- a/addons/common/functions/fnc_isHC.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/** - * fn_isHC.sqf - * @Descr: Check if current locality is a headless client - * @Author: Glowbal - * - * @Arguments: [] - * @Return: BOOL True if locality is headless client OR is not in multiplayer - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_return"]; - -if (!isMultiplayer) then { - _return = true; -} else { - if (isServer && !isDedicated) then { - _return = true; - } else { - _return = !(hasInterface || isDedicated); - }; -}; -_return \ No newline at end of file diff --git a/addons/common/functions/fnc_isModLoaded_f.sqf b/addons/common/functions/fnc_isModLoaded.sqf similarity index 100% rename from addons/common/functions/fnc_isModLoaded_f.sqf rename to addons/common/functions/fnc_isModLoaded.sqf diff --git a/addons/common/functions/fnc_loadPerson_f.sqf b/addons/common/functions/fnc_loadPerson.sqf similarity index 86% rename from addons/common/functions/fnc_loadPerson_f.sqf rename to addons/common/functions/fnc_loadPerson.sqf index 5944879c62..0d2995db1b 100644 --- a/addons/common/functions/fnc_loadPerson_f.sqf +++ b/addons/common/functions/fnc_loadPerson.sqf @@ -10,7 +10,7 @@ #include "script_component.hpp" -#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson_F)) +#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) private ["_caller", "_unit","_vehicle", "_loadcar", "_loadhelicopter", "_loadtank"]; _caller = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; @@ -34,9 +34,9 @@ if (_unit distance _loadcar <= 10) then { }; }; if (!isNull _vehicle) then { - [_unit, true, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide_f); + [_unit, true, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide); [_caller,objNull] call FUNC(carryObj); [_unit,objNull] call FUNC(carryObj); - [[_unit, _vehicle,_caller], QUOTE(FUNC(loadPersonLocal_F)), _unit, false] call EFUNC(common,execRemoteFnc); + [[_unit, _vehicle,_caller], QUOTE(FUNC(loadPersonLocal)), _unit, false] call EFUNC(common,execRemoteFnc); }; _vehicle \ No newline at end of file diff --git a/addons/common/functions/fnc_loadPersonLocal_f.sqf b/addons/common/functions/fnc_loadPersonLocal.sqf similarity index 83% rename from addons/common/functions/fnc_loadPersonLocal_f.sqf rename to addons/common/functions/fnc_loadPersonLocal.sqf index dbba09111a..6e31050cf9 100644 --- a/addons/common/functions/fnc_loadPersonLocal_f.sqf +++ b/addons/common/functions/fnc_loadPersonLocal.sqf @@ -16,13 +16,13 @@ _vehicle = [_this, 1, ObjNull,[ObjNull]] call BIS_fnc_Param; _caller = [_this, 2, ObjNull,[ObjNull]] call BIS_fnc_Param; if (!alive _unit) then { - _unit = [_unit,_caller] call FUNC(makeCopyOfBody_F); + _unit = [_unit,_caller] call FUNC(makeCopyOfBody); }; _unit moveInCargo _vehicle; -_loaded = _vehicle getvariable [QGVAR(loaded_persons_F),[]]; +_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded pushback _unit; -_vehicle setvariable [QGVAR(loaded_persons_F),_loaded,true]; +_vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; if (!([_unit] call FUNC(isAwake))) then { _handle = [_unit,_vehicle] spawn { private ["_unit","_vehicle"]; diff --git a/addons/common/functions/fnc_moveToTempGroup.sqf b/addons/common/functions/fnc_moveToTempGroup.sqf index b146e67ef3..802bc2285d 100644 --- a/addons/common/functions/fnc_moveToTempGroup.sqf +++ b/addons/common/functions/fnc_moveToTempGroup.sqf @@ -18,12 +18,12 @@ if (_moveTo) then { _previousGroup = group _unit; _newGroup = createGroup (side _previousGroup); [_unit] joinSilent _newGroup; - _unit setvariable [QGVAR(previousGroup_F),_previousGroup]; + _unit setvariable [QGVAR(previousGroup),_previousGroup]; } else { - _previousGroup = _unit getvariable QGVAR(previousGroup_F); + _previousGroup = _unit getvariable QGVAR(previousGroup); if (!isnil "_previousGroup") then { _currentGroup = group _unit; - _unit setvariable [QGVAR(previousGroup_F),nil]; + _unit setvariable [QGVAR(previousGroup),nil]; [_unit] joinSilent _previousGroup; if (count units _currentGroup == 0) then { deleteGroup _currentGroup; diff --git a/addons/common/functions/fnc_resetAllDefaults_f.sqf b/addons/common/functions/fnc_resetAllDefaults.sqf similarity index 74% rename from addons/common/functions/fnc_resetAllDefaults_f.sqf rename to addons/common/functions/fnc_resetAllDefaults.sqf index c415b5b32c..63e6764d01 100644 --- a/addons/common/functions/fnc_resetAllDefaults_f.sqf +++ b/addons/common/functions/fnc_resetAllDefaults.sqf @@ -17,17 +17,17 @@ _unit setvariable ["ACE_isDead",nil,true]; _unit setvariable ["ACE_isUnconscious", nil, true]; if (isPlayer _unit) then { - [true] call FUNC(setVolume_f); - [false] call FUNC(disableKeyInput_f); - if (["ace_medical"] call FUNC(isModLoader_f)) then { + [true] call FUNC(setVolume); + [false] call FUNC(disableKeyInput); + if (["ace_medical"] call FUNC(isModLoader)) then { [false] call EFUNC(medical,effectBlackOut); }; - if !(isnil QGVAR(DISABLE_USER_INPUT_COLLECTION_F)) then { + if !(isnil QGVAR(DISABLE_USER_INPUT_COLLECTION)) then { // clear all disable user input { [_X, false] call FUNC(setDisableUserInputStatus); - }foreach GVAR(DISABLE_USER_INPUT_COLLECTION_F); + }foreach GVAR(DISABLE_USER_INPUT_COLLECTION); }; }; diff --git a/addons/common/functions/fnc_revealObject_f.sqf b/addons/common/functions/fnc_revealObject_f.sqf deleted file mode 100644 index 9c5a34f59a..0000000000 --- a/addons/common/functions/fnc_revealObject_f.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/** - * fnc_revealObject_f.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -if (hasInterface) then { - player reveal (_this select 0); -}; \ No newline at end of file diff --git a/addons/common/functions/fnc_sendRequest_f.sqf b/addons/common/functions/fnc_sendRequest.sqf similarity index 100% rename from addons/common/functions/fnc_sendRequest_f.sqf rename to addons/common/functions/fnc_sendRequest.sqf diff --git a/addons/common/functions/fnc_setDisableUserInputStatus.sqf b/addons/common/functions/fnc_setDisableUserInputStatus.sqf index 2451cbe90f..2cf25b827a 100644 --- a/addons/common/functions/fnc_setDisableUserInputStatus.sqf +++ b/addons/common/functions/fnc_setDisableUserInputStatus.sqf @@ -13,16 +13,16 @@ _id = _this select 0; _disable = _this select 1; -if (isnil QGVAR(DISABLE_USER_INPUT_COLLECTION_F)) then { - GVAR(DISABLE_USER_INPUT_COLLECTION_F) = []; +if (isnil QGVAR(DISABLE_USER_INPUT_COLLECTION)) then { + GVAR(DISABLE_USER_INPUT_COLLECTION) = []; }; if (_disable) then { - GVAR(DISABLE_USER_INPUT_COLLECTION_F) pushback _id; + GVAR(DISABLE_USER_INPUT_COLLECTION) pushback _id; [true] call FUNC(disableUserInput); } else { - GVAR(DISABLE_USER_INPUT_COLLECTION_F) = GVAR(DISABLE_USER_INPUT_COLLECTION_F) - [_id]; - if (GVAR(DISABLE_USER_INPUT_COLLECTION_F) isEqualTo []) then { + GVAR(DISABLE_USER_INPUT_COLLECTION) = GVAR(DISABLE_USER_INPUT_COLLECTION) - [_id]; + if (GVAR(DISABLE_USER_INPUT_COLLECTION) isEqualTo []) then { [false] call FUNC(disableUserInput); }; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_setVolume_f.sqf b/addons/common/functions/fnc_setVolume.sqf similarity index 100% rename from addons/common/functions/fnc_setVolume_f.sqf rename to addons/common/functions/fnc_setVolume.sqf diff --git a/addons/common/functions/fnc_switchToGroupSide_f.sqf b/addons/common/functions/fnc_switchToGroupSide.sqf similarity index 92% rename from addons/common/functions/fnc_switchToGroupSide_f.sqf rename to addons/common/functions/fnc_switchToGroupSide.sqf index 97b043adbe..528d32853c 100644 --- a/addons/common/functions/fnc_switchToGroupSide_f.sqf +++ b/addons/common/functions/fnc_switchToGroupSide.sqf @@ -16,7 +16,7 @@ _switch = [_this, 1, false,[false]] call BIS_fnc_Param; _id = [_this, 2, "", [""]] call BIS_fnc_Param; _side = [_this, 3, side _unit,[west]] call BIS_fnc_Param; -_previousGroupsList = _unit getvariable [QGVAR(previousGroupSwitchTo_F),[]]; +_previousGroupsList = _unit getvariable [QGVAR(previousGroupSwitchTo),[]]; if (_switch) then { // go forward _previousGroup = group _unit; @@ -30,7 +30,7 @@ if (_switch) then { [_unit] joinSilent _newGroup; _previousGroupsList pushback [_previousGroup, _originalSide, _id, true]; - _unit setvariable [QGVAR(previousGroupSwitchTo_F), _previousGroupsList, true]; + _unit setvariable [QGVAR(previousGroupSwitchTo), _previousGroupsList, true]; } else { // go one back { @@ -60,5 +60,5 @@ if (_switch) then { }foreach _previousGroupsList; _previousGroupsList = _previousGroupsList - [objNull]; reverse _previousGroupsList; // we have to reverse again, to ensure the list is in the right order. - _unit setvariable [QGVAR(previousGroupSwitchTo_F), _previousGroupsList, true]; + _unit setvariable [QGVAR(previousGroupSwitchTo), _previousGroupsList, true]; }; diff --git a/addons/common/functions/fnc_unloadPerson_f.sqf b/addons/common/functions/fnc_unloadPerson.sqf similarity index 89% rename from addons/common/functions/fnc_unloadPerson_f.sqf rename to addons/common/functions/fnc_unloadPerson.sqf index 1aaaee84a1..33c0e9c0c2 100644 --- a/addons/common/functions/fnc_unloadPerson_f.sqf +++ b/addons/common/functions/fnc_unloadPerson.sqf @@ -10,7 +10,7 @@ #include "script_component.hpp" -#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson_F)) +#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) private ["_caller", "_unit","_vehicle", "_loaded"]; _caller = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; @@ -27,11 +27,11 @@ if (!alive _unit) then { _unit action ["Eject", vehicle _unit]; }; -[_unit, false, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide_f); +[_unit, false, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide); -_loaded = _vehicle getvariable [QGVAR(loaded_persons_F),[]]; +_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded = _loaded - [_unit]; -_vehicle setvariable [QGVAR(loaded_persons_F),_loaded,true]; +_vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; if (!([_unit] call FUNC(isAwake))) then { _handle = [_unit,_vehicle] spawn { diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 062df32ddf..6f5c1b5978 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -50,8 +50,8 @@ call FUNC(handleDisplayEffects); ["onUnconscious", FUNC(onUnconscious)] call ace_common_fnc_addEventHandler; ["carryObjectDropped", FUNC(onCarryObjectDropped)] call ace_common_fnc_addEventHandler; -if (isNil QGVAR(ENABLE_REVIVE_F)) then { - GVAR(ENABLE_REVIVE_F) = 0; +if (isNil QGVAR(ENABLE_REVIVE)) then { + GVAR(ENABLE_REVIVE) = 0; }; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index 57800cd5b7..144c877aeb 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -141,8 +141,8 @@ PREP(setUnconsciousState); PREP(isUnconscious); PREP(getUnconsciousCondition); PREP(registerUnconsciousCondition); -PREP(cleanUpCopyOfBody_F); -PREP(makeCopyOfBody_F); +PREP(cleanUpCopyOfBody); +PREP(makeCopyOfBody); PREP(canGoUnconsciousState); PREP(setDead); PREP(moduleBasicRevive); diff --git a/addons/medical/functions/fnc_actionCarryUnit.sqf b/addons/medical/functions/fnc_actionCarryUnit.sqf index d3cfb35aee..f717efb403 100644 --- a/addons/medical/functions/fnc_actionCarryUnit.sqf +++ b/addons/medical/functions/fnc_actionCarryUnit.sqf @@ -42,7 +42,7 @@ if (!alive _unit) exitwith { [_caller, false] call FUNC(treatmentMutex); [{ _this call FUNC(actionCarryUnit); - }, [_caller, ([_unit,_caller] call FUNC(makeCopyOfBody_F)), _killOnDrop], 0.25, 0.25] call EFUNC(common,waitAndExecute); + }, [_caller, ([_unit,_caller] call FUNC(makeCopyOfBody)), _killOnDrop], 0.25, 0.25] call EFUNC(common,waitAndExecute); }; if !([_caller,_unit] call EFUNC(common,carryObj)) exitwith { diff --git a/addons/medical/functions/fnc_actionDragUnit.sqf b/addons/medical/functions/fnc_actionDragUnit.sqf index d0fa1c70ea..56f88ead9c 100644 --- a/addons/medical/functions/fnc_actionDragUnit.sqf +++ b/addons/medical/functions/fnc_actionDragUnit.sqf @@ -40,7 +40,7 @@ if (!alive _unit) exitwith { [_caller, false] call FUNC(treatmentMutex); [{ _this call FUNC(actionDragUnit); - }, [_caller, ([_unit,_caller] call FUNC(makeCopyOfBody_F)), _killOnDrop], 0.25, 0.25] call EFUNC(common,waitAndExecute); + }, [_caller, ([_unit,_caller] call FUNC(makeCopyOfBody)), _killOnDrop], 0.25, 0.25] call EFUNC(common,waitAndExecute); }; if (primaryWeapon _caller == "") then { diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index cd20140bdb..afe70746d2 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -22,7 +22,7 @@ if ([_unit] call cse_fnc_isAwake) exitwith { [_caller,objNull] call cse_fnc_carryObj; [_unit,objNull] call cse_fnc_carryObj; -_vehicle = [_caller, _unit] call EFUNC(common,loadPerson_F); +_vehicle = [_caller, _unit] call EFUNC(common,loadPerson); if (!isNull _vehicle) then { if (!isnil QGVAR(DROP_ADDACTION)) then { _caller removeAction GVAR(DROP_ADDACTION); diff --git a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf index 8df95c24d9..fc43fe06d8 100644 --- a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf +++ b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf @@ -36,7 +36,7 @@ _bodyBagCreated setvariable [QEGVAR(common,nameOfBody), _nameOfUnit, true]; // reset the position to ensure it is on the correct one. _bodyBagCreated setPos _onPosition; -[[_bodyBagCreated], QEFUNC(common,revealObject_f), true] call BIS_fnc_MP; +[[_bodyBagCreated], QEFUNC(common,revealObject), true] call BIS_fnc_MP; _bodyBagCreated setvariable [QEGVAR(logistics,enableDrag), true, true]; diff --git a/addons/medical/functions/fnc_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index 6eefb4b138..0b6b6fe9de 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -19,7 +19,7 @@ _drag = [_this, 2, false, [false]] call BIS_fnc_Param; if (vehicle _unit == _unit) exitwith {}; if (([_unit] call cse_fnc_isAwake)) exitwith {}; -if ([_caller, _unit] call EFUNC(common,unloadPerson_F)) then { +if ([_caller, _unit] call EFUNC(common,unloadPerson)) then { if (_drag) then { if ((vehicle _caller) == _caller) then { [[_caller,_unit], QUOTE(FUNC(actionDragUnit)), _caller, false] call BIS_fnc_MP; diff --git a/addons/medical/functions/fnc_cleanUpCopyOfBody_f.sqf b/addons/medical/functions/fnc_cleanUpCopyOfBody.sqf similarity index 76% rename from addons/medical/functions/fnc_cleanUpCopyOfBody_f.sqf rename to addons/medical/functions/fnc_cleanUpCopyOfBody.sqf index b20169e9f5..292f332f91 100644 --- a/addons/medical/functions/fnc_cleanUpCopyOfBody_f.sqf +++ b/addons/medical/functions/fnc_cleanUpCopyOfBody.sqf @@ -13,12 +13,12 @@ private ["_unit", "_copy"]; _unit = _this select 0; -_copy = _unit getvariable QGVAR(copyOfBody_f); +_copy = _unit getvariable QGVAR(copyOfBody); if (isnil "_copy") exitwith {false}; [format["Cleaning up a copy of Body: %1 %2", _unit, _copy]] call EFUNC(common,debug); // lets clean it up -_unit setvariable [QGVAR(originalCopy_f), nil, true]; -_unit setvariable [QGVAR(copyOfBody_f), nil, true]; +_unit setvariable [QGVAR(originalCopy), nil, true]; +_unit setvariable [QGVAR(copyOfBody), nil, true]; if (!isNull _copy) then { deleteVehicle _copy; }; diff --git a/addons/medical/functions/fnc_getBloodVolumeChange.sqf b/addons/medical/functions/fnc_getBloodVolumeChange.sqf index 69b240b1d7..cfec53e157 100644 --- a/addons/medical/functions/fnc_getBloodVolumeChange.sqf +++ b/addons/medical/functions/fnc_getBloodVolumeChange.sqf @@ -38,7 +38,7 @@ if (_bloodVolume < 100.0) then { _bloodVolumeChange = _bloodVolumeChange + BLOOD_CHANGE_PER_SECOND; _ivVolume = (_unit getvariable [QGVAR(salineIVVolume), 0]) + IV_CHANGE_PER_SECOND; _unit setvariable [QGVAR(salineIVVolume),_ivVolume]; - if ([QEGVAR(fieldRations,module)] call EFUNC(common,isModuleEnabled_F)) then { + if ([QEGVAR(fieldRations,module)] call EFUNC(common,isModuleEnabled)) then { if ([_unit] call EFUNC(fieldRations,canDrink)) then { _unit setvariable [QEGVAR(fieldRations,drinkStatus), (_unit getvariable [QEGVAR(fieldRations,drinkStatus), 100]) + 0.2]; }; diff --git a/addons/medical/functions/fnc_getUnconsciousCondition.sqf b/addons/medical/functions/fnc_getUnconsciousCondition.sqf index 097a5682ec..a322439742 100644 --- a/addons/medical/functions/fnc_getUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_getUnconsciousCondition.sqf @@ -13,8 +13,8 @@ private ["_unit","_return"]; _unit = _this select 0; -if (isnil QGVAR(unconsciousConditions_F)) then { - GVAR(unconsciousConditions_F) = []; +if (isnil QGVAR(unconsciousConditions)) then { + GVAR(unconsciousConditions) = []; }; _return = false; @@ -25,5 +25,5 @@ _return = false; }; }; if (_return) exitwith{}; -}foreach GVAR(unconsciousConditions_F); +}foreach GVAR(unconsciousConditions); _return \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleDropUnit.sqf b/addons/medical/functions/fnc_handleDropUnit.sqf index c82fe8ce79..45e1268d30 100644 --- a/addons/medical/functions/fnc_handleDropUnit.sqf +++ b/addons/medical/functions/fnc_handleDropUnit.sqf @@ -26,7 +26,7 @@ if ((isNull ([_caller] call EFUNC(common,getCarriedObj))) || !([_caller] call EF _caller removeWeapon "ACE_FakePrimaryWeapon"; }; - [_target, false] call EFUNC(common,disableAI_f); + [_target, false] call EFUNC(common,disableAI); _caller setvariable[QGVAR(onStartMovingUnitParams), nil]; // handle the drag & carry administration diff --git a/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf index 1d08a00e23..414c5c4a28 100644 --- a/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf +++ b/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf @@ -56,7 +56,7 @@ if (alive _unit) exitwith { _unit setDamage 0; // Resetting potential revive state - [_unit,QEGVAR(common,ENABLE_REVIVE_SETDEAD_F), 0] call EFUNC(common,setDefinedVariable); + [_unit,QEGVAR(common,ENABLE_REVIVE_SETDEAD), 0] call EFUNC(common,setDefinedVariable); [_unit,QEGVAR(common,ENABLE_REVIVE_COUNTER), 0] call EFUNC(common,setDefinedVariable); diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 7ced1ec393..cb2e77b342 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -93,7 +93,7 @@ if ((missionNamespace getvariable[QGVAR(setting_AdvancedLevel), 0]) > 0) exitwit // Check vitals for medical status // TODO check for in revive state instead of variable - if ((_unit getvariable[QEGVAR(common,ENABLE_REVIVE_SETDEAD_F),0]) == 0) then { + if ((_unit getvariable[QEGVAR(common,ENABLE_REVIVE_SETDEAD),0]) == 0) then { _bloodPressureL = _bloodPressure select 0; _bloodPressureH = _bloodPressure select 1; diff --git a/addons/medical/functions/fnc_makeCopyOfBody_f.sqf b/addons/medical/functions/fnc_makeCopyOfBody.sqf similarity index 100% rename from addons/medical/functions/fnc_makeCopyOfBody_f.sqf rename to addons/medical/functions/fnc_makeCopyOfBody.sqf diff --git a/addons/medical/functions/fnc_moduleBasicRevive.sqf b/addons/medical/functions/fnc_moduleBasicRevive.sqf index b02d873313..79da194024 100644 --- a/addons/medical/functions/fnc_moduleBasicRevive.sqf +++ b/addons/medical/functions/fnc_moduleBasicRevive.sqf @@ -15,10 +15,10 @@ _logic = _this select 0; GVAR(Module) = true; -[_logic, QGVAR(ENABLE_REVIVE_F), "enableFor" ] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(REVIVE_TIMER_MAX_F), "timer" ] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(REVIVE_NUMBER_MAX_F), "amountOf" ] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(ENABLE_REVIVE), "enableFor" ] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(REVIVE_TIMER_MAX), "timer" ] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(REVIVE_NUMBER_MAX), "amountOf" ] call EFUNC(common,readSettingFromModule); [ - {(((_this select 0) getvariable[QGVAR(ENABLE_REVIVE_SETDEAD_F),0]) > 0)} + {(((_this select 0) getvariable[QGVAR(ENABLE_REVIVE_SETDEAD),0]) > 0)} ] call FUNC(registerUnconsciousCondition); diff --git a/addons/medical/functions/fnc_onKilled.sqf b/addons/medical/functions/fnc_onKilled.sqf index e3609a57e5..2b8dd987b6 100644 --- a/addons/medical/functions/fnc_onKilled.sqf +++ b/addons/medical/functions/fnc_onKilled.sqf @@ -6,7 +6,7 @@ if (!local _unit) exitwith {}; [_unit, QGVAR(amountOfPain),0,true] call EFUNC(common,setDefinedVariable); [_unit, QGVAR(heartRate),0,true] call EFUNC(common,setDefinedVariable); [_unit, QGVAR(bloodPressure), [0,0],true] call EFUNC(common,setDefinedVariable); -if (_unit getvariable[QEGVAR(common,unconscious_non_captive_f),false]) then { +if (_unit getvariable[QEGVAR(common,unconscious_non_captive),false]) then { _unit setCaptive false; - _unit setvariable[QEGVAR(common,unconscious_non_captive_f),nil]; + _unit setvariable[QEGVAR(common,unconscious_non_captive),nil]; }; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onStartMovingUnit.sqf b/addons/medical/functions/fnc_onStartMovingUnit.sqf index 7fe3dd8d65..84678d5379 100644 --- a/addons/medical/functions/fnc_onStartMovingUnit.sqf +++ b/addons/medical/functions/fnc_onStartMovingUnit.sqf @@ -20,6 +20,6 @@ _dragging = _this select 3; _caller setvariable[QGVAR(onStartMovingUnitParams), [_caller, _target, _killOnDrop, _dragging]]; -[_target, true] call EFUNC(common,disableAI_f); +[_target, true] call EFUNC(common,disableAI); nil; \ No newline at end of file diff --git a/addons/medical/functions/fnc_registerUnconsciousCondition.sqf b/addons/medical/functions/fnc_registerUnconsciousCondition.sqf index f34d05b57d..1e0413e8d6 100644 --- a/addons/medical/functions/fnc_registerUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_registerUnconsciousCondition.sqf @@ -10,13 +10,13 @@ #include "script_component.hpp" -if (isnil QGVAR(unconsciousConditions_F)) then { - GVAR(unconsciousConditions_F) = []; +if (isnil QGVAR(unconsciousConditions)) then { + GVAR(unconsciousConditions) = []; }; if (typeName _this == typeName []) then { { if (typeName _x == typeName {}) then { - GVAR(unconsciousConditions_F) pushback _x; + GVAR(unconsciousConditions) pushback _x; }; }foreach _this; }; \ No newline at end of file diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index d43c1e1afc..2d91911a3c 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -24,11 +24,11 @@ if (!local _unit) exitwith { [[_unit, _force], QUOTE(FUNC(setDead)), _unit, false] call BIS_fnc_MP; }; -if (isnil QGVAR(ENABLE_REVIVE_F)) then { - GVAR(ENABLE_REVIVE_F) = 0; +if (isnil QGVAR(ENABLE_REVIVE)) then { + GVAR(ENABLE_REVIVE) = 0; }; -if (((GVAR(ENABLE_REVIVE_F) == 1 && isPlayer _unit) || (GVAR(ENABLE_REVIVE_F) == 2)) && !_force && (alive (vehicle _unit))) exitwith { +if (((GVAR(ENABLE_REVIVE) == 1 && isPlayer _unit) || (GVAR(ENABLE_REVIVE) == 2)) && !_force && (alive (vehicle _unit))) exitwith { // enter revive state _unit setvariable ["ACE_inReviveState", true, true]; @@ -36,11 +36,11 @@ if (((GVAR(ENABLE_REVIVE_F) == 1 && isPlayer _unit) || (GVAR(ENABLE_REVIVE_F) == [_unit] call FUNC(setUnconsciousState); // setting the revive default values - if (isnil QGVAR(REVIVE_TIMER_F)) then { - GVAR(REVIVE_TIMER_F) = 10; + if (isnil QGVAR(REVIVE_TIMER)) then { + GVAR(REVIVE_TIMER) = 10; }; - if (isnil QGVAR(REVIVE_NUMBER_MAX_F)) then { - GVAR(REVIVE_NUMBER_MAX_F) = -1; + if (isnil QGVAR(REVIVE_NUMBER_MAX)) then { + GVAR(REVIVE_NUMBER_MAX) = -1; }; [{ @@ -58,7 +58,7 @@ if (((GVAR(ENABLE_REVIVE_F) == 1 && isPlayer _unit) || (GVAR(ENABLE_REVIVE_F) == }; _counter = _unit getvariable ["ACE_reviveCounterValue", 0]; - if (_counter >= GVAR(REVIVE_TIMER_F)) exitwith{ + if (_counter >= GVAR(REVIVE_TIMER)) exitwith{ if (isPlayer _unit) then { titleText ["You died..","PLAIN DOWN"]; }; diff --git a/addons/medical/functions/fnc_setUnconsciousState.sqf b/addons/medical/functions/fnc_setUnconsciousState.sqf index 3f53e629e9..7fbd3c7f8a 100644 --- a/addons/medical/functions/fnc_setUnconsciousState.sqf +++ b/addons/medical/functions/fnc_setUnconsciousState.sqf @@ -41,17 +41,17 @@ _originalPos = unitPos _unit; // Handle the on screen effects if (isPlayer _unit) then { - [] call EFUNC(common,closeAllDialogs_f); + [] call EFUNC(common,closeAllDialogs); [true] call FUNC(effectBlackOut); ["unconscious", true] call EFUNC(common,setDisableUserInputStatus); - [false] call EFUNC(common,setVolume_f); + [false] call EFUNC(common,setVolume); } else { _unit setUnitPos "DOWN"; - [_unit, true] call EFUNC(common,disableAI_F); + [_unit, true] call EFUNC(common,disableAI); }; // So the AI does not get stuck, we are moving the unit to a temp group on its own. -[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide_f); +[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); _captiveSwitch = [_unit, true] call EFUNC(common,setCaptiveSwitch); [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); @@ -110,15 +110,15 @@ _minWaitingTime = (round(random(10)+5)); _unit setUnconscious false; // Swhich the unit back to its original group - [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide_f); + [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); // Reset any visual and audio effects for players, or enable everything again for AI. if (isPlayer _unit) then { [false] call FUNC(effectBlackOut); - [true] call EFUNC(common,setVolume_f); + [true] call EFUNC(common,setVolume); ["unconscious", false] call EFUNC(common,setDisableUserInputStatus); } else { - [_unit, false] call EFUNC(common,disableAI_F); + [_unit, false] call EFUNC(common,disableAI); _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) }; From c3cd9d281d0c9b3480670f68afa5348c75201875 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 14 Feb 2015 20:31:44 +0100 Subject: [PATCH 15/47] Removed isHC function. #139 --- addons/common/XEH_preInit.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 7a70ae7bb3..3710963c63 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -111,7 +111,6 @@ PREP(isAutoWind); PREP(isAwake); PREP(isEngineer); PREP(isEOD); -PREP(isHC); PREP(isInBuilding); PREP(isModLoaded); PREP(isPlayer); From df23b44df55e19f7f1b5bed04ce7ea37df89c9f4 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 Feb 2015 23:13:43 +0100 Subject: [PATCH 16/47] oops --- addons/fcs/functions/fnc_firedEH.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index 237b68fc87..f17693d33e 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -26,7 +26,7 @@ _gunner = [_vehicle, _weapon] call EFUNC(common,getGunner); _turret = [_gunner] call EFUNC(common,getTurretIndex); // Exit if the unit isn't a player -if !([_unit] call EFUNC(common,isPlayer)) exitWith {}; +if !([_gunner] call EFUNC(common,isPlayer)) exitWith {}; private ["_FCSMagazines", "_FCSElevation", "_offset"]; From 827ef91fced046842bb2d3b8bc2e9717bd3e66a9 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 15 Feb 2015 10:03:58 +0100 Subject: [PATCH 17/47] Ported CSE Ambiance sound module --- .../functions/fn_moduleAmbianceSoundLoop.sqf | 98 -------------- addons/missionModules/$PBOPREFIX$ | 1 + addons/missionModules/CfgEventHandlers.hpp | 6 + addons/missionModules/CfgFactionClasses.hpp | 6 + addons/missionModules/CfgVehicles.hpp | 68 ++++++++++ addons/missionModules/XEH_preInit.sqf | 7 + addons/missionModules/config.cpp | 17 +++ addons/missionModules/data/moduleSound.paa | Bin 0 -> 5625 bytes .../functions/fnc_moduleAmbianceSound.sqf | 123 ++++++++++++++++++ .../functions/script_component.hpp | 1 + addons/missionModules/script_component.hpp | 12 ++ 11 files changed, 241 insertions(+), 98 deletions(-) delete mode 100644 TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf create mode 100644 addons/missionModules/$PBOPREFIX$ create mode 100644 addons/missionModules/CfgEventHandlers.hpp create mode 100644 addons/missionModules/CfgFactionClasses.hpp create mode 100644 addons/missionModules/CfgVehicles.hpp create mode 100644 addons/missionModules/XEH_preInit.sqf create mode 100644 addons/missionModules/config.cpp create mode 100644 addons/missionModules/data/moduleSound.paa create mode 100644 addons/missionModules/functions/fnc_moduleAmbianceSound.sqf create mode 100644 addons/missionModules/functions/script_component.hpp create mode 100644 addons/missionModules/script_component.hpp diff --git a/TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf b/TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf deleted file mode 100644 index 4b4d93d453..0000000000 --- a/TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf +++ /dev/null @@ -1,98 +0,0 @@ -/** - * fn_moduleAmbianceSoundLoop.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -private ["_logic", "_units", "_activated","_ambianceSounds", "_soundFiles", "_minimalDistance","_maximalDistance", "_minimalDistance", "_maxDelayBetweenSounds", "_allUnits", "_newPos", "_targetUnit", "_soundToPlay", "_soundPath", "_unparsedSounds", "_list", "_splittedList", "_nilCheckPassedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_units = [_this,1,[],[[]]] call BIS_fnc_param; -_activated = [_this,2,true,[true]] call BIS_fnc_param; - -if (_activated && isServer) then { - _ambianceSounds = []; - _unparsedSounds = _logic getvariable ["soundFiles", ""]; - _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; - _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; - _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; - _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; - _volume = (_logic getvariable ["soundVolume", 30]) max 1; - _followPlayers = _logic getvariable ["followPlayers", false]; - - _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; - - _nilCheckPassedList = ""; - { - _x = [_x] call cse_fnc_string_removeWhiteSpace; - _splittedList set [_foreachIndex, _x]; - }foreach _splittedList; - - _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; - { - if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); - } else { - if (isclass (configFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); - }; - }; - }foreach _splittedList; - - if (count _ambianceSounds == 0) exitwith { - [format["No Ambiance sounds available"]] call cse_fnc_debug; - }; - { - if !([".", _x, true] call BIS_fnc_inString) then { - [format["Ambiance soundfile does not contain a file extension %1", _x]] call cse_fnc_debug; - _ambianceSounds set [_foreachIndex, _x + ".wss"]; - }; - }foreach _ambianceSounds; - [format["Ambiance sounds %1", _ambianceSounds]] call cse_fnc_debug; - - while {alive _logic} do { - _allUnits = switch (true) do { - case isMultiplayer: {playableUnits}; - case isDedicated: {[_logic]}; - default {[player]}; - }; - - if (count _allUnits > 0) then { - _targetUnit = _allUnits select (round(random((count _allUnits)-1))); - - _newPos = (getPos _targetUnit); - if (!_followPlayers) then { - _newPos = getPos _logic; - }; - - if (random(1) >= 0.5) then { - if (random(1) >= 0.5) then { - _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; - }; - } else { - if (random(1) >= 0.5) then { - _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; - }; - }; - - if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { - - _soundToPlay = _ambianceSounds select (round(random((count _ambianceSounds)-1))); - playSound3D [_soundToPlay, _targetUnit, false, _newPos, _volume, 1, 1000]; - - [format["Played a sound %1", _soundToPlay]] call cse_fnc_debug; - - sleep (_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds; - }; - }; - }; -}; - -true; \ No newline at end of file diff --git a/addons/missionModules/$PBOPREFIX$ b/addons/missionModules/$PBOPREFIX$ new file mode 100644 index 0000000000..ea1be0daee --- /dev/null +++ b/addons/missionModules/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\missionModules \ No newline at end of file diff --git a/addons/missionModules/CfgEventHandlers.hpp b/addons/missionModules/CfgEventHandlers.hpp new file mode 100644 index 0000000000..f0a9f14d91 --- /dev/null +++ b/addons/missionModules/CfgEventHandlers.hpp @@ -0,0 +1,6 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; diff --git a/addons/missionModules/CfgFactionClasses.hpp b/addons/missionModules/CfgFactionClasses.hpp new file mode 100644 index 0000000000..792f4d31e3 --- /dev/null +++ b/addons/missionModules/CfgFactionClasses.hpp @@ -0,0 +1,6 @@ +class CfgFactionClasses { + class NO_CATEGORY; + class ACE_missionModules: NO_CATEGORY { + displayName = "ACE Mission Modules"; + }; +}; \ No newline at end of file diff --git a/addons/missionModules/CfgVehicles.hpp b/addons/missionModules/CfgVehicles.hpp new file mode 100644 index 0000000000..570883ee5f --- /dev/null +++ b/addons/missionModules/CfgVehicles.hpp @@ -0,0 +1,68 @@ +class CfgVehicles { + class Logic; + class Module_F: Logic { + class ArgumentsBaseUnits { + }; + }; + + // TODO make a curator variant for this + class cse_moduleAmbianceSound: Module_F { + scope = 2; + displayName = "Ambiance Sounds [ACE]"; + icon = QUOTE(PATHTOF(data\moduleSound.paa)); + category = "ACE_missionModules"; + function = QUOTE(FUNC(moduleAmbianceSound); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "Glowbal"; + class Arguments { + class soundFiles { + displayName = "Sounds"; + description = "Classnames of the ambiance sounds played. Seperated by ','. "; + typeName = "STRING"; + defaultValue = ""; + }; + class minimalDistance { + displayName = "Minimal Distance"; + description = "Minimal Distance"; + typeName = "NUMBER"; + defaultValue = 400; + }; + class maximalDistance { + displayName = "Maximal Distance"; + description = "Maximal Distance"; + typeName = "NUMBER"; + defaultValue = 900; + }; + class minimalDelay { + displayName = "Minimal Delay"; + description = "Minimal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 10; + }; + class maximalDelay { + displayName = "Maximal Delay"; + description = "Maximal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 170; + }; + class followPlayers { + displayName = "Follow Players"; + description = "Follow players. If set to false, loop will play sounds only nearby logic position."; + typeName = "BOOL"; + defaultValue = 0; + }; + class soundVolume { + displayName = "Volume"; + description = "The volume of the sounds played"; + typeName = "NUMBER"; + defaultValue = 0; + }; + }; + class ModuleDescription { + description = "Ambiance sounds loop (synced across MP)"; + sync[] = {}; + }; + }; +}; diff --git a/addons/missionModules/XEH_preInit.sqf b/addons/missionModules/XEH_preInit.sqf new file mode 100644 index 0000000000..cadbbabdd1 --- /dev/null +++ b/addons/missionModules/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(moduleAmbianceSound); + +ADDON = true; diff --git a/addons/missionModules/config.cpp b/addons/missionModules/config.cpp new file mode 100644 index 0000000000..0867b486c6 --- /dev/null +++ b/addons/missionModules/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {"cse_moduleAmbianceSound"}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Glowbal"}; + authorUrl = ""; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgFactionClasses.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/missionModules/data/moduleSound.paa b/addons/missionModules/data/moduleSound.paa new file mode 100644 index 0000000000000000000000000000000000000000..bfe3b8032717dcc98269b4b42a620cffe550ffc2 GIT binary patch literal 5625 zcmd5=e{2)i9e)QtpfrHPa-m>_7$qGojBP2JHAXidD=lKvOSnciRHiZp3io($CfVu3Ih4Y{*BB>0gjI}tEY4lCyKj^3 zi|MspB)_I9Qgx5++xQ+GAF#}rEAi6)SgR2uT;uV0M$+GvaQ(#H9}xS?WmyKjWzk^2 zNzcQW;MZidnf$!>++Lhj?%eeIpGtziBC+buc2ZUhGN$7o{p|Y_&10xliB==phYGcr8`S2cb3wu zSJO0FbEhH0o>*@a^2330*Os!%?HPIs=*>Ht3JmIghu|*BN=Fax<2*v*2zg37n~I_l zvuOp1~efUHq1t$YIb<=rbwS zTrcQpUhjzXYHsxVyH5nfdE>YxM~e3~1{1=bAg7M@d>{Fz$PcEznj%j-Sr-`;E@UQk zQ%W=8le|+&`CYHlo@`?-%h+-aPK=XB!7Q0@uvl zk~H~J)3;+sOn<@gdX~1F2=F@pO`4Y=pKA{{ih0US7~4l2ZHeSrF3!i~kXHre!}Y@c zP~XdDtCPF%p;?fZ%~k(hpV7__KYu$I&W)uH29ukQ!Cc^o8gi!2->3UUe9E%THmf0Q zTsUN8<7HeGl+Vt~a$AbuYUH0o|BNJeHbGk-Z{+Ere3Dmnv_1+KqTMjB=U(a$b{;-6 zzc4iZ3Di4N{_5i{f3GXhO~_`GW%kmP#F*J;J)-sFmSP?uO!IU;(7&&hr;0QC@2ovz z3-%y>l5ihkZ6=ksK>1eVIAM@i^LD}cUF(EDfV@(07E3F~Wc@c6Pf23lh`?V>iWc4M z`dp0j&)*$#tfK$P|G#y0L*l&qaS?wMfyF&b{MX`O{fI8!$wXwry{egRWm$pFp z{y>`MA)mBh5Aqkkb=l&hj--Fhjd&oPi5~=z^p(|AlqMfu%Gp?i68y-kT`Dz1+<3b z<$c9;CtdTx;i6ck|MGfA>_>9#Q+h5Q7_jV*@=E>2Esi71(4W)NRDZ#3xHI;cHA?@; z<(G?d&v#ynUfUZd{#1V?*3m-&#@%$Iy`|^e#>Hkc9?+hA!G5{)M~i2jYll6|dd$$D zR)0X8Be1{8Upe@-w3`5=Q9-=?2KtXFp9)OTGQSFkA2Lj=c}(p3w}oZ4G=ctW9oi4< zr*2R=xTFyP!>q?9KaP56@|$%on7G*D6aK=`UyoLwyIp@@cmGg)E1Kr+;jL-cv!*;u z)@FA=&{SZHDJ_#uoFU1F>~(_jCm+&BtmntyvDT}g$DiA1>Bl@;UiY3!nfQUa_gvq* zwb%dKekXIHkY=R<$fjcYGlSh9iZ&KyjMBcs8aBK9SId5$Z9^J1hwG!^7Z8h7Chc~y zzRAF|A*~;Z!VEp4O~Z+c&YynMaN;8TU{bH0yK>v3G(%zjHqY*)0JwO9CW)BVG zJ*YDB^0;y9tW`GfULspIGVAAGN0_?S3436ZaxYoN8IUw|Rqu_G7u7KTl-MPM?0gOc`ug7=QW2VESaxEQ|DzF~Gcf`Ss=k z!5@80$+70ue>^-^&<8!+w(EE;@MgU@FXFFWrn38tNE@g!N=@f3^qiN9Y5(x27AJTU z=ZAa#5twV0X_O^x28Z$A&pS=)$^KtzKk;MPDzj+fwB>Q#-`x>urFlHnvF~!UO>diN z1yv&Jpc(olz3l-5or{nk44&+4GA;!F4$kl&=$B9LESij$36p&hUd;VmNUJ6YMgF6JLbOVk`ZbHcCR84R!G;@r-_u zAOuge55r}#NM0sQs>9M`hMq}%DBkSUY)Wi(n$)N*vDA>Kx9MZQ8d)rk1;xlSy{&nF z{&N3bnupD7Ptbb2a4^?R|X+6c1 zGkO0 + * 1: Units + * 2: Activated + * + * Return Value: + * Nothing + * + * Example: + * N/A + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated","_ambianceSounds", "_soundFiles", "_minimalDistance","_maximalDistance", "_minimalDistance", "_maxDelayBetweenSounds", "_allUnits", "_newPos", "_targetUnit", "_soundToPlay", "_soundPath", "_unparsedSounds", "_list", "_splittedList", "_nilCheckPassedList"]; +_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +_units = [_this,1,[],[[]]] call BIS_fnc_param; +_activated = [_this,2,true,[true]] call BIS_fnc_param; + +// We only play this on the locality of the logic, since the sounds are broadcasted across the network +if (_activated && local _logic) then { + _ambianceSounds = []; + _unparsedSounds = _logic getvariable ["soundFiles", ""]; + _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; + _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; + _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; + _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; + _volume = (_logic getvariable ["soundVolume", 30]) max 1; + _followPlayers = _logic getvariable ["followPlayers", false]; + + _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; + + _nilCheckPassedList = ""; + { + _x = [_x] call EFUNC(common,removeWhiteSpace); + _splittedList set [_foreachIndex, _x]; + }foreach _splittedList; + + _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; + { + if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); + } else { + if (isclass (configFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); + }; + }; + }foreach _splittedList; + + if (count _ambianceSounds == 0) exitwith {}; + { + if !([".", _x, true] call BIS_fnc_inString) then { + _ambianceSounds set [_foreachIndex, _x + ".wss"]; + }; + }foreach _ambianceSounds; + + [{ + private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"] + _args = _this select 0; + _logic = _args select 0; + _lastTimePlayed = _args select 8; + + if (!alive _logic) exitwith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + if (_lastTimePlayed - time >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { + _ambianceSounds = _args select 1; + _minimalDistance = _args select 2; + _maximalDistance = _args select 3; + _minDelayBetweensounds = _args select 4; + _maxDelayBetweenSounds = _args select 5; + _volume = _args select 6; + _followPlayers = _args select 7; + + // Find all players in session. + _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; + + // Check if there are enough players to even start playing this sound. + if (count _allUnits > 0) then { + + // Select a target unit at random. + _targetUnit = _allUnits select (round(random((count _allUnits)-1))); + + // find the position from which we are going to play this sound from. + _newPos = (getPos _targetUnit); + if (!_followPlayers) then { + _newPos = getPos _logic; + }; + + // Randomize this position. + if (random(1) >= 0.5) then { + if (random(1) >= 0.5) then { + _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; + }; + } else { + if (random(1) >= 0.5) then { + _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; + }; + }; + + // If no unit is to close to this position, we will play the sound. + if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { + + playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), _targetUnit, false, _newPos, _volume, 1, 1000]; + _args set [8, time]; + }; + }; + }; + }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call CBA_fnc_addPerFrameHandler; +}; + +true; diff --git a/addons/missionModules/functions/script_component.hpp b/addons/missionModules/functions/script_component.hpp new file mode 100644 index 0000000000..e49740a89e --- /dev/null +++ b/addons/missionModules/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\missionModules\script_component.hpp" \ No newline at end of file diff --git a/addons/missionModules/script_component.hpp b/addons/missionModules/script_component.hpp new file mode 100644 index 0000000000..a567966c7b --- /dev/null +++ b/addons/missionModules/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT missionModules +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MISSIONMODULES + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSIONMODULES + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSIONMODULES +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From 6540158ce1e93a425957e01f1011c0e0b6f9dc1e Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 15 Feb 2015 10:05:48 +0100 Subject: [PATCH 18/47] Removed left over CSE prefix --- addons/missionModules/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/missionModules/CfgVehicles.hpp b/addons/missionModules/CfgVehicles.hpp index 570883ee5f..afdb58006b 100644 --- a/addons/missionModules/CfgVehicles.hpp +++ b/addons/missionModules/CfgVehicles.hpp @@ -6,7 +6,7 @@ class CfgVehicles { }; // TODO make a curator variant for this - class cse_moduleAmbianceSound: Module_F { + class ACE_moduleAmbianceSound: Module_F { scope = 2; displayName = "Ambiance Sounds [ACE]"; icon = QUOTE(PATHTOF(data\moduleSound.paa)); From ac54e8dfd797e94c2629628e04396743f8c21025 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 15 Feb 2015 12:44:34 +0100 Subject: [PATCH 19/47] Added UAV exchange battery sound --- addons/logistics_uavbattery/CfgSounds.hpp | 7 +++++++ addons/logistics_uavbattery/config.cpp | 1 + .../functions/fnc_refuelUAV.sqf | 1 + .../sounds/exchange_battery.ogg | Bin 0 -> 34349 bytes 4 files changed, 9 insertions(+) create mode 100644 addons/logistics_uavbattery/CfgSounds.hpp create mode 100644 addons/logistics_uavbattery/sounds/exchange_battery.ogg diff --git a/addons/logistics_uavbattery/CfgSounds.hpp b/addons/logistics_uavbattery/CfgSounds.hpp new file mode 100644 index 0000000000..530c5b86a9 --- /dev/null +++ b/addons/logistics_uavbattery/CfgSounds.hpp @@ -0,0 +1,7 @@ +class CfgSounds { + class ACE_replaceUAVBattery { + name = "ACE_replaceUAVBattery"; + sound[]={QUOTE(PATHTOF(sounds\exchange_battery.ogg)),1,1}; + titles[]={}; + }; +}; diff --git a/addons/logistics_uavbattery/config.cpp b/addons/logistics_uavbattery/config.cpp index 046a2665d0..32d8c49978 100644 --- a/addons/logistics_uavbattery/config.cpp +++ b/addons/logistics_uavbattery/config.cpp @@ -15,3 +15,4 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" +#include "CfgSounds.hpp" diff --git a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf index 9384044f00..5a248bf812 100644 --- a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf @@ -21,6 +21,7 @@ if (!(_this call FUNC(canRefuelUAV))) exitWith {}; _onFinish = { EXPLODE_2_PVT((_this select 0),_caller,_target); _caller removeItem "ACE_UAVBattery"; + playSound3D [QUOTE(PATHTO_R(sounds\exchange_battery.ogg)), objNull, false, getPosASL _caller, 1, 1, 10]; ["VehicleSetFuel", [_target], [_target, 1]] call EFUNC(common,targetEvent); //setFuel is local }; diff --git a/addons/logistics_uavbattery/sounds/exchange_battery.ogg b/addons/logistics_uavbattery/sounds/exchange_battery.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5a40ddb47a7aa5db7a2ba779baa37072286fc37c GIT binary patch literal 34349 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≈eyu+XoU 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 literal 0 HcmV?d00001 From baf9396459c38d021801b7e6aa0cf0ad7ea6802e Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 15:31:09 +0100 Subject: [PATCH 20/47] cleanup attach --- addons/attach/CfgEventHandlers.hpp | 5 +- addons/attach/CfgMagazines.hpp | 4 +- addons/attach/CfgVehicles.hpp | 28 +++++----- addons/attach/CfgWeapons.hpp | 9 ++-- addons/attach/config.cpp | 11 ++-- addons/attach/functions/fnc_attach.sqf | 32 ++++++------ addons/attach/functions/fnc_canAttach.sqf | 8 +-- addons/attach/functions/fnc_canDetach.sqf | 13 ++--- addons/attach/functions/fnc_detach.sqf | 54 ++++++++++---------- addons/attach/functions/fnc_openAttachUI.sqf | 18 +++---- addons/attach/functions/fnc_placeApprove.sqf | 8 +-- addons/attach/stringtable.xml | 2 +- 12 files changed, 100 insertions(+), 92 deletions(-) diff --git a/addons/attach/CfgEventHandlers.hpp b/addons/attach/CfgEventHandlers.hpp index 4c2b8b16ca..f0a9f14d91 100644 --- a/addons/attach/CfgEventHandlers.hpp +++ b/addons/attach/CfgEventHandlers.hpp @@ -1,5 +1,6 @@ + class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; -}; \ No newline at end of file +}; diff --git a/addons/attach/CfgMagazines.hpp b/addons/attach/CfgMagazines.hpp index 282d36b964..d63b8db36b 100644 --- a/addons/attach/CfgMagazines.hpp +++ b/addons/attach/CfgMagazines.hpp @@ -1,10 +1,12 @@ + class CfgMagazines { class CA_Magazine; class B_IR_Grenade: CA_Magazine { ACE_Attachable = 1; }; + class SmokeShell; class Chemlight_green: SmokeShell { ACE_Attachable = 1; }; -}; \ No newline at end of file +}; diff --git a/addons/attach/CfgVehicles.hpp b/addons/attach/CfgVehicles.hpp index bc1f52988a..1b16d59acc 100644 --- a/addons/attach/CfgVehicles.hpp +++ b/addons/attach/CfgVehicles.hpp @@ -1,7 +1,3 @@ -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ - }; #define MACRO_ATTACHTOVEHICLE \ class ACE_Actions { \ @@ -32,16 +28,20 @@ class CfgVehicles { class Car: LandVehicle { MACRO_ATTACHTOVEHICLE }; + class Tank: LandVehicle { MACRO_ATTACHTOVEHICLE }; + class Air; class Helicopter: Air { MACRO_ATTACHTOVEHICLE }; + class Plane: Air { MACRO_ATTACHTOVEHICLE }; + class Ship; class Ship_F: Ship { MACRO_ATTACHTOVEHICLE @@ -96,6 +96,7 @@ class CfgVehicles { onlyInNvg = 1; useFlare = 0; }; + side = 7;//-1=NO_SIDE yellow box,3=CIV grey box,4=NEUTRAL yellow box,6=FRIENDLY green box,7=LOGIC no radar signature accuracy = 1000; cost = 0; @@ -111,37 +112,36 @@ class CfgVehicles { }; class NATO_Box_Base; - class EAST_Box_Base; - class IND_Box_Base; - class FIA_Box_Base_F; - class Box_NATO_Support_F: NATO_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_IR_Strobe_Item,12) + MACRO_ADDITEM(ACE_IR_Strobe_Item,12); }; }; + class EAST_Box_Base; class Box_East_Support_F: EAST_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_IR_Strobe_Item,12) + MACRO_ADDITEM(ACE_IR_Strobe_Item,12); }; }; + class IND_Box_Base; class Box_IND_Support_F: IND_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_IR_Strobe_Item,12) + MACRO_ADDITEM(ACE_IR_Strobe_Item,12); }; }; + class FIA_Box_Base_F; class Box_FIA_Support_F: FIA_Box_Base_F { class TransportItems { - MACRO_ADDITEM(ACE_IR_Strobe_Item,12) + MACRO_ADDITEM(ACE_IR_Strobe_Item,12); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_IR_Strobe_Item,12) + MACRO_ADDITEM(ACE_IR_Strobe_Item,12); }; }; -}; \ No newline at end of file +}; diff --git a/addons/attach/CfgWeapons.hpp b/addons/attach/CfgWeapons.hpp index 8174f67b38..4ad34832c5 100644 --- a/addons/attach/CfgWeapons.hpp +++ b/addons/attach/CfgWeapons.hpp @@ -1,16 +1,19 @@ + class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; class ACE_IR_Strobe_Item: ACE_ItemCore { + ACE_attachable = 1; + author = "$STR_ACE_Common_ACETeam"; + scope = 2; displayName = "$STR_ACE_IrStrobe_Name"; descriptionShort = "$STR_ACE_IrStrobe_Description"; model = "\A3\weapons_F\ammo\mag_univ.p3d"; picture = PATHTOF(UI\irstrobe_item.paa); - scope = 2; - ACE_attachable = 1; + class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; -}; \ No newline at end of file +}; diff --git a/addons/attach/config.cpp b/addons/attach/config.cpp index 9accc9f253..007084d8df 100644 --- a/addons/attach/config.cpp +++ b/addons/attach/config.cpp @@ -5,17 +5,14 @@ class CfgPatches { units[] = {}; weapons[] = {"ACE_IR_Strobe_Item"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common", "ace_interaction"}; - author[] = {"KoffeinFlummi", "eRazeri", "CAA-Picard"}; + requiredAddons[] = {"ace_common","ace_interaction"}; + author[] = {"KoffeinFlummi","eRazeri","CAA-Picard"}; authorUrl = "https://github.com/KoffeinFlummi/"; VERSION_CONFIG; }; }; #include "CfgEventHandlers.hpp" - -#include "CfgVehicles.hpp" - -#include "CfgWeapons.hpp" - #include "CfgMagazines.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" diff --git a/addons/attach/functions/fnc_attach.sqf b/addons/attach/functions/fnc_attach.sqf index 9fd0cf7952..3aa06bacc2 100644 --- a/addons/attach/functions/fnc_attach.sqf +++ b/addons/attach/functions/fnc_attach.sqf @@ -20,31 +20,33 @@ PARAMS_3(_unit,_attachToVehicle,_itemName); //Sanity Check (_unit has item in inventory, not over attach limit) -if (!([_unit,_attachToVehicle,_itemName] call FUNC(canAttach))) exitWith {ERROR("Tried to attach, but check failed");}; +if !([_unit, _attachToVehicle, _itemName] call FUNC(canAttach)) exitWith {ERROR("Tried to attach, but check failed");}; + +private ["_itemVehClass", "_onAtachText", "_selfAttachPosition"]; -_selfAttachPosition = [_unit, [-0.05,0,0.12], "rightshoulder"]; _itemVehClass = ""; _onAtachText = ""; +_selfAttachPosition = [_unit, [-0.05, 0, 0.12], "rightshoulder"]; -switch true do { -case (_itemName == "ACE_IR_Strobe_Item"): { +switch (true) do { + case (_itemName == "ACE_IR_Strobe_Item"): { _itemVehClass = "ACE_IR_Strobe_Effect"; _onAtachText = localize "STR_ACE_Attach_IrStrobe_Attached"; - _selfAttachPosition = [_unit,[0,-0.11,0.16],"pilot"]; //makes it attach to the head a bit better, shoulder is not good for visibility - eRazeri + //_selfAttachPosition = [_unit, [0, -0.11, 0.16], "pilot"]; //makes it attach to the head a bit better, shoulder is not good for visibility - eRazeri }; -case (_itemName == "B_IR_Grenade"): { + case (_itemName == "B_IR_Grenade"): { _itemVehClass = "B_IRStrobe"; _onAtachText = localize "STR_ACE_Attach_IrGrenade_Attached"; }; -case (_itemName == "O_IR_Grenade"): { + case (_itemName == "O_IR_Grenade"): { _itemVehClass = "O_IRStrobe"; _onAtachText = localize "STR_ACE_Attach_IrGrenade_Attached"; }; -case (_itemName == "I_IR_Grenade"): { + case (_itemName == "I_IR_Grenade"): { _itemVehClass = "I_IRStrobe"; _onAtachText = localize "STR_ACE_Attach_IrGrenade_Attached"; }; -case (_itemName == "Chemlight_blue" or {_itemName == "Chemlight_green"} or {_itemName == "Chemlight_red"} or {_itemName == "Chemlight_yellow"}): { + case (toLower _itemName in ["chemlight_blue", "chemlight_green", "chemlight_red", "chemlight_yellow"]): { _itemVehClass = _itemName; _onAtachText = localize "STR_ACE_Attach_Chemlight_Attached"; }; @@ -57,8 +59,8 @@ if (_unit == _attachToVehicle) then { //Self Attachment _attachedItem = _itemVehClass createVehicle [0,0,0]; _attachedItem attachTo _selfAttachPosition; [_onAtachText] call EFUNC(common,displayTextStructured); - _attachToVehicle setVariable ["ACE_AttachedObjects", [_attachedItem], true]; - _attachToVehicle setVariable ["ACE_AttachedItemNames", [_itemName], true]; + _attachToVehicle setVariable [QGVAR(Objects), [_attachedItem], true]; + _attachToVehicle setVariable [QGVAR(ItemNames), [_itemName], true]; } else { GVAR(setupObject) = _itemVehClass createVehicleLocal [0,0,-10000]; GVAR(setupObject) enableSimulationGlobal false; @@ -72,17 +74,17 @@ if (_unit == _attachToVehicle) then { //Self Attachment private "_player"; _player = ACE_player; //Stop if player switch or player gets to far from vehicle - if ((GVAR(placer) != _player) || {(_player distance GVAR(SetupAttachVehicle)) > 7}) exitWith { + if (GVAR(placer) != _player || {_player distance GVAR(SetupAttachVehicle) > 7}) exitWith { call FUNC(placeCancel); }; GVAR(pfeh_running) = true; _pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]); GVAR(setupObject) setPosATL _pos; - }] call BIS_fnc_addStackedEventHandler; + }] call BIS_fnc_addStackedEventHandler; // @todo replace with CBA PFH //had to delay the mouseHint, not sure why [{[localize "STR_ACE_Attach_PlaceAction", localize "STR_ACE_Attach_CancelAction"] call EFUNC(interaction,showMouseHint)}, [], 0, 0] call EFUNC(common,waitAndExecute); - _unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {GVAR(pfeh_running) AND !isNull (GVAR(setupObject))}, {call FUNC(placeApprove);}] call EFUNC(common,AddActionEventHandler)]; - _unit setVariable [QGVAR(cancelActionEH), [_unit, "MenuBack", {GVAR(pfeh_running) AND !isNull (GVAR(setupObject))}, {call FUNC(placeCancel);}] call EFUNC(common,AddActionEventHandler)]; + _unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {GVAR(pfeh_running) && {!isNull (GVAR(setupObject))}}, {call FUNC(placeApprove);}] call EFUNC(common,AddActionEventHandler)]; + _unit setVariable [QGVAR(cancelActionEH), [_unit, "MenuBack", {GVAR(pfeh_running) && {!isNull (GVAR(setupObject))}}, {call FUNC(placeCancel);}] call EFUNC(common,AddActionEventHandler)]; }; diff --git a/addons/attach/functions/fnc_canAttach.sqf b/addons/attach/functions/fnc_canAttach.sqf index ac646ef700..1c33f7b112 100644 --- a/addons/attach/functions/fnc_canAttach.sqf +++ b/addons/attach/functions/fnc_canAttach.sqf @@ -19,7 +19,9 @@ PARAMS_3(_unit,_attachToVehicle,_item); -_attachLimit = if (_unit == _attachToVehicle) then {1} else {10}; -_attachedObjects = _attachToVehicle getVariable ["ACE_AttachedObjects", []]; +private ["_attachLimit", "_attachedObjects"]; -canStand _unit && {alive _attachToVehicle} && {(count _attachedObjects) < _attachLimit} && {_item in ((magazines _unit) + (items _unit) + [""])} +_attachLimit = [10, 1] select (_unit == _attachToVehicle); +_attachedObjects = _attachToVehicle getVariable [QGVAR(Objects), []]; + +canStand _unit && {alive _attachToVehicle} && {count _attachedObjects < _attachLimit} && {_item in (itemsWithMagazines _unit + [""])} diff --git a/addons/attach/functions/fnc_canDetach.sqf b/addons/attach/functions/fnc_canDetach.sqf index d099d2035e..ad2f68776c 100644 --- a/addons/attach/functions/fnc_canDetach.sqf +++ b/addons/attach/functions/fnc_canDetach.sqf @@ -16,24 +16,25 @@ */ #include "script_component.hpp" -private ["_attachedObjects", "_inRange", "_unitPos", "_objectPos"]; - PARAMS_2(_unit,_attachToVehicle); -_attachedObjects = _attachToVehicle getVariable ["ACE_AttachedObjects", []]; +private ["_attachedObjects", "_inRange"]; + +_attachedObjects = _attachToVehicle getVariable [QGVAR(Objects), []]; _inRange = false; if (_unit == _attachToVehicle) then { - _inRange = (count _attachedObjects) > 0; + _inRange = count _attachedObjects > 0; } else { //Scan if unit is within range (using 2d distance) + private ["_unitPos", "_objectPos"]; _unitPos = getPos _unit; _unitPos set [2,0]; { _objectPos = getPos _x; _objectPos set [2, 0]; - if ((_objectPos distance _unitPos) < 4) exitWith {_inRange = true}; + if (_objectPos distance _unitPos < 4) exitWith {_inRange = true}; } forEach _attachedObjects; }; -(canStand _unit) && _inRange && {alive _attachToVehicle} +canStand _unit && {_inRange} && {alive _attachToVehicle} diff --git a/addons/attach/functions/fnc_detach.sqf b/addons/attach/functions/fnc_detach.sqf index b18cec09bd..8fb9e3cc9c 100644 --- a/addons/attach/functions/fnc_detach.sqf +++ b/addons/attach/functions/fnc_detach.sqf @@ -16,12 +16,14 @@ */ #include "script_component.hpp" -private ["_itemName", "_count", "_attachedItem", "_fnc_detachDelay"]; - PARAMS_2(_unit,_attachToVehicle); -_attachedObjectsArray = _attachToVehicle getVariable ["ACE_AttachedObjects", []]; -_attachedItemsArray = _attachToVehicle getVariable ["ACE_AttachedItemNames", []]; +private ["_attachedObjects", "_attachedItems"]; + +_attachedObjects = _attachToVehicle getVariable [QGVAR(Objects), []]; +_attachedItems = _attachToVehicle getVariable [QGVAR(ItemNames), []]; + +private ["_attachedObject", "_attachedIndex", "_itemName", "_minDistance", "_unitPos", "_objectPos"]; _attachedObject = objNull; _attachedIndex = -1; @@ -34,53 +36,51 @@ _unitPos set [2,0]; { _objectPos = getPos _x; _objectPos set [2, 0]; - if ((_objectPos distance _unitPos) < _minDistance) then { - _minDistance = (_objectPos distance _unitPos); + if (_objectPos distance _unitPos < _minDistance) then { + _minDistance = _objectPos distance _unitPos; _attachedObject = _x; - _itemName = _attachedItemsArray select _forEachIndex; + _itemName = _attachedItems select _forEachIndex; _attachedIndex = _forEachIndex; }; -} forEach _attachedObjectsArray; +} forEach _attachedObjects; // Check if unit has an attached item -if ((isNull _attachedObject) || {_itemName == ""}) exitWith {ERROR("Could not find attached object")}; +if (isNull _attachedObject || {_itemName == ""}) exitWith {ERROR("Could not find attached object")}; -// Add item to inventory -_count = (count items _unit) + (count magazines _unit); -_unit addItem _itemName; -if ((count items _unit) + (count magazines _unit) <= _count) exitWith { +// Exit if can't add the item +if !(_unit canAdd _itemName) exitWith { [localize "STR_ACE_Attach_Inventory_Full"] call EFUNC(common,displayTextStructured); }; -if (_itemName == "B_IR_Grenade" or _itemName == "O_IR_Grenade" or _itemName == "I_IR_Grenade") then { +// Add item to inventory +_unit addItem _itemName; + +if (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) then { // Hack for dealing with X_IR_Grenade effect not dissapearing on deleteVehicle detach _attachedObject; - _attachedObject setPos [getPos _unit select 0, getPos _unit select 1, ((getPos _unit select 2) - 1000)]; + _attachedObject setPos ((getPos _unit) vectorAdd [0, 0, -1000]); // Delete attached item after 0.5 seconds - _fnc_detachDelay = { - deleteVehicle (_this select 0); - }; - [_fnc_detachDelay, [_attachedObject], 0.5, 0] call EFUNC(common,waitAndExecute); + [{deleteVehicle (_this select 0)}, [_attachedObject], 0.5, 0] call EFUNC(common,waitAndExecute); } else { // Delete attached item deleteVehicle _attachedObject; }; // Reset unit variables -_attachedObjectsArray deleteAt _attachedIndex; -_attachedItemsArray deleteAt _attachedIndex; -_attachToVehicle setVariable ["ACE_AttachedObjects", _attachedObjectsArray, true]; -_attachToVehicle setVariable ["ACE_AttachedItemNames", _attachedItemsArray, true]; +_attachedObjects deleteAt _attachedIndex; +_attachedItems deleteAt _attachedIndex; +_attachToVehicle setVariable [QGVAR(Objects), _attachedObjects, true]; +_attachToVehicle setVariable [QGVAR(ItemNames), _attachedItems, true]; // Display message -switch true do { -case (_itemName == "ACE_IR_Strobe_Item") : { +switch (true) do { + case (_itemName == "ACE_IR_Strobe_Item") : { [localize "STR_ACE_Attach_IrStrobe_Detached"] call EFUNC(common,displayTextStructured); }; -case (_itemName == "B_IR_Grenade" or _itemName == "O_IR_Grenade" or _itemName == "I_IR_Grenade") : { + case (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) : { [localize "STR_ACE_Attach_IrGrenade_Detached"] call EFUNC(common,displayTextStructured); }; -case (_itemName == "Chemlight_blue" or {_itemName == "Chemlight_green"} or {_itemName == "Chemlight_red"} or {_itemName == "Chemlight_yellow"}) : { + case (toLower _itemName in ["chemlight_blue", "chemlight_green", "chemlight_red", "chemlight_yellow"]) : { [localize "STR_ACE_Attach_Chemlight_Detached"] call EFUNC(common,displayTextStructured); }; }; diff --git a/addons/attach/functions/fnc_openAttachUI.sqf b/addons/attach/functions/fnc_openAttachUI.sqf index 6521e43fbe..5533956bb6 100644 --- a/addons/attach/functions/fnc_openAttachUI.sqf +++ b/addons/attach/functions/fnc_openAttachUI.sqf @@ -55,13 +55,13 @@ _attachables = items _unit; } forEach _attachables; [ -_actions, -{ - [ACE_player, GVAR(attachTarget), _this] call FUNC(attach); - call EFUNC(interaction,hideMenu); -}, -{ - call EFUNC(interaction,hideMenu); - if !(profileNamespace getVariable [QEGVAR(interaction,AutoCloseMenu), false]) then {"Default" call EFUNC(interaction,openMenuSelf)}; -} + _actions, + { + [ACE_player, GVAR(attachTarget), _this] call FUNC(attach); + call EFUNC(interaction,hideMenu); + }, + { + call EFUNC(interaction,hideMenu); + if !(profileNamespace getVariable [QEGVAR(interaction,AutoCloseMenu), false]) then {"Default" call EFUNC(interaction,openMenuSelf)}; + } ] call EFUNC(interaction,openSelectMenu); diff --git a/addons/attach/functions/fnc_placeApprove.sqf b/addons/attach/functions/fnc_placeApprove.sqf index ceb48de9b5..c6277e2961 100644 --- a/addons/attach/functions/fnc_placeApprove.sqf +++ b/addons/attach/functions/fnc_placeApprove.sqf @@ -100,11 +100,11 @@ _attachedObject attachTo [_attachToVehicle, _endPosTestOffset]; _placer removeItem _itemClassname; //Add Object to ACE_AttachedObjects and ACE_AttachedItemNames -_currentObjects = _attachToVehicle getVariable ["ACE_AttachedObjects", []]; +_currentObjects = _attachToVehicle getVariable [QGVAR(Objects), []]; _currentObjects pushBack _attachedObject; -_attachToVehicle setVariable ["ACE_AttachedObjects", _currentObjects, true]; -_currentItemNames = _attachToVehicle getVariable ["ACE_AttachedItemNames", []]; +_attachToVehicle setVariable [QGVAR(Objects), _currentObjects, true]; +_currentItemNames = _attachToVehicle getVariable [QGVAR(ItemNames), []]; _currentItemNames pushBack _itemClassname; -_attachToVehicle setVariable ["ACE_AttachedItemNames", _currentItemNames, true]; +_attachToVehicle setVariable [QGVAR(ItemNames), _currentItemNames, true]; [_placementText] call EFUNC(common,displayTextStructured); diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 21577c55d3..13c468184b 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -176,4 +176,4 @@ Error en Acoplar - \ No newline at end of file + From 4f5ab1f8e5f67f13b2f8f180734e5b91f5eda1cb Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 15:34:19 +0100 Subject: [PATCH 21/47] removed common as required addon for attach --- addons/attach/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/attach/config.cpp b/addons/attach/config.cpp index 007084d8df..dd7e1add3b 100644 --- a/addons/attach/config.cpp +++ b/addons/attach/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {"ACE_IR_Strobe_Item"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common","ace_interaction"}; + requiredAddons[] = {"ace_interaction"}; author[] = {"KoffeinFlummi","eRazeri","CAA-Picard"}; authorUrl = "https://github.com/KoffeinFlummi/"; VERSION_CONFIG; From c094c10e467d2d3c132178c612793203bfe828f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 15 Feb 2015 11:42:20 -0300 Subject: [PATCH 22/47] visible ir strobes --- addons/attach/CfgVehicles.hpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/addons/attach/CfgVehicles.hpp b/addons/attach/CfgVehicles.hpp index bc1f52988a..e7b5cb3bb4 100644 --- a/addons/attach/CfgVehicles.hpp +++ b/addons/attach/CfgVehicles.hpp @@ -83,15 +83,17 @@ class CfgVehicles { simulation = "nvmarker"; class NVGMarker { - diffuse[] = {0,0,0}; - ambient[] = {0,0,0}; - brightness = 0.004; + diffuse[] = {0.006, 0.006, 0.006, 1}; + ambient[] = {0.005, 0.005, 0.005, 1}; + brightness = 0.2; name = "pozicni blik"; - drawLight = 1; - drawLightSize = 0.005; + drawLightSize = 0.2; drawLightCenterSize = 0.003; activeLight = 0; blinking=1; + blinkingStartsOn=1; + blinkingPattern[] = {2,2}; + blinkingPatternGuarantee = false; dayLight = 0; onlyInNvg = 1; useFlare = 0; From 44aaf3955b2f59fe18c346f784f4b614552af88b Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 15:48:40 +0100 Subject: [PATCH 23/47] some backblast cleanup --- addons/backblast/CfgEventHandlers.hpp | 8 +++--- addons/backblast/CfgWeapons.hpp | 35 +++++++++++++++------------ addons/backblast/config.cpp | 3 +-- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/addons/backblast/CfgEventHandlers.hpp b/addons/backblast/CfgEventHandlers.hpp index a336a5dd41..aaa0189b6d 100644 --- a/addons/backblast/CfgEventHandlers.hpp +++ b/addons/backblast/CfgEventHandlers.hpp @@ -7,11 +7,11 @@ class Extended_PreInit_EventHandlers { class Extended_FiredNear_EventHandlers { class CAManBase { - class GVAR(LauncherBackblast) { - FiredNear = QUOTE( if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 3 >> 'ACE_Backblast_Damage') > 0}) then {_this call FUNC(launcherBackblast)} ); + class ADDON { + firedNear = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 3 >> 'ACE_Backblast_Damage') > 0}) then {_this call DFUNC(launcherBackblast)}); }; - class GVAR(TankDangerZone) { - FiredNear = QUOTE( if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 3 >> 'ACE_DangerZone_Damage') > 0}) then {_this call FUNC(tankDangerZone)} ); + class ADDON { + firedNear = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 3 >> 'ACE_DangerZone_Damage') > 0}) then {_this call DFUNC(tankDangerZone)}); }; }; }; diff --git a/addons/backblast/CfgWeapons.hpp b/addons/backblast/CfgWeapons.hpp index fcb4bde0c5..f4f7c07153 100644 --- a/addons/backblast/CfgWeapons.hpp +++ b/addons/backblast/CfgWeapons.hpp @@ -1,33 +1,37 @@ + class CfgWeapons { class LauncherCore; class Launcher: LauncherCore { - ACE_Backblast_Angle = 60; - ACE_Backblast_Range = 10; - ACE_Backblast_Damage = 0.7; + GVAR(angle) = 60; + GVAR(range) = 10; + GVAR(damage) = 0.7; }; + class Launcher_Base_F: Launcher {}; class launch_Titan_base: Launcher_Base_F { - ACE_Backblast_Angle = 40; - ACE_Backblast_Range = 8; - ACE_Backblast_Damage = 0.5; + GVAR(angle) = 40; + GVAR(range) = 8; + GVAR(damage) = 0.5; }; + class launch_Titan_short_base: launch_Titan_base { - ACE_Backblast_Angle = 40; - ACE_Backblast_Range = 8; - ACE_Backblast_Damage = 0.5; + GVAR(angle) = 40; + GVAR(range) = 8; + GVAR(damage) = 0.5; }; class launch_NLAW_F: Launcher_Base_F { - ACE_Backblast_Angle = 40; - ACE_Backblast_Range = 5; - ACE_Backblast_Damage = 0.6; + GVAR(angle) = 40; + GVAR(range) = 5; + GVAR(damage) = 0.6; }; + class launch_RPG32_F: Launcher_Base_F { - ACE_Backblast_Angle = 60; - ACE_Backblast_Range = 15; - ACE_Backblast_Damage = 0.7; + GVAR(angle) = 60; + GVAR(range) = 15; + GVAR(damage) = 0.7; }; class CannonCore; @@ -36,6 +40,7 @@ class CfgWeapons { ACE_DangerZone_Range = 50; ACE_DangerZone_Damage = 0.85; }; + class mortar_155mm_AMOS: CannonCore { ACE_DangerZone_Angle = 90; ACE_DangerZone_Range = 60; diff --git a/addons/backblast/config.cpp b/addons/backblast/config.cpp index 88de936cf9..d4aaf8131b 100644 --- a/addons/backblast/config.cpp +++ b/addons/backblast/config.cpp @@ -6,12 +6,11 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; - author[] = {"commy2", "KoffeinFlummi"}; + author[] = {"commy2","KoffeinFlummi"}; authorUrl = "https://github.com/commy2/"; VERSION_CONFIG; }; }; #include "CfgEventHandlers.hpp" - #include "CfgWeapons.hpp" From f3a94f03ed94059840c8c67287ca2ece5c17d38e Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 17:14:09 +0100 Subject: [PATCH 24/47] clean up backblast --- .../functions/fnc_backblastDamage.sqf | 39 ++++++++++--------- .../functions/fnc_fireLauncherBackblast.sqf | 24 +++++++----- .../functions/fnc_fireOverpressureZone.sqf | 23 ++++++----- .../backblast/functions/fnc_getDistance.sqf | 6 +-- .../functions/fnc_overpressureDamage.sqf | 37 ++++++++++-------- 5 files changed, 74 insertions(+), 55 deletions(-) diff --git a/addons/backblast/functions/fnc_backblastDamage.sqf b/addons/backblast/functions/fnc_backblastDamage.sqf index 21d2e81736..651dc58830 100644 --- a/addons/backblast/functions/fnc_backblastDamage.sqf +++ b/addons/backblast/functions/fnc_backblastDamage.sqf @@ -1,5 +1,5 @@ /* - * Author: Commy2 and CAA-Picard + * Author: commy2 and CAA-Picard * * Calculate and apply backblast damage to potentially affected local units * @@ -16,52 +16,55 @@ EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); -private ["_backblastAngle","_backblastRange","_backblastDamage"]; -_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2; -_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range"); -_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage"); +private ["_backblastAngle", "_backblastRange", "_backblastDamage"]; + +_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; +_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); +_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); + TRACE_4("Parameters:",_backblastAngle,_backblastRange,_backblastDamage,_weapon); +private "_pos"; _pos = _posASL; if (!surfaceIsWater _pos) then { _pos = ASLtoATL _pos; }; -_affected = _pos nearEntities ["CAManBase", _backblastRange]; { - _unit = _x; - if (local _unit && _unit != _firer && vehicle _unit == _unit) then { + if (local _x && {_x != _firer} && {vehicle _x == _x}) then { + private ["_targetPositionASL", "_relativePosition", "_axisDistance", "_distance", "_angle", "_line", "_line2"]; - _targetPositionASL = eyePos _unit; + _targetPositionASL = eyePos _x; _relativePosition = _targetPositionASL vectorDiff _posASL; _axisDistance = _relativePosition vectorDotProduct _direction; _distance = vectorMagnitude _relativePosition; _angle = acos (_axisDistance / _distance); - _line = [_posASL, _targetPositionASL, _firer, _unit]; + _line = [_posASL, _targetPositionASL, _firer, _x]; _line2 = [_posASL, _targetPositionASL]; - TRACE_4("Affected:",_unit,_axisDistance,_distance,_angle); + TRACE_4("Affected:",_x,_axisDistance,_distance,_angle); + if (_angle < _backblastAngle && {_distance < _backblastRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { + private ["_alpha", "_beta", "_damage"]; + _alpha = sqrt (1 - _distance / _backblastRange); _beta = sqrt (1 - _angle / _backblastAngle); _damage = 2 * _alpha * _beta * _backblastDamage; // If the target is the ACE_player - if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; + if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; // TODO: Sort this interaction with medical if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { - [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); - _unit spawn { + [_x, "HitBody", ([_x, "", (_x getHitPointDamage "HitBody") + _damage, objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); + _x spawn { sleep 0.5; [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); }; } else { - _unit setDamage (damage _unit + _damage); + _x setDamage (damage _x + _damage); }; }; }; -} forEach _affected; - - +} forEach (_pos nearEntities ["CAManBase", _backblastRange]); diff --git a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf index 5970e7b9c2..a35af9f19d 100644 --- a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf +++ b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf @@ -23,27 +23,32 @@ EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Prevent AI from causing backblast damage if !([_firer] call EFUNC(common,isPlayer)) exitWith {}; -private ["_position","_direction","_distance","_alpha","_beta","_damage","_affected"]; +private ["_position", "_direction"]; + _position = getPosASL _projectile; _direction = [0, 0, 0] vectorDiff (vectorDir _projectile); -private ["_backblastAngle","_backblastRange","_backblastDamage"]; -_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2; -_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range"); -_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage"); +private ["_backblastAngle", "_backblastRange", "_backblastDamage"]; +_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; +_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); +_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); // Damage to others +private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _backblastRange]; -// Let each client handle their own affected units -["backblast", _affected, [_firer,_position,_direction,_weapon]] call EFUNC(common,targetEvent); +// Let each client handle their own affected units +["backblast", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); // Damage to the firer +private "_distance"; _distance = [_position, _direction, _backblastRange] call FUNC(getDistance); -TRACE_1("Distance", _distance); + +TRACE_1("Distance",_distance); if (_distance < _backblastRange) then { + private ["_alpha", "_beta", "_damage"]; _alpha = sqrt (1 - _distance / _backblastRange); _beta = sqrt 0.5; @@ -66,6 +71,7 @@ if (_distance < _backblastRange) then { [1,1,0,1] ] call EFUNC(common,addLineToDebugDraw); + private "_ref"; _ref = _direction call EFUNC(common,createOrthonormalReference); [ _position, _position vectorAdd (_direction vectorMultiply _backblastRange) vectorAdd ((_ref select 1) vectorMultiply _backblastRange * tan _backblastAngle), @@ -88,4 +94,4 @@ if (_distance < _backblastRange) then { _position vectorAdd (_direction vectorMultiply (_distance min _backblastRange)), [1,0,0,1] ] call EFUNC(common,addLineToDebugDraw); -#endif \ No newline at end of file +#endif diff --git a/addons/backblast/functions/fnc_fireOverpressureZone.sqf b/addons/backblast/functions/fnc_fireOverpressureZone.sqf index c638f4ad82..0ded8f974b 100644 --- a/addons/backblast/functions/fnc_fireOverpressureZone.sqf +++ b/addons/backblast/functions/fnc_fireOverpressureZone.sqf @@ -14,28 +14,32 @@ * * Return value: * None - *///#define DEBUG_MODE_FULL + */ +//#define DEBUG_MODE_FULL #include "script_component.hpp" EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Prevent AI from causing backblast damage -if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {}; +if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {}; //@todo non-maingun turrets? + +private ["_position", "_direction"]; -private ["_position","_direction","_distance","_alpha","_beta","_damage","_affected"]; _position = getPosASL _projectile; _direction = vectorDir _projectile; -private ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"]; -_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2; -_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range"); -_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage"); +private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; +_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; +_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); +_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); // Damage to others +private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; + // Let each client handle their own affected units -["overpressure", _affected, [_firer,_position,_direction,_weapon]] call EFUNC(common,targetEvent); +["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); // Draw debug lines #ifdef DEBUG_MODE_FULL @@ -44,6 +48,7 @@ _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; [1,0,0,1] ] call EFUNC(common,addLineToDebugDraw); + private "_ref"; _ref = _direction call EFUNC(common,createOrthonormalReference); [ _position, _position vectorAdd (_direction vectorMultiply _dangerZoneRange) vectorAdd ((_ref select 1) vectorMultiply _dangerZoneRange * tan _dangerZoneAngle), @@ -62,4 +67,4 @@ _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; [1,1,0,1] ] call EFUNC(common,addLineToDebugDraw); -#endif \ No newline at end of file +#endif diff --git a/addons/backblast/functions/fnc_getDistance.sqf b/addons/backblast/functions/fnc_getDistance.sqf index b6f61548c6..6ffa60f7af 100644 --- a/addons/backblast/functions/fnc_getDistance.sqf +++ b/addons/backblast/functions/fnc_getDistance.sqf @@ -1,5 +1,5 @@ /* - * Author: Commy2 and CAA-Picard + * Author: commy2 and CAA-Picard * * Calculate the distance to the first intersection of a line * @@ -13,10 +13,10 @@ */ #include "script_component.hpp" -private ["_distance", "_interval", "_line", "_line"]; - EXPLODE_3_PVT(_this,_posASL,_direction,_maxDistance); +private ["_distance", "_interval", "_line", "_intersections"]; + _distance = _maxDistance; _interval = _distance; _line = [_posASL, []]; diff --git a/addons/backblast/functions/fnc_overpressureDamage.sqf b/addons/backblast/functions/fnc_overpressureDamage.sqf index 5dd7447ce8..995c5db9e4 100644 --- a/addons/backblast/functions/fnc_overpressureDamage.sqf +++ b/addons/backblast/functions/fnc_overpressureDamage.sqf @@ -1,5 +1,5 @@ /* - * Author: Commy2 and CAA-Picard + * Author: commy2 and CAA-Picard * * Calculate and apply overpressure damage to potentially affected local units * @@ -16,50 +16,55 @@ EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); -private ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"]; -_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2; -_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range"); -_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage"); +private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; + +_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; +_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); +_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); + TRACE_4("Parameters:",_dangerZoneAngle,_dangerZoneRange,_dangerZoneDamage,_weapon); +private "_pos"; _pos = _posASL; if (!surfaceIsWater _pos) then { _pos = ASLtoATL _pos; }; -_affected = _pos nearEntities ["CAManBase", _dangerZoneRange]; { - _unit = _x; - if (local _unit && _unit != _firer && vehicle _unit == _unit) then { + if (local _x && {_x != _firer} && {vehicle _x == _x}) then { + private ["_targetPositionASL", "_relativePosition", "_axisDistance", "_distance", "_angle", "_line", "_line2"]; - _targetPositionASL = eyePos _unit; + _targetPositionASL = eyePos _x; _relativePosition = _targetPositionASL vectorDiff _posASL; _axisDistance = _relativePosition vectorDotProduct _direction; _distance = vectorMagnitude _relativePosition; _angle = acos (_axisDistance / _distance); - _line = [_posASL, _targetPositionASL, _firer, _unit]; + _line = [_posASL, _targetPositionASL, _firer, _x]; _line2 = [_posASL, _targetPositionASL]; - TRACE_4("Affected:",_unit,_axisDistance,_distance,_angle); + TRACE_4("Affected:",_x,_axisDistance,_distance,_angle); + if (_angle < _dangerZoneAngle && {_distance < _dangerZoneRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { + private ["_alpha", "_beta", "_damage"]; + _alpha = sqrt (1 - _distance / _dangerZoneRange); _beta = sqrt (1 - _angle / _dangerZoneAngle); _damage = 2 * _alpha * _beta * _dangerZoneDamage; // If the target is the ACE_player - if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; + if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; // @todo: Sort this interaction with medical if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { - [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); - _unit spawn { + [_x, "HitBody", ([_x, "", ((_x getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); + _x spawn { sleep 0.5; [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); }; } else { - _unit setDamage (damage _unit + _damage); + _x setDamage (damage _x + _damage); }; }; }; -} forEach _affected; +} forEach (_pos nearEntities ["CAManBase", _dangerZoneRange]); From 3f98d1485ea0f6545e6a48ce67216b15d64e4fa3 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 17:17:20 +0100 Subject: [PATCH 25/47] author name --- addons/backblast/functions/fnc_fireLauncherBackblast.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf index a35af9f19d..515135d56f 100644 --- a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf +++ b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf @@ -1,5 +1,5 @@ /* - * Author: Commy2 and CAA-Picard + * Author: commy2 and CAA-Picard * * Handle fire of local launchers * From f3aa0e58aa84eade721047a4fdd24c6defce4be3 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 17:55:20 +0100 Subject: [PATCH 26/47] clean up backblast --- addons/backblast/CfgWeapons.hpp | 12 ++-- addons/backblast/XEH_postInit.sqf | 1 - addons/backblast/XEH_preInit.sqf | 1 - .../functions/fnc_fireOverpressureZone.sqf | 2 +- .../functions/fnc_overpressureDamage.sqf | 70 ------------------- 5 files changed, 7 insertions(+), 79 deletions(-) delete mode 100644 addons/backblast/functions/fnc_overpressureDamage.sqf diff --git a/addons/backblast/CfgWeapons.hpp b/addons/backblast/CfgWeapons.hpp index f4f7c07153..5880795ee2 100644 --- a/addons/backblast/CfgWeapons.hpp +++ b/addons/backblast/CfgWeapons.hpp @@ -36,14 +36,14 @@ class CfgWeapons { class CannonCore; class cannon_120mm: CannonCore { - ACE_DangerZone_Angle = 90; - ACE_DangerZone_Range = 50; - ACE_DangerZone_Damage = 0.85; + GVAR(angle) = 90; + GVAR(range) = 50; + GVAR(damage) = 0.85; }; class mortar_155mm_AMOS: CannonCore { - ACE_DangerZone_Angle = 90; - ACE_DangerZone_Range = 60; - ACE_DangerZone_Damage = 1; + GVAR(angle) = 90; + GVAR(range) = 60; + GVAR(damage) = 1; }; }; diff --git a/addons/backblast/XEH_postInit.sqf b/addons/backblast/XEH_postInit.sqf index 72ca42a012..6f9a6f4cf8 100644 --- a/addons/backblast/XEH_postInit.sqf +++ b/addons/backblast/XEH_postInit.sqf @@ -1,4 +1,3 @@ #include "script_component.hpp" ["backblast", FUNC(backblastDamage)] call EFUNC(common,addEventHandler); -["overpressure", FUNC(overpressureDamage)] call EFUNC(common,addEventHandler); diff --git a/addons/backblast/XEH_preInit.sqf b/addons/backblast/XEH_preInit.sqf index 11193c3bf4..dde5f3affe 100644 --- a/addons/backblast/XEH_preInit.sqf +++ b/addons/backblast/XEH_preInit.sqf @@ -6,6 +6,5 @@ PREP(backblastDamage); PREP(fireLauncherBackblast); PREP(fireOverpressureZone); PREP(getDistance); -PREP(overpressureDamage); ADDON = true; diff --git a/addons/backblast/functions/fnc_fireOverpressureZone.sqf b/addons/backblast/functions/fnc_fireOverpressureZone.sqf index 0ded8f974b..178b519fc0 100644 --- a/addons/backblast/functions/fnc_fireOverpressureZone.sqf +++ b/addons/backblast/functions/fnc_fireOverpressureZone.sqf @@ -39,7 +39,7 @@ private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; // Let each client handle their own affected units -["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); +["backblast", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); // Draw debug lines #ifdef DEBUG_MODE_FULL diff --git a/addons/backblast/functions/fnc_overpressureDamage.sqf b/addons/backblast/functions/fnc_overpressureDamage.sqf deleted file mode 100644 index 995c5db9e4..0000000000 --- a/addons/backblast/functions/fnc_overpressureDamage.sqf +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Author: commy2 and CAA-Picard - * - * Calculate and apply overpressure damage to potentially affected local units - * - * Argument: - * 0: Unit that fired (Object) - * 1: Pos ASL of the projectile (Array) - * 2: Direction of the projectile (Array) - * 3: Weapon fired (String) - * - * Return value: - * None - */ -#include "script_component.hpp" - -EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); - -private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; - -_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; -_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); -_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); - -TRACE_4("Parameters:",_dangerZoneAngle,_dangerZoneRange,_dangerZoneDamage,_weapon); - -private "_pos"; -_pos = _posASL; -if (!surfaceIsWater _pos) then { - _pos = ASLtoATL _pos; -}; - -{ - if (local _x && {_x != _firer} && {vehicle _x == _x}) then { - private ["_targetPositionASL", "_relativePosition", "_axisDistance", "_distance", "_angle", "_line", "_line2"]; - - _targetPositionASL = eyePos _x; - _relativePosition = _targetPositionASL vectorDiff _posASL; - _axisDistance = _relativePosition vectorDotProduct _direction; - _distance = vectorMagnitude _relativePosition; - _angle = acos (_axisDistance / _distance); - - _line = [_posASL, _targetPositionASL, _firer, _x]; - _line2 = [_posASL, _targetPositionASL]; - TRACE_4("Affected:",_x,_axisDistance,_distance,_angle); - - if (_angle < _dangerZoneAngle && {_distance < _dangerZoneRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { - private ["_alpha", "_beta", "_damage"]; - - _alpha = sqrt (1 - _distance / _dangerZoneRange); - _beta = sqrt (1 - _angle / _dangerZoneAngle); - - _damage = 2 * _alpha * _beta * _dangerZoneDamage; - - // If the target is the ACE_player - if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; - - // @todo: Sort this interaction with medical - if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then { - [_x, "HitBody", ([_x, "", ((_x getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage); - _x spawn { - sleep 0.5; - [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage); - }; - } else { - _x setDamage (damage _x + _damage); - }; - }; - }; -} forEach (_pos nearEntities ["CAManBase", _dangerZoneRange]); From 2252f82de7a8279d5dca76f4c871a2ccd0617d8d Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 18:11:50 +0100 Subject: [PATCH 27/47] rename backblast to overpressure --- addons/backblast/$PBOPREFIX$ | 1 - addons/backblast/XEH_postInit.sqf | 3 --- .../backblast/functions/script_component.hpp | 1 - addons/backblast/script_component.hpp | 12 ----------- addons/overpressure/$PBOPREFIX$ | 1 + .../CfgEventHandlers.hpp | 0 .../CfgWeapons.hpp | 0 addons/{backblast => overpressure}/README.md | 0 addons/overpressure/XEH_postInit.sqf | 3 +++ .../XEH_preInit.sqf | 2 +- addons/{backblast => overpressure}/config.cpp | 0 .../functions/fnc_fireLauncherBackblast.sqf | 2 +- .../functions/fnc_fireOverpressureZone.sqf | 6 +++--- .../functions/fnc_getDistance.sqf | 0 .../functions/fnc_overpressureDamage.sqf} | 20 +++++++++---------- .../functions/script_component.hpp | 1 + addons/overpressure/script_component.hpp | 12 +++++++++++ 17 files changed, 32 insertions(+), 32 deletions(-) delete mode 100644 addons/backblast/$PBOPREFIX$ delete mode 100644 addons/backblast/XEH_postInit.sqf delete mode 100644 addons/backblast/functions/script_component.hpp delete mode 100644 addons/backblast/script_component.hpp create mode 100644 addons/overpressure/$PBOPREFIX$ rename addons/{backblast => overpressure}/CfgEventHandlers.hpp (100%) rename addons/{backblast => overpressure}/CfgWeapons.hpp (100%) rename addons/{backblast => overpressure}/README.md (100%) create mode 100644 addons/overpressure/XEH_postInit.sqf rename addons/{backblast => overpressure}/XEH_preInit.sqf (84%) rename addons/{backblast => overpressure}/config.cpp (100%) rename addons/{backblast => overpressure}/functions/fnc_fireLauncherBackblast.sqf (97%) rename addons/{backblast => overpressure}/functions/fnc_fireOverpressureZone.sqf (92%) rename addons/{backblast => overpressure}/functions/fnc_getDistance.sqf (100%) rename addons/{backblast/functions/fnc_backblastDamage.sqf => overpressure/functions/fnc_overpressureDamage.sqf} (69%) create mode 100644 addons/overpressure/functions/script_component.hpp create mode 100644 addons/overpressure/script_component.hpp diff --git a/addons/backblast/$PBOPREFIX$ b/addons/backblast/$PBOPREFIX$ deleted file mode 100644 index c5ed230994..0000000000 --- a/addons/backblast/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\backblast \ No newline at end of file diff --git a/addons/backblast/XEH_postInit.sqf b/addons/backblast/XEH_postInit.sqf deleted file mode 100644 index 6f9a6f4cf8..0000000000 --- a/addons/backblast/XEH_postInit.sqf +++ /dev/null @@ -1,3 +0,0 @@ -#include "script_component.hpp" - -["backblast", FUNC(backblastDamage)] call EFUNC(common,addEventHandler); diff --git a/addons/backblast/functions/script_component.hpp b/addons/backblast/functions/script_component.hpp deleted file mode 100644 index 817131570f..0000000000 --- a/addons/backblast/functions/script_component.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\backblast\script_component.hpp" \ No newline at end of file diff --git a/addons/backblast/script_component.hpp b/addons/backblast/script_component.hpp deleted file mode 100644 index 9f2a71f2d5..0000000000 --- a/addons/backblast/script_component.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#define COMPONENT backblast -#include "\z\ace\Addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_BACKBLAST - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_BACKBLAST - #define DEBUG_SETTINGS DEBUG_SETTINGS_BACKBLAST -#endif - -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/overpressure/$PBOPREFIX$ b/addons/overpressure/$PBOPREFIX$ new file mode 100644 index 0000000000..fc5a82e0f7 --- /dev/null +++ b/addons/overpressure/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\overpressure \ No newline at end of file diff --git a/addons/backblast/CfgEventHandlers.hpp b/addons/overpressure/CfgEventHandlers.hpp similarity index 100% rename from addons/backblast/CfgEventHandlers.hpp rename to addons/overpressure/CfgEventHandlers.hpp diff --git a/addons/backblast/CfgWeapons.hpp b/addons/overpressure/CfgWeapons.hpp similarity index 100% rename from addons/backblast/CfgWeapons.hpp rename to addons/overpressure/CfgWeapons.hpp diff --git a/addons/backblast/README.md b/addons/overpressure/README.md similarity index 100% rename from addons/backblast/README.md rename to addons/overpressure/README.md diff --git a/addons/overpressure/XEH_postInit.sqf b/addons/overpressure/XEH_postInit.sqf new file mode 100644 index 0000000000..33c2e679c9 --- /dev/null +++ b/addons/overpressure/XEH_postInit.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +["overpressure", FUNC(overpressureDamage)] call EFUNC(common,addEventHandler); diff --git a/addons/backblast/XEH_preInit.sqf b/addons/overpressure/XEH_preInit.sqf similarity index 84% rename from addons/backblast/XEH_preInit.sqf rename to addons/overpressure/XEH_preInit.sqf index dde5f3affe..5eefc5eae4 100644 --- a/addons/backblast/XEH_preInit.sqf +++ b/addons/overpressure/XEH_preInit.sqf @@ -2,9 +2,9 @@ ADDON = false; -PREP(backblastDamage); PREP(fireLauncherBackblast); PREP(fireOverpressureZone); PREP(getDistance); +PREP(overpressureDamage); ADDON = true; diff --git a/addons/backblast/config.cpp b/addons/overpressure/config.cpp similarity index 100% rename from addons/backblast/config.cpp rename to addons/overpressure/config.cpp diff --git a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf b/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf similarity index 97% rename from addons/backblast/functions/fnc_fireLauncherBackblast.sqf rename to addons/overpressure/functions/fnc_fireLauncherBackblast.sqf index 515135d56f..f42ffd23ed 100644 --- a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf +++ b/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf @@ -39,7 +39,7 @@ private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _backblastRange]; // Let each client handle their own affected units -["backblast", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); +["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); // Damage to the firer private "_distance"; diff --git a/addons/backblast/functions/fnc_fireOverpressureZone.sqf b/addons/overpressure/functions/fnc_fireOverpressureZone.sqf similarity index 92% rename from addons/backblast/functions/fnc_fireOverpressureZone.sqf rename to addons/overpressure/functions/fnc_fireOverpressureZone.sqf index 178b519fc0..cc4918275d 100644 --- a/addons/backblast/functions/fnc_fireOverpressureZone.sqf +++ b/addons/overpressure/functions/fnc_fireOverpressureZone.sqf @@ -1,5 +1,5 @@ /* - * Author: Commy2 and CAA-Picard + * Author: commy2 and CAA-Picard * * Handle fire of local vehicle weapons creating overpressure zones * @@ -20,7 +20,7 @@ EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -// Prevent AI from causing backblast damage +// Prevent AI from causing overpressure damage if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {}; //@todo non-maingun turrets? private ["_position", "_direction"]; @@ -39,7 +39,7 @@ private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; // Let each client handle their own affected units -["backblast", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); +["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); // Draw debug lines #ifdef DEBUG_MODE_FULL diff --git a/addons/backblast/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf similarity index 100% rename from addons/backblast/functions/fnc_getDistance.sqf rename to addons/overpressure/functions/fnc_getDistance.sqf diff --git a/addons/backblast/functions/fnc_backblastDamage.sqf b/addons/overpressure/functions/fnc_overpressureDamage.sqf similarity index 69% rename from addons/backblast/functions/fnc_backblastDamage.sqf rename to addons/overpressure/functions/fnc_overpressureDamage.sqf index 651dc58830..c19fed1c04 100644 --- a/addons/backblast/functions/fnc_backblastDamage.sqf +++ b/addons/overpressure/functions/fnc_overpressureDamage.sqf @@ -16,13 +16,13 @@ EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); -private ["_backblastAngle", "_backblastRange", "_backblastDamage"]; +private ["_overpressureAngle", "_overpressureRange", "_overpressureDamage"]; -_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; -_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); -_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); +_overpressureAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; +_overpressureRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); +_overpressureDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); -TRACE_4("Parameters:",_backblastAngle,_backblastRange,_backblastDamage,_weapon); +TRACE_4("Parameters:",_overpressureAngle,_overpressureRange,_overpressureDamage,_weapon); private "_pos"; _pos = _posASL; @@ -44,13 +44,13 @@ if (!surfaceIsWater _pos) then { _line2 = [_posASL, _targetPositionASL]; TRACE_4("Affected:",_x,_axisDistance,_distance,_angle); - if (_angle < _backblastAngle && {_distance < _backblastRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { + if (_angle < _overpressureAngle && {_distance < _overpressureRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then { private ["_alpha", "_beta", "_damage"]; - _alpha = sqrt (1 - _distance / _backblastRange); - _beta = sqrt (1 - _angle / _backblastAngle); + _alpha = sqrt (1 - _distance / _overpressureRange); + _beta = sqrt (1 - _angle / _overpressureAngle); - _damage = 2 * _alpha * _beta * _backblastDamage; + _damage = 2 * _alpha * _beta * _overpressureDamage; // If the target is the ACE_player if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect}; @@ -67,4 +67,4 @@ if (!surfaceIsWater _pos) then { }; }; }; -} forEach (_pos nearEntities ["CAManBase", _backblastRange]); +} forEach (_pos nearEntities ["CAManBase", _overpressureRange]); diff --git a/addons/overpressure/functions/script_component.hpp b/addons/overpressure/functions/script_component.hpp new file mode 100644 index 0000000000..d66ac7aec3 --- /dev/null +++ b/addons/overpressure/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\overpressure\script_component.hpp" \ No newline at end of file diff --git a/addons/overpressure/script_component.hpp b/addons/overpressure/script_component.hpp new file mode 100644 index 0000000000..8dac72cbbf --- /dev/null +++ b/addons/overpressure/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT overpressure +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_OVERPRESSURE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_OVERPRESSURE + #define DEBUG_SETTINGS DEBUG_ENABLED_OVERPRESSURE +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file From 618ac2f8f65279625678ec26e6d625c0202caff2 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 15 Feb 2015 18:44:10 +0100 Subject: [PATCH 28/47] change overpressure readme.md --- addons/overpressure/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overpressure/README.md b/addons/overpressure/README.md index 857776693a..3d3f242e40 100644 --- a/addons/overpressure/README.md +++ b/addons/overpressure/README.md @@ -1,4 +1,4 @@ -ace_backblast +ace_overpressure ============= Adds backblast to AT launchers and overpressure zones to tank cannons. From e8933d69c8cd582e0628689a5c67f7cc48d98842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 15 Feb 2015 15:42:54 -0300 Subject: [PATCH 29/47] overpressure: renamed more config entries; avoid handheld launchers producing overpressure in addition to backblast. --- addons/overpressure/CfgEventHandlers.hpp | 27 +++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/addons/overpressure/CfgEventHandlers.hpp b/addons/overpressure/CfgEventHandlers.hpp index 6258484c7c..9494a61149 100644 --- a/addons/overpressure/CfgEventHandlers.hpp +++ b/addons/overpressure/CfgEventHandlers.hpp @@ -14,12 +14,33 @@ class Extended_PostInit_EventHandlers { class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Backblast_Damage') > 0}) then {_this call DFUNC(fireLauncherBackblast)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireLauncherBackblast)}); }; }; - class AllVehicles { + + class Tank { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_DangerZone_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + }; + }; + class Car { + class ADDON { + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + }; + }; + class Helicopter { + class ADDON { + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + }; + }; + class Plane { + class ADDON { + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + }; + }; + class Ship_F { + class ADDON { + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); }; }; }; From be427388813b6c4d1d1414ff3e40fdf167c46055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 15 Feb 2015 15:56:37 -0300 Subject: [PATCH 30/47] macros --- addons/overpressure/CfgEventHandlers.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/overpressure/CfgEventHandlers.hpp b/addons/overpressure/CfgEventHandlers.hpp index 9494a61149..3503333139 100644 --- a/addons/overpressure/CfgEventHandlers.hpp +++ b/addons/overpressure/CfgEventHandlers.hpp @@ -14,33 +14,33 @@ class Extended_PostInit_EventHandlers { class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireLauncherBackblast)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage)) > 0}) then {_this call DFUNC(fireLauncherBackblast)}); }; }; class Tank { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); }; }; class Car { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); }; }; class Helicopter { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); }; }; class Plane { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); }; }; class Ship_F { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> 'ACE_Overpressure_Damage') > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); }; }; }; From 25645c2ae994de3f2b8140850f7da7e2f3677a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Sun, 15 Feb 2015 16:25:09 -0300 Subject: [PATCH 31/47] mm --- addons/overpressure/CfgEventHandlers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overpressure/CfgEventHandlers.hpp b/addons/overpressure/CfgEventHandlers.hpp index 3503333139..40c3b32a57 100644 --- a/addons/overpressure/CfgEventHandlers.hpp +++ b/addons/overpressure/CfgEventHandlers.hpp @@ -14,7 +14,7 @@ class Extended_PostInit_EventHandlers { class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage)) > 0}) then {_this call DFUNC(fireLauncherBackblast)}); + firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireLauncherBackblast)}); }; }; From da19a89be867d51cffbf000092ffd025cf25e061 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 16 Feb 2015 15:56:36 +0100 Subject: [PATCH 32/47] Replaced _targetUnit for ObjNull Replaced _targetUnit for objNull. --- addons/missionModules/functions/fnc_moduleAmbianceSound.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/missionModules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionModules/functions/fnc_moduleAmbianceSound.sqf index f35f14b30c..95153be8d1 100644 --- a/addons/missionModules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionModules/functions/fnc_moduleAmbianceSound.sqf @@ -112,7 +112,7 @@ if (_activated && local _logic) then { // If no unit is to close to this position, we will play the sound. if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { - playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), _targetUnit, false, _newPos, _volume, 1, 1000]; + playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; _args set [8, time]; }; }; From 1f737dc91495f5ef801e6712a4b83dd202847cec Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Mon, 16 Feb 2015 19:08:27 +0100 Subject: [PATCH 33/47] Add editorconfig --- .editorconfig | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..f6f23b8d1b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + From d60081a9c311620e61926d8a7e87ac4da3a6e5cf Mon Sep 17 00:00:00 2001 From: Glowbal Date: Tue, 17 Feb 2015 07:49:37 +0100 Subject: [PATCH 34/47] Renamed missionModules to missionmodules. --- addons/missionModules/functions/script_component.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/missionModules/functions/script_component.hpp b/addons/missionModules/functions/script_component.hpp index e49740a89e..42d34d4801 100644 --- a/addons/missionModules/functions/script_component.hpp +++ b/addons/missionModules/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\addons\missionModules\script_component.hpp" \ No newline at end of file +#include "\z\ace\addons\missionmodules\script_component.hpp" \ No newline at end of file From d86e2464b3d35315e5c38b5a3e459a0b016e1ee5 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Tue, 17 Feb 2015 07:51:35 +0100 Subject: [PATCH 35/47] Removed missionModules --- addons/missionModules/$PBOPREFIX$ | 1 - addons/missionModules/CfgEventHandlers.hpp | 6 - addons/missionModules/CfgFactionClasses.hpp | 6 - addons/missionModules/CfgVehicles.hpp | 68 ---------- addons/missionModules/XEH_preInit.sqf | 7 - addons/missionModules/config.cpp | 17 --- addons/missionModules/data/moduleSound.paa | Bin 5625 -> 0 bytes .../functions/fnc_moduleAmbianceSound.sqf | 123 ------------------ .../functions/script_component.hpp | 1 - addons/missionModules/script_component.hpp | 12 -- 10 files changed, 241 deletions(-) delete mode 100644 addons/missionModules/$PBOPREFIX$ delete mode 100644 addons/missionModules/CfgEventHandlers.hpp delete mode 100644 addons/missionModules/CfgFactionClasses.hpp delete mode 100644 addons/missionModules/CfgVehicles.hpp delete mode 100644 addons/missionModules/XEH_preInit.sqf delete mode 100644 addons/missionModules/config.cpp delete mode 100644 addons/missionModules/data/moduleSound.paa delete mode 100644 addons/missionModules/functions/fnc_moduleAmbianceSound.sqf delete mode 100644 addons/missionModules/functions/script_component.hpp delete mode 100644 addons/missionModules/script_component.hpp diff --git a/addons/missionModules/$PBOPREFIX$ b/addons/missionModules/$PBOPREFIX$ deleted file mode 100644 index ea1be0daee..0000000000 --- a/addons/missionModules/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\missionModules \ No newline at end of file diff --git a/addons/missionModules/CfgEventHandlers.hpp b/addons/missionModules/CfgEventHandlers.hpp deleted file mode 100644 index f0a9f14d91..0000000000 --- a/addons/missionModules/CfgEventHandlers.hpp +++ /dev/null @@ -1,6 +0,0 @@ - -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_preInit)); - }; -}; diff --git a/addons/missionModules/CfgFactionClasses.hpp b/addons/missionModules/CfgFactionClasses.hpp deleted file mode 100644 index 792f4d31e3..0000000000 --- a/addons/missionModules/CfgFactionClasses.hpp +++ /dev/null @@ -1,6 +0,0 @@ -class CfgFactionClasses { - class NO_CATEGORY; - class ACE_missionModules: NO_CATEGORY { - displayName = "ACE Mission Modules"; - }; -}; \ No newline at end of file diff --git a/addons/missionModules/CfgVehicles.hpp b/addons/missionModules/CfgVehicles.hpp deleted file mode 100644 index afdb58006b..0000000000 --- a/addons/missionModules/CfgVehicles.hpp +++ /dev/null @@ -1,68 +0,0 @@ -class CfgVehicles { - class Logic; - class Module_F: Logic { - class ArgumentsBaseUnits { - }; - }; - - // TODO make a curator variant for this - class ACE_moduleAmbianceSound: Module_F { - scope = 2; - displayName = "Ambiance Sounds [ACE]"; - icon = QUOTE(PATHTOF(data\moduleSound.paa)); - category = "ACE_missionModules"; - function = QUOTE(FUNC(moduleAmbianceSound); - functionPriority = 1; - isGlobal = 1; - isTriggerActivated = 0; - author = "Glowbal"; - class Arguments { - class soundFiles { - displayName = "Sounds"; - description = "Classnames of the ambiance sounds played. Seperated by ','. "; - typeName = "STRING"; - defaultValue = ""; - }; - class minimalDistance { - displayName = "Minimal Distance"; - description = "Minimal Distance"; - typeName = "NUMBER"; - defaultValue = 400; - }; - class maximalDistance { - displayName = "Maximal Distance"; - description = "Maximal Distance"; - typeName = "NUMBER"; - defaultValue = 900; - }; - class minimalDelay { - displayName = "Minimal Delay"; - description = "Minimal Delay between sounds played"; - typeName = "NUMBER"; - defaultValue = 10; - }; - class maximalDelay { - displayName = "Maximal Delay"; - description = "Maximal Delay between sounds played"; - typeName = "NUMBER"; - defaultValue = 170; - }; - class followPlayers { - displayName = "Follow Players"; - description = "Follow players. If set to false, loop will play sounds only nearby logic position."; - typeName = "BOOL"; - defaultValue = 0; - }; - class soundVolume { - displayName = "Volume"; - description = "The volume of the sounds played"; - typeName = "NUMBER"; - defaultValue = 0; - }; - }; - class ModuleDescription { - description = "Ambiance sounds loop (synced across MP)"; - sync[] = {}; - }; - }; -}; diff --git a/addons/missionModules/XEH_preInit.sqf b/addons/missionModules/XEH_preInit.sqf deleted file mode 100644 index cadbbabdd1..0000000000 --- a/addons/missionModules/XEH_preInit.sqf +++ /dev/null @@ -1,7 +0,0 @@ -#include "script_component.hpp" - -ADDON = false; - -PREP(moduleAmbianceSound); - -ADDON = true; diff --git a/addons/missionModules/config.cpp b/addons/missionModules/config.cpp deleted file mode 100644 index 0867b486c6..0000000000 --- a/addons/missionModules/config.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {"cse_moduleAmbianceSound"}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"Glowbal"}; - authorUrl = ""; - VERSION_CONFIG; - }; -}; - -#include "CfgEventHandlers.hpp" -#include "CfgFactionClasses.hpp" -#include "CfgVehicles.hpp" diff --git a/addons/missionModules/data/moduleSound.paa b/addons/missionModules/data/moduleSound.paa deleted file mode 100644 index bfe3b8032717dcc98269b4b42a620cffe550ffc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5625 zcmd5=e{2)i9e)QtpfrHPa-m>_7$qGojBP2JHAXidD=lKvOSnciRHiZp3io($CfVu3Ih4Y{*BB>0gjI}tEY4lCyKj^3 zi|MspB)_I9Qgx5++xQ+GAF#}rEAi6)SgR2uT;uV0M$+GvaQ(#H9}xS?WmyKjWzk^2 zNzcQW;MZidnf$!>++Lhj?%eeIpGtziBC+buc2ZUhGN$7o{p|Y_&10xliB==phYGcr8`S2cb3wu zSJO0FbEhH0o>*@a^2330*Os!%?HPIs=*>Ht3JmIghu|*BN=Fax<2*v*2zg37n~I_l zvuOp1~efUHq1t$YIb<=rbwS zTrcQpUhjzXYHsxVyH5nfdE>YxM~e3~1{1=bAg7M@d>{Fz$PcEznj%j-Sr-`;E@UQk zQ%W=8le|+&`CYHlo@`?-%h+-aPK=XB!7Q0@uvl zk~H~J)3;+sOn<@gdX~1F2=F@pO`4Y=pKA{{ih0US7~4l2ZHeSrF3!i~kXHre!}Y@c zP~XdDtCPF%p;?fZ%~k(hpV7__KYu$I&W)uH29ukQ!Cc^o8gi!2->3UUe9E%THmf0Q zTsUN8<7HeGl+Vt~a$AbuYUH0o|BNJeHbGk-Z{+Ere3Dmnv_1+KqTMjB=U(a$b{;-6 zzc4iZ3Di4N{_5i{f3GXhO~_`GW%kmP#F*J;J)-sFmSP?uO!IU;(7&&hr;0QC@2ovz z3-%y>l5ihkZ6=ksK>1eVIAM@i^LD}cUF(EDfV@(07E3F~Wc@c6Pf23lh`?V>iWc4M z`dp0j&)*$#tfK$P|G#y0L*l&qaS?wMfyF&b{MX`O{fI8!$wXwry{egRWm$pFp z{y>`MA)mBh5Aqkkb=l&hj--Fhjd&oPi5~=z^p(|AlqMfu%Gp?i68y-kT`Dz1+<3b z<$c9;CtdTx;i6ck|MGfA>_>9#Q+h5Q7_jV*@=E>2Esi71(4W)NRDZ#3xHI;cHA?@; z<(G?d&v#ynUfUZd{#1V?*3m-&#@%$Iy`|^e#>Hkc9?+hA!G5{)M~i2jYll6|dd$$D zR)0X8Be1{8Upe@-w3`5=Q9-=?2KtXFp9)OTGQSFkA2Lj=c}(p3w}oZ4G=ctW9oi4< zr*2R=xTFyP!>q?9KaP56@|$%on7G*D6aK=`UyoLwyIp@@cmGg)E1Kr+;jL-cv!*;u z)@FA=&{SZHDJ_#uoFU1F>~(_jCm+&BtmntyvDT}g$DiA1>Bl@;UiY3!nfQUa_gvq* zwb%dKekXIHkY=R<$fjcYGlSh9iZ&KyjMBcs8aBK9SId5$Z9^J1hwG!^7Z8h7Chc~y zzRAF|A*~;Z!VEp4O~Z+c&YynMaN;8TU{bH0yK>v3G(%zjHqY*)0JwO9CW)BVG zJ*YDB^0;y9tW`GfULspIGVAAGN0_?S3436ZaxYoN8IUw|Rqu_G7u7KTl-MPM?0gOc`ug7=QW2VESaxEQ|DzF~Gcf`Ss=k z!5@80$+70ue>^-^&<8!+w(EE;@MgU@FXFFWrn38tNE@g!N=@f3^qiN9Y5(x27AJTU z=ZAa#5twV0X_O^x28Z$A&pS=)$^KtzKk;MPDzj+fwB>Q#-`x>urFlHnvF~!UO>diN z1yv&Jpc(olz3l-5or{nk44&+4GA;!F4$kl&=$B9LESij$36p&hUd;VmNUJ6YMgF6JLbOVk`ZbHcCR84R!G;@r-_u zAOuge55r}#NM0sQs>9M`hMq}%DBkSUY)Wi(n$)N*vDA>Kx9MZQ8d)rk1;xlSy{&nF z{&N3bnupD7Ptbb2a4^?R|X+6c1 zGkO0 - * 1: Units - * 2: Activated - * - * Return Value: - * Nothing - * - * Example: - * N/A - * - * Public: No - */ - -#include "script_component.hpp" - -private ["_logic", "_units", "_activated","_ambianceSounds", "_soundFiles", "_minimalDistance","_maximalDistance", "_minimalDistance", "_maxDelayBetweenSounds", "_allUnits", "_newPos", "_targetUnit", "_soundToPlay", "_soundPath", "_unparsedSounds", "_list", "_splittedList", "_nilCheckPassedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_units = [_this,1,[],[[]]] call BIS_fnc_param; -_activated = [_this,2,true,[true]] call BIS_fnc_param; - -// We only play this on the locality of the logic, since the sounds are broadcasted across the network -if (_activated && local _logic) then { - _ambianceSounds = []; - _unparsedSounds = _logic getvariable ["soundFiles", ""]; - _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; - _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; - _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; - _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; - _volume = (_logic getvariable ["soundVolume", 30]) max 1; - _followPlayers = _logic getvariable ["followPlayers", false]; - - _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; - - _nilCheckPassedList = ""; - { - _x = [_x] call EFUNC(common,removeWhiteSpace); - _splittedList set [_foreachIndex, _x]; - }foreach _splittedList; - - _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; - { - if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); - } else { - if (isclass (configFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); - }; - }; - }foreach _splittedList; - - if (count _ambianceSounds == 0) exitwith {}; - { - if !([".", _x, true] call BIS_fnc_inString) then { - _ambianceSounds set [_foreachIndex, _x + ".wss"]; - }; - }foreach _ambianceSounds; - - [{ - private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"] - _args = _this select 0; - _logic = _args select 0; - _lastTimePlayed = _args select 8; - - if (!alive _logic) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - if (_lastTimePlayed - time >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { - _ambianceSounds = _args select 1; - _minimalDistance = _args select 2; - _maximalDistance = _args select 3; - _minDelayBetweensounds = _args select 4; - _maxDelayBetweenSounds = _args select 5; - _volume = _args select 6; - _followPlayers = _args select 7; - - // Find all players in session. - _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; - - // Check if there are enough players to even start playing this sound. - if (count _allUnits > 0) then { - - // Select a target unit at random. - _targetUnit = _allUnits select (round(random((count _allUnits)-1))); - - // find the position from which we are going to play this sound from. - _newPos = (getPos _targetUnit); - if (!_followPlayers) then { - _newPos = getPos _logic; - }; - - // Randomize this position. - if (random(1) >= 0.5) then { - if (random(1) >= 0.5) then { - _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; - }; - } else { - if (random(1) >= 0.5) then { - _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; - }; - }; - - // If no unit is to close to this position, we will play the sound. - if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { - - playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; - _args set [8, time]; - }; - }; - }; - }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call CBA_fnc_addPerFrameHandler; -}; - -true; diff --git a/addons/missionModules/functions/script_component.hpp b/addons/missionModules/functions/script_component.hpp deleted file mode 100644 index 42d34d4801..0000000000 --- a/addons/missionModules/functions/script_component.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\missionmodules\script_component.hpp" \ No newline at end of file diff --git a/addons/missionModules/script_component.hpp b/addons/missionModules/script_component.hpp deleted file mode 100644 index a567966c7b..0000000000 --- a/addons/missionModules/script_component.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#define COMPONENT missionModules -#include "\z\ace\addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_MISSIONMODULES - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_MISSIONMODULES - #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSIONMODULES -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From bfc748fbbef1d9745c0a0d0cb35133a17b9b9c6f Mon Sep 17 00:00:00 2001 From: Glowbal Date: Tue, 17 Feb 2015 07:51:51 +0100 Subject: [PATCH 36/47] Added missionmodules. --- addons/missionmodules/$PBOPREFIX$ | 1 + addons/missionmodules/CfgEventHandlers.hpp | 6 + addons/missionmodules/CfgFactionClasses.hpp | 6 + addons/missionmodules/CfgVehicles.hpp | 68 ++++++++++ addons/missionmodules/XEH_preInit.sqf | 7 + addons/missionmodules/config.cpp | 17 +++ addons/missionmodules/data/moduleSound.paa | Bin 0 -> 5625 bytes .../functions/fnc_moduleAmbianceSound.sqf | 123 ++++++++++++++++++ .../functions/script_component.hpp | 1 + addons/missionmodules/script_component.hpp | 12 ++ 10 files changed, 241 insertions(+) create mode 100644 addons/missionmodules/$PBOPREFIX$ create mode 100644 addons/missionmodules/CfgEventHandlers.hpp create mode 100644 addons/missionmodules/CfgFactionClasses.hpp create mode 100644 addons/missionmodules/CfgVehicles.hpp create mode 100644 addons/missionmodules/XEH_preInit.sqf create mode 100644 addons/missionmodules/config.cpp create mode 100644 addons/missionmodules/data/moduleSound.paa create mode 100644 addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf create mode 100644 addons/missionmodules/functions/script_component.hpp create mode 100644 addons/missionmodules/script_component.hpp diff --git a/addons/missionmodules/$PBOPREFIX$ b/addons/missionmodules/$PBOPREFIX$ new file mode 100644 index 0000000000..ea1be0daee --- /dev/null +++ b/addons/missionmodules/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\missionModules \ No newline at end of file diff --git a/addons/missionmodules/CfgEventHandlers.hpp b/addons/missionmodules/CfgEventHandlers.hpp new file mode 100644 index 0000000000..f0a9f14d91 --- /dev/null +++ b/addons/missionmodules/CfgEventHandlers.hpp @@ -0,0 +1,6 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; diff --git a/addons/missionmodules/CfgFactionClasses.hpp b/addons/missionmodules/CfgFactionClasses.hpp new file mode 100644 index 0000000000..792f4d31e3 --- /dev/null +++ b/addons/missionmodules/CfgFactionClasses.hpp @@ -0,0 +1,6 @@ +class CfgFactionClasses { + class NO_CATEGORY; + class ACE_missionModules: NO_CATEGORY { + displayName = "ACE Mission Modules"; + }; +}; \ No newline at end of file diff --git a/addons/missionmodules/CfgVehicles.hpp b/addons/missionmodules/CfgVehicles.hpp new file mode 100644 index 0000000000..afdb58006b --- /dev/null +++ b/addons/missionmodules/CfgVehicles.hpp @@ -0,0 +1,68 @@ +class CfgVehicles { + class Logic; + class Module_F: Logic { + class ArgumentsBaseUnits { + }; + }; + + // TODO make a curator variant for this + class ACE_moduleAmbianceSound: Module_F { + scope = 2; + displayName = "Ambiance Sounds [ACE]"; + icon = QUOTE(PATHTOF(data\moduleSound.paa)); + category = "ACE_missionModules"; + function = QUOTE(FUNC(moduleAmbianceSound); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "Glowbal"; + class Arguments { + class soundFiles { + displayName = "Sounds"; + description = "Classnames of the ambiance sounds played. Seperated by ','. "; + typeName = "STRING"; + defaultValue = ""; + }; + class minimalDistance { + displayName = "Minimal Distance"; + description = "Minimal Distance"; + typeName = "NUMBER"; + defaultValue = 400; + }; + class maximalDistance { + displayName = "Maximal Distance"; + description = "Maximal Distance"; + typeName = "NUMBER"; + defaultValue = 900; + }; + class minimalDelay { + displayName = "Minimal Delay"; + description = "Minimal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 10; + }; + class maximalDelay { + displayName = "Maximal Delay"; + description = "Maximal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 170; + }; + class followPlayers { + displayName = "Follow Players"; + description = "Follow players. If set to false, loop will play sounds only nearby logic position."; + typeName = "BOOL"; + defaultValue = 0; + }; + class soundVolume { + displayName = "Volume"; + description = "The volume of the sounds played"; + typeName = "NUMBER"; + defaultValue = 0; + }; + }; + class ModuleDescription { + description = "Ambiance sounds loop (synced across MP)"; + sync[] = {}; + }; + }; +}; diff --git a/addons/missionmodules/XEH_preInit.sqf b/addons/missionmodules/XEH_preInit.sqf new file mode 100644 index 0000000000..cadbbabdd1 --- /dev/null +++ b/addons/missionmodules/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(moduleAmbianceSound); + +ADDON = true; diff --git a/addons/missionmodules/config.cpp b/addons/missionmodules/config.cpp new file mode 100644 index 0000000000..0867b486c6 --- /dev/null +++ b/addons/missionmodules/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {"cse_moduleAmbianceSound"}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Glowbal"}; + authorUrl = ""; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgFactionClasses.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/missionmodules/data/moduleSound.paa b/addons/missionmodules/data/moduleSound.paa new file mode 100644 index 0000000000000000000000000000000000000000..bfe3b8032717dcc98269b4b42a620cffe550ffc2 GIT binary patch literal 5625 zcmd5=e{2)i9e)QtpfrHPa-m>_7$qGojBP2JHAXidD=lKvOSnciRHiZp3io($CfVu3Ih4Y{*BB>0gjI}tEY4lCyKj^3 zi|MspB)_I9Qgx5++xQ+GAF#}rEAi6)SgR2uT;uV0M$+GvaQ(#H9}xS?WmyKjWzk^2 zNzcQW;MZidnf$!>++Lhj?%eeIpGtziBC+buc2ZUhGN$7o{p|Y_&10xliB==phYGcr8`S2cb3wu zSJO0FbEhH0o>*@a^2330*Os!%?HPIs=*>Ht3JmIghu|*BN=Fax<2*v*2zg37n~I_l zvuOp1~efUHq1t$YIb<=rbwS zTrcQpUhjzXYHsxVyH5nfdE>YxM~e3~1{1=bAg7M@d>{Fz$PcEznj%j-Sr-`;E@UQk zQ%W=8le|+&`CYHlo@`?-%h+-aPK=XB!7Q0@uvl zk~H~J)3;+sOn<@gdX~1F2=F@pO`4Y=pKA{{ih0US7~4l2ZHeSrF3!i~kXHre!}Y@c zP~XdDtCPF%p;?fZ%~k(hpV7__KYu$I&W)uH29ukQ!Cc^o8gi!2->3UUe9E%THmf0Q zTsUN8<7HeGl+Vt~a$AbuYUH0o|BNJeHbGk-Z{+Ere3Dmnv_1+KqTMjB=U(a$b{;-6 zzc4iZ3Di4N{_5i{f3GXhO~_`GW%kmP#F*J;J)-sFmSP?uO!IU;(7&&hr;0QC@2ovz z3-%y>l5ihkZ6=ksK>1eVIAM@i^LD}cUF(EDfV@(07E3F~Wc@c6Pf23lh`?V>iWc4M z`dp0j&)*$#tfK$P|G#y0L*l&qaS?wMfyF&b{MX`O{fI8!$wXwry{egRWm$pFp z{y>`MA)mBh5Aqkkb=l&hj--Fhjd&oPi5~=z^p(|AlqMfu%Gp?i68y-kT`Dz1+<3b z<$c9;CtdTx;i6ck|MGfA>_>9#Q+h5Q7_jV*@=E>2Esi71(4W)NRDZ#3xHI;cHA?@; z<(G?d&v#ynUfUZd{#1V?*3m-&#@%$Iy`|^e#>Hkc9?+hA!G5{)M~i2jYll6|dd$$D zR)0X8Be1{8Upe@-w3`5=Q9-=?2KtXFp9)OTGQSFkA2Lj=c}(p3w}oZ4G=ctW9oi4< zr*2R=xTFyP!>q?9KaP56@|$%on7G*D6aK=`UyoLwyIp@@cmGg)E1Kr+;jL-cv!*;u z)@FA=&{SZHDJ_#uoFU1F>~(_jCm+&BtmntyvDT}g$DiA1>Bl@;UiY3!nfQUa_gvq* zwb%dKekXIHkY=R<$fjcYGlSh9iZ&KyjMBcs8aBK9SId5$Z9^J1hwG!^7Z8h7Chc~y zzRAF|A*~;Z!VEp4O~Z+c&YynMaN;8TU{bH0yK>v3G(%zjHqY*)0JwO9CW)BVG zJ*YDB^0;y9tW`GfULspIGVAAGN0_?S3436ZaxYoN8IUw|Rqu_G7u7KTl-MPM?0gOc`ug7=QW2VESaxEQ|DzF~Gcf`Ss=k z!5@80$+70ue>^-^&<8!+w(EE;@MgU@FXFFWrn38tNE@g!N=@f3^qiN9Y5(x27AJTU z=ZAa#5twV0X_O^x28Z$A&pS=)$^KtzKk;MPDzj+fwB>Q#-`x>urFlHnvF~!UO>diN z1yv&Jpc(olz3l-5or{nk44&+4GA;!F4$kl&=$B9LESij$36p&hUd;VmNUJ6YMgF6JLbOVk`ZbHcCR84R!G;@r-_u zAOuge55r}#NM0sQs>9M`hMq}%DBkSUY)Wi(n$)N*vDA>Kx9MZQ8d)rk1;xlSy{&nF z{&N3bnupD7Ptbb2a4^?R|X+6c1 zGkO0 + * 1: Units + * 2: Activated + * + * Return Value: + * Nothing + * + * Example: + * N/A + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated","_ambianceSounds", "_soundFiles", "_minimalDistance","_maximalDistance", "_minimalDistance", "_maxDelayBetweenSounds", "_allUnits", "_newPos", "_targetUnit", "_soundToPlay", "_soundPath", "_unparsedSounds", "_list", "_splittedList", "_nilCheckPassedList"]; +_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +_units = [_this,1,[],[[]]] call BIS_fnc_param; +_activated = [_this,2,true,[true]] call BIS_fnc_param; + +// We only play this on the locality of the logic, since the sounds are broadcasted across the network +if (_activated && local _logic) then { + _ambianceSounds = []; + _unparsedSounds = _logic getvariable ["soundFiles", ""]; + _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; + _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; + _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; + _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; + _volume = (_logic getvariable ["soundVolume", 30]) max 1; + _followPlayers = _logic getvariable ["followPlayers", false]; + + _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; + + _nilCheckPassedList = ""; + { + _x = [_x] call EFUNC(common,removeWhiteSpace); + _splittedList set [_foreachIndex, _x]; + }foreach _splittedList; + + _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; + { + if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); + } else { + if (isclass (configFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); + }; + }; + }foreach _splittedList; + + if (count _ambianceSounds == 0) exitwith {}; + { + if !([".", _x, true] call BIS_fnc_inString) then { + _ambianceSounds set [_foreachIndex, _x + ".wss"]; + }; + }foreach _ambianceSounds; + + [{ + private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"] + _args = _this select 0; + _logic = _args select 0; + _lastTimePlayed = _args select 8; + + if (!alive _logic) exitwith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + if (_lastTimePlayed - time >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { + _ambianceSounds = _args select 1; + _minimalDistance = _args select 2; + _maximalDistance = _args select 3; + _minDelayBetweensounds = _args select 4; + _maxDelayBetweenSounds = _args select 5; + _volume = _args select 6; + _followPlayers = _args select 7; + + // Find all players in session. + _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; + + // Check if there are enough players to even start playing this sound. + if (count _allUnits > 0) then { + + // Select a target unit at random. + _targetUnit = _allUnits select (round(random((count _allUnits)-1))); + + // find the position from which we are going to play this sound from. + _newPos = (getPos _targetUnit); + if (!_followPlayers) then { + _newPos = getPos _logic; + }; + + // Randomize this position. + if (random(1) >= 0.5) then { + if (random(1) >= 0.5) then { + _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; + }; + } else { + if (random(1) >= 0.5) then { + _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; + }; + }; + + // If no unit is to close to this position, we will play the sound. + if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { + + playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; + _args set [8, time]; + }; + }; + }; + }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call CBA_fnc_addPerFrameHandler; +}; + +true; diff --git a/addons/missionmodules/functions/script_component.hpp b/addons/missionmodules/functions/script_component.hpp new file mode 100644 index 0000000000..42d34d4801 --- /dev/null +++ b/addons/missionmodules/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\missionmodules\script_component.hpp" \ No newline at end of file diff --git a/addons/missionmodules/script_component.hpp b/addons/missionmodules/script_component.hpp new file mode 100644 index 0000000000..a567966c7b --- /dev/null +++ b/addons/missionmodules/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT missionModules +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MISSIONMODULES + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSIONMODULES + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSIONMODULES +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From b86869d7a1c7e90b5b06b55eec50472d130b9657 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 17 Feb 2015 22:37:04 -0600 Subject: [PATCH 37/47] UAV-Recharge Headers --- .../functions/fnc_canRefuelUAV.sqf | 30 ++++++++++--------- .../functions/fnc_refuelUAV.sqf | 30 ++++++++++--------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf index 4256ddabf9..aaaac3077d 100644 --- a/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf @@ -1,17 +1,19 @@ -/* fnc_refuel.sqf -* -* Author: marc_book (modified by PabstMirror) -* -* Tests if unit can refuel the target UAV -* -* Argument: -* 0: OBJECT - Player unit -* 1: OBJECT - UAV to test -* -* Return value: -* BOOL -*/ - +/* + * Author: marc_book + * Tests if unit can refuel the target UAV + * + * Arguments: + * 0: Player + * 1: UAV + * + * Return Value: + * Can the player rechange the UAV + * + * Example: + * [player, theUAV] call ace_logistics_uavbattery_fnc_canRefuelUAV + * + * Public: No + */ #include "script_component.hpp" PARAMS_2(_caller,_target); diff --git a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf index 5a248bf812..a23969aa9f 100644 --- a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf @@ -1,17 +1,19 @@ -/* fnc_refuel.sqf -* -* Author: marc_book (modified by PabstMirror) -* -* Starts refueling/recharging the 'Dartar' UAVs -* -* Argument: -* 0: OBJECT - Player unit -* 1: OBJECT - UAV -* -* Return value: -* NOTHING -*/ - +/* + * Author: marc_book + * Starts refueling/recharging the 'Dartar' UAVs + * + * Arguments: + * 0: Player + * 1: UAV + * + * Return Value: + * Nothing + * + * Example: + * [player, theUAV] call ace_logistics_uavbattery_fnc_refuelUAV + * + * Public: No + */ #include "script_component.hpp" PARAMS_2(_caller,_target); From 8c833206752f625396fec58977721e6b3719313d Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Thu, 19 Feb 2015 12:32:41 +0200 Subject: [PATCH 38/47] Separated dialing phone code into separate function to neaten up the original function. --- addons/explosives/functions/fnc_dialPhone.sqf | 28 +----------- .../explosives/functions/fnc_dialingPhone.sqf | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 27 deletions(-) create mode 100644 addons/explosives/functions/fnc_dialingPhone.sqf diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index 3bb2cc45e8..f694ff3d5f 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -28,33 +28,7 @@ for [{_i=0}, {_i<_ran}, {_i=_i+1}] do { }; if (_unit == ace_player) then { ctrlSetText [1400,"Calling"]; - [{ - EXPLODE_4_PVT(_this select 0,_unit,_i,_arr,_code); - if ((_i mod 4) == 0) then { - playSound3D [QUOTE(PATHTOF_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; - }; - ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]]; - if (_i >= (count _arr + 2)) then { - [_this select 1] call CALLSTACK(cba_fnc_removePerFrameHandler); - private "_explosive"; - _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); - if (!isNull (_explosive)) then { - [_unit, -1, [_explosive, 1]] call FUNC(detonateExplosive); - }; - _unit setVariable [QGVAR(Dialing), false, true]; - if (_unit == ace_player) then { - ctrlSetText [1400,"Call Ended!"]; - }; - }; - if (_i == (count _arr)) then { - private "_explosive"; - _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); - if (!isNull (_explosive)) then { - playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL _explosive,3.16228,1,75]; - }; - }; - (_this select 0) set [1, _i + 1]; - }, 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); + [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); } else { private ["_explosive"]; _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf new file mode 100644 index 0000000000..7b71d0e5af --- /dev/null +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -0,0 +1,44 @@ +/* + * Author: Garth 'L-H' de Wet + * Performs the dial tones and detonation of explosive. + * + * Arguments: + * 0: Unit to do dialing + * 1: Index + * 2: Dialing points + * 3: IED code + * + * Return Value: + * None + * + * Example: + * [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); + * + * Public: No + */ +#include "script_component.hpp" +EXPLODE_4_PVT(_this select 0,_unit,_i,_arr,_code); +if ((_i mod 4) == 0) then { + playSound3D [QUOTE(PATHTOF_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; +}; +ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]]; +if (_i >= (count _arr + 2)) then { + [_this select 1] call CALLSTACK(cba_fnc_removePerFrameHandler); + private "_explosive"; + _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); + if (!isNull (_explosive)) then { + [_unit, -1, [_explosive, 1]] call FUNC(detonateExplosive); + }; + _unit setVariable [QGVAR(Dialing), false, true]; + if (_unit == ace_player) then { + ctrlSetText [1400,"Call Ended!"]; + }; +}; +if (_i == (count _arr)) then { + private "_explosive"; + _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); + if (!isNull (_explosive)) then { + playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL _explosive,3.16228,1,75]; + }; +}; +(_this select 0) set [1, _i + 1]; From 00643c3c83011b1d5038f4213e87d2733f1871f9 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Thu, 19 Feb 2015 12:39:13 +0200 Subject: [PATCH 39/47] Ensured actual fuse time is used instead of simply 1. --- addons/explosives/functions/fnc_addCellphoneIED.sqf | 2 +- addons/explosives/functions/fnc_dialingPhone.sqf | 12 ++++++------ .../functions/fnc_getSpeedDialExplosive.sqf | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index b13473cf25..49bec07f1b 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -43,7 +43,7 @@ while {!_codeSet} do { if (isNil QGVAR(CellphoneIEDs)) then { GVAR(CellphoneIEDs) = []; }; -_count = GVAR(CellphoneIEDs) pushBack [_explosive,_code]; +_count = GVAR(CellphoneIEDs) pushBack [_explosive,_code,GetNumber(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> "Cellphone" >> "FuseTime")]; _count = _count + 1; publicVariable QGVAR(CellphoneIEDs); _unit sideChat format ["IED %1 code: %2", _count,_code]; diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf index 7b71d0e5af..c50f618abe 100644 --- a/addons/explosives/functions/fnc_dialingPhone.sqf +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -22,12 +22,14 @@ if ((_i mod 4) == 0) then { playSound3D [QUOTE(PATHTOF_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; }; ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]]; + +private "_explosive"; +_explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); + if (_i >= (count _arr + 2)) then { [_this select 1] call CALLSTACK(cba_fnc_removePerFrameHandler); - private "_explosive"; - _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); if (!isNull (_explosive)) then { - [_unit, -1, [_explosive, 1]] call FUNC(detonateExplosive); + [_unit, -1, [_explosive select 0, _explosive select 2]] call FUNC(detonateExplosive); }; _unit setVariable [QGVAR(Dialing), false, true]; if (_unit == ace_player) then { @@ -35,10 +37,8 @@ if (_i >= (count _arr + 2)) then { }; }; if (_i == (count _arr)) then { - private "_explosive"; - _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); if (!isNull (_explosive)) then { - playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL _explosive,3.16228,1,75]; + playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL (_explosive select 0),3.16228,1,75]; }; }; (_this select 0) set [1, _i + 1]; diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf index f5b3172c46..c00f15b5ed 100644 --- a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -21,7 +21,7 @@ if (isNil QGVAR(CellphoneIEDs)) exitWith {objNull}; _explosive = objNull; { if ((_x select 1) == _code) exitWith { - _explosive = _x select 0; + _explosive = _x; }; false } count GVAR(CellphoneIEDs); From 89a81dbed1d5ddcc6b8dcb7f8ad9d0a6b9aed677 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Thu, 19 Feb 2015 12:40:21 +0200 Subject: [PATCH 40/47] Forgotten function added. --- addons/explosives/XEH_preInit.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index d8f8dc1216..3747151d16 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -25,6 +25,7 @@ PREP(canDetonate); PREP(defuseExplosive); PREP(detonateExplosive); PREP(dialPhone); +PREP(dialingPhone); PREP(handleScrollWheel); From f5a6f6f4047524e081eef354892e72e188fb0906 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Thu, 19 Feb 2015 15:30:01 +0200 Subject: [PATCH 41/47] Fixed various points raised in the PR. --- addons/explosives/functions/fnc_dialPhone.sqf | 6 +++--- addons/explosives/functions/fnc_dialingPhone.sqf | 2 +- addons/explosives/functions/fnc_setSpeedDial.sqf | 4 +--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index f694ff3d5f..58d3dab716 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -34,9 +34,9 @@ if (_unit == ace_player) then { _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); if (!isNull (_explosive)) then { [{ - playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL (_this select 1),3.16228,1,75]; + playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; (_this select 0) setVariable [QGVAR(Dialing), false, true]; - }, [_unit,_explosive], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); - [_explosive,0.25 * (count _arr - 1)] call FUNC(startTimer); + }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); }; }; diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf index c50f618abe..003fd734c1 100644 --- a/addons/explosives/functions/fnc_dialingPhone.sqf +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -38,7 +38,7 @@ if (_i >= (count _arr + 2)) then { }; if (_i == (count _arr)) then { if (!isNull (_explosive)) then { - playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosATL (_explosive select 0),3.16228,1,75]; + playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_explosive select 0),3.16228,1,75]; }; }; (_this select 0) set [1, _i + 1]; diff --git a/addons/explosives/functions/fnc_setSpeedDial.sqf b/addons/explosives/functions/fnc_setSpeedDial.sqf index 20a32a1224..adb2e6af03 100644 --- a/addons/explosives/functions/fnc_setSpeedDial.sqf +++ b/addons/explosives/functions/fnc_setSpeedDial.sqf @@ -20,9 +20,7 @@ _speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; if (count _speedDial == 0) exitWith {}; _amount = if((_this select 0))then{1}else{-1}; -GVAR(CurrentSpeedDial) = GVAR(CurrentSpeedDial) + _amount; -GVAR(CurrentSpeedDial) = if(GVAR(CurrentSpeedDial) < 0)then{(count _speedDial)-1}else{GVAR(CurrentSpeedDial)}; -GVAR(CurrentSpeedDial) = if(GVAR(CurrentSpeedDial) >= (count _speedDial))then{0}else{GVAR(CurrentSpeedDial)}; +GVAR(CurrentSpeedDial) = (GVAR(CurrentSpeedDial) + _amount + count _speedDial) mod (count _speedDial); ctrlSetText [1400,(_speedDial select GVAR(CurrentSpeedDial)) select 1]; ctrlSetText [1401,(_speedDial select GVAR(CurrentSpeedDial)) select 0]; From 96404bc42a0bacf839cf73bcbc15ac056ae0f517 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Thu, 19 Feb 2015 15:59:14 +0200 Subject: [PATCH 42/47] Fixed isNull check not working. Fixed audio not being found. --- .../functions/fnc_addCellphoneIED.sqf | 2 +- addons/explosives/functions/fnc_dialPhone.sqf | 6 +- .../explosives/functions/fnc_dialingPhone.sqf | 10 +- .../functions/fnc_getSpeedDialExplosive.sqf | 13 +- .../functions/fnc_place_Approve.sqf | 133 +++++++++--------- 5 files changed, 81 insertions(+), 83 deletions(-) diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index 49bec07f1b..84cb57cf4e 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -38,7 +38,7 @@ while {!_codeSet} do { _code = "0" + _code; _count = _count - 1; }; - _codeSet = (isNull [objNull,_code] call FUNC(getSpeedDialExplosive)); + _codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0; }; if (isNil QGVAR(CellphoneIEDs)) then { GVAR(CellphoneIEDs) = []; diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index 58d3dab716..41b2a4a4f7 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -31,10 +31,10 @@ if (_unit == ace_player) then { [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); } else { private ["_explosive"]; - _explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); - if (!isNull (_explosive)) then { + _explosive = [_code] call FUNC(getSpeedDialExplosive); + if ((count _explosive) > 0) then { [{ - playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; (_this select 0) setVariable [QGVAR(Dialing), false, true]; }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf index 003fd734c1..d3c429c9fc 100644 --- a/addons/explosives/functions/fnc_dialingPhone.sqf +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -19,16 +19,16 @@ #include "script_component.hpp" EXPLODE_4_PVT(_this select 0,_unit,_i,_arr,_code); if ((_i mod 4) == 0) then { - playSound3D [QUOTE(PATHTOF_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; + playSound3D [QUOTE(PATHTO_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; }; ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]]; private "_explosive"; -_explosive = [_unit, _code] call FUNC(getSpeedDialExplosive); +_explosive = [_code] call FUNC(getSpeedDialExplosive); if (_i >= (count _arr + 2)) then { [_this select 1] call CALLSTACK(cba_fnc_removePerFrameHandler); - if (!isNull (_explosive)) then { + if ((count _explosive) > 0) then { [_unit, -1, [_explosive select 0, _explosive select 2]] call FUNC(detonateExplosive); }; _unit setVariable [QGVAR(Dialing), false, true]; @@ -37,8 +37,8 @@ if (_i >= (count _arr + 2)) then { }; }; if (_i == (count _arr)) then { - if (!isNull (_explosive)) then { - playSound3D [QUOTE(PATHTOF_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_explosive select 0),3.16228,1,75]; + if ((count _explosive) > 0) then { + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_explosive select 0),3.16228,1,75]; }; }; (_this select 0) set [1, _i + 1]; diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf index c00f15b5ed..d6d5b57b3b 100644 --- a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -1,24 +1,23 @@ /* * Author: Garth 'L-H' de Wet - * Gets the explosive object or objNull from the speed dial entry. + * Gets the explosive from the speed dial entry. * * Arguments: - * 0: Unit - * 1: Speed dial entry + * 0: Speed dial entry * * Return Value: * Associated explosive (or ObjNull) * * Example: - * [ace_player, "2113"] call ace_explosives_fnc_getSpeedDialExplosive; + * ["2113"] call ace_explosives_fnc_getSpeedDialExplosive; * * Public: Yes */ #include "script_component.hpp" -EXPLODE_2_PVT(_this,_unit,_code); +EXPLODE_1_PVT(_this,_code); private ["_explosive"]; -if (isNil QGVAR(CellphoneIEDs)) exitWith {objNull}; -_explosive = objNull; +if (isNil QGVAR(CellphoneIEDs)) exitWith {[]}; +_explosive = []; { if ((_x select 1) == _code) exitWith { _explosive = _x; diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 97528cb8f6..77cfbb92a1 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -28,79 +28,78 @@ _player = ACE_player; [_player, "DefaultAction", _player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler); [_player, "MenuBack", _player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); call EFUNC(interaction,hideMouseHint); -if ((_setup getVariable [QGVAR(Class), ""]) != "") then { - _dir = (getDir _setup); - if (_dir > 180) then { - _dir = _dir - 180; - } else { - _dir = 180 + _dir; - }; - _setup setVariable [QGVAR(Direction), _dir]; - _player setVariable [QGVAR(PlantingExplosive), true]; - _setup addEventHandler ["EpeContactStart", { - if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { - private ["_player", "_pos", "_attachTo"]; +if ((_setup getVariable [QGVAR(Class), ""]) == "") exitWith { + deleteVehicle _setup; +}; +_dir = (getDir _setup); +if (_dir > 180) then { + _dir = _dir - 180; +} else { + _dir = 180 + _dir; +}; +_setup setVariable [QGVAR(Direction), _dir]; +_player setVariable [QGVAR(PlantingExplosive), true]; +_setup addEventHandler ["EpeContactStart", { + if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { + private ["_player", "_pos", "_attachTo"]; + _player = ACE_player; + _player setVariable [QGVAR(PlantingExplosive), false]; + _pos = getPosATL (_this select 0); + (_this select 0) enableSimulationGlobal false; + if (surfaceIsWater _pos) then { + _pos = getPosASL (_this select 0); + (_this select 0) setPosASL _pos; + }else{ + (_this select 0) setPosATL _pos; + }; + (_this select 0) setVariable [QGVAR(Handled), true]; + _attachTo = objNull; + if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { + _attachTo = (_this select 1); + }; + [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution + private ["_mag", "_setup", "_dir", "_player"]; + _setup = _this select 0; _player = ACE_player; - _pos = getPosATL (_this select 0); - (_this select 0) enableSimulationGlobal false; - if (surfaceIsWater _pos) then { - _pos = getPosASL (_this select 0); - (_this select 0) setPosASL _pos; - }else{ - (_this select 0) setPosATL _pos; - }; - (_this select 0) setVariable [QGVAR(Handled), true]; - _player setVariable [QGVAR(PlantingExplosive), false]; - _attachTo = objNull; - if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { - _attachTo = (_this select 1); - }; - [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution - private ["_mag", "_setup", "_dir", "_player"]; - _setup = _this select 0; - _player = ACE_player; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; - sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); - _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); - deleteVehicle _setup; - if (!isNull(_explosive)) then { - _player RemoveMagazine _mag; - if (!isNull (_this select 1)) then { - _explosive attachTo [(_this select 1)]; - _dir = _dir - (getDir (_this select 1)); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); - }; + sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); + _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); + deleteVehicle _setup; + if (!isNull(_explosive)) then { + _player RemoveMagazine _mag; + if (!isNull (_this select 1)) then { + _explosive attachTo [(_this select 1)]; + _dir = _dir - (getDir (_this select 1)); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); }; }; }; - }]; - _setup enableSimulationGlobal true; - _player playActionNow "MedicOther"; - [_setup] spawn { // TODO: Change to scheduled delay execution - private ["_setup", "_player"]; - _setup = _this select 0; - _player = ACE_player; - sleep 5; + }; +}]; +_setup enableSimulationGlobal true; +_player playActionNow "MedicOther"; +[_setup] spawn { // TODO: Change to scheduled delay execution + private ["_setup", "_player"]; + _setup = _this select 0; + _player = ACE_player; + sleep 5; + _player setVariable [QGVAR(PlantingExplosive), false]; + if (!isNull _setup) then { + private ["_mag", "_dir", "_delayTime"]; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; + _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; + if (_delayTime > 0) then { + sleep _delayTime; + }; if (!isNull _setup) then { - private ["_mag", "_dir", "_delayTime"]; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; - _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; - if (_delayTime > 0) then { - sleep _delayTime; - }; - if (!isNull _setup) then { - [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); - deleteVehicle _setup; - _player RemoveMagazine _mag; - _player setVariable [QGVAR(PlantingExplosive), false]; - }; + [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); + deleteVehicle _setup; + _player RemoveMagazine _mag; }; }; -}else{ - deleteVehicle _setup; }; From 1ea35548e0713cf2610475ec8186bcb879178a1a Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 19 Feb 2015 18:40:40 +0100 Subject: [PATCH 43/47] Fixed ambiance sounds module. --- addons/missionmodules/CfgVehicles.hpp | 4 ++-- .../functions/fnc_moduleAmbianceSound.sqf | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/missionmodules/CfgVehicles.hpp b/addons/missionmodules/CfgVehicles.hpp index afdb58006b..92c379efb2 100644 --- a/addons/missionmodules/CfgVehicles.hpp +++ b/addons/missionmodules/CfgVehicles.hpp @@ -11,7 +11,7 @@ class CfgVehicles { displayName = "Ambiance Sounds [ACE]"; icon = QUOTE(PATHTOF(data\moduleSound.paa)); category = "ACE_missionModules"; - function = QUOTE(FUNC(moduleAmbianceSound); + function = QUOTE(FUNC(moduleAmbianceSound)); functionPriority = 1; isGlobal = 1; isTriggerActivated = 0; @@ -57,7 +57,7 @@ class CfgVehicles { displayName = "Volume"; description = "The volume of the sounds played"; typeName = "NUMBER"; - defaultValue = 0; + defaultValue = 1; }; }; class ModuleDescription { diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index 95153be8d1..943d795b7a 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -38,7 +38,7 @@ if (_activated && local _logic) then { _nilCheckPassedList = ""; { - _x = [_x] call EFUNC(common,removeWhiteSpace); + _x = [_x] call EFUNC(common,string_removeWhiteSpace); _splittedList set [_foreachIndex, _x]; }foreach _splittedList; @@ -61,21 +61,22 @@ if (_activated && local _logic) then { }foreach _ambianceSounds; [{ - private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"] + private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"]; _args = _this select 0; _logic = _args select 0; + _minDelayBetweensounds = _args select 4; + _maxDelayBetweenSounds = _args select 5; _lastTimePlayed = _args select 8; if (!alive _logic) exitwith { [(_this select 1)] call cba_fnc_removePerFrameHandler; }; - if (_lastTimePlayed - time >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { + if (time - _lastTimePlayed >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { _ambianceSounds = _args select 1; _minimalDistance = _args select 2; _maximalDistance = _args select 3; - _minDelayBetweensounds = _args select 4; - _maxDelayBetweenSounds = _args select 5; + _volume = _args select 6; _followPlayers = _args select 7; @@ -111,13 +112,12 @@ if (_activated && local _logic) then { // If no unit is to close to this position, we will play the sound. if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { - playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; _args set [8, time]; }; }; }; - }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call CBA_fnc_addPerFrameHandler; + }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call cba_fnc_addPerFrameHandler; }; true; From af3709f481226ecba3c8d470ddc02047a813ab87 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 19 Feb 2015 19:07:19 +0100 Subject: [PATCH 44/47] Fixed forgotten missionModules. --- addons/missionmodules/$PBOPREFIX$ | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/missionmodules/$PBOPREFIX$ b/addons/missionmodules/$PBOPREFIX$ index ea1be0daee..6e7c7ebfc1 100644 --- a/addons/missionmodules/$PBOPREFIX$ +++ b/addons/missionmodules/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\addons\missionModules \ No newline at end of file +z\ace\addons\missionmodules \ No newline at end of file From 612fa69c1c4cf7ed8b81c5086dc90877d0eda400 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 19 Feb 2015 19:12:14 +0100 Subject: [PATCH 45/47] Renamed string_removeWhiteSpace to stringRemoveWhiteSpace. --- addons/common/XEH_preInit.sqf | 2 +- ...ring_removeWhiteSpace.sqf => fnc_stringRemoveWhiteSpace.sqf} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename addons/common/functions/{fnc_string_removeWhiteSpace.sqf => fnc_stringRemoveWhiteSpace.sqf} (100%) diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 3710963c63..e193c81470 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -170,7 +170,7 @@ PREP(setVolume); PREP(sortAlphabeticallyBy); PREP(stringCompare); PREP(stringToColoredText); -PREP(string_removeWhiteSpace); +PREP(stringRemoveWhiteSpace); PREP(subString); PREP(switchToGroupSide); PREP(throttledPublicVariable); diff --git a/addons/common/functions/fnc_string_removeWhiteSpace.sqf b/addons/common/functions/fnc_stringRemoveWhiteSpace.sqf similarity index 100% rename from addons/common/functions/fnc_string_removeWhiteSpace.sqf rename to addons/common/functions/fnc_stringRemoveWhiteSpace.sqf From b0373de57632ae9ea1623f1757e73e457fa65279 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 19 Feb 2015 19:14:52 +0100 Subject: [PATCH 46/47] Tabs to spaces --- .../functions/fnc_endRadioTransmission.sqf | 18 ++++----- addons/common/functions/fnc_exportConfig.sqf | 4 +- addons/common/functions/fnc_getGunner.sqf | 6 +-- addons/common/functions/fnc_getHitPoints.sqf | 34 ++++++++--------- .../fnc_getHitPointsWithSelections.sqf | 38 +++++++++---------- addons/common/functions/fnc_hashGet.sqf | 24 ++++++------ addons/common/functions/fnc_hashHasKey.sqf | 18 ++++----- .../functions/fnc_hashListCreateHash.sqf | 12 +++--- addons/common/functions/fnc_hashListPush.sqf | 12 +++--- .../common/functions/fnc_hashListSelect.sqf | 26 ++++++------- addons/common/functions/fnc_hashListSet.sqf | 24 ++++++------ addons/common/functions/fnc_hashRem.sqf | 34 ++++++++--------- addons/common/functions/fnc_hashSet.sqf | 28 +++++++------- .../common/functions/fnc_queueAnimation.sqf | 4 +- 14 files changed, 141 insertions(+), 141 deletions(-) diff --git a/addons/common/functions/fnc_endRadioTransmission.sqf b/addons/common/functions/fnc_endRadioTransmission.sqf index 990d4e03d8..772a34a06b 100644 --- a/addons/common/functions/fnc_endRadioTransmission.sqf +++ b/addons/common/functions/fnc_endRadioTransmission.sqf @@ -14,17 +14,17 @@ // ACRE if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { - [-1] call acre_core_fnc_handleMultiPttKeyPressUp; - [0] call acre_core_fnc_handleMultiPttKeyPressUp; - [1] call acre_core_fnc_handleMultiPttKeyPressUp; - [2] call acre_core_fnc_handleMultiPttKeyPressUp; + [-1] call acre_core_fnc_handleMultiPttKeyPressUp; + [0] call acre_core_fnc_handleMultiPttKeyPressUp; + [1] call acre_core_fnc_handleMultiPttKeyPressUp; + [2] call acre_core_fnc_handleMultiPttKeyPressUp; }; // TFAR if (isClass (configFile >> "CfgPatches" >> "task_force_radio")) then { - call TFAR_fnc_onSwTangentReleased; - call TFAR_fnc_onAdditionalSwTangentReleased; - call TFAR_fnc_onLRTangentReleased; - call TFAR_fnc_onAdditionalLRTangentReleased; - call TFAR_fnc_onDDTangentReleased; + call TFAR_fnc_onSwTangentReleased; + call TFAR_fnc_onAdditionalSwTangentReleased; + call TFAR_fnc_onLRTangentReleased; + call TFAR_fnc_onAdditionalLRTangentReleased; + call TFAR_fnc_onDDTangentReleased; }; diff --git a/addons/common/functions/fnc_exportConfig.sqf b/addons/common/functions/fnc_exportConfig.sqf index 10c88d6bca..c298785c26 100644 --- a/addons/common/functions/fnc_exportConfig.sqf +++ b/addons/common/functions/fnc_exportConfig.sqf @@ -1,8 +1,8 @@ // by commy2 /* - usage: + usage: - (configFile >> "CfgAmmo") call FUNC(exportConfig); + (configFile >> "CfgAmmo") call FUNC(exportConfig); */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getGunner.sqf b/addons/common/functions/fnc_getGunner.sqf index 0c82066e4b..71191083e0 100644 --- a/addons/common/functions/fnc_getGunner.sqf +++ b/addons/common/functions/fnc_getGunner.sqf @@ -20,9 +20,9 @@ private "_gunner"; _gunner = objNull; { - if (_weapon in (_vehicle weaponsTurret _x)) exitWith { - _gunner = _vehicle turretUnit _x; - }; + if (_weapon in (_vehicle weaponsTurret _x)) exitWith { + _gunner = _vehicle turretUnit _x; + }; } forEach allTurrets _vehicle; _gunner diff --git a/addons/common/functions/fnc_getHitPoints.sqf b/addons/common/functions/fnc_getHitPoints.sqf index a6d75e41b9..26b0b1b840 100644 --- a/addons/common/functions/fnc_getHitPoints.sqf +++ b/addons/common/functions/fnc_getHitPoints.sqf @@ -23,33 +23,33 @@ _hitpoints = []; private "_hitpointClasses"; _hitpointClasses = [_config >> "HitPoints"]; { - private "_class"; - _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; + private "_class"; + _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; - if (isClass _class) then { - _hitpointClasses pushBack _class; - }; + if (isClass _class) then { + _hitpointClasses pushBack _class; + }; } forEach allTurrets _vehicle; // iterate through all classes with hitpoints and their parents { - private "_class"; - _class = _x; + private "_class"; + _class = _x; - while {isClass _class} do { + while {isClass _class} do { - for "_i" from 0 to (count _class - 1) do { - private "_entry"; - _entry = configName (_class select _i); + for "_i" from 0 to (count _class - 1) do { + private "_entry"; + _entry = configName (_class select _i); - if (!(_entry in _hitpoints) && {!isNil {_vehicle getHitPointDamage _entry}}) then { - _hitpoints pushBack _entry; - }; - }; + if (!(_entry in _hitpoints) && {!isNil {_vehicle getHitPointDamage _entry}}) then { + _hitpoints pushBack _entry; + }; + }; - _class = inheritsFrom _class; - }; + _class = inheritsFrom _class; + }; } forEach _hitpointClasses; diff --git a/addons/common/functions/fnc_getHitPointsWithSelections.sqf b/addons/common/functions/fnc_getHitPointsWithSelections.sqf index e9a7a8fac5..f0c9801382 100644 --- a/addons/common/functions/fnc_getHitPointsWithSelections.sqf +++ b/addons/common/functions/fnc_getHitPointsWithSelections.sqf @@ -24,36 +24,36 @@ _selections = []; private "_hitpointClasses"; _hitpointClasses = [_config >> "HitPoints"]; { - private "_class"; - _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; + private "_class"; + _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; - if (isClass _class) then { - _hitpointClasses pushBack _class; - }; + if (isClass _class) then { + _hitpointClasses pushBack _class; + }; } forEach allTurrets _vehicle; // iterate through all classes with hitpoints and their parents { - private "_class"; - _class = _x; + private "_class"; + _class = _x; - while {isClass _class} do { + while {isClass _class} do { - for "_i" from 0 to (count _class - 1) do { - private ["_entry", "_selection"]; + for "_i" from 0 to (count _class - 1) do { + private ["_entry", "_selection"]; - _entry = configName (_class select _i); - _selection = getText (_class select _i >> "name"); + _entry = configName (_class select _i); + _selection = getText (_class select _i >> "name"); - if (!(_selection in _selections) && {!isNil {_vehicle getHit _selection}}) then { - _hitpoints pushBack _entry; - _selections pushBack _selection; - }; - }; + if (!(_selection in _selections) && {!isNil {_vehicle getHit _selection}}) then { + _hitpoints pushBack _entry; + _selections pushBack _selection; + }; + }; - _class = inheritsFrom _class; - }; + _class = inheritsFrom _class; + }; } forEach _hitpointClasses; diff --git a/addons/common/functions/fnc_hashGet.sqf b/addons/common/functions/fnc_hashGet.sqf index 6147d06a73..7682b2f6a2 100644 --- a/addons/common/functions/fnc_hashGet.sqf +++ b/addons/common/functions/fnc_hashGet.sqf @@ -9,18 +9,18 @@ _key = _this select 1; ERRORDATA(2); _val = nil; try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index != -1) then { - _val = (_hash select 1) select _index; - if(IS_STRING(_val) && {_val == "ACREHASHREMOVEDONOTUSETHISVAL"}) then { - _val = nil; - }; - }; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index != -1) then { + _val = (_hash select 1) select _index; + if(IS_STRING(_val) && {_val == "ACREHASHREMOVEDONOTUSETHISVAL"}) then { + _val = nil; + }; + }; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; _val diff --git a/addons/common/functions/fnc_hashHasKey.sqf b/addons/common/functions/fnc_hashHasKey.sqf index d69ad2f3e8..8011e987fb 100644 --- a/addons/common/functions/fnc_hashHasKey.sqf +++ b/addons/common/functions/fnc_hashHasKey.sqf @@ -9,15 +9,15 @@ _key = _this select 1; ERRORDATA(2); _val = false; try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index != -1) then { - _val = true; - }; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index != -1) then { + _val = true; + }; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; _val diff --git a/addons/common/functions/fnc_hashListCreateHash.sqf b/addons/common/functions/fnc_hashListCreateHash.sqf index fef9c79b85..cdad5987cd 100644 --- a/addons/common/functions/fnc_hashListCreateHash.sqf +++ b/addons/common/functions/fnc_hashListCreateHash.sqf @@ -7,12 +7,12 @@ _hashList = _this select 0; ERRORDATA(1); _hashKeys = []; try { - if(VALIDHASH(_hashList)) then { - _hashKeys = (_hashList select 0); - } else { - ERROR("Input hashlist is not valid"); - }; + if(VALIDHASH(_hashList)) then { + _hashKeys = (_hashList select 0); + } else { + ERROR("Input hashlist is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; [_hashKeys, []]; diff --git a/addons/common/functions/fnc_hashListPush.sqf b/addons/common/functions/fnc_hashListPush.sqf index e783f7c324..afd092a1b9 100644 --- a/addons/common/functions/fnc_hashListPush.sqf +++ b/addons/common/functions/fnc_hashListPush.sqf @@ -7,11 +7,11 @@ _hashList = _this select 0; _value = _this select 1; ERRORDATA(2); try { - if(VALIDHASH(_hashList)) then { - [_hashList, (count (_hashList select 1)), _value] call FUNC(hashListSet); - } else { - ERROR("Input hashlist in push not valid"); - }; + if(VALIDHASH(_hashList)) then { + [_hashList, (count (_hashList select 1)), _value] call FUNC(hashListSet); + } else { + ERROR("Input hashlist in push not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; diff --git a/addons/common/functions/fnc_hashListSelect.sqf b/addons/common/functions/fnc_hashListSelect.sqf index e1ee0aae0f..0c552d072e 100644 --- a/addons/common/functions/fnc_hashListSelect.sqf +++ b/addons/common/functions/fnc_hashListSelect.sqf @@ -8,20 +8,20 @@ _index = _this select 1; ERRORDATA(2); _hash = nil; try { - if(VALIDHASH(_hashList)) then { - _keys = _hashList select 0; - _hashes = _hashList select 1; - if(_index < (count _hashes)) then { - _values = _hashes select _index; + if(VALIDHASH(_hashList)) then { + _keys = _hashList select 0; + _hashes = _hashList select 1; + if(_index < (count _hashes)) then { + _values = _hashes select _index; - _hash = [_keys, _values, 1]; - } else { - ERROR("Index of hashlist is out of range"); - }; - } else { - ERROR("Input hashlist is not valid"); - }; + _hash = [_keys, _values, 1]; + } else { + ERROR("Index of hashlist is out of range"); + }; + } else { + ERROR("Input hashlist is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; _hash; diff --git a/addons/common/functions/fnc_hashListSet.sqf b/addons/common/functions/fnc_hashListSet.sqf index 8b7239dffd..c384bc15c9 100644 --- a/addons/common/functions/fnc_hashListSet.sqf +++ b/addons/common/functions/fnc_hashListSet.sqf @@ -8,17 +8,17 @@ _index = _this select 1; _value = _this select 2; ERRORDATA(3); try { - if(VALIDHASH(_hashList)) then { - if(VALIDHASH(_value)) then { - _vals = _value select 1; - - (_hashList select 1) set[_index, _vals]; - } else { - ERROR("Set hash in hashlist is not valid"); - }; - } else { - ERROR("Input hashlist is not valid"); - }; + if(VALIDHASH(_hashList)) then { + if(VALIDHASH(_value)) then { + _vals = _value select 1; + + (_hashList select 1) set[_index, _vals]; + } else { + ERROR("Set hash in hashlist is not valid"); + }; + } else { + ERROR("Input hashlist is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; diff --git a/addons/common/functions/fnc_hashRem.sqf b/addons/common/functions/fnc_hashRem.sqf index 86898fb3df..000dbbefe0 100644 --- a/addons/common/functions/fnc_hashRem.sqf +++ b/addons/common/functions/fnc_hashRem.sqf @@ -8,23 +8,23 @@ _key = _this select 1; ERRORDATA(2); _val = nil; try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index != -1) then { - (_hash select 1) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; - // is this hash is not part of a hash list? - // if it is we need to leave the keys intact. - if((count _hash) == 2) then { - // if this is a standalone hash then we can clean it up - (_hash select 0) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; - _hash set[0, ((_hash select 0) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; - _hash set[1, ((_hash select 1) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; - }; - }; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index != -1) then { + (_hash select 1) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; + // is this hash is not part of a hash list? + // if it is we need to leave the keys intact. + if((count _hash) == 2) then { + // if this is a standalone hash then we can clean it up + (_hash select 0) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; + _hash set[0, ((_hash select 0) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; + _hash set[1, ((_hash select 1) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; + }; + }; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; true diff --git a/addons/common/functions/fnc_hashSet.sqf b/addons/common/functions/fnc_hashSet.sqf index 23438eaf83..0e374d5f12 100644 --- a/addons/common/functions/fnc_hashSet.sqf +++ b/addons/common/functions/fnc_hashSet.sqf @@ -9,19 +9,19 @@ _key = _this select 1; _val = _this select 2; ERRORDATA(3); try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index == -1) then { - _index = (_hash select 0) find "ACREHASHREMOVEDONOTUSETHISVAL"; - if(_index == -1) then { - _index = (count (_hash select 0)); - }; - (_hash select 0) set[_index, _key]; - }; - (_hash select 1) set[_index, _val]; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index == -1) then { + _index = (_hash select 0) find "ACREHASHREMOVEDONOTUSETHISVAL"; + if(_index == -1) then { + _index = (count (_hash select 0)); + }; + (_hash select 0) set[_index, _key]; + }; + (_hash select 1) set[_index, _val]; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; diff --git a/addons/common/functions/fnc_queueAnimation.sqf b/addons/common/functions/fnc_queueAnimation.sqf index a489a46174..73f3dca109 100644 --- a/addons/common/functions/fnc_queueAnimation.sqf +++ b/addons/common/functions/fnc_queueAnimation.sqf @@ -4,7 +4,7 @@ terminate (missionNamespace getVariable [QGVAR(waitForAnimationHandle), scriptNull]); GVAR(waitForAnimationHandle) = _this spawn { - waitUntil {!([_this select 0] call FUNC(inTransitionAnim))}; + waitUntil {!([_this select 0] call FUNC(inTransitionAnim))}; - _this call FUNC(doAnimation); + _this call FUNC(doAnimation); }; From a8e269bc18d46f65d77599123194dc336d56277b Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 19 Feb 2015 14:34:08 -0600 Subject: [PATCH 47/47] Cleanup Escort Logic No more ERROR spam --- .../captives/functions/fnc_canStopEscorting.sqf | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/addons/captives/functions/fnc_canStopEscorting.sqf b/addons/captives/functions/fnc_canStopEscorting.sqf index e6a5a0e568..56065a43fc 100644 --- a/addons/captives/functions/fnc_canStopEscorting.sqf +++ b/addons/captives/functions/fnc_canStopEscorting.sqf @@ -19,22 +19,10 @@ PARAMS_1(_unit); DEFAULT_PARAM(1,_target,objNull); -private ["_isAttached"]; - if (isNull _target) then { _target = _unit getVariable [QGVAR(escortedUnit), objNull]; }; -if (isNull _target) exitWith { - ERROR("Null Target (no ACE_escortedUnit)"); - false -}; +if (isNull _target) exitWith {false}; -_isAttached = _target in (attachedObjects _unit); - -if (_isAttached && (!(_target getVariable [QGVAR(isHandcuffed), false]))) exitWith { - ERROR("Attached But Not Captive"); - false -}; - -_isAttached +(_target in (attachedObjects _unit)) && {_target getVariable [QGVAR(isHandcuffed), false]}