From 2cfbf1803b6ed37ce40fab6a251477d63025868d Mon Sep 17 00:00:00 2001 From: Jonas Finborud Nyman Date: Fri, 10 Jan 2025 13:45:00 +0100 Subject: [PATCH 1/3] Finished domain-model and RED tests --- domain-model.md | 34 +++++++ .../java/com/booleanuk/core/BasketTest.java | 97 +++++++++++++++++++ .../com/booleanuk/core/InventoryTest.java | 25 +++++ .../java/com/booleanuk/core/ItemTest.java | 19 ++++ 4 files changed, 175 insertions(+) create mode 100644 domain-model.md create mode 100644 src/test/java/com/booleanuk/core/BasketTest.java create mode 100644 src/test/java/com/booleanuk/core/InventoryTest.java create mode 100644 src/test/java/com/booleanuk/core/ItemTest.java diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..b83a44f4d --- /dev/null +++ b/domain-model.md @@ -0,0 +1,34 @@ + + +| Class | Variables | Methods | Scenario | Output | +|-----------|------------------------------------------------|-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|-----------| +| Inventory | HashMap quanitityMap | int checkQuantity(String SKU) | Item exists in inventory catalog | quantity | +| | | | item does not exist in catalog | -1 | +| | HashMap priceMap | float checkPrice(String SKU) | Item exists in inventory catalog | price | +| | | | item does not exist in catalog | -1 | +| | | | | | +| | | | | | +| Basket | ArrayList items | boolean addBagel(String SKU) | Variant exists in catalog and inventory, and is added. Calls addFilling() | true | +| | int capacity | | variant does not exist, or quantity is 0, and can't be added | false | +| | | | basket is full and can't add the item. Calls basketIsFullMessage() | false | +| | | boolean removeBagel(String SKU) | variant exists in catalog and basket, and is removed | true | +| | | | variant does not exist in catalog or basket and can't be removed. Calls itemNotInBasketMessage() if not in basket | false | +| | | void basketIsFullMessage() | prints error message for user that basket is full | | +| | | boolean setCapacity(int capacity) | user wants to change the capacity to a reasonable amount | true | +| | | | user tries to change capacity to 0 or less | false | +| | | void itemNotInBasketMessage() | prints error message for user that item doesn't exist in their basket | | +| | | int calculateCost() | total amount to pay is requested | totalCost | +| | | void addFilling() | user is asked if they want filling, and user is shown fillings and prices. User chooses which filling they want. Filling is added to basket | | +| | | | user chooses to not have any filling. No filling is added to basket | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| Item | String SKU | float checkBagelPrice() | reads price of bagel | price | +| | String name | | Item is not a bagel | -1.0 | +| | Float price | | | | +| | String Variant | | | | +| | | | | | +| | | | | | diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java new file mode 100644 index 000000000..68e2829f0 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,97 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BasketTest { + + @Test + public void addBagelCorrectlyTest() { + Basket basket = new Basket(); + basket.addBagel(new Item("BGLP")); + Assertions.assertEquals(1, basket.items.size()); + Assertions.assertEquals("BGLP", basket.items.get(0)); + } + + @Test + public void addBagelCorrectlyTest2() { + Basket basket = new Basket(); + Assertions.assertTrue(basket.addBagel(new Item("BGLP"))); + } + + @Test + public void addBagelIncorrectlyTest() { + Basket basket = new Basket(); + basket.addBagel(new Item("BGLP")); + Assertions.assertEquals(1, basket.items.size()); + Assertions.assertNotEquals("BGLE", basket.items.get(0)); + } + + @Test + public void addBagelIncorrectlyTest2() { + Basket basket = new Basket(); + Assertions.assertFalse(basket.addBagel(new Item("COFL"))); + } + + @Test + public void removeBagelCorrectlyTest() { + Basket basket = new Basket(); + basket.addBagel(new Item("BGLP")); + Assertions.assertEquals(1, basket.items.size()); + Assertions.assertTrue(basket.removeBagel("BGLP")); + Assertions.assertEquals(0, basket.items.size()); + } + + @Test + public void removeBagelIncorrectlyTest() { + Basket basket = new Basket(); + basket.addBagel(new Item("BGLP")); + Assertions.assertFalse(basket.removeBagel("BGLE")); + } + + @Test + public void removeBagelIncorrectlyTest2() { + Basket basket = new Basket(); + basket.addBagel(new Item("BGLP")); + Assertions.assertFalse(basket.removeBagel("COFW")); + } + + @Test + public void changeCapacityCorrectlyTest() { + Basket basket = new Basket(); + basket.setCapacity(10); + Assertions.assertEquals(10, basket.getCapacity()); + } + + @Test + public void changeCapacityCorrectlyTest2() { + Basket basket = new Basket(); + Assertions.assertTrue(basket.setCapacity(10)); + } + + @Test + public void changeCapacityIncorrectlyTest() { + Basket basket = new Basket(); + Assertions.assertFalse(basket.setCapacity(-5)); + } + + @Test + public void changeCapacityIncorrectlyTest2() { + Basket basket = new Basket(); + basket.setCapacity(-20); + Assertions.assertNotEquals(-20, basket.getCapacity()); + } + + @Test + public void changeCapacityIncorrectlyTest2() { + Basket basket = new Basket(); + Item item1 = new Item("BGLP"); + Item item2 = new Item("BGLO"); + Item item3 = new Item("COFW"); + basket.addBagel(item1); + basket.addBagel(item2); + basket.addBagel(item3); + float totalPrice = item1.checkBagelPrice() + item2.checkBagelPrice() + item3.checkBagelPrice(); + Assertions.assertEquals(totalPrice, basket.calculateCost()); + } +} diff --git a/src/test/java/com/booleanuk/core/InventoryTest.java b/src/test/java/com/booleanuk/core/InventoryTest.java new file mode 100644 index 000000000..e157488a5 --- /dev/null +++ b/src/test/java/com/booleanuk/core/InventoryTest.java @@ -0,0 +1,25 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class InventoryTest { + + @Test + public void checkPriceTest() { + Inventory inventory = new Inventory(); + Assertions.assertEquals(0.39F, inventory.checkPrice("BGLP")); + } + + @Test + public void checkPriceTest2() { + Inventory inventory = new Inventory(); + Assertions.assertNotEquals(0.6F, inventory.checkPrice("BGLP")); + } + + @Test + public void checkPriceTest3() { + Inventory inventory = new Inventory(); + Assertions.assertEquals(-1, inventory.checkPrice("OOLL")); + } +} diff --git a/src/test/java/com/booleanuk/core/ItemTest.java b/src/test/java/com/booleanuk/core/ItemTest.java new file mode 100644 index 000000000..a4573d636 --- /dev/null +++ b/src/test/java/com/booleanuk/core/ItemTest.java @@ -0,0 +1,19 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ItemTest { + + @Test + public void checkBagelPriceTest() { + Item item = new Item("BGLP"); + Assertions.assertEquals(0.39F, item.checkBagelPrice()); + } + + @Test + public void checkBagelPriceOfNotBagelTest() { + Item item = new Item("COFW"); + Assertions.assertEquals(-1.0F, item.checkBagelPrice()); + } +} From fc4565ce143ec66c95bc5cc59252e51e3abb7e02 Mon Sep 17 00:00:00 2001 From: Jonas Finborud Nyman Date: Tue, 14 Jan 2025 14:47:20 +0100 Subject: [PATCH 2/3] Updated domain model, tests and refactored everything. Core Completed --- domain-model.md | 71 ++++++++-------- src/main/java/com/booleanuk/core/Bagel.java | 32 ++++++++ src/main/java/com/booleanuk/core/Basket.java | 82 +++++++++++++++++++ src/main/java/com/booleanuk/core/Coffee.java | 30 +++++++ src/main/java/com/booleanuk/core/Filling.java | 40 +++++++++ src/main/java/com/booleanuk/core/Item.java | 40 +++++++++ .../java/com/booleanuk/core/BagelTest.java | 43 ++++++++++ .../java/com/booleanuk/core/BasketTest.java | 44 +++++----- .../java/com/booleanuk/core/CoffeeTest.java | 42 ++++++++++ .../java/com/booleanuk/core/FillingTest.java | 42 ++++++++++ .../com/booleanuk/core/InventoryTest.java | 25 ------ .../java/com/booleanuk/core/ItemTest.java | 19 ----- 12 files changed, 409 insertions(+), 101 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Bagel.java create mode 100644 src/main/java/com/booleanuk/core/Basket.java create mode 100644 src/main/java/com/booleanuk/core/Coffee.java create mode 100644 src/main/java/com/booleanuk/core/Filling.java create mode 100644 src/main/java/com/booleanuk/core/Item.java create mode 100644 src/test/java/com/booleanuk/core/BagelTest.java create mode 100644 src/test/java/com/booleanuk/core/CoffeeTest.java create mode 100644 src/test/java/com/booleanuk/core/FillingTest.java delete mode 100644 src/test/java/com/booleanuk/core/InventoryTest.java delete mode 100644 src/test/java/com/booleanuk/core/ItemTest.java diff --git a/domain-model.md b/domain-model.md index b83a44f4d..82ea880cd 100644 --- a/domain-model.md +++ b/domain-model.md @@ -1,34 +1,41 @@ -| Class | Variables | Methods | Scenario | Output | -|-----------|------------------------------------------------|-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|-----------| -| Inventory | HashMap quanitityMap | int checkQuantity(String SKU) | Item exists in inventory catalog | quantity | -| | | | item does not exist in catalog | -1 | -| | HashMap priceMap | float checkPrice(String SKU) | Item exists in inventory catalog | price | -| | | | item does not exist in catalog | -1 | -| | | | | | -| | | | | | -| Basket | ArrayList items | boolean addBagel(String SKU) | Variant exists in catalog and inventory, and is added. Calls addFilling() | true | -| | int capacity | | variant does not exist, or quantity is 0, and can't be added | false | -| | | | basket is full and can't add the item. Calls basketIsFullMessage() | false | -| | | boolean removeBagel(String SKU) | variant exists in catalog and basket, and is removed | true | -| | | | variant does not exist in catalog or basket and can't be removed. Calls itemNotInBasketMessage() if not in basket | false | -| | | void basketIsFullMessage() | prints error message for user that basket is full | | -| | | boolean setCapacity(int capacity) | user wants to change the capacity to a reasonable amount | true | -| | | | user tries to change capacity to 0 or less | false | -| | | void itemNotInBasketMessage() | prints error message for user that item doesn't exist in their basket | | -| | | int calculateCost() | total amount to pay is requested | totalCost | -| | | void addFilling() | user is asked if they want filling, and user is shown fillings and prices. User chooses which filling they want. Filling is added to basket | | -| | | | user chooses to not have any filling. No filling is added to basket | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| Item | String SKU | float checkBagelPrice() | reads price of bagel | price | -| | String name | | Item is not a bagel | -1.0 | -| | Float price | | | | -| | String Variant | | | | -| | | | | | -| | | | | | +| Class | Variables | Methods | Scenario | Output | +|----------------------|------------------------------------------------------|-----------------------------------|---------------------------------------------------------------------------------------|-----------| +| Basket | ArrayList items | boolean addBagel(SKU SKU) | Variant exists in catalog and inventory, and is added. | true | +| | int capacity | | basket is full and can't add the item. Calls basketIsFullMessage() | false | +| | | | | | +| | | boolean removeBagel(SKU SKU) | variant exists in basket, and is removed | true | +| | | | variant does not exist in basket and can't be removed. Calls itemNotInBasketMessage() | false | +| | | void basketIsFullMessage() | prints error message for user that basket is full | | +| | | boolean setCapacity(int capacity) | user wants to change the capacity to a reasonable amount | true | +| | | | user tries to change capacity to 0 or less | false | +| | | int getCapacity() | returns capacity of basket | capacity | +| | | void itemNotInBasketMessage() | prints error message for user that item doesn't exist in their basket | | +| | | float calculateCost() | total amount to pay is requested | totalCost | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| Enum SKU | includes an enum variable for all variations of SKUs | | | | +| | | | | | +| | | | | | +| Item (abstract) | float price | float getPrice() | returns price of item | price | +| | String name | String getName() | returns name of item | name | +| | String variant | String getVariant() | returns variant of item | variant | +| | SKU SKU | enum getSKU() | returns SKU enum | SKU | +| | | | | | +| Bagel extends Item | | Bagel(SKU sku) | SKU refers to a bagel, and an instance is created | | +| | | | SKU does not refer to a bagel, and the instance is not created correctly | | +| Coffee extends Item | | Coffee(SKU sku) | SKU refers to a coffee, and an instance is created | | +| | | | SKU does not refer to a coffee, and the instance is not created correctly | | +| Filling extends Item | | Filling(SKU sku) | SKU refers to a filling, and an instance is created | | +| | | | SKU does not refer to a filling, and the instance is not created correctly | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java new file mode 100644 index 000000000..5116fc245 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -0,0 +1,32 @@ +package com.booleanuk.core; + +public class Bagel extends Item { + + public Bagel(SKU SKU) { + this.SKU = SKU; + switch (SKU) { + case BGLO: + this.price = 0.49F; + this.name = "Bagel"; + this.variant = "Onion"; + break; + case BGLP: + this.price = 0.39F; + this.name = "Bagel"; + this.variant = "Plain"; + break; + case BGLE: + this.price = 0.49F; + this.name = "Bagel"; + this.variant = "Everything"; + break; + case BGLS: + this.price = 0.49F; + this.name = "Bagel"; + this.variant = "Sesame"; + break; + } + } + + +} diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java new file mode 100644 index 000000000..220d013c1 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,82 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.Scanner; + +public class Basket { + ArrayList items; + protected int capacity = 20; + + public Basket() { + items = new ArrayList<>(); + } + + public boolean addItem(SKU sku) { + + // if no capacity, return false + if(items.size() >= capacity) { + basketIsFullMessage(); + return false; + } + + // add Bagel + if(sku == SKU.BGLE || sku == SKU.BGLO || sku == SKU.BGLP || sku == SKU.BGLS) { + items.add(new Bagel(sku)); + } + // add Coffee + else if (sku == SKU.COFB || sku == SKU.COFW || sku == SKU.COFC || sku == SKU.COFL) { + items.add(new Coffee(sku)); + } + // add Filling + else if(sku == SKU.FILB || sku == SKU.FILC || sku == SKU.FILE || + sku == SKU.FILH || sku == SKU.FILS || sku == SKU.FILX) { + items.add(new Filling(sku)); + } + // SKU not recognized, return false + else { + System.out.println("SKU doesn't exist in catalog."); + return false; + } + return true; + } + + boolean removeBagel(SKU SKU) { + for(int i = 0; i < items.size(); i++) { + if(items.get(i).SKU == SKU) { + items.remove(i); + return true; + } + } + itemNotInBasket(); + return false; + } + + public void basketIsFullMessage() { + System.out.println("Basket is full."); + } + + public void itemNotInBasket() { + System.out.println("Couldn't find that item in your basket."); + } + + public float calculateCost() { + float totalCost = 0F; + for(Item item : items) { + totalCost += item.getPrice(); + } + return totalCost; + } + + public boolean setCapacity(int capacity) { + if(capacity > 0) { + this.capacity = capacity; + return true; + } + System.out.println("Invalid capacity entered."); + return false; + } + + public int getCapacity() { + return this.capacity; + } +} diff --git a/src/main/java/com/booleanuk/core/Coffee.java b/src/main/java/com/booleanuk/core/Coffee.java new file mode 100644 index 000000000..694610ad0 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Coffee.java @@ -0,0 +1,30 @@ +package com.booleanuk.core; + +public class Coffee extends Item { + + public Coffee(SKU SKU) { + this.SKU = SKU; + switch (SKU) { + case COFB: + this.price = 0.99F; + this.name = "Coffee"; + this.variant = "Black"; + break; + case COFW: + this.price = 1.19F; + this.name = "Coffee"; + this.variant = "White"; + break; + case COFC: + this.price = 1.29F; + this.name = "Coffee"; + this.variant = "Capuccino"; + break; + case COFL: + this.price = 1.29F; + this.name = "Coffee"; + this.variant = "Latte"; + break; + } + } +} diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java new file mode 100644 index 000000000..582831857 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -0,0 +1,40 @@ +package com.booleanuk.core; + +public class Filling extends Item { + + public Filling(SKU SKU) { + this.SKU = SKU; + switch (SKU) { + case FILB: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Bacon"; + break; + case FILE: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Egg"; + break; + case FILC: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Cheese"; + break; + case FILX: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Cream Cheese"; + break; + case FILS: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Smoked Salmon"; + break; + case FILH: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Ham"; + break; + } + } +} diff --git a/src/main/java/com/booleanuk/core/Item.java b/src/main/java/com/booleanuk/core/Item.java new file mode 100644 index 000000000..8f229e8f7 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Item.java @@ -0,0 +1,40 @@ +package com.booleanuk.core; + +enum SKU { + BGLO, + BGLP, + BGLE, + BGLS, + COFB, + COFW, + COFC, + COFL, + FILB, + FILE, + FILC, + FILX, + FILS, + FILH +} +public abstract class Item { + protected SKU SKU; + protected float price; + protected String name; + protected String variant; + + public float getPrice() { + return price; + } + + public String getName() { + return name; + } + + String getVariant() { + return variant; + } + + SKU getSKU() { + return SKU; + } +} diff --git a/src/test/java/com/booleanuk/core/BagelTest.java b/src/test/java/com/booleanuk/core/BagelTest.java new file mode 100644 index 000000000..cc3dd2205 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BagelTest.java @@ -0,0 +1,43 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BagelTest { + + @Test + public void checkBagelPriceTest() { + Bagel bagel = new Bagel(SKU.BGLP); + Assertions.assertEquals(0.39F, bagel.getPrice()); + } + + @Test + public void checkWrongBagelPriceTest() { + Bagel bagel = new Bagel(SKU.BGLS); + Assertions.assertNotEquals(0.39F, bagel.getPrice()); + } + + @Test + public void checkBagelNameTest() { + Bagel bagel = new Bagel(SKU.BGLP); + Assertions.assertEquals("Bagel", bagel.getName()); + } + + @Test + public void checkWrongBagelNameTest() { + Bagel bagel = new Bagel(SKU.FILC); + Assertions.assertNotEquals("Bagel", bagel.getName()); + } + + @Test + public void checkBagelVariantTest() { + Bagel bagel = new Bagel(SKU.BGLP); + Assertions.assertEquals("Plain", bagel.getVariant()); + } + + @Test + public void checkWrongBagelVariantTest() { + Bagel bagel = new Bagel(SKU.BGLE); + Assertions.assertNotEquals("Plain", bagel.getVariant()); + } +} diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 68e2829f0..308e1b670 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -8,52 +8,46 @@ public class BasketTest { @Test public void addBagelCorrectlyTest() { Basket basket = new Basket(); - basket.addBagel(new Item("BGLP")); + basket.addItem(SKU.BGLP); Assertions.assertEquals(1, basket.items.size()); - Assertions.assertEquals("BGLP", basket.items.get(0)); + Assertions.assertEquals(SKU.BGLP, basket.items.getFirst().SKU); } @Test public void addBagelCorrectlyTest2() { Basket basket = new Basket(); - Assertions.assertTrue(basket.addBagel(new Item("BGLP"))); + Assertions.assertTrue(basket.addItem(SKU.BGLP)); } @Test public void addBagelIncorrectlyTest() { Basket basket = new Basket(); - basket.addBagel(new Item("BGLP")); + basket.addItem(SKU.BGLP); Assertions.assertEquals(1, basket.items.size()); - Assertions.assertNotEquals("BGLE", basket.items.get(0)); - } - - @Test - public void addBagelIncorrectlyTest2() { - Basket basket = new Basket(); - Assertions.assertFalse(basket.addBagel(new Item("COFL"))); + Assertions.assertNotEquals(SKU.BGLE, basket.items.getFirst().getSKU()); } @Test public void removeBagelCorrectlyTest() { Basket basket = new Basket(); - basket.addBagel(new Item("BGLP")); + basket.addItem(SKU.BGLP); Assertions.assertEquals(1, basket.items.size()); - Assertions.assertTrue(basket.removeBagel("BGLP")); + Assertions.assertTrue(basket.removeBagel(SKU.BGLP)); Assertions.assertEquals(0, basket.items.size()); } @Test public void removeBagelIncorrectlyTest() { Basket basket = new Basket(); - basket.addBagel(new Item("BGLP")); - Assertions.assertFalse(basket.removeBagel("BGLE")); + basket.addItem(SKU.BGLP); + Assertions.assertFalse(basket.removeBagel(SKU.BGLE)); } @Test public void removeBagelIncorrectlyTest2() { Basket basket = new Basket(); - basket.addBagel(new Item("BGLP")); - Assertions.assertFalse(basket.removeBagel("COFW")); + basket.addItem(SKU.BGLP); + Assertions.assertFalse(basket.removeBagel(SKU.COFW)); } @Test @@ -83,15 +77,15 @@ public void changeCapacityIncorrectlyTest2() { } @Test - public void changeCapacityIncorrectlyTest2() { + public void changeCapacityIncorrectlyTest3() { Basket basket = new Basket(); - Item item1 = new Item("BGLP"); - Item item2 = new Item("BGLO"); - Item item3 = new Item("COFW"); - basket.addBagel(item1); - basket.addBagel(item2); - basket.addBagel(item3); - float totalPrice = item1.checkBagelPrice() + item2.checkBagelPrice() + item3.checkBagelPrice(); + Bagel bagel1 = new Bagel(SKU.BGLP); + Bagel bagel2 = new Bagel(SKU.BGLO); + Coffee coffee = new Coffee(SKU.COFW); + basket.addItem(bagel1.SKU); + basket.addItem(bagel2.SKU); + basket.addItem(coffee.SKU); + float totalPrice = bagel1.getPrice() + bagel2.getPrice() + coffee.getPrice(); Assertions.assertEquals(totalPrice, basket.calculateCost()); } } diff --git a/src/test/java/com/booleanuk/core/CoffeeTest.java b/src/test/java/com/booleanuk/core/CoffeeTest.java new file mode 100644 index 000000000..cbb755f63 --- /dev/null +++ b/src/test/java/com/booleanuk/core/CoffeeTest.java @@ -0,0 +1,42 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class CoffeeTest { + @Test + public void checkCoffeePriceTest() { + Coffee coffee = new Coffee(SKU.COFB); + Assertions.assertEquals(0.99F, coffee.getPrice()); + } + + @Test + public void checkWrongCoffeePriceTest() { + Coffee coffee = new Coffee(SKU.COFW); + Assertions.assertNotEquals(0.99F, coffee.getPrice()); + } + + @Test + public void checkCoffeeNameTest() { + Coffee coffee = new Coffee(SKU.COFB); + Assertions.assertEquals("Coffee", coffee.getName()); + } + + @Test + public void checkWrongCoffeeNameTest() { + Coffee coffee = new Coffee(SKU.COFB); + Assertions.assertNotEquals("Bagel", coffee.getName()); + } + + @Test + public void checkCoffeeVariantTest() { + Coffee coffee = new Coffee(SKU.COFW); + Assertions.assertEquals("White", coffee.getVariant()); + } + + @Test + public void checkWrongCoffeeVariantTest() { + Coffee coffee = new Coffee(SKU.COFW); + Assertions.assertNotEquals("Black", coffee.getVariant()); + } +} diff --git a/src/test/java/com/booleanuk/core/FillingTest.java b/src/test/java/com/booleanuk/core/FillingTest.java new file mode 100644 index 000000000..6463bc3d0 --- /dev/null +++ b/src/test/java/com/booleanuk/core/FillingTest.java @@ -0,0 +1,42 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class FillingTest { + @Test + public void checkFillingPriceTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertEquals(0.12F, filling.getPrice()); + } + + @Test + public void checkWrongFillingPriceTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertNotEquals(0.99F, filling.getPrice()); + } + + @Test + public void checkFillingNameTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertEquals("Filling", filling.getName()); + } + + @Test + public void checkWrongFillingNameTest() { + Filling filling = new Filling(SKU.FILC); + Assertions.assertNotEquals("Bagel", filling.getName()); + } + + @Test + public void checkFillingVariantTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertEquals("Bacon", filling.getVariant()); + } + + @Test + public void checkWrongFillingVariantTest() { + Filling filling = new Filling(SKU.FILH); + Assertions.assertNotEquals("Bacon", filling.getVariant()); + } +} diff --git a/src/test/java/com/booleanuk/core/InventoryTest.java b/src/test/java/com/booleanuk/core/InventoryTest.java deleted file mode 100644 index e157488a5..000000000 --- a/src/test/java/com/booleanuk/core/InventoryTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.booleanuk.core; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class InventoryTest { - - @Test - public void checkPriceTest() { - Inventory inventory = new Inventory(); - Assertions.assertEquals(0.39F, inventory.checkPrice("BGLP")); - } - - @Test - public void checkPriceTest2() { - Inventory inventory = new Inventory(); - Assertions.assertNotEquals(0.6F, inventory.checkPrice("BGLP")); - } - - @Test - public void checkPriceTest3() { - Inventory inventory = new Inventory(); - Assertions.assertEquals(-1, inventory.checkPrice("OOLL")); - } -} diff --git a/src/test/java/com/booleanuk/core/ItemTest.java b/src/test/java/com/booleanuk/core/ItemTest.java deleted file mode 100644 index a4573d636..000000000 --- a/src/test/java/com/booleanuk/core/ItemTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.booleanuk.core; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class ItemTest { - - @Test - public void checkBagelPriceTest() { - Item item = new Item("BGLP"); - Assertions.assertEquals(0.39F, item.checkBagelPrice()); - } - - @Test - public void checkBagelPriceOfNotBagelTest() { - Item item = new Item("COFW"); - Assertions.assertEquals(-1.0F, item.checkBagelPrice()); - } -} From 9798d2a042a0f7da5617216fdbcccaf628d5584b Mon Sep 17 00:00:00 2001 From: Jonas Finborud Nyman Date: Tue, 14 Jan 2025 21:30:33 +0100 Subject: [PATCH 3/3] Completed Extension 1 & 2. Added class diagram and updated domain-model/tests --- domain-model.md | 78 ++++---- src/BobsBagelsClassDiagram.png | Bin 0 -> 118924 bytes .../java/com/booleanuk/extension/Bagel.java | 32 +++ .../java/com/booleanuk/extension/Basket.java | 187 ++++++++++++++++++ .../java/com/booleanuk/extension/Coffee.java | 30 +++ .../java/com/booleanuk/extension/Filling.java | 40 ++++ .../java/com/booleanuk/extension/Item.java | 24 +++ .../java/com/booleanuk/extension/SKU.java | 18 ++ .../com/booleanuk/extension/BagelTest.java | 43 ++++ .../com/booleanuk/extension/BasketTest.java | 115 +++++++++++ .../com/booleanuk/extension/CoffeeTest.java | 42 ++++ .../com/booleanuk/extension/FillingTest.java | 42 ++++ 12 files changed, 612 insertions(+), 39 deletions(-) create mode 100644 src/BobsBagelsClassDiagram.png create mode 100644 src/main/java/com/booleanuk/extension/Bagel.java create mode 100644 src/main/java/com/booleanuk/extension/Basket.java create mode 100644 src/main/java/com/booleanuk/extension/Coffee.java create mode 100644 src/main/java/com/booleanuk/extension/Filling.java create mode 100644 src/main/java/com/booleanuk/extension/Item.java create mode 100644 src/main/java/com/booleanuk/extension/SKU.java create mode 100644 src/test/java/com/booleanuk/extension/BagelTest.java create mode 100644 src/test/java/com/booleanuk/extension/BasketTest.java create mode 100644 src/test/java/com/booleanuk/extension/CoffeeTest.java create mode 100644 src/test/java/com/booleanuk/extension/FillingTest.java diff --git a/domain-model.md b/domain-model.md index 82ea880cd..f677660f5 100644 --- a/domain-model.md +++ b/domain-model.md @@ -1,41 +1,41 @@ -| Class | Variables | Methods | Scenario | Output | -|----------------------|------------------------------------------------------|-----------------------------------|---------------------------------------------------------------------------------------|-----------| -| Basket | ArrayList items | boolean addBagel(SKU SKU) | Variant exists in catalog and inventory, and is added. | true | -| | int capacity | | basket is full and can't add the item. Calls basketIsFullMessage() | false | -| | | | | | -| | | boolean removeBagel(SKU SKU) | variant exists in basket, and is removed | true | -| | | | variant does not exist in basket and can't be removed. Calls itemNotInBasketMessage() | false | -| | | void basketIsFullMessage() | prints error message for user that basket is full | | -| | | boolean setCapacity(int capacity) | user wants to change the capacity to a reasonable amount | true | -| | | | user tries to change capacity to 0 or less | false | -| | | int getCapacity() | returns capacity of basket | capacity | -| | | void itemNotInBasketMessage() | prints error message for user that item doesn't exist in their basket | | -| | | float calculateCost() | total amount to pay is requested | totalCost | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| Enum SKU | includes an enum variable for all variations of SKUs | | | | -| | | | | | -| | | | | | -| Item (abstract) | float price | float getPrice() | returns price of item | price | -| | String name | String getName() | returns name of item | name | -| | String variant | String getVariant() | returns variant of item | variant | -| | SKU SKU | enum getSKU() | returns SKU enum | SKU | -| | | | | | -| Bagel extends Item | | Bagel(SKU sku) | SKU refers to a bagel, and an instance is created | | -| | | | SKU does not refer to a bagel, and the instance is not created correctly | | -| Coffee extends Item | | Coffee(SKU sku) | SKU refers to a coffee, and an instance is created | | -| | | | SKU does not refer to a coffee, and the instance is not created correctly | | -| Filling extends Item | | Filling(SKU sku) | SKU refers to a filling, and an instance is created | | -| | | | SKU does not refer to a filling, and the instance is not created correctly | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | -| | | | | | +| Class | Variables | Methods | Scenario | Output | +|----------------------|------------------------------------------------------|-----------------------------------|-------------------------------------------------------------------------------------------------------------------|-----------| +| Basket | ArrayList items | boolean addItem(SKU SKU) | Variant exists in catalog and inventory, and is added. | true | +| | int capacity | | basket is full and can't add the item. Calls basketIsFullMessage() | false | +| | HashMap quantityMap | | | | +| | | boolean removeItem(SKU SKU) | variant exists in basket, and is removed | true | +| | | | variant does not exist in basket and can't be removed. Calls itemNotInBasketMessage() | false | +| | | void basketIsFullMessage() | prints error message for user that basket is full | | +| | | boolean setCapacity(int capacity) | user wants to change the capacity to a reasonable amount | true | +| | | | user tries to change capacity to 0 or less | false | +| | | int getCapacity() | returns capacity of basket | capacity | +| | | void itemNotInBasketMessage() | prints error message for user that item doesn't exist in their basket | | +| | | float calculateCost() | total amount to pay is requested | totalCost | +| | | StringBuilder getReceipt() | iterates through items and calculates potential discounts. Important information is appended to StringBuilder obj | receipt | +| | | | | | +| | | | | | +| | | | | | +| Enum SKU | includes an enum variable for all variations of SKUs | | | | +| | | | | | +| | | | | | +| Item (abstract) | float price | float getPrice() | returns price of item | price | +| | String name | String getName() | returns name of item | name | +| | String variant | String getVariant() | returns variant of item | variant | +| | SKU SKU | enum getSKU() | returns SKU enum | SKU | +| | | | | | +| Bagel extends Item | | Bagel(SKU sku) | SKU refers to a bagel, and an instance is created | | +| | | | SKU does not refer to a bagel, and the instance is not created correctly | | +| Coffee extends Item | | Coffee(SKU sku) | SKU refers to a coffee, and an instance is created | | +| | | | SKU does not refer to a coffee, and the instance is not created correctly | | +| Filling extends Item | | Filling(SKU sku) | SKU refers to a filling, and an instance is created | | +| | | | SKU does not refer to a filling, and the instance is not created correctly | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | +| | | | | | diff --git a/src/BobsBagelsClassDiagram.png b/src/BobsBagelsClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8e2c99a254c2f0c28740e1383b05b4283381f33d GIT binary patch literal 118924 zcmeFZ2T)Y))-?zi2#SD!A~_?HB?(AS6hxAO5}P1M&Y?jZ~mF7nwq&)R-2l0&Xe|DYwfj9$Q=!3ax!`{0s;bZ zm0LHo2ndLg1O!9@BqzbYy!;e;2!11U(^9@p0PkU3Bp_fVP`PpK-Xr5BlxG?QT95nD zYriTxg0ffDyhTDu5=c+<+2`(8qD0q89wa6wF(n&>25=PM10UAHSzS@Pz6(xaiIQaJ{2jvO?yW{|EP0 zU=<@&f(OsF_WuvYbcT`@;;9h5$o`)vK*5?Q5c6usMeIL+_3<$+V7^|F zQvP>p|2wt+-L>GX{5K$g*z(_iK=j{O3o_z=)7XCl!V!M>Z$S8OK)^%U{|1Errvm~9 zvr+%RC0dlgXACx?T1e(6gQE-~vgvoZ%)@4wWdy&q#0g;ee6Z08rIw28q0vgnRb#3uq`7&g*s~+5r0|dwk|e9SauIS?KRrwGkB>$rpiu2-?iD%qotPKn z$gNk^AD4SXH`(tf>F;@ku0$q{c*0I-vCdN`u43|p-=&2(CX5o)Rf!{ zKcAajLt!1OA`((+dzeFol#~wq6Op4#1_V-K@V;`9)2eOx8}XEDM=Qhn`GmW;NAcA= zu61cCA{?J(RB?Y~!|Zsf7R0WzS>6$Ca@9srRqV;p-5$Fg&oUC+sVekxHJrTLvnVEe z^G~ZzVu+v9+go=H5}{q>3<_`)E5c@+efVRL2ZF_`_*qEj(Hhmj5mZex?84w$43p)0{HgcbP}(HCBoYWCahVI7tFyftGdU{tLT5Mjx<`Cz-(q*p=)$ zO=L)@`)&wB=E^{CGHJ4_!6&tvD?SYmKXJBI!j*P*Hxn&H zq=H9!2}oVrCIdQ@({i=zA9iz72>y`WOaG^F6bwkt3MKGyFAJfJBl!#Vo7AY}hZrVz z^-c}Q5pjTnA8G%A`454CfQVWdKQRU%Jb-gf#YcIo+VKR+1-?M2osU7x>S~OdY^tX4 z^Y*(;odsEn4_eQ(hWsSpYBFfs&pTVBzSYR>6y2rXmhd5;t{;j@9XDFDbbG^J0O7hX z>tKm|)eL1)_xEpincKGXOq812f|?|m$7Gw$BI*LVt$os0WJhOX&S)0fFBHZSza2`d z7=+fAS-(k36!%n6$LTd*a}@L!HM3K1r6d8dSyoSEQ~3|^igGv=KQjx||7#$Au!;8| zA3x*f#2xlj&E$M4`ZV3Va)=ku8@1D^Vh)cNk z6pHa=F4nd69_yAWw6k&dY?t+Ux^3rrzMc2NK+Z)$^{K2Z3oFkTHHW$kRh`EM?bs`a z+)qC-1+giB*4+OOt4;8vo)=_?0J)>!1x`xKGmO`}c30yeIaigQh8U_?)?&%T6mcYU z;N{+%3s!AUU#q~byBwr5ZmX}s$JPAMOf=@;M~ddmO2_?U&Dch9hs5CA3|8gbbIGjx?@*Z=q|K|B3@*(->=9}7 zd9-EV<-XNACk=hQ7fF`bmNnx`on>NzxIR>&d&&;3ydY#e#%~}AjG@0x*X1Fn5<8VD(liDQH_c0{3 z_SX1RJj;r&VTRK%XK{}dIuO-6=oH7$iC!qfiHi2dc!fxnW_bl)sGsnk*`<2(%vI?V z{~~Q9>DSda`+c7K&95P%_kH~!p>=l}Z4}0MUTcaH`gpt73DxmHB8LrAB1SHP`R3qO zKf-mtD;$8SuR1Z!a3?4o7uN=t$NoQG*tZe;GVO|yX414A#!^Km*qv2 zCmeYbJ1gtk+OUt`wrOab2Z?u=NdfnV;P&MES$rBb{`;9uOA6F!9Qc`ia<92+^<*hF zi9`D7K~+U&yXK_{%=D{0rg#HR;=Gy8xM7;)=qQ^*-8?TOD|qI^io%*T)V^Xj%{s#C z=Ie&47By;|>wtv*M9ByeP7CL``SH+vsTO%0g9zGlBWIYcopsuj!WErR?zkzno-;O` zu(o0;YS4g_km6P;H9Onwy~5+@o8l~MwrVYHnFr=AJ*E67#{Erp7e0ayB!8b@VMw(j z)F96l=hgn>G9R02B~&~GimdV!57B5nOy>>mAXKS2iwRx3U{j7-TDgoV#XR@qgCLm_ zUY~1^kKIgs)?SnKzNTVPWUQ8cR=IW}HeSG@!Dh08oP5yEdyGp`LO*5PD7U^*!tn=_ zk5#{xl#rdHf;c;b;(16qr7#F3<0OBKnUkD&$X0O#*+QPvl5j$hJwklaNAcTG1sy7xT z>)@(5f|=Xma44*ii=k`;u{_=9PXSVawGMzQhy3$@2a{}aok-)M|knY->FQY8Ef-najowQ z_0410&v5P*7)JWI zkG5MfZQpmGU1J$DHtWVdug_jgN+(h~<&?+m@aF(>i9<0P;d?;Zm8TSBgG|% z|5geogA8UiVJ)7U4k;icq3>tx`cyyIC@-PWv@;Vn(2Q9pbzv$E=8cJ1CotI6MwP!qVkht~hma8c_L(?@m2`hR8W;sXC9uUy8oG$&(%;XxF;kfbBP5jd&As|-XWC3DhS zzX>!yH>AQNz_P~f2>qRfl*o{^^^R{AZ4z};D?4HL3)Cqc9A0SWCYAUan?+p6fwR?W z;0~2k-(0;@@k#BY96m~03&!(RHQJvs1dtRtBM?(VIub)iYwnl(YCot)+O5k_V0O+5 zq->C8Vp(VfMFyIRorKWbFLjiy@*rqe%r0JPE;K?j=Z-~-i|BSYYyB$9MexO z>-Jve`ms25HoD5NW46>mNXfovk&fs+nXv2s90dJuvo;0JXBZho>O*bi`ts^pCS7Gb z9eYK3qc-c|ZAd6%QXHQMJim{A+WI%!=ZOd{NJdW*k52UweRfV$;0(m{4mri4!{s3s ze|rJG6ebEu+cD|N<1fBR_5qPKW2e8@Ch2;<10*INhCK1#T%FJmAHqyI|C#<#_Dmvx z@M5$`=Jm#<;6@E(>WBBuI`%17$OSxC9cF*Y!o17IewKw+pffZgT3gg|^z-HL-{tmU zKqVamxQ;gck^b=Y$`j`^NFnrQR^6c1N_9#CfXh@NZu87zl%C+3_x;_& zDT0R^bGG}5`~TW0B(2T|lH!=zh)_=^T|WG}_$agTaNpJGZggKwODp?bdHyso8dOc@ zf{*`2$SETxcR`SC=L;YE;GlEEQW2!2PsU%J+J)>G<)CG{6@Vw1ge!r*HgrYkzb0Ze@Wq5-o9*Ywk0U^na3k)-5O0@f(+FVXIJv+?6-%mb6_(qM0!UjlnLw@xhL z*Yp#1{joEQ#`=JQ?VnG~KO`)Y+koa?6!iFwEcfXeo;E%Ft%mpHC5VdwQ)X7b#!OR2 ze8^Pb{{PeMn7z2<|B{V9)MU*@qcAfQZwDJRjK#fPrNzmqufQQ(t5qvxsXgc@|L6P4 zJ$`Fjb6PdI8x?nrwhBO)0;n^#g+fHh>t$B68IqumGtQT=7kZ)?BNSVqi`O%Za z1v@83_S!txDB^o%Y-ist7vDtZNq;h20|rjHQx7?sv7*$Fdx zA|Z8wggi`R-0G^Y-IqKTj5Dloj77aQxL}8LabQOInd)oQ03R|D9tB+<%$9m~EQ0M1 zUbDbtJXt>RZ)z=AoygbD2jyYOmZ5tRo>dSAGlHu_lUsUK@+mUV*XJ+cg?h$x9e$xN zPBDPm({=MQI-j0I91B%D|La-o!f)@3bpIMIv2A=irjrQT{oO4c8IP>EMhLkh-MP5bg8Q znjn)Q_2EzwvZ!T%k3kwU^W?4gnvQDCDrM)_k=<|rM;u1gLqln+kQ{~x`dLZw%oJYK zLDeBQeVIf}?M(NamcCBS?YG{eUD6n74uwL#x4rLHD^_Cs(Yxp06=v8CUwjdpM<*GH z{ZOC`@e)%1Qymj{(*P1}_7iBPe<$D*^^+PWGjq)k$ zPy-yas3Pvi8D~>3-4#r%8_*I&kN=P~X@b9BF5h;yaq(0&P^j+dW`F5sxdS4IP@RrRIDMCE_$k{d~Ak!_j^?uXb@_O#Lu5a3#JnUt~#Mb39q}+k& z{8-l3duMT^oGm#^rbnoh&Yqv7T``5L=2^J%L>{N?FX--xGthXdUOf%O1aKH+=NyU8 zsP&TVy22V)?>T-vSgb=MI!_*i417@Ec`+NRvX^=)Wq~5ZUvk=A>S|6?SWIorem5Hx zg(`29PiUk##nOQ?-N~$s^Qrujno?@EJ~A^AMyn@X+aAMK_zf<3_u4PoM^Q`4E$`Jw ze3oI)Q4k#2MBc6Fyhg$*ECNmxj}p^TU8rf^GvsQr#mClL#`d9wHU(nutNi9Lo7i^Z zHh*=wzOe6yFx0#&2JYF_TlCUExk|`soF6UdgWBH@>(Y0%dmkOc%;cohu!rk0n3fUc zzLxR!K-W+a3#;bs#<{IsuaVwjb*X{O?Hy)xP{6t&ayIfc5}wgJ6Z_f+CwEpdR`oC` z;+J5>7J0trtp#%ygyaR#I=`CUg!GCyTCo z{!)l)8)s;qZ!=kxi5Z=fFM@D278$M94)t$L19@NVJ9=s*X7BCL_NZan<&PWY-o8PF zjs{XGzoi;Bd7W%16h-+r-jiRpN{y zbG%e*xOaSoxD1k04q3F&yY$$8nc~4AW`*^7aqtBHZ324`3*x|hE_aW0L=?QH4m@&Xn3@L|jddUV5Qw`u0;yIeIE4U=9U+fS!QhV_N= z?Dx$xji5L7bU){YX5i2#ci<*JwZ^<&ufixFW!+dv#WXGY)bY_0+I@^Fp^mBJG7fU^ zi4YTQCqKtE*A@z*+Xljs;~6FuNEPGVy<0n;DkTRcO6&8jIc+T88pJrz2a>S%@1N67 zl-5?E>Y_aFxMn1m`c*p{nKah|A@bg4dHWz>1waqwSdCT@%r!ZG@+wwn!QK&k;Verd8*#Jg0zlf)y7Q(j zP`>AfFM&>0jukql;J$%~IKKMBdxp4nLIPc&6LnSZmLsh3#9r+o4>Lb2MY%zMQ2?}C zNWwAR?zRa-UmWdzBT7p!(ZT0#Ar)#jX5udemxAGHBn{kf`Q#`us@Pv1NIklaUGiTF zNBn#~)@ET^DXPdNchS;4w%W*ys&5Qk;!1~r@>YMN}(JX%9S3kz=*n=?A;wzFoEEnC*mUWA*A?%xOFxJ3@w5z(bA zlV3f3C_4lPQoGx>N%rQ0yRI4ds!hzcdoq2dU~)g{+)WwWW3&O!A+iE9+Y`D)9M?xS zP-JnZAwgWXA=N+s;RntnSOrd+2$C1#Ut=@&IB^R|Cdw%{xug7!pH0~Fh6qN+MFg#QjT0X~+Gn288}(UBnsx>>Rb8jx;VQ5fwo6a|&yLT6Pf4 zsr<16mt5DV7NQ=1F|o7IWcLnMc}?x$La_kix!Y(`o077 z5V;Vkxx@Swn{{>aaS&k+#~R7`>K6Qs5SnGRs>Z9jh6N{g*A$i9>lUQnc?&JbZauJj zw%GD)WPN5P>_W^rCZT%c$TzPv{0p`UX^$`Ll%ws&-p;fmdS{)~#~ilBUXdP8!&6Z& z>>0oi8jx=0vC4tpam*Jm&L|urh%BeL+mI7+=%u5UwZmL4aUi(3S>3(mg#*>Etyc}F zh<%dnRcxanQa1kjNojTsd4=k@<*b1joHf#?v^1w{|55p*x9~v;ydUS|UEO?w8s1uy z65OO<-DhXM~cFJUVOof zAwc7_v73_bzXkPpkBp9(4xLR0#f+yztMSER6p=;2D0^C<>pB9sc-qE4*t?w}UmY-?vbeh@AF!FYpKHss z#I|*(ssmuCS)kwER&>fE9e~atB0db1yu>NGW3H8H_`hY_4|a%;p^m+%Ipik@6!eEm zb&EeTtB|)|CIMZ8`?(yQ7w43ST9v*oc$OmOu5@_Rk)Y35HcgAVbQZzqn$x^W3fd@OV+ zuxrnVmohw~o@{1p*=K6dyJxU|M!&zj1)^ zpo`i?PL3B!x%!UY(~r^N53f(>t{(oPFQhr>CrF_#dku)NF`zgK@_n3Oq~RHj9?9&( z3A+(q^ze_jB2~71AbHM!Gf-V*us#U`? z`?um5ts1D6==GQVr|QAr0YlsId~ukn*vPZtqhTU!IHu!ZJj7sY@Q56VeO8@$A9kgw zpT0(Jn0^(puCh2VyS?#d?&ej#K9irt6vqZPC2BbFSfoO;D=y+hDelfz=X1#va}OX5 zsJ&Ud_=_|U7>;KxIqVP?#(sH7W0h@%5F@hQ>7oxxZLeq&Q}4rED6g{~LONEoZ1vGZ zBs&{Qc8@%;$l2)FtYoUHdQ=fbTw{!m+4bS2q#I?cvt!0$@<^)LNKKiKf#X}c#Uj_R z6l4)m9T^f*J_BV91REe@a(_kg+7$C0)Osl}t5qK=wEu7gnR{K~pkrAmwX@1Ece2d5 zwnCpGMVw%zk-HXaI^M`6tI@I~Dr(hUDUEfJY(e z&1e6Dfr)bhwCT}J^1}TDhDhB(X9Y!DyOgm;$;6In@yw*?$wR}J1I@U+hO1FNQOVD~ z&dCay>nX_#NlgTP9X&+F7x+#h8oqw-L}9{G9q|ZMuvgy{zW7%aQdGWbC}1#A5-tcU z>P@NA@sGI0E0#?I9kA<5Bw;Svd8FWPzg-Pt6FXiG$?C9?rUqMMuTgCNswiKlsoiUe z9MPdkM22U++kz*utgI(NpHv@q*gffA6o75FU9H&-cQxN(IEJt+`oY{bx-irjxq%j! zOl;)cWumvQmP_&Tg{=`3O*JT&n?LqDPW>PikSi_4jEz=&F z#dw3qYo%5Sx@3p+0^IYGJj*meVy^jAsu}60MlH|*joC}oyFrM>PC{vet2`1a%!LLV zpz7TtW^l_(O*kKvCWrQJLeH&4Gjy6rmhmlkJhXkq&nK-@H^p?Bktzpv7SPT z`H3^o)hLi1gTo zuLQ=VG)dMC7MqSoMnkheN9a1`e*h@P`F{6@yON%Dwhfs@%YQM4xg1d#m0DtOP5t+a zfC9$g4A(;zPK6$(Vx36EFF4@WP_I=jRQF_rQ^T-d!s#Yy`#f%lm1R0LYwo9VydWK)#pd;0IX~>^JQ`WoF$w5j~x+{+^ zY4lUbZRqiw7Vjt9D#34Q0(tA7ao7}3Xme17|XvIK7v2B5v zD(SY9z6h!7qua0a?D{cr*xeG7yb^hr>465LB8B|7=&qAGNiSv2h_6L}tV*Gk;`|zz znP%c)`OXJ+`flB)9D!|!)B?(T4pk^@kSC2?RZ6G5nWv9j1~v>=!}oVBgAx>S6{;Gx zC^UKL+&TB1-}~Th>xuSlWagrF{W6&|+3<{@QPpG}wzb%4FE1!P8ukI{01PsTR6BOl z=geQ?R=&%BvMnyHz5iFa^I`M0VTbOn+Lx($E}kSXQ(g?|Ov+>ZiKGGBZF; z+t}HP4%$61*`{}pFHB@}w~61|?7BB?!j~@4W?*TRpR#9&Q9W^fwkt7oWr(n><;H|b ztF`xyYB_rGh@TGBf1zrh@TlUX5l>Y!>;Y5wF{xFH21m@gp0btrm7I!3hx zirNiM^M>zN(}+TA{1+ztA6Chk4)Ll--V%r_UwBkDRON`6s|@-oKPpQ5=w;PM7RwA9 zr3i{D2aK(l9Tam>9C#3fchOacIlT`QvDb=sh_xex?UIyhv${m2b83Q`cH1g&qboxJ zPMAp#|6{Upan44ONSlq`t~7z2cf6L}E|`=q>)KFH^*&+af#$u)1_t;UdISb$9{w6* zatys>S;OiESE-(E+)l$@20DgiT122uJPR>`LRm>r7bQjX4RKj) zjBcPQ5QS=H_rd_A7SYba*k6@)sPj8-faV!eH3ibo`YMIEwYz7^>Rlt9*YK*Aur7bg z-a_fWl^_`QrUZE=RD#jY-;NWvifIs*jK-qS%TQG>-7-A1F!X2;U%H6v-%!MfvB2ks(pkDrQABSc&)$jz%;~Nf%de!u^eSGH z@8gE7%8*yxq`y_&P`E%R#bej=I9ewl-l956w9gsUXarmE(fZ^rN)J&E^L*qz$iPjd?X0B(<4nLFi*6l{CyijVadBR6+wPqfXhG&~)InHSaw%tp z9+1ycM^3umn1JT+og_yVO}o#aETm4|Kw91R37;oUy(AZ9GbtX{5B++|Onc_=n|PM$ zvC~!L_X8AKpy`BPr_x}vXi)*UqkhWm$!`^FrdZ{Z5Abk3w(8a#_rugE9gdGce+8=%ld0=J z!%$PS7ol7&_oY-w=VOD+tgsZHTf)o-&g4~L7_WkIhCINh3+0Qu?3qDRRV&`g36k~_ z$U@b|1+mrjvu-m{alB_&LnZbWNH&0#uMHHxVUEuaxp!4%BTo(=Y#|ft9ed=v%8Ssd zL(lgn3(MtT5YmV>4+4#5uB8@*n8}MO_g%vMAP} zp`SesJU5ds-)A{1FN3iM)VH7KHS?R^p$d$_%FyoIVXJkmbg2=GJLaNIIzoIHaG>{Y zIP6Rj?^p4(${|Pw%%2JF;q@_2jl+3 zq&tNVlo&2&uMsoU$R#b}O9g-NIZK+C;?0mTQeYdBz;XpVYxh!w*Z8??`T|``qXDtA z!)8YblC;oCyzSK~aCWrvl2_@+X`X8}gkoKYq3 zv@5eD?z_7uJ&H0o!^$rsYI$D0TF$au>^ENOFc1u3an6Uqc#?JHUiHe^M5oaEc47#4 z#ct{-)>Zf8Uakmv?y8WKMnZ0U60~1DY3QX?oXsTgPIW(bOmD_oHZEE~H?YM3WX77u z5Yg}08)cpxrYAAvs36v^=JkIE5wY>d`ykaVoZ6nW*I3rC;=w18dpf=DF^JKNp>N2k zQ-6B_M*Xzh%hOV&TEmj|pv&H(23@1><%p9*w6aB(WX48i#>xZwW7aL$$gzT(%AYaM z_kpD*I#UO}R958EV8+*^UyoCNyyvcMRKj78JK|1?|15 zQ@`;ta_p`8V|f`iRS->7UgWhd1!ID8o7!x!b^ z#rlNwwFibd$%5#&4z+o$<0gocOYhrvVlKq?S&YW@^-mq@~AH3E~e$>S@@V+Yd_hqlWm%bCvXXPF@2K)2`$Fka4llb zC1G`-ABy4KMT9F}`fjs$l}W8E2pU&i&ph&Z(0ZuX@704?scZR@yY=@AZsu(a_35(2 z@hG<@d!(X_)|A}dkp3vT+XfWSp?mKPr7^^6R%jDNWlN@5!1Wx-1A2Qi&VO%%I;blD zu)E{uyL(S1G*lepV|NiQ#At2p@6|)Jp7k_hWeXjYdI?2_46Z#8FF``h_JT3qVG#|D zVpb+)LvP{B(!(k5q|Y9}n{zBbJ-L{ungQRt?nrt$iSF$gyzkG-vPS~5W`OB9ur&xuSrQ|yf0_p`Ef;G>73$s*4k zE`nuUA^%PC&N?cLQXLhZnsuJMD4p*N-+9sPzHp#iKIY9%k9Uw<2Tl_T!bn9bg(gC9 z+cOt08{PO9ga@Agi7;qVsd{C4e|zE#M{}vbLo_*p z$Em$(Ljmjus(@#fep7M!bq>zr>x=p9Kj+}ZWB6)=SkVm->euFj)UOr0ICkFbBLQ2G z@+COnkMAsjSB{*)n+~ie7bSk#nQEqZ(?O`>Z##D=Z}K$dZM?$*V|ApHHU84pzYm?hk1AkZ1=R$isQ~2_%dSZeLkR5wPwVz&} zN6s_x>#7@H%rR1To%)m)AlC|tcRR)7$1IEtE3Vf0IP|r;;jIwDc+00bmufATuOrR= zuCn*fMz4Q1N<<&oYsJAfRyZBNy&H@P&Y@|O{n(nq2fXZ9QU*BA@zbKKv#VcbB2n|> zR8_DGh`~T*UbeYY{qr{YWpjw&d-Z(E1&oZVeEaY6bzag9K`bWVYj$%&2_Wpn z&@&133no_A8^6IUN6AY%Ce&VdPJXbE;C3-P6P&H$W2>^qM&aYMOUyLfiGk*Cgl zPJ>yv+Lzimd1|KaS8j@mo~WxZS;;^zu8v)mU292q>Rk8JAT%M7!CS{9@Z&#y+YK!K z1F#RMbnYO)g#FvLrNX^F!*>{+}BR!I8WyBcf{g(dss+iBstKb2e_AdQoP6R{c&xZI#hb<^9gC zK(*xbD6Z}mL27Gx?Z#^wz$z=xf93k;Z0d)qx&ih}`LTidbR+UMrKDM&9#w7F9KMG} zd-9QupbVXy8YMtppI(Y6(z{c zRP|y1YnyUwE`}Ap4xOjul4kPtc3QebEtIb3Ue&8m^7|2aXzk;@B0uC5mD-7BT+?8@ z1i+v<Ja4jc_1v$t)I2KQJ4M0IxMr;>o0q756JfT%7)fZ z)oMcO8ihE=+u|{555po^G3;^BC5x#0SrL2Jduxe29qQ_^NH+3$#MI+&H#VNhfx4;w z3TP1lsVTCShC5h{%N zIu1!`oy~MqdWJRx{)=1Qu)ALmhKyX5=J@-mzJbaGX%}t+Vhiuxt%;CmL~Mxfl*2sR zfU?N>-MCX@=Tn4kc&1~dx{SX2#sMf$x(;sYcJ=DHp@QUHfh+8Z2$l2oYB^p(N3|tu z(6ZTV_%gRv=J6R2E+2mo{I`9FpVDg3d^OetKr`jtmYK0r5qK5+!YlauvWmr9OSq)+ zM$#dnafELhnI1EMM>*HHBL&P#wr+RCpp?Zua$tpWW@z$rVkCxeawZu2uE zj<}MY9I5%_H{(TpPG zYFn(oqInw9zh;bqgRY~>LHQD7=AszJJ58M3$iEU47^T>An$#Ff7&8T*xx9(Fkj~2d zBSrWiV2G?HZ(C0#B!a<3z!lW=f&t^2uk-47;0l0`=*M~ua;NaAOi*jY8G=fO{@%_l zMwp-cy=rC_TG6jJiR?_69Q;4!$|rl^eQcJ%$3~}22(+3XckfPL?05sP2;?~8Y6gK| zyt6C;r^oN~o%?uw#}WJt@RKKukwsp<_6{fU#e4F7AO%3z-1W^e;oc~g@OZToF z#U&2<({9wjX;jwuotem`uBxw;)*~7^#6Z)z)id;sv;9ND4>=CG&kF3_T$*?E^J{`ex}Q1&aJEZ8H<>f&JJT8+J z(4U7?Sy^Uqor>X()USrmZ-Y2A+XVWc#C<{IQ(CN)at0jtIZTYgg9AdL6Lvs_pK20h zOO6(Vhlpf}2|Q)}bdUZo#w&s+ukh%wS|$ygr%rdrAx2SyT8AicWFx2;J0`nU-@}&Q zhB@W&Yb3L?l&{3R*es-SOvgNlnV$U;cHtOMHCYcfLp^7K7pkGNbO?fES$Mvo>Uu7z ze=&09P|r^X`^u>i-w?80t_^JGZ$~u!aZ80|7T;Jw`P3^T6&f+~fxG?KeY+XZ(??iT z1LxTbY7mR6y47G^9KW4!?bZ-I^pvF|$ys)|HuC@cs7S#1Fu;WMsIvM;-agw63=IuYLWK zg7_SK0-uAwL{9)LA~Cu3v&zZ}0Lw#=#O`gCw{Lam-u8o(lJ>`DPdxjT&|(bb$H|a9AGwpM9WnNC;ptf5TrAK` z?R?e5GIV#I{@==?^e#X@!^dMFEpWNOtryo2vo9hH@K(Jq>Q$f#mj^Wcpu=tYNN@dwiD=q+W-) z@USgNCKKOH|D+F`e8qKqW5;uMe0VArKEPA2e_=&Wz8`TcOFRlb*%v78YUIhpUwGza zhzn{K6H5_g=XO5%4!&?1iK&sgfTu=yBmCqYE;vBvn;8HqPn6Af{U-f>1z(dGzwqXJ`P&_MK*l*B&m<6K+Hq;h)6{P#&3riH&oF$DiUWQAc6xm*;$kf4ji7 zBs|Rb$xob_|Cmd1^ttt2NCR$*t#h;EI5O_Ux>K6rwNRIOX zS41J*-fwDt=0`O@VLT%w6r(ybxeJt`*~;eZF8ZZ0;N)!m*=$I-5pnda^Y~{ip4$Me z8BYQKpip`N`%NtUfp4R@mJFWt*LNqd0@{pySv?Gx#=k5C_$wVTKAA`1snV}6k9Z13 zLlOES{WrIB!QYPX|GwMhws@Wsh+i+A>+mV6odM+!i((GEB}d>yaOdI$Q7+y~I(W(q z3XM|2Qkptd_ak=1-+o+7E}OyY(ta3t{mT0jYMfx4A@|7Pzd2mQkBkV|W8GcP}uuN4UYG?mSGy#<^plurT zJih`ViUWuxGate=iJ|a!qa)t}jB((YP+TB7J!d&D&Xl0Vx<$icm%_LrUFh}=+oje< z1G{km3aV?UHA&+7w7)WwTK7MQ4teTQ-A2^tXP(V*Gp#pg?9~uwyqa zSa@e(_~uJ-^PsyxW`E>%oIyzsV8im7GUKCKH|3~w08W*hS^$FlY7($|EXMWYH1^g_ z&4R^%lPlV0+MFGVxA)F2DZxm~N7 zJJ6HHhxwBm2YBU`i~DKQUmeEXRtq0Zn10h;^Y2Fk zL^B0&fn#^+AF$xJ&6X?m6S?s-Twlr}2K$|X*a~uz>-z+G3KFlP{s9mVrd(?t8d{n6 zT|3lsIVo-C#U26CMH>G|S@d&4VI%mRhOa(WF|oZOWsZ1MZ@jpH;Q7)9C2uYUwBXC8 zM;pk79UTdm(OAQ4UK(mK`wc5@1M;XKGGwHNKtd)BlR(Y8_R?3`8gM?t2T!3ma}s3h zx8mm>2LMCWuz)d|ax9V}d9GVjpA>Ohsh$a0%xeej>yLkSL4nZpPw`R>|GHF$Q2d%r z89SO?ZNUPb0<6h+%8y3xB-DMWuFzZ+>PZ$tx69wVgfQ&hm;uU6Am(5tQUPPZWclns z+7{+$R(bXQUNOPwsB+5|zP`nK*ToWn4a`rfKL?-x$en64kO+FI4+ibJUJ!7o|L{|u zJX^!+!vefkUm23+hebehWZUuyDw4j4v7u?#aa8;h2kry`Mj@v=qWeIG{|ZGac!hWLmQ$U$|_ zt@Gc8SmvIFsob)%TEv}=6zp{!d42HE(l-e3s~e3%ShOC{Jiq!7wiz%_Z*(PR3DGPL zEv>{LQ&qdIDsi9bI2H|%`9kzNPToeq_0~1-jElxdx3mKk_4=aVAjJHqxiF=1xyqme z*1a%aEm-?btYVnI{ztFH)jBQY7@NQ2IKSupIw76METGq%Niy29;6i&OIx-k!u}2r( z&ioRP6bD{2p^iWsRX91lGs)-nVjM6wSdt)ywikhR2S>zOOdg=q1pm zvkpv)&irN8+}oc>vGuTUORgKP9xSYZW8yI_>n&QRPLg}A@=0k#Xr|geeL6jmhb2Xd zr&Z(M*rC#Pd9qIR2BO|klzbal>l4mz7E(B3RayuS4%m3LfhZ+weTS+mQ{f^9vZ(Jh zr(pMSBm(-#TfM2a&^4a)j=Leinz(eID8`r=r*Aot@%T4?1erKbvA{7Y3*JTsEGQ3v z5uNPhW0gIM*P-2Sr|s0ox?v?1z#lWbktb(VWo)a5)Nyz^56TH9)f1jY>&L0{!`zMj zm$EgXHrSHshGKUghzZY9{$FH7e zeDE|Cpe*4hcK|BdgMzn?fIbhOK2swGl;I>If^ks#FxR8LOSLWGChyK%#^6_5b-SE# z!wLiN@`@MY&0koW$QGWGqBh)a;N+m3FDI;qyu>zSMBQ{Uq2G#n)675L<`j^gNHah_ z^m{d#Ntj%r59{kq!8*b0Q()oflbrHeRfw9{KhZv z%g}hyD~yT7Y$f{*fwF4Hp-OD`66@}WkN+UONp%KothMpQfjdTuGgzjIIk&rw)cY-1 zhBXS2GPi{;LC`^B0bJUQacNeT!+PijL%|7AqrJbHA-cAbD@SHsI`Neh0B%+*mg1b2 z9u4|>7@(=W{pz_7PA@hts@?})JUh5iqt8a|B(BVp+0^6SEY5#*bHb*G4D7sj>_*XFoH-r+>oXG!slaP@xUws zY`?fqhk~%g_X`B`6O!{Z`f+i2tFNo1J?*~4d4=egYWn7Gkdt?$L!H`&GPtFrU=fV* zI&al|-Z>=R+oIh2egLI2J0OnK4KLl3;ip6>UG7O7#5;|tI?}0TVt$*Q_6(QO#9vf&R{1t zhADNy({1b$+`NS$Yb)9&=kqwaD2qVitLoI}FXnXE%o^+iq0_){?j{dUUGZGO>WEM6 z2B@dbtVxJi;{6eOnc-m~~{ zBW!7Qp8iML=WQ4If0Vv*i%ctXsF?Z4-JWj2a(~tJk!gUYw^|*)`r#ex;6z-`tmdP! zu!g24Q&0cALQH;a@{h$*R<=$)$X7W9k!h02a~TPg@ZvYVIvKVCTM>yOw%h(#Cs1Kp z4-UaJrg+sA-pz~U*Fm%o zF6oSQ-V4Qm%0lesd%1e6qAYz&wWnLmQf%gxz4Mg)Bt*2R?`do&ni@i+cKH<<1BHoQ z$a_y`6f}xA6mOAyTB-be-&-@q{6XQd2+|BXeN^2|c;O=hk?Rn74!ed4f66Zti*FOV z79Q0UIHrf%n}@$URh(T?@N~+1m^`^B?~x$ollLiEQ-(J?XY0}q?lU$xw`T8V)K_fi zwTG+6G>X;bMH{HS3x3dAM%==Y_hpV!^9w z^YfjZnT!%hvkYlASY=(G4)44ZuBs|M9}^myH#@ue_IoYw@DwShf(wjjvefo>JD%_? zNhrZb?8_2z`H-pIThEm^1;bUfg{D|^8ebDXIL4H^OycQC4x`VXm%fT3LX}7miPm8X z873{MS%@xPcWjv+Gf8ssS#dVW*dW6RpF*u8`jE-f;iMT`uwi z$Mas{TVgA`&-=coh(4Hfx+G;FYl|#jjuBdV^yL&&R+5SnZ&qY z+bWQ3#*IShvG74~lCaK`ChNKrtLd;(R>mFS+o5ZJdjXDxrv{PoQ_?x|8}q))u&#lB zJAu8|;P{E`%}&$6Ds?K$23ae~`#tPaMX{ytv$L9{A9Ti*Da{HqLahf-Wg0Y(=;TKb z+Jd7$k|YMCBPdlORRoyM*))w8SIgZKu%yY#v}VUgUAu zP2H0F44JEp!ce+tb|htI{TMOCy_uq^6MIndtWXJ8gNvMRnhZFNbj$aep5eAZ7hXEQ#Zx3i=IL1CLQ5)j8>F*_giJZW$!Y z;e^9lYEOUCJPeghtQ`>Jd9o4Qs>TDNa^8S-sSu|E(XYP-0th}r&wq->?@!7|_@%3A zEw8WZDJ9+44l6mK`OUPsnHcfFL84@m&Hw%XLDySAMcH+2z!DNliXhS@p`=K6gGfpV zBOxLn4U$6&Qqm|ODI(G--O?QrLk=A>Gz>@${~6!s{r>;|9>29%%f*b$-1mL<*?V8t zzV<#*SGkE*94A8}3PkGMN8!!Oq%f`ZO;5|*t_p!i;?Aai_iap0HTndRknd0*=9j46 zv0EkGkzNc;sd0SzzQ!lPUPFc*$Ps&8yf2|QOxw3c&g`-Ag61ki6zLI8ygs26(K^Rf zz5ZvUQJfuRd7vkAS?G2NlAyrsx_APkfjiN0Uy(pbe#@_dqa=>N)cq#Ub-nXZ*o(8vQQ6VZrXJ zCId5XxH}r`qi?^s^W7(Grm36K>}ouUDi496bW_%Q@|IJBVEP!9gj>) zMK&vxQGE?j*>6Znx8*bjk98JU~%L@B^ z|E}KFx|@^!KT^!;)u$BEx&4-EEwEs#F#=C4Uj@oxG*x0wVc^6FIS=+6K zf*5u1W(5n0xu4&L@k#E5hLFl>LBheCKA{^}tT);WnDD1DoUW7N44;^`yCV4gX|}uX zMp+T;Z3HRR3#>Gg_Bs(wdzd4sYRgSOaX#)P>`6r|m_-Vkp53so8B+U-@8^QIlUF8R zJ+osJ8tnEe5lN6y0vv(IU-WKhrD^9xCD@X7y{iapK z=rq53ni+dSVN^mwv$b@_tY)O>F?s!d%(>SiObHnGLx$VOl?r_VO0@!CMGo5KAR&oO zq%OlleFus8RsmQtSl*T&)z>$GQ3uxg*E-+1fui-L!MOn zKF0069m`6uPpcjOIh44`d4dsk!EilSOuqXl#s2UV62bp=jHe*`I$QPSantIq(3 zdA6k^Qyt?&jLuP$mzXwU#x^B-dgj?Oyq)A($RE@spAfOb7|3BzSBUKWwRebd9AT8_GU1DmN>Y#*{K8}#8Kuw!|@+k9Z= z`r##i(dsnBJVME7u4p7>2dN3k*kSHR#r|u}z$ymO|5>)X9mrTZNY<*P0^B<2Ny#pP z<|#yIag}t9d?~x9fTlYb`7#_)6N!3wvRux>VItQi$BTNo<_)yqP&mzUQ;>B*_f4nS zprEVO9VBx*a=u?wD@yG_{259eS>sn+^po2DYS%?0UO~kZ!?QT!Q>C?9bB2Jmta zkdhV++U{pNH8>zJ54%1_AQ zqtWB2k2Sd)q@=gJks}#3blsFGxdi5ADfZ1zA;it3NOBZSBk!T7y>0n7#N^Mp+od)3 zYe8ue1I*6F=1r&GI~Zq8?~(G>p{{-+FsYQrj0V^ogQcx!H|eBwyDM2N?ug9Rh~t(B zjL(u8Gq~h7>8mI+0}my++dpuhLZTObSi)5Nv6cVzBl`gzpK(}kwY%mdNv3?yXo;`N zYc`TgE!izR)N^uzzaR{;Z}8d25=1bjPaj%R$I^Y_1m9OK5<`gSp@6A1!?z0)0g)00XD3-%pae17Y`BEL7K zO==(*Hti~u&!>>e_SinxklC+#MN8;y&^|~liWk)NV-Yw;X#(cjO_#2UAYY2mfMDQIgLp=*yk)SJ$Fg{mPDg2=eFVnzSfQx z(7NI*ee^vkBomNtA`R)RbJ%LG=PJ(frKG^VUw1v(aIw z&o_qgmJTuclQl>+bl!;BuO*Azb9EQYZ@99XTD(11A(jp@H9`(JER^@a*FCVQ#FYKr z!Q5S?Zp-pJy;bS2PJ0KtvKa*LnL5$tam5s41?!=KlYPBBWfo{ad0O zG7hUQ`%->l?+STSTXeE)h&!%Lgf#BbM0xK0)Y@PoM`r zfuxL)$iX5A!{i_2Mcf)JE;xLL79?%usuDeJ`YaG;txLvcTgOD#Fv{MIPztL9LD;k>qA zE?#LMihKUjPAT$;fXFJD7;i%F$9(^4(z5s6E`uIirs8D}8|wM(e0^pa?{$CNpD$Ua(sB%GPwe16U;LD>&y6=w81na z%Rfk7jLy~1$BAuDZ1QD=A%0)>wptv#o5dRET|PnXb`uwv{5;&-GS;nm;sVba+=RRR zN|fn|RMF=1b+l4WcPP*d#3mb@O*Gvp@mnT``ACE)e2wuM&ERXJO3Y*%*cz;fy z#caBOm4(480AJT*rg!0FddjKBtrO6H#(6!?Wv(YlskQ7jtj*!WzOnqEt30C!pHJ0b zWT0GNd1cPCb;qyM(s#Mkf_eC;*Hb@MN;d&Y>;upbRIoi>r}s9W(>V->;o)@3C*Gl9 z%6U2XF*S)Lt=XG)ePxa!wJXVOmOR+xC zevcpYmr#lht_;|CnhiO3k4w zAW_$tJ`!@Ee?nx>TxFPdZ8-$2)uJIsAcPE*>$H7GMUH>6=!z-N1tF^N3> zGkko{Lr&Syg}Zg|n24}DlS2V>*TZ&4YR<6ubRd#_Q{Ep>4-z7My8UH!n#kii@fP`u zow>s*npi_7HjDmPKLH0_84Ovz)*|{e!~C~px*z`FWd8fJ4G&QF=k?(nuZJ~%H9$u+(knw_&bU1=cCDAqhZ~1VH zG%q%LF|OQz8&QX=B}t^T%^g_U_^o866z_48aW#*VJgZ+;#^+B*(v@r1tiJfM@cxEJ zFt6lRXd|tZMExB(m9@(Jw2Lpk*rx?IT7EJ>li3No@?+{wK1{jg>bLd)Fc#e<{6Bn~ z0Qm3EDM`Z-gAD5WPIDd@%(Eg5NxKE}8w3&Wm7YS}Nxuc=Gd+VS6(7@opvfK~C6QqK z(AW4~W1@5i&&J1R{5|{|6H^PaZs;VX@-_Mk~GHIdZi(N59#jod7$U ztw<{CSbXBY3U+R*8jI0^}*~W)O~Iu|VOucGuDk(9r@tr z8gFndi2*nU&sp9hFqm$9YGWw&6NP5p?qF2~t^+4H`0KZl=cpCt4DaqoUQ~iXOJ|R0 zblk$Qm0J|hw;I%w|L<%W{Ynct`t25Fr@8B)g>V1(0fr^8>!WKJEki(#O+)&*W(V&M zG3&oe6yTKr6$WYWm)+na{JZb}=Np)!K;R0cc6LhwpH2#FFv@Y?^zU|%gpK}k|0jR> za^gOsJMFA}y6^f{HYy&<+@OpOJt87her}R;F{N}rtV8AWVD;i&c~h3UZy9th*GJGA z(hD_Q`K{(hs48iDB!BC3jb!YbXF`8L@L+FX%Yo(K9kX2rj~#=l;6L@3P+@R2%=X=F z#cd%u{V}_D=sEb8N3$)hr1POO*_OE`55JJH2(hZ1AA0n;fx-s9!#qlO{k8~8t)_1y zwDF?w7^!vs#7SbyK1{`)w*#qyGuZdnyfdaH3GBV-Fsm&r@XtV~(myPNe;Pn9aI#GG zg{pGhgR+R)^1ON(?gxI_Rc=C_Dc)vqnFEkV-9m)Li6P)ICfmj(%_5{QxyCEoc^zQx zlH<%Rh`*Y9OiQTGc4j8y)^uqEU@(zREz5cTp|eO;!GmZg@|k>dv45HoSN{7=v+;)e z5J0sm58@N23sz?BqOF?Qi$ezXf@S1@G5=sF3;Qb*Mylwaj^HK`2KbAi{KlX44hUtI zc9OUVrg`D=`c3MrQM1fo@3j8o<)19Q%drUobkF806nwQ0^WP90TX!|o_C8g;2hx`> z5_ESdsp5iB+^3d@6t#J077|36Fb6IPy=fe;)lXG7M7Uh&d%{%Weq=J{ZPv$Us9pp zr!;D*BC8W&`^)|VNViwU`hD7yUFPu3Asgjyvk!i4y=zO7m@Zcv?0d!nhTHb9(v5Y8 z^s3y3$yu;W68(J}pgnQDBhSBVvCW~I@q(fw`*oWUPMyVbr8IQqRi@|k7PHntPH^Nw zWBwgof@X(7j&gPm4Yw25ZlkpNY-p*;+PzmjlKY>23O(8&%(icLO(k0n(_Zv`>Yhat z^Wgy)uJChm{vH4*Q={`7yRHJ=AhCJ)KvFLH9Fz>po4%_{#y4sfvqM;afy!J_y$XCg zKT!n#6R5YTcAx-{{837vp{Ts%rRP}@$beS)zGPA4K)3go(sbLgXzfr zW`;{=vq4Wh=Mw@iI+vJNx3+wAFC<+LvF;n2JoiYtF_XAU-lFEPn|!Jz^8cw}!CWK& zG)lMQg3Yc8?=o9k+z+zsV(Fy@BWY^4uO^!1+M6sVR5lrXp>u|{&EO;jsdb$x9u6fs z>*@O@B_6#ukN?R*v&*Y>xo7utw>GSuScC}IL?&Ak))1e)wv zEKEKIyykk|I78rm;uKSS{#sMUBSw2$N;W`WO1~ukXa9pR4G?@Semtrk=)wA-d=6cSEF{Xt(L!@1MM)VO(F?%ArG8+WUAIxJQ(=9ou^q>L)@Pzdc;v&e=Sz`KR#8S2AIR5&n%~0Wb=g)*5;K^xX*lp6+PJqrk7{=f z@~WmL{!Ip!@B&@?!@iuSnoqR3pFum3cJq)Z4$!!-Cr`^{=W*Kt)}K&-D~?x4hB5v< z;!1;?B>phQ-lg@wLsyPlx7v=A&4YzYyE`>S&2n4Z5vq5cB1mB~xL%F$<#}#HZp)Wk zF=HFTMVJp6o!{>MLc~n%-%XC6-K>o=-%4Lc6u%EC*BBkukM&AC{$7H0fy zjr_4wL1f7teBY~b9{j~vKXsFiBJZ8)An2AN>( zuF)RY>C?bP3(VIWU2hdSsB}PB9~+h6ixHQ+3Cg{CwvC8qEjIb!9%C|uyy}}WL09SW zf7R|xZ1XB0pAb9wm|7_V4;2fWv3aR)l5#{$s7|V3oB+_yEqn$;b!$j6O}eO@`jZTa zZITv8(oP?QC<0s2HSqOdw=6n&%T!?ioomOc{juhwy)VsPs9Om-(-axbKVuuJ_|W%l zM^T{V6?*Lg@|a?Pit_y}m(`l1Pr$*N=O^YfD%}#C$NcbWfO_atH}xB6-{lj+gfuq!~J)0y>Ww zn&FqEvZo1R zuCa$(=foz+JV-A5Os!&EwkjyK+}>h;6T*lNmG_iPjn*nI3Nxq=qHW*uX7=os8;jlednC?3S;%G=EUN03#9&MO+YV&K|u4wLt1{DM9IUx%h3s z8P>mSkrDI+IeVtJ>Hd0=Cbw{4Ty*PAhRjBQAAdSq}fP2alCmj%;H_x9TBYmX?yPUQQz z1WI}@38|5WO4$j$#HvxZP8Z`a{;LJ3aIkSFa{*p!fzcD<@g4!&@iIpJ+$+Wt)RfSI z#>)kG3sBRw<&Mt`PR_p2M)$-QiM7=c+lu4INWUa&@s)n{=Iw>o zL>MSZNZFc+kJmi~7uWn+{;`aNZAdI3Tfi?>(_LKN2AH21LS6=2k-{B~+XI;Y5(LFH zofYt04GGju?6Zx1lO=Eon_NH#;aUc!zC z<1Sm9;g(xqY8>?B1UTXNpr4|P(L%>+lxy6guboc1iz@MhUcXc_}pdNT`Pz)Z)^0;DuH>( zV@6-TRO`;TzFw0AYN={PTvL2~%temklI`4&8v9K*VJT7DtO4B&rLdj#U)M7d%6Sjr zGVOHoXJ&tV(J%RhzqaZ8{%EZ?04;B|_SdzgA z%!cy6DSS6Ng+J&_l}M+-G+_7Pwv1h?l=3@oW?TQ#(2Grir{Q$@^MGxoEMXh&olJHu zSQnj@`9Hvx%z*ksj4Eb7*0C1c@=&(lD$EI4d5N*^3P2)jdW&&j&K0+?(OSFZlM5uI zuJuo;ze)*`A32T=+$}34p|_$7O^!rV!d{?|`?qpxB#qxP0smn7KQJ>I0GV!Tm*YtZ zOmw`sv&NNhQopGyE#$eaR{YzC?7ILBYCxc*&RuKbQ4e;j282G2aq47y{&5C@Z_;Ga zJ9K!GO_J8K4R0vj`_4Gqx~L}C`^kL%%4M=5kr16h1^DBcnuBP;?CirA@zeF9^vvSa z4+@tZmFf>_{}T($WETJh>HK(Yme<;DLogn#1!ybX`(OE0JE4f!78AxweslH_C1_O~ zxj<6aZ{C|AyNAoVYR!&PnH9TBy?ZC2MF`Ji_C6Qp=P(EyZh{PE7)8g4vT}J zX4;G2Lb36sp~G2sv7Ey}wMGanSYZA;-ha+&deG0K{O3fxxkpUBzavCF}0nhFfUUdU7j( zJz6PBg)1JEO3mVmg;9N}<*OK;)!$_(i>)s>pJAaFn-qvyQq#U`+9#DcA8?DRl>kcX zUBJJBq|$86_cjoLqtMq?UVo5jV5%t4!te;*o25qua&!)||iu&d|l1;8sU zap0awo?ZV#21vI9N`uZxZjcE4y)Yo*=SaEffbWpTltCB%u^*-XSz2y@sCOP}>M5b$ z0p!*N9rzvd#lMng^x}fQUI+!)U8%-{7yTXBG9ara8TPn={-p*`KXrZ5&uG!VfYfLY zie7=xv~YwqAD?z=(njmYf36JdM7jX?nQ6?|w>yyjy!#Bm1VitE{r4gyot6#bR?;K% zg%Aqx$fK{x7kt?Iz@HoSFe>}_zKHt_vrKg?TQD^`+ZKFb%L5kXH~KOAns-uw z$NWSJTzSrXQn?bi@Jto(0HDjV=&Mx+zJ|N!ALdAzVGDoQMPe(&QC5ui+0q%?!}T6O z@nwIjejYV{1p9n;1n7^0Y|w22A{Ah|wPCPK0VCIzWrJk;=khOI|Dy56_h`S$Hdfm1uDJ8KWfu+4ju#}+Dw!Qu&BWzl3<`sR|w6dnX3Ga59=X{)`tkK zw~5Uq-Z@+P>RsDt`w{46p>nfgNC>ftqwN?AFkeah7*Bj)Hh65nY+46sYMW{k5$W*24boj)0gEk7!$C51t8&R4|%FVkgM6-_yLzMjey!g8lK zg9`o;5KG%Gg>1dh*@+!ii*U_-JFG@+_{{wcn-3o7ir(0Xdr!|@mj)47q;RzP)kwv& zL4XoEpdUbS^8ifE)ae$wzP#TEirC>}F9@GI2!Do0TkbIX*?5~2=Xnb@*ms9oaRG*t z@|7EKz^0GUds_RVK^VQg*}>{Ikp6Lu&S)nU%@6F`K>L3qwKkjXZOpn#Bnh1ONpJl8 zxI+x6VD|dBsK){x`TkMUc&*X(!~dlvFL5h52}fYb1^(olWGitUQ&xZS1xPBjxO=2L zl4?+ZEd+)42P_hzGF8WqdcGCosDy@(AY={T<1=f7^+Y2VNBy2ZB`4YVK=~#Yii4}O zFbGl}NfX#9A-j`ht6&Q)D*W*!3jf>l{n@j7R0mnwsset( z?X$aEAp0I|P!rpWt$2vM7DC_wDr4aAR2Ka^bl+Z_u0mZRQqti9hgr_DXSSZ1McRY& zD2I|7xX5Hq`bHA&+|Mumge`ouQwHdp zuF1SB0XXHLJHT3ZBJcd&L>;=X(Bw8}wv~a^?|+1}ajsyD#_@z-)HDYf4jp`S-5%Qh zpt#ND{ExJ`J-3~^I9iWy`Z@sOvP#|V%!;7;{*k|0a!Z0d9ZozT_Wa%N-5oC(y4TZ% zi_0ZE#vJJ5zW{rPBf-9heFa28R9+HXqQ-I)DR1|-|Hybtd{wRIi)O2u@C;vSHcf1g${G`ujmp>QyEtCN5|EVoOh%W_A7ykn2CaKj1+#Ck?XX;XPltX}q ztCbnMfwW4kgu#^A;rG%C<|on=rtE!dU{;)fU3KtqVXku6n3Z^ftwf7zM`Fbtyj18V z_>>rPFMI!&HcjGvFuMLByBss9_cYqwi}Z3D+;+7QxTrS*f-fqPp=gbad#dp_E!<>- zh33U5=Zx#!bew2oF=DPR@+O=eK7x<@ottE)h3)v(EPU@+NUtb%rdJOi8*2W<)NZ}R zGL50&=PPXp@sv{Rl2jOx(j(6c~m9y3PZ41f){H zJzx<3KMLRHb;vAU)r6ij=gGa+Wb=hIAHXSqaT%k$JG5AhoA;tpHxr-9w)oXs)uzT) zN-I3StsKOKB~hMJA{Uc#p_{T^w_jdW)xllNd~ps4!Z8=gX|n7PCQISgqAXv$6SpB( zlf}VpqwXlPZ=@yK#IINHb5M4zj%2Tgz<#LnSzFKK%xN+PCN1-or0Em z#i`5VluG|8Pg|?T_V-q~6c+QUQsvd*VHeek<{F^T`?*quO^*uWN zb-w>=`~wWsk5GiwKH4XR-Tf}WBkY{b%yMyP_Yp3>Ve-};iu$p%@3B(0wtb*{sOR~r z8{`g~H}oJ^$HnVPNJy7KdMY1Kzdt=^k8*YmM=**# zvZVxGumbG`rwQ(fp}k-y+6(S4l>Gu*-0Y7RZ2LdFAkD#l$sxC+3gscw=Cv(B#)%PT zvey?MLGETb!`von-98JdJ;AFG`aTz0#-F>KV(N{fq`jADl^Y_BJcApp!4F^3&S`g{ zHG=_ost-rxp9J?-M;GGfG=qwZOCNK^<;ze+H{(z$V(~Q9XYw^j1;xE=#ei{npc8Al z<#s&)4xc!nQ^AwpIL=@5;!4v zm7le-+Xui@=dx!28Vn)&TA-^A-%K*02IV;VihMZs!DUl$q_f;O6;A`;$nSyHoIBB> z7sbAT7rAE^gt~s9bdf8_TRVKt!ZN!&TlxqzHf$P|J0B1Q#$%euZw$K^ z)s}@Mj?fyX?-1S72qDe}C2?on)zJeG@iH=()M$Tr70W@I>l{BpVxXS^xt~yyAjN1@ zpHeaX;0Ez{a~Jf>uUfhdQ;jnxki65LQrT2kR7njHKuNfL>W0S31+_MykymGA%Ys3Oh*Asr4qX}vjg^o=D z_^(-JeLYDoAqsj907HKXk)fh?8{fN$3+~tizrL<)9prGdEivGm^-xV=M(sWu1X}S( z??*+XixcnItVGCCUA_2R{(v_dj&{bJe^Xg=A9eOX;d$Vx5d(~9-CPz49V&#D`uY1@ z7kZypUtD5t@VG(q`OTWC6U|((`Jh?<2jNG1kn%WcB6XAf>NWg+VxrWq?f$8$^Zd|s z&{qJYPaB=<{lDKJ9Ygkl2vt|Gx-hvk|LC3jxbAgzTR%Je3U!n=-px%o4v?JU;Zu6N z^z*CrXCp9~qp>xJ%;^$czUgG(r5ayJD^OniU45crn`&{u{&SQPq^oj=^E@|PSM72R zQ!W@xs}*4vF?k`Ob?aVw49R%wiFHzU!c$0wa@~(HiG&*a%`IxG51{3X4YuvYnAG=V zQ$&5OF3f(CI6V4;h6T?DJF?O+q4X+^cQwAs&Y9nk-Rak4{KPrGE!TntcGuzQ7gLV0 z$D8K@SzviivuZMK-90!Nvw{=HeK+%_ccg2Px;8Y_%7#!>+T8~$vs;%)jd344Ls$x} zD`r;m@=r?@Ap2#&)Ed%k7Kb;;?c^F!*DZ8Tm0$HssjjiTd^dZts1u4vec$EDFCv__ zREK2{@4?=I40}i0>(US2$*iMDnyfcHu*s>}p>z44Fo~-hQAO%d(g`bT5{xm$h!ihH zUOum5PwB2NiA50vCQO)InRVx`4;5xN>J;cfiVvDH&6|cKyzp<;g zxLP$03*mA@XC2SdAGYnj-R7UViN+e}Npg5x-WDCBuT`R4A_TscRDHUxe=fbtd$Z@z znWBfD8Xjw8gSzurc(`d%nC&Dj-YbpfJ+zva+oHE~QpL!V6CYa^AT5RuvWH1e`A=eZ z2ZUuirs!b}Oefh zY5yT!@NyuwCQ8)Q2?c~`0xM$huD!2aP!i*<=;|%XeY%E6etD@G^~ypKPW=w<%^Z{R zihQ1vgk$@mh+Hh=ym?OXCkffNIqLrdgP5JPMgR*ukJzVAb~j?F4qx)hjck(QxmiJm z2#e=m>#h|!FBl=7AWvFPw<*A@v?s99U=Kr()dIVcNxA{VIVB==6r=kPkXwu7cRKP( z-dAL%n=?F5Hr*Y#-CrAO{6_w980wb>A$8ZPh21gRlQ;KVX!(^;^`0pZLzKK#t8=Yx z=8wiZ%=HoQ3is;IMOOhZ!K!LV zf9*tT>_pN;{J1yqN2W~Pjt#6z4v!;TO)I()22RMHem>;ch7-+NoB{NqZIiMe0+i;f z-6cxWeb;DmmPDtWu2P@gV-wUW&i7C>wl8rO*HhmS>-vc6f!Tq)CbM5!3ZklnZE!eY z+Ba;Je2Qr~04yWpVKj80UMeJD(Y z>Xq7#1|%c^gL636eeV)9pmcJOr2^^Ck?HU zG=%G|lwG1T`7r#EPb9zavt}O-GY?fIpo=B1S#H|=5cwS}@hIETVJu39W7lrn^6Vm2 zfvWsBtR6=E-s7DzRkv0H1EUeMGs90MIlsgqEA1bl?4iPFVTE>u&=ucLGZ129p(hPR zT6vlze9NF$wMP>F8I?u5{lZz%msMxuLDWMAxdVefHxbTS<>srRj`R?|7{rpd4a)9hWHjyGY)4orF_UBUrfJE8kdzvvBM*)X+){C(Nv%&Gumq@u}O zMTZ0P6_2G~Kg=n{)hYB4mROXs`pp+`v$J_EX_bRin*^)Nc8=QaQj4rS)C z4}01cYVDJYkPHcFKb+I5*8@t{vHKBNxNESJI;xepgDWpuy1jFBR;zN?<*VIir3u%u z9>8uyKC$4^TMw2ld4D)ScjKpw8Mlbk$+b_^8H^+8?2%uN?DZR)P6|PnUixKYi0@^! zMM$Cb{Jr@!ry#)rs1@9 zexMp4%7dXsDpZ=DofcL<_NKn_TEkC%NbG_H;yEC-I1W{<+iwgxS?BoV(m4MnlqK}i zu|Lhtyz)Ef(pt9^?pmB7(L#bT&G^3G!9cj?u9nKW5^$nU87uzRNtllC`ovFjHd`)# zydQ^T-;WxjPKdRSFKf=oK?kXW-*@#E2S=g{U!Xoe4s@%YfeD?-P~CqGCM z_#fdg#H;xFx@tAK>9g|wWA}RX${I<%Q1|b`im3L{YVof=hpt4e<8WT{Z2Qhdx#jYM zD}2PpIjCN7V$#p9lhtwHXn1fArr!Q1_=xEarN#>$7~FCMai@;V5D@WinH`_~&?an* zeyjF`bLpmeyoHu_I*Z4Pm#&8tYK^V8!qJ;;Iv4agWuyz36hAOz1Vl}3qkU0$4LgZ2 zx}lhVN!#^lPF?kLmy@+F7U;Xd#A&x4baO^Amg69hYizL69Nb`@cZld>Rw&DR`1R_% z)S$yP-VlGuaose-m`(D&;n0sxo+HQ^bZodw}J@Bf5gD8K?(iQ zk!z2}Ym-qzUN%^zm(Ytg9+CU%F6<`+MC^W)G}56cEo9&8ul{e5U3S?8FJ)d-DK6!2 z**$FnceIi=DB+c^3+ZBgAc)boG}@S|6`e<~c*`xz+~njtj}xu6oO*9k(XZ>Jze1e4 z43fo%Iw|jVURyJko$GMQ^O`^9*9>NS^fR~O=wzcNz!k{M-Vh)6iGk??!WILbk>1^WOf! z@6fnD0C~5*{X61W+@1KZL&9s7bC+pxq-mdr6an!zXvTX>mKKb77u68+AsQiKJDjvi zQ@rvOIrISi)107`e%3E5%y(%+w*gWUW8F4}+Xa*6gc%NNR$mEPPZrLiL`5Dz1NtLW z=_f2#(wp62hp$T)R_b06XWNu&Tz3tnN*e0-zD_!C?``3yuXkLrDOSiJs9^khJ{u>C zT@kVl+4{YYH$?_)W^Fhqu4d;Ax6>KnwgYx*|49;?p9BK?#|iD)i+)|@kKqTSKcjOO zB6lH_6hD%jn3_&ZQ^V`_w?joJtT&$2Nfu(EsV)b7wHpawfUKQ^ok_hfY}wNrw2;ob z>N(MNelxHM^*EXv6(8mTgoU9LTq$6O3+%gL{9;bwF=VB`l4-a2iqBP&>urLaVV;Kh z*y)M7&Q=F7Y@v6(>S`udkStlFbXN~h3l0_kDaM@LJct?CoTr~y)GNk63$SYthj^kD6gVl2}Q*oDC|5ae`PNToM=?|pi=pRj>gV4Tq3+o`5 z&(IANamMf28oFalC~8MbxI`gE{$-8LmT#*jF4|RANM0uW++;bj6Ls|#Z53hu#DYs~RY!fwpcZNqLlp#rA_M>nTE-byW&3|J-qV%+;w&fHo#9F zs_>;uk@LMOnYVBzCBm(sL%29FvI>e2>VEd@{4r3d_!^k;V;Eyin!3EWSj2lo9K{YG zAoJ^*sVNQ?-k)_Bey5vQmE0MvYf5|B=oDrFq({psTM>oV4{B!>?uXlN%<^*%kTL1d zrs%Owg3h*LVPdV61(8XSVZgJM#Ntv5S;LCf7mQFn32A31Xps`nI@idq0Aji$NIMwM zOs(jp1g;HfLCumpq?!tGQM4%G;A?)gxc1Y0rKaN9Pr*qsTjmiDh2%(ikM}8RO7+*a zc`m+=BB+4G>+QlDqiw?yVO!*qce!g$aEfAW_6ns4mrc68hhcOV&JsCVb#Pw~hbx$1 z5+crKDMdcb4H~H2X-zk~SeXT%b{V<|6M~@>5cdQhony8B2^(X5%@?$gcj5djlciYflWMB3+<6v#zc)B+ z=9%anxe9?iwY^B3z^CT@FC%6y-@PMVtDD%BkT-4>cp}fqyww(ZE4j@txjGNy8iB(8 zz-tLOr8buu$5^h0B1DRTLt_UJJM-DiC4Nf22AAOe^P0<=#XjeHfOc^)pO9%7=H#Iu zj%6nX$;kCm^-|O;CYws)V^5KHYw;pYUfaf=h&vt{hbuX$sYS{hSPPKuZ+L#eU`2_HHe`jE3s?2d6%b6wJ&3@iNwswg5qxH zeX6%RKnd`AvTdZHWP7PDzJZ4o&^YoF?mK!I6fkNv|H^PgDV5OsmH|+B2jg5M+t|?> zm~P^}j(oUa39ip)k(UHw9?hl^i!x6~VVNgHl1YV(6A_s$7eTg_aef6ZC#BH!)2bWD zUR-*%uIUcf0tLzRo3rkF-2t)KvJ!?uL#6mo6_hsNJ`S-zt;E3V#u}DdX;23UvAeb` zssJKcNfp5x8xLWFtv1JYRB9dXyYg^6Rsc-i;$}PtrC&TywnJWHP}^igwc;94^Rdev zctIn>(zBTUMvL;E*=6ZvlD=+ zZh$pwc$i!r*3{G&SX(@$+2+-g*h1*!r#szGn(~h1lMk&!4O2stncc*_$p~@F-Q=-1 z*yb*fvnNQ*%l@kIEO?fB2lD+PMc=*as@JtJ87NV!Sj@OKe1PPae8?g7#AvbBUIXjx z7~_Mds$+O($-S1VXoA~yqYISj6oatR#zO3GaVt9c++q-`3G(!1{9>p8lP=&*x$;OK z@C`#k5UJR>(L7s`xr_1;_cNLoX>|P;zY2yr*}w5}E6{;4X!^R6{9C-to2Et4A{0;= z_O;zf)xdp1g0Mom4~lPE%9`Lee?VYcnWh=t(-fl%ppFo8$+>&`5Uv^)j`X|$qglo( zXeX8U&W%&wWBELky%I*lXGOP=M}9>W!4KW3c4$fE`rQ#$>!N9@h4bU)K62-X#L-g} z5Wp4ndPn>GPD6e3%4KGHKbO=q4~O!?Xt$w5u)0=Cw$oefML0=dTEVVmL>thcH;iNq z&qsg#*aP%rdW0*3bwZsH9xLF!pj?hX`$HvgN3qw9S@H8b|`JGyi3iPXm~~CEmO8B8(J{w}C78Xs2L4myD<3ZCRL;`8bsWO7c6S8F7xg z+Q{NTZK?uj`ppU!;pY(vq78HpBwdW8Bp^LO7lXpbOD7dJD1zK;8!kA&Y++3se&#>Y zPD_hj1fhU=E3Nv68hdij{Wt}gsE4*&nLMD#M%339HD6SF75?JsaquJR4?vc`sXDEH zx1@$>0WP*dHsRz=_-^{4%x_1Lfvdhw~=CC_m ztR>U8>3v?AlLlk|2wHbBtFs^tgz!{ z8}os}J5*=&tNFb-s~uI(+ol~R@P7yMr${O0?%n&n^peuZIH6gmac+CwXTmjxM{`0= zB&ZJPr?2FlTpCD=K-2hU^5E^mfg4!k@Jtz`ctuD{SJ^)s?jlg@7bq|Oa<8tO1UxEJ z`zpZF;MnTbGGY0hcqRFm%OYZqda{{WyO;s?N&^i^Y?hSKa{LLyE1l;@P2613}h~5 zZoAO5d#?1ieoHKQL3s1Z;Lz>VU=2d}(PH5HyTjB_gn8trlKEy(Fi4FRFnQHwY1Qrb zv{Zng~ST;(O<)4x9f-Rs;;eDs8fv(<-dZJ;sm9ruA2ju)r%(qxA#Z~LUw@b4z??*~(6 z1N7Uqr6;4tJgCTA{N{rB&zT2XCt0-)fwf8=MEC}1Rng_2*+*Gu0nh7`E&~ymS;gvS%pf| z=!0&5#cfTqkS_q7U}Py~Ktn^d?pZL7A_1}Zz1Tw-EO|I+J&3VbqN_NsTR$VPmb+Eg z*rY+bKmaqMvg{a1AN;Uq1ER zw4=wiOA-?J{OpI?2R)+7moN5my&c?7|Vv5-YZ@^bJOlWoL%YS z#dkgRS_867^$a=rn*nA|OAm7@uR2Fd-5sS%g)lOwjGv%9>SZEzw|~Z>mXdW`Ug^AE3H zeYqs-BBYvWgD1QM53fh*{H9Z=(4@R36I!)9cV?sdPc(4tpFC6jae(zzZ@@S=_D!Uo z8PiF!gdgQ?^XGeyp_N|$4`+WF7UkE455t5=mnhw+fV9$Gf{K)+G$Q5DFw!MRhX@GL z4blh*3>^|m*C5?BbTibmhx@*d|NnW9<9$E8Uw*&i@)~BYYwx}GI@fuwwf4_;U9K+x zZUavs?P$o~*78pTe=H!~+zT)V(b4H?bnJ_wkF^3n3t}Zp>sILt=};qK%dFL9k)q!h z1L$d9P2{kJDUrIt-(lXNCs_S$S)6@6RBJ7t$Wbr7wX9nuLE<>`x(cV{$_q3E@~k1Z z$)Zg$U_{m6oY@=Uosfj)m4Jwj0H0!gAaPzxsld} zQNT-n&HXyFnE4Y*4<2ak^1M6%)fk(11B0xh6&v{%3_~4YH6S;xS7RjUZU=0Fzfn!!}Lx}BQ-gQ+UsxH-+@kEemAPFzh&qhz4yDR5_{n9OCV zpE`(Uu8V{<>IK&jG@6}qCCc9@G%{?w>di^{lD{3nI}QAp;sdGLe%;?m`4Vc5Gf85u z#Yk_^7vb;OpvwxuRVO~)WxeW1}yfR zuzHaCw=)u<)#;>*%l`?lbO~{VUUoI|b2U^^{2;5Za;D0*N}{r2(!Oy=*K7e~&LSEu zm4ibNj@(4=HDzxoZ_&>JSa#$U*l{QeTJuEsV4oQ5f=-LQs@?Z;8h#5c1NJkRu&Vjj z9p@RqH2V$}6<@%$6{UTnpeoF+pl)%-2w%+rC`qd}pd~ za;oTeg0Y3jNr6+36{CUeA;HCM=KNT*zD}Gr3w>jHkTpvWw z+%*T_y_6$;S5`^6(=YqUD#D|}u7lGe;{zW`lV^mV!~}caWG^b{{#FKRoaISmTl;du z^mA&DUYuVR(6aNL}XW=6(9e zRIPdU0_#dpiQgQwddQ#}vETJD62j<8zWb2m=g1Ep|D%MiKo*eCktz7WAEYo;;@XBQKlZv{w%_Bi zq;D1?9R9*sI2P1D^D`3?UA$c|CUSoc%KJiKu>@CN{9Ct4zs!VN4$Y@>alm?Vz@+i^<-Yq8EwqBC?2HnPT>=-xY5K&dK=bE1;1kaR^} ze8Wf4ele3%M1yD~>4gS7fM2212@yGvGMj(2y`TW^KorqaopOx^zh;qSt?P zmQ3B&FOZ!zm>-!-u@8ypY{3Q$lth4T~^$(|;21ZMeM8Iq3cL zH!O|{W<4S>k?%fN0~JC9(TZ>TzO7MdS9>Re8*OF7)*4G<&hJ0r<|5Vy2{JgG;}kVu zJc(ZIi$Eqkq=?wdD7U}%E&^FN31D6RuHrfB{bbje?!`Oa_u7-qr`?HJ9Nu?T57KgW z>?ha~mU#%fX}rbL5TKb46Dm8)q9ZS2kGEz{XnfE9j7^q?^cy`*f<+}St6(Tdm)XVC zUI1tqYS|#WV1=_lu}ohuo7lq!@S}xf9Ht^;*dz`IfvAR~cX0|rVbI^zgAtO;fuCUg zkb{!>?C-hFgvbLpsyk;fsKx+2d7O~nf`gui?F-T0hbuN~u$N*ZAF9qeKE5MzLTM6M z39}BL3;%C!S0R(i?!Uutt3IjgDF7F=o2>Hr(g`wS2JX`o!n;9oI|el+A`PvnhBS3Q zBS$=4LHa+T;}0Mg^g}CmG1~p4BN~J$uw5X5y)rje3gs%G&e7p-)PqToA1({mMEgjHG=})z%p?$+fwcQ1=?8sts}CS z*mAG%PB5ri;@h41Fo0{{CY`jWOJal)F9{8A6ckIm>@J$)YpjXI&5P@{x;A&MqH#N7 zl9i%kKw)8B<;Rjsr&Ake{S$fVuz2gO`7_uQq#ddt)TYwSyR z=Ln%SWPjQ!Da~6{5(=t)jy1;X{$p^UXL?pmSqj3R7QwM5N`OVqN^#a#cl~ecYPoUe zE~*5Byo#@%>=DQaq#{onPB^Yh9>Du9G1Tc6m=@mRw(CG}-a(2Y9e)T= zh&E*K<$p*#pF#ZI(K1`rcMD0JTd0fb6Au(pd`MD^Ta2afd~JAC4iZQ zR;X`0T!Yo!9gc53JO&jt3Jw9L->K5EsfBuYEPOQQOxL3&eDlsNf)c(?EyDN+5OmaW zK=ggmTsFsBT$0}RPqp-kZk~JM?o6c&NbC?RY^8QCea3mY+?U~R+#_G#BJS_au=P1H z&h4b{a_X;k&!<3}vKJAaH~l}C-YXas4y;iPY?oQ4WyFw`c-~bJM@4<0_7eBQ_0jX* zt!75*oU-#jy_O+tU>d8vd@g*esO!lv#o72&+rq&i>}992w+lEK!YEb2BgcOj^^AR+ zm@?#yuh`oxEteinJPs%ik}Oi&WwOi0-< z2`3!iwPz{y1?f4Fqmw|z0jc&SyOt0>xUo=}T#5*=h@BHX&~yOIyz?(qv4}F5&QOE` zuOiMF4=^i4Y7pTGLjr9!4d>%a4H=s-I2p}&SGP{^yM}2Jj}Fej;`5;{QF17d_w}6{ zk_|Mc>XV`E9f5}dmb0!F#e)v43a{zQ)?n`Yu0T@)?RxRry0cB3?=X#-R(SW#4sM)@ zkq7>_`PL7=deFoA;OA=EQ*9@=A9IasT;A?9N^^PF+;zS8vi8E-8F+@3j?b@-ALu8P&C!Jog+_{~W`YBU4)4*Ff26gsZTUz!PEfcA)$)4J829B$wF)%fnML>j$&P*LnY-Y3K`f2lg; zT94(ONMotS0Q9IYaAzx_)pQQ2Z8yHZFC=)@6tu9vzfp;${;wFqZS0yPH2@tAVAGmV zlh;Ehlb!o>AF{?U-mulkQ?8Aa=~1T^oTdJnmWIfdS~@Zy_99B@W$B{_E&udpccx27 zFUn6X@ODlS7R6scHvfm(_lDVKT$eq)=bzTjPdx?K>(~-+NCY-Q;_eYL5VNqzLut0B zM&Ptmz0T_{^fZwI1Sb{2fs!pDtNGOoI|-(V>;sih{JZK(hf(+oh3j`Z!gB%W0^;%caciXVa+{?jLPAK}1u;vEjY#eJe3i^9kx0 zN>ZnaGCP8~ULRM`(|kv6sb(mwSzzpaF&0}X==Jzf@(4*FPz+@Nm3_jzuflt8KQzZIU*0%?e|nVyO!az%wRd)jsKWsVL7 zF{6(bhYX94?tB7G7~dut6foy%9nqE5+KCUD8rmLncFrmLDBz4(VG2S)VirCDNec;$ z*~6kLF83B~ace z`s(;zKItSTBJ4S|eE^Fwudx&A#L{9|uH&bV&vu9CURaX{ot3vx>h8V_T&kHRRuE1~ z|58FbyE!efHQV}$JnR1C+Olr_x^1IW3&wdED8o1sX~m8_Uh1|f6d*pbl6-&Pjl7i& zO=ONwp;H*-4vhSZ?7~L%XenRL+YvXLiKuh;Ub7<{!S(;0AOsrv1LeGvH6nkHduDou z4X!P@_Kd=|9QgQTH*KfP*@Pc7=0+kesQ5Is;;j79YCYeVk6OpSdR#v?G7eO0t#|&D zs8k)UBgUEw294fkcXiy7+A--MEQlJu4kS&uP9gT=CaDE$%BB4m>NbTf^JH_AGja@h z{ve~Ya@-rV6+4%m_4iPwRL!CzLB{OT-Yq!kR#O2*y`jgXZ7?%3T0|`Dny4p2g`{|2 zt$40Oit8#Q<*SH}=-r@jUF~T4VvPvW3O?Bv5n*FZ+DBF0Ad7%ZUe3{J1~eG1+9>_b z5YO^P$wfka2L2e3jDHB{ZrH}z(6zI7{r{5)=4$Hm`e)we&v5VS9V%3}OT~w1Uhr(A zh^6elDJU0~oM3VA9-aLTeiiyDE^AxBLoGyOk%Gtr=N?aFPu+- zW+;7_Ge~kO6!oIE)le7NPLG|CvG9k#Uh;9Q$T`FAZ*m)g`=d(6tYu z>HNbrtB#6b2j?C>81Z}W{KRu?=ZVc#uFZ&yAytdijJs#!=j3Z|pR?p7oqaebdy++o zjn-=hj*Wp0IBb`$9iM^h8)O%f`}8;HAsDFXKYmKT*-_u+R=U*KRp<60tuM6p3CO|B z5WN;{*8={LW|D!6^-!YpBD?X&?pBP>YySMef_2l*U$Og*YxdC$o?ANixyj@S{LPH} zuwm#Y@O>^ZVg7>Mw-DX4^f-Ese2cAYXTBz(eWTE0c~3aibqed2%~dEOwt_sP7Ig2r ze71D+0afaV@}_cu@Kc>b;%~#X{4+T%;BfG5frENvjexj~oy}Lh2Xm+XP{}`7b=U=; zpB#iIKgX1nYCRyAeb&~Nd~dztnlsw|iKHF{tDDSa^@5?HxHM&FCziM;(`wfIia#y; zM90&2ZEnAzqxgu;k;+wwn*zj2rV4%WX6Q%m6Tc)uMq>%ik_s6MBLeLKDB|4@PRW^M zI93eCVEz@EGc%;dh)^vM9>rez=_zd)x=F<6(%>3rJLe) zAT!|DV`>NI-M4mA^73lQn(~mMJV7O63Uv%Ba5^mX;36d5PW3;taWZ0xj3=xUs(_At zSu_dV&III?8of$D;$J*Y>Jn%&teT#}=+7hkUoL>%-sI#6=jo2Sz7VPDdDJf^Cyf^=+m~|1}%kg)s7tKOVWi*+8HNv5pAC21; z1lSI>9?KaJA2+@JeRhzPsQ|W#g2-;&MbW0Rq`Mx=pMSlIq&AN%f8TVv$3-M(7{T2^ zA2Re};Sf|%{(NGa*8mE!EbXuIPxVQS9_dQaB^_k?mz@X6b)OCZNE@d}cbjBFk|b^W8kB?gtiku!pX_}nJjH9+n) zkj303oSPW8GP>Sb8R~!*_kEEhfQU3WI~p@--482+v?pRDC%KN69@p(0#0!R-E>Mw6 zj;_A-^yIbl;X9RXT;oeOVZe2!Cg@lgiemE~_rB}g^p@4E)Sn5jKcJxLN0H3!IS7nB zw7Z%pu~7886ebm!@zr59>pNQYFUDg!1;;#0mfqK`PogMg=zGi9#SKzSEFKbhyyR(LCE-(P*OC(LZP&n2LGN$MI-7Ztf;icAtjv=c)y&q2fC^oZ z!6V_9@};*vmH~0?av=5_%35_vi{i>cie-gj=KF$`f8o1|7bZXD+#%%^(KC7IulD=n zepe$$#bZzb^PfI3n(K6@AnkZ1qWC+5Gfg(Znpr;xe5c1t>N@+FN+Km_9E{{ z6DB{Y*mt!Zaw5ElVq@6TtRasbFYNr5E^Z^*9rRT?1XY>BjM-{|s?FsGZ%Qh0S^6<; zZm@Lmz4^!&KzE$pjsHKjLTu=<$>y%c`KxajxPrN2uvE}Y&3AxQwOY{tdLGHl(vbhJ zrtCvki;kOFgX`A9=hUhLn$N*K|LLjz!mdo8qxs)eo=|YEz(5%;b_zM25a(QC-8bvx zGLm1biT`T|)R7RHIF+wqoD#tlP51~^;bG1HxSoqwS2k_Gt@b`)(RIn6wFXE4stOZH z#qmf=@Lw|0`sY*^BBsR!RVW0DczA&-Ebd2T79OsD)}A^iq|;k!9S@`j@3|9+`+w^G z_U=im6c1SJvYvuNy{91XuMzlnz90|{K;Z2Pa$O!zf*Tavc2ueb70WQ1`vGMjdC&(` z(42#QFG-lEUk_OM2Xe~}PV4e}zAj_*33w{6R2n(XTu!AN{x>IgSc;#`b-aE*BuGrLS z!ftySBK04;tHth4|Bmv~$zi^hZfm$E2n^F|tM}ZbZsqFW!|M2Nw#~2O%1Kv0S@fyE=yZIW% zXpOg`zsN4m7Fhm-q+%)H+daLvb)mcIZ{*R{TU@d3lwOpk(z4@)U}X8d#ltZWQhI5v z$j-Ps_>){7eGT;w_U7O}GD`l4$02OWsE@HR;@wFBztJ@tCuQg+$`$%IKPl~_N6rU) z&-@|`-RtDya~GLm&69G?%t@_l7sUZ6ZLrt2>sm@n-K3PQguD*DK_C4(&dQ0y^_!Fa z=?QI>ze@0b=nq>?jq~~}29y=cT(b+K@+&CmDo1G`;1L)g&mLbrz>@c`$oFeGt`M>u zHdB|rPw9)g?Z>{lj?&sg|6T4H8j%W?WB%KuZn&oMoTdXCX~LC3d&P>$XAQ)w_ACv@my8x%J@p? zD2`iIY||4Hu0EIE^;A$N_-N7qtcc{I{Hn*O(Q7dQSAPph!1$`096cbZl|(u-N`OoM z7PZ^q=KSAqze5vP_^@xZ~wf{-*8GTmAC_b_~@f#lwU*Bv?aQ*g7NVkjl)a z>E!xE-n+(5bJU{#{;&La;qQAhe~|Xvr=tBM!Y+2njK z_l!y-4Z1-Zr>+A2JLiJxfmhL*wz=OVIT!*k&JI16=<^$$?!5f`&CMgrgz8^+C;hkI zhLLv_p4I-@WS7e5-J`5oJNaQ6fc>MoKDY5J_v~q2Yj#c&+q@na*`K1f$-4Rt(;?b7lq7Ua zVK@0FO4l=V2H3jIQo9dDAC-QQBfa@yK_g*!XunNKyGv-Gcx9Z^mt~wckXMs@GNf$I zaK_(=0r&o@Omtv|GUEN^7jTqC6W=GP-NBA!G(^pkV=1r~N6FTw;wXC|Lm2|u$ivk8 zs9PD}eGeb2&%^)I2(|gAg$n}4dJnNZ-T+?Y72WK@k z4s=&;nd>%x@S-#IiEJ}YlZYu}#!91Fpka5>TYR08cGL!;lZ|?8aC(2yTU%2!7^aFJzIxd}tYhnl3-?X;7WbAq$1$QoLl6V9 zXS_#kUX;3Z+Boeae~Go^3wT`dzQlIETY4d^;CdL|o& zLzLTSNVwHgUsRb^`d9c{|ErW2?3wCbY;B%p5O!0Zg_CRgYeEu=FNf!_vi0?Kmn8D< zvfnaDh~@~ba2=5K#Y}22&ib;MTS+;b*S@@YhFcWnbY$4)#|!)U+E)0FhA0PT5Piw)AEx$aZCTb}ixXw%PH+E` zJ$n3ckS5Y|qbY2l%8YISd6~!wW40y#jD-b(eu?$`x07&o({1Ksy{XPW^i`TkruBXG z@sLm|bXv7o;{F5ers}ff@tSYLb)m7k?LNtouj=(FznS$)sV2XCYg!SQFfKP!awLDe zb`%|CINcdq;ZBP;GdcIyy>(%x1P|$IdcgmOAUyL+2IJg%qZji!Ib5hvGxE#%T^~*VEl8}Kv;?Itt?Un+MDwGrHgUF0tpIN;MAo9*!=M)tb zjlBkEAzw9Jn&mrO1@+ds0M{rvPFlQFli3EvI_GN5bTQlTK$cgJu9MWIeL^HwYAoWh zafp9gtNocDd97U&kVc2&UPk?!y6K_$-IbuO$r8G*%fkZuoKlY3Qm2_BNX5Xo>hJN# z^~e6s1(5fSHuS%Pbltd)|Ji8HO})IaL7s@Jue}|sP2g;0s(Q$sUS?i(p=>E3p;`UC z%$nT{>QC>~qq87+2)gp}jc>f=*2D>Ys? zVIE@=P3-ep5wr-_&kBRzPF|(Wm}OT|Hr+H{LxKwZdR56ev#}~fMyD-vZMU^XAqaRs zR)~+;Kaacad&}dPE)rFD+{(7C^Zybx^vxf{H01INJpG>JQGYh=_sKcy89OuED7R)E zi$OFIZuYaK@b!*bal7lKaXEqxhJtB%xFzl1a*BCx9UaVI2zCo+*o)8D5jGTWQ0m^S^xb3=A6!)3PjnaiF#@9we9;Vr+VBaOwO&*{~ef}(KxF9b-wQ0Q| zv-H|1iT1mEENAGb86v-{NGe|nZevO8TU<9T$?-fmaHM&v=tpTytc7B}hJtRy3`}5w zoLe~}3xzS%y+o=}%Lg5`!}`Dc$_=nc3nkc8k(BAu8>r1I0v~lN+&WGM<@PCWy?gA# z|9E##Y&fgJ!+YW#z8~l5lyCh|(MYuEg!dsDZzqHLY4mwMuUa7M{#AT()!ve_w>GTk zlB~}eS#hbc-W$ja(3LswmB9>=-OXz8(mE^qGfI{8#l_(WB zNN!$SzmcUsIMpW_ett<4&{21{%P|6I`tHKM?4B2r8W&j6FXMqfwjjP4m?~Ni{(UnV zr8sd&toLf-kk;gIxz=l(Lxle;qELL(Z)ku#O$K=7q_r!J&-p_=j#x);07|Ntqp5Oc zrzGHkx)Eff#a)}XeRq+6kJqSn`d~(*Qn$0S7x;)f;ftf2pnhkU|E?m zgxYU={a2ISlV5^PKF)43?R&BhBn)omU}eGvV$4J>r8i7#caSm% z{I<&O_;5#M#>oJm)GI* zLph#8F6A%zfh$|-v^m$1g_n8o)Y$#nOrj`+^zn3CZm2py)JV24o_ulu7x=&~bj-*5 za`-vQQ!k-5s3kJC8447V$V7n*zR0IIs9TsQuV?=i1&+)!T8?kHM8nBD-q&jp%#Pv_ zi520LC)tOtISk>AX3SU!xZfFc&&?l$-n-Kis^j3D_C?3{e!@G{CX;?%YY(xXfX9(I1z^=+?l4$0D_S!kWhN#~JwWX`jn-=Ori-2maP|=eq0jj>kX!iy-b5Tz( zL>cMTq|C#BsXtO#|I{~v5ae&~ZOy}Al4!kjWu9G<8}OW^L^_GZu^SGUzR1%%Z%EeR z*|UdpG*>yLH|&fKGdHX99uEONxy}Ku#5aj>BOGP%swj&eaF16H1r|T?22A!u63<2n z>Xsq6l`Q0n0aqS;3XqYwUCfd}d`h`)|97L|nKre1xlQ@8^aYb!Pickb84u*eFkAc_ zlP5Vurt6v*J1#yY(!R;qKB#(|5_~!G%c*{E1+UwC*61b0Mq3i1J(49*q+w`Dwr!*T zK((rTV$&-svyD{y@;6u(iHNSEU&FBiQ`H7rD>GaKjnQGR%*rG8j%oB>i5N6CEeCd? z!e8ojemwYt;#o^u>Ksx$YT4uG5bKP7Lp4+eD6COmA>;iBO}AKr!MN6sYc`t9-}I37N?`T zq&xnjur`%UgW9P8=GpU#x+A@IJ3aMZK58R><}vgba~g(VRxftzN{#>4($nFOQ?!jE z2;Y)~qKiygKDSi+s7tW&c2W2fhDkFlPpjVZZkF=;)NfcSL+o=()?x7%R8uIsn>u7| zMA_YfHkdL84$kfH+nC(Ja2y2@LNKyHhzX8f!`$!(mv@40!LsEoSY~sWQGeo^F%Vze zAEj059X$5j6baYpC-*#H4rJym77NCY?OnCHyHe7NU_ zu7jt^tY69B^PYLzwShhg3&Fw5)l&AfcHa<{T;6CKv3_YFxrPPLXKR@o)r027in3<0 zypDcNRi$89!k1mc|1QM=RcZ0IZLM%P|z3LvNFmg3!D zr)%3~Z=FL7H*dxBE*HfU<|OLxuMv8$go$gPl%iD}tSbb5GOss2*!*)j6}Ve2bU24- zcHHPIp0wYt{HZ|smrf*Hn5W+8*)qRx;XMDz^(^0)1X|Mp_4!b5;e*!sy^F&34-#vi zy9i(T`iZu$)Llo1uKffVF&(DzCZjaoY-tF%W$%i?ald#k9qS&2b!Aln+OFVszEEZP%ol?*0t*+4ajebAFp!5aP$eLfnUnJG0DRNKuP^j;*|`F}3*WivEHO$H80ArdW|K=hLkbG_eg@ zRu1j_5|j%D(e1<7%vTt2!k*p#}K7A-qGSPNg?&08?xg=Hs6Yo zHH1Zny#7e7J;}EQOL7kkN+FSzx)`9h|y*g3N?ITxlXBfzg z+_+Nl+DTAtJw~y-`th6dRoe9LK(7T?Eic)~Mnky+1K-*Y_#z;SDv`j7KHA}Mg<*<{ zh>gYn9^_fO0~TD%YFFuv#USw1#Y33!$?J76x=VYVALyfQF~(E+wM6rg?*IP1?aDB2 zb-0T6d^B&@Nh>-!^Jif~HIl~#5AGPTDJI*4Xq?;^Do(eKVON1axh7f)n6qS1byJ&p zyN}yASw6LM_vvT~;?EMTa~_`fAw!?>tI*7tk0Nl_kK+)8=9pF|a};QNI125p+p#Lo zh*tAMEPii$#>U70DXs8as4q$-Ki3hfs-k3?+cp5E(Epl^8WiaT(d@m4Q|yD2GBZ~c zl>tkV-Seds6(utO+n6C{eGWsp9Ul}6VbA(v9+u9dy^+R7f(Ev+n~z_yO0io$B`}3y zWCOo+JVa^)xCj`&0fVT4P7CRmv+)DMs$b`f0|eqfcmEppinMD{o@Ba}VouH`ibQiO zrM`qVrXEfGB;IHreeQv`Nv9Tl=b>{*76`uJ?(G-CeNXB?BkK^(#NnL zTi|ci`-0Pwg}>YN8FkaoKC!G98#rdf%X(mrSO;;49?n6|;0q*Vh6q-+_{@$hZ3yj0 z_|kzuV(~%K(ry#@@li=FH|kVc9ci91U%6(nDw+DHCc1tp`}Tt5BgeVBkmk8>jbBWT z${~zAzgP?upFeolSX<=pqxCb0gqk7fzM^9Olr@39V}$hw`KR!G@>0y=c6 zk?yp^?(|YTC$G7$jb8|vX00aL-Mh8G;g$nXC_w~s{|h!|H&|KmbcfMC8`>JhW7YhV zYdgTY7FqE7HJj3+_*M7WW~V(5o$V*75x{LVNVM{zuT6|;slvY%o0q83ck9bqvcArG z2VpUUItZ+M?i#srXLUR~wuCfiU~>pTAlS`3;prJAbVp-WhHgI)?QL=cta#ssazf+< z8(NNY2xv0ePh+Dp3eyC45UOvYnbBMfXcD$A60~r0zxtp8j&(NP>jmWc`V&jQ<)W+4>tl6RuEBaMZw=P$xxe(D0Rx9K(-n%I z+Ar~Q0}!P7KM-UA#xq=phf8E~`M&k39!ats-IYXDb>r9KD{tB$nn7h^vS2*;@tSOt zC0e7AzEnE?!mKNFd<2?1_em*2Bb|a?4ICAHOdZ!XckDoU7h|us`c5$K`$#;ZY!C@o zz(rfKpVgK&%sIC$xou5}7XF*M02F}@4#_JSf{Ih9z)!e~x_lPh5#0w}w-)GF*}xRX zws?39#2c_BLCAGXSwG9qzj+yJ{@EP40Y+mjX*)n1ehkYER2YIp*8kg+PQ~`cwzA#a zUUXQkU>N7xi9|~wafRG zS`!7$B=QyMKDr3Dl;@IzLVgHrXL}Z!XnTE6f#9-q>X;6*F&gxO>VT!@jpFR5knmq0 z%Xb(?sR$@b5S$b+J%&W7V$~FUZ~1hOp1js8hQ|!8Bod;+DP@+$EJt(*Ds~Eo)B-jf zaIRfKJz_#!0f5I8p^e)hGY%DTzOojHM!}C#aDnN%W4;Xb_<1Q{_owM~U(!%9<{5x5 zfUxKIPmD=JG4#Md5#R3{+?-a)@{!8JmI+4YyW4}OO@AVj5_Z%UV4@V_sj6Xr^Uu%= z@aNBDlyEU$HNq>YXP$k|clM4qn|2)SULeGY6z%Sb93Hk@Nm;64K)yH}h2Dj$pC%oN zxL9uz>=5_+8usW(!cSxKhI4-?4#_KFe7=LFkzSG>R-&9TKvOrY-s^|hnUrSm0ZiaZ zaM!=%g|cendu@l=!iNT3yUl%i(g``VFKw?RirZ22QyvIt>qBF4rK$X2RrQ|%$0TsY z34L6B0)?a@W?P^s`1G4rm}!@MObZP`85BTH@baVoF`3mD0H*bX8yOuex_aMs!?~-d zda5$9?0>lcFaSNBYs`$wuV!Z9%K9K|jUG#f4B;OkS!P@HY`;XEy`pLFxsv3~;sl0-b5DiW?MM_I}k*f1++G^dV>Z-40{ zM*acMfC0bqp*PA%hco~JUAN}3L`8_w>eBNb8NF2z8UPMmzD2<%aj{_`R7|J}=3U5M z@c)uFE@ja{Cs6K#n;%!7cFLxgDZHswQ>8up)ARasT$4{L_XF>%GY$eem42N=x|0Vu zksWZs%^?rI`~MU9&ZB-SP2el_Ek%|HqEYBGP4VdsLNvz>%08TBs?-Y^yiag222RA3xIgUhH}<2C{S040(FO5ehw$v|_25%`<}iV|M6=K7x)lEuFugeM;7`ZV>Pv9zkD{gT1v zn_l&K0EN~IkNzFmjrf3=U^Yb|_kp@e1b~X(5vmz3D6Js~^(yV0<@~5O&O*aANO+Dy z^kC~med=gU+5>gzk9x(!)wlnn?&Yo9?C&R1#=MAL<$07GxxV@JbltD|pFL7gTkMTh zXg=7&Vz~`3 zXDITLK|WRv{E+m0UexP7#(&ZWB2KU!$f8D#ix3r>u!Er^&BX^)aaIr0eunsP$!7G32z<@`F z*LwURW_uX39yV7;ntdNVYCnW8G)0_-5ifIP z#x5RMo3ALeU9~bCmUuc#{7*QGpRvs|6kGBp>^_S?5dn!RZmTbSk&qAuV!6TTV+K?r}QZWojZim`}hm+OAc$XTr z=#qgSwZ{^vN77>!$e-Dr9};->48PXGG& zeNc`x<}03VIFEEoGo(rezeivQhEEQzrgyu%S{lKxn}0?~suQB46mirL+kf zc;W_ka#R%Pj|cZgUumK>YrF4AHtV)YEwSd{UK%ZEFgK*GG{PKf?G0f!bex}&acU6W zr%k#aBcFOD5qFRJk%PB1lUsptst-Xh;^vF)7Hv6vvIU+Qo&E3Hr-2g&u*YUZ%Hgk>l+;2-Jb+|VT;PI~+X>|tVGb4i6+dz?4AmSP z>8~4gv|H|r!mrqK-}De$kL`P z^rE(I;1xpu)dZxuu^FV-WFSMdr4 z57+`hYy8)%Ld15C^F3BTKREgg?PqXD5JiQ(a^BpJ-j_^jj^q44%F*5o_W5=+h?FQc zoATxod~IB(BflT6{~Y~ZRbS-aKYNIGv)#q6==9!ydQUe>+Hc=`OUs6Y8{H$zG)U_8nB|DD(!Is=}nhiX#)3UUWt0ripX8E2A(LasW`KgwZA zz3TXOD=A|a^1hH)*&vexnUx&`LwZ^}y}zgY^PyAP?tjGwR&&#Ysl_bC-qVy%&2g#XA-dhQ{Tqp+COr;{!z^5g4q&DTwUJjH`A?5 zv}>0Q^JX<=o=I!`vM9$~FfsX}UJSv`EF1^d($nRq+qBCyPAFb+Z>wYYEA=@lrMjJ58x0K zD3O3X6u6ycUX=Y>6bP4>*;f85hp?FApfEO3DQ3&g_J<7P_+rz<$b+e3ESHymVl*db zWD^+Nf+b4rds7Bx|H28S)dilb-cNaz|64U9TJP`r@Rj}0F_p8(^vT+GJWv*ds=v!8 zQ#?{NgH$^-yeU&mm&;yg`@=0hLW=2U>8*yL!ARjpb5RVvO`e<^lRx=^gr>t zqN-2kKId1So~IYqRLBHjjA0ime>^P8;BVM}U?3z)UyN1U3K>~bd+CawT5(~Xe|Q=U z-T}L3Wc}(}0Il5|n}N=}BtKiCokW#?B(a)G)ZaCMkYwS81$7cFG{_Mup`rCp-z80p zu#Yj&OqwGwb7OydK5_FTP65H430V~NaBp#Ip;4FQ?bVrwLyVPoWn>Ct4BY?|o z?XpC4InsI|G#cGH3HM zqX3|vBDnI5>vq5bWD93JBFrBHPHN#L^ZJ+m@1uG6+vjdB6uOI4morjmyK2NHyZ-=n zBf#nLCBMo{EK2&VKg4ZpR{gqy{A6;>(Jyp;&9UNNRehy@DTiT^KUBI~hc#6Z>)V}t z_l|{qFAG`HMuGXa+gt{xql#GYSUDD|;gbpE-5%Y!k(b1pwySE}?YQs-cf#5T-b-FL za2EHN)a6P0qVF&ywyCHU8fYX`NJqee1{XtmZnXYUCa6q(knN1HQx^^DG8Q<;NTQC( zarY=P<2&W0^-B;!I=h~;26bWbcw+TuPW={TA@-gd^#Vd)-JQMC&QFdl;RX!U*Z)-x zt@ITI2C!H0?~>lwmE{4R!4w{cvA-b0n_EQ8P$#7(1yNF~^==J=cDo zirtKhVyKvut?=$(7^KrvC{-|JK1JLPx)mP(>B(^axHe`Oh*227YLcP`-{b|#kAL-Y zLLu4^j69ShzfYA*dOLOEC?Jw8AH)Iv;J;IWPE7j25G9ZhWtIfDc?OnlyZD^!2EzI?w#q60RCbUyz|e7|==>6&xClGRo8jNfEF&GJuB$gL zp8Eln^H;v~D~Gd{3GC!0|B)QrWOIw)T>vV`4_n6F8o|{)-II?xd&7WspH%e4!zZpK zm>@92S@}Us==)7H)(A4)PCuHc`hc9C>6!uHO@%7C9JIjCQp``kuMx0geEc{*1oIcs zI3JJP%v;4i@2BW|Uuo%`_9)G%&5WJz;inN2#+8qm)L=XaZ#E-DXcZV3>8P0=ioansu>t8enawJ~ zvE;v3harUZ*3bW$s($ny8ldojdzNzWHrJK3abw)sO#M%y*F(TSzK$CO2h>aZA->I< zl<~))!U&KWr+aZhNT4|nLyyS`yPXm_lwS2^IW_=9CLpkQ4ooMnn=SGdh0UvjEBZ%I z4P@qFraugH2=3SJ6!?j$?Y!c0?P42n!(z4X(UYclsBBIW_G$a~sw9W!xJvoM!Mu}K zeR6I_ugQbi(jTPui_~lR2Me?;RaP5+Fq$=$Y1M>J^=vaoiydgPU<-tO3fX)2QAg9w zCfk9|mTDtgsuj9St5|z{7@Id(L>L@N!mHT*JL=1x-++g%=ip>7+IYc79HA)QO?)$F zHtvq6COgujlW^s-7UzaVjWi4vSZ2x8Px7CZt}g~nzkHrv(~{V3urvAM56vJzduPxB zz4F3%>iLYm>lk5kRd75u4&N5+f>oNukX;X5<_0#&-JCSp5#dG)cx_8>-cj{-z=n@a z#1Dlv5rcruP3;Al$^)D`wcHxFk)_`*%1aoEiM+Xug3Q2`P+sgP3OA~o2m=T%nX>t6 z>efKKia>~Us2%VhfVgAWe+<&;@{QW}+ES_FI~QOyp7raSM`mnnY$3C@ldATD4=Pzj z!|>Egf)Pk-aWThxo(z~(k3TCo={hfGr_rVMr@?^xt7@>JYb857n=s(Q77+K3j_%8h zuTx?Z7w+J$sV*{KBs35j?gFHkr&9f==BO(Na7N`&(Z7l^yya}=`1TpnevD#Fz4j4g zS{Nv(E&8%Is6-5@snYStP4(gIX7|x+yK^EsfES(He@)+~KO16)^SKG++yI;j6pY{! zb6P=$=Vbw`1JK6PbA9FCMv<1a5^z59l%=CUT-un-?B-y(HhU|sk%QjwH5jgti}gEs z)SzTJ{p~@GP%kQC?p6Nof{IT&Z&P8X<6Z`%f@E40Afr_&BzOsKUA_SeaaB3|zhg&d zpkvxW+Nt+oB|e#wx<>@Q&_^KMR8iuk7V-g$FFtsCcE}Elc|SkZ^eSBO!JgO3{B^8!XHD`^lb@s&doBlYsl~v;F01ki@8aH( zHr623?C7Rzws&BDHIIY0qGF_Blx=*wkra{fJnWB5I^c`aHbWlzIb7r5MrQ>h?D=;x zE%66Tgm+$wEjQd44QnE6w@E-eVyGmpXZh`1u|q!c0JtkS#~evw34e&QZ`KZ z*N`J2ZYB=my7=v>&U67t^*=61b0m39}`d?ty4Q3=no`EIhB%`soJ%I()(K>)Y_3>Dcw@oSv%YqENZa zY+|;x$0~XHl@xE@JFrO@RmZ0l|0`{UcG1G49A>N-7Aim*r;bPiji*@k;QTs*@VoO{ zvgL0&8B-LsQNQL(u4g*fHHStN95I=C&?nV_3fp;4p&GKiyXr2F7WX-T8Tc%Kxnhif{%P1g`uw}jIFhq1Q+ ziZXiphCxyqX(<6oB?RfN1yQ60loXYghNZigl2R!tDJenePDL8&ZdhRHrTNaP|L1+) z=b3run{k|3W!T;OKKD7-^{Z>i>;XHjlC&W6htgs|GV)Iv7O>+%QQB;!@ITZXW+fMjQg#76Uey~1|p2{bx@p{8zx;Dic<%?oP~ zG~0e5BW>EFo0+7QCAmR7(!0@G2;c!`SGqgcRs7m{E_(NJpLNfd2wNc?ifGW6TQKmI}$<2G{qOw`#ID77dH896c0TqS#p z1Lh4cy(@DY0w&KqM1;NGLg@sLT{KiIa2-FS$o8ekTC!Ckm^sefP~Zl!FER;zZS) zK2iS#RC2!7dZ%J25M%7UfZZW}eBNNhFL#0^Hy6PHS!;p*n^`wZ49-E>`H|tYE*W)T zXz~^C`~hE@PeS44nM`F!qB8fy1r)bqe{W!N%KC(SiKe70B;@v}EY}~oJ0BgMGZGp9 zt!d6|*dJ|dC4I|*Mi~p-VCsMykU3wh5@Oj`q4NKL;U(r9oj2Yy2c2*1k>M_Mp4$pd zn%m~&SzW2(a+mxB&2jk{|K_L4Lw!-i*~isDXY)ShR#z6sg0?9-(-m}lb0zaKbI~ho zyF+2x$c?x{Zh}C=;O{88CP1H*S`_}n&1}&SbVD@_q&kB2Di1J5=6u#!2zf9XXOk=5 zgT|hv9=A~&C`ES$LS*gf38^=-frNRxFY?D?BLmHcpZ3%>)tRLGRc%u~`RVYVFKP$g z$&^0adTHmQL$@I211jIm77-K`uXx?XVkF(g_tmf5Ph$ox5b;ygU;ela_f!9yC5b)0 z5oNrn`RQd8*OPC>NQGqRQz3Pa`M@ug%+lV;#`IYj>tC>`H`tde4F-^l*YZb zrNzdP{PXw*(%@KCGH5oq)?I;kH15D|3H!Wp;Hf zL)n`WW$}*@_rvQyqc5961FSQ@)~QO2Ma}Kxd`2k(X-OUxqVOuTdnDBM-X1mvX#M2` zhT#1A^~}Wl1+5^GF51gH2WAeYZ81Dm91KNj<@~9$_-^Cb*g>Al`@;u(AO>`bq0MF5 zf2*@qu7UAk`MRk|0zoeOnb;>GT%ZEK8-ET+cvTXOkKkmKL5C(W(j=<*7S48tP|i}m z&fjw}FUH>2p~Y3Y9v=BXH`6>gH9d8p?5$x^56W-v`d>LP6n+(=sDr;dG!g6U?z{?CsEWUB)dmK7&9-H)Q{7e9dE$t+w^%mH$iI>ScK zjcWVWW(^V~(vr;ka=Ev4oKOATs?$*RfTAJu;X2iGP-c5%OeJ9``tPA|(mkPUeg;&P ztc%)GH#v*{d@?>g)Pc+O=fI`*2FoDkicXmryu8Er=QBy5K=l7|{jlVt&7WOAPXD}e zcWligap2vMzVQ$js5jX@`XeUI*JREeF)Kij|6#X5t!8Q~-jo3a%57NY%jtiKUBs);gm6?#n0q$9>?x`x2I$#0*0(&O5+tTX3T;3dCm zP%Cn(>{0R-N7CS1a2J2eI~kO!TFQp|DEE=nYS!|Gv(A}~3h+l<`%Y-c(_maTW;&;R zPU~m4cbZ3mx4?EZIcucqTR0&^mxsFxh&-H=8?g(207%rciK&pJ_2=8oqrU4`g}-Zx z2J7zqdUvsZ%cxV)Kyn2q!7e;6&+7X@CqJIhchGeX#~`nJpz>^^3K?vWyF<~@&ucB_ zxU3KenvpYg;rTRMDMqSzRpM3dOrXmUmxK{**SG(0R_bGpAR?l5#zm7yVb8$h1US`2 z=O>We+(&w!!#hW83fky!w+o4ijpjYUl>U4 zRnHDgJrZo7cQx-g-~$GVfWQDtb8~t_t*;?OdMSp-zfwGV)kEE0+Az$dcryP!bhbd; zo_q9O+3gjhnz)$t1_0Vlog=cdhSovzmOxM0qkd`PCh+^%bwKoHe09S@2>gAFS+>B6 zK74qKMieM#NE36S|Ey?v)S^)zi8uS(_$q-5zPip){P*&s5TtZ+{wp_sc;`1qeXaRg z2U2?3FVcPwu*T4Hu2JlCBn@uKF>?q$jJR(2 zYw|JodRPC&Qpf;_sXfrJneLk0JP$~nTEJ7WhC=WR+}=Ni3iJFoTE`eg>ogF}p-7!X z@A;K2Vl@}L5@Fx!P=Xjd|G~oMqvrSK#*mE-{rR8Wc*q)x4+o&%3t}jpR8bqXL9QHr zW;}3S*l;#@LMf?U^FeY<$Kj}MkSH}yUBPW7Rb~cMMp-uW-qRjo2A1ZPs&<<<4UiCS z<4rsRq@tiGP-2OjsGsOOrxs8{|As7tlG&Q<)U6q(OQHL{~Y|C+J7uq(7qa)U08 z`EBoiyLp|gJH~lx!Gl!$hT_sGP79-S(HI{9r+hsB0?Z+2Ou?xx!fh;sC|rx$?0NV=d8k+#S%9z*L z@X_);gU~E4j~|msfzBQNZc2u)j@A416)1oq2B2t@it(afKC7_)M++cri8qt*cu+^3m8BFXwQACW#9nV6FYj-?x8IBX;go4R?7ZSZq* z3?sPJ+ww+UHSv$54;h#Fewr1Wv`N0Yzp-NHO;NpLEWn=tzsa!lA1_c;93UNhgk@4V z&UTlTFCG3`ikdq$pS@rN6iJu+(B9MB^cquHzIZW%*zY&o2Z1WeZ9|q0J}*k~zuZ)* zM5|lvj{+S_#E*#~hU;VAiL~DiY51Ph@+|3ros?PHTK)Oi7gPt3QFG=NrnH|tM6;)O zsM+?k_GkdR?vau>^eu(n;zkpf@DOko&>E5V?f0{M?Ex^*5U4>3hvk5T_pUtRW!J72 z>I3!Jn}oy?pSbW0i1Rm+T2SRPI2Y}`wO=L2|5>Ugf4qn&StKAgVc@{%9sUp5Pc(LP zM~M6W$1?w7-m_juwG@QNQ`=^iDyUpo@M^~^4M2CoDGj*{DaWX3U@VL*;8YY zYE%`+91KaJ7&WtI^;S~4Pe!05-QFx5L&KeP!XERD7tP>#lqNfRWrWhNQQjCEPQ8uJ z6~@IU%oaJH>jsFuz6V8kj+3()Znr|CsxX7q8(C+GO75BXr7r0abGS6nA3~N)^*;SX zolZJu4;~7$#UFKz3NfR7ar0wS=>Z~0FDa#yPm=RQ^EzwwKl1%_4pbBgtT#wZtz-=1uSr-lQ??t;WD$Xx=q6By=8_eA1<0u5M*7l>Xt4=AiFEsC=z<_5kePo!Os zR8HBviI_lR*i%@~(k%0cyQLexbh2cNi{DZn-qUP}$EmKytxkBmw>PvJck**buijd1 zZD#>n9ZHfQUhM=MKX_XrpQk;dLKM*r6oTMHnJSg&0SO1a5+SJbzzv2 z3yO24Jq_#02EL@xo2R1>APS|j8nsJ?xXpC^#|@*9$>E9Sk7`lMSv)ToCAAK)B%d`T zUSD|)>Z3|o!n?rIwD6r>iEZ%iW9GaU?)7I*&u8j0d=eb*a!2&$2JDJVju<`49ev}G zYbxAi{^-GDu%Er*aN+SuY^laO&sw>hO%wZRaxtTC_1AH6iL z7fJl$v0(M=qXfq^yZ5z3^N#FA0JYOF zP}b4}bn2d`St5bn5TU|3n@PCi0S(D@OFe4>`RxL96BmX{D4LG>AO96WpdX4}jIwsK zr;j}as-K7V#L}cJB^8o)d?UO32P&(~d2>!;ae*^vXs6FZi0wU1B81O%pvu>H=jGYk zMe^hJsUf2uw3~&DtfOyg7w7A2KF#BfQM{MA8k7EQvvjKPfIko7hbPl^*iFt=d3WIF z$y+S1A*YCa@8;E^96iBA+gB_2aJ_-A@|=Qer5XY!sb?GdSL=JU56ez9E#YAYUo zQfSqCnUp0s14JxXP`B($K=D4{Lx0jb*^3uxIsgkDadI&pl%&Y;$QA9o)VtzzR(KUL zs^oXO*^XMzq=ek!ffz$rHjHQ>WY$yL_uLcZwqz62dJ*}PPoYUFZH6Ze-C2itp57YH z3v_0)5&g==gctO+N%}7y=8q0c{eaK{xxvbzN1c!vk$jm6-r|w*)UfP<*;ndmbnHa8 zs;|053FRnF(e+1O0A2=kL47s}hwWnm2Kz?BUio}poW)Q+2SEZt%#IIVdU7CM`CR$T z8g*n2d*8$-=5?mtrK3-LTAh~_X1W~&Z&UE;Gl37R1GB=U*)a1?U zo2y@mzg6C&K43ghTUZ+g+x-AAv?;GBbd8tZ)9>kL=nD9bQmq`j3R;CIL*~UMAKapB zEX<2S_w|9+AAiyEu9iH93dw!hvRp$(J|YcwHe2-)B9QSt`b39~^^ak#MB@FZk(wSW z`)`CUIKsc6P|yFzp$+s_cJ`MGh1`>$%Vy!^DN_*Px!;{4pB6H#zgGxT;O)P?24#qy z-@Weex$=!hz<=4*-YYeir1PmLcrQ7N_WB5I)&aw)1(SvL_xO9Ek4}bZc^NkK53WsC z-Y~>W?y3<*9!>~t{`y|ipWQ|5)Ep;gi2Cavab~Lm~~(cD?L&!s+;_ncNq= zp)Zc*unE_;-F5J{@$IasakY;t2VGbZ0(|~s^M9CXKX#VRGZf9OvH$S+xXyl#tL>xN zHkZ10^W>{BC9K>9`qKH@!M!`}d}r>qXLMW}Z!-m4o3@-AF8-PBJbdpcm1|U&G<)aE z2Vqi(qL0l-<-$)>!?@7Wj;v|nR48S%jIqnekmC6>2j8RFoSk`k8OkBF{MbRZ>7m?k zQWOY)8?n8t-IrA)0*|XB+1k9i;pa2qUnPnc!G$a9t z4#)1*p%_s|elxzzq}fh^5ant7XO zdtdMGy97dX%?HK}N}}Q!L-^P?sE8$ypesiT-naLzreN4PPRxWYx${+Qd(QxEb;On4 zWsR|-S2Za3m8hI3MKKULRP2mD=Fm=(>FL7g zM)5(OhL452qw~8XKq{i2f!+=4!GsO0ct<+=qesN%>sKY0?)L|5fyLTGW5Jz^OnHobc|3e+ zcRp0VV1^R4hqdD<1yaG?_8p$9WK?^(vS|$7EbLo7?tj} zkFj|tBLk-ub#7aUDf%+t&wj}GujcRD<=r+ib_&VA1h0>=Y=gYVW`1pq$ZRCtoNSu6 zuScz~yI56~ukKR}S#kwkdV}I^w|v}Od$uqFqSse`hdE)>1u?(E58OSJI?mVPv3e|I zZHQVXh)7Kq)?Go@x>Hg&Vx2x)6a^bI?%D^C_4|e9M>pm$G=BlbW3Bt2Ach_pe>g;_ zGSThh{)ubC*dEjRug6a%C8BH^S$+u$Z32tmw$PDI-L|(RsvinfQ52OD3VpW9vq1Io zn?7QkJu&6>QTY!73&cs>JQ177RQ@q#iFh=Qx5MH6XJ+k$dtrBB6T@b2Gy>QvVD;sRKIJ&G(DJ(tl-oTRyg zCss0l$DE(RY6$!n9-ypAQr`LEC6PMuyz^0LD;vcbYSct`ocTL_|C<~jrHJs6pwfA< zDi3;n-8T%2&%}hKXv5#5tLJUZuJX{+%=Bl)LM2mkqRV)?zRqsG z8b(umVXXpG=__bL=RiZkDLFt%;2a(EW8si|{C*Hsm3TD~OU=hwqB_!VM@RN`-L@sZ zs|%tT6b#}Vli^DhhTgyG0)<7GCfh0)G6(i%vw0r@vf&P!k|*yeNHh>SmN(Qz8oLlH zSdm_eN5=g&#Vqk<&kT#o6Z)1oMH5(XoaP;C7Ej4IQIRFUA$~ukZHwih)XuPnHvnlr z7((_=5`yl?__v{{y9z(@}mi6EbkRaTAj*Vx~g)Js$RP>IFvd6S=fpE$UzLWv?6x;AG>>K!3~tY3W*MeQ$HT-&fJD^%Q!a zHAI1=e#Z1Sff_jwdd#w)C{NA(ZeOr5&cF5`scintv_D}sOrJh;7JDX=A?&nyGoJ&< zL}0|q&=erJVsw-S7Al}GG3~Lstbc1$WTG5M0!JxKRI6&juS_qXdKh<54wSZ5K+yeK z#e-^00uNdofeB3sj6hotx_k|hte0R`LBGG5fK_vKy!gn8+E3zLQ-Wk&T7!t>{}PNW zp}Rd>#WOLxIvj(=y~x>rsz~ka=WG!ayW2fcG&*d|p8BK4-Pn5Ewu&-shITjQs`i-) zLrTRN2l|<{A<#j7;Jhwkv7c#LZBH)S-SMkj5}-=a0A-wRYyc*b&}9x{Xr2xt*sHJT zpbX6dQ+u$%KFz`6$-`mb!pZ5=NvHC@V znnV4`>e)a<14#ZkzfD;!HH}B?cD{oa67c&ZU8CS`NS!of(hX~D&)a$0SJUnixxpOzDa1q&Iq-Tq_?L658fRl%MM=u!w>LA18{2>`CQj z7dH*}%h&h&R!#1XHA5wnQH%fCzs2vC@bmYZZ{m-lpe3|>vAO_)pt_SPrNHUqgoO(O zX(~_4YYssCfM*EYG$W4+yGxbDZlQJwnrf@y9sn1?_M@X+-i2WEVHs3&TQkX@#eOnL z=L)h7BE9k5?tu}O{GM=-tTej=Kl&YvuSI8m3~tZ7vQ`X~-qWE$gDN|)nWWma)7`x1 zW{L^3Wfak0!nT3+--d>$$kYO6ur*$d;Wb+NEpYUW50fK>obl1)V9G8iiJTkA$$3G~ zz#zJJGXKNZtt0Q^+Wmn(oex9JwrP1jUj14oO6TLa{*dM4z1U^El67N#^bZX*F>!pd zkkR;}Q!PvU0k`!SzPxqbdgF!gTum0V!kQZwXQ!HDg0L6!Q9C;x2Uyr2?WdC2o}dg1 zkK{g%z<9^v#rs`W;s}@Sq3t7pHUPn2Fx4jU=ZrKh)p;~w49F=f*{Bpc)An`3+&0B4sP;T71k|qL{NU-Ut&E)k zc8p%Scb4-fmj#`6FurjEua3Y$W4-SB@CQi{m;n~I<$#~IvK_dwiwr}%P_0z&d&Dc} z6DdwbwOp;t^-D*bR}zxu=^%ctts6d92x1%0fmRc}`cEjw7S7iU|O z{ER=(5rz`VUs@}kd|g9WmQD}jUJ{mIWVJmYHxws1PnEr;^fNl0SA=>x!aE zK%&q6NRZ$*PIh~=A5oQ1CRi5W-L_rxmeN4?thwm6$r5Og%awc#?QlYOugbnX0i^1> z<(H<1WrHrRtqNjHLNT8qY)&UeM;e8#OO3PDp$Cwc2lPxlI?CRaOTDQcH@K`0p4#%X z{Lvqc$I1i;>6-R{Epa{E8Ev73Y3p}1pAiJV-s0)w_szW8xa^@vpXyhRY?}p0(pUHl zWTcD^v6x0k@MgkR(}7QLcFj(Z!c#DP;n*OQNTh4yCfT?(VF zVDg&`0H+7r_y$O}wX?-)iALe(`5yhgBTq*vt)^bcKdbTEwpL;s1GnT>%mNvoj~?XG z0t=Uc_8b4V(|Jc1NRRX*Vn0y_azz)|M8i~8%xU)N#36VZ{kLx7OTQZ{Za#|Bo|>r% z!7o|5q>XDiEO4out|@m9s$U9qdOvkCv!9{rDSAJPD?c(ylsc$&fUL9R#T3`gG4WOk zcxIIqRV-F#HpdAYG<&d7)!d$bHpsl4%3+eQ{&7*3-(g+v`9#}bxfib`*UZNTbx+<- z@fw!)XEpcZDu#5zF5-fKbBvN2DhfgDCtJU|kCdOUz5bQXYi~$%&Gh6Ps5(bA)kUK5 zkSf&fs8+v|lcV~2{wjJzp?k1oC(^zQ3X%xhUYqwZ&U}}Op3LJtBM(;&1pYr%P*w9& z!fIibCz7p0X4mQz2E+fc8!DX2$SzAL^vXYE@wSpOI1dX!LVrIa-2c=#8RPy}ToW%F zAMQ4uk=J`yK}o{Azv#kEDXch#ZjsG6kZ8EDgfSSru^Efc()ixo`pnwS&nCY|n!=b6WXbBYpu{Vo+6Lys}l4;|R5 zdc|wfzhtd4I%(T}&kmZ{G`05{HwA$k_gQYUjdnUk^axXXgpFwx$9=?<5Le9wy1o>w zYkA@bh-aIOSBpt9L$2tF)RuocScQ65Cc zxa)PnB@=Wmy06Crgy0Y9PE1-?nKrRCVhtG_S^PRQZfBb={C=aaqL(m(!*hlNk(`bR zx2Q=LjDjqLphh##8~sOx7?-scuVT#awz_07q$_c~;z-ZieRo68@&2aN>U~yNo~6)V z?8qRvqz<4)a=7ZhNQDSZg4}@k+D^vcE5dm4Gf#SCbr*XGWZ?TTm)uWM@*|(66QhNK zxqY{6RL5L6Vm~H8Te8G(GmsvNx0s%#$+h5f0Pxk+=Qt_e#?B+V=O@eEcR#**bXUPc z6Z=c`^&&kbA_w50UcRz;cc*(uKHzQCjd%+5A(dw}h2H77a0A&1yIB1Hkr_n4b`FAX zN@Y;q?uaWoJPp#}a8Ymv7Wy{CG88e2!PHeV*ydux#;nVC=I=R=_$gI6g{ISWy9QZT z$GBLtv_&g3C+y1@xp@zk)c^S7;z+Y~b!p(?RPou!?Hz(jl8q*q^Q*X4qp6&pqDTuFcL);+d?9m{TRqB-D@@xunr}8pr%l@Zr1cn$}pI z8MEJ>3#-Q}wa~eg$>n_H%bdsZm%n>)pvHQ3%{wCT(TIEi(umrL(>13T&9o31lti~6 zKtI3|2N~GWqsBjT_p%`pe?QSJv`({btlK-j5d~_oRh7SHH;|PuwgwpsJ=(84CF+)> z11s~Zh+t!^uouZDonkPdTXJ%{L-zCF_D-dDJ_q{JPrpqpy}k_Fp=>yMQ2&du zc(PT7^0b4#_+#AM?nOH%-PHvOsqHwkgR;z$CdpuUp`}ww%i_b~xMSs+NC36|B#K#x zJsV4IEJZgL@QawmP+AFA;z_CYk6qrBA1XH<4-*r% z`q*`tKc7|U5=vBL`NI4ABq|ywGcw_U@_+0cZj#^PtnM0ARA7$?qL*?cOr{fw_oIJf z@}q0?D0-6EWv+jLNmy6_f36szZhFD?{MNRR@6qm4!<7FH+)2XnY5@c-9VyQlCQP~) zCnheICd`1|g&sDdR9Kr)P({!df0?D&wjqlcMhN!;f|jpsW)ms6jI+^-G`Sm+3sF8K zwEpn%c5TszgBkyLlazcdmUq;n1s88|=V0b0&h{cP7-dDxxB63B$0b6{ztjqw(fv%J zZ(5K5+A~+Y&Jc&wsDsZ~Ae#o07^`H-yF7WnZ{-Vjt?=9 zcc(yAngtQX=UD$YP;IiIs<0jbmDY;;K(|mU&cY-~r)imh2Hj=A9d9ZuhsNq=)W$6N zfCH)xIpp)=`V)ez;SFTxQa%`dB}JKwBNXBbVDYHT{@H_wCIe=(T1HUjnV*4p8_3)T zI;9P+CSe#sd0wDr0RJ2Q+muGz!SgBO4-_ut-PtQb#U$2Dl?z+z+v3_B<`zJboO&j! z|6D)H6MpPzWG9ik(*`wfW4Ni=FB&LiRl4kJ)%1yMX&*OEUhEvWOA31rlP7u8cyL+7 z#09*N*d^!ZdI@|#0cMO*P;#-hxqqDw#6hK^w}D_m_||25iGDg9>I)em{+8@_z*5UG z>$@k2mF-5oCqA|2x=QYccrG&aU+Eshinel7C*K>HoEQ-J+4FS3bEs`&n*$j7}fa`|}+^@f#F$t4XhDbIG)M{92o__g{ z79h$s)mEx4MZtZS5ZvaFu+&}e3lV7pfB_LWn?{97-FyGV&qmjm5x6EleQ#vw(;^B3 z>3NErnQ^!4T`&nwMC8Ft<@Ty$WZ4Scr-q7pJu4#G15GID`{sJZ+g_I*W=z} zry$3=i)L}UTa4;+VXM^V{{*XBq~TJXp?V?)9Fs(!?}!uMO=VZAG%=A;p{o! z4LGZI(mf}Mw@nrvijRN*m5KQJT>o(NYK(BuetQK0!UL)Ec0|gHz76_PU|3(WGTf6T z>wWVSS-+Y0ppvO9IeCNsdv?T~N;C43Y#!K;U8WdwLb(q&{Fo-YjjfxO%_F(qKcnuVF>}(r>q;!<<7IDGG!HlWBx-N_M?7AN51q(G`*-9o& zMT?)cn(R6S8LhPeHMygd$%yC5xh}Fpfp1^V z*bEGh&J}wLi&*X4GeEk|YRrMfI?6`iZ>XrS_j=mj3$&VpDc&wk4r3Tz{j~>^2iVN{ z2lmjT3oVh4L;twOt=dn=b_oySHL7=bI$|f!Tf^V-ocpzPE~QNAd}PYelsmkofWJ>3 zPSjs`Z`gcT|0da~A)Tjg;k+bmEPb3(nQ%~6Yw6PE?ep8!8EA(l#`21q4yj};Vkx9L zZ|}ntqsRt@3`KcivpRyV{eYuzUhC7xBj{q-7&aDx7uV*oaA~R9g$|<^zZH{-(Xsoz zqsW!Up5=b~N6ijiH$1y2(_#9tQHGaP%lOUy*pV`hS|M*DB@%}xOj)hbX2g1;SZJ$@ z4Wl|hH?GBmN1-XOaCN$En0%5R;dwqok+CoGTL6=D*Io^B`<9nDh}9bG;>ju@z$)>q zd)L{jS0=Uh%lXaL{5CXKDh?dT&;0-DiryM1nBSpf#9O=j6c{pQ3<)QD3IN{>8gGyJ zjdgl!=j_ReRe}BZ6!ft)+cQ%Z{IXlkCty<>sW(zbmZXx2V2TMH#5R$N_AIczC%@fN zW4}P3@A$r%Z0}tHi|93#)PQzLSy$nAM=9GQ)6c#%n!FEiGb4A!&PXI6tK?mE7+hzn zPgb}Ii{5s{XqsF1>X$q+7wuIi&fKEvTD7bhBRBA4&G{(6-^%A-rw@7AdU)K}TCteu=$Y}GP0%~mq3UC4RDL%$8ov8*C&z*|Oh2TRq*>p{ z;}BzDbuobkxPW_8O3PwH-Ew?XYtA^jj$9Qd2Z0&y6*N>Zno47tD44yV*<}g&(zgJl z2pGS42|e3eN?-w5!(KvY_{&l36j(UO`_zW$7DZXG_C^NWP-zJPrs8N+3SrFX^uo*{ z;Lk67LIaR*s7qcBt2XK9&)snz)ipxxoMoVARX*Lz~Vq}b%p-v(isjYlsjn+U6v(M_)JS{k;SU7Xr1iBPj}@05@W`!xtM zvqTtt=_7AApG3dV_#Q2<{g?)oNf7#ZPCdHQ?fPqwT=7kX@U{jOyVxK^2Rm@7W@c2} zKnrm8Plu%)b}iOXWDX2|uYh;&d5!=xDze{u^s_8e0BH$z%}iVotqh~PZ+V8l=RK2{ zMiaX?vQLO~2$tinT{;b(PMN)ejjJ_Z`fAt^?nt@k z^!A}siFjXWQ?#P@k_qoN2-U1r4F(b{mVs!BYN=X*=mvL@<9rmD%^5<1PIia-zv3M+ zYin^94Rsh*W`1}7Iy7*j3?|!NY7AM==1aW>Nu|->SI31Za&K-(p^ceZ1a+4xQ?2z? zKaRpb&+A#l7wsj5S?Tn-`JE~ieYdiwKW`h?^{w$?N8D@k6Xf8q7y%Nk6e@7p_&q#} zO@)g&UP#wc^@xbnfye3p)&U|*7QEctN$nHH+CDf>Ll9?!o7C}^x}ta z4}6aO;+XMZf8&QX7Q|!t3uR9Z=MqY)@J(T5*6bZC<-)H%&As^40Z{Zav!k^jXZk`3 zEvQ&;c;SQNnQCUnCkT+>KGry)sbdX_=dtMX$cEQNdG~`{31#kkcw}T z+gq|2B!L{HXscmYD>lPw#NEPGI(!fJmV--SVPHG1qRlm6R5L4lST#e5jhPz48M`u5w;CI)99opE9vANx>wA$x}gXh~cP zc*>Q^fW2;bePcNAlXo`4GwfAxSmmq~BkYTi@9oGqJ9HMacVeL^W%jJf|IlKe!Gi=Q zhDc2h5ggZgS_-xztrZ5ri$~9RykL#$&O)A28}h_UNGkU9Hpb&By2<8Ke_%df0fLaD zI8Bd}zU-{JCs9vUW8{KL+dnf&?V=@=apuqe*ga~!e(}sb%GyJ0J~+(1jHZVLYVbnu*hm#+D1Hfmy#lCm_g}hKSxPrdXn%3H-jwW?bT7GwAhH2Nr@s6$ zlnV>UX^s%5fO(Xd1@42$Cy~Py5TI`0@t{S9TqAwtbH+WH10X)2dw`Fq zZ)k{UfTtzG1y&t5@s~>vN8|19M=45-dDn%^(6idlc&U2Z4pLPU$vfm!a5C=hk1F8~ zAu(n<0U*^AcP?eanG5uLDLXaM3HHk2%fA9O=cp)3sN){ZYlM#|??hasN5}3L&QAns zQ|>0_RWq5?q!AS^U3faEMf1L4Ynn?Icl8(u8XkHoK?&9Qlfu6Dh0z|`9+7Q45} zFeqlS8*ZV@$E;}N+JMdhOHJnziNd?T=c-{m$fg<1tU{3$Bl6fdKx|Y09Th`Ye;k-u z;`vSJKksy;2i{33oIn@ce?6`-ivKgC!`ZfzPL9Keyg3P=_MnpcOrv4BY_YH&X@DzP zCE>&airK}1c8)T2rEx8rc@+zKW9>w0rN@QDrbI-$YkVg~ZJ)o%qCYRWXtck%wcKXG`CASz$ zC#|Rw<-e7}MA#MYTBi7v%!_RnR%&{bx>mk!zegV@L((^wUzK1KSpJamN6p(SL*Ph0 z{dhK+#cNNG$VA08L0QEPs-JmlFa!XLLuuWwnvx;>mNFeXnbI-ijd<$YnTpDQggW}v z^*}XrUuACWw}^#}NJi}(3wcAu1NY}-W|sFsa@#Nnr3Xs!#tk6@r6}QQq9s=W#}W)^ zn=(WHtsHH|x@g4}d!-06YA@#3?*yu&m$VZ!g5DXUe162xz9l>8SjOsVdSMpsjfB~M zA(KTbd`X?mqGJsopT{JEQVA7U;13VUbu>iHnfRL+)r^N$a^19S`TVKlvR06bDPpPvx{FC zJATq&z&M?liS5far9@pS$Rkt~;dfJHLry_Z*|HzY6n1@8VijBTCGc}@OA>`h>@K#m zrR`IO3NO?=iWk*JfGHXl5Ve1%O~<$HSl#rXAz=6kB#lq^%5xhuQz*SfdXx&k@1AP6 zocP2GX2?&o=r-(+I8Z&OPKo(D(dNkA7d@1r&-kaifGN~3N(l|BgEr^;K`5m)AOOd` zf!0vo?Dc&s?wt)Q`;7uC=U&Z9feq>Q_5%6X+dCCuPlZ{y5*x-4Jl8=&l}VPqp;dP~9UTqO zDPGWS6b2UEOuq!{m&h5*L%Th9eBS=-dMnM%FI8va7y$+ym2P0+GBNea-0>gC#SQbx z^5Yd!h)_{)$IG(d;0jp855TMU<50G{bqiho)-8FCjUP!ir4vSLOSL~}%-IDhw9;qN zCK~#T%RJMyeAc#{(o^9){ol7n9YiBl^a3OK&8;7z>6W?~yS@*vq#|;9u(oVZis$t~ z7=DqA)^Rj2Nw}nH;9KaPH~*qkgza@06D2HS*C(AKxj+N?3(2J!JwJ1*w}j(pwj$QG zDAI&~?QY)$p?A4rlVqyVYcz(Y-m&V|QWgIlZdt8;i_HpGVn$cDsTkSRmS#&W-1vd? z^01-LL&;gf*HuHL7weq#nrN4GGE$m=&B`zWK3Xi%;exNHX;6j6oN@>K7Wnht9?YLo zt7csbdgOI(-%ER%&Q1C<{$l;^(HSJHdv4_IyL0$lV!zMb zCo-5Su&_acY7%u)u3JX;NUF$~vvR-W={QY%tfZ@063|KYUr)PDbFb^}YGF4_3Rb=2 zdCBd*lk0ygg!p)MdSgRUoTQqC(9nHz2G)uOQG; zk0_cdbW)(;Ray=w`_*i{JPUT_d*tG;>g&%S^`5tJ@EMctj<5b4dt(ILVvJfu zFG2^6tk9mUI-ex0rh6S9LHliVFZ85_$!?b>wU^UCv$^*zw8*+lR~bZhJRDs@TBh4in=u98ozT%7a{CG-_(@7{7O{Z`=c{4QMc`H zJ8>Aruj!XIagO$%l!7_PbKbYrO(Z_>F((N4cvcq@B=1@^pD9Hp@FquG)>&3W8Y-?E zFgZfDYYL`=HLYK*cDQ;|)%XO~3cRJ?p)rpraZ#;QKk$K64xEP9oDsF1Q_Ph?41~R# zhBdtPK1SNDaBIttR)=wHd?Q}3BQaNe{wnpAQpe*UZn?2~SA zZk_cU&Eg}`RN$eX=f-?c(7}q}t@khaCHd@4$7_+HSb}k!+`>}%tA5o4cHefFUz`bR zFFSGMakdE6m_Etx_TO0s1*qh5a`zf~E8kix?8D{<+(C?v;X2AD0faj4Bp-GF6g~4s z`b1c#>1^ax7~BGx1=DxbKOW@g7E)!lB@IB1?4(nw#-Jk}Y3=sOGC*-B^fhiqkEm3e z)qnH2jO})utv}oIX%e&Z|Dw#3_$yyzn+#z}Ex|PTL-JcnXpZIWr=b1u;PRMSPI+A_ zmfkhp80(VoBwAH#fdOmrmc%0C7hgAJOtOnUMhE&Md3PS_3{hPZWi&IM&rSQM{Z8W% zfHF7k z@-3hS&o84Gf7cXK^+ZXkI$`U8^S(6H|G7An$X--P`@B{2#~et(tpE1BFx;RP#K zzUZ1E{wooPx;%#_^xGoi72}I>w_1v95}#9e&B5!(O2yM!RTI|9t3&9?Xe4W?SgkUh zKg|tpsvE4O^lTKK3I#lA5^3180 zk{WZV@BJBM?b}pjba3$%Mu?vC>NI1kX8$GJNHwwbB|RADH(LJc@fB(HT{y>Om0R%R zO+p3yR^eSnc-2qdqPgQzjnVJ0=Ir6VM3$wBhYcI@goqcTI|^^Z7HeIK)Es7RB$1DC z`%x>9?eNU0I+g7PbnLos3=0Z}?&ZiRb1i4dh22}5=8z>Y(`IxrCtUA;U7gp$Ofc3T zp_b4f$-N&e*$>-Hg=7nu3EH+=W~tq)CKNt4>A=Bd5hnMNyM0!-yozCG<@O%`%KtLC z6S;i6N!Ui%vW*C>XeY?mkY;pTqhB#6`@+zP8fmz<7_~bf*^mLNCi*crku~KmvcOTo za)_D|28PaPKaJW9{f_66m$p3c*{DXN4^jD0l^ z8-$&HF4?rz%4Q?$4f0Zo@zWO$`fMynKVY<*h_b)f-THi~oJ~cqD@lVfuQpN3@*wf$i4pFyQ zDy}9Q3tU;n&jz={?MCHkm&-Hf`Y&9@OS_wguO&Vcb-4IilHP%m87 zpC}Z-;R%sQiQb-KjoH-IC(X}elvvg^Iz@BDBj9F_GQ7{_(M$tNdyMbWid)e!1zx(R zy9BcAeoJ+Ce7)o4UjDlDOQ9Z_ftlACAGqc@b=f0JD@{8qR;9QB60VNLh-3}LP z5$vIeydF2)7^Ir0R)eUktMHE~3hPk4+?E%oNsDB!AqFA!zn^jHZuxR<@rDI75OhhC zH^zB>@wj2Mz1%|CT^lqk(BeoNRpYV0L*&}aQ4-U+Sx#(+THvEsd|A#ec6F)Wm&zZ| zPunkwF%RS@b@c4)u$@9C?#U}G*^`YmxCbu6#MqdGO?W#N9IaaMZ=EL3SxL{6Shp@1 z&<*#B7N%(#FzQU3j!)=1t^T;~k&we9S}~z3o64;%HDqvz_nnT|@D}%t^O8DHb}utc zxu|^;Poesikn!gHj0CGt?{-INjB43O9MqK)Yz=R=Wo7@dzkG}0_KheT@}~!ciRE(d z>pX`nUs9c$Vi#rdciJ=JbR5|mw+t{!SE5aO@+$v|ZQH%V(LQdab7wkhE#!Uw)I$YpM;pt%0P0e2vod5*OPR19 zB<-|by6ME;yQ`;Hx5B?F!XoSGTMR?`Jv7PQFH!NB9GxzD~T{8@__c#k0t zGwc^%9tMEx8FObE?IRJyAe6l~*=bcp*7@uFOU%*v?xrXqjYh+(k1Va&Lp66^_f(EQ z46jtQsCI-d7MJ+E*j0VqXAjj*xe;THd&PGD;(*)p;VTbU=KzV}`WKBlS87UzZi`~G z$z!YB+Ppic(~#;b>pl)ksVMXJ_k4CIjk3v=~pBrsk|QN9Gu3tn6o5}Y_f|@c;>Ffwk1Afyw5w;tamq+7QOW1Y{_+M^K>-th3p~s z={vEiy`))OB8(mqGwf5II<*PaG+i0u+;aLsguk@htruQ7ftk(tvjYSnPh~@xRH>L~ngmyBg;} zfjiy%fV{e9N}x=peQvGzH~e?epy>UJ7~=Ycq^TFSIIrAQ!tdnut(>PbzDx`w$8bwb z&&tA24^^Ij>;Q7LbobDYOgJs^S}A86Uu({oTP?}TwGz%vqD?X0r- zieeLIJMe2=p5m1{lF|L=h8->3%WOeYRPgoJ9K{YxDjedQS|lA-XJT|SFMrK@duhf! z5Blg$K)R(XNc;bh_7*@{b#J@4A_$_CC?yTjDIg6>BPA%Hbc%F$OLs|^G}0yA9a4fk zNH@X*Jaord+t>H^eczcg=gfcpGmf%kc-VWdb=P%W_q|ElgYzO!u-j5@?v7w(GVt8j z88X!(ilMZ|QJhkMWpH9kGAgGD9Ox5T=NqF%l6t9R1aL zBmA}5C=QN|%H~^M_8hUiQ&3NQJ|TUpI1vbs;5LUj0KKy6ZplsE8!a2hrE>&rDh=Zs zS~x#EHJs?NOH=@{yQH+Qz>m}BW|-pc9CM)b#Ek{X@3=vdZ|9^ERZj#WY_SoTRX)!_ z8vANmr<5uOee=4&Ajdz&bOR9=M)LFF6P&N3b{e8w+UYItoXvjcJ3Lv#7dhTsiW!&b zX0v-vZueZxs)kJV-Ko}vm&B%XyuHz$e5d{TB~7htK)jmC+aj&! zq8|fJVsP4h>fE$l%QUPKLuWRz)1oBDVM~bBi=G*!>m8vzM!UtM)2WZ_m`nFwZQy;FuaT zml(c2YobWE#gqx8-2`^z7+S-*xE~PcGElr03o;L^y@SKpNznYryEn1C7@cVoRv(`DVFAS%}K%fPGqRLEnbjd)G>h=H@!?hJtM;}1k&tMC=Lf92`3>b)hMKIriqOn;9Dd zDrkn>ZyQTISsfMllz~HYxWqVofXQ=iEx&y0T6LA>b=1z)yV~%Jf3*N5cYndgD8ELP zo4kv`BV?TBgOl*SY+LzsNccl&GH;Y&x5jWvE+Y7e5)5{N0!LBsT5{QaP;5qlZB1gt z-=2iulillnq^^8R(ppG3vgH9nD#hI~uH+GcIWJ7yedU?YOAKVwM(u$6_ahv;6|frV zv1EB={M^=C996AJ5P`|T@~=Dc(`yMN7O#S^d)VmsY zXQ9oLjqV{5j(oxhtJ54>H`1bJBR@aN;DC`?&%XcN<4TGG_d2;cKW5;E)H^jZpA$c|OYURTQbYU|Ti;W&exEIB z@{)M26MI5;eD^T){?CEgp9F0hzM>=cL&m0Sfov5mU)?1wnBHyHeAIo)%|R=MW%bx` zC)KV#m$kO=LyXJwC)TqoxDK?G3B*+;QCOjhpKxBgJ?8m@Lsk|c=;zmiC~MIn_O44j zI#ksNxQ*l+Qo7?hy61S7{Nv5a_o}Z9BBH;a&BbC|X^I~6Pf~?iDar@=+Ofh> z(P`bwYF}1iLDPRwE!W-0{;!hi~KY54SFOWJYU0W!=vf_h0m1+)=J(k%6dDw z3znN}nT8L|Lq3y{p2oWvCwVN`qenOp6nsgE5z_Qy>&5p^N9jRI-i-qJDA~)f*IWk{ zHkfyIN*LEGyN^z29-<@L!9J1=84-2b6QD1WG`8e*={_)+68&g>nVQ);l51P0JYU8uJb?+UppF4@d%g`FMPQQ+@;!rtf)* zA2yQQI`v_1b~kbMrmR}AS^}!UsieG?&e7Tp$H3Rr3sj(}75b#d1!0Y7(co~B-{upP zhmsLoaSiVH{<%m(1gB&Cmo+72*6)S$6EYtiyU^miwVFY6bWM&Ijz@GiVCebnJv$h$ zPGoGHYbjeNe0+bg{6cK(n1XbLrpCd+F7q6+P8)=*CNSr4Jnq19?cvl?(v5D{>Cn}QrBxe?b35lc`}v+Z z{{R74QxJTIMuH%KE&%)O!{jB$?7JK+My#(m=v6b| zNsWHb7+IFt%8`#O=}vv!*iFM-JSg{Xi>y;MHWsc6ZxZSD5qz#48Vr;w@w_v1Wwu=u zqk!<}XY^$AR`mNdmP_U|!!I1tQcP>4@g=S5nqc{~@wDi7EO=z)v*c3t)|zvaeWBqn z?^bdY(8*v{vSn)fU`Lqb8);L4d~wXJdy!rg0H&^Q z0)PEEMLj5d?P*C$k5Y@~Dh!)YbB2Y!2wQByqo+-t6FV4(&nK4c0yz4o%p=llG6$}Y zq=vq<0Y==xb=jDQ`y}xv+>cps-4akJaJ+2n6rc~4S7LvJ zVPThG5?U{|IhJX-loCVQ?g3wsXMn`hGK85S6fJwHV0+i>63 z(vwBMZ;%AbQQv;3Zbwdo`|d-w4{S)~g^HhqOT%?KQGMaiftAwBCb4?#=KmxsuWZ0+ zC~#=9(9?7-LpS6NrT$7TfLjQ3*O#`Q29G0Y_wv0uNGmOHlCyovj}POrN=@D)5HHat zfb-yIySz(!ORd~wE-GNa9+A`Mr$iJ}fFSgpmUME;R1g$H9D z7E%imx(!a9M_8u9PfwT<*riwS{C7$UxUO> z)@_`SW!r4yIDG2Teb#`_CP5(FdO^m!EO&@$xl}K`sC&L|*IaiYWD`cG6UsazF0tz% zbjCltTQXd>yV&GGEC`|)4^-J;7Iv~jm5n1**<7I8dI0B=@u#w3{8QNgXW}Tny0QQ3 ziIS77Ca5k%)pNzVP11}$S9@z6OyIhPJdN9+BX~e|wb6 zZ2RPXT)!V-C8r%9ddVxCW1>v%_BIhIUnz@kwHEt{YvQ!dhscMIgh1eSFRD9Z5IAKh z(GQdTXzM%JQor@MCe5w6SqL}>@<$l7B@H{=o;`l&J2u_PSEm{S78uf7(zk5pM6th- zmo&J9Cb2u?!oqsittblQd_!NBo4)!)wNy!rhz4o%+vDo5fW0JBwVqWbXs>m({=;?T$3f76AWo zrF5(j_Q;EPeJ7akPH1#!-u1^Ic)D!z=BVv#%;NmVOA=odvPUpcQ$Zf0hveRSke_$b zP#y|GmLi{likh0o%T9nrY6m{c9U-*P=B}ZX;gaNlaoopR z02`P&P5Ht)PnPOX;_q&cp}ko@(<|M4nPuH7x|0|;8>i8n6%mk^#vBrjj$Bt4rB19n zVE#P0ak4`7qAf=#_+Fl%(h}df6<*NEQC0prX?u%@@%(*0e;q+s>cQ+?DmCN|bL!5c zVIvaydBxHj`MR7<=A#`SM`4>e%Z;KV_#pd_rE@8#5`I?%)i8q4_>JU@?NuJ?+&K33 zZX6j)4w3*1S(;1ucj?|ZcfsO)tL2MNuMc+b+S9&s=6L<3b_eEAUG=QXUdH^rb6 z!p@cPd7nR`2Q`s`cQF<@)jgQnwz2)0{Apyd*`*{oXkO8#A|+Kwj_>aIcx~?278#5H zd6`rud?S*th+u{7%Va90@B`k^`S%nhHyIWo{w|Jqg{k;=DdrTUQ>jbInBp0aTd1iL zZD&*T1Ml8qbtYh|!;9Ic7GxO0Ni?YHv~O(DwYul?b>Kv>6s{i}gg5qMetY7S@%JF< za}2OE$vI0epq+^WR$r#chna#br9+GZz`}66m^Tz4G8+TCDpn``2TtEft_@Gg?`^o2 za9xco`%aU7nmx&Rl+^C$R2GjIim%{)TV$V1_5{Blq}iX_6R0s{gmuUcFZO3OC`=?M6K4 zOw?CKffuF;TOCRY3va=@+(C>D!vxA3>XSJ=i-a@%e$Iq)A9`?q8m!sJ>$@=^EB=Ze zIXwr46D82Cp;2LM4dAOC_tK8#eRYBpDb2*I_DY4o+txICG%O2T-eCWjeN<_w^BTNS zU`0dn6)HjKi)?F_9h(v(@ver)y#e5LmZG<_<##{ZUL7P#_6N*{?f0BJ{#>Bw#*mq+jz{Ne=(u*X#|pSjJ1u}X$&Q-sA&*yR^O}dAcr>| z67Ku7FLU->XmTa5INGbP%=P7&PGJzR&%Uc0+V)4|wD+sTdDsZkZLKOPZXZSc@sr$5 z=zM;5j0q5#(!(~6b*qAebSSpXKM%hRkkO=5G;fitX&4P1jku`WZ~`B@90X3xUR6@c zec*{}9|BKY!q{UCg0Sxsh^;6l_=m(h0r8FWE!u4alhg9EOHbN#3SPx~4Bh7NBCPZM z*)tJmNynI(cjXR&HS8>(Eg5;GNGjtv<`-;n| z-^c)S%r6TX*a~^}f!F4n{*#7=2i%!{I6)1l7o5l~g#nXe94wzVtTzJuMgyGAetrK{ zQQ2VJOUyc$L#!qEpyiCfB%e?T@{0Fq3gFa zXi6+4KDd$XHv7713KM9exv6g{4Fdsvy=?byBK}}wu8QOd4wo649?Uw~$TkyqwYd7# zQKnde!R6JZ#Sh~O&N`_PVI@2bfTgeur!oF1OK2uVZ!w0;DR!gzm}NfQvO1e?6>6JD zZ6A1|+oxQ{?*H)g$!VLn{k{p@gXDR)i|L*XJ&(bIgY&j$81d=YILtLLvq;pkr4EuMK$(@89sthRMWNdy~G`ys8GMkvA2RIH;J+HuK{KQ@=6HV8!2EHsw9w zRC^F=sv+*)2*++)1;PV45)N7l$x)rq-_zMWXet_x&zV{q9{6jPllc{DM<$danAT5< zo!6TH)tqpfw0n)EKGeC}Y0VWk4d>}^P){il#4z1)XyC-MlM(gI>zv9&o)^JBe{#|A z`9eFnnh{GM8O7&L)s@&7W*wbvwTI)oL|YQ`i%Lfc7qWm47l#^HgZ7L0QeMd2xZrdy z8*}mEgFt2V^o6ychHCgS4RCbae;ge<plJEMOtEId) zR!<@v72+3Z+;|0GI1llW+AEnGR;Mad1DMFfWLA7Ve~347A+>$4mGurFTtkak(SK-r zz`z!?IsokA-_0I5jS?@1!!i+aX8My^2rVfwL9`+Y%@c$$pv$x#!=-& z-KUHfS_BWPCse(u-dWE&`Ez5~4LmWAg^0(1-)8$LWWNRJ@V8u)PSS9qb$4~!i5o6l zxt9CGqV|dLq(#7>NTSSoC(pJ_LHt`<+wE;se^AXbNf?+C{*J=fR^|(+yT@yS z=AD8Fiee8ZZhr*3a@UWL2i#s(hcl;3oxsJ%I%?DK6-nBAEE2mlH#Tq~xq}}gFy7Am z`;^;;za;-<0#*`c1(}hk@&F#s=kIF2gH*@l8lElDZ4&%AMN@U1IWkAuFCeIK$kxrO z|GkZy%^tQQnbz`rub|2+JtgWNA8;GBpI504+`&L>)*#LKNXZ?%?znhZR2yFYqE-Ua ziQqh2tb2186Z5ba2nALoV{dE-rkwkkE!Xsi2-odcn$rYxF+x#hRH)-$eR!MlEWp5Y zZuMl`f>h57?d5fMd(N|`&*jdy?wB|Qu$@p*l<0?EZ>5e-4rKfUJj{q1R=7Wi#R9;y z3X!VD+EV^Kq8;X4JX(Lx?reQ*);}C#vuGy@tFH*4A$AQ}lB0Zx^*C9E zjlcL9lY$`gDSG4gG?TeivOb@bgt&NGOwyc??c-shSP-xte~-5fk5YQ9K>1dn?GJpfe8~05m;FO4$6W2= z$z1#A3kEA>#uCw@=5HVC{H42vc~Ux1JJ^;k4-@y_jrC|P(_II{oz{-3ZFrgOgM;5; z56;62U@g+S94M{_wBiGAnM4F11#;|CI$m9LCA1{Bh>2TY7VFQqCZKeav=sdMjU6`= zH1~Ubs?jfrpO=y0r5V|kdu_?na|yC})^`k0BI!DfW`{M=QrJ!uN)^g}55UCpV_ENG zmd-!^AiZi1-BS=pyyOM=UzV^J+Xjw=R^aP{p7Y}U0a4wf!4Vwiwcb;vfL$`0H|Q=2 zGyHccx{khZ<353eRNlHE0ba)gsT8?)IqeH;_br$g6(p}B0N|W@%@E+_b)-SP8mK$z zOFLZsIwg3o74XJm8r8cN4lLLlI6~khJ7Mc{QiD_}wcfWy*6_QiO?j^Kk{!by#d%F} z)rBuUHV)-LG6}?rY9)X&H;D!2t>cu#jZeSn0`c}CV*0^Eq=M@|#PoVuAUz%?#a8mU z!4xN#hK*nrhB`rjyEVc#Aa!<8$a;rFTP1R-p7ry)0A%1UKY@Z;kif+)4q6mJ)iqJL znIE+9rvmrFBhq}629+QJ6Oh)Tlg*4WMQn-xm3$n>kKB)1CaR@8K65Ky#WBZOw_SBR zRj5;HHB+3k{g1@yYzUtEs?|{%rTOz-ueUv`tKW)!{e-kf6sZF`@l2VKrMIZk8(t~I zzTZnE@+UDSkK9L@o5(5uD*8jl_tK!-%8MrtN`W0=7IE`1^UTKsnbP* za0`R_wYfb%#{U8ekVOGJ%yxLn1fd4+z@nau_!l~~cpwSt6)Ru28$qz`@12YOZiiTY zNGB~de&KHL-^V3c006 z@Em88lHEqLl;u5zI6M8OoD(4RUV1oLqMY?u(hI#jh|#V-sl$06`+D79dY=32!TU5N zhFPDh{fM_jxLTvZ=VAXshCV5>)fYOj z?aaKivH*O<2U&o}qMqR&@X-rg)vYgkIMAXj0bEIlcLguB00(i&6+AhVK>CvZe-{NH zs%BJhNnQ#6hfAu{#%-q4j{{Yp=FZnyCNB5w{eV8B-t5V@&Oo>T5knE?sfo{(Em-(o zW_Hp57?$4CbZSwxr6g86>5PybH1oK^t9w(qp7@vyOm{es2HA+V(Pn3~$XE#NuIVa6 zX|+oB=l;#jqfeH@4S@f1C?DW5EbZUfS^LtBG7)b`#vG&n=4m$`eWcwqs>>=M2G7j5 z`73fN9i%R_2NP*~o<8n>>Y7ecJwLj{z4fBK0tr-$8qYD4z&;j1J5jj0qyx&xZh9!Y zveV^d23r(K)mpYY!3=!qKWaX`NV)Gay|Jb1L-EWc-)t0S*C>jgN{GSz_J9-#fQ7%T zjc3N^pTegYR;o8^a&k+ldT~Opm*>B$)78$fz>Q~^=oaO6W|;|EoCFUk8Kf~AZChz_iG<~OQbjwih4^|6Q4pY9mT$%)$iFCGsu5sV#L$dR@(h8 z5nQzabk&JDXm#ERws-DaIGma80|I5g@JH-^UzPE`uBwll!-;UVe%bJLEkzNebTC7h z9I6e&q$A>ZE)SMgk)kg4a<^?nyWpb!jsRk@(Y&VoHK|CY{p;k@^$y5@52x49;sp0K zN{Vx2y@PWu4Ylv#^=sn&af|IP%4NnX`6$%Z+y814C1*F46N7LUg9z9-pbm=jZ zTDueEBOLYzmx$(*-YJ=7YAK!0jA&Qio$M5-`?fj156j)Y=FGGAc?@g1hv|Xkj|B|O z_W{^?ipob6+}MC*=G_=u?eXime@(H_M@4eiK0=;f^+T6Ye+LF)0I>ErHnsXM*B;Y*(ufUYd-YN~=~P)7^Ah?Gt?rwC@9)GNfiCj|EU11&;q3^VjBGO zS9Dcz&oT2EODZDWCRYm`v1JkcgmD7%o+&yjLLJE72(1bCRn&7d%5R=VXj#3)v>YeJ zQqc&IBySu&w&NbaKM`7A09TvE1uBLt@uaKB*58o7sBa8_Gk+F)d!C}!13LJj&H-$WiQC+C?KP=QsjLK867o*fEz;6 zvVkCm5~}Y;9$;9LZZmVMP&T;ViaIulz_BL`6ZK6xl9Q8&71q($`7QZctXS?Vt9V0C z-&vE8ZuVvbUlz3RuY9v``m(M6(1t7YI-RIGjDZH+X>f9CRBJwzW|-u=Z_*KrKGGd% zN#RgM&x}FAr?Ph^NkT$4&rBHEIkk+LcU3b>5}TsT?hzsujOsYGRFzG zrpn_{`a({7hF`hXJC}x6rvr-#Anck|Yt#Vje~!o@{;>cRh`s|qo$nib(D3h+6bq3P zbJ@OAQJSaxN1n0yI_crqI(S+JAKY?fgXG2nxg(x?kPk$MU=7q+tiAq6d%-tUB8p@4 zU0|2Pjj@gKvd!O|$fb#zM*OS_r0rva4TrLR+&r6YZ)P45pe7I_b~`1J(;7^klQ=x@ z0He({^r$kCp3$%!lWlI-hsy*>;%6eV}TfW@OL` zx5xd~n+Nc?Sisf}Dp`L4wyX<<@<|pFRC%CW4F{V|CK=NA6*4nUu-OyLSbxzK)`03* z{N3(KW^TUG^61)Z2`$91At}WH?g6J{KDT8FZC*O-)AFzTum6$knD?a1*b)$szda}X z`UYeqig&ji+MXVzKdJ7!IzsSu`!y~W0#N{vi2}`*l@>vDNS+DloOg$s~{kI9X zU~FfQ1}bzN-Dzl*Int3I&KXcF+@<->i4hsqv%9q(a$q12bNN^-{bh--v0zaXgZ*RF zy`_J(0B)|1F}d0=8KSoGoxC{%ZHEHkKruxZZ!~N_E}s1vAms)o8ue?(*IHd_LE(Xs zl}dU2LG(}2e}`4SqDKhki&WjyCp8KYVB)+48bUdJ04NlR*oj*vU*_-fNQZ^S%nA-x zWECpg{zsLBy?&FnqEsS_hi6<(ve996dNMXhP17mR~I}s zo)C{$5-!_3e{D6#i=`mw8rW+#G!vSC+VNwxc88~fgM&ef!4+$h8#k14H+8W@Ba;1% zymTTpZT4p=8PA#*?7UMnsca*!h z@5Yjv9ag#NpDP0q584B4ofO?rY!P^AU%@EIoPw#R|D;j>NMHXXOOrq#AarcniUU@% z4}gO$RyX5TNb(r!Rd||k{`uTS~|X!aaJhQa?nn6Em~87L|rq=7vaN< z;1#%M|B=x2cZrmP8zBd~uNOMH z!gJ$rP5GECv-7!FzL!&TaizRa%Q_*(osf{NiZqq8scZaM8>gB|t&;DltQ(4Z75^$- zP^sdUk;wFTH!~E_(07k*nR{sQ`+ydylf|J2rN!3nmO}jX$DWv4($IxnfS0AiK0gLN zR3rvC*Acb&7oGN0AOA}?;*I}Ypunihu;61j2h#dnY7Qex_lF^S#hdWxnANRA<9&I_ zur%qN_Vy=gf!Uwt8~pum+$N%k!T^r14sv$!u&p7vbQa5MWz2hd;pJC|6%IS%wI^*U zMr;N?lNhBYZ^$EoCJ0NOR|d-Napm||P-Ef5NAf^C!Hv%x^HDwfa<{dm3S&8{xv4=B z0~Y$x-FEcer{BDQuIvXhjz^x)h#R-P_mtZ~qK6C88SOaDZ2Q;c{6;>LUBlTQ_PJOs zywI{MI}q29^yyw`b6V)w#cJnn&e1ZN&6~So<6-NX71|3({~BURyDos}zE37{Q) zY~ZaOTkfFGCUsxJv9lY5fIFNyIpcK->ryaedus7h<6cla)zZhCF_a zE1+>()&lmgnna2)O^Tqm-4A* zEX_&hnbLVUtt>vA3527?!o%-)ILxnb7>K{x&?UV*xCWH+guNJbXJ z!;MndNH7f-Q~*6JpuM%)wHJIJ0fMU?ltoN`v&O&bnhjh?-5UChZXb4f|Mo1GNHF`- zrvQ#ld#4Y}GgAnf?2A7790r!Gnb&*uz@wXr;Q_{zd2Gjf?zy18+}pVM&uNrKxpJ{a z>JISt@Zwqz?u3H}>&HN6V;-2W1#}FiFfK#PYqEJ^pxB5>=NHdEv+HI$(_OSy`Z-;) zxT81|1ef69*4>#sGVcz5eU^rNy68aEzV1oyTJl}y`%mocA(SXoa-HOl0&_spb(*+W zA5yTq<##jeV@RZnDuGmT_tVh)E6|srK0A6P*mX3zIyeV1rB5I=5_Ix6^ZrxgLn!FG zPi|?@!VT;tC=r{-Gi!J5=jd+AKC&jkAC-wgZ~DPDXIzWyz)WR-J7Pc;6xNowhetn% z@i$Hsgx+*iJ)xL-)36pzsD;30U6{Q&nmOBy+DTHt%TQeOI{^?KMgu&gb|<`{fw&mx zP4p+GpMKlJJEUoCNY0}jKGH!(y?<>7m1?a7kn5?w?{!EHTV;;^{@aNJO`t^g1q#+d zfAjO61?=kSn9*47J$w;vfvPAAWTZ2YYjSP(r-9ZN_9cx>GaMVB%Ur_@h^#Mc_yypx zA4%kVgMd~v{q118^Ffl9$K%74h zY@{a?0n-|kn{CbY0L>tvZ2_y>@&3aDJ7MxeKAX-Co?FINjY06{U5+9g`8lWUWa}mV zI}!wJm(w%v8G+c~P1;W8vVh>Sh~}GMxOdThub`;4`^sbms8YS70QTZ;P+Or4)up=u zz^;I-p9QLHkpT(pvaqF*4k0iDL6jxSNF=->a`eISDhOj=hV4qM-w{tP>Q}0hFak7_ zmK~w}d%a!)MB2O76d@5Do`SH!OSdM@0NT0+p_zN5XfN+0%AA9ol?YO)pO(`zwDwF= za#_-M+S}Ic48FnEw*#VuLEEdAPokL}2LoK5^x4D-EmdG~q?sRDpn zKKTr%R#JkBr57Z|q-rv_QtzBBjp9r{Iue9q7-a`=(qqfOYE+#c!Cqo4wo~v?N%Ay~ zhfxqV*5Ig+M(JUbK)B-9clW&sPlxLkF`XT2Fz9D%aQ%m|Mxbhsq#t)s!xvy8b_4u+W2V$h0|HBE?*l(rlf7 zU%AHy0QGOHVzj5JfNPOC_}u&Mz4BgC|pWq|Ed6b1 z#$8+7Uw4fH2|(`|AqNR%am_E+fx7T@Sr2=(RWuB&@@d|m_ckwe_X%y3UVY^}bS$7f zoT^3-*qhhROQp4aXmg1Ni$c9z{JP$o;%kN>c>}oZqzRO|@mazG=W~^PWeqavVSBVS z&lH=9NITY@i534(3cVnK|Lvyxom*{*FO%H)K*Le9W8~bl!h{nf4U~NjP+isvkuEb& zKt!NsI|lI~;)=)$8LV*sfqfGH#)r5uw``V$a^IcCcv3+Auki(_K0!8AKsg(Xr;X2# zpQ-7;G49LZJr|i95f2baUfL&HocqiCry2iZHpPtFi2R;&Boz#o@XbfSKdTqa{a|at z<}cy>eB)ju00SV-E|MNDHTIu2q=_XI%94wieM6uf53br}ag=jKqPRBd8ZaEOh)*t@ zd*mx~^4XST{2^5)%K9Y$V*n)bp^oPO4TIj({fy}Sv8?DJiG_#NNWp#4a&!yHixaVJ;(wzNh#-Fi}`hHTGSc#Ih0#tM# z#ygL0OfS8_3yB_$(RilqOY^eS(N$>?kVo?V)1N1Z`Tu%?|3uiv^4TCb z&7m{M5NBSOtFTUM-nWUEe_yYJt{=TJ+Kq*xrF5;86yKdo8iyF;dc@BnrkX1o4S4xO zy{S5aQcm2vbG|aO2nn}Sl{re#hnDs805e0?9lX`!t*=zfzkGV$tm;YAZ-V}JD;l7k zsqKEC9OyLwzME7n1V6Ag`~Z`5sf(T7M*B*ouK3(M^^r(LhZ97Ek00CTuk)cJAB5&R zL47MTYDbn=guXUhb~5y_SPev+Mf{!C{(z65I%mR%v=De$x`&Otw+% zW~zH`nNgC+F2;6&?C(R<(@=VeZQctj+wEn?$_;GvLD0HYCX~;r*hHtqJlDM2HIxFs zW;&%CtckNkxKHZ2E&B7UE6d8Bxkv!PtC*leT7zKEwiW68!rS}9{q`s%~4!f2ewdA!3{b({fSWgsnV zYQ@3BTb1JB&31e-XJRVa&kc#G#f>R1`;S{eeP70XT6$2JzoJV3>Wf8&_7+2@5EmB z{R$^QZYn;`oAhW+!n-!2^6^<4E|os0Kg%p7hc#gqEq#vXLtx{7`rOTH0heg3)6Ocf)*0Ss$0i&`87V@l=Myoz?_eH~2mfM%wMo-Wof&QyE zJ=`r7yVY9v0S4cw~Nge|uaKL*@zr+&`M*rFjhlouMM)g7ijj?cg!k)VFT zqa64<2#1}|KNWP8@IH8%;aaBMU9J9p^8CB`1;y=V3j1m_p)*xRXJq6?B@|0JzZ|c`K)H z_MYVGk;4#LfenFzRRk|Fp|JhbD++RKq&N> z-q_m_k}|A*(8!E2fBp7AzDKHLNRvF?a5!qb_uXT+Qf61>F7v6u1*aXR3*#FOBX0ITt_lR%s<$#QQ`Bk%P}EG zjqcTkHQ_+DN3uPqR;AH&+%`hcP!}?!Pmpl%llNyx%M#zzC+_p7?1x6~p!p5)yLBPM!+s9weUt`6qN24+R77F_1UTxo z=lWL-q5@NQfPY}~l-PXK7bO4rB^KrFH4IC^@t3?jBU#QcZR1&1?#Iky?1>uXr-GdU ztn0*7IqdX&A2ew6OJ~)Zv;9=Bi4 z)3QpLXTKsmu69S-YS(hT{5iN42pJ?bVbt4pBA+Pf*QR`|C6c5*y?ko64M-vYk?T3n z({D8;ZXBJ3ta?_g7sT^-UIr=2PI@}6-+)SYWn)cq*=`eH+8gaQYT!9hh=Jr5jrneX z2uK}tL0y(!CNmrao>S;E=sDd6kq1I^+e9D0?mH=v8n@vRCgP=~S!ej$-|TsF&uEEt z99)f$_W{`!MAkan4oWSM1X|Vqfjqeyg`eFqC{5*u-}BRpGdQYFv{ELZCi(^U|M5DnRT zH#b3JPs)CoD9Ff-9aJ*S6ET&Lj!qmHwy3o-4-H7>gCv0Ui>X@=#RJS5;!kSA|Bl}{ z!B}!?^unUGzFPWD#Z|=6{(}m+q~Q-G5d%apKc{o;v8PD8ibw?3T53;tdxqWBohN`a zfc*9eh$sO!LtdzRnmKv>MW?bDC@tSA<`YOjO4P+!*v&-R0@{ z+jjd_R>Hg0?Z4V>IsCJp)RkB=Yq6~74S%+9Z83uv#cVcXN~)0@x_E+M-sIBJi=p#f zJ-1e9O{VoWu=4-WRjB&{>=*&l!vHC;V=U0USrCH63*zD|v3r(L+;{@vEva?|vSD&D z?Fj~L1GtO(i?`Rl&Hx?cT3%CwLuD3eBNjf*+E>_lRv6iN^+J(2)I87u0DK{#>fT0Q zjWdaz@(OZxg@;u7oZ8$?!^!?trk)KAo-n zAynLj(t%%26&xQ1j(nuopLF^8oqq|n|2C=Rcb(8;Tna9rMt4KNkGEKrKl@V~LYr}G zZO4ab#S-D(A`?}@#=zWX#tPn#S zE1H;)5k8Ie5&iSer?eX!mfy%CS+|_Kw`+xCg+x7+s${1CVL828ib0qqU9N|ltWkIK zROU^QZ^z}8+DDaRKz#GnfF?ljC?VvWN-kj=x|`Nra06Jwfn3m~wxS~)YSesM>M;kW z6>1T@Pkwi@lluU#AL_jB4mXL2pTGTl+lgsXDAMTqza~HME-WrQyQ%%y2!K$#tA6{6 zhK65zvR{_YNuJUU{P&Ry;li>)qTzDiW7G?;nLW*?NJk3%2QKd<5tG>fu>@ZYNNE2b z4-sT8Urw!`{72Dp`#Db0?zT)#+p)LIm0!@AjpZy}9T>X9s!6JX+J5wZ=OZ=W92W#5 zQ7H=CBgrj|dic=ewNr{4#R1*ppA%U<^@@wk86B(iefNvEmCx7|A-OQ6iTTh3VJm2Tj&&qb7`AArj zfi1MahP`z_Y{H5oPye%6fEH;K>cF(gZ)-zFJDlK2v7kJHWt)ARRwT?Rt#r z2%Ro_r{!7URoVBE39S4L$t&H#-vIGG!EWc&J+I`J`8{wTvSx~5HTa4Z<6Z!KfY|*j zm=i@NO|b|Ry#xK9rT0&ANh%8T!Z454y9Q9S4%0*~&!3TLZ$iKIAw2TM0=P`nAq(oX z2RV*uc^pQy*a&X?RPyw}l;ZYdl!mnNgOOQ|kQnq8AZR4A?@F~+V_V`A7{}RLsriQJ zML^W#kx0XCy<}CQFqheZD`AK3wTD75mJ>jvQm1_&W0yz*J|K$b`!UG;rF5J?qzf?W zBm&2mS_cIfoyzOWS`5f#0$t^~42Lk)8N2kqq&zeEh9_tff-p_Fg(}O*R!Rq zOJ+EfOr+g$KVIrHvxtXclNPCo(|r8bGv%J-TA?WsB;exW!egb$4WK7ooO4e?qlM={ z>da~Mvh)3w*&)8OtsT$PrrRR!;1LC4J@{idf1L0C)%*NU!x6T= z@?FuZ17muKanf^mt29}EmQ(juHh~@vCIyzLf4b@oS}kA$`w%bZmP423i&#A0rFqm) zy-|Xt-EDOKq87Xu{iRVTjz$lU4%ufQgWM0Ozv+D=-;M5>>X7zb;d{(Fkj4KrEOnYG zSCALhex>(jHN*decyWCgWc&DM*bgJKW)Jstt{OIv%=;Jh3Hzs#N7$7_KH)eo)FCv! z*J^?ebOg{a+L-hkNQVTENn*e97;Jm?*evB>H2G{ObRhCH@MC$9RH^%mg9D;#iB`v* zX>})^`&v&yeE1V&GQO>N2g6lYNg1^V5^1qJfXdr=>fs9BaCk7jln+lsSnYLjqaV@4 z?6_Y5Z!>CccaDs?c7VT2#Q%ZZo13Fy;+vaR=YvBTq|1jTx1+ZyT}KySI*vk!{4N1T zcNI>4twncDMwVK0*?MA!znz;+R1u4i^p>6@oAvWd+vg%y-082=JwI;$-eV&Ie7f#q zUQ}S$BQyXUuYv_+0d3JA$(}-}{TdTg;etLXAX$RcK~OIXONl4T0ovn1iiBkm2m<;Z zKK!|_+*oODtN?!y&HZ|0ywXr!B;2Lhe7k5&V3}iy!@$L?{_q#-YRQ!2%89-DOfbCp z5C!Q#V}nbQp^<7#R)occ*Nke7vd5bS zX&vOUdIP@|v8VZTNY^N%(x9)tWWn$v&;P_gRPtw;NWf1Kr1n|u1ok(0G>?17L7&I9 zj}Fvj%n-~I0#8^*(4^AH#Dru6)i03UO9ANd?B&ORfQ6&SrkrGgB9k}&lUFSxTLazm z@^+b^m8p+=Kr5Es+Suk*KQ%8!j+okc1J^wNB$ycmGUYOV@L)}O)PBAqUpfa=?aRaH zrG!Uyr5=Uo3v@$si`awK6H81jm3BEqBcPA_3Q`+Zj^*|7lW=X0Zug;KA}%1Z2+)3o zx{uI9vodRkmN+93$v{irg4t=z`25bl+)H)7YNR;(5^=j(43Cleg-78%oLP;x$GC4Pa0Zy= zakw>@qBew&Bp6B;tf#aR1)gCK>RhCHNc=z@ko^o+zk)zcVhwU+i12)S$nO8Z8%++c zQE3wSo-6?f4m}QEXT{%Hb5mL>@>_XmfS$ajA=demMu}VOUA`{@ydQQRJ(Wh;|C!=k z0eYXKux7^vd2=2n-Ms!+3-ET=Lb5Jn$$o=)>%>Vu3v=idfsP#SBel7zJM<6ln%2B+ z%Ar^r5c%aVbB$v`PNO{uIQJTgrq%)9FkGE6Ie zaRn`3DrRah2Td5TMn~tKUv!hvpAN15h2=l?UU4`I>>RPq*%yO!efN_AF7*O57^8fa zRFZb3*WNjVnuAXZ_0z#E(x1C*rT^78TxLnn_fjav*;nGRHHJ_4I5o%^zMS<~&n<@f zdrtwXEsX9zR9mNn*v1(c!S}1M)*{XC<@ndHF{`yJlwA4!fx)T~#{kh?EvSfB-g3P5 zc!?YXfc4MteY^ocFv!@Jzz)B`3DW?5^pkvtJ14LAz44n>1W-pQcO`v!{*rERezr#Y zbTIfF(5QiK~`g+9L^CX=$@y za!+2HfG4bc3VIh-?#RiuBt9pGZu#pBlY9Z5T>={S8)rbTh%%i=OW{k5hdON=5$p9h z{Bst_|2c6ReRk4nPYq zXJct0Y9>xE&}#+|aJ+cS$MW^{hfc$fCFhw52GS9sF)z#c1u*GLur7@H(W$W?fiwMb zvGQ{9#hf!ubRa*%0cN`lN*NT=l{s{!mR7i{yKAh%QoX7Ae4jRD{D)zjhS?po28*Gn zBvIa3oLOXg5p2S{Mgg{*Bx7kc&WU{8kr*4GJ;4j9qba+Wpwy_E)f~0HR-e}sP?sf1 zHS6sP8kS^RF?G{B+zz*?Zu^--6|dJ*wQvLnh9{-^Z!PxHFO!Fvy{Rw_&8@6_TxK5Es6j~-V;#X5DZ^aa<45uaT;?tYw5;X zDft13q1sAQ;2oMX4d@e4Hr$_bMwBE>K{>@<)qTzKn0Ket6K4L-i7F-ZpKVyaWvS<1 zSgSQZ|266kb{fwQybN1_T%wENZ*dSyzp6Pq$KF>{pc>&xJMft96p-lok-g7wEh zLb;J{xQ{g6fBsDNd`zTY@v`AFMRNOxKAzXW@*+wJ3gz)1f6Y>_pX%6$ z3mol!xUodzIY~Z-a2-0DBxq?1z$gTG@O`&66Q4y1}2aa zuZa_cr@^(q3#rM!qF0u{;%;O$on|0L!az>sy~hiRP$$-kd;iV~2-8XhB&nxO39ADA zC?|=l;EKl0`#l@Ns%b7WS6j~$U85n;h`bN-dJ`u{)j^uG)EEK_I-pLzKQy=jl%P=d z3^aTK!SMWx*3XqIKncrLb`GRw-m3h;g{t-ZrCS%ENfJ;^B%^k_Gg7&)?ggAh%vq$; z3Hs&LhFhMP4rry)g>*UtEAVCamds713c=BZfvdm!Y!;Ec=b>_WpJ$;{|-~0XR{o{S#j$<4L zhq>?jTF&b{Kj-IM?hR!}zWy~Z`$b~xpq}8=%?;b+4uzqq+%b?oJ!u0_Tz65|7sZr=}^yP z#g1#2oSg-I(XR6y(?(%0;rw!yvAe}Y)l@29(C6O?M%$X9Kkrs6ZZy`ot97d{M7FY) zkxN4^bz#V^z67ocH?Fxpto$g~t(ihLEzb>ME^mt(xh!_Act`afV?+T)L9jQBpR3tav?)XK$fzKa%i`` z$b-|8AXlp1&Wo-cTgqq`t$*!xR=@m>r#YvIPh|LywNpIm^XwJIzFD$$E*QMu9_1S- z$L-f2Nf`if^VmG0zE`pt|9Ic5YOk6~!sB);k@NPW^f!4Mi&UW0?JACR{T1wuCJ6Qo z09PFJXBM9MB09~{x#BS)rXH~@0gfMPsIs(zlf}?gNN%YUMCR^y_*I;|>#<6bon-M< zuzK5l+P6PpR_I!$9obvUbN0}|9j>oLpfV24dQNZa&XU(k2Ykyrwkm~CODBxJw#V*n z2!QbCO}P!-x!+9KeVm4l9+X#z^8On_of|`E5m41F&KeZw4URrAL!NSEW15g_%V;1n zLzu*(`9xCI4UA0B%uDm@Pc?7qN}pnBN#eMD6+k?)0}Mh>k1x(#z8ma~dB1-g@FMnb z55tWWTzEeLSgj*SkQ>qpEe4GP52{O>O>%8ERF>04OahMYV$_yg2_F*yO9PO}s5`XB zx-pt0Rsv#}wC){|l(%>9S%V1X5A^>az==oXgw<&ds};~-XAqEm&%Xx14M0H;$mj(0 zmDF_9>$BEgUIhwU_h%$U#FEvu{EbSQ`;LxCx`QqzvWRou{JKz)>@b7XM!Od6P*G01 za4X|4BfT+{iyl3@?bSeMy`d|Ln~4607f&A1Y4xRQK$FFaJpCT^o~G+Zd>?@F z*RxLx+S{EQMWbM$2fQW2k3$)8uS*I{Z~KJKVI6!gpS2%oNfw8D}<`YnZDKr|)L z@47{g>4N@*SPo!s>c~(gs6|6+Hkqy=UoNhZjnqr4I$r`jd{9zopJalb_$(86SLptu z%WCE0*uwk7^Y+cmGiD&&urRpRQ!4lI^ln;`UE*Tdu4J`|NTW3R{MXjUhax6O=ZVAtB^s2SH%`;2Xkdb zuC)2?VVjS!r1u*@!NfCDe0}Rq35BqT(7RE>)1^?UMGK+IJCZ-<0Ac$IaCFCPqS%)J z>tQo__-r5>J1C}2w-~?vJrohhctCBzSrU=)L|aG)&m=5tKRQ&aUR&TzPtq=C8WIWeeoL-(;&`fVl)(2SDu zkAr*WO2E{nZCm6*Cd{I)J1%6~EA^I=CK&xd%=H1%OaT-mo1Q7J(!+&{)Jt&0)NU1O z_xBOlJndC!cg*q$6twU+UHmur2}s(QO}|Dzp^SF%$nL&>0-$@QMHzEJzol`~)mAFe zxJgyW=%)}UWv6b!)#N7cVGGcoX(k3D8ZE@M0(0QzB-xWJ05ZHWg zw1w;9h0RE)GW9N$fj9%@)88+t8(Y}YCrriiJDXU9EL#wmcaBz<6gTpamwnu9p;qP= zouGuJ;d_&38o^FCq~T=cSp@TY&@S5-M7);KS3`Eb+cIV$IrA!{fz+>b%(9>J-Du9} zUdmQ?&^ruDU%aHT!iaX9e#+>4g$;cyEOvu{OQOwJ!x(M|>bU?_+4 zydZmgL)_Oxz!j(my|U$l{;u@~p;!5xp@m1sB62~{nb!SEA3#K^?DNTb?G>I6&+ZEF zWXkBe+)UWgM~$J7w@qEqWgLFi@~J$3l7Y!#KtH4yV%M~_Mk}iX-GW^Y`yPpV8<9NF za){jVs;pMDCFN6q%U`6*nj}`H{g8+ERHh(xQtKvX;6{be;G1Zh%7rI5(8lt49ej)Y z7BBA;wnu8N!Y#dz{q^^O1}V_qvSd^)j{Ps@$8>rI?R>A;braBqJ1l_yBF+UzMwZr<&a1|sD(9&(DlnHufodN{Rn63mO8 z+rq{XKC38QXyYk`q`2zzhSz|ol(ovBE%~VN@K;ssa{*q&7plj!kZLM#yxZ;o*JC2e zf9XUUe7pk!^o_%EF=uuo%Xf6Az&}q`ly{g)lf63R76-l0pKA_es*KYF9pym+O6y4V zv9$Wj>HyvF%02@T-XjWJ9ZdW71W~44C-=zOLONRj*{A{+_bWvTib&OYHDI?KnASqx z<&oGsjc636sHE-NButUTWrGIH+EP}JY|rfuZvZ7bb&U_gUhlq@I6TjZ4b*xU0=bCm zKO)tDvM;hc418u#i5MimfsOSN+IN>4Yoq`el2tJ7bu^d2AaEMwnN_sji;l6Mj(MkA zc1XeGWCP!k>kp3&g6wd4t%jb$q(N$kR$bLs%RXJM%e{rPD})ekR_5WIvfwrwo)Q8f zhJ5`;Rtrq!xd`^ZpY9ZMhR)4(jNkGIdZm zs{FUjhtMs5RqupA5k}ff!n3U2#73s^pZYlCZp2yIh0v%6Rjg)^N8;tEbP(FkwV!~n z6A-PrAL<((dhM@qR-p zj|gCe>TH89UN-<0Oz&jC2v#a<8h*0?U`b@zR@VT^4E*l}oNLDqRLmxDcd47di$|^x zl0s1G*H7d|Xz-dDtD^U7`}k&7aFXUh_D-oqF;qynUV1<{Bmi(m>>>cZGOVk4v~`@2 zF>ZMPIu8h66n@2V;vW?ZLSqj^bS;}!s~w?=OB?l^>z&bc%T8Z}n1^+oeyZT~^Z7TT z{jH~G+zT}nP#t;&N>=kd=$Hsnwe-@P#Cp5F;-$dbM;=(TUyF-=57%8K7la#3c8uW!BOaG>hauCFs2EnTbrh)qmv2b~g zm#?vN&*&xx;JFEmdpMz;Km3mH6znWFR9egWsy=y@FuB|{o+K9HqoQp^oxDrHpfD(oD(@M zl-6vlHw42DuXXC9eua6KX>ptW6u)jHMi?mf3M^KY5reaY6CZ^Ub_TNcM@r_x^G z@Hk8hc`s_x4~rzIQ!V%!kqRa@V?hm9{mQB+CS^sn8Msv1gSzVH=VYBuoZKm|U`odE zlFe_JA&P8{<^-@~9bC^NLT|dDV-Eu*9-zI0GZ*$(aw7|;h~`a(4I7z${8A+*f@sm) zk7&91^>P^FZK6i!qULg+`dRpx;OY6L)|%nkf(#fpc)DqTo9MFR)UcXuJO@v1rn!vj zT&1K4En+DzhU|2~bfxw&t=xc-JOY<9SEt6=^DWXI&#>DH!$#9u1mq+t-jF)H>5LjL zPhhuViOZ>`9SXwr{MW=6KC{XZU=I+Sdg33mJP8<&1^FCb6GvuM?8PC|URh|=!P-;z zSU8m;nSzKRt+LBI{vG@GNoei`GjI`&+nJl$Q{6+zn1#8f1Wd>3?K)AMS~32tz#x(; z<$Gdwj#9HEJYQ6NxymeLS#VnjdkC9l+ct_~lZKRkIVHfmNwlm(5TiKp0M%12UfZ5T zicplnlzIv>v!xs7b4aO(n=34N^{1u?_Sbm%6?C@a!upV7&!);kkd{xS&4rlzkY;8? z)x(;_I9B6nK~_%haWLSR6tuJ0uM5t^vPBviupJ8)wL}}S)fn}j#x|?&<&8|)`LwjO z|8Y-O7STd!W%~6&0RZfh%^b>n!$ek7`$~64Z5U zfvJ|ziN@YZxT`Bq&WoQRBQ%US6DwvIBT_Gzb$N4mF5*X1digxk&ZE#Q9c_x_+)!K2YH>`_$jcYU(}mIB~NoZ^aa66}AJ<)spIe z@}r=t^4uKds7mQ_goATfi~4dlqspGH#(20!s_a#BMCszt{H#AY-jIBiUVV4QYWewr zsc0UJ=YHKcL=hPKHuO~RQpM8qE)n&2lepW4VIDr7XDD?0R^>aM0gCXlrMWrG3>@uD z8`E#>4+<+FBuvR&9>%G=E|hllzc7yJ9!?=j#2FMURd!zNPiHM4%u4jE%qcpXnV{oW zhP$w{DBS{T_j}%!C`pIRbhdp&yULuea+{FhL#+zPCbT7~M&k(A^3akjJDO2|x zvo9|{Z*^T9ASHZ~7t8(XeYV`MhMKK9JXm0ur8WQJY28`X0&;f=+~2N$TnV`xIp&pa ze!9sPd7L~cEQv6r%;{KMo9HoFNmaHItChGnRFgWAeQR__;h_aLo@5yhrwW1r@Agcj>>o}>H1$<+(3Cz`Z5zEO zhcG1PVcb8+W&7+ycdcZ0nd(x%erWf@9)FNNd#=L4O>MY2ZyU0XPI=W<}mupT%TBqMs_w%GsYOBhM&T?!-71-NT(S7#e#kG zQiS2l66K2GIqZtw^<4Otx9G#6DUk!JJ<=D(%2X^h9lbFTH#!b?nL{hqSMKx~zBa zskzam(?-j6ZiZnO-)fxM^s#B~ZnTr3Lp=3bR`hnmv>mt%W^OoU?ty)sJK-K}+)YOhR`X7cI(gv88f! zA06XAsoQ>vHtP1sMP2>x$x8fk8(bA1!iGh?b@V8oB{@@2XA|*?F(_Axk&em`iuCn( zd*G&~Za2m%iu-`SiUN8{fXD2jAr6{y{TzsW>i?wCJoD$j&j*oSBY{Q zWzXVf4Nj!oay8CgI@nbDZE3ctF^@#8xI|=}3g1l%2yDV?h|BH*N2kxo1OSmcq9O>G za={nYpD+ky$7N3gWhx+c9vE${PH}@&yv*Ax<6jbF?N1hpBE2k}DZ@lha;Tmueg~$L z_UWlL$Bt>ZU2Xo<+;Nv?-4!^MdmmfVV3xFmaqeGTg z2^ki|;i)QrYXB(4I)4t{Tn=7b2Kj_vCVu(8M^TLr3FB`RQp>o(!VINLk*%~$dlNx_ zLMq6j7L#Guuq$WxZ0c%B_IFpa8GAA|LUn)R+u7>B6zwsUF^JC*&QdZeP8B}J&!3P< zhDjn|^Q4(t@=1rbPI*PNMA(wrtiMefaNJIR)f4ir?=KOA z212aQi&MnKn~ep_(NZ#R@*f=d50?4>Hfl?o%w7aO&HlNO>%PxA@8Y#aSGGuX&I9IQv_ud?R+Njrn{oT$Q)Dv^3WUt?_WgimB-}~e~J_hDgf=Wv(q^nkP47faULAQE!-bd4=mrdzB zH|(hAr?N`KbuBC`=-ZY6F1?ybr%~&S`W7wKw<1)X#|OrCN7<4}0&f#PTmv3aFD#mG!oHaU@Up0ka7qp_Dh)XM-?5asgakEged^DVyMx?dG8# z0LkaBaC;zz*CFNM^;Tt_@-Tsv$Ms6e5U#}kQ3^5YDULcjkyF{j*Q5qFKST@~8=+{N z_iR6$c}5&zSYr-fN-uuC^ii^Y*L=k+021L5F={fkQ9I4h1xu=eWP#~2W*?13%Lp0x zba#f2z*q`Vdjf$O|2kYFV9Z->-=o@XXC*=1fEzwmI|W!e;Y0*@Zv5B4cXGrvS*FrWZMoIxVMmj zLpQ5p)8LM-%T#4?T_p2-1bJ}?PR1KN9>MQgnEl#?<%1z7@!1UJPQ|IUwEUWu(BUS; z&Mu@^T}`%AWMc=Y5$IAw*OgB>5iu4k_xwn)JI+|ht~@XHoC%klN8xW}p20ZMdvG!- z9+%7Q-ruvLkaAob=L)BmAL=EI4F<6mZ0;$kuwI_kMKe}RT^x>1@qI^_3YkeE8YY!0 z!As}66I76h??6;r1N8-S>Z%uIP%jNur=MVg-mf+>=XAC>)z)nv83D78M~RB0Dcfo- z6B5&Eo;mnmxIHoIf3^I{qYab8?EZPBA#Dfdn}Ud=^|V<|EhI&Ya4AeD$69GphzNn1 z400P5Pt6181=X_ufEuLXTutr+4F}E{Oyb@b=CvB`I;7!jB@oWi2*XR0cG3QxyOfi1{ z2;o`ElGG(EE$ZJFML`yb$kXne5;^;FYwEvd_3ngf4Q7GiK=-SI2&Ars(me@$oe)Nh{2fBE4SDABLP;l!!m@2eR9?0ju1$ zpDA%GR&XQf$i2ZwH9?EGm*D`q zUxuK&ZQRav&^;1@?)&t%VmWS;q;!+bZ`WBp*-!df0{>k0)G$R&V<;wNmszXHrZ-V$ zy-}L^`E!s*m>%ZV4*_>QXT!p-Wj&%(w!aQxWM+__ucvf7-NFK8SDv#JIfkBqkXNZj z3N_ukZMp68HSEaz=Tf|I4qSE|yu8pZ{gu}b#D2*B+VYjgl{=n{nMN4ba$mMP#u|($ zE2PmQu2_YxMx(mQ%+#ePdC2)*yRMEi98AedmrN;w+lFK>eMyk)HmnFl7pW_!3$=+G zCSqaT+kA_>3FtZPCe<5$zEcaX{ng*v@9Lw~+jkjr`c|XHv(nU%h->&VRrt~;8NxjW zr`(Q1o*sGRp7Us3I2uD62y@H!5w$B$H4uL8)*>%lf3DESp}p>1%kqJHR<#MNcg)Qu zQ60GLF#myonA(q@J7-07kfFVC$7e2&0e5q-NtitiXr85!HeL1oscIglOvKNhgsE3_ zHo<{s1YC1U%kySGNrXlmCI`{B4X7d2I6rWHQud1=$lc!-2G^LWcgJ{uMoM_;f)?)2 z9)|BWR~{Z15mw!+m~wEKL(l5oNhth49yTuk>u(p$U5t3LyO(w#?|6jkP< zU|JWEY4#z?P$hL)ojq+=U1SM*qH(~DBvC@(v@e0h18_R<$^tUYsD63AiXSIN9W%c<3xeo5Lvy@s#)eh6g zUZsjV(`=E-pH#7!x3p;Qxml~rxUV1bi-NUPN_}5h%?M($xzaN~DNRHgZg5R;QExx~ zc#=4rwi6|5b@d}m^~LpLbY<_0^H_Y<8W z3Vl4c=mE;(%{QN1u3QdJUGf+)YIafw=^~m^E<1S-r%HeFu9BKGzVv6RcwPX9>LH&rHY{;P$i`y{oSBJ&IejJ; z_a}f@;?5jWaJ`d9{x1 z6w$Oy0KZl-W&gcKy=wNx0@EFGlA6W`z=n3Y%aH37?Y7-n)i``fKl2LtpyAm}>g6<5 zV7q2&eZtwilkPNf(F%XMs6?`9Mr!2p9q*Xi`3Z^cNxxi0G9xpgaN#UC_$aPwNb0^y1YDkcwU^Y_#|; zSa^@055bjtxccr?TQ)UJ5qAoQs5xjl$b!B1WxuV4G!Eydvuxcp=H2re^M&lG z{-xNSfOc(dfJG`9QM*G0Uj*wU+;s5^+ImKniN%^19D&Uy(La-U&@uV+8jRDX@;NSh zW!fjV-stK;y!Yqyg{j(w%$iYv89qF%J9_pAbl9CbOC@QSnhdGmn&8v&i9}go87n64 z)(qFQWlBe5%sjNa%Nbb2M+(KsXP{YZ-d!&bTy`mNv6OTK>sr>+ zkrOPQCNKCoa|;?lI5%f5pW^kc+#*JL;NpnJ%WItco0@{)=>oBTrt)W3{s`Egv+_rS z{ZYn$?8=WI;&*ud$3*@CE`KoCA2|63wK7W96b~lmna#<#_B`Ne?TYt|TLey` z<@}~xHQHV%52A{Gv?5@wcdFU@2;3-eyO3{y%Sx|~>8f8Du(Cn@ZrcN;m7rL#aw3w4A!?$A)%|jD zYVd3a54QTgAW7QEe5aV^qm_+#6;h4sbb84I{WAX8S`I@*_Bq6WM(qX}LC={Whkl3n zrx$&T+CFdV*!^cH=gREtX6GiPoSeYTfPeq_F~1oXeI^tirP!?Dn1DHXW9>W{0#v|6 zRW4}1aBT*b`~qQfvCN>OZ8SNgRSyz1HQ3*aPj zSRJHks6*WJ?c9K?fo|4bg}oB$j}@1c|H)*qrtw4kqVmicK5 zL=ZAg17O8}^L0&KcChD>hCfNs5B_7_K)}7DA>N2T?WdCf_@d%F4(phh)n^Gw0ilwG z|BjCN4*Gt1gvteo{`38L>3*9s@qHHVZy-sV2UA_g4z1;Dz_UiK04^tZiuEV)X2C`X zmISXOcc6iNYK1nD!2OfN{a|>0vxbkJLJM9i{%65|QY(KJ{EvkHYnc9DQz@P5Y@rMc z9I3~T96keCtpCfU9j|}!Yz+!M+$A6>v1s(k^Nif!=z*u|Ny~22cuI zV($wK&G*{a#D_Eb0;?#%DEJ*SpSryHfhAX)L)m)kkilxaV0Gm)ru=#XV6}W$S|^Ee zGPPmVq6=(Pgp*7T*nO-%nApB|^~-DGO&}Bn8IiVm625S6a~YwrwW~kZ}ds+P6v{H8y)E>iM+DmqZam#`1>nl$H4UBTMCe72Vwp!sdJa2^F<+!@y_i&Rnl{p(oI({*k%=Q^=VyQ7`JWBd1GGT zTFhs|wJ9$@YymU4Q-T&7@3x5`yf}Vi-T(ap*p+||rg4OG zQ%n2*^sIkChtW*{U2g7nxbq7LSwGMVAi7gDG;IH0#pcdkf z*!?Ovf5dM6dHW-F|50-P`Q?wc`&ViHI6;53-TJfh$H@MWj(_FlkCFX%Eq<)dA8fY< j>wu&5{~5OHr87DuW=Pb items; + protected int capacity = 30; + HashMap quantityMap; + + public Basket() { + items = new ArrayList<>(); + } + + public boolean addItem(SKU sku) { + + // if no capacity, return false + if(items.size() >= capacity) { + basketIsFullMessage(); + return false; + } + + // add Bagel + if(sku == SKU.BGLE || sku == SKU.BGLO || sku == SKU.BGLP || sku == SKU.BGLS) { + items.add(new Bagel(sku)); + } + // add Coffee + else if (sku == SKU.COFB || sku == SKU.COFW || sku == SKU.COFC || sku == SKU.COFL) { + items.add(new Coffee(sku)); + } + // add Filling + else if(sku == SKU.FILB || sku == SKU.FILC || sku == SKU.FILE || + sku == SKU.FILH || sku == SKU.FILS || sku == SKU.FILX) { + items.add(new Filling(sku)); + } + // SKU not recognized, return false + else { + System.out.println("SKU doesn't exist in catalog."); + return false; + } + return true; + } + + boolean removeItem(SKU SKU) { + for(int i = 0; i < items.size(); i++) { + if(items.get(i).SKU == SKU) { + items.remove(i); + return true; + } + } + itemNotInBasket(); + return false; + } + + public void basketIsFullMessage() { + System.out.println("Basket is full."); + } + + public void itemNotInBasket() { + System.out.println("Couldn't find that item in your basket."); + } + + public float calculateCost() { + float totalCost = 0F; + for(Item item : items) { + totalCost += item.getPrice(); + } + return totalCost; + } + + public boolean setCapacity(int capacity) { + if(capacity > 0) { + this.capacity = capacity; + return true; + } + System.out.println("Invalid capacity entered."); + return false; + } + + public int getCapacity() { + return this.capacity; + } + + public StringBuilder getReceipt() { + this.quantityMap = new HashMap<>(); + for(Item i : items) { + Integer counter = quantityMap.get(i.getSKU()); + if(counter == null) { + counter = 0; + } + quantityMap.put(i.getSKU(), counter+1 ); + } + System.out.println(quantityMap); + + StringBuilder receipt = new StringBuilder(); + float totalCost = 0F; + + receipt.append("\t~~~ Bob's Bagels ~~~\n"); + receipt.append(" --------------------------\n\n"); + + // calculate discount for bagels + for(SKU k : quantityMap.keySet()) { + if(k == SKU.BGLE || k == SKU.BGLP || k == SKU.BGLS || k == SKU.BGLO) { + // Calculate 12x discount for a bagel + while(quantityMap.get(k) >= 12) { + Bagel refBagel = new Bagel(k); + totalCost += 3.99F; + receipt.append(refBagel.getVariant() + " " + refBagel.getName() + "\t\t\t" + 12 + "\t£3.99\n"); + quantityMap.put(k, quantityMap.get(k) - 12); + } + + // calculate 6x discount for a bagel + while(quantityMap.get(k) >= 6) { + Bagel refBagel = new Bagel(k); + totalCost += 2.49F; + receipt.append(refBagel.getVariant() + " " + refBagel.getName() + "\t\t\t" + 6 + "\t£2.49\n"); + quantityMap.put(k, quantityMap.get(k) - 6); + } + } + } + + // calculate discount for "Bagel and Coffee" + for(SKU k : quantityMap.keySet()) { + if(k == SKU.COFB || k == SKU.COFC || k == SKU.COFL || k == SKU.COFW) { + Coffee refCoffee = new Coffee(k); + + while(quantityMap.get(k) > 0) { + if (quantityMap.containsKey(SKU.BGLE) && quantityMap.get(SKU.BGLE) > 0) { + totalCost += 1.25F; + receipt.append("Coffee + Bagel\t\t" + 1 + "\t£1.25\n"); + quantityMap.put(k, quantityMap.get(k) - 1); + quantityMap.put(SKU.BGLE, quantityMap.get(SKU.BGLE) - 1); + } + else if (quantityMap.containsKey(SKU.BGLO) && quantityMap.get(SKU.BGLO) > 0) { + totalCost += 1.25F; + receipt.append("Coffee + Bagel\t\t" + 1 + "\t£1.25\n"); + quantityMap.put(k, quantityMap.get(k) - 1); + quantityMap.put(SKU.BGLO, quantityMap.get(SKU.BGLO) - 1); + } + else if (quantityMap.containsKey(SKU.BGLS) && quantityMap.get(SKU.BGLS) > 0) { + totalCost += 1.25F; + receipt.append("Coffee + Bagel\t\t" + 1 + "\t£1.25\n"); + quantityMap.put(k, quantityMap.get(k) - 1); + quantityMap.put(SKU.BGLS, quantityMap.get(SKU.BGLS) - 1); + } + else if (quantityMap.containsKey(SKU.BGLP) && quantityMap.get(SKU.BGLP) > 0) { + totalCost += 1.25F; + receipt.append("Coffee + Bagel\t\t" + 1 + "\t£1.25\n"); + quantityMap.put(k, quantityMap.get(k) - 1); + quantityMap.put(SKU.BGLP, quantityMap.get(SKU.BGLP) - 1); + } + else { + totalCost += refCoffee.getPrice() * quantityMap.get(k); + receipt.append(refCoffee.getVariant() + " " + refCoffee.getName() + "\t\t" + + quantityMap.get(k) + "\t£" + (refCoffee.getPrice() * quantityMap.get(k)) + "\n"); + quantityMap.put(k, 0); + } + } + } + } + + for(SKU k : quantityMap.keySet()) { + Item refItem; + if(k == SKU.BGLE || k == SKU.BGLO || k == SKU.BGLP || k == SKU.BGLS) { + refItem = new Bagel(k); + } + else if(k == SKU.COFB || k == SKU.COFC || k == SKU.COFL || k == SKU.COFW) { + refItem = new Coffee(k); + } + else { + refItem = new Filling(k); + } + + if(quantityMap.get(k) > 0) { + float cost = refItem.getPrice() * quantityMap.get(k); + totalCost += cost; + receipt.append(refItem.getVariant() + " " + refItem.getName() + "\t\t" + quantityMap.get(k) + "\t£" + cost + "\n"); + quantityMap.put(k, 0); + } + } + receipt.append("\n --------------------------"); + receipt.append("\nTotal cost:\t\t\t\t£" + totalCost); + + return receipt; + + } +} diff --git a/src/main/java/com/booleanuk/extension/Coffee.java b/src/main/java/com/booleanuk/extension/Coffee.java new file mode 100644 index 000000000..c00aef3ef --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Coffee.java @@ -0,0 +1,30 @@ +package com.booleanuk.extension; + +public class Coffee extends Item { + + public Coffee(SKU SKU) { + this.SKU = SKU; + switch (SKU) { + case COFB: + this.price = 0.99F; + this.name = "Coffee"; + this.variant = "Black"; + break; + case COFW: + this.price = 1.19F; + this.name = "Coffee"; + this.variant = "White"; + break; + case COFC: + this.price = 1.29F; + this.name = "Coffee"; + this.variant = "Capuccino"; + break; + case COFL: + this.price = 1.29F; + this.name = "Coffee"; + this.variant = "Latte"; + break; + } + } +} diff --git a/src/main/java/com/booleanuk/extension/Filling.java b/src/main/java/com/booleanuk/extension/Filling.java new file mode 100644 index 000000000..8dcdf9059 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Filling.java @@ -0,0 +1,40 @@ +package com.booleanuk.extension; + +public class Filling extends Item { + + public Filling(SKU SKU) { + this.SKU = SKU; + switch (SKU) { + case FILB: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Bacon"; + break; + case FILE: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Egg"; + break; + case FILC: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Cheese"; + break; + case FILX: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Cream Cheese"; + break; + case FILS: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Smoked Salmon"; + break; + case FILH: + this.price = 0.12F; + this.name = "Filling"; + this.variant = "Ham"; + break; + } + } +} diff --git a/src/main/java/com/booleanuk/extension/Item.java b/src/main/java/com/booleanuk/extension/Item.java new file mode 100644 index 000000000..a96d3cc5d --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Item.java @@ -0,0 +1,24 @@ +package com.booleanuk.extension; + +public abstract class Item { + protected SKU SKU; + protected float price; + protected String name; + protected String variant; + + public float getPrice() { + return price; + } + + public String getName() { + return name; + } + + String getVariant() { + return variant; + } + + SKU getSKU() { + return SKU; + } +} diff --git a/src/main/java/com/booleanuk/extension/SKU.java b/src/main/java/com/booleanuk/extension/SKU.java new file mode 100644 index 000000000..7c12e4469 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/SKU.java @@ -0,0 +1,18 @@ +package com.booleanuk.extension; + +enum SKU { + BGLO, + BGLP, + BGLE, + BGLS, + COFB, + COFW, + COFC, + COFL, + FILB, + FILE, + FILC, + FILX, + FILS, + FILH +} diff --git a/src/test/java/com/booleanuk/extension/BagelTest.java b/src/test/java/com/booleanuk/extension/BagelTest.java new file mode 100644 index 000000000..4f5c240d7 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/BagelTest.java @@ -0,0 +1,43 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BagelTest { + + @Test + public void checkBagelPriceTest() { + Bagel bagel = new Bagel(SKU.BGLP); + Assertions.assertEquals(0.39F, bagel.getPrice()); + } + + @Test + public void checkWrongBagelPriceTest() { + Bagel bagel = new Bagel(SKU.BGLS); + Assertions.assertNotEquals(0.39F, bagel.getPrice()); + } + + @Test + public void checkBagelNameTest() { + Bagel bagel = new Bagel(SKU.BGLP); + Assertions.assertEquals("Bagel", bagel.getName()); + } + + @Test + public void checkWrongBagelNameTest() { + Bagel bagel = new Bagel(SKU.FILC); + Assertions.assertNotEquals("Bagel", bagel.getName()); + } + + @Test + public void checkBagelVariantTest() { + Bagel bagel = new Bagel(SKU.BGLP); + Assertions.assertEquals("Plain", bagel.getVariant()); + } + + @Test + public void checkWrongBagelVariantTest() { + Bagel bagel = new Bagel(SKU.BGLE); + Assertions.assertNotEquals("Plain", bagel.getVariant()); + } +} diff --git a/src/test/java/com/booleanuk/extension/BasketTest.java b/src/test/java/com/booleanuk/extension/BasketTest.java new file mode 100644 index 000000000..c183e2b7a --- /dev/null +++ b/src/test/java/com/booleanuk/extension/BasketTest.java @@ -0,0 +1,115 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BasketTest { + + @Test + public void addBagelCorrectlyTest() { + Basket basket = new Basket(); + basket.addItem(SKU.BGLP); + Assertions.assertEquals(1, basket.items.size()); + Assertions.assertEquals(SKU.BGLP, basket.items.getFirst().SKU); + } + + @Test + public void addBagelCorrectlyTest2() { + Basket basket = new Basket(); + Assertions.assertTrue(basket.addItem(SKU.BGLP)); + } + + @Test + public void addBagelIncorrectlyTest() { + Basket basket = new Basket(); + basket.addItem(SKU.BGLP); + Assertions.assertEquals(1, basket.items.size()); + Assertions.assertNotEquals(SKU.BGLE, basket.items.getFirst().getSKU()); + } + + @Test + public void removeBagelCorrectlyTest() { + Basket basket = new Basket(); + basket.addItem(SKU.BGLP); + Assertions.assertEquals(1, basket.items.size()); + Assertions.assertTrue(basket.removeItem(SKU.BGLP)); + Assertions.assertEquals(0, basket.items.size()); + } + + @Test + public void removeBagelIncorrectlyTest() { + Basket basket = new Basket(); + basket.addItem(SKU.BGLP); + Assertions.assertFalse(basket.removeItem(SKU.BGLE)); + } + + @Test + public void changeCapacityCorrectlyTest() { + Basket basket = new Basket(); + basket.setCapacity(10); + Assertions.assertEquals(10, basket.getCapacity()); + } + + @Test + public void changeCapacityCorrectlyTest2() { + Basket basket = new Basket(); + Assertions.assertTrue(basket.setCapacity(10)); + } + + @Test + public void changeCapacityIncorrectlyTest() { + Basket basket = new Basket(); + Assertions.assertFalse(basket.setCapacity(-5)); + } + + @Test + public void changeCapacityIncorrectlyTest2() { + Basket basket = new Basket(); + basket.setCapacity(-20); + Assertions.assertNotEquals(-20, basket.getCapacity()); + } + + @Test + public void changeCapacityIncorrectlyTest3() { + Basket basket = new Basket(); + Bagel bagel1 = new Bagel(SKU.BGLP); + Bagel bagel2 = new Bagel(SKU.BGLO); + Coffee coffee = new Coffee(SKU.COFW); + basket.addItem(bagel1.SKU); + basket.addItem(bagel2.SKU); + basket.addItem(coffee.SKU); + float totalPrice = bagel1.getPrice() + bagel2.getPrice() + coffee.getPrice(); + Assertions.assertEquals(totalPrice, basket.calculateCost()); + } + + @Test + public void testetst() { + Basket basket = new Basket(); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.BGLO); + basket.addItem(SKU.COFW); + basket.addItem(SKU.COFW); + basket.addItem(SKU.COFB); + basket.addItem(SKU.COFB); + basket.addItem(SKU.FILB); + System.out.println(basket.getReceipt()); + } +} diff --git a/src/test/java/com/booleanuk/extension/CoffeeTest.java b/src/test/java/com/booleanuk/extension/CoffeeTest.java new file mode 100644 index 000000000..7917653ec --- /dev/null +++ b/src/test/java/com/booleanuk/extension/CoffeeTest.java @@ -0,0 +1,42 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class CoffeeTest { + @Test + public void checkCoffeePriceTest() { + Coffee coffee = new Coffee(SKU.COFB); + Assertions.assertEquals(0.99F, coffee.getPrice()); + } + + @Test + public void checkWrongCoffeePriceTest() { + Coffee coffee = new Coffee(SKU.COFW); + Assertions.assertNotEquals(0.99F, coffee.getPrice()); + } + + @Test + public void checkCoffeeNameTest() { + Coffee coffee = new Coffee(SKU.COFB); + Assertions.assertEquals("Coffee", coffee.getName()); + } + + @Test + public void checkWrongCoffeeNameTest() { + Coffee coffee = new Coffee(SKU.COFB); + Assertions.assertNotEquals("Bagel", coffee.getName()); + } + + @Test + public void checkCoffeeVariantTest() { + Coffee coffee = new Coffee(SKU.COFW); + Assertions.assertEquals("White", coffee.getVariant()); + } + + @Test + public void checkWrongCoffeeVariantTest() { + Coffee coffee = new Coffee(SKU.COFW); + Assertions.assertNotEquals("Black", coffee.getVariant()); + } +} diff --git a/src/test/java/com/booleanuk/extension/FillingTest.java b/src/test/java/com/booleanuk/extension/FillingTest.java new file mode 100644 index 000000000..cf80ef7a4 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/FillingTest.java @@ -0,0 +1,42 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class FillingTest { + @Test + public void checkFillingPriceTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertEquals(0.12F, filling.getPrice()); + } + + @Test + public void checkWrongFillingPriceTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertNotEquals(0.99F, filling.getPrice()); + } + + @Test + public void checkFillingNameTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertEquals("Filling", filling.getName()); + } + + @Test + public void checkWrongFillingNameTest() { + Filling filling = new Filling(SKU.FILC); + Assertions.assertNotEquals("Bagel", filling.getName()); + } + + @Test + public void checkFillingVariantTest() { + Filling filling = new Filling(SKU.FILB); + Assertions.assertEquals("Bacon", filling.getVariant()); + } + + @Test + public void checkWrongFillingVariantTest() { + Filling filling = new Filling(SKU.FILH); + Assertions.assertNotEquals("Bacon", filling.getVariant()); + } +}