From dc625726c4f0593e9a05f663e6ea64baabf1b1db Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Sat, 19 Apr 2014 22:54:52 -0700 Subject: [PATCH] Item Custom Build Fixes. --- .../game/classcombat/Class/ClientClass.java | 11 +- .../repository/token/CustomBuildToken.java | 102 ++++++++++++++---- .../game/classcombat/item/ItemFactory.java | 10 +- .../game/classcombat/shop/page/SkillPage.java | 68 +++++++++++- .../nautilus/game/arcade/ArcadeManager.java | 4 +- .../game/arcade/managers/MiscManager.java | 29 ++++- .../Model/Server/PvpServer/CustomBuild.cs | 9 ++ .../Tokens/Client/CustomBuildToken.cs | 30 ++++-- Website/LOC.Core/Tokens/Client/SlotToken.cs | 1 + .../LOC.Website.Web.Publish.xml | 12 +-- Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 11 files changed, 224 insertions(+), 52 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java index 070244cc5..6a9c737f6 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java @@ -7,6 +7,7 @@ import java.util.Map.Entry; import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -275,7 +276,7 @@ public class ClientClass if (_gameClass.GetType() == ClassType.Assassin || _gameClass.GetType() == ClassType.Ranger) { PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.BOW), 2); - PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.ARROW, _gameClass.GetType() == ClassType.Assassin ? 16 : 32), 3); + PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.ARROW, _gameClass.GetType() == ClassType.Assassin ? 12 : 24), 3); } else { @@ -297,7 +298,13 @@ public class ClientClass continue; customItems = true; - _lastItems.put(customBuild.Slots.indexOf(token), ItemStackFactory.Instance.CreateStack(Enum.valueOf(Material.class, token.Material), (byte)0, token.Amount, token.Name)); + + ItemStack itemStack = ItemStackFactory.Instance.CreateStack(Enum.valueOf(Material.class, token.Material), (byte)0, token.Amount, token.Name); + + if (token.Name.contains("Booster")) + itemStack.addUnsafeEnchantment(Enchantment.DURABILITY, 5); + + _lastItems.put(customBuild.Slots.indexOf(token), itemStack); } if (!customItems) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java index a6d23d130..4b3441fed 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java @@ -46,6 +46,14 @@ public class CustomBuildToken public int SkillTokens = MAX_SKILL_TOKENS; public int ItemTokens = MAX_ITEM_TOKENS; + public CustomBuildToken() + { + for (int i = 0; i < 9; i++) + { + Slots.add(new SlotToken()); + } + } + public void printInfo() { System.out.println("CustomBuildId : " + CustomBuildId); @@ -214,27 +222,8 @@ public class CustomBuildToken return false; } - - public int addItem(Item item) - { - for (SlotToken token : Slots) - { - if (token == null || token.Material == null || token.Material.isEmpty()) - { - token.Material = item.GetType().name(); - token.Amount = item.GetAmount(); - token.Name = item.GetName(); - - ItemTokens -= item.getTokenCost(); - - return Slots.indexOf(token); - } - } - - return -1; - } - public int removeItem(Item item) + public boolean hasItemType(Material material) { for (SlotToken token : Slots) { @@ -245,10 +234,81 @@ public class CustomBuildToken if (token.Material == null) continue; + if (token.Material.equalsIgnoreCase(material.name())) + return true; + } + + return false; + } + + public boolean hasItemWithNameLike(String name) + { + for (SlotToken token : Slots) + { + // Stupid json crap giving me null values. + if (token == null) + continue; + + token.printInfo(); + if (token.Name == null) continue; - if (token.Material.equalsIgnoreCase(item.GetName()) && token.Amount == item.GetAmount()) + if (token.Name.contains(name)) + { + return true; + } + } + + return false; + } + + public int getItemIndexWithNameLike(String name) + { + for (SlotToken token : Slots) + { + // Stupid json crap giving me null values. + if (token == null) + continue; + + if (token.Name == null) + continue; + + if (token.Name.contains(name)) + return Slots.indexOf(token); + } + + return -1; + } + + public void addItem(Item item, int index) + { + SlotToken token = Slots.get(index); + + token.Material = item.GetType().name(); + token.Amount = item.GetAmount(); + token.Name = item.GetName(); + + ItemTokens -= item.getTokenCost(); + } + + public int removeItem(Item item) + { + for (SlotToken token : Slots) + { + // Stupid json crap giving me null values. + if (token == null) + continue; + + token.printInfo(); + + if (token.Material == null) + continue; + + if (token.Name == null) + continue; + + if (token.Material.equalsIgnoreCase(item.GetType().name()) && token.Name.equalsIgnoreCase(item.GetName()) && token.Amount == item.GetAmount()) { token.Material = ""; token.Amount = 0; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java index 7a1a7c8d3..8aa7f6191 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java @@ -104,9 +104,9 @@ public class ItemFactory extends MiniPlugin implements IItemFactory AddItem(new BoosterAxe(this, 0, 2)); AddItem(new BoosterBow(this, 0, 2)); - AddItem(new GoldenSword(this, 0, 2)); - AddItem(new GoldenAxe(this, 0, 2)); - AddItem(new GoldenBow(this, 0, 2)); + AddItem(new PowerSword(this, 0, 2)); + AddItem(new PowerAxe(this, 0, 2)); + AddItem(new PowerBow(this, 0, 2)); } private void AddPassive() @@ -155,8 +155,8 @@ public class ItemFactory extends MiniPlugin implements IItemFactory private void AddOther() { - AddItem(new Item(this, "Assassin Arrows", new String[] { "Arrows for your bow." }, Material.ARROW, 16, true, 0, 1)); - AddItem(new Item(this, "Ranger Arrows", new String[] { "Arrows for your bow." }, Material.ARROW, 32, true, 0, 1)); + AddItem(new Item(this, "Assassin Arrows", new String[] { "Arrows for your bow." }, Material.ARROW, 12, true, 0, 1)); + AddItem(new Item(this, "Ranger Arrows", new String[] { "Arrows for your bow." }, Material.ARROW, 24, true, 0, 1)); } public IItem GetItem(String weaponName) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/page/SkillPage.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/page/SkillPage.java index 24c6929d9..18725e586 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/page/SkillPage.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/page/SkillPage.java @@ -30,6 +30,7 @@ import mineplex.minecraft.game.classcombat.shop.salespackage.SkillSalesPackage; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -135,8 +136,14 @@ public class SkillPage extends ShopPageBase if (itemStack != null && itemStack.getType() == item.GetType() && itemStack.getAmount() == item.GetAmount()) { - System.out.println("Put button at index " + (81 + i) + " for " + item.GetType() + " " + item.GetAmount() + " count"); - ButtonMap.put(81 + i, new DeselectItemButton(this, item, i)); + if (clientClass.GetSavingCustomBuild().hasItem(item.GetType(), item.GetName())) + { + ButtonMap.put(81 + i, new DeselectItemButton(this, item)); + } + else + { + ButtonMap.put(81 + i, new DeselectItemButton(this, item, i)); + } } } } @@ -413,14 +420,65 @@ public class SkillPage extends ShopPageBase public void SelectItem(Player player, Item item) { + int index = -1; ClientClass clientClass = Plugin.GetClassManager().Get(player); - int index = clientClass.GetSavingCustomBuild().addItem(item); + if (item.GetName().contains("Sword") || item.GetName().contains("Axe") || item.GetName().contains("Bow")) + { + if (clientClass.GetSavingCustomBuild().hasItem(item.GetType(), item.GetName())) + { + PlayDenySound(player); + System.out.println("Denying because of matching material and name."); + return; + } + + if (item.GetName().contains("Sword")) + { + System.out.println("Sword"); + if (player.getInventory().getItem(0) != null && player.getInventory().getItem(0).getType() == Material.IRON_SWORD) + DeselectItem(player, null, 0, false); + else if (clientClass.GetSavingCustomBuild().hasItemWithNameLike("Sword")) + index = clientClass.GetSavingCustomBuild().getItemIndexWithNameLike("Sword"); + } + else if (item.GetName().contains("Axe")) + { + System.out.println("Axe"); + if (player.getInventory().getItem(1) != null && player.getInventory().getItem(1).getType() == Material.IRON_AXE) + DeselectItem(player, null, 1, false); + else if (clientClass.GetSavingCustomBuild().hasItemWithNameLike("Axe")) + index = clientClass.GetSavingCustomBuild().getItemIndexWithNameLike("Axe"); + } + else if (item.GetName().contains("Bow")) + { + System.out.println("Bow"); + if (player.getInventory().getItem(2) != null && player.getInventory().getItem(2).getType() == Material.BOW) + DeselectItem(player, null, 2, false); + else if (clientClass.GetSavingCustomBuild().hasItemWithNameLike("Bow")) + index = clientClass.GetSavingCustomBuild().getItemIndexWithNameLike("Bow"); + } + + if (index != -1) + { + System.out.println("Triggering ClickedRight on slot " + (81 + index)); + ButtonMap.get(81 + index).ClickedRight(player); + } + } + + if (index == -1 && player.getInventory().firstEmpty() < 9) + index = player.getInventory().firstEmpty(); if (index != -1) { PlayAcceptSound(player); - player.getInventory().setItem(index, ItemStackFactory.Instance.CreateStack(item.GetType(), (byte)0, item.GetAmount(), item.GetName())); + + clientClass.GetSavingCustomBuild().addItem(item, index); + + ItemStack itemStack = ItemStackFactory.Instance.CreateStack(item.GetType(), (byte)0, item.GetAmount(), item.GetName()); + + if (item.GetName().contains("Booster")) + itemStack.addUnsafeEnchantment(Enchantment.DURABILITY, 5); + + player.getInventory().setItem(index, itemStack); } else { @@ -440,7 +498,7 @@ public class SkillPage extends ShopPageBase if (index != -1 || override) { PlayAcceptSound(player); - + player.getInventory().setItem(index, null); if (override) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 275db50c1..20357fb9e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -100,6 +100,8 @@ public class ArcadeManager extends MiniPlugin implements IRelation private SkillFactory _skillFactory; private ClassShopManager _classShopManager; private ClassCombatShop _classShop; + + private MiscManager _miscManager; //Server Games private GameServerConfig _serverConfig; @@ -180,7 +182,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation new GamePlayerManager(this); _gameStatsManager = new GameStatsManager(this); _gameWorldManager = new GameWorldManager(this); - new MiscManager(this); + _miscManager = new MiscManager(this); new IdleManager(this); //Game Addons diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java index 8f4a74f44..6a2a1f0ee 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java @@ -1,5 +1,8 @@ package nautilus.game.arcade.managers; +import java.util.ArrayList; +import java.util.List; + import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; @@ -8,18 +11,22 @@ import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; public class MiscManager implements Listener { - ArcadeManager Manager; + private List _dontGiveClockList = new ArrayList(); + private ArcadeManager Manager; public MiscManager(ArcadeManager manager) { @@ -69,6 +76,24 @@ public class MiscManager implements Listener } } + @EventHandler + public void addClockPrevent(InventoryOpenEvent event) + { + if (event.getPlayer() instanceof Player) + { + _dontGiveClockList.add(event.getPlayer().getName()); + } + } + + @EventHandler + public void removeClockPrevent(InventoryCloseEvent event) + { + if (event.getPlayer() instanceof Player) + { + _dontGiveClockList.remove(event.getPlayer().getName()); + } + } + @EventHandler public void HubClockUpdate(UpdateEvent event) { @@ -85,7 +110,7 @@ public class MiscManager implements Listener { if (!Manager.GetGame().IsAlive(player)) { - if (!player.getInventory().contains(Material.WATCH)) + if (!_dontGiveClockList.contains(player.getName()) && !player.getInventory().contains(Material.WATCH)) { Manager.HubClock(player); } diff --git a/Website/LOC.Core/Model/Server/PvpServer/CustomBuild.cs b/Website/LOC.Core/Model/Server/PvpServer/CustomBuild.cs index 7edfc2087..569a41485 100644 --- a/Website/LOC.Core/Model/Server/PvpServer/CustomBuild.cs +++ b/Website/LOC.Core/Model/Server/PvpServer/CustomBuild.cs @@ -36,30 +36,39 @@ public int ItemTokens { get; set; } + public string Slot1Name { get; set; } public string Slot1Material { get; set; } public int Slot1Amount { get; set; } + public string Slot2Name { get; set; } public string Slot2Material { get; set; } public int Slot2Amount { get; set; } + public string Slot3Name { get; set; } public string Slot3Material { get; set; } public int Slot3Amount { get; set; } + public string Slot4Name { get; set; } public string Slot4Material { get; set; } public int Slot4Amount { get; set; } + public string Slot5Name { get; set; } public string Slot5Material { get; set; } public int Slot5Amount { get; set; } + public string Slot6Name { get; set; } public string Slot6Material { get; set; } public int Slot6Amount { get; set; } + public string Slot7Name { get; set; } public string Slot7Material { get; set; } public int Slot7Amount { get; set; } + public string Slot8Name { get; set; } public string Slot8Material { get; set; } public int Slot8Amount { get; set; } + public string Slot9Name { get; set; } public string Slot9Material { get; set; } public int Slot9Amount { get; set; } } diff --git a/Website/LOC.Core/Tokens/Client/CustomBuildToken.cs b/Website/LOC.Core/Tokens/Client/CustomBuildToken.cs index af1dfc789..58e321482 100644 --- a/Website/LOC.Core/Tokens/Client/CustomBuildToken.cs +++ b/Website/LOC.Core/Tokens/Client/CustomBuildToken.cs @@ -38,15 +38,15 @@ Slots = new List(); - Slots.Add(new SlotToken { Material = customBuild.Slot1Material, Amount = customBuild.Slot1Amount}); - Slots.Add(new SlotToken { Material = customBuild.Slot2Material, Amount = customBuild.Slot2Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot3Material, Amount = customBuild.Slot3Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot4Material, Amount = customBuild.Slot4Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot5Material, Amount = customBuild.Slot5Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot6Material, Amount = customBuild.Slot6Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot7Material, Amount = customBuild.Slot7Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot8Material, Amount = customBuild.Slot8Amount }); - Slots.Add(new SlotToken { Material = customBuild.Slot9Material, Amount = customBuild.Slot9Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot1Material, Name = customBuild.Slot1Name, Amount = customBuild.Slot1Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot2Material, Name = customBuild.Slot2Name, Amount = customBuild.Slot2Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot3Material, Name = customBuild.Slot3Name, Amount = customBuild.Slot3Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot4Material, Name = customBuild.Slot4Name, Amount = customBuild.Slot4Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot5Material, Name = customBuild.Slot5Name, Amount = customBuild.Slot5Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot6Material, Name = customBuild.Slot6Name, Amount = customBuild.Slot6Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot7Material, Name = customBuild.Slot7Name, Amount = customBuild.Slot7Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot8Material, Name = customBuild.Slot8Name, Amount = customBuild.Slot8Amount }); + Slots.Add(new SlotToken { Material = customBuild.Slot9Material, Name = customBuild.Slot9Name, Amount = customBuild.Slot9Amount }); } public int CustomBuildId { get; set; } @@ -123,30 +123,40 @@ if (Slots != null && Slots.Count > 0) { var slots = Slots.ToArray(); - customBuild.Slot1Material = slots[0].Material; + + customBuild.Slot1Name = slots[0].Name; + customBuild.Slot1Material = slots[0].Material; customBuild.Slot1Amount = slots[0].Amount; + customBuild.Slot2Name = slots[1].Name; customBuild.Slot2Material = slots[1].Material; customBuild.Slot2Amount = slots[1].Amount; + customBuild.Slot3Name = slots[2].Name; customBuild.Slot3Material = slots[2].Material; customBuild.Slot3Amount = slots[2].Amount; + customBuild.Slot4Name = slots[3].Name; customBuild.Slot4Material = slots[3].Material; customBuild.Slot4Amount = slots[3].Amount; + customBuild.Slot5Name = slots[4].Name; customBuild.Slot5Material = slots[4].Material; customBuild.Slot5Amount = slots[4].Amount; + customBuild.Slot6Name = slots[5].Name; customBuild.Slot6Material = slots[5].Material; customBuild.Slot6Amount = slots[5].Amount; + customBuild.Slot7Name = slots[6].Name; customBuild.Slot7Material = slots[6].Material; customBuild.Slot7Amount = slots[6].Amount; + customBuild.Slot8Name = slots[7].Name; customBuild.Slot8Material = slots[7].Material; customBuild.Slot8Amount = slots[7].Amount; + customBuild.Slot9Name = slots[8].Name; customBuild.Slot9Material = slots[8].Material; customBuild.Slot9Amount = slots[8].Amount; } diff --git a/Website/LOC.Core/Tokens/Client/SlotToken.cs b/Website/LOC.Core/Tokens/Client/SlotToken.cs index c5d668ca2..a8a2ff7b9 100644 --- a/Website/LOC.Core/Tokens/Client/SlotToken.cs +++ b/Website/LOC.Core/Tokens/Client/SlotToken.cs @@ -2,6 +2,7 @@ { public class SlotToken { + public string Name { get; set; } public string Material { get; set; } public int Amount { get; set; } } diff --git a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml index 262b8796f..4fc0f01fa 100644 --- a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml +++ b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml @@ -623,8 +623,8 @@ - - + + @@ -696,9 +696,9 @@ - + - + @@ -746,10 +746,10 @@ - + - + diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index b0b7610f83fa53a74f6294617edde11f297d8157..5ac7e4cef13b7b5d30fb54e38c8a9f9ee28140fc 100644 GIT binary patch delta 13652 zcma)j4P2B}+CJwz=NUena6sfGLL8@&Wr=VkB1FTHP!T^EkVR7@R8%y>(Fi{x9gQ_L zGxX89&3p~brLxvg%<12jjUU@uYf5h0R_p3$TGkp(qvK~j4-3m1s$Gp670IG-^_H$rw7TBK^5JcldpAb%t)gv7-zCB{10V0u+OFRIE{kLf z@MeD3{cV@~o71&x-)2*31anc7iRG!Uvaqn%sb4vJPCFG$W{Zd=^HKEfFqXl>+HQ>h zV|aueUr)OEh{J5FYQ`0zUZy%(F^J|RzI}OUn!C!`eW8H zc$4?jrQM)d+)ithVY>n3Uo3mtHD6(P6>$FTL zW2y30QAGYk5xe27XxbmiGd8SRE3U&>TGOhJS$^B>)numpPgn}IUSW21B%WBYX&@h} zy_kJ6hTD+wYj>^nwQjcp*;N)e4&p4Gnf z_SPK7>a+!i*U|C0ECCnSYCR86XKtE5ncYoIt63B|W-^QSLB+=UQi+ETrMx~$9GxiP z_~cFzt6sv|4-sSR4$3@jTH3bs$ck|F9gN*5H+vSX{xwU|@;*1QB{XoNGLkHc5~sbA zk&Lk>)AAqKXw6-m79JKh68=#thaIdne`V5MIUi5S7gXDhOH%rdoLY81Im+(w>AJT-Vx zXqUe)q*j}ft`%Gy!OlzTt=8OMRA~jD@6a}MG_gin{|TF+)ppn^{|0wx!D+GDsn_DE zs)1#*9<=;EF;;VYT~F>rmPyWyN}3kHDl)gTSk1B0O&{Linbh=}DT$u?R^Qb6c6jvzZv?8=O+Qw;)@z@;Qdv7%5Vkc}^!s|5b3Y$mm7qHjvl{|qyeVv&p zSyf_LH647OJ#2jB*~CoRnD3IQafad|i<#%b&9;P*r3~MbqZzk31}P?5aU1t&mP1MK zwpa@OU717MF0gd1>Y#vEyR<6*M6z?mLY`iVomxKSiEVk84>7Wh6?s}!1r;Kc~L1O_gg$|({5JE>S^jsHhq&F56$W?vW+lu zP83-x<`h<_dk6ho#msQGaTGIBM%ojL`rqIY)M|o*?kE)1lx4yf%2d_>s~3@V z2FsU%2_4t z9L-!>aBvw`@EmQ=6H~NcwnOtcB4`6+aftP^vrUW1*@Nj`IfOh>Yy>OQwm*3*x#lV< z+S_a5C@%`1W~oX(IWk2mwMSy(3Zmf9!G9viawA!~^wT2EGu})GGFXmb6UWL#?VP`q zl7FY9k|&-C-%>MM5kn_GWO-DS0spAfKKOE!oPGpZUt-Y!>3)6LWNC$1YMz0+dY15b zYHx?HCHG|}tgFijBFIyu+9@TLC;IZNEMHLONbdCc?aUcT$vS*s(V;^@;CUb2PV{s-%oQ&eM$D%q`YzqW;>@kzPsdW$aF(s(6M0s$@|&BZ?!i4kyC49~eKLot3gFwPbwDJ~05*v_CyG_xV#F_k zyPVuVVoDX`;JZkv66>6FY%B&mHwNR^5x9o`I#Z#u#AwO99<5t;ot1-=o}$l4$ZG5a%^SuL$U!$xWTd^4>Zk98h7!+~8I zurA|g9!Ck|nN>FjMopzjb6FZj&7t*A@!{SWW}(w1h&SCVE(KtK=*^%~7uzeJGl|^& zMGpHwrmL4JYqXFNo=kz0h)%~O1SV`6OZsf#RyG6NtdEHtOszMjwv}Q|^WRd#M3%&g z3`iM#FRT-sfT*g@#I9A1VHMQmWJ9P~UbB|7k0g>vs70hXd=7#K52)?glP_vzVq5<_YAgr;O>KC~q*k&tAildfqY(tZ#N$UD%AUjIil+ zV*(#W#}~qcwIg|Kk9lDa;lFudwP6*s>~(&Z@x4W?nTgwg&XODVAlUasyulAWG=oi{ z)@q=L%>QJ0N~xgQYM7z%2R1}zA<7N#B>o(u;L9vavkpk0Z51p^+daX8ovPKHh^=75 zDNrJFA|eB>HVoAEQ#M5AAv*sUO8}U5K_j{IxH)3FPF(K@lODN(8op4{)Zqx}eZ+px zmq{9sOR?Wc;9jV#qSi;5!|-MxX9_u2vW&>rCH#a{giY|>SjHHq(lMe*TY55q0&}?u z6Dz>e=60pdSehJE%--KJGjbQ$(QhREp@v3yJn~RJIU5jEZ~Bx7FD?Nk@{N?LM`PXN zuxzFo+a6efX<*}qP;jcSkaYwAwqgbL9VuqFcIbQ|a+!rDZUA2X%gB}}ZjQu0=?h*< z1GclFGFxPjXqVBx(s4;_2!W znCgedMNou^6gN|mNx7bynwd>cCXkDmT_$I2 z(@y|j&uOHc_qV+3I-Y3etNmYtO6~t*eZOc}+nsEa-0Mj+DF%79V<$`%SKKvAedd;lilA{jG4PIZ#VOs?LMLj0 zhX6pG=bLtf&uECc>t5=Oz{;ON*UJEiS_$H@B;J@M2y3RA7f z6`8*B7PgB~=?2h%ZQJq5-e%@Op3>3hM4hnWId^e#M4^`Ia*zbWAx47!#nLkem1x}a zv|i<4bGvPxt+GTQU+3Shmk+mo#M?f?F8Br$z{z} zN>P7>oytB$GOPLvQrp|hb7tNO_%jkXmf5&S0qmV zntFc6Mw6>rSxVI>kr>^VP*cI9?X=@l_$|0SlHMz9L8J^)Sx}#*VNuMO#^q07!MHha z1D)n4;L>-;IajZ@wQY-sa&)+|8) zRHK*4Ne$qzD(8r&FE7!?t;eM+63>drO0dRKzIW~f_Iz<=%kEOhGm~KNi z$24zvID!0FI(?XgyBw)j+Od__P%wp?wTzD=e9#OURn6`!pmla(@>4tY9RJdpclCI*jA z!ae^C^Y&3tPEL!Z&0oW5^qN=Z!PR#Hs$5@Vo;u%Yy~KvF6^0^l{fdZS|D@$(#q{o6 zlCI|n8Of)AK$@|A6RY`u$RpQCWdtq#0UOjO4_Bl5u3 zz~aXmPYV>9;z4<)=8Ff(^%UswmUt)g%56}|N|<$4mXANLDPQ(XXx;Tb8v@tBUG zJ1F)ONE6s5&F_sRWMLahNXd3-O(Y^qY6;XH!QEt!;9DdRm>#mT?rRpofMJ{0iS2p1*pX#I@Dn}7PBa2{DsjtRnlUwjyZ9!*| zugJ{z--7I`7n2TernYp1q@(T-LH$fkqgvD=sFh>NLFxm4;FaWvJIEXdIZT=d*GqDC(&(<-28G$#S0#vYp$3|?T8&nLS|C%~7qWXae`1{F#GA2u zzHDw7wYlF7=hJU}#$@(K%Ou2!8s=R|(wKge4ScJk3`)Ls5WE~M@;N2~NkQLqP+ z>WM(Y3l;) zYn{#x!EWO9y8g{YJWc|a)_zxtmOeTfG>MzQ1&u^{bRojx$n!99vkITdTZlxM!j)X| zoW)>U>hbCM$M`!S{xJvneDD+S0PA89v(t~^DF|$%s?xzJJ50K?&dzp8S~Qb(J_?W2 z>9;=jPt81wavtS5I*2CR&NJaC&&zt?S-QHITf2-T`KI=wJ08(E5z%NUMYPp}x#@*m z`!e2Wgr4O$tmc+35?YRXS4lNxDmgz>Q{Z5$IJtJgh?eh^Y;vuF4;73;;?-p%(BcdX zkfqZ;#7{95FH@zE$Y|;n-~-a46UFJlLwu;u*~tBjS}Q~z)gq|^^`WTVt5*TXAD2sf zoY(1!i01Z3gHL0bv1Le*p`2-m78qEtYKQ&6d*qpNs|R()`VL4uqA36{Mc zdsn*4P@~A-#8W_^z*45@3JfN51(R`0d;$wM>h2mTp&ImH$kT|OYLXhlPcWcvF_g}U zw0|8Q3y!cBWn+y*)dIbKg!j~jgxFV%>RnzT=V5NgP_JRA7Kmfj4o?rq?0d4kRfQaoy?#szKBO(%CV&v8v2583y&XT!nU)eH3vljiwtlYnG5j zUlP}Iska=e$$Nf2BBWt}%dPYCL}+H<0W-*gza>Gbxd4DFYn~#3POr6PmXVzVo%7%NXCiAP~m4(oz1Dw9UgMxDKm`2_d? z4wFHiZ4&O!@l)ZNjcoMv15Bz~bKoC`{-qY%+E*m8H|c~499m~sO@BiuW5zQ#6hzbc zkKpIfNruR-2JQM8@Ah8h`=vrtZOCzrS5X$)=9qGPIUW3H4_eT`;}{vTunu=ydMlDY z+mJBDa3Dhx<$cW^$h*=Cz~^$lC}e$<|Kr$F9T@%xf5!KP%%mC}Vd@a?a;Pi7-~tKx zbyPk;r0`q0);eD57xqnQfc&yc`PBL~TyfhC+>1im<-Ni44OWl(AYHTGVJW&UHU16%)1P{u;hNRVLf|3C* z08dUd73nQ2O!_>%YDX>Et>9C#NlBu;r&&3zQI!l@A(Xv(iAK$jBc)UbRLj8TuE<1Z zgo27(|@ z7Nwl-ss5y+UC8n`>wfTv2&G<1kOpaOvavi&e+Uh|!N=>`8GLQ9B+8|-cP4d;ujFUL zWduU?dluwBdL563$gq5da^Q`vMmYmIYUjP?G4=dT{Nl`p8J?BEVTOgG?z0^ER2N&@1Xf>qL zd!w+q;9+Q;eWr{d`zSofwpATM>qf(WO`K{6D;ubF0CL|y47YI%hEQQ27wRE&(LFP@ z=PJoCqt15oa+P>*fdrl*%IO~6O4LL;cm~I%ysWgNlXR~SibTaJ>-milgt zQXsC`%GpfW=#<5UL#Bbp$#YP(W6@JUw(Uv_ntIU8Z#PZE4V|I3YblKz2LjYpJLl-V za0!q)nM5uqp)q3>tIP$Nx@2pyp$``r1M{QCFQUNXC{jwtz$TEC8z?wO$z&~bBT12a zZV1UpbkGa#Cd)!03#NFj|ekvq|f+*6eiO7=w4U6Lm zLXuVL#|Cq(oq&MeHx)@rZw%dd(uQH~l(p4w$o+c|*^ruCNW;9Wx9)V34N!EsV!Ekr z?RrF!-z${m!`)il4_UsfNy;&mIuD`7+fW80>CggQEO$eWtoL^!L-nSndPOIzHnx}M z&rt?w-#YK`-7!u1E7NwIE2XN>K_*=XEo?sxoTunLN7~<}LVufsC5L)~)>qXs?DSBM z;LamIN>@slrI;l_*rki(t^rVF{9l^MG84(?WVN!UrAC1w`waMmdj`7UvNh+fR;Ee! zLP~yI$_Uj6c>t*1CWZhDib0iAaV_%~Y>2KjH2=bi)B}jJbp{;^?q?1x>_^=NkSwF= zy@#Y}BY7qTEx?zuhm;y4R_>8Ng#O=Lgi+u@rQBG`Qxsgxqp2kkWaJZ?PkI+UN$a>D z>DD1kdNPH@b%G*LfkD_GWT?rbN@ZB1JlS5o=kXKx(|G_NEIFrY6dGSDir3#imTk zIIQ%g2RhUT==CBfAbr*FIQB6O`^w~#2_(YjKcYB$Q>F?_$P`^aAMPPFr%?M7ZIoyc z&-XH_S`6;fMR4`XEsfnGcjg&m0kg>cA}Z8twMvep9ihr7nwBJ)q;u5KL8cDXJZXaX z7-scZPb&eY*}l)D>uZFKu6>4R1ZNA0NmyKtl&7|^aWYCq>gq0h);Kd!O2^LPc8Q8c zAnM(VJe^68(L6sU($0XArT2#PZl>%$lShDsSp&xMDycF90oM8txv4L)N#yt)OVHL` zNM(n++g6*UhM{lwIzylYOEFW#MP#JRPFMaJkfgY}?L~Y$w6+ zn43!Xr3;F~(CeW+CxhM%voTaAUn%~+JtgGUpmFk0*j#|nMs42V-bM%Nc$COS1*#v} z=~64B+0QV>6aqalQ%wwDspCtm1#J;S=pXkb7K+CB5s6P-ehd*B&XT~j!24*^En~3W zd?iY@AZ^l9hjdvXLeJCgp2EcRUcm(E1c@vptWS%^xs9&U^WrV|?n$%QD_7M_?LEXa zbjP6+4rqxLXfXE>TXn%**LIqwE0UkyD>W4TfKDNm-zG+|>pGd%)-7A0IsY?49{m|& zsPwwH>U?P;5K|tcLZeqoB%b>r$`JKT5Ff}Wtub^WgijRh>j6UXH-PI_tz_u4_}bfD zgm)GN-UOkt+CfhK8$cOZ6w7KCXPF6-GlfilFt-uFVgpLhgfxw5_`pN2dn8kYr z{cKLa%0WM^6q_K>KugBCBAw)W`iN~(8{8uQnF)zQWZi5hYHM;Ol5ZrIqx@DfjXsWk=P|Wb{lJpzCD5FUK`cCYuMq4#LlcO99+U;l%c0s~v3kj3 z$D`EL=>cd)5!F7(&ESO$h~a>lPym$#ST7ovt60=;FjmMpf`c(j{rCjXM01@t(UQT! zp+n1$xgvq;KEZlWjgIin5deWK5m3pMD+*xu|CSA->C#;SFn*UK9gmr$OTx>q^3fspRL8{Mm{zkD&;%_{@})R=0;#gMu8g7A8>O|@BqOemz)S1?#bsP` zSr)J@**HODl%howMMkKVmrU*VGFiusH%hy}6W|e^PLUzi;-jj(r}5DU)8r(~SD(*;y@7RERFs8S4!qia({ysm2j=p5Ainh9qXM(})$xEDY^ zR#!X&BR~sW&mamaX8^$_$vzJFpFGUrtbiIRn>O-X7_FHs8lkSaL%D#`M=v88zLD6d-#xp^@(!6Vh&1ah?PWPk@Hpome zTT=T1_z`-EiRdoa{-tMZS%CeKtesFD+EG{`-dd;PUQlK9cU0_0H2C8FI?>dNFo&?8D z@j4_cSS!w{v@=C4LPu0KGIcEu+#CJ1)$m*-Gna8lX5}ilQ0zwJoK_qkG&DBHY&Dk5 zuL-Gi{Mel@^uqYrP9*_XpFzy&jpnCF$8TuO$?8#D^ctN`+1#M^ClRTkgJO@?Bj;BV zhL)$Hj7;;R7l!Ss9B{zRi}O?ZnGgM3ojXrB*baHHWIPIo403D|X|m)>&^nhU`VzN@ znSCg*TD4L#{_**JBHv`n8H!`8IBsx2yv0t?*&Ndpa=b12Qq`Ye&h#T<2qccP2gGvo z+|7BTIOWijRG-9|A&xC*z(K>fG5gYC|86J}BzQa>W!KK6U!^ zd5_fA`S2a$zM3PD?)BlsfUx}c<%p~3#M7$T7kpQ|-!JwLtRUBc{~jGSXi!#uX3p?C z$@-#9w6oPzL|HATao>oIIt}t9@gg)$hmC@sildncw6p`&tjwI$IuyKD9(AFp4uJ*; zPLg$nz!>Bmy`iq}!m-WBqVUwsbdB&A;HgDAH8c>8FI&$5$Sbdin|k-Y%fbc_MwK>Q zHjxG8T!x*{U^I%F*6;9;P?uRpQ#2Gig_l-*41MG2d_-$TCpHx9sERE6nJkYFGFlfD zi;y6pAmmkd({A=hz4qv;+SAC-RKXf`@rP`8s`0cgT(!`c$4swNd!`yE8-V(uVPDkG z;(I}-C7m`i6}l5tlTGz%hVCiobQaQ<{@ew8I7`o+Q2LQ$J{oOfegfX0Nw<~H{+E6t zS643XE{*^FvE4!BZ&014im=kK@-Q-8P;;4=*i3b(&-0k-;k5pWDUU2)i^t=iMqC&_ z3I5IaBNwlNf9G9ezeWmajWL;{WOrSjd@uMLEkBB=^URY3WQB@S^WagS8@^}+& zFn%KZarmPbUIqWwm&x^{8s9rPbhrF<2VR+Y70~*_aGv~h5dOS6{Xp>`snf_4$5j#} zjAOG`_h#!<1qJDLbtnpr2yNfjK&eMTVG35MZ~niIEZeEyAXA_22)mVjbwmu)XBCq! zr=$Nw__Of4l8z5C!H3=!cZK5Wrdj?2pUZm+e0pqlg&65~yx6XqBjqvvNO^}IrTPf* zDM%c~PlSIU{&vXEPf5dWrfk1FxdH3=wtCcR2Blftrc9rQc8FKKzl++%(V8apd$K+v zJYG%3Mr=@@W0AVDYs0hjV-V&%VBOKsIMk<6eVE!ZOla9jP;m?}EuxuEs++xD)h~rM zulfiaJ_@-V9`h)-mHv_ZXt?0;Z=<^NrwPRF&qw0=Gt zK+W@UyxISn+2?vrZ54F=Np-kMd7-5Kf{8Xi3b23mJJWsL?qjChqhgRRX`Ol=Lhx_V zDNWl5To~A?A}C+L9L_|Br&6CU)jssL8lFq;C)B(yHtMEpEAa&>=#e`{tfbo5a4Q|W z&(w>aJ*AG66?_Q=HmaHA-l+DI#d{`sE~_=vJknG}flX>(I&ek3P2Pvx{EGC3S5(vm zuBh;LsOop>Uemgx7EBb4$ zloG<27u3VX*WdhyF<2&@cu}pBGaFB@e5KC9>A>YdEW{EX-qP}p z%DszJ;S;;mB<{1mrv?;nt2(z^f5@b5tw?`ZLMAyP!cktmfH`j2sE(kjX{Jbe_XTW= zzeUX=+Xa3PZ5uCgDQ>-D*W49m-;Q>*Ql;dJ>isx+p!VG_!dEfx$7*%b3T2V|v7VJZ z7go%E@~8I3UNX$&NnQCvmepzz9bc_RVUP76t;FAdLn^4sN)#Ud%l{-1PwOX|?)e{k z=))d%FxqlTE&RXkj)^?4%k4NVQF2&h_(sE&%{$efyZ0o!2%S|%;Lc>g8UJd#~sKfiCku9MECFibICF1$+c zlGn$}-|Of1qN=-034?S);-9IwIxTcZHGa>eYM1%qV8?qyjni(RR8X}EIi00zR z&H0wOMy{E!>lSI-^tM)@Zol2u6#HvsHvY-V(j{}vEz|dN&H&mzzvuTpKc440ckaD& z&pF?}pYP{;^jwbhT#jw^XzT%Fg?0n0Ha2Ku^ra?~DbYBtJ<-Rjm1Q>GcZg}YV%q(v z$TRCK9;e3P?a9W4uzG$*+g;uJ@0zhs+-5B5>k`pjH+Ns?+aW^x;#+SV#Ikv!xs;ns z&J5$HsIkVr@VgC9zk7PIFx(CAeq#59e)YZhL49}iplV^BgUf5YyMG$;cP3xI`@&F5 zvQg)Vq;#_u$;(aT_=QCoo^MAR6~pYt#wQYtmfdqO(Hkj3uzu88!*h&T=Ms#qXA5>s z+#eFE<9)H$hPv-{#@5ixC9KfcJR|JRhfVWM<)#Nr^GqeCh4`#8Emr@Qm}Z-1njXga zudm`o_}gTREWM-8p*@i=f74Pk_Nl>For?{&c;xQ3QV|!r5D!FP&1&_#FVuK+_JQ$8 z-NE4MSMF1*T2#N58RyT&(f%+NX*jOr8Z~DVStAuy@`Xm_8!^VjJ=>}38!ghXecivg zajnP>f%v_RM_B&u2UnBDD88lC$lTMPwj5!p>49BWSIYECoj?j4&Z52C#%wN$FO#NzoF6M2VnBNsvllgc*g49Y*OsGn+2&jWRm+#!>t< zkw@<5S(@SAYo*j<=Gxu0`|CoCO58i);Zo4WMq9g`_Ky>h)TwE;SlgpIs)tiO?RDw=lA)uW8o^K+@?el4BK=IL={ zo1i69>xax@Y=1AEqUQ3bEgx8o)GIC;lEtGS|AX{K92-fkqlDS`+q=zXgg5A>gl=p+H9&Eq{Xpe#!KHk@88yGp3cZopyyytzv0yS1Isc3U!^b?4X$Qm z$@3038=Jo})8=)|PTnmnMG6Lk4Kr>#P1F|0GUb3)Bk{C_Qh#AsHavuCRG7j!^0d#W+ufupR6*u@1A`i2$R?MM}Wjuxg z9P4Rj>;OehV=kjJG0bp|4I^74OX8zAc{8+p^7dvHis{XgsrmEkjUdaVMN?ZC6O@x7 zVtirDDFbUN1wLZwhAmZ!-~n1c4*9_|%bah#WyDfxFD$H_;76`@J&is}VK%J$@Tz`B z)eprK_dI;r6U~Ib*23x{sIG}uQ^##05pVjJ$}~pH-XsJh7;X`dCdX5HBzXs60`R!0 ztW*i6axAPQfu2324Q5m5u{?b!B}DQVf0m793o2W}oc^|W=IllD?A$`h>3lNY{yrU_ zqK%g;&0)ugy@7n-ab%G@Lrc-`hu74@r-u60A{MoD!YdLs%NIJ>X>;b4t5>fcz!UG{ zkmudUIehQLflEDqALIKm9G~L|;2`&%%ochaXD8*i#yeSZWB?lOjTy-wh2e7tC+64U z)_X$z-`&ZgEXKveD5GD_F5%KO0GvoJ}UI9}bX1FiZtt=6isPdNe7Z%4mnaoE^=~w|9E*(Odh=V-;&Ehe=Ni@h{6QnyJuq+mFaMBkU zdGis3qVieobwSosk4an_$6~3jo#!^U=ThT1*zc|u`NntkV!Ui8%{<0ukS9T;v%_@U z0w=Z3*3u|Y%~IJRI^0{D>=vvnP>ktDjnIOTFTa>&$WZH|wj!KOyeRWtwH8B;vmD|r z!qoORaEIY^CeR)ii(}j2(aWgxRwNwH_ZIdA%_OYBdx&QnFTG;HM26CH)0iP$ubFl9 z1m;LOIu$aQXcum>-pBIw4`CB|DjCy=yIDAXI9^7%PF|1d7|brT&wz1>!&P*w{r4SGyAKhjGJj|HO8@3vodO~g&ca)0U`EV z$*M#6mTJTn>9%b;{J&&20&V%eZa`rrS1%UoTct;_UeXAGl@P2dXTgc<2l6@8c0$Y6 zN5DZ;>YD9)oyGg(=djqmhIdB)vH!nVvK-j+Vbg;^MKeu{fHX^xKIGrxAUwS?!x|i5 zDQjV30d7e6-J2ko?dmxby?mD6Ma~BhUh6-DWE|zJl2YTa^1u?Uky@sSWcJ@Q>ImX; zU^&}P0jM}ya1M}6$aoJDnxzzd?x6 zpJef5H`rRkQx8q{)u73z*xMoedANGMR!r6g#3J_s9?P>hrEF()a$%X|`i+Pq*R3o} z&OL_vRIp5I{?gV1A+sbh$fnjUSZ&NR2z1uxAwZeIm7L-hIALxXCaOHoV!MsiN{1?V zq;D%8{9tL&*-K> zzIz|}Tt?Ql@3R8t&-!Q9A|NSPCx3s5u0yotEQxH~$27Af>N{u0JB9=7#HpfB9pWck0LR z0ANc69gAhEhO(Bk0&2Mz;VA1ktW7yu$1S>pmIhcnQ0;Bo*@G1LqT5pgU)iblCmv4D zpI9ijDRHA#zT%`4$5`x!G~VO<2z_SbA4?>ryp7g<&Q?kEI^1YWHlxA|quS3A6lIj` zxEM~oUg0)8XQEL@*(&z>wMe&T9;`U)C?s6d17R%G`X!cEevD5i>z6Q1fEeZ7#Z-BU zjm8`l=Rn_`WHt~b*TbmVlQ0W_au>WAE57m&9N%^l%YN@T(omyPjrEu&GrS4a=mnNW zTQ(szb|#?UNjVbg2VqdJQ`N)Vg-5Y9r*M_0vYrkXqv zY8+ZG)5l<%S*Z2vLe`;%XPez`KgW(~)I6Wt$@v3UA9a^D zQ`wso;S#HT`*|8BFqc#1H^?F04irO{e0JziM98ang#m%3C5;oyYt^DttFOrg|b{@%@{i# zT24iFF+m2}Y}zDv9NB9S`rM4SkmF}==I-EfH?;94YCZ{_E9@vS_l6c&Wb;*c5)x~- z@T19HC6W-BM`eiHB~e86hf%Uv=+-N2CGGl!ogyD7gKeDikcEo3`ACMQeySQZ@*Ye? z{kj4%=F?x*Db@`EErtPL#_$Q`5@u-#(>b~R!rihK!?z)f+Cur(E<1G6#!#LpT`!AD zt1k%mzRWYB>SEH)TA&AhT3+{V!AFEokC*Hc73kg}C&d4!y4p<&-^ z(x5g;O<@xM;11fOb8rH11jCuWRHi8#xhi@6HVXvv-dwHB_kb)29*59UDq(H12&IlI zda_YaWW{VIaB{@)1AsM(q5+}^C(l1oMZZe(&$BzI(+V3nGyp%Z9f+V=9LwK9?p6H9 z+j=%$Z~_r64r+}Dc=f)< zE#~`8>js7`HeQK|_irD=r&_5%){xGreE*HqI9|i^Fh;qt8fk(L=lR_FjrAxYRBBy|dN0ECe zU!U@-kxA=L;+<_Dv3$iz99)72l`6as=)A2-4VlrL!(8|^1J)ZU>o!{#Q8Zp5hdc_b5yMpp!!3$T z@}LZbk77kgA|09&zkSsB{^|td>ThM5N~HD%zJw+=@XB5-rh9;LN=#4DihX>f-&xPw zm|?wCKoUy$%vv&KHGpdXl@duU%aD(2Brk)ywpCSzKq9de_k)%Q8Lx)1O#%{8VX^WF zp1?|iWfqWJ80k0hXpH^5q#7O|B>Cj);5J0&KrR6nI-d@{j;Zfj&kM+Q0^Z@6ERy** z3hkAVZ6A2Vo$GlhMTLoi<}au6oy-Wd&y_*WP8nYKQ2aVrPj@K>%WneR1`e{ETun$T zU~-|jEdbfFjE3RNf#Ea+GtBeaaH{+rWRH?JQihvqwzmhVXEUPpA#4JhvitDmY%7k_lMxda1!2wPb_f?RI8_D+8#$JXDEh7qt4AVJ^^YXD!i+=Jh}CU89WW*| zSa+4K(vxIu4rNBGrpGLdh~I%%PByIHrqjs+E~~J=24OL|-h`Hvw5(4cAFn;k!U5qS zrWs%}!;rJs0ezXjW-qVTjk39kGE{`q#y7YXuDQst-6^Q*V?;@~zMER^G^ax!k6{@> z=3Q3j7Ap9H#rGNrB~`#s>xn(1Euf}2#F4N5tli{)_8mU6H&x9tPgk{MNU)Z4DS`u2 zh@s@~U=meRwKdfAEl+|zCB09x28&qVw_vi)|B+=YFum@#OfGD$f|U8>T!<*<(6mt6 zaU8J;E(~u9fR6JtX^54d@}pXK3K}@FRU;w%K4@z^q^yb=RS+}<5bIUmR{-{%FL+jv z8*={`NjLpNi^gc)AW{LUh^2~UES7IYnNrK=2C=;D7;IgY&(=@)CdxU&oxU}i&9M1} zKmG(i8bbD$!IFn(h*ZSbXFoHI2;C*x{0D<*G0Eelh%Gh*}fbbtCe{q*AyqNJTH}U&mw|%u`RL(L0+j4B~Jxgx&@tpxhqWD!ci0h z3%V(An7P0RXQMj<*k&2S) z$~Q5MG`cMCZbT~yeGxikABemHZ&$UXB;e_Q22J&>ki1U7IcuzDR#^w^l#OyDK~C2W zz^@SAf)3smgUpQRvRIN>i^$Vknr)bNw6AgE+Zg_D=BtL8)fB>TT-m|_Dh8;aAK3rlf@r3E%^0v#&i66TztqKo2QSwAPp(j$otrgcRcI!!h$ z3Du{ZMmQZEq*=&qgS&!ISc=38K5ZA5=qV{!Dyfu`QU_tZTZA+VgN#=Eg{qt3=P_)q z!ZR&5DjNJUJu^_dl|G2qyzJ|400;&A0Dht)UPHqMgdcV6g|q`hAdha{E~W4xNM%s4 zY&=~<$FVfm4ttZuS9dWN8x-fc!T5Q1%Wg5+o?-OncqpQqnw8mn21VQ>CMaGI-7}fp z*3gOQKM0~y0Kn90q zq1m09M7z(RY_*9rsR-3<4T6dky};6&qaO))FK*l+5ssN0dHtQN&EuUhQs8x_TI6o_mb~ zGOj*hr(;uK7z$9hr^vW49=3Ze>>r&Bb)nuw160$J^dcm#*QtF1dw^Obt!DdB%fw2L zLi-c7O}$^eCTnBn`*--$rfUaustad3d=Fz3(#&I2*W?mC=d~XnNRcAiT=i zxC(Z!t7Hc^Ia-#?nZY{LF-x<+uqsrYigq#@2t&8c(Kv0HsZXXW<%q!_%!GqE+nI+v z<#-j+Rb4Pe05FGBW+l4It{@z2m=BXVRiVwIMK%oZ;$6^BpaRY-EhyOVbX90`Rk6J~ zR74{h&x0JB6iVyZrt;Ax*&;2Yz;s z6iw!-TOgTw)%mMxXEwj>m=<70@ugT2r;z2q^yQK3q*g!|25ZISct}t8orHFJymR6S zbg~P2x*-;-hymFUNmm2f?)OE=nwyo=)I0p$F*u!P+G9E@v71>n;pdDO=E2 zPGeA;MeOfkqSEWk*HAy$P3=gh2)_9rFv9Jno7+pS7OdhK!xF)Kf`XXkkI>-|tVCu2~Sk+g= zvmkdaO)E)u<06fg19=iAKpxmefejsVx*LLV=&qvQ_Ge?)H>m4!VU7dwn>wbseU;eJ zQ8G}3ZHpA<8zhXKgZ|9JfS4xJ$58R#dRAbkZL#3C71Pr8JaZb(TR{O0zm6GqC94e>LS+A{BJasvir;4o}j000^O#5Ccz)}UYf3A#}><64=T!-^nDi-uYnd*`}I0a7DR*~B8nCz3Z@2i9xgVU%J6E>_LLfW$hl z4FbC$>j~c=QH+oRoQKkw4#oi+M*T+A)0SjWCF!+|s+Yw7(KQ#>Fw8~aChtZ)4<<8| z)(ryOKs5{&T!w$wN}wQs=4gsd5Q%^TVs9|zycjR+Fh;=35yp$NEaXWN07Hr5s79&T zq8Mbb>Ui5mR6}Fs!F@q8H8@Y|3DlW|iK)~b68Hj`c&Oj$6m1OY1=}-#skR2) z2&Ot!R-5$ZILNpjn^q`%oJiP~BSb`S&(<{`SR-kJNji zFgXYav;vc1W+1qR%l1W!jEs5mP1w>Q_nSdyUHeWxnjq|wVuXK*Ig&C2(O3)xoG3zX zzl%bSm7<5DQBhE31ZXG#8U9}~p(*YpyStu9lWf8IAoYYIGKor$YZ=UkEm{w%fU>aw zMsi9SukSvwSZcL~Wyt2LEX+gc{4^0~oM_LJ$e@%pV{g`Y+I$g<37du$t4@B$-Appp z6I93r?KwqAqF!NPwdtW?3LcjeHQL5HCFw+7H*^(0Q&jn`@cwc;BqVE<6IB}u6fuP> z2WVz5zy#I8^Oj2G$W-!cp24v@no>()wXG%Sur|#=P*Z#9)P9>D_6gY|R5sA9YSjMqFT^*Xg~u&(cUcXArC+kc! zFIpBL@6{T@8Kn5V&7wwnP98Znz^Aa9IJQA4)cXW3Vxxe9JF{RNvdid3H$m5c84mz6 z-s~$A=xMAK0i7;v5Zi*O!@U9a*|ibRC99)E{StCb7h|_9LUn$gkqM(8br_;4NT%M4 zHN5#W^r?1dAQoWr9Wvf^9j|l^HQP#BL1I0&hGo*S#Q^xV1fxNf`xIR`FKoZc8=1Hu z{pb1yrt^D|AEetWFWbm74K1njwK4vfjbhe7YEoO6{36>Nl96FD^)Y=!1^c17vu$D| z`wMy3>6O&^FLMM{dh`+g@%zPW&UOVa&wE?+>O1rP`{zGWv8bf$)6d$)XUzY~+oHc< z*S$(4o3h`fIwwY>yir?-5T@hUn`#GL%BxIvuG<-P{*mQi&!U|QeuVguf_>e%s~7>( zLh~QT5Cs=;kAJF_(;rFzXuduLw?L=3;u`MRc>#7Vd*vX?kW;=;JbZ)PE%{%Hpbip8 zSD2QjKZ4m|JE`12qiXs-MR*&wsYOfM{k8v>_Uv*{fu^HD&kgpmvlamfc^Uv8R1S0f z!gA>-)74(8UB)7bn}L6 zypUw0I_-tcI_LeqG)Pv(B0F}Y`EwkZ+FY!T|>;5VDv zMOFtbEH0H5jeI-g{Rr;_Q(NI5_;chthu-M=A2IQ^8r_L17?Vhx%ENoh zr{`gpa)!xAY?eOK?^&*UIIZ}*xScwl*Td=beo!saiu{i?>E)p2=F43`bvg>k^?w%w zq^apN|Lv}a$nm^x34{Ba2I0v0e^@_7Tr`i0PQp{&f46s?gr}8C0=9^wa*S~ZO>P6QYy(GfZJt@fDkp$^YC3F8TUIYI+)uGiR)M4jsA- zV{7|JPbEjTIhK}xrvE7C)Jraj;?HU>-Hj!*8AVY;40lwNI@4$(qu)Yeey;V4U@C`U4eNYRh!Lo%;wCBN9N6Y^>4b3`)xb* zfaW`>&!d(dda8dj55ZQyZjr{)mJ09)zl{__4c7_~Z@Y9)UpjP;d8q$Dr~VV8zW>z6 zgZ@Tq?f)WxZEx$GUjD0ov;T{bkdNV7SyIRE=ts5xZE;^;(6KqE5h17>odJQb$AmkQGH~vkcSL6JLtB)Y&l4JmV*BPGXhtvIOOL%8gq`{!d|2Wef42|QxM3y|I^7r zB&qf7>=v3l1ucrAGV|}RN!}01yHK<4*TZPT8GUn5m1{!HIpldw%H!%nRiEi|}6yI`KoC z&hF9Sp#OZuf0$I@j2`*wce-WF#2lFEy*T85{uqNJ7spr}c{sXvA5X-2F^)nUE*wQT zC*y3XZ3WcfD>-)G~P({+6=J|B|j>laLD LNHcFs3kmxl_Pgzv