From 5ef65227f7706ce98aa07fd07e6aef9dcfcb3067 Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Wed, 7 Mar 2018 19:24:59 +0800 Subject: [PATCH 001/280] Updated NFR and Use Cases --- docs/DeveloperGuide.adoc | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 1733af113b29..d9f7e82e7ee2 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -844,16 +844,68 @@ Use case ends. + Use case resumes at step 2. -_{More to be added}_ +[discrete] +=== Use case: Sort by locality + +*MSS* + +1. User types “/sortl” in to the command line. +2. Addressbook will prompt user to select whether they would like to view the list for students or tutors. +3. User will enter either “s” for students or “t” for tutors. +4. Addressbook will return a list of students or tutors based sorted by their locality. ++ +Use case ends. + +*Extensions* + +[none] +* 3a. System detects an invalid input. ++ +[none] +** 3a1. Addressbook request for either "s" or "t" to be inputted. +** 3a2. User enter required information. +** 3a3. Steps 3a1 and 3a2 are repeated until valid input is entered. ++ +Use case resumes at step 4. + +[discrete] +=== Use case: Match + +*MSS* + +1. User finds the client he wants to match. +2. Addressbook displays information of client. +3. User requests for a match. +4. Addressbook returns a list of potential matches. ++ +Use case ends. + +*Extensions* + +[none] +* 1a. Client cannot be found. ++ +Use case ends. + +* 3a. There is no match found. ++ +[none] +** 3a1. Addressbook returns an empty list. ++ +Use case ends. + [appendix] == Non Functional Requirements . Should work on any <> as long as it has Java `1.8.0_60` or higher installed. -. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. +. Should be able to hold up to 5000 persons without a noticeable sluggishness in performance for typical usage. . A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse. +. Application should be able execute any command within 3 seconds. +. Application should have a self-explanatory installation process. +. Application should be less than 5mb in size. +. Application is expected to allow printing. -_{More to be added}_ [appendix] == Glossary From 093bfc00e753002d0e06cd0f4f0a7520b68361bb Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 8 Mar 2018 17:25:22 +0800 Subject: [PATCH 002/280] StorageManager;AddresBookStorage;XmlAddressBookStorage: Added backupAddressBook --- .../java/seedu/address/storage/AddressBookStorage.java | 1 + src/main/java/seedu/address/storage/StorageManager.java | 5 +++++ .../java/seedu/address/storage/XmlAddressBookStorage.java | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/src/main/java/seedu/address/storage/AddressBookStorage.java b/src/main/java/seedu/address/storage/AddressBookStorage.java index cf5b527c063a..08cdbbe6b0e2 100644 --- a/src/main/java/seedu/address/storage/AddressBookStorage.java +++ b/src/main/java/seedu/address/storage/AddressBookStorage.java @@ -41,4 +41,5 @@ public interface AddressBookStorage { */ void saveAddressBook(ReadOnlyAddressBook addressBook, String filePath) throws IOException; + void backupAddressBook(ReadOnlyAddressBook addressBook) throws IOException; } diff --git a/src/main/java/seedu/address/storage/StorageManager.java b/src/main/java/seedu/address/storage/StorageManager.java index 53967b391a5a..87fed6361b88 100644 --- a/src/main/java/seedu/address/storage/StorageManager.java +++ b/src/main/java/seedu/address/storage/StorageManager.java @@ -77,6 +77,11 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook, String filePath) th addressBookStorage.saveAddressBook(addressBook, filePath); } + @Override + public void backupAddressBook(ReadOnlyAddressBook addressBook) throws IOException { + addressBookStorage.backupAddressBook(addressBook); + } + @Override @Subscribe diff --git a/src/main/java/seedu/address/storage/XmlAddressBookStorage.java b/src/main/java/seedu/address/storage/XmlAddressBookStorage.java index c77ebe67435c..05802a6b40cd 100644 --- a/src/main/java/seedu/address/storage/XmlAddressBookStorage.java +++ b/src/main/java/seedu/address/storage/XmlAddressBookStorage.java @@ -66,6 +66,11 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException saveAddressBook(addressBook, filePath); } + @Override + public void backupAddressBook(ReadOnlyAddressBook addressBook) throws IOException { + saveAddressBook(addressBook, filePath + ".backup"); + } + /** * Similar to {@link #saveAddressBook(ReadOnlyAddressBook)} * @param filePath location of the data. Cannot be null @@ -79,4 +84,6 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook, String filePath) th XmlFileStorage.saveDataToFile(file, new XmlSerializableAddressBook(addressBook)); } + + } From 3bb16d63a1e41643f558e0537075c7772d1f46d0 Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 8 Mar 2018 17:37:49 +0800 Subject: [PATCH 003/280] Repositioned some methods --- .../java/seedu/address/storage/StorageManager.java | 1 - .../seedu/address/storage/XmlAddressBookStorage.java | 11 ++++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/seedu/address/storage/StorageManager.java b/src/main/java/seedu/address/storage/StorageManager.java index 87fed6361b88..7a17725b0433 100644 --- a/src/main/java/seedu/address/storage/StorageManager.java +++ b/src/main/java/seedu/address/storage/StorageManager.java @@ -82,7 +82,6 @@ public void backupAddressBook(ReadOnlyAddressBook addressBook) throws IOExceptio addressBookStorage.backupAddressBook(addressBook); } - @Override @Subscribe public void handleAddressBookChangedEvent(AddressBookChangedEvent event) { diff --git a/src/main/java/seedu/address/storage/XmlAddressBookStorage.java b/src/main/java/seedu/address/storage/XmlAddressBookStorage.java index 05802a6b40cd..1e3824cc47d2 100644 --- a/src/main/java/seedu/address/storage/XmlAddressBookStorage.java +++ b/src/main/java/seedu/address/storage/XmlAddressBookStorage.java @@ -66,11 +66,6 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook) throws IOException saveAddressBook(addressBook, filePath); } - @Override - public void backupAddressBook(ReadOnlyAddressBook addressBook) throws IOException { - saveAddressBook(addressBook, filePath + ".backup"); - } - /** * Similar to {@link #saveAddressBook(ReadOnlyAddressBook)} * @param filePath location of the data. Cannot be null @@ -84,6 +79,8 @@ public void saveAddressBook(ReadOnlyAddressBook addressBook, String filePath) th XmlFileStorage.saveDataToFile(file, new XmlSerializableAddressBook(addressBook)); } - - + @Override + public void backupAddressBook(ReadOnlyAddressBook addressBook) throws IOException { + saveAddressBook(addressBook, filePath + ".backup"); + } } From d5223fc73e8c8365c466d732f6706cf22f4fd6c0 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 17:46:11 +0800 Subject: [PATCH 004/280] Update documentation to match my fork --- docs/DeveloperGuide.adoc | 2 +- docs/UserGuide.adoc | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 1733af113b29..bb7ba15d20a7 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -10,7 +10,7 @@ ifdef::env-github[] :tip-caption: :bulb: :note-caption: :information_source: endif::[] -:repoURL: https://github.com/se-edu/addressbook-level4/tree/master +:repoURL: https://github.com/CS2103JAN2018-F11-B2/main By: `Team SE-EDU`      Since: `Jun 2016`      Licence: `MIT` diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 74248917e438..8720be16662a 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -11,8 +11,7 @@ ifdef::env-github[] :tip-caption: :bulb: :note-caption: :information_source: endif::[] -:repoURL: https://github.com/se-edu/addressbook-level4 - +:repoURL: https://github.com/CS2103JAN2018-F11-B2/main By: `Team SE-EDU` Since: `Jun 2016` Licence: `MIT` == Introduction From f6f13a2f8d48c323d8cfd0d2ea6f90584ebe4427 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 18:10:23 +0800 Subject: [PATCH 005/280] Update the link to the 'build status' badge at the top of the README.adoc to point to the build status of your own repo. --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 03eff3a4d191..de2fac49b0b7 100644 --- a/README.adoc +++ b/README.adoc @@ -1,7 +1,7 @@ = Address Book (Level 4) ifdef::env-github,env-browser[:relfileprefix: docs/] -https://travis-ci.org/se-edu/addressbook-level4[image:https://travis-ci.org/se-edu/addressbook-level4.svg?branch=master[Build Status]] +https://travis-ci.org/CS2103JAN2018-F11-B2/main[image:https://travis-ci.org/se-edu/addressbook-level4.svg?branch=master[Build Status]] https://ci.appveyor.com/project/damithc/addressbook-level4[image:https://ci.appveyor.com/api/projects/status/3boko2x2vr5cc3w2?svg=true[Build status]] https://coveralls.io/github/se-edu/addressbook-level4?branch=master[image:https://coveralls.io/repos/github/se-edu/addressbook-level4/badge.svg?branch=master[Coverage Status]] https://www.codacy.com/app/damith/addressbook-level4?utm_source=github.com&utm_medium=referral&utm_content=se-edu/addressbook-level4&utm_campaign=Badge_Grade[image:https://api.codacy.com/project/badge/Grade/fc0b7775cf7f4fdeaf08776f3d8e364a[Codacy Badge]] From 00594513a6e11d47cbcfc38555025b36da812ee6 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 19:31:33 +0800 Subject: [PATCH 006/280] Add colour to tags label --- .../java/seedu/address/ui/PersonCard.java | 26 +++++++++++++++++- src/main/resources/view/DarkTheme.css | 27 +++++++++++++++++-- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index f6727ea83abd..bc5785925a70 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -14,6 +14,8 @@ public class PersonCard extends UiPart { private static final String FXML = "PersonListCard.fxml"; + private static final String[] TAGS_COLOUR_STYLES = {"red" , "blue" , "green" , "yellow" , "orange"}; + /** * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. * As a consequence, UI elements' variable names cannot be set to such keywords @@ -47,7 +49,29 @@ public PersonCard(Person person, int displayedIndex) { phone.setText(person.getPhone().value); address.setText(person.getAddress().value); email.setText(person.getEmail().value); - person.getTags().forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); + intTags(person); + } + + /** + *@author olimhc-reused + *Reused from https://github.com/se-edu/addressbook-level4/pull/798/commits with minor modification + * Initialises tags + * @param person + */ + private void intTags(Person person){ + person.getTags().forEach(tag ->{ + Label newLabel = new Label(tag.tagName); + newLabel.getStyleClass().add(getColour(tag.tagName)); + tags.getChildren().add(newLabel); + }); + } + + /** + * @param name + * @return String colour + */ + private String getColour(String name){ + return TAGS_COLOUR_STYLES[(Math.abs(name.hashCode() % TAGS_COLOUR_STYLES.length))]; } @Override diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index d06336391cca..22909fd6d3fb 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -342,10 +342,33 @@ } #tags .label { - -fx-text-fill: white; - -fx-background-color: #3e7b91; -fx-padding: 1 3 1 3; -fx-border-radius: 2; -fx-background-radius: 2; -fx-font-size: 11; } + +#tags .red { + -fx-text-fill: white; + -fx-background-color: red; +} + +#tags .blue { + -fx-text-fill: white; + -fx-background-color: blue; +} + +#tags .green { + -fx-text-fill: white; + -fx-background-color: green; +} + +#tags .yellow { + -fx-text-fill: black; + -fx-background-color: yellow; +} + +#tags .orange { + -fx-text-fill: black; + -fx-background-color: orange; +} From df3328e628e28ca8b686990b886f742494e0c46d Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 19:35:40 +0800 Subject: [PATCH 007/280] update user stories --- docs/DeveloperGuide.adoc | 52 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 1733af113b29..494cd206b77c 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -806,9 +806,59 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un |`* * *` |user |find a person by name |locate details of persons without having to go through the entire list +|`* * *` |user |sort contacts based on their locality |better match students to tutors + +|`* * *` |user |edit the information stored |keep the information up to date + +|`* * *` |user |tag tutors and students with multiple values | + +|`* * *` |user |add contacts of both tutors and students | + +|`* * *` |user |categorise contacts between students and tutors | + +|`* * *` |user |group clients based on the subject they wish to study/teach | + +|`* * *` |user |record what preference the students/tutors have (male/female) | + +|`* * *` |user |see and compare the price that students/tutors are willing to pay/accept|match them based on pricing + +|`* * *` |user |have an autosave function |changes will be saved once i exit the application + |`* *` |user |hide <> by default |minimize chance of someone else seeing them by accident -|`*` |user with many persons in the address book |sort persons by name |locate a person easily +|`* *` |user |do multi-layer searching |narrow down the options + +|`* *` |student |request to know the qualification of the tutor |make my decision wisely + +|`* *` |tutor |request to know the grades of the students |make my decision wisely + +|`* *` |user |easily delete all students/tutors that quit with a single command |save time manually deleting + +|`* *` |user |get a list of all tutors that corresponds to a students requirements | + +|`* *` |user |get a list of all students that corresponds to a tutor's requirements | + +|`* *` |user |automatically update the year of all students |need not manually change all the information during new year + +|`* *` |user |update which time slot the tutor is already working |plan their timetable without any clash in timing + +|`* *` |user |have a ranking on how good the tutor is |understand which tutor I should recommend more + +|`* *` |user |highlight urgent tuition requests |set reminder to place more attention on these assignments + +|`* *` |user |blacklist certain tutors or students |make sure I will not accept their assignments + +|`* *` |user |have the option to customise the font size and colour |make changes to the appearance to suit my preference + +|`* *` |user |have the option to customise my background |make the application more appealing to me + +|`* *` |user |email the contacts in the application |save the trouble from opening another web-browser or email application + +|`* *` |user |keep track of whether the tutors have paid me their agent fee |keep track and remind those who have not pay me. + +|`*` |user |directly navigate between contacts |save the trouble from returning to the main page every time + +|`*` |user |keep a record of how much the students improve |keep track of how good the tutor is |======================================================================= _{More to be added}_ From 2547113105e3817bed71ad7b26ef78c445873cff Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 19:37:05 +0800 Subject: [PATCH 008/280] Update JUnit for tag labels --- .../guitests/guihandles/PersonCardHandle.java | 8 ++++ .../address/ui/testutil/GuiTestAssert.java | 48 ++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/test/java/guitests/guihandles/PersonCardHandle.java b/src/test/java/guitests/guihandles/PersonCardHandle.java index d337d3a4cee9..a5c1466c8fd4 100644 --- a/src/test/java/guitests/guihandles/PersonCardHandle.java +++ b/src/test/java/guitests/guihandles/PersonCardHandle.java @@ -68,4 +68,12 @@ public List getTags() { .map(Label::getText) .collect(Collectors.toList()); } + + public List getTagStyleClasses(String tag) { + return tagLabels.stream() + .filter(label -> label.getText().equals(tag)) + .map(Label::getStyleClass) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("No such tag.")); + } } diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index d21cc2fb3739..348fbd1f1fdd 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -2,6 +2,7 @@ import static org.junit.Assert.assertEquals; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -14,6 +15,8 @@ * A set of assertion methods useful for writing GUI tests. */ public class GuiTestAssert { + private static final String LABEL_STYLE = "label"; + /** * Asserts that {@code actualCard} displays the same values as {@code expectedCard}. */ @@ -31,11 +34,52 @@ public static void assertCardEquals(PersonCardHandle expectedCard, PersonCardHan */ public static void assertCardDisplaysPerson(Person expectedPerson, PersonCardHandle actualCard) { assertEquals(expectedPerson.getName().fullName, actualCard.getName()); + + + + assertEquals(expectedPerson.getPhone().value, actualCard.getPhone()); + assertEquals(expectedPerson.getEmail().value, actualCard.getEmail()); assertEquals(expectedPerson.getAddress().value, actualCard.getAddress()); - assertEquals(expectedPerson.getTags().stream().map(tag -> tag.tagName).collect(Collectors.toList()), - actualCard.getTags()); + //assertTagEquals(expectedPerson, actualCard); + } + + private static void assertTagEquals(Person expectedPerson, PersonCardHandle actualCard) { + List expectedTags = expectedPerson.getTags() + .stream().map(tag -> tag.tagName) + .collect(Collectors.toList()); + + assertEquals(expectedTags, actualCard.getTags()); + + expectedTags.forEach(tag -> + assertEquals(Arrays.asList(LABEL_STYLE,getTagColorStyleFor(tag)), + actualCard.getTagStyleClasses(tag))); + } + + /** + *To be updated + */ + private static String + getTagColorStyleFor(String tagName){ + + switch(tagName) { + case "owesMoney": + return "red"; + + case "friends": + return "red"; + + case "friend": + return "orange"; + + case "husband": + return "orange"; + + default: + return ""; + } + } /** From c8b7084373eba8ef7dd933c0175247098655b2f7 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 19:56:30 +0800 Subject: [PATCH 009/280] Minor formatting changes --- src/main/java/seedu/address/ui/PersonCard.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index bc5785925a70..94087059617b 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -58,8 +58,8 @@ public PersonCard(Person person, int displayedIndex) { * Initialises tags * @param person */ - private void intTags(Person person){ - person.getTags().forEach(tag ->{ + private void intTags(Person person) { + person.getTags().forEach(tag -> { Label newLabel = new Label(tag.tagName); newLabel.getStyleClass().add(getColour(tag.tagName)); tags.getChildren().add(newLabel); @@ -70,7 +70,7 @@ private void intTags(Person person){ * @param name * @return String colour */ - private String getColour(String name){ + private String getColour(String name) { return TAGS_COLOUR_STYLES[(Math.abs(name.hashCode() % TAGS_COLOUR_STYLES.length))]; } From 793b78b45d78722851644cfb245d68d8d73ae2d1 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 20:10:48 +0800 Subject: [PATCH 010/280] Minor format edits --- .../address/ui/testutil/GuiTestAssert.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 348fbd1f1fdd..026e9699da5d 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -34,15 +34,10 @@ public static void assertCardEquals(PersonCardHandle expectedCard, PersonCardHan */ public static void assertCardDisplaysPerson(Person expectedPerson, PersonCardHandle actualCard) { assertEquals(expectedPerson.getName().fullName, actualCard.getName()); - - - - assertEquals(expectedPerson.getPhone().value, actualCard.getPhone()); - assertEquals(expectedPerson.getEmail().value, actualCard.getEmail()); assertEquals(expectedPerson.getAddress().value, actualCard.getAddress()); - //assertTagEquals(expectedPerson, actualCard); + assertTagEquals(expectedPerson, actualCard); } private static void assertTagEquals(Person expectedPerson, PersonCardHandle actualCard) { @@ -60,24 +55,24 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu /** *To be updated */ - private static String - getTagColorStyleFor(String tagName){ + private static String getTagColorStyleFor(String tagName) { switch(tagName) { - case "owesMoney": - return "red"; - case "friends": - return "red"; + case "owesMoney": + return "red"; + + case "friends": + return "red"; - case "friend": - return "orange"; + case "friend": + return "orange"; - case "husband": - return "orange"; + case "husband": + return "orange"; - default: - return ""; + default: + return ""; } } From 8c6e6b1d4f290b129805b1d7454f1393ee7b0351 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 20:30:10 +0800 Subject: [PATCH 011/280] add alias for commands and update parser for the changes --- .../seedu/address/logic/commands/AddCommand.java | 1 + .../seedu/address/logic/commands/ClearCommand.java | 1 + .../seedu/address/logic/commands/DeleteCommand.java | 1 + .../seedu/address/logic/commands/EditCommand.java | 1 + .../seedu/address/logic/commands/ExitCommand.java | 1 + .../seedu/address/logic/commands/FindCommand.java | 1 + .../seedu/address/logic/commands/HelpCommand.java | 1 + .../seedu/address/logic/commands/HistoryCommand.java | 1 + .../seedu/address/logic/commands/ListCommand.java | 1 + .../seedu/address/logic/commands/RedoCommand.java | 1 + .../seedu/address/logic/commands/SelectCommand.java | 1 + .../seedu/address/logic/commands/UndoCommand.java | 1 + .../address/logic/parser/AddressBookParser.java | 12 ++++++++++++ 13 files changed, 24 insertions(+) diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index c334710c0ea3..d5de4a572715 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -17,6 +17,7 @@ public class AddCommand extends UndoableCommand { public static final String COMMAND_WORD = "add"; + public static final String COMMAND_ALIAS = "a"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a person to the address book. " + "Parameters: " diff --git a/src/main/java/seedu/address/logic/commands/ClearCommand.java b/src/main/java/seedu/address/logic/commands/ClearCommand.java index ceeb7ba913c6..6d04efaf3295 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCommand.java +++ b/src/main/java/seedu/address/logic/commands/ClearCommand.java @@ -10,6 +10,7 @@ public class ClearCommand extends UndoableCommand { public static final String COMMAND_WORD = "clear"; + public static final String COMMAND_ALIAS = "c"; public static final String MESSAGE_SUCCESS = "Address book has been cleared!"; diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/seedu/address/logic/commands/DeleteCommand.java index b539d240001a..0cd0fbd860ad 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteCommand.java @@ -17,6 +17,7 @@ public class DeleteCommand extends UndoableCommand { public static final String COMMAND_WORD = "delete"; + public static final String COMMAND_ALIAS = "d"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Deletes the person identified by the index number used in the last person listing.\n" diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index e6c3a3e034bc..3021c951a5b1 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -34,6 +34,7 @@ public class EditCommand extends UndoableCommand { public static final String COMMAND_WORD = "edit"; + public static final String COMMAND_ALIAS = "e"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the details of the person identified " + "by the index number used in the last person listing. " diff --git a/src/main/java/seedu/address/logic/commands/ExitCommand.java b/src/main/java/seedu/address/logic/commands/ExitCommand.java index fbd1beb2966e..e9d10ba7669f 100644 --- a/src/main/java/seedu/address/logic/commands/ExitCommand.java +++ b/src/main/java/seedu/address/logic/commands/ExitCommand.java @@ -9,6 +9,7 @@ public class ExitCommand extends Command { public static final String COMMAND_WORD = "exit"; + public static final String COMMAND_ALIAS = "x"; public static final String MESSAGE_EXIT_ACKNOWLEDGEMENT = "Exiting Address Book as requested ..."; diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/seedu/address/logic/commands/FindCommand.java index b1e671f633d2..a73078ed6ea3 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/seedu/address/logic/commands/FindCommand.java @@ -9,6 +9,7 @@ public class FindCommand extends Command { public static final String COMMAND_WORD = "find"; + public static final String COMMAND_ALIAS = "f"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all persons whose names contain any of " + "the specified keywords (case-sensitive) and displays them as a list with index numbers.\n" diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/seedu/address/logic/commands/HelpCommand.java index 10febf6d9136..740aa81045e7 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/seedu/address/logic/commands/HelpCommand.java @@ -9,6 +9,7 @@ public class HelpCommand extends Command { public static final String COMMAND_WORD = "help"; + public static final String COMMAND_ALIAS = "1"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Shows program usage instructions.\n" + "Example: " + COMMAND_WORD; diff --git a/src/main/java/seedu/address/logic/commands/HistoryCommand.java b/src/main/java/seedu/address/logic/commands/HistoryCommand.java index f87abee5511d..a3a8f11563d0 100644 --- a/src/main/java/seedu/address/logic/commands/HistoryCommand.java +++ b/src/main/java/seedu/address/logic/commands/HistoryCommand.java @@ -15,6 +15,7 @@ public class HistoryCommand extends Command { public static final String COMMAND_WORD = "history"; + public static final String COMMAND_ALIAS = "h"; public static final String MESSAGE_SUCCESS = "Entered commands (from most recent to earliest):\n%1$s"; public static final String MESSAGE_NO_HISTORY = "You have not yet entered any commands."; diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index 7b6463780824..2631e4dda649 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -8,6 +8,7 @@ public class ListCommand extends Command { public static final String COMMAND_WORD = "list"; + public static final String COMMAND_ALIAS = "l"; public static final String MESSAGE_SUCCESS = "Listed all persons"; diff --git a/src/main/java/seedu/address/logic/commands/RedoCommand.java b/src/main/java/seedu/address/logic/commands/RedoCommand.java index 7b99d0f372fc..311c95c1a1f2 100644 --- a/src/main/java/seedu/address/logic/commands/RedoCommand.java +++ b/src/main/java/seedu/address/logic/commands/RedoCommand.java @@ -13,6 +13,7 @@ public class RedoCommand extends Command { public static final String COMMAND_WORD = "redo"; + public static final String COMMAND_ALIAS = "r"; public static final String MESSAGE_SUCCESS = "Redo success!"; public static final String MESSAGE_FAILURE = "No more commands to redo!"; diff --git a/src/main/java/seedu/address/logic/commands/SelectCommand.java b/src/main/java/seedu/address/logic/commands/SelectCommand.java index 9e3840a9dde6..0bc2e3e21485 100644 --- a/src/main/java/seedu/address/logic/commands/SelectCommand.java +++ b/src/main/java/seedu/address/logic/commands/SelectCommand.java @@ -15,6 +15,7 @@ public class SelectCommand extends Command { public static final String COMMAND_WORD = "select"; + public static final String COMMAND_ALIAS = "s"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Selects the person identified by the index number used in the last person listing.\n" diff --git a/src/main/java/seedu/address/logic/commands/UndoCommand.java b/src/main/java/seedu/address/logic/commands/UndoCommand.java index 1f3dcea8bbaa..7d62dcc53d38 100644 --- a/src/main/java/seedu/address/logic/commands/UndoCommand.java +++ b/src/main/java/seedu/address/logic/commands/UndoCommand.java @@ -13,6 +13,7 @@ public class UndoCommand extends Command { public static final String COMMAND_WORD = "undo"; + public static final String COMMAND_ALIAS = "u"; public static final String MESSAGE_SUCCESS = "Undo success!"; public static final String MESSAGE_FAILURE = "No more commands to undo!"; diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index b7d57f5db86a..ae84917f7f04 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -49,39 +49,51 @@ public Command parseCommand(String userInput) throws ParseException { switch (commandWord) { case AddCommand.COMMAND_WORD: + case AddCommand.COMMAND_ALIAS: return new AddCommandParser().parse(arguments); case EditCommand.COMMAND_WORD: + case EditCommand.COMMAND_ALIAS: return new EditCommandParser().parse(arguments); case SelectCommand.COMMAND_WORD: + case SelectCommand.COMMAND_ALIAS: return new SelectCommandParser().parse(arguments); case DeleteCommand.COMMAND_WORD: + case DeleteCommand.COMMAND_ALIAS: return new DeleteCommandParser().parse(arguments); case ClearCommand.COMMAND_WORD: + case ClearCommand.COMMAND_ALIAS: return new ClearCommand(); case FindCommand.COMMAND_WORD: + case FindCommand.COMMAND_ALIAS: return new FindCommandParser().parse(arguments); case ListCommand.COMMAND_WORD: + case ListCommand.COMMAND_ALIAS: return new ListCommand(); case HistoryCommand.COMMAND_WORD: + case HistoryCommand.COMMAND_ALIAS: return new HistoryCommand(); case ExitCommand.COMMAND_WORD: + case ExitCommand.COMMAND_ALIAS: return new ExitCommand(); case HelpCommand.COMMAND_WORD: + case HelpCommand.COMMAND_ALIAS: return new HelpCommand(); case UndoCommand.COMMAND_WORD: + case UndoCommand.COMMAND_ALIAS: return new UndoCommand(); case RedoCommand.COMMAND_WORD: + case RedoCommand.COMMAND_ALIAS: return new RedoCommand(); default: From ce4a1f5a7c6fa1a0b14090a63c07a3b1da606e0f Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 20:36:01 +0800 Subject: [PATCH 012/280] Update test case --- .../address/ui/testutil/GuiTestAssert.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 026e9699da5d..76841cbd3b35 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -40,6 +40,11 @@ public static void assertCardDisplaysPerson(Person expectedPerson, PersonCardHan assertTagEquals(expectedPerson, actualCard); } + /** + * Asserts that{@code actualCard} displays the same tag and colour of {@code expectedPerson} + * @param expectedPerson + * @param actualCard + */ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actualCard) { List expectedTags = expectedPerson.getTags() .stream().map(tag -> tag.tagName) @@ -71,6 +76,18 @@ private static String getTagColorStyleFor(String tagName) { case "husband": return "orange"; + case "colleagues": + return "green"; + + case "classmates": + return "red"; + + case "neighbours": + return "green"; + + case "family": + return "orange"; + default: return ""; } From 28f264d593671afb81ed9b409d53b6009d20ec04 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 20:42:35 +0800 Subject: [PATCH 013/280] Minor format edit --- src/test/java/seedu/address/ui/testutil/GuiTestAssert.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 76841cbd3b35..b885213d2db2 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -53,7 +53,7 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu assertEquals(expectedTags, actualCard.getTags()); expectedTags.forEach(tag -> - assertEquals(Arrays.asList(LABEL_STYLE,getTagColorStyleFor(tag)), + assertEquals(Arrays.asList(LABEL_STYLE,getTagColorStyleFor(tag)), actualCard.getTagStyleClasses(tag))); } From 0d40498dbaaface43068b27ca08b2aa10646be1a Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 20:48:54 +0800 Subject: [PATCH 014/280] Minor format edit --- src/test/java/seedu/address/ui/testutil/GuiTestAssert.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index b885213d2db2..c103fcf19a38 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -52,9 +52,8 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu assertEquals(expectedTags, actualCard.getTags()); - expectedTags.forEach(tag -> - assertEquals(Arrays.asList(LABEL_STYLE,getTagColorStyleFor(tag)), - actualCard.getTagStyleClasses(tag))); + expectedTags.forEach(tag -> assertEquals(Arrays.asList(LABEL_STYLE,getTagColorStyleFor(tag)), + actualCard.getTagStyleClasses(tag))); } /** From 2f77508c16a7409eea1efd51cb8ba7e31e171708 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 20:55:29 +0800 Subject: [PATCH 015/280] Minor format edit --- src/test/java/seedu/address/ui/testutil/GuiTestAssert.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index c103fcf19a38..4e738570ad7d 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -52,8 +52,8 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu assertEquals(expectedTags, actualCard.getTags()); - expectedTags.forEach(tag -> assertEquals(Arrays.asList(LABEL_STYLE,getTagColorStyleFor(tag)), - actualCard.getTagStyleClasses(tag))); + expectedTags.forEach(tag -> assertEquals(Arrays + .asList(LABEL_STYLE,getTagColorStyleFor(tag)), actualCard.getTagStyleClasses(tag))); } /** From 82677887fd55288b75d49e7eb4d52f07dc06d2d4 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 21:00:02 +0800 Subject: [PATCH 016/280] Minor edit changes --- src/test/java/seedu/address/ui/testutil/GuiTestAssert.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 4e738570ad7d..81d6608e85bf 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -53,7 +53,7 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu assertEquals(expectedTags, actualCard.getTags()); expectedTags.forEach(tag -> assertEquals(Arrays - .asList(LABEL_STYLE,getTagColorStyleFor(tag)), actualCard.getTagStyleClasses(tag))); + .asList(LABEL_STYLE, getTagColorStyleFor(tag)), actualCard.getTagStyleClasses(tag))); } /** From d3949f61e7b74297f1c16c25973c37c454570245 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 8 Mar 2018 21:00:02 +0800 Subject: [PATCH 017/280] Minor format edit --- src/test/java/seedu/address/ui/testutil/GuiTestAssert.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 4e738570ad7d..81d6608e85bf 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -53,7 +53,7 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu assertEquals(expectedTags, actualCard.getTags()); expectedTags.forEach(tag -> assertEquals(Arrays - .asList(LABEL_STYLE,getTagColorStyleFor(tag)), actualCard.getTagStyleClasses(tag))); + .asList(LABEL_STYLE, getTagColorStyleFor(tag)), actualCard.getTagStyleClasses(tag))); } /** From 977eece32d2085bf4e93444839511de503f4ccd9 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 21:41:53 +0800 Subject: [PATCH 018/280] Update JUnite test cases --- .../logic/parser/AddressBookParserTest.java | 91 ++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 7466da232666..3b575ed70ba8 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -48,10 +48,23 @@ public void parseCommand_add() throws Exception { assertEquals(new AddCommand(person), command); } + @Test + public void parseCommand_addAlias() throws Exception { + Person person = new PersonBuilder().build(); + AddCommand command = (AddCommand) parser.parseCommand(AddCommand.COMMAND_ALIAS + " " + PersonUtil.getPersonDetails(person)); + assertEquals(new AddCommand(person), command); + } + @Test public void parseCommand_clear() throws Exception { - assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand); - assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + " 3") instanceof ClearCommand); + assertTrue(parser.parseCommand(ClearCommand.COMMAND_ALIAS) instanceof ClearCommand); + assertTrue(parser.parseCommand(ClearCommand.COMMAND_ALIAS + " 3") instanceof ClearCommand); + } + + @Test + public void parseCommand_clearAlias() throws Exception { + assertTrue(parser.parseCommand(ClearCommand.COMMAND_ALIAS) instanceof ClearCommand); + assertTrue(parser.parseCommand(ClearCommand.COMMAND_ALIAS + " 3") instanceof ClearCommand); } @Test @@ -61,6 +74,13 @@ public void parseCommand_delete() throws Exception { assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); } + @Test + public void parseCommand_deleteAlias() throws Exception { + DeleteCommand command = (DeleteCommand) parser.parseCommand( + DeleteCommand.COMMAND_ALIAS + " " + INDEX_FIRST_PERSON.getOneBased()); + assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command); + } + @Test public void parseCommand_edit() throws Exception { Person person = new PersonBuilder().build(); @@ -70,12 +90,27 @@ public void parseCommand_edit() throws Exception { assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); } + @Test + public void parseCommand_editAlias() throws Exception { + Person person = new PersonBuilder().build(); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(person).build(); + EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_ALIAS + " " + + INDEX_FIRST_PERSON.getOneBased() + " " + PersonUtil.getPersonDetails(person)); + assertEquals(new EditCommand(INDEX_FIRST_PERSON, descriptor), command); + } + @Test public void parseCommand_exit() throws Exception { assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); } + @Test + public void parseCommand_exitAlias() throws Exception { + assertTrue(parser.parseCommand(ExitCommand.COMMAND_ALIAS) instanceof ExitCommand); + assertTrue(parser.parseCommand(ExitCommand.COMMAND_ALIAS + " 3") instanceof ExitCommand); + } + @Test public void parseCommand_find() throws Exception { List keywords = Arrays.asList("foo", "bar", "baz"); @@ -84,12 +119,26 @@ public void parseCommand_find() throws Exception { assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); } + @Test + public void parseCommand_findAlias() throws Exception { + List keywords = Arrays.asList("foo", "bar", "baz"); + FindCommand command = (FindCommand) parser.parseCommand( + FindCommand.COMMAND_ALIAS + " " + keywords.stream().collect(Collectors.joining(" "))); + assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); + } + @Test public void parseCommand_help() throws Exception { assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); } + @Test + public void parseCommand_helpAlias() throws Exception { + assertTrue(parser.parseCommand(HelpCommand.COMMAND_ALIAS) instanceof HelpCommand); + assertTrue(parser.parseCommand(HelpCommand.COMMAND_ALIAS + " 3") instanceof HelpCommand); + } + @Test public void parseCommand_history() throws Exception { assertTrue(parser.parseCommand(HistoryCommand.COMMAND_WORD) instanceof HistoryCommand); @@ -103,12 +152,31 @@ public void parseCommand_history() throws Exception { } } + @Test + public void parseCommand_historyAlias() throws Exception { + assertTrue(parser.parseCommand(HistoryCommand.COMMAND_ALIAS) instanceof HistoryCommand); + assertTrue(parser.parseCommand(HistoryCommand.COMMAND_ALIAS + " 3") instanceof HistoryCommand); + + try { + parser.parseCommand("histories"); + fail("The expected ParseException was not thrown."); + } catch (ParseException pe) { + assertEquals(MESSAGE_UNKNOWN_COMMAND, pe.getMessage()); + } + } + @Test public void parseCommand_list() throws Exception { assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand); assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + " 3") instanceof ListCommand); } + @Test + public void parseCommand_listAlias() throws Exception { + assertTrue(parser.parseCommand(ListCommand.COMMAND_ALIAS) instanceof ListCommand); + assertTrue(parser.parseCommand(ListCommand.COMMAND_ALIAS + " 3") instanceof ListCommand); + } + @Test public void parseCommand_select() throws Exception { SelectCommand command = (SelectCommand) parser.parseCommand( @@ -116,18 +184,37 @@ public void parseCommand_select() throws Exception { assertEquals(new SelectCommand(INDEX_FIRST_PERSON), command); } + @Test + public void parseCommand_selectAlias() throws Exception { + SelectCommand command = (SelectCommand) parser.parseCommand( + SelectCommand.COMMAND_ALIAS + " " + INDEX_FIRST_PERSON.getOneBased()); + assertEquals(new SelectCommand(INDEX_FIRST_PERSON), command); + } + @Test public void parseCommand_redoCommandWord_returnsRedoCommand() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_WORD) instanceof RedoCommand); assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); } + @Test + public void parseCommand_redoCommandWord_returnsRedoCommandAlias() throws Exception { + assertTrue(parser.parseCommand(RedoCommand.COMMAND_ALIAS) instanceof RedoCommand); + assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); + } + @Test public void parseCommand_undoCommandWord_returnsUndoCommand() throws Exception { assertTrue(parser.parseCommand(UndoCommand.COMMAND_WORD) instanceof UndoCommand); assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); } + @Test + public void parseCommand_undoCommandWord_returnsUndoCommandAlias() throws Exception { + assertTrue(parser.parseCommand(UndoCommand.COMMAND_ALIAS) instanceof UndoCommand); + assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); + } + @Test public void parseCommand_unrecognisedInput_throwsParseException() throws Exception { thrown.expect(ParseException.class); From a6cb86b54bd3b799a02d29a7b6b1d9a00f54b43e Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 23:03:23 +0800 Subject: [PATCH 019/280] Update UserGuide --- docs/UserGuide.adoc | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 74248917e438..0905e1f076bc 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -50,6 +50,8 @@ e.g. typing *`help`* and pressing kbd:[Enter] will open the help window. ==== *Command Format* + +* there are alias for some of the commands, which helps users to save some time. e.g. for add command, you can use add n/... or a n/... * Words in `UPPER_CASE` are the parameters to be supplied by the user e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`. * Items in square brackets are optional e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`. * Items with `…`​ after them can be used multiple times including zero times e.g. `[t/TAG]...` can be used as `{nbsp}` (i.e. 0 times), `t/friend`, `t/friend t/family` etc. @@ -60,29 +62,35 @@ e.g. typing *`help`* and pressing kbd:[Enter] will open the help window. Format: `help` +Alias Format: `1` + === Adding a person: `add` Adds a person to the address book + Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]...` +Alias Format: `a n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]...` [TIP] A person can have any number of tags (including 0) Examples: * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` -* `add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal` +* `a n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal` === Listing all persons : `list` Shows a list of all persons in the address book. + Format: `list` +Alias Format: `l` + === Editing a person : `edit` Edits an existing person in the address book. + Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]...` +Alias Format: `e INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]...` **** * Edits the person at the specified `INDEX`. The index refers to the index number shown in the last person listing. The index *must be a positive integer* 1, 2, 3, ... * At least one of the optional fields must be provided. @@ -95,7 +103,7 @@ Examples: * `edit 1 p/91234567 e/johndoe@example.com` + Edits the phone number and email address of the 1st person to be `91234567` and `johndoe@example.com` respectively. -* `edit 2 n/Betsy Crower t/` + +* `e 2 n/Betsy Crower t/` + Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags. === Locating persons by name: `find` @@ -103,6 +111,7 @@ Edits the name of the 2nd person to be `Betsy Crower` and clears all existing ta Finds persons whose names contain any of the given keywords. + Format: `find KEYWORD [MORE_KEYWORDS]` +Alias Format: `f KEYWORD [MORE_KEYWORDS]` **** * The search is case insensitive. e.g `hans` will match `Hans` * The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans` @@ -115,7 +124,7 @@ Examples: * `find John` + Returns `john` and `John Doe` -* `find Betsy Tim John` + +* `f Betsy Tim John` + Returns any person having names `Betsy`, `Tim`, or `John` === Deleting a person : `delete` @@ -123,6 +132,7 @@ Returns any person having names `Betsy`, `Tim`, or `John` Deletes the specified person from the address book. + Format: `delete INDEX` +Alias Format: `d INDEX` **** * Deletes the person at the specified `INDEX`. * The index refers to the index number shown in the most recent listing. @@ -135,7 +145,7 @@ Examples: `delete 2` + Deletes the 2nd person in the address book. * `find Betsy` + -`delete 1` + +`d 1` + Deletes the 1st person in the results of the `find` command. === Selecting a person : `select` @@ -143,6 +153,7 @@ Deletes the 1st person in the results of the `find` command. Selects the person identified by the index number used in the last person listing. + Format: `select INDEX` +Alias Format: `s INDEX` **** * Selects the person and loads the Google search page the person at the specified `INDEX`. * The index refers to the index number shown in the most recent listing. @@ -155,7 +166,7 @@ Examples: `select 2` + Selects the 2nd person in the address book. * `find Betsy` + -`select 1` + +`s 1` + Selects the 1st person in the results of the `find` command. === Listing entered commands : `history` @@ -163,6 +174,7 @@ Selects the 1st person in the results of the `find` command. Lists all the commands that you have entered in reverse chronological order. + Format: `history` +Alias Format: `h` [NOTE] ==== Pressing the kbd:[↑] and kbd:[↓] arrows will display the previous and next input respectively in the command box. @@ -174,6 +186,7 @@ Pressing the kbd:[↑] and kbd:[↓] arrows will display the previous and Restores the address book to the state before the previous _undoable_ command was executed. + Format: `undo` +Alias Format: `u` [NOTE] ==== Undoable commands: those commands that modify the address book's content (`add`, `delete`, `edit` and `clear`). @@ -187,7 +200,7 @@ Examples: * `select 1` + `list` + -`undo` + +`u` + The `undo` command fails as there are no undoable commands executed previously. * `delete 1` + @@ -200,6 +213,8 @@ The `undo` command fails as there are no undoable commands executed previously. Reverses the most recent `undo` command. + Format: `redo` +Alias Format: `r` + Examples: * `delete 1` + @@ -207,7 +222,7 @@ Examples: `redo` (reapplies the `delete 1` command) + * `delete 1` + -`redo` + +`r` + The `redo` command fails as there are no `undo` commands executed previously. * `delete 1` + @@ -223,11 +238,15 @@ The `redo` command fails as there are no `undo` commands executed previously. Clears all entries from the address book. + Format: `clear` +Alias Format: `c` + === Exiting the program : `exit` Exits the program. + Format: `exit` +Alias Format: `x` + === Saving the data Address book data are saved in the hard disk automatically after any command that changes the data. + From f627c13fc24c85f3e7c189879872fdbe9c2deed0 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Thu, 8 Mar 2018 23:42:58 +0800 Subject: [PATCH 020/280] update some JUnit Tests --- .../seedu/address/logic/parser/AddressBookParserTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 3b575ed70ba8..dadb57e9461f 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -194,25 +194,25 @@ public void parseCommand_selectAlias() throws Exception { @Test public void parseCommand_redoCommandWord_returnsRedoCommand() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_WORD) instanceof RedoCommand); - assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); + assertTrue(parser.parseCommand(RedoCommand.COMMAND_WORD + " 1") instanceof RedoCommand); } @Test public void parseCommand_redoCommandWord_returnsRedoCommandAlias() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_ALIAS) instanceof RedoCommand); - assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); + assertTrue(parser.parseCommand(RedoCommand.COMMAND_ALIAS + " 1") instanceof RedoCommand); } @Test public void parseCommand_undoCommandWord_returnsUndoCommand() throws Exception { assertTrue(parser.parseCommand(UndoCommand.COMMAND_WORD) instanceof UndoCommand); - assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); + assertTrue(parser.parseCommand( UndoCommand.COMMAND_WORD +" 3") instanceof UndoCommand); } @Test public void parseCommand_undoCommandWord_returnsUndoCommandAlias() throws Exception { assertTrue(parser.parseCommand(UndoCommand.COMMAND_ALIAS) instanceof UndoCommand); - assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); + assertTrue(parser.parseCommand(UndoCommand.COMMAND_ALIAS + " 3") instanceof UndoCommand); } @Test From a47df13dfe76aea563a445031427f12ec11a9468 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Fri, 9 Mar 2018 00:07:54 +0800 Subject: [PATCH 021/280] modify JUnit Tests to pass Travis CI test --- .../address/logic/parser/AddressBookParserTest.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index dadb57e9461f..d36068f2e031 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -51,7 +51,8 @@ public void parseCommand_add() throws Exception { @Test public void parseCommand_addAlias() throws Exception { Person person = new PersonBuilder().build(); - AddCommand command = (AddCommand) parser.parseCommand(AddCommand.COMMAND_ALIAS + " " + PersonUtil.getPersonDetails(person)); + AddCommand command = (AddCommand) parser.parseCommand(AddCommand.COMMAND_ALIAS + + " " + PersonUtil.getPersonDetails(person)); assertEquals(new AddCommand(person), command); } @@ -194,25 +195,25 @@ public void parseCommand_selectAlias() throws Exception { @Test public void parseCommand_redoCommandWord_returnsRedoCommand() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_WORD) instanceof RedoCommand); - assertTrue(parser.parseCommand(RedoCommand.COMMAND_WORD + " 1") instanceof RedoCommand); + assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); } @Test public void parseCommand_redoCommandWord_returnsRedoCommandAlias() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_ALIAS) instanceof RedoCommand); - assertTrue(parser.parseCommand(RedoCommand.COMMAND_ALIAS + " 1") instanceof RedoCommand); + assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); } @Test public void parseCommand_undoCommandWord_returnsUndoCommand() throws Exception { assertTrue(parser.parseCommand(UndoCommand.COMMAND_WORD) instanceof UndoCommand); - assertTrue(parser.parseCommand( UndoCommand.COMMAND_WORD +" 3") instanceof UndoCommand); + assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); } @Test public void parseCommand_undoCommandWord_returnsUndoCommandAlias() throws Exception { - assertTrue(parser.parseCommand(UndoCommand.COMMAND_ALIAS) instanceof UndoCommand); - assertTrue(parser.parseCommand(UndoCommand.COMMAND_ALIAS + " 3") instanceof UndoCommand); + assertTrue(parser.parseCommand(UndoCommand.COMMAND_WORD) instanceof UndoCommand); + assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); } @Test From 9b9ff051a9a200a9e202903e5efbbd0e4e30b769 Mon Sep 17 00:00:00 2001 From: e0032017 Date: Fri, 9 Mar 2018 00:17:30 +0800 Subject: [PATCH 022/280] try to fix Travis CI test fail --- .../seedu/address/logic/parser/AddressBookParserTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index d36068f2e031..c349fe9aaf83 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -51,8 +51,8 @@ public void parseCommand_add() throws Exception { @Test public void parseCommand_addAlias() throws Exception { Person person = new PersonBuilder().build(); - AddCommand command = (AddCommand) parser.parseCommand(AddCommand.COMMAND_ALIAS + - " " + PersonUtil.getPersonDetails(person)); + AddCommand command = (AddCommand) parser.parseCommand(AddCommand.COMMAND_ALIAS + " " + + PersonUtil.getPersonDetails(person)); assertEquals(new AddCommand(person), command); } From 0004c7d94007870bea4b97823932e22070714bd3 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Mon, 12 Mar 2018 23:36:25 +0800 Subject: [PATCH 023/280] Replace browser with dummy tutor list view, rename person list to student list. --- .../java/seedu/address/ui/BrowserPanel.java | 72 --------------- .../java/seedu/address/ui/MainWindow.java | 24 ++--- ...onListPanel.java => StudentListPanel.java} | 20 ++--- .../java/seedu/address/ui/TutorListPanel.java | 88 +++++++++++++++++++ src/main/resources/view/BrowserPanel.fxml | 8 -- src/main/resources/view/MainWindow.fxml | 17 ++-- ...onListPanel.fxml => StudentListPanel.fxml} | 2 +- src/main/resources/view/TutorListPanel.fxml | 8 ++ .../guihandles/BrowserPanelHandle.java | 64 -------------- .../seedu/address/ui/BrowserPanelTest.java | 48 ---------- .../seedu/address/ui/PersonListPanelTest.java | 2 +- 11 files changed, 130 insertions(+), 223 deletions(-) delete mode 100644 src/main/java/seedu/address/ui/BrowserPanel.java rename src/main/java/seedu/address/ui/{PersonListPanel.java => StudentListPanel.java} (78%) create mode 100644 src/main/java/seedu/address/ui/TutorListPanel.java delete mode 100644 src/main/resources/view/BrowserPanel.fxml rename src/main/resources/view/{PersonListPanel.fxml => StudentListPanel.fxml} (77%) create mode 100644 src/main/resources/view/TutorListPanel.fxml delete mode 100644 src/test/java/guitests/guihandles/BrowserPanelHandle.java delete mode 100644 src/test/java/seedu/address/ui/BrowserPanelTest.java diff --git a/src/main/java/seedu/address/ui/BrowserPanel.java b/src/main/java/seedu/address/ui/BrowserPanel.java deleted file mode 100644 index bb0d61380d5a..000000000000 --- a/src/main/java/seedu/address/ui/BrowserPanel.java +++ /dev/null @@ -1,72 +0,0 @@ -package seedu.address.ui; - -import java.net.URL; -import java.util.logging.Logger; - -import com.google.common.eventbus.Subscribe; - -import javafx.application.Platform; -import javafx.event.Event; -import javafx.fxml.FXML; -import javafx.scene.layout.Region; -import javafx.scene.web.WebView; -import seedu.address.MainApp; -import seedu.address.commons.core.LogsCenter; -import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent; -import seedu.address.model.person.Person; - -/** - * The Browser Panel of the App. - */ -public class BrowserPanel extends UiPart { - - public static final String DEFAULT_PAGE = "default.html"; - public static final String SEARCH_PAGE_URL = - "https://se-edu.github.io/addressbook-level4/DummySearchPage.html?name="; - - private static final String FXML = "BrowserPanel.fxml"; - - private final Logger logger = LogsCenter.getLogger(this.getClass()); - - @FXML - private WebView browser; - - public BrowserPanel() { - super(FXML); - - // To prevent triggering events for typing inside the loaded Web page. - getRoot().setOnKeyPressed(Event::consume); - - loadDefaultPage(); - registerAsAnEventHandler(this); - } - - private void loadPersonPage(Person person) { - loadPage(SEARCH_PAGE_URL + person.getName().fullName); - } - - public void loadPage(String url) { - Platform.runLater(() -> browser.getEngine().load(url)); - } - - /** - * Loads a default HTML file with a background that matches the general theme. - */ - private void loadDefaultPage() { - URL defaultPage = MainApp.class.getResource(FXML_FILE_FOLDER + DEFAULT_PAGE); - loadPage(defaultPage.toExternalForm()); - } - - /** - * Frees resources allocated to the browser. - */ - public void freeResources() { - browser = null; - } - - @Subscribe - private void handlePersonPanelSelectionChangedEvent(PersonPanelSelectionChangedEvent event) { - logger.info(LogsCenter.getEventHandlingLogMessage(event)); - loadPersonPage(event.getNewSelection().person); - } -} diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index 20ad5fee906a..f97cb75cfead 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -34,13 +34,13 @@ public class MainWindow extends UiPart { private Logic logic; // Independent Ui parts residing in this Ui container - private BrowserPanel browserPanel; - private PersonListPanel personListPanel; + private TutorListPanel tutorListPanel; + private StudentListPanel studentListPanel; private Config config; private UserPrefs prefs; @FXML - private StackPane browserPlaceholder; + private StackPane tutorListPanelPlaceholder; @FXML private StackPane commandBoxPlaceholder; @@ -49,7 +49,7 @@ public class MainWindow extends UiPart { private MenuItem helpMenuItem; @FXML - private StackPane personListPanelPlaceholder; + private StackPane studentListPanelPlaceholder; @FXML private StackPane resultDisplayPlaceholder; @@ -116,11 +116,11 @@ private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) { * Fills up all the placeholders of this window. */ void fillInnerParts() { - browserPanel = new BrowserPanel(); - browserPlaceholder.getChildren().add(browserPanel.getRoot()); + studentListPanel = new StudentListPanel(logic.getFilteredPersonList()); + studentListPanelPlaceholder.getChildren().add(studentListPanel.getRoot()); - personListPanel = new PersonListPanel(logic.getFilteredPersonList()); - personListPanelPlaceholder.getChildren().add(personListPanel.getRoot()); + tutorListPanel = new TutorListPanel(logic.getFilteredPersonList()); + tutorListPanelPlaceholder.getChildren().add(tutorListPanel.getRoot()); ResultDisplay resultDisplay = new ResultDisplay(); resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot()); @@ -181,12 +181,14 @@ private void handleExit() { raise(new ExitAppRequestEvent()); } - public PersonListPanel getPersonListPanel() { - return this.personListPanel; + public StudentListPanel getStudentListPanel() { + return this.studentListPanel; } + public TutorListPanel getTutorListPanel () { return this.tutorListPanel; } + void releaseResources() { - browserPanel.freeResources(); +// browserPanel.freeResources(); } @Subscribe diff --git a/src/main/java/seedu/address/ui/PersonListPanel.java b/src/main/java/seedu/address/ui/StudentListPanel.java similarity index 78% rename from src/main/java/seedu/address/ui/PersonListPanel.java rename to src/main/java/seedu/address/ui/StudentListPanel.java index 60a4f70f4e71..310a95f0b792 100644 --- a/src/main/java/seedu/address/ui/PersonListPanel.java +++ b/src/main/java/seedu/address/ui/StudentListPanel.java @@ -20,14 +20,14 @@ /** * Panel containing the list of persons. */ -public class PersonListPanel extends UiPart { - private static final String FXML = "PersonListPanel.fxml"; - private final Logger logger = LogsCenter.getLogger(PersonListPanel.class); +public class StudentListPanel extends UiPart { + private static final String FXML = "StudentListPanel.fxml"; + private final Logger logger = LogsCenter.getLogger(StudentListPanel.class); @FXML - private ListView personListView; + private ListView studentListView; - public PersonListPanel(ObservableList personList) { + public StudentListPanel(ObservableList personList) { super(FXML); setConnections(personList); registerAsAnEventHandler(this); @@ -36,13 +36,13 @@ public PersonListPanel(ObservableList personList) { private void setConnections(ObservableList personList) { ObservableList mappedList = EasyBind.map( personList, (person) -> new PersonCard(person, personList.indexOf(person) + 1)); - personListView.setItems(mappedList); - personListView.setCellFactory(listView -> new PersonListViewCell()); + studentListView.setItems(mappedList); + studentListView.setCellFactory(listView -> new PersonListViewCell()); setEventHandlerForSelectionChangeEvent(); } private void setEventHandlerForSelectionChangeEvent() { - personListView.getSelectionModel().selectedItemProperty() + studentListView.getSelectionModel().selectedItemProperty() .addListener((observable, oldValue, newValue) -> { if (newValue != null) { logger.fine("Selection in person list panel changed to : '" + newValue + "'"); @@ -56,8 +56,8 @@ private void setEventHandlerForSelectionChangeEvent() { */ private void scrollTo(int index) { Platform.runLater(() -> { - personListView.scrollTo(index); - personListView.getSelectionModel().clearAndSelect(index); + studentListView.scrollTo(index); + studentListView.getSelectionModel().clearAndSelect(index); }); } diff --git a/src/main/java/seedu/address/ui/TutorListPanel.java b/src/main/java/seedu/address/ui/TutorListPanel.java new file mode 100644 index 000000000000..5e4df118cbcb --- /dev/null +++ b/src/main/java/seedu/address/ui/TutorListPanel.java @@ -0,0 +1,88 @@ +package seedu.address.ui; + +import java.util.logging.Logger; + +import org.fxmisc.easybind.EasyBind; + +import com.google.common.eventbus.Subscribe; + +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.layout.Region; +import seedu.address.commons.core.LogsCenter; +import seedu.address.commons.events.ui.JumpToListRequestEvent; +import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent; +import seedu.address.model.person.Person; + +/** + * Panel containing the list of tutors. + */ +public class TutorListPanel extends UiPart { + private static final String FXML = "TutorListPanel.fxml"; + private final Logger logger = LogsCenter.getLogger(TutorListPanel.class); + + @FXML + private ListView tutorListView; + + public TutorListPanel(ObservableList personList) { + super(FXML); + setConnections(personList); + registerAsAnEventHandler(this); + } + + private void setConnections(ObservableList personList) { + ObservableList mappedList = EasyBind.map( + personList, (person) -> new PersonCard(person, personList.indexOf(person) + 1)); + tutorListView.setItems(mappedList); + tutorListView.setCellFactory(listView -> new PersonListViewCell()); + setEventHandlerForSelectionChangeEvent(); + } + + private void setEventHandlerForSelectionChangeEvent() { + tutorListView.getSelectionModel().selectedItemProperty() + .addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + logger.fine("Selection in person list panel changed to : '" + newValue + "'"); + raise(new PersonPanelSelectionChangedEvent(newValue)); + } + }); + } + + /** + * Scrolls to the {@code PersonCard} at the {@code index} and selects it. + */ + private void scrollTo(int index) { + Platform.runLater(() -> { + tutorListView.scrollTo(index); + tutorListView.getSelectionModel().clearAndSelect(index); + }); + } + + @Subscribe + private void handleJumpToListRequestEvent(JumpToListRequestEvent event) { + logger.info(LogsCenter.getEventHandlingLogMessage(event)); + scrollTo(event.targetIndex); + } + + /** + * Custom {@code ListCell} that displays the graphics of a {@code PersonCard}. + */ + class PersonListViewCell extends ListCell { + + @Override + protected void updateItem(PersonCard person, boolean empty) { + super.updateItem(person, empty); + + if (empty || person == null) { + setGraphic(null); + setText(null); + } else { + setGraphic(person.getRoot()); + } + } + } + +} diff --git a/src/main/resources/view/BrowserPanel.fxml b/src/main/resources/view/BrowserPanel.fxml deleted file mode 100644 index 31670827e3da..000000000000 --- a/src/main/resources/view/BrowserPanel.fxml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 1dadb95b6ffe..133f2b910bff 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -46,19 +46,20 @@ - - + + - + - - - - - + + + + + + diff --git a/src/main/resources/view/PersonListPanel.fxml b/src/main/resources/view/StudentListPanel.fxml similarity index 77% rename from src/main/resources/view/PersonListPanel.fxml rename to src/main/resources/view/StudentListPanel.fxml index 8836d323cc5d..e6b906fed69b 100644 --- a/src/main/resources/view/PersonListPanel.fxml +++ b/src/main/resources/view/StudentListPanel.fxml @@ -4,5 +4,5 @@ - + diff --git a/src/main/resources/view/TutorListPanel.fxml b/src/main/resources/view/TutorListPanel.fxml new file mode 100644 index 000000000000..d13f6b0c01cd --- /dev/null +++ b/src/main/resources/view/TutorListPanel.fxml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/test/java/guitests/guihandles/BrowserPanelHandle.java b/src/test/java/guitests/guihandles/BrowserPanelHandle.java deleted file mode 100644 index bd3633af78f3..000000000000 --- a/src/test/java/guitests/guihandles/BrowserPanelHandle.java +++ /dev/null @@ -1,64 +0,0 @@ -package guitests.guihandles; - -import java.net.URL; - -import guitests.GuiRobot; -import javafx.concurrent.Worker; -import javafx.scene.Node; -import javafx.scene.web.WebEngine; -import javafx.scene.web.WebView; - -/** - * A handler for the {@code BrowserPanel} of the UI. - */ -public class BrowserPanelHandle extends NodeHandle { - - public static final String BROWSER_ID = "#browser"; - - private boolean isWebViewLoaded = true; - - private URL lastRememberedUrl; - - public BrowserPanelHandle(Node browserPanelNode) { - super(browserPanelNode); - - WebView webView = getChildNode(BROWSER_ID); - WebEngine engine = webView.getEngine(); - new GuiRobot().interact(() -> engine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> { - if (newState == Worker.State.RUNNING) { - isWebViewLoaded = false; - } else if (newState == Worker.State.SUCCEEDED) { - isWebViewLoaded = true; - } - })); - } - - /** - * Returns the {@code URL} of the currently loaded page. - */ - public URL getLoadedUrl() { - return WebViewUtil.getLoadedUrl(getChildNode(BROWSER_ID)); - } - - /** - * Remembers the {@code URL} of the currently loaded page. - */ - public void rememberUrl() { - lastRememberedUrl = getLoadedUrl(); - } - - /** - * Returns true if the current {@code URL} is different from the value remembered by the most recent - * {@code rememberUrl()} call. - */ - public boolean isUrlChanged() { - return !lastRememberedUrl.equals(getLoadedUrl()); - } - - /** - * Returns true if the browser is done loading a page, or if this browser has yet to load any page. - */ - public boolean isLoaded() { - return isWebViewLoaded; - } -} diff --git a/src/test/java/seedu/address/ui/BrowserPanelTest.java b/src/test/java/seedu/address/ui/BrowserPanelTest.java deleted file mode 100644 index 48aab940f8a8..000000000000 --- a/src/test/java/seedu/address/ui/BrowserPanelTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package seedu.address.ui; - -import static guitests.guihandles.WebViewUtil.waitUntilBrowserLoaded; -import static org.junit.Assert.assertEquals; -import static seedu.address.testutil.EventsUtil.postNow; -import static seedu.address.testutil.TypicalPersons.ALICE; -import static seedu.address.ui.BrowserPanel.DEFAULT_PAGE; -import static seedu.address.ui.UiPart.FXML_FILE_FOLDER; - -import java.net.URL; - -import org.junit.Before; -import org.junit.Test; - -import guitests.guihandles.BrowserPanelHandle; -import seedu.address.MainApp; -import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent; - -public class BrowserPanelTest extends GuiUnitTest { - private PersonPanelSelectionChangedEvent selectionChangedEventStub; - - private BrowserPanel browserPanel; - private BrowserPanelHandle browserPanelHandle; - - @Before - public void setUp() { - selectionChangedEventStub = new PersonPanelSelectionChangedEvent(new PersonCard(ALICE, 0)); - - guiRobot.interact(() -> browserPanel = new BrowserPanel()); - uiPartRule.setUiPart(browserPanel); - - browserPanelHandle = new BrowserPanelHandle(browserPanel.getRoot()); - } - - @Test - public void display() throws Exception { - // default web page - URL expectedDefaultPageUrl = MainApp.class.getResource(FXML_FILE_FOLDER + DEFAULT_PAGE); - assertEquals(expectedDefaultPageUrl, browserPanelHandle.getLoadedUrl()); - - // associated web page of a person - postNow(selectionChangedEventStub); - URL expectedPersonUrl = new URL(BrowserPanel.SEARCH_PAGE_URL + ALICE.getName().fullName.replaceAll(" ", "%20")); - - waitUntilBrowserLoaded(browserPanelHandle); - assertEquals(expectedPersonUrl, browserPanelHandle.getLoadedUrl()); - } -} diff --git a/src/test/java/seedu/address/ui/PersonListPanelTest.java b/src/test/java/seedu/address/ui/PersonListPanelTest.java index 906ec2bebc03..cf593d906835 100644 --- a/src/test/java/seedu/address/ui/PersonListPanelTest.java +++ b/src/test/java/seedu/address/ui/PersonListPanelTest.java @@ -27,7 +27,7 @@ public class PersonListPanelTest extends GuiUnitTest { @Before public void setUp() { - PersonListPanel personListPanel = new PersonListPanel(TYPICAL_PERSONS); + StudentListPanel personListPanel = new StudentListPanel(TYPICAL_PERSONS); uiPartRule.setUiPart(personListPanel); personListPanelHandle = new PersonListPanelHandle(getChildNode(personListPanel.getRoot(), From d5d23978616f42f1ffdaa3adc29580d279bd8d42 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Tue, 13 Mar 2018 19:18:31 +0800 Subject: [PATCH 024/280] Update name of our application --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index de2fac49b0b7..69fbac61bd38 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -= Address Book (Level 4) += TuitionCor ifdef::env-github,env-browser[:relfileprefix: docs/] https://travis-ci.org/CS2103JAN2018-F11-B2/main[image:https://travis-ci.org/se-edu/addressbook-level4.svg?branch=master[Build Status]] From 039aa5fadde4d2aed1a33fa95e1d307ff483364a Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Tue, 13 Mar 2018 20:00:54 +0800 Subject: [PATCH 025/280] Update user stories after reviews --- docs/DeveloperGuide.adoc | 43 ++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 30a39613f5a6..43242aa85de0 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -800,68 +800,63 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un |Priority |As a ... |I want to ... |So that I can... |`* * *` |new user |see usage instructions |refer to instructions when I forget how to use the App -|`* * *` |user |add a new person | +|`* * *` |user |add a new person (tutor or student) |expand user's addressbook for future tuition coordination -|`* * *` |user |delete a person |remove entries that I no longer need +|`* * *` |user |delete a person |remove entries that the user no longer need |`* * *` |user |find a person by name |locate details of persons without having to go through the entire list -|`* * *` |user |sort contacts based on their locality |better match students to tutors +|`* * *` |user |sort contacts based on the clients' location (North, South, East, West, Central |better match students and tutors that are staying near each other. |`* * *` |user |edit the information stored |keep the information up to date -|`* * *` |user |tag tutors and students with multiple values | +|`* * *` |user |tag tutors and students with multiple fields |do multi-layer searching to better match tutors and students -|`* * *` |user |add contacts of both tutors and students | +|`* * *` |user |categorise contacts between students and tutors |reduce the number of tagging required and make searching more convenience -|`* * *` |user |categorise contacts between students and tutors | +|`* * *` |user |group clients based on the subject they wish to study/teach (Math, Eng, Phy, Chem...) |find and match client easily by the subjects registered -|`* * *` |user |group clients based on the subject they wish to study/teach | - -|`* * *` |user |record what preference the students/tutors have (male/female) | +|`* * *` |user |record the gender preference the students/tutors have (male/female) |find and match client easily by the gender preference registered |`* * *` |user |see and compare the price that students/tutors are willing to pay/accept|match them based on pricing -|`* * *` |user |have an autosave function |changes will be saved once i exit the application - -|`* *` |user |hide <> by default |minimize chance of someone else seeing them by accident +|`* * *` |user |have an auto-save function |changes will be saved once user exit the application -|`* *` |user |do multi-layer searching |narrow down the options +|`* * *` |user |search by tags added to client |generate a list of clients that have the same tags -|`* *` |student |request to know the qualification of the tutor |make my decision wisely +|`* *` |user |hide <> by default |minimize chance of someone else seeing them by accident -|`* *` |tutor |request to know the grades of the students |make my decision wisely +|`* *` |user |search multiple tags |narrow down the search to clients that fit all the different tags searched. -|`* *` |user |easily delete all students/tutors that quit with a single command |save time manually deleting +|`* *` |user |easily delete all students/tutors |save time manually deleting -|`* *` |user |get a list of all tutors that corresponds to a students requirements | +|`* *` |user |get a list of all tutors that corresponds to a students requirements |give students more choices on which tutor they want -|`* *` |user |get a list of all students that corresponds to a tutor's requirements | +|`* *` |user |get a list of all students that corresponds to a tutor's requirements |give tutors more choices on which students they want |`* *` |user |automatically update the year of all students |need not manually change all the information during new year |`* *` |user |update which time slot the tutor is already working |plan their timetable without any clash in timing -|`* *` |user |have a ranking on how good the tutor is |understand which tutor I should recommend more +|`* *` |user |have a ranking on how good the tutor is |understand which tutor the user should recommend more |`* *` |user |highlight urgent tuition requests |set reminder to place more attention on these assignments -|`* *` |user |blacklist certain tutors or students |make sure I will not accept their assignments +|`* *` |user |blacklist certain tutors or students |make sure the user will not accept their assignments -|`* *` |user |have the option to customise the font size and colour |make changes to the appearance to suit my preference +|`* *` |user |have the option to customise the font size and colour |make changes to the appearance to suit the user's preference -|`* *` |user |have the option to customise my background |make the application more appealing to me +|`* *` |user |have the option to customise the user's background |make the application more appealing to the user |`* *` |user |email the contacts in the application |save the trouble from opening another web-browser or email application -|`* *` |user |keep track of whether the tutors have paid me their agent fee |keep track and remind those who have not pay me. +|`* *` |user |keep track of whether the tutors have paid their agent fee |keep track and remind those who have not paid. |`*` |user |directly navigate between contacts |save the trouble from returning to the main page every time |`*` |user |keep a record of how much the students improve |keep track of how good the tutor is |======================================================================= -_{More to be added}_ [appendix] == Use Cases From d3b7e725bd339bd5dfb41279b99ea0f18e5bc7c1 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Tue, 13 Mar 2018 20:07:50 +0800 Subject: [PATCH 026/280] remove alias for help command --- src/main/java/seedu/address/logic/commands/HelpCommand.java | 1 - .../java/seedu/address/logic/parser/AddressBookParser.java | 1 - .../seedu/address/logic/parser/AddressBookParserTest.java | 6 ------ 3 files changed, 8 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/seedu/address/logic/commands/HelpCommand.java index 740aa81045e7..10febf6d9136 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/seedu/address/logic/commands/HelpCommand.java @@ -9,7 +9,6 @@ public class HelpCommand extends Command { public static final String COMMAND_WORD = "help"; - public static final String COMMAND_ALIAS = "1"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Shows program usage instructions.\n" + "Example: " + COMMAND_WORD; diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index ae84917f7f04..94ce519e2a5c 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -85,7 +85,6 @@ public Command parseCommand(String userInput) throws ParseException { return new ExitCommand(); case HelpCommand.COMMAND_WORD: - case HelpCommand.COMMAND_ALIAS: return new HelpCommand(); case UndoCommand.COMMAND_WORD: diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index c349fe9aaf83..6d4b9d02d650 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -134,12 +134,6 @@ public void parseCommand_help() throws Exception { assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); } - @Test - public void parseCommand_helpAlias() throws Exception { - assertTrue(parser.parseCommand(HelpCommand.COMMAND_ALIAS) instanceof HelpCommand); - assertTrue(parser.parseCommand(HelpCommand.COMMAND_ALIAS + " 3") instanceof HelpCommand); - } - @Test public void parseCommand_history() throws Exception { assertTrue(parser.parseCommand(HistoryCommand.COMMAND_WORD) instanceof HistoryCommand); From 82e0559282432081e7d133de6598b85f45780b64 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Wed, 14 Mar 2018 10:54:22 +0800 Subject: [PATCH 027/280] Update command summary --- docs/UserGuide.adoc | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 7fe506111c9d..51b43fa1a228 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -265,18 +265,28 @@ _{explain how the user can enable/disable data encryption}_ == Command Summary * *Add* `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]...` + -e.g. `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` -* *Clear* : `clear` +e.g. `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` + +Alias: `a` +* *Clear* : `clear` + +Alias: `c` * *Delete* : `delete INDEX` + -e.g. `delete 3` +e.g. `delete 3` + +Alias: `d` * *Edit* : `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]...` + -e.g. `edit 2 n/James Lee e/jameslee@example.com` +e.g. `edit 2 n/James Lee e/jameslee@example.com` + +Alias: `e` * *Find* : `find KEYWORD [MORE_KEYWORDS]` + -e.g. `find James Jake` -* *List* : `list` +e.g. `find James Jake` + +Alias: `f` +* *List* : `list` + +Alias: `l` * *Help* : `help` * *Select* : `select INDEX` + -e.g.`select 2` -* *History* : `history` -* *Undo* : `undo` -* *Redo* : `redo` +e.g.`select 2` + +Alias: `s` +* *History* : `history` + +Alias: `h` +* *Undo* : `undo` + +Alias: `u` +* *Redo* : `redo` + +Alias: `r` From df3d522a3c8c4e88364b897fbb189bf4c225ce3a Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Wed, 14 Mar 2018 11:00:31 +0800 Subject: [PATCH 028/280] Update AddressBookParserTest to correct naming syntax --- .../seedu/address/logic/parser/AddressBookParserTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 6d4b9d02d650..744f75654491 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -193,7 +193,7 @@ public void parseCommand_redoCommandWord_returnsRedoCommand() throws Exception { } @Test - public void parseCommand_redoCommandWord_returnsRedoCommandAlias() throws Exception { + public void parseCommand_redoCommandAlias_returnsRedoCommand() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_ALIAS) instanceof RedoCommand); assertTrue(parser.parseCommand("redo 1") instanceof RedoCommand); } @@ -205,7 +205,7 @@ public void parseCommand_undoCommandWord_returnsUndoCommand() throws Exception { } @Test - public void parseCommand_undoCommandWord_returnsUndoCommandAlias() throws Exception { + public void parseCommand_undoCommandAlias_returnsUndoCommand() throws Exception { assertTrue(parser.parseCommand(UndoCommand.COMMAND_WORD) instanceof UndoCommand); assertTrue(parser.parseCommand("undo 3") instanceof UndoCommand); } From a4e106b4547d84f98b1496f48617fc3f41bb12e0 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Wed, 14 Mar 2018 11:04:51 +0800 Subject: [PATCH 029/280] Update GuiTestAssert to include a todo list for future add in. --- src/test/java/seedu/address/ui/testutil/GuiTestAssert.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 81d6608e85bf..4e37feeca0f3 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -57,7 +57,8 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu } /** - *To be updated + *TODO: + * */ private static String getTagColorStyleFor(String tagName) { From 589abb8760183e0051ab83ab63211b831e311399 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 18:18:21 +0800 Subject: [PATCH 030/280] Include header for the list and minor edit to naming of variables --- src/main/java/seedu/address/ui/StudentListPanel.java | 12 ++++++------ src/main/java/seedu/address/ui/TutorListPanel.java | 12 ++++++------ src/main/resources/view/DarkTheme.css | 7 +++++++ src/main/resources/view/StudentListPanel.fxml | 6 ++++-- src/main/resources/view/TutorListPanel.fxml | 4 +++- 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/main/java/seedu/address/ui/StudentListPanel.java b/src/main/java/seedu/address/ui/StudentListPanel.java index 310a95f0b792..50aad65c5a45 100644 --- a/src/main/java/seedu/address/ui/StudentListPanel.java +++ b/src/main/java/seedu/address/ui/StudentListPanel.java @@ -27,17 +27,17 @@ public class StudentListPanel extends UiPart { @FXML private ListView studentListView; - public StudentListPanel(ObservableList personList) { + public StudentListPanel(ObservableList studentList) { super(FXML); - setConnections(personList); + setConnections(studentList); registerAsAnEventHandler(this); } - private void setConnections(ObservableList personList) { + private void setConnections(ObservableList studentList) { ObservableList mappedList = EasyBind.map( - personList, (person) -> new PersonCard(person, personList.indexOf(person) + 1)); + studentList, (person) -> new PersonCard(person, studentList.indexOf(person) + 1)); studentListView.setItems(mappedList); - studentListView.setCellFactory(listView -> new PersonListViewCell()); + studentListView.setCellFactory(listView -> new StudentListViewCell()); setEventHandlerForSelectionChangeEvent(); } @@ -70,7 +70,7 @@ private void handleJumpToListRequestEvent(JumpToListRequestEvent event) { /** * Custom {@code ListCell} that displays the graphics of a {@code PersonCard}. */ - class PersonListViewCell extends ListCell { + class StudentListViewCell extends ListCell { @Override protected void updateItem(PersonCard person, boolean empty) { diff --git a/src/main/java/seedu/address/ui/TutorListPanel.java b/src/main/java/seedu/address/ui/TutorListPanel.java index 5e4df118cbcb..9a577559b4a7 100644 --- a/src/main/java/seedu/address/ui/TutorListPanel.java +++ b/src/main/java/seedu/address/ui/TutorListPanel.java @@ -27,17 +27,17 @@ public class TutorListPanel extends UiPart { @FXML private ListView tutorListView; - public TutorListPanel(ObservableList personList) { + public TutorListPanel(ObservableList tutorList) { super(FXML); - setConnections(personList); + setConnections(tutorList); registerAsAnEventHandler(this); } - private void setConnections(ObservableList personList) { + private void setConnections(ObservableList tutorList) { ObservableList mappedList = EasyBind.map( - personList, (person) -> new PersonCard(person, personList.indexOf(person) + 1)); + tutorList, (person) -> new PersonCard(person, tutorList.indexOf(person) + 1)); tutorListView.setItems(mappedList); - tutorListView.setCellFactory(listView -> new PersonListViewCell()); + tutorListView.setCellFactory(listView -> new StudentListViewCell()); setEventHandlerForSelectionChangeEvent(); } @@ -70,7 +70,7 @@ private void handleJumpToListRequestEvent(JumpToListRequestEvent event) { /** * Custom {@code ListCell} that displays the graphics of a {@code PersonCard}. */ - class PersonListViewCell extends ListCell { + class StudentListViewCell extends ListCell { @Override protected void updateItem(PersonCard person, boolean empty) { diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 22909fd6d3fb..d6a630c7ae21 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -87,6 +87,13 @@ -fx-background-color: derive(#1d1d1d, 20%); } +.list-header { + -fx-font-size: 26pt; + -fx-font-family: "Bebas Neue"; + -fx-text-fill: white; + -fx-opacity: 1; +} + .list-view { -fx-background-insets: 0; -fx-padding: 0; diff --git a/src/main/resources/view/StudentListPanel.fxml b/src/main/resources/view/StudentListPanel.fxml index e6b906fed69b..807fa8d5c77b 100644 --- a/src/main/resources/view/StudentListPanel.fxml +++ b/src/main/resources/view/StudentListPanel.fxml @@ -1,8 +1,10 @@ + - - + + diff --git a/src/main/resources/view/TutorListPanel.fxml b/src/main/resources/view/TutorListPanel.fxml index d13f6b0c01cd..06f3333544b7 100644 --- a/src/main/resources/view/TutorListPanel.fxml +++ b/src/main/resources/view/TutorListPanel.fxml @@ -1,8 +1,10 @@ + - + From 832467a9ccd294fcefa8d62f192e057e465e813d Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 18:54:13 +0800 Subject: [PATCH 031/280] DeveloperGuide: Update target user profile and value proposition --- docs/DeveloperGuide.adoc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 30a39613f5a6..0cf10e355209 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -782,13 +782,16 @@ See this https://github.com/se-edu/addressbook-level4/pull/599[PR] for the step- *Target user profile*: -* has a need to manage a significant number of contacts -* prefer desktop apps over other types -* can type fast -* prefers typing over mouse input -* is reasonably comfortable using CLI apps +* Tuition coordinators who are comfortable with CLI applications -*Value proposition*: manage contacts faster than a typical mouse/GUI driven app +*Value proposition*: +TuitionCor is targeted at tuition coordinators who have to manage a large amount of contacts. +The daily job-scope of a tuition coordinator involves the need to manage large amount of contacts and match the students to tutors according to their credentials, needs and location. +Therefore, TuitionCor aims to facilitate this process and make the job of a tuition coordinator easier. + +In addition, users are able to +* find and filter contacts easily +* add and edit contacts [appendix] == User Stories From 79a10ce0e05d8efd1c2c0b422ad57593d8dcff49 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 19:07:54 +0800 Subject: [PATCH 032/280] README: Update buildstatus link and description of the TuitionCor --- README.adoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.adoc b/README.adoc index de2fac49b0b7..2672b7b2808f 100644 --- a/README.adoc +++ b/README.adoc @@ -1,7 +1,7 @@ = Address Book (Level 4) ifdef::env-github,env-browser[:relfileprefix: docs/] -https://travis-ci.org/CS2103JAN2018-F11-B2/main[image:https://travis-ci.org/se-edu/addressbook-level4.svg?branch=master[Build Status]] +https://travis-ci.org/CS2103JAN2018-F11-B2/main[image:https://travis-ci.org/CS2103JAN2018-F11-B2/main.svg?branch=master[Build Status]] https://ci.appveyor.com/project/damithc/addressbook-level4[image:https://ci.appveyor.com/api/projects/status/3boko2x2vr5cc3w2?svg=true[Build status]] https://coveralls.io/github/se-edu/addressbook-level4?branch=master[image:https://coveralls.io/repos/github/se-edu/addressbook-level4/badge.svg?branch=master[Coverage Status]] https://www.codacy.com/app/damith/addressbook-level4?utm_source=github.com&utm_medium=referral&utm_content=se-edu/addressbook-level4&utm_campaign=Badge_Grade[image:https://api.codacy.com/project/badge/Grade/fc0b7775cf7f4fdeaf08776f3d8e364a[Codacy Badge]] @@ -15,13 +15,13 @@ ifndef::env-github[] image::images/Ui.png[width="600"] endif::[] -* This is a desktop Address Book application. It has a GUI but most of the user interactions happen using a CLI (Command Line Interface). -* It is a Java sample application intended for students learning Software Engineering while using Java as the main programming language. -* It is *written in OOP fashion*. It provides a *reasonably well-written* code example that is *significantly bigger* (around 6 KLoC)than what students usually write in beginner-level SE modules. -* What's different from https://github.com/se-edu/addressbook-level3[level 3]: -** A more sophisticated GUI that includes a list panel and an in-built Browser. -** More test cases, including automated GUI testing. -** Support for _Build Automation_ using Gradle and for _Continuous Integration_ using Travis CI. +* This is a desktop TuitionCor application. It has a GUI but most of the user interactions happen using a CLI (Command Line Interface). +* TuitionCor is targeted at tuition coordinators who have to manage a large amount of contacts. +* The daily job-scope of a tuition coordinator involves the need to manage large amount of contacts and match the students to tutors according to their credentials, needs and location. +* Therefore, TuitionCor aims to facilitate this process and make the job of a tuition coordinator easier. +*In addition, users are also able to +** find and filter contacts easily +** add and edit contacts == Site Map From 0ff2d393d963d4c263c3e14138c66e9a6a17bd89 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 19:10:30 +0800 Subject: [PATCH 033/280] DeveloperGuide: Update repo details --- docs/DeveloperGuide.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 0cf10e355209..891c8cb85e2a 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -10,7 +10,7 @@ ifdef::env-github[] :tip-caption: :bulb: :note-caption: :information_source: endif::[] -:repoURL: https://github.com/CS2103JAN2018-F11-B2/main +:repoURL: https://github.com/CS2103JAN2018-F11-B2/main forked from Team SE-EDU By: `Team SE-EDU`      Since: `Jun 2016`      Licence: `MIT` From 8ff1d4889b4fd3a5e305539d944c3ac8f0f008d1 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 19:12:40 +0800 Subject: [PATCH 034/280] DeveloperGuide: Update application name --- docs/DeveloperGuide.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 891c8cb85e2a..513c310e5de9 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -1,4 +1,4 @@ -= AddressBook Level 4 - Developer Guide += TuitionCor - Developer Guide :toc: :toc-title: :toc-placement: preamble From 75080049a9ab7476e199c5d0502fc48d42862eaf Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 22:45:56 +0800 Subject: [PATCH 035/280] Modify testcases files: Remove test case related to browser, rename variables and set to do for test cases. --- .../guitests/guihandles/MainWindowHandle.java | 7 ++--- .../guihandles/PersonListPanelHandle.java | 5 ++-- .../java/guitests/guihandles/WebViewUtil.java | 7 ----- .../seedu/address/ui/PersonListPanelTest.java | 10 ++++--- .../systemtests/AddressBookSystemTest.java | 27 ------------------- .../systemtests/HelpCommandSystemTest.java | 3 --- 6 files changed, 12 insertions(+), 47 deletions(-) diff --git a/src/test/java/guitests/guihandles/MainWindowHandle.java b/src/test/java/guitests/guihandles/MainWindowHandle.java index 34e36054f4fd..b58460887b36 100644 --- a/src/test/java/guitests/guihandles/MainWindowHandle.java +++ b/src/test/java/guitests/guihandles/MainWindowHandle.java @@ -8,11 +8,11 @@ public class MainWindowHandle extends StageHandle { private final PersonListPanelHandle personListPanel; + private final PersonListPanelHandle tutorListPanel; private final ResultDisplayHandle resultDisplay; private final CommandBoxHandle commandBox; private final StatusBarFooterHandle statusBarFooter; private final MainMenuHandle mainMenu; - private final BrowserPanelHandle browserPanel; public MainWindowHandle(Stage stage) { super(stage); @@ -22,7 +22,7 @@ public MainWindowHandle(Stage stage) { commandBox = new CommandBoxHandle(getChildNode(CommandBoxHandle.COMMAND_INPUT_FIELD_ID)); statusBarFooter = new StatusBarFooterHandle(getChildNode(StatusBarFooterHandle.STATUS_BAR_PLACEHOLDER)); mainMenu = new MainMenuHandle(getChildNode(MainMenuHandle.MENU_BAR_ID)); - browserPanel = new BrowserPanelHandle(getChildNode(BrowserPanelHandle.BROWSER_ID)); + tutorListPanel = new PersonListPanelHandle(getChildNode(PersonListPanelHandle.PERSON_LIST_VIEW_ID)); } public PersonListPanelHandle getPersonListPanel() { @@ -45,7 +45,4 @@ public MainMenuHandle getMainMenu() { return mainMenu; } - public BrowserPanelHandle getBrowserPanel() { - return browserPanel; - } } diff --git a/src/test/java/guitests/guihandles/PersonListPanelHandle.java b/src/test/java/guitests/guihandles/PersonListPanelHandle.java index 40564bb2d960..f36cc383ce95 100644 --- a/src/test/java/guitests/guihandles/PersonListPanelHandle.java +++ b/src/test/java/guitests/guihandles/PersonListPanelHandle.java @@ -8,10 +8,11 @@ import seedu.address.ui.PersonCard; /** - * Provides a handle for {@code PersonListPanel} containing the list of {@code PersonCard}. + * @// TODO: 14/3/2018 Implement StudentListPanelHandle and PersonListPanelHandle upon creation of student and tutor class + * Provides a handle for {@code StudentListPanel} containing the list of {@code PersonCard}. */ public class PersonListPanelHandle extends NodeHandle> { - public static final String PERSON_LIST_VIEW_ID = "#personListView"; + public static final String PERSON_LIST_VIEW_ID = "#studentListView"; private Optional lastRememberedSelectedPersonCard; diff --git a/src/test/java/guitests/guihandles/WebViewUtil.java b/src/test/java/guitests/guihandles/WebViewUtil.java index 99f7db998747..5a6f9415ee38 100644 --- a/src/test/java/guitests/guihandles/WebViewUtil.java +++ b/src/test/java/guitests/guihandles/WebViewUtil.java @@ -21,11 +21,4 @@ public static URL getLoadedUrl(WebView webView) { throw new AssertionError("webView should not be displaying an invalid URL.", mue); } } - - /** - * If the {@code browserPanelHandle}'s {@code WebView} is loading, sleeps the thread till it is successfully loaded. - */ - public static void waitUntilBrowserLoaded(BrowserPanelHandle browserPanelHandle) { - new GuiRobot().waitForEvent(browserPanelHandle::isLoaded); - } } diff --git a/src/test/java/seedu/address/ui/PersonListPanelTest.java b/src/test/java/seedu/address/ui/PersonListPanelTest.java index cf593d906835..7625148f9af3 100644 --- a/src/test/java/seedu/address/ui/PersonListPanelTest.java +++ b/src/test/java/seedu/address/ui/PersonListPanelTest.java @@ -17,6 +17,9 @@ import seedu.address.commons.events.ui.JumpToListRequestEvent; import seedu.address.model.person.Person; +/** + * @// TODO: 14/3/2018 Implement StudentListPanelTest and TutorListPanelTest upon creation of person and student class + */ public class PersonListPanelTest extends GuiUnitTest { private static final ObservableList TYPICAL_PERSONS = FXCollections.observableList(getTypicalPersons()); @@ -27,10 +30,10 @@ public class PersonListPanelTest extends GuiUnitTest { @Before public void setUp() { - StudentListPanel personListPanel = new StudentListPanel(TYPICAL_PERSONS); - uiPartRule.setUiPart(personListPanel); + StudentListPanel studentListPanel = new StudentListPanel(TYPICAL_PERSONS); + uiPartRule.setUiPart(studentListPanel); - personListPanelHandle = new PersonListPanelHandle(getChildNode(personListPanel.getRoot(), + personListPanelHandle = new PersonListPanelHandle(getChildNode(studentListPanel.getRoot(), PersonListPanelHandle.PERSON_LIST_VIEW_ID)); } @@ -48,6 +51,7 @@ public void display() { @Test public void handleJumpToListRequestEvent() { + postNow(JUMP_TO_SECOND_EVENT); guiRobot.pauseForHuman(); diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index 97cdf96d65b8..349f0819a646 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -1,10 +1,8 @@ package systemtests; -import static guitests.guihandles.WebViewUtil.waitUntilBrowserLoaded; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static seedu.address.ui.BrowserPanel.DEFAULT_PAGE; import static seedu.address.ui.StatusBarFooter.SYNC_STATUS_INITIAL; import static seedu.address.ui.StatusBarFooter.SYNC_STATUS_UPDATED; import static seedu.address.ui.UiPart.FXML_FILE_FOLDER; @@ -21,7 +19,6 @@ import org.junit.BeforeClass; import org.junit.ClassRule; -import guitests.guihandles.BrowserPanelHandle; import guitests.guihandles.CommandBoxHandle; import guitests.guihandles.MainMenuHandle; import guitests.guihandles.MainWindowHandle; @@ -39,7 +36,6 @@ import seedu.address.model.AddressBook; import seedu.address.model.Model; import seedu.address.testutil.TypicalPersons; -import seedu.address.ui.BrowserPanel; import seedu.address.ui.CommandBox; /** @@ -69,7 +65,6 @@ public void setUp() { testApp = setupHelper.setupApplication(this::getInitialData, getDataFileLocation()); mainWindowHandle = setupHelper.setupMainWindowHandle(); - waitUntilBrowserLoaded(getBrowserPanel()); assertApplicationStartingStateIsCorrect(); } @@ -109,10 +104,6 @@ public MainMenuHandle getMainMenu() { return mainWindowHandle.getMainMenu(); } - public BrowserPanelHandle getBrowserPanel() { - return mainWindowHandle.getBrowserPanel(); - } - public StatusBarFooterHandle getStatusBarFooter() { return mainWindowHandle.getStatusBarFooter(); } @@ -132,8 +123,6 @@ protected void executeCommand(String command) { clockRule.setInjectedClockToCurrentTime(); mainWindowHandle.getCommandBox().run(command); - - waitUntilBrowserLoaded(getBrowserPanel()); } /** @@ -188,7 +177,6 @@ protected void assertApplicationDisplaysExpected(String expectedCommandInput, St */ private void rememberStates() { StatusBarFooterHandle statusBarFooterHandle = getStatusBarFooter(); - getBrowserPanel().rememberUrl(); statusBarFooterHandle.rememberSaveLocation(); statusBarFooterHandle.rememberSyncStatus(); getPersonListPanel().rememberSelectedPersonCard(); @@ -197,39 +185,25 @@ private void rememberStates() { /** * Asserts that the previously selected card is now deselected and the browser's url remains displaying the details * of the previously selected person. - * @see BrowserPanelHandle#isUrlChanged() */ protected void assertSelectedCardDeselected() { - assertFalse(getBrowserPanel().isUrlChanged()); assertFalse(getPersonListPanel().isAnyCardSelected()); } /** * Asserts that the browser's url is changed to display the details of the person in the person list panel at * {@code expectedSelectedCardIndex}, and only the card at {@code expectedSelectedCardIndex} is selected. - * @see BrowserPanelHandle#isUrlChanged() * @see PersonListPanelHandle#isSelectedPersonCardChanged() */ protected void assertSelectedCardChanged(Index expectedSelectedCardIndex) { - String selectedCardName = getPersonListPanel().getHandleToSelectedCard().getName(); - URL expectedUrl; - try { - expectedUrl = new URL(BrowserPanel.SEARCH_PAGE_URL + selectedCardName.replaceAll(" ", "%20")); - } catch (MalformedURLException mue) { - throw new AssertionError("URL expected to be valid."); - } - assertEquals(expectedUrl, getBrowserPanel().getLoadedUrl()); - assertEquals(expectedSelectedCardIndex.getZeroBased(), getPersonListPanel().getSelectedCardIndex()); } /** * Asserts that the browser's url and the selected card in the person list panel remain unchanged. - * @see BrowserPanelHandle#isUrlChanged() * @see PersonListPanelHandle#isSelectedPersonCardChanged() */ protected void assertSelectedCardUnchanged() { - assertFalse(getBrowserPanel().isUrlChanged()); assertFalse(getPersonListPanel().isSelectedPersonCardChanged()); } @@ -276,7 +250,6 @@ private void assertApplicationStartingStateIsCorrect() { assertEquals("", getCommandBox().getInput()); assertEquals("", getResultDisplay().getText()); assertListMatching(getPersonListPanel(), getModel().getFilteredPersonList()); - assertEquals(MainApp.class.getResource(FXML_FILE_FOLDER + DEFAULT_PAGE), getBrowserPanel().getLoadedUrl()); assertEquals("./" + testApp.getStorageSaveLocation(), getStatusBarFooter().getSaveLocation()); assertEquals(SYNC_STATUS_INITIAL, getStatusBarFooter().getSyncStatus()); } catch (Exception e) { diff --git a/src/test/java/systemtests/HelpCommandSystemTest.java b/src/test/java/systemtests/HelpCommandSystemTest.java index 1aa4a5f294f4..6a226ce4c33c 100644 --- a/src/test/java/systemtests/HelpCommandSystemTest.java +++ b/src/test/java/systemtests/HelpCommandSystemTest.java @@ -14,7 +14,6 @@ import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.SelectCommand; -import seedu.address.ui.BrowserPanel; import seedu.address.ui.StatusBarFooter; /** @@ -43,7 +42,6 @@ public void openHelpWindow() { getMainMenu().openHelpWindowUsingAccelerator(); assertHelpWindowOpen(); - getBrowserPanel().click(); getMainMenu().openHelpWindowUsingAccelerator(); assertHelpWindowNotOpen(); @@ -64,7 +62,6 @@ public void openHelpWindow() { assertEquals("", getCommandBox().getInput()); assertCommandBoxShowsDefaultStyle(); assertNotEquals(HelpCommand.SHOWING_HELP_MESSAGE, getResultDisplay().getText()); - assertNotEquals(BrowserPanel.DEFAULT_PAGE, getBrowserPanel().getLoadedUrl()); assertListMatching(getPersonListPanel(), getModel().getFilteredPersonList()); // assert that the status bar too is updated correctly while the help window is open From 36ad60bae937e24a5f0d9de0d7b3aa5d16058dbe Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 22:56:46 +0800 Subject: [PATCH 036/280] Remove trailing whitespaces --- src/test/java/guitests/guihandles/PersonListPanelHandle.java | 2 +- src/test/java/seedu/address/ui/PersonListPanelTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/guitests/guihandles/PersonListPanelHandle.java b/src/test/java/guitests/guihandles/PersonListPanelHandle.java index f36cc383ce95..ca3b9e2bfd7f 100644 --- a/src/test/java/guitests/guihandles/PersonListPanelHandle.java +++ b/src/test/java/guitests/guihandles/PersonListPanelHandle.java @@ -8,7 +8,7 @@ import seedu.address.ui.PersonCard; /** - * @// TODO: 14/3/2018 Implement StudentListPanelHandle and PersonListPanelHandle upon creation of student and tutor class + * @// TODO: 14/3/2018 Implement StudentListPanelHandle and PersonListPanelHandle upon creation of student and tutor class * Provides a handle for {@code StudentListPanel} containing the list of {@code PersonCard}. */ public class PersonListPanelHandle extends NodeHandle> { diff --git a/src/test/java/seedu/address/ui/PersonListPanelTest.java b/src/test/java/seedu/address/ui/PersonListPanelTest.java index 7625148f9af3..436ebd141632 100644 --- a/src/test/java/seedu/address/ui/PersonListPanelTest.java +++ b/src/test/java/seedu/address/ui/PersonListPanelTest.java @@ -18,7 +18,7 @@ import seedu.address.model.person.Person; /** - * @// TODO: 14/3/2018 Implement StudentListPanelTest and TutorListPanelTest upon creation of person and student class + * @// TODO: 14/3/2018 Implement StudentListPanelTest and TutorListPanelTest upon creation of person and student class */ public class PersonListPanelTest extends GuiUnitTest { private static final ObservableList TYPICAL_PERSONS = From 1e9e11a7033b4dc83907878ee07eeb1edc47c900 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 23:04:06 +0800 Subject: [PATCH 037/280] Minor edits and addition of to-do --- src/main/java/seedu/address/ui/MainWindow.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index f97cb75cfead..659d8b6391b1 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -187,8 +187,10 @@ public StudentListPanel getStudentListPanel() { public TutorListPanel getTutorListPanel () { return this.tutorListPanel; } + /** + * @// TODO: 14/3/2018 Remove this if no longer needed + */ void releaseResources() { -// browserPanel.freeResources(); } @Subscribe From 66f2d4095e4c6a829c3bd333d1d7456123e69e77 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 23:10:23 +0800 Subject: [PATCH 038/280] Remove trailing whitespaces --- src/main/java/seedu/address/ui/MainWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index 659d8b6391b1..d68aa537efdd 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -188,7 +188,7 @@ public StudentListPanel getStudentListPanel() { public TutorListPanel getTutorListPanel () { return this.tutorListPanel; } /** - * @// TODO: 14/3/2018 Remove this if no longer needed + * @// TODO: 14/3/2018 Remove this if no longer needed */ void releaseResources() { } From 86d45351cee7453d143bf49d3ae3cffce9419d0f Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 23:25:14 +0800 Subject: [PATCH 039/280] Remove unused import statements --- src/test/java/guitests/guihandles/HelpWindowHandle.java | 1 + src/test/java/guitests/guihandles/PersonListPanelHandle.java | 3 ++- src/test/java/guitests/guihandles/WebViewUtil.java | 2 +- src/test/java/systemtests/AddressBookSystemTest.java | 4 ---- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/test/java/guitests/guihandles/HelpWindowHandle.java b/src/test/java/guitests/guihandles/HelpWindowHandle.java index ec5fc547aa86..b8af32b2719d 100644 --- a/src/test/java/guitests/guihandles/HelpWindowHandle.java +++ b/src/test/java/guitests/guihandles/HelpWindowHandle.java @@ -27,6 +27,7 @@ public static boolean isWindowPresent() { /** * Returns the {@code URL} of the currently loaded page. + * @// TODO: 14/3/2018 Remove this when no longer required */ public URL getLoadedUrl() { return WebViewUtil.getLoadedUrl(getChildNode(HELP_WINDOW_BROWSER_ID)); diff --git a/src/test/java/guitests/guihandles/PersonListPanelHandle.java b/src/test/java/guitests/guihandles/PersonListPanelHandle.java index ca3b9e2bfd7f..3b1987ec18bf 100644 --- a/src/test/java/guitests/guihandles/PersonListPanelHandle.java +++ b/src/test/java/guitests/guihandles/PersonListPanelHandle.java @@ -8,7 +8,8 @@ import seedu.address.ui.PersonCard; /** - * @// TODO: 14/3/2018 Implement StudentListPanelHandle and PersonListPanelHandle upon creation of student and tutor class + * @// TODO: 14/3/2018 Implement StudentListPanelHandle and PersonListPanelHandle upon + * @// TODO: 14/3/2018 creation of student and tutor class * Provides a handle for {@code StudentListPanel} containing the list of {@code PersonCard}. */ public class PersonListPanelHandle extends NodeHandle> { diff --git a/src/test/java/guitests/guihandles/WebViewUtil.java b/src/test/java/guitests/guihandles/WebViewUtil.java index 5a6f9415ee38..94decfbc9716 100644 --- a/src/test/java/guitests/guihandles/WebViewUtil.java +++ b/src/test/java/guitests/guihandles/WebViewUtil.java @@ -3,11 +3,11 @@ import java.net.MalformedURLException; import java.net.URL; -import guitests.GuiRobot; import javafx.scene.web.WebView; /** * Helper methods for dealing with {@code WebView}. + * @// TODO: 14/3/2018 Delete this class when no long required */ public class WebViewUtil { diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index 349f0819a646..ec8557bb091b 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -5,11 +5,8 @@ import static org.junit.Assert.assertTrue; import static seedu.address.ui.StatusBarFooter.SYNC_STATUS_INITIAL; import static seedu.address.ui.StatusBarFooter.SYNC_STATUS_UPDATED; -import static seedu.address.ui.UiPart.FXML_FILE_FOLDER; import static seedu.address.ui.testutil.GuiTestAssert.assertListMatching; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -25,7 +22,6 @@ import guitests.guihandles.PersonListPanelHandle; import guitests.guihandles.ResultDisplayHandle; import guitests.guihandles.StatusBarFooterHandle; -import seedu.address.MainApp; import seedu.address.TestApp; import seedu.address.commons.core.EventsCenter; import seedu.address.commons.core.index.Index; From c6502e19c76b47c0518076b7e4345871e3f89c41 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 14 Mar 2018 23:33:00 +0800 Subject: [PATCH 040/280] Remove trailing whitespaces --- src/test/java/guitests/guihandles/HelpWindowHandle.java | 2 +- src/test/java/guitests/guihandles/WebViewUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/guitests/guihandles/HelpWindowHandle.java b/src/test/java/guitests/guihandles/HelpWindowHandle.java index b8af32b2719d..068e977a418e 100644 --- a/src/test/java/guitests/guihandles/HelpWindowHandle.java +++ b/src/test/java/guitests/guihandles/HelpWindowHandle.java @@ -27,7 +27,7 @@ public static boolean isWindowPresent() { /** * Returns the {@code URL} of the currently loaded page. - * @// TODO: 14/3/2018 Remove this when no longer required + * @TODO: 14/3/2018 Remove this when no longer required */ public URL getLoadedUrl() { return WebViewUtil.getLoadedUrl(getChildNode(HELP_WINDOW_BROWSER_ID)); diff --git a/src/test/java/guitests/guihandles/WebViewUtil.java b/src/test/java/guitests/guihandles/WebViewUtil.java index 94decfbc9716..2deb56532eec 100644 --- a/src/test/java/guitests/guihandles/WebViewUtil.java +++ b/src/test/java/guitests/guihandles/WebViewUtil.java @@ -7,7 +7,7 @@ /** * Helper methods for dealing with {@code WebView}. - * @// TODO: 14/3/2018 Delete this class when no long required + * @TODO: 14/3/2018 Delete this class when no long required */ public class WebViewUtil { From 81ee30366917c7b6682da6212daa937b6ebdd807 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 15 Mar 2018 00:01:25 +0800 Subject: [PATCH 041/280] Minor edit of variable naming and format --- src/main/java/seedu/address/ui/MainWindow.java | 4 +++- src/test/java/guitests/guihandles/MainWindowHandle.java | 8 ++++---- src/test/java/systemtests/AddressBookSystemTest.java | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index d68aa537efdd..1124683fd31a 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -185,7 +185,9 @@ public StudentListPanel getStudentListPanel() { return this.studentListPanel; } - public TutorListPanel getTutorListPanel () { return this.tutorListPanel; } + public TutorListPanel getTutorListPanel () { + return this.tutorListPanel; + } /** * @// TODO: 14/3/2018 Remove this if no longer needed diff --git a/src/test/java/guitests/guihandles/MainWindowHandle.java b/src/test/java/guitests/guihandles/MainWindowHandle.java index b58460887b36..dc56e8fdcfd2 100644 --- a/src/test/java/guitests/guihandles/MainWindowHandle.java +++ b/src/test/java/guitests/guihandles/MainWindowHandle.java @@ -7,7 +7,7 @@ */ public class MainWindowHandle extends StageHandle { - private final PersonListPanelHandle personListPanel; + private final PersonListPanelHandle studentListPanel; private final PersonListPanelHandle tutorListPanel; private final ResultDisplayHandle resultDisplay; private final CommandBoxHandle commandBox; @@ -17,7 +17,7 @@ public class MainWindowHandle extends StageHandle { public MainWindowHandle(Stage stage) { super(stage); - personListPanel = new PersonListPanelHandle(getChildNode(PersonListPanelHandle.PERSON_LIST_VIEW_ID)); + studentListPanel = new PersonListPanelHandle(getChildNode(PersonListPanelHandle.PERSON_LIST_VIEW_ID)); resultDisplay = new ResultDisplayHandle(getChildNode(ResultDisplayHandle.RESULT_DISPLAY_ID)); commandBox = new CommandBoxHandle(getChildNode(CommandBoxHandle.COMMAND_INPUT_FIELD_ID)); statusBarFooter = new StatusBarFooterHandle(getChildNode(StatusBarFooterHandle.STATUS_BAR_PLACEHOLDER)); @@ -25,8 +25,8 @@ public MainWindowHandle(Stage stage) { tutorListPanel = new PersonListPanelHandle(getChildNode(PersonListPanelHandle.PERSON_LIST_VIEW_ID)); } - public PersonListPanelHandle getPersonListPanel() { - return personListPanel; + public PersonListPanelHandle getStudentListPanel() { + return studentListPanel; } public ResultDisplayHandle getResultDisplay() { diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index ec8557bb091b..6d01995e8ca4 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -93,7 +93,7 @@ public CommandBoxHandle getCommandBox() { } public PersonListPanelHandle getPersonListPanel() { - return mainWindowHandle.getPersonListPanel(); + return mainWindowHandle.getStudentListPanel(); } public MainMenuHandle getMainMenu() { From fe071b22b521ddbb745ef08bd8fc06bd36df378a Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Thu, 15 Mar 2018 00:21:05 +0800 Subject: [PATCH 042/280] Remove extra lines in test case and rename certain variables --- .../java/systemtests/AddressBookSystemTest.java | 16 ++++++++-------- .../java/systemtests/FindCommandSystemTest.java | 2 +- .../java/systemtests/HelpCommandSystemTest.java | 7 ++----- src/test/java/systemtests/SampleDataTest.java | 2 +- .../systemtests/SelectCommandSystemTest.java | 2 +- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index 6d01995e8ca4..e1adaaa78ed8 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -92,7 +92,7 @@ public CommandBoxHandle getCommandBox() { return mainWindowHandle.getCommandBox(); } - public PersonListPanelHandle getPersonListPanel() { + public PersonListPanelHandle getStudentListPanel() { return mainWindowHandle.getStudentListPanel(); } @@ -142,7 +142,7 @@ protected void showPersonsWithName(String keyword) { */ protected void selectPerson(Index index) { executeCommand(SelectCommand.COMMAND_WORD + " " + index.getOneBased()); - assertEquals(index.getZeroBased(), getPersonListPanel().getSelectedCardIndex()); + assertEquals(index.getZeroBased(), getStudentListPanel().getSelectedCardIndex()); } /** @@ -164,7 +164,7 @@ protected void assertApplicationDisplaysExpected(String expectedCommandInput, St assertEquals(expectedResultMessage, getResultDisplay().getText()); assertEquals(expectedModel, getModel()); assertEquals(expectedModel.getAddressBook(), testApp.readStorageAddressBook()); - assertListMatching(getPersonListPanel(), expectedModel.getFilteredPersonList()); + assertListMatching(getStudentListPanel(), expectedModel.getFilteredPersonList()); } /** @@ -175,7 +175,7 @@ private void rememberStates() { StatusBarFooterHandle statusBarFooterHandle = getStatusBarFooter(); statusBarFooterHandle.rememberSaveLocation(); statusBarFooterHandle.rememberSyncStatus(); - getPersonListPanel().rememberSelectedPersonCard(); + getStudentListPanel().rememberSelectedPersonCard(); } /** @@ -183,7 +183,7 @@ private void rememberStates() { * of the previously selected person. */ protected void assertSelectedCardDeselected() { - assertFalse(getPersonListPanel().isAnyCardSelected()); + assertFalse(getStudentListPanel().isAnyCardSelected()); } /** @@ -192,7 +192,7 @@ protected void assertSelectedCardDeselected() { * @see PersonListPanelHandle#isSelectedPersonCardChanged() */ protected void assertSelectedCardChanged(Index expectedSelectedCardIndex) { - assertEquals(expectedSelectedCardIndex.getZeroBased(), getPersonListPanel().getSelectedCardIndex()); + assertEquals(expectedSelectedCardIndex.getZeroBased(), getStudentListPanel().getSelectedCardIndex()); } /** @@ -200,7 +200,7 @@ protected void assertSelectedCardChanged(Index expectedSelectedCardIndex) { * @see PersonListPanelHandle#isSelectedPersonCardChanged() */ protected void assertSelectedCardUnchanged() { - assertFalse(getPersonListPanel().isSelectedPersonCardChanged()); + assertFalse(getStudentListPanel().isSelectedPersonCardChanged()); } /** @@ -245,7 +245,7 @@ private void assertApplicationStartingStateIsCorrect() { try { assertEquals("", getCommandBox().getInput()); assertEquals("", getResultDisplay().getText()); - assertListMatching(getPersonListPanel(), getModel().getFilteredPersonList()); + assertListMatching(getStudentListPanel(), getModel().getFilteredPersonList()); assertEquals("./" + testApp.getStorageSaveLocation(), getStatusBarFooter().getSaveLocation()); assertEquals(SYNC_STATUS_INITIAL, getStatusBarFooter().getSyncStatus()); } catch (Exception e) { diff --git a/src/test/java/systemtests/FindCommandSystemTest.java b/src/test/java/systemtests/FindCommandSystemTest.java index 0bde83c0444b..c2888eaf7982 100644 --- a/src/test/java/systemtests/FindCommandSystemTest.java +++ b/src/test/java/systemtests/FindCommandSystemTest.java @@ -135,7 +135,7 @@ public void find() { /* Case: find while a person is selected -> selected card deselected */ showAllPersons(); selectPerson(Index.fromOneBased(1)); - assertFalse(getPersonListPanel().getHandleToSelectedCard().getName().equals(DANIEL.getName().fullName)); + assertFalse(getStudentListPanel().getHandleToSelectedCard().getName().equals(DANIEL.getName().fullName)); command = FindCommand.COMMAND_WORD + " Daniel"; ModelHelper.setFilteredList(expectedModel, DANIEL); assertCommandSuccess(command, expectedModel); diff --git a/src/test/java/systemtests/HelpCommandSystemTest.java b/src/test/java/systemtests/HelpCommandSystemTest.java index 6a226ce4c33c..5a271be1ac4c 100644 --- a/src/test/java/systemtests/HelpCommandSystemTest.java +++ b/src/test/java/systemtests/HelpCommandSystemTest.java @@ -38,13 +38,10 @@ public void openHelpWindow() { getMainMenu().openHelpWindowUsingAccelerator(); assertHelpWindowOpen(); - getPersonListPanel().click(); + getStudentListPanel().click(); getMainMenu().openHelpWindowUsingAccelerator(); assertHelpWindowOpen(); - getMainMenu().openHelpWindowUsingAccelerator(); - assertHelpWindowNotOpen(); - //use menu button getMainMenu().openHelpWindowUsingMenu(); assertHelpWindowOpen(); @@ -62,7 +59,7 @@ public void openHelpWindow() { assertEquals("", getCommandBox().getInput()); assertCommandBoxShowsDefaultStyle(); assertNotEquals(HelpCommand.SHOWING_HELP_MESSAGE, getResultDisplay().getText()); - assertListMatching(getPersonListPanel(), getModel().getFilteredPersonList()); + assertListMatching(getStudentListPanel(), getModel().getFilteredPersonList()); // assert that the status bar too is updated correctly while the help window is open // note: the select command tested above does not update the status bar diff --git a/src/test/java/systemtests/SampleDataTest.java b/src/test/java/systemtests/SampleDataTest.java index 81a32ce9487b..ae91ef6f3be7 100644 --- a/src/test/java/systemtests/SampleDataTest.java +++ b/src/test/java/systemtests/SampleDataTest.java @@ -46,6 +46,6 @@ private void deleteFileIfExists(String filePath) { @Test public void addressBook_dataFileDoesNotExist_loadSampleData() { Person[] expectedList = SampleDataUtil.getSamplePersons(); - assertListMatching(getPersonListPanel(), expectedList); + assertListMatching(getStudentListPanel(), expectedList); } } diff --git a/src/test/java/systemtests/SelectCommandSystemTest.java b/src/test/java/systemtests/SelectCommandSystemTest.java index c7deb73454b1..836b8809cb46 100644 --- a/src/test/java/systemtests/SelectCommandSystemTest.java +++ b/src/test/java/systemtests/SelectCommandSystemTest.java @@ -115,7 +115,7 @@ private void assertCommandSuccess(String command, Index expectedSelectedCardInde Model expectedModel = getModel(); String expectedResultMessage = String.format( MESSAGE_SELECT_PERSON_SUCCESS, expectedSelectedCardIndex.getOneBased()); - int preExecutionSelectedCardIndex = getPersonListPanel().getSelectedCardIndex(); + int preExecutionSelectedCardIndex = getStudentListPanel().getSelectedCardIndex(); executeCommand(command); assertApplicationDisplaysExpected("", expectedResultMessage, expectedModel); From c0b97ceebc1e33f2e854a22856256d17e9983ca3 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 12:30:20 +0800 Subject: [PATCH 043/280] enhance find function to search not only name, but also address, email and phone --- .../model/person/NameContainsKeywordsPredicate.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java index 827e2cc106bd..0ef4481defef 100644 --- a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java @@ -18,7 +18,13 @@ public NameContainsKeywordsPredicate(List keywords) { @Override public boolean test(Person person) { return keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)); + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)) || + keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getEmail().value, keyword)) || + keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getAddress().value, keyword)) || + keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getPhone().value, keyword)); } @Override From 1dc35ad51576a888eba0a75a3c477958533a8f50 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 13:24:01 +0800 Subject: [PATCH 044/280] Replace NameContainsKeywords to SearchContainsKeywords since now the find function searches all fields --- .../address/logic/commands/FindCommand.java | 6 +-- .../logic/parser/FindCommandParser.java | 6 +-- .../SearchContainsKeywordsPredicate.java | 37 +++++++++++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/seedu/address/logic/commands/FindCommand.java index a73078ed6ea3..da04e27db9fa 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/seedu/address/logic/commands/FindCommand.java @@ -1,6 +1,6 @@ package seedu.address.logic.commands; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.SearchContainsKeywordsPredicate; /** * Finds and lists all persons in address book whose name contains any of the argument keywords. @@ -16,9 +16,9 @@ public class FindCommand extends Command { + "Parameters: KEYWORD [MORE_KEYWORDS]...\n" + "Example: " + COMMAND_WORD + " alice bob charlie"; - private final NameContainsKeywordsPredicate predicate; + private final SearchContainsKeywordsPredicate predicate; - public FindCommand(NameContainsKeywordsPredicate predicate) { + public FindCommand(SearchContainsKeywordsPredicate predicate) { this.predicate = predicate; } diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/seedu/address/logic/parser/FindCommandParser.java index b186a967cb94..7721b8381c6c 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FindCommandParser.java @@ -6,7 +6,7 @@ import seedu.address.logic.commands.FindCommand; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.SearchContainsKeywordsPredicate; /** * Parses input arguments and creates a new FindCommand object @@ -25,9 +25,9 @@ public FindCommand parse(String args) throws ParseException { String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE)); } - String[] nameKeywords = trimmedArgs.split("\\s+"); + String[] SearchKeywords = trimmedArgs.split("\\s+"); - return new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList(nameKeywords))); + return new FindCommand(new SearchContainsKeywordsPredicate(Arrays.asList(SearchKeywords))); } } diff --git a/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java new file mode 100644 index 000000000000..6daa0222d0dc --- /dev/null +++ b/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java @@ -0,0 +1,37 @@ +package seedu.address.model.person; + +import java.util.List; +import java.util.function.Predicate; + +import seedu.address.commons.util.StringUtil; + +/** + * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. + */ +public class SearchContainsKeywordsPredicate implements Predicate { + private final List keywords; + + public SearchContainsKeywordsPredicate(List keywords) { + this.keywords = keywords; + } + + @Override + public boolean test(Person person) { + return keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)) || + keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getEmail().value, keyword)) || + keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getAddress().value, keyword)) || + keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getPhone().value, keyword)); + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof SearchContainsKeywordsPredicate // instanceof handles nulls + && this.keywords.equals(((SearchContainsKeywordsPredicate) other).keywords)); // state check + } + +} From ce7c7eb9258eb5f157dc7f217b9922d9274dc846 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 13:27:41 +0800 Subject: [PATCH 045/280] delete NameContainsKeywordsPredicate method and replace it with SearchContainsKeywordsPredicate --- .../person/NameContainsKeywordsPredicate.java | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java diff --git a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java deleted file mode 100644 index 0ef4481defef..000000000000 --- a/src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java +++ /dev/null @@ -1,37 +0,0 @@ -package seedu.address.model.person; - -import java.util.List; -import java.util.function.Predicate; - -import seedu.address.commons.util.StringUtil; - -/** - * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. - */ -public class NameContainsKeywordsPredicate implements Predicate { - private final List keywords; - - public NameContainsKeywordsPredicate(List keywords) { - this.keywords = keywords; - } - - @Override - public boolean test(Person person) { - return keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)) || - keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getEmail().value, keyword)) || - keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getAddress().value, keyword)) || - keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getPhone().value, keyword)); - } - - @Override - public boolean equals(Object other) { - return other == this // short circuit if same object - || (other instanceof NameContainsKeywordsPredicate // instanceof handles nulls - && this.keywords.equals(((NameContainsKeywordsPredicate) other).keywords)); // state check - } - -} From f0cb9978a3952fae6d14e8980d7468a02453778e Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 13:32:46 +0800 Subject: [PATCH 046/280] Update test cases to test SearchContainsKeywordsPredicate instead of NameContainsKeywordsPredicate --- ... SearchContainsKeywordsPredicateTest.java} | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) rename src/test/java/seedu/address/model/person/{NameContainsKeywordsPredicateTest.java => SearchContainsKeywordsPredicateTest.java} (61%) diff --git a/src/test/java/seedu/address/model/person/NameContainsKeywordsPredicateTest.java b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java similarity index 61% rename from src/test/java/seedu/address/model/person/NameContainsKeywordsPredicateTest.java rename to src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java index 76841215e3a0..37e2ef238e1d 100644 --- a/src/test/java/seedu/address/model/person/NameContainsKeywordsPredicateTest.java +++ b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java @@ -11,21 +11,21 @@ import seedu.address.testutil.PersonBuilder; -public class NameContainsKeywordsPredicateTest { +public class SearchContainsKeywordsPredicateTest { @Test public void equals() { List firstPredicateKeywordList = Collections.singletonList("first"); List secondPredicateKeywordList = Arrays.asList("first", "second"); - NameContainsKeywordsPredicate firstPredicate = new NameContainsKeywordsPredicate(firstPredicateKeywordList); - NameContainsKeywordsPredicate secondPredicate = new NameContainsKeywordsPredicate(secondPredicateKeywordList); + SearchContainsKeywordsPredicate firstPredicate = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); + SearchContainsKeywordsPredicate secondPredicate = new SearchContainsKeywordsPredicate(secondPredicateKeywordList); // same object -> returns true assertTrue(firstPredicate.equals(firstPredicate)); // same values -> returns true - NameContainsKeywordsPredicate firstPredicateCopy = new NameContainsKeywordsPredicate(firstPredicateKeywordList); + SearchContainsKeywordsPredicate firstPredicateCopy = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); assertTrue(firstPredicate.equals(firstPredicateCopy)); // different types -> returns false @@ -39,36 +39,36 @@ public void equals() { } @Test - public void test_nameContainsKeywords_returnsTrue() { + public void test_SearchContainsKeywords_returnsTrue() { // One keyword - NameContainsKeywordsPredicate predicate = new NameContainsKeywordsPredicate(Collections.singletonList("Alice")); + SearchContainsKeywordsPredicate predicate = new SearchContainsKeywordsPredicate(Collections.singletonList("Alice")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); // Multiple keywords - predicate = new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")); + predicate = new SearchContainsKeywordsPredicate(Arrays.asList("Alice", "Bob")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); // Only one matching keyword - predicate = new NameContainsKeywordsPredicate(Arrays.asList("Bob", "Carol")); + predicate = new SearchContainsKeywordsPredicate(Arrays.asList("Bob", "Carol")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Carol").build())); // Mixed-case keywords - predicate = new NameContainsKeywordsPredicate(Arrays.asList("aLIce", "bOB")); + predicate = new SearchContainsKeywordsPredicate(Arrays.asList("aLIce", "bOB")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); } @Test - public void test_nameDoesNotContainKeywords_returnsFalse() { + public void test_SearchDoesNotContainKeywords_returnsFalse() { // Zero keywords - NameContainsKeywordsPredicate predicate = new NameContainsKeywordsPredicate(Collections.emptyList()); + SearchContainsKeywordsPredicate predicate = new SearchContainsKeywordsPredicate(Collections.emptyList()); assertFalse(predicate.test(new PersonBuilder().withName("Alice").build())); // Non-matching keyword - predicate = new NameContainsKeywordsPredicate(Arrays.asList("Carol")); + predicate = new SearchContainsKeywordsPredicate(Arrays.asList("Carol")); assertFalse(predicate.test(new PersonBuilder().withName("Alice Bob").build())); // Keywords match phone, email and address, but does not match name - predicate = new NameContainsKeywordsPredicate(Arrays.asList("12345", "alice@email.com", "Main", "Street")); + predicate = new SearchContainsKeywordsPredicate(Arrays.asList("12345", "alice@email.com", "Main", "Street")); assertFalse(predicate.test(new PersonBuilder().withName("Alice").withPhone("12345") .withEmail("alice@email.com").withAddress("Main Street").build())); } From 2d7f5c44076b038715e5177b5e2518520fa37fda Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 15 Mar 2018 22:36:49 +0800 Subject: [PATCH 047/280] Added new Location model --- .../seedu/address/model/person/Location.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/main/java/seedu/address/model/person/Location.java diff --git a/src/main/java/seedu/address/model/person/Location.java b/src/main/java/seedu/address/model/person/Location.java new file mode 100644 index 000000000000..5f89f4887cda --- /dev/null +++ b/src/main/java/seedu/address/model/person/Location.java @@ -0,0 +1,56 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Person's phone number in the address book. + * Guarantees: immutable; is valid as declared in {@link #isValidPhone(String)} + */ +public class Location { + + public static final String MESSAGE_LOCATION_CONSTRAINTS = + "Location should only be north, south, east, west, central"; + public static final String LOCATION_NORTH = "north"; + public static final String LOCATION_SOUTH = "south"; + public static final String LOCATION_EAST = "east"; + public static final String LOCATION_WEST = "west"; + public static final String LOCATION_CENTRAL = "central"; + public final String value; + + /** + * Constructs a {@code Location}. + * + * @param location A valid location. + */ + public Location(String location) { + requireNonNull(location); + checkArgument(isValidPhone(location), MESSAGE_LOCATION_CONSTRAINTS); + this.value = location; + } + + /** + * Returns true if a given string is a valid person phone number. + */ + public static boolean isValidPhone(String test) { + return test.equals(LOCATION_CENTRAL) || test.equals(LOCATION_EAST) || test.equals(LOCATION_NORTH) || test.equals(LOCATION_SOUTH) || test.equals(LOCATION_WEST); + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof Location // instanceof handles nulls + && this.value.equals(((Location) other).value)); // state check + } + + @Override + public int hashCode() { + return value.hashCode(); + } + +} From a12789c6be4f629039b10f63e77dc315c215e807 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 23:08:39 +0800 Subject: [PATCH 048/280] Update test cases for enhanced find function --- .../logic/commands/CommandTestUtil.java | 4 +-- .../logic/commands/FindCommandTest.java | 12 +++---- .../logic/parser/AddressBookParserTest.java | 6 ++-- .../logic/parser/FindCommandParserTest.java | 4 +-- .../seedu/address/model/ModelManagerTest.java | 4 +-- .../SearchContainsKeywordsPredicateTest.java | 10 +++--- .../systemtests/FindCommandSystemTest.java | 31 ++++++++++--------- 7 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index 9a5679cc29b6..15240a1814ea 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -19,8 +19,8 @@ import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.AddressBook; import seedu.address.model.Model; -import seedu.address.model.person.NameContainsKeywordsPredicate; import seedu.address.model.person.Person; +import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.model.person.exceptions.PersonNotFoundException; import seedu.address.testutil.EditPersonDescriptorBuilder; @@ -119,7 +119,7 @@ public static void showPersonAtIndex(Model model, Index targetIndex) { Person person = model.getFilteredPersonList().get(targetIndex.getZeroBased()); final String[] splitName = person.getName().fullName.split("\\s+"); - model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); + model.updateFilteredPersonList(new SearchContainsKeywordsPredicate(Arrays.asList(splitName[0]))); assertEquals(1, model.getFilteredPersonList().size()); } diff --git a/src/test/java/seedu/address/logic/commands/FindCommandTest.java b/src/test/java/seedu/address/logic/commands/FindCommandTest.java index dee1f007f751..c8505ca36a42 100644 --- a/src/test/java/seedu/address/logic/commands/FindCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindCommandTest.java @@ -21,7 +21,7 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.model.person.Person; /** @@ -32,10 +32,10 @@ public class FindCommandTest { @Test public void equals() { - NameContainsKeywordsPredicate firstPredicate = - new NameContainsKeywordsPredicate(Collections.singletonList("first")); - NameContainsKeywordsPredicate secondPredicate = - new NameContainsKeywordsPredicate(Collections.singletonList("second")); + SearchContainsKeywordsPredicate firstPredicate = + new SearchContainsKeywordsPredicate(Collections.singletonList("first")); + SearchContainsKeywordsPredicate secondPredicate = + new SearchContainsKeywordsPredicate(Collections.singletonList("second")); FindCommand findFirstCommand = new FindCommand(firstPredicate); FindCommand findSecondCommand = new FindCommand(secondPredicate); @@ -76,7 +76,7 @@ public void execute_multipleKeywords_multiplePersonsFound() { */ private FindCommand prepareCommand(String userInput) { FindCommand command = - new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList(userInput.split("\\s+")))); + new FindCommand(new SearchContainsKeywordsPredicate(Arrays.asList(userInput.split("\\s+")))); command.setData(model, new CommandHistory(), new UndoRedoStack()); return command; } diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index c349fe9aaf83..0ca9352868b1 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -29,7 +29,7 @@ import seedu.address.logic.commands.SelectCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.model.person.Person; import seedu.address.testutil.EditPersonDescriptorBuilder; import seedu.address.testutil.PersonBuilder; @@ -117,7 +117,7 @@ public void parseCommand_find() throws Exception { List keywords = Arrays.asList("foo", "bar", "baz"); FindCommand command = (FindCommand) parser.parseCommand( FindCommand.COMMAND_WORD + " " + keywords.stream().collect(Collectors.joining(" "))); - assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); + assertEquals(new FindCommand(new SearchContainsKeywordsPredicate(keywords)), command); } @Test @@ -125,7 +125,7 @@ public void parseCommand_findAlias() throws Exception { List keywords = Arrays.asList("foo", "bar", "baz"); FindCommand command = (FindCommand) parser.parseCommand( FindCommand.COMMAND_ALIAS + " " + keywords.stream().collect(Collectors.joining(" "))); - assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); + assertEquals(new FindCommand(new SearchContainsKeywordsPredicate(keywords)), command); } @Test diff --git a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java b/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java index e65143d3b7b0..fa717bcb6585 100644 --- a/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/FindCommandParserTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import seedu.address.logic.commands.FindCommand; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.SearchContainsKeywordsPredicate; public class FindCommandParserTest { @@ -24,7 +24,7 @@ public void parse_emptyArg_throwsParseException() { public void parse_validArgs_returnsFindCommand() { // no leading and trailing whitespaces FindCommand expectedFindCommand = - new FindCommand(new NameContainsKeywordsPredicate(Arrays.asList("Alice", "Bob"))); + new FindCommand(new SearchContainsKeywordsPredicate(Arrays.asList("Alice", "Bob"))); assertParseSuccess(parser, "Alice Bob", expectedFindCommand); // multiple whitespaces between keywords diff --git a/src/test/java/seedu/address/model/ModelManagerTest.java b/src/test/java/seedu/address/model/ModelManagerTest.java index 59ce1b83693a..18160efffa0b 100644 --- a/src/test/java/seedu/address/model/ModelManagerTest.java +++ b/src/test/java/seedu/address/model/ModelManagerTest.java @@ -12,7 +12,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; -import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.testutil.AddressBookBuilder; public class ModelManagerTest { @@ -51,7 +51,7 @@ public void equals() { // different filteredList -> returns false String[] keywords = ALICE.getName().fullName.split("\\s+"); - modelManager.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(keywords))); + modelManager.updateFilteredPersonList(new SearchContainsKeywordsPredicate(Arrays.asList(keywords))); assertFalse(modelManager.equals(new ModelManager(addressBook, userPrefs))); // resets modelManager to initial state for upcoming tests diff --git a/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java index 37e2ef238e1d..3448f96ca482 100644 --- a/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java +++ b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java @@ -55,6 +55,11 @@ public void test_SearchContainsKeywords_returnsTrue() { // Mixed-case keywords predicate = new SearchContainsKeywordsPredicate(Arrays.asList("aLIce", "bOB")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); + + // Keywords match phone, email and address, but does not match name + predicate = new SearchContainsKeywordsPredicate(Arrays.asList("12345", "alice@email.com", "Main", "Street")); + assertTrue(predicate.test(new PersonBuilder().withName("Alice").withPhone("12345") + .withEmail("alice@email.com").withAddress("Main Street").build())); } @Test @@ -66,10 +71,5 @@ public void test_SearchDoesNotContainKeywords_returnsFalse() { // Non-matching keyword predicate = new SearchContainsKeywordsPredicate(Arrays.asList("Carol")); assertFalse(predicate.test(new PersonBuilder().withName("Alice Bob").build())); - - // Keywords match phone, email and address, but does not match name - predicate = new SearchContainsKeywordsPredicate(Arrays.asList("12345", "alice@email.com", "Main", "Street")); - assertFalse(predicate.test(new PersonBuilder().withName("Alice").withPhone("12345") - .withEmail("alice@email.com").withAddress("Main Street").build())); } } diff --git a/src/test/java/systemtests/FindCommandSystemTest.java b/src/test/java/systemtests/FindCommandSystemTest.java index 0bde83c0444b..a51c84b4223a 100644 --- a/src/test/java/systemtests/FindCommandSystemTest.java +++ b/src/test/java/systemtests/FindCommandSystemTest.java @@ -6,6 +6,8 @@ import static seedu.address.testutil.TypicalPersons.BENSON; import static seedu.address.testutil.TypicalPersons.CARL; import static seedu.address.testutil.TypicalPersons.DANIEL; +import static seedu.address.testutil.TypicalPersons.FIONA; +import static seedu.address.testutil.TypicalPersons.HOON; import static seedu.address.testutil.TypicalPersons.KEYWORD_MATCHING_MEIER; import java.util.ArrayList; @@ -94,35 +96,36 @@ public void find() { assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); - /* Case: find person in address book, keyword is substring of name -> 0 persons found */ - command = FindCommand.COMMAND_WORD + " Mei"; - ModelHelper.setFilteredList(expectedModel); + /* Case: find phone number of person in address book -> 1 persons found */ + command = FindCommand.COMMAND_WORD + " " + FIONA.getPhone().value; + ModelHelper.setFilteredList(expectedModel, FIONA); assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); - /* Case: find person in address book, name is substring of keyword -> 0 persons found */ - command = FindCommand.COMMAND_WORD + " Meiers"; - ModelHelper.setFilteredList(expectedModel); + /* Case: find email of person in address book -> 1 persons found */ + command = FindCommand.COMMAND_WORD + " " + FIONA.getEmail().value; assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); - /* Case: find person not in address book -> 0 persons found */ - command = FindCommand.COMMAND_WORD + " Mark"; + /* Case: find address of person in address book -> 1 persons found */ + command = FindCommand.COMMAND_WORD + " " + FIONA.getAddress().value; assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); - /* Case: find phone number of person in address book -> 0 persons found */ - command = FindCommand.COMMAND_WORD + " " + DANIEL.getPhone().value; + /* Case: find person in address book, keyword is substring of name -> 0 persons found */ + command = FindCommand.COMMAND_WORD + " Mei"; + ModelHelper.setFilteredList(expectedModel); assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); - /* Case: find address of person in address book -> 0 persons found */ - command = FindCommand.COMMAND_WORD + " " + DANIEL.getAddress().value; + /* Case: find person in address book, name is substring of keyword -> 0 persons found */ + command = FindCommand.COMMAND_WORD + " Meiers"; + ModelHelper.setFilteredList(expectedModel); assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); - /* Case: find email of person in address book -> 0 persons found */ - command = FindCommand.COMMAND_WORD + " " + DANIEL.getEmail().value; + /* Case: find person not in address book -> 0 persons found */ + command = FindCommand.COMMAND_WORD + " Mark"; assertCommandSuccess(command, expectedModel); assertSelectedCardUnchanged(); From 85dcb5436286d2a7f2bf0953253e75f4627dae91 Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 15 Mar 2018 23:22:42 +0800 Subject: [PATCH 049/280] Created Subject class and edited mistakes in Location --- .../seedu/address/model/person/Location.java | 24 ++++---- .../seedu/address/model/person/Subject.java | 57 +++++++++++++++++++ 2 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 src/main/java/seedu/address/model/person/Subject.java diff --git a/src/main/java/seedu/address/model/person/Location.java b/src/main/java/seedu/address/model/person/Location.java index 5f89f4887cda..ad9301b809a3 100644 --- a/src/main/java/seedu/address/model/person/Location.java +++ b/src/main/java/seedu/address/model/person/Location.java @@ -4,18 +4,18 @@ import static seedu.address.commons.util.AppUtil.checkArgument; /** - * Represents a Person's phone number in the address book. - * Guarantees: immutable; is valid as declared in {@link #isValidPhone(String)} + * Represents a Person's available Location in the TuitionCor. + * Guarantees: immutable; is valid as declared in {@link #isValidLocation(String)} */ public class Location { public static final String MESSAGE_LOCATION_CONSTRAINTS = - "Location should only be north, south, east, west, central"; - public static final String LOCATION_NORTH = "north"; - public static final String LOCATION_SOUTH = "south"; - public static final String LOCATION_EAST = "east"; - public static final String LOCATION_WEST = "west"; - public static final String LOCATION_CENTRAL = "central"; + "Location should only be north, south, east, west, central but can take any value if necessary"; + /* + * The first character of the Location must not be a whitespace, + * otherwise " " (a blank string) becomes a valid input. + */ + public static final String ADDRESS_VALIDATION_REGEX = "[^\\s].*"; public final String value; /** @@ -25,15 +25,15 @@ public class Location { */ public Location(String location) { requireNonNull(location); - checkArgument(isValidPhone(location), MESSAGE_LOCATION_CONSTRAINTS); + checkArgument(isValidLocation(location), MESSAGE_LOCATION_CONSTRAINTS); this.value = location; } /** - * Returns true if a given string is a valid person phone number. + * Returns true if a given string is a valid person Location. */ - public static boolean isValidPhone(String test) { - return test.equals(LOCATION_CENTRAL) || test.equals(LOCATION_EAST) || test.equals(LOCATION_NORTH) || test.equals(LOCATION_SOUTH) || test.equals(LOCATION_WEST); + public static boolean isValidLocation(String test) { + return test.matches(ADDRESS_VALIDATION_REGEX); } @Override diff --git a/src/main/java/seedu/address/model/person/Subject.java b/src/main/java/seedu/address/model/person/Subject.java new file mode 100644 index 000000000000..d40c88fc88c0 --- /dev/null +++ b/src/main/java/seedu/address/model/person/Subject.java @@ -0,0 +1,57 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Person's related Subject in the TuitionCor. + * Guarantees: immutable; is valid as declared in {@link #isValidSubject(String)} + */ +public class Subject { + + public static final String MESSAGE_SUBJECT_CONSTRAINTS = + "Subjects can take any value and should not be blank"; + + /* + * The first character of the Subject must not be a whitespace, + * otherwise " " (a blank string) becomes a valid input. + */ + public static final String ADDRESS_VALIDATION_REGEX = "[^\\s].*"; + + public final String value; + + /** + * Constructs an {@code Subject}. + * + * @param subject A valid address. + */ + public Subject(String subject) { + requireNonNull(subject); + checkArgument(isValidSubject(subject), MESSAGE_SUBJECT_CONSTRAINTS); + this.value = subject; + } + + /** + * Returns true if a given string is a valid person Subject. + */ + public static boolean isValidSubject(String test) { + return test.matches(ADDRESS_VALIDATION_REGEX); + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof Subject // instanceof handles nulls + && this.value.equals(((Subject) other).value)); // state check + } + + @Override + public int hashCode() { + return value.hashCode(); + } +} From 64b56fc3c99551c7cfcd29ea28a77701fb6920ab Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 23:24:15 +0800 Subject: [PATCH 050/280] fix checkstyle error --- .../address/logic/parser/FindCommandParser.java | 4 ++-- .../person/SearchContainsKeywordsPredicate.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/seedu/address/logic/parser/FindCommandParser.java b/src/main/java/seedu/address/logic/parser/FindCommandParser.java index 7721b8381c6c..f5c3132e0c7b 100644 --- a/src/main/java/seedu/address/logic/parser/FindCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/FindCommandParser.java @@ -25,9 +25,9 @@ public FindCommand parse(String args) throws ParseException { String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE)); } - String[] SearchKeywords = trimmedArgs.split("\\s+"); + String[] searchKeywords = trimmedArgs.split("\\s+"); - return new FindCommand(new SearchContainsKeywordsPredicate(Arrays.asList(SearchKeywords))); + return new FindCommand(new SearchContainsKeywordsPredicate(Arrays.asList(searchKeywords))); } } diff --git a/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java index 6daa0222d0dc..6d59d0928826 100644 --- a/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java @@ -18,12 +18,12 @@ public SearchContainsKeywordsPredicate(List keywords) { @Override public boolean test(Person person) { return keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)) || - keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getEmail().value, keyword)) || - keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getAddress().value, keyword)) || - keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)) + || keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getEmail().value, keyword)) + || keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getAddress().value, keyword)) + || keywords.stream() .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getPhone().value, keyword)); } From 901c02c3917e99c8d0afa17ed812d4bae128f8a4 Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 15 Mar 2018 23:25:36 +0800 Subject: [PATCH 051/280] Added Level and minor changes to Subject --- .../seedu/address/model/person/Level.java | 57 +++++++++++++++++++ .../seedu/address/model/person/Subject.java | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/address/model/person/Level.java diff --git a/src/main/java/seedu/address/model/person/Level.java b/src/main/java/seedu/address/model/person/Level.java new file mode 100644 index 000000000000..4e10b1de37f0 --- /dev/null +++ b/src/main/java/seedu/address/model/person/Level.java @@ -0,0 +1,57 @@ +package seedu.address.model.person; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Represents a Person's related Level in the TuitionCor. + * Guarantees: immutable; is valid as declared in {@link #isValidLevel(String)} + */ +public class Level { + + public static final String MESSAGE_SUBJECT_CONSTRAINTS = + "Level can be any specified level but should not be blank"; + + /* + * The first character of the Subject must not be a whitespace, + * otherwise " " (a blank string) becomes a valid input. + */ + public static final String ADDRESS_VALIDATION_REGEX = "[^\\s].*"; + + public final String value; + + /** + * Constructs an {@code Level}. + * + * @param level A valid level. + */ + public Level(String level) { + requireNonNull(level); + checkArgument(isValidLevel(level), MESSAGE_SUBJECT_CONSTRAINTS); + this.value = level; + } + + /** + * Returns true if a given string is a valid person Level. + */ + public static boolean isValidLevel(String test) { + return test.matches(ADDRESS_VALIDATION_REGEX); + } + + @Override + public String toString() { + return value; + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof Subject // instanceof handles nulls + && this.value.equals(((Subject) other).value)); // state check + } + + @Override + public int hashCode() { + return value.hashCode(); + } +} diff --git a/src/main/java/seedu/address/model/person/Subject.java b/src/main/java/seedu/address/model/person/Subject.java index d40c88fc88c0..ee1bc19937f1 100644 --- a/src/main/java/seedu/address/model/person/Subject.java +++ b/src/main/java/seedu/address/model/person/Subject.java @@ -23,7 +23,7 @@ public class Subject { /** * Constructs an {@code Subject}. * - * @param subject A valid address. + * @param subject A valid subject. */ public Subject(String subject) { requireNonNull(subject); From 94d464682407461a889a2ea5f14c791c58275cee Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 15 Mar 2018 23:31:14 +0800 Subject: [PATCH 052/280] Person: added Location, Subject and Level field --- .../java/seedu/address/model/person/Person.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index ec9f2aa5e919..b9eb19318a39 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -19,11 +19,15 @@ public class Person { private final Phone phone; private final Email email; private final Address address; + private final Location location; + private final Subject subject; + private final Level level; private final UniqueTagList tags; /** * Every field must be present and not null. + * @TODO: include location, subject and level field when add method is updated */ public Person(Name name, Phone phone, Email email, Address address, Set tags) { requireAllNonNull(name, phone, email, address, tags); @@ -51,6 +55,18 @@ public Address getAddress() { return address; } + public Location getLocation() { + return location; + } + + public Subject getSubject() { + return subject; + } + + public Level getLevel() { + return level; + } + /** * Returns an immutable tag set, which throws {@code UnsupportedOperationException} * if modification is attempted. From 572354e6fdd84169672622037297201b243a8a7e Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 23:40:34 +0800 Subject: [PATCH 053/280] fix checkstyle errors --- .../address/logic/commands/FindCommandTest.java | 3 ++- .../SearchContainsKeywordsPredicateTest.java | 16 ++++++++++------ .../java/systemtests/FindCommandSystemTest.java | 1 - 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/FindCommandTest.java b/src/test/java/seedu/address/logic/commands/FindCommandTest.java index c8505ca36a42..6e203534b81a 100644 --- a/src/test/java/seedu/address/logic/commands/FindCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/FindCommandTest.java @@ -21,8 +21,9 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; -import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.model.person.Person; +import seedu.address.model.person.SearchContainsKeywordsPredicate; + /** * Contains integration tests (interaction with the Model) for {@code FindCommand}. diff --git a/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java index 3448f96ca482..4aaed792a1b5 100644 --- a/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java +++ b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java @@ -18,14 +18,17 @@ public void equals() { List firstPredicateKeywordList = Collections.singletonList("first"); List secondPredicateKeywordList = Arrays.asList("first", "second"); - SearchContainsKeywordsPredicate firstPredicate = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); - SearchContainsKeywordsPredicate secondPredicate = new SearchContainsKeywordsPredicate(secondPredicateKeywordList); + SearchContainsKeywordsPredicate firstPredicate + = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); + SearchContainsKeywordsPredicate secondPredicate + = new SearchContainsKeywordsPredicate(secondPredicateKeywordList); // same object -> returns true assertTrue(firstPredicate.equals(firstPredicate)); // same values -> returns true - SearchContainsKeywordsPredicate firstPredicateCopy = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); + SearchContainsKeywordsPredicate firstPredicateCopy + = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); assertTrue(firstPredicate.equals(firstPredicateCopy)); // different types -> returns false @@ -39,9 +42,10 @@ public void equals() { } @Test - public void test_SearchContainsKeywords_returnsTrue() { + public void test_searchContainsKeywords_returnsTrue() { // One keyword - SearchContainsKeywordsPredicate predicate = new SearchContainsKeywordsPredicate(Collections.singletonList("Alice")); + SearchContainsKeywordsPredicate predicate + = new SearchContainsKeywordsPredicate(Collections.singletonList("Alice")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); // Multiple keywords @@ -63,7 +67,7 @@ public void test_SearchContainsKeywords_returnsTrue() { } @Test - public void test_SearchDoesNotContainKeywords_returnsFalse() { + public void test_searchDoesNotContainKeywords_returnsFalse() { // Zero keywords SearchContainsKeywordsPredicate predicate = new SearchContainsKeywordsPredicate(Collections.emptyList()); assertFalse(predicate.test(new PersonBuilder().withName("Alice").build())); diff --git a/src/test/java/systemtests/FindCommandSystemTest.java b/src/test/java/systemtests/FindCommandSystemTest.java index a51c84b4223a..836275e2130c 100644 --- a/src/test/java/systemtests/FindCommandSystemTest.java +++ b/src/test/java/systemtests/FindCommandSystemTest.java @@ -7,7 +7,6 @@ import static seedu.address.testutil.TypicalPersons.CARL; import static seedu.address.testutil.TypicalPersons.DANIEL; import static seedu.address.testutil.TypicalPersons.FIONA; -import static seedu.address.testutil.TypicalPersons.HOON; import static seedu.address.testutil.TypicalPersons.KEYWORD_MATCHING_MEIER; import java.util.ArrayList; From f38a9dff22852b52e6df48fd260191b9026f2bfb Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Thu, 15 Mar 2018 23:49:12 +0800 Subject: [PATCH 054/280] fix checkstyle errors --- .../logic/parser/AddressBookParserTest.java | 2 +- .../SearchContainsKeywordsPredicateTest.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 0ca9352868b1..89286c6e8112 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -29,8 +29,8 @@ import seedu.address.logic.commands.SelectCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.model.person.Person; +import seedu.address.model.person.SearchContainsKeywordsPredicate; import seedu.address.testutil.EditPersonDescriptorBuilder; import seedu.address.testutil.PersonBuilder; import seedu.address.testutil.PersonUtil; diff --git a/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java index 4aaed792a1b5..c5f2e8e4ac97 100644 --- a/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java +++ b/src/test/java/seedu/address/model/person/SearchContainsKeywordsPredicateTest.java @@ -18,17 +18,17 @@ public void equals() { List firstPredicateKeywordList = Collections.singletonList("first"); List secondPredicateKeywordList = Arrays.asList("first", "second"); - SearchContainsKeywordsPredicate firstPredicate - = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); - SearchContainsKeywordsPredicate secondPredicate - = new SearchContainsKeywordsPredicate(secondPredicateKeywordList); + SearchContainsKeywordsPredicate firstPredicate = + new SearchContainsKeywordsPredicate(firstPredicateKeywordList); + SearchContainsKeywordsPredicate secondPredicate = + new SearchContainsKeywordsPredicate(secondPredicateKeywordList); // same object -> returns true assertTrue(firstPredicate.equals(firstPredicate)); // same values -> returns true - SearchContainsKeywordsPredicate firstPredicateCopy - = new SearchContainsKeywordsPredicate(firstPredicateKeywordList); + SearchContainsKeywordsPredicate firstPredicateCopy = + new SearchContainsKeywordsPredicate(firstPredicateKeywordList); assertTrue(firstPredicate.equals(firstPredicateCopy)); // different types -> returns false @@ -44,8 +44,8 @@ public void equals() { @Test public void test_searchContainsKeywords_returnsTrue() { // One keyword - SearchContainsKeywordsPredicate predicate - = new SearchContainsKeywordsPredicate(Collections.singletonList("Alice")); + SearchContainsKeywordsPredicate predicate = + new SearchContainsKeywordsPredicate(Collections.singletonList("Alice")); assertTrue(predicate.test(new PersonBuilder().withName("Alice Bob").build())); // Multiple keywords From e111c706bfb7bffa901afe76eed8f1fc0c536455 Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Thu, 15 Mar 2018 23:53:30 +0800 Subject: [PATCH 055/280] Added junit testfor Level, Location and Subject in model --- .../seedu/address/model/person/LevelTest.java | 37 +++++++++++++++++++ .../address/model/person/LocationTest.java | 37 +++++++++++++++++++ .../address/model/person/SubjectTest.java | 37 +++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 src/test/java/seedu/address/model/person/LevelTest.java create mode 100644 src/test/java/seedu/address/model/person/LocationTest.java create mode 100644 src/test/java/seedu/address/model/person/SubjectTest.java diff --git a/src/test/java/seedu/address/model/person/LevelTest.java b/src/test/java/seedu/address/model/person/LevelTest.java new file mode 100644 index 000000000000..5f75b4edc579 --- /dev/null +++ b/src/test/java/seedu/address/model/person/LevelTest.java @@ -0,0 +1,37 @@ +package seedu.address.model.person; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import seedu.address.testutil.Assert; + +public class LevelTest { + + @Test + public void constructor_null_throwsNullPointerException() { + Assert.assertThrows(NullPointerException.class, () -> new Level(null)); + } + + @Test + public void constructor_invalidLevel_throwsIllegalArgumentException() { + String invalidLevel = ""; + Assert.assertThrows(IllegalArgumentException.class, () -> new Level(invalidLevel)); + } + + @Test + public void isValidLevel() { + // null level + Assert.assertThrows(NullPointerException.class, () -> Level.isValidLevel(null)); + + // invalid level + assertFalse(Level.isValidLevel("")); // empty string + assertFalse(Level.isValidLevel(" ")); // spaces only + + // valid level + assertTrue(Level.isValidLevel("pri2")); + assertTrue(Level.isValidLevel("-")); // one character + assertTrue(Level.isValidLevel("pri1, pri2, pri3, sec4, sec5, jc1, jc2")); // long level + } +} diff --git a/src/test/java/seedu/address/model/person/LocationTest.java b/src/test/java/seedu/address/model/person/LocationTest.java new file mode 100644 index 000000000000..e91dde421a37 --- /dev/null +++ b/src/test/java/seedu/address/model/person/LocationTest.java @@ -0,0 +1,37 @@ +package seedu.address.model.person; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import seedu.address.testutil.Assert; + +public class LocationTest { + + @Test + public void constructor_null_throwsNullPointerException() { + Assert.assertThrows(NullPointerException.class, () -> new Location(null)); + } + + @Test + public void constructor_invalidLocation_throwsIllegalArgumentException() { + String invalidLocation = ""; + Assert.assertThrows(IllegalArgumentException.class, () -> new Location(invalidLocation)); + } + + @Test + public void isValidLocation() { + // null location + Assert.assertThrows(NullPointerException.class, () -> Location.isValidLocation(null)); + + // invalid location + assertFalse(Location.isValidLocation("")); // empty string + assertFalse(Location.isValidLocation(" ")); // spaces only + + // valid location + assertTrue(Location.isValidLocation("north")); + assertTrue(Location.isValidLocation("-")); // one character + assertTrue(Location.isValidLocation("north, south, east, west, central")); // long location + } +} diff --git a/src/test/java/seedu/address/model/person/SubjectTest.java b/src/test/java/seedu/address/model/person/SubjectTest.java new file mode 100644 index 000000000000..0a9aaecd24c0 --- /dev/null +++ b/src/test/java/seedu/address/model/person/SubjectTest.java @@ -0,0 +1,37 @@ +package seedu.address.model.person; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import seedu.address.testutil.Assert; + +public class SubjectTest { + + @Test + public void constructor_null_throwsNullPointerException() { + Assert.assertThrows(NullPointerException.class, () -> new Subject(null)); + } + + @Test + public void constructor_invalidSubject_throwsIllegalArgumentException() { + String invalidSubject = ""; + Assert.assertThrows(IllegalArgumentException.class, () -> new Subject(invalidSubject)); + } + + @Test + public void isValidSubject() { + // null subject + Assert.assertThrows(NullPointerException.class, () -> Subject.isValidSubject(null)); + + // invalid subject + assertFalse(Subject.isValidSubject("")); // empty string + assertFalse(Subject.isValidSubject(" ")); // spaces only + + // valid subject + assertTrue(Subject.isValidSubject("math")); + assertTrue(Subject.isValidSubject("-")); // one character + assertTrue(Subject.isValidSubject("math, physics, chemistry, english, chinese")); // long subject + } +} From 7b3aeeefca782967c3d48d2abb138be57963874e Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Fri, 16 Mar 2018 00:12:33 +0800 Subject: [PATCH 056/280] Changed unused variables into comments for future updates --- src/main/java/seedu/address/model/person/Person.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/address/model/person/Person.java b/src/main/java/seedu/address/model/person/Person.java index b9eb19318a39..7354b2d449f7 100644 --- a/src/main/java/seedu/address/model/person/Person.java +++ b/src/main/java/seedu/address/model/person/Person.java @@ -19,9 +19,9 @@ public class Person { private final Phone phone; private final Email email; private final Address address; - private final Location location; - private final Subject subject; - private final Level level; + //private final Location location; + //private final Subject subject; + //private final Level level; private final UniqueTagList tags; @@ -55,6 +55,8 @@ public Address getAddress() { return address; } + + /* public Location getLocation() { return location; } @@ -66,6 +68,7 @@ public Subject getSubject() { public Level getLevel() { return level; } + */ /** * Returns an immutable tag set, which throws {@code UnsupportedOperationException} From 536e55ff2ed97ac3e27376a330b9f1ee1f9cba39 Mon Sep 17 00:00:00 2001 From: Zhu-Jiahui Date: Fri, 16 Mar 2018 14:15:46 +0800 Subject: [PATCH 057/280] Update user guide and developer guide --- docs/DeveloperGuide.adoc | 18 +++++++--- docs/UserGuide.adoc | 73 +++++++++++++++++++++++++++++++++++----- 2 files changed, 77 insertions(+), 14 deletions(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 14b99ce662a0..d4ec9df0f915 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -160,7 +160,7 @@ image::UiClassDiagram.png[width="800"] *API* : link:{repoURL}/src/main/java/seedu/address/ui/Ui.java[`Ui.java`] -The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter`, `BrowserPanel` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class. +The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class. The `UI` component uses JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the link:{repoURL}/src/main/java/seedu/address/ui/MainWindow.java[`MainWindow`] is specified in link:{repoURL}/src/main/resources/view/MainWindow.fxml[`MainWindow.fxml`] @@ -782,7 +782,16 @@ See this https://github.com/se-edu/addressbook-level4/pull/599[PR] for the step- *Target user profile*: +<<<<<<< Updated upstream * Tuition coordinators who are comfortable with CLI applications +======= +* A tuition service agent that receive calls from both tutor and students asking for assignments. +* has a need to manage a significant number of clients. +* prefer desktop apps over other types +* can type fast +* prefers typing over mouse input +* is reasonably comfortable using CLI apps +>>>>>>> Stashed changes *Value proposition*: TuitionCor is targeted at tuition coordinators who have to manage a large amount of contacts. @@ -921,10 +930,9 @@ Use case resumes at step 4. *MSS* -1. User finds the client he wants to match. -2. Addressbook displays information of client. -3. User requests for a match. -4. Addressbook returns a list of potential matches. +1. User enter match followed by a person name. +2. Addressbook displays information of client in the respective list (either tutor list or student list) +4. Addressbook returns a list of potential matches in the respective list. + Use case ends. diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 51b43fa1a228..8f80222c33c8 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -1,4 +1,4 @@ -= AddressBook Level 4 - User Guide += TuitionCor - User Guide :toc: :toc-title: :toc-placement: preamble @@ -16,7 +16,7 @@ By: `Team SE-EDU` Since: `Jun 2016` Licence: `MIT` == Introduction -AddressBook Level 4 (AB4) is for those who *prefer to use a desktop app for managing contacts*. More importantly, AB4 is *optimized for those who prefer to work with a Command Line Interface* (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB4 can get your contact management tasks done faster than traditional GUI apps. Interested? Jump to the <> to get started. Enjoy! +TuitionCor is for those who *prefer to use a desktop app for managing client information*. More importantly, TuitionCor is *optimized for those who prefer to work with a Command Line Interface* (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, TuitionCor can get your client management tasks done faster than traditional GUI apps. Interested? Jump to the <> to get started. Enjoy! == Quick Start @@ -26,8 +26,8 @@ AddressBook Level 4 (AB4) is for those who *prefer to use a desktop app for mana Having any Java 8 version is not enough. + This app will not work with earlier versions of Java 8. + -. Download the latest `addressbook.jar` link:{repoURL}/releases[here]. -. Copy the file to the folder you want to use as the home folder for your Address Book. +. Download the latest `TuitionCor.jar` link:{repoURL}/releases[here]. +. Copy the file to the folder you want to use as the home folder for your client information. . Double-click the file to start the app. The GUI should appear in a few seconds. + image::Ui.png[width="790"] @@ -61,8 +61,6 @@ e.g. typing *`help`* and pressing kbd:[Enter] will open the help window. Format: `help` -Alias Format: `1` - === Adding a person: `add` Adds a person to the address book + @@ -105,16 +103,16 @@ Edits the phone number and email address of the 1st person to be `91234567` and * `e 2 n/Betsy Crower t/` + Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags. -=== Locating persons by name: `find` +=== Locating persons: `find` -Finds persons whose names contain any of the given keywords. + +Finds persons that contain any of the given keywords. + Format: `find KEYWORD [MORE_KEYWORDS]` Alias Format: `f KEYWORD [MORE_KEYWORDS]` **** * The search is case insensitive. e.g `hans` will match `Hans` * The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans` -* Only the name is searched. +* Not only the name is searched, but all the fields of a person is searched. * Only full words will be matched e.g. `Han` will not match `Hans` * Persons matching at least one keyword will be returned (i.e. `OR` search). e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang` **** @@ -125,6 +123,11 @@ Examples: Returns `john` and `John Doe` * `f Betsy Tim John` + Returns any person having names `Betsy`, `Tim`, or `John` +* `f 96528541` + +Returns any person having phone number `96528541` +* `f blk` + +Returns any person having keyword `blk` + === Deleting a person : `delete` @@ -265,6 +268,7 @@ _{explain how the user can enable/disable data encryption}_ == Command Summary * *Add* `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]...` + +<<<<<<< Updated upstream e.g. `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` + Alias: `a` * *Clear* : `clear` + @@ -290,3 +294,54 @@ Alias: `h` Alias: `u` * *Redo* : `redo` + Alias: `r` +======= + + Alias : a + +e.g. `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` + +* *Clear* : `clear` + + Alias : c + +* *Delete* : `delete INDEX` + + + Alias : d + +e.g. `delete 3` + +* *Edit* : `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]...` + + + Alias : e + +e.g. `edit 2 n/James Lee e/jameslee@example.com` + +* *Find* : `find KEYWORD [MORE_KEYWORDS]` + + + Alias : f + +e.g. `find James Jake` + +* *List* : `list` + + Alias : l + +* *Help* : `help` +* *Select* : `select INDEX` + + + Alias : s + +e.g.`select 2` + +* *History* : `history` + + Alias : h + +* *Undo* : `undo` + + Alias : u + +* *Redo* : `redo` + + Alias : r +>>>>>>> Stashed changes From f5b42e4646c7e5b308a1eb642264739b24e49e3d Mon Sep 17 00:00:00 2001 From: Destin Ngeow Date: Fri, 16 Mar 2018 18:46:18 +0800 Subject: [PATCH 058/280] Updated AboutUs --- docs/AboutUs.adoc | 44 ++++++++++++--------------------------- docs/images/damithc.jpg | Bin 6910 -> 0 bytes docs/images/destin.jpg | Bin 0 -> 102556 bytes docs/images/hongCho.jpg | Bin 0 -> 138140 bytes docs/images/jiahui.jpg | Bin 0 -> 126597 bytes docs/images/lejolly.jpg | Bin 26764 -> 0 bytes docs/images/m133225.jpg | Bin 80341 -> 0 bytes docs/images/yijinl.jpg | Bin 13946 -> 0 bytes docs/images/yl_coder.jpg | Bin 7203 -> 0 bytes 9 files changed, 13 insertions(+), 31 deletions(-) delete mode 100644 docs/images/damithc.jpg create mode 100644 docs/images/destin.jpg create mode 100644 docs/images/hongCho.jpg create mode 100644 docs/images/jiahui.jpg delete mode 100644 docs/images/lejolly.jpg delete mode 100644 docs/images/m133225.jpg delete mode 100644 docs/images/yijinl.jpg delete mode 100644 docs/images/yl_coder.jpg diff --git a/docs/AboutUs.adoc b/docs/AboutUs.adoc index 0f0a8e7ab51e..30cdf43c2fb4 100644 --- a/docs/AboutUs.adoc +++ b/docs/AboutUs.adoc @@ -3,53 +3,35 @@ :imagesDir: images :stylesDir: stylesheets -AddressBook - Level 4 was developed by the https://se-edu.github.io/docs/Team.html[se-edu] team. + -_{The dummy content given below serves as a placeholder to be used by future forks of the project.}_ + +TuitionCor was developed by the https://github.com/CS2103JAN2018-F11-B2[CS2103JAN2018-F11-B2] team. + {empty} + We are a team based in the http://www.comp.nus.edu.sg[School of Computing, National University of Singapore]. == Project Team -=== John Doe -image::damithc.jpg[width="150", align="left"] -{empty}[http://www.comp.nus.edu.sg/~damithch[homepage]] [https://github.com/damithc[github]] [<>] - -Role: Project Advisor - -''' - -=== John Roe -image::lejolly.jpg[width="150", align="left"] -{empty}[http://github.com/lejolly[github]] [<>] +=== Ngeow Shan Yong Destin +image::destin.jpg[width="150", align="left"] +{empty}[https://github.com/shookshire[github]] [<>] Role: Team Lead + -Responsibilities: UI - -''' - -=== Johnny Doe -image::yijinl.jpg[width="150", align="left"] -{empty}[http://github.com/yijinl[github]] [<>] - -Role: Developer + -Responsibilities: Data +Responsibilities: Model ''' -=== Johnny Roe -image::m133225.jpg[width="150", align="left"] -{empty}[http://github.com/m133225[github]] [<>] +=== Lim Hong Cho +image::hongCho.jpg[width="150", align="left"] +{empty}[https://github.com/olimhc[github]] [<>] Role: Developer + -Responsibilities: Dev Ops + Threading +Responsibilities: UI ''' -=== Benson Meier -image::yl_coder.jpg[width="150", align="left"] -{empty}[http://github.com/yl-coder[github]] [<>] +=== Zhu Jiahui +image::jiahui.jpg[width="150", align="left"] +{empty}[https://github.com/Zhu-Jiahui[github]] [<>] Role: Developer + -Responsibilities: UI +Responsibilities: Logic ''' diff --git a/docs/images/damithc.jpg b/docs/images/damithc.jpg deleted file mode 100644 index 12754388389328dc115e74b5d7e75d21ea3e3979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6910 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 diff --git a/docs/images/destin.jpg b/docs/images/destin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfbc5950bece16da7c92d93b5f2552b61afd3bd9 GIT binary patch literal 102556 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

@su!d6pp)D>%CRAZB=z*-hXdpl02a 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%0A>&EC#J9*i$Qef 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 B$I1Wz literal 0 HcmV?d00001 diff --git a/docs/images/jiahui.jpg b/docs/images/jiahui.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50842501dbe4d4c8d801c66716eef08f94720524 GIT binary patch literal 126597 zcmbTddr(v77cTsU00D$VC9Mf20fkDi{V9Q16Ce=eC*dXp@KPxvij_dEC4_4z5Wrh$ z3|EWN5TYRhRzxc(SW!?RU`qmlf}$c4Bt(jcgsXt(^_(;3%zS@+-v`4CGlV^R?Y-8s zp7pHf{rKeL5LoT!?duH?2n6tf-{9jj-~~*KjZwx%CMXoj)YQbx9BW~|YLz*DttAFa zw6Z1pY_caiY^HAedOMBo;`QI1-Yg$qztG)#_U`*;e^}I!?~X=uVq$p-iAl*R zsr;N1Cr_O|^K))tQSrH7OU_>?y(FuUU#_gGzVgS-y82tU8yfFCc=)KbP0`-*Sl!e6 zPhbC&rvtBsH6yP_wPU(BQ}3tsGqZE^3yYuPLIC9d3hVzw_Wy`$4UEgc&=6^e`V<$! zAQ}E3*BBaYpct?93`QN|T5fd8GQsXBxOk(*)YduV-Dij6yUjkgqrUoL>QiX{GqV48 zfo1>yitPUc_J89V0Om*pe0j(|%c5EsMO$)kNw?U73g9k{0oq4kgGdcNawX!anv(-Tjmq5g@G}icm@2pO2afZcFjC# zW|QS*qLAIJAcgCZf!RjS%LrjwOxzp`9oyxjDuUcy;Mz z!ptlw?+Kg5$lMG}TC6Wr;K6%3wJAPrF}enc5@w`V0VEPX?%P4rhrYz}>dtMhZ^s*AF@IprB-1ak>fvjJI2J(5IvDsNT= ztu#mt8B9H?p%p}-`t>qY<02tg5zd>Dg1q+*&i%RE7Sg>_f;g8%;-72-l7Q!FBh;3L zkLWcE>PQlORDh-w^)GbidpnZd2s}?%7f7e{%kgxb(jndn9Yl0s&|%U5j90(hS~XB4a1keJ z>bH0V>Vf!O>QF{Pw(w9pqLn2e^*$1-6T(Xu`kEdFiHaJH2IT3_(|NSu_PrZWo!SWuj2e*#&eAW+tR2bw;71b(z}?_Ka>I&b4lIq_y`a1Rx{tn%

0SYezeIM%*j!@sPlbv z^IfLMdH|+-GpK7brSO48+zl4FbOFWKG-H=!~`bfpp0VkMZKILDu>mP_YNDC#l$ft;h}o7(J>Nmd1>wo6z+z{l0?T*QKYdVHS-xTex?G9Us0EhxG{td!#Yn=?N?lnXZ(c1z^O&ZJ z011CIOQ@01nqx4J7y{~_FrBUPW7@u9OfD- z)=L;g>U~>wM~!Z@eJ4d)M=&@`_aBs8V{v_)P#We#B!g_IZ=Y!;kI%?8m3pa{qi3t3 zffFi18Zs^Z!1hjq(cVVkCQH#KiwT`L(sQoLFCyn22jP+=rz;VfYa9)AEv9i!iWCwo zMZGyv`>NrR`}gIj+RTSdV8a^}eI>z)qWVc&dZ1!fYKS6YNX6nA#WAkGz&p-)phQB~ zkjh|RK^65E#yIkNrYa)~21Q(zj%i_Qcr+XBtf;4Dy`*BMTal}`q81i&DKG8wB6{zN zGTSROxaD*X;%jlVaHf@@wTbgE3nwJX?A@ZM;A}rlb}MBLRpT((=9uoHMzb=*3^&o5 zC;N)uI|fB$=R99IcoL^&RN*4E_xt+MpR@R3`60li5^OkRt_BAq>qgc2uCy`vN9-w48|zq`zr(rxdKyo*o1BQ~}KO9-XMoY@7wDx_1b-=tdK=d%z)ykM6&VZRz zMJm(rlgF9BT=NmsdZ#xmvJo#O#V63(8VBtXhfdQIs}Qc;*%)f2h|)YKt5&8;!8N){ z$3o>grE?SvGI-0;WIa!oEBtn#ZoiirB5kQrcb8YcXOiy^Cdxd8lY zgsKecr%TPPym|@3E=0lPeDK5=U!BkG6FIBAm?kM2YNTc%WJtUi412i^;X_mnk*0{? z`A@QNV?3q_pG{F2lyptAY~4=@R*w)gIZS(x<=BWILa>l@Uk*^U5iTK7?&asU+NHay z(U>Mcrnz4#!rS-MZ*@OSDlUuXAkt|U)0fHkwoJc(mGq1{5Rc~idBYStk5esB@0S64 zypq1y#p~}AEvyvFaJZ!^1nL%pF3l;87#Yq+C?YrrFvf>C5rL@CzN9vIEdRtth~}ke zMinu&6J^LoC{dL)h6XOdFJTn5R1j54=@>2M&&eR>O{t5Mhl>%O@S+W{S9A;9>+WhG zTx+JJhT3anqRT{oSGbhyfk&)Bo zv501c9BgqGk}&uR8nRaBE1s243d?_jG)fW1Hkql=&oE->#Ca*|NK`FD=fv=KugkeO zTpVqeJf0T|0!@`E`WdOn2(JZ6lb-gd%F2jdPzgSStd1vZYshrBXi+b?fNOJMJ7OXj zRU?EEZs!J+^}%4Kv1c>Gh3jdW#i)85=%=c1lcnj0HJACBR^LU1~^iErsTyCAOotv$|Nw zKl)qGb*WLyP?8E;*>hjMLCH^;@E5^E&!|h#EvlykWQBV#h>xM@mts6SiBqsbmdGu( z?!|noaISbNFAM~7Y~ozibA((bY5@zPghvIKSF9?%42bGL*|Z;5s2?u5<>Ww7j5ASD zYSD{KD-#8=N&}mqu)q%mv$(_-PpUgDftcOX)!pW-nwD!A4!~oi3%DdNafp;$j2xL$ z3MisD4@+-fMjD$xRFF$i-L3)FdG5uDNMbt0n^KtR!e-S2`@olF#EjymJIl_#xxj>& zX6D?Ykz6W5Q8k6>e|8xpDJ}4F4ZT8B=?7>n746EHIHRq65ICs0MP5l*9pvSQIfhw* zJ%C8Iy~i05iMyN^5~LubE=^P9Ur@f%L>vPODugS;JU=H4WPpOtMRga31TK7b#@)0o z0|98=ggVwepX)4!e7^&~Os0XUc{A69Nl&C5Y>Dg?Y?IEUV_YqO@9f}1Inl`hK~r)N zsd%bbi)~^>l*M4MAks1~EbughLx0iovIF>py!h5lJYlrXUlhc!ASAYe4de4&{O)X4 zgt%Lj#$|#|!=h)kd=t8oj4X$3$MT{oiuE({kJ3FioG7XuDT+6lHB zM&vQst`8ap3YHKl9O-f?4+9F=OfBmP zS*4*mW+xz!dLt3O^DA|{dA5PTblg+ZU+Tgub#4WC1)h4I1_37*;G~8l5{R4wd2OOf z{II~BtIi8RmyIovJKCI?#;&EV(e)^5(@sEz6RmBo2ihTx2Z`A&cul^x9x~Zta9&m( zNLKV^V`{O0D@f;j1Rh}~bm<6zjVKsrdYs%E_)?AqV$CyR45gmodw)1hM`Mxv(V|He3aY>vnlp!L?$B?tF1PP>B3G^5e&*MfgJN|bfk1|>x|2xt2kPnkVd%rCEjuM$U+*~$$yO(>(&5$7u) zEgTlCyT|kFXqFNRo!sl>*D)8znHJi@%rG{6R*Ko-VTC~s3RY`rvr4jJlpivraa$(a zi<2gpZ8JEnv0G1|HOvFJ%BZcb{b40PoB7xcJ&=+2ScKL=|8 zc#0DU8O3N5_q%B!?*dbiJq*sjkjp4Yy=6E3pDca|;g$D(=rVvWCO0Ibm~D8%IyPLG zI9ilV$zftmj2Wm`o~p|fR&02-Bd@<6Y@#VVPLkVYx=$c@&mo4=UmEeE3e2=uv``yV z5M_({1ZW1&b1^+8LnbHiM0!v*X8%$z9|=Lial8rOaP~8@+S=EiBS#AQN^D7baAHV9 zm>Dg}VR2b};3CS-S#}97C@6J_&IKOGh2Xr{z<7r^G5|xROh@!ivH@(IB(WL8CD>Ex z%rxQlQ174H>gOr^B+6)sWczwti;m^RG|sp?<=dYd;g~YF*!_|=4#(v&XaB*Rg)SOS zij-qdLv4vrm~Ko4%~1YvnHw#-sB~cY0g5-~l{Zb-iMoh{Q|`#Lgsk)RHs-xt=rSmD za?PbEg8H)Q?#1OLUQARa743x4`bx^x#e^vlV+`PDmN*J}yDUe^S%gFC7|>wjc5U%? zFj2vp6!Lqn!vYHgI@W#2f|ub~rOS7jlcTDaIVxjV*^?~y1{sQ&Y37_WAxe=V3Ed)> z;4De8U`j1m=a#fI_J&(9-@TxY_aQdzi-ds3UQqPZMIx`X4C9-WjPKA?Cj4%B7e%{$T;4Yo)OQnWdsObj;3G7-~NeOczqlJL***klcytN8x0* z!vM-gn5^@5O|H<;wF4zNFQ=qnBuW@8;tu2#Vx+QsFu^oN^FtCzIaO{UQv!;&BMQ#= z*LQC9?5}P`(Pk^Omt7#2Z+C}4TK-N}NTxNnk3Xw{GLnZ<$eZv48kL5eJo-GK=mEX(T2tAZWm9`6~J zD~x_8f5T6#_%{XhgpJ4%C+YN3epGJ6GDqR2fyCu`8gHldIV@ts$kCEYQeCu=%W|(X zVKgp{eNx~m1_vXl zUS=;hlw6PkG@O$Aa#S@AL}}T zTTqahy{OV$L-mP#IvpmMK&A1ay>;;EkP%a*hB|eQUdnB?J`0FHx1tIpWQ}|aj2AwX zH*$I#S?SvSk_yTi$Gr#nAG%!BLwtxtw>%yQliMi%5=OOiDIja`Fuh_JC^@h}))1nq zm#P(6rGX|&4$wepcSzi2WIfVlkU*C!F3OQ^a}~;+0Mb6|Fv`nKB7qqIZK>|hyT`pT zH4e=XF56Z3R&11{xUvT(bqvmCRK$ZKV1=dzY#1Zs?KhTS(P?Z0!cY;cCOGrg6B4x4 zHP0Yy5uH6X_BGa7t;EGr5cpD^^RD6z}x2hUm)zRP85DY1xydmrr&O zy4&%cVA;J60O!S!AO1>|Ye?mN!pJDpJE@^t@}**KD;9Ly*yEQRTC#|lRvj@1w)nhw zkNzjtHUBT6$c1h6q8T~vdpG*s6>pYZR?lVrZsRGL-F3x0`#%;3p3iJ5c5HK9vwv0f zmy`p&AHi*8QGt-X&ig_fT@@DOh~^F4_~IXfLhQ(5XjJe1mS*?jYwNsqk*xX9+Xh_8 z-9GDQa)npc#NLV8Uyoh${x?D8cPJqS>Djz(ZDX60OK1dJMqlC>{4@pG)5va9+M)cN zKG!f@RX`VVxruD2skd=o_AtXY*drmUcs1@BNuQkDQ_*1B;wF;J;O`)1XpY6ItUE{4 zBS>M!p0e2%Nt02)Z5vHN&N%bHI!v&q%Km!Q=aJ8&%VP_^wa;o<=HOPiE5=3Day+9t zWr?#|jS36SHPK=*eBjz$>QYK0RsmV9VTeY)0m=>IlPoML2A0AS$HNap;CHu?!LZ0w zw-eQm1!?RQ&9n?fZ~ashb5a6)r?>qA8zDomi3Z(WnyE#$v3ngCaw$*o(X#f%C=o0m zn~_XEz@&F>B}}P>YP2y25l5L|#bUxkc-drx??~{Q%re9G#tvMj>9T{PbE|O)4hOLv zM5+^La-vH{-5Pic4A->oHr~!nPznVyb#_pbeQZQCpAC6H=4(GA98Oaj%Ct~mWtD-; zRsS-oU>=x9mC_7;h3pMz42p!qC2C<8Krwb%m*KV4j05JDUD>9} zUAPWX?|BWW81SdOo%m|uR4b_tBxv7PjBz0b`(zY@gvo_q$QmN@9%MVYLYYK7J?^QB z(BF;ZtCJP6026UvbtTrNQD1nhc5w z7#-^%WOsE9_)oYbH5MQy{o>KaE*S}g=|KU7`3RYvvZ&5kh{iSyXVY}d6O&?$oREzs z7oAqO?irqMc4)fEP2{Wqm0H_sY@C%i=gzsml_w0aVj(1x|#U3f^UTB zKI4Jej!uCt{~R7Nwp*MVJ#&qDj4Pa(mG1MFvUi(*1ZS?4tdV-@vAES@!ev0 z+HeMn##^%2$Ep6bKKbp}9oL14`YM}qo^7m%#-V@iQ<4fz6k!NzwCd>ZIl|r7zrD5{ z(f$Susl)xQawReE{I19f6tSMY#m}lkTeO20bB(fpcpRj@x*(kvn;ki?74oNGec7|RgVODf z!hG(OKDB3U+DaOe>$%vOusYl!xV>dEBxc>k zpVmn3*Vq%CocG+F(G>J#?b`0!RWxs9wk2A0Ntkg zDKk<-84i0tEU*qh_UqbZ0Z2`ZRO!^rrD8ThRc{}tpx#$OF#rLZNHK84DmHC?Gnhi?HDS$qh^7S(zAiC4zQ(w5V!A zUm23DBm-SXg^J66}pWEEUN%*qJSkU+<{bQwg# zz6}NG%f^|0fv#-8&-E7Q;1KagM|zEIec=5i%R@ zK#4Hq2zOlltH3H1zp}gHXh|-uMQS)IV$rZo4wQ-cE`!7gZ<->OZK9xBmIALr#+}ik zXL(`aLs9j3l9=u2mP^CApT=6(zV=~RYnVB3Xox~y3zC!dt>odXpL-LuYSD75YkrI= zB!*SGf$VsMiqzYqa+~U>f(jB%264KL+n1lv3AV-_M|q5d3?0pfh;^4goa;QX6U1A` z?A0(#ss`dveK!LX_T`WBC^yCBZ5KqB&lHoK6`zp{Oq3~Ci@t>9!{MigqDs;Q>9%c; zu3%78*n4qq$K9s-Zv0&f7ulzh4W}1E?^x_gic579&yN14#g1|JpL!*Dld7q)9}s2A z*Lm_nRrC*S6_&R!or?RLZtUtdckY^zuao;4et5_6*>ddXvLIA>7%RVV!*B1d^3oNd z*#^9H#-PJrvb5xB@Km%z9 zrQw4}uf9fqp84SSRkb`xL*;VCn!d9JV4h&dASq1bLLqNF9~Q zglIyt{7|)XmG3Ep>UGGEq)UzS#~+yg$Z+jFTMd$ax9k}x2yYw9hoiW@^YG=1g@{g$ zS3Cg|o*<36q-{c#o;}D=X#MX-lb&`0H}vJ4_KN2w%Jgc!s4^EgOUSSsuu|eIi-y zD{r)i6$pr&l~eg2f}sHJq8{mfDJL#|>c)IiSq)rFr0ZN~q*ji;vr?l8Uw*E z-X;b|$3$%^LgM9ClfB)p}IMy1?>v zo@B0?SnL+-u}2annFNR#lq|7zEZt2)ZgUC>?9Cy`u%H2TpVN zRJ&x7`lkziEYJDik=jITY>-1Maii8cE~-mS+%&?wZmm5~ot3(t<>zG}dRQy}^7?C9 z`M=MuM*cU2-lF&n-*b((Qr$2v+?Ny?o-msKjLbmLF8v!`X>x3fsmGlkADr*AtorM} zFM`4*-T$sw?pB3Gg>6`|ZZlRlmHMu-uWc~xjO&>$wVNc3k8^aT z$;QH?$;$YY8J*8}k^I@AKE-Sb5;r$2Eo^pZM_p!+k=vC#ago0A=jTzx*08V76KOLF zzk`2F2??0k!vR;fSkv%xEyLxrzm5eRj1`BOCwRQ_`6?r-rFBEW!oR59g}1@jHG_(Ejsi=XTVl+G|;kL)&$^Dc#X+23wV_G+e>wc$|g~_FY`vUMPJ^(-wT%qA$dP_>BDDxHF&&6=Vx!D$$6Pu{$b+? zH)~P-5gd6g+5vTu>gRMHx24FUz7nMkVNI+5a#3Q|`@DzL%x6r>D~?aj%-gMO<8RxH(y3x&@_O@=X5{n=q|U!ju(r6AtcB@Mles^Y zLBX_aI@dANEX?nv1CigroWC970Gwe^>xGbn03%Tw*}a!_1~nMhcv4 zKsb9zU^xgKF?m`~Lo46{m7j6{el>LHtSvDR&J7DZ=};&>{Hri}i9>*`Sgg+2eOH4e zLDvl&`_a4bQV?kt(Mw3GP*4FJ-^Z2YR`3O(JIlX37W_bZQT>DpWryKxy1dn%+w&gM zh3MQshI8Pg4~o``#KcB$ef#N`1m<~RUc%tMA{6xBD5|AJ9g_nkwh{-5lGh0g;{sz) zZi^x1e#Tr8boZd0)kQeX)RF_=%tH<~Amu39Xo(Q6|7IYtad%n^E(z=u)brRnGeewV z!f274d`W<=J3lAKvJua)eTr9uC4;3ecq_X=aN~DOV@UQ6M|6z(D~?U?tKV*uRkZ&r z{)h62ohBFVWmlW=3iR8Y+MVc&rM10lGdBl$=>j^Pbcy2yty|AGym3vqg0vU+G$Lv4 z`qS})uUl+H9$`N}&ZZM%*9P)uDxUL%){lBt75!k&Ycq0Ue?5VlRD|u);wn0nypNzy zYJ9$pB5FG8*k2(hU+Wy8F)Q&2GO;sQI~W~ipq@W=)Dya-Y36? z_99Vr9( zW>jMPPX*bO7RE{A&xlttp2)DAbvEy_@XbrrKS^1^3%i>vP*~1JkFB=?L8Zy5c;_Hn z0v8&6z7{d6kk~bTE^Grfr61c=?MQ)nJMLc^FeisDnxi@WSacmsH8U3s-<9Xh0TZP# zAuHUD@R&x#8=dxn&VD|i6c|GV*h_S;>B{zFy#8CL;61PJP#j;Jig0>(_WnW7Nw4p# z)ZaDp{C4jCz~ub3Vb-=`k>7jcu{F|7W0Tc_y_WrGP>-oz-0jUoJ5Q4?jK%!5`MTTm zb5idkw?%$;D<1X9NGF_uoVnhf-ntbhtMxbsP}j(#qF$ILBz?nd1=QAbk~)y-!hpsh z*rgqLOlA7mWFKsIt=2WLYpsF)I=l?dX4FKfK~ZmaUX3ACUo@;(@=m}7j+eq zMyN{I#i1DY&FC%mmG#?`jMF~^|2gemY(SjPdr(x^967W&BUeSx2&4HFWn2oBH_dzv z%O49A_~ymZRpt_L5@bw^Rz|%}W|EhIy(CW>jv6gIl5S)}pJ3{-Ydvvz_hK1bAG!{U z8^#rU#KxUR6^{ckO+m2-Crq{zEG6{@BImZW;j2#_wwtA&-G2RxD=s)*ow+!-#8@Uw z(`!B>YjcZ&8P#baNPi|`T&NDwL(r?1tE5mSreQ&%?6QMv2wYs-EUH(qIi*Pq4;K*R z=R)Z2$CjT1TN^7>xYn(~k|(XCUch4==g?GPFu9Y5OWgQf%uPk`wPhE1oJ6@76IOP^ zg`i~{zxU{InGlWn4EcPE`td_>B&*Zn?8a`pc-PQXvn@+sey!PCe`d>q`&8TRwX9x5 zJ|p(G6jA398~^pdCoaGf}&^P!DeN7wBcbRI74S%_#kQI3QU4RK|p$THx z^zLn|8U&6iOKgG9^YdRd5}AxlOyAx9(7pkd@#A5iO#ylT`J;JtDxPQz_uAj=@m=~p z(eCK__O5fZ|EwpNN1f}S(f;Li*sbwX7j~O=?0l2>Lo)ADU3~NV1I>!{zUy}sw9x4& zH*<6A@PE$S{dT?onN3Frn>YHlgf`m@4Pk!jH?sd(-tbMq{=1LjJ-;(7W}IQPAW{AA zuHHxr5bk+;^|-`t3vgYK7!>~(JsF?Pa}+z(|pftj*sI$ z(Og8?*M#Q0*~+=fZ>l`oJFy>oGrACMjOxGW#+^LC5Y_*XO4@VgShPhOt7>+x*5LO2 z$PpRgnzyUwc{0&tTjP&c9aAdIAG3dIIBud0qzy&ePgfqz^7WacM*bxpEqh7)U6l~D z?!@MjEtlMk&=dVV`7{QLHZghNU(2ulYV?^=riBJ-I3@SU@^K%RDD`_|MXt^{4 z5%U!cj$O!+qglW7iFz;K8J`bscYh-H7-1WrCB-Bo+^EnBxCVQZrKs+mq+$~jo9;g09PGL~vCtGW zDp>a!A;-3IJj6;Au$qIe^r+&|a5RPIer2j+VOwS}y`jy;d~aHjDUMSVn$Ar_+!kHC6zG-S=|;5G*mQ?VxVhGV$PbcY^AuZ} zhBnccZz(#h)A^X#ypKy;3_&XJa4)+lR75G{?|DHrF3WrKJuN|%aX+j_-7<|^jFJ-( zKluy_BY7c8oe|ENE~zqj;C;ecQHLGH(=re}3O++YmDAWkJW%&2abH zYsbsZ*1W%)`Xc*cs>ZfpUiAIfza{PD+0}n>_n)_;=A>Xpi~Mim8PhEuUc0UL{VCd2 zv!=krtc5a7ZgUo9GfeULZKD37RN)G5NO&ZB-@A#WEB3u*#{Led`*>YflznNpSK}{L ze?GatMP?rV>;5BWlfT=e0BHtBwAjIfRYs3~>$1G@RB4=kzg&IebuY1aZSGSI+GHiA z!hhuHjR{S7!gt4cGjM^jrz+X|c;$s{t-asgHcqc>)Im$Z)o61Q^X>eh$i-|6`q7(F z^-r>%e~rrsw<4*HBctM4e!G%roi*7S7KXny_{iv1PTe(Tn`>xBxZ+B5hOptivR5AeLpm7zsCea2=QqD-D%@rYmOXx z^Vs9Gt~~6grk0=^e9k&f=|9UU#C`4(+3kAY&)UYkz@C=ZJ}X`We_SdX3htn2b+>!y z47i?|d7~)Ld+FVhdGD^KXQ^E0_jhdA^D+IhXY|jSWFw`Ch44rs>7Qrwyw>=z&e^mQ zb7@w?)Ja9?TQp*^C?Z7lI`3;6VD~HASJl8+R`k{Vux&r_#AC!c7cGvfI5wl3x%wJ) zXZy*WH{Ek@-p`#%{_j(yt?1F7yTYQyeFZ7JN2AJ_{T-io&YiZ~#8nYbTYE;7$5eSG zTKz%W{P4A{_?^kJNp;BB+}AP3e;F*kSNBh3Gl8e`mu&tS-CHTQ*UKlEC@h;IoRhK< zYGJoG8B{2+jj|$W=&E;c@8x&HU#RSzTeVCR?-<@dkvIfy{ehpOhtVK+_`wPjSUDil6a^rs;L^m2Oqg>^3oe9; zWT2x<7hgM5F~S?jY2$#A<)Ec7vndn1 zpG>c$e8NA0uBQn!k(b1uFO69GWuIJo&P=5=ECIZ?T{a$UR3+ zRu0EAxTTS{1$nW?JYllZwF~((9VLPe%A7U_`bu#$qZ8PNmWM^$We3sdv#MBh`X|jP zDrZvXXM)r*3EV~XT3)%=pujG~ENfx!wL*GSx$;Jq!m~H2rp#vTiCHDj>q*tyq{VGxqEqdAx4Ty@$dhAk&L|@J;@H z?*P^Hf@V8|OjYAGINY~c@y!1`uvB^S7cAyBmju zK6J%(I-!5f72RCh&Tpim@EakK8#+8rnM}3@_bvr&srdUK=Vu?A9Ot!hftW+;8(-Xy z^K!dsL#R%rc`)NRLgL$#4!?&Dzj$=`ob3EAtl-F(h@yGRa;eA3kWfqOQrF7^yvB38 z`P}wRWm~GIZz0#^a~q1X=8KkNQDqOSN{cDGQ44J`BV5@nKN z&;4EgW#8zxkHL1&yHGnb~6{s_>tG!ms!>)>3ycXVq6DN;c;FWi>E$Kddu2@ zYP9})5C1|%PuJ7iy~f**+n~P|7cv+h!TH(Wo&7EP)X$J;B-%t(8F=q>UhK$zyX=6d z@;!9pt2@&-niI~ArDrZj^fvC>QM~9J^7ikWYo*Rmd_yR1K$NyR_4G;P?~%2K=_IL0 zGf@5`{||u>dFm}16EQTEcWBq2C(`GiOtyI;v(u87caj3EzP)IF_Tg3N#CS*^!34j> z=t@fm{#&@I)Ug$@&^vQ5qKx&r`AT=-evxl`xDRMP&Y$jrmb13s{oX%$VY)GYg8Qe) ziEc<5Y`pXW;eNUP>Mv2Q|NYx)Fe236H7HY;EB5Ytf1{&?ZWuXYtrKN>Jow|xkHecQ zV-7vedVKp>JZ0(ZYM)8u4n@KZ^XY#|8d~1cHp(yc^?iM;)~7wHIjRADA{xawO}}<~ z=hS}}BiC5ovs>7)+PUR%Azw>K%bor+^~652=EB0C8dZTNHXq(waBAAWY4dqrZi`g1 zA~RL;@5r*0-JHc$-hG#PH?DQi7Bb&BXY&^N-q`|e?Y37EV*j(C7Q^c$uN_o)xGSi& z9c;RT-|N#W($L;+-Z=QT?$>JSu4mN5F}lolTJDznhoQWJ5Hbu|7NOfy0Z&hHRM_*Q zIh}xfNkqw|v_eajT!EJfgJ0G_;{rATs-eXdA41sBsUe(G^a-Py2*EG0<_rwqf!4kl zGF57bMf#S<2E5}Sv{^p8Ac2Iw45Lk=-sic_rN&#JRh#--7S)^pEdg5)lfFf{VF6-j z#GLl=R2+OD@>t#t#ZW+vOI7)~LNP{@?a~FS2cD-J%->GaOv!ECv{RQ6PeQn!jQ25t zv=QxPQ)nwokzHR5NwhBw7K$9gjSNM_p_x_=qDL>tT7|>y#cLJ!f7Qp!O21Ew|q3AnF``6Jm*NHd5VmqdcrAUnokwUnEM=q8In8RgW zxCR~o8PVWJ^CdxUA3}prV=<<71z8dfVq{Kb?H69?I@NOda}Y()SAGt?pAK$O)+KU6 zRAq1I{-2@S);#J7o4C`EThw_>XLvOQ4({JnO46)jpZ74=6qv-ia9xtmkbww60txM~Pf9H3DPHM0R8P;cyy#D*&Th#h< z9f`y^mCcp_HS+yU?z8$M{*J}3|JkAO*b>LMGkhscx{BD&PP7}*-nZ83b|2sRx@4o> zG4ysvkf>LA6x7&a57FQF)3d+cwDGB1wsGd>i}VAnXAb*}G@z{i>KT+>c=0p(Z5#%1 z-FY%^d{0!6d#0W3*Ul%|+_&HF7Nz=MJQTIRVtr)>9ROog#{JWWCigx)ESNCgXS>16 z;t^k>abHU7k%gQ-67Wsc>*j@hdB;7f6k*k5?yt_~mK|Tk^JgHInRmYl`6Fz#@?XRT z=37&S$Hq)Q)y5?IEe&pQPgNeZ{Dyz8_?#_M*}Z34pLA@Sm_8PfHepx(lVEc}QSV=p zzQhCCQPS@{{qL%ff0?$s22~R>>g!JlqhfGxeUR_kH|4hrEAGfh=bsg(!>fh;Ui4S> zueVjV4bK&QXg09$D=qFmTk-qtxidtM&86Q=oIl6*G9Pjvrr+$`mqy9n^MwB+q5RPi z_KBs_>-)IVf+68h6*R@iT(En-!^r*R@^OoODF^m(Lp)b(XiJN`17z71`pJRwHP6fb za(KC(TmGkR@5JOoa~~fC{S9ybhnKG5=A`+G&7Mkc=W$=D_laNb1Z_iG0HPF}G7N({vuV@vkN7_L#w_a$vv z{O#60)$AWvm>mO%79>qKd61d%?d}g5XANKXbAPDqf9*CUdf^eaP)dK?*)p;wXQq|^ z=txZR z@7o$T_~kP<`Y(X!0vsYIp~d9$b#{v%xZXiEn`nfU1On9KEsWY3E+2xG@jEww z#o?^-Ks`Wbx<7ztoqI{%G#w4LCDfm5vOZkg_6!0J~Z>D zgQ?O0&gd53m~d_5XM6rIPG_XYKGMuxOMmmbc|o&6{rkmVuu+WZH!+xiMeexgP}}&mA`9$Eu!lj0ETYna+7KbNTY zEz;G%1SL8@vUgU}@H6W+{puDcG;Le=Q(zlGgGXwH>bJH@(U&U-370Dai{I0v-EXmX ztsGq08~EuEW%~*RW(T#*5p}eIU>#|xiwD&fGSCcWQ+zD8>;kA7czSP)<7NfEbPXw1 ztf8Fy$~dVoRnb%0WP2inH>tn2>e1j=;q~%7CEqPax)?=dC^v7?-v|zSJ~}h8X_+(QTia7Z6Dlr=3w<@ne)`7Aa34i|ZEO8V}XOI7Q=Fx4Y@+PzQRyPFSTSG82VI_QJaE)b#hHSoPwMEck}bY7Q+~$x~S2itw}TX z3`Umz>V$vj*Uir^DmByX-@MO|yr{OXDcs`wpCkTpv%kh7A75Sewav=&+<)8ZJg<0f z8!bvWl94Gtdf>pR3x9d^f=)n*5 z1f0z_IoRr*d2V~WX1#H`=f?Ae_TM({UOIdG3ECr!+c>@N`&a2cxX-?cEXbM}E&J6L z2j?=Z(aA`J!t)svj1LV(A>X+6UU^^jWgF%&0xL_!4Y-U5Q1ckD8qz~5y^>6zn|OQv=wV(4v?mYIz5d`Vug?DM1JHC zs+`8W20M*=b`u)!CAzCcJ?U2sV*A&c2FwNGZ1$Y_8cRmuK$JbIV7_#=le7@lXLr=X zk$E63JJn{UMHTz{7jDUy3{(v3!urh98vlXP%Kt&px%e}ozj1ss3<+tSLv1KBmy&C3 zY&JQrxhqAIaB`_+Mwr|ywPr4(qBY9gLn@&XDn?~vgpk{0F3EL@c=j@a{4wNB9MY! zTp-Fwap4IdF{LHwO)!-tRDqc#B5<_mkWU!?7rPy%1nGjZfGL7Vs8kcE-qC&!=C+`l z2Z)exsUo~N6M$lErs0@Q&539p2&i`t0hG+&*iAvJKzjOz7OxgHlYyK{>cDmP3XLCt z%5#WabwX&62oU&|{K-#VM`IYz9*#yp*s_59 z*Mg(0w8iDJRbH!LI-$MCmBaKY8$y%r!Sw7fN@P|1j@+(T5q_>H=}I|GHRMjGZ|%hw z^(`A~B}@E!7^P0aNUk%9!gQr)C(4S73M{B_1hf?fir(mgSU#n@69P{<#-y6Mxrile z%?AHRQ()JMpGhclEV?3%zYAv^!fc!I({d&16BYB;|NOP~u<#^CCqL#HOWr}Q(P+W@ zpAEp)YO>#>F@vUuiUmW{x_P~UvZTgS8TyFDlzL9Jb4X*wyExbm>=nq^ z9WH`K+c^vJ9GCb{i1N8T)hg?&tr6~CXfplzgF#z5<}>%tJ6Kr@Z+tdk<8z&4UK-ME zc&}99J|k94J9-IC-*odDu=M@QZtXQ^>V)#!6~Gb1|8WlKYVh10aZT(;^IvL<&@uVY z)oc5^)Or$ULignmM8q7SaxjX zgblu#Z~VKitU|izP3HhyJu$Y2OqFnQ4mh6(ne;2k`R5!$Y)_B|qsN>js*$8liV2vB zm>Hf|*ID^nPE+H~pz!y8*aYhzdCa*;9D2?e-oZ7`>1!GP z7A&R{4#L+ZB?7M(Z&YqcUP-i5*MQ}5Pu(ke_*mbF(f?1_+Q#vIbuHTQ4I!* zue*j3J6Wl9yQcMLYOIn=Q;;v5S2|B0J6Esp5Fsl-_9?c$nvUc^RUVHWe62URQ`3N! zXp}imeZHl9BE1CL7Bls#C<(zxFDp1&vOS5TZgT&<OB{u!9OxOn*W1r zJgi2tyV8bEsSHp4-Z)w17v1Yn$g3te&vfwdflvh9iZ(p|6}#M!#R-qV)XtYo$|Vo)%|9yKnuB)-yYi^pi>+p z(y~{%aq9L@vtE{*zPv-v1jA44l!BqY+4($f`@7_w#qi>oPNJRc-?%`Ni^7u)-FlCE zEH1$Ii6_|-sZc+TMh(|)<`+b_cT-oOeg3bFf3M#*`b*MUHMd zLwyXDO)#o!Y@FWp9_!!#!aDfPR!J@Xr4TU;Qt|XnvQ5dpl>TZ2du*v6HLY|le7l~L zzIOc>vM1FNghXBWjA~>5RT~=vc1wJ&V+;}1T#On57--k{6%c18WfOQ{+ii(#Eu1PY@580 zDBF&H!ZR-HCv25_lUDKCL>L;B-{PE4&R_&*G3noz3=9jMdw^I4uZ6k}S635>inx;4 z!cZw(#7v&|GPws8B!260%Y~fwg^ty#M+#DFyE+_%T@ zs03i-tc?cm9oExgi-8!WiWS=4yPGIIawjA67w8MMN@melA&sS6I0XX&MSQ=z{|(s; z64mqVE6554=Ui`s$@$Wc5aHFIrJ??#%2;(+4KDsT`?<~`_jj9~Y_pM%!mn0)vI1;v zull2Bp&Z;8C2!(P-=1Q+g3=GOdy(Pt7SqyW@qtB=BW4-zO1W>&`R{G zbu;(dIc6es_EU@s6Ji)&tNEY=WoDN=c*5M*?Nh>#pENSoH$KvB=Ge%GC_gh>%S(9K z^frAwe3#-~<2+}}X!o$>OCg^=-oF*PKl2tW*%m2yW4ACrSmP=C^d91BN=niUSGT}c z5rcdwe8l)O0p%JjB)QDI*v~%j!LmV(G3Qa7)gX7DQAa*JZZC+(8T4{&^P5z>@ z#X4B28doZ|l{}I=?%%a_uW~#T0t?#kuP@SPrX*#y!FT1?UM5E#)eZQUbKWSUB;WaM z<^CrYuV7FLU`kKh%A_z_gs@7dgFmgU<($tpC#0GCuEkN;UL?LRYL*=};P_aFOth7M z84R~R64B|5@Q2Z4eWPaFV=R@_34BKAPw_i9AJ^Q)aM6hn)_Y*Ree8bnt|^ z)cmwrSH=%&u{!u3NjyRh)*s@pj;BPHeE}$~vwfH=(^sf0EHe2^?jJL#xB$)1ek;Y5 zFF{T`epKdykIi!{#I$e(#|ww=?km)^NpM)(I1zl%!t6?5132H~BiSxHSr+ruqio>J zqNRJESY~_*@27;nFZtkJ&j8OZe8XeZF-H$KG1MPJ)3^kk1`udX52D4#Gl=b0a&U^}_e27;N= z5X@@JbjYCL?LOhFtB3mbo!eC|K5{%4buXo544P;rOc`ms7+$+F`ffpiw|%~n!I-qR zJ3%*b3AfwN^Ntn1(4Cg@wv%Zp?Ic^7Xy%T_w%Xops;k}0Y1E4=GvKUNDC7!31V%O` z?>~qE7`>v6U&|TTD9wSK7p8E8ZaS4g)e~C=xoAXj;@?Z`ju~#SVVqV6Zet06HOKl9 zB&x$?1gLrKK+cE)B3XOUB_UYR#DgL1f?WzYr<0v4Q8Am(h&-J8O-SIr48RgKmdO{P zK#xaKxgF=`j~$!3t4UL!q`%998We;@PXVLMW-upz&RTkHqszdcRjbXwM!i-ICkJMC z`Q9?}4pD`9KBM;HN~kz(FrZ(cxzXh*l4vJwYyFtQ+P#|zG7w^dj!$Fop5h>M4Tv!3 zK4PehRwAJI{fGukF>z$IF&z=$mk#Dy<3u*0@*rd{B-!lqo_8-ak*jkj=?0!Z->*Ba z;(FUJoF|9>m(2{>=S0qb%T9Qi;7p-0Sf8zrGBQks#;MBFT0;DvUqFY274q+G8%SXC zk5 zS`~f2V6?B{f&Tv>MUnHPwGrJ=dhH>yZBxYkTI6rnW|h?dxsXJIo)Sc4p)q*I3?beW zGm3+QAcc$Usk^|Aqe$;9pt%@rgkh3}B@I;-o2LDx#t9^NB*ssn@yfLNx{W*|nRS68}o}?zX^`xE^_GrkiVj;LSPJ zSO2;tymrQJLX|d7>Ke}n2OGD(d(A&^O;DzGNof^Q-8J>R_Co1+_s1VCF(+=hcQiv7 zt6~kmJ@@y1ONOwunMlTiQV3dont+ErZrp>8@N{7Z(LL5o@j_@t?A5j|MB zC0Y+GAQ?sALp-L69lWlNl1B;$E3K5V`b0am9dn%J5(Og``$~}u zA|Qn^-$yriB`)v9zBbT9Lkb}-(rV18A3@^C#P|~9Ys+wg#mGH1p9Z1w4+AHZMT@Y6 zw3X0y|J~u34L4?TG~VbxN1GV3L3}czT`c*2y_&Dey(01X$tw%?5cCTvt`2{1O`6g< z7K!E&_esX09Seu_)hNSKSocczr$@K6G&keR>Zi3jA~Ewvp?8L%61Hlq>Z7768@DH) z{&|;Hh|^X=QGSBbWA)=l?-KEyThXng!JL~BSN_!qMTbZFgvD|2jpb!8o@193+#CzJ zp_i@}X0RcYomtNH^RCv2C*p!8Sl+Z~JKFb9#;yk0FU^09yjLDl-Ez5RYbFEi+;1Na zcRx_Q@uMht>yXwzLw1*$D#RAGd`gJ>YHvEt4OP+9idHt|4`?)L_{V%n<6TR z-004a?}f0p;zZNs73)|RJejBg zuXYIR>eAQ32g}J@5?kA_qJre;LL3Na0C8YquhVP(7{oMUb0)#mf%Y53JCbNqca!5f z_pTQB0X8i|dTkjvnIiRz}b~4gk?XsNvYYK!Y@~H9s z8_pVkV!L2XJFJc@B3vYB5K31NES+N1X$Z-*f+O?v!TExSDo_D=xOS8KrA#7cNV)Q_ zvE83O>t7m>$qjY;!W2Y;Yv0P+2`VUZn1%4LrC~OUbCBnpF*Cs`<=*Su0!Vl<_71_|4q-4mdkg;0zKgh(zv_GYOL6cve z`!-SS0H(yA2jSo07#Myd!sNcz%0Y$l7n+O^VcE9PAr@qRRN~>UukJr|IouhYi~{p>LUTiS*R8RvT9b*8lTzBnc4e~bl**y-(Is}6Es}*d0I%$Q#RDW@Nqk$P5fI2C zZN-)I&tJNgxDz|qr9yI2{uk%#mdWVp@;6>^-9*!N2g3p`rqD9e&)NRX^o^BuXV1#% z$60AJMH$=|ZnV8wxZ^R$(Y)spKiW09qG ztoL!G4Y!#0hoi#u6SyH+y}9^pao(~^%oV#tC;hmxGM#n|PP9RGFI{io+EiZfhwELp ztK4jM(uaTZ=9Z^H$%!1b8R!V-n0=Qfb*^YZ>op)w23uq| zzSG#y1$W-UMExDL5#PbFta2MAp?ETZ;8buD6{ld+?(=J`|LUS{){N5MkOv=Wp`tc3 z(M&(T!O^ML^mQiW?_^R>CWB=t7yn=`=-9(|Uc0>?`g!gbHxL(Q3=pF*_<~+uCfJ~LR^AqgYVCzTK9=wIM7!VK}X4`ciD`Ya zt?YnFWE{Q>s5nn{Nuuk4ZRN1W{J&Y3!J~&!Whf zLWz$LUF9P|d8&?WHA^O?zfC&jl$`85ZcD_Mwig6>(*%RbLFU=H+&C@q>-gB;QyBn# zl7q|<)gf2rI$@}J+gLi;1_#1yEG?)MK1i8k??l?NLNWlp#-NW{9<%ELom4>7DgP8y zDt9Ui@PD*18wp+z3>V0JuWK^^;B9;g=2C2m@mp-dqix!^r@BJZWrkrKypci^r+Mq|Li=3X@#?NKD{sM+z)~q zB19}78HfneQX)7|+ds?yuoc#Z)HH)X*Y?i|pZ#%@#~Zu0J{p`#-fm6g8YF9T8k%{P zM!3nT()UN9*j6p&`PJfO)AM(6iCA8UuUXP4@O@dhV4DT`MVdAbxk1B5Tx@}a`Mp9& z)I_3{vdTy{L_yxaqZNkNmd2{1>0~EmM4~rrhT{_~rFO+QS1oDig&BV(y%K^JOO^{a zr5=sH*IcBL30z6v#a}#@cpHwzSCpqJDTy`MhNG={YHL-+VpoJX)?_cfQ_T~Z=acPs zx6$Q&Cj?kIv=sbN4UcI2d@o5&gAU*eeE@!077VI9|LzhZKMe-WGwV+Ik24NhHBRZH zfkWK+Vs{VKj2>(VV&z-=Eko5UZ{enVEyOds=&9)+`(B4cFV4SKy^9V)GG_9AI^Qf; zY~6ptT{8?>t@{Hr2LS)R>K*m6D>c}5yitdc|1{-uwLz~PyS>1gY0b_#F{VgSB=@e) zo#EZs`Qd}%^63Rw3ohRKr1}M!7-|FI&{0Vuy6ihw(l20v8(#pv5HOXDmjNVE^9cE_F zlX9a^uuEgf#AaOjS$?JWF&fK&!RyIudD*-7X5A;HSh;&!S9{{9$+JEXBy%icvPTL@ zqp^fkVJPmOa^=i$qjp>b&+^2{_mz8nU;k|8T01MLSNAuX>}b#vdO%<`*o71aw1#5b zOOkiP5~4y=CehlcqkSg7nWozIxcJ#M%dBHs%`-e@LhddL^22sNX?1!bKh>gNZEfP& zxi^Xm*OG>1mvwl9_r4va=eFbIS43=fO3o^JTT05vg9c(VUZ-wwoAyOi;TyundU^Or zhG8x@%m#}XzDxWTcdW-ACYMO***;+{6{tMdKg7DQdwD(Y>rj{=DH)y+`scznmqyIC z*Ajyk94riF1Y~Gv5`Gt*p0MK|Cd8W+Rzf#Qc0PB4y`(=_fC!d9;Y8f1vk+Ce*_=Q4 zcW2fSqrmGb4@_CCw^>TV6^AYV($G>*w5dzr%y|_JcXWKu?9+R!CoSI6-1aThrc03j z?If5+F6gqcv5n98qXWmJ1yiuH`PNf)o<}7}S+4`0bgY6=BKVUmvtMun z|GG<;6^j(Bd|($uLehG|`gB+3@D;S`4c&X6=Rex>#S)@z{kw!Iye51_cWoMw;&yUA z#HeH1QP?VVcbWm$PCVydUrZa8Q!3yyRbCiW@4CPYLEk0OpesmZfb7Zcv)e8e*DVg_ zdJ>|ClFP&)Hp*==GtAX$h=KSk$c@Mjj7JL|w1zM^`aty~bCg~9hT@((e(z|z27xwp z5}N;U$%IT{`&)%_KPD59{M8v-(y#M0l?P2Z>LkiadJ)RWViKIr>0a)@nz6lk%`dlr(fJ{u)g8i zC8T;U+rjc64td^NK)#y5PmW#%LQbS`ghpDJv$jLQ`!f8o_*4XBBBo8-R4zM^1*Tz2 zE%VGS2#KCun3;DJ-Uw`L;J~mD60Re6rhm9wz)P5M+<+2gD6R{(7=Q|mw?a_XVe!v_ z|F%+VL$qMizXVjhuVb7hB<=$liy88K_Ex+t%!xyV}m zRU|G#Gh;`7Ns*=$Z^|$jizPhJM?7htTmhzWO8P~2d33Q{xOS{S-F(J_~yM{mq5-(d$ecouKarVS_Oe{6){6rISK$5@;Gn2CG! zZQ*!KL72f@dn<&1MQ2i>C^B=SM=m@LA8hUH1<90FENh;m&d#@MNwvwFbii(iv;JJD zcz!tpxs=2y`X^0Wq*ra+u=&zWPd;8kdu*aizEn}VP|Yo>F#T$m*w059;btUj;0Zru zkDs0!`44(c8SSHLL6kvHkI#C|C-aj4AQ#JDSX(P)!3X2a0DF{Cu>J?RyZX54d$+D{)~Q9q7h6@J;3QYZcM;3oCXumtUSpGaMeTlD%$YCTXMc zN6WFU_)+lwsE1W|3=YYZv%|s&mHIQY)?e$Dk#aVI)_`hyL<;x3dWj6-VMX7FE?>{q zmGq6#?R^QP47+th13UkI=1{Y?V-KwM6f8r2eX8>4aRs@q&JB=lf3U}fRGay^4XT8X z&;D{ZczlofKrjO5?G-CGeC^33ZgQxPmi@bRyF+x7Luq;I$_tc>GaI`8xR?{DWA zzXU}wqqoLfqvzXOItaqrZFc)KtG8XjNI%rP{4$1XgK_UqcWS7P{q-*leWUy1$C_Jj z&82*t9RkLddi!sEJ=*=@@!_oZ3UFMc>e;uAE6t?W@yfM|ZKbVI=VHWFQt`{!N)3@U z!b9ks1Xd{+v_T65z!0e6kK-TSIoi{gK{v?%a5sxksfR^C5*1BF6O1hE+-eDUCMdU~ zL7HJ^&IY^n{MwSOc~cHV&ydW*m#PB;DrL7NE#OK4EYsS8Q>hnjG{`XTg^)NtF&v6M zbUFyFdX{1cmO_kDF}RJ5E($Qnfaf=6EWZdY9y!-LksQrgW@`ZRys6(^*c&pHXsy+b znPa*@tYdh6Np13%Lku`x2JIkE=erohDIlaN;SC+NfEiMZk^q9z#z&m~Xf3b+1ifH^ zQ_+I#>;NDs9Mq+f>_hTy;;JCgg`)NJ=&!eqgME z&LqtU>>K#}nlD`xg1tkQHWrQg-35Erij+&R51u>5qz`wAhx_-Z$A3<(P_R$w z6;g*7kU+dypIl{fJHB&&{ju?yJMU#x@H3K!Sr5$kO%5an4FN6wj1KKO7ou9ECM0~g zKfn?cp<;N(&7>B>pL4d-V+p2C|Ji7hSOgh~bDW2QIa`~L{fpm&Gy?G(zjr$@T@1)c z{VVJiAZuJT{>}`Cql?f0E1d&&JZWD1)&x^BmfSyQH&o~43IJth*Iv-GFwYjuZ*K5+ zVUWwwoe&Vk;wMq%)#pZQs*2kgip(p>sRo}ocxY`;@OQ_TtDO$Fi$%sQn36zvrHLGX zb%qcT2Y;C1V)&)QWjtx! zEr3t^P3pUy7%!Q`G0y#2$g+ZH@y_C zKLd{rHT?EB%(o4K+sRz35`~q+%^Og2X^RsI$Hy|HTi{i3O*_uqYXebdoyqGB_s#Y{ zwNxRds4Zpon=s-GUqxOF2*>b#otP{8hs03h>gtuNNW(^4O zG!mnQPd3ZkX+=+a zUg?otN8>+wPi6qPUO#Mh*^AttpDW4Vgms@=a>~3ibneYf z1_xa?sWW*mGu+_$vQ*XX{+7S(#4DrA_P@*6mH7k&N(Bs-sN#{$GWLku7wjw%RWJ6+ z2w#<}$_T!^JBfRRNsn_pOi(!5{6j}B90~~>sk?3^f9-8_LP$0G7gJmX(LcqF7;v?l z9kMpRhU}|Z^r%4U_=aDT&kaAN7-zIuQJ3m@i;k$W32#mZzQ(E|$4koBF4PV%6`Ho1 zC}nKCcYW341@e z#1NHtz3u(Peomy@zYw&A!!1RXYI*w#osZ7a3keq9XK8*r+N;VNe967Z`q3s| zfTO0QX2HAvc9*g304hwn^7JhE`S)(24lANd;?|ju*C93QNjw-XR=!~7tVQ&Bj9<4e zUExEyLG3LKl`-K`wQTn#zTkb>+hq;ArUTre<4GMII2Z@sE3;OA^;n6uxX1Vuep_iX z;V3EpEi>=sE2EOXdR~+e$^8hGMAga@&wJ0kc4!M5{ff8pnQ?lRaYL!ipv-} zSBlN*S?z845oe_t3#J^T{ErA(r`|#=0KNm2I$=HQU9hJK-u!@M8=+k@ug=R%vomVik?=0upVE zHI4<<|Eu!+9R{`_|NgUN&dbSw9?!viZN2k%nerssm68ftq@Xe&)t9pM{9C;*QNw?j z|4qWAcVK&cARZt5rJWP1bM469o9j(7&nxqnc*cm_!*aodd#i+&e@n%(VhJit5$wo+f*FCvcUDXBcEMw;}>|(p)G&vTyc3h$$pW zE#Rk8u{kNlsfBZvdv6$mw}QCW|9&I7w`qV8@}E~x{CjH8H{h`xFWcN5i7}Xxs9AjH zkra-qmwSex!TJg1nlz>e^C-2=#@Kzw=RmqmUj}IKtat8hS=i{kPnEM+`xAtLEK}SR zr9ih2rq0NNxTeh6M{jC30?nKx+yUHN0Rd~PyLhvezdyrJy7AsgEYls{+zQPv$FIPO z_BR*}6i+5GmmIn9%O45@1-P*_wwmy3>saUd>SIKEK}%2Ar^W|=O^!}#|z zf2mTGo0VDsahY)hsEcfEVI`}@WxUc(Wf&_g=&!=;N#?4kM9@_GPc=(>JW*gi0Al+; zoY!a0{Kb6VT#s9wYUmVTgz5I9{Gp#X7%Rtcpg#2CAsy#$c~KaSAkPozkHPiF0!F~; zAZ`3IpbGTtAc55(LAc+3fa6bwqMq5>*h7USDmN14jE*sw6nT5#tDF?gg9Qh<8;caz z9x7bjI1t<(rVyjP?1&BOW$(q{Xk2_YB(i1e_%)Vx46LM9YHSDL@xv$gj<4GcnkHp- zT@mKZsjv6XWJp(G@SgqqA8CIrUbbihk`vCW=SH+k8i54+(K|RK_?b(v$B~oyKgz~> zvUh%_8^x-Nsmh;foATUi7l600SkH>t4EgB&#dAUxHmOH&m7~! zPOvXs%e1blp&7}YE+afRKk<`(qwIf>!$lX;Jic0BTJZOW7CQrYkBQe_5b-gXjtaLR z7w*u5d^jU3Sbgyi^B=@@GIQB5ZsT+7$5IoOo2|QL24MW#jOJW0;^fcI(i6O%8No056TEI5)i;zg3uJn9d7Zk2 z-@%;uRwGO{TQ)jsRUiH?iJrRaQa@#EE3opY`ZCuL+$&f@<%wE!F1}sk8P#FI%6u}= z#9Byvo*U-tEow*ReG%W0Oi*cK79>P0+Jb#Xy6VicvR^91)FJdaewAiUkXXuJr0!Sg zoXU&faE_BS?a8rd;q>$sJ!Ic3us-$nhlW<0yw_7Ilq)qGT+RkW*k<{~v4ATJe{?2p z=Dd`Ll(rdV8O*t9?@j7xqxe07tW%?y&<`7*(;nWin~bV-?L5dC3$uVk&YUvW+Vgx3 zC&bBxN%7!wymgb8B{IkTl|`Ka(KilmkgGBHmY=+phi};XyH>vLalY`?@odIx+L!>M zsGmS6ij0a9IzK%ZTJSL$!J@{+E#+0PZPubyh}Rn0+mV@F3HeJEch{Od)%{uI%+7N+ z%VInuOrJ#XJuY0a8vAp8dAs9Z!CnqeG-_t0ry3Jic(u`Ya+T8EX>z7?-NEjrD{|yz zVSbU%UrwFoN%t(QgNrUa`~oU;{Q5)+ZA<0(J@qD~s=`DUf`MH>ll~mqfh|A+j|)*w zT*L-9UpJG{8>ck}#1-=1!qvhz`bM^3%5d+LFD+iZ5@J^$KwEPCTe#uAn^>qp5|v*z zxR^-TeL(Z0;wJ<$@A1lC7}eb3dGY0Nn@W>=lNn}V@*%;BU-r~=XfRjTivJ#@(6c-2 zH1hf7?We0^5d6JQ`MUC}%+ZD9uF zx4VcfJA;C;1&u`S+E)JMB`*hMBrYB;ph|Dt4MIrXAyG1s;b{q$PK4^YgMOD zNmQjGefypDXN`J_$X*$e0xS>p((QESk%!su(yJkEiB}fkeI?pSnVY{i_)^OR6)VqN zsH{aZoA_nnht5YdN;^qTz7FRiexW|gpzr?5&O8P|?h_Ek% zWdj~_8omOmC4Dpv9WOs~Y-kkpGc7>5C!mBmDBG2THt+lGN?#eKrp6x@Fat}?pRbTFm$k7K zVTxg*F+>DL&ZMQ&Wj?cBVayLCF z1{G~`HF>UQq}*OgiRXNFW&X^Omkr6?1MIo^)pmi&nJz^q=$c9JA{2|oCzZ;-?HK>(e?>diBDNP9}uaYmPz>{B;ztxNCAHY}J- z;u?kog(9B#$eC_{wQT1H8>utl#QQcDoLbwYdy~TS4@EX<&C1HCG^gV>a`+ftrPjOC z8B_BYLIND1p(WTx7DZTNu4t$Q7ca!y9;#|I=NO@%DS zld=`u*f4UZgZ^>VkCM-wEu{}ygg^B~F7YtscRPgt%pQF~ZYlf1*`C?8Xybg@tLpbR zDlt{)Ywb)VCAr2~W_Lb`b=_%AJEFd86&I(|I(sWZIKxpNY`Cqk7Pb7&Fefrx3HA%T zdd}FX%{)U2w{5BB_)dO{;I>LQ^~KRDb-H*J|J0)k+C{jNm19~mkmj*C-J6S7SUxjV zY^R+X@|IokmL|hs&uYYYVbE6*wx$*_>v=Il&e=LKHm;LOiCnYYMmu&YD00j=nWP@H& zv1QyX!%v*3eyRaYJ|sv@!N~Fx)qs^P(KP|>XfM58+WsTtulf#LqIr(;J#DUysKn1Z zQ(eLCr>OY3?-D&O_{O+F2hhc>U56)Qif_F{42hY_U(KuD|CG7J<5y~whZ$-&OA6B8 zK6uZc_Un{Rt5>~=Q+0K&yI1yZH~)@;O$d*rSg%GNN%h+uoabt{EE4qa*%-C>s~!$J zcc}$Fgrs=6z8P-;G=f#}spO;8w555knm6OjC3?;cI~2wwo`0rUcBR5=|ma;KK&MB5c z_5TT0I0(u%qD+uXxz&67u6MM<>g*ql1<*t0TW0aIw=+|E5Z#8m;l`CcSRraVOqHK` zvjvMX?J)`njhUjl|B}(ZIZN(PDr6-*fFUQh#F8mcw@`?JksZfdRIm}tPyA10AFyS7 zEs4PjCbp;(()P}z5EYz%Cdf=(ZvPve5oZ*?})6Bbtrv9$>maJMd;8+kFN}(|?@rV;WU?aBt$l zQI>%n-Ryxz0PQ%FkqIV-rT$1H7QqYcJ==K2!DbAbtH6JwWZtk90s7u_EqF@v zrfHXR!DcW9m>|Lo=y6&+3>$C20XstADuPCcI8FWo{TF-MN~_HV$n;Clbj&;}`@s_Z zPtdFp&p!COg)v0X17a?%hhQMLtqvZ9DZR2w#BDTE8(4LbCkW5kT2x05yE2g~sRf9V z^rGz%uny7f^YpEME{fD-eJ4+R-D|Vve+Qnbp7(Vr^!}Z{ZRMQJzrdP$J@i<%e4(1$ zejaLBB6=lNgL&3++TZg8oBf)B+G(?PO-j#+`A zljO^jPz~Q`j#BBRAO4sxLvM=NhGGVnbZQ z!96UKEeTRrH?J@M(Y)wLO?y{TT3&bLn4$o~ z@g?Pzk*~VisVRWe2Axnu&ZC!dzPWddK^;Fn+MQN=KJCX7qZfwkjlAjC=4oWVr&tXN zb7inT)=Y8o_4TLDM6B4$Mzl-Thn^4ZN#L2`T*UP(NZEp|jU)+4j5=&kD+&o`kiJ6Gh4l1WtDul@&f zs|((GMHAZNmvy*MwKl){uA1vMDPCu_m(DautC6Oyf;-L5sH;W>eVLBx-+`~u zc}F+MOktihTpPXUX_Ns~(>Kqa)4g@MdB3thMx#!7!{gy~b(+r3bf@H^ud|&ykNp#F zSj)}T`<}0*QdozY3*nqxaZ$9?MnUJD-_)IS&ycC}!|eKCuj<(FA+X&)jh&vok#1qv z_B+%>v+lD>lEjFOcwm*OaIxZcI8i)5esiN=J&R1z5Ev6@bAvf7D=0F7q4_$1WPCLwHnrs%f%weZp^?&$_@_?+%2OI0Cj}N^c{XyMvV*%(8w=`liphDMP#`!*r^1e-O-b_PpBJzp2eWmUCOtdnM7@ zbmxh@c++KyJMP6fCXym^7L8_Z?Xpvt{Ib*D4sSF=O%kg4<5nvUg_6?yO?-~IeWe@G zdM-Y&&pM-Wy-DV#kNI~ol80j|4#sl}Hg8FG7ADzGd-%P(@~ef@7}OGey2`wkb>Kr* zO#64U-o>_d5{=Rw;r7xb=cgP~P+e(hd@ehkn}t^MUu;L|_$QapDI^Puae)2fG-kxi z$%E|S`etDRyZ$z=FUt}S!KSzXqUHwiwec<#^9HhF;OeJ=24vE zz>p5X`*<@cokK0Uq)Frzop$H=#Mer8&{6meerzDpjTJq)+kyw#dM@kQQ!qtS4B9jW zrRw=a#Byw$j`FE7(b&?wTPBT}*=l*{sB<3!W;%20;^c1jJlAx`+}vte)w9=$7*RRR zFh;XX9c%Ed8Bl;Owi>kf9BB<^Y?qy=ICFc}WVfqWoFf9-A0S3}pgai2{0XUMNp1Y@ zc^BBw8b~g5BxSYTPoi=dLc3G%xFb1p&zcUF4#Ayfw`A8+_HIA%R^W_W$FS~+I*70tK65;L+gUo zg(tKZLyq{1jDJ}C+~^@{fWbdlw;6SrV%cx}dg|W$WkZS}50dE=17_p=8q73y#z6=H ztC7T)`iFnJh?Nc6a;Czy?S$gL`C^AB{eki_l4lP&5+G<=tvskU;T9f$AOlk~Atj7fljFKD;! zeJDtw2Yu%>Jz;b8NjA7Vf1QvkO&4nJ93ZEC%nup&^`H)J9Pqs%3$3^1P_n`m!81-P=K{WkT{iXfW6eXQJ4B#I9swuZLTM!cCbw=?&pg50dC z*W^OP`lIY8v>dobqT|KsBL}*a0`{hhhoU4%CJ(2N+YKIjSg1Vai|h%^$S6d^lI26f zlZ#$%B%LVfz{hPRKXd3fXuo2|9AmCEKOV|W@9f8oeZIy1cnQ8T=HdOLbs#`ckD3dr zX_Pr~SN3CD4C+^_+p{Ms!8u$Z8jEUr5Pa<7(H~)k98@Bg()(nnT)yOLLO$gSUUuYh zt+<+&vH(SL+jDMT#wQykak-p>&wZb$-BD@>((*SMbZa2<-*u?QZa{E(Q={%#OlSCj z__(J9Fd2YBW5@@;?11pc7;M#_$~FrDD*jE5+eEKoylZ;s$n$DluMPNt)33ak$M5vF zA5E?z^=kyq9rgVB%+GqS6O>aF>3FedxjBLxoNRo+79ww7Kl0w*G~*`j~;m&=zGO|K>BDo2>mK z1AZ1AO1w(*HL1`Y=W=gaChL=UN?Xt8NL+pM#^B{gclT^WRc3Xy5GVq_)0Yk_i|HM0 zbFzuo-cm`vFf{Nl6Dhnh@}ZC!kCVCdwJtxT*x>D-@zKqdGw9UEt+i!W<)Xbei>X$5uou6~Tf1n%v zVtw{GCW2>?2k$(L@ELfWGTi-5&rYEE%;`}>TY^|jnfjZPgxGX@i%++w_RppB^Zb<5 zVnwBeFFk}EyK@e3ig{k;5%oeh8pgt7&0>sAlN4D)lfaNIC zh9F6{sp2xR{?!TIE=iT!JhCFr+V`eCl{h!lpeVwwEu7YWaU2;Q+gn@qSoNsi|0y~b ze|I$E|0cvFXq8zdB zPJ{F{Dg2P)tCtl%X-Ahog3^6z<#-I~h|r>TMhmD8t!mB%?*vzdNS}m|C5P>#33TXm zIn3}DL?sY%v#00?({Eo6>KX(eG)Y5@VZ90{iUUdcSANGNM)g(8OJ>a$9~N_mTPlL` zNF6dSXRaO7us-ivg_BWv{RIfX_&h$>!Xyf+kisG^ooH662X1KXh?0I)#*FsVQrnj_(Cgn((F#sPZC6ew9r z?Ji;?;hVkxmF+27>jXK^EQ42zZKl$IkkMM)%7KbMLLE3&bc6}XJvqXHh_!UebxmNe zbD%;Mxrx&Ox#+2o)s)mXOFgBh)4>Eyb`8)Q9}|=0D~l=x59IwSD?&2?3n2(7Gq?PI z-}Ewl8t~zrO#k9|Cr*w+#`)h zSYZkV43wV1d6f;YX223QS}2&M)zE@;mvRK0-y;AN`>II8R@nN1!i6yv zubaoIfQcQfv}~WPzF|?0>A=b%Q3RD?zte^MT$QD~==X)iUiuTRc{LX#`K9CXMyq{3 z8t?b(bJO7KMo(48E%K8ESkCUB~wKS8_9J%u7;`QFz9IAQ<93GX&cHHwsZ>gwP z%IU);Tdl2Qsm?boIlUi!j0-+;p5H;2G`=%mk82T}|B}qM)I-YmF$6@Yfvrie%e>Dm zcRV$nnm9g2+Lve8cUUwWqdtSPM^$ITF_Ys+QhhmpM&Y~Rmkmh|dMBomyN3naC;opK zeXZxUa=eW6j4;>ecUU)^H_%tGQYrtJ)%no%Bd(rkNUivFxBo8NuZ{9H%vv-d{*eyE z9aW?h_ujX0Ix^2b-7&BGAE;Hq;I~!BD_Ix}Rcd81`Efump0N{ylB6CWWcj)hkq00< zy-j`ZqMyA^fsYj1H`}{>#-z!cOrmq#-<*-5RAhJa!8V_*9y8f?T0db#=WD2WA@U$Y zws$e6M?x)G_t`Y`xso9dCzjx_t=^d<)hfv8B%B=ZJ^k_Ps*E~)RMT_!Ak&}uX?J+I zpe5MG+|*hQ>0V1P{n=G4O8gi2J-c2>U5M8^Z(Pm(qS&+T=^D-f{|S5gxry4@S3jcz zKqzTfcFxlWf=@OiOuCK%j|;%y)blF1{Iz#lZoalI_wswEGrASA5Z(&oX*n5W1Fd3Xsa=6|&;+u@WbJTIh(l}y1Z10@AWbVH*8KsK2G-X=$!lGH5<-^)K5mAV55V~pY zVuwwW;vA1mvY(Ap-su;bkDtVbby)4S*Xp$OSHHkhjvxD(iCGy{k1JL`3N6S#cA4(eOeWm&uTZlVA46T11N+VI_I7KSfMol~`;X?)of>R~7H`xlrQ zB7+@U??0w9k6Y;84elk`rM>Es(F4g(@hmJHMELl0$^9#~%9yyPddI`%$79K#{2^g6 zk2;o^EW7V&pZWDC?$dFTw7T;2$Z$fAvU#` z57`I|9xvP8u3U{S+U($5Gnu{l1_IrbK3tCYeMR}IQiDIm&R19;OLTO+#vfjmLMAUu z-)~>qiMb(J`1{{ci)Rk0&s@>ZlpE_fD}R&b$w*cxwRK*pA+_(5y12c?3Trp&o< zHw}8RP~TDjCcTBqDfIsRPeSgbjgsL)&+}U`E77361>7Hyr)sNcQ(MbZ{Q3QFeNzP5 zA)6dlG{o$W#TN{7qti0v67A=PBhqa~%i#!31XH%rR1Vw9Uqvs_hO!WyN{9Y@=pusv zR%JG5N~G&WI|J!C8Kb6MD4DA*@14N|h^Sy@tSPS3HqCElMtB&n&i1_mM8IA4`; z6<<(ag_W1(`=z6ae|OD$p3JF|VkU-W;89QYE9vVhYu#Oh1*@UrSD*dV!r7{Ie!u%g z^NQV?j*^L^s>OF^%HXVlghWX7Qw1DdtYwp1QZN;ueVTw#J>MS6*|ntLIfEO8$iYBm zpg@D_K{PkgvN|AIiKh0mYUE*t9aDrpZv`dxzh8-etQjySd^ZR@_c5P&DYJCcSzM z#HLkL7?+*HuI&o9)Z7|_LD@N@tyxRbK@0W|5%m6$l2lRmFTpE7+=nfdTy4Pco0-mS zg2-%?7_QS{+PPOk5Nn2?G-p$IPa&AqAVZ0`(Nyki_B*YjeK`T?AgNqIAh7b+{H#v+ z{lceX%#oZcu4|Jo(whOCKKLAh6lG<|Os>9y6gqgBgP$-JR@6B$lY(Qiulu=w7$K*| zP-qP!?<f5hy#IChs!FWSL)p3#wbw_w|ajuXs)B zpyBl#T^#{-_2u6VbrX{8Vh8-FOe)jV>(!v%H%b^n(d157s8qZ@l24MvJ)8J|4H#0a zYZQ?wJmiB+-QNuGVB_^O8j0Gu*4c?VrbM!pVK(-#$qd!KR_s6LNLs@&!TGR7FEEWZ zeCJ$cWb^(77r5);?uWNBjyu+A5jdU3DhZu6x$iR`k_S9ej_S|EjdBZ==*!@_@Bx^{ zHn-v~p-=JG$n)N#`(9plXNC}kH?gMzEH*$GNp9cG`LeqDl2g*u^pUsmes9nRK@wg$ zcRx>iSIdNSV}SEJ&_EZ^k}LHsL!LDDRj9HM=Oo76U##xu{@hFZdCdI{`0!U@=hSg* zJYF4s3_`r|?ALRUYj~8=Y@>11>z|6CyOGw!ze#^So14e_I{Du-I5uzX&50o6MdRqu zF8L}S@hs6kL1<+!HP19az9`?b^nakrf*O^+$%nVEoa7TWXcD)zU)5bByQkW2`?(Sq zv7Fk+FsCCaBB14?DvN(bl-nF#=#2ZdraQ+`CQRT5pufE*9>TE~3 ztChzLWm0f-AMW3TPR>%Vnz6v;5Jht+7rl_)dtZLt;!ilVRr8!y$bE(i?yk_bq`C9; zgaE}j3K~%v$RlLCF7M9s7%ka4s`M6#+YlAI)n)TY+q6+=#M0osw$_cBz%S_u=(#XX zr>t>z%kK(pGiDkw+xg%c~-0CWDc~M;LWCjCsq0&L@!NH_JoDk3%`3r6%pB!8zWtqHjbH?%Q==qk$b@xX_Ph*->DH>!V zP!D(nzq|~dIC-Z};Zy10EAguM8;{J@x!C>rud+#@FhAP$JHN8)$=-Xi_IF1FV)N(J zg)_zSX9&N}SEn5d+KWI}tUqX{DgStBrYm~S)~@{%foW>STcFiS@~|eGek4$-MDvqu z81uodtqAej<~gevavV*WI$c#Ll|dLSwz7&Dat#z|bBakYkfH5VJXRth%o5zsJKUCe z2#Q2uYO-E2FdPSUL`&1a(5syy4dxq?$d{dA#$EqKPzf@WC0#C6I5Yo zbQ6r-Df^Q}6I|IDw4s>6(|2s2Df{U@OdlOxxPBq7|3F+34C^k-ZeND9V7<;2>FZeH zwKhNQh|yDteOlRNF3zzKM1p+UneMD^Q2Ub2pOm`!NZMw_kpq=5WF22*5FU9o@n}{ud&TH6eTQ2<-9w!UfSi9T zv7~T|@~i!DR~kRXq{*jYnb_P|c=`K8gXg$*-`f`#qTS)tf1^^o8{KHGc+2g}!o*E+ zCH;n(Zy(Mk0xyX?6EG%`H+S#UbOK-PmFt;GcshU4Bpz#I2#jnHzzXWvbYvOIRJE_^ zqN63-IBS7FcV|Z!az-pfl#msC#+}l_s6ama|5A=`#`H$9BUf#l;+Rt!mdZfFf401+ zWm&=Jsx+j0VQ1iUs=G98^Owa$fRCc=Hmg}|m6bOyi)i=6um*FiKGH%rR}62a1rn&{ z_O2U!>itT^9ek3x=&JR6&mDI4%{(YdMw4j0N@Pw&c%5l8)V-YuS>sqfgp8^r1rYb; zK7kHY7$&}F7Vr(ir5rP4Q2Ta!{xN|W*M1H1IF(Eex6(~hOdToK%+vLTIH&(Q8zUqe zoTF2UnOf^E7odSOLw0jJd#b5O@HQ zlF4fddnEb3QT>G3&7LQZIG6tXJe|6US+RP@+ZMK2`Y}9aO^(+P6RCE`W3j# z!T}L~%OutMFdSR_&6_*4?b?*bk_njRL?XqgRN=jro)=_GSUqOH6; z@TZ>j`D^ev?pCqGdH{Y;F2$?x_~4o<>Bp3$@@AC{6(9>ACjE?e#jW69zU(6#il8;E z1H08$BQvul^U3)q=_A?a*41>}2Q^P;G^zw%d@aNt9U4g3+LwRy)|q;I%=%>jXl2D3 zPda-gJn4NR2p+uTplEVc#J^CyKw=rp=U(Hj_;Mt4POI^Gm6OWIyOgKhA>h4*Yaie< zv_`%v1)L^{G-Rr|Mu;#bQ%|SO5iC7U=%cZ9*0T@DYg|O9k56#d&xU9EDRADwFpmOdI0EN>VMn%G^gOwjq51_-g7tFiye$k{5aik6z z$T6e(hxKhm9|v7I#9WI^D6(_?kSJ5ElT4wIvfx zIlVO{V#DzSnKuw!<@;OVQo|Z0<0ZHMo9P#u!1KemuWpo$)8bST?J}bIzon+2XY1LN zz<~B>1CxWs8&d>|QvjCYTXAXJ_O^V_uFQ=_*kkDrE{e3tpYx%&H$X}lWDp|UR>ihd zJ^&ccQyrgeEp<&B!jBJ*R}1fV2RVJWAC7;L0s`^$2l(oX$qfk`fTA1=`E*<_6R6V- z>F6Ud9B!%Do$;U15WXo^D$^&{Bqb11*6DmEdM={VhI*XQz5UXO&!t$-KH8K&0^(Cv zdZ}47Sx4RGNvzmvD4RB0VQBc?(eNi8b(Ufei6y)bu><=opvC#)@cW{f5Ley3DB-g^> zr^jnq0IJvk1!RF13!i_`8VF@gCRnD=yU->KOJlf9qmK839emO1r{{)033-++O%?#vZFGb>E8RM) zRHE>SeGkTJRJG9GXeuzY{NBY!ciV+EVk|yBr5UhCsvC&N!Plxw$ZjxA!)7oIEiMQgBnC1i);I~|buI#yVHv)96yD$7Yz?7i?6Vl{OC zp>e z=U4FunU+q`VnEKRct5|y#9uN?v;UM@c1*ieEy)*82LD~NmT3{@=|=2smNH~zFqkgG z-cvB&UZ87Y(k*6)IH*eA&O&d~9q(;LL((GD2bv{ZT>AnQll$URBw3uvx`ccY&_C<) zP(@lGDG3uj7zScYSHf0t-CGs2cfT$Fw65_ygGZG4!RntMHkgDhnEJ+JcHR=58%XH| zpYCf~y|9=fCpmw;Oo?9}5^3vGx4r#y$2@@KNkLaNwVpG(X@1B$?6f}C46}fLV|=GK zmlKG;HHxisWCS1P!nbQIVXd!!jY2C$9su|O$?pYRIbtuEvKqa#Eo@lzs2DiCCTq;7lSY%~$C@M1h+t zM@Ua@86O|zV;5_=4P}oZ^U3Ke+;Seit?9ZmLt@c_^rq??l$qnyjq#kyr-ttdjHSUO z=a_Nw?(i)%NN8{bNA~bsz~R%CVnrMuby5dgr*znqhIbuHTrvC0R%sK*OeZt5LwLx` z7Nbqo_g;GhcUr#H!M*&58EuiH?}&YV=3v;ay&vWHVD;JCF;ItU`8^NKe8W9u9ddo2 z))t9MwXEu;wYpdPn0dX_+}f_1yW7f0VwL7E=+L|H>{rziZURj0r|J@_U`=)@%W{Y3 zI_PmB8_ca-h5vW2>-7oq#58Qh*APSAy-y34U!Dwo`>!iP-3DLG=Pt8gfe+3<-h7{1 zq0bHvZfA)hF-peWC+CM#lCy*gu$5`ePcz>%|LDOmwc~?QzbZGq7ohtvhL(o2v&d>1 z+qKFHv9p#=GzzbO-+%78e*7q8I4zHzls2(9v_KR-ci1+SrSS8s?Iu^t_wn;U_Iw7G^?u>j#>c>myk{~b}hhGf-fSD$<~o@Mwo(9GxIv&E9} zV0}uqNVfVLCFSvI(z)2X4Q4t4*hs{f=m$M@F* zz&5SsvOno=Q<71@#XeRRbf9X9H%?OmmK-cO1&E7$!4-|UQu0{h6@_`)vz=))D)31V; z00_v_`wOX~2z0e*$vZgwKx|~dsTPAU)v%ewnk-#TFrGAWg21qfdlmfe1IFYPOwlay z^7CYtX6_i=t?YWq*N3Sz%-JW`{!>AQq`u-=7YW3%lN`>)v!);=KR-rw!8hzE_q{g;LY6<`{+-B==PeRv!7x`{Aj~!>xnSUAiyO2oVU>K zx@phIrXti;B*6DN@`UWn{RL;$#xIY72G8(O3wL6hf%HF7%js`L@~FZ~&bn1CAl8r9 zFrh%veeLSIGfGKc-&smX-`8qL%CT+MZHE(*O>DY%q)E0nS_^{}S9)*am3WvV*^0Lx zgD_}%Sw$cUf{4m=hR9$amHjj@4LF2}cy1fu%YpW~bB3~-sPMK_z4={64H;*g# zQWL~%sb~rGMHZ?;{c3NLEOlVpMNM*xPOtqu2%|BMkH!#sZo2=RFnd1pW{m-6_xjTH zaGNR*+RefLoWFgV5@9gu3A9|s-{}>^ zC4z@zGdbr8Wn;944Zk|zR?>$yY|dwpQ%pt7j7~_TmiUJ#V%MlcceQx7w;5HRsd0T~ z01+ZIBfWoPNOCCf@z?&Og&tsDbs;P`TKJqv2-*0R!-i1^=_|&P(@Gi}>3ij4My6X= zJcsOK!GQ+OBZPNnb^cIr9CJDt!{`=cH=;BEN;}8P_Kn)5Mv#KwUgr(p%-elBAW!kW zPcTTD4zPUN_i5Ien;CjzeKRopu@O~tF|5~0>BOgBab|>fC5n`WPMyFAv#XX$gfr5q z$z9KxKnLcOXSH3Qm^+4J{yGKEV6PWYW*Z!1UYLyu1(VNh4NfX!}5NW27 zD)UhE2^8hYXfM+Ghj>hSO2k`|Rmd?zR`N({5l9$7@GHUs%m5F_PK<#IwpX=i253!D%W^WV83SKc9yvB~S!lFt`9Kz=HhC_ujlL6CNOO`{b8u zY8Er?UqoGJV@kF>Jn3 zocGy!aNft(-XO?{72u|G&wF=1T0HAOo28o~SNN(WHTZuZqe`C&IF-zu8d3RC?}v)& z9j6XnRDB4jfgM^I%Qk&|h~}lGRO7RGx)kj`*Z>33$elYs@w#7;scsLTOy!4dc3nIzem2SHHffp{rx)k$9 zN}o+#^ein!_`s_xFI~$m{eCtrpoOv7<-;9Fw1i+_y@a>%YiFX}n^Z>)6!OdxTthwh z(y)oe1h*d<{*;LmK6jx_Z^jb>0{8<(b~dYQ{{wII>~7Z3?h8d0if4vE{1bd!W|N<8<5Oa5GNk%*phjSgLM9vUe&^w3r_gOmSRO*aQ=;5)b~sA0jPzF52=qGh}6 z^i=%3I?=w~M-L}F!R4d)WbD?TUs?EM7QeRBXCpAN<=-K=$9q(w$gKdEW zzOrpnngNEIcPexJM5$CV)y|Sk@wQ1OR$Lj^4~b)HZi@YCI&XYJOj6iT)9%dWS5S~d zL7xce$-ld}BVRlYpqvF8##uyY?%T;Tex78ulo4>J1qBL++X<^?Bi-vv)rHstwO0w) zcD`qO{6HYJqq@Up_8S7xRi?ntZ^)TA5YN2yiP0<+i(%H4->pJqXt-b6_gQy1bfg)` zfT|v?i7)C=d*h>)2E_TDj(z5>1%s0e^P!+s1qjD>nk*!=xwN2bce|*{vGGPTo4O_b z4R`*_Z5RwmWskJ{)q%m;b=6;VjyA(M2jbs#N9*X1{~EwsfR<|0!#q&<22NT?#HG0) zS9cr0s8Y3FKI>qV-Of4$aG?ZCp)#m>A8LA9Wb5IgM}c!s%mNg`IFpse7{EV_eLE;F zd3BVxTF-Ydb+r0uTKerv$tV}h%4C(E2cGHk0S@vk@o_EC58ZmnGQVMz`W?it!}?L` z6a$ zwef0d%tD@Hf|Iyg=oBSWjFg6NzqQFUYDDzB7mz8fd&&BieMQ{}U`d)B{`_vhBurL4 zkTChqFA>pFvEi8L9F0}9f%$l|iXrO2qbV;`;wqWWOHxeHfCV_SykOUOR$<}iJlL?7g{C$j_MooVW`1r$qR<@SoX zJDb5Og%4se^!0Kxq)-5^)ADf)h5;Y$$4Mm)6zAy8*<|tp-+J>j5WPwDVtMK>@e{|; z<@4q(Xbw42 z>h=97th`rN8t6|s`5Oe>oKvLYb)sYX*&}(#7msB$2d)8~g!1CF01W|H2$b@ z#Fyse(PI0P?Xnv z>(kmZ6T+@5Yq>tB?<_a3J|i;cgCj(%2Tg5PoOljfN&Y-Ucz&l#q}Ct=k}@&X4oF8a_u%vPnSByqfDv!XU( zPMGB02I^TBK!SGzuQw}%@ZgJCz?29mbW-6{jhchkd)HW<5G#fP%EtlEKm2$c|H3jsWxC9+=lv=A^& zKTxii*bd$~t}BUSPtvSYFjF3>E0z`x2bLJFW|H|Qc+i&0tTQW)x}jsL$Qh*#-Inv!FEvcV@zES*3k3JaC=3?)z6*xTpm z#zOw&8L2&UCHyF=6a{)o1hJv2NPn9c_TwJ>9iwL+d}qJ+3NX`GwW+qK#qJQO z+fz}Fo7WFpXeVBR^TcMMnNVbu(Yk7eCv;(GwEVB7?g6w34gCTFfuGU`S_tMwr*8D^ z9kr8d_@z6Me^Lg#cR_uA%vp$E#=8qw4a5B;AA`L2;fG+@oSco**rMG+%w5Waq~Wr6 zsoBM%_-)3LqaJRGhhurs*_91lGM~Qe{=9YIXJWSq3cVO5JRB2MVp`R%PZ&xeo!)%b zB%D7rb6{f{&KIm1G#^&^u=v#dYiVh(H6y15Z65uY0yEom+%oc53;>vH`L_ReK%}V- zq7prq8bxT<&J3m>TdM24sC2g>Y}euI)PuzIp`1qHbd6)d@s<(VUGJh6?O#7F)GDd| zRNPgp12Ez!KKl){&-*SHf{7&m=o$XN00S^QQgxuC1nHA6y@$PEbi@L>gJXU0dEwO! zW0Z%G>W3`9i9h@0)sBcV(#=}=Mc&#SPU~ofZ2~?iD*+h&H~!^t*F~T3EwH#kdzavh zXOdU<9A@s2rU(20PWX|d=YyBzfgqDjMmn?k!OUjWr&1^|bk{cbop}6i9GTT`r*~=v z-WaP1h1>?MMU>Gas+qE96h$B}{%?N>aM$T;&$obvF zY=XsA286gXB-;m!wq$Xi^Oosv;=OCm-P#_f6skJZoMW8%mAyK~!HKYEQ*+#l|1Sl|x~`3jUASx37LnaaPwre#zC2w28u#pp7vbrO#SQigppg zcXB2Mn*#aqTEmq`mJtyP{DNA3Jc9#`u7sF4?%q7|>8;DLKj|%aaNbR$?%?$q6!t=} zP0uQ6zTM&8eRy9}_qLuyW>lf-oLf%r+C^jfo?XUfgI!r_)$A;OSS zM0uJ6Fv(%%gP5lKp%vdY_pjSCLAxSd*?3Cdw7f}l{&tx|H{vbH`aiU}lDruepFxiuK zazaPbb-SEWvDBd*{ql484dM9OK0@=seLKw7?AD&w%a81f7flR)VqjZ)^EPIeq9xm+ zs+|r4?ie{W+4(SRg>w>K{0%=E#LAzhrX0g{uxSw$UF~8ZZS9Q%qA9>hii(Wm;JY7` zxpgUtl(LNztOl#kqzETgEA$)@CJ~GlFFuX|`1yaWY5r*FUW+)NzabwBvH$c!w~RBH zuryK}&oC*4|9@VsM5Q3vf=V1szE|wot8t|a5RENrOg#C7)k8{N-kHCzYM%(iBQ3H% zrbJo#G+c2?E(xpT)uqGwh^g0|i!aQhk13BzujPbg3Bg(8Bl(vrndJ-V*Oess(FjgP z_U+;x*6K>Hs{VS|)JC6oUBXm~cCit^aM+J9<}G}E4aUX{P?yZr2UnBKz>IPPJ<7 z=wX$ro-3(3L>ynRI(s{8;a46hx*3HU-OI@fXr}{Yz|4nLGSZ+Fef4AuLmniVx@)x> zydR~GOTl#m^kx1>KThal4q^+^j-gpHZ+ym&g^PTAiJm!uC0tijNqQk5z4kXJOJQ?s zy3j2kLgTa!{S{(xDB<4s_9AfYJwC|is z(*}>^+qExxe@jGaZOy9T3O! zpp2o)D|XBUmS{LWtGBc)R7+8R&ZQYo49LA4=md_Rf%X~v%?UsXi6#?mX0;V(+@&({ zYGUyLS9n&I%v%NYmv=f;n5r?LI0`kSJR^~=t)qT=M9FR_TW?&q`5`!ykCtbYhSrS^ zaTKNA`quT5m|=O?AFgfby9K6nuv!F%4ao8K=mC zPZ39QyPiEqF^-VkC8>vRxni|X8wh`66wX=a~4-1b$l zch<0-?b%5v2olLPUH`6GA0V6C8~^2#;!4WTEGe_qiYp;KJw~tS`KqH|!!9AYO3VI^ z!`moOaPbqTloGLMlE;i&edCepuPjYr#ZhrRB#52l4aN8t3`p!C-P;m1156=oWAS!d z#=TNfms9l^bf@i*$XAf%+?STdkc(uCFBYg6W!S2Q4xnTFORFIogi?XG*H5PkvmRBK^56p4SuzhmmwwX-Lg@U>iKQLC^x~V3i|M~?b<1CyN zd1lvEWmN%{{Mqi>lz5-U{i=Ui!;gWSGQq<-+1eAA$$%|5Dx?5#)|`TrhqZp(a$7&4 zAnD#0gY%bw?^{1YZW;pgv(wpdGqQfnY!<-w&>YM`8&T5dqil9PS^+h z6PDL?TB8%4gTSgiI7|u`Nn{q^&_9yw7b$)v^AUwI=<;-5f7TUtD-K+{<`FW%lo|By}=e1k&G$uNXOHeQ_*HiXnf<$6qZx2K5w z8M4_~7K4j?Z276Xe+m^#B#RC_x!{Ak0K2kURMW{sm6)lfUrN}^>;iBBEtmRptmZ?v zswL3JGZec>MEqFq<-5W@H_n?!Qg zq$lqlmKTvNi}9GfHg7G!F9wL24fBe>uxmDZ`4UKS9;q@*wM-V+=ve(lc;ySH0~T8p zZF2yJ?!)qw4L{i>(ow~l$0U*o_OHvLvSVU4E7pwyL$zAh@XAxvsCesVy8KGS1>I|J zuoLWZ#uh*vA1xD#H|)|u6)fT0%to^8Me{6j8Xo?8#&R>7%Dd@P-xq!Rb;ss{bpaG; z-BmP8yA2Yh25FV$?7-*1b5y)2~k_krmOn%2ObQgN|g+!XQ zd+E)t9JqF51cwvNb7XL`IOn{RkSJs@CpP@UB|{+Kc-SCNj7s}n)iT!YBoragCnx)J z9%J-Hhql=LHIT40S!T3@W^|cJHc;SHxhYypm;6afenA+WPcpOB<_%`tFZKM7zf!gE zk<9ABV<0S=UhN(o;x74%JyQE4y`#HZ+eMCXfzQcg91n}pYGdN?=S_uypC;HtrnPd* z@e*Nk;cl-yElJ|pc$qlz(4$0zKSq`0Fs!_DEs z7-snrE|6YxvM3l9%`XV>{U63K7Z$Fjwo5(txrHQeZDI`ua<08GOhl!&bISp=r+cII z(>lgtlzO8?G!Jv$%gZY_T5u49JbBuUbS5cl|{?yJ^KQ_4C3Qf z%;EqnvdjlyBtJ}6(>L6gPgA~U(b*)dNSDe~sJlca=G=T+G&KkongV2m<4Te|o8^TX z6a!PPHLocE8m&7CSW24z2f`F}J^A*^Jvx%cRp>@~9H{cSQ#ZK0C3mEc(;^J#us6E?t97(QbZyYgVL-Ktg^^$<44@OB7P1_I@l zQU1Wd@6l{=Z!f*!FTtx}Pt!t#OTm<=!#7OV2lX4AvQyu?+1P-P+gLN)zK@1M`q#rP z7e9;q4|KyLbnE()!yD^+1!edJ9}9}XV34+|V3#zaRZw0`=%^6AUd;8}#RCAlO+@NUuX5}AB(J^KS;plt?+ zXsf>}<_q^Ku(1Y-@sL64hyQdom#x!@{U7!HoxfJf&IkCs4m4!1F4+EIEGvZ0Rw}?` zG=T(&%dPnm-7$a`Idxq3kG|PdMA>cWJX0zlWou>p>@biSv-0wIksyNEB@Y-DXUvFv zwyfk;66lrTX@V`~Bs3n^zcH02&=vk~*gd$y%$Y)<$q&s3=(Ex}NsMO8K>f+^w9t~5 zr;v9Yt}g8Dc~qk!e!Znv^YZ}jr};)(qrGtlz$9?%f^(D$<_?%oBc>FJC6f3~zuef@jpZjKi~ z_GO^AVSITO3!62iM>>sAnN~l`roOBmvV;T#2v+t*mn_C~Xg_t6h!fpwkDCiW{9>uc zx@J0*J98Q@`t{AZ+*pMf?vz{8{qaB6=6lD~-Bo*3{xP9b!;gwxK@%AI*@SqQ$})wk zYJWJUd7m(lw>1X!jMSLQnWazJ4fEBSD=D9~9!eOJJ?m_&7KyfFn_DXKx&B z_t$6xR9(Ywy<7v^bI!u}eZuw3=dcMZ$rc_W@m&71=b*}W|2O1&n%vpi%n(#w_mDT> zRGB#3c&OW)KVpND$!J}FE!xW3pRW`D`s9D0OJ@B*cW;?|qQ~W~kIKxO)t1fgEz8~B?(n5;{HGIKSWPfD^ZO(BIF9w_&c8wtYd>-#UGXxdJ|`k@ zy^ZCT)(jSa0-JeSA2zQ8V=h=_LNt&6+F|eX=a*@&n^}yMD;<@%BA~xWU@(o|j>>|G z%NIaBc5MpI%5Z;eUG)J%NQ+OfZQUSeHzi@pgDQH%`gB%+a433es}>!1E@pzXsakjM z!MCy*mga2wU18;LL zsn^%1RF6aXTb}AK6*26vq@1$n5|4L293xqIbSZ@oT<4zanX5nr5ua&>z?Phzo%$?| z(Q3v>RTBs56HzjV=zY2OL^%n(lu^keOM<5bu{`+#{C-WOZ%O7lp6-H`e|_Vmvp+_v zl;oP?iF6+n%h0ufKe?9H!bfD93|%Y*lBhr8k<=OXD5gDshU~fy?@G`4KNp<%55HvzwDNm7)GI2V$oxx#h##!XO4XrRykre($5kdSL zQhsAj(Ta`zd`x*V_m$#GELLN{xBS1l$0{bDS(-zHaRpcC8po;EKbn`PkHAT)y{H3c zacoQbKU$ng;y*I1dMQb1B&cY5-P#Amse~XFitn3BtnI z@E14p^q6+$?@r5$A?{u?8wYw0WGcu^s%*Q$SJ!H2lwt{iveWeJHaoQrUA|}_mFRB1st~#mXAJCj&F&Rn@5O`Rs~D{Y zRyUGLn=Y6zK*ll6jMC3U?@*NcX%XeTZpSx*SS7fU4Ah*)o&T>~yNSd1OHzrz41IHN z!{juyLI;Z}Ey2lP&D^j59GBTBvNa#;o{ALPJv`S?JtRb+vrSTjHZ?bT72%$UUVIBl zQeV+9MDGrHxldbawfI_>AUJ(!%}Sm3^A;o;qVh19IV;$LBi_(9s&joM&Arb1XE2 zFSxy=!4uooau5{eZr;L#a+hpoQ$PXoRzt(phcCg9WJ2CZ;Xg(9I9jGF2D#+SN{`$3 z$(?K~{Vs$@y|}DB{28aMYrtD0Z{~h})YcgBC>VSX$x_X$y{VRZ+G)&@e(uW}y9te| zFP}=C_qn|W-w^$yhoGA9Mt^Q-<<6vlwma|moazpGN9iuVv0`@Q;Mwz_5i<1F~z#J}w_1`H+jxEy)rF^kHImVdWOq=XC4#*|>8u>#Vx zMDfd0?PTHHw~;nC^WiCG(j=>#(eZp-icEU-oQ*wj2r@QzB3|>ngQEN_Gr*5K!8Lqjq%?C??NHigMw!s#L&2;zYljnh(;|afHEg?|P}fJe?)E9xTCYXy z@0T*Z$8Z%6^4DR~qqT<^;*#{f;m83~vzk%^;SZPpB(c9_OQ4l%jMlmoWA(%Dlsc99 zE8Iz3T;w@7y_3Q!kPd`=Q0-aSpW}+VNjx*?d863nMR>w-!_MvG>NMVaUHw&wu6gYN zQ`BEDy?;}BUr#<3dRrg2((5`t!S}p3;i^#fzc2lp3-cG;j^6Y8{Obp@hko8r%U1Gl zpUCf|uKTy&4wVf(3I4wGKTvl0J!$y52xP(TWtJxf&9S~a`Ed)W_ME4vP zgVU5CwOX5Mp0dsFRLsup_|>fV%~pK5%=#krC7Bf8{j&?VL>WGQ(Vo{-B+$#SxBlw0 z6}n57xTryMdR+3xf$A+CAZZc4UGf@K>JO|?HwVw9o_)2fOdafY4U-v+8_8~!LxFb( z{KJHYAxOex*13MX$C#2K=d-65;hX z#U4>gwZrL-Cf-1$2u@E?6F9EVSLsMxtLG|kX4tkKZAT-bm>VU-k4##4Q<~*5Y}5xJ z_Hu|`T6(kC)=q*H2?Lyr3sw)KQvrgYFRI0TjP_yQhg>I<6DhWly5rf1lerA^uTV+- z4?B_MCB)9z=aWBte}l$A_8i0aP2`iw6%hJl^8h*p4Tea!4JOgVI0B3aw)pi%tzg$axQRRU77zoX^L~Da_k3GIQGG+)*>od z@k-)LB4cHyw)6u#mK2~{h&V>hke*_3XI4B&I&!317-? z!cQv2(eqvk_ARI6QxH`<^IoC{=gtZhemI1Og?OIV@$QH&-3b>2~ze0QFeKWfsx$^J!Y2a(RI}9YqAZWI6l@D@idGP@HK$smt-4t`Wx!gshN8!p?xe znq*wHaEp!C#HG#fQ)k*&Q~SnRgHCO--@v=}OHR{FyON zVz@_zLWhHM>roFCuZ8~SmgjgkA%317hP1@|RbVwOyDC~(XR{Toxd%C6YaFBKm-&sU zKYrYj8%va0RJC`Pyn$IC{7@+FL%63^^5WDgmzT%J`p!k;O?&lh5H}co=l3N~B1%s&!BA>BnSHP$Be3m94+>|~L$BqaClJM@-*Q0JN82;Rj=?>21Kca2O2f6lR` zH(R2~aLKXc(urZzg|gK_gAu^RbtgT*GC%VfiFVi6$pxI_&157nE2k6C)<-(s1PqosJy)a30| zn<78#)KCe|W>pk~+g-PlCFmG}Bo4qed*vCiDlr$#sPNt+eYqeVaqJFMRu-cTZ`Xcu zdCfq5k2Q-E(X%v3Vu5L*r)|ORSWP-HF-Iw!Ev^?(S9smNwbo%5eD68PqZt}G$6H)b z|1n4F#|`BLbWJp=2(#*BTPoM0@BF#`uI-)F+PP{0y@GqE*pXk3dpa1KOksNCYa5rJ znp+K?7?L`_`>I*%uy;%DLe8C6cMw;mfrIm`{*Gn#d)!#1L0U=6M@GW)PLrxP`VU^H zGK*yJj3pB^;n_yXmXpYm3;3d*!L2oqKsa$V{Gl9^SSbF^_q;Wzj?YicjE6+sd zDkzG+C3=ZCRckMT&dusR;!`lY!=IAskkrRl8q3g~MbDhWcxlVL!521@|JX|ZZJj^H z=vlwQKQ88f%tUJ24n6!7dcof*R_S8KM)b4Tm|WMiaf6^~?-V2CO8?w2VW6r&f33Rj ze(k56QMbdWl_}*FAbEY0EDv>asAr*X`_jsOoGBaI#dF%u$NrKh zg0Xoqe&em4bipZnzQ_uVdA;(%?$}p}&;Mnk(+qjE3d!4EB(Z_NS}6rXzHS$BZBB2T*@ zyxTAGP1r39e%FunuT?Vwk0Lh#V?j{wtG@O%15E0nJ@%o|16Ct2$*(+>c&3nKz}bFy zVvn)-5qSOl=XkIg*`%Z(b3)F<;>R@JRT)~d7(t1Gb`Hg*rl(<7CIQaLXX#3bo6z=P zbhjU+;WfI{wY=LluV)78*560hLXlDSEQFcupH++!pPPIqV zppfSoQA^Flh58tt&w8fZPmso}Eoqtc!<+uLcUnW>$?y%(L7VZ)iuqYgnql$%bYssH z{1zW@-goRCmZYgBKfu|!hz5TPZp=*unB~HvLBTQd#JlgA5Vmo<)Nxf-ECUQya|!2j zur>(jbc>dmq;MIzw$t<1myRm_I->tg;Wo*|XD5Wf;|u9IZHZQyiM+u<>N_HcZVvf# zSs}gJwu8A>TRcGsz(37fdu;~z0+kLIN`tn0kiD92q*G?;9Ecr;NJT&jdP;;&9K4cu z(>1!@x$Q+ubIJQybs_+&UbRpG;fRusG-D_D&Qc$|2P+DI2T3*=FQzM%SM=?Fk(vw0 zvKXk8e47y!=lMRrpKGCxFAisnfU2$^4By{Ka;f!ve{6I;?d6TS>H_5w7z_kNZ`m@- z%$}tZ@93PIYj#hg!zOb+3KC<)_UNn>Z1O7?yl_eyhlXAJtzgdCe`CP#kdydTdo*=*Mre{Cd=3w#b)*%q_h*T14-n1TIk4ER+1 zbQX=a=iT7zOE$9X5(sc{c*18~wB=d^GRcG_GBk8@HzCJ7zrqHdC6tN}-J`%$g#j&j zb#bWj;yGEvHABoWfYlmr(Ag9@k{7#r%ZNT2UpG2+-GHB%+N3($xznO))Zv;X2q&1xMTD zw+=5}DRj~L@!Gd3{TRhJ&yvEmTcPSY?rSpRa8PCEUUf+$H+gtI?yrKzy-n#x{`WGU zL)vMQznwex_!R`dTQ*Zryc!oT*)~*vIuL98@VB-$Aj}Hq#(aA-r52KAf$6)@2g39@ zn&#&ozSA+~BPZQ;1ux29f}S#qWn4EF?IpGZ z)y>~`bHd$?Aw@(C$xw8m5aFu3n|DN)#|q_KRUSl~POBoy;Mt&P zXnfdR=Dj{=dsN~0*T%p6$D-Da;gHw%+h)7X3!+>-t6QY$uqD@olKo!>!|ev-zgy&4 zGO(?Nr1*D<-C$o;8%Z6&GoY1eRp)XI!`}WY9LP_qG`^=%MLVJu?14qu1;$`)Fz?j# zRaf!Sh(f!ek52v*_Szrz|2s+wJq+)BZ)I5Kxc1jGp?pt1rn^ZdwjAm)bpOS&?e}uy z$#Bb!BYvG;X`XrJUJ*Lh0)gD_bJL{uc#2uDrn7tSD3gCb^=8P*>QJzs9S+)nto1l}Jh z``FoB>G#cP4BpkY61I+ryJ1 zk1WfUtIWH;WoU2paoI^e#l8)4)%%6qHc3svLhP0kM444RU6=kV&^+j0TX#52BB=IA zc@Gcgfei0|B_u4Wj#Zmj0A#FThZiCZQydS7+@kSGg`0Vq)?0h)*2lh2p0Jft;NGG@ z3_KJ&M+E;5h|P0@(>IF{kdp$UI$el@M`=G%cE+b6qkKCEykLToTq_E21Ew$~-n-47 zWNa!grSJ6VwX1pJ2C|6O#ix!c<644~e+TLw@wz1a{o{Vc@=|7hu=HbM^ka{A;ofYU zD>iSRL{M?zLpBJ<{Sb|ofEb&)=a&m5rzpF#&H(18XBkeT)7k=j_s&h`95mcHEx+eV z_}CdL`L%U!$c8jQpu&*J*DC|c?$K^$%fG=sGtT?^?r?V7xjralIr5tU4*qDgO}O`} z2hMQfj+X_TSyo(c0CGdG-hJf?YkmHhc)9Q)9-HcZ>3%RA%%r?@vG``Kan;))#k1~e z%F2!{?T>R>zIxD&b%}(r?2^)K~NZhFJjf9D)6YG+W`0}Tnh+0mr|-CsMpbLRle#q zoo>3OATo_XYd!zuLivCg_V z+0GLAI*4AaITH5i9v>Uqs`H@5e8W@m|98pAie1;!+2$E<0 zHoj$`O&iP)_tJQ8w9}`?iU2}g15=ZFzX)HS)2Jgk@X`H9EZC1z1(PF`37_za)IlN!}B=fXEUOcc*cYJ^HQ}u$oR4;>2{{~w& zZNMcM(%W7(zt6!&{>p@Jbt%ek-&M$e-zMeJOB9Rk|1F$~tnuvs~X_I6_- z+orpJkjajUVABPsgtTu2qJT9(>f3(}wY=C&9TqkSG6J!YM)a{I0^>?8l{`(?br zVq5HMzY04|#9?Rycg|y~JJ3NF2Cw!p^H01U6`6nmmIj=j_&ui|5ttTbGdp9H z-D#pM<%-O*{@h0qhrjZvOYqwoJ?CPR zK}KgHCX4U{4kb7euu9)Bpns~y;ZqDPPa1`)4p4Da%VH@>IhqNJK%D6?jy7pMQRBStnH6@*7fHb5V_qgdYhHYN+K9TYs8;yTTe%M_Y!p?w5_!+SC zu<~Axn76Cr+R+bt9+%_p0KtzG!1vaTzQEv1#)bM?e_Yl|%M1G+(KSO?Y=uOYehGah zGSuGM_&l7HEb)yVk%Gp^qYMm@<=kkKE+5UGAC*buuWxo6d#Tmd)>-}Ltf~Z}jr!v#)Dj3p=9=K1!o8Iq9OrupsH$}i6&Ki11yfmvTe zSaMW{J|Zj9E;Mvm_loS&{H%Tgwyd_=aZIwKRm3bG((i?jb9(&vq0MXRPY`a?Y@N7U z2-g}u6-y5EfvVet3gN8S#)cBZ*)~g9F*(r|*p*dtuKeI2oLAf!JdYm-KeUxr;#!0= zi{Q{tV&PC9;4dybEYS>YAuXXi)~3iI3+-k}Sk=+oIa>M-)*a3IiL+AER03bW*c)#V zwfqs$t#0#FiY_ti@}hIFvF+749)cZVt{ygmB9=~CJ#s%x3zYIE?ch-+??n2ZU4Nc(=b?$?oE0+CIY-0>8}6r4yUH{bV_tO zbbV}GkiRs^b>p~~<-*XkKp#p|^HKwT@OrW2b3h54A;nW9uryOA{+%nSmEUB0RiW$7 zyNiEQ`~(udKYX02!$gX22~XTz8O?cnic&1zE>3rU>Z*PQyR%!xHGAMfvmq#|Bqn+p z)C67NaUw)+s5(#j&ne)+&hg59KKqo*ufVcjpg{_KlX9I?L?WYnQNb~!ZA$gEfWzRx z&Z_oZ;{m}taOg_(*X7G@;XI7d)@MddudZ`D!Ra}RzsDp7DwPl-bMHbR-k~*9JSLe6 zNYUlZex9fpb;gnYMRCJ}r$GklxWiE`^4!13%!yWoJsa%X`xW1oMpbUu^#++g;5H~3@OoK_F^ zGyT9SfD6(7H%isz-Nx7C10OWm#9^a(I_O|NRI;C}3O0QYFM50d48cW*%DTs*r^tRw zzdmodC9B3;z$NK+mp8ilEu`tCKUWS1$iWcl4rw(P7$&uy1rIcq>Sj=LtD1|FB-l1 z-p>UtIpyd2v$U_dhbppUHU0sZpJ{IX(q<%P8+@@bA9r%P5d?2%?o?I+i(3K_C0yhG zpoyJ@(1cuGPvPtav(z--j_gf;3SX!wr`xcDo%J}RF#ZxtQ z&#`IX_^C(CGOc!M8dx*fzxxMFus&fKF9+2wP}(d`@tU}#U#KXCbmeeL(Ed-tMxJ>p7gY7NU;-$0c5 z*tH7hUR>w$m;_GYzX10GkNf4zosn||q+QtyN|T>cZX+gRK~en(nVI*}Sv`>{28NP}fC{|@JbG-`lBj*h6Hs8kR`X)-%+|FsMj z$I1YC=_fIcKMeEnr6bFZ!=dJ1Ja|CL#2wo2yDHzE)6gsCX$IjkqXnphQHp{OK6iet zy{1pi=HKqR3HXmrHz8N}U?M7GtL zHay$213MfPR5H}68^D&lnoAixAGCKk2&B?b)p89C9nDhYobzPbM5Rzwk%OLs5l6mQ z+P;mf>JCTTP&`srD$)jGb;0s}$tfiUl1~mz6V0z33O#knVQkJgWEof}$%?s;M`_sXa%7Xx7B(8>?pU87IMVO-BlMCrK4jHGv}32_g%6;U zztAJIL3tDKAc=(I;tr;yiAHrm5}X$wU~(cbgwpY$kFUG}uWA$ya5QohLe34QH*dYX zpvh>k2#Qj5UOh79{dT*3%|=(Eo{+9$l7;H%k5cg40)Nzv5wAQ-{7<*TMv04FhK#Py z_#I$fQGS_n_5Q8hH>Gu{o&q!-OU;pqx{1f$SUA+EbU#?MNTDMTmp=I6;3|JgaJI+} zW3vijS6j1aT}V4!+q-U^7n4CQn@y}xTnN%bxUaj+l;?GYj_7F8g}=}2#{k-J4evI; zO8rV?Ki0j%;Et1k&%nXqV{eGJ^jX)IqT5>ivC&%fe?CGV7cVD}TJOAF@;mp_&`qJg zi}ve1@`_LZ$Kk6#X60;>nO?L9GnrML0qsZftl5F2@hbbOQpfa)t-$R-V(GxM@mxuWWsiec&yxU`K0)^EAuywkPywsem|bM>u! z#Hrn;?aZv!RgKG)%oK;X#iUxCDgE@@`6#?I{&s1ytNd42!I)7zqtsE2?H;f`87=U? zEw$adR}u3dpm|$c+5BcT`6GPYQukcna~elt*+Wl}d9Os)?zT?tW*MlVRy`wHHZILt z6^|aEA06H)ReAL+&_c;SY14u@W-UN_G^{)E+UDlVn#|uTc{O=FH%JQ~oW8aFU~38x zy-r<9X{+J1Z=!>OV#Fr(U;V}2l?n>KA(ec?hnQ-kT2rX_qVMo zwhT27ZCI8&NnCs7G#JFrS46E=y}P-G?ZE1sIIJQyJsv183!=V=Nk=^fea<>9Dkk&XS%0toU%s#g<*<;Mb79_uJCwzrydMgvp}|j zqn3hnWF$?nApE9@UFK0aW#EI*r7*B4WKV54_r>hL&C%-9*HkY(yFZxvmh+G95!i19 zU+51>E4{pyI0IC31HnG34RF|)u=>4OVnX_g-uNqR#i-@xf@|Iy!bfvB(kF`T@D2>+ zu~mMsS;tTDyI#?8Rx{}{ex7*e?3}_6_@p@7C7r+EHknKB^{moHGTvCjRMxCv_*zu@ z&U&(6Z_BWlfs_*RJ#IA8;+wc()5%}DWU6#DqD(B<$YW-ImD(6xH*8I;(6|TuTLl!- zFnUKQ?Rm!)9Vt&i+&_NWU|wWOg$`^{-Tw58Nxji>*mvqx~-pLSWhm-+nxVPw0c}LWHRg*5xLc%W-+r;~Rz8&zntk`+tPzD4=kzy`T zrlhz%F;A!r{l_zp-xYL8X3d_($B_yuon1t^q^V%sY@n6h*1 zE0l8fMAH^S-5*dj?d_qeJ(Ut-Is9>gF--$ETKKSlkxSTaB)0DYJBuN_n-{oyGcX2- zym>MXWD!GACMf#*x1_^~iZKtd_)vc3tVz||JXRS$w_x(UhI>3;}`e=LfHJq+SJP`urVaO{w zq7nyvmo*k%lgwH9n9m5Z3k0K`yi+1Tu2z1{uQpZkV1^(E5Hx>QTtD;Rb%OOfMp;o( z4-#B#GONA@XkU3|@Kw`{9F(BpAkk2QIT$2=uRuJ#C2rsLNAp~vlsA6vi3g(ZV$Q%j z5oIcTuNX$&EKB*fZNqBG9=TAiA~t-h?YLZ-s%!e|Ajd4Bi=`|NQ0ymZ$W;F}JGA2J zS=z}HlfbMng=T|wR>&s49x-A41gjZ?(jvzASp2k$*UP#hbA{T4it$ ztih~&k*Pmcvpgf<@6^N@E3Zz>fF=j4PJU>H**h!Io2x|z>U~2f28cNi?swDtw~+kx zkr4IFkHw{zzDoz7dyu+oyx52jkhBFS)roeGs3L^K%BF!n6YZ@DfLhU$!;59XU&zq~ zb(+Q%;-q}FGp;rrsfo)q$FkrjftSf9NEi|pn`yc34f=rn(8B@-c;Qo|f zgr2jVyy{;riOygYKe&6puGoHx9nUrpeYxdAf~jp{iAT|@zw>1Fy*C6P&7zn98w0k` zU9DdFqB0Hq5BsYqWs{u!>im8-4q=ecJF?H8?;I)jnIsw@`E__*&LvEz@ZV?H6lZIO zX?hjaB}x;+mj(;9+>k&M=6qMs5Inut$6HEzV*xJfW2;FMjqOl#$Q~Leu@uDC4Axbo z(xp&CGdXIh(QHP1(;IRhqRCgMq~8-2F?A=I!&6h7!$6q^3#;lAGmv(bsK>Kj6lE(D z+8eyU_E>ZWe+gBrn&uh)!-^>)*O+aY|u%N%HH1#~>G=1nNhA<>VjMk?w70eq*na=<0( zl{ce;V<6}`Vpbp^!J>KKqTF*H19{n=HRLmjbXt{#(UQIA@J0ODmOPqcvaeu#2>3S{2x@So8WOHZeLa@_ujalNVdwP^NiyV_82nErK<$_6k0$+xfX zDBgrNQ^AAp^IKkt>QzDr7~;@n6fB)!++OLR?munRJP$-NQLYPn1(_%Y2S}v<=Do*= z6Q=dyA!GSYJ+4<6^;qhYkcI}(yESwo^R)Yxw+v$4c`&V|fof)JUDtSJey6vG&Qat5 z%xBteo&Tj(*Xp)~UB8tk?uF;!Qzd-TwP`7V!^kGz2*Iko`K3~PSfql5r*z*LTg_BJ zw>8}?C6IjIq~F*MFQKAt&wJnc+&iqF1w*7~)m)8f_NY7jMSU@5HzNDC9~QRXBDvyx z^=ErFG#rJ1g!XjIQI=I-%b>x;SxhpHq39()LDQT~$Nw8082?;U-|V{JV2Wpr4$?aZ zlg0yNq@{6ty&x-hLl3?flbnO6?H$i_Cay#*;pc<>mC2ghW7q2}9HM41K=~KnG z`iL>|zA_&TcZ#HOXgibVkK;_RJq#@-(Ho(e$ORHe&~@Wrfo_^`wU>Csb?oL{ffE5$ zjQTC$w$((jW(u`{Sfn>jDa79%{c(^6G6n@(=9MeTKrTiN0DbiBeyQi}Z86UQ8V2LK z?mWDY_l05hv_r6^wfQ`eu~oz-9S!Vjj{VGUoQEnO3|CH#&18Y-={7t#^rBzdg&JJU zGm3Ju2n{M{%9Bq1{3gXh?!^V993KWa!g=XSMqo(7!JsVS=vbEe37Aj3PQk1g<5T27 ze|I3Zn5muON#*^+9|Uz2F(AS?)u}0F!KnUi0*02uSC(|Ts8H?W z5WeQUyim2jvq3TH>=ytqFznNxL{}wj5uEB;$10w1XdQ2037aGumME_nkH*EPaY?ie z_Z+{MzmQ7a1hUKL9(P>|Ha4)(=_x~ZNBMcuMeoj)CNDJed8yi!mwO*$c8^tz!m{~$&A@`y28 zLacAe?Lx{o_e~|K4Rl}FiSS5{NYVSBU;aG%AIND#nDKAlH8RF=tfpy;BpMts_oB=0 z<;#o2pJIvr1EZU2f-}Z-XMd4KzH2|5zn^t(ht`HOZ+jcQ`Qo+Y4HbTP`TP&Naynu9 z4$pm=mT{){c?3eH`Ok|0G>g35EPAliWB(vyLt)_3z*Eji#Qa$+UM`~!HVJC#s=2Z2 z+!L@N=iHAUI(Dg}!f}C)if~t`J^N!3h-c!6y_1N#isSfi6pBbv zuo(3+uu->;MD2PlE9c~V9{4(&@N0`gS1i3`w5<^e>|nM-{6CdTx{~Mb=!t`^54N2% z-}17?kuYSxMdqK>uS7u8WN#XR6S|}z+tw#LP|Jn~Y~kBozIuV2Cxz961&M-*r%`!* zj)YJ)5e8E@Zph2%YCCj$G6R6702Rj2sJ;S`7_wr+s>H{EG2>1SR9(_{gs))>QhY)j zb}JG&K$Rw}gjV1vx`LL>y+BOB1atNIUA|ys`--(jB(vB9-3w5bXJ zn1HM(9>zDzTf#({m73m?*=2w5>VPqonfuo+9AR#1^GfdPEWHHN6+B6*+o%M<)rdv^ zx{<4}yWdp!viq>zEj2E&D?o9#*mVzOE;o_e-xLv zc!VreV|)+kx3p2eQ#O|`K1n5us;B?4_~Yavw_v@sJx!;CsCyAnnc*O?zbomgn5@0RnTFj<)vqv=xp0>%@y~}&uG*VCH*FDanF-l zqZHEGv<&<${QMSefg{hzJG5-_AVl^uZ8{Lcm9fbJc-dL61r5Wa^Sjo!jWY8l-^9t~>E?Z@tUIrAPQ3^`nv2 z44DjEWOa965o3?&GSDX;_nZFd;rF^@2A(iWq=q}{xc+I(aN#jbk*$n3S) zx!52cXd%u9T(h~i=DE16be7^V2cyqB{MhGr==Dm<{i^?$dX73AlYACQ;Y&w3B#Gyg*5y`dCzsr5~_e|e*qx-mBP~M-ZH3Dhp zRA(1)e$(XmcIMB=X*R};^0Mx`$vE#Tes=eP4dJD*2P4nqXPFS&_RBd4ny^YNhq;Y` z4eF`#)KHH9O%Z0^yF*5UFTX{rRj+B&v($7WK7isXvYUqzp%HOQ zG2>y<>lGt+nME|wbsaENG5(-$Djmq-SL`g~#?xTNh~7BL|RqmBQY&=b_?6C31baXlg{8 z*%Kj7#G34KG|>t(1hGOel1pS+l!=3cSl~pe;}{eW8V^v>gRoSbEx|})zfg0R=4er< z2FhaJ6M|qm`XK3tR#*upXwayK20V6VaW{^@oJ@Obf`Iz!@g)r%*j!*#gDHGX^E`wv zqt*FHqlqx`igok$LCfEKssLtqIM=H0xiZZvd^U35zrxUM~No1K#gjb&NX+*_o9L z#8~wXQEo6fDLMivV2bnX6pEOTQz&pz$IzN~Jrb=%q%S3&owh&s-^NA9iY>~^O-yLz&6%r zvc|Q@ws)bIJf9eY-5|Ds?zWP;q|5+2PYLDq$+Sg&1<^%bPJX3Lh?`lSqSgbistDXT z9P+5h`*JR&UAo1ZKp}5Xas~Sw)Zp`R?dvXA|Gj_+ybOKw*GbGLxYUOM8C`vnM^L5? zrpfABDXB9n;~tyhLxlUZybF*b(z)YPO?wscje4#dc{A^&C#WlIM~kopK>qO?v~$&Ua1z@Numkj7<5~#*Ob)ssd>(!LlVK+&|3t zC?&JRTa%+KZB6A$ByS{|6Xw$2_Z^d&aBuG0f^Xxj_^q&3{BhsH_5PQbc5%KX2j zT~bKWx4^%+h59P%K^;GDLKFf0MmE(rcGH!P`yjo_^Nbvrdc_ z{w}Ykn$@$2?!&P^xtuJWK>FMqU}^cVo(lzxjQIQ;!A^ymtu+47zO#|KS#SNCB^fg< zveG;Wcu%xzcz(ab{WrsCmsMiCQN~_zQt9wFHk*w`kA)z0$j;&L`PUa`eiD8+F^~PC zI}b6$F%61~LX9)Cz2~n2t@!lU_53B6q-~4h-B~-h)t)mIev(tQr6qlBC!880Y zBu=ceIpv&tzw!Wve9{)KFKYMdal^xfp9pF1K+I%wB~{xGP2*j0%DLA!(QRS3Bf8rA z_HO@!kXy^Rt%g$Kkn~xA~nR(V1RG$x?)v zD}#dSY=&idD9s^Jsim>avR~B)eMYJYT`IcCj2!mHGZN#a73bUvH&5!tQc3lyHSt#@ zTfYzwtru?84-gjIK>CZ?>IGb3NFOg1<#Lou;Y@KuU!jElf;^s&I2;SvG`9-YR)1Fk zTJNba>NgX(Rb>gtsxnfEEQf=t8`u&$0#O=#b>tc7pUozbzLm#^BPQ|#z@amtXE%

JZHSEWF%mxu))Yf9kA02lGb!_^G+7qJ%Kt#id8xok8KIp7ia9J3@g{wo z{z2R{idfwbE9zKE_5-)9(Z~JjzDNs;c zRZOk%y{{~JzgS7oQZN0$#;GBgU#|=Dv>PYpyQu#J4nmu=El`ni)L6N^?ZG&vw6=V* zb95#fkr++>Z42SQ|HwZ4_cOIO18B#WlD}Yw_V1}*yDgy=#M`em?bCuz!4v&m4AOA+ zQ(h9LoBJbx4DayJzRY+lc{Ilh<9HqwRZhYX6Pc2ym%sJZ)@Y;{0b0=?HT%Gm-wukt zrRpRWuvFJnN0j_vqJ&h6p)Khfl^b;0zOK!r-8t`;q5>qlk{KNAjB3%hK6=VFs_`s6 zd+UR5-#1y5LNSD$g>A*slH%c(-C_sOJ8Hd3eMVM(x8=Z)efmI^5d~Kp_)BEP z!6jUdUR|ws@7&lGWvZ)c&WA=AKDFO=$&E5lZcJFc(OtpdsQruCDcb6a@ryqQ&ZRR;`Zo7W@EHB`!u zN-WfSNykU>6^_=diM)6YU{61Oj!asELotc2{QHN)2u<5Bf>_}mwrqpx|ACZqP!J%? zR7e>PgKd;$6R=BbeuW>*%rn-D<%{M=*^9va9EL&a3-#AUqrFZwEhSTe8xIR$?>R)F zD!jovMjKTfZ1D9&Ej^rF;EZOxc^T-^ss$Ouq4MP(O$ovvf}^Csj%ca&~y3 z&f0t;+alOxaY-$}#TyUv9wMR>$J6vPLV6%>0)5z#OvVJcd`D!}X~Un}3fc)lv9;ay zsn;mZK*iG`cf@0YTpdJrfo=LMwP1cpdy@N`8`2*Y zrKmJZhgE9{G(2m3Uy~fFr1IO+;xSQD?_PTEHmaOC4~mj|Z$S%{(OiSckbsHe@=2zn zFMoD?1S}RT$(a0*VIgO+=XvO#38e5_<3oFZR@^~XO@@S#T2|-x3bVa8DV~mv( zdz1fxPPB>`GDyF{k+j@F*FqKzqa)wV+<_Zh|Gp4D=jlC#X+JR*k6zQKLnOBkhAw{z z254Ayd7c}-*_Y69snffqe7U$Gju+<idkMl*F`+h zL?|a6B#0x$KXqRj%zT6Q$YMbzGb>bG#tTO?*i0%o`w@G^vl0c5ACCh=p~DXY;7|8) zK^?$yHi%E--w+5ypVDOH6-jwlub4zd>=w=9aaNpWd~JxMa$~6K!5|MV$X6qbHb!A% zH9#+!PBG`w8%I-838fMlv9|d1RNZ-CID^!g1L&=ZI_%+vnt-}dFU=P_$zO^C-C#5o zyJqzkEs_5i08er(?-WcD&=(Tw)|3!Hjm;OqWVe0C1=MrZ78$~D+M~VVez4yDk0ypB zMT{elMW|`kCK$YLJ?yQWDFzZqC;hCk=%JeE4w1iRFiHW`%LO)am8zlbFH#0yLh1hC ziDqy_9tZu??=FyAjH43RIaU8k=B3m$oV>7zv7 zGn3O?^y2FlcViqesE1k^0|u%jANFU;^Z$rw`|S5!6&^Yasm(a68j2x?sJi@8~5+=-Iu`ck1KDPR0RyR{Mi+Si(`I*<@;J7e<@6x^-2;|JE~qMVQR%bED4nV%tcuhdHv}(mEyDlTF-*s4yUFzw$1gh^D!lcmE(D zmQwHC_*#>_dxgg>O4;ljINX}>>50D^W=Kd_gjNc%F=xtmKb*LyI|T?iFT7}ngffAw zVx5)!WXHgfZurtDS@oKFRZ~o%?sM>n-K8L~m&^-&=6%tb(nN z`v6Mlsj!SVknz>`)wX!NH%JHSm-J_{L-c?E;Ew#me1zm4cr;lGyS|YfpT~LUbqOT5 zrl}I0?I&JV@5fzGEbfkIhvK%Kr6*rxzdVP~4Dzc#o^QOP*q5F@SuQM(WtYV5T!`qV z^5j+cU)*exK3=Z(4yox8eL)|rc_GtwuRam$#EFkuo^E+DIAq@c8G4JA7&r7uI?7+$ zy7j5PTTuvIIBRzdU2^MYDQh{rIdzx)0kd1(uKemiaPMMA=_CW3n4|F->?&)1Zf7h! zgT7IAsgA_<0_IMbw<<0BV}dkYDi=nYhn?_~jNM=T>D>}qwXq1s5&0jkxcVe+89k4E z<-wY46H)Cj_}fWCAyTCMc=C76aH9ilcp>xNM<<_PxSWvWxLAF`9^oKm`xh!VAK5ql z5Gk5p>jlE0v>h|;;z&OF+$_vhOA$825g?|O(|WF?+;{UJ*(AKt&+JU3tu)^$HIgq? zW=L&j{8$zwQ;IBC!HiL^!6BhV2;?C;*@T;~?Vt!5O{U28z{rliE5KDQE5+l1ha>|x zexjM=7}5u52B@P1<9+xn2~hVRi1jCMiaq4{&l0Sd-An-Ld?V^8>6KU|SuwRG@d0 zk@_d$1Df6NIn&BU9TIvBz*7^_u&_~lI9>8<)?er|wbD}8i6X5Ge#_C=^9>O|h9P_@ z&cHxDN}r8Al}2IZo5vx6P}&qWZtITYQ4XgQ&`ya|cjV@(F2uSULmedS=W+g2k^dz76KCJ*8RaK~ zmk844e%f;W|B-a=;Y|Pk8=oelL=M$3r^vB`bA~yT^J$JbCLtoHne+KjDy=z7YlfT& z2_cd5sF+O7r%Z-9GpF$Ry}#G*y7t$uUAwOBdhfmG>wez%{oo07DX1vZh3}W!T+E); z_|c+oB)r^js`N9?q1tuX;$&@K!6xC$SmMkANBtM;d<-Yzg1cd&q$<5aX~zu&xV=`1 z%2B21w+)@eneZpbk@wU1tx4`lF$s%t5k=T@LXPCrx+2ft3Xk{(;$jay)~O49(v7`}%4j&WlR)U0RkD%Gnd zKW|8!y~mNh{j-RfR3k#awDKs~NhdThA=rEUDjw#Y>Y#C#v}6)tc5PTLE}nrggwZDF z_3OgIFV(%1Y`aftMLpnv7Wzb=jVXM;n4>P}STYzEbJtOSNk9;^iKsCY#5ikv}f$a^^^SkvE;5TO?M`)ZeeJ&B5O~U9(|x+@`!& z6+VLIIxCtI5q|Gy=)?5oZf!Sm&63$){|56~86j-ghqA4&xot7_zcbDt1&iG83lFTa zHBs>Q8d?{FD31bd#D|i!S<$gEQWArIYgc_m^EV9?`UI(94RhSW^+-L|k0M!M5vZDA z&j(^v;i${CcF}l9I2~^HyzX_Ksp z;)##5rYc)u&qY-)f|ci78T9yNkVQdorK$njZk=%f*9ghm+n1fgM3YC!sn$QA{}VVq z!vN$bX*l=%YmLL}muK`s!OjXVIFd_+xX8IbfZjId!W$*C7=J5HB!vjfzV${POXw!A z(K1pD&w^!b8zb=C%SMGJb-?Z6J3cTdOEc|zEIW>*82i30v>cfF5A;lb=&CQf)9(Cu zJMro}aSPPUTRdhlLA&nq+~$Srer;-}fqiUCqKhl_b>VMK5X04f*=So(aC)wPmA zS9LL`N8VtzaY^du)1C|Bl(qX;5|6J`926Re<-%N;CtZI?ubG7^!vIxd=yO#o$3fPN z+~zwYg8FK}+89*QUyH_B7EAXxGs+~z#fT1#UdRk?4s z0NYrQo@{>?ri_p#pI$n+!?z!WHhcQjtkJ>E@5=!Edgub%bSzvxiU(t*jB4(Icrbp#|vl7Rfbu91NFi*WSQ9e!Ve$5;LKl7k3Ydsc=i+* zVt5s3Za(rB)@SBTe!=-|SuY~VqBd2oxiJsCHfLY)Zm&2A-Iu!>SphO90hcOY@*Idi zf_DHHGC0%F5jIZ4SZpfy6@Yn)Hpn|w3D|iwCfcrWdcx0h&ICqO+M!k>xhNC`kq4ay)?c;yTR0Lv``>nTf!I67w^8^m2gFYKja&)$jz z>|z4ZIg$|}v?SwzP@erfD)iI}6sVz<+w(4cxxEC{*9{R760Ca6AQwLW2H~j!bEeYt z83t4bW!u2mI#=A?cJ8LDaS*_-1^n10dQ8!pB4nEJSv4$Sn2gPUxt(UTLZkLaK_WHu!jaYO zD3kY<>${H@7^$1r_}B)n6p2QDMj5-vT8iC6%(OHQ zHt^ZA512j{J+ickjWQ7i?AUH&0h|w7>_p?pG_yN}JICedVfKzP4#cX2s*Pw6z1RaV zFXNv9qhxl;trO3*HsGLhtlr{PG3i>4{qKS zPrPy1ckkg*`pJ`be1g*@Mz_JV%P^sg>JY;IYn)F3@r3AZ+BM)mVsv zXHBr>i#_t-f8zW5d0Jj{y_|!51?vfoEqhIQgEmuc*qja?t#o+9D3JTwBJ4~W3paUi z6>oWu7MX>$e`s6G3H8Iij)_QsL$Ni7pb&w95iqVPM8D_ zReDZXI>nVhODt!K6Z?CZAdOWic4E;>L`MSZl>2Y3SpYYR#J_w$m@6aKQi|`+l^dgj zTPA6}>IUZYZlAEb1dXHN_Z)5NAD$3p;s48T$1W{;@J7-DOuM zn$8RlCS8oAd{-e2r(WcN4GhB51PQkqH-Bk$0K?*>9iBWu~}H*&rxt!Fw}e{wEqLK)L!m)iw116yB|&a5MA;XJ-YgcUmh-PGw< zS*~dYYUzZp3#aw&{hbceJqDs(rl8%^`!pe?N1}w{I)%gYrpsBXlt-Wt%JFGtUDosK z4vTa-!76{x{N`}WMQCOs6M|tt>ShQ>Qt@{qErZ@RdZBnq%sI#7&KVq%J9~(O#4jZj zMzin`;a?GVge|_gLm87#P3|bLOeFp>WEqf>Pgxl9{&n-&u(y4)2O}P}JbEnk;jtTD z0+ycicJgv5#K~YE0M(Y*zRss28U-!2q_xKp!*QUO?B5FnEzKQz91}Khufz=GH|#&B zNLA^BJdQQ`DvT^8)%7P!%bP)PwH?Dy8l5(Tr{dkV$PI@IKCp#gK+jXpd2;t%RiPUu zumCRVZ29glPy6v<@m^0DzwAg{VFb0~?fdk$&B8|^-3m!_L5z6JDWi?I{BB!yPUIDe zbS}$^!wXMuF(D)f5i{}Nj)r;rT5{wN{nZ7pKHuGc83e8#oATT{>_Y!wHVX4(?~Nh_ zif<`lWn|`PdagMh{^wz$!NrR)V0tz07O~S#0SHq3+Bb45tjjvycp*?26Q;KaDP3%- z5Q>+dRk+C9E+`3Y-!POzjg_?{hYznOjDD*WW<)#HY;pZrdNnYzYisRd{$+lg8`KE< z6gSxfE)liKkfG#Pz4-CY3T1fn=1&hOc;*cz=C!bfu?uD=-bD8NVC-WEh_Ik$7>fEa2D~KwVj(4_w=$pamL=iC zVa^wpHh2Lc1{qGP(|E2fH0pw#SLU1;@6m36@a&(H>xza}wcd*FTR7c!Q1=MPn(~;u zk#5o#bPbp%!Y=YaPhGGJ&PlYdc60p5j_)_^Mpk-1&mtJk8Z7Y`h;mJ)u~&O7n4)vL zQcV);wAb?~n&>DVQFN3mRpx1LBSFA%7_=oE z;r+z)+!0-+ug>Hq&D2N50jl0>`4A(-pywi^EHaFKphTN+eLQipj$6yU>XJvGjh%{I zqO-|>RwMSSbJfM}HW2s!T>N|d85Ce3(W1edt@AN5 zs0UkM7PT=9)Ur1CT4NBTkrCZ3F^trOn|a${T)XV>aJ8p;Lt zJ~P(O^zZ1xt1Jn1aEru11_{B!oZtt55Wt(=yAguA4Vcu}!CM(xM`eOl zPXzYoM-wYwI-o*=J2h73&#}*U#YiQN0xIcqYP$E{{^!nrYrG$U_@bovuHt3F5$?8; z51U8VEQ_!AkWnS4EBah~&x~l zjAtz4OA_MQg-$f9We+OpGHec~d0`+M~&xHUAMoN^|pWC%^Wd;s7RRNQ= zbzvgR19fp)}u9#TuVhx;h}64`(J zRrku5TGwrvHAkEhG)@t4Qi-N*a;}!Nhsz>A)l?UkAp?C2S zrw@w4q^QoTXu`>IQyaqcER@lWu)9`(&3$8klZ9o_HDP1Jq>mAH2Ep(@55u02v)iy+ zJQ@d2984m@sRWcgF0#pjW!X;q8UNw&N`!%(C=4560o3YQ{LSnybMz53cCTG@Mw1#B za~1x)N$8PnU$#R#rVy(jm(p@|!?$XGv!`(C%1M;ZKA|hz`(FF8CGC2h*R-A>HR()w zn$ix9rX>y$LLZs&e8%jpU$DqbzTA*I0P3-ogB&`x^U)s zU`^n9K$NT<+O0s)gJ?Kqim}a{9GPV&K4auaQUXeg6Gj!bIyO~MNjz-I?dq|Ej1SpS z?Th%DEwcLVE+$I^&w%H!@aYUxCW-#?m(FfFjZe`T0FaQza~#b8N3u|PKqk7i&hdJc zc8Ywjh*p+s9lIr-;SjgvvYGhWC*aHL`7p9}e#5}5Xed=U6y^bkce~l&AGe)tSKM7@ zblCiGaz2=px4-P5Qa|uau{tLv#8W{eCvBR6&vlHGZ(H$~jwf2b$bFndJHoe0#5MIlQ@?K zvPjC@9pr|lh9tb5cn1XD>V7nv4m6G(fgsnTm{5Q+Ta|gG=wEiz?AyvfI4C-j5@&N= z@Cs_TUHK@X+v4FH5{N6g$jC<+8wjk!1?rpcvpt&fnO}XI$PC}GW_LOJ;G3DaxDd6m zTn~Tpc*&mo;hPfWVvf^@q5Op;sN0aB#Z^r&y-wDhBy<_e)eFQz4*qr1x`DS>8s@UaXTbH8xp)os)`}S zY~?4Dk0nE3;n>5CQ}h9s`DYYCc9}pocv~l?uSPv0--bo$Fm4eYhq#VwlK6Pgu0Hy0jwW=Z(VB9`hGuGP?!2oXa)SiMSQtDy~ziU?2S1 z;{1oRM(;HZnEClM0&|_79^I1%kS;_Mm4+d`B4?n+P0f|&1m9x+vs@eUyG}L02PxkU z73~STmJt&&%$93P=wf!}gY#=aO4kfEh04JE%!muxkA9RZ;<+>5ZkzKQ>j*Q#M$00# z4ubY%CO*GBufUj&_;SWLj2eI~3SS653fx{N)DPmkmM9sH_p{krDqK4z>_*g(CAJwJ zSi6i~rs%o9Un0P^V?^J2S`0+tdi_kZ6xHuYjd5?uHn|hL^WOA3xk7^fSw`& z1qJVY@Vi8N_2)m(h3OT(*i0KYU~9zvy5j^j{15Dq^JNqp={myLFk)|PfjaZ{k@@($ zXQaV1F>}^Wtrt>%!vlJjb~yX5ccs~lEgYpGcdDH>uXKhwC-FM~#NkfRmVK{svRZr_ zUAet|d71F`+j%wqy|Ql&)$=D^Zm--Pb~c2xuRs7s{6q`J8FpG+S9bf8ToH0jRw)+M zgE)K3moVRWi!V~|c_+E`UGe)VuXC~@-=?18{r$tdgO@Z6t2aB%N9)Ui_>op$aZg;I zzI5O-!kP|3K&$|Yr}l4fvm({zuYGOvx0+YxX1|a;uQT>ZcMpQ9vwbd978mDE zT;4$WaW%ZZ0lBfp;XPm!1Z~CWW!lV)-GZ=%f`_{}$k}b@z~(zz{}E2l`|ntK zF4_iJlM_W&2+FDW2mGZcNNeKlrw_Ol))w6T0%6KxRsj9zNu!7Yl=)ao#tkS zJ%{%oo`sXzp9DPmy&k-4J1EfgH~AnsDB!?ezT^WL5$J)4k)jrDCcX=r|2(>$((iv+ zmQ(i7th8q}1R+ac0uFkNSbgfp!Vp`EN3fMP-`ngt5L}edInzXrV*8wKpFhP)CBroa znkxPSy%69bd&u;c6}0+yoRvGP{#Q$|GK`2l6`Ar%>o4}?gnnSMFtFJ$p{-w;jE^|7 zzQuH`5p|!>a%6h7u8^StKK6(|V%ITbgMfIVbK#bVxTS;U-ifODr{CUbdmVp#Z_KWL z+3j7`S^zWx-iE$8EaC}av#Pda#e8bQ^CBbJ`&>JB>_ayp*xDY9m0*gd&!$-?UCG2= z0svB)puW;44!k8n0mWs7W3{KW-En%?z#hqdhWoKAD{fcUc4R z6?3~d=8GuoM{74G+O+@Xv z^lx82Yc*14xtplmGb(Q8z@}rOPEMijwV(N5wa&=9fXyEmSO7HqVyFmhsAZ?~XfcOE zV(mZwj8n~Bx*~G>X}p~3TngaSe&33siXSh2$z=%5{0g6ce9gVPsQu!Urh_M_3<|91c5F5)anlz27IpwTx;o&VsU1=+`4t@CWD5dwDo(| zaPWaSa{T>ijhtCwDO_M4e=#B&;farBQ&yvw@MsPI3R0RptY*O#QU>PUW4swg!9;n! zlsSi9KD2s$HM0#yc%R67@sirM=N-%fcC2K*gNiZx$(MR)wZh9%Q`3Az9P2s2!Z>GDQaW)@$_=gt%Uw2PLTV9x z>()P*0z#`{hXl?TCeg<~fIzIIk8~9V%*d1Lc}9r6&kF4xNwPAtgt1L!fr7!wr}bg< z!z>X|PHEkx;4h!%;#C%cfWOm;7N$LuCq`M@_f3a9y(h-k%-6D+o)vW^@U)BPi9;zo z^VJ_(dA59pm4<#W4(cSvi|M}1P$_>ZdeN?d$rUI@4G%mSPS>?emJj~b`aD@zKZA`} z93CArx?MS~T{`$4G7H-xUup{49NG9$-%J+c6#Y}kf_gEbd?=kI8t-oSDe8&h=?Q z8EFdaOcVr2V3ZQrSSp^q>d*~iBt&N#94&+_8|9l{bPX{KwjbNW5C zjJ9T7pzJsFVVwVyTI0Whc!Y_lWF`M=>B(5K&x0>agJ%J2rbjaIvyK_7(}S{#_BQ^5 zwbLk?_JEzVH0PB$*#D=Abbsm(Kn}Zw)lQHAoi$wu!x>s^k|4rJ#d#wB1N9c2y5c++ z=y}faZA8=AXP}7Wfq2y5?r9wthN{qWi>F&cG*IKT+*v4n*>t)Gv7`AR{C3=_Xn(;6 z75DPUH4Wi=t~r}v;xUU}iKB-==GwiTPPA`&yOa@k5)VJKRNFpND-x32srdUqm3XC< zyHPShJy-Z=*1|4AuJyTK+=ku2mEU~i3ZH8=yGT=+(EV!RgSgE(?b;_QFk>54YMoY2 zi@~Ek%C!iOWW(JP5!>2Pg|Us@L+zAa<=($Y|Cy(}Ekp=x#611g?F_45+mVmARfxP- zf`zU1MAQ61`_;v2;y~4xbEx|dr0ZLb+xn>FoR{L;;)0oouZjgqRk%EI-jz}#7HfY4 zHMh8S^#%9(#${T!BlYKp7bVCy_w>*z_Vz!}l3gef{nK_W@m;1?51di;rGrZR4mu{_ zOnmhEJP16-8hxgvU_P<-B=e8tjbAl4cEUu8?@+GCTxak3`XA`e&3Aj>E+fcpl{rl) zqOM;?^t0qYrssYIh*f;eKtB0Y{~TG_&{li6lTC8q>szofbdSl`B za{r%lx?w`RKhS}7HH&xuFj}to1(iLqbd>JB|J!9^04aL;x_{UzpqZPf_lz2S!uAYs zC(S5!T-_BY873?cOzy^1dD^>NX&v^-Gf#h>;;W&_BKnWPDQG_Cl^L^p{h$b1({cI9@?(#6&E_p+cY*0gAArZ+^u_pRTf*O-aCR5eVbqhZ+Bl40J`m!> z&3oWHJON(FIMzsDf!dd?R>t;pN(^q_KwbuvU1-G-q$+M9i_;yH!3O$WJ#s% zR|SqO_sFJqhkfg==IVR+P~erC zFE*Zwjhjr<+N;QASA*Po-mqeyMUE1UuuyEjn9$d^PJ}AY1;G37pOO!+atAFW_vhFo z2I?Op{`|YI$YZ42l$z*25axQgyVq^Dby|)?#?v8FjOo>>P=tXmoBFHt`_eMj*SoE4 zL~8{=`@5Is1UbIi{0CxTYjpV>FcDSVcX5??@NNr%h^3b%ExM;irjiFKdGW}iGws_RpDEwZ+pW}v)R zzOZ9J&|87D++w6|aS!HZ3xw{%^ZeNz1G|M+OrR9N_l}`&99I->+C0CuCH~^!=l08k z^G1n8ZGOmn=rMYtcJ~I;f1oav_zBy)Enk`izr32NS%oYB8{Q!r6v7| zccP@y`Y=f^ReA5+wpo>jBcya-mfWnA7UM>yqMOB^9wx{1WU$SCe{g$Jj-f~f$!HUOgbZ%cLky;+~!WjvilBW#+7^NZKa(F2}GC+7L7ezk_b32=O-iC zT0|#<2BBZWdv!E4i$4Mr^fG=WZx>5EgD_Vj1!U+ zbxTuW!0!;D6^HPR1Dl+KQH$HW-^Q&ICxd!4Ce#*Aq`lQ(27I%Gn@%I zsM(1cY*COWtjrI6RkYMKmHUsa0GwY#p#DYILOLO=`kw6i0G#9?QZcCZAfm)1L^QQ> zx3+U3u_^c(h>;c8X=4)F+jh&pr1mHI%N0QRS%8(=rDV_8199+7-MXz}jnl!39Q*cr z1GLz4mWbE#gp_SP3eE!#9x6tmmkLW6T0S8h+;$V33)YcUwt?y&q2l;B!NlDMw^9d3h*a&(Ys=%9D-p90XiV zF-XUv4DcY?-F%skTX8+W4_mxS{>U;+DB9{PWit-~?g7XMyk-&qfu!7#;(}(6AqmDN z{E)O~vs+p4;o^G}Dwc)V%fXXsB_t zuRV|n*{gcq{$+ao<-CJ|&x5}NokUxbp03cvm~4dBC9c=Mk8qZ`(%b48y#vZeLtKZv zG7QTHW~((7`m2{NUUrE9$szv&rE2_oFC!lejZm4Z{4X^KgWobek1v6L zjySZA#X_oBV#rB5)fZQMKG60j5(pmIsmbfuE4yc!ZzW75IUFP{e%CYKD^=G-X94nI z@RIG$vP1o2+XYklt;Gm`V8S!p%uSle7z!QI2Y(_mN|Z7X&7i4t@!jg6J~cN=Wtd0z z1Li3wD1DMyz($)T@CA#oZtzEbeX!76c*Kam*U>v`o0kjjcYv-)4>)C~ut$RpQD!Zm z%baBQvdv7+Gzt(f{(gKKA3+%$&Ke=lIO_TNaQ%?aDSc6xr9M{GaOc3Yn#NgS;_H2* zxzAswD`cX@;Ak#lw0bF;YcP`E^Tw3ar8Kqv5YQwRV=6}-DWQEydSG=@e}FHWN;$g8_liRa4IpPXvZ947MwnMb0PhZ)uu4?)6#e- z@*bWe^Rqwu@I{U6YS3mw(k(UVij&Xd+NobwapFs~+y~}kL-CPS?H2daT8TqMp&<3T zK99s19&wyCR+O>133OA1ije+Ub*f-{-gVDM>`w{NK-4VuA4N3z``3*w0i}_zhKwN% zAcqQH+p7#_0^>wcY*+f7gq7R(5NyrFSxy_EXHQx?`10GXQCQiVlhnayC#DFM!#JO= z1)Qf#1ihHvPOo%H`vo;<@*;vKMP}Y8BbdTn-VGqP^EeHZi-lK^RMRDtv7jultEQ2A zGzgw)gCK)b+p2<&Xy)OsNEQ9mZ13CiMp;^ZJ@A#HJI7R?^OFQndW@RjL-*H$;_d?=xl-)We0?M&rX7^j^1$ zmuHc`s>=9fd}z=VU>ADY%inzJRKIZZr-4fVQe06sA$mtDh;!dXfq=$(0{$f}M5$=d z-deYpONvL{ZUM$U1$YDkX>ivDRu>$b!F;+}#IF=R`HOWYMZ(Jd{E^GBdD0RakOR8(wJ757=Soyr`w)J1e?^v)7 zdo`)yGMvLL@1(4vlSeR|K!cU3=Snap1wCwiQ97sKv0AR74xgUA7Z8Vy7;1K#Gm{Ry zcxHoGX(y_iP4pi2FaDJVG1PNjtK;=dqX#b`AUwxtO~zD1{qsrIj5`y!Ypq4i4-+tg zUU;CM%rrb+l{aY&-MfajDv$O?AB?>8bjA7IBYD+iPmN6uupjmQPM(+Z3V{gi90KGJ z@qfs~Ild-L_5lsxs4eLDeBnwqf1qKmJYc>`(pBkJUwC8yA5iX=_p~rLMp+hmC{y`m zR4ng9J;2G8h7Z5XhR0Z-k*uH|^^BxKj9WBQAxBOlQ43I&suJnE#$F$L{N)J=Es_W( zcBevemyQ-BEefL05$h_FT(W%kp)W;Oi*Z+@Qn^uFS$$@A3QPq4=-KpQI)^g93#QWF zXB)+^Q*_iH-p9RTnju1}D3ckLL66aah zRCtyEQvXV*dj|rHHj)5kGdl3SCWvP)8d_X4U>b^8`NC`w9u5TEwBS9S+HO0I|ADUW zn2yO#ZE13xRjnoH1J7y_(1hPYpj{Hrv1iBvCAmmiIOVAn3MjPDG4n^w!iLh@)S@2W zqY4Gl%N{>QY5p&Fe2!Th!kzz*GkkYh-_4s7L^QO=E+x%t$4@V!<9M^gOSFc*2CUB; zO`Ft4SE!X-@Yk0n(sTr0nOezsSimv~=)oY~cBLb%`J7L)bXm6s}!iPq> zjk3ga8DaExAhxMv?G2t(KmPsJ@$hwekG~%5^b!LPLS+|H8B&P4U53C(`bHc9xA)f7 zb18a1RxVgH=#YH6C{r%O<@-n~&il3LOhd2v5Whea|^c(vyV!XNZ>~^}=fIi5BY&4WNiPbNo=C_fQQb zkG`1s<8z@8NxAe>xCfRlt6})^h^lyfNCdi9BFPuETxl`@FT2@Y%F=Jg15T>;>vwd% zq+@RnBZsHDr4Gg6xv=sE&3N!s&~Uhz;t`kR1i)mopNiy?mkkIgY+?pS+lh&o9?VR38tKGPRq|);)q?|y zi6+w+{%02^mYeH%%dzxWn%v4deu!Jl57m^u)QI64s|6pY45b6!RFMgY`I>FCd@FBA z0^KO3jSH;XM7d6VO#CL+Am4kmTdj1^S01Kv1DpN)-Am&t$i5|ry$gSO>8bT!*K*%q z-dn(x0%Y(N)pVfUpBd|xId#l=>1fXH8qeTq&P zj*@q3E;zQ@+{@=YKmGujD=61nl&=00BJxe>9_O=q2Y#7SLNeO@KTx{>@31d!k!tX) zIKW75-K6X2nNW15pYi6%t3oB(1*MrQ10hd;uou8`N6H$o$Jbvr(t@9|MO$4ZZf&=15ap#TWmTWN0`9#0(7(y|SL@4t4+b@OGPC1OXk*9v9bR^so#ayzAR{Ybd zv9(GNX;f0W{%bk4;clmKCx#Ht>W|nC`=G%U`onrl?YrN73+A0q%yCwZ`)YW?xFX5z z6d`M`d-?bJBb7Jz9N0m%XV*h1Gp!Z1$g2Z0*OSw(Sz=W{8by({C1Pv3V_fZT;UZHu zzrEm~{pEhCWS7z#0}tjEIs_TKo(uUh7a(@7CLCf$2RwNCBWAn%FzU=>8h`7DA9pr^ z(J?a8ZIhKMG0f%1ca2~X=JB9Kz<~BINd-*1=ML?o7J-YPkQPRE@^+px%YYneVn&uNK#cAE45vV&^&(utj|DDb>Ms4fx%0a!lDe0`_$?4tx5;4LaNn1 z^F}}wJ_gVE4^f&UBBH~}Pc^piGgpTf>Kan2-hnT@wE7S9K_s5Kq9>4Wsk;_fTCF@} zs}5MP`X@VP+SIL(P81>R7KVEi$?Wq~vRY^&VdMa$pRc5Wc(T`BeDLuycgoXEy-J?7 zBo=|3W=m6p<0#Jy!U5sIg{)yG7x>{MiarC;kO^p{{e`yxw$HRRgEh@npotzu(>DN5 zU`{jexjiZ0H`>LrSq8l9+QI7eoSUJg5$|-CQ8avzprJpImX}59Y)s&|1PZ=sXpCROdb^3PrQdL47o8QNbx1Yed8 zUhyI3mGx2biks7Rf3Y+Q(52#$L+?RBWoEx`^u9?Ao;HO7<(m-IXV<}hMROnOe^qCx zfai9RbPuA?tvxHOm=EvTNSeADMZpeQK$LB?B`h~?-I$k}n*K8N&33zB?`V;P5FreP zmG0?jFR$FMRo&eFs&U4wP@o{U&C(xWge>bDP?~7%%Z4l>ihb^WfehS)f&>~81PTL? z0Ze-4>4c1Re}=VF9Tu50L`GD<_K!3+l^CgXHEIpF+!kKo@i4S4FM()(&R@kXu!IT) zYdCpUg~0@!B%JmBvip5c@<(jxNIy%31I0!r5JqqUAf6h2XAp1LE{+GXcFJv)P*KKM z)Ks{6N(7lt`N$$(CUgVqDO{+})fzq|1Mg8u3b+`BHo{khl6+%&%Dh2OL0YtRuLl`P zAEsm$P==!77%Y$%Z7q1B^-~t_FB`8TC!^I9Bly7UHUVgJ-`_91Fia`o{)I4z6$+%S zOUh$dcZP5(tb`0V=Ph#nZvGfhJ)PZMx92+Wsm z7E(?YoPAYsu=YNMJ0TIY>xw_M1*_A42uT!j%0QGiOopp)D|-fR${96q5|6m}QSSEw z?A)cRny69#)B07*cnr7A-FWoZD(e*AYzj6vc?hQo^EZvKPL`0pS?F`Ddg67}N&r2o z7WKpe`Y&Wsj4vNbt#l9tdN{V0hss`>!PdkDTH>OQ5g^Q?D?h2w z2=9^49Z8vk4PAEy>3#EhEDjrf>i*vMg4io$-s=-7F-nU*+Sr@-O$|y!gl0nGrs%`x z3x8d?@%-*G=J(q|kW0m#;A+205l-SnC4wzXce}BC9ImiMU(9}iwiI>4ofV4>Tt2eo zX`)o>Q=Gf+n3{Ul=rztEq4YA?7 z8QnRNlpnzm>Za09x!*|&&+UwER|g;5b@BNse(e_{U)lJlDDJb+W36iDKHz(iUjD{B z_FA<=<^E@;KfWJO#Gjog%8H5hOqN1%eN#iTGS7*0N9zrzce%WZjoy_XIEV)+w*P^a z?rv9ySOb&iG67JMmHw5SYgQpiNL5Y-^jA#u*<$;(tLkVdYWZA&j`jX-&x9uNg75MlD zSFYZXgbLhAWTemr|8dzRK#6}$8C{oknv?c^v%%Zvq9QEO^Z|+9xxm8ZSxmG-R|<;c zB-x^8C{L=F4@N{uczd2h()z`nB%9RmQ4*r*7WQ}0qy{g?1t3C_JCK5IQ(#qf#j%6o zMF@4gC10LkrV#6bnZBAk&LEEvopC`(lv2sJ)wkrSkt2fv&LwGl^6SuUz1c%@ArS76 z*f5(Ze)X`Ef7ysDRx%c7C$uWfgOTryS(!1#Jug>zTBo(@kZU50T&Ae z8tE#+ICpepQ@IrWVmRBUS2$2#JH@j;!xHy8VoWg`C#2Xxd_PY6;Vl#g=h> zkWzI#nb)$tjoz*F?57$lrye;;&vj5B>WE$_Cke(zN!`wNZ9uGee_yOZ_5#zR?(Aq@d%8{XL{+<>Z^AMTD_>?%Yvy0}?x zjzS1`rgw+2C#`Q3{Vuxwc}Q#LlF3}GRbaas$85q(v&=6{Nyy;$S`_wOEzj&vZyAzP zORbq~P-GbiML^BGfkUCd8)waE%zN*orsC*qjQ>*eg$)MSjRjh#Lh>%^I{fvfuX@>i zhJzRgZ`Wgv=;wtoe_DM{2{{^>;E!wh`a>Tw*oe6#Q&~)I4~__Kl@PRmYY7fw zcL%#-(H0ugnA1y+vKKJ99Yst1BIW!v^F|T;mW8t=Us{aR`MU5HBgx;XDTTwfD}nbH^%$Epbwp0TBz9$uO=_6K6i zIoFDMt4?UaJlF(*8>^1jepDz$-*h@D z=+ST|T^?D=-W9*Dcd8~$`hn^RrPA)*s`gdnTi&=?D2J54l1d8jYL%0TG4!;v1sIv0 zFc1DR{XNRi8%#ukz9#8&ge8NFRuK?Diz89vz`I+=bd41jdrD~`o(>m4*s-Hbsgc!Od#AgT1&d3%E)E%-xoDNGH*mkpruA~kC zO|N>U$Z+3KehroIk3H<>n$umAL_<%|`G zBe=)?-Rbd=qFc~`&{D8KlVGNrfO_jNnd_yPCPGI-C|aamn?-y**D#b-Z@M@eCvK1# z^L!GAgMU&+Y*|Ov4yPVi4eAzs?7|g}XJmwk%E1W8K^wo#(_NNzAO1}YxYTt(4OcAFNQb`pvwP&1Pyca1QVr9L2K!QNw0!O zd)O5vo8vWq`SRDSnb(E+ehsQ{g_02R#?FnTvXY0HdziRfZ)%a;%D|*qTxC_hLB8*~ z#@^-OaKR!&eFzk;o{*HPKOlc}@8zVGc>P-{?px>E0(SLe$rNyIZLh!P?ma~G(`d!M zUeV9D{H`Opm-OBI?@At_F#l}6FfqDfb_bNpc>$Bz2m9<>LN>jJ4?rrpX44f_1S#`R zSruC{IgE5HW=rC|>bCwdup-GFdYR266hw?69q(6F*ly|;6elb7*6;EMm(S}6tf-s{ zW(LSzy#FPh4bIOVc_cW}oNpm-gDp|WqZ9}S-V>?UWw_gW95Gy&`(PktAz^K7?3u$T#uf$Ila$&dq|`p zL)zMotUUtI{YpRc`F(YfV)({+9K*5XQi&)^e>_Xb@#7`8IFcF_N(ZR5BLxi)vQep{ zC0>!w6UfU}pWzF1X=5!>kjA-$6j|*1B2)sw>#BxRN4nyRU!%CtWx{awkr`WPUU8tn zc_}rIf~=m|`X09M0DlepBY)@AzFm=-R`a3t)6Vko8Q1@#=u8}${{J{WCPN~k$P7*H z%A6bKNSJeOk|dNf*@l?=NToGb?wM=uT;;5U9HVlCC`mGzBlnRj-{0r=C-8ai^Lf2r zujlLWkm5`=Bd!3EU6X^?Y7TaR;#D9$AeHI%vSN5V?FS6IQEd4s$A!YnRjbKc!KI_1 z&U7)Rz|tqfE#9fWL$+CVSGQo!QFC>rlm0$Y?ODg}jn~;fd1w?`-zu4s)SH~-DmR~7 za%=fq?1V*Q>b#rsOGF=#=j;evwr|Mi@yQvlkjlN|=kc0^2)xU6?mk44!V_{Z`dW}w zfQ18A)Y@C`Uq_tlAg;c_;Y8bB_ts(DQ?K9PfO?$f7{tIE?Q`FsZ)|^Zd-(1{_qW;a zdyV&nU?dJ`jq;$TRb-5RDW|A~x6b?5Nqc%hakFv1=FYAW>z^3&i^kw6sYaqk{yWuW z;W86J95=gnt=MufkG+MC`g)AnWc&J5)LuU`*hXId4>TjoTZh(gDAaj>&pQbDB67mR z2{UQ^E9(T8EnbZ&S+{`pmA<+zRaonrIq9LUcx_j~{<_FTV{Th_u(TwiJ1zLO z?EYjUeO-X~ANY?y!lv81SWhyN@ZqyUd~*I}Jkb++X5>wOF)<1;ZyJ0$#Z`XWyZ}VIrU-POi+uT;4w0K~@z)jYtNSGpoVN~!hLVoPNHuo)k zpEd8wE}RBw-|#|i%M7?>CLd=TsPpjU(t+r^D(%`+6oRa4EuUtnxJL%KUZpjIG3S}L z0aUpqGZcryviCc=-T7a459ZGB-P_Gbck8oslyPQD%U#%ZCQyE24n-|0ksvpd45`Mic4%d+7Sxds2NB%hOa zsc&G_ew_&9!X-?i4KOSRk5jZ*;#$<%u6_EOBeWyCayf zzJ}2VEOVVLPv`*w5!|s)I19FeVJV%0#YD>h0=ePSj7NlQSlrN_os_A5mwTZW7qNNS zii|TsB$aKInqKRIv@@`Vavk$UTY?sZkJb8`JB6} zk&0T6R?5na^A52)zJG+Nnzrz&@PU0EmLuQFx^?@syWmf?K{B16%3`*y=**lCAuUGc z-*oJ99uOs{r`xu+9~%1YU#f$(iW==X7`_nVi;d!XcrR7uYoef$fh9;#i95Vy@n9ko zC2N{3@4QHIvcFC3idkH=@|>rm&`BnB5b#6|&I%Je$EbzgrQPF-Ym)Q8Ix~KjI2aph z1SsloWnmE1Z##t&MMjp8i8w1j-w4R9-##Sk*i2Fj<~%D_Wm^h=kT0cC#0C@naid;E z>9O;5xMu$-ISuG;`IkDSj;(9Y8j^V#mfuyd<^O?D_>*{EtP?nvkTOwXcl#%aN5(;B z3QR78B-%gVaXbF~JvOvQYAqA`4^x@)$&nOCSC!6+U=K^NO(yULAjUkuj~AWV+~f&! z%N!8d#3hZ{T#o@Ip1*2lJrgq|R#729<}Gm$4=`Sw%zwk?zC)W$c=D7$fl}jCPofsT zmzc2c3}LGcmk4`-j6`D}wQf5}CUh(oU0h-$EWWdrGFjRuW|L}ebM=CogSd@)y`RUr za!%ljf;0+r#QX(L#3K*DVtJ{S8ngnAsg&(%I7b6 zTiqInN_iMwd1acm@_TemOE=~x^;`KZaLmof+L=@KogcrYgs~fgKsAt-wY^BY4_Ii% zsF3HA*%V?GiEn?RgsZON#mynPQdo(!chza&AbDp&a+0Hs?!V7+fW6(?vwwCv>pia5 zLiW)EwCpEDoSCZBV}Fb^sx;MjDe63K(Ok!Qux@oXd{GMF@B!FPq4nS zyi-Evl;U;=`pRvO#R3ESk1#Y#joH+xQgb1x7ZM%IcEe+RoNM+ZsfQ1S2z$1dsBg!f z#ZBhMtYA*Zh%{BOFGro$cL|^ z7~g%zu2g5fPhHAXd#KZ>y4;i4CvzAdeUfj1^Dc7LAY?7>-m{-1mB(@MJtNx2U=fQ| zpqf~H>pANP-zzD(|6Bx(VEk-I1tU%*jj`&;J-KA=_NV4v$b`%5^{E{7M=EDeJ7X+g zoe-M5;RO-jq)SrUvujFMKgidfUsQg{t2RF9d6#~&rIK_IB@6&Bo!(^@)IKTP2rjAY zxKtQ(&Fbt4)5{oFz5eB7&|m=J`a8ajl7v^YqQtPOmg@L7XD0>&9`##x#fA)Be7qx7 zH0k9%Vf9Xcs+oUg?^TaA-)@Mhfw22Gb_;Y})&7_^>)4gs>z2?HfgYxpB;q`)&EN`j)5udUoyoz-o)*`Pmy!a`f1+nwfB)RdJ70 z76l|MPcDkb%Rz_tEvjb8iT2qzV0qp@J{4&Vk>oK&?9R7lh3mT)9$mPhdCEkh(wXw| z+JB(8<^vgn8m9|*d~{BSly<&5_jS?!Aain!`PE-f!4ZGGnIF~V8pLEz$T!bD?|tb3 zredAke_zY}(p21oZ`I#Ahm70=A|F=i&*~(2G^bf^fPHcO^Cp!|aVSu-THKogC>3ZW z>u{-7pEG!Bn`YgXFzJ0=P<@WSKrKLbN9RNJ&Fe>M=kwx|mkhQ7Tq0KBRWjBA-<-Ld zrVc&Mi~Oy@eyg7h;hGN77W1CnoCxcNITpDp;Xn0H6rvcTszc!@>RPvp^thH$q|(gE zkTE6)??qiS2*g|QSM^kT_o2bYpIFn>*Q}j$y`4N@9(`BV01I74ArxnIW3Q|0wNb)b zV_0U?%cZ4x?@N}3OLTm>HL?Rd50`|=UjO%7s^QPGL&40BOm!#l^%7T;EWCq!6TYYH?C^yp|^`Meu&E*A`a=1aR*dqkX#@1}vvSGO@46 z?@MKHtn!tFUZ+&X^0w0JYMmy+_0}1{s_EG3!%r!O_DcMBI#5Uu5Vs_o-n$M7tsG>(1uuWJix+Z`E^wPs8~2Qr`2l zvE!roecnBr#j@$dTvEAbvdxC+%$cG^XRy_?mCt#K@*)Mzj;@VfKDu7w^nRA!)g;+u z=E;zJ}kp-XD`R$o<@OvXnmo!0ZXblx@GRNw5vMm`X9(nxyp6r>bWMPPsVdWRj;v6 z0&mnN=8&5sqPT-o46R2Dt-%2Te7%Hc^c1SstCg36|AEeC_QM{bf4n`PQB~z!b8owa zO$JAS-Vcw!Km8BHQgi>;d~?Op=jEK~GW?302%;GJ;`RgO6WbtHzMq2FuE+}`TBe1* z2QC%mM&1{HkJX$vW=#{BsSv5-6r#@{d(^g^hc8KtYKaz1cZ;V6-T0U{bGZZGQ9qMG zm&C=zSZ6Fv=AbUE6^<=TYS3p4M!8VAyzFcN9 zdoJ5nbK2fn$z#@L;B|FRtb18rXmvL1jL&UPV-`KQXvZ8h*a{f;{Rir~r*~h=TN3f% zrNKRZL$x|_eswj(DsIotz_+%7GTB6Z#C`nM_S%D;3Xutwt|6wA@HKx!h_m%Bb7GUm z*eGBon$_3nAxl4#%|Vuk4r|7AOvj4F3dzzGR9x#5IgLnqpTkSE^N(1p;+(QBMz71# zTm#EiXNc~CBKglLqhYLVAMnt2;;U1XS0Hy#+Si=Q$X(xp5zs!i257h6miGAe`Ch6r zIWL5k|EhH;03ge04+J39Hc7!>eTV;~JA0I`^vV+_IhtZEp&KK0AsG!`KWr4K8O z`(EKzyLp-Rv+LAanZuMTqQXgH$*RlqAH>-OJZl1E+ud~);i3_8Fr^3uuR6u$;Lvbw zNZVaj-{)4x?^B~J<(ADnC~3*IJ0C;A3?{pDa%#Y?`> zi>faVKb^#$a=ei)>v`75(1Y#R1Lo^?5;F@rVF}S?hx|&+jQ$FGNGGIOfDV#sefs;G zgIDjLH<34R>jt|AE_aAIv2v$TA&bVG3O|x`nERGB5aIqoFRV?RQ2H>_njH_wjV=L0 zv2@vsnPsr-@*B}%+#5Z1pSycsCF70hdKhTC-f$pITu}>;q}hXZnZl)6Pk_?got!S! znTn!0KoWWpL#-vA!qRM>jpx`TEO{`(XyY{uS9x#L`TJSMpuh9UsiB~m&jF(a&$h%$ z1b$Qlacco*1;0R{A^1d_k@AW-qgG(0ONg1||AnnH3!nt_cm|Dqu6ZBY4TFHTOZxqi zQQ8Sbj)SYlj2gN3(Yzn&&=|Y3F$O#5`O;sd&^Ige`E}tND&@3#pmJ9E7Z2T7?6HYR zC^Gt;whSZ;NR_UEL)wip@A1GO=Yb_|dAg*2GsTqz0OCqz<4-e^YGjjeb&TQpRL$sp z$*{l$Z|Nx!gTf9*$z@X*h~B8j41-!qb-BWdDF>tNxB2V12ysItQhz9(`PEl9Go@=F z`j|(Qie=+cyYxpG+i1=sw2zb@x9o8i%?)q71R2j!Zb-|&O`3n|gSEM#&-PK-vna-C zV3_*Jfi-B^=~8kFM6`Z*LiN@Y>bp~sE4MyXNg$;+hT7~rwTpEgVr7}a zT0HL>Ev`CH$ouFezNzH-JJJvsW!$B(c=3Q{sQJcgPN)|%7onN-zWP;tKcxA$Igc(9 z-O*ot;m>N`I~fGB30==u+!szgkSlLmi;YcZZErh zc@vC&Jx4I^?CU%7t)X6~1^O?4+FF|N{%BXcsZGp4U2uDKZKLkblHNZb?Nebt2J^jx zgwNnKVg-6sxNCHuMi=`lpoMCqIY#gxMtW{Q z;i9)2mm1q9_fxn5FPu2{)(XWY2<}^S-k0ERHat%MRazFMat#}pZT+=Rw}ZDpTKZ?= z*7~V12l5=|Na6v%jID^3Z2)LWkzJE(N9^XW@c=p9lyj}H=4!t`nK=s+!eof%PHNFcKUG#crEIT``9ld=1uda z;)N5nB!M6-hQ$F(_(}+5$$mmkE6mXYJ8*L0zPk5^z zR=an`d2FXx_;F~bpe^XkN8lZ;D@meI+kCV3RQ;-=DwmX4`KLj-Z@5#j3q|>A;{wY+irHIbt@ zyX3Cp=gct11966b)WP=i9r8(kg4R#O~J()MMh>w~ z{eCEO`RySx)#JM0_3r^}9v&xVX0|IQZk=h||2>AuzUJWL?)YKuTB}yA7C$E&WoIC0 z^3KY1%DU71v1#_eK*t5O2N#o-*>2J((dSZjD*dmOz%sQax~D~6uQ!!9olEVKEJaAU zxdGYOxMW_Ro*{6FDUN_6T*<{Lq-ukv{x~w4ouX4HjP*(v4|Xh4R3{y_U)=8RB~2aU zR*FC`8V2YIjQ)&Ev{@wO`){jBJb(rkzz7(WK$|jZ?V@h^||9^DOo}fgen6E5FDIoIVOsF%cc`;VA1bD z?p4Ve5iPq%*Zy(_a4j~9_xO7&sMVIg@FO@Kn6lD5)6uWTZJb1UmV(uI0$S!^#f7`o zA482@+MRc6f_t8TskjdCW_4AtPIot9_(82kDYIHn9_}N|3Gs#|6OJl3%`m-2TFLTq z=j49W5fYnA4-kwp*ldd1R{)1Mn!h!ml5|CM!?62v({K29ID1MoO6-ZM$Q>TM-g2UMR;nQq zkk%>${0M^Ty6nUL85ofQ(V;u6IfHsbI=UL8cKz_yzol8ZQhmKTTq3AJi1V4NivCKR zgS>5K3yN4X>hr9T;kZyqQV`VUTLO!?Clc6stvM{#0{%`7_czH#+N}Z-&M$?rC4%PH zH#&4Ofwk|%suKfmqYLKzcT3az;SaV{PIN%ha!?Aq?me!9@sIn0+?4x}M{?Iz@u)SE z{y3_lceZHOI?YeTOWZmPhY&DE#62wUHBqi4@%sv z*dJ7ie4g+XaX4jtuL;ey)Lnu82QhJ1I|l}IW=2jemjKA0d#U*;&`A=Bfx1AZHTW#} zM85By)|do@h;FP|dCN9q!Bc5T6%}^|mB|sloNI)yT~#)weZ|TiV)u!~@O4AI zW4G$TP-!r%sQjJrAfDG>NA7v>wI_pwRn2vCL_YbEPPK;f#?dQF<2hHm$ccDv&uKlADE-MzeMFxq=rSM<-L-z-Y7|;X3GssEK0|5We1;k7O zRYkN7@eu)FZVH1V@ONG1)JA5f24{Wz5us%yZ;oH-cMXe zYg8M$T=TMCy}Ke+jGJ~{q%==gc$+Qls9j@Ib(?wQI~pm+I_~5Pe*dOI%#wGzRtcQA z_#QyBXfw6avo=WEWlShxr?i4KZ=x|UyGhyxO9RD?&`tu6tssFeQ^gm1qx>Ma{4|u2 z_)5%*Li}=xMEeMlqj|zhaie2g1#^_m$ajr_9D? zH?D`HKc%Ioi{aAM#={R+rfIsykaoW@0P>&`(yQntK#kuZ1urjKNV*Gk7P7FW^cqGS zei6E5ttMHw+ancuYrOz?3_wQ8LWA_T;4}Q2mRJRlSH84Pjkt6BdP!Ku9m77h3=XBp zM696Edmu)3gxdgP)dwr?dq}pBIT8d;Bhr@eM$)6pE-qIt50p2mD~sH@_nx2Ws$ED( zB%?eM^)6__i4~nkJy^LfJ6CcGx6!**-m}l7yPcdJD!kDzp7CaRaIq`u!-!{+aSIW? zC-q}L_KKbS_4$kyd2*IpvZYH>Ww^))zqG)%4#-GCy_^v#8JjRU;km=Z9me7^|%_9 zT%2YK(QY=fn_aomb^dbReQ(;WJbg>$bJQTe%2Ez4#b73KF>NAe;jMf1VoJE`h{_F- zy~{PM-I9(J{z4mRc)cWcT}wijob2UJPz2rIsg_hb-wzrb6~reZF@@o*rSOUtaT* zR`^{Mmi_n+VAYc^N75}JF5akaAAT*ZxV7zqP28Hx&j-H%#$Ccxms(-z)owxFdotV_ z#8-r!O2tK;lYRyAmyRANh-gwhC7CgQb%kK>GZpv69QLT%8k@2qwYR*F1)ycAd4yK$ z`(-Zgw&SpSR)N|#Quv^$chaNsF8lvIC!M49IFJS$euasb^nxRWqmd=?U?PAq- zX{LJ)^DiT+qd9Kiu@Vr`1S6a86M`nbL#tx1A||Foue2e#^EYZuH6Fa5^6+se;A?RY zg|B}fFGwBw^&G)}We0WRu$(6LMfac2^SAj^`bpW$E1kXCMMXigZyq(Sv!%)2Sn-kU zn}P|r8bv;WFAt4mskE~`IcYvC^7nCmy7h2^OIRw07Lm)m;7PX(Q*1D=IdO^i(e}xH ziub#ViK;w?KdzqP>sZiZi%X+xV#9gTufM&bXoy%MngLk3=5kKh_s5V0o`?#8PkbY3 zkO}nS90+$*(Wa|ve^Ig5Xr~xNZJ0qWV~lt5<0LWAG_xGP1f{5-NE&FiSu~9ktcU0$Xjb7<{cuRmh+>dm6%M2yw_+q9j zy1yGLcPvtU#;(JW%u&_B&y(4=9jP?;9aSkkaiB5Yr^*^fVUj6PPId&+m0OWxi3+Q1 zfj}lAX(Y2;3mUY1RLPRwF~l690lijAzDql^n$;`pHrYr>oLNqjbgxAtFr4C05)AQm zH~`|ejao71EDX3BGh{){ABp7@)z}>nf{JxP+PIMLlzgV`-TvDj>V%-~CCE2t7c@uR zZsnqOI~OsE9L#nzAn{;QUi_iAJ(LKJ?MUT`a!PVn7YSL(-`cLgo5ZA~tc}wQ`sR*R zCXpC!a}pzlF1=Gu@{plxe;c?V39_ZY{_T~o3ju=Bm^EVw+O=}MA1V2|KAo-~V*ops z0a(Z_LiUlDf3b8Twd7K~jNTIGwxDo7h_AmwMDEQKt-w-Q1zhJg-N|kEW=9ZXy@L-_yFUKk z#?0Yib!vN_mO%?^2&&^kdi*r4o`E8!d_Nhj3)?v_p-tfuzA^k)NEEPiNSLG&jvj*U z-G9z~VC@kz(Iza+tPnK5VB9`O$m8YS+oJKiFGt~hl8~w(<(#_!G zW{ID(CDe7n2;|22X7uZmQ;C~~eoO_60JOPHa@?TtPLESwUBv6dFV{IBl0i^_I3r1J ztiQgg+$YS``R5apl@@KtTT4vuhaO*x@HyMb7Rw^~%-Vpjo{m}@9`h7WYr&1hSfojd z9=eKc4H$k3Fx1_Fw5gE33k|aCg&%-Z1`G$)(o*pu(rxfoFbJAL^?8wc8c%ORI7!}- zdW4xF{|CB79C-WOBPI!F^Y&T8>JbQN`%IZ&q><9~I=`HHdET)DVdgXlO9+7 zZs6A&yu&G3rRI0W^u@%j!(DHhV>18h)o6{>0Qqr+mE$2_0VIpNfu(kwU{GE`CgBsM z?H><(Ha@1|A6mITy>F;M=(uq{B6|MK(38JxOTqTQ2f8Z0^`Ks7nCq8@*z(PmJ3e0T z?^|_1j|DcC&7iKM2|D1L>}Eu=cgJZW_jz3l4QqhCt|TnC8M0mB#+J+h`8vjBh_LA) z&7>rmoxh7$$j?w;98K0B9@vMsR@F?M<`~l2W*j9JOE9XrFEom~MsX!glpxdA07bjI zs_gw z#3myC1HpE?V6UnzN8Vis$uz1Xe;7ZCpi0CWJ#jAIW+Tl+gjC(zFztDkzn3jDbo;)T z*xriy?~$IvHdDaV!=a_iWsArD8op_)$Bu~jmd3t6rbl_~J)wJ}B??X>m7R6`oIT`C&?SNRr{tC{8N>c*Y z7ELT5tYm{R)KC49%aKaHseR#3<%MkgS<^kmcZMVh6W?<_wC)wo_V=>Wl53#`tUURa zSRE$@{)AM-(AcQewbs6cn((06uojZCue$bilmy1wf-nY(a;nxze5;3V$-VwA2(6b_ z7v)3;liv>G)&|aQvVVi$bQTUDr(XS+)vBNaoiDy@+%K6nb}$0NMQb-q&1^HKb5Fkk zDx@)hbvpfR)k`X)So96a(gGXhewI~3gQO=8hO?fq zpwR~hqrJh~<(a6J@lp_9XVo=~Z zie2w%Jl01oT61IBf-c~$6KW6+S3@#Y-tk1a&U1fQD8m;av9%9?$Jr|f67Sq2Fgx$$*z zPRn;xoTxSSe(bpzKaJ71-{JX`$E!REiLdI z%ipVwi#&ccgAfy?X!PRDT-<20sNBWd3y}r3(Xlkv|xe$^L}q&+4%(G4M-rt8EgzPF-pU06H)uqCBOWL4UYWFnltJr^naZRdRlZ!bi5R>sH4yW+bYnYE>PEw^O(qUHQc`K0H5$O z-N&_AA@cUmW-Hs|C-$zkxV^Ze#UvR86hq6l;(ntpGvCR#7wn$ooU~C`@IYct4YM*? z<{+ZWK=()pG00(Krdt>RaB2Wz+4%CT*-|mfy<(x`)2PZ!HY%i!A&Bd)1WtJlBuNzBx{zMA8=sLjL8RimdFC6^HfZX%{ZID{HvLf3IuSs4rkCEQQ zbmfPExOA61BVq&T&LxhUk3~bFTLS?9?pvqy6wbPjhqIsV8U-}{abvMcp}^XTS4uoh z%|X*pBMkVe++>`%8UbM}I-RNe4lqQA$3>TaIpRj+76*J!R1DZV@rU4tmtd07$>A*o zxGRpXw?EroDv5&o3DjdFMXTW z5vWdAH5LByazxke(IF7zu03#IQ#2>?_9#TWv9JRAbB@RNT*4u$3&2ezp~h3Xd}HFB zEO7A4VsVL62}pjUsOl?`+n>{xEu1(mT9Kf3kM;RdmY3u}N)TXzAvV<~4PQJ~HT1Jz z=+a6{x=$>V5Qei?_YtT8c&tUSp!p{1*cQ?0bM@aotfdr3-JVAYq3Am_tF(VU*I$24 z2UuOzj?b`C1(t|myOwBpA-&OBDHnDGg80u?wcn!W(q z2tUi52xoF`OP3NBjbGWuugWqc8PEe8$arSK8o)J(mLgfA1JG@Y>;w|Q>;w}{JhXY& zUUGpN#;lgH#;oXxM<^=iIEPtpgZC3HiiOZ#f*m-jAs{}a9IKR}b_?8v2Eb?XEw-a9 zPFz`M?9h6V%=H4crKsMVP?aOt32C8)sPim{vi6BYUNaEElpMvS2;4)|sfYtBazxn1 zNGxG^#4~@Rz-=@1IM5?)K%y6^Qb2;uC-Xo=4}z*>`@k)g#iF<#$HyslXFXNW6YRN@ zv|jJH#Nh!%3uF4qPlvgkw_r@qAGLoZv{jldO)KJ>Z4jwtpxXmPBEnU-A zT}uX7-Ou*pi`-NVY)wq*UnE7MeJfr)e|ZI76ET3x31fg&M~nz`Kmp$QMdwuePiRT#;_xq5UR433=_KXT~)llv%iDE8aq0i ztOgQZUWm%W&{$F-{sz}LXK)j>CeJ-YY1@F^#4F+QRDRZjL0y4$W?`cHM}q;)x3RmB@{$u82vH@@Dqn0Br6a*L2-_J_tUh0F=z!Bws8IVe zA{z-eT5+^=@kh%Uss^L+7ACzpK>7R8JO%FT4n|hYqxMZw`hPbe2Q|l5kn(-#fD=X+ zPTcL-Wi~1cA>m7MIZN_wkBViZ{6i|<_JC2M8V6sLzVkMPGOE=Kk-uJ1IZ8Z-9TXx8 zlmo@ECV3YvacN0}>xnngVljW@dU>X1W{y>Ew9Nihc(pa1NIS_g#hgwIf9Iwy(JUU^ zxgghJ2mCt6OS|W4&>L%}^6X$p84+sr(%pm0P)P}`@x>Xmw@e<}y_l z?xPcP9brX6FO_r`0yqlvqme>8I!+n72+Fa*@YfSzVZntz3*skPgy1lGwWBr5%=V0( znX;PlD1|HidQ9iq@~Enk*%>Lx8dDy2FSa0%YvRK>@t`G*^KPw@(O6N=($uEd`_}k9 z$w(nlFaCSZ)NG(uEqnk%9^{Y>K<;D;b3BK5s?h1rS<3?EX3r@p#s_LtSGC@AAz>!< z`Oa;MXL<41^RJ$lsG)NaayKyFR%h9u8PH>`QFoRWQ6g8XTm1BU3uOS(VBC1u);;v% z{C%@2cP;mKr|wKCLI8R8e*a?35b*=$_XZu7R`|(2=$6<;R#Za$?Qz0Ggtgypywdv^4(oNm}Yn|K5SuBhXtl}onVOEr_q(M?Ns2`ZR zo_-s5;8`uPOd$>H0v{9a)&g)lD}eiAnt+%GBe?10E@9@T$|ErOc)O(oSm?cPMansU z{tPJy*p59o4xHt!mROK8xf);qE(FG6HObT#(eiB-?qEaBIorpfkesLaU5i+VP$`wx z0K}!IDZpSDIJ7@=GPTYCGp5APXl|!5YbE7Hvsv0qZJQ!vqf}Dmz-o9CT`o`c*5J`O zuYVPqW<2JWN&37b1GHs?OJSiZe}bjREX%sXQxQ1R26vTqCai%cK5RsYg^XS}o95i3 z+5IqsZA+4Vr|;Ih?vXdvZ2rytN9O~HSsQ|{%H5^1mRiMnl8u&5cv?+fN;h{gI_Yuf z$h+xV)BptI7}{S3ua(L^cEwl6Y9}=LJ(0kU4s*@t3@?>kvPeKBD1qqO`_&v5Kf1;w z>qs~@ee2~ET6R*~1UJV*%oroB(gH-=`R&#k63}@^Ym9Adwn%>$pM5oA|6zmf(&!IQ z#WLasTt9ykc5cW{VmplwJ6}iQ7{qD?18Sl2Gbc1+$nnt#dp-;<8Zo42HcVLI=+ez@1DaP2Lo&2*4_gX=zXr1#3 zd8?*RZ*n`>ydhcH7?=K7?KGTCK!K8SOTDyK4(9c>}^K%6O+ zs$$s<&;)&KuKHHURg!{+oJaaT#>K^rY7KuzIG1Z}4Cr>m^l5LaWnKUJ@T+Soz?Uh7 zze7Pp@nK^mC1uhsYZ2a-)dJC3@+q~>u_@KxnLzClg#PJOV(A>zZe+y{3Is1(pWEV) zMJ>9|hknWNv_I`En|y6_us+$YLgYto=E>x@CMg$2EM z0(ZF~x=9#m{A~wHfO<-k8}o7LY!8vl&FTvzp9^u|WLqk#bGw{+^Ye`H_^&lmPA9}Bw6Vk4y;guBo*dWd|48t3)X7_Q+@R$xhX`m|tbVkYhHS?Orcoz!-H!>yfA<<@j#Vr0$^a zH`8mR6Wc1k;wE$0PXO}jcqDL(EYX1o^gx6M&>@{nfj;*!3M2nL%?kKd->g(!rfjWP zck}##2L<~8wJ{wH@$n4yygzx(kt ziQ=x^@uj%~2w({PEx$LGsu()xDH1MM$d!tQW!iZ5jOZ=g9AwdN|9L%V`_Azd> zwyc^xr7;0U84VfG+NKMaG9V>zJ+GP1V{Xr7rO^wZ&R*G&Bi&+jyNMO)Z>f2Qdus`k zs$;?q0;~L9CVQQ64@C-KHIR7)joyAvl<*`Lv3I;1amd zlJ_Hcj+qfg(wwHO+r+UY4pPk&9a}9Wo3V{tr1e=8LO23D(km==3@K#VyR1Lb{;Fl|&o~%i zNQ%)Dt<`~{bTxN({{SdfBQnq(g3@_R1N=m_CMN>fxEbJ|lgX8JT9GQ%y*%d705sYQ z7RPNGi!2{_sjg`l5g~W)dw_-w_Xk?6f&LlOit8_mhb|-%ZiyqO5C-x^eo0!-SWvwj z%WLB=#P3Kl%NJzfCv15_{`u%$P5vhOm{Cn=uK1K91ClacQnuosZhr_LNX7F+$Xc#` z#Kjz|T>8-RqYTNEruuwxjYSF{Ri1r*CK+{LbB**V6e(&<8FHCdYjJ4 z=CPo^rI-#7UcVwzS%}t>=`;XJS@UTxiN;31n_y0eHV?uah6RM zNV=exx!@07(GaFEG_g>FYylZ2=Q9uN<3I62elA4Fq{?9*vn=@h+DjwT!}*PdO%GqtwaY;B3u2+W&>Ye^lTpk=%J&Ncb?xqn}s zx2PX{Hdr`yN<4kHB67Q&(iq2%NTEL%IxuOwFCUt%+-2N9pbij4OncPYUa{azbj|~d z*2|-hZk0%IX~*R|MTOhwZmaAF0|kW#Vo4)HE~EuDsJmURyOxu`N~ip-RQ8MY!xQ>d zt&Up<9G}l^uh_X1wwb%e-@-a&sLnyh#QA>&$aU-Ioc-OuaH~l~UmYossul`I0U;g< zaWEu}Le76?01t0rX#X64F~4MwH}%xs;nNy>23VZR+w)D#CS@!zYew&6fi6(Blm_)H z&9MNlBujLSM5AcV)R2SEQ#oEKcpWYcK3y$lT?rbuI34Y_dq5m1X9zF%NLx|DM&e?| z<0W*p^E5_wkTeE#J|;QLMv?`s7_w8qKu4J<8P6w^0Bwz>B9eY9d>9)ZX`79rS6|kf z`4>{408zao6y*MBk_3j&BC7W+dM&&!0Ckd>0W&c{Nu8KwXa z=4i21>)0*2?$-kL7bd_$hs%s~=D?~Kk6}-9KNm-5P)1GiU7lynZ2^`!spQ_Yo?sW= z$7=ZjE1yf~+R;%v%jDa=@{Q~3iVO9ODumzG@WwxRx!NCcGJ_jIHC@~V0ZL^s3ZG-} zuloFtiOb;zK5NCo-!-i|wL3N@>S~-u!EBM>>3XdG9TBeqnR8q`8r(AvRFQs|07KsU zHkMW41s*W~2~JYvUyr_#2~p(iC$$Rg?D3~ z7&v`96I!2t>g6bkGPT?1?7AgokSJJoWdLgoo;?EM^OnXe-0oWhPREP$V=E4I+W|k- zP|HL6YZxVVTnZ^dw(?o)%l|+UU{LViBOmv?cz$F>U9b4uSuL1SRJCa`D>*`W*>aU3 zPDTj})VJJ@#-i&JX=YEy|FAta4B!dSa44Qrs(@uL$$t{uP1ft&UZKplofnR7eu@)G zj1Aqbo*6GY5mb4nFcq)dBf4>rSpN43xxGYBs-U=(FxfC~r0n%sfn_j+&NNr5Bo~9n z>pj}j6HY_J5^L6i#4j4Tpj0nkL)9cqWqOsNjw)$6G=0b@`^yvQV~;Klp<8Fm%r7QQ z`z2LNeI=L{>^I))h)2EHuUTbImACxWvVWoBR68+UQ(Y;?0Ha%Iqx__jR=S3dAAKIg zOO$_ksByp=`P};VCSVkJXCXl1=8n{Eh~*nqVP;;Ukle>}UT#ql6H@h7hL_$vkpxLO z)aqLbWx2|`x|dg3o2O9lM3(7XcAcR{8YAE7rDIWA z%uZ!0=6WJioT1X{|Iwmb;ZWF+xRscElM*jEw~@nbupUeSLQ~FE=B>MWvWt#ZI+uz4*Nb#gd+YR<(=7pT~y71uL z73;|b>zjRDpb%+tfTpeg2fDB*Zou(utH`UNcLs=iHaG=rdExi4NAmCDeN0#t1N7iO zCu}O}oKU zuP}-9o11|(`ZLx7S0-wFNH41BgpLJ-^OL2p4X4w_v4m*C9}Yo#GbU~!3_MbrQimrj zL{z@wn_Bnv=>06x!fjMHGX@Orj)P=bS{OA1s`sO4y_wktGhqlfjY15nB)vUD*K@!? zl3Y4GxT?e%A~7H`I%I|W~M!%NCxBOjOcIu&g zx$vZVj9#uU4wjpVBfo1Oe4Q=L)gm1;(rOpL1tn0Ji-0s>)^5mV%ylH^i}FBC-sm+f z5)WA*y48o@k-$QxNsIuy4pDrE!?mWuTsFSJ0NjNUmbxz!GEN$Zm>@ z*ZlLFxt>XsFdO3`CmaJw`&;YUZDpc}b@E!au%aY#N;)5GV6C=GV>T00P5|S4Sfa-0 z?|W5%)x`6=%9Rf^=6bnQvb*pubkr}trq6=_Y>6ru51Cw7G;;C+^hOB#s{rcdW{gtT z!IzL^eq_~WS)t`2Rbye>%&T4e@I`ufpsLeVz%sXG^A6LAVq+N+w7*K&VTvx1imqZ* zMb7kc9);OtjT)=us$=}a{>Ra|I5OS;?|(BH-J+t}YGy@_9UN=JoXRmarw+Fyp&XN$ z<>-~CO&+ED#9!r1Xn8Icq zi-kU_tq_Ee7Dtb#V!Bhd#z7j^f-(bBVd~xlDD0P+Co!WxGjc}!r$?zA-Ygp&ExBN{!fOdHy~ z??ocPdcPqL)*jqVWb_8A&zD*V7nz1opEz;m8NlS&M}yKcjTBajFJ;it(vtucK4R{Y zq!c~owp(>aZy`>?$CRZ-=$ z+N)Ub+G5Cj8#!XlZ@I$5wKZDW9r_D&vpb<1j1|`xk5_g5a}qAA&aGGvy8<$NYoRpt z>adEeOgwf=sJ#Nb+nnI@Du`u!%Mp$?x{Abdpz^p%JK#$7*mt5J72U~$Af%FFNH#H*BolAa z=k{3%ip-$lJ7xVchSZcosXKQm=l?9QG6or?l*JuTxCp2KXtfzCzvQodO~`ij#U4XY zEL__vk943|{Ue86$=+x2%eg7%*Oh}bmCiY7<%14zmoLYYfz<`9GD7bt`cIvT*LOgx z4i;0)?ZrX>;E){!71Y5X@4e61Y2Hc*kb8IyIsW(~2`sh;!G8zCZm4`GyZ4g=W*lJ1 z+jOPcodyo#Oh1@qQ<6?8W#Wr9GO^RmcxaGbd{o#esfc@lhSYlwK2%b+$rx?K1>U{> z-arZzIp;R)NXM>i^+Nk>?o#}lDul0;S7}j$cZ%tR%z$m|w}L7?G@|-bs|eYw=d(MY zJMnb1%;m^0^#T1*_K7B-Yb~kbfpM+h(lm6}IeQM3$1kamdURxUh781;yuxU2Z%)UL zKTfp=>^Y9qEm@j@^fBpFS&ioImCNyd7*=x+91w%IRv%Ez0AS`Wf%?5Wlah4aJ@A{W zxf%h{L2TF=PJ&-iG7w%)H$Afr#WT*6`w&Y4WbQGx-`l|n28m(ZU#0JWBTSi98Iq+_ zHAo|+Nt80nxvn%~50@BtRU_-etD+BKx33MhSx!l~08zug0%s4%ygx%Fr9jn=H?N`7 zLPmc5SspebN!B@MJBA|__W{uyCySVsvP;<{5rl2;B+~p#Nj>xB@_;=`k-WqamWOKn z9l=?TEwc=@(*zP^ZbqdD`^x*tUN~c2I*pN39K86D+A$_H4NQeXAsCodWd-85EYQa1 zei*)#CeWtwSk9$KLG*bmXFH?T9fFXj$=k{aTn9hl;rMV0C8Al%l|JSMa4K4XU(1EJ3Q;gUHX8Z05Fzx!3KRILZ zm(FU48f?fUIV=8~&v|f(sPIR!7VoX&t2=S@`U&~XTDP+m%{bl8L2mwbC5NT*rB%-? zmzDCkY9G-Fpl@d?H!_hQ+n&Hul(ZDPt2;=vMYD{y;g z%nWU)cN0KvEXG~Z!o$ZR?apLB{)WZRcs6p-R&JrSw=IOMi`{8$JJfxU2~&@#R3IXn zI91xoYj%3U5?ezvoG7_t==S7VMc>pIpkSpQx0zc2OoVM{#kd)lY&CPzk~4`CtU-A< zz=R=s_77MVd7CM-*!xjC`qx7M?PnV3FaJqA)qzdf;V>_?a>ilC)3)N#?I~ptG_Qfl zbI-I*IVy62#&(A^k@z%693Iyzqf&PS16vb~0uIVdC`KZa%>i)DU;ZRxr#rae9x}v! zR*EwirNOwJiF4vjg|tTLK1sXVTjXsxEHPmw`_>9LGk@GTwt%%Ta6IFeE|c!hti8c& z1{lHk|GnCM0XNMx31TNo?{DzLO8E&@1icWKPM(k=Yj2|%A$QE&9C_D#L&_Rd`5dJt zegj{9GoCrpuKVZ(R24ExJ%d!TW>L_RITyDmG)pw_b$i#fZQlF7Z~xX-n|F3};1|%* z&8ga4*XtUpQs81|=zroO0>4&O8Cbri^BO-sF zJo_cUuHm72ORBsSb+%|VrAZq~dG~eN>;@-3G)AbYvleCbp}|LyA(sT+2y-auO8iDU zU*SpLkTdo^Hcg~hmAPerU#;!%&W% zc+TTEI5iQ$7fqp*STLDV7g2RD@Vug0584A>+w5a#2$>$;f#L@~gV4wmDs!WN2LqKz zmzcsMZ7>`Ju%ECGADMsM-~T0lv7$AgH`R)2I=a&c$Y)5aE#^Pp2s1nm^S4>I5iV7q z*w#6ga`T$gH)K-GT$%__g1U~=|NeES7KIv*)`oYYRyG_$jWhZlW&tTLEx8nKGYVvH zRisJ}ko9~UJzHq2>p~|t~%dLiMUbnzyKGjYmlJ!e;^g-p4YsTzDIEQpaW^w+TEH= zX9J<;+TOP+H{1xFYJWX=`4U6tIbVA7tW7Vgk-wH$+5N z4jvo?_@SYN>iLX;bywVHTPbRXV3+%a)-#4V=h7pMQ$t@Js`zBMI5AfEwteiov6hoDDHy!LtC z`}L*jvoj@rwy+d^$gy*(>h-ZS9&#kbtSr*rIHM~v#*%W>mR$NCgCG%4pGQyQJS(EM^|0s&2&kp82CbpXaMzTm&o(RG)`?_er%!wbPFZ5O7Z~jO8P8O+) z%0m99^*u6Jz1!KMW?1-jezwDD#9`s+;`3*z-!xUGlXRm))|+wryJ0uE5%KK3Z-U3F zYRxOPhKt97c8T7rsP72r%yBy6I6H7Q-dZz;Gbi?qThPt-9k3^~x{M^9Qx>1SeX+@* zzffdKY(yhcHiPXPgRc6fs>U z6NMf)T_rFw_r7(M*;XIFph6c#pc^(-2c%JUBm^T_*Bub9d8&XC+7njFBr}e3%FRbn z5ME!ZlHpumuE+{!nM)UbU-b~d$9ncd-vw)f65ZEp2FdE1bs*h#<3bmD%zCBart6W! z6uKLjmNl&d5(!L#R)O~JC2Kh)2aUdL`VQWt6Frc4YQPQblty6eKlVsEwAb(F~^`x(O2Y9|K*HO1P;P$vc0Mjjj)vNd>Hc$saD=J}Z^=BdicEPN!qad#VlAuU zYv*M8?|b9nGSzwUuDV9A5ObTBE7N8`sf1(TYdkK$1?c}}pWj5$VF5mo2^toD{bpHj zEz92sk6b2p(^W5jx<`$)H%#NHL51EAhVG0>(6Yqul&}Mcg$~ieX5Fih4k&`cB=yC> zzuAO_aOA#lfCoY|3_bIwkQE^}i5Me~S8+d4%$68`s+_QRXPp-fLu7K1Z=Lpu?@PO6 za(DG_#8)K#nO0k(i{L0qfAl{waTZjBgM{ zii}ENy59Y_VV07ww#Am0!Fab>%hl8cEl{A*+(!qqvKlqT$Had4 zc=JAsm};~6X^6*5m?%LkkyM|YBNvLxURnI)jW)c!!@bDX`SFI(wSSEt1M6ff(o_TB zqE$hbW|A)8S^?}lHtD1u$gAlTT<+tyn_e04_M~Z9$<+N5Hk?2pPCDaeuY55yA~K=u zr$foCed<7xu)j>Tk>{+_qik7dM9sz;&y7}Ee}0)06_v2eWBV?VGeX+&FvR%HdQeVN z#%$(91lQ#8tiQWKJF%aAHew$ti#V;D^Nb~_&f(g0weLs97^6( z?+DGIv%B(+sW6Pc)4fpS2_-D_Vkog{kD@$RtFTxlHNgTQc+va#m)_?SfJ-Ft>kX== z2P{o|daq$d2G3`u{FXmRqh!X38B9BDyalGscnlOzKX0w-Q6kV8p)!E`9yF%n`4PE( z8-c?9VM4p_eT@K7rvvOBOrQbk1}t>7WA9)8jYQ{&a`M zlG`qAC@5{_jOJM43hHYt7l$500&_{LYg&7}cvJNQN0AP!>+sG56qO_G1UkmU3}q1% zAW%K}`eY5A5fz02%xB>?yksIrEGPm_Lm_0^nCdbH>6qBiqbffC8RZ1$mOQ0t*;q_0 z^cTKIDMl&#%qNACe>z~0`Rk#A{RKq8Tnoe-MP+Vv53iJhhYhE6XXd<*E8IMEzMRx& z@;o5#oIwXl*jInsi*VN4`0FunuM*+Untu~_{1N#1IS_O`v1miSzieOav4t1h&#AQj z7h+%6g`G3ANR3R32|JLwOHK;=4AQFUedUC!1apE@!Mj*yF`+0bB(GGvbSlBxoLO1( z6}f>|%6!w)1F?h?$}G_-07ZlrQ$nb{!5y3pT|!2WhY;H`l?yHsSr2XDm5e{;pkkrf zA;t6d=(#z(sB%L`GfIUHI7{L?GzzVi5zBx<5U3f{rS{(K;7I^aHc-?;BmX73*Feb# ze)ynH&^yaoI$ubSl@?2x=ad|r<9~sK%_t0PcFtJ|+E|{Q-)xk$5sVFnWQk9uJK)>X zPmp7#QlZr(=tXazz$HHTbI|Kg zPkTVUcO?dl(k*NG2WzZNn#O5}*s@N<*8^K-GmVnWJYu;sj)b%mkh1x!->Go~6$I4U zp*Ll1rtE=RtKv#GakSA&?)+iV-K(?b(YZzoE!_(0pPIMMwD7B3JdVH6Hk};LIel#e zS+$$>d-b9{VXtIt&Pv$mczGWQqe= zxDRY@!=jB;Tv)A+wz>`9JblF|5~F_Gv`dS$!+U4yu?#xU>h8MLfB+m_E|lU(EFNEm zeqrI41P1Wfs{00rc{6EQWtbrXR2#_}VxPqISVPqeXS%?j$N*VOP41n~E=&u&OK+#6 z4AniZGsz4}<5Q@|0hJl&U48N^>)_XvA`rKj?xav>LR0DpiPLlUA(TywZ1oFa0 zSYrpz^H0C);R4Z_B?Ry{Xoe`m5yBVTU|DK<}6%1v`5^OYpXM8ckEQYCJF}5(u+_JV; z*T8Ys4qWolA)Gof!H@{eo&?F1g;olrHe}$MFH+_ZeZUma1WH(VO!@C?~GNCXt1u8ot!T?`@*sg-Qq&am>qp`9IRy6 z9jVvre)RLRWuk1!?eM+t5kt3NW1_l~)l(pQ?4J^j9WcZ=pXn2Ng#5eRXZZSGbB2-5 z?NpqD`eU!WfetVPQevuUoNcW=q(zH;p>?ic;E28Pw1YP)`}V%HmI;-aGa6}^Wot0V z$3KsgxdOGQq-h#H;N)O0H6Mv?CpvX_fY%AGihysyxOc(R;lNAAgcMR|t`E8T_T_!f z!w?ib8q;<8^W`&Ygt>wK6G!!|xj5Fs)2pF;`U}|@UYWN4;pDRSN}uM!jL_O)GO)iu z(ksNJ1h5VJ7IX!L=)LF=r_p$0`t~jp^uGap4SLU9hbrgBE|YXGUft^HcmHEGPVZHs z(qlue=uBXD0;I|TK%;h|CXNtk9kaMYzhK|AVKAwhoqZ%08WGZc9)Mn~XI=u)!2*W< z$yU?bP!<&3bvz?00)V>}bsQuLYNX}=8_fcM?3I;s&#gPm78pv}ZpHI{W_ZSvGZv&V ze7e$L0O(u%^wfoeWU0*?xq9sXb!7y!2iX(=w5*NL0HNKVaADV|LA+)F_LYzH+v-d3 zx_Qjp1=a3DwmrY2r$VCt{DZh+D%13;Z7E^%P*V%cUZKbbq&(yMn7P}`w1n%}j_%gy zN--{jBf~dxTz*F-*S&@(&N3{h3S#%2QFx)JFzZ7JvA?MO?dK=xoe8`j9@U6mCq5IZ zQ6`hU*(6ep!uMrIbC+034P7QDY%@4zTv=j&83<$yG;QI`-5gWLgci|lR`35OtJ?y% z_Zc_EJYewzG&E)}I1|XkRRJR1Jf&!9O|bv4W0q}FsMdN&S32IpQ^^Ln>NCn0Y-5*; zqX_HMz=-Lpw4CJ=t3Ci7M)#vOou6u;MDn0=L|J7Dppgci+8Tvu zkFS81heTS7c_b`Oemq|;X|)aB0m+(i1`tcxIJZ+-ht4&;Fo&NbSom#4J*nv(pS`1^`5~rW59P zu*#k4h6MTooua2&bqZg+WS|XBgZ&DuoGor8+uSRko+H~#R6&^rP)3e$i zpf_T;%J+HI>LuY}fX}V+u<)j)3=u$2{&zai%lqD2Q_G&GWUzSHOBqc}-N56$J8u0u zNz=@3v{-(&Fk~zYwxAbv=U%$n((Cc{z()|Q@hb! zC;OR^OfchX>@Tff(!=r(KX+=YiDzrv?|{HvLH|sRq(++M*qv%D^HEtWN)i2gZ0Lnh zbGu{Zbu#lYSKX)YV>a{zub%YL(b*BE{3dGK)sD7@dKeANPyM3pbuQAEog>ain?I@0 z(?g#H=0q9;*OB3G8Yq>Yc3#&(B%z@1)je$3jy)6U&>yZNy$hU`F+n2+BP@3+MI9Sm zCu}C?JykgYzl-LK1q!P|kAdhpXwd=2ShlqYn?<@b3`TddcO1Guk27S{dDxIC148=g za?OnF<3Uj12s=ILXJ7!5J~a;h{054kW=;BROnao+s2z z`~9)M{Wy3cKRGB%%eC8z4WwO_@{WdP+I-(Nylil<*9*wPt9##7#fUUK4Unys< z@9|t=M7;P^RnW;E1q0;5>hfibZY{qEa1x-j)e?zK&SlLkp~KwjpXBKz*JuXP7-w=GiV zuXgfWCILjw1eZ;E{#*S6|Aoaqm%oco8VUcLdoi7mKFRFHL2bm|yFVVnI#~2Y5wwNg zu?2H@n}dUEG7QiiSY1V;j)vaWdY__dw%rokFbC?}Oz^NYkVgc(?<-iWMy*A6yUK(| zfwPGnLh&E3ih=8pY&06t>x}!t)5x|K&fv-9$E^WXNjk=fYAfmE?O7T{czY28@4Oi#n@DNCA>;rO7^E_kc$?W&}yh6HbNV_mYyMys3V!<0mSvSN_c&BN9~7R1iw zQkW3IU!t!?mx=z@3;;4wLLbQV#p)C*o9!Pla7f0O)4twu$;n{U*oD%j1~k21P!uM9)NPhXtQ^TFF66MC{=6uV>tO8X8#OQ6lxPx$1wd zU?fWez@GHiM0yo#XiRbI@$=6OcU*sXLFx0G>vcIv5os-;?aJ`=E|2U845!nw_^Vjq z5J&e{lEQi@xea$SoD?)sR~negNCh_qPZIC_pjlJ zId4`@^}YSxa`uq%3x}i7g=%Bp;=lbBArVFMY2QmMZsa4D(c?|c(9h7B3;9WtKjWhg zErNIL6J7JpjWR5x;Je?9w(Aq_Qau(Zp{A8v_BXe!c~J1!kW!Y`W4hZZTM;6~45~$Y z@2h+Ey^q@?nbYDER)7CkcO${Gzk}7Sg;^234P2A&l`I5}4uqi%_Q>w_#wI0+<9U#xN$ZSifRL64gRf6_ zn|lyvXRV=y;+H4S6C@3xloC#}J(mLicZ4*imB}P zVjMH$0&PBZrShLntget+7(C+v&au~V+y@p9^{Y0G=PGVB^W0xULVmxg7OX8t79qC! z>2jOpXe?wc5~mC+w)x|s;?&cVz%>7dS{SQmDa=fEno2VBo^jSe&I&us*HLIngKvmD62#ui=&=cR zEG1JvAap-Jof0el%OG1#pN!tC?UuRo5CoYNjcKz7{>D7d zHb;<~SyYtk{*2ina?z#PITv4?LA)r-nW)2c&jGancUKl1fov36{r}l2|5*mG0-o7C zeITtN0xHmqj9;$k4WuM4Zo{EbK?6G|$+hs#=@^pl^9Qe~*6?IIL{K(~y4Kff)*Eg; zY!*PHgmv2l`8#2tpo}x_tgJ2S^(VZUU!TVxc{X)54r`<@NhTYMsb_Yd#0nXMZ{o=d*ow~LpV+AYX2qYI{fxjfbR-Tk%diTmUK=xe=KlXe?7 zByC9m9JY6V=kLC=V_4lcl10_Ij?KffG* z0jwYTVf+`j(Wdj4zHxUROSZCw>ur};R!|SFw`>lx-<}B}kVTZQPU1=hOpI*K)#jxv zTpsow4_Uge!5rr$dL6Q*S3XiCyQs@`OFOqcl1N|kI{vxwqSrNO=fQ(-LLR+5;)VFT z)K}5Cr6y~$`TS0HtAd_i={8Ol>Dduj0CcUtus*Ct8kv*hao*_dEM_d@H`Jmxa7Rvx z2ER;4K_dfruJ23Z0G6JV$Km;dFe4mDsQunKWHM>vt>+(57MHr26w<&6pgg`GTyS_t z(id_z{^G^fum9fZHZt=YXJg!)Iz{Vx&r{!H#J$UGmHnlb6XdHc!i8NoD|7}D*7_#9 z-Bf5~|C+h8Q90Ja1~LD2##cmM|64x+<@%myRhCnmjGy|vJ?yv#JM-7|s~s|CBpqBy z)edln#o457->awNjYepcq8~2)M2`SUlUIa6SlKWCTNR?hY{b?(kx5V8$&vA02bc)a znrCX42@(%kC=>J3&;4NJuZI9km+#k;g2jwr7gr@sAzaAMKPOsWa(04dM#N*ZXHM+3 z0Vb-Q7}ZqbdL^dYh$sd`3?L;EET(393QA0pEd*e>c#%nIp-n$ph-N7n&$ud3+LerS zI@)b8E2SDRfM3T$7u$;7g_zOWgQto1){?aznLt3UlqJ$!)~7om#pCxVt*L+>wN#p} zcVPH$=J6u$BM9a<$on5NuHS(ZqoQ849%3VzvHO^tkKiK|{T4~%g-pSlpvL7ALlfg? zHkVBb1_jVPfNs&y9OG~!g0lkmL>qjHrWpskP*2cr98g}M?i<{)p(Da{fn-%A%uW%u z0-MsU^OL~P0UJ|C$qV#k)u6_WZE)38BdfiU7BZp6E#4z4$Z>Acb{ddiSeHA`YlO5QOQHy8av$gi@2l&|M z7HCtn0fzpS-pHn<{(08%lIC5Nufi2Xlmw_Ldpie8CXBwEC6XhtPGWEO?Pii0UP^ld zt8vDC;5Ab*O3n!TGx=N)T2!%8;gyy0v3_+k4|S_;{;D}{6`Q5T}f6`ugwK zQ7s$kY+JB%gDg=jEw?Wl0&Qy*4whgex<&h@Gy4FCS~fRr&fUqxW2a5WPtY&Djj!1N z@_X*zo^P@N4LObDk8<6CLfT}TOSR-Pd9`+`7;Q#^IFniP$ z;ptXwz@bzIcAO7T}Y~V0@eX*K=skwKs%z$GO!rP5aBT zw$T~!vz|^7H*_E%Qf!HK)I`;5%$`fCH^E~hM(7B=OaCesYZum8WmOVZ(D==KBDZTLWlKrl{G|J$1yX~lNC0*U1wr_B}md3xX5BcU!pdBGkC944xZ>~r$E8ZNcW z0$YYU#R}Flb5e2EE9Kj5xbR;j!AN8rLZnTl5M3o$WtQ;dzkMAG3`enRM7~t0*_#Fl zByYx-Z)+VR%z58Q%SC{ifc1S^KS&~d=An{fM4&*MZ4PW^GzXKv6~yN6OM_ywpltu) z^iMV#X%enri9M62slqTHuZcJdrZ^<)2S*V5yy1PQluPkxN>*R>!GgYqXshFY&Rz|A z`)jb*Px|U`#xTUkIR=o)Bs$XMBI=lzujFBYpK@pzMOO$bueX`GfK`f?YJebk-`sBF zIlP*gw5+$>+#(1IC9hv^;7{J+51a^F_E_gZ|3q9G*yO7eob7V zNthlg_2|-tm0~(Ym$24jpsBPGVo2+wSgAX^{B_g3tr(#CgTn=gS4*oaEIBlA{F=0s z;ERhHBu^)iaUS@x-k-W+Aqw3$jNW zy|KlBk)YbNjMV|rtb25{0bhoPUL;n0I#L|R7~Ij7u>s9 zmc2|Gt<7LD^!#CzP?LXCQzCW-vB2~!Z>McFP~Rf&cu*n8GWSQzQ^#AaEvoN&S?g1j z-d1hYcsfRGuap=xnoAyADfWvrUveBRDwCr@O=J|2xskdG91DIRElcEhNEfxN%6A|g z_fsjnpJf7Y(qB3{AiU1s{TZBmj<2}4>vecejp@7ZnB(*#KWNkX0u`@YVR4Sy6l)C) zc@B^mz18%Si)-q=yvRl+oVS=oC|6Ef?VYQ=CR>(!F}NwaY5L}C-4E5!1*=c5DkI8I z2PD6tTlgG{BmrlCzpM-zE`5FnI)}$984kYwb<27z%2@1t?ZlJJuX~q&IwJsUUs_LJ zu3nV9HpLNf8s_j{s*^Ni+$B}Ry2j+Xgqp{GYu4U!DM7iLYh z6Q|{XESC%9Du`Ni>EBmTr!`WcASw2Jx1Qn7f*aq=AEsrb*_$ElmC!#4_|vl4r1|*q z?7|C9XAju`ab0`eed!5^MH0}o5Q7RxYqw9ixHQQ0-SYshHmw4)^z3NCqBp%dCxf3r zp%2=VABTug5?sHDAvjg(foZw$O?Cy68rtevsWCMXXX>1& ztKqMqt=?U73toCX2bc7|TmL*#B{mjl%X8##0IMhNT%QdE68n6D+B=~lrsPE&4-e8t z^RQN1?^z1p{B-d@=axYxtvuC)!^X%Ee8J=Ps05)&$470H`X}~&r>Yx2K)xAPeTD8P zBB1Y)y(8V+a)*l*OpjH)VIf6McK}g)s00KSuL&mdVJ)&jf|95AwOZ0s_C6KlkmxaM znHW-zs3)&Au@M+^D=a?Kzc_!GGP|8upwPl?KAkz)S}-Ia$2^NV`Y0W=6;J5Pwk_3= z^-DIT6`CKYdr=e?3qG&zj+f_bkB7czpKh@qwpr#KC@Y+N!3yp+k7NEGIQI5|NB`%s z<%!KY!&=t{Uc{g0f9m$Y_B;CCHu*nLJ#BGT*w}Se>jq~3c-O8+EbYn_mT9^k85xC_ ztK3(IRVyfd^(VBoQvnm zlrUfKdyqMK>Yj#Xs&GL~x34hrM5i{j9sMjb*(ZpleqVb~hS+Uq(z$Xi_TJVf#?q<0 zuaWjRC+SoBF~0}UNQ*$}n#bMsx@}Zmxb)dQ-Hsfm!h?g#KxVc!?!NwZg)Kx*#g(_i zt?5?C_csr|lsywJmCO}hwPZGim4v@SE4AK~_3|7(P=N{(i|6KC8guhMMA?Vdo@vXU zD7@==emL|hR`%A+^``^vN)8oVXK~zI+C}vQ8&GUVRSY|QmwXeXXY1&z&f3$RXd(24 zMgL(^h@De3*5b{pWy;Ztc29C*VDF()Dh&|P&wPs|k1g<@HFRpKaMqu}jEDB?0e&9K zVx>Ib$CAO*Uf(=@{2zunf#*z4x3|Hrs)Yr1qLR<$Aw(8RX1(|vr@7JccKcyMe^!9| z3os$0b8glfrQ>t-6M;tiUPNkZ^pU|TSDU_#YNBS$0&H^Lll zlg>`NnlOkwAOm8-2w^f3%8;yjl1+v+e-C!U+#_hH(3apBh39AgLNi7sj}zLop>nw~ z>mg(}f)iuxug9#m$)vADq2?{#hv4y4>3vb1o{oiAT5>J_fCreKCg!O&3V}aOyOK`0 z(q`}Hfykt!Pz!R_0&6$N6h5Kuy-yc~?v6@+R~ucL#ivAB&ka&-s8pWN(W#p#Wp=<- zKX%MWnFD+TUe+rR=;o6!=UlNQet7LoQD3fNRwzy~kLlKVF|_M!W+Y_Y5GR^1g{p~} zC;Y%tb#M1>Xee;?SGx@_*S`zQ3uPjfN#oowe`iw203=n}Lb>k|qd5WSaZtStUn4rD zZ(oo~n3_}R_EtPqK}*|yrnUy~rf*~_<3mGC3Y_H6#Yq` zIgU6#b>dc*hG>sI|F`79xC!KeU+IGB!TQV5q^YdX2YtI2?DiJRD-2Q2H(E-cp@F+i zMr*kI`Zlw{Z~pfq?G3=<0nZrt?!(6x-ac36z7u3FP0Z<+>O6~x@BQZ%@4e0W*9C)2 z8S}qe+v=cEjFGU2p6wvGh?4T*O(^zIOpo`Y-5df(c4b$BoZJt3;)+$@Qx1BFg1-*r z+1@;BAf*k^6VDE4@+CXs0P<&)u<{S zukN?n2vzW(cZ6boL7k^_P!FiB`2E%*>2v)^i^(hE#{*m+;)cGmvj2nN3nEp3w9=!dgJ^MF(}%(v7=@EDf{cEcFSpOH`?xg8yEzsRtgQmbf_j z8R}bWrij{(4b?v0(`Rtztsy{B`VQmP?J7Am^d04Xieb~aQxXR{`E*s?#zW&!Rcw*( zMwsC}%o!L*n9)}?lwC|Q9==lUmRQ&(J;_!_NhcUhag{k}`c4j^rR{X#rBq;x*G+4thHU>RnCPNzH3F2YfIGQNPCs_#C%V2pu_MmFMHbu0TJ#kY~Gn z!a&>s`kFAyqQa_d5aht*JR%YPj|%m-o_pjSqcN~RHs*cc11VC*&S&91t3m)ZNix@5p$xgeat(}U;Z`PesD{x%;nIJ2vy!=Wrc1%=31wi^AKO{joC7t2*1pz0)*vfoP#!<^`Jj7Ym~b=d6j*woyf*vV z5Tg{4TqGK;cvPY}Al#}4uWGunw1YDC5ft~FNq^E$bS6#|=1h0h!=Q}BBIjrOVLZed zGBi3HA4-cnUJ*d$T5XUrT^rh!)t$%g_mS7~-vw75E^Pc~`zHq$+qU&;hqkQHvd(zY zFbAWK!-gtOWE*x}+pT2~m~IY84^ovX5|vk3nU4T4x6(EPA&S}-nqOcWX`gauDa(E4 z-{YVOQGeR{()qKXT><~@LDAa zvLSw($h`JeFlNq|qBb25>lnQHKn|nYhe#CEwC$e=(lG6d)G~nZbCW{MV_AMA#h!D; zbTF<%ye@w7uo}K@Xd@#r=>ybu&s45YQt+ke;9!;BD@sI$nE>Ap+~)B^{e85EEm|J_ z;323N@L0JJnJA44QIHWDPV( zhICmRk>B)Es7WQ_TV^t|wX40|8YW_AajlJtAg|QevUaHWR2l=DV#d4^jut}LT28`d zbHs9KNyn_%#g@pY=F`ZV(Kp{NxbLGHxJ_s%&dIzj9aoc)_L zmCYaku~G`o)dYYX1vhBwT1q~0g{QKK(l*q@UpEh1KU%+d&RLbB+Y&N>S@U>t3_o<6*CX*=G8NWf3wHsXFz`RKblH)3c(E;k zp6qp7gPtryCMODT#H_{O@Q{CKnU?|t(&Czy^53G0%J2}dW&0yqztv6MZc@>QN8Hsp z=Sk*~#N=9?PH~$7gYKEje^(m(5cw4@((dtmNjQ}nU|IW3Ck?j`DrIAjnVPi~Aa3Wy zOQv2vGJh6e?Y~x6tVsY&K~Ir=dfxhsm;L8&Z68w#z4a>UzbB(PDUR{e?!Uj; zhgFa=fvoUw09;iRo{nAMlJ4!ZhE1$ZrEC7zN8K|#urCsX`5p3bU#VZQGOO&s@bevq z{I-oaZC)%p&Qn20IIZjbKt7)*l{juA?ueM$yXWUTO_6K6>` z!s{GgA09uEs+wfjWrKa0b|az*AUEmDp(6}4X07upw%ROL5JE=wHnPg@XnJnfo`ek1 z`|L)(-GAp1g$vziYdO=x#c*U^4VvbrbNnPycEGN;hL89i=M&1J59cH;*!jFp+kHs4 zP4yRfRwLxlV)4^FDc~dZDhi6x16fe;Y#++y4|Fo6crPWajr@YcyCgo>Xk6E@I06?u z(}2)wJv0=++cFqZwUMEy*mPw?Z|vlxpJBR{_qBj6nggqOPdZPupiz`Ow^4(L+rYr=Rh#xzk;jD@*UM^aS^E4mw;UI7Vn@r+$jWuufc4^)pV(Ar;bx zPwcDkL(e(6hG(PoeJB4WxCAJnxln9;g?9dbdBYBv4oMj$xsH?L?5kYC*&-wmls zHxK-A`@gl!J3f`+v>rc1@@fCbnpPZGGgAIJr}%}NkquPbrhLJHEjamdB+p6*vl-(* zD9yi|Ch5|o?!Vf!V}@U}>)nC<4$VG$>++AYdl;9(bAU$MBbxGFkp7CNXN{YbQ_a@A zLbV!Eexe${WIcRs+JEwW)Th#f8%sO@sqhJ8tDqKUbM>*tKRjI6-szXG$k9So+Swl5 za?SfEJ_?6@x8nlP>&p0yk6-nxgt^oLx`5NrdfJn`Byc@BwEHX7v zSj`SCc;sOGywzK71_50=(4K=*$xznFj^ z30f~X;1cLc=aKEUnTweL6<1GGM5d1nE3`}Wdd zcmra=75iS#)^)!Y^UHqDcp-teSX!lPL?T-Ax6=tl<-u^Yv^0m9>1MuU{acHlvNuxQ zIUW(c9uf%x$SXJQhKHtgbg)v49h!AJMOK?{ND41F>K8@UGed*f49PW!21w8ldeo*3 zE|Qk-fn=UQwOe_+-Yn4i4S-Zkh0Bo~H;b@`!to;vOAMNrvUn55zd@^RJg&hlN-+okX{M(z{xS5yYbV=*pUrgKff&IseC zM*c(VWJm3zL64?{-Nh9#-nnYG+7|uz?2UC-QP9zbG1IKYw>FOHiC!zx1mrvBv zdl^)hEL(jM1@tZnARYh}S~n_G=jw4=7mlt-=O>JTn$2rq9EHvgTG|rQ%=yX3noeEI z87!l}wM`c2jxs#hz(cU0JGBeh(bt%k@ zM;&uaSqeWO^W4-kvXj@G{b-6w+$DL($ezYyv}L*OI)9#(bjYqSPatFgSm>-66&#*8 ztM<`5kVqY~&lRKYL|eBiEN%#$Gmg~5F(Z+K(;}>!f0rytUfHU%s)fptoaAI0l+)0= z*%fDH!7Orm07o@Q%;>}gBmB_GXaeHnzYiOsOmF zMPExrL5y+i4HUVNrI`d5Qvyyp`qYZ=GpWJr&pE4W40}SiRXlsut9xkTbvPL~HJdIl zcCbNeg>vhh4APSXEX+V$^vA7REgA+n1CBG&u`j}~9D;p`s7cF9mXd?Li}PG0v28~g z9)`1Sl!88N=Z)XwB5WxTrzO`JMTH}>YVw;vSk(1k>Pik^$jVa#5 z<2mQB_N&&GMGj<9oMR{d0Iyn*d2#UFI(4BYg%qCVL{^Oh0meIV_*CXbjXq(JH~{+9 ztCo!%l_2-P{*?(tnleH9icZ}|noXob71%B?I`RH`Rru!xNxaqsn{x1FV%E#9f8vjr&IP0P)8%s~m)l5?7=asVgg`H!bT zSM~%_*ck1asAOE7{{T!LXiD0G-%^dFC+z}FyoLlGdskR-BJKoWjF0pFdR8QD7+??% zM{3rzZ!*k`^11v!&o#}7jpC%b9*$dAmaBu={%CBUUWcg_Rn&U(`qh^hUP#V(_WuCu z)k~S-fRgSqdk#q-g>yxo`c1nb0_*_fV>JZwj1YQt9jcAqtGR+ggpu5H{{YsiUuL|z zB)gT*xj6jmXs)arEVXttP3$obo<+|;FC>r4{P9`$I=!*o%MQG4Kb=V)jEl^Kx$1Wk zK|e}aw7X51@>4kE?G?IlF_K*j8{J0MRA409af}g);O0N+vUA3JSD;_%Hm@5Lja2^t zvH$?5GttS>z&C=?&cfE1ijoEk&N9MWh10M$Sb(v%@Sv;~lF$mvBqCOJP!FaQRa zU$B4^ns8Dn42lLSCYS+^ezcoGX30wrUbMzJC*QR~(&U^GOfq!j;**hT44j;d=dT&4 zv&MO-%!fT`H;R_gY9!ehC$?!19Ovm#Z^bmpnpZ>RCIpl8qa&v{s5hMTqs%z#M=~EN zKI~`LxuxI5SKe{flYV>A%p8TF;0*Qlr1J(b`qffN9q1d6N;!j(7JT8K>rFEZdy0f3 z9CZ9>^34}v%7>YaG|EqN#RfB;lzCp=J!xuENN<>Mc{H2(%{<0WPSk}xsAEkHEs;j! zOSkDpI*M9`f)Yri+(@Twz{MsBJt!JzOwdg{M8~yAw&xu6^r0pvB#1I;Lb0n}S}$I- z84(5)Q|0c-=j@0?3{5;+fyp$YM}N9M8g|loX8Z*-kes9&QFz8_!#Muv9<;*hqvh-C z-k8#6n_{zLnn1jAX@+GdC4X8*AdL5@h&3&;)KTc(9Ptgc+%Rd!Fvy4zNh1%AIP^c~ zH7|>ilS_qI^3#kDUzMxPqjrtMDIkN8LF89usOnFtcz;cK7_)~eFrr|fC4j|cH*_IfGoMs)C$UPQ`MrjHQ_j1?L9Jb zPhVQJq-Pl5@s8D66et&tG0=aWD%vSwjPgfQT+H-hN{UBZ@z~UW=N-Amd(?aZ^L55L zj%a4uamUdA07^q_b3WsqeT6aKJ%^@yo@two;z0K2wKP8%&pFRteL7Gsf|JHZG40;2 zT7K>)e4dyb^!2KWGC{`}9+hZHpafiDMhN$zE4voLD9%0$ON1p%BK52m;ul9%}{_ampzE*AJ(-a z%K)I{(AA1g`<33<6x)uKO)LqNoewi>>|c2UJ_a$|iqF(M)r_=x%Jd_>YI#VwI39rK@}!VN>J`7w`OPOKa_yt;b1__8 zJ1CHmo`m)KR@@j=A&*~5j!S5RHV;mogX>V0kTFttJqY^KZZgpss5GwiE=qv>*%;0$ zNbZ(0ayaM(R`TT74oKV10sjC$&VA|YbtA;2gUR&v;;dUk z5#PLyMlsw}w42n@{M#9}w~h9kFgU^O^{$4~P)Nfw=V)F)_3ir95^2zFP>MGWhx}?J zwMh%abBy5QttyL}4l8qfE99*iP3W4vwTweuQ5Alk@gO@p5}}C>Saf#q(E&^!Nx~=lgq;AZaZVr zue54G;D9=l$29;MB!j^3>sqE@*{RtFo~q0mgsNTCB(e z5xYEh>srN$n78Uk>ODGFoNH0+)N_swK;pex<{)D`y)rn*(!A%zHs(3fTpzuh;=6Ft z_pEt%_GuQIs zke)h<0mew_=|Bg3QIq*ml4uHZj?@5|&;I~kkoGk386%wHoFeavVRS?R2d5dO+D|nw zQPUKp04NS_#5)gKct8dZS`46ZnuYE$z#^5$Pk4~NGhE)fss%<%Lb5R*v)YQ55 zG*q8bG_J}?3%ic= zg^e$keQClk^O^%fJemegN#*g=r5;)IrC_=vIrX4*sYHIpk1SKO4q_}(gHwbaqw%01 zCm5rYT*Ny`r3uGTQ(z9%ZNcqFC^-yO!00LAaC!<-y>a}g=BXr0VgNJkPRBpif=)YT zkT|9-M{VwU(@z-Ul)icrXu}>hpROnkdW|>(uQb9&M>Q~ro=qr@F-puikp|L9!2Bsh zEPX#ZnWR)40a2O#F-ps+Ny+So3vf9kQ@?hcVxTgy??@5c^*HsRHPH)|{iaIODCtZx zyBsb_rwCLIdHU3ggdIJov+5q|+fpwn$;%K8JR&Z5&(?--dQ6&j3$`h4IHngK^c6Il ze?HVONewwCG;HUsNrDGM_|bxT3RWG+ae<0y2kTSpK9w7;KEAY?DM(15mS!R(XCP+^ zI}WvW#hJ*6leJDl_RV!VCZ0x>8ARIhq1@QygTT+XO6Kh0XzwMBhbY@m)K+}mI}-`> z$*#ubs*(Y~_4?wqY=`ebJ;)dWs9LB10iKe|JDek8SuRV=M z!)Wj9Pi~Y9L6UL~KN%gBFI?uFQB5rwMrq74DuOf9 zj`emc((Bac9S(ZdT+wfnIKyW@{;GamW5`~9l}#a?!A}5j?Ny+XOk|P? z;QcCcLX*!u4Mg)8mnyl(HBBp719p3tqmYyZ)ct*FOQ2G7&!#ILT}72i$83N6@sk_~l>ML35ZW)-IWM?%5``9T%^*+^JIA@SNi&sFC_EFwJ=K~44=Aq1Jr+<)QxgZNm4k@b4f>1n^v+c5X?4^ zbBrD-QwY1591iqbPn9fwhx$|(lBpON2d)XFC_RxE(&03U#0(4$aCyx@ZB|w%Cmn}R z@+t+(kN`Q)IIU=HTWBqu0i0lpg&t8S%(fzdJdhL*ZnW8?+aWmTrvjZciwP=6Cx9vs zIc8jAk@(YoMXOrOy=e@0Y!!!Ic*h;7FEm?ltoRumXB7-mHL(O9+=_4r`RcE*psaGJ;yZ2zFAKlPdTa$sHi0lLC82KrCNefAnlXsQqx0>({@Kk6A5ilfzyNS{&=X4 zIT-%{>(qKntd{boN!URrKD9Hc4UBxGR}|Hx(e!vp^U{m*{EC+hpaI;Ro@%oW`Qx@b z)ti8(Lxb4O>G9+e!4mB1Wz&Ds{><$f+@aO z>r9?*jEpC}8#%!hAYW>5zz5ctISmnyeA9w}e;NVzq|QAv=|MLRoO{u~jCQ88f^$E7Cw8b&Lr8@Xdql_%D$2*5f0DRzu>6&$S9 zNiB-vBZ^-q98~x|l--O?I|nl(^3_f=OY)A?{{SfCIiN-dQ$>TCx$%q|lg?c96!9XF_2Psk z-(n5Vp8o)i1h=JF+NZ59#Xo?jZ!vQ&#a+$lXe`}o&c()YM%ALh&bt-&HgW|h-c4Bf zdCehZQALBBvLg!k&MCngo_bQ5fc!lvhH^R%v|R_h_Cx%ko=Kph53N9EG{WSJ^Yo?6 zhN8rSiSU(w-3)9Da0J^$W#p zKo#1gSUJmnl`jJ)@Sq$D6j3fupoto<{{UW{jCSkoNy#`Apb^GukuCLM-qk?JQiRF=v0CP|&06tPU2YmjWCU&L-`DW`D%r^x@4);ys=-KLbJNPhL$z_e$@9!5z&|)EJ>|ivoD*^sJl5JBR~}^IP`T&e82<&mD()jqK26SaMA@B$(wHHD#fJ3~~%99Akh@ zTsCdAHV-4ypYztPx|dTLT_=v!r11Lf!6r@bIV1CTi2kMs1W#S;^Z;A0$~)cI{f z4DP}8tebbW%^s@gp(`%_pD^QrQ$*}Y9Q&VMGuo>(VPz~^pK7xd$@g=>7y$Gq)A`l( zGffta=!@mzilovgJ*cH*S2H4OlvzsTk~;HNBEJZk1bs2qsljS|{J9%Xw>4~O%EZ17 z&@u-~IagBKZ)91D`6QDVJF$;$YTHO8kA>jybJzU;0F6SBL2VklfJrzR9Q)MkG*S#M z-Q7UPN`{s0jbj(or7R?=B{&_1d8@V-=!zR?4BXSqs75e8ht`~qxWFSG)ZDreC9TWi zcq0KxT#m-7&d|uY;~?-wQn-xB#e)zBaaEq-VPBb!IpZB@Z%ZPs?XJdwF_Nk}b?a7) zF*1^ScP6<{w@A|NQgArWp{=V~o=CuEImb_0mnO8ar8gNSN>4abjGomM#j#<#aLzJ4 z4OwW20rE4NuRYj_uumQ8qb+qM!$!ivfowSA)K;9cfSAe0Op42}o*CS#j+i|$R&OO( z(2`Hf&1E(38bZz%OH!5FGrJ#7fOVy{fq)O#^O4q}hJQX>?K^$?)#h+5$xQwnkspbMoa3KNb??ciNJ}07^uVTR7 zokwR+`i}1Yi@%Kj)=B7HEmu z4hI=EeAziwIUi2>qskFPLl2*ydbu@gqcu&p*qg)mC;LuFoSaCR=hR?|+@C!FJ$o9$ z(~AE9YQV@g^MZYH2**n3Zc{7J@;g@*cAT!e9`0K0PnGLu`I(mok+kxAnur2<&*R>t zoRD#kyT^K1z}gQ7IX!A(^hcuD!aEQ+{WDCHAnhZyPV53?Z9TK!KGk1)ZX>bhpv7pI zu2hs@=Nxgt&*#l%--T2;>OmE)C?p&XeJeKdJR@%huT0<{t!)!2y$>?i!nN+z=eiaFuw?BsxA4s9cc{b zBcAn4$bC&WdH(?G)VUO?mW^td>saq^avltfQTpJ~o8X>rCgM=BGWArPO& zo#lW(!lWz*2BT>PNd0KC1mwle4l~k?_~N21jQSdG{PRaJ`AJKXX{E{UQST=_b4J%Z z;Qk_&*-9&@{{SV@?U5U&5x^ql^k%fNqZEhy zk6JVB^fU-v-hzyeT0%(xe=hWGK8BcC3Qs%%O*tbOH0_{snoZyX(tut-tB?mc98>TG zBx@wEwlpkH91PU*X_t{Iw28BJNY8vyOiiV`AZAtcr$r3Yun|VbKGZ>PnMU!RbBgcu zmWASr2#Qo=J3!C3N@+K%B6CsEYR*>6!&f&yG|jOxbJm-!Y4K_B+lYW96S(v>=&~SE z!3f9)jC9XW>0Eb+EuL$k#~9<=*Y&4mYa~ZJlTJ*ZN1iLaJlnoAi~vU?+8NlHBdkzH+T@e?{FC!a6x;FA7WbOy$ zKAxlTAIhB4i@jdvWyswjJpTZVRDorNa~r8gjmAe`QQE9&tg}q)Pb}o~?te<>tF_L| zF10Llb`hy$9mgk(Vz-fdW43tjS-N~A0l*_2yVk;~BP-Ll73N9meHAp4u?bPTJ5L;B zQlcDz{HoG`W9T#2BzLBwVC6y2PB|4N+*MovNIV|BsaO)L&wsD^=~5!G83d8jp0wh- zaBzM5QDG1i>_NsjC#3)?F6ILRl1HHYYGS$jqXW3Ax|)>JrDeuj-vEs2IXIU|lJxHwxU@Sv9+zHMPO4Y$$@1gTbZSB-Vw`-HT z2j=JLn$ok=#8L)e2Nh<>MG*u6(~w8$R<0*S7*m`MF-g1VjbjA0VKmXj0XW7zIr>&% zoJk=o&u(eVMCeXW9f_)?3}-9B{&YqJ%2#Rh8+JCXPIHe=Ya7avNl6ET&~~kBg54N# z*YK**kc>_SM?YHDDWqp9UD=b{Kth1Sk?Jc#A_fv3rKtVk6YK7hDm~CDN;}saWR!jyY^Tk${MUk?p?sH8A zq$CdfgH~j=G9YjV1D~Zn(%T~|oc9NzrtP_!PU_`l-lGki(ORYy91scj6jWT+$p6`b C$6mz% literal 0 HcmV?d00001 diff --git a/docs/images/lejolly.jpg b/docs/images/lejolly.jpg deleted file mode 100644 index 2d1d94e0cf5da12a39a2e0f675d65dbda314936c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26764 zcmbTdcRXD07Y2BzFnS$*Mi*TSqL)F`h~9!ES{M?dx3ocs=%WQuMvYz)f`~*PB^c!^ zqD71vAp{Z9_U5!51jw)TerP^ZUhUO_d!{ped)Ih=I`1(lXF7 za4|A+VT4dZnE%hm-+o9b06?f9|2u&H>wrLEaL_UuS~_|N0Q*1hfj|GxyZ?`yEC3V& zgF)diDk?Y}{Fr;-Jpj&1#U_N&rDnHsLkI^V6`~0xG$MM(f{vkj`{y(^#5)1|84T$Zh(~r(g}%!K|t$S zAuv|R-+6!m1_9r|SOFd2d(8}<2x|odHIIl?+B3kTXHI~|0Tyyhgb|5wB1|-701!xl zGUW~cLbp&J=q;>J=pWdGQ-ig$V&etw`gK~FA{&K0>poaoR4bdm)n%_)+%?ZEL;}0; z`D^NgT_*`a#S6FD92XV_M8A;&8Tu8{7p@xBU!Z3qVH&P#m7mNit0%OjM~i9)!`h3@ zetOl+@;=_kCnbCpuriTD7hQ4~cK;cFuxP91*vb0wN9CFEQ}$K0nMWy6p%b4bD&zv1 zswtN$UpQ+FQ95HYUj}wO-Y#77QHx7vR;q1I!ILa}pJ-4eS^GX=H++jD&5|{*R&Aa5Xg%Cevy1ijz%K@shY0=!Oy77Ou^Tn|2q15@O2~S4SosCKpxH&b$FRM@Gj?sR`{y35$e{nc-MEvXNPBGN{MpwwB}#n4a>;LBOcW1 z^QLJTIi^K^saw_p1y*j4zZ&4L9pQC&0eK1T7QmAZ0EjSj93V%dN`!Akt>U?et9bS* zA{7h?SVAHB045Q*-iv3-0+@5~bbu3JzG(UHYHBLMSW`q0Th_e(t-ZuTz~p%j1onB-Q0|*Wkg+PD$+E0u%wZdpUF092d(q?z<}( z`v>*_l!F03?z!|jGzZn)841PdAz7=I1EK&N6 z^Sb$Q=FCNYFK6!V?-i~bmSMZ*-C7(of#mN>5MflzbED*NC8~$G-l}<0Si}at>BrpT z?CcTs;;teCrFnFUNaONf0A~<#_%@GS^7n^%YRu4)rahskyd}!+V}Hd{6URMIW)1n< z>Pulc*J|JEs8rSaC#+w1Eq=gJ*_`!RjO|WPeY}_%fqx|`m3itBa^R+KlvsSD-~AfD zHMjyT*UNP+nz}_9xnTW(rI#-xF(y46Vvf`rbbw26QC9D#ZX$4J3fRR`W5Cgt(~ z>bjwt-r{w%$EsLF<(^X+E4#=Qxa5qOqv*^&wRbh+%S>Hv0m`6wro}04OUM)+f~B9r zGms%iMDQ9Fa2_1YGfO}MPy&MI@k|DQ1QB)wMk^{Je8O!2Km{-Y+yEIGxQ(Sxi*kTu zs1GXiLq7XXAxe@OeRpp9iS+jx8NW+n6}(N-JzahI@RsL?!?v_gum8RpPI0QXxody^ zaQaqT%GbEPEKNUN=(#j~PW&1}ocOi@DS(lrRqX-`W={_^UtyHy@2Uo3%%d14o9H*v znW2T+@7?@h{x+3TG%@C3Aj4CwnzsCl-V-30^bE}6pl9Fwu&pn9G?xx#? z*MdW|NL@i;)Q1T<2cY>i82{dh&3>+kxNxk$?tM zUfnZRVKSc)7SZZu&2?0cQN%JG4FHG=fSc4H0nw_0+|L3+i10sBz_l1WB>I077K|6? z50SuqaIk?0BAiqKoKpj5t~nSz?pSg$cvL`wTEFZd4f0;bX;K>3oeWjPUX0wmLs2EN z)jeI;Bf`bg(pBl)q6tQ8zCR0L}= zvWjmT*CwTX!*TQ-5nZ*jfOcU#)KCHf{^pM7;{La`aS(*L1Ox{R06YVL#J>~=*~TJF z0V)7}fTc~VBI=8sKA|&=3f#FYq?M{MnBVoL*z21MLc&}{h)2NcDy#j)vP~Vfj|Rb2 zBeP$eg!^NY?-$mpy=zI=(fg?04qRC(h zr4nDp^WSYjftK)T`2fA(Ydg3Ke8wR}D(UD%0LT3q2bnuU0_$GaehdJYkY%DOQ6Aho zF_kpORMvYG4?GT_)fF$ zE8oSzp1{6A^8gb{v9)~Q!t&#KB}FI2+H2SgaY=fa6TSwHroeSD{1w|^>6h`y->O9T z03be#2R(Q%4v+=JMJfQE??ezUfLDUFBq0Az9IzLNrJe4Ac!*#9ru}Yh+{2#~hS@o@ zZ%Qp!A)mI9<}1c#+cY2CQZSVJFU6nQY~&1pJN1hk{obT zt(I27?MlVW)F&*0KbJ@~p#*p%fs!i7y)B69HVBY>fqy9%(F*W@J}xIiEg^Ub;Fkn& zMh7qgA}s0!mhfOxLW46LQrw%*9;R8g`u&xk%%3s8^JkMec5Z`_^;6F~=udAy&o>#fx z=!^_S!SFZ;<|E1ymVRrKn+TaegCNkuH7$!33tf`~1Bpw`zaR@S*DaS9X{T&s=?vAw zDuq;{4zTp8Bf$eO7_Aja>jx1kXU@Dtgj&i6s9WN_m;!X1s64Ls<)=@DO31x)*XM)9 z1UmKFi5r;r8bN2HSZ5@r8oI zF*eC~TONRYndoUYCNwDFD&vcgoi9fi-=hXGDh)!A4$#k-BT@~jA0z_$IXZ#^fM%oW zxCHktSiuIKBXFV332?#FSp6WwUD@tY0fMN5ZX)E8rGiUJ*>pRR3Ze@?54xR!!#r>d z0PZdZf}fHM{x?^N4UuDjQh*T>SXDvogMnL~#JEr?0X+xj$3eOn0q5yWoIl$|4O14~ z!GN2lK`(@j&w@X_Y!0u+%?_Rlyu-xs#Bewh0M38H(oTT0t^yGM-(sHn2d}vc4@_5%gxguA*p;VZtK0~u z;kB2nMUOPOC|r-{zyFwXdiLQHzBmiTbs}=u@YsjVy&=-9!z#MyCV`iLzvLQT317a} z500E+O{6%n8VH_Yk^n4iy(<7Z2}naQ$p%Y02PH$}MZtjqiUK4c=6cc7O2F*Tb~qVO z_vixPt^h&_@aus_r;={n!$EArh*aGZnwEg>I0CQ+98)b+siWrz(HFb9PmU`&MTW(r z2Ow^L9MnK?(3JA6d1xHR%1+^d|CWGi9|1?F+^h@v*Xdz1f0%!itj@5FoUJb_jq3Ak z!U+ZUuj=%__q=!Pajw4l>ueilNlz?EgO8A|TPIrgg>@z?(8m2`7?`N;fGPeTg!|`o zOsWI`10jedlnh2cUqIvEOOOOaaR=LdFik8GQYaz@`bif631jU?{Ks{im1d{62Tv>) zcN`26hq}^vn3#Tm`BTAkwOrf)Y9=x2(DBw4u@-NC@P0U3!Dq;o*W*}317Xm`x^_?jOMH%9P-#kfPWJ%9R>&&;q2Ik&3j4e~*2 zU{PdQZiAun&9HbmCh9x9zIp+;vh#3uTYY;TLV-I$nE&+wmX5E0NwVp}FUgRXQR`Xb zwo)T+BUVE9?nygYH#2*DE~fXj{G4y*z`3S$ix|Tc`SsK$|Fbumr*V4c3NQ5?Izaoi zCAe|{FFXU7-@pZ~`+pUG|8N|bW&^)sX?L--iPUJw5y=#n6ZjWkZTMBswk{{?=x4`G z=;U{!yMKKG+7|P&(tAt+eIhm&of?al=J`BUT4x_1`qY;_`uzo2212gz>CHj)pJYxU zm%%PI@h%~b3Q=}r>SwTJ{JCyeW;Ax-qCmtE5fRVVJ}v=C4gZ(oY`=b-ik=HxK`~kA zVq-^L6>#YIU3YUs9LpyjH++DkOBm4pNp}oLuV*2d@yaRg*=9_M@uc3%2wu+d*pgs=CFmN!=?cB|2VabGiE$kc6)k9m|35 zeb3<+U=Q6tz+?Y2R3p_}sFjuy6t{MTi(hnq4o;5lW8T7TN`EM~nmH=-<2JM|{1`^_ zOR7v!a*Dj}UnXqGpFPPLIcFx_TQkUs$rgAFp=9 z2gdSw1YmqG!r#x_`>MQ=9i6w$^S!~d&X0U`ZZ(<~j0u388d?Ha;RRgi0J9ZK=x?xc z*_^_&;Q`#gr~xJ{Ff%N1FdpBOpV1Rnm^u-s$+DeLViUk%vo_rNz>93DVlvfj< zDMDzsl3OmyPO#?gq8R8lGG~^AmHMRuM5aJ-_lO$;8|Sxh}mN4r=@C<mfo9tm-Ie3 zaAGPc!{j^7f1)4aWP)_gR+FN~f5Z<8XFdu{DS&;BfZuP)svEhfKX#nJsqx6N(;?i# z^lRnBx!1RD$O8p`I9{nydlyOKKlULZqWWrr6ewP+Zv~m-cQcfE9(Zj(k+lfC4r+b> z-8{TZE1j_nb#OY%sbqFdJ6iGXMxe zBmf;Jz|0aRrfM^endnlI+tUVdNY}9K!1;Vh%275hN&3|fHQBwQeA}ELvw!-Wm47{f$%RQu z4)=+iLo&`PeKXthlNgx!)grfj>bzWrXF3m)S`Sr}ZAbo3wuqx{+bTwG_&0>?&hqnM zNgLzN+vPGDL`Zx$GF9Q86rZF4FN=>vm9xLa;_!sX{z-NF7ecLfWder?Zj@_H`Tq3^ z!LAhUFHeFBs1|-nk3nxeZ@QuD32Wrp`I_&U;P=hgX8Pl^PiAtC#&?^0(-pUi2eTha z1GYyJg_zmgAtz-?LUfN5?e15@Znw`(x8Z&+3=FLJdsGIk(j^=7YkYef{y?|peY*v7 zd-CB<_ok=SIJ4O=G#>=g?9s*fr<80lE zPx`@gGZoGM+Px&SZMqSS93v;n=UfkZ%T#&3Ud|E?WLPWmp?Vm?bT1C#hSs+3(2{hK zF=PkiFgxa-+%05tADZTTxj^mI_FV0BsC)bCm5xHo((7$6Fu(e6He{6xPxB^u?a%90 zzMS5OK19Vt@KgmW+m23d#~VoU?k4dpz8%;(wN>M-a-57cWpHrq=UF>%^9L;%%$$Ah znsSOrjj-qK-hvR|Q2)kO5_#M7aqb6*%kQs^zE2a^lkRDV8N*QzXyEMm_8g-x&myet zz=->2vqos#X=R57HW&63Ni(4^b;=E}b!^R&jOpuBR!HU4`HF zkFV%NmIdzmH}!fAje5uas)^jQN$$(C(^@^VuQ>GC>@6T)5NJ`)}T~P!Fbb z#YoV%+A(7-8kOqKjShR^1;5P%7k1H<2>Uz6Pud7d&KI8xPRn|bVi!XhXd8`l#WN|N zS*E)*!;O(F7?Q4?yZ2w*Z2ND&l~s_9taT*0eb zH@SpM&Ll@Ce}^Uky^d70JzuddVG4nn(c_%)Tq5oYQPkqV9oytYLtAS;=_2YoQ#_f~ z!0dQu0^;r6@5J)RkB?PuKM6{QJ%6cnvy@@2F7=u%kW7KaNH@qFdbUb7%?JLfc{jI| zi$H-Wks%SssKdNG;8y3nxae#Y%BFmcYsdjj;;2yZGMjz$-!+a`F+YvtKlkK1nZ6Z% zYX^961S>plP&}#|gAu`okSX^3ArYnow19;nW(SKfZvlyLCa{pq0!c*>e2xL!8xPM# zJ{aUNEM7Tf-!pj-;sALN=UBi#+h(C>zZv_^*z7zi$S7*#P9eSft0sl`-%^f7L4T%x zf&|TxiiaKFQ%)xzR_URjXWUlP=!s7*Q+Z3~IkC^06kVh`Tmn;)l8gTWb{1;)-~D%0 zz8@*A9F^JjtW`g++-I)K+cS)+`|@vYru%PApNQD;@y_N5^tGDP$XJ-!zPOx%^W#81 zwCU6d2`dp&zVzLWFvr^DiK6pde4ao^eTqdt(!w>1?y$uGQt}GSram;;9$P`dcp6x} z-9t4?qEG}nUX6%g9I7P{u*`FJD5>I(gf{HSBoU2|~Kb=h+JK49|FEdfM*T@2l;gQu-tKUQBm|c7q<3eib`C)uQ0($qzx1Va9^H zXd@*ur>v>W0ed>+^zp78<8TpamY+4B_9$Y0W?=onD2CUSN<=Vp?dR;Y6E`W?`*um) zWvT%HmYM~046V51K@#Ae1b_rVFFPFM3PHYU70>j82v#T{r9?sI(x_8ZPfBo{nr|sr zQ%h=;3vc-F)`^Zvb7}4)#L2+mE0G!@|A@=0rwW>pj4!0Kw_T3egY`G=;`1x?L@g{LhWfH)Y{r~- z52*r>_B)MSO4M&RG*RX5{v|=5@kQv4qSQi|gc{{6ah@;F&dG%$=XN90cP+KOVXo-bq_u8aYJA-QfdMwGMzm** zW=@Y#0=9m*-tnp_?l*g>o&Lil^zFq~lbO?AvA(od4m_}(vCzvn*TTHzvjdk2{Y!XC z1q}Jq5*o6FgG3Pjm4SbdK$rUe2nlKl$Wj$V9y0)X8gw_M4VgT_oQT0_o5K- zU+h;UhGAm?@^f3n;I!EesZRb1?yXQ3EU&7^4Vgr&HR78%eQd2=%R}8@6L$@|N)T9kbRA8pXdZev(S1L33TE zi3CUtpOkh>HNumtsS6)UIQU%Ra4m^S?I`V5kNnkgJ~>^77p{ImN9g+~JJ}K#>Ns_* zn&2*nx$%i=X66Hh&lO-)B#$vDOU8Zo4>p4!`y*IAFAsdVLxwSNY3Pb@?+{Fqy^K%e zk!kv~<@$-<+@hY|Q+U=gx4sbA-U;$iP+b`U61-4v%;B%tj0HHh2Vh1Tt7x4N22wl^ z-;*xYPE2d4$M~_ch}X#Go+lpD!{54KZp7&5IQX>v&o(9XzmEP%nt4pxU^Ju0cwqMt zQ7@H7mC_(pR#~cz|8b#yVTbp8#=)tBeL{0{8ld|5*^$V8!_(z+vc6F+p1D100@l)n zDNN&3RKO}88M=yR2J2HbBmgP;MTUN(R>T4zh(=F=i`o1LU}81}FeK2ybBAMqS42+V zPkqz;j}LNqjAgel&bmj6Ir+shKT6+!aVq$3N~^qQl@??K|C3#KnbCDGxe9NOK=5a0 zMDbR5MLmcvQ|QhUyxVC4(=c*ct&7SEQ};}GY+}>GglN_o@A%@Mcc1mOLY0t_9Tv<>YWfsp* zO>_DdgMGyRknwd9jV2ke3kY|mv~qIesnU4(jE6|RSVJxZLNH{)39GK@;nPh?Cc_rO z-bJ^wPPD?)Qk8hns$b{v!Z`-mvPMtea%w%^#JrRy6IR;VvZI0@pI31_x6HPgOzziY`-pFbCGj(`J_ofc+!y< z0Y<`eJU2e7-yR>d6M7f9`|dK|b8WjvaEFi^A(7c4BO{uz$=@V%7y0%M&n(eYa6kUq zp=SZcN7rMXocq{c%f<=Cax@vzoP{^!IzI^#=S(Y^sm9uRknP!odrt=F-KWS}uPg;& zWHK}wOASuTl`xQ7C&IK_087{afNm$kHUBk2!MYZMpCFb$9BL>%l>MNH?<+X7PhT8& z7LfTd+p~M2Hcsa1TBF2~w6*Eng|_-F3drwwJJnqD=4T;ZF&f)e#?ItY1@l zSE%l{n&vU#n#+I8?<Y2qi}UX>-)U91o}X3ZnfdXkCm%lGq-=I^CGDlarY$Pn&ZPd`3m9_+a4 z)uJWwX)pC{-?B!G$*lZ@j6nF!w1VK7sM++|V5xRzS*9Zeb?Lz#!r;0aId>v7D4>>p4(kV4Dqdg(LaXm<)aL>FPS)lf+<%NYw@$w z3&XZYxG&)c$<;#6JS(v-gYU%?kk@k2+vN(^<)K6fVL;yaVuu_`h)S2FRb}A#prFLG zT?DOY7toZXV;;Lup^@4rBe(8>>9FEqj_di{Rn;Dp!?x0i?sHG;oN!|2c%&$DE=a{& zIM*?Ggzk7Q+?zVPx6g}UD4XKp|L z_%>*5Kb&>!0-IXAhFie;8lm%rchRxE&~OP)Zp@8$zNEeL`g+glU&@5N8}IM!D+nCZ z_C(d)t9V^4B5yxZEh3tF%$SvF*j0C8Y4#k!V*DCLJ7|22sJ~=7IN9+L7uElsrE$R> z({y^b+fZQt*A8dhm1b6I`*}=iS^MVMtXmVhoSkqOpq#qIsBEfQ%)ec)_3SC9ieYf{ zqJ7r-$bePw#cv-nJvc~OziYcR%0{Z{hMuSnN-mBMRz7;BbOOUe?|xJX;`t%c{QlNg7dfL=nk{uc9nsVM4#t!CD26*T)gSWBB?n1O5$skf^D0k- z#E2TUMU-EE0jZ;H)2-8YW@?@x+@!niFID@+Q*(*`8d4zT@(c5?6bBVXY&ggfkSC01 z?n43|AYh2Pp9Qe!Zr~ZtP*zQjhqqJGFKItcAb&~u?~mOme~0*X{+7j(!iQq5tATRM z5cJJ_=R%B@&8Nb*Ps(1jLEbv8RYf6>jJ(DA?e`zujcM<`9<|y0N>}!{iq7e3eey2a zrz(qJO6j)`yo8THz?-?BjW|7*y0of6j|-1%uF1IX@~34+KTo**U@-HowwF1`D;+%> zkqfzWKJm-dY+}29x2r)HiHzxOOohENnv8rn%H$OvBCu8KjchuEks-{YbKe zV_J!B>Nn-kmBBTvELY7~^p&*GtzCG)Js%feu{(tZdV9CqyY9RE1vIUKvdqxe`&qCw zmj}*LN~@(GZ{0w9E`Lz}M9!cq_(lUt!_IHoxo)|+a0aV$=)caO-9#P6+O{ZUNJYBQ zrlSh{%u?SRmwIa?EZk8O{aNLb8FP;j)&EV=pVY@@R&zaylF~lG!IszJ>iag{UXxR% zpFxU}R^dJF6eD);oN-C-V7K2=3q|~(tf0Zxi1QJjqE?R=H(yW?SL#tPLf9a>!u^33 z;hJSwY+LjZvLj|_=J~@sJKbZswN2b_DQB^#v&~U^Hgt=og-dczmGRSv@q4vzo{|r5%9_qTeiOKm|EyH;q5qe#GsXf; z-)*Ut*CfWym$Vb#e&0+j(~7csu8~wL%2~6b!V)FA$bXJng?K72I;>zp{u?W`yu&3PY6l*V%;AmNtg+#&!g96Y?XLz2 zegrDDk#tEyweQIGr!3CJl_-9LOOMOXO{;6rzh^g+zxSzqJFR<`&0dQxNOt?Zg+~Oh z8oji4)E_mTy1dEYhL>GeSnmEdTG}Ai!r#|;E)*8r=OMBdS7~PSdzf*;(KROGJKJWp zsQcCMTFJ=lgmIPgOZ8+E7=Y?rzynb_m`fuK?aWKaYqg>ORid=E|j1t50 z%guM9mo*O>z9e({Ub3vf9br|tJxP}hDf`$sM(|nJPkyIe(tZFC2+zPfrb0{U^d_05A%Y%(7EJUZiD>QY1d2Nuif zE-UYK`%xfHik`o8~^uF^ah)A6Ney5g*oC}ywi+{|<9Pd1Z-(M7irb)^jDdllw?BDJ$Kl?(^7 z15SH1BDlp1>~BqSEnNvSex$j^i4M||OpfFCk|RlubG*85I}j{low~iiz%*UNyv(0n z>gDGWvn+zTSwIvh@==y{%n^+E{D7ZIIOBYu@Zd#!dhL7hQ>&X>4hjh>kL&7UxeAp3 zbQ&6SnC8WqRyF(uSiY3q&QRkCOxr82w=Q=(j$?cE3!Ab&pKkUpf=5K>nUjBdj__Aq z=fNG8>k7*kk4Y8hy`1~SIxf6Tsb9NVXY3LVSck-1AdWWuDEd&WaX^SpWxN!Zl9{G| z`|=xhNDBv|x=O5&>iI!NShL!13B?f4nDekvt#+)hR}1(G(BtlQfhZ4E`m1H{GA7Ss6~ zxFe5-M|S0(o39QDFU1O~0@3*?iEWZj4!6~f!{Wa&1%I3ab7xg;^W}N*$_W33FHY$4 zh(3kWlw<$PQMUgPRvfa|aGN_$+>FD+M3^Sn{sdX=|Iyj}2vC3m%9=iajY1PjG?oTb zhQgqDWFT0Cdo1JwW_QTcM#;^fvvV30+kUf|6;N7jL)aEiwU5J=C;|gy>zs{k{*S+l zzZcVPcW1JuPAQZh-OhyHZymLo+pU<}eBU=IEjRR1>h~&fQy@(sJ6H`Jm?-D8{l(-bdninyG9&)0T*|BaOBM4@${diB6ZBmP>f~8=Cv>i3PRxA5=4{Ei!w|=7nJz z<%A_7Mj^?Y#le=-l8z(or-e^_<6KRnlmENuKX|u>HNmVQ@R!mDJ}xCoEA%<2f zvTlrZ&dKM?5U~p7`Ji|(U+-3~kGqn$S8tmE$zr@VE7e2CW{Q+|lFP&wMoqIl8&_hI z>+n6Wx328nEebcXLD~A{^HBXbi3EB@9e~-X<>7bv+vm$?_TVg>#w@#w>Tmx7PW95h zK_)N1gz<_$YPp#rK1`taILGDzuK)Ski}lP=TGQay=C2Yw?Ke184Xq((taJa>Bv6X@ zEvh~A_FHmPgzp*1k0=nL3yP!6OVuSU*B2*W?f*AOwAXtI%0)*&^jsi+T|4XMb7G z_@Ka*@?Pi9+o_hISBeiKuPC>c4trFMjLeSk$k@yzwWznO<+qBMe30G3X5I}y-|1JGK{SQ=U))oOI!vRLcQkIcUIBYJs$ zo-Ti=^W87mtZR9xPCF9Z-G>@5`PPeDMz3|bEto!(xa_`6!J>j&9>fLBs8{C&XQhbt zd2evL6fiwF`)^p}m9$>gNvXnH^|j4|D#J;8g~rw`SzUJX0u)8_w^WutTY0NV3!nJ9-Cy(jl!}h|=wUVb*l8NhM?bNzs%PV~ElHpIUTt5#DPOq!|C}>%R;&EjjWA^URRrMKk`XJq> zz~no2!O+CT(3jDb20{MX<0D_EH@MHHHt2a-eP&r-rB?(6@T7eMWiFF}SA<8LKQKgd zO-#r|mS6fNwj3j93u%jPYrR~j;Ybh}O*OZ$_Q@Cx?6>L}M7Ske67nzst%XrukC>JU?`zJaX1NlWut%sq^d?i~W4u>UB@~Oo@zRP@Ahp3{E{)Rm44?OV9 z^1V%|deKr)a{fgtYO2`_J(}MeOp|viQx%RS6uC+g-nL?0wS(onQ9f{g21nN7cc%0xP(Wluj>+E0L<_y|>B^q$3p(Nro>q0a=kRyDZMzz3wYpZA`UOjm!}`Rzau1}OBP5yMF+_=N zC_JF9F}f(Q8#zp?*u7}vwONUS(uy2%X;QlzwO3v!i7TI%_C29`;SK6~=9 z=EK4(>S2E){%o1{H`WcAmFF_Ka}KhG@>Kt@THYLc7xIUBY_FAL(z+IPi=tf!a=arF zhZvdN#|@)J*DXoDu4qtz309Yd9YaK_p?~sxk|r5uBHay;;gz7?_dCc`vV#(RGN{j_ ziHfr9wkx3~J^B?sZRYe};TPB446Vj!JWAj*^R~G&-?X<|)TMbLz2J4C%i*?*9n)D9 zs{yWpUI9{keX8TbOku)$bDSk})@Bja<-BJK!l`VXbP94BOh--wSD7M5*dH;JHMUBp z2)}NVZq2@N8qpgQp@bxuo1lLnWJ$LuI=_ACc?Bc+*8MFY4<=0EA1dHb?#ys_5carq z@G`+T?@4Uo(&5B4iDr|WdfAv?H8on1=cMXMCMzE;(mzkn3j0E$Gd?eKzUNhg!F!5Yf$sy+TiKzq1U^Jc$@% zj7xCxqN9guN$HkEF9;S6k7LIr#7cOtF>wL=CdlDt_V#6%vI+O_DxOU@?pUO9-qmiJ z;4!n<7~K9q#?tDNZrD8!o35<8rS62rTTGJ7CAD>q^=tbtUW#Z^h!YhkVufcYKSLX> zpVr_qJ$kkjb05Ok;;()D)eFSYera-Wxxtp7NSq0lo}Y?SB=_z|QPBcOvS%of zu9Jl-y_P9>;#SnO?j6qhKvC!S>r(pOJ9ci0hDuOPx!~lsj!Ip4!m|Jp*;}==&#cn@ zzQTQXV-m4q#L3e?HWKqZM(Yk;Va)o|z?Q1(ji_m}i-%NF%*xJ>9C3E_S?ylZ)d-gr1Bsq>|=_?aaG z>NO6Y!AMHK^IP501QpILcK6*uH+N5^G;KI@ZnM&@k)MOQTlcfRToSw5u^D~J3%8Ha zkz3K8df1HGw?J1lk#jJ8>zY^!<2b^}898Q~FW!q{QIE23R>(>C+(L7a*VeQQSUdQ7 zwaMP-iQUo@5_OCGg6^|};4GGqQaz_Y4%8OeqNPnUjb6$M%v6_lp)dNScjsE8|}(B-Z-Tue_R?g@ESD?c%M?RgRI#R+KZ?l zhbh-zP;FoVR??%`R7+_4-^e+5t^Vww>^KBPnotcXNPyZu=EHIeN%e6Wk~PA=G`GXp zzx>d_O$Hz2tfoB^EiCEMa?!Bj`_W0Ygqy<IxkiiqOwcXE?JFwY0^|Tfn+7EDBzickrZ23RXxaUHUd6U}CJu z*Ku@%o4_-Z0dDfZINL0a-`0OIEh4}Da_IiPZvI{>DO2Su=bdS@u|1(m2$>8pYpD|9 z+A(+rut4Sp)%U540O-j};GVQQWB?4zbXryaU?SKgQYS+_?@2(gyI7P;k|5_!Q$e8q!$FRd{SrNIvfMd*L)3+Mx-JPRyr^kfQ zy82NmXH16SO5jkrU7fGbers2Q=g=l$xmucS6t`?X-KjAS3th44VCXpX2xh}-XPvto zPwlD4V~*gdfhQg+WGJ&O-t7)SCN^F6=NIc4{>%lq+O}LMdA#a}TwbU~6yNez5_6wc zT~a>tQ(iAE7Aw_6tsD<9a)#xo6EnncbCQB6fmfvY7atM_wi*=$>B6G?zuE-^${0y= ziG66lcC@GeSlYA-)ViXghrd?@1`#ZRbcL7&y`z6sGxgg~b&_IJNHHco<@za)HwpRY z=-d6RwX=oAvoUMSub=(50aA2Bg$HkN^}*q{U$Alfm#y3vT5?Sb!Q}OUU#- z5&i||8gyU%y4;^BEDc+&q)1U=+NR@-6S_UzE3lI<%!Qv1C~9v|jv8w9q1zw%b+nmm zi@c7tlvaj}KR7#rgs8`zK2}=`oXwMEu~1za`GN}2AX`6v`XHo-78b@AO@45;%}E&F zVePl8>@f7l%fcn2Z-Y8zt`)frL*`!Am8hI8i;FM@x zdw2n2e&Lc71=cF$c;nr$OoSev&+u_6CGmyk&jCW2?|wq_p}1hwZ=W*j)VwMa{~d<3 zxIN}pX{h>wtRYasJVdJ8d+TJO`{K&gJP*la4wQFe*X7}+gTPl}qOL_0B9i9ubvc1R z-47N{K(^;;wB^Dhk<=F2lC>8%1}&L#w{?>YoNMvV8x~VGRdT ztm65DkCcFrf9fk3;g|@7f-#x}RDT~}sj0CBB8a;`w&CW-~D)(U3hkHo$@ zuI!G|E;)qf*eX*#2mj$1kX6#k`eL%N`}*6o9F{6UlGf^vwMXTPr8Z&f0i|u$NT@# zbF6QfZObrVaP0Ivp%8x1g*QJn7#+K;X6FiJV6byB6?R&FWbf{>$2}~P=s=xBANum# z!bowj`Rcl-Y*nepNyLLsr&aVkC%i9&MAa^$ucSTDHSu+_mw$HP_u3{q;|fpDde**g zhjFlR?vIS67`qynLc|i!6OJe|2S9w5XJAs^TKAoHVP? zlX05FAl>8@MNlo2eNMVitbT;ApuDa`CpMfx>#fuHfU~}y32lmx@~c=iSpnE0T^_IX-RGMBG2Q)7l-h2^d&kAbUMt^!D^XA1&$4`ly~R&- zR^0ZYO@}->>xh4~a-EeV0ap%pWmpSRG!A214W-d%O+K>by#z}-)53zl^bzSe*cpfOX?x+A~k@Gs%GxVCk zWJ2!HpJ=I0`gjITiKz0sGV8GgeAs)0KpDNh0fSb0CIuz@n~$x8v$OIo?Wg_OtO4Py zst16x7|w4&w{KZ|Qvq2yjdY~fNh}oX^ih1uOuCq{Mn&bWjh+W@@K%GKteDc-51D>! zaCl@Mc`-Fr?MH`Qsudw@kD=ke`s-46hL*xN6Lq+?y(o^|tsHCg%#shqyK-p9LCK*(J=4r3el`t?P5D8XLcTtcvF!Z5dM1y+u~0NU^(PzqnJq8Q-cGLTHpOPsI8T0F>HwYR@H0ShhPsWIU6At4XY94>YLHJm4vOQHSu>gUKP=8dN$3pq z7=@&AKGly}q@~Y?tzs7LCDrJ>DI!tqBxJxgo+! zuwYjeCYe)COOxs`?l(?G_bf{dv(XK{N=`Nr^=>C_y}_MH^DF?i&zlOAbLU$o#3f(_ zZ@`qEW`wZ3AC8rBzrIsIT4)>j{aMEcp^Dn<+ReC~Uv2l=Xfoz}2h%1s)FDE#_Y}eG zr4do!ZzIT<_y2Mp1Y+exfL#z0!~|S|l}T`!IYdRvXFt`ki-Y~!YKsoij5 zJT|tE3H|JYjvhL?9~(PFBPU=ai7Myc^equWnnGS|Dy=<-cl-x9U(=6yq(t307Cc4T z!=KLjaMMe9IovkauimgFc_^4xk7%>27Cj?Mv=aLLl;fwR=A&mN3k|(_%DttwU+iUk zSo|v$)S2%V6aRVLsn?c2Hu@uhKh5r8j@|VYOpUql(qh-q=Zw1KLP(y3-tY~kl+ne3 zJnw<>a9pkUg@KHhYs8+cl$tEcK1^HnorXa*dPi&{=qz#el#Jli5w7MzCB8i$E^#Ov zwo!b83zuWm?-bkbLh73~*$8DX<6#kfraC~j#T%KIq4_@Or11fy_jB-A-{;khllm4@ z#OfXN?)V2cc*Z}*F-xBZr6&lvdU864QsNRl@Erv#iIV~(V54vsw8~RvP6*(Xn+Lw3 z!P8g@1qBVvd$YrU02A;rVC5>cLw5+~p+O+QJ7Zl%>YT98Ajqm@84Cigv8#+|vXS&QgEbWo0)RT2)FmidY{1hlVEmll)jcj>5 z+k=9Hx>BaUvsP2#?HP$7CSk=QU=(i$>mqy%J%18w7nLzk&zcL1%i^IIOqTsi*R?iV zD?FQ$ZxG{wwoztt8cg~!f4zkWX$yMkcF07HQohDoQ$_}&HmF^RWKWgV$;Z{!klu2r zz|nKC7YWA*B$t#0ui0IS@pK+(3->=1;| zG_&X={?=bsogg7(IdzRPykE)rrNozthsSy9z48bjmDkhJx=5q|^+Y(nU_KR*$$$6D ziruX{ZDy%o#9f^1?)Zc@omWV@_Z&nr-?trPOk<-X|H*s#Pi6wW)}`vVPtH;WniY3` z?W(gf=A5pTUM=?ZFgkw%=`O0XQ5pbetE-0><0B^EHwhD%g*GDcKfCITF^v&{1wnW` ztj*D(@Kx3)M9qW0*VhDRB!v&u@P)qd2Ck3v%mbC$4^1AkcpTHdQx_R7W0P7e5Xt|5 zO*SsP(-uE8$7p}epuqjF1iBhMS=wtbC-C($8yNcdK5a<3Q*K#+GXsckJf=igyrgmz zMC7?vFVrNK{;CvRA(~xnzpMztG!HB6@dGo<`|6hR{rwlsm95!vxCbYSyv`yazwB(1 zYWwIveTz(fAcrlNMCXCY7K)<} zcMVN)D_83rojjCMy=xD@8Hhn9&1LFUW6lGnqp^NfMn25XGQ{G{(1nK~^H$e}Tsv71 z$2zKigV{LczgPy{o1f^c8VRpL;2Ou)iZ{ykyjc?y-#%qXbvBwI%|wrSNkx1*H4c6u zGt5Y=f4Gr7QW*8hLyznZvfFhV`)YPCSjpN^)=P)AsULoKf53i0*M2j{_fqJ*=v57Q_p_>8;5xT! z;E&@YoQ3gbo!sFYBC2(q85psw2lxQu61b6sAx9k$NFeC}3#|980WcLt3Mhm_{y%;T z&SBvDYzw@j70-(7EzQ0q-M1FSD9!Y++E2(7ySCeeymv~110hM3-sXu}d#mn0#cg8P z2CqYT*}tXay>xjDsV;KaH;+RhG_G@P`==D-H1Vi?|$~0NBZkBU4i3}2=^fxH$oBjz`xH=7; zDX_zP8jhj>QsCjJ=aPtPC5>BuvGD`Px~ctaJ}t&_=CMY??USc&`nuQjw-T2as+@Ap8M zJY386?AoznMTN#A1AlbrQ@&-t%2hyk>`c44J^IK+`r&M=D67H7h^5*DIKM|2uVF{$ zer#lmQ%u@b)1pj$$CbPR!Qa6B9+Qq;YDU<(kiHMW2=YD=uG;EVYx(5L9GCCml9tre zi7avO(66j6k6|@>4cIWRMU*OBt@J%)KQxdFz?1Y&gw==6ONaFk-pNv_G=@ib9qXaRCm8aL z`512j($5qm_u{2TOjErlnhLp{V=uelcpNn(gn4Ts)g~bPf;0%W5^Sb5d%Z+RB_22G z=JRsloK}DOD8)9#X_TUMIvjDfifE3sKkhxJwG9=zjk(KYIsU|;!Y%m8^s!C-hJ9Q@ zh==QYA2sD(X|Zd+n=6Wbby_#pJ(BDgaQ1lUpHtPo;I)mcG<|C?Dq9rtj`_i%{)`-E zeuRypY$LfGdhR`Z+euV8#lm<><}=+a+jUAe#`VB-*#nL&0qI10?e@Z7Psh7{pyzdo z{_cWdutpfuTfcHQUX0snJ!V{%49V_m)bGaA@S1JORy57il98#|Jq90n!TS=Tp$bxvxCs`;nY6!4#Ue6BpF?p}9+>JaOR{ z5y#r0u5^VAt6(6eEzdejG;{8y?53^YHWU{*9>JpUgH1gL4$qn5=TB7BQeu$wQm)Ya zZZAghlzWPA93!-rMBlfdOAIT=IB5y-C~~qqzTRUQ`}EqzNw;h97lzJ?+|N;`a|b_+ z_s^W#R0Vq=yLZJiMkpqm0~ACro1wh(b@F0%#oUI(?>51cgI!?^GE;J;rcZ!F0r=Ed zo+YS(V_@(V-s0E)N;fDd40PU%i1MPt7*%sYOu~3ZG@f&fHYVD}q7HX-Vk=Db$MLs0 zv)i&jL3HK7IMShO;j@+((e^v`ijmY!<=A>IjXz`LuzzId2k1u{>f?8-G*l>Qm;yoX z!OCAlMI%pH*?=d2--n(#%WJtcsb0EWiqX23PxG&t#OS$qcK%w=f|3QjAeDyT!2Y^S zp+SoKbcawNbz8Cma{cgUWvWc|*Y92HzRZ|lzmkF59KV%Y*!RD0(9rBJr#GuHBv?8a zbh?wWlW!GIvsj<~My_=EX?;F+YuO)lf)q(5?8z@POf^9RC zdE_z?!SGoX*-!yAX$*?uB=k~a_ADJ^*mZVE$(FD0=ixS zSnub0QU)mc%(DZx!TC&&WRNY+D1whInA7ki+cCZ{1txKp-r5_H^x%KA%DH##ALGCNDuudtHM^@d z>?2s;vI{R@1>1OWS|!I}GKImglZ=!A;R}JmDYKIeEdZ6Gr$Dj+Rdm7^3H#5UsO@Mt zMl-|n8ZOlZ1e#r7>$QBrMCjU)J=kXKD0B*-LK&xAm zonvANr^Nd48@gen4YFrU$Ce6W>O7cYXNUXIi!A5kus_0T{!v~GZvC*O7(vq7@L6@p z{AbZvPxJ|)o1rmq};D~{` z0wmdiamTuP5eZ(VNQy4_7 zEWCfyf&bGd%Qo>IT*&dY;^!MZ8YJfoN%d&&9U*ayoam2?yH-YP66XsS=Gf*+61xay zwS$~74X0U)!~yLUZ68Gpcj`q5YLCi}y36Ysg{UsuMxW(zAtbTzscE$OfY*&jOYAYy z;Y>w*P8Xld;p*?&-*sA8b~N&s2jatqpSMn zOyZ+`v;#U%9FpI<&tLZXMugz-lMG+pcyu)!KRsLtHujZtaz2riHy%--wXR63d9^0U zGb#Nl!75I8-L-#5N1ik3q~w|v-grxg`Y`)O!%<>)3mihce#q03zmM1Au)r>@35%0& z(B#+0zn3hn=ffp`6#}MMklC5X*GyEq6vlk@WF4Pl-<0?S(5R%_0yH@j!1gW*fcv7z zAp|HSo&*XOK6La!aR>BHLGhmBO4xy*uDqG_s}Um@R0U9DaKGW}j4VoYOE#^oUAILg zsU*c$#@#oyJq2C_jdrBE7A`J08_2}X&-O>o{t203w+>CRppD)49azawBqwnJ4t?X- zH*0o%g~X^814$qtxhE~@WIlp2>~VYnRk>udKnW9h#Fkir!$w{~wiCZ;DwU8rjs+i_ zSI5e4mObHn*@w0x|9$!|LpR-7x!|_%#>GARQH_+kKNGFtmQ(S48h`p#jK`?FXfK$> zBHdVJfBV)z$fkO%Q0tfHh0Ysy8*BRK_3{j1^E84rH??BFV@;`UU>PSl(iwf^v6>@O zo+0B7`iZ^$1F2B8?9})dRD>U@g1aXiA z6N1sY3sEBzeJt#P^mj`*+{3)o4!-S4=xYr+x}&>7sS}67XxpgR zRUP8bC6y!$F_6O&_(m|R<81%b%>s0M%88(`)Pl0%aS8h{ecIvtRPmA1=87%CC4qoM8+lQtO_>2++wkJSr#m4_S z^7?s;;3Z!K2o{s8>gmH$g>N%<3yY@o$-b{%4L>b|v+180!h*C7*!;ILlWx9lxfz)m z`5#buU|TPEs;q!aP?REDO7H#X^d8Cm;nwF??|x+7bH_sW`99gG!9#J$$Cta@b$4z2 zp9o=?@CEe}_qxRFmQ?KM&Q+&#qYI_JzcNDs_{|Rxt@tfwv2}++kG}OyC6j7dbVKL! z`GUNs*0zNw4B92bBevS|dt{-4^-){-S_7w#)dKGUn9SpU)QfZbd2`Ixf%3q$O%EHf8#@rpB~idrOgEa8c3+eXT6 z+ocf0pl*{kz<2mqAVQGWK{0x@m(MpWB=7aQ-lpKb zu@a^s0k&-SxpsDHjC|qS?#ta+@OJ>NPHGwfJSh?Apo0cY9jM)bkV^1VV**OR5R4$? zG04ci2-E^87kaR^BM{pp1mg-*gK>Sa+j3n|vRS?H{#NNuO=d&CTjh(l zPm4lZEAom&@}fCD`{p&g2!J7lwVzR}dDkkV`*m3}(}*f^@|3-sFw6k~yr zvDUX_j#qG0^w|))w{*SS!XrBO3^}7n8A1!(ld@)@ze2uv&sKQ*)@LGh%|?gAoBsKU zSAVUid0qxnl_QingLwz9ERBJgsgQYp;1hKM7lYH&6V+JwF6tSyUF*!KxhZ ztn;1+?HJA!Nk?KO_jb6sHr2MhmCO(~q_$g5*jzgv{uA{tueJ?sdR$B*{uRH}y2C0{ z$;)HUL+61@UtjHf;C*W2=Stk-sTOJH7emCPb8l_bJT52G|h10O~XABayq);m1l|m z?UtKaj{*nl)*F$PxVOTqWKVYl@NN*vTkYSkZ+k#;#m+}KWf&tX zMgt|zcINr*Qh9}%0!3K@DhRxOK{OjbNMa)cS)(A>iwJ~ON?jNcCAkB7fE37m&AF2J z0B?}WHwk^t{_kOw6X#kWw~DF=E^yW zPl|o?#5RoDgmFJlt9;*%#s8{SI=b9ll=tH}zum~ve#&He|D25#}$xNsG#7HDcNccl&?~va2?_Wi4{p**+gApfh}%8gf^L>o*_yTbMK*p z*&ia)KzR@=qUQayCb7L^!*0dyHP(RJ1G{uTN*(^m7axR}vV4_QwYe0IAy+mp6Jhj0 z)1}@nYlE*>QYW%qmmL*^*ibg6;XF&5ox9Yq6fa3gR|1AbBAo^;U)wpDg{=eF-x$94 z%PY+4tEg@H-EVpuxRkSkbPp;&BGtSTOvJ@f@JdS zK2q&W4E<|Q(d;nCc=8(O5&wAGbs)ZQs9byJ3*K_p$ud-Eam%}U?gLX+99 ziJq4k!ia~J$tmr024_Ip|R(WHwuA^{3h^pnm^${PoXGV9tLd(eO;9LV$oH*a*G=x%@ zy7oBJsj?f9mg4q>Rp9HE=pL2yFXr-tXPIZN4O%JBQMHt8*93-z!M1aDx2yraotv^adCn*@$vDY@w@`Pg91p$bUM7l;fN}(w zYyjU>(ttl0asWA@phJqH1W(~3&^-aw_iga9{RkRkF5&TH0#A&Hz+Dh3$SQTZ{wH=# zz}4q*nOp&9(9yF5EbG0?up#dx_l}vAo#A=XTQLd=i$Q)UE8WHbfTIb)c~s^8rKXs} zwr}!t?G5@0?JkKyyPO%NJLyA;aa9k~JmSHZCVe-C{k!QyO(t@ilo==t?A=ru`%&scs;o~6Pf~P)|32v<@s}S~qt6mU$nYzRZdfUNdQrDYLGxP@#o-gC5$XB98quwars`( z7xe*r*z7wi>uySEyYbiP<@Y3MOWdK}e-s_lc6aqtjQo{*-?@|MzueQNQD6mhM`rJQ zhv4(lDLQ{lZo4W$QcN|p3OlK&B9w(@2RbM7(Fm?AhAsJ1GeSzoh5g!qAU;` zdghU%qyDY?EKD(s@$8Mad#3JIE#; z_w@c6g(NA)!F4E)dA3N>0x4gvKb+6#iALUy4>e@A;OWeS3&4It>qVjx=rk+1;6yqq zKVJ#){HQ00B^ITp^!>P6%C`u0CLX%wl5a+HZkBcNa7X;poXJI}rvHFBh?mMe6(^Ot zE(4b3&D%8ye>gmt708z9HEV;-LkXt@4Gt~aA5Ye|9=4Ve)i1WhX>u_}+}TU{?ks9h zzUNlbv2l$}j9(me@N0SupYPdsDkeFt=*k;G-sPn!TOK*)Up1@UD?R7e#6sZ()u)>7 z(bPI`P(%JKypC8bhra0eZA4AWb{ig1iJ$BPp5qu%3oEmJcKO9a+LX~$| zDKS<_!|j{i6HH@;aZ`>^--o!ucyI>dECRp?sWOSPDO*ky!Oiwf;A37Q z?hgD`nrxJ!VwQzda*rk1Qu5+Se5SveRi5{e^|Y>E8A5bOdz$xsGVOoBy_&gP#%XBE zFVCa5{*F&pT%ebK-6rqt_Qt$GjG8yT9?>s_So$nyY}L+LS0o7XrZmy`e9GVzZl=;h zsA;R1d^;^p-p9NY$8A~w4y9Vx90ut(?d;$I^2J%Q!u9X9LC<>vS>o*zVN>j5;rin= ze|6vvmlDbg@BPBxg&HFDlM7j4eWeCY}7vyFp<$ z2AL)k{!NO?v7B+Ic6VpD-$h&W&J&B(dxw2A2luGSn>802Cx47Zy&g(X-ZV)XGK1;y z$LqGr@sAfWP~_lDq+E3zaVw6r_Sx5JDonk?{t5!U;12k?enp8Q0>zCWkoVjM{u2c; z75Lm@X(vEpK%nZMf_Rd)0D>FcqHUo_Czh`sjbh37*2&QqzIay@-nX08Zt~~u8!WD5FsX!dq}FxEx`I>T9_maXJ^7Pafsg!~ zy|-Q?O7EMOe|cUSxX?YyeGvhhp+?XC+!@*H)#kGp3J+`RQTz7msaf0@nev{bwholN zoj_qS{{v-FMMHEfk&QBKHr~7>{8%~ahf0sp@g)8+W$Z!!%dh~%EBt$vR`4J(TGT5k zL(Mknth9--2Orn-?~XQ^7O_A$B2WF7uwtreF87Q42E0^Scq5{kpr57SX)FI-@u>Z` zKOtq77x)yy{_)Qk38uzE)GFBi={@u3WOpa~*vPxExx=Q(l!V>!2i70r=w4R#N!ILw zr}$fYAH=9h1d|qC=6;GP5bAxmIx!{E4&7DB4j$GI~FW3k|zi1Pn z@Eb#4^oW6+8^9vAU-yLFeCr-}jPvXX-Ng}=-+gEthC&kbUl-m)wcm6_#IR+B?`ja` z?xTFJ4TR%EcM0M*x6{@C1LRk`-Ntm@1ku1&4^Q7D5@l&fy*_}S%6vf&=$H@inhJ_P zsC^R$kK7`zk>S!2;$lE@jS)lmUZ`5528}L9qc@Cn1+><2CXDd6%dMq|j87|^*4LaZ zV#AKbdJ8_EFlE(|iz2g3y%ZdhH$2)BTD6tkM;>33>+5|4cMj)4&SlFu%L|kdYX6)2 EKME?T1ONa4 diff --git a/docs/images/m133225.jpg b/docs/images/m133225.jpg deleted file mode 100644 index fd14fb94593a11bd949304e9b707469e6d36f49d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80341 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 ~h=Jzgswfn#~fDj(k6%m#~toA_C$;FhdB zzs_@ap)h1lxYsPyzY1I88_;d$^s)C6OIN#8)jI}InAx!Wbqj)IOH5Ol8Z(qpvCmNK z69$cEJleIlcS?M>$E3{b;V*ywGqLtFV(X7E3L*37;v~I^ab*deHs`PtYopMY+>a5= zGcnb+#-xGKGXO){Woq5SQ059R&8rEsd;%D=td(fQgCH`5Do+W z78!!Fw4=wIpxiYTtfD$8V|=|&cSi`q1GujkG`@K8l1Z4u;q}Ys!v|&=^-L1)uTRgb zpjl@Ofu(SIEfr8NIiIQqSIt2tHWMzXFI`37jaM-ib`WE%+PM3ha-q30B7IMu$%9sG zc`01a#itlw;h)~zdTuI&#^ZgD4XG^OPNW5A`8K?SNU42;ulL05!-w}#h;G-V1Hy<* z=5=oWH2z*|xi>zy%Qb&2pE}$OpY;vEm);BB2w-pe@BjYqOz?a$eDdkL;oklG!%u$n zcPt~m4}N3|iPar*7{3e0UZs}J(mpb*v4Y}6>*nE1x0!Zxt#t1;Z<@dI+|Bc>E%C&z z#XTFyx>>o7a_W^FQCVupm1){(ehUhs|I0sEj4DNi|{Cqgr zKN+4qdo}#&FJBLT{L`PZ&ia6f6^T1O+Qm!R9s)C*!7zFY9+04tOG;zq^OOqT#r2|+ z*j}uFQwELV;7ykoalEb) z%RBF@NPXv*jd*Rr;im-FBO^PUh47oDj0uJD_u=BZl)Xa~dd4chqk6#FwCf>*&gZY*F@Rkgo;?0GX~It) z-5<7C&wh`EXL|3@9=;bZWwvy?iI<^_u{np}rSYmS;%rD)WyIIL%3I&-bKc6hz7YWg zXfKSz=ODFsGcobd^Uy)G8&?N}@d|Y@_ywOi-C-6y zahYi=p|PS5G=Op7*oFGq29>jnqrwSk>u@8yyw$Ee?DFDbJ6=nB9J_gJn_h2TS||MH zzW3_9$}4<@9@^l6ZJMrAP{I;7uXTN|SvKV<<*)L0tLwI*VLEHsxpNt%4rpX0GrjGp zMgt$X5xmAIp=(Tx>0Q2ia)#nh_9C07kG~lnfBSg&)j$7lJO%W_cy4EeT@`8jsB6lV zE=DlmUxpmylqP&Ie=Vz|L!3HuQe}#MZ%MB^MoAn86C_SXSkXobSPgQ*9PR~)IV96a zHqdpf=dlbGmT4gw!U6-X-^6;&M7w<3h^HgIcF_2i$Gm>`BFgW0cbF*)~l@g+{`S9<-1L4HJqM zXaDF0piARyMUpNBadg5*UBY@x(phxk+!=X`}F5 z9=PQi@La1Np+k#?B`ubdw&a1K*R-o4o!7WM_oUT^u%z3q;dm?_;SYF-x3u}|HQQF6 zdSc(4WxEyHR3^pxuIIL_@^sTt014d6la4hkbaTr6BYN6}1y*A6{OJ-#ae?ey+4$LK zkJ45ajlt{mKG3U5W2)(e#7W%|ZpLqEtvop>bG>-wuQbRTf87j0t3I@Z*%kn48PPYo za1mWhqR9YJNX?kk4>Dyf&CI+^o!H8dpt2|PQ7(jA$6arzBFrxESP07z_XnnSU%h&X z7v}{yQ<>&WBvwld@3B&hZL28Mom^GycFt?a#LKnV#`xl)Hxd8PB;njwF1_}`wa$h% zD#vup^35>=ScG8ekV{YrK3q%H;}j_!LFeP1F(yAmXPb!tJm|V^*0ko(K8CPFgXdn%UTy_P{G2#L5>S?{{D zOT&9JeSX3O!{N~}695OpTc)T_c)gg_e5lsR2WQA6$XMO>+{C4Y<#{Wz<;wCEh~Y&s zAb8B{SyzGiD?GhM(B!{7sx~)vX_pquIVLgwhW|`0^LQF-Lkw}y2|T)rYdg~4>m$ku zbpBgUC>;4CuKv1-S9nQRtRf53^(-~X!g=UHQ7NDNFfk=H=p9igX|RVh)5MlHN)^-7 z1IVw2FD=aj+v{_Wy>2?OU=+RLn6cQLN2pM6ZW{FR%FpI*^Qm-32L|s@x+CWUm}J|= zc^S631mVH`d&4P4;edBx%4An{!0@N^M?6$ml~>&pW|39OT@zsyu2{A=aT6E!DEBpS z+;9t{=fB;(3A~wfyNuUvUvGx>wLClv@j(tjh;L2IupXG_8b1(UA2Zpq&l-{MzI&X< zpZ4~+mIn`r{rJm(MMm8cjyTwc?J0ylx1BaFuQ{Oc;Q|@cTj6F;g~GDWi1#zd1YQ<5 z-J-Q&g-7tm-@NjeU%h<1iC!ZMrJ&Q4BZ_IZMMbX=s0_&&J(-^n3A~FZ)hp^JRbtU} zcd|o|Xc>*o0k6FQn6k7e>Yf?GCE`}gn+gQ|w0D7L7n-e(!P7RSIqh-ov3qZ!iR-;W z)9Woq>CfvlxYqULx5_2$UK4)JPTLme7@xeYf#{G0S1vp={BrhkeQkaC;`7f#sByP` zTfb1oTsqh?y_wCe$O1HxfxIna7T4bXmcHvew+M#uATD9Ih1&O;IL|HP=CufZ&a5WZ zUmLTW0@lNblXECO)pB%r#`O6Sig!#-^vUqex8Ehse*fWJl+_pJ1U7AiP-v;NVJVpR z+=OrYX@_I4R~M!+7V~9Bb!jDNnJBDGeY?m;fujnpq`Sfko-rU&VT7yKi16q1-fqWm zq}w0!O&vFB){*)?6urCm4Smco%(#}Y2ZiaBA8LjMf-_4Niw^38i`;byf^{9J8HR`x zg?V&tX;@*J+a7L)=ajoXk#AYs1{g3bUw_t;FMlgH&uz0ek1f|Ub#LurvoUn3oYH4K zWm1Drm*g&mPxesqlpzvjl#Rc@W8CF;elFmv4_vqe`5sUD_})abJEk_BL3W7(iNbl^ zlBKw`tV`r2cX^*)tdZx}vTo|GxHCiffBiR41R%mqpae9b{&1FA*`kYsh{ejfq(@f*K%(PN(2o2%NdS??QOdRxL8K`o-1=F~Q zbI~H95^va3tIWhtg?4R)OHJKs!o(ao126_YW@3E8J#n}yCJ!j*UV|&UMhZil_dITf zdRZgVTZMcPX0wehBR;)*PZ(}a77>SV&ww5R?Xx zO^?cfyKjkYKKa}2hc?>iYt~aWx_4~)EN|GOZnR?8J>Z8A<-x_FX>VRcFDQcsq+Jzx zfiZ!2`Fc9bd5xd)-rR7I?>NCW0*||mbK~0QvdD7s*I)VM7CnJCHK3dmX`!yzfGpSm zZWAYvAkS~t>1%0&u1WT~Dh#(0B}+I${OhcvgzfVFkZ->JmS-KG^2E%mIXt^`W*RYs zq}v#XsBBlP9IOTOwxUq{EgZx{OH~0&2zv9nujlB{ss|zt;@tF}dejSMNAnWQxgi>= z=<^)JUYr&ny}GLmH8%&X$%{K+R8s7Q3&y8jza+IO<3+-*K2P!B^)hIm$HrcF(|mjr zR`o2!|GfTzdkR;WhB|I~YwKOm{T(wnQ)z5hV-p7;;k1KH+D<+`h!mfcW6L!F=l^+4 zIZJbv26L`VrQEmgCdE20BaGW}m+uuDmr|9Y72v=?r!>M5ug_RmFf4T$#YbKz$BTow zK4x9LFKyb+mf=*MK zKFy+VjdepSSrR{xV|F#6-aW?tQN} z0hVoMdE9XP)uYLH@2hN6;;f5v-y^*{{Qk>7u)y6=hRb(%DAPp3gU~y0+by%CF+3<>3sY zzdXZGQI6&H4VIU#kv=5nj&hfNSN2BZNJ3ca?mu*x=8 zVZlWl_{To)PQjttFQK*Idcfm7YNYol+8kdP$BSRlYslb{uzjD0uu~r?EFy#}uF*)I zjQ5=>r=%E-58(hf;S{(x#?v^#!^=E`RM!xqgC+6Bq1r&Mn>v&}1(v!Bn|&F>i_tI# zpki8OiYGhgl~*fx^9?-TF8s#L@Lm?22RO)+8992AsG}W?SXl0r_OzY2DtOIPZ3$5fQ}oU!=)@Y?l8+=2{_}tS z7RN!!$*+QoY{HcUrlB5OEEHstyiCtm&Q_e<8s|Q*nU$(`t*jPm?f=^fGNB1<&tn;{ zwQ{CDo(596KFPcKc6JU>F1s*2>^U!;e8>6VYeoLqn!IRxnWJ=B>uLwm<-5=_a8E-b*9sL#*l8}tLM_o0vfM?vB1bqN$E8T zFBvBu;Ha`t)>ortjYZn``9j`WWem?`gI^z>pj?g{I&W*c8d!QJcxc!mpE^~i2fV=Z zyICisq%5p5;!C!oVVOfjm9OQRimBECQ$B_~A8&OOqK2!{6 zEc2-x<8C|UB?tCt4$P73GnQN+fbjUyqfaoz;*lYZu*I|S2m--WJPI%Gxm#A+@+6K# zxVu@<-AzQ@B*-n-xuw+5oPrRiCuxMH?(~*HP@VD1ns7G?)QB3Oq|`L8J7$i zsjpX!+8KVN^`bMh#}kQ>JmEfNmtdT`VUN?~rr=Z{AByJ4!)Mx3J85ZTPk~J>*LdW8NR)c!dlU{I=P^ z;MZOuDM;FP6Rw%37$wJ+YlYV^JZ@R5AnDB%jCM`=x+j*(-;k4DmBF(iLxm9av4ORj--Byu&M)@7&p9(8<>#hIJn1*2&z^ z<#;NOuFX|WyriY|uxUu1+Y^y@Z|3^j46#xwz}@7mK~C>Rb5U~3-L5B`I3Dghh}`{n zz#^!p!yo_n6%X-##~K5cukv`8Ip4s>qn2fYhcC*Je%f$4*EDpVfMGs5*#SJJgE>9k zNXBvh9It+gC`x3!6Hf|PG@Jn2aq>EkzX~26}aJ2GB6Gb8DuJ`E8l&mrLZs3 zW0=t~Ka2S%Tv)=REW1vEr%N8)T^=56-lObzcg|9}eoPpr9wi

unhEs*m-qvc~~Q}umnAu-1hw{vtvRf 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 diff --git a/docs/images/yijinl.jpg b/docs/images/yijinl.jpg deleted file mode 100644 index adbf62ad940659e35a71c78b910457ae41cc8eee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13946 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 W@yAUT&3Kr&-m1PFTp|AV^Zx=|&doId diff --git a/docs/images/yl_coder.jpg b/docs/images/yl_coder.jpg deleted file mode 100644 index 17b48a732272464c97607e12bf494bb286cb3484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7203 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 From cc73063006db248d4d5a53708b6ad880da007702 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Sun, 18 Mar 2018 16:59:18 +0800 Subject: [PATCH 059/280] DeveloperGuide, UserGuide: Update according to TA's review. Minor edit to TO-DO --- docs/DeveloperGuide.adoc | 48 +++++++++---------- docs/UserGuide.adoc | 2 +- .../address/ui/testutil/GuiTestAssert.java | 3 +- 3 files changed, 24 insertions(+), 29 deletions(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index d4ec9df0f915..8d2aea1d7780 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -11,8 +11,9 @@ ifdef::env-github[] :note-caption: :information_source: endif::[] :repoURL: https://github.com/CS2103JAN2018-F11-B2/main forked from Team SE-EDU +:Team SE-EDU: https://github.com/se-edu/addressbook-level4 -By: `Team SE-EDU`      Since: `Jun 2016`      Licence: `MIT` +By: `Team F11-B2`      Since: `Jun 2016`      Licence: `MIT` == Setting up @@ -781,17 +782,7 @@ See this https://github.com/se-edu/addressbook-level4/pull/599[PR] for the step- == Product Scope *Target user profile*: - -<<<<<<< Updated upstream -* Tuition coordinators who are comfortable with CLI applications -======= -* A tuition service agent that receive calls from both tutor and students asking for assignments. -* has a need to manage a significant number of clients. -* prefer desktop apps over other types -* can type fast -* prefers typing over mouse input -* is reasonably comfortable using CLI apps ->>>>>>> Stashed changes +* Tuition coordinators who handle significant number of contacts and are comfortable with CLI applications. *Value proposition*: TuitionCor is targeted at tuition coordinators who have to manage a large amount of contacts. @@ -824,7 +815,7 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un |`* * *` |user |tag tutors and students with multiple fields |do multi-layer searching to better match tutors and students -|`* * *` |user |categorise contacts between students and tutors |reduce the number of tagging required and make searching more convenience +|`* * *` |user |categorise contacts between students and tutors |reduce the number of tagging required and make searching more convenient |`* * *` |user |group clients based on the subject they wish to study/teach (Math, Eng, Phy, Chem...) |find and match client easily by the subjects registered @@ -832,8 +823,6 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un |`* * *` |user |see and compare the price that students/tutors are willing to pay/accept|match them based on pricing -|`* * *` |user |have an auto-save function |changes will be saved once user exit the application - |`* * *` |user |search by tags added to client |generate a list of clients that have the same tags |`* *` |user |hide <> by default |minimize chance of someone else seeing them by accident @@ -873,7 +862,7 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un [appendix] == Use Cases -(For all use cases below, the *System* is the `AddressBook` and the *Actor* is the `user`, unless specified otherwise) +(For all use cases below, the *System* is the `TuitionCor` and the *Actor* is the `user`, unless specified otherwise) [discrete] === Use case: Delete person @@ -881,9 +870,9 @@ Priorities: High (must have) - `* * \*`, Medium (nice to have) - `* \*`, Low (un *MSS* 1. User requests to list persons -2. AddressBook shows a list of persons +2. TuitionCor shows a list of persons 3. User requests to delete a specific person in the list -4. AddressBook deletes the person +4. TuitionCor deletes the person + Use case ends. @@ -897,7 +886,7 @@ Use case ends. * 3a. The given index is invalid. + [none] -** 3a1. AddressBook shows an error message. +** 3a1. TuitionCor shows an error message. + Use case resumes at step 2. @@ -907,9 +896,9 @@ Use case resumes at step 2. *MSS* 1. User types “/sortl” in to the command line. -2. Addressbook will prompt user to select whether they would like to view the list for students or tutors. -3. User will enter either “s” for students or “t” for tutors. -4. Addressbook will return a list of students or tutors based sorted by their locality. +2. TuitionCor will prompt user to select whether they would like to sort the list for students or tutors. +3. User will enter either “s” for students or “t” for tutors or "e" for exit. +4. TuitionCor will return a list of students or tutors based sorted by their locality. + Use case ends. @@ -919,20 +908,26 @@ Use case ends. * 3a. System detects an invalid input. + [none] -** 3a1. Addressbook request for either "s" or "t" to be inputted. +** 3a1. TuitionCor request for either "s" or "t" or "e" to be inputted. ** 3a2. User enter required information. ** 3a3. Steps 3a1 and 3a2 are repeated until valid input is entered. + Use case resumes at step 4. +[none] +* 3b. System detects "e". ++ +Use case ends. + + [discrete] === Use case: Match *MSS* 1. User enter match followed by a person name. -2. Addressbook displays information of client in the respective list (either tutor list or student list) -4. Addressbook returns a list of potential matches in the respective list. +2. TuitionCor displays information of client in the respective list (either tutor list or student list) +4. TuitionCor returns a list of potential matches in the respective list. + Use case ends. @@ -946,7 +941,7 @@ Use case ends. * 3a. There is no match found. + [none] -** 3a1. Addressbook returns an empty list. +** 3a1. TuitionCor returns an empty list. + Use case ends. @@ -961,6 +956,7 @@ Use case ends. . Application should have a self-explanatory installation process. . Application should be less than 5mb in size. . Application is expected to allow printing. +. Application should have an auto-save function upon exiting the application. [appendix] diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 8f80222c33c8..4486c786a8ca 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -12,7 +12,7 @@ ifdef::env-github[] :note-caption: :information_source: endif::[] :repoURL: https://github.com/CS2103JAN2018-F11-B2/main -By: `Team SE-EDU` Since: `Jun 2016` Licence: `MIT` +By: `Team F11-B2` Since: `Jun 2016` Licence: `MIT` == Introduction diff --git a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java index 4e37feeca0f3..50c10a027ff8 100644 --- a/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java +++ b/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java @@ -57,8 +57,7 @@ private static void assertTagEquals(Person expectedPerson, PersonCardHandle actu } /** - *TODO: - * + *TODO: Update in future if more colours are included */ private static String getTagColorStyleFor(String tagName) { From 7a06e9d53d54b5fcd9b59f5ed3a90c1633fabcb2 Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Sun, 18 Mar 2018 18:46:43 +0800 Subject: [PATCH 060/280] Remove Todo --- src/test/java/guitests/guihandles/HelpWindowHandle.java | 1 - src/test/java/guitests/guihandles/WebViewUtil.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/test/java/guitests/guihandles/HelpWindowHandle.java b/src/test/java/guitests/guihandles/HelpWindowHandle.java index 068e977a418e..ec5fc547aa86 100644 --- a/src/test/java/guitests/guihandles/HelpWindowHandle.java +++ b/src/test/java/guitests/guihandles/HelpWindowHandle.java @@ -27,7 +27,6 @@ public static boolean isWindowPresent() { /** * Returns the {@code URL} of the currently loaded page. - * @TODO: 14/3/2018 Remove this when no longer required */ public URL getLoadedUrl() { return WebViewUtil.getLoadedUrl(getChildNode(HELP_WINDOW_BROWSER_ID)); diff --git a/src/test/java/guitests/guihandles/WebViewUtil.java b/src/test/java/guitests/guihandles/WebViewUtil.java index 2deb56532eec..72a5a581d652 100644 --- a/src/test/java/guitests/guihandles/WebViewUtil.java +++ b/src/test/java/guitests/guihandles/WebViewUtil.java @@ -7,7 +7,6 @@ /** * Helper methods for dealing with {@code WebView}. - * @TODO: 14/3/2018 Delete this class when no long required */ public class WebViewUtil { From b9d577a9332badaadf9758db9fc8135a1af2fe4b Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Sun, 18 Mar 2018 20:49:22 +0800 Subject: [PATCH 061/280] Update labels for location, level, subjects --- .../java/seedu/address/ui/PersonCard.java | 23 +++++++++++++++++++ src/main/resources/view/DarkTheme.css | 15 ++++++++++++ src/main/resources/view/MainWindow.fxml | 2 +- src/main/resources/view/PersonListCard.fxml | 3 +++ src/main/resources/view/TutorListPanel.fxml | 2 +- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 94087059617b..1eb8a8b56100 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -16,6 +16,12 @@ public class PersonCard extends UiPart { private static final String[] TAGS_COLOUR_STYLES = {"red" , "blue" , "green" , "yellow" , "orange"}; + private static final String DUMMY_LEVEL_TEXT = "P1,P2,P3,S1,J1"; + private static final String DUMMY_LOCALE_TEXT ="NORTH,SOUTH,EAST,WEST"; + private static final String[] DUMMY_SUBJECTS_TEXT = {"Chem" , "Chemistry" , "Physics" , "Geography" , "Chem", "Chemistry" + , "Physics" , "Geography" , "Chem", "Chemistry" , "Physics" , "Geography" + , "Chem" , "Chemistry" , "Physics" , "Geography" }; + /** * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. * As a consequence, UI elements' variable names cannot be set to such keywords @@ -31,25 +37,35 @@ public class PersonCard extends UiPart { @FXML private Label name; @FXML + private Label level; + @FXML private Label id; @FXML private Label phone; @FXML + private Label locale; + @FXML private Label address; @FXML private Label email; @FXML private FlowPane tags; + @FXML + private FlowPane subjects; public PersonCard(Person person, int displayedIndex) { super(FXML); this.person = person; id.setText(displayedIndex + ". "); name.setText(person.getName().fullName); + level.setText(DUMMY_LEVEL_TEXT); phone.setText(person.getPhone().value); + locale.setText(DUMMY_LOCALE_TEXT); address.setText(person.getAddress().value); email.setText(person.getEmail().value); intTags(person); + intSubjects(person); + } /** @@ -66,6 +82,13 @@ private void intTags(Person person) { }); } + private void intSubjects(Person person) { + for(String s : DUMMY_SUBJECTS_TEXT){ + Label newLabel = new Label(s); + subjects.getChildren().add(newLabel); + } + } + /** * @param name * @return String colour diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index d6a630c7ae21..8fd39498b393 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -379,3 +379,18 @@ -fx-text-fill: black; -fx-background-color: orange; } + +#subjects { + -fx-hgap: 7; + -fx-vgap: 3; +} + +#subjects .label { + -fx-padding: 1 3 1 3; + -fx-border-radius: 2; + -fx-background-radius: 2; + -fx-background-color: grey; + -fx-text-fill: black; + -fx-font-size: 11; + -fx-font-family: "Segoe UI Bold"; +} diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 133f2b910bff..3f390611f163 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -12,7 +12,7 @@ + minWidth="800" minHeight="600"> diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index f08ea32ad558..db6a195a2d5c 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -26,9 +26,12 @@ The issue on AddressBook level 4 + */ + + public final Client client; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + @FXML + private Label phone; + @FXML + private Label address; + @FXML + private Label email; + @FXML + private Label location; + @FXML + private Label grade; + @FXML + private Label subject; + @FXML + private FlowPane tags; + + + public ClientCard(Client client, int displayedIndex) { + super(FXML); + this.client = client; + id.setText(displayedIndex + ". "); + name.setText(client.getName().fullName); + phone.setText(client.getPhone().value); + address.setText(client.getAddress().value); + email.setText(client.getEmail().value); + location.setText(client.getLocation().value); + grade.setText(client.getGrade().value); + subject.setText(client.getSubject().value); + intTags(client); + } + + /** + *@author olimhc-reused + *Reused from https://github.com/se-edu/addressbook-level4/pull/798/commits with minor modification + * Initialises tags + * @param client + */ + private void intTags(Client client) { + client.getTags().forEach(tag -> { + Label newLabel = new Label(tag.tagName); + newLabel.getStyleClass().add(getColour(tag.tagName)); + tags.getChildren().add(newLabel); + }); + } + + /** + * @param name + * @return String colour + */ + private String getColour(String name) { + return TAGS_COLOUR_STYLES[(Math.abs(name.hashCode() % TAGS_COLOUR_STYLES.length))]; + } + + @Override + public boolean equals(Object other) { + // short circuit if same object + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof ClientCard)) { + return false; + } + + // state check + ClientCard card = (ClientCard) other; + return id.getText().equals(card.id.getText()) + && client.equals(card.client); + } +} diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index 1124683fd31a..2aab510688bf 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -119,7 +119,7 @@ void fillInnerParts() { studentListPanel = new StudentListPanel(logic.getFilteredPersonList()); studentListPanelPlaceholder.getChildren().add(studentListPanel.getRoot()); - tutorListPanel = new TutorListPanel(logic.getFilteredPersonList()); + tutorListPanel = new TutorListPanel(logic.getFilteredTutorList()); tutorListPanelPlaceholder.getChildren().add(tutorListPanel.getRoot()); ResultDisplay resultDisplay = new ResultDisplay(); diff --git a/src/main/java/seedu/address/ui/TutorListPanel.java b/src/main/java/seedu/address/ui/TutorListPanel.java index 9a577559b4a7..38c04aaab52c 100644 --- a/src/main/java/seedu/address/ui/TutorListPanel.java +++ b/src/main/java/seedu/address/ui/TutorListPanel.java @@ -14,8 +14,8 @@ import javafx.scene.layout.Region; import seedu.address.commons.core.LogsCenter; import seedu.address.commons.events.ui.JumpToListRequestEvent; -import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent; -import seedu.address.model.person.Person; +import seedu.address.commons.events.ui.ClientPanelSelectionChangedEvent; +import seedu.address.model.person.Client; /** * Panel containing the list of tutors. @@ -25,17 +25,17 @@ public class TutorListPanel extends UiPart { private final Logger logger = LogsCenter.getLogger(TutorListPanel.class); @FXML - private ListView tutorListView; + private ListView tutorListView; - public TutorListPanel(ObservableList tutorList) { + public TutorListPanel(ObservableList tutorList) { super(FXML); setConnections(tutorList); registerAsAnEventHandler(this); } - private void setConnections(ObservableList tutorList) { - ObservableList mappedList = EasyBind.map( - tutorList, (person) -> new PersonCard(person, tutorList.indexOf(person) + 1)); + private void setConnections(ObservableList tutorList) { + ObservableList mappedList = EasyBind.map( + tutorList, (client) -> new ClientCard(client, tutorList.indexOf(client) + 1)); tutorListView.setItems(mappedList); tutorListView.setCellFactory(listView -> new StudentListViewCell()); setEventHandlerForSelectionChangeEvent(); @@ -46,13 +46,13 @@ private void setEventHandlerForSelectionChangeEvent() { .addListener((observable, oldValue, newValue) -> { if (newValue != null) { logger.fine("Selection in person list panel changed to : '" + newValue + "'"); - raise(new PersonPanelSelectionChangedEvent(newValue)); + raise(new ClientPanelSelectionChangedEvent(newValue)); } }); } /** - * Scrolls to the {@code PersonCard} at the {@code index} and selects it. + * Scrolls to the {@code ClientCard} at the {@code index} and selects it. */ private void scrollTo(int index) { Platform.runLater(() -> { @@ -68,12 +68,12 @@ private void handleJumpToListRequestEvent(JumpToListRequestEvent event) { } /** - * Custom {@code ListCell} that displays the graphics of a {@code PersonCard}. + * Custom {@code ListCell} that displays the graphics of a {@code ClientCard}. */ - class StudentListViewCell extends ListCell { + class StudentListViewCell extends ListCell { @Override - protected void updateItem(PersonCard person, boolean empty) { + protected void updateItem(ClientCard person, boolean empty) { super.updateItem(person, empty); if (empty || person == null) { From c337498077b3f0ff29a1ef222a8b3f87bc1148f6 Mon Sep 17 00:00:00 2001 From: shookshire Date: Thu, 22 Mar 2018 09:33:40 +0800 Subject: [PATCH 101/280] Able to display Client Card --- .../java/seedu/address/ui/ClientCard.java | 4 +- src/main/resources/view/ClientListCard.fxml | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/view/ClientListCard.fxml diff --git a/src/main/java/seedu/address/ui/ClientCard.java b/src/main/java/seedu/address/ui/ClientCard.java index 576a4fceed1a..bb77cdcc0c51 100644 --- a/src/main/java/seedu/address/ui/ClientCard.java +++ b/src/main/java/seedu/address/ui/ClientCard.java @@ -39,7 +39,7 @@ public class ClientCard extends UiPart { @FXML private Label email; @FXML - private Label location; + private Label place; @FXML private Label grade; @FXML @@ -56,7 +56,7 @@ public ClientCard(Client client, int displayedIndex) { phone.setText(client.getPhone().value); address.setText(client.getAddress().value); email.setText(client.getEmail().value); - location.setText(client.getLocation().value); + place.setText(client.getLocation().value); grade.setText(client.getGrade().value); subject.setText(client.getSubject().value); intTags(client); diff --git a/src/main/resources/view/ClientListCard.fxml b/src/main/resources/view/ClientListCard.fxml new file mode 100644 index 000000000000..65be49181c78 --- /dev/null +++ b/src/main/resources/view/ClientListCard.fxml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 45711b0f35a71740ae6aaee315a232d68e90a258 Mon Sep 17 00:00:00 2001 From: shookshire Date: Thu, 22 Mar 2018 09:49:29 +0800 Subject: [PATCH 102/280] checkstyle fixes --- src/main/resources/view/ClientListCard.fxml | 2 +- .../seedu/address/logic/commands/AddCommandTest.java | 11 +++++++++++ .../java/seedu/address/model/AddressBookTest.java | 7 +++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/resources/view/ClientListCard.fxml b/src/main/resources/view/ClientListCard.fxml index 65be49181c78..0e612b394ff8 100644 --- a/src/main/resources/view/ClientListCard.fxml +++ b/src/main/resources/view/ClientListCard.fxml @@ -36,4 +36,4 @@

getAddress() { return Optional.ofNullable(address); } + public void setLocation(Location location) { + this.location = location; + } + + public Optional getLocation() { + return Optional.ofNullable(location); + } + + public void setGrade(Grade grade) { + this.grade = grade; + } + + public Optional getGrade() { + return Optional.ofNullable(grade); + } + + public void setSubject(Subject subject) { + this.subject = subject; + } + + public Optional getSubject() { + return Optional.ofNullable(subject); + } + + public void setCategory(Category category) { + this.category = category; + } + + public Optional getCategory() { + return Optional.ofNullable(category); + } + /** * Sets {@code tags} to this object's {@code tags}. * A defensive copy of {@code tags} is used internally. @@ -231,7 +283,11 @@ public boolean equals(Object other) { && getPhone().equals(e.getPhone()) && getEmail().equals(e.getEmail()) && getAddress().equals(e.getAddress()) - && getTags().equals(e.getTags()); + && getTags().equals(e.getTags()) + && getLocation().equals(e.getLocation()) + && getGrade().equals(e.getGrade()) + && getSubject().equals(e.getSubject()) + && getCategory().equals(e.getCategory()); } } } diff --git a/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java index 6cf9aa57e068..7639a81efbe4 100644 --- a/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java @@ -33,10 +33,11 @@ public DeleteCommand parse(String args) throws ParseException { } Index index; + Category category; try { index = ParserUtil.parseIndex(argumentMultimap.getPreamble()); - Category category = ParserUtil.parseCategory(argumentMultimap.getValue(PREFIX_CATEGORY)).get(); + category = ParserUtil.parseCategory(argumentMultimap.getValue(PREFIX_CATEGORY)).get(); return new DeleteCommand(index, category); } catch (IllegalValueException ive) { throw new ParseException( diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index c9cdbed26cf1..c250c6ead2dc 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -2,22 +2,20 @@ import static java.util.Objects.requireNonNull; import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; +import static seedu.address.logic.parser.CliSyntax.*; import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.Set; +import java.util.stream.Stream; import seedu.address.commons.core.index.Index; import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.person.Category; import seedu.address.model.tag.Tag; /** @@ -33,12 +31,20 @@ public class EditCommandParser implements Parser { public EditCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG); + ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, + PREFIX_TAG, PREFIX_LOCATION, PREFIX_GRADE, PREFIX_SUBJECT, PREFIX_CATEGORY); + + if (!arePrefixesPresent(argMultimap, PREFIX_CATEGORY) + || argMultimap.getPreamble().isEmpty()) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE)); + } Index index; + Category category; try { index = ParserUtil.parseIndex(argMultimap.getPreamble()); + category = ParserUtil.parseCategory(argMultimap.getValue(PREFIX_CATEGORY)).get(); } catch (IllegalValueException ive) { throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE)); } @@ -50,6 +56,10 @@ public EditCommand parse(String args) throws ParseException { ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL)).ifPresent(editPersonDescriptor::setEmail); ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS)).ifPresent(editPersonDescriptor::setAddress); parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags); + ParserUtil.parseLocation(argMultimap.getValue(PREFIX_LOCATION)).ifPresent(editPersonDescriptor::setLocation); + ParserUtil.parseSubject(argMultimap.getValue(PREFIX_SUBJECT)).ifPresent(editPersonDescriptor::setSubject); + ParserUtil.parseGrade(argMultimap.getValue(PREFIX_GRADE)).ifPresent(editPersonDescriptor::setGrade); + ParserUtil.parseCategory(argMultimap.getValue(PREFIX_CATEGORY)).ifPresent(editPersonDescriptor::setCategory); } catch (IllegalValueException ive) { throw new ParseException(ive.getMessage(), ive); } @@ -58,7 +68,7 @@ public EditCommand parse(String args) throws ParseException { throw new ParseException(EditCommand.MESSAGE_NOT_EDITED); } - return new EditCommand(index, editPersonDescriptor); + return new EditCommand(index, editPersonDescriptor, category); } /** @@ -76,4 +86,12 @@ private Optional> parseTagsForEdit(Collection tags) throws Ille return Optional.of(ParserUtil.parseTags(tagSet)); } + /** + * Returns true if none of the prefixes contains empty {@code Optional} values in the given + * {@code ArgumentMultimap}. + */ + private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { + return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); + } + } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 8b51aa4557fb..3fce11d07c90 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -144,24 +144,28 @@ public void addStudent(Client t) throws DuplicatePersonException { } /** - * Replaces the given person {@code target} in the list with {@code editedPerson}. - * {@code AddressBook}'s tag list will be updated with the tags of {@code editedPerson}. + * Replaces the given client {@code target} in the list with {@code editedClient}. + * {@code AddressBook}'s tag list will be updated with the tags of {@code editedClient}. * - * @throws DuplicatePersonException if updating the person's details causes the person to be equivalent to - * another existing person in the list. + * @throws DuplicatePersonException if updating the client's details causes the client to be equivalent to + * another existing client in the list. * @throws PersonNotFoundException if {@code target} could not be found in the list. * - * @see #syncWithMasterTagList(Person) + * @see #syncWithMasterTagList(Client) */ - public void updatePerson(Person target, Person editedPerson) + public void updatePerson(Client target, Client editedCleint, Category category) throws DuplicatePersonException, PersonNotFoundException { - requireNonNull(editedPerson); + requireNonNull(editedCleint); - Person syncedEditedPerson = syncWithMasterTagList(editedPerson); + Client syncedEditedPerson = syncWithMasterTagList(editedCleint); // TODO: the tags master list will be updated even though the below line fails. // This can cause the tags master list to have additional tags that are not tagged to any person // in the person list. - persons.setPerson(target, syncedEditedPerson); + if (category.isStudent()) { + students.setClient(target, syncedEditedPerson); + } else { + tutors.setClient(target, syncedEditedPerson); + } } /** diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index ed8eaa40b5da..cac68dd35132 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -35,13 +35,13 @@ public interface Model { void addPerson(Person person) throws DuplicatePersonException; /** - * Replaces the given person {@code target} with {@code editedPerson}. + * Replaces the given person {@code target} with {@code editedClient}. * - * @throws DuplicatePersonException if updating the person's details causes the person to be equivalent to - * another existing person in the list. + * @throws DuplicatePersonException if updating the client's details causes the client to be equivalent to + * another existing client in the list. * @throws PersonNotFoundException if {@code target} could not be found in the list. */ - void updatePerson(Person target, Person editedPerson) + void updateClient(Client target, Client editedPerson, Category category) throws DuplicatePersonException, PersonNotFoundException; /** Adds the given tutor */ diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 2f33aadcc1af..6c4e94f14bd8 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -79,11 +79,11 @@ public synchronized void addPerson(Person person) throws DuplicatePersonExceptio } @Override - public void updatePerson(Person target, Person editedPerson) + public void updateClient(Client target, Client editedPerson, Category category) throws DuplicatePersonException, PersonNotFoundException { - requireAllNonNull(target, editedPerson); + requireAllNonNull(target, editedPerson, category); - addressBook.updatePerson(target, editedPerson); + addressBook.updatePerson(target, editedPerson, category); indicateAddressBookChanged(); } diff --git a/src/main/java/seedu/address/model/person/UniqueClientList.java b/src/main/java/seedu/address/model/person/UniqueClientList.java index 9fb74a7aeb29..71730e160d84 100644 --- a/src/main/java/seedu/address/model/person/UniqueClientList.java +++ b/src/main/java/seedu/address/model/person/UniqueClientList.java @@ -50,8 +50,10 @@ public void add(Client toAdd) throws DuplicatePersonException { * * @throws DuplicatePersonException if the replacement is equivalent to another existing client in the list. * @throws PersonNotFoundException if {@code target} could not be found in the list. + * + * Returns true if success. */ - public void setClient(Client target, Client editedClient) + public Boolean setClient(Client target, Client editedClient) throws DuplicatePersonException, PersonNotFoundException { requireNonNull(editedClient); @@ -65,6 +67,7 @@ public void setClient(Client target, Client editedClient) } internalList.set(index, editedClient); + return true; } /** From 6d0cee9f5695f3f28c1e72591b434a9d85503c7b Mon Sep 17 00:00:00 2001 From: shookshire Date: Wed, 28 Mar 2018 00:03:47 +0800 Subject: [PATCH 135/280] Changed ListCommand to work on clients --- .../java/seedu/address/logic/commands/ListCommand.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index 2631e4dda649..3ea63c15b9e1 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -1,6 +1,7 @@ package seedu.address.logic.commands; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static seedu.address.model.Model.PREDICATE_SHOW_ALL_STUDENTS; +import static seedu.address.model.Model.PREDICATE_SHOW_ALL_TUTORS; /** * Lists all persons in the address book to the user. @@ -10,12 +11,13 @@ public class ListCommand extends Command { public static final String COMMAND_WORD = "list"; public static final String COMMAND_ALIAS = "l"; - public static final String MESSAGE_SUCCESS = "Listed all persons"; + public static final String MESSAGE_SUCCESS = "Listed all clients"; @Override public CommandResult execute() { - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredStudentList(PREDICATE_SHOW_ALL_STUDENTS); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); return new CommandResult(MESSAGE_SUCCESS); } } From 85772fb146e4bb588f8930b5f677706887880ca7 Mon Sep 17 00:00:00 2001 From: shookshire Date: Wed, 28 Mar 2018 00:18:27 +0800 Subject: [PATCH 136/280] Changed find to work on clients --- .../seedu/address/commons/core/Messages.java | 2 +- .../seedu/address/logic/commands/Command.java | 6 +++--- .../address/logic/commands/FindCommand.java | 6 ++++-- .../address/logic/commands/MatchCommand.java | 2 +- .../SearchContainsKeywordsPredicate.java | 20 +++++++++++++------ 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/seedu/address/commons/core/Messages.java b/src/main/java/seedu/address/commons/core/Messages.java index 1deb3a1e4695..ed88c7fb97ba 100644 --- a/src/main/java/seedu/address/commons/core/Messages.java +++ b/src/main/java/seedu/address/commons/core/Messages.java @@ -8,6 +8,6 @@ public class Messages { public static final String MESSAGE_UNKNOWN_COMMAND = "Unknown command"; public static final String MESSAGE_INVALID_COMMAND_FORMAT = "Invalid command format! \n%1$s"; public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX = "The person index provided is invalid"; - public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!"; + public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d students and %2$d tutors listed!"; } diff --git a/src/main/java/seedu/address/logic/commands/Command.java b/src/main/java/seedu/address/logic/commands/Command.java index 6580e0b51c90..6030a75cce17 100644 --- a/src/main/java/seedu/address/logic/commands/Command.java +++ b/src/main/java/seedu/address/logic/commands/Command.java @@ -17,11 +17,11 @@ public abstract class Command { /** * Constructs a feedback message to summarise an operation that displayed a listing of persons. * - * @param displaySize used to generate summary + * @param displayStudentSize and displayTutorSize used to generate summary * @return summary message for persons displayed */ - public static String getMessageForPersonListShownSummary(int displaySize) { - return String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, displaySize); + public static String getMessageForPersonListShownSummary(int displayStudentSize, int displayTutorSize) { + return String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, displayStudentSize, displayTutorSize); } /** diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/seedu/address/logic/commands/FindCommand.java index aeecb4c15fd1..d65360b75118 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/seedu/address/logic/commands/FindCommand.java @@ -24,8 +24,10 @@ public FindCommand(SearchContainsKeywordsPredicate predicate) { @Override public CommandResult execute() { - model.updateFilteredPersonList(predicate); - return new CommandResult(getMessageForPersonListShownSummary(model.getFilteredPersonList().size())); + model.updateFilteredStudentList(predicate); + model.updateFilteredTutorList(predicate); + return new CommandResult(getMessageForPersonListShownSummary( + model.getFilteredStudentList().size(), model.getFilteredTutorList().size())); } @Override diff --git a/src/main/java/seedu/address/logic/commands/MatchCommand.java b/src/main/java/seedu/address/logic/commands/MatchCommand.java index 39fecbe93c39..d82977526043 100644 --- a/src/main/java/seedu/address/logic/commands/MatchCommand.java +++ b/src/main/java/seedu/address/logic/commands/MatchCommand.java @@ -29,7 +29,7 @@ public CommandResult execute() { model.updateFilteredPersonList(predicate); model.updateFilteredPersonList(new MatchContainsPersonsPredicate( Arrays.asList(model.getFilteredPersonList().get(0).toString().split("\\s+")))); - return new CommandResult(getMessageForPersonListShownSummary(model.getFilteredPersonList().size())); + return new CommandResult(getMessageForPersonListShownSummary(model.getFilteredPersonList().size(), model.getFilteredPersonList().size())); } @Override diff --git a/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java index 9905859a3f95..1512d8ff2cc8 100644 --- a/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/SearchContainsKeywordsPredicate.java @@ -8,7 +8,7 @@ /** * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. */ -public class SearchContainsKeywordsPredicate implements Predicate { +public class SearchContainsKeywordsPredicate implements Predicate { private final List keywords; public SearchContainsKeywordsPredicate(List keywords) { @@ -16,15 +16,23 @@ public SearchContainsKeywordsPredicate(List keywords) { } @Override - public boolean test(Person person) { + public boolean test(Client client) { return keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)) + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getName().fullName, keyword)) || keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getEmail().value, keyword)) + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getEmail().value, keyword)) || keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getAddress().value, keyword)) + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getAddress().value, keyword)) || keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getPhone().value, keyword)); + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getPhone().value, keyword)) + || keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getLocation().value, keyword)) + || keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getGrade().value, keyword)) + || keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getSubject().value, keyword)) + || keywords.stream() + .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(client.getCategory().value, keyword)); } @Override From 905c4c1441e9c4a9fad2e9a646026d20a8a7e5be Mon Sep 17 00:00:00 2001 From: Hong Cho Date: Wed, 28 Mar 2018 00:42:39 +0800 Subject: [PATCH 137/280] Integrate sort by name command --- .../logic/commands/SortByNameCommand.java | 10 ++-- src/main/java/seedu/address/model/Model.java | 16 +++-- .../seedu/address/model/ModelManager.java | 58 ++++++++++++------- 3 files changed, 55 insertions(+), 29 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/SortByNameCommand.java b/src/main/java/seedu/address/logic/commands/SortByNameCommand.java index 8b9c1ff8b43b..1be672d4e7df 100644 --- a/src/main/java/seedu/address/logic/commands/SortByNameCommand.java +++ b/src/main/java/seedu/address/logic/commands/SortByNameCommand.java @@ -9,16 +9,12 @@ public class SortByNameCommand extends SortCommand { private int index; private final int tutorIndex = 0; - //private final int studentIndex = 1; + private final int studentIndex = 1; public SortByNameCommand(int index) { this.index = index; } - /** - * @// TODO: 19/3/2018 Update to sort by different list - * @return - */ @Override public CommandResult execute() { switch (index) { @@ -27,6 +23,10 @@ public CommandResult execute() { model.sortByNameFilteredClientTutorList(); return new CommandResult(MESSAGE_SUCCESS_TUTOR + MESSAGE_SORT_DESC); + case studentIndex: + model.sortByNameFilteredClientStudentList(); + return new CommandResult(MESSAGE_SUCCESS_STUDENT + MESSAGE_SORT_DESC); + default: return new CommandResult(MESSAGE_FAILURE); } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 33b4467ab423..6eb6d9f8038d 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -52,14 +52,22 @@ void updatePerson(Person target, Person editedPerson) /** Returns an unmodifiable view of the filtered person list */ ObservableList getFilteredPersonList(); - /**Sorts selected list by name in alphabetical order*/ + /**Sorts tutor list by name in alphabetical order*/ void sortByNameFilteredClientTutorList(); - /**Sorts selected list by location in alphabetical order*/ + /**Sorts tutor list by location in alphabetical order*/ void sortByLocationFilteredClientTutorList(); - /**Sorts selected list by grade in ascending order*/ + /**Sorts tutor list by grade in ascending order*/ void sortByGradeFilteredClientTutorList(); - /**Sorts selected list by subject in alphabetical order*/ + /**Sorts tutor list by subject in alphabetical order*/ void sortBySubjectFilteredClientTutorList(); + /**Sorts student list by name in alphabetical order*/ + void sortByNameFilteredClientStudentList(); + /**Sorts student list by location in alphabetical order*/ + void sortByLocationFilteredClientStudentList(); + /**Sorts student list by grade in ascending order*/ + void sortByGradeFilteredClientStudentList(); + /**Sorts student list by subject in alphabetical order*/ + void sortBySubjectFilteredClientStudentList(); /** * Updates the filter of the filtered person list to filter by the given {@code predicate}. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index f3566cac27f4..8c16947f8da4 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -32,6 +32,7 @@ public class ModelManager extends ComponentManager implements Model { private final FilteredList filteredTutors; private SortedList sortedFilteredTutors; + private SortedList sortedFilteredStudents; /** * Initializes a ModelManager with the given addressBook and userPrefs. @@ -47,6 +48,7 @@ public ModelManager(ReadOnlyAddressBook addressBook, UserPrefs userPrefs) { filteredStudents = new FilteredList<>(this.addressBook.getStudentList()); filteredTutors = new FilteredList<>(this.addressBook.getTutorList()); sortedFilteredTutors = new SortedList<>(filteredTutors); + sortedFilteredStudents = new SortedList<>(filteredStudents); } public ModelManager() { @@ -122,24 +124,21 @@ public ObservableList getFilteredPersonList() { */ @Override - public ObservableList getFilteredClientTutorList() { - return FXCollections.unmodifiableObservableList(filteredTutors); - } - - /** - * @// TODO: 19/3/2018 Update when tutor and student class and specific field is available - */ - @Override public void sortByNameFilteredClientTutorList() { Comparator sortByName = (tutor1, tutor2)-> (tutor1.getName().fullName) - .compareToIgnoreCase(tutor1.getName().fullName); + .compareToIgnoreCase(tutor2.getName().fullName); sortedFilteredTutors.setComparator(sortByName); indicateAddressBookChanged(); } - /** - * @// TODO: 19/3/2018 Update when tutor and student class and specific field is available - */ + @Override + public void sortByNameFilteredClientStudentList() { + Comparator sortByName = (student1, student2)-> (student1.getName().fullName) + .compareToIgnoreCase(student2.getName().fullName); + sortedFilteredStudents.setComparator(sortByName); + indicateAddressBookChanged(); + } + @Override public void sortByLocationFilteredClientTutorList() { Comparator sortByLocation = (tutor1, tutor2)-> (tutor1.getLocation().value) @@ -148,9 +147,15 @@ public void sortByLocationFilteredClientTutorList() { indicateAddressBookChanged(); } - /** - * @// TODO: 19/3/2018 Update when tutor and student class and specific field available - */ + @Override + public void sortByLocationFilteredClientStudentList() { + Comparator sortByLocation = (student1, student2)-> (student1.getLocation().value) + .compareToIgnoreCase(student2.getLocation().value); + sortedFilteredStudents.setComparator(sortByLocation); + indicateAddressBookChanged(); + } + + @Override public void sortByGradeFilteredClientTutorList() { Comparator sortByGrade = (tutor1, tutor2)-> (tutor1.getGrade().value) @@ -159,9 +164,14 @@ public void sortByGradeFilteredClientTutorList() { indicateAddressBookChanged(); } - /** - * @// TODO: 19/3/2018 Update when tutor and student class and specific field available - */ + @Override + public void sortByGradeFilteredClientStudentList() { + Comparator sortByGrade = (student1, student2)-> (student1.getGrade().value) + .compareToIgnoreCase(student2.getGrade().value); + sortedFilteredStudents.setComparator(sortByGrade); + indicateAddressBookChanged(); + } + @Override public void sortBySubjectFilteredClientTutorList() { Comparator sortBySubject = (tutor1, tutor2)-> (tutor1.getSubject().value) @@ -170,6 +180,14 @@ public void sortBySubjectFilteredClientTutorList() { indicateAddressBookChanged(); } + @Override + public void sortBySubjectFilteredClientStudentList() { + Comparator sortBySubject = (student1, student2)-> (student1.getSubject().value) + .compareToIgnoreCase(student2.getSubject().value); + sortedFilteredStudents.setComparator(sortBySubject); + indicateAddressBookChanged(); + } + @Override public void updateFilteredPersonList(Predicate predicate) { requireNonNull(predicate); @@ -182,7 +200,7 @@ public void updateFilteredPersonList(Predicate predicate) { */ @Override public ObservableList getFilteredStudentList() { - return FXCollections.unmodifiableObservableList(filteredStudents); + return FXCollections.unmodifiableObservableList(sortedFilteredStudents); } @Override @@ -197,7 +215,7 @@ public void updateFilteredStudentList(Predicate predicate) { */ @Override public ObservableList getFilteredTutorList() { - return FXCollections.unmodifiableObservableList(filteredTutors); + return FXCollections.unmodifiableObservableList(sortedFilteredTutors); } @Override From 8d3c9039983b4c656a9d143e104f3f3a73a27c94 Mon Sep 17 00:00:00 2001 From: shookshire Date: Wed, 28 Mar 2018 01:45:41 +0800 Subject: [PATCH 138/280] Edit Match to work on clients --- .../address/logic/commands/MatchCommand.java | 45 +++++++++++++++---- .../logic/parser/MatchCommandParser.java | 36 ++++++++++++--- .../MatchContainsKeywordsPredicate.java | 17 +++---- 3 files changed, 75 insertions(+), 23 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/MatchCommand.java b/src/main/java/seedu/address/logic/commands/MatchCommand.java index d82977526043..952973f8e8f9 100644 --- a/src/main/java/seedu/address/logic/commands/MatchCommand.java +++ b/src/main/java/seedu/address/logic/commands/MatchCommand.java @@ -1,6 +1,12 @@ package seedu.address.logic.commands; import java.util.Arrays; +import java.util.List; +import seedu.address.commons.core.Messages; +import seedu.address.commons.core.index.Index; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.person.Category; +import seedu.address.model.person.Client; import seedu.address.model.person.MatchContainsKeywordsPredicate; import seedu.address.model.person.MatchContainsPersonsPredicate; @@ -18,24 +24,45 @@ public class MatchCommand extends Command { + ": Finds all persons that match all the fields listed by the person entered.\n" + "Example: " + COMMAND_WORD + " alice"; - private final MatchContainsKeywordsPredicate predicate; + private final Index targetIndex; + private final Category category; - public MatchCommand(MatchContainsKeywordsPredicate predicate) { - this.predicate = predicate; + private Client clientToMatch; + + public MatchCommand(Index index, Category category) { + this.targetIndex = index; + this. category = category; } @Override - public CommandResult execute() { - model.updateFilteredPersonList(predicate); - model.updateFilteredPersonList(new MatchContainsPersonsPredicate( - Arrays.asList(model.getFilteredPersonList().get(0).toString().split("\\s+")))); - return new CommandResult(getMessageForPersonListShownSummary(model.getFilteredPersonList().size(), model.getFilteredPersonList().size())); + public CommandResult execute() throws CommandException { + List lastShownList; + + if (category.isStudent()) { + lastShownList = model.getFilteredStudentList(); + } else { + lastShownList = model.getFilteredTutorList(); + } + + if (targetIndex.getZeroBased() >= lastShownList.size()) { + throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + + clientToMatch = lastShownList.get(targetIndex.getZeroBased()); + + MatchContainsKeywordsPredicate predicate = new MatchContainsKeywordsPredicate(clientToMatch); + + model.updateFilteredStudentList(predicate); + model.updateFilteredTutorList(predicate); + return new CommandResult(getMessageForPersonListShownSummary( + model.getFilteredStudentList().size(), model.getFilteredTutorList().size())); } @Override public boolean equals(Object other) { return other == this // short circuit if same object || (other instanceof MatchCommand // instanceof handles nulls - && this.predicate.equals(((MatchCommand) other).predicate)); // state check + && this.targetIndex.equals(((MatchCommand) other).targetIndex)) + && this.category.equals(((MatchCommand) other).category); // state check } } diff --git a/src/main/java/seedu/address/logic/parser/MatchCommandParser.java b/src/main/java/seedu/address/logic/parser/MatchCommandParser.java index c5703967db0f..7f97f1beeb99 100644 --- a/src/main/java/seedu/address/logic/parser/MatchCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/MatchCommandParser.java @@ -1,11 +1,18 @@ package seedu.address.logic.parser; +import static java.util.Objects.requireNonNull; import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CliSyntax.PREFIX_CATEGORY; import java.util.Arrays; +import java.util.stream.Stream; +import seedu.address.commons.core.index.Index; +import seedu.address.commons.exceptions.IllegalValueException; +import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.MatchCommand; import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.person.Category; import seedu.address.model.person.MatchContainsKeywordsPredicate; /** @@ -19,15 +26,32 @@ public class MatchCommandParser implements Parser { * @throws ParseException if the user input does not conform the expected format */ public MatchCommand parse(String args) throws ParseException { - String trimmedArgs = args.trim(); - if (trimmedArgs.isEmpty()) { - throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, MatchCommand.MESSAGE_USAGE)); + requireNonNull(args); + ArgumentMultimap argumentMultimap = ArgumentTokenizer.tokenize(args, PREFIX_CATEGORY); + + if (!arePrefixesPresent(argumentMultimap, PREFIX_CATEGORY) + || argumentMultimap.getPreamble().isEmpty()) { + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, MatchCommand.MESSAGE_USAGE)); } - String[] searchKeywords = trimmedArgs.split("\\s+"); + Index index; + Category category; - return new MatchCommand(new MatchContainsKeywordsPredicate(Arrays.asList(searchKeywords))); + try { + index = ParserUtil.parseIndex(argumentMultimap.getPreamble()); + category = ParserUtil.parseCategory(argumentMultimap.getValue(PREFIX_CATEGORY)).get(); + return new MatchCommand(index, category); + } catch (IllegalValueException ive) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, MatchCommand.MESSAGE_USAGE)); + } } + /** + * Returns true if none of the prefixes contains empty {@code Optional} values in the given + * {@code ArgumentMultimap}. + */ + private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { + return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); + } } diff --git a/src/main/java/seedu/address/model/person/MatchContainsKeywordsPredicate.java b/src/main/java/seedu/address/model/person/MatchContainsKeywordsPredicate.java index 00099ecea559..2bd770176401 100644 --- a/src/main/java/seedu/address/model/person/MatchContainsKeywordsPredicate.java +++ b/src/main/java/seedu/address/model/person/MatchContainsKeywordsPredicate.java @@ -8,24 +8,25 @@ /** * Tests that a {@code Person}'s {@code Name} matches any of the keywords given. */ -public class MatchContainsKeywordsPredicate implements Predicate { - private final List keywords; +public class MatchContainsKeywordsPredicate implements Predicate { + private final Client client; - public MatchContainsKeywordsPredicate(List keywords) { - this.keywords = keywords; + public MatchContainsKeywordsPredicate(Client client) { + this.client = client; } @Override - public boolean test(Person person) { - return keywords.stream() - .anyMatch(keyword -> StringUtil.containsWordIgnoreCase(person.getName().fullName, keyword)); + public boolean test(Client other) { + return other.getLocation().equals(client.getLocation()) + || other.getGrade().equals(client.getGrade()) + || other.getSubject().equals(client.getSubject()); } @Override public boolean equals(Object other) { return other == this // short circuit if same object || (other instanceof MatchContainsKeywordsPredicate // instanceof handles nulls - && this.keywords.equals(((MatchContainsKeywordsPredicate) other).keywords)); // state check + && this.client.equals(((MatchContainsKeywordsPredicate) other).client)); // state check } } From 5ea78ad42949f8668f2358350ad16c2c3e7e1f9f Mon Sep 17 00:00:00 2001 From: shookshire Date: Wed, 28 Mar 2018 18:09:05 +0800 Subject: [PATCH 139/280] Removed Person related commands --- .../events/model/AddressBookChangedEvent.java | 4 +- src/main/java/seedu/address/logic/Logic.java | 3 - .../seedu/address/logic/LogicManager.java | 5 - .../address/logic/commands/AddCommand.java | 68 --------- .../address/logic/commands/EditCommand.java | 6 +- .../address/logic/commands/SelectCommand.java | 53 ------- .../logic/commands/UndoableCommand.java | 9 +- .../logic/parser/AddCommandParser.java | 65 -------- .../logic/parser/AddressBookParser.java | 10 -- .../logic/parser/SelectCommandParser.java | 29 ---- .../java/seedu/address/model/AddressBook.java | 63 ++------ src/main/java/seedu/address/model/Model.java | 14 -- .../seedu/address/model/ModelManager.java | 24 --- .../address/model/ReadOnlyAddressBook.java | 6 - .../address/model/util/SampleDataUtil.java | 38 ++--- .../logic/commands/SelectCommandTest.java | 141 ------------------ .../logic/parser/AddCommandParserTest.java | 1 - .../logic/parser/AddressBookParserTest.java | 16 -- .../logic/parser/SelectCommandParserTest.java | 29 ---- .../seedu/address/testutil/PersonUtil.java | 1 - .../systemtests/AddCommandSystemTest.java | 1 - .../systemtests/AddressBookSystemTest.java | 9 -- .../systemtests/HelpCommandSystemTest.java | 1 - .../systemtests/SelectCommandSystemTest.java | 1 - 24 files changed, 43 insertions(+), 554 deletions(-) delete mode 100644 src/main/java/seedu/address/logic/commands/AddCommand.java delete mode 100644 src/main/java/seedu/address/logic/commands/SelectCommand.java delete mode 100644 src/main/java/seedu/address/logic/parser/AddCommandParser.java delete mode 100644 src/main/java/seedu/address/logic/parser/SelectCommandParser.java delete mode 100644 src/test/java/seedu/address/logic/commands/SelectCommandTest.java delete mode 100644 src/test/java/seedu/address/logic/parser/SelectCommandParserTest.java diff --git a/src/main/java/seedu/address/commons/events/model/AddressBookChangedEvent.java b/src/main/java/seedu/address/commons/events/model/AddressBookChangedEvent.java index 7db9b5c48ed6..01eec821a08b 100644 --- a/src/main/java/seedu/address/commons/events/model/AddressBookChangedEvent.java +++ b/src/main/java/seedu/address/commons/events/model/AddressBookChangedEvent.java @@ -14,6 +14,8 @@ public AddressBookChangedEvent(ReadOnlyAddressBook data) { @Override public String toString() { - return "number of persons " + data.getPersonList().size() + ", number of tags " + data.getTagList().size(); + return "number of students " + data.getStudentList().size() + + ", number of tutors " + data.getTutorList().size() + + ", number of tags " + data.getTagList().size(); } } diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/seedu/address/logic/Logic.java index 24522648ce8e..c6a690c747b7 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/seedu/address/logic/Logic.java @@ -20,9 +20,6 @@ public interface Logic { */ CommandResult execute(String commandText) throws CommandException, ParseException; - /** Returns an unmodifiable view of the filtered list of persons */ - ObservableList getFilteredPersonList(); - /** Returns an unmodifiable view of the filtered list of students */ ObservableList getFilteredStudentList(); diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/seedu/address/logic/LogicManager.java index 969935c53e4c..dcb9ebd3aff7 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/seedu/address/logic/LogicManager.java @@ -46,11 +46,6 @@ public CommandResult execute(String commandText) throws CommandException, ParseE } } - @Override - public ObservableList getFilteredPersonList() { - return model.getFilteredPersonList(); - } - @Override public ObservableList getFilteredStudentList() { return model.getFilteredStudentList(); diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java deleted file mode 100644 index d5de4a572715..000000000000 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ /dev/null @@ -1,68 +0,0 @@ -package seedu.address.logic.commands; - -import static java.util.Objects.requireNonNull; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; - -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.person.Person; -import seedu.address.model.person.exceptions.DuplicatePersonException; - -/** - * Adds a person to the address book. - */ -public class AddCommand extends UndoableCommand { - - public static final String COMMAND_WORD = "add"; - public static final String COMMAND_ALIAS = "a"; - - public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a person to the address book. " - + "Parameters: " - + PREFIX_NAME + "NAME " - + PREFIX_PHONE + "PHONE " - + PREFIX_EMAIL + "EMAIL " - + PREFIX_ADDRESS + "ADDRESS " - + "[" + PREFIX_TAG + "TAG]...\n" - + "Example: " + COMMAND_WORD + " " - + PREFIX_NAME + "John Doe " - + PREFIX_PHONE + "98765432 " - + PREFIX_EMAIL + "johnd@example.com " - + PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 " - + PREFIX_TAG + "friends " - + PREFIX_TAG + "owesMoney"; - - public static final String MESSAGE_SUCCESS = "New person added: %1$s"; - public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book"; - - private final Person toAdd; - - /** - * Creates an AddCommand to add the specified {@code Person} - */ - public AddCommand(Person person) { - requireNonNull(person); - toAdd = person; - } - - @Override - public CommandResult executeUndoableCommand() throws CommandException { - requireNonNull(model); - try { - model.addPerson(toAdd); - return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd)); - } catch (DuplicatePersonException e) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON); - } - - } - - @Override - public boolean equals(Object other) { - return other == this // short circuit if same object - || (other instanceof AddCommand // instanceof handles nulls - && toAdd.equals(((AddCommand) other).toAdd)); - } -} diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index da9261616bfd..5da775056bba 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -6,7 +6,8 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static seedu.address.model.Model.PREDICATE_SHOW_ALL_STUDENTS; +import static seedu.address.model.Model.PREDICATE_SHOW_ALL_TUTORS; import java.util.Collections; import java.util.HashSet; @@ -79,7 +80,8 @@ public CommandResult executeUndoableCommand() throws CommandException { } catch (PersonNotFoundException pnfe) { throw new AssertionError("The target person cannot be missing"); } - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredStudentList(PREDICATE_SHOW_ALL_STUDENTS); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, editedPerson)); } diff --git a/src/main/java/seedu/address/logic/commands/SelectCommand.java b/src/main/java/seedu/address/logic/commands/SelectCommand.java deleted file mode 100644 index 0bc2e3e21485..000000000000 --- a/src/main/java/seedu/address/logic/commands/SelectCommand.java +++ /dev/null @@ -1,53 +0,0 @@ -package seedu.address.logic.commands; - -import java.util.List; - -import seedu.address.commons.core.EventsCenter; -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.commons.events.ui.JumpToListRequestEvent; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.person.Person; - -/** - * Selects a person identified using it's last displayed index from the address book. - */ -public class SelectCommand extends Command { - - public static final String COMMAND_WORD = "select"; - public static final String COMMAND_ALIAS = "s"; - - public static final String MESSAGE_USAGE = COMMAND_WORD - + ": Selects the person identified by the index number used in the last person listing.\n" - + "Parameters: INDEX (must be a positive integer)\n" - + "Example: " + COMMAND_WORD + " 1"; - - public static final String MESSAGE_SELECT_PERSON_SUCCESS = "Selected Person: %1$s"; - - private final Index targetIndex; - - public SelectCommand(Index targetIndex) { - this.targetIndex = targetIndex; - } - - @Override - public CommandResult execute() throws CommandException { - - List lastShownList = model.getFilteredPersonList(); - - if (targetIndex.getZeroBased() >= lastShownList.size()) { - throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); - } - - EventsCenter.getInstance().post(new JumpToListRequestEvent(targetIndex)); - return new CommandResult(String.format(MESSAGE_SELECT_PERSON_SUCCESS, targetIndex.getOneBased())); - - } - - @Override - public boolean equals(Object other) { - return other == this // short circuit if same object - || (other instanceof SelectCommand // instanceof handles nulls - && this.targetIndex.equals(((SelectCommand) other).targetIndex)); // state check - } -} diff --git a/src/main/java/seedu/address/logic/commands/UndoableCommand.java b/src/main/java/seedu/address/logic/commands/UndoableCommand.java index c107ffcd9cb3..da25206bb537 100644 --- a/src/main/java/seedu/address/logic/commands/UndoableCommand.java +++ b/src/main/java/seedu/address/logic/commands/UndoableCommand.java @@ -2,7 +2,8 @@ import static java.util.Objects.requireNonNull; import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; -import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static seedu.address.model.Model.PREDICATE_SHOW_ALL_STUDENTS; +import static seedu.address.model.Model.PREDICATE_SHOW_ALL_TUTORS; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.AddressBook; @@ -38,7 +39,8 @@ protected void preprocessUndoableCommand() throws CommandException {} protected final void undo() { requireAllNonNull(model, previousAddressBook); model.resetData(previousAddressBook); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredStudentList(PREDICATE_SHOW_ALL_STUDENTS); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); } /** @@ -53,7 +55,8 @@ protected final void redo() { throw new AssertionError("The command has been successfully executed previously; " + "it should not fail now"); } - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredStudentList(PREDICATE_SHOW_ALL_STUDENTS); + model.updateFilteredTutorList(PREDICATE_SHOW_ALL_TUTORS); } @Override diff --git a/src/main/java/seedu/address/logic/parser/AddCommandParser.java b/src/main/java/seedu/address/logic/parser/AddCommandParser.java deleted file mode 100644 index 3c729b388554..000000000000 --- a/src/main/java/seedu/address/logic/parser/AddCommandParser.java +++ /dev/null @@ -1,65 +0,0 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS; -import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; -import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; -import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; -import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; - -import java.util.Set; -import java.util.stream.Stream; - -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Address; -import seedu.address.model.person.Email; -import seedu.address.model.person.Name; -import seedu.address.model.person.Person; -import seedu.address.model.person.Phone; -import seedu.address.model.tag.Tag; - -/** - * Parses input arguments and creates a new AddCommand object - */ -public class AddCommandParser implements Parser { - - /** - * Parses the given {@code String} of arguments in the context of the AddCommand - * and returns an AddCommand object for execution. - * @throws ParseException if the user input does not conform the expected format - */ - public AddCommand parse(String args) throws ParseException { - ArgumentMultimap argMultimap = - ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG); - - if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL) - || !argMultimap.getPreamble().isEmpty()) { - throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE)); - } - - try { - Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME)).get(); - Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE)).get(); - Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL)).get(); - Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS)).get(); - Set tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); - - Person person = new Person(name, phone, email, address, tagList); - - return new AddCommand(person); - } catch (IllegalValueException ive) { - throw new ParseException(ive.getMessage(), ive); - } - } - - /** - * Returns true if none of the prefixes contains empty {@code Optional} values in the given - * {@code ArgumentMultimap}. - */ - private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) { - return Stream.of(prefixes).allMatch(prefix -> argumentMultimap.getValue(prefix).isPresent()); - } - -} diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java index 516859f75f43..fedeb6fc32eb 100644 --- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java +++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java @@ -7,7 +7,6 @@ import java.util.regex.Pattern; import seedu.address.logic.commands.AddClientCommand; -import seedu.address.logic.commands.AddCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.Command; import seedu.address.logic.commands.DeleteCommand; @@ -19,7 +18,6 @@ import seedu.address.logic.commands.ListCommand; import seedu.address.logic.commands.MatchCommand; import seedu.address.logic.commands.RedoCommand; -import seedu.address.logic.commands.SelectCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.logic.parser.exceptions.ParseException; @@ -50,18 +48,10 @@ public Command parseCommand(String userInput) throws ParseException { final String arguments = matcher.group("arguments"); switch (commandWord) { - case AddCommand.COMMAND_WORD: - case AddCommand.COMMAND_ALIAS: - return new AddCommandParser().parse(arguments); - case EditCommand.COMMAND_WORD: case EditCommand.COMMAND_ALIAS: return new EditCommandParser().parse(arguments); - case SelectCommand.COMMAND_WORD: - case SelectCommand.COMMAND_ALIAS: - return new SelectCommandParser().parse(arguments); - case DeleteCommand.COMMAND_WORD: case DeleteCommand.COMMAND_ALIAS: return new DeleteCommandParser().parse(arguments); diff --git a/src/main/java/seedu/address/logic/parser/SelectCommandParser.java b/src/main/java/seedu/address/logic/parser/SelectCommandParser.java deleted file mode 100644 index bbcae8f4b588..000000000000 --- a/src/main/java/seedu/address/logic/parser/SelectCommandParser.java +++ /dev/null @@ -1,29 +0,0 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; - -import seedu.address.commons.core.index.Index; -import seedu.address.commons.exceptions.IllegalValueException; -import seedu.address.logic.commands.SelectCommand; -import seedu.address.logic.parser.exceptions.ParseException; - -/** - * Parses input arguments and creates a new SelectCommand object - */ -public class SelectCommandParser implements Parser { - - /** - * Parses the given {@code String} of arguments in the context of the SelectCommand - * and returns an SelectCommand object for execution. - * @throws ParseException if the user input does not conform the expected format - */ - public SelectCommand parse(String args) throws ParseException { - try { - Index index = ParserUtil.parseIndex(args); - return new SelectCommand(index); - } catch (IllegalValueException ive) { - throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectCommand.MESSAGE_USAGE)); - } - } -} diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 3fce11d07c90..175c1906441d 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -23,7 +23,6 @@ */ public class AddressBook implements ReadOnlyAddressBook { - private final UniquePersonList persons; private final UniqueClientList students; private final UniqueClientList tutors; private final UniqueTagList tags; @@ -36,7 +35,6 @@ public class AddressBook implements ReadOnlyAddressBook { * among constructors. */ { - persons = new UniquePersonList(); students = new UniqueClientList(); tutors = new UniqueClientList(); tags = new UniqueTagList(); @@ -54,10 +52,6 @@ public AddressBook(ReadOnlyAddressBook toBeCopied) { //// list overwrite operations - public void setPersons(List persons) throws DuplicatePersonException { - this.persons.setPersons(persons); - } - public void setStudents(List students) throws DuplicatePersonException { this.students.setClients(students); } @@ -97,22 +91,6 @@ public void resetData(ReadOnlyAddressBook newData) { //// person-level operations - /** - * Adds a person to the address book. - * Also checks the new person's tags and updates {@link #tags} with any new tags found, - * and updates the Tag objects in the person to point to those in {@link #tags}. - * - * @throws DuplicatePersonException if an equivalent person already exists. - */ - public void addPerson(Person p) throws DuplicatePersonException { - Person person = syncWithMasterTagList(p); - // TODO: the tags master list will be updated even though the below line fails. - // This can cause the tags master list to have additional tags that are not tagged to any person - // in the person list. - persons.add(person); - } - - /** * Adds a tutor to TuitionCor. * Also checks the new tutor's tags and updates {@link #tags} with any new tags found, @@ -153,11 +131,11 @@ public void addStudent(Client t) throws DuplicatePersonException { * * @see #syncWithMasterTagList(Client) */ - public void updatePerson(Client target, Client editedCleint, Category category) + public void updatePerson(Client target, Client editedClient, Category category) throws DuplicatePersonException, PersonNotFoundException { - requireNonNull(editedCleint); + requireNonNull(editedClient); - Client syncedEditedPerson = syncWithMasterTagList(editedCleint); + Client syncedEditedPerson = syncWithMasterTagList(editedClient); // TODO: the tags master list will be updated even though the below line fails. // This can cause the tags master list to have additional tags that are not tagged to any person // in the person list. @@ -168,27 +146,6 @@ public void updatePerson(Client target, Client editedCleint, Category category) } } - /** - * Updates the master tag list to include tags in {@code person} that are not in the list. - * @return a copy of this {@code person} such that every tag in this person points to a Tag object in the master - * list. - */ - private Person syncWithMasterTagList(Person person) { - final UniqueTagList personTags = new UniqueTagList(person.getTags()); - tags.mergeFrom(personTags); - - // Create map with values = tag object references in the master list - // used for checking person tag references - final Map masterTagObjects = new HashMap<>(); - tags.forEach(tag -> masterTagObjects.put(tag, tag)); - - // Rebuild the list of person tags to point to the relevant tags in the master tag list. - final Set correctTagReferences = new HashSet<>(); - personTags.forEach(tag -> correctTagReferences.add(masterTagObjects.get(tag))); - return new Person( - person.getName(), person.getPhone(), person.getEmail(), person.getAddress(), correctTagReferences); - } - /** * Updates the master tag list to include tags in {@code client} that are not in the list. * @return a copy of this {@code client} such that every tag in this person points to a Tag object in the master @@ -241,15 +198,12 @@ public void addTag(Tag t) throws UniqueTagList.DuplicateTagException { @Override public String toString() { - return persons.asObservableList().size() + " persons, " + tags.asObservableList().size() + " tags"; + return students.asObservableList().size() + " students, " + + tutors.asObservableList().size() + " tutors, " + + tags.asObservableList().size() + " tags"; // TODO: refine later } - @Override - public ObservableList getPersonList() { - return persons.asObservableList(); - } - @Override public ObservableList getStudentList() { return students.asObservableList(); @@ -269,13 +223,14 @@ public ObservableList getTagList() { public boolean equals(Object other) { return other == this // short circuit if same object || (other instanceof AddressBook // instanceof handles nulls - && this.persons.equals(((AddressBook) other).persons) + && this.students.equals(((AddressBook) other).students) + && this.tutors.equals(((AddressBook) other).tutors) && this.tags.equalsOrderInsensitive(((AddressBook) other).tags)); } @Override public int hashCode() { // use this method for custom fields hashing instead of implementing your own - return Objects.hash(persons, tags); + return Objects.hash(students, tutors, tags); } } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index cac68dd35132..a77a6735ed1b 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -13,8 +13,6 @@ * The API of the Model component. */ public interface Model { - /** {@code Predicate} that always evaluate to true */ - Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; /** {@code Predicate} that always evaluate to true */ Predicate PREDICATE_SHOW_ALL_STUDENTS = unused -> true; @@ -31,9 +29,6 @@ public interface Model { /** Deletes the given client. */ void deleteClient(Client target, Category category) throws PersonNotFoundException; - /** Adds the given person */ - void addPerson(Person person) throws DuplicatePersonException; - /** * Replaces the given person {@code target} with {@code editedClient}. * @@ -50,15 +45,6 @@ void updateClient(Client target, Client editedPerson, Category category) /** Adds the given student */ void addStudent(Client student) throws DuplicatePersonException; - /** Returns an unmodifiable view of the filtered person list */ - ObservableList getFilteredPersonList(); - - /** - * Updates the filter of the filtered person list to filter by the given {@code predicate}. - * @throws NullPointerException if {@code predicate} is null. - */ - void updateFilteredPersonList(Predicate predicate); - /** Returns an unmodifiable view of the filtered students list */ ObservableList getFilteredStudentList(); diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 6c4e94f14bd8..ef41659380f6 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -26,7 +26,6 @@ public class ModelManager extends ComponentManager implements Model { private static final Logger logger = LogsCenter.getLogger(ModelManager.class); private final AddressBook addressBook; - private final FilteredList filteredPersons; private final FilteredList filteredStudents; private final FilteredList filteredTutors; @@ -40,7 +39,6 @@ public ModelManager(ReadOnlyAddressBook addressBook, UserPrefs userPrefs) { logger.fine("Initializing with address book: " + addressBook + " and user prefs " + userPrefs); this.addressBook = new AddressBook(addressBook); - filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); filteredStudents = new FilteredList<>(this.addressBook.getStudentList()); filteredTutors = new FilteredList<>(this.addressBook.getTutorList()); } @@ -71,13 +69,6 @@ public synchronized void deleteClient(Client target, Category category) throws P indicateAddressBookChanged(); } - @Override - public synchronized void addPerson(Person person) throws DuplicatePersonException { - addressBook.addPerson(person); - updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); - indicateAddressBookChanged(); - } - @Override public void updateClient(Client target, Client editedPerson, Category category) throws DuplicatePersonException, PersonNotFoundException { @@ -103,21 +94,6 @@ public synchronized void addStudent(Client student) throws DuplicatePersonExcept //=========== Filtered Person List Accessors ============================================================= - /** - * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of - * {@code addressBook} - */ - @Override - public ObservableList getFilteredPersonList() { - return FXCollections.unmodifiableObservableList(filteredPersons); - } - - @Override - public void updateFilteredPersonList(Predicate predicate) { - requireNonNull(predicate); - filteredPersons.setPredicate(predicate); - } - /** * Returns an unmodifiable view of the list of {@code Client} backed by the internal list of * {@code addressBook} diff --git a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java index db6ec40a1ffc..0522e7b38ed8 100644 --- a/src/main/java/seedu/address/model/ReadOnlyAddressBook.java +++ b/src/main/java/seedu/address/model/ReadOnlyAddressBook.java @@ -10,12 +10,6 @@ */ public interface ReadOnlyAddressBook { - /** - * Returns an unmodifiable view of the persons list. - * This list will not contain any duplicate persons. - */ - ObservableList getPersonList(); - /** * Returns an unmodifiable view of the student list. * This list will not contain any duplicate clients. diff --git a/src/main/java/seedu/address/model/util/SampleDataUtil.java b/src/main/java/seedu/address/model/util/SampleDataUtil.java index aea96bfb31f3..0f92915b909a 100644 --- a/src/main/java/seedu/address/model/util/SampleDataUtil.java +++ b/src/main/java/seedu/address/model/util/SampleDataUtil.java @@ -6,10 +6,14 @@ import seedu.address.model.AddressBook; import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.person.Address; +import seedu.address.model.person.Category; +import seedu.address.model.person.Client; import seedu.address.model.person.Email; +import seedu.address.model.person.Grade; +import seedu.address.model.person.Location; import seedu.address.model.person.Name; -import seedu.address.model.person.Person; import seedu.address.model.person.Phone; +import seedu.address.model.person.Subject; import seedu.address.model.person.exceptions.DuplicatePersonException; import seedu.address.model.tag.Tag; @@ -17,34 +21,34 @@ * Contains utility methods for populating {@code AddressBook} with sample data. */ public class SampleDataUtil { - public static Person[] getSamplePersons() { - return new Person[] { - new Person(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), + public static Client[] getSampleStudents() { + return new Client[] { + new Client(new Name("Alex Yeoh"), new Phone("87438807"), new Email("alexyeoh@example.com"), new Address("Blk 30 Geylang Street 29, #06-40"), - getTagSet("friends")), - new Person(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), + getTagSet("friends"), new Location("north"), new Grade("pri2"), new Subject("math"), new Category("s")), + new Client(new Name("Bernice Yu"), new Phone("99272758"), new Email("berniceyu@example.com"), new Address("Blk 30 Lorong 3 Serangoon Gardens, #07-18"), - getTagSet("colleagues", "friends")), - new Person(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), + getTagSet("colleagues", "friends"), new Location("central"), new Grade("sec1"), new Subject("physics"), new Category("s")), + new Client(new Name("Charlotte Oliveiro"), new Phone("93210283"), new Email("charlotte@example.com"), new Address("Blk 11 Ang Mo Kio Street 74, #11-04"), - getTagSet("neighbours")), - new Person(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), + getTagSet("neighbours"), new Location("north"), new Grade("pri2"), new Subject("physics"), new Category("s")), + new Client(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"), new Address("Blk 436 Serangoon Gardens Street 26, #16-43"), - getTagSet("family")), - new Person(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), + getTagSet("family"), new Location("central"), new Grade("sec1"), new Subject("chemistry"), new Category("s")), + new Client(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"), new Address("Blk 47 Tampines Street 20, #17-35"), - getTagSet("classmates")), - new Person(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), + getTagSet("classmates"), new Location("north"), new Grade("pri2"), new Subject("math"), new Category("s")), + new Client(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"), new Address("Blk 45 Aljunied Street 85, #11-31"), - getTagSet("colleagues")) + getTagSet("colleagues"), new Location("central"), new Grade("sec1"), new Subject("physics"), new Category("s")) }; } public static ReadOnlyAddressBook getSampleAddressBook() { try { AddressBook sampleAb = new AddressBook(); - for (Person samplePerson : getSamplePersons()) { - sampleAb.addPerson(samplePerson); + for (Client sampleStudent : getSampleStudents()) { + sampleAb.addStudent(sampleStudent); } return sampleAb; } catch (DuplicatePersonException e) { diff --git a/src/test/java/seedu/address/logic/commands/SelectCommandTest.java b/src/test/java/seedu/address/logic/commands/SelectCommandTest.java deleted file mode 100644 index 4840900602ac..000000000000 --- a/src/test/java/seedu/address/logic/commands/SelectCommandTest.java +++ /dev/null @@ -1,141 +0,0 @@ -package seedu.address.logic.commands; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; -import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON; -import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -import seedu.address.commons.core.Messages; -import seedu.address.commons.core.index.Index; -import seedu.address.commons.events.ui.JumpToListRequestEvent; -import seedu.address.logic.CommandHistory; -import seedu.address.logic.UndoRedoStack; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.model.Model; -import seedu.address.model.ModelManager; -import seedu.address.model.UserPrefs; -import seedu.address.ui.testutil.EventsCollectorRule; - -/** - * Contains integration tests (interaction with the Model) for {@code SelectCommand}. - */ -public class SelectCommandTest { - @Rule - public final EventsCollectorRule eventsCollectorRule = new EventsCollectorRule(); - - private Model model; - - @Before - public void setUp() { - model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); - } - - @Test - public void execute_validIndexUnfilteredList_success() { - Index lastPersonIndex = Index.fromOneBased(model.getFilteredPersonList().size()); - - assertExecutionSuccess(INDEX_FIRST_PERSON); - assertExecutionSuccess(INDEX_THIRD_PERSON); - assertExecutionSuccess(lastPersonIndex); - } - - @Test - public void execute_invalidIndexUnfilteredList_failure() { - Index outOfBoundsIndex = Index.fromOneBased(model.getFilteredPersonList().size() + 1); - - assertExecutionFailure(outOfBoundsIndex, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); - } - - @Test - public void execute_validIndexFilteredList_success() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); - - assertExecutionSuccess(INDEX_FIRST_PERSON); - } - - @Test - public void execute_invalidIndexFilteredList_failure() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); - - Index outOfBoundsIndex = INDEX_SECOND_PERSON; - // ensures that outOfBoundIndex is still in bounds of address book list - assertTrue(outOfBoundsIndex.getZeroBased() < model.getAddressBook().getPersonList().size()); - - assertExecutionFailure(outOfBoundsIndex, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); - } - - @Test - public void equals() { - SelectCommand selectFirstCommand = new SelectCommand(INDEX_FIRST_PERSON); - SelectCommand selectSecondCommand = new SelectCommand(INDEX_SECOND_PERSON); - - // same object -> returns true - assertTrue(selectFirstCommand.equals(selectFirstCommand)); - - // same values -> returns true - SelectCommand selectFirstCommandCopy = new SelectCommand(INDEX_FIRST_PERSON); - assertTrue(selectFirstCommand.equals(selectFirstCommandCopy)); - - // different types -> returns false - assertFalse(selectFirstCommand.equals(1)); - - // null -> returns false - assertFalse(selectFirstCommand.equals(null)); - - // different person -> returns false - assertFalse(selectFirstCommand.equals(selectSecondCommand)); - } - - /** - * Executes a {@code SelectCommand} with the given {@code index}, and checks that {@code JumpToListRequestEvent} - * is raised with the correct index. - */ - private void assertExecutionSuccess(Index index) { - SelectCommand selectCommand = prepareCommand(index); - - try { - CommandResult commandResult = selectCommand.execute(); - assertEquals(String.format(SelectCommand.MESSAGE_SELECT_PERSON_SUCCESS, index.getOneBased()), - commandResult.feedbackToUser); - } catch (CommandException ce) { - throw new IllegalArgumentException("Execution of command should not fail.", ce); - } - - JumpToListRequestEvent lastEvent = (JumpToListRequestEvent) eventsCollectorRule.eventsCollector.getMostRecent(); - assertEquals(index, Index.fromZeroBased(lastEvent.targetIndex)); - } - - /** - * Executes a {@code SelectCommand} with the given {@code index}, and checks that a {@code CommandException} - * is thrown with the {@code expectedMessage}. - */ - private void assertExecutionFailure(Index index, String expectedMessage) { - SelectCommand selectCommand = prepareCommand(index); - - try { - selectCommand.execute(); - fail("The expected CommandException was not thrown."); - } catch (CommandException ce) { - assertEquals(expectedMessage, ce.getMessage()); - assertTrue(eventsCollectorRule.eventsCollector.isEmpty()); - } - } - - /** - * Returns a {@code SelectCommand} with parameters {@code index}. - */ - private SelectCommand prepareCommand(Index index) { - SelectCommand selectCommand = new SelectCommand(index); - selectCommand.setData(model, new CommandHistory(), new UndoRedoStack()); - return selectCommand; - } -} diff --git a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java index c9a350c09657..4b56d1f7cd1b 100644 --- a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java @@ -33,7 +33,6 @@ import org.junit.Test; -import seedu.address.logic.commands.AddCommand; import seedu.address.model.person.Address; import seedu.address.model.person.Email; import seedu.address.model.person.Name; diff --git a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java index 5e3aeec9a89d..ee1cffa3bffb 100644 --- a/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddressBookParserTest.java @@ -16,7 +16,6 @@ import org.junit.rules.ExpectedException; import seedu.address.logic.commands.AddClientCommand; -import seedu.address.logic.commands.AddCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.EditCommand; @@ -27,7 +26,6 @@ import seedu.address.logic.commands.HistoryCommand; import seedu.address.logic.commands.ListCommand; import seedu.address.logic.commands.RedoCommand; -import seedu.address.logic.commands.SelectCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.person.Client; @@ -191,20 +189,6 @@ public void parseCommand_listAlias() throws Exception { assertTrue(parser.parseCommand(ListCommand.COMMAND_ALIAS + " 3") instanceof ListCommand); } - @Test - public void parseCommand_select() throws Exception { - SelectCommand command = (SelectCommand) parser.parseCommand( - SelectCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); - assertEquals(new SelectCommand(INDEX_FIRST_PERSON), command); - } - - @Test - public void parseCommand_selectAlias() throws Exception { - SelectCommand command = (SelectCommand) parser.parseCommand( - SelectCommand.COMMAND_ALIAS + " " + INDEX_FIRST_PERSON.getOneBased()); - assertEquals(new SelectCommand(INDEX_FIRST_PERSON), command); - } - @Test public void parseCommand_redoCommandWord_returnsRedoCommand() throws Exception { assertTrue(parser.parseCommand(RedoCommand.COMMAND_WORD) instanceof RedoCommand); diff --git a/src/test/java/seedu/address/logic/parser/SelectCommandParserTest.java b/src/test/java/seedu/address/logic/parser/SelectCommandParserTest.java deleted file mode 100644 index 513ee46acd33..000000000000 --- a/src/test/java/seedu/address/logic/parser/SelectCommandParserTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package seedu.address.logic.parser; - -import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; -import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; - -import org.junit.Test; - -import seedu.address.logic.commands.SelectCommand; - -/** - * Test scope: similar to {@code DeleteCommandParserTest}. - * @see DeleteCommandParserTest - */ -public class SelectCommandParserTest { - - private SelectCommandParser parser = new SelectCommandParser(); - - @Test - public void parse_validArgs_returnsSelectCommand() { - assertParseSuccess(parser, "1", new SelectCommand(INDEX_FIRST_PERSON)); - } - - @Test - public void parse_invalidArgs_throwsParseException() { - assertParseFailure(parser, "a", String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectCommand.MESSAGE_USAGE)); - } -} diff --git a/src/test/java/seedu/address/testutil/PersonUtil.java b/src/test/java/seedu/address/testutil/PersonUtil.java index 642d4f174514..6950b856afa9 100644 --- a/src/test/java/seedu/address/testutil/PersonUtil.java +++ b/src/test/java/seedu/address/testutil/PersonUtil.java @@ -6,7 +6,6 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; -import seedu.address.logic.commands.AddCommand; import seedu.address.model.person.Person; /** diff --git a/src/test/java/systemtests/AddCommandSystemTest.java b/src/test/java/systemtests/AddCommandSystemTest.java index 3254b60154c4..228f973d0f59 100644 --- a/src/test/java/systemtests/AddCommandSystemTest.java +++ b/src/test/java/systemtests/AddCommandSystemTest.java @@ -38,7 +38,6 @@ import seedu.address.commons.core.Messages; import seedu.address.commons.core.index.Index; -import seedu.address.logic.commands.AddCommand; import seedu.address.logic.commands.RedoCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.model.Model; diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index e1adaaa78ed8..e81b111832c3 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -28,7 +28,6 @@ import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.FindCommand; import seedu.address.logic.commands.ListCommand; -import seedu.address.logic.commands.SelectCommand; import seedu.address.model.AddressBook; import seedu.address.model.Model; import seedu.address.testutil.TypicalPersons; @@ -137,14 +136,6 @@ protected void showPersonsWithName(String keyword) { assertTrue(getModel().getFilteredPersonList().size() < getModel().getAddressBook().getPersonList().size()); } - /** - * Selects the person at {@code index} of the displayed list. - */ - protected void selectPerson(Index index) { - executeCommand(SelectCommand.COMMAND_WORD + " " + index.getOneBased()); - assertEquals(index.getZeroBased(), getStudentListPanel().getSelectedCardIndex()); - } - /** * Deletes all persons in the address book. */ diff --git a/src/test/java/systemtests/HelpCommandSystemTest.java b/src/test/java/systemtests/HelpCommandSystemTest.java index 5a271be1ac4c..bd44b66ba77b 100644 --- a/src/test/java/systemtests/HelpCommandSystemTest.java +++ b/src/test/java/systemtests/HelpCommandSystemTest.java @@ -13,7 +13,6 @@ import guitests.guihandles.HelpWindowHandle; import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.SelectCommand; import seedu.address.ui.StatusBarFooter; /** diff --git a/src/test/java/systemtests/SelectCommandSystemTest.java b/src/test/java/systemtests/SelectCommandSystemTest.java index 836b8809cb46..b76cdb3a3b1c 100644 --- a/src/test/java/systemtests/SelectCommandSystemTest.java +++ b/src/test/java/systemtests/SelectCommandSystemTest.java @@ -13,7 +13,6 @@ import seedu.address.commons.core.index.Index; import seedu.address.logic.commands.RedoCommand; -import seedu.address.logic.commands.SelectCommand; import seedu.address.logic.commands.UndoCommand; import seedu.address.model.Model; From 153ca61125cbc053c2ea0d51463de2777091660a Mon Sep 17 00:00:00 2001 From: shookshire Date: Wed, 28 Mar 2018 23:33:15 +0800 Subject: [PATCH 140/280] Fix most junit test --- .../address/logic/commands/DeleteCommand.java | 1 - .../address/logic/commands/EditCommand.java | 2 +- .../logic/parser/AddClientCommandParser.java | 2 +- .../exceptions/DuplicatePersonException.java | 2 +- .../data/XmlUtilTest/validAddressBook.xml | 72 +++++-- .../guitests/guihandles/PersonCardHandle.java | 36 +++- src/test/java/seedu/address/TestApp.java | 2 +- .../address/commons/util/XmlUtilTest.java | 9 +- .../seedu/address/logic/LogicManagerTest.java | 4 +- ...a => AddClientCommandIntegrationTest.java} | 23 +- .../logic/commands/AddClientCommandTest.java | 27 +-- .../logic/commands/AddCommandTest.java | 204 ------------------ .../logic/commands/CommandTestUtil.java | 57 +++-- .../logic/commands/DeleteCommandTest.java | 37 ++-- .../logic/commands/EditCommandTest.java | 63 +++--- .../logic/commands/FindCommandTest.java | 6 +- .../logic/commands/RedoCommandTest.java | 5 +- .../logic/commands/UndoCommandTest.java | 5 +- .../logic/commands/UndoableCommandTest.java | 6 +- .../parser/AddClientCommandParserTest.java | 136 ++++++++++++ .../logic/parser/AddCommandParserTest.java | 145 ------------- .../logic/parser/AddressBookParserTest.java | 37 ++-- .../logic/parser/DeleteCommandParserTest.java | 3 +- .../logic/parser/EditCommandParserTest.java | 123 +++++------ .../seedu/address/model/AddressBookTest.java | 19 +- .../seedu/address/model/ModelManagerTest.java | 8 +- .../SearchContainsKeywordsPredicateTest.java | 16 +- .../storage/XmlAddressBookStorageTest.java | 7 +- .../address/testutil/AddressBookBuilder.java | 5 +- .../seedu/address/testutil/ClientBuilder.java | 2 +- .../testutil/EditPersonDescriptorBuilder.java | 54 ++++- .../seedu/address/testutil/PersonBuilder.java | 94 -------- .../seedu/address/testutil/PersonUtil.java | 3 +- .../java/seedu/address/testutil/TestUtil.java | 9 +- ...ersonCardTest.java => ClientCardTest.java} | 39 ++-- .../seedu/address/ui/PersonListPanelTest.java | 2 +- .../address/ui/testutil/GuiTestAssert.java | 19 +- .../systemtests/AddCommandSystemTest.java | 128 +++++------ .../systemtests/AddressBookSystemTest.java | 10 +- .../systemtests/ClearCommandSystemTest.java | 6 - .../systemtests/DeleteCommandSystemTest.java | 37 ++-- .../systemtests/EditCommandSystemTest.java | 94 +++----- .../systemtests/FindCommandSystemTest.java | 13 +- .../systemtests/HelpCommandSystemTest.java | 7 - src/test/java/systemtests/ModelHelper.java | 15 +- src/test/java/systemtests/SampleDataTest.java | 3 +- .../systemtests/SelectCommandSystemTest.java | 152 ------------- 47 files changed, 650 insertions(+), 1099 deletions(-) rename src/test/java/seedu/address/logic/commands/{AddCommandIntegrationTest.java => AddClientCommandIntegrationTest.java} (66%) delete mode 100644 src/test/java/seedu/address/logic/commands/AddCommandTest.java create mode 100644 src/test/java/seedu/address/logic/parser/AddClientCommandParserTest.java delete mode 100644 src/test/java/seedu/address/logic/parser/AddCommandParserTest.java delete mode 100644 src/test/java/seedu/address/testutil/PersonBuilder.java rename src/test/java/seedu/address/ui/{PersonCardTest.java => ClientCardTest.java} (56%) delete mode 100644 src/test/java/systemtests/SelectCommandSystemTest.java diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/seedu/address/logic/commands/DeleteCommand.java index e4e0ddf345c9..6dcd6bf5374b 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteCommand.java @@ -40,7 +40,6 @@ public DeleteCommand(Index targetIndex, Category category) { this.category = category; } - @Override public CommandResult executeUndoableCommand() { requireNonNull(clientToDelete); diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 5da775056bba..29a82b95e251 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -182,7 +182,7 @@ public EditPersonDescriptor(EditPersonDescriptor toCopy) { */ public boolean isAnyFieldEdited() { return CollectionUtil.isAnyNonNull(this.name, this.phone, this.email, this.address, this.tags, - this.location, this.grade, this.subject, this.category); + this.location, this.grade, this.subject); } public void setName(Name name) { diff --git a/src/main/java/seedu/address/logic/parser/AddClientCommandParser.java b/src/main/java/seedu/address/logic/parser/AddClientCommandParser.java index b77ad64242ff..9080a925e8b1 100644 --- a/src/main/java/seedu/address/logic/parser/AddClientCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/AddClientCommandParser.java @@ -31,7 +31,7 @@ /** * Parses input arguments and creates a new AddClientCommand object */ -public class AddClientCommandParser { +public class AddClientCommandParser implements Parser { /** * Parses the given {@code String} of arguments in the context of the AddClientCommand diff --git a/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java b/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java index fce401885dc8..3d7982c51907 100644 --- a/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java +++ b/src/main/java/seedu/address/model/person/exceptions/DuplicatePersonException.java @@ -7,6 +7,6 @@ */ public class DuplicatePersonException extends DuplicateDataException { public DuplicatePersonException() { - super("Operation would result in duplicate persons"); + super("Operation would result in duplicate clients"); } } diff --git a/src/test/data/XmlUtilTest/validAddressBook.xml b/src/test/data/XmlUtilTest/validAddressBook.xml index 6265778674d3..b7e7a0dd1e60 100644 --- a/src/test/data/XmlUtilTest/validAddressBook.xml +++ b/src/test/data/XmlUtilTest/validAddressBook.xml @@ -1,57 +1,93 @@ - + Hans Muster 9482424 hans@example.com
4th street
-
- + north + pri1 + math + s + + Ruth Mueller 87249245 ruth@example.com
81th street
-
- + north + pri1 + math + s + + Heinz Kurz 95352563 heinz@example.com
wall street
-
- + north + pri1 + math + s + + Cornelia Meier 87652533 cornelia@example.com
10th street
-
- + north + pri1 + math + s + + Werner Meyer 9482224 werner@example.com
michegan ave
-
- + north + pri1 + math + s + + Lydia Kunz 9482427 lydia@example.com
little tokyo
-
- + north + pri1 + math + s + + Anna Best 9482442 anna@example.com
4th street
-
- + north + pri1 + math + s + + Stefan Meier 8482424 stefan@example.com
little india
-
- + north + pri1 + math + s + + Martin Mueller 8482131 hans@example.com
chicago ave
-
+ north + pri1 + math + s +
diff --git a/src/test/java/guitests/guihandles/PersonCardHandle.java b/src/test/java/guitests/guihandles/PersonCardHandle.java index a5c1466c8fd4..59ef6b1dbf0b 100644 --- a/src/test/java/guitests/guihandles/PersonCardHandle.java +++ b/src/test/java/guitests/guihandles/PersonCardHandle.java @@ -8,7 +8,7 @@ import javafx.scene.layout.Region; /** - * Provides a handle to a person card in the person list panel. + * Provides a handle to a client card in the person list panel. */ public class PersonCardHandle extends NodeHandle { private static final String ID_FIELD_ID = "#id"; @@ -17,6 +17,12 @@ public class PersonCardHandle extends NodeHandle { private static final String PHONE_FIELD_ID = "#phone"; private static final String EMAIL_FIELD_ID = "#email"; private static final String TAGS_FIELD_ID = "#tags"; + private static final String LOCATION_FIELD_ID = "#location"; + private static final String GRADE_FIELD_ID = "#grade"; + private static final String SUBJECT_FIELD_ID = "#subject"; + private static final String CATEGORY_FIELD_ID = "#category"; + + private final Label idLabel; private final Label nameLabel; @@ -24,6 +30,13 @@ public class PersonCardHandle extends NodeHandle { private final Label phoneLabel; private final Label emailLabel; private final List