diff --git a/Lab07.ipynb b/Lab07.ipynb new file mode 100644 index 0000000..203d2e3 --- /dev/null +++ b/Lab07.ipynb @@ -0,0 +1,867 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 实践7 数值数据的计算和典型算法" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. 熟练书写算术类型数据的常量表示、变量定义、能运用算术运算符 \n", + "2. 熟悉math模块和random模块的函数。 \n", + "3. 掌握数值数据的典型问题的算法设计 \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.基本数值数据类型和运算" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(1)混合运算 \n", + "查看下面表达式的运算结果,思考在表达式的计算过程中哪些发生了数据类型自动转化,哪些发生了数据类型强制转化。 \n", + "总结不同数据类型混合运算的转换规律。 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#不同的数据类型进行运算时,会进行类型的转换,整型数据和浮点数据相遇,整型数据转化为浮点类型。\n", + "23+24.5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#当自动类型转化不成功或出现系统错误\n", + "23+'3'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#但可以通过类型转化函数完成数据类型转换,然后同类型计算。\n", + "23+int('3')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "'hello'+str(123)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#int函数还可以完成对浮点数取整的功能\n", + "int(23/3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#内置round函数的功能更为灵活,可以按指定位取整,四舍五入。第二个参数指定取整位置,n表示小数点后n位,缺省表示没有小数点。\n", + "round(23/3,2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "round(23/3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(2)使用赋值语句创建变量 \n", + "观察下面变量的创建,识别a,b,c,d,f,g,h变量的类型。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a=23.5\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "b=a>0\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(b)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "c=None\n", + "c\n", + "type(c)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d='23'+'3'\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "len(d)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f=2.4-9.18j\n", + "type(f)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "g=8.1+5.2j\n", + "h=f+g" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.熟悉math模块和random模块的函数\n", + "### (1)数学模块库函数的使用" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#导入数学库,使用math前缀访问sqrt,log10函数。\n", + "import math\n", + "math.sqrt(2*3+3*3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "math.log10(100)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#另一种导入数学库的方式,可以直接使用math库函数和常量。\n", + "from math import pow\n", + "\n", + "#幂函数\n", + "pow(2.5,2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#导入math模块中所有的函数和常量,不建议使用\n", + "from math import *" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#π\n", + "pi" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#自然常数\n", + "e" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#向下取整\n", + "floor(2.5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#向上取整\n", + "ceil(2.5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#求绝对值\n", + "fabs(-23.56)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (2)随机函数模块的使用\n", + "![image.png](attachment:image.png)\n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "反复执行下面的语句,观察执行结果" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "random.random() #产生一个0~1之间的随机小数" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "random.randint(50,100) #产生一个50~100之间的随机整数" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "random.randrange(1,101,2) #产生一个100以内的随机奇数" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "L=[\"aa\",\"bb\",\"cc\",\"dd\",\"ee\"] \n", + "random.choice(L) #随机抽取L中的一个元素" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "random.sample(\"abcdefghijklmn\",5) #从字符串中随机抽取5个字符" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "random.shuffle(L) #打乱L列表的顺序\n", + "L" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 试一试\n", + "从random库中选取相应的一个函数,实现满足下列条件的语句\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#随机生成100内的10个整数\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#随机生成0到100内的1个奇数\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#从字符串'abcdefghijklmnopqrstuvwxyz'中随机抽取5个字符\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#随机选取列表['周畅','吴用恭','郑皓侃','王边丞']中的一个姓名\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.数值数据的典型问题的算法设计 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (1)累和算法 \n", + "有很多数学多项式是由n个子项累加构成,相邻子项有规律的变化。这一类问题的解决应用累和算法。累和算法的通项公式为: \n", + " ` s=s+item `\n", + " \n" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "【例】编写程序,用下列公式计算π的近似值。 \n", + "![image.png](attachment:image.png)\n", + "观察这个多项式的每一项由三部分构成:符号、分子1和分母。分子不变,符号有规律的正负变化,分母从1开始每次增2,item的变化规律可以用通项公式表示如下,其中flag表示正负号,t表示分母,通项公式为: \n", + "s=s+item \n", + "item=flag/t \n", + "flag=-flag \n", + "t=t+2 \n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "循环控制一:累和n项后,输出π的近似值。" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n=1000\n", + "3.140592653839794\n" + ] + } + ], + "source": [ + "import math\n", + "n=int(input(\"n=\"))\n", + "total=0 \n", + "t=1 \n", + "flag=1\n", + "item=1\n", + "for i in range(n): \n", + " total=total+item\n", + " flag=-flag\n", + " t=t+2\n", + " item=flag/t\n", + "print(total*4)" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "循环控制二:公式中每一项的绝对值小于0.000001。" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n= 500000 \n", + " 3.141590653589692\n" + ] + } + ], + "source": [ + "import math\n", + "total=0 \n", + "t=1 \n", + "flag=1\n", + "item=1\n", + "n=0\n", + "while math.fabs(item)>=1e-6: \n", + " total=total+item\n", + " flag=-flag\n", + " t=t+2\n", + " item=flag/t\n", + " n=n+1\n", + "print(\"n=\",n,\"\\n\",total*4)\n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "循环控制三:π的误差小于0.000001。" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n= 2000000 \n", + " 3.141592153589724\n" + ] + } + ], + "source": [ + "import math\n", + "total=0 \n", + "t=1 \n", + "flag=1\n", + "item=1\n", + "n=0\n", + "while True: \n", + " if math.fabs(total*4-(total+item)*4)<=1e-6:\n", + " break\n", + " total=total+item\n", + " flag=-flag\n", + " t=t+2\n", + " item=flag/t\n", + " n=n+1\n", + "print(\"n=\",n,\"\\n\",total*4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 小试身手\n", + "1.编写程序:输入一个正整数 n, 计算并输出数列1、-1/2、2/3、-3/5、4/8、-5/12...的前n项和。 要求以浮点数形式输出数列前n项的和。 \n", + "测试用例如下: \n", + "输入:2,输出:0.5 \n", + "输入:10,输出:1.0666666666666664 \n", + "输入:1,输出:1.0 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (2) 求平均值 \n", + "平均值是累加和除以项数的计数,是累加算法和计数算法的叠加。 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "【例】输入一组任意浮点数,求所有负数的平均值。输入“quit”结束。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "请输入一个浮点数:34\n", + "请输入一个浮点数:-56\n", + "请输入一个浮点数:95\n", + "请输入一个浮点数:98\n", + "请输入一个浮点数:-26\n", + "请输入一个浮点数:quit\n", + "负数的平均值为:-41.00 \n" + ] + } + ], + "source": [ + "s=0\n", + "n=0\n", + "x=input(\"请输入一个浮点数:\")\n", + "while x!=\"quit\":\n", + " x=float(x)\n", + " if x <0:\n", + " s=s+x\n", + " n=n+1\n", + " x=input(\"请输入一个浮点数:\")\n", + "if n>0:\n", + " print(\"负数的平均值为:{:.2f} \".format(s/n))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 小试身手 \n", + "2.输入一组任意浮点数,请分别统计正数和负数的平均值。输入“quit”结束。\n", + "运行示例: \n", + "请输入一个浮点数:-2.56 \n", + "请输入一个浮点数:-68.93 \n", + "请输入一个浮点数:176.5 \n", + "请输入一个浮点数:0 \n", + "请输入一个浮点数:-3.22 \n", + "请输入一个浮点数:0 \n", + "请输入一个浮点数:35.88 \n", + "请输入一个浮点数:quit \n", + "2个正数的平均值为:106.19 \n", + "3个负数的平均值为:-24.90 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 小试身手 \n", + "3.使用random模块函数,随机生成100个值为【-1000,1000】之间的整数,分别统计其中能被3或7整除的数的个数。 \n", + "运行示例1:\n", + "455\t-471\t147\t-98\t \n", + "能被3或7整除的数有4个,均值为8.25 \n", + "运行示例2:\n", + "511\t720\t-717\t-468\t780\t-198 \t\n", + "能被3或7整除的数有6个,均值为104.66666666666667 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "\n", + "print(f\"\\n能被3或7整除的数有{n}个,均值为{s/n}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (3) 求最大值最小值算法\n", + "求最大值算法的基本思想是假设第一个数是当前最大值,然后逐个与第2个数、第3个数……最后一个数比较验证,如果碰到一个比当前最大值更大的数,修改当前最大值。当所有的数的比较完毕,当前最大值就是所求的最大值。求最小值也是同样的思路。\n", + "这就好比是擂台赛。首先台上有一位守擂的擂主,然后不断有人上来攻擂,如果把擂主打败,就产生新的擂主,最后站在台上的就是胜利者(最大值)。\n", + "【例】输入一组浮点数,求其中的最大值,输入over结束程序。\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "请输入一个浮点数:9.34\n", + "请输入一个浮点数:-0.25\n", + "请输入一个浮点数:190.382\n", + "请输入一个浮点数:88.27\n", + "请输入一个浮点数:-82.99\n", + "请输入一个浮点数:over\n", + "最大值是 190.382\n" + ] + } + ], + "source": [ + "maxnum=input(\"请输入一个浮点数:\")\n", + "if maxnum != \"over\":\n", + " maxnum=float(maxnum)\n", + " \n", + " x=input(\"请输入一个浮点数:\")\n", + " while x!=\"over\":\n", + " x=float(x)\n", + " if x > maxnum:\n", + " maxnum=x\n", + " x=input(\"请输入一个浮点数:\")\n", + "\n", + " print(\"最大值是\",maxnum)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 小试身手 \n", + "4.思考:需要同时输出,最大值的第几个数,如何修改程序?\n", + "运行示例:\n", + "请输入一个浮点数:9.34\n", + "请输入一个浮点数:-0.25\n", + "请输入一个浮点数:190.382\n", + "请输入一个浮点数:88.27\n", + "请输入一个浮点数:-82.99\n", + "请输入一个浮点数:over\n", + "最大值是第3个数190.382" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (4)穷举法\n", + "穷举法就是对该解空间范围内的众多候选解按某种顺序进行逐一枚举和检验,直到找到一个或全部符合条件的解为止。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "【例】百钱百鸡问题\n", + "京城有位卖鸡的张老汉,他有个儿子非常聪明,擅长算术,是远近闻名的小神童。宰相听说后想试探究竟,于是派仆人到店里打听鸡的价钱。张老汉告知:公鸡五文钱一只,母鸡三文钱一只,小鸡一文钱三只“。仆人给他一百文钱,要求公鸡母鸡小鸡都要,数量不多不少一百只。张老汉怎么想也想不明白,只好请教儿子。小神童不慌不忙掐指一算给出了答案。请用穷举法解决百钱百鸡问题。 \n", + "本例中列举方案包括公鸡几只、母鸡几只、小鸡几只,涉及三个变量,需要三个变量的迭代列举,通过三层循环实现。验证条件有两个,一个是100只鸡,另一个是100元钱。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cock:4,hen:18,chick:78\n", + "cock:8,hen:11,chick:81\n", + "cock:12,hen:4,chick:84\n" + ] + } + ], + "source": [ + "\n", + "for cock in range(1,100):\n", + " for hen in range(1,100):\n", + " for chick in range(1,100):\n", + " if cock+hen+chick==100 and\\\n", + " 5*cock+3*hen+chick/3==100:\n", + " print(\"cock:{},hen:{},chick:{}\"\\\n", + " .format(cock,hen,chick))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cock:4,hen:18,chick:78\n", + "cock:8,hen:11,chick:81\n", + "cock:12,hen:4,chick:84\n" + ] + } + ], + "source": [ + "#优化算法\n", + "for cock in range(1, 21): #公鸡5文一只,最多20只\n", + " for hen in range(1, 34): #母鸡3文一只,最多33只\n", + " chick=100-hen-cock #根据列举的公鸡数和母鸡数计算小鸡数\n", + " if 5*cock+3*hen+chick/3==100:\n", + " print(\"cock:%d,hen:%d,chick:%d\"%(cock,hen,chick))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 小试身手 \n", + "用穷举法,打出所有的水仙花数(水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身) \n", + "运行示例 \n", + "153\t370\t371\t407\t \n", + "提示:三位数num由abc构成,列举a从1~9,b、c从0~9。如果a、b、c的三次方之和等于num,则符合要求输出。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Lab08.ipynb b/Lab08.ipynb new file mode 100644 index 0000000..cbd8247 --- /dev/null +++ b/Lab08.ipynb @@ -0,0 +1,975 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 实践8 文本数据\n", + "\n", + "\n", + "**学习目标**\n", + "1. 熟练书写字符串数据的常量表示 \n", + "2.能掌握简单的字符串操作和函数实现计算 \n", + "3. 能掌握文本数据的典型问题的算法设计 \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.字符串常量的表示 \n", + "**理解字符串常量三种表示方式,和使用场合** \n", + "**理解转义字符(\\n和\\t)和空格的作用**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"To be or not to be, that's a question.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('古云:\"临渊羡鱼,不如退而结网。\"')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('''富贵必从勤苦得,\n", + "男儿须读五车书。\n", + "--杜甫''')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#换行符\\n\n", + "print('富贵必从勤苦得,\\n男儿须读五车书。\\n--杜甫')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#空格和制表符\\t的区别\n", + "from random import randint \n", + "n=int(input(\"n=\"))\n", + "for i in range(1,n+1):\n", + " print(randint(0,10000),end=\" \") #使用空格间隔每一个数\n", + " if i % 10 == 0:\n", + " print()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "n=int(input(\"n=\"))\n", + "for i in range(1,n+1):\n", + " print(randint(0,10000),end=\"\\t\") #使用制表符间隔每一个数\n", + " if i % 10 == 0:\n", + " print()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a 的编码是 97\n" + ] + } + ], + "source": [ + "txt = 'a'\n", + "code = ord(txt)\n", + "print (txt,'的编码是',code)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 的编码是 48\n" + ] + } + ], + "source": [ + "txt = '0'\n", + "code = ord(txt)\n", + "print (txt,'的编码是',code)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "101 对应的字符是 e\n" + ] + } + ], + "source": [ + "code = 101\n", + "txt = chr(code)\n", + "print(code,\"对应的字符是\",txt)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.字符串的切片访问方式\n", + "**运行并理解下面表达式中切片的作用**\n", + "\n", + "`str[start:end:step]` \n", + "1.下标可以使用正序下标,也可以使用逆序下标。第一个是0,最后一个是-1。 \n", + "2.end的下标是不包含在截取串中。 \n", + "3.step值为-1,表示逆序。 \n", + "4.逆序切片时,start表示源串的右面的位置下标,end表示源串的左面位置下标,且不包含。 \n", + "例如:要取s中Python world进行逆序。start的值为-2,end值为5,step为-1。 \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s=\"Hello,Python world!\"\n", + "s[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[5]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[6:-7]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[:-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[::-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[:5:-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[-2::-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s[-2:5:-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.字符串运算" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s1=\"Hello,\"\n", + "s2=\" Python\"\n", + "s=s1+s2\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s1 in s" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s=s1+s2*3\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#\"program\" " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#\"prolan\" " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#\"amamam\"" + ] + }, + { + "attachments": { + "image-2.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAFcCAYAAAAtVLNJAAAgAElEQVR4AexcibEcSa5bX2SMbJEpskSGyA7Zoh+Yv9iBIDKP6uqjulERtWSS4JGoi69Hsf/5nSMMhIEwEAbCQBgIA2EgDHwoA//50H1n22EgDISBMBAGwkAYCANh4HeG4dwEYSAMhIEwEAbCQBgIAx/LQIbhj7302XgYCANhIAyEgTAQBsJAOwz/5z//+Z0zHOQeyD2QeyD3QO6B3AO5B3IPXPUeWBn1Mwxn6M8fPbkHcg/kHsg9kHsg90Dugbe8B24ahleCgwkDYeAaDOAv+hxhIAyEgTAQBsLA3wzkC/k3J7GEgbdjIMPw213SbCgMhIEwEAZOYiDD8ElEJk0YeGUGMgy/8tVJb2EgDISBMPBMBjIMP5P91A4DD2Igw/CDiE6ZMBAGwkAYuBwDGYYvd8nScBjYZyDD8D5niQgDYSAMhIHPYCDD8Gdc5+zywxnIMPzhN0C2HwbCQBgIAy0DGYZbamoHhgofLCpbHf2v9UjMv9HHtLNqnpXn2C4SdYQBXLOrHH5/zdYr+0KOL1++rECDCQNhIAyEgQ9j4DpfyBe5MP5hRluVzdt1zGyt8cSuSo11nTnc7usRbuTzPFm/BgO4Zlc5/P6arbkvx9EOCR+G4RFG8dHDQBgIA2Hgcxi4zhfyBa5J9yGl3aW3TD/sne4xjqVf4ysb/buSubq6I7vGRn8tBnAfXOXgPYt+qY+k7os4tTEPfxnuMB6TdRgIA2EgDHwGA9f5Qj75evADqvLHjx//+1hre8TARn1XdvloZz6utZbaqFd4+lYk4zu5kiOY5zGA6/bqR3VvVc8YcdV+Oh/sHIaruNjCQBgIA2Hgcxl4/S/kDdfm58+f/wyjv379uiHL/4f6R5ZrSD/og111x1XrCn+LjTWqHPS5nGFnfs+X9fMZwDW7ynHG/cUcM3kVTtJnGAgDYSAM3I+B63whD3Dw9evXuw/DVVv8ALuP9k46nusO39kZp5JYtY30EX7kG+WM73kM4Jpd5dD7i3onV/aksSv4YMJAGAgDYeCzGLjOF7K4Lhx29WOHX4G/f//+v19k1Qc7fy2G/du3b7/1P8OO/jMq87ANXasOv6+rGNpGeGKqfKs2z8E4l8StSMauYIN5DQZwza5y6P21omNfxEH6c6w+6DnCQBgIA2EgDCgDl/0ycIiFxMEBGMMuDw7L1T+TwCDMjyRzYV1hkY9Yl6xFu2LpoySmk8S5JF7tqzbGVHj4Ojt95JC4kWStyNdjANftKgfvMX0u0Tvtruu+gNFhGGvmgV1zaFz0MBAGwkAY+FwGrvOFtGvEX3gxrHUHB7lqwOUwDLly+Ed0tHZflX8FwzhiVyXjVDJWbdA7O33O7wjvubN+HQZw3V794L1FiX6pd9L3BNxoGNacHpt1GAgDYSAMfCYDr/+FHFwXDsT8UOLXYT1WhmH9JVljXWcN2n1NO6T7uF6VmqvKt2PrsKzBnrim3LUzLvI1GcD1vMqh996KrvsCnsOwx9IOvPo0PnoYCANhIAx8HgPX+UJOrg3/mQT/2QTgrzYM6xaqj3FlQ0xlX7V18eylytPFONbXzBn5egzgWl3l0PtqRdd9AV/9cwjaidW8tEWGgTAQBsLAZzJwnS+kXR/+Mwf+Ewj+u0D9dZgY/PoLXX8ZUp+lLpf+8fS1BrnP18DeYjsjnv3eow/mjnwdBnCdr3LoPbmi676A1+ecvs5Of2QYCANhIAx8LgPX+ULaNeIvwfxYVh87/2cUGJjdxngO1Vbmf0viXP4PIAoxNPkadrVRp2Sc42Z2j/e1xlOvMG7jeiaZM/L1GMC1u8rB+wz9Uu+k7gkY/lEMPUcYCANhIAyEgRUG8sVYYUk+yoTz48w1JG0rH2JiNd71FYzXZe1ZLP3Ee+2dNXPtxAT7WAbOuM737pj3ESXqqa713d6tae+k5oweBsJAGAgDn8lAhuHPvO7Z9YcxgGEwRxgIA2EgDISBMPA3A/lC/s1JLGHg7RjIMPx2lzQbCgNhIAyEgZMYyDB8EpFJEwZemYEMw698ddJbGAgDYSAMPJOBDMPPZD+1w8CDGMgw/CCiUyYMhIEwEAYux0CG4ctdsjQcBvYZyDC8z1kiwkAYCANh4DMYyDD8Gdc5u/xwBjIMf/gNkO2HgTAQBsJAy0A7DOPjmTMc5B7IPZB7IPdA7oHcA7kHcg9c9R5oJ2BxtMOwYKKGgTBwcQbwEssRBsJAGAgDYSAM/M1AvpB/cxJLGHg7BjIMv90lzYbCQBgIA2HgJAYyDJ9EZNKEgVdmIMPwK1+d9BYGwkAYCAPPZCDD8DPZT+0w8CAGMgw/iOiUCQNhIAyEgcsxkGH4cpcsDYeBfQYyDO9zlogwEAbCQBj4DAYyDH/Gdc4uP5yBo8Mw4nieTeGsp5mf/aziZvjdPMh3JIZ9nCXRA88uZ9VnZeviYT8Lv5vnSO3RPh7lm+1z5r93n8+uf+/9JX8Y2GEgw/AOW8H+/vXr1++vX7/+wwQk1jlen4Huw+d2rPUc7UxxK3qVC3HV0dkrLGw7eO+VOd2+knMVU+Ue2dgT5Q6WMSqrPiubxlT6Toz3zHxuX8m5gmH+V5GjnisO1FbtQf2repVHbciTIwyEgd+/8yTc4S748ePH1sd5pYXv37//b0j5+fNnGXKPul6IgzDtvqY98rUYGH301Kf6bAdHsYjbPdnLbpz3yDWl5q102jrpeSrcCkbjKnxl05iR3sXC7ifzuH1lzVhI4FXSR3vlU8xKPc3F2EfJqj+v3fXX2RE/8nl+Xc/i4N89NX/0MPDuDFx2GMZA6A/3q1ws9naPfr59+/a7G4bvWRd7QW3/JRhr2HO8NgOjj6X6VJ/t6Ezsaq5VHHtXvOrwc03JGPWprdKr2ApH2y7+jDjU1BM5qz7Upjp7GEnFq6613K4+zX0LTvPs6HiPoa6e/q4b5WPPGq86Y9W2ojNuJpFr53C8r3dyBRsG3oGBvSfohXb85cuXP7rBw7zz8voj+MEL/IJ79BgNw0dzrsSB2+5X4PxziRUGn4tZ/dgB152+A805i1HsKI/7fD3K41isO3xn72KA3z27fkZ5qhj2NIpTn+aAXQ/i1EZdsarTP5IdvrMjV+er7Ku2UY8jn39PsO5+dKjy7PS3iq1wq7UrHGzMSUkc15S0R4aBT2HgzzflRXaNlxT+2YAesO28vDT2kToGYe99p/6zhmH03A3xt+5pZ//BHmNg9SPX4Sq72lRnh2pTXf2wj05iXY5iqlpVvNu4Xok/gkXMTm7WODNuVL/ywTY6tcdKr3IS1/lG9dzHXLdI/KHv/3ULtu59h1rau+rax8ju++jWmq/SGVf5Kht7oiRG16rTHxkG3p2BSw7DuCh4YG8ZfvFrJnLg9Beh+vTFABzrMtZ/LcUvCvC5HS9XxlD6rxFdXb0Ju2G4q4tYz4v66IcHeOx6IgZ1NYZ2SNidQ/VHfz4DuL5+8JqrjzolYlTXHGpXnRi1qV75aVNZxai/0ldiFAN9dFY1aGMeSto7uYqr4o/GepyuVUdNX1d90LaCVQz00cm8ndRcHeYWO96fo+G3ys2eKIHp9CqeNo2hbUUyjhIxqnsO9alexbnfc2UdBt6Ngb+/kBfaIR5YnLsvMQxuOrzhRchBD7+A6i+3/qsnBksdYrFWPOhDLtirw/MRM6tLHPru/gjo6mq/qK+9IUZffMitftaFjRzRRtnVpT/y+QzoNfZu1FfpatNYtatOjNpUVz/so5PYFVnVqOJmuJmfOYmjpL2TwK2cVTxrzOI9tsIrhnlhU10xrp+Fq/LAtnt6f0fXeE+itr/PR/m6PSCm8mku7rPCrsQyl2N9XeVnbCerHB029jDwDgxcehjmBcBLTAc+2ju586D78OpDYTU8joZDz9f12OGODMPIhQN9OU8+hAPnGNhQdzQM6x8X/xTL/7wUA6N7Xn2qYwO+1k2pT3Vi1KZ65adNZRWjftVXscA5drbWOqozjlJ9R/UuF+2UVf7K57bR2n2rNTqc55utkccxzL1rZ9wRiXd8V8/zAedYrik1hnj1UXepcaoTR5uvYa9stMM3Opk3Mgx8EgOXHIYx3PlgVg111YWsBkLH+YtCfym45zA8qssejwzDjEV+5w35vG6FAwccqpmPshvc6Y98PgO4pt2hvkpXm+ZQO/TqJF6xaqti1EYspfpWdY2Fjjg/1Ka647h2jK+J25VdHtopq7yVz22+1jzqg757MhfzUNIOqTbVialsHkfszN7l0njo+EHD/2sb3mmzP/CZn9Lzdnbi4CeGOtfEuKz8lQ1xZ9m9h6zDwDsy8PdX4QK7xItLB1S0DNvs5cWtVS8Jvgwx7FIH3gc9H4bhh00PDJxuo9/z0T6rS9zRYbjKj5w7f0R0/MLuQzb7jXwNBqp7np3RRwm76tW6szGnS8+3El/FeF6uz8Su5HKMr9kX9wn/7CRWY902qzOK9VwzrPtn8Y4f9drlmnFU+b0uc8/qMw7vLn+3jd7hjNP8qld+2iC5B9oY65J+Svq5pty1I85jfM3ckWHgUxi45DCMFxUeXgyWPPAy4xoS/m5Aw2CowzR0DsD4JwLUkRtrHRgRqy9O+FmXvYxepMjNeOisNavL3IhlDG2UXV3lBljdL7lkDkjssTqQxznFmvupYmJ7DQZGHzv3+Ro7WLV1uz0SX8Xs5D+KndXt/J2966OyVznUprrHVz63+VpzjHzErWBWsVWuyoZ8u/ZRDPtTifz+TdC1YqvcVX+VTfPAr5hO15hK17jK39lY/2h8lzf2MHBFBi45DINofZCh64trNgwjHsMnc2gsBk3aIbkmhoM0MbTz4mteYNyvtXXoZB3m5ZrxkPRR6mA6qku8So1lLfrVx31Ras+w+Zq4yNdiANe2OminrDCdjffLqvQ8K3Ee0613+p9hR/6RD73N/F3/tHt8tYatO5mHssLR59JruR/rFQzjZtiZn3l26x7B+/tz9Af+at8VDjaeur+q5w43i3O/r6u8lc3jsg4D78xA/YV85x3fuDcMf6Nh8cb0Lx+OvXMA/nQuXv5iSYP42PnhNn4QR1JzeLz6XK+wlU3jZn5ggeGpsSO9y8s8lZ++UV76drC7MVVvmoM6peN9DdxKv8RU8azlssOemctrcj+V/VG23f0Rf7S/jmfNxxoz7CpOc0cPA+/AwN9fyHfY1Z32gF8L+LL45IH4TvQm7R0ZmH0E71g6qcNAGAgDYSAMvDQDGYZf+vKkuTBwDgMZhs/hMVnCQBgIA2Hg/RjIMPx+1zQ7CgN/MZBh+C9KYggDYSAMhIEw8A8DGYZzI4SBD2Agw/AHXORsMQyEgTAQBg4xkGH4EG0JCgPXYiDD8LWuV7oNA2EgDISBxzGQYfhxXKdSGHgaAxmGn0Z9CoeBMBAGwsCLM5Bh+MUvUNoLA2cwkGH4DBaTIwyEgTAQBt6RgXYYxsczZzjIPZB7IPdA7oHcA7kHcg/kHrjqPbAyvLfD8EpwMGEgDFyDAbzEcoSBMBAGwkAYCAN/M5Av5N+cxBIG3o6BDMNvd0mzoTAQBsJAGDiJgQzDJxGZNGHglRnIMPzKVye9hYEwEAbCwDMZyDD8TPZTOww8iIEMww8iOmXCQBgIA2HgcgxkGL7cJUvDYWCfgQzD+5wlIgyEgTAQBj6DgQzDn3Gds8sPZ+DoMIw4nveisMvf2b0P4I4eu7EdvrPP+np03KyfHT9659nFVfurbF087Gfhd/McqT3ax6N8s33O/Pfu89n1772/5L8mA8e/Itfc76W6/vbt2++fP3/+c0LPEQaOMtB9gNyOtZ6jeopb0TWX4lfsinEduW45duK1b41zu/pGva3iPMdKXNXTzFbV6WIcW62rPitbFau2nRjvl3ncvpJzBcP8ryJHPVccqK3ag/pX9SqP2pAnRxh4JQY+8o78/v37/z74GDZf8fjx48dvnDx8TXtkGFhhYPTxUZ/qs7y3YLvYzs5e4N89z4hFDvZGqXkrXW3es/qo70jvoYpdwWhcha9sGjPSu1jY/WQet6+sGQsJvEr6aK98ilmpp7kY+yhZ9ee1u/46O+JHPs+v61kc/Lun5o8eBh7FwGWHYQyx/pDtksZfXnfj7o3/9evX7+qXYNjgyxEGdhkYfbTUp/qsxi3YLrazd73s4HewqKd41dXndvWt9Iz46uxiaa/q0lfJXTxz3BLn+0LOKp/aVGcPI6l41bWW29WnuW/BaZ4dHe9z1NVz5x3PnjVedfaithWdcTOJXDuH4329kyvYMHAmA3t38pmVb8z15cuXPzLgodp5iSD4VYfhri/8AVANyX8QkUUYKBhY/egA152eVnPOYhSLPBWedq/TrascavM478H9vu7wnR3xIx/zE0NJ+yxe8Z2uuVQHfnQqVvVRjPs8ztfAV4faVa+wbuvwnR3xna+yr9q8r9W1f8ew3vmvlTv9rWIrXLWfVZxy7jFcU1Z1YgsDj2Cgfjs9ovINNfCywD910AO2nZcIYruhU/M+Q/cXpPYw8ikuehhQBlY/Nh2usqtNddZVm+rwd2vYq5M5KYnh2qXnVz9jO6nYSp/lrmLUxrqweS5fexzXjvM1cZQzP3Euz4ob5al8sI1O79PXVU5iOt+onvuY6xaJH2/8xw3Y9J/HeX7tXXXFjey+j26t+SqdcZWvsrEnSmJ0rTr9kWHgUQxcchgGOXhwdodfJ7UbhvEyQn6cOnzSRv/Xr1//Gcph53COnojTWP13yugDtYGrXoZu077h2/0FXOOjfyYDuNf84H2qPuqUiFFdc6hddWLUpnqVk37KCuN5FUsf5chHjMuVGMVAH52a33H0aT7YfL2DW41lzhXZ5ZzFepyuVUceX49yr2AVA310jmrt9jbLVfnxjRgNv1UM90fpfaq9iqdtFUc8JeMoYVedOEr1qV7FuZ85IsPAvRn4+wt574on5seDg3P3ZcIWMFj6QM1hlhjkxtCLAz4OqhrLQRhDqj7MwDOW+fDyQyzywq8Ds9dgjEqtq/boYWDEgN6XjlNfpatNY9WuOjFqUx3+bq121bucwHQnY1ZkVauKm+E6/6q9wq3a0G+HhX12jva7G1vhNT/8PFSnrZJn4ao8sO2eVY9HbPgGoDa/Iys5uj0gtvJpTu6zwq7EMpdjfV3lZ2wnqxwdNvYwcCYD/76Rzsz64Fx4mfhQudJCNVhyUNV45OavsawDHF5eGGhx4sDaX2jEMx/Wo+EddZC7O+BjLx0m9jDgDIw+MupTHTl8rXnVpzoxalOdeWHTk/YqnjaVnnPVpzjoozyKZa9uG63pG9Wgj5IxkJXtiF1zVvqsTufvenH8aO2+nf4ci1yeb7bu9nDE7v3srPHDiffaxY/2WeUgXn3UXY5qqo9xMxv8wM5OzRM9DDyagUsOwxgmfSCsBtEZmRgsOcgSi2HVbXhJcYCFjtp4sIHVwRV69cBrrz4cs67KEWbk0xzRw4AygPuyO9RX6WrTHGqHXp3EKxY2X1e4DlNhaaOsYmHbPT1fl9dxXFNWce4bYYil3MEyZiS7fLRTVjkqn9t8rXnUB333ZC7moaQdUm2qE1PZPI7Ymb3LpfHQ9YcU+vCd0W8K7SqZn1J90Ds7cfATQ51rYlxW/so2qr+L9x6yDgP3ZKD/Qt6z6o258RLxX2Bhm71EvCzw1eA7suFlhYEYsRhMofNYGchXhlnk1gGa+WHb3SNjIz+bge5DBFboo1QbWVPfyEafS4/3NfFqV51+lfCPTsWO9FkdjZ1hO7/aVWfuykZfJVfwwKycyF/lU5vq3k/lc5uvNcfIR9wKZhVb5YJt92Q9lcyhtk6v3uew6TelitX+VSe2ssHnvRHnknko6eeacteOOI/xNXNHhoFHM3DJYRgvDDxE/LUWpGFI5BoSfuBGB2J88MVaB1YOv8zD2sAhXody+oiF9Beb5lac6shTDb2wzfakeaKHATIw+ui4z9fIsWpjPZce72vi1a46/SpH/pFPc0A/E9vlop1Se6CNUn2dvoPtcqi9yqc21TUOeuVzm681x8hH3ApmFVvlqmzd3kb2mY89UqKufkNmP6h4n75eqY8Yjet09thJjeswlZ31j8ZXOWMLA7cycMlhGJvWBwq6vlBmwzCwHq9DJuOBqYZXDqrAVcO05mZer1nl1YuJ3Dh5+Jr2yDCwwgDuyeqgnbLCdDa9z1d0zVPVc5uvNR76yD/y7eTZxXZ1Ya98bvO11+d6FUf8THq+ag1bd3r+CucYrr0W7SpXMMTPsDM/80DuYI/g8R1ADZ78tmgP1Fd7qXDM3/lYg3uocIohzm2jNXtQTGVTf/Qw8CgG6i/ko6qnzpABvBgxbPNX6CE4zjAwYKD6uLmNH6aR1BIerz7XFas6cas24iG7GNgrn8YyfhXL2C4v84z8zKG11Ua9y6FxIwzzrEj2PcOO6lU+t/la9zKqjTieI5z6qlpar/NrDur3wjL/mZI8rfZM/NEeVuqwxgy7ijvaa+LCwIyBDMMzhuIPA2/AwOxj9AZbzBbCQBgIA2EgDBxiIMPwIdoSFAauxUCG4Wtdr3QbBsJAGAgDj2Mgw/DjuE6lMPA0BjIMP436FA4DYSAMhIEXZyDD8ItfoLQXBs5gIMPwGSwmRxgIA2EgDLwjAxmG3/GqZk9hwBjIMGyEZBkGwkAYCANh4L8MZBjOrRAGPoCBDMMfcJGzxTAQBsJAGDjEQIbhQ7QlKAxci4EMw9e6Xuk2DISBMBAGHsdAOwzj45kzHOQeyD2QeyD3QO6B3AO5B3IPXPUeWBmp22F4JTiYMBAGrsEAXmI5wkAYCANhIAyEgb8ZyBfyb05iCQNvx0CG4be7pNlQGAgDYSAMnMRAhuGTiEyaMPDKDGQYfuWrk97CQBgIA2HgmQxkGH4m+6kdBh7EQIbhBxGdMmEgDISBMHA5BjIMX+6SpeEwsM9AhuF9zhIRBsJAGAgDn8FAhuHPuM7Z5YczcHQYRhzPe1HY5e/s3gdwR4/d2A7f2Wd9PTpu1s+OH73z7OKq/VW2Lh72s/C7eY7UHu3jUb7ZPmf+e/f57Pr33l/yX5OB41+Ra+73Ul1/+/bt98+fP/85oecIA0cZ6D5Absdaz1E9xa3omkvxK3bFuI5ctxw78dq3xrldfaPeVnGeYyWu6mlmq+p0MY6t1lWfla2KVdtOjPfLPG5fybmCYf5XkaOeKw7UVu1B/at6lUdtyJMjDLwSA7kjX+lqSC8/fvz4jZOHr2mPDAMrDIw+PupTfZb3FmwX29nZC/y75xmxyMHeKDVvpavNe1Yf9R3pPVSxKxiNq/CVTWNGehcLu5/M4/aVNWMhgVdJH+2VTzEr9TQXYx8lq/68dtdfZ0f8yOf5dT2Lg3/31PzRw8CjGLjsMIxfTP0hexRp967z69ev39UvwbDBlyMM7DIw+mipT/VZjVuwXWxn73rZwe9gUU/xqqvP7epb6Rnx1dnF0l7Vpa+Su3jmuCXO94WcVT61qc4eRlLxqmstt6tPc9+C0zw7Ot7nqKvnzjuePWu86uxFbSs642YSuXYOx/t6J1ewYeBMBvbu5DMr35jry5cvf2TAQ7XzEvkj+MUW/OcR3hb+AKiGZMdlHQacgdWPDnDdOco5i/H6FR75Hec1dV3lUJtid3OP8KMeRz72Qwwl7VVNYHZPzUd9loM4l7M49Wss7HoQpzbqilWd/pHs8J0duTpfZV+1jXoc+fw7hjXe86vHTn+r2ApX9bOKQyyxlMzHNSXtkWHg0Qz8+cZ6dPWD9fCy+P79+x/RsO28RP4IfrGFvyC1vZFPcdHDgDKw+rHpcJVdbaqzrtpUh79bw16dzElJDNcuPb/6GdtJxVb6LHcVozbWhc1z+VrjVF/FMWYXf3bcqH7lg210sr9OVjmJ7Xyjeu5jrlskfrzxHzdg038e5/m1d9UVN7L7Prq15qt0xlW+ysaeKInRter0R4aBRzFwyWEY5ODBOTL84uWDWP6KrGvY4IONdq1DG+rCjvPr169/XCv16eCK4Z0xCGAuSD2qF6T6gWfvao8eBkYM4N7zg/ej+qhTIkZ1zaF21YlRm+pVTvopK4znVSx9lCMfMS5XYhQDfXRqfsfRp/lg8zVxKomhVF+lr+LOjPWaulYdNX1d9UHbClYx0Ecn83ZSc3WYW+z4RoyG3yo3e6IEptOreNo0hrYVyThKxKjuOdSnehXnfs+VdRi4FwN/fyHvVekOefHg4Nx9mWCA1YFS1xxmmZNrtg+sDrlY81dqDtPEIhZ+PRCLgRb54ddcwMHmA7LGwwdMjjCww8DoI6O+Sleb1lS76sSoTXX4u7XaVe9yAtOdjFmRVa0qbobr/Kv2Dqe9EEOpvkoHbuXsYmGfxXtshVcM/DxUp62SZ+GqPLDtnlWPR2z4BqA2vyMrObo9ILbyaU7us8KuxDKXY31d5WdsJ6scHTb2MHAmA/++kc7M+uBceJn4UDlqQYdf4HRdDaPwcwBVLGJhhw0HXmb+QvO+sOag/U+Q/U9+GTZCsjyFgdFHRn2qo7CvtRn1qU6M2lRnXtj0pL2Kp02l51z1KQ76KI9i2avbRmv6RjXoo2RMJ4mj7HA79i4X7ZRVzsrnttHafas1Opznm62RxzHMvWtn3BGJ70hXz/MB51iuKTWGePVRd6lxqhNHm69hr2y0wzc6mTcyDDyDgUsOwxgm9ZddEFcNoh2hPtDq+pZhGL/aVg+79urDcdXjCDPyVbliCwNgoPtIuU9x1CmdSbVDr07GKNZrEuN2j1GcY1d8VX8zG/OyF0ravY/K7xiNVV8Xq3jH+FqxO3qXh3bKKmflc5uvNY/6oO+ezMU8lLRDqk11YiqbxxE7s3e5NB46vjX8kYU+fNtG/2VQa3d1OjtrwE8Mda6JcVn5K5v2t5JjhPf4rMPAPRm45DCMF4j/AlsNsR1xOvwCo+sqDwZQvrQUi1i8vGDDsTKQrwyzeBnqAP1P8t+//7HNXpTERoYBZaD7cAFDH6XamEN9Ixt9LopfqBAAACAASURBVD3e18SrXXX6VcI/OhU70md1NHaG7fxqV525Kxt9Kh3na8fCPzsRU+VRm+paYyW2wzDPKPcOZhVb1YNt92Q9lcyhtk6v/isgbPyedHHav+rEVzb4vDfiXDIPJf1cU+7aEecxvmbuyDDwaAYuOQzjhYGHSP+5AYZEriHhrwZKEIyXDYdbSMX6Grl0gEWsDqTwsS770ovoLzbNpTjVkUdr0AdbtydiIsNAxcDoo+M+XyPfqq2qXcVX+RzXYVhj5B/5GE95JrbLRTsla0PSRqk+1Tt/Z9fYmV7lUJvqnqvyuc3XmmPkI24Fs4qtclU25Nu1j2LYn0rk1x92Zj+oeD++XqmPGI3rdO2z0jWu8nc21j8a3+WNPQzcwsAlh2FsWB8o6PpCmQ3DHHgRh2EVJx9M+DB0YmhlDSUYWNSiT+sCp7mB4fCqMbDPhmLsgUM28vpae4oeBmYM4J6rDtopK0xnQ8zOqXmqem7ztcZDH/lHvp08u9iuLuyVz22+Zv3OvuonrpOev1rD1p2et8I5hmuvRbvKFQzxM+zMzzyQO9gjeP3OoFb1Iwj7We2lwsHGk/koHd/hiKf0ONo7WeWtbF187GHgngzUX8h7Vnzx3ByGuzYxDHPA7TBn2fFiRD+zns6qlzzvy0D14XIbP0wjqQx5vPpcV6zqxK3aiIfsYmCvfBrL+FUsY7u8zDPyM4fWVht1zcG89I3kDpZ5VmO0J8ZSVj63+RqxsFV25lXMDOcxuqbOemfkYk6VO3k17ix9d3/EH62/sl/WmGFXcUd7TVwYmDGQYVgYwpDLh7L6Cx02+h81EEt7UcPAYQZmH6PDiRMYBsJAGAgDYeDiDGQYvvgFTPthYIWBDMMrLAUTBsJAGAgDn8hAhuFPvOrZ88cxkGH44y55NhwGwkAYCAOLDGQYXiQqsDBwZQYyDF/56qX3MBAGwkAYuCcDGYbvyW5yh4EXYSDD8ItciLQRBsJAGAgDL8dAhuGXuyRpKAycz0CG4fM5TcYwEAbCQBh4DwYyDL/HdcwuwsCQgQzDQ3riDANhIAyEgQ9moB2G8fHMGQ5yD+QeyD2QeyD3QO6B3AO5B656D6zM+O0wvBIcTBgIA9dgAC+xHGEgDISBMBAGwsDfDOQL+TcnsYSBt2Mgw/DbXdJsKAyEgTAQBk5iIMPwSUQmTRh4ZQYyDL/y1UlvYSAMhIEw8EwGMgw/k/3UDgMPYiDD8IOITpkwEAbCQBi4HAMZhi93ydJwGNhnIMPwPmeJCANhIAyEgc9gIMPwZ1zn7PLDGTg6DCOO57MoXOl9BcP+Z9iZn3lcIo6n+3y9W6PCVzavM1uz31GuylfZRrXOwu/mQU9HYkZ7eYRv1vPMf+8en13/3vtL/s9jIMPwC1/zb9++/f758+c/J/QcYeAoA93Hy+1Y6zmqp7gV3XNpDHy+Jh722bGC0RwdvrMzFv7uJGZVzmppngpb2TSGetfvTjxzUa7GEg+5E+M9M4/bV3KuYJj/VeSo54oDtVV7UP+qXuVRG/LkCAPvwkDu5jtcyR8/fmy9+KsWkAMnD1/THhkGVhgYfbjUp/os761YxneS9ennupKrGOB2Tq+1UqeK2alZ1ehsmtfrcl3F0jeTXazWpc5cXO9IxkIiTiV9tFc+xazWZcyjZdWf96B7VV9nB2bk0xyuz+Lg3z29RtZh4NUZuOwwjF9M/QF9FbLZ29F+fv369bv6JRg2+HKEgV0GRh889ak+q3ErlvGrkv0Av3oy5izJXnfyeczOutonas9yaH+OVd9IX63t/ezWU7zqmtft6tM93ILTPDs63smoq+fOe5o9a7zq7EVtKzrjZhK5dg7H+3onV7Bh4FUY2HsKXqXr379/f/ny5Y9u8EDuvID+CC4W+qts4b6rif88wotgyK6GZMdlHQacgdUPFnDdOco5i6nq07Yqvb6umUNtlQ5cdTq2y1fFdjbm1Fyq0w+pdtWJURt1l8S6BG711Fjmp405uFapWNUV0+kdvrMjT+er7Ku2rr+Z3b9FWONdvXrs9LeKrXBVP6s4xBJLyXxcU9IeGQauxMAlh2G8aL5///4Hz7DtvID+CC4W/oIrIHczjWqPfHdrKIkvz8Dqh6rDVXa1qU6y1Ka6++mbScZVkrGVT20VjjZK4FWfxat/pHc5GTPyd77OzpyQKxjFU/c4XxPX1QB+dGp8pe/WYx+jmuqrau7a8AOM/0AB2+jHFN2X6lp7ZNc9jHTNV+mMrXyVjT1REqNr1emPDANXYOCSwzCIxUN3y/CLoRI5ePJi4cVGGyVfbBjAaQOeWH0ZMu/Xr1+Z8h9JLHpmDscAWL1cNRHynPkLuOaO/r4M4J7zg/eh+qhTIkZ1zaF21YlRm+rMCdvsJJY5O+n5d3CMpRzVVExX42w7avLU3OyFUn2qz/yKVd3jdK06YnyteVxfwSoG+uj0/L7WXO47Y413Pr8Rq/nYEyXiOn2UU2NGOPcxjtLrd/gKpzkqv+fKOgy8IgN/fyFfscumJzyEOHdfRBhqdZCuBszRL7DwIQZ1kcexGFarQRc2xWJd/cKN3N0Bn/be4WIPA8qAf7A6n+KoU2oMdLWrTpzaVHc/fTPJmsDtnKw3iqePWPbCNSXts/rEq5zFMLfGQGccdZXEdrGKZZ5OMhdlhaNP87quGNdHfSp2hqv8Vb8zm9a8Rcd7HbX8fT7K2e0BMZVPc3FfFXYllrkc6+sqP2M7WeXosLGHgVdh4NLDMEnEi0iHTNo7iSF2NHAibpQPvtEAPhqG9VddDLU+NMM/6g0+zdHtMfYwoAyMPlDqUx3xvu5yVji1qc4ctK1KxrlkvNurdYWljRJxqmse2inVR33kIwZyBUcM5SgOGMWxFm2UtKusfG4brd2nuamvYIAFzrGzNeNYS6XH0tfZ6T8i8T5fzQucY7mm1B6IVx91lxqnOnG0+Rr2ykY7fKOTeSPDwNUYuOQwjEHUB0L8Rb7zVzly8KGuBtvZMDy60OjNh1zgYdO+q2EYuFtqj/qK73MZ6D5wYER9la42ZVDt0KuTeMW6jb6ZZJxKxqhtpFd42igRr7rmo51SfdRHPmIgV3EVFrF+am7VWYdSfdQrn9t8zVhI9UHfPZmLeShpr2qoz/3qq3LN8F2M5oWOd7j/lzp8T0Y/aGjtrk5nZ334iaHONTEuK39l0/5WcozwHp91GHhVBi45DOPl44MvbLMXUHcREOcvtFsG0tVhGC/Namjufv1F3qN77PYe+2cw0H30sHv6KNVGdtQ3stHnchRPn0vmoJ1ryl074hBTnfSNcms91RlDOfIRA7mKq7Ae62vWUbvq9FNWPrf5mrGQIx9xK5hVbJULtt2T9VQyh9o6vXond+9/zaH9q05MZYPPeyPOJfNQ0s815a4dcR7ja+aODANXYuCSwzBeNngA9RddDIlcQ8IPXHX4AIrBmrHE66+4PniPBmXEdy9D5NRhFnm8LuMVx55g6/ZETGQYqBgYfbDc52vkW7VVtWfxzO2SuWjnusu34l/NNcNVftYf+YhZ2cMI6zV8zVi1q04/ZeVzm68ZCznyEbeCWcVWuSrbqLcOP4phfyqRR78R0HWt2Cp31Udl0zzwK6bTNabSNa7ydzbWPxrf5Y09DDyLgUsOwyBLH0bo+vKZDcMYKjXeh2PkZw7g+KsxamhcNRTDphjtC3U0h/r8BkB9HZR97fisw8CIAdyT1UE7ZYXpbHqfr+iah/UYB5/aKixtjFmRjKFkDa4hV2yOmdXW/J3uOTtc1WNV3+M9fxWjtipe/Z5P8SMfcSuYVeyZuViTcic3YvydX/2QsZu76gE2nsxH6fgORzylx9HeySpvZeviYw8Dr8pA/YV81W4v3pf+2ryyFbxUMYjf8k9AVuoE8/4MVB89t/GjNpLKlMerz3XFqk4cbZCuc03sqqzi1AadJ3NyrTj6VI787tOcq7rWgl7lVIz71Ud9hKl8bvM1+6rsrKmYGc5jdE0dOXjSNpNn1J3VOMvPva32TPzR+it1WGOGXcUd7TVxYeCeDGQYvie7klt/jc4/dRBioj6EgdmH7CFNpEgYCANhIAyEgRdkIMPwC16UtBQGzmYgw/DZjCZfGAgDYSAMvAsDGYbf5UpmH2FgwECG4QE5cYWBMBAGwsBHM5Bh+KMvfzb/KQxkGP6UK519hoEwEAbCwC4DGYZ3GQs+DFyQgQzDF7xoaTkMhIEwEAYewkCG4YfQnCJh4LkMZBh+Lv+pHgbCQBgIA6/LQIbh17026SwMnMZAhuHTqEyiMBAGwkAYeDMG2mEYH8+c4SD3QO6B3AO5B3IP5B7IPZB74Kr3wMrc3g7DK8HBhIEwcA0G8BLLEQbCQBgIA2EgDPzNQL6Qf3MSSxh4OwYyDL/dJc2GwkAYCANh4CQGMgyfRGTShIFXZiDD8CtfnfQWBsJAGAgDz2Qgw/Az2U/tMPAgBjIMP4jolAkDYSAMhIHLMZBh+HKXLA2HgX0GMgzvc5aIMBAGwkAY+AwGMgx/xnXOLj+cgdkw7H5fP4O+WQ8z/2rPR/Igporr7N5LFesYX1cxlc3jnrEmDytypb9X3edK7zPMCkfEzHLBv8uV4309qtlhO/soV3xh4JkMZBh+Jvt3rP3t27ffP3/+vGOF56X++vXr71+/fj2vgQtWnn2c3I+1n4/etvek9b03Xyt2po/qaKzWWLErxvXVmhpXxVQ2jXllfaf3XSzwK+cr86O97e5fY2e659a16poHdj/hd1sXr7mih4FXYCDD8MlXgS8DDGzPOn78+PEb5+qx2jMGbGBfYch+Jr+rvL4Srvooqa3TsQf1nbUn5PTTc3d1O/tKr15ztD6jH/Y0qlP5dmp7vMeurPHHJfPgOR8dePaAveUPUsR3B/tYkVWOKveqrcr3bFvVO3ta4YgYxrj0/LO1xjuWvs5Of2QYeDUG+jfSq3Vq/WAgwwOnp0GetsRH4lnDGmrPPmYVMas9v8ovzkf3We39E2zdx4n2mZxxhD++9Fn88uXLLOQPv9bXPNQJ5npVMo4ScX7cYkOuKt5r6PoIHjF6dnV3c2tf0PFeXXl/4P2GZ/DIMeux8q/a0M8qtsId2c89Y2Y9Vv5V2ypXng/r6mS+zndPnpI7DNzKwN9fhlszPijeP7Z4AI++nM9ueXWwPLsu8h0dVld7Ppr/Hnu95YN8j35eOSeej+qgnVIxlU391P3ewXo1ljkqfGUDvrI/yoY6enb9cF8uNbbSHV/lZ9wKtsKMbPcehtH77KgwqzbkXsVWuFlvj/Sv9FdhVm0rXCEXT98761DSzzUl7ZFh4JUZmL+ZXrB7vLC/f//+R2ew4XyFw4eDR/bkfySs1l7t+ZWGYfwa6ffB6n4/DTf7MLlf16pXvFX/LAc23FPdoTlVV/zIDt/KqfmgVzmP2hjX9VHVZoz7ut4q+5EcVb3Kds9heNS39tLxWdk1jnqF62yMeTWJfleObl+V3fMRAzt1lx7DNXB6cE1Jn69pjwwDr8bAn3f0q3U36AcP2ZHhF8MTYvmQYriDDskDeYnR4ZJY9Vf/HKIbLDUO+X2Qc78PE6jFvjBs+AG87kP92McsttoLcmgs8qPP2UGe0RPren7dr/JMPPYIHXHMp5yN9jvr79P84HF0qF91xPja8/AaQ+4czEvptdQ+yruK8/zMWcWv2Iih7PKrXbGsT9n53K5r1bUOc7oEnmf1HMPWvUMYh2cVz2R3vYnbkd6nr5Fr9aiwqzbU4Hue9zVinRO+m+Dje03x9COO+ap3NuJ3zxkPyDc7iKFUfGXb8SsW+iyf47MOA89gYP7UPKOrxZp4yHBWL5lZCrzQ8ZJCLD4AHMb4QmM8fHzZwQadWK51QIMNOTSGufyloHlYFxIH+tIXMHStg/z+Mes+ZMBqLOp6bNez18UePJb7c4m6umesuT/ulzHICT8O3Qfqs57uAbiuZ+aM/JcBvQ7/Wv9fg49+6p30WK55PRHH60XfSLKuYmijVJ/q8BNDSb+vR/YKu2IjhhI1VK9qwj86GaOywruf66o+fXju9V0JLJ9HYvTZow0SzyZjea09VvGVPuqN+GqvMxtjKas6qzbmAFf6flYdHOla39XQ+Z7S9x1tzD+TVb8eM+Ol8lc5VmyOwbrK77YqLrYw8IoMXHoYJqH+4qJ9JBHDl7vi8NLyF5e++PQFhzi8GDnEMQ8+Em6jT6XmreoqFi8ZPfSlSzvq6gANO2xaBzZ9eWts1bPX1eGUsZ10rjS22q/2SR0xwIJnnHpU+1V/9H8Z8OtID+2UtKsc+RRHHfjqXqJfJbCen2vKCq8+6i41jjowqydjKKs4+FjXdcapVKzaR7EeM1q7jzWq91T1DAK38g7xZ5t1RrLrTWM6zI4d2NVTa6vO9w9tul/w498O4vXdjxjgcMK+c3T71RwdZse+g9Xa0LtY4lb8MwxzRYaBezPw54R172on5a9eLtWLfVSOLy/H4EWHB9RPvsz0pYjY6iOjL0TNjx49L/3VC5Y+5PM4rP2jBbzvC1yhZz3Qs+OqnmFzHGoifuVwrjQWerUn1MTBWGDQQ7VX7A2c5pgzAB79UFunI0Z9ngPr6hrgeuH6jA7mpXRsZycOfmKoc02My8p/iw35NV51r+1Y93exbve15ul8uEb+DHXvBsdV7zg+n1p7pne9aVyH2bFX2FUbe/H3nu4XOvL5qbF8ZwPrfBI3klW/ju8wO/Yd7Gp94rrc8KtPdcZGhoFHM/D3F/LRHRyoh5ezf4Bh23np+MuObSCv56YPUl+KWFcflGqwrD4o2kNVFzE8Vl8Y4IADJWKrupWt6hnxXhf5tS/2V0nnSmOr/WoO8ooY8IRcfvhe3Z/1vwz4dfzX8/+a+3WtusdhjWuFUw+sR88RsJpXdeapbIxTH3WXzDOTjDuK03jVq3zwj84uRu2jGp0P1wPPix6VDc+24/Bu0HcVcvizrXk7vetN8SNuOp/GQ6/qrNqYa7Rf8OP3O+Mgcd+DH0jUdT4V2+lVv44FZvescriNa+1BdfXP6hPrUvOp7risw8CjGLjkMIyXMx4gfSHpCwp2+HUodEL9ZUc/c3MNqYMYdH25IY/2ATxyaAxswKiNPeLjw9NfCopHTR0uEO91WVv7Y/+KRc8+0FY9eyxi0CNjuYeOZ/SvPvTFWNhH+6UfeN97t0/Yc9QMONeOGvlHPuTx+wI2XHtea6+Ftef0dYXxPIjRuE73OF9rnPt03eHUrrrGUh/5O5/bfc3ckCOfP/fA6vOJeD5vmhO6xs6ee4/letTbDNPFut3Xo7wdFjHYrx76LgNHlZ94Pg/gFnH67iVmJke9MbbD7Ng7rNeocJWNcZAr/hlG80UPA/dk4JLDMAjBQ6SnD4rw+YsecfxrnbH+UgOGLzNiNA9ebppD61Z96WCKWOaEHSfWPPiRIYZ2So+n3SXy+AsY+2Re99FOqT0jN+2oz57JCXyeDzHKUbWGbcQz/OwD+YHVA73kWGcA12l0jPwjH3LiXgBGz+qeYP1ZvhFOaxBH6XmJpb+THreD81hfe66Rv/PB7qfn5brLoX7m0mequob6blM/nku+i5h3Rc56G+VYje1wlb2yoQe+4/ht8DUwuL8Rz9N757sLHPJd6ZjRuuttFEPfTuwKttvjLHbmZ7+RYeAVGBh/IV+hwxfrAR+BIy+3R28DL2P92N2rPuo8mo+rXIN7cX4k7+zDVPlh43mk5tEY1qx6qnISX/lWbCt1KsyqTXvoYmCvfIh1u6+Jqexa+1k6+uJ5tIeVva1glKtV/NGej8SRp1t624ldxVY42GbnEQ4SEwaewUCG4Q3W+QsBXgCPHgA32nwYFHyMfgF8WCMpNGWg+phNgwIIA2EgDISBMPABDGQY/oCLnC2GgQzDuQfCQBgIA2EgDNQMZBiueYk1DLwVAxmG3+pyZjNhIAyEgTBwIgMZhk8kM6nCwKsykGH4Va9M+goDYSAMhIFnM5Bh+NlXIPXDwAMYyDD8AJJTIgyEgTAQBi7JQIbhS162NB0G9hjIMLzHV9BhIAyEgTDwOQxkGP6ca52dfjADGYY/+OJn62EgDISBMDBkoB2G8fHMGQ5yD+QeyD2QeyD3QO6B3AO5B656Dwyn4P8622F4JTiYMBAGrsEAXmI5wkAYCANhIAyEgb8ZyBfyb05iCQNvx0CG4be7pNlQGAgDYSAMnMRAhuGTiEyaMPDKDGQYfuWrk97CQBgIA2HgmQxkGH4m+6kdBh7EQIbhBxGdMmEgDISBMHA5BjIMX+6SpeEwsM9AhuF9zhIRBsJAGAgDn8FAhuHPuM7Z5Ycz0A3DnR10jXyks8N0do0DZuVkzEjO6o1in+F7pX5nvcz8q/zdkueW2NX+iKtqVTbiO7kb0+E7e1f3XezY9xX3fkvPVWxl02s88ytW9S6us2ssdMf52vGMAW7lrOLvacswfE92b8z97du33z9//rwxy1o4aukNuhb1uqhfv379sZ/v378/tVnUH/GrPu/169evv7GfWw7k747O19mZR3tWHX5dU2fcqkTc6rGDXc15T9wr9TvqBb7RucPRqI7mqXCrNs0D/UjvR2odiWF/7FlzdDqx7yqxb55X3qNev9k+HDtbe74KD5ueHoO1xxHT2emnrHCVjXhI9as+82mOe+nrX5t7dZC8JQM/fvz4jfPWg0PubJgC7p0O7NeHykfuj7xXf8yMuO76xkB8y+EvHs3V+To7Yt2n607XmjNdczgWvtXTY89Y41qM+vMaq70qznMcXWtO6p4L9uro7MCOfPSz3kx67Sr3is3rsA/Pf9Re5dfc3qOvFas6cS6JoZ3rT5C+Z6yr895c4BuMut23pOppZvOegddjtia2qkOfSs9HX2WvbMS7rLCVTePUrzowulZd4++p/3kV7lnp5NwYMkCYnieXeFo6DESjgWm3sZVfFs+st9vfPfDdUHmPWl1OcHrWMHzrPXHk5bISo89fp3f8dPZZ3cq/autq7tq/fPmyG/I/fNXr/5wThR9n5MC52wdrM94ly7t9tmYcJfB+PMKGmlpnRWefwPrp+RRLnVJrMc7zca0xtLnsMLS/swQXevgavsqmMWfpeOZGw/BOna7nXbvW7GKJcT/WflZYjyMGUn2eS9cawzj1j3SPvff6zzvu3tVOzO8fAZCKgeEKx+wX326IOrq3Zw/Ds/0e3dco77sNw+Bo5Tp2XOL52D1WYmaYmd97WsFXmFWb1zu69vfPap5b+sQ9jXuAB9ZVPvorWeErG2Ir+6vbvG/tt9PJk/qZx20dlnbKLo55iaMEnidtjh3l1JijOu6n6o/3o/k0bvSuJo77dwl/tffKxlxnSvTeDcNn1en20tm17gxT+dVGnXIld4XVuB39zFw7dR27/4X0DE9Y44H1mxO2ez3IZ25x5cE6+qHt+lwZou71y/DKfru+Z/YRT+84DN/CZfXCgY0nuKY+kn5NRlj6PKZbA79yMO+KXMl3BDO690b5qj1WtioHrj9OPbDGvd4dmlt1xY/s8K2cmg96lXPHtlKzyue1FdPp7F39nocYSsfSTtn5KzttLpGLNtdZ50x59o8w7A33p/4RR/tI6r6B83VnG+U86lt576K/2Tmr73v0tcZ3tYCpfBpLDG0V3m3EMhb+0dH5Pe9oPcp/D994R/eoeFJOkHjL8IuHkxfCB0Hc/PTpRw842Pnx8TV8sGFQZzx7RAxtlJqbtADn/dAHPGMhcTAvY3wNDPaKPhhbvZgYz1qrUrlCfv6Rwj5YE9L3q9cAfh7KH2zoDX72yLXmRh96oD57UfuKrn1pXvag/fH6Mq9eI/TpfuC4D8aoHPUN3yhW87iu/K76RjHMMcNUfth2T9brZFWnw6pd++D9yWeF94+vEQ8s7cixcl1YS+tDX+2dzxTkzsH8lF5T7aO8qzjPz5xVfGUjXuUKDhg9vQ/NoTrruE3XqntexlMexWocdK5dss6uxD3KvJB8N/k7HD6/nzVOvx98V9LG9x/fm1xr/Oz+JVb3B5sflU0x+p7W/aBXf375rDNeuYLufuI6OeutivMYX1cxsDnO11WcYlRfxWqM6oyvbPS53MF67Jnrv++wM7PfORdIxMkHb7Ucbm59OPBg8AHlB465kJsPOmzQifU1Y/ngYK11gEc++llDZRUDP2Lg44G87MNjfM2Hn7FYO2feJ7EzqdygH8/T7Rf7UR4qHK4L8sGHPWGth6/Vh140v/pGOuppHPZH3iFxv9HvPHsssIzVms6R+kZ9w6d8a9xMRy/d0fk6u+YBZnYqfqSfVc/76WriOoBTHsqt34++xr2neKyra83c3JtK75NrxlQS/RI3quexrKt22ijVpzrrweZYXzOusq/amENlFat+1RW7ojMWWD/pg+xyEaN+2jxO7ap3sRo/wmiuSse9wvcW/LifceqB56G6p/QdCLzj+F7CMwAddfQdR7/WGunYJ0/iqr1XNuKxN30+0ZPuH7Hq12+JxwKnsawxkqPeVuJ24h3ra6/nfl87vlprjOrEVjb1wT86iX2k7L+Qj+zixlq4kfVmnqUbXSg8xP6S4EOOvHgw8HDz0DVeJLOXAHKPHizk1hysg7jKDr/X9bX2CHyVq8vN+p1UbirMbL+MqXDIDXt3jK45X8pdbGf3e0P7cl79Je+x4BQxfoy4HvXd3Ruev1p7b4rpfJ19JZaYlRw72C7frh01/QPJPiD1uldrv/dGubQ31VmvstE3kojDs71yAOt1uKbUPMSrj7pLjaOu8TOdMZDMrbZdu+ZY0VlLsVVN9avexc/srIFcfjKWGJXqW9Xx7vB71mO799UMh9zoH7I6YN+5T5GD/LrU/PSpjTrq6bvXe3AudO2x/i5gDZXei68VO9NXY4mD5InctGsdt+maOmR1ah7qjFldEwfpsepb9c9yeM6V9SWHYdyc/uCNPkZKBOL0xlcfdPj0IYINDwdqUtfa8HE9G5YQv/Jgdf0hljcr+0FOr+tr7ZE9u9WU8wAAIABJREFUwKbHaEBTXKWjX/RV9T3aL/dC6X8kVPm0/siPa+L5NLbSEcNeVJIb5xV48gjd++k+LszX9dD1PeKyyqU27Kc7Ol9n1zzKU6crfqSv1qtydLGdnTnANfvG9eXhXPvarzXyjK4r81b9VDbiVVb3BWqit9HB/JSO7ezEwU8Mda6JcVn5V2wVBrl37BWWNkrvt6pxBpY5KKu6XtuxXFNWOeAb+RGj77fqXoVNnwHWgY35KRWn70HGqJz5Fcs9UNLna9grG/F4PuHXU59Z1RGja+jomYc/+7Sr9F60LnXFdzrzUHY42ImhJNbXiiWGNsWqTlxlYywxvu5iiL/Fr7GqM/ctsv9C3pL1zrF4EP3DAFv1gFetVCTy4cZwQ52xaoOuD4quvYfqJbDyYGEfWoN9qNQXl9f1tfaIHOjBufK11lrVd/arnLInv6b6gqp6GPnRi+ercritujeIcV59vx6r14g5IEdcj/pGHPxHDu9Nc9BHSZ+vaa+kY31dxbhtJQaY3dPrdGt9Tvw59bXfe7jXVu63ao+VreoRPeDUw/tSH3XNr3rlpw0SWMVTd6kxI51xRzBdbGWHze1cU1Y9uM/XGuM+XxNLOyXtKuFTv+rEVTb6ID2H+iq9um+695XXdpy/B73ezE+81lEdfu7PJWNd+vfF/f786tpjK648X9WvY2br3RzEU2p+2PxUP3WNVb3y0wbpWF2rrjHU3T9bM87repzijuiXHIbxcIEI/TDgAeUaEv5ucMDNrh8u6Bh0cEDqg4FcwPPQBwVYrTMblpgfvVJnXeaHRN/E0K49wIaeuV/kUD90jcda94v9eV3FsyYksJ0POTQv8RoPDOOhs673gDVyaT7YRgf2xWuscYiB3W2wz+4N9KpxwCvP3AtrOO+Kxb3B/eo+NIfamVPr01/dE/StSPTSHfBV/srGHIzZkYzt5KgeYzrMrh359NphjevC64XrqNeJ9yf7wJrXGjbU571ITCWrPitbFYvegGWPwGAPuvY4z+1r4Cub5oFfMZ2uMZWucZUftg6zYgemwqmt06vaivV+1ae64tzua8Wyfofp7JpjhME7Re8T6Hp/Iw8wvKf5DsI9rXm5Rrxi/FnSvqDru5xxjtG11oTd152NObAP7cnfn9oPYnSN/pQb1J717P35mn11ssN3duShj7LL3dkZ51Lx9KkNemef+Sq/5/J1VXuG8ZiVdf+FXIl+IgZk6Kk3Kx4E+EYfJ9z8jNdYbInx8OtDAh9eAozDw4YTaxy0M5+v/wH998GDTx9W+ijRA04eeDiZr4plH/ChPiXisaZN7cwNqQ+/2hHnHNDPFyNy8tQXLnHkWverPCKWa+8Vvq6+Xievi96QqzqQU7l1jHKpvHCPzOtr5KENOXjN/D7UnF6761u585iVNfrqjs7X2T1PhatsHufrIzHMcSRWrzPi/brwvoUP1xyS9w3WvL5qZz+dBHblrOKr5439VHjUWTkqnPboORxPrON87XHux5q5dmSVhzavqWvVu9rM41JjVSeusrEGMSqBZwwl/VxT0q5y5ANO35XAVni9v/iOQyzvfcTgmWAuvHNnzxB71GeFtpGs+hvhK5/3TQx75jvV18DRhj643+5ZY6+UiFeddTs5w1Z+2iCpd/kru8ZQZy6Xs3j1M5faXHfMbO3x91qvvS3vVT15hwzgBeJD3jDgBqe+rPTmxAsSvqsd+mLHfvTljv3A/8hDX8zKL3uAjaf2Cj9ezLf2W9Vk7U6uxHSYzl7VApZn5V+x7dRbyXcvzCv1Sc5XeyL+KDerdXbyj3J2Pu7D/bM1+mLsqEfP41j1d/mIoWQOX7Mn+t9FVvt8xb15n1jPTu6DOK5H0rFY60H/SBLvsSP7DDuqR5/mp21VMvYR8k9GH1ExNS7DAAaw7lfZy2zCGsUg3P2Fb9C3WuLlkyMMhIEwEAbCQBj4m4F8If/mJJYw8HYMZBh+u0uaDYWBMBAGwsBJDGQYPonIpAkDr8xAhuFXvjrpLQyEgTAQBp7JQIbhZ7Kf2mHgQQxkGH4Q0SkTBsJAGAgDl2Mgw/DlLlkaDgP7DGQY3ucsEWEgDISBMPAZDGQY/ozrnF1+OAMZhj/8Bsj2w0AYCANhoGWgHYbx8cwZDnIP5B7IPZB7IPdA7oHcA7kHrnoPtBOwONphWDBRw0AYuDgDeInlCANhIAyEgTAQBv5mIF/IvzmJJQy8HQMZht/ukmZDYSAMhIEwcBIDGYZPIjJpwsArM5Bh+JWvTnoLA2EgDISBZzKQYfiZ7Kd2GHgQAxmGH0R0yoSBMBAGwsDlGMgwfLlLlobDwD4DGYb3OUtEGAgDYSAMfAYDGYY/4zpnlx/OQDcMd3bQNfKRzg7T2TUOmJWTMSM5qzeKfYbvlfqd9TLzr/K3k2eGnfm1px2sxkG/JdZzzdZVrcpW5XGcr7sY4FbOKj62MPBODGQYfuLV/PXr1++vX78+pAPU0pfe9+/fH1L3nkW+ffv2x57uWWsl94hf8K1+zffz58/f2Ms9D9Tujs7X2ZlH96M6/LqmzrhVibjVYwe7mvOeuFfqd9QLfKNzh6NRnSpPh+/syFH5KttqvSq2snk+YLrTsVxXeSsb8SorXGXrYhyra9U1PnoYeCcG1r8277Tr/+7lx48f/3th+TBC39Ftc/gcDbsj32pd1vH+PR64dxiAdV+zPSv2bJ28V9dwxnXVN+43nPc6Rh+0ztfZ0aP7dN3pO3vTHB4H3+rpsWescc1H/XmN1V4V5zmOrjUndc8Fe3V0dmBHPvpZbya19gxb+TWetdWGmJWjwq3YvKeqB9av8s3wVX7mo6zyVjbivaZjda26xkcPA+/EwNpb4gV3jF/T8JDqudMmBhYOMhxsNJ751baraw2PxUAE/xnHyi+LqJVh+Ay2/83RXd8Z19UwjKxn3hP/dvn/2pEP2kqMPn+d7r3M1rO6lX/VNqu96v/y5csq9C9c1etfoMbAP9KRA+duH6zNeJcs6/bZmnGUwPuxaluJc4yuvc6o91EcfJ6rs7ld4zqdtav+PJ9iqVN6/iqfYjSuw7qdMZFh4F0Z+PuNdZGd+kcAD+/OcImPyr2Hw9GwxEH8DLqfPQzf8xfNUe5uqDyD05Uco+s7ure6vleu40pfFab6GFY4ta3EzDAzv9aDvoKvMKs2r3d07e+f1Ty39On3G9ZVvlEvFb6yIUdlf4RN+6/qqX+mj+Ld5+sdDhyruTqdvaufedzWYYmn/1bZ1b01b+LDwKszcMlhGEODDxuw4Vw9njkMo/fRkLe6B+JWhih8OJ0zxt8qjw4Gs7qza9QNlbO8Z/l9OGHeGdejvu/FZfWRg40neqc+ktwj5QhLH7EzCfzKwbwrciXfEczR61TtsbJVPeF58PcG1rjfukNzq674kR2+lVPzQa9yrtoYP6vrNat1VZP5HT+rp36P9Zxat9OZQ/2ehxjKCus2Yik7P+yrJ3NFhoF3ZWDt6/OCu8dDvDP8cguI8ReAf9iwBsZ/vcUwCTs+PszhGHyc6MPQ4370AXv1AdNY5ODwCjzrMl7XHIaJg8+5mQ1o5KeS5AN5cfLQevTpx9q55n4QTzxsyid0XRPn1wg5UP/IoX1p3rOu74zrUd/wIf7sQ6+b5+58nV3jZ5jKD9vuqTUrvapT4dymffBe4P3B+9XXyAEs7cgxuqasyVpcU672zudi9/5gfkrU7XT2VEmNqfxqq7CrNuSpsLP86q9yzHJ6fJWjwyA3T4/Tuqozl9t0rXqXVzGqd/lpr2QVX+FiCwPvxsC/k80Fd4YHF6cOYKvbQAw/dlUMPjjVIAubvjCw5seJHyvmQ/4uB2OIhVQs/PqB1TrEMgc/yuQBa37YmR/Y0X6Jc4kY5ONRDWtei1jlCTbHoV/kox175B6An10j5Yc1ZxI8aF/Ym/IOXf3Ku8d213fG9ahv+JTv2X5W/bonj+l8nV3jgZmdih/pZ9Xzfrqa4BrXiofeB37v+Rr3rOKxHl037k2l98k1+6kk70FgR/U8lnXVThul+lSHnxhK+n09slfYyoYcsM9O1nI5yunY2brLVcUpdkVnDmD9pA+yy0XMjp8xlF63WhMbGQbemYFLD8O8MPgQcaCibSb94+Z4fHT0Y0e/Dkew6fCC4UgHzi6Hf4SZG3vQjzPtkF5X1/goIqcengt5tTfFjnTw5Lkdv8q945DbbZp7do1mfWku6n6NYNcelFf4UINDh8d213fG9ahv+Lp7gHs4IvWD6fGdr7Nr/Awz8+/kArbLt2tHLr+e2ovfe77We2aWS3tTnfUqG30jiTjcrysHsF6Ha0rNQ7z6qLvUOOoaP9MZo5I11Kb6yN/5Ojvydr4du2JXdO5HsVUv6lf9SDxjKKt89EHO/IqNHgauzMAlh2F8mHxgGH3YqgvkHzfHdIPOaFjCIIO8PLoc6FVxxEPiI4sXkH9sva6uu2GYQxzyohfUPXKgV/SEs+rbe2UN1GMcJX2QyDXqaeYfDZVaR3XEsBeVvJ+UV8QBTx5Xr++M61HfHZe6hyM69todna+zax7lsNMVP9JX61U5utjOzhx6j/I6w+f3nq/9OiHP6LqyXtVPZSNeZfWs+D2peOrMT0k7ZWdXPzGQPOmvJPHqW7UhhjVGUnNTr2own0riKWdxxFFW+JGt8nW5drDI4Xhdq856Km/1a67oYeDKDPRfyBfeFT5a/mGAbeVjxG35x412ym6QHQ1L6En76nLAPuvVY72urqu942ONHDyga2+070r0rUMD4n0wgA0Y9KiH42bXYOafcai1qfs1op1SeYVN9+uxfo2YY8Z11zfiOh9zH5Wjjx59lKzha9or6VhfVzFuW4kBZvf0Ot1ar73fe772e9nvja5GtcfKVsWjB5x6eF/qo675Va/8tEECq3jqLjVmpDNuhKFvhu38M/vMz/qUO3hgHc81JfOqdJ+vR1j4HK9r1TUPdffP1oyLDAPvxsAlh2EMDXho9cOAIYJrSPiB647ZRwSxPswhl34wsdZhCQOgfiSBrXIwTvtDrA+rnotDKKTuj2vuFXvzuqjl+YGfceV5kAMxegDDvbCG98A66JX7gI14zUcdOA6HGkc/fVxTgrfOhz79ha971L0g35Hr23HN/rreYCePxJ4lfc+aF77KX9kYx5gdydhOjuoxpsPs2pFPrzvWeq1xb+p1wj2l9yrWwPBA/ZVrV/VZ2ZhXJZ4BYPn8wIc96Frx0D23rytMlUPjOt3jfK1x7vP1DFv5Kxvyut3XFYb9VFjHA1Ph1Nbpnqtas5fOp7kV2+EV47GztcZGDwPvxMAlh2FcADy0euqHioNX93HCh0xj9aOG3O5nbkjGAedrt7EP/agCw0M/xuiVuSn1I8cPIXyIwwkdB3zqp511IJGf+1A7dOCdA2LQO/w8tWdiuE9gtGf2CDvyMBdrMidkV5/Xoqrb8Yp9Iq47nCveJ349fY18auO+vY8R18jheNiQq+Og28eOHRx3R+fr7J6nwlU2j/P1kRjmOBKr9yfi/brw3oOP153XCGvg4cNJO/vpJPEzWcVX74hRXdRYOSqc9uc5HE+s43ztce7XNXOOpOKhV/krW4Ud1el8Xl/XXlfXqrMXr6G5VPdYxiuGeoWlj9IxszXjIsPAuzGw9rZ8t12/yH7wcauGvHu05x9SfMx54KMO/9UOHUb0JY69+GDziL2hB57KL2pzmKJf+8Fwfu9+lR+tPdJXYjpMZ6/qAcuz8q/Yduqt5LsX5pX6JOerPRF/lJvVOsg/w878Z+Xo9jqq3/lg56l5He9r7qWy00fJ/J1k3c4/sjM2Mgy8IwMZht/xqm7sCUPY6NeljVQvAcUgPPpV+CWafEIT+MjlCANhIAyEgTAQBv5mIF/IvzmJJQy8HQMZht/ukmZDYSAMhIEwcBIDGYZPIjJpwsArM5Bh+JWvTnoLA2EgDISBZzKQYfiZ7Kd2GHgQAxmGH0R0yoSBMBAGwsDlGMgwfLlLlobDwD4DGYb3OUtEGAgDYSAMfAYDGYY/4zpnlx/OQIbhD78Bsv0wEAbCQBhoGcgw3FITRxh4HwYyDL/PtcxOwkAYCANh4FwG2mEYH8+c4SD3QO6B3AO5B3IP5B7IPZB74Kr3wMrY3A7DK8HBhIEwcA0G8BLLEQbCQBgIA2EgDPzNQL6Qf3MSSxh4OwYyDL/dJc2GwkAYCANh4CQGMgyfRGTShIFXZiDD8CtfnfQWBsJAGAgDz2Qgw/Az2U/tMPAgBjIMP4jolAkDYSAMhIHLMZBh+HKXLA2HgX0GMgzvc5aIMBAGwkAY+AwGMgx/xnXOLj+cgdkw7H5fr9J3NG6U/0jOWczMP+pHfUfyIKaK6+xaD3oV65huvRvb4Tt7V/eRfc96m/mrPTCGssKcaTtaZzeuw3f20R6PxIzy3cM363HmX+npkTmqWpVt1LfjfT2KPeLr8nf2IzWOxGQYPsLaSTG/fv36/fXr15OyXSsN9o3953gMA7MXjfux9nO1U89VxXlurjtsZR/ZRj2wVidHed03qqNYrbViV4zrqzU9juudeO1b49yuPtZxuYLxGKwZR1lh3NZhO7vH+1rjVHfcWetbauzEAqsn+1cbdfo6CdyrH6Meuc9OjvameVUfxcDXYTu75+twnd3jqx5msfDryRxqU91rqg86D7erj5h7yn87uWeVF87948eP9oYctf3ly5ff379/H0GmvmoQPtrPtNgBwLdv3/7hZjS08gau9jIreSRmljP+moHqxaK2Tkc29Xl2+FZPj53lJt7rV/WIpfSYmR3+LkZjq9qVjTGUXe7OrnFV/pHtjFjkYG+UmrfSaWPsqEf1aZzro9qO9fUtsbNc7j9zzb4pu9zw756ai/kp6dO16vRDwr56atw99aofrzfaj2O57mLopySOkvaZJB5ydFZ5GAvfbixjZnnd7zXdP1ozlpJYXatO/yPkZYfhnz9//nXxjxDGPLuxGORuGYYxaFZD5tF+dvtfxWOfVZ8aD/+RwRZx4CHH/RnoXjC0z2TXIeM6/8zexatd9Sof/ZDVyZjKN7IxjhJYP26xIVcV7zV0vYPfwXovHss15aynW3Dspcqx6kPs7NQ9aN5ZHP0ef8YaufXw9apPcdQ1l+rwc03JGPWdZdM8Mx396Inv4+rBvWi86syjthWdcZ1Ejp3D8b6uclV9AuexvvZcnb+zew3FQfdT6ylW87hdfRp/b33vqt27m438+GVWDxA6G9oU/0z96PCInvHL8SOPew7D2MdK/kfu911rVS8c7JV2St1/ZVO/xwPfnR7HtePVXum0qaz6rGyIqeyPsqGOnl0/ujfVNbbSFbube4RHre7ofJV9xQZMhavqj7Bdjs4+2v/MV/V2xNb1tmvvah/JsxNTYStb15/b/duA9c73r6pd2VC3sq/YgNk5fY++1pqqO47rCkMbJbEuj/oZR8m8szVxkI5d9SnubL1/y51d6cR8+OvQf5WFbeevxhPb2U6F3nceahZAjO+bvntJfyFVdW4d7h+9p2oP724bvXywd/frWnXnaeSr8mq8x+q60z2n4ka56QN+9WQMZVXrqI1xXS+sSUkc1y6Zz+1YM7aTVYzaZrkVS72rVdkZ47LC0uZYXwNXHZ0d2FXfCFfVXLF5ztlacwI7OhVb6V5LMZ1vVM99mm9Hx7fHj9G3QntVXXOM7N53t9Z8lT6qUeHVprGqK0Z1YiBnZxWntkpnfvXRRklfVZ8+lx6r/pFPcWfr9Rvj7Cp3yAfCbh1+8bAhj//KjKET9pnP6wOP/+yPB5bxjgEV3T+RQB+I85cAhk3mo/SeUafyaS+sDZz+8wTywHi9XPBpbu8N2NEwrLmrPwAQq71o7ejnMYBrOzrUrzpifK153Kdr1TWGuvt13eke2+HUzphKruIQW2GP2hhH2eVXu2J9LyOfY7leiVEM9NHJvJ3UXB3mLHtXq7OjbrU39qNxqndxVS61aV7Px5zEUDKe65ms8nqMYpi/kx7ra83lviNrfDtGw2+Vkz1QAtPpVTxtGkPbihzFuQ9rnshNvZNVfWD9qGyKob+rQztjiK/W7iNmJDWGtTo5ynO2728mz65wx3wksBqydsrqYMnBj/HIXQ2AGOB80GUsH2Csq0EP+TAEVsdosEQvzK2xiNEbDHW9Z+wRvSAH/Nwz8mlOr4E8xKIm1sDo0fWMepobsaitRxermOi3M6D3h2fjcwQ79U5WsZVtVI91VK7qWquqQRul4lWHnxhK+n09slfYFRsxlKihelUT/tHJmBVZ1ariZrjKP+qx81W1b7FVfSFfZ698iu30W3ocxWq9Ea7zrcbPcJUftt2z63NmxzcDtarvaBfb9Qx85dM83FeFncV6jON9zbq7dsaxnsf7WvGVXuErG2PVRx2yOxlHyRiuXc78jj9rfelhmCRgWNOBjfZVqbEcGDUWfgxtegDngx3W+tB2gx4wno+5uxj4fVBljA+0sOueuPYhlvEqvQZeRtor/LpHxHY9+03tuRnr+bSf6Ocw4NeCWWmnpF3lzAf/ysmcno+x9EMqRnXHuI9rygqvPuouNY46MKsnYyirOPhY13XGqVSs2ldiFT/K4zjHztajXjyWtSo7bLOT8ZQzfOVnLCT8euiaOqXi7qHfUmc1FjjHztbYq2O4/10741YkvhHIr9+iLg4474VrSo0lXn3UXWpcpRNPn65Vpx9y184YxDGW+khqTdWZY2ajX/HUZ1JjiVUbdUj3q4/+GcZjVtZ/Pv0rES+AwVDlD0U1EK62qoMjdB9yq19D8XA6bnUYRq/YQ3V0gyWw1TAJO18UuEH0VI50j15XY6D7r7maBz2ADz2qnmHzvFj74NvtSfNHv50BcO+H2jodMeob5VCfx/hasVUNxavOONooaafs7OonBpIn/ZUkXn232JBH41XXGtRH/soH2+7ptbq8juMasorZtXc5WOeofxTnPl1Tp2Qf95IrdYDZPdkv81PSDqk21YmpbB5H7Mze5cL3w7+R+L76t0fraK0ub2dnHviJoc41MZ2scGpTXXPQDjk7NQ46Y2mfrYlT6TFV3g7PWEqPrexqY161qU4/pfpUp/8W+fcX8pZsD4rFQ6EDG8r6ILrTig6KeNiQS4/KdsswjAfdh0LWqwZL+rrBceUPAd0j80H63rwG/OiJB/zee9fzys2KXJqfdSLPZWB2Ldyva9W9q86ndtU9Husjfo1RnfkrG2upj7pL5plJxh3FabzqVT74R2cVU9lmdTRmhq38ox47n9aEXuVVzMh/ls/z6Fp17ess/Zb8O7EzbOWHbfeseGGOygcbvj1+dN8x4rRf1Ss/bZDeC2NdaozrxLqd686/a2c+SI2F7mvFVrri1d/ZWbOqRZtLzct4t+l6VpvYEY6YHXnJYRjDE4jQvxwxVHENCf/qkKUPGAZhXSNX9VCing/NPpB3QyIuUDcEjmI0P3TWJx964b1n3ZPiYGce2LHW4Rp59A8PxyOm6xl71FhwyWvEOGBy3J+B2Ytj5O98nR27Gfl0tys4x8zWK/WRQ/N0uvZa6RpX+WnrcGpXnXEqR/6RT3NAPxNb5apso7oVvrLpPkb+W32I9xxcu9SeztRZ50jOndgZtvJXNvS5ax/FwIdvjX4f8O3QtXPj9X09q0e/xnX6rLb7mfsMu+bQ/miHrbLTTznC7PoU3+krdYHReMaohH+GUfyqfslhGJsjIZQ+dMGOIW3l8MERDx3z4oHUQ33E0M81e/E1cZReF7UYA8k8xEMS47EYaDWWe0cOtft+PI5r1obUHLSzJ80N3V9W6JOYysc8kfdlANdgdIz8na+zo87Ixz5WMJ7rSIzWQ3yVw20djrkoPY52lxXObb5eyUHMLJY4yDOxZ+byHpF7dCqe+qyfkb/zuR1rt7H+WfKW/DuxM+zMr/vdwSJuhtdvB7D+zTtSu6oJG0/NWfVY4aqcszz0M5aS9qq2+qh7nK6h65oxK7m7uC5W8Z3O+uqnTeXMr9gz9fEX8sxKL5QLDxV/oZz9tXnPtrtfVO9Z81Vy4xpwYH+Vnt65j9kLpvLDxtO5qfDAEN/5mWfm38nFnEdi2K/m2NFX9+E5q7jKpnGVHzaeiq104qo8FR62Dntmrqp2V5fYyl/ZiKfsMGfZWedW2fUzyosYniOc+ro6zNP5NQf1e2GZ/xa5ux/iZzVnex7l8VhiR5L9KAY2rulXCZ8evnbfyA9s5e9snV1rUgeWJ22PlH+y9MjKT6ylv3SO/tp8YospHQZOZaB6KZ1aIMnCQBgIA2EgDFyUgY8chi96rdJ2GDjMQIbhw9QlMAyEgTAQBt6cgQzDb36Bs70wAAYyDOc+CANhIAyEgTBQM5BhuOYl1jDwVgxkGH6ry5nNhIEwEAbCwIkMZBg+kcykCgOvykCG4Ve9MukrDISBMBAGns1AhuFnX4HUDwMPYCDD8ANITokwEAbCQBi4JAMZhi952dJ0GNhjIMPwHl9Bh4EwEAbCwOcw0A7D+HjmDAe5B3IP5B7IPZB7IPdA7oHcA1e9B1ZG+nYYXgkOJgyEgWswgJdYjjAQBsJAGAgDYeBvBvKF/JuTWMLA2zGQYfjtLmk2FAbCQBgIAycxkGH4JCKTJgy8MgMZhl/56qS3MBAGwkAYeCYDGYafyX5qh4EHMZBh+EFEp0wYCANhIAxcjoEMw5e7ZGk4DOwzkGF4n7NEhIEwEAbCwGcwkGH4M65zdvnhDMyGYff7+hn0zXqY+bueu7jOXuVxrK+rmFtsXf7Ofkuts2JnvcG/gtF+ZnjFQt/Fa/xubIfv7FrL9SMxnsPXKzlXMJ73ketRfyNf1eMuXnPsxlb4yqY1oj+WgQzDj+V7q9q3b99+//z5cyvmHcDYM/ae4zwGZi9e92Pt53ndrGXynjTKe/O1Yl2f5XV8tfYcvvaYqj+36XolHhiNoe6xz1qjHz3YH6X6Or3K0WFp1xjV6d+RO/HA6sk6aqNOXyeBWzmYz2UVu5JzBVOYsccpAAAgAElEQVTlXrV5n7rWHKM+Ol9n7/Ku4DXW9Z34ClvZvEbWj2Ng7Yl7XD8vX+n79+//e+F1g+qPHz/+wdyyGeTA+anHp+//7OtevXjV1unoQ31n9YWcfnrurm5nX+1V470HX3tPoxqa1+PUp7rjqjXxlMToWnX6ny29J1/P+uvwnV3zEUOpvkoHbvfUPKxDSZ+uVacfEvbVU+NU73KPMKs1V3JrnZGuuTod8eytyqVx6u/simFule73NXvZkVWOyqY53Z/1Yxm47DCMQVRvJOiPPEa/2rK3o/38+vXrJX4Z/fr16z8cc+hHX+T8EYM6OEbNHLcz0D0ftM/krAPcD7w3IL98+TIL+cOv9TUPdYK5XpWMg/QY2hSjOvDVsWtHDo1xHWs9taZiNY/b1afxz9B1L9SP9FftcTdPl8N5WcUxTvGqa39uVx/z3GpjnqqW5+4wzOF4tZ+lowf2oZI663BNSftI7mCRZxXvuJ01sH5WtT3naJ/x3YeB+m1/n1qnZvWPLW6mRw5Oo2F4ttHZIHlL7lntXT8GYpw8wPGsf2JvlRjCwUWO2xnoXra0U2qlyqZ+6rgn/B5ZjWWOCl/ZgK/sqzaP1zjVHTfqk74uRu2zGu5fya35Ff9s3ffi61F/M2zlh23n1PpVPvW73uE7O+I7X2VftbEv4PVUe6WrTeMqndgzJPLj0Dpca37i3MY4tVOvYtTH2BXJOEjNq/oORuOou9R80R/PwCWHYQxJ+OcKesDGXzDVfi/96MCKQdJ79x590Hf/I9foFYMOuX3kMIx9vhIXj+T97Fp88XZ53a9r1at43NP+BxLWoz9ONafqmn9kh2/l1HzUR3mJqWQX59gKRxslY7D2kz6XHqv+kU9xj9S9J9+nrrUvj1Of6iu4DjOyw9edWr/Su7zAdr6uVmVfqal1Or3KM+qxw+/aqz3RxvpcU3oN2Kujs1dY2Dr8rp35u7gjtZgz8nEM1HfV4+ofroQbjwPakSQYspCDJ3Lg4401Bl2c9FV1umGYefWXMs3NnJDVoIcekLs6mJs5FIMeade83If6tTfGuOTADolYxvgwjKGHsVoXcbCTU+jMwb61J42lHxL9I0eO2xgA/6ND/aojxteeh9d49zoxL6XXUrvX1PUqjjGKhz46PWaE9byMhRz5FNfpHj/qo8vBPhjrz5w+y/qsQkeMPq/dO0prs2eXxNDONfujhL87GVPluNXHeJWjOsQppuubdsZ0UnN1GNodq+uRDt/OyXpnSe3Ncx7xjWLOyO85VtfKscawX0r1RX88A+Mv5OP72arIm8x/lZol4YBHnA5cfOEzJ9fEUiIGvurAUKAfE8UgLwdNtVNHzupDM+qZw4jm0PrQ9cOH9agH5oEkDjHoDbU6bmD3uvqgw8eBadYzexjxTEzknAG9Do7mcwQ79U56LNe8nojrngtiVQLvB22U7ucafmIo1UfdpcbRtxOPGMd3tio/Y9lHJRlHyRiuXc78wOt7Dmt9VnHN9B2BZ1nfQ/ApHmu+B7wXrrkvXVOHXOm5wlQ2zUtdcaqv1q7y0FZJr+GYyg/b7ql5mZMSvhVdc1BnHCXtZ0rk7k6tM+qh8tFGqbkqXXGqA+trxsM+O4lVyRjN7TV8rfHRH8PA31+ix9Q9tQpezPoinyX3F73iq2EUHwH/wI+GNAwG+uHQ/KjNAVPt1BGrHyHaRz0jn+dUPtAL8vLAXtgfH1SXzEfJGOThRxB9Umdu1GUtr6uczXpmPsQwH22R+wx0L1vaKavMI1+H5/1V+dWG3J6fa8oKrz7qLjUOOvw8K5/amEttqlf+ysYY9VGfSY0lVm3UId2vPurVM0df9yzTr+8T2EbvI/TCk/GQ2mPlVyx1jRnZ6FPpsbpWXWNc38E5drZGLcew/ordMVhXtllO72OUg7nOkF5Hc+76iKfUXJXuOF2rXsXStoIjhhKxqjMX7Ud8miP6cQYuOQzjRewD0uhFX9GDHLjxcOpA9+xhGL36h4f9dz3jQ8a9qCRHPpRysGXekeQwzL7QA/lCn8ilB2rR73V1GJ71zJwdF/RHrjGA+8IPtXU6YtTnObDWe4T+ariij5J5KWmn7OzqJwaSJ/2dZAz9Hud+4lRWmMrGGPVRpwRmpqt/lJO+TuJaIRdOfXbxrNKuknn8OcQzjms8OpBHj2rtNsVDr/yVbTfOc2C9e7Imc1HS7v3P/F3cip0Yr6Fr1YmHhN19XFMqXvUqVv0jnbGUih3VpY8ScdQpNZfrFUZtqnusrldxiHEs1n5qbtU1VnXFRL+dgT/fVrfne0gGvMT9Awzb7OXcNYc4fhiqPNXQpzGeF0MoPi7VgY+I9+445OYg6z6utT7yjXL6UIoeuv6Yn1LzIg5cQOJADvJGvNq87k7PyAcOEJPjdgZmL1H361r1qhPcD7wn6Mda7x3aVWpe1YmpbPDBrj7qLpnHJXGVvfMptsN0dsTCx5O5uK4kMZTAjI6Zv4rV5xPPmV9DjfFhGNd29mx6T93a7ay7a2ccZBdLzMy/iztaE33snuzN5WxPlZ82Ss1Z2dQPHZgVHOOIp6RdJfNRqg+6xzrO11W823Q9iyd2FQe8Y2dr1vBYj1Nc9NsYGL9hb8t9t2gMSbgp9OWtL3PY4e8GSnwE9MCLnbkw3Gks7P4hQCzq+SDInKjrNejTYRt6laMaAj2f9kw+WANS8dD1w6UDrcZUug80GovelRtw5XX1Gihns57RC/AaX/UX2xoDs5foyD/yoTruA2D0XsZ9oGvv0nP6GvjKpnngV0yna8woL+MpPW4Ue8SndTqdPaifNpUzP7D6bGKtz6M/y47Hc67vAtQbXV/Ea0+qw4ejsv3Xddg3y7uSn5jVXMSP9tPl6mLOsrM3r4/8WoM6JeN8TbvKFYziZzrzUTre7bO1xjtWfdRXMMCu4iqsx/qavVDCP8MQG3mMgUsOw9gqbw5KfVHPhmF8BBgHqR8JvODhx8ufGKUWdWin1IFN4+DXvpiHGK1LHyX2gJPHqGdg0Df7gdSeUEf7rnpiHZXsE7V5eF/kGjWB56H1YPM1bKOevQ7zRh5jANdndIz8Ix9y8g8b4Hjqvet1Z/mIr3DM3/kYC0ms2mif2Vbyz3Kof5ZP/aozR2WjD3LmBwbvAeB46nMNvz7Lng/Ptj7Do+vLvjSH6pWfNsgKu+qfxa7kX62luJW8K70x5z2wo5zwdf6Zjz2vSNaYyRU+Rxjm154qm/pH+Rx3Kxa9+FnViO1xDIy/kI/r42UqcRh+hYbwsUI/tx74COpwfGu+e8e/0jW4914flX/2Iaj8+rJ+VJ+os1uX+FmPxEHyoI1rlY5Tn+qjHMRprpltFYs8rF3FsM4ZUv/QneXznrreKntlYz3m5drlKBbYWbzmI3aW02N0Tf3MXMxJudLfSv2VPKxJeUsMY10yNyX9XKsc+YBTv+qagzr8HYa+Hcm8lJ57tmZc5OMY+Per8LiaL1tJf+HyX01etulJY9gHH+IrDcSTbcW9yYC/fDfDA/9gBvQX5Q+mIVsPA2HgjRnIMPzGFzdbCwNkIMMwmYgMA2EgDISBMPAnAxmG/+QjqzDwlgxkGH7Ly5pNhYEwEAbCwAkMZBg+gcSkCAOvzkCG4Ve/QukvDISBMBAGnsVAhuFnMZ+6YeCBDGQYfiDZKRUGwkAYCAOXYiDD8KUuV5oNA8cYyDB8jLdEhYEwEAbCwPszkGH4/a9xdhgG2v/boFATBsJAGAgDYeDTGWiHYfySlDMc5B7IPZB7IPdA7oHcA7kHcg9c9R5YGfQzDGfozx89uQdyD+QeyD2QeyD3QO6Bt7wHbhqGV4KDCQNhIAyEgTAQBsJAGAgDV2ag/WX4yptK72EgDISBMBAGwkAYCANhYIWBDMMrLAUTBsJAGAgDYSAMhIEw8JYMZBh+y8uaTYWBMBAGwkAYCANhIAysMJBheIWlYMJAGAgDYSAMhIEwEAbekoEMw295WbOpMBAGwkAYCANhIAyEgRUGMgyvsBRMGAgDYSAMhIEwEAbCwFsykGH4LS9rNhUGwkAYCANhIAyEgTCwwkCG4RWWggkDYSAMhIEwEAbCQBh4SwYyDL/lZc2mwkAYCANhIAyEgTAQBlYYyDC8wlIwYSAMhIEwEAbCQBgIA2/JQIbht7ys2VQYCANhIAyEgTAQBsLACgMZhldYCiYMhIEwEAbCQBgIA2HgLRnIMPyWlzWbCgNhIAyEgTAQBsJAGFhhIMPwCkvBhIEwEAbCQBgIA2EgDLwlAxmG3/KyZlNhIAyEgTAQBsJAGAgDKwxkGF5hKZgwEAbCQBgIA2EgDISBt2Qgw/BbXtZsKgyEgTAQBsJAGAgDYWCFgQzDKywFEwbCQBgIA2EgDISBMPCWDGQYfsvLmk2FgTAQBsJAGAgDYSAMrDCQYXiFpWDCQBgIA2EgDISBMBAG3pKBDMNveVmzqTAQBsJAGAgDYSAMhIEVBjIMr7AUTBgIA2EgDISBMBAGwsBbMpBh+C0vazYVBsJAGAgDYSAMhIEwsMJAhuEVloIJA2EgDISBMBAGwkAYeEsGMgy/5WXNpsJAGAgDYSAMhIEwEAZWGMgwvMJSMGEgDISB/2vv3I7kKLYoKhdkAy7gAyZgAy7gAR/84wEWYAEOyAE8wIe5sXRjcfecyayumocuPbMzoiIrM89zV0dodUmhrgJVoApUgSrwLhUoDL/Lx9qmqkAVqAJVoApUgSpQBc4oUBg+o1JtqkAVqAJVoApUgSpQBd6lAoXhd/lY21QVqAJVoApUgSpQBarAGQUKw2dUeqbNX3/99fD9998/fPny5ZkRXuZG/qPx008/Pfzxxx9HJv+cYYf933///c+eNz/++OPDn3/+6fLDz2iBVuh/6xnsxPrhhx9OP5tdjO5XgSpQBapAFagCtxUoDN/W6InFGYgEGgFhrl9++eWfC3DE/+oQsFYwuotF3h3A4gNwnYU1Y81cgP6nT59uAv9vv/32BO6oLbXJ+59//vnh999/n+ke0C/tju6xnTGo45ZPgj33xLmiOz5ogg/6oPPRF6LVM8J/1v5EjG5UgSpQBapAFagCL1agMPwMCW+9tROEJ8yw/913332FnCtwZYkAInB9ZWCfcJe+9JHjqKYVsOFLTcDlmeEXA20zP2+eieUgZp67z97sh/WqBmznm297FIgzrvc5UzO9XxnCsD7k+vz5s8snM/Z8LhKYz3zBeBKoG1WgClSBKlAFqsBlBQrDDw9fgUk4chY8E1BUdwVkngFbAFSCnWfsreJ5fmvmLe4KEPEjrqCXcXzzC3ABhvbHDIDlGmCbAO/bW/Jqi5+5uKcvz4y76pPYvGV1ZC/Uh6/DeK6dV9pP3yNbz2b8rCVtroIwvmgDzDpYE4c6d4Pz1Cb9dz7drwJVoApUgSpQBV6uwP/+xH55rLuNINhlA/x1+gqQsBHIph+wI0RPQGSNnxDGDEjmm0vi5fmVe0AWCCcG0Dlrcy/3d/2lDvbqHj0Kw8SkxjkAucwzz10TW0AHBlkDhNzbu7bOsx723wKGqYs6VgPQt77djAZ5Rl/sodlq8KXFzwL9HL1JPqPtKkf3qkAVqAJVoApUgacKvAsYBpC4XjIAkBzAS8JM3gODgNL8K3Tfwk5gA15WgMjeHMaY++Tfwdm0JYZgzFmCVtqe0Wz2gk7s0VO+yTSuvbo+mo2DzwRa9Z7++CQsqwv7+jjznOZzNZ42rvF3ALuCKXvcz+cy1/o6r56tZ87EtY6c6Y/acy/vib3ry9idq0AVqAJVoApUgXMKPKWxc37/KitAJmHmOcUBJv7VvkDHzDUHuY5ghPMENqBxBTdngMncwpDrWzP5hVV8V+OMZrNX+maPN+cA4dSH8+wr36IC6AmZmR8/6yTmrt9ZD32lb/a5svV8xreW2RNr3tLyZv/MEJLxmdpM/905tfH8VgM9U9+VTfeqQBWoAlWgClSB8wrcDQwDGUCAF3/dPPc8Y98z4YwzYWsnDwACbBBbkCSOkKzfEWRhAzjhx2AGjKhjjrOAhZ9wK8Q5795+UjN1Aly7PAJg1jUBbfZKH+ypiToZQ71dMxuTZ+A9+8Cx/7sD/RGXWtGLuKvnhU3GIA45d7apOzWrG3G4XPtlhdwJovPtv/3olzM146/2mRu/s4O6dv+cgpjU1FEFqkAVqAJVoAq8jgJ3A8MTZoEXh2DjmlkYxu8slABZxso3mMCH8EdsbM7ExEffhEbyAFyCU9a9uyeOgK2NPc79PAeqqEPoTHgTAHOPmhLE6JVatRFazUHchG10QfPVmPvEnmCrn/lcO+dzd4+c2M+xek7mm/GxnYNeuVYjNV/lwQ9trg7qQyfio2vmIRa9rmq9mqf2VaAKVIEqUAWqwH8VWFPLv1AdAGEFPJQKHExAACKOfHYtAsEAYQ7gMCFsBT9pzz0gBBABN/gTk/q5Zz9he/rONTEyv+eA0a23hOoyoYr8+AqHxpzz7HXCmDobZ55nvBUMc04O4ZR74N11+nM/Y7BHztVnY9aesWZ8bHPwjBLy82zer/L4/KftrTV+fnFCB7+w6Mf5rJVe0EU/bTtXgSpQBapAFagCtxW4Gxj2D3z+0Ad+cgAHExCEtHzLmT67eyAIAAE6HMZyvYIfz6gNX2sUXoBFgHgHbvqvZnpYwR77s+/0J/fKDxtAOHtMv7yfvVL/zElfwvbq3HgTZI2ToM8eWlH3qnZieObMM8PPtTNxfQ7W4Aw45hcSa+EcCM4z9uxP/5zxnXkE2bS7dU/fs2bioK9gTm/0m4M9dJn7adP7KlAFqkAVqAJVYK3A3cCw5fMHPn/wJ1gBIwkz2AqwV2AY8CAOvgCIbzuJl3C0gh/r04cYAJfASR3EZObKePru5tU/kcAWCBKS0pfY7KMRPc1BTQlOKxt9Zq8r2M1eVufG8pmhEXa+ycxn571Aqy+zYJh73BML+zlm7XkOdPqs2DcvOXKfM/qj9t1naZdngi2xZuysiR6sI/d5Xu7zXFe9pn3vq0AVqAJVoApUgfMK3B0M09oEXcBOWLD1aeP+bgZSiIEfg/sddHAGgK0G/gALl7G4p0biGRPA3cXIuACYPrnPPTC5O+Nc+Ew/YG9qxR6xVqA2e6Xm6Z/xj86phxxoAWD6RQEt1AaAZLjO2GghQOc+OVc6zNr1WWmw6wlbvsRYqzFyNg+21IgtfVLTjJtfHDKGefzM5Bn3+hFv1eu077oKVIEqUAWqQBU4p8BdwPAELIADsGKfAVxN8AMq2MP2zABYARJHvo1zz1n4ce0MAAkt7FED8CZIATHUyhB+EpqN44z/hCnPmI+A2v7TnpzEW0Gv9aQG+M5e57PI+Nyj965mngdn1IYOzIx8doIes/fmwGf1PKlp2uIzazcOms84q5rRYvV21zjk5dliw3MmZmrL/QTpVZ3Y8Syn9ubJeVUPMdGQvjqqQBWoAlWgClSBawrcBQzTksDLH/pcE2bcZ2YIg9NuJQ8AO0GE9eotJP47yDI2cAOgTNClh4QhcgBLXAnRxCEG9swO4dFzes097ZjpWy1YE5881ERceqMW9rFl5gybHPRq3dhzP8ExayAG1xw+D/tMbdNfP3KlVuwDjKsBkE5b7FbPCT0zt/GwTa3RZAeo9Ie2+GCXfsZzpl9sqZE+pzb4Emd+/vCfcbFZPXNis7/SwDo6V4EqUAWqQBWoAmsF7gaG1+W/fBdAWYHIjAxwCIKAx8qHPSFOwAOWgC+AZwUyAA9vGHMQB2iaMERMa+ANITF3A9+EI3yFN2ubvvjMmKyzPu6nDcAHOLJPj2mfOdxHy5V+1kyPxMv6BfaM572as6Y31tYy8xB76oofXwKw5QybzG0eZ2zsxb2jmdqJz5XamWvWaCx6QSt8uKa/dp2rQBWoAlWgClSB5yvw4WH4qnRHoLSDTGAHePWt6FFObG7ZAUY7qDuK/ZwzYCzhkR53fVLXEUSSn1i3+kMvYNg8+FDHbqxAmb35FpZ4R+AJ4M5+dzmv7pObeuiLflifzYU92q6+IF2to/ZVoApUgSpQBarAYwUKw4/16KoKVIEqUAWqQBWoAlXgAylQGP5AD7utVoEqUAWqQBWoAlWgCjxWoDD8WI+uqkAVqAJVoApUgSpQBT6QAoXhD/Sw22oVqAJVoApUgSpQBarAYwUKw4/16KoKVIEqUAWqQBWoAlXgAylQGP5AD7utVoEqUAWqQBWoAlWgCjxWoDD8WI+uqkAVqAJVoApUgSpQBT6QAoXhD/Sw22oVqAJVoApUgSpQBarAYwUKw4/16KoKVIEqUAWqQBWoAlXgAynwIWCYXxbjF+D4VbKrg59S3vnxa2K7s6M8/prYlZ/0PYr3lme3auSX8Lhu2c0a+fU1/PyVuXn+1mvy8hye8/zo1Z+L5tfhuBx8zs7+spw+natAFagCVaAKVIH/nwIfAoaRF/D69OnTVwA6Kzc/LYwPQJzAgz8QtTu7FR8Iw/fWzxLfinP1nHxA3BVYQ4PPnz9vfwrYXq5ALVoSk2sF0VPrq33esufZkfvKFyT6wwc9qJnnh5bsc89PJaMv98R96x5u9djzKlAFqkAVqAJV4JwC7xKGgZUJZ6x9mzelAVwmvAg/gg4QBPAAOoA1c55xTnyujIUPMM25l77EcU9Yf86bytnP0Zp6qJs6zw5s8VmBqzCcsbL/3PcePazB/p3VgTpnHP2eqxHxiC/UWg/7xOYi9syrXWpH/fSOD/G+fPny9fPB/nPrE6aJ21EFqkAVqAJVoAp8GwXeHQwDMoKKgHVrBmYAPoDGkeDFm1RshBzW5GD2LSE5VkNYTJA8u7eK99K9fJO5irV6W40P2tADIJ96Cvbu0ZtwuIuPdug7Bznw5XzWYd2c7WB1xss19VErF8+RXublc9nVT33kTzs/N9TEPb6zPmo/O+z/is/Z2LWrAlWgClSBKlAFnirw7mAY0AFYdnCaEgAt2AEg+U8HjCH84oMNF5DCzBtGh0C4AhjB6VvBMD3Ri3B6ZbYPevv111+fACkAy5V92p9aHM3CLnkmMLL2DfTq2fkFZAXRRzk9A66plbe7xLdX1jwbamP49jdrmJr69poY2DNbO/epOWs+L8a3nt1sbOJ2VIEqUAWqQBWoAm+vwF3DMBADbAiagiowDDQllMx7ocM3e0oN+ABNxmQfkBKW8UtQYp+9HewIi/rhS83UuNrLvNhik/BpnUczPXDNQTzzzrO5Jqc6Esv1fGNrf9N/romB1tgzo4FfNjw7qs086H005mdiZWsvQOpKJ59BPlPsvPCjVvrw2aitELuC9+x5VRd7fhEjdkcVqAJVoApUgSrw9grcJQwDK8IRUCK8IBcAwyW4rCQEMAWv9F3ZEgv44RJ80s46hMRpA5RPoNUncwNBgFT6C1jWmmdZw9l74zGfGepED9SGBnPYy9zPNc8CuDMvfQiUntlj+uU951ypWZ6zby3aEZuc89LOmuY5a7+wCOzmwlf/nLVnj0EM6mB22MMRFPN5006/zlWgClSBKlAFqsDbKXBXMDyBB/DYwdFOMgAPCDrjN0HtCJqIKxxNgJq1aHemBmIJWkASUEpdzxkJt9kLsAucznqEVvTiHP857GXuJ7jzRSHX2LJHPmLb14zhGl8BcfZODGvAhvvsY9oLm+T1DJ9cm3fO+dkxl7l5Rjwb1gxhON9k04fPAH98slbz2evqTJvOVaAKVIEqUAWqwOsocDcwLHQIIVdBATgBPrhWA0iaQ3ARQIWntLOuVT0A3+qfa1ADfRA/oZRYQOeqloRibBKysp6je8EzwTRBM/eNw55gl7V6by+umdVk96UAHemRPrh8q27OOaOtgJhn5jn7mTCn4Etc8vN82eNaPUfq9e0499RLTnr1jNis2WdY2yoemvrZsvbUnj2ulW/23/sqUAWqQBWoAlXg5QrcDQwLCADHagAlACLnq0s4AXjmuUAHoDgAOXPiy8CPe3I5jLsCF+yJwZxj5YM/ttR3NPRlvjKomfjzy8CZvPjol9AmFFJzanJUF3bYq+38QoBW7AGpamqN+OQwxtQ3bbyfIAwA44+O9ERdagv4JqDjm31zji8xcqgHtn6mjnTJvuyVePaVe5mn91WgClSBKlAFqsDrKfCYLl4v7qtHElQEmBUoAB47+NiB6apQQNg3huQTtojNPpdwZF2renY5Vz7429uuJgGL/FffDAv39mIO96lpNTyfftgKtWdrIZY90OtuTH3UZvpop26rZ0AOalcznht1Uwf1MPBzzX3GxYbnTgwv8nEBw1z4AsLYsS8Uk2c1qKFvhlfKdK8KVIEqUAWqwLdXYE8k376WmxknqAAtOwCawQAZQIX5aJgDYFn5CDHMDMFpVUe+fRSkmAVCYrhvXOLlmACJnSCedrfuATOAcH5ZsMfVW05y4YNuvB3NAQCzjw2D/lcacEYP5CeHwIjvbkxNiYv9yocz7Tnn3jrQiZwJtNTBmkEt6s7b3uyRs1yruXox20vqSnwuaplfEohhPs4F8KkDZ1z2Mc+7rgJVoApUgSpQBV5PgT2RvF6OV480ASihZZcsIWZnM/dXPuQGVIRHQWwFLpytgGfnwz5Q5jA/+YAogcxzZsCOc3x3QxshMO38K39yrQaxuXKg98zJHlBIPCDRQc6pzSqm9sxTH/rWJ2Onz9FnAh/ANPWjLuoll/Vhh875DDIH5/hwce/zSe38kkC92OSwh9VnYmVnXXnW+ypQBapAFagCVeB1FXhMOa8b+82jAQuAxRloWIHLrQLP+ExwuxWT87M+5N9BsHmMBWitBgAIvBFnNXyLudIwIVRfoRe/CXtCMvm43w2hcHduT1mTPrm38ud895mgXiCYc/QwlmBL3YLq7M1c9AXwYmdN/vtifNDFs/nlw9jGWs3UZNzVefeqQBWoAlWgClSB11VgTVCvm+NfEe0M2M5CfcuH726swG1n6/5zfPSdM8AFPBFzDuEsQRiYE/SYBa98a2ocY2PDAPoARmm0fgMAAADfSURBVNa8GecNKhf6cIa9OmO3G+bEdnUJk8IqcdQM+6uDPnmW+FJn9s8etXJhc2bgQw/Y0796AMJcaMnsvvnOxPYzh39HFagCVaAKVIEq8PYKvGsYBvwAQcBCwDoLPEjvW7oJYMAOcQE04x69CZ2PUbBL2Js2L11TD3371tJ41A7AUbe1r0AaeyCO3u0fX3zoHfBlPQc+gKX/jGSes+Z8l5NznhFXQqSQeOS3yrXaQxN6AFbRiF7ODOzsP3unV3pSJ2JRu8+Zs/kcdvkSrnc23a8CVaAKVIEqUAVeT4H/AMtqBQqycQ18AAAAAElFTkSuQmCC" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.字符串处理函数和内置字符串处理方法\n", + "![image-2.png](attachment:image-2.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#\n", + "s=\"Python String\"\n", + "s.upper()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.lower()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.find('i')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.replace('ing','gni')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t = s.split()\n", + "t" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s1 = \"-\".join(t)\n", + "s1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t = s1.split(\"-\")\n", + "t" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.find('t')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.find('t',3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.find('t',9)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.index('t')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s.index('t',9)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.string模块\n", + "import string \n", + "string.digits 可返回'0123456789' \n", + "string.ascii_lowercase 可返回'abcdefghijklmnopqrstuvwxyz' \n", + "string.ascii_uppercase 可返回'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \n", + "string.punctuation 可返回'!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~' " + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "import string" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0123456789'" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "string.digits " + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` { | } ~ " + ] + } + ], + "source": [ + "for ch in string.punctuation:\n", + " print(ch,end=\" \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 试一试\n", + "\n", + "利用s1、s2和字符串操作(使用切片、连接、复制、字符串函数),写出能产生下列结果的表达式。 \n", + "s1='programming' \n", + "s2='language' \n", + "(1)\"program\" \n", + "(2)\"prolan\" \t\n", + "(3)\"amamam\" \n", + "(4)\"progr@mming l@ngu@ge\" \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s1='programming'\n", + "s2='language'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#(1)\"program\" \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#(2)\"prolan\" \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#(3)\"amamam\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#(4)\"progr@mming l@ngu@ge\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#(5)'Programming Language'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 试一试:\n", + "寻找一个源字符串s中的子串sub的所有位置。 \n", + "试使用不同的方法实现 \n", + "运行示例: \n", + " ` \n", + "s=do not,for one repuls,forgo the purpose that you resolved to effort \n", + "sub=o \n", + "1\t4\t8\t11\t23\t26\t36\t46\t52\t59\t64\tover ` " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "方法一 使用find函数,while语句实现\n", + "循环的构建\n", + "(1)循环通项\n", + "index=s.find(sub,start)\n", + "print(index)\n", + "start=index+1\n", + "(2)循环控制:index为-1 循环结束\n", + "index的初值,第一次执行find\n", + "index的终值-1\n", + "index的变化,再次执行find\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "方法二 while True...if ...break 算法模式实现\n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "方法三 使用index函数\n", + "\n", + "(1)循环通项\n", + "index=s.find(sub,start)\n", + "print(index)\n", + "start=index+1\n", + "(2)循环控制 :当异常ValueError发生,break跳出循环" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6.字符串典型算法设计\n", + "(1)编码解析\n", + "(2)逆序数\n", + "(3)分类统计\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (1)编码解析 \n", + "*使用切片获取子串* \n", + "*使用format函数、连接运算(+)构造字符串* \n", + "【例】身份证解析: \n", + "输入一个昵称和身份证号的信息, \n", + "从身份证中提取出生日期和性别的信息,输出昵称和出生日期, \n", + "且在6月份出生的人员后标注“准备礼物”, \n", + "如果该用户是女性,则再加上“+鲜花”进行标注。" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "请输入昵称:红太狼\n", + "请输入身份证号码:309012199606230083\n", + "红太狼\t1996年06月23日\n", + "准备礼物+鲜花\n" + ] + } + ], + "source": [ + "nickname=input(\"请输入昵称:\")\n", + "ids=input(\"请输入身份证号码:\")\n", + "\n", + "birthDay=\"{}年{}月{}日\".format(ids[6:10],ids[10:12],ids[12:14]) #构造生日\n", + "msg=\"{}\\t{}\\n\".format(nickname,birthDay) #构造输出字符串\n", + "if ids[-8:-6]=='06': #生日为6月\n", + " msg+=\"准备礼物\"\n", + " if int(ids[-2])%2==0: #是女性\n", + " msg+=\"+鲜花\"\n", + "print(msg)\n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "str的format函数可以用于构造一个格式字符串,格式字符串中{}对应的内容由参数列表中的参数值按格式规定显示。\n", + "ids[10:12]和ids[-8:-6]都是月份对应的子串,前者使用正序索引,后者使用逆序索引。\n", + "msg是输出字符串变量,注意msg的逐步构造的方法:先通过赋值语句获得第一行昵称和出生年月,然后通过连接操作,追加第2行的输出文本内容。使用一个字符串变量可以操作多行文本。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (2)求逆序数 \n", + "整数类型和字符串可以相互转换,使用字符串操作方便实现逆序功能。 " + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "【例】输入若干个整数quit结束,求所有整数的逆序数之和。\n", + "运行示例\n", + "input x:45\n", + "input x:-12\n", + "input x:30\n", + "input x:quit\n", + "54+(-21)+3 = 36\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s=0 #累加器\n", + "outstr=\"\" #输出字符串\n", + "while True:\n", + " x=input(\"input x:\") #循环控制结构\n", + " if x==\"quit\":\n", + " break\n", + " #字符串切片操作求逆序数\n", + " if x[0]==\"-\":\n", + " x=int( x[:0:-1])*-1\n", + " else:\n", + " x=int(x[::-1])\n", + " #使用格式字符串和连接操作构造输出字符串\n", + " if x<0:\n", + " outstr+=\"({})+\".format(x)\n", + " else:\n", + " outstr+=str(x)+\"+\"\n", + " #累加逆序数\n", + " s=s+x\n", + "print(outstr[:-1],\"=\",s) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "说明:\n", + "1.input函数输入得到字符串,实现逆序,构造输出字符串的括号和负号,使用字符串方便。\n", + "2.求累加和是整数的运算,使用int转换数据类型。\n", + "3.理解切片:x[:0:-1]和x[::-1]区别,是否保留字符\"-\"。负数字符串要先除去字符\"-\",才能逆序操作。\n", + "4.outstr变量用于构造最后的输出字符串,每一次循环连接一个数和符号\"+\"。最后一个数后的\"+\"要除去,使用切片操作:outstr[:-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (3) 字符统计\n", + "遍历字符串的算法模式:\n", + "```python \n", + "for ch in s:\n", + " ...ch...\n", + "```\n", + "判断字符分类的方法可以不同的方法\n", + "* ASCII的值判断\n", + "* str函数判断\n", + "* string模块的常量字符集判断" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "【例】编写程序,用于统计各类字符个数。输入一个字符串,统计其中大写字母,小写字母,数字的个数,其他各类字符的总数。 \n", + "运行示例:\n", + "please input char:HELLO python 123! \n", + "大写字母5个,小写字母6个,数字3个,其他字符3个 \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ASCII的值判断\n", + "instr=input('please input char:')\n", + "upper,lower,digit,other=0,0,0,0\n", + "for c in instr:\n", + " if c>='A' and c<='Z':\n", + " upper=upper+1\n", + " elif c>='a' and c<='z':\n", + " lower=lower+1\n", + " elif c>='0' and c<='9':\n", + " digit=digit+1\n", + " else:\n", + " other=other+1\n", + "print('大写字母{}个,小写字母{}个,数字{}个,其他字符{}个'.format(upper,lower,digit,other))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "please input char:please input char:HELLO python 123! \n", + " 大 写 字 母 5 个 , 小 写 字 母 21 个 , 数 字 3 个 , 其 他 字 符 8 个 \n" + ] + } + ], + "source": [ + "# str函数判断\n", + "instr=input('please input char:') \n", + "upper,lower,digit,other=0,0,0,0 \n", + "for c in instr: \n", + " if c.isupper():\n", + " upper=upper+1 \n", + " elif c.islower(): \n", + " lower=lower+1 \n", + " elif c.isdigit(): \n", + " digit=digit+1 \n", + " else: \n", + " other=other+1 \n", + "\n", + "\n", + "msg = f' 大 写 字 母 {upper} 个 , 小 写 字 母 {lower} 个 , 数 字 {digit} 个 , 其 他 字 符 {other} 个 '\n", + "print(msg)\n" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "\n", + "字符串.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。\n", + "字符串.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。\n", + "字符串.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。\n", + "字符串.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。\n", + "字符串.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。\n", + "字符串.istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。\n", + "字符串.isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。 \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#string模块的常量字符集判断\n", + "import string\n", + "instr=input('please input char:')\n", + "upper,lower,digit,other=0,0,0,0\n", + "for c in instr:\n", + " if c in string.ascii_uppercase :\n", + " upper=upper+1\n", + " elif c in string.ascii_lowercase:\n", + " lower=lower+1\n", + " elif c in string.digits:\n", + " digit=digit+1\n", + " else:\n", + " other=other+1\n", + "print('大写字母{}个,小写字母{}个,数字{}个,其他字符{}个'.format(upper,lower,digit,other))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 小试身手" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "(1)编写程序 实现二进制IP地址转为十进制IP地址。 \n", + "一个IP地址是由四个字节(每个字节8个位)的二进制码组成。输入一个合法的二进制表示的IP地址,请将其转换为十进制格式表示的IP地址输出(不考虑异常输入数据)。\n", + "运行示例: \n", + "input:11001100100101000001010101110010 \n", + "output:204.148.21.114 \n", + "\n", + "提示:int(str,base=2)可以将一个二进制字符串转化为十进制整数 \n", + ">>> int(\"110111101\",2) \n", + "445 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(2)编写程序 随机产生50个-1000~1000之间的整数,输出其中逆序数大于原数据的整数并统计个数。每个整数之间空格间隔。\n", + "\n", + "输出示例:\n", + "687 -564 -662 -873 519 367 -625 375 436 -981 -742 -231 -671 -382 -32 -30 -958 -920 -520 -97 -350 69 29 \n", + "共23个数" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(3)编写程序 实现电文加密\n", + "有一行电文,已按如下规律译成密码:\n", + "A-->Z a-->z\n", + "B-->Y b-->y\n", + "C-->X c-->x\n", + " ...... ......\n", + "即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。\n", + "\n", + "运行示例\n", + "input:ABC123abc \n", + "output:ZYX123zyx\n", + "运行示例\n", + "input:Life is like an ice cream, enjoy it before it melts. \n", + "output:Oruv rh orpv zm rxv xivzn, vmqlb rg yvuliv rg nvogh. \n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}