《最新包和异常73PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新包和异常73PPT课件.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 前一页 休息2本章主要内容本章主要内容l接口接口l实现接口的类定义实现接口的类定义l接口的多态性接口的多态性l包及创建包包及创建包l类的包外引用类的包外引用l异常异常,不受检异常和受检异常不受检异常和受检异常l自定义异常类自定义异常类 前一页 休息 前一页 休息 前一页 休息 前一页 休息 前一页 休息 前一页 休息 前一页 休息9 接口的多态性演示接口的多态性演示 演示实现接口的各相关类的多态性:演示实现接口的各相关类的多态性:Shape提供求图形面积提供求图形面积area协议的接口,协议的接口,类类Circle,Triangle和和ectangle依据各依据各自情况,实现了接口自情况,实
2、现了接口Shape的的area方法,方法,因此,不同对象的求图形面积形式各异,因此,不同对象的求图形面积形式各异,形成多态性。形成多态性。 例例7-3 前一页 休息10 包(package)l包是对类和接口进行组织和管理的目录包是对类和接口进行组织和管理的目录结构。结构。 l Java 包可以视为存储相关类和接口的包可以视为存储相关类和接口的容器。容器。l包的另外一个好处是它提供了包的另外一个好处是它提供了“唯一类唯一类名名”的约定的约定 前一页 休息11 创建包l包的层次结构名是类访问名的一部分,包的层次结构名是类访问名的一部分,必须在程序中通过必须在程序中通过package语句指定。语句指
3、定。l包的定义格式如下:包的定义格式如下: package 包名包名1.包名包名; 其中,其中,package是关键字,包名是关键字,包名1.包名包名为层次结构包名,用圆点为层次结构包名,用圆点.分隔每个包。分隔每个包。 l创建可复用的类的步骤:创建可复用的类的步骤: 1)定义一个)定义一个public类,如果不是类,如果不是public类,类,它只能被同一包中的其它类引用;它只能被同一包中的其它类引用; 2)选择层次结构包名,并用)选择层次结构包名,并用package语句将语句将其加到可复用类的源代码文件中的第一行,指明其加到可复用类的源代码文件中的第一行,指明该类所在的包;注意:此时,第一
4、行不能是空行该类所在的包;注意:此时,第一行不能是空行或注释。或注释。 3)编译这个类,并放到指定的)编译这个类,并放到指定的classpath下,下,作为顶层包的父目录中。例如,指定作为顶层包的父目录中。例如,指定classpath为为c: j2sdk1.4.1_02 jreclasses。classes目录在目录在缺省时不存在,必须在第一个要放到该路径中的缺省时不存在,必须在第一个要放到该路径中的类之前创建它。创建类之前创建它。创建classes目录的目录的DOS命令:命令:l C : md c: j2sdk1.4.1_02jreclasses 前一页 休息13类的包外引用l 1. imp
5、ort 语句语句 import 语句的语法语句的语法: import 包名包名1.包名包名.类名类名/ * ; 其中,其中,importimport是关键字,包名是关键字,包名1.1.包名包名为层为层次结构包名,用圆点次结构包名,用圆点. .分隔每个包。分隔每个包。* * 表示引入指表示引入指定包中的所有的类。定包中的所有的类。l 2直接使用类的访问名直接使用类的访问名l直接使用类的访问名指出要引入,重用直接使用类的访问名指出要引入,重用的类,类访问名包括层次结构包名和类名的类,类访问名包括层次结构包名和类名两部分:两部分: 包名包名1.包名包名.类名类名 包l例如,在定义例如,在定义Time
6、类继承类继承com.juj.Time1类时,用两种方法引入类时,用两种方法引入Time1类类: import com.juj.Time1; class Time extends Time1; 或 class Time extends com.juj.Time1;l例例7.5 供重用的供重用的Point类,源程序在类,源程序在d:jujava中,编译存放中,编译存放在在com.juj包中。包中。lpackage com.juj;lpublic class Pointlprivateint x,y; /私有成员变量私有成员变量l/重载的构造方法重载的构造方法lpublic Point()lpubl
7、ic Point(int x,int y) this.x=x;this.y=y;l/其它成员方法其它成员方法lpublic void setx(int a)x=a;lpublic int getx( )return x;lpublic void sety(int a) y=a;lpublic int gety( )return y;ll将将Point 类编译类编译,并存于并存于classpath为为c: j2sdk1.4.1_02jreclasses的的com.juj包中,使用编译命令:包中,使用编译命令:lD:jujava javac d c:j2sdk1.4.1_02jreclasses
8、Point.javal/MDPoint2.java主类,存放在无名包主类,存放在无名包(即当前目录(即当前目录d:jujava)中。)中。l import com.juj.Point;lpublic class MDPoint2lpublic static void main(String args)lPoint a=new Point();lPoint p=new Point(3,5);lp.setx(6);lSystem.out.println( p 点间的点间的 x,y 坐标为坐标为: +p.getx()+,+p.gety();lSystem.out.println( a 点间的点间的
9、x,y 坐标为坐标为: +a.getx()+,+a.gety();lll运行结果运行结果:lp 点间的点间的 x,y 坐标为坐标为: 6,5la 点间的点间的 x,y 坐标为坐标为: 0,0 前一页 休息19异常的基本概念 异常(异常(Exception)是指应用程)是指应用程序在运行过程中发生的不正常情况,序在运行过程中发生的不正常情况,或发生错误(或发生错误(Error)。用任何计算机)。用任何计算机程序设计语言编写的程序,在运行过程序设计语言编写的程序,在运行过程中都不可避免地可能出现各种各样程中都不可避免地可能出现各种各样的异常现象。如被零除,数组下标超的异常现象。如被零除,数组下标超
10、界,访问的文件或对象不存在,内存界,访问的文件或对象不存在,内存不够等等。程序运行中的异常可以预不够等等。程序运行中的异常可以预料但不可避免。料但不可避免。 异常处理 前一页 休息20异常的基本概念 Java将程序运行过程中发生异常抽象成将程序运行过程中发生异常抽象成类,每个异常类代表一个相应的异常,类类,每个异常类代表一个相应的异常,类中包含异常信息和异常处理方法。中包含异常信息和异常处理方法。 应用程序在运行过程中如果发生异常应用程序在运行过程中如果发生异常事件,事件,Java虚拟机或正在运行程序捕获异虚拟机或正在运行程序捕获异常,创建并抛出一个异常对象,生成的异常,创建并抛出一个异常对象
11、,生成的异常对象将由常对象将由JVM解析处理,称解析处理,称“抛出异常抛出异常”机制,确保不会死机,从而保证系统的安机制,确保不会死机,从而保证系统的安全性。全性。 Java“抛出异常抛出异常”机制将异常处理与正机制将异常处理与正常程序分离,易于维护,程序更为简洁。常程序分离,易于维护,程序更为简洁。 异常处理 前一页 休息21 Java中异常对象的类型和层中异常对象的类型和层次结构次结构l在在Java中所有的异常都是类中所有的异常都是类Throwable的后继子类。的后继子类。l类类Throwable有两个直接子类:有两个直接子类:Error类和类和Exception类。类。lExcepti
12、on类的子类分两类:类的子类分两类: 受检异常(受检异常(checked Exception) 不受检异常(不受检异常(unchecked RuntimeException and Error)。)。 l 异常处理 前一页 休息22 不受检异常不受检异常l不受检异常有:不受检异常有:ljava.lang.ArithmeticException算术运算异常,如被零除等算术运算异常,如被零除等ljava.lang.ArrayIndexOutOfBoundsException数组下标超界异常数组下标超界异常ljava.lang.StringIndexOutOfBoundsException字符串下标
13、超界异常字符串下标超界异常ljava.lang.ClassCastException类型转换异常类型转换异常ljava.lang.NegativeArraySizeException数组大小为负数异常数组大小为负数异常 前一页 休息23 l例例77 不受检异常的例子。不受检异常的例子。lclass ExceptionDemo0l public static void main(String args)lint a=5,0,4,10;int m=100;double d;lfor(int i=0;ia.length;i+)ld=m/ai;/被零除的异常被零除的异常!lSystem.out.pri
14、ntln(程序运行结束程序运行结束!);lll例例78 用用try-catch结构检测、处理不受检异常。结构检测、处理不受检异常。lclass ExceptionDemo1lpublic static void main(String args)ll int a=5,0,4,10;l int m=100;lfor(int i=0;i0)System.out.println(平方根平方根为为: +x+,+Math.sqrt(x);lll D: IfElseDemo1.java:10: unreported exception java.io.IOException; must be caught
15、 or declared to be thrownx=(byte)System.in.read(); 1 errorl该例程序的该例程序的main方法使用了输入方法使用了输入/输出处理类,输出处理类,要求程序监视输入要求程序监视输入/输出异常,当删去输出异常,当删去throws子句时,编译出错,不能通过。如将程序修改,子句时,编译出错,不能通过。如将程序修改,增加增加throws子句监视异常子句监视异常 ,则编译通过,程,则编译通过,程序可正常运行。序可正常运行。 前一页 休息31 异常处理机制l可以用三种方法处理程序可能发生的异可以用三种方法处理程序可能发生的异常。常。l (1)程序内部处理
16、和)程序内部处理和try-catch结构结构l (2)抛出异常外部处理和)抛出异常外部处理和throws子句子句l (3)程序内部处理和外部处理两者结)程序内部处理和外部处理两者结合和合和throw语句语句 前一页 休息32程序内部处理和程序内部处理和try-catch结结构构l ltry-catch结构的语法:结构的语法:ltry/可能发生不受检异常类型可能发生不受检异常类型lcatch(异常类(异常类1 异常实例异常实例1 )l/捕获并处理异常类捕获并处理异常类1的异常的异常lcatch(异常类(异常类2 异常实例异常实例2 )l/捕获并处理异常类捕获并处理异常类2的异常的异常ll fin
17、ally/异常终结处理异常终结处理 异常处理机制l例例710 一个不受检异常(数组下标超界)程序内部处理的例子,一个不受检异常(数组下标超界)程序内部处理的例子,演示演示try-Catch结构执行流程。结构执行流程。lclass ArrayTestElpublic static void main(String args)lint i;int a=new int5;ltrylfor( i=0;i=0;i-)lSystem.out.print( a+i+ = +ai+ );llSystem.out.println( n程序运行结束!程序运行结束!);lll运行结果运行结果: 异常异常数组下标超界
18、!数组下标超界! a4 = 10 a3 = 8 a2 = 6 a1 = 4 a0 = 2 程序运行结束!程序运行结束! 前一页 休息35抛出异常外部处理和抛出异常外部处理和throws子子句句l 用用throws子句将可能发生的受检异常作为异子句将可能发生的受检异常作为异常对象抛出,由相应的异常处理方法进行处理。常对象抛出,由相应的异常处理方法进行处理。当一个受检异常对象抛出后,该异常对象沿着当一个受检异常对象抛出后,该异常对象沿着调用栈向后传播,直至找到相应的异常处理方调用栈向后传播,直至找到相应的异常处理方法处理为止。法处理为止。lthrows子句出现在方法的声明中,列出可子句出现在方法的
19、声明中,列出可以由方法抛出的异常对象,例如,以由方法抛出的异常对象,例如,lpublic int g(float h)throws a,b,cl 方法体方法体; 异常处理机制 l例例 711 一个受检异常外部处理的例子。一个受检异常外部处理的例子。limport java.io.*;lpublic class IfElseDemo1lpublic static void main(String args) throws IOException byte x; System.out.println(请输入一个数请输入一个数(-99):); x=(byte)System.in.read();x-=
20、48;lif(x0)l System.out.println(平方根为平方根为: +x+,+Math.sqrt(x);ll 前一页 休息37程序内部处理和外部处理两程序内部处理和外部处理两者结合和者结合和throw语句语句l异常的程序内部处理和外部处理异常的程序内部处理和外部处理两者结合,适用于自定义异常处两者结合,适用于自定义异常处理。我们把自定义异常视为受检理。我们把自定义异常视为受检异常,如果在方法中可能产生自异常,如果在方法中可能产生自定义异常,则自定义异常也必须定义异常,则自定义异常也必须列在方法声明的列在方法声明的throws子句中,子句中,除非方法中使用除非方法中使用try-Ca
21、tch程序结程序结构捕获。构捕获。 异常处理l如果程序员觉得某个受检异常不可能发生,如果程序员觉得某个受检异常不可能发生,可以捕捉而不处理,避免强制性处理带来可以捕捉而不处理,避免强制性处理带来的麻烦。的麻烦。lthrow语句是生成异常对象,并强行抛语句是生成异常对象,并强行抛出异常对象。抛出异常对象必须是出异常对象。抛出异常对象必须是Throwable类或其子类的实例。类或其子类的实例。throw语语句的语法:句的语法:lthrow 异常类对象异常类对象lthrow语句经常与语句经常与if语句配合使用,即当语句配合使用,即当异常发生时,才抛出异常对象。异常发生时,才抛出异常对象。 前一页 休
22、息39自定义异常类 Java允许程序设计员创建具有用户特允许程序设计员创建具有用户特征的异常类。征的异常类。 例例7-13 异常处理41C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOf
23、RjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(
24、x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbM
25、ePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t
26、&w)z1C4FbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLd
27、PgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%
28、v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8K
29、bNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmu*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(
30、x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaM
31、ePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6I9PhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w
32、-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLd
33、OgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr$u(x+B2E5LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)
34、z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9gSj
35、VmYq!t*w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0
36、B3E6I9LdOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiU
37、mXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfQiUlXp#)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7