From 5d9dbe9c6861d3ed83d261b672240cd4c6c22a67 Mon Sep 17 00:00:00 2001 From: chenhaodong Date: Wed, 25 Dec 2024 12:40:08 +0800 Subject: [PATCH] mod --- .idea/inspectionProfiles/Project_Default.xml | 10 + .idea/uiDesigner.xml | 124 +++++++++++ .idea/vcs.xml | 6 + src/main/java/org/example/Main.java | 210 ++---------------- .../java/org/example/ManageSatellites.java | 181 +++++++++++++++ .../org/example/{model => }/Satellite.java | 22 +- src/main/java/org/example/Satellites.java | 68 ++++++ target/classes/org/example/Main.class | Bin 7555 -> 2815 bytes .../org/example/ManageSatellites.class | Bin 0 -> 6203 bytes target/classes/org/example/Satellite.class | Bin 0 -> 2583 bytes target/classes/org/example/Satellites.class | Bin 0 -> 2839 bytes .../classes/org/example/model/Satellite.class | Bin 1875 -> 0 bytes 12 files changed, 428 insertions(+), 193 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/org/example/ManageSatellites.java rename src/main/java/org/example/{model => }/Satellite.java (69%) create mode 100644 src/main/java/org/example/Satellites.java create mode 100644 target/classes/org/example/ManageSatellites.class create mode 100644 target/classes/org/example/Satellite.class create mode 100644 target/classes/org/example/Satellites.class delete mode 100644 target/classes/org/example/model/Satellite.class diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d2bcfe5 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java index b3aa0a1..be08307 100644 --- a/src/main/java/org/example/Main.java +++ b/src/main/java/org/example/Main.java @@ -3,45 +3,42 @@ package org.example; -import org.example.model.Satellite; - import java.util.Scanner; import java.util.ArrayList; -import java.util.Scanner; public class Main { - private static ArrayList satellites = new ArrayList<>(); - + public static void main(String[] args) { // 初始化五个卫星对象 - satellites.add(new Satellite("1999-025A", "卫星一号", 7000, true)); - satellites.add(new Satellite("2000-036A", "卫星二号", 8000, false)); - satellites.add(new Satellite("2001-047A", "卫星三号", 9000, true)); - satellites.add(new Satellite("2002-058A", "卫星四号", 10000, false)); - satellites.add(new Satellite("2003-069A", "卫星五号", 11000, true)); - + Satellites sa=new Satellites(); + // 获取卫星集合 + ArrayList satellites = sa.getSatellites(); + // 开启控制台输入 Scanner scanner = new Scanner(System.in); + // 创建调用方法对象实例 + ManageSatellites manage=new ManageSatellites(); + // 第一次显示菜单 displayMenu(); do { String choose = scanner.next(); switch (choose) { //1-----显示目前活动卫星列表。 - case "1" -> showSatelliteList(); + case "1" -> manage.showSatelliteList(satellites); //2-----注册新卫星。 - case "2" -> addNewSatellite(scanner); + case "2" -> manage.addNewSatellite(scanner,satellites); //3-----删除旧卫星。 - case "3" -> delOldSatellite(scanner); + case "3" -> manage.delOldSatellite(scanner,satellites); //4-----激活卫星。 - case "4" -> activeSatellite(scanner); + case "4" -> manage.activeSatellite(scanner,satellites); //5-----封锁(失活)卫星。 - case "5" -> blockSatellite(scanner); + case "5" -> manage.blockSatellite(scanner,satellites); //6-----显示失活卫星列表。 - case "6" -> showBlockSatelliteList(); + case "6" -> manage.showBlockSatelliteList(satellites); //7-----按名称模糊查找卫星。 - case "7" -> querySatelliteByNameLike(scanner); + case "7" -> manage.querySatelliteByNameLike(scanner,satellites); //8-----修改卫星信息。 - case "8" -> modStatelliteInfo(scanner); + case "8" -> manage.modifySatellite(scanner,satellites); //9-----退出! case "9" -> { System.out.println("退出"); @@ -49,135 +46,11 @@ public class Main { } default -> System.out.println("没有这个选项"); } - + //循环显示菜单 displayMenu(); } while (scanner.hasNext()); } - //1-----显示目前活动卫星列表。 - private static void showSatelliteList() { - for (Satellite satellite : satellites) { - if (satellite.isActivated()) { - System.out.println(satellite); - } - } - } - - //2-----注册新卫星。 - private static void addNewSatellite(Scanner scanner) { - String cosparId = readString(scanner, "请输入卫星的COSPARID: "); - String name = readString(scanner, "请输入卫星的名称: "); - double r = readDouble(scanner, "请输入卫星的半径: "); - boolean activated = readBoolean(scanner, "请输入卫星的状态 (true/false): "); - - Satellite newSatellite = new Satellite(cosparId, name, r, activated); - satellites.add(newSatellite); - System.out.println("卫星已添加: " + newSatellite); - } - - //3-----删除旧卫星。 - private static void delOldSatellite(Scanner scanner) { - String cosparId = readString(scanner, "请输入要删除的卫星COSPARID: "); - boolean flag = false; - for (Satellite se : satellites) { - if (se.getCOSPARID().equals(cosparId)) { - satellites.remove(se); - System.out.println("卫星已删除: " + se); - flag = true; - break; - } - } - if (!flag) { - System.out.println("无效的COSPARID"); - } - } - - //4-----激活卫星。 - private static void activeSatellite(Scanner scanner) { - String cosparId = readString(scanner, "请输入要激活的卫星COSPARID: "); - boolean flag = false; - for (Satellite se : satellites) { - if (se.getCOSPARID().equals(cosparId)) { - if (se.isActivated()) { - System.out.println("卫星已处于激活状态,无需重新激活: " + se); - flag = true; - break; - } - se.setActivated(true); - System.out.println("卫星已激活: " + se); - flag = true; - break; - } - } - if (!flag) { - System.out.println("无效的COSPARID"); - } - } - - //5-----封锁(失活)卫星。 - private static void blockSatellite(Scanner scanner) { - String cosparId = readString(scanner, "请输入要封锁的卫星COSPARID: "); - boolean flag = false; - for (Satellite se : satellites) { - if (se.getCOSPARID().equals(cosparId)) { - if (!se.isActivated()) { - System.out.println("卫星已处于失活状态,无需重新封锁: " + se); - flag = true; - break; - } - se.setActivated(false); - System.out.println("卫星已封锁: " + se); - flag = true; - break; - } - } - if (!flag) { - System.out.println("无效的COSPARID"); - } - } - - //6-----显示失活卫星列表。 - private static void showBlockSatelliteList() { - for (Satellite satellite : satellites) { - if (!satellite.isActivated()) { - System.out.println(satellite); - } - } - } - - //7-----按名称模糊查找卫星。 - private static void querySatelliteByNameLike(Scanner scanner) { - String keyword = readString(scanner, "请输入要查找的卫星名称关键字: "); - for (Satellite satellite : satellites) { - if (satellite.getName().contains(keyword)) { - System.out.println(satellite); - } - } - } - - //8-----修改卫星信息。 - private static void modStatelliteInfo(Scanner scanner) { - String cosparId = readString(scanner, "请输入要修改的卫星COSPARID: "); - boolean flag = false; - for (Satellite se : satellites) { - if (se.getCOSPARID().equals(cosparId)) { - String newCosparId = readString(scanner, "请输入卫星的COSPARID: "); - se.setCOSPARID(newCosparId); - String newName = readString(scanner, "请输入卫星的名称: "); - se.setName(newName); - double newR = readDouble(scanner, "请输入卫星的半径: "); - se.setR(newR); - boolean newActivated = readBoolean(scanner, "请输入卫星的状态 (true/false): "); - se.setActivated(newActivated); - System.out.println("卫星信息已修改: " + se); - flag = true; - break; - } - } - if (!flag) { - System.out.println("无效的COSPARID"); - } - } //显示菜单 public static void displayMenu() { @@ -195,52 +68,5 @@ public class Main { System.out.print("选择:"); } - // 读取字符串输入并校验 - private static String readString(Scanner scanner, String prompt) { - String input; - do { - System.out.print(prompt); - input = scanner.next(); - if (input.trim().isEmpty()) { - System.out.println("输入不能为空,请重新输入。"); - } - } while (input.trim().isEmpty()); - return input; - } - - // 读取双精度浮点数输入并校验 - private static double readDouble(Scanner scanner, String prompt) { - double input; - while (true) { - System.out.print(prompt); - if (scanner.hasNextDouble()) { - input = scanner.nextDouble(); - if (input <= 0) { - System.out.println("半径必须大于0,请重新输入。"); - } else { - break; - } - } else { - System.out.println("输入无效,请输入一个数字。"); - scanner.next(); // 清除无效输入 - } - } - return input; - } - - // 读取布尔值输入并校验 - private static boolean readBoolean(Scanner scanner, String prompt) { - boolean input; - while (true) { - System.out.print(prompt); - if (scanner.hasNextBoolean()) { - input = scanner.nextBoolean(); - break; - } else { - System.out.println("输入无效,请输入 true 或 false。"); - scanner.next(); // 清除无效输入 - } - } - return input; - } + } diff --git a/src/main/java/org/example/ManageSatellites.java b/src/main/java/org/example/ManageSatellites.java new file mode 100644 index 0000000..d41f748 --- /dev/null +++ b/src/main/java/org/example/ManageSatellites.java @@ -0,0 +1,181 @@ +package org.example; + +import java.util.List; +import java.util.Scanner; + +public class ManageSatellites { + //进一步设计每一个卫星操作方法的细节流程(显示、验证信息) + //课堂演示其中一个功能方法 + + //1-----显示目前活动卫星列表。 + public void showSatelliteList(List satellites) { + for (Satellite satellite : satellites) { + if (satellite.isActivated()) { + System.out.println(satellite); + } + } + } + + //2-----注册新卫星。 + public void addNewSatellite(Scanner scanner, List satellites) { + String cosparId = readString(scanner, "请输入卫星的COSPARID: "); + String name = readString(scanner, "请输入卫星的名称: "); + double r = readDouble(scanner, "请输入卫星的半径: "); + boolean activated = readBoolean(scanner, "请输入卫星的状态 (true/false): "); + + Satellite newSatellite = new Satellite(cosparId, name, r, activated); + satellites.add(newSatellite); + System.out.println("卫星已添加: " + newSatellite); + } + + //3-----删除旧卫星。 + public void delOldSatellite(Scanner scanner, List satellites) { + String cosparId = readString(scanner, "请输入要删除的卫星COSPARID: "); + boolean flag = false; + for (Satellite se : satellites) { + if (se.getCOSPARID().equals(cosparId)) { + satellites.remove(se); + System.out.println("卫星已删除: " + se); + flag = true; + break; + } + } + if (!flag) { + System.out.println("无效的COSPARID"); + } + } + //4-----激活卫星。 + public void activeSatellite(Scanner scanner, List satellites) { + String cosparId = readString(scanner, "请输入要激活的卫星COSPARID: "); + boolean flag = false; + for (Satellite se : satellites) { + if (se.getCOSPARID().equals(cosparId)) { + if (se.isActivated()) { + System.out.println("卫星已处于激活状态,无需重新激活: " + se); + flag = true; + break; + } + se.setActivated(true); + System.out.println("卫星已激活: " + se); + flag = true; + break; + } + } + if (!flag) { + System.out.println("无效的COSPARID"); + } + } + //5-----封锁(失活)卫星。 + public void blockSatellite(Scanner scanner, List satellites) { + String cosparId = readString(scanner, "请输入要封锁的卫星COSPARID: "); + boolean flag = false; + for (Satellite se : satellites) { + if (se.getCOSPARID().equals(cosparId)) { + if (!se.isActivated()) { + System.out.println("卫星已处于失活状态,无需重新封锁: " + se); + flag = true; + break; + } + se.setActivated(false); + System.out.println("卫星已封锁: " + se); + flag = true; + break; + } + } + if (!flag) { + System.out.println("无效的COSPARID"); + } + } + //6-----显示失活卫星列表。 + public void showBlockSatelliteList(List satellites) { + for (Satellite satellite : satellites) { + if (!satellite.isActivated()) { + System.out.println(satellite); + } + } + } + //7-----按名称模糊查找卫星。 + public void querySatelliteByNameLike(Scanner scanner, List satellites) { + String keyword = readString(scanner, "请输入要查找的卫星名称关键字: "); + for (Satellite satellite : satellites) { + if (satellite.getName().contains(keyword)) { + System.out.println(satellite); + } + } + } + + //8-----修改卫星信息。 + public void modifySatellite(Scanner scanner, List satellites) { + + String cosparId = readString(scanner, "请输入要修改的卫星COSPARID: "); + boolean flag = false; + for (Satellite se : satellites) { + if (se.getCOSPARID().equals(cosparId)) { + String newCosparId = readString(scanner, "请输入卫星的COSPARID: "); + se.setCOSPARID(newCosparId); + String newName = readString(scanner, "请输入卫星的名称: "); + se.setName(newName); + double newR = readDouble(scanner, "请输入卫星的半径: "); + se.setR(newR); + boolean newActivated = readBoolean(scanner, "请输入卫星的状态 (true/false): "); + se.setActivated(newActivated); + System.out.println("卫星信息已修改: " + se); + flag = true; + break; + } + } + if (!flag) { + System.out.println("无效的COSPARID"); + } + } + + + // 读取字符串输入并校验 + private static String readString(Scanner scanner, String prompt) { + String input; + do { + System.out.print(prompt); + input = scanner.next(); + if (input.trim().isEmpty()) { + System.out.println("输入不能为空,请重新输入。"); + } + } while (input.trim().isEmpty()); + return input; + } + + // 读取双精度浮点数输入并校验 + private static double readDouble(Scanner scanner, String prompt) { + double input; + while (true) { + System.out.print(prompt); + if (scanner.hasNextDouble()) { + input = scanner.nextDouble(); + if (input <= 0) { + System.out.println("半径必须大于0,请重新输入。"); + } else { + break; + } + } else { + System.out.println("输入无效,请输入一个数字。"); + scanner.next(); // 清除无效输入 + } + } + return input; + } + + // 读取布尔值输入并校验 + private static boolean readBoolean(Scanner scanner, String prompt) { + boolean input; + while (true) { + System.out.print(prompt); + if (scanner.hasNextBoolean()) { + input = scanner.nextBoolean(); + break; + } else { + System.out.println("输入无效,请输入 true 或 false。"); + scanner.next(); // 清除无效输入 + } + } + return input; + } +} diff --git a/src/main/java/org/example/model/Satellite.java b/src/main/java/org/example/Satellite.java similarity index 69% rename from src/main/java/org/example/model/Satellite.java rename to src/main/java/org/example/Satellite.java index 13f72e3..de37748 100644 --- a/src/main/java/org/example/model/Satellite.java +++ b/src/main/java/org/example/Satellite.java @@ -1,4 +1,6 @@ -package org.example.model; +package org.example; + +import java.util.Objects; /** * @author : [chd] @@ -19,6 +21,7 @@ public class Satellite { //状态 private boolean activated=false; + //构造方法 public Satellite(String COSPARID, String name, double r, boolean activated) { this.COSPARID = COSPARID; this.name = name; @@ -26,6 +29,7 @@ public class Satellite { this.activated = activated; } + //重写tostring方法 @Override public String toString() { return "Satellite{" + @@ -36,6 +40,22 @@ public class Satellite { '}'; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Satellite satellite = (Satellite) o; + return Double.compare(r, satellite.r) == 0 && + activated == satellite.activated && + Objects.equals(COSPARID, satellite.COSPARID) && + Objects.equals(name, satellite.name); + } + + @Override + public int hashCode() { + return Objects.hash(COSPARID, name, r, activated); + } + public String getCOSPARID() { return COSPARID; } diff --git a/src/main/java/org/example/Satellites.java b/src/main/java/org/example/Satellites.java new file mode 100644 index 0000000..1256361 --- /dev/null +++ b/src/main/java/org/example/Satellites.java @@ -0,0 +1,68 @@ +package org.example; + +import java.util.ArrayList; + +public class Satellites { + + private ArrayList satellites=new ArrayList(10); + + public Satellites() { + init(); + } + + //初始化 + public void init(){ + satellites.add(new Satellite("1999-025A", "卫星一号", 7000, true)); + satellites.add(new Satellite("2000-036A", "卫星二号", 8000, false)); + satellites.add(new Satellite("2001-047A", "卫星三号", 9000, true)); + satellites.add(new Satellite("2002-058A", "卫星四号", 10000, false)); + satellites.add(new Satellite("2003-069A", "卫星五号", 11000, true)); + + } + + public void setSatellites(ArrayList satellites) { + this.satellites = satellites; + } + + + + + //获取卫星集合 + public ArrayList getSatellites() { + return satellites; + } + /*//新增一个卫星 + public void addSatellite(Satellite satellite) { + satellites.add(satellite); + } + //修改卫星对象 + public void modifySatellite(String cosparid,Satellite satellite) { + this.removeSatelliteByCosparid(cosparid); + addSatellite(satellite); + } + //删除一个卫星 + public void removeSatelliteByCosparid(String cosparid){ + int index=-1; + for (Satellite satellite : satellites) { + if(cosparid.equals(satellite.getCOSPARID())){ + index=satellites.indexOf(satellite); + } + } + if(index!=-1){ + System.out.println("未找到对应卫星,请重新操作!"); + }else{ + satellites.remove(index); + } + + + } + //根据名字模糊查询一个卫星 + public Satellite findSatelliteByName(String name) { + for (Satellite satellite : satellites) { + if (satellite.getName().contains(name)) { + return satellite; + } + } + return null; + }*/ +} diff --git a/target/classes/org/example/Main.class b/target/classes/org/example/Main.class index 73f7d5e0d5168b3aec5d2b62eed4713413570574..e7493a462fd42ce81c10c5f79bdf6393328ef6d0 100644 GIT binary patch literal 2815 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 NaB_7N$1wr-zX4Rcn;rlF literal 0 HcmV?d00001 diff --git a/target/classes/org/example/Satellite.class b/target/classes/org/example/Satellite.class new file mode 100644 index 0000000000000000000000000000000000000000..7bf98da16869bc39e30b5090df13ca31597a918a GIT binary patch literal 2583 zcmaJ?+fp1=6kUh8^e{9K2p5rX(GZzw2opop7$7EL#Gu0^3=$yT4nqezG}AcKLz%Mt z0RKRJ@UF3{uH&Mz zj27jtsT7?$y3kEWB|h19;_lJ$B6l((D`HhqKUb^o&j%~`KKv$}Ul|avv!+2fC8@S2TY|HYtvV2qr z&#XW?j66tf$THB7{T2F}b~Z^*YtAZ~^OfBVv$QNd>e_QoLE0;_WT}0ijJn$vsp-zu zExZY4%yoSC0v$CO3xX`V zRZO+So66x`P2>QNqCn%Bc@{e*+WS(Jx+SmY*eOw}xrs8RG;gxXcTd}kVb=w8T7;BQ z=8%@jyi+L^%o$6SVoS9@$5hp^T$x(8?3U!-oat^mo8{Ix){zBwQ%HK_6Dt(25<&W{20vIOjW{5DOO4$7>{TW75WGZjXXW5<% z9gbBG&*I$xp1Og`aNMh;)5=jlL@-2*c~Lxc`BqgP;z5-NyjK@U+gTvlxqQ%$RdF}cn%QN zBMQg^ECs&8snO2nb-6B(JS)bpoYU0w)-<)BnpFZ>dkzrQqWq2EeedckEM{=x2(0q? P2%m75q$E**iJt!eY1jC? literal 0 HcmV?d00001 diff --git a/target/classes/org/example/Satellites.class b/target/classes/org/example/Satellites.class new file mode 100644 index 0000000000000000000000000000000000000000..fd30426cd7a09709f7770d019395b77d106802e5 GIT binary patch literal 2839 zcmaJ@TW}Lq82(P0G-H3MMa9oWkt#` z*fRwWRgogpAv;l33UG0OW-i7GH$zoXMjKW#lr^@tw)%rjTRUx7#URW~el`2WjYoIR z%v_o--F5#kl@8cZg|%GqItH&tTUaeTs-)%QNNDlM?m_PWuXBTdjo3tnh{MCAqj0Wf zTF5(S!!x9#DHsg;gUv0ZV{=}|y^E@j?{}#>Y^c+ajsD=4ZG`mak#{br$RDrh$VLs> zJD)?D$psQ3*E#|ZWvP;R(T>t8x+z!+#_Hw_A%Hf1!+-9r70pF zZ$bOR`go`uVLWHW^8zB+&*01_WDde$9ThV@(gdZILORH2^a|)hKjkH<4!h>K3!+WA zszOx2LA=0FJ|ZdIz0tnT1L55a^Wl2Ab{xWCD~<>lZjAwX8jtY1Q zFOxDkIV?@|9$O+O;WE4m(TX7fF_6uLq}hxjC8(m*IMt=^3^^6(qjV~?q9i6lHW0CI z_WGBz7aq=>pPIRKcZS-lrv34Qi+|jj{`1`A?B`RnmnR>6cm45$vv!O^w&J*e6TIQt zMxM_}lE?T8@gy%JAs~qqRi;IQR}t2`w9v_u0@B<`D>>OCCM0f`B48Y+sLQcbQW51O z?f06(?b1CerlVw+aMr&2vQLq|`H> z7?RQl#i2NjI3uZ;7$2Y{^Jjg~tc=Q}XJv814DnS^B}SqNx?(Ow^N&7428+M>Ke1)T zxktpsH4w2Qks6kdWepV!^@aZF$y{Q(cR+Q1ZVNjXpJ)sgHJ=PDO!Y<;F?M3VIHo&P zd5m5fOLt{?R~hPx2=FeUfbTzbQblIIl`D0U1x|9s?)lBij?Fc!vFMzoJ?3QgXlgti zllICy1`eZ^Oanhfuz`**6CHz$uJo0n-`D8LgbCQ_o<4|l&C*B&X1W91zG*PueOQky zw@;(&TL``!oL{SRUZ<;*a6lPdt;EKUmvX#8BZ4*?r|~8|(eYw1-&R)w6yG-x?xX66 zbA_|og&OlT*5t7MkTLwUv(^Pq$--fuv)+Y|^SW1&9>9SW zKx)~ z)g`KbwNx)qOABqLx;^m0i!G?bHq@gXe(WRT`_Qb4_fg!|!mSGB@#{Cr=-10Ip%>?H zp4cwXdj~B4z|O1)d;fyT!ISy_=V*DG5?H(F&q{v5{0*vwT}{8Kld z{LXmaHQjF2m=@HK(pqdM}ny!9K*KZ4ziwU+e?yLrwcXc5Y2fwMaQW=kas-o#*0z{(bv5fDJqX287w-u4opT{z=f%j~%)9RId$gNqN~=k9YXkSC zkl!d=>vw|Vo%%<*oZLUD?PGS6AG}fcb?{~##l-1%wzu!<@LI$7k4}y&qg5S{ykq$4 z&9P2V|6xEs8HdVX9Xc**w(B<8@Rf0}YIk}!|EXJ=>Y7?xUzJ8qc0pCGul8o6s(xll zpLm`QYOWoIIyAs(yFQYPv^yHuQdoY!Dn~d;2tMH)jd60aTseo_jmeb7PYzf7DtoTyt;{!~mlJQp#zg{jjdMNY>-d}|lA#9- zCBXSOG5tiy=M`8d=*`%}LZa32AZStt3A~mHGBXTvI~Amu4l*+gB00Zz0f^*WKuWN< z%B9ML?Pg@|cM1m6c|R582JhOA#>75=;N>eAuw-