比较提交

...
此合并请求有变更与目标分支冲突。
/protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_info.proto
/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs
/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity
/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab
/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
/com.unity.ml-agents/Runtime/Agent.cs
/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs
/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
/ml-agents-envs/mlagents_envs/rpc_utils.py
/ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.py
/ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.pyi
/ml-agents-envs/mlagents_envs/base_env.py
/ml-agents/mlagents/trainers/ghost/trainer.py
/ml-agents/mlagents/trainers/optimizer/torch_optimizer.py
/ml-agents/mlagents/trainers/agent_processor.py
/ml-agents/mlagents/trainers/behavior_id_utils.py
/ml-agents/mlagents/trainers/policy/torch_policy.py
/ml-agents/mlagents/trainers/ppo/optimizer_torch.py
/ml-agents/mlagents/trainers/ppo/trainer.py
/ml-agents/mlagents/trainers/tests/test_buffer.py
/ml-agents/mlagents/trainers/buffer.py
/ml-agents/mlagents/trainers/torch/layers.py
/ml-agents/mlagents/trainers/torch/attention.py
/ml-agents/mlagents/trainers/torch/components/bc/module.py
/ml-agents/mlagents/trainers/torch/agent_action.py
/ml-agents/mlagents/trainers/torch/utils.py
/ml-agents/mlagents/trainers/torch/networks.py
/ml-agents/mlagents/trainers/torch/encoders.py
/ml-agents/mlagents/trainers/trajectory.py

3 次代码提交

作者 SHA1 备注 提交日期
Ervin Teng 2203fc0e Bootstrap if teammates not done 4 年前
Ervin Teng 92fc78a5 Use new trajectory 4 年前
Ervin Teng 1c557bd3 Don't concat self 4 年前
共有 56 个文件被更改,包括 6076 次插入169 次删除
  1. 1
      protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_info.proto
  2. 18
      ml-agents-envs/mlagents_envs/base_env.py
  3. 11
      ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.py
  4. 7
      ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.pyi
  5. 29
      ml-agents-envs/mlagents_envs/rpc_utils.py
  6. 39
      com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs
  7. 1
      com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
  8. 5
      com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
  9. 42
      com.unity.ml-agents/Runtime/Agent.cs
  10. 8
      Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab
  11. 146
      Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity
  12. 22
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs
  13. 2
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta
  14. 932
      Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
  15. 22
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
  16. 35
      ml-agents/mlagents/trainers/behavior_id_utils.py
  17. 14
      ml-agents/mlagents/trainers/ghost/trainer.py
  18. 5
      ml-agents/mlagents/trainers/policy/torch_policy.py
  19. 29
      ml-agents/mlagents/trainers/tests/test_buffer.py
  20. 71
      ml-agents/mlagents/trainers/buffer.py
  21. 30
      ml-agents/mlagents/trainers/optimizer/torch_optimizer.py
  22. 194
      ml-agents/mlagents/trainers/trajectory.py
  23. 8
      ml-agents/mlagents/trainers/torch/attention.py
  24. 2
      ml-agents/mlagents/trainers/torch/components/bc/module.py
  25. 25
      ml-agents/mlagents/trainers/torch/encoders.py
  26. 17
      ml-agents/mlagents/trainers/torch/layers.py
  27. 177
      ml-agents/mlagents/trainers/torch/networks.py
  28. 12
      ml-agents/mlagents/trainers/torch/utils.py
  29. 100
      ml-agents/mlagents/trainers/torch/agent_action.py
  30. 81
      ml-agents/mlagents/trainers/agent_processor.py
  31. 9
      ml-agents/mlagents/trainers/ppo/optimizer_torch.py
  32. 11
      ml-agents/mlagents/trainers/ppo/trainer.py
  33. 63
      config/ppo/WallJumpCollab.yaml
  34. 26
      config/ppo/HallwayCollab.yaml
  35. 3
      com.unity.ml-agents/Runtime/ITeamManager.cs.meta
  36. 14
      com.unity.ml-agents/Runtime/ITeamManager.cs
  37. 50
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs
  38. 11
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs.meta
  39. 11
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs.meta
  40. 67
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs
  41. 7
      Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity.meta
  42. 1001
      Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity
  43. 7
      Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab.meta
  44. 1001
      Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab
  45. 7
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity.meta
  46. 1001
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity
  47. 566
      Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx
  48. 15
      Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx.meta
  49. 11
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs.meta
  50. 11
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs.meta
  51. 24
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs
  52. 204
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs
  53. 3
      com.unity.ml-agents.extensions/Runtime/Teams.meta
  54. 3
      com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs.meta
  55. 34
      com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs

1
protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_info.proto


repeated bool action_mask = 11;
reserved 12; // deprecated CustomObservationProto custom_observation = 12;
repeated ObservationProto observations = 13;
string team_manager_id = 14;
}

18
ml-agents-envs/mlagents_envs/base_env.py


reward: float
agent_id: AgentId
action_mask: Optional[List[np.ndarray]]
team_manager_id: Optional[str]
class DecisionSteps(Mapping):

this simulation step.
"""
def __init__(self, obs, reward, agent_id, action_mask):
def __init__(self, obs, reward, agent_id, action_mask, team_manager_id=None):
self.team_manager_id: Optional[List[str]] = team_manager_id
self.action_mask: Optional[List[np.ndarray]] = action_mask
self._agent_id_to_index: Optional[Dict[AgentId, int]] = None

agent_mask = []
for mask in self.action_mask:
agent_mask.append(mask[agent_index])
team_manager_id = None
if self.team_manager_id is not None and self.team_manager_id != "":
team_manager_id = self.team_manager_id[agent_index]
team_manager_id=team_manager_id,
)
def __iter__(self) -> Iterator[Any]:

reward=np.zeros(0, dtype=np.float32),
agent_id=np.zeros(0, dtype=np.int32),
action_mask=None,
team_manager_id=None,
)

reward: float
interrupted: bool
agent_id: AgentId
team_manager_id: Optional[str]
class TerminalSteps(Mapping):

across simulation steps.
"""
def __init__(self, obs, reward, interrupted, agent_id):
def __init__(self, obs, reward, interrupted, agent_id, team_manager_id=None):
self.team_manager_id: Optional[List[str]] = team_manager_id
@property
def agent_id_to_index(self) -> Dict[AgentId, int]:

agent_obs = []
for batched_obs in self.obs:
agent_obs.append(batched_obs[agent_index])
team_manager_id = None
if self.team_manager_id is not None and self.team_manager_id != "":
team_manager_id = self.team_manager_id[agent_index]
team_manager_id=team_manager_id,
)
def __iter__(self) -> Iterator[Any]:

reward=np.zeros(0, dtype=np.float32),
interrupted=np.zeros(0, dtype=np.bool),
agent_id=np.zeros(0, dtype=np.int32),
team_manager_id=None,
)

11
ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.py


name='mlagents_envs/communicator_objects/agent_info.proto',
package='communicator_objects',
syntax='proto3',
serialized_pb=_b('\n3mlagents_envs/communicator_objects/agent_info.proto\x12\x14\x63ommunicator_objects\x1a\x34mlagents_envs/communicator_objects/observation.proto\"\xd1\x01\n\x0e\x41gentInfoProto\x12\x0e\n\x06reward\x18\x07 \x01(\x02\x12\x0c\n\x04\x64one\x18\x08 \x01(\x08\x12\x18\n\x10max_step_reached\x18\t \x01(\x08\x12\n\n\x02id\x18\n \x01(\x05\x12\x13\n\x0b\x61\x63tion_mask\x18\x0b \x03(\x08\x12<\n\x0cobservations\x18\r \x03(\x0b\x32&.communicator_objects.ObservationProtoJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rB%\xaa\x02\"Unity.MLAgents.CommunicatorObjectsb\x06proto3')
serialized_pb=_b('\n3mlagents_envs/communicator_objects/agent_info.proto\x12\x14\x63ommunicator_objects\x1a\x34mlagents_envs/communicator_objects/observation.proto\"\xea\x01\n\x0e\x41gentInfoProto\x12\x0e\n\x06reward\x18\x07 \x01(\x02\x12\x0c\n\x04\x64one\x18\x08 \x01(\x08\x12\x18\n\x10max_step_reached\x18\t \x01(\x08\x12\n\n\x02id\x18\n \x01(\x05\x12\x13\n\x0b\x61\x63tion_mask\x18\x0b \x03(\x08\x12<\n\x0cobservations\x18\r \x03(\x0b\x32&.communicator_objects.ObservationProto\x12\x17\n\x0fteam_manager_id\x18\x0e \x01(\tJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rB%\xaa\x02\"Unity.MLAgents.CommunicatorObjectsb\x06proto3')
,
dependencies=[mlagents__envs_dot_communicator__objects_dot_observation__pb2.DESCRIPTOR,])

message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='team_manager_id', full_name='communicator_objects.AgentInfoProto.team_manager_id', index=6,
number=14, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],

oneofs=[
],
serialized_start=132,
serialized_end=341,
serialized_end=366,
)
_AGENTINFOPROTO.fields_by_name['observations'].message_type = mlagents__envs_dot_communicator__objects_dot_observation__pb2._OBSERVATIONPROTO

7
ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.pyi


from typing import (
Iterable as typing___Iterable,
Optional as typing___Optional,
Text as typing___Text,
)
from typing_extensions import (

max_step_reached = ... # type: builtin___bool
id = ... # type: builtin___int
action_mask = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[builtin___bool]
team_manager_id = ... # type: typing___Text
@property
def observations(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[mlagents_envs___communicator_objects___observation_pb2___ObservationProto]: ...

id : typing___Optional[builtin___int] = None,
action_mask : typing___Optional[typing___Iterable[builtin___bool]] = None,
observations : typing___Optional[typing___Iterable[mlagents_envs___communicator_objects___observation_pb2___ObservationProto]] = None,
team_manager_id : typing___Optional[typing___Text] = None,
) -> None: ...
@classmethod
def FromString(cls, s: builtin___bytes) -> AgentInfoProto: ...

def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",u"done",u"id",u"max_step_reached",u"observations",u"reward"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",u"done",u"id",u"max_step_reached",u"observations",u"reward",u"team_manager_id"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",b"action_mask",u"done",b"done",u"id",b"id",u"max_step_reached",b"max_step_reached",u"observations",b"observations",u"reward",b"reward"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",b"action_mask",u"done",b"done",u"id",b"id",u"max_step_reached",b"max_step_reached",u"observations",b"observations",u"reward",b"reward",u"team_manager_id",b"team_manager_id"]) -> None: ...

29
ml-agents-envs/mlagents_envs/rpc_utils.py


decision_rewards = np.array(
[agent_info.reward for agent_info in decision_agent_info_list], dtype=np.float32
)
decision_team_manager = [
agent_info.team_manager_id
for agent_info in decision_agent_info_list
if agent_info.team_manager_id is not None
]
if len(decision_team_manager) == 0:
decision_team_manager = None
terminal_team_manager = [
agent_info.team_manager_id
for agent_info in terminal_agent_info_list
if agent_info.team_manager_id is not None
]
if len(terminal_team_manager) == 0:
terminal_team_manager = None
_raise_on_nan_and_inf(decision_rewards, "rewards")
_raise_on_nan_and_inf(terminal_rewards, "rewards")

action_mask = np.split(action_mask, indices, axis=1)
return (
DecisionSteps(
decision_obs_list, decision_rewards, decision_agent_id, action_mask
decision_obs_list,
decision_rewards,
decision_agent_id,
action_mask,
decision_team_manager,
TerminalSteps(terminal_obs_list, terminal_rewards, max_step, terminal_agent_id),
TerminalSteps(
terminal_obs_list,
terminal_rewards,
max_step,
terminal_agent_id,
terminal_team_manager,
),
)

39
com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs


string.Concat(
"CjNtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2lu",
"Zm8ucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjRtbGFnZW50c19lbnZz",
"L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvItEBCg5B",
"L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvIuoBCg5B",
"YXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG9KBAgBEAJKBAgCEANKBAgD",
"EARKBAgEEAVKBAgFEAZKBAgGEAdKBAgMEA1CJaoCIlVuaXR5Lk1MQWdlbnRz",
"LkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw=="));
"YXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG8SFwoPdGVhbV9tYW5hZ2Vy",
"X2lkGA4gASgJSgQIARACSgQIAhADSgQIAxAESgQIBBAFSgQIBRAGSgQIBhAH",
"SgQIDBANQiWqAiJVbml0eS5NTEFnZW50cy5Db21tdW5pY2F0b3JPYmplY3Rz",
"YgZwcm90bzM="));
new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto), global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations" }, null, null, null)
new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto), global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations", "TeamManagerId" }, null, null, null)
}));
}
#endregion

id_ = other.id_;
actionMask_ = other.actionMask_.Clone();
observations_ = other.observations_.Clone();
teamManagerId_ = other.teamManagerId_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}

get { return observations_; }
}
/// <summary>Field number for the "team_manager_id" field.</summary>
public const int TeamManagerIdFieldNumber = 14;
private string teamManagerId_ = "";
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string TeamManagerId {
get { return teamManagerId_; }
set {
teamManagerId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as AgentInfoProto);

if (Id != other.Id) return false;
if(!actionMask_.Equals(other.actionMask_)) return false;
if(!observations_.Equals(other.observations_)) return false;
if (TeamManagerId != other.TeamManagerId) return false;
return Equals(_unknownFields, other._unknownFields);
}

if (Id != 0) hash ^= Id.GetHashCode();
hash ^= actionMask_.GetHashCode();
hash ^= observations_.GetHashCode();
if (TeamManagerId.Length != 0) hash ^= TeamManagerId.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}

}
actionMask_.WriteTo(output, _repeated_actionMask_codec);
observations_.WriteTo(output, _repeated_observations_codec);
if (TeamManagerId.Length != 0) {
output.WriteRawTag(114);
output.WriteString(TeamManagerId);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}

}
size += actionMask_.CalculateSize(_repeated_actionMask_codec);
size += observations_.CalculateSize(_repeated_observations_codec);
if (TeamManagerId.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(TeamManagerId);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}

}
actionMask_.Add(other.actionMask_);
observations_.Add(other.observations_);
if (other.TeamManagerId.Length != 0) {
TeamManagerId = other.TeamManagerId;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}

}
case 106: {
observations_.AddEntriesFrom(input, _repeated_observations_codec);
break;
}
case 114: {
TeamManagerId = input.ReadString();
break;
}
}

1
com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs


/// </summary>
[HideInInspector, SerializeField, FormerlySerializedAs("m_TeamID")]
public int TeamId;
// TODO properties here instead of Agent
[FormerlySerializedAs("m_useChildSensors")]

5
com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs


agentInfoProto.ActionMask.AddRange(ai.discreteActionMasks);
}
if (ai.teamManagerId != null)
{
agentInfoProto.TeamManagerId = ai.teamManagerId;
}
return agentInfoProto;
}

42
com.unity.ml-agents/Runtime/Agent.cs


/// </summary>
public int episodeId;
/// <summary>
/// Team Manager identifier.
/// </summary>
public string teamManagerId;
public void ClearActions()
{
storedActions.Clear();

/// </summary>
float[] m_LegacyActionCache;
private ITeamManager m_TeamManager;
/// <summary>
/// Called when the attached [GameObject] becomes enabled and active.
/// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html

new int[m_ActuatorManager.NumDiscreteActions]
);
if (m_TeamManager != null)
{
m_Info.teamManagerId = m_TeamManager.GetId();
}
// The first time the Academy resets, all Agents in the scene will be
// forced to reset through the <see cref="AgentForceReset"/> event.
// To avoid the Agent resetting twice, the Agents will not begin their

/// <summary>
/// The reason that the Agent has been set to "done".
/// </summary>
enum DoneReason
public enum DoneReason
{
/// <summary>
/// The episode was ended manually by calling <see cref="EndEpisode"/>.

}
}
// Request the last decision with no callbacks
// We request a decision so Python knows the Agent is done immediately
m_Brain?.RequestDecision(m_Info, sensors);
ResetSensors();
if (m_TeamManager != null)
{
// Send final observations to TeamManager if it exists.
// The TeamManager is responsible to keeping track of the Agent after it's
// done, including propagating any "posthumous" rewards.
m_TeamManager.OnAgentDone(this, doneReason, sensors);
}
else
{
SendDoneToTrainer();
}
// We also have to write any to any DemonstationStores so that they get the "done" flag.
foreach (var demoWriter in DemonstrationWriters)

m_RequestAction = false;
m_RequestDecision = false;
m_Info.storedActions.Clear();
}
public void SendDoneToTrainer()
{
// We request a decision so Python knows the Agent is done immediately
m_Brain?.RequestDecision(m_Info, sensors);
ResetSensors();
}
/// <summary>

var actions = m_Brain?.DecideAction() ?? new ActionBuffers();
m_Info.CopyActions(actions);
m_ActuatorManager.UpdateActions(actions);
}
public void SetTeamManager(ITeamManager teamManager)
{
m_TeamManager = teamManager;
m_Info.teamManagerId = teamManager?.GetId();
teamManager?.RegisterAgent(this);
}
}
}

8
Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab


m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 1
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114492261207303438
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 0
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114850431417842684
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 1
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &5320024511406682322
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 0
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &5379409612883756837
MonoBehaviour:

146
Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity


propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &774084574

propertyPath: m_RootOrder
value: 11
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1177695920

propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1325062279

propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1348885204

m_Name:
m_EditorClassIdentifier:
gravityMultiplier: 1
monitorVerticalOffset: 0
reuseCollisionCallbacks: 1
--- !u!114 &1574236051
MonoBehaviour:
m_ObjectHideFlags: 0

blueMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2}
randomizePlayersTeamForTraining: 0
agentRunSpeed: 2
strikerPunish: -0.1
strikerReward: 1
goaliePunish: -1
goalieReward: 0.1
--- !u!1001 &1606160104
PrefabInstance:
m_ObjectHideFlags: 0

propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1748755984

propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &2043067438

- target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
propertyPath: m_RootOrder
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}

22
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs


public class WallJumpAgent : Agent
{
// Depending on this value, the wall will have different height
int m_Configuration;
protected int m_Configuration;
// Brain to use when no wall is present
public NNModel noWallBrain;
// Brain to use when a jumpable wall is present

public GameObject ground;
public GameObject spawnArea;
Bounds m_SpawnAreaBounds;
protected Bounds m_SpawnAreaBounds;
Rigidbody m_ShortBlockRb;
Rigidbody m_AgentRb;
Material m_GroundMaterial;
Renderer m_GroundRenderer;
WallJumpSettings m_WallJumpSettings;
protected Rigidbody m_ShortBlockRb;
protected Rigidbody m_AgentRb;
protected Material m_GroundMaterial;
protected Renderer m_GroundRenderer;
protected WallJumpSettings m_WallJumpSettings;
public float jumpingTime;
public float jumpTime;

string m_SmallWallBehaviorName = "SmallWallJump";
string m_BigWallBehaviorName = "BigWallJump";
EnvironmentParameters m_ResetParams;
protected EnvironmentParameters m_ResetParams;
public override void Initialize()
{

/// <returns>The Enumerator to be used in a Coroutine.</returns>
/// <param name="mat">The material to be swapped.</param>
/// <param name="time">The time the material will remain.</param>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); //wait for 2 sec

}
// Detect when the agent hits the goal
void OnTriggerStay(Collider col)
protected virtual void OnTriggerStay(Collider col)
{
if (col.gameObject.CompareTag("goal") && DoGroundCheck(true))
{

/// If 1: Small wall and smallWallBrain.
/// Other : Tall wall and BigWallBrain.
/// </param>
void ConfigureAgent(int config)
protected virtual void ConfigureAgent(int config)
{
var localScale = wall.transform.localScale;
if (config == 0)

2
Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta


fileFormatVersion: 2
guid: d6d6a33ed0e18459a8d61817d600978a
guid: 71d1487c63f604ff6985cc2f23c7afbf
DefaultImporter:
externalObjects: {}
userData:

932
Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
文件差异内容过多而无法显示
查看文件

22
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs


public GameObject symbolO;
public GameObject symbolX;
public bool useVectorObs;
Rigidbody m_AgentRb;
Material m_GroundMaterial;
Renderer m_GroundRenderer;
HallwaySettings m_HallwaySettings;
int m_Selection;
protected Rigidbody m_AgentRb;
protected Material m_GroundMaterial;
protected Renderer m_GroundRenderer;
protected HallwaySettings m_HallwaySettings;
protected int m_Selection;
StatsRecorder m_statsRecorder;
public override void Initialize()

m_GroundRenderer = ground.GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
m_statsRecorder = Academy.Instance.StatsRecorder;
//m_statsRecorder = Academy.Instance.StatsRecorder;
}
public override void CollectObservations(VectorSensor sensor)

}
}
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time);

{
SetReward(1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.goalScoredMaterial, 0.5f));
m_statsRecorder.Add("Goal/Correct", 1, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Correct", 1, StatAggregationMethod.Sum);
m_statsRecorder.Add("Goal/Wrong", 1, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Wrong", 1, StatAggregationMethod.Sum);
}
EndEpisode();
}

symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
m_statsRecorder.Add("Goal/Correct", 0, StatAggregationMethod.Sum);
m_statsRecorder.Add("Goal/Wrong", 0, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Correct", 0, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Wrong", 0, StatAggregationMethod.Sum);
}
}

35
ml-agents/mlagents/trainers/behavior_id_utils.py


from typing import NamedTuple
from typing import NamedTuple, Optional
from urllib.parse import urlparse, parse_qs

behavior_id: str
brain_name: str
team_id: int
group_id: int
Parses a name_behavior_id of the form name?team=0
Parses a name_behavior_id of the form name?team=0&group=0
group_id: int = 0
if "group" in ids:
group_id = int(ids["group"][0])
behavior_id=name_behavior_id, brain_name=name, team_id=team_id
behavior_id=name_behavior_id,
brain_name=name,
team_id=team_id,
group_id=group_id,
def create_name_behavior_id(name: str, team_id: int) -> str:
def create_name_behavior_id(
name: str, team_id: Optional[int] = None, group_id: Optional[int] = None
) -> str:
"""
Reconstructs fully qualified behavior name from name and team_id
:param name: brain name
:param team_id: team ID
:return: name_behavior_id
Reconstructs fully qualified behavior name from name and team_id
:param name: brain name
:param team_id: team ID
:return: name_behavior_id
"""
return name + "?team=" + str(team_id)
final_name = name
if team_id is not None:
final_name += f"?team={team_id}"
if group_id is not None:
final_name += f"&group={group_id}"
return final_name
def get_global_agent_id(worker_id: int, agent_id: int) -> str:

14
ml-agents/mlagents/trainers/ghost/trainer.py


:param parsed_behavior_id: Behavior ID that the policy should belong to.
:param policy: Policy to associate with name_behavior_id.
"""
name_behavior_id = parsed_behavior_id.behavior_id
self._name_to_parsed_behavior_id[name_behavior_id] = parsed_behavior_id
name_behavior_id = create_name_behavior_id(
parsed_behavior_id.brain_name, team_id=parsed_behavior_id.team_id
)
# Add policy only based on the team id, not the group id
self._name_to_parsed_behavior_id[
parsed_behavior_id.behavior_id
] = parsed_behavior_id
self.policies[name_behavior_id] = policy
def get_policy(self, name_behavior_id: str) -> Policy:

:return: Policy associated with name_behavior_id
"""
# Get policy based on team id, but not group id
parsed_behavior_id = BehaviorIdentifiers.from_name_behavior_id(name_behavior_id)
name_behavior_id = create_name_behavior_id(
parsed_behavior_id.brain_name, team_id=parsed_behavior_id.team_id
)
return self.policies[name_behavior_id]
def _save_snapshot(self) -> None:

5
ml-agents/mlagents/trainers/policy/torch_policy.py


masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
seq_len: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[AgentAction, ActionLogProbs, torch.Tensor, torch.Tensor]:
"""
:param obs: List of observations.

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
seq_len: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
obs, actions, masks, memories, seq_len
obs, actions, masks, memories, seq_len, critic_obs
)
return log_probs, entropies, value_heads

memories = torch.as_tensor(self.retrieve_memories(global_agent_ids)).unsqueeze(
0
)
run_out = {}
with torch.no_grad():
action, log_probs, entropy, memories = self.sample_actions(

29
ml-agents/mlagents/trainers/tests/test_buffer.py


b = AgentBuffer()
for step in range(9):
b["vector_observation"].append(
[
100 * fake_agent_id + 10 * step + 1,
100 * fake_agent_id + 10 * step + 2,
100 * fake_agent_id + 10 * step + 3,
]
np.array(
[
100 * fake_agent_id + 10 * step + 1,
100 * fake_agent_id + 10 * step + 2,
100 * fake_agent_id + 10 * step + 3,
],
dtype=np.float32,
)
[100 * fake_agent_id + 10 * step + 4, 100 * fake_agent_id + 10 * step + 5]
np.array(
[
100 * fake_agent_id + 10 * step + 4,
100 * fake_agent_id + 10 * step + 5,
],
dtype=np.float32,
)
)
return b

a = agent_1_buffer["vector_observation"].get_batch(
batch_size=2, training_length=1, sequential=True
)
assert_array(np.array(a), np.array([[171, 172, 173], [181, 182, 183]]))
assert len(a) == 2
assert_array(
np.array(a), np.array([[171, 172, 173], [181, 182, 183]], dtype=np.float32)
)
a = agent_2_buffer["vector_observation"].get_batch(
batch_size=2, training_length=3, sequential=True
)

[261, 262, 263],
[271, 272, 273],
[281, 282, 283],
]
],
dtype=np.float32,
),
)
a = agent_2_buffer["vector_observation"].get_batch(

71
ml-agents/mlagents/trainers/buffer.py


import numpy as np
import h5py
from typing import List, BinaryIO
from typing import List, BinaryIO, Any
import itertools
from mlagents_envs.exception import UnityException

class AgentBufferField(list):
"""
AgentBufferField is a list of numpy arrays. When an agent collects a field, you can add it to its
AgentBufferField with the append method.
AgentBufferField is a list of data, usually numpy arrays. When an agent collects a field,
you can add it to its AgentBufferField with the append method.
"""
def __init__(self):

def __str__(self):
return str(np.array(self).shape)
def append(self, element: np.ndarray, padding_value: float = 0.0) -> None:
def append(self, element: Any, padding_value: Any = 0.0) -> None:
Adds an element to this list. Also lets you change the padding
Adds an element to this AgentBuffer. Also lets you change the padding
type, so that it can be set on append (e.g. action_masks should
be padded with 1.)
:param element: The element to append to the list.

self.padding_value = padding_value
def extend(self, data: np.ndarray) -> None:
"""
Adds a list of np.arrays to the end of the list of np.arrays.
:param data: The np.array list to append.
def set(self, data: List[Any]) -> None:
self += list(np.array(data, dtype=np.float32))
def set(self, data):
"""
Sets the list of np.array to the input data
:param data: The np.array list to be set.
Sets the AgentBuffer to the provided list
:param data: The list to be set.
dtype = None
if data is not None and len(data) and isinstance(data[0], float):
dtype = np.float32
self[:] = list(np.array(data, dtype=dtype))
self[:] = data
def get_batch(
self,

) -> np.ndarray:
) -> List[Any]:
from the list of np.array
from the AgentBuffer.
:param batch_size: The number of elements to retrieve. If None:
All elements will be retrieved.
:param training_length: The length of the sequence to be retrieved. If

)
if batch_size * training_length > len(self):
padding = np.array(self[-1], dtype=np.float32) * self.padding_value
return np.array(
[padding] * (training_length - leftover) + self[:],
dtype=np.float32,
)
return [padding] * (training_length - leftover) + self[:]
return np.array(
self[len(self) - batch_size * training_length :],
dtype=np.float32,
)
return self[len(self) - batch_size * training_length :]
else:
# The sequences will have overlapping elements
if batch_size is None:

tmp_list: List[np.ndarray] = []
for end in range(len(self) - batch_size + 1, len(self) + 1):
tmp_list += self[end - training_length : end]
return np.array(tmp_list, dtype=np.float32)
return tmp_list
def reset_field(self) -> None:
"""

return len(next(iter(self.values())))
else:
return 0
@staticmethod
def obs_list_to_obs_batch(obs_list: List[List[np.ndarray]]) -> List[np.ndarray]:
"""
Converts a List of obs (an obs itself consinsting of a List of np.ndarray) to
a List of np.ndarray, with the observations batchwise.
"""
# Transpose and convert List of Lists
new_list = list(map(lambda x: np.asanyarray(list(x)), zip(*obs_list)))
return new_list
@staticmethod
def obs_list_list_to_obs_batch(
obs_list_list: List[List[List[np.ndarray]]]
) -> List[List[np.ndarray]]:
"""
Convert a List of List of obs, where one of the dimension is time and the other is number (e.g. in the
case of a variable number of critic observations) to a List of obs, where time is in the batch dimension
of the obs, and the List is the variable number of agents.
"""
new_list = list(
map(
lambda x: AgentBuffer.obs_list_to_obs_batch(list(x)),
zip(*obs_list_list),
)
)
return new_list

30
ml-agents/mlagents/trainers/optimizer/torch_optimizer.py


import numpy as np
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.trajectory import ObsUtil
from mlagents.trainers.trajectory import ObsUtil, TeamObsUtil
from mlagents.trainers.torch.components.bc.module import BCModule
from mlagents.trainers.torch.components.reward_providers import create_reward_provider

)
def get_trajectory_value_estimates(
self, batch: AgentBuffer, next_obs: List[np.ndarray], done: bool
self,
batch: AgentBuffer,
next_obs: List[np.ndarray],
next_critic_obs: List[List[np.ndarray]],
done: bool,
) -> Tuple[Dict[str, np.ndarray], Dict[str, float]]:
n_obs = len(self.policy.behavior_spec.sensor_specs)
current_obs = ObsUtil.from_buffer(batch, n_obs)

next_obs = [obs.unsqueeze(0) for obs in next_obs]
critic_obs = TeamObsUtil.from_buffer(batch, n_obs)
critic_obs = [
[ModelUtils.list_to_tensor(obs) for obs in _teammate_obs]
for _teammate_obs in critic_obs
]
next_critic_obs = [
ModelUtils.list_to_tensor_list(_list_obs) for _list_obs in next_critic_obs
]
# Expand dimensions of next critic obs
next_critic_obs = [
[_obs.unsqueeze(0) for _obs in _list_obs] for _list_obs in next_critic_obs
]
memory = torch.zeros([1, 1, self.policy.m_size])
current_obs, memory, sequence_length=batch.num_experiences
current_obs,
memory,
sequence_length=batch.num_experiences,
critic_obs=critic_obs,
next_obs, next_memory, sequence_length=1
next_obs, next_memory, sequence_length=1, critic_obs=next_critic_obs
)
for name, estimate in value_estimates.items():

194
ml-agents/mlagents/trainers/trajectory.py


from typing import List, NamedTuple
import itertools
import attr
import numpy as np
from mlagents.trainers.buffer import AgentBuffer

class AgentExperience(NamedTuple):
@attr.s(auto_attribs=True)
class TeammateStatus:
"""
Stores data related to an agent's teammate.
"""
reward: float
action: ActionTuple
done: bool
@attr.s(auto_attribs=True)
class AgentExperience:
obs: List[np.ndarray]
teammate_status: List[TeammateStatus]
reward: float
done: bool
action: ActionTuple

return result
class TeamObsUtil:
@staticmethod
def get_name_at(index: int) -> str:
"""
returns the name of the observation given the index of the observation
"""
return f"team_obs_{index}"
@staticmethod
def get_name_at_next(index: int) -> str:
"""
returns the name of the next team observation given the index of the observation
"""
return f"team_obs_next_{index}"
@staticmethod
def _padded_time_to_batch(
agent_buffer_field: AgentBuffer.AgentBufferField,
) -> List[np.ndarray]:
"""
Convert an AgentBufferField of List of obs, where one of the dimension is time and the other is number (e.g.
in the case of a variable number of critic observations) to a List of obs, where time is in the batch dimension
of the obs, and the List is the variable number of agents. For cases where there are varying number of agents,
pad the non-existent agents with NaN.
"""
# Find the first observation. This should be USUALLY O(1)
obs_shape = None
for _team_obs in agent_buffer_field:
if _team_obs:
obs_shape = _team_obs[0].shape
break
# If there were no critic obs at all
if obs_shape is None:
return []
new_list = list(
map(
lambda x: np.asanyarray(x),
itertools.zip_longest(
*agent_buffer_field, fillvalue=np.full(obs_shape, np.nan)
),
)
)
return new_list
@staticmethod
def _transpose_list_of_lists(
list_list: List[List[np.ndarray]],
) -> List[List[np.ndarray]]:
return list(map(list, zip(*list_list)))
@staticmethod
def from_buffer(batch: AgentBuffer, num_obs: int) -> List[np.array]:
"""
Creates the list of observations from an AgentBuffer
"""
separated_obs: List[np.array] = []
for i in range(num_obs):
separated_obs.append(
TeamObsUtil._padded_time_to_batch(batch[TeamObsUtil.get_name_at(i)])
)
# separated_obs contains a List(num_obs) of Lists(num_agents), we want to flip
# that and get a List(num_agents) of Lists(num_obs)
result = TeamObsUtil._transpose_list_of_lists(separated_obs)
return result
@staticmethod
def from_buffer_next(batch: AgentBuffer, num_obs: int) -> List[np.array]:
"""
Creates the list of observations from an AgentBuffer
"""
separated_obs: List[np.array] = []
for i in range(num_obs):
separated_obs.append(
TeamObsUtil._padded_time_to_batch(
batch[TeamObsUtil.get_name_at_next(i)]
)
)
# separated_obs contains a List(num_obs) of Lists(num_agents), we want to flip
# that and get a List(num_agents) of Lists(num_obs)
result = TeamObsUtil._transpose_list_of_lists(separated_obs)
return result
next_collab_obs: List[List[np.ndarray]]
agent_id: str
behavior_id: str

agent_buffer_trajectory = AgentBuffer()
obs = self.steps[0].obs
for step, exp in enumerate(self.steps):
if step < len(self.steps) - 1:
is_last_step = step == len(self.steps) - 1
if not is_last_step:
next_obs = self.steps[step + 1].obs
else:
next_obs = self.next_obs

agent_buffer_trajectory[ObsUtil.get_name_at(i)].append(obs[i])
agent_buffer_trajectory[ObsUtil.get_name_at_next(i)].append(next_obs[i])
# Take care of teammate obs and actions
teammate_continuous_actions, teammate_discrete_actions, teammate_rewards = (
[],
[],
[],
)
for teammate_status in exp.teammate_status:
teammate_rewards.append(teammate_status.reward)
teammate_continuous_actions.append(teammate_status.action.continuous)
teammate_discrete_actions.append(teammate_status.action.discrete)
# Team actions
agent_buffer_trajectory["team_continuous_action"].append(
teammate_continuous_actions
)
agent_buffer_trajectory["team_discrete_action"].append(
teammate_discrete_actions
)
agent_buffer_trajectory["team_rewards"].append(teammate_rewards)
team_reward = teammate_rewards + [exp.reward]
agent_buffer_trajectory["average_team_reward"].append(
sum(team_reward) / len(team_reward)
)
# Next actions
teammate_cont_next_actions = []
teammate_disc_next_actions = []
if not is_last_step:
next_exp = self.steps[step + 1]
for teammate_status in next_exp.teammate_status:
teammate_cont_next_actions.append(teammate_status.action.continuous)
teammate_disc_next_actions.append(teammate_status.action.discrete)
else:
for teammate_status in exp.teammate_status:
teammate_cont_next_actions.append(teammate_status.action.continuous)
teammate_disc_next_actions.append(teammate_status.action.discrete)
agent_buffer_trajectory["team_next_continuous_action"].append(
teammate_cont_next_actions
)
agent_buffer_trajectory["team_next_discrete_action"].append(
teammate_disc_next_actions
)
for i in range(num_obs):
ith_team_obs = []
for _teammate_status in exp.teammate_status:
# Assume teammates have same obs space
ith_team_obs.append(_teammate_status.obs[i])
agent_buffer_trajectory[TeamObsUtil.get_name_at(i)].append(ith_team_obs)
ith_team_obs_next = []
if is_last_step:
for _obs in self.next_collab_obs:
ith_team_obs_next.append(_obs[i])
else:
next_teammate_status = self.steps[step + 1].teammate_status
for _teammate_status in next_teammate_status:
# Assume teammates have same obs space
ith_team_obs_next.append(_teammate_status.obs[i])
agent_buffer_trajectory[TeamObsUtil.get_name_at_next(i)].append(
ith_team_obs_next
)
agent_buffer_trajectory["team_dones"].append(
[_status.done for _status in exp.teammate_status]
)
cont_next_actions = np.zeros_like(exp.action.continuous)
disc_next_actions = np.zeros_like(exp.action.discrete)
if not is_last_step:
next_action = self.steps[step + 1].action
cont_next_actions = next_action.continuous
disc_next_actions = next_action.discrete
agent_buffer_trajectory["next_continuous_action"].append(cont_next_actions)
agent_buffer_trajectory["next_discrete_action"].append(disc_next_actions)
agent_buffer_trajectory["continuous_log_probs"].append(
exp.action_probs.continuous
)

Returns true if trajectory is terminated with a Done.
"""
return self.steps[-1].done
@property
def teammate_dones_reached(self) -> bool:
"""
Returns true if all teammates are done at the end of the trajectory.
Combine with done_reached to check if the whole team is done.
"""
return all(_status.done for _status in self.steps[-1].teammate_status)
@property
def interrupted(self) -> bool:

8
ml-agents/mlagents/trainers/torch/attention.py


self.self_size = 0
self.ent_encoders = torch.nn.ModuleList(
[
LinearEncoder(self.self_size + ent_size, 1, embedding_size)
LinearEncoder(
self.self_size + ent_size,
1,
embedding_size,
kernel_init=Initialization.Normal,
kernel_gain=(0.125 / embedding_size) ** 0.5,
)
for ent_size in self.entity_sizes
]
)

2
ml-agents/mlagents/trainers/torch/components/bc/module.py


from mlagents.trainers.policy.torch_policy import TorchPolicy
from mlagents.trainers.demo_loader import demo_to_buffer
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.buffer import AgentBuffer
class BCModule:

25
ml-agents/mlagents/trainers/torch/encoders.py


return height, width
class VectorInput(nn.Module):
class InputProcessor:
def copy_normalization(self, other_input: "InputProcessor") -> None:
pass
def update_normalization(self, inputs: torch.Tensor) -> None:
pass
class VectorInput(nn.Module, InputProcessor):
def __init__(self, input_size: int, normalize: bool = False):
super().__init__()
self.normalizer: Optional[Normalizer] = None

inputs = self.normalizer(inputs)
return inputs
def copy_normalization(self, other_input: "VectorInput") -> None:
if self.normalizer is not None and other_input.normalizer is not None:
self.normalizer.copy_from(other_input.normalizer)
def copy_normalization(self, other_input: "InputProcessor") -> None:
if isinstance(other_input, VectorInput):
if self.normalizer is not None and other_input.normalizer is not None:
self.normalizer.copy_from(other_input.normalizer)
def update_normalization(self, inputs: torch.Tensor) -> None:
if self.normalizer is not None:

class SmallVisualEncoder(nn.Module):
class SmallVisualEncoder(nn.Module, InputProcessor):
"""
CNN architecture used by King in their Candy Crush predictor
https://www.researchgate.net/publication/328307928_Human-Like_Playtesting_with_Deep_Learning

return self.dense(hidden)
class SimpleVisualEncoder(nn.Module):
class SimpleVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

return self.dense(hidden)
class NatureVisualEncoder(nn.Module):
class NatureVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

return input_tensor + self.layers(input_tensor)
class ResNetVisualEncoder(nn.Module):
class ResNetVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

17
ml-agents/mlagents/trainers/torch/layers.py


Linear layers.
"""
def __init__(self, input_size: int, num_layers: int, hidden_size: int):
def __init__(
self,
input_size: int,
num_layers: int,
hidden_size: int,
kernel_init: Initialization = Initialization.KaimingHeNormal,
kernel_gain: float = 1.0,
):
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_init=kernel_init,
kernel_gain=kernel_gain,
)
]
self.layers.append(Swish())

hidden_size,
hidden_size,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_init=kernel_init,
kernel_gain=kernel_gain,
)
)
self.layers.append(Swish())

177
ml-agents/mlagents/trainers/torch/networks.py


from mlagents.trainers.torch.encoders import VectorInput
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.trajectory import ObsUtil
from mlagents.trainers.torch.attention import ResidualSelfAttention, EntityEmbeddings
ActivationFunction = Callable[[torch.Tensor], torch.Tensor]

return encoding, memories
# NOTE: this class will be replaced with a multi-head attention when the time comes
class MultiInputNetworkBody(nn.Module):
def __init__(
self,
sensor_specs: List[SensorSpec],
network_settings: NetworkSettings,
encoded_act_size: int = 0,
num_obs_heads: int = 1,
):
super().__init__()
self.normalize = network_settings.normalize
self.use_lstm = network_settings.memory is not None
# Scale network depending on num agents
self.h_size = network_settings.hidden_units
self.m_size = (
network_settings.memory.memory_size
if network_settings.memory is not None
else 0
)
self.processors, _input_size = ModelUtils.create_input_processors(
sensor_specs,
self.h_size,
network_settings.vis_encode_type,
normalize=self.normalize,
)
# Modules for self-attention
self.entity_encoder = EntityEmbeddings(
sum(_input_size), [sum(_input_size)], self.h_size, concat_self=False
)
self.self_attn = ResidualSelfAttention(self.h_size)
encoder_input_size = self.h_size
total_enc_size = encoder_input_size + encoded_act_size
self.linear_encoder = LinearEncoder(
total_enc_size, network_settings.num_layers, self.h_size
)
if self.use_lstm:
self.lstm = LSTM(self.h_size, self.m_size)
else:
self.lstm = None # type: ignore
@property
def memory_size(self) -> int:
return self.lstm.memory_size if self.use_lstm else 0
def update_normalization(self, buffer: AgentBuffer) -> None:
obs = ObsUtil.from_buffer(buffer, len(self.processors))
for vec_input, enc in zip(obs, self.processors):
if isinstance(enc, VectorInput):
enc.update_normalization(torch.as_tensor(vec_input))
def copy_normalization(self, other_network: "NetworkBody") -> None:
if self.normalize:
for n1, n2 in zip(self.processors, other_network.processors):
if isinstance(n1, VectorInput) and isinstance(n2, VectorInput):
n1.copy_normalization(n2)
def forward(
self,
all_net_inputs: List[List[torch.Tensor]],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[torch.Tensor, torch.Tensor]:
concat_encoded_obs = []
x_self = None
self_encodes = []
inputs = all_net_inputs[0]
for idx, processor in enumerate(self.processors):
obs_input = inputs[idx]
processed_obs = processor(obs_input)
self_encodes.append(processed_obs)
x_self = torch.cat(self_encodes, dim=-1)
# Get attention masks by grabbing an arbitrary obs across all the agents
# Since these are raw obs, the padded values are still NaN
only_first_obs = [_all_obs[0] for _all_obs in all_net_inputs]
obs_for_mask = torch.stack(only_first_obs, dim=1)
# Get the mask from nans
attn_mask = torch.any(obs_for_mask.isnan(), dim=2).type(torch.FloatTensor)
# Get the self encoding separately, but keep it in the entities
concat_encoded_obs = [x_self]
for inputs in all_net_inputs[1:]:
encodes = []
for idx, processor in enumerate(self.processors):
obs_input = inputs[idx]
obs_input[obs_input.isnan()] = 0.0 # Remove NaNs
processed_obs = processor(obs_input)
encodes.append(processed_obs)
concat_encoded_obs.append(torch.cat(encodes, dim=-1))
concat_entites = torch.stack(concat_encoded_obs, dim=1)
encoded_entity = self.entity_encoder(x_self, [concat_entites])
encoded_state = self.self_attn(encoded_entity, [attn_mask])
if len(concat_encoded_obs) == 0:
raise Exception("No valid inputs to network.")
# Constants don't work in Barracuda
if actions is not None:
inputs = torch.cat([encoded_state, actions], dim=-1)
else:
inputs = encoded_state
encoding = self.linear_encoder(inputs)
if self.use_lstm:
# Resize to (batch, sequence length, encoding size)
encoding = encoding.reshape([-1, sequence_length, self.h_size])
encoding, memories = self.lstm(encoding, memories)
encoding = encoding.reshape([-1, self.m_size // 2])
return encoding, memories
class ValueNetwork(nn.Module):
def __init__(
self,

return output, memories
class CentralizedValueNetwork(ValueNetwork):
def __init__(
self,
stream_names: List[str],
observation_shapes: List[Tuple[int, ...]],
network_settings: NetworkSettings,
encoded_act_size: int = 0,
outputs_per_stream: int = 1,
):
# This is not a typo, we want to call __init__ of nn.Module
nn.Module.__init__(self)
self.network_body = MultiInputNetworkBody(
observation_shapes, network_settings, encoded_act_size=encoded_act_size
)
if network_settings.memory is not None:
encoding_size = network_settings.memory.memory_size // 2
else:
encoding_size = network_settings.hidden_units
self.value_heads = ValueHeads(stream_names, encoding_size, outputs_per_stream)
def forward(
self,
inputs: List[List[torch.Tensor]],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[Dict[str, torch.Tensor], torch.Tensor]:
encoding, memories = self.network_body(
inputs, actions, memories, sequence_length
)
output = self.value_heads(encoding)
return output, memories
class Actor(abc.ABC):
@abc.abstractmethod
def update_normalization(self, buffer: AgentBuffer) -> None:

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor]]:
encoding, memories = self.network_body(
inputs, memories=memories, sequence_length=sequence_length

sensor_specs, network_settings, action_spec, conditional_sigma, tanh_squash
)
self.stream_names = stream_names
self.critic = ValueNetwork(stream_names, sensor_specs, network_settings)
self.critic = CentralizedValueNetwork(
stream_names, sensor_specs, network_settings
)
@property
def memory_size(self) -> int:

inputs: List[torch.Tensor],
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: List[List[torch.Tensor]] = None,
all_net_inputs = [inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
if actor_mem is not None:
# Make memories with the actor mem unchanged

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor]]:
actor_mem, critic_mem = self._get_actor_critic_mem(memories)
encoding, actor_mem_outs = self.network_body(

all_net_inputs = [inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
return log_probs, entropies, value_outputs

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:

)
action, log_probs, entropies = self.action_model(encoding, masks)
all_net_inputs = [inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
if self.use_lstm:
mem_out = torch.cat([actor_mem_outs, critic_mem_outs], dim=-1)

12
ml-agents/mlagents/trainers/torch/utils.py


return torch.as_tensor(np.asanyarray(ndarray_list), dtype=dtype)
@staticmethod
def list_to_tensor_list(
ndarray_list: List[np.ndarray], dtype: Optional[torch.dtype] = torch.float32
) -> torch.Tensor:
"""
Converts a list of numpy arrays into a list of tensors. MUCH faster than
calling as_tensor on the list directly.
"""
return [
torch.as_tensor(np.asanyarray(_arr), dtype=dtype) for _arr in ndarray_list
]
@staticmethod
def to_numpy(tensor: torch.Tensor) -> np.ndarray:
"""
Converts a Torch Tensor to a numpy array. If the Tensor is on the GPU, it will

100
ml-agents/mlagents/trainers/torch/agent_action.py


from typing import List, Optional, NamedTuple, Dict
import itertools
from mlagents.trainers.buffer import AgentBuffer
class AgentAction(NamedTuple):

return action_tuple
@staticmethod
def _padded_time_to_batch(
agent_buffer_field: AgentBuffer.AgentBufferField,
dtype: torch.dtype = torch.float32,
) -> List[torch.Tensor]:
"""
Pad actions and convert to tensor. Note that data is padded by 0's, not NaNs
as the observations are.
"""
action_shape = None
for _action in agent_buffer_field:
if _action:
action_shape = _action[0].shape
break
# If there were no critic obs at all
if action_shape is None:
return []
new_list = list(
map(
lambda x: ModelUtils.list_to_tensor(x, dtype=dtype),
itertools.zip_longest(
*agent_buffer_field, fillvalue=np.full(action_shape, 0)
),
)
)
return new_list
@staticmethod
def from_dict(buff: Dict[str, np.ndarray]) -> "AgentAction":
"""
A static method that accesses continuous and discrete action fields in an AgentBuffer

discrete_tensor[..., i] for i in range(discrete_tensor.shape[-1])
]
return AgentAction(continuous, discrete)
@staticmethod
def from_dict_next(buff: Dict[str, np.ndarray]) -> "AgentAction":
"""
A static method that accesses continuous and discrete action fields in an AgentBuffer
and constructs the corresponding AgentAction from the retrieved np arrays.
"""
continuous: torch.Tensor = None
discrete: List[torch.Tensor] = None # type: ignore
if "next_continuous_action" in buff:
continuous = ModelUtils.list_to_tensor(buff["continuous_action"])
if "next_discrete_action" in buff:
discrete_tensor = ModelUtils.list_to_tensor(
buff["discrete_action"], dtype=torch.long
)
discrete = [
discrete_tensor[..., i] for i in range(discrete_tensor.shape[-1])
]
return AgentAction(continuous, discrete)
@staticmethod
def _from_team_dict(
buff: Dict[str, np.ndarray], cont_action_key: str, disc_action_key: str
) -> List["AgentAction"]:
continuous_tensors: List[torch.Tensor] = []
discrete_tensors: List[torch.Tensor] = [] # type: ignore
if cont_action_key in buff:
continuous_tensors = AgentAction._padded_time_to_batch(
buff[cont_action_key]
)
if disc_action_key in buff:
discrete_tensors = AgentAction._padded_time_to_batch(
buff[disc_action_key], dtype=torch.long
)
actions_list = []
for _cont, _disc in itertools.zip_longest(
continuous_tensors, discrete_tensors, fillvalue=None
):
if _disc is not None:
_disc = [_disc[..., i] for i in range(_disc.shape[-1])]
actions_list.append(AgentAction(_cont, _disc))
return actions_list
@staticmethod
def from_team_dict(buff: Dict[str, np.ndarray]) -> List["AgentAction"]:
"""
A static method that accesses continuous and discrete action fields in an AgentBuffer
and constructs the corresponding AgentAction from the retrieved np arrays.
"""
return AgentAction._from_team_dict(
buff, "team_continuous_action", "team_discrete_action"
)
@staticmethod
def from_team_dict_next(buff: Dict[str, np.ndarray]) -> List["AgentAction"]:
"""
A static method that accesses next continuous and discrete action fields in an AgentBuffer
and constructs the corresponding AgentAction from the retrieved np arrays.
"""
return AgentAction._from_team_dict(
buff, "team_next_continuous_action", "team_next_discrete_action"
)
def to_flat(self, discrete_branches: List[int]) -> torch.Tensor:
discrete_oh = ModelUtils.actions_to_onehot(
self.discrete_tensor, discrete_branches
)
discrete_oh = torch.cat(discrete_oh, dim=1)
return torch.cat([self.continuous_tensor, discrete_oh], dim=-1)

81
ml-agents/mlagents/trainers/agent_processor.py


import sys
import numpy as np
from typing import List, Dict, TypeVar, Generic, Tuple, Any, Union
from collections import defaultdict, Counter
import queue

StatsAggregationMethod,
EnvironmentStats,
)
from mlagents.trainers.trajectory import Trajectory, AgentExperience
from mlagents.trainers.trajectory import TeammateStatus, Trajectory, AgentExperience
from mlagents.trainers.policy import Policy
from mlagents.trainers.action_info import ActionInfo, ActionInfoOutputs
from mlagents.trainers.torch.action_log_probs import LogProbsTuple

"""
self.experience_buffers: Dict[str, List[AgentExperience]] = defaultdict(list)
self.last_step_result: Dict[str, Tuple[DecisionStep, int]] = {}
# current_group_obs is used to collect the last seen obs of all the agents in the same group,
# and assemble the collab_obs.
self.current_group_obs: Dict[str, Dict[str, List[np.ndarray]]] = defaultdict(
lambda: defaultdict(list)
)
# last_group_obs is used to collect the last seen obs of all the agents in the same group,
# and assemble the collab_obs.
self.teammate_status: Dict[str, Dict[str, TeammateStatus]] = defaultdict(
lambda: defaultdict(None)
)
# last_take_action_outputs stores the action a_t taken before the current observation s_(t+1), while
# grabbing previous_action from the policy grabs the action PRIOR to that, a_(t-1).
self.last_take_action_outputs: Dict[str, ActionInfoOutputs] = {}

if global_id in self.last_step_result: # Don't store if agent just reset
self.last_take_action_outputs[global_id] = take_action_outputs
# Iterate over all the terminal steps
# Iterate over all the terminal steps, first gather all the teammate obs
# and then create the AgentExperiences/Trajectories
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._gather_teammate_obs(terminal_step, global_id)
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)

# Iterate over all the decision steps
# Clear the last seen group obs when agents die.
self._clear_teammate_obs(global_id)
# Clean the last experience dictionary for terminal steps
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
# Iterate over all the decision steps, first gather all the teammate obs
# and then create the trajectories
for ongoing_step in decision_steps.values():
local_id = ongoing_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._gather_teammate_obs(ongoing_step, global_id)
for ongoing_step in decision_steps.values():
local_id = ongoing_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)

[_gid], take_action_outputs["action"]
)
def _gather_teammate_obs(
self, step: Union[TerminalStep, DecisionStep], global_id: str
) -> None:
stored_decision_step, idx = self.last_step_result.get(global_id, (None, None))
stored_take_action_outputs = self.last_take_action_outputs.get(global_id, None)
if stored_decision_step is not None and stored_take_action_outputs is not None:
if step.team_manager_id is not None:
stored_actions = stored_take_action_outputs["action"]
action_tuple = ActionTuple(
continuous=stored_actions.continuous[idx],
discrete=stored_actions.discrete[idx],
)
teammate_status = TeammateStatus(
obs=stored_decision_step.obs,
reward=step.reward,
action=action_tuple,
done=isinstance(step, TerminalStep),
)
self.teammate_status[step.team_manager_id][global_id] = teammate_status
self.current_group_obs[step.team_manager_id][global_id] = step.obs
def _clear_teammate_obs(self, global_id: str) -> None:
self._delete_in_nested_dict(self.current_group_obs, global_id)
self._delete_in_nested_dict(self.teammate_status, global_id)
def _delete_in_nested_dict(self, nested_dict, key):
for _manager_id, _team_group in nested_dict.items():
self._safe_delete(_team_group, key)
if not _team_group: # if dict is empty
self._safe_delete(_team_group, _manager_id)
def _process_step(
self, step: Union[TerminalStep, DecisionStep], global_id: str, index: int
) -> None:

)
action_mask = stored_decision_step.action_mask
prev_action = self.policy.retrieve_previous_action([global_id])[0, :]
# Assemble teammate_obs. If none saved, then it will be an empty list.
teammate_statuses = []
for _id, _obs in self.teammate_status[step.team_manager_id].items():
if _id != global_id:
teammate_statuses.append(_obs)
teammate_status=teammate_statuses,
reward=step.reward,
done=done,
action=action_tuple,

len(self.experience_buffers[global_id]) >= self.max_trajectory_length
or terminated
):
# Make next AgentExperience
next_collab_obs = []
for _id, _exp in self.current_group_obs[step.team_manager_id].items():
if _id != global_id:
next_collab_obs.append(_exp)
next_collab_obs=next_collab_obs,
behavior_id=self.behavior_id,
)
for traj_queue in self.trajectory_queues:

9
ml-agents/mlagents/trainers/ppo/optimizer_torch.py


from mlagents.trainers.torch.agent_action import AgentAction
from mlagents.trainers.torch.action_log_probs import ActionLogProbs
from mlagents.trainers.torch.utils import ModelUtils
from mlagents.trainers.trajectory import ObsUtil
from mlagents.trainers.trajectory import ObsUtil, TeamObsUtil
class TorchPPOOptimizer(TorchOptimizer):

# Convert to tensors
current_obs = [ModelUtils.list_to_tensor(obs) for obs in current_obs]
critic_obs = TeamObsUtil.from_buffer(batch, n_obs)
critic_obs = [
[ModelUtils.list_to_tensor(obs) for obs in _teammate_obs]
for _teammate_obs in critic_obs
]
act_masks = ModelUtils.list_to_tensor(batch["action_mask"])
actions = AgentAction.from_dict(batch)

masks=act_masks,
actions=actions,
memories=memories,
critic_obs=critic_obs,
seq_len=self.policy.sequence_length,
)
old_log_probs = ActionLogProbs.from_dict(batch).flatten()

11
ml-agents/mlagents/trainers/ppo/trainer.py


value_estimates, value_next = self.optimizer.get_trajectory_value_estimates(
agent_buffer_trajectory,
trajectory.next_obs,
trajectory.done_reached and not trajectory.interrupted,
trajectory.next_collab_obs,
trajectory.done_reached
and trajectory.teammate_dones_reached
and not trajectory.interrupted,
)
for name, v in value_estimates.items():

n_sequences = max(
int(self.hyperparameters.batch_size / self.policy.sequence_length), 1
)
advantages = self.update_buffer["advantages"].get_batch()
# Normalize advantages
advantages = np.array(self.update_buffer["advantages"].get_batch())
(advantages - advantages.mean()) / (advantages.std() + 1e-10)
list((advantages - advantages.mean()) / (advantages.std() + 1e-10))
)
num_epoch = self.hyperparameters.num_epoch
batch_update_stats = defaultdict(list)

63
config/ppo/WallJumpCollab.yaml


behaviors:
SmallWallJump:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 15000000
time_horizon: 128
summary_freq: 20000
threaded: true
environment_parameters:
big_wall_height:
curriculum:
- name: Lesson0
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.1
value: 3
- name: Lesson1
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.3
value: 5
- name: Lesson2
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.5
value: 8
- name: Lesson3
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.7
value: 9
- name: Lesson4
value: 9

26
config/ppo/HallwayCollab.yaml


behaviors:
HallwayCollab:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 1024
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 10000000
time_horizon: 64
summary_freq: 10000
threaded: true

3
com.unity.ml-agents/Runtime/ITeamManager.cs.meta


fileFormatVersion: 2
guid: 75810d91665e4477977eb78c9b15aeb3
timeCreated: 1610057818

14
com.unity.ml-agents/Runtime/ITeamManager.cs


using System.Collections.Generic;
using Unity.MLAgents.Sensors;
namespace Unity.MLAgents
{
public interface ITeamManager
{
string GetId();
void RegisterAgent(Agent agent);
// TODO not sure this is all the info we need, maybe pass a class/struct instead.
void OnAgentDone(Agent agent, Agent.DoneReason doneReason, List<ISensor> sensors);
}
}

50
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WallAreaScoring : MonoBehaviour
{
public GameObject[] agents;
WallJumpSettings m_WallJumpSettings;
Renderer m_GroundRenderer;
Material m_GroundMaterial;
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); //wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
public void Start()
{
m_WallJumpSettings = FindObjectOfType<WallJumpSettings>();
m_GroundRenderer = GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
}
public void WinCondition()
{
foreach (var agent in agents)
{
WallJumpCollabAgent agentScript = agent.GetComponent<WallJumpCollabAgent>();
agentScript.SetReward(1f);
agentScript.EndEpisode();
}
StartCoroutine(
GoalScoredSwapGroundMaterial(m_WallJumpSettings.goalScoredMaterial, 1f));
}
public void LoseCondition()
{
foreach (var agent in agents)
{
WallJumpCollabAgent agentScript = agent.GetComponent<WallJumpCollabAgent>();
agentScript.SetReward(-1f);
agentScript.EndEpisode();
}
StartCoroutine(
GoalScoredSwapGroundMaterial(m_WallJumpSettings.failMaterial, .2f));
}
}

11
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs.meta


fileFormatVersion: 2
guid: ad7213222795741f5b6ca2b332f16da9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs.meta


fileFormatVersion: 2
guid: 2cdbc0d9a64fe4b12a3ed4b81a151117
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

67
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs


//Put this script on your blue cube.
using System.Collections;
using UnityEngine;
using Unity.MLAgents;
using Unity.Barracuda;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using Unity.MLAgentsExamples;
public class WallJumpCollabAgent : WallJumpAgent
{
Vector3 m_InitialPosition;
WallAreaScoring m_Scoring;
public override void Initialize()
{
m_WallJumpSettings = FindObjectOfType<WallJumpSettings>();
m_Scoring = ground.GetComponent<WallAreaScoring>();
m_Configuration = 5;
m_AgentRb = GetComponent<Rigidbody>();
// m_ShortBlockRb = shortBlock.GetComponent<Rigidbody>();
m_SpawnAreaBounds = spawnArea.GetComponent<Collider>().bounds;
m_GroundRenderer = ground.GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
m_InitialPosition = transform.localPosition;
spawnArea.SetActive(false);
m_ResetParams = Academy.Instance.EnvironmentParameters;
}
public override void OnEpisodeBegin()
{
transform.localPosition = m_InitialPosition;
m_Configuration = 5;
m_AgentRb.velocity = default(Vector3);
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
MoveAgent(actionBuffers.DiscreteActions);
if (!Physics.Raycast(m_AgentRb.position, Vector3.down, 20))
{
m_Scoring.LoseCondition();
}
}
protected override void ConfigureAgent(int config)
{
var localScale = wall.transform.localScale;
var height = m_ResetParams.GetWithDefault("big_wall_height", 9);
localScale = new Vector3(
localScale.x,
height,
localScale.z);
wall.transform.localScale = localScale;
}
// Detect when the agent hits the goal
protected override void OnTriggerStay(Collider col)
{
if (col.gameObject.CompareTag("goal") && DoGroundCheck(true))
{
m_Scoring.WinCondition();
}
}
}

7
Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity.meta


fileFormatVersion: 2
guid: 136090e065a8f48bfb97ea3083893d8a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity
文件差异内容过多而无法显示
查看文件

7
Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab.meta


fileFormatVersion: 2
guid: ff1a5743be49d43f08378dcd76451821
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab
文件差异内容过多而无法显示
查看文件

7
Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity.meta


fileFormatVersion: 2
guid: d6d6a33ed0e18459a8d61817d600978a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity
文件差异内容过多而无法显示
查看文件

566
Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx


pytorch1.7:��
Q
vector_observation22Slice_0"Slice*
axes@�*
ends@i�*
starts@�
Q
vector_observation23Slice_1"Slice*
axes@�*
ends@o�*
starts@i�
4
22
2324Concat_2"Concat*
axis����������
�
24
/network_body.linear_encoder.seq_layers.0.weight
-network_body.linear_encoder.seq_layers.0.bias25Gemm_3"Gemm*
alpha�?�*
beta�?�*
transB�

2526 Sigmoid_4"Sigmoid

25
2627Mul_5"Mul
�
27
/network_body.linear_encoder.seq_layers.2.weight
-network_body.linear_encoder.seq_layers.2.bias28Gemm_6"Gemm*
alpha�?�*
beta�?�*
transB�

2829 Sigmoid_7"Sigmoid

28
2930Mul_8"Mul
K
action_masks31Slice_9"Slice*
axes@�*
ends@�*
starts@�
L
action_masks32Slice_10"Slice*
axes@�*
ends@�*
starts@�
�
30
5action_model._discrete_distribution.branches.0.weight
3action_model._discrete_distribution.branches.0.bias33Gemm_11"Gemm*
alpha�?�*
beta�?�*
transB�
134 Constant_12"Constant*
value*J���

31
3435Mul_13"Mul
136 Constant_14"Constant*
value*J�?�

35
3637Add_15"Add

33
3138Mul_16"Mul
139 Constant_17"Constant*
value*J ��L�

37
3940Mul_18"Mul

38
4041Sub_19"Sub
*
4142
Softmax_20"Softmax*
axis�
�
30
5action_model._discrete_distribution.branches.1.weight
3action_model._discrete_distribution.branches.1.bias43Gemm_21"Gemm*
alpha�?�*
beta�?�*
transB�
144 Constant_22"Constant*
value*J���

32
4445Mul_23"Mul
146 Constant_24"Constant*
value*J�?�

45
4647Add_25"Add

43
3248Mul_26"Mul
149 Constant_27"Constant*
value*J ��L�

47
4950Mul_28"Mul

48
5051Sub_29"Sub
*
5152
Softmax_30"Softmax*
axis�
153 Constant_31"Constant*
value*J���3�

42
5354Add_32"Add

5455Log_33"Log
156 Constant_34"Constant*
value*J���3�

52
5657Add_35"Add

5758Log_36"Log
:
55
58discrete_actions Concat_37"Concat*
axis�
0
55
58action Concat_38"Concat*
axis�
< memory_size Constant_39"Constant*
value*
J�torch-jit-export*OB3action_model._discrete_distribution.branches.0.biasJ��� ��;ۺ���#�;�U<*��B5action_model._discrete_distribution.branches.0.weightJ�`�����=�}{<�'0���_];�{�:��*�����鼦G <>�ջ���� �ܗ��P��C�_<Yj����ֺǟ����;��w���ʼr�O��y�<���e��;��케X�<Bhļ8d�;�+<����滯����d���V�ê�<Vp��s ����;�^6�"X�|��G;D<��4�����kB�;�5k���$=����
e<�V��<�D;<�[^;d=*��r����m<13�]m߼}5[�v������� ��֝<��ϼ�Jռ��<�]�����<����C)�eж��R�n��3G<̲X�Lz׼$uǻ���<�5n��;λ5�;����q��T��������94׼&�����t!�<Y��==F���;B>���6���x��{�:��뺁S���%�뼛�=�,�<�༘�ۼ&��$����v�;@�:��D<:c��ŗ��?Ĝ<� ���� �::AԼW_*���6�>��o��:V�߼��������<�%�hD����=<+-�=�ۄ��G=ͣ<| =��=��= �����v�<� �=���==Ͻ�Wy�݆ʼ�׻��=UbI=���=`)�<�Ѡ��5���{�<�҉=��J=��(�I�E=�of���=OK=��q;��p���g�t��=��?=�8o��K�<[k�;fs �RT��]�׉c<s���R��]����=����> =����y1 ���м�`D=��
=vU��A(=AQ�=ԚJ= ���!��� >h�ἐlۼEॽ�a)=ڒ�����<wؘ=����f�p0�<��5=� h��Ț�K�������� =|�<�!�=�
&�~6�=mO����j<|Tg�#f|=��(�4�=�.�#<�7[>���D�<#낽:�����˼ӭ<qq��}�����=����+Դ�6:��i7�f$5=(P;�S< �K�{�=�w���h�W]����=_jg�%y=�V=L+<���<�Ӏ=�������<z=迼=+�=�<�k�����=�R��d˃�MRu��y�T��<����k�;<罻���<^ͼg2<�q���:t�;����&�<{��<C2?�����m��^�Sc��*���H��������<2�U���k��R�'\3<Q�H=B;��伓�H��b<U��P���`��,�<�)
�if��o"�<��Ҽr3�:��ֻ��f<���:���=<?�=�R���9�;p*�<]Y.���������4d�3r�G������۬���`��\�0<����>=#��;= �|<��K�X�Ir4�sd¼�*<��'c=�)�<G<7��<�>���o=�,���=jo'�po�<#��^v< ��;;��<�
6��`e�l�<oJ�?��<%��<c���pIo=g���>���m�<���;������<�/�eG+�D�J=d
<�.{<�z¼�ؼ���`�<~��<$'����^� ���;�5�������̼���<rT`�D�|;r\<R2��@A$���>��0ͻځ���1�,��;�B=�F<��
�;��=�#���굼��;ת=z|`= �=��»�U����F=�ʊ��m�=�$�<C�H�2�p���M=��qC��}���i��Bک<֣?�DH<�S���r6���o�H��=v�׽^����(m�B
�=�Pټꧽ�^�{��=���1�[=O��=�+�=�O�=��e<'(6�2��;����m�<j��=H��<Yf�=���=�i^=J=� ω���9:��l�<�d�=�-�=Jwr��K����=Xy����}=����A�=(�p=�"��J꒽���<����HЍ��҄=r�>��=���=���=M�=�M���=(���8s=�;��=E�����=)���2Ľ�]e=T�
��|=G��=}���C�<�<�=�懽�\ >�%=X ��gAN=�}��]��Ǡa=�?<��S<��<)'f<}�x<r�'=s ==�ɺ�@l��0X�#���ׄ4��W���á=ө�����=��n<r�N=�S0����_=����r,�$w�=߹�; �_��j��ܛ��7�^=[�-<d���A{ǽI8��[�P�][�=V=�<�Ґ�)�A��~���/�V@>=�ʪ=< �,3o=��:����,�=Be�=��׼-V��>H=��)= � ��H�#z�;�U<ӌ=c���QҦ=��*�p�h=`i*�Q�=�փ<?+���ݎ��Ô<%�<t�4=*Uq=`,�=ߢ������nR��t�<96�<{���U@�:i0"=��=���=� `�*ڽ����i�q=�Ƽ��Q�;o�=�!��C6=����A������`X�=�H=��=2D�=6:���u�d���YF̼�,��)VŽ�!ǽHI1�`Nz�z�I��~:=f��z��n�"�e>:���=v���ܑ�
��􎔽|%�=8�=[ap���x=��|��� =TZ���̠�ͱ�=��=��8�J|��?�]�<))k="T��0o��/���q�=$=N�=��C=�E�=�f=���T=Uj>�� ���ཐ&��� μsb����==rk��J��*CB3action_model._discrete_distribution.branches.1.biasJЕ?�Е?<*��B5action_model._discrete_distribution.branches.1.weightJ����f�<�m����;øP<��<��;�x����;�#����<��<1�� �軝
���Ԗ<�4<�� ��( ����;�V��"}{<j�~��ze���A=s���,<C ��G"=��?�mu<Q~�<NU�<a���\�� (?<���;��޹Q?;��ڼ��/<Y7N;��~��|�����<bE�;4E��$D���D��ɰ<�6��j�����;�������!�;o*<=��������3k�<䍖;ӑ;��v<{����~<������#;F�������":��+5;�/&��<� <W�x<�^Y<Y��FOm<�J�<�� �~�=�ą��nѻWoϹ6xl:%�<��<�꼻=��<+��<�Z����_<1����0&߼L�G��_��(�l��Q�<<1'���!��+�����<�oǼ\�;ל�;�!�f_�����;Vx<��;�L�:9)�<%Z�;�&��Ѡ<D�r;D[漨�F<���#~�<�r�;��$<?���Mژ�-*���.�;[�?��;���<���5)�T`Ѽ]�<Jd< ��;e�ü������W<m��;&2+�K����,�8��`ѱ� X�;�\߻Ӱ�;[�;�J�<�<���*�9s7�� ������L�s��A�ټ/AѼ���<���;���˷�L��P�;�ܫ<��Z�<O��:$<�.W;����z�<����e�A�;��� R��c6z<��X<�����"; �!<)/�0>1<������x<��<�/���޻j�:�+����;�懼�z/=_<Z�<p+Լ��]<������$>�:����a��+�<�B�;,���Q�W�@<f��0��;�X��҄���w�򻥼ɯ�� �<����kn��^X��{��E�<�==�^�<@x�<v��9r����P����U<�5�<Rސ<G��� =�ja;b ���.<�O�<� ;������U�;���8򰼘6 =�k��i���y�<[?���;8J��]j����`�<���<U�<*Baction_output_shapeJ�@*(Bdiscrete_action_output_shapeJ�@*!Bis_continuous_controlJ*��B-network_body.linear_encoder.seq_layers.0.biasJ�B�#=ŌE=��<�$c=�U=g�1<��V=C�=��9=h�=Űn��N <C� =�r=B.K=g袺~G)=t–<�!�;_z%;T < �Y��G=���<��*�cf;���<�S:<�["=�Z�<�N�<��$=`��<ɷ�<; �<�#t<���;�k�� %#=!A=��H<^b�<l�ݻ�=�a%<�R�<��<�����3=(�<R@�Y�*<ɨ1<tDH;e[�< �< >�<�'�<��=�'�;�hM<��&=��Z<I��<ٳ� �=��;� #=�&�<� �<�����x�k�>=��<=�>�<�~Q<.�<���:Nj�<�j<� �<>��<���<c�=oC=�˻��=E\�@2.<��;97=�&J��W1<PÕ<���;��<_j�;+!=U��<��<�8�<>�=���<7�<1<Z2+<��C<|�=<�}}<�6���m�<��};#��<9��<l ;�=��;i�=��q<9�$<�&=���<O�H<G�=&�p<�_=>�;=���;*���oB/network_body.linear_encoder.seq_layers.0.weightJ��s5>�J)�I��@G&=c��=1��=�] �Y��=�����5;�3/���A=�����h�<H�=���#tܼ��,�S�]�����ٮ<IM<�ݜ=E��_L�<�ཽ�y���?>Kis�\h7<������T>q�����=��}<�yg>B��<��=.�dž��W#����= &�=� �<��̽=8��9c�<R�T>�y�=�\h>��[���p�P��=�(H>X�,>�ܑ=�=�M4>� >��;T��� ��> �J�x��=dX>I�����=<� >�����=_0�>�2m�{f�@
P�I��đ���o=.�;;?#=��?����=�.�=��.= ��<�(�<с/�gOļ#* ��e�=���ĺY=����mtE>��]=A��=%�e==��<}ξ��Ž��C>�M>��ȼ�ɽx��� 4>H6&>��r��2>��ʼ��h�<�f>1��;>�AF>~cͼ-8,>�����<'@S�(��!��<�<=@�ۼ��=�hN<Cԗ�Wx㼭�;=�A=���= ˍ����>�*�=�8P�t��F�=�s����=�ގ�F���C��<W�(=�k�=2��z�>ʁ�<�
/���4=�y>�*�T���4w=��>Pd�g�W��-���!��B�">��=�k۽�Q�=(�l��6�=������=��ݽ-�(>�†����=k*��������нj�b�D!�'Ƨ���=%�%�l񘽮�/>o㜼YS��q#=�F�=&c<��\=���0`�=6�>B�#�SX<>ؽ�s��0/>�zV=�Ǒ�WJ�=���=+�R=��=yuʽ���={S�>L,��$[4�jy;�+�5����>��1���5>D��:�\�<CBZ=����R��)����8>w���q��?k�=����l ��!e��n�0A=h{�N�>5I=��[=�
�8/�=@�w=]VY=[Q;Oo�=r>n=0���$�='Љ�Jp��e�߽��˼�q�<���Ch>#��/>�jL<�2׽�����0>sC�=�?�=�̽KK�<�� �A5>�����E>@�;a��;e��<j�=�6�<���=�`V=_��*%�<�ټ=�=��%=��}=��l>�;d= �E��=��&�ས8>0��=2� �����t�]=� ��������=������>�v���\y=�>��Y>��/��<h=L� ��3�;�x=:MC=ޥF>k ����d>����� �Ѥ{<��=��H� �+��o:>���=ޝ���{��
�<;�R>����cV>�
�=�vV=�2z<�Wi��?��">�0���e>=� ��@�=_��<t�We �ݑ�=F5��i��[' >:�G����<;F>����=˯e<#�!�ʊ,N�"r�>�ev��'�=� ����8١<T��=���>�����[=5�|����=��=+-��T �΢V��?�=��b�.p<wm>�|W>F�6=M�L�c>���:���=R���?/f>DE�=m�E����=�L=��=gظ����=������L>0D�=�q[��{��'>�%^>xX����@=w)�f�]�($>�=ֽr;�=D���n>2}=˒�����=��P<�nV>@2�(�W����<��4� J<��ľS@�=���;�Ӈ>�I>���<��=B�&�7�F>
�����6�=�_������N8�=� �>�ԗ=����\�>H�;=�Z���h�=V>������6��=%�<���>)��=6X�ge�=�7��Z��=�<=���=0XE��"�_�
�����_I��w~+;���N��>w��*/���/�&�� �=�$>���=�f*������n\���Ͻ�Y'>D�9>��>/�������wb�=lW�= lj��y�< %+>?eA=��>Դ=�0M�~��<��->;^ջ4�����2�q9w�>�g���c��OR�'�>�Gӽ��=���=m���8 �b���`>�f:�g�!=j,Q���;;Q3=��>
��`^�`́<e�>ޕ�<�<�PK��P�< p�=��; �����(�J����=̭�'�=8��<�9住0����>�����s�铂��!�=�t�=9��=&~˽�(���0>����?�6< ��=�$����/��=b�������4n= lY������W>t "�J(�=�F�=>7Q�Ā=Hot��R��?(>KD�=��=6���!���7�>+<���yR�5�<t�=��E>Q�i=�i�;}���1�y=�ɘ�H�=��=ʈ�<��O>���Zz�=JW�M��q�P>sٝ=��;��B=S!b>�_(�Y�Z= G�=8�]=�Qa�q ���H<}�ڼ��K=l��=�N�=�`m;���=t��=���� �@=�;�=KQ��u/���9>-֍>���=�����&G=#Ҡ�f(�~}O<���=�8�����;h>����:5H�<>�=������I�������覽���:���r�=>��=��*>����>l�>���=I�8=��Z�bw����V�k�����X������<4菽T�X�Y��=���= ��;��𽗳�=e��Ĥw=�䅽h'��1��<�;��h`+��4��� J��N����=����A��<���=�=$cq9rkże�:>#�E=�D>�Є=���<��;=�ٮ<Ͼ����'=� �=w�9����=�}�<ĭf=�U>�-1��~�=���="�������ż��.>X�׽;2_��É;�7�;ߍ�=���<�v�<�=rΚ<x
�=�Q�=Ԍ��my=��A<�蛽OI�;tni=ˉR>�թ�<��<ϖ�<d��0[˻-�[=�}����м�D6>��G�7�S=�b�<�����I��=VJ>�q�=��l�α>{c�������=C�$��%���>j�d���˼�^=R�q=;3=��k���<�fK=��ڽG�&=���:߭����=8�轡��=S��=�I���F�=`��>T�>�G;��ZY;>��=U ѽE����[>a ��6T=�y@��0���M;&73>Z֏=�'� ���9ގ=_r^>7J�]d�=?yt>�?>>O��>F;�H_)��C�;x��r�Ǽ/��=?��<p�=�!ǻ�� �q��<��=� >�4=��;Kec=�bq>.b>:���?���6E=��P<O�I=�������=��^=9�=p暽���=��>�#��>>�� �{>Ws\�Ok�������=�?= �>Ҥo<<�=�-�<��=YlȽ��U=�>D�'�>@�>��ӽ�����[>?������W���\J���E�h�m=昝=�J�<��a<h�l�5��=A�n=MD�pn�="���0'Ӽ�)I=��?={P�=q�Ƚ>�+=>�=r\�=E&>;>s�S>�k�=�V�,���V8���W>�߽��; R�>�F2�$:=6���L����"t�MЊ�o� ��i">�r�<��=�ok���X>���=��O>WH ��W��厼�L�=܇���l�=�Q�R{)>j{��V�z����'8�=��O�� �=WV9>��(= ]J�_==>�zE=i,�=���=��~��>�V0>���=ړU�D%>d-f���>^�����;�Hl��ߚ<����s�A;F�Ǽ����`Z�@�b��B<�Z����=��G;)w>N����>>���� Y��[X����=z��=d^�<�wB>K�=ph� =轋��8��=. z==T����=�v�=�́>S 6=��W���z���f=�G��$F�Z1�=�� =$y�<��%�)�ν�ȍ>�د���=�d=������=�� >�غ��� ����>z�����W��:=���<���=yW/�[�d�ƒR���F����Fƒ�Q4�= 2=�B>���=�ʳ�`�=n> ���b3:>a�d����=€!>��"������J<bF<�ţ=|B���fҽ�<�*�=��]�J.�=]E�=Ґ �E,<�u^���M�?�=��7���e��� ���#=n����e��>D��=��;a,�=���r0�<��=Y䣽H���ӏ=��==p^�]礽Ko/>��ĽO�=1�>Gg���$��|�<���=Z� >7<׎<� �����=�6s�� �<�H��D'�<Ӯ�=�<�r���pZv=7Ĝ=�����1���:� =۱�����="߆=�C�<y����e�=����W�y<�p���b.>]�нC�&>޴z=lk����=�1>^��>Z�p���'���=��:=1~߽ԁ��]� >��4=Ɋ��qFa>�Ž�����Y� ��:�e� ����=��鼀�"����~x޼�}ڽҸ�=ڹ'>�+= �ӽj.���R�=�Z˽TW�{@e=y�|V$���=��>�c��o^����=r�G���2AV��W=G���ǰ<)�Q>�Ҧ=�^�=M�'>t����N=򶩸$�3>��q���=3ei�x�-�1 >�A�<su併 ;=mUٽ���<4�:�e��:(�<>׿ڼ�`9��~����v�,�:,��1ҽbC��2P�������=i���m"�x >�a�9��x���N5�)X�<%>n�<�'�ny��N>��=Z%���Ƚ�>�S=����%29=���=K�2�f{�Ƽ�=s)�=)�
��̑��.�=+ =y8p�n-#>�d������$ʠ={ >fi>�.=����$�S=~I)���սp��=��-��"������E�B�#@t=V��}F��>}杼�����<��w���m� �<B��=u�ݻ�#;Δ'=M���*¼N�=���<H��O'�=����y� ��>��-%�=��:���`����=�H*�ײ�<����Q22=�p����=�i���7_�J�i�8Zi=���1̽}b��_��=�妼o�2>t��<P�f=2�û.를��c<��4�V%���>Z�Z>-�<��%=�V��u(D>�+�<[��[6�]�\�� *�,�y=Ѡ�F����T�k�&��ʥ=�����=��<�>v�X�8�<�2H��0�q�=�޺=:z-�'����=pn�=�+�=�\8�/�p=x�ȼq�����=v��=M ���&>���<kn�=ac:��`$=�D=š黎u>ܺ#�(���� >��> Qм"g��}��< �H�x�i=xn.�\�=�L�C����>��@ܽЃ���޽�hy=#^b=�NN=��l=9>��l��a޻�)=��]=���<��ٽ�`=> �=��Ľ��>L��<'�½�����jv=|(Q��c>:���)>�.��`���E�<kϸ=�q��L,�󏙽���=���{ə=�$Ͻ��9�4��� M=k�=��<f*��3@��4>�O)��1r��`�<7�=r���� >ن�<*&=�=4pY>�9@�J����>���n鼟��=�=j�<j��''=/��`[��γ'>�@���X>�)�԰�=BH�<y,��4q=V >:fg�M���F�>G�<s7=�5����=�~����������ID=���<Si(>�Y>���M_.>z�>.|���>x���t =��ĽϜO���t�
}=�>#>$>���|�=��3>||�=��{�ь�<HP���݀<6���轎>;=N5���������=�G=��=C⧾n�>��|=!�.>���=n/����=I�5> ����m��q���g<��C�Y��=ݑy�Gq,=�lν8S����=>2ơ� �=�÷= �ڽgi�ˎ�=�짽1kh=�O2>�z��-�< ��=�=�Q�>�e�==�q�m۽�s����8����<�r���,=f�޽1@ >S���Ƙ�<rf=l#����=�Y7��(�ಧ=� /=�Y=�O=}�q<�[�9w��=�K�=^6$�IY,= �<ɟ&>�`���3ܽ�������=�}r=�0=��ѽ������ս^' >�:= ��;�쇽�ǽǕԽ��=V��<�vL>��:k��=P"f>��� L=��?= �=o*�=F�E��O���>̟����%>�#��by3>�<�=��>Cݸ�a���od���F��\�����>A�=��X>D�=�]����0�e R�A�仩�K�X�(�cS=-S��]G�=X�ս��]� �>DVͽ�[���ּ#g9��qR>ھ?>o������<.� ����%=Dݻ=z�J�V�8>s:�������=�Zm����=�$�=�Zľy����#�c�=U9�=S��=��=_p9<�{D;d ��ν�I��t�=/Kr>c6�=y��=���=ɡ��:�%��<[�>>���<�o���R$��=P��jݪ;V�U>�9
����<�Xp���U=U��
}����琐=BO�=�+�:$K�<�V>�ܼ��}>?�<b$�<��3=�O=��ͼ%Џ;[��=�h�o_c�����CgI=� ׽7��=��=��=�%<�1�=@�=o=
��;�ݔ>/�G=ɛ�"&>�m]�3w?<�5>��p��5<\�|=���=H�>�ͳ�
�F�2�)>|�>4��=��E<��'>N�ڽv��=g)>�l[=��F<�8"���#=!�>DY�=�� =>��=W��;� μ�8�<�����н� �=����-i'�n����N � �>��;��D��Iǻd�<>3og�+"]=�늽vY�b��=K� <��G=��&�νv��=�h����>��<ˑ�=�v9��RM>�i��K�ȼ���<�3A��Bt��a�T|�88_���ܼf*�=�ځ��/:���;B1ܽn��=A�*�� �<����o
F<�P���]=OY�=cC>!+8�������2>���<��߼��U�������6��Pۼ�Լ/=�g���=yf��O��<G(�=
�{=��T;��)�ZD5�a����M=o=���=3\Ͻ����\z��x��9
2:>ʨ@=h��<R��=P޽���4��>�(�/�f�If�=/�n��½Z���������t ���e8�i�E=��̽f����v���%=�d>��<z>.����T��k�ֽ[���&�>Q��6�ý�>܃�<�{<7�Z<��e=RS=���<�|<>w�=��>1,������h�=q,��6�w���=B���~�>Β�.�7��̄�^����Ī���뽎<E��L5��y�=.����=�_պJ^6<!>��b<ܕ�=S�O����=g�Q>���PvѽO�=`��u�>Ub�=�H_=��<UW�9g�꽳@>Z�>:��y\>��7$U�(:=)�<X�=uN�=��=lOa��8=���=��{Z��Wi�>s�=�r�����6�<w��=�Ў=�Y�=~Fu�L��3���H<)�����X��!�I�y=Αu=�����
>sy> 2�=��a>ٖ=Q�:?a=s���gi=x��<����9�=-F��>b��==����ɼd��=����q�V��`��=��=���>��<X1�;�Y��ܽ� �=t��<�y�id��e��cr��hp�9��!�C��<�����'�Sv�~=�1�A��=;n�=If�^{F=��=�i =g��``=Ͷ��~t�<���u�����b���(��l\ >�xG�����
]��u��3���H󶼬&>.�=���=����\��=�l=cG>?V>���R�>�;Ľ�H=�P<Mc�=���)� >a��9;���+v=XCO�}��%��=θ�:\r�=�X�<�=�F=�e�=t���=䓽�V~=gм��> ,�=�:�������<���<���=�ŽK��:A߽YJt=[�~���=h��=��d>��>8י�4�<=�0��V��u�=��=@�����=�jнQ'�<�yy>��=a��=��w>j��w>
=J�����ӽ��J�υ�=���=W9Y����;?+"=��>�=����>y<�=��=�g=~��=$w�0�==%��<肝>
�=��ֽͰ���ҽ����#��=籤��C�=����t,]<@m>En�H�S>g%�;��#�(�d�q�O�l����],<U�A=�!��x��<�a@>�=,=��?=�S=�Fl=ca3�b�.��%���86�.�D>Zwc�-bL=��<��R�gx߽G�<�໼��;�i����~>`����L='>�bԼRR�=7Ȩ��l�=�b�
�%����Lv����=|�м�M2>�Ei��z���H>Po��fP4>�f���R>JJ��} h>�����y�k�=��<�o,>6ڴ<�c�=��,>?E�D�ƽ7M��K��=
o���v�;S5�=��0�v>�=�->�c���� >��e_���=d�=�<���c��W��� �:aϽF <��=�8K���=�o���YP���>gZ��j�=\��=����)3�Ie#��L=����J�y�Խ{"�=�]�<8^���?=i<��� ���/�=�Q ��=j���B<������:>���=��=i<��j��=q��=#�޼���%v�=kq���.�z1x�+zg=��=��,���ؼ#B���)���7Q>o,�=Hʕ=r�z=��<���=q�̻�|=r�����y@=�]�=�j%��c7����=U���=i��=��5����Q��">���=� ��T��=\<�I�"�~/��K[ϽR.��=Ͻ������<� ���]-��і�{���� >���=����/��<kp��E�K�����N �1d׽\�� +>�ܻ����=�A�x&������Mм����p�iT����{����=0g����=+�׼:�=񟽌Fs=vc�;��=���{+F=�9E>�g=g@�鬿=�<>����=x��Q�<zl>��=u5�����=�;=_;c�s�%�� �(e�������L���>{8>�\�����
)e:�׌�Z��=%��=f �;��⽺�
=�z����
=�޽�����5�=w¥�& ���V�Nm���*>%��=gE5=#M�;�i>�½H>Z ����� ���t0�>�>F-r<q�=�g�=5iA�4���
ؙ�a�>�i)��ϽE��<���%N��5>c('<�X<� $=���=G�����=�o
=�����'� )> ���.�V��=L ��`�)�VV뽔FT>�h�uUX�Z��<�� =��#=(ѵ=Q���s�l��/S<�w�֘����,>� =`Լ�W�>�r���8�����=��*=��*�;>N)�|��;ȅ�=*L��fh�����t�^>�D�=��������>N=ZP�<k|�=ּ�=�:=�<>�yZ��$�;ɤ뽤��=Pˊ=�-t;y 7�Mb�<�l����>4P�Wtw�e����W���S�=}���Z�����r�=%������=P��<5ۭ<A�̼�Yh>(�< �%�E�]=�$@=x;�=Mi���=g�0=�a�=%� �e�V����=� g�ۺ<pJ�qi�=��߹_>G��=0�6>��e����<NH��.�P<y�=<��՟�=�ҝ��%����g<�w1=��=aUϽ�!��I ��O�U��;������=uM�=�>,_<���=���=��h��c��n���̒�����$
��Y�=�l�u\q<��x=o�><��?
�=]�=RyP�MG�=�t��2����=5�e>��=Z��bA(=�YH� �2>�ʘ=sн�;$��d�=�d��+c}� �~>rZ��X^g�вR��!>�8˽ ;>?
���^=� ;�S<<Ӊ��ϼ���=����W��=��<q���.]>*=���=3 �ΰ켦�~=dr�*�>R:�<�� =�Y��n@>q�%���m�ӊ�;7A�<r=�d(�Rr>f���ͼ���= �=P7>�O8�|�;e����*��a x��/ӽ^_/=$�����Լ0t>��r���=��;��a=9(��M�*��~��JK���z���<G�I=
�>��0�}��=.�����>���V*=,��T3�=M@O=�}>�>�t =.�D>�松 -���8ý�)����н��=e���}�=�0�?��>\y���ކ�x��=���=�s��_���*<������`��->Vq�� �<9�=��z�;�cݻw���[> >�,w>sa�=��H��>�P�=~.����=O�=��]�&Bb=�g><���,6��^�<>%4O���=4��=|6 >�x >���=���;��o>�=�R_����=oZ���ݤ=��V�_J�K>��=\֜�� =n��=b���պ�=��H�>=�Ҝ<G>�V��7.���J;��:���S>�½ՠ==-�6�[ >%"�=1�佦h->��I=~^׽ux=`�=��>���=���k.�=��?9�<�`��Zj&>o���(��=J@D�k��<��W=���>Lx�=]��=e˜�Ң+�u�罫��=8�>��N�ܷA�O$�w�F�H��=rc=���=y��=�)e����=��<P �
�����b>J ��=�{��͌��H=�� � M�a&>PLj�*5��Q]��������=�w���z�LJ�=������>������u=���>�ܽ��=i�ʽ�햽pW>����X|���R=��<�ϗ=f�=U���Z[�=a��ӓ��������=�` = "%>��<�����> ��^'>�(>)��=[6��\bW=�$�:��%���9> ���!>*��=�a�@<H=��h<����%��,h�;Is<�ф=�`��w��=F��<�[�?���i˽�d2���X>s�y=��->j]�=]��=Ԅ�b��=X��=X븺[<��Ĭ��L.�k�=�q5�Q��=�����sx�f<��cK�=`xK�y��<j�.</X/� c���Hּ�Z�=Ǣ���y�� >R�����2����;�k�:����r�h���>�.�=�J�=t���[��_������<��I=��=��Ͻ�h���)�MW4>%e ����<c�0��j����(>UE��͠'�p��;�l�J��=Ǎ���?�:�>D�+�� �;#\q=���=��[>�z=�%>b6 > �n�����*��g�Q=���=�]w�r�(��>-,=� �=\�����=���=�9�=ͼ��ҥ����R�R<���=�;�=��߽�������<-�`��>2$�=����}��=1�>1�C�%I���ͼ�w�0�e�����f�=�{A��
���]
�B�&>J&ƾ��`=8^�=�===��9�X!=�铺n�(<�ۉ�m�^��=
��_D[������mq<�y���ѿ=�!�S��=��Ӽ�t>>��� ���&&>�Q/ ;+�ռʞH�F$�=G�7>B'�<�F�= �; <�����!��>�s��&_=R�<�⫼�>e̮=Ŷ�<�mm=ct=(��=��(�� �<�@�Ae���䎽Z�>E< V�;A}���>pj=��#�)�����o��Y
�s�}�����>�=��=�����zw>�ܼ�T$>oʔ�#�=n��<����4>��=�7>�0+>h\?>��w=�ڽ�� >�2��؎|=���Rzнv)���9�S|=�����1`�D3D>&!���� =�Q=���<�OD>S�:�\!'=^�>&��<M�D=ƚ�����=�i�=�
�=2���'���v;�Ȇ=�e�<��0=I��t5h� ֽ��ü&��n�=L�=�'Խ����9)=�� ��䯽��e=���=q|#>Z�F=� u�"vֽR��<��<#�ӽ��>�I�=�i=�Z>� �=��\����=�z�=K�[���ֽ��<��<<�S:�M��<t��=s��C�I=ƒ��X�=�D1� �=�=<�K= �Խ;1.>؍��~�>Xe��|r�=�E�<������=:=�n������ia=���<���:=mE��Sq=r��;k>�4�=1BM�y�b��=��3�I�M�z�ʽ[��=� �<� �;y��=/��=��¼)�r>e�߽�&�<�,k�m�V���Y��[�<�@���=�����
>���~m�=���=�yּ�\�=����ᆽP�=�>���=�s=�c���:>���<j@�>p}�=j�Ƽ�sO�/�� a�=1��t_�������Z>��#>�>+�+>�ۗ������=2�>��h���~= ̈��< >����X<�@�=����p*��:�<�>���=X�Y�s��='@�>d7����>e>� �n$O>k��> �=Np=��U���<D�=X}Ž��l�okQ��<">���<x��=��e=���=��>���*�G������U��0���=MѼ{� =�W��^.�=3�=j�=�������+=5��;S~>�[ͼ놾=K>��>���<g�@<Ӡ�=BO�����=; �����{Ҽ�Z����=���=�2�>裏�����|g8�өw=+0�uc�|��=aNX=���� yr>�<�;��=,%���ji������H��HH�5:$���4=&�}��=X�����=���������=�f�=v����=%ܛ=�1I�� ��9f���*u>���<n��>m�=A��fU$��ļ�̻�<�)=p�M><�J=%#���6��4�ǽ Lj���)�奊> o��Xd�;�] �V>������[{�=�I��b̽2�>�<#����֦�DDx>m�>=
z<0(E�ʄ�<&T�<�D(=��Ͻ�S�=i|\���:���w=VD�OŢ=���=��ټ����5�漢�>#�=���=��-� =�oS=_ >�c="�=Ƕ�=T][>T�(=Q�8Ƽ��<P ��L�=�8�>��=���X�\���漙5�=�*��,���\=>^�m@>L0E>� -����=C��>Ї�;�d�[q���f<g$@� �>u\����>UTҼx�`�6�=��=���]:�ލ.>��J�t����>��Ҽu�v=d�>��T�,`�=���> z�=rE������O�4�s<^�_.p;���ýL�n55<���=��;���P;�(�O�=��y<��-;Z��<H��<�$:>�H�����
���6u<%D�[��=�=���.(��}�W>]ԅ�.��<QAV��9��@�9��42>�>G�L��Nڽ��%���6�Jք;�����=V��F�@�}����iO=bV������c_=�tI��ƣ=��tdh<B/�<����\����:=r���.��0f�=g�d=|`>e[=贍;�9f�D/k� ����$�=���=��=�@V�n�6=�H�=���>� >�e�3�=i�R>J���漯p;=�R��$Ž�I���'T���X=�1b�Kc_>M��;� 1��!>u,�>ASF�)�ļ�-Ƚ�C>Z) >;�&=�\ ��~���ϽWԈ���'��*�=�F=���>(�=�c{���,���lx=ӂ���9�=�����4 =�� >��< ަ������=>�i>�?\=�S�=���< b=�LW=�I5�s���!x�^�=>|潧j�[���]O�.�<K �=����揟<���<� �a &� �˺8���������<,C�HD�=Q��=�,���=�p�<�=<;=j�wR�=�?=���=�L7>��!�p~�m>��\>q4Y�������<̈́����<���z���>�����<�w�7�8إ��3 ��>J� ��5��+��=�c{�?����ݽls��`��= ���=�.>��<�q�e�w�K���T�3�H�D=�_P=��|�������>[N�<t�=���!
�=���=6T�=S�;l�Y=_,?>�Ž��;�j =�8߼���&�I����=�9#>��[>�u>�R�>TT+=o3��U��l�<e����(�;�k����޽����)᥽*��=����s\�=hJ�>��#>,}�>^k�,�ں�K2=�Y,>��=��f�p���Z[>ƅ�-�.<+��=W��<=���=D ���׳�(M�X�Խ���=��;��=F�<Q9P�u%����=E��>�����"=�ܼ�5J=š>P5�<U��=�5�b�E>驷=yn<\��=�—� �=�RνoT>��_�=\��?�=6��=��T>_�W=�g���� I>v����=����*>��^��^|<�4>'Ӣ=�`=?\?�~ƽ7�="�= T�}8����C_!>���= �T�1��= s<っ�e?�=w
Ӽlp��)���(6w�)���o^C��U=���u�)>9`�s���AԽ�+>(R9�b�½�Y�='1���0�>K(>
����}�=�1>�o�=�\>z�Ժ�<��0w=�JR��Zǽr9��#+�<.���\��=mL�ߦ�[��'4>�!�=�Џ�U�|���Z=w o��n���nv����=����u�=�)=#%޽��𻨏T>.��<����_��=@t��R��K��c�b>�9�=ٌ�=~qE>w�����;��;A>�V= �_�>�L>�^���,���@�6Ի ������=�^�=���=�R����`�:o��U-��p��}�Lo$>!�>��>����g�=�*�=pE�<qD.�4����L=��&=}�v��O=�_�&�!����#;>h�u=�T�^�>t\0��1=�!���t�=su>>��;��Լ���=@��1��=�P�=�h=��!=�M�;��#�5����gI���id���}�����a�8�.���m�j����’�
�=+�\=^�o=���>=�S>5q����z�<���=nV�I�?>�.W��E��j>7֫��\������8���D�>�䗼ԗ<�e3��^�<l�j�Q�ս'E�i�����;=�^�=,�*>�=��I<0�S=��ֽI��=���=�A'��c/;D�n>Y�>)���.�k=MA�=��<�&��Ր=J�۽� >sD>������&<��)���.�qv�=x:,���=D�;���θ�Y[Z=�>��-=�\>T,��tͽ�� ����=��s�T��;]�0=K�T=��9���>eRڽg�=�Nj� XB>c/�=-��:y����/��<����g�i=����'=��<���=�]���m�lW,����=BF��\<=�� �&LA��Cr�514>F�P�q�CU&=��b�c�^>�ǎ��b��KVb�)�>��(=���=�<.�=OV�����v/=�X�=gg)<^.�=Ŧ����<��=!�j<a|�>Q��< �=:&*>p��+���E2>}�=�ӌ��ֽ�5<��ս�[=e� > =ݬ9��EG�I|=�3y=.�л��=��>�* �,ɼ���~#��ܧ ����<��=^�%��B^=�\�e�j�=��9�La��Q��OC�<�a�=�7$:>.<�ü=���<8S�����<9���?4�����t��=M5��9F=H[� >�8;i9�<��=�vH��i���V=�Z�� �=~-�=+������:E�V��,�=1R�=81��/Pͻr2�2(��Ee=x���
����ʽ �D<���>͗�=%}B�I�.> >o٦�rp<~����G>� ��->$}�;���Z�<�a�V��=�.t�n+/����Zj=w����`!>��=}}��J:=�T�<���=&����q?:<�I�#놽��^=� c�*k{�Cح=FU ���>���<6国.��=a�%�7|>-�5=���� ��]=q��<��<K�>S�6>a���EW�f�X�LBP���&�4Ʒ����=��= C;;�&�9y���R\>���=jɽ�`T>U�5>�����=���=�>=��ؽ�f <l뒼����p��;��p��4�=���>���Z�=|�Z���=���=@-q����2� �U �<��׽'�=��0��1�,=���;�m�<���=:A>�:�=��2>#�_>��=������=_��=�N%<��p=K�J��� =A>׽%B5��_�=O�ݽ��V�f��=��=�N6<{�F=%�8� m�=��U>���=�C޽��:_�j��?<1� �%O(�s�|>���=�h �"x">�P4��@ҽ�d >cu��M?>3O3=��\��g>A�=e64>BW=Y�����=�J=T#�n:�=y� =�8�<&�B=&M�="�&=">��\>q^� �=='<��p��V�=$#�����<�D� ,�<�ޛ�,}W=�� >��<cl3=�>�P>^����1���#--�sKʽXc�*�<S�>3��<L�`=r�=<xM>8<��8nK�7�W=Jq�>M�f=E/P=K� =H�<0=,��t=޾��Wm<,�ɽ�i ��l)>�8}�� ���7��!�>p�#<��W>�=���������<C�U=ݤ> �����=�b��G�+=�[�=/B>ت����c>�s(<E��<��=� ���� �7ճ���-=��$���%���� 9_�����v��=�������j] >U�>>Ҳ2��>�E= �x>��= �d��߷=M;��`��dN�;=�0�T6��2w��~�=�o��ij��4.<�G=Q7t=�h=>���=� ~=�$��=��缱��>� >��>����>=�>,�]�*n��"聽�`I<:�<S2�= ��>���k>*BO>�1�;���=��">Ь�=��^������⽱e�<��t��2;>��XH<����&�$��2&�)�[>���=��μ�Ù�4�1=XRȼ$����K�*�����p��,��r�K��E�=��K<�[�����=[�m�ֳ���_F=R��=������/��x�=r�L>oxҽs8� �?<]L���U=X>I<`�s<c�����;��ҽ}�:>)�I<k����<ˏ��Q>�d<�
��uԽ�Z�=(�=��?��� ���C���7=�M<�ַ�f��Y�<Pݢ�& �<T�J�(�ܢ;�N�8>��ν��&�j�?=4��<qǽpn >y������=� >�"w���=f��@g\<��=�Pm>��_��J�;���=;&�=.�k�aʃ<z� >�M8=������Hu�����܁��ژ=)n`>�-�8ڀ=0O�d"<�0ļ9L�=����ã�myH=Ղ>��4��N<��k����=��7�ߑ��o���5�<! ��s��^(����>�a���ؐ�Gf�=� �=S�4>� �:�窽a^l���C=�F0��� =ˍ�=�>&1����t>�� ���P=A��=�ߚ<u$C��y��;}��%�B�6}��CC�����i���8[� �ج�s5.=���=��=�q���f�<,_(>�έ�f��=��4=ジ;�ּ�䁽�r���=�#��}�=�V�徊��g�=Mݐ=�=�2>�U�=Xۻ��=C��ݜ;�:>)!����> ��/z>M� >!��<;����Z���мeu6���c��̅��[������&��x�>>���=NjU��,ǻ�܅���-�y��;�|��T����_������ ��v��=�����E=�S6���>8.C>{g�=����8�U:s��=�$�=q��<C5<�7�=�{!>X�{=@k�=��=���=����>u>�=7��=Ec#��|�=S����<OC=�pH>$���=�_��mܼ�d��7��;�UR>=I�[�=���=U�ҽVA>W k>+�<����ǒ�:�>p���MZӽ�,��}0>���=d���nV<�A@����93���W8���j�=�B'�R�v=���=�b>�G>,pM=�.��R�����2<5�� ��;��Ƚ�%>� �<�Jj>���=L��=��p��s�>��t=�sg�A����=(�=��{����<И>����T:=��8��9[�/vj��7����O���x�<�=���<H�`=�����
�=�ʀ�7b<��E>�$d=t)νm�h��=d7��F����9>��׽&c�=��:=GMS>:��=���= ����A�=5�&>��<�>��޽�s>�#��,J<����Ƀ=���
q������_����:%��{e&=w�>�KH� >�H�;�/l�.V>��q��b>�ټ��Ǽ��� �8�N����>Mr=� �=A)�=+�,�zJ0=u>ܨ>��|r�__����y=e齁1,=uCA��σ>&CP>��S��|o<� [<�};} V��ӕ��A�=�aW�g|���
d=��?>Om�>�~���ངWҽ�=��K�>� ��D��=7S�6χr�G�=���k�=n��<�%T=�_>�Ё���Z��bE=�m�<{,'��/> �_>�ý��H�'�=Ѻ��� ;�ʺ� �=�">����~X��9���i���o=LZ�;sB�=Hw@����ؽ�Wy>�lԼGi�>~�*�������f T=2vk>��K�9G�=�I�=�^=�]=��L�;��=S#a=�Z=�p�=�ߺ<���=�v��<�=�������<u��9iS=�(�Y�=ْ/>Nb3��P;��!>>QݽM�<^�f�U�'>)-�=*��[=�u��a�>�>�:;>�1(=P�E>C+<�8�=#Tн���<'�u>�d�� a >+��;�/��� �=�E���<���~)0��~��&.�<�8+����<0���׊<�=�<�(��;�g�0�D=I��͑�=%� >�J�=�o>0�:=��'>�♽�R}���Q�ز$��^�=���=��_�y9�F�.>N�=J��=&c=��ܽ@�߽�t�<d齇f��\�0=׎a=!#=�d�<���7Ѧ�p�p�5����:� ��KDH=
�=��g>��ֽ%x�����t�=����سR=^kн{�;��ֽ ?�<BDS=���:=v��=�� >�=�N�;&O%�dS���<(�Ϛc���\�ܲI��#o=$N=��"��R�<���=$
�<��.>�7Ӽ��>�ҩ=#�=��;���6����=j�=��7���'=i�k>)="�*>_f�<�o�����S=���<Z��g�Żb����=��$=]'%=R��<I��~�:�J$=2�ɽQf������ ���k��%d<!����K���=y(6<:��>��u��*[=4�����f�S���>~f4=�%+<ٿ��Ş&�t�=�q�Y;C���Q����Y�#=����К�������=��������_S=^��` =Ph^�Y@��V����r=3>8=jȷ��Ʌ=g�<X+5�D=5>�S���nN��oW><=��ü�>�=�g��)�P=֔ҼJ}���ά���=`;ڼ��=�d]�(?�����L�� Ƙ<LI�=�.�=�b������0T=��d�D=(���!����y6�ݐ/�d���Go�f�t=���q/|��<���� �=k齿���q|=�!��S��b�>���>�ר�T�<��j=��%>|%\>�WH=p=�z:;��˽$?O���>�=�,�����=a�������њ<�^i=c������D�D<��A>h)�<��t�1=l�=>q^�=���n��#E �6�G��F�<��ٻ��<��f<2��`u>(\>��z�=nd��<5#=�T�=�
��ו�Oh]=J7��&=�S�aG~��$5�]W>O > ��r�=o=2���]>vk�=$� �;Yڽv��P�,��G��sY�=� <��ۼ�;'�社2��<��6�L�������v�ar�=mp��^+=�+��=(!>�?�ڼ�"D>�Z>�&5>�]��y<�r��m&���z���=��<Y�t=�p��Rb�<��Խ�G���kȼ>q��
Ѫ=��=��ܼ�I"���+>����]��� ���˼נ����=?=����Y��E>�cV�|W�G��CӲ=D� ��p��Og�=b�>찻�}�<p%��0���=^d>l9�����������A>+�j=9R��7>��B�yS�=+;���N=.��=>�z=�y��@��=e7�<k�I���/>�*�!3�K�����=����Q >:6�ţ��}�<����[��zs(>v ڻI�=(��q��6-���ם��t ��s8��e�;�<g<Cc�=�|��ҽ_|��yX �:*�<l̼�߽��f<��?>��Z�ʛ�=ۉ�<�D��̆���m�=좽�6l�� P>�Ƚ3�=ȸ+�𹬽&�Z�I���z�������K�<�<����nw�w6�=���=N�ʻE��<�n�<p��=�_I=oc��g������ =���e����=�$9=�Q
�g��=HЬ='�����<=���=>2R�7Փ����e��=^n�K��<�/��&��=o�w<�
�U�= _-�6伽���<B�=+�f�É=�p!�
c�B�ؽ~v�;{�<"X6<���5�>>�"6��!@�����2>Kg�= -�=Uކ>��;μ=n]>� �=&�w��h���R�<�!��Tw�=�,�,��;�;=��?�m�^>��L��u�=VG�w<��=��=>�~�3=�2O=���=Cʧ=���<)_=��G=!�\=��7����� �q�/>h��=��d<���=�X���%=z�>�ܢ<�]����L>f�:�<�!��g�5=������\>S�?�y3ٽ46:����Iv��D)��B,��5���`�=��>Xk��en,�k��=a�]=�A>���e�U><����\�<��ͽ�ܰ<�
'�P�
��ۖ=�=�/�=�S�i�<>�i����g�m� �՝�җR���W<�$�R�f�r�Q<#�
?+��U=����:o#�_�D>�ݼ82�=X/[�~�=s��=B&���yK>�g�=�F&��fƼ)0g<��ʽ(ݩ��t�;���=���=�P�U�|>��n>YL<}E=�2=���<��_��u
���j<�ta�c����N�6��>�Cr� 2�<����h��� >IN��QE�0�=!(=����f��;���;Bq�=r0;=��v��w�;�㙽|����7#>%)�<㖽l&�=�v�~��:�%н�^=�d�=f������=�� ���b>���=o7��l��A�p�>�bR=+>d0��,��=� �<�=WS�=op� #��1ħ�2 �=�@;=v��� L�t4�<�a ;�9ݹ��!>� D>���=�w0>�~>}�`�Qd);��'<�n����;�ȇ��s�n-�=)�*�L�F��=��>ɞ"=���k��=p8ʻY[�=�U�� *m�*&���.��a=����(kb���>Y�3��!R>!�=��μ�OV��ђ=���=��'��D����1<n��=1g�<�� =��ͽsz����'��<�=���=l��=�^�L,�<�;�>�0�=���P��=@�=r�3=�0>c��=a��<3S-�D�����=�1�=X>��.=�˜<�*@���=>~�P��Q
��4z�QȎ����G�����"��=�w���y����=�P=�8�|�=�B�=��=MZ����=���=Ưk=�ٟ=y)�ǘ'��]=*��=��7=�*���\>+��=��%><f��b��=���=�U>Y���X�l��H%>� �,΢��<���$>���+��=h�'>��Խ�8->�a>���Bn���������=�O=�����=� ���D��-@���6���=��=;���1�9)�S<>PrX�5.>e_�=|$~����=+=�E>�A���dp< O&=��(��خ=HT<�����Պ��^�<F��=����j�k=�+�q�0�>)p=��.>���/l=C�jt>8w����d=�Qg�60!>!��J��؛�=[}�>����#��=̆=��X=���=��=��F>�ɹ=��<b�=[���U=d�:>TF��}����<>�m��5v=" E=�%d��ү=��8=�\�<�“��u?>躣��t�=:HP�Y��<f>�8<>&�B�0c��1�C�d��>3�p<���=�5���~=Y"� �->��ý�n>G�Ѽ8߻=���=1����=��=X۸;�R�=?��= �`h�J]��̆�s%��pF���m�=��߼yȽ��D� ���&=M�;$ָ=i=ш߼.Uv���������=>��=�G��!f<���A�*�%�>>�{J=�n�<}{��1�">�3�� �4Qj=��;� ҽTl>%���Dzu��e ���Һ-q�<IR�=�a��3,{k�*i��Ųb����=e'�<�.�NnF��9�=�WJ�+sϻ �=��Ǽ�Q�<J?%���;�w3��/�={��=v"W��=^!G=fs>C��<򛽱x���m�u��=��<SG�iӽ���=����">]�]=P��=���>�2x�.�X��=t�C�D£�b�潷n= �-��}���7�Kٽ��=�<���„�؇E�î ���ؽI���Žr�<i�@=�>�=(��<iT�=�B���c�<��';5Ȭ�tn��"�����=K��=0�˽9���ڠ=�3�=���$f>�\�v)>����[V<B���c]>_E== n-�3����۽C�|=r��;�-q�c�=WΥ=5��=��w<೰<����S<#>q)H�Gs���.�8Uj�u2A=UC��)Ap<} ���9۽��=��d�V�q���;�W���<���=�Z�; !��TK�����;�d=}@���[<A��=@ư��U6>�^=7ɽ/�<������m��~�=�솽��k���B��}�=0J=1����zn�<]�:g����%L��x����3�����d����V:�����@��j��]��=��<=�B=�o���/��@���-�@��=t\����=�k'=�RĽ���<%
#=��=(��3o߽��=�f�=��齷�<�2���;r>e�<b;=��4=�� >m�=�(��Q� >QT��O��=��}�M�h���=�FS��� ��g@<�Rj�����K|����ɽ����:�
>3����o��O{<��b=�y���q��?��M�����6=(E�=u]O=m��=�\���=>��<������= �n=�I�>en2�eL;-Zj=�!���I��;�<�[=��JQ>� �=�O��v����I=7>�9�����>)��=�S=�� ���=�����r�=���<2�;�Q�=6� >�e ���f��Q$=��>��>��ս�nO�)��>�a��� >R�z�$`[�ԩ= �">/�o<_��=Z>rit=�\>>�`:��H�=��X>i ��+G=��B�Ъn>p�W>� �=bd.�u5 �\�8��'����k�O>���Y ��+!<ؤ�>[%�= ڵ���㼻��=@�ἋXk��n�=6>��G=� �C���N =��j>�l�=J'K��ؑ<��4<'���l� ��Mn>v��<�����<Ѐ����@>�YɽV�P>��R>$>L�-=���=�˄=R۞��.�<����_�������W�=ҜM=� =Z�:�l�<����؈:> ����o�� T����̸ؼ)+�=��߽�B6��=���T`=b��=��V�o� ����=�$ �G�%=`N4���>%lM�S���H�E�z^ƽ��o����53>�Rl;`��,�C��!��<�<]q=y��=���2:U=8E�=������e=�1��U$�=��E=T��=�j�=�/ܽa�����>�)F�i����Ͷ;kF���;G�;�+�����;!l=ۻz��>���;�>3x�=�X!��z=��o<#U��C�������Ձ>��̽x�ؼW�M>1 Ƚ���=޿5>~J*��B�O>�
ּ�<ѽ��4���=�}b�ގ��R���6=��>�N=
*,��
你��л2>��½��-<�ө�"%�=��==�&=����$�J-$;?�=�̽=m���wU>�=�'��Ͱ����̽�_c�����^�;���+<�3�=n��=<h�=�~��"��s���|���aO�=���=���
/��y=03=t�����C�\���ؠ�>v�\���c�}�N��=�3>��T>�-Y���ͽLi
��>k^��� �=+B�<^T�����{�<�>̹W>cS>�|��J1>>ݬ�Ѱ7>���{�����=b>�^/��% <Q�����=|��;`��=��(=�Qk>p�E��.���>E�= �=��=�#��lq��.����<�[���!�<� �<��F��c�;��2��'ӽu��=�=D���">�<Y:]g7�R�=ԁ >nC��[�><����ܻo��9@��Qm>`� �{�k=e�>Mӯ<"%�)5��3.�ʸ4���՛�<A�/=(i����C��`���)��@��=�q�=d�1�I���S�~H%=��w>/�%��D��tN�=����t)>���;n���E���=��=��=|�� <�d|��E�>��r�3��:8V�=n:=�Z����=�߼ɢ�=�j�=��>�O=�mw��2ͽ`�b�#�>��@=� �<#���a�����=�Q0>L�%�af�lI�< ��=��I�h���"D�=`u>�̼U�����=,������=?E>�Y=
bǼp�i�=y �<��;=��j)F=��=��_$�=��a��=h�j�+׽C��>^��`�'��U��eE�� �=?\4����=���>��T=�*2<�}����>Z@�=�;=�w�<�S���B>rD��b8��w閼�i�==�&E�u�=I�&�^��=�X=��"=�_�=���=�F���1�=�ъ���m=��\>�{>=�d�=Z��=8 �S#<p�>���<��9=��>��۽׋3�ݪ��:��=���Nx�-�;�=1={���~��=+8�= ���B=�?����=h��=�����_������µ�&ҽ�s�>w���P���@A�L��e<��=��Y��=�vq��y��Q�[=(��"�s=��Ͼ�F�=��=�M\���>J ��y��t�>�C>��a=� ý��;�-�K�b�F>�s� =�=�1=�a#>ӗ�=����61=|~�=<�u�%��&p�����˒>���=�s�=X��xɼ;S���_�=�Z�=��>��=Ϯ=�Y*=�'�="h�=��#�KY>/A�=[�=\��6�~>,ͧ�U�����=���=X�>������=��&�+z��ˁ>B p��߽����� h���۽=��;>�諼� �=�U�=4j@=��>o��>���(�ͽ����c�)>�x�<X��C�+<E�3>�I���#ӼM���H�M�����ku��/�=�a��U ����ɼ(a�=�T�=lG>��R=�z��B̦�`w=K���ľ�� ���ն=� ���V�<l >��Ld�=�+;>�j�v��<.���`l����|=a$l=���<���{>42��հ������#<>?P��!��>��=��s>u*>Y���a<>�΅>~�k�δ �[:���Ǩ�~j��~ች^g���S��:B�=S�2��>�<������=��W>�V+�(��=^�=V[1���F=e*���ý��o==?���7=���������<\����]>~> >��R��h=�.�=�6e���W��-k=��=�c=���<�sQ>����@���=K�>iW<��k���y=�F>`a1=�1��(�};�����w>���r�=Ą~=Ŋ�<��'��� >E2�=*��=I]=��z>kR>�=����`=�����6��zR"��|3=��=���$�� � >7�=��ϼҸ���G>χ�D�>�kM��r�=~^��M�=�H=�Tڽ�cۼ^O$=� :��2>��U��Y�>�bY=��j��s��EH>�����;x_ >¢x���a�a�@�:L>&�<ŗ<a�=A7�= )=G��p&Ƚ*��<����']�=�I=������=�d+>��ں*ۮ=�I���.���������4d�����Ǩ�"��5���l��n�=Z#P=b'p=�6����"����;�4�:�F}������0�C�.�.ĸ�0����-�5�K=�N>ζ��JV�����<���=�WC��#=��ͧ� �B�WL�=LL�`�!���=���=�3�=~a+�]�=b�=i\����Q�C=LG> Q�=�T�=+s�=熽b�=��4�m�=����Y�>i����ku=W�J��8����T<���bT�=��=
��/�=���4ż��S=���=ՍD�D=���cY>0��}�ǽ:����:���꼲�3��܆���f=���;#��=��>I��<'�>DM����>ʅ=�?���1�&��հ��sO=���� ���p�<�r��} ��II >�Dj������vڽ�P�<��=�[P�����ǰ=�3l���F>ƀ~��� q8=�M���U��%>C��<�q=n&�=U�=�^�=�~�=CO�>$ ,���A=Ʃ����� $�� <<�Ʊ=VY��D���߽78�_7`��9~��=�7���C?j=`ۀ>�H�<�#=�+>��p<���"Kz=��3��=0>�8x�a֮=g���H�-��?�=I� �>�ȶ�r�&���E���p�;�\=���������>ɼ�=� I�mt��">꩒=�wV�KV�=�J�=#uC<&C =R�<'iY�'�8>bk�<�r>���:H���֫,=F� >� �o��P����Q�w�=]Q=��e=ࢩ�׋�:�L��h��=nv<����dƽ���+C �O%=-;_=0�=�hԽ�4W<{(��Jy�=����=%.=�
<���=�6 ��X�=�Tx=��>�n >*��v�������ra�;���=vT�<������=�Ð=���<N5=���;*�;>H(�N����=�c�=nd�=�'U�� ��ibѽ�f����=-�,���Z=Uǽ����]O=8*H�v8>(ڏ�a>�ף=F>Y��<$+L��\����;[
�<�I��:����7=ʘp�0�M���Y���.��K���vS������=��<��6=lʃ����<� =ѳ��oY,��4����ʽ���>+-1�W:��uL<��O�=<�={ /�*�<�Ѽ��U��z�<~���hK�=^
:��f>��ý[N��%��=���<\�=(1�=����ݺ�>)+>۽����N<~��f�Y������<:�R=c��;�!��Ug&�� >='=<�w:��S=�9>` ����7W<�+��c �Xg�<v����Q��O�=�$M���F��Q�=F�;���=�/>ji����������t�e��=5@ ��N2��O�<�z�<v�+���*���r��):��g���'9���Ĭ$;��>�� ��;��r= �n��
��׶��-��g*=��D���(=�9�� ν(������:�{C� ��=�V>�W>�=�����<K?>�@��$��=���<%?=s�J>�i�=�o����=��Ͻ h5=�[�=w,>H�>f�T����Y"c�:���P�Z> c7� -��6*�>��"����=�� ��u�'�>q�n���_��T��`��<��V=1�^=6�<�>���>r����H�A>���{E�����\�PL��EIǽ-����ׇ�t3���==i�%��+=w�N>���=�@�=|O�=.�⼿>T�3��� >C�A=&�۽v��=\2�=݅վ9�Q>Ξ=�yǻ�r��(=p���'6�>>���EЩ�$��= 2Y=�4#���>��Y�:�[�<:�;�;�=By�=z!��'XT��z��y�a;�ߐ�u�9�7�>��p������}\��h�="�N���=Д�S>U׮=�D=�'�yM�'�=akZ=��<�Q��wd>��p=
�>]C8��i4<���O=>�Y�<�� >�;V�\8��5�5=��O=k�>�&��$��P��=�F=eؚ=Gg4>C͌���Ͻ�rS���#��&:�o=��={%%�6���b��F��ߙ�=H�:>�Y�=f8�@�Kn���A<ܙ�;��!���=6��=M>����׋Ž�ƛ=���<3^"�n%ȼb��=G�e�B@>��>����߯>U�H�����~����J�x� >��b>i��>�Q���(>RJM�_K;�>Ԫ�=~��!==�gD>�F�=��=�`���g{=�e�>I ������f�'xW���=a�>��#=��=�|�<}=��/<#4Z�#�=11�=$p!��q-��)�:��J4>O�D=~��=y6��r�=��7=����2�=��<>���< o�=�/���;y�8=��%������M�;p2�=ϔ �ۘ�=Y)�p{V�ٍ���_!=� !=��=9^;�ƽ�(�<f= �=d5�<9�f>ޟ�<�5=2I�==_��<�6c��7�r�>�l����N|D��5�=�C�����<�dH>��=�P> k�=�H��i������NF>}����=xk@��c�=Y1��r!�=3Һ�T1Q���=��<�K�[�#��~��X���R����(� �(>�.<���Q@m���R>�Q�@�"�V�!����<�8v��"�;��=�"#������Ͻ0����+*�+V�<���ɽ��(� 氽�L�=��=Y�>�G��¼������5�(=ڽt�e=/�<����J#���>����<�����<��f8M^<���=qE�=*==�񗽅��;VK�-�+=e
_���M�8�s�mE�=&�"<��)�� ������[̼w��;Ѯ�=�}<�Ԟ�U =eɽ@k=>��� C���/�=Y�=�|��.���=4��ͽ�c�=��>n�+�dH�T�a=2�q�����"|޽�]��޻��X"=C=X����2��w[=7�ݽ�v��*�U=z�Y�rs⼑h)���F=]��=�q�Bn���h������€=\��=��y;� e�nF>0�˽�\��q0==�ꏽ�'_���r��y@���<.� >���m�=չi�9��<7A>~�0����d����v>n�нݧB>k����;��O���켛�S��O\=�u�=C�.=ť�<Y�m�I��=���;=���T�ļ���=����w@>D�.��:<��'�NQ<Xq)>F�ڼ�v����=��=���=<R���I�=Pe]�� ڽu)�=��"��T_�ձ8�el1>�#��b�=���������3#>��U=z������{���<���=��<l{�=DS=,ʌ�Q�`�B=�:����=�V�H��=;>�y>�b>��c>U�>��T�=�J>�)w��t>a��9�^��N�=rx��C�Y>Vt���!=7��뫒�dΦ����=` �=��h<Ť5>�)�dF�;qK��^Ə=Ku*>M���/�z>���TH>p >Y��=��_��)>~�S��-6>�p>mb��o�j>iVg>��%��r�<�nw=�<��
̽/�=�&�>���m7ڽ���=?Z��3{=��t>��[=j� �����y�pg�;
��H��=��>]�>�S�a̐�9~�;��=~�!>�N��^>B %>�f>�N�=j|=��]�V=� ܽ;��=Js =4��=���=��=�O��;߅#�-�U)�<,S���ɬ�-Lнͫ���=�p=�=�<x�����>��j=�<�V;���>:%��!�ƽ,9>���=��Ȼ�x���@�=�>�Q������5���:2�$��=Lcr=�彡��=��^�Vq���ف���=FI>���>�<���+���4Y�Y;����(>�>���eȽHV�x�\�há����=0��;���<�=;��ȳ=�`����={�j��E����[� ˆ=�g̻R�(>$�Ž\Ң>�����ѼL-�=�<�P<��&X���J<��q��~��F�/>�,�<��+>�Dٽc��$��=wq��{?�=�N�<�k=PY(>,h�#��=v˕���=���=s���?6�:�|�=u'W���(��1��s�<+��������=�,K�a+g�{�<�>��cӹ:��\���e���=#�y=���L|/���t��鸼 �z�<U�=LuO=Ι`��ԼA�)���л��=>qυ��ۺ-Sn=1����ͽ�!�=u�9�� )>�&@>��\��<�@=��.>8u~�$��=�P�=@=��1�Rܽ�Q ��X<��彪�!=�-�=Sp >Mv���)8>0�;^��<^!;��N�K+��f�3�B��<gx�<8`��p�=?�X���r�>={ ���;������ =-�Y�P�=�O�=�u��؏=� �=9]�q�5<7Z�<�pJ�g%�eN�=>c���>0�����\��Qs��i=�=>̍W>V����v�t���(�0>]�>����Q ��=�3=Vb����ӽ�S6>�C>O���C�[����;��/<��'>�%����=�K �)<�=�� �b�@>4Ŷ=��3�W�F�ۈ���?��սׁ=|�>�"�2=D�F��n}�k��ݱ���0>�S�=��>.�=��=���=�է�n� :w@<֮=�λMh�=�춼1%=��=i���g��=���=-�<�W��<CF=i"�<��@&\=Z��: NR�������=_7�L��=��=��;����D�<V�&��� =?S��7>�uX>Q�Խbs.�1'� ��>���軻��<
z'�Ue@>��T=� ��Xm=��>8���@C�=�g�=W��=���=nn>�B�<¬�=���I�<��;Vdѽ�>���=4vz�kID=���=TY��Xv=�8=e"k<cO����g�kh�=Jf> �>u�}�6����ƽv�7=�=L��<i=^�l�n��=�=V݇<�~ս��=��\>x?��ɘ��.�>��ҽd,*=m0�=����f��<�G�j��3��=?d��$`�<�>9w�=Jj��f�<� ��4Q|=���=��� �=�����OD;j�R�Oٗ=����3_��=h�!����<,���M�<Qֽg�d��<�����=L�m=Hw����L>�0>��+���<F.�<��U'<=��'���>��<�"&= �A>^h>G&���c�>M�<Nh�=�$�<��<�xC>��\>���=ce�����=|�*=��={A��k�>&&I��=5:�22=t�O�E��=`��Y��;�aV>Q���i�z~����=���=��n>�IT�,tf�e�;;T��;�}ͼ
��=��P>>�k�q�ӽ��R���=h��4� � /1>sjz�åx��'��-S_�1PȽ{#���3�V��y=�C=���#�F>�B@��P'���w=����4ŽW���q%
=����>� 9�{�,=N셽 ���ʺ`^;=q��=c5�<��=h =���<��>��ؽ���;�כ=[��=���=�顼�B��g��=�Ix=(��;t);��[�^B�=��r���Y����;�(;�s����=����Ǽ/> ��;�<r=� �;���=uI>)ED=����#�p�=<�>�2��]��=�O���>�(Q����=^��*��<�D���X����ѽ�=s��O�=�6��huX�u
<Ƚc>L�;>�c�<��N=��k����=BŽMw<�v��Bsu�%ټ���=9*0���Ͻ^��=�8>,��=�6�=�od<u�弽�<֍���S=m��>�����z$���3ս��=��;��t�l\>��<�P=<�9�c}���
�<Y���)�d��N�{餽ʏ_�"��㙽K�ʽA�>¶ռl��;y�= 5�=��N��C��a>��V>d�>��ǽ�˃�m����<3 >�lR��]F>Ҽ�A�������<�У�׊�=���=�=�޼=4��>
5Y;�-^>����
�<r��fW<�<p�3=�<)�����a>k���A�V�z����Y'�H]C��t��C��xjk�cH�<�8�=j�<�����I��
�.>j�6�о/<�������5g�=h�->�����ɽ�r���X��_G��e�=�� ����v>Iƽ=�ƽ��۽`�=Ӌ���L��+�>Ri����^�^| ���
��T<�:w�>�<��I�����7'�< Jf=����(=�����<�:��틖��=�Gd�.�����<�B��au����=9����<(у=�g=��[>��8<E��<��:���������0ʼ#7/��4�>7�>/���@K=T�X�|�����Z��\{��l�=�>=͎�����=0��<{�޽с>60O>�������>9��N*����=���#��|�>I���2�=��"�p�=/A�A~<�0=��<�AG��O����
� V�;�=o�#>� �={'�=�{Q>��"���#=��@��������
�<gU��T>��Al�Dݗ�"�E=�s�<�s>����$^1>���=i�i;��=Kz�<�3���>A7M���s����=�o�����<�������Y">!��;#>PZ>�9i=�$$=^�=Q���4ϕ=?�=�VV���_�=���4^<����n���:>��Ž�ݙ�/�i��0�=�3= *޽�(#>V�To�=� a>w��]���l�ո�������;=ZKu��N<B<;`�h��2 =(<(<-��r�V>�l���?@����=������=RI�=�6%�(|>5�V�٣�<�z>�EL�/3ڼ�Uo������4�=��};��~�c�D>��d>��T>�����ֽb��� � ��Pt>��7>�{s=�#:t�X=�G�z=|U�<�SO>��½/_R=�{�<��>����y,��|���Ր=6��pM6�Uw��q��=��]>���=�9�<'�=�;%=�<q�hV^���">����Y8�`'"����iA��Ƌ�<�w>&�:���y�ʼ<߼>�k=� =��<��[�vS����<ܗ-<vB$=-���4�=�;����}o� X�����[2=������\>������=o>��)=1݁>w�>M�1=(��<C�/=o�=s��=xR@���/>��<PRƽ~��=�b��Ђ�FB6>D��銈��N\<I]�=@Jb=S��<X7��cQ >F:�=��"� ק��|��a,>�d̻n��$>y���8��>�=�g&��@>��>�-TD�!���ޜ��C=���8�O�=(��<�F�_Df��Z >-�;��M=CY��CY�>���;���B�=3񶼶#�=���=1�Q;o!=IJo=�>>�������=���ĝ>�Ƚ1�A>�����2Q=7t���3���@F���=~@c�u.>�T4��-�>�x�=f��=��%>�%�=��`=��ֽ8w7�G��o�>*#�,<L>>�1>�I7=C��aR>�$Ƚ�Y<�����x��<75U=���=w�����_>U����I�n���u#���=���<[�=.W=2<ȽҝS=θ����=�<�;�ձ=9��׶M�k2L>q�>�T�=���y!�>]4�Nn���2E=B\�<��1�YX'>'����/>P�,�ȽռT�=Yv5=yμ =�=~ `� Ѽ=�9>}�>Uc����!>Gɽ�p�=9���$$>�l��Ua�=ȟ=�:�=���N�R��=��{=��蚻�4<=�x�;<��}��<�d]>b�m�����w��=��������6�d=����x�����=�����H>qz<���=B�[>/���</ �ð)��/B��k4���c=T���*��sU=j���,��]�M�t4E=p�T��'$����ui�=f� >gG�=��㼈V�=CM�b�a��n&>�h:,zS>śS=����b��SJ>��>=L�K%�P����G�=_/S;�Y�ZD��Jý�<>�;�>1@����U`U�L�+=-��=��>�����+X�1��o!�a�P��!+>��<�ȳ<Ԟ�>�T�VF{=@m]���:ƾ.>��:=K�Z�a�=#�>� ����e�?Ю=\. =<+I=H���۽潁ظ0ě;ډ=���=��=�|�;�&��9�Y=%�C�4>y ����l�l">ș��f�=!���-۬<��^��
> �o�$<\/�����=)�\=�Z��"�]��=G��<V�G�sj7=��x��|D��ԍ�>�?�_�M>B蘽�#���\�<n4��-�=v��ʇ��䑽ŭ��E;8>s�)��D�=.��X� �z|�'��=��>@μS�¼�~�>�v#>R���m��<lW���d9���,h�=�K">1b>�V��*�]��U �m�$>qN�=�8>�k� lǼa�<ɰսq9h�K_���8k={OǼ��%�� =�k���ey;���/���K��>����8𼇿���ü���ǰ�& �=�OͽM$�<kN�<��5=z|��
�����h��=̍�e*=�fk=m�>����=B >�-�Hc}�w�v�zA�l�꽖v��x��= i���θ�9սZ�!�Xk=Ѡ������ýj3=[� �A�>+����= �=#�]=�+�=<咽z��<�� ��J����>����l��=m�D=�O&��Vѽ��X=��ֽ�>��t<���3>�@=���<��T�qb>>k��}�_]�=��B<��(�1�u=��F�0�=x�=�u >����j�7=,��=�g�<�U>9ν��{�]�2<$�,>�v�=�I��7��=�5����z���:�����=q�v>fJ<B�g=I9;=M�Լ���<��+<�q%=�y�=���=��=O�$=�3��lp:>�ؼ<�W��Bn�>m���n5>�9���OV<Ht,>F�=�����=�@�< ^>��� ���O=���=��:���H�Z�Z��S�����=�Q<"��jݏ�$��;{a��[Ђ=�n=�:�=�C3>�= 7=�n�=jTU���>�Ͼ��{P=�^�<G�;XG>���<;�F>U/��/ޟ<W�1=���=��t>�
-�X��=UY��<��7p����C����=<$�B�0��=���<}�'�pĞ� �:���=��^�V�T>K�=��&>���<[��:E7�=޲9>2���o->!��v�O>��=��#<o$>pد=إ�<>�=8�������(>��b<��{=�f�=�"~��F�T�E�q��;�.F��K=�[��=<� �[Z뽹�>t�A=���=���=�-�=�C۽���� }>�!k=���(����=s%+>p�[������=���=�{�>>P�<� p<��f=2�=M�㽢_W<�~�=0�P=�0Ƚ���ɨ<Z�>��C�aR6���x>�6�j0��i7`�US����<�ؑ>g6��ky=�'�=P�Y>T3>%�¼�]�sM0=K�ֻ#�����a>H�}����k0>�T4��b ��2��;> <��S���{�Klv�6 9����:�†=�{7>8'>S���k�=�-�;u�E[n<��.�d�&=>�>�{�<���=�����=���=yG<��(�~�3<?����P�<�/�<8ӿ�Xߡ��כ=�@<���U>~�.=��1=p ����W=^eb�q�@��+�G��=��ܱe<��C>���=������cV<��]�U��=2�Q�1��=�y��ݙ�� 0=\��y���m����;=�HD�Y��=h��/t��˽�<�����N>P� �M����<V���H�<U �<aJ���p= �<�>|��<XI�=Z�>qN>�6*=1�><�;N��{�=n=�Ժ��8�=e���[=��4>�-f�F��=�'i>ו���K����c�=u�>,V~�O���އ
>8� �Lg7=P9S=��l�X��y*>�|= K>���=ۖ��I�'>˨=;�#=Rk
���>E��<��b=�u:=ts>��->v˳�Oe�b� <�F�=&�<.�K>.����H��i�=(\ ����=��*>�Ӟ>����>����i��=:1�<���j�=����>�=騍=cm ������>\?����=���ה�=7��=�:��.�=�VF>M��=��>k"6�� 7=)�-њ<jQ=��>e/ >����o��<��k=x5>\ڻN��\0>�OH=:�F��=�=�_��� <���<=�p���9����ì�=�[���Z�J����=O$>=�b=��:�� /��X>�&_<��@�=E�>@���DWý�l4�?G2>��=�C�>\H�������r����;��Ͻ+x}��f�Y_8�� �����;�6��?0
>ſ�=NQ�C��;�z�=j=-�Q<d�=�=H>@z��AM�=�근�u;���=�G��<�r�=�>�=��<���=p0R<7�������
�u^
=b=�nM��lL>pe=�6� �>� C�{�������Iv<�o�=����aY4;5Z�= v=��>�d=
n?��6.> 7�0��=���<fKp;QT&>�|>#LD=�d>y��=�J���-����=L��=��I�|���G=/�=V��<��=" >�)ν��y�‘#>���X}}=��>��='a =��7=V1>.=��=��Y�i�z��{�=c≯>2*ὼ���~5<B�ʼ���:�=���<!�D<��t>�b>ȡ>(&�=]���[��&7�`��<��4���F<0�-=�R�=�M =v���%���B>�� ��p�������>_�>4��=�D���=`0=GN:����<�:����b�ZB=�ͭ���*���@>S�= ����x�=�����7����M>䁊�ɾ��t��=z#�>Y
�=�-��Q4�*=9`��7��(o>Y۾<�\ѻ�ٽ<��=K۽[�.�!����T=>�=�N=<�|�j=���M�f�-��1�;}�=�)��HN��a1<�G-Z�b0���G�8�F�O�=>ʍY>��p>���=���=L��>�=�Sl�#ڔ=�����[=ﮏ�>��=�u㽐�O<�����>��* >�!��N�*=N��3�����;@:�=l����n�<��B���9<!2>�O���)��Խ >�i>0�������ׄ=7��<Rj��%2:>�M��)=�н �<�g���� ����<gς>���=K?�=�ޔ=�C$���z�n=#=,?S�=����������=G2���1<�WP>��=�>��༃:��)*z= h�=0\�����I|
>��<� �;��=�V�=F3�<���=�7޻�u�=it�=F���+���()�H�<f�-�/.�<���N|_=}�>�I�K��=c�ڽ�$�� %�<���> P�<����2�Kk��U9��ҡ��{�q�>�������=�L�=�0>>P+����9>��=�|�=�� �©�=8ֽ����0�>�/��S���F=K� ���T�鯾<U��|m�=ګ�&����5#> m$>�h-=� I=�{������=<N�={�.�g՗=Z�W���=���=;�;�~8=$�5=#X�?a:�#4>~�Ѽ��R>���=��[���<镧>3
��E�ܔ���a@=�7�=�A>��>8�>��^&=n�=>b�=��u=�[D>�*s��^+����=��[���û���>�{��GY>��sU޽�H:��WX�wn?�du<�{>!�<���=�����~���=i��=����[;}p���[d��_@�u����<P�m�Q��<VU>=�G=�'=����e'��T
=C����V>^�;��n<ӊ>%���J�9�;A��=?ˣ���`��8]�]�4<���<gւ<��-��G�= �>�*�����6����<<�A���_~=�x�滄=�_������<�V>�̽�M�㲏����>�㩽���=_�$>�$�< S�J>0*�=�܀�{L��1w���"B��g�==�r�Z>��< ]w���>$ ���>��s>���<�6�=���=w_�X蝽�tS�,$�� >��v���g��)���>86<9� ��<a>"�[��Ed>�
�<�H��i�=[�=�}��M�j=�Z7��ߩ=ÿa�Rn���⑾�
Խ�->���<�N�;n���3��<h9|>������=GQƽe��<��V;{��=&��=ȉ>6��e��-P��vc���K��9��<��>n,=���a�=�IM���-��̼+欼QM��� x;�f���f�=K�ռ��3�|���b���<?����<Y�>g�:>5�=� �������T<d���E_G�Y��=_��={�ؽꚁ=�>:$>t+㽛�>�"���>�j�;<�q-<I���ρ=80�=�=9��<����ֻ� ��h�=p襽FL�=�O>��Lt�B��=�8�=���=d�;)`n=���l�$��&�=����ޭ�=b�=��ٸJ���>� 㽼����(>�Q�>�Na�* `��r˽C���������l�'�#��^^���{��1��=��l��->p��(I��� �c?�_�%>e��=� ��s7�=ؠ�=�` :�d�=�o=A� �M��;�-�=e5�=�8��]��=�\J����=�>Y=�=��(�g���i�=%�;>��=��F=�:����^��=>��YS���=�(�;A����8 ���-<�=d<z��<)��>JC�A<�;�����=��"=�J>q�!��@>�����?�v��=��E>�ꁻ?#0����=3M"���c�������n��9���!=[>,���c>��w={������;� >t >��=�5;={߆��Zڽ�d�=P�=��;��<N�=������+��=�g�=��>�X��ۺ=�n��٭�����=��?>ei��(�x>+�d��,R�֩���)˽�F����>^�8>�Č��%�=�,���.��8�=�AI>�+H�p�����=Ma1<���=�M�=���WN�= � �Rm�<
�^=���=B�`��Q�>�+�=o�C�fa�=IkԻs�=�ݪ=\�O�Ճ >%��=M�x>L�3=��<*��=`rK>}��>ҭ;n�߽���=�������ncU��p����=��}�&�%����M=���=���%m�<�%P=�hx=î5�:�6�ޢ�=
�O��<p=�� ��$��4�=�y���eg=2�K�=l���V�=k�⽛na�C��=���;-C��䠽{;�C�=�s6�=��������0C=+����V���iA�ѻ���U�=y&�%d�<2������1�4��=>��<�?�� ٽ+�H��1����ҽ;�V#�<��ý�%�<�����J<�<��}�=_*�=%~�=B1^=��A��==#���=�.9�>D�>a�H=�K�����Ӕ��u����=<!�D����)�ԙ��퇽���=��B< �@��}<jR{;�1;=��>�=p?���l������,���սZР�u��~��=<n=�5�=_���+
�<�*��NB&>������=����^�8=�����X�=��9=�h���q��{���\"��a>�=d� >im����.�2��=F���^)���1b>5���� ���=�Ǽ�e���ׄ�"R>2ɼ=8�{�[��<.͒���1<�h�����ἵvr=X��<oS�����=���;\+;��T>=.� ��5�=���<���=&�:׽ݽ�Ů=����=��>�ɕ)�rUr=-[="N���酽�7=����x�<�,�=gkK>�q�=�+����t���U� -����p>`�=��νV��>�B=�w#����=��=Ia��a�)=���;��E�X�Q�]�:�K;��LC���l>�^�x >�ϝ=
�TYG>���<b$��E�A�;j?>�z���׉<u*�� �>�y>R">������=�v�<Y����U�^=�Z*>��$��Nk=R�;� ��|�'�J,�=x ;{�=ذt����<!����'0�E>���=�pQ����������=���ҡ�=�]��>�%'=��8>`�>+����G��=uV>�����d��p��.5>+}8��N���j�<wV ��n>��
<D�M>orػ�ft���>.5>& ��t�=�g�u�̽���= �,=K�Ἥ����Ƚ��;i���8"c���=?)o=�r���]������͓�f �=�P�YP��V�W��)2��| >�J��<��`=_y>�Y�=���=ퟚ<G�,�ɔ<�&�����=o�K>��彌{��$���!e�=�m�=� \=v?����<� >��d=u1�<�ܰ=re��4�R<�ZJ��)�a$=&�U�n{�=L�r> \�8�4=W�M>3/����=񑏽i Խ�'�=Rr��E8�6=K=�=�Q��G�<��><+p��uμ��ٽ;�?>��{������?���y�1 2��ˌ=4��=��g=��<��� =w�6��<7!3=�&��>T[�<���;��5��;���=���8��� �<�&>�:K�L�=g���1A�ҫ�8�q>N�����d;y��= #=�
�=��N�Z�ؼ�K0��><�߄>[�,=�[B�2a:>�y���C�=oaF�����Z���C�=�H��:>������ �]= ^>� ҽ��ý��>pH�=�ؕ����= �=M�N=�2p��{>�D �S =��(�i�$=���=�܆=i
s<x��Z# =R�=�(=�r`=r#)��=$e>��]�?s=LИ=�����)>8ʽ-Y���~�=�H>\J>���;����Q�A=�S�=�^�C΂�j��v����y�M�`=W�S�Ru�=b�a����=y>��ȶ�>���=ٙ><2J=���=)����!=���<$�Q�6��=ǟͽ�@����=��ޢ=4��n�����>>�/>���=p��=��l=�ܽ�%�=�z�4��<���!Ac=�n��
�=���\�=E[���KT�2:P>bt��_��=�l���L��[˺�t�o�D��<Y�>����� >1��
�ؽ�����m>|�ͽU�=Hqg�ٍ=�<�M>���Ѐ8>����~%>t�{��Yx=�e�����=��=Sƭ=P�,���"�^�:'��=j�Y�j;�'}���߽u�B>|���crʽ@��=�fh��殽���;�=m�9T�d���ڳ����=����6���Y>@p��@<WL˽�k���w5��mR��.>Cdн�~�=Np����ɪ��Bښ�9R��B<�~�Y�X\��2����W�=�ug��+,>��������2�d<dk=l�5�R��=cj��K� �0��g��gW��Z�;���=jB��Ħ�/����?�}2[=�ڥ;�E�<60�=�p��r��=|�>��><�=Z5�)�C>n+��́=��'�=u�>4��̍=z�����s=ŧ�Us�k���)<:��=���Q7;Pp �����R��7�*>�5V��6�>q'�=n�><�8�[J*�ߌ����=�\>���|�����=��,=��6��c>��=���;�c>�����Q�j>ɘ!>�T��e�ǽ �>"�r=�������=�C½�y��8(=C��;�@��������<��q��ͽ�j�����=9�v=���xQ�<�Z����<f���-��F=��=]��=�Aw�b���̼a�Խ1� ;�����G=1b����AH{�ƍ�=�>R��0�8����
>�0�<�{>?��=�E\<� Ỿ��< <~���߽���F8=�y����=�e�fo^<��4>��Ӽ�f1>'+�<K��8�=:���\�I���>�
X>Z�C>r�>xJ'=�f>���;4e�<߳$=��e�[Y��n�=QgؽG~'��1!��A��Q�<�e�=��C>����-�rcs;��4=zb��;S½�
ӽ�=�;>pU���!>��ýR�= �
=N��< �.��*��k>��>�T�=e�(��C�]���=���P��b'<T���3t���=���=KR=��&>�ZC=�����=�9���|�=���<���>�1����<�Q>�M=����\g>CL=> \>��>��'=�n��Z�c>���<����x�~R��5�ݼ��\�&�F��>?��=ڢ�=4Y>+ȼ���w}}=ȡ��Ύ��^ >�ߤ<��=���<�0�=d>�����U;=�]��NƇ>��;}=4����^=/[���>G��p;<��.=ed�;��罉H������l�=e����@#>���;}_4�1��=���=�ݼ<��=(� �۠�=���1=�i[�M�G��#5������Q1���!�D0��Tϻ��� w�=��F<'R���1q�F�=H_��_�������f߽��=����c,~=8�����L���ļa�o��ı��� �\�=�U�<Z"�s�A=�s�($��w��r��`z��(u���`(�pKC����= �4<��=6u�=����i��T�=�<(_(>�"�2 x=�����=
�����<�<��,�-׽
�<�c��Z�<x
.>u��<�=�?=�A�<E5�=Xu�=-��=�� >|�=̶��� >7���n�н:��>!A�qZ9<��=�̙=^��<+�v<�[3=zIG�s�<��������>kȲ� S
=|��=����_=�M"�\�=P�{��
���Ԁ��Y�ov�=h�o�� >A�9�y����
=bh#> ��=�֢� �t=�Pv�#n> ���p�����q��ҼtG����>�~��3�=�V(=�ޯ�k���E�\>��J�y�<�i`�<�~��I�=yFѾ�*>��'��X�=�s�U�滊H=�և�z�=A�׽r�<W~����V=�#G=��V�l��=긽�/S� �p=Hْ�����ÏH>�@>���=P�`��F����Խ���=�d��KW@>7��=Pkʽ��=ˀ*9���=`1��$�=>���=q�E=�Cc>SR���:u<,��<�\>�t��Ƚ�z���k�g� <^���`�>�5���4��N�=e�
=��'�ȴ�<�U������¦��P>� K�N����d��މ�<)�U�h�_>BI�=N�L���;ޖ=�z���~���o����Ow�=�"[=�_X�gC/�\
����=?�=b���C!=8��<5-����*�����,��H˽:A�0s���&���9=�v�=��+=tŽ E>�o�=]%�� 1����� !��u��|���}�>�$���a=�!�=b`P>�w:=��U��<t�J>8=��&=`����W�<;��=�ow��@�}���8= 鲼�0$�N���²<9>|X9�rws=�5��Y��0>?�I>�+�����;{�<^�X����
*����_��ѽ�_�����=|��=mq��C�����&>��K�+w ����>R0���{�[��=�l�=�-!>�!�� �߼�m�=HH>�G"���>>�f>�½�w#>��J=;O�<���==��<P W��7�� j����<��Ľ���=l�<�ӣ��'0>�>uO�<�D�<{�\=�39����1>.AS=�R�y =�5G=�uu��������=ˠ��t�=�D�=�����& =u�t<1���,������>T�ۿW=t~޽ǭ��6#q=�q�=�]�=�"O>�?�=��&�� >�o,�����F q�6= ��<Mҙ���Ľ�9> z��eUD<gW�=~r=<r�S��� Ҽ�����T��/�=ֱ=�jj<.��=��=��y�*�/>m R=A��<yۼ��”:v��|�T�٩>>�3>��*=m P��_ܽ��E>�Bļ�[F>���>�+���E�\`�s�|=�ȷ�d�Լ��.=���;NS=Q��׆=
*� ��={�=��=��7=���<M�}=ȬT=���?�<�6k=��<Ż=��<�zy߼����j#=�Ҍ;��J=�Q&=��;>���=�=�S�;έ=괱<��b�;�x��v�<4!|<�pJ����{lY=�>���0>=g�k�ĩ=�^<>�&�<W���,:;���=\� ���=��ut�� ���t>���=�+&>�s.�Ԩ=���<'=Z �<W�>ҹ���[6>���}�O<�I!=�ꎽ֢��cֽ��<���={u=�uǽ�gn�� !=��>���4��=j~���@�=ڠ�=gŽ���H���< �W=���=T�Hp�=ƒ:�Hdž>���=�m1��_ռd��Ӽ�=^�)>|��;WKh�2�'>V� ��5�=��W���=;L�^Q>�0>�b�=j��=�Sd�ڌ�<8N�=/d!=6m=��:q}v�R�3���=:���s�<,�m= >u-=�e�=F�=gb}>��������û�4�<h��<�x�l�������(=�W�f㶽� �=WP_=m��,���t��=<Y����J�ս�-(�e�(>����"�-��ir>^yD�H7�=,[���m� �v��� <�%=U�=c)>pk��)^�=����<*"0��_��oL���/�;�%���ʵ=W/��@D\<��J���ٻnۡ��m�;䓒�H��� ��D*=m(S���]�.A�<��޽yt�@Q����>�,��&�%�B�;�A�=�V�=,��f�+=\v<��*�Z,=7��=$�\=^ZE��KD�������=����gD�#�l=�'��( ��wE�mؽ��I.����Ҽ*:½��=L�9��Ծa�)>f�<�A2=򳕻�u|<G)�<��0>��><�>�WS)���ν\�>ӯ3=�� �Q�Q>��=DN!>䝱�����@�=�|>6���v�"꽇��8P7�<���=������f5�iȽ�}#>*�>f�S�V�G=��<� \�O^�����=[Q�=�[���ܽ����)�7Y>����CQh=],)>�Ps=��нq����Z��HlM��<�;�d�>��ռ�<�;b�6������?��F��++}���">5�'>�5g���y=�u��(����>siB>��;�T>>)���٬ܽ-�B>xS1>C�\�BCA�A��=�T��=1"��t����}�~Ҷ������m=�֐�>臼Q�L>E�˽�=^�&�ӹ%}����='�8>5� �5>6>��>�jO�*(9>�o=�/�;��U�9-�=���;jyH>"��<�g>y��=��{>u+ļ�!4=��Y�=~�q=>���K<�}��{�;�%��M=u����<��/:�=񊆾l��-d�>x�=���=r��=}E�=��>z�=�ʻ=�T=�!����}�et����J��.��[��$
��{���V�'�u�= }��̌>����l��=*͝�&B>��#�O-�=E�<�q�����"-�
O.>�W�<V��<~���!>Zf�=��}��Τ>�"���0>VJ�;��=x%�<^��=�=>|]>hh)�\�>������A<��Q<_1ս��T=SS��[X�>p��=�c���H<o�7>%Y>��>=�R;ˈ�=�N�=�%���;��DJ>`�Q=Z�ؼ��.;�R|� J"�e�>>s�;U���ۼ�<��Ž֌>�
>6[ֽj�m=�;�=���=ڰ�={��cý����֓�=����
>��>ߣF=� =�P�>͛���=�y��>�2������ =�)��Y=f>��ѽ��E=6>�o>)I<ogT>�c���1����=8�X=T�.>�E �92��e>���=>o��ŏ��W�=.�����=>n��>\�ý ��<� W>�҈=K�Ȼo�G>%��=[�>�� =���=2w>=7Yҽx�D>6<�^&>���= ���0 >m�:�k��[%;>Z��;8nн�L��3<�<Ҧ'�VFd=Y�s��_L>} ���s���}>�Q�����=Z��f=ڊ�=Dz��w��=4aU>�
;.��P6�=OYk��Q�=�� �%˃=��=RO�<n�k=ٻ/�� �=69�:�C�=eFX��p>(���r���
�2�':B�WӍ<m*>3�=Ш=꽵�$>y��>7=~����. �� ;G�˼���=����SMh�
����<u�<��(=��;�–Y��-�]m�=��v>E >o���u�<�I�=�y�= (�=ݲw=@=x���&>�؋�i >h�g�~�3�=]5ァj"=��>HX8��d>�}�<�轒s�g8���E���9��B��I�3�m=�tn�|ؽx�K�E!W<���=M-��d+;������=,�������&<;,Ƚ��=�ɖ=6S�>��Ž2�a=K���h�S=���� �>����m��ܼ��N���B=��6��7�=���=ת�=d��=mf�=X��=e&�<�:�����=�7l��Ae=�Y�=}]�=���= 1>��N�?�U=��9�4�6�%���<">�>=�=��=�:-�������<$��<�cǽ@�<1��=,�F���<��f>~W�='2=.�w���$<��� i��g(<� >�<ν�U�=��s�|U���7�=��p=����Ж>sz���A=F��=�k��Γ��ǻ����<!��;wj==1j�����|��>�����\q�L�=���=���=��>���=UoG=Օ>��>�l �Ž8>��=*|�=�*�=p������=5UٽBڸ����ZD�=0�>�=�vR><߭6>fDZ<�k�hc��C6�N۟���K��=�]���#>�h�= x޽@�(>.(�;���<Ljk�t)ӽXc<���D♼ ý-�e��d=�*g�i �rUx�3��p�cn>��;��=Q���=!q�=�61>dƍ�}���{�$�KS�=����Y'V>ܺн�1ƽ���>?�4�c*������t>��4<�о��<wŽ=��=��> =>�͂�U��=AP���>�=�K�%�ߊ���fI=q��=� �=�0����3�-��=�� �&�&>�}���=�荽�m����TB>&�6����<V�[=��@>/F-<X� ��i�=���= 2�=3� �]�=XԽ`X�=`_���>��=#X���VS�� @�Ҧ��n�5>Ş)��غ��G�=y0�=���=�L>�D�f�=�g)�C���f=]��=��>��9=�oڼ8U>�/ļ��#=|a>�d�=��t��=)=ҼE=6y!>IȀ=��2�Z<1)=4�W=5>��x���h����=�p��sн��������d�la�;�ν��g=��>}��=��L>gc�����ˬ>�0>�ч<�ך<�!��j<���=�W�=�R
=��AP�<���={$ҹ��:��9�*>��D��a=���<84��h����=�@>��'��v����K=�Y۽��Z�q2b�/>i<��#=�E�<$&<�ҷ��J ��q�=aB>İ�����=^���o�fA�=������'��ȟ�8��=�3�:�#<����uJ>#8�;�D˽/�<L�T=]WH=e88>������/���pѽSy`�,�u=����b�>1Ex>��i��w>?��=������8=|T��.��
K>^.�=�3= ʦ<���������=���=�v<�Թ��E�=H;�����=hv����n���#U���h>>4���\2>N��<��=/ͼ5]m=��>Oj^;ax>e�"=��������=>��1=���;j�*���<O�C<��=��<&h�=�(?�+��A>��r=�8 >d~���\�>Xi�;��*=3�u��jԽ����(m+���>ԑ��p'Y>�dܽ���=�����Ol=|�v<�� ��૽�V�=�M���֘�ˮ[�'&9=�h�� �c� ���n��]%=Ƌ�='�f���=>�w��s�Z>��A�]��<���5�>>ɀ�[������(�����Լ;佽�[<)����H�2a��lR���u�6b4>یg�\�D<Gl��÷�= Ym=�SP�x=]�MH>Ϻ�= �Q<�YB�VX >N���Ȯw=N@����#>�nL>�">/d¼�1��PL�2-��� >��#�)��=Z������d����=C��=��=�'>*�ؼ5 �=��8��/�=T|;�Ҡ��Ђ=��J�\�6�?D�={J>2U���׵�_�2>���;JE<<A�g��<wt��ͫ>���=�z =�!�<�\(>�K�<��{����.�P�=L����[b���E>m�q�].>�Gҽм�=�BE�)9����8>NX�=z���F��D���Z�=��(>��<=ܓ�=v���%��;��^=a ����0����=�� >tR$<:�+=�t=��<1'E>R�j���=�1:��Ǽ}z����=Ъ�����>�gb�9��{Q%>�x�=�0�=�T������t ���7>��=�3�=T�d>+�=9�=�-9������됽�����>�ս�>�k)<�%��tY^=e��<+絽o��=f��<�G��#,=�н<�z#���=� �=� +���=��>����%����Э�IaV=,�ν�_�=`�%=���g(<u�t<|>>�v��t���WA>���=�<�=8�z���=J]�]����>:j>4��<����+>��Ͻ��>��>���=\�=J4�=��=�����ad�=���}��|�+�P�x9#>l�3>{���'���䵠���=Ks���w6��%���M/��s|������V%���v>�p&>��2����
���l7���_��V����9>����/>��KE�=}�9dY=)�a>6�ý7S`=S7h�u�A��,�=h�;,����ڻI�����C<JH0>�[Ƹ��[�01�Q>z n�p��_%�=��=�a�=�w���d>��:�^����P�<�(��T��=������=��<��:�;�<�������=���=}�f�1�����>���=�ۀ�Bk�tSF�Z��l��=�v<�m�=?I�=o'D����r~�=.t=��=IF<��7����;��5�O��?���۽��=�����W=_�2�`ˢ��+\�J�"�l<7�K��HK��j�����=�/Z=9���q�ܠ�{�W�Y��x��� ���%�4��=�6�<��x�A����<A�+��=��Q>m���������ռ���=��>Ŕ_��M"=�g=�ڤ<ƽ������p��=1gݽ�ߞ=�z��ʡ��z������<�ۜ=���=�飼�%=wo=SIo�;��=�z2���G<���x��<��ֽ�C�<�@弲+8�pp�=82>L��������<�q�<���=�& ��V����1� ��Z[�=�Z���r���ݼ�-��Z=㮢��/���X>�W=]�=�*�?1>�.(<����_>n���D�=NVZ=EV��e�V�^{���:����<P��=z�=0�>���<n�;����=��1z=���< ��=� #>��M= �ڽ��#�kV �nCC>M*�=)ҽy� >z{ >M����.<��K��<�U=���=�r�X>������<Ĵq<�7> =�<A�Q�[�x=�C[=1J�=�E:>�K�<#|�<�ϸ��G}<�����nB�=��G>�PA= �
<��=o��=�"=o��x�������\=��;�=*k���qA�`v�==�ʼϣy������ѷ=�����j�����<xǢ<`<,>^�~<T�!=޻�
�>����s��X��%�J��nI�N�������S��H��=����ڄ�<�7��Ђ>W�={��[<{+d=_>�=k4��F+��^; ���@��cd�����%�b=�sB�m �]�ƽ�缈愼��<p��=[��<t��kj �<�<E# >���<�%&>�tp���1=W;�c��=>����sE=Ґl=+��<^���)E= -��)�L3=� #=�v轂���q�=,��=s�f�|<G7�<�U>� �=��>������5ɼz��O2۽%��u��=��?>e�����<��A<����.Q���5=F�6>p߄=S�8=l�$���<O����)+>!a���<2�G��V�=���3��� �~=��2>QI�=�U��I2�L>|�"��X#=�>�}�̿�=J�潆L=���޻��3���=���ch ��8���c����=���=p@=�-`� !�<Z-���D���˽ydf��l�9�lN=ܷ�=�Y�<O&u���<ŵ�=� ���>���=���=��>�…�x�S=�yv�3�= |ͽ-�I�h�L�`�=qNO�6g>;�5�?�c]3�7�z�"��;�1R�����5\=�b.=�7����O>�!���V����=��8��8>�{�`*D>��=��z=|K#=�n,�k�#�齡U>^4->p�����<�H1=�R�=�4��M��<�F�=�y>���=�� ���>�e��<V��=0l���w�: w
=�ڊ�v��<V?ڽ�@>�@@=���=L�>���}���Q ��x�=ޱ��2,<Nj��V��> =��[<XLO>ӹK��r[��>����BW�3u�����=�q�=|H�x�7>�����x��!»��^>"�<���=k��<ոH��S�.����٣=,+��������:�)q��扽d�����<h��:"ŭ<��ֽ��#�i�S�
s">�Y�.���$�B��?=&k=ԛ�=;;^���#=(�=�$��㼫��d��� >���<Q�>8ñ����=���=z�~����=+��<х >}��=@>���tq<��<�ҡ=�X���I�=��=��> w�/�-��,>~n�f�)<j�=�R�k����P���Ἐ ݽ�ҵ=;{>o��=M ���V�x���ؽ�P�T�)=���~p��Z�=~��:��=�NF<�]��ȋ=�u6�tp��߉= l>���=htR�]U�<՜{�Xoн%%�=�Q�F=����4>�&>�F����;��\>&��=��=֟��NPU���a>n�ڽ�Tm�t�>]���D�M>����vϽ&Z�����6��=�]�=��=�s@=A꽐�@���%=�;ֻ\��=G+>������;>����2n���xA���/��+=5>�\�H���>4#>=[�~���_=�>��y8���l>e�"�O��<���=��Ƚ'O�='���aiP�ֳ�<����A���lv���%/>�&d��į=��}=�.=9J��)iu�67y�U�E>��c����=5�g=W��:��<H�-=������=��L>�p���0>[�<��!>�7�=Sp+=�%y=�݃=U7�<[�>A�-=�������0��멍�8$�=eL �i���h�= (�=]��=L��]A��5u�=���=e�0>;� =��>��Y=@
�=���=��C>؎��\<���=���PK;��=O���B=���=E�#=,G>�n�a@�<�6���r>w��=��;C��<;|U�������J���{�=V��Id=�M��BJ��֪�b~>��^�ڶ~=��� b��!��p�`�j΂��ɽ=�>�u?=�T�<<��O@�����;�9�=|m�=�!���ݽSَ�n9�UN��%����z���'=y.��{����=�v,�y�;��=�V=]㮼ʔ����1H�="�����=�5Ľߞ=$+<-#W=�S�L�ȼ� v=���J��=b��>��(>�?�=M��=����- X��2=�ʧ�fՠ;kLj���=��>� �0=5Lý���==Z��r�=&�=v��=\�=1� >�<"r����=�y��jV��(c˽4��=�`>��N�E6<^��=�O�و�S��7��= ��=E�=;N���~��Y��<���>ǃ<(*�<����= v>�z��b�o� �_>�]��!�����!>��/��"�r^>PS�=U�=
�'�0,#>�Л���0����<%ʿ=D�d<"���p��=��S�4.��������=S��<����>��yF��aJ*=Y�#>cى�9eڼ�[ݽ�۫=^'?��½r0��=�>g��f/��"��<kP�<�D ���>�E]�@�X�ܫ�� >+��<E�I=�뒽�F�=�r�=��=4�=�b�=�-q=�6Z�<a�=O�g�;��=�'ʼ�o��+�_>E+��3̸�� ż#^)�u�=�Q;�_��<���� �@��Ә=�v=���V�=ٍ�=�x���G>*Q���녾tL>En�=���= 3�������>��8>׊�������T=Y�b�c�=�t.��#=~=�4���o=�q=ĉ��:���i���>�$����=�^s=$�l�Z� >|�<����k�9o(�=���=>�<������^> S�����=Fߞ=��ν_N9����=�]̼����� 4>�U8>�7ͼ14L�y8>�4[�&Ѐ�.��^�JEW=��J<�@ �'Z���;��N�� ���Ѽ[y >� �=:�=�<�qj=�O��P���fm��`>�-J����=�3=E��5|��� <����<1�;�Z< �c�}�2�]r>���E >q|��Z#P�}ġ��a= a[�+-ҽ�K�J+ν��<<��<�?@>�!Y�&��;d��=<��=o��=q�?>:h�����;RU�=t=W�F=�U>=�m�<-6����<�j�<�]��;i><���X٢=(`�>@(��B�C=���o�Y�F����`>��j>&��=�)u���:��.��I>K��: ��# ܼ%׫�ݾ�=�E>�b=>Q> V�����(D��8��<Ow�<����W��=�����f>��D����T������%>��<�T#���l=
�>K@@�-׽~ǯ>���͑=#�W�/0=&���>p�t=� �=c�R>ܚ
�ü�=t5�=59>ac>�3�� �k�tb��������<R�=�Q);�
��!�=2ּ�'>W���� )���%��3���I;=�Ӟ=��>C}��ʗ>��Q>$Q���QW>�k>��>>L�����Z����=G�:���?�>@�P�-�D�O�ھ���<%��;x���P�zc
���y<�ʋ��YO>z������]LT>���;����L��=��;�}������=*>ОO=�]C>5�=������!�|�s���<x���k>�M��">�N=gw��F`<�y7= >ÄJ��)o>�&��se=�=�c�u{=�����&�;g���E�Y9>���;0�X=�J����>�'�H�����>���> �>F+�)��M��ڧ�������<�J��"C>������9�5�< �����Ϡ�o�=���q�ټf�=�,O>�޽+��>�g�=.#+�T[Q;�ƽ4��
���}¾l>�=��;=}>�*#�6^p=&�+��=6<<ӫ�w��bC��P�9������{��+�=J5���=*=��`>�\�=��X�| =͹L����<j���hཌྷ�d��ԥ��-\="�!�������O�Or��i�"��e`���0>Ks�;&c����%>���=��r>�s��܊�=Y/�=��>�x������n>�TK�3��=L
�<�-���̸=���A��\��I��=[=>��=���<�L̽%>k��=���CN���콌z�=�s>��<>V��=���tzz=0Q�������4�2>>D6����=������=��U;W���uf$�/C�=� =iW�=�����{½�_ʼ��P���=��0>��b��K=�=���=S��� 闼���=SH�1�=����F��=� ��`3ѽ�2i<-"�=f�5��%.=�z�<FV>�x�� 3��S��=>�=�=cd��;��k���&=�� ��e������ϸ��h"�<��6=�[�P�t=���=�J*=�>�?��UT�Q�A��*#>t8+��4����=֯�T䙽  �+���0� =ԓ&<��S�� ��dh�=Tު�����3D=p;>&���K>
d���ݝ<��P=6 =��|�����l�>s\F��p�=� �=��=�΃=����kF��Q�=��,>1f��1�O����>�k.�'B溭[�����>y��@�=� ��2�޽�%�=}��;G��=Ç>�����>#���x=g�O>O|��G=�$�<�j,=v���찿=��'>��&>Z'Ľ"pI=�t��p$>;͔���wv=5�= 9����)�>�?�=�����齜bi=��=��=� ��P�B�_�'�ٔ���6>ez~=S�S�H��=)+\�Rkt=��$=8с=Y���٩�=5�.���j� ?M�I����j=�V�=�}E�o=x�ɺ�L;� �oͳ<� \�C�>��I�;L�D>���=��Z>����EԽz�8�7#>�y>�I&�J�>�.�Y2W=$���ɛ=� �S]�+=j �; Y��w��Rpw>֥=���>�}�=G��<�cϽ��߽V�=�~�K���^!�=a-�=�C�<�Ï=�A�=�n\��F.�T���/�^��+Z�0��&�>�\Z��%���>����b�;~u��f��.�`���t���ق����<B@[�� �=���<㪽��$>h�=0_��,;�<� �oۼ������=��u=��e�B|����k>�J���>!��=0���_ڒ=0�4��c>��K���>Q�D�]�w�} >�!�=8����}g��0<�5�R=O�s��z�=Ԧ����$>��䞀�4'�=+�Y<\����>���\�=���T�>��<�b��>K�=)��;�Mt=1q>�;��Z����;ٸ=��+� �{�.��=(T,�� ����A�½^0��O�o�Q�>�z����W`>d �<<_�����m��<����jjw=}�½��y���;B��=�.+<�����D#<�̬�3���o=<H�= �=��ཬ����4��|�M>Q�y=�GB=ѧ��Q�s�yt ��e����ŝb�鿖����=+��;g
�3�=�;���۽��:�Vt�=(PD>}�_������]o>nC!��j�� �=.s �M� ���L=Ʋ=stʽ���.yr��́��B=˚���6���\ͼ�����o7>y���rHw�%�O�7���X�L<t)l��t�������_�=M7���=>%�t�`b9�-�/�~ֽ>��<w ��"�����<=���(��<]�6>��1��kd=\��=S��������4s�=⦟=<�Ҽ�ֽ$�o�k�F��c��@a> �"��,��ʵy="�½T���*==z�9<�״��n<i9��w ����= �>(��=�� >|/b�,�=�ֽES�<�%�A`h>H�%>�N�=��j�st=�=�[��=�R=}->^�K�B��=_.ڽ��f=%%u>��;u���#K��`&n> mB��;>~�f���>�*��1���3ļ�T��s�w=��>��>'섽�耽1o[>&V��v��=��(�Fc�
��ҋ��%�p���<�ʼ�R=��M>(���rٽ_�x� E�=)��=2�z>����w=��=h!Y>եt=��>�R��t�>�r=���=9K'��&�� ��=>a��[E�=�� ����,�� y�=}=0���5*6>o�0�N�>���=N}��hsS=�=>�m$<��=\��=�q=G��<��r>RRk���:���\����=l�>;a���$+�87)>��c>n>��y�ٹ�=O��=R�m��=��.�=6 P�2�:>��<���׽"�l�)��<�=�oý)?=�X�$=j�[��Ls�bL�ֲ�=��g��J˼Z� >��i=���=oŽ��%U<''�=��=��3>�Έ�Ԑӽ� =� ��?,�=A<N�ܼ���=~�>"�ܽ�l>R\���>�+3< �/�;��=��>26>d>�=��M����K�8>���=�X7=� z=��3>���=�Rk����S{G�����C\=P���2�=&ؑ=�{�:#:����=/��<Ȗ!<���FO����=SW�=� �Ɛ'�Vzh���`��8�=q��=�W��O>-(>�*�;��e;[���z��U��;Еu��ن>=���<�Z=Obe�I���=��=���Bb�<� �=�X<>��=��1�r&�=;}7>(��=�'>�n�=��*���Z=�$��o���ڼ=��=� >����Ì�;��d5>G/^���<�i&=��Ƚ�h<�+Q=�`��2!>�����z��x��2>���]-����<��˽䵇<Uy�=��=��M>V��=q S���>K�>=% ��s�����<�G ��^<����=����]ټISν��=��!�3��=�D�=�q��_��<���=u��<�(�<�_���Տ=f��+<���J��=_V �-��=~Y�<ù�e�>�׽{(��
o����<r1>2>�mӼ�1��ۺ�<`Z�=U��1�9>��{=�b���0�2� >�+=; (>�y�;�>M �=2��=�)>{u�=�ԣ�� �(Q��Hܽ�:���H����=4S���,�Ni=y��<"K:S��s���f�J�@�:>!@�<2?=�ɼ{o��>ȨT=�̢= 0�>d����,�S� =���<�!=�&�#�Z�=��=��=�1ʽ (:>8�D=�y���ٺˢ<h�0�(��h�>.�9��n�� ߺ���>?�¼.ϕ<=��=>f⽧Sj�_[�>���=� =�ῼ��="���+���'���1>'���H
E�����=ƽEe��|��<���==]���I ��� =���=�m=![q="@`>#88�
g��*k=����t��0�( >>��=qw�=m��= ��F=o�&>1˩:P�۽ �� ���[n�=}X,=2Y�>�1 ����<Q����^�<����.��=������;>�ʊ����=,��=N����;=;�=h�u�`�B�Ē�����<��g�~y:>nI��ID�8v=5C>�a|��!>Ί�<���=�ٍ�1�M=g?J>䕻#N�;�l+>��=��<.�˽ya=]��=��.=��T<D%
=�x�������=0�=��$�Z{$>�&�?��=BoڻR+���>��2��?%��'�<X"S=���=�� �gN*>�R�=~��=�S�����=�Z\� ��=96%=�3���P�9�<���=(e%=r^�=+���Ī >�L��(o��i�<�6>���$;�KPм��=BٽX6=:&
<���:���=M$�� "���=O������=$.Ӽ����i�5�<a e��㺼�������<_'~���<�4ͼ������>�=���;ˡ7=�>K?
�~L~��,�=��_=u �<5����R�=��=>��W��=�ë���T�̢>���;zL�1h+>4�D�Л�<���=��=�"��U�=C�<�ܰ��v���<�-=��%�hB_=�ʂ��'=]�>�/Ž �⽃�����#�֤�7��"������<2H-�)��*��B-network_body.linear_encoder.seq_layers.2.biasJ��s?:�\�;]�<���< .=��^;��z��>�<���<��C<�3�<�^z;�v�<���<���;��_�<�F;ە�<�S�<' =��=�-ƻ�
�<B"=Av��e��;�p�<_�6�o����<u+<�ç:KӋ<���<9V�<�=fl;<�]�<9$�<���<��<�ߓ<nMZ<��P7�ȻB�-<�ř;K�=%� =U�V;��)< ��<���;H��<��;�&8=�%�<�Y?<&8�<�$#=�{�;���<e�=�{�<k=o�;� =�b�<�ˁ<�_�<u��+��<���<��<���<�a<��i<��:=Dκ���;�ǻ<&��`��<�B&�3/�<���C?=ms�<�q=y+;M` =�^�;S�w;�R�<?�\<�N�<���<\�=���<�a�<�=�<��<2��<o�=�;�u�;�L<Ѷ�<0̂<��/;R��<9�=�X�<OW�<�k<���<C�<u�=�Q<Jب<�<Pb�<8_c;�S*<s��;R��<�~<0�<*����B/network_body.linear_encoder.seq_layers.2.weightJ�����ݣ��+���m��Z住�>���<�� >�-�=1�%�rV@���>�� �!�<��6���3<9{=-��]���ʻ�M�</*���
=I�=4ˋ>Y �<&�=ڝN��!�=�4=@��;)'=��O=~zN=��1��Wj���=���<,�����z�<y���:���a�<@��;��<)�=��=�O#�2@"�V#ϼ����k�|<L"�<֡���Ƚ×<C��$��=��S=��=qڬ=�r潖�;��<2NH=RE="���m&�������p>�ܸ=fO3=�F�=>ʁ�=?���,�=O�мK1>��?����<d�9�nU;��ʽ�:����=�XL;]K�=›�=�-z=&�5���}=`񱽙��<:o�<���=Lk >��|�ѽ;�|����tü.�d=���(�:�B��u[��ش�d�<�Pi�����û�tݏ=���T��=��Ƽ�³��Q�-��
� =�'h=�ެ=i�*=�R
��K!>�4&=X��g�<��J�P>C�^�BQ>��`�i��V����
�Wg���7�|������=��l� ���w=!B=X�o=�h*�&�ƻG�f=�E,��ϐ;E�E�ݠ�=�����h�<��:�(�=�H�= �ʽ�/��V���J��E< �v�ƹ7=K1�<��>�ܽ:c�=reR��"j�Ԉ������q��=��O>��ԽE��<��7=��<j=&��Z�<)�׽��5=��!>u��=l�\��n���i�?��="GO��=_]���bN�m�e����}<5�S�ޞ=�)���ҽ�>>A���>�Ҽo�O��6>����@@���.:z9(<�S��\���^<k �=���<o?�=qS>$y�3�E�P���<���c��C�����<d��M=-�=l#8=-�<��>=2;U� �����R>��2��2~=�$�=�t>��s=ߢR���=� >>H�<��<��ڼ����>qk뻭g���U�=��ҽ��S>����Z����=��N>��a<e��;��$�\��c[���2=�=�S,��YҼ$d4=�������=��%=d�>6.m�6{z��=V��=��G�,}�P��=���Eצ=�8�<(�׽5����H>|��=�V�;S��)� >�E=�ׁ�Z�(>NA���WM=�i�= � �X�ʼ�]\<� j�{�=� ��<�D�3=����v=p�=�A�<�E�=�+��޽V���QٽgoC=�1��qw��N[<]?���<q5�=:r�%>��ۼta�=�:s>[��=r�����]�~���́���<=f�ּ55н��::L(��t��wv>>�.I=R4�< ߹9L��Fн��H>$�����<|�>[1=��w���彘_�� 钽�����5>�c�=7!��T����[=�0������=�c>�Y�<�™=B?߽��4<��[�d� �R���ֈ��BҦ<�>���=M;n�ԽkQĽ~��<�'�Y�$��{�^Ş=������e=�jZ=o��=Y�2���=�aٽ���s�8>[�/�x��=rR����=CD�t>���,:>_,���~���&>��>��=]�>�Թ=QB�;��q�!ȭ=ׄO�t�L>a��Wz����)='D9>B���y�����k������R;=�Eq���>��&=��=�f,=4�p3����=�m��/!>%�_��y�=� ?�,��;�p >����{�7�L7�=�=�';Z�ý�����=P@>= ��<:ξ=�e�=�v^>0О<�/�=#�z ->Q��=��e�C����=�ɽ`�'>e+>9ϵ=�,�����=���<$�:���=a&>l �=����c��� ����k_m�L���� ݽE_���\=�|�=��|�=�=����_\=�.0>@I<-;>�~�\y�=��=6C�<�W��0zz��\��
�����l9��@%����=)U�=LG�;D�=�T���'��jxO;���
���ԯ-�#"A�<\w���D��g=*�>-C���=6u�(?V����=H%齛y�������-���=�Й= �Y=�_=_<���@=6a�����=������3��@��"���i>p}�<<#�)M�N���]�o�4h'9�ʽ�g�ϼU{_=6}�;dk}=�I�=�g�<j�>�g��,������<������mն�-0�=�y�<����*r�hXμ���<��3�ʽ�_�=j����ؼ���=`n<��=�:���?<�*���Бp���Ἦ�>/�I=��=�
��U��y�@�=���J��u��<��>�=����=��C=c\e�/#���6 ��l>��]�Lv���m�=�><"ݽ��༿��=w�)>�>�h�=�a>K%�q�o=b!>��
�3J9='н,t={߽93�:^�=��2;~q�|K<[U>��U=��Q���*���&����=}3�=�8�7!Z��5��=Ġ���J��R=��3�>]ք�*��=N7f��^�=���Í=ZFi>���_��=6�p=�|<�σ�P���hU�=<� >L�J=�+��A1 =�/ٽ����z~������ф�=���=��~Ӑ<�KH��;I�Ѧ=�@�=�������=@�h�J=�%�;H� =~��=�L�=��=钭�ƂY�)�"�E=*���F�h+g���)>�X�=�T����=��/=�^=6�>ܑ��$)���a���E�!��<�н�=2y��;Ľ�@���iS�iP<~�^<B�=������g��=��l;��%��=�v����/==5>�}�.�u�4P����=�g�=��<�ȕ<݅�� 7�V���D/i�Kl&�y�@=bWS�|r>� s=�����
���v���(��� ��"���=a=,ܤ�1��|{<�� ��[=�wt�0w��2OѼ�;���J�<[�'='_)>�N��?��<�@>zT�=˭��*׽���g�=_n�=s���N��j���m���=�ނ=z��<7��%��Ծ�=q}�jG�=[t�=v�> y��\���O���R
�<��,>O�����ٽa|��&�d�=�Q��"�=�y彛�ܻr+���r�=������=dj���=z��=7��=�� �Ա4��0<�^i���%<e⽡�F�M\��HΘ=�Ͱ:<K�:�׈�S�=�8<&�����������+M��D">�m�1����R;���ܽ��z=�1��ļ�G'��ؼ�H�B�8,�$���G9��<�_˽+, ����xw��gi��&��<�i�>�O�=�ゼ�d���7>h�;̇A=��=���:=p��h=�=�A,>+k<:�#=� 9���>9�Ƚ&ZD�:5�=�����>�$����k>0�=6=�����='AY�"dG=�@ �O��j�G��_I���'��S:�#䆽Պ/<�%=�_2= G6�j�ǽ��;>y|��>v뻡o7=�=� �=�4���������FC>7�Ͻ<JW<�X(�D��=���=��B=�5.���>Ԥ >ղ��dE����w=njE=f�R>l�׽�'=�4&=Mj��`_7��J��n���V��'�<�[�8���'��i��}��2
��~ =�Vb=��!>X4�;��n=!�&��\��u���2�>�^= ׽�x��c;r��\�p �=��`<:@�:��=���=��=��D<a���� �7U�=��<L��Ej�~D�=���<g�>����0���>7N��{@>�@��ߡ��`�=5�>}�Q�xC-��sr���=E3��%�=�^�;�6c���#<^� >��8��ަ=�n��ouԽ�D
�z~> �z}�<7��<x����t3����=��=M�F���
>0�3<5��>Xe���?��u�<)��<װ�<,�S�><�B>���<7� �)9����;��\=짭<گ>{a�=*ȣ��i4>\�q�չ?�(��=�v|�B=�=*۽�LN>l5
��s�o-���a��^z�#���2�=9ٚ=�jJ�(�H>�o+=�j����<@��|)����=m{K�|�}<������нK�=&F�<��*� >���=V
>Y@��`zK<��½tż=( �:#x���K�;˚��◝�.�=T��>T>��D>��=�����S�<�ڥ=��!>��> ��<�2X����;8��=X�Y�&� >{�=�����=��<�i�=�[ ���=x8�:e��=I< �#�󾼏� >.�=���<�.=�.5���=x�q� XŽ�w>���w�8Q�=��� ��=ٝ��d�
�c4!�}���EH=�X�=�&>G� =Iy�=�ļ��>�-��M��pk�=
k�<�N_��섽@��l��=���0�>���>�:+>� ������N>ha�<�k0��;o=���^��� �>5i�=� �>��� ��=�u$�ɏ=��޻�t˽g�(>`��=�!F=.�=�V�� ����=�c5�w�F>����ً�v+����i��F=�#p�Tp���m���i��Qv�;����vN�=,� ���(<� >!b[�~˅����=d��<�n�~�=�*(>IԹ=�� =(S>\� =Z�U=#R�=�C>k8����#��-�=C��<�������=�*=�t��s�=b��<��)�ľ
>�� =T��=ם6��:=F:%>��q= c=��D�@���u>}� >��'>�a2�x�D�y��=���;���j�<{<>p��=��=���ʹ/��0�=�GM�(����S�T��;���2�B��~�|����y=�\K�&�y=���=b c� �R=?�D�����p��<�>&tɽG-�=��<��u=b\��l������A<J�����<B���=�E�<>�Y�w���� >�n�=:>s
=�M�ʚ<�S>gUĽ��=┍�hq��c�4��[�=��;�&���"V=y�=�6C��M>����TlO����=&3u��Z��j!��B�g����a��=#�R�����I������=|�ἆ֧;M渽�0�=wiͽ�g`�N��<�r=!��<�J̽�M-�N�=�� =�Π�J�f��������;���<=���fh=L���q�Y��}($=�b�����= {��UX���I��E�<p��<R�� �=%$S=�Ic���ݻ��#� ��<Ŋ=�d�=.B�=`�:�Z�=U��b4��A=C�2=ۜ)�Ԥ߼��$�/�1=5��;4���ȷ�;3O�a[һ�,�=��>+H�h�D�����}�=�j��i����-��o=J��=����#�+�j>8 z=�0>o��,+H��t��Xt;>p��Y�<�0[;���=^�̽kB>^��=��;>�K�K��B�=�D�=�O�=TD��L����:�;ͻ�<k=a�K>N� �`���4ܼ"�ռ����t�=�[�h�d<a<ὲm!��@<Iݼ�'?�U�Y�ECM��ž����; vM=զd���|>0=�|��v=�p�;�+'�� >O^��S��Y��X�4>�����=�<M���q���Z?>�5�=?�սv�=ȼڽ�v�=H�]��Ǝ���=�zz=����%��ς>1/>���5���@�����۴��B=�=��W>�\�<ιc=�3Y=XVn���#����=w �<1�=�L,>�w]= �p<�w�=�m> % =���=P/d�t,=C=<,
�=��ƼC�<��;��$=Մ����󒶼�,X�|��Rab;�i����֗>����;j=%�=�w��=������;��=)Ľnd=�2��[>F��< Od<�S�~�U�@_�=a�$�B�(=�1���f�U��=�����#h=+c�<�c=Ԉc=iQ��G�=,�:=�� =��i�HV=ڐ=�ӽ���=�.�����=ym��B���փ�������o��<r��=E���p4���i>E���p�q=�8�%��<#�=F=��r*>�s��d�_� ���!^K�{��=E��<����<�=�|Z<.,<3�������5����<Ix�=�sg��@�����<F;�<>_ �m@=�����z�w������.�n���>�S�<]�^�}=�(=Y�_>�����νГ�=��=��(�����M�ݽ7p���j=b@���O����<B���t�,R�=��ϻ��x=�
��o)>��Q�� W��H>�k=��8=�y�ǝ׽��H>��=ld���e�_�޽Z���r�=1���H��"{�=�"���/>�8>����<p#�3�E�2����5>&7 =��=�����{F=��:���='�ѼK�/��{�=�'�,���1c <聂����;�m�vg�=��U<���=_��=��5��k=>��ý���@��=?�>��=�"1��>��9�� �0W��o���o;<ģG=����U�����=2�V=��D>�9�=wӈ>!V=$s=�t>�d���=G����=/R�L�>>х>�[w=Ko�<�qf���>�C��^/���0�=e�}�
Վ<膣;W�½N�A<���=n���m^�=M%�<Lx =��Խ(��=�7�=��=yA&���o=�v�J�=Xl�=t{�
0&=.�=[��=K=��ƽ�ƾ��-�����S<��0>��;G�x=$
ڽɧ5�����n����:>S#�f2 �|��=��[����o�p>W��=Z4���̘�x�=*K)�Rع; L/<J���O:��CM�Wl�<�V}>�����伈
i��Zս���=U�1�=CJ��*G>���=���= yջS��<&3ʽsw>_f�>�Y�<�t&�΄9>xY>rH>�O�ʳ�;�[e>�ہ<�I�| ��W�F=c]�=y����h�<'bj=C=�<\�=ׁT�-�����;e��=��>}G�=���<&���5�>��νhmI>a� �:���R�<�߭��%�����=1)��0`4���:��?ؼ���6X���m>��m����<ȯI=��P=��S=_K��Q?&���=��E������ ��'=��;>�5�=�fB=F�;l�5>��>�Y,>��h� y�<�@p����=�^.<u52��<�<Λ�*h.>a5�= <=��@=�[=�� ����֡+>+#;>����=j��� ��=�8=a̡�"[ܼ��.�����N]>qؽ,q>����Q<�ѫ=X�B�TY����L=�>����޽���<����[>Z{ѽ2����>��a��瞽��8>�>J�>}��;�\u��Q�>_½��x>�5{�6Y�=-$�=�Â<���=A1^<>c�<w�߽~��b�Q=���<�=�G�����<�<�a{9L�u>0�"�frн����xJ/> �>��Җ=���<���=Zܪ=V�;Iy�����9�X�=�� ��A> J�U7��]�<x悼n��<��8>�?#�Gz��|Q��"�=�W��y�=kz��SH<���<��:~[�9(��;���Q l>@�=�a�;��8����=��&>P�[��'�o��=_���Z>�a�=�*p=�/�<Q��v>�I2�����Ҋ��<o<��Ӽ�=�z�<�-Ͻ�3��Tʼ�S���oƽ)�=8�[=��=Oq>��BD�m=�<�^o����<̊&>C��=հ1�`) �4~i=�Zs=�����;��n;#�e������b�������>��F��$5=�l^���U=Nĩ��bp�6�[>j�1�R�u=�J�<���<��x=�g�=\9r=��=-
h=*�>4��=�~�����������i;��R<>�%�������P�L��=8����ȟ��U�<��c>p䑽j1��L@=Ђ>��X��V�=�q>O��7=O��"<@���%9���a ��-[>�a�=��<��<�ι=��7:Z���l����>ʪ˽�͉�i/L�*u�=ߧ��*d=88>�;ތ�=�B=C�ʽ}Խ�Ƭ=Xd��SI���=2έ�I�=�=|��=� �=>n$o>5Gu<�l�<(��;z�d=E;:>DnN�s{��:�μ�AU�񬉽Z)��ݔl�XI�=�J���LǼ�L�=@`�ƀ<:xA:;�E>������
�y^=���:̓� Q�<m��<qN�=����.Z=!� ��co=_f��%V���ƽ���</Ժ$A���2
��{��E��=�5�=�S��O��=+�>�<�=8�=�v(<� B�"8+=� ����㩸=*"μ*qT���A<�[O> ������=��3>,M�ׄ�� ��;�A�=�~<SP<��=$�J;����[>����H=����l
���qY�LL9=�e=f�f�����?��f���Ì�=��1�-Y|=6= >�©�z�=���=ٽ�#>�!�Gpּ�g�;�Z�=ؾH<Rq�=�/>+sH���$�T�����+����=l�ڽ4�0=n� �� �rD��d�����=��[=ե)�G�ĽN�/=� ���W�=�=���<�u�#�R<�q���y���v>o������q#>���=l�����<�84>�N�=;9���qؼ�6=1����R�<��L<y�ͽ������sG,=/CL<:�=c����Z�T��!A=�&5��'��2�<��<C�vuX��,ٽ8�=������VK��3R�!� =
e�����=Ã�=󠼔�B�E���L햻W�н��9��⁽H�ý�޶��H-�� -=BfB>Ye�=�eb<�Q�<Ӂ>�����j��a=vsj���<�#3>y��=�*���,=����.Y����=4*&�'U�+�Ϭ�<|6ý����&|>�'=9�<�[6��,�fI�<���=���;}F�Y%�#�<��9�ȧ�<��<ڈ;��(ؼa.A�Λf=|D��==/
�= ���m�>�5A��fェ�J<<�컎ce>�>����9��?�nd�=��)>�yV>��༠�ʽP\�=6T�=v��=P�ּ���=��*<ꢗ<���ð<q��;�b�<Pn]=5��;�i�<���� ��>�g�=%���:�� ��l���j�����5��Ȍ<��8�0mf�g&�=Fb>�u����N<2y<D�E�����1!�>��=�_���.��ݨ<b%>��<7`(��KK�%>s��=6�;> ۷��Õ��r=ۃ
�q��=�T��1Q׽̏r�
���ϼ_f�>jG>��ɼ��;�]�;��/�<��b��=vڤ=�ݎ�����*������<]��<k�q=��'=x���M11>]������=w4f>vD�R��=�*�YaĻ�,W�Sq�:���*'�=m�=�,>�H�={; ��i>̰>��6>�2ɽ�F,����%��>�02>ޕܽrJ��!vѽ�6?�@�<� =B1>-� ��=δ=>N�=�qx=(B��2�m<��>Ni潄���L��[�Ǽ�l=w��=�%O�#G>\xz=\�<P�Լh�=Tt>��s>ѿ�=����7�>�/�1x:=��V��;)>��<=u�6�=>�%>��&=��;��[=݁��<�#�=�窼������=�ݮ<��a�|�@=\KO>p���!C ��2�=_>�g$�����݈=� =�P���$���LŽ8�u>y� ��½���Z�=�?�U���m�=f�<��"=��>W.��cӽh1_>�Լ�j>���<&�Z> ����k=�Bx>߷��W��W��>���=��� W�=P�=ua���<£��oC"���=?@���޽5���B��=c�s���ý�=�_>��f<-C&=n5�=C�,�ڑ���oO=���Pw�<��v�q���B��]�w=��B>D >�X8:��)�T��=���<�o-<�o�<p�^>L�x��~�=�z_����A����*�����U�<w��껁��=�
�WR�<��V������+>>B�=<R�= ��=�=5mh>���;5�<K�����='����TE>�=N�����2%���>��a>8��)�6�$�^�����!=�U}�:�¼�
�=JL:�1<sJ��P�=��"=]N�=�=۽���>N?I���>S�e��xB��9нxs����軝��;��D�?��=唽�Kӽ3D�=]�=5�>Z�'��R<�a�=u�M���˽:@�=Uݖ=��0>=Mf=�je> �>�w>���=6��;�н���;���Ժ�=q��2i�Gډ� �!>���8� >��<��=�Ye����:}��eZ>���;~/7�~�<^�t���`��U�=��>�6��?->g�\�~�)-�����9��?>|Ǖ���=�: >��ý3�^=�Q>rk
>B�����f� >��=����qT�=�"7�v)�=벽=��ѻ�ڽ=pZ��)�>�n���F=W�#=�>�<�{���h���d= i�� Am��Pg<�_ʼ�NX��V4���=1�ʽח�=��佊�нbJL��>�<dU�>��X��ڡ=�@�����(��W�/�P>���<����ݾ2�{��<�6�=��'������q�<E&��P`���">�p�=®=UZý�q==m�ƽ��=����>�(=�w��Z;> ��=�0������F�x��rn=O� =������=˖Ž������*�=߉g=&�
�=H��t�>J#�N簽ReC���l�NzX=��>|f<>�A�=ܟo>O�S>�#W��"��O�=�1��v�)�c�<x��n7���^?>�Ԥ=̺��sl׽������ ��j�=ws>]���빙�R��=]#J=m�=�9P�����
��=��,�/�=&�e��u����������m�s"�=�SD=��޽j�=�&н�t�=� M��g�=Q>��Ͻ���򳼽1�='=(W< ���@�+��=#2g=�U">M����m��!�=�ͥ�<�<�GڽF����Y�/�d�W�V<�U@=�����<)��!�WU��5T6��D=ԝ:>��H=8��=spD�y�|=�B= 1���7�&��<����L>�V��~�<"�%�b{�=���<����$�������B�=�3��=��R=���>.�]���;�1 �m�I�2bK�ȑ�<򫿽r��=$H>�`�<���|���Z�=1𧺞僻Y
=�w���q!<�:齔�����-L�=����е9�+*=�j���sý� =˱���Գ=x��;LK=R����*½�ko=�4=���Zկ���->��<l��%�=Sz=��=���<�^�}�>����=->�Ü�Ӵk���>�*�=�?H>�k<�M}=w��<z��=�vE<�Z�<Ϥ˽ޤ
>�n�lP<>V,м�j,=S��y2<N߸<�n�<�!�� �#��ܐ�m��=�{7�����U��&.c��Wq=�LP�cga��qQ>2S>)|�;^�E;�s����;á=ڭ�:q�T�/ż!�׽�bY=�3��ݤ���<- /�/�=��m�(.v���V�X����P�G� =H� >1���� ����%<.�ݺ�w3=&V�=�K�=f2I�,�o=���� _��œ�=�)��<�=���<�p�����by�=z �V�.>'!�Z���������:�$J><"#> *O=�MF�Qˇ<"։=�6������ �=l�������HB��6�z=����?4@>wu�=�)���{�<�ڽ�RL�$ ~�1���=P���3�>m:�=6�/>H u����<d)�=�u���Z>��5>���j{ �tS����l�_�������?��S��������<�hs> �=={g�@�˼�i�=q���A�<$�@��-)=�1�/Rüԩ�=���=�����I4� �$<GC�< �^">��><��;�� <��L<���<A@=C�,=�k�;2��=W��=t�����<"u�;� ��a�^=����!�9>�h�=���=���c�=�5O=0\�=�B[>�佋��>;��=�21>-"=T�)�� '��W>� ��b:>�m���л=�ˋ=���=b��=A��: O���,��슽Ƚ�K��/[���y=�Z�=��z<>��=� �<��>��4��� ����>� &=���=e��<ώ3=S8�_m�=Y�����=�p>�8���-��A=#�k��� ���K=Bt彥*h�yC�=镬= �����8N�=�н�->=SF�;�"=�;����=߽{�<6^[=��g��ļ2��;\�>��On2=A[e�|�f=���=�������=��Q>�s�<����&��2�1?$����=�Xk��"�<�<11w�D�?>�{:���I=���Ú�=Ck�<aH���u�=tPK���>���<S}��u#>�x��m =���=`�)�%̗=��.=R$�;k <�*I�m�>���>㭍=?{�=̏�=E�%���u=�4�=��`>�2�� Ё���B>�Kl����<T�?=I� �ߔ�=j� >�;��>$m�=��M��˕�h�������~>�@=���z'=�`?=�����=H/>��=j�<�ü��=07����<v2@��%����^��=';�:^U,���Ǽ"��;�4�}b =����f�ٓ!=�]<���<��M<;��֎=HZ�=�Nӽ|{L<֘���4=8�>Z��C����<�[ý����wȸ<��W<�&� p+=#b4�ݓؽ�#���3=7��c��=�Խ��A>Hn�=�;�=T>���e"� 9<��f���Ip��F�l( ��y�<9-:��N>�v�<)1��9���M�*q��8 �n�I�����=������db��/�=��B��Z���L=�� =������=��_�2�=W)��JH>���<.K�<E*�(9|<�,�:*��= v=���=!;�:V=|[�J��=?䉼�X���s:= �ɽɽO�y��eI���i/��?߽Va��I��=� >J>e��᡽���=B�f=꽅>ݶ>U�=ި>��)$�'��:]�=�#��-����Q=��$>��>4o��9��<�7�����=��U=���=}\�=Dl�����V���6�>k讽ݱ<���<�i=��yo�a��>�>R�>�M��L���I9=F��< ��;S��~`ʽ�Y����b���3�x=��n<�m�� �ͽr ����4E����(�u���;U��<>��=<\��_�<i���s�N>Z��r�>= �=�i,�:;�==����*��=iX)��;�<ת=�w�=�[��p:�ľ�=����N���=l��=�����˳=l�@>-���,b>�5�=y%E��I:>��s;*�;Z҉��� >ϲ߽��׽%7��*����<A0��ɼ���3?<� ���qn�;T�<�B�<������=�(�,��<�a�=�~�=�����=��=�L��� >%Y�=_�x=� J��븺^�<:�#�~�L>��������!=E�=�j�*=�p����6>��o+/>C��;ޙ����=������U>� ��ݽ�=1@�<><��.e>H��<�1 =(���D��=�n=?{j����=E����7�#���>=K��=c�H⁽��k=�<a^��ϲ������p >ea_>3��;�K��?������=�C�=�!���1�<�~;�\� �4|�=d`(>����ڥ��0<��eڼ5�=�I�=x�ͺڀf<��$���=�7V��~T=�� �8n�TB��=U��T�=�����v=B3��&��<U�@�we�<*2�;���=@5=<U�=*s=�'���D�Z���#�9=��l=���=�2L>,> �.>".> '�<���<�� �<�ݽ�ι�jP8�쥽��>�ͤ� Μ>��>�>!{��oG��>I�=��}=��$<�ނ<���<�u> #�=v�=���}��4��'�=;�q=qX=�Ὄ� >��F=�]=���=L��t��f��=Xj�=>{��=KH
���B=Y%=�td=�����%B�.�X=w���%�=Mp��t>���=�Z�<�g.=uH��S�}�,�?;h;��|=~��<@赼�m=;�K���߼}�7<���=���=!�=W�=�dͽX��� 7�;WNv�R�=�~2���`�<V�=B�+�]$=� �I��<F������n>�}>>����<S|�S��=��t<3�T��О=��E�~�f=_jj���x=�"/��9=�p��(k��S>�ZR>�>J�ӷL�C~�=���]�2=�3ͽ��V�fޮ=#J�5����%�>X8>~+T< Z<�7�=��y=Z[-��)<J_r="�=,=9>�l�=H���%]��޻�>����X����O�l��;\L>�f����ý�>,8׽��̽�֐=�ȳ=1�?=8�f� F���J�;;e̽�淽�̪=mM6����=���
u>4���@�j=99:��8����3h�c���>�^�<�%���C>l��=�\��;1�� �8�z�>���=���=�VX=xp߻y$�=S~�<pS�=;h�<�k>+)Q>F�u=gA=\Oܽ �n�>�ܽ�M(>?5��@̽�tF<B?=�e�=��<��S<6at=]�����|�L��=��=s�>��b�&M�<"�˽���=o��_;���B>�\<�0=���� �r >Lt<��6�7��=�˄=�Q��-�ϼUY��� w=*�N��;<���=��i=�N4;��V� ��;n\=[�i��<���<%�?>�;*=J��=�l�)��=Dr�<nS���Z>��u�b�M��ɼ7=�!�<����|?^=��=C���ҵ��p��rX��H�>�J|����f���L=��> zP;�{+��}߽����Ҕ����<.��hk�=D;;��="��<��"=���=�Å��6�=���<�:I���=���q>�����O�#5�=N�:�[�3>�]�їʽ����#ۧ=%
a=�j=Àk�}8>�,�o</�>iś�4�=y�$�,���mu��ֺ=�нO6)��� >�U�=�齾(��BO�=�[1�p������<�{[>���Ǐ=��罅V��-�<�8�<�*��<�;��,>= ?�4G���|ѽ���";���)b=kB=�u������+->�>�=��-�����{�b�D�ؼ��N=�����g>�t ���Ƽq�����=r�>Hw���v�<,@(=P �=���=6}罒�����=���<�� ��#��촼� >�׌��>���<�>4T=�C���w�o5)=��='Ĉ>U�(>~�'���H��;>-;{�`T�=����1�q�Ğ��ʧ�=���= 6�=ř�=�Y>�s->�����e��w<��4�=KM����n�
�~��=i�>3����B >)g�# �=2�V�Z>�e�=+��=�2��?.�� =>0#/�
��=mu�ݩ��o���h)�z�i�N~7���6��K*� ��=q�<��I���к��a�V�����T����N^��m�Q�^^d=-�R�r ��+β�)�����ܽ������ :��[�|�Ǽ��T>�R׽�Ɠ=�4�=m�; R><#T=غ=%���䈼��a� ٻ\Q�VfؽӠq�ˢ��ң�=�c�<� 佶 ؽ�-(��?=�y�:�>|�g<��齁`�=�q�=�`y=98����=_W0<t��=��3ٞ=:��=�XJ=���HB���f>f;>���n����V�ۙ����]Б= ($>�E>�򒽘�U>�H4�����\=�f�=Re8���>������'=�t@�ڤ�<p�罔�>�1K>z}�:�8@=`罔E>*@ �#H��*>�ś=2��=��c=��;��� �z��[|V=��>���I�<�8>b=�=���=���FM�=,���Pv;�[�<�뉽Ɓ��d�=��9��4>�/����1>��>�-)>��L�w���P$ռ���=�6˼a�K��=d���TF=Va��ު;>�k߽�����Kt=���dp�#UJ<t6<��={�=�I���A��X��<�?x���Խ!y�=Z2�<����=KX�A�>>C�=X�D�W:y�bB�<~��=����i�,>�='=HD=>�8��������m��=;n=����ڣ=���<9v�=��>���='�=p���b�<����i=���"=�j�=o���Iؽ�3>ɐH�!�=�c��渣��fM;5wY=:h�<0����/��%�h=ų(�e��=��޽�:;�����O=~C�=�.;M���h��Y䗽�>.=��>�ȶ���(=ћ�;ɦ=�g��\>�M��50�O�V��|�������~�8>2��L0=����yC��0�=���=Z�x�'�w�X8�<������Β��b�L=���=�Z�<�����=�93=GӰ���6���8=x��=/8:�7���7w�å��Ł=b�=�s���> ƥ=;⽸����U��L >�Ҁ>i��=b!L>�=��>� �=�����-�G:_=)H�=W�;`tg<�V=��=^Ӿ=3ױ<���=�>ӽ���ٚ=~��=Xsz=��=O��_ل�d&='�|�^� =��3�4��=��缮r=���=�x�<��=gY+>\v�=���w�d�ǭ�oΩ��μ�ݽ"v��8��=� ��-�<���<ML��N>�=�Ќ=J�p�z9�<�9i�^&�;eR���F=\�����=��M<^��;�T3=7#)����A3�=5�����=Х�*pB���\���G��I$=�嗽�e�=��">�y �j�˽83�<�G2>|ٽW�1>�S��o�y=s�c=�x=9HU;:5<F�9�@#?��S������= $��� �?�V�Y���E'��Ux�=
4 >��
���8=Y�;�Ƚ�@���=Tqü��>���=Ջz=�v�=�]%=�R~�A���t=CY�;M�#�rT�<Pڗ=K(_����=Xg����3=yʧ=���;5���.�ݽ�1o���~���<�<��0�=�==�����%=�� =Hci��*@�UB����>�-�����=�J�=�Q�eT>�l:J ��z檽�ߦ�C�὇s�3�¼�q>9�¼��L�F^���J�=ǀ$���>ds-�;_g:���=�c���?V=z�o>wx����=��>�b>F�/����;t�>R��=5��<o靽JnK>Y�Y>b��>O�=`�.<�Kݽ�W>���=�C���L>Se>��<@w½
��=ק>���������C��c��ro_��w��T�n=�k<k����=^�~=rN�<�ŽuV>�
>3w<���>4Z�f9>Ź�j�=�&;�(J0�? 3=�|==����a��m�=��νُ
���E>�o�M��=a�>N�T=���� ��ω�<�;�=kl,�_�a>���<&_L;5���n4�ы������+�<�VڽX!N=���<��0�_� � ��=�?�<���=�b�i��=�*��?!+=���d�{;�%a<�r=F79=����I���І�=C(/��L�;5�> V�<l���f=�o�==l����6=���V���0�<����F�rz��4� �3�=���<@wq�]̽*N>m��<B�>>z��<���<���=N�5�/�=i�0>�I
�1�#�N��,C�=�Ю=����i��|��<J�R=���=�k�� ���o�=��P=��>��B>d=��dOO���<ԙ$�b.�=��ؼ5� =e��;m�=��a��^��3��g�=9!R<2�x:�
�.M��]L>�gx=��\�L* �U�����>��q�#�=񒪽��=��,���>@��<-�H=&*<�g���ڶ=�H�=�!=�|��u�{�����_2[=���O��;���=�
W���w�X1��[6�=u;���'�<~��<� �=�%�=������={��=z��<��Žns3� �9=Jpg=0��bc=�k�=�n�;�u�=j�T�����[�:���=L��<�>L����5�%� > �>�� �J����E=��2=`�K<"��=��<mOm����=�q�����=��>U�>�m�Q�=����=�@�q�,=hd?>������=��>��h�+����&>��E�;���N��=z�=15�<rw�;G�i=_��=&m!�ำ�ϟL=�>[�=�������0=X��+1���˽�U�������=̔!>��s��D�<��5=̦�=*f���>�D=��!�����KW>���Z�½(ۏ<� z>��>M�
jO�[��=�h >)=��!%<B>qw1>�ɠ�AMu=+����Ҽ� �=�q&>������ ��l�<�&��` ��XH>Nð��=�
�k�==� ����VM^=+�x� �'���:�1�{=orE<8�<{8 =���w�>�`��Jܕ>SM��C��2�>=��<��S=dk��8互C�=��-=��r�O��=��=&{�=�Dg��-2��b>H� ��;[+�z��':�,%=��t;E����߽�� =>`>����Ͼý���=� x>�ŷ����>rܼ�� >�n�<��*=����HL���3�=w�=�d���D�����<=��5p�< ���!c��jw��5�8�Ƞ;�a>F^ڽ����1�6<�ю�GM=��f��<��]��=f�=,M9>�僽 �b>N��=���
��=��Y�Y0�^+$>Y�s;~虾b��<~o�U�{=�N��7�=}����n�=�p�;�����.�z�x>����&�<;{�;�ګ;5.ݽ}�=����I����=H7���=Q��<��<h|=iK�=`���l�<!5<�>��2V�=�н�\�<V� �oK�:}̼�Z�=Z����g>)cj��+��q��Dh=���+���C���=ZJ�_f="�a�N�$������� >�pڽ�2F�{�;S���W"��׆�= �.>� �=e>�¶�;��=�2g>���������D��-������� �j������3M�^;3��T �aF =��=��j=���:dG9���ǽ�7k=:Ys>n�3�F�=��=?��=���=Ӫ+>�—=���<�*'�^��'�>��<�w >���=Y >Aq@=圼6�G=�֛�e�x�ڭ��]�k>�=4+H>�[�:���~<��m����ym����<�����#>0L�=S#���ĽX��9l5�՚�=�
5�'�>��=��=��J=uc��� �=I"p�E>e��;����JW>�~�=)���lνF�ͽN����lD>�6�=Bb='��=6���� >�r��������=?2=�>c$M�{�W>2�H=�������=5��<G�����=�h�=|��� >�q>��6���2=n0a��u�=V
I=37�<��6��A�=����]؄=( N=�=�=?���q��=(�ȼj�!��k�=]4�<r��k~体��=W(�;s�=>İ=���=�\$>����1�s����<�A����<kf�;�8� 1�9���&=���<�E�F�
>��=�������,�H���ys���=(a+>�(�= ��=�,�Y7�<��Y=+b =�c9��< �;<ix�����=2�N���;�J�<@R�=�.�Ĭ�=4@�<s¼�� �� �����nW��+@>6�~�t�Z=���F7�s�>�3W��i��� Ӽ1B&>�f�>1�>�|s;Ff�� ���xL��C=reY��r�����V5/>N�Y���>=��ɼ�+w=4��=uCp=P6X��q�=d�=�6]=<O�D5�=�$>˽ʨ����;r����=+QT�Pb<_�0>���1��<�Fj���>>�zX���=��!���]���<.=�}���@=��w�Ғ ����઼�c+��$@>�)���>n =<�Ứ��<� ��^��e�{���=����`�P+
>��s���)=��f=j`3�S7�=���=� ��)������͓�2>x��=53;�-�<ɯ"<�=T>s)]>Ğ�=I�X::��=�D�=`����都*���b�$�po>Ӱ�<�~��=n"�=_� >��5�[���yw�<C񼡭���7K�~��=N�B>��ƹ�b�=�E> �-�oz�=dz�J.>��L��̗=��>KtM�F?�;��!>���ou��q �=�;�=6y�=ϸʽڏM>5&�=M���Y' �.{��ͭ=���=������=��:S.>��?�=��=L-�<3";=0#2<�C�=�-�;J��-u,=��˼��A������J������8>���=�����=`l>;}{��K����<�#���Ͻ�?��p{=e��=3t�<���=������>�D��΃�ϟ��V<.D��M�==v�=V蠽V��;�����=v)>��A=@��Մt������*f=��|� ས!�*��;g�T���:kB��g&�!|��;�6>o=���s��=M<)>����*�����>�H�=@�=��C>4��g0>���=B�=�����r��+�6����:U��<\�$>g�s=ʍ��}>�=ۛ�����"��<�('>��)>W�=�O��Q�y=�:=>�����k��n@��r�>�2B=��=e���6� ��n�=�`G��b{=�/t<���n�V��bG��²�vٶ���>= g6�uoz<�&��k�=Ǝ��r�<j��=�6�:�>>ܼн�K<jR.����=�,>M,=O�V���4>(�k;+�5=Y (>�aɼ��ѽ�/7>�n�=N� >7�&=�Ϭ��-\�w��E�<�N��D���ɓ=�t'>:��G�=t�< �;�l�:���)�<'^r��=b���d[�j꽘��<��4�G=h�=�UK<��T��<MJ'�7�ҽ����g�/�5� �K��<(�½�W�C�Ƚ�o8>�ce�zA����=��=�m���Q輔��=/=�秽�>�춽���=�_��ԋ=mH�=O��<O弽�H+>z&.�O�= #>�-�=��>��=� �=�;���k �l6;�n�<�ڥ=�
>"���[�<���A|=���=��=���=.�m>  >b������=5�<n�5��>���1�Ħ�<} =�Ԥ=���X.=�TF��B�<|�ڽ�4 =���C��5=}��=ͬ�:��R��#d=+&q<�^?����ɀ�`?%�� ���Z>���xY��*��̙��ܕ=�0�<��E�->���[�%õ=���N��>�4=&}��u
*>Q$�; ������=�]�=#P�=�u�=�@y=Iȉ�kT�=�l,>F.��/�Q=C��=B�=!B>螩�����#��&(=���=�_�<~��=���B��<�� ����=AU`>��ӽq�<7�A>��ڼ�ķ<�d/����=�����������"5� ��=ʹ�=��<� �D>�e�=�=h<�=�����g<$i��'D���`p� w ��բ�M2_>*��=H���Tp�<[�>F˽���=O�漉c�=`���� 9!>_�1>�����|M=��ݻ�f��ʹq� ;=N��<'�<�z�<uL=��Z<���=����a��I>�� >�5�=�s���� ��)�<�z=��0��^��>���9>q��=⁩<H�i��֤=��߽C�s�L��X2��z(� �D=���FDA<�`��k̽�%�<���<�z���>z�h�fI�<�B>hG>)b*<�Q��8����� �9>v?_�,9�=$*��i�=��H���c>i��<���>���=�D>��=D!�����<v��=%x=sS�<��J�u��p�c�]DB��t�����=�&H�i��=� �oۃ=a>�J������ �=�x&>���= ?s�� <N�ܼ�;>nwĽ��->�~=���= OL���=7�J>��=ڿ�=gȊ=p���u=Qᢽ���=�>x��=0�=#�ؽ� ��=`!���>��^�Eo�����v�=$�2��!
=|�̼��=ɠ�H:��^!��A=&�p=N��=�wܽ�!C� ��=S0��TL�;鞇=Ki�=�R�����F�8��`�=.@�S}�=��Q���
>yr>Ȱ)��)���)��^s'>�E#>���=�_��Q��=~G��I��������^���<���=��1���;�|>h>�������G0>� ����z�=Տ9�����S�=�E�����=u'�=��=ڼ�=Ȉ�=�lR=T@�;�=���80>�!>;v�7��ꝼK��=z"�<�x�����=��&��->�^��nN�����=�竽�̈́<W��=|>�1V=<ի���<��F�`m<�2b�����z�=N��=z{��T� =��N��� � �3��籽�B������W�����<�P �Ȼ�=ޱ=��V��$�=]^=Ƃ$�>=��G�� #ʽ�"�<�<��=ѽP�=3�=B�>pD� D�����M�=+1T=wv�F1 >��=UG6=0 ��F�=z �����m�.>����6�>�mw��O��=}/~=���>4�=�Q=>�����a<�_&=S^=�.>Mڟ=$�=�L��G�=[k���~�Qz��µ�=}�<�0Y>��|=P͠�>�>�S�W��hME=4�3=w6 �����5�=%}��T�O�i��<o�������U���v��L躜=��?���V�<���F �;~�)��A�������̽������=Iuý$�}�*q�k[����<8�(�`�=4:=���;N��=�D=�����=���%�Z= Vƽ朢=d����=�2�=�O̻�+<�zSl�[; �;���<* �V;�<`���j >n��=.����?*����=L=�-=(�:>v%X��8Լ����wW�=�[����`�,�=�����p�=-��$�=����n���C ��ȏ��71>
�#:�Dҽz㻼j�e>�> )j:s�R=���=|!%=�=�5�‘��Pl=��[�p�k���ڽJ;m��e �7<^��9c�|���5>�f���}�=�RX��:�=aյ��\�� �=&��:�}d�/Qd�V�C>h�
>oV>At��j�=�D �}��9���M�='���p;���L�A>�d <���=@C�<~����|<n��+���r����=���=��輾q�����9���>��`�B�/�=�����=�b�F� =m�>|�>w�><�.=Q��=q���P�N%�<��#=��[=7�=5Ee������ܽ��,>ᇭ<��=���=:)=1̚���O<{i=u�,��&�1i�9
>7$ �fJ>ȗ�D>,���G��-�����=Am=�q���z:R��&�<�:<?�[=|�Y�K�+>E�<�<��>߽'1)��O�<�>J<B��<afo��
|=1�>v��<S��<!��s"���'>d2w<g׽�a=g�>�V�,`�< x�;�u��k�=�ч�G@>>�w�)?>�!�<Ma�-#<��;{�=�5��>w���S<�����=>=J�= �=6C�=I#�� ���.�?���*�����=K�<��>p�X;cYl<�sx��� >��=�l9�*�*����<YG=K=껊�#�¶��,�HL �^���i%�=y
��څ�޿-�<�֏;�[� ����n���x�<e5`�Jd>P�a=Z���1>�<3�a=�%�L�>�ʂ<�i>=�ʓ=�C�=/��G�v=���=��=^��g\G�j9��P�=���jw=����X|��Gv=�u���0�;��=��{=�#�=�����T� �<���=�������x�;�y>�Y�=��%>�=}��k�b=Xg�<,�= S�<eF�=8n��uu6�W���DZ��,�޽ ;%=������=�wƻG|�=�E+=T��z�T=����*>���=�W��Q>�@:���=�^�:�񈾝�o>/��=S=�=,n�=t��`3��,�x��-�=���<.wS<��=��0��G�<�ʼё��D=�up�Vh>7�.>�m�>�7M=(k�]� ��m�zK.<o'�ݶ%�B�����������#��/H�HTl<1��. <�X>K��=�� �(*>_������=�.w<]Z�=6�U=�X#=+�,>9ʽ���=�NG�O� >����}9��b�<
��F��*H���>��<�&�=�a�=��G=��>�����Ҍ������ཨ��<D��=������S��̮=��޽P�d={�=պ�=Q�>�����-<�K����<<{��:Ln�����=���=���=t���f�=n�;0�W=�=Q0������*��i)�<���=�M�=s�<��J��,���>>�eX=UĻ爜�F=.e�=��y=s_T=�W^=YѼ�>��ڼlV[�BH�=z���p+�=B��=� ��k� ��Ꮍ9Ѵ=m��<�a^�U
><\>��"�<A���B�=@�|>���=�H�=����#Z���<=o=�ɐ�Ë|��㽱i�������=<��=ۘ��rC���n$�)������켽<�6��Z���ڍ�;�ິ����B �3h)�A����>?� =3��=+������<k��;5�F=��;/>1�?�$�K�=$�>�� ��0����q#>y��K��=�&�=b�>mWE>R4�=��)<�F���N�>�]��<�#��k�e��;)��=Z�/��z�=?�~��?��j>���u�=��x�����=(�Ժ�a;>��<��h������f��\l=ۇ �Ҍɽ[��=�����qŽ���=�}>7��<+&���Pཱ���� �d�">M#t�n�T�!G��Q�=���� >��?�/�����8>( �;�l=�E;a�r��\�=���=� >��w��%>ٓ1�� N>���=5޽�U;����=���=[�ν�=
(�;=�<�[=~t[������;=;$< _���;���=�q=G�><�1�=�c>�}�=H����p=�E~<4����ݽc��Ð=ۉ�Y�Z>
���r=0���~���!z�; >�:�����y>�(�)ߐ��ع�7H�=l��� �<IaC��d����q��>B�=��:=6���=1��= �=G>�<d�=�t��K(��cb=�����q�<$��=*��=���N�U=��z���N.���q�=���=6�ֽ�{X=wCJ< ���0�8� =y�L�K���p� <y. >����N�@��8��%�ã�=��\�f<���. �0#�=�}��\߽i� �x��<��P���)����%2�=
A2�d=�θ=���VW%�2�J���>�8�<YЕ�ڮ���E.�%�bBὺ>�g=�H$���g��=���=]45<����9=V�ʽ�C �I,=�~ѽ��<��=)Q!>��5=��S=L�\=�'�c��<�:����佪fR<���p��<�K>�|d��0�2�&��-��U����=u�?�~��ވ�=��ɼİ�5�D=>��=��>0{,�$2�=������=V������;!�޽����AU�U[=�f�=_�>�)C<��e=��0>W��<���r,<�ߠ����=��!>� �����=/Z����=E��=��<�á�j`�=G��=&�-���>���=э�=4���)������弊X����<����>w=!:Z>��.=�6=�nG>4�h���=Cm:��= N��]��<�������μA=��&=j��<�Q���'���Ƚ����u�">_O�s��=�\�=ť�� =�5"�a�=��E=�� ��?� �G;�)=9I�A&:=�����>Lj�:��s�1d;=��=��y=�����U�'������S�e�(�潣&�;z�ֺ�����=�� �*:>@�Q�o%d>�x=�
��i�=�>��=�ҥ=���=K��=B<�|�e<_��L�=!!>o�=�w&>�>�W<
%=����=A�oD�����=;�=��j�Jٽ4 M=�x->-Й<��Q�����<�m�=�`A=(M���_&>Q#���{�=���ԑ ��y[�S2�=<2�������U�0;噺=�i�=��Ǽ��>�=����o�������v��-+>��=�1�=$���ؽ4θ�X����%<���=}���P*<^u> ��=dC��3-��+I�=Y
��t�=�S����Z�.uO=H�h=�=�����<�ա=����v��<:l_=CS��I��<�����r >LJT=�ّ��,车�,���W=A/>�Z<�O.��3нvW�}�
=v?;��W�=�x��Ӛ���X�����={i��*m_>"�I;v�D�Y�S= ���'A=� �&K�=4��=�<=!�1=�oѽU��=㋲��� >�˽)!>�ֺ�L��=�=;2�=�Y������C��l/ټ Qʽƞ=���<���=�l�=� >iE��_=�g��>�d,<F�9�}�0��c�\��<Z�<�P�e�zf >g=2�޼|�>�'�+��N׻���wo2=��9<fxq>���0�����<<��X'.>F��=����"���>`�E>�y�=%q�W���&i7�?=X���W�=�g`��=��)<Sʘ>� >�$=�-��#�D�k��=�Q>],��Я���=12<(���X5�= �`���>�����g�श=�qǽ��N=�O�=��s�v��<䍕���ԽP-�<�H�Yd���Ƚ1 ���.�=1e>B<�^�= �~�X��;�ӭ�|��=>��<�a$a�i�<\깼��b=ث�=f�o�۽k�>�
���'<<9/>6�����"��}���L���\���"���:=����jR=�ϴ<^i��.�=;N�=֊=l>K��$*����CE`> +��>� ��b�(��#�<�?>�֗�����}&z=,T�� ��=� h�`›<����#�˼W�|=3��= ���6�3=.�d<�"�=��=�u���">�X�=�Ju=��ͼYt�$�J��~��}�D��񣽞���W�&>�r)��<+�x�=����$>~=�ha��������=YC,=)���`&t�Xd =��=���;��c=�X�=�����=�w�<��Pἇ��=ה�:��=��9�œн��h7 =���<^q���J�b�
>��H>�(=K�x=�C�=�/��^Aョ{T=(�i=����#=z�>�{b�!��������<?�<���=y�9���н�'!>��*��Vu��F�<����g���< �;K�b=W$�<�g>vzL=q؍=�q߽�4�=h��;Ҧ=�5�=o�U>���^������x!��$=�h^�
��=�i��!�Q= �ż��R=/Y�=wu�=�G�<c��=���<?�g=�{�=�g^������qa>(7����N�S����b�X�����=)�=/zW=�6�<�Խ=���=D�Z�.~>W�y>�mn>Ur�=�5�������U=���R��=sT�=�kx����k>^��<ti>�:�������>�"B�dֺ���=����O���$�<!�*=��=�m�.=:�=�&1�����������a��, >S����ռ���=���=T��<��ܽ��>p|�=$�=�W=�P�<l�#�F��;�_����=��,�W\=�8w�]��<�g�u��Ԡ�0�S�ث�=��s=��Q>�n��c.����p⇽=S���ǽ5h��0��=��>Gԙ��Q޽j�����=�x�=�� ��v�>>��<�i�=�]���M��7'J>u���,��� �� �1;b#D<K%)=U����Wʊ�� �=����`��Q✽��>ݬ�=�<3��3)>�&1���<!RT�4�`|C=uE ����=W*��u֏�Gk�=��>i
�=�6��F�>�1 ��N�2�&=��<췽/wa=0ΰ���7=��O<�H���+>)'�(zY�m}#=�ė=��/���=Y��<��q�=��=�=<����U�����F>��O2)�i�彴�=-�;=�e<�>5� >">���=o� >�Y-=�>�o{=���=vy>���=��O=U���~��pL<�����]�=�ꏽo �=�>����Zş�W����m��P�F���(=GN�<�P"�^�н0J�=����@*=�P>��� �+�^��=ÁB�C�*<|a�=/v��TX��1w车6�=��=+�G>�3½� t�{�J=�ؽJ9t=ny�=0�9<��=� =d��2=hX�=\��=f->�A(=��<ft~=��@>��=�/0���h$i<��j�����(�(����@'��"B��r��>Á����=��U�������==㽺�0��Ka=*�>ͣ�=�����S>�:E=� ���e�=J>���%����<�d=)��=�t <� >�p��/��Vk=�v� ��= ����J���,>�__��ou=�2�<������u>�P�� ��= ����"��j��=�=Ü�=Pu0��3�=ؒd=1=;�����L��{�=��">k�=��>Rb+����;=�>�׫=4�"=�bI�֞�=�&�����^�;Wá�Eg>g�;a.�<�c�����:B�t=(s�<����۾�>i��<L�G�F�$��^�=(z��d�=a07=�B��2����л(�(>�m����<Y��=��6�%��==�6 >)������=��9�s�(������tq>`\�=�(��=��~��V�o��K�<o�=~���K;�\]>�&Ľ����ּ=�JW=ͦ=��'�� �Q� >�����������|��| ��5�� CE=����/��3�<��%>�Ԛ=�b�<�q�<����eǽ���<���c�*���'>PYO<�;��-��<:�=rY��b��=�
�z#�=�zL���:��$=��̽��{��/G>��=e(0=�C��:��%�b=�U�=bQC>GI ��@J��N=ꣾ��3��\?>9�]>0��> ��<^��=�!��p<�p ��aB�ڷ>�oK�\c^>7�=L� ;l䧽2�B��z��/�'=m9��x% �A��k�*�k�����>ȇ�=f�7>�=�>�=�=�l����߽=�ǵ<���=(]��x_y=�p�=���= <*�������r'=�4>�<�<�kQ��ἂ��9Z^�<��=G�4=���=�u ����Z��EM��f����<�<�o�S;��
=�������<
�ʽ��ټb����\���6<�:>��R=ʓ��B�>��s=���: �!��pk=�>i���n�f>�IL>���=�Np=�0��Ͻ�=�pa�c�{�"Yʽ����O=�u�P���>m�`�c��=�t#�i�)�8��=�=�>�3<겂<i"5>T�=ƒ�� �<b�E>��<7��Z�y=��=M?=
�>��=b�S>�4>E>zƊ��T���A�=����?�Ko>�$�;+D=>��н��w<%��9��/��,<���7� =���<h�n>�j����[�4���!� �~�����=v��=�����KN=9�<έ�<i���n�u�[=:�M=i?=�á�>^���8�!/ =��>�ϵ�4���
�|=��m>G�>�mp>�y�<�ª����=�~����l=I?�=����� �¯���}&��+ � �V>x��=x��;�n'�v���}5�k��;��{<�=�f@=���=6��=K��=�A=� A�ϗ�;HM>�b*>sg+�.�"���0����d\1�+�=���=�]����^��c
>�4�vS��:��u
=�����޼�1=���=Uz!�,�=d�{��1�<-�
=��N��Ӹ=�}a=^�=���<����,�a>]�b��� �=+�=��鼶�����S��d�=�s>�t�=7d>nx1������*>i5�%�<
>9;��<�x!���S��E��{�y�����=�@:= '��Y_=%���$��!=�%�<E܀=~���^��kl ���#>�M��8�/$<>m���I�=�n<�n3>3@�<�� =������.<>�Ӌ>6T�;Wbߺ.f >�LD>�o��hڀ=_B�� Z�<�=�=�� <��������Sz���=_�#��s��c���Y�=E����b�޻ŋ������l8�����}hA=Y�½X< �>����=s=j6>C�f�mb���"2>e(���'���v�3�< I>��"<6m>&m����_�U>i�����<��<��{�wp�="�����/>jR9=��
�M�d=�C�;��ýr ���=]���Y7���1�������]�Wཬ�E= �W�z�0�� *=*4�;Dt><
�=I���F>Gx=r��=���8�=�U�=���o�{��ii�a=4����H���=5�� T�=�>f�˽!H����=�#��� ���%��ا�!>[�s�� j���Ѽ����m� �������c�-�I6O=��== �����=��=�h*>�2X�1��=| ��*�G>�y�=�v�=�6��N =�V�=�; >�s>O�=lj;���=�
�=��=�����=�;vI=���<ک⼞�����=�V3���J>
�=�&�=�t�:��:�XȾ<����#>����t2���ٗ<Ǝ%>����=���j�>A�p�o��<�g=i����Y�==���># [��. =���.���r�=��=[-%=l�<6=f>4<���,>�#<{@0=3�-=���;X�)��&>��=)�j=����ط�>���=�7>�'��A�=�(=�;(���A>��H=��>~�\>��=1:=�q[=�G���%�=���� �<l�u���Ƚb�ȼ�T=˅o=�:��8�=G��>/���Lm�=I��=���<h�g���[����=���=��=b$�="+j��y(>`��=���=��J� ��=9����1�����3���S��=�����>R�G�k�:��=��ߑ�,���Xc>/4>�7���X<O��<���K�=WJ ��-<�������S;��wӖ==[�>4j;>�Nw=�>\�<�9��6��=f�%�=R �=��7;$)��%�ͽ���X7ڽ��5=�W=���}�������둽 �>�6�Bg��=
t;�~�<"#=z��=Q.޽����?=��L=~��;�':���3�ȇ��s0�b=��8�.�<��2�
i<>�⋽��D=�h�<*���'>|7U����;x�=؁�B����F=�e8���J=��=J�ļ4$��J�ĵ�=Q��<�C�&�=���6�o=~�y=�H��U�6<�7 >m���*:�t+��Z!���R��� >)`3=�ĽC���4�=��==�>j��@�=Ay���*�:
��<��5� ��=��=�|b�ש�=��A>H�=�<�;Bx<4|=Kp���+8Tlx=J���}u9�]T�l�J>�=��*>;5���#��ד=f�=�p��1>� ==��J����:�z<�~��4 >jH�=�T>���<�U����v��}ۼNdѽ>��>l =D{>NCJ��&c��V���49>�6>�!�;qd�v����(��=C�&����=F���|=�$e>׳e=��`=�����J�<4���.�>�-��s�J�D>�M�= V�=XO��� <��>\�S�o�w��Wȼ�U(>��޽�$D����B�>Έd=zƂ�[� �ݽ����� �=�L�=��x*=dzϼ�2�=�d��8�V=q��<x&5�w�?�=<�=^=ַ��m����V��<�>J=��p��+F=������a=m4"� ���C<�=�N=`�����KH=@��D���R�=Pf>ǭ>�x4>�/� a�=*$�=���q��U�;ɘ�P|;@���� ����=���<;킽��D=�G=��A=���=�'��P�;��=(�>������=&r�o>��>m����<����$�= �*�׬t=�sf=%t�:W�@�*�=Z�=x��<&5=:r/>-V���=�^*��o���C ���W;�e�� WL>E�u<=�#>˪��M<ۼ=�%�=em��:�������f���=�,=���=d^)��� ��sq>qW=��X�o�]=G�F�z�D�0>�#�(4���*U�`>���=V������=LD=�wԽ�2���H=�!_2=�V�=Ӡ�<��I���<�K�D�l���">%�?<�{���׽����������e�Z=��h��\�3�2>\ J��">jf���<$>L.ڽ�-y<"RT=�Ƕ��9'<d>d%>·=���=�>����
Q�=F>�%>Ic����<�{W>�_����u� �y=f!0=����X#=�A��+�<������<;�4��G�������{�r� >{�,=�+�=[��=���Uk1=�m"����<u(��z`��T��k�1>cR��F�ǽ���<+p>�Ô��)�~��5�A<�D�=R�=�(���5��~�< ��wɞ=� M=���&ש���X>@��=��?��)>�=�_z=����=>fm �����`�X>�`���t��^���>�f��̧=1�8�%�8=axR=��/>���=]����/���a�<3�P>�,=��
��5�O0k��#�= ���aq伝- �<��=�����FC<�Yc�� ��T>8��<-�>��=�P���=�)C�o�>�᷽-"5>�;�=X�= 8�=EJ>�d��_m�<ni�:���C��k,=�o����,���J=�d0��;>�.�c��\ ��� >�B�� �����<�9A�L�D=�7�=�� =;W�< ����(�è/=���D <��<Q=�={xu�S�I=,V��?��p�=�C۽\�>��5�����9>���<x�)��KC>��=ڈ=t�����<��޽߶�T�=0�ֻ��2�J��=���=���=�E%��?6���S<4 ����;>[�ʼ�l��̐{=�f>h��P�<;��>o��������
<�����ځ� ��=7G�=���<��v=f�I=��� � >%�O>2Tq��t>��=.�A=��=�֙<:f*=��A>�_]=07�=�㮉=Hލ���4��ˈ=z��= �ʽ��{���m=�}Z=#��61-=�@�;�1A=I�J=�a���J>� ��j>�
����<J�=x��q��|㻹�p>�}$�Ω`=�@Q><z�=���<p!�Uk=�jY���B�4`=T�ӽ��>k��<��=��;>D�:��t=Y>��=`7�C�˽=��=f��<���KFܻ�=�=�m���#�>ހ�<r4>!e=�>{=5�?��)ټ�����"� ����N<v�>��?>.>=�༸� >m����
�<��Y�R=��^=�e@=�?�l���ɶ�<z ���=��p��b��<mz�=[ ���ɶ�+DQ>�d�KL��*ׇ=�Z>�� �8�>%��=��n=ڦ�;�-v��w=�>է]�/�-=xݡ�T9�.d�<(=6�B����<��'>o�u�t�?=ߪo�r�:�����e��.>W.=�;>��I<�zؽV��ux;C8.�":(=n��=b��<m~��(����<g�=��w�䠭=��>L�k=܈>��;���)�(/c��Ň=���<�>�v�=�[�=1�>a��}ҼPʁ:xg=� �=j>�����<0�-=r1>��1<��n;� �=��G=5y���E��\�D��<���=�M��5H�~v8>�4>��=���=Sm�Ҳ2��s=�;��"҂�$;>��)t����A=�
��o6�Z]�u�&��1]�s�"�k�=s׸<�m-�Fbڼ��B=��Q<+<b��DŽ=�½*o��/��>=��z>��}<,��=u��=v�k� ���‾�n۽󦼒���,�=
�!>�>s\�=@в��il��;�=@�\�N@�����)ݽ��� �-=���=^��=l=-U;���<����) =��4�Y&��3;� �=�z�=�S���$-=a��=/�-��Ͱ�gf��^��=q*�%o]�x>�p�=|>��~� }=�D!<�Ix�l$j����=���<�Q[=�]�=D����O%����>�V=��H>W�ɼ��ȽL�v=����������+4�=���=�~�>i�6>�^L�Of>r:/<��F>�h��������>�G����<۲=b=(�=�.�f�m���<>��.=�ߠ�s� ��`=4[�;Ҍ%�𦏼Hu:0m
>��\;Yx���ļj��ɓ�=�� �`��;�Y���*=�����l�X��<NUN=���= '/=G��=��,>(����8=��Q��F�<�:>",���=���<L�&��H=DX"�l�=�%�=n�=&�������<��=Lm�<Ʉ>v�v>Q��� ��o���6�su��ǻ�~�\���ɽ��D<�н=W��4爻O)���p=J�l>���=�c�;�H�;TN�m�ֽ2�;�ј�>,��=/ �=CA=��= 
=M������&=����*U���<���ϻ�s�=�y�<�E�;h%�=�M��ZA>q��=jU�o���oM�=��������`��<g&>(�=M���"<'V�=�Д=��=�<�=�:�<β�iP�=/)�=h��|<����u[>Uț=xB'=��]=x>L,>�,�=Y�1=�ވ�3,��d��=��<� ջrɯ=�Zۼ������I=��g=ć�=y�=5&�=t��=���=zd�<���J�˽L�>]$`=i��=���<�h����.�=������P�Ɔ�=�<���=)_>},��L+�=��Ἒ}�=���[b�;��׼�ds�"����=�n��&�=��:=58�=1s���#>�v��~���q��=ǒ�<x����^=��=�w>R�޽g�X��2�;o.�7��˕>%Te=1*:�Q���\�Y=e�=jH%�S�i=�Ҩ�ۗս������XG=�D�qV;=�p��E9ڽ��}�?<���=�V�=L�=���=�A���򇽈*��Ş���޼=�LE�/�����i�7���/=����|=�գ< ����<�ؼ(���v�=�?>@���V�-�<���<�8�=�Q �o(���)>�H�=�������=L
�<��=Ϫ�����=7
s������<#K� ?�=Hc�~�>��g�`�=�hV>�y]��x7>#����j��.>W��>�[�����<��<H��=K�q>�C�!M
�*�
>D;\��I����<}�>@�->�<��9���A�=��7=A��Ȟֽ(�=V��ՙ,<�M$>G�o����=��]<��|=79�=�����܋��"9=rM=� �=܀��vNe>���Γ$��]��h1> �U��y\>���>e���[�̽&Y�܀��&�>aP�= d/=wv�=��>R�̽\Z5����=\�T>Y��=����#>S� �܋\>?*���,��>Q�q��,= �h=Pջo��-�@=M��=Wݩ9�n0�"¡=�k>�vs�s)����=v��>��:�;F>>�A>g#>�>.鱽��X�[і�����' ��m��&.`=C�ҽ���;�
м�%��l�ὐh��kI=H?=6�$��f=r�4�G���(=����5���ﵽ�H���=��>�!�<�ۮ�ahq=Yvҽ��< �Q�D�<ʊ<��2k��s�=& L�r�;���=d�=s�R<���=M�1>��꽻�D��� H>g_�t�;��>4�=�e>H_�<��:=����=�1S�Ӻ5���c���z>NU7>�7/>+� >�P���>�����%=q��<f�2����.��<oR��*Oݺϵ�m���P�>=��=GN�<h߂������~�Z�C�61��C9=��/�1C��z�=�T�;_{�Ц��
�-�S.0�\S4�x5����H>l���*���mP>��=o�;!�=��_=ޛ�<��ӽ�W>܂ѽ���s�:���R՝�.�����ҽЩ=�����P*� ��==�3>��l>@=�d>)˨�D�=-Յ��� =�>"�C�r��Z�=��q=P/�<3=���x><��=��=/�=�F_>"�<@�=�L=4�>T�̽��='��=~PA= Y���q�=V��<��L<Ƿ�=lD:=�Tn>���=��>� ����S����=GGZ=^o�=��=.�=�� ���ƺ)'�2`=>�ѽ'S'>�>ٽ��4> #C�����f_@��u�<�]> Gc�� $;q �=��F�53m�-�/<, �<����h6>4y���ys=�v�={͝=JU>3T���b=dQ�=��<���=kC��;.8���3=جN�H�=���|��=��A�4ރ��Ho<��i>zϺ�;���=�r=4�<\��r�\���=ݾ�=��=�l�?
�<�ͯ��_=Tf�=� F���=3�w�?Ρ���>�bd>��u<E�=T�����DŽC<���/ =�s�=�ǩ�7��� �����=EQg=��K�C��ie=���z!>���>�����M+���=��<�2Q��F>~{�=6����֔�cOm=��S�v��=:ỵm �k�<�5��&�<��=�Q,�N
49>�֑̽�=4m�����E g����=� �=���=�ݰ<i�R>�Ľ=�g���q� 9%���;{�=��>l�D=���=ҝ��'��!��QɈ�*��k���h*�ɏ���s���1;���=��;�=է��D!���M,�ͅQ���a>�][=%�<K�>S^�<t��=Ϥ+����ɹ?<��->QE>��e��1F��+�<��>��ѽ����/�;I�-� =ȩ,>;[�������N�=`�=��/R����eP�=����k�>#sI�󰼸4��R=�z��R���f ���=�W�<5����̼][������m�ý8$�=�#��㾩�����a/>���<���Q�����<X
>���=��=�% <�v�}!�=�N�=8��;�q�d���t�; s��O� =5z½�gƻ᧼������p�M�>��>�g+��ѯ�|ʞ=1?@�z5_��>>�� > � =u>��[=m
�=���:���"��=���� 4�</�I>)�=��v=�ڴ=D��Z =�>�=�a>l9�=0��=�*�=کs>(E���<-��='=q�[=���>�2M>��=L�=2���N��=o�>;���{<n½g�5>�}��bo=����µ�fz3>,�=H���� �����=\�������u�=��]>}��<=�;=�1�>���<os����b=;�n=E#< :����C=�=� ��St>��=޸�����=4�E��*1>���=����R��ƽ$���6O��P`�=�/�6L>�1M������<2�D=���u
� �;<��<�.�=`d*��½y�<\���6@�+(���w�7��e���l��J3>B�x�ģ����^�Km�=&��=��,>}K�����=�
�=�!=T�m�
�<��<uҬ=��
���D�o��W��>�C>D@�=�<&>�=5�Q�4>ռ�a�4��=L�>����8n={ѣ=���=���=���=� �=p+>4�>=譛���ż�u��';׭<�6>==�'E;���<���=�c�=�Yh�;> ��C�<7>�=n�0> �2��$�=�eF>oш=��>�`<�.���"$���'>M�l=��b����<�]>��P=(��=�{��s���x���ɶ���/=P��<4� >���=v�<>��;G��=;�9=�)л��'�-@���+>�� �t[&�d�L>����ԩ�����h��i��9�=q����)?�sN(>�ĵ���=t�g��B�����֔�=@����=�*�x�<Ii�޻<�Z�ٽ+��=^:���b�=-׫=��>奜�?b�=��q=��=?,ŽL�:>'�'>5�_=�`�=��0����=�GK=�S#>����i���B�l�>������=3<�j,+=�c�<i����V��n�<�P�>�=���ҋ=e=`���9�����<�w1�I���������a<�F==ϔ��N��=����۝<u��=-�*<J*�;
�����=��J����ũ/�9S-=��=�нG>�z�����=6�����m= �m=��A<B=K��<��b�L]���ǽ$��,�C���S���� =�M<Y�I>ٓ�(�=���k����\<ѧ�=������{>��L>{\�=��H=�OȽ��=DiW=�)!���������d��=.��Q�ڴ��ы:��=�I��� ���r�Y`�<��>��=I=qqA=�����ph=�>}�J>G.=����$w2=�*�=L�B��ޮ=�%�����s�1���
>M�H=�;<���=��K� *>�T�<g���?��B� >�G����߽��w?.>��9<I��_Z�0M<$�j�N�>��z>�u�=��ʽ��=�\�=�ˇ=�t��wB�<��������=�0��`>>z@=�4"�:P����׼��#���=�r׼��=�5 = �N>�.�=L�½{��$�����*���3k�=c�=� =r������H>nV<w�������"���������<}F���T��i��Qߡ�x��=�e�� �=GUý�PἋ>=\��<�;>���������?����=����iA^>��
�r�/���U����=�ս���=��Z>u0 � n �\�O��C0�=S?>��=��p=�`һ[�P����:Q(�d�Ƚ2nz=^=П=�!�<��N=<���<n�,��fG�I�9��c�<�t�f����>6�=9U��#@�� j=6=�����=Sm�=S��`�<Dɵ�嘭=`]
>�o>�h��ߘ7=��ս�l<<塓<۵�=-��<4�=>������=���= h2��x�=[��=>d��
@�=,�Ƽ8�'{ ����=��C=G��=���؛=��&��">���]��=8=�XD�=�I޼ ���j��.c>������l4�@��nu���Q<�?-��ɬ��H��<L�Ի�½3�>a���/�꼁��Vt��w(x�Y+g��K�= 2>�Q=��ĺ<�=qĐ��G�Tg�=vm��X���|2�����=Q�ͻ��_���=*N =U<c��< �=�Ȫ���>`ю<4��!`;Je��^ >���=򨻽W0V����=�D1>��e�\h>���;�A�=��=T>~�N�-���=��o�->a���(4����+=��=�]����&����s0��j�
U�<�&��Y���P=.M�=jk��B�B�1B�Y};=e�>�˳;=f�=���<�X��Λ>�R?>&a>��뽳�;�4��>��2�Zِ=rҽ&냽�a�Rj�V�ý�R>��½�} >��n<]��<�tn;���=MBڽHX�<�=���:����=�>���<d�8>�|�=;���`�:���=y�ӻ�d5�E�������p$>�FѼ��j<�\4�!
�sw���R���&=��g��Խ��i��!�֏�=��#�0�= ���� ѻy�=�9O>�{C��]Ļ*�=MlF���o�&#>cs���v�>�k@>�ˈ��"��^��=���p^�u���G;`>8����3=�t^=�X�=�j�l���mkh>�x���v�.�B=�2> o3>R�ֽ�>u솽krҽ�e= ��;X�v<�u�%�m���L>ԅn>��>�_A��$½�W-��.d>��X� �=R =6T���z=���=@2>s�j=M�<i*f=P��=�.�� �E� �����=9>'#]�O�=�l���
>���<�� >���=ʌ���y>*g�7��;��x=�׽PR�=8u�<���=�lK�j^&�X�q�tTr��f�=!���j�����=�RU�z?�=��<�O߽j�>�㽼�]�<#qѽ�+<�"%�����?�/��7[<�9�;o��om�=�,����>f>��i�u�;1w>��>�1�;����q>a+>�Q��]ټ�Ì�?�3��о=)�۽�Π=�=I ��Z�<��KZ��ML>��;��qf=g�O�=\
O��G=�E�<���<��@�;w�&��=�43>*��=
�:O l=��=��">z�ټ�� ���=��w=�!�Ic���� ���*A= ��=�,��E�;���=ҿ�=���e����L��z����ͼo;�O<=@)���+��^��=�}9=�y�= ]M=�>�<�����!>�}�>j�=� �<���m��`򊽫�>�5>�z=��$�J��=gZR>!A'�݉>������D>¾�;���<�O�=�]��@a>��x����r��׼�=n���ܼ = ���{$>����^6>}�� �����;���;P����,�� ͌<"�O�J��=�#�%�='�P�Y�<��=��1>�l�*�>̲C=r���<wf:>g'�<�ܿ=��d>�G[�,���i�e= �=8��<D�o=7��<�bf>��<T��<LA~���=K,ӽh�>��׽T��=`�x���&��k���0�=��T=���;%ᔽ�����=��:D�=��ٽ����'Q��ʽ����?��=��`4˽>0���_=-1����t�$ڋ���=�}g=���E$��\�Y=�,��"3���S����=��=3��LE�=ԛ��+��=�/�=y��=dw'�����ׂ<���������!��98="�����y�)�ý>/�=y�1>�'f=���"a��=j<. 7>��>"�2=����9��u�
��U���G���+;$0U<�M���?<>
<��<=���:hXu=]$>t's=�󏽮n����;�R�=̌S�e ��:����l�=��`�<'��=����_����~�a���xN=t��=~��{Q���9�}��d� <���>a
�=���>����r�=��Ul�=���= ��<d�4��f>��>���&I��V<��=�,�;4�5>�'��]K>�b �-���SN��:�C�7><F�=A���p�#>��=���ؽb��F�ݻ����.�=J��=�*�<��X>8y<p�g�ϳ�<�
x<j"�=���=��*>(��Ͻ���ݗ�Pbz�q'��%:=��1���6�\Y����&>�8 =[7��8��=o�Ļ5r����=�?�#:�=���<��>���<z��=�>�\���='��=e��=���=��=p,���H7%=�'=l�=���q�>��F�@� ��Aż�*�礵=&��=���<a�A��1=,�>Z�Žj޷�`��=�6�>_�S;=��> %>=f=6�=�p�:C�=WK=���>n��=��N��0>�����oA<�1<��P�/�+>O�)���=<��{;t<�><U�=m C���7�;�y�*>�!�=/�P��N>l����c�=Ƅ=h������V�������Y ��=�;���=���<��=-�=����2=�:=�� ��f��U|=:��;)2\���
����=�u�w����N�;�e#>�!8�%f���#�=�@�<͂ =�H=�3��%�=�`*��I�������=�_s=+��=S���W�f9�=� �=H ü�xl��>5��<u��\�v��ߊ��^��jy��<Hn���ʽ^O��&=<j+�=g�Ὀ���ay���;�=�!��c焼wM-����X觽E�=�3���)�=�� >�<O���=O�����=7�ҽA.�;�J8���W�1��=eؽ����g�=���Qٽ�*-�v`��=��=���=�*�=_�A�):�=�T��w�y�=��A�����[�(W��▥= *��E�𼋸���~׽�>v;�/={���)<�����#=��&� =�����=x�Z]�=�8 ��t �Q�< �=�����߽��ҽ6���aɼưq��m���oZ�7�<��W=��&>�p�<r�[=N�������[���^=ݧp=o��9܅���>?��=M�=<6T��h> ���FK=-�<����Z�ؼ��>D>vR�=�Y�<�G=K��<G����F=�Qb=�ɼ����'�=�V�=Or*����=Y�����=�ȍ=�=��M����=Re��!?��*k�<���;�B�<�+�<92�=_���d#d>�Aݼ^����?Ͻ���;I����={r�=�SƼ��;��=��t>��R�gUڽ�۷;�ͣ=�DZ=��=�T�CJ�=�4�=nX�<��ۼ��B����=c�'�������ýV�ż4Iս=i���<o� ��� �=��+��6>�$��xȑ=�J��K@2���ʻΔ�=iټ۰�=5>��=�m��-=\p���l���W�<��;�V�ڼ��g������ (>3?�=��#��������)Q+>�>�=s�=�䧽­�����Ig=)��=H{�=�]&>��M�7#0�����kI���>;���Ž�k��r��=`�<��4�����+I=���=�)�=H��=㨅=�� ��݋=���;Q >�X=��>+v��)⎽���{�C=`U�=TAս>���}�=���=a�?�W�=����"f��ݰ����=���<"�S=��/;`�P��7��}��������V=^u�=A�-����<������=7��<BԂ����=���:�G��d�/��������FӽK �<0ӽM��P6>�>��&�ط���͟��5�]�>< �
�T�[�rg"��>�+��9� ���>%�:�� e�u{�=�_��D>T� �d�r=��y>#A=�j�<�����Tƽ�63�]-=���=��;%�=>6Do��G�<��0��½�8��i�S��f�<���=��v>Vソ�`��銽�Խ�k��������X��G��k�`�=���=���<!�=���T=�b��f�^=�7��o��=�����&��D>������:����=����`�*��P���=D�=�b��X��<�'����=&*)<��;�ч�æ̽�B�:]�=lȽ='}�=�i�<@�<���]=V�3�_���Ry><w�:@�Žq�z�CF.>���i���D2j��Ϋ<VA��g�= SQ<�\����=)o��c>��9�E�����=G۪=�6��O׽��,����=��޼����l��=h�=����aU<��:�ϻ��>�NR�ڒ^>-��=��ڽG�޽!=<�q�<j�]����=������=c3V=��=3��<�"�=9��;+xż��,��;�����=B��=���=�U(>K�W�4����\&�xU��� �=F��=;���0���<�ߋ<k�0��会��>�Sa�"��=S��<�ݽ�D>`6~�\��h� ���Q��k�5�@=�W�= I ����=�a��1���Pս��9��c>B�;>Q�;�|�='��=�����ݿu��z>Q��=ݮ�<�kz�ܴ�=(�>R�8ý����'�;i1��^��ɕw��F�=t ����2�r
w����� ='(������ݛؽ�[[� /�=� z=�w�=��ݻ1N>�8�/_='{�=�2c==�=���;v�`�(}D�e�ҽ"���$'�=���=�Gd�)�
=�H�R�罚�L�k���2��aP�I<>��ҽ�=��-�<��������M�Z�R��=9�2>)�)=ٻ<y;_<�ۯ�� �>Р��Mx*=��=Ӄ=����&|�=�ݩ=� @>X$>m�5�w�'�N�=�>m�4>\���Ǵ��7��e�<f>�T�=��R=5!>�Y8>*�>E �=lu1>���=�g�=�)�!��:�����2=�=ԋ�=���=��=F�ӽ�, >0�<�sp=y ��ZП�JH�<���=�3�< ��<u��<�P�=v1�#j��(2F�w�=�~���x�6>o=�=[a_=��O�n�>Ԅ�=�&2=ݑY�ѱT��D=q�>�Ǡ<�>��y=�3O=R���`��r>�6�;�R7�'�-�h��;���no>��V������=�[��8ώ���w�� ���[��U�=:7����Ͻ��=Ǔ�= �=�����彳6�����6x� �~<�7�=ճ�=���>s��<S�=q!ν�; �E�='J=��Y>���klR��H���([<j� O6��c���b����H�?�<��s��f�~��=a�����`��.>셊��Ղ=x�� ig��z׽[��=�u =1��=e��<�9(<Քn�B#�G H��G���w=*缽��>��(�]� ��UI�+4�S����4�xo^>���v���搽��n>�r~� �����=˶�=s���aRt�� l �L��;N���֫���7=§�=VΊ� ->���="��=M�"���=1�=Slȼ���;��=�ar;�m=`�9=�ҳ=~A�<�@�<S�����>z8�n��nn�=�P���,�=:�'� ��=r��A2!=��4��¥�!�=y���R!=�F�<n� >��t8(#�;��>��k�=���=��
>��=�<>�i@�t�>��<���=�7�=ΐ<<G��=2ǽ��)�&��=�q�<�K�=����DA >�����Ƚ!+=_6�=$��nq�=�g��޹�������Z=��=5������=�z�)\���Q�=x&>Ҽgի��.ý$�L�nc���J����Ⰷ=3齘�x=γ7�*h��##>)�>�7���p�=l[+>�dh>�=޽�[=�ci�jg�=5 ��+ߪ����<C(*��%������<AV>��7�N>�] ����`�������[=m�H�
$�=�=-�����=N�������Y����a��Dǽ�>��1<7���W����A�\��<� ���>.�\=U�F�c+;�7e'�/�?�J��=l�<��m>a�h<�A������:���������i�)<�\����L� !>>'6�<d}�=�[����_���i��<L����*M<���=�4�=c�=�]��W$������<�y�v�����nE�<q>�p>�4�3Y�=̃3>��콴�=h���hB<�?�`�o>�h*<iO
=�-ֽV=�=�;�<����Kս�Z��:�����<nI >�К=VN��QMD��E��Z=���=/��=w�>� �Es۽"� ��i!�o�w>[�����9s���sU><=�w<E%
>�k�=�$=��:;<h=�I=��>>gaP������W�=[�2<��K>�}=1�=��G��O�=��<=� $��� ��;����WP=��G_>�V>��>d?�<Aƶ=]7>.�S=� ���)��
����y�;V��ׇ���I����=�J(=5Ѽe)�=��==���= l��v�Ľœ�YƓ=�T!�k4F�ʲ�=D��<�ܒ<)����>͊�=�ց>{s���fŽ�妽8�D���1>�a��/;$�~c0� S˼*��m��=Ar�`�⽅m>��=(Mڽ��ʽ�d潭�6>���=�-��pߺ<1 �5�P��X$��?[>��=*œ��F�;_K�� �]>��������˽l5v���<S�=M�(�b���27����=�T��ی����&<�[w=��m>�@��l�<�S��$>���=D�0>9�6�1Y<���G =�T�<���=���B �D�м*ν�=�����=V�M=��=B!���N<ݎI>sܽ��;���<�.�=!�>@�+s������S=�XF>
����B�QL>�m��<����W?��t �}>#�=m�+�/�>�[Q>s�4=����<(�= �J��F��Ma ���=%tv:@I2�n�'>�e6>e �=
���>�<�� =��+��lI;��>4��<@��=zm�=�=�Gϻ\��=AQ�;T? >dq5<�<�<�f>���<4d��s�(=�J����{%���+��
��;� >r�=bo���U��-m��l=g�]�M�>��;>��]<B�w=�tG;���=A��=�|<Z�w<�+ ��t9>~��K�(�`�w=�Ӽi�>���K��2=߃o=B;0>�$ټ|���P�=�"��~�������4����� �N�Z �<o�
����
>�
>�N-�Ҥ�����=�-O=ҫ��
����[���\)=��}=�J8>.>��(=ٟu<x�<dO��r��=[h�<�W<��u�U3=�ԕ=3�4������n���/㽱���ӟ�=��=e?�=��b�R������t=v<�=E�ؽ�CT����='c�w��=��D>��<?(�K2ۼ�d�=�q6>W.ڽ���<E\�={Fڽo�P=
K�=;��S�Ƽ�gF���=�����<�
5Y�:��������=�X >3�S��X�=���<FF�=IJ�=������:��T>T��=K��=� �xP⽆��>W�<|7���”���5>P_&�����s��=�w =�a=q�C>�O�=�v�<vb^>2��=N�����I���,�>�>��i�@K>)A�������>)����v� 4�P�,>d���f�m=��4>�)�=ڬ>_9�1G����=��2��s�<��ӽܙ��q^=���=9�f�(�=�A�=5݀�n茽x��؄׽���<X��=���=$����$;�>��" �=��5<�J ����=�ɽ#�>�{J�jo��� Ͻ�U�<�q��14�=��>���=��\=���=^���:>�C�����=}`1��$�U�h�:F=��u6M�����1�˽����v`�<�]�<���=��V=�^���>VYZ=P���?Gp����;�5�� ���)�7�>�Rg=/�[���(>��>����'f�٫V=">�WM�$Mv=����t�=vq���� ����(ҟ<�=x���,tG=�R�����+��=��<}�<�%:��P�<�8�ۼ� ��=/>{Tb�m����r>K���]��������>�<h����%��:&�=���"���i�=�M���49=%�U>��>�a��T[a��� ���X=����hM=�M����<�>7>pW\=ϻ�=~��ޮ���<�Aս�b�=m�+��ོk�n=��ٻ8�=�;Ƚs�V=���<a09>��8� k��ط��)ֽ�j����˽T���B�<d9�=b�Q=\��;�L����;�C��G�=��V=�$�<?$��D�=c�T<M�>�ݕ<���<xN��# >� �̖�=�Ǚ��>��W�5L=����=���;k-�<�d�<���P7����>���=�轮������&���B��<�('��>1<ٌν
v��H<�qq<W��=����h����v��;7�=k9<B�콎��� �M>�h�����=Т�:.~���_�=�����~��%�=�B_�l(ʼ�A��@�=��O=��(=�=��|>����n�=���-f��d:����=� >��8=�� ��oV�b���>7�=�q����;�>�=&��;Ʒ+�aC(��ج=:y>G <�UN��c�=L��M����@>�U>n����׉�غ'=�᲻ ��_e�a�1�}��=b-�=����p���)ʹ��=*.��v����-=�g��� �=3ڼ暽Yk=P;���½V�;>\�=����<� � L��Z6�����\z� �i;13<訆�.�9 �=����ւ>=Q =
b>�-9=��=�(�.n>��9�1�3�&���=#f/>�_��L�O<��=!��= 락s���#V=��]; A�=E��=�[=����7����Ž�� >��!�쬼�!>�>�=Lԧ=����$y�r�{=X7�=K�=�,#>��>t.p<�Y�\���>m��H3�=�+^�2�뽡瀽��P>:��=�3��I=851>k-�$+�����=�`=m�x=�L���\<�@�=�=��7�!�=�!���\�=E��<��>���l=��> i��CC����ټyF�X����D)��C,�;������=��ս�l>\��=���=)'=7`=�z�<�>�}�=T��VM��
D��� Ǽ}�H���;S�7��є=s,�=Fh5>�`j�$Y�DM����=��7>ЈZ��F+��}Q���<��=Q ǽ��X��j���C��W�=Y������'>� >�(�=���=��=�bB=-�Ľ���=?i ;���^5�<�5��:5�0���T@>�lS=���=�2{>��i�Uѽ�Zֽ%xi�g<���D��N ���!�
�ػ]3���>ഩ=X�+����=�4=]�=��o=h��b�E=CQ<V^���q���`�=y��=�3�B��=yI��Yp���B=c�=duٽx ,< 舼.؄=��,�f.�F�ؽ}��;3^�KP>��
==�\=^=�>�=`f�x���ɒ��vŽ�Q>Kb�=BA~<r��<�?�У � i�� ���1�<u�!>a͋�<8>����FR=񩬽���=cB�����=���=��=���|�=��N>�m�=omJ��F>�������=��=�t�=����yE<��u>�, >���^�N=�=�;�=�*�=D�'=BE����\=� >$G1>(6�d��=Zt]<6�U�lQ,=��I=o�?>�6��X�:��>>��>h? =�j���.
>�ѽC�����<|[<�D=> ���6=��=GY;��U>�
����=���7� ��!���W�=��Z>�B�=��p����Xf=�,8=��>e�K=�|����N<�f�=�伿�j�> �=�ὈZ˽Z�d>K���%�׽��>9x<��= w=$�<o � >
X�=�U潛'����1��V�5�r�v.��9B]=E>�=�N=���3=o�=ښ���!�A3>���: I���Q�R~>wR.<�{�<`YV="Q�<\X&>�A���ý�ʽ�/>H��A��<8JV;�'��Լ�y�����=��=i�<������:���)�ڼN���x�<�D὎����(R=��]��[�v��<(�����=<��U���}>�5F<ط�=]�w�O�G�T:#�,�H<F#!>�R�=ʶ�=]r��_c>�">8�ν9�~���>i��=�p�0L ����=�.$=\8Ҽ%9H�cL���w��|�<8QA��\�m�W��0��c���1<[���-\p=g�S<��==Ͱ9=&V��Dx=�e*�>�`����"��1;>��ٽb��=d��=��=�g>҂���-�=ݿa���O>�� � 7c=DG���0=\��?Ľ[��i{=
�>�v��e=עF=�򭽸‚<� >�C�=��������j��<`ew���w<C�Y>\��=bj=��=�
���={ü2�+�u�=md�w4�C�>z��<�)=���<���= Ѽx>� ����>������[f�=^�>W6>�W=t�)���<�]ƽg[G�'q%�ZF��8�T���O<�6��K=��u=��U�e*�<��H��.=Up��h��=�p��VL���S�5fɼu�n�$]j>A|�=9��=y���S>�
> �%�YVY�:�o>U]
�U�1>�H¼����%os=h��M8= ����ك�^풽�c軓v,�B��!�0=���=���Aғ��'2�6��|�/>�w�=�}:�7���m��=&�Ny߽��+>HP�;�⩽<<�)����=����Ԙ�<$�>������<�N}�0�=bι=p@��5�=8�z���w<p+�����=�^h<��%�K7����$=��(:�׊�N�r<{Y���J���9,��� �������8�=�:��7���Q>� �=�.��n_���9=Q^>���R�=�~�<���=�3�=gc_��"e=�p��Ƣ=�m�=�>;e��@�x�"dؽ�]�<� ż�[t�����e�������H�<+�R�l; ��=g�<�J
��7I�����M >r�R�A�a���'�f��=�
�D @=s~�;�K�=���=M$<���=n7��?J�kX�=�\g����FF�=��2�<E#<�l�=Gs>�/�>��r���o<��=�H�%xA��Z�>�0=x�>�����>�=ع4=�ν_6�=���:���< �>��=ƃ$>X޼�{w9�4���>K��=�㔼Kt%>�g�<m�=�$�����>iCݽ�^���T�1��c�\= �'�F�z=X��f�v>bo��3��:����=T�@>}Yl<� �����Տ���6S=.Bڽ��bĽϞc��kA=R��;V����->A~m�O�>� ̽T'L>�[-����=����T��=�u�;ڧ�=!�����=�A^����>��^=�ǟ:���9B������.�L��d6>�D<�qG�=m��=-�=�{���8�{コ���.�*���׽���d�m��9<򧐻B]��<m��Og�;�A7>�G��k�1�2=1���m�C�⽣H7>�z�=��`<��D�nط��N�=kWK=^�p�BgS�;��=@L����=��I��I`�� }=��w=۫�=�]���r�= 'i<�5��C����%=zG�=�z���f�<�&�<��=(�<���=��=��׽�!�= ��=� /�@��< >��<Г��KU>�L�=hJ�ޢ���JD>Z��=��P=f���� �aC���Ww=�%��u��=
Q�=�cK=|����Y=�'�!��r������'=��K�:�����<1v�=����&O=����Ɏn="8>V�Խ�.<��6>�>��=b���^�+=����WU���싽Ǎ�<��= ����S��B��=X���Ke<���=LǪ�k�L=}F�=ţ��*�=�6��3k�=� �:$I_���q�������=�k�== ��p�޼ӽ�=1�=�V�y9=�;>�[�=J|��׬<I.o�󄧽�
1��4 �j|�=��&=���<w�s=)��1&u=�s��.�=��;<���������5'��h�=��%>ڑ�=���=�������u��p�~;�׆�=Y<`=BL=#K�='��<�1ͽ�´V�L<W��=�`6>�=��=�J(��$>��<OR�=�Ӆ��MI>Q�='>4=�>f��=��y����=�0g�ңƼ�K�څ ��`ǽ@p�=�`�>2 ^=������>���=8� ��5�ζJ�P3v��m�b��=���cx=�|�z�=���l�A>}l��
��!|��/�>� �=��ɽ�>=v>�s�=��<Wa<��<�� >Q�X���,��>�=��>=�s�$ї�!�N�ߊ;��3�:<�=J�2>-#��$
H��E�LՐ<���f]��g�=3�@��6"<����,��ϡ=ݏ�:_���_ ļ�J_<�!��Y��>��Ž��/<����o�x���<��U=0߽���=�n�=X"���!���J=�;>3��=u�u�4��=�F�=��>�mj>1B�<�خ=�O<�^�<A�<�%�����=� ;/W=�� � _�[z>GgA�x٧=wa�.w>��B>$ѽ����K
�=�o>F>�N=+�=^zP���x>�u����=&HI��9��.=[��<���=X;5�;
<6����̜�>��<#��� �/F��*=��-=� �7�i�^=�z�8�)��R=Q��'�ս}@�b�<�����'=��< R>6��=�c���\������T��2������u��h3=�P�Y�p��;C��}�=Gɀ�#�<,G�=�Y=!�޽�t >�$˼�`
>grؽښf��-Ӽ}μ*0>�I<<>j>:�(��Y׼�=� ���<`���<�=6]V��<��"�/�����4ꊽ�|�<`�����=D�Y=W�I> <�=���=\���VQ<���=.�=s��;֣>��ҽ�#:�X��p]�<�K��Da�<m �,��C> >�`�;Y�ؽF>�=L� �t�s��<K�k�=�&�uQ�=q�
��T>�V�=��x<��Ͻ�6<Z�8�!U�<����8��[���b���V�8!��ǰ�=0y��R >� >6X1>G�<\?=��<Y���$�@>�^�<�5ͽT$�;�<��Rh=�<�=zi��J�=��="��=!�U� �>�=�&!�}���� >i�A��#���3����݅>+3�;_u���<�#��z��=SN���Gz��Aw=��1�u��=��)<JӠ=�i��f�!>iLj>��S=��F=�'���v�=Ǿ/=��I:��=PS/�| $=�p<��z=m��=f���GTF>���=_�e>�Y3�:�׽�wV�A�8=m�[�&�=P��=�==vޫ=`��=��Z����=d(޼�%9��+��v]<�ǽv̽����G=��>Ξ!�S M�Y���kl�<$�*�j�w�>��!��e+���>e��=���*pq<3񺼍������x j��]+>7�q=�ʼ^Խ��h>8tU=!M�yZ
>�9>ReU>u�+>2������=q\/�4,�<ćν>��<砽6i���Q!��<.+e>��>�>���<��
��'W=B�Ȼ�|�<�K����<���=����D.�H�J�ۀ��s�����;��>|�ýW��=���h�8>2l��������<R;��ٽiYI>q�I<��,<Ӑ=MO��0� =������EN&>�O >B�H��\c����cٽ v�=$�='G�;��=E��=1�=m�N<���= ��Ф�=�Fh�B��=�����%ν1����r��N<>�H��7�u��)�7׽N�>����=<z >4��:1DA��D�<Xݫ=�|=A��9�j�=>9ʮ�2~��k8�A����;���� ��5=v�}<�X>R1=�����<!=s�t=�O�=�a�<�N�S�>��-=����;��=C�=����3UU=��B>S��N�=��ĥ�=��=(�<��>d]M�aQ�>^��=�J�=�e�>9��=ZT=� B��٩=0��=��5��*�����=;�<��;�=�;@��E���"�$���<^��=9誼�)� �5=�j!�؄z�b�׼��Ҽ? �=� >�?�l������=k�>�4=�#¼=���!�=/{�=�N��&�">j�:>*�I=ό>��Ƽ˂=�m�<�܇�˼
> gм�m�=��<�l׽�%=�>�e$>GD�=aܒ���v�-�4=^Vd��b����Ľ���<?�O=5>��+>za=">�<
�=��<�0$�Ҩ ���[=�F1<��>TS�S*û��j���ht���R=vIR�}S��'��\�a=~]�=BG�<h����+>�r ����=�0
�J���.>�DZ=N�_>��/��<Ӽ��<Ok+�pg�=n*������^�<��t�V<�νTl=�즽W��<�?�L��뽰���<6���X��\R�=��= �a�-�=�=� >���!�7����=�=6) ;�u>���<���=6�=��<�߽�q���창z�"={z����L>����ET�<1d�<&��=�� ��T��3���=��
�`���1�#���4�=X8|=`0�=����T���n��y �$�<�b��.���Y�=�a��{.*�$��:����nY��&h=̓�=����p8�<�v��&T�=o��; /����?=W�+��֦�"��<���=�8R=/7�=���=�&�+�_��d%�Y4��E�����>�/��P�8� �is3��U��n��(�\=���=����k�,>QN�=��n8\
>��<(:W=�v�=�����c������7��*>��a��
K=�m����=+��:�����;.�<���5=B��=C=��x�<����d{� �>�?�=��E;P��<y�q=fb���z<�&=�@0<}&�=�AV���D� ���S�;�u$=�;�<-����`g=5Ǽ��>"= T >}~*��o+=��e=�'<�LT�|�-<z�>��!=ֲN�~��=�1�)��=�J|���ӽ�R��˻+�ʽ��� ;����=���ӽ��;�I<+�L>�F%<�0���
��CS��E���J޽ �=����G?�5 '�cY�=��[�A٪=��鼄��<W=�u��5r=��> b6��3Y;�n��� <����,ҽ�玽$�;,��<�!;��3>B᜼h�!<1j�=��`��}��YL��k)���)�E��=�#�YMz;/^���L�bR���h=���<�����B!�y�� ��=���Ē������;��E�iE�=*+C>�<;d���Ӓ=7���&c��`>ծ�� �2>��<���=��=�¼���=�x���*�����T ���� �P��<~,&�.���2.������m�J;�K�|�@�[t�;4��W�;����}�=\��=����T��=E��=��=���=Bbv=�9v<Le���=q�8��-�=��I<-���!K>��h���t=Iò�Ȍ=�̸��"<��`�=v�l=.�g�̳=J��;0�;� Y>��>�q�=��O��2���M���r��m�<zH=}S;�;����u=V�<�C =~M���a��H�� S�=�c��$x��!6^�u��/R��e�}=T��MJq��8�=\o��� ���E�ܗ<p[�=���=�(�<@�M=jK��{�r�m����o=��=^�Ƚ^�*��/����ܽ]]= �>��H�<����
I)>�c�=������軍�:����2��� [=V�<��@���S����=:��=���=� <�=7��X-�=되����bI�</��;]��/�=�iϼ}Hl=�n&���˽��=O�ĽЫ��„%��HI>�M�=��0;._>:����<��j=��>��_������I�Id�;���6�エ8$=ؓ:���;;�=f��"v=M} �S�i��>߬s=j �<��Q�ØV>��=� ���5[=��=5q=�f>�u�ѽ|�O=���� >��� V�=Y�V=4��;*|g=J>��m=���r'�=��E�e���C����eZ�� ������=��s�==о�=��m;P\5��z�=�|����^=Y/�=�Pd=q�=�K <�U>�����<�O��Ȣ�=�uc�#�μGC0�����:L�<I`">�`B���]>��4>@�ʽ7Tؼ>+]� ��/�̼��޽ݢQ=-��=�@�=���=’D=4���� =�����H�<�ϝ= �>��]=�^`��T�<�ԽU�=2yҽ-�&<���<��>����(�0>J��41����潿����è=C�$=ԮG��a�=�w>n��=� ս7&<1��=�\�=:� >nI`>�!���<1v>3+=�y�=@ᘽ��= 2>}=>�d��H�=v_�=�m��>���l��ULl���b�Ȼ������:�=���=��=��׽O��=�LJ�0=6=]ֽ�5<=xe��FG=��ϻ��འ��;|�Z���r�ء����ܻ�2;�d�<Lk9�٦.>�К�Ȱ��/�=�6>'�}=��J����=?�k�:�E=f��=��#=qнά= V���(�= �~�M������=��(��|]=��|=]���Ϛ��~^>8�m��n���V=)��<�QO�F�<B�#�O��=θt=3@��N����>�K�����9�=��:���H�K�=#�;Le��鸽P:M�b= ��~��<����M����u>1]����=8�*>� >]�
�����ܧZ<��<\��=!�=��=vlh�l�>��>d3��E�պㇷ<O��9=�=�L>W����ֽ
���`.=��=�G�鮜=��"=Q��=�&������5!�&=>q�����=f>�3�=���=�߻=O����d>E��=��'�=4>��~>뛶�����:H<�6m�mxN�2���x>�q�=����� �h�]�E6,�Wx=�� >�y<C� >!!A>c>B��K����ɽ����ͱ�<Ǫ���P=���<߱���h;q� =��>�M�=!8�=W�>=?#
>=<=�-�<��O>�X��H:�<��!�=���~0>-;�X=�d�� �K>|z���=���=�VӼs�o��L�1����;�y(=��ν$,�=��l�nF��q�7�4<�O>1N�;�#��ã<�1>X>SA��p=�b�>I��=�"=㍹�j��Rː=g����4W=�_L>��r=� 齣�9�"�82�<�H!��A�=�څ=��Z���齭(�<5h��SSƽ{C
=�e�����<ױo��U�=h⽃�j������Dɼ`{)�џ ���=Nӌ=v���_=��ս��>�e�=f�&>�ؽ�s�����."=L>.�*�O<M��=�қ�T�`;�p�<���+��<{U�=�"��D�V;�'�=I�]� ���9aٽRJ���
B��-�7wڼ0�<>�Eżm���#�x�0����P�w��!�>�R=�?Ͻx“���1=���=��"�=aH<���<�&@=�H�=P
�=q�;�lj�d��<2�� �q<)I�=��S=1�>=- ��i>$�==�C�=�ߴ��4<�9��(�=ЖT=�&��+�= �E�.75����<�ȕ=�z���dN��E�=�&�F�:.��oI>F%�=�C���g�= ��=\�>��ѽ$���[�<0�=l�/<P�����=��=(m�=��ּ>=Cմ=���6+˼=½4��896��� �Jv�<��Z>�s�;��c=���*��<&CJ����=�ㄽ�7>�l�O_���s޽W�ۼ�̽"��=� ҽ�
�=�Mv�%D6=j���9�Ž�->>W����B=�o�:=e>�'�=K���������=�><A���9=�茽|}z�EҎ=���Y�����< |�^+<6�n=���]�M���޽�ZνO�B��5>@m]<x�o��v=� =A�;���*�;�DZ=\�a���6�ѴX�� {<� �<d�������1 ; �=��<v�=M��< }���4=�<�=�N�=�␽�:��l��r G< 꼥�2> #�g��=�rb<`��=%J�ÇL��Tս�E>�n>Q�'�>5=?a��">�<��1���м�FA>.�\��l�<��=7��=�|�=�L��J��}=d���=ʼnw�XSN���o=�>�}ּ��5=� ���<f��o�Ͻx=:�=n���ͥ�K��=��=��ǽ2�=QE�.�c��Z���"��{��:o�/h=�������+>a������q��=S;�i >�l���R����<V�/���F�e�>N�=5����� ��=�0��e��/���T��=}��=�oɽ�s�;8%����=bp�<�J= �J��H|�c�4>�I��K�0�u�����=��o=f��=�' >�. ����=�o3��
>J��=j]�<�xE>)ڼ��@=Ph���½�(=K���쐄=Z�g����<G��=6<Cy��3��=�5 >n&�¨ �cQ�=�Y�=�ݼ<���Gٴ=�� ��ý1j!=���:~���*��=�jH>�I��md�<.��<r<!7���Z$���1�I���2V�.�J>���;7=����>�ߝ��s��ɏ����"=Z<+��>P���U!�={�������.��=�g�N����K>ϸ�=����������<�������� И�a�>��<���<Dr>-��<M��;�j�=��Ļ���=%�ɽ�P=�r��ޖ=ر�<�����冼�8J�z��=zb =s�ԕ�=�oH=���pU@>�}+=Y>�����2=xn��G>Fy���n���W~=���<��k;q� =Tz�=��;Q�x������=�3^=S%x=��#=�� ��MA>��<���p���48?��G]>���=������=��=����g�0�‘���Ѽ�r�gv}����= 5>瞻�ᄑfY������ǽ!����w���r#>����/�<����1�= >?b�<C�m��5ڼ��q:C�{>ү9;Q֦�$=��e1�=������ϼF�= ��=��-><@�^B�� e�<�P=/ʽ�&:eJ�<����;Di���t�=T�y��lS�;BQ~=�f=���;��'�F�<P8>yJ�����`�ͼ/�<�Ǽ˄:*�b>I>����;>z��@g��;*=�,��x�=~�]�&������|\Y=���<Gd����=_��=Wk�=�9p�+�G�A�ĺc.P=���a������=[��=FQ�<����fT=eX%>���>�<Y��$߼���Y��=�L��Ux�=��>$�=�{X��)�=���=�;��ˋ�=��<�"�=+��=�9��{����޽��/� ��=G�=,��=]���Z��=Α<�:�b> H>)��2����[<l,�=u�9�x���5?���W<*�z=���=G�`���B�S��s����:T�;>��=o�>J���4� >o��<T�*�:�>�D�=�]�=02���� ����=̗�=m�����J=Cc=�(j;:Z,>#������.�7冼
>Î7=�Q=D�o���&�&�>�<>�\">���#b
�خt���K���w�v>�<�oI�X16=G���@�l�T��=M�.�C�-�l�}<% ->�hؽ�.�=����A :=0�Ƚ�RK>>`=�Hɽe��<��u��1Y>�;�>�ʽr����N�=Q���_R<:�����=洐=��>�g�>~`2>�ܒ���"�o�����<Z��=��T>����JY�=��&��J4�l�$>dpn����&���}���!�=�(����L=���>����_�1=�,,>�>O=���=���=ID>�<�>�`�=a4 =�Cw����=|xH�ا��A�� �=���:��e��<����9 >6��=Y=�;Վ�;�U�:�gV>��7a�<�^����,Y>�=r�(]���n$��7�=�ͷ��J�<��߽�״��Ǐ=�[�E%<�-�=� ��/�5<�_*���n>i�*< �W>j�j��5�7��x�=�`=�R<�l�=���=$k<Tz�>"Ø�:s/<tio��=��}�=����0p=-=�+�<!�������ڥ�&��={��ˬ=3M^��-����<�9wz�v3m�S��=M����q=�4->�~!;� �<УU=_�ҽ�5��
�����=Z��=K�->�<�w�=�� >RZ�=� �ң ��������<9�(�ƽ��I=L��=St�=\���=A��=pR@=#x=���=�k,>i�<����Z��<ʹ>��=�
��d�6��=I� �h�=]��|)��J���+���[C=+&�&1>�$��J�~�����
Խ��>YR=��
���B<*�=��A�0�5��&E����s�ټ)�<���=�N���Υ=�˕=/*���������=Ʋ���S���g>3
��2v�ղ<=���=⡼�έ�B��=1\����=�"ֽ�[=��=?Y�<]��<����?�:��*�RxU��y*��x�=v�>����j���}UX:��w�[3f��,'>)@;��W�=x�X�Է>�>�ZO��d2= 蹼���<J�������д�=�*=��L�?8>~�ڽ �n=M t=c����t=���<�Qy>��A��S�=�m=€�;�۔�(���=/=&���뉽|Wl�-5���]=�M��4N�=N'�=j+�4+>�PV���K=G�>_��=Cc���:�<�������;�&>�8��h�>�? ���)�)�&��.>�ۦ�t�=ɮ�O��vgн��j>3�J=`�|<9�)>���>�C��F@o>B =r�</L�ȕ��9�1>�P"�wa� ��>Q�>���=��'=����r���=��=�j�<�p��F轄c�����=]-�=�ؽ>���}Ӈ=idw=�W >-�k�ʟ���޽���=�����;,�w�*�ソO��&��&��=#\>�;=��������]9��C�=��=h�����: ��z�=W����˻Vi�=���G��F"�=���=���=�1=�Ἅ�`�m�ɼ�yK>�sH���D�b��=��E��˘=4�彫x˽���<3�'��� ����<���=��<c�\�A�J�̤=V�&���>r�<:q'�L���ؤ�=�V�=���=�Ն�=�_�����=�*'����� ��� r�=�����S>�g =r�>M�A����=�,½�y�=~n>)�J<Kб;j+���/�P��=,��}���Xܵ<��3>"�A>������d��h��=R�����=�����0��۔=��m��P�<�g��K/�=���=M�=P�=�!��{ɽWƼ)D�<��>��B<��2=�N<=Spo>+�伷u(>G���q�Y=er>_�[=p��T4�9�{��J�}�(��=7�=����{���>�X�=�d'�4#��,�c=|�O���=l�>���;]ن=sY�=���=lI%�����N*���"T���<�38<���=�޽UΡ=JT��̭�=9��<�+��� >u���x=M�¼�^4�����%��=�p;����1��m�ͽͿ�=�`��ˬP<
�^=�� �6-�=P�
>�N;�[����=>���� ~����=ۯ�=ȮD� �>�9�Rw����:�q @>X�-=�;��_Xýr��=ht<����`M�=�=v���=e؀�n=x��=PE��po����\0���� ��Q����=5��=ZQѻ�Q�=��2��r=!��=����!)���G+=��>>�Ѫ����<����� �>��t����!_>v��=�����ǀ�t�>��j<i[
=��E�DL���Ȏ<���P_�-y��u���� %>,v��xE�S
=0<=�~�<�����:�S/7���N>������^tn=�~�=�2�<Q�ɽ4ī�;��=pr���A���M����=T�b=h�.�W��=Ⱥż�(ټe�y�]��D½�b)��$\=p�=.\弿�0=r,��|s��Z��=��M�kG"�N&?=�$%�b*(>~�[=?ل=KP==��=�@ =�t>?����8�;���^e�=�>����ܼc�q=��3=�+F:�i�<d����A,�ź=��=�ʼy�=��ڤ�=�~����<6썽K4 >�����y>�ȧ�d�,>�����"a��1=�[=�Q>e�W�����`�k.�<2\���=�>J�?=N&<_�=Q��;�^���b=a�>|�?=�D���6��JM>.$>C��:�����5?>`Ԗ��,<�&JS�))���̽p2<{�<Z = x">��hK>&���ey���;>�%S>��8�A��<�>N3->h�=�X�;�f <�9�_��=��^��"> ���<��s�=u >��D>f���t��;z�<=c�>�M5�i�!='�ܽ�ƚ; !>����XR�;�,2=�>�=ۭ>�>�=����>������ �9=���<=B�<où����>$Z�<�Y�[ �=ږ���5W<YJ�fL�<�t=p�=Y��^͂=Ub���
>�x�<I6t�֨9�}3�>s��:`�j=9t���`<�j=�1l�3��?�۽|L�=S6�=a��<���=׻?>5�=Jw]��{B��A=[�<%��=iK��D�\=�J�=}l�����=?�}���>�ur;���Ÿ>�q��73�=J��=&6>�"����w�Xh�<���=��=kn�+0�=��~�'u��[�>ǧ$>��C<��.=R۽=�qG�򒤻�(�v)n�� h���A���f<Xx>�L>�?�=��9;?�1=�c2�I�>d��=5ǎ��a��y�A���ν��к��>5g�=̭�=�4Ƚg5��RHU>�T=�� �y2;����e��<g��= KS�*����J��A���H���-<dn��Ο=bˣ=����+��=jL>�\0���O��e!>��1��T��Y�k�Q�]�U�h>�^ ="NZ��%=��=�� >�&���G=G]��<�ؽA�5=I-j>o>ZO�=k0<>�'��4�=ǡ���]��^_��u)=�ګ=������:'>=��н�צ=�$�=!żU�b��Ɵ=��+=�g
>�
��|N�<��}=ǃ\=�t�=/6��[V�N�7���W=�H��&�Yv=Iн�f�=���=����"<��Q=�Mν ڧ=Dr�=�>ݻ���<��=F*�G`>A��dv���_��k�$=�w:<�AB�Q��<�j5�o���n=���=���9W���_��X=)�&�=F��<S3�;����BX"��_<).�<� ��%�$P�=\sf=��<=2n��� �=Y��� ��->�߯=�U[�� �Ͱ�/��=9紽KZ�=4����B��P���(+B��$r=��ؽ�� =0�轀���\�:ɞ=��<�Ii>�X����ֻ�gd>��<����*�<�0=��<<l�m=���=-�f��6��)4뼋p޼]?�=K�>#VF>������*��=���=}�=T�H�S��o���4��������i=宑���f����>��=>V�%�˽`ͽ i1���>sHq=�
��8� Ƽ�0�����=b="HU�7 �=%����<��=�S>�#>˚�=�ͅ���y� ��=�b��@���c~>
&��6.;�(�<�Z�=��=�wC=�7/�Y�������N>x�=�'����%'�=��*>6�=���F�=����~�a�U�=a=u>JW��q��3�� >9-��!��<��ǽ�4>d��=���=#Z�;�㙻Wb�=>���&�=@�2=�W9>x6e<��7��i����>�V���)V=Ef�<���=$�7���U:I��V�����"]��t4>�1 =x!Q=��� >Z��<e V>O��;j��<y_>䳽>��<n����0�=\𐽥������"�>̱��� =Tm�=��=�mb�f�G>E�;�]�d�Sɔ�0Ѩ����=eM-��E >���=�������}t�H�z�PȨ�,�z=��c>������<�p�-=��`�Q�:<0R���=U*5�'B|����=�Jż�u�=Ѐ�=�i�=�
6�1_>�G��[xi��D<�q<ћ=L6�=���;|�>Zh��m��M=I���DO�=!�<��=��\=52n��\޽�),�`�(��\�$H׽f9�>=�� ��=����t��;��ѽ�`>r�l<<�c=d���L��<�ힽ�6>]O彌u�=N絽T.S����<v7�=���=�=L a��GA>��`=���=�w���"<�Δ+>��I=��=Ԉ�=@��<a6���\�<f� >���=n�=I~=^�L>7�̽|
(>��<^�ǽD�_��k!�fG�=e����>V��8�'�,*��
�=�=>�j�*�T]>9�2>��=>�R=!@��=�<��=��d=��G=$���0=�5�=2x�o���ω���d�=�f�?�i>�J<g������=���ͱ��"vP=�Ľ�����=Du�<��=������=�} �H� =O�!=�]�=���>�a ��C�=���)o����3�:�|�H=Պt�q�=ۉ�=���=� ��L�L�c( �`I.<z��<�<�u��m�?��h�=T��= ���>=jE�=�����<
>�Le=��=5ǽ�� ���=�]�=#T��TD:�q�ɏŽ"A>'�x=�\&>�X
<<c�<#�c�QB_�v����k�=�J�=�$8=�4����;�t>�Gs��ҏ�)�+��7N���u�� >S:@>��i:o�\=��6�]߼��=��>��t<���=�޺��Xʼ���0R��=J�Q��>.�?�Q=��!=ک���<$��#���z|>f]Ƽ�U��5m �q�>Eg=��%;K�ʖ=tcu=��=^�Ⱥ��=S�V<'����̚=�d?=���;6"�=��Ž�e�=}�>��(��=�<|�������Aȴ�_�)R�b�W=�� ��<�'̼o�)=�Qy=�~�7���ǂ�<�A���g=�綠�q�=m(O=���s ҽD��<q2/=��?=@����G���A��廟��= LY�� �=n8�<�����U�Qv:���μ���5�>�=T=�'�=KJQ=�+��@����g���o��h���B�_ \>��(>��=_�3=�~���k�<tǼn��<��4��u'�N>L����u&<=�=��#=�O=�GV�=�!��'6�����sl>f� =z} �|O �M@h=��>��U>`����>}�=J_��̭=���q�3�����Y!>0��W/a���=�. >�s9;ϝ�=��=O� >��=*��l����
=u2�=��K=S��=0}A����=?�4>3��=�5�=޿>��=',m�ܛ==���=��)���/�ΗE=g�'��伽Ԑ$���h��$>�<¯>#|9�b�[���4>��V=��*��c��,�=�M=�c���z�=$(*>�޼�(��9�z���ͬ���'>��>��;�P���k�*{���VE;� ��������S=�1�hW����=�~>�ѽd���=`Ď=�W>zH�=KI�����=e"_��==^�Lwv��f�<�+a=��������=-�:<(�$� ! =#n�<�ϼ� �� >I�<@B#>��\>��8����<���:�r�=jo�lj����S=��J=@B>��8>q��=�,��lr[��ƨ;k��=ӻ�=���<K��4Q���$�vi>X���H�������4V=AuԽ���=��!>�Y�
+���N���=E)=&�)��g�=ݍ�� �<� �=r����>=���l�� �>g<�<�ϡ��v⹳ˇ=�^ϼv�ƽ���=�����Ͻh=L��������=�Z1=���<y~����>��޽n����.�<����Ѝ�����7ï< �5\���W.�Q���a?����=7�m��?r>�$�< n�=Q$;U<X=�����޽sV�=��ra��6�=c ��쿼�SY=�����d�=�����^����<���3G@>< >
m�<%5��]Ҽ��=�ş=���=�[�:�R������(������l!��Dp=�?��_��=O��= �Ƚ����H��x��g�X>��=n�=K(���ē<��e�S7�=�%/�W���G>-4��Ƚ��a6�=�Md���W>�1 ���6��n=�_��3!=��r+=Q�)��ӽ�7b�)�����6='b=>�V�Y��=e�k������n�<rz��ՌY� �9>&߉=���=���;%��'�ƽi������9>�<��U>�+�2}�;8�=So�;輽�;��,X�Q��= ��:е�F&�=���;�6�R�>h=aG>��7>Ia>��X<�}���!�=���=�K6>���jn�=�;��P�=qU�=x�>����xA=�u�u9ս�����=>o>�Φ���|�B��;K>���=iW켺��~�ҽ �=���<о�="5��Q[�� �<1�h=��<t�:����;��t���Ž\K��v �=���=B<ͺ>Ė�<�Z�<T.�=
; <;��=����qĽJG=Y����������6=�M�΄�=G��>�����G�Tͥ=��=��%�����ސ=T����'>\�ŽΗ�RJg=ȽI<��A��ր=��<��o���=�I=Q�B�N =��7�/m�=��9>u� >�
\= [d��*�<1[?�q)>���=MfU�Z\k<�p���;�;=t�=O��<��>�h��� <<�Rҽ�ϻ�Ar����R$<�ɻ�=φؽ�c�>y�^>i�-������>+��<]̗�؃�=�<���=��d�J >Y�[>�}�<h��#�T=R1X=ؼ���� ��[��N�@��=��->a���.�a<s�=�cE;?J!>HY=�31=Mb齘��=�B>��9��aڽS����s�h�+<2�B=pH��B���n>����8">7G �y!��a��� ��>&�w������=�d��(����U���ͼ���<sD<�a >>@>ʬl���>Z�&���G=|�<= �>��+R����*Bversion_numberJ@Z)
vector_observation

batch
oZ#
action_masks

batch
b
version_number

b
memory_size

b'
discrete_actions

batch
b*
discrete_action_output_shape

b
action

batch
b#
is_continuous_control

b!
action_output_shape

B

15
Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx.meta


fileFormatVersion: 2
guid: 24bf45e63f29d458f812c1702e665803
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
2186277476908879412: ImportLogs
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3}
optimizeModel: 1
forceArbitraryBatchSize: 1
treatErrorsAsWarnings: 0

11
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs.meta


fileFormatVersion: 2
guid: f7451777d89fd47418f0e1c3e2511919
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs.meta


fileFormatVersion: 2
guid: 8b67166b7adef46febf8b570f92c400d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

24
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs


using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Extensions.Teams;
using Unity.MLAgents.Sensors;
public class HallwayTeamManager : BaseTeamManager
{
List<Agent> m_AgentList = new List<Agent> { };
public override void RegisterAgent(Agent agent)
{
m_AgentList.Add(agent);
}
// public override void OnAgentDone(Agent agent, Agent.DoneReason doneReason, List<ISensor> sensors)
// {
// }
// public override void AddTeamReward(float reward)
// {
// }
}

204
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs


using UnityEngine;
using Unity.MLAgents.Extensions.Teams;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
public class HallwayCollabAgent : HallwayAgent
{
public GameObject symbolSGoal;
public GameObject symbolS;
public HallwayCollabAgent teammate;
public bool isSpotter = true;
int m_Message = 0;
[HideInInspector]
public int selection = 0;
public override void Initialize()
{
base.Initialize();
if (isSpotter)
{
var teamManager = new HallwayTeamManager();
SetTeamManager(teamManager);
teammate.SetTeamManager(teamManager);
}
}
public override void OnEpisodeBegin()
{
m_Message = -1;
var agentOffset = 10f;
if (isSpotter)
{
agentOffset = -15;
}
if (!isSpotter)
{
transform.position = new Vector3(0f + Random.Range(-3f, 3f),
1f, agentOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
transform.rotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
}
else
{
transform.position = new Vector3(0f,
1f, agentOffset)
+ ground.transform.position;
transform.rotation = Quaternion.Euler(0f, 0f, 0f);
}
// Remove the randomness
m_AgentRb.velocity *= 0f;
if (isSpotter)
{
var blockOffset = -9f;
// Only the Spotter has the correct selection
selection = Random.Range(0, 3);
if (selection == 0)
{
symbolO.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
}
else if (selection == 1)
{
symbolO.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
}
else
{
symbolO.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, -1000f, blockOffset)
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
}
var goalPos = Random.Range(0, 7);
if (goalPos == 0)
{
symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 1)
{
symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 2)
{
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 3)
{
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 4)
{
symbolOGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
}
else
{
symbolOGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
}
}
public override void CollectObservations(VectorSensor sensor)
{
if (useVectorObs)
{
sensor.AddObservation(StepCount / (float)MaxStep);
}
sensor.AddObservation(toOnehot(m_Message));
}
float[] toOnehot(int message)
{
float[] onehot = new float[3];
if (message < 0 || message >= 3)
{
return onehot;
}
onehot[message] = 1f;
return onehot;
}
public void tellAgent(int message)
{
m_Message = message;
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
AddReward(-1f / MaxStep);
if (!isSpotter)
{
MoveAgent(actionBuffers.DiscreteActions);
}
int comm_act = actionBuffers.DiscreteActions[1];
teammate.tellAgent(comm_act);
// if (isSpotter) // Test
// {
// teammate.tellAgent(selection);
// }
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.CompareTag("symbol_O_Goal") || col.gameObject.CompareTag("symbol_X_Goal") || col.gameObject.CompareTag("symbol_S_Goal"))
{
if (!isSpotter)
{
// Check the ground truth
if ((teammate.selection == 0 && col.gameObject.CompareTag("symbol_O_Goal")) ||
(teammate.selection == 1 && col.gameObject.CompareTag("symbol_X_Goal")) ||
(teammate.selection == 2 && col.gameObject.CompareTag("symbol_S_Goal")))
{
SetReward(1f);
teammate.SetReward(1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.goalScoredMaterial, 0.5f));
}
else
{
SetReward(-0.1f);
teammate.SetReward(-0.1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.failMaterial, 0.5f));
}
EndEpisode();
teammate.EndEpisode();
}
}
}
}

3
com.unity.ml-agents.extensions/Runtime/Teams.meta


fileFormatVersion: 2
guid: 77124df6c18c4f669052016b3116147e
timeCreated: 1610064454

3
com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs.meta


fileFormatVersion: 2
guid: b2967f9c3bd4449a98ad309085094769
timeCreated: 1610064493

34
com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs


using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
namespace Unity.MLAgents.Extensions.Teams
{
public class BaseTeamManager : ITeamManager
{
private readonly string m_Id = System.Guid.NewGuid().ToString();
public virtual void RegisterAgent(Agent agent)
{
}
public virtual void OnAgentDone(Agent agent, Agent.DoneReason doneReason, List<ISensor> sensors)
{
// Possible implementation - save reference to Agent's IPolicy so that we can repeatedly
// call IPolicy.RequestDecision on behalf of the Agent after it's dead
// If so, we'll need dummy sensor impls with the same shape as the originals.
agent.SendDoneToTrainer();
}
public virtual void AddTeamReward(float reward)
{
}
public string GetId()
{
return m_Id;
}
}
}
正在加载...
取消
保存