From 517a73adf9f85111c3d1d851c7e00a8af624ae98 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Wed, 3 Jul 2024 05:17:45 -0700 Subject: [PATCH 1/7] Consolidate entity creation. (#2452) * Resolve failing tests Signed-off-by: Nate Koenig * Cleanup Signed-off-by: Nate Koenig * Update src/EntityComponentManager.cc Co-authored-by: Ian Chen Signed-off-by: Nate Koenig * Incorrect else Signed-off-by: Nate Koenig --------- Signed-off-by: Nate Koenig Co-authored-by: Ian Chen --- include/gz/sim/EntityComponentManager.hh | 8 + include/gz/sim/SdfEntityCreator.hh | 10 + include/gz/sim/components/Performer.hh | 6 + src/EntityComponentManager.cc | 12 + src/EntityComponentManager_TEST.cc | 17 + src/LevelManager.cc | 390 ++++++------------ src/LevelManager.hh | 37 +- src/SdfEntityCreator.cc | 189 +++++++-- src/SdfEntityCreator_TEST.cc | 17 +- src/ServerPrivate.cc | 4 +- src/Server_TEST.cc | 7 +- src/SimulationRunner.cc | 146 ++++--- src/SimulationRunner.hh | 15 +- src/SimulationRunner_TEST.cc | 26 +- .../LogicalAudioSensorPlugin.cc | 4 +- src/systems/pose_publisher/PosePublisher.cc | 2 +- 16 files changed, 483 insertions(+), 407 deletions(-) diff --git a/include/gz/sim/EntityComponentManager.hh b/include/gz/sim/EntityComponentManager.hh index b87ada778c..6f62a23b15 100644 --- a/include/gz/sim/EntityComponentManager.hh +++ b/include/gz/sim/EntityComponentManager.hh @@ -675,6 +675,14 @@ namespace gz /// \return True if there are components marked for removal. public: bool HasRemovedComponents() const; + /// \brief Get an Entity based on a name component that is associated + /// with the entity. + /// \param[in] _name Name associated with the Entity + /// \return The Entity, if an Entity with the given name exists, + /// otherwise return std::nullopt. + public: std::optional EntityByName( + const std::string &_name) const; + /// \brief Clear the list of newly added entities so that a call to /// EachAdded after this will have no entities to iterate. This function /// is protected to facilitate testing. diff --git a/include/gz/sim/SdfEntityCreator.hh b/include/gz/sim/SdfEntityCreator.hh index 8e5292ef10..be96451b8a 100644 --- a/include/gz/sim/SdfEntityCreator.hh +++ b/include/gz/sim/SdfEntityCreator.hh @@ -93,6 +93,13 @@ namespace gz /// \return World entity. public: Entity CreateEntities(const sdf::World *_world); + /// \brief Create all entities that exist in the sdf::World object and + /// load their plugins. + /// \param[in] _world SDF world object. + /// \param[in] _worldEntity The world entity object. + public: void CreateEntities(const sdf::World *_world, + Entity _worldEntity); + /// \brief Create all entities that exist in the sdf::Model object and /// load their plugins. Also loads plugins of child sensors. /// \param[in] _model SDF model object. @@ -186,6 +193,9 @@ namespace gz private: Entity CreateEntities(const sdf::Model *_model, bool _staticParent); + /// \brief Load plugins for all models + private: void LoadModelPlugins(); + /// \brief Pointer to private data. private: std::unique_ptr dataPtr; }; diff --git a/include/gz/sim/components/Performer.hh b/include/gz/sim/components/Performer.hh index 2323b67275..58c0092047 100644 --- a/include/gz/sim/components/Performer.hh +++ b/include/gz/sim/components/Performer.hh @@ -17,6 +17,7 @@ #ifndef GZ_SIM_COMPONENTS_PERFORMER_HH_ #define GZ_SIM_COMPONENTS_PERFORMER_HH_ +#include #include #include @@ -34,6 +35,11 @@ namespace components /// \brief This component identifies an entity as being a performer. using Performer = Component; GZ_SIM_REGISTER_COMPONENT("gz_sim_components.Performer", Performer) + + /// \brief This component contains the performer reference name. + using PerformerRef = Component; + GZ_SIM_REGISTER_COMPONENT("gz_sim_components.PerformerRef", PerformerRef) } } } diff --git a/src/EntityComponentManager.cc b/src/EntityComponentManager.cc index 5ab9b0a635..2fd4e03c6e 100644 --- a/src/EntityComponentManager.cc +++ b/src/EntityComponentManager.cc @@ -2314,3 +2314,15 @@ void EntityComponentManager::ResetTo(const EntityComponentManager &_other) tmpCopy.ApplyEntityDiff(*this, ecmDiff); this->CopyFrom(tmpCopy); } + +///////////////////////////////////////////////// +std::optional EntityComponentManager::EntityByName( + const std::string &_name) const +{ + std::optional entity; + Entity entByName = EntityByComponents(components::Name(_name)); + if (entByName != kNullEntity) + entity = entByName; + + return entity; +} diff --git a/src/EntityComponentManager_TEST.cc b/src/EntityComponentManager_TEST.cc index bc7f03ff99..f7a6c11e7e 100644 --- a/src/EntityComponentManager_TEST.cc +++ b/src/EntityComponentManager_TEST.cc @@ -3421,6 +3421,23 @@ TEST_P(EntityComponentManagerFixture, EXPECT_EQ(321, comp->Data()); } +////////////////////////////////////////////////// +TEST_P(EntityComponentManagerFixture, EntityByName) +{ + // Create an entity, and give it a name + Entity entity = manager.CreateEntity(); + manager.CreateComponent(entity, components::Name("entity_name_a")); + + // Try to get an entity that doesn't exist + std::optional entityByName = manager.EntityByName("a_bad_name"); + EXPECT_FALSE(entityByName); + + entityByName = manager.EntityByName("entity_name_a"); + EXPECT_TRUE(entityByName); + CompareEntityComponents(manager, entity, + *entityByName, true); +} + // Run multiple times. We want to make sure that static globals don't cause // problems. INSTANTIATE_TEST_SUITE_P(EntityComponentManagerRepeat, diff --git a/src/LevelManager.cc b/src/LevelManager.cc index e4091bace3..a41a56d335 100644 --- a/src/LevelManager.cc +++ b/src/LevelManager.cc @@ -42,7 +42,6 @@ #include "gz/sim/components/LevelEntityNames.hh" #include "gz/sim/components/Light.hh" #include "gz/sim/components/LinearVelocity.hh" -#include "gz/sim/components/LinearVelocitySeed.hh" #include "gz/sim/components/MagneticField.hh" #include "gz/sim/components/Model.hh" #include "gz/sim/components/Name.hh" @@ -50,14 +49,9 @@ #include "gz/sim/components/Performer.hh" #include "gz/sim/components/PerformerLevels.hh" #include "gz/sim/components/Physics.hh" -#include "gz/sim/components/PhysicsEnginePlugin.hh" #include "gz/sim/components/Pose.hh" -#include "gz/sim/components/RenderEngineGuiPlugin.hh" -#include "gz/sim/components/RenderEngineServerHeadless.hh" -#include "gz/sim/components/RenderEngineServerPlugin.hh" #include "gz/sim/components/Scene.hh" #include "gz/sim/components/SphericalCoordinates.hh" -#include "gz/sim/components/Wind.hh" #include "gz/sim/components/World.hh" #include "SimulationRunner.hh" @@ -79,183 +73,57 @@ LevelManager::LevelManager(SimulationRunner *_runner, const bool _useLevels) this->runner->entityCompMgr, this->runner->eventMgr); - this->ReadLevelPerformerInfo(); - this->CreatePerformers(); - std::string service = transport::TopicUtils::AsValidTopic("/world/" + - this->runner->sdfWorld->Name() + "/level/set_performer"); + this->runner->sdfWorld.Name() + "/level/set_performer"); if (service.empty()) { gzerr << "Failed to generate set_performer topic for world [" - << this->runner->sdfWorld->Name() << "]" << std::endl; + << this->runner->sdfWorld.Name() << "]" << std::endl; return; } this->node.Advertise(service, &LevelManager::OnSetPerformer, this); } ///////////////////////////////////////////////// -void LevelManager::ReadLevelPerformerInfo() +void LevelManager::ReadLevelPerformerInfo(const sdf::World &_world) { - // \todo(anyone) Use SdfEntityCreator to avoid duplication - this->worldEntity = this->runner->entityCompMgr.CreateEntity(); - - // World components - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::World()); - this->runner->entityCompMgr.CreateComponent( - this->worldEntity, components::Name(this->runner->sdfWorld->Name())); - - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::Gravity(this->runner->sdfWorld->Gravity())); - - auto physics = this->runner->sdfWorld->PhysicsByIndex(0); - if (!physics) - { - physics = this->runner->sdfWorld->PhysicsDefault(); - } - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::Physics(*physics)); - - // Populate physics options that aren't accessible outside the Element() - // See https://github.com/osrf/sdformat/issues/508 - if (physics->Element() && physics->Element()->HasElement("dart")) - { - auto dartElem = physics->Element()->GetElement("dart"); - - if (dartElem->HasElement("collision_detector")) - { - auto collisionDetector = - dartElem->Get("collision_detector"); - - this->runner->entityCompMgr.CreateComponent(worldEntity, - components::PhysicsCollisionDetector(collisionDetector)); - } - if (dartElem->HasElement("solver") && - dartElem->GetElement("solver")->HasElement("solver_type")) - { - auto solver = - dartElem->GetElement("solver")->Get("solver_type"); - - this->runner->entityCompMgr.CreateComponent(worldEntity, - components::PhysicsSolver(solver)); - } - } - - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::MagneticField(this->runner->sdfWorld->MagneticField())); - - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::PhysicsEnginePlugin( - this->runner->serverConfig.PhysicsEngine())); - - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::RenderEngineServerPlugin( - this->runner->serverConfig.RenderEngineServer())); - - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::RenderEngineServerHeadless( - this->runner->serverConfig.HeadlessRendering())); - - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::RenderEngineGuiPlugin( - this->runner->serverConfig.RenderEngineGui())); - - auto worldElem = this->runner->sdfWorld->Element(); - - // Create Wind - auto windEntity = this->runner->entityCompMgr.CreateEntity(); - this->runner->entityCompMgr.CreateComponent(windEntity, components::Wind()); - this->runner->entityCompMgr.CreateComponent( - windEntity, components::WorldLinearVelocity( - this->runner->sdfWorld->WindLinearVelocity())); - // Initially the wind linear velocity is used as the seed velocity - this->runner->entityCompMgr.CreateComponent( - windEntity, components::WorldLinearVelocitySeed( - this->runner->sdfWorld->WindLinearVelocity())); - - this->entityCreator->SetParent(windEntity, this->worldEntity); - - // scene - if (this->runner->sdfWorld->Scene()) - { - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::Scene(*this->runner->sdfWorld->Scene())); - } - - // atmosphere - if (this->runner->sdfWorld->Atmosphere()) - { - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::Atmosphere(*this->runner->sdfWorld->Atmosphere())); - } - - // spherical coordinates - if (this->runner->sdfWorld->SphericalCoordinates()) - { - this->runner->entityCompMgr.CreateComponent(this->worldEntity, - components::SphericalCoordinates( - *this->runner->sdfWorld->SphericalCoordinates())); - } - // TODO(anyone) This should probably go somewhere else as it is a global // constant. const std::string kPluginName{"gz::sim"}; - sdf::ElementPtr pluginElem; - // Get the gz::sim plugin element - for (auto plugin = worldElem->FindElement("plugin"); plugin; - plugin = plugin->GetNextElement("plugin")) + bool found = false; + for (const sdf::Plugin &plugin : _world.Plugins()) { - if (plugin->Get("name") == kPluginName) + if (plugin.Name() == kPluginName) { - pluginElem = plugin; + this->ReadPerformers(plugin); + if (this->useLevels) + this->ReadLevels(plugin); + found = true; break; } } - if (pluginElem == nullptr) - { - if (this->useLevels) - { - gzerr << "Could not find a plugin tag with name " << kPluginName - << ". Levels and distributed simulation will not work.\n"; - } - } - else + if (!found && this->useLevels) { - this->ReadPerformers(pluginElem); - if (this->useLevels) - this->ReadLevels(pluginElem); + gzerr << "Could not find a plugin tag with name " << kPluginName + << ". Levels and distributed simulation will not work.\n"; } - - this->ConfigureDefaultLevel(); - - // Load world plugins. - this->runner->EventMgr().Emit(this->worldEntity, - this->runner->sdfWorld->Plugins()); - - GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION - this->runner->EventMgr().Emit(this->worldEntity, - this->runner->sdfWorld->Element()); - GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION - - // Store the world's SDF DOM to be used when saving the world to file - this->runner->entityCompMgr.CreateComponent( - worldEntity, components::WorldSdf(*this->runner->sdfWorld)); } ///////////////////////////////////////////////// -void LevelManager::ReadPerformers(const sdf::ElementPtr &_sdf) +void LevelManager::ReadPerformers(const sdf::Plugin &_plugin) { GZ_PROFILE("LevelManager::ReadPerformers"); - if (_sdf == nullptr) + sdf::ElementPtr sdf = _plugin.ToElement(); + if (sdf == nullptr) return; - if (_sdf->HasElement("performer")) + if (sdf->HasElement("performer")) { gzdbg << "Reading performer info\n"; - for (auto performer = _sdf->GetElement("performer"); performer; + for (auto performer = sdf->GetElement("performer"); performer; performer = performer->GetNextElement("performer")) { auto name = performer->Get("name"); @@ -263,6 +131,7 @@ void LevelManager::ReadPerformers(const sdf::ElementPtr &_sdf) Entity performerEntity = this->runner->entityCompMgr.CreateEntity(); // We use the ref to create a parent entity component later on std::string ref = performer->GetElement("ref")->GetValue()->GetAsString(); + if (this->performerMap.find(ref) == this->performerMap.end()) { this->performerMap[ref] = performerEntity; @@ -281,6 +150,8 @@ void LevelManager::ReadPerformers(const sdf::ElementPtr &_sdf) geometry.Load(performer->GetElement("geometry")); this->runner->entityCompMgr.CreateComponent(performerEntity, components::Performer()); + this->runner->entityCompMgr.CreateComponent(performerEntity, + components::PerformerRef(ref)); this->runner->entityCompMgr.CreateComponent(performerEntity, components::PerformerLevels()); this->runner->entityCompMgr.CreateComponent(performerEntity, @@ -288,8 +159,9 @@ void LevelManager::ReadPerformers(const sdf::ElementPtr &_sdf) this->runner->entityCompMgr.CreateComponent(performerEntity, components::Geometry(geometry)); - gzmsg << "Created performer [" << performerEntity << " / " << name << "]" - << std::endl; + gzmsg << "Created performer. EntityId[" << performerEntity + << "] EntityName[" << name << "] Ref[" << ref << "]" + << std::endl; } } @@ -380,16 +252,20 @@ bool LevelManager::OnSetPerformer(const msgs::StringMsg &_req, } ///////////////////////////////////////////////// -void LevelManager::ReadLevels(const sdf::ElementPtr &_sdf) +void LevelManager::ReadLevels(const sdf::Plugin &_plugin) { GZ_PROFILE("LevelManager::ReadLevels"); gzdbg << "Reading levels info\n"; - if (_sdf == nullptr) + sdf::ElementPtr sdf = _plugin.ToElement(); + if (sdf == nullptr) + return; + + if (!sdf->HasElement("level")) return; - for (auto level = _sdf->GetElement("level"); level; + for (auto level = sdf->GetElement("level"); level; level = level->GetNextElement("level")) { auto name = level->Get("name"); @@ -440,7 +316,15 @@ void LevelManager::ReadLevels(const sdf::ElementPtr &_sdf) this->runner->entityCompMgr.CreateComponent( levelEntity, components::LevelBuffer(buffer)); - this->entityCreator->SetParent(levelEntity, this->worldEntity); + auto worldEntity = + this->runner->entityCompMgr.EntityByComponents(components::World()); + + // All levels start inactive and unloaded. + this->UnloadLevel(levelEntity); + this->entityCreator->SetParent(levelEntity, worldEntity); + + gzdbg << "Created level with name[" << name << "] and pose[" + << pose << "]\n"; } } @@ -460,11 +344,17 @@ void LevelManager::ConfigureDefaultLevel() // Models for (uint64_t modelIndex = 0; - modelIndex < this->runner->sdfWorld->ModelCount(); ++modelIndex) + modelIndex < this->runner->sdfWorld.ModelCount(); ++modelIndex) { // There is no sdf::World::ModelByName so we have to iterate by index and // check if the model is in this level - auto model = this->runner->sdfWorld->ModelByIndex(modelIndex); + auto model = this->runner->sdfWorld.ModelByIndex(modelIndex); + if (!this->useLevels) + { + entityNamesInDefault.insert(model->Name()); + continue; + } + // If model is a performer, it will be handled separately if (this->performerMap.find(model->Name()) != this->performerMap.end()) { @@ -480,11 +370,18 @@ void LevelManager::ConfigureDefaultLevel() // Actors for (uint64_t actorIndex = 0; - actorIndex < this->runner->sdfWorld->ActorCount(); ++actorIndex) + actorIndex < this->runner->sdfWorld.ActorCount(); ++actorIndex) { // There is no sdf::World::ActorByName so we have to iterate by index and // check if the actor is in this level - auto actor = this->runner->sdfWorld->ActorByIndex(actorIndex); + auto actor = this->runner->sdfWorld.ActorByIndex(actorIndex); + + if (!this->useLevels) + { + entityNamesInDefault.insert(actor->Name()); + continue; + } + // If actor is a performer, it will be handled separately if (this->performerMap.find(actor->Name()) != this->performerMap.end()) { @@ -501,9 +398,9 @@ void LevelManager::ConfigureDefaultLevel() // Lights // We assume no performers are lights for (uint64_t lightIndex = 0; - lightIndex < this->runner->sdfWorld->LightCount(); ++lightIndex) + lightIndex < this->runner->sdfWorld.LightCount(); ++lightIndex) { - auto light = this->runner->sdfWorld->LightByIndex(lightIndex); + auto light = this->runner->sdfWorld.LightByIndex(lightIndex); if (this->entityNamesInLevels.find(light->Name()) == this->entityNamesInLevels.end()) { @@ -514,11 +411,12 @@ void LevelManager::ConfigureDefaultLevel() // Joints // We assume no performers are joints for (uint64_t jointIndex = 0; - jointIndex < this->runner->sdfWorld->JointCount(); ++jointIndex) + jointIndex < this->runner->sdfWorld.JointCount(); ++jointIndex) { - auto joint = this->runner->sdfWorld->JointByIndex(jointIndex); + auto joint = this->runner->sdfWorld.JointByIndex(jointIndex); - if (this->entityNamesInLevels.find(joint->Name()) == + if ( + this->entityNamesInLevels.find(joint->Name()) == this->entityNamesInLevels.end()) { entityNamesInDefault.insert(joint->Name()); @@ -530,57 +428,15 @@ void LevelManager::ConfigureDefaultLevel() defaultLevel, components::Level()); this->runner->entityCompMgr.CreateComponent( defaultLevel, components::DefaultLevel()); + this->runner->entityCompMgr.CreateComponent( + defaultLevel, components::Name("default")); this->runner->entityCompMgr.CreateComponent( defaultLevel, components::LevelEntityNames(entityNamesInDefault)); - this->entityCreator->SetParent(defaultLevel, this->worldEntity); -} - -///////////////////////////////////////////////// -void LevelManager::CreatePerformers() -{ - GZ_PROFILE("LevelManager::CreatePerformers"); - - if (this->worldEntity == kNullEntity) - { - gzerr << "Could not find the world entity while creating performers\n"; - return; - } - // Models - for (uint64_t modelIndex = 0; - modelIndex < this->runner->sdfWorld->ModelCount(); ++modelIndex) - { - auto model = this->runner->sdfWorld->ModelByIndex(modelIndex); - if (this->performerMap.find(model->Name()) != this->performerMap.end()) - { - Entity modelEntity = this->entityCreator->CreateEntities(model); - - // Make the model a parent of this performer - this->entityCreator->SetParent(this->performerMap[model->Name()], - modelEntity); - - // Add parent world to the model - this->entityCreator->SetParent(modelEntity, this->worldEntity); - } - } - - // Actors - for (uint64_t actorIndex = 0; - actorIndex < this->runner->sdfWorld->ActorCount(); ++actorIndex) - { - auto actor = this->runner->sdfWorld->ActorByIndex(actorIndex); - if (this->performerMap.find(actor->Name()) != this->performerMap.end()) - { - Entity actorEntity = this->entityCreator->CreateEntities(actor); - - // Make the actor a parent of this performer - this->entityCreator->SetParent(this->performerMap[actor->Name()], - actorEntity); + auto worldEntity = + this->runner->entityCompMgr.EntityByComponents(components::World()); - // Add parent world to the actor - this->entityCreator->SetParent(actorEntity, this->worldEntity); - } - } + this->entityCreator->SetParent(defaultLevel, worldEntity); } ///////////////////////////////////////////////// @@ -764,50 +620,27 @@ void LevelManager::UpdateLevelsState() // Make a list of entity names to unload making sure to leave out the ones // that have been marked to be loaded above - std::set entityNamesToUnload; - for (const auto &toUnload : levelsToUnload) + for (const Entity &toUnload : levelsToUnload) { - auto entityNames = this->runner->entityCompMgr - .Component(toUnload) - ->Data(); - - for (const auto &name : entityNames) - { - if (entityNamesMarked.find(name) == entityNamesMarked.end()) - { - entityNamesToUnload.insert(name); - } - } + this->UnloadLevel(toUnload, entityNamesMarked); } - // Load and unload the entities + // Load the entities if (entityNamesToLoad.size() > 0) - { this->LoadActiveEntities(entityNamesToLoad); - } - if (entityNamesToUnload.size() > 0) - { - this->UnloadInactiveEntities(entityNamesToUnload); - } - // Finally, upadte the list of active levels + // Finally, update the list of active levels for (const auto &level : levelsToLoad) { if (!this->IsLevelActive(level)) { - gzmsg << "Loaded level [" << level << "]" << std::endl; - this->activeLevels.push_back(level); - } - } + const components::Name *lvlName = + this->runner->entityCompMgr.Component(level); - auto pendingEnd = this->activeLevels.end(); - for (const auto &toUnload : levelsToUnload) - { - gzmsg << "Unloaded level [" << toUnload << "]" << std::endl; - pendingEnd = std::remove(this->activeLevels.begin(), pendingEnd, toUnload); + gzmsg << "Loaded level [" << lvlName->Data() << "]" << std::endl; + this->activeLevels.insert(level); + } } - // Erase from vector - this->activeLevels.erase(pendingEnd, this->activeLevels.end()); } ///////////////////////////////////////////////// @@ -815,7 +648,10 @@ void LevelManager::LoadActiveEntities(const std::set &_namesToLoad) { GZ_PROFILE("LevelManager::LoadActiveEntities"); - if (this->worldEntity == kNullEntity) + auto worldEntity = + this->runner->entityCompMgr.EntityByComponents(components::World()); + + if (worldEntity == kNullEntity) { gzerr << "Could not find the world entity while loading levels\n"; return; @@ -823,57 +659,60 @@ void LevelManager::LoadActiveEntities(const std::set &_namesToLoad) // Models for (uint64_t modelIndex = 0; - modelIndex < this->runner->sdfWorld->ModelCount(); ++modelIndex) + modelIndex < this->runner->sdfWorld.ModelCount(); ++modelIndex) { // There is no sdf::World::ModelByName so we have to iterate by index and // check if the model is in this level - auto model = this->runner->sdfWorld->ModelByIndex(modelIndex); - if (_namesToLoad.find(model->Name()) != _namesToLoad.end()) + auto model = this->runner->sdfWorld.ModelByIndex(modelIndex); + if (_namesToLoad.find(model->Name()) != _namesToLoad.end() && + this->runner->EntityByName(model->Name()) == std::nullopt) { Entity modelEntity = this->entityCreator->CreateEntities(model); - this->entityCreator->SetParent(modelEntity, this->worldEntity); + this->entityCreator->SetParent(modelEntity, worldEntity); } } // Actors for (uint64_t actorIndex = 0; - actorIndex < this->runner->sdfWorld->ActorCount(); ++actorIndex) + actorIndex < this->runner->sdfWorld.ActorCount(); ++actorIndex) { // There is no sdf::World::ActorByName so we have to iterate by index and // check if the actor is in this level - auto actor = this->runner->sdfWorld->ActorByIndex(actorIndex); - if (_namesToLoad.find(actor->Name()) != _namesToLoad.end()) + auto actor = this->runner->sdfWorld.ActorByIndex(actorIndex); + if (_namesToLoad.find(actor->Name()) != _namesToLoad.end() && + this->runner->EntityByName(actor->Name()) == std::nullopt) { Entity actorEntity = this->entityCreator->CreateEntities(actor); - this->entityCreator->SetParent(actorEntity, this->worldEntity); + this->entityCreator->SetParent(actorEntity, worldEntity); } } // Lights for (uint64_t lightIndex = 0; - lightIndex < this->runner->sdfWorld->LightCount(); ++lightIndex) + lightIndex < this->runner->sdfWorld.LightCount(); ++lightIndex) { - auto light = this->runner->sdfWorld->LightByIndex(lightIndex); - if (_namesToLoad.find(light->Name()) != _namesToLoad.end()) + auto light = this->runner->sdfWorld.LightByIndex(lightIndex); + if (_namesToLoad.find(light->Name()) != _namesToLoad.end() && + this->runner->EntityByName(light->Name()) == std::nullopt) { Entity lightEntity = this->entityCreator->CreateEntities(light); - this->entityCreator->SetParent(lightEntity, this->worldEntity); + this->entityCreator->SetParent(lightEntity, worldEntity); } } // Joints for (uint64_t jointIndex = 0; - jointIndex < this->runner->sdfWorld->JointCount(); ++jointIndex) + jointIndex < this->runner->sdfWorld.JointCount(); ++jointIndex) { - auto joint = this->runner->sdfWorld->JointByIndex(jointIndex); + auto joint = this->runner->sdfWorld.JointByIndex(jointIndex); if (_namesToLoad.find(joint->Name()) != _namesToLoad.end()) { Entity jointEntity = this->entityCreator->CreateEntities(joint); - this->entityCreator->SetParent(jointEntity, this->worldEntity); + this->entityCreator->SetParent(jointEntity, worldEntity); } } @@ -938,8 +777,7 @@ void LevelManager::UnloadInactiveEntities( ///////////////////////////////////////////////// bool LevelManager::IsLevelActive(const Entity _entity) const { - return std::find(this->activeLevels.begin(), this->activeLevels.end(), - _entity) != this->activeLevels.end(); + return this->activeLevels.find(_entity) != this->activeLevels.end(); } ///////////////////////////////////////////////// @@ -982,3 +820,31 @@ int LevelManager::CreatePerformerEntity(const std::string &_name, this->entityCreator->SetParent(this->performerMap[_name], modelEntity); return 0; } + +////////////////////////////////////////////////// +void LevelManager::UnloadLevel(const Entity &_entity, + const std::set &_entityNamesMarked) +{ + auto entityNames = this->runner->entityCompMgr + .Component(_entity) + ->Data(); + + std::set entityNamesToUnload; + for (const auto &name : entityNames) + { + if (_entityNamesMarked.find(name) == _entityNamesMarked.end()) + { + entityNamesToUnload.insert(name); + } + } + + if (entityNamesToUnload.size() > 0) + { + this->UnloadInactiveEntities(entityNamesToUnload); + } + this->activeLevels.erase(_entity); + const components::Name *lvlName = + this->runner->entityCompMgr.Component(_entity); + + gzmsg << "Unloaded level [" << lvlName->Data() << "]" << std::endl; +} diff --git a/src/LevelManager.hh b/src/LevelManager.hh index 63e0466533..69e398bd90 100644 --- a/src/LevelManager.hh +++ b/src/LevelManager.hh @@ -88,6 +88,15 @@ namespace gz /// every update cycle public: void UpdateLevelsState(); + /// \brief Read level and performer information from the sdf::World + /// object + /// \param[in] _world The SDF world + public: void ReadLevelPerformerInfo(const sdf::World &_world); + + /// \brief Determine which entities belong to the default level and + /// schedule them to be loaded + public: void ConfigureDefaultLevel(); + /// \brief Load entities that have been marked for loading. /// \param[in] _namesToLoad List of of entity names to load private: void LoadActiveEntities( @@ -98,27 +107,15 @@ namespace gz private: void UnloadInactiveEntities( const std::set &_namesToUnload); - /// \brief Read level and performer information from the sdf::World - /// object - private: void ReadLevelPerformerInfo(); - - /// \brief Create performers - /// Assuming that a simulation runner is performer-centered - private: void CreatePerformers(); - /// \brief Read information about performers from the sdf Element and /// create performer entities - /// \param[in] _sdf sdf::ElementPtr of the gz::sim plugin tag - private: void ReadPerformers(const sdf::ElementPtr &_sdf); + /// \param[in] _plugin sdf::Plugin of the gz::sim plugin tag + private: void ReadPerformers(const sdf::Plugin &_plugin); /// \brief Read information about levels from the sdf Element and /// create level entities - /// \param[in] _sdf sdf::ElementPtr of the gz::sim plugin tag - private: void ReadLevels(const sdf::ElementPtr &_sdf); - - /// \brief Determine which entities belong to the default level and - /// schedule them to be loaded - private: void ConfigureDefaultLevel(); + /// \param[in] _plugin sdf::Plugin of the gz::sim plugin tag + private: void ReadLevels(const sdf::Plugin &_plugin); /// \brief Determine if a level is active /// \param[in] _entity Entity of level to be checked @@ -145,8 +142,11 @@ namespace gz private: int CreatePerformerEntity(const std::string &_name, const sdf::Geometry &_geom); + private: void UnloadLevel(const Entity &_entity, + const std::set &_entityNamesMarked = {}); + /// \brief List of currently active levels - private: std::vector activeLevels; + private: std::set activeLevels; /// \brief Names of entities that are currently active (loaded). private: std::set activeEntityNames; @@ -161,9 +161,6 @@ namespace gz /// \brief Names of all entities that have assigned levels private: std::set entityNamesInLevels; - /// \brief Entity of the world. - private: Entity worldEntity{kNullEntity}; - /// \brief Flag whether to use levels or not. private: bool useLevels{false}; diff --git a/src/SdfEntityCreator.cc b/src/SdfEntityCreator.cc index af340444f9..afe266c5cd 100644 --- a/src/SdfEntityCreator.cc +++ b/src/SdfEntityCreator.cc @@ -57,11 +57,14 @@ #include "gz/sim/components/JointAxis.hh" #include "gz/sim/components/JointType.hh" #include "gz/sim/components/LaserRetro.hh" +#include "gz/sim/components/Level.hh" +#include "gz/sim/components/LevelEntityNames.hh" #include "gz/sim/components/Lidar.hh" #include "gz/sim/components/Light.hh" #include "gz/sim/components/LightType.hh" #include "gz/sim/components/LinearAcceleration.hh" #include "gz/sim/components/LinearVelocity.hh" +#include "gz/sim/components/LinearVelocitySeed.hh" #include "gz/sim/components/Link.hh" #include "gz/sim/components/LogicalCamera.hh" #include "gz/sim/components/MagneticField.hh" @@ -73,7 +76,9 @@ #include "gz/sim/components/ParentEntity.hh" #include "gz/sim/components/ParentLinkName.hh" #include +#include "gz/sim/components/Performer.hh" #include "gz/sim/components/Physics.hh" +#include "gz/sim/components/PhysicsEnginePlugin.hh" #include "gz/sim/components/Pose.hh" #include #include "gz/sim/components/RgbdCamera.hh" @@ -91,6 +96,7 @@ #include "gz/sim/components/Visibility.hh" #include "gz/sim/components/Visual.hh" #include "gz/sim/components/WideAngleCamera.hh" +#include "gz/sim/components/Wind.hh" #include "gz/sim/components/WindMode.hh" #include "gz/sim/components/World.hh" #endif @@ -239,34 +245,86 @@ SdfEntityCreator &SdfEntityCreator::operator=(SdfEntityCreator &&_creator) ////////////////////////////////////////////////// Entity SdfEntityCreator::CreateEntities(const sdf::World *_world) { - GZ_PROFILE("SdfEntityCreator::CreateEntities(sdf::World)"); // World entity Entity worldEntity = this->dataPtr->ecm->CreateEntity(); - // World components - this->dataPtr->ecm->CreateComponent(worldEntity, components::World()); - this->dataPtr->ecm->CreateComponent(worldEntity, + this->CreateEntities(_world, worldEntity); + return worldEntity; +} + +////////////////////////////////////////////////// +void SdfEntityCreator::CreateEntities(const sdf::World *_world, + Entity _worldEntity) +{ + GZ_PROFILE("SdfEntityCreator::CreateEntities(sdf::World)"); + + if (!this->dataPtr->ecm->EntityHasComponentType( + _worldEntity, components::World::typeId)) + { + this->dataPtr->ecm->CreateComponent(_worldEntity, components::World()); + } + + this->dataPtr->ecm->CreateComponent(_worldEntity, components::Name(_world->Name())); + // Gravity + this->dataPtr->ecm->CreateComponent(_worldEntity, + components::Gravity(_world->Gravity())); + + // MagneticField + this->dataPtr->ecm->CreateComponent(_worldEntity, + components::MagneticField(_world->MagneticField())); + + // Create Wind + auto windEntity = this->dataPtr->ecm->CreateEntity(); + this->SetParent(windEntity, _worldEntity); + this->dataPtr->ecm->CreateComponent(windEntity, components::Wind()); + this->dataPtr->ecm->CreateComponent(windEntity, + components::WorldLinearVelocity(_world->WindLinearVelocity())); + // Initially the wind linear velocity is used as the seed velocity + this->dataPtr->ecm->CreateComponent(windEntity, + components::WorldLinearVelocitySeed(_world->WindLinearVelocity())); + + // Set the parent of each level to the world + this->dataPtr->ecm->Each([&]( + const Entity &_entity, + const components::Level *) -> bool + { + this->SetParent(_entity, _worldEntity); + return true; + }); + + // Get the entities that should be loaded based on level information. + std::set levelEntityNames; + this->dataPtr->ecm->Each ([&]( + const Entity &, + const components::DefaultLevel *, + const components::LevelEntityNames *_names) -> bool + { + levelEntityNames = _names->Data(); + return true; + }); + // scene if (_world->Scene()) { - this->dataPtr->ecm->CreateComponent(worldEntity, + this->dataPtr->ecm->CreateComponent(_worldEntity, components::Scene(*_world->Scene())); } // atmosphere if (_world->Atmosphere()) { - this->dataPtr->ecm->CreateComponent(worldEntity, + this->dataPtr->ecm->CreateComponent(_worldEntity, components::Atmosphere(*_world->Atmosphere())); } // spherical coordinates if (_world->SphericalCoordinates()) { - this->dataPtr->ecm->CreateComponent(worldEntity, + this->dataPtr->ecm->CreateComponent(_worldEntity, components::SphericalCoordinates(*_world->SphericalCoordinates())); } @@ -274,35 +332,84 @@ Entity SdfEntityCreator::CreateEntities(const sdf::World *_world) for (uint64_t modelIndex = 0; modelIndex < _world->ModelCount(); ++modelIndex) { - auto model = _world->ModelByIndex(modelIndex); - auto modelEntity = this->CreateEntities(model); + const sdf::Model *model = _world->ModelByIndex(modelIndex); + if (levelEntityNames.empty() || + levelEntityNames.find(model->Name()) != levelEntityNames.end()) + + { + Entity modelEntity = this->CreateEntities(model, false); - this->SetParent(modelEntity, worldEntity); + this->SetParent(modelEntity, _worldEntity); + } } // Actors for (uint64_t actorIndex = 0; actorIndex < _world->ActorCount(); ++actorIndex) { - auto actor = _world->ActorByIndex(actorIndex); - auto actorEntity = this->CreateEntities(actor); - - this->SetParent(actorEntity, worldEntity); + const sdf::Actor *actor = _world->ActorByIndex(actorIndex); + if (levelEntityNames.empty() || + levelEntityNames.find(actor->Name()) != levelEntityNames.end()) + { + Entity actorEntity = this->CreateEntities(actor); + this->SetParent(actorEntity, _worldEntity); + } } // Lights for (uint64_t lightIndex = 0; lightIndex < _world->LightCount(); ++lightIndex) { - auto light = _world->LightByIndex(lightIndex); - auto lightEntity = this->CreateEntities(light); + const sdf::Light *light = _world->LightByIndex(lightIndex); + if (levelEntityNames.empty() || + levelEntityNames.find(light->Name()) != levelEntityNames.end()) + { + Entity lightEntity = this->CreateEntities(light); - this->SetParent(lightEntity, worldEntity); + this->SetParent(lightEntity, _worldEntity); + } } - // Gravity - this->dataPtr->ecm->CreateComponent(worldEntity, - components::Gravity(_world->Gravity())); + // Attach performers to their parent entity + this->dataPtr->ecm->Each< + components::Performer, + components::PerformerRef>([&]( + const Entity &_entity, + const components::Performer *, + const components::PerformerRef *_ref) -> bool + { + std::optional parentEntity = + this->dataPtr->ecm->EntityByName(_ref->Data()); + if (!parentEntity) + { + // Performers have not been created yet. Try to create the model + // or actor and attach the peformer. + if (_world->ModelNameExists(_ref->Data())) + { + const sdf::Model *model = _world->ModelByName(_ref->Data()); + Entity modelEntity = this->CreateEntities(model, false); + this->SetParent(modelEntity, _worldEntity); + this->SetParent(_entity, modelEntity); + } + else if (_world->ActorNameExists(_ref->Data())) + { + const sdf::Actor *actor = _world->ActorByName(_ref->Data()); + Entity actorEntity = this->CreateEntities(actor); + this->SetParent(actorEntity, _worldEntity); + this->SetParent(_entity, actorEntity); + } + else + { + gzerr << "Unable to find performer parent entity with name[" << + _ref->Data() << "]. This performer will not adhere to levels.\n"; + } + } + else + { + this->SetParent(_entity, *parentEntity); + } + return true; + }); // Physics // \todo(anyone) Support picking a specific physics profile @@ -311,7 +418,7 @@ Entity SdfEntityCreator::CreateEntities(const sdf::World *_world) { physics = _world->PhysicsDefault(); } - this->dataPtr->ecm->CreateComponent(worldEntity, + this->dataPtr->ecm->CreateComponent(_worldEntity, components::Physics(*physics)); // Populate physics options that aren't accessible outside the Element() @@ -325,7 +432,7 @@ Entity SdfEntityCreator::CreateEntities(const sdf::World *_world) auto collisionDetector = dartElem->Get("collision_detector"); - this->dataPtr->ecm->CreateComponent(worldEntity, + this->dataPtr->ecm->CreateComponent(_worldEntity, components::PhysicsCollisionDetector(collisionDetector)); } if (dartElem->HasElement("solver") && @@ -334,30 +441,26 @@ Entity SdfEntityCreator::CreateEntities(const sdf::World *_world) auto solver = dartElem->GetElement("solver")->Get("solver_type"); - this->dataPtr->ecm->CreateComponent(worldEntity, + this->dataPtr->ecm->CreateComponent(_worldEntity, components::PhysicsSolver(solver)); } } - // MagneticField - this->dataPtr->ecm->CreateComponent(worldEntity, - components::MagneticField(_world->MagneticField())); + // Store the world's SDF DOM to be used when saving the world to file + this->dataPtr->ecm->CreateComponent( + _worldEntity, components::WorldSdf(*_world)); - this->dataPtr->eventManager->Emit(worldEntity, + // Load world plugins first. + this->dataPtr->eventManager->Emit(_worldEntity, _world->Plugins()); - for (const sdf::Plugin &p : _world->Plugins()) - { - GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION - this->dataPtr->eventManager->Emit(worldEntity, - p.ToElement()); - GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION - } - // Store the world's SDF DOM to be used when saving the world to file - this->dataPtr->ecm->CreateComponent( - worldEntity, components::WorldSdf(*_world)); + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + this->dataPtr->eventManager->Emit(_worldEntity, + _world->ToElement()); + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION - return worldEntity; + // Load model plugins after the world plugin. + this->LoadModelPlugins(); } ////////////////////////////////////////////////// @@ -368,6 +471,14 @@ Entity SdfEntityCreator::CreateEntities(const sdf::Model *_model) auto ent = this->CreateEntities(_model, false); // Load all model plugins afterwards, so we get scoped name for nested models. + this->LoadModelPlugins(); + + return ent; +} + +////////////////////////////////////////////////// +void SdfEntityCreator::LoadModelPlugins() +{ for (const auto &[entity, plugins] : this->dataPtr->newModels) { this->dataPtr->eventManager->Emit(entity, plugins); @@ -408,8 +519,6 @@ Entity SdfEntityCreator::CreateEntities(const sdf::Model *_model) } } this->dataPtr->newVisuals.clear(); - - return ent; } ////////////////////////////////////////////////// diff --git a/src/SdfEntityCreator_TEST.cc b/src/SdfEntityCreator_TEST.cc index d4cad99d84..e7f7527dc4 100644 --- a/src/SdfEntityCreator_TEST.cc +++ b/src/SdfEntityCreator_TEST.cc @@ -107,9 +107,9 @@ TEST_F(SdfEntityCreatorTest, CreateEntities) EXPECT_TRUE(this->ecm.HasComponentType(components::LaserRetro::typeId)); // Check entities - // 1 x world + 5 x model + 5 x link + 5 x collision + 5 x visual + + // 1 x world + 1 wind + 5 x model + 5 x link + 5 x collision + 5 x visual + // 1 x light (light + visual) - EXPECT_EQ(23u, this->ecm.EntityCount()); + EXPECT_EQ(24u, this->ecm.EntityCount()); // Check worlds unsigned int worldCount{0}; @@ -685,8 +685,9 @@ TEST_F(SdfEntityCreatorTest, CreateLights) creator.CreateEntities(root.WorldByIndex(0)); // Check entities - // 1 x world + 1 x model + 1 x link + 1 x visual + 4 x light (light + visual) - EXPECT_EQ(12u, this->ecm.EntityCount()); + // 1 x world + 1 wind + 1 x model + 1 x link + 1 x visual + + // 4 x light (light + visual) + EXPECT_EQ(13u, this->ecm.EntityCount()); // Check worlds unsigned int worldCount{0}; @@ -1107,9 +1108,9 @@ TEST_F(SdfEntityCreatorTest, RemoveEntities) creator.CreateEntities(root.WorldByIndex(0)); // Check entities - // 1 x world + 4 x model + 4 x link + 4 x collision + 4 x visual + // 1 x world + 1 wind + 4 x model + 4 x link + 4 x collision + 4 x visual // + 1 x light (light + visual) - EXPECT_EQ(23u, this->ecm.EntityCount()); + EXPECT_EQ(24u, this->ecm.EntityCount()); auto world = this->ecm.EntityByComponents(components::World()); EXPECT_NE(kNullEntity, world); @@ -1135,7 +1136,7 @@ TEST_F(SdfEntityCreatorTest, RemoveEntities) creator.RequestRemoveEntity(models.front()); this->ecm.ProcessEntityRemovals(); - EXPECT_EQ(19u, this->ecm.EntityCount()); + EXPECT_EQ(20u, this->ecm.EntityCount()); models = this->ecm.ChildrenByComponents(world, components::Model()); ASSERT_EQ(4u, models.size()); @@ -1158,7 +1159,7 @@ TEST_F(SdfEntityCreatorTest, RemoveEntities) creator.RequestRemoveEntity(models.front(), false); this->ecm.ProcessEntityRemovals(); - EXPECT_EQ(18u, this->ecm.EntityCount()); + EXPECT_EQ(19u, this->ecm.EntityCount()); // There's only 1 model left models = this->ecm.ChildrenByComponents(world, components::Model()); diff --git a/src/ServerPrivate.cc b/src/ServerPrivate.cc index 97b3930c55..62b3e329c4 100644 --- a/src/ServerPrivate.cc +++ b/src/ServerPrivate.cc @@ -286,14 +286,14 @@ void ServerPrivate::CreateEntities() for (uint64_t worldIndex = 0; worldIndex < this->sdfRoot.WorldCount(); ++worldIndex) { - auto world = this->sdfRoot.WorldByIndex(worldIndex); + sdf::World *world = this->sdfRoot.WorldByIndex(worldIndex); { std::lock_guard lock(this->worldsMutex); this->worldNames.push_back(world->Name()); } auto runner = std::make_unique( - world, this->systemLoader, this->config); + *world, this->systemLoader, this->config); runner->SetFuelUriMap(this->fuelUriMap); this->simRunners.push_back(std::move(runner)); } diff --git a/src/Server_TEST.cc b/src/Server_TEST.cc index 922b3e1470..39de1ec5f7 100644 --- a/src/Server_TEST.cc +++ b/src/Server_TEST.cc @@ -441,7 +441,8 @@ TEST_P(ServerFixture, GZ_UTILS_TEST_DISABLED_ON_WIN32(ServerConfigLogRecord)) EXPECT_EQ(0u, *server.IterationCount()); EXPECT_EQ(3u, *server.EntityCount()); - EXPECT_EQ(4u, *server.SystemCount()); + // Only the log record system is needed and therefore loaded. + EXPECT_EQ(1u, *server.SystemCount()); EXPECT_TRUE(serverConfig.LogRecordTopics().empty()); serverConfig.AddLogRecordTopic("test_topic1"); @@ -480,7 +481,9 @@ TEST_P(ServerFixture, sim::Server server(serverConfig); EXPECT_EQ(0u, *server.IterationCount()); EXPECT_EQ(3u, *server.EntityCount()); - EXPECT_EQ(4u, *server.SystemCount()); + + // Only the log record system is needed and therefore loaded. + EXPECT_EQ(1u, *server.SystemCount()); } EXPECT_FALSE(common::exists(logFile)); diff --git a/src/SimulationRunner.cc b/src/SimulationRunner.cc index 650fe35087..0f2d5a9b05 100644 --- a/src/SimulationRunner.cc +++ b/src/SimulationRunner.cc @@ -40,7 +40,11 @@ #include "gz/sim/components/ParentEntity.hh" #include "gz/sim/components/Physics.hh" #include "gz/sim/components/PhysicsCmd.hh" +#include "gz/sim/components/PhysicsEnginePlugin.hh" #include "gz/sim/components/Recreate.hh" +#include "gz/sim/components/RenderEngineGuiPlugin.hh" +#include "gz/sim/components/RenderEngineServerHeadless.hh" +#include "gz/sim/components/RenderEngineServerPlugin.hh" #include "gz/sim/Events.hh" #include "gz/sim/SdfEntityCreator.hh" #include "gz/sim/Util.hh" @@ -55,21 +59,13 @@ using StringSet = std::unordered_set; ////////////////////////////////////////////////// -SimulationRunner::SimulationRunner(const sdf::World *_world, +SimulationRunner::SimulationRunner(const sdf::World &_world, const SystemLoaderPtr &_systemLoader, const ServerConfig &_config) - // \todo(nkoenig) Either copy the world, or add copy constructor to the - // World and other elements. - : sdfWorld(_world), serverConfig(_config) + : sdfWorld(_world), serverConfig(_config) { - if (nullptr == _world) - { - gzerr << "Can't start simulation runner with null world." << std::endl; - return; - } - // Keep world name - this->worldName = _world->Name(); + this->worldName = _world.Name(); this->parametersRegistry = std::make_unique< gz::transport::parameters::ParametersRegistry>( @@ -77,10 +73,10 @@ SimulationRunner::SimulationRunner(const sdf::World *_world, // Get the physics profile // TODO(luca): remove duplicated logic in SdfEntityCreator and LevelManager - auto physics = _world->PhysicsByIndex(0); + const sdf::Physics *physics = _world.PhysicsByIndex(0); if (!physics) { - physics = _world->PhysicsDefault(); + physics = _world.PhysicsDefault(); } // Step size @@ -166,9 +162,6 @@ SimulationRunner::SimulationRunner(const sdf::World *_world, std::bind(&SimulationRunner::LoadPlugins, this, std::placeholders::_1, std::placeholders::_2)); - // Create the level manager - this->levelMgr = std::make_unique(this, _config.UseLevels()); - // Check if this is going to be a distributed runner // Attempt to create the manager based on environment variables. // If the configuration is invalid, then networkMgr will be `nullptr`. @@ -206,27 +199,11 @@ SimulationRunner::SimulationRunner(const sdf::World *_world, } } - // Load the active levels - this->levelMgr->UpdateLevelsState(); - - // Store the initial state of the ECM; - this->initialEntityCompMgr.CopyFrom(this->entityCompMgr); - - // Load any additional plugins from the Server Configuration - this->LoadServerPlugins(this->serverConfig.Plugins()); - - // If we have reached this point and no world systems have been loaded, then - // load a default set of systems. - if (this->systemMgr->TotalByEntity( - worldEntity(this->entityCompMgr)).empty()) - { - gzmsg << "No systems loaded from SDF, loading defaults" << std::endl; - bool isPlayback = !this->serverConfig.LogPlaybackPath().empty(); - auto plugins = sim::loadPluginInfo(isPlayback); - this->LoadServerPlugins(plugins); - } + // Create the level manager + this->levelMgr = std::make_unique(this, + this->serverConfig.UseLevels()); - this->LoadLoggingPlugins(this->serverConfig); + this->CreateEntities(_world); // TODO(louise) Combine both messages into one. this->node->Advertise("control", &SimulationRunner::OnWorldControl, this); @@ -241,9 +218,9 @@ SimulationRunner::SimulationRunner(const sdf::World *_world, // Publish empty GUI messages for worlds that have no GUI in the beginning. // In the future, support modifying GUI from the server at runtime. - if (_world->Gui()) + if (_world.Gui()) { - this->guiMsg = convert(*_world->Gui()); + this->guiMsg = convert(*_world.Gui()); } std::string infoService{"gui/info"}; @@ -252,7 +229,7 @@ SimulationRunner::SimulationRunner(const sdf::World *_world, gzmsg << "Serving GUI information on [" << opts.NameSpace() << "/" << infoService << "]" << std::endl; - gzmsg << "World [" << _world->Name() << "] initialized with [" + gzmsg << "World [" << this->worldName << "] initialized with [" << physics->Name() << "] physics profile." << std::endl; std::string genWorldSdfService{"generate_world_sdf"}; @@ -1417,19 +1394,7 @@ bool SimulationRunner::RequestRemoveEntity(const std::string &_name, std::optional SimulationRunner::EntityByName( const std::string &_name) const { - std::optional entity; - this->entityCompMgr.Each([&](const Entity _entity, - const components::Name *_entityName)->bool - { - if (_entityName->Data() == _name) - { - entity = _entity; - return false; - } - return true; - }); - - return entity; + return this->entityCompMgr.EntityByName(_name); } ///////////////////////////////////////////////// @@ -1497,3 +1462,80 @@ void SimulationRunner::SetNextStepAsBlockingPaused(const bool value) { this->blockingPausedStepPending = value; } + +////////////////////////////////////////////////// +void SimulationRunner::CreateEntities(const sdf::World &_world) +{ + this->sdfWorld = _world; + + // Instantiate the SDF creator + auto creator = std::make_unique(this->entityCompMgr, + this->eventMgr); + + // We create the world entity so that the simulation runner can inject + // some components + Entity worldEntity = this->entityCompMgr.CreateEntity(); + this->entityCompMgr.CreateComponent(worldEntity, components::World()); + + // 1. Level manager read performers and levels. Add components to the + // performers and levels so that the SdfEntityCreator knows whether to + // create them or not. Make sure to set parents properly + // 2. Create entities. + + // Read the level information. This will create components containing + // information about which entities should be created for the current + // level. + this->levelMgr->ReadLevelPerformerInfo(this->sdfWorld); + + // Configure the default level + this->levelMgr->ConfigureDefaultLevel(); + + // Create components based on the contents of the server configuration. + this->entityCompMgr.CreateComponent(worldEntity, + components::PhysicsEnginePlugin(this->serverConfig.PhysicsEngine())); + + this->entityCompMgr.CreateComponent(worldEntity, + components::RenderEngineServerPlugin( + this->serverConfig.RenderEngineServer())); + + this->entityCompMgr.CreateComponent(worldEntity, + components::RenderEngineServerHeadless( + this->serverConfig.HeadlessRendering())); + + this->entityCompMgr.CreateComponent(worldEntity, + components::RenderEngineGuiPlugin( + this->serverConfig.RenderEngineGui())); + + // Load the world entities from SDF + creator->CreateEntities(&this->sdfWorld, worldEntity); + + // Load the active levels + this->levelMgr->UpdateLevelsState(); + + // Some entities and component should be removed based on the levels. + this->entityCompMgr.ProcessRemoveEntityRequests(); + this->entityCompMgr.ClearRemovedComponents(); + + this->LoadLoggingPlugins(this->serverConfig); + + // Load any additional plugins from the Server Configuration + this->LoadServerPlugins(this->serverConfig.Plugins()); + + // If we have reached this point and no world systems have been loaded, then + // load a default set of systems. + if (this->systemMgr->TotalByEntity(worldEntity).empty()) + { + gzmsg << "No systems loaded from SDF, loading defaults" << std::endl; + bool isPlayback = !this->serverConfig.LogPlaybackPath().empty(); + auto plugins = gz::sim::loadPluginInfo(isPlayback); + this->LoadServerPlugins(plugins); + } + + // Store the initial state of the ECM; + this->initialEntityCompMgr.CopyFrom(this->entityCompMgr); + + // Publish empty GUI messages for worlds that have no GUI in the beginning. + // In the future, support modifying GUI from the server at runtime. + if (_world.Gui()) + this->guiMsg = convert(*_world.Gui()); +} diff --git a/src/SimulationRunner.hh b/src/SimulationRunner.hh index 438fc329ba..0af4a0138f 100644 --- a/src/SimulationRunner.hh +++ b/src/SimulationRunner.hh @@ -77,7 +77,7 @@ namespace gz /// \param[in] _world Pointer to the SDF world. /// \param[in] _systemLoader Reference to system manager. /// \param[in] _useLevels Whether to use levles or not. False by default. - public: explicit SimulationRunner(const sdf::World *_world, + public: explicit SimulationRunner(const sdf::World &_world, const SystemLoaderPtr &_systemLoader, const ServerConfig &_config = ServerConfig()); @@ -151,8 +151,8 @@ namespace gz const sdf::Plugins &_plugins); /// \brief Load server plugins for a given entity. - /// \param[in] _config Configuration to load plugins from. - /// plugins based on the _config contents + /// \param[in] _plugins Load any additional plugins from the + /// Server Configuration public: void LoadServerPlugins( const std::list &_plugins); @@ -373,6 +373,11 @@ namespace gz /// Physics component of the world, if any. public: void UpdatePhysicsParams(); + /// \brief Create entities for the world simulated by this runner based + /// on the provided SDF Root object. + /// \param[in] _world SDF world created entities from. + public: void CreateEntities(const sdf::World &_world); + /// \brief Process entities with the components::Recreate component. /// Put in a request to make them as removed private: void ProcessRecreateEntitiesRemove(); @@ -477,8 +482,8 @@ namespace gz /// \brief Connection to the load plugins event. private: common::ConnectionPtr loadPluginsConn; - /// \brief Pointer to the sdf::World object of this runner - private: const sdf::World *sdfWorld; + /// \brief The sdf::World object of this runner + private: sdf::World sdfWorld; /// \brief The real time factor calculated based on sim and real time /// averages. diff --git a/src/SimulationRunner_TEST.cc b/src/SimulationRunner_TEST.cc index e507877a6c..75457345b2 100644 --- a/src/SimulationRunner_TEST.cc +++ b/src/SimulationRunner_TEST.cc @@ -118,7 +118,7 @@ TEST_P(SimulationRunnerTest, CreateEntities) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); // Check component types EXPECT_TRUE(runner.EntityCompMgr().HasComponentType( @@ -652,7 +652,7 @@ TEST_P(SimulationRunnerTest, CreateLights) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); // Check entities // 1 x world + 1 x (default) level + 1 x wind + 1 x model + 1 x link + 1 x @@ -922,7 +922,7 @@ TEST_P(SimulationRunnerTest, CreateJointEntities) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); // Check component types EXPECT_TRUE(runner.EntityCompMgr().HasComponentType( @@ -1067,7 +1067,7 @@ TEST_P(SimulationRunnerTest, Time) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); // Check state EXPECT_TRUE(runner.Paused()); @@ -1196,7 +1196,7 @@ TEST_P(SimulationRunnerTest, GZ_UTILS_TEST_DISABLED_ON_WIN32(LoadPlugins) ) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); // Get world entity Entity worldId{kNullEntity}; @@ -1309,7 +1309,7 @@ TEST_P(SimulationRunnerTest, // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(rootWithout.WorldByIndex(0), systemLoader, + SimulationRunner runner(*rootWithout.WorldByIndex(0), systemLoader, serverConfig); ASSERT_EQ(2u, runner.SystemCount()); @@ -1340,7 +1340,7 @@ TEST_P(SimulationRunnerTest, // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(rootWithout.WorldByIndex(0), systemLoader, + SimulationRunner runner(*rootWithout.WorldByIndex(0), systemLoader, serverConfig); // Get world entity @@ -1433,7 +1433,7 @@ TEST_P(SimulationRunnerTest, // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(rootWithout.WorldByIndex(0), systemLoader); + SimulationRunner runner(*rootWithout.WorldByIndex(0), systemLoader); ASSERT_EQ(3u, runner.SystemCount()); common::unsetenv(kServerConfigPathEnv); } @@ -1450,7 +1450,7 @@ TEST_P(SimulationRunnerTest, // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(rootWithout.WorldByIndex(0), systemLoader); + SimulationRunner runner(*rootWithout.WorldByIndex(0), systemLoader); runner.SetPaused(false); // Get model entities @@ -1549,7 +1549,7 @@ TEST_P(SimulationRunnerTest, // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(rootWithout.WorldByIndex(0), systemLoader, + SimulationRunner runner(*rootWithout.WorldByIndex(0), systemLoader, serverConfig); // 1 model plugin from SDF and 2 world plugins from config @@ -1568,7 +1568,7 @@ TEST_P(SimulationRunnerTest, GuiInfo) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); // Create requester transport::Node node; @@ -1605,7 +1605,7 @@ TEST_P(SimulationRunnerTest, GenerateWorldSdf) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); msgs::SdfGeneratorConfig req; msgs::StringMsg genWorldSdf; @@ -1654,7 +1654,7 @@ TEST_P(SimulationRunnerTest, GeneratedSdfHasNoSpuriousPlugins) // Create simulation runner auto systemLoader = std::make_shared(); - SimulationRunner runner(root.WorldByIndex(0), systemLoader); + SimulationRunner runner(*root.WorldByIndex(0), systemLoader); msgs::SdfGeneratorConfig req; msgs::StringMsg genWorldSdf; diff --git a/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc b/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc index c0836401dd..fab58be000 100644 --- a/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc +++ b/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc @@ -405,7 +405,7 @@ void LogicalAudioSensorPluginPrivate::CreateAudioSource( }; // create services for this source - const auto validName = topicFromScopedName(entity, _ecm, false); + const auto validName = topicFromScopedName(entity, _ecm, true); if (validName.empty()) { gzerr << "Failed to create valid topics with entity scoped name [" @@ -503,7 +503,7 @@ void LogicalAudioSensorPluginPrivate::CreateMicrophone( // create the detection publisher for this microphone auto pub = this->node.Advertise( - topicFromScopedName(entity, _ecm, false) + "/detection"); + topicFromScopedName(entity, _ecm, true) + "/detection"); if (!pub) { gzerr << "Error creating a detection publisher for microphone " diff --git a/src/systems/pose_publisher/PosePublisher.cc b/src/systems/pose_publisher/PosePublisher.cc index fd167a882e..d4c9bc0d39 100644 --- a/src/systems/pose_publisher/PosePublisher.cc +++ b/src/systems/pose_publisher/PosePublisher.cc @@ -250,7 +250,7 @@ void PosePublisher::Configure(const Entity &_entity, this->dataPtr->usePoseV = _sdf->Get("use_pose_vector_msg", this->dataPtr->usePoseV).first; - std::string poseTopic = topicFromScopedName(_entity, _ecm, false) + "/pose"; + std::string poseTopic = topicFromScopedName(_entity, _ecm, true) + "/pose"; if (poseTopic.empty()) { poseTopic = "/pose"; From aadc7a68a33f70b5c9cbadf20bf8d4637b96898b Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Fri, 12 Jul 2024 20:07:18 +0000 Subject: [PATCH 2/7] Merge from ign-gazebo6 Signed-off-by: Ian Chen --- .github/ci/after_make.sh | 9 --------- .github/ci/before_cmake.sh | 9 +++++++++ .github/ci/packages.apt | 2 ++ .github/workflows/ci.yml | 3 ++- Changelog.md | 30 ++++++++++++++++++++++++++++++ 5 files changed, 43 insertions(+), 10 deletions(-) create mode 100755 .github/ci/before_cmake.sh diff --git a/.github/ci/after_make.sh b/.github/ci/after_make.sh index 2e1e59fce2..7e3bdeb02c 100755 --- a/.github/ci/after_make.sh +++ b/.github/ci/after_make.sh @@ -6,12 +6,3 @@ set -e # Install (needed for some tests) make install export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib - -# For gz-tools -export GZ_CONFIG_PATH=/usr/local/share/gz - -# For rendering / window tests -Xvfb :1 -screen 0 1280x1024x24 & -export DISPLAY=:1.0 -export RENDER_ENGINE_VALUES=ogre2 -export MESA_GL_VERSION_OVERRIDE=3.3 diff --git a/.github/ci/before_cmake.sh b/.github/ci/before_cmake.sh new file mode 100755 index 0000000000..308074bc46 --- /dev/null +++ b/.github/ci/before_cmake.sh @@ -0,0 +1,9 @@ +#!/bin/sh -l + +set -x + +# For rendering / window tests +Xvfb :1 -screen 0 1280x1024x24 & +export DISPLAY=:1.0 +export RENDER_ENGINE_VALUES=ogre2 +export MESA_GL_VERSION_OVERRIDE=3.3 diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 5ce1073d0a..6d25c175b7 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -46,3 +46,5 @@ qtdeclarative5-dev qtquickcontrols2-5-dev uuid-dev xvfb +x11-utils +mesa-utils diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92314d06ed..eac3a4b22c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,7 @@ jobs: codecov-enabled: true cppcheck-enabled: true cpplint-enabled: true + cmake-args: "-DCMAKE_INSTALL_PREFIX=/usr" jammy-ci: runs-on: ubuntu-latest name: Ubuntu Jammy CI @@ -45,4 +46,4 @@ jobs: uses: gazebo-tooling/action-gz-ci@jammy with: # per bug https://github.com/gazebosim/gz-sim/issues/1409 - cmake-args: '-DBUILD_DOCS=OFF' + cmake-args: '-DCMAKE_INSTALL_PREFIX=/usr -DBUILD_DOCS=OFF' diff --git a/Changelog.md b/Changelog.md index b92d820356..8d8b30726e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -3403,6 +3403,36 @@ ## Gazebo Sim 3.x +### Gazebo Sim 3.15.1 (2024-01-05) + +1. Update github action workflows + * [Pull request #2237](https://github.com/gazebosim/gz-sim/pull/2237) + * [Pull request #1988](https://github.com/gazebosim/gz-sim/pull/1988) + +1. Fix macOS test failures by registering components in the core library + * [Pull request #2220](https://github.com/gazebosim/gz-sim/pull/2220) + +1. Bump Fuel model version in test + * [Pull request #2190](https://github.com/gazebosim/gz-sim/pull/2190) + +1. Fix a minor issue in the documentation of the server API + * [Pull request #2067](https://github.com/gazebosim/gz-sim/pull/2067) + +1. Use sdf::Element::FindElement instead of GetElement in ApplyLinkWrench + * [Pull request #2052](https://github.com/gazebosim/gz-sim/pull/2052) + +1. Adds a warning if the `Server` method of a `TestFixture` is called before `Finalize` + * [Pull request #2047](https://github.com/gazebosim/gz-sim/pull/2047) + +1. Protobuf: Do not require version 3 do support Protobuf 4.23.2 (23.2) + * [Pull request #2006](https://github.com/gazebosim/gz-sim/pull/2006) + +1. Print an error message when trying to load SDF files that don't contain a `` + * [Pull request #1998](https://github.com/gazebosim/gz-sim/pull/1998) + +1. Enable GzWeb visualization of markers by republishing service requests on a topic + * [Pull request #1994](https://github.com/gazebosim/gz-sim/pull/1994) + ### Gazebo Sim 3.15.0 (2023-05-08) 1. Speed up Resource Spawner load time by fetching model list asynchronously From 335e363e959a7f151414d33c058112faae803efa Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 16 Jul 2024 11:11:30 -0700 Subject: [PATCH 3/7] Disable rendering tests that are failing on github actions (#2480) Signed-off-by: Ian Chen --- test/integration/camera_video_record_system.cc | 9 +++++++++ test/integration/distortion_camera.cc | 9 +++++++++ test/integration/reset_sensors.cc | 9 +++++++++ test/integration/shader_param_system.cc | 9 +++++++++ test/integration/wide_angle_camera.cc | 9 +++++++++ 5 files changed, 45 insertions(+) diff --git a/test/integration/camera_video_record_system.cc b/test/integration/camera_video_record_system.cc index 97380db6d7..a9f2dc5a60 100644 --- a/test/integration/camera_video_record_system.cc +++ b/test/integration/camera_video_record_system.cc @@ -43,6 +43,15 @@ class CameraVideoRecorderTest : public InternalFixture<::testing::Test> ///////////////////////////////////////////////// TEST_F(CameraVideoRecorderTest, GZ_UTILS_TEST_DISABLED_ON_MAC(RecordVideo)) { + // This test fails on Github Actions. Skip it for now. + // Note: The GITHUB_ACTIONS environment variable is automatically set when + // running on Github Actions. + std::string githubAction; + if (common::env("GITHUB_ACTIONS", githubAction)) + { + GTEST_SKIP(); + } + // Start server ServerConfig serverConfig; serverConfig.SetSdfFile(std::string(PROJECT_SOURCE_PATH) + diff --git a/test/integration/distortion_camera.cc b/test/integration/distortion_camera.cc index ce77238260..4b3be5c345 100644 --- a/test/integration/distortion_camera.cc +++ b/test/integration/distortion_camera.cc @@ -69,6 +69,15 @@ void imageCb(const msgs::Image &_msg) TEST_F(DistortionCameraTest, GZ_UTILS_TEST_DISABLED_ON_MAC(DistortionCameraBox)) { + // This test fails on Github Actions. Skip it for now. + // Note: The GITHUB_ACTIONS environment variable is automatically set when + // running on Github Actions. + std::string githubAction; + if (common::env("GITHUB_ACTIONS", githubAction)) + { + GTEST_SKIP(); + } + // Start server ServerConfig serverConfig; const auto sdfFile = common::joinPaths(std::string(PROJECT_SOURCE_PATH), diff --git a/test/integration/reset_sensors.cc b/test/integration/reset_sensors.cc index be904211f9..182a86f7e9 100644 --- a/test/integration/reset_sensors.cc +++ b/test/integration/reset_sensors.cc @@ -140,6 +140,15 @@ common::Image toImage(const msgs::Image &_msg) /// are removed and then added back TEST_F(ResetFixture, GZ_UTILS_TEST_DISABLED_ON_MAC(HandleReset)) { + // This test fails on Github Actions. Skip it for now. + // Note: The GITHUB_ACTIONS environment variable is automatically set when + // running on Github Actions. + std::string githubAction; + if (common::env("GITHUB_ACTIONS", githubAction)) + { + GTEST_SKIP(); + } + gz::sim::ServerConfig serverConfig; const std::string sdfFile = common::joinPaths(PROJECT_SOURCE_PATH, diff --git a/test/integration/shader_param_system.cc b/test/integration/shader_param_system.cc index 7f5307a3b9..ccec7a3bd5 100644 --- a/test/integration/shader_param_system.cc +++ b/test/integration/shader_param_system.cc @@ -62,6 +62,15 @@ void imageCb(const msgs::Image &_msg) // custom material shaders TEST_F(ShaderParamTest, GZ_UTILS_TEST_DISABLED_ON_MAC(ShaderParam)) { + // This test fails on Github Actions. Skip it for now. + // Note: The GITHUB_ACTIONS environment variable is automatically set when + // running on Github Actions. + std::string githubAction; + if (common::env("GITHUB_ACTIONS", githubAction)) + { + GTEST_SKIP(); + } + // Start server ServerConfig serverConfig; const auto sdfFile = common::joinPaths(std::string(PROJECT_SOURCE_PATH), diff --git a/test/integration/wide_angle_camera.cc b/test/integration/wide_angle_camera.cc index d2857bdccd..e3ec7700c5 100644 --- a/test/integration/wide_angle_camera.cc +++ b/test/integration/wide_angle_camera.cc @@ -63,6 +63,15 @@ void imageCb(const msgs::Image &_msg) // The test checks the Wide Angle Camera readings TEST_F(WideAngleCameraTest, GZ_UTILS_TEST_DISABLED_ON_MAC(WideAngleCameraBox)) { + // This test fails on Github Actions. Skip it for now. + // Note: The GITHUB_ACTIONS environment variable is automatically set when + // running on Github Actions. + std::string githubAction; + if (common::env("GITHUB_ACTIONS", githubAction)) + { + GTEST_SKIP(); + } + // Start server ServerConfig serverConfig; const auto sdfFile = common::joinPaths(std::string(PROJECT_SOURCE_PATH), From d8eddd4911db258132a238ec6698abac3bd82775 Mon Sep 17 00:00:00 2001 From: Pedro Roque Date: Fri, 19 Jul 2024 12:28:56 +0200 Subject: [PATCH 4/7] Added support for spacecraft thrusters (#2431) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds support for Spacecraft thrusters controlled with a duty cycle signal (such as PWM). --------- Signed-off-by: Pedro Roque Signed-off-by: Benjamin Perseghetti Co-authored-by: Alejandro Hernández Cordero Co-authored-by: Benjamin Perseghetti --- examples/worlds/ground_spacecraft_testbed.sdf | 77 ++++ examples/worlds/spacecraft.sdf | 51 +++ src/systems/CMakeLists.txt | 1 + .../spacecraft_thruster_model/CMakeLists.txt | 6 + .../SpacecraftThrusterModel.cc | 383 ++++++++++++++++++ .../SpacecraftThrusterModel.hh | 88 ++++ test/integration/CMakeLists.txt | 1 + test/integration/spacecraft.cc | 120 ++++++ tutorials/files/spacecraft/dart.png | Bin 0 -> 193442 bytes .../spacecraft/kth_spacecraft_simulator.png | Bin 0 -> 51892 bytes tutorials/spacecraft_thrusters.md | 105 +++++ 11 files changed, 832 insertions(+) create mode 100644 examples/worlds/ground_spacecraft_testbed.sdf create mode 100644 examples/worlds/spacecraft.sdf create mode 100644 src/systems/spacecraft_thruster_model/CMakeLists.txt create mode 100644 src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.cc create mode 100644 src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.hh create mode 100644 test/integration/spacecraft.cc create mode 100644 tutorials/files/spacecraft/dart.png create mode 100644 tutorials/files/spacecraft/kth_spacecraft_simulator.png create mode 100644 tutorials/spacecraft_thrusters.md diff --git a/examples/worlds/ground_spacecraft_testbed.sdf b/examples/worlds/ground_spacecraft_testbed.sdf new file mode 100644 index 0000000000..9d061f2fdd --- /dev/null +++ b/examples/worlds/ground_spacecraft_testbed.sdf @@ -0,0 +1,77 @@ + + + + + 0 0 -9.8066 + + 0.001 + 1.0 + + + + + + + + + ogre2 + + + true + 0 0 10 0 0 0 + 0.8 0.8 0.8 1 + 0.2 0.2 0.2 1 + + 1000 + 0.9 + 0.01 + 0.001 + + -0.5 0.1 -0.9 + + + true + + + + + 0 0 1 + 100 100 + + + + + + + 0 0 1 + 100 100 + + + + 0.8 0.8 0.8 1 + 0.8 0.8 0.8 1 + 0.8 0.8 0.8 1 + + + + + + 0 0 0 0 0 0 + https://fuel.gazebosim.org/1.0/proque/models/kth_freeflyer + + + diff --git a/examples/worlds/spacecraft.sdf b/examples/worlds/spacecraft.sdf new file mode 100644 index 0000000000..b28090c283 --- /dev/null +++ b/examples/worlds/spacecraft.sdf @@ -0,0 +1,51 @@ + + + + + 0 0 0 + + 0.001 + 1.0 + + + + + + + + + ogre2 + + + true + 0 0 10 0 0 0 + 0.8 0.8 0.8 1 + 0.2 0.2 0.2 1 + + 1000 + 0.9 + 0.01 + 0.001 + + -0.5 0.1 -0.9 + + + 0 0 0 0 0 0 + https://fuel.gazebosim.org/1.0/proque/models/dart/7 + + + diff --git a/src/systems/CMakeLists.txt b/src/systems/CMakeLists.txt index e09c0a6030..38b424583e 100644 --- a/src/systems/CMakeLists.txt +++ b/src/systems/CMakeLists.txt @@ -152,6 +152,7 @@ add_subdirectory(rf_comms) add_subdirectory(scene_broadcaster) add_subdirectory(sensors) add_subdirectory(shader_param) +add_subdirectory(spacecraft_thruster_model) add_subdirectory(thermal) add_subdirectory(thruster) add_subdirectory(touch_plugin) diff --git a/src/systems/spacecraft_thruster_model/CMakeLists.txt b/src/systems/spacecraft_thruster_model/CMakeLists.txt new file mode 100644 index 0000000000..9554f52dd1 --- /dev/null +++ b/src/systems/spacecraft_thruster_model/CMakeLists.txt @@ -0,0 +1,6 @@ +gz_add_system(spacecraft-thruster-model + SOURCES + SpacecraftThrusterModel.cc + PUBLIC_LINK_LIBS + gz-common${GZ_COMMON_VER}::gz-common${GZ_COMMON_VER} +) diff --git a/src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.cc b/src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.cc new file mode 100644 index 0000000000..7f65212ae1 --- /dev/null +++ b/src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.cc @@ -0,0 +1,383 @@ +/* + * Copyright 2015 Fadri Furrer, ASL, ETH Zurich, Switzerland + * Copyright 2015 Michael Burri, ASL, ETH Zurich, Switzerland + * Copyright 2015 Mina Kamel, ASL, ETH Zurich, Switzerland + * Copyright 2015 Janosch Nikolic, ASL, ETH Zurich, Switzerland + * Copyright 2015 Markus Achtelik, ASL, ETH Zurich, Switzerland + * Copyright 2016 Geoffrey Hunter + * Copyright (C) 2024 Open Source Robotics Foundation + * Copyright (C) 2024 Benjamin Perseghetti, Rudis Laboratories + * Copyright (C) 2024 Pedro Roque, DCS, KTH, Sweden + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "SpacecraftThrusterModel.hh" + +#include +#include +#include +#include + +#include + +#include + +#include +#include + +#include +#include +#include +#include + +#include + +#include "gz/sim/components/Actuators.hh" +#include "gz/sim/components/ExternalWorldWrenchCmd.hh" +#include "gz/sim/components/Pose.hh" +#include "gz/sim/Link.hh" +#include "gz/sim/Model.hh" +#include "gz/sim/Util.hh" + +using namespace gz; +using namespace sim; +using namespace systems; + +class gz::sim::systems::SpacecraftThrusterModelPrivate +{ + /// \brief Callback for actuator commands. + public: void OnActuatorMsg(const msgs::Actuators &_msg); + + /// \brief Apply link forces and moments based on propeller state. + public: void UpdateForcesAndMoments(EntityComponentManager &_ecm); + + /// \brief Link Entity + public: Entity linkEntity; + + /// \brief Link name + public: std::string linkName; + + /// \brief Model interface + public: Model model{kNullEntity}; + + /// \brief sub topic for actuator commands. + public: std::string subTopic; + + /// \brief Topic namespace. + public: std::string topic; + + /// \brief Simulation time tracker + public: double simTime = 0.01; + + /// \brief Index of motor in Actuators msg on multirotor_base. + public: int actuatorNumber = 0; + + /// \brief Duty cycle frequency + public: double dutyCycleFrequency = 10.0; + + /// \brief Cycle start time + public: double cycleStartTime = 0.0; + + /// \brief Sampling time with the cycle period. + public: double samplingTime = 0.01; + + /// \brief Actuator maximum thrust + public: double maxThrust = 0.0; + + /// \brief Received Actuators message. This is nullopt if no message has been + /// received. + public: std::optional recvdActuatorsMsg; + + /// \brief Mutex to protect recvdActuatorsMsg. + public: std::mutex recvdActuatorsMsgMutex; + + /// \brief Gazebo communication node. + public: transport::Node node; +}; + +////////////////////////////////////////////////// +SpacecraftThrusterModel::SpacecraftThrusterModel() + : dataPtr(std::make_unique()) +{ +} + +////////////////////////////////////////////////// +void SpacecraftThrusterModel::Configure(const Entity &_entity, + const std::shared_ptr &_sdf, + EntityComponentManager &_ecm, + EventManager &/*_eventMgr*/) +{ + this->dataPtr->model = Model(_entity); + + if (!this->dataPtr->model.Valid(_ecm)) + { + gzerr << "SpacecraftThrusterModel plugin should be attached to a model " + << "entity. Failed to initialize." << std::endl; + return; + } + + auto sdfClone = _sdf->Clone(); + + this->dataPtr->topic.clear(); + + if (sdfClone->HasElement("topic")) + { + this->dataPtr->topic = + sdfClone->Get("topic"); + } + else + { + gzwarn << "No topic set using entity name.\n"; + this->dataPtr->topic = this->dataPtr->model.Name(_ecm); + } + + if (sdfClone->HasElement("link_name")) + { + this->dataPtr->linkName = sdfClone->Get("link_name"); + } + + if (this->dataPtr->linkName.empty()) + { + gzerr << "SpacecraftThrusterModel found an empty link_name parameter. " + << "Failed to initialize."; + return; + } + + if (sdfClone->HasElement("actuator_number")) + { + this->dataPtr->actuatorNumber = + sdfClone->GetElement("actuator_number")->Get(); + } + else + { + gzerr << "Please specify a actuator_number.\n"; + } + + if (sdfClone->HasElement("max_thrust")) + { + this->dataPtr->maxThrust = + sdfClone->GetElement("max_thrust")->Get(); + } + else + { + gzerr << "Please specify actuator " + << this->dataPtr->actuatorNumber <<" max_thrust.\n"; + } + + if (sdfClone->HasElement("duty_cycle_frequency")) + { + this->dataPtr->dutyCycleFrequency = + sdfClone->GetElement("duty_cycle_frequency")->Get(); + } + else + { + gzerr << "Please specify actuator " + << this->dataPtr->actuatorNumber <<" duty_cycle_frequency.\n"; + } + + std::string topic; + if (sdfClone->HasElement("sub_topic")) + { + this->dataPtr->subTopic = + sdfClone->Get("sub_topic"); + topic = transport::TopicUtils::AsValidTopic( + this->dataPtr->topic + "/" + this->dataPtr->subTopic); + } + else + { + topic = transport::TopicUtils::AsValidTopic( + this->dataPtr->topic); + } + + // Subscribe to actuator command message + if (topic.empty()) + { + gzerr << "Failed to create topic for [" << this->dataPtr->topic + << "]" << std::endl; + return; + } + else + { + gzdbg << "Listening to topic: " << topic << std::endl; + } + this->dataPtr->node.Subscribe(topic, + &SpacecraftThrusterModelPrivate::OnActuatorMsg, this->dataPtr.get()); + + // Look for components + // If the link hasn't been identified yet, look for it + if (this->dataPtr->linkEntity == kNullEntity) + { + this->dataPtr->linkEntity = + this->dataPtr->model.LinkByName(_ecm, this->dataPtr->linkName); + } + + if ( this->dataPtr->linkEntity == kNullEntity) + { + gzerr << "Failed to find link entity. " + << "Failed to initialize." << std::endl; + return; + } + + // skip UpdateForcesAndMoments if needed components are missing + bool providedAllComponents = true; + if (!_ecm.Component(this->dataPtr->linkEntity)) + { + _ecm.CreateComponent(this->dataPtr->linkEntity, components::WorldPose()); + } + + if (!providedAllComponents) { + gzdbg << "Created necessary components." << std::endl; + } + +} + +////////////////////////////////////////////////// +void SpacecraftThrusterModelPrivate::OnActuatorMsg( + const msgs::Actuators &_msg) +{ + std::lock_guard lock(this->recvdActuatorsMsgMutex); + this->recvdActuatorsMsg = _msg; + if (this->actuatorNumber == 0) + gzdbg << "Received actuator message!" << std::endl; +} + +////////////////////////////////////////////////// +void SpacecraftThrusterModel::PreUpdate(const UpdateInfo &_info, + EntityComponentManager &_ecm) +{ + GZ_PROFILE("SpacecraftThrusterModel::PreUpdate"); + // \TODO(anyone) Support rewind + if (_info.dt < std::chrono::steady_clock::duration::zero()) + { + gzwarn << "Detected jump back in time [" + << std::chrono::duration_cast(_info.dt).count() + << "s]. System may not work properly." << std::endl; + } + + // Nothing left to do if paused. + if (_info.paused) + return; + + this->dataPtr->simTime = std::chrono::duration(_info.simTime).count(); + this->dataPtr->UpdateForcesAndMoments(_ecm); +} + +////////////////////////////////////////////////// +void SpacecraftThrusterModelPrivate::UpdateForcesAndMoments( + EntityComponentManager &_ecm) +{ + GZ_PROFILE("SpacecraftThrusterModelPrivate::UpdateForcesAndMoments"); + std::optional msg; + auto actuatorMsgComp = + _ecm.Component(this->model.Entity()); + + // Actuators messages can come in from transport or via a component. If a + // component is available, it takes precedence. + if (actuatorMsgComp) + { + msg = actuatorMsgComp->Data(); + } + else + { + std::lock_guard lock(this->recvdActuatorsMsgMutex); + if (this->recvdActuatorsMsg.has_value()) + { + msg = *this->recvdActuatorsMsg; + } + } + + if (msg.has_value()) + { + if (this->actuatorNumber > msg->normalized_size() - 1) + { + gzerr << "You tried to access index " << this->actuatorNumber + << " of the Actuator array which is of size " + << msg->normalized_size() << std::endl; + return; + } + } + else + { + return; + } + + // METHOD: + // + // targetDutyCycle starts as a normalized value between 0 and 1, so we + // need to convert it to the corresponding time in the duty cycle + // period + // |________| |________ + // | ^ | | | + // __| | |____| |__ + // a b c d + // a: cycle start time + // b: sampling time + // c: target duty cycle + // d: cycle period + double targetDutyCycle = + msg->normalized(this->actuatorNumber) * (1.0 / this->dutyCycleFrequency); + if (this->actuatorNumber == 0) + gzdbg << this->actuatorNumber + << ": target duty cycle: " << targetDutyCycle << std::endl; + + // Calculate cycle start time + if (this->samplingTime >= 1.0/this->dutyCycleFrequency) { + if (this->actuatorNumber == 0) + gzdbg << this->actuatorNumber + << ": Cycle completed. Resetting cycle start time." + << std::endl; + this->cycleStartTime = this->simTime; + } + + // Calculate sampling time instant within the cycle + this->samplingTime = this->simTime - this->cycleStartTime; + if (this->actuatorNumber == 0) + gzdbg << this->actuatorNumber + << ": PWM Period: " << 1.0/this->dutyCycleFrequency + << " Cycle Start time: " << this->cycleStartTime + << " Sampling time: " << this->samplingTime << std::endl; + + // Apply force if the sampling time is less than the target ON duty cycle + double force = this->samplingTime <= targetDutyCycle ? this->maxThrust : 0.0; + if(targetDutyCycle < 1e-9) force = 0.0; + + if (this->actuatorNumber == 0) + gzdbg << this->actuatorNumber + << ": Force: " << force + << " Sampling time: " << this->samplingTime + << " Tgt duty cycle: " << targetDutyCycle << std::endl; + + // Apply force to the link + Link link(this->linkEntity); + const auto worldPose = link.WorldPose(_ecm); + link.AddWorldForce(_ecm, + worldPose->Rot().RotateVector(math::Vector3d(0, 0, force))); + if (this->actuatorNumber == 0) + gzdbg << this->actuatorNumber + << ": Input Value: " << msg->normalized(this->actuatorNumber) + << " Calc. Force: " << force << std::endl; +} + +GZ_ADD_PLUGIN(SpacecraftThrusterModel, + System, + SpacecraftThrusterModel::ISystemConfigure, + SpacecraftThrusterModel::ISystemPreUpdate) + +GZ_ADD_PLUGIN_ALIAS(SpacecraftThrusterModel, + "gz::sim::systems::SpacecraftThrusterModel") + +// TODO(CH3): Deprecated, remove on version 8 +GZ_ADD_PLUGIN_ALIAS(SpacecraftThrusterModel, + "ignition::gazebo::systems::SpacecraftThrusterModel") diff --git a/src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.hh b/src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.hh new file mode 100644 index 0000000000..77b0dbc715 --- /dev/null +++ b/src/systems/spacecraft_thruster_model/SpacecraftThrusterModel.hh @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2019 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#ifndef GZ_SIM_SYSTEMS_SPACECRAFTTHRUSTERMODEL_HH_ +#define GZ_SIM_SYSTEMS_SPACECRAFTTHRUSTERMODEL_HH_ + +#include +#include + +namespace gz +{ +namespace sim +{ +// Inline bracket to help doxygen filtering. +inline namespace GZ_SIM_VERSION_NAMESPACE { +namespace systems +{ + // Forward declaration + class SpacecraftThrusterModelPrivate; + + /// \brief This system applies a thrust force to models with RCS-like + /// thrusters. See tutorials/spacecraft_thrusters.md for a tutorial usage. + /// Below follow the minimum necessary parameters needed by the plugin: + /// \param link_name Name of the link that the thruster is attached to. + /// \param actuator_number Index of the element to be used from the + /// actuators message for a joint. + /// \param duty_cycle_frequency Frequency of the duty cycle signal in Hz. + /// \param max_thrust Maximum thrust force in Newtons, applied on the + /// «on» phase of the duty cycle. + /// \param topic Name of the topic where the commanded normalized + /// thrust is published. Unit is <0, 1>, corresponding to the + /// percentage of the duty cycle that the thruster is on. + /// Default uses the models name. + /// \param sub_topic [optional] Name of the sub_topic to listen to actuator + /// message on. + /// + /// This plugin replicates the PWM thruster behavior in: + /// Nakka, Yashwanth Kumar, et al. "A six degree-of-freedom spacecraft + /// dynamics simulator for formation control research." 2018 AAS/AIAA + /// Astrodynamics Specialist Conference. 2018. -> 'Thruster Firing Time' + /// Phodapol, S. (2023). Predictive Controllers for Load Transportation in + /// Microgravity Environments (Dissertation). -> '5.3.4 PWM Controller Node' + /// Retrieved from https://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-344440 + + class SpacecraftThrusterModel + : public System, + public ISystemConfigure, + public ISystemPreUpdate + { + /// \brief Constructor + public: SpacecraftThrusterModel(); + + /// \brief Destructor + public: ~SpacecraftThrusterModel() override = default; + + // Documentation inherited + public: void Configure(const Entity &_entity, + const std::shared_ptr &_sdf, + EntityComponentManager &_ecm, + EventManager &_eventMgr) override; + + // Documentation inherited + public: void PreUpdate( + const gz::sim::UpdateInfo &_info, + gz::sim::EntityComponentManager &_ecm) override; + + /// \brief Private data pointer + private: std::unique_ptr dataPtr; + }; + } +} +} +} + +#endif diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index 8c616bcbe7..8afc9cfe24 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -71,6 +71,7 @@ set(tests reset.cc reset_detachable_joint.cc save_world.cc + spacecraft.cc scene_broadcaster_system.cc sdf_frame_semantics.cc sdf_include.cc diff --git a/test/integration/spacecraft.cc b/test/integration/spacecraft.cc new file mode 100644 index 0000000000..1af76f87a0 --- /dev/null +++ b/test/integration/spacecraft.cc @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2024 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include "gz/sim/components/AngularVelocity.hh" +#include "gz/sim/components/Joint.hh" +#include "gz/sim/components/JointVelocity.hh" +#include "gz/sim/components/LinearVelocity.hh" +#include "gz/sim/components/Link.hh" +#include "gz/sim/components/Name.hh" +#include "gz/sim/components/Model.hh" +#include "gz/sim/components/Pose.hh" + +#include "gz/sim/Model.hh" +#include "gz/sim/Server.hh" +#include "gz/sim/SystemLoader.hh" +#include "test_config.hh" + +#include "../helpers/Relay.hh" +#include "../helpers/EnvTestFixture.hh" + +using namespace gz; +using namespace sim; +using namespace std::chrono_literals; + +class SpacecraftTest : public InternalFixture<::testing::Test> +{ + protected: std::unique_ptr StartServer(const std::string &_filePath) + { + ServerConfig serverConfig; + const auto sdfFile = std::string(PROJECT_SOURCE_PATH) + _filePath; + serverConfig.SetSdfFile(sdfFile); + + auto server = std::make_unique(serverConfig); + EXPECT_FALSE(server->Running()); + EXPECT_FALSE(*server->Running(0)); + + using namespace std::chrono_literals; + server->SetUpdatePeriod(1ns); + return server; + } +}; + +///////////////////////////////////////////////// +// Test that a thruster duty cycle command is applied +TEST_F(SpacecraftTest, GZ_UTILS_TEST_DISABLED_ON_WIN32(InputTest)) +{ + // Start server + auto server = this->StartServer("/examples/worlds/spacecraft.sdf"); + + test::Relay testSystem; + transport::Node node; + auto cmdDutyCyclePublisher = + node.Advertise("/dart/command/duty_cycle"); + + const std::size_t iterTestStart{100}; + const std::size_t nIters{500}; + std::vector poses; + + testSystem.OnPostUpdate( + [&](const UpdateInfo &_info, + const EntityComponentManager &_ecm) + { + // Command a thruster duty cycle + const double cmdDutyCycle{0}; + if (_info.iterations == iterTestStart) + { + msgs::Actuators msg; + msg.mutable_normalized()->Resize(12, cmdDutyCycle); + msg.mutable_normalized()->Set(0, 1.0); + cmdDutyCyclePublisher.Publish(msg); + } + else + { + auto id = _ecm.EntityByComponents( + components::Model(), + components::Name("dart")); + EXPECT_NE(kNullEntity, id); + + auto poseComp = _ecm.Component(id); + ASSERT_NE(nullptr, poseComp); + // Collect poses + poses.push_back(poseComp->Data()); + } + }); + + server->AddSystem(testSystem.systemPtr); + server->Run(true, iterTestStart + nIters, false); + + // Check for movement in the right direction + math::Pose3d lastPose = poses.back(); + EXPECT_GT(lastPose.Pos().Y(), 0.0); +} diff --git a/tutorials/files/spacecraft/dart.png b/tutorials/files/spacecraft/dart.png new file mode 100644 index 0000000000000000000000000000000000000000..2f109cd5c0c1fc70dd0d5ae842517a4927f52be1 GIT binary patch literal 193442 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℞SI}6mBS{yAaA@BsQQM66& z_-f?NzKzu$-xKMJwRQS38cHUhg=p(=Rt67fyJygq-hBFmRuo^|v@ZXUg#7z>%XxRx z(clG~EB0zyOQZj9Ha$92Y02 zbi>IZg_q7No58GC_jN;5{0}o5JiM;BT=ON~x+^v}Q(w8ZYt0<^V1AZ<5%tkmchP@Y zuIUm~EiJ60PdXvb-*3rR$30{vU`wd$xnU8iCEr&`Zvad6$s^mg_O?!eyLx|_=YUkc z_zmT%XN*9=?iYSac4+jl1>uWnfw>kO#q z4Ku4|%jhjv^M);tX4#5Qe#VTUpEdm6fy6XC93OuqV4$Q-`1fJ+z7(HFCU<-K70dIo zePqGe;UzsD?$PeO5;ym$1EWOxoNYtIglA{0 zyU7Y0`_o4;`Ts49Mc9Twu2j@2AMUulLR0yy zN^rv-RJ^j@M|xTzByGBbhF;`^kI_fV9w(R|J~jAWR0hL_hQM>~jbh`CD4h&{9~Jn` z#)MI}JI(RN=2z+8&;8HxWH(ROV4I_RGL|OZawfUidY_O}aFLIt_404)dH(GUyJr~D zhD_?elS|?GN2YsTcz%`3MtXwY@v^Gws-X7D1hw9?orw?n+4jW#O)7gqO2@6AzEw%e z!tN}z6cR8warCAb)3=x*$BnkSabR#?>ppr=PGMB5{NoG1Zy)h;|J976Hphst`Jtnj z`NGTm7Mk(U8dnuCsHxMg$Q*^(w;OReVZoG6!H6ASyAAJl43B)ZU)lswkS0#jT&r5E{g_Z?U7CKKJ?n4#pNpA{*u38o* z%F2E{H9M(UuR`*;&P=l{J8y58%iL@b2&9Kx=srGU)-LlQyPv;aK1C^Uzj1IAT=3m#&^++%qob$C5e)5H`+il|(7?a6 z*W25x+r-GgAmvma85#K`4i_I^rbcq9;(s18S>|uF_$ZzZzi@r+GG45ec6zsrfr%+y zW2UXG-KKwccgN1fC8whD$=zKboLe1fb7v>XN`+?0&W#xZHT!>p~J_v%DGQY&VnX;HJI z%(wQAoN|hb!)o7rVaB-1O&;uOF#gO9oG>Njcqya{)1vv#p*-%zBV+?3jIVEQoVRnc zhwGXjH#h=K-EJ|-;%R~fVrJJ$>(1HmofV6ay$v2xb@{5 ztE#Iv8tW!eC{IXj+Wqja;VLRB{`~n9K9R=atLEg|INyM9b98Xyx?dY0mBcAkqd^xl z5-52w&o$rG({xcTU`g~``q9EZzIhZ+L>5WHyiAU7rWLV5;MIpFX!hR2Ow zrt~pW^ClCKkOcR~+t<(Gv?b~p4ASsf;?ela4ON*pLO4MuLL{|0|ODTYn|6RSM6-f(&Q=)P~0Kp=LG#0Rdo`z6-WRS^ z)inH})UNMQsmZ0gn!^Ohu)rQZIY=6?coMF{UFbaWU+5Pf>961eKi&+fX^Y=cP7deo z{Q5M}JAcp}zAu)69mM-dk zUtHnHQZ!yPfrqS#6qvJ`1{*aoA*P@(<~x(=YSXKC!C^bk{wn#u8m^me?(K!_9u=yT z(=0tisd@dg)4o$)2j_b;M^|n@?4wwqtkY||!H2@0N*sTBCjDGjk1C!ub!N{Yd+wYo z>a)vCl{t8(PB#>3&T#Q8zYBStXzK^?g(&Xu=C=^OFfcGU7h7-wXH)KcVj!1VpOMjC zaX{Sv1U@Jz2dJR^cIJ%b9~?Uz5)zWtAICu#d?FynrFP;r@+32) z#d)POga_l2Hb2_T#3Vf{%YQ6i34W{k(C^eI2lxxUNqWdM3*l4!E_tn{pFvT842JLz!4U%hR_iKLsKrQObi8InwtIU{j32WNOvQj)QSMd&Qe zL`*mcZ4oWCK%$xkjjJY%=;_BE%mk-%WWA3_q0<0ikXcZSXRc~I0R;ihY^ux;_z>9I zGzQ}0^71GkPW#n-VKx}!Z?(DWP!9>k>G74BLdmSJtFx+Auc)emo8mFw+F*()Namh6X7id3X?H&aTT}H~{m*eUtS0 z1(zz#(y88s!lUclXkx*v@(6plxFxXt9;6FD{~0#M^YFuV9!==a_*cKxnE3l4#e=K8 z_FQs%2n5>2*$L!L4h#}S*W7UfzFzxchYe2txCeD1(?PN!QSf#`$1p+*LXs#HPX4X; zY?I0Q&++}p`_>EAWR$czhM$uIk++T5Bf{u*rfe#-NtfDEN0jM2;o{)&WMq@x14n5eSLjQ z-G3%FPKIV?Os9jV_GYR9EHLW5z|4i753H*jXAIa@z0Z+XJ3l`=`=Y5y=KQc;=Eo(; zFYVN*2?8+9EaOC>ONunDf`Y>7`FY~ArbHEM^b(6XUSLp?JoANMjxxY6s%mN{9_fK2 zTY7VK_7R6%GeS38p%{#DLBqqc{A5_foMzpwn}l~fhIiLz5f>lw05pgc5N-J#HDfb0 zOdQFlxO(#o85_HYmH7Fa+K}dlX=Ii4j}JQjjWQ?A%_=Q67XyY&ul4r~?_)S1h|g2! z&ag-q28unMy{9m$za$;=;-Abj-4Y)N+^lU9V_8q&JCrQqTpV+q*$x+ogVCMpf0IU= zPzjpDfwL3Kg(gyP4Sr@X)q#yQ;m_+BidLt4fY>Uy(%BNQw$5CDrFQN)fOYz|aFA9) zm~8PUdKbw?Obi*uqMGj@CQLM@JmIG$@0jD1F2b#WuO&=jVIgp)BYA@W4E}1)-uhUn zU);5#1J=U%>K=!bb{|Y6AR;2tW$aT}WS?>mx$xwyf8BE06?}Yb^LXg1Ej0SgkB`c& zcvG_cikUT?XQrkSE-pNZ+84G8zzSm!bN(3}jUHXNHM8MOi8!bRXWJ%Hg;B;N2>&jD zerTc5tok}2u z6&-nYz7eZ;Gl(`%s{6)njZhxUg8xhuh%daQXaN^yW%H^AIK#SZ-w8EO>Tj9#(I=>5HXZLo5T1YcFesLUNA-h|GG|0N( zj!gszK|)AOHd@K~dzYb_VSI&W{sgkMFGyFp?=2V$l}Gn6rARE69+clHnY)>tq%=4h>)>h0 zVMna)&eb~(?}U;IkzG{-0Hmj}= zl9My9(B|q^PC<hsWJ#=q=f8glR zPjyi1jm3yo0-Px{sv)WQCOfRug_C)-J?x+BrmG;v&?JnjTkczbqU# z|GdB?IT|UOXtebZ+=ffHS_n}W`S6IHXK6JPf6bpdPTCRx#ZpGLp&;8@XE7#Ux=8umvacY z&`nvKBcipKO&h*SB-iH1}Q125v1l?^vs*<>zslD$@(>08qm9g zr?_)Lzxz(z_?vr5x{UAlII!VI!MzLn`xYb9n#9m4;4?33+eZ{0)_1N#whbZYrPD&- z^ufPpwrPmdfReUjj~!1o)g(I-a6NhV>5OBvAER2SlO?PpC^`7_+?E&R*W{Ba1HKy( zznF%*X>pJH!x6ibhR_}H(Bok=vDb|z0&)8BWz*|ppB;_4PyN0$@TGO`6s(n-;%gHV zL(pGoxRY{}H?{X^xV!zZBR6MC)t$PrSRGD)1c$)-Nz|@y``zB=;vc2f`j4@(sYQM3 z_WSskVCW$9vb43e?O)s5+hft9#i7<8HmJ_ceNsHp*BL^5!aD+es-bTtYPzubXDay5 zjB>lc#Vka16MbosPw;f0`Vm%|n$q458oGkRB%45={3(ZB;bsoN1ppByD@~Q!&N?I< zJx=Aju*168j1Lo`RrUC+R937zPK$QD*0t&YjE=O?WNfp~L1gO+?=glvvC8jkKk94l z#xkhURNO(w)Qx?tNmz*l(;>56fvw#Qj9fB_)R1HdIB4F_h{6owW9 zU~d55^?~bn`PQD;U|oJiEy!_8hyuU_mSBbm(DjGOn*u}@#3026=L&E19+ym zx{V&Bn@*-SG7R7X2uO(_UmjkIN|SD^{$Vb@JGBtJI>}KB#$@5NWw~qr3cO8EIk?cH z`;R-yJub}2(VlN`zEV{b|4Wc4%e(mjI6hBY%O7Fq{Yx*8C?o$G&^A*bF8JR3QX7ij z&9Vf(2K4w1A?A{mm1SMx=ssJ|f^Gzv#HKf^_W>2a#PXDkvn_9KSmy zio6r(W|tSIeu|<;(quU8Qe9mgS69ai0EG>w&@{73_~_V}U*B4KWhHL+{_Un-t$NYN ze0{d(`1rKw*C)9@e|mv@Y9us7Iy)*ckq98Ek)rE?=r335s;Y@&5IMRNT`s`4T;xq$ zu6(nOOgyTd4j-r;W<X0J^-qJU0gVmw&y&8-u#o!CI6^8Z{s2hD2T+ z`y5`q9O96>ySp7AS5#C2`_|glY)VZhiYoF6M=;WFZf>a9sDXEtGR_AG=aZ{zeXf_O zsVP19i7Y?9P9lnja_S7i6aE3S%v#$GX(D1`HkV*YwS((B53p6`WG&gxK7!2oFHUXV z(DkU$DT9cMiHY^=PwiJcH7`p`n8K|Fqqo4v$FmxaYaw!6_(u3X{vBJ|vSm;7G1NS&8VI5;F!m+4iD zfmUbau-vZmK-fuaP~aP#Q}%4(^7zcv_af8`yl&vGnzG2Lfj$J1Vf;eNPGU`OB76_8 zeh9Z}%hzoRCH>CBQ!ll2XmEVzEDM)JzpT|1VG(4&;801{2+rUJ2P(ff-P_t?amNr$ zV`9~s?&omgPyL7tQx1~MM}F?COX_9#xf6eZS~VjR?1X$*G(aWbmkl0;l)Vt7)9lpT zR%Hk!FpLSj>+V!}SHIXlg&*`SoP=4Zf9pM z$Dy@G4?+oVDZ)#RIim&{!lzj}xE1s6K(A-SsX?pTA90sWgXhbLZxWJ5;h8gj#iuXf zkO)q9JyB!Pf6_M7wybLq+|(K&Y-wFq6vbf;vHu0h1CMYiQuK6ja z`dM?Aee*S*(9PhT`so&y%^4gr7_!jezTlerU1q)`O|z2d!Zpunz4hkOqC=}}DNEuN z8E;Dz)@)aMwxz)c=-T>8XB;0?jOPD>f8DanmWhJ5T_}%XOfp5sw0~&eSEhB=J3GL& zXlQ7tnC2%-KQ)&p0wo(!)h<1HX7Nl!1HcAq7UNgXNC7KV)%lY3t^(U3QRN7Ii7+vV z)11{F!`$2)0GFXr4zMwc4)s!4Pa8BX=f|1HSTfVoDTiYy(t=mM553TB_s4j4Vy;K(wupL=dDGs&j5irxc+mLdDeIiqk z9+1vdTO#*wJ=bZ#JSz7*8LEAmc*G;Om-a#A&F_7R)6U|Wivtf_SLg1*<(cN+T!Q?> zNsV9OTxah{Fi|rYlU&cFMq}>jv1ZSdD(aeBxVXSfD7fz=D3Gc60p&rdxywm96DgC3A?n&+V7P*(zs zsn_w1;T+`G=$=mcm$vgA2hCB?uzTW%qs6$Z)4O+O=ajvS?pSHJ`AN^OzkmDnmjg`> z4Z;VcGYzAmawK^8^Z2%R{Oiw39aYA#ML)8q@(6#+0+PF32?^FRZ`B_b^ z53DbZdR*`ArqLD&KjC*f@Lxj$ruXh(~+mMTpDIPL5P1$Ip+uBd8uB+&{4|@;KS3Tly)fySt^OSNM^K;{axW2d3Yc?NL8O8d})UP+Y=1O$n`5gCum6wlHPAmfH(@$2aZcRg6hUzb1_>^SY3J&4sNg4Fw5$LkfEMCI=P* z9PqL64l`G`q%7~#TU%Q{sqq_9QFzY|+6*{6HILzhvJP(90irhmy1}-`jk>fz2*IpM z*m*p_0K&?Ha>H$E7ON01ab)iA!S#X(k-fSQNE?7uIr;fPDryyyov_r;+-F}iFl2&c z6R>o*9-gbECoE}#iG6EjB0C$Kgxv-Tb42DPWA`c|t8il%1Q+*rSWZLadP{|A5DkT) z(~C#(#dp=mJC&=-fQGBkn^w*$f5$hrUeL7y8($K8`Sw*@QduXzPI-)V}ZgajG}21XXrM@2QjDl16tOxhXNcJ_@YZ`$QO2Lar1f7aL~NS`9BBWfI5 zGhpF>%e<*@oaKraRAQn8b6-Whb*Y1dvLN%`JF(2&8g;)3=M3fZXifvb6K2-J5pW!Y zqH0^KT$P@9*gYY+ssc&dr`YEWlYNV`3hM4#ZU#BoW#7K7=}m8|JmTPwp{u6;maKd9 zYO1P-E{y<3eNj_GTQyKLWz`7>z^tHSGI@XYub3zr-(qA|#40Rr5*VoTHYfXi2WE2(-oGvKj_iK(H znNjBZ{n@G@7&NH2XkH-a!5&2UYRi%#IIV{}OcsU=B7usE%HaB_47hs{h&#^(I70Y7 zBv8iCb^Zqu(P(*DmYEuxn80=SiO$O>m4OHW&@^CMY0b>Ch~694VVn9wkH!QO5Z?OB zb84NiK)DFL-hKtu656c7G8MqNy<%eG5=btQotz#X)(xcF1(mJ_&EhQ~;;*1g(b-^G zhKrI(Bm(LzABp#!avdPdzh+YFL1GJ7BAD8wsYG=8yCxTYvXO;$(H{nWgRqKEJPRG# zldFny*D3OR%xR^15pC=n5WYy1OtLS$OSm}L}_yU zMgE}{fKY+bCPBzq%_qz&ek;Pfp^Oy#TO(rpdvIxju-x+V^QC6ED~1a==_@hV$Kh55 zIol{#Hll(O3VM+KC>klCEq%pd79fD#LHNTwzdp6Q z*ekA66O;EN+w^s^Btc5y`79|ZDN7e|x%Z}*7c5{bcP5IVQw8ICD!FjA_4UNeo-`E- z>oYz)w7D9oox;Kma+(AEQzwh;b=rzy@J;rn0H^<3u?N9xR2+6S|b6e8Bs+u?2*f+=RGV0?yO?_ahIk@q$@kj>w={`T28MD zhKRitjgXD{3oGAuSlhvv`#t@Qx+fZP@qyy0Hi%VEJUvg&_@0xVn=Le@fQJQZL28?% zr)r%|^j>D-nsew(Ta(@*tg9Vdjn8h>5WKv*_x%}9_^h$Y;58#->gff|Lb5b1$XdV= z8j-;R^y=vNxb%#;;Lr`leVG|aTx7~cQX$XK2x%JdV32iT;^Vp0`t)?~`FYJMi#Zb$ zQ;X~o!mC+rhmOM1*zIi-KzhTR&{bqi4A0GxUhyQ{Im`T&9nk!}tKQ9?4zE=`Lu#wR zsX8lNZJcP-ZZ}b+@t6#O;@@M5`Brn8a!Jpii%D{**Ge3q@u|f%6OhMf~i7< z>QZGO)=vO7X%T`9DwYQoaoP3ezY~|pFKTB_jcONOM90vDzqp+SkC8|w;=>``!a_hx zE5$)RU8B)p=WP_{O?bkUv9MxLxy)&SBY-tspg61D zxL93Yj>GI}k>4u*t|Dey#-~y>mX`Q_U4qq92**9u`*t9Zlj<9iZW|z3x8rA4`P?d1 zfqF=n;~z`<>sQPAP1xLY+(Iom^Gw*Dq+tN>L-m!D&5d*1ut9KWDOzQWM=@~&Z5-Xb z@EP;h%C^@fiXZ4(QXJ=dfN4lwX-L~Ou)cQzYh$sZKmDCA^{Bj8lzv|_R1Jg!SDDvIBZruLm55`$xw#3`875Vmh$Ap(-4~C)cXIU{Cg_{U zUvbmc-Dt7PH{s;FLy6)z)}UtFHukT_ZwcCF>?xqEOzvd zhriXstWfZ#0I}vDK0(z$z(DDyvs~56P_cw(jKvhxk|QXlgB53)J$705iRWS zErGX=!I$60aQAZ0V+RcV_nv>~SXwyoj^u&qPi~&Hc~?Q$x^CCSxU!mj36W@0weEV@ z2bv6!L_ruODp85b9G``Zg$j2bge!Qn`VEZ~cNtll`K2X{O*5#O3s6!T{9X9}T7KAk z#HLQ9Z0JV&o`ah1y)oyEq@m9dk(Yg*@<_@?(%#|JQ}XxOMDu!VZlP8BeRv>4MvuoA z6f0K^GR#Mm4Nu{OLb8#z4%`#&@0dpBO37Uhsk6lv{UR=OX?>Zv173cBCHXpl2# z_ig41vjg$-Nu4i4f+YjLbv&cW=qbT2`%+dLtmJ6wHd!!5DsdLsDj z6%1YkTFN7f{weM+m(H%ta#%Tyq+-`%;x~cPNzY#R?7h#~`W2B-wVqF!xp|MI>VilHhh|=I}?fyjs*_pPU8w;&Ezoz z2Q5tE75F`G{aZiFUlQY9A_*@&__t{V_)&19w#bTo_2+R_Rz1{6-lxISaJE<7>5m3o zOfulTV)DWZl?UdBha;oTTN9EcN9O0ro_L;&eRs`^G68}nkbUB)+HU}NXV7stAzqjk z!l9CTjo&Hru~fXz0z1NOvJ`?06vY8keNO=v|E!~Woj~`arz0z&l%{$n#hQN1EU+l2Qrt+pgF~gT7r8(sMZZCM#IK3@NC5A_p0hc- zht9MdTTljnToQlO&fZ?iDby?g8a{he2=a$Y(+QdeM#4GdpxRe<@LX>WPYz2+zYej9 zDf8NrSy~TG<;_2Zuy`?9<2F0&R#Euw8Zu$Qal&8*^Gw;A;7Uj=b&m+KFc_l*KW%`-DIfm93xOso1iXX6e5+{Z{tq8$T81Vra!LG#h#Ie<9DAH>zV`ueFl z`}~*V)Q>tFo2JKb`Z4+~h583}X72Y7EhsRVFa6%w4Y1m(M0#zaE&vv?do5RSSkINl z1ZYGwi@Bb?PinL_9#eD^)enmqkKX5BP#3St<6J1<6vnqvT8j%D931T4?cMTDG*c7= zhPn{k7Yxzhg&p`wx&S%V#`&4xIr!d?9C>i`cy?avaD6f}xbPMY1&I(IB}C~23Dz58 z*c@7XPTH*D$MAMHe0yNpQ&(`lupO%^HUOxX`pIP&Qr|8S&{_ zDeVuGX7+d{Q`fvPMerI1C(IJqk5l7(H@|DQJ8s2`p(mUGQT6~Idg^KP}m z4(ebf5jB?6O4V*KzYJvaSB)pF5C+rFXYnfZ-8wJQ ztEx2LMP@WoK4;TI1o!OqKkl3OFmDQPo}129{n6nxJKQUhTk%; zz$MZLmp-D9=wmjK(R%yUv-@=)>-2aaeXx^uX?nkDr)o{>5|+hl0F#wwi=}tQ2GZ{s z<=2<)Cznt5k9I-d-z7|5at#wmxhn?#K$7WkFL2k`1At-b`STsukL3P@&^DAKwAR%eBcCw z`+fQ=1|0HYSdMVNDkcK}hv6O~E}V}j4G2#|pzVrvDTGN(N}6hLE(eZi2pp-twcb~g zTTYn)I9^uYObH0Ruql`k0^pWrM?8ttR8oYKU$0bd@9$?-R*tdK4iT`KgWjsro}Qj(_-o1L=JGYi^xR{IUJw2mvHeqV$P)q5+M&@=z1%#l?2%8x!ai$x z5lRKh@7&!RGc}pOOZN60pi&Q}FO13Vu)a6Wukdx`O=0! z*b%#^)R(I%o2;P0nb0N*6D58_E7cXMps1VqjGaoZ$vpJl| z+CcNXic576$Mg6(RbO1Y2}&Ri+3CK_j)zyPaD*q{a=V6ZegLThGK+B$)wv5yzyOLTDNbG(#9ODH z>iCkWiHO@ZOul{NXULa_;qKm^{$pjvWNgr**>gG} zJE5O%@2}`GbbNfgTR)*{YS154XF1KM^#WliR839uU*@})53Nr*u3Gg^P|g0HRNkSk zPMt5a;dZ7=hIAq~ZG7KIb!9l?<1w%)V>mTNAmc zoLR9T_Dom1J+lsrcz?Vi=``X@#s|+*8|H zY!mwO67(>Dag`kFr+~h!ksM||rW3kcvA;cQ?|Sv>wZ6e0>A6Ok!;vs0=}jAIO5NBK zHr%J!pN5WmuWt9Z;IyOPcae~UQr>oHA-`WN`SSH{*B}d{#HZcEL3r37-u2R^KID)l z>u#4b6C;4CA>l$6Uz;AmY%+uMi(@nI5#%RToj0vZ`&jA^DTrjH^sN1tytn~sLH1D0 z6tJ7tR6Lw^p>xr1LS}xwc}@1ftK?N41ONZgbQOM0zHb+hZlyyI5m6+iYX~T)pp<}g zGmvI9qf4bkq+e=d$3g*nL z>Dg-0cL!wZ6n!P+l}0jr4s9JlSX@$Ot^j6<=YoRNwqy6%_t&$hrv&HhH#U1@-8P3q z)n(F9LtB8TD6!;hP$>-@2-gq*+Z?BHt*sUw@|qU&2nc`ymqp+CLOk;1*KM0cXH*nL zkD&;j>ghR%H-#_1q383JgvRS&XSnHg6`3@Y4N!_4alsEIufP&U7vvr>zsnNF+U~Ih zIDS63x!59E5^h^AAdNQ!EEM;tq7m^r#jlNlX&#_^toZPUv{Jhc5K04t&&q^VF7m|) zuCta_yj3uOQJ{yIn}Jl(NG9Pbtyfo@CI}eDAH!yvAjaQ2@hSf{*62FN*e7+mZD`@ zI4$xSk6;w6*zRUr!Be}$PicFA`ezA!3HTb2-auWQvz7)? zFVxyG0OEXdN=l{HSi=v}`J5~cnaYIkt14(ocLkY474#)V@qjG)r9cIubhfnq-AC+B zI$5s6B!!eLSv^7h%6LvKUq zMbzBT{=Be8{cBk$W%y7gf_O5=T2gtOc|t)N1oa;z6KFlAjWq0bIS@hj=fwDC2@e3e zh%2<|?wc@hmH+dYyVlJ2WlE?mgKG`s3@WcCKBfV3j6Y$Prlx_)Y~G<$)nEvEP#ny4 z&G+QVBGRcP@q0EH_hQAfMRuj9SuonAq&Tfr(rM#PeW_&~g(;zMq(bO5W~wQGFvnUz z<0bw-wik!D-0*c)PGH=HB*J24CM_~S>h)|FIambi2F2MxzzSa4v&k18ts ziwCZ#oD{v)|4lR$YU-%xwkhMCfNob*wsE`_aw>27{w}Tcb3dK5GD=m4BFC(`Z-OT+ zeI%+@uaNIodoq(l?kCrO^$EaA-k08a)7CR9N0xh@4ppDPiagaB|1h;fB`~^um;}Bj z!(HT&$>WvDYbxpb$j~-9^1Lm5G>uVmq;Hs!oKo>FcOGI)?-iH|;n5MGPkP^3s*XCb z${Sr(Kgp}&+3M6eo!fjaJJD@8KEdFN7jiIpL~`!C(pLEgG2_AZdIug)mQ>C9BJCci zM^=e+N%+wfl>QuUqwv|j>rnCxVsH_sNden9bQNf}#~=0}I%}w4^gZd7>Tcd}X&*lN z+qqFNGwGnnYe?-^LKcCvsEfQ@iamFkHTmXxK@OLG+Viy(wlrICs|{cZ$py)b_lEp{ za3D#U-B0A%lGEbfr>W=nSF@&6D$Oh|x^yoO`$*HP<7MfD-#dTP4LDa}^V=7Vnc1jz z9i*6b^P@mVn%W-<`g+Rtl$A|LN>OK9ZqbR%&bC>N7`;)zrF6fI>5)EjsW=c3PW4c7=$_r1>Y|0FC0RU{4o+dUTGK)N4PzI zB}`vQ^62d|#KkF^m6hLmi%#6RU%K3Uq=Xtgznz8N0()1UKf%Sw6m2^$jqfCyOJB>x z%8s|UhWMptR)&fmc(WgrrFeSO^Zq$ZF$)&9UJTf(m#LB_miXx0MKOR|5$)`y`z&^! zBH(>$Q&CVo-fI8X9`A{U_a3sLO@{in2G}^o|dZ5=at>fk0 zhzx~gF^YWBG>)4#$<{`uJj!$}iZnBYMH!c|=Lv1z$ESe~+pw6yp}xLNy}`;L;mHOY zj12!roKTDYG@=&_?ug8_5YksD`GR%!HOr>_IElhCNy+TL~`Ue*;~G3jV(zcvL2+H z(K%6e@b(xhnZGYcwb7Go9uYrv0AUU?8tC~luaqQ5r>00$jWxWGx&~gmg+@>1_BU>q z=^dN)jP#6V78eUi>c3!bjxgMmnrE1vfc)i7a5CcyWq`$bgX2(V35tCRjcJr$?qN0= z2#rt`hZ34wgVZp3jvW?{h+#}v$|@$1a_Ep?J+G7@B@v(xL@v1wg5T}+HHRa|gg~5^ zP*8scBY3U$%V$QwMcIDeb2e_=FQol}8tC#7upMgeqKYZaNflc^hDD!6p zR=QGmz}}@N7Aq;NEO|NZf>-x;9)~o=^_CxWx0Q|bnSgcsFs@JR z&|;$iHW+r};LuP#Jb9OG{sd!xfozFNxd+xJ!r_{NSNC}9S9MM(A?8V^1VKt&5>Y5m9WCtbgZ*R?M*B{qh2;#6Xb3ARIwbTudHm$jJaL#?v5RJ5_M7Tu>w$s-p~;mZhrI7; z6->vvbLodiqZH{YVmzLnJs@j0gS{VOPxqA4oQa8swCwq3+J@d1@u*y!v$IAUvI_UZ zo1aLmBoddyLwM-m&bOCum zFK~d#7$A8}8@{xqUTVN?|5HtOkDMl?b0U)r8{2!dL{nlIAQ#sDK-t7AU9qWi zVrEw`vZbx)*LdwuukA(8!TSc2=sx2!05H5Ron~@nDZjusmtWI6hdcgDhz zkhd0y7|?q$5s~5Xar(>V4@O1~U%sKX+^YO54uA%T6Dc9<(!O_@d(f9=kKwGUFew=ESvi?k{_oH@!#6F ztLg~6+kezI;s;#nA}$X)3}LYG!M>UdTs#!C=!TtBPYPVpVle~a4UY8q7?V|BmIKqV zjoTmF&jR}8njPpRiY|-qw_Kl2(VRs1Ae2|413LY%r>p^2gF7krXOTAnr+TSs3mx^a z)>t_Mqp0Wyor)H;xK6jr2Nx%PezVte8#Y%fD#>@D@g@Oh*87vku`+HwicmKaR>w=b z+hw_h)y8tU_8S;HRg(oDiO~5N+*%eE_SC-TO52( zEW|cQxNU!bOeoeibV!mcy;I!G%1UE^Akrx80(x`OI--WEqG)z^WkYz|Hzzm%fI@qb zTs=KRZ%8L|!|p>RFxdpetEAOQ!t!crv0LbHZW?0zNx%;9PjBb@lw@xf9uMfutCQl? z0X-9clHK$-$q}oggDfEg)dEe0*P6RXGbZsctbX?E!5@=jg`INmqe@-k3s~--$|NBj zT;F^{15KVvfsIp?2Y`UaAElU0W`B$B`yV7R}DMLBZIB<(EW};J_}0N zy%m!1db*w{_THtp%3EkmdpA8*3`&@dw^`T;R?Lof`+IvidniYBcKEyOOHZK6Gcq_7 zWxt+Crw;d`=ht0_sJ)*SrAN0ZV}oD6J5Idu zLgRaTxnH-vwd6Gb8MM6S>Z|SZD10?We!=i}b9Ilt1hkSNYhmkIu;#YBdZQkDdoVVg zkm){icipa0LwWMx1QnY#PV(h+xz}PLM;Uxa<+^u!xf=Fxmv*q?PS3?$NUTe<^_>7r z&>Aga2>#Rj+fGOR+j7|91(`ocU+52~oKNtJJ@93ZT9~2<4n~z*=(IlO2vMVisvf*M zFG~_bDKv1e49Kytc580Wl7Fxb?d>i4wMU}h0d!3N+8fvLqW(ncdFK?Fi#?w;(Xys8 zF|gg|^2T0wx*@l;%y@!9!BcDSaa#H%Ng9Wgb6t-iTdU)9I9VD8A_)BfoyHwHNWx}! z)h2l+)N^M8&jTU#XJ40y+x|y57^jnbOc1nn6o`VUZ&4K5OFlYkNUI# zJ@RQG0TX~bM zS_ecAFr2N&BXq2C9-+nMO+gz0ln|A#kYoQhxzljK=?%b_1EAk~VDnuRr~RB0Jup*Z!F;ddcyjG8seV-0eRoz`K|)$7Yt4_Vp^Hy2 z&5+5B`*QNzRF0YLr3c35^9rwqgu%fa9t7{vS1D%vFxhx-0?J(t&WaeS472m2m5Ydo zC+um~XK!hJQ9YO4bFoKp0yjdsHM|?)vDc!WHw&?l47=r{anm%DchUVr)#ct>8&cLV z?}Ui`OBoaIMO(@fDjMG8L0*ilJw*GN2O=kwH% zSgD5(;r|@Vt0ij*WKZ2_1)qzFY&k584-L7GIryw+FIz9PvU%(t;vCMOH(CsBs)^f# zLj>$8P2^JkNapv-ZCIKK*Cj{y7K(9khYwc9CVZGApMour(*z&%;(>`HfCLYTh&vm( z*FASy3wH8J(mPXJPu^u0rFSw!Azd>WB|6=-hnC9OoqS`8itGS~($k<9UYw%rL6GNB zJX^q&ExF}KXkJ?NC%_UXCgwP6bN2i(3WZ9jg*hy~ytt5I4$e`#{T|C;o55LXM_gvj~ z?^I9Ex8_4}22B{!1e=s$D~HwAHSCTSZ7M?;W7i3X~lF*0!`?|_ga~SIYT+j*OhqS-0b$Sf(zp=28k)$?#qrs6hn2Ou}p!`D3Sy1rkz}NMw z9y&>GX)SioswV)NAb{OjIL?eMFQ=5>-i0+dg;GIt z!-(d6g}Sm7uTRF<%_CiG+-Vn0qvDqEgK7q2Iw`p({9`Z(|7U9>L^h`3c5IWBD-|=0 zENsyW;VGJnTLHh0XwHSs+RI0df(==2R>b|EPuH5sNpr|A9KwLx2u5ntmGq<;rzXXBCu#)8 zf2f<*{Nm>e3KxsWa~TzLS?-pUtfb>U;;4IM5Mgk2>#|eFrB~-(^Jv2d#HMbLxEjl9 z(0J;-Fya0MPn}WvivqC*P9JNo{;PF-gHm?T@DsKv!n$lW)&*?3F z?T4pjJl)(Z*A{e68;{N#aRl8R*JoAA%_6Tvt5efIz7rH|j=aC;oF{N}vx!1v_zkmb z&#s->VRNj6 z+SkwJUYYiF5NItVAYgZA^QA+bxWhCpy7pq2Ns}ydMG^d(Rc5CfGgl7GZvk}$@R9_} z6k7Iv=K==Dd@HAGMJrMBUFJ(2m(XniIf*6ru|of$np3gW>?=5R$40}>qaWs{kjFq> z&$RhyxrAnMxRQ+yATO9R54L!b2ZELrMcrIkEIn@Z?;*`C>A@tGcTm#C)^u}FQR@kmq z27^sZ8>ZlEt8mwwvG1PvzK>&wa@9 zRp#5p5gy`p8=suIJ8M^TpT|BoEiP%hC!vfGf9c8{Ov3SU|MlUsP-;%{WV(KQ?c|5| zM}iI--M`#fFif=OS59o}}= z^v9&(CKp#QbuU0wv$m~v^DOS623^jx`1qvM-@AR(<_&@b2f!Kv68qP0>Ev$VEY370 zYxZp~98$H1zIhw$In312**~EOGufK~HhZJH#Y|V;+tWr#_>obAZ_T2v_RtyY0=UO9xoEm~+CE=%kK95L{Fx#X;Mx8K zO8|K@dFE0H0Ni!iB;Tr^s+-xHb?xW-r$h)34-dA3u(yDcFIGcTi(zBA*xP?XjjqU~ zm`k6!B3KTc)y|$RJ4g|VKe&Gbl((EIs4GYgppV+R5bMWmWfxqgW0%OL&R~ z4GFAcDX!0YPeKiIOJ|i6TUqKSIJ!O+aqC-HbmjEMKJ5^YWW{)^Dj0q}8LkIR*V0+# za>QBGANdN*UQqe@$?xIJrBC;=Z67ThueLLnHFkrXr>csuB+ZE=YL^sn8667cVdA{jZmsE{i??Y7~*vd>+bXaoj+A zg8DMlpm9wM(AWTdtXL7_;@>Q`ZKu|lTG$O)B6fS`dQW+u^RQG6Jp}i_YvGn0c3f)- z@Sva@SY1c@CFc&xt@gtj$;ZS&9mo22?&KTiS8w|@b1#Lm+(D5ssPA2J$@wmO8e-vg z1NMVbl*N9$nBWd?t>_`Egn= zu<|AUvEv5x*fQzE^<$2OpaV-lrU?kjcY!7d@Jv{i-V;dMs|M8ZHquoQ2n4o_L|lct z=u>9u*;M0G;xrCNv`~CvB#nba-h{Qw+YamGN6zns?ZbcIfdf00xhd0YF@nGS{6w5% zuxy+rF;_foR?&IM0^5*u3Py<;*|wt?W}Z*c!#-@p8rpZ~jD-NStSc$K%wt?Nr{6SO z?8k8^Y`@y_rXXH6Vd4%_dY)GKIjq|EUUShcL#;M2U4@# z6fYok`5pXin&P%Y47e!GJ@&$s(IjwrSCt(?P_e`Lx4UVgL1l3bPBlg_1tlbCf zzs23m2E1|w79eAjJzT%J`c{qrbyJ4srf<~_FLwBvutgEK6@sQ~b{H|_Ta@)<`%69W zM*aAc&f;$1*|}lSjRRuD|0@P2_u9QM#i`7f1-;#)b7*Yu8-Cz_g}79}5o8o(v>(96 zI~@*6r*CqTu&CfQ-#W3c7zG@JI5S2<_)Pqcg>GH5@P0r#7v%aFVs1s{K4K|b!6Jd} zpE+3buIO(ri&E3rZVBWxL0!77?%Z~*j%}ub<|#LK{hQaN)=L{;r3N2B=&tBl2pY>} zDQMdEa^0O48vPHxROF#R0cI+*EK*_LkBiUt3Gnjp^3CNvWc8A;U2GxQ_?fX zYvtDSTnnhniqHI!>>a`od0(C4W~LlA)wF?+_nLwDZ8Sk^>kX`$Kwkse0~a+@IA9%Z@C{zZJv5DSZ4(FTyY9I+PL<=j-iXMD{lHh=d(zr|FaP& z75j~L%P&MtPR2j~oAOUqWGxmk&N&J+c>?lAaN6Z$&we(LPrAOd;-F+LXET)4D|WY< zMNDx?TikA9P-n3us#GH7*F&o+Qt%!~lOp}}{@cCcpSq2qOgHr;S|;FjYB+3~S!>{w zCTxh0C`R4D=)Hx7U-0mh>W;yklT$lBs$w3#X~JlEr+$j1LqQdK)c0qAO%#wReu-fB zm&l#DidUS0dX^j+{1nygCj5Q!eY3!VquG*F>%0qX z5g>>F${l_w>EY>FZP61Wv~>HfK0rE02l=JMNHijX?ZU9Hex}j=8L;E|8osK}dC7Gu zWa);LnIQc80B}$?4M!kg0HY1a?aW&f-_%y~UkT+K?8!(-yavRlJL9FDTW&GX7WEjH zY&GHmlenN1$Bu36Ce#^nMmT-07?shUQDr$-E?mQ6wke z@4d;1#oY7rdz3j`NBZt-hfS=l)ky;nZ47U}#MP;~*D9kr7kQ|;>pZs{j<77(=5kobfj`w!QQssB`ENEBMt(}yuK5<;g2MF_G-**TEl#o1H%$4H zm1p%v;_JTQH;z91CyP2Ng_#k0@^` z^1IIGV`B&MwGstS1Uel>qrG*=DNZ5#3UdA`T*7wGD!ZFS$(Q$JkpMf&l^~p~VFsib zvYZKd-O99dKIXChtEus+gPQU#dC|{gAug{}%FDTv^OGf#q{Sx!`2&t!zXW)H-6Ibg z`Sr*voQlTz+}Zzus-C+jW%2jF)y>ojzlGBV$;rtN`<|8ma`%;7dP&TY{b3@}LPynN z=tT@YLY_lp#LP+vzqK%&RSOvEbM0vVnOZ&a^4gay{j`y`0DZ6&?od~3rs)9lTYgC- zhkYgN8L(YO(z$*Tvi>ynfMM*dbQ#G_a$jO$#tgY6Y1+!ZvVrj}-o}O4S5iVsc2s$~ z{i6LVJF9}QXCXJ-6(7xu52Er$laYgoBc#<<=>Ey`Mp!IVP`ui1%oe@dG#s|`#ej*_ zq-WehrNP{VfifaGlP1zn*mTJ^lHQI~3N9cl6!3I}2xPaDAL0LU{$@)A61E*8Cu ztfgo6&f;J*Ku!YL@oyj(O3D$w2I#%V*V8thU%#tAJp;Hz`10{3XHQj1nM-z=*f+hM zy^YKOiU-!|q?VXu!Ks~JucOPL;c*u5A3QMOFAr;ePOwT2k-jtuPl*fp82_{^4f3&x z{IldHzD~(!S=(2iRg6w{W-R@u$9tT6H)#z~ntkPJjhnuUl*Y2&;h3hO>IL}gVy|d= zO2}#07!)keci=UV@j>=NML|1<8%&Y(<7lkTxYc!L^1!x2qM+1MaKtu&F!x8%6}%Gd zZNVrcU6is`ka>8-r1C696xkzzQNlOrQ0G^!-Q8 z207mad1GdUtd;pr!{(foiCsv(E$RaMYrrm@;4wsX@t#vp=2(N_+~~gKL#acQ_yMqj z_^Qp`NqyZ$d3>Zf#oySy9=Lo=ak^p#f>B5tM_1#N*;0<*Zhe>rdwP1Jn-=ab&n#Te zM0JE1)*=1(UJy+fqMn#l^Ya&HJaHbfwsP`3CBm@Zx;q9U+$?vGifV3NYw3$&_ zqhm>yJbydwvAaHzU$%IE9A;KtlIwE0{o6B>Frrf^&)unP9kV|Pk?Q=~0BrOc4^(<` z`9OxS@H)CNrP9DiR5S;nd=ymep|?ED^w>!Q*oN?(vL*?)O?7!f#Lt@yfJhkuj6&bI z>v4h0?!OMEiGxKB#3!mVPV10g6mENqfc*)uA1}kd%-F{=NCAyxRA}*3fk#ZDZQ9=E z_}?&QbpeysbS{-dORMN34$gl|?X`&@zYV{Bc zfk?_z3J%{K0mRdWEmgj!E3DqM<~yn&G!EtEMc3%e^<9mIGTpk z{S3sC9u;YE7csxFTH&91*Yt9acSU7XS?7GZ{ z+#-K@b8Xk}`WWB%_Lb;w^r#d2$T+)9c9pmaGG!!3=`+{`9^d1Bw$WJN(Z-T*VempX zK_TOgRJTVyff5)SbN;y7p84S)&9VZ}kSOHm(YV~wZ|?-HZgD;PxjTfM%9&RX-Zcbx zJlkqzR%N|PXhD3UTZUWJEE4rH3!Uib6WEkLVQ@&RjY;Px3b!aP>$Ka}TY;KXfkQ_?>%Ntbf)?4=`9v=Zp{EcZHPX0Wr= zf%?#8p*HdjAy|SO0A`AeND>oGQEclOQCk_#DcpJ_QMgZ(-&yE zIH3+$EX4>L2L~%4!HQGZriV=N3S%LzFj`1C zlBDGOdj_uDBN~7Mbs13yS9P{+F@5L?y`u*pNJKP+2*Cb%6GIu1vv@n01D0Vp7IJERhDHs z{0NJ6KnBJ>5t}~y__y2l-l&BS_Hxe2n7Vq%@1OTOMes2fSKEa9Q1GV!T{&NGIc!65 z{QLOvbZ^^&h=>IUlelpL5X%@wt?(#uE6Rk#A80FwR^%>aW92T1YM$53)^zm|Lf&xU zYnS?{Qrr`N@iePfOop2*)je{DCPi)4Y*^t5S=`Bd`pS)}Q7lSr7rbV4~0A!F*0m1sFLq(0%C=lid zcAfaF+{V%)<7*!l3;r_xQbef! zIAujT<*R0c843Oe2R{$86YsWsg-I{6?qRX;P8CU%SI-}Z(bCqPtt}==Cep?0%Sb2& zBVbwMpP^StquxWPkbUvXhn#RrS4x^y3~*v^9vrA`|Bit^O+2h0jup;U>~{-Dj3+?G zYfE$c-m}W~nEiHj#P>_?F=4k{FZUJxgu-nLFCnsJxH|`XCW4EK)~j48NLL;{P|}V# z^6~xbe{i*nyj7cDP$Z2b)1te^!w-=cyKxj~>EsDO&#z7HZQZ={mNC9P?V|tm_T8-C zifFRxDDMYij$`>?6QFii8I`jw7h_K#pEK1SJxoLTh(cV0yc*?&e>*xq)*6vP1vyD& zi?5GTXpK1>rIr`1+oTMAipkgIWN;OvxOZi(1$bpJ=dlh68L!RikV6CU06SbY{=N!G zX#i3-j}AMjVhzX9-TeH7rtM!xF6;BzqDyIsmGvcwI{3-WxXoS&y_g6jQ^;v|5@aQD z3(po$`RBIfy zKs$K0+XO_E1SSiLE>x%X6kpjmI$E#wCAa~}&{Ks8)Oq@-bUOgK=H}(){Zupw{6_>r zH+PP_CV{_9C3E;fa{`G4TdL- zp*Pcd3 zP4x^~9C4@R2D!0$mn3f9M8#uWa)aNkRl;=DcOf9S9^s(ZJ^+ca22gpGB?-VradM~A zWv}%oRa^Gn15P%XWA7{`r!%LrSSRl18nqB0rUY<5{=ku-Ac~1%J5S>q|D(*4qfEjK zoN1xd3dC`K_x?Mso<~sFO{wDDa38n)P|-OV$p7$*T_h>@?{kAB`&Z~4C)V}hrLhv< z1s*8q4&XFEdJm@;Z2}Bx`^n2R7x?7oG+tos9rFO!I}*As`~o<4+)&D`#i^dVleld~ z+Qonzn82X7#(hVpto3R;n9|QoB%S{+Ea$fV>S_lAzrCup0Al7Rn;{cHHHeAO<(~f3}o~olh z>(H^bl%~a=DL6TO{5lA|D_YfK|B~$IySU1JrFfdIpIsl91TT=FZlG@!qM%x|ol!=) z*XN)5%}o0e7ijK1%gdRK7!qiPK5ozDiaWUfdJD6jU0XLc)fQK`B6GEgK*z<-26bvk zpQWsaH>h7 zuXG>e3LUepi{0zaE^Q|51>5AXXwF%W8L4^9{52AfRlo+wngR?LqC46Qg+sL}c}3m_ z^DQNY@bCNk`*D3~(7{icpN-?1ZAP-+l&7iraQS38)d4}`ci;va5X9WzHcD5`zw3>g zr{~znNYI>PKB6h|or(T?;!+C80~`uE=aZDCt(vxMruT0j0{3^m5ZoP|7LKT;M`lq! zQF2Ihd@xEl&F&-4)t#i2x!mzv2QMO9fJ$h3Rz4|A4Egnl`0Fx$P0_MuBxKc>5@Up~ z$RE7)2WoEGMs(JRVU#))eVh0Tqyn$31oH3{F_rNt0>;F5xmqY?wlc{X`~TSFLUx5_ z%1y3s8|qWHy@!svi;MU~uB3o;T_8V>1t3y*C*1)uCKJfIiCY;45IwEsPva*sukQi8Z~&Gh=@*_yzaBV@_ z&@(jur~87%18;~AiE2}t&1#1Kn*Pl+!y$g9FgL8?6|zXyLKBtn(aS>><-`btAd`2_ zKTr{Jv0O!~+qfCghs7nL%-XUgG=ex_ky)<^AQJdNbDk@AuEI@~Qg^)eYFFY--Vkd% z>LzUM{qug){xOON%;-Ct$4J+Dno-(}wJwd<0BuOdf=9AnNn{KK7u;t20Ro$piVDdj z)dld0=69o0R_rusp|>wAe`wl!<|-5>GCWLzf|xiT1Dn^Ii;IhCAp#!(RFbw)t7>!$ zK1bD)8}WmIns=y;B}zAkDhUahqw3|1nE4emxoB5414ZPS33BwtTp+00I`2S zz7q?{Q?z8Up1ASk?CdNc%C}Q$RRdXza_0c2Bj9RI*Wo&tgfJ%+ORsn!0h3G#@VGay zzBE1hHD6BxNx8nB*)O3xyUYrzY?ltU{D~us2A)8I&1wjTe%WXvlyYdI%90Q6QU-Bc zKbMy?B%b@@td9Hh_hf8Oe#;k)hQJ`s9O0mN@_-Otg3lyAIdX)1E}L{Mgf&BiX2a8< zXVd3ZNfJkd8M~mZ+`1EDWr31BWOZcmLZ<)eNPpAJSgV7~mdwN7xxA;t4BaFdLXTt( zKyydj-)3btY>s+da&zfEXb&zgU{_qq08V{zhV+I z;4^jtwwGKvw2oLReB@WgHE6hZjd*FhcA<3J;Rf9p76~;5e)(d zU~QEnDN}Qb0e@ebt-bv!&_J+Cd)QmvG!`bK$a}*EwY2xrw$e>n2GLVm`CfY|<+%ES z%pbAPOa3tSgSHiVC*m>_o?g~p{+BX5`i0=@n~@yoh;&0Pi5s$QP% zke$iTB3nuKxcgRIyX=n~i9Z`b`&p=2f4^*1SWWb_`AmUXSPok|2z7lWZ91_5OMd4j%C~Z$ zV3uk!*BQ$&(7yC7UKbcPH2z18-E*FN*X$s)YhTE<*d%yK0TdRJDT-8X26mD9IuGYH zx@ddvBJa0gk^B{a3R?oGj(1mAQ|YL5URiq}X7nG$9(g&XN-F|h{<{SMA^}}i(I1La z0sH_&L75M)v>VHY^gG^AmWyFoLjnZk>B6<0pO~uGYEXk^dDK_|79cE14Sf~~X?-F08Wlf+MrnD_EePKl}^ z3za{dgzr|He;rVy1?r&6Rvl_0W`|sZJ$|$@1ODr6u`8Qx`F#Zy>&H}?!VabP1q`y# ziD3Rk4`rA-SV8*^i3##6*8qJsV_2sdsD9&tKna|r6sNH z`IoXsq14%v|2w)QSaShJv0bHUzVBQUSTP5SVpH;K{|Va%;z5u)p44;pNu=*WQ;hoO zxVkBIFP2c?4FE#TfFT8-RMME8FrRs~W3mvih@WzO?YS#CnAp?$QZJ=WKJBeG1Q2%u zkxW3?a`a(b?dO_#Slx7qXa&Hs_sye+R@v&HfPvivUVFi!yK_NwJ@K=Jl08nPJ!Xgh4~~R@E%O zD)4DP{@ZTdW+K{I8TV`-U9Kl65W8&k`M*L(()f!qlvZ=p@+2KuV>~>J7lEWl*mU=& zVIusovL{~|C}VYm^EFY;z|BLzkh3RRd|qPTy?LXl;V_+(wqyFFO(+bnZ2zzu{T8ZuP%_tU0q$Q$WBt2Y$l%K%H%xTm|@m8QIVO4vptEq}E_E~>YLl%e$j`DIoQSqNy8b%U!GNg>O|_oCITQs>C`T@Fn> z@|EqEcy1Hvjz#=eVm?8*`HP4?e`!9O?5pL6X%nu){@V1QJ0N9MFc zsi)kJ2bem@%2;H>slI(URM8{o0YLgcUCh{j$G8x{OwmH#JT*RmLj_(DbG#fO!CO4d z>@4~5eXw(1D_<+XNXl)K8mMwSO1 zY_qB|Ugt4i85>iP*=7C4FV74n%USuZjCb4{>^i52eePm#eDbFNSa0evBrr#`9o1k~ zFx=)hZvKq=l>6(~qqP}A)bM6XDvp0!u!l`b!Cv+Jx-x-iVe2rkjY%{9Ar+w@J6&E= z%n+`61iFP5_@q}nKM8|&2hIsfk0;l*-xtn7o;zfQ7>jo*`!mv9h2xqGzf$3@fy=3U znR@-;8pL0I!$-Jy5k~s{lr_tVc%B_qJHnVkU>~)6p9wdlYJ3AW*S%U0sstmyu}z4K9kJ4bt=?h zT}*&(1K88QUt0}1RXJn|>|Fz- zTZ}1~>`~UxqdJ2|P6zc`ISOGrpDUy;-GQG>jN8`ieR^peOieIoT@B(cUa@c6R`Nds}anz`z)^taQD2B$kjP<8LBjLUxJ@0iCN;yt$)EdKQekNmos>5csE z9~iep>Gwb2KHFXSP?1?*YOGqT(R6h=o+RN_7TQfWQB^^%ptvFFvgvN@B&!6DO{!?g zd{&M~@#HJ}Q2}hNssUwKkTO}5Ja9VkP|gdP2g_KEo$g$?N9Xx#8OdfuE)ZW>V}(kIG<}A z$FU59mcc2MlfFJr1@4Dw8L7oWOJA|)vNG?z&c`A*4mRrjupL>|D&D7$8VG-uvRrj0 zG`pTz;44&YJgP|#5@s+WCosb2Bok(?aZml8;+NR=Q`#3b3;gciZb@%@?s4$HQp$<5 zD{n~z%&5Q(7RZ?U(ubGd4+Jd)885Utop;-x+d%XPN0{%v>M)jx5_#PC?)2xAH>}h| zfLUCvHN@`Vng@G{K&-*J5x~U>Scy{HK(jM!&m8n5i(!)qF8>+-{8`WcYXKqyF2vX| z{p=M^#196xu$Lke3)gpVuVA+c?_#kGau-(&aEnva?A4r~*LVM4z>n;)*Y_x6!<)ii=L&G_xsq3ARZJ1fJDR=TyK~iDQtpd$ zmf^aj-HsySvbISj&^~*1X*5AP>(?ZRl;{X-WM*kf)@c1P#Z_+Zd9u`4Kro@7@Z3<8 zMS+8%y02Dr6C0h0POEVijAr>)r;;)OIgnOs(u0>8g3QtX=7Y`>={jo%vS{$pMXv`G zO&@JsQ15pZ+tRvqE!nCrts$_f(Vl}?tz=NV-U`@TQm#j~;e=lMe^3GLkO=Jzy>EB9 zao^zbxBVUb_vn7)LiZf@QsDZ^LhaZLOnS}*AX)PN4k!h}fv;RdwfevUzP$3-m5iR* z>sqRK=QC$HEko4o$WIw!;yyBRXQKreiFRn#H!_Dbk_`uskU0uI^Cc-VRnMxT9mv|- zl_IDWE2vdW7z~@DO+go*Gm_fz{ZxLbJ`c(W^O(VppZ zg;K>d>5_<6;f(?C&!))xayPizN##q8X-=?1u(+V0%oZXDcRqR5b-C)x?y=~syrR5y6whDqWQpb?jG|Z3 zcX&k+{^x1-y5wxbt8FCXy8uZ$r!M|m!l4a=3E}_*b z*Yw#J{CbX3znUp>GZaDKV78I9;HL>8CeG^65NdK;RCnXHCUFrp-Vnv7y`QCzD?$y) z32JK#F1j7pnxlU z>}}T?BVECH`}g|tpB{-(e*aeKxwhWcpYwa64VF;bQ&RsHj1{GEwNBFm|L(WHvpb0z zutm9V7Rp`P0V@U8`wPNrQ{dxKB)l12CUEF!a?4n3ohqzfUfW0*;qqC&{)aKJgYy29 zBff!Nbw*z9cgJ5EhXdbpcV)G=?9IlisJJ*cYW?zerN{g8wqA5)mQxX4k=TgWB!#ML z>ko|)p5S++KZE5*=F^{i_0V%ey-5`h)J0M(f<9j!-sG*bq(lH%v%`qCUMdv+^jr zosHkcykr?Sd93FX9WCF%Ng$E zdP_aR;=8~@<#%uwF8+7oe^q)yYmUs6wT)>Vp4c>MP@-3Y)h<1d;9#5a|X1K^p0jj-^us z>FzFR1WD;ey1QXPT2Q(>7FcSDrQU0|Qxq-q}g7Vrq+Yu2e`zsv`jgS6@Rtz`RYC+FNlNskI zp8XS~LyB4WcpXK_eIE4~FecI{1!%nwDQQv(1reve!)~7vjWemI%!yq1LfCodqjWCE z2VlpYizO5juhHu@c}`xtP~okHa{Dj!uU6W1RwC1%MJ=!?i#fD=Gvo!O5A{9&xbjhY z|M=Q@iEs6|iRQvWso=6TmsdAtjW(S&&uv0eK zZU9mtKwoq(+YLGGM~SezvSd08B!0pFny~*MI#MejJ*v?fEr&T?xrpyDW_CBs_G^8d zLSl0K2qxOKCZDe{_pOm(pX>Wok;{Q~{ZXosF=#Y!M&db~cliE&wV+wZ_T9}n>DNvK zqNvajqvf7l{G%N0+ya7OYMDzUW_0+t%4z(fTI)oV{e77KeHp{e;u~W?fjQ8=_z>|z z^euWo>6J*ozu)#dcYmmT^Y##q2?hxP`em4&>c!pcr(RR8fsR2Hm5*rBw6uV<1LK@M+CSehmf~7} zN@*`nPX)Es9OlkCFsLGf`qtN$p?>eR%6RgBgFyZlBwxLj);!2Y^-*RenSHV$h2!T$ zC=z*UYp0s4cUA3PcMxE8!iK8C&mXFao)KJL$P$Fs$B%^e5B|h04kid)riJBsk!Nb^ z1$%SdOUifAjd4Mo%xTs7uA*JgYcv#a#=Zpb(h6Ds*vJr1=gc`n`))xGfmMa4!y{e) zT4Wq3F2uF812ir$H;T?zRJvPPaWowXnJokPL4XXi%!`cDIun_{yj;IE$Dum?V!ms;5;zx@#z8CkvzdMQzT z&tFX$G;Gvk_g(7-qKdkXB9eIK`-&CIDih0!p*gmuASexUQwS^nrSqL%Ax%s0P}Iu_*~)oy(0iM3izh4{FONf-Vl%?%VW27W=wlArX^*^ z7<|jctYSC0g9%wbtu96WGmjRG#O!gWlGmM7mt$>AOoYGmXs^sg9$OKq=RT(fTWLV z8#7;tfQ2+|esac1g0>nm?}#n%WP z^qsJ7NWOdaJ9PUAA=2nq9;fnm{cQ9EPyfD>@e(vLYV;K40TQqe7_`)rBXCvyZaVzKSy$JC{6I7b$qUWUWXQ_d& zUi?i894ZOzw30>ld(p8LS8qP9;j&kzzQN87;!*M3wu&8Z&QiXAxTndjs_dlCxDf|F zTlkk93YO%Ze-GAqvX9w*6$$=;%8Z1=8+2eXwhi;yo4MNc_5@tO>BEz(Kz0hgnEtyl z2gqH*dx1O6V{{iV-V7;Y`TG~rQt3Q4Jl59SBvd#dK)cUZ6F>z2`@P=hnUXpATEYh< zTeBkgkGBoxc>3soKtbe5r{u>J+52eYlh{_3HcDU`kpejLyWx?HP7n(pKtec zeaotK)FmUsM8+>ePT?3ghOvNA5W9c=*_9SiDjwthz?k9Lwq>LKdx4K7Uf#$^#X3NU z93dO6PrZHR;0GE)>jX@x$9-g_eeIJ5sKnzdranm`zx~sxRCqd-{`B7?pm+Cxu>r^u z&ZH*G07Ive6g%?}0+xcDv=L{EXYm4WOz?xkTPe<`-T%?=6`6WfIVVYXxn)uVf$U{* z9&$%dfYv-2YJj^oy3bd%k|}qAy^a#&IwE^8ln^~gtp>mb$a|aafh{UB8A&3pnc_cYXTvY|5}`fE{lQ~*4Wc#}KSkcdq;@$Bf1ie!iW zXiO|nl4<>!%*T49};1#7{y6p_6VT;LI%@Q_Zke?G_pU^hf{8 zdHLSa(wC}w6g%QoVhd{MRQ+_+%e)ggn(&$A_5f?yvRXC*KTSPlM!ZY-8HxN0@ddr& zt1hVSN{uN~)v+L+x~;)zy9g3dlpBU>^dP21YYc0a-Wv|0X_Q-2L_dHbzR8;zO0B=Fm(&7Ci^8}O$b4QnncJ>Hi!Ro-ovq!_t&@rldw~2w5mEUax zjhP^i>tEpB-e&Ao<&~d@66S~&0QL3l@jb2J@!bGH1$$F_AIk8ExIPK%`0RS!F5%}f zm6o^K8TO8G?#!%NWmD7Y8Iaky?eQ#7^IL8G!Cdk1rRy`{_v`<;v!6nSf|6rr8G(2> z>m<@D@RG6hE?K|yj@Xay+aAR=JGw2+qv<#ht*SE=&<`|+DNIn7!t%;gP;B#^-3-E4MDlH1(5TKn z15_d)Cj|yL?WE!-2c$Bu0VUS>IBP2_X%Uh3bJBK1Hp@);$q6_s-gUJ^ z`3au_%7aRywO~7c4qIaW7UEnh$rwKF)ktuj!7=prcvK8D+cihv5GTOUU*FEE;gr4OuoUoIL; zm}s#=jxcgPB&_x1Qo+ueD*~EJn*8FZPwx8!oKr_Ojdt@y<0>D7Yn{Ed7KHQ&QIP^a z^%>QZcA@1bby#gZ7L|55e=FQy`Vt-mB9SfwX|M`DOK04 znL80EB?B48+%T=Xc6-osk=2?1-fy5vE6hfNl>sf;Vx~l!)gc#DHq4nO-M4M?V&ttK z*onT!$u~ypXNJ;=A>)M=gqs~;%v0Hc(n`wYQB2tAf>1hPweAPiH|5X#QcuiL*yeaj zaU#8#F_lg~8X@4zcx<&{2g`Z)MA*e(<|BH#Sla{u3rW4aZ*^3vxDL5ZIYS-iB>uw9 zASvoc-%PX)pKDBPfkxv^v(C%D&VtG3U~RdrdCf@I+{@BL?+EO-om{RVSHu<|;@?@` zMDI#23^gJzp<)Ca|NW?wH9 z6t2=7b%PP?T1#G(FPT=rr-T21ouk}W>|L(W!K4q;qG6`?2DU6O)%QOQY$?m;z}8?n z(Wn(gbeWvmL;2f~;;Y7qwa&|-i#V+KC0LRC1!o`d(yoAv!Uisfp3|{{DAzHgc=1Es z3NtsXem1~S`7;-IMPw3!Rj|S&(ZzA!Uu4Svlj(;@S+jPTqF8#8o`E^zg4@vBg+{N_ zr48S)ETwhmMhke+PtStwrQ`I*hKT2>n%aNZn}0|`2YiDC9N~fZk#3N?lsXdPDozWU zFO0u)9#!F7u1e#z16ibL9}t~9#X2I#UhQ1}9Obzd&FoS54G(O~DA`Ig5`ZtPJY> zyek8KrRPah9g4of0UVc??HUv2ky;gu@F7qKjNmphg00c zzuPnm=?q3+FEWs^LyWl7>Khlqd9#^Xs83-5Z*F7PY9UQ35oz)JPgMF1C3 zCoKJWI;7dkvD$Lgf*h(Q9XlCy<1X*NlEF^p*8YE7@{>Uv zHhrnKSTalyd!t@_WrH_r=ZUAj>?I(XXR9D=BB(kr%7$?V6Qe`el@ob3g7+F${m$(> z*SRr&TFm{&9To|jY8%ebn)&+qVK0_xeXXeNVF20!Xj)1%+fFQac>WxG-b9svAAUFV zD&l!-B+-UAErM19no)MCugKQy&h-yq!V7gunOX40er0j7=!+`>6Y+HC6%(Xw^C8fP zwCF578GAAF{DJvBkE}mtnofRZH_ysTrPC(m1|GM{UG}SgVQ^7P1~f`^yP1l$US-JR zJ-uP9DvH$+)S^xK^}#+j`>i)P$avB{_$M2>x&h(F$0k((;{Ur0bbtv;0DRFEdA4ea zl8;$u%8>I}3s%-7frYZZHo4(jM=31o)+!WhS`iYkBowP}e;7y13h}43&>z08V^_yW zR$m^S7?6J07}&A^hG7bOaLmNq?vEb5?p{b zfV3Yg9Dv68ipZz9`K%B1Mow}6!y&!$&_DY>aw*N|7ESpwXXb{Y&BMEVODk&b#gOVU znTetjPAW7~!)Y4C1cBZ}j8T5*cRp8Kj@i zi7%{b7JFN)BGS`x&$Kgz=Kp+P#oYjSZM9A$qvZs;hEHnyf|(0ckn`}U8^-`%QMX2Q zHn^2}$Gt&~Ejb-pG7N2gQt|dsBT7+=31uEL85U{o3&aUg?JTqgbCY3;^*j+KaZov- zIKJm~{GjJv;6zM|&*L#@?!LD!!)|^wW1CExJ)7S`1Oe*#XsaiCvgSfaTUA~+y*YtrwHsMi=#stQ4Q&55FN}+}q&zIez|>M5YdJ@X z+k+wnnEk~j!d$Z>4S*lb0KuTAVcJu;>@T!<)m}&}u8)RBcQQR@ogpQloI5G@r3Tsg zG%t9{6e}oC;@Y%QD{S(h$P{~B4Bhu$Ok#%j>-RG4@nawJ-=A3_3?2nst6bj?s`YJG zAYFQ3JF$)#cth&r4E}u0?mHvzldnFobN|Q(vfuNQJu^@rhb@6(Jzg2#^82f$ef;vS zTl9<213q6X?%B~$WFD2zu3W`G*90XwwzY0UUsYot*S`hghq;E$^vl3)njy*WiFK zxMuG2(!-WCOQuKQhuZ+?=@T)VjJ66Vrg$Ja=d51gYDtw)53l&awu9dW7z`?$?L|3~ z!chzi*8vt(Jar@iV(99{qZ`8?|4c`h@3C44A`tE7hUpxWU&%q2|$1565!9n{Lp)Nr`d z*zsrB*Z5j!+HS0~>MXQ^ar(IVsG zM&WT5P1>9lK1d(CX2B!su~+611e;SN_JoC8^5j1&L`&4mZP&Q9mtxW$RWb2;U6+Ua z3pC;81UsC(#VTQMqzoPJ+@g%q^(T{`ts7c>^P<(j;4eRfp*{A%)%gJYxIS8DvsFq6i!g{)TLbgR>8?bL`EJ>(PBNcAPnY)%^NlBkk>g$T^+~zX> z-BHI_9~+>{pwow6A(=H7nBV~H*^oy7NEZMWAV+$C)kft!s&8ugv$TXk@Oh2wNO?tX z1YbF3HCENWjSNF6o2a*E?E;k;hMBm3p&e)F2!UgXg`vbk(NMuiol^bdv23@l(vbscy zIX)PDzzLXp{^1!H0xqqrU=Rr^UZ%-FG@V2}ew?jp-={&PwYk!o5%r&mLMcqmhx-Fk)#Eh-km@QU!hb{`@6x0DVB`5#@{G zTbF$3)x-EznQ6@=pD)~pZ+Z7jWc9qgX?@Ik!P(@}Y?}>%`f{@*{d@Tm2Smk6+E@y| zUUF@KElD^Nw~~$Ll3%phWPK-rH+hl8G@35EWJ_MzFK8;SCK$4C34=+aqBNKfqf`6U z{Z|V>7=t_lu02Gj>hRi_X%B z9!^dP`}LjV-Wohx`LM@ldJR^XW0>HW(V8DNG?=u=28elYQU32p0%1CWwblDSXiM}vyo>5uSY^Jt6ATf*5jS#<+Ko|AT7?Wzv(zgJzCCa zPo}+o74huq{kj`MFFR^j!Ym<@*8A>K%RK14qPF4J>9Grlg3PG!GYB#>m_PiPb^5o~ z8NsXd;o8$QNIg%VEXU#eOaI%LiL)8(0nfvTxVLw6w}@lg-Z1EcQRV0zdzE2W((TK5 z5V0@f-!VA?LUCJVoaPm^smsN`cMGx_32Qr-P?dZqZ*cGNi&tG1oR+7(wu1c*Z;kY7 z*W7dtdQEg=Ee|`{j}}Dr2;3_}Ff*f%w<*BNVL^A}dJrh&G@4MO2uU?{mmcCZV2xFDObjln z<$MIt4#CP{O}GF|E3mCX($>}v7oGj{2j3rHe43h?1}OoB-?QIS35>%;ER0>n?i{?+ z@{Ds(E7@KzZ;9? zy`MyU#b}f)wOXsO4Hj#BIkSRPi#z4Rt)|B={e@e=v}n&LrP4`URkZV6Usw0ps!ueF z`#Pn6hDS^*f0~;CuB#}gyC77$u`LrVcP5X+a<$A@1*3*wZCp61F*9bhjwJlb%+}=v zceiGjxREr#>{vI}->7$!L-%~#%%8nauXw!rrRwlpFg9Xn5?Y_^)s6LbrL zLenuxA6cJ#8nCJ7t4BLk>iBoG(mn1rHqn8BfeABBjmi47z}hHeStkr6N7Z>o5;Cc6 z@#ou?8s@9sKVI6RY~bdlr#m>yu`t@O{DQ&^JN$IaHn%3K;8m8v!*n}-XDYz z_1xK_XyJBYWRK1$Uj5D?=g@Z#+8-ca^=#}{??SfEEx447&KV5f!=pW^_LOi|4p+YFm2YGmC|2BZWA&c8Xq)J}ST1 z-?3OO>Z4kxpTttO>YAJ&dc-+LF0N)7!`1Rq>?QAUthNLt|1zl1RN>e?n3rF5;TnB4 zKd;#8@(sqCK>J8LC_yNbf77V=|r ziVjyPfhL<=Tk_~HWGdJFjEqYiHu{5^-pqC>ME6U-Y^4sC@2wA^=}|7H6R?#7xqqP} zqCnO1uCzvy`U~SQ+x0<#fD0^p#BtM-AjwsX^quNWLz<4h;t!U~ONuD1zYgZHIBYIO zK9$rciSA+T$Fvnq)Z(1s^u|$tCy4taOHq#6kmhM#lSOpeDSorRfMQy%X3ivQ8$`~5 zo4ejIxV<~FIJ(|L@<-Z^1XT|^hyrO0)DeG}V#qu!c*mn;y{eu}Sn z5mTb;QuyjdX-bep%E+wCNENl5QSLkXtF*N+Dd)E{V&x9}%?F^lSu)(-cmvt4Rp}4V z?<~C*Y(UIDVzJU~vMF5T`>_5!{|&(B$#hXdAThr!JUSDTv3^!n&3sz*a(R4Bv7Fx6 zWzP?gE_l$*6Qw*X~+)5d~BwiEDb8(RsBGbI>bp9v&$^ zj1;0DIxoYxI)rFK`@eo>HZ4e}GP1l_fQN~Hr;(S@i#Aq)DA+7@>JsBd=Jw&|SAj56 zIKmkcBKclhs7IftfSb#wq-=06F}q*eCoZ~2I^WLF*a}iFwKUx~0}CTLx=!zQF(!Nn zA7R#a+1ay^#mS0q6rsy+Z%Oa>I8OWQAKBMgUuCP#{iTGM+L9Y+^M((8!%5B`t2o^? zJ(%HAWH&e~QuZWp*X?`TOrx+^;gpnlvt5B56LY>Z{G)e+XG*0k(lu zvguelg>RY?Dc(&R%ul~oF3hWO?RnQ+c~n-gN=Ooex$Vk9{3^yk`FK?Z8#>XULIkjD zz|y6}(~1AHu6fQW6ps#1&fw3lAbSB|H%)3rMnCk*d87a3!0;;R13eOodT(cz5t((?C_!i+NG_@COU`)Mbw);fvT#_{l*pdGEHY4)(P7kJc- zvYTHV2SZ5XjxT-h+etPN9R$|zwvPsbI2a;2hd!Y<-~YCF6c%;A>$^Ky>`K4l-FtSz z>u&eTgtRt$s2AH8ZQ7rz;?Mi^Y8y}^bxD3&sQIQ56S+HUF>!JiS;!!3%A9uFYhqus zV_Zu|oR?o>S6w*g1mYF7d%!!NpBK~6_n+#z4@IsqBinL~9KYx%oj7BzKf08q#KP>|ZW=M~-L496rIEwGDqT0M)OhCxxDS#021>=k@wN~Ac1L_bRN*O% zQpYF0a4a8^&~Sr-OS7D2e7){0WcWCYtlwjbwY91Pj80o-P&h@%NyvlzOnEc zOj2jhpM>@s5>qo4ce*JT^LiUSpOmln>&%Jh1nyHjIoI7<#zVgk<)?dgMyh*OaW&+> z{DoG=*&hZ)f9%3H+F12}D8rXC(`WY={lBdbu3&$HrlD)R8{kuKccwSdL8NAuq%o#) zXA<$7ku^|Rjw=-hp$oMVSF(42@7S6hA75%1BBmp4KR9`r@YA7qb6Z(Z;vTy3U3_yp zWTzL=XyA_s2_juKXuwHSpE!>h&Gg=A{uE4>+#IEoc&cys*ECcLr!Hm_SBkacU^Zj) zE4&vo+sTw%nI|uyj4-C7%|O9X7fZX@`Mu+WhWtCX0|F&yC%U0J|1(0IDcTHECwbfr+`3fMaTF5K(7c|;TYcr_ITL?ELG&yKgG(< zXIpZeC!riRdILK)4E0V8D0(1ruc|qR=987CX$K}^eD5O{`beDdB9ge*Q>8fIenW^x zX`GWt_{;?HyWLt@$6rcci5S=;>&Vwsj8ey{rBYAB_b$f>&NDEJ7Zo4Z5aBPdKN+y= z2EY7RlPQV>u@3F3?(Q?aD>os@cdPeDr#>-8Uuu20p9r)6>h^l} zf`YPg?dE$NRD|m4>Tef!Q&VbpHNfm}QC@Zn{aFB>qNAhhw|l7m&qcT7HdhtpXcJny zNdj4e*3jPy3X&1~7&NKF*hiDcgK zXr!l*MbOw|l8Y9;KIk_xbj4#(zY~^G-0Ney zym#gq(1?BLlvaaw!LmCHIe@7HTn{?`fiAQ!OqWRIX%k9m^46@$)v4;jfkxJdKl9RW zJ?eV(wE0?TW~`)0+)afqI@#QNmidZCq9SGq2)qqG#djps%zC+0qn>^j0Aj=QSvGw= zt2=1IIFNZYLBsJ+F*ab#C`Y%Qtwja*%afBGbX8sRSXb|zIY4%aC-(RtXdQ zk{lP4dAr#uMl{@Hh|Y6e!_YF8s~q98eI)f};tuL$>QTitW(icdNlWXv zG;q>{%@&q<>7DMthuSJ`d|-je>8az+&Q5A->bL)0j$gj@R!LGbp#rg}rG>w!xH#(7 zA0%uSyam)}yuU_@)hS$L%4K~`0V5kt1I|IJ-ssoaZ~)Yy?e={WUC&}V8g&6khm;lt ziP6$tovouAM?afK8k0gZjggaV;`m^#5MB1LG{S?&`IXFWVs@*8(ieLPqgy<0`b{ny zzNMruIZy5KewmC=abza~w#b}j5nEX{1T}N5HIzs>agk+PP)XxY4aQ>Vwgca*F6p4e z2o2<{t9qENu+iElX2yvd<@%N8Z#eP*yhXL+?YzZH02|?$i5EGFMr?fMMO(;={+V#R z%Hj7AQCnV&13<7ip)=Ir;Na1*F~@_yOiT#>cjb}bY*wmJ$7_(sBO7(ZL5YEgoHxT= z--T4I!U5Lpkg;(v$k4VZrWtr`Phg?`kz|)kqbb|I#y8P9zOuQqSRKDMCiGa%V7Ty7 zHEb&Kz}H{{#^feYKe2k_{;DhIi=<>z)$4QCpp*EJ=~w`+mv$X>zIf+;9>;~c-?~?Z z-T{A1lQaT$jv&!46@X3E4MM1`TZqf40|`TyvEOOEb7D7{-&e78lmQZc0$9he1sCC# z|FMFvEmN5?!IBO7!EvQ`2pePXsY|)2Zdte@T)E#2&kK05`VaXr91s@2`DC+6_4-L?38@_6>rvR& z`4AwI-ia*?>pk}*XZUdoa)uWX`?`wUT$p?|^!J5at6uN^-rNVTTQQKF;A6l89n>Co z>bRjq?c+{4lu?rV3Z>4|RW>i}VKPj+T>zQUo}}o(qNN?yOEJ=dC-~;-M#VidYJ)yB zL_w>W5yB?(laXCVR#G&Iz`{W3sw&Gv)%t%{k$dLIJPu$()^O(QSA(tqCTusf*O|3f zHJBr}4dJy*aqVb%8yUX4iksj3EW*(?42)M>2Rpa@lo3nv^>yUCj~MQq$T0E2q_Se# z0%$(QbWDfaLN1sB|DX+dqt!Pw# z*N2oRft#Y)&dU-n;2y4USYDH@`8FC03n(GW`{Kk;Y%k`JOqmS_+k~-m;Tu>h4=G0Y^?Bs+>>+RKdWlDCv4XKv5Xx-nx zfB&eg4BC1y`oBau3%6{8Azn68`csd)on7qy{(fXEM1oT27o|VMn^4D{-sOF{C3Rjn zyHSaq=&IF}WuATK9@umuv!hL+Uw`b^eb)47L z#c%|T33c1t93P)TUzAoQeP?ph8;Y*q>=4h8?Zf=w(;~U8>$ICSeEfoX$q;w9Q5zc7 zR$RxsISkcD1!rKlEi_#faTHf$r2P@h;o6ms2O9}f>m*tmspeJ#s($YwQUPQ)%wX&mdJv6v;vAO65kHob<<3#m=7q9@SCE%sQJ8z&Ky`* zMX|Vf%aYEm7xnX5eB2zVE7iu&aqx1tLsw8+qcE(tYgn$qG>d{+qfS-qqpQa0GG4h< zciNd|#GGhI>kUORjcC;HRrMK>Hzn!rX7-J{hhW)k+eulMbI=RQL*^(CJ+z<4Y)y+1 zdEI*U23x>onlO{8q%p(Un&ccY{B4y-ojn<30&4T9T(wpJz_8_@bi5kQgh>xS{&Muh>}^4r%^vQM?=r5gkZE|qo6i^AmaA3Uny30>|AQ)| zxMj6Kl5j?^c~VjTR#y=);${#OougeP>B^-oz2>KzxK1*^Kx@h%B_+FM$H24wg9Efx zcrvzTsEkb9nj;k9%zf!^*&+%aRxEIDGokI1AN*l<&x@GP6G#386z zlMw>t$8l+hTrOBmzlK791jT4XWOzI02j|2wy>?~MnRP>tuInOAxxM&1@jLwr1l14A zcdb%Ht11a0IpT~LuX2AhFWV6j5e-*o9p%+3wJZqm*#jqT$2eyM8rseF?>t!a+StWDiLqZEy}kt^ zrqg|ES59w{Ar4RE{B~+?M&;Wdl^n)}n`EvjRnyE`ai+4-72lfcrNvw(-MLv;M36Ra z%U@|QUkYUAENw(=*hD(+8k+h735JB{Eu(~|8DT6yH<^6L(fd9t7m6snq5aGs{G*i zIFgkGGRJ1mPw2}(Z!g-EsYhvDrH#Bwmdfjmi33BTi2Wf9+IX+4mT*WLNuosdX& z95DY`T1E!aIzaV*yefv;b&~8y@zTDld5i3rM|PawksANutEEZ-zWN$^@5g2~wRf?% zFL#mg2R#57=qv}FUs(8|B^wr!svn!qYUaP8JHE6m+Wf)+fwTgVm7|J?_O24xmdwc+ zI16Db^X4}&sn;l0%w%ega8;VZsT9IUw@Is@v zraV8Jh3dwK6lghPl9th<-Cxo^q-8Bxku0~-?=0GI=?{tW8{dAY*ae~+2?>d@k52{w zzUk@d|98u-<5XDz0WzUPqu_jDLHF+Tpj0c7E7G?$)rKHSf$%#p8zb-&$mtEv+Qt5# z=;-LTA|i&p;qt|{#boJLbOb~6cPLyBPP0Z{xBiT9CBWKGLUfH36G1c}}Z zA^UVn+Bj7@TO3H1!x}Ur(HYqBKrfPGrk6%EBPQ<0K_iWoUoT;&3)WS{cdaWOZNrV2 zNqN9V5PURfKey(OR#=Ng50msMVN=r*4 z0ND@%o@uSBEU%qWF0$jViL|BKzD(z|DACr8y05Fi^Ko=s;4vs?5tLqW(UOl!NJx0b zRNx)|@X_Z1M-Js(o+DStrYulu5nSw9;STP&Semu@NC{068-u)I8)Z?2bJRDTS*T^! zXtT*v#Gn}DvsHKnzIG!Kch-BV#|UlrD<9@l>U^^I8P(79qVdzk7ycCooDpp38)-q-yFOgDHOq7G64f~@P^k2`t?^UOQ7!6r z?cWF)RCJ2Y=3e_EEh z34t##KaOx<_j|7n9ER;#dYf_)@XFlfvad*|>upYemm*fpmhspt+}2c&YS$w}f>dlILK-#R~cJ5b#74MS|cQ?{4 z1H)l^8}=Y?oAhfvxl%S($ObgidkCU1%ljZHW?}DPo1tU`JAY{4`b8>ED@{FT`;lHD5;(S1`NlQt#jmbkemLkxhNy)t z@Fkr~DbsyPl=~j)v@=SI0JQCEZL%?m!aK<*DJO1k(2{5rN$Q_|kGg8)7<}a&bPx^qUb&qSj1j&_mSf&OoHMR#jsr`*Cd|#<*?(SWHgN z?-X);yj36N)g?L>y4OG`2lKeuPVwAHv#6f8X(9ec&V7nfVGJ4jOoM}Za!^)9)DY`c zDhpJIsbxEua4WRUU3zBvqBrz$XCF@v=-7>%pQYX2J?z+jD=J0%uNELHyzPyPn75^6 z`045Ck4uHhkW`!K3Zm069d}NU_(kZjjKMD6_s8qF#}NNh4rzxL0TQBa{_pZeP0e}s zUm1YQDSCDy%JU~f>*DNDWNmBFmLU!>xOJ#Q1?yPfpBRKsNbI+XWdP}8yjoF&%&`?6 zW^bv4g(&b#sT{kAOFB9@_q}1ZZ%M3L?P#kofBs1s{+lyP9Vrk&tL&2EuiO!`j!T zZp-&$QH4-ZvHCp}VOswC7?KuYo@J0z6(;NOj1!SS2k!@_HiecaLdUQQBrC(+y|>4R zkB=`doq7;^Bpz~W#h*mwtA~5EdndJB27QqHB?|%Q!;vW6s?U=H#e+1Enwh}qss1A? zfn;v5aWFkA)GG&5YH~ajz%>~nzOR1Mzb#f61B(2`-)=<+nK@X=ZXcCCestKMD*T}& zlJXyFm5E><07kC}CM|M{q_y4;UmJSgKkK>|y(g7kcel9p<2_!budk72%p){{%^zv8 z$i+6~=X?LD1p1dM3$ocFgO@YCtBs{pGwU0U5Lgc_Yw%Gm!G$vw;`<%lXo9*nr;k)r z^c)-vXo~awTc&V2NJnb6@1>5=YvsO)J0t&!2FD*~yg+rJqP- z_rk~Dmz{q`@q6$+nQ`@CkUDQC78w{6y%Iff9u#dq;%P|`F}~$@wX%xLS+7nV(b1IE zwRcgqBlte+4p{;786;8U0tG^ zzTQ-}sc)`)nKh)fXP`P_ZT5s6$J9Srr%s=e&;-+Ou|^U7A*nssMj5MR4&t%At+S6BIDs#Y&o_vBCciwG|$xrH2GT=jKQNrA>yQ zd*zznkifj%sJi`dS!hjmRmuAYk?g9RQ_Vbkt^#+46p4=_PZAD0T&;^ENMto>BPvUz zTf-n~Wt4E|b^x8dg(d&e7pe)vzjqh|bokD3HgTUT@zMtNY7IxOf9T6m{w%MkI5m2N zXpEQa`ebPC!#~(T5lQ8|45(Byzv*a<|9#|aZdtz9^uxn4N1(oXiP*CSYd6e1P*WN( z!AVT7{^_PM9hm=Prmanw z`IGV{a4MUsEH}M9jGC={V_15KMIZYccQ4#NIy*a)dOsEkW*=0s5$2a*+`JrVnW|Sy zneX-yGzr9Vvm zJ5p=g%$rv`G9Wj+h<9er0hrjivLPxSnAGWs$5Rn_7>04gvi8L~8%OV(UY97&RpUiI zM?_BV3tsFX)BGZCYu97vx^C$dY)bcP+KXN{sifrxkMxwxGmBsHI2J9=z@;d0_fu!rp2?%lOF4ds5om!1lUZR4kqBL=M)nrGV zTQ{sZ>s_J4c%(X?0Z|TFSxZV8f);vtF+W(>6TL7RYu+bB)vQOfIrm7x%*MTDFxSWH z!>e1-){1$_?NRn^3E!9LPE_pMAA_7=bL@;r<>j=MbU&(%8y@a?*O{7fGDzyi))A)z z>i`cx)^yC#rItpScSZNQDO^7jTG7+23C5+R3%$T7-?9N zXCR_{Fe(d&uHG@FjV#o{SAc>ugUkyt|K<22A&$7Su)9fvpelvkVJwjiFE(#krsX?% z+E>yI3yu9-uF>LLmZn^v9O;^LNqrx+aNiNp;ArPJNC`HWM>VrI8l3?JOJQMQfL99y z#@ixHLsIm=xJ+K{P3HF!%DV!wO-ENZQbvC!&)%sJyd|7z8kOg3fSbGAi2!7*m2jYF zq|}~iU?c6s0m90g**R!eef9SpWqKdwJ(uq-w$twT*`*PYSj`~(;o&tF`5wo92YSTv z*WOqeX)#ZCZ-O$y<0Z|hOTQ3(_U*Gl!<4Ext|e`?xmmqEV$vXwmzP5T=XM#l* z_(`@_-0+6nvGwQEfu#!$?~eY`ALtyt6q`Q|uuQak7nxUr(K*;a$Eb%u$IfhISbgqp z@em&_mA<7p!M-id`Mnu43D=)RiYm`ZPtRHmP;$bVLGpl_S20FL^u4LkW{0<6-Gd0_ zm3@9ZoK(nh<2ew{dy7BF{nHtI(Jwe*iT}&=8OO&pcL;ig?kG`WR-=vhqFM}qCPwxl zfRs>&+=GzFo#i9IT@bmC{LSqJI#PS46=&u8a+ zW-V&f3ND*E0Wnoo)>do!b@|w5@>!-%Ygt;X@Y6#7wJ`rof8R4_x~L)Wg+kbHls4(G=03rrdH=6NgU+9)N!54~IKfKZ^j}2FDJC{Ff3YgYTP7-b23C3u?VG9vA z%i?aai_F#S<=}lWe18^R4#rXB-@ZH&{dHmnWoXtlBtFabxu4yLJ5PH)weZ8zNQE^i z^8YdRRsm7BU(_f{sDOmh`GN`vNJ^Jd2BAo|ba!`23y4a`5RwB7-7s{+5W>)1(p^KG z2mSu%e3$3S8*Vc@Oi4+s-*g&ZZD}viu%W(qY|Wa`UDem zfV0rEHZpX(uT3 zu@Hpnp#D`XD6y16RpToXqR{~f5j>*syK0s0&(YO}tAD=OGJU6ozH7_)#z0kE3ABF! zJjH+@7!Adiq)B`ZSHM`#^sKDF(9qEOwmEa^n>1Gi^6yc85foR+7gh3aUd+Hp7s1~N z?Sw%Do!EA?B5f=SdcGE;7JiydY*Q!=%dmdKXpK=1E zkj)FN67LWzio(7Zp@I&A`bSO{?_aMN7)9vYmz#15&^--cxNm`Jn3PGJ)PNa06Jc(V zT~mWDRk39H$?gCvU5<}(EckpuoC6wPKrH&gEwsDv#n{t30=k?vkFLJ!dhSc5dYw%C zYV4*@&%yp06@_$HJjforn+#He&sGOLMB&~-Rwe*;w84+*kI1%5boD}cFk5+a| zZOv$WRj=pEzDz{LR1LF1(ZaBY-YzJ{>ErQXwiS!o?l8!eNLzvbg{$B3x8r7Wd|6M`ZzgzeKY@rnG zlO~OMhAWSqwXLb28mvsJ`)MEba^n48t9pDDNlE-sGql+K=;?CUUEl|tDwJPZB{TFaPmDiWKG!cbVp*KLTW(fl zn3nm3?rEzEd^yLGfcr!y$iwf|?A7-xZy(`CcXRXn{HyQKcEEYnvpW=4Wql&+j1PZ* zBsbvHH{^|H$f~kR31zCCBE^n!8|ZZU!G0BRZ=F^ct!aJ8?Jf&+Yv=d$(#?WF-BK^l zl-_CN)#aWF?F-os2)uk>_RLWu()}fDcj+o2uA(o+$sZrol0IG-h)ehY1V~qD=-w@#^Rs@(r;Qji~aS zy|x}22yK|Z{m-kcu%{t>l*w$w^I6={zx zl-KV6>T_UT-t*ep`ubh3R>{m*D}VWhYIK>`Q84+nv4J>8ef!4cM?aKD14m~3%q?ca zYE(icD>m}YE7F-xUT~^E{;uZ%H*B|$gRox4L%fgT%q-?&hS>$G;2CjM+UJm7lq7CjJM#`tZDs~% za2P|5m;DOA-1chB8;y739oSZN9G5$TJeLkyLT|LHoeng#F5AsJOV3GmgT!9f9aEq= z@051Si!T^kj-fsi_`rhkOOY3AW>tqeXJj|vjaV+&<$|h1SlbKdkoHHwBZca6ok(dk zPFIM`%L?iFSAsZfjh9%#p-N&y=AAkLW0Z|nInN5yk}oDTI(5*$@a~Y)%teSbCRyu^ zZ)CYA(CR9CUZLSVlODv6yb5u8zQJ=XiKGDvqFk+0zi&+7bIiFhFz)F=xke8$n4g}iGPPEx zFSQfP+0%SK9D>|50^NMIQ}(A?8vr-ornBev|C9}8xPNbWh*I-uAgNC7F@rKjCfUX1 zAp%EWb9CKs%;q!1ow=)S7vSGZ4NXmc+cYpuOM}1TZu8_Mw(iY^OtP?BDR3`Kha`yn z&QTU+q1DyquZ_noE=`{GOMZ|UKfN$SHHD1RIA5T>dB|Hqo?}6p-ygVP`&scgwVUuG zk&={D39r@h!3cK0w5ol5SAuGr(|Oyn*41}*FoG0(xt$$n_sYkpfo1)KloZTz@gHx0 zkucwk__&uWJG|xe`jP(I;M?8Yr=6oYIfLS7!$mQd8|%=1b+iio1H7&T%j{Jjw@U zkW=9Ue)vg(PjFRPIQ$YZ*JNZgWr6Q=)a$vZnz}MP9d&kibM7E%U}Gm%O6wZ_;c`{i z{;Z_){q>ZgzLQghUKGpuAejBQxR_xpjoNo+6wGs~Y># z^YryZt@g(;-FxT93Sclt`1maykt73DOi$Ed+v3s0;>~Rp;+}WcPTZ2s+)%*@J|+&% zgTJh)@s(~*&FI*dh8p5g{Sgc!3+`N%pFbbTO=sc0%dpQ+o1WY!^V#qSeDcN{3!x$` zD^mM2yq)Q57}Z>1l!d;2hIz|+LzAGSzGYD9Y3aG4^ibvP!*`N8%L2 zgv4zdqL-i!K+&bKuZYqNRAV5k*BNx@s{O8vucmC7|1byo*i!DLkh5vSC6N#l3H=Zg zFO-^yMNR4FOZ`$ByA%c4lkxi)fP-gyYEc02SNq`L$7w08LhtSl(e4-$uS;*SoDY!I z^EC);9rZhr+hl-)msjOruI!VzT;k;P4l*hLxbaz!ctWxW$~e5BF>7du|-(|5)q z#JrSCYEiH`*4QNah#ySZe2ME~l0PM*k_oms1KS=ja{ah8|(L$&I?D z@|=Xok6Q5M+kVkZotg=N14ZrImYwM`aU{cy3^8DX73ZpknV3U$QV6TP@p*rKAW+z~ zhi;P=&(;R~*mYRsyGf2s=?>JZngWx^(EgQ~kVPJS@D7<4pyP!Vi>BZdw3>8N>6=9kI5`EatKHQ_O!>~L=krPkmnA&)6EVM762EtBS=2!*>JhVj zi9grxH(NZC>gw;bT#C?|N6Ap`HhU+;JZqIk4$p;Bv~!(FBN_N4>C+}(DVRBLp^Zk$ zm1K@Py%rECq_^8P>R$g8)W)O62AnHQl-eaLUnPt9zT%kx)7Jh{CkyWYA3J6!0VZ!5 zo9fOlLhfoGI)O!vWxIdqE|2{-_A8NbKWKEHwrdFcvLfyR4`a2I&`+ixXyX0e-LJKC z-6fcZIcVOlaq1*x%iF%e)gs6e?eyX)pSbX$;g*=!GI*ToS$Q=NmF^9! z@+u{vk1h@_k`yvyV-J}UNh$Cw;21&UC!`w*kyGugMj@KKJNS%z5Ojx=0L<4SWXzV-$PL6zBkM&wkmhGn{n^6(~_c@QDlV3M% z4XSw2v7=4z*EL8b4Vv6SA1byLXQEyXKt`9l(Bw3{uxn8Kz_#)!SNiA>q-|d^$tPdv zDb?c&l@eprr{T3-g;5Tcma^3-dwRlb12>iW2G@`)_Cp}2-ZsQ&*Y@@}0HIsh`z~UoK06Tt0U?3edt0?2 zH(5{}QQ;(*JYmm_6g&|uHrE4$0TjujS0+l;Ll9Q*SmWAm2=>A0xkaJIHFvX93?++5 zt}`QE*1N|s+cY1`Lp_^RwkjUBFOFBvzOVf$ll6TFAy#8gO3(SYsZ5kp4Dk_JN=|8u$^0WbvFXA-^CFaMNnM5G|CRE3j9vEI3Z!HZk45 zJgOA87C=2gqIWlhLuC!AeF-SL^$!lR>UC1(Wh?XgLpvi?lt%ILiQkOKpOiPg{=CEi zKlN#d=$|b(e$Nm_Qjr_pt!Y;md*V7LDzZrNNdMr+hd<)`%!R3js-+!QXBO`Xe}w;u z^E}y7@95|NbIB=)K+s!?!atln#bbB?*WTuAS!fB{9|aDs2RT#JyJbo29f*O084n;L z6mq$vhT}3cI-@;!p|9q8f+8u}^*0gpQW98qmm86NZ8zPe| zeIufZejESXlId|~{@o?>U?T5l-?{V{nvs^`xs4w-hwdn_^(`NaqRz9Wg~CI2Oyy4} zUa0yQc4Dd7*9#y4f;zg*K7B`B-j&fcVRK-*jEB^YHFJ7tc^v-arnu{^yS#IJu3U zjr#Uaq_pa^6?Udsw#qcY9a>>Hwt=0VIT72bW(eeq;r^=qKJqxs*Q7JDW$x{FlBy|c z$Q~V+dqKszf9|ZJqrSfQnZ@fF5dk3~P0o^Mieg5&$+?#GJHy_1#ijOf-QCY=XlSxB z8>~Ezj!A4%KgjkyXE+i3k%s%n02U$c0G6`$tPaK}4hXeg>2C=>?z`3&Pp0ICp^q*!Tf694*c&J(g?41DKj#c$J%-YP-!zIo0Y z!#Lj1`;bIiva+~LnMcd!S(`!CR9J7t)$aH8T^xd$6OR;ghKTr~D=5xPMx^q;lJqzl zh|WLJOE;^U0BaHOCjSSo?sI2yEYa?;!@7s65{toK+(F#mzZ#I z9u|UF15ZjdFym#(w)ek3e#2X9V9h?Wuoy^=*WmKA`D)Vsc>OKgJ!+c5K@H2-+(hq) zzDT^@-tXx-X>3l27lT}UMNi6q(8l`)hhT)hC}|Q6Qwh_5QPWoxEvpw{m7LU7KuI7QU;>0KPf%=*s3Ju7A0E#rJN^| z*8Q_@$cO8G0+2uz6j@28V)4bc+TQDDIAh|=68wyU0zmhtYbGzIig2v* zog?%e%G2^ysN^)T`=ptCGtC%-@y+t+O5z!qp-kY;@pj6KQ@V^a>SkS_jGv5NvE(zE z1FbkCW5PeJ`1(b_zphKqU*P!m6Lq7sovoGCi^l1Vd>yS1A*2aZ^51loj2kik*oSsq zsO9A3$PLY@&_dU(jWfU5kkApexx5VE9g_|#kj6b|9mwCYBtb@u!7n^{%S0UWbO}M zJbM$GPNvm8aq;Zl-O06Aq(Ah$Hg66jwOUUcP75_DG&CJdw z?%*Q{$Y8qDsU&!y+C!W6JncN%7E>!ZeK=d&QQ>oGp`uT_xEe^i*R<1fayAO<@AFmY zBPE9+!;zajfn6ekf<0|*829jLh};XLgUi;YJhhK_O2|pg+2x?E?zAe`hT9$rAn4;T7!(G6^UP(Jwe_llN=V`z2i7=zSeg7(6PC^UQQ1!U}0_QUDF1#pb9a$GItSKoYD8&YY&*cRTAFC2e$ z9!xKG$ZT{KSm^nEj$P#U04-*uYm@#1`)W@;l=MRbx!s8O_C#zRBDg3q3n4YjJsb8+gj>HF%^6bb^5z z73lu3BRdO_cgqP45c=F;M>3+;BaJy!#dNvD8i8z@huk9T;)#hpyl)_N>13Po=+q*z z%l_m|5#KH1ljrxTNe=8KkQD#oJJ>T;1M^kQabeKp;hflL&YrY;S(VPr`*C6eOopu( z_hVvW#;e2m2nO>du8W=RHFCs}I*^*DL`v$NSNRCh$rB|p+^zT%XQ`!HQSH9c$&_xR zU)EZCrEBN0&0cd&3fELvK+1xao&!J~ibPpLLP80NiClquQxg;2H4baC3$`>s�%D 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 literal 0 HcmV?d00001 diff --git a/tutorials/files/spacecraft/kth_spacecraft_simulator.png b/tutorials/files/spacecraft/kth_spacecraft_simulator.png new file mode 100644 index 0000000000000000000000000000000000000000..11fa8807d16da4d7b23651ffbded1f8b036479eb GIT binary patch literal 51892 zcmeFYhd-QO&^EqACt4&#^cFRU8Z|`kEqV!}_gMK%9?Xf%nfnW%WI^U93HQ%-yX(HqI_iR$LyI?p9XL9=0x?M~^xs zfI%$(2EB8)GWWD|ai-I;bFum?a!oVJKOQ|CCX7MQ;Jd|>YgHJ6CB@k88{LWm{pSR zErwE244?sn{*Fgse42S(^n+h*I?}?xq?-%Co7MfCCM%R{Q1L(v^+o#0N+oh}$q+JIH@xg2D`cO;i!-7*s! zb05O?*zvw2jM!T~~_=k2IPt!*A_)NWR9!hdg{Zk8c{`)9y|q zml`}Ee)jzv>G?s+`@2?ykJ!*$$x<9Dc));ESlu$Rj5{vgKDv7f1{l%YpF(G{EEQ6$oe0HH54q zx?}%)s=?>}p@U2wW&Xp1I@pPe%MS#By*{obPa=+df!y2OkGq_SHfW_;Inm^=xIWa@58BI$YJF= z2W3&y5yxWn-mh*Kup~)GW+H^FQu<>LGKeWcE`|JShv-IDFvKYozc50GzumqNWV&Gh zLC-w$;5+UGt6RJ)&u&ZEDochg<{OO=L=Go34V|^if^e8gNWue2T>HDXBKk;*6BE#G z-##(xC6PSs0j?$MP80ZIL$J4u6NL@ zQyiIswJkT`8Mg5=BQPGUIvyvXK?K#6w<<2X)a?t{`o>?7IbI$%uJ&6z9YFsrhWLpM zIXI;Li}UH3ht;G?W)be6%bo@k?Z%xc@6gL8e@(FnwtvcKW3bU-ih#V%9O(BiNOtM+ zMrjF9lLLEOAM~5lS@A}eDJKuY>0|tcCS92@n?{gtIO!BOC!gfuy*;=yUhy*_z>Lg+ zf6m-4Q8Sgq?h#R5-)L0D#gjrAA)RJoog(Nd{Gh53Kk!Hv57u~3+UsbtdC=q#r2bvv zRj>Xxjcuavpxt#Zx}7O3NYjz^3l;X+Q2ok)mc<|hp*yMnc=+LaVjZhiBk3Lb3IC-Wb)#s<9?=bXPaQTMIvF(>sTklo!&_Lr*FGlCxf z9FeV=k<}l)_Ty}h?bs!|d^-+#Y%c5-e^BSt)bxDvAmitrD-+2#LcV@ZQnYOxVG}~a zsJpH)J!JZE;Cbs~(}>qe($X5yo{iMibD1^6l#1407}*xkyokqazk@uDgSdCwUj>Eq z9j$e#o=*jtMxf2F99;JJ{?3g=csn4?@mbBef2+1!=gbwbppSmNft9Y^=8c^qeO;e` zr!sM|+1d%2SQ@$tHGVb1xnqLcQqh?AR~1g-`w3(}P*NaDKDE?$qJTiPHPSAo*q?(A zc=8@QH}y26N7pzb_6`D2O>JZ0JXq36X{2$5D_`EDe~Z2|z01%z#)w^pe?e?RmQ;M5 z{i)?t>>}(i>t=f21h%kMF!03QceoXPNjD!QZWk4W?>ZN^HElRo8jrVABZDeAgw> zyddH#=%EeR%$~>@gixeny?kODS|sQrYbSZfAYp98GCYiYyZ&CqFWa9QOT`WwA>@K| zZtVKfy|5=(Lo`Ub{z(ROirY!U3|&nygVf63j@!8 zkb9wm!vd@uKTDSB%g5y3aNbHhEu7dWJnry~q3lH+3p*WtFeP6phQ2%P;3|IBW9qW} zMKG;KtQ~Q1-1?XW;|X9kloQtRg~KSawbsWE_|jv_bd>RQF^{=NU9kB!ZtSJec6su+ z0NwYbo6TOdFLfZCc#5c5zM$WB8Jl7k#yzL&*5JX&^W`i0iI?%e_nozFJIWi`_Rt}S zEMM5dR}nt-k6EBSGHVjB>LWH+vfM6`FMnfQC1`%!d-0zmR@-0sBgRsC5G&rIwxMsF zj^BwgbtmW@@Qkrq$76M1eMRRNZVtl1#+CkXiH`CXei9Xo?ZjJ8-H;djLd8Dfqnc4S zg%Yr_Wmvch@`f0nf#D$<4ZJjP4jjv0_=BX6`wF)pxM7fZN}v;tJ@q6fktxK218qD=FD;ob_X z70GfP1cJRbH5hpxELGz4i2J_kr7=^+;D$MiCe2$anKP%4aTlLsAIy#rIVE(98u9(k zjJfTaJ$m$OU!&$4bxR-lmfsm8e=Y9;%Tl^_G466SuAuSV>k{Dc>V>XN@bBKjDh?xV zE&hx;cq1QhmGb(Uskp7*#6{e{_`xPy9ePQyL>Ngt8qEe~2x~K=DsF&tBNbma6}t<7 zyez$0^>Jhv(sW%jCux%A8PaEHB1+Iosby`B zF^Uu{9plXY-2tc(#}?MuLv)ZZ$ewK*{l>DdFeu?}f+o^+eZxz>4>AUm(l=6qD$Z`iAqmeoLeVLoD-`sl{67?g4BbBA(@TmHiiLA^PUu)VT?P+-T6|4|s=TcR%RJOfj zwd_;=lE0d!voET`o=8;;9VomUO}W3*{Wwv~qMbS-QJE9?{L{RqE0(rKlu=(vK*($B zb~#Bx_%98n^to3P^B;jd#A9TE_DW@9SsDr_4mu?rJ<<@u8~%W&q}g}vNmT!$KuVHu zq_Dd+EArrVm1^-*D9c5>9hmW^LY4Gjchf2po%~a)TdOgUF}RXRJr^=%BzrtkDBTDQ zKULOrFdVZ5S$GX;salUbUr$gYk$THCG zo!DQG*gB1oY@1xoIcm6*}$fQR{Em;UDwm^PdAxD+A`DTD5!5ww^caKna}VH zBK}7-sC>R^4-fArVHHP2ZuILfA|Pl%KS6aab-HzBD~IhG99XLYK3+1#1_ugYseXkl zt2-qQQfVh%9V8AO2$h&%1cM6GeaQ3$S(=L+D_Yv6&0t{k8;<- zUyTm-($Ml13qBr(toD3qR4h2? ze5C%lU{sQ-*XkIvD$Q!JH6A_ae0ySzSHM@H;eb`eF*UNcVF2yduY32j1(!H;gz&Mz zTQb$qyqu8uw_h}I=7nFQDq4dJx@}uYpzpgK|h~Y`NII;!i z_9y$fV0lY-5>-T8-}wqlOEca=sV39oxDLE{x@R>pW=9&$@kC%zN*40Zqz9se^WOX{ zO{%Xu!Q&KqpI=~GM_|dDg<*fjDR}ma*9uR1Y&%T^v3hKY1SD1fW?XMnyiXHIlxzPt zE8V|YQ|X>TV$5AM8{)}Pq9R}7*7#b8R1YO38&zKyfD><=_*sA;(r4*Pmb6M5{+5Y1 zZc%Pb!u0%T`+D`F`&=-?ctP2^X#|*evq}ARL2MsZuJ@O`)lsum(qC_xNcL5UCu{#l z4h;?Ja6y`!fdjr4r^K6sq=hVjQ(2I`ye2=@Ek|I8VZ-Ybn0%K+(D{jNy2KO4u|7?n zmS&-UV@t~4$SuZq;J;l=JD?y$J(a*djeD74ic5vqKpm=Xv z;OQy~{^xPTk0b8!N^+l7vUHAx;r6zQZf}j9zRP=gv*tB?-f`}LWSSSQ44r>o3Yv_a zi(4iB+Raw_S;0ajGsI$%`uuF0L|6`f?wzqD5h)m_l?%izyu4Ksx}M0l7(yDAZJ|Ll z;+(Ms`q zN5)27R^{kIj94cZ-nGNf(qq@x z8_-^&u=XAz@NViofuShw+jlDp$G|`w|IfcEgz#ls+qRDY#$=4`hS5>sen)%$jp5<} z6NvgzJ(c{s+OIX343Tb!0#TkmW6NtBsWTLvWbnk`c_mT#P!K-@*@e9PHyMg3W>dz& zC*f{3iKZy7v8{r?sTxc-omGi`2Sr&u^q^Q=S=5*YQ#VPY0YhKwa~#>jf)P0UyM+gF zkbT8^&gCsEYutBU3FM9zHas@w)DOb{RU7DJvQN~^Ceopl%{)fu0fgJ&@yDfRADZ#lfEikk0j`&?_hgd|Nj6O}n@ z+}(LNt)MwYFiZY2d_)~08pOWD91In*brL@&6OK~88rzbWPm>X{j$C1m@^BeFTH7kI z&_C7tnshhS8RWG0a|WcD))wEr>ANlIiEl}lNP%R@6TZSi9TG~y?yt*SeXh%fikmJJ zqUngk+od{bi9X{jc59LGUJgA=akHhoU8F81?_Ru{HXSf?5-h5Mn_|Z0FT5b*hs)FE zlUqlA2;qr&_rwjtaCLp))$ekUd^crn#vQ6kaY_gd4m_v#$5p2PjfPgwYqZLByG&g? zNJ#J-7-d^;>3D_qcW6@d9Cb1lvHg-W>|0J8Rrq`TzWlQ7U|_O~uisYV61YOe)u>Fa z{>_EKK*dy9FGD(lIic}AAo|`%T?5ZM3BiF`l2b&V(nUj#=YFKoACHCl8v2EqSW%4p z?oYY&9_c(wVb=y3-B(@;^~Gbcm~Q@8s=X4fskCM}D){6*$K{=|kKZn`_Q7P)Bn{7BVv%ebFhp*J zm9h52fca9*9$_6EjtBv%i+O**e&|@fB=1)qz;Yj921!dDieG+4-ubVvC>*53O?#UG z!HFzxsX*a5*X@%~Jfp6)8KHw3Jj69W3Gyd+u(kP!)#(Zh#3YK>k1+3S$8spJ>Se?v zRh~7T*fHqlo`stctzZaHV6y-7-1JZ|uOV3=h1_f$2np@Ssi=unPpai!Aa8J8jqp|; zYQzQ{yx;>rHqzpJTbqExQGOM5Cr2$u_ILAxnQspSVi1JqnTG=ewFI7jV}LA8mm-=f z`{g}pAFn<8Wth+%*{jy{*-MRoQm<_0(mf}-eJbC@NiykRT1#gZjbB0QyxrgCfG{d0X-U>?+<#1U z3gL-2(ymn>pH>~48khc8ZZT$1t__T>9-Xy8kY|wSo zkp!(j0_WZRTk}<#TgrmIGLHaXi5q2oc=ZmT-&Yw147yH6f*Wk)Z*c(N4AY{?|9AE{ z@ESF`#wU#rNNmj3Hr5p$Li1OqzG^o{X~3lfx-bIs{$SSOMc`)R zH0Ir39)HYmWUVb92v}G&i6fpPmvUxZ4jGBfjk`^2h@(}&>r$xf%p{fhNoRSj-SU$(Jc|DN-82_(m|!x;`oy_WJu~Q{9{f9< zZ+RXe(VTGt=m)wYR&bE|m(gyAFZIyBh31pPcwU8sN-q%XV>gFsZ{f&FNwJR&u5on_%JJL8qLcH^R5^p*#{HVckEe_VJsU_hp%| z=|Y(I>$8L0X7}Q@fUwv5im>|{hbGF^qlSB>xQ0C8Oa2N@z|X6sOR&|y2+QU!jMHn# zQ)@OP^%+Y@Q|9#c-~4CKUwopXx`5MByzG*Z`ta-$d*K%+2{wJm7a%08{U;U=PPc}u z=BLas6q=CcThgcyYbwiDQ;0(1?+sOh6tY;Q+SxCh4!ioDLbicVKT(l2Q;=aA*3{82ttAJv;p;n#-h zO9eEkm!`m4eKX67G1w#V86oTy_lQL5wL(8Pnc&5=(ejaRrJ>V3$Friqj_2XyJ6z03 zos+}EPO=5G_!pJmjvjpr?S9si&x0>x+7sFZsDUG!s+y(4#9|cC9LwE{~gpvmWoflLEbU&c~+X7dzFWV~x*MdZ0&)bPF0f3q5p-ay((|C2o?BwKB zuA%?FR)4au4}7rC5BDmdPgWXwa55^NVMZ)ziI`~ei>$is!ASZ+>$$nTn!MiKpV5D+ z?2|Xg8ZZ#bU7Ii@Ox^`*ot@!V!ON%Wn98)u8o)O1#!9~{gyn8YNGn$*6XN;OSnTJ(DW8>AHJh*ZI!k;5D}_0u|Bh{Xm;-FO(jc8gTM zdk*YZo$#xu8dqNPVDe~L6IhVyl^%_)gNJrlccTSKnGXBj{1nIS$|1I)3Aj)?uQYwm zPL(O?*5y9>;q@q=OyYAS)@lzYNgnIhZsI6u>QD2$9A7l)bRwe3UG9!LkkuV0Ly`$h z;+M0}-&a^wL8{n=#0wPo%Wu`B`072h3i7IAA7=@B*;gL$K9vR5JiObDnCcr&c5bW_ zx&}F(ehi)qXmx!m$jk^_3Z06`P$;~Ztlu)3D_%bS@r67@SC|G9n<->qgfAB(_Yn{9 zXa?hm3E}8Nf7k@06|1M}w4IZ`j$D zoSz>pCOS!bH-N*Pxv%NTP6+*E$SNtwO^Jn(N{?(|Iyd9zDD^CtxybbCtqn|@K-l^wCR4%JmrVi!SxHQ)YD^cs+<}^jI-Jkmm+3<5>kHC% z?6@-{ztIs3oMb;&2^}US`DFa7l6XPpny|yYDBm;Zd9LjYyK4-#OFMEYpfw29IxRE< zHR?0C=?1h2`4?lWn*X7wnI$^UqGiv>T*`F)G{3`Qdpb)W8Kid zVYAAt2*!D0%ClrioCoY1swRHCNPli2*1RS!d7IGjutv*460fXj=j5PD8|bPx;Hg!j z#%0%bUY$RdmanU$S8Y7)F%nz}tZ4vhvd9fSlal}7=hB7gv6kOKmQ~cD zhKWp0sY>r2)cSgTpDOz)CORR;%Qh{~JnG+}2%~s?BMtIdOgT^hdHWAqm`w*m>8A^X zB?$X^PbMh^WS`O^y=VWgXsFMk8_$7uRl_}+Dej~&=d&X0_;%;s+CoG%ntMvip>ESb zZBqf*7{kIbrt3EZNd`_41K^KSR z_#mOmLi6_K#kkp>*VfvI_|#pnn^Z<-Qn9<%tCyKsRBg>jkPMS zBuJNN0*g%yu`4TV(!R=Y8$`y#@oZ~139i6<#-Pqn~uB28iJ$aNd|w8YEn zyD?hS*xTjK=4Mt!LsL^{@y7P{%HEebIuO!Upkm5TXS5locpkwaRNWv^J+mv`3ICIx zV~znf>oNx1*X@Hv1I}Bto=Res4J(Zts?+%>FRxdxi2b&r&RfQ?bIn8J3&gKI#e&X? zQ(TsGg2W;A(DFp4KT6w!mL(UahvHnXUU_rof5^xspKDxfv#qayk=OGWj9xt*?BmpY zGSXAP2xNfu(md%q-19`r<5Pi}dx^_g(}tNaVQ})g7H&t|X-oHqRB-p6zvnJh%aN zhRt%z2nxfgmp;aSf>#p3Y**#zAZS-+uH1STcivKfNe2m4|CY|9>(BNqnmVV=&4pzm zy%j=C_%G~s&GuFR9#H2T-5xQ+1Q%0GW)Y=!$sp6c<@zc64Sx= zKlA>_3P<<7os#E1lAMY@zn>2ES=KQdBwo^TAl@DG<`~I~HZ?VgN#a^%rDGph)jsVwl`8Gs+1w^`IsE#VKWa&QHeB@zvs&ZU9@hT%RChSiXyC3 zRc)B&$`{&;B3gdb%{lI|6eR|Sj7(3b%&77t8o3-^qVb9AGVrE2VW|@1^Irce`lN)N z;y_;>@p521L9N9HS2k6*bIEclYQ0Jw+bwvnsAa)WJupytxM-#s;^4>CP1zF`Sb^&BJZJo%rj;oE&lCcH-aYnjF@F%#*-sCC@CED;MwONcj;?Q7{ zub0;cD;Q`vj{vkRW_=cYTiaJL@ zsnEa5?;LfS%#p|>`bs?U95oahx195xKS{|}Y5XHYb$DUMF1wC{KSjK96p+E$`uQ0= zT*p6b|6V3=q27pvX|NJNV`bWX-gY0~>3*db7It!u-x+y_P8{A>N!&hpB$ur_snt=F zC)$*envwIyLv7AjZOnG-k1^-i-JRxZwxULX_q%uELz*U2aTz5{P8G%ZoZ@LJd)8IO zh^Ex^6Wo@9L6LJKG_}Ov&`s3maklD5l-Lvaycj^Dt6DrXP5R08BVZsLv~M0rOj^c% z47e?+a8{hD_NAXh$}-gDBjc;}EO||Ge(1c`)b{fLf~8hszS7QTCg#FDH#VC13jIL` z509jk&<=lC%hALdWiADuWHlpkmoi4axTyp=?pq36>#z^6|3sCy27HH^{ENWM^#<>m z-YnO$0KQw+*ikJXPeT&O({L$t8TqS=Pjt%t;wQwiT}AYDtSde7fg2w&$tNByK*+}> zYFYL}pect&i<30_3q$yoCw8`B(T!hslmi$H^J34kGKlKE>?B+20E@bI**G~3?Xi53 zyNU|9phm8|U#VAO#FF}Qh^8*Fq&WYLNH;^@9; zW@ctOfQ_r(e^*f1N7C5zl^6wD1a}#*CyU&tk~PoK`o2sMyQYy$w)c4M80Glz!R)^^ zk_W#c{j@@<7T;64?%pyDhbr-b43Hy~-KGKO9uNS&p9d}+)y-8Zg@tsS9k@8S*(ui2xI`8ATh}KR z4h$$N4uO)@N{r~)(pA{gRc<9X=e$)TKT1zb@WJm*$Y%dNEwx)hSq2p1miDyU{0H(% zIDf3i>^JA1M3ahvD7e>J-(z4sS+mqQGKcKl-L)nrCK5C1i8weokc}i{`1ts({%heZ z9?w;+-0KJ)OWg!^tUZJZBYCpa9K5}!zq&TGwl=N%R%vRt!`Z_kxZ+%me}r#vV=(x# zIez{M!YBZ0q8^=c+1?-BU3DTIn;10mQ;o?{a4Tlga^1`s9B9t?hFFR%(tq^Vn%mI2 zd#m?Ft7)^ZW>VSr!I-zOxyMGaeQ|%CO2jwMZge$T{m!iSPA(0YAUz3-B`Kvd`yD0y zv5)@8go<*p8PJIXKO4|Dc&J6Y>ku_}6*e@H8tgXT1^{CmFWOEF4B6n9GZc*k+{D&L8YfhvpYGSUtB-*9xcn2ELQHLY!$d( zVR5xolmcpIB&hTx5_f7Bo1Ca+v1U{7e_cQdU&b1?hxQ1_P?7u@n6*;^k0vutB6~%w zBmUOf?#Y#w=_nOxDFSI)xo(9L6KT{DR$=ZEJ}XW9-guFEzq3O8w62%Czb2sprK-*F4^3xh!?3@N;{)Fv4@$o+Yqc2bvWv5EJWDcx zICP9a1z^^(t?$OVySoz}!jl(e1(_}$OF9qV5kxT{Bxm)G6PF*6py71%R%-Y{A*_O| zf9iA~x3tz3}y%;(PX|PaE-~e&x?+b5?vC*&8c}NG#mGZGGKhXEiT9Np~BT|Kz0_U|tUX z{d?aeOQOrC?dwg+n>cTAFuFCa1K025JvaK2DpM&eqDiC{YGlg-_CF;E<54AjeD&|wgk^oPZt<=cBLo=oD3g;tW1%Xu%R3})QT zm1vdQ7SxR0-YvA0h;($cbS&NaItQseZliBI$f)Vr73=!D^8cE&^M6x>8RV^`{VybVL-xvi0@XQ=_p>SWD)=Si4W>JClaz|S zD=_g32o!mWEaJ%=Lk{1gEhch56OmB=^-^bvI^f`MN>PT>AEjUCn}}3sYi(XU>^Q_| z=$znxeb?>3=R_OO2md+9-u3)uXf*abwr{HDiaak4Ad6gNg%xktUrLt2X#!N@X~f5g zf{sHi8)gGsU>7N-;ESp0E$3x|bJlst!}DKp@RAFYHn(^05!3q%xQbdW`nrpaRzm(w z9O)UOcMI*hG?m+1E_cSd{N?1?0mDNq0dfE18RM+~JR=WY`R!qf{b|v-oq@cV_-?Kh zgxj>8710Q7ZZ6%*2{ugxRMi23bZcvQRTbA_XRsL{#k6MTk;tDq^v>T|FMe3{K8gJD zIz6U*syyYHdYLJNLxMMN+*?zitvKBKyUNS=Lqn{o>65zVMnzgu-aWdnvL@mR4Tq+^ zgN&B%vc{8aM*NU)zpwu*nHxGFnQc$yw_pHD{}>ELl{pKkhjAoVw3*e5NW`mq znsQ8X-vwUQ=KwUF4$O2W;0QKz0tFDl>h*H~Mz(iKa;72oyAUP&xGcGXJRnc8b8t{5 zqLtuhr(#Z0?6tTD?=&G7bSCj{0!^D-mYu?8FdChh5KGh|{5S}sZft6T!eEPM zTR&VI08XVOC&(}dxv)hR-RpUEX!2j3Q&_aNVRbz>Kd<#VUF=lck8rIIXbJv6;=iw$ znr8cMWMniyKfil}BIh>M5frMDgI3!jf_!V*^CxV8P-Lyd!69qX79?Bm;gOM*K6Osw z(oXsDpW}Cgq!PBi;XuO?#;BLJ{{8W_IBgSW1rW!F8Y|v8F{b`uOHd$y(Mbmg|K4y1 zu8hpgiGie-5x3$6-aF$(c^$!)mhWaDW~mKAZM=MZ1(A`ss_N=QFqBj^!oF$AJ3hy} z_wSk+h(2k+Gv*zl@#3)UX!jn4M0U*Jj_*W%w}|{Q>HYDw+3YB`Pa&UrwzgYaVW9cD z)aBMnPmwCKhi-DPTUAObYaJ>SU@_k00T4^@)qvjPeR*%TkZ6@obX9yo!f?p7c8;$> zSQQueC}4T-Ml{F2+^=V7Z8(jI6t_r=t=EG0eMJvujpprdy^ef*@>c}sunl*E&btln zi`zX2?KM~}SH!2xNV)C)jH2aI}3Jp>=t1GdWq+VP81^X z(wf7fcD6P}+xg+fE$i0nn{w)_osCp88sYDbj*i>$Kuv;uyJU9vmz?^+$3@RRyg-M& zh|gx2VD>M`{G4W<#w^OU#0#8q*3xig94A*$6|Y^Uv$v+eG%jM11_UutQ3Rf})|p7I z4!hSjMS5DAMxYOs9HZt`IkM+p`SL;!vKJQLQThjH<80u+xE&)3DlJpd&GEb0u=J8m z)BK3UM&dcsgV5kVE5E%dfAlKY80u8?*A3=%Q#b9ScOv3vyn^hI?|(J`BNr15+i@^M&cE#{Fn+and4Op3+S483@%RP_+~5$0IP4P2cU}c_ z3QZmzSTQ8f>>_6XCi33(eT%VLqf?V^XT{8(JwGLIMfF-l0r~|eC=@>RXGl=k+dCkQ zl;Id;A;lH5X1lfJ;&#%Uyd0Zx>oT>&@qJ`VG^hi0-lSDFX?!ZO)Kb18W$|bbeW}Gmc_6aTdTR>^ z6J!t_uLB_at*YMD&bcL2glH`5Sj=jFx3l_pZ4WP1wD! zcn`Rj)5nSY+WSf+{pkb;K}Cq?r*vOrBHEEAdDE2dg-WhjM?e7qFU|+?P3l?o42x(IeMqMWsiR7v~;Z7pFF6(+h(? zf^Igsp|t_G210-8fb`htb1{HrJ8iI5Ck{%xY_+S|zxml>9&*X{vdQ+UnR|QehuIQM z?WcK6c9u@6Bg2vfo(TQHt+Q5-tvDu<5MyZoD%!U!G%)CXG7sX#4j&+zF8-L^Yo+TH z1C6y5Xz*gNV%7V$2cy z!d)`5TU27YEBeR^(a4@0wO_qA6mGyGP73vO_tuSEoa>cg$g3>8X>@Ztx!E#0IDEPS z7&?%IRepS378VxvxhZyxj`-#g5*Hf?0I$|?rcT<=hDHC?EgrIvM);n9QLV2E)Zd18 z7bDx*DATA4Y;KU^h?t(L&@-9|jB&r&bMrfZ&YX|M2YD_#esMyuCo376nayO0`WWJa z&W%nHPQV99s2@b1k&|ECj0E5JcM3ggDy)7HESd*@GjvF|cN4PYyY^TSsXi3lYk|Zo zHwP?t$f~~T*yEd&btmAE#UEe$?bpPu<&9oqUp|>9`2->&2@n5gJ()r-~i3v zO#(%%ew17Qd1|df;o5n#7PL}F`m9~3l0I}sTQ@!&$nWN6B&GMpV?OECI>CBowXcanRI-$%B zYdCVVnJ&q+GU&jOEYNZZxaarIs2F+EwOfPYjk0~+Kcpc)U_i0zk%RnEf#_XfZ9siS zk-Y*el4lU_K<`zm(JH(pSlI*1_Gl7fSmXmLKQR4Hvj`LHziHRt+_}Bjt2%P%RJ4Xj z&lyNL5)Xqd{V~f9Uo;c$=E@TOTavlh^Zm-=9IzZ8dCrVaCvuU|Y2xSyCT>bRY2pFd_5iGrSkVh1=l({gfA9xX5>z|;>TQ7%5DtKIWu(37*AJ4E zi9GfzS#1DmAo`FykK`wmG$K`n<~E>9^mQWDDE`_J1E9+1bjE>EZ{Ez_9~*6eWF15U#Tm_h7$lU^8zE?n-Y2OBQm9QuUc zruQA9aDV;HM(VEw`1eN>*9|hldWc?5=1M=W339wZ4ypPREAYEaNBGoBhe^b+Fb zC~gJ&((ey4y`fb`sVDjGmX+vK=>ie^-_KX6|E@BfOU#1MlujBJipO;g7r%bVaDe6- ztA^YSHsnmA=PEY~c+2!Bio?xaLF~8DbSUWQ4nz6BGa@xJ;k3+^}l*aIr11u&9W6!@UK3Md&`? z1QatCwZ7{h{=vtp*qV@;i}fV+-CvPUTHV&di%UvkGatKmFX3~y=f(%$t=&G{AG%yD zKP*2Wd<6yB7R59Z9TiQI+)n6Iq+HbkGIMff$UBZPRaI31>S4Gnc`apR3)<2$z^U<5 z(>61H)LsIem>47le%BuS&;bN-AUA;zDi@56uCEs=CBr77*rzN;md8-O3<(+x+25>s z8w#jZ3zOI#9ZNMG8V(Uax%tsx=sBZJpPjq=>CfavZ*Ok^^8w2sYM({rYOi2rT|AfL zd^S-(BEg|}`|G6yy`uj{vL2Iw-gHvo#f2AeqM;=ybn>$1YPSMn@9nJ{e7Y5!|8PNj z4;gc$W8dk{_k{X&=8ZQrh`|C{^QRu*SOSug5bmIp=!}ev@!MPf<)eVJA))xrS~M8) zu5N`Ko`ug9PVCUn?)H8x_ zx@^6?yw>aGhL_u$n`c{>wt62{&1kOqBGA}4J4 z(+89?jeurHi7kKm;9tv(<;RSGt_~F(?8$#J(lfO9DYa`G^ysD?ycV1NO=$gA-(-n^ z4fU4&E7mqswa&670G6ywr<{@E4P|WjCXlK@W|CD{pdB4SD+C&^(RWkaF@dF4*_?)`+{N0Hx=_);sLrj4|iM8yAK9A4>=w4Vq8__(`9zim#!Q;2D--O zQ~U`E%89>4k>r{bVK+B^V8HX=SLsgd?%KmGs16ngCAH4@o0W>XV>Rg`r4ih->W7RV zH2M{|L0$wAt#{xdS^5#|D%*L{Pd$+=vQMXK=6n@)CE6jB_1iuuNLN|8gr85eYAX4u zxW4HaPzJFkEA1^U5+(moVI#>I?TO%Mb-$qo@Ar~l44#eb-6C9k?y9S*s=#>)yVNmJ zy?;NKG{0H3GdGu_MQzKQq@S=QE3uQ|u|LZ!K^JjyGFvbwKB$*F=qg>V)a?AQj?tkW zbeaTEiT=Q5d9HS2qK=6kw89QT$}h?V1%;rEwZ+&(G~1%V$b-E5B{?t#$1mz!(Yte? z3=qSWBD!4i#coG!$s~c~(Ls1l*ps0bM#b~ezdQl9@gO9ssGVUf zsSa^CmB{V5-8Z%8fB#n&;1-fOisB&P<9ny9pud&HHa5^PLFA-*=LgTr{W)+vkZj2? zjI~xPjL-JOJ0Ysx?+6MCdLAvoz{^R01dd4l6Q*d$C^%B2(4Xc}~5g&JDEi)GqbA4tl`%9@HSyD31OSe_2@jchBM-6jIW>fUXc zvuOnF2MWMUS5mK>B!Lu+-ujfyosW;NHTWTD?+i#upxyCIs!XCbJS?Pk;z64+hfAop zPii+wTsdg;q_qOCzWM?sUemI_@`zb`X}7o3Ui@X;%JP48!}sjKTRU0ro_7*C07p+* zo_5f&{HKPGt3U%XV{{;F``r5F&x_1e_iC$Muia(3`B2TK&Ie>?DwFuldeZH-yySeX z`&=kC(fLZ(qZwUw4;7mdFRQgiE!_}OhKB!p7C;)eH+jkA>2MvFNxSdK=rK^6o?jwd zo&>EJVKAK4#><6*Fn;zIC?81u9h=X1Wd>Wg4HOZoQs6K4&A%btG(MwO9J38H6Sm*_ zk{b`Z&TnkOr#5TzMp26+2R#f84Ru(O>@Yt8HGipLRpb3*(iqM^l)J?x1wiNW3Ns>T zrj+XAsP;p+$+7u@H)TLDG8mNue%~3eTj;#hQiM&U=V^2E2z)kwSmyU$@u}h*EC=O$ z^7|0{S%h5q8peJ10=4OKZ#{Cnc79OWtzM-odQ4f@Q#fJAm@{(xvM=!lM@Ie~2z|8c zyHI;s85;notY-atvuG2Nfc|xxV$UM) z5iMy40%Ns22T?M&V?&2GfYGX(uQPssd>Vh4RW~h>vK@X$|Y)wiP_>;m8LgSdgmKM z!9^;91@^Exa^Q2oP3MBqiJT+fpcs+6*~TjAyxgp;EXFGbpX(yw z?oytVyU!?o3UuO69qk0~uub~2zQU8Y4R>3$xOSH!uD&b2e5%f3)qB}Nb9B=7LwhN^ z(^qq^jl7;54>OrPc^WF65Q*DMm@dBaG^U*_9&W^k1NAp4NmR7*frPQ^vX=|&Mp=7^ zpa%WGcS1q$v_0zCUC4Df9rq5WDq2s@%u44iH%kz6^)|7FFg2~S4oMRLAx2MvMYjwK zY(^w19T0&Hlg56dkQwQjW0qx#Q|0fIl@L+0jdkx#uPhR; z4>>0r&Vmtaezo!yb;?#xPyLu}Z1_p)8#+3w5x}vHj+a1Qg`WJcA!<=qxp~3E@&&f$ zUM=7r2o&yssDKZ{Dv~B%0`V`bWA!Cv>?MI@BXB6DKwgO@sru?)Oj%!F*N}Wi60K>@ znH~>r0Py((t24DK@P8n<0xVyZK}uzYkiR3BCsianN%Rgt>3iOuKLLs__Gik}tJ`!p z-QkD80f95}?6L8+cn$`D(=D@}`DmbDq zKnKOW*w{_BkP`Kr=@ySIF;SR$;;!gr-ZJ0$V{IRk&L9(@-v%%>hQJvPVCw>^@uvdsiB4e~+=W`+{Z%Y>{IU;>DNGgywRY4#e&!Ttk zZqC3xfOqrRLxm8H@8@8{PT%X*%wNUv7{)LM<4goGfY2x+H6!u>&JsvafNyA2>jkh9 zb`t3^7PXt402U|}jf;3(0+6TWaPmlAP@t>`A7A8QJt?uUN?Ph4VUY5N-O0tFpe7IC z6gmF<0hrbqPnNwM0(t$9^#(vo8_4&smV?cRXvDUggA{kc+@(SDdgx-+z+o|;n`5P- ze4t9AcoM_}?H+k4c{5PEWX7)2OVSq&*s@f1@0tnC&;Hn5|GbgFO+NpHwyKE$cUXx*CT7Fa4jWQtKnu7Y@S-hE0@B?eT>=6E!lg?ZkuH&L>F#c%K?J0c?vQS2X^<8W z>F)0TT;K0sOI@y|=(*2xW@gXcdj_DZ+AIhWF&?XQ9IKXVM5Bp}M$Lo%Bh&ZR;(des ze>afL{0{K82G%iN=iA1VcVB(4yD4{1H-~vn<%zz1t%oYK+xQJa$G*tCe_+t+s7$xD8@h=kb53uFml4pR|8g%Ia1qpc^mpTEcu0YZ=S z-KC9go2Po6)<`6M7gDpR0DBm`(C3e9DQIX*Yxc6ZW>sa*rv~bukv~?Z41(Oy&2Uhx4J~pPNlF4lP^zaBe)#Y=PNv0o4 zruIr^kSJ+K<-q%#1lmP>gODZAihQd#$4KS<0FXQ1oSMF3WAmEhj~dbtuKW$lBY03~$n!XEO@;TALPYcP~mJ zdUFn!+6q6i3Fa2dDQHYl_TO7CXjE(Ne?4(P4S+Vn@7}%B;~LSV*E7NJGel3Z`vQ%Q zA8tSex)`zZRRsxd+x>ojz6PKdBQ9P_ue;sp8J~>rO%@|;EHcrdgZUATDN&#!Dw7ba zbNrwk5(tR9e^p3+?|yRZXGE{btQFI2$#*L*-Im*!?N@bIL!LaiFOkN+Ucyl?cz0yHD8)t7n{>162;i!T_#|U}4^X*Prn~KVz z?=1hYzx_u0uB-S_o16USFC%h$y|MZ#T@lYc4&92?b~TsEg}}-q#m;^pxZ)yYadGs{5$8YRN-u;e5Ci$V>njmS_wDSGnoJh$M#PMF~y(C!^{{ z8XRElvh;cQ27LN6v)t!B^G@FnQYnPJsop{j8xtml1^Arighd*qFSEwnShiP!vrqJre5t~thfV$QI++J5#AT%h!7wrUL37h+jpos15?R~x{ z4F*>MLLziI!YQA~wtmq~`DDMmHosU4BwyU{uYg)DN&HUXb?@*Z;pH?b#{5O<=BC2n zcNY0PRi@-YruDRM4O*|jGaVVrnp$c(YVh6K+zkDU_fp=B-c+&`Llk&tLzYypn`5

yYmk%(SIe;Uck=Mr>QPiTqNI{)1`j4l{7t9@}%(tU%?UN2RJF@wH$j?&9 z_uy6l%E?If=FW`U2*-d92qdcN675ox~jaS6)Q0 z$ZrhN1>6*XUNn0i>G$~Y;jZJhG^Vl+>D&DL2h*DQ>ah~FQgtwZ62|Ya+N1ft$Vseo zbW~w4%NPKJXsO&S;{%b&y(`{WK1t8J_}asMmZ4qudv>G{%3{vN^Uovl?>-x8Jmpr- zR&?YN3E$>q`fN679LJ}Y4*!R}`zZp`$5l(GwMv^WP~*W9ZxCrLuTjMHZk=kgV>Els z(ibO!?GFP#2)G@y%`L8nse}^zdUdT2JJ-#4!Fij3C^a=TptzI1d-IkKmmd_LpMG|1 z2h<;-ip5gvRrHzPow35WgKxovxwH4;<5xWYbidD90sS7pR?Y}GE!^;*^#>ZTZv))F?aKIegqQ9g{B*C6wuC8d1mV`ZCka9317S&Facahmp%0E3}dE*!@yJ7 ze@{q=&`MHK<&!s|_d=w$U_)PO_gQEt?dJ>Vz4^G{Djnw_>_$;z)8Y~RR(rg7cJHoz z#vGyso)+v+6hW05dqw&LfNIOJA+KM50}3Rn#OF(&LqSl>&gYC{q1q6rF#rjXmv-bc zsEizFW&{|Tntotr9wA-MX4O;~d?`eFbnWSN+HDB_;oo4}Cx zHb16=wwA~f^vC@G*iBh-33;B&3}Ic_t_#G=#O9F`Q^MiI1f3XTg2v@Xirf*w=L6BA zYkSG*@`Fr~wceMG{eTT5h&=E^Il?5JFt1gQavOV7J9Y>G*MC@{a&;+1X!p@$3(OZK z#-z|NY}X=DZ9({oJx0d&_sal%^WrTL@J#%Nldd!mQFspDLM+pU(^8ATRELaiXSA&Bj-^hqm;qcCZT*RWJ&E=iZ^99_IkA%4iLX3(rgY6M-# z`&tPc1;Fv7yqLIZF!v!tmjjx(7?|~8WWMFK;Y-b=e0RZ$j12PWy$cQG)URK+pL>Id z`1%l^%1JWXe^A)ZmnCqpNAR00TtY0-vhK!5Lt^677dbh`nyR9vrZ&@@cln@h6ndMYsOD;|53V1OJby&|%huC5tn!7qh32VD-P#)?Rr1sGAzrMI`<*X?6#{joRKYq76eoYH&v&KF0I-aMp( zg8LItdw6qSaUxnUb-@*3&Os?rnKB$YjyW zog%6!5cFHX;*Ul zMg0KCJzVW+rZ<28E*@=;GCIHN<($pj!xPEf%(3Ec-%@2we&)tN(#M1P;_L1OzuWs) zgT>E}lYdxs_GK8PKX)wZ>Ns#fBiqI)EK?~y1_Lxs2fyp8V~8+`99{JPJy9~8H-S`S z&jk&FxS05KIyVkpU!fB|GvuaqZmX~P04xh|f$xWiCle#?Z zPiAapYfoEJMJSAp8ulT-owiqN;;XkoYIAqJ71o_KwXuoTDxaavgsGB!gSnsIzIJ*e z*jzEW&;3T--G_0~b-!NH>Q>HLaHlm^ESznK z$R4BrKH|l!*i$LjxcM7|6?g!wJAPHVh^ry>xQ2aSG2}1QO16Y!_GT-eeM07!`WdJ( zhp~#;`|mZ;1{g2g?{wV0XG!mXsj|BINc>iww%B6ZEMhpM=KeRce*d4}MmDA)(_Y-tHh1Djcq45tDpOSC z8m}k?K&OaThf8UL9^cMa(bTFQFeIY~EkJ7H0OCu?SMMR7oRv02Fmrl!R z5i`nI)JRNtsDAey963@Nb1~6j>J}e#d$r1E_ zkc)&K@h5P5KL6u=CJ)0+i>dTYjYjon{C7u9PEO)bQ6^43xCizUQtetT8?9GaNy}oB zpVN8WaC9dq!+=ut7}j;<(iN)TNqSeTuL@NI$O^dk_aVZP^kIQG(L z@Z{OKew#dYE||JIE3>g#X<}gTjJ7w{n1oC~qJg&v>CR`lP@{Chnj6dj3xeMJi|h-C zd@e|na`fPDfJw3(3z7@ZjOb_#P;S6HCQ8p(3r3CA$T%U$JSHBBw8&wk_g&|_5n1H_(hR?49rQ~i{IQtk%q01u*8Xz)yn_$j zyaYLD=7yn|Az=N|m8!USSsnMB&Z&?Pw(+``jos^XU1Iv4f3^Q$>8n8=8h+o^!yELS z<`_d_UUdanJ<^HJjju8~I%dx6X(S7dU7HEE%KnkesZb&QJIk*WbhErX=d$bP zqAKrBH=b52YwGIz3hmmK8ak#eSMG!X{(ywr)M=Tgav!7VAH2VASIpNg(T?X(t&aYf zi;osE2mDWTL^59yrB6^hj!k&W{`bmA9{0x{qZiC2|@ym+h&W0&TeGu zv?W3>>C~D=>9iYxnvh+?LSqGK@R;NY(l+JNxOt=eCVI4ElN^5{$voYx%ThIbB9&a1 za$^_UK33R9&A)suE?TZZ`qDS&!OmG1sWkXv)i3(tkH`^s`68)Qc-Gs25tEmMXb|$S zx>KgR#M@j8l2Ah>rbJ$!TL@rSe?a7a?KpcIj|-XQ>R?I$&+f}8Lt8C5Vx4-WH$3$n zx5Lhyh-?^Udg`8$4!()=w@d$aZ-9j zE}CFaMjiXHDUTY`^>bH0XfFELfs8b|lZGa7^zUs38wO>T#lyf1)eES|M_O%|!Zp84iJ*h>(lOV25esIIGXBO7IhVKPn>8{RNk z?pIB|&a2 zT_$bc#Mp*~&$f^nd-&_nCME|TSEWyf8=jd)6*c7RXNx(OF90$;*NWNapktp7yi?bM zj-HCee*P5{w(`P6c6C);CzPS9V%$R%#C~OD` zhV?>U{lO0eesFUb6f@U>i;rVR#t>O_j;)6r*R{*HQT!i-#rMA5DWvT;PerU5GkC9& z-5zkjL+yu~9%;aK5&d3$By=SXsemC)=gq74X$lF-Ds<1Acs0f~e(29nSam$O`t{Z< zarkYbPmh!rXSr#8)j*}C!QQt_Z1BCN^}QHvF;6A@6zPzTuYOOJdWGj(c3NPxWt?}* zbRS~DzmPQm3Q@IY4`d|s_40Ke&*h6JS#0{1><~eeurLPdJgm3JfmF!-Dbv%_)qU#s zeB&H{tpjb}Ooq-+#tD%N_>yh)yEe~;m#J(a8t9T)39n@{{gCWVZ7q;Squ(_>%ey(~ zc<>Uu$k$&uvOt&MK`*nmL)NOXJ=?^3#K>|UvIz@E#n|{#OqR`Psa-m~izAXEXLfgy zej@8!I4n0N^d&M<_yeW~E+&H)f!Rwaex?2VR%eHf!q?bK z>@t=ll&ufk9rwL#_9PgKQbD95Pab90;W_XYi__BTC<;Ovwn{Yd+c+W)?#98C_0mzG z5&}&sS}>N1OpVS>X71(W?V=2FIu$ZfrgEgLf2eLRglj)K_J<4g5(Z95rKpF%`Ox<= zCDC9qrNanvtbH%dkea!)D}PHjxvM{{LHUcpUw;i5C-L-QAaw>DDVm*VCWROh3mr;q z3HpxtoS#5${`g%jtMED)DUJ$ZICoPCaEcFI@wyxeUdV>z6*%2>V_ly;ojvV7Cw+KM zfQkULHpOBKVjUEP*^9rC?&&(|Un*2BdY|;XmwV;xBKJfMonb)j`liVu%b0FY7q>`l z$gscZ^gpB<@NRxWK+II8BkPZ)y{?0?mOmEvTv0);t^@vJ><>y^Wm{Yl+l1$yl8F^A zT{$Ynqh#Ik?Aqmo?MEO_wjU{~-$Uw{%lHuILzwSx(QHblQQMCaveJ4fRi>>)lva_b zig(fl-3Z4nG#~c~pDweW?8IZa(1XBa6nvLBN@k;;$hbrJ6j7Dwhm2B@wt)Zl0<^0N z(6M-Tu})-{rYC|;Da(FYvwB`O{gvQS;0!>6DKCrkAFOciv$*^^L7~b%JD*9AfULj-1f#=Chbgh^JB#2Ln&gialYthC!$0>g-tOTS_iX=>Q~aElgx(XIvt)Vpw?_N^1SrbA z{7lNyA9d6y>9+3`5W^`8C$>EfF>h2Z7ax}ws@P+Jk7jeT06@BUDd-cAx?TJS;+2li zClzDM;CWa~7&GG<9S&V7d+?>IWC6*e^F+0bD95OS(0`cj^$9QE+>@g3hZ+Bap$mAV za`Zt64OB`~l;&+b!-10{6rb?X8%7naq6`nY9 zWo^~)`^(Yt2GY}+2z}PrByu>;tjpWN$vl;pz(eZ=AC2l38QS?0B9ErSt6t%$69wCm zRvV9c=pw(?6@q5MkwT6J5#^2eBtW+x+&C8fUu^=3jqIhrV-s1$Ud-|=1B=pak8JuG zC-L4C*ViVP%;+}H7S-?yi|*6dFv>Z&&kqX0YrG4DO71ON2GEsWhu`&=2_nQ+@g8V)@3*uo1Xc!`EqN#zwUl| z^n>B|Fp-66s#sX-32_?!;valaC8j&;<>)_k?GQn+AMDNAzd!6gVk`1+t_rL(8^vRw zpgvp0L=m8lm-+Vw?3I`>isxobHJ=izmBko6Df?=va4kR1a#xL0Ss0j}&0TPqdlvo> zlf%lf@kS(A-`~#Cd%ec3OEMs(f2gQ=Ehm6vuEITJ%01L3(jZnG96uC4v{7Yd#;$@` zeD1uMvoA;8KCzSa;Dz4(!$p@u#CLICuN1+!@8Nj}k;aPsFgWJDY)NG?v$KRppV%XVS)MnFE~$5U zr{iVpgKtll2&MM*jVR40;A-;-^XTW7Bpsbk9_dOt4njv9pAT+iI^u>@6urvi58zT= zR7PH+I>EDbMkSx^cj@07c((8@)DSg944b}TAqPqM+*T%|nUZMW8E&vIotgr1$bT;! zu>Z!U-phsa)~n5|by}~GKm4vnCJA2HS8KRT{X2mp_Of(Lbl0k$FRxRv zg)`f&bRQUn<8gKj0m`aqH}IePQ1oQkOTT-DHF!FUdz`=J7dwBJMyny6=Dpd zM1J(~(FH&pU38I}Is$s)7zoqH?kgWKp`8c{MLSaHa&EBVrPjD zlXkY0v$|+j1Aju?CoNo!|MGvc)w?40>B+KLzN%&^t^B=cXrzR!TM$QUy7ALRa^mTZ z?db&|NYJ*%V5{7BKy&>VnLV)sy7&XvG#%EkHQur^Fa^RXk0(DF$j<%3J9~0Lda^c~ zU5qIaHQ1?5FLp#SEhVM%I}0!!F-5gr#$od=_s@w=1UWVhgTV*}VFm0MT5wINpmk2X zD;$rZuLPdwli_qNtE(icvsgZQw}FR;$9JNtA%mx26>#lZ;GJcig18~d?RXW0e!YIC zrUc7Z10zwa&-5y1L9^y99J|IVG;l8+Aew_*FTU+4a>tkTuyqyqP;Ya#M(Gxz1PYHu zY5=>M0!W3Z=@i@a{k#027n;8O5(oJD#YP8OFqNmRZEa(7VGRy%=;9;fUg7!B6T(Q6 z8oIFL`^DET(0&}pZQK1Hr6}IHySp3H8=IrXbg_XzfEtoHs22g82k~-aVJFYqDnaLE~?22&H10IkIk} zQeTlbWxs<=z6$7z8bxH!0obFsLPD+wF0uIh{QT<8hURvKzVAf~iPe2x&|X?RUxU{8 zK#|Wuly~$KF~9JCiC3vyK_iJjM(o=g)?_pZaZ8CV4>e*i@~f%re6lJjI7aHxZsW`! zF4leGLpg@DjK#&*Tc}rzq!4Pez{1Lk$l6=$1#^&O%?$`lFQ(v}DDCI+Ax$X-^R(Vy zXiZYhs;D^R@rJ$w`-!{zy~!S1wU)u>7YTB?TrSS<#hv&+PoJd;-VJjB!_LB4>MOVF zqa}8EKvFp94!>q585EPpE{F{tB)5@(K?$^HB<7j$#HLuKu1D~mNh|!@TgiCOF>bVH?;>0JURd9K z)J!74M?~Hd59$8f_28@a7^}6u-Auva-xbRxzcv`cobEI>ahwWiqqmCYDk)UVbrgqaqU!X?BF)h#c#R)5=F32 z0m0-ketmvy!NnGGNJx+;83A6*+FxGG9p_X~3`5X}GToQIQt<4qx*6^)zqv#`#x6pj zVbsa=j$;RpE=+K}67GHH)f=nMwkH^8()7$mxFHd=p5<&MUUhiGsdnI|bbCSk10pBa z4S$;cGud7@dB%&CbUNB#_yH-)X=AV^o!=v{)^x(0ACiISi$+mdex6aY!kxm|Y}&$L zA7JvD9$AqPM?8!Ynr4xa{LRNwFv(HyF#~A7o3r7gih67U%90@zH3SYYbKT!rfFnN3 z-F7_Gi)5Sd%P~oY7cBz5KZ)xl$y~>_bpxx>1RHveHyBhpkR~DBVfK$*B6tJCdy!df zc-8Mf28hxga^~s`zfzJQHJdCP1&SvC{`p?pW;VK zmZ?R2%xaS2Pbg5fQ!3Y(i1vNG>5&QY8Sh`2qQw=7e_TW0gWRsj&nQRvDc^FG2$<}52!CtZDP&>JJbr4k+8&~s?U0P-%BcSSdS7Ti zm$t?`JT^87it)n=cB8$yAx(VtlI<0XeU~wTcHQ-TE#Qyf4a_sv_FVG|slA@n%&w4RUb-JzuS#vME-%wC* z7x22=pW4Exst^jxh(KAXVZGeiDYAz&ywwkzh1E>zt+Se)o0~H*Geew&H2G8prk(zn z50-hNEAx#fV)d~hmWsVbF%DiNT)vvP7=6E9B{>|FNKoN-{=WL|R}unU(CG}rCeiUc zrr*$p*)bW`3*?MYJhf-(BUnGtBL6m5=#XItKa2SEEhzH8LMHukLZAXMosbl6c8N%p zMxer($2me0D3aM?y5%ziH2~-fndTIVW*~6yap&bI^ji0iq~vX|s0p<_tfd6{~ ztZICIkAh=~!dpS4Pbn^b?N_EuCl6_IlfaP;&nFscXz)QJHg~PrR*4$hlZeG3G8x#A z?H~Fs0_+AjoPi(1WeYsF3f% zKssRgmk!LYZ)ZD3we8yKmM3A5Q)9YZkw4#xshWPza_)rXVpD&ROFYOdlenT|Gkenx z-_Gf|pXc1Y>?w99t8ZYl(x6#7Q@#B7jAh8k)s>KTYT06@gQB#hYqj4+msPh}f@X{c!Fbk~&+R5*ETBMw0ge)wL!tF{AMKK*Zpz^3M-F zU*?(l!L74^ZLnxYl=9`Qiw7`f4VcyV`1pMuFgezIrGSV+?O&MbiMsuzOix?);ANme z9)DJ>30UNaps6{k#{B)Y!pEBV_1|??#<4{3D+V-1+XMeG zMcs+a?=P2NPkksC>aX&O3oG)E?>BqyE+cEro;_fOMn{^O&&d%Y5M}Q?u%v*yb_T5t1x zo`sZ@wDoouaFLxYN9_x1Q$k;qV4yuggak zav6F@-sY+G!h{Ay7WVzkdox@%CR(jo7V1I+{5*$CK zg5e5@lrL=AhkeiIB;=w5gs_E`-XT)Coh_8*Yol#qtjT-UB0i~;g^Ebj0m>(Me=7Do z$DCZO>a?tFZ85DYNHzyU(9%C>QZ0;(Rqt^DzcBKf9TNre{Hch(wU{~|Yj_Npx-ZGW$U#FS(wFaPbN-^w zO0`M6G_?0zLiRb-lIHF=I>P2Ts~jkgtCAl@U}k1#gT8IF9M#;6`)@swMy(>u@aR+f zJ@u#aPiz0AYW7#+6FzVisGr4hc5F*ZN~&Us1lPxQ+iS{&oSfYy!?Py9)Rb|w(Zp$< zs*LTM1#xO0k#ssU{}}l6pvd+--~<~-1rHuz{_7@~fHuNW=VXy8#h+njWo2c#g-O8Nkjy#B+ya>kBu^RJH^^iM~iTXM4HZ%o?+1K#W*n5pZOLKUx!aLxOm8v3?TpMl*#-himjIk#bDPK=sX6 z2{)?&f*CQHky&!U>5oBFaH0k7&93+M+!O|**Hh{Ap7o&?DMD~EA?>h29wL*NuTBJG z6E{q4mzpH|1`|e2?3d^nhzL_gKK8SEU}R*K9^I`zA_ubL$oXP1wmBzKts#6_++I1YTSVg!~g(*fC&UI*`u|-YhE>SoujFGY>O8&b1Pnk z4m3PkO7RLHR}#~NuKsrvz$~7+J&rD~WIay$HJ6?hJqo54kfSG?8W6DCe4Y_O3N(KL z^G|pXQw#w~Xn7%=w@%V3Cp-rR?Z~pq$~E2ut`BuArA}FcqQ;S{*6|7R9O1zf+B5uz zzJ-A5ubIySk9Ohn038@DDkScP3h@&jy0aLb@;+ex5oM9`!yI@vD4%(1|7-DIK)K63 z{ioXsR2uO0BLB;}!ZQPoB!X=}ri4XkS8;&WUK~uaZ zskbpUYcNo7Ol_MeYg+Ub^$Icdi&U;??gUkeoC*se0~0J;An2^#^4c27 z{KHa779m~aCg+FELaqK+&ux%H@a`EfXw&FdJc5rB8Bw+{C12vBri=Jx{u6Jr^(p~k z0-IDZO8O-|9xi5IqX&Tx?q5vAee9DZn=jU;N9p+oP^fDdfS?`0pTF>T=GfNTd=&vq7qkxBd=->Y0Un-yW-!Mm@lKC2u{W9u*=x-3(d%FK zl@0{0BpC@q5#Nu*iO~91BUIUoiq)0d6dasMo(S6Q=Ma~8W|SP(Yg;d1lF|DcRbTh?Vv#MCwgpnjWp$G=F+g7r zEx27m_%ubdzOC&CzNG{LdIQOSl(>a>!@`J|1JyDIqe*!*b#&nCBcT*o{0)yXFiD{p zPr8uHPyXC+1U56MgJoy3@U=WA_N$dU-uE)$U(LmTu{-3KxH0>xxqqnB!qB1UEpl3@ zAGyExjx(;+2H{+%RnD+puE}zm)^U?2`u6BS0zRG!dCh*VCocF0=n2<(i&pF>sv6jx z&d_SLUUAR7_o^=(#+NUoO?8&zkWTDEc%e=bKB%hw z>^-^d*X!q@l)O^>P){!4`2`WVu}*7@cuz6elJ1P z9Z|Kmc0iB33>yg~Z#l2DjhLJ@cw zq(k|MO)WcS0VQ(_K^_o~rpCs(AD{99KY}KPs_}he#nAAuoTBZxLL_;xl(7FasHzpEI66&n_d9rsO?1g=o&IJ= z2izIF;{n@NEIROIHFT6W0cASw#0^E z$oyzmV1WYEA_Az;J|-oYpk-;zMn)v*kfN7irdC$W#CUF*8LbWA9-bq~0s?w+Cp?A+ zJ!pP@K3xAjN*3t5uWBNjg_Ujpv<}=Ib&P>Ag#2**D=L~pfV;ZgfBl!UrDGb$sdZ=h zoHo(H_7;>T(X|N5ubWw`qUtNI5jG3nz~~E#2l)7)lVeQEZm-Jm;4Vq8X@1YD;2woq zipCi&NHqxoY5fgDmW2pY@yiu3VraAsW)8Hn_VBeL$c&Zi6|bhLe*wS}Myd6-l#t|Wm4C0V@4LUh?+HPrmqejVtij*ny=flTmJgdff)X%okuPJyZIXnv4P4IOG+!W=Wt{u^MPD!6G**C1>3u2S@PB4ke@{411i`H#Fp2t&%mt{xCnS63IWFinM%N74w_`f$0>uLTo=1AWoF^aTH;S?q0= znX?Nmod6K*(q^j8X4R#OnZD)|w>FBM`Q zl7aogbE>}TFN%PGVLYC&v`+YeAs8e)zc`tHRpMX`AlQUC`Uo@FmkIV9Wh(J3U-jdP zc3*=<1McVBH~?>@Tc7sBIE2BAe&QGn!Tm>2QGdY(T`wd}9)Qxol8=hG1RP;UZeDlJ zgcA!*5(|-=O*aU*19VtNLfd>{7OAvLagALFEA}`=4@!sU4J3u5J&wtE9SaAK#=t2w(57@8}xPK?1JroQ7 zFBJd=4}cvYWwe%_>9l*N0AN+8bue%>r&#Y4UXP%ht5-<4rUBk@4B%q}R3dsIzqZtBtW2PiDGIQj(tPIG3V*hR` z?leq|8k77%`a~cK@b@JqCKhM-HAr;NBR26{rZFjD69_o)30Ow)9|4dHR<#)!8-pSo zZISx5V18|vF^6XRZE!W%JqN7m$9Gt0(9gf7gwgGy3#KkKKYaM6QVhQk#wS~`*LS!a zjqG`Syb=?Gw+g+gF+9+GgiTME&T!uFIJ0a7pdXm+KIx`>v{%%3n_J~$@dT^ns*th5 zszh5`@CXHim}){|kpO+Z?#Krgfjmg)W;h%R#!BVl1lNIuCE=UvyqJLHFRQ4y{FKRF zv3DsLi<)T>Nj3dOeU20)q~NuG{B8_n$JtZ5-y>5xU*+4pbzf3%W=2N-KWA8z^A2t@ ztL`f3sdDrxYg$`}p@t|hSm-M75Kw`6PWTd80Mcs&$odyRpiCGzN6D!AtGpGC<|I%g ziHctW_O36uXNK7DbrsLCj9Ri8;+ylV)d)g&N` z402Id7hIC*#rYD-dxM1|8ia(u&9+qbFaSmX2xhm)oBy4FDGOx5$cu}M;t{T4Dk5Zh zB2lEK>H}qI0LjRN{x!9E%1v*&-LH?SvwSX}15|^T^)$k>ybgY%XZnF{x!X7rgXEr| zQ3x1SzxO+jeN@IS;bygjEt7aNmk8+YZgx23JRQn8Td8K%j~^>TVo_h531ZEahePF0^p4oaE)MGZWBr58dl`#X6&x7sGvf?Fm5iT02vn(5qc&6LL)6Ux>AByGf?Y_C}ej+M#YmAM)89l)RrSlh)#vJf$9 z&04S_5mS)$H>U+ppt%krpSJ_p-dPg-gPa|DXS)B(9D)u)0Z=r&VAs*MRY}h92|r&9 zwXIa>^k(!SMKx~ZtF^j;@zB=F;GuYyTBD}U+??%mH6wxMxGuJj+yCzc$O?_blT2g) zba(%E7BDhG<=Q1l_WQtftlqOtc;==%(46dbEgli$V3iWjg>OhuWTSYX{XcTLE51;P z5gr=VP*)y+JXfZyhOhDayHFxsNxy&46wG(Hcy6DnRO~|7r=7N>)QG5NlO;3`K>~#r zbhc_ty{oGI?1Jc zFz+bD$u9KNjhk)0kG$i#f^-}LzjHEE46_=eo^?Zm2vR%r!5aW|8y@>?(rZR2!0pY zNwCpHu!29~oejR11Kcr~ZA<_wMZn^j$F1(I1)EgMf84{)UxLcHEV2SM{jShm{XP=h!V z{q_39*m_~JGYAPfc1p2#U4%^1PaWYDU{H$(AGLw#bGNWe!6(I=3eA0!|BR;6Nzjaj z_1GygcVyA?y|J;a$hOWK*Sxm77b~aQHt7C#Y3r;XH`$L<=3c_dt1DPHd;3Hd9!z+K zi|urMvk5{a2a0YGbnhbBU3xe1d+Y-V_~Hj_w&1Duo12^JEoL%ZU~j@M2>Ms^S)O)8 z9ts~ayJXJku3yRgO^_3#`Q`#qa@S3u!sf4reT_mCx(;&?TtpSVd54bb@a(uHgaqO_ zhC_&K`0?k}0~N%UgxVZb@~^4a;k1JNOPk=kD-jYB9T>krrUFciD^#oJrAHr({^V;| zg4?-rFv&=IpLbIVM);ml-XiK!kB7R#X}ywJ6@QNm8$gUIwqk^@B&!`#AF!n;4G)I3 zbH`vK_(=_C`}+%J6G>PbYSPH7H4gT*^JuYUwUQtf_MT&=shetNwlL7GTM8H6300~9 zQGoT{Eh$O%a&h*2qQqDLY1yNjH!OgT8e|mv-ge+N<*5_#R9y&jDHJKXe>{46^i?zz z#Qp0PC+AAZK=oP%*@aSqODPc1;(^;n2*ZDw+oFNr?@!wdi?0=jA-*ne2+_IWtTaj% z)&mDjin_cghw^GwRenN*C?=R}WSHxxtanWzz)#JGZNAX+~u zz+Hyypun%h;ki1l>X0vAJ;UMLC8Qt{+GIZgzH#tAg0IQ17>W^ulhaF$s%!+f(QQ*{ezK#3+|abfhYAP1fQBHtyQrnYGYu7D zj_%wui6EWMWQAMRYrNpG0dlHO$}a2`{2{1)i$^b`Ogx%u=C0aeuHVw}_hP@V;^Qb=_WTA{-IAJpJga{?`_bxk4jyLhdTTHN01~2YW)C)AD;h0 zdvpe~@e4!WI+;O=4&*LT<4Vc60t*#*(XUJ(=k-H9<@Wx{a18s0Fg`05D`~hKhOdF@ z7P}2dCbOF7f*M=lPX2;p3;kI?)&b}Ly|uMXf2F5Shd;EYct>jNz6Ii@>-?&8Z`s^B_q>eL4rAwMO7@a+@*mU52TaL26& zh}5ZV2isEuB#1v`f4P*@6J5K)n*Yf8J@s8+SuEx7Y>1GBvRyD+ISO=1N~T?abgCs% z#S4xHw~z~EeA6JX{XV*~5)w+!QoKF#inqVSE08^atz z!sauKZgzBM-7T->yFaxB49G2FJ#qGG&?jk(>uRtXECV^B_eN`htYH%>Df2MujPmdA z7uiTp&p!|A#(ylhKE5Ts0;8Nnq^Tch$ewt?)gfX9n>7isbz?$*kW;q4m|%&=g^y^f8-e%FqRdjP&*O zxw@x{1@+Qp*u~PtaS9X*ylPq7g}_YCXMS~b^RL1G@Xp3)2eBTF*mjF-V3c==y^3^P zU+?hv^(&lnu+U28I?bLDa4)=a{|<&Mzyu02ps#gaDAM5qW3#oYkh~g4lOZv5peS+I z!6Jus)WOxZpwke|5AAGzi_4L7C!0!)%#i1k1URDu!I~J2xz6r|=ka{K4QY$Tm7nVR zD;XD}6AOM@1+H2VMzT4VfaXQ3GGhXCc8s!Mw70pmpFb}dJ0i}o%n>o9p7!Xpc_xC% zm@`1*{Q;ZBg}gGBK4o{@xjnJM0QPb|p$Yim0Zj#bP|%pk@yr8DLV%-EY#fLp6?X<;R2Nf@#a@y1L$6>DcSpr(1o+i#k^t z@U1m6j*eF&*%VwT0;{s1@dbg#7xEOP)y6sF1YX50;nsc878oJnqEt6@`sYO5Kr=)I z!qd?ezH5kOl;?m0U!5kEjU^<#)6i;#28F%RPl@K6a`Eq}G|Z-=xaa-_7VBpo)(fH5 z!~T#3YWr~%r*|JRY$$@Q*ulNZsA_`5RU1rp+WNbcFb6slk+3!zh*TJFV4UWAC~PQ3 z^UR|__riV!@Sh!BZn6g=4}uIdd(anS2R5R+XZAzKNZp!iI(-E%KHGV~+e=AyBnmG9dH6pX}ywDLcCJ=|^iZ25SO43ahM= zl5N0`%%;`T5VjcCH*h>fcY^US%@0A&y17fC+70hL?v^+zTOB?Bue`VLin9H_hlh}o z?vf54MMCM0Aw=ntE(@efIwTb-G3ipIK^o~05NQykQ-%iVp?+sR-}U|#?=03*7p|GP z@B6yWb?qy$-_C7`ZKA?%845eZJ87Y0siTo z+&z*UoH~Y@yIviiWo@7LRjY!i&Kgv1zw)(5cLFd_)_EQQ8~x06147o|rlX?^mOl{A6G!^Go{zww^jQT#swF=t2JJgF2(Yd0Hq zt-NuL2Zspd+bc zcbdKu_~yZT^9O~`m9=3Bx?gNX*YH%#Sp+10c*ElR3~i}Xy#B4Ru@8-wgp`ggx%W-) zV*p&heIeG2pDwIOQ|j{ZM*{5Qt>;ZQGo4$@K=M3)7ejX8k@L%4GkPUyMx%K!OK9}s zsu(xP)z2smx1cXdwPrKh|J|oq#%tk;j;77k{P>IZHoaZUCkG;#yo3SCQ9`CFt+qYy zn$Zk1uUemHD_7VjHbtQ|W^H!R(=Eb@>}opd!6@ImVuEjqHr<&_x-0UNxSgLfC6*|q zPG6zdjGBJ_{%ztZ$1{!HPDXGevlX9O zTZce5A$0KMjm+85zi>%`NHl&E_JbnvyuIU~O3olpj&&y#&l8^0b7rnblxWdwvFLsw zzKBCc02{Mdn!RSzOEYxh-f`mcdBw&)4{2q0ZT?0UT}2eRzA$*AqK@F#&x;?9qzi+b zGr;Jz`4}LZcTyzWBVf7$3m|j)VD#w#rg~DJ8zM8@x}nJq5(uTvt%y?2=b%!AQqTY( zA`Ix|4SV8n!}H2~DJ*V5jsJZ~ofe=^u12$Xf)lHFEYT9IVmHc8IxLBj9eU# z(J3t4{wDj8t;(IE4r;1MZOXK}X@B1~3J#{wyhL(bmmo{^=NT53fDRV;=hr%Mbzxws zHa7Tz_M9&?E@0-Bx2iisBnD*pU>PXk-3S2%Ixl~LlM@aE{i=Va)toI@NN)V0MhJVaUAKSjz+Ky%Zu9vl->bm~B zNNIXZojgrApFqcKkV7F#iJ46yikwz*Fqu-(l~iY(L2`}VxOEVEc3}2E5$lJGvvgOp zjIYOoc&|GmzFf)c6EZ4vpBgi|UPUC8^qolPKspY1BS3^=7k8jiLx3FS{i7H@mmP3` zPV-&+@AfC+pv&#cfQxy#vq-5VEoPWXxV$!60QwdXeHVq2~Jtq1!3=FP#T ze{E@d6+0Ow*g;@iSt-I8bCLKp3qR@00ku-pH|VDaS7(rJ{q3N$TsjK6JOYa~(#wtX z^YUx`>(znl)iCd~saKUXK-g^qN_^n!sfnbhUc6xQAQ$3lhn*=d+HT;cH#u_nb?zmV zM1F`}MN+b)VSb&Ak1zT+!S^q`xP6&=1lDhhx7|ZFjyLBWLrT|(cnKaXTi(M%ONYk zoh}W1z6WSz<59!*ZtGQnQdmUO-=C{C#$jB|h&TvZsS^~5UML!pv}Qgrd!kw^HJ_6D zR8y-0rBG4fS;OZgu63Q+i*thv{PZ8%+1WMax^fK&JNji>wb@X<=k*L(D8?c743XsM zDz1BA99n10yGUGuO&6J8{89b$3o|x07hV5Z-sE20f>9t6fw=+;O<-;VY%sI6$Z)kk z-si#Sz<@aOUy+){cxb~kg1y`zbgsh1Ecoh1ulOjSt~JA!?W1ctR!$2z{8NSto;kEI zQ-paY8gnShix3;ksvVMm2eB zMxguvZ`AuvX1YL&alvunHHS|$w*$CQD%lrW1(zkUi}8@0v*#q$_x1PN8q)$C_~nm- zZpqkbA2`GI0c6n(=EUTuCP31G7(NxgJXn}vLNU|ZDOt}oYCr|8`;Rfq560_x8IDfd zrgY3dF@+`}+t$D?fZ8rrFWtQ|#-?8$q6n|1m9|m!uILzKzHOr_`bTTDAum1-@`Gp` z;V|{jw-3h~;}v5x)wSO3nrB!q@aoF5yTrT^O(vP+U!vWUx`@!dtRB5QH!M&FjUDKI zL%x5`Z}~jD%7*0U7h3_da9|+Q|4)Y9KJf3K+rS+Hws-2Ty9*r|tn|$oSJ%cp7|aDN zm^A<_1HSsF>*yOS5s*9l0Of?&VH@aYR6&4R0Vx-=+S{%_FUzx$F?B?RRb=@Sv|i35 zC)w^4q_U9zpUQ-DhFa5y=wUbGrQUE{%n0lM%5zm{-sOhFmiphRE}pM#1eU~5o3va8 z9n?%a0UrpOgE9;M=T#?Vk*ZZgdC7z{#g&Hwie1Vi$?|Yy-e& z4MQ(uP_i;yau3B7O!9QWZi7O>9`jxRtlgzJ)|bVixqW)!6&dm>U0B=i*0}8c@azz3 z#g8n&MO3f!F$xw6*ri+*-e~$QNY_qJH8JZPcn^y2U#bXzUEF-%qsdIl8! z?Z{UEmA(DO1(HLd!6J9?X}tPpH1iTz%I&->@qd(c#K|Ae#>~v6zx9;uCf@wZOr%yy zGL@HKtAyCk4#MbUYlHDto9mhn!qcOVC44bC6sCfK9fShF(_gl!p(Uc@2H%PbGd*Y6 z560PE91}d+0@`O}M&0H$g57WZ20T*%1zfku`!FQzKfB$16-6iM|;0XSLjKjgz#u*~M_#IUzIlr0x<9R3FgjG@VtLoNpa{@M+R=P&*taeRk zTDYKHtz!}IlQOUQy5%?%L`rh(ClS>;g-8L&6$hptd{LOL+NS=o@?n5T4f` zK_RCo4;c%IA0>~{u&`V0NAK!*0;2qSJ6gk^OI5QPXx1g%aPL08xe@D`p7N@yh;Wh0 zT3$**5T0NBZQmsOaH7dYsqm;~+R$%bI*v^4%q8oUUn1r>!yqSW(6wO&OLW}56%!rSbkVEeVFoFmwKI-Dn#X}M9VIvZzMTR>MrdZii5;N@>VW{8`y=UZCw?P2i7k|Vs$(+7L zL{Ta7@O(&ik)okgFxPuDh(9%7vMx>vZi-XIf77}j;vI&88>{r*uRHRcx6aP?`h_$S z(i`?gD?T!r&M%Q!{a1*bLpS5=pm&1GBKI(w z%0t=?Oy~MVG!nII2hl=}pZjx^jvo272M*Ef$-UT<#SwN% z{$Sk5nfR$5%l_CV+Ac{!X*eB*)cju)A;_@7A|hi?EX%L}v-57egTGt}lJokBIT_); zVbi&llscMX0sv?GwFxHplBX*AU&Ho7Tl)=C0w3_@Io1{1(yM4C4x==di3vN&Dz&L8 zgc-UYzVSPfd?^cgItWh7c$+$0QyOid{1bd_H7mHA{UiT!8)#_(|M{y@lyW*F%z-dV z02FN7bEknWGvFF~TTZSYq>iivFqf?tGb9+pLs?!dTgFNUNv3Z36!)ceKlDBrH9CQT zBNgjMYy>aJBcn1`F`I&}b#y8??bUttr3#ZGHfH`5GHTvneSRG?Wr?wC6wf)C39}x( zqyaGq2wM11yz`%)q|L*;kMF4ynVe?aBy%HqdO(x`2?|^;!_BE4;a;{9UQIy|;Q~(y zWcxBq7ighBxb)ApE=u|WN%1k=<$`5tZSBkTIw+MvMGA!gfNHLw_k-MXr9T~*81>JT zU+iMJgQ<(xAz#7fz4_@rDRBc80HUIlH>#yDH#Qc|KqQ&Nb4{bGnO~Wx8^tv4Jbj;! zt0gX{rnnG`?;5>v+0@_{?YMV;8~1{@Dej4Sj#?_&Z}xBguQusjZHNtqXsi80ov=ngXVm0!!~ykjXk7p#akutXh`mQCwXs-e;WVh zS=vWQ#v#Wd>n0%Fzy2Xz_SIYDniVu`vcJme()z{~6eQb!TF*gFU}a;IwVL=GfyocU z)6!T#W61)PBT&%eGc$o(I661pDe@#Lh%*=4-F)3)Qv<4%p;h5V^x92-cv>RqM$Yyr z7u#-74Z+GYt9855VM76iWExh9(fun*T$C+fMp8UGU6;5jJZev~>&+arOBWOZ8jCq# zj=fJetIHZ2W9R3s!xY&u2UHZ21GT-4Q60V*9MnmX@uQVHnKJGXRHKfmVbR zFDJ9EJhC%TyW)OiEE=!>#_=i4wzDI zC(wk+$jBhP^4Z~!wE!7%aLD_<**Q&=sZDU=&(dL2mM0?r#m>gTfq2!U?n}VP_K~f> zKQs6uU;ohaz|>SpG+9}YUSHs$$Mff$Fuy`W_51hlgVWPRJU!iLOxK}JSriQTQhYPJ zt@`}A81yS)ZB!($vj6%M_*W&r=luNq#@rcr;<7{2Sv2q}O)nfLVU{5d0s}s{x>CTH zlJ@GRb4R%7s?}{fL3$*Nv37j_{!wMXIT?k{od?(KUt>kZDraL6qJ3Fc*l^DS&V`oR zRr6JcuvPn;9)}iN(?@mKM5$z7rzU~~x_G#Whlgj4RC@qN$I=qKc;RQDGl=@oBrzLq z7W_Y8J5igP9YaHJ&>!ndwe$3?l6cT)Gz8tj+1Zl(vLRXC%{;Uzp`}HMQPHT71{JJ| zd=gC+-Q+K|1p$?xG@Kr3WLVR$$(_51zXlg|&+lNmffQ!!fJz59y+0Ci`2|chv60NA;;<#hl4{pKo1gM@_N zx^^0gbk|LfpZQyQTV|0bc{S3!sAC$`V5W96NEU3$=(nb7Lt)|@ zjM%IyEe!@eiIrf~Q{h)&B!lFjxUZ!J`p*2F&0TK@B!4D?i0OLqj5#>Oh?S(^QjrN6 zdII|>IzlPm2XLBzN?n90hjLT7mAtgPxUI?&GAC;nmw|%|w226Uo`FGP7wdX@|Mq&j zkE0`rxw*N$jQMqH7_6!YK$jyEsJ~zVgGp~pA1Pkwjg77xF_|+5XJ=bD-kVN(o#Dx1 zKt<@UhcXXt>Hgs%2Q?AMS~6e;3*GIcYv*RysiEu(2URDueIEPE!VFxRrw8_#XT55< z!>~x(0BS;?o+k7@rkJDZ*Zu#r05K{F-4EgV2-^ff2+!BkiUB!s#_bYQK7MQlf*)(6 zFx9O%nu9~KTe8+57As1Vn!&We2rBA1j(rNE@Y05c82d`1Hoei@~SVV6ZaSMoxkN12H@Uyl<|&t&_oQ2>jMTLod&kfgN8zn)?|ec`=0eC|eJ+Q|K8P z6(v(uAQp2`>IhhYBM-E=B_&M7n9Sv1^Nrq+i0GHQWNt1eil5TTH>PxIherk~FSsLZ ziLko8|1EVVoS({V^Kv6SZcA^EvM*{~?rR14PvI-%kO{a<4(IAD=fZlpS|FGDADDZ4 ztfi-nt7Z>I937mV(=#)-Z)`a9q%~awQX$DHyk}+akhn|>&nY3VABTrwq z=-J}pBCJ;hX_k^aw0P%lRSt^RF){O?y=TN2aXsKOEEjlCX=30Q@vS;hcBft9to=kZ zLCp%<#?Q|&!DwlTtJt!M6ru;{s6ck{u>4QbdBnr1M&?|9b6wXrw!?p_V&J@hh6m;i z)+Gc8VUif}HIXCgeOUUr*Ko*F2@XuA*BVAc;|fnfTq?rpo>vZy3W}KnL!DDIGZFnO zde6cRDT%^e4mXT}9T0hZlJhAg#X%AQLqs4mUH}Y7Ka}JwP!3f6b#-+k?bQ%mUcY|L zmZ0|aK$P+$*L@Td^ST~WYEGRVY@2W2vQ*}zLi;U3P_RB~+?I*pD?tba%_0vkFGXCZ zE0}7*BVPbCLltHSCf_nDFc9(4RfGYM+Vg4=awyx=W!u0eR@m0~=e&PDKsPy%LLwqR zQ=-0_r$q|3BaoeaMF);0UScc0tTMQ+I|?h`K-#fxmIM>G6Et(@k4{ICWxn+m0$GFC zL0b|Gat#}AZ+du7D8eFTV<8T2G2UyiJSCKG?i*`_U88+HEFpp7*uOC;IxGX$8$Xzc zSJvMp7&_W$8Cw@Q?2-`m%quKoH?#3u;i!yU+u$(hfie0z@3r z(yz^w%wBvQ8w=_l(E|x|paS}D9++RB zrZGO>oDdOt2lECnUQAHc!omFP6t@lpk$@9edw5Wf6`LzLI}6y9eKb*`BE~b2-|?0f z)F}Ter)bBCUCfT!&RT{=gNhTt#`mA zyj>W|v;c`X=qo!wG!+9=Kbs8Fhet=l;lKmyw6T?^)GsDq1}#RRa-?pBQbS~aFv{e` zR`ehG>$7uNbY~7)DRuL@MYtS_@M~ct12Z%7I(0rF5;NBJ_yoRb8(2I0&aNNWxVVsq zhK7p7Rf0L^ip^PD1px+L3Jhdv)*R&ozOkU-US$z1P#P=Uytk4wz6Q*BStv(0`9*eo zw5{Y_H9p$t2bR#tyROXtL60>E5NQbdE-(qt!_yPv?d0!Y|5pe*1OX--kIrCzv19e1F7GPmS`w9hh&VV zu4fb^OW`xUkPH%pE80)r z=cAo87_0?G0%ElwOrVgpY}H~T|9bLg8-f76WDa+s0VEaR>&{4&VdU0sF|WK86yNB2 z?*4Q6HYTr|pPx5ppNBcRA5&A6gM#FMc7#+R@TA8Qdz_)|8d12QkWffVi^5dB4;3un zpgpmmMRZDEdJ*W!Hco4%8)NrY`o&U2;j-X>BR%&=B6(X}BiZrTBx#*SS*yuMp7ygI zwkPt_6IXE~Iu>`$i*$PdhtGHX6%)q(#1l-Ytzd5?CMJ3wRl4C_J{2a4>kI{QfB`x+ z-Of|MaM;GqE|1%QjlB(fe`nEf)b+H!0k!^WZP!~G^4#we7gH>LFcl!Cz{1k9697Jh z{FNGTnm;@qyeWS$UN!yZ)ocA7Mwu}b3RPAt$H8I$Ve#p^XH(hoBQ|}9qSZgO8oFJ4 z4b&!PqmWX+u^{f^gtIcFl+N}WTUh*PizEZ#434z-4gv%n^Bz*hw(vyYWT;sQV3qM5 zc|XfkE%R}y-D2j);%<`8kl*I|;?g0jO|97vU=70iT5%B3At_T-KOI zhhq_dBvftpLxWaiS|877CNx*T7qjXo=W4ncVV#kii$8n5^?ZHi2)c(bOVjnMt^4AE z@3SAuINI;1eG00vSzz|3By_8m7EpeOagwzWcqE{0J+HbD7p-pD14Tp!d%| zo)3zd+U0lI6N*0_e#RWZ4)zL7PnC~d6ML2qnOhv`@t|`VRwE?3(0M&gq%WG>0kAjZ zP=^PVt0|ZN!H`%H@(hbds!isidmfV`BR)a3U~T}|aX~;pN+uWdJ7HloL2 z7KY)S2&oS}FcNwWYV}TNKL9=f#y}XDnsX#HkBm@*39tyr)^OkjB{5*Lkd#Pj8)(CW z0HzLfnGt$RkOhLuT1ZmTcW#A~!&^yH~Avk4cG%p+nK;=~DtYZ6GDHXPmNzObc^m&!U#L zXBG0}k;wk^EkcVEPhrWU&OFxQMiUGGbg2!(6;E#pO~ zZ&5;L8F=!UF~eni2WLaS2}JW_JAv?=AvBXja*b>`=*XUX$bSWlo%13w@L%h(~o&#t>} z-OCvs>k{t7S8>pP+mO2=FgilYX4$tMiK9?zd8Hg8DlWY6uvs+X)#7>|2aq zFJ^aoiAnI(GOHeAr8(C8T!Z5OS)PJ)r$6(4ij>-V@}$0aY{QrHr=Bz@Ha~QQ-ks=$ z<#1e|%7RoJ#@JV9=J9Lq$JS*Al2T5Owryc41A>9+Z83|y&HUsTzVY$ISmO`OyCw@F zbV&Z>sur(1hdep;tC{}mWv+N1P={pFwOdY3>wY<-&;pqSKibzT9Axl4Nsas6m~kj3 z>^wXwR;{l@SU0ciWoloyvbLVr?l%k!UUl z9>9Hmr!G?D)OR37YS}ay991$ZwXrOjC1nY$_@$nn(n613^IB@olJq zXzj{MN-^jjgB67sA-xf=tyf~MG4r8$@pmJS-rJO;K~|*~8rcEC<7gH9<)c#}K|u_c zx+wehJz!TxVN()(@a{ z%LgPG=WnQ3N;BYpD#cHfhoBlJk81biOS1D8JdsZpt&aA~un zZ?eA2lCAH~;7w)SZr6zG=kELVlsDx(9zc-_9CN=i)8`p94`<1=S&fSVi5-CP0IYntgpe~E>40|t4&t*(3Si&jE_g9&u`vIwtmx_|(khPW|PEu@DwG{*y! zW(jh6SJt1ItLrX-d&#pKXm7xWFz_C5zkoGh*nwMqTZWgiqC^VNtZr+oRJ04Jh#)ae ziLu6H!%bV+Z*9B24Fr*G_5&fZNhVDf zz&11s5<_BEw9B54ZGO7L18RH&0Y9;v9DbaR7 ziM(`p3xDJFjs9h~u9ZE&SjHzNTA>!O&%TNm`aR7VP#%^z{7mhq{UMY^JoBn&bNF&| zb*vm&ob8B_%p~KzY-i22Ldw;|i5zvL$B=Tij^_)1#?QKW=A5MmzboL0K&Rm%kmJwL zLI)zk2gUck8{aXZdGnCqh1nRZUa@6^FAXOr=bAEuU1ufVy>NEpo6BDJL6`y%xdMQN za0th8A%xDzDXz)Eja_1PCz19u7!@S;#Lhk%@2U6<0bZUh7)n(bTk-pRW2N?>QWm`= zfe=w5Un9|um**LKne>Pr570!!oPGpbo&~_G<_dseEjAp@w3P&%uYY0HQjEPY3|ztb zIsjRf_2gm5A(orHD6@}rnmN_Xe!m7!A_i>^PPGdPkw-wO2mDmN?yYB3w|eqVs~3i~ z~Og;x2%G&9Li)d(BUe zQ8XM+;_dhAeZQx=PgPBhI|N9kNasq^7HE2qQ@-Hqk$jgp|Ng^=vikZ$?06^y4-dVj zPq#(5H7us$2RH?MyH4G*whEh>uQ2!`YMKUi0c0w$h2AmmvtuD(G%ld+j~>&|4+%W^ zOC)$@Ko2Y=QfBE-;IYEt3`qd&CulX)F>Oq95WU*-ZDiI2^OYCd5F^(6cOClXIC*8A z{IDd%RXIq-VQf zqbwVrWmx$674~!YSoKPiX?MrW3o(HCFi5|zFJlvWw4}76A`FJa-L7T>e|F z_=7q(eT0sC)&g^SF9I3K&3-+(H*KwjK-2eluq|5Odnury!63h(kB!UVV|MWc;_Dx} zUl<)s7?e8*#KNvPED(TMG3ey)it=u}Y&g&Xm|k;Em}vz3#~iYz#WpfIht)CgFR+I~ z;Fz65k^wef{OkBDUYfU4N;V|5#1HkBT^AjahjV{Q9MQkAO*9JR-ayf0gl?QDEd3B9 zZnqIacyB3cXa5%UnRT?)SqUI%dn&$Kc8zKQNNb29aC!_tO&=11g^+4lfEj&+Gl8d$ z{?PSd7@~?zQL0A+lNn1LnJ{pJi3#=&-`R=3?7X*z2!#=pr?30h_U=@%1yKIQnD*jnF{MP-on&ED6>lWuEJ)0EObZJNl$9LDj?r< zA&IQ5J>T@ZTw@E~NBiHmY{JR->$P&e4{#hQDd_^Rl>lty zzoI0K9JT%HCUFJ}j~kKE)WoW%r-xcwdjTwjY&vxDp;lLcz4}t;Tot)VpJ4%~gLt|G)lTlx0xAsov_D=LiJB_alg=zsu!jS+Vq%s?Mu;V108Sm7U zr;T_NWqtl3i*hAipI3DozYq78js;KwQvy#mVDW%M07F_y-E@Io|M=;X-Kjej#o&byLT3`CpxPv^YATk0;ZklOsm|+aK476Y zy%c6zvIIz)OlaJc0Aoy+Nl`vUFKlr@b^(colNfe(zFcrvoFh49GgwFj%Sun%V@=PRj^1H%X3zSk`XOq`vQhrTeZ!bG-G&^Gq zq#W$z1Qia%hk=pYU4IK;zZbKTMYbKM&YoQJ|JTin@QPrq_#QrZ>lo1tG)*Hg2UQ2P zFQZU9@KkP1<;(dlcN*`yelIo(4W2%YccB)oOrG8D1i6z-mdOHRIIGMYYCqwyZ#ETH z7hH=?89~Wdw2Qde9iG_}@lGLHQ!tx=gb(Nu0}@77)=q#WUdF`4RLNH3vi|WlykrSF z`aau%LOnH2PmhW+3B`&s>GN^>EKoy>?lx_Bsf|8>^D|!^%~SNx|2AWCW|WDB$pU1P zK()cK9(Q(fbT3fuAxT_dGD})JB>$kz6uf==1&j+7Q7$%iYNJ>>F}3sY!9XFcaK{k{ z=Y|7XUq3%66n76wg05{ho;ux2*XjxmHRFeA2@ShHn8d-|0RI{}MJfle{D^K}ug)^A zn$vI_l|juGfcF+^a{9jIM_!MV1YQxh5ng4eMNLP}Kdb+X8)?kQN6|oVRMK({u@I0A2x>xS+hUhIxkuArobPRmfyDof}Vh zLLmnK*MUIZTK4CD5On21`t?Wj5k!1We!(bqwcj|aoMi`d*+!vJ6So*+fY!NYXPR>V z$*>sK`^n&mS7bYUg712klk5xX-^EiA;DVXq{N4$9TxVHnX@-S2c@dFhk#`ETs23OW z1Lh_|#58VvR9;)_gX*LsmW5hZ43Ev8;mL7=Yuz^%g$d{V_aX?9XC(V`*(Hwg&0M@X z=$iw;fsE`|)p+4&HnhfFxNid!a(G7u0s3vMafVOVVpIml#_$mj9z2jQdw^skAFrHW zbuB)1{danvPgGr6iU6#?rKLqlt{9h<;ixEx3{>)%O)7LuP9cL2OYd_E6OV7hOp+Cs z5_!rkXE)1pAufVdsyQz0)p=DpAudUERhqD=*8aettpicXPhV*Xa0Nv~!l73a{3i@3 zhIqRqZYrvBQ@+g5zRm_%sJlBABv+6igMpAiCs!zIa43ESBs4(b>fcyKi-UX=)A~v8 z9~G6x36K4DZ@o#OK$n-HPmUs&qhnvCJiIkR>RDmx(y`YcC6g7AkJfK$a8z1CzPXPPW?48A`#v(;{85A%k41kfYwekCP z+cXexw?syvB;aYQ+RG(ps}CeV9Dd*skj|EssEEhCe{cXg5F2;*J+(+~;hU+N*(OCm zpdFtF(s)2&1^Dj$VGP3jM->=FOak8(>neB4yB8N0;cEyjikXO>Z)-Dgm=8I@fMP0S z(&#|>zG}AwYkao^4V?oLJ>&DtM70uvyYDim{YExa`9CP}e|T2+NPs17%pqw_Fg^_8DA8LO}^tPM$ODv0J6_O$8RRS?@mcE*o}E##e50$#FOBQnFBGKKC6dV<6~M^dF6X2f*=j{tKJzWb=_e~erbbwC<76ZwXh=n+)ZtsP$q8N2Y1PezN=??_b zab=2`M!px9H?C9f&c1w;)*YrC$uYuJrmWkD!MjTi2~unM@eXf%hc;-SV5Njx51|GI zb(I0N0@L9H%}4-8g2E2!9}vYl9I(R?@}I}Q3;djwSe8JpX7Sk%hT;L#RgK$mfkA{? z=r3R0g6522gr&ITYKj36vtf|I!|2Hp5hdM(!JBvd4D8knRFg)Z4ozC~w1CUJcY_72 zZNT!NEP+9Bhkxz9poO6f1%DhkVB|Mlkw_#LY@MPMUPbid70ftLLrvu?=wwP5rHw8ueFrJF|$v+~vhi^Bq+bm)<(++OVkdIGi#3^Uj6 z^c#rhOk{fWDjPQqkk@jjCnchyxj<09j*H6%P8}|G%Kf1z1qB71QtupItvNU+zKRC5>Oc69O!Pp3eYDC;Bu?jq- z=00tZGy90FNstq;krR9c3mkt)ll)|>W@2wN`F%@|zexGkAN$A{j>;Jt_5D|xj?6aR8qt**z3 zbH~Pp2I`g=NgTv=_q)O7WlBJw2V%BY#6#O5fD*vo*V%uO3Emn5?*>8DDk>@{CH1|; zHc_6-`KUmr$Nc6G8`W$b3^yW33eha*Uo& znJjUgp_mHSoIl^_U?&`L@_pCtGZ+~HC=ZMOl4u@LH(`@Cy?yo&D04tk(6)X6Pz;o* z02%_P2`=>dH^Kp2gmZNfB$l1$n_qPZH8$!Gj<8x-#xrHjqAzX&2+=w(xUgH3ztOd% zT3Z~~IyU>$v#N=LLPrK7ci}!!uSLmgzXl7MxBEZiCK=f!bl#BY9jv`9DFKZ!nKrdhboyoK;Gx=mi$03UUqArBM^kY?jjZRA*2F>xh5JgZ1sm;I8_r8 zVvu9-@$tc#20Sh_edgO%J2F9yiI1)eZDB)vEm59%9++x*+!#r6CsVe6|B9gWMEH!0 zNxQ&1? zasQn&S7dg7#3$6^zXSWENk*=fO;}(~Kmd++zkF4Ao-moBM6z_KlDLqfw*ZreeVJG8 za_UH}^8Q8l7bIRt&55=vk#SKH?01d@S*ENnro7Xxj@FL~P8AVz!p4#-b!;itw?YKd z$@dGt-@cWtf5Y0|KL2m{|FCOFmv11fKrsY)j4tcs%#2E(SWHSMMXz`b#8UHT+pE?bW0h#)I_!E1rPdW>m_ zoklzFXIH-qK-0$iB|%ONi2;P?l)+qP-J7}$Z#-Sg9u)FuckNv{3v?)vL)L$1t)dgW zfjDEITMKIa(R5)1D-ud5*wFM5Au!Su0lN=W2ZT=3b>X0p>-h!&a-M`_(Qf}ov8~8` zD)#bMF5>kojA;#xTaO!gk;suh82)tA^B)JK;k}Itx7jske#Rd5QL(NRthu%FZo2jf zO~L6O5WywMC*#sX@Z9cZV)`N=hQEutuRm#c)F&aFY5dP!pkJVKPMW7y z#dVh7B&OK>aK?wF?fCc`j|S_+{MjeZ0{gXR)`xz?eS}ecR$Q66`ZvJiGT&3}wq2hf z@y7@{pYOPrf0_L+1m{G8^GWoH*(S)$&X43DGlYM(#Om43hD|T50b0Z`Ujg>XQ=(VX z0vT3Y7Du*>vh*whM70`-7DNB_mr+q`0F_f|q*Jc^rd%YJc5-xa3Z>jftBozZAfv6 zD`7dhdRP1@*n}$GYmYe*@+Z|FT3I?D`vwHht2#ZyD!pfg;NZyevV{-ssinwwPlCvm zqF0*Y7p^v${CfGFCpp@C4ypm&yd0DGhYjJAFSGB^3tdl09v)F&-8(@b!WFTgY^!X; zl4^R^{ZI_SmTo?occGuZ<9Wb2E<@lQ+8ns|sq^aa`js1^M9J>*p9#DJ=+$VhOP?S@(Ogb-k5H8|g6kJVY&e&bbebu>_pi*kHNd@2Xhu&E1kAG8F}yMA zul;mGMgW*Iz8+n4WGz-1=gW$k(%P@DdxLZY21?VgR_``} zEGwK%Mvx|2ndW_thUUx~Rb^C~7*vO{=~|U-f2v3z{Y4tlU2M!YhFxB4m3VDEsE9W? z!`_J`e?`*9Iu$HHiGQYWJa^?+v*zcnXNXZE;yA4DCVz~@^sC}~3R|BXW3}a`oyJ)_ zXKm4dO{9(ql_FAohO8!YRW*|mDi2D~py={UHWSm(3+E+N`PVqZl3UW_l6-x|D+S5> z?u^*<{pUci1tA}fK^5(@WYna{f;iI&dqKfAaK&3@=kzp2&F46T6?uDJV9(_h1;P5z}l8$|Etp+{iRZR!5V6h-amcXtl_#kLZoN7Q4^v zpJLU`&TXGPkTceGp}f=kK{F2ywj*jMjg5`w0^$zND`gemVmsYIsj6igXy=}*+$XsE z{Ws3_Di@II;oV)~wqSJJ{+tJULKp5|2cGI;Nwt~=2S2%XUkq)tDi^QnBy1c=dW;ba@dRt9Pg=HkWIH zR6x`T8aibAW&k{pVUYSs>NZeG7~jk(8BMTryDi;P^sacuvtcwA#Wf6d+Ii(t2M!(^ z2ZyhPAcErjeHiO`fCPod)={>W=WvPC7-P31k~dXW8`(ray2HkiwQ>cAe9*c3t$4MU z#Q9SHtpUNM0fm&DT~rJZ>h$BIc#ji3wfs%8G@c{=e5Xz#RVflElM-X9F)!V$8RM*Z)7>=t8b{vr%(v S{eC(EUU!u>k;RHuFa94Rlfh>I literal 0 HcmV?d00001 diff --git a/tutorials/spacecraft_thrusters.md b/tutorials/spacecraft_thrusters.md new file mode 100644 index 0000000000..5cbf8f6bd4 --- /dev/null +++ b/tutorials/spacecraft_thrusters.md @@ -0,0 +1,105 @@ +\page spacecraft_thrusters Spacecraft thrusters + +## Spacecraft Thrusters Model + +To enable a seamless transition of space robotics control and planning schemes from simulation to real, we introduce +a spacecraft thrusters model in Gazebo. The model provides a very simple interface to a solenoid valve that controls +the flow of gas to the thruster. The thruster model is as follows: + +- force output equals max_thrust when the command is 1 +- force output equals 0 when the command is 0 +- force output is modeled according to a duty cycle with a given frequency, and thrust output is maximum at the ON state of the duty cycle + +In short, if the duty cycle signal is high, the solenoid valve behaves as a fully-opened thruster, providing maximum thrust. +If the duty cycle signal is low, the solenoid valve behaves as a fully-closed thruster, providing no thrust. + +## Setting up the SpacecraftThrusterModel plugin + +Here follows an example instance of the `SpacecraftThrusterModel` plugin in an SDF file: +```xml + + thruster_0 + 0 + 10 + 1.4 + command/duty_cycle + +``` + +In this case, each thruster link should be placed in the proper location in the spacecraft model. +An example of this goes below: +```xml + + -0.12 0.12 0.2 3.14159 1.57079 3.14159 + base_link + thruster_0 + + + 0 + 0 + + 0 0 1 + + -1e+16 + 1e+16 + + + + + + 0 + 0.2 + + + + + + true + 0 0 0 0 -0 0 + + 0 0 0 0 0 0 + 0.001 + + 1e-05 + 0 + 0 + 1e-05 + 0 + 1e-05 + + + +``` + +## Testing an implementation of a Spacecraft model +An example of a spacecraft with thrusters is implemented in the [DART spacecraft model](https://app.gazebosim.org/proque/fuel/models/dart). To run the example, run the following command: +```bash +gz sim spacecraft.sdf +``` + +This spacecraft has 12 thrusters. To send inputs to `thruster_0`, run the following command: +```bash +gz topic -p 'normalized:[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]' -t /dart/command/duty_cycle --msgtype gz.msgs.Actuators +``` + +This command will send the maximum force of a thruster over one sampling time. + +Below, an image of the spacecraft: +![Spacecraft](./files/spacecraft/dart.png) + +## 2D Spacecraft Simulator - Ground Space Robotics testbed + +An example of a ground testbed for spacecrafts is also available, where the spacecraft moves a 2D plane using thrusters. The testbed spacecraft model has 8 thrusters, and the thrusters are controlled by the `SpacecraftThrusterModel` plugin. This replicates the real [DISCOWER](https://www.discower.io/) testbed at KTH Space Robotics Laboratory in Stockholm Sweden. + +To run this example, run the following command: +```bash +gz sim ground_spacecraft_testbed.sdf +``` + +This spacecraft has 8 thrusters. To send inputs to `thruster_0`, run the following command: +```bash +gz topic -p 'normalized:[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]' -t /kth_freeflyer/command/duty_cycle --msgtype gz.msgs.Actuators +``` + +Below is a picture of the simulator: +![Spacecraft simulator](./files/spacecraft/kth_spacecraft_simulator.png) From 7edca185fea957df8d3310aea7aee3d1aabf9f5a Mon Sep 17 00:00:00 2001 From: Benjamin Perseghetti Date: Tue, 23 Jul 2024 13:16:29 -0400 Subject: [PATCH 5/7] Prepare for 7.8.0 Release (#2491) Signed-off-by: Benjamin Perseghetti --- CMakeLists.txt | 2 +- Changelog.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 07acb9ad1f..ee02f5cf96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(gz-sim7 VERSION 7.7.0) +project(gz-sim7 VERSION 7.8.0) set (GZ_DISTRIBUTION "Garden") #============================================================================ diff --git a/Changelog.md b/Changelog.md index 8d8b30726e..f9d184706b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,67 @@ ## Gazebo Sim 7.x +### Gazebo Sim 7.8.0 (2024-07-22) + +1. Added support for spacecraft thrusters + * [Pull request #2431](https://github.com/gazebosim/gz-sim/pull/2431) + +1. Disable rendering tests that are failing on github actions + * [Pull request #2480](https://github.com/gazebosim/gz-sim/pull/2480) + +1. Merge from ign-gazebo6 + * [Pull request #2477](https://github.com/gazebosim/gz-sim/pull/2477) + +1. Consolidate entity creation. + * [Pull request #2452](https://github.com/gazebosim/gz-sim/pull/2452) + +1. Set max contacts for collision pairs + * [Pull request #2270](https://github.com/gazebosim/gz-sim/pull/2270) + +1. Add GravityEnabled boolean component + * [Pull request #2451](https://github.com/gazebosim/gz-sim/pull/2451) + +1. Add support for no gravity link + * [Pull request #2398](https://github.com/gazebosim/gz-sim/pull/2398) + +1. Handle sdf::Geometry::EMPTY in conversions + * [Pull request #2430](https://github.com/gazebosim/gz-sim/pull/2430) + +1. Use topicFromScopedName in a few systems + * [Pull request #2427](https://github.com/gazebosim/gz-sim/pull/2427) + +1. Fix typo in a comment + * [Pull request #2429](https://github.com/gazebosim/gz-sim/pull/2429) + +1. Remove a few extra zeros from some sdf files + * [Pull request #2426](https://github.com/gazebosim/gz-sim/pull/2426) + +1. Use VERSION_GREATER_EQUAL in cmake logic + * [Pull request #2418](https://github.com/gazebosim/gz-sim/pull/2418) + +1. Rephrase cmake comment about CMP0077 + * [Pull request #2419](https://github.com/gazebosim/gz-sim/pull/2419) + +1. ForceTorque system: improve readability + * [Pull request #2403](https://github.com/gazebosim/gz-sim/pull/2403) + +1. LTA Dynamics System + * [Pull request #2241](https://github.com/gazebosim/gz-sim/pull/2241) + +1. Fix namespace and class links in documentation references that use namespace `gz` + * [Pull request #2385](https://github.com/gazebosim/gz-sim/pull/2385) + +1. Fix ModelPhotoShootTest test failures + * [Pull request #2294](https://github.com/gazebosim/gz-sim/pull/2294) + +1. update sdf version + * [Pull request #2313](https://github.com/gazebosim/gz-sim/pull/2313) + +1. Fix Gazebo/White and refactored MaterialParser + * [Pull request #2302](https://github.com/gazebosim/gz-sim/pull/2302) + +1. Support for Gazebo materials + * [Pull request #2269](https://github.com/gazebosim/gz-sim/pull/2269) + ### Gazebo Sim 7.7.0 (2024-01-17) 1. Allow using plugin file names and environment variables compatible with Garden and later From 007aa87cd0007c2bbe2887e79b3679070d7bc806 Mon Sep 17 00:00:00 2001 From: Jose Luis Rivero Date: Tue, 23 Jul 2024 19:17:05 +0200 Subject: [PATCH 6/7] Do not include merge-forward in changelog Signed-off-by: Jose Luis Rivero --- Changelog.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index f9d184706b..2354f2ad9d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,9 +8,6 @@ 1. Disable rendering tests that are failing on github actions * [Pull request #2480](https://github.com/gazebosim/gz-sim/pull/2480) -1. Merge from ign-gazebo6 - * [Pull request #2477](https://github.com/gazebosim/gz-sim/pull/2477) - 1. Consolidate entity creation. * [Pull request #2452](https://github.com/gazebosim/gz-sim/pull/2452) From 6a7c75d68bc8841413e47c340ca42e9f55476bec Mon Sep 17 00:00:00 2001 From: "Addisu Z. Taddese" Date: Tue, 20 Aug 2024 17:03:47 -0500 Subject: [PATCH 7/7] Revert behavior change introduced in #2452 (#2527) Restores the behavior where the `Configure` function of model plugins are called before the model's parent entity is set. --------- Signed-off-by: Addisu Z. Taddese --- src/SdfEntityCreator.cc | 24 ++++++++----------- .../LogicalAudioSensorPlugin.cc | 4 ++-- src/systems/pose_publisher/PosePublisher.cc | 2 +- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/SdfEntityCreator.cc b/src/SdfEntityCreator.cc index afe266c5cd..8640682f10 100644 --- a/src/SdfEntityCreator.cc +++ b/src/SdfEntityCreator.cc @@ -328,6 +328,14 @@ void SdfEntityCreator::CreateEntities(const sdf::World *_world, components::SphericalCoordinates(*_world->SphericalCoordinates())); } + this->dataPtr->eventManager->Emit(_worldEntity, + _world->Plugins()); + + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + this->dataPtr->eventManager->Emit(_worldEntity, + _world->ToElement()); + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + // Models for (uint64_t modelIndex = 0; modelIndex < _world->ModelCount(); ++modelIndex) @@ -337,7 +345,7 @@ void SdfEntityCreator::CreateEntities(const sdf::World *_world, levelEntityNames.find(model->Name()) != levelEntityNames.end()) { - Entity modelEntity = this->CreateEntities(model, false); + Entity modelEntity = this->CreateEntities(model); this->SetParent(modelEntity, _worldEntity); } @@ -387,7 +395,7 @@ void SdfEntityCreator::CreateEntities(const sdf::World *_world, if (_world->ModelNameExists(_ref->Data())) { const sdf::Model *model = _world->ModelByName(_ref->Data()); - Entity modelEntity = this->CreateEntities(model, false); + Entity modelEntity = this->CreateEntities(model); this->SetParent(modelEntity, _worldEntity); this->SetParent(_entity, modelEntity); } @@ -449,18 +457,6 @@ void SdfEntityCreator::CreateEntities(const sdf::World *_world, // Store the world's SDF DOM to be used when saving the world to file this->dataPtr->ecm->CreateComponent( _worldEntity, components::WorldSdf(*_world)); - - // Load world plugins first. - this->dataPtr->eventManager->Emit(_worldEntity, - _world->Plugins()); - - GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION - this->dataPtr->eventManager->Emit(_worldEntity, - _world->ToElement()); - GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION - - // Load model plugins after the world plugin. - this->LoadModelPlugins(); } ////////////////////////////////////////////////// diff --git a/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc b/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc index fab58be000..c0836401dd 100644 --- a/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc +++ b/src/systems/logical_audio_sensor_plugin/LogicalAudioSensorPlugin.cc @@ -405,7 +405,7 @@ void LogicalAudioSensorPluginPrivate::CreateAudioSource( }; // create services for this source - const auto validName = topicFromScopedName(entity, _ecm, true); + const auto validName = topicFromScopedName(entity, _ecm, false); if (validName.empty()) { gzerr << "Failed to create valid topics with entity scoped name [" @@ -503,7 +503,7 @@ void LogicalAudioSensorPluginPrivate::CreateMicrophone( // create the detection publisher for this microphone auto pub = this->node.Advertise( - topicFromScopedName(entity, _ecm, true) + "/detection"); + topicFromScopedName(entity, _ecm, false) + "/detection"); if (!pub) { gzerr << "Error creating a detection publisher for microphone " diff --git a/src/systems/pose_publisher/PosePublisher.cc b/src/systems/pose_publisher/PosePublisher.cc index d4c9bc0d39..fd167a882e 100644 --- a/src/systems/pose_publisher/PosePublisher.cc +++ b/src/systems/pose_publisher/PosePublisher.cc @@ -250,7 +250,7 @@ void PosePublisher::Configure(const Entity &_entity, this->dataPtr->usePoseV = _sdf->Get("use_pose_vector_msg", this->dataPtr->usePoseV).first; - std::string poseTopic = topicFromScopedName(_entity, _ecm, true) + "/pose"; + std::string poseTopic = topicFromScopedName(_entity, _ecm, false) + "/pose"; if (poseTopic.empty()) { poseTopic = "/pose";