diff --git a/.gitignore b/.gitignore index 837e02c..cf0540a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,14 @@ venv *.pyc __pycache__ +### VisualStudioCode ### +.vscode/* +.vscode/** +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history diff --git a/Day01-15/Day01/初识Python.md b/Day01-15/01.初识Python.md similarity index 59% rename from Day01-15/Day01/初识Python.md rename to Day01-15/01.初识Python.md index 0dd4ff2..4e09bf4 100644 --- a/Day01-15/Day01/初识Python.md +++ b/Day01-15/01.初识Python.md @@ -1,16 +1,16 @@ -## Day01 - 初识Python +## 初识Python ### Python简介 #### Python的历史 1. 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。 -2. 1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面又出现了Java和C#实现的版本Jython和IronPython,以及PyPy、Brython、Pyston等其他实现),可以调用C语言的库函数。在最早的版本中,Python已经提供了对“类”,“函数”,“异常处理”等构造块的支持,同时提供了“列表”和“字典”等核心数据类型,同时支持以模块为基础的拓展系统。 +2. 1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面又出现了Java和C#实现的版本Jython和IronPython,以及PyPy、Brython、Pyston等其他实现),可以调用C语言的库函数。在最早的版本中,Python已经提供了对“类”,“函数”,“异常处理”等构造块的支持,同时提供了“列表”和“字典”等核心数据类型,同时支持以模块为基础来构造应用程序。 3. 1994年1月:Python 1.0正式发布。 4. 2000年10月16日:Python 2.0发布,增加了实现完整的[垃圾回收](https://zh.wikipedia.org/wiki/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8)),提供了对[Unicode](https://zh.wikipedia.org/wiki/Unicode)的支持。与此同时,Python的整个开发过程更加透明,社区对开发进度的影响逐渐扩大,生态圈开始慢慢形成。 5. 2008年12月3日:Python 3.0发布,它并不完全兼容之前的Python代码,不过因为目前还有不少公司在项目和运维中使用Python 2.x版本,所以Python 3.x的很多新特性后来也被移植到Python 2.6/2.7版本中。 -目前我们使用的Python 3.7.x的版本是在2018年发布的,Python的版本号分为三段,形如A.B.C。其中A表示大版本号,一般当整体重写,或出现不向后兼容的改变时,增加A;B表示功能更新,出现新功能时增加B;C表示小的改动(如修复了某个Bug),只要有修改就增加C。如果对Python的历史感兴趣,可以查看一篇名为[《Python简史》](http://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html)的博文。 +目前我们使用的Python 3.7.x的版本是在2018年发布的,Python的版本号分为三段,形如A.B.C。其中A表示大版本号,一般当整体重写,或出现不向后兼容的改变时,增加A;B表示功能更新,出现新功能时增加B;C表示小的改动(例如:修复了某个Bug),只要有修改就增加C。如果对Python的历史感兴趣,可以阅读名为[《Python简史》](http://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html)的博文。 #### Python的优缺点 @@ -27,18 +27,20 @@ Python的优点很多,简单的可以总结为以下几点。 Python的缺点主要集中在以下几点。 1. 执行效率稍低,因此计算密集型任务可以由C/C++编写。 -2. 代码无法加密,但是现在的公司很多都不是卖软件而是卖服务,这个问题会被淡化。 +2. 代码无法加密,但是现在很多公司都不销售卖软件而是销售服务,这个问题会被淡化。 3. 在开发时可以选择的框架太多(如Web框架就有100多个),有选择的地方就有错误。 #### Python的应用领域 -目前Python在云基础设施、DevOps、网络爬虫开发、数据分析挖掘、机器学习等领域都有着广泛的应用,因此也产生了Web后端开发、数据接口开发、自动化运维、自动化测试、科学计算和可视化、数据分析、量化交易、机器人开发、图像识别和处理等一系列的职位。 +目前Python在Web应用开发、云基础设施、DevOps、网络爬虫开发、数据分析挖掘、机器学习等领域都有着广泛的应用,因此也产生了Web后端开发、数据接口开发、自动化运维、自动化测试、科学计算和可视化、数据分析、量化交易、机器人开发、图像识别和处理等一系列的职位。 ### 搭建编程环境 #### Windows环境 -可以在[Python官方网站](https://www.python.org)下载到Python的Windows安装程序(exe文件),需要注意的是如果在Windows 7环境下安装需要先安装Service Pack 1补丁包(可以通过一些工具软件自动安装系统补丁的功能来安装),安装过程建议勾选“Add Python 3.6 to PATH”(将Python 3.6添加到PATH环境变量)并选择自定义安装,在设置“Optional Features”界面最好将“pip”、“tcl/tk”、“Python test suite”等项全部勾选上。强烈建议使用自定义的安装路径并保证路径中没有中文。安装完成会看到“Setup was successful”的提示,但是在启动Python环境时可能会因为缺失一些动态链接库文件而导致Python解释器无法运行,常见的问题主要是api-ms-win-crt\*.dll缺失以及更新DirectX之后导致某些动态链接库文件缺失,前者可以参照[《api-ms-win-crt\*.dll缺失原因分析和解决方法》]()一文讲解的方法进行处理或者直接在[微软官网](https://www.microsoft.com/zh-cn/download/details.aspx?id=48145)下载Visual C++ Redistributable for Visual Studio 2015文件进行修复,后者可以下载一个DirectX修复工具进行修复。 +可以在[Python官方网站](https://www.python.org)下载到Python的Windows安装程序(exe文件),需要注意的是如果在Windows 7环境下安装Python 3.x,需要先安装Service Pack 1补丁包(可以通过一些工具软件自动安装系统补丁的功能来安装),安装过程建议勾选“Add Python 3.x to PATH”(将Python 3.x添加到PATH环境变量)并选择自定义安装,在设置“Optional Features”界面最好将“pip”、“tcl/tk”、“Python test suite”等项全部勾选上。强烈建议选择自定义的安装路径并保证路径中没有中文。安装完成会看到“Setup was successful”的提示。如果稍后运行Python程序时,出现因为缺失一些动态链接库文件而导致Python解释器无法工作的问题,可以按照下面的方法加以解决。 + +如果系统显示api-ms-win-crt\*.dll文件缺失,可以参照[《api-ms-win-crt\*.dll缺失原因分析和解决方法》]()一文讲解的方法进行处理或者直接在[微软官网](https://www.microsoft.com/zh-cn/download/details.aspx?id=48145)下载Visual C++ Redistributable for Visual Studio 2015文件进行修复;如果是因为更新Windows的DirectX之后导致某些动态链接库文件缺失问题,可以下载一个[DirectX修复工具]()进行修复。 #### Linux环境 @@ -81,24 +83,32 @@ export PATH=$PATH:/usr/local/python37/bin # ... 此处省略下面的代码 ... ``` +激活环境变量。 + ```Shell source .bash_profile ``` -#### MacOS环境 +#### macOS环境 -MacOS也是自带了Python 2.x版本的,可以通过[Python的官方网站](https://www.python.org)提供的安装文件(pkg文件)安装3.x的版本。默认安装完成后,可以通过在终端执行python命令来启动2.x版本的Python解释器,可以通过执行python3命令来启动3.x版本的Python解释器。 +macOS也自带了Python 2.x版本,可以通过[Python的官方网站](https://www.python.org)提供的安装文件(pkg文件)安装Python 3.x的版本。默认安装完成后,可以通过在终端执行python命令来启动2.x版本的Python解释器,可以通过执行python3命令来启动3.x版本的Python解释器。 ### 从终端运行Python程序 #### 确认Python的版本 -在终端或命令行提示符中键入下面的命令。 +可以Windows的命令行提示符中键入下面的命令。 ```Shell python --version ``` -当然也可以先输入python进入交互式环境,再执行以下的代码检查Python的版本。 +或者是在Linux或macOS系统的终端中键入下面的命令。 + +```Shell +python3 --version +``` + +当然也可以先输入python或python3进入交互式环境,再执行以下的代码检查Python的版本。 ```Python import sys @@ -109,7 +119,7 @@ print(sys.version) #### 编写Python源代码 -可以用文本编辑工具(推荐使用Sublime、Atom、TextMate、VSCode等高级文本编辑工具)编写Python源代码并将其命名为hello.py保存起来,代码内容如下所示。 +可以用文本编辑工具(推荐使用[Sublime]()、[Atom]()、[Visual Studio Code]()等高级文本编辑工具)编写Python源代码并用py作为后缀名保存该文件,代码内容如下所示。 ```Python print('hello, world!') @@ -123,6 +133,12 @@ print('hello, world!') python hello.py ``` +或 + +```Shell +python3 hello.py +``` + ### 代码中的注释 注释是编程语言的一个重要组成部分,用于在源代码中解释代码的作用从而增强程序的可读性和可维护性,当然也可以将源代码中不需要参与运行的代码段通过注释来去掉,这一点在调试程序的时候经常用到。注释在随源代码进入预处理器或编译时会被移除,不会在目标代码中保留也不会影响程序的执行结果。 @@ -156,56 +172,67 @@ IDLE是安装Python环境时自带的集成开发工具,如下图所示。但 #### IPython - 更好的交互式编程工具 -IPython是一种基于Python的交互式解释器。相较于原生的Python Shell,IPython提供了更为强大的编辑和交互功能。可以通过Python的包管理工具pip安装IPython和Jupyter,具体的操作如下所示。 +IPython是一种基于Python的交互式解释器。相较于原生的Python交互式环境,IPython提供了更为强大的编辑和交互功能。可以通过Python的包管理工具pip安装IPython和Jupyter,具体的操作如下所示。 ```Shell -pip install ipython jupyter +pip install ipython ``` -或者 +或 ```Shell -python -m pip install ipython jupyter +pip3 install ipython ``` 安装成功后,可以通过下面的ipython命令启动IPython,如下图所示。 ![](./res/python-ipython.png) -当然我们也可以通过Jupyter运行名为notebook的项目在浏览器窗口中进行交互式操作。 +当然,我们也可以通过安装Jupyter工具并运行名为notebook的程序在浏览器窗口中进行交互式代码编写操作。 + +```Shell +pip install jupyter +``` + +或 + +```Shell +pip3 intall jupyter +``` + +然后执行下面的命令: ```Shell jupyter notebook ``` + + ![](./res/python-jupyter-2.png) -#### anaconda - 一站式的数据科学神器 -Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 -因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。 -对于学习数据科学的人来说,anaconda是绝对的神器,安装简便,而且anaconda支持安装相关软件【例如前文提到的ipython,jupyter notebook,甚至有R等其他数据科学软件 】 -[一个相当有价值的介绍](https://www.jianshu.com/p/169403f7e40c) -现在唯一的问题在于清华镜像服务已经关闭,跨国下载会比较慢 - -#### Sublime - 文本编辑神器 +#### Sublime / Visual Studio Code - 高级文本编辑器 ![](./res/python-sublime.png) - 首先可以通过[官方网站](https://www.sublimetext.com/)下载安装程序安装Sublime 3或Sublime 2。 -- 安装包管理工具。通过快捷键Ctrl+`或者在View菜单中选择Show Console打开控制台,输入下面的代码。 +- 安装包管理工具。 + 1. 通过快捷键Ctrl+`或者在View菜单中选择Show Console打开控制台,输入下面的代码。 - Sublime 3 ```Python import urllib.request,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()) ``` - - Sublime 2 ```Python import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp)ifnotos.path.exists(ipp)elseNone;urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read());print('Please restart Sublime Text to finish installation') ``` + 2. 手动安装浏览器输入 https://sublime.wbond.net/Package%20Control.sublime-package 下载这个文件 + 下载好以后,打开sublime text,选择菜单Preferences->Browse Packages... 打开安装目录 + 此时会进入到一个叫做Packages的目录下,点击进入上一层目录Sublime Text3,在此目录下有一个文件夹叫做Installed Packages,把刚才下载的文件放到这里就可以了。然后重启sublime text3,观察Preferences菜单最下边是否有Package Settings 和Package Control两个选项,如果有,则代表安装成功了。 + - 安装插件。通过Preference菜单的Package Control或快捷键Ctrl+Shift+P打开命令面板,在面板中输入Install Package就可以找到安装插件的工具,然后再查找需要的插件。我们推荐大家安装以下几个插件: @@ -215,42 +242,29 @@ Anaconda指的是一个开源的Python发行版本,其包含了conda、Python - Python PEP8 Autoformat - PEP8规范自动格式化插件。 - ConvertToUTF8 - 将本地编码转换为UTF-8。 +> 说明:事实上Visual Studio Code可能是更好的选择,它不用花钱并提供了更为完整和强大的功能,有兴趣的读者可以自行研究。 + #### PyCharm - Python开发神器 -PyCharm的安装、配置和使用我们在后面会进行介绍。 +PyCharm的安装、配置和使用在[《玩转PyCharm》](../玩转PyCharm.md)进行了介绍,有兴趣的读者可以选择阅读。 ![](./res/python-pycharm.png) ### 练习 -1. 在Python交互环境中查看下面的代码结果,并将内容翻译成中文。 +1. 在Python交互环境中查看下面的代码结果,并试着将这些内容翻译成中文。 ```Python import this - - Beautiful is better than ugly. - Explicit is better than implicit. - Simple is better than complex. - Complex is better than complicated. - Flat is better than nested. - Sparse is better than dense. - Readability counts. - Special cases aren't special enough to break the rules. - Although practicality beats purity. - Errors should never pass silently. - Unless explicitly silenced. - In the face of ambiguity, refuse the temptation to guess. - There should be one-- and preferably only one --obvious way to do it. - Although that way may not be obvious at first unless you're Dutch. - Now is better than never. - Although never is often better than *right* now. - If the implementation is hard to explain, it's a bad idea. - If the implementation is easy to explain, it may be a good idea. - Namespaces are one honking great idea -- let's do more of those! ``` + > 说明:当前键入上面的命令后会在交互式环境中看到如下所示的输出,这段内容被称为“Python之禅”,里面讲述的道理不仅仅适用于Python,也适用于其他编程语言。 + > + 2. 学习使用turtle在屏幕上绘制图形。 + > 说明:turtle是Python内置的一个非常有趣的模块,特别适用于让小朋友体会什么是编程,它最早是Logo语言的一部分,Logo语言是Wally Feurzig和Seymour Papert在1966发明的编程语言. + ```Python import turtle diff --git a/Day01-15/Day02/语言元素.md b/Day01-15/02.语言元素.md similarity index 72% rename from Day01-15/Day02/语言元素.md rename to Day01-15/02.语言元素.md index 4a0937c..d5d7c0d 100644 --- a/Day01-15/Day02/语言元素.md +++ b/Day01-15/02.语言元素.md @@ -1,12 +1,14 @@ -## Day02 - 语言元素 +## 语言元素 #### 指令和程序 -计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理计算机软件中的数据。我们通常所说的程序实际上就是指令的集合,我们程序就是将一系列的指令按照某种方式组织到一起,然后通过这些指令去控制计算机做我们想让它做的事情。今天我们使用的计算机虽然器件做工越来越精密,处理能力越来越强大,但究其本质来说仍然属于[“冯·诺依曼结构”](https://zh.wikipedia.org/wiki/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%BB%93%E6%9E%84)的计算机。“冯·诺依曼结构”有两个关键点,一是指出要将存储设备与中央处理器分开,二是提出了将数据以二进制方式编码。二进制是一种“逢二进一”的计数法,跟我们人类使用的“逢十进一”的计数法没有实质性的区别,人类因为有十根手指所以使用了十进制(因为在数数时十根手指用完之后就只能进位了,当然凡事都有例外,玛雅人可能是因为长年光着脚的原因把脚趾头也算上了,于是他们使用了二十进制的计数法,在这种计数法的指导下玛雅人的历法就与我们平常使用的历法不一样,而按照玛雅人的历法,2012年是上一个所谓的“太阳纪”的最后一年,而2013年则是新的“太阳纪”的开始,后来这件事情被以讹传讹的方式误传为”2012年是玛雅人预言的世界末日“这种荒诞的说法,今天我们可以大胆的猜测,玛雅文明之所以发展缓慢估计也与使用了二十进制有关)。对于计算机来说,二进制在物理器件上来说是最容易实现的(高电压表示1,低电压表示0),于是在“冯·诺依曼结构”的计算机都使用了二进制。虽然我们并不需要每个程序员都能够使用二进制的思维方式来工作,但是了解二进制以及它与我们生活中的十进制之间的转换关系,以及二进制与八进制和十六进制的转换关系还是有必要的。如果你对这一点不熟悉,可以自行使用[维基百科](https://zh.wikipedia.org/wiki/%E4%BA%8C%E8%BF%9B%E5%88%B6)或者[百度百科](https://baike.baidu.com)科普一下。 +计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理计算机软件中的数据。我们通常所说的程序实际上就是指令的集合,我们程序就是将一系列的指令按照某种方式组织到一起,然后通过这些指令去控制计算机做我们想让它做的事情。今天我们大多数时候使用的计算机,虽然它们的元器件做工越来越精密,处理能力越来越强大,但究其本质来说仍然属于[“冯·诺依曼结构”](https://zh.wikipedia.org/wiki/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%BB%93%E6%9E%84)的计算机。“冯·诺依曼结构”有两个关键点,一是指出要将存储设备与中央处理器分开,二是提出了将数据以二进制方式编码。二进制是一种“逢二进一”的计数法,跟我们人类使用的“逢十进一”的计数法没有实质性的区别,人类因为有十根手指所以使用了十进制(因为在数数时十根手指用完之后就只能进位了,当然凡事都有例外,玛雅人可能是因为长年光着脚的原因把脚趾头也算上了,于是他们使用了二十进制的计数法,在这种计数法的指导下玛雅人的历法就与我们平常使用的历法不一样,而按照玛雅人的历法,2012年是上一个所谓的“太阳纪”的最后一年,而2013年则是新的“太阳纪”的开始,后来这件事情被以讹传讹的方式误传为”2012年是玛雅人预言的世界末日“这种荒诞的说法,今天我们可以大胆的猜测,玛雅文明之所以发展缓慢估计也与使用了二十进制有关)。对于计算机来说,二进制在物理器件上来说是最容易实现的(高电压表示1,低电压表示0),于是在“冯·诺依曼结构”的计算机都使用了二进制。虽然我们并不需要每个程序员都能够使用二进制的思维方式来工作,但是了解二进制以及它与我们生活中的十进制之间的转换关系,以及二进制与八进制和十六进制的转换关系还是有必要的。如果你对这一点不熟悉,可以自行使用[维基百科](https://zh.wikipedia.org/wiki/%E4%BA%8C%E8%BF%9B%E5%88%B6)或者[百度百科](https://baike.baidu.com)科普一下。 + +> 提示:近期关于**量子计算机**的研究已经被推倒了风口浪尖,量子计算机基于量子力学进行运算,使用量子瞬移的方式来传递信息。2018年6月,Intel宣布开发出新款量子芯片并通过了在接近绝对零度环境下的测试;2019年1月,IBM向全世界发布了首款商业化量子计算机。 ### 变量和类型 -在程序设计中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改,这是所有计算和控制的基础。计算机能处理的数据有很多中类型,除了数值之外还可以处理文本、图形、音频、视频等各种各样的数据,那么不同的数据就需要定义不同的存储类型。Python中的数据类型很多,而且也允许我们自定义新的数据类型(这一点在后面会讲到),我们先介绍几种常用的数据类型。 +在程序设计中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改,这是所有计算和控制的基础。计算机能处理的数据有很多种类型,除了数值之外还可以处理文本、图形、音频、视频等各种各样的数据,那么不同的数据就需要定义不同的存储类型。Python中的数据类型很多,而且也允许我们自定义新的数据类型(这一点在后面会讲到),我们先介绍几种常用的数据类型。 - 整型:Python中可以处理任意大小的整数(Python 2.x中有int和long两种类型的整数,但这种区分对Python来说意义不大,因此在Python 3.x中整数只有int这一种了),而且支持二进制(如`0b100`,换算成十进制是4)、八进制(如`0o100`,换算成十进制是64)、十进制(`100`)和十六进制(`0x100`,换算成十进制是256)的表示法。 - 浮点型:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如`123.456`)之外还支持科学计数法(如`1.23456e2`)。 @@ -50,12 +52,11 @@ print(a / b) print(a // b) print(a % b) print(a ** b) - ``` ```Python """ -使用input函数输入 +使用input()函数获取键盘输入 使用int()进行类型转换 用占位符格式化输出的字符串 @@ -72,7 +73,6 @@ print('%d / %d = %f' % (a, b, a / b)) print('%d // %d = %d' % (a, b, a // b)) print('%d %% %d = %d' % (a, b, a % b)) print('%d ** %d = %d' % (a, b, a ** b)) - ``` ```Python @@ -94,16 +94,15 @@ print(type(b)) print(type(c)) print(type(d)) print(type(e)) - ``` 在对变量类型进行转换时可以使用Python的内置函数(准确的说下面列出的并不是真正意义上的函数,而是后面我们要讲到的创建对象的构造方法)。 -- int():将一个数值或字符串转换成整数,可以指定进制。 -- float():将一个字符串转换成浮点数。 -- str():将指定的对象转换成字符串形式,可以指定编码。 -- chr():将整数转换成该编码对应的字符串(一个字符)。 -- ord():将字符串(一个字符)转换成对应的编码(整数)。 +- `int()`:将一个数值或字符串转换成整数,可以指定进制。 +- `float()`:将一个字符串转换成浮点数。 +- `str()`:将指定的对象转换成字符串形式,可以指定编码。 +- `chr()`:将整数转换成该编码对应的字符串(一个字符)。 +- `ord()`:将字符串(一个字符)转换成对应的编码(整数)。 ### 运算符 @@ -118,7 +117,7 @@ Python支持多种运算符,下表大致按照优先级从高到低的顺序 | `+` `-` | 加,减 | | `>>` `<<` | 右移,左移 | | `&` | 按位与 | -| `^` `|` | 按位异或,按位或 | +| `^` `\|` | 按位异或,按位或 | | `<=` `<` `>` `>=` | 小于等于,小于,大于,大于等于 | | `==` `!=` | 等于,不等于 | | `is` `is not` | 身份运算符 | @@ -126,7 +125,7 @@ Python支持多种运算符,下表大致按照优先级从高到低的顺序 | `not` `or` `and` | 逻辑运算符 | | `=` `+=` `-=` `*=` `/=` `%=` `//=` `**=` `&=` `|=` `^=` `>>=` `<<=` | (复合)赋值运算符 | ->**说明:**在实际开发中,如果搞不清楚优先级可以使用括号来确保运算的执行顺序。 +>**说明:** 在实际开发中,如果搞不清楚运算符的优先级,可以使用括号来确保运算的执行顺序。 下面的例子演示了运算符的使用。 @@ -161,7 +160,6 @@ print("flag4 = ", flag4) print("flag5 = ", flag5) print(flag1 is True) print(flag2 is not False) - ``` ### 练习 @@ -180,7 +178,6 @@ Author: 骆昊 f = float(input('请输入华氏温度: ')) c = (f - 32) / 1.8 print('%.1f华氏度 = %.1f摄氏度' % (f, c)) - ``` #### 练习2:输入圆的半径计算计算周长和面积。 @@ -200,7 +197,6 @@ perimeter = 2 * math.pi * radius area = math.pi * radius * radius print('周长: %.2f' % perimeter) print('面积: %.2f' % area) - ``` #### 练习3:输入年份判断是不是闰年。 diff --git a/Day01-15/Day03/分支结构.md b/Day01-15/03.分支结构.md similarity index 72% rename from Day01-15/Day03/分支结构.md rename to Day01-15/03.分支结构.md index 017363e..08f2307 100644 --- a/Day01-15/Day03/分支结构.md +++ b/Day01-15/03.分支结构.md @@ -1,12 +1,12 @@ -## Day03 - 分支结构 +## 分支结构 -### 分支结构的应用场景 +### 应用场景 -迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种结构的代码我们称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后我们要根据玩家得到分数来决定究竟是进入第二关还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行,这就是程序中分支结构。类似的场景还有很多,给大家一分钟的时间,你应该可以想到至少5个以上这样的例子,赶紧试一试。 +迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数来决定究竟是进入第二关,还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行。类似的场景还有很多,我们将这种结构称之为“分支结构”或“选择结构”。给大家一分钟的时间,你应该可以想到至少5个以上这样的例子,赶紧试一试。 ### if语句的使用 -在Python中,要构造分支结构可以使用`if`、`elif`和`else`关键字。所谓关键字就是有特殊含义的单词,像`if`和`else`就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。 +在Python中,要构造分支结构可以使用`if`、`elif`和`else`关键字。所谓**关键字**就是有特殊含义的单词,像`if`和`else`就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。 ```Python """ @@ -31,7 +31,7 @@ else: 当然如果要构造出更多的分支,可以使用`if…elif…else…`结构,例如下面的分段函数求值。 -$$f(x)=\begin{cases} 3x-5&\text{(x>1)}\\x+2&\text{(-1}\leq\text{x}\leq\text{1)}\\5x+3&\text {(x<-1)}\end{cases}$$ +![$$f(x)=\begin{cases} 3x-5&\text{(x>1)}\\x+2&\text{(-1}\leq\text{x}\leq\text{1)}\\5x+3&\text {(x<-1)}\end{cases}$$](./res/formula_1.png) ```Python """ @@ -79,7 +79,7 @@ else: print('f(%.2f) = %.2f' % (x, y)) ``` -> **说明:**大家可以自己感受一下这两种写法到底是哪一种更好。在之前我们提到的Python之禅中有这么一句话“Flat is better than nested.”,之所以提出这个观点是因为嵌套结构的嵌套层次多了之后会严重的影响代码的可读性,如果可以使用扁平化的结构就不要去用嵌套,因此之前的写法是更好的做法。 +> **说明:** 大家可以自己感受一下这两种写法到底是哪一种更好。在之前我们提到的Python之禅中有这么一句话“Flat is better than nested.”,之所以提倡代码“扁平化”是因为嵌套结构的嵌套层次多了之后会严重的影响代码的可读性,所以能使用扁平化的结构时就不要使用嵌套。 ### 练习 @@ -130,7 +130,7 @@ else: result = '讲冷笑话' print(result) ``` -> **说明:**上面的代码中使用了random模块的randint函数生成指定范围的随机数来模拟掷骰子。 +> **说明:** 上面的代码中使用了random模块的randint函数生成指定范围的随机数来模拟掷骰子。 #### 练习3:百分制成绩转等级制 @@ -184,7 +184,7 @@ if a + b > c and a + c > b and b + c > a: else: print('不能构成三角形') ``` -> **说明:**上面的代码中使用了`math`模块的`sqrt`函数来计算平方根。用边长计算三角形面积的公式叫做[海伦公式](https://zh.wikipedia.org/zh-hans/海伦公式)。 +> **说明:** 上面的代码中使用了`math`模块的`sqrt`函数来计算平方根。用边长计算三角形面积的公式叫做[海伦公式](https://zh.wikipedia.org/zh-hans/海伦公式)。 #### 练习5:个人所得税计算器。 @@ -227,4 +227,4 @@ tax = abs(diff * rate - deduction) print('个人所得税: ¥%.2f元' % tax) print('实际到手收入: ¥%.2f元' % (diff + 3500 - tax)) ``` ->**说明:**上面的代码中使用了Python内置的`abs()`函数取绝对值来处理`-0`的问题。 +>**说明:** 上面的代码中使用了Python内置的`abs()`函数取绝对值来处理`-0`的问题。 diff --git a/Day01-15/Day04/循环结构.md b/Day01-15/04.循环结构.md similarity index 82% rename from Day01-15/Day04/循环结构.md rename to Day01-15/04.循环结构.md index c3adf99..0354abd 100644 --- a/Day01-15/Day04/循环结构.md +++ b/Day01-15/04.循环结构.md @@ -1,12 +1,14 @@ -## Day04 - 循环结构 +## 循环结构 -### 循环结构的应用场景 +### 应用场景 -如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向奔跑的指令。当然你可能已经注意到了,刚才的描述中其实不仅仅有需要重复的动作,还有我们上一个章节讲到的分支结构。再举一个简单的例子,比如在我们的程序中要实现每隔1秒中在屏幕上打印一个"hello, world"这样的字符串并持续一个小时,我们肯定不能够将`print('hello, world')`这句代码写上3600遍,如果真的需要这样做那么编程的工作就太无聊了。因此,我们需要了解一下循环结构,有了循环结构我们就可以轻松的控制某件事或者某些事重复、重复、再重复的发生。在Python中构造循环结构有两种做法,一种是`for-in`循环,一种是`while`循环。 +如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向奔跑的指令。当然你可能已经注意到了,刚才的描述中其实不仅仅有需要重复的动作,还有我们上一个章节讲到的分支结构。再举一个简单的例子,比如在我们的程序中要实现每隔1秒中在屏幕上打印一个"hello, world"这样的字符串并持续一个小时,我们肯定不能够将`print('hello, world')`这句代码写上3600遍,如果真的需要这样做,那么编程的工作就太无聊了。因此,我们还需要了解一下循环结构,有了循环结构我们就可以轻松的控制某件事或者某些事重复、重复、再重复的去执行。 + +在Python中构造循环结构有两种做法,一种是`for-in`循环,一种是`while`循环。 ### for-in循环 -如果明确的知道循环执行的次数或者是要对一个容器进行迭代(后面会讲到),那么我们推荐使用`for-in`循环,例如下面代码中计算$\sum_{n=1}^{100}n$。 +如果明确的知道循环执行的次数或者要对一个容器进行迭代(后面会讲到),那么我们推荐使用`for-in`循环,例如下面代码中计算1~100求和的结果($\displaystyle \sum \limits_{n=1}^{100}n$)。 ```Python """ @@ -63,7 +65,7 @@ print(sum) ### while循环 -如果要构造不知道具体循环次数的循环结构,我们推荐使用`while`循环,`while`循环通过一个能够产生或转换出`bool`值的表达式来控制循环,表达式的值为`True`循环继续,表达式的值为`False`循环结束。下面我们通过一个“猜数字”的小游戏(计算机出一个1~100之间的随机数,人输入自己猜的数字,计算机给出对应的提示信息,直到人猜出计算机出的数字)来看看如何使用`while`循环。 +如果要构造不知道具体循环次数的循环结构,我们推荐使用`while`循环。`while`循环通过一个能够产生或转换出`bool`值的表达式来控制循环,表达式的值为`True`循环继续,表达式的值为`False`循环结束。下面我们通过一个“猜数字”的小游戏(计算机出一个1~100之间的随机数,人输入自己猜的数字,计算机给出对应的提示信息,直到人猜出计算机出的数字)来看看如何使用`while`循环。 ```Python """ @@ -94,7 +96,7 @@ if counter > 7: print('你的智商余额明显不足') ``` -> **说明:**上面的代码中使用了`break`关键字来提前终止循环,需要注意的是`break`只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了`break`之外,还有另一个关键字是`continue`,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。 +> **说明:** 上面的代码中使用了`break`关键字来提前终止循环,需要注意的是`break`只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了`break`之外,还有另一个关键字是`continue`,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。 和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个九九乘法表。 diff --git a/Day01-15/05.构造程序逻辑.md b/Day01-15/05.构造程序逻辑.md new file mode 100644 index 0000000..6471d38 --- /dev/null +++ b/Day01-15/05.构造程序逻辑.md @@ -0,0 +1,13 @@ +## 构造程序逻辑 + +分支和循环结构会帮助我们将程序中逻辑建立起来,将来我们的程序无论简单复杂,都是由顺序结构、分支结构、循环结构构成的。对于编程语言的初学者来说,首先要锻炼的是将人类自然语言描述的解决问题的步骤和方法翻译成代码的能力,其次就是熟练的运用之前学过的运算符、表达式以及最近的两个章节讲解的分支结构和循环结构的知识。有了这些基本的能力才能够通过计算机程序去解决各种各样的现实问题。所以,开始做练习吧! + +### 练习清单 + +1. 寻找[“水仙花数”](https://baike.baidu.com/item/%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0)。 +2. 寻找[“完美数”](https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913)。 +3. [“百钱百鸡”](https://baike.baidu.com/item/%E7%99%BE%E9%B8%A1%E7%99%BE%E9%92%B1/5857320)问题。 +4. 生成[“斐波拉切数列”](https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145)。 +5. Craps赌博游戏。 + +> **提示**:练习的参考答案在code/Day05目录下。 \ No newline at end of file diff --git a/Day01-15/Day06/函数和模块的使用.md b/Day01-15/06.函数和模块的使用.md similarity index 90% rename from Day01-15/Day06/函数和模块的使用.md rename to Day01-15/06.函数和模块的使用.md index 202b9e7..85017c8 100644 --- a/Day01-15/Day06/函数和模块的使用.md +++ b/Day01-15/06.函数和模块的使用.md @@ -2,11 +2,11 @@ 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解。 -$$x_1 + x_2 + x_3 + x_4 = 8$$ +![$$x_1 + x_2 + x_3 + x_4 = 8$$](./res/formula_3.png) 事实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案。想到这一点问题的答案就呼之欲出了。 -$$C_M^N =\frac{M!}{N!(M-N)!}, \text{(M=7, N=3)} $$ +![$$C_M^N =\frac{M!}{N!(M-N)!}, \text{(M=7, N=3)} $$](./res/formula_4.png) 可以用Python的程序来计算出这个值,代码如下所示。 @@ -31,7 +31,7 @@ print(fm // fn // fmn) ### 函数的作用 -不知道大家是否注意到,在上面的代码中,我们做了3次求阶乘,这样的代码实际上就是重复代码。编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算阶乘的功能封装到一个称之为“函数”的功能模块中,在需要计算阶乘的地方,我们只需要“调用”这个“函数”就可以了。 +不知道大家是否注意到,在上面的代码中,我们做了3次求阶乘,这样的代码实际上就是重复代码。编程大师*Martin Fowler*先生曾经说过:“**代码有很多种坏味道,重复是最坏的一种!**”,要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算阶乘的功能封装到一个称之为“函数”的功能模块中,在需要计算阶乘的地方,我们只需要“调用”这个“函数”就可以了。 ### 定义函数 @@ -59,7 +59,7 @@ n = int(input('n = ')) print(factorial(m) // factorial(n) // factorial(m - n)) ``` -> **说明:**Python的math模块中其实已经有一个factorial函数了,事实上要计算阶乘可以直接使用这个现成的函数而不用自己定义。下面例子中的某些函数其实Python中也是内置了,我们这里是为了讲解函数的定义和使用才把它们又实现了一遍,实际开发中不建议做这种低级的重复性的工作。 +> **说明:** Python的math模块中其实已经有一个factorial函数了,事实上要计算阶乘可以直接使用这个现成的函数而不用自己定义。下面例子中的某些函数其实Python中也是内置了,我们这里是为了讲解函数的定义和使用才把它们又实现了一遍,实际开发中不建议做这种低级的重复性的工作。 ### 函数的参数 @@ -337,7 +337,7 @@ if __name__ == '__main__': 在实际开发中,我们应该尽量减少对全局变量的使用,因为全局变量的作用域和影响过于广泛,可能会发生意料之外的修改和使用,除此之外全局变量比局部变量拥有更长的生命周期,可能导致对象占用的内存长时间无法被[垃圾回收](https://zh.wikipedia.org/wiki/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8))。事实上,减少对全局变量的使用,也是降低代码之间耦合度的一个重要举措,同时也是对[迪米特法则](https://zh.wikipedia.org/zh-hans/%E5%BE%97%E5%A2%A8%E5%BF%92%E8%80%B3%E5%AE%9A%E5%BE%8B)的践行。减少全局变量的使用就意味着我们应该尽量让变量的作用域在函数的内部,但是如果我们希望将一个局部变量的生命周期延长,使其在函数调用结束后依然可以访问,这时候就需要使用[闭包](https://zh.wikipedia.org/wiki/%E9%97%AD%E5%8C%85_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)),这个我们在后续的内容中进行讲解。 -> **说明**:很多人经常会将“闭包”一词和[“匿名函数”](https://zh.wikipedia.org/wiki/%E5%8C%BF%E5%90%8D%E5%87%BD%E6%95%B0)混为一谈,但实际上它们是不同的概念,如果想提前了解这个概念,推荐看看[维基百科](https://zh.wikipedia.org/wiki/)或者[知乎](https://www.zhihu.com/)上对这个概念的讨论。 +> **说明:** 很多人经常会将“闭包”一词和[“匿名函数”](https://zh.wikipedia.org/wiki/%E5%8C%BF%E5%90%8D%E5%87%BD%E6%95%B0)混为一谈,但实际上它们是不同的概念,如果想提前了解这个概念,推荐看看[维基百科](https://zh.wikipedia.org/wiki/)或者[知乎](https://www.zhihu.com/)上对这个概念的讨论。 说了那么多,其实结论很简单,从现在开始我们可以将Python代码按照下面的格式进行书写,这一点点的改进其实就是在我们理解了函数和作用域的基础上跨出的巨大的一步。 diff --git a/Day01-15/Day07/字符串和常用数据结构.md b/Day01-15/07.字符串和常用数据结构.md similarity index 90% rename from Day01-15/Day07/字符串和常用数据结构.md rename to Day01-15/07.字符串和常用数据结构.md index 5dff114..934e7ec 100644 --- a/Day01-15/Day07/字符串和常用数据结构.md +++ b/Day01-15/07.字符串和常用数据结构.md @@ -2,7 +2,9 @@ ### 使用字符串 -第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代,计算机处理的信息主要是数值,而世界上的第一台电子计算机ENIAC每秒钟能够完成约5000次浮点运算。随着时间的推移,虽然对数值运算仍然是计算机日常工作中最为重要的事情之一,但是今天的计算机处理得更多的数据都是以文本信息的方式存在的,而Python表示文本信息的方式我们在很早以前就说过了,那就是字符串类型。所谓**字符串**,就是由零个或多个字符组成的有限序列,一般记为[$${\displaystyle s=a_{1}a_{2}\dots a_{n}(0\leq n \leq \infty)}$$](https://wikimedia.org/api/rest_v1/media/math/render/svg/e29bf631b090323edd6889f810e6cff29538b161)。 +第二次世界大战促使了现代电子计算机的诞生,最初的目的用计算机来快速的完成导弹弹道的计算,因此在计算机刚刚诞生的那个年代,计算机处理的信息基本上都是数值型的信息,而世界上的第一台电子计算机ENIAC每秒钟能够完成约5000次浮点运算。随着时间的推移,虽然数值运算仍然是计算机日常工作中最为重要的事情之一,但是今天的计算机更多的时间需要处理的数据可能都是以文本的方式存在的,如果我们希望通过Python程序操作本这些文本信息,就必须要先了解字符串类型以及与它相关的知识。 + +所谓**字符串**,就是由零个或多个字符组成的有限序列,一般记为![$${\displaystyle s=a_{1}a_{2}\dots a_{n}(0\leq n \leq \infty)}$$](./res/formula_5.png)。 我们可以通过下面的代码来了解字符串的使用。 @@ -104,8 +106,8 @@ if __name__ == '__main__': ```Python def main(): fruits = ['grape', 'apple', 'strawberry', 'waxberry'] - fruits += ['pitaya', 'pear', 'mango'] - # 循环遍历列表元素 + fruits += ['pitaya', 'pear', 'mango'] + # 循环遍历列表元素 for fruit in fruits: print(fruit.title(), end=' ') print() @@ -183,11 +185,11 @@ if __name__ == '__main__': 除了上面提到的生成器语法,Python中还有另外一种定义生成器的方式,就是通过`yield`关键字将一个普通函数改造成生成器函数。下面的代码演示了如何实现一个生成[斐波拉切数列](https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97)的生成器。所谓斐波拉切数列可以通过下面[递归](https://zh.wikipedia.org/wiki/%E9%80%92%E5%BD%92)的方法来进行定义: -$${\displaystyle F_{0}=0}$$ +![$${\displaystyle F_{0}=0}$$](./res/formula_6.png) -$${\displaystyle F_{1}=1}$$ +![$${\displaystyle F_{1}=1}$$](./res/formula_7.png) -$${\displaystyle F_{n}=F_{n-1}+F_{n-2}}({n}\geq{2})$$ +![$${\displaystyle F_{n}=F_{n-1}+F_{n-2}}({n}\geq{2})$$](./res/formula_8.png) ![](./res/fibonacci-blocks.png) @@ -307,7 +309,7 @@ if __name__ == '__main__': main() ``` -> **说明**:Python中允许通过一些特殊的方法来为某种类型或数据结构自定义运算符(后面的章节中会讲到),上面的代码中我们对集合进行运算的时候可以调用集合对象的方法,也可以直接使用对应的运算符,例如`&`运算符跟intersection方法的作用就是一样的,但是使用运算符让代码更加直观。 +> **说明:** Python中允许通过一些特殊的方法来为某种类型或数据结构自定义运算符(后面的章节中会讲到),上面的代码中我们对集合进行运算的时候可以调用集合对象的方法,也可以直接使用对应的运算符,例如`&`运算符跟intersection方法的作用就是一样的,但是使用运算符让代码更加直观。 ### 使用字典 @@ -530,7 +532,7 @@ if __name__ == '__main__': main() ``` -> **说明**:上面使用random模块的sample函数来实现从列表中选择不重复的n个元素。 +> **说明:** 上面使用random模块的sample函数来实现从列表中选择不重复的n个元素。 #### 综合案例2:[约瑟夫环问题](https://zh.wikipedia.org/wiki/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98) @@ -609,4 +611,4 @@ if __name__ == '__main__': main() ``` ->**说明**:最后这个案例来自[《Python编程快速上手:让繁琐工作自动化》](https://item.jd.com/11943853.html)一书(这本书对有编程基础想迅速使用Python将日常工作自动化的人来说还是不错的选择),对代码做了一点点的调整。 \ No newline at end of file +>**说明:** 最后这个案例来自[《Python编程快速上手:让繁琐工作自动化》](https://item.jd.com/11943853.html)一书(这本书对有编程基础想迅速使用Python将日常工作自动化的人来说还是不错的选择),对代码做了一点点的调整。 \ No newline at end of file diff --git a/Day01-15/Day08/面向对象编程基础.md b/Day01-15/08.面向对象编程基础.md similarity index 87% rename from Day01-15/Day08/面向对象编程基础.md rename to Day01-15/08.面向对象编程基础.md index b4f4856..d84d376 100644 --- a/Day01-15/Day08/面向对象编程基础.md +++ b/Day01-15/08.面向对象编程基础.md @@ -2,19 +2,19 @@ 活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。 -> 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。 +“把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。” 这样一说是不是更不明白了。所以我们还是看看更通俗易懂的说法,下面这段内容来自于[知乎](https://www.zhihu.com/)。 ![](./res/oop-zhihu.png) -> **说明**:以上的内容来自于网络,不代表作者本人的观点和看法,与作者本人立场无关,相关责任不由作者承担。 +> **说明:** 以上的内容来自于网络,不代表作者本人的观点和看法,与作者本人立场无关,相关责任不由作者承担。 之前我们说过“程序是指令的集合”,我们在程序中书写的语句在执行时会变成一条或多条指令然后由CPU去执行。当然为了简化程序的设计,我们引入了函数的概念,把相对独立且经常重复使用的代码放置到函数中,在需要使用这些功能的时候只要调用函数即可;如果一个函数的功能过于复杂和臃肿,我们又可以进一步将函数继续切分为子函数来降低系统的复杂性。但是说了这么多,不知道大家是否发现,所谓编程就是程序员按照计算机的工作方式控制计算机完成各种任务。但是,计算机的工作方式与正常人类的思维模式是不同的,如果编程就必须得抛弃人类正常的思维方式去迎合计算机,编程的乐趣就少了很多,“每个人都应该学习编程”这样的豪言壮语就只能说说而已。当然,这些还不是最重要的,最重要的是当我们需要开发一个复杂的系统时,代码的复杂性会让开发和维护工作都变得举步维艰,所以在上世纪60年代末期,“[软件危机](https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6%E5%8D%B1%E6%9C%BA)”、“[软件工程](https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B)”等一系列的概念开始在行业中出现。 当然,程序员圈子内的人都知道,现实中并没有解决上面所说的这些问题的“[银弹](https://zh.wikipedia.org/wiki/%E6%B2%A1%E6%9C%89%E9%93%B6%E5%BC%B9)”,真正让软件开发者看到希望的是上世纪70年代诞生的[Smalltalk](https://zh.wikipedia.org/wiki/Smalltalk)编程语言中引入的面向对象的编程思想(面向对象编程的雏形可以追溯到更早期的[Simula](https://zh.wikipedia.org/wiki/Simula)语言)。按照这种编程理念,程序中的数据和操作数据的函数是一个逻辑上的整体,我们称之为“对象”,而我们解决问题的方式就是创建出需要的对象并向对象发出各种各样的消息,多个对象的协同工作最终可以让我们构造出复杂的系统来解决现实中的问题。 -> **说明**:当然面向对象也不是解决软件开发中所有问题的最后的“银弹”,所以今天的高级程序设计语言几乎都提供了对多种编程范式的支持,Python也不例外。 +> **说明:** 当然面向对象也不是解决软件开发中所有问题的最后的“银弹”,所以今天的高级程序设计语言几乎都提供了对多种编程范式的支持,Python也不例外。 ### 类和对象 @@ -39,15 +39,15 @@ class Student(object): print('%s正在学习%s.' % (self.name, course_name)) # PEP 8要求标识符的名字用全小写多个单词用下划线连接 - # 但是很多程序员和公司更倾向于使用驼峰命名法(驼峰标识) - def watch_av(self): + # 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识) + def watch_movie(self): if self.age < 18: print('%s只能观看《熊出没》.' % self.name) else: - print('%s正在观看岛国爱情动作片.' % self.name + print('%s正在观看岛国爱情大电影.' % self.name) ``` -> **说明**:写在类中的函数,我们通常称之为(对象的)方法,这些方法就是对象可以接收的消息。 +> **说明:** 写在类中的函数,我们通常称之为(对象的)方法,这些方法就是对象可以接收的消息。 ### 创建和使用对象 @@ -60,10 +60,10 @@ def main(): # 给对象发study消息 stu1.study('Python程序设计') # 给对象发watch_av消息 - stu1.watch_av() + stu1.watch_movie() stu2 = Student('王大锤', 15) stu2.study('思想品德') - stu2.watch_av() + stu2.watch_movie() if __name__ == '__main__': @@ -131,6 +131,9 @@ if __name__ == "__main__": #### 练习1:定义一个类描述数字时钟 ```Python +from time import sleep + + class Clock(object): """数字时钟""" @@ -237,4 +240,4 @@ if __name__ == '__main__': main() ``` -> **说明**:本章中的插图来自于Grady Booch等著作的[《面向对象分析与设计》](https://item.jd.com/20476561918.html)一书,该书是讲解面向对象编程的经典著作,有兴趣的读者可以购买和阅读这本书来了解更多的面向对象的相关知识。 \ No newline at end of file +> **说明:** 本章中的插图来自于Grady Booch等著作的[《面向对象分析与设计》](https://item.jd.com/20476561918.html)一书,该书是讲解面向对象编程的经典著作,有兴趣的读者可以购买和阅读这本书来了解更多的面向对象的相关知识。 \ No newline at end of file diff --git a/Day01-15/Day09/面向对象进阶.md b/Day01-15/09.面向对象进阶.md similarity index 99% rename from Day01-15/Day09/面向对象进阶.md rename to Day01-15/09.面向对象进阶.md index 168884d..4e8cf6a 100644 --- a/Day01-15/Day09/面向对象进阶.md +++ b/Day01-15/09.面向对象进阶.md @@ -276,7 +276,7 @@ def main(): stu = Student('王大锤', 15, '初三') stu.study('数学') stu.watch_av() - t = Teacher('骆昊', 38, '老叫兽') + t = Teacher('骆昊', 38, '砖家') t.teach('Python程序设计') t.watch_av() @@ -636,7 +636,7 @@ if __name__ == '__main__': main() ``` ->**说明**:大家可以自己尝试在上面代码的基础上写一个简单的扑克游戏,例如21点(Black Jack),游戏的规则可以自己在网上找一找。 +>**说明:** 大家可以自己尝试在上面代码的基础上写一个简单的扑克游戏,例如21点(Black Jack),游戏的规则可以自己在网上找一找。 #### 案例3:工资结算系统 diff --git a/Day01-15/Day10/图形用户界面和游戏开发.md b/Day01-15/10.图形用户界面和游戏开发.md similarity index 99% rename from Day01-15/Day10/图形用户界面和游戏开发.md rename to Day01-15/10.图形用户界面和游戏开发.md index 6dfada7..ae65624 100644 --- a/Day01-15/Day10/图形用户界面和游戏开发.md +++ b/Day01-15/10.图形用户界面和游戏开发.md @@ -128,7 +128,7 @@ if __name__ == '__main__': main() ``` -####加载图像 +#### 加载图像 如果需要直接加载图像到窗口上,可以使用pygame中image模块的函数来加载图像,再通过之前获得的窗口对象的`blit`方法渲染图像,代码如下所示。 @@ -164,7 +164,7 @@ if __name__ == '__main__': main() ``` -####实现动画效果 +#### 实现动画效果 说到[动画](https://zh.wikipedia.org/wiki/%E5%8A%A8%E7%94%BB)这个词大家都不会陌生,事实上要实现动画效果,本身的原理也非常简单,就是将不连续的图片连续的播放,只要每秒钟达到了一定的帧数,那么就可以做出比较流畅的动画效果。如果要让上面代码中的小球动起来,可以将小球的位置用变量来表示,并在循环中修改小球的位置再刷新整个窗口即可。 diff --git a/Day01-15/Day11/文件和异常.md b/Day01-15/11.文件和异常.md similarity index 93% rename from Day01-15/Day11/文件和异常.md rename to Day01-15/11.文件和异常.md index 924aef9..6e47437 100644 --- a/Day01-15/Day11/文件和异常.md +++ b/Day01-15/11.文件和异常.md @@ -1,6 +1,6 @@ ## 文件和异常 -在实际开发中,常常需要对程序中的数据进行[持久化](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96)操作,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于[文件系统](https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)的知识,对于这个概念,维基百科上给出了很好的诠释,这里不再浪费笔墨。 +实际开发中常常会遇到对数据进行[持久化](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96)操作的场景,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于[文件系统](https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)的知识,但是这里我们并不浪费笔墨介绍这个概念,请大家自行通过维基百科进行了解。 在Python中实现文件的读写操作其实非常简单,通过Python内置的`open`函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示。 @@ -103,7 +103,7 @@ if __name__ == '__main__': main() ``` -要将文本信息写入文件文件也非常简单,在使用`open`函数时指定好文件名并将文件模式设置为`'w'`即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为`'a'`。如果要写入的文件不存在会自动创建文件而不是引发异常。下面的例子演示了如何将1-9999直接的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。 +要将文本信息写入文件文件也非常简单,在使用`open`函数时指定好文件名并将文件模式设置为`'w'`即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为`'a'`。如果要写入的文件不存在会自动创建文件而不是引发异常。下面的例子演示了如何将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。 ```Python from math import sqrt @@ -174,14 +174,14 @@ if __name__ == '__main__': ```JSON { - 'name': '骆昊', - 'age': 38, - 'qq': 957658, - 'friends': ['王大锤', '白元芳'], - 'cars': [ - {'brand': 'BYD', 'max_speed': 180}, - {'brand': 'Audi', 'max_speed': 280}, - {'brand': 'Benz', 'max_speed': 320} + "name": "骆昊", + "age": 38, + "qq": 957658, + "friends": ["王大锤", "白元芳"], + "cars": [ + {"brand": "BYD", "max_speed": 180}, + {"brand": "Audi", "max_speed": 280}, + {"brand": "Benz", "max_speed": 320} ] } ``` diff --git a/Day01-15/Day12/字符串和正则表达式.md b/Day01-15/12.字符串和正则表达式.md similarity index 85% rename from Day01-15/Day12/字符串和正则表达式.md rename to Day01-15/12.字符串和正则表达式.md index 418d039..b8b9ae9 100644 --- a/Day01-15/Day12/字符串和正则表达式.md +++ b/Day01-15/12.字符串和正则表达式.md @@ -32,7 +32,7 @@ | \| | 分支 | foo\|bar | 可以匹配foo或者bar | | (?#) | 注释 | | | | (exp) | 匹配exp并捕获到自动命名的组中 | | | -| (?<name>exp) | 匹配exp并捕获到名为name的组中 | | | +| (? <name>exp) | 匹配exp并捕获到名为name的组中 | | | | (?:exp) | 匹配exp但是不捕获匹配的文本 | | | | (?=exp) | 匹配exp前面的位置 | \\b\\w+(?=ing) | 可以匹配I'm dancing中的danc | | (?<=exp) | 匹配exp后面的位置 | (?<=\\bdanc)\\w+\\b | 可以匹配I love dancing and reading中的第一个ing | @@ -44,7 +44,7 @@ | {M,N}? | 重复M到N次,但尽可能少重复 | | | | {M,}? | 重复M次以上,但尽可能少重复 | | | -> **说明:**如果需要匹配的字符是正则表达式中的特殊字符,那么可以使用\\进行转义处理,例如想匹配小数点可以写成\\.就可以了,因为直接写.会匹配任意字符;同理,想匹配圆括号必须写成\\(和\\),否则圆括号被视为正则表达式中的分组。 +> **说明:** 如果需要匹配的字符是正则表达式中的特殊字符,那么可以使用\\进行转义处理,例如想匹配小数点可以写成\\.就可以了,因为直接写.会匹配任意字符;同理,想匹配圆括号必须写成\\(和\\),否则圆括号被视为正则表达式中的分组。 ### Python对正则表达式的支持 @@ -64,7 +64,7 @@ Python提供了re模块来支持正则表达式相关操作,下面是re模块 | re.I / re.IGNORECASE | 忽略大小写匹配标记 | | re.M / re.MULTILINE | 多行匹配标记 | -> **说明:**上面提到的re模块中的这些函数,实际开发中也可以用正则表达式对象的方法替代对这些函数的使用,如果一个正则表达式需要重复的使用,那么先通过compile函数编译正则表达式并创建出正则表达式对象无疑是更为明智的选择。 +> **说明:** 上面提到的re模块中的这些函数,实际开发中也可以用正则表达式对象的方法替代对这些函数的使用,如果一个正则表达式需要重复的使用,那么先通过compile函数编译正则表达式并创建出正则表达式对象无疑是更为明智的选择。 下面我们通过一系列的例子来告诉大家在Python中如何使用正则表达式。 @@ -98,7 +98,7 @@ if __name__ == '__main__': main() ``` -> **提示**:上面在书写正则表达式时使用了“原始字符串”的写法(在字符串前面加上了r),所谓“原始字符串”就是字符串中的每个字符都是它原始的意义,说得更直接一点就是字符串中没有所谓的转义字符啦。因为正则表达式中有很多元字符和需要进行转义的地方,如果不使用原始字符串就需要将反斜杠写作\\\\,例如表示数字的\\d得书写成\\\\d,这样不仅写起来不方便,阅读的时候也会很吃力。 +> **提示:** 上面在书写正则表达式时使用了“原始字符串”的写法(在字符串前面加上了r),所谓“原始字符串”就是字符串中的每个字符都是它原始的意义,说得更直接一点就是字符串中没有所谓的转义字符啦。因为正则表达式中有很多元字符和需要进行转义的地方,如果不使用原始字符串就需要将反斜杠写作\\\\,例如表示数字的\\d得书写成\\\\d,这样不仅写起来不方便,阅读的时候也会很吃力。 #### 例子2:从一段文字中提取出国内手机号码。 @@ -136,7 +136,7 @@ if __name__ == '__main__': main() ``` -> **说明**:上面匹配国内手机号的正则表达式并不够好,因为像14开头的号码只有145或147,而上面的正则表达式并没有考虑这种情况,要匹配国内手机号,更好的正则表达式的写法是:`(?<=\D)(1[38]\d{9}|14[57]\d{8}|15[0-35-9]\d{8}|17[678]\d{8})(?=\D)`,国内最近好像有19和16开头的手机号了,但是这个暂时不在我们考虑之列。 +> **说明:** 上面匹配国内手机号的正则表达式并不够好,因为像14开头的号码只有145或147,而上面的正则表达式并没有考虑这种情况,要匹配国内手机号,更好的正则表达式的写法是:`(?<=\D)(1[38]\d{9}|14[57]\d{8}|15[0-35-9]\d{8}|17[678]\d{8})(?=\D)`,国内最近好像有19和16开头的手机号了,但是这个暂时不在我们考虑之列。 #### 例子3:替换字符串中的不良内容 @@ -155,7 +155,7 @@ if __name__ == '__main__': main() ``` -> **说明**:re模块的正则表达式相关函数中都有一个flags参数,它代表了正则表达式的匹配标记,可以通过该标记来指定匹配时是否忽略大小写、是否进行多行匹配、是否显示调试信息等。如果需要为flags参数指定多个值,可以使用[按位或运算符](http://www.runoob.com/python/python-operators.html#ysf5)进行叠加,如`flags=re.I | re.M`。 +> **说明:** re模块的正则表达式相关函数中都有一个flags参数,它代表了正则表达式的匹配标记,可以通过该标记来指定匹配时是否忽略大小写、是否进行多行匹配、是否显示调试信息等。如果需要为flags参数指定多个值,可以使用[按位或运算符](http://www.runoob.com/python/python-operators.html#ysf5)进行叠加,如`flags=re.I | re.M`。 #### 例子4:拆分长字符串 diff --git a/Day01-15/Day13/进程和线程.md b/Day01-15/13.进程和线程.md similarity index 97% rename from Day01-15/Day13/进程和线程.md rename to Day01-15/13.进程和线程.md index c1d2093..b24b5b3 100644 --- a/Day01-15/Day13/进程和线程.md +++ b/Day01-15/13.进程和线程.md @@ -320,7 +320,7 @@ if __name__ == '__main__': 除了计算密集型任务,其他的涉及到网络、存储介质I/O的任务都可以视为I/O密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待I/O操作完成(因为I/O的速度远远低于CPU和内存的速度)。对于I/O密集型任务,如果启动多任务,就可以减少I/O等待时间从而让CPU高效率的运转。有一大类的任务都属于I/O密集型任务,这其中包括了我们很快会涉及到的网络应用和Web应用。 -> **说明:**上面的内容和例子来自于[廖雪峰官方网站的《Python教程》](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000),因为对作者文中的某些观点持有不同的看法,对原文的文字描述做了适当的调整。 +> **说明:** 上面的内容和例子来自于[廖雪峰官方网站的《Python教程》](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000),因为对作者文中的某些观点持有不同的看法,对原文的文字描述做了适当的调整。 ### 单线程+异步I/O @@ -485,5 +485,5 @@ if __name__ == '__main__': main() ``` -比较两段代码的执行结果(在我目前使用的MacBook上,上面的代码需要大概6秒左右的时间,而下面的代码只需要不到1秒的时间,再强调一次我们只是比较了运算的时间,不考虑列表创建及切片操作花费的时间),使用多进程后由于获得了更多的CPU执行时间以及更好的利用了CPU的多核特性,明显的减少了程序的执行时间,而且计算量越大效果越明显。当然,如果愿意还可以将多个进程部署在不同的计算机上,做成分布式进程,具体的做法就是通过multiprocessing.managers模块中提供的管理器将`Queue`对象通过网络共享出来(注册到网络上让其他计算机可以访问),这部分内容也留到爬虫的专题再进行讲解。 +比较两段代码的执行结果(在我目前使用的MacBook上,上面的代码需要大概6秒左右的时间,而下面的代码只需要不到1秒的时间,再强调一次我们只是比较了运算的时间,不考虑列表创建及切片操作花费的时间),使用多进程后由于获得了更多的CPU执行时间以及更好的利用了CPU的多核特性,明显的减少了程序的执行时间,而且计算量越大效果越明显。当然,如果愿意还可以将多个进程部署在不同的计算机上,做成分布式进程,具体的做法就是通过`multiprocessing.managers`模块中提供的管理器将`Queue`对象通过网络共享出来(注册到网络上让其他计算机可以访问),这部分内容也留到爬虫的专题再进行讲解。 diff --git a/Day01-15/Day14-A/网络编程入门.md b/Day01-15/14.网络编程入门和网络应用开发.md similarity index 75% rename from Day01-15/Day14-A/网络编程入门.md rename to Day01-15/14.网络编程入门和网络应用开发.md index a466865..02f2b4a 100644 --- a/Day01-15/Day14-A/网络编程入门.md +++ b/Day01-15/14.网络编程入门和网络应用开发.md @@ -38,8 +38,6 @@ TCP全称传输控制协议,它是基于IP提供的寻址和路由服务而建 2. 流量控制(通过滑动窗口匹配数据发送者和接收者之间的传输速度)。 3. 拥塞控制(通过RTT时间以及对滑动窗口的控制缓解网络拥堵)。 - - #### 网络应用模式 1. C/S模式和B/S模式。这里的C指的是Client(客户端),通常是一个需要安装到某个宿主操作系统上的应用程序;而B指的是Browser(浏览器),它几乎是所有图形化操作系统都默认安装了的一个应用软件;通过C或B都可以实现对S(服务器)的访问。关于二者的比较和讨论在网络上有一大堆的文章,在此我们就不再浪费笔墨了。 @@ -70,9 +68,9 @@ JSON的例子: ```JSON { - 'from': 'Alice', - 'to': 'Bob', - 'content': 'Will you marry me?' + "from": "Alice", + "to": "Bob", + "content": "Will you marry me?" } ``` @@ -291,9 +289,129 @@ if __name__ == '__main__': 在这个案例中,我们使用了JSON作为数据传输的格式(通过JSON格式对传输的数据进行了序列化和反序列化的操作),但是JSON并不能携带二进制数据,因此对图片的二进制数据进行了Base64编码的处理。Base64是一种用64个字符表示所有二进制数据的编码方式,通过将二进制数据每6位一组的方式重新组织,刚好可以使用0~9的数字、大小写字母以及“+”和“/”总共64个字符表示从`000000`到`111111`的64种状态。[维基百科](https://zh.wikipedia.org/wiki/Base64)上有关于Base64编码的详细讲解,不熟悉Base64的读者可以自行阅读。 -> **说明**:上面的代码主要为了讲解网络编程的相关内容因此并没有对异常状况进行处理,请读者自行添加异常处理代码来增强程序的健壮性。 +> **说明:** 上面的代码主要为了讲解网络编程的相关内容因此并没有对异常状况进行处理,请读者自行添加异常处理代码来增强程序的健壮性。 #### UDP套接字 传输层除了有可靠的传输协议TCP之外,还有一种非常轻便的传输协议叫做用户数据报协议,简称UDP。TCP和UDP都是提供端到端传输服务的协议,二者的差别就如同打电话和发短信的区别,后者不对传输的可靠性和可达性做出任何承诺从而避免了TCP中握手和重传的开销,所以在强调性能和而不是数据完整性的场景中(例如传输网络音视频数据),UDP可能是更好的选择。可能大家会注意到一个现象,就是在观看网络视频时,有时会出现卡顿,有时会出现花屏,这无非就是部分数据传丢或传错造成的。在Python中也可以使用UDP套接字来创建网络应用,对此我们不进行赘述,有兴趣的读者可以自行研究。 +### 网络应用开发 + +#### 发送电子邮件 + +在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。 + +就像我们可以用HTTP(超文本传输协议)来访问一个网站一样,发送邮件要使用SMTP(简单邮件传输协议),SMTP也是一个建立在TCP(传输控制协议)提供的可靠数据传输服务的基础上的应用级协议,它规定了邮件的发送者如何跟发送邮件的服务器进行通信的细节,而Python中的smtplib模块将这些操作简化成了几个简单的函数。 + +下面的代码演示了如何在Python发送邮件。 + +```Python +from smtplib import SMTP +from email.header import Header +from email.mime.text import MIMEText + + +def main(): + # 请自行修改下面的邮件发送者和接收者 + sender = 'abcdefg@126.com' + receivers = ['uvwxyz@qq.com', 'uvwxyz@126.com'] + message = MIMEText('用Python发送邮件的示例代码.', 'plain', 'utf-8') + message['From'] = Header('王大锤', 'utf-8') + message['To'] = Header('骆昊', 'utf-8') + message['Subject'] = Header('示例代码实验邮件', 'utf-8') + smtper = SMTP('smtp.126.com') + # 请自行修改下面的登录口令 + smtper.login(sender, 'secretpass') + smtper.sendmail(sender, receivers, message.as_string()) + print('邮件发送完成!') + + +if __name__ == '__main__': + main() +``` + +如果要发送带有附件的邮件,那么可以按照下面的方式进行操作。 + +```Python +from smtplib import SMTP +from email.header import Header +from email.mime.text import MIMEText +from email.mime.image import MIMEImage +from email.mime.multipart import MIMEMultipart + +import urllib + + +def main(): + # 创建一个带附件的邮件消息对象 + message = MIMEMultipart() + + # 创建文本内容 + text_content = MIMEText('附件中有本月数据请查收', 'plain', 'utf-8') + message['Subject'] = Header('本月数据', 'utf-8') + # 将文本内容添加到邮件消息对象中 + message.attach(text_content) + + # 读取文件并将文件作为附件添加到邮件消息对象中 + with open('/Users/Hao/Desktop/hello.txt', 'rb') as f: + txt = MIMEText(f.read(), 'base64', 'utf-8') + txt['Content-Type'] = 'text/plain' + txt['Content-Disposition'] = 'attachment; filename=hello.txt' + message.attach(txt) + # 读取文件并将文件作为附件添加到邮件消息对象中 + with open('/Users/Hao/Desktop/汇总数据.xlsx', 'rb') as f: + xls = MIMEText(f.read(), 'base64', 'utf-8') + xls['Content-Type'] = 'application/vnd.ms-excel' + xls['Content-Disposition'] = 'attachment; filename=month-data.xlsx' + message.attach(xls) + + # 创建SMTP对象 + smtper = SMTP('smtp.126.com') + # 开启安全连接 + # smtper.starttls() + sender = 'abcdefg@126.com' + receivers = ['uvwxyz@qq.com'] + # 登录到SMTP服务器 + # 请注意此处不是使用密码而是邮件客户端授权码进行登录 + # 对此有疑问的读者可以联系自己使用的邮件服务器客服 + smtper.login(sender, 'secretpass') + # 发送邮件 + smtper.sendmail(sender, receivers, message.as_string()) + # 与邮件服务器断开连接 + smtper.quit() + print('发送完成!') + + +if __name__ == '__main__': + main() +``` + +#### 发送短信 + +发送短信也是项目中常见的功能,网站的注册码、验证码、营销信息基本上都是通过短信来发送给用户的。在下面的代码中我们使用了[互亿无线](http://www.ihuyi.com/)短信平台(该平台为注册用户提供了50条免费短信以及常用开发语言发送短信的demo,可以登录该网站并在用户自服务页面中对短信进行配置)提供的API接口实现了发送短信的服务,当然国内的短信平台很多,读者可以根据自己的需要进行选择(通常会考虑费用预算、短信达到率、使用的难易程度等指标),如果需要在商业项目中使用短信服务建议购买短信平台提供的套餐服务。 + +```Python +import urllib.parse +import http.client +import json + + +def main(): + host = "106.ihuyi.com" + sms_send_uri = "/webservice/sms.php?method=Submit" + # 下面的参数需要填入自己注册的账号和对应的密码 + params = urllib.parse.urlencode({'account': '你自己的账号', 'password' : '你自己的密码', 'content': '您的验证码是:147258。请不要把验证码泄露给其他人。', 'mobile': '接收者的手机号', 'format':'json' }) + print(params) + headers = {'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'} + conn = http.client.HTTPConnection(host, port=80, timeout=30) + conn.request('POST', sms_send_uri, params, headers) + response = conn.getresponse() + response_str = response.read() + jsonstr = response_str.decode('utf-8') + print(json.loads(jsonstr)) + conn.close() + + +if __name__ == '__main__': + main() +``` \ No newline at end of file diff --git a/Day01-15/Day15/图像和办公文档处理.md b/Day01-15/15.图像和办公文档处理.md similarity index 99% rename from Day01-15/Day15/图像和办公文档处理.md rename to Day01-15/15.图像和办公文档处理.md index d17be26..765afa0 100644 --- a/Day01-15/Day15/图像和办公文档处理.md +++ b/Day01-15/15.图像和办公文档处理.md @@ -76,7 +76,7 @@ Pillow中最为重要的是Image类,读取和处理图像都要通过这个类 ```Python >>> image = Image.open('./res/guido.png') - >>> image.rotata(180).show() + >>> image.rotate(180).show() >>> image.transpose(Image.FLIP_LEFT_RIGHT).show() ``` diff --git a/Day01-15/Day05/总结和练习.md b/Day01-15/Day05/总结和练习.md deleted file mode 100644 index 86baa19..0000000 --- a/Day01-15/Day05/总结和练习.md +++ /dev/null @@ -1,9 +0,0 @@ -## 练习 - -### 练习清单 - -1. 寻找[“水仙花数”](https://baike.baidu.com/item/%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0)。 -2. 寻找[“完美数”](https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913)。 -3. [“百钱百鸡”](https://baike.baidu.com/item/%E7%99%BE%E9%B8%A1%E7%99%BE%E9%92%B1/5857320)问题。 -4. 生成[“斐波拉切数列”](https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145)。 -5. Craps赌博游戏。 \ No newline at end of file diff --git a/Day01-15/Day09/res/uml-example.gliffy b/Day01-15/Day09/res/uml-example.gliffy deleted file mode 100644 index 015163a..0000000 --- a/Day01-15/Day09/res/uml-example.gliffy +++ /dev/null @@ -1 +0,0 @@ -{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":211,"y":179.5,"rotation":0,"id":79,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":60,"height":28,"lockAspectRatio":false,"lockShape":false,"order":71,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

继承关系

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":702,"y":249,"rotation":0,"id":78,"uid":"com.gliffy.shape.uml.uml_v1.default.generalization","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":70,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[82,-4],[50,-4],[50,-69.32485578727801],[18,-69.32485578727801]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":70,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":32,"px":0.9999999999999998,"py":0.7071067811865475}}},"linkMap":[]},{"x":615,"y":70,"rotation":0,"id":77,"uid":"com.gliffy.shape.uml.uml_v1.default.generalization","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":69,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[169,6.75],[137,6.75],[137,70.32485578727798],[105,70.32485578727798]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":63,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":32,"px":1,"py":0.29289321881345237}}},"linkMap":[]},{"x":228,"y":356,"rotation":0,"id":55,"uid":"com.gliffy.shape.uml.uml_v1.default.association","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[202,-46],[202,-22.666666666666686],[202,0.6666666666666856],[202,24]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":24,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":48,"px":0.5,"py":0}}},"linkMap":[]},{"x":667,"y":225,"rotation":0,"id":47,"uid":"com.gliffy.shape.uml.uml_v1.default.aggregation","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":40,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":5,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-17,-17.5],[-17,8.333333333333343],[-17,34.166666666666686],[-17,60]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":32,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":56,"px":0.5,"py":0}}},"linkMap":[]},{"x":403,"y":390,"rotation":0,"id":39,"uid":"com.gliffy.shape.uml.uml_v1.default.dependency","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":6,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[97,-125],[137,-125],[137,-230],[177,-230]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":24,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":32,"px":0,"py":0.5}}},"linkMap":[]},{"x":289,"y":219,"rotation":0,"id":31,"uid":"com.gliffy.shape.uml.uml_v1.default.generalization","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[141,1],[141,-124],[51,-124]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":24,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":0,"px":1,"py":0.5}}},"linkMap":[]},{"x":325,"y":185,"rotation":0,"id":22,"uid":"com.gliffy.shape.uml.uml_v1.default.generalization","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":23,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-55,35],[-55,11.666666666666657],[-55,-11.666666666666657],[-55,-35]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":14,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":0,"px":0.5,"py":1}}},"linkMap":[]},{"x":98,"y":173,"rotation":0,"id":21,"uid":"com.gliffy.shape.uml.uml_v1.default.generalization","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":22,"graphic":{"type":"Line","Line":{"strokeWidth":1,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[12,47],[12,-78],[102,-78]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":7,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":0,"px":0,"py":0.5}}},"linkMap":[]},{"x":200,"y":220,"rotation":0,"id":14,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":75,"lockAspectRatio":false,"lockShape":false,"order":15,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":15,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":16,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Teacher

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":16,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":17,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":18,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

title

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":15,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":18,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":36,"rotation":0,"id":19,"uid":null,"width":140,"height":39,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":20,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

teach

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":14,"magnitude":1},{"id":15,"magnitude":-1},{"id":17,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":17,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":15,"magnitude":1},{"id":17,"magnitude":1},{"id":20,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":40,"y":220,"rotation":0,"id":7,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":8,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":9,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Student

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":9,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":10,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":11,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

grade

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":8,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":11,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":36,"rotation":0,"id":12,"uid":null,"width":140,"height":39,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":13,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

study

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":7,"magnitude":1},{"id":8,"magnitude":-1},{"id":10,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":10,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":8,"magnitude":1},{"id":10,"magnitude":1},{"id":13,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":200,"y":40,"rotation":0,"id":0,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":110,"lockAspectRatio":false,"lockShape":false,"order":1,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":1,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":2,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Person

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":2,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":3,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":4,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

name\n

age

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":1,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":4,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":50,"rotation":0,"id":5,"uid":null,"width":140,"height":60,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":6,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

eat\n

play

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":0,"magnitude":1},{"id":1,"magnitude":-1},{"id":3,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":3,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":1,"magnitude":1},{"id":3,"magnitude":1},{"id":6,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":360,"y":220,"rotation":0,"id":24,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":90,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":25,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":26,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Driver

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":26,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":27,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":28,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

work_experience\n

license

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":25,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":28,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":50,"rotation":0,"id":29,"uid":null,"width":140,"height":40,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":30,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

drive

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":24,"magnitude":1},{"id":25,"magnitude":-1},{"id":27,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":27,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":25,"magnitude":1},{"id":27,"magnitude":1},{"id":30,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":580,"y":112.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":95,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":33,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":34,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Vehicle

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":34,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":35,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":36,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

brand\n

engine

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":33,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":36,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":50,"rotation":0,"id":37,"uid":null,"width":140,"height":45,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":38,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

accelerate\n

slow_down

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":32,"magnitude":1},{"id":33,"magnitude":-1},{"id":35,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":35,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":33,"magnitude":1},{"id":35,"magnitude":1},{"id":38,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":360,"y":380,"rotation":0,"id":48,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":75,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":49,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":50,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

License

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":50,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":51,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":52,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Attribute

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":49,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":52,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":36,"rotation":0,"id":53,"uid":null,"width":140,"height":39,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":54,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Method

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":48,"magnitude":1},{"id":49,"magnitude":-1},{"id":51,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":51,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":49,"magnitude":1},{"id":51,"magnitude":1},{"id":54,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":580,"y":285,"rotation":0,"id":56,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":75,"lockAspectRatio":false,"lockShape":false,"order":48,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":57,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":58,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Engine

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":58,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":59,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":60,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

number

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":57,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":60,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":36,"rotation":0,"id":61,"uid":null,"width":140,"height":39,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":62,"uid":null,"width":140,"height":4,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":56,"magnitude":1},{"id":57,"magnitude":-1},{"id":59,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":59,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":57,"magnitude":1},{"id":59,"magnitude":1},{"id":62,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":784,"y":41,"rotation":0,"id":63,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":71.5,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":64,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":65,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Car

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":65,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":66,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":67,"uid":null,"width":140,"height":32,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

seats\n

displacement

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":64,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":67,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":50,"rotation":0,"id":68,"uid":null,"width":140,"height":21.5,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":69,"uid":null,"width":140,"height":4,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":63,"magnitude":1},{"id":64,"magnitude":-1},{"id":66,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":66,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":64,"magnitude":1},{"id":66,"magnitude":1},{"id":69,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":784,"y":207.5,"rotation":0,"id":70,"uid":"com.gliffy.shape.uml.uml_v1.default.class","width":140,"height":75,"lockAspectRatio":false,"lockShape":false,"order":62,"graphic":null,"children":[{"x":0,"y":0,"rotation":0,"id":71,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":72,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

Truck

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":72,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":18,"rotation":0,"id":73,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":74,"uid":null,"width":140,"height":18,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

capacity

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"PositionConstraint","PositionConstraint":{"nodeId":71,"px":0,"py":1}},{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":74,"magnitude":1}],"growParent":true,"padding":0}}]}},{"x":0,"y":36,"rotation":0,"id":75,"uid":null,"width":140,"height":39,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dropShadow":true,"state":0,"shadowX":4,"shadowY":4,"opacity":1}},"children":[{"x":0,"y":0,"rotation":0,"id":76,"uid":null,"width":140,"height":4,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"top","overflow":"none","vposition":"none","hposition":"none","html":"

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"id":70,"magnitude":1},{"id":71,"magnitude":-1},{"id":73,"magnitude":-1}],"growParent":false,"padding":0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":73,"px":0,"py":1}}]}}],"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"id":71,"magnitude":1},{"id":73,"magnitude":1},{"id":76,"magnitude":1}],"growParent":false,"padding":0}}]},"linkMap":[]},{"x":371,"y":346,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":60,"height":14,"lockAspectRatio":false,"lockShape":false,"order":72,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

关联关系

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":490,"y":186.5,"rotation":0,"id":82,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":60,"height":14,"lockAspectRatio":false,"lockShape":false,"order":73,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

依赖关系

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":591,"y":238,"rotation":0,"id":83,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":60,"height":14,"lockAspectRatio":false,"lockShape":false,"order":74,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

聚合关系

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]}],"background":"#FFFFFF","width":926,"height":455,"maxWidth":5000,"maxHeight":5000,"nodeIndex":84,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{},"lineStyles":{},"textStyles":{},"themeData":null}} \ No newline at end of file diff --git a/Day01-15/Day14-B/网络应用开发.md b/Day01-15/Day14-B/网络应用开发.md deleted file mode 100644 index 09edf81..0000000 --- a/Day01-15/Day14-B/网络应用开发.md +++ /dev/null @@ -1,121 +0,0 @@ -## 网络应用开发 - -### 发送电子邮件 - -在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。 - -就像我们可以用HTTP(超文本传输协议)来访问一个网站一样,发送邮件要使用SMTP(简单邮件传输协议),SMTP也是一个建立在TCP(传输控制协议)提供的可靠数据传输服务的基础上的应用级协议,它规定了邮件的发送者如何跟发送邮件的服务器进行通信的细节,而Python中的smtplib模块将这些操作简化成了几个简单的函数。 - -下面的代码演示了如何在Python发送邮件。 - -```Python -from smtplib import SMTP -from email.header import Header -from email.mime.text import MIMEText - - -def main(): - # 请自行修改下面的邮件发送者和接收者 - sender = 'abcdefg@126.com' - receivers = ['uvwxyz@qq.com', 'uvwxyz@126.com'] - message = MIMEText('用Python发送邮件的示例代码.', 'plain', 'utf-8') - message['From'] = Header('王大锤', 'utf-8') - message['To'] = Header('骆昊', 'utf-8') - message['Subject'] = Header('示例代码实验邮件', 'utf-8') - smtper = SMTP('smtp.126.com') - # 请自行修改下面的登录口令 - smtper.login(sender, 'secretpass') - smtper.sendmail(sender, receivers, message.as_string()) - print('邮件发送完成!') - - -if __name__ == '__main__': - main() -``` - -如果要发送带有附件的邮件,那么可以按照下面的方式进行操作。 - -```Python -from smtplib import SMTP -from email.header import Header -from email.mime.text import MIMEText -from email.mime.image import MIMEImage -from email.mime.multipart import MIMEMultipart - -import urllib - - -def main(): - # 创建一个带附件的邮件消息对象 - message = MIMEMultipart() - - # 创建文本内容 - text_content = MIMEText('附件中有本月数据请查收', 'plain', 'utf-8') - message['Subject'] = Header('本月数据', 'utf-8') - # 将文本内容添加到邮件消息对象中 - message.attach(text_content) - - # 读取文件并将文件作为附件添加到邮件消息对象中 - with open('/Users/Hao/Desktop/hello.txt', 'rb') as f: - txt = MIMEText(f.read(), 'base64', 'utf-8') - txt['Content-Type'] = 'text/plain' - txt['Content-Disposition'] = 'attachment; filename=hello.txt' - message.attach(txt) - # 读取文件并将文件作为附件添加到邮件消息对象中 - with open('/Users/Hao/Desktop/汇总数据.xlsx', 'rb') as f: - xls = MIMEText(f.read(), 'base64', 'utf-8') - xls['Content-Type'] = 'application/vnd.ms-excel' - xls['Content-Disposition'] = 'attachment; filename=month-data.xlsx' - message.attach(xls) - - # 创建SMTP对象 - smtper = SMTP('smtp.126.com') - # 开启安全连接 - # smtper.starttls() - sender = 'abcdefg@126.com' - receivers = ['uvwxyz@qq.com'] - # 登录到SMTP服务器 - # 请注意此处不是使用密码而是邮件客户端授权码进行登录 - # 对此有疑问的读者可以联系自己使用的邮件服务器客服 - smtper.login(sender, 'secretpass') - # 发送邮件 - smtper.sendmail(sender, receivers, message.as_string()) - # 与邮件服务器断开连接 - smtper.quit() - print('发送完成!') - - -if __name__ == '__main__': - main() -``` - -### 发送短信 - -发送短信也是项目中常见的功能,网站的注册码、验证码、营销信息基本上都是通过短信来发送给用户的。在下面的代码中我们使用了[互亿无线](http://www.ihuyi.com/)短信平台(该平台为注册用户提供了50条免费短信以及常用开发语言发送短信的demo,可以登录该网站并在用户自服务页面中对短信进行配置)提供的API接口实现了发送短信的服务,当然国内的短信平台很多,读者可以根据自己的需要进行选择(通常会考虑费用预算、短信达到率、使用的难易程度等指标),如果需要在商业项目中使用短信服务建议购买短信平台提供的套餐服务。 - -```Python -import urllib.parse -import http.client -import json - - -def main(): - host = "106.ihuyi.com" - sms_send_uri = "/webservice/sms.php?method=Submit" - # 下面的参数需要填入自己注册的账号和对应的密码 - params = urllib.parse.urlencode({'account': '你自己的账号', 'password' : '你自己的密码', 'content': '您的验证码是:147258。请不要把验证码泄露给其他人。', 'mobile': '接收者的手机号', 'format':'json' }) - print(params) - headers = {'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'} - conn = http.client.HTTPConnection(host, port=80, timeout=30) - conn.request('POST', sms_send_uri, params, headers) - response = conn.getresponse() - response_str = response.read() - jsonstr = response_str.decode('utf-8') - print(json.loads(jsonstr)) - conn.close() - - -if __name__ == '__main__': - main() -``` - diff --git a/Day01-15/ans/Day01/translation_for_zen_of_python.jpg b/Day01-15/ans/Day01/translation_for_zen_of_python.jpg new file mode 100644 index 0000000..10460d3 Binary files /dev/null and b/Day01-15/ans/Day01/translation_for_zen_of_python.jpg differ diff --git a/Day01-15/Day01/code/hello.py b/Day01-15/code/Day01/hello.py similarity index 56% rename from Day01-15/Day01/code/hello.py rename to Day01-15/code/Day01/hello.py index 5468788..0ff7747 100644 --- a/Day01-15/Day01/code/hello.py +++ b/Day01-15/code/Day01/hello.py @@ -6,8 +6,13 @@ Version: 0.1 Author: 骆昊 Date: 2018-02-26 -请将该文件命名为hello.py并在终端中通过下面的命令运行它 +请将该文件命名为hello.py + +使用Windows的小伙伴可以在命令行提示下通过下面的命令运行该程序 python hello.py + +对于使用Linux或macOS的小伙伴可以打开终端并键入下面的命令来运行程序 +python3 hello.py """ print('hello, world!') diff --git a/Day01-15/Day01/code/peppa_pig.py b/Day01-15/code/Day01/peppa_pig.py similarity index 100% rename from Day01-15/Day01/code/peppa_pig.py rename to Day01-15/code/Day01/peppa_pig.py diff --git a/Day01-15/Day02/code/centigrade.py b/Day01-15/code/Day02/centigrade.py similarity index 100% rename from Day01-15/Day02/code/centigrade.py rename to Day01-15/code/Day02/centigrade.py diff --git a/Day01-15/Day02/code/circle.py b/Day01-15/code/Day02/circle.py similarity index 99% rename from Day01-15/Day02/code/circle.py rename to Day01-15/code/Day02/circle.py index 5581920..314f0bb 100644 --- a/Day01-15/Day02/code/circle.py +++ b/Day01-15/code/Day02/circle.py @@ -5,7 +5,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-02-27 """ - import math radius = float(input('请输入圆的半径: ')) diff --git a/Day01-15/Day02/code/leap.py b/Day01-15/code/Day02/leap.py similarity index 100% rename from Day01-15/Day02/code/leap.py rename to Day01-15/code/Day02/leap.py diff --git a/Day01-15/Day02/code/operator.py b/Day01-15/code/Day02/operator.py similarity index 100% rename from Day01-15/Day02/code/operator.py rename to Day01-15/code/Day02/operator.py diff --git a/Day01-15/Day02/code/string.py b/Day01-15/code/Day02/strings.py similarity index 100% rename from Day01-15/Day02/code/string.py rename to Day01-15/code/Day02/strings.py diff --git a/Day01-15/Day02/code/variable1.py b/Day01-15/code/Day02/variable1.py similarity index 100% rename from Day01-15/Day02/code/variable1.py rename to Day01-15/code/Day02/variable1.py diff --git a/Day01-15/Day02/code/variable2.py b/Day01-15/code/Day02/variable2.py similarity index 100% rename from Day01-15/Day02/code/variable2.py rename to Day01-15/code/Day02/variable2.py diff --git a/Day01-15/Day02/code/variable3.py b/Day01-15/code/Day02/variable3.py similarity index 100% rename from Day01-15/Day02/code/variable3.py rename to Day01-15/code/Day02/variable3.py diff --git a/Day01-15/Day02/code/variable4.py b/Day01-15/code/Day02/variable4.py similarity index 100% rename from Day01-15/Day02/code/variable4.py rename to Day01-15/code/Day02/variable4.py diff --git a/Day01-15/Day02/code/variable5.py b/Day01-15/code/Day02/variable5.py similarity index 100% rename from Day01-15/Day02/code/variable5.py rename to Day01-15/code/Day02/variable5.py diff --git a/Day01-15/Day03/code/convert.py b/Day01-15/code/Day03/conversion.py similarity index 100% rename from Day01-15/Day03/code/convert.py rename to Day01-15/code/Day03/conversion.py diff --git a/Day01-15/Day03/code/grade.py b/Day01-15/code/Day03/grade.py similarity index 74% rename from Day01-15/Day03/code/grade.py rename to Day01-15/code/Day03/grade.py index edf2801..f78a468 100644 --- a/Day01-15/Day03/code/grade.py +++ b/Day01-15/code/Day03/grade.py @@ -1,10 +1,10 @@ """ 百分制成绩转等级制成绩 -90分以上 --> A -80分~89分 --> B -70分~79分 --> C -60分~69分 --> D -60分以下 --> E +90分以上,输出A +80分~89分,输出B +70分~79分,输出C +60分~69分,输出D +60分以下,输出E Version: 0.1 Author: 骆昊 diff --git a/Day01-15/Day03/code/piecewise.py b/Day01-15/code/Day03/piecewise.py similarity index 100% rename from Day01-15/Day03/code/piecewise.py rename to Day01-15/code/Day03/piecewise.py diff --git a/Day01-15/Day03/code/rolldice.py b/Day01-15/code/Day03/rolldice.py similarity index 99% rename from Day01-15/Day03/code/rolldice.py rename to Day01-15/code/Day03/rolldice.py index 42c0942..3a232a7 100644 --- a/Day01-15/Day03/code/rolldice.py +++ b/Day01-15/code/Day03/rolldice.py @@ -5,7 +5,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-02-28 """ - from random import randint face = randint(1, 6) diff --git a/Day01-15/Day03/code/tax.py b/Day01-15/code/Day03/tax.py similarity index 100% rename from Day01-15/Day03/code/tax.py rename to Day01-15/code/Day03/tax.py diff --git a/Day01-15/Day03/code/triangle.py b/Day01-15/code/Day03/triangle.py similarity index 99% rename from Day01-15/Day03/code/triangle.py rename to Day01-15/code/Day03/triangle.py index 539917c..890e082 100644 --- a/Day01-15/Day03/code/triangle.py +++ b/Day01-15/code/Day03/triangle.py @@ -6,7 +6,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-02-28 """ - import math a = float(input('a = ')) diff --git a/Day01-15/Day03/code/verify.py b/Day01-15/code/Day03/verify.py similarity index 99% rename from Day01-15/Day03/code/verify.py rename to Day01-15/code/Day03/verify.py index 3821dbb..d0d162c 100644 --- a/Day01-15/Day03/code/verify.py +++ b/Day01-15/code/Day03/verify.py @@ -5,7 +5,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-02-28 """ - # import getpass # from getpass import getpass # from getpass import * diff --git a/Day01-15/Day04/code/for1.py b/Day01-15/code/Day04/for1.py similarity index 78% rename from Day01-15/Day04/code/for1.py rename to Day01-15/code/Day04/for1.py index 062179a..659724d 100644 --- a/Day01-15/Day04/code/for1.py +++ b/Day01-15/code/Day04/for1.py @@ -8,6 +8,5 @@ Date: 2018-03-01 sum = 0 for x in range(1, 101): - if x % 2 == 0: - sum += x + sum += x print(sum) diff --git a/Day01-15/Day04/code/for2.py b/Day01-15/code/Day04/for2.py similarity index 100% rename from Day01-15/Day04/code/for2.py rename to Day01-15/code/Day04/for2.py diff --git a/Day01-15/Day04/code/for3.py b/Day01-15/code/Day04/for3.py similarity index 100% rename from Day01-15/Day04/code/for3.py rename to Day01-15/code/Day04/for3.py diff --git a/Day01-15/Day04/code/for4.py b/Day01-15/code/Day04/for4.py similarity index 99% rename from Day01-15/Day04/code/for4.py rename to Day01-15/code/Day04/for4.py index 79bc47e..7ae5d25 100644 --- a/Day01-15/Day04/code/for4.py +++ b/Day01-15/code/Day04/for4.py @@ -5,7 +5,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-03-01 """ - from math import sqrt num = int(input('请输入一个正整数: ')) diff --git a/Day01-15/Day04/code/for5.py b/Day01-15/code/Day04/for5.py similarity index 100% rename from Day01-15/Day04/code/for5.py rename to Day01-15/code/Day04/for5.py diff --git a/Day01-15/Day04/code/for6.py b/Day01-15/code/Day04/for6.py similarity index 100% rename from Day01-15/Day04/code/for6.py rename to Day01-15/code/Day04/for6.py diff --git a/Day01-15/Day04/code/while1.py b/Day01-15/code/Day04/while1.py similarity index 100% rename from Day01-15/Day04/code/while1.py rename to Day01-15/code/Day04/while1.py diff --git a/Day01-15/Day04/code/while2.py b/Day01-15/code/Day04/while2.py similarity index 90% rename from Day01-15/Day04/code/while2.py rename to Day01-15/code/Day04/while2.py index ff4a7b3..63a9559 100644 --- a/Day01-15/Day04/code/while2.py +++ b/Day01-15/code/Day04/while2.py @@ -6,8 +6,7 @@ Author: 骆昊 Date: 2018-03-01 """ -sum = 0 -num = 2 +sum, num = 0, 2 while num <= 100: sum += num num += 2 diff --git a/Day01-15/Day05/code/chicken.py b/Day01-15/code/Day05/chicken.py similarity index 89% rename from Day01-15/Day05/code/chicken.py rename to Day01-15/code/Day05/chicken.py index c9e06e3..441b2c2 100644 --- a/Day01-15/Day05/code/chicken.py +++ b/Day01-15/code/Day05/chicken.py @@ -13,5 +13,3 @@ for x in range(0, 20): z = 100 - x - y if 5 * x + 3 * y + z / 3 == 100: print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z)) - -# 要理解程序背后的算法 - 穷举法 diff --git a/Day01-15/Day05/code/craps.py b/Day01-15/code/Day05/craps.py similarity index 99% rename from Day01-15/Day05/code/craps.py rename to Day01-15/code/Day05/craps.py index 27cca1b..b2492bf 100644 --- a/Day01-15/Day05/code/craps.py +++ b/Day01-15/code/Day05/craps.py @@ -11,7 +11,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-03-02 """ - from random import randint money = 1000 diff --git a/Day01-15/Day05/code/fibonacci.py b/Day01-15/code/Day05/fibonacci.py similarity index 87% rename from Day01-15/Day05/code/fibonacci.py rename to Day01-15/code/Day05/fibonacci.py index ca7f345..fdcacbf 100644 --- a/Day01-15/Day05/code/fibonacci.py +++ b/Day01-15/code/Day05/fibonacci.py @@ -10,5 +10,5 @@ Date: 2018-03-02 a = 0 b = 1 for _ in range(20): - (a, b) = (b, a + b) + a, b = b, a + b print(a, end=' ') diff --git a/Day01-15/Day05/code/guess.py b/Day01-15/code/Day05/guess.py similarity index 99% rename from Day01-15/Day05/code/guess.py rename to Day01-15/code/Day05/guess.py index 14794e0..aef847b 100644 --- a/Day01-15/Day05/code/guess.py +++ b/Day01-15/code/Day05/guess.py @@ -7,7 +7,6 @@ Version: 0.1 Author: 骆昊 Date: 2018-03-02 """ - import random answer = random.randint(1, 100) diff --git a/Day01-15/Day05/code/lily.py b/Day01-15/code/Day05/lily.py similarity index 100% rename from Day01-15/Day05/code/lily.py rename to Day01-15/code/Day05/lily.py diff --git a/Day01-15/Day05/code/palindrome.py b/Day01-15/code/Day05/palindrome.py similarity index 100% rename from Day01-15/Day05/code/palindrome.py rename to Day01-15/code/Day05/palindrome.py diff --git a/Day01-15/Day05/code/perfect.py b/Day01-15/code/Day05/perfect.py similarity index 74% rename from Day01-15/Day05/code/perfect.py rename to Day01-15/code/Day05/perfect.py index e798fde..1144ce5 100644 --- a/Day01-15/Day05/code/perfect.py +++ b/Day01-15/code/Day05/perfect.py @@ -10,7 +10,6 @@ Date: 2018-03-02 import time import math -start = time.clock() for num in range(1, 10000): sum = 0 for factor in range(1, int(math.sqrt(num)) + 1): @@ -20,7 +19,3 @@ for num in range(1, 10000): sum += num / factor if sum == num: print(num) -end = time.clock() -print("执行时间:", (end - start), "秒") - -# 通过比较上面两种不同的解决方案的执行时间 意识到优化程序的重要性 diff --git a/Day01-15/Day05/code/prime.py b/Day01-15/code/Day05/prime.py similarity index 100% rename from Day01-15/Day05/code/prime.py rename to Day01-15/code/Day05/prime.py diff --git a/Day01-15/Day05/code/table.py b/Day01-15/code/Day05/table.py similarity index 100% rename from Day01-15/Day05/code/table.py rename to Day01-15/code/Day05/table.py diff --git a/Day01-15/Day06/code/function1.py b/Day01-15/code/Day06/function1.py similarity index 100% rename from Day01-15/Day06/code/function1.py rename to Day01-15/code/Day06/function1.py diff --git a/Day01-15/Day06/code/function2.py b/Day01-15/code/Day06/function2.py similarity index 100% rename from Day01-15/Day06/code/function2.py rename to Day01-15/code/Day06/function2.py diff --git a/Day01-15/Day06/code/function3.py b/Day01-15/code/Day06/function3.py similarity index 100% rename from Day01-15/Day06/code/function3.py rename to Day01-15/code/Day06/function3.py diff --git a/Day01-15/Day06/code/function4.py b/Day01-15/code/Day06/function4.py similarity index 100% rename from Day01-15/Day06/code/function4.py rename to Day01-15/code/Day06/function4.py diff --git a/Day01-15/Day06/code/function5.py b/Day01-15/code/Day06/function5.py similarity index 100% rename from Day01-15/Day06/code/function5.py rename to Day01-15/code/Day06/function5.py diff --git a/Day01-15/Day06/code/function6.py b/Day01-15/code/Day06/function6.py similarity index 100% rename from Day01-15/Day06/code/function6.py rename to Day01-15/code/Day06/function6.py diff --git a/Day01-15/Day07/code/avgscore.py b/Day01-15/code/Day07/avgscore.py similarity index 100% rename from Day01-15/Day07/code/avgscore.py rename to Day01-15/code/Day07/avgscore.py diff --git a/Day01-15/Day07/code/dict1.py b/Day01-15/code/Day07/dict1.py similarity index 100% rename from Day01-15/Day07/code/dict1.py rename to Day01-15/code/Day07/dict1.py diff --git a/Day01-15/Day07/code/dict2.py b/Day01-15/code/Day07/dict2.py similarity index 100% rename from Day01-15/Day07/code/dict2.py rename to Day01-15/code/Day07/dict2.py diff --git a/Day01-15/Day07/code/fibonacci.py b/Day01-15/code/Day07/fibonacci.py similarity index 100% rename from Day01-15/Day07/code/fibonacci.py rename to Day01-15/code/Day07/fibonacci.py diff --git a/Day01-15/Day07/code/findmax.py b/Day01-15/code/Day07/findmax.py similarity index 100% rename from Day01-15/Day07/code/findmax.py rename to Day01-15/code/Day07/findmax.py diff --git a/Day01-15/Day07/code/list1.py b/Day01-15/code/Day07/list1.py similarity index 100% rename from Day01-15/Day07/code/list1.py rename to Day01-15/code/Day07/list1.py diff --git a/Day01-15/Day07/code/list2.py b/Day01-15/code/Day07/list2.py similarity index 100% rename from Day01-15/Day07/code/list2.py rename to Day01-15/code/Day07/list2.py diff --git a/Day01-15/Day07/code/list3.py b/Day01-15/code/Day07/list3.py similarity index 100% rename from Day01-15/Day07/code/list3.py rename to Day01-15/code/Day07/list3.py diff --git a/Day01-15/Day07/code/lottery.py b/Day01-15/code/Day07/lottery.py similarity index 100% rename from Day01-15/Day07/code/lottery.py rename to Day01-15/code/Day07/lottery.py diff --git a/Day01-15/Day07/code/marquee.py b/Day01-15/code/Day07/marquee.py similarity index 100% rename from Day01-15/Day07/code/marquee.py rename to Day01-15/code/Day07/marquee.py diff --git a/Day01-15/Day07/code/scoretable.py b/Day01-15/code/Day07/scoretable.py similarity index 100% rename from Day01-15/Day07/code/scoretable.py rename to Day01-15/code/Day07/scoretable.py diff --git a/Day01-15/Day07/code/set1.py b/Day01-15/code/Day07/set1.py similarity index 100% rename from Day01-15/Day07/code/set1.py rename to Day01-15/code/Day07/set1.py diff --git a/Day01-15/Day07/code/set2.py b/Day01-15/code/Day07/set2.py similarity index 100% rename from Day01-15/Day07/code/set2.py rename to Day01-15/code/Day07/set2.py diff --git a/Day01-15/Day07/code/tic-tac-toe.py b/Day01-15/code/Day07/tic-tac-toe.py similarity index 100% rename from Day01-15/Day07/code/tic-tac-toe.py rename to Day01-15/code/Day07/tic-tac-toe.py diff --git a/Day01-15/Day07/code/tuple.py b/Day01-15/code/Day07/tuple.py similarity index 100% rename from Day01-15/Day07/code/tuple.py rename to Day01-15/code/Day07/tuple.py diff --git a/Day01-15/Day07/code/yanghui.py b/Day01-15/code/Day07/yanghui.py similarity index 100% rename from Day01-15/Day07/code/yanghui.py rename to Day01-15/code/Day07/yanghui.py diff --git a/Day01-15/Day08/code/access.py b/Day01-15/code/Day08/access.py similarity index 100% rename from Day01-15/Day08/code/access.py rename to Day01-15/code/Day08/access.py diff --git a/Day01-15/Day08/code/circle.py b/Day01-15/code/Day08/circle.py similarity index 100% rename from Day01-15/Day08/code/circle.py rename to Day01-15/code/Day08/circle.py diff --git a/Day01-15/Day08/code/clock.py b/Day01-15/code/Day08/clock.py similarity index 100% rename from Day01-15/Day08/code/clock.py rename to Day01-15/code/Day08/clock.py diff --git a/Day01-15/Day08/code/guess.py b/Day01-15/code/Day08/guess.py similarity index 100% rename from Day01-15/Day08/code/guess.py rename to Day01-15/code/Day08/guess.py diff --git a/Day01-15/Day08/code/hack.py b/Day01-15/code/Day08/hack.py similarity index 100% rename from Day01-15/Day08/code/hack.py rename to Day01-15/code/Day08/hack.py diff --git a/Day01-15/Day08/code/rect.py b/Day01-15/code/Day08/rect.py similarity index 100% rename from Day01-15/Day08/code/rect.py rename to Day01-15/code/Day08/rect.py diff --git a/Day01-15/Day08/code/student.py b/Day01-15/code/Day08/student.py similarity index 93% rename from Day01-15/Day08/code/student.py rename to Day01-15/code/Day08/student.py index 9a8d71e..845492d 100644 --- a/Day01-15/Day08/code/student.py +++ b/Day01-15/code/Day08/student.py @@ -28,7 +28,7 @@ class Student(object): if self.age < 18: print('%s只能观看《熊出没》.' % self.name) else: - print('%s正在观看岛国爱情动作片.' % self.name) + print('%s正在观看岛国大电影.' % self.name) def main(): diff --git a/Day01-15/Day09/code/association.py b/Day01-15/code/Day09/association.py similarity index 100% rename from Day01-15/Day09/code/association.py rename to Day01-15/code/Day09/association.py diff --git a/Day01-15/Day09/code/car1.py b/Day01-15/code/Day09/car1.py similarity index 100% rename from Day01-15/Day09/code/car1.py rename to Day01-15/code/Day09/car1.py diff --git a/Day01-15/Day09/code/car2.py b/Day01-15/code/Day09/car2.py similarity index 100% rename from Day01-15/Day09/code/car2.py rename to Day01-15/code/Day09/car2.py diff --git a/Day01-15/Day09/code/clock.py b/Day01-15/code/Day09/clock.py similarity index 100% rename from Day01-15/Day09/code/clock.py rename to Day01-15/code/Day09/clock.py diff --git a/Day01-15/Day09/code/dependency.py b/Day01-15/code/Day09/dependency.py similarity index 100% rename from Day01-15/Day09/code/dependency.py rename to Day01-15/code/Day09/dependency.py diff --git a/Day01-15/Day09/code/diamond.py b/Day01-15/code/Day09/diamond.py similarity index 100% rename from Day01-15/Day09/code/diamond.py rename to Day01-15/code/Day09/diamond.py diff --git a/Day01-15/Day09/code/employee.py b/Day01-15/code/Day09/employee.py similarity index 100% rename from Day01-15/Day09/code/employee.py rename to Day01-15/code/Day09/employee.py diff --git a/Day01-15/Day09/code/multi.py b/Day01-15/code/Day09/multi.py similarity index 100% rename from Day01-15/Day09/code/multi.py rename to Day01-15/code/Day09/multi.py diff --git a/Day01-15/Day09/code/pet.py b/Day01-15/code/Day09/pet.py similarity index 100% rename from Day01-15/Day09/code/pet.py rename to Day01-15/code/Day09/pet.py diff --git a/Day01-15/Day09/code/rational.py b/Day01-15/code/Day09/rational.py similarity index 100% rename from Day01-15/Day09/code/rational.py rename to Day01-15/code/Day09/rational.py diff --git a/Day01-15/Day09/code/shape.py b/Day01-15/code/Day09/shape.py similarity index 100% rename from Day01-15/Day09/code/shape.py rename to Day01-15/code/Day09/shape.py diff --git a/Day01-15/Day09/code/triangle.py b/Day01-15/code/Day09/triangle.py similarity index 100% rename from Day01-15/Day09/code/triangle.py rename to Day01-15/code/Day09/triangle.py diff --git a/Day01-15/Day10/code/ball.py b/Day01-15/code/Day10/ball.py similarity index 100% rename from Day01-15/Day10/code/ball.py rename to Day01-15/code/Day10/ball.py diff --git a/Day01-15/Day10/code/gui1.py b/Day01-15/code/Day10/gui1.py similarity index 100% rename from Day01-15/Day10/code/gui1.py rename to Day01-15/code/Day10/gui1.py diff --git a/Day01-15/Day10/code/gui2.py b/Day01-15/code/Day10/gui2.py similarity index 100% rename from Day01-15/Day10/code/gui2.py rename to Day01-15/code/Day10/gui2.py diff --git a/Day01-15/Day10/code/gui3.py b/Day01-15/code/Day10/gui3.py similarity index 100% rename from Day01-15/Day10/code/gui3.py rename to Day01-15/code/Day10/gui3.py diff --git a/Day01-15/Day10/code/renju.py b/Day01-15/code/Day10/renju.py similarity index 97% rename from Day01-15/Day10/code/renju.py rename to Day01-15/code/Day10/renju.py index 89cea1e..5f8cd88 100644 --- a/Day01-15/Day10/code/renju.py +++ b/Day01-15/code/Day10/renju.py @@ -1,78 +1,78 @@ -import pygame - -EMPTY = 0 -BLACK = 1 -WHITE = 2 - -black_color = [0, 0, 0] -white_color = [255, 255, 255] - - -class RenjuBoard(object): - - def __init__(self): - self._board = [[]] * 15 - self.reset() - - def reset(self): - for row in range(len(self._board)): - self._board[row] = [EMPTY] * 15 - - def move(self, row, col, is_black): - if self._board[row][col] == EMPTY: - self._board[row][col] = BLACK if is_black else WHITE - return True - return False - - def draw(self, screen): - for index in range(1, 16): - pygame.draw.line(screen, black_color, - [40, 40 * index], [600, 40 * index], 1) - pygame.draw.line(screen, black_color, - [40 * index, 40], [40 * index, 600], 1) - pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 4) - pygame.draw.circle(screen, black_color, [320, 320], 5, 0) - pygame.draw.circle(screen, black_color, [160, 160], 5, 0) - pygame.draw.circle(screen, black_color, [480, 480], 5, 0) - pygame.draw.circle(screen, black_color, [480, 160], 5, 0) - pygame.draw.circle(screen, black_color, [160, 480], 5, 0) - for row in range(len(self._board)): - for col in range(len(self._board[row])): - if self._board[row][col] != EMPTY: - ccolor = black_color \ - if self._board[row][col] == BLACK else white_color - pos = [40 * (col + 1), 40 * (row + 1)] - pygame.draw.circle(screen, ccolor, pos, 20, 0) - - -def main(): - board = RenjuBoard() - is_black = True - pygame.init() - pygame.display.set_caption('五子棋') - screen = pygame.display.set_mode([640, 640]) - screen.fill([255, 255, 0]) - board.draw(screen) - pygame.display.flip() - running = True - while running: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False - elif event.type == pygame.KEYUP: - pass - elif event.type == pygame.MOUSEBUTTONDOWN\ - and event.button == 1: - x, y = event.pos - row = round((y - 40) / 40) - col = round((x - 40) / 40) - if board.move(row, col, is_black): - is_black = not is_black - screen.fill([255, 255, 0]) - board.draw(screen) - pygame.display.flip() - pygame.quit() - - -if __name__ == '__main__': - main() +import pygame + +EMPTY = 0 +BLACK = 1 +WHITE = 2 + +black_color = [0, 0, 0] +white_color = [255, 255, 255] + + +class RenjuBoard(object): + + def __init__(self): + self._board = [[]] * 15 + self.reset() + + def reset(self): + for row in range(len(self._board)): + self._board[row] = [EMPTY] * 15 + + def move(self, row, col, is_black): + if self._board[row][col] == EMPTY: + self._board[row][col] = BLACK if is_black else WHITE + return True + return False + + def draw(self, screen): + for index in range(1, 16): + pygame.draw.line(screen, black_color, + [40, 40 * index], [600, 40 * index], 1) + pygame.draw.line(screen, black_color, + [40 * index, 40], [40 * index, 600], 1) + pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 4) + pygame.draw.circle(screen, black_color, [320, 320], 5, 0) + pygame.draw.circle(screen, black_color, [160, 160], 5, 0) + pygame.draw.circle(screen, black_color, [480, 480], 5, 0) + pygame.draw.circle(screen, black_color, [480, 160], 5, 0) + pygame.draw.circle(screen, black_color, [160, 480], 5, 0) + for row in range(len(self._board)): + for col in range(len(self._board[row])): + if self._board[row][col] != EMPTY: + ccolor = black_color \ + if self._board[row][col] == BLACK else white_color + pos = [40 * (col + 1), 40 * (row + 1)] + pygame.draw.circle(screen, ccolor, pos, 20, 0) + + +def main(): + board = RenjuBoard() + is_black = True + pygame.init() + pygame.display.set_caption('五子棋') + screen = pygame.display.set_mode([640, 640]) + screen.fill([255, 255, 0]) + board.draw(screen) + pygame.display.flip() + running = True + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + elif event.type == pygame.KEYUP: + pass + elif event.type == pygame.MOUSEBUTTONDOWN\ + and event.button == 1: + x, y = event.pos + row = round((y - 40) / 40) + col = round((x - 40) / 40) + if board.move(row, col, is_black): + is_black = not is_black + screen.fill([255, 255, 0]) + board.draw(screen) + pygame.display.flip() + pygame.quit() + + +if __name__ == '__main__': + main() diff --git a/Day01-15/Day10/code/snake.py b/Day01-15/code/Day10/snake.py similarity index 96% rename from Day01-15/Day10/code/snake.py rename to Day01-15/code/Day10/snake.py index 71d7148..5147930 100644 --- a/Day01-15/Day10/code/snake.py +++ b/Day01-15/code/Day10/snake.py @@ -1,334 +1,334 @@ -from abc import ABCMeta, abstractmethod -from enum import Enum, unique -from random import randrange -from threading import Thread - -import pygame - - -class Color(object): - """颜色""" - - GRAY = (242, 242, 242) - BLACK = (0, 0, 0) - GREEN = (0, 255, 0) - PINK = (255, 20, 147) - - -@unique -class Direction(Enum): - """方向""" - - UP = 0 - RIGHT = 1 - DOWN = 2 - LEFT = 3 - - -class GameObject(object, metaclass=ABCMeta): - """游戏中的对象""" - - def __init__(self, x=0, y=0, color=Color.BLACK): - """ - 初始化方法 - - :param x: 横坐标 - :param y: 纵坐标 - :param color: 颜色 - """ - self._x = x - self._y = y - self._color = color - - @property - def x(self): - return self._x - - @property - def y(self): - return self._y - - @abstractmethod - def draw(self, screen): - """ - 绘制 - - :param screen: 屏幕 - """ - pass - - -class Wall(GameObject): - """围墙""" - - def __init__(self, x, y, width, height, color=Color.BLACK): - """ - 初始化方法 - - :param x: 横坐标 - :param y: 纵坐标 - :param width: 宽度 - :param height: 高度 - :param color: 颜色 - """ - super().__init__(x, y, color) - self._width = width - self._height = height - - @property - def width(self): - return self._width - - @property - def height(self): - return self._height - - def draw(self, screen): - pygame.draw.rect(screen, self._color, - (self._x, self._y, self._width, self._height), 4) - - -class Food(GameObject): - """食物""" - - def __init__(self, x, y, size, color=Color.PINK): - """ - 初始化方法 - - :param x: 横坐标 - :param y: 纵坐标 - :param size: 大小 - :param color: 颜色 - """ - super().__init__(x, y, color) - self._size = size - self._hidden = False - - def draw(self, screen): - if not self._hidden: - pygame.draw.circle(screen, self._color, - (self._x + self._size // 2, self._y + self._size // 2), - self._size // 2, 0) - self._hidden = not self._hidden - - -class SnakeNode(GameObject): - """蛇身上的节点""" - - def __init__(self, x, y, size, color=Color.GREEN): - """ - 初始化方法 - - :param x: 横坐标 - :param y: 纵坐标 - :param size: 大小 - :param color: 颜色 - """ - super().__init__(x, y, color) - self._size = size - - @property - def size(self): - return self._size - - def draw(self, screen): - pygame.draw.rect(screen, self._color, - (self._x, self._y, self._size, self._size), 0) - pygame.draw.rect(screen, Color.BLACK, - (self._x, self._y, self._size, self._size), 1) - - -class Snake(GameObject): - """蛇""" - - def __init__(self, x, y, size=20, length=5): - """ - 初始化方法 - - :param x: 横坐标 - :param y: 纵坐标 - :param size: 大小 - :param length: 初始长度 - """ - super().__init__() - self._dir = Direction.LEFT - self._nodes = [] - self._alive = True - self._new_dir = None - for index in range(length): - node = SnakeNode(x + index * size, y, size) - self._nodes.append(node) - - @property - def dir(self): - return self._dir - - @property - def alive(self): - return self._alive - - @property - def head(self): - return self._nodes[0] - - def change_dir(self, new_dir): - """ - 改变方向 - - :param new_dir: 新方向 - """ - if new_dir != self._dir and \ - (self._dir.value + new_dir.value) % 2 != 0: - self._new_dir = new_dir - - def move(self): - """移动""" - if self._new_dir: - self._dir, self._new_dir = self._new_dir, None - snake_dir = self._dir - x, y, size = self.head.x, self.head.y, self.head.size - if snake_dir == Direction.UP: - y -= size - elif snake_dir == Direction.RIGHT: - x += size - elif snake_dir == Direction.DOWN: - y += size - else: - x -= size - new_head = SnakeNode(x, y, size) - self._nodes.insert(0, new_head) - self._nodes.pop() - - def collide(self, wall): - """ - 撞墙 - - :param wall: 围墙 - """ - head = self.head - if head.x < wall.x or head.x + head.size > wall.x + wall.width \ - or head.y < wall.y or head.y + head.size > wall.y + wall.height: - self._alive = False - - def eat_food(self, food): - """ - 吃食物 - - :param food: 食物 - - :return: 吃到食物返回True否则返回False - """ - if self.head.x == food.x and self.head.y == food.y: - tail = self._nodes[-1] - self._nodes.append(tail) - return True - return False - - def eat_self(self): - """咬自己""" - for index in range(4, len(self._nodes)): - node = self._nodes[index] - if node.x == self.head.x and node.y == self.head.y: - self._alive = False - - def draw(self, screen): - for node in self._nodes: - node.draw(screen) - - -def main(): - - def refresh(): - """刷新游戏窗口""" - screen.fill(Color.GRAY) - wall.draw(screen) - food.draw(screen) - snake.draw(screen) - pygame.display.flip() - - def handle_key_event(key_event): - """处理按键事件""" - key = key_event.key - if key == pygame.K_F2: - reset_game() - elif key in (pygame.K_a, pygame.K_w, pygame.K_d, pygame.K_s): - if snake.alive: - if key == pygame.K_w: - new_dir = Direction.UP - elif key == pygame.K_d: - new_dir = Direction.RIGHT - elif key == pygame.K_s: - new_dir = Direction.DOWN - else: - new_dir = Direction.LEFT - snake.change_dir(new_dir) - - def create_food(): - """创建食物""" - unit_size = snake.head.size - max_row = wall.height // unit_size - max_col = wall.width // unit_size - row = randrange(0, max_row) - col = randrange(0, max_col) - return Food(wall.x + unit_size * col, wall.y + unit_size * row, unit_size) - - def reset_game(): - """重置游戏""" - nonlocal food, snake - food = create_food() - snake = Snake(250, 290) - - def background_task(): - nonlocal running, food - while running: - if snake.alive: - refresh() - clock.tick(10) - if snake.alive: - snake.move() - snake.collide(wall) - if snake.eat_food(food): - food = create_food() - snake.eat_self() - - """ - class BackgroundTask(Thread): - - def run(self): - nonlocal running, food - while running: - if snake.alive: - refresh() - clock.tick(10) - if snake.alive: - snake.move() - snake.collide(wall) - if snake.eat_food(food): - food = create_food() - snake.eat_self() - """ - - wall = Wall(10, 10, 600, 600) - snake = Snake(250, 290) - food = create_food() - pygame.init() - screen = pygame.display.set_mode((620, 620)) - pygame.display.set_caption('贪吃蛇') - # 创建控制游戏每秒帧数的时钟 - clock = pygame.time.Clock() - running = True - # 启动后台线程负责刷新窗口和让蛇移动 - # BackgroundTask().start() - Thread(target=background_task).start() - # 处理事件的消息循环 - while running: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False - elif event.type == pygame.KEYDOWN: - handle_key_event(event) - pygame.quit() - - -if __name__ == '__main__': - main() +from abc import ABCMeta, abstractmethod +from enum import Enum, unique +from random import randrange +from threading import Thread + +import pygame + + +class Color(object): + """颜色""" + + GRAY = (242, 242, 242) + BLACK = (0, 0, 0) + GREEN = (0, 255, 0) + PINK = (255, 20, 147) + + +@unique +class Direction(Enum): + """方向""" + + UP = 0 + RIGHT = 1 + DOWN = 2 + LEFT = 3 + + +class GameObject(object, metaclass=ABCMeta): + """游戏中的对象""" + + def __init__(self, x=0, y=0, color=Color.BLACK): + """ + 初始化方法 + + :param x: 横坐标 + :param y: 纵坐标 + :param color: 颜色 + """ + self._x = x + self._y = y + self._color = color + + @property + def x(self): + return self._x + + @property + def y(self): + return self._y + + @abstractmethod + def draw(self, screen): + """ + 绘制 + + :param screen: 屏幕 + """ + pass + + +class Wall(GameObject): + """围墙""" + + def __init__(self, x, y, width, height, color=Color.BLACK): + """ + 初始化方法 + + :param x: 横坐标 + :param y: 纵坐标 + :param width: 宽度 + :param height: 高度 + :param color: 颜色 + """ + super().__init__(x, y, color) + self._width = width + self._height = height + + @property + def width(self): + return self._width + + @property + def height(self): + return self._height + + def draw(self, screen): + pygame.draw.rect(screen, self._color, + (self._x, self._y, self._width, self._height), 4) + + +class Food(GameObject): + """食物""" + + def __init__(self, x, y, size, color=Color.PINK): + """ + 初始化方法 + + :param x: 横坐标 + :param y: 纵坐标 + :param size: 大小 + :param color: 颜色 + """ + super().__init__(x, y, color) + self._size = size + self._hidden = False + + def draw(self, screen): + if not self._hidden: + pygame.draw.circle(screen, self._color, + (self._x + self._size // 2, self._y + self._size // 2), + self._size // 2, 0) + self._hidden = not self._hidden + + +class SnakeNode(GameObject): + """蛇身上的节点""" + + def __init__(self, x, y, size, color=Color.GREEN): + """ + 初始化方法 + + :param x: 横坐标 + :param y: 纵坐标 + :param size: 大小 + :param color: 颜色 + """ + super().__init__(x, y, color) + self._size = size + + @property + def size(self): + return self._size + + def draw(self, screen): + pygame.draw.rect(screen, self._color, + (self._x, self._y, self._size, self._size), 0) + pygame.draw.rect(screen, Color.BLACK, + (self._x, self._y, self._size, self._size), 1) + + +class Snake(GameObject): + """蛇""" + + def __init__(self, x, y, size=20, length=5): + """ + 初始化方法 + + :param x: 横坐标 + :param y: 纵坐标 + :param size: 大小 + :param length: 初始长度 + """ + super().__init__() + self._dir = Direction.LEFT + self._nodes = [] + self._alive = True + self._new_dir = None + for index in range(length): + node = SnakeNode(x + index * size, y, size) + self._nodes.append(node) + + @property + def dir(self): + return self._dir + + @property + def alive(self): + return self._alive + + @property + def head(self): + return self._nodes[0] + + def change_dir(self, new_dir): + """ + 改变方向 + + :param new_dir: 新方向 + """ + if new_dir != self._dir and \ + (self._dir.value + new_dir.value) % 2 != 0: + self._new_dir = new_dir + + def move(self): + """移动""" + if self._new_dir: + self._dir, self._new_dir = self._new_dir, None + snake_dir = self._dir + x, y, size = self.head.x, self.head.y, self.head.size + if snake_dir == Direction.UP: + y -= size + elif snake_dir == Direction.RIGHT: + x += size + elif snake_dir == Direction.DOWN: + y += size + else: + x -= size + new_head = SnakeNode(x, y, size) + self._nodes.insert(0, new_head) + self._nodes.pop() + + def collide(self, wall): + """ + 撞墙 + + :param wall: 围墙 + """ + head = self.head + if head.x < wall.x or head.x + head.size > wall.x + wall.width \ + or head.y < wall.y or head.y + head.size > wall.y + wall.height: + self._alive = False + + def eat_food(self, food): + """ + 吃食物 + + :param food: 食物 + + :return: 吃到食物返回True否则返回False + """ + if self.head.x == food.x and self.head.y == food.y: + tail = self._nodes[-1] + self._nodes.append(tail) + return True + return False + + def eat_self(self): + """咬自己""" + for index in range(4, len(self._nodes)): + node = self._nodes[index] + if node.x == self.head.x and node.y == self.head.y: + self._alive = False + + def draw(self, screen): + for node in self._nodes: + node.draw(screen) + + +def main(): + + def refresh(): + """刷新游戏窗口""" + screen.fill(Color.GRAY) + wall.draw(screen) + food.draw(screen) + snake.draw(screen) + pygame.display.flip() + + def handle_key_event(key_event): + """处理按键事件""" + key = key_event.key + if key == pygame.K_F2: + reset_game() + elif key in (pygame.K_a, pygame.K_w, pygame.K_d, pygame.K_s): + if snake.alive: + if key == pygame.K_w: + new_dir = Direction.UP + elif key == pygame.K_d: + new_dir = Direction.RIGHT + elif key == pygame.K_s: + new_dir = Direction.DOWN + else: + new_dir = Direction.LEFT + snake.change_dir(new_dir) + + def create_food(): + """创建食物""" + unit_size = snake.head.size + max_row = wall.height // unit_size + max_col = wall.width // unit_size + row = randrange(0, max_row) + col = randrange(0, max_col) + return Food(wall.x + unit_size * col, wall.y + unit_size * row, unit_size) + + def reset_game(): + """重置游戏""" + nonlocal food, snake + food = create_food() + snake = Snake(250, 290) + + def background_task(): + nonlocal running, food + while running: + if snake.alive: + refresh() + clock.tick(10) + if snake.alive: + snake.move() + snake.collide(wall) + if snake.eat_food(food): + food = create_food() + snake.eat_self() + + """ + class BackgroundTask(Thread): + + def run(self): + nonlocal running, food + while running: + if snake.alive: + refresh() + clock.tick(10) + if snake.alive: + snake.move() + snake.collide(wall) + if snake.eat_food(food): + food = create_food() + snake.eat_self() + """ + + wall = Wall(10, 10, 600, 600) + snake = Snake(250, 290) + food = create_food() + pygame.init() + screen = pygame.display.set_mode((620, 620)) + pygame.display.set_caption('贪吃蛇') + # 创建控制游戏每秒帧数的时钟 + clock = pygame.time.Clock() + running = True + # 启动后台线程负责刷新窗口和让蛇移动 + # BackgroundTask().start() + Thread(target=background_task).start() + # 处理事件的消息循环 + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + elif event.type == pygame.KEYDOWN: + handle_key_event(event) + pygame.quit() + + +if __name__ == '__main__': + main() diff --git a/Day01-15/Day10/code/turtle1.py b/Day01-15/code/Day10/turtle1.py similarity index 100% rename from Day01-15/Day10/code/turtle1.py rename to Day01-15/code/Day10/turtle1.py diff --git a/Day01-15/Day11/code/csv1.py b/Day01-15/code/Day11/csv1.py similarity index 100% rename from Day01-15/Day11/code/csv1.py rename to Day01-15/code/Day11/csv1.py diff --git a/Day01-15/Day11/code/csv2.py b/Day01-15/code/Day11/csv2.py similarity index 100% rename from Day01-15/Day11/code/csv2.py rename to Day01-15/code/Day11/csv2.py diff --git a/Day01-15/Day11/code/ex1.py b/Day01-15/code/Day11/ex1.py similarity index 100% rename from Day01-15/Day11/code/ex1.py rename to Day01-15/code/Day11/ex1.py diff --git a/Day01-15/Day11/code/ex2.py b/Day01-15/code/Day11/ex2.py similarity index 100% rename from Day01-15/Day11/code/ex2.py rename to Day01-15/code/Day11/ex2.py diff --git a/Day01-15/Day11/code/ex3.py b/Day01-15/code/Day11/ex3.py similarity index 100% rename from Day01-15/Day11/code/ex3.py rename to Day01-15/code/Day11/ex3.py diff --git a/Day01-15/Day11/code/ex4.py b/Day01-15/code/Day11/ex4.py similarity index 100% rename from Day01-15/Day11/code/ex4.py rename to Day01-15/code/Day11/ex4.py diff --git a/Day01-15/Day11/code/example.csv b/Day01-15/code/Day11/example.csv similarity index 100% rename from Day01-15/Day11/code/example.csv rename to Day01-15/code/Day11/example.csv diff --git a/Day01-15/Day11/code/file1.py b/Day01-15/code/Day11/file1.py similarity index 100% rename from Day01-15/Day11/code/file1.py rename to Day01-15/code/Day11/file1.py diff --git a/Day01-15/Day11/code/file2.py b/Day01-15/code/Day11/file2.py similarity index 100% rename from Day01-15/Day11/code/file2.py rename to Day01-15/code/Day11/file2.py diff --git a/Day01-15/Day11/code/file3.py b/Day01-15/code/Day11/file3.py similarity index 100% rename from Day01-15/Day11/code/file3.py rename to Day01-15/code/Day11/file3.py diff --git a/Day01-15/Day11/code/file4.py b/Day01-15/code/Day11/file4.py similarity index 100% rename from Day01-15/Day11/code/file4.py rename to Day01-15/code/Day11/file4.py diff --git a/Day01-15/Day11/code/json1.py b/Day01-15/code/Day11/json1.py similarity index 100% rename from Day01-15/Day11/code/json1.py rename to Day01-15/code/Day11/json1.py diff --git a/Day01-15/Day11/code/json2.py b/Day01-15/code/Day11/json2.py similarity index 100% rename from Day01-15/Day11/code/json2.py rename to Day01-15/code/Day11/json2.py diff --git a/Day01-15/Day11/code/mm.jpg b/Day01-15/code/Day11/mm.jpg similarity index 100% rename from Day01-15/Day11/code/mm.jpg rename to Day01-15/code/Day11/mm.jpg diff --git a/Day01-15/Day11/code/pi_million_digits.txt b/Day01-15/code/Day11/pi_million_digits.txt similarity index 100% rename from Day01-15/Day11/code/pi_million_digits.txt rename to Day01-15/code/Day11/pi_million_digits.txt diff --git a/Day01-15/Day11/code/teacher.csv b/Day01-15/code/Day11/teacher.csv similarity index 100% rename from Day01-15/Day11/code/teacher.csv rename to Day01-15/code/Day11/teacher.csv diff --git a/Day01-15/Day11/code/致橡树.txt b/Day01-15/code/Day11/致橡树.txt similarity index 100% rename from Day01-15/Day11/code/致橡树.txt rename to Day01-15/code/Day11/致橡树.txt diff --git a/Day01-15/Day12/code/str1.py b/Day01-15/code/Day12/str1.py similarity index 100% rename from Day01-15/Day12/code/str1.py rename to Day01-15/code/Day12/str1.py diff --git a/Day01-15/Day12/code/str2.py b/Day01-15/code/Day12/str2.py similarity index 100% rename from Day01-15/Day12/code/str2.py rename to Day01-15/code/Day12/str2.py diff --git a/Day01-15/Day12/code/test3.py b/Day01-15/code/Day12/test3.py similarity index 100% rename from Day01-15/Day12/code/test3.py rename to Day01-15/code/Day12/test3.py diff --git a/Day01-15/Day12/code/test4.py b/Day01-15/code/Day12/test4.py similarity index 100% rename from Day01-15/Day12/code/test4.py rename to Day01-15/code/Day12/test4.py diff --git a/Day01-15/Day12/code/test5.py b/Day01-15/code/Day12/test5.py similarity index 100% rename from Day01-15/Day12/code/test5.py rename to Day01-15/code/Day12/test5.py diff --git a/Day01-15/Day13/code/asyncio1.py b/Day01-15/code/Day13/asyncio1.py similarity index 100% rename from Day01-15/Day13/code/asyncio1.py rename to Day01-15/code/Day13/asyncio1.py diff --git a/Day01-15/Day13/code/asyncio2.py b/Day01-15/code/Day13/asyncio2.py similarity index 100% rename from Day01-15/Day13/code/asyncio2.py rename to Day01-15/code/Day13/asyncio2.py diff --git a/Day01-15/Day13/code/asyncio3.py b/Day01-15/code/Day13/asyncio3.py similarity index 100% rename from Day01-15/Day13/code/asyncio3.py rename to Day01-15/code/Day13/asyncio3.py diff --git a/Day01-15/Day13/code/coroutine1.py b/Day01-15/code/Day13/coroutine1.py similarity index 100% rename from Day01-15/Day13/code/coroutine1.py rename to Day01-15/code/Day13/coroutine1.py diff --git a/Day01-15/Day13/code/coroutine2.py b/Day01-15/code/Day13/coroutine2.py similarity index 100% rename from Day01-15/Day13/code/coroutine2.py rename to Day01-15/code/Day13/coroutine2.py diff --git a/Day01-15/Day13/code/generator1.py b/Day01-15/code/Day13/generator1.py similarity index 100% rename from Day01-15/Day13/code/generator1.py rename to Day01-15/code/Day13/generator1.py diff --git a/Day01-15/Day13/code/generator2.py b/Day01-15/code/Day13/generator2.py similarity index 100% rename from Day01-15/Day13/code/generator2.py rename to Day01-15/code/Day13/generator2.py diff --git a/Day01-15/Day13/code/multiprocess1.py b/Day01-15/code/Day13/multiprocess1.py similarity index 100% rename from Day01-15/Day13/code/multiprocess1.py rename to Day01-15/code/Day13/multiprocess1.py diff --git a/Day01-15/Day13/code/multiprocess2.py b/Day01-15/code/Day13/multiprocess2.py similarity index 100% rename from Day01-15/Day13/code/multiprocess2.py rename to Day01-15/code/Day13/multiprocess2.py diff --git a/Day01-15/Day13/code/multiprocess3.py b/Day01-15/code/Day13/multiprocess3.py similarity index 100% rename from Day01-15/Day13/code/multiprocess3.py rename to Day01-15/code/Day13/multiprocess3.py diff --git a/Day01-15/Day13/code/multiprocess4.py b/Day01-15/code/Day13/multiprocess4.py similarity index 100% rename from Day01-15/Day13/code/multiprocess4.py rename to Day01-15/code/Day13/multiprocess4.py diff --git a/Day01-15/Day13/code/multithread1.py b/Day01-15/code/Day13/multithread1.py similarity index 100% rename from Day01-15/Day13/code/multithread1.py rename to Day01-15/code/Day13/multithread1.py diff --git a/Day01-15/Day13/code/multithread2.py b/Day01-15/code/Day13/multithread2.py similarity index 100% rename from Day01-15/Day13/code/multithread2.py rename to Day01-15/code/Day13/multithread2.py diff --git a/Day01-15/Day13/code/multithread3.py b/Day01-15/code/Day13/multithread3.py similarity index 100% rename from Day01-15/Day13/code/multithread3.py rename to Day01-15/code/Day13/multithread3.py diff --git a/Day01-15/Day13/code/multithread4.py b/Day01-15/code/Day13/multithread4.py similarity index 100% rename from Day01-15/Day13/code/multithread4.py rename to Day01-15/code/Day13/multithread4.py diff --git a/Day01-15/Day13/code/multithread5.py b/Day01-15/code/Day13/multithread5.py similarity index 100% rename from Day01-15/Day13/code/multithread5.py rename to Day01-15/code/Day13/multithread5.py diff --git a/Day01-15/Day13/code/multithread6.py b/Day01-15/code/Day13/multithread6.py similarity index 100% rename from Day01-15/Day13/code/multithread6.py rename to Day01-15/code/Day13/multithread6.py diff --git a/Day01-15/Day13/code/singlethread1.py b/Day01-15/code/Day13/singlethread1.py similarity index 100% rename from Day01-15/Day13/code/singlethread1.py rename to Day01-15/code/Day13/singlethread1.py diff --git a/Day01-15/Day13/code/singlethread2.py b/Day01-15/code/Day13/singlethread2.py similarity index 100% rename from Day01-15/Day13/code/singlethread2.py rename to Day01-15/code/Day13/singlethread2.py diff --git a/Day01-15/Day13/code/test2.py b/Day01-15/code/Day13/test2.py similarity index 100% rename from Day01-15/Day13/code/test2.py rename to Day01-15/code/Day13/test2.py diff --git a/Day01-15/Day13/code/test3.py b/Day01-15/code/Day13/test3.py similarity index 100% rename from Day01-15/Day13/code/test3.py rename to Day01-15/code/Day13/test3.py diff --git a/Day01-15/Day14-A/code/chatclient.py b/Day01-15/code/Day14/chatclient.py similarity index 100% rename from Day01-15/Day14-A/code/chatclient.py rename to Day01-15/code/Day14/chatclient.py diff --git a/Day01-15/Day14-A/code/chatserver.py b/Day01-15/code/Day14/chatserver.py similarity index 100% rename from Day01-15/Day14-A/code/chatserver.py rename to Day01-15/code/Day14/chatserver.py diff --git a/Day01-15/Day14-A/code/fileclient.py b/Day01-15/code/Day14/fileclient.py similarity index 100% rename from Day01-15/Day14-A/code/fileclient.py rename to Day01-15/code/Day14/fileclient.py diff --git a/Day01-15/Day14-A/code/fileserver.py b/Day01-15/code/Day14/fileserver.py similarity index 100% rename from Day01-15/Day14-A/code/fileserver.py rename to Day01-15/code/Day14/fileserver.py diff --git a/Day01-15/Day14-A/code/guido.jpg b/Day01-15/code/Day14/guido.jpg similarity index 100% rename from Day01-15/Day14-A/code/guido.jpg rename to Day01-15/code/Day14/guido.jpg diff --git a/Day01-15/Day14-A/code/mmdownloader.py b/Day01-15/code/Day14/mmdownloader.py similarity index 100% rename from Day01-15/Day14-A/code/mmdownloader.py rename to Day01-15/code/Day14/mmdownloader.py diff --git a/Day01-15/Day14-A/code/socket1.py b/Day01-15/code/Day14/socket1.py similarity index 100% rename from Day01-15/Day14-A/code/socket1.py rename to Day01-15/code/Day14/socket1.py diff --git a/Day01-15/Day14-A/code/socket2.py b/Day01-15/code/Day14/socket2.py similarity index 100% rename from Day01-15/Day14-A/code/socket2.py rename to Day01-15/code/Day14/socket2.py diff --git a/Day01-15/Day14-A/code/socket3.py b/Day01-15/code/Day14/socket3.py similarity index 100% rename from Day01-15/Day14-A/code/socket3.py rename to Day01-15/code/Day14/socket3.py diff --git a/Day01-15/Day14-A/code/socket4.py b/Day01-15/code/Day14/socket4.py similarity index 100% rename from Day01-15/Day14-A/code/socket4.py rename to Day01-15/code/Day14/socket4.py diff --git a/Day01-15/Day14-A/code/socket5.py b/Day01-15/code/Day14/socket5.py similarity index 100% rename from Day01-15/Day14-A/code/socket5.py rename to Day01-15/code/Day14/socket5.py diff --git a/Day01-15/Day14-A/code/timeclient.py b/Day01-15/code/Day14/timeclient.py similarity index 100% rename from Day01-15/Day14-A/code/timeclient.py rename to Day01-15/code/Day14/timeclient.py diff --git a/Day01-15/Day14-A/code/timeserver.py b/Day01-15/code/Day14/timeserver.py similarity index 100% rename from Day01-15/Day14-A/code/timeserver.py rename to Day01-15/code/Day14/timeserver.py diff --git a/Day01-15/Day15/code/excel1.py b/Day01-15/code/Day15/excel1.py similarity index 100% rename from Day01-15/Day15/code/excel1.py rename to Day01-15/code/Day15/excel1.py diff --git a/Day01-15/Day15/code/excel2.py b/Day01-15/code/Day15/excel2.py similarity index 100% rename from Day01-15/Day15/code/excel2.py rename to Day01-15/code/Day15/excel2.py diff --git a/Day01-15/Day15/code/pdf1.py b/Day01-15/code/Day15/pdf1.py similarity index 100% rename from Day01-15/Day15/code/pdf1.py rename to Day01-15/code/Day15/pdf1.py diff --git a/Day01-15/Day15/code/pdf2.py b/Day01-15/code/Day15/pdf2.py similarity index 100% rename from Day01-15/Day15/code/pdf2.py rename to Day01-15/code/Day15/pdf2.py diff --git a/Day01-15/Day15/code/pillow1.py b/Day01-15/code/Day15/pillow1.py similarity index 100% rename from Day01-15/Day15/code/pillow1.py rename to Day01-15/code/Day15/pillow1.py diff --git a/Day01-15/Day15/code/res/Docker入门教程.pdf b/Day01-15/code/Day15/res/Docker入门教程.pdf similarity index 100% rename from Day01-15/Day15/code/res/Docker入门教程.pdf rename to Day01-15/code/Day15/res/Docker入门教程.pdf diff --git a/Day01-15/Day15/code/res/guido.jpg b/Day01-15/code/Day15/res/guido.jpg similarity index 100% rename from Day01-15/Day15/code/res/guido.jpg rename to Day01-15/code/Day15/res/guido.jpg diff --git a/Day01-15/Day15/code/res/luohao.png b/Day01-15/code/Day15/res/luohao.png similarity index 100% rename from Day01-15/Day15/code/res/luohao.png rename to Day01-15/code/Day15/res/luohao.png diff --git a/Day01-15/Day15/code/res/学生明细表.xlsx b/Day01-15/code/Day15/res/学生明细表.xlsx similarity index 100% rename from Day01-15/Day15/code/res/学生明细表.xlsx rename to Day01-15/code/Day15/res/学生明细表.xlsx diff --git a/Day01-15/Day15/code/res/用函数还是用复杂的表达式.docx b/Day01-15/code/Day15/res/用函数还是用复杂的表达式.docx similarity index 100% rename from Day01-15/Day15/code/res/用函数还是用复杂的表达式.docx rename to Day01-15/code/Day15/res/用函数还是用复杂的表达式.docx diff --git a/Day01-15/Day15/code/word1.py b/Day01-15/code/Day15/word1.py similarity index 100% rename from Day01-15/Day15/code/word1.py rename to Day01-15/code/Day15/word1.py diff --git a/Day01-15/Day15/code/word2.py b/Day01-15/code/Day15/word2.py similarity index 100% rename from Day01-15/Day15/code/word2.py rename to Day01-15/code/Day15/word2.py diff --git a/Day01-15/Day14-A/res/TCP-IP-model.png b/Day01-15/res/TCP-IP-model.png similarity index 100% rename from Day01-15/Day14-A/res/TCP-IP-model.png rename to Day01-15/res/TCP-IP-model.png diff --git a/Day01-15/Day14-A/res/after-browser.jpg b/Day01-15/res/after-browser.jpg similarity index 100% rename from Day01-15/Day14-A/res/after-browser.jpg rename to Day01-15/res/after-browser.jpg diff --git a/Day01-15/Day14-A/res/arpanet.png b/Day01-15/res/arpanet.png similarity index 100% rename from Day01-15/Day14-A/res/arpanet.png rename to Day01-15/res/arpanet.png diff --git a/Day01-15/Day10/res/ball-game.png b/Day01-15/res/ball-game.png similarity index 100% rename from Day01-15/Day10/res/ball-game.png rename to Day01-15/res/ball-game.png diff --git a/Day01-15/Day10/res/ball.png b/Day01-15/res/ball.png similarity index 100% rename from Day01-15/Day10/res/ball.png rename to Day01-15/res/ball.png diff --git a/Day01-15/Day14-A/res/before-browser.jpg b/Day01-15/res/before-browser.jpg similarity index 100% rename from Day01-15/Day14-A/res/before-browser.jpg rename to Day01-15/res/before-browser.jpg diff --git a/Day01-15/Day14-A/res/browers.jpg b/Day01-15/res/browers.jpg similarity index 100% rename from Day01-15/Day14-A/res/browers.jpg rename to Day01-15/res/browers.jpg diff --git a/Day01-15/Day14-A/res/browser-market-place.jpeg b/Day01-15/res/browser-market-place.jpeg similarity index 100% rename from Day01-15/Day14-A/res/browser-market-place.jpeg rename to Day01-15/res/browser-market-place.jpeg diff --git a/Day01-15/Day07/res/fibonacci-blocks.png b/Day01-15/res/fibonacci-blocks.png similarity index 100% rename from Day01-15/Day07/res/fibonacci-blocks.png rename to Day01-15/res/fibonacci-blocks.png diff --git a/Day01-15/Day11/res/file-open-mode.png b/Day01-15/res/file-open-mode.png similarity index 100% rename from Day01-15/Day11/res/file-open-mode.png rename to Day01-15/res/file-open-mode.png diff --git a/Day01-15/res/formula_1.png b/Day01-15/res/formula_1.png new file mode 100644 index 0000000..5a0a7e2 Binary files /dev/null and b/Day01-15/res/formula_1.png differ diff --git a/Day01-15/res/formula_2.png b/Day01-15/res/formula_2.png new file mode 100644 index 0000000..c21c2ae Binary files /dev/null and b/Day01-15/res/formula_2.png differ diff --git a/Day01-15/res/formula_3.png b/Day01-15/res/formula_3.png new file mode 100644 index 0000000..b9a84ed Binary files /dev/null and b/Day01-15/res/formula_3.png differ diff --git a/Day01-15/res/formula_4.png b/Day01-15/res/formula_4.png new file mode 100644 index 0000000..692fb08 Binary files /dev/null and b/Day01-15/res/formula_4.png differ diff --git a/Day01-15/res/formula_5.png b/Day01-15/res/formula_5.png new file mode 100644 index 0000000..28fad34 Binary files /dev/null and b/Day01-15/res/formula_5.png differ diff --git a/Day01-15/res/formula_6.png b/Day01-15/res/formula_6.png new file mode 100644 index 0000000..86df5da Binary files /dev/null and b/Day01-15/res/formula_6.png differ diff --git a/Day01-15/res/formula_7.png b/Day01-15/res/formula_7.png new file mode 100644 index 0000000..92cd76d Binary files /dev/null and b/Day01-15/res/formula_7.png differ diff --git a/Day01-15/res/formula_8.png b/Day01-15/res/formula_8.png new file mode 100644 index 0000000..a37f92b Binary files /dev/null and b/Day01-15/res/formula_8.png differ diff --git a/Day01-15/Day14-A/res/how-data-is-processed.jpg b/Day01-15/res/how-data-is-processed.jpg similarity index 100% rename from Day01-15/Day14-A/res/how-data-is-processed.jpg rename to Day01-15/res/how-data-is-processed.jpg diff --git a/Day01-15/Day15/res/image-crop.png b/Day01-15/res/image-crop.png similarity index 100% rename from Day01-15/Day15/res/image-crop.png rename to Day01-15/res/image-crop.png diff --git a/Day01-15/Day15/res/image-filter.png b/Day01-15/res/image-filter.png similarity index 100% rename from Day01-15/Day15/res/image-filter.png rename to Day01-15/res/image-filter.png diff --git a/Day01-15/Day15/res/image-paste.png b/Day01-15/res/image-paste.png similarity index 100% rename from Day01-15/Day15/res/image-paste.png rename to Day01-15/res/image-paste.png diff --git a/Day01-15/Day15/res/image-putpixel.png b/Day01-15/res/image-putpixel.png similarity index 100% rename from Day01-15/Day15/res/image-putpixel.png rename to Day01-15/res/image-putpixel.png diff --git a/Day01-15/Day15/res/image-rotate.png b/Day01-15/res/image-rotate.png similarity index 100% rename from Day01-15/Day15/res/image-rotate.png rename to Day01-15/res/image-rotate.png diff --git a/Day01-15/Day15/res/image-show.png b/Day01-15/res/image-show.png similarity index 100% rename from Day01-15/Day15/res/image-show.png rename to Day01-15/res/image-show.png diff --git a/Day01-15/Day15/res/image-thumbnail.png b/Day01-15/res/image-thumbnail.png similarity index 100% rename from Day01-15/Day15/res/image-thumbnail.png rename to Day01-15/res/image-thumbnail.png diff --git a/Day01-15/Day15/res/image-transpose.png b/Day01-15/res/image-transpose.png similarity index 100% rename from Day01-15/Day15/res/image-transpose.png rename to Day01-15/res/image-transpose.png diff --git a/Day01-15/Day07/res/ipython-timeit.png b/Day01-15/res/ipython-timeit.png similarity index 100% rename from Day01-15/Day07/res/ipython-timeit.png rename to Day01-15/res/ipython-timeit.png diff --git a/Day01-15/Day13/res/macos-monitor.png b/Day01-15/res/macos-monitor.png similarity index 100% rename from Day01-15/Day13/res/macos-monitor.png rename to Day01-15/res/macos-monitor.png diff --git a/Day01-15/Day08/res/object-feature.png b/Day01-15/res/object-feature.png similarity index 100% rename from Day01-15/Day08/res/object-feature.png rename to Day01-15/res/object-feature.png diff --git a/Day01-15/Day08/res/oop-zhihu.png b/Day01-15/res/oop-zhihu.png similarity index 100% rename from Day01-15/Day08/res/oop-zhihu.png rename to Day01-15/res/oop-zhihu.png diff --git a/Day01-15/Day14-A/res/osi_rm.gif b/Day01-15/res/osi_rm.gif similarity index 100% rename from Day01-15/Day14-A/res/osi_rm.gif rename to Day01-15/res/osi_rm.gif diff --git a/Day01-15/Day14-A/res/osimodel.png b/Day01-15/res/osimodel.png similarity index 100% rename from Day01-15/Day14-A/res/osimodel.png rename to Day01-15/res/osimodel.png diff --git a/Day01-15/Day01/res/python-idle.png b/Day01-15/res/python-idle.png similarity index 100% rename from Day01-15/Day01/res/python-idle.png rename to Day01-15/res/python-idle.png diff --git a/Day01-15/Day01/res/python-ipython.png b/Day01-15/res/python-ipython.png similarity index 100% rename from Day01-15/Day01/res/python-ipython.png rename to Day01-15/res/python-ipython.png diff --git a/Day01-15/Day01/res/python-jupyter-1.png b/Day01-15/res/python-jupyter-1.png similarity index 100% rename from Day01-15/Day01/res/python-jupyter-1.png rename to Day01-15/res/python-jupyter-1.png diff --git a/Day01-15/Day01/res/python-jupyter-2.png b/Day01-15/res/python-jupyter-2.png similarity index 100% rename from Day01-15/Day01/res/python-jupyter-2.png rename to Day01-15/res/python-jupyter-2.png diff --git a/Day01-15/Day01/res/python-pycharm.png b/Day01-15/res/python-pycharm.png similarity index 100% rename from Day01-15/Day01/res/python-pycharm.png rename to Day01-15/res/python-pycharm.png diff --git a/Day01-15/Day07/res/python-set.png b/Day01-15/res/python-set.png similarity index 100% rename from Day01-15/Day07/res/python-set.png rename to Day01-15/res/python-set.png diff --git a/Day01-15/Day01/res/python-sublime.png b/Day01-15/res/python-sublime.png similarity index 100% rename from Day01-15/Day01/res/python-sublime.png rename to Day01-15/res/python-sublime.png diff --git a/Day01-15/Day14-A/res/tcpipprotocols.png b/Day01-15/res/tcpipprotocols.png similarity index 100% rename from Day01-15/Day14-A/res/tcpipprotocols.png rename to Day01-15/res/tcpipprotocols.png diff --git a/Day01-15/Day12/res/tel-start-number.png b/Day01-15/res/tel-start-number.png similarity index 100% rename from Day01-15/Day12/res/tel-start-number.png rename to Day01-15/res/tel-start-number.png diff --git a/Day01-15/Day14-A/res/telnet.png b/Day01-15/res/telnet.png similarity index 100% rename from Day01-15/Day14-A/res/telnet.png rename to Day01-15/res/telnet.png diff --git a/Day01-15/Day09/res/uml-components.png b/Day01-15/res/uml-components.png similarity index 100% rename from Day01-15/Day09/res/uml-components.png rename to Day01-15/res/uml-components.png diff --git a/Day01-15/Day09/res/uml-example.png b/Day01-15/res/uml-example.png similarity index 100% rename from Day01-15/Day09/res/uml-example.png rename to Day01-15/res/uml-example.png diff --git a/Day16-20/Python语言进阶.md b/Day16-20/16-20.Python语言进阶.md similarity index 99% rename from Day16-20/Python语言进阶.md rename to Day16-20/16-20.Python语言进阶.md index ab7c6fc..b304f6e 100644 --- a/Day16-20/Python语言进阶.md +++ b/Day16-20/16-20.Python语言进阶.md @@ -198,7 +198,8 @@ - 常用算法: - 穷举法 - 又称为暴力破解法,对所有的可能性进行验证,直到找到正确答案。 - - 贪婪法 - 在对问题求解时,总是做出在当前看来是最好的选择,不追求最优解,快速找到满意解。 + - 贪婪法 - 在对问题求解时,总是做出在当前看来 + - 最好的选择,不追求最优解,快速找到满意解。 - 分治法 - 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到可以直接求解的程度,最后将子问题的解进行合并得到原问题的解。 - 回溯法 - 回溯法又称为试探法,按选优条件向前搜索,当搜索到某一步发现原先选择并不优或达不到目标时,就退回一步重新选择。 - 动态规划 - 基本思想也是将待求解问题分解成若干个子问题,先求解并保存这些子问题的解,避免产生大量的重复运算。 @@ -218,7 +219,7 @@ # 第二天A第一个醒来 他将鱼分为5份 扔掉多余的1条 拿走自己的一份 # B第二个醒来 也将鱼分为5份 扔掉多余的1条 拿走自己的一份 # 然后C、D、E依次醒来也按同样的方式分鱼 问他们至少捕了多少条鱼 - fish = 1 + fish = 6 while True: total = fish enough = True @@ -231,7 +232,7 @@ if enough: print(fish) break - fish += 1 + fish += 5 ``` 贪婪法例子:假设小偷有一个背包,最多能装20公斤赃物,他闯入一户人家,发现如下表所示的物品。很显然,他不能把所有物品都装进背包,所以必须确定拿走哪些物品,留下哪些物品。 @@ -555,6 +556,7 @@ ```Python from functools import wraps + from threading import Lock def singleton(cls): @@ -767,6 +769,8 @@ main() ``` + > 说明:上面的代码中使用了Emoji字符来表示扑克牌的四种花色,在某些不支持Emoji字符的系统上可能无法显示。 + - 对象的复制(深复制/深拷贝/深度克隆和浅复制/浅拷贝/影子克隆) - 垃圾回收、循环引用和弱引用 diff --git a/Day16-20/code/example14.py b/Day16-20/code/example14.py index 6749376..216aafd 100644 --- a/Day16-20/code/example14.py +++ b/Day16-20/code/example14.py @@ -11,10 +11,7 @@ import random @unique class Suite(Enum): """花色(枚举)""" - SPADE = 0 - HEART = 1 - CLUB = 2 - DIAMOND = 3 + SPADE, HEART, CLUB, DIAMOND = range(4) def __lt__(self, other): return self.value < other.value diff --git a/Day16-20/code/homework01.py b/Day16-20/code/homework01.py deleted file mode 100644 index c036909..0000000 --- a/Day16-20/code/homework01.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -装饰器的应用 -""" -from functools import wraps -from random import randint -from time import sleep - - -class Retry(): - """让函数可以重试执行的装饰器""" - - def __init__(self, times=3, max_wait=0, errors=(Exception, )): - self.times = times - self.max_wait = max_wait - self.errors = errors - - def __call__(self, func): - - @wraps(func) - def wrapper(*args, **kwargs): - for _ in range(self.times): - try: - return func(*args, **kwargs) - except self.errors: - sleep(randint(self.max_wait)) - - return wrapper - - -def retry(*, times=3, max_wait=0, errors=(Exception, )): - """让函数重试执行的装饰器函数""" - - def decorate(func): - - @wraps(func) - def wrapper(*args, **kwargs): - for _ in range(times): - try: - return func(*args, **kwargs) - except errors: - sleep(randint(max_wait)) - return wrapper - - return decorate - - -# @Retry(max_wait=5) -@retry(max_wait=5) -def get_data_from_url(url): - pass - diff --git a/Day16-20/code/homework02.py b/Day16-20/code/homework02.py deleted file mode 100644 index d59f9fd..0000000 --- a/Day16-20/code/homework02.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -模拟面试编程题 -""" - - -def second_max(items: list, gt=lambda x, y: x > y): - """从列表中找出第二大元素""" - assert len(items) >= 2 - max1, max2 = (items[0], items[1]) \ - if gt(items[0], items[1]) else (items[1], items[0]) - for i in range(2, len(items)): - if gt(max1, items[i]) and gt(items[i], max2): - max2 = items[i] - elif gt(items[i], max1): - max1, max2 = items[i], max1 - return max2 - - -def list_depth(items: list) -> int: - """计算嵌套列表的嵌套深度""" - if isinstance(items, list): - max_depth = 1 - for item in items: - max_depth = max(list_depth(item) + 1, max_depth) - return max_depth - return 0 - - -def main(): - """主函数""" - one_set = {1} - pos, off = 1, 1 - while pos <= 100000000: - pos += off - one_set.add(pos) - off += 1 - num, *poses = map(int, input().split()) - for pos in poses: - print(1 if pos in one_set else 0, end=' ') - # items1 = [38, 95, 27, 95, 88, 73, 61, 50] - # print(second_max(items1)) - # items2 = [[1], [[[2]]],[[3]], 4, [[[[[5, [6]]]]]]] - # print(list_depth(items1)) - # print(list_depth(items2)) - - -if __name__ == '__main__': - main() diff --git a/Day21-30/Web前端概述.md b/Day21-30/21-30.Web前端概述.md similarity index 100% rename from Day21-30/Web前端概述.md rename to Day21-30/21-30.Web前端概述.md diff --git a/Day21-30/code/list_by_javascript.html b/Day21-30/code/list_by_javascript.html new file mode 100644 index 0000000..ade42f1 --- /dev/null +++ b/Day21-30/code/list_by_javascript.html @@ -0,0 +1,119 @@ + + + + + 动态列表 + + + +
+
    +
  • 苹果×
  • +
  • 香蕉×
  • +
  • 榴莲×
  • +
  • 火龙果×
  • +
+
+ + +
+
+ + + \ No newline at end of file diff --git a/Day21-30/code/list_by_jquery.html b/Day21-30/code/list_by_jquery.html new file mode 100644 index 0000000..d6fbc1f --- /dev/null +++ b/Day21-30/code/list_by_jquery.html @@ -0,0 +1,114 @@ + + + + + 动态列表 + + + +
+
    +
  • 苹果×
  • +
  • 香蕉×
  • +
  • 榴莲×
  • +
  • 火龙果×
  • +
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/Day21-30/code/list_by_vue.html b/Day21-30/code/list_by_vue.html new file mode 100644 index 0000000..9aaf795 --- /dev/null +++ b/Day21-30/code/list_by_vue.html @@ -0,0 +1,100 @@ + + + + + 动态列表 + + + +
+
    +
  • + {{ fruit }} + × +
  • +
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/Day21-30/docs/Bulma- Free, open source, & modern CSS framework based on Flexbox.pdf b/Day21-30/docs/Bulma- Free, open source, & modern CSS framework based on Flexbox.pdf deleted file mode 100644 index 6f43df5..0000000 Binary files a/Day21-30/docs/Bulma- Free, open source, & modern CSS framework based on Flexbox.pdf and /dev/null differ diff --git a/Day21-30/docs/Why Vue.mp4 b/Day21-30/docs/Why Vue.mp4 deleted file mode 100644 index 76b7f48..0000000 Binary files a/Day21-30/docs/Why Vue.mp4 and /dev/null differ diff --git a/Day21-30/docs/Why you should use Bulma.mp4 b/Day21-30/docs/Why you should use Bulma.mp4 deleted file mode 100644 index 1112d02..0000000 Binary files a/Day21-30/docs/Why you should use Bulma.mp4 and /dev/null differ diff --git a/Day31-35/31-35.玩转Linux操作系统.md b/Day31-35/31-35.玩转Linux操作系统.md new file mode 100644 index 0000000..c519043 --- /dev/null +++ b/Day31-35/31-35.玩转Linux操作系统.md @@ -0,0 +1,1893 @@ +## 玩转Linux操作系统 + +> 说明:本文中对Linux命令的讲解都是基于名为CentOS的Linux发行版本,我自己使用的是阿里云服务器,系统版本为CentOS Linux release 7.6.1810。不同的Linux发行版本在Shell命令和工具程序上会有一些差别,但是这些差别是很小的。 + +### 操作系统发展史 + +只有硬件没有软件的计算机系统被称之为“裸机”,我们很难用“裸机”来完成计算机日常的工作(如存储和运算),所以必须用特定的软件来控制硬件的工作。最靠近计算机硬件的软件是系统软件,其中最为重要的就是“操作系统”。“操作系统”是控制和管理整个计算机硬件和软件资源、实现资源分配和任务调配、为系统用户以及其他软件提供接口和环境的程序的集合。 + +#### 没有操作系统(手工操作) + +在计算机诞生之初没有操作系统的年代,人们先把程序纸带(或卡片)装上计算机,然后启动输入机把程序送入计算机,接着通过控制台开关启动程序运行。当程序执行完毕,打印机输出计算的结果,用户卸下并取走纸带(或卡片)。第二个用户上机,重复同样的步骤。在整个过程中用户独占机器,CPU等待手工操作,资源利用率极低。 + +#### 批处理系统 + +首先启动计算机上的一个监督程序,在监督程序的控制下,计算机能够自动的、成批的处理一个或多个用户的作业。完成一批作业后,监督程度又从输入机读取作业存入磁带机。按照上面的步骤重复处理任务。监督程序不停的处理各个作业,实现了作业的自动转接,减少了作业的建立时间和手工操作时间,提高了计算机资源的利用率。 批处理系统又可以分为单道批处理系统、多道批处理系统、联机批处理系统、脱机批处理系统。 + +#### 分时系统和实时系统 + +分时系统是把处理器的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。 若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮调度时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的感觉是他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。为了解决分时系统不能及时响应用户指令的情况,又出现了能够在在严格的时间范围内完成事件处理,及时响应随机外部事件的实时系统。 + +#### 通用操作系统 + +1. 1960s:IBM的System/360系列的机器有了统一的操作系统OS/360。 + +2. 1965年:AT&T的贝尔实验室加入GE和MIT的合作计划开始开发MULTICS。 + +3. 1969年:MULTICS项目失败,Ken Tompson赋闲在家,为了玩“Space Travel”游戏用汇编语言在当时已经被淘汰的PDP-7上开发了Unics。 + + > 注:很难想象,Unix这么伟大的系统,居然是一个赋闲在家的程序员(关键是老婆回娘家还带上了孩子)在一台被淘汰的设备上为了玩游戏开发出来的。 + +4. 1970年~1971年:Ken Tompson和Dennis Ritchie用B语言在PDP-11上重写了Unics,并在Brian Kernighan的建议下将其更名为Unix。 + + ![](./res/ken-and-dennis-pdp-11.png) + +5. 1972年~1973年:Dennis Ritchie发明了C语言来取代可移植性较差的B语言,并开启了用C语言重写Unix的工作。 + +6. 1974年:Unix推出了里程碑意义的第5版,几乎完全用C语言来实现。 + +7. 1979年:从Unix第7版开始,AT&T发布新的使用条款,将Unix私有化。 + +8. 1987年:Andrew S. Tanenbaum教授为了能在课堂上为学生讲解操作系统运作的细节,决定在不使用任何AT&T的源代码前提下,自行开发与Unix兼容的操作系统以避免版权上的争议,该系统被命名为Minix。 + + ![](./res/andrew.jpg) + +9. 1991年:Linus Torvalds就读于芬兰赫尔辛基大学期间,尝试在Minix上做一些开发工作,但因为Minix只是作为教学用途的操作系统,功能并不强大,为了方便在学校的新闻组和邮件系统中读写和下载文件,Linus编写了磁盘驱动程序和文件系统,这些东西形成了Linux系统内核的雏形。 + + ![](./res/linus.png) + +下图是Unix操作系统家族的图谱。 + +![](./res/history-of-unix.png) + +### Linux概述 + +Linux是一个通用操作系统。一个操作系统要负责任务调度、内存分配、处理外围设备I/O等操作。操作系统通常由内核(运行其他程序,管理像磁盘、打印机等硬件设备的核心程序)和系统程序(设备驱动、底层库、shell、服务程序等)两部分组成。 + +Linux内核是芬兰人Linus Torvalds开发的,于1991年9月发布。而Linux操作系统作为Internet时代的产物,它是由全世界许多开发者共同合作开发的,是一个自由的操作系统(注意自由和免费并不是同一个概念,想了解二者的差别可以[点击这里](https://www.debian.org/intro/free))。 + +### Linux系统优点 + +1. 通用操作系统,不跟特定的硬件绑定。 +2. 用C语言编写,可移植性强,有内核编程接口。 +3. 支持多用户和多任务,支持安全的分层文件系统。 +4. 大量的实用程序,完善的网络功能以及强大的支持文档。 +5. 可靠的安全性和良好的稳定性,对开发者更友好。 + +### Linux系统发行版本 + +1. [Redhat](https://www.redhat.com/en) +2. [Ubuntu](https://www.ubuntu.com/) +3. [CentOS](https://www.centos.org/) +4. [Fedora](https://getfedora.org/) +5. [Debian](https://www.debian.org/) +6. [openSUSE](https://www.opensuse.org/) + +### 基础命令 + +Linux系统的命令通常都是如下所示的格式: + +```Shell +命令名称 [命名参数] [命令对象] +``` + +1. 获取登录信息 - **w** / **who** / **last**/ **lastb**。 + + ```Shell + [root ~]# w + 23:31:16 up 12:16, 2 users, load average: 0.00, 0.01, 0.05 + USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT + root pts/0 182.139.66.250 23:03 4.00s 0.02s 0.00s w + jackfrue pts/1 182.139.66.250 23:26 3:56 0.00s 0.00s -bash + [root ~]# who + root pts/0 2018-04-12 23:03 (182.139.66.250) + jackfrued pts/1 2018-04-12 23:26 (182.139.66.250) + [root ~]# who am i + root pts/0 2018-04-12 23:03 (182.139.66.250) + [root ~]# who mom likes + root pts/0 2018-04-12 23:03 (182.139.66.250) + [root ~]# last + root pts/0 117.136.63.184 Sun May 26 18:57 still logged in + reboot system boot 3.10.0-957.10.1. Mon May 27 02:52 - 19:10 (-7:-42) + root pts/4 117.136.63.184 Sun May 26 18:51 - crash (08:01) + root pts/4 117.136.63.184 Sun May 26 18:49 - 18:49 (00:00) + root pts/3 117.136.63.183 Sun May 26 18:35 - crash (08:17) + root pts/2 117.136.63.183 Sun May 26 18:34 - crash (08:17) + root pts/0 117.136.63.183 Sun May 26 18:10 - crash (08:42) + ``` + +2. 查看自己使用的Shell - **ps**。 + + Shell也被称为“壳”或“壳程序”,它是用户与操作系统内核交流的翻译官,简单的说就是人与计算机交互的界面和接口。目前很多Linux系统默认的Shell都是bash(Bourne Again SHell),因为它可以使用tab键进行命令和路径补全、可以保存历史命令、可以方便的配置环境变量以及执行批处理操作。 + + ```Shell + [root@izwz97tbgo9lkabnat2lo8z ~]# ps + PID TTY TIME CMD + 3531 pts/0 00:00:00 bash + 3553 pts/0 00:00:00 ps + ``` + +3. 查看命令的说明和位置 - **whatis** / **which** / **whereis**。 + + ```Shell + [root ~]# whatis ps + ps (1) - report a snapshot of the current processes. + [root ~]# whatis python + python (1) - an interpreted, interactive, object-oriented programming language + [root ~]# whereis ps + ps: /usr/bin/ps /usr/share/man/man1/ps.1.gz + [root ~]# whereis python + python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz + [root ~]# which ps + /usr/bin/ps + [root ~]# which python + /usr/bin/python + ``` + +4. 清除屏幕上显示的内容 - **clear**。 + +5. 查看帮助文档 - **man** / **info** / **help** / **apropos**。 + ```Shell + [root@izwz97tbgo9lkabnat2lo8z ~]# ps --help + Usage: + ps [options] + Try 'ps --help ' + or 'ps --help ' + for additional help text. + For more details see ps(1). + [root@izwz97tbgo9lkabnat2lo8z ~]# man ps + PS(1) User Commands PS(1) + NAME + ps - report a snapshot of the current processes. + SYNOPSIS + ps [options] + DESCRIPTION + ... + ``` + +6. 查看系统和主机名 - **uname** / **hostname**。 + + ```Shell + [root@izwz97tbgo9lkabnat2lo8z ~]# uname + Linux + [root@izwz97tbgo9lkabnat2lo8z ~]# hostname + izwz97tbgo9lkabnat2lo8z + [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat /etc/centos-release + CentOS Linux release 7.6.1810 (Core) + ``` + + > 说明:`cat`是连接文件内容并打印到标准输出的命令,后面会讲到该命令;`/etc`是Linux系统上的一个非常重要的目录,它保存了很多的配置文件;`centos-release`是该目录下的一个文件,因为我自己使用的Linux发行版本是CentOS 7.6,因此这里会有一个这样的文件。 + +7. 时间和日期 - **date** / **cal**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# date + Wed Jun 20 12:53:19 CST 2018 + [root@iZwz97tbgo9lkabnat2lo8Z ~]# cal + June 2018 + Su Mo Tu We Th Fr Sa + 1 2 + 3 4 5 6 7 8 9 + 10 11 12 13 14 15 16 + 17 18 19 20 21 22 23 + 24 25 26 27 28 29 30 + [root@iZwz97tbgo9lkabnat2lo8Z ~]# cal 5 2017 + May 2017 + Su Mo Tu We Th Fr Sa + 1 2 3 4 5 6 + 7 8 9 10 11 12 13 + 14 15 16 17 18 19 20 + 21 22 23 24 25 26 27 + 28 29 30 31 + ``` + +8. 重启和关机 - **reboot** / **shutdown**。 + + ```Shell + [root ~]# shutdown -h +5 + Shutdown scheduled for Sun 2019-05-26 19:34:27 CST, use 'shutdown -c' to cancel. + [root ~]# + Broadcast message from root (Sun 2019-05-26 19:29:27 CST): + + The system is going down for power-off at Sun 2019-05-26 19:34:27 CST! + [root ~]# shutdown -c + + Broadcast message from root (Sun 2019-05-26 19:30:22 CST): + + The system shutdown has been cancelled at Sun 2019-05-26 19:31:22 CST! + [root ~]# shutdown -r 23:58 + Shutdown scheduled for Sun 2019-05-26 23:58:00 CST, use 'shutdown -c' to cancel. + [root ~]# shutdown -c + + Broadcast message from root (Sun 2019-05-26 19:31:06 CST): + + The system shutdown has been cancelled at Sun 2019-05-26 19:32:06 CST! + ``` + + > 说明:在执行`shutdown`命令时会向登录系统的用户发出警告,可以在命令后面跟上警告消息来替换默认的警告消息,也可以在`-h`参数后通过`now`来表示立刻关机。 + +9. 退出登录 - **exit** / **logout**。 + +10. 查看历史命令 - **history**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# history + ... + 452 ls + 453 cd Python-3.6.5/ + 454 clear + 455 history + [root@iZwz97tbgo9lkabnat2lo8Z ~]# !454 + ``` + + > 说明:查看到历史命令之后,可以用`!历史命令编号`来重新执行该命令;通过`history -c`可以清除历史命令。 + +### 实用程序 + +#### 文件和文件夹操作 + +1. 创建/删除空目录 - **mkdir** / **rmdir**。 + + ```Shell + [root ~]# mkdir abc + [root ~]# mkdir -p xyz/abc + [root ~]# rmdir abc + ``` + +2. 创建/删除文件 - **touch** / **rm**。 + + ```Shell + [root ~]# touch readme.txt + [root ~]# touch error.txt + [root ~]# rm error.txt + rm: remove regular empty file ‘error.txt’? y + [root ~]# rm -rf xyz + ``` + + - `touch`命令用于创建空白文件或修改文件时间。在Linux系统中一个文件有三种时间: + - 更改内容的时间 - mtime。 + - 更改权限的时间 - ctime。 + - 最后访问时间 - atime。 + - `rm`的几个重要参数: + - `-i`:交互式删除,每个删除项都会进行询问。 + - `-r`:删除目录并递归的删除目录中的文件和目录。 + - `-f`:强制删除,忽略不存在的文件,没有任何提示。 + +3. 切换和查看当前工作目录 - **cd** / **pwd**。 + + > 说明:`cd`命令后面可以跟相对路径(以当前路径作为参照)或绝对路径(以`/`开头)来切换到指定的目录,也可以用`cd ..`来返回上一级目录。请大家想一想,如果要返回到上上一级目录应该给`cd`命令加上什么样的参数呢? + +4. 查看目录内容 - **ls**。 + + - `-l`:以长格式查看文件和目录。 + - `-a`:显示以点开头的文件和目录(隐藏文件)。 + - `-R`:遇到目录要进行递归展开(继续列出目录下面的文件和目录)。 + - `-d`:只列出目录,不列出其他内容。 + - `-S` / `-t`:按大小/时间排序。 + +5. 查看文件内容 - **cat** / **tac** / **head** / **tail** / **more** / **less** / **rev** / **od**。 + + ```Shell + [root ~]# wget http://www.sohu.com/ -O sohu.html + --2018-06-20 18:42:34-- http://www.sohu.com/ + Resolving www.sohu.com (www.sohu.com)... 14.18.240.6 + Connecting to www.sohu.com (www.sohu.com)|14.18.240.6|:80... connected. + HTTP request sent, awaiting response... 200 OK + Length: 212527 (208K) [text/html] + Saving to: ‘sohu.html’ + 100%[==================================================>] 212,527 --.-K/s in 0.03s + 2018-06-20 18:42:34 (7.48 MB/s) - ‘sohu.html’ saved [212527/212527] + [root ~]# cat sohu.html + ... + [root ~]# head -10 sohu.html + + + + 搜狐 + + + + + + [root ~]# tail -2 sohu.html + + + [root ~]# less sohu.html + ... + [root ~]# cat -n sohu.html | more + ... + ``` + + > 说明:上面用到了一个名为`wget`的命令,它是一个网络下载器程序,可以从指定的URL下载资源。 + +6. 拷贝/移动文件 - **cp** / **mv**。 + + ```Shell + [root ~]# mkdir backup + [root ~]# cp sohu.html backup/ + [root ~]# cd backup + [root backup]# ls + sohu.html + [root backup]# mv sohu.html sohu_index.html + [root backup]# ls + sohu_index.html + ``` + +7. 文件重命名 - **rename**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# rename .htm .html *.htm + ``` + +8. 查找文件和查找内容 - **find** / **grep**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# find / -name "*.html" + /root/sohu.html + /root/backup/sohu_index.html + [root@izwz97tbgo9lkabnat2lo8z ~]# find . -atime 7 -type f -print + [root@izwz97tbgo9lkabnat2lo8z ~]# find . -type f -size +2k + [root@izwz97tbgo9lkabnat2lo8z ~]# find . -type f -name "*.swp" -delete + [root@iZwz97tbgo9lkabnat2lo8Z ~]# grep " + 24: + 25: + 26: + 29: + ... + ``` + > 说明:`grep`在搜索字符串时可以使用正则表达式,如果需要使用正则表达式可以用`grep -E`或者直接使用`egrep`。 + +9. 创建链接和查看链接 - **ln** / **readlink**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sohu.html + -rw-r--r-- 1 root root 212131 Jun 20 19:15 sohu.html + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln /root/sohu.html /root/backup/sohu_backup + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sohu.html + -rw-r--r-- 2 root root 212131 Jun 20 19:15 sohu.html + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln /root/sohu.html /root/backup/sohu_backup2 + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sohu.html + -rw-r--r-- 3 root root 212131 Jun 20 19:15 sohu.html + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln -s /etc/centos-release sysinfo + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sysinfo + lrwxrwxrwx 1 root root 19 Jun 20 19:21 sysinfo -> /etc/centos-release + [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat sysinfo + CentOS Linux release 7.4.1708 (Core) + [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat /etc/centos-release + CentOS Linux release 7.4.1708 (Core) + ``` + + > 说明:链接可以分为硬链接和软链接(符号链接)。硬链接可以认为是一个指向文件数据的指针,就像Python中对象的引用计数,每添加一个硬链接,文件的对应链接数就增加1,只有当文件的链接数为0时,文件所对应的存储空间才有可能被其他文件覆盖。我们平常删除文件时其实并没有删除硬盘上的数据,我们删除的只是一个指针,或者说是数据的一条使用记录,所以类似于“文件粉碎机”之类的软件在“粉碎”文件时除了删除文件指针,还会在文件对应的存储区域填入数据来保证文件无法再恢复。软链接类似于Windows系统下的快捷方式,当软链接链接的文件被删除时,软链接也就失效了。 + +10. 压缩/解压缩和归档/解归档 - **gzip** / **gunzip** / **xz**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz + --2018-06-20 19:29:59-- http://download.redis.io/releases/redis-4.0.10.tar.gz + Resolving download.redis.io (download.redis.io)... 109.74.203.151 + Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected. + HTTP request sent, awaiting response... 200 OK + Length: 1738465 (1.7M) [application/x-gzip] + Saving to: ‘redis-4.0.10.tar.gz’ + 100%[==================================================>] 1,738,465 70.1KB/s in 74s + 2018-06-20 19:31:14 (22.9 KB/s) - ‘redis-4.0.10.tar.gz’ saved [1738465/1738465] + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls redis* + redis-4.0.10.tar.gz + [root@iZwz97tbgo9lkabnat2lo8Z ~]# gunzip redis-4.0.10.tar.gz + [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls redis* + redis-4.0.10.tar + ``` + +11. 归档和解归档 - **tar**。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# tar -xvf redis-4.0.10.tar + redis-4.0.10/ + redis-4.0.10/.gitignore + redis-4.0.10/00-RELEASENOTES + redis-4.0.10/BUGS + redis-4.0.10/CONTRIBUTING + redis-4.0.10/COPYING + redis-4.0.10/INSTALL + redis-4.0.10/MANIFESTO + redis-4.0.10/Makefile + redis-4.0.10/README.md + redis-4.0.10/deps/ + redis-4.0.10/deps/Makefile + redis-4.0.10/deps/README.md + ... + ``` + + > 说明:归档(也称为创建归档)和解归档都使用`tar`命令,通常创建归档需要`-cvf`三个参数,其中`c`表示创建(create),`v`表示显示创建归档详情(verbose),`f`表示指定归档的文件(file);解归档需要加上`-xvf`参数,其中`x`表示抽取(extract),其他两个参数跟创建归档相同。 + +12. 将标准输入转成命令行参数 - **xargs**。 + + 下面的命令会将查找当前路径下的html文件,然后通过`xargs`将这些文件作为参数传给`rm`命令,实现查找并删除文件的操作。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# find . -type f -name "*.html" | xargs rm -f + ``` + + 下面的命令将a.txt文件中的多行内容变成一行输出到b.txt文件中,其中`<`表示从a.txt中读取输入,`>`表示将命令的执行结果输出到b.txt中。 + + ```Shell + [root@iZwz97tbgo9lkabnat2lo8Z ~]# xargs < a.txt > b.txt + ``` + + > 说明:这个命令就像上面演示的那样常在管道(实现进程间通信的一种方式)和重定向(重新指定输入输出的位置)操作中用到,后面的内容中会讲到管道操作和输入输出重定向操作。 + +13. 显示文件或目录 - **basename** / **dirname**。 + +14. 其他相关工具。 + + - **sort** - 对内容排序 + - **uniq** - 去掉相邻重复内容 + - **tr** - 替换指定内容为新内容 + - **cut** / **paste** - 剪切/黏贴内容 + - **split** - 拆分文件 + - **file** - 判断文件类型 + - **wc** - 统计文件行数、单词数、字节数 + - **iconv** - 编码转换 + + ```Shell + [root ~]# cat foo.txt + grape + apple + pitaya + [root ~]# cat bar.txt + 100 + 200 + 300 + 400 + [root ~]# paste foo.txt bar.txt + grape 100 + apple 200 + pitaya 300 + 400 + [root ~]# paste foo.txt bar.txt > hello.txt + [root ~]# cut -b 4-8 hello.txt + pe 10 + le 20 + aya 3 + 0 + [root ~]# cat hello.txt | tr '\t' ',' + grape,100 + apple,200 + pitaya,300 + ,400 + [root ~]# split -l 100 sohu.html hello + [root ~]# wget https://www.baidu.com/img/bd_logo1.png + [root ~]# file bd_logo1.png + bd_logo1.png: PNG image data, 540 x 258, 8-bit colormap, non-interlaced + [root ~]# wc sohu.html + 2979 6355 212527 sohu.html + [root ~]# wc -l sohu.html + 2979 sohu.html + [root ~]# wget http://www.qq.com -O qq.html + [root ~]# iconv -f gb2312 -t utf-8 qq.html + ``` + +#### 管道和重定向 + +1. 管道的使用 - **\|**。 + + 例子:查找当前目录下文件个数。 + + ```Shell + [root ~]# find ./ | wc -l + 6152 + ``` + + 例子:列出当前路径下的文件和文件夹,给每一项加一个编号。 + + ```Shell + [root ~]# ls | cat -n + 1 dump.rdb + 2 mongodb-3.6.5 + 3 Python-3.6.5 + 4 redis-3.2.11 + 5 redis.conf + ``` + + 例子:查找record.log中包含AAA,但不包含BBB的记录的总数 + + ```Shell + [root ~]# cat record.log | grep AAA | grep -v BBB | wc -l + ``` + +2. 输出重定向和错误重定向 - **\>** / **>>** / **2\>**。 + + ```Shell + [root ~]# cat readme.txt + banana + apple + grape + apple + grape + watermelon + pear + pitaya + [root ~]# cat readme.txt | sort | uniq > result.txt + [root ~]# cat result.txt + apple + banana + grape + pear + pitaya + watermelon + ``` + +3. 输入重定向 - **\<**。 + + ```Shell + [root ~]# echo 'hello, world!' > hello.txt + [root ~]# wall < hello.txt + [root ~]# + Broadcast message from root (Wed Jun 20 19:43:05 2018): + hello, world! + [root ~]# echo 'I will show you some code.' >> hello.txt + [root ~]# wall < hello.txt + [root ~]# + Broadcast message from root (Wed Jun 20 19:43:55 2018): + hello, world! + I will show you some code. + ``` + +4. 多重定向 - **tee**。 + + 下面的命令除了在终端显示命令`ls`的结果之外,还会追加输出到`ls.txt`文件中。 + + ```Shell + [root ~]# ls | tee -a ls.txt + ``` + +#### 别名 + +1. **alias** + + ```Shell + [root ~]# alias ll='ls -l' + [root ~]# alias frm='rm -rf' + [root ~]# ll + ... + drwxr-xr-x 2 root root 4096 Jun 20 12:52 abc + ... + [root ~]# frm abc + ``` + +2. **unalias** + + ```Shell + [root ~]# unalias frm + [root ~]# frm sohu.html + -bash: frm: command not found + ``` + +#### 文本处理 + +1. 字符流编辑器 - **sed**。 + + sed是操作、过滤和转换文本内容的工具。假设有一个名为fruit.txt的文件,内容如下所示。 + + ```Shell + [root ~]# cat -n fruit.txt + 1 banana + 2 grape + 3 apple + 4 watermelon + 5 orange + ``` + + 接下来,我们在第2行后面添加一个pitaya。 + + ```Shell + [root ~]# sed '2a pitaya' fruit.txt + banana + grape + pitaya + apple + watermelon + orange + ``` + + > 注意:刚才的命令和之前我们讲过的很多命令一样并没有改变fruit.txt文件,而是将添加了新行的内容输出到终端中,如果想保存到fruit.txt中,可以使用输出重定向操作。 + + 在第2行前面插入一个waxberry。 + + ```Shell + [root ~]# sed '2i waxberry' fruit.txt + banana + waxberry + grape + apple + watermelon + orange + ``` + + 删除第3行。 + + ```Shell + [root ~]# sed '3d' fruit.txt + banana + grape + watermelon + orange + ``` + + 删除第2行到第4行。 + + ```Shell + [root ~]# sed '2,4d' fruit.txt + banana + orange + ``` + + 将文本中的字符a替换为@。 + + ```Shell + [root ~]# sed 's#a#@#' fruit.txt + b@nana + gr@pe + @pple + w@termelon + or@nge + ``` + + 将文本中的字符a替换为@,使用全局模式。 + + ```Shell + [root ~]# sed 's#a#@#g' fruit.txt + b@n@n@ + gr@pe + @pple + w@termelon + or@nge + ``` + +2. 模式匹配和处理语言 - **awk**。 + + awk是一种编程语言,也是Linux系统中处理文本最为强大的工具,它的作者之一和现在的维护者就是之前提到过的Brian Kernighan(ken和dmr最亲密的伙伴)。通过该命令可以从文本中提取出指定的列、用正则表达式从文本中取出我们想要的内容、显示指定的行以及进行统计和运算,总之它非常强大。 + + 假设有一个名为fruit2.txt的文件,内容如下所示。 + + ```Shell + [root ~]# cat fruit2.txt + 1 banana 120 + 2 grape 500 + 3 apple 1230 + 4 watermelon 80 + 5 orange 400 + ``` + + 显示文件的第3行。 + + ```Shell + [root ~]# awk 'NR==3' fruit2.txt + 3 apple 1230 + ``` + + 显示文件的第2列。 + + ```Shell + [root ~]# awk '{print $2}' fruit2.txt + banana + grape + apple + watermelon + orange + ``` + + 显示文件的最后一列。 + + ```Shell + [root ~]# awk '{print $NF}' fruit2.txt + 120 + 500 + 1230 + 80 + 400 + ``` + + 输出末尾数字大于等于300的行。 + + ```Shell + [root ~]# awk '{if($3 >= 300) {print $0}}' fruit2.txt + 2 grape 500 + 3 apple 1230 + 5 orange 400 + ``` + + 上面展示的只是awk命令的冰山一角,更多的内容留给读者自己在实践中去探索。 + +### 用户管理 + +1. 创建和删除用户 - **useradd** / **userdel**。 + + ```Shell + [root home]# useradd hellokitty + [root home]# userdel hellokitty + ``` + + - `-d` - 创建用户时为用户指定用户主目录 + - `-g` - 创建用户时指定用户所属的用户组 + +2. 创建和删除用户组 - **groupadd** / **groupdel**。 + + > 说明:用户组主要是为了方便对一个组里面所有用户的管理。 + +3. 修改密码 - **passwd**。 + + ```Shell + [root ~]# passwd hellokitty + New password: + Retype new password: + passwd: all authentication tokens updated successfully. + ``` + + > 说明:输入密码和确认密码没有回显且必须一气呵成的输入完成(不能使用退格键),密码和确认密码需要一致。如果使用`passwd`命令时没有指定命令作用的对象,则表示要修改当前用户的密码。如果想批量修改用户密码,可以使用`chpasswd`命令。 + + - `-l` / `-u` - 锁定/解锁用户。 + - `-d` - 清除用户密码。 + - `-e` - 设置密码立即过期,用户登录时会强制要求修改密码。 + - `-i` - 设置密码过期多少天以后禁用该用户。 + +4. 查看和修改密码有效期 - **chage**。 + + 设置hellokitty用户100天后必须修改密码,过期前15天通知该用户,过期后15天禁用该用户。 + + ```Shell + chage -M 100 -W 15 -I 15 hellokitty + ``` + +5. 切换用户 - **su**。 + + ```Shell + [root ~]# su hellokitty + [hellokitty root]$ + ``` + +6. 以管理员身份执行命令 - **sudo**。 + + ```Shell + [hellokitty ~]$ ls /root + ls: cannot open directory /root: Permission denied + [hellokitty ~]$ sudo ls /root + [sudo] password for hellokitty: + ``` + + > **说明**:如果希望用户能够以管理员身份执行命令,用户必须要出现在sudoers名单中,sudoers文件在 `/etc`目录下,如果希望直接编辑该文件也可以使用下面的命令。 + +7. 编辑sudoers文件 - **visudo**。 + + 这里使用的编辑器是vi,关于vi的知识在后面有讲解。该文件的部分内容如下所示: + + ``` + ## Allow root to run any commands anywhere + root ALL=(ALL) ALL + + ## Allows members of the 'sys' group to run networking, software, + ## service management apps and more. + # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS + ## Allows people in group wheel to run all commands + %wheel ALL=(ALL) ALL + + ## Same thing without a password + # %wheel ALL=(ALL) NOPASSWD: ALL + + ## Allows members of the users group to mount and unmount the + ## cdrom as root + # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom + + ## Allows members of the users group to shutdown this system + # %users localhost=/sbin/shutdown -h now + ``` + +8. 显示用户与用户组的信息 - **id**。 + +9. 给其他用户发消息 -**write** / **wall**。 + + 发送方: + + ```Shell + [root ~]# write hellokitty + Dinner is on me. + Call me at 6pm. + ``` + + 接收方: + + ```Shell + [hellokitty ~]$ + Message from root on pts/0 at 17:41 ... + Dinner is on me. + Call me at 6pm. + EOF + ``` + +10. 查看/设置是否接收其他用户发送的消息 - **mesg**。 + + ```Shell + [hellokitty ~]$ mesg + is y + [hellokitty ~]$ mesg n + [hellokitty ~]$ mesg + is n + ``` + +### 文件系统 + +#### 文件和路径 + +1. 命名规则:文件名的最大长度与文件系统类型有关,一般情况下,文件名不应该超过255个字符,虽然绝大多数的字符都可以用于文件名,但是最好使用英文大小写字母、数字、下划线、点这样的符号。文件名中虽然可以使用空格,但应该尽可能避免使用空格,否则在输入文件名时需要用将文件名放在双引号中或者通过`\`对空格进行转义。 +2. 扩展名:在Linux系统下文件的扩展名是可选的,但是使用扩展名有助于对文件内容的理解。有些应用程序要通过扩展名来识别文件,但是更多的应用程序并不依赖文件的扩展名,就像`file`命令在识别文件时并不是依据扩展名来判定文件的类型。 +3. 隐藏文件:以点开头的文件在Linux系统中是隐藏文件(不可见文件)。 + +#### 目录结构 + +1. /bin - 基本命令的二进制文件。 +2. /boot - 引导加载程序的静态文件。 +3. /dev - 设备文件。 +4. **/etc** - 配置文件。 +5. /home - 普通用户主目录的父目录。 +6. /lib - 共享库文件。 +7. /lib64 - 共享64位库文件。 +8. /lost+found - 存放未链接文件。 +9. /media - 自动识别设备的挂载目录。 +10. /mnt - 临时挂载文件系统的挂载点。 +11. /opt - 可选插件软件包安装位置。 +12. /proc - 内核和进程信息。 +13. **/root** - 超级管理员用户主目录。 +14. /run - 存放系统运行时需要的东西。 +15. /sbin - 超级用户的二进制文件。 +16. /sys - 设备的伪文件系统。 +17. /tmp - 临时文件夹。 +18. **/usr** - 用户应用目录。 +19. /var - 变量数据目录。 + +#### 访问权限 + +1. **chmod** - 改变文件模式比特。 + + ```Shell + [root ~]# ls -l + ... + -rw-r--r-- 1 root root 211878 Jun 19 16:06 sohu.html + ... + [root ~]# chmod g+w,o+w sohu.html + [root ~]# ls -l + ... + -rw-rw-rw- 1 root root 211878 Jun 19 16:06 sohu.html + ... + [root ~]# chmod 644 sohu.html + [root ~]# ls -l + ... + -rw-r--r-- 1 root root 211878 Jun 19 16:06 sohu.html + ... + ``` + > 说明:通过上面的例子可以看出,用`chmod`改变文件模式比特有两种方式:一种是字符设定法,另一种是数字设定法。除了`chmod`之外,可以通过`umask`来设定哪些权限将在新文件的默认权限中被删除。 + + 长格式查看目录或文件时显示结果及其对应权限的数值如下表所示。 + + ![](./res/file-mode.png) + +2. **chown** - 改变文件所有者。 + + ```Shell + [root ~]# ls -l + ... + -rw-r--r-- 1 root root 54 Jun 20 10:06 readme.txt + ... + [root ~]# chown hellokitty readme.txt + [root ~]# ls -l + ... + -rw-r--r-- 1 hellokitty root 54 Jun 20 10:06 readme.txt + ... + ``` + +3. **chgrp** - 改变用户组。 + +#### 磁盘管理 + +1. 列出文件系统的磁盘使用状况 - **df**。 + + ```Shell + [root ~]# df -h + Filesystem Size Used Avail Use% Mounted on + /dev/vda1 40G 5.0G 33G 14% / + devtmpfs 486M 0 486M 0% /dev + tmpfs 497M 0 497M 0% /dev/shm + tmpfs 497M 356K 496M 1% /run + tmpfs 497M 0 497M 0% /sys/fs/cgroup + tmpfs 100M 0 100M 0% /run/user/0 + ``` + +2. 磁盘分区表操作 - **fdisk**。 + + ```Shell + [root ~]# fdisk -l + Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disk label type: dos + Disk identifier: 0x000a42f4 + Device Boot Start End Blocks Id System + /dev/vda1 * 2048 83884031 41940992 83 Linux + Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors + Units = sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + ``` + +3. 磁盘分区工具 - **parted**。 + +4. 格式化文件系统 - **mkfs**。 + + ```Shell + [root ~]# mkfs -t ext4 -v /dev/sdb + ``` + + - `-t` - 指定文件系统的类型。 + - `-c` - 创建文件系统时检查磁盘损坏情况。 + - `-v` - 显示详细信息。 + +5. 文件系统检查 - **fsck**。 + +6. 转换或拷贝文件 - **dd**。 + +7. 挂载/卸载 - **mount** / **umount**。 + +8. 创建/激活/关闭交换分区 - **mkswap** / **swapon** / **swapoff**。 + +> 说明:执行上面这些命令会带有一定的风险,如果不清楚这些命令的用法,最好不用随意使用,在使用的过程中,最好对照参考资料进行操作,并在操作前确认是否要这么做。 + +### 编辑器 - vim + +1. 启动vim。可以通过`vi`或`vim`命令来启动vim,启动时可以指定文件名来打开一个文件,如果没有指定文件名,也可以在保存的时候指定文件名。 + + ```Shell + [root ~]# vim guess.py + ``` + +2. 命令模式、编辑模式和末行模式:启动vim进入的是命令模式(也称为Normal模式),在命令模式下输入英文字母`i`会进入编辑模式(Insert模式),屏幕下方出现`-- INSERT --`提示;在编辑模式下按下`Esc`会回到命令模式,此时如果输入英文`:`会进入末行模式,在末行模式下输入`q!`可以在不保存当前工作的情况下强行退出vim;在命令模式下输入`v`会进入可视模式(Visual模式),可以用光标选择一个区域再完成对应的操作。 + +3. 保存和退出vim:在命令模式下输入`:` 进入末行模式,输入`wq`可以实现保存退出;如果想放弃编辑的内容输入`q!`强行退出,这一点刚才已经提到过了;在命令模式下也可以直接输入`ZZ`实现保存退出。如果只想保存文件不退出,那么可以在末行模式下输入`w`;可以在`w`后面输入空格再指定要保存的文件名。 + +4. 光标操作。 + + - 在命令模式下可以通过`h`、`j`、`k`、`l`来控制光标向左、下、上、右的方向移动,可以在字母前输入数字来表示移动的距离,例如:`10h`表示向左移动10个字符。 + - 在命令模式下可以通过`Ctrl+y`和`Ctrl+e`来实现向上、向下滚动一行文本的操作,可以通过`Ctrl+f`和`Ctrl+b`来实现向前和向后翻页的操作。 + - 在命令模式下可以通过输入英文字母`G`将光标移到文件的末尾,可以通过`gg`将光标移到文件的开始,也可以通过在`G`前输入数字来将光标移动到指定的行。 + +5. 文本操作。 + + - 删除:在命令模式下可以用`dd`来删除整行;可以在`dd`前加数字来指定删除的行数;可以用`d$`来实现删除从光标处删到行尾的操作,也可以通过`d0`来实现从光标处删到行首的操作;如果想删除一个单词,可以使用`dw`;如果要删除全文,可以在输入`:%d`(其中`:`用来从命令模式进入末行模式)。 + - 复制和粘贴:在命令模式下可以用`yy`来复制整行;可以在`yy`前加数字来指定复制的行数;可以通过`p`将复制的内容粘贴到光标所在的地方。 + - 撤销和恢复:在命令模式下输入`u`可以撤销之前的操作;通过`Ctrl+r`可以恢复被撤销的操作。 + - 对内容进行排序:在命令模式下输入`%!sort`。 + +6. 查找和替换。 + + - 查找操作需要输入`/`进入末行模式并提供正则表达式来匹配与之对应的内容,例如:`/doc.*\.`,输入`n`来向前搜索,也可以输入`N`来向后搜索。 + - 替换操作需要输入`:`进入末行模式并指定搜索的范围、正则表达式以及替换后的内容和匹配选项,例如:`:1,$s/doc.*/hello/gice`,其中: + - `g` - global:全局匹配。 + - `i` - ignore case:忽略大小写匹配。 + - `c` - confirm:替换时需要确认。 + - `e` - error:忽略错误。 + +7. 参数设定:在输入`:`进入末行模式后可以对vim进行设定。 + + - 设置Tab键的空格数:`set ts=4` + + - 设置显示/不显示行号:`set nu` / `set nonu` + + - 设置启用/关闭高亮语法:`syntax on` / `syntax off` + + - 设置显示标尺(光标所在的行和列): `set ruler` + + - 设置启用/关闭搜索结果高亮:`set hls` / `set nohls` + + > 说明:如果希望上面的这些设定在每次启动vim时都能自动生效,需要将这些设定写到用户主目录下的.vimrc文件中。 + +8. 高级技巧 + + - 比较多个文件。 + + ```Shell + [root ~]# vim -d foo.txt bar.txt + ``` + ![](./res/vim-diff.png) + + - 打开多个文件。 + + ```Shell + [root ~]# vim foo.txt bar.txt hello.txt + ``` + + 启动vim后只有一个窗口显示的是foo.txt,可以在末行模式中输入`ls`查看到打开的三个文件,也可以在末行模式中输入`b `来显示另一个文件,例如可以用`:b 2`将bar.txt显示出来,可以用`:b 3`将hello.txt显示出来。 + + - 拆分和切换窗口。 + + 可以在末行模式中输入`sp`或`vs`来实现对窗口的水平或垂直拆分,这样我们就可以同时打开多个编辑窗口,通过按两次`Ctrl+w`就可以实现编辑窗口的切换,在一个窗口中执行退出操作只会关闭对应的窗口,其他的窗口继续保留。 + + ![](./res/vim-multi-window.png) + + - 映射快捷键:在vim下可以将一些常用操作映射为快捷键来提升工作效率。 + - 例子1:在命令模式下输入`F4`执行从第一行开始删除10000行代码的操作。 + + `:map gg10000dd`。 + + 例子2:在编辑模式下输入`__main`直接补全为`if __name__ == '__main__':`。 + + `:inoremap __main if __name__ == '__main__':` + + > 说明:上面例子2的`inoremap`中的`i`表示映射的键在编辑模式使用, `nore`表示不要递归,这一点非常重要,否则如果键对应的内容中又出现键本身,就会引发递归(相当于进入了死循环)。如果希望映射的快捷键每次启动vim时都能生效,需要将映射写到用户主目录下的.vimrc文件中。 + + - 录制宏。 + + - 在命令模式下输入`qa`开始录制宏(其中`a`是寄存器的名字,也可以是其他英文字母或0-9的数字)。 + + - 执行你的操作(光标操作、编辑操作等),这些操作都会被录制下来。 + + - 如果录制的操作已经完成了,按`q`结束录制。 + + - 通过`@a`(`a`是刚才使用的寄存器的名字)播放宏,如果要多次执行宏可以在前面加数字,例如`100@a`表示将宏播放100次。 + + - 可以试一试下面的例子来体验录制宏的操作,该例子来源于[Harttle Land网站](https://harttle.land/tags.html#Vim),该网站上提供了很多关于vim的使用技巧,有兴趣的可以了解一下。 + + ![](./res/vim-macro.png) + +### 软件安装和配置 + +#### 使用包管理工具 + +1. **yum** - Yellowdog Updater Modified。 + - `yum search`:搜索软件包,例如`yum search nginx`。 + - `yum list installed`:列出已经安装的软件包,例如`yum list installed | grep zlib`。 + - `yum install`:安装软件包,例如`yum install nginx`。 + - `yum remove`:删除软件包,例如`yum remove nginx`。 + - `yum update`:更新软件包,例如`yum update`可以更新所有软件包,而`yum update tar`只会更新tar。 + - `yum check-update`:检查有哪些可以更新的软件包。 + - `yum info`:显示软件包的相关信息,例如`yum info nginx`。 +2. **rpm** - Redhat Package Manager。 + - 安装软件包:`rpm -ivh .rpm`。 + - 移除软件包:`rpm -e `。 + - 查询软件包:`rpm -qa`,例如可以用`rpm -qa | grep mysql`来检查是否安装了MySQL相关的软件包。 + +下面以Nginx为例,演示如何使用yum安装软件。 + +```Shell +[root ~]# yum -y install nginx +... +Installed: + nginx.x86_64 1:1.12.2-2.el7 +Dependency Installed: + nginx-all-modules.noarch 1:1.12.2-2.el7 + nginx-mod-http-geoip.x86_64 1:1.12.2-2.el7 + nginx-mod-http-image-filter.x86_64 1:1.12.2-2.el7 + nginx-mod-http-perl.x86_64 1:1.12.2-2.el7 + nginx-mod-http-xslt-filter.x86_64 1:1.12.2-2.el7 + nginx-mod-mail.x86_64 1:1.12.2-2.el7 + nginx-mod-stream.x86_64 1:1.12.2-2.el7 +Complete! +[root ~]# yum info nginx +Loaded plugins: fastestmirror +Loading mirror speeds from cached hostfile +Installed Packages +Name : nginx +Arch : x86_64 +Epoch : 1 +Version : 1.12.2 +Release : 2.el7 +Size : 1.5 M +Repo : installed +From repo : epel +Summary : A high performance web server and reverse proxy server +URL : http://nginx.org/ +License : BSD +Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and + : IMAP protocols, with a strong focus on high concurrency, performance and low + : memory usage. +[root ~]# nginx -v +nginx version: nginx/1.12.2 +``` + +移除Nginx。 + +```Shell +[root ~]# yum -y remove nginx +``` + +下面以MySQL为例,演示如何使用rpm安装软件。要安装MySQL需要先到[MySQL官方网站](https://www.mysql.com/)下载对应的[RPM文件](https://dev.mysql.com/downloads/mysql/),当然要选择和你使用的Linux系统对应的版本。MySQL现在是Oracle公司旗下的产品,在MySQL被收购后,MySQL的作者重新制作了一个MySQL的分支MariaDB,可以通过yum进行安装。 + +```Shell +[root mysql]# ls +mysql-community-client-5.7.22-1.el7.x86_64.rpm +mysql-community-common-5.7.22-1.el7.x86_64.rpm +mysql-community-libs-5.7.22-1.el7.x86_64.rpm +mysql-community-server-5.7.22-1.el7.x86_64.rpm +[root mysql]# yum -y remove mariadb-libs +[root mysql]# yum -y install libaio +[root mysql]#rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm +... +[root mysql]#rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm +... +[root mysql]#rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm +... +[root mysql]#rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm +... +``` + +> 说明:由于MySQL和[MariaDB](https://mariadb.org/)的底层依赖库是有冲突的,所以上面我们首先用`yum`移除了名为mariadb-libs的依赖库并安装了名为libaio支持异步I/O操作的依赖库。关于MySQL和MariaDB之间的关系,可以阅读[维基百科](https://zh.wikipedia.org/wiki/MariaDB)上关于MariaDB的介绍。 + +移除安装的MySQL。 + +```Shell +[root ~]# rpm -qa | grep mysql | xargs rpm -e +``` + +#### 下载解压配置环境变量 + +下面以安装MongoDB为例,演示这类软件应该如何安装。 + +```Shell +[root ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz +--2018-06-21 18:32:53-- https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz +Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 52.85.83.16, 52.85.83.228, 52.85.83.186, ... +Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|52.85.83.16|:443... connected. +HTTP request sent, awaiting response... 200 OK +Length: 100564462 (96M) [application/x-gzip] +Saving to: ‘mongodb-linux-x86_64-rhel70-3.6.5.tgz’ +100%[==================================================>] 100,564,462 630KB/s in 2m 9s +2018-06-21 18:35:04 (760 KB/s) - ‘mongodb-linux-x86_64-rhel70-3.6.5.tgz’ saved [100564462/100564462] +[root ~]# gunzip mongodb-linux-x86_64-rhel70-3.6.5.tgz +[root ~]# tar -xvf mongodb-linux-x86_64-rhel70-3.6.5.tar +mongodb-linux-x86_64-rhel70-3.6.5/README +mongodb-linux-x86_64-rhel70-3.6.5/THIRD-PARTY-NOTICES +mongodb-linux-x86_64-rhel70-3.6.5/MPL-2 +mongodb-linux-x86_64-rhel70-3.6.5/GNU-AGPL-3.0 +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongodump +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongorestore +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoexport +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoimport +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongostat +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongotop +mongodb-linux-x86_64-rhel70-3.6.5/bin/bsondump +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongofiles +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoreplay +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoperf +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongod +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongos +mongodb-linux-x86_64-rhel70-3.6.5/bin/mongo +mongodb-linux-x86_64-rhel70-3.6.5/bin/install_compass +[root ~]# vim .bash_profile +... +PATH=$PATH:$HOME/bin:$HOME/mongodb-linux-x86_64-rhel70-3.6.5/bin +export PATH +... +[root ~]# source .bash_profile +[root ~]# mongod --version +db version v3.6.5 +git version: a20ecd3e3a174162052ff99913bc2ca9a839d618 +OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 +allocator: tcmalloc +modules: none +build environment: + distmod: rhel70 + distarch: x86_64 + target_arch: x86_64 +[root ~]# mongo --version +MongoDB shell version v3.6.5 +git version: a20ecd3e3a174162052ff99913bc2ca9a839d618 +OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 +allocator: tcmalloc +modules: none +build environment: + distmod: rhel70 + distarch: x86_64 + target_arch: x86_64 +``` + +> 说明:当然也可以通过yum来安装MongoDB,具体可以参照[官方网站](https://docs.mongodb.com/master/administration/install-on-linux/)上给出的说明。 + +#### 源代码构建安装 + +1. 安装Python 3.6。 + + ```Shell + [root ~]# yum install gcc + [root ~]# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz + [root ~]# gunzip Python-3.6.5.tgz + [root ~]# tar -xvf Python-3.6.5.tar + [root ~]# cd Python-3.6.5 + [root ~]# ./configure --prefix=/usr/local/python36 --enable-optimizations + [root ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel + [root ~]# make && make install + ... + [root ~]# ln -s /usr/local/python36/bin/python3.6 /usr/bin/python3 + [root ~]# python3 --version + Python 3.6.5 + [root ~]# python3 -m pip install -U pip + [root ~]# pip3 --version + ``` + + > 说明:上面在安装好Python之后还需要注册PATH环境变量,将Python安装路径下bin文件夹的绝对路径注册到PATH环境变量中。注册环境变量可以修改用户主目录下的.bash_profile或者/etc目录下的profile文件,二者的区别在于前者相当于是用户环境变量,而后者相当于是系统环境变量。 + +2. 安装Redis-3.2.12。 + + ```Shell + [root ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz + [root ~]# gunzip redis-3.2.12.tar.gz + [root ~]# tar -xvf redis-3.2.12.tar + [root ~]# cd redis-3.2.12 + [root ~]# make && make install + [root ~]# redis-server --version + Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=5bc5cd3c03d6ceb6 + [root ~]# redis-cli --version + redis-cli 3.2.12 + ``` + +### 配置服务 + +我们可以Linux系统下安装和配置各种服务,也就是说我们可以把Linux系统打造成数据库服务器、Web服务器、缓存服务器、文件服务器、消息队列服务器等等。Linux下的大多数服务都被设置为守护进程(驻留在系统后台运行,但不会因为服务还在运行而导致Linux无法停止运行),所以我们安装的服务通常名字后面都有一个字母`d`,它是英文单词`daemon`的缩写,例如:防火墙服务叫firewalld,我们之前安装的MySQL服务叫mysqld,Apache服务器叫httpd等。在安装好服务之后,可以使用`systemctl`命令或`service`命令来完成对服务的启动、停止等操作,具体操作如下所示。 + +1. 启动防火墙服务。 + + ```Shell + [root ~]# systemctl start firewalld + ``` + +2. 终止防火墙服务。 + + ```Shell + [root ~]# systemctl stop firewalld + ``` + +3. 重启防火墙服务。 + + ```Shell + [root ~]# systemctl restart firewalld + ``` + +4. 查看防火墙服务状态。 + + ```Shell + [root ~]# systemctl status firewalld + ``` + +5. 设置/禁用防火墙服务开机自启。 + + ```Shell + [root ~]# systemctl enable firewalld + Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service. + Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service. + [root ~]# systemctl disable firewalld + Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. + Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. + ``` + +### 计划任务 + +1. 在指定的时间执行命令 + + - **at** - 将任务排队,在指定的时间执行。 + - **atq** - 查看待执行的任务队列。 + - **atrm** - 从队列中删除待执行的任务。 + + 指定3天以后下午5点要执行的任务。 + + ```Shell + [root ~]# at 5pm+3days + at> rm -f /root/*.html + at> + job 9 at Wed Jun 5 17:00:00 2019 + ``` + + 查看待执行的任务队列。 + + ```Shell + [root ~]# atq + 9 Wed Jun 5 17:00:00 2019 a root + ``` + + 从队列中删除指定的任务。 + + ```Shell + [root ~]$ atrm 9 + ``` + +2. 计划任务表 - **crontab**。 + + ```Shell + [root ~]# crontab -e + * * * * * echo "hello, world!" >> /root/hello.txt + 59 23 * * * rm -f /root/*.log + ``` + > 说明:输入`crontab -e`命令会打开vim来编辑Cron表达式并指定触发的任务,上面我们定制了两个计划任务,一个是每分钟向/root目录下的hello.txt中追加输出`hello, world!`;另一个是每天23时59分执行删除/root目录下以log为后缀名的文件。如果不知道Cron表达式如何书写,可以参照/etc/crontab文件中的提示(下面会讲到)或者用搜索引擎找一下“Cron表达式在线生成器”来生成Cron表达式。 + + 和crontab相关的文件在`/etc`目录下,通过修改`/etc`目录下的crontab文件也能够定制计划任务。 + + ```Shell + [root ~]# cd /etc + [root etc]# ls -l | grep cron + -rw-------. 1 root root 541 Aug 3 2017 anacrontab + drwxr-xr-x. 2 root root 4096 Mar 27 11:56 cron.d + drwxr-xr-x. 2 root root 4096 Mar 27 11:51 cron.daily + -rw-------. 1 root root 0 Aug 3 2017 cron.deny + drwxr-xr-x. 2 root root 4096 Mar 27 11:50 cron.hourly + drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.monthly + -rw-r--r-- 1 root root 493 Jun 23 15:09 crontab + drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.weekly + [root etc]# vim crontab + 1 SHELL=/bin/bash + 2 PATH=/sbin:/bin:/usr/sbin:/usr/bin + 3 MAILTO=root + 4 + 5 # For details see man 4 crontabs + 6 + 7 # Example of job definition: + 8 # .---------------- minute (0 - 59) + 9 # | .------------- hour (0 - 23) + 10 # | | .---------- day of month (1 - 31) + 11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... + 12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat + 13 # | | | | | + 14 # * * * * * user-name command to be executed + ``` + + +### 网络访问和管理 + +1. 安全远程连接 - **ssh**。 + + ```Shell + [root ~]$ ssh root@120.77.222.217 + The authenticity of host '120.77.222.217 (120.77.222.217)' can't be established. + ECDSA key fingerprint is SHA256:BhUhykv+FvnIL03I9cLRpWpaCxI91m9n7zBWrcXRa8w. + ECDSA key fingerprint is MD5:cc:85:e9:f0:d7:07:1a:26:41:92:77:6b:7f:a0:92:65. + Are you sure you want to continue connecting (yes/no)? yes + Warning: Permanently added '120.77.222.217' (ECDSA) to the list of known hosts. + root@120.77.222.217's password: + ``` + +2. 通过网络获取资源 - **wget**。 + + - -b 后台下载模式 + - -O 下载到指定的目录 + - -r 递归下载 + +3. 发送和接收邮件 - **mail**。 + +4. 网络配置工具(旧) - **ifconfig**。 + + ```Shell + [root ~]# ifconfig eth0 + eth0: flags=4163 mtu 1500 + inet 172.18.61.250 netmask 255.255.240.0 broadcast 172.18.63.255 + ether 00:16:3e:02:b6:46 txqueuelen 1000 (Ethernet) + RX packets 1067841 bytes 1296732947 (1.2 GiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 409912 bytes 43569163 (41.5 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions + ``` + +5. 网络配置工具(新) - **ip**。 + + ```Shell + [root ~]# ip address + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 + link/ether 00:16:3e:02:b6:46 brd ff:ff:ff:ff:ff:ff + inet 172.18.61.250/20 brd 172.18.63.255 scope global eth0 + valid_lft forever preferred_lft forever + ``` + +6. 网络可达性检查 - **ping**。 + + ```Shell + [root ~]# ping www.baidu.com -c 3 + PING www.a.shifen.com (220.181.111.188) 56(84) bytes of data. + 64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=1 ttl=51 time=36.3 ms + 64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=2 ttl=51 time=36.4 ms + 64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=3 ttl=51 time=36.4 ms + --- www.a.shifen.com ping statistics --- + 3 packets transmitted, 3 received, 0% packet loss, time 2002ms + rtt min/avg/max/mdev = 36.392/36.406/36.427/0.156 ms + ``` + +7. 显示或管理路由表 - **route**。 + +8. 查看网络服务和端口 - **netstat** / **ss**。 + + ```Shell + [root ~]# netstat -nap | grep nginx + ``` + +9. 网络监听抓包 - **tcpdump**。 + +10. 安全文件拷贝 - **scp**。 + + ```Shell + [root ~]# scp root@1.2.3.4:/root/guido.jpg hellokitty@4.3.2.1:/home/hellokitty/pic.jpg + ``` + +11. 文件同步工具 - **rsync**。 + + > 说明:使用`rsync`可以实现文件的自动同步,这个对于文件服务器来说相当重要。关于这个命令的用法,我们在后面讲项目部署的时候为大家详细说明。 + +12. 安全文件传输 - **sftp**。 + + ```Shell + [root ~]# sftp root@1.2.3.4 + root@1.2.3.4's password: + Connected to 1.2.3.4. + sftp> + ``` + + - `help`:显示帮助信息。 + + - `ls`/`lls`:显示远端/本地目录列表。 + + - `cd`/`lcd`:切换远端/本地路径。 + + - `mkdir`/`lmkdir`:创建远端/本地目录。 + + - `pwd`/`lpwd`:显示远端/本地当前工作目录。 + + - `get`:下载文件。 + + - `put`:上传文件。 + + - `rm`:删除远端文件。 + + - `bye`/`exit`/`quit`:退出sftp。 + +### 进程管理 + +1. 查看进程 - **ps**。 + + ```Shell + [root ~]# ps -ef + UID PID PPID C STIME TTY TIME CMD + root 1 0 0 Jun23 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 + root 2 0 0 Jun23 ? 00:00:00 [kthreadd] + ... + [root ~]# ps -ef | grep mysqld + root 4943 4581 0 22:45 pts/0 00:00:00 grep --color=auto mysqld + mysql 25257 1 0 Jun25 ? 00:00:39 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid + ``` + +2. 显示进程状态树 - **pstree**。 + + ```Shell + [root ~]# pstree + systemd─┬─AliYunDun───18*[{AliYunDun}] + ├─AliYunDunUpdate───3*[{AliYunDunUpdate}] + ├─2*[agetty] + ├─aliyun-service───2*[{aliyun-service}] + ├─atd + ├─auditd───{auditd} + ├─dbus-daemon + ├─dhclient + ├─irqbalance + ├─lvmetad + ├─mysqld───28*[{mysqld}] + ├─nginx───2*[nginx] + ├─ntpd + ├─polkitd───6*[{polkitd}] + ├─rsyslogd───2*[{rsyslogd}] + ├─sshd───sshd───bash───pstree + ├─systemd-journal + ├─systemd-logind + ├─systemd-udevd + └─tuned───4*[{tuned}] + ``` + +3. 查找与指定条件匹配的进程 - **pgrep**。 + + ```Shell + [root ~]$ pgrep mysqld + 3584 + ``` + +4. 通过进程号终止进程 - **kill**。 + + ```Shell + [root ~]$ kill -l + 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP + 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 + 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM + 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP + 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ + 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR + 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 + 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 + 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 + 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 + 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 + 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 + 63) SIGRTMAX-1 64) SIGRTMAX + [root ~]# kill 1234 + [root ~]# kill -9 1234 + ``` + + 例子:用一条命令强制终止正在运行的Redis进程。 + + ```Shell + ps -ef | grep redis | grep -v grep | awk '{print $2}' | xargs kill + ``` + +5. 通过进程名终止进程 - **killall** / **pkill**。 + + 结束名为mysqld的进程。 + + ```Shell + [root ~]# pkill mysqld + ``` + + 结束hellokitty用户的所有进程。 + + ```Shell + [root ~]# pkill -u hellokitty + ``` + + > 说明:这样的操作会让hellokitty用户和服务器断开连接。 + +6. 将进程置于后台运行。 + + - `Ctrl+Z` - 快捷键,用于停止进程并置于后台。 + - `&` - 将进程置于后台运行。 + + ```Shell + [root ~]# mongod & + [root ~]# redis-server + ... + ^Z + [4]+ Stopped redis-server + ``` + +7. 查询后台进程 - **jobs**。 + + ```Shell + [root ~]# jobs + [2] Running mongod & + [3]- Stopped cat + [4]+ Stopped redis-server + ``` + +8. 让进程在后台继续运行 - **bg**。 + + ```Shell + [root ~]# bg %4 + [4]+ redis-server & + [root ~]# jobs + [2] Running mongod & + [3]+ Stopped cat + [4]- Running redis-server & + ``` + +9. 将后台进程置于前台 - **fg**。 + + ```Shell + [root ~]# fg %4 + redis-server + ``` + + > 说明:置于前台的进程可以使用`Ctrl+C`来终止它。 + +10. 调整程序/进程运行时优先级 - **nice** / **renice**。 + +11. 用户登出后进程继续工作 - **nohup**。 + + ```Shell + [root ~]# nohup ping www.baidu.com > result.txt & + ``` + +12. 跟踪进程系统调用情况 - **strace**。 + + ```Shell + [root ~]# pgrep mysqld + 8803 + [root ~]# strace -c -p 8803 + strace: Process 8803 attached + ^Cstrace: Process 8803 detached + % time seconds usecs/call calls errors syscall + ------ ----------- ----------- --------- --------- ---------------- + 99.18 0.005719 5719 1 restart_syscall + 0.49 0.000028 28 1 mprotect + 0.24 0.000014 14 1 clone + 0.05 0.000003 3 1 mmap + 0.03 0.000002 2 1 accept + ------ ----------- ----------- --------- --------- ---------------- + 100.00 0.005766 5 total + ``` + + > 说明:这个命令的用法和参数都比较复杂,建议大家在真正用到这个命令的时候再根据实际需要进行了解。 + +13. 查看当前运行级别 - **runlevel**。 + + ```Shell + [root ~]# runlevel + N 3 + ``` + +14. 实时监控进程占用资源状况 - **top**。 + + ```Shell + [root ~]# top + top - 23:04:23 up 3 days, 14:10, 1 user, load average: 0.00, 0.01, 0.05 + Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie + %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st + KiB Mem : 1016168 total, 191060 free, 324700 used, 500408 buff/cache + KiB Swap: 0 total, 0 free, 0 used. 530944 avail Mem + ... + ``` + + - `-c` - 显示进程的整个路径。 + - `-d` - 指定两次刷屏之间的间隔时间(秒为单位)。 + - `-i` - 不显示闲置进程或僵尸进程。 + - `-p` - 显示指定进程的信息。 + +### 系统诊断 + +1. 系统启动异常诊断 - **dmesg**。 + +2. 查看系统活动信息 - **sar**。 + + ```Shell + [root ~]# sar -u -r 5 10 + Linux 3.10.0-957.10.1.el7.x86_64 (izwz97tbgo9lkabnat2lo8z) 06/02/2019 _x86_64_ (2 CPU) + + 06:48:30 PM CPU %user %nice %system %iowait %steal %idle + 06:48:35 PM all 0.10 0.00 0.10 0.00 0.00 99.80 + + 06:48:30 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty + 06:48:35 PM 1772012 2108392 54.33 102816 1634528 784940 20.23 793328 1164704 0 + ``` + + - `-A` - 显示所有设备(CPU、内存、磁盘)的运行状况。 + - `-u` - 显示所有CPU的负载情况。 + - `-d` - 显示所有磁盘的使用情况。 + - `-r` - 显示内存的使用情况。 + - `-n` - 显示网络运行状态。 + +3. 查看内存使用情况 - **free**。 + + ```Shell + [root ~]# free + total used free shared buff/cache available + Mem: 1016168 323924 190452 356 501792 531800 + Swap: 0 0 0 + ``` + +4. 虚拟内存统计 - **vmstat**。 + + ```Shell + [root ~]# vmstat + procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- + r b swpd free buff cache si so bi bo in cs us sy id wa st + 2 0 0 204020 79036 667532 0 0 5 18 101 58 1 0 99 0 0 + ``` + +5. CPU信息统计 - **mpstat**。 + + ```Shell + [root ~]# mpstat + Linux 3.10.0-957.5.1.el7.x86_64 (iZ8vba0s66jjlfmo601w4xZ) 05/30/2019 _x86_64_ (1 CPU) + + 01:51:54 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle + 01:51:54 AM all 0.71 0.00 0.17 0.04 0.00 0.00 0.00 0.00 0.00 99.07 + ``` + +6. 查看进程使用内存状况 - **pmap**。 + + ```Shell + [root ~]# ps + PID TTY TIME CMD + 4581 pts/0 00:00:00 bash + 5664 pts/0 00:00:00 ps + [root ~]# pmap 4581 + 4581: -bash + 0000000000400000 884K r-x-- bash + 00000000006dc000 4K r---- bash + 00000000006dd000 36K rw--- bash + 00000000006e6000 24K rw--- [ anon ] + 0000000001de0000 400K rw--- [ anon ] + 00007f82fe805000 48K r-x-- libnss_files-2.17.so + 00007f82fe811000 2044K ----- libnss_files-2.17.so + ... + ``` + +7. 报告设备CPU和I/O统计信息 - **iostat**。 + + ```Shell + [root ~]# iostat + Linux 3.10.0-693.11.1.el7.x86_64 (iZwz97tbgo9lkabnat2lo8Z) 06/26/2018 _x86_64_ (1 CPU) + avg-cpu: %user %nice %system %iowait %steal %idle + 0.79 0.00 0.20 0.04 0.00 98.97 + Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn + vda 0.85 6.78 21.32 2106565 6623024 + vdb 0.00 0.01 0.00 2088 0 + ``` + +8. 显示所有PCI设备 - **lspci**。 + + ```Shell + [root ~]# lspci + 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) + 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] + 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] + 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) + 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) + 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 + 00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device + 00:04.0 Communication controller: Red Hat, Inc. Virtio console + 00:05.0 SCSI storage controller: Red Hat, Inc. Virtio block device + 00:06.0 SCSI storage controller: Red Hat, Inc. Virtio block device + 00:07.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon + ``` + +9. 显示进程间通信设施的状态 - **ipcs**。 + + ```Shell + [root ~]# ipcs + + ------ Message Queues -------- + key msqid owner perms used-bytes messages + + ------ Shared Memory Segments -------- + key shmid owner perms bytes nattch status + + ------ Semaphore Arrays -------- + key semid owner perms nsems + ``` + +### Shell编程 + +之前我们提到过,Shell是一个连接用户和操作系统的应用程序,它提供了人机交互的界面(接口),用户通过这个界面访问操作系统内核的服务。Shell脚本是一种为Shell编写的脚本程序,我们可以通过Shell脚本来进行系统管理,同时也可以通过它进行文件操作。总之,编写Shell脚本对于使用Linux系统的人来说,应该是一项标配技能。 + +互联网上有大量关于Shell脚本的相关知识,我不打算再此对Shell脚本做一个全面系统的讲解,我们通过下面的代码来感性的认识下Shell脚本就行了。 + +例子1:输入两个整数m和n,计算从m到n的整数求和的结果。 + +```Shell +#!/usr/bin/bash +printf 'm = ' +read m +printf 'n = ' +read n +a=$m +sum=0 +while [ $a -le $n ] +do + sum=$[ sum + a ] + a=$[ a + 1 ] +done +echo '结果: '$sum +``` + +例子2:自动创建文件夹和指定数量的文件。 + +```Shell +#!/usr/bin/bash +printf '输入文件名: ' +read file +printf '输入文件数量(<1000): ' +read num +if [ $num -ge 1000 ] +then + echo '文件数量不能超过1000' +else + if [ -e $dir -a -d $dir ] + then + rm -rf $dir + else + if [ -e $dir -a -f $dir ] + then + rm -f $dir + fi + fi + mkdir -p $dir + index=1 + while [ $index -le $num ] + do + if [ $index -lt 10 ] + then + pre='00' + elif [ $index -lt 100 ] + then + pre='0' + else + pre='' + fi + touch $dir'/'$file'_'$pre$index + index=$[ index + 1 ] + done +fi +``` + +例子3:自动安装指定版本的Redis。 + +```Shell +#!/usr/bin/bash +install_redis() { + if ! which redis-server > /dev/null + then + cd /root + wget $1$2'.tar.gz' >> install.log + gunzip /root/$2'.tar.gz' + tar -xf /root/$2'.tar' + cd /root/$2 + make >> install.log + make install >> install.log + echo '安装完成' + else + echo '已经安装过Redis' + fi +} + +install_redis 'http://download.redis.io/releases/' $1 +``` + +### 相关资源 + +1. Linux命令行常用快捷键 + + | 快捷键 | 功能说明 | + | ---------- | -------------------------------------------- | + | tab | 自动补全命令或路径 | + | Ctrl+a | 将光标移动到命令行行首 | + | Ctrl+e | 将光标移动到命令行行尾 | + | Ctrl+f | 将光标向右移动一个字符 | + | Ctrl+b | 将光标向左移动一个字符 | + | Ctrl+k | 剪切从光标到行尾的字符 | + | Ctrl+u | 剪切从光标到行首的字符 | + | Ctrl+w | 剪切光标前面的一个单词 | + | Ctrl+y | 复制剪切命名剪切的内容 | + | Ctrl+c | 中断正在执行的任务 | + | Ctrl+h | 删除光标前面的一个字符 | + | Ctrl+d | 退出当前命令行 | + | Ctrl+r | 搜索历史命令 | + | Ctrl+g | 退出历史命令搜索 | + | Ctrl+l | 清除屏幕上所有内容在屏幕的最上方开启一个新行 | + | Ctrl+s | 锁定终端使之暂时无法输入内容 | + | Ctrl+q | 退出终端锁定 | + | Ctrl+z | 将正在终端执行的任务停下来放到后台 | + | !! | 执行上一条命令 | + | !数字 | 执行数字对应的历史命令 | + | !字母 | 执行最近的以字母打头的命令 | + | !$ / Esc+. | 获得上一条命令最后一个参数 | + | Esc+b | 移动到当前单词的开头 | + | Esc+f | 移动到当前单词的结尾 | + +2. man查阅命令手册的内容说明 + + | 手册中的标题 | 功能说明 | + | ------------ | ------------------------------------------------------------ | + | NAME | 命令的说明和介绍 | + | SYNOPSIS | 使用该命令的基本语法 | + | DESCRIPTION | 使用该命令的详细描述,各个参数的作用,有时候这些信息会出现在OPTIONS中 | + | OPTIONS | 命令相关参数选项的说明 | + | EXAMPLES | 使用该命令的参考例子 | + | EXIT STATUS | 命令结束的退出状态码,通常0表示成功执行 | + | SEE ALSO | 和命令相关的其他命令或信息 | + | BUGS | 和命令相关的缺陷的描述 | + | AUTHOR | 该命令的作者介绍 | diff --git a/Day31-35/res/andrew-tanenbaum.png b/Day31-35/res/andrew-tanenbaum.png deleted file mode 100644 index 195e6e7..0000000 Binary files a/Day31-35/res/andrew-tanenbaum.png and /dev/null differ diff --git a/Day31-35/res/andrew.jpg b/Day31-35/res/andrew.jpg new file mode 100644 index 0000000..8f001d3 Binary files /dev/null and b/Day31-35/res/andrew.jpg differ diff --git a/Day31-35/res/dennis-ritchie.png b/Day31-35/res/dmr.png similarity index 100% rename from Day31-35/res/dennis-ritchie.png rename to Day31-35/res/dmr.png diff --git a/Day31-35/res/Ken-Thompson.png b/Day31-35/res/ken_old.png similarity index 100% rename from Day31-35/res/Ken-Thompson.png rename to Day31-35/res/ken_old.png diff --git a/Day31-35/res/ken_young.jpg b/Day31-35/res/ken_young.jpg new file mode 100644 index 0000000..46e3009 Binary files /dev/null and b/Day31-35/res/ken_young.jpg differ diff --git a/Day31-35/res/linus-torvalds.png b/Day31-35/res/linus-torvalds.png deleted file mode 100644 index acbe3bf..0000000 Binary files a/Day31-35/res/linus-torvalds.png and /dev/null differ diff --git a/Day41-55/code/hellodjango/static/images/linus.png b/Day31-35/res/linus.png similarity index 100% rename from Day41-55/code/hellodjango/static/images/linus.png rename to Day31-35/res/linus.png diff --git a/Day31-35/res/pdp-11.jpg b/Day31-35/res/pdp-11.jpg new file mode 100644 index 0000000..6b4486b Binary files /dev/null and b/Day31-35/res/pdp-11.jpg differ diff --git a/Day31-35/玩转Linux操作系统.md b/Day31-35/玩转Linux操作系统.md deleted file mode 100644 index 37e1d79..0000000 --- a/Day31-35/玩转Linux操作系统.md +++ /dev/null @@ -1,1245 +0,0 @@ -## 玩转Linux操作系统 - -### 操作系统发展史 - -只有硬件没有软件的计算机系统被称之为“裸机”,我们很难用“裸机”来完成计算机日常的工作(如存储和运算),所以必须用特定的软件来控制硬件的工作。最靠近计算机硬件的软件是系统软件,其中最为重要的就是“操作系统”。“操作系统”是控制和管理整个计算机系统的硬件和软件资源,合理的分配资源和调配任务,为系统用户和其他软件提供接口和环境的程序的集合。 - -#### 没有操作系统(手工操作) - -在计算机诞生之初没有操作系统的年代,人们先把程序纸带(或卡片)装上计算机,然后启动输入机把程序和送入计算机,接着通过控制台开关启动程序运行。当程序执行完毕,打印机输出计算的结果,用户卸下并取走纸带(或卡片)。第二个用户上机,重复同样的步骤。在整个过程中用户独占机器,CPU等待手工操作,资源利用率极低。下图是IBM生产的书写Fortran程序的80栏打孔卡,当然这个已经是比较先进的打孔卡了。 - -![](./res/ibm-col80-punched-card.png) - -#### 批处理系统 - -首先启动计算机上的一个监督程序,在监督程序的控制下,计算机能够自动的、成批的处理一个或多个用户的作业。完成一批作业后,监督程度又从输入机读取作业存入磁带机。按照上面的步骤重复处理任务。监督程序不停的处理各个作业,实现了作业的自动转接,减少了作业的建立时间和手工操作时间,提高了计算机资源的利用率。 批处理系统又可以分为单道批处理系统、多道批处理系统、联机批处理系统、脱机批处理系统。 - -#### 分时系统和实时系统 - -分时系统是把处理器的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。 若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮调度时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的感觉是他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。为了解决分时系统不能及时响应用户指令的情况,又出现了能够在在严格的时间范围内完成事件处理,及时响应随机外部事件的实时系统。 - -#### 通用操作系统 - -1. 1960s:IBM的System/360系列的机器有了统一的操作系统OS/360。 - -2. 1965年:AT&T的贝尔实验室加入GE和MIT的合作计划开始开发MULTICS。 - -3. 1969年:Ken Tompson为了玩“Space Travel”游戏用汇编语言在PDP-7上开发了Unics。 - - ![](./res/Ken-Thompson.png) - - ![](./res/pdp-7.png) - -4. 1970年~1971年:Ken Tompson和Dennis Ritchie用B语言在PDP-11上重写了Unics,并在Brian Kernighan的建议下将其更名为Unix。 - - ![](./res/ken-and-dennis-pdp-11.png) - -5. 1972年~1973年:Dennis Ritchie发明了C语言来取代可移植性较差的B语言,并开启了用C语言重写Unix的工作。 - - ![](./res/dennis-ritchie.png) - -6. 1974年:Unix推出了里程碑意义的第5版,几乎完全用C语言来实现。 - -7. 1979年:从Unix第7版开始,AT&T发布新的使用条款,将Unix私有化。 - -8. 1987年:Andrew S. Tanenbaum教授为了能在课堂上教授学生操作系统运作的细节,决定在不使用任何AT&T的源代码前提下,自行开发与Unix兼容的操作系统,以避免版权上的争议并将其命名为Minix。 - - ![](./res/andrew-tanenbaum.png) - -9. 1991年:Linus Torvalds就读于芬兰赫尔辛基大学期间,尝试在Minix上做一些开发工作,但因为Minix只是作为教学用途的操作系统,功能并不强大,为了方便在学校的主机的新闻组和邮件系统中读写和下载文件,Linus编写了磁盘驱动程序和文件系统,这些成为了Linux系统内核的雏形。 - - ![](./res/linus-torvalds.png) - -下图是Unix操作系统家族的图谱。 - -![](./res/history-of-unix.png) - -### Linux概述 - -Linux是一个通用操作系统。一个操作系统要负责任务调度、内存分配、处理外围设备I/O等操作。操作系统通常由内核(运行其他程序,管理像磁盘、打印机等硬件设备的核心程序)和系统程序(设备驱动、底层库、shell、服务程序等)两部分组成。 - -Linux内核是芬兰人Linus Torvalds开发的,于1991年9月发布。而Linux操作系统作为Internet时代的产物,它是由全世界许多开发者共同合作开发的,是一个自由的操作系统(注意自由和免费并不是同一个概念,想了解二者的差别可以[点击这里](https://www.debian.org/intro/free))。 - -### Linux系统优点 - -1. 通用操作系统,不跟特定的硬件绑定。 -2. 用C语言编写,有可移植性,有内核编程接口。 -3. 支持多用户和多任务,支持安全的分层文件系统。 -4. 大量的实用程序,完善的网络功能以及强大的支持文档。 -5. 可靠的安全性和良好的稳定性,对开发者更友好。 - -### Linux系统发行版本 - -1. [Redhat](https://www.redhat.com/en) -2. [Ubuntu](https://www.ubuntu.com/) -3. [CentOS](https://www.centos.org/) -4. [Fedora](https://getfedora.org/) -5. [Debian](https://www.debian.org/) -6. [openSUSE](https://www.opensuse.org/) - -### 基础命令 - -Linux系统的命令通常都是如下所示的格式: - -```Shell -命令名称 [命名参数] [命令对象] -``` - -1. 获取登录信息 - **w** / **who** / **last**。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# w - 23:31:16 up 12:16, 2 users, load average: 0.00, 0.01, 0.05 - USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT - root pts/0 182.139.66.250 23:03 4.00s 0.02s 0.00s w - jackfrue pts/1 182.139.66.250 23:26 3:56 0.00s 0.00s -bash - [root@izwz97tbgo9lkabnat2lo8z ~]# who - root pts/0 2018-04-12 23:03 (182.139.66.250) - jackfrued pts/1 2018-04-12 23:26 (182.139.66.250) - [root@izwz97tbgo9lkabnat2lo8z ~]# who am i - root pts/0 2018-04-12 23:03 (182.139.66.250) - ``` - -2. 查看自己使用的Shell - **ps**。 - - Shell也被称为“壳”,它是用户与内核交流的翻译官,简单的说就是人与计算机交互的接口。目前很多Linux系统默认的Shell都是bash(Bourne Again SHell),因为它可以使用Tab键进行命令补全、可以保存历史命令、可以方便的配置环境变量以及执行批处理操作等。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# ps - PID TTY TIME CMD - 3531 pts/0 00:00:00 bash - 3553 pts/0 00:00:00 ps - ``` - -3. 查看命令的说明 - **whatis**。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# whatis ps - ps (1) - report a snapshot of the current processes. - [root@izwz97tbgo9lkabnat2lo8z ~]# whatis python - python (1) - an interpreted, interactive, object-oriented programming language - ``` - -4. 查看命令的位置 - **which** / **whereis**。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# whereis ps - ps: /usr/bin/ps /usr/share/man/man1/ps.1.gz - [root@izwz97tbgo9lkabnat2lo8z ~]# whereis python - python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz - [root@izwz97tbgo9lkabnat2lo8z ~]# which ps - /usr/bin/ps - [root@izwz97tbgo9lkabnat2lo8z ~]# which python - /usr/bin/python - ``` - -5. 查看帮助文档 - **man** / **info** / **apropos**。 - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# ps --help - Usage: - ps [options] - Try 'ps --help ' - or 'ps --help ' - for additional help text. - For more details see ps(1). - [root@izwz97tbgo9lkabnat2lo8z ~]# man ps - PS(1) User Commands PS(1) - NAME - ps - report a snapshot of the current processes. - SYNOPSIS - ps [options] - DESCRIPTION - ... - [root@izwz97tbgo9lkabnat2lo8z ~]# info ps - ... - ``` - -6. 切换用户 - **su**。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# su hellokitty - [hellokitty@izwz97tbgo9lkabnat2lo8z root]$ - ``` - -7. 以管理员身份执行命令 - **sudo**。 - - ```Shell - [jackfrued@izwz97tbgo9lkabnat2lo8z ~]$ ls /root - ls: cannot open directory /root: Permission denied - [jackfrued@izwz97tbgo9lkabnat2lo8z ~]$ sudo ls /root - [sudo] password for jackfrued: - calendar.py code error.txt hehe hello.c index.html myconf result.txt - ``` - - > **说明**:如果希望用户能够以管理员身份执行命令,用户必须被添加到sudoers名单中,该文件在 `/etc`目录下。 - -8. 登入登出相关 - **logout** / **exit** / **adduser** / **userdel** / **passwd** / **ssh**。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# adduser hellokitty - [root@izwz97tbgo9lkabnat2lo8z ~]# passwd hellokitty - Changing password for user jackfrued. - New password: - Retype new password: - passwd: all authentication tokens updated successfully. - [root@izwz97tbgo9lkabnat2lo8z ~]# ssh hellokitty@1.2.3.4 - hellokitty@1.2.3.4's password: - Last login: Thu Apr 12 23:05:32 2018 from 10.12.14.16 - [hellokitty@izwz97tbgo9lkabnat2lo8z ~]$ logout - Connection to 1.2.3.4 closed. - [root@izwz97tbgo9lkabnat2lo8z ~]# - ``` - -9. 查看系统和主机名 - **uname** / **hostname**。 - - ```Shell - [root@izwz97tbgo9lkabnat2lo8z ~]# uname - Linux - [root@izwz97tbgo9lkabnat2lo8z ~]# hostname - izwz97tbgo9lkabnat2lo8z - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat /etc/centos-release - CentOS Linux release 7.4.1708 (Core) - ``` - -10. 重启和关机 - **reboot** / **init 6** / **shutdown** / **init 0**。 - -11. 查看历史命令 - **history**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# history - ... - 452 ls - 453 cd Python-3.6.5/ - 454 clear - 455 history - [root@iZwz97tbgo9lkabnat2lo8Z ~]# !454 - ``` - - > 说明:查看到历史命令之后,可以用`!历史命令编号`来重新执行该命令;通过`history -c`可以清除历史命令。 - -### 实用程序 - -#### 文件和文件夹操作 - -1. 创建/删除目录 - **mkdir** / **rmdir**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# mkdir abc - [root@iZwz97tbgo9lkabnat2lo8Z ~]# mkdir -p xyz/abc - [root@iZwz97tbgo9lkabnat2lo8Z ~]# rmdir abc - ``` - -2. 创建/删除文件 - **touch** / **rm**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# touch readme.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# touch error.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# rm error.txt - rm: remove regular empty file ‘error.txt’? y - [root@iZwz97tbgo9lkabnat2lo8Z ~]# rm -rf xyz - ``` - - - touch命令用于创建空白文件或修改文件时间。在Linux系统中一个文件有三种时间: - - 更改内容的时间 - mtime。 - - 更改权限的时间 - ctime。 - - 最后访问时间 - atime。 - - rm的几个重要参数: - - -i:交互式删除,每个删除项都会进行询问。 - - -r:删除目录并递归的删除目录中的文件和目录。 - - -f:强制删除,忽略不存在的文件,没有任何提示。 - -3. 切换和查看当前工作目录 - **cd** / **pwd**。 - - > 说明:`cd`命令后面可以跟相对路径(以当前路径作为参照)或绝对路径(以`/`开头)来切换到指定的目录,也可以用`cd ..`来返回上一级目录。 - -4. 查看目录内容 - **ls**。 - - - -l:以长格式查看文件和目录。 - - -a:显示以点开头的文件和目录(隐藏文件)。 - - -R:遇到目录要进行递归展开(继续列出目录下面的文件和目录)。 - - -d:只列出目录,不列出其他内容。 - - -S/-t:按大小/时间排序。 - -5. 查看文件内容 - **cat** / **head** / **tail** / **more** / **less**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wget http://www.sohu.com/ -O sohu.html - --2018-06-20 18:42:34-- http://www.sohu.com/ - Resolving www.sohu.com (www.sohu.com)... 14.18.240.6 - Connecting to www.sohu.com (www.sohu.com)|14.18.240.6|:80... connected. - HTTP request sent, awaiting response... 200 OK - Length: 212527 (208K) [text/html] - Saving to: ‘sohu.html’ - 100%[==================================================>] 212,527 --.-K/s in 0.03s - 2018-06-20 18:42:34 (7.48 MB/s) - ‘sohu.html’ saved [212527/212527] - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat sohu.html - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# head -10 sohu.html - - - - 搜狐 - - - - - - [root@iZwz97tbgo9lkabnat2lo8Z ~]# tail -2 sohu.html - - - [root@iZwz97tbgo9lkabnat2lo8Z ~]# less sohu.html - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat -n sohu.html | more - ... - ``` - -6. 拷贝/移动文件 - **cp** / **mv**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# mkdir backup - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cp sohu.html backup/ - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cd backup - [root@iZwz97tbgo9lkabnat2lo8Z backup]# ls - sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z backup]# mv sohu.html sohu_index.html - [root@iZwz97tbgo9lkabnat2lo8Z backup]# ls - sohu_index.html - ``` - -7. 查找文件和查找内容 - **find** / **grep**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# find / -name "*.html" - /root/sohu.html - /root/backup/sohu_index.html - [root@izwz97tbgo9lkabnat2lo8z ~]# find . -atime 7 -type f -print - [root@izwz97tbgo9lkabnat2lo8z ~]# find . -type f -size +2k - [root@izwz97tbgo9lkabnat2lo8z ~]# find . -type f -name "*.swp" -delete - [root@iZwz97tbgo9lkabnat2lo8Z ~]# grep " - 24: - 25: - 26: - 29: - ... - ``` - > 说明:`grep`在搜索字符串时可以使用正则表达式,如果需要使用正则表达式可以用`grep -E`或者直接使用`egrep`。 - -8. 链接 - **ln**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sohu.html - -rw-r--r-- 1 root root 212131 Jun 20 19:15 sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln /root/sohu.html /root/backup/sohu_backup - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sohu.html - -rw-r--r-- 2 root root 212131 Jun 20 19:15 sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln /root/sohu.html /root/backup/sohu_backup2 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sohu.html - -rw-r--r-- 3 root root 212131 Jun 20 19:15 sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln -s /etc/centos-release sysinfo - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l sysinfo - lrwxrwxrwx 1 root root 19 Jun 20 19:21 sysinfo -> /etc/centos-release - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat sysinfo - CentOS Linux release 7.4.1708 (Core) - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat /etc/centos-release - CentOS Linux release 7.4.1708 (Core) - ``` - - > 说明:链接可以分为硬链接和软链接(符号链接)。硬链接可以认为是一个指向文件数据的指针,就像Python中对象的引用计数,每添加一个硬链接,文件的对应链接数就增加1,只有当文件的链接数为0时,文件所对应的存储空间才有可能被其他文件覆盖。我们平常删除文件时其实并没有删除硬盘上的数据,我们删除的只是一个指针,或者说是数据的一条使用记录,所以类似于“文件粉碎机”之类的软件在“粉碎”文件时除了删除文件指针,还会在文件对应的存储区域填入数据来保证文件无法再恢复。软链接类似于Windows系统下的快捷方式,当软链接链接的文件被删除时,软链接也就失效了。 - -9. 压缩/解压缩和归档/解归档 - **gzip** / **gunzip** / **xz** / **tar**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz - --2018-06-20 19:29:59-- http://download.redis.io/releases/redis-4.0.10.tar.gz - Resolving download.redis.io (download.redis.io)... 109.74.203.151 - Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected. - HTTP request sent, awaiting response... 200 OK - Length: 1738465 (1.7M) [application/x-gzip] - Saving to: ‘redis-4.0.10.tar.gz’ - 100%[==================================================>] 1,738,465 70.1KB/s in 74s - 2018-06-20 19:31:14 (22.9 KB/s) - ‘redis-4.0.10.tar.gz’ saved [1738465/1738465] - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls redis* - redis-4.0.10.tar.gz - [root@iZwz97tbgo9lkabnat2lo8Z ~]# gunzip redis-4.0.10.tar.gz - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls redis* - redis-4.0.10.tar - [root@iZwz97tbgo9lkabnat2lo8Z ~]# tar -xvf redis-4.0.10.tar - redis-4.0.10/ - redis-4.0.10/.gitignore - redis-4.0.10/00-RELEASENOTES - redis-4.0.10/BUGS - redis-4.0.10/CONTRIBUTING - redis-4.0.10/COPYING - redis-4.0.10/INSTALL - redis-4.0.10/MANIFESTO - redis-4.0.10/Makefile - redis-4.0.10/README.md - redis-4.0.10/deps/ - redis-4.0.10/deps/Makefile - redis-4.0.10/deps/README.md - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls redis* - redis-4.0.10.tar - redis-4.0.10: - 00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests - BUGS deps MANIFESTO runtest sentinel.conf utils - CONTRIBUTING INSTALL README.md runtest-cluster src - ``` - -10. 其他工具 - **sort** / **uniq** / **diff** / **tr** / **cut** / **paste** / **file** / **wc**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat foo.txt - grape - apple - pitaya - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat bar.txt - 100 - 200 - 300 - 400 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# paste foo.txt bar.txt - grape 100 - apple 200 - pitaya 300 - 400 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# paste foo.txt bar.txt > hello.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cut -b 4-8 hello.txt - pe 10 - le 20 - aya 3 - 0 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat hello.txt | tr '\t' ',' - grape,100 - apple,200 - pitaya,300 - ,400 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wget https://www.baidu.com/img/bd_logo1.png - --2018-06-20 18:46:53-- https://www.baidu.com/img/bd_logo1.png - Resolving www.baidu.com (www.baidu.com)... 220.181.111.188, 220.181.112.244 - Connecting to www.baidu.com (www.baidu.com)|220.181.111.188|:443... connected. - HTTP request sent, awaiting response... 200 OK - Length: 7877 (7.7K) [image/png] - Saving to: ‘bd_logo1.png’ - 100%[==================================================>] 7,877 --.-K/s in 0s - 2018-06-20 18:46:53 (118 MB/s) - ‘bd_logo1.png’ saved [7877/7877][root@iZwz97tbgo9lkabnat2lo8Z ~]# file bd_logo1.png - bd_logo1.png: PNG image data, 540 x 258, 8-bit colormap, non-interlaced - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wc sohu.html - 2979 6355 212527 sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wc -l sohu.html - 2979 sohu.html - ``` - -#### 管道和重定向 - -1. 管道的使用 - **\|**。 - - 例子:查找当前目录下文件个数。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# find ./ | wc -l - 6152 - ``` - - 例子:列出当前路径下的文件和文件夹,给每一项加一个编号。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls | cat -n - 1 dump.rdb - 2 mongodb-3.6.5 - 3 Python-3.6.5 - 4 redis-3.2.11 - 5 redis.conf - ``` - - 例子:查找record.log中包含AAA,但不包含BBB的记录的总数 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat record.log | grep AAA | grep -v BBB | wc -l - ``` - -2. 输出重定向和错误重定向 - **\>** / **>>** / **2\>**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat readme.txt - banana - apple - grape - apple - grape - watermelon - pear - pitaya - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat readme.txt | sort | uniq > result.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cat result.txt - apple - banana - grape - pear - pitaya - watermelon - ``` - -3. 输入重定向 - **\<**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# echo 'hello, world!' > hello.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wall < hello.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# - Broadcast message from root@iZwz97tbgo9lkabnat2lo8Z (Wed Jun 20 19:43:05 2018): - hello, world! - [root@iZwz97tbgo9lkabnat2lo8Z ~]# echo 'I will show you some code.' >> hello.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wall < hello.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# - Broadcast message from root@iZwz97tbgo9lkabnat2lo8Z (Wed Jun 20 19:43:55 2018): - hello, world! - I will show you some code. - ``` - -#### 别名 - -1. **alias** - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# alias ll='ls -l' - [root@iZwz97tbgo9lkabnat2lo8Z ~]# alias frm='rm -rf' - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ll - ... - drwxr-xr-x 2 root root 4096 Jun 20 12:52 abc - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# frm abc - ``` - -2. **unalias** - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# unalias frm - [root@iZwz97tbgo9lkabnat2lo8Z ~]# frm sohu.html - -bash: frm: command not found - ``` - -#### 其他程序 - -1. 时间和日期 - **date** / **cal**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# date - Wed Jun 20 12:53:19 CST 2018 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cal - June 2018 - Su Mo Tu We Th Fr Sa - 1 2 - 3 4 5 6 7 8 9 - 10 11 12 13 14 15 16 - 17 18 19 20 21 22 23 - 24 25 26 27 28 29 30 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cal 5 2017 - May 2017 - Su Mo Tu We Th Fr Sa - 1 2 3 4 5 6 - 7 8 9 10 11 12 13 - 14 15 16 17 18 19 20 - 21 22 23 24 25 26 27 - 28 29 30 31 - ``` - -2. 录制操作脚本 - **script**。 - -3. 给用户发送消息 - **mesg** / **write** / **wall** / **mail**。 - - -### 文件系统 - -#### 文件和路径 - -1. 命名规则:文件名的最大长度与文件系统类型有关,一般情况下,文件名不应该超过255个字符,虽然绝大多数的字符都可以用于文件名,但是最好使用英文大小写字母、数字、下划线、点这样的符号。文件名中虽然可以使用空格,但应该尽可能避免使用空格,否则在输入文件名时需要用将文件名放在双引号中或者通过`\`对空格进行转义。 -2. 扩展名:在Linux系统下文件的扩展名是可选的,但是使用扩展名有助于对文件内容的理解。有些应用程序要通过扩展名来识别文件,但是更多的应用程序并不依赖文件的扩展名,就像`file`命令在识别文件时并不是依据扩展名来判定文件的类型。 -3. 隐藏文件:以点开头的文件在Linux系统中是隐藏文件(不可见文件)。 - -#### 目录结构 - -1. /bin - 基本命令的二进制文件。 -2. /boot - 引导加载程序的静态文件。 -3. /dev - 设备文件。 -4. **/etc** - 配置文件。 -5. /home - 普通用户主目录的父目录。 -6. /lib - 共享库文件。 -7. /lib64 - 共享64位库文件。 -8. /lost+found - 存放未链接文件。 -9. /media - 自动识别设备的挂载目录。 -10. /mnt - 临时挂载文件系统的挂载点。 -11. /opt - 可选插件软件包安装位置。 -12. /proc - 内核和进程信息。 -13. **/root** - 超级管理员用户主目录。 -14. /run - 存放系统运行时需要的东西。 -15. /sbin - 超级用户的二进制文件。 -16. /sys - 设备的伪文件系统。 -17. /tmp - 临时文件夹。 -18. **/usr** - 用户应用目录。 -19. /var - 变量数据目录。 - -#### 访问权限 - -1. **chmod** - 改变文件模式比特。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l - ... - -rw-r--r-- 1 root root 211878 Jun 19 16:06 sohu.html - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# chmod g+w,o+w sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l - ... - -rw-rw-rw- 1 root root 211878 Jun 19 16:06 sohu.html - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# chmod 644 sohu.html - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l - ... - -rw-r--r-- 1 root root 211878 Jun 19 16:06 sohu.html - ... - ``` - > 说明:通过上面的例子可以看出,用`chmod`改变文件模式比特有两种方式:一种是字符设定法,另一种是数字设定法。除了`chmod`之外,可以通过`umask`来设定哪些权限将在新文件的默认权限中被删除。 - - 长格式查看目录或文件时显示结果及其对应权限的数值如下表所示。 - - ![](./res/file-mode.png) - -2. **chown** - 改变文件所有者。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l - ... - -rw-r--r-- 1 root root 54 Jun 20 10:06 readme.txt - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# chown hellokitty readme.txt - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ls -l - ... - -rw-r--r-- 1 hellokitty root 54 Jun 20 10:06 readme.txt - ... - ``` - -#### 磁盘管理 - -1. 列出文件系统的磁盘使用状况 - **df**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# df -h - Filesystem Size Used Avail Use% Mounted on - /dev/vda1 40G 5.0G 33G 14% / - devtmpfs 486M 0 486M 0% /dev - tmpfs 497M 0 497M 0% /dev/shm - tmpfs 497M 356K 496M 1% /run - tmpfs 497M 0 497M 0% /sys/fs/cgroup - tmpfs 100M 0 100M 0% /run/user/0 - ``` - -2. 磁盘分区表操作 - **fdisk**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# fdisk -l - Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors - Units = sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disk label type: dos - Disk identifier: 0x000a42f4 - Device Boot Start End Blocks Id System - /dev/vda1 * 2048 83884031 41940992 83 Linux - Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors - Units = sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - ``` - -3. 格式化文件系统 - **mkfs**。 - -4. 文件系统检查 - **fsck**。 - -5. 挂载/卸载 - **mount** / **umount**。 - -### 编辑器 - vim - -1. 启动vim。可以通过`vi`或`vim`命令来启动vim,启动时可以指定文件名来打开一个文件,如果没有指定文件名,也可以在保存的时候指定文件名。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# vim guess.py - ``` - -2. 命令模式、编辑模式和末行模式:启动vim进入的是命令模式(也称为Normal模式),在命令模式下输入英文字母`i`会进入编辑模式(Insert模式),屏幕下方出现`-- INSERT --`提示;在编辑模式下按下`Esc`会回到命令模式,此时如果输入英文`:`会进入末行模式,在末行模式下输入`q!`可以在不保存当前工作的情况下强行退出vim;在命令模式下输入`v`会进入可视模式(Visual模式),可以用光标选择一个区域再完成对应的操作。 - -3. 保存和退出vim:在命令模式下输入`:` 进入末行模式,输入`wq`可以实现保存退出;如果想放弃编辑的内容输入`q!`强行退出,这一点刚才已经提到过了;在命令模式下也可以直接输入`ZZ`实现保存退出。如果只想保存文件不退出,那么可以在末行模式下输入`w`;可以在`w`后面输入空格再指定要保存的文件名。 - -4. 光标操作。 - - - 在命令模式下可以通过`h`、`j`、`k`、`l`来控制光标向左、下、上、右的方向移动,可以在字母前输入数字来表示移动的距离,例如:`10h`表示向左移动10个字符。 - - 在命令模式下可以通过`Ctrl+y`和`Ctrl+e`来实现向上、向下滚动一行文本的操作,可以通过`Ctrl+f`和`Ctrl+b`来实现向前和向后翻页的操作。 - - 在命令模式下可以通过输入英文字母`G`将光标移到文件的末尾,可以通过`gg`将光标移到文件的开始,也可以通过在`G`前输入数字来将光标移动到指定的行。 - -5. 文本操作。 - - - 删除:在命令模式下可以用`dd`来删除整行;可以在`dd`前加数字来指定删除的行数;可以用`d$`来实现删除从光标处删到行尾的操作,也可以通过`d0`来实现从光标处删到行首的操作;如果想删除一个单词,可以使用`dw`;如果要删除全文,可以在输入`:%d`(其中`:`用来从命令模式进入末行模式)。 - - 复制和粘贴:在命令模式下可以用`yy`来复制整行;可以在`yy`前加数字来指定复制的行数;可以通过`p`将复制的内容粘贴到光标所在的地方。 - - 撤销和恢复:在命令模式下输入`u`可以撤销之前的操作;通过`Ctrl+r`可以恢复被撤销的操作。 - - 对内容进行排序:在命令模式下输入`%!sort`。 - -6. 查找和替换。 - - - 查找操作需要输入`/`进入末行模式并提供正则表达式来匹配与之对应的内容,例如:`/doc.*\.`,输入`n`来向前搜索,也可以输入`N`来向后搜索。 - - 替换操作需要输入`:`进入末行模式并指定搜索的范围、正则表达式以及替换后的内容和匹配选项,例如:`:1,$s/doc.*/hello/gice`,其中: - - `g` - global:全局匹配。 - - `i` - ignore case:忽略大小写匹配。 - - `c` - confirm:替换时需要确认。 - - `e` - error:忽略错误。 - -7. 参数设定:在输入`:`进入末行模式后可以对vim进行设定。 - - - 设置Tab键的空格数:`set ts=4` - - - 设置显示/不显示行号:`set nu` / `set nonu` - - - 设置启用/关闭高亮语法:`syntax on` / `syntax off` - - - 设置显示标尺(光标所在的行和列): `set ruler` - - - 设置启用/关闭搜索结果高亮:`set hls` / `set nohls` - - > 说明:如果希望上面的这些设定在每次启动vim时都能生效,需要将这些设定写到用户主目录下的.vimrc文件中。 - -8. 高级技巧 - - - 比较多个文件。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# vim -d foo.txt bar.txt - ``` - ![](./res/vim-diff.png) - - - 打开多个文件。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# vim foo.txt bar.txt hello.txt - ``` - - 启动vim后只有一个窗口显示的是foo.txt,可以在末行模式中输入`ls`查看到打开的三个文件,也可以在末行模式中输入`b `来显示另一个文件,例如可以用`:b 2`将bar.txt显示出来,可以用`:b 3`将hello.txt显示出来。 - - - 拆分和切换窗口。 - - 可以在末行模式中输入`sp`或`vs`来实现对窗口的水平或垂直拆分,这样我们就可以同时打开多个编辑窗口,通过按两次`Ctrl+w`就可以实现编辑窗口的切换,在一个窗口中执行退出操作只会关闭对应的窗口,其他的窗口继续保留。 - - ![](./res/vim-multi-window.png) - - - 映射快捷键:在vim下可以将一些常用操作映射为快捷键来提升工作效率。 - - 例子1:在命令模式下输入`F4`执行从第一行开始删除10000行代码的操作。 - - `:map gg10000dd`。 - - 例子2:在编辑模式下输入`__main`直接补全为`if __name__ == '__main__':`。 - - `:inoremap __main if __name__ == '__main__':` - - > 说明:上面例子2的`inoremap`中的`i`表示映射的键在编辑模式使用, `nore`表示不要递归,这一点非常重要,否则如果键对应的内容中又出现键本身,就会引发递归(相当于进入了死循环)。如果希望映射的快捷键每次启动vim时都能生效,需要将映射写到用户主目录下的.vimrc文件中。 - - - 录制宏。 - - - 在命令模式下输入`qa`开始录制宏(其中`a`是寄存器的名字,也可以是其他英文字母或0-9的数字)。 - - - 执行你的操作(光标操作、编辑操作等),这些操作都会被录制下来。 - - - 如果录制的操作已经完成了,按`q`结束录制。 - - - 通过`@a`(`a`是刚才使用的寄存器的名字)播放宏,如果要多次执行宏可以在前面加数字,例如`100@a`表示将宏播放100次。 - - - 可以试一试下面的例子来体验录制宏的操作,该例子来源于[Harttle Land网站](https://harttle.land/tags.html#Vim),该网站上提供了很多关于vim的使用技巧,有兴趣的可以去了解一下。 - - ![](./res/vim-macro.png) - -### 软件安装和配置 - -#### 使用包管理工具 - -1. **yum** - Yellowdog Updater Modified。 - - `yum search`:搜索软件包,例如`yum search nginx`。 - - `yum list installed`:列出已经安装的软件包,例如`yum list installed | grep zlib`。 - - `yum install`:安装软件包,例如`yum install nginx`。 - - `yum remove`:删除软件包,例如`yum remove nginx`。 - - `yum update`:更新软件包,例如`yum update`可以更新所有软件包,而`yum update tar`只会更新tar。 - - `yum check-update`:检查有哪些可以更新的软件包。 - - `yum info`:显示软件包的相关信息,例如`yum info nginx`。 -2. **rpm** - Redhat Package Manager。 - - 安装软件包:`rpm -ivh .rpm`。 - - 移除软件包:`rpm -e `。 - - 查询软件包:`rpm -qa`,例如可以用`rpm -qa | grep mysql`来检查是否安装了MySQL相关的软件包。 - -下面以Nginx为例,演示如何使用yum安装软件。 - -```Shell -[root@iZwz97tbgo9lkabnat2lo8Z ~]# yum -y install nginx -... -Installed: - nginx.x86_64 1:1.12.2-2.el7 -Dependency Installed: - nginx-all-modules.noarch 1:1.12.2-2.el7 - nginx-mod-http-geoip.x86_64 1:1.12.2-2.el7 - nginx-mod-http-image-filter.x86_64 1:1.12.2-2.el7 - nginx-mod-http-perl.x86_64 1:1.12.2-2.el7 - nginx-mod-http-xslt-filter.x86_64 1:1.12.2-2.el7 - nginx-mod-mail.x86_64 1:1.12.2-2.el7 - nginx-mod-stream.x86_64 1:1.12.2-2.el7 -Complete! -[root@iZwz97tbgo9lkabnat2lo8Z ~]# yum info nginx -Loaded plugins: fastestmirror -Loading mirror speeds from cached hostfile -Installed Packages -Name : nginx -Arch : x86_64 -Epoch : 1 -Version : 1.12.2 -Release : 2.el7 -Size : 1.5 M -Repo : installed -From repo : epel -Summary : A high performance web server and reverse proxy server -URL : http://nginx.org/ -License : BSD -Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and - : IMAP protocols, with a strong focus on high concurrency, performance and low - : memory usage. -[root@iZwz97tbgo9lkabnat2lo8Z ~]# nginx -v -nginx version: nginx/1.12.2 -``` - -移除Nginx。 - -```Shell -[root@iZwz97tbgo9lkabnat2lo8Z ~]# nginx -s stop -[root@iZwz97tbgo9lkabnat2lo8Z ~]# yum -y remove nginx -``` - -下面以MySQL为例,演示如何使用rpm安装软件。要安装MySQL需要先到[MySQL官方网站](https://www.mysql.com/)下载对应的[RPM文件](https://dev.mysql.com/downloads/mysql/),当然要选择和你使用的Linux系统对应的版本。MySQL现在是Oracle公司旗下的产品,在MySQL被收购后,MySQL的作者重新制作了一个MySQL的分支MariaDB,可以通过yum进行安装。如果要安装MySQL需要先通过yum删除`mariadb-libs`这个可能会跟MySQL底层库冲突的库,然后还需要安装一个名为`libaio`的依赖库。 - -```Shell -[root@iZwz97tbgo9lkabnat2lo8Z mysql]# ls -mysql-community-client-5.7.22-1.el7.x86_64.rpm -mysql-community-common-5.7.22-1.el7.x86_64.rpm -mysql-community-libs-5.7.22-1.el7.x86_64.rpm -mysql-community-server-5.7.22-1.el7.x86_64.rpm -[root@iZwz97tbgo9lkabnat2lo8Z mysql]# yum -y remove mariadb-libs -[root@iZwz97tbgo9lkabnat2lo8Z mysql]# yum -y install libaio -[root@iZwz97tbgo9lkabnat2lo8Z mysql]# ls | xargs rpm -ivh -warning: mysql-community-client-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY -Preparing... ################################# [100%] -... -``` - -> 说明:由于MySQL和[MariaDB](https://mariadb.org/)的底层依赖库是有冲突的,所以上面我们首先用`yum`移除了名为mariadb-libs的依赖库并安装了名为libaio的依赖库。由于我们将安装MySQL所需的rpm文件放在一个独立的目录中,所以可以通过`ls`命令查看到安装文件并用`xargs`将`ls`的输出作为参数交给`rpm -ivh`来进行安装。关于MySQL和MariaDB之间的关系,可以阅读[维基百科](https://zh.wikipedia.org/wiki/MariaDB)上关于MariaDB的介绍。 - -移除安装的MySQL。 - -```Shell -[root@iZwz97tbgo9lkabnat2lo8Z ~]# rpm -qa | grep mysql | xargs rpm -e -``` - -#### 下载解压配置环境变量 - -下面以安装MongoDB为例,演示这类软件应该如何安装。 - -```Shell -[root@iZwz97tbgo9lkabnat2lo8Z ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz ---2018-06-21 18:32:53-- https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz -Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 52.85.83.16, 52.85.83.228, 52.85.83.186, ... -Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|52.85.83.16|:443... connected. -HTTP request sent, awaiting response... 200 OK -Length: 100564462 (96M) [application/x-gzip] -Saving to: ‘mongodb-linux-x86_64-rhel70-3.6.5.tgz’ -100%[==================================================>] 100,564,462 630KB/s in 2m 9s -2018-06-21 18:35:04 (760 KB/s) - ‘mongodb-linux-x86_64-rhel70-3.6.5.tgz’ saved [100564462/100564462] -[root@iZwz97tbgo9lkabnat2lo8Z ~]# gunzip mongodb-linux-x86_64-rhel70-3.6.5.tgz -[root@iZwz97tbgo9lkabnat2lo8Z ~]# tar -xvf mongodb-linux-x86_64-rhel70-3.6.5.tar -mongodb-linux-x86_64-rhel70-3.6.5/README -mongodb-linux-x86_64-rhel70-3.6.5/THIRD-PARTY-NOTICES -mongodb-linux-x86_64-rhel70-3.6.5/MPL-2 -mongodb-linux-x86_64-rhel70-3.6.5/GNU-AGPL-3.0 -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongodump -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongorestore -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoexport -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoimport -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongostat -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongotop -mongodb-linux-x86_64-rhel70-3.6.5/bin/bsondump -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongofiles -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoreplay -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoperf -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongod -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongos -mongodb-linux-x86_64-rhel70-3.6.5/bin/mongo -mongodb-linux-x86_64-rhel70-3.6.5/bin/install_compass -[root@iZwz97tbgo9lkabnat2lo8Z ~]# vim .bash_profile -... -PATH=$PATH:$HOME/bin:$HOME/mongodb-linux-x86_64-rhel70-3.6.5/bin -export PATH -... -[root@iZwz97tbgo9lkabnat2lo8Z ~]# source .bash_profile -[root@iZwz97tbgo9lkabnat2lo8Z ~]# mongod --version -db version v3.6.5 -git version: a20ecd3e3a174162052ff99913bc2ca9a839d618 -OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 -allocator: tcmalloc -modules: none -build environment: - distmod: rhel70 - distarch: x86_64 - target_arch: x86_64 -[root@iZwz97tbgo9lkabnat2lo8Z ~]# mongo --version -MongoDB shell version v3.6.5 -git version: a20ecd3e3a174162052ff99913bc2ca9a839d618 -OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 -allocator: tcmalloc -modules: none -build environment: - distmod: rhel70 - distarch: x86_64 - target_arch: x86_64 -``` - -> 说明:当然也可以通过yum来安装MongoDB,具体可以参照[官方网站](https://docs.mongodb.com/master/administration/install-on-linux/)上给出的说明。 - -#### 源代码构建安装 - -1. 安装Python 3.6。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# yum install gcc - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz - [root@iZwz97tbgo9lkabnat2lo8Z ~]# gunzip Python-3.6.5.tgz - [root@iZwz97tbgo9lkabnat2lo8Z ~]# tar -xvf Python-3.6.5.tar - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cd Python-3.6.5 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ./configure --prefix=/usr/local/python36 --enable-optimizations - [root@iZwz97tbgo9lkabnat2lo8Z ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel - [root@iZwz97tbgo9lkabnat2lo8Z ~]# make && make install - ... 配置环境变量 ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ln -s /usr/local/python36/bin/python3.6 /usr/bin/python3 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# python3 --version - Python 3.6.5 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# python3 -m pip install -U pip - [root@iZwz97tbgo9lkabnat2lo8Z ~]# pip3 --version - ``` - -2. 安装Redis-3.2.12。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz - [root@iZwz97tbgo9lkabnat2lo8Z ~]# gunzip redis-3.2.12.tar.gz - [root@iZwz97tbgo9lkabnat2lo8Z ~]# tar -xvf redis-3.2.12.tar - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cd redis-3.2.12 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# make && make install - [root@iZwz97tbgo9lkabnat2lo8Z ~]# redis-server --version - Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=5bc5cd3c03d6ceb6 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# redis-cli --version - redis-cli 3.2.12 - ``` - -### 配置服务 - -1. 启动服务。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# systemctl start firewalld - ``` - -2. 终止服务。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# systemctl stop firewalld - ``` - -3. 重启服务。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# systemctl restart firewalld - ``` - -4. 查看服务。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# systemctl status firewalld - ``` - -5. 设置是否开机自启。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# systemctl enable firewalld - Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service. - Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service. - [root@iZwz97tbgo9lkabnat2lo8Z ~]# systemctl disable firewalld - Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. - Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. - ``` - -### 计划任务 - -1. **crontab**命令。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# crontab -e - * * * * * echo "hello, world!" >> /root/hello.txt - 59 23 * * * rm -f /root/*.log - ``` - > 说明:输入`crontab -e`命令会打开vim来编辑Cron表达式并指定触发的任务,上面我们定制了两个计划任务,一个是每分钟向/root目录下的hello.txt中追加输出`hello, world!`;另一个是每天23时59分执行删除/root目录下以log为后缀名的文件。如果不知道Cron表达式如何书写,可以参照/etc/crontab文件中的提示(下面会讲到)或者用谷歌或百度搜索一下,也可以使用Cron表达式在线生成器来生成Cron表达式。 - -2. crontab相关文件。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# cd /etc - [root@iZwz97tbgo9lkabnat2lo8Z etc]# ls -l | grep cron - -rw-------. 1 root root 541 Aug 3 2017 anacrontab - drwxr-xr-x. 2 root root 4096 Mar 27 11:56 cron.d - drwxr-xr-x. 2 root root 4096 Mar 27 11:51 cron.daily - -rw-------. 1 root root 0 Aug 3 2017 cron.deny - drwxr-xr-x. 2 root root 4096 Mar 27 11:50 cron.hourly - drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.monthly - -rw-r--r-- 1 root root 493 Jun 23 15:09 crontab - drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.weekly - [root@iZwz97tbgo9lkabnat2lo8Z etc]# vim crontab - 1 SHELL=/bin/bash - 2 PATH=/sbin:/bin:/usr/sbin:/usr/bin - 3 MAILTO=root - 4 - 5 # For details see man 4 crontabs - 6 - 7 # Example of job definition: - 8 # .---------------- minute (0 - 59) - 9 # | .------------- hour (0 - 23) - 10 # | | .---------- day of month (1 - 31) - 11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... - 12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat - 13 # | | | | | - 14 # * * * * * user-name command to be executed - ``` - - 通过修改`/etc`目录下的crontab文件也能够定制计划任务。 - -### 网络访问和管理 - -1. 安全远程连接 - **ssh**。 - -2. 通过网络获取资源 - **wget**。 - - - -b 后台下载模式 - - -O 下载到指定的目录 - - -r 递归下载 - -3. 显示/操作网络配置(旧) - **ifconfig**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ifconfig eth0 - eth0: flags=4163 mtu 1500 - inet 172.18.61.250 netmask 255.255.240.0 broadcast 172.18.63.255 - ether 00:16:3e:02:b6:46 txqueuelen 1000 (Ethernet) - RX packets 1067841 bytes 1296732947 (1.2 GiB) - RX errors 0 dropped 0 overruns 0 frame 0 - TX packets 409912 bytes 43569163 (41.5 MiB) - TX errors 0 dropped 0 overruns 0 carrier 0 collisions - ``` - -4. 显示/操作网络配置(新) - **ip**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ip address - 1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1 - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 - inet 127.0.0.1/8 scope host lo - valid_lft forever preferred_lft forever - 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 - link/ether 00:16:3e:02:b6:46 brd ff:ff:ff:ff:ff:ff - inet 172.18.61.250/20 brd 172.18.63.255 scope global eth0 - valid_lft forever preferred_lft forever - ``` - -5. 网络可达性检查 - **ping**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ping www.baidu.com -c 3 - PING www.a.shifen.com (220.181.111.188) 56(84) bytes of data. - 64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=1 ttl=51 time=36.3 ms - 64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=2 ttl=51 time=36.4 ms - 64 bytes from 220.181.111.188 (220.181.111.188): icmp_seq=3 ttl=51 time=36.4 ms - --- www.a.shifen.com ping statistics --- - 3 packets transmitted, 3 received, 0% packet loss, time 2002ms - rtt min/avg/max/mdev = 36.392/36.406/36.427/0.156 ms - ``` - -6. 查看网络服务和端口 - **netstat**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# netstat -nap | grep nginx - ``` - -7. 安全文件拷贝 - **scp**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# scp root@1.2.3.4:/root/guido.jpg hellokitty@4.3.2.1:/home/hellokitty/pic.jpg - ``` - -8. 安全文件传输 - **sftp**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# sftp root@120.77.222.217 - root@120.77.222.217's password: - Connected to 120.77.222.217. - sftp> - ``` - - - `help`:显示帮助信息。 - - - `ls`/`lls`:显示远端/本地目录列表。 - - - `cd`/`lcd`:切换远端/本地路径。 - - - `mkdir`/`lmkdir`:创建远端/本地目录。 - - - `pwd`/`lpwd`:显示远端/本地当前工作目录。 - - - `get`:下载文件。 - - - `put`:上传文件。 - - - `rm`:删除远端文件。 - - - `bye`/`exit`/`quit`:退出sftp。 - -### 进程管理 - -1. **ps** - 查询进程。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ps -ef - UID PID PPID C STIME TTY TIME CMD - root 1 0 0 Jun23 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 - root 2 0 0 Jun23 ? 00:00:00 [kthreadd] - ... - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ps -ef | grep mysqld - root 4943 4581 0 22:45 pts/0 00:00:00 grep --color=auto mysqld - mysql 25257 1 0 Jun25 ? 00:00:39 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid - ``` - -2. **kill** - 终止进程。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# kill 1234 - [root@iZwz97tbgo9lkabnat2lo8Z ~]# kill -9 1234 - ``` - - 例子:用一条命令强制终止正在运行的Redis进程。 - - ```Shell - ps -ef | grep redis | grep -v grep | awk '{print $2}' | xargs kill - ``` - -3. 将进程置于后台运行。 - - - `Ctrl+Z` - - `&` - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# mongod & - [root@iZwz97tbgo9lkabnat2lo8Z ~]# redis-server - ... - ^Z - [4]+ Stopped redis-server - ``` - -4. **jobs** - 查询后台进程。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# jobs - [2] Running mongod & - [3]- Stopped cat - [4]+ Stopped redis-server - ``` - -5. **bg** - 让进程在后台继续运行。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# bg %4 - [4]+ redis-server & - [root@iZwz97tbgo9lkabnat2lo8Z ~]# jobs - [2] Running mongod & - [3]+ Stopped cat - [4]- Running redis-server & - ``` - -6. **fg** - 将后台进程置于前台。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# fg %4 - redis-server - ^C5554:signal-handler (1530025281) Received SIGINT scheduling shutdown... - 5554:M 26 Jun 23:01:21.413 # User requested shutdown... - 5554:M 26 Jun 23:01:21.413 * Saving the final RDB snapshot before exiting. - 5554:M 26 Jun 23:01:21.415 * DB saved on disk - 5554:M 26 Jun 23:01:21.415 # Redis is now ready to exit, bye bye... - ``` - - > 说明:置于前台的进程可以使用`Ctrl+C`来终止它。 - -7. **top** - 进程监控。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# top - top - 23:04:23 up 3 days, 14:10, 1 user, load average: 0.00, 0.01, 0.05 - Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie - %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st - KiB Mem : 1016168 total, 191060 free, 324700 used, 500408 buff/cache - KiB Swap: 0 total, 0 free, 0 used. 530944 avail Mem - ... - ``` - -### 系统性能 - -1. 查看系统活动信息 - **sar**。 - -2. 查看内存使用情况 - **free**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# free - total used free shared buff/cache available - Mem: 1016168 323924 190452 356 501792 531800 - Swap: 0 0 0 - ``` - -3. 查看进程使用内存状况 - **pmap**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# ps - PID TTY TIME CMD - 4581 pts/0 00:00:00 bash - 5664 pts/0 00:00:00 ps - [root@iZwz97tbgo9lkabnat2lo8Z ~]# pmap 4581 - 4581: -bash - 0000000000400000 884K r-x-- bash - 00000000006dc000 4K r---- bash - 00000000006dd000 36K rw--- bash - 00000000006e6000 24K rw--- [ anon ] - 0000000001de0000 400K rw--- [ anon ] - 00007f82fe805000 48K r-x-- libnss_files-2.17.so - 00007f82fe811000 2044K ----- libnss_files-2.17.so - ... - ``` - -4. 报告设备CPU和I/O统计信息 - **iostat**。 - - ```Shell - [root@iZwz97tbgo9lkabnat2lo8Z ~]# iostat - Linux 3.10.0-693.11.1.el7.x86_64 (iZwz97tbgo9lkabnat2lo8Z) 06/26/2018 _x86_64_ (1 CPU) - avg-cpu: %user %nice %system %iowait %steal %idle - 0.79 0.00 0.20 0.04 0.00 98.97 - Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn - vda 0.85 6.78 21.32 2106565 6623024 - vdb 0.00 0.01 0.00 2088 0 - ``` - diff --git a/Day36-40/36-38.关系型数据库MySQL.md b/Day36-40/36-38.关系型数据库MySQL.md new file mode 100644 index 0000000..a9761c7 --- /dev/null +++ b/Day36-40/36-38.关系型数据库MySQL.md @@ -0,0 +1,1343 @@ +## 关系数据库入门 + +### 关系数据库概述 + +1. 数据持久化 - 将数据保存到能够长久保存数据的存储介质中,在掉电的情况下数据也不会丢失。 + +2. 数据库发展史 - 网状数据库、层次数据库、关系数据库、NoSQL数据库。 + + > 1970年,IBM的研究员E.F.Codd在*Communication of the ACM*上发表了名为*A Relational Model of Data for Large Shared Data Banks*的论文,提出了关系模型的概念,奠定了关系模型的理论基础。后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。 + +3. 关系数据库特点。 + + - 理论基础:集合论和关系代数。 + + - 具体表象:用二维表(有行和列)组织数据。 + + - 编程语言:结构化查询语言(SQL)。 + +4. ER模型(实体关系模型)和概念模型图。 + + **ER模型**,全称为**实体关系模型**(Entity-Relationship Model),由美籍华裔计算机科学家陈品山先生提出,是概念数据模型的高层描述方式,如下图所示。 + + ![](./res/er_diagram.png) + + - 实体 - 矩形框 + - 属性 - 椭圆框 + - 关系 - 菱形框 + - 重数 - 1:1(一对一) / 1:N(一对多) / M:N(多对多) + + 实际项目开发中,我们可以利用数据库建模工具(如:PowerDesigner)来绘制概念数据模型(其本质就是ER模型),然后再设置好目标数据库系统,将概念模型转换成物理模型,最终生成创建二维表的SQL(很多工具都可以根据我们设计的物理模型图以及设定的目标数据库来导出SQL或直接生成数据表)。 + + ![](./res/conceptual_model.png) + +5. 关系数据库产品。 + - [Oracle](https://www.oracle.com/index.html) - 目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库,它实现了分布式处理的功能。在Oracle最新的12c版本中,还引入了多承租方架构,使用该架构可轻松部署和管理数据库云。 + - [DB2](https://www.ibm.com/analytics/us/en/db2/) - IBM公司开发的、主要运行于Unix(包括IBM自家的[AIX](https://zh.wikipedia.org/wiki/AIX))、Linux、以及Windows服务器版等系统的关系数据库产品。DB2历史悠久且被认为是最早使用SQL的数据库产品,它拥有较为强大的商业智能功能。 + - [SQL Server](https://www.microsoft.com/en-us/sql-server/) - 由Microsoft开发和推广的关系型数据库产品,最初适用于中小企业的数据管理,但是近年来它的应用范围有所扩展,部分大企业甚至是跨国公司也开始基于它来构建自己的数据管理系统。 + - [MySQL](https://www.mysql.com/) - MySQL是开放源代码的,任何人都可以在GPL(General Public License)的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。 + - [PostgreSQL]() - 在BSD许可证下发行的开放源代码的关系数据库产品。 + +### MySQL简介 + +MySQL最早是由瑞典的MySQL AB公司开发的一个开放源码的关系数据库管理系统,该公司于2008年被昇阳微系统公司(Sun Microsystems)收购。在2009年,甲骨文公司(Oracle)收购昇阳微系统公司,因此在这之后MySQL成为了Oracle旗下产品。 + +MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用于中小型网站开发。随着MySQL的不断成熟,它也逐渐被应用于更多大规模网站和应用,比如维基百科、谷歌(Google)、脸书(Facebook)、淘宝网等网站都使用了MySQL来提供数据持久化服务。 + +甲骨文公司收购后昇阳微系统公司,大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目[OpenSolaris](https://zh.wikipedia.org/wiki/OpenSolaris)的发展,因此导致自由软件社区对于Oracle是否还会持续支持MySQL社区版(MySQL的各个发行版本中唯一免费的版本)有所担忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划[MariaDB](https://zh.wikipedia.org/wiki/MariaDB)(以他女儿的名字命名的数据库)。有许多原来使用MySQL数据库的公司(例如:维基百科)已经陆续完成了从MySQL数据库到MariaDB数据库的迁移。 + +1. 安装和配置 + + > **说明**:下面的安装和配置都是以CentOS Linux环境为例,如果需要在其他系统下安装MySQL,读者可以自行在网络上查找对应的安装教程)。 + + - 刚才说过,MySQL有一个分支版本名叫MariaDB,该数据库旨在继续保持MySQL数据库在[GNU GPL](https://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81)下开源。如果要使用MariaDB作为MySQL的替代品,可以使用下面的命令进行安装。 + + ```Shell + yum install mariadb mariadb-server + ``` + + - 如果要安装官方版本的MySQL,可以在[MySQL官方网站]()下载安装文件。首先在下载页面中选择平台和版本,然后找到对应的下载链接。下面以MySQL 5.7.26版本和Red Hat Enterprise Linux为例,直接下载包含所有安装文件的归档文件,解归档之后通过包管理工具进行安装。 + + ```Shell + wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar + tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar + ``` + + 如果系统上有MariaDB相关的文件,需要先移除MariaDB相关的文件。 + + ```Shell + yum list installed | grep mariadb | awk '{print $1}' | xargs yum erase -y + ``` + + 接下来可以按照如下所示的顺序用RPM(Redhat Package Manager)工具安装MySQL。 + + ```Shell + rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm + rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm + rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm + rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm + ``` + + 可以使用下面的命令查看已经安装的MySQL相关的包。 + + ```Shell + rpm -qa | grep mysql + ``` + + - 配置MySQL。 + + MySQL的配置文件在`/etc`目录下,名为`my.cnf`,默认的配置文件内容如下所示。如果对这个文件不理解并没有关系,什么时候用到这个配置文件什么时候再了解它就行了。 + + ```Shell + cat /etc/my.cnf + ``` + + ```INI + # For advice on how to change settings please see + # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html + + [mysqld] + # + # Remove leading # and set to the amount of RAM for the most important data + # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. + # innodb_buffer_pool_size = 128M + # + # Remove leading # to turn on a very important data integrity option: logging + # changes to the binary log between backups. + # log_bin + # + # Remove leading # to set options mainly useful for reporting servers. + # The server defaults are faster for transactions and fast SELECTs. + # Adjust sizes as needed, experiment to find the optimal values. + # join_buffer_size = 128M + # sort_buffer_size = 2M + # read_rnd_buffer_size = 2M + datadir=/var/lib/mysql + socket=/var/lib/mysql/mysql.sock + + # Disabling symbolic-links is recommended to prevent assorted security risks + symbolic-links=0 + + log-error=/var/log/mysqld.log + pid-file=/var/run/mysqld/mysqld.pid + ``` + + - 启动MySQL服务。 + + 可以使用下面的命令来启动MySQL。 + + ```Shell + service mysqld start + ``` + + 在CentOS 7中,更推荐使用下面的命令来启动MySQL。 + + ```Shell + systemctl start mysqld + ``` + + 启动MySQL成功后,可以通过下面的命令来检查网络端口使用情况,MySQL默认使用3306端口。 + + ```Shell + netstat -ntlp | grep mysql + ``` + + 也可以使用下面的命令查找是否有名为mysqld的进程。 + + ```Shell + pgrep mysqld + ``` + + - 使用MySQL客户端工具连接服务器。 + + 命令行工具: + + ```Shell + mysql -u root -p + ``` + + > 说明:启动客户端时,`-u`参数用来指定用户名,MySQL默认的超级管理账号为`root`;`-p`表示要输入密码(用户口令);如果连接的是其他主机而非本机,可以用`-h`来指定连接主机的主机名或IP地址。 + + 如果是首次安装MySQL,可以使用下面的命令来找到默认的初始密码。 + + ```Shell + cat /var/log/mysqld.log | grep password + ``` + + 上面的命令会查看MySQL的日志带有password的行,在显示的结果中`root@localhost:`后面的部分就是默认设置的初始密码。 + + 修改超级管理员(root)的访问口令为`123456`。 + + ```SQL + set global validate_password_policy=0; + set global validate_password_length=6; + alter user 'root'@'localhost' identified by '123456'; + ``` + + > 说明:MySQL较新的版本默认不允许使用弱口令作为用户口令,所以我们通过上面的前两条命令修改了验证用户口令的策略和口令的长度。事实上我们不应该使用弱口令,因为存在用户口令被暴力破解的风险。近年来,攻击数据库窃取数据和劫持数据库勒索比特币的事件屡见不鲜,要避免这些潜在的风险,最为重要的一点是不要让数据库服务器暴露在公网上(最好的做法是将数据库置于内网,至少要做到不向公网开放数据库服务器的访问端口),另外要保管好`root`账号的口令,应用系统需要访问数据库时,通常不使用`root`账号进行访问,而是创建其他拥有适当权限的账号来访问。 + + 再次使用客户端工具连接MySQL服务器时,就可以使用新设置的口令了。在实际开发中,为了方便用户操作,可以选择图形化的客户端工具来连接MySQL服务器,包括: + + - MySQL Workbench(官方提供的工具) + - Navicat for MySQL(界面简单优雅,功能直观强大) + - SQLyog for MySQL(强大的MySQL数据库管理员工具) + +2. 常用命令。 + + - 查看服务器版本。 + + ```SQL + select version(); + ``` + + - 查看所有数据库。 + + ```SQL + show databases; + ``` + + - 切换到指定数据库。 + + ```SQL + use mysql; + ``` + + - 查看数据库下所有表。 + + ```Shell + show tables; + ``` + + - 获取帮助。 + + ```SQL + ? contents; + ? functions; + ? numeric functions; + ? round; + + ? data types; + ? longblob; + ``` + +### SQL详解 + +#### 基本操作 + +我们通常可以将SQL分为三类:DDL(数据定义语言)、DML(数据操作语言)和DCL(数据控制语言)。DDL主要用于创建(create)、删除(drop)、修改(alter)数据库中的对象,比如创建、删除和修改二维表;DML主要负责插入数据(insert)、删除数据(delete)、更新数据(update)和查询(select);DCL通常用于授予权限(grant)和召回权限(revoke)。 + +> 说明:SQL是不区分大小写的语言,为了书写方便,下面的SQL都使用了小写字母来书写。 + +1. DDL(数据定义语言) + + ```SQL + -- 如果存在名为school的数据库就删除它 + drop database if exists school; + + -- 创建名为school的数据库并设置默认的字符集和排序方式 + create database school default charset utf8 collate utf8_bin; + + -- 切换到school数据库上下文环境 + use school; + + -- 创建学院表 + create table tb_college + ( + collid int auto_increment comment '编号', + collname varchar(50) not null comment '名称', + collmaster varchar(20) not null comment '院长', + primary key (collid) + ); + + -- 创建学生表 + create table tb_student + ( + stuid int not null comment '学号', + stuname varchar(20) not null comment '姓名', + stusex boolean default 1 comment '性别', + stubirth date not null comment '出生日期', + stuaddr varchar(255) default '' comment '籍贯', + collid int not null comment '所属学院', + primary key (stuid), + foreign key (collid) references tb_college (collid) + ); + + -- 创建教师表 + create table tb_teacher + ( + teaid int not null comment '工号', + teaname varchar(20) not null comment '姓名', + teatitle varchar(10) default '助教' comment '职称', + collid int not null comment '所属学院', + primary key (teaid), + foreign key (collid) references tb_college (collid) + ); + + -- 创建课程表 + create table tb_course + ( + couid int not null comment '编号', + couname varchar(50) not null comment '名称', + coucredit int not null comment '学分', + teaid int not null comment '授课老师', + primary key (couid), + foreign key (teaid) references tb_teacher (teaid) + ); + + -- 创建选课记录表 + create table tb_record + ( + recid int auto_increment comment '选课记录编号', + sid int not null comment '选课学生', + cid int not null comment '所选课程', + seldate datetime default now() comment '选课时间日期', + score decimal(4,1) comment '考试成绩', + primary key (recid), + foreign key (sid) references tb_student (stuid), + foreign key (cid) references tb_course (couid), + unique (sid, cid) + ); + ``` + + 上面的DDL有几个地方需要强调一下: + + - 创建数据库时,我们通过`default charset utf8`指定了数据库默认使用的字符集,我们推荐使用该字符集,因为utf8能够支持国际化编码。如果将来数据库中用到的字符可能包括类似于Emoji这样的图片字符,也可以将默认字符集设定为utf8mb4(最大4字节的utf-8编码)。查看MySQL支持的字符集可以执行下面的语句。 + + ```SQL + show character set; + ``` + + ``` + +----------+---------------------------------+---------------------+--------+ + | Charset | Description | Default collation | Maxlen | + +----------+---------------------------------+---------------------+--------+ + | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | + | dec8 | DEC West European | dec8_swedish_ci | 1 | + | cp850 | DOS West European | cp850_general_ci | 1 | + | hp8 | HP West European | hp8_english_ci | 1 | + | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | + | latin1 | cp1252 West European | latin1_swedish_ci | 1 | + | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | + | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | + | ascii | US ASCII | ascii_general_ci | 1 | + | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | + | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | + | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | + | tis620 | TIS620 Thai | tis620_thai_ci | 1 | + | euckr | EUC-KR Korean | euckr_korean_ci | 2 | + | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | + | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | + | greek | ISO 8859-7 Greek | greek_general_ci | 1 | + | cp1250 | Windows Central European | cp1250_general_ci | 1 | + | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | + | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | + | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | + | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | + | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | + | cp866 | DOS Russian | cp866_general_ci | 1 | + | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | + | macce | Mac Central European | macce_general_ci | 1 | + | macroman | Mac West European | macroman_general_ci | 1 | + | cp852 | DOS Central European | cp852_general_ci | 1 | + | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | + | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | + | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 | + | utf16 | UTF-16 Unicode | utf16_general_ci | 4 | + | utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 | + | cp1256 | Windows Arabic | cp1256_general_ci | 1 | + | cp1257 | Windows Baltic | cp1257_general_ci | 1 | + | utf32 | UTF-32 Unicode | utf32_general_ci | 4 | + | binary | Binary pseudo charset | binary | 1 | + | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 | + | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 | + | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 | + | gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 | + +----------+---------------------------------+---------------------+--------+ + 41 rows in set (0.00 sec) + ``` + + 如果要设置MySQL服务启动时默认使用的字符集,可以修改MySQL的配置并添加以下内容 + + ```INI + [mysqld] + character-set-server=utf8 + ``` + + - 在创建表的时候,我们可以在右圆括号的后面通过`engine=XXX`来指定表的存储引擎,MySQL支持多种存储引擎,可以通过`show engines`命令进行查看。MySQL 5.5以后的版本默认使用的存储引擎是InnoDB,它正好也就是我们推荐大家使用的存储引擎(因为InnoDB更适合互联网应用对高并发、性能以及事务支持等方面的需求)。 + + ```SQL + show engines\G + ``` + + ``` + *************************** 1. row *************************** + Engine: InnoDB + Support: DEFAULT + Comment: Supports transactions, row-level locking, and foreign keys + Transactions: YES + XA: YES + Savepoints: YES + *************************** 2. row *************************** + Engine: MRG_MYISAM + Support: YES + Comment: Collection of identical MyISAM tables + Transactions: NO + XA: NO + Savepoints: NO + *************************** 3. row *************************** + Engine: MEMORY + Support: YES + Comment: Hash based, stored in memory, useful for temporary tables + Transactions: NO + XA: NO + Savepoints: NO + *************************** 4. row *************************** + Engine: BLACKHOLE + Support: YES + Comment: /dev/null storage engine (anything you write to it disappears) + Transactions: NO + XA: NO + Savepoints: NO + *************************** 5. row *************************** + Engine: MyISAM + Support: YES + Comment: MyISAM storage engine + Transactions: NO + XA: NO + Savepoints: NO + *************************** 6. row *************************** + Engine: CSV + Support: YES + Comment: CSV storage engine + Transactions: NO + XA: NO + Savepoints: NO + *************************** 7. row *************************** + Engine: ARCHIVE + Support: YES + Comment: Archive storage engine + Transactions: NO + XA: NO + Savepoints: NO + *************************** 8. row *************************** + Engine: PERFORMANCE_SCHEMA + Support: YES + Comment: Performance Schema + Transactions: NO + XA: NO + Savepoints: NO + *************************** 9. row *************************** + Engine: FEDERATED + Support: NO + Comment: Federated MySQL storage engine + Transactions: NULL + XA: NULL + Savepoints: NULL + 9 rows in set (0.00 sec) + ``` + + 下面的表格对MySQL几种常用的数据引擎进行了简单的对比。 + + | 特性 | InnoDB | MRG_MYISAM | MEMORY | MyISAM | + | ------------ | ------------ | ---------- | ------ | ------ | + | 存储限制 | 有 | 没有 | 有 | 有 | + | 事务 | 支持 | | | | + | 锁机制 | 行锁 | 表锁 | 表锁 | 表锁 | + | B树索引 | 支持 | 支持 | 支持 | 支持 | + | 哈希索引 | | | 支持 | | + | 全文检索 | 支持(5.6+) | | | 支持 | + | 集群索引 | 支持 | | | | + | 数据缓存 | 支持 | | 支持 | | + | 索引缓存 | 支持 | 支持 | 支持 | 支持 | + | 数据可压缩 | | | | 支持 | + | 内存使用 | 高 | 低 | 中 | 低 | + | 存储空间使用 | 高 | 低 | | 低 | + | 批量插入性能 | 低 | 高 | 高 | 高 | + | 是否支持外键 | 支持 | | | | + + 通过上面的比较我们可以了解到,InnoDB是唯一能够支持外键、事务以及行锁的存储引擎,所以我们之前说它更适合互联网应用,而且它也是较新的MySQL版本中默认使用的存储引擎。 + + - 在定义表结构为每个字段选择数据类型时,如果不清楚哪个数据类型更合适,可以通过MySQL的帮助系统来了解每种数据类型的特性、数据的长度和精度等相关信息。 + + ```SQL + ? data types + ``` + + ``` + You asked for help about help category: "Data Types" + For more information, type 'help ', where is one of the following + topics: + AUTO_INCREMENT + BIGINT + BINARY + BIT + BLOB + BLOB DATA TYPE + BOOLEAN + CHAR + CHAR BYTE + DATE + DATETIME + DEC + DECIMAL + DOUBLE + DOUBLE PRECISION + ENUM + FLOAT + INT + INTEGER + LONGBLOB + LONGTEXT + MEDIUMBLOB + MEDIUMINT + MEDIUMTEXT + SET DATA TYPE + SMALLINT + TEXT + TIME + TIMESTAMP + TINYBLOB + TINYINT + TINYTEXT + VARBINARY + VARCHAR + YEAR DATA TYPE + ``` + + ```SQL + ? varchar + ``` + + ``` + Name: 'VARCHAR' + Description: + [NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE + collation_name] + + A variable-length string. M represents the maximum column length in + characters. The range of M is 0 to 65,535. The effective maximum length + of a VARCHAR is subject to the maximum row size (65,535 bytes, which is + shared among all columns) and the character set used. For example, utf8 + characters can require up to three bytes per character, so a VARCHAR + column that uses the utf8 character set can be declared to be a maximum + of 21,844 characters. See + http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html. + + MySQL stores VARCHAR values as a 1-byte or 2-byte length prefix plus + data. The length prefix indicates the number of bytes in the value. A + VARCHAR column uses one length byte if values require no more than 255 + bytes, two length bytes if values may require more than 255 bytes. + + *Note*: + + MySQL follows the standard SQL specification, and does not remove + trailing spaces from VARCHAR values. + + VARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the + standard SQL way to define that a VARCHAR column should use some + predefined character set. MySQL uses utf8 as this predefined character + set. http://dev.mysql.com/doc/refman/5.7/en/charset-national.html. + NVARCHAR is shorthand for NATIONAL VARCHAR. + + URL: http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html + ``` + + 在数据类型的选择上,保存字符串数据通常都使用VARCHAR和CHAR两种类型,前者通常称为变长字符串,而后者通常称为定长字符串;对于InnoDB存储引擎,行存储格式没有区分固定长度和可变长度列,因此VARCHAR类型好CHAR类型没有本质区别,后者不一定比前者性能更好。如果要保存的很大字符串,可以使用TEXT类型;如果要保存很大的字节串,可以使用BLOB(二进制大对象)类型。在MySQL中,TEXT和BLOB又分别包括TEXT、MEDIUMTEXT、LONGTEXT和BLOB、MEDIUMBLOB、LONGBLOB三种不同的类型,它们主要的区别在于存储数据的最大大小不同。保存浮点数可以用FLOAT或DOUBLE类型,而保存定点数应该使用DECIMAL类型。如果要保存时间日期,DATETIME类型优于TIMESTAMP类型,因为前者能表示的时间日期范围更大。 + +2. DML + + ```SQL + -- 插入学院数据 + insert into tb_college (collname, collmaster) values + ('计算机学院', '左冷禅'), + ('外国语学院', '岳不群'), + ('经济管理学院', '风清扬'); + + -- 插入学生数据 + insert into tb_student (stuid, stuname, stusex, stubirth, stuaddr, collid) values + (1001, '杨逍', 1, '1990-3-4', '四川成都', 1), + (1002, '任我行', 1, '1992-2-2', '湖南长沙', 1), + (1033, '王语嫣', 0, '1989-12-3', '四川成都', 1), + (1572, '岳不群', 1, '1993-7-19', '陕西咸阳', 1), + (1378, '纪嫣然', 0, '1995-8-12', '四川绵阳', 1), + (1954, '林平之', 1, '1994-9-20', '福建莆田', 1), + (2035, '东方不败', 1, '1988-6-30', null, 2), + (3011, '林震南', 1, '1985-12-12', '福建莆田', 3), + (3755, '项少龙', 1, '1993-1-25', null, 3), + (3923, '杨不悔', 0, '1985-4-17', '四川成都', 3), + (4040, '隔壁老王', 1, '1989-1-1', '四川成都', 2); + + -- 删除学生数据 + delete from tb_student where stuid=4040; + + -- 更新学生数据 + update tb_student set stuname='杨过', stuaddr='湖南长沙' where stuid=1001; + + -- 插入老师数据 + insert into tb_teacher (teaid, teaname, teatitle, collid) values + (1122, '张三丰', '教授', 1), + (1133, '宋远桥', '副教授', 1), + (1144, '杨逍', '副教授', 1), + (2255, '范遥', '副教授', 2), + (3366, '韦一笑', '讲师', 3); + + -- 插入课程数据 + insert into tb_course (couid, couname, coucredit, teaid) values + (1111, 'Python程序设计', 3, 1122), + (2222, 'Web前端开发', 2, 1122), + (3333, '操作系统', 4, 1122), + (4444, '计算机网络', 2, 1133), + (5555, '编译原理', 4, 1144), + (6666, '算法和数据结构', 3, 1144), + (7777, '经贸法语', 3, 2255), + (8888, '成本会计', 2, 3366), + (9999, '审计学', 3, 3366); + + -- 插入选课数据 + insert into tb_record (sid, cid, seldate, score) values + (1001, 1111, '2017-09-01', 95), + (1001, 2222, '2017-09-01', 87.5), + (1001, 3333, '2017-09-01', 100), + (1001, 4444, '2018-09-03', null), + (1001, 6666, '2017-09-02', 100), + (1002, 1111, '2017-09-03', 65), + (1002, 5555, '2017-09-01', 42), + (1033, 1111, '2017-09-03', 92.5), + (1033, 4444, '2017-09-01', 78), + (1033, 5555, '2017-09-01', 82.5), + (1572, 1111, '2017-09-02', 78), + (1378, 1111, '2017-09-05', 82), + (1378, 7777, '2017-09-02', 65.5), + (2035, 7777, '2018-09-03', 88), + (2035, 9999, default, null), + (3755, 1111, default, null), + (3755, 8888, default, null), + (3755, 9999, '2017-09-01', 92); + ``` + + ```SQL + -- 查询所有学生信息 + select * from tb_student; + + -- 查询所有课程名称及学分(投影和别名) + select couname, coucredit from tb_course; + select couname as 课程名称, coucredit as 学分 from tb_course; + + -- 查询所有学生的姓名和性别(条件运算) + select stuname as 姓名, case stusex when 1 then '男' else '女' end as 性别 from tb_student; + select stuname as 姓名, if(stusex, '男', '女') as 性别 from tb_student; + + -- 查询所有女学生的姓名和出生日期(筛选) + select stuname, stubirth from tb_student where stusex=0; + + -- 查询所有80后学生的姓名、性别和出生日期(筛选) + select stuname, stusex, stubirth from tb_student where stubirth>='1980-1-1' and stubirth<='1989-12-31'; + select stuname, stusex, stubirth from tb_student where stubirth between '1980-1-1' and '1989-12-31'; + + -- 查询姓"杨"的学生姓名和性别(模糊) + select stuname, stusex from tb_student where stuname like '杨%'; + + -- 查询姓"杨"名字两个字的学生姓名和性别(模糊) + select stuname, stusex from tb_student where stuname like '杨_'; + + -- 查询姓"杨"名字三个字的学生姓名和性别(模糊) + select stuname, stusex from tb_student where stuname like '杨__'; + + -- 查询名字中有"不"字或"嫣"字的学生的姓名(模糊) + select stuname, stusex from tb_student where stuname like '%不%' or stuname like '%嫣%'; + + -- 查询没有录入家庭住址的学生姓名(空值) + select stuname from tb_student where stuaddr is null; + + -- 查询录入了家庭住址的学生姓名(空值) + select stuname from tb_student where stuaddr is not null; + + -- 查询学生选课的所有日期(去重) + select distinct seldate from tb_record; + + -- 查询学生的家庭住址(去重) + select distinct stuaddr from tb_student where stuaddr is not null; + + -- 查询男学生的姓名和生日按年龄从大到小排列(排序) + select stuname as 姓名, datediff(curdate(), stubirth) div 365 as 年龄 from tb_student where stusex=1 order by 年龄 desc; + + -- 查询年龄最大的学生的出生日期(聚合函数) + select min(stubirth) from tb_student; + + -- 查询年龄最小的学生的出生日期(聚合函数) + select max(stubirth) from tb_student; + + -- 查询男女学生的人数(分组和聚合函数) + select stusex, count(*) from tb_student group by stusex; + + -- 查询课程编号为1111的课程的平均成绩(筛选和聚合函数) + select avg(score) from tb_record where cid=1111; + + -- 查询学号为1001的学生所有课程的平均分(筛选和聚合函数) + select avg(score) from tb_record where sid=1001; + + -- 查询每个学生的学号和平均成绩(分组和聚合函数) + select sid as 学号, avg(score) as 平均分 from tb_record group by sid; + + -- 查询平均成绩大于等于90分的学生的学号和平均成绩 + -- 分组以前的筛选使用where子句 / 分组以后的筛选使用having子句 + select sid as 学号, avg(score) as 平均分 from tb_record group by sid having 平均分>=90; + + -- 查询年龄最大的学生的姓名(子查询/嵌套的查询) + select stuname from tb_student where stubirth=( select min(stubirth) from tb_student ); + + -- 查询年龄最大的学生姓名和年龄(子查询+运算) + select stuname as 姓名, datediff(curdate(), stubirth) div 365 as 年龄 from tb_student where stubirth=( select min(stubirth) from tb_student ); + + -- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算) + select stuname from tb_student where stuid in ( select stuid from tb_record group by stuid having count(stuid)>2 ); + + -- 查询学生姓名、课程名称以及成绩(连接查询) + select stuname, couname, score from tb_student t1, tb_course t2, tb_record t3 where stuid=sid and couid=cid and score is not null; + + -- 查询学生姓名、课程名称以及成绩按成绩从高到低查询第11-15条记录(内连接+分页) + select stuname, couname, score from tb_student inner join tb_record on stuid=sid inner join tb_course on couid=cid where score is not null order by score desc limit 5 offset 10; + + select stuname, couname, score from tb_student inner join tb_record on stuid=sid inner join tb_course on couid=cid where score is not null order by score desc limit 10, 5; + + -- 查询选课学生的姓名和平均成绩(子查询和连接查询) + select stuname, avgmark from tb_student, ( select sid, avg(score) as avgmark from tb_record group by sid ) temp where stuid=sid; + + select stuname, avgmark from tb_student inner join ( select sid, avg(score) as avgmark from tb_record group by sid ) temp on stuid=sid; + + -- 查询每个学生的姓名和选课数量(左外连接和子查询) + select stuname, ifnull(total, 0) from tb_student left outer join ( select sid, count(sid) as total from tb_record group by sid ) temp on stuid=sid; + ``` + + 上面的DML有几个地方需要加以说明: + + 1. MySQL中支持多种类型的运算符,包括:算术运算符(+、-、*、/、%)、比较运算符(=、<>、<=>、<、<=、>、>=、BETWEEN...AND...、IN、IS NULL、IS NOT NULL、LIKE、RLIKE、REGEXP)、逻辑运算符(NOT、AND、OR、XOR)和位运算符(&、|、^、~、>>、<<),我们可以在DML中使用这些运算符处理数据。 + + 2. 在查询数据时,可以在SELECT语句及其子句(如WHERE子句、ORDER BY子句、HAVING子句等)中使用函数,这些函数包括字符串函数、数值函数、时间日期函数、流程函数等,如下面的表格所示。 + + 常用字符串函数。 + + | 函数 | 功能 | + | ----------------------- | ----------------------------------------------------- | + | CONCAT | 将多个字符串连接成一个字符串 | + | FORMAT | 将数值格式化成字符串并指定保留几位小数 | + | FROM_BASE64 / TO_BASE64 | BASE64解码/编码 | + | BIN / OCT / HEX | 将数值转换成二进制/八进制/十六进制字符串 | + | LOCATE | 在字符串中查找一个子串的位置 | + | LEFT / RIGHT | 返回一个字符串左边/右边指定长度的字符 | + | LENGTH / CHAR_LENGTH | 返回字符串的长度以字节/字符为单位 | + | LOWER / UPPER | 返回字符串的小写/大写形式 | + | LPAD / RPAD | 如果字符串的长度不足,在字符串左边/右边填充指定的字符 | + | LTRIM / RTRIM | 去掉字符串前面/后面的空格 | + | ORD / CHAR | 返回字符对应的编码/返回编码对应的字符 | + | STRCMP | 比较字符串,返回-1、0、1分别表示小于、等于、大于 | + | SUBSTRING | 返回字符串指定范围的子串 | + + 常用数值函数。 + + | 函数 | 功能 | + | ------------------------------------------ | ---------------------------------- | + | ABS | 返回一个数的绝度值 | + | CEILING / FLOOR | 返回一个数上取整/下取整的结果 | + | CONV | 将一个数从一种进制转换成另一种进制 | + | CRC32 | 计算循环冗余校验码 | + | EXP / LOG / LOG2 / LOG10 | 计算指数/对数 | + | POW | 求幂 | + | RAND | 返回[0,1)范围的随机数 | + | ROUND | 返回一个数四舍五入后的结果 | + | SQRT | 返回一个数的平方根 | + | TRUNCATE | 截断一个数到指定的精度 | + | SIN / COS / TAN / COT / ASIN / ACOS / ATAN | 三角函数 | + + 常用时间日期函数。 + + | 函数 | 功能 | + | ----------------------- | ------------------------------------- | + | CURDATE / CURTIME / NOW | 获取当前日期/时间/日期和时间 | + | ADDDATE / SUBDATE | 将两个日期表达式相加/相减并返回结果 | + | DATE / TIME | 从字符串中获取日期/时间 | + | YEAR / MONTH / DAY | 从日期中获取年/月/日 | + | HOUR / MINUTE / SECOND | 从时间中获取时/分/秒 | + | DATEDIFF / TIMEDIFF | 返回两个时间日期表达式相差多少天/小时 | + | MAKEDATE / MAKETIME | 制造一个日期/时间 | + + 常用流程函数。 + + | 函数 | 功能 | + | ------ | ------------------------------------------------ | + | IF | 根据条件是否成立返回不同的值 | + | IFNULL | 如果为NULL则返回指定的值否则就返回本身 | + | NULLIF | 两个表达式相等就返回NULL否则返回第一个表达式的值 | + + 其他常用函数。 + + | 函数 | 功能 | + | ---------------------- | ----------------------------- | + | MD5 / SHA1 / SHA2 | 返回字符串对应的哈希摘要 | + | CHARSET / COLLATION | 返回字符集/校对规则 | + | USER / CURRENT_USER | 返回当前用户 | + | DATABASE | 返回当前数据库名 | + | VERSION | 返回当前数据库版本 | + | FOUND_ROWS / ROW_COUNT | 返回查询到的行数/受影响的行数 | + | LAST_INSERT_ID | 返回最后一个自增主键的值 | + | UUID / UUID_SHORT | 返回全局唯一标识符 | + +3. DCL + + ```SQL + -- 创建可以远程登录的root账号并为其指定口令 + create user 'root'@'%' identified by '123456'; + + -- 为远程登录的root账号授权操作所有数据库所有对象的所有权限并允许其将权限再次赋予其他用户 + grant all privileges on *.* to 'root'@'%' with grant option; + + -- 创建名为hellokitty的用户并为其指定口令 + create user 'hellokitty'@'%' identified by '123123'; + + -- 将对school数据库所有对象的所有操作权限授予hellokitty + grant all privileges on school.* to 'hellokitty'@'%'; + + -- 召回hellokitty对school数据库所有对象的insert/delete/update权限 + revoke insert, delete, update on school.* from 'hellokitty'@'%'; + ``` + + > 说明:创建一个可以允许任意主机登录并且具有超级管理员权限的用户在现实中并不是一个明智的决定,因为一旦该账号的口令泄露或者被破解,数据库将会面临灾难级的风险。 + +#### 索引 + +索引是关系型数据库中用来提升查询性能最为重要的手段。关系型数据库中的索引就像一本书的目录,我们可以想象一下,如果要从一本书中找出某个知识点,但是这本书没有目录,这将是意见多么可怕的事情(我们估计得一篇一篇的翻下去,才能确定这个知识点到底在什么位置)。创建索引虽然会带来存储空间上的开销,就像一本书的目录会占用一部分的篇幅一样,但是在牺牲空间后换来的查询时间的减少也是非常显著的。 + +MySQL中,所有数据类型的列都可以被索引,常用的存储引擎InnoDB和MyISAM能支持每个表创建16个索引。InnoDB和MyISAM使用的索引其底层算法是B-tree(B树),B-tree是一种自平衡的树,类似于平衡二叉排序树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的操作都在对数时间内完成。 + +接下来我们通过一个简单的例子来说明索引的意义,比如我们要根据学生的姓名来查找学生,这个场景在实际开发中应该经常遇到,就跟通过商品名称查找商品道理是一样的。我们可以使用MySQL的`explain`关键字来查看SQL的执行计划。 + +```SQL +explain select * from tb_student where stuname='林震南'\G +``` + +``` +*************************** 1. row *************************** + id: 1 + select_type: SIMPLE + table: tb_student + partitions: NULL + type: ALL +possible_keys: NULL + key: NULL + key_len: NULL + ref: NULL + rows: 11 + filtered: 10.00 + Extra: Using where +1 row in set, 1 warning (0.00 sec) +``` + +在上面的SQL执行计划中,有几项值得我们关注: + +1. type:MySQL在表中找到满足条件的行的方式,也称为访问类型,包括:ALL(全表扫描)、index(索引全扫描)、range(索引范围扫描)、ref(非唯一索引扫描)、eq_ref(唯一索引扫描)、const/system、NULL。在所有的访问类型中,很显然ALL是性能最差的,它代表了全表扫描是指要扫描表中的每一行才能找到匹配的行。 +2. possible_keys:MySQL可以选择的索引,但是**有可能不会使用**。 +3. key:MySQL真正使用的索引。 +4. rows:执行查询需要扫描的行数,这是一个**预估值**。 + +从上面的执行计划可以看出,当我们通过学生名字查询学生时实际上是进行了全表扫描,不言而喻这个查询性能肯定是非常糟糕的,尤其是在表中的行很多的时候。如果我们需要经常通过学生姓名来查询学生,那么就应该在学生姓名对应的列上创建索引,通过索引来加速查询。 + +```SQL +create index idx_student_name on tb_student(stuname); +``` + +再次查看刚才的SQL对应的执行计划。 + +```SQL +explain select * from tb_student where stuname='林震南'\G +``` + +``` +*************************** 1. row *************************** + id: 1 + select_type: SIMPLE + table: tb_student + partitions: NULL + type: ref +possible_keys: idx_student_name + key: idx_student_name + key_len: 62 + ref: const + rows: 1 + filtered: 100.00 + Extra: NULL +1 row in set, 1 warning (0.00 sec) +``` + +可以注意到,在对学生姓名创建索引后,刚才的查询已经不是全表扫描而是基于索引的查询,而且扫描的行只有唯一的一行,这显然大大的提升了查询的性能。MySQL中还允许创建前缀索引,即对索引字段的前N个字符创建索引,这样的话可以减少索引占用的空间(但节省了空间很有可能会浪费时间,**时间和空间是不可调和的矛盾**),如下所示。 + +```SQL +create index idx_student_name_1 on tb_student(stuname(1)); +``` + +上面的索引相当于是根据学生姓名的第一个字来创建的索引,我们再看看SQL执行计划。 + +```SQL +explain select * from tb_student where stuname='林震南'\G +``` + +``` +*************************** 1. row *************************** + id: 1 + select_type: SIMPLE + table: tb_student + partitions: NULL + type: ref +possible_keys: idx_student_name + key: idx_student_name + key_len: 5 + ref: const + rows: 2 + filtered: 100.00 + Extra: Using where +1 row in set, 1 warning (0.00 sec) +``` + +不知道大家是否注意到,这一次扫描的行变成了2行,因为学生表中有两个姓“林”的学生,我们只用姓名的第一个字作为索引的话,在查询时通过索引就会找到这两行。 + +如果要删除索引,可以使用下面的SQL。 + +```SQL +alter table tb_student drop index idx_student_name; +``` + +或者 + +```SQL +drop index idx_student_name on tb_student; +``` + +我们简单的为大家总结一下索引的设计原则: + +1. **最适合**索引的列是出现在**WHERE子句**和连接子句中的列。 +2. 索引列的基数越大(取值多重复值少),索引的效果就越好。 +3. 使用**前缀索引**可以减少索引占用的空间,内存中可以缓存更多的索引。 +4. **索引不是越多越好**,虽然索引加速了读操作(查询),但是写操作(增、删、改)都会变得更慢,因为数据的变化会导致索引的更新,就如同书籍章节的增删需要更新目录一样。 +5. 使用InnoDB存储引擎时,表的普通索引都会保存主键的值,所以**主键要尽可能选择较短的数据类型**,这样可以有效的减少索引占用的空间,利用提升索引的缓存效果。 + +最后,还有一点需要说明,InnoDB使用的B-tree索引,数值类型的列除了等值判断时索引会生效之外,使用>、<、>=、<=、BETWEEN...AND... 、<>时,索引仍然生效;对于字符串类型的列,如果使用不以通配符开头的模糊查询,索引也是起作用的,但是其他的情况会导致索引失效,这就意味着很有可能会做全表查询。 + + +#### 视图 + +视图是关系型数据库中将一组查询指令构成的结果集组合成可查询的数据表的对象。简单的说,视图就是虚拟的表,但与数据表不同的是,数据表是一种实体结构,而视图是一种虚拟结构,你也可以将视图理解为保存在数据库中被赋予名字的SQL语句。 + +使用视图可以获得以下好处: + +1. 可以将实体数据表隐藏起来,让外部程序无法得知实际的数据结构,让访问者可以使用表的组成部分而不是整个表,降低数据库被攻击的风险。 +2. 在大多数的情况下视图是只读的(更新视图的操作通常都有诸多的限制),外部程序无法直接透过视图修改数据。 +3. 重用SQL语句,将高度复杂的查询包装在视图表中,直接访问该视图即可取出需要的数据;也可以将视图视为数据表进行连接查询。 +4. 视图可以返回与实体数据表不同格式的数据, + +创建视图。 + +```SQL +create view vw_score +as + select sid, round(avg(score), 1) as avgscore from tb_record group by sid; + +create view vw_student_score +as + select stuname, avgscore + from tb_student, vw_score + where stuid=sid; +``` + +> **提示**:因为视图不包含数据,所以每次使用视图时,都必须执行查询以获得数据,如果你使用了连接查询、嵌套查询创建了较为复杂的视图,你可能会发现查询性能下降得很厉害。因此,在使用复杂的视图前,应该进行测试以确保其性能能够满足应用的需求。 + +使用视图。 + +```SQL +select stuname, avgscore from vw_student_score order by avgscore desc; +``` + +``` ++--------------+----------+ +| stuname | avgscore | ++--------------+----------+ +| 杨过 | 95.6 | +| 任我行 | 53.5 | +| 王语嫣 | 84.3 | +| 纪嫣然 | 73.8 | +| 岳不群 | 78.0 | +| 东方不败 | 88.0 | +| 项少龙 | 92.0 | ++--------------+----------+ +``` + +既然视图是一张虚拟的表,那么视图的中的数据可以更新吗?视图的可更新性要视具体情况而定,以下类型的视图是不能更新的: + +1. 使用了聚合函数(SUM、MIN、MAX、AVG、COUNT等)、DISTINCT、GROUP BY、HAVING、UNION或者UNION ALL的视图。 +2. SELECT中包含了子查询的视图。 +3. FROM子句中包含了一个不能更新的视图的视图。 +4. WHERE子句的子查询引用了FROM子句中的表的视图。 + +删除视图。 + +```SQL +drop view vw_student_score; +``` + +> **说明**:如果希望更新视图,可以先用上面的命令删除视图,也可以通过`create or replace view`来更新视图。 + +视图的规则和限制。 + +1. 视图可以嵌套,可以利用从其他视图中检索的数据来构造一个新的视图。视图也可以和表一起使用。 +2. 创建视图时可以使用`order by`子句,但如果从视图中检索数据时也使用了`order by`,那么该视图中原先的`order by`会被覆盖。 +3. 视图无法使用索引,也不会激发触发器(实际开发中因为性能等各方面的考虑,通常不建议使用触发器,所以我们也不对这个概念进行介绍)的执行。 + +#### 存储过程 + +存储过程是事先编译好存储在数据库中的一组SQL的集合,调用存储过程可以简化应用程序开发人员的工作,减少与数据库服务器之间的通信,对于提升数据操作的性能也是有帮助的。其实迄今为止,我们使用的SQL语句都是针对一个或多个表的单条语句,但在实际开发中经常会遇到某个操作需要多条SQL语句才能完成的情况。例如,电商网站在受理用户订单时,需要做以下一系列的处理。 + +1. 通过查询来核对库存中是否有对应的物品以及库存是否充足。 +2. 如果库存有物品,需要锁定库存以确保这些物品不再卖给别人, 并且要减少可用的物品数量以反映正确的库存量。 +3. 如果库存不足,可能需要进一步与供应商进行交互或者至少产生一条系统提示消息。 +4. 不管受理订单是否成功,都需要产生流水记录,而且需要给对应的用户产生一条通知信息。 + +我们可以通过存储过程将复杂的操作封装起来,这样不仅有助于保证数据的一致性,而且将来如果业务发生了变动,只需要调整和修改存储过程即可。对于调用存储过程的用户来说,存储过程并没有暴露数据表的细节,而且执行存储过程比一条条的执行一组SQL要快得多。 + +下面的存储过程实现了查询某门课程的最高分、最低分和平均分。 + +```SQL +delimiter $$ + +create procedure sp_get_score(courseId int, + out maxScore decimal(4,1), + out minScore decimal(4,1), + out avgScore decimal(4,1)) +begin + select max(score) into maxScore from tb_record where cid=courseId; + select min(score) into minScore from tb_record where cid=courseId; + select avg(score) into avgScore from tb_record where cid=courseId; +end $$ + +delimiter ; +``` + +> 说明:在定义存储过程时,因为可能需要书写多条SQL,而分隔这些SQL需要使用分号作为分隔符,如果这个时候,仍然用分号表示整段代码结束,那么定义存储过程的SQL就会出现错误,所以上面我们用`delimiter $$`将整段代码结束的标记定义为`$$`,那么代码中的分号将不再表示整段代码的结束,需要马上执行,整段代码在遇到`end $$`时才输入完成并执行。在定义完存储过程后,通过`delimiter ;`将结束符重新改回成分号。 + +上面定义的存储过程有四个参数,其中第一个参数是输入参数,代表课程的编号,后面的参数都是输出参数,因为存储过程不能定义返回值,只能通过输出参数将执行结果带出,定义输出参数的关键字是`out`,默认情况下参数都是输入参数。 + +调用存储过程。 + +```SQL +call sp_get_score(1111, @a, @b, @c); +``` + +获取输出参数的值。 + +```SQL +select @a as 最高分, @b as 最低分, @c as 平均分; +``` + +删除存储过程。 + +```SQL +drop procedure sp_get_score; +``` + +在存储过程中,我们可以定义变量、条件,可以使用分支和循环语句,可以通过游标操作查询结果,还可以使用事件调度器,这些内容我们暂时不在此处进行介绍。虽然我们说了很多存储过程的好处,但是在实际开发中,如果过度的使用存储过程,将大量复杂的运算放到存储过程中,也会导致占用数据库服务器的CPU资源,造成数据库服务器承受巨大的压力。为此,我们一般会将复杂的运算和处理交给应用服务器,因为很容易部署多台应用服务器来分摊这些压力。 + +### 几个重要的概念 + +#### 范式理论 - 设计二维表的指导思想 + +1. 第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。 +2. 第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。 +3. 第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。 + +#### 数据完整性 + +1. 实体完整性 - 每个实体都是独一无二的 + + - 主键(primary key) / 唯一约束 / 唯一索引(unique) +2. 引用完整性(参照完整性)- 关系中不允许引用不存在的实体 + + - 外键(foreign key) +3. 域完整性 - 数据是有效的 + - 数据类型及长度 + + - 非空约束(not null) + + - 默认值约束(default) + + - 检查约束(check) + + > 说明:在MySQL数据库中,检查约束并不起作用。 + +#### 数据一致性 + +1. 事务:一系列对数据库进行读/写的操作,这些操作要么全都成功,要么全都失败。 + +2. 事务的ACID特性 + - 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行 + - 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态 + - 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行 + - 持久性:已被提交的事务对数据库的修改应该永久保存在数据库中 + +3. MySQL中的事务操作 + + - 开启事务环境 + + ```SQL + start transaction + ``` + + 或 + + ```SQL + begin + ``` + + - 提交事务 + + ```SQL + commit + ``` + + - 回滚事务 + + ```SQL + rollback + ``` + +### 其他内容 + +大家应该能够想到,关于MySQL的知识肯定远远不止上面列出的这些,比如MySQL的性能优化、管理和维护MySQL的相关工具、MySQL数据的备份和恢复、监控MySQL、部署高可用架构等问题我们在这里都没有进行讨论。当然,这些内容也都是跟项目开发密切相关的,我们就留到后续的章节中再续点进行讲解。 + +### Python数据库编程 + +我们用如下所示的数据库来演示在Python中如何访问MySQL数据库。 + +```SQL +drop database if exists hrs; +create database hrs default charset utf8; + +use hrs; + +drop table if exists tb_emp; +drop table if exists tb_dept; + +create table tb_dept +( +dno int not null comment '编号', +dname varchar(10) not null comment '名称', +dloc varchar(20) not null comment '所在地', +primary key (dno) +); + +insert into tb_dept values + (10, '会计部', '北京'), + (20, '研发部', '成都'), + (30, '销售部', '重庆'), + (40, '运维部', '深圳'); + +create table tb_emp +( +eno int not null comment '员工编号', +ename varchar(20) not null comment '员工姓名', +job varchar(20) not null comment '员工职位', +mgr int comment '主管编号', +sal int not null comment '员工月薪', +comm int comment '每月补贴', +dno int comment '所在部门编号', +primary key (eno) +); + +alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); + +insert into tb_emp values + (7800, '张三丰', '总裁', null, 9000, 1200, 20), + (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), + (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), + (3211, '张无忌', '程序员', 2056, 3200, null, 20), + (3233, '丘处机', '程序员', 2056, 3400, null, 20), + (3251, '张翠山', '程序员', 2056, 4000, null, 20), + (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), + (5234, '郭靖', '出纳', 5566, 2000, null, 10), + (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), + (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), + (4466, '苗人凤', '销售员', 3344, 2500, null, 30), + (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), + (3577, '杨过', '会计', 5566, 2200, null, 10), + (3588, '朱九真', '会计', 5566, 2500, null, 10); +``` + +在Python 3中,我们通常使用纯Python的三方库PyMySQL来访问MySQL数据库,它应该是目前Python操作MySQL数据库最好的选择。 + +1. 安装PyMySQL。 + + ```Shell + pip install pymysql + ``` + +2. 添加一个部门。 + + ```Python + import pymysql + + + def main(): + no = int(input('编号: ')) + name = input('名字: ') + loc = input('所在地: ') + # 1. 创建数据库连接对象 + con = pymysql.connect(host='localhost', port=3306, + database='hrs', charset='utf8', + user='root', password='123456') + try: + # 2. 通过连接对象获取游标 + with con.cursor() as cursor: + # 3. 通过游标执行SQL并获得执行结果 + result = cursor.execute( + 'insert into tb_dept values (%s, %s, %s)', + (no, name, loc) + ) + if result == 1: + print('添加成功!') + # 4. 操作成功提交事务 + con.commit() + finally: + # 5. 关闭连接释放资源 + con.close() + + + if __name__ == '__main__': + main() + ``` + +3. 删除一个部门。 + + ```Python + import pymysql + + + def main(): + no = int(input('编号: ')) + con = pymysql.connect(host='localhost', port=3306, + database='hrs', charset='utf8', + user='root', password='123456', + autocommit=True) + try: + with con.cursor() as cursor: + result = cursor.execute( + 'delete from tb_dept where dno=%s', + (no, ) + ) + if result == 1: + print('删除成功!') + finally: + con.close() + + + if __name__ == '__main__': + main() + ``` + + > 说明:如果不希望每次SQL操作之后手动提交或回滚事务,可以像上面的代码那样,在创建连接的时候多加一个名为`autocommit`的参数并将它的值设置为`True`,表示每次执行SQL之后自动提交。如果程序中不需要使用事务环境也不希望手动的提交或回滚就可以这么做。 + +4. 更新一个部门。 + + ```Python + import pymysql + + + def main(): + no = int(input('编号: ')) + name = input('名字: ') + loc = input('所在地: ') + con = pymysql.connect(host='localhost', port=3306, + database='hrs', charset='utf8', + user='root', password='123456', + autocommit=True) + try: + with con.cursor() as cursor: + result = cursor.execute( + 'update tb_dept set dname=%s, dloc=%s where dno=%s', + (name, loc, no) + ) + if result == 1: + print('更新成功!') + finally: + con.close() + + + if __name__ == '__main__': + main() + ``` + +5. 查询所有部门。 + + ```Python + import pymysql + from pymysql.cursors import DictCursor + + + def main(): + con = pymysql.connect(host='localhost', port=3306, + database='hrs', charset='utf8', + user='root', password='123456') + try: + with con.cursor(cursor=DictCursor) as cursor: + cursor.execute('select dno as no, dname as name, dloc as loc from tb_dept') + results = cursor.fetchall() + print(results) + print('编号\t名称\t\t所在地') + for dept in results: + print(dept['no'], end='\t') + print(dept['name'], end='\t') + print(dept['loc']) + finally: + con.close() + + + if __name__ == '__main__': + main() + ``` + +6. 分页查询员工信息。 + + ```Python + import pymysql + from pymysql.cursors import DictCursor + + + class Emp(object): + + def __init__(self, no, name, job, sal): + self.no = no + self.name = name + self.job = job + self.sal = sal + + def __str__(self): + return f'\n编号:{self.no}\n姓名:{self.name}\n职位:{self.job}\n月薪:{self.sal}\n' + + + def main(): + page = int(input('页码: ')) + size = int(input('大小: ')) + con = pymysql.connect(host='localhost', port=3306, + database='hrs', charset='utf8', + user='root', password='123456') + try: + with con.cursor() as cursor: + cursor.execute( + 'select eno as no, ename as name, job, sal from tb_emp limit %s,%s', + ((page - 1) * size, size) + ) + for emp_tuple in cursor.fetchall(): + emp = Emp(*emp_tuple) + print(emp) + finally: + con.close() + + + if __name__ == '__main__': + main() + ``` diff --git a/Day36-40/NoSQL入门.md b/Day36-40/39-40.NoSQL入门.md similarity index 98% rename from Day36-40/NoSQL入门.md rename to Day36-40/39-40.NoSQL入门.md index 0d6808d..c5fbe4c 100644 --- a/Day36-40/NoSQL入门.md +++ b/Day36-40/39-40.NoSQL入门.md @@ -345,8 +345,6 @@ mongo --host 172.18.61.250 MongoDB shell version v3.6.5 connecting to: mongodb://172.18.61.250:27017/ -... -> ``` 1. 查看、创建和删除数据库。 @@ -489,7 +487,7 @@ connecting to: mongodb://172.18.61.250:27017/ 使用MongoDB可以非常方便的配置数据复制,通过冗余数据来实现数据的高可用以及灾难恢复,也可以通过数据分片来应对数据量迅速增长的需求。关于MongoDB更多的操作可以查阅[官方文档](https://mongodb-documentation.readthedocs.io/en/latest/) ,同时推荐大家阅读Kristina Chodorow写的[《MongoDB权威指南》](http://www.ituring.com.cn/book/1172)。 -####在Python程序中操作MongoDB +#### 在Python程序中操作MongoDB 可以通过pip安装pymongo来实现对MongoDB的操作。 @@ -500,7 +498,7 @@ python3 ```Python >>> from pymongo import MongoClient ->>> client = MongoClient('mongodb://120.77.222.217:27017') +>>> client = MongoClient('mongodb://127.0.0.1:27017') >>> db = client.school >>> for student in db.students.find(): ... print('学号:', student['stuid']) @@ -544,4 +542,4 @@ python3 >>> ``` -关于PyMongo更多的知识可以通过它的[官方文档](https://api.mongodb.com/python/current/tutorial.html)进行了解。 \ No newline at end of file +关于PyMongo更多的知识可以通过它的[官方文档](https://api.mongodb.com/python/current/tutorial.html)进行了解,也可以使用[MongoEngine]()这样的库来简化Python程序对MongoDB的操作,除此之外,还有以异步I/O方式访问MongoDB的三方库[motor]()都是不错的选择。 \ No newline at end of file diff --git a/Day36-40/code/HRS_create_and_init.sql b/Day36-40/code/HRS_create_and_init.sql index 0e52190..b8bc864 100644 --- a/Day36-40/code/HRS_create_and_init.sql +++ b/Day36-40/code/HRS_create_and_init.sql @@ -51,15 +51,15 @@ insert into tb_emp values (3588, '朱九真', '会计', 5566, 2500, null, 10); --- 查询薪资最高的员工姓名和工资 +-- 查询月薪最高的员工姓名和工资 --- 查询员工的姓名和年薪((月薪+补贴)*12) +-- 查询员工的姓名和年薪((月薪+补贴)*13) -- 查询有员工的部门的编号和人数 -- 查询所有部门的名称和人数 --- 查询薪资最高的员工(Boss除外)的姓名和工资 +-- 查询月薪最高的员工(Boss除外)的姓名和工资 -- 查询薪水超过平均薪水的员工的姓名和工资 @@ -69,24 +69,4 @@ insert into tb_emp values -- 查询主管的姓名和职位 --- 查询薪资排名4~6名的员工姓名和工资 - --- use hrs; - --- drop procedure if exists sp_avg_sal_by_dept; - - --- create procedure sp_avg_sal_by_dept(dno integer, out avg_sal float) --- begin --- select avg(sal) into avg_sal from tb_emp where dno=dno; --- end; - - - - --- call sp_avg_sal_by_dept(10, @avgSal); - --- select @avgSal; - - - +-- 查询月薪排名4~6名的员工姓名和工资 diff --git a/Day36-40/code/SRS_create_and_init.sql b/Day36-40/code/SRS_create_and_init.sql index 17ad397..301c7bc 100644 --- a/Day36-40/code/SRS_create_and_init.sql +++ b/Day36-40/code/SRS_create_and_init.sql @@ -216,7 +216,7 @@ select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student w ); -- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算) -select stuname from tb_student where stuid=( +select stuname from tb_student where stuid in ( select stuid from tb_score group by stuid having count(stuid)>2 ) diff --git a/Day36-40/code/bank_create_and_init.sql b/Day36-40/code/bank_create_and_init.sql deleted file mode 100644 index 1495a35..0000000 --- a/Day36-40/code/bank_create_and_init.sql +++ /dev/null @@ -1,15 +0,0 @@ -drop database if exists bank; - -create database bank default charset utf8; - -use bank; - -create table tb_account -( -accid char(8) primary key, -accowner varchar(20) not null, -accbalance float not null default 0 -); - -insert into tb_account values (11223344, '王大锤', 1000); -insert into tb_account values (22334455, '李小龙', 1000); \ No newline at end of file diff --git a/Day36-40/code/booksys_create_and_init.sql b/Day36-40/code/booksys_create_and_init.sql deleted file mode 100644 index 8a99a58..0000000 --- a/Day36-40/code/booksys_create_and_init.sql +++ /dev/null @@ -1,46 +0,0 @@ -drop database if exists booksys; - -create database booksys default charset utf8; - -use booksys; - -create table tb_book -( -bookid integer not null, -isbn char(13) not null, -bname varchar(100) not null, -price decimal(8,2) not null, -author varchar(100) not null, -publisher varchar(50) not null, -pubdate date, -intro varchar(500), -lended bit default 0, -counter integer default 0, -primary key (bookid) -); - -create table tb_reader -( -readerid integer not null, -rname varchar(20) not null, -gender bit not null, -tel char(11) not null, -birth date, -regdate date not null, -available bit default 1, -primary key (readerid) -); - -create table tb_record -( -recordid integer not null auto_increment, -bid integer not null, -rid integer not null, -lenddate datetime not null, -backdate datetime, -pulishment decimal(6,2), -primary key (recordid) -); - -alter table tb_record add constraint fk_record_bid foreign key (bid) references tb_book (bookid) on update cascade; -alter table tb_record add constraint fk_record_rid foreign key (rid) references tb_reader (readerid) on update cascade; \ No newline at end of file diff --git a/Day36-40/code/demo_create_and_init.sql b/Day36-40/code/demo_create_and_init.sql deleted file mode 100644 index 9de58e6..0000000 --- a/Day36-40/code/demo_create_and_init.sql +++ /dev/null @@ -1,27 +0,0 @@ -drop database if exists demo; -create database demo default charset utf8 collate utf8_general_ci; - -use demo; - -create table tb_teacher -( -teacherid int not null auto_increment, -tname varchar(20) not null, -tjob varchar(20) not null, -tintro varchar(1023) default '', -tmotto varchar(255) default '', -primary key (teacherid) -); - -insert into tb_teacher (tname, tjob, tintro, tmotto) values -('骆昊', 'Python教学主管', '10年以上软硬件产品和系统设计、研发、架构和管理经验,2003年毕业于四川大学,四川大学Java技术俱乐部创始人,四川省优秀大学毕业生,在四川省网络通信技术重点实验室工作期间,参与了2项国家自然科学基金项目、1项中国科学院中长期研究项目和多项四川省科技攻关项目,在国际会议和国内顶级期刊上发表多篇论文(1篇被SCI收录,3篇被EI收录),大规模网络性能测量系统DMC-TS的设计者和开发者,perf-TTCN语言的发明者。国内最大程序员社区CSDN的博客专家,在Github上参与和维护了多个高质量开源项目,精通C/C++、Java、Python、R、Swift、JavaScript等编程语言,擅长OOAD、系统架构、算法设计、协议分析和网络测量,主持和参与过电子政务系统、KPI考核系统、P2P借贷平台等产品的研发,一直践行“用知识创造快乐”的教学理念,善于总结,乐于分享。', '教育是让受教育者体会用知识创造快乐的过程'), -('肖世荣', 'Python高级讲师', '10年以上互联网和移动互联网产品设计、研发、技术架构和项目管理经验,曾在中国移动、symbio、ajinga.com、万达信息等公司担任架构师、项目经理、技术总监等职务,长期为苹果、保时捷、耐克、沃尔玛等国际客户以及国内的政府机构提供信息化服务,主导的项目曾获得“世界科技先锋”称号,个人作品“许愿吧”曾在腾讯应用市场生活类App排名前3,拥有百万级用户群体,运营的公众号“卵石坊”是国内知名的智能穿戴设备平台。精通Python、C++、Java、Ruby、JavaScript等开发语言,主导和参与了20多个企业级项目(含国家级重大项目和互联网创新项目),涉及的领域包括政务、社交、电信、卫生和金融,有极为丰富的项目实战经验。授课深入浅出、条理清晰,善于调动学员的学习热情并帮助学员理清思路和方法。', '世上没有绝望的处境,只有对处境绝望的人'), -('余婷', 'Python高级讲师', '5年以上移动互联网项目开发经验和教学经验,曾担任上市游戏公司高级软件研发工程师和移动端(iOS)技术负责人,参了多个企业级应用和游戏类应用的移动端开发和后台服务器开发,拥有丰富的开发经验和项目管理经验,以个人开发者和协作开发者的身份在苹果的AppStore上发布过多款App。精通Python、C、Objective-C、Swift等开发语言,熟悉iOS原生App开发、RESTful接口设计以及基于Cocos2d-x的游戏开发。授课条理清晰、细致入微,性格活泼开朗、有较强的亲和力,教学过程注重理论和实践的结合,在学员中有良好的口碑。', '每天叫醒你的不是闹钟而是梦想'), -('王海飞', 'Python高级讲师', '5年以上Python开发经验,先后参与了O2O商城、CRM系统、CMS平台、ERP系统等项目的设计与研发,曾在全国最大最专业的汽车领域相关服务网站担任Python高级研发工程师、项目经理等职务,擅长基于Python、Java、PHP等开发语言的企业级应用开发,全程参与了多个企业级应用从需求到上线所涉及的各种工作,精通Django、Flask等框架,熟悉基于微服务的企业级项目开发,拥有丰富的项目实战经验。善于用浅显易懂的方式在课堂上传授知识点,在授课过程中经常穿插企业开发的实际案例并分析其中的重点和难点,通过这种互动性极强的教学模式帮助学员找到解决问题的办法并提升学员的综合素质。', '不要给我说什么底层原理、框架内核!老夫敲代码就是一把梭!复制!黏贴!拿起键盘就是干!'), -('何翰宇', 'JavaEE高级讲师', '5年以上JavaEE项目开发和教学经验,参与过人力资源管理系统、电子教育产品在线商城、平安好医生App、平安好车主App等项目的设计与研发。擅长Java语言、面向对象编程、JavaEE框架、Web前端开发、数据库编程和Android应用开发,对新技术有着浓厚的兴趣和钻研精神,对微服务架构、虚拟化技术、区块链、边缘计算等领域都有自己独到的认识和见解,有丰富的项目经验和教学经验。授课时注重学习方法的引导,提倡以项目为导向的实战型教学,同时也注重基础知识的掌握和底层原理的理解,课堂氛围轻松幽默,能够把枯燥乏味的知识变成生动有趣的案例,帮助学员更快更好的掌握技术的要领,从事JavaEE教学工作以来,获得了学生潮水般的好评。', '每天撸代码,生活乐无边!'), -('吴明富', 'HTML5教学主管', '毕业于西南交通大学,高级软件研发工程师,10年以上的开发和培训经验。曾就职于华为赛门铁克科技有限公司,负责公司内部ERP系统的研发,参与和主导过多个大型门户网站、电子商务网站、电子政务系统以及多个企业级Web项目的设计和开发,同时负责过多门企业内训课程的研发与讲授,有着非常丰富的JavaEE项目开发经验和Web前端开发经验,精通C/C++、Java、PHP、JavaScript等开发语言,能够使用多种技术进行全栈开发。授课经验丰富、思路清晰、富有激情,对知识点的讲解由浅入深、深入浅出,能够通过实际开发的场景引导学员思考业务并理解相关技术,善于将多年的项目实战经验和企业内训经验融入课堂,通过理论联系实际的方式帮助学员迅速提升就业能力。', '人生的道路在态度的岔口一分为二'); - - - - - diff --git a/Day36-40/code/人力资源管理.spf b/Day36-40/code/人力资源管理.spf deleted file mode 100644 index 9042725..0000000 --- a/Day36-40/code/人力资源管理.spf +++ /dev/null @@ -1,877 +0,0 @@ - - - - - ContentFilters - - auto_connect - - data - - connection - - database - hrs - host - 120.77.222.217 - kcid - 6157604644212181126 - name - MySQL@Aliyun - rdbms_type - mysql - sslCACertFileLocation - - sslCACertFileLocationEnabled - 0 - sslCertificateFileLocation - - sslCertificateFileLocationEnabled - 0 - sslKeyFileLocation - - sslKeyFileLocationEnabled - 0 - type - SPTCPIPConnection - useSSL - 0 - user - root - - session - - connectionEncoding - utf8 - contentPageNumber - 1 - contentSelection - - YnBsaXN0MDDUAQIDBAUGOTpYJHZlcnNpb25YJG9iamVjdHNZJGFy - Y2hpdmVyVCR0b3ASAAGGoK0HCBUWFxgZHSQoLDE2VSRudWxs0wkK - CwwQFFdOUy5rZXlzWk5TLm9iamVjdHNWJGNsYXNzow0OD4ACgAOA - BKMREhOABYAGgAiADFR0eXBlVHJvd3NUa2V5c18QJlNlbGVjdGlv - bkRldGFpbFR5cGVQcmltYXJ5S2V5ZWREZXRhaWxz0wkKCxobHKCg - gAfSHh8gIVokY2xhc3NuYW1lWCRjbGFzc2VzXxATTlNNdXRhYmxl - RGljdGlvbmFyeaMgIiNcTlNEaWN0aW9uYXJ5WE5TT2JqZWN00goL - JSehJoAJgAvSCykqK1lOUy5zdHJpbmeAClNlbm/SHh8tLl8QD05T - TXV0YWJsZVN0cmluZ6MtLzBYTlNTdHJpbmdYTlNPYmplY3TSHh8y - M15OU011dGFibGVBcnJheaMyNDVXTlNBcnJheVhOU09iamVjdNIe - HyI3oiI4WE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0Ts8VGRh - dGGAAQAIABEAGgAjAC0AMgA3AEUASwBSAFoAZQBsAHAAcgB0AHYA - egB8AH4AgACCAIcAjACRALoAwQDCAMMAxQDKANUA3gD0APgBBQEO - ARMBFQEXARkBHgEoASoBLgEzAUUBSQFSAVsBYAFvAXMBewGEAYkB - jAGVAacBqgGvAAAAAAAAAgEAAAAAAAAAPQAAAAAAAAAAAAAAAAAA - AbE= - - contentSortColIsAsc - - contentViewport - {{0, 0}, {694, 448}} - isToolbarVisible - - queries - -- 注意事项: --- 1. 给数据库和表命名的时候尽量使用全小写 --- 2. 作为筛选条件的字符串是否区分大小看设置的校对规则 -drop database if exists hrs; -create database hrs default charset utf8 collate utf8_general_ci; - -use hrs; - -drop table if exists tb_emp; -drop table if exists tb_dept; - --- 3. 数据库中的对象通常会用前缀加以区分 --- table / view / index / function / procedure / trigger -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); - --- 批量插入操作 -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); - -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); - --- 修改表添加一个列到mgr列的后面 --- alter table tb_emp add column hiredate date after mgr; - --- 修改表添加一个自参照的外键约束 --- alter table tb_emp add constraint fk_emp_mgr foreign key (mgr) references tb_emp (eno); - --- alter table tb_emp drop foreign key fk_emp_mgr; - --- alter table tb_emp drop foreign key fk_emp_dno; - --- restrict - 不允许操作 --- cascade - 级联操作 --- set null - 设置为null -alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); --- on delete restrict on update cascade; - -insert into tb_emp values - (7800, '张三丰', '总裁', null, 9000, 1200, 20), - (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), - (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), - (3211, '张无忌', '程序员', 2056, 3200, null, 20), - (3233, '丘处机', '程序员', 2056, 3400, null, 20), - (3251, '张翠山', '程序员', 2056, 4000, null, 20), - (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), - (5234, '郭靖', '出纳', 5566, 2000, null, 10), - (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), - (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), - (4466, '苗人凤', '销售员', 3344, 2500, null, 30), - (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), - (3577, '杨过', '会计', 5566, 2200, null, 10), - (3588, '朱九真', '会计', 5566, 2500, null, 10); - --- 查询月薪最高的员工姓名和工资 - 子查询/嵌套查询+聚合函数 --- select ename, sal from tb_emp order by sal desc limit 1; -select ename, sal from tb_emp where sal=( - select max(sal) from tb_emp -); - --- 查询员工的姓名和年薪((月薪+补贴)*12) -select ename, (sal+ifnull(comm, 0))*12 as 年薪 from tb_emp order by 年薪 desc; - --- 查询有员工的部门的编号和人数 - 分组查询+聚合函数 -select dno, count(dno) from tb_emp group by dno with rollup; - --- 查询所有部门的名称和人数 - 子查询+连接查询(左外) -select dname as 部门名称, ifnull(total, 0) as 人数 from tb_dept t1 left join (select dno, count(dno) as total from tb_emp group by dno) t2 on t1.dno=t2.dno; - --- 查询月薪最高的员工(Boss除外)的姓名和工资 - 空值判断 -select ename, sal from tb_emp where sal=(select max(sal) from tb_emp where mgr is not null); - --- 查询月薪超过平均薪水的员工的姓名和工资 -select ename, sal from tb_emp where sal>(select avg(sal) as avgsal from tb_emp); - --- 查询月薪超过其所在部门平均薪水的员工的姓名、部门编号和工资 -select ename, t1.dno, sal, round(avgsal, 2) from tb_emp t1 inner join (select dno, avg(sal) as avgsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal>avgsal; - --- 查询部门中薪水最高的人姓名、工资和所在部门名称 -select ename, sal, dname from (select ename, sal, t1.dno from tb_emp t1 inner join (select dno, max(sal) as maxsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal=maxsal) t3 inner join tb_dept t4 on t3.dno=t4.dno; - --- 查询主管的姓名和职位 -select ename, job from tb_emp where eno in (select distinct mgr from tb_emp where mgr is not null); - --- 通常不推荐使用in或者not in集合运算和distinct去重操作 --- 可以考虑用exists或not exists替代掉集合运算和去重操作 -select ename, job from tb_emp t1 where exists (select 'x' from tb_emp t2 where t1.eno=t2.mgr); - --- 查询月薪排名4~6名的员工姓名和工资 -select ename, sal from tb_emp order by sal desc limit 3, 3; -select ename, sal from tb_emp order by sal desc limit 3 offset 3; - --- explain生成执行计划 -explain select eno, ename from tb_emp where eno=7800; -explain select eno, ename from tb_emp where eno<>7900; -explain select eno, ename from tb_emp where ename='张三丰'; -explain select eno, ename from tb_emp where ename like '张%'; -explain select eno, ename from tb_emp where ename like '%张'; -explain select eno, ename from tb_emp where ename<>'张三丰'; - --- 视图:查询的快照(简化查询操作) --- 通过视图可以将用户的访问权限限制到某些指定的列上 -create view vw_emp_dept as -select eno, ename, dname from tb_emp t1 inner join tb_dept t2 on t1.dno=t2.dno; - -select ename, dname from vw_emp_dept; - -drop view vw_emp_dept; - --- 索引(index) --- 索引可以加速查询所以应该在经常用于查询筛选条件的列上建立索引 --- 索引会使用额外的存储空间而且会让增删改变得更慢(因为要更新索引) --- 所以不能够滥用索引 -create index idx_emp_ename on tb_emp (ename); -drop index idx_emp_ename on tb_emp; - --- (存储)过程/函数:把一系列的SQL可以封装到一个过程中,而且可以加上分支和循环,将来通过过程的名字直接调用过程即可,因为创建过程时已经提前编译了SQL语句,所以比直接执行SQL语句性能更好 - --- 重新定义定界符为$$ -delimiter $$ - --- 创建存储过程 -create procedure sp_dept_avg_sal(deptno int, out avgsal float) -begin - select avg(sal) into avgsal from tb_emp where dno=deptno; -end$$ - --- 将定界符还原回; -delimiter ; - --- 调用存储过程 -call sp_dept_avg_sal(20, @a); - --- 通过输出参数取出部门平均工资 -select @a; - --- 删除存储过程 -drop procedure sp_dept_avg_sal; - --- 触发器:在执行增删改操作时可以触发其他的级联操作,但是有可能导致“锁表”现象,实际开发中应该尽量避免使用触发器 --- update tb_dept set dno=11 where dno=10; --- delete from tb_dept where dno=11; - -delimiter $$ - -create trigger tr_dept_update -after update on tb_dept for each row -begin - update tb_emp set dno=new.dno where dno=old.dno; -end$$ - -delimiter ; - -drop trigger tr_dept_update; - --- DCL:授予权限(grant to)和召回权限(revoke from) -create user 'hellokitty'@'%' identified by '123123'; - -grant all privileges on hrs.* to 'hellokitty'@'%'; - -revoke insert, delete, update on hrs.* from 'hellokitty'@'%'; - -drop user 'hellokitty'@'%'; - --- 事务(transaction)- 把多个增删改的操作做成不可分割的原子性操作 --- 要么全部都做,要么全都不做 - --- start transaction; -begin; - -delete from tb_emp; - - - - table - tb_emp - view - SP_VIEW_CUSTOMQUERY - windowVerticalDividerPosition - 163 - - - encrypted - - format - connection - queryFavorites - - queryHistory - - rollback - begin; -delete from tb_emp - -- 注意事项: --- 1. 给数据库和表命名的时候尽量使用全小写 --- 2. 作为筛选条件的字符串是否区分大小看设置的校对规则 -drop database if exists hrs; -create database hrs default charset utf8 collate utf8_general_ci; -use hrs; -drop table if exists tb_emp; -drop table if exists tb_dept; --- 3. 数据库中的对象通常会用前缀加以区分 --- table / view / index / function / procedure / trigger -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); --- 批量插入操作 -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); --- 修改表添加一个列到mgr列的后面 --- alter table tb_emp add column hiredate date after mgr; - --- 修改表添加一个自参照的外键约束 --- alter table tb_emp add constraint fk_emp_mgr foreign key (mgr) references tb_emp (eno); - --- alter table tb_emp drop foreign key fk_emp_mgr; - --- alter table tb_emp drop foreign key fk_emp_dno; - --- restrict - 不允许操作 --- cascade - 级联操作 --- set null - 设置为null -alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); --- on delete restrict on update cascade; - -insert into tb_emp values - (7800, '张三丰', '总裁', null, 9000, 1200, 20), - (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), - (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), - (3211, '张无忌', '程序员', 2056, 3200, null, 20), - (3233, '丘处机', '程序员', 2056, 3400, null, 20), - (3251, '张翠山', '程序员', 2056, 4000, null, 20), - (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), - (5234, '郭靖', '出纳', 5566, 2000, null, 10), - (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), - (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), - (4466, '苗人凤', '销售员', 3344, 2500, null, 30), - (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), - (3577, '杨过', '会计', 5566, 2200, null, 10), - (3588, '朱九真', '会计', 5566, 2500, null, 10); --- 查询月薪最高的员工姓名和工资 - 子查询/嵌套查询+聚合函数 --- select ename, sal from tb_emp order by sal desc limit 1; -select ename, sal from tb_emp where sal=( - select max(sal) from tb_emp -); --- 查询员工的姓名和年薪((月薪+补贴)*12) -select ename, (sal+ifnull(comm, 0))*12 as 年薪 from tb_emp order by 年薪 desc; --- 查询有员工的部门的编号和人数 - 分组查询+聚合函数 -select dno, count(dno) from tb_emp group by dno with rollup; --- 查询所有部门的名称和人数 - 子查询+连接查询(左外) -select dname as 部门名称, ifnull(total, 0) as 人数 from tb_dept t1 left join (select dno, count(dno) as total from tb_emp group by dno) t2 on t1.dno=t2.dno; --- 查询月薪最高的员工(Boss除外)的姓名和工资 - 空值判断 -select ename, sal from tb_emp where sal=(select max(sal) from tb_emp where mgr is not null); --- 查询月薪超过平均薪水的员工的姓名和工资 -select ename, sal from tb_emp where sal>(select avg(sal) as avgsal from tb_emp); --- 查询月薪超过其所在部门平均薪水的员工的姓名、部门编号和工资 -select ename, t1.dno, sal, round(avgsal, 2) from tb_emp t1 inner join (select dno, avg(sal) as avgsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal>avgsal; --- 查询部门中薪水最高的人姓名、工资和所在部门名称 -select ename, sal, dname from (select ename, sal, t1.dno from tb_emp t1 inner join (select dno, max(sal) as maxsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal=maxsal) t3 inner join tb_dept t4 on t3.dno=t4.dno; --- 查询主管的姓名和职位 -select ename, job from tb_emp where eno in (select distinct mgr from tb_emp where mgr is not null); --- 通常不推荐使用in或者not in集合运算和distinct去重操作 --- 可以考虑用exists或not exists替代掉集合运算和去重操作 -select ename, job from tb_emp t1 where exists (select 'x' from tb_emp t2 where t1.eno=t2.mgr); --- 查询月薪排名4~6名的员工姓名和工资 -select ename, sal from tb_emp order by sal desc limit 3, 3; -select ename, sal from tb_emp order by sal desc limit 3 offset 3; --- explain生成执行计划 -explain select eno, ename from tb_emp where eno=7800; -explain select eno, ename from tb_emp where eno<>7900; -explain select eno, ename from tb_emp where ename='张三丰'; -explain select eno, ename from tb_emp where ename like '张%'; -explain select eno, ename from tb_emp where ename like '%张'; -explain select eno, ename from tb_emp where ename<>'张三丰'; --- 视图:查询的快照(简化查询操作) --- 通过视图可以将用户的访问权限限制到某些指定的列上 -create view vw_emp_dept as -select eno, ename, dname from tb_emp t1 inner join tb_dept t2 on t1.dno=t2.dno; -select ename, dname from vw_emp_dept; -drop view vw_emp_dept; --- 索引(index) --- 索引可以加速查询所以应该在经常用于查询筛选条件的列上建立索引 --- 索引会使用额外的存储空间而且会让增删改变得更慢(因为要更新索引) --- 所以不能够滥用索引 -create index idx_emp_ename on tb_emp (ename); -drop index idx_emp_ename on tb_emp; --- 创建存储过程 -create procedure sp_dept_avg_sal(deptno int, out avgsal float) -begin - select avg(sal) into avgsal from tb_emp where dno=deptno; -end; --- 调用存储过程 -call sp_dept_avg_sal(20, @a); --- 通过输出参数取出部门平均工资 -select @a; --- 删除存储过程 -drop procedure sp_dept_avg_sal; -create trigger tr_dept_update -after update on tb_dept for each row -begin - update tb_emp set dno=new.dno where dno=old.dno; -end; -drop trigger tr_dept_update; --- DCL:授予权限(grant to)和召回权限(revoke from) -create user 'hellokitty'@'%' identified by '123123'; -grant all privileges on hrs.* to 'hellokitty'@'%'; -revoke insert, delete, update on hrs.* from 'hellokitty'@'%'; -drop user 'hellokitty'@'%'; --- 事务(transaction)- 把多个增删改的操作做成不可分割的原子性操作 --- 要么全部都做,要么全都不做 - --- start transaction; --- begin; - --- delete from tb_emp; - --- commit; --- rollback; - -- 事务(transaction)- 把多个增删改的操作做成不可分割的原子性操作 --- 要么全部都做,要么全都不做 - --- start transaction; --- begin; - --- delete from tb_emp; - --- commit; --- rollback; - delete from tb_emp - alter table tb_emp drop foreign key fk_emp_mgr - begin - -- 注意事项: --- 1. 给数据库和表命名的时候尽量使用全小写 --- 2. 作为筛选条件的字符串是否区分大小看设置的校对规则 -drop database if exists hrs; -create database hrs default charset utf8 collate utf8_general_ci; -use hrs; -drop table if exists tb_emp; -drop table if exists tb_dept; --- 3. 数据库中的对象通常会用前缀加以区分 --- table / view / index / function / procedure / trigger -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); --- 批量插入操作 -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); --- 修改表添加一个列到mgr列的后面 --- alter table tb_emp add column hiredate date after mgr; - --- 修改表添加一个自参照的外键约束 -alter table tb_emp add constraint fk_emp_mgr foreign key (mgr) references tb_emp (eno); --- alter table tb_emp drop foreign key fk_emp_dno; - --- restrict - 不允许操作 --- cascade - 级联操作 --- set null - 设置为null -alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); --- on delete restrict on update cascade; - -insert into tb_emp values - (7800, '张三丰', '总裁', null, 9000, 1200, 20), - (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), - (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), - (3211, '张无忌', '程序员', 2056, 3200, null, 20), - (3233, '丘处机', '程序员', 2056, 3400, null, 20), - (3251, '张翠山', '程序员', 2056, 4000, null, 20), - (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), - (5234, '郭靖', '出纳', 5566, 2000, null, 10), - (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), - (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), - (4466, '苗人凤', '销售员', 3344, 2500, null, 30), - (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), - (3577, '杨过', '会计', 5566, 2200, null, 10), - (3588, '朱九真', '会计', 5566, 2500, null, 10); --- 查询月薪最高的员工姓名和工资 - 子查询/嵌套查询+聚合函数 --- select ename, sal from tb_emp order by sal desc limit 1; -select ename, sal from tb_emp where sal=( - select max(sal) from tb_emp -); --- 查询员工的姓名和年薪((月薪+补贴)*12) -select ename, (sal+ifnull(comm, 0))*12 as 年薪 from tb_emp order by 年薪 desc; --- 查询有员工的部门的编号和人数 - 分组查询+聚合函数 -select dno, count(dno) from tb_emp group by dno with rollup; --- 查询所有部门的名称和人数 - 子查询+连接查询(左外) -select dname as 部门名称, ifnull(total, 0) as 人数 from tb_dept t1 left join (select dno, count(dno) as total from tb_emp group by dno) t2 on t1.dno=t2.dno; --- 查询月薪最高的员工(Boss除外)的姓名和工资 - 空值判断 -select ename, sal from tb_emp where sal=(select max(sal) from tb_emp where mgr is not null); --- 查询月薪超过平均薪水的员工的姓名和工资 -select ename, sal from tb_emp where sal>(select avg(sal) as avgsal from tb_emp); --- 查询月薪超过其所在部门平均薪水的员工的姓名、部门编号和工资 -select ename, t1.dno, sal, round(avgsal, 2) from tb_emp t1 inner join (select dno, avg(sal) as avgsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal>avgsal; --- 查询部门中薪水最高的人姓名、工资和所在部门名称 -select ename, sal, dname from (select ename, sal, t1.dno from tb_emp t1 inner join (select dno, max(sal) as maxsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal=maxsal) t3 inner join tb_dept t4 on t3.dno=t4.dno; --- 查询主管的姓名和职位 -select ename, job from tb_emp where eno in (select distinct mgr from tb_emp where mgr is not null); --- 通常不推荐使用in或者not in集合运算和distinct去重操作 --- 可以考虑用exists或not exists替代掉集合运算和去重操作 -select ename, job from tb_emp t1 where exists (select 'x' from tb_emp t2 where t1.eno=t2.mgr); --- 查询月薪排名4~6名的员工姓名和工资 -select ename, sal from tb_emp order by sal desc limit 3, 3; -select ename, sal from tb_emp order by sal desc limit 3 offset 3; --- explain生成执行计划 -explain select eno, ename from tb_emp where eno=7800; -explain select eno, ename from tb_emp where eno<>7900; -explain select eno, ename from tb_emp where ename='张三丰'; -explain select eno, ename from tb_emp where ename like '张%'; -explain select eno, ename from tb_emp where ename like '%张'; -explain select eno, ename from tb_emp where ename<>'张三丰'; --- 视图:查询的快照(简化查询操作) --- 通过视图可以将用户的访问权限限制到某些指定的列上 -create view vw_emp_dept as -select eno, ename, dname from tb_emp t1 inner join tb_dept t2 on t1.dno=t2.dno; -select ename, dname from vw_emp_dept; -drop view vw_emp_dept; --- 索引(index) --- 索引可以加速查询所以应该在经常用于查询筛选条件的列上建立索引 --- 索引会使用额外的存储空间而且会让增删改变得更慢(因为要更新索引) --- 所以不能够滥用索引 -create index idx_emp_ename on tb_emp (ename); -drop index idx_emp_ename on tb_emp; --- 创建存储过程 -create procedure sp_dept_avg_sal(deptno int, out avgsal float) -begin - select avg(sal) into avgsal from tb_emp where dno=deptno; -end; --- 调用存储过程 -call sp_dept_avg_sal(20, @a); --- 通过输出参数取出部门平均工资 -select @a; --- 删除存储过程 -drop procedure sp_dept_avg_sal; -create trigger tr_dept_update -after update on tb_dept for each row -begin - update tb_emp set dno=new.dno where dno=old.dno; -end; -drop trigger tr_dept_update; --- DCL:授予权限(grant to)和召回权限(revoke from) -create user 'hellokitty'@'%' identified by '123123'; -grant all privileges on hrs.* to 'hellokitty'@'%'; -revoke insert, delete, update on hrs.* from 'hellokitty'@'%'; -drop user 'hellokitty'@'%' - drop user 'hellokitty'@'%' - -- 注意事项: --- 1. 给数据库和表命名的时候尽量使用全小写 --- 2. 作为筛选条件的字符串是否区分大小看设置的校对规则 -drop database if exists hrs; -create database hrs default charset utf8 collate utf8_general_ci; -use hrs; -drop table if exists tb_emp; -drop table if exists tb_dept; --- 3. 数据库中的对象通常会用前缀加以区分 --- table / view / index / function / procedure / trigger -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); --- 批量插入操作 -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); --- 修改表添加一个列到mgr列的后面 --- alter table tb_emp add column hiredate date after mgr; - --- 修改表添加一个自参照的外键约束 -alter table tb_emp add constraint fk_emp_mgr foreign key (mgr) references tb_emp (eno); --- alter table tb_emp drop foreign key fk_emp_dno; - --- restrict - 不允许操作 --- cascade - 级联操作 --- set null - 设置为null -alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); --- on delete restrict on update cascade; - -insert into tb_emp values - (7800, '张三丰', '总裁', null, 9000, 1200, 20), - (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), - (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), - (3211, '张无忌', '程序员', 2056, 3200, null, 20), - (3233, '丘处机', '程序员', 2056, 3400, null, 20), - (3251, '张翠山', '程序员', 2056, 4000, null, 20), - (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), - (5234, '郭靖', '出纳', 5566, 2000, null, 10), - (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), - (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), - (4466, '苗人凤', '销售员', 3344, 2500, null, 30), - (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), - (3577, '杨过', '会计', 5566, 2200, null, 10), - (3588, '朱九真', '会计', 5566, 2500, null, 10); --- 查询月薪最高的员工姓名和工资 - 子查询/嵌套查询+聚合函数 --- select ename, sal from tb_emp order by sal desc limit 1; -select ename, sal from tb_emp where sal=( - select max(sal) from tb_emp -); --- 查询员工的姓名和年薪((月薪+补贴)*12) -select ename, (sal+ifnull(comm, 0))*12 as 年薪 from tb_emp order by 年薪 desc; --- 查询有员工的部门的编号和人数 - 分组查询+聚合函数 -select dno, count(dno) from tb_emp group by dno with rollup; --- 查询所有部门的名称和人数 - 子查询+连接查询(左外) -select dname as 部门名称, ifnull(total, 0) as 人数 from tb_dept t1 left join (select dno, count(dno) as total from tb_emp group by dno) t2 on t1.dno=t2.dno; --- 查询月薪最高的员工(Boss除外)的姓名和工资 - 空值判断 -select ename, sal from tb_emp where sal=(select max(sal) from tb_emp where mgr is not null); --- 查询月薪超过平均薪水的员工的姓名和工资 -select ename, sal from tb_emp where sal>(select avg(sal) as avgsal from tb_emp); --- 查询月薪超过其所在部门平均薪水的员工的姓名、部门编号和工资 -select ename, t1.dno, sal, round(avgsal, 2) from tb_emp t1 inner join (select dno, avg(sal) as avgsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal>avgsal; --- 查询部门中薪水最高的人姓名、工资和所在部门名称 -select ename, sal, dname from (select ename, sal, t1.dno from tb_emp t1 inner join (select dno, max(sal) as maxsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal=maxsal) t3 inner join tb_dept t4 on t3.dno=t4.dno; --- 查询主管的姓名和职位 -select ename, job from tb_emp where eno in (select distinct mgr from tb_emp where mgr is not null); --- 通常不推荐使用in或者not in集合运算和distinct去重操作 --- 可以考虑用exists或not exists替代掉集合运算和去重操作 -select ename, job from tb_emp t1 where exists (select 'x' from tb_emp t2 where t1.eno=t2.mgr); --- 查询月薪排名4~6名的员工姓名和工资 -select ename, sal from tb_emp order by sal desc limit 3, 3; -select ename, sal from tb_emp order by sal desc limit 3 offset 3; --- explain生成执行计划 -explain select eno, ename from tb_emp where eno=7800; -explain select eno, ename from tb_emp where eno<>7900; -explain select eno, ename from tb_emp where ename='张三丰'; -explain select eno, ename from tb_emp where ename like '张%'; -explain select eno, ename from tb_emp where ename like '%张'; -explain select eno, ename from tb_emp where ename<>'张三丰'; --- 视图:查询的快照(简化查询操作) --- 通过视图可以将用户的访问权限限制到某些指定的列上 -create view vw_emp_dept as -select eno, ename, dname from tb_emp t1 inner join tb_dept t2 on t1.dno=t2.dno; -select ename, dname from vw_emp_dept; -drop view vw_emp_dept; --- 索引(index) --- 索引可以加速查询所以应该在经常用于查询筛选条件的列上建立索引 --- 索引会使用额外的存储空间而且会让增删改变得更慢(因为要更新索引) --- 所以不能够滥用索引 -create index idx_emp_ename on tb_emp (ename); -drop index idx_emp_ename on tb_emp; --- 创建存储过程 -create procedure sp_dept_avg_sal(deptno int, out avgsal float) -begin - select avg(sal) into avgsal from tb_emp where dno=deptno; -end; --- 调用存储过程 -call sp_dept_avg_sal(20, @a); --- 通过输出参数取出部门平均工资 -select @a; --- 删除存储过程 -drop procedure sp_dept_avg_sal; -create trigger tr_dept_update -after update on tb_dept for each row -begin - update tb_emp set dno=new.dno where dno=old.dno; -end; -drop trigger tr_dept_update; --- DCL:授予权限(grant to)和召回权限(revoke from) -create user 'hellokitty'@'%' identified by '123123' - -- 注意事项: --- 1. 给数据库和表命名的时候尽量使用全小写 --- 2. 作为筛选条件的字符串是否区分大小看设置的校对规则 -drop database if exists hrs; -create database hrs default charset utf8 collate utf8_general_ci; -use hrs; -drop table if exists tb_emp; -drop table if exists tb_dept; --- 3. 数据库中的对象通常会用前缀加以区分 --- table / view / index / function / procedure / trigger -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); --- 批量插入操作 -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); --- 修改表添加一个列到mgr列的后面 --- alter table tb_emp add column hiredate date after mgr; - --- 修改表添加一个自参照的外键约束 -alter table tb_emp add constraint fk_emp_mgr foreign key (mgr) references tb_emp (eno); --- alter table tb_emp drop foreign key fk_emp_dno; - --- restrict - 不允许操作 --- cascade - 级联操作 --- set null - 设置为null -alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); --- on delete restrict on update cascade; - -insert into tb_emp values - (7800, '张三丰', '总裁', null, 9000, 1200, 20), - (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), - (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), - (3211, '张无忌', '程序员', 2056, 3200, null, 20), - (3233, '丘处机', '程序员', 2056, 3400, null, 20), - (3251, '张翠山', '程序员', 2056, 4000, null, 20), - (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), - (5234, '郭靖', '出纳', 5566, 2000, null, 10), - (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), - (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), - (4466, '苗人凤', '销售员', 3344, 2500, null, 30), - (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), - (3577, '杨过', '会计', 5566, 2200, null, 10), - (3588, '朱九真', '会计', 5566, 2500, null, 10); --- 查询月薪最高的员工姓名和工资 - 子查询/嵌套查询+聚合函数 --- select ename, sal from tb_emp order by sal desc limit 1; -select ename, sal from tb_emp where sal=( - select max(sal) from tb_emp -); --- 查询员工的姓名和年薪((月薪+补贴)*12) -select ename, (sal+ifnull(comm, 0))*12 as 年薪 from tb_emp order by 年薪 desc; --- 查询有员工的部门的编号和人数 - 分组查询+聚合函数 -select dno, count(dno) from tb_emp group by dno with rollup; --- 查询所有部门的名称和人数 - 子查询+连接查询(左外) -select dname as 部门名称, ifnull(total, 0) as 人数 from tb_dept t1 left join (select dno, count(dno) as total from tb_emp group by dno) t2 on t1.dno=t2.dno; --- 查询月薪最高的员工(Boss除外)的姓名和工资 - 空值判断 -select ename, sal from tb_emp where sal=(select max(sal) from tb_emp where mgr is not null); --- 查询月薪超过平均薪水的员工的姓名和工资 -select ename, sal from tb_emp where sal>(select avg(sal) as avgsal from tb_emp); --- 查询月薪超过其所在部门平均薪水的员工的姓名、部门编号和工资 -select ename, t1.dno, sal, round(avgsal, 2) from tb_emp t1 inner join (select dno, avg(sal) as avgsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal>avgsal; --- 查询部门中薪水最高的人姓名、工资和所在部门名称 -select ename, sal, dname from (select ename, sal, t1.dno from tb_emp t1 inner join (select dno, max(sal) as maxsal from tb_emp group by dno) t2 on t1.dno=t2.dno where sal=maxsal) t3 inner join tb_dept t4 on t3.dno=t4.dno; --- 查询主管的姓名和职位 -select ename, job from tb_emp where eno in (select distinct mgr from tb_emp where mgr is not null); --- 通常不推荐使用in或者not in集合运算和distinct去重操作 --- 可以考虑用exists或not exists替代掉集合运算和去重操作 -select ename, job from tb_emp t1 where exists (select 'x' from tb_emp t2 where t1.eno=t2.mgr); --- 查询月薪排名4~6名的员工姓名和工资 -select ename, sal from tb_emp order by sal desc limit 3, 3; -select ename, sal from tb_emp order by sal desc limit 3 offset 3; --- explain生成执行计划 -explain select eno, ename from tb_emp where eno=7800; -explain select eno, ename from tb_emp where eno<>7900; -explain select eno, ename from tb_emp where ename='张三丰'; -explain select eno, ename from tb_emp where ename like '张%'; -explain select eno, ename from tb_emp where ename like '%张'; -explain select eno, ename from tb_emp where ename<>'张三丰'; --- 视图:查询的快照(简化查询操作) --- 通过视图可以将用户的访问权限限制到某些指定的列上 -create view vw_emp_dept as -select eno, ename, dname from tb_emp t1 inner join tb_dept t2 on t1.dno=t2.dno; -select ename, dname from vw_emp_dept; -drop view vw_emp_dept; --- 索引(index) --- 索引可以加速查询所以应该在经常用于查询筛选条件的列上建立索引 --- 索引会使用额外的存储空间而且会让增删改变得更慢(因为要更新索引) --- 所以不能够滥用索引 -create index idx_emp_ename on tb_emp (ename); -drop index idx_emp_ename on tb_emp; --- 创建存储过程 -create procedure sp_dept_avg_sal(deptno int, out avgsal float) -begin - select avg(sal) into avgsal from tb_emp where dno=deptno; -end; --- 调用存储过程 -call sp_dept_avg_sal(20, @a); --- 通过输出参数取出部门平均工资 -select @a; --- 删除存储过程 -drop procedure sp_dept_avg_sal; --- 触发器:在执行增删改操作时可以触发其他的级联操作,但是有可能导致“锁表”现象,实际开发中应该尽量避免使用触发器 -update tb_dept set dno=11 where dno=10 - -- 注意事项: --- 1. 给数据库和表命名的时候尽量使用全小写 --- 2. 作为筛选条件的字符串是否区分大小看设置的校对规则 -drop database if exists hrs; -create database hrs default charset utf8 collate utf8_general_ci; -use hrs; -drop table if exists tb_emp; -drop table if exists tb_dept; --- 3. 数据库中的对象通常会用前缀加以区分 --- table / view / index / function / procedure / trigger -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); --- 批量插入操作 -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); --- 修改表添加一个列到mgr列的后面 --- alter table tb_emp add column hiredate date after mgr; - --- 修改表添加一个自参照的外键约束 -alter table tb_emp add constraint fk_emp_mgr foreign key (mgr) references tb_emp (eno); -alter table tb_emp drop foreign key fk_emp_dno - revoke insert, delete, update on hrs.* from 'hellokitty'@'%' - grant all privileges on hrs.* to 'hellokitty'@'%' - -- DCL:授予权限(grant to)和召回权限(revoke from) -create user 'hellokitty'@'%' identified by '123123' - delete from tb_dept where dno=11 - update tb_dept set dno=11 where dno=10 - alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno) on delete cascade on update cascade - alter table tb_emp drop foreign key fk_emp_dno - delete from tb_dept where dno=10 - - rdbms_type - mysql - rdbms_version - 5.5.60-MariaDB - version - 1 - - diff --git a/Day36-40/code/学校选课系统.spf b/Day36-40/code/学校选课系统.spf deleted file mode 100644 index 373bb6d..0000000 --- a/Day36-40/code/学校选课系统.spf +++ /dev/null @@ -1,376 +0,0 @@ - - - - - ContentFilters - - auto_connect - - data - - connection - - database - school - host - 120.77.222.217 - kcid - 6157604644212181126 - name - MySQL@Aliyun - rdbms_type - mysql - sslCACertFileLocation - - sslCACertFileLocationEnabled - 0 - sslCertificateFileLocation - - sslCertificateFileLocationEnabled - 0 - sslKeyFileLocation - - sslKeyFileLocationEnabled - 0 - type - SPTCPIPConnection - useSSL - 0 - user - root - - session - - connectionEncoding - utf8 - contentPageNumber - 1 - contentSelection - - YnBsaXN0MDDUAQIDBAUGOTpYJHZlcnNpb25YJG9iamVjdHNZJGFy - Y2hpdmVyVCR0b3ASAAGGoK0HCBUWFxgZHSQoLDE2VSRudWxs0wkK - CwwQFFdOUy5rZXlzWk5TLm9iamVjdHNWJGNsYXNzow0OD4ACgAOA - BKMREhOABYAGgAiADFR0eXBlVHJvd3NUa2V5c18QJlNlbGVjdGlv - bkRldGFpbFR5cGVQcmltYXJ5S2V5ZWREZXRhaWxz0wkKCxobHKCg - gAfSHh8gIVokY2xhc3NuYW1lWCRjbGFzc2VzXxATTlNNdXRhYmxl - RGljdGlvbmFyeaMgIiNcTlNEaWN0aW9uYXJ5WE5TT2JqZWN00goL - JSehJoAJgAvSCykqK1lOUy5zdHJpbmeAClRzY2lk0h4fLS5fEA9O - U011dGFibGVTdHJpbmejLS8wWE5TU3RyaW5nWE5TT2JqZWN00h4f - MjNeTlNNdXRhYmxlQXJyYXmjMjQ1V05TQXJyYXlYTlNPYmplY3TS - Hh8iN6IiOFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctE7PFRk - YXRhgAEACAARABoAIwAtADIANwBFAEsAUgBaAGUAbABwAHIAdAB2 - AHoAfAB+AIAAggCHAIwAkQC6AMEAwgDDAMUAygDVAN4A9AD4AQUB - DgETARUBFwEZAR4BKAEqAS8BNAFGAUoBUwFcAWEBcAF0AXwBhQGK - AY0BlgGoAasBsAAAAAAAAAIBAAAAAAAAAD0AAAAAAAAAAAAAAAAA - AAGy - - contentSortColIsAsc - - contentViewport - {{0, 0}, {694, 448}} - isToolbarVisible - - queries - -- 如果存在名为school的数据库就删除它 -drop database if exists school; - --- 创建名为school的数据库并设置默认的字符集和排序方式 -create database school default charset utf8 collate utf8_bin; - --- 切换到school数据库上下文环境 -use school; - --- 创建学院表 -create table tb_college -( -collid int not null auto_increment comment '编号', -collname varchar(50) not null comment '名称', -collmaster varchar(20) not null comment '院长', -collweb varchar(511) default '' comment '网站', -primary key (collid) -); - --- 创建学生表 -create table tb_student -( -stuid int not null comment '学号', -stuname varchar(20) not null comment '姓名', -stusex bit default 1 comment '性别', -stubirth date not null comment '出生日期', -stuaddr varchar(255) default '' comment '籍贯', -collid int not null comment '所属学院', -primary key (stuid), -foreign key (collid) references tb_college (collid) -); - --- alter table tb_student add constraint fk_student_collid foreign key (collid) references tb_college (collid); - --- 创建教师表 -create table tb_teacher -( -teaid int not null comment '工号', -teaname varchar(20) not null comment '姓名', -teatitle varchar(10) default '助教' comment '职称', -collid int not null comment '所属学院', -primary key (teaid), -foreign key (collid) references tb_college (collid) -); - --- 创建课程表 -create table tb_course -( -couid int not null comment '编号', -couname varchar(50) not null comment '名称', -coucredit int not null comment '学分', -teaid int not null comment '授课老师', -primary key (couid), -foreign key (teaid) references tb_teacher (teaid) -); - --- 创建选课记录表 -create table tb_score -( -scid int auto_increment comment '选课记录编号', -stuid int not null comment '选课学生', -couid int not null comment '所选课程', -scdate datetime comment '选课时间日期', -scmark decimal(4,1) comment '考试成绩', -primary key (scid), -foreign key (stuid) references tb_student (stuid), -foreign key (couid) references tb_course (couid) -); - --- 添加唯一性约束(一个学生选某个课程只能选一次) -alter table tb_score add constraint uni_score_stuid_couid unique (stuid, couid); - --- 插入学院数据 -insert into tb_college (collname, collmaster, collweb) values -('计算机学院', '左冷禅', 'http://www.abc.com'), -('外国语学院', '岳不群', 'http://www.xyz.com'), -('经济管理学院', '风清扬', 'http://www.foo.com'); - --- 插入学生数据 -insert into tb_student (stuid, stuname, stusex, stubirth, stuaddr, collid) values -(1001, '杨逍', 1, '1990-3-4', '四川成都', 1), -(1002, '任我行', 1, '1992-2-2', '湖南长沙', 1), -(1033, '王语嫣', 0, '1989-12-3', '四川成都', 1), -(1572, '岳不群', 1, '1993-7-19', '陕西咸阳', 1), -(1378, '纪嫣然', 0, '1995-8-12', '四川绵阳', 1), -(1954, '林平之', 1, '1994-9-20', '福建莆田', 1), -(2035, '东方不败', 1, '1988-6-30', null, 2), -(3011, '林震南', 1, '1985-12-12', '福建莆田', 3), -(3755, '项少龙', 1, '1993-1-25', null, 3), -(3923, '杨不悔', 0, '1985-4-17', '四川成都', 3); - --- 插入老师数据 -insert into tb_teacher (teaid, teaname, teatitle, collid) values -(1122, '张三丰', '教授', 1), -(1133, '宋远桥', '副教授', 1), -(1144, '杨逍', '副教授', 1), -(2255, '范遥', '副教授', 2), -(3366, '韦一笑', '讲师', 3); - --- 插入课程数据 -insert into tb_course (couid, couname, coucredit, teaid) values -(1111, 'Python程序设计', 3, 1122), -(2222, 'Web前端开发', 2, 1122), -(3333, '操作系统', 4, 1122), -(4444, '计算机网络', 2, 1133), -(5555, '编译原理', 4, 1144), -(6666, '算法和数据结构', 3, 1144), -(7777, '经贸法语', 3, 2255), -(8888, '成本会计', 2, 3366), -(9999, '审计学', 3, 3366); - --- 插入选课数据 -insert into tb_score (stuid, couid, scdate, scmark) values -(1001, 1111, '2017-09-01', 95), -(1001, 2222, '2017-09-01', 87.5), -(1001, 3333, '2017-09-01', 100), -(1001, 4444, '2018-09-03', null), -(1001, 6666, '2017-09-02', 100), -(1002, 1111, '2017-09-03', 65), -(1002, 5555, '2017-09-01', 42), -(1033, 1111, '2017-09-03', 92.5), -(1033, 4444, '2017-09-01', 78), -(1033, 5555, '2017-09-01', 82.5), -(1572, 1111, '2017-09-02', 78), -(1378, 1111, '2017-09-05', 82), -(1378, 7777, '2017-09-02', 65.5), -(2035, 7777, '2018-09-03', 88), -(2035, 9999, curdate(), null), -(3755, 1111, date(now()), null), -(3755, 8888, date(now()), null), -(3755, 9999, '2017-09-01', 92); - --- 查询所有学生信息 -select * from tb_student; - --- 查询所有课程名称及学分(投影和别名) -select couname, coucredit from tb_course; -select couname as 课程名称, coucredit as 学分 from tb_course; - -select stuname as 姓名, case stusex when 1 then '男' else '女' end as 性别 from tb_student; -select stuname as 姓名, if(stusex, '男', '女') as 性别 from tb_student; - --- 查询所有女学生的姓名和出生日期(筛选) -select stuname, stubirth from tb_student where stusex=0; - --- 查询所有80后学生的姓名、性别和出生日期(筛选) -select stuname, stusex, stubirth from tb_student where stubirth>='1980-1-1' and stubirth<='1989-12-31'; -select stuname, stusex, stubirth from tb_student where stubirth between '1980-1-1' and '1989-12-31'; - --- 查询姓"杨"的学生姓名和性别(模糊) -select stuname, stusex from tb_student where stuname like '杨%'; - --- 查询姓"杨"名字两个字的学生姓名和性别(模糊) -select stuname, stusex from tb_student where stuname like '杨_'; - --- 查询姓"杨"名字三个字的学生姓名和性别(模糊) -select stuname, stusex from tb_student where stuname like '杨__'; - --- 查询名字中有"不"字或"嫣"字的学生的姓名(模糊) -select stuname, stusex from tb_student where stuname like '%不%' or stuname like '%嫣%'; - --- 查询没有录入家庭住址的学生姓名(空值) -select stuname from tb_student where stuaddr is null; - --- 查询录入了家庭住址的学生姓名(空值) -select stuname from tb_student where stuaddr is not null; - --- 查询学生选课的所有日期(去重) -select distinct scdate from tb_score; - --- 查询学生的家庭住址(去重) -select distinct stuaddr from tb_student where stuaddr is not null; - --- 查询男学生的姓名和生日按年龄从大到小排列(排序) --- asc - ascending - 升序(从小到大) --- desc - descending - 降序(从大到小) -select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student where stusex=1 order by 年龄 desc; - --- 聚合函数:max / min / count / sum / avg --- 查询年龄最大的学生的出生日期(聚合函数) -select min(stubirth) from tb_student; - --- 查询年龄最小的学生的出生日期(聚合函数) -select max(stubirth) from tb_student; - --- 查询男女学生的人数(分组和聚合函数) -select count(stuid) from tb_student; -select stusex, count(*) from tb_student group by stusex; -select stusex, min(stubirth) from tb_student group by stusex; - --- 查询课程编号为1111的课程的平均成绩(筛选和聚合函数) -select avg(scmark) from tb_score where couid=1111; -select min(scmark) from tb_score where couid=1111; -select count(scid) from tb_score where couid=1111; -select count(scmark) from tb_score where couid=1111; - --- 查询学号为1001的学生所有课程的平均分(筛选和聚合函数) -select avg(scmark) from tb_score where stuid=1001; - --- 查询每个学生的学号和平均成绩(分组和聚合函数) -select stuid as 学号, avg(scmark) as 平均分 from tb_score group by stuid; - --- 查询平均成绩大于等于90分的学生的学号和平均成绩 --- 分组以前的筛选使用where子句 --- 分组以后的筛选使用having子句 -select stuid as 学号, avg(scmark) as 平均分 from tb_score group by stuid having 平均分>=90; - --- 查询年龄最大的学生的姓名(子查询/嵌套的查询) -select stuname from tb_student where stubirth=( - select min(stubirth) from tb_student -); - --- 查询年龄最大的学生姓名和年龄(子查询+运算) -select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student where stubirth=( - select min(stubirth) from tb_student -); - --- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算) -select stuname from tb_student where stuid=( - select stuid from tb_score group by stuid having count(stuid)>2 -) - --- 查询学生姓名、课程名称以及成绩(连接查询) -select stuname, couname, scmark from tb_student t1, tb_course t2, tb_score t3 where t1.stuid=t3.stuid and t2.couid=t3.couid and scmark is not null; - -select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5 offset 10; - -select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 10, 5; - --- 单表:65535TB --- 单列:4G - LONGBLOB (Binary Large OBject) / LONGTEXT --- 查询选课学生的姓名和平均成绩(子查询和连接查询) -select stuname, avgmark from tb_student t1, (select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 where t1.stuid=t2.stuid; - -select stuname, avgmark from tb_student t1 inner join -(select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 on t1.stuid=t2.stuid; - --- 内连接(inner join):只有满足连接条件的记录才会被查出来 --- 外连接(outer join):左外连接 / 右外连接 / 全外连接 --- left outer join / right outer join / full outer join --- 查询每个学生的姓名和选课数量(左外连接和子查询) -select stuname, ifnull(total, 0) from tb_student t1 left outer join (select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid; - - table - tb_score - view - SP_VIEW_CUSTOMQUERY - windowVerticalDividerPosition - 163 - - - encrypted - - format - connection - queryFavorites - - queryHistory - - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5 offset 10 - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 10, 5 - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5, 5 - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 50, 5 - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5 offset 5 - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5 - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null - select stuname, couname, scmark from tb_student t1, tb_course t2, tb_score t3 where t1.stuid=t3.stuid and t2.couid=t3.couid and scmark is not null - select stuname, couname, scmark from tb_student t1, tb_course t2, tb_score t3 where t1.stuid=t3.stuid and t2.couid=t3.couid where scmark is not null - -- 查询学生姓名、课程名称以及成绩(连接查询) -select stuname, couname, scmark from tb_student t1, tb_course t2, tb_score t3 where t1.stuid=t3.stuid and t2.couid=t3.couid where scmark is not null - select stuname, avgmark from tb_student t1 inner join -(select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 on t1.stuid=t2.stuid - select stuname, avgmark from tb_student t1, (select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 where t1.stuid=t2.stuid - select stuname, ifnull(total, 0) from tb_student t1 left outer join (select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid - select stuname, ifnull(total,0) from tb_student t1 left outer join (select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid - -- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算) -select stuname from tb_student where stuid=( - select stuid from tb_score group by stuid having count(stuid)>2 -) - --- 查询学生姓名、课程名称以及成绩(连接查询) - --- 查询选课学生的姓名和平均成绩(子查询和连接查询) - --- 外连接(outer join):左外连接 / 右外连接 / 全外连接 --- 查询每个学生的姓名和选课数量(左外连接和子查询) -select stuname, ifnull(total, 0) from tb_student t1 left outer join (select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid - select stuname, total from tb_student t1 left outer join -(select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid - select stuname, total from tb_student t1 inner join -(select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid - select stuid, count(stuid) from tb_score group by stuid - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid - - rdbms_type - mysql - rdbms_version - 5.5.60-MariaDB - version - 1 - - diff --git a/res/shopping-pdm.png b/Day36-40/res/conceptual_model.png similarity index 100% rename from res/shopping-pdm.png rename to Day36-40/res/conceptual_model.png diff --git a/Day36-40/res/er_diagram.png b/Day36-40/res/er_diagram.png new file mode 100644 index 0000000..e851a30 Binary files /dev/null and b/Day36-40/res/er_diagram.png differ diff --git a/Day36-40/关系型数据库MySQL.md b/Day36-40/关系型数据库MySQL.md deleted file mode 100644 index 57e7dce..0000000 --- a/Day36-40/关系型数据库MySQL.md +++ /dev/null @@ -1,699 +0,0 @@ -## 关系数据库入门 - -### 关系数据库概述 - -1. 数据持久化 - 将数据保存到(在掉电情况下)能够长久保存数据的存储介质中。 - -2. 数据库发展史 - 网状数据库、层次数据库、关系数据库、NoSQL数据库。 - - > 1970年,IBM的研究员E.F.Codd在*Communication of the ACM*上发表了名为*A Relational Model of Data for Large Shared Data Banks*的论文,提出了关系模型的概念,奠定了关系模型的理论基础。后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。 - -3. 关系数据库特点。 - - - 理论基础:集合论和关系代数。 - - - 具体表象:用二维表(有行和列)组织数据。 - - - 编程语言:结构化查询语言(SQL)。 - -4. E-R图。 - - 实体 - 矩形框 - - 属性 - 椭圆框 - - 关系 - 菱形框 - - 重数 - 1:1 / 1:N / M:N - -5. 关系数据库产品。 - - [Oracle](https://www.oracle.com/index.html) - 目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库,它实现了分布式处理的功能。在Oracle最新的12c版本中,还引入了多承租方架构,使用该架构可轻松部署和管理数据库云。 - - [DB2](https://www.ibm.com/analytics/us/en/db2/) - IBM公司开发的、主要运行于Unix(包括IBM自家的[AIX](https://zh.wikipedia.org/wiki/AIX))、Linux、以及Windows服务器版等系统的关系数据库产品。DB2历史悠久且被认为是最早使用SQL的数据库产品,它拥有较为强大的商业智能功能。 - - [SQL Server](https://www.microsoft.com/en-us/sql-server/) - 由Microsoft开发和推广的关系型数据库产品,最初适用于中小企业的数据管理,但是近年来它的应用范围有所扩展,部分大企业甚至是跨国公司也开始基于它来构建自己的数据管理系统。 - - [MySQL](https://www.mysql.com/) - MySQL是开放源代码的,任何人都可以在GPL(General Public License)的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。 - - [PostgreSQL]() - 在BSD许可证下发行的开放源代码的关系数据库产品。 - -### MySQL简介 - -1. 安装和配置(以CentOS Linux环境为例)。 - - - Linux下有一个MySQL的分支版本,名为MariaDB,它由MySQL的一些原始开发者开发,有商业支持,旨在继续保持MySQL数据库在[GNU GPL](https://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81)下开源(因为大家担心MySQL被甲骨文收购后会不再开源)。如果决定要直接使用MariaDB作为MySQL的替代品,可以使用下面的命令进行安装。 - - ```Shell - yum install mariadb mariadb-server - ``` - - - 如果要安装官方版本的MySQL,可以在[MySQL官方网站]()下载安装文件。首先在下载页面中选择平台和版本,然后找到对应的下载链接。下面以MySQL 5.7.26版本和Red Hat Enterprise Linux为例,直接下载包含所有安装文件的归档文件,解归档之后通过包管理工具进行安装。 - - ```Shell - wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar - tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar - ``` - - 如果系统上有MariaDB相关的文件,需要先移除MariaDB相关的文件。 - - ```Shell - yum list installed | grep mariadb | awk '{print $1}' | xargs yum erase -y - ``` - - 接下来可以按照如下所示的顺序用RPM(Redhat Package Manager)工具安装MySQL。 - - ```Shell - rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm - rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm - rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm - rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm - ``` - - 可以使用下面的命令查看已经安装的MySQL相关的包。 - - ```Shell - rpm -qa | grep mysql - ``` - - - 启动MySQL服务。 - - 先修改MySQL的配置文件(`/etc/my.cnf`)添加一行`skip-grant-tables`,可以设置不进行身份验证即可连接MySQL服务器,然后就可以以超级管理员(root)身份登录。 - - ```Shell - vim /etc/my.cnf - ``` - - ```INI - [mysqld] - skip-grant-tables - - datadir=/var/lib/mysql - socket=/var/lib/mysql/mysql.sock - - symbolic-links=0 - - log-error=/var/log/mysqld.log - pid-file=/var/run/mysqld/mysqld.pid - ``` - - 接下来可以使用下面的命令来启动MySQL。 - - ```Shell - service mysqld start - ``` - - 在CentOS 7中建议使用下面的命令来启动MySQL。 - - ```Shell - systemctl start mysqld - ``` - - - 使用MySQL客户端工具连接服务器。 - - 命令行工具: - - ```Shell - mysql -u root - ``` - - 修改超级管理员(root)的访问口令为i_LOVE_macos_123。 - - ```SQL - use mysql; - update user set authentication_string=password('i_LOVE_macos_123') where user='root'; - flush privileges; - ``` - - 将MySQL配置文件中的`skip-grant-tables`去掉,然后重启服务器,重新登录。这一次需要提供用户名和口令才能连接MySQL服务器。 - - ```Shell - systemctl restart mysqld - mysql -u root -p - ``` - - 也可以选择图形化的客户端工具来连接MySQL服务器,可以选择下列工具之一: - - - MySQL Workbench(官方提供的工具) - - Navicat for MySQL(界面简单优雅,功能直观强大) - - SQLyog for MySQL(强大的MySQL数据库管理员工具) - -2. 常用命令。 - - - 查看服务器版本。 - - ```SQL - select version(); - ``` - - - 查看所有数据库。 - - ```SQL - show databases; - ``` - - - 切换到指定数据库。 - - ```SQL - use mysql; - ``` - - - 查看数据库下所有表。 - - ```Shell - show tables; - ``` - - - 获取帮助。 - - ```SQL - ? contents; - ? functions; - ? numeric functions; - ? round; - - ? data types; - ? longblob; - ``` - - -### SQL详解 - -1. DDL - - ```SQL - -- 如果存在名为school的数据库就删除它 - drop database if exists school; - - -- 创建名为school的数据库并设置默认的字符集和排序方式 - create database school default charset utf8 collate utf8_bin; - - -- 切换到school数据库上下文环境 - use school; - - -- 创建学院表 - create table tb_college - ( - collid int not null auto_increment comment '编号', - collname varchar(50) not null comment '名称', - collmaster varchar(20) not null comment '院长', - collweb varchar(511) default '' comment '网站', - primary key (collid) - ); - - -- 创建学生表 - create table tb_student - ( - stuid int not null comment '学号', - stuname varchar(20) not null comment '姓名', - stusex bit default 1 comment '性别', - stubirth date not null comment '出生日期', - stuaddr varchar(255) default '' comment '籍贯', - collid int not null comment '所属学院', - primary key (stuid), - foreign key (collid) references tb_college (collid) - ); - - -- alter table tb_student add constraint fk_student_collid foreign key (collid) references tb_college (collid); - - -- 创建教师表 - create table tb_teacher - ( - teaid int not null comment '工号', - teaname varchar(20) not null comment '姓名', - teatitle varchar(10) default '助教' comment '职称', - collid int not null comment '所属学院', - primary key (teaid), - foreign key (collid) references tb_college (collid) - ); - - -- 创建课程表 - create table tb_course - ( - couid int not null comment '编号', - couname varchar(50) not null comment '名称', - coucredit int not null comment '学分', - teaid int not null comment '授课老师', - primary key (couid), - foreign key (teaid) references tb_teacher (teaid) - ); - - -- 创建选课记录表 - create table tb_score - ( - scid int auto_increment comment '选课记录编号', - stuid int not null comment '选课学生', - couid int not null comment '所选课程', - scdate datetime comment '选课时间日期', - scmark decimal(4,1) comment '考试成绩', - primary key (scid), - foreign key (stuid) references tb_student (stuid), - foreign key (couid) references tb_course (couid) - ); - - -- 添加唯一性约束(一个学生选某个课程只能选一次) - alter table tb_score add constraint uni_score_stuid_couid unique (stuid, couid); - ``` - -2. DML - - ```SQL - - -- 插入学院数据 - insert into tb_college (collname, collmaster, collweb) values - ('计算机学院', '左冷禅', 'http://www.abc.com'), - ('外国语学院', '岳不群', 'http://www.xyz.com'), - ('经济管理学院', '风清扬', 'http://www.foo.com'); - - -- 插入学生数据 - insert into tb_student (stuid, stuname, stusex, stubirth, stuaddr, collid) values - (1001, '杨逍', 1, '1990-3-4', '四川成都', 1), - (1002, '任我行', 1, '1992-2-2', '湖南长沙', 1), - (1033, '王语嫣', 0, '1989-12-3', '四川成都', 1), - (1572, '岳不群', 1, '1993-7-19', '陕西咸阳', 1), - (1378, '纪嫣然', 0, '1995-8-12', '四川绵阳', 1), - (1954, '林平之', 1, '1994-9-20', '福建莆田', 1), - (2035, '东方不败', 1, '1988-6-30', null, 2), - (3011, '林震南', 1, '1985-12-12', '福建莆田', 3), - (3755, '项少龙', 1, '1993-1-25', null, 3), - (3923, '杨不悔', 0, '1985-4-17', '四川成都', 3), - (4040, '隔壁老王', 1, '1989-1-1', '四川成都', 2); - - -- 删除学生数据 - delete from tb_student where stuid=4040; - - -- 更新学生数据 - update tb_student set stuname='杨过', stuaddr='湖南长沙' where stuid=1001; - - -- 插入老师数据 - insert into tb_teacher (teaid, teaname, teatitle, collid) values - (1122, '张三丰', '教授', 1), - (1133, '宋远桥', '副教授', 1), - (1144, '杨逍', '副教授', 1), - (2255, '范遥', '副教授', 2), - (3366, '韦一笑', '讲师', 3); - - -- 插入课程数据 - insert into tb_course (couid, couname, coucredit, teaid) values - (1111, 'Python程序设计', 3, 1122), - (2222, 'Web前端开发', 2, 1122), - (3333, '操作系统', 4, 1122), - (4444, '计算机网络', 2, 1133), - (5555, '编译原理', 4, 1144), - (6666, '算法和数据结构', 3, 1144), - (7777, '经贸法语', 3, 2255), - (8888, '成本会计', 2, 3366), - (9999, '审计学', 3, 3366); - - -- 插入选课数据 - insert into tb_score (stuid, couid, scdate, scmark) values - (1001, 1111, '2017-09-01', 95), - (1001, 2222, '2017-09-01', 87.5), - (1001, 3333, '2017-09-01', 100), - (1001, 4444, '2018-09-03', null), - (1001, 6666, '2017-09-02', 100), - (1002, 1111, '2017-09-03', 65), - (1002, 5555, '2017-09-01', 42), - (1033, 1111, '2017-09-03', 92.5), - (1033, 4444, '2017-09-01', 78), - (1033, 5555, '2017-09-01', 82.5), - (1572, 1111, '2017-09-02', 78), - (1378, 1111, '2017-09-05', 82), - (1378, 7777, '2017-09-02', 65.5), - (2035, 7777, '2018-09-03', 88), - (2035, 9999, curdate(), null), - (3755, 1111, date(now()), null), - (3755, 8888, date(now()), null), - (3755, 9999, '2017-09-01', 92); - ``` - -3. DQL - - ```SQL - -- 查询所有学生信息 - select * from tb_student; - - -- 查询所有课程名称及学分(投影和别名) - select couname, coucredit from tb_course; - select couname as 课程名称, coucredit as 学分 from tb_course; - - -- 查询所有学生的姓名和性别(条件运算) - select stuname as 姓名, case stusex when 1 then '男' else '女' end as 性别 from tb_student; - select stuname as 姓名, if(stusex, '男', '女') as 性别 from tb_student; - - -- 查询所有女学生的姓名和出生日期(筛选) - select stuname, stubirth from tb_student where stusex=0; - - -- 查询所有80后学生的姓名、性别和出生日期(筛选) - select stuname, stusex, stubirth from tb_student where stubirth>='1980-1-1' and stubirth<='1989-12-31'; - select stuname, stusex, stubirth from tb_student where stubirth between '1980-1-1' and '1989-12-31'; - - -- 查询姓"杨"的学生姓名和性别(模糊) - select stuname, stusex from tb_student where stuname like '杨%'; - - -- 查询姓"杨"名字两个字的学生姓名和性别(模糊) - select stuname, stusex from tb_student where stuname like '杨_'; - - -- 查询姓"杨"名字三个字的学生姓名和性别(模糊) - select stuname, stusex from tb_student where stuname like '杨__'; - - -- 查询名字中有"不"字或"嫣"字的学生的姓名(模糊) - select stuname, stusex from tb_student where stuname like '%不%' or stuname like '%嫣%'; - - -- 查询没有录入家庭住址的学生姓名(空值) - select stuname from tb_student where stuaddr is null; - - -- 查询录入了家庭住址的学生姓名(空值) - select stuname from tb_student where stuaddr is not null; - - -- 查询学生选课的所有日期(去重) - select distinct scdate from tb_score; - - -- 查询学生的家庭住址(去重) - select distinct stuaddr from tb_student where stuaddr is not null; - - -- 查询男学生的姓名和生日按年龄从大到小排列(排序) - -- asc (ascending) - 升序(从小到大)/ desc (descending) - 降序(从大到小) - select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student where stusex=1 order by 年龄 desc; - - -- 聚合函数:max / min / count / sum / avg - -- 查询年龄最大的学生的出生日期(聚合函数) - select min(stubirth) from tb_student; - - -- 查询年龄最小的学生的出生日期(聚合函数) - select max(stubirth) from tb_student; - - -- 查询男女学生的人数(分组和聚合函数) - select stusex, count(*) from tb_student group by stusex; - - -- 查询课程编号为1111的课程的平均成绩(筛选和聚合函数) - select avg(scmark) from tb_score where couid=1111; - - -- 查询学号为1001的学生所有课程的平均分(筛选和聚合函数) - select avg(scmark) from tb_score where stuid=1001; - - -- 查询每个学生的学号和平均成绩(分组和聚合函数) - select stuid as 学号, avg(scmark) as 平均分 from tb_score group by stuid; - - -- 查询平均成绩大于等于90分的学生的学号和平均成绩 - -- 分组以前的筛选使用where子句 / 分组以后的筛选使用having子句 - select stuid as 学号, avg(scmark) as 平均分 from tb_score group by stuid having 平均分>=90; - - -- 查询年龄最大的学生的姓名(子查询/嵌套的查询) - select stuname from tb_student where stubirth=( - select min(stubirth) from tb_student - ); - - -- 查询年龄最大的学生姓名和年龄(子查询+运算) - select stuname as 姓名, year(now())-year(stubirth) as 年龄 from tb_student where stubirth=( - select min(stubirth) from tb_student - ); - - -- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算) - select stuname from tb_student where stuid=( - select stuid from tb_score group by stuid having count(stuid)>2 - ) - - -- 查询学生姓名、课程名称以及成绩(连接查询) - select stuname, couname, scmark from tb_student t1, tb_course t2, tb_score t3 where t1.stuid=t3.stuid and t2.couid=t3.couid and scmark is not null; - - -- 查询学生姓名、课程名称以及成绩按成绩从高到低查询第11-15条记录(内连接+分页) - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 5 offset 10; - - select stuname, couname, scmark from tb_student t1 inner join tb_score t3 on t1.stuid=t3.stuid inner join tb_course t2 on t2.couid=t3.couid where scmark is not null order by scmark desc limit 10, 5; - - -- 查询选课学生的姓名和平均成绩(子查询和连接查询) - select stuname, avgmark from tb_student t1, (select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 where t1.stuid=t2.stuid; - - select stuname, avgmark from tb_student t1 inner join - (select stuid, avg(scmark) as avgmark from tb_score group by stuid) t2 on t1.stuid=t2.stuid; - - -- 内连接(inner join)- 只有满足连接条件的记录才会被查出来 - -- 外连接(outer join)- 左外连接(left outer join) / 右外连接(right outer join) / 全外连接 - -- 查询每个学生的姓名和选课数量(左外连接和子查询) - select stuname, ifnull(total, 0) from tb_student t1 left outer join (select stuid, count(stuid) as total from tb_score group by stuid) t2 on t1.stuid=t2.stuid; - ``` - -4. DCL - - ```SQL - -- 创建名为hellokitty的用户 - create user 'hellokitty'@'%' identified by '123123'; - - -- 将对school数据库所有对象的所有操作权限授予hellokitty - grant all privileges on school.* to 'hellokitty'@'%'; - - -- 召回hellokitty对school数据库所有对象的insert/delete/update权限 - revoke insert, delete, update on school.* from 'hellokitty'@'%'; - ``` - -### 相关知识 - -#### 范式理论 - 设计二维表的指导思想 - -1. 第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。 -2. 第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。 -3. 第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。 - -#### 数据完整性 - -1. 实体完整性 - 每个实体都是独一无二的 - - 主键(primary key) / 唯一约束 / 唯一索引(unique) -2. 引用完整性(参照完整性)- 关系中不允许引用不存在的实体 - - 外键(foreign key) -3. 域完整性 - 数据是有效的 - - 数据类型及长度 - - 非空约束(not null) - - 默认值约束(default) - - 检查约束(check) - -#### 数据一致性 - -1. 事务:一系列对数据库进行读/写的操作。 - -2. 事务的ACID特性 - - 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行 - - 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态 - - 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行 - - 持久性:已被提交的事务对数据库的修改应该永久保存在数据库中 - -### Python数据库编程 - -我们用如下所示的数据库来演示在Python中如何访问MySQL数据库。 - -```SQL -drop database if exists hrs; -create database hrs default charset utf8; - -use hrs; - -drop table if exists tb_emp; -drop table if exists tb_dept; - -create table tb_dept -( -dno int not null comment '编号', -dname varchar(10) not null comment '名称', -dloc varchar(20) not null comment '所在地', -primary key (dno) -); - -insert into tb_dept values - (10, '会计部', '北京'), - (20, '研发部', '成都'), - (30, '销售部', '重庆'), - (40, '运维部', '深圳'); - -create table tb_emp -( -eno int not null comment '员工编号', -ename varchar(20) not null comment '员工姓名', -job varchar(20) not null comment '员工职位', -mgr int comment '主管编号', -sal int not null comment '员工月薪', -comm int comment '每月补贴', -dno int comment '所在部门编号', -primary key (eno) -); - -alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno); - -insert into tb_emp values - (7800, '张三丰', '总裁', null, 9000, 1200, 20), - (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), - (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), - (3211, '张无忌', '程序员', 2056, 3200, null, 20), - (3233, '丘处机', '程序员', 2056, 3400, null, 20), - (3251, '张翠山', '程序员', 2056, 4000, null, 20), - (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), - (5234, '郭靖', '出纳', 5566, 2000, null, 10), - (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), - (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), - (4466, '苗人凤', '销售员', 3344, 2500, null, 30), - (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), - (3577, '杨过', '会计', 5566, 2200, null, 10), - (3588, '朱九真', '会计', 5566, 2500, null, 10); -``` - -在Python 3中,我们通常使用纯Python的三方库PyMySQL来访问MySQL数据库,它应该是目前最好的选择。 - -1. 安装PyMySQL。 - - ```Shell - pip install pymysql - ``` - -2. 添加一个部门。 - - ```Python - import pymysql - - - def main(): - no = int(input('编号: ')) - name = input('名字: ') - loc = input('所在地: ') - # 1. 创建数据库连接对象 - con = pymysql.connect(host='localhost', port=3306, - database='hrs', charset='utf8', - user='root', password='123456') - try: - # 2. 通过连接对象获取游标 - with con.cursor() as cursor: - # 3. 通过游标执行SQL并获得执行结果 - result = cursor.execute( - 'insert into tb_dept values (%s, %s, %s)', - (no, name, loc) - ) - if result == 1: - print('添加成功!') - # 4. 操作成功提交事务 - con.commit() - finally: - # 5. 关闭连接释放资源 - con.close() - - - if __name__ == '__main__': - main() - ``` - -3. 删除一个部门。 - - ```Python - import pymysql - - - def main(): - no = int(input('编号: ')) - con = pymysql.connect(host='localhost', port=3306, - database='hrs', charset='utf8', - user='root', password='123456', - autocommit=True) - try: - with con.cursor() as cursor: - result = cursor.execute( - 'delete from tb_dept where dno=%s', - (no, ) - ) - if result == 1: - print('删除成功!') - finally: - con.close() - - - if __name__ == '__main__': - main() - ``` - -4. 更新一个部门。 - - ```Python - import pymysql - - - def main(): - no = int(input('编号: ')) - name = input('名字: ') - loc = input('所在地: ') - con = pymysql.connect(host='localhost', port=3306, - database='hrs', charset='utf8', - user='root', password='123456', - autocommit=True) - try: - with con.cursor() as cursor: - result = cursor.execute( - 'update tb_dept set dname=%s, dloc=%s where dno=%s', - (name, loc, no) - ) - if result == 1: - print('更新成功!') - finally: - con.close() - - - if __name__ == '__main__': - main() - ``` - -5. 查询所有部门。 - - ```Python - import pymysql - from pymysql.cursors import DictCursor - - - def main(): - con = pymysql.connect(host='localhost', port=3306, - database='hrs', charset='utf8', - user='root', password='123456') - try: - with con.cursor(cursor=DictCursor) as cursor: - cursor.execute('select dno as no, dname as name, dloc as loc from tb_dept') - results = cursor.fetchall() - print(results) - print('编号\t名称\t\t所在地') - for dept in results: - print(dept['no'], end='\t') - print(dept['name'], end='\t') - print(dept['loc']) - finally: - con.close() - - - if __name__ == '__main__': - main() - ``` - -6. 分页查询员工信息。 - - ```Python - import pymysql - from pymysql.cursors import DictCursor - - - class Emp(object): - - def __init__(self, no, name, job, sal): - self.no = no - self.name = name - self.job = job - self.sal = sal - - def __str__(self): - return f'\n编号:{self.no}\n姓名:{self.name}\n职位:{self.job}\n月薪:{self.sal}\n' - - - def main(): - page = int(input('页码: ')) - size = int(input('大小: ')) - con = pymysql.connect(host='localhost', port=3306, - database='hrs', charset='utf8', - user='root', password='123456') - try: - with con.cursor() as cursor: - cursor.execute( - 'select eno as no, ename as name, job, sal from tb_emp limit %s,%s', - ((page - 1) * size, size) - ) - for emp_tuple in cursor.fetchall(): - emp = Emp(*emp_tuple) - print(emp) - finally: - con.close() - - - if __name__ == '__main__': - main() - ``` \ No newline at end of file diff --git a/Day41-55/03.静态资源和Ajax请求.md b/Day41-55/03.静态资源和Ajax请求.md deleted file mode 100644 index c8b9e02..0000000 --- a/Day41-55/03.静态资源和Ajax请求.md +++ /dev/null @@ -1,304 +0,0 @@ -## 静态资源和Ajax请求 - -基于前面两个章节讲解的知识,我们已经可以使用Django框架来实现Web应用的开发了。接下来我们就尝试实现一个投票应用,具体的需求是用户进入应用首先查看到“学科介绍”页面,该页面显示了一个学校所开设的所有学科;通过点击某个学科,可以进入“老师介绍”页面,该页面展示了该学科所有老师的详细情况,可以在该页面上给老师点击“好评”或“差评”,但是会先跳转到“登录页”要求用户登录,登录成功才能投票;对于未注册的用户,可以在“登录页”点击“新用户注册”进入“注册页”完成用户注册,注册成功后会跳转到“登录页”,注册失败会获得相应的提示信息。 - -### 准备工作 - -由于之前已经详细的讲解了如何创建Django项目以及项目的相关配置,因此我们略过这部分内容,唯一需要说明的是,从上面对投票应用需求的描述中我们可以分析出三个业务实体:学科、老师和用户。学科和老师之间通常是一对多关联关系(一个学科有多个老师,一个老师通常只属于一个学科),用户因为要给老师投票,所以跟老师之间是多对多关联关系(一个用户可以给多个老师投票,一个老师也可以收到多个用户的投票)。首先修改应用下的models.py文件来定义数据模型,先给出学科和老师的模型。 - -```Python -from django.db import models - - -class Subject(models.Model): - """学科""" - no = models.AutoField(primary_key=True, verbose_name='编号') - name = models.CharField(max_length=31, verbose_name='名称') - intro = models.CharField(max_length=511, verbose_name='介绍') - - def __str__(self): - return self.name - - class Meta: - db_table = 'tb_subject' - verbose_name_plural = '学科' - - -class Teacher(models.Model): - """老师""" - no = models.AutoField(primary_key=True, verbose_name='编号') - name = models.CharField(max_length=15, verbose_name='姓名') - gender = models.BooleanField(default=True, choices=((True, '男'), (False, '女')), verbose_name='性别') - birth = models.DateField(null=True, verbose_name='出生日期') - intro = models.CharField(max_length=511, default='', verbose_name='') - good_count = models.IntegerField(default=0, verbose_name='好评数') - bad_count = models.IntegerField(default=0, verbose_name='差评数') - photo = models.CharField(max_length=255, verbose_name='照片') - subject = models.ForeignKey(to=Subject, on_delete=models.PROTECT, db_column='sno', verbose_name='所属学科') - - def __str__(self): - return self.name - - class Meta: - db_table = 'tb_teacher' - verbose_name_plural = '老师' -``` - -模型定义完成后,可以通过“生成迁移”和“执行迁移”来完成关系型数据库中二维表的创建,当然这需要提前启动数据库服务器并创建好对应的数据库,同时我们在项目中已经安装了PyMySQL而且完成了相应的配置,这些内容此处不再赘述。 - -```Shell -(venv)$ python manage.py makemigrations vote -... -(venv)$ python manage.py migrate -... -``` - -> 注意:为了给vote应用生成迁移,需要先修改Django项目的配置文件settings.py,在INSTALLED_APPS中添加vote应用。 - -完成模型迁移之后,我们可以通过下面的SQL语句来添加学科和老师测试的数据。 - -```SQL -INSERT INTO `tb_subject` (`no`,`name`,`intro`) -VALUES -(1, 'Python全栈+人工智能', 'Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。'), -(2, 'JavaEE+分布式服务', 'Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。'), -(3, 'HTML5大前端', 'HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。'), -(4, '全栈软件测试', '在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程'), -(5, '全链路UI/UE', '全链路要求设计师关注整个业务链中的每一个环节,将设计的价值融入每一个和用户的接触点中,让整个业务的用户体验质量得到几何级数的增长。'); - -INSERT INTO `tb_teacher` (`no`,`name`,`gender`,`birth`,`intro`,`good_count`,`bad_count`,`photo`,`sno`) -VALUES -(1, '骆昊', 1, '1980-11-28', '10年以上软硬件产品设计、研发、架构和管理经验,2003年毕业于四川大学,四川大学Java技术俱乐部创始人,四川省优秀大学毕业生,在四川省网络通信技术重点实验室工作期间,参与了2项国家自然科学基金项目、1项中国科学院中长期研究项目和多项四川省科技攻关项目,在国际会议和国内顶级期刊上发表多篇论文(1篇被SCI收录,3篇被EI收录),大规模网络性能测量系统DMC-TS的设计者和开发者,perf-TTCN语言的发明者。国内最大程序员社区CSDN的博客专家,在Github上参与和维护了多个高质量开源项目,精通C/C++、Java、Python、R、Swift、JavaScript等编程语言,擅长OOAD、系统架构、算法设计、协议分析和网络测量,主持和参与过电子政务系统、KPI考核系统、P2P借贷平台等产品的研发,一直践行“用知识创造快乐”的教学理念,善于总结,乐于分享。', 0, 0, 'images/luohao.png', 1), -(2, '王海飞', 1, '1993-05-24', '5年以上Python开发经验,先后参与了O2O商城、CRM系统、CMS平台、ERP系统等项目的设计与研发,曾在全国最大最专业的汽车领域相关服务网站担任Python高级研发工程师、项目经理等职务,擅长基于Python、Java、PHP等开发语言的企业级应用开发,全程参与了多个企业级应用从需求到上线所涉及的各种工作,精通Django、Flask等框架,熟悉基于微服务的企业级项目开发,拥有丰富的项目实战经验。善于用浅显易懂的方式在课堂上传授知识点,在授课过程中经常穿插企业开发的实际案例并分析其中的重点和难点,通过这种互动性极强的教学模式帮助学员找到解决问题的办法并提升学员的综合素质。', 0, 0, 'images/wangdachui.png', 1), -(3, '余婷', 0, '1992-03-12', '5年以上移动互联网项目开发经验和教学经验,曾担任上市游戏公司高级软件研发工程师和移动端(iOS)技术负责人,参了多个企业级应用和游戏类应用的移动端开发和后台服务器开发,拥有丰富的开发经验和项目管理经验,以个人开发者和协作开发者的身份在苹果的AppStore上发布过多款App。精通Python、C、Objective-C、Swift等开发语言,熟悉iOS原生App开发、RESTful接口设计以及基于Cocos2d-x的游戏开发。授课条理清晰、细致入微,性格活泼开朗、有较强的亲和力,教学过程注重理论和实践的结合,在学员中有良好的口碑。', 0, 0, 'images/yuting.png', 1), -(4, '肖世荣', 1, '1977-07-02', '10年以上互联网和移动互联网产品设计、研发、技术架构和项目管理经验,曾在中国移动、symbio、ajinga.com、万达信息等公司担任架构师、项目经理、技术总监等职务,长期为苹果、保时捷、耐克、沃尔玛等国际客户以及国内的政府机构提供信息化服务,主导的项目曾获得“世界科技先锋”称号,个人作品“许愿吧”曾在腾讯应用市场生活类App排名前3,拥有百万级用户群体,运营的公众号“卵石坊”是国内知名的智能穿戴设备平台。精通Python、C++、Java、Ruby、JavaScript等开发语言,主导和参与了20多个企业级项目(含国家级重大项目和互联网创新项目),涉及的领域包括政务、社交、电信、卫生和金融,有极为丰富的项目实战经验。授课深入浅出、条理清晰,善于调动学员的学习热情并帮助学员理清思路和方法。', 0, 0, 'images/xiaoshirong.png', 1), -(5, '张无忌', 1, '1987-07-07', '出生起便在冰火岛过着原始生活,踏入中土后因中玄冥神掌命危而带病习医,忍受寒毒煎熬七年最后因福缘际会练成“九阳神功”更在之后又练成了“乾坤大挪移”等盖世武功,几乎无敌于天下。 生性随和,宅心仁厚,精通医术和药理。20岁时便凭着盖世神功当上明教教主,率领百万教众及武林群雄反抗蒙古政权元朝的高压统治,最后推翻了元朝。由于擅长乾坤大挪移神功,上课遇到问题就转移话题,属于拉不出屎怪地球没有引力的类型。', 0, 0, 'images/zhangwuji.png', 5), -(6, '韦一笑', 1, '1975-12-15', '外号“青翼蝠王”,为明教四大护教法王之一。 身披青条子白色长袍,轻功十分了得。由于在修炼至阴至寒的“寒冰绵掌”时出了差错,经脉中郁积了至寒阴毒,只要运上内力,寒毒就会发作,如果不吸人血解毒,全身血脉就会凝结成冰,后得张无忌相助,以其高明医术配以“九阳神功”,终将寒毒驱去,摆脱了吸吮人血这一命运。由于轻功绝顶,学生一问问题就跑了。', 0, 0, 'images/weiyixiao.png', 3); -``` - -当然也可以直接使用Django提供的后台管理应用来添加学科和老师信息,这需要先注册模型类和模型管理类。 - -```SQL -from django.contrib import admin -from django.contrib.admin import ModelAdmin - -from vote.models import Teacher, Subject - - -class SubjectModelAdmin(ModelAdmin): - """学科模型管理""" - list_display = ('no', 'name') - ordering = ('no', ) - - -class TeacherModelAdmin(ModelAdmin): - """老师模型管理""" - list_display = ('no', 'name', 'gender', 'birth', 'good_count', 'bad_count', 'subject') - ordering = ('no', ) - search_fields = ('name', ) - - -admin.site.register(Subject, SubjectModelAdmin) -admin.site.register(Teacher, TeacherModelAdmin) -``` - -接下来,我们就可以修改views.py文件,通过编写视图函数先实现“学科介绍”页面。 - -```Python -def show_subjects(request): - """查看所有学科""" - subjects = Subject.objects.all() - return render(request, 'subject.html', {'subjects': subjects}) -``` - -至此,我们还需要一个模板页,模板的配置以及模板页中模板语言的用法在之前已经进行过简要的介绍,如果不熟悉可以看看下面的代码,相信这并不是一件困难的事情。 - -```HTML - - - - - 学科信息 - - - -

千锋互联所有学科信息

-
-
- {% for subject in subjects %} -
-
- - {{ subject.name }} - -
-
{{ subject.intro }}
-
- {% endfor %} -
- - -``` - -在上面的模板中,我们为每个学科添加了一个超链接,点击超链接可以查看该学科的讲师信息,为此需要再编写一个视图函数来处理查看指定学科老师信息。 - -```Python -def show_teachers(request): - """查看指定学科的老师""" - try: - sno = int(request.GET['sno']) - subject = Subject.objects.get(no=sno) - teachers = Teacher.objects.filter(subject__no=sno) - context = {'subject': subject, 'teachers': teachers} - return render(request, 'teacher.html', context) - except (KeyError, ValueError, Subject.DoesNotExist): - return redirect('/') -``` - -显示老师信息的模板页。 - -```HTML - -{% load static %} - - - - 老师信息 - - - -

{{ subject.name }}学科老师信息

-
- {% if teachers %} -
- {% for teacher in teachers %} -
-
- -
-
-
- 姓名:{{ teacher.name }} - 性别:{{ teacher.gender | yesno:'男,女' }} - 出生日期:{{ teacher.birth }} -
-
{{ teacher.intro }}
- -
-
- {% endfor %} -
- {% else %} -

暂时没有该学科的老师信息

- {% endif %} - - - -``` - -### 加载静态资源 - -在上面的模板页面中,我们使用了``标签来加载老师的照片,其中使用了引用静态资源的模板指令`{% static %}`,要使用该指令,首先要使用`{% load static %}`指令来加载静态资源,我们将这段代码放在了页码开始的位置。在上面的项目中,我们将静态资源置于名为static的文件夹中,在该文件夹下又创建了三个文件夹:css、js和images,分别用来保存外部层叠样式表、外部JavaScript文件和图片资源。为了能够找到保存静态资源的文件夹,我们还需要修改Django项目的配置文件settings.py,如下所示: - -```Python -# 此处省略上面的代码 - -STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ] -STATIC_URL = '/static/' - -# 此处省略下面的代码 -``` - -接下来修改urls.py文件,配置用户请求的URL和视图函数的对应关系。 - -```Python -from django.contrib import admin -from django.urls import path - -from vote import views - -urlpatterns = [ - path('', views.show_subjects), - path('teachers/', views.show_teachers), - path('admin/', admin.site.urls), -] -``` - -启动服务器运行项目,进入首页查看学科信息。 - -![](/Users/Hao/Desktop/Python-100-Days/Day41-55/res/show-subjects.png) - -点击学科查看老师信息。 - -![](./res/show-teachers.png) - -### Ajax请求 - -接下来就可以实现“好评”和“差评”的功能了,很明显如果能够在不刷新页面的情况下实现这两个功能会带来更好的用户体验,因此我们考虑使用[Ajax](https://zh.wikipedia.org/wiki/AJAX)技术来实现“好评”和“差评”,Ajax技术我们在之前的章节中已经介绍过了,此处不再赘述。 - -首先修改项目的urls.py文件,为“好评”和“差评”功能映射对应的URL。 - -```Python -from django.contrib import admin -from django.urls import path - -from vote import views - -urlpatterns = [ - path('', views.show_subjects), - path('teachers/', views.show_teachers), - path('praise/', views.prise_or_criticize), - path('criticize/', views.prise_or_criticize), - path('admin/', admin.site.urls), -] -``` - -设计视图函数`praise_or_criticize`来支持“好评”和“差评”功能,该视图函数通过Django封装的JsonResponse类将字典序列化成JSON字符串作为返回给浏览器的响应内容。 - -```Python -def praise_or_criticize(request): - """好评""" - try: - tno = int(request.GET['tno']) - teacher = Teacher.objects.get(no=tno) - if request.path.startswith('/prise'): - teacher.good_count += 1 - else: - teacher.bad_count += 1 - teacher.save() - data = {'code': 200, 'hint': '操作成功'} - except (KeyError, ValueError, Teacher.DoseNotExist): - data = {'code': 404, 'hint': '操作失败'} - return JsonResponse(data) -``` - -修改显示老师信息的模板页,引入jQuery库来实现事件处理、Ajax请求和DOM操作。 - -```HTML - - -``` - -### 小结 - -到此为止,这个投票项目的核心功能已然完成,在下一个章节中我们要求用户必须登录才能投票,没有账号的用户可以通过注册功能注册一个账号。 \ No newline at end of file diff --git a/Day41-55/05.Cookie和Session.md b/Day41-55/05.Cookie和Session.md deleted file mode 100644 index 2d19016..0000000 --- a/Day41-55/05.Cookie和Session.md +++ /dev/null @@ -1,4 +0,0 @@ -## Cookie和Session - -如今,一个网站如果不通过某种方式记住你是谁以及你之前在网站的活动情况,失去的就是网站的可用性和便利性,继而很有可能导致网站用户的流式,所以记住一个用户(更专业的说法叫**用户跟踪**)对绝大多数Web应用来说都是必需的功能。 - diff --git a/Day41-55/06.中间件的应用.md b/Day41-55/06.中间件的应用.md deleted file mode 100644 index 4c70b77..0000000 --- a/Day41-55/06.中间件的应用.md +++ /dev/null @@ -1,4 +0,0 @@ -## 中间件的应用 - - - diff --git a/Day41-55/07.日志和调试.md b/Day41-55/07.日志和调试.md deleted file mode 100644 index a9ad1fc..0000000 --- a/Day41-55/07.日志和调试.md +++ /dev/null @@ -1,4 +0,0 @@ -## 日志和调试 - - - diff --git a/Day41-55/09.文件下载和报表.md b/Day41-55/09.文件下载和报表.md deleted file mode 100644 index c57794e..0000000 --- a/Day41-55/09.文件下载和报表.md +++ /dev/null @@ -1,4 +0,0 @@ -## 文件下载和报表 - - - diff --git a/Day41-55/01.快速上手.md b/Day41-55/41.快速上手.md similarity index 81% rename from Day41-55/01.快速上手.md rename to Day41-55/41.快速上手.md index aff16dc..76a9af0 100644 --- a/Day41-55/01.快速上手.md +++ b/Day41-55/41.快速上手.md @@ -23,7 +23,7 @@ Web开发的早期阶段,开发者需要手动编写每个页面,例如一 #### HTTP协议 -这里我们稍微费一些笔墨来谈谈上面提到的HTTP。HTTP(超文本传输协议)是构建于TCP(传输控制协议)之上应用级协议,它利用了TCP提供的可靠的传输服务实现了Web应用中的数据交换。按照维基百科上的介绍,设计HTTP最初的目的是为了提供一种发布和接收[HTML](https://zh.wikipedia.org/wiki/HTML)页面的方法,也就是说这个协议是浏览器和Web服务器之间传输的数据的载体。关于这个协议的详细信息以及目前的发展状况,大家可以阅读阮一峰老师的[《HTTP 协议入门》](http://www.ruanyifeng.com/blog/2016/08/http.html)、[《互联网协议入门》](http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html)系列以及[《图解HTTPS协议》](http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html)进行了解。下图是我于2009年9月10日凌晨4点在四川省网络通信技术重点实验室用开源协议分析工具Ethereal(抓包工具WireShark的前身)截取的访问百度首页时的HTTP请求和响应的报文(协议数据),由于Ethereal截取的是经过网络适配器的数据,因此可以清晰的看到从物理链路层到应用层的协议数据。 +这里我们稍微费一些笔墨来谈谈上面提到的HTTP。HTTP(超文本传输协议)是构建于TCP(传输控制协议)之上应用级协议,它利用了TCP提供的可靠的传输服务实现了Web应用中的数据交换。按照维基百科上的介绍,设计HTTP最初的目的是为了提供一种发布和接收[HTML](https://zh.wikipedia.org/wiki/HTML)页面的方法,也就是说这个协议是浏览器和Web服务器之间传输的数据的载体。关于这个协议的详细信息以及目前的发展状况,大家可以阅读阮一峰老师的[《HTTP 协议入门》](http://www.ruanyifeng.com/blog/2016/08/http.html)、[《互联网协议入门》](http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html)系列以及[《图解HTTPS协议》](http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html)进行了解。下图是我在四川省网络通信技术重点实验室学习和工作期间使用开源协议分析工具Ethereal(抓包工具WireShark的前身)截取的访问百度首页时的HTTP请求和响应的报文(协议数据),由于Ethereal截取的是经过网络适配器的数据,因此可以清晰的看到从物理链路层到应用层的协议数据。 HTTP请求(请求行+请求头+空行+[消息体]): @@ -33,7 +33,7 @@ HTTP响应(响应行+响应头+空行+消息体): ![](./res/http-response.png) -> 说明:但愿这两张如同泛黄的照片般的截图能帮助你了解HTTP到底是什么样子的。 +> 说明:这两张图是在2009年9月10日截取的,但愿这两张如同泛黄的照片般的截图能帮助你了解HTTP到底是什么样子的。 ### Django概述 @@ -51,6 +51,8 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 1. 检查Python环境:Django 1.11需要Python 2.7或Python 3.4以上的版本;Django 2.0需要Python 3.4以上的版本;Django 2.1需要Python 3.5以上的版本。 + > 说明:我自己平时使用macOS做开发,macOS和Linux平台使用的命令跟Windows平台有较大的区别,这一点在之前也有过类似的说明,如果使用Windows平台做开发,替换一下对应的命令即可。 + ```Shell $ python3 --version ``` @@ -75,7 +77,7 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 $ python3 -m venv venv $ source venv/bin/activate ``` - > 说明:上面使用了Python自带的venv模块完成了虚拟环境的创建,当然也可以使用其他的工具,例如:virtualenv或pipenv等。要激活虚拟环境,在Windows系统下是通过"venv/Scripts/activate"`执行批处理文件来实现。 + > 说明:上面使用了Python自带的venv模块完成了虚拟环境的创建,当然也可以使用virtualenv或pipenv这样的工具。要激活虚拟环境,在Windows环境下可以通过"venv/Scripts/activate"执行批处理文件来实现。 4. 更新包管理工具pip。 @@ -99,7 +101,7 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 或指定版本号来安装对应的Django的版本。 ```Shell - (venv)$ pip install django==1.11 + (venv)$ pip install django==2.1.8 ``` 6. 检查Django的版本。 @@ -123,7 +125,7 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 (venv)$ pip list ``` - 下图展示了Django版本和Python版本的对应关系,如果在安装时没有指定版本号,将自动选择最新的版本(在写作这段内容时,最新的版本是2.0;目前最新的版本已经更新到2.2)。 + 下图展示了Django版本和Python版本的对应关系,如果在安装时没有指定版本号,将自动选择最新的版本(在写作这段内容时,Django最新的版本是2.2)。 | Django版本 | Python版本 | | ---------- | ----------------------- | @@ -143,11 +145,13 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 执行上面的命令后看看生成的文件和文件夹,它们的作用如下所示: - - `manage.py`: 一个让你用各种方式管理 Django 项目的命令行工具。 - - `oa/__init__.py`:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。 - - `oa/settings.py`:Django 项目的配置文件。 - - `oa/urls.py`:Django 项目的 URL 声明,就像你网站的“目录”。 - - `oa/wsgi.py`:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。 + - `manage.py`: 一个让你可以管理Django项目的工具程序。 + - `oa/__init__.py`:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。 + - `oa/settings.py`:Django项目的配置文件。 + - `oa/urls.py`:Django项目的URL声明(URL映射),就像是你的网站的“目录”。 + - `oa/wsgi.py`:项目运行在WSGI兼容Web服务器上的接口文件。 + + > 说明:WSGI全称是Web服务器网关接口,维基百科上给出的解释是“为Python语言定义的[Web服务器](https://zh.wikipedia.org/wiki/%E7%B6%B2%E9%A0%81%E4%BC%BA%E6%9C%8D%E5%99%A8)和[Web应用程序](https://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F)或框架之间的一种简单而通用的接口”。 8. 启动服务器运行项目。 @@ -164,7 +168,7 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 > 说明2:用于开发的服务器在需要的情况下会对每一次的访问请求重新载入一遍Python代码。所以你不需要为了让修改的代码生效而频繁的重新启动服务器。然而,一些动作,比如添加新文件,将不会触发自动重新加载,这时你得自己手动重启服务器。 - > 说明3:可以通过`python manage.py help`命令查看可用命令列表;在启动服务器时,也可以通过`python manage.py runserver 1.2.3.4:5678`来指定绑定的IP地址和端口。 + > 说明3:可以通过`python manage.py help`命令查看可用命令列表;在启动服务器时,也可以通过`python manage.py runserver 1.2.3.4:5678`来指定将服务器运行于哪个IP地址和端口。 > 说明4:可以通过Ctrl+C来终止服务器的运行。 @@ -199,14 +203,14 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 执行上面的命令会在当前路径下创建hrs目录,其目录结构如下所示: - - `__init__.py`:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。 + - `__init__.py`:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。 - `admin.py`:可以用来注册模型,用于在Django的管理界面管理模型。 - - `apps.py`:当前应用的配置。 + - `apps.py`:当前应用的配置文件。 - `migrations`:存放与模型有关的数据库迁移信息。 - - `__init__.py`:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。 - - `models.py`:存放应用的数据模型,即实体类及其之间的关系(MVC/MVT中的M)。 + - `__init__.py`:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。 + - `models.py`:存放应用的数据模型,即实体类及其之间的关系(MVC/MTV中的M)。 - `tests.py`:包含测试应用各项功能的测试类和测试函数。 - - `views.py`:处理请求并返回响应的函数(MVC中的C,MVT中的V)。 + - `views.py`:处理请求并返回响应的函数(MVC中的C,MTV中的V)。 2. 修改应用目录下的视图文件views.py。 @@ -240,7 +244,7 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 ``` > 说明:上面使用的`path`函数是Django 2.x中新添加的函数,除此之外还可以使用支持正则表达式的URL映射函数`re_path`函数;Django 1.x中是用名为`url`函数来设定URL映射。 -4. 切换到项目目录,修改该目录下的urls.py文件,对应用中设定的URL进行合并。 +4. 修改项目目录下的urls.py文件,对应用中设定的URL进行合并。 ```Shell (venv) $ vim oa/urls.py @@ -256,6 +260,8 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 ] ``` + > 说明:上面的代码通过`include`函数将hrs应用中配置URL的文件包含到项目的URL配置中,并映射到`hrs/`路径下。 + 5. 重新运行项目,并打开浏览器中访问。 ```Shell @@ -316,9 +322,7 @@ Django诞生于2003年,它是一个在真正的应用中成长起来的项目 上面通过拼接HTML代码的方式生成动态视图的做法在实际开发中是无能接受的,这一点大家一定能够想到。为了解决这个问题,我们可以提前准备一个模板页,所谓模板页就是一个带占位符的HTML页面,当我们将程序中获得的数据替换掉页面中的占位符时,一个动态页面就产生了。 -我们可以用Django框架中template模块的Template类创建模板对象,通过模板对象的render方法实现对模板的渲染。所谓的渲染就是用数据替换掉模板页中的占位符,当然这里的渲染称为后端渲染,即在服务器端完成页面的渲染再输出到浏览器中,这种做法的主要坏处是当并发访问量较大时,服务器会承受较大的负担,所以今天有很多的Web应用都使用了前端渲染,即服务器只为浏览器提供所需的数据(通常是JSON格式),在浏览器中通过JavaScript获取这些数据并渲染到页面上,这些内容在后面为大家呈现。 - -Django框架通过shortcuts模块的快捷函数`render`简化了渲染模板的操作,具体的用法如下所示。 +我们可以用Django框架中template模块的Template类创建模板对象,通过模板对象的render方法实现对模板的渲染,在Django框架中还有一个名为`render`的便捷函数可以来完成渲染模板的操作。所谓的渲染就是用数据替换掉模板页中的占位符,当然这里的渲染称为后端渲染,即在服务器端完成页面的渲染再输出到浏览器中,这种做法的主要坏处是当并发访问量较大时,服务器会承受较大的负担,所以今天有很多的Web应用都使用了前端渲染,即服务器只提供所需的数据(通常是JSON格式),在浏览器中通过JavaScript获取这些数据并渲染到页面上,这个我们在后面的内容中会讲到。 1. 先回到manage.py文件所在的目录创建名为templates文件夹。 @@ -359,7 +363,7 @@ Django框架通过shortcuts模块的快捷函数`render`简化了渲染模板的 ``` - 在上面的模板页中我们使用了`{{ greeting }}`这样的模板占位符语法,也使用了`{% for %}`这样的模板指令,这些都是Django模板语言(DTL)的一部分。如果对此不熟悉并不要紧,我们会在后续的内容中进一步的讲解,而且我们刚才也说到了,还有更好的选择就是使用前端渲染,当然这是后话。 + 在上面的模板页中我们使用了`{{ greeting }}`这样的模板占位符语法,也使用了`{% for %}`这样的模板指令,这些都是Django模板语言(DTL)的一部分。如果对此不熟悉并不要紧,我们会在后续的内容中进一步的讲解,而且我们刚才也说到了,渲染页面还有更好的选择就是使用前端渲染,当然这是后话。 3. 回到应用目录,修改views.py文件。 @@ -381,6 +385,8 @@ Django框架通过shortcuts模块的快捷函数`render`简化了渲染模板的 return render(request, 'index.html', {'depts_list': depts_list}) ``` + > 说明:Django框架通过shortcuts模块的便捷函数`render`简化了渲染模板的操作,有了这个函数,就不用先创建`Template`对象再去调用`render`方法。。 + 到此为止,我们还没有办法让views.py中的`render`函数找到模板文件index.html,为此我们需要修改settings.py文件,配置模板文件所在的路径。 4. 切换到项目目录修改settings.py文件。 @@ -420,6 +426,5 @@ Django框架通过shortcuts模块的快捷函数`render`简化了渲染模板的 ### 总结 -至此,我们已经利用Django框架完成了一个非常小的Web应用,虽然它并没有任何的实际价值,但是可以通过这个项目对Django框架有一个感性的认识。当然,实际开发中我们可以用PyCharm来创建项目,如果使用专业版的PyCharm,可以直接创建Django项目。使用PyCharm的好处在于编写代码时可以获得代码提示、错误修复、自动导入等功能,从而提升开发效率,但是专业版的PyCharm需要按年支付相应的费用,社区版的PyCharm中并未包含对Django框架直接的支持,但是我们仍然可以使用它来创建Django项目,只是在使用上没有专业版的方便。关于PyCharm的使用,可以参考[《玩转PyCharm》](../玩转PyCharm.md)一文。 +至此,我们已经利用Django框架完成了一个非常小的Web应用,虽然它并没有任何的实际价值,但是可以通过这个项目对Django框架有一个感性的认识。当然,实际开发中我们可以用PyCharm来创建项目,如果使用专业版的PyCharm,可以直接创建Django项目。使用PyCharm的好处在于编写代码时可以获得代码提示、错误修复、自动导入等功能,从而提升开发效率,但是专业版的PyCharm需要按年支付相应的费用,社区版的PyCharm中并未包含对Django框架直接的支持,但是我们仍然可以使用它来创建Django项目,只是在使用上没有专业版的方便。关于PyCharm的使用,可以参考[《玩转PyCharm》](../玩转PyCharm.md)一文。此外,Django最好的学习资料肯定是它的[官方文档](https://docs.djangoproject.com/zh-hans/2.0/),当然图灵社区出版的[《Django基础教程》](http://www.ituring.com.cn/book/2630)也是非常适合初学者的入门级读物。 -此外,学习Django最好的资料肯定是它的[官方文档](https://docs.djangoproject.com/zh-hans/2.0/),除此之外图灵社区出版的[《Django基础教程》](http://www.ituring.com.cn/book/2630)也是非常适合初学者的读物。 \ No newline at end of file diff --git a/Day41-55/02.深入模型.md b/Day41-55/42.深入模型.md similarity index 89% rename from Day41-55/02.深入模型.md rename to Day41-55/42.深入模型.md index 5772496..3ba9035 100644 --- a/Day41-55/02.深入模型.md +++ b/Day41-55/42.深入模型.md @@ -1,6 +1,6 @@ ## 深入模型 -在上一个章节中,我们提到了Django是基于MVC架构的Web框架,MVC架构追求的是“模型”和“视图”的解耦合。所谓“模型”说得更直白一些就是数据,所以通常也被称作“数据模型”。在实际的项目中,数据模型通常通过数据库实现持久化操作,而关系型数据库在很长一段时间都是持久化的首选方案,下面我们以MySQL为例来说明如何使用关系型数据库来实现持久化操作。 +在上一个章节中,我们提到了Django是基于MVC架构的Web框架,MVC架构追求的是“模型”和“视图”的解耦合。所谓“模型”说得更直白一些就是数据(的表示),所以通常也被称作“数据模型”。在实际的项目中,数据模型通常通过数据库实现持久化操作,而关系型数据库在过去和当下都是持久化的首选方案,下面我们以MySQL为例来说明如何使用关系型数据库来实现持久化操作。 ### 配置关系型数据库MySQL @@ -9,7 +9,7 @@ 1. 修改项目的settings.py文件,首先将我们之前创建的应用hrs添加已安装的项目中,然后配置MySQL作为持久化方案。 ```Shell - (venv)$ cd oa/settings.py + (venv)$ vim oa/settings.py ``` ```Python @@ -29,7 +29,7 @@ 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'oa', - 'HOST': 'localhost', + 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123456', @@ -50,13 +50,13 @@ NAME属性代表数据库的名称,如果使用SQLite它对应着一个文件,在这种情况下NAME的属性值应该是一个绝对路径;使用其他关系型数据库,则要配置对应的HOST(主机)、PORT(端口)、USER(用户名)、PASSWORD(口令)等属性。 -2. 安装MySQL客户端工具,Python 3中使用PyMySQL,Python 2中用MySQLdb。 +2. 安装Python操作MySQL的依赖库,Python 3中通常使用PyMySQL,Python 2中通常用MySQLdb。 ```Shell (venv)$ pip install pymysql ``` - 如果使用Python 3需要修改**项目**的`__init__.py`文件并加入如下所示的代码,这段代码的作用是将PyMySQL视为MySQLdb来使用,从而避免Django找不到连接MySQL的客户端工具而询问你:“Did you install mysqlclient? ”(你安装了mysqlclient吗?)。 + 如果使用Python 3需要修改**项目目录**下的`__init__.py`文件并加入如下所示的代码,这段代码的作用是将PyMySQL视为MySQLdb来使用,从而避免Django找不到连接MySQL的客户端工具而询问你:“Did you install mysqlclient? ”(你安装了mysqlclient吗?)。 ```Python import pymysql @@ -64,15 +64,15 @@ pymysql.install_as_MySQLdb() ``` -3. 运行manage.py并指定migrate参数实现数据库迁移,为应用程序创建对应的数据表,当然在此之前需要**先启动MySQL数据库服务器并创建名为oa的数据库**,在MySQL中创建数据库的语句如下所示。 +3. 如果之前没有为应用程序创建数据库,那么现在是时候创建名为oa的数据库了。在MySQL中创建数据库的SQL语句如下所示: ```SQL - drop database if exists oa; create database oa default charset utf8; ``` +4. Django框架本身有自带的数据模型,我们稍后会用到这些模型,为此我们先做一次迁移操作。所谓迁移,就是根据模型自动生成关系数据库中的二维表,命令如下所示: + ```Shell - (venv)$ cd .. (venv)$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions @@ -93,7 +93,7 @@ Applying sessions.0001_initial... OK ``` -4. 可以看到,Django帮助我们创建了10张表,这些都是使用Django框架需要的东西,稍后我们就会用到这些表。除此之外,我们还应该为我们自己的应用创建数据模型。如果要在hrs应用中实现对部门和员工的管理,我们可以创建如下所示的数据模型。 +5. 接下来,我们为自己的应用创建数据模型。如果要在hrs应用中实现对部门和员工的管理,我们可以先创建部门和员工数据模型,代码如下所示。 ```Shell (venv)$ vim hrs/models.py @@ -120,11 +120,11 @@ no = models.IntegerField(primary_key=True, db_column='eno', verbose_name='员工编号') name = models.CharField(max_length=20, db_column='ename', verbose_name='员工姓名') job = models.CharField(max_length=10, verbose_name='职位') - # 自参照完整性多对一外键关联 - mgr = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, verbose_name='主管编号') + # 多对一外键关联(自参照) + mgr = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, verbose_name='主管') sal = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='月薪') comm = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, verbose_name='补贴') - # 多对一外键关联 + # 多对一外键关联(参照部门模型) dept = models.ForeignKey(Dept, db_column='dno', on_delete=models.PROTECT, verbose_name='所在部门') class Meta: @@ -132,7 +132,7 @@ ``` > 说明:上面定义模型时使用了字段类及其属性,其中IntegerField对应数据库中的integer类型,CharField对应数据库的varchar类型,DecimalField对应数据库的decimal类型,ForeignKey用来建立多对一外键关联。字段属性primary_key用于设置主键,max_length用来设置字段的最大长度,db_column用来设置数据库中与字段对应的列,verbose_name则设置了Django后台管理系统中该字段显示的名称。如果对这些东西感到很困惑也不要紧,文末提供了字段类、字段属性、元数据选项等设置的相关说明,不清楚的读者可以稍后查看对应的参考指南。 -5. 通过模型创建数据表。 +6. 再次执行迁移操作,先通过模型生成迁移文件,再执行迁移创建二维表。 ```Shell (venv)$ python manage.py makemigrations hrs @@ -151,7 +151,9 @@ ![](./res/er-graph.png) -### 在后台管理模型 +### 利用Django后台管理模型 + +Django框架有自带的后台管理系统来实现对模型的管理。虽然实际应用中,这个后台可能并不能满足我们的需求,但是在学习Django框架时,我们暂时可以利用Django自带的后台管理系统来管理我们的模型,同时也可以了解一个项目的后台管理系统到底需要哪些功能。 1. 创建超级管理员账号。 @@ -201,23 +203,23 @@ 4. 对模型进行CRUD操作。 - 可以在管理员平台对模型进行C(新增)R(查看)U(更新)D(删除)操作,如下图所示。 + 可以在管理员平台对模型进行C(新增)、R(查看)、U(更新)、D(删除)操作,如下图所示。 - 添加新的部门。 + - 添加新的部门。 ![](./res/admin-model-create.png) - 查看所有部门。 + - 查看所有部门。 ![](./res/admin-model-read.png) - 更新和删除部门。 + - 更新和删除部门。 ![](./res/admin-model-delete-and-update.png) 5. 注册模型管理类。 - 再次修改admin.py文件,通过注册模型管理类,可以在后台管理系统中更好的管理模型。 + 可能大家已经注意到了,刚才在后台查看部门信息的时候,显示的部门信息并不直观,为此我们再修改admin.py文件,通过注册模型管理类,可以在后台管理系统中更好的管理模型。 ```Python from django.contrib import admin @@ -265,19 +267,12 @@ class Emp(models.Model): """员工类""" - # 此处省略上面的代码 - - mgr = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, verbose_name='直接主管') - - # 此处省略下面的代码 - # 此处省略上面的代码 def __str__(self): return self.name # 此处省略下面的代码 - ``` 修改代码后刷新查看Emp模型的页面,效果如下图所示。 @@ -301,6 +296,7 @@ Type "help", "copyright", "credits" or "license" for more information. ```Shell >>> from hrs.models import Dept, Emp +>>> >>> dept = Dept(40, '研发2部', '深圳') >>> dept.save() ``` @@ -314,14 +310,14 @@ Type "help", "copyright", "credits" or "license" for more information. #### 查询 -查询所有对象。 +1. 查询所有对象。 ```Shell >>> Dept.objects.all() , , , ]> ``` -过滤数据。 +2. 过滤数据。 ```Shell >>> Dept.objects.filter(name='研发3部') # 查询部门名称为“研发3部”的部门 @@ -337,7 +333,7 @@ Type "help", "copyright", "credits" or "license" for more information. , , ]> ``` -查询单个对象。 +3. 查询单个对象。 ```Shell >>> Dept.objects.get(pk=10) @@ -353,7 +349,7 @@ Type "help", "copyright", "credits" or "license" for more information. ``` -排序数据。 +4. 排序数据。 ```Shell >>> Dept.objects.order_by('no') # 查询所有部门按部门编号升序排列 @@ -363,7 +359,7 @@ Type "help", "copyright", "credits" or "license" for more information. , , , ]> ``` -切片数据。 +5. 数据切片(分页查询)。 ```Shell >>> Dept.objects.order_by('no')[0:2] # 按部门编号排序查询1~2部门 @@ -373,7 +369,7 @@ Type "help", "copyright", "credits" or "license" for more information. , ]> ``` -高级查询。 +6. 高级查询。 ```Shell >>> Emp.objects.filter(dept__no=10) # 根据部门编号查询该部门的员工 diff --git a/Day41-55/43.静态资源和Ajax请求.md b/Day41-55/43.静态资源和Ajax请求.md new file mode 100644 index 0000000..18f5df1 --- /dev/null +++ b/Day41-55/43.静态资源和Ajax请求.md @@ -0,0 +1,312 @@ +## 静态资源和Ajax请求 + +基于前面两个章节讲解的知识,我们已经可以使用Django框架来完成Web应用的开发了。接下来我们就尝试实现一个投票应用,具体的需求是用户进入应用首先查看到“学科介绍”页面,该页面显示了一个学校所开设的所有学科;通过点击某个学科,可以进入“老师介绍”页面,该页面展示了该学科所有老师的详细情况,可以在该页面上给老师点击“好评”或“差评”;如果用户没有登录,在投票时会先跳转到“登录页”要求用户登录,登录成功才能投票;对于未注册的用户,可以在“登录页”点击“新用户注册”进入“注册页”完成用户注册操作,注册成功后会跳转到“登录页”,注册失败会获得相应的提示信息。 + +### 准备工作 + +由于之前已经详细的讲解了如何创建Django项目以及项目的相关配置,因此我们略过这部分内容,唯一需要说明的是,从上面对投票应用需求的描述中我们可以分析出三个业务实体:学科、老师和用户。学科和老师之间通常是一对多关联关系(一个学科有多个老师,一个老师通常只属于一个学科),用户因为要给老师投票,所以跟老师之间是多对多关联关系(一个用户可以给多个老师投票,一个老师也可以收到多个用户的投票)。首先修改应用下的models.py文件来定义数据模型,先给出学科和老师的模型。 + +```Python +from django.db import models + + +class Subject(models.Model): + """学科""" + no = models.IntegerField(primary_key=True, verbose_name='编号') + name = models.CharField(max_length=20, verbose_name='名称') + intro = models.CharField(max_length=511, default='', verbose_name='介绍') + create_date = models.DateField(null=True, verbose_name='成立日期') + is_hot = models.BooleanField(default=False, verbose_name='是否热门') + + def __str__(self): + return self.name + + class Meta: + db_table = 'tb_subject' + verbose_name = '学科' + verbose_name_plural = '学科' + + +class Teacher(models.Model): + """老师""" + no = models.AutoField(primary_key=True, verbose_name='编号') + name = models.CharField(max_length=20, verbose_name='姓名') + detail = models.CharField(max_length=1023, default='', blank=True, verbose_name='详情') + photo = models.CharField(max_length=1023, default='', verbose_name='照片') + good_count = models.IntegerField(default=0, verbose_name='好评数') + bad_count = models.IntegerField(default=0, verbose_name='差评数') + subject = models.ForeignKey(to=Subject, on_delete=models.PROTECT, db_column='sno', verbose_name='所属学科') + + class Meta: + db_table = 'tb_teacher' + verbose_name = '老师' + verbose_name_plural = '老师' +``` + +模型定义完成后,可以通过“生成迁移”和“执行迁移”来完成关系型数据库中二维表的创建,当然这需要提前启动数据库服务器并创建好对应的数据库,同时我们在项目中已经安装了PyMySQL而且完成了相应的配置,这些内容此处不再赘述。 + +```Shell +(venv)$ python manage.py makemigrations vote +... +(venv)$ python manage.py migrate +... +``` + +> 注意:为了给vote应用生成迁移文件,需要修改Django项目settings.py文件,在INSTALLED_APPS中添加vote应用。 + +完成模型迁移之后,我们可以直接使用Django提供的后台管理来添加学科和老师信息,这需要先注册模型类和模型管理类。 + +```SQL +from django.contrib import admin + +from poll2.forms import UserForm +from poll2.models import Subject, Teacher + + +class SubjectAdmin(admin.ModelAdmin): + list_display = ('no', 'name', 'create_date', 'is_hot') + ordering = ('no', ) + + +class TeacherAdmin(admin.ModelAdmin): + list_display = ('no', 'name', 'detail', 'good_count', 'bad_count', 'subject') + ordering = ('subject', 'no') + + +admin.site.register(Subject, SubjectAdmin) +admin.site.register(Teacher, TeacherAdmin) +``` + +接下来,我们就可以修改views.py文件,通过编写视图函数先实现“学科介绍”页面。 + +```Python +def show_subjects(request): + """查看所有学科""" + subjects = Subject.objects.all() + return render(request, 'subject.html', {'subjects': subjects}) +``` + +至此,我们还需要一个模板页,模板的配置以及模板页中模板语言的用法在之前已经进行过简要的介绍,如果不熟悉可以看看下面的代码,相信这并不是一件困难的事情。 + +```HTML + + + + + 所有学科信息 + + + +

所有学科

+
+ {% for subject in subjects %} +
+

+ {{ subject.name }} + {% if subject.is_hot %} + + {% endif %} +

+

{{ subject.intro }}

+
+ {% endfor %} + + +``` + +在上面的模板中,我们为每个学科添加了一个超链接,点击超链接可以查看该学科的讲师信息,为此需要再编写一个视图函数来处理查看指定学科老师信息。 + +```Python +def show_teachers(request): + """显示指定学科的老师""" + try: + sno = int(request.GET['sno']) + subject = Subject.objects.get(no=sno) + teachers = subject.teacher_set.all() + return render(request, 'teachers.html', {'subject': subject, 'teachers': teachers}) + except (KeyError, ValueError, Subject.DoesNotExist): + return redirect('/') +``` + +显示老师信息的模板页。 + +```HTML + +{% load static %} + + + + 老师 + + + +

{{ subject.name }}学科老师信息

+
+ {% if teachers %} + {% for teacher in teachers %} +
+
+ +
+
+

{{ teacher.name }}

+

{{ teacher.detail }}

+

+ 好评 + ({{ teacher.good_count }}) + 差评 + ({{ teacher.bad_count }}) +

+
+
+ {% endfor %} + {% else %} +

暂时没有该学科的老师信息

+ {% endif %} +

+ 返回首页 +

+ + +``` + +### 加载静态资源 + +在上面的模板页面中,我们使用了``标签来加载老师的照片,其中使用了引用静态资源的模板指令`{% static %}`,要使用该指令,首先要使用`{% load static %}`指令来加载静态资源,我们将这段代码放在了页码开始的位置。在上面的项目中,我们将静态资源置于名为static的文件夹中,在该文件夹下又创建了三个文件夹:css、js和images,分别用来保存外部层叠样式表、外部JavaScript文件和图片资源。为了能够找到保存静态资源的文件夹,我们还需要修改Django项目的配置文件settings.py,如下所示: + +```Python +# 此处省略上面的代码 + +STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ] +STATIC_URL = '/static/' + +# 此处省略下面的代码 +``` + +接下来修改urls.py文件,配置用户请求的URL和视图函数的对应关系。 + +```Python +from django.contrib import admin +from django.urls import path + +from vote import views + +urlpatterns = [ + path('', views.show_subjects), + path('teachers/', views.show_teachers), + path('admin/', admin.site.urls), +] +``` + +启动服务器运行项目,进入首页查看学科信息。 + +![](./res/show_subjects.png) + +点击学科查看老师信息。 + +![](./res/show_teachers.png) + +### Ajax请求 + +接下来就可以实现“好评”和“差评”的功能了,很明显如果能够在不刷新页面的情况下实现这两个功能会带来更好的用户体验,因此我们考虑使用[Ajax](https://zh.wikipedia.org/wiki/AJAX)技术来实现“好评”和“差评”,Ajax技术我们在Web前端部分已经介绍过了,此处不再赘述。 + +首先修改项目的urls.py文件,为“好评”和“差评”功能映射对应的URL。 + +```Python +from django.contrib import admin +from django.urls import path + +from vote import views + +urlpatterns = [ + path('', views.show_subjects), + path('teachers/', views.show_teachers), + path('praise/', views.prise_or_criticize), + path('criticize/', views.prise_or_criticize), + path('admin/', admin.site.urls), +] +``` + +设计视图函数`praise_or_criticize`来支持“好评”和“差评”功能,该视图函数通过Django封装的JsonResponse类将字典序列化成JSON字符串作为返回给浏览器的响应内容。 + +```Python +def praise_or_criticize(request): + """好评""" + try: + tno = int(request.GET['tno']) + teacher = Teacher.objects.get(no=tno) + if request.path.startswith('/praise'): + teacher.good_count += 1 + else: + teacher.bad_count += 1 + teacher.save() + data = {'code': 200, 'hint': '操作成功'} + except (KeyError, ValueError, Teacher.DoseNotExist): + data = {'code': 404, 'hint': '操作失败'} + return JsonResponse(data) +``` + +修改显示老师信息的模板页,引入jQuery库来实现事件处理、Ajax请求和DOM操作。 + +```HTML + +{% load static %} + + + + 老师 + + + +

{{ subject.name }}学科老师信息

+
+ {% if teachers %} + {% for teacher in teachers %} +
+
+ +
+
+

{{ teacher.name }}

+

{{ teacher.detail }}

+

+ 好评 + ({{ teacher.good_count }}) +    + 差评 + ({{ teacher.bad_count }}) +

+
+
+ {% endfor %} + {% else %} +

暂时没有该学科的老师信息

+ {% endif %} +

+ 返回首页 +

+ + + + +``` + +### 小结 + +到此为止,这个投票项目的核心功能已然完成,在下面的章节中我们会要求用户必须登录才能投票,没有账号的用户可以通过注册功能注册一个账号。 \ No newline at end of file diff --git a/Day41-55/04.表单的应用.md b/Day41-55/44.表单的应用.md similarity index 82% rename from Day41-55/04.表单的应用.md rename to Day41-55/44.表单的应用.md index e2b6de1..a9db6cc 100644 --- a/Day41-55/04.表单的应用.md +++ b/Day41-55/44.表单的应用.md @@ -20,8 +20,10 @@ class User(models.Model): 通过生成迁移和执行迁移操作,在数据库中创建对应的用户表。 ```Shell -python manage.py makemigrations 应用名 -python manage.py migrate +(venv)$ python manage.py makemigrations vote +... +(venv)$ python manage.py migrate +... ``` 定制一个非常简单的注册模板页面。 @@ -62,13 +64,13 @@ python manage.py migrate ``` -注意,在上面的表单中,我们使用了模板指令`{% csrf_token %}`为表单添加一个隐藏域(type属性值为hidden的input标签),它的作用是在表单中生成一个随机令牌(token)来防范[跨站请求伪造]()(通常简称为CSRF),这也是Django在提交表单时的硬性要求,除非我们专门设置了免除CSRF令牌。下图是一个关于CSRF简单生动的例子,它来自于[维基百科]()。 +注意,在上面的表单中,我们使用了模板指令`{% csrf_token %}`为表单添加一个隐藏域(type属性值为hidden的input标签),它的作用是在表单中生成一个随机令牌(token)来防范[跨站请求伪造]()(通常简称为CSRF),这也是Django在提交表单时的硬性要求,除非我们设置了免除CSRF令牌。下图是一个关于CSRF简单生动的例子,它来自于[维基百科]()。 ![](./res/CSRF.png) 用户在提交注册表单时,我们还需要对用户的输入进行验证,例如我们的网站要求用户名必须由字母、数字、下划线构成且长度在4-20个字符之间,密码的长度为8-20个字符,确认密码必须跟密码保持一致。这些验证操作首先可以通过浏览器中的JavaScript代码来完成,但是即便如此,在服务器端仍然要对用户输入再次进行验证来避免将无效的数据库交给数据库,因为用户可能会禁用浏览器的JavaScript功能,也有可能绕过浏览器的输入检查将注册数据提交给服务器,所以服务器端的用户输入检查仍然是必要的。 -我们可以利用Django框架封装的表单功能来对用户输入的有效性进行检查,虽然Django封装的表单还能帮助我们定制出页面上的表单元素,但是这显然是一种灵活性很差的设计,这样的功能在实际开发中基本不考虑,所以表单主要的作用就在于数据验证,具体的做法如下所示。 +我们可以利用Django框架封装的表单功能来对用户输入的有效性进行检查,虽然Django封装的表单还能帮助我们定制出页面上的表单元素,但这显然是一种灵活性很差的设计,这样的功能在实际开发中基本不考虑,所以表单主要的作用就在于数据验证,具体的做法如下所示。 ```Python USERNAME_PATTERN = re.compile(r'\w{4,20}') @@ -99,7 +101,7 @@ class RegisterForm(forms.ModelForm): exclude = ('no', 'regdate') ``` -上面,我们定义了一个与User模型绑定的表单(继承自ModelForm),我们排除了用户编号(no)和注册日期(regdate)这两个属性,并添加了一个repassword属性用来接收从用户表单传给服务器的确认密码。我们在定义User模型时已经对用户名的最大长度进行了限制,上面我们又对确认密码的最小和最大长度进行了限制,但是这些都不足以完成我们对用户输入的验证。上面以`clean_`打头的方法就是我们自定义的验证规则。很明显,`clean_username`是对用户名的检查,而`clean_password`是对密码的检查。由于数据库二维表中不应该保存密码的原文,所以对密码做了一个简单的MD5摘要处理(实际开发中这样处理还不太够,因为有被实施反向查表法(利用彩虹表反向查询)破解用户密码的风险)。生成MD5摘要的代码如下所示。 +上面,我们定义了一个与User模型绑定的表单(继承自ModelForm),我们排除了用户编号(no)和注册日期(regdate)这两个属性,并添加了一个repassword属性用来接收从用户表单传给服务器的确认密码。我们在定义User模型时已经对用户名的最大长度进行了限制,上面我们又对确认密码的最小和最大长度进行了限制,但是这些都不足以完成我们对用户输入的验证。上面以`clean_`打头的方法就是我们自定义的验证规则。很明显,`clean_username`是对用户名的检查,而`clean_password`是对密码的检查。由于数据库二维表中不应该保存密码的原文,所以对密码做了一个简单的MD5摘要处理,实际开发中如果只做出这样的处理还不太够,因为即便使用了摘要,仍然有利用彩虹表反向查询破解用户密码的风险,如何做得更好我们会在后续的内容中讲到。为字符串生成MD5摘要的代码如下所示。 ```Python def to_md5_hex(message): @@ -131,18 +133,13 @@ from django.urls import path from vote import views urlpatterns = [ - path('', views.show_subjects), - path('captcha/', views.get_captcha), - path('teachers/', views.show_teachers), - path('prise/', views.praise_or_criticize), - path('criticize/', views.praise_or_criticize), - path('login/', views.login, name='login'), + # 此处省略上面的代码 path('register/', views.register, name='register'), - path('admin/', admin.site.urls), + # 此处省略下面的代码 ] ``` -> 说明:上面的代码中我们把待会要用到的登录和验证码的URL也顺便做了映射。`path`函数还可以通过name参数给URL绑定一个逆向解析的名字,也就是说,如果需要可以从后面给的名字逆向得到对应的URL。 +> 说明:`path`函数可以通过name参数给URL绑定一个逆向解析的名字,也就是说,如果需要可以从后面给的名字逆向解析出对应的URL。 我们再来定制一个非常简单的登录页。 @@ -159,7 +156,6 @@ urlpatterns = [

{{ hint }}

- {% csrf_token %}
@@ -184,9 +180,9 @@ urlpatterns = [ ``` -上面的登录页中,我们要求用户提供验证码,验证码全称是**全自动区分计算机和人类的公开图灵测试**,它是一种用来区分系统的使用者是计算机还是人类的程序。简单的说就是程序出一个只有人类能够回答的问题,由系统使用者来解答,由于计算机理论上无法解答程序提出的问题,所以回答出问题的用户就可以被认为是人类。大多数的网站都使用了不同类型的验证码技术来防范计算机自动注册用户或模拟用户登录(暴力破解用户密码),因为验证码具有一次消费性,而没有通过图灵测试的计算机是不能够注册或登录的。 +上面的登录页中,我们要求用户提供验证码,验证码全称是**全自动区分计算机和人类的公开图灵测试**,它是一种用来区分系统的使用者是计算机还是人类的程序。简单的说就是程序出一个只有人类能够回答的问题,由系统使用者来解答,由于计算机理论上无法解答程序提出的问题,所以回答出问题的用户就可以被认为是人类。大多数的网站都使用了不同类型的验证码技术来防范用程序自动注册用户或模拟用户登录(暴力破解用户密码),因为验证码具有一次消费性,而没有通过图灵测试的程序是不能够完成注册或登录的。 -在Python程序中生成验证码并不算特别复杂,但需要三方库pillow的支持(PIL的分支)。我们可以借鉴现有的方法用Python稍作封装即可。下面的代码已经实现了生成验证码图片并得到图片二进制数据的功能。 +在Python程序中生成验证码并不算特别复杂,但需要三方库Pillow的支持(PIL的分支),因为要对验证码图片进行旋转、扭曲、拉伸以及加入干扰信息来防范那些用OCR(光学文字识别)破解验证码的程序。下面的代码封装了生成验证码图片的功能,大家可以直接用这些代码来生成图片验证码,不要“重复发明轮子”。 ```Python """ @@ -234,15 +230,16 @@ class Captcha(object): self._image = None self._fonts = fonts if fonts else \ [os.path.join(os.path.dirname(__file__), 'fonts', font) - for font in ['Action.ttf', 'Silom.ttf', 'Verdana.ttf']] + for font in ['ArialRB.ttf', 'ArialNI.ttf', 'Georgia.ttf', 'Kongxin.ttf']] self._color = color if color else random_color(0, 200, random.randint(220, 255)) self._width, self._height = width, height @classmethod def instance(cls, width=200, height=75): - if not hasattr(Captcha, "_instance"): - cls._instance = cls(width, height) - return cls._instance + prop_name = f'_instance_{width}_{height}' + if not hasattr(cls, prop_name): + setattr(cls, prop_name, cls(width, height)) + return getattr(cls, prop_name) def background(self): """绘制背景""" @@ -266,7 +263,7 @@ class Captcha(object): for ps in zip(*path))) Draw(self._image).line(points, fill=color if color else self._color, width=width) - def noise(self, number=62, level=2, color=None): + def noise(self, number=50, level=2, color=None): """绘制扰码""" width, height = self._image.size dx, dy = width / 10, height / 10 @@ -351,7 +348,9 @@ class Captcha(object): self.background() self.text(captcha_text, self._fonts, drawings=['warp', 'rotate', 'offset']) - self.curve(), self.noise(), self.smooth() + self.curve() + self.noise() + self.smooth() image_bytes = BytesIO() self._image.save(image_bytes, format=fmt) return image_bytes.getvalue() @@ -383,6 +382,8 @@ def random_color(start=0, end=255, opacity=255): return red, green, blue, opacity ``` +> 说明:上面的代码在生成验证码图片时用到了三种字体文件,使用上面的代码时需要添加字体文件到应用目录下的fonts目录中。 + 下面的视图函数用来生成验证码并通过HttpResponse对象输出到用户浏览器中。 ```Python @@ -443,4 +444,49 @@ def login(request): return render(request, 'login.html', {'hint': hint}) ``` -需要指出,上面我们设定用户登录成功时直接返回首页,而且在用户登录时并没有验证用户输入的验证码是否正确,这些我们留到下一个单元再为大家讲解。 \ No newline at end of file +映射URL。 + +```Python +from django.contrib import admin +from django.urls import path + +from vote import views + +urlpatterns = [ + # 此处省略上面的代码 + path('login/', views.login, name='login'), + # 此处省略下面的代码 +] +``` + +需要指出,上面我们设定用户登录成功时直接返回首页,而且在用户登录时并没有验证用户输入的验证码是否正确,这些我们留到下一个单元再为大家讲解。另外,如果要在Django自带的管理后台中进行表单验证,可以在admin.py的模型管理类中指定`form`属性为自定义的表单即可,例如: + +```Python +class UserForm(forms.ModelForm): + password = forms.CharField(min_length=8, max_length=20, + widget=forms.PasswordInput, label='密码') + + def clean_username(self): + username = self.cleaned_data['username'] + if not USERNAME_PATTERN.fullmatch(username): + raise ValidationError('用户名由字母、数字和下划线构成且长度为4-20个字符') + return username + + def clean_password(self): + password = self.cleaned_data['password'] + return to_md5_hex(self.cleaned_data['password']) + + class Meta: + model = User + exclude = ('no', ) + + +class UserAdmin(admin.ModelAdmin): + list_display = ('no', 'username', 'password', 'email', 'tel') + ordering = ('no', ) + form = UserForm + list_per_page = 10 + + +admin.site.register(User, UserAdmin) +``` \ No newline at end of file diff --git a/Day41-55/45.Cookie和Session.md b/Day41-55/45.Cookie和Session.md new file mode 100644 index 0000000..565d878 --- /dev/null +++ b/Day41-55/45.Cookie和Session.md @@ -0,0 +1,185 @@ +## Cookie和Session + +### 实现用户跟踪 + +如今,一个网站如果不通过某种方式记住你是谁以及你之前在网站的活动情况,失去的就是网站的可用性和便利性,继而很有可能导致网站用户的流式,所以记住一个用户(更专业的说法叫**用户跟踪**)对绝大多数Web应用来说都是必需的功能。 + +在服务器端,我们想记住一个用户最简单的办法就是创建一个对象,通过这个对象就可以把用户相关的信息都保存起来,这个对象就是我们常说的session(用户会话对象)。那么问题来了,HTTP本身是一个无连接(每次请求和响应的过程中,服务器一旦完成对客户端请求的响应之后就断开连接)、无状态(客户端再次发起对服务器的请求时,服务器无法得知这个客户端之前的任何信息)的协议,即便服务器通过session对象保留了用户数据,还得通过某种方式来确定当前的请求与之前保存过的哪一个session是有关联的。相信很多人都能想到,我们可以给每个session对象分配一个全局唯一的标识符来识别session对象,我们姑且称之为sessionid,每次客户端发起请求时,只要携带上这个sessionid,就有办法找到与之对应的session对象,从而实现在两次请求之间记住该用户的信息,也就是我们之前说的用户跟踪。 + +要让客户端记住并在每次请求时带上sessionid又有以下几种做法: + +1. URL重写。所谓URL重写就是在URL中携带sessionid,例如:`http://www.example.com/index.html?sessionid=123456`,服务器通过获取sessionid参数的值来取到与之对应的session对象。 + +2. 隐藏域(隐式表单域)。在提交表单的时候,可以通过在表单中设置隐藏域向服务器发送额外的数据。例如:``。 + +3. 本地存储。现在的浏览器都支持多种本地存储方案,包括:cookie、localStorage、sessionStorage、IndexedDB等。在这些方案中,cookie是历史最为悠久也是被诟病得最多的一种方案,也是我们接下来首先为大家讲解的一种方案。简单的说,cookie是一种以键值对方式保存在浏览器临时文件中的数据,每次请求时,请求头中会携带本站点的cookie到服务器,那么只要将sessionid写入cookie,下次请求时服务器只要读取请求头中的cookie就能够获得这个sessionid,如下图所示。 + + ![](./res/sessionid_from_cookie.png) + + 在HTML5时代要,除了cookie,还可以使用新的本地存储API来保存数据,就是刚才提到的localStorage、sessionStorage、IndexedDB等技术,如下图所示。 + + ![](./res/cookie_xstorage_indexeddb.png) + +### Django框架对session的支持 + +在创建Django项目时,默认的配置文件`settings.py`文件中已经激活了一个名为`SessionMiddleware`的中间件(关于中间件的知识我们在下一个章节做详细的讲解,这里只需要知道它的存在即可),因为这个中间件的存在,我们可以直接通过请求对象的`session`属性来操作会话对象。`session`属性是一个像字典一样可以读写数据的容器对象,因此我们可以使用“键值对”的方式来保留用户数据。与此同时,`SessionMiddleware`中间件还封装了对cookie的操作,在cookie中保存了sessionid,就如同我们之前描述的那样。 + +在默认情况下,Django将session的数据序列化后保存在关系型数据库中,在Django 1.6以后的版本中,默认的序列化数据的方式是JSON序列化,而在此之前一直使用Pickle序列化。JSON序列化和Pickle序列化的差别在于前者将对象序列化为字符串(字符形式),而后者将对象序列化为字节串(二进制形式),因为安全方面的原因,JSON序列化成为了目前Django框架默认序列化数据的方式,这就要求在我们保存在session中的数据必须是能够JSON序列化的,否则就会引发异常。还有一点需要说明的是,使用关系型数据库保存session中的数据在大多数时候并不是最好的选择,因为数据库可能会承受巨大的压力而成为系统性能的瓶颈,在后面的章节中我们会告诉大家如何将session的数据保存到缓存服务中。 + +我们继续完善之前的投票应用,前一个章节中我们实现了用户的登录和注册,下面我们首先完善登录时对验证码的检查。 + +```Python +def get_captcha(request): + """验证码""" + captcha_text = random_captcha_text() + request.session['captcha'] = captcha_text + image_data = Captcha.instance().generate(captcha_text) + return HttpResponse(image_data, content_type='image/png') +``` + +注意上面代码中的第4行,我们将随机生成的验证码字符串保存到session中,稍后用户登录时,我们要将保存在session中的验证码字符串和用户输入的验证码字符串进行比对,如果用户输入了正确的验证码才能够执行后续的登录流程,代码如下所示。 + +```Python +def login(request: HttpRequest): + """登录""" + hint = '' + if request.method == 'POST': + form = LoginForm(request.POST) + if form.is_valid(): + # 对验证码的正确性进行验证 + captcha_from_user = form.cleaned_data['captcha'] + captcha_from_sess = request.session.get('captcha', '') + if captcha_from_sess.lower() != captcha_from_user.lower(): + hint = '请输入正确的验证码' + else: + username = form.cleaned_data['username'] + password = form.cleaned_data['password'] + user = User.objects.filter(username=username, password=password).first() + if user: + # 登录成功后将用户编号和用户名保存在session中 + request.session['userid'] = user.no + request.session['username'] = user.username + return redirect('/') + else: + hint = '用户名或密码错误' + else: + hint = '请输入有效的登录信息' + return render(request, 'login.html', {'hint': hint}) +``` + +上面的代码中,我们设定了登录成功后会在session中保存用户的编号(`userid`)和用户名(`username`),页面会重定向到首页。接下来我们可以稍微对首页的代码进行调整,在页面的右上角显示出登录用户的用户名。我们将这段代码单独写成了一个名为header.html的HTML文件,首页中可以通过在``标签中添加`{% include 'header.html' %}`来包含这个页面,代码如下所示。 + +```HTML +
+ {% if request.session.userid %} + {{ request.session.username }} + 注销 + {% else %} + 登录   + {% endif %} + 注册 +
+``` + +如果用户没有登录,页面会显示登录和注册的超链接;而用户登录成功后,页面上会显示用户名和注销的链接,注销链接对应的视图函数如下所示,URL的映射与之前讲过的类似,不再赘述。 + +```Python +def logout(request): + """注销""" + request.session.flush() + return redirect('/') +``` + +上面的代码通过session对象`flush`方法来销毁session,一方面清除了服务器上session对象保存的用户数据,一方面将保存在浏览器cookie中的sessionid删除掉,稍后我们会对如何读写cookie的操作加以说明。 + +我们可以通过项目使用的数据库中名为`django_session` 的表来找到所有的session,该表的结构如下所示: + +| session_key | session_data | expire_date | +| -------------------------------- | ------------------------------- | -------------------------- | +| c9g2gt5cxo0k2evykgpejhic5ae7bfpl | MmI4YzViYjJhOGMyMDJkY2M5Yzg3... | 2019-05-25 23:16:13.898522 | + +其中,第1列就是浏览器cookie中保存的sessionid;第2列是经过BASE64编码后的session中的数据,如果使用Python的`base64`对其进行解码,解码的过程和结果如下所示。 + +```Python +>>> import base64 +>>> base64.b64decode('MmI4YzViYjJhOGMyMDJkY2M5Yzg3ZWIyZGViZmUzYmYxNzdlNDdmZjp7ImNhcHRjaGEiOiJzS3d0Iiwibm8iOjEsInVzZXJuYW1lIjoiamFja2ZydWVkIn0=') +'2b8c5bb2a8c202dcc9c87eb2debfe3bf177e47ff:{"captcha":"sKwt","no":1,"username":"jackfrued"}' +``` + +第3列是session的过期时间,session过期后浏览器保存的cookie中的sessionid就会失效,但是数据库中的这条对应的记录仍然会存在,如果想清除过期的数据,可以使用下面的命令。 + +```Shell +python manage.py clearsessions +``` + +Django框架默认的session过期时间为两周(1209600秒),如果想修改这个时间,可以在项目的配置文件中添加如下所示的代码。 + +```Python +# 配置会话的超时时间为1天(86400秒) +SESSION_COOKIE_AGE = 86400 +``` + +有很多对安全性要求较高的应用都必须在关闭浏览器窗口时让会话过期,不再保留用户的任何信息,如果希望在关闭浏览器窗口时就让会话过期(cookie中的sessionid失效),可以加入如下所示的配置。 + +```Python +# 设置为True在关闭浏览器窗口时session就过期 +SESSION_EXPIRE_AT_BROWSER_CLOSE = True +``` + +如果不希望将session的数据保存在数据库中,可以将其放入缓存中,对应的配置如下所示,缓存的配置和使用我们在后面讲解。 + +```Python +# 配置将会话对象放到缓存中存储 +SESSION_ENGINE = 'django.contrib.sessions.backends.cache' +# 配置使用哪一组缓存来保存会话 +SESSION_CACHE_ALIAS = 'default' +``` + +如果要修改session数据默认的序列化方式,可以将默认的`JSONSerializer`修改为`PickleSerializer`。 + +```Python +SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' +``` + +### 在视图函数中读写cookie + +Django封装的`HttpRequest`和`HttpResponse`对象分别提供了读写cookie的操作。 + +HttpRequest封装的属性和方法: + +1. `COOKIES`属性 - 该属性包含了HTTP请求携带的所有cookie。 +2. `get_signed_cookie`方法 - 获取带签名的cookie,如果签名验证失败,会产生`BadSignature`异常。 + +HttpResponse封装的方法: + +1. `set_cookie`方法 - 该方法可以设置一组键值对并将其最终将写入浏览器。 +2. `set_signed_cookie`方法 - 跟上面的方法作用相似,但是会对cookie进行签名来达到防篡改的作用。因为如果篡改了cookie中的数据,在不知道[密钥]()和[盐]()的情况下是无法生成有效的签名,这样服务器在读取cookie时会发现数据与签名不一致从而产生`BadSignature`异常。需要说明的是,这里所说的密钥就是我们在Django项目配置文件中指定的`SECRET_KEY`,而盐是程序中设定的一个字符串,你愿意设定为什么都可以,只要是一个有效的字符串。 + +上面提到的方法,如果不清楚它们的具体用法,可以自己查阅一下Django的[官方文档](),没有什么资料比官方文档能够更清楚的告诉你这些方法到底如何使用。 + +刚才我们说过了,激活`SessionMiddleware`之后,每个`HttpRequest`对象都会绑定一个session属性,它是一个类似字典的对象,除了保存用户数据之外还提供了检测浏览器是否支持cookie的方法,包括: + +1. `set_test_cookie`方法 - 设置用于测试的cookie。 +2. `test_cookie_worked`方法 - 检测测试cookie是否工作。 +3. `delete_test_cookie`方法 - 删除用于测试的cookie。 +4. `set_expiry`方法 - 设置会话的过期时间。 +5. `get_expire_age`/`get_expire_date`方法 - 获取会话的过期时间。 +6. `clear_expired`方法 - 清理过期的会话。 + +下面是在执行登录之前检查浏览器是否支持cookie的代码。 + +```Python +def login(request): + if request.method == 'POST': + if request.session.test_cookie_worked(): + request.session.delete_test_cookie() + # Add your code to perform login process here + else: + return HttpResponse("Please enable cookies and try again.") + request.session.set_test_cookie() + return render_to_response('login.html') +``` + +### Cookie的替代品 + +之前我们说过了,cookie的名声一直都不怎么好,当然我们在实际开发中是不会在cookie中保存用户的敏感信息(如用户的密码、信用卡的账号等)的,而且保存在cookie中的数据一般也会做好编码和签名的工作。即便如此,HTML5中还是给出了用于替代cookie的技术方案,其中使用得最为广泛的就是localStorage和sessionStorage,相信从名字上你就能听出二者的差别,存储在`localStorage`的数据可以长期保留;而存储在`sessionStorage`的数据会在浏览器关闭时会被清除 。关于这些cookie替代品的用法,建议大家查阅[MDN]()来进行了解。 \ No newline at end of file diff --git a/Day41-55/46.报表和日志.md b/Day41-55/46.报表和日志.md new file mode 100644 index 0000000..dffdcfc --- /dev/null +++ b/Day41-55/46.报表和日志.md @@ -0,0 +1,351 @@ +## 报表和日志 + +### 导出Excel报表 + +报表就是用表格、图表等格式来动态显示数据,所以有人用这样的公式来描述报表: + +``` +报表 = 多样的格式 + 动态的数据 +``` + +有很多的三方库支持在Python程序中写Excel文件,包括[xlwt]()、[xlwings]()、[openpyxl]()、[xlswriter]()、[pandas]()等,其中的xlwt虽然只支持写xls格式的Excel文件,但在性能方面的表现还是不错的。下面我们就以xlwt为例,来演示如何在Django项目中导出Excel报表,例如导出一个包含所有老师信息的Excel表格。 + +```Python +def export_teachers_excel(request): + # 创建工作簿 + wb = xlwt.Workbook() + # 添加工作表 + sheet = wb.add_sheet('老师信息表') + # 查询所有老师的信息(注意:这个地方稍后需要优化) + queryset = Teacher.objects.all() + # 向Excel表单中写入表头 + colnames = ('姓名', '介绍', '好评数', '差评数', '学科') + for index, name in enumerate(colnames): + sheet.write(0, index, name) + # 向单元格中写入老师的数据 + props = ('name', 'detail', 'good_count', 'bad_count', 'subject') + for row, teacher in enumerate(queryset): + for col, prop in enumerate(props): + value = getattr(teacher, prop, '') + if isinstance(value, Subject): + value = value.name + sheet.write(row + 1, col, value) + # 保存Excel + buffer = BytesIO() + wb.save(buffer) + # 将二进制数据写入响应的消息体中并设置MIME类型 + resp = HttpResponse(buffer.getvalue(), content_type='application/vnd.ms-excel') + # 中文文件名需要处理成百分号编码 + filename = quote('老师.xls') + # 通过响应头告知浏览器下载该文件以及对应的文件名 + resp['content-disposition'] = f'attachment; filename="{filename}"' + return resp +``` + +映射URL。 + +```Python +urlpatterns = [ + # 此处省略上面的代码 + path('excel/', views.export_teachers_excel), + # 此处省略下面的代码 +] +``` + +### 生成前端统计图表 + +如果项目中需要生成前端统计图表,可以使用百度的[ECharts]()。具体的做法是后端通过提供数据接口返回统计图表所需的数据,前端使用ECharts来渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数的报表,可以按照下面的方式来做。 + +```Python +def get_teachers_data(request): + # 查询所有老师的信息(注意:这个地方稍后也需要优化) + queryset = Teacher.objects.all() + # 用生成式将老师的名字放在一个列表中 + names = [teacher.name for teacher in queryset] + # 用生成式将老师的好评数放在一个列表中 + good = [teacher.good_count for teacher in queryset] + # 用生成式将老师的差评数放在一个列表中 + bad = [teacher.bad_count for teacher in queryset] + # 返回JSON格式的数据 + return JsonResponse({'names': names, 'good': good, 'bad': bad}) +``` + +映射URL。 + +```Python +urlpatterns = [ + # 此处省略上面的代码 + path('teachers_data/', views.export_teachers_excel), + # 此处省略下面的代码 +] +``` + +使用ECharts生成柱状图。 + +```HTML + + + + + 老师评价统计 + + +
+

+ 返回首页 +

+ + + + +``` + +运行效果如下图所示。 + +![](./res/echarts_bar_graph.png) + +### 配置日志 + +项目开发阶段,显示足够的调试信息以辅助开发人员调试代码还是非常必要的;项目上线以后,将系统运行时出现的警告、错误等信息记录下来以备相关人员了解系统运行状况并维护代码也是很有必要的。要做好这两件事件,我们需要为Django项目配置日志。 + +Django的日志配置基本可以参照官方文档再结合项目实际需求来进行,这些内容基本上可以从官方文档上复制下来,然后进行局部的调整即可,下面给出一些参考配置。 + +```Python +LOGGING = { + 'version': 1, + # 是否禁用已经存在的日志器 + 'disable_existing_loggers': False, + # 日志格式化器 + 'formatters': { + 'simple': { + 'format': '%(asctime)s %(module)s.%(funcName)s: %(message)s', + 'datefmt': '%Y-%m-%d %H:%M:%S', + }, + 'verbose': { + 'format': '%(asctime)s %(levelname)s [%(process)d-%(threadName)s] ' + '%(module)s.%(funcName)s line %(lineno)d: %(message)s', + 'datefmt': '%Y-%m-%d %H:%M:%S', + } + }, + # 日志过滤器 + 'filters': { + # 只有在Django配置文件中DEBUG值为True时才起作用 + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + # 日志处理器 + 'handlers': { + # 输出到控制台 + 'console': { + 'class': 'logging.StreamHandler', + 'level': 'DEBUG', + 'filters': ['require_debug_true'], + 'formatter': 'simple', + }, + # 输出到文件(每周切割一次) + 'file1': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'filename': 'access.log', + 'when': 'W0', + 'backupCount': 12, + 'formatter': 'simple', + 'level': 'INFO', + }, + # 输出到文件(每天切割一次) + 'file2': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'filename': 'error.log', + 'when': 'D', + 'backupCount': 31, + 'formatter': 'verbose', + 'level': 'WARNING', + }, + }, + # 日志器记录器 + 'loggers': { + 'django': { + # 需要使用的日志处理器 + 'handlers': ['console', 'file1', 'file2'], + # 是否向上传播日志信息 + 'propagate': True, + # 日志级别(不一定是最终的日志级别) + 'level': 'DEBUG', + }, + } +} +``` + +大家可能已经注意到了,上面日志配置中的formatters是**日志格式化器**,它代表了如何格式化输出日志,其中格式占位符分别表示: + +1. %(name)s - 记录器的名称 +2. %(levelno)s - 数字形式的日志记录级别 +3. %(levelname)s - 日志记录级别的文本名称 +4. %(filename)s - 执行日志记录调用的源文件的文件名称 +5. %(pathname)s - 执行日志记录调用的源文件的路径名称 +6. %(funcName)s - 执行日志记录调用的函数名称 +7. %(module)s - 执行日志记录调用的模块名称 +8. %(lineno)s - 执行日志记录调用的行号 +9. %(created)s - 执行日志记录的时间 +10. %(asctime)s - 日期和时间 +11. %(msecs)s - 毫秒部分 +12. %(thread)d - 线程ID(整数) +13. %(threadName)s - 线程名称 +14. %(process)d - 进程ID (整数) + +日志配置中的handlers用来指定**日志处理器**,简单的说就是指定将日志输出到控制台还是文件又或者是网络上的服务器,可用的处理器包括: + +1. logging.StreamHandler(stream=None) - 可以向类似与sys.stdout或者sys.stderr的任何文件对象输出信息 +2. logging.FileHandler(filename, mode='a', encoding=None, delay=False) - 将日志消息写入文件 +3. logging.handlers.DatagramHandler(host, port) - 使用UDP协议,将日志信息发送到指定主机和端口的网络主机上 +4. logging.handlers.HTTPHandler(host, url) - 使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器 +5. logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False) - 将日志消息写入文件,如果文件的大小超出maxBytes指定的值,那么将重新生成一个文件来记录日志 +6. logging.handlers.SocketHandler(host, port) - 使用TCP协议,将日志信息发送到指定主机和端口的网络主机上 +7. logging.handlers.SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0) - 将日志输出到指定的邮件地址 +8. logging.MemoryHandler(capacity, flushLevel=ERROR, target=None, flushOnClose=True) - 将日志输出到内存指定的缓冲区中 + +上面每个日志处理器都指定了一个名为“level”的属性,它代表了日志的级别,不同的日志级别反映出日志中记录信息的严重性。Python中定义了六个级别的日志,按照从低到高的顺序依次是:NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL。 + +最后配置的**日志记录器**是用来真正输出日志的,Django框架提供了如下所示的内置记录器: + +1. django - 在Django层次结构中的所有消息记录器 +2. django.request - 与请求处理相关的日志消息。5xx响应被视为错误消息;4xx响应被视为为警告消息 +3. django.server - 与通过runserver调用的服务器所接收的请求相关的日志消息。5xx响应被视为错误消息;4xx响应被记录为警告消息;其他一切都被记录为INFO +4. django.template - 与模板渲染相关的日志消息 +5. django.db.backends - 有与数据库交互产生的日志消息,如果希望显示ORM框架执行的SQL语句,就可以使用该日志记录器。 + +日志记录器中配置的日志级别有可能不是最终的日志级别,因为还要参考日志处理器中配置的日志级别,取二者中级别较高者作为最终的日志级别。 + +### 配置Django-Debug-Toolbar + +Django-Debug-Toolbar是项目开发阶段辅助调试和优化的神器,只要配置了它,就可以很方便的查看到如下表所示的项目运行信息,这些信息对调试项目和优化Web应用性能都是至关重要的。 + +| 项目 | 说明 | +| ----------- | --------------------------------- | +| Versions | Django的版本 | +| Time | 显示视图耗费的时间 | +| Settings | 配置文件中设置的值 | +| Headers | HTTP请求头和响应头的信息 | +| Request | 和请求相关的各种变量及其信息 | +| StaticFiles | 静态文件加载情况 | +| Templates | 模板的相关信息 | +| Cache | 缓存的使用情况 | +| Signals | Django内置的信号信息 | +| Logging | 被记录的日志信息 | +| SQL | 向数据库发送的SQL语句及其执行时间 | + +1. 安装Django-Debug-Toolbar。 + + ```Shell + pip install django-debug-toolbar + ``` + +2. 配置 - 修改settings.py。 + + ```Python + INSTALLED_APPS = [ + 'debug_toolbar', + ] + + MIDDLEWARE = [ + 'debug_toolbar.middleware.DebugToolbarMiddleware', + ] + + DEBUG_TOOLBAR_CONFIG = { + # 引入jQuery库 + 'JQUERY_URL': 'https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js', + # 工具栏是否折叠 + 'SHOW_COLLAPSED': True, + # 是否显示工具栏 + 'SHOW_TOOLBAR_CALLBACK': lambda x: True, + } + ``` + +3. 配置 - 修改urls.py。 + + ```Python + if settings.DEBUG: + + import debug_toolbar + + urlpatterns.insert(0, path('__debug__/', include(debug_toolbar.urls))) + ``` + +4. 使用 - 如下图所示,在配置好Django-Debug-Toolbar之后,页面右侧会看到一个调试工具栏,上面包括了如前所述的各种调试信息,包括执行时间、项目设置、请求头、SQL、静态资源、模板、缓存、信号等,查看起来非常的方便。 + +### 优化ORM代码 + +在配置了日志或Django-Debug-Toolbar之后,我们可以查看一下之前将老师数据导出成Excel报表的视图函数执行情况,这里我们关注的是ORM框架生成的SQL查询到底是什么样子的,相信这里的结果会让你感到有一些意外。执行`Teacher.objects.all()`之后我们可以注意到,在控制台看到的或者通过Django-Debug-Toolbar输出的SQL是下面这样的: + +```SQL +SELECT `tb_teacher`.`no`, `tb_teacher`.`name`, `tb_teacher`.`detail`, `tb_teacher`.`photo`, `tb_teacher`.`good_count`, `tb_teacher`.`bad_count`, `tb_teacher`.`sno` FROM `tb_teacher`; args=() +SELECT `tb_subject`.`no`, `tb_subject`.`name`, `tb_subject`.`intro`, `tb_subject`.`create_date`, `tb_subject`.`is_hot` FROM `tb_subject` WHERE `tb_subject`.`no` = 101; args=(101,) +SELECT `tb_subject`.`no`, `tb_subject`.`name`, `tb_subject`.`intro`, `tb_subject`.`create_date`, `tb_subject`.`is_hot` FROM `tb_subject` WHERE `tb_subject`.`no` = 101; args=(101,) +SELECT `tb_subject`.`no`, `tb_subject`.`name`, `tb_subject`.`intro`, `tb_subject`.`create_date`, `tb_subject`.`is_hot` FROM `tb_subject` WHERE `tb_subject`.`no` = 101; args=(101,) +SELECT `tb_subject`.`no`, `tb_subject`.`name`, `tb_subject`.`intro`, `tb_subject`.`create_date`, `tb_subject`.`is_hot` FROM `tb_subject` WHERE `tb_subject`.`no` = 101; args=(101,) +SELECT `tb_subject`.`no`, `tb_subject`.`name`, `tb_subject`.`intro`, `tb_subject`.`create_date`, `tb_subject`.`is_hot` FROM `tb_subject` WHERE `tb_subject`.`no` = 103; args=(103,) +SELECT `tb_subject`.`no`, `tb_subject`.`name`, `tb_subject`.`intro`, `tb_subject`.`create_date`, `tb_subject`.`is_hot` FROM `tb_subject` WHERE `tb_subject`.`no` = 103; args=(103,) +``` + +这里的问题通常被称为“1+N查询”(或“N+1查询”),原本获取老师的数据只需要一条SQL,但是由于老师关联了学科,当我们查询到N条老师的数据时,Django的ORM框架又向数据库发出了N条SQL去查询老师所属学科的信息。每条SQL执行都会有较大的开销而且会给数据库服务器带来压力,如果能够在一条SQL中完成老师和学科的查询肯定是更好的做法,这一点也很容易做到,相信大家已经想到怎么做了。是的,我们可以使用连接查询,但是在使用Django的ORM框架时如何做到这一点呢?对于多对一关联(如投票应用中的老师和学科),我们可以使用`QuerySet`的用`select_related()`方法来加载关联对象;而对于多对多关联(如电商网站中的订单和商品),我们可以使用`prefetch_related()`方法来加载关联对象。 + +在导出老师Excel报表的视图函数中,我们可以按照下面的方式优化代码。 + +```Python +queryset = Teacher.objects.all().select_related('subject') +``` + +事实上,用ECharts生成前端报表的视图函数中,查询老师好评和差评数据的操作也能够优化,因为在这个例子中,我们只需要获取老师的姓名、好评数和差评数这三项数据,但是在默认的情况生成的SQL会查询老师表的所有字段。可以用`QuerySet`的`only()`方法来指定需要查询的属性,也可以用`QuerySet`的`defer()`方法来指定暂时不需要查询的属性,这样生成的SQL会通过投影操作来指定需要查询的列,从而改善查询性能,代码如下所示: + +```Python +queryset = Teacher.objects.all().only('name', 'good_count', 'bad_count') +``` + +当然,如果要统计出每个学科的老师好评和差评的平均数,利用Django的ORM框架也能够做到,代码如下所示: + +```Python +queryset = Teacher.objects.values('subject').annotate( + good=Avg('good_count'), bad=Avg('bad_count')) +``` + +这里获得的`QuerySet`中的元素是字典对象,每个字典中有三组键值对,分别是代表学科编号的`subject`、代表好评数的`good`和代表差评数的`bad`。如果想要获得学科的名称而不是编号,可以按照如下所示的方式调整代码: + +```Python +queryset = Teacher.objects.values('subject__name').annotate( + good=Avg('good_count'), bad=Avg('bad_count')) +``` + +可见,Django的ORM框架允许我们用面向对象的方式完成关系数据库中的分组和聚合查询。 \ No newline at end of file diff --git a/Day41-55/47.中间件的应用.md b/Day41-55/47.中间件的应用.md new file mode 100644 index 0000000..4eecd40 --- /dev/null +++ b/Day41-55/47.中间件的应用.md @@ -0,0 +1,150 @@ +## 中间件的应用 + +### 实现登录验证 + +我们继续来完善投票应用。在上一个章节中,我们在用户登录成功后通过session保留了用户信息,接下来我们可以应用做一些调整,要求在为老师投票时必须要先登录,登录过的用户可以投票,否则就将用户引导到登录页面,为此我们可以这样修改视图函数。 + +```Python +def praise_or_criticize(request: HttpRequest): + """投票""" + if 'username' in request.session: + try: + tno = int(request.GET.get('tno', '0')) + teacher = Teacher.objects.get(no=tno) + if request.path.startswith('/praise'): + teacher.good_count += 1 + else: + teacher.bad_count += 1 + teacher.save() + data = {'code': 200, 'message': '操作成功'} + except (ValueError, Teacher.DoesNotExist): + data = {'code': 404, 'message': '操作失败'} + else: + data = {'code': 401, 'message': '请先登录'} + return JsonResponse(data) +``` + +前端页面在收到`{'code': 401, 'message': '请先登录'}`后,可以将用户引导到登录页面,修改后的teacher.html页面的JavaScript代码部门如下所示。 + +```HTML + +``` + +> 注意:为了在登录成功之后能够回到刚才投票的页面,我们在跳转登录时设置了一个`backurl`参数,把当前浏览器中的URL作为返回的页面地址。 + +这样我们已经实现了用户必须登录才能投票的限制,但是一个新的问题来了。如果我们的应用中有很多功能都需要用户先登录才能执行,例如将前面导出Excel报表和查看统计图表的功能都加以登录限制,那么我们是不是需要在每个视图函数中添加代码来检查session中是否包含了登录用户的信息呢?答案是否定的,如果这样做了,我们的视图函数中必然会充斥着大量的重复代码。编程大师*Martin Fowler*曾经说过:**代码有很多种坏味道,重复是最坏的一种**。在Django项目中,我们可以把验证用户是否登录这样的重复性代码放到中间件中。 + +### Django中间件概述 + +中间件是安插在Web应用请求和响应过程之间的组件,它在整个Web应用中扮演了拦截过滤器的角色,通过中间件可以拦截请求和响应,并对请求和响应进行过滤(简单的说就是执行额外的处理)。通常,一个中间件组件只专注于完成一件特定的事,例如:Django框架通过`SessionMiddleware`中间件实现了对session的支持,又通过`AuthenticationMiddleware`中间件实现了基于session的请求认证。通过把多个中间件组合在一起,我们可以完成更为复杂的任务,Django框架就是这么做的。 + +Django项目的配置文件中就包含了对中间件的配置,代码如下所示。 + +```Python +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] +``` + +我们稍微为大家解释一下这些中间件的作用: + +1. CommonMiddleware - 基础设置中间件,可以处理以下一些配置参数。 + - DISALLOWED_USER_AGENTS - 不被允许的用户代理(浏览器) + - APPEND_SLASH - 是否追加`/` + - USE_ETAG - 浏览器缓存相关 +2. SecurityMiddleware - 安全相关中间件,可以处理和安全相关的配置项。 + - SECURE_HSTS_SECONDS - 强制使用HTTPS的时间 + - SECURE_HSTS_INCLUDE_SUBDOMAINS - HTTPS是否覆盖子域名 + - SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型 + - SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器 + - SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接 + - SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS +3. SessionMiddleware - 会话中间件。 +4. CsrfViewMiddleware - 通过生成令牌,防范跨请求份伪的造中间件。 +5. XFrameOptionsMiddleware - 通过设置请求头参数,防范点击劫持攻击的中间件。 + +在请求的过程中,上面的中间件会按照书写的顺序从上到下执行,然后是URL解析,最后请求才会来到视图函数;在响应的过程中,上面的中间件会按照书写的顺序从下到上执行,与请求时中间件执行的顺序正好相反。 + +### 自定义中间件 + +Django中的中间件有两种实现方式:基于类的实现方式和基于函数的实现方式,后者更接近于装饰器的写法。装饰器实际上是代理模式的应用,将横切关注功能(与正常业务逻辑没有必然联系的功能,例如:身份认证、日志记录、编码转换之类的功能)置于代理中,由代理对象来完成被代理对象的行为并添加额外的功能。中间件对用户请求和响应进行拦截过滤并增加额外的处理,在这一点上它跟装饰器是完全一致的,所以基于函数的写法来实现中间件就跟装饰器的写法几乎一模一样。下面我们用自定义的中间件来实现用户登录验证的功能。 + +```Python +""" +middlewares.py +""" +from django.http import JsonResponse +from django.shortcuts import redirect + +# 需要登录才能访问的资源路径 +LOGIN_REQUIRED_URLS = { + '/praise/', '/criticize/', '/excel/', '/teachers_data/', +} + + +def check_login_middleware(get_resp): + + def wrapper(request, *args, **kwargs): + # 请求的资源路径在上面的集合中 + if request.path in LOGIN_REQUIRED_URLS: + # 会话中包含userid则视为已经登录 + if 'userid' not in request.session: + # 判断是不是Ajax请求 + if request.is_ajax(): + # Ajax请求返回JSON数据提示用户登录 + return JsonResponse({'code': 10003, 'hint': '请先登录'}) + else: + backurl = request.get_full_path() + # 非Ajax请求直接重定向到登录页 + return redirect(f'/login/?backurl={backurl}') + return get_resp(request, *args, **kwargs) + + return wrapper +``` + +修改配置文件,激活中间件使其生效。 + +```Python +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'debug_toolbar.middleware.DebugToolbarMiddleware', + 'vote.middlewares.check_login_middleware', +] +``` + +注意上面这个中间件列表中元素的顺序,当收到来自用户的请求时,中间件按照从上到下的顺序依次执行,这行完这些中间件以后,请求才会最终到达视图函数。当然,在这个过程中,用户的请求可以被拦截,就像上面我们自定义的中间件那样,如果用户在没有登录的情况下访问了受保护的资源,中间件会将请求直接重定向到登录页,后面的中间件和视图函数将不再执行。在响应用户请求的过程中,上面的中间件会按照从下到上的顺序依次执行,这样的话我们还可以对响应做进一步的处理。 + +中间件执行的顺序是非常重要的,对于有依赖关系的中间件必须保证被依赖的中间件要置于依赖它的中间件的前面,就好比我们刚才自定义的中间件要放到`SessionMiddleware`的后面,因为我们要依赖这个中间件为请求绑定的`session`对象才能判定用户是否登录。 + +### 小结 + +至此,除了对用户投票数量加以限制的功能外,这个投票应用就算基本完成了,整个项目的完整代码请参考,其中用户注册时使用的手机验证码功能请大家使用自己注册的短信平台替代它。如果需要投票应用完整的视频讲解,可以在首页扫码打赏后留言联系作者获取视频下载地址,谢谢大家的理解和支持。 \ No newline at end of file diff --git a/Day41-55/48.前后端分离开发入门.md b/Day41-55/48.前后端分离开发入门.md new file mode 100644 index 0000000..2e0879e --- /dev/null +++ b/Day41-55/48.前后端分离开发入门.md @@ -0,0 +1,164 @@ +## 前后端分离开发入门 + +在传统的Web应用开发中,大多数的程序员会将浏览器作为前后端的分界线。将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端。所谓前后端分离的开发,就是前后端工程师约定好数据交互接口,并行的进行开发和测试,后端只提供数据,不负责将数据渲染到页面上,前端通过HTTP请求获取数据并负责将数据渲染到页面上,这个工作是交给浏览器中的JavaScript代码来完成。 + +使用前后端分离开发有诸多的好处,下面我们简要的说下这些好处: + +1. **提升开发效率**。前后端分离以后,可以实现前后端代码的解耦,只要前后端沟通约定好应用所需接口以及接口参数,便可以开始并行开发,无需等待对方的开发工作结束。在这种情况下,前后端工程师都可以只专注于自己的开发工作,有助于打造出更好的团队。除此之外,在前后端分离的开发模式下,即使需求发生变更,只要接口与数据格式不变,后端开发人员就不需要修改代码,只要前端进行变动即可。 +2. **增强代码的可维护性**。前后端分离后,应用的代码不再是前后端混合,只有在运行期才会有调用依赖关系,这样的话维护代码的工作将变得轻松愉快很多,再不会牵一发而动全身。当你的代码变得简明且整洁时,代码的可读性和可维护性都会有质的提升。 +3. **支持多终端和服务化架构**。前后端分离后,同一套数据接口可以为不同的终端提供服务,更有助于打造多终端应用;此外,由于后端提供的接口之间可以通过HTTP(S)进行调用,有助于打造服务化架构(包括微服务)。 + +接下来我们就用前后端分离的方式来改写之前的投票应用。 + +### 返回JSON格式的数据 + +刚才说过,在前后端分离的开发模式下,后端需要为前端提供数据接口,这些接口通常返回JSON格式的数据。在Django项目中,我们可以先将对象处理成字典,然后就可以利用Django封装的`JsonResponse`向浏览器返回JSON格式的数据,具体的做法如下所示。 + +```Python +def show_subjects(request): + queryset = Subject.objects.all() + subjects = [] + for subject in queryset: + subjects.append({ + 'no': subject.no, + 'name': subject.name, + 'intro': subject.intro, + 'isHot': subject.is_hot + }) + return JsonResponse(subjects, safe=False) +``` + +上面的代码中,我们通过循环遍历查询学科得到的`QuerySet`对象,将每个学科的数据处理成一个字典,在将字典保存在名为`subjects`的列表容器中,最后利用`JsonResponse`完成对列表的序列化,向浏览器返回JSON格式的数据。由于`JsonResponse`序列化的是一个列表而不是字典,所以需要指定`safe`参数的值为`False`才能完成对`subjects`的序列化,否则会产生`TypeError`异常。 + +可能大家已经发现了,自己写代码将一个对象转成字典是比较麻烦的,如果对象的属性很多而且某些属性又关联到一个比较复杂的对象时,情况会变得更加糟糕。为此我们可以使用一个名为bpmappers的三方库来简化将对象转成字典的操作,这个三方库本身也提供了对Django框架的支持。 + +安装三方库bpmappers。 + +```Shell +pip install bpmappers +``` + +编写映射器(实现对象到字典转换)。 + +```Python +from bpmappers.djangomodel import ModelMapper + +from poll2.models import Subject + + +class SubjectMapper(ModelMapper): + + class Meta: + model = Subject +``` + +修改视图函数。 + +```Python +def show_subjects(request): + queryset = Subject.objects.all() + subjects = [] + for subject in queryset: + subjects.append(SubjectMapper(subject).as_dict()) + return JsonResponse(subjects, safe=False) +``` + +配置URL映射,然后访问该接口,可以得到如下所示的JSON格式数据。 + +```JSON +[ + { + "no": 101, + "name": "Python全栈+人工智能", + "intro": "Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。", + "create_date": "2017-08-01", + "is_hot": true + }, + // 此处省略下面的内容 +] +``` + +如果不希望在JSON数据中显示学科的成立时间,我们可以在映射器中排除`create_date`属性;如果希望将是否为热门学科对应的键取名为`isHot`(默认的名字是`is_hot`),也可以通过修改映射器来做到。具体的做法如下所示: + +```Python +from bpmappers import RawField +from bpmappers.djangomodel import ModelMapper + +from poll2.models import Subject + + +class SubjectMapper(ModelMapper): + isHot = RawField('is_hot') + + class Meta: + model = Subject + exclude = ('create_date', 'is_hot') +``` + +再次查看学科接口返回的JSON数据。 + +```JSON +[ + { + "no": 101, + "name": "Python全栈+人工智能", + "intro": "Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。", + "isHot": true + }, + // 此处省略下面的内容 +] +``` + +关于bpmappers详细的使用指南,请参考它的[官方文档](),这个官方文档是用日语书写的,可以使用浏览器的翻译功能将它翻译成你熟悉的语言即可。 + +### 使用Vue.js渲染页面 + +关于Vue.js的知识,我们在第21天到第30天的内容中已经介绍过了,这里我们不再进行赘述。如果希望全面的了解和学习Vue.js,建议阅读它的[官方教程]()或者在[YouTube]()上搜索Vue.js的新手教程(Crash Course)进行学习。 + +重新改写subjects.html页面,使用Vue.js来渲染页面。 + +```HTML + + + + + 学科 + + +

所有学科

+
+
+
+

+ {{ subject.name }} + +

+

{{ subject.intro }}

+
+
+ + + + +``` + +前后端分离的开发需要将前端页面作为静态资源进行部署,项目实际上线的时候,我们会对整个Web应用进行动静分离,静态资源通过Nginx或Apache服务器进行部署,生成动态内容的Python程序部署在uWSGI或者Gunicorn服务器上,对动态内容的请求由Nginx或Apache路由到uWSGI或Gunicorn服务器上。 + +在开发阶段,我们通常会使用Django自带的测试服务器,如果要尝试前后端分离,可以先将静态页面放在之前创建的放静态资源的目录下,具体的做法可以参考[项目完整代码]()。 \ No newline at end of file diff --git a/Day41-55/10.RESTful架构和DRF入门.md b/Day41-55/49.RESTful架构和DRF入门.md similarity index 100% rename from Day41-55/10.RESTful架构和DRF入门.md rename to Day41-55/49.RESTful架构和DRF入门.md diff --git a/Day41-55/11.RESTful架构和DRF进阶.md b/Day41-55/50.RESTful架构和DRF进阶.md similarity index 100% rename from Day41-55/11.RESTful架构和DRF进阶.md rename to Day41-55/50.RESTful架构和DRF进阶.md diff --git a/Day41-55/12.使用缓存.md b/Day41-55/51.使用缓存.md similarity index 100% rename from Day41-55/12.使用缓存.md rename to Day41-55/51.使用缓存.md diff --git a/Day41-55/08.文件上传和富文本编辑.md b/Day41-55/52.文件上传和富文本编辑.md similarity index 100% rename from Day41-55/08.文件上传和富文本编辑.md rename to Day41-55/52.文件上传和富文本编辑.md diff --git a/Day41-55/13.短信和邮件.md b/Day41-55/53.短信和邮件.md similarity index 100% rename from Day41-55/13.短信和邮件.md rename to Day41-55/53.短信和邮件.md diff --git a/Day41-55/14.异步任务和定时任务.md b/Day41-55/54.异步任务和定时任务.md similarity index 100% rename from Day41-55/14.异步任务和定时任务.md rename to Day41-55/54.异步任务和定时任务.md diff --git a/Day41-55/15.单元测试和项目上线.md b/Day41-55/55.单元测试和项目上线.md similarity index 100% rename from Day41-55/15.单元测试和项目上线.md rename to Day41-55/55.单元测试和项目上线.md diff --git a/Day41-55/code/car/car/__init__.py b/Day41-55/code/car/car/__init__.py deleted file mode 100644 index aa60bed..0000000 --- a/Day41-55/code/car/car/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import pymysql - -pymysql.install_as_MySQLdb() \ No newline at end of file diff --git a/Day41-55/code/car/car/settings.py b/Day41-55/code/car/car/settings.py deleted file mode 100644 index 71837f8..0000000 --- a/Day41-55/code/car/car/settings.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -Django settings for car project. - -Generated by 'django-admin startproject' using Django 2.0.5. - -For more information on this file, see -https://docs.djangoproject.com/en/2.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/2.0/ref/settings/ -""" - -import os - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'ol6dmf6im(w!l*z4w+_whm&)8@(c7%4&tlhd%uh6$lfx=pi*5e' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'search', -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'car.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'templates')] - , - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'car.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/2.0/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'car', - 'HOST': 'localhost', - 'PORT': 3306, - 'USER': 'root', - 'PASSWORD': '123456', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/2.0/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/2.0/howto/static-files/ -STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] - -STATIC_URL = '/static/' diff --git a/Day41-55/code/car/car/urls.py b/Day41-55/code/car/car/urls.py deleted file mode 100644 index 11e97eb..0000000 --- a/Day41-55/code/car/car/urls.py +++ /dev/null @@ -1,26 +0,0 @@ -"""car URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/2.0/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.conf.urls import url - -from search import views - -urlpatterns = [ - url(r'^search$', views.search), - url(r'^search2$', views.ajax_search), - url(r'^add', views.add), - url(r'^admin/', admin.site.urls), -] diff --git a/Day41-55/code/car/car/wsgi.py b/Day41-55/code/car/car/wsgi.py deleted file mode 100644 index 150b999..0000000 --- a/Day41-55/code/car/car/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for car project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "car.settings") - -application = get_wsgi_application() diff --git a/Day41-55/code/car/manage.py b/Day41-55/code/car/manage.py deleted file mode 100644 index 5478c46..0000000 --- a/Day41-55/code/car/manage.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "car.settings") - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) diff --git a/Day41-55/code/car/search/__init__.py b/Day41-55/code/car/search/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Day41-55/code/car/search/admin.py b/Day41-55/code/car/search/admin.py deleted file mode 100644 index 1c98cb7..0000000 --- a/Day41-55/code/car/search/admin.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.contrib import admin - -from search.models import CarRecord - - -class CarRecordAdmin(admin.ModelAdmin): - - list_display = ('carno', 'reason', 'date', 'punish', 'isdone') - search_fields = ('carno', ) - - -admin.site.register(CarRecord, CarRecordAdmin) diff --git a/Day41-55/code/car/search/apps.py b/Day41-55/code/car/search/apps.py deleted file mode 100644 index 5726231..0000000 --- a/Day41-55/code/car/search/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class SearchConfig(AppConfig): - name = 'search' diff --git a/Day41-55/code/car/search/migrations/0001_initial.py b/Day41-55/code/car/search/migrations/0001_initial.py deleted file mode 100644 index ceed885..0000000 --- a/Day41-55/code/car/search/migrations/0001_initial.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11 on 2018-05-24 01:16 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='CarRecord', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('carno', models.CharField(max_length=7)), - ('reason', models.CharField(max_length=50)), - ('date', models.DateTimeField(db_column='happen_date')), - ('punlish', models.CharField(max_length=50)), - ('isdone', models.BooleanField(default=False)), - ], - options={ - 'db_table': 'tb_car_record', - }, - ), - ] diff --git a/Day41-55/code/car/search/migrations/0002_auto_20180524_1420.py b/Day41-55/code/car/search/migrations/0002_auto_20180524_1420.py deleted file mode 100644 index bd2aa56..0000000 --- a/Day41-55/code/car/search/migrations/0002_auto_20180524_1420.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11 on 2018-05-24 06:20 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('search', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='carrecord', - options={'ordering': ('-date',)}, - ), - migrations.RenameField( - model_name='carrecord', - old_name='punlish', - new_name='punish', - ), - ] diff --git a/Day41-55/code/car/search/migrations/__init__.py b/Day41-55/code/car/search/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Day41-55/code/car/search/models.py b/Day41-55/code/car/search/models.py deleted file mode 100644 index eeaf4eb..0000000 --- a/Day41-55/code/car/search/models.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.db import models - - -class CarRecord(models.Model): - carno = models.CharField(max_length=7) - reason = models.CharField(max_length=50) - date = models.DateTimeField(db_column='happen_date', auto_now_add=True) - punish = models.CharField(max_length=50) - isdone = models.BooleanField(default=False) - - @property - def happen_date(self): - return self.date.strftime('%Y-%m-%d %H:%M:%S') - """ - return '%d年%02d月%02d日 %02d:%02d:%02d' % \ - (self.date.year, self.date.month, self.date.day, - self.date.hour, self.date.minute, self.date.second) - """ - - class Meta: - db_table = 'tb_car_record' - ordering = ('-date', ) diff --git a/Day41-55/code/car/search/tests.py b/Day41-55/code/car/search/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/Day41-55/code/car/search/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/Day41-55/code/car/search/views.py b/Day41-55/code/car/search/views.py deleted file mode 100644 index c81f442..0000000 --- a/Day41-55/code/car/search/views.py +++ /dev/null @@ -1,104 +0,0 @@ -from datetime import datetime -from json import JSONEncoder - -from django import forms -from django.http import JsonResponse -from django.shortcuts import render, redirect - -from search.models import CarRecord - -# 序列化/串行化/腌咸菜 - 把对象按照某种方式处理成字节或者字符的序列 -# 反序列化/反串行化 - 把字符或者字节的序列重新还原成对象 -# Python实现序列化和反序列化的工具模块 - json / pickle / shelve -# return HttpResponse(json.dumps(obj), content_type='application/json') -# return JsonResponse(obj, encoder=, safe=False) -# from django.core.serializers import serialize -# return HttpResponse(serialize('json', obj), content_type='application/json; charset=utf-8') -MAX_AGE = 14 * 24 * 60 * 60 - - -class CarRecordEncoder(JSONEncoder): - - def default(self, o): - del o.__dict__['_state'] - o.__dict__['date'] = o.happen_date - return o.__dict__ - - -def ajax_search(request): - current_time = datetime.now().ctime() - # Cookie是保存在浏览器临时文件中的用户数据(通常是识别用户身份的ID/token或者是用户的偏好设置) - # 因为每次请求服务器时在HTTP请求的请求头中都会携带本网站的Cookie数据 - # 那么服务器就可以获取这些信息来识别用户身份或者了解用户的偏好 这就是所谓的用户跟踪 - # 因为HTTP本身是无状态的 所以需要使用Cookie/隐藏域/URL重写这样的技术来实现用户跟踪 - # 从请求中读取指定的cookie - 通过cookie的名字找到对应的值 - # 如果请求中没有指定名字的cookie可以通过get方法的第二个参数设置一个默认的返回值 - last_visit_time = request.COOKIES.get('last_visit_time') - if request.method == 'GET': - response = render(request, 'search2.html', - {'last': last_visit_time if last_visit_time - else '你是第一次访问我们的网站'}) - # 通过render渲染页面后先用set_cookie方法设置cookie后再返回HttpResponse对象 - # 第一个参数是cookie的名字 第二个参数是cookie的值 第三个参数是过期时间(秒) - response.set_cookie('last_visit_time', current_time, max_age=MAX_AGE) - return response - else: - carno = request.POST['carno'] - record_list = list(CarRecord.objects.filter(carno__icontains=carno)) - # 第一个参数是要转换成JSON格式(序列化)的对象 - # encoder参数要指定完成自定义对象序列化的编码器(JSONEncoder的子类型) - # safe参数的值如果为True那么传入的第一个参数只能是字典 - # return HttpResponse(json.dumps(record_list), content_type='application/json; charset=utf-8') - return JsonResponse(record_list, encoder=CarRecordEncoder, - safe=False) - - -def search(request): - # 请求行中的请求命令 - # print(request.method) - # 请求行中的路径 - # print(request.path) - # 请求头(以HTTP_打头的键是HTTP请求的请求头) - # print(request.META) - # 查询参数: http://host/path/resource?a=b&c=d - # print(request.GET) - # 表单参数 - # print(request.POST) - if request.method == 'GET': - ctx = {'show_result': False} - else: - carno = request.POST['carno'] - ctx = { - 'show_result': True, - 'record_list': list(CarRecord.objects.filter(carno__contains=carno))} - return render(request, 'search.html', ctx) - - -class CarRecordForm(forms.ModelForm): - carno = forms.CharField(min_length=7, max_length=7, label='车牌号', error_messages={'carno': '请输入有效的车牌号'}) - reason = forms.CharField(max_length=50, label='违章原因') - punish = forms.CharField(max_length=50, required=False, label='处罚方式') - - """ - # 执行额外的表单数据验证 - def clean_carno(self): - _carno = self.cleaned_data['carno'] - if not condition: - raise forms.ValidationError('...') - return _carno - """ - - class Meta: - model = CarRecord - fields = ('carno', 'reason', 'punish') - - -def add(request): - if request.method == 'GET': - f = CarRecordForm(initial={'reason': '打警察', 'punish': '牢底坐穿'}) - else: - f = CarRecordForm(request.POST) - if f.is_valid(): - f.save() - return redirect('/search2') - return render(request, 'add.html', {'f': f}) diff --git a/Day41-55/code/car/static/images/icon-no.svg b/Day41-55/code/car/static/images/icon-no.svg deleted file mode 100644 index 2e0d383..0000000 --- a/Day41-55/code/car/static/images/icon-no.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Day41-55/code/car/static/images/icon-yes.svg b/Day41-55/code/car/static/images/icon-yes.svg deleted file mode 100644 index 5883d87..0000000 --- a/Day41-55/code/car/static/images/icon-yes.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Day41-55/code/car/templates/add.html b/Day41-55/code/car/templates/add.html deleted file mode 100644 index 36db80d..0000000 --- a/Day41-55/code/car/templates/add.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - 添加 - - - -

添加违章记录

-
-

- {% for hint in hints %} -

{{ hint }}
- {% endfor %} -

- - {% for field in f.visible_fields %} -
- {{ field.label }} - {{ field }} - {% for error in field.errors %} - {{ error }} - {% endfor %} -
- {% endfor %} - {% csrf_token %} - - - - \ No newline at end of file diff --git a/Day41-55/code/car/templates/search.html b/Day41-55/code/car/templates/search.html deleted file mode 100644 index 6183d50..0000000 --- a/Day41-55/code/car/templates/search.html +++ /dev/null @@ -1,90 +0,0 @@ - -{% load staticfiles %} - - - - 车辆违章查询 - - - -
-
- - - - - {% csrf_token %} - - -
-
- {% if show_result %} - - - - - - - - - {% for record in record_list %} - - - - - - - - {% endfor %} -
车牌号违章原因违章时间处罚方式是否受理
{{ record.carno }}{{ record.reason }}{{ record.happen_date }}{{ record.punish }} - {% if record.isdone %} - - {% else %} - - {% endif %} -
- {% endif %} -
- - \ No newline at end of file diff --git a/Day41-55/code/car/templates/search2.html b/Day41-55/code/car/templates/search2.html deleted file mode 100644 index 8a50585..0000000 --- a/Day41-55/code/car/templates/search2.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - 车辆违章查询 - - - -
- -
- - - - - - - - - - - - - -
车牌号违章原因违章时间处罚方式是否受理
-

{{ last }}

-
- - - - \ No newline at end of file diff --git a/Day41-55/code/hellodjango/demo/__init__.py b/Day41-55/code/hellodjango/demo/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Day41-55/code/hellodjango/demo/admin.py b/Day41-55/code/hellodjango/demo/admin.py deleted file mode 100644 index 9284e00..0000000 --- a/Day41-55/code/hellodjango/demo/admin.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.contrib import admin - -from demo.models import Teacher, Subject, User - - -class UserAdmin(admin.ModelAdmin): - list_display = ('no', 'username', 'email', 'counter') - ordering = ('no', ) - - -class SubjectAdmin(admin.ModelAdmin): - list_display = ('no', 'name', 'intro') - ordering = ('no', ) - - -class TeacherAdmin(admin.ModelAdmin): - list_display = ('no', 'name', 'intro', 'motto', 'subject', 'manager') - search_fields = ('name', 'intro') - ordering = ('no', ) - - -admin.site.register(Subject, SubjectAdmin) -admin.site.register(Teacher, TeacherAdmin) -admin.site.register(User, UserAdmin) - diff --git a/Day41-55/code/hellodjango/demo/apps.py b/Day41-55/code/hellodjango/demo/apps.py deleted file mode 100644 index 047ccb1..0000000 --- a/Day41-55/code/hellodjango/demo/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class DemoConfig(AppConfig): - name = '投票' diff --git a/Day41-55/code/hellodjango/demo/forms.py b/Day41-55/code/hellodjango/demo/forms.py deleted file mode 100644 index 024740b..0000000 --- a/Day41-55/code/hellodjango/demo/forms.py +++ /dev/null @@ -1,13 +0,0 @@ -from django import forms - -from demo.models import User - - -class UserForm(forms.ModelForm): - username = forms.CharField(widget=forms.TextInput, min_length=6, max_length=20) - password = forms.CharField(widget=forms.PasswordInput, min_length=8, max_length=20) - email = forms.CharField(widget=forms.EmailInput, max_length=255) - - class Meta(object): - model = User - fields = ('username', 'password', 'email') diff --git a/Day41-55/code/hellodjango/demo/hello.py b/Day41-55/code/hellodjango/demo/hello.py deleted file mode 100644 index 7a14943..0000000 --- a/Day41-55/code/hellodjango/demo/hello.py +++ /dev/null @@ -1,25 +0,0 @@ -# 序列化 - 把对象写入数据流 - 串行化 / 归档 / 腌咸菜 -# 反序列化 - 从数据流中恢复出对象 - 反串行化 / 解归档 -# Python有三个支持序列化的模块 -# json - JSON / pickle - 二进制 / shelve -import json -import pickle - - -class Student(object): - - def __init__(self, name, age): - self.name = name - self.age = age - - -if __name__ == '__main__': - list1 = [10, 'hello', 99.9, 'goodbye'] - print(json.dumps(list1)) - print(pickle.dumps(list1)) - dict1 = {'name': '骆昊', 'age': 38} - print(json.dumps(dict1)) - print(pickle.dumps(dict1)) - stu = Student('骆昊', 38) - print(pickle.dumps(stu)) - diff --git a/Day41-55/code/hellodjango/demo/migrations/0001_initial.py b/Day41-55/code/hellodjango/demo/migrations/0001_initial.py deleted file mode 100644 index bcf0e84..0000000 --- a/Day41-55/code/hellodjango/demo/migrations/0001_initial.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 2.0.6 on 2018-07-04 02:30 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Subject', - fields=[ - ('no', models.AutoField(db_column='sno', primary_key=True, serialize=False, verbose_name='编号')), - ('name', models.CharField(db_column='sname', max_length=50, verbose_name='学科名称')), - ('intro', models.CharField(db_column='sintro', max_length=511, verbose_name='学科介绍')), - ], - options={ - 'db_table': 'tb_subject', - }, - ), - migrations.CreateModel( - name='Teacher', - fields=[ - ('no', models.AutoField(db_column='tno', primary_key=True, serialize=False, verbose_name='编号')), - ('name', models.CharField(db_column='tname', max_length=20, verbose_name='姓名')), - ('intro', models.CharField(db_column='tintro', max_length=1023, verbose_name='简介')), - ('motto', models.CharField(db_column='tmotto', max_length=255, verbose_name='教学理念')), - ('photo', models.CharField(blank=True, db_column='tphoto', max_length=511, null=True)), - ('manager', models.BooleanField(db_column='tmanager', default=False, verbose_name='是否主管')), - ('subject', models.ForeignKey(db_column='sno', on_delete=django.db.models.deletion.PROTECT, to='demo.Subject', verbose_name='所属学科')), - ], - options={ - 'db_table': 'tb_teacher', - 'ordering': ('name',), - }, - ), - ] diff --git a/Day41-55/code/hellodjango/demo/migrations/0002_auto_20180704_1117.py b/Day41-55/code/hellodjango/demo/migrations/0002_auto_20180704_1117.py deleted file mode 100644 index 29f417f..0000000 --- a/Day41-55/code/hellodjango/demo/migrations/0002_auto_20180704_1117.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 2.0.6 on 2018-07-04 03:17 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('demo', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='subject', - options={'verbose_name': '学科', 'verbose_name_plural': '学科'}, - ), - migrations.AlterModelOptions( - name='teacher', - options={'ordering': ('name',), 'verbose_name': '讲师', 'verbose_name_plural': '讲师'}, - ), - migrations.AddField( - model_name='teacher', - name='bad_count', - field=models.IntegerField(db_column='sbcount', default=0, verbose_name='差评数'), - ), - migrations.AddField( - model_name='teacher', - name='good_count', - field=models.IntegerField(db_column='sgcount', default=0, verbose_name='好评数'), - ), - migrations.AlterField( - model_name='teacher', - name='photo', - field=models.CharField(blank=True, db_column='tphoto', max_length=511, null=True, verbose_name='照片'), - ), - ] diff --git a/Day41-55/code/hellodjango/demo/migrations/0003_auto_20180704_1118.py b/Day41-55/code/hellodjango/demo/migrations/0003_auto_20180704_1118.py deleted file mode 100644 index 02ed5c0..0000000 --- a/Day41-55/code/hellodjango/demo/migrations/0003_auto_20180704_1118.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.0.6 on 2018-07-04 03:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('demo', '0002_auto_20180704_1117'), - ] - - operations = [ - migrations.AlterField( - model_name='teacher', - name='bad_count', - field=models.IntegerField(db_column='tbcount', default=0, verbose_name='差评数'), - ), - migrations.AlterField( - model_name='teacher', - name='good_count', - field=models.IntegerField(db_column='tgcount', default=0, verbose_name='好评数'), - ), - ] diff --git a/Day41-55/code/hellodjango/demo/migrations/0004_auto_20180705_1017.py b/Day41-55/code/hellodjango/demo/migrations/0004_auto_20180705_1017.py deleted file mode 100644 index 20f902f..0000000 --- a/Day41-55/code/hellodjango/demo/migrations/0004_auto_20180705_1017.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 2.0.6 on 2018-07-05 02:17 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('demo', '0003_auto_20180704_1118'), - ] - - operations = [ - migrations.CreateModel( - name='User', - fields=[ - ('no', models.AutoField(db_column='uno', primary_key=True, serialize=False, verbose_name='编号')), - ('username', models.CharField(max_length=20, unique=True, verbose_name='用户名')), - ('password', models.CharField(max_length=40, verbose_name='口令')), - ('email', models.CharField(max_length=255, verbose_name='邮箱')), - ], - options={ - 'verbose_name': '用户', - 'verbose_name_plural': '用户', - 'db_table': 'tb_user', - }, - ), - migrations.AlterField( - model_name='teacher', - name='subject', - field=models.ForeignKey(db_column='sno', on_delete=django.db.models.deletion.PROTECT, related_name='+', to='demo.Subject', verbose_name='所属学科'), - ), - ] diff --git a/Day41-55/code/hellodjango/demo/migrations/0005_auto_20180706_1458.py b/Day41-55/code/hellodjango/demo/migrations/0005_auto_20180706_1458.py deleted file mode 100644 index 4626e6a..0000000 --- a/Day41-55/code/hellodjango/demo/migrations/0005_auto_20180706_1458.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 2.0.6 on 2018-07-06 06:58 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('demo', '0004_auto_20180705_1017'), - ] - - operations = [ - migrations.AlterModelOptions( - name='teacher', - options={'ordering': ('no',), 'verbose_name': '讲师', 'verbose_name_plural': '讲师'}, - ), - migrations.AddField( - model_name='user', - name='counter', - field=models.IntegerField(default=3, verbose_name='票数'), - ), - ] diff --git a/Day41-55/code/hellodjango/demo/migrations/__init__.py b/Day41-55/code/hellodjango/demo/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Day41-55/code/hellodjango/demo/models.py b/Day41-55/code/hellodjango/demo/models.py deleted file mode 100644 index d3471a9..0000000 --- a/Day41-55/code/hellodjango/demo/models.py +++ /dev/null @@ -1,67 +0,0 @@ -from hashlib import sha1 - -from django.db import models -from django.db.models import PROTECT - -proto = sha1() - - -class User(models.Model): - no = models.AutoField(primary_key=True, db_column='uno', verbose_name='编号') - username = models.CharField(max_length=20, unique=True, verbose_name='用户名') - password = models.CharField(max_length=40, verbose_name='口令') - email = models.CharField(max_length=255, verbose_name='邮箱') - counter = models.IntegerField(default=3, verbose_name='票数') - - def save(self, force_insert=False, force_update=False, using=None, update_fields=None): - hasher = proto.copy() - hasher.update(self.password.encode('utf-8')) - self.password = hasher.hexdigest() - super().save(force_insert, force_update, using, update_fields) - - class Meta(object): - db_table = 'tb_user' - verbose_name = '用户' - verbose_name_plural = '用户' - - -class Subject(models.Model): - no = models.AutoField(primary_key=True, db_column='sno', verbose_name='编号') - name = models.CharField(max_length=50, db_column='sname', verbose_name='学科名称') - intro = models.CharField(max_length=511, db_column='sintro', verbose_name='学科介绍') - - def __str__(self): - return self.name - - class Meta(object): - db_table = 'tb_subject' - verbose_name = '学科' - verbose_name_plural = '学科' - - -class Teacher(models.Model): - no = models.AutoField(primary_key=True, db_column='tno', verbose_name='编号') - name = models.CharField(max_length=20, db_column='tname', verbose_name='姓名') - intro = models.CharField(max_length=1023, db_column='tintro', verbose_name='简介') - motto = models.CharField(max_length=255, db_column='tmotto', verbose_name='教学理念') - photo = models.CharField(max_length=511, db_column='tphoto', verbose_name='照片', null=True, blank=True) - subject = models.ForeignKey(Subject, db_column='sno', on_delete=PROTECT, related_name='+', verbose_name='所属学科') - manager = models.BooleanField(default=False, db_column='tmanager', verbose_name='是否主管') - good_count = models.IntegerField(default=0, db_column='tgcount', verbose_name='好评数') - bad_count = models.IntegerField(default=0, db_column='tbcount', verbose_name='差评数') - - @property - def gcount(self): - return f'{self.good_count}' \ - if self.good_count <= 999 else '999+' - - @property - def bcount(self): - return f'{self.bad_count}' \ - if self.bad_count <= 999 else '999+' - - class Meta(object): - db_table = 'tb_teacher' - verbose_name = '讲师' - verbose_name_plural = '讲师' - ordering = ('no', ) diff --git a/Day41-55/code/hellodjango/demo/tests.py b/Day41-55/code/hellodjango/demo/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/Day41-55/code/hellodjango/demo/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/Day41-55/code/hellodjango/demo/views.py b/Day41-55/code/hellodjango/demo/views.py deleted file mode 100644 index ad627e2..0000000 --- a/Day41-55/code/hellodjango/demo/views.py +++ /dev/null @@ -1,107 +0,0 @@ -import json - -from django.http import HttpResponse -from django.shortcuts import render, redirect - -from demo.forms import UserForm -from demo.models import Subject, Teacher, User, proto - - -def login(request): - if request.method.lower() == 'get': - return render(request, 'demo/login.html', {}) - else: - username = request.POST['username'] - try: - user = User.objects.get(username__exact=username) - password = request.POST['password'] - hasher = proto.copy() - hasher.update(password.encode('utf-8')) - if hasher.hexdigest() == user.password: - request.session['user'] = user - return redirect('sub') - except User.DoesNotExist: - pass - return render(request, 'demo/login.html', - {'hint': '用户名或密码错误'}) - - -def register(request): - form = UserForm() - if request.method.lower() == 'get': - return render(request, 'demo/register.html', {'f': form}) - else: - ctx = {} - try: - form = UserForm(request.POST) - ctx['f'] = form - if form.is_valid(): - form.save(commit=True) - ctx['hint'] = '注册成功请登录!' - return render(request, 'demo/login.html', ctx) - except: - ctx['hint'] = '注册失败, 请重新尝试!' - return render(request, 'demo/register.html', ctx) - - -def check_username(request): - ctx = {} - if 'username' in request.GET: - username = request.GET['username'] - try: - User.objects.get(username__exact=username) - ctx['valid'] = False - except User.DoesNotExist: - ctx['valid'] = True - return HttpResponse(json.dumps(ctx), - content_type='application/json; charset=utf-8') - - -def show_subjects(request): - if 'user' in request.session and request.session['user']: - ctx = {'subjects_list': Subject.objects.all()} - return render(request, 'demo/subject.html', ctx) - else: - return render(request, 'demo/login.html', - {'hint': '请先登录!'}) - - -def show_teachers(request, no): - if 'user' in request.session and request.session['user']: - teachers = Teacher.objects.filter(subject__no=no)\ - .select_related('subject') - ctx = {'teachers_list': teachers} - return render(request, 'demo/teacher.html', ctx) - else: - return render(request, 'demo/login.html', - {'hint': '请先登录!'}) - - -def make_comment(request, no): - ctx = {'code': 200} - if 'user' in request.session and request.session['user']: - user = request.session['user'] - if user.counter > 0: - try: - teacher = Teacher.objects.get(pk=no) - if request.path.startswith('/good'): - teacher.good_count += 1 - ctx['result'] = f'好评({teacher.gcount})' - else: - teacher.bad_count += 1 - ctx['result'] = f'差评({teacher.bcount})' - teacher.save() - user.counter -= 1 - User.objects.filter(username__exact=user.username)\ - .update(counter=user.counter) - request.session['user'] = user - except Teacher.DoesNotExist: - ctx['code'] = 404 - else: - ctx['code'] = 403 - ctx['result'] = '票数不足' - else: - ctx['code'] = 302 - ctx['result'] = '请先登录' - return HttpResponse(json.dumps(ctx), - content_type='application/json; charset=utf-8') diff --git a/Day41-55/code/hellodjango/hellodjango/__init__.py b/Day41-55/code/hellodjango/hellodjango/__init__.py deleted file mode 100644 index 9c0f756..0000000 --- a/Day41-55/code/hellodjango/hellodjango/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import pymysql - -pymysql.install_as_MySQLdb() diff --git a/Day41-55/code/hellodjango/hellodjango/settings.py b/Day41-55/code/hellodjango/hellodjango/settings.py deleted file mode 100644 index 4b118d8..0000000 --- a/Day41-55/code/hellodjango/hellodjango/settings.py +++ /dev/null @@ -1,145 +0,0 @@ -""" -Django settings for hellodjango project. - -Generated by 'django-admin startproject' using Django 2.0.6. - -For more information on this file, see -https://docs.djangoproject.com/en/2.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/2.0/ref/settings/ -""" - -import os - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'j*jr(3-it8$lrp&u@e^!f%8!ws*=jx)ga*ln%l6aqftu-uy1=1' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - -SESSION_EXPIRE_AT_BROWSER_CLOSE = False -SESSION_COOKIE_AGE = 1800 - -# Application definition -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'demo', -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'hellodjango.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'templates'),], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'hellodjango.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/2.0/ref/settings/#databases -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'demo', - 'HOST': 'localhost', - 'PORT': 3306, - 'USER': 'root', - 'PASSWORD': '123456', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/2.0/topics/i18n/ -LANGUAGE_CODE = 'zh-hans' - -TIME_ZONE = 'Asia/Chongqing' - -# internationalization -USE_I18N = True - -# localization -USE_L10N = True - -USE_TZ = True - -SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/2.0/howto/static-files/ -STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] -STATIC_URL = '/static/' - -# APPEND_SLASH = False - -# DEBUG < INFO < WARNING < ERROR < CRITICAL -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', - }, - }, - 'loggers': { - 'django': { - 'handlers': ['console'], - 'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), - }, - }, -} diff --git a/Day41-55/code/hellodjango/hellodjango/urls.py b/Day41-55/code/hellodjango/hellodjango/urls.py deleted file mode 100644 index 5c0e1fb..0000000 --- a/Day41-55/code/hellodjango/hellodjango/urls.py +++ /dev/null @@ -1,31 +0,0 @@ -"""hellodjango URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/2.0/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import path - -from demo import views - -urlpatterns = [ - path('', views.login), - path('login/', views.login), - path('register/', views.register), - path('check/', views.check_username), - path('subjects/', views.show_subjects, name='sub'), - path('subjects//', views.show_teachers), - path('good//', views.make_comment), - path('bad//', views.make_comment), - path('admin/', admin.site.urls), -] diff --git a/Day41-55/code/hellodjango/hellodjango/wsgi.py b/Day41-55/code/hellodjango/hellodjango/wsgi.py deleted file mode 100644 index 661e9b4..0000000 --- a/Day41-55/code/hellodjango/hellodjango/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for hellodjango project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings") - -application = get_wsgi_application() diff --git a/Day41-55/code/hellodjango/manage.py b/Day41-55/code/hellodjango/manage.py deleted file mode 100644 index f45676f..0000000 --- a/Day41-55/code/hellodjango/manage.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings") - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) diff --git a/Day41-55/code/hellodjango/static/images/andrew.png b/Day41-55/code/hellodjango/static/images/andrew.png deleted file mode 100644 index 195e6e7..0000000 Binary files a/Day41-55/code/hellodjango/static/images/andrew.png and /dev/null differ diff --git a/Day41-55/code/hellodjango/static/images/dennis.png b/Day41-55/code/hellodjango/static/images/dennis.png deleted file mode 100644 index 2453340..0000000 Binary files a/Day41-55/code/hellodjango/static/images/dennis.png and /dev/null differ diff --git a/Day41-55/code/hellodjango/static/images/icon-no.svg b/Day41-55/code/hellodjango/static/images/icon-no.svg deleted file mode 100644 index 2e0d383..0000000 --- a/Day41-55/code/hellodjango/static/images/icon-no.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Day41-55/code/hellodjango/static/images/icon-yes.svg b/Day41-55/code/hellodjango/static/images/icon-yes.svg deleted file mode 100644 index 5883d87..0000000 --- a/Day41-55/code/hellodjango/static/images/icon-yes.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Day41-55/code/hellodjango/static/images/ken.png b/Day41-55/code/hellodjango/static/images/ken.png deleted file mode 100644 index 5d322c4..0000000 Binary files a/Day41-55/code/hellodjango/static/images/ken.png and /dev/null differ diff --git a/Day41-55/code/hellodjango/static/js/jquery.min.js b/Day41-55/code/hellodjango/static/js/jquery.min.js deleted file mode 100644 index 4d9b3a2..0000000 --- a/Day41-55/code/hellodjango/static/js/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" - - - \ No newline at end of file diff --git a/Day41-55/code/hellodjango/templates/demo/subject.html b/Day41-55/code/hellodjango/templates/demo/subject.html deleted file mode 100644 index b992ba6..0000000 --- a/Day41-55/code/hellodjango/templates/demo/subject.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - 学科信息 - - - -

学科信息

-
- {% for subject in subjects_list %} -
-
{{ subject.name }}
-
{{ subject.intro }}
-
- {% endfor %} - - \ No newline at end of file diff --git a/Day41-55/code/hellodjango/templates/demo/teacher.html b/Day41-55/code/hellodjango/templates/demo/teacher.html deleted file mode 100644 index 1572bfd..0000000 --- a/Day41-55/code/hellodjango/templates/demo/teacher.html +++ /dev/null @@ -1,82 +0,0 @@ - -{% load staticfiles %} - - - - 讲师信息 - - - - - {% for x in teachers_list %} -
-
-

{{ x.name }}老师 - {{ x.subject.name }}

-

讲师简介

-

{{ x.intro }}

-

教学理念

-

{{ x.motto }}

- 好评({{ x.gcount }}) - 差评({{ x.bcount }}) -
-
- {% if x.photo %} - - {% endif %} -
-
-
- {% endfor %} - - - - \ No newline at end of file diff --git a/Day41-55/code/oa/hrs/__init__.py b/Day41-55/code/oa/hrs/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Day41-55/code/oa/hrs/admin.py b/Day41-55/code/oa/hrs/admin.py deleted file mode 100644 index b2c3716..0000000 --- a/Day41-55/code/oa/hrs/admin.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.contrib import admin - -from hrs.models import Dept, Emp - - -class DeptAdmin(admin.ModelAdmin): - - list_display = ('no', 'name', 'location') - ordering = ('no', ) - - -class EmpAdmin(admin.ModelAdmin): - - list_display = ('no', 'name', 'job', 'sal', 'dept') - search_fields = ('name', 'job') - ordering = ('dept', ) - - -admin.site.register(Dept, DeptAdmin) -admin.site.register(Emp, EmpAdmin) diff --git a/Day41-55/code/oa/hrs/apps.py b/Day41-55/code/oa/hrs/apps.py deleted file mode 100644 index 31e4f12..0000000 --- a/Day41-55/code/oa/hrs/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class HrsConfig(AppConfig): - name = 'hrs' diff --git a/Day41-55/code/oa/hrs/index.html b/Day41-55/code/oa/hrs/index.html deleted file mode 100644 index 6bb1a3b..0000000 --- a/Day41-55/code/oa/hrs/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - Document - - - -
- -
- - - \ No newline at end of file diff --git a/Day41-55/code/oa/hrs/migrations/0001_initial.py b/Day41-55/code/oa/hrs/migrations/0001_initial.py deleted file mode 100644 index b42df39..0000000 --- a/Day41-55/code/oa/hrs/migrations/0001_initial.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 2.0.5 on 2018-05-22 03:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Dept', - fields=[ - ('no', models.IntegerField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=20)), - ('location', models.CharField(max_length=10)), - ], - options={ - 'db_table': 'tb_dept', - }, - ), - migrations.CreateModel( - name='Emp', - fields=[ - ('no', models.IntegerField(primary_key=True, serialize=False)), - ('name', models.CharField(max_length=20)), - ('job', models.CharField(max_length=10)), - ('mgr', models.IntegerField(null=True)), - ('sal', models.DecimalField(decimal_places=2, max_digits=7)), - ('comm', models.DecimalField(decimal_places=2, max_digits=7, null=True)), - ('dept', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='hrs.Dept')), - ], - options={ - 'db_table': 'tb_emp', - }, - ), - ] diff --git a/Day41-55/code/oa/hrs/migrations/0002_auto_20180523_0923.py b/Day41-55/code/oa/hrs/migrations/0002_auto_20180523_0923.py deleted file mode 100644 index 8b9b835..0000000 --- a/Day41-55/code/oa/hrs/migrations/0002_auto_20180523_0923.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 2.0.5 on 2018-05-23 01:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrs', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='dept', - name='excellent', - field=models.BooleanField(default=0, verbose_name='是否优秀'), - ), - migrations.AlterField( - model_name='dept', - name='location', - field=models.CharField(max_length=10, verbose_name='部门所在地'), - ), - migrations.AlterField( - model_name='dept', - name='name', - field=models.CharField(max_length=20, verbose_name='部门名称'), - ), - migrations.AlterField( - model_name='dept', - name='no', - field=models.IntegerField(primary_key=True, serialize=False, verbose_name='部门编号'), - ), - migrations.AlterField( - model_name='emp', - name='comm', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True), - ), - migrations.AlterField( - model_name='emp', - name='mgr', - field=models.IntegerField(blank=True, null=True), - ), - ] diff --git a/Day41-55/code/oa/hrs/migrations/0003_auto_20180524_1646.py b/Day41-55/code/oa/hrs/migrations/0003_auto_20180524_1646.py deleted file mode 100644 index c4054fc..0000000 --- a/Day41-55/code/oa/hrs/migrations/0003_auto_20180524_1646.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.0.5 on 2018-05-24 08:46 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrs', '0002_auto_20180523_0923'), - ] - - operations = [ - migrations.AlterField( - model_name='emp', - name='mgr', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrs.Emp'), - ), - ] diff --git a/Day41-55/code/oa/hrs/migrations/0004_auto_20180815_1345.py b/Day41-55/code/oa/hrs/migrations/0004_auto_20180815_1345.py deleted file mode 100644 index 91f9da1..0000000 --- a/Day41-55/code/oa/hrs/migrations/0004_auto_20180815_1345.py +++ /dev/null @@ -1,66 +0,0 @@ -# Generated by Django 2.0.7 on 2018-08-15 05:45 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrs', '0003_auto_20180524_1646'), - ] - - operations = [ - migrations.RemoveField( - model_name='dept', - name='excellent', - ), - migrations.AlterField( - model_name='dept', - name='location', - field=models.CharField(db_column='dloc', max_length=10, verbose_name='部门所在地'), - ), - migrations.AlterField( - model_name='dept', - name='name', - field=models.CharField(db_column='dname', max_length=20, verbose_name='部门名称'), - ), - migrations.AlterField( - model_name='dept', - name='no', - field=models.IntegerField(db_column='deptno', primary_key=True, serialize=False, verbose_name='部门编号'), - ), - migrations.AlterField( - model_name='emp', - name='dept', - field=models.ForeignKey(db_column='dno', on_delete=django.db.models.deletion.PROTECT, to='hrs.Dept'), - ), - migrations.AlterField( - model_name='emp', - name='job', - field=models.CharField(db_column='job', max_length=10), - ), - migrations.AlterField( - model_name='emp', - name='mgr', - field=models.IntegerField(blank=True, null=True), - ), - migrations.AlterField( - model_name='emp', - name='name', - field=models.CharField(db_column='ename', max_length=20), - ), - migrations.AlterField( - model_name='emp', - name='no', - field=models.IntegerField(db_column='empno', primary_key=True, serialize=False), - ), - migrations.AlterModelTable( - name='dept', - table='TbDept', - ), - migrations.AlterModelTable( - name='emp', - table='TbEmp', - ), - ] diff --git a/Day41-55/code/oa/hrs/migrations/__init__.py b/Day41-55/code/oa/hrs/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Day41-55/code/oa/hrs/models.py b/Day41-55/code/oa/hrs/models.py deleted file mode 100644 index deb953f..0000000 --- a/Day41-55/code/oa/hrs/models.py +++ /dev/null @@ -1,35 +0,0 @@ -from django.db import models - -# ORM - 对象关系映射 -# 对象模型 <---> 关系模型 -# 实体类 <---> 二维表 -# 属性 <---> 列 -# 对象 <---> 记录 - - -class Dept(models.Model): - no = models.IntegerField(db_column='deptno', primary_key=True, verbose_name='部门编号') - name = models.CharField(db_column='dname', max_length=20, verbose_name='部门名称') - location = models.CharField(db_column='dloc', max_length=10, verbose_name='部门所在地') - # excellent = models.BooleanField(default=0, verbose_name='是否优秀') - - def __str__(self): - return self.name - - class Meta: - db_table = 'TbDept' - - -class Emp(models.Model): - no = models.IntegerField(db_column='empno', primary_key=True) - name = models.CharField(db_column='ename', max_length=20) - job = models.CharField(db_column='job', max_length=10) - # mgr = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL) - mgr = models.IntegerField(null=True, blank=True) - sal = models.DecimalField(max_digits=7, decimal_places=2) - comm = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True) - dept = models.ForeignKey(Dept, db_column='dno', on_delete=models.PROTECT) - - class Meta: - db_table = 'TbEmp' - diff --git a/Day41-55/code/oa/hrs/tests.py b/Day41-55/code/oa/hrs/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/Day41-55/code/oa/hrs/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/Day41-55/code/oa/hrs/urls.py b/Day41-55/code/oa/hrs/urls.py deleted file mode 100644 index 91a2660..0000000 --- a/Day41-55/code/oa/hrs/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.urls import path - -from hrs import views - -urlpatterns = [ - path('depts', views.depts, name='depts'), - # url('depts/emps/(?P[0-9]+)', views.emps, name='empsindept'), - path('depts/emps/', views.emps, name='empsindept'), - path('deldept/', views.del_dept, name='ddel') -] diff --git a/Day41-55/code/oa/hrs/views.py b/Day41-55/code/oa/hrs/views.py deleted file mode 100644 index 269c819..0000000 --- a/Day41-55/code/oa/hrs/views.py +++ /dev/null @@ -1,47 +0,0 @@ -from django.http import HttpResponse -from django.shortcuts import render, redirect -from django.db.models import ObjectDoesNotExist - -from json import dumps - -from hrs.models import Dept, Emp - - -def index(request): - ctx = { - 'greeting': '你好,世界!' - } - return render(request, 'index.html', context=ctx) - - -def del_dept(request, no='0'): - try: - Dept.objects.get(pk=no).delete() - ctx = {'code': 200} - except (ObjectDoesNotExist, ValueError): - ctx = {'code': 404} - return HttpResponse( - dumps(ctx), content_type='application/json; charset=utf-8') - # 重定向 - 给浏览器一个URL, 让浏览器重新请求指定的页面 - # return redirect(reverse('depts')) - # return depts(request) - - -def emps(request, no='0'): - # no = request.GET['no'] - # dept = Dept.objects.get(no=no) - # ForeignKey(Dept, on_delete=models.PROTECT, related_name='emps') - # dept.emps.all() - # emps_list = dept.emp_set.all() - # all() / filter() ==> QuerySet - # QuerySet使用了惰性查询 - 如果不是非得取到数据那么不会发出SQL语句 - # 这样做是为了节省服务器内存的开销 - 延迟加载 - 节省空间势必浪费时间 - emps_list = list(Emp.objects.filter(dept__no=no).select_related('dept')) - ctx = {'emp_list': emps_list, 'dept_name': emps_list[0].dept.name} \ - if len(emps_list) > 0 else {} - return render(request, 'emp.html', context=ctx) - - -def depts(request): - ctx = {'dept_list': Dept.objects.all()} - return render(request, 'dept.html', context=ctx) diff --git a/Day41-55/code/oa/manage.py b/Day41-55/code/oa/manage.py deleted file mode 100644 index 2deb2e4..0000000 --- a/Day41-55/code/oa/manage.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "oa.settings") - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) diff --git a/Day41-55/code/oa/oa/__init__.py b/Day41-55/code/oa/oa/__init__.py deleted file mode 100644 index 9c0f756..0000000 --- a/Day41-55/code/oa/oa/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import pymysql - -pymysql.install_as_MySQLdb() diff --git a/Day41-55/code/oa/oa/settings.py b/Day41-55/code/oa/oa/settings.py deleted file mode 100644 index e352eb9..0000000 --- a/Day41-55/code/oa/oa/settings.py +++ /dev/null @@ -1,146 +0,0 @@ -""" -Django settings for oa project. - -Generated by 'django-admin startproject' using Django 2.0.5. - -For more information on this file, see -https://docs.djangoproject.com/en/2.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/2.0/ref/settings/ -""" - -import os - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'c^dt134g38w^r4+0f$dpoe)1d5)q1kn+2%g--#!*+xvvn&93=_' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'hrs', -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'oa.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'templates')] - , - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'oa.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/2.0/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'HRS', - 'HOST': 'localhost', - 'PORT': 3306, - 'USER': 'root', - 'PASSWORD': '123456' - } -} - - -# Password validation -# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/2.0/topics/i18n/ - -LANGUAGE_CODE = 'zh-hans' - -TIME_ZONE = 'Asia/Chongqing' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/2.0/howto/static-files/ - -STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] - -STATIC_URL = '/static/' - -# 配置将日志输出到控制台 日志级别为DEBUG(最详细的日志) -# DEBUG < INFO < WARNING < ERROR < CRITICAL -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', - }, - }, - 'loggers': { - 'django': { - 'handlers': ['console'], - 'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), - }, - }, -} diff --git a/Day41-55/code/oa/oa/urls.py b/Day41-55/code/oa/oa/urls.py deleted file mode 100644 index cc5869a..0000000 --- a/Day41-55/code/oa/oa/urls.py +++ /dev/null @@ -1,25 +0,0 @@ -"""oa URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/2.0/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import path, include - -from hrs import views - -urlpatterns = [ - path('', views.index), - path('admin/', admin.site.urls), - path('hrs/', include('hrs.urls')), -] diff --git a/Day41-55/code/oa/oa/wsgi.py b/Day41-55/code/oa/oa/wsgi.py deleted file mode 100644 index 52b5eee..0000000 --- a/Day41-55/code/oa/oa/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for oa project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "oa.settings") - -application = get_wsgi_application() diff --git a/Day41-55/code/oa/requirements.txt b/Day41-55/code/oa/requirements.txt deleted file mode 100644 index 76e1184..0000000 --- a/Day41-55/code/oa/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -asn1crypto==0.24.0 -cffi==1.11.5 -cryptography==2.3 -Django>=2.1.6 -idna==2.7 -pycparser==2.18 -PyMySQL==0.9.2 -pytz==2018.5 -six==1.11.0 diff --git a/Day41-55/code/oa/static/css/bootstrap.min.css b/Day41-55/code/oa/static/css/bootstrap.min.css deleted file mode 100644 index ed3905e..0000000 --- a/Day41-55/code/oa/static/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/Day41-55/code/oa/static/images/mm.jpg b/Day41-55/code/oa/static/images/mm.jpg deleted file mode 100644 index bc86c7c..0000000 Binary files a/Day41-55/code/oa/static/images/mm.jpg and /dev/null differ diff --git a/Day41-55/code/oa/static/js/bootstrap.min.js b/Day41-55/code/oa/static/js/bootstrap.min.js deleted file mode 100644 index 9bcd2fc..0000000 --- a/Day41-55/code/oa/static/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/Day41-55/code/oa/static/js/jquery.min.js b/Day41-55/code/oa/static/js/jquery.min.js deleted file mode 100644 index 4d9b3a2..0000000 --- a/Day41-55/code/oa/static/js/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" - - - - \ No newline at end of file diff --git a/Day41-55/code/oa/templates/emp.html b/Day41-55/code/oa/templates/emp.html deleted file mode 100644 index 8bf1997..0000000 --- a/Day41-55/code/oa/templates/emp.html +++ /dev/null @@ -1,60 +0,0 @@ - -{% load static %} - - - - 员工 - - - -
-
-
-

{{ dept_name }}员工信息

-
-
-
-
-
- {% if emp_list %} - - - - - - - - - - - - {% for emp in emp_list %} - - - - - - - - {% endfor %} - -
编号姓名职位月薪部门名称
{{ emp.no }}{{ emp.name }}{{ emp.job }}{{ emp.sal }}{{ dept_name }}
- {% else %} -

此部门暂时没有员工!

- {% endif %} -
-
-
-
- 返回部门列表 -
- - - - - \ No newline at end of file diff --git a/Day41-55/code/oa/templates/index.html b/Day41-55/code/oa/templates/index.html deleted file mode 100644 index 61bac29..0000000 --- a/Day41-55/code/oa/templates/index.html +++ /dev/null @@ -1,13 +0,0 @@ - -{% load staticfiles %} - - - - 首页 - - -

{{ greeting }}

-
- - - \ No newline at end of file diff --git a/Day41-55/res/cookie_xstorage_indexeddb.png b/Day41-55/res/cookie_xstorage_indexeddb.png new file mode 100644 index 0000000..a08c257 Binary files /dev/null and b/Day41-55/res/cookie_xstorage_indexeddb.png differ diff --git a/Day41-55/res/echarts_bar_graph.png b/Day41-55/res/echarts_bar_graph.png new file mode 100644 index 0000000..a77571f Binary files /dev/null and b/Day41-55/res/echarts_bar_graph.png differ diff --git a/Day41-55/res/sessionid_from_cookie.png b/Day41-55/res/sessionid_from_cookie.png new file mode 100644 index 0000000..6dfc76e Binary files /dev/null and b/Day41-55/res/sessionid_from_cookie.png differ diff --git a/Day41-55/res/show-subjects.png b/Day41-55/res/show-subjects.png deleted file mode 100644 index 1a83ccb..0000000 Binary files a/Day41-55/res/show-subjects.png and /dev/null differ diff --git a/Day41-55/res/show-teachers.png b/Day41-55/res/show-teachers.png deleted file mode 100644 index fd46619..0000000 Binary files a/Day41-55/res/show-teachers.png and /dev/null differ diff --git a/Day41-55/res/show_subjects.png b/Day41-55/res/show_subjects.png new file mode 100644 index 0000000..9e7612d Binary files /dev/null and b/Day41-55/res/show_subjects.png differ diff --git a/Day41-55/res/show_teachers.png b/Day41-55/res/show_teachers.png new file mode 100644 index 0000000..031ac57 Binary files /dev/null and b/Day41-55/res/show_teachers.png differ diff --git a/Day56-60/01.Flask入门.md b/Day56-60/56.Flask入门.md similarity index 100% rename from Day56-60/01.Flask入门.md rename to Day56-60/56.Flask入门.md diff --git a/Day56-60/02.模板的使用.md b/Day56-60/57.模板的使用.md similarity index 100% rename from Day56-60/02.模板的使用.md rename to Day56-60/57.模板的使用.md diff --git a/Day56-60/03.表单的处理.md b/Day56-60/58.表单的处理.md similarity index 100% rename from Day56-60/03.表单的处理.md rename to Day56-60/58.表单的处理.md diff --git a/Day56-60/04.数据库操作.md b/Day56-60/59.数据库操作.md similarity index 100% rename from Day56-60/04.数据库操作.md rename to Day56-60/59.数据库操作.md diff --git a/Day56-60/05.项目实战.md b/Day56-60/60.项目实战.md similarity index 100% rename from Day56-60/05.项目实战.md rename to Day56-60/60.项目实战.md diff --git a/Day61-65/01.预备知识.md b/Day61-65/61.预备知识.md similarity index 100% rename from Day61-65/01.预备知识.md rename to Day61-65/61.预备知识.md diff --git a/Day61-65/02.Tornado入门.md b/Day61-65/62.Tornado入门.md similarity index 100% rename from Day61-65/02.Tornado入门.md rename to Day61-65/62.Tornado入门.md diff --git a/Day61-65/03.异步化.md b/Day61-65/63.异步化.md similarity index 100% rename from Day61-65/03.异步化.md rename to Day61-65/63.异步化.md diff --git a/Day61-65/04.WebSocket的应用.md b/Day61-65/64.WebSocket的应用.md similarity index 100% rename from Day61-65/04.WebSocket的应用.md rename to Day61-65/64.WebSocket的应用.md diff --git a/Day61-65/05.项目实战.md b/Day61-65/65.项目实战.md similarity index 100% rename from Day61-65/05.项目实战.md rename to Day61-65/65.项目实战.md diff --git a/Day66-75/02.数据采集和解析.md b/Day66-75/02.数据采集和解析.md deleted file mode 100644 index 50b532b..0000000 --- a/Day66-75/02.数据采集和解析.md +++ /dev/null @@ -1,170 +0,0 @@ -## 数据采集和解析 - -通过[《网络爬虫和相关工具》](./01.网络爬虫和相关工具.md)一文,我们已经了解到了开发一个爬虫需要做的工作以及一些常见的问题,至此我们可以对爬虫开发需要做的工作以及相关的技术做一个简单的汇总,这其中可能会有一些我们之前没有使用过的第三方库,不过别担心,这些内容我们稍后都会一一讲到。 - -1. 下载数据 - urllib / requests / aiohttp。 -2. 解析数据 - re / lxml / beautifulsoup4(bs4)/ pyquery。 -3. 缓存和持久化 - pymysql / sqlalchemy / peewee/ redis / pymongo。 -4. 生成数字签名 - hashlib。 -5. 序列化和压缩 - pickle / json / zlib。 -6. 调度器 - 进程(multiprocessing) / 线程(threading) / 协程(coroutine)。 - -### HTML页面分析 - -```HTML - - - - - 首页 - - -

Hello, world!

-

这是一个神奇的网站!

-
-
-

这是一个例子程序

-

静夜思

-

床前明月光

-

疑似地上霜

-

举头望明月

- -
- 腾讯网 - 美女 - 凯蒂猫 - 美女 - - - - - - - - -
姓名上场时间得分篮板助攻
- - -``` - -如果你对上面的代码并不感到陌生,那么你一定知道HTML页面通常由三部分构成,分别是用来承载内容的Tag(标签)、负责渲染页面的CSS(层叠样式表)以及控制交互式行为的JavaScript。通常,我们可以在浏览器的右键菜单中通过“查看网页源代码”的方式获取网页的代码并了解页面的结构;当然,我们也可以通过浏览器提供的开发人员工具来了解网页更多的信息。 - -#### 使用requests获取页面 - -1. GET请求和POST请求。 - - ```Python - - - ``` - -2. URL参数和请求头。 - - ```Python - - - ``` - -3. 复杂的POST请求(文件上传)。 - - ```Python - - - ``` - -4. 操作Cookie。 - - ```Python - - - ``` - -5. 设置代理服务器。 - - ```Python - - - ``` - -> 说明:关于requests的详细用法可以参考它的[官方文档](http://docs.python-requests.org/zh_CN/latest/user/quickstart.html)。 - -### 四种采集方式 - -#### 四种采集方式的比较 - -| 抓取方法 | 速度 | 使用难度 | 备注 | -| ---------- | ------------------------- | -------- | ------------------------------------------ | -| 正则表达式 | 快 | 困难 | 常用正则表达式
在线正则表达式测试 | -| lxml | 快 | 一般 | 需要安装C语言依赖库
唯一支持XML的解析器 | -| Beautiful | 较快/较慢(取决于解析器) | 简单 | | -| PyQuery | 较快 | 简单 | Python版的jQuery | - -> 说明:Beautiful的解析器包括:Python标准库(html.parser)、lxml的HTML解析器、lxml的XML解析器和html5lib。 - -#### 使用正则表达式 - -如果你对正则表达式没有任何的概念,那么推荐先阅读[《正则表达式30分钟入门教程》](),然后再阅读我们之前讲解在Python中如何使用正则表达式一文。 - -#### 使用XPath和Lxml - - - -#### BeautifulSoup的使用 - -BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。 - -1. 遍历文档树 - - 获取标签 - - 获取标签属性 - - 获取标签内容 - - 获取子(孙)节点 - - 获取父节点/祖先节点 - - 获取兄弟节点 -2. 搜索树节点 - - find / find_all:字符串、正则表达式、列表、True、函数或Lambda。 - - select_one / select:CSS选择器 - -> 说明:更多内容可以参考BeautifulSoup的[官方文档](https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html)。 - -#### PyQuery的使用 - -pyquery相当于jQuery的Python实现,可以用于解析HTML网页。 - - - -### 实例 - 获取知乎发现上的问题链接 - -```Python -from urllib.parse import urljoin - -import re -import requests - -from bs4 import BeautifulSoup - - -def main(): - headers = {'user-agent': 'Baiduspider'} - proxies = { - 'http': 'http://122.114.31.177:808' - } - base_url = 'https://www.zhihu.com/' - seed_url = urljoin(base_url, 'explore') - resp = requests.get(seed_url, - headers=headers, - proxies=proxies) - soup = BeautifulSoup(resp.text, 'lxml') - href_regex = re.compile(r'^/question') - link_set = set() - for a_tag in soup.find_all('a', {'href': href_regex}): - if 'href' in a_tag.attrs: - href = a_tag.attrs['href'] - full_url = urljoin(base_url, href) - link_set.add(full_url) - print('Total %d question pages found.' % len(link_set)) - - -if __name__ == '__main__': - main() -``` - diff --git a/Day66-75/01.网络爬虫和相关工具.md b/Day66-75/66.网络爬虫和相关工具.md similarity index 93% rename from Day66-75/01.网络爬虫和相关工具.md rename to Day66-75/66.网络爬虫和相关工具.md index 371f21e..16aa85a 100644 --- a/Day66-75/01.网络爬虫和相关工具.md +++ b/Day66-75/66.网络爬虫和相关工具.md @@ -1,6 +1,6 @@ ## 网络爬虫和相关工具 -### 网络爬虫 +### 网络爬虫的概念 网络爬虫(web crawler),以前经常称之为网络蜘蛛(spider),是按照一定的规则自动浏览万维网并获取信息的机器人程序(或脚本),曾经被广泛的应用于互联网搜索引擎。使用过互联网和浏览器的人都知道,网页中除了供用户阅读的文字信息之外,还包含一些超链接。网络爬虫系统正是通过网页中的超链接信息不断获得网络上的其它页面。正因如此,网络数据采集的过程就像一个爬虫或者蜘蛛在网络上漫游,所以才被形象的称为网络爬虫或者网络蜘蛛。 @@ -100,7 +100,7 @@ HTTP响应(响应行+响应头+空行+消息体): ![](./res/http-response.png) -> 说明:但愿这两张如同泛黄的照片般的截图帮助你大概的了解到HTTP是一个怎样的协议。 +> 说明:但愿这两张如同泛黄照片般的截图帮助你大概的了解到HTTP是一个怎样的协议。 #### 相关工具 @@ -115,7 +115,11 @@ HTTP响应(响应行+响应头+空行+消息体): 3. HTTPie:命令行HTTP客户端。 ```Shell - $ http --header http://www.scu.edu.cn + pip3 install httpie + ``` + + ```Shell + http --header http://www.scu.edu.cn HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: private, max-age=600 @@ -136,6 +140,10 @@ HTTP响应(响应行+响应头+空行+消息体): 4. BuiltWith:识别网站所用技术的工具。 + ```Shell + pip3 install builtwith + ``` + ```Python >>> import builtwith >>> builtwith.parse('http://www.bootcss.com/') @@ -149,6 +157,10 @@ HTTP响应(响应行+响应头+空行+消息体): 5. python-whois:查询网站所有者的工具。 + ```Shell + pip3 install python-whois + ``` + ```Python >>> import whois >>> whois.whois('baidu.com') @@ -158,13 +170,10 @@ HTTP响应(响应行+响应头+空行+消息体): 6. robotparser:解析robots.txt的工具。 ```Python - >>> from urllib import robotparser >>> parser = robotparser.RobotFileParser() >>> parser.set_url('https://www.taobao.com/robots.txt') >>> parser.read() - >>> parser.can_fetch('Hellokitty', 'http://www.taobao.com/article') - False >>> parser.can_fetch('Baiduspider', 'http://www.taobao.com/article') True >>> parser.can_fetch('Baiduspider', 'http://www.taobao.com/product') @@ -200,8 +209,8 @@ import ssl from pymysql import Error -# 通过指定的字符集对页面进行解码(不是每个网站都将字符集设置为utf-8) def decode_page(page_bytes, charsets=('utf-8',)): + """通过指定的字符集对页面进行解码(不是每个网站都将字符集设置为utf-8)""" page_html = None for charset in charsets: try: @@ -213,8 +222,8 @@ def decode_page(page_bytes, charsets=('utf-8',)): return page_html -# 获取页面的HTML代码(通过递归实现指定次数的重试操作) def get_page_html(seed_url, *, retry_times=3, charsets=('utf-8',)): + """获取页面的HTML代码(通过递归实现指定次数的重试操作)""" page_html = None try: page_html = decode_page(urlopen(seed_url).read(), charsets) @@ -226,14 +235,14 @@ def get_page_html(seed_url, *, retry_times=3, charsets=('utf-8',)): return page_html -# 从页面中提取需要的部分(通常是链接也可以通过正则表达式进行指定) def get_matched_parts(page_html, pattern_str, pattern_ignore_case=re.I): + """从页面中提取需要的部分(通常是链接也可以通过正则表达式进行指定)""" pattern_regex = re.compile(pattern_str, pattern_ignore_case) return pattern_regex.findall(page_html) if page_html else [] -# 开始执行爬虫程序并对指定的数据进行持久化操作 def start_crawl(seed_url, match_pattern, *, max_depth=-1): + """开始执行爬虫程序并对指定的数据进行持久化操作""" conn = pymysql.connect(host='localhost', port=3306, database='crawler', user='root', password='123456', charset='utf8') @@ -268,6 +277,7 @@ def start_crawl(seed_url, match_pattern, *, max_depth=-1): def main(): + """主函数""" ssl._create_default_https_context = ssl._create_unverified_context start_crawl('http://sports.sohu.com/nba_a.shtml', r']+test=a\s[^>]*href=["\'](.*?)["\']', @@ -276,10 +286,9 @@ def main(): if __name__ == '__main__': main() - ``` -由于使用了MySQL实现持久化操作,所以要先启动MySQL服务器再运行该程序。 +由于使用了MySQL实现持久化操作,所以要先启动MySQL服务器并创建名为`crawler`的数据库和名为`tb_result`的二维表才能运行该程序。 ### 爬虫注意事项 @@ -287,7 +296,7 @@ if __name__ == '__main__': 1. 处理相对链接。有的时候我们从页面中获取的链接不是一个完整的绝对链接而是一个相对链接,这种情况下需要将其与URL前缀进行拼接(`urllib.parse`中的`urljoin()`函数可以完成此项操作)。 -2. 设置代理服务。有些网站会限制访问的区域(例如美国的Netflix屏蔽了很多国家的访问),有些爬虫需要隐藏自己的身份,在这种情况下可以设置使用代理服务器,代理服务器有免费(如[西刺代理](http://www.xicidaili.com/)、[快代理](https://www.kuaidaili.com/free/))和付费两种(如[讯代理](http://www.xdaili.cn/)、[阿布云代理](https://www.abuyun.com/)),付费的一般稳定性和可用性都更好,可以通过`urllib.request`中的`ProxyHandler`来为请求设置代理。 +2. 设置代理服务。有些网站会限制访问的区域(例如美国的Netflix屏蔽了很多国家的访问),有些爬虫需要隐藏自己的身份,在这种情况下可以设置使用代理服务器,代理服务器有免费的服务器和付费的商业服务器,但后者稳定性和可用性都更好,强烈建议在商业项目中使用付费的代理服务器。可以通过修改`urllib.request`中的`ProxyHandler`来为请求设置代理服务器。 3. 限制下载速度。如果我们的爬虫获取网页的速度过快,可能就会面临被封禁或者产生“损害动产”的风险(这个可能会导致吃官司且败诉),可以在两次下载之间添加延时从而对爬虫进行限速。 @@ -305,7 +314,7 @@ if __name__ == '__main__': web_page = urllib.request.urlopen(request, context=context) ``` - - 设置全局的取消证书验证 + - 设置全局性取消证书验证 ```Python import ssl diff --git a/Day66-75/67.数据采集和解析.md b/Day66-75/67.数据采集和解析.md new file mode 100644 index 0000000..52227ae --- /dev/null +++ b/Day66-75/67.数据采集和解析.md @@ -0,0 +1,263 @@ +## 数据采集和解析 + +通过上一个章节的讲解,我们已经了解到了开发一个爬虫需要做的工作以及一些常见的问题,下面我们给出一个爬虫开发相关技术的清单以及这些技术涉及到的标准库和第三方库,稍后我们会一一介绍这些内容。 + +1. 下载数据 - **urllib** / **requests** / **aiohttp**。 +2. 解析数据 - **re** / **lxml** / **beautifulsoup4** / **pyquery**。 +3. 缓存和持久化 - **pymysql** / **sqlalchemy** / **peewee**/ **redis** / **pymongo**。 +4. 生成数字签名 - **hashlib**。 +5. 序列化和压缩 - **pickle** / **json** / **zlib**。 +6. 调度器 - 多进程(**multiprocessing**) / 多线程(**threading**)。 + +### HTML页面 + +```HTML + + + + Home + + + +
+
+

Yoko's Kitchen

+ +
+
+
+
+ Bok Choi +
Bok Choi
+
+
+

Japanese Vegetarian

+

Five week course in London

+
+

A five week introduction to traditional Japanese vegetarian meals, teaching you a selection of rice and noodle dishes.

+
+
+
+ Teriyaki sauce +
Teriyaki Sauce
+
+
+

Sauces Masterclass

+

One day workshop

+
+

An intensive one-day course looking at how to create the most delicious sauces for use in a range of Japanese cookery.

+
+
+ +
+ © 2011 Yoko's Kitchen +
+
+ + + +``` + +如果你对上面的代码并不感到陌生,那么你一定知道HTML页面通常由三部分构成,分别是用来承载内容的Tag(标签)、负责渲染页面的CSS(层叠样式表)以及控制交互式行为的JavaScript。通常,我们可以在浏览器的右键菜单中通过“查看网页源代码”的方式获取网页的代码并了解页面的结构;当然,我们也可以通过浏览器提供的开发人员工具来了解更多的信息。 + +#### 使用requests获取页面 + +1. GET请求和POST请求。 + + ```Python + + ``` + +2. URL参数和请求头。 + + ```Python + + ``` + +3. 复杂的POST请求(文件上传)。 + + ```Python + + ``` + +4. 操作Cookie。 + + ```Python + + ``` + +5. 设置代理服务器。 + + ```Python + + ``` + +> 说明:关于requests的详细用法可以参考它的[官方文档](http://docs.python-requests.org/zh_CN/latest/user/quickstart.html)。 + +### 页面解析 + +#### 几种解析方式的比较 + +| 解析方式 | 对应的模块 | 速度 | 使用难度 | 备注 | +| -------------- | ------------- | ------ | -------- | ------------------------------------------- | +| 正则表达式解析 | re | 快 | 困难 | 常用正则表达式
在线正则表达式测试 | +| XPath解析 | lxml | 快 | 一般 | 需要安装C语言依赖库
唯一支持XML的解析器 | +| CSS选择器解析 | bs4 / pyquery | 不确定 | 简单 | | + +> 说明:BeautifulSoup可选的解析器包括:Python标准库(html.parser)、lxml的HTML解析器、lxml的XML解析器和html5lib。 + +#### 使用正则表达式解析页面 + +如果你对正则表达式没有任何的概念,那么推荐先阅读[《正则表达式30分钟入门教程》](),然后再阅读我们之前讲解在Python中如何使用正则表达式一文。 + + + +#### XPath解析和lxml + +XPath是在XML文档中查找信息的一种语法,它使用路径表达式来选取XML文档中的节点或者节点集。这里所说的XPath节点包括元素、属性、文本、命名空间、处理指令、注释、根节点等。 + +```XML + + + + Harry Potter + 29.99 + + + Learning XML + 39.95 + + +``` +对于上面的XML文件,我们可以用如下所示的XPath语法获取文档中的节点。 + +| 路径表达式 | 结果 | +| --------------- | ------------------------------------------------------------ | +| bookstore | 选取 bookstore 元素的所有子节点。 | +| /bookstore | 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! | +| bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 | +| //book | 选取所有 book 子元素,而不管它们在文档中的位置。 | +| bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 | +| //@lang | 选取名为 lang 的所有属性。 | + +在使用XPath语法时,还可以使用XPath中的谓词。 + +| 路径表达式 | 结果 | +| ---------------------------------- | ------------------------------------------------------------ | +| /bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 | +| /bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 | +| /bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 | +| /bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 | +| //title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 | +| //title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 | +| /bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 | +| /bookstore/book[price>35.00]/title | 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。 | + +XPath还支持通配符用法,如下所示。 + +| 路径表达式 | 结果 | +| ------------ | --------------------------------- | +| /bookstore/* | 选取 bookstore 元素的所有子元素。 | +| //* | 选取文档中的所有元素。 | +| //title[@*] | 选取所有带有属性的 title 元素。 | + +如果要选取多个节点,可以使用如下所示的方法。 + +| 路径表达式 | 结果 | +| -------------------------------- | ------------------------------------------------------------ | +| //book/title \| //book/price | 选取 book 元素的所有 title 和 price 元素。 | +| //title \| //price | 选取文档中的所有 title 和 price 元素。 | +| /bookstore/book/title \| //price | 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。 | + +> 说明:上面的例子来自于菜鸟教程网站上[XPath教程](),有兴趣的读者可以自行阅读原文。 + +当然,如果不理解或者不太熟悉XPath语法,可以在Chrome浏览器中按照如下所示的方法查看元素的XPath语法。 + +![](./res/douban-xpath.png) + + + +### BeautifulSoup的使用 + +BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。 + +1. 遍历文档树 + - 获取标签 + - 获取标签属性 + - 获取标签内容 + - 获取子(孙)节点 + - 获取父节点/祖先节点 + - 获取兄弟节点 +2. 搜索树节点 + - find / find_all + - select_one / select + +> 说明:更多内容可以参考BeautifulSoup的[官方文档](https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html)。 + +### PyQuery的使用 + +pyquery相当于jQuery的Python实现,可以用于解析HTML网页。 + +### 实例 - 获取知乎发现上的问题链接 + +```Python +from urllib.parse import urljoin + +import re +import requests + +from bs4 import BeautifulSoup + + +def main(): + headers = {'user-agent': 'Baiduspider'} + proxies = { + 'http': 'http://122.114.31.177:808' + } + base_url = 'https://www.zhihu.com/' + seed_url = urljoin(base_url, 'explore') + resp = requests.get(seed_url, + headers=headers, + proxies=proxies) + soup = BeautifulSoup(resp.text, 'lxml') + href_regex = re.compile(r'^/question') + link_set = set() + for a_tag in soup.find_all('a', {'href': href_regex}): + if 'href' in a_tag.attrs: + href = a_tag.attrs['href'] + full_url = urljoin(base_url, href) + link_set.add(full_url) + print('Total %d question pages found.' % len(link_set)) + + +if __name__ == '__main__': + main() +``` + diff --git a/Day66-75/03.存储数据.md b/Day66-75/68.存储数据.md similarity index 100% rename from Day66-75/03.存储数据.md rename to Day66-75/68.存储数据.md diff --git a/Day66-75/04.并发下载.md b/Day66-75/69.并发下载.md similarity index 100% rename from Day66-75/04.并发下载.md rename to Day66-75/69.并发下载.md diff --git a/Day66-75/05.解析动态内容.md b/Day66-75/70.解析动态内容.md similarity index 100% rename from Day66-75/05.解析动态内容.md rename to Day66-75/70.解析动态内容.md diff --git a/Day66-75/06.表单交互和验证码处理.md b/Day66-75/71.表单交互和验证码处理.md similarity index 98% rename from Day66-75/06.表单交互和验证码处理.md rename to Day66-75/71.表单交互和验证码处理.md index ff4fa75..e0e9c28 100644 --- a/Day66-75/06.表单交互和验证码处理.md +++ b/Day66-75/71.表单交互和验证码处理.md @@ -22,8 +22,6 @@ ![](./res/tesseract.gif) -#### 改善OCR - #### 处理更复杂的验证码 diff --git a/Day66-75/07.Scrapy入门.md b/Day66-75/72.Scrapy入门.md similarity index 75% rename from Day66-75/07.Scrapy入门.md rename to Day66-75/72.Scrapy入门.md index 56ab2d1..aaaab43 100644 --- a/Day66-75/07.Scrapy入门.md +++ b/Day66-75/72.Scrapy入门.md @@ -302,76 +302,3 @@ Scrapy的整个数据处理流程由Scrapy引擎进行控制,通常的运转 HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' ``` -### 补充说明 - -#### XPath语法 - -1. XPath路径表达式:XPath使用路径表达式来选取XML文档中的节点或者节点集。 - -2. XPath节点:元素、属性、文本、命名空间、处理指令、注释、根节点。 - -3. XPath语法。(注:下面的例子来自于[菜鸟教程](http://www.runoob.com/)网站的[XPath教程](http://www.runoob.com/xpath/xpath-syntax.html)。) - - XML文件。 - - ```XML - - - - - - Harry Potter - 29.99 - - - - Learning XML - 39.95 - - - - ``` - XPath语法。 - - | 路径表达式 | 结果 | - | --------------- | ------------------------------------------------------------ | - | bookstore | 选取 bookstore 元素的所有子节点。 | - | /bookstore | 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! | - | bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 | - | //book | 选取所有 book 子元素,而不管它们在文档中的位置。 | - | bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 | - | //@lang | 选取名为 lang 的所有属性。 | - - XPath谓词。 - - | 路径表达式 | 结果 | - | ---------------------------------- | ------------------------------------------------------------ | - | /bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 | - | /bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 | - | /bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 | - | /bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 | - | //title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 | - | //title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 | - | /bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 | - | /bookstore/book[price>35.00]/title | 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。 | - - 通配符用法。 - - | 路径表达式 | 结果 | - | ------------ | --------------------------------- | - | /bookstore/* | 选取 bookstore 元素的所有子元素。 | - | //* | 选取文档中的所有元素。 | - | //title[@*] | 选取所有带有属性的 title 元素。 | - - 选取多个路径。 - - | 路径表达式 | 结果 | - | -------------------------------- | ------------------------------------------------------------ | - | //book/title \| //book/price | 选取 book 元素的所有 title 和 price 元素。 | - | //title \| //price | 选取文档中的所有 title 和 price 元素。 | - | /bookstore/book/title \| //price | 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。 | - -#### 在Chrome浏览器中查看元素XPath语法 - -![](./res/douban-xpath.png) - diff --git a/Day66-75/08.Scrapy高级应用.md b/Day66-75/73.Scrapy高级应用.md similarity index 100% rename from Day66-75/08.Scrapy高级应用.md rename to Day66-75/73.Scrapy高级应用.md diff --git a/Day66-75/09.Scrapy分布式实现.md b/Day66-75/74.Scrapy分布式实现.md similarity index 100% rename from Day66-75/09.Scrapy分布式实现.md rename to Day66-75/74.Scrapy分布式实现.md diff --git a/Day66-75/10.爬虫项目实战.md b/Day66-75/75.爬虫项目实战.md similarity index 100% rename from Day66-75/10.爬虫项目实战.md rename to Day66-75/75.爬虫项目实战.md diff --git a/Day76-90/02.Pandas的应用.md b/Day76-90/02.Pandas的应用.md deleted file mode 100644 index 9a101cf..0000000 --- a/Day76-90/02.Pandas的应用.md +++ /dev/null @@ -1,2 +0,0 @@ -## Pandas的应用 - diff --git a/Day76-90/01.机器学习基础.md b/Day76-90/76.机器学习基础.md similarity index 100% rename from Day76-90/01.机器学习基础.md rename to Day76-90/76.机器学习基础.md diff --git a/Day76-90/77.Pandas的应用.md b/Day76-90/77.Pandas的应用.md new file mode 100644 index 0000000..c7139de --- /dev/null +++ b/Day76-90/77.Pandas的应用.md @@ -0,0 +1,25 @@ +## Pandas的应用 + +### 1、Pandas入门 + +### 2、Pandas索引 + +### 3、Pandas数据清洗之空数据 + +[数据挖掘之空数据处理(有史以来最全面)]: https://blog.csdn.net/Soft_Po/article/details/89302887 + +### 4、Pandas多层索引 + +### 5、Pandas多层索引计算 + +### 6、Pandas数据集成concat + +### 7、Pandas数据集成merge + +### 8、Pandas分组聚合操作 + +### 9、Pandas数据集成实战 + +### 10、美国大选项目 + +[2012美国大选政治献金项目数据分析(有史以来最全面)]: https://blog.csdn.net/Soft_Po/article/details/89283382 \ No newline at end of file diff --git a/Day76-90/03.NumPy和SciPy的应用.md b/Day76-90/78.NumPy和SciPy的应用.md similarity index 100% rename from Day76-90/03.NumPy和SciPy的应用.md rename to Day76-90/78.NumPy和SciPy的应用.md diff --git a/Day76-90/04.Matplotlib和数据可视化.md b/Day76-90/79.Matplotlib和数据可视化.md similarity index 100% rename from Day76-90/04.Matplotlib和数据可视化.md rename to Day76-90/79.Matplotlib和数据可视化.md diff --git a/Day76-90/05.k最近邻分类.md b/Day76-90/80.k最近邻分类.md similarity index 100% rename from Day76-90/05.k最近邻分类.md rename to Day76-90/80.k最近邻分类.md diff --git a/Day76-90/06.决策树.md b/Day76-90/81.决策树.md similarity index 100% rename from Day76-90/06.决策树.md rename to Day76-90/81.决策树.md diff --git a/Day76-90/07.贝叶斯分类.md b/Day76-90/82.贝叶斯分类.md similarity index 100% rename from Day76-90/07.贝叶斯分类.md rename to Day76-90/82.贝叶斯分类.md diff --git a/Day76-90/08.支持向量机.md b/Day76-90/83.支持向量机.md similarity index 100% rename from Day76-90/08.支持向量机.md rename to Day76-90/83.支持向量机.md diff --git a/Day76-90/09.K-均值聚类.md b/Day76-90/84.K-均值聚类.md similarity index 100% rename from Day76-90/09.K-均值聚类.md rename to Day76-90/84.K-均值聚类.md diff --git a/Day76-90/10.回归分析.md b/Day76-90/85.回归分析.md similarity index 100% rename from Day76-90/10.回归分析.md rename to Day76-90/85.回归分析.md diff --git a/Day76-90/11.大数据分析入门.md b/Day76-90/86.大数据分析入门.md similarity index 100% rename from Day76-90/11.大数据分析入门.md rename to Day76-90/86.大数据分析入门.md diff --git a/Day76-90/12.大数据分析进阶.md b/Day76-90/87.大数据分析进阶.md similarity index 100% rename from Day76-90/12.大数据分析进阶.md rename to Day76-90/87.大数据分析进阶.md diff --git a/Day76-90/13.Tensorflow入门.md b/Day76-90/88.Tensorflow入门.md similarity index 100% rename from Day76-90/13.Tensorflow入门.md rename to Day76-90/88.Tensorflow入门.md diff --git a/Day76-90/14.Tensorflow实战.md b/Day76-90/89.Tensorflow实战.md similarity index 100% rename from Day76-90/14.Tensorflow实战.md rename to Day76-90/89.Tensorflow实战.md diff --git a/Day76-90/15.推荐系统实战.md b/Day76-90/90.推荐系统实战.md similarity index 100% rename from Day76-90/15.推荐系统实战.md rename to Day76-90/90.推荐系统实战.md diff --git a/Day76-90/code/1-pandas入门.ipynb b/Day76-90/code/1-pandas入门.ipynb new file mode 100644 index 0000000..2f25670 --- /dev/null +++ b/Day76-90/code/1-pandas入门.ipynb @@ -0,0 +1,631 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Math 120\n", + "Python 136\n", + "En 128\n", + "Chinese 99\n", + "dtype: int64" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 创建\n", + "# Series是一维的数据\n", + "s = Series(data = [120,136,128,99],index = ['Math','Python','En','Chinese'])\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4,)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([120, 136, 128, 99], dtype=int64)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v = s.values\n", + "v" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(v)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "120.75" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "136" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15.903353943953666" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Math 14400\n", + "Python 18496\n", + "En 16384\n", + "Chinese 9801\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.pow(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
a11311675
b1914523
c57107113
d95366
e28121120
f14185132
h1243910
i803517
j689931
k741211
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "a 113 116 75\n", + "b 19 145 23\n", + "c 57 107 113\n", + "d 95 3 66\n", + "e 28 121 120\n", + "f 141 85 132\n", + "h 124 39 10\n", + "i 80 35 17\n", + "j 68 99 31\n", + "k 74 12 11" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# DataFrame是二维的数据\n", + "# excel就非诚相似\n", + "# 所有进行数据分析,数据挖掘的工具最基础的结果:行和列,行表示样本,列表示的是属性\n", + "df = DataFrame(data = np.random.randint(0,150,size = (10,3)),index = list('abcdefhijk'),columns=['Python','En','Math'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(10, 3)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[113, 116, 75],\n", + " [ 19, 145, 23],\n", + " [ 57, 107, 113],\n", + " [ 95, 3, 66],\n", + " [ 28, 121, 120],\n", + " [141, 85, 132],\n", + " [124, 39, 10],\n", + " [ 80, 35, 17],\n", + " [ 68, 99, 31],\n", + " [ 74, 12, 11]])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v = df.values\n", + "v" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 79.9\n", + "En 76.2\n", + "Math 59.8\n", + "dtype: float64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 141\n", + "En 145\n", + "Math 132\n", + "dtype: int32" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
a11311675
b1914523
c57107113
d95366
e28121120
f14185132
h1243910
i803517
j689931
k741211
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "a 113 116 75\n", + "b 19 145 23\n", + "c 57 107 113\n", + "d 95 3 66\n", + "e 28 121 120\n", + "f 141 85 132\n", + "h 124 39 10\n", + "i 80 35 17\n", + "j 68 99 31\n", + "k 74 12 11" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 79.9\n", + "En 76.2\n", + "Math 59.8\n", + "dtype: float64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean(axis = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "a 101.333333\n", + "b 62.333333\n", + "c 92.333333\n", + "d 54.666667\n", + "e 89.666667\n", + "f 119.333333\n", + "h 57.666667\n", + "i 44.000000\n", + "j 66.000000\n", + "k 32.333333\n", + "dtype: float64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean(axis = 1)" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/2-pandas-索引.ipynb b/Day76-90/code/2-pandas-索引.ipynb new file mode 100644 index 0000000..ddbde0a --- /dev/null +++ b/Day76-90/code/2-pandas-索引.ipynb @@ -0,0 +1,2082 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "11 111\n", + "12 113\n", + "13 103\n", + "14 147\n", + "15 63\n", + "16 11\n", + "17 130\n", + "18 38\n", + "19 17\n", + "20 32\n", + "21 112\n", + "22 75\n", + "23 68\n", + "24 124\n", + "25 138\n", + "26 56\n", + "27 1\n", + "28 88\n", + "29 113\n", + "30 63\n", + "31 42\n", + "32 65\n", + "33 104\n", + "34 105\n", + "35 0\n", + "36 95\n", + "37 119\n", + "38 86\n", + "39 124\n", + " ... \n", + "80 127\n", + "81 139\n", + "82 110\n", + "83 65\n", + "84 127\n", + "85 108\n", + "86 33\n", + "87 91\n", + "88 134\n", + "89 65\n", + "90 110\n", + "91 144\n", + "92 40\n", + "93 3\n", + "94 3\n", + "95 59\n", + "96 97\n", + "97 64\n", + "98 126\n", + "99 94\n", + "100 20\n", + "101 107\n", + "102 59\n", + "103 146\n", + "104 83\n", + "105 59\n", + "106 25\n", + "107 0\n", + "108 78\n", + "109 93\n", + "Name: Python, Length: 100, dtype: int16" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series(np.random.randint(0,150,size = 100),index = np.arange(10,110),dtype=np.int16,name = 'Python')\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "ename": "KeyError", + "evalue": "0", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# 索引操作\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 866\u001b[0m \u001b[0mkey\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply_if_callable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 867\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 868\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_value\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 869\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 870\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_value\u001b[1;34m(self, series, key)\u001b[0m\n\u001b[0;32m 4373\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4374\u001b[0m return self._engine.get_value(s, k,\n\u001b[1;32m-> 4375\u001b[1;33m tz=getattr(series.dtype, 'tz', None))\n\u001b[0m\u001b[0;32m 4376\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4377\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mholds_integer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_boolean\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_value\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_value\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.Int64HashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.Int64HashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 0" + ] + } + ], + "source": [ + "# 索引操作\n", + "s[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "34" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[10]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "20 32\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[[10,20]]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "20 32\n", + "21 112\n", + "22 75\n", + "23 68\n", + "24 124\n", + "25 138\n", + "26 56\n", + "27 1\n", + "28 88\n", + "29 113\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 切片操作\n", + "s[10:20]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "12 113\n", + "14 147\n", + "16 11\n", + "18 38\n", + "20 32\n", + "22 75\n", + "24 124\n", + "26 56\n", + "28 88\n", + "30 63\n", + "32 65\n", + "34 105\n", + "36 95\n", + "38 86\n", + "40 6\n", + "42 57\n", + "44 72\n", + "46 43\n", + "48 87\n", + "50 83\n", + "52 99\n", + "54 132\n", + "56 17\n", + "58 116\n", + "60 33\n", + "62 51\n", + "64 80\n", + "66 121\n", + "68 81\n", + "70 0\n", + "72 50\n", + "74 31\n", + "76 114\n", + "78 60\n", + "80 127\n", + "82 110\n", + "84 127\n", + "86 33\n", + "88 134\n", + "90 110\n", + "92 40\n", + "94 3\n", + "96 97\n", + "98 126\n", + "100 20\n", + "102 59\n", + "104 83\n", + "106 25\n", + "108 78\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[::2]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "109 93\n", + "107 0\n", + "105 59\n", + "103 146\n", + "101 107\n", + "99 94\n", + "97 64\n", + "95 59\n", + "93 3\n", + "91 144\n", + "89 65\n", + "87 91\n", + "85 108\n", + "83 65\n", + "81 139\n", + "79 14\n", + "77 96\n", + "75 76\n", + "73 29\n", + "71 68\n", + "69 4\n", + "67 57\n", + "65 58\n", + "63 106\n", + "61 42\n", + "59 135\n", + "57 56\n", + "55 12\n", + "53 135\n", + "51 74\n", + "49 129\n", + "47 110\n", + "45 1\n", + "43 90\n", + "41 120\n", + "39 124\n", + "37 119\n", + "35 0\n", + "33 104\n", + "31 42\n", + "29 113\n", + "27 1\n", + "25 138\n", + "23 68\n", + "21 112\n", + "19 17\n", + "17 130\n", + "15 63\n", + "13 103\n", + "11 111\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[::-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "34" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 可以使用pandas为开发者提供方法,去进行检索\n", + "s.loc[10]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "20 32\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.loc[[10,20]]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "11 111\n", + "12 113\n", + "13 103\n", + "14 147\n", + "15 63\n", + "16 11\n", + "17 130\n", + "18 38\n", + "19 17\n", + "20 32\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.loc[10:20]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "12 113\n", + "14 147\n", + "16 11\n", + "18 38\n", + "20 32\n", + "22 75\n", + "24 124\n", + "26 56\n", + "28 88\n", + "30 63\n", + "32 65\n", + "34 105\n", + "36 95\n", + "38 86\n", + "40 6\n", + "42 57\n", + "44 72\n", + "46 43\n", + "48 87\n", + "50 83\n", + "52 99\n", + "54 132\n", + "56 17\n", + "58 116\n", + "60 33\n", + "62 51\n", + "64 80\n", + "66 121\n", + "68 81\n", + "70 0\n", + "72 50\n", + "74 31\n", + "76 114\n", + "78 60\n", + "80 127\n", + "82 110\n", + "84 127\n", + "86 33\n", + "88 134\n", + "90 110\n", + "92 40\n", + "94 3\n", + "96 97\n", + "98 126\n", + "100 20\n", + "102 59\n", + "104 83\n", + "106 25\n", + "108 78\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.loc[::2]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "109 93\n", + "107 0\n", + "105 59\n", + "103 146\n", + "101 107\n", + "99 94\n", + "97 64\n", + "95 59\n", + "93 3\n", + "91 144\n", + "89 65\n", + "87 91\n", + "85 108\n", + "83 65\n", + "81 139\n", + "79 14\n", + "77 96\n", + "75 76\n", + "73 29\n", + "71 68\n", + "69 4\n", + "67 57\n", + "65 58\n", + "63 106\n", + "61 42\n", + "59 135\n", + "57 56\n", + "55 12\n", + "53 135\n", + "51 74\n", + "49 129\n", + "47 110\n", + "45 1\n", + "43 90\n", + "41 120\n", + "39 124\n", + "37 119\n", + "35 0\n", + "33 104\n", + "31 42\n", + "29 113\n", + "27 1\n", + "25 138\n", + "23 68\n", + "21 112\n", + "19 17\n", + "17 130\n", + "15 63\n", + "13 103\n", + "11 111\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.loc[::-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Int64Index([ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,\n", + " 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n", + " 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,\n", + " 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,\n", + " 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,\n", + " 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,\n", + " 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,\n", + " 101, 102, 103, 104, 105, 106, 107, 108, 109],\n", + " dtype='int64')" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.index" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "34" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# iloc 索引从0开始,数字化自然索引\n", + "s.iloc[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "20 32\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.iloc[[0,10]]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "10 34\n", + "11 111\n", + "12 113\n", + "13 103\n", + "14 147\n", + "15 63\n", + "16 11\n", + "17 130\n", + "18 38\n", + "19 17\n", + "20 32\n", + "21 112\n", + "22 75\n", + "23 68\n", + "24 124\n", + "25 138\n", + "26 56\n", + "27 1\n", + "28 88\n", + "29 113\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.iloc[0:20]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "109 93\n", + "107 0\n", + "105 59\n", + "103 146\n", + "101 107\n", + "99 94\n", + "97 64\n", + "95 59\n", + "93 3\n", + "91 144\n", + "89 65\n", + "87 91\n", + "85 108\n", + "83 65\n", + "81 139\n", + "79 14\n", + "77 96\n", + "75 76\n", + "73 29\n", + "71 68\n", + "69 4\n", + "67 57\n", + "65 58\n", + "63 106\n", + "61 42\n", + "59 135\n", + "57 56\n", + "55 12\n", + "53 135\n", + "51 74\n", + "49 129\n", + "47 110\n", + "45 1\n", + "43 90\n", + "41 120\n", + "39 124\n", + "37 119\n", + "35 0\n", + "33 104\n", + "31 42\n", + "29 113\n", + "27 1\n", + "25 138\n", + "23 68\n", + "21 112\n", + "19 17\n", + "17 130\n", + "15 63\n", + "13 103\n", + "11 111\n", + "Name: Python, dtype: int16" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.iloc[::-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
B13565135
C1379146
D4724145
E899716
F6426109
H4846111
I164997
J122126100
K6013662
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "B 135 65 135\n", + "C 13 79 146\n", + "D 47 24 145\n", + "E 89 97 16\n", + "F 64 26 109\n", + "H 48 46 111\n", + "I 16 49 97\n", + "J 122 126 100\n", + "K 60 136 62" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# DataFrame是二维,索引大同小异,\n", + "df = DataFrame(data = np.random.randint(0,150,size= (10,3)),index=list('ABCDEFHIJK'),columns=['Python','En','Math'])\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'A'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 2656\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2657\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2658\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'A'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'A'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 2925\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2926\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2927\u001b[1;33m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2928\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2929\u001b[0m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 2657\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2658\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2659\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2660\u001b[0m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2661\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'A'" + ] + } + ], + "source": [ + "df['A']" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "A 103\n", + "B 135\n", + "C 13\n", + "D 47\n", + "E 89\n", + "F 64\n", + "H 48\n", + "I 16\n", + "J 122\n", + "K 60\n", + "Name: Python, dtype: int32" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Python']" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEn
A10356
B13565
C1379
D4724
E8997
F6426
H4846
I1649
J122126
K60136
\n", + "
" + ], + "text/plain": [ + " Python En\n", + "A 103 56\n", + "B 135 65\n", + "C 13 79\n", + "D 47 24\n", + "E 89 97\n", + "F 64 26\n", + "H 48 46\n", + "I 16 49\n", + "J 122 126\n", + "K 60 136" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['Python','En']]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [Python, En, Math]\n", + "Index: []" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Python':'Math']" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
B13565135
C1379146
D4724145
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "B 135 65 135\n", + "C 13 79 146\n", + "D 47 24 145" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['A':'D']" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Python'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 2656\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2657\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2658\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Python'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'Python'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1498\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1499\u001b[0m \u001b[0mmaybe_callable\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply_if_callable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1500\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmaybe_callable\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1501\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1502\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_is_scalar_access\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1911\u001b[0m \u001b[1;31m# fall thru to straight lookup\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1912\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_validate_key\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1913\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_label\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1914\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1915\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_get_label\u001b[1;34m(self, label, axis)\u001b[0m\n\u001b[0;32m 139\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mIndexingError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'no slices here, handle elsewhere'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 141\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_xs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 142\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 143\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_get_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36mxs\u001b[1;34m(self, key, axis, level, drop_level)\u001b[0m\n\u001b[0;32m 3583\u001b[0m drop_level=drop_level)\n\u001b[0;32m 3584\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3585\u001b[1;33m \u001b[0mloc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3586\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3587\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexes\\base.py\u001b[0m in \u001b[0;36mget_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 2657\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2658\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2659\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2660\u001b[0m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2661\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'Python'" + ] + } + ], + "source": [ + "df.loc['Python']" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 103\n", + "En 56\n", + "Math 98\n", + "Name: A, dtype: int32" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc['A']" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
H4846111
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "H 48 46 111" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[['A','H']]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
B13565135
C1379146
D4724145
E899716
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "B 135 65 135\n", + "C 13 79 146\n", + "D 47 24 145\n", + "E 89 97 16" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc['A':'E']" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
C1379146
E899716
H4846111
J122126100
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "C 13 79 146\n", + "E 89 97 16\n", + "H 48 46 111\n", + "J 122 126 100" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[::2]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
K6013662
I164997
F6426109
D4724145
B13565135
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "K 60 136 62\n", + "I 16 49 97\n", + "F 64 26 109\n", + "D 47 24 145\n", + "B 135 65 135" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[::-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Cannot index by location index with a non-integer key", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'A'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1498\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1499\u001b[0m \u001b[0mmaybe_callable\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply_if_callable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1500\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmaybe_callable\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1501\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1502\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_is_scalar_access\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32md:\\python36\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 2224\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2225\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2226\u001b[1;33m raise TypeError(\"Cannot index by location index with a \"\n\u001b[0m\u001b[0;32m 2227\u001b[0m \"non-integer key\")\n\u001b[0;32m 2228\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: Cannot index by location index with a non-integer key" + ] + } + ], + "source": [ + "df.iloc['A']" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 103\n", + "En 56\n", + "Math 98\n", + "Name: A, dtype: int32" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
F6426109
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "F 64 26 109" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
B13565135
C1379146
D4724145
E899716
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "B 135 65 135\n", + "C 13 79 146\n", + "D 47 24 145\n", + "E 89 97 16" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
K6013662
I164997
F6426109
D4724145
B13565135
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "K 60 136 62\n", + "I 16 49 97\n", + "F 64 26 109\n", + "D 47 24 145\n", + "B 135 65 135" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[::-2]" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A1035698
B13565135
C1379146
D4724145
E899716
F6426109
H4846111
I164997
J122126100
K6013662
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 103 56 98\n", + "B 135 65 135\n", + "C 13 79 146\n", + "D 47 24 145\n", + "E 89 97 16\n", + "F 64 26 109\n", + "H 48 46 111\n", + "I 16 49 97\n", + "J 122 126 100\n", + "K 60 136 62" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
EnMath
A5698
C79146
E9716
H46111
J126100
\n", + "
" + ], + "text/plain": [ + " En Math\n", + "A 56 98\n", + "C 79 146\n", + "E 97 16\n", + "H 46 111\n", + "J 126 100" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[::2,1:]" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/3-pandas数据清洗之空数据.ipynb b/Day76-90/code/3-pandas数据清洗之空数据.ipynb new file mode 100644 index 0000000..dde9ec6 --- /dev/null +++ b/Day76-90/code/3-pandas数据清洗之空数据.ipynb @@ -0,0 +1,6285 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
1001221052857
101741291611426
102971211222965
103141731201471
1041261328611617
1058534212166
10614265112483
10713614112286113
1081537124110102
1096330446958
110593811310916
1115518758126
1125397763745
1134214810797143
114701386968134
115471361132294
1163113762028
117148741344124
1181028113812832
11927111137022
1202893121684
12113643259719
12211170123858
12396103147868
12410104663149
1257759710831
12688614511655
12733741065046
12874282610076
1297618101126133
..................
170144124779282
1713698484380
17251143683474
17314911718141120
1748139146112122
17511510164629
17610714045148
17765436810918
1783110011049123
1792946695790
18014686182246
18171504090140
1824100147116110
1835587937834
18451091248782
185101181395051
18632127136124
187941613813149
1886510112312886
18943941029132
190681359428125
1913060982715
1928916101354
193104139972917
194529419991
195191021354140
19658100708264
19784971297613
19813115744114
199793795128116
\n", + "

100 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 122 10 5 28 57\n", + "101 74 129 16 114 26\n", + "102 97 121 122 29 65\n", + "103 141 73 120 147 1\n", + "104 126 132 86 116 17\n", + "105 85 3 42 121 66\n", + "106 142 65 1 124 83\n", + "107 136 141 122 86 113\n", + "108 15 37 124 110 102\n", + "109 63 30 44 69 58\n", + "110 59 38 113 109 16\n", + "111 5 51 87 58 126\n", + "112 53 97 76 37 45\n", + "113 42 148 107 97 143\n", + "114 70 138 69 68 134\n", + "115 47 136 113 22 94\n", + "116 31 137 6 20 28\n", + "117 148 74 134 4 124\n", + "118 102 81 138 128 32\n", + "119 27 111 13 70 22\n", + "120 28 93 121 68 4\n", + "121 136 43 25 97 19\n", + "122 111 70 12 38 58\n", + "123 96 103 147 86 8\n", + "124 10 10 46 63 149\n", + "125 7 75 97 108 31\n", + "126 88 6 145 116 55\n", + "127 33 74 106 50 46\n", + "128 74 28 26 100 76\n", + "129 76 18 101 126 133\n", + ".. ... ... ... ... ...\n", + "170 144 124 77 92 82\n", + "171 36 98 48 43 80\n", + "172 51 143 68 34 74\n", + "173 149 117 18 141 120\n", + "174 8 139 146 112 122\n", + "175 115 101 64 62 9\n", + "176 10 7 140 45 148\n", + "177 65 43 68 109 18\n", + "178 31 100 110 49 123\n", + "179 29 46 69 57 90\n", + "180 146 86 18 22 46\n", + "181 71 50 40 90 140\n", + "182 4 100 147 116 110\n", + "183 55 87 93 78 34\n", + "184 5 109 124 87 82\n", + "185 10 118 139 50 51\n", + "186 32 12 71 36 124\n", + "187 94 16 138 13 149\n", + "188 65 101 123 128 86\n", + "189 43 94 10 29 132\n", + "190 68 135 94 28 125\n", + "191 30 60 98 27 15\n", + "192 89 16 10 135 4\n", + "193 104 139 97 29 17\n", + "194 5 29 41 99 91\n", + "195 19 102 135 41 40\n", + "196 58 100 70 82 64\n", + "197 84 97 129 76 13\n", + "198 131 15 7 44 114\n", + "199 79 37 95 128 116\n", + "\n", + "[100 rows x 5 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(np.random.randint(0,150,size = (100,5)),index = np.arange(100,200),columns=['Python','En','Math','Physic','Chem'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python False\n", + "En False\n", + "Math False\n", + "Physic False\n", + "Chem False\n", + "dtype: bool" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 判断DataFrame是否存在空数据\n", + "df.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python True\n", + "En True\n", + "Math True\n", + "Physic True\n", + "Chem True\n", + "dtype: bool" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.notnull().all()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "500" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "100*5" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(50):\n", + " # 行索引\n", + " index = np.random.randint(100,200,size =1)[0]\n", + "\n", + " cols = df.columns\n", + "\n", + " # 列索引\n", + " col = np.random.choice(cols)\n", + "\n", + " df.loc[index,col] = None" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(20):\n", + " # 行索引\n", + " index = np.random.randint(100,200,size =1)[0]\n", + "\n", + " cols = df.columns\n", + "\n", + " # 列索引\n", + " col = np.random.choice(cols)\n", + "\n", + "# not a number 不是一个数\n", + " df.loc[index,col] = np.NAN" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
100122.010.05.028.057.0
101NaN129.016.0114.026.0
10297.0121.0122.029.065.0
103141.073.0120.0147.01.0
104126.0NaN86.0116.017.0
10585.0NaN42.0121.066.0
106142.065.01.0124.083.0
107136.0141.0NaN86.0113.0
10815.037.0124.0110.0102.0
10963.030.0NaN69.058.0
110NaNNaN113.0109.016.0
1115.051.087.058.0126.0
11253.097.076.037.045.0
11342.0148.0NaN97.0NaN
11470.0138.069.068.0134.0
115NaN136.0113.022.094.0
11631.0137.06.020.028.0
117148.074.0134.04.0124.0
118102.081.0138.0128.032.0
11927.0111.013.0NaN22.0
12028.093.0121.0NaN4.0
121136.0NaN25.097.019.0
122111.070.012.038.058.0
123NaN103.0147.086.08.0
12410.010.046.063.0149.0
1257.075.097.0108.031.0
12688.06.0NaNNaN55.0
12733.074.0106.050.046.0
12874.028.026.0100.076.0
12976.018.0101.0NaNNaN
..................
170144.0124.077.092.082.0
17136.098.0NaN43.080.0
17251.0NaN68.034.074.0
173149.0NaN18.0141.0NaN
1748.0139.0146.0112.0NaN
175115.0NaN64.062.09.0
176NaN7.0140.045.0148.0
177NaN43.068.0109.018.0
17831.0100.0NaN49.0123.0
17929.046.069.057.090.0
180146.086.018.022.046.0
18171.050.040.0NaN140.0
1824.0100.0147.0116.0110.0
18355.087.093.0NaN34.0
184NaN109.0124.087.082.0
18510.0118.0139.050.051.0
18632.012.071.036.0NaN
18794.0NaN138.013.0149.0
18865.0101.0123.0128.086.0
18943.094.0NaN29.0132.0
19068.0135.094.028.0125.0
19130.060.098.0NaN15.0
19289.016.010.0135.04.0
193104.0139.097.029.017.0
1945.029.041.099.0NaN
19519.0102.0135.041.040.0
19658.0NaN70.082.064.0
197NaN97.0129.076.013.0
198131.015.0NaN44.0114.0
19979.0NaN95.0128.0NaN
\n", + "

100 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 122.0 10.0 5.0 28.0 57.0\n", + "101 NaN 129.0 16.0 114.0 26.0\n", + "102 97.0 121.0 122.0 29.0 65.0\n", + "103 141.0 73.0 120.0 147.0 1.0\n", + "104 126.0 NaN 86.0 116.0 17.0\n", + "105 85.0 NaN 42.0 121.0 66.0\n", + "106 142.0 65.0 1.0 124.0 83.0\n", + "107 136.0 141.0 NaN 86.0 113.0\n", + "108 15.0 37.0 124.0 110.0 102.0\n", + "109 63.0 30.0 NaN 69.0 58.0\n", + "110 NaN NaN 113.0 109.0 16.0\n", + "111 5.0 51.0 87.0 58.0 126.0\n", + "112 53.0 97.0 76.0 37.0 45.0\n", + "113 42.0 148.0 NaN 97.0 NaN\n", + "114 70.0 138.0 69.0 68.0 134.0\n", + "115 NaN 136.0 113.0 22.0 94.0\n", + "116 31.0 137.0 6.0 20.0 28.0\n", + "117 148.0 74.0 134.0 4.0 124.0\n", + "118 102.0 81.0 138.0 128.0 32.0\n", + "119 27.0 111.0 13.0 NaN 22.0\n", + "120 28.0 93.0 121.0 NaN 4.0\n", + "121 136.0 NaN 25.0 97.0 19.0\n", + "122 111.0 70.0 12.0 38.0 58.0\n", + "123 NaN 103.0 147.0 86.0 8.0\n", + "124 10.0 10.0 46.0 63.0 149.0\n", + "125 7.0 75.0 97.0 108.0 31.0\n", + "126 88.0 6.0 NaN NaN 55.0\n", + "127 33.0 74.0 106.0 50.0 46.0\n", + "128 74.0 28.0 26.0 100.0 76.0\n", + "129 76.0 18.0 101.0 NaN NaN\n", + ".. ... ... ... ... ...\n", + "170 144.0 124.0 77.0 92.0 82.0\n", + "171 36.0 98.0 NaN 43.0 80.0\n", + "172 51.0 NaN 68.0 34.0 74.0\n", + "173 149.0 NaN 18.0 141.0 NaN\n", + "174 8.0 139.0 146.0 112.0 NaN\n", + "175 115.0 NaN 64.0 62.0 9.0\n", + "176 NaN 7.0 140.0 45.0 148.0\n", + "177 NaN 43.0 68.0 109.0 18.0\n", + "178 31.0 100.0 NaN 49.0 123.0\n", + "179 29.0 46.0 69.0 57.0 90.0\n", + "180 146.0 86.0 18.0 22.0 46.0\n", + "181 71.0 50.0 40.0 NaN 140.0\n", + "182 4.0 100.0 147.0 116.0 110.0\n", + "183 55.0 87.0 93.0 NaN 34.0\n", + "184 NaN 109.0 124.0 87.0 82.0\n", + "185 10.0 118.0 139.0 50.0 51.0\n", + "186 32.0 12.0 71.0 36.0 NaN\n", + "187 94.0 NaN 138.0 13.0 149.0\n", + "188 65.0 101.0 123.0 128.0 86.0\n", + "189 43.0 94.0 NaN 29.0 132.0\n", + "190 68.0 135.0 94.0 28.0 125.0\n", + "191 30.0 60.0 98.0 NaN 15.0\n", + "192 89.0 16.0 10.0 135.0 4.0\n", + "193 104.0 139.0 97.0 29.0 17.0\n", + "194 5.0 29.0 41.0 99.0 NaN\n", + "195 19.0 102.0 135.0 41.0 40.0\n", + "196 58.0 NaN 70.0 82.0 64.0\n", + "197 NaN 97.0 129.0 76.0 13.0\n", + "198 131.0 15.0 NaN 44.0 114.0\n", + "199 79.0 NaN 95.0 128.0 NaN\n", + "\n", + "[100 rows x 5 columns]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python True\n", + "En True\n", + "Math True\n", + "Physic True\n", + "Chem True\n", + "dtype: bool" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 14\n", + "En 14\n", + "Math 15\n", + "Physic 11\n", + "Chem 13\n", + "dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "df2 = df.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 14\n", + "En 14\n", + "Math 15\n", + "Physic 11\n", + "Chem 13\n", + "dtype: int64" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
100122.010.05.028.057.0
101100.0129.016.0114.026.0
10297.0121.0122.029.065.0
103141.073.0120.0147.01.0
104126.0100.086.0116.017.0
10585.0100.042.0121.066.0
106142.065.01.0124.083.0
107136.0141.0100.086.0113.0
10815.037.0124.0110.0102.0
10963.030.0100.069.058.0
110100.0100.0113.0109.016.0
1115.051.087.058.0126.0
11253.097.076.037.045.0
11342.0148.0100.097.0100.0
11470.0138.069.068.0134.0
115100.0136.0113.022.094.0
11631.0137.06.020.028.0
117148.074.0134.04.0124.0
118102.081.0138.0128.032.0
11927.0111.013.0100.022.0
12028.093.0121.0100.04.0
121136.0100.025.097.019.0
122111.070.012.038.058.0
123100.0103.0147.086.08.0
12410.010.046.063.0149.0
1257.075.097.0108.031.0
12688.06.0100.0100.055.0
12733.074.0106.050.046.0
12874.028.026.0100.076.0
12976.018.0101.0100.0100.0
..................
170144.0124.077.092.082.0
17136.098.0100.043.080.0
17251.0100.068.034.074.0
173149.0100.018.0141.0100.0
1748.0139.0146.0112.0100.0
175115.0100.064.062.09.0
176100.07.0140.045.0148.0
177100.043.068.0109.018.0
17831.0100.0100.049.0123.0
17929.046.069.057.090.0
180146.086.018.022.046.0
18171.050.040.0100.0140.0
1824.0100.0147.0116.0110.0
18355.087.093.0100.034.0
184100.0109.0124.087.082.0
18510.0118.0139.050.051.0
18632.012.071.036.0100.0
18794.0100.0138.013.0149.0
18865.0101.0123.0128.086.0
18943.094.0100.029.0132.0
19068.0135.094.028.0125.0
19130.060.098.0100.015.0
19289.016.010.0135.04.0
193104.0139.097.029.017.0
1945.029.041.099.0100.0
19519.0102.0135.041.040.0
19658.0100.070.082.064.0
197100.097.0129.076.013.0
198131.015.0100.044.0114.0
19979.0100.095.0128.0100.0
\n", + "

100 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 122.0 10.0 5.0 28.0 57.0\n", + "101 100.0 129.0 16.0 114.0 26.0\n", + "102 97.0 121.0 122.0 29.0 65.0\n", + "103 141.0 73.0 120.0 147.0 1.0\n", + "104 126.0 100.0 86.0 116.0 17.0\n", + "105 85.0 100.0 42.0 121.0 66.0\n", + "106 142.0 65.0 1.0 124.0 83.0\n", + "107 136.0 141.0 100.0 86.0 113.0\n", + "108 15.0 37.0 124.0 110.0 102.0\n", + "109 63.0 30.0 100.0 69.0 58.0\n", + "110 100.0 100.0 113.0 109.0 16.0\n", + "111 5.0 51.0 87.0 58.0 126.0\n", + "112 53.0 97.0 76.0 37.0 45.0\n", + "113 42.0 148.0 100.0 97.0 100.0\n", + "114 70.0 138.0 69.0 68.0 134.0\n", + "115 100.0 136.0 113.0 22.0 94.0\n", + "116 31.0 137.0 6.0 20.0 28.0\n", + "117 148.0 74.0 134.0 4.0 124.0\n", + "118 102.0 81.0 138.0 128.0 32.0\n", + "119 27.0 111.0 13.0 100.0 22.0\n", + "120 28.0 93.0 121.0 100.0 4.0\n", + "121 136.0 100.0 25.0 97.0 19.0\n", + "122 111.0 70.0 12.0 38.0 58.0\n", + "123 100.0 103.0 147.0 86.0 8.0\n", + "124 10.0 10.0 46.0 63.0 149.0\n", + "125 7.0 75.0 97.0 108.0 31.0\n", + "126 88.0 6.0 100.0 100.0 55.0\n", + "127 33.0 74.0 106.0 50.0 46.0\n", + "128 74.0 28.0 26.0 100.0 76.0\n", + "129 76.0 18.0 101.0 100.0 100.0\n", + ".. ... ... ... ... ...\n", + "170 144.0 124.0 77.0 92.0 82.0\n", + "171 36.0 98.0 100.0 43.0 80.0\n", + "172 51.0 100.0 68.0 34.0 74.0\n", + "173 149.0 100.0 18.0 141.0 100.0\n", + "174 8.0 139.0 146.0 112.0 100.0\n", + "175 115.0 100.0 64.0 62.0 9.0\n", + "176 100.0 7.0 140.0 45.0 148.0\n", + "177 100.0 43.0 68.0 109.0 18.0\n", + "178 31.0 100.0 100.0 49.0 123.0\n", + "179 29.0 46.0 69.0 57.0 90.0\n", + "180 146.0 86.0 18.0 22.0 46.0\n", + "181 71.0 50.0 40.0 100.0 140.0\n", + "182 4.0 100.0 147.0 116.0 110.0\n", + "183 55.0 87.0 93.0 100.0 34.0\n", + "184 100.0 109.0 124.0 87.0 82.0\n", + "185 10.0 118.0 139.0 50.0 51.0\n", + "186 32.0 12.0 71.0 36.0 100.0\n", + "187 94.0 100.0 138.0 13.0 149.0\n", + "188 65.0 101.0 123.0 128.0 86.0\n", + "189 43.0 94.0 100.0 29.0 132.0\n", + "190 68.0 135.0 94.0 28.0 125.0\n", + "191 30.0 60.0 98.0 100.0 15.0\n", + "192 89.0 16.0 10.0 135.0 4.0\n", + "193 104.0 139.0 97.0 29.0 17.0\n", + "194 5.0 29.0 41.0 99.0 100.0\n", + "195 19.0 102.0 135.0 41.0 40.0\n", + "196 58.0 100.0 70.0 82.0 64.0\n", + "197 100.0 97.0 129.0 76.0 13.0\n", + "198 131.0 15.0 100.0 44.0 114.0\n", + "199 79.0 100.0 95.0 128.0 100.0\n", + "\n", + "[100 rows x 5 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 固定值填充\n", + "df2.fillna(value=100)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 71.662791\n", + "En 75.627907\n", + "Math 77.929412\n", + "Physic 73.471910\n", + "Chem 69.080460\n", + "dtype: float64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
1001221052857
101711291611426
102971211222965
103141731201471
104126758611617
10585754212166
10614265112483
1071361417786113
1081537124110102
1096330776958
110717511310916
1115518758126
1125397763745
11342148779769
114701386968134
115711361132294
1163113762028
117148741344124
1181028113812832
11927111137322
1202893121734
12113675259719
12211170123858
12371103147868
12410104663149
1257759710831
126886777355
12733741065046
12874282610076
12976181017369
..................
170144124779282
1713698774380
1725175683474
173149751814169
174813914611269
1751157564629
17671714045148
17771436810918
178311007749123
1792946695790
18014686182246
18171504073140
1824100147116110
1835587937334
184711091248782
185101181395051
1863212713669
187947513813149
1886510112312886
18943947729132
190681359428125
1913060987315
1928916101354
193104139972917
194529419969
195191021354140
1965875708264
19771971297613
198131157744114
19979759512869
\n", + "

100 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 122 10 5 28 57\n", + "101 71 129 16 114 26\n", + "102 97 121 122 29 65\n", + "103 141 73 120 147 1\n", + "104 126 75 86 116 17\n", + "105 85 75 42 121 66\n", + "106 142 65 1 124 83\n", + "107 136 141 77 86 113\n", + "108 15 37 124 110 102\n", + "109 63 30 77 69 58\n", + "110 71 75 113 109 16\n", + "111 5 51 87 58 126\n", + "112 53 97 76 37 45\n", + "113 42 148 77 97 69\n", + "114 70 138 69 68 134\n", + "115 71 136 113 22 94\n", + "116 31 137 6 20 28\n", + "117 148 74 134 4 124\n", + "118 102 81 138 128 32\n", + "119 27 111 13 73 22\n", + "120 28 93 121 73 4\n", + "121 136 75 25 97 19\n", + "122 111 70 12 38 58\n", + "123 71 103 147 86 8\n", + "124 10 10 46 63 149\n", + "125 7 75 97 108 31\n", + "126 88 6 77 73 55\n", + "127 33 74 106 50 46\n", + "128 74 28 26 100 76\n", + "129 76 18 101 73 69\n", + ".. ... ... ... ... ...\n", + "170 144 124 77 92 82\n", + "171 36 98 77 43 80\n", + "172 51 75 68 34 74\n", + "173 149 75 18 141 69\n", + "174 8 139 146 112 69\n", + "175 115 75 64 62 9\n", + "176 71 7 140 45 148\n", + "177 71 43 68 109 18\n", + "178 31 100 77 49 123\n", + "179 29 46 69 57 90\n", + "180 146 86 18 22 46\n", + "181 71 50 40 73 140\n", + "182 4 100 147 116 110\n", + "183 55 87 93 73 34\n", + "184 71 109 124 87 82\n", + "185 10 118 139 50 51\n", + "186 32 12 71 36 69\n", + "187 94 75 138 13 149\n", + "188 65 101 123 128 86\n", + "189 43 94 77 29 132\n", + "190 68 135 94 28 125\n", + "191 30 60 98 73 15\n", + "192 89 16 10 135 4\n", + "193 104 139 97 29 17\n", + "194 5 29 41 99 69\n", + "195 19 102 135 41 40\n", + "196 58 75 70 82 64\n", + "197 71 97 129 76 13\n", + "198 131 15 77 44 114\n", + "199 79 75 95 128 69\n", + "\n", + "[100 rows x 5 columns]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 均值\n", + "df3 = df2.fillna(value=df2.mean())\n", + "df3.astype(np.int16)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 6, 18, 1, 17, 19, 5, 17, 16, 13, 3])" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nd = np.random.randint(0,20,size = 10)\n", + "nd" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 3, 5, 6, 13, 16, 17, 17, 18, 19])" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nd.sort()\n", + "nd" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14.5" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(13 + 16)/2" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14.5" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.median(nd)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
100122.010.05.028.057.0
10168.0129.016.0114.026.0
10297.0121.0122.029.065.0
103141.073.0120.0147.01.0
104126.082.586.0116.017.0
10585.082.542.0121.066.0
106142.065.01.0124.083.0
107136.0141.086.086.0113.0
10815.037.0124.0110.0102.0
10963.030.086.069.058.0
11068.082.5113.0109.016.0
1115.051.087.058.0126.0
11253.097.076.037.045.0
11342.0148.086.097.065.0
11470.0138.069.068.0134.0
11568.0136.0113.022.094.0
11631.0137.06.020.028.0
117148.074.0134.04.0124.0
118102.081.0138.0128.032.0
11927.0111.013.069.022.0
12028.093.0121.069.04.0
121136.082.525.097.019.0
122111.070.012.038.058.0
12368.0103.0147.086.08.0
12410.010.046.063.0149.0
1257.075.097.0108.031.0
12688.06.086.069.055.0
12733.074.0106.050.046.0
12874.028.026.0100.076.0
12976.018.0101.069.065.0
..................
170144.0124.077.092.082.0
17136.098.086.043.080.0
17251.082.568.034.074.0
173149.082.518.0141.065.0
1748.0139.0146.0112.065.0
175115.082.564.062.09.0
17668.07.0140.045.0148.0
17768.043.068.0109.018.0
17831.0100.086.049.0123.0
17929.046.069.057.090.0
180146.086.018.022.046.0
18171.050.040.069.0140.0
1824.0100.0147.0116.0110.0
18355.087.093.069.034.0
18468.0109.0124.087.082.0
18510.0118.0139.050.051.0
18632.012.071.036.065.0
18794.082.5138.013.0149.0
18865.0101.0123.0128.086.0
18943.094.086.029.0132.0
19068.0135.094.028.0125.0
19130.060.098.069.015.0
19289.016.010.0135.04.0
193104.0139.097.029.017.0
1945.029.041.099.065.0
19519.0102.0135.041.040.0
19658.082.570.082.064.0
19768.097.0129.076.013.0
198131.015.086.044.0114.0
19979.082.595.0128.065.0
\n", + "

100 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 122.0 10.0 5.0 28.0 57.0\n", + "101 68.0 129.0 16.0 114.0 26.0\n", + "102 97.0 121.0 122.0 29.0 65.0\n", + "103 141.0 73.0 120.0 147.0 1.0\n", + "104 126.0 82.5 86.0 116.0 17.0\n", + "105 85.0 82.5 42.0 121.0 66.0\n", + "106 142.0 65.0 1.0 124.0 83.0\n", + "107 136.0 141.0 86.0 86.0 113.0\n", + "108 15.0 37.0 124.0 110.0 102.0\n", + "109 63.0 30.0 86.0 69.0 58.0\n", + "110 68.0 82.5 113.0 109.0 16.0\n", + "111 5.0 51.0 87.0 58.0 126.0\n", + "112 53.0 97.0 76.0 37.0 45.0\n", + "113 42.0 148.0 86.0 97.0 65.0\n", + "114 70.0 138.0 69.0 68.0 134.0\n", + "115 68.0 136.0 113.0 22.0 94.0\n", + "116 31.0 137.0 6.0 20.0 28.0\n", + "117 148.0 74.0 134.0 4.0 124.0\n", + "118 102.0 81.0 138.0 128.0 32.0\n", + "119 27.0 111.0 13.0 69.0 22.0\n", + "120 28.0 93.0 121.0 69.0 4.0\n", + "121 136.0 82.5 25.0 97.0 19.0\n", + "122 111.0 70.0 12.0 38.0 58.0\n", + "123 68.0 103.0 147.0 86.0 8.0\n", + "124 10.0 10.0 46.0 63.0 149.0\n", + "125 7.0 75.0 97.0 108.0 31.0\n", + "126 88.0 6.0 86.0 69.0 55.0\n", + "127 33.0 74.0 106.0 50.0 46.0\n", + "128 74.0 28.0 26.0 100.0 76.0\n", + "129 76.0 18.0 101.0 69.0 65.0\n", + ".. ... ... ... ... ...\n", + "170 144.0 124.0 77.0 92.0 82.0\n", + "171 36.0 98.0 86.0 43.0 80.0\n", + "172 51.0 82.5 68.0 34.0 74.0\n", + "173 149.0 82.5 18.0 141.0 65.0\n", + "174 8.0 139.0 146.0 112.0 65.0\n", + "175 115.0 82.5 64.0 62.0 9.0\n", + "176 68.0 7.0 140.0 45.0 148.0\n", + "177 68.0 43.0 68.0 109.0 18.0\n", + "178 31.0 100.0 86.0 49.0 123.0\n", + "179 29.0 46.0 69.0 57.0 90.0\n", + "180 146.0 86.0 18.0 22.0 46.0\n", + "181 71.0 50.0 40.0 69.0 140.0\n", + "182 4.0 100.0 147.0 116.0 110.0\n", + "183 55.0 87.0 93.0 69.0 34.0\n", + "184 68.0 109.0 124.0 87.0 82.0\n", + "185 10.0 118.0 139.0 50.0 51.0\n", + "186 32.0 12.0 71.0 36.0 65.0\n", + "187 94.0 82.5 138.0 13.0 149.0\n", + "188 65.0 101.0 123.0 128.0 86.0\n", + "189 43.0 94.0 86.0 29.0 132.0\n", + "190 68.0 135.0 94.0 28.0 125.0\n", + "191 30.0 60.0 98.0 69.0 15.0\n", + "192 89.0 16.0 10.0 135.0 4.0\n", + "193 104.0 139.0 97.0 29.0 17.0\n", + "194 5.0 29.0 41.0 99.0 65.0\n", + "195 19.0 102.0 135.0 41.0 40.0\n", + "196 58.0 82.5 70.0 82.0 64.0\n", + "197 68.0 97.0 129.0 76.0 13.0\n", + "198 131.0 15.0 86.0 44.0 114.0\n", + "199 79.0 82.5 95.0 128.0 65.0\n", + "\n", + "[100 rows x 5 columns]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 中位数填充\n", + "df2.median()\n", + "df4 = df2.fillna(df2.median())\n", + "df4" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
100122.010.05.028.057.0
101NaN129.016.0114.026.0
10297.0121.0122.029.065.0
103141.073.0120.0147.01.0
104126.0NaN86.0116.017.0
10585.0NaN42.0121.066.0
106142.065.01.0124.083.0
107136.0141.0NaN86.0113.0
10815.037.0124.0110.0102.0
10963.030.0NaN69.058.0
110NaNNaN113.0109.016.0
1115.051.087.058.0126.0
11253.097.076.037.045.0
11342.0148.0NaN97.0NaN
11470.0138.069.068.0134.0
115NaN136.0113.022.094.0
11631.0137.06.020.028.0
117148.074.0134.04.0124.0
118102.081.0138.0128.032.0
11927.0111.013.0NaN22.0
12028.093.0121.0NaN4.0
121136.0NaN25.097.019.0
122111.070.012.038.058.0
123NaN103.0147.086.08.0
12410.010.046.063.0149.0
1257.075.097.0108.031.0
12688.06.0NaNNaN55.0
12733.074.0106.050.046.0
12874.028.026.0100.076.0
12976.018.0101.0NaNNaN
..................
170144.0124.077.092.082.0
17136.098.0NaN43.080.0
17251.0NaN68.034.074.0
173149.0NaN18.0141.0NaN
1748.0139.0146.0112.0NaN
175115.0NaN64.062.09.0
176NaN7.0140.045.0148.0
177NaN43.068.0109.018.0
17831.0100.0NaN49.0123.0
17929.046.069.057.090.0
180146.086.018.022.046.0
18171.050.040.0NaN140.0
1824.0100.0147.0116.0110.0
18355.087.093.0NaN34.0
184NaN109.0124.087.082.0
18510.0118.0139.050.051.0
18632.012.071.036.0NaN
18794.0NaN138.013.0149.0
18865.0101.0123.0128.086.0
18943.094.0NaN29.0132.0
19068.0135.094.028.0125.0
19130.060.098.0NaN15.0
19289.016.010.0135.04.0
193104.0139.097.029.017.0
1945.029.041.099.0NaN
19519.0102.0135.041.040.0
19658.0NaN70.082.064.0
197NaN97.0129.076.013.0
198131.015.0NaN44.0114.0
19979.0NaN95.0128.0NaN
\n", + "

100 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 122.0 10.0 5.0 28.0 57.0\n", + "101 NaN 129.0 16.0 114.0 26.0\n", + "102 97.0 121.0 122.0 29.0 65.0\n", + "103 141.0 73.0 120.0 147.0 1.0\n", + "104 126.0 NaN 86.0 116.0 17.0\n", + "105 85.0 NaN 42.0 121.0 66.0\n", + "106 142.0 65.0 1.0 124.0 83.0\n", + "107 136.0 141.0 NaN 86.0 113.0\n", + "108 15.0 37.0 124.0 110.0 102.0\n", + "109 63.0 30.0 NaN 69.0 58.0\n", + "110 NaN NaN 113.0 109.0 16.0\n", + "111 5.0 51.0 87.0 58.0 126.0\n", + "112 53.0 97.0 76.0 37.0 45.0\n", + "113 42.0 148.0 NaN 97.0 NaN\n", + "114 70.0 138.0 69.0 68.0 134.0\n", + "115 NaN 136.0 113.0 22.0 94.0\n", + "116 31.0 137.0 6.0 20.0 28.0\n", + "117 148.0 74.0 134.0 4.0 124.0\n", + "118 102.0 81.0 138.0 128.0 32.0\n", + "119 27.0 111.0 13.0 NaN 22.0\n", + "120 28.0 93.0 121.0 NaN 4.0\n", + "121 136.0 NaN 25.0 97.0 19.0\n", + "122 111.0 70.0 12.0 38.0 58.0\n", + "123 NaN 103.0 147.0 86.0 8.0\n", + "124 10.0 10.0 46.0 63.0 149.0\n", + "125 7.0 75.0 97.0 108.0 31.0\n", + "126 88.0 6.0 NaN NaN 55.0\n", + "127 33.0 74.0 106.0 50.0 46.0\n", + "128 74.0 28.0 26.0 100.0 76.0\n", + "129 76.0 18.0 101.0 NaN NaN\n", + ".. ... ... ... ... ...\n", + "170 144.0 124.0 77.0 92.0 82.0\n", + "171 36.0 98.0 NaN 43.0 80.0\n", + "172 51.0 NaN 68.0 34.0 74.0\n", + "173 149.0 NaN 18.0 141.0 NaN\n", + "174 8.0 139.0 146.0 112.0 NaN\n", + "175 115.0 NaN 64.0 62.0 9.0\n", + "176 NaN 7.0 140.0 45.0 148.0\n", + "177 NaN 43.0 68.0 109.0 18.0\n", + "178 31.0 100.0 NaN 49.0 123.0\n", + "179 29.0 46.0 69.0 57.0 90.0\n", + "180 146.0 86.0 18.0 22.0 46.0\n", + "181 71.0 50.0 40.0 NaN 140.0\n", + "182 4.0 100.0 147.0 116.0 110.0\n", + "183 55.0 87.0 93.0 NaN 34.0\n", + "184 NaN 109.0 124.0 87.0 82.0\n", + "185 10.0 118.0 139.0 50.0 51.0\n", + "186 32.0 12.0 71.0 36.0 NaN\n", + "187 94.0 NaN 138.0 13.0 149.0\n", + "188 65.0 101.0 123.0 128.0 86.0\n", + "189 43.0 94.0 NaN 29.0 132.0\n", + "190 68.0 135.0 94.0 28.0 125.0\n", + "191 30.0 60.0 98.0 NaN 15.0\n", + "192 89.0 16.0 10.0 135.0 4.0\n", + "193 104.0 139.0 97.0 29.0 17.0\n", + "194 5.0 29.0 41.0 99.0 NaN\n", + "195 19.0 102.0 135.0 41.0 40.0\n", + "196 58.0 NaN 70.0 82.0 64.0\n", + "197 NaN 97.0 129.0 76.0 13.0\n", + "198 131.0 15.0 NaN 44.0 114.0\n", + "199 79.0 NaN 95.0 128.0 NaN\n", + "\n", + "[100 rows x 5 columns]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 众数填充,数量最多的那个数\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
100828999101125
101431109325
10256103566190
1034710014713899
1043846827544
10518111223126
106562610614139
10731377567144
10835471026063
109861265788149
11019140303533
11176151133
11231549111969
1136437502321
11472571381521
115551201043225
11696248922146
11763086489
11828461258274
119853970132111
12010990447439
121214810311465
12211029998057
123109888113571
12470103134121121
12551921172743
1266929759105
12765905214822
12841291711913
1292410010728139
..................
207012777241631
2071936192822
20721166154861
207347214011234
2074261081233233
207546130135124113
207633181363820
20771071112954119
207884551293787
20799550451984
2080124746514053
20812635149145127
20821921101389
20838410131714
208428741056889
20852393849788
2086861332612513
208721124401155
20882015353137
208996123123564
20902243927860
20911631176058
20926518131334
209369491094058
2094128461082111
20952659854149
209611147909266
209759773140104
2098102675119
209997197714348
\n", + "

2000 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 82 89 99 101 125\n", + "101 4 31 109 32 5\n", + "102 56 103 56 61 90\n", + "103 47 100 147 138 99\n", + "104 38 46 82 75 44\n", + "105 18 11 122 3 126\n", + "106 56 26 106 14 139\n", + "107 3 137 75 67 144\n", + "108 35 47 102 60 63\n", + "109 86 126 57 88 149\n", + "110 19 140 30 35 33\n", + "111 76 1 5 11 33\n", + "112 31 54 91 119 69\n", + "113 64 37 50 23 21\n", + "114 72 57 138 15 21\n", + "115 55 120 104 32 25\n", + "116 96 24 89 22 146\n", + "117 63 0 8 64 89\n", + "118 28 46 125 82 74\n", + "119 85 39 70 132 111\n", + "120 109 90 44 74 39\n", + "121 2 148 103 114 65\n", + "122 110 29 99 80 57\n", + "123 109 88 81 135 71\n", + "124 70 103 134 121 121\n", + "125 51 92 117 27 43\n", + "126 6 92 97 59 105\n", + "127 65 90 52 148 22\n", + "128 4 129 17 119 13\n", + "129 24 100 107 28 139\n", + "... ... ... ... ... ...\n", + "2070 127 77 24 16 31\n", + "2071 93 61 9 28 22\n", + "2072 116 61 54 8 61\n", + "2073 4 72 140 112 34\n", + "2074 26 108 123 32 33\n", + "2075 46 130 135 124 113\n", + "2076 33 18 136 38 20\n", + "2077 107 11 129 54 119\n", + "2078 84 55 129 37 87\n", + "2079 95 50 45 19 84\n", + "2080 124 74 65 140 53\n", + "2081 26 35 149 145 127\n", + "2082 19 21 101 3 89\n", + "2083 84 10 131 71 4\n", + "2084 28 74 105 68 89\n", + "2085 23 93 84 97 88\n", + "2086 86 133 26 125 13\n", + "2087 21 124 40 115 5\n", + "2088 20 15 35 31 37\n", + "2089 96 123 123 5 64\n", + "2090 22 43 92 78 60\n", + "2091 16 31 17 60 58\n", + "2092 65 18 13 13 34\n", + "2093 69 49 109 40 58\n", + "2094 128 46 10 82 111\n", + "2095 26 59 8 54 149\n", + "2096 111 47 90 92 66\n", + "2097 5 97 73 140 104\n", + "2098 102 6 7 5 119\n", + "2099 97 19 77 143 48\n", + "\n", + "[2000 rows x 5 columns]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(np.random.randint(0,150,size = (2000,5)),index = np.arange(100,2100),columns=['Python','En','Math','Physic','Chem'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(1000):\n", + " # 行索引\n", + " index = np.random.randint(100,2100,size =1)[0]\n", + "\n", + " cols = df.columns\n", + "\n", + " # 列索引\n", + " col = np.random.choice(cols)\n", + "\n", + " df.loc[index,col] = None" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 190\n", + "En 200\n", + "Math 194\n", + "Physic 189\n", + "Chem 181\n", + "dtype: int64" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
10082.089.099.0101.0125.0
1014.031.0109.032.05.0
10256.0103.056.0NaN90.0
10347.0100.0147.0138.099.0
10438.046.0NaN75.044.0
\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 82.0 89.0 99.0 101.0 125.0\n", + "101 4.0 31.0 109.0 32.0 5.0\n", + "102 56.0 103.0 56.0 NaN 90.0\n", + "103 47.0 100.0 147.0 138.0 99.0\n", + "104 38.0 46.0 NaN 75.0 44.0" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
209526.059.08.054.0149.0
2096NaN47.090.092.066.0
20975.097.073.0140.0104.0
2098102.06.07.05.0119.0
209997.019.077.0NaN48.0
\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "2095 26.0 59.0 8.0 54.0 149.0\n", + "2096 NaN 47.0 90.0 92.0 66.0\n", + "2097 5.0 97.0 73.0 140.0 104.0\n", + "2098 102.0 6.0 7.0 5.0 119.0\n", + "2099 97.0 19.0 77.0 NaN 48.0" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 82., 4., 56., 47., 38., 18., 3., 35., 86., 19., 76.,\n", + " 31., 64., 72., 55., 96., 63., 28., 85., 109., 2., 110.,\n", + " 70., 51., 6., 65., 24., 48., 44., 11., 114., 129., 87.,\n", + " 108., 125., nan, 140., 132., 91., 34., 54., 30., 12., 98.,\n", + " 142., 79., 13., 77., 40., 139., 39., 81., 112., 36., 22.,\n", + " 5., 120., 17., 127., 119., 59., 146., 89., 103., 8., 97.,\n", + " 130., 73., 83., 122., 95., 100., 41., 21., 136., 80., 101.,\n", + " 50., 27., 71., 16., 141., 126., 102., 145., 15., 52., 94.,\n", + " 10., 33., 137., 9., 128., 88., 26., 84., 93., 1., 7.,\n", + " 131., 107., 148., 0., 105., 66., 32., 115., 118., 58., 53.,\n", + " 29., 42., 57., 62., 25., 60., 69., 133., 68., 20., 106.,\n", + " 147., 78., 90., 124., 149., 92., 75., 117., 143., 99., 37.,\n", + " 123., 45., 61., 121., 135., 138., 116., 14., 104., 74., 46.,\n", + " 111., 23., 43., 49., 144., 113., 67., 134.])" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 去重之后的数据\n", + "df['Python'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "143.0 20\n", + "136.0 20\n", + "102.0 19\n", + "105.0 19\n", + "26.0 19\n", + "69.0 19\n", + "31.0 18\n", + "148.0 18\n", + "75.0 18\n", + "139.0 18\n", + "1.0 18\n", + "35.0 17\n", + "140.0 17\n", + "110.0 17\n", + "125.0 17\n", + "146.0 17\n", + "141.0 17\n", + "64.0 16\n", + "30.0 16\n", + "79.0 16\n", + "73.0 16\n", + "40.0 16\n", + "10.0 15\n", + "6.0 15\n", + "65.0 15\n", + "81.0 15\n", + "28.0 15\n", + "48.0 15\n", + "92.0 15\n", + "103.0 15\n", + " ..\n", + "104.0 9\n", + "12.0 9\n", + "116.0 9\n", + "13.0 9\n", + "59.0 9\n", + "93.0 9\n", + "124.0 9\n", + "85.0 8\n", + "135.0 8\n", + "131.0 8\n", + "68.0 8\n", + "66.0 8\n", + "62.0 8\n", + "120.0 8\n", + "17.0 8\n", + "25.0 8\n", + "145.0 7\n", + "58.0 7\n", + "134.0 7\n", + "113.0 7\n", + "123.0 7\n", + "39.0 7\n", + "34.0 7\n", + "43.0 7\n", + "74.0 6\n", + "144.0 6\n", + "132.0 6\n", + "142.0 5\n", + "67.0 5\n", + "49.0 5\n", + "Name: Python, Length: 150, dtype: int64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Python'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "8.0 21\n", + "96.0 19\n", + "118.0 19\n", + "24.0 19\n", + "43.0 19\n", + "27.0 19\n", + "19.0 19\n", + "41.0 18\n", + "0.0 18\n", + "3.0 18\n", + "52.0 18\n", + "4.0 17\n", + "137.0 17\n", + "1.0 17\n", + "101.0 17\n", + "51.0 17\n", + "39.0 17\n", + "100.0 17\n", + "127.0 17\n", + "115.0 16\n", + "33.0 16\n", + "112.0 16\n", + "92.0 16\n", + "126.0 16\n", + "133.0 15\n", + "32.0 15\n", + "89.0 15\n", + "95.0 15\n", + "36.0 15\n", + "93.0 15\n", + " ..\n", + "12.0 9\n", + "28.0 9\n", + "106.0 9\n", + "45.0 9\n", + "80.0 9\n", + "84.0 9\n", + "58.0 9\n", + "79.0 9\n", + "71.0 9\n", + "83.0 9\n", + "142.0 9\n", + "7.0 9\n", + "6.0 8\n", + "61.0 8\n", + "149.0 8\n", + "34.0 8\n", + "20.0 8\n", + "38.0 8\n", + "130.0 8\n", + "104.0 7\n", + "120.0 7\n", + "56.0 7\n", + "146.0 7\n", + "98.0 7\n", + "134.0 6\n", + "123.0 6\n", + "35.0 6\n", + "87.0 5\n", + "42.0 5\n", + "119.0 4\n", + "Name: En, Length: 150, dtype: int64" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "en = df['En'].value_counts()\n", + "en" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8.0" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "en.index[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 75.0\n", + "En 74.0\n", + "Math 77.5\n", + "Physic 73.0\n", + "Chem 72.0\n", + "dtype: float64 \n" + ] + } + ], + "source": [ + "s = df.median()\n", + "print(s,type(s))" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [], + "source": [ + "zhongshu = []\n", + "for col in df.columns:\n", + " zhongshu.append(df[col].value_counts().index[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 143.0\n", + "En 8.0\n", + "Math 80.0\n", + "Physic 31.0\n", + "Chem 125.0\n", + "dtype: float64" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series(zhongshu,index = df.columns)\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
10082.089.099.0101.0125.0
1014.031.0109.032.05.0
10256.0103.056.031.090.0
10347.0100.0147.0138.099.0
10438.046.080.075.044.0
10518.011.0122.03.0126.0
10656.026.0106.014.0139.0
1073.0137.075.067.0144.0
10835.047.0102.060.063.0
10986.0126.080.088.0149.0
11019.0140.080.035.033.0
11176.08.05.011.033.0
11231.054.091.0119.069.0
11364.037.050.023.021.0
11472.057.0138.015.021.0
11555.0120.0104.032.025.0
11696.024.089.031.0146.0
11763.08.08.064.089.0
11828.08.0125.082.074.0
11985.039.070.0132.0111.0
120109.090.080.074.039.0
1212.08.0103.0114.065.0
122110.029.099.080.057.0
123109.088.081.0135.071.0
12470.0103.0134.0121.0121.0
12551.092.0117.031.043.0
1266.092.097.059.0105.0
12765.090.052.0148.022.0
1284.0129.017.0119.013.0
12924.0100.0107.028.0139.0
..................
2070127.077.024.016.0125.0
207193.061.09.028.022.0
2072116.061.054.08.061.0
20734.072.0140.031.034.0
2074143.0108.0123.032.033.0
207546.08.0135.0124.0113.0
2076143.018.0136.038.0125.0
2077143.011.0129.054.0119.0
207884.055.0129.037.087.0
207995.050.045.019.084.0
2080124.074.065.031.053.0
208126.035.0149.0145.0127.0
208219.021.0101.03.089.0
208384.08.0131.071.04.0
208428.074.0105.068.089.0
208523.093.084.097.088.0
208686.0133.026.0125.013.0
208721.0124.040.031.05.0
208820.015.035.031.037.0
208996.0123.0123.05.064.0
209022.043.092.078.060.0
209116.031.017.060.058.0
209265.018.013.013.034.0
209369.049.0109.040.058.0
2094128.046.010.082.0111.0
209526.059.08.054.0149.0
2096143.047.090.092.066.0
20975.097.073.0140.0104.0
2098102.06.07.05.0119.0
209997.019.077.031.048.0
\n", + "

2000 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 82.0 89.0 99.0 101.0 125.0\n", + "101 4.0 31.0 109.0 32.0 5.0\n", + "102 56.0 103.0 56.0 31.0 90.0\n", + "103 47.0 100.0 147.0 138.0 99.0\n", + "104 38.0 46.0 80.0 75.0 44.0\n", + "105 18.0 11.0 122.0 3.0 126.0\n", + "106 56.0 26.0 106.0 14.0 139.0\n", + "107 3.0 137.0 75.0 67.0 144.0\n", + "108 35.0 47.0 102.0 60.0 63.0\n", + "109 86.0 126.0 80.0 88.0 149.0\n", + "110 19.0 140.0 80.0 35.0 33.0\n", + "111 76.0 8.0 5.0 11.0 33.0\n", + "112 31.0 54.0 91.0 119.0 69.0\n", + "113 64.0 37.0 50.0 23.0 21.0\n", + "114 72.0 57.0 138.0 15.0 21.0\n", + "115 55.0 120.0 104.0 32.0 25.0\n", + "116 96.0 24.0 89.0 31.0 146.0\n", + "117 63.0 8.0 8.0 64.0 89.0\n", + "118 28.0 8.0 125.0 82.0 74.0\n", + "119 85.0 39.0 70.0 132.0 111.0\n", + "120 109.0 90.0 80.0 74.0 39.0\n", + "121 2.0 8.0 103.0 114.0 65.0\n", + "122 110.0 29.0 99.0 80.0 57.0\n", + "123 109.0 88.0 81.0 135.0 71.0\n", + "124 70.0 103.0 134.0 121.0 121.0\n", + "125 51.0 92.0 117.0 31.0 43.0\n", + "126 6.0 92.0 97.0 59.0 105.0\n", + "127 65.0 90.0 52.0 148.0 22.0\n", + "128 4.0 129.0 17.0 119.0 13.0\n", + "129 24.0 100.0 107.0 28.0 139.0\n", + "... ... ... ... ... ...\n", + "2070 127.0 77.0 24.0 16.0 125.0\n", + "2071 93.0 61.0 9.0 28.0 22.0\n", + "2072 116.0 61.0 54.0 8.0 61.0\n", + "2073 4.0 72.0 140.0 31.0 34.0\n", + "2074 143.0 108.0 123.0 32.0 33.0\n", + "2075 46.0 8.0 135.0 124.0 113.0\n", + "2076 143.0 18.0 136.0 38.0 125.0\n", + "2077 143.0 11.0 129.0 54.0 119.0\n", + "2078 84.0 55.0 129.0 37.0 87.0\n", + "2079 95.0 50.0 45.0 19.0 84.0\n", + "2080 124.0 74.0 65.0 31.0 53.0\n", + "2081 26.0 35.0 149.0 145.0 127.0\n", + "2082 19.0 21.0 101.0 3.0 89.0\n", + "2083 84.0 8.0 131.0 71.0 4.0\n", + "2084 28.0 74.0 105.0 68.0 89.0\n", + "2085 23.0 93.0 84.0 97.0 88.0\n", + "2086 86.0 133.0 26.0 125.0 13.0\n", + "2087 21.0 124.0 40.0 31.0 5.0\n", + "2088 20.0 15.0 35.0 31.0 37.0\n", + "2089 96.0 123.0 123.0 5.0 64.0\n", + "2090 22.0 43.0 92.0 78.0 60.0\n", + "2091 16.0 31.0 17.0 60.0 58.0\n", + "2092 65.0 18.0 13.0 13.0 34.0\n", + "2093 69.0 49.0 109.0 40.0 58.0\n", + "2094 128.0 46.0 10.0 82.0 111.0\n", + "2095 26.0 59.0 8.0 54.0 149.0\n", + "2096 143.0 47.0 90.0 92.0 66.0\n", + "2097 5.0 97.0 73.0 140.0 104.0\n", + "2098 102.0 6.0 7.0 5.0 119.0\n", + "2099 97.0 19.0 77.0 31.0 48.0\n", + "\n", + "[2000 rows x 5 columns]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = df.fillna(s)\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 0\n", + "En 0\n", + "Math 0\n", + "Physic 0\n", + "Chem 0\n", + "dtype: int64" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 190\n", + "En 200\n", + "Math 194\n", + "Physic 189\n", + "Chem 181\n", + "dtype: int64" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
10082.089.099.0101.0125.0
1014.031.0109.032.05.0
10256.0103.056.0NaN90.0
10347.0100.0147.0138.099.0
10438.046.0NaN75.044.0
10518.011.0122.03.0126.0
10656.026.0106.014.0139.0
1073.0137.075.067.0144.0
10835.047.0102.060.063.0
10986.0126.0NaN88.0149.0
11019.0140.0NaN35.033.0
11176.0NaN5.011.033.0
11231.054.091.0119.069.0
11364.037.050.023.021.0
11472.057.0138.015.021.0
11555.0120.0104.032.025.0
11696.024.089.0NaN146.0
11763.0NaN8.064.089.0
11828.0NaN125.082.074.0
11985.039.070.0132.0111.0
\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 82.0 89.0 99.0 101.0 125.0\n", + "101 4.0 31.0 109.0 32.0 5.0\n", + "102 56.0 103.0 56.0 NaN 90.0\n", + "103 47.0 100.0 147.0 138.0 99.0\n", + "104 38.0 46.0 NaN 75.0 44.0\n", + "105 18.0 11.0 122.0 3.0 126.0\n", + "106 56.0 26.0 106.0 14.0 139.0\n", + "107 3.0 137.0 75.0 67.0 144.0\n", + "108 35.0 47.0 102.0 60.0 63.0\n", + "109 86.0 126.0 NaN 88.0 149.0\n", + "110 19.0 140.0 NaN 35.0 33.0\n", + "111 76.0 NaN 5.0 11.0 33.0\n", + "112 31.0 54.0 91.0 119.0 69.0\n", + "113 64.0 37.0 50.0 23.0 21.0\n", + "114 72.0 57.0 138.0 15.0 21.0\n", + "115 55.0 120.0 104.0 32.0 25.0\n", + "116 96.0 24.0 89.0 NaN 146.0\n", + "117 63.0 NaN 8.0 64.0 89.0\n", + "118 28.0 NaN 125.0 82.0 74.0\n", + "119 85.0 39.0 70.0 132.0 111.0" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3 = df.iloc[:20]\n", + "df3" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMathPhysicChem
10082.089.099.0101.0125.0
1014.031.0109.032.05.0
10256.0103.056.090.090.0
10347.0100.0147.0138.099.0
10438.046.075.075.044.0
10518.011.0122.03.0126.0
10656.026.0106.014.0139.0
1073.0137.075.067.0144.0
10835.047.0102.060.063.0
10986.0126.088.088.0149.0
11019.0140.035.035.033.0
11176.05.05.011.033.0
11231.054.091.0119.069.0
11364.037.050.023.021.0
11472.057.0138.015.021.0
11555.0120.0104.032.025.0
11696.024.089.0146.0146.0
11763.08.08.064.089.0
11828.0125.0125.082.074.0
11985.039.070.0132.0111.0
\n", + "
" + ], + "text/plain": [ + " Python En Math Physic Chem\n", + "100 82.0 89.0 99.0 101.0 125.0\n", + "101 4.0 31.0 109.0 32.0 5.0\n", + "102 56.0 103.0 56.0 90.0 90.0\n", + "103 47.0 100.0 147.0 138.0 99.0\n", + "104 38.0 46.0 75.0 75.0 44.0\n", + "105 18.0 11.0 122.0 3.0 126.0\n", + "106 56.0 26.0 106.0 14.0 139.0\n", + "107 3.0 137.0 75.0 67.0 144.0\n", + "108 35.0 47.0 102.0 60.0 63.0\n", + "109 86.0 126.0 88.0 88.0 149.0\n", + "110 19.0 140.0 35.0 35.0 33.0\n", + "111 76.0 5.0 5.0 11.0 33.0\n", + "112 31.0 54.0 91.0 119.0 69.0\n", + "113 64.0 37.0 50.0 23.0 21.0\n", + "114 72.0 57.0 138.0 15.0 21.0\n", + "115 55.0 120.0 104.0 32.0 25.0\n", + "116 96.0 24.0 89.0 146.0 146.0\n", + "117 63.0 8.0 8.0 64.0 89.0\n", + "118 28.0 125.0 125.0 82.0 74.0\n", + "119 85.0 39.0 70.0 132.0 111.0" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'''method : {'backfill', 'bfill', 'pad', 'ffill', None}, default None\n", + " Method to use for filling holes in reindexed Series\n", + " pad / ffill: propagate last valid observation forward to next valid\n", + " backfill / bfill: use NEXT valid observation to fill gap'''\n", + "df3.fillna(method='bfill',axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2000, 5)" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#数据量足够大,空数据比较少,直接删除\n", + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.dro" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/4-pandas多层索引.ipynb b/Day76-90/code/4-pandas多层索引.ipynb new file mode 100644 index 0000000..01f9dd6 --- /dev/null +++ b/Day76-90/code/4-pandas多层索引.ipynb @@ -0,0 +1,568 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "# 数据分析BI-------->人工智能AI\n", + "# 数据分析和数据挖掘一个意思,\n", + "# 工具和软件:Excel 免费版\n", + "# SPSS(一人一年10000)、SAS(一人一年5000)、Matlab 收费\n", + "# R、Python(全方位语言,流行) 免费\n", + "# Python + numpy + scipy + pandas + matplotlib + seaborn + pyEcharts + sklearn + kereas(Tensorflow)+…… \n", + "# 代码,自动化(数据输入----输出结果)\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 63\n", + "b 107\n", + "c 16\n", + "d 35\n", + "e 140\n", + "f 83\n", + "dtype: int32" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 多层索引,行列\n", + "# 单层索引\n", + "s = Series(np.random.randint(0,150,size = 6),index=list('abcdef'))\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "张三 期中 114\n", + " 期末 131\n", + "李四 期中 3\n", + " 期末 63\n", + "王五 期中 107\n", + " 期末 34\n", + "dtype: int32" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 多层索引,两层,三层以上(规则一样)\n", + "s2 = Series(np.random.randint(0,150,size = 6),index = pd.MultiIndex.from_product([['张三','李四','王五'],['期中','期末']]))\n", + "s2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
张三期中73525
期末373656
李四期中14981142
期末711380
王五期中1194103
期末2512183
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "张三 期中 73 5 25\n", + " 期末 37 36 56\n", + "李四 期中 149 81 142\n", + " 期末 71 138 0\n", + "王五 期中 11 94 103\n", + " 期末 25 121 83" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(np.random.randint(0,150,size = (6,3)),columns=['Python','En','Math'],index =pd.MultiIndex.from_product([['张三','李四','王五'],['期中','期末']]) )\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
张三期中A153117
B8256123
期末A14278
B695017
李四期中A9187143
B12011839
期末A567655
B11105121
王五期中A147781
B128126146
期末A4945114
B1212677
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "张三 期中 A 15 31 17\n", + " B 82 56 123\n", + " 期末 A 14 2 78\n", + " B 69 50 17\n", + "李四 期中 A 91 87 143\n", + " B 120 118 39\n", + " 期末 A 56 76 55\n", + " B 11 105 121\n", + "王五 期中 A 147 78 1\n", + " B 128 126 146\n", + " 期末 A 49 45 114\n", + " B 121 26 77" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 三层索引\n", + "df3 = DataFrame(np.random.randint(0,150,size = (12,3)),columns=['Python','En','Math'],index =pd.MultiIndex.from_product([['张三','李四','王五'],['期中','期末'],['A','B']]) )\n", + "\n", + "df3" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "73" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 先获取列后获取行\n", + "df['Python']['张三']['期中']" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "df2 = df.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
张三期中73525
期末373656
李四期中14981142
期末711380
王五期中1194103
期末2512183
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "张三 期中 73 5 25\n", + " 期末 37 36 56\n", + "李四 期中 149 81 142\n", + " 期末 71 138 0\n", + "王五 期中 11 94 103\n", + " 期末 25 121 83" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.sort_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "73" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 先获取行,后获取列\n", + "df.loc['张三'].loc['期中']['Python']" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
张三期中73525
期末373656
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "张三 期中 73 5 25\n", + " 期末 37 36 56" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1]]" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/5-pandas多层索引计算.ipynb b/Day76-90/code/5-pandas多层索引计算.ipynb new file mode 100644 index 0000000..22e1c8e --- /dev/null +++ b/Day76-90/code/5-pandas多层索引计算.ipynb @@ -0,0 +1,1000 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
期中期末期中期末期中期末
A1311011731517
B6234531012457
C247636117123105
D11246794246122
E661131044510108
F11110844113221
\n", + "
" + ], + "text/plain": [ + " Python En Math \n", + " 期中 期末 期中 期末 期中 期末\n", + "A 131 101 1 73 15 17\n", + "B 62 34 53 101 24 57\n", + "C 24 76 36 117 123 105\n", + "D 112 46 79 42 46 122\n", + "E 66 113 104 45 10 108\n", + "F 111 108 4 41 132 21" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 多层列索引\n", + "df = DataFrame(np.random.randint(0,150,size = (6,6)),index = list('ABCDEF'),\n", + " columns=pd.MultiIndex.from_product([['Python','En','Math'],['期中','期末']]))\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 期中 84.3\n", + " 期末 79.7\n", + "En 期中 46.2\n", + " 期末 69.8\n", + "Math 期中 58.3\n", + " 期末 71.7\n", + "dtype: float64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# round保留2位小数\n", + "df.mean().round(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
期中期末期中期末期中期末
A1311011731517
B6234531012457
C247636117123105
D11246794246122
E661131044510108
F11110844113221
\n", + "
" + ], + "text/plain": [ + " Python En Math \n", + " 期中 期末 期中 期末 期中 期末\n", + "A 131 101 1 73 15 17\n", + "B 62 34 53 101 24 57\n", + "C 24 76 36 117 123 105\n", + "D 112 46 79 42 46 122\n", + "E 66 113 104 45 10 108\n", + "F 111 108 4 41 132 21" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
A116.037.016.0
B48.077.040.5
C50.076.5114.0
D79.060.584.0
E89.574.559.0
F109.522.576.5
\n", + "
" + ], + "text/plain": [ + " Python En Math\n", + "A 116.0 37.0 16.0\n", + "B 48.0 77.0 40.5\n", + "C 50.0 76.5 114.0\n", + "D 79.0 60.5 84.0\n", + "E 89.5 74.5 59.0\n", + "F 109.5 22.5 76.5" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# axis = 0代表行\n", + "# axis = 1代表列\n", + "df.mean(axis = 1,level = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
期中期末
A49.063.7
B46.364.0
C61.099.3
D79.070.0
E60.088.7
F82.356.7
\n", + "
" + ], + "text/plain": [ + " 期中 期末\n", + "A 49.0 63.7\n", + "B 46.3 64.0\n", + "C 61.0 99.3\n", + "D 79.0 70.0\n", + "E 60.0 88.7\n", + "F 82.3 56.7" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean(axis = 1,level = 1).round(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonEnMath
期中期末期中期末期中期末
A1311011731517
B6234531012457
C247636117123105
D11246794246122
E661131044510108
F11110844113221
\n", + "
" + ], + "text/plain": [ + " Python En Math \n", + " 期中 期末 期中 期末 期中 期末\n", + "A 131 101 1 73 15 17\n", + "B 62 34 53 101 24 57\n", + "C 24 76 36 117 123 105\n", + "D 112 46 79 42 46 122\n", + "E 66 113 104 45 10 108\n", + "F 111 108 4 41 132 21" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
EnMathPython
A期中115131
期末7317101
B期中532462
期末1015734
C期中3612324
期末11710576
D期中7946112
期末4212246
E期中1041066
期末45108113
F期中4132111
期末4121108
\n", + "
" + ], + "text/plain": [ + " En Math Python\n", + "A 期中 1 15 131\n", + " 期末 73 17 101\n", + "B 期中 53 24 62\n", + " 期末 101 57 34\n", + "C 期中 36 123 24\n", + " 期末 117 105 76\n", + "D 期中 79 46 112\n", + " 期末 42 122 46\n", + "E 期中 104 10 66\n", + " 期末 45 108 113\n", + "F 期中 4 132 111\n", + " 期末 41 21 108" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 行和列的多层索引,进行转换\n", + "# Stack the prescribed level(s) from columns to index.\n", + "# 从列变成行\n", + "df2 = df.stack(level = 1)\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
EnMathPython
ABCDEFABCDEFABCDEF
期中1533679104415241234610132131622411266111
期末73101117424541175710512210821101347646113108
\n", + "
" + ], + "text/plain": [ + " En Math Python \n", + " A B C D E F A B C D E F A B C D E F\n", + "期中 1 53 36 79 104 4 15 24 123 46 10 132 131 62 24 112 66 111\n", + "期末 73 101 117 42 45 41 17 57 105 122 108 21 101 34 76 46 113 108" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 从行变成列\n", + "df2.unstack(level= 0 )" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
EnMathPython
期中期末期中期末期中期末
A1731517131101
B5310124576234
C361171231052476
D79424612211246
E104451010866113
F44113221111108
\n", + "
" + ], + "text/plain": [ + " En Math Python \n", + " 期中 期末 期中 期末 期中 期末\n", + "A 1 73 15 17 131 101\n", + "B 53 101 24 57 62 34\n", + "C 36 117 123 105 24 76\n", + "D 79 42 46 122 112 46\n", + "E 104 45 10 108 66 113\n", + "F 4 41 132 21 111 108" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.unstack(level = 1)" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/6-pandas数据集成.ipynb b/Day76-90/code/6-pandas数据集成.ipynb new file mode 100644 index 0000000..e128ee4 --- /dev/null +++ b/Day76-90/code/6-pandas数据集成.ipynb @@ -0,0 +1,1209 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 数据分析数据挖掘\n", + "# 有数据情况下:\n", + "# 数据预处理\n", + "# 数据清洗(空数据,异常值)\n", + "# 数据集成(多个数据合并到一起,级联)数据可能存放在多个表中\n", + "# 数据转化\n", + "# 数据规约(属性减少(不重要的属性删除),数据减少去重操作)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5, 12, 67, 29, 46, 103, 53, 53, 139, 87],\n", + " [126, 33, 55, 104, 45, 70, 96, 133, 116, 43],\n", + " [ 84, 45, 17, 42, 19, 11, 125, 43, 54, 39],\n", + " [ 97, 68, 99, 90, 28, 60, 135, 84, 111, 63],\n", + " [114, 56, 30, 81, 48, 73, 119, 65, 20, 22]])" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "array([[115, 128, 122, 127, 4, 135, 26, 25, 131, 139],\n", + " [ 66, 119, 37, 136, 101, 40, 102, 127, 148, 127],\n", + " [ 89, 80, 140, 133, 51, 142, 47, 27, 54, 23],\n", + " [ 64, 127, 33, 128, 60, 106, 67, 94, 110, 76],\n", + " [ 6, 21, 23, 96, 10, 62, 26, 79, 149, 43],\n", + " [116, 143, 132, 118, 68, 21, 57, 133, 124, 124]])" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 首先看numpy数组的集成\n", + "nd1 = np.random.randint(0,150,size = (5,10))\n", + "\n", + "nd2 = np.random.randint(0,150,size = (6,10))\n", + "display(nd1,nd2)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5, 12, 67, 29, 46, 103, 53, 53, 139, 87],\n", + " [126, 33, 55, 104, 45, 70, 96, 133, 116, 43],\n", + " [ 84, 45, 17, 42, 19, 11, 125, 43, 54, 39],\n", + " [ 97, 68, 99, 90, 28, 60, 135, 84, 111, 63],\n", + " [114, 56, 30, 81, 48, 73, 119, 65, 20, 22],\n", + " [115, 128, 122, 127, 4, 135, 26, 25, 131, 139],\n", + " [ 66, 119, 37, 136, 101, 40, 102, 127, 148, 127],\n", + " [ 89, 80, 140, 133, 51, 142, 47, 27, 54, 23],\n", + " [ 64, 127, 33, 128, 60, 106, 67, 94, 110, 76],\n", + " [ 6, 21, 23, 96, 10, 62, 26, 79, 149, 43],\n", + " [116, 143, 132, 118, 68, 21, 57, 133, 124, 124]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 原来数据一个5行,一个是6行,级联之后变成了11行\n", + "nd3 = np.concatenate([nd1,nd2],axis = 0)\n", + "nd3" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[110, 38, 144, 92, 38, 2, 67, 2, 103, 81],\n", + " [ 56, 61, 61, 22, 108, 145, 95, 44, 40, 100],\n", + " [ 65, 74, 85, 123, 47, 117, 35, 55, 120, 20],\n", + " [ 15, 9, 4, 84, 71, 133, 140, 13, 71, 91],\n", + " [ 94, 31, 41, 5, 7, 32, 50, 24, 18, 120]])" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "array([[ 65, 149, 86, 138, 98],\n", + " [136, 49, 102, 45, 140],\n", + " [ 13, 124, 94, 81, 73],\n", + " [ 82, 38, 0, 75, 94],\n", + " [146, 28, 143, 61, 49]])" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "nd1 = np.random.randint(0,150,size = (5,10))\n", + "\n", + "nd2 = np.random.randint(0,150,size = (5,5))\n", + "display(nd1,nd2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[110, 38, 144, 92, 38, 2, 67, 2, 103, 81, 65, 149, 86,\n", + " 138, 98],\n", + " [ 56, 61, 61, 22, 108, 145, 95, 44, 40, 100, 136, 49, 102,\n", + " 45, 140],\n", + " [ 65, 74, 85, 123, 47, 117, 35, 55, 120, 20, 13, 124, 94,\n", + " 81, 73],\n", + " [ 15, 9, 4, 84, 71, 133, 140, 13, 71, 91, 82, 38, 0,\n", + " 75, 94],\n", + " [ 94, 31, 41, 5, 7, 32, 50, 24, 18, 120, 146, 28, 143,\n", + " 61, 49]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# axis = 0行级联(第一维度的级联),axis = 1(第二个维度的级联,列的级联)\n", + "np.concatenate((nd1,nd2),axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# pandas级联操作,pandas基于numpy\n", + "# pandas的级联类似" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A1135380
B1354052
C1441864
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 113 53 80\n", + "B 135 40 52\n", + "C 144 18 64" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
D126118146
E1478127
F87631
G359533
H13011791
I12498122
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "D 126 118 146\n", + "E 147 81 27\n", + "F 87 63 1\n", + "G 35 95 33\n", + "H 130 117 91\n", + "I 124 98 122" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df1 = DataFrame(np.random.randint(0,150,size = (3,3)),index = list('ABC'),columns=['Python','Math','En'])\n", + "\n", + "df2 = DataFrame(np.random.randint(0,150,size = (6,3)),index = list('DEFGHI'),columns=['Python','Math','En'])\n", + "\n", + "display(df1,df2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A1135380
B1354052
C1441864
D126118146
E1478127
F87631
G359533
H13011791
I12498122
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 113 53 80\n", + "B 135 40 52\n", + "C 144 18 64\n", + "D 126 118 146\n", + "E 147 81 27\n", + "F 87 63 1\n", + "G 35 95 33\n", + "H 130 117 91\n", + "I 124 98 122" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# pandas汇总数据,数据集成\n", + "df1.append(df2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A1135380
B1354052
C1441864
D126118146
E1478127
F87631
G359533
H13011791
I12498122
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 113 53 80\n", + "B 135 40 52\n", + "C 144 18 64\n", + "D 126 118 146\n", + "E 147 81 27\n", + "F 87 63 1\n", + "G 35 95 33\n", + "H 130 117 91\n", + "I 124 98 122" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df1,df2])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\python36\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n", + "of pandas will change to not sort by default.\n", + "\n", + "To accept the future behavior, pass 'sort=False'.\n", + "\n", + "To retain the current behavior and silence the warning, pass 'sort=True'.\n", + "\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEnPythonMathEn
A113.053.080.0NaNNaNNaN
B135.040.052.0NaNNaNNaN
C144.018.064.0NaNNaNNaN
DNaNNaNNaN126.0118.0146.0
ENaNNaNNaN147.081.027.0
FNaNNaNNaN87.063.01.0
GNaNNaNNaN35.095.033.0
HNaNNaNNaN130.0117.091.0
INaNNaNNaN124.098.0122.0
\n", + "
" + ], + "text/plain": [ + " Python Math En Python Math En\n", + "A 113.0 53.0 80.0 NaN NaN NaN\n", + "B 135.0 40.0 52.0 NaN NaN NaN\n", + "C 144.0 18.0 64.0 NaN NaN NaN\n", + "D NaN NaN NaN 126.0 118.0 146.0\n", + "E NaN NaN NaN 147.0 81.0 27.0\n", + "F NaN NaN NaN 87.0 63.0 1.0\n", + "G NaN NaN NaN 35.0 95.0 33.0\n", + "H NaN NaN NaN 130.0 117.0 91.0\n", + "I NaN NaN NaN 124.0 98.0 122.0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df1,df2],axis = 1,ignore_index = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A225813
B995735
C512824
E560111
F13723121
G4978115
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 22 58 13\n", + "B 99 57 35\n", + "C 51 28 24\n", + "E 5 60 111\n", + "F 137 23 121\n", + "G 49 78 115" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A11811381
B5122126
C0115128
E10013094
F4993140
G705994
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 118 113 81\n", + "B 51 22 126\n", + "C 0 115 128\n", + "E 100 130 94\n", + "F 49 93 140\n", + "G 70 59 94" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 期中\n", + "df1 = DataFrame(np.random.randint(0,150,size = (6,3)),index = list('ABCEFG'),columns=['Python','Math','En'])\n", + "\n", + "# 期末\n", + "df2 = DataFrame(np.random.randint(0,150,size = (6,3)),index = list('ABCEFG'),columns=['Python','Math','En'])\n", + "\n", + "display(df1,df2)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
期中A225813
B995735
C512824
E560111
F13723121
G4978115
期末A11811381
B5122126
C0115128
E10013094
F4993140
G705994
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "期中 A 22 58 13\n", + " B 99 57 35\n", + " C 51 28 24\n", + " E 5 60 111\n", + " F 137 23 121\n", + " G 49 78 115\n", + "期末 A 118 113 81\n", + " B 51 22 126\n", + " C 0 115 128\n", + " E 100 130 94\n", + " F 49 93 140\n", + " G 70 59 94" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3 = pd.concat([df1,df2],axis = 0,keys = ['期中','期末'])\n", + "df3" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A期中225813
期末11811381
B期中995735
期末5122126
C期中512824
期末0115128
E期中560111
期末10013094
F期中13723121
期末4993140
G期中4978115
期末705994
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 期中 22 58 13\n", + " 期末 118 113 81\n", + "B 期中 99 57 35\n", + " 期末 51 22 126\n", + "C 期中 51 28 24\n", + " 期末 0 115 128\n", + "E 期中 5 60 111\n", + " 期末 100 130 94\n", + "F 期中 137 23 121\n", + " 期末 49 93 140\n", + "G 期中 49 78 115\n", + " 期末 70 59 94" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.unstack(level = 0).stack()" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/7-pandas数据集成merge.ipynb b/Day76-90/code/7-pandas数据集成merge.ipynb new file mode 100644 index 0000000..8b2eefc --- /dev/null +++ b/Day76-90/code/7-pandas数据集成merge.ipynb @@ -0,0 +1,1272 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 上一讲,append,concat数据集成方法\n", + "# merge融合,根据某一共同属性进行级联,高级用法" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namesexid
0A1
1B2
2C3
3D4
4E5
5F6
\n", + "
" + ], + "text/plain": [ + " name sex id\n", + "0 A 男 1\n", + "1 B 女 2\n", + "2 C 女 3\n", + "3 D 女 4\n", + "4 E 男 5\n", + "5 F 男 6" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 = DataFrame({'name':['A','B','C','D','E','F'],\n", + " 'sex':['男','女','女','女','男','男'],\n", + " 'id':[1,2,3,4,5,6]})\n", + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesalaryid
022120001
125150002
227200003
321300004
418100005
52980007
\n", + "
" + ], + "text/plain": [ + " age salary id\n", + "0 22 12000 1\n", + "1 25 15000 2\n", + "2 27 20000 3\n", + "3 21 30000 4\n", + "4 18 10000 5\n", + "5 29 8000 7" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = DataFrame({'age':[22,25,27,21,18,29],'salary':[12000,15000,20000,30000,10000,8000],'id':[1,2,3,4,5,7]})\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\python36\\lib\\site-packages\\pandas\\core\\frame.py:6692: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n", + "of pandas will change to not sort by default.\n", + "\n", + "To accept the future behavior, pass 'sort=False'.\n", + "\n", + "To retain the current behavior and silence the warning, pass 'sort=True'.\n", + "\n", + " sort=sort)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ageidnamesalarysex
0NaN1ANaN
1NaN2BNaN
2NaN3CNaN
3NaN4DNaN
4NaN5ENaN
5NaN6FNaN
022.01NaN12000.0NaN
125.02NaN15000.0NaN
227.03NaN20000.0NaN
321.04NaN30000.0NaN
418.05NaN10000.0NaN
529.07NaN8000.0NaN
\n", + "
" + ], + "text/plain": [ + " age id name salary sex\n", + "0 NaN 1 A NaN 男\n", + "1 NaN 2 B NaN 女\n", + "2 NaN 3 C NaN 女\n", + "3 NaN 4 D NaN 女\n", + "4 NaN 5 E NaN 男\n", + "5 NaN 6 F NaN 男\n", + "0 22.0 1 NaN 12000.0 NaN\n", + "1 25.0 2 NaN 15000.0 NaN\n", + "2 27.0 3 NaN 20000.0 NaN\n", + "3 21.0 4 NaN 30000.0 NaN\n", + "4 18.0 5 NaN 10000.0 NaN\n", + "5 29.0 7 NaN 8000.0 NaN" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.append(df2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namesexidagesalaryid
0A122120001
1B225150002
2C327200003
3D421300004
4E518100005
5F62980007
\n", + "
" + ], + "text/plain": [ + " name sex id age salary id\n", + "0 A 男 1 22 12000 1\n", + "1 B 女 2 25 15000 2\n", + "2 C 女 3 27 20000 3\n", + "3 D 女 4 21 30000 4\n", + "4 E 男 5 18 10000 5\n", + "5 F 男 6 29 8000 7" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df1,df2],axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namesexidagesalary
0A12212000
1B22515000
2C32720000
3D42130000
4E51810000
\n", + "
" + ], + "text/plain": [ + " name sex id age salary\n", + "0 A 男 1 22 12000\n", + "1 B 女 2 25 15000\n", + "2 C 女 3 27 20000\n", + "3 D 女 4 21 30000\n", + "4 E 男 5 18 10000" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.merge(df2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namesexidagesalary
0A122.012000.0
1B225.015000.0
2C327.020000.0
3D421.030000.0
4E518.010000.0
5F6NaNNaN
6NaNNaN729.08000.0
\n", + "
" + ], + "text/plain": [ + " name sex id age salary\n", + "0 A 男 1 22.0 12000.0\n", + "1 B 女 2 25.0 15000.0\n", + "2 C 女 3 27.0 20000.0\n", + "3 D 女 4 21.0 30000.0\n", + "4 E 男 5 18.0 10000.0\n", + "5 F 男 6 NaN NaN\n", + "6 NaN NaN 7 29.0 8000.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.merge(df2,how = 'outer')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A401590
B595283
C14138137
D897853
E811013
F757986
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 40 15 90\n", + "B 59 52 83\n", + "C 14 138 137\n", + "D 89 78 53\n", + "E 81 101 3\n", + "F 75 79 86" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(np.random.randint(0,150,size = (6,3)),index = list('ABCDEF'),columns=['Python','Math','En'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Python 59.7\n", + "Math 77.2\n", + "En 75.3\n", + "dtype: float64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = df.mean().round(1)\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
score_mean
Python59.7
Math77.2
En75.3
\n", + "
" + ], + "text/plain": [ + " score_mean\n", + "Python 59.7\n", + "Math 77.2\n", + "En 75.3" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = DataFrame(s)\n", + "df2.columns = ['score_mean']\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
score_mean59.777.275.3
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "score_mean 59.7 77.2 75.3" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3 = df2.T\n", + "df3" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEn
A40.015.090.0
B59.052.083.0
C14.0138.0137.0
D89.078.053.0
E81.0101.03.0
F75.079.086.0
score_mean59.777.275.3
\n", + "
" + ], + "text/plain": [ + " Python Math En\n", + "A 40.0 15.0 90.0\n", + "B 59.0 52.0 83.0\n", + "C 14.0 138.0 137.0\n", + "D 89.0 78.0 53.0\n", + "E 81.0 101.0 3.0\n", + "F 75.0 79.0 86.0\n", + "score_mean 59.7 77.2 75.3" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df4 = df.append(df3)\n", + "df4" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
score_mean
A48.3
B64.7
C96.3
D73.3
E61.7
F80.0
score_mean70.7
\n", + "
" + ], + "text/plain": [ + " score_mean\n", + "A 48.3\n", + "B 64.7\n", + "C 96.3\n", + "D 73.3\n", + "E 61.7\n", + "F 80.0\n", + "score_mean 70.7" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df5 = DataFrame(df4.mean(axis = 1).round(1))\n", + "df5.columns = ['score_mean']\n", + "df5" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PythonMathEnscore_mean
A40.015.090.048.3
B59.052.083.064.7
C14.0138.0137.096.3
D89.078.053.073.3
E81.0101.03.061.7
F75.079.086.080.0
score_mean59.777.275.370.7
\n", + "
" + ], + "text/plain": [ + " Python Math En score_mean\n", + "A 40.0 15.0 90.0 48.3\n", + "B 59.0 52.0 83.0 64.7\n", + "C 14.0 138.0 137.0 96.3\n", + "D 89.0 78.0 53.0 73.3\n", + "E 81.0 101.0 3.0 61.7\n", + "F 75.0 79.0 86.0 80.0\n", + "score_mean 59.7 77.2 75.3 70.7" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df4.merge(df5,left_index=True,right_index=True)" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/8-pandas分组聚合操作.ipynb b/Day76-90/code/8-pandas分组聚合操作.ipynb new file mode 100644 index 0000000..7c16aff --- /dev/null +++ b/Day76-90/code/8-pandas分组聚合操作.ipynb @@ -0,0 +1,877 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# 分组聚合透视\n", + "# 很多时候属性是相似的\n", + "\n", + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HandSmokesexweightIQ
0rightyesmale80100
1leftyesfemale50120
2leftnofemale4890
3rightnomale75130
4rightyesmale68140
5rightnomale10080
6rightnofemale4094
7rightnofemale90110
8leftnomale88100
9rightyesfemale76160
\n", + "
" + ], + "text/plain": [ + " Hand Smoke sex weight IQ\n", + "0 right yes male 80 100\n", + "1 left yes female 50 120\n", + "2 left no female 48 90\n", + "3 right no male 75 130\n", + "4 right yes male 68 140\n", + "5 right no male 100 80\n", + "6 right no female 40 94\n", + "7 right no female 90 110\n", + "8 left no male 88 100\n", + "9 right yes female 76 160" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 走右手习惯,是否抽烟,性别,对体重,智商,有一定影响\n", + "\n", + "df = DataFrame({'Hand':['right','left','left','right','right','right','right','right','left','right'],\n", + " 'Smoke':['yes','yes','no','no','yes','no','no','no','no','yes'],\n", + " 'sex':['male','female','female','male','male','male','female','female','male','female'],\n", + " 'weight':[80,50,48,75,68,100,40,90,88,76],\n", + " 'IQ':[100,120,90,130,140,80,94,110,100,160]})\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 分组聚合查看规律,某一条件下规律" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
weightIQ
Hand
left62.0103.3
right75.6116.3
\n", + "
" + ], + "text/plain": [ + " weight IQ\n", + "Hand \n", + "left 62.0 103.3\n", + "right 75.6 116.3" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = df.groupby(by = ['Hand'])[['weight','IQ']].mean().round(1)\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
weight
Hand
left62.0
right75.6
\n", + "
" + ], + "text/plain": [ + " weight\n", + "Hand \n", + "left 62.0\n", + "right 75.6" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(by = ['Hand'])[['weight']].apply(np.mean).round(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "df2 = df.groupby(by = ['Hand'])[['weight']].transform(np.mean).round(1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
weight_mean
075.6
162.0
262.0
375.6
475.6
575.6
675.6
775.6
862.0
975.6
\n", + "
" + ], + "text/plain": [ + " weight_mean\n", + "0 75.6\n", + "1 62.0\n", + "2 62.0\n", + "3 75.6\n", + "4 75.6\n", + "5 75.6\n", + "6 75.6\n", + "7 75.6\n", + "8 62.0\n", + "9 75.6" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = df2.add_suffix('_mean')\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HandSmokesexweightIQweight_mean
0rightyesmale8010075.6
1leftyesfemale5012062.0
2leftnofemale489062.0
3rightnomale7513075.6
4rightyesmale6814075.6
5rightnomale1008075.6
6rightnofemale409475.6
7rightnofemale9011075.6
8leftnomale8810062.0
9rightyesfemale7616075.6
\n", + "
" + ], + "text/plain": [ + " Hand Smoke sex weight IQ weight_mean\n", + "0 right yes male 80 100 75.6\n", + "1 left yes female 50 120 62.0\n", + "2 left no female 48 90 62.0\n", + "3 right no male 75 130 75.6\n", + "4 right yes male 68 140 75.6\n", + "5 right no male 100 80 75.6\n", + "6 right no female 40 94 75.6\n", + "7 right no female 90 110 75.6\n", + "8 left no male 88 100 62.0\n", + "9 right yes female 76 160 75.6" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3 = df.merge(df2,left_index=True,right_index=True)\n", + "df3" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Hand\n", + "left ([3, 3], [62.0, 103.3])\n", + "right ([7, 7], [75.6, 116.3])\n", + "dtype: object" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count(x):\n", + " \n", + " return (x.count(),x.mean().round(1))\n", + "\n", + "df.groupby(by = ['Hand'])[['weight','IQ']].apply(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IQ
Handsex
leftfemale120
male100
rightfemale160
male140
\n", + "
" + ], + "text/plain": [ + " IQ\n", + "Hand sex \n", + "left female 120\n", + " male 100\n", + "right female 160\n", + " male 140" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(by = ['Hand','sex'])[['IQ']].max()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = df.groupby(by = ['Hand'])['IQ','weight']\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IQweight
maxmeanmaxmean
Hand
left120103.38862.0
right160116.310075.6
\n", + "
" + ], + "text/plain": [ + " IQ weight \n", + " max mean max mean\n", + "Hand \n", + "left 120 103.3 88 62.0\n", + "right 160 116.3 100 75.6" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.agg(['max','mean']).round(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IQweight
Hand
left12062.0
right16075.6
\n", + "
" + ], + "text/plain": [ + " IQ weight\n", + "Hand \n", + "left 120 62.0\n", + "right 160 75.6" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.agg({'IQ':'max','weight':'mean'}).round(1)" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/9-pandas数据集成实战.ipynb b/Day76-90/code/9-pandas数据集成实战.ipynb new file mode 100644 index 0000000..063a939 --- /dev/null +++ b/Day76-90/code/9-pandas数据集成实战.ipynb @@ -0,0 +1,6213 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "\n", + "from pandas import Series,DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# csv类型文件呢,文本文件,excel打开,格式化的文件,所以excel可以直接读取成表格\n", + "# 美国人口的一些情况\n", + "# pandas分析一下美国人口数据" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statearea (sq. mi)
0Alabama52423
1Alaska656425
2Arizona114006
3Arkansas53182
4California163707
5Colorado104100
6Connecticut5544
7Delaware1954
8Florida65758
9Georgia59441
10Hawaii10932
11Idaho83574
12Illinois57918
13Indiana36420
14Iowa56276
15Kansas82282
16Kentucky40411
17Louisiana51843
18Maine35387
19Maryland12407
20Massachusetts10555
21Michigan96810
22Minnesota86943
23Mississippi48434
24Missouri69709
25Montana147046
26Nebraska77358
27Nevada110567
28New Hampshire9351
29New Jersey8722
30New Mexico121593
31New York54475
32North Carolina53821
33North Dakota70704
34Ohio44828
35Oklahoma69903
36Oregon98386
37Pennsylvania46058
38Rhode Island1545
39South Carolina32007
40South Dakota77121
41Tennessee42146
42Texas268601
43Utah84904
44Vermont9615
45Virginia42769
46Washington71303
47West Virginia24231
48Wisconsin65503
49Wyoming97818
50District of Columbia68
51Puerto Rico3515
\n", + "
" + ], + "text/plain": [ + " state area (sq. mi)\n", + "0 Alabama 52423\n", + "1 Alaska 656425\n", + "2 Arizona 114006\n", + "3 Arkansas 53182\n", + "4 California 163707\n", + "5 Colorado 104100\n", + "6 Connecticut 5544\n", + "7 Delaware 1954\n", + "8 Florida 65758\n", + "9 Georgia 59441\n", + "10 Hawaii 10932\n", + "11 Idaho 83574\n", + "12 Illinois 57918\n", + "13 Indiana 36420\n", + "14 Iowa 56276\n", + "15 Kansas 82282\n", + "16 Kentucky 40411\n", + "17 Louisiana 51843\n", + "18 Maine 35387\n", + "19 Maryland 12407\n", + "20 Massachusetts 10555\n", + "21 Michigan 96810\n", + "22 Minnesota 86943\n", + "23 Mississippi 48434\n", + "24 Missouri 69709\n", + "25 Montana 147046\n", + "26 Nebraska 77358\n", + "27 Nevada 110567\n", + "28 New Hampshire 9351\n", + "29 New Jersey 8722\n", + "30 New Mexico 121593\n", + "31 New York 54475\n", + "32 North Carolina 53821\n", + "33 North Dakota 70704\n", + "34 Ohio 44828\n", + "35 Oklahoma 69903\n", + "36 Oregon 98386\n", + "37 Pennsylvania 46058\n", + "38 Rhode Island 1545\n", + "39 South Carolina 32007\n", + "40 South Dakota 77121\n", + "41 Tennessee 42146\n", + "42 Texas 268601\n", + "43 Utah 84904\n", + "44 Vermont 9615\n", + "45 Virginia 42769\n", + "46 Washington 71303\n", + "47 West Virginia 24231\n", + "48 Wisconsin 65503\n", + "49 Wyoming 97818\n", + "50 District of Columbia 68\n", + "51 Puerto Rico 3515" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 美国各州的面积\n", + "areas = pd.read_csv('./state-areas.csv')\n", + "areas" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(52, 2)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "areas.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stateabbreviation
0AlabamaAL
1AlaskaAK
2ArizonaAZ
3ArkansasAR
4CaliforniaCA
5ColoradoCO
6ConnecticutCT
7DelawareDE
8District of ColumbiaDC
9FloridaFL
10GeorgiaGA
11HawaiiHI
12IdahoID
13IllinoisIL
14IndianaIN
15IowaIA
16KansasKS
17KentuckyKY
18LouisianaLA
19MaineME
20MontanaMT
21NebraskaNE
22NevadaNV
23New HampshireNH
24New JerseyNJ
25New MexicoNM
26New YorkNY
27North CarolinaNC
28North DakotaND
29OhioOH
30OklahomaOK
31OregonOR
32MarylandMD
33MassachusettsMA
34MichiganMI
35MinnesotaMN
36MississippiMS
37MissouriMO
38PennsylvaniaPA
39Rhode IslandRI
40South CarolinaSC
41South DakotaSD
42TennesseeTN
43TexasTX
44UtahUT
45VermontVT
46VirginiaVA
47WashingtonWA
48West VirginiaWV
49WisconsinWI
50WyomingWY
\n", + "
" + ], + "text/plain": [ + " state abbreviation\n", + "0 Alabama AL\n", + "1 Alaska AK\n", + "2 Arizona AZ\n", + "3 Arkansas AR\n", + "4 California CA\n", + "5 Colorado CO\n", + "6 Connecticut CT\n", + "7 Delaware DE\n", + "8 District of Columbia DC\n", + "9 Florida FL\n", + "10 Georgia GA\n", + "11 Hawaii HI\n", + "12 Idaho ID\n", + "13 Illinois IL\n", + "14 Indiana IN\n", + "15 Iowa IA\n", + "16 Kansas KS\n", + "17 Kentucky KY\n", + "18 Louisiana LA\n", + "19 Maine ME\n", + "20 Montana MT\n", + "21 Nebraska NE\n", + "22 Nevada NV\n", + "23 New Hampshire NH\n", + "24 New Jersey NJ\n", + "25 New Mexico NM\n", + "26 New York NY\n", + "27 North Carolina NC\n", + "28 North Dakota ND\n", + "29 Ohio OH\n", + "30 Oklahoma OK\n", + "31 Oregon OR\n", + "32 Maryland MD\n", + "33 Massachusetts MA\n", + "34 Michigan MI\n", + "35 Minnesota MN\n", + "36 Mississippi MS\n", + "37 Missouri MO\n", + "38 Pennsylvania PA\n", + "39 Rhode Island RI\n", + "40 South Carolina SC\n", + "41 South Dakota SD\n", + "42 Tennessee TN\n", + "43 Texas TX\n", + "44 Utah UT\n", + "45 Vermont VT\n", + "46 Virginia VA\n", + "47 Washington WA\n", + "48 West Virginia WV\n", + "49 Wisconsin WI\n", + "50 Wyoming WY" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 美国各州 缩写\n", + "abbrevs = pd.read_csv('./state-abbrevs.csv')\n", + "abbrevs" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(51, 2)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "abbrevs.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulation
0ALunder1820121117489.0
1ALtotal20124817528.0
2ALunder1820101130966.0
3ALtotal20104785570.0
4ALunder1820111125763.0
5ALtotal20114801627.0
6ALtotal20094757938.0
7ALunder1820091134192.0
8ALunder1820131111481.0
9ALtotal20134833722.0
10ALtotal20074672840.0
11ALunder1820071132296.0
12ALtotal20084718206.0
13ALunder1820081134927.0
14ALtotal20054569805.0
15ALunder1820051117229.0
16ALtotal20064628981.0
17ALunder1820061126798.0
18ALtotal20044530729.0
19ALunder1820041113662.0
20ALtotal20034503491.0
21ALunder1820031113083.0
22ALtotal20014467634.0
23ALunder1820011120409.0
24ALtotal20024480089.0
25ALunder1820021116590.0
26ALunder1819991121287.0
27ALtotal19994430141.0
28ALtotal20004452173.0
29ALunder1820001122273.0
...............
2514USAunder18199971946051.0
2515USAtotal2000282162411.0
2516USAunder18200072376189.0
2517USAtotal1999279040181.0
2518USAtotal2001284968955.0
2519USAunder18200172671175.0
2520USAtotal2002287625193.0
2521USAunder18200272936457.0
2522USAtotal2003290107933.0
2523USAunder18200373100758.0
2524USAtotal2004292805298.0
2525USAunder18200473297735.0
2526USAtotal2005295516599.0
2527USAunder18200573523669.0
2528USAtotal2006298379912.0
2529USAunder18200673757714.0
2530USAtotal2007301231207.0
2531USAunder18200774019405.0
2532USAtotal2008304093966.0
2533USAunder18200874104602.0
2534USAunder18201373585872.0
2535USAtotal2013316128839.0
2536USAtotal2009306771529.0
2537USAunder18200974134167.0
2538USAunder18201074119556.0
2539USAtotal2010309326295.0
2540USAunder18201173902222.0
2541USAtotal2011311582564.0
2542USAunder18201273708179.0
2543USAtotal2012313873685.0
\n", + "

2544 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " state/region ages year population\n", + "0 AL under18 2012 1117489.0\n", + "1 AL total 2012 4817528.0\n", + "2 AL under18 2010 1130966.0\n", + "3 AL total 2010 4785570.0\n", + "4 AL under18 2011 1125763.0\n", + "5 AL total 2011 4801627.0\n", + "6 AL total 2009 4757938.0\n", + "7 AL under18 2009 1134192.0\n", + "8 AL under18 2013 1111481.0\n", + "9 AL total 2013 4833722.0\n", + "10 AL total 2007 4672840.0\n", + "11 AL under18 2007 1132296.0\n", + "12 AL total 2008 4718206.0\n", + "13 AL under18 2008 1134927.0\n", + "14 AL total 2005 4569805.0\n", + "15 AL under18 2005 1117229.0\n", + "16 AL total 2006 4628981.0\n", + "17 AL under18 2006 1126798.0\n", + "18 AL total 2004 4530729.0\n", + "19 AL under18 2004 1113662.0\n", + "20 AL total 2003 4503491.0\n", + "21 AL under18 2003 1113083.0\n", + "22 AL total 2001 4467634.0\n", + "23 AL under18 2001 1120409.0\n", + "24 AL total 2002 4480089.0\n", + "25 AL under18 2002 1116590.0\n", + "26 AL under18 1999 1121287.0\n", + "27 AL total 1999 4430141.0\n", + "28 AL total 2000 4452173.0\n", + "29 AL under18 2000 1122273.0\n", + "... ... ... ... ...\n", + "2514 USA under18 1999 71946051.0\n", + "2515 USA total 2000 282162411.0\n", + "2516 USA under18 2000 72376189.0\n", + "2517 USA total 1999 279040181.0\n", + "2518 USA total 2001 284968955.0\n", + "2519 USA under18 2001 72671175.0\n", + "2520 USA total 2002 287625193.0\n", + "2521 USA under18 2002 72936457.0\n", + "2522 USA total 2003 290107933.0\n", + "2523 USA under18 2003 73100758.0\n", + "2524 USA total 2004 292805298.0\n", + "2525 USA under18 2004 73297735.0\n", + "2526 USA total 2005 295516599.0\n", + "2527 USA under18 2005 73523669.0\n", + "2528 USA total 2006 298379912.0\n", + "2529 USA under18 2006 73757714.0\n", + "2530 USA total 2007 301231207.0\n", + "2531 USA under18 2007 74019405.0\n", + "2532 USA total 2008 304093966.0\n", + "2533 USA under18 2008 74104602.0\n", + "2534 USA under18 2013 73585872.0\n", + "2535 USA total 2013 316128839.0\n", + "2536 USA total 2009 306771529.0\n", + "2537 USA under18 2009 74134167.0\n", + "2538 USA under18 2010 74119556.0\n", + "2539 USA total 2010 309326295.0\n", + "2540 USA under18 2011 73902222.0\n", + "2541 USA total 2011 311582564.0\n", + "2542 USA under18 2012 73708179.0\n", + "2543 USA total 2012 313873685.0\n", + "\n", + "[2544 rows x 4 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 美国的人口数据\n", + "pop = pd.read_csv('./state-population.csv')\n", + "pop" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2544, 4)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulation
0ALunder1820121117489.0
1ALtotal20124817528.0
2ALunder1820101130966.0
3ALtotal20104785570.0
4ALunder1820111125763.0
\n", + "
" + ], + "text/plain": [ + " state/region ages year population\n", + "0 AL under18 2012 1117489.0\n", + "1 AL total 2012 4817528.0\n", + "2 AL under18 2010 1130966.0\n", + "3 AL total 2010 4785570.0\n", + "4 AL under18 2011 1125763.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stateabbreviation
0AlabamaAL
1AlaskaAK
2ArizonaAZ
3ArkansasAR
4CaliforniaCA
\n", + "
" + ], + "text/plain": [ + " state abbreviation\n", + "0 Alabama AL\n", + "1 Alaska AK\n", + "2 Arizona AZ\n", + "3 Arkansas AR\n", + "4 California CA" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "abbrevs.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(2544, 4)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(51, 2)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(pop.shape,abbrevs.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(2544, 6)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 级联时,数据变少了96个,哪些数据变少\n", + "# inner内连接,outer叫做外连接\n", + "pop2 = pop.merge(abbrevs,how = 'outer',left_on='state/region',right_on='abbreviation')\n", + "pop2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region False\n", + "ages False\n", + "year False\n", + "population True\n", + "state True\n", + "abbreviation True\n", + "dtype: bool" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 前三列没有空值\n", + "pop2.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstateabbreviation
0ALunder1820121117489.0AlabamaAL
1ALtotal20124817528.0AlabamaAL
2ALunder1820101130966.0AlabamaAL
3ALtotal20104785570.0AlabamaAL
4ALunder1820111125763.0AlabamaAL
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state abbreviation\n", + "0 AL under18 2012 1117489.0 Alabama AL\n", + "1 AL total 2012 4817528.0 Alabama AL\n", + "2 AL under18 2010 1130966.0 Alabama AL\n", + "3 AL total 2010 4785570.0 Alabama AL\n", + "4 AL under18 2011 1125763.0 Alabama AL" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# 删除一列\n", + "pop2.drop(labels = 'abbreviation',axis = 1,inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstate
0ALunder1820121117489.0Alabama
1ALtotal20124817528.0Alabama
2ALunder1820101130966.0Alabama
3ALtotal20104785570.0Alabama
4ALunder1820111125763.0Alabama
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state\n", + "0 AL under18 2012 1117489.0 Alabama\n", + "1 AL total 2012 4817528.0 Alabama\n", + "2 AL under18 2010 1130966.0 Alabama\n", + "3 AL total 2010 4785570.0 Alabama\n", + "4 AL under18 2011 1125763.0 Alabama" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region False\n", + "ages False\n", + "year False\n", + "population True\n", + "state True\n", + "dtype: bool" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + "5 False\n", + "6 False\n", + "7 False\n", + "8 False\n", + "9 False\n", + "10 False\n", + "11 False\n", + "12 False\n", + "13 False\n", + "14 False\n", + "15 False\n", + "16 False\n", + "17 False\n", + "18 False\n", + "19 False\n", + "20 False\n", + "21 False\n", + "22 False\n", + "23 False\n", + "24 False\n", + "25 False\n", + "26 False\n", + "27 False\n", + "28 False\n", + "29 False\n", + " ... \n", + "2514 True\n", + "2515 True\n", + "2516 True\n", + "2517 True\n", + "2518 True\n", + "2519 True\n", + "2520 True\n", + "2521 True\n", + "2522 True\n", + "2523 True\n", + "2524 True\n", + "2525 True\n", + "2526 True\n", + "2527 True\n", + "2528 True\n", + "2529 True\n", + "2530 True\n", + "2531 True\n", + "2532 True\n", + "2533 True\n", + "2534 True\n", + "2535 True\n", + "2536 True\n", + "2537 True\n", + "2538 True\n", + "2539 True\n", + "2540 True\n", + "2541 True\n", + "2542 True\n", + "2543 True\n", + "Name: state, Length: 2544, dtype: bool" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 定位为空的数据\n", + "cond = pop2['state'].isnull()\n", + "cond" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['PR', 'USA'], dtype=object)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 只有当state为空,返回,为空时True\n", + "# 去重操作,非重复值\n", + "pop2[cond]['state/region'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(51, 2)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "abbrevs.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(52, 2)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "areas.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statearea (sq. mi)
0Alabama52423
1Alaska656425
2Arizona114006
3Arkansas53182
4California163707
5Colorado104100
6Connecticut5544
7Delaware1954
8Florida65758
9Georgia59441
10Hawaii10932
11Idaho83574
12Illinois57918
13Indiana36420
14Iowa56276
15Kansas82282
16Kentucky40411
17Louisiana51843
18Maine35387
19Maryland12407
20Massachusetts10555
21Michigan96810
22Minnesota86943
23Mississippi48434
24Missouri69709
25Montana147046
26Nebraska77358
27Nevada110567
28New Hampshire9351
29New Jersey8722
30New Mexico121593
31New York54475
32North Carolina53821
33North Dakota70704
34Ohio44828
35Oklahoma69903
36Oregon98386
37Pennsylvania46058
38Rhode Island1545
39South Carolina32007
40South Dakota77121
41Tennessee42146
42Texas268601
43Utah84904
44Vermont9615
45Virginia42769
46Washington71303
47West Virginia24231
48Wisconsin65503
49Wyoming97818
50District of Columbia68
51Puerto Rico3515
\n", + "
" + ], + "text/plain": [ + " state area (sq. mi)\n", + "0 Alabama 52423\n", + "1 Alaska 656425\n", + "2 Arizona 114006\n", + "3 Arkansas 53182\n", + "4 California 163707\n", + "5 Colorado 104100\n", + "6 Connecticut 5544\n", + "7 Delaware 1954\n", + "8 Florida 65758\n", + "9 Georgia 59441\n", + "10 Hawaii 10932\n", + "11 Idaho 83574\n", + "12 Illinois 57918\n", + "13 Indiana 36420\n", + "14 Iowa 56276\n", + "15 Kansas 82282\n", + "16 Kentucky 40411\n", + "17 Louisiana 51843\n", + "18 Maine 35387\n", + "19 Maryland 12407\n", + "20 Massachusetts 10555\n", + "21 Michigan 96810\n", + "22 Minnesota 86943\n", + "23 Mississippi 48434\n", + "24 Missouri 69709\n", + "25 Montana 147046\n", + "26 Nebraska 77358\n", + "27 Nevada 110567\n", + "28 New Hampshire 9351\n", + "29 New Jersey 8722\n", + "30 New Mexico 121593\n", + "31 New York 54475\n", + "32 North Carolina 53821\n", + "33 North Dakota 70704\n", + "34 Ohio 44828\n", + "35 Oklahoma 69903\n", + "36 Oregon 98386\n", + "37 Pennsylvania 46058\n", + "38 Rhode Island 1545\n", + "39 South Carolina 32007\n", + "40 South Dakota 77121\n", + "41 Tennessee 42146\n", + "42 Texas 268601\n", + "43 Utah 84904\n", + "44 Vermont 9615\n", + "45 Virginia 42769\n", + "46 Washington 71303\n", + "47 West Virginia 24231\n", + "48 Wisconsin 65503\n", + "49 Wyoming 97818\n", + "50 District of Columbia 68\n", + "51 Puerto Rico 3515" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "areas" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + "5 False\n", + "6 False\n", + "7 False\n", + "8 False\n", + "9 False\n", + "10 False\n", + "11 False\n", + "12 False\n", + "13 False\n", + "14 False\n", + "15 False\n", + "16 False\n", + "17 False\n", + "18 False\n", + "19 False\n", + "20 False\n", + "21 False\n", + "22 False\n", + "23 False\n", + "24 False\n", + "25 False\n", + "26 False\n", + "27 False\n", + "28 False\n", + "29 False\n", + " ... \n", + "2514 False\n", + "2515 False\n", + "2516 False\n", + "2517 False\n", + "2518 False\n", + "2519 False\n", + "2520 False\n", + "2521 False\n", + "2522 False\n", + "2523 False\n", + "2524 False\n", + "2525 False\n", + "2526 False\n", + "2527 False\n", + "2528 False\n", + "2529 False\n", + "2530 False\n", + "2531 False\n", + "2532 False\n", + "2533 False\n", + "2534 False\n", + "2535 False\n", + "2536 False\n", + "2537 False\n", + "2538 False\n", + "2539 False\n", + "2540 False\n", + "2541 False\n", + "2542 False\n", + "2543 False\n", + "Name: state/region, Length: 2544, dtype: bool" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cond = pop2['state/region'] == 'PR'\n", + "cond" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\python36\\lib\\site-packages\\ipykernel_launcher.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "pop2['state'][cond] = 'Puerto Rico'" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\python36\\lib\\site-packages\\ipykernel_launcher.py:2: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " \n" + ] + } + ], + "source": [ + "cond = pop2['state/region'] == 'USA'\n", + "pop2['state'][cond] = 'United State'" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region False\n", + "ages False\n", + "year False\n", + "population True\n", + "state False\n", + "dtype: bool" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(20, 5)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cond = pop2['population'].isnull()\n", + "pop2[cond].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2544, 5)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "# 将难于进行补全的空数据进行删除\n", + "pop2.dropna(inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2524, 5)" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region False\n", + "ages False\n", + "year False\n", + "population False\n", + "state False\n", + "dtype: bool" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region True\n", + "ages True\n", + "year True\n", + "population True\n", + "state True\n", + "dtype: bool" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.notnull().all()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statearea (sq. mi)
0Alabama52423
1Alaska656425
2Arizona114006
3Arkansas53182
4California163707
\n", + "
" + ], + "text/plain": [ + " state area (sq. mi)\n", + "0 Alabama 52423\n", + "1 Alaska 656425\n", + "2 Arizona 114006\n", + "3 Arkansas 53182\n", + "4 California 163707" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "areas.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstate
0ALunder1820121117489.0Alabama
1ALtotal20124817528.0Alabama
2ALunder1820101130966.0Alabama
3ALtotal20104785570.0Alabama
4ALunder1820111125763.0Alabama
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state\n", + "0 AL under18 2012 1117489.0 Alabama\n", + "1 AL total 2012 4817528.0 Alabama\n", + "2 AL under18 2010 1130966.0 Alabama\n", + "3 AL total 2010 4785570.0 Alabama\n", + "4 AL under18 2011 1125763.0 Alabama" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2524, 6)" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop3 = pop2.merge(areas,how = 'outer')\n", + "pop3.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstatearea (sq. mi)
0ALunder1820121117489.0Alabama52423.0
1ALtotal20124817528.0Alabama52423.0
2ALunder1820101130966.0Alabama52423.0
3ALtotal20104785570.0Alabama52423.0
4ALunder1820111125763.0Alabama52423.0
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state area (sq. mi)\n", + "0 AL under18 2012 1117489.0 Alabama 52423.0\n", + "1 AL total 2012 4817528.0 Alabama 52423.0\n", + "2 AL under18 2010 1130966.0 Alabama 52423.0\n", + "3 AL total 2010 4785570.0 Alabama 52423.0\n", + "4 AL under18 2011 1125763.0 Alabama 52423.0" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop3.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region False\n", + "ages False\n", + "year False\n", + "population False\n", + "state False\n", + "area (sq. mi) True\n", + "dtype: bool" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop3.isnull().any()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstatearea (sq. mi)
2476USAunder18199064218512.0United StateNaN
2477USAtotal1990249622814.0United StateNaN
2478USAtotal1991252980942.0United StateNaN
2479USAunder18199165313018.0United StateNaN
2480USAunder18199266509177.0United StateNaN
2481USAtotal1992256514231.0United StateNaN
2482USAtotal1993259918595.0United StateNaN
2483USAunder18199367594938.0United StateNaN
2484USAunder18199468640936.0United StateNaN
2485USAtotal1994263125826.0United StateNaN
2486USAunder18199569473140.0United StateNaN
2487USAunder18199670233512.0United StateNaN
2488USAtotal1995266278403.0United StateNaN
2489USAtotal1996269394291.0United StateNaN
2490USAtotal1997272646932.0United StateNaN
2491USAunder18199770920738.0United StateNaN
2492USAunder18199871431406.0United StateNaN
2493USAtotal1998275854116.0United StateNaN
2494USAunder18199971946051.0United StateNaN
2495USAtotal2000282162411.0United StateNaN
2496USAunder18200072376189.0United StateNaN
2497USAtotal1999279040181.0United StateNaN
2498USAtotal2001284968955.0United StateNaN
2499USAunder18200172671175.0United StateNaN
2500USAtotal2002287625193.0United StateNaN
2501USAunder18200272936457.0United StateNaN
2502USAtotal2003290107933.0United StateNaN
2503USAunder18200373100758.0United StateNaN
2504USAtotal2004292805298.0United StateNaN
2505USAunder18200473297735.0United StateNaN
2506USAtotal2005295516599.0United StateNaN
2507USAunder18200573523669.0United StateNaN
2508USAtotal2006298379912.0United StateNaN
2509USAunder18200673757714.0United StateNaN
2510USAtotal2007301231207.0United StateNaN
2511USAunder18200774019405.0United StateNaN
2512USAtotal2008304093966.0United StateNaN
2513USAunder18200874104602.0United StateNaN
2514USAunder18201373585872.0United StateNaN
2515USAtotal2013316128839.0United StateNaN
2516USAtotal2009306771529.0United StateNaN
2517USAunder18200974134167.0United StateNaN
2518USAunder18201074119556.0United StateNaN
2519USAtotal2010309326295.0United StateNaN
2520USAunder18201173902222.0United StateNaN
2521USAtotal2011311582564.0United StateNaN
2522USAunder18201273708179.0United StateNaN
2523USAtotal2012313873685.0United StateNaN
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state area (sq. mi)\n", + "2476 USA under18 1990 64218512.0 United State NaN\n", + "2477 USA total 1990 249622814.0 United State NaN\n", + "2478 USA total 1991 252980942.0 United State NaN\n", + "2479 USA under18 1991 65313018.0 United State NaN\n", + "2480 USA under18 1992 66509177.0 United State NaN\n", + "2481 USA total 1992 256514231.0 United State NaN\n", + "2482 USA total 1993 259918595.0 United State NaN\n", + "2483 USA under18 1993 67594938.0 United State NaN\n", + "2484 USA under18 1994 68640936.0 United State NaN\n", + "2485 USA total 1994 263125826.0 United State NaN\n", + "2486 USA under18 1995 69473140.0 United State NaN\n", + "2487 USA under18 1996 70233512.0 United State NaN\n", + "2488 USA total 1995 266278403.0 United State NaN\n", + "2489 USA total 1996 269394291.0 United State NaN\n", + "2490 USA total 1997 272646932.0 United State NaN\n", + "2491 USA under18 1997 70920738.0 United State NaN\n", + "2492 USA under18 1998 71431406.0 United State NaN\n", + "2493 USA total 1998 275854116.0 United State NaN\n", + "2494 USA under18 1999 71946051.0 United State NaN\n", + "2495 USA total 2000 282162411.0 United State NaN\n", + "2496 USA under18 2000 72376189.0 United State NaN\n", + "2497 USA total 1999 279040181.0 United State NaN\n", + "2498 USA total 2001 284968955.0 United State NaN\n", + "2499 USA under18 2001 72671175.0 United State NaN\n", + "2500 USA total 2002 287625193.0 United State NaN\n", + "2501 USA under18 2002 72936457.0 United State NaN\n", + "2502 USA total 2003 290107933.0 United State NaN\n", + "2503 USA under18 2003 73100758.0 United State NaN\n", + "2504 USA total 2004 292805298.0 United State NaN\n", + "2505 USA under18 2004 73297735.0 United State NaN\n", + "2506 USA total 2005 295516599.0 United State NaN\n", + "2507 USA under18 2005 73523669.0 United State NaN\n", + "2508 USA total 2006 298379912.0 United State NaN\n", + "2509 USA under18 2006 73757714.0 United State NaN\n", + "2510 USA total 2007 301231207.0 United State NaN\n", + "2511 USA under18 2007 74019405.0 United State NaN\n", + "2512 USA total 2008 304093966.0 United State NaN\n", + "2513 USA under18 2008 74104602.0 United State NaN\n", + "2514 USA under18 2013 73585872.0 United State NaN\n", + "2515 USA total 2013 316128839.0 United State NaN\n", + "2516 USA total 2009 306771529.0 United State NaN\n", + "2517 USA under18 2009 74134167.0 United State NaN\n", + "2518 USA under18 2010 74119556.0 United State NaN\n", + "2519 USA total 2010 309326295.0 United State NaN\n", + "2520 USA under18 2011 73902222.0 United State NaN\n", + "2521 USA total 2011 311582564.0 United State NaN\n", + "2522 USA under18 2012 73708179.0 United State NaN\n", + "2523 USA total 2012 313873685.0 United State NaN" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cond = pop3['area (sq. mi)'].isnull()\n", + "pop3[cond]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3790399" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = areas['area (sq. mi)'].sum()\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\python36\\lib\\site-packages\\ipykernel_launcher.py:3: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " This is separate from the ipykernel package so we can avoid doing imports until\n" + ] + } + ], + "source": [ + "cond = pop3['state'] == \"United State\"\n", + "\n", + "pop3['area (sq. mi)'][cond] = a" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "state/region True\n", + "ages True\n", + "year True\n", + "population True\n", + "state True\n", + "area (sq. mi) True\n", + "dtype: bool" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop3.notnull().all()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstatearea (sq. mi)
0ALunder1820121117489.0Alabama52423.0
1ALtotal20124817528.0Alabama52423.0
2ALunder1820101130966.0Alabama52423.0
3ALtotal20104785570.0Alabama52423.0
4ALunder1820111125763.0Alabama52423.0
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state area (sq. mi)\n", + "0 AL under18 2012 1117489.0 Alabama 52423.0\n", + "1 AL total 2012 4817528.0 Alabama 52423.0\n", + "2 AL under18 2010 1130966.0 Alabama 52423.0\n", + "3 AL total 2010 4785570.0 Alabama 52423.0\n", + "4 AL under18 2011 1125763.0 Alabama 52423.0" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop3.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 21.3\n", + "1 91.9\n", + "2 21.6\n", + "3 91.3\n", + "4 21.5\n", + "5 91.6\n", + "6 90.8\n", + "7 21.6\n", + "8 21.2\n", + "9 92.2\n", + "10 89.1\n", + "11 21.6\n", + "12 90.0\n", + "13 21.6\n", + "14 87.2\n", + "15 21.3\n", + "16 88.3\n", + "17 21.5\n", + "18 86.4\n", + "19 21.2\n", + "20 85.9\n", + "21 21.2\n", + "22 85.2\n", + "23 21.4\n", + "24 85.5\n", + "25 21.3\n", + "26 21.4\n", + "27 84.5\n", + "28 84.9\n", + "29 21.4\n", + " ... \n", + "2494 19.0\n", + "2495 74.4\n", + "2496 19.1\n", + "2497 73.6\n", + "2498 75.2\n", + "2499 19.2\n", + "2500 75.9\n", + "2501 19.2\n", + "2502 76.5\n", + "2503 19.3\n", + "2504 77.2\n", + "2505 19.3\n", + "2506 78.0\n", + "2507 19.4\n", + "2508 78.7\n", + "2509 19.5\n", + "2510 79.5\n", + "2511 19.5\n", + "2512 80.2\n", + "2513 19.6\n", + "2514 19.4\n", + "2515 83.4\n", + "2516 80.9\n", + "2517 19.6\n", + "2518 19.6\n", + "2519 81.6\n", + "2520 19.5\n", + "2521 82.2\n", + "2522 19.4\n", + "2523 82.8\n", + "Length: 2524, dtype: float64" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop_density = (pop3['population']/pop3['area (sq. mi)']).round(1)\n", + "pop_density" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
021.3
191.9
221.6
391.3
421.5
591.6
690.8
721.6
821.2
992.2
1089.1
1121.6
1290.0
1321.6
1487.2
1521.3
1688.3
1721.5
1886.4
1921.2
2085.9
2121.2
2285.2
2321.4
2485.5
2521.3
2621.4
2784.5
2884.9
2921.4
......
249419.0
249574.4
249619.1
249773.6
249875.2
249919.2
250075.9
250119.2
250276.5
250319.3
250477.2
250519.3
250678.0
250719.4
250878.7
250919.5
251079.5
251119.5
251280.2
251319.6
251419.4
251583.4
251680.9
251719.6
251819.6
251981.6
252019.5
252182.2
252219.4
252382.8
\n", + "

2524 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " 0\n", + "0 21.3\n", + "1 91.9\n", + "2 21.6\n", + "3 91.3\n", + "4 21.5\n", + "5 91.6\n", + "6 90.8\n", + "7 21.6\n", + "8 21.2\n", + "9 92.2\n", + "10 89.1\n", + "11 21.6\n", + "12 90.0\n", + "13 21.6\n", + "14 87.2\n", + "15 21.3\n", + "16 88.3\n", + "17 21.5\n", + "18 86.4\n", + "19 21.2\n", + "20 85.9\n", + "21 21.2\n", + "22 85.2\n", + "23 21.4\n", + "24 85.5\n", + "25 21.3\n", + "26 21.4\n", + "27 84.5\n", + "28 84.9\n", + "29 21.4\n", + "... ...\n", + "2494 19.0\n", + "2495 74.4\n", + "2496 19.1\n", + "2497 73.6\n", + "2498 75.2\n", + "2499 19.2\n", + "2500 75.9\n", + "2501 19.2\n", + "2502 76.5\n", + "2503 19.3\n", + "2504 77.2\n", + "2505 19.3\n", + "2506 78.0\n", + "2507 19.4\n", + "2508 78.7\n", + "2509 19.5\n", + "2510 79.5\n", + "2511 19.5\n", + "2512 80.2\n", + "2513 19.6\n", + "2514 19.4\n", + "2515 83.4\n", + "2516 80.9\n", + "2517 19.6\n", + "2518 19.6\n", + "2519 81.6\n", + "2520 19.5\n", + "2521 82.2\n", + "2522 19.4\n", + "2523 82.8\n", + "\n", + "[2524 rows x 1 columns]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop_density = DataFrame(pop_density)\n", + "pop_density" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pop_density
021.3
191.9
221.6
391.3
421.5
\n", + "
" + ], + "text/plain": [ + " pop_density\n", + "0 21.3\n", + "1 91.9\n", + "2 21.6\n", + "3 91.3\n", + "4 21.5" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop_density.columns = ['pop_density']\n", + "pop_density.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstatearea (sq. mi)pop_density
0ALunder1820121117489.0Alabama52423.021.3
1ALtotal20124817528.0Alabama52423.091.9
2ALunder1820101130966.0Alabama52423.021.6
3ALtotal20104785570.0Alabama52423.091.3
4ALunder1820111125763.0Alabama52423.021.5
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state area (sq. mi) pop_density\n", + "0 AL under18 2012 1117489.0 Alabama 52423.0 21.3\n", + "1 AL total 2012 4817528.0 Alabama 52423.0 91.9\n", + "2 AL under18 2010 1130966.0 Alabama 52423.0 21.6\n", + "3 AL total 2010 4785570.0 Alabama 52423.0 91.3\n", + "4 AL under18 2011 1125763.0 Alabama 52423.0 21.5" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop4 = pop3.merge(pop_density,left_index=True,right_index=True)\n", + "pop4.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2012, 2010, 2011, 2009, 2013, 2007, 2008, 2005, 2006, 2004, 2003,\n", + " 2001, 2002, 1999, 2000, 1998, 1997, 1996, 1995, 1994, 1993, 1992,\n", + " 1991, 1990], dtype=int64)" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop4['year'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['under18', 'total'], dtype=object)" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop4['ages'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state/regionagesyearpopulationstatearea (sq. mi)pop_density
1ALtotal20124817528.0Alabama52423.091.9
95AKtotal2012730307.0Alaska656425.01.1
97AZtotal20126551149.0Arizona114006.057.5
191ARtotal20122949828.0Arkansas53182.055.5
193CAtotal201237999878.0California163707.0232.1
287COtotal20125189458.0Colorado104100.049.9
289CTtotal20123591765.0Connecticut5544.0647.9
383DEtotal2012917053.0Delaware1954.0469.3
385DCtotal2012633427.0District of Columbia68.09315.1
479FLtotal201219320749.0Florida65758.0293.8
480GAtotal20129915646.0Georgia59441.0166.8
575HItotal20121390090.0Hawaii10932.0127.2
576IDtotal20121595590.0Idaho83574.019.1
671ILtotal201212868192.0Illinois57918.0222.2
672INtotal20126537782.0Indiana36420.0179.5
767IAtotal20123075039.0Iowa56276.054.6
768KStotal20122885398.0Kansas82282.035.1
863KYtotal20124379730.0Kentucky40411.0108.4
864LAtotal20124602134.0Louisiana51843.088.8
959MEtotal20121328501.0Maine35387.037.5
960MDtotal20125884868.0Maryland12407.0474.3
1055MAtotal20126645303.0Massachusetts10555.0629.6
1056MItotal20129882519.0Michigan96810.0102.1
1151MNtotal20125379646.0Minnesota86943.061.9
1152MStotal20122986450.0Mississippi48434.061.7
1247MOtotal20126024522.0Missouri69709.086.4
1248MTtotal20121005494.0Montana147046.06.8
1343NEtotal20121855350.0Nebraska77358.024.0
1344NVtotal20122754354.0Nevada110567.024.9
1439NHtotal20121321617.0New Hampshire9351.0141.3
1440NJtotal20128867749.0New Jersey8722.01016.7
1535NMtotal20122083540.0New Mexico121593.017.1
1536NYtotal201219576125.0New York54475.0359.4
1631NCtotal20129748364.0North Carolina53821.0181.1
1632NDtotal2012701345.0North Dakota70704.09.9
1727OHtotal201211553031.0Ohio44828.0257.7
1728OKtotal20123815780.0Oklahoma69903.054.6
1823ORtotal20123899801.0Oregon98386.039.6
1824PAtotal201212764475.0Pennsylvania46058.0277.1
1919RItotal20121050304.0Rhode Island1545.0679.8
1920SCtotal20124723417.0South Carolina32007.0147.6
2015SDtotal2012834047.0South Dakota77121.010.8
2016TNtotal20126454914.0Tennessee42146.0153.2
2111TXtotal201226060796.0Texas268601.097.0
2112UTtotal20122854871.0Utah84904.033.6
2207VTtotal2012625953.0Vermont9615.065.1
2208VAtotal20128186628.0Virginia42769.0191.4
2303WAtotal20126895318.0Washington71303.096.7
2304WVtotal20121856680.0West Virginia24231.076.6
2399WItotal20125724554.0Wisconsin65503.087.4
2400WYtotal2012576626.0Wyoming97818.05.9
2475PRtotal20123651545.0Puerto Rico3515.01038.8
2523USAtotal2012313873685.0United State3790399.082.8
\n", + "
" + ], + "text/plain": [ + " state/region ages year population state area (sq. mi) pop_density\n", + "1 AL total 2012 4817528.0 Alabama 52423.0 91.9\n", + "95 AK total 2012 730307.0 Alaska 656425.0 1.1\n", + "97 AZ total 2012 6551149.0 Arizona 114006.0 57.5\n", + "191 AR total 2012 2949828.0 Arkansas 53182.0 55.5\n", + "193 CA total 2012 37999878.0 California 163707.0 232.1\n", + "287 CO total 2012 5189458.0 Colorado 104100.0 49.9\n", + "289 CT total 2012 3591765.0 Connecticut 5544.0 647.9\n", + "383 DE total 2012 917053.0 Delaware 1954.0 469.3\n", + "385 DC total 2012 633427.0 District of Columbia 68.0 9315.1\n", + "479 FL total 2012 19320749.0 Florida 65758.0 293.8\n", + "480 GA total 2012 9915646.0 Georgia 59441.0 166.8\n", + "575 HI total 2012 1390090.0 Hawaii 10932.0 127.2\n", + "576 ID total 2012 1595590.0 Idaho 83574.0 19.1\n", + "671 IL total 2012 12868192.0 Illinois 57918.0 222.2\n", + "672 IN total 2012 6537782.0 Indiana 36420.0 179.5\n", + "767 IA total 2012 3075039.0 Iowa 56276.0 54.6\n", + "768 KS total 2012 2885398.0 Kansas 82282.0 35.1\n", + "863 KY total 2012 4379730.0 Kentucky 40411.0 108.4\n", + "864 LA total 2012 4602134.0 Louisiana 51843.0 88.8\n", + "959 ME total 2012 1328501.0 Maine 35387.0 37.5\n", + "960 MD total 2012 5884868.0 Maryland 12407.0 474.3\n", + "1055 MA total 2012 6645303.0 Massachusetts 10555.0 629.6\n", + "1056 MI total 2012 9882519.0 Michigan 96810.0 102.1\n", + "1151 MN total 2012 5379646.0 Minnesota 86943.0 61.9\n", + "1152 MS total 2012 2986450.0 Mississippi 48434.0 61.7\n", + "1247 MO total 2012 6024522.0 Missouri 69709.0 86.4\n", + "1248 MT total 2012 1005494.0 Montana 147046.0 6.8\n", + "1343 NE total 2012 1855350.0 Nebraska 77358.0 24.0\n", + "1344 NV total 2012 2754354.0 Nevada 110567.0 24.9\n", + "1439 NH total 2012 1321617.0 New Hampshire 9351.0 141.3\n", + "1440 NJ total 2012 8867749.0 New Jersey 8722.0 1016.7\n", + "1535 NM total 2012 2083540.0 New Mexico 121593.0 17.1\n", + "1536 NY total 2012 19576125.0 New York 54475.0 359.4\n", + "1631 NC total 2012 9748364.0 North Carolina 53821.0 181.1\n", + "1632 ND total 2012 701345.0 North Dakota 70704.0 9.9\n", + "1727 OH total 2012 11553031.0 Ohio 44828.0 257.7\n", + "1728 OK total 2012 3815780.0 Oklahoma 69903.0 54.6\n", + "1823 OR total 2012 3899801.0 Oregon 98386.0 39.6\n", + "1824 PA total 2012 12764475.0 Pennsylvania 46058.0 277.1\n", + "1919 RI total 2012 1050304.0 Rhode Island 1545.0 679.8\n", + "1920 SC total 2012 4723417.0 South Carolina 32007.0 147.6\n", + "2015 SD total 2012 834047.0 South Dakota 77121.0 10.8\n", + "2016 TN total 2012 6454914.0 Tennessee 42146.0 153.2\n", + "2111 TX total 2012 26060796.0 Texas 268601.0 97.0\n", + "2112 UT total 2012 2854871.0 Utah 84904.0 33.6\n", + "2207 VT total 2012 625953.0 Vermont 9615.0 65.1\n", + "2208 VA total 2012 8186628.0 Virginia 42769.0 191.4\n", + "2303 WA total 2012 6895318.0 Washington 71303.0 96.7\n", + "2304 WV total 2012 1856680.0 West Virginia 24231.0 76.6\n", + "2399 WI total 2012 5724554.0 Wisconsin 65503.0 87.4\n", + "2400 WY total 2012 576626.0 Wyoming 97818.0 5.9\n", + "2475 PR total 2012 3651545.0 Puerto Rico 3515.0 1038.8\n", + "2523 USA total 2012 313873685.0 United State 3790399.0 82.8" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 查找2012年美国各州的全民人口数据\n", + "\n", + "# pandas非常强大的,可以像查询数据库一样进行数据查询\n", + "\n", + "pop5 = pop4.query(\"year == 2012 and ages == 'total'\")\n", + "pop5" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "pop5.set_index(keys = 'state/region',inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesyearpopulationstatearea (sq. mi)pop_density
state/region
AKtotal2012730307.0Alaska656425.01.1
WYtotal2012576626.0Wyoming97818.05.9
MTtotal20121005494.0Montana147046.06.8
NDtotal2012701345.0North Dakota70704.09.9
SDtotal2012834047.0South Dakota77121.010.8
NMtotal20122083540.0New Mexico121593.017.1
IDtotal20121595590.0Idaho83574.019.1
NEtotal20121855350.0Nebraska77358.024.0
NVtotal20122754354.0Nevada110567.024.9
UTtotal20122854871.0Utah84904.033.6
KStotal20122885398.0Kansas82282.035.1
MEtotal20121328501.0Maine35387.037.5
ORtotal20123899801.0Oregon98386.039.6
COtotal20125189458.0Colorado104100.049.9
IAtotal20123075039.0Iowa56276.054.6
OKtotal20123815780.0Oklahoma69903.054.6
ARtotal20122949828.0Arkansas53182.055.5
AZtotal20126551149.0Arizona114006.057.5
MStotal20122986450.0Mississippi48434.061.7
MNtotal20125379646.0Minnesota86943.061.9
VTtotal2012625953.0Vermont9615.065.1
WVtotal20121856680.0West Virginia24231.076.6
USAtotal2012313873685.0United State3790399.082.8
MOtotal20126024522.0Missouri69709.086.4
WItotal20125724554.0Wisconsin65503.087.4
LAtotal20124602134.0Louisiana51843.088.8
ALtotal20124817528.0Alabama52423.091.9
WAtotal20126895318.0Washington71303.096.7
TXtotal201226060796.0Texas268601.097.0
MItotal20129882519.0Michigan96810.0102.1
KYtotal20124379730.0Kentucky40411.0108.4
HItotal20121390090.0Hawaii10932.0127.2
NHtotal20121321617.0New Hampshire9351.0141.3
SCtotal20124723417.0South Carolina32007.0147.6
TNtotal20126454914.0Tennessee42146.0153.2
GAtotal20129915646.0Georgia59441.0166.8
INtotal20126537782.0Indiana36420.0179.5
NCtotal20129748364.0North Carolina53821.0181.1
VAtotal20128186628.0Virginia42769.0191.4
ILtotal201212868192.0Illinois57918.0222.2
CAtotal201237999878.0California163707.0232.1
OHtotal201211553031.0Ohio44828.0257.7
PAtotal201212764475.0Pennsylvania46058.0277.1
FLtotal201219320749.0Florida65758.0293.8
NYtotal201219576125.0New York54475.0359.4
DEtotal2012917053.0Delaware1954.0469.3
MDtotal20125884868.0Maryland12407.0474.3
MAtotal20126645303.0Massachusetts10555.0629.6
CTtotal20123591765.0Connecticut5544.0647.9
RItotal20121050304.0Rhode Island1545.0679.8
NJtotal20128867749.0New Jersey8722.01016.7
PRtotal20123651545.0Puerto Rico3515.01038.8
DCtotal2012633427.0District of Columbia68.09315.1
\n", + "
" + ], + "text/plain": [ + " ages year population state area (sq. mi) pop_density\n", + "state/region \n", + "AK total 2012 730307.0 Alaska 656425.0 1.1\n", + "WY total 2012 576626.0 Wyoming 97818.0 5.9\n", + "MT total 2012 1005494.0 Montana 147046.0 6.8\n", + "ND total 2012 701345.0 North Dakota 70704.0 9.9\n", + "SD total 2012 834047.0 South Dakota 77121.0 10.8\n", + "NM total 2012 2083540.0 New Mexico 121593.0 17.1\n", + "ID total 2012 1595590.0 Idaho 83574.0 19.1\n", + "NE total 2012 1855350.0 Nebraska 77358.0 24.0\n", + "NV total 2012 2754354.0 Nevada 110567.0 24.9\n", + "UT total 2012 2854871.0 Utah 84904.0 33.6\n", + "KS total 2012 2885398.0 Kansas 82282.0 35.1\n", + "ME total 2012 1328501.0 Maine 35387.0 37.5\n", + "OR total 2012 3899801.0 Oregon 98386.0 39.6\n", + "CO total 2012 5189458.0 Colorado 104100.0 49.9\n", + "IA total 2012 3075039.0 Iowa 56276.0 54.6\n", + "OK total 2012 3815780.0 Oklahoma 69903.0 54.6\n", + "AR total 2012 2949828.0 Arkansas 53182.0 55.5\n", + "AZ total 2012 6551149.0 Arizona 114006.0 57.5\n", + "MS total 2012 2986450.0 Mississippi 48434.0 61.7\n", + "MN total 2012 5379646.0 Minnesota 86943.0 61.9\n", + "VT total 2012 625953.0 Vermont 9615.0 65.1\n", + "WV total 2012 1856680.0 West Virginia 24231.0 76.6\n", + "USA total 2012 313873685.0 United State 3790399.0 82.8\n", + "MO total 2012 6024522.0 Missouri 69709.0 86.4\n", + "WI total 2012 5724554.0 Wisconsin 65503.0 87.4\n", + "LA total 2012 4602134.0 Louisiana 51843.0 88.8\n", + "AL total 2012 4817528.0 Alabama 52423.0 91.9\n", + "WA total 2012 6895318.0 Washington 71303.0 96.7\n", + "TX total 2012 26060796.0 Texas 268601.0 97.0\n", + "MI total 2012 9882519.0 Michigan 96810.0 102.1\n", + "KY total 2012 4379730.0 Kentucky 40411.0 108.4\n", + "HI total 2012 1390090.0 Hawaii 10932.0 127.2\n", + "NH total 2012 1321617.0 New Hampshire 9351.0 141.3\n", + "SC total 2012 4723417.0 South Carolina 32007.0 147.6\n", + "TN total 2012 6454914.0 Tennessee 42146.0 153.2\n", + "GA total 2012 9915646.0 Georgia 59441.0 166.8\n", + "IN total 2012 6537782.0 Indiana 36420.0 179.5\n", + "NC total 2012 9748364.0 North Carolina 53821.0 181.1\n", + "VA total 2012 8186628.0 Virginia 42769.0 191.4\n", + "IL total 2012 12868192.0 Illinois 57918.0 222.2\n", + "CA total 2012 37999878.0 California 163707.0 232.1\n", + "OH total 2012 11553031.0 Ohio 44828.0 257.7\n", + "PA total 2012 12764475.0 Pennsylvania 46058.0 277.1\n", + "FL total 2012 19320749.0 Florida 65758.0 293.8\n", + "NY total 2012 19576125.0 New York 54475.0 359.4\n", + "DE total 2012 917053.0 Delaware 1954.0 469.3\n", + "MD total 2012 5884868.0 Maryland 12407.0 474.3\n", + "MA total 2012 6645303.0 Massachusetts 10555.0 629.6\n", + "CT total 2012 3591765.0 Connecticut 5544.0 647.9\n", + "RI total 2012 1050304.0 Rhode Island 1545.0 679.8\n", + "NJ total 2012 8867749.0 New Jersey 8722.0 1016.7\n", + "PR total 2012 3651545.0 Puerto Rico 3515.0 1038.8\n", + "DC total 2012 633427.0 District of Columbia 68.0 9315.1" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop5.sort_values(by = 'pop_density')" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesyearpopulationstatearea (sq. mi)pop_density
state/region
DCtotal2012633427.0District of Columbia68.09315.1
PRtotal20123651545.0Puerto Rico3515.01038.8
NJtotal20128867749.0New Jersey8722.01016.7
RItotal20121050304.0Rhode Island1545.0679.8
CTtotal20123591765.0Connecticut5544.0647.9
MAtotal20126645303.0Massachusetts10555.0629.6
MDtotal20125884868.0Maryland12407.0474.3
DEtotal2012917053.0Delaware1954.0469.3
NYtotal201219576125.0New York54475.0359.4
FLtotal201219320749.0Florida65758.0293.8
PAtotal201212764475.0Pennsylvania46058.0277.1
OHtotal201211553031.0Ohio44828.0257.7
CAtotal201237999878.0California163707.0232.1
ILtotal201212868192.0Illinois57918.0222.2
VAtotal20128186628.0Virginia42769.0191.4
NCtotal20129748364.0North Carolina53821.0181.1
INtotal20126537782.0Indiana36420.0179.5
GAtotal20129915646.0Georgia59441.0166.8
TNtotal20126454914.0Tennessee42146.0153.2
SCtotal20124723417.0South Carolina32007.0147.6
NHtotal20121321617.0New Hampshire9351.0141.3
HItotal20121390090.0Hawaii10932.0127.2
KYtotal20124379730.0Kentucky40411.0108.4
MItotal20129882519.0Michigan96810.0102.1
TXtotal201226060796.0Texas268601.097.0
WAtotal20126895318.0Washington71303.096.7
ALtotal20124817528.0Alabama52423.091.9
LAtotal20124602134.0Louisiana51843.088.8
WItotal20125724554.0Wisconsin65503.087.4
MOtotal20126024522.0Missouri69709.086.4
USAtotal2012313873685.0United State3790399.082.8
WVtotal20121856680.0West Virginia24231.076.6
VTtotal2012625953.0Vermont9615.065.1
MNtotal20125379646.0Minnesota86943.061.9
MStotal20122986450.0Mississippi48434.061.7
AZtotal20126551149.0Arizona114006.057.5
ARtotal20122949828.0Arkansas53182.055.5
OKtotal20123815780.0Oklahoma69903.054.6
IAtotal20123075039.0Iowa56276.054.6
COtotal20125189458.0Colorado104100.049.9
ORtotal20123899801.0Oregon98386.039.6
MEtotal20121328501.0Maine35387.037.5
KStotal20122885398.0Kansas82282.035.1
UTtotal20122854871.0Utah84904.033.6
NVtotal20122754354.0Nevada110567.024.9
NEtotal20121855350.0Nebraska77358.024.0
IDtotal20121595590.0Idaho83574.019.1
NMtotal20122083540.0New Mexico121593.017.1
SDtotal2012834047.0South Dakota77121.010.8
NDtotal2012701345.0North Dakota70704.09.9
MTtotal20121005494.0Montana147046.06.8
WYtotal2012576626.0Wyoming97818.05.9
AKtotal2012730307.0Alaska656425.01.1
\n", + "
" + ], + "text/plain": [ + " ages year population state area (sq. mi) pop_density\n", + "state/region \n", + "DC total 2012 633427.0 District of Columbia 68.0 9315.1\n", + "PR total 2012 3651545.0 Puerto Rico 3515.0 1038.8\n", + "NJ total 2012 8867749.0 New Jersey 8722.0 1016.7\n", + "RI total 2012 1050304.0 Rhode Island 1545.0 679.8\n", + "CT total 2012 3591765.0 Connecticut 5544.0 647.9\n", + "MA total 2012 6645303.0 Massachusetts 10555.0 629.6\n", + "MD total 2012 5884868.0 Maryland 12407.0 474.3\n", + "DE total 2012 917053.0 Delaware 1954.0 469.3\n", + "NY total 2012 19576125.0 New York 54475.0 359.4\n", + "FL total 2012 19320749.0 Florida 65758.0 293.8\n", + "PA total 2012 12764475.0 Pennsylvania 46058.0 277.1\n", + "OH total 2012 11553031.0 Ohio 44828.0 257.7\n", + "CA total 2012 37999878.0 California 163707.0 232.1\n", + "IL total 2012 12868192.0 Illinois 57918.0 222.2\n", + "VA total 2012 8186628.0 Virginia 42769.0 191.4\n", + "NC total 2012 9748364.0 North Carolina 53821.0 181.1\n", + "IN total 2012 6537782.0 Indiana 36420.0 179.5\n", + "GA total 2012 9915646.0 Georgia 59441.0 166.8\n", + "TN total 2012 6454914.0 Tennessee 42146.0 153.2\n", + "SC total 2012 4723417.0 South Carolina 32007.0 147.6\n", + "NH total 2012 1321617.0 New Hampshire 9351.0 141.3\n", + "HI total 2012 1390090.0 Hawaii 10932.0 127.2\n", + "KY total 2012 4379730.0 Kentucky 40411.0 108.4\n", + "MI total 2012 9882519.0 Michigan 96810.0 102.1\n", + "TX total 2012 26060796.0 Texas 268601.0 97.0\n", + "WA total 2012 6895318.0 Washington 71303.0 96.7\n", + "AL total 2012 4817528.0 Alabama 52423.0 91.9\n", + "LA total 2012 4602134.0 Louisiana 51843.0 88.8\n", + "WI total 2012 5724554.0 Wisconsin 65503.0 87.4\n", + "MO total 2012 6024522.0 Missouri 69709.0 86.4\n", + "USA total 2012 313873685.0 United State 3790399.0 82.8\n", + "WV total 2012 1856680.0 West Virginia 24231.0 76.6\n", + "VT total 2012 625953.0 Vermont 9615.0 65.1\n", + "MN total 2012 5379646.0 Minnesota 86943.0 61.9\n", + "MS total 2012 2986450.0 Mississippi 48434.0 61.7\n", + "AZ total 2012 6551149.0 Arizona 114006.0 57.5\n", + "AR total 2012 2949828.0 Arkansas 53182.0 55.5\n", + "OK total 2012 3815780.0 Oklahoma 69903.0 54.6\n", + "IA total 2012 3075039.0 Iowa 56276.0 54.6\n", + "CO total 2012 5189458.0 Colorado 104100.0 49.9\n", + "OR total 2012 3899801.0 Oregon 98386.0 39.6\n", + "ME total 2012 1328501.0 Maine 35387.0 37.5\n", + "KS total 2012 2885398.0 Kansas 82282.0 35.1\n", + "UT total 2012 2854871.0 Utah 84904.0 33.6\n", + "NV total 2012 2754354.0 Nevada 110567.0 24.9\n", + "NE total 2012 1855350.0 Nebraska 77358.0 24.0\n", + "ID total 2012 1595590.0 Idaho 83574.0 19.1\n", + "NM total 2012 2083540.0 New Mexico 121593.0 17.1\n", + "SD total 2012 834047.0 South Dakota 77121.0 10.8\n", + "ND total 2012 701345.0 North Dakota 70704.0 9.9\n", + "MT total 2012 1005494.0 Montana 147046.0 6.8\n", + "WY total 2012 576626.0 Wyoming 97818.0 5.9\n", + "AK total 2012 730307.0 Alaska 656425.0 1.1" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pop5.sort_values(by='pop_density',ascending=False)" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day76-90/code/cancer_predict.npy b/Day76-90/code/cancer_predict.npy new file mode 100644 index 0000000..a6bf034 Binary files /dev/null and b/Day76-90/code/cancer_predict.npy differ diff --git a/Day76-90/code/cancer_true.npy b/Day76-90/code/cancer_true.npy new file mode 100644 index 0000000..97e4b66 Binary files /dev/null and b/Day76-90/code/cancer_true.npy differ diff --git a/Day76-90/code/state-abbrevs.csv b/Day76-90/code/state-abbrevs.csv new file mode 100644 index 0000000..6d4db36 --- /dev/null +++ b/Day76-90/code/state-abbrevs.csv @@ -0,0 +1,52 @@ +"state","abbreviation" +"Alabama","AL" +"Alaska","AK" +"Arizona","AZ" +"Arkansas","AR" +"California","CA" +"Colorado","CO" +"Connecticut","CT" +"Delaware","DE" +"District of Columbia","DC" +"Florida","FL" +"Georgia","GA" +"Hawaii","HI" +"Idaho","ID" +"Illinois","IL" +"Indiana","IN" +"Iowa","IA" +"Kansas","KS" +"Kentucky","KY" +"Louisiana","LA" +"Maine","ME" +"Montana","MT" +"Nebraska","NE" +"Nevada","NV" +"New Hampshire","NH" +"New Jersey","NJ" +"New Mexico","NM" +"New York","NY" +"North Carolina","NC" +"North Dakota","ND" +"Ohio","OH" +"Oklahoma","OK" +"Oregon","OR" +"Maryland","MD" +"Massachusetts","MA" +"Michigan","MI" +"Minnesota","MN" +"Mississippi","MS" +"Missouri","MO" +"Pennsylvania","PA" +"Rhode Island","RI" +"South Carolina","SC" +"South Dakota","SD" +"Tennessee","TN" +"Texas","TX" +"Utah","UT" +"Vermont","VT" +"Virginia","VA" +"Washington","WA" +"West Virginia","WV" +"Wisconsin","WI" +"Wyoming","WY" \ No newline at end of file diff --git a/Day76-90/code/state-areas.csv b/Day76-90/code/state-areas.csv new file mode 100644 index 0000000..322345c --- /dev/null +++ b/Day76-90/code/state-areas.csv @@ -0,0 +1,53 @@ +state,area (sq. mi) +Alabama,52423 +Alaska,656425 +Arizona,114006 +Arkansas,53182 +California,163707 +Colorado,104100 +Connecticut,5544 +Delaware,1954 +Florida,65758 +Georgia,59441 +Hawaii,10932 +Idaho,83574 +Illinois,57918 +Indiana,36420 +Iowa,56276 +Kansas,82282 +Kentucky,40411 +Louisiana,51843 +Maine,35387 +Maryland,12407 +Massachusetts,10555 +Michigan,96810 +Minnesota,86943 +Mississippi,48434 +Missouri,69709 +Montana,147046 +Nebraska,77358 +Nevada,110567 +New Hampshire,9351 +New Jersey,8722 +New Mexico,121593 +New York,54475 +North Carolina,53821 +North Dakota,70704 +Ohio,44828 +Oklahoma,69903 +Oregon,98386 +Pennsylvania,46058 +Rhode Island,1545 +South Carolina,32007 +South Dakota,77121 +Tennessee,42146 +Texas,268601 +Utah,84904 +Vermont,9615 +Virginia,42769 +Washington,71303 +West Virginia,24231 +Wisconsin,65503 +Wyoming,97818 +District of Columbia,68 +Puerto Rico,3515 diff --git a/Day76-90/code/state-population.csv b/Day76-90/code/state-population.csv new file mode 100644 index 0000000..c76110e --- /dev/null +++ b/Day76-90/code/state-population.csv @@ -0,0 +1,2545 @@ +state/region,ages,year,population +AL,under18,2012,1117489 +AL,total,2012,4817528 +AL,under18,2010,1130966 +AL,total,2010,4785570 +AL,under18,2011,1125763 +AL,total,2011,4801627 +AL,total,2009,4757938 +AL,under18,2009,1134192 +AL,under18,2013,1111481 +AL,total,2013,4833722 +AL,total,2007,4672840 +AL,under18,2007,1132296 +AL,total,2008,4718206 +AL,under18,2008,1134927 +AL,total,2005,4569805 +AL,under18,2005,1117229 +AL,total,2006,4628981 +AL,under18,2006,1126798 +AL,total,2004,4530729 +AL,under18,2004,1113662 +AL,total,2003,4503491 +AL,under18,2003,1113083 +AL,total,2001,4467634 +AL,under18,2001,1120409 +AL,total,2002,4480089 +AL,under18,2002,1116590 +AL,under18,1999,1121287 +AL,total,1999,4430141 +AL,total,2000,4452173 +AL,under18,2000,1122273 +AL,total,1998,4404701 +AL,under18,1998,1118252 +AL,under18,1997,1122893 +AL,total,1997,4367935 +AL,total,1996,4331103 +AL,total,1995,4296800 +AL,under18,1995,1110553 +AL,under18,1996,1112092 +AL,total,1994,4260229 +AL,total,1993,4214202 +AL,under18,1993,1085606 +AL,under18,1994,1097180 +AL,under18,1992,1072873 +AL,total,1992,4154014 +AL,total,1991,4099156 +AL,under18,1991,1060794 +AL,under18,1990,1050041 +AL,total,1990,4050055 +AK,total,1990,553290 +AK,under18,1990,177502 +AK,total,1992,588736 +AK,under18,1991,182180 +AK,under18,1992,184878 +AK,total,1994,603308 +AK,under18,1994,187439 +AK,total,1991,570193 +AK,total,1993,599434 +AK,under18,1993,187190 +AK,total,1995,604412 +AK,under18,1995,184990 +AK,total,1996,608569 +AK,under18,1996,185360 +AK,under18,1997,188280 +AK,under18,1998,192636 +AK,total,1998,619933 +AK,total,1997,612968 +AK,under18,1999,191422 +AK,total,1999,624779 +AK,total,2000,627963 +AK,under18,2000,190615 +AK,total,2001,633714 +AK,under18,2001,188771 +AK,total,2002,642337 +AK,under18,2002,188482 +AK,total,2003,648414 +AK,under18,2003,186843 +AK,total,2004,659286 +AK,under18,2004,186335 +AK,total,2005,666946 +AK,under18,2005,185304 +AK,total,2006,675302 +AK,under18,2006,185580 +AK,total,2007,680300 +AK,under18,2007,184344 +AK,total,2008,687455 +AK,under18,2008,183124 +AK,under18,2013,188132 +AK,total,2013,735132 +AK,total,2009,698895 +AK,under18,2009,186351 +AK,under18,2010,187902 +AK,total,2010,713868 +AK,under18,2011,188329 +AK,total,2011,723375 +AK,under18,2012,188162 +AK,total,2012,730307 +AZ,under18,2012,1617149 +AZ,total,2012,6551149 +AZ,under18,2011,1616353 +AZ,total,2011,6468796 +AZ,under18,2010,1628563 +AZ,total,2010,6408790 +AZ,under18,2013,1616814 +AZ,total,2013,6626624 +AZ,total,2009,6343154 +AZ,under18,2009,1627343 +AZ,total,2007,6167681 +AZ,under18,2007,1607895 +AZ,total,2008,6280362 +AZ,under18,2008,1628651 +AZ,total,2005,5839077 +AZ,under18,2005,1529168 +AZ,total,2006,6029141 +AZ,under18,2006,1574867 +AZ,total,2004,5652404 +AZ,under18,2004,1484454 +AZ,total,2003,5510364 +AZ,under18,2003,1453671 +AZ,total,2001,5273477 +AZ,under18,2001,1399015 +AZ,total,2002,5396255 +AZ,under18,2002,1427938 +AZ,under18,1999,1332396 +AZ,total,1999,5023823 +AZ,total,2000,5160586 +AZ,under18,2000,1373414 +AZ,total,1998,4883342 +AZ,under18,1998,1285794 +AZ,total,1997,4736990 +AZ,under18,1997,1237159 +AZ,under18,1996,1215285 +AZ,total,1996,4586940 +AZ,total,1995,4432499 +AZ,under18,1995,1173391 +AZ,total,1993,4065440 +AZ,under18,1993,1094233 +AZ,under18,1994,1119857 +AZ,total,1994,4245089 +AZ,under18,1992,1055572 +AZ,under18,1991,1028285 +AZ,total,1991,3788576 +AZ,total,1992,3915740 +AZ,under18,1990,1006040 +AZ,total,1990,3684097 +AR,under18,1990,620933 +AR,total,1990,2356586 +AR,total,1991,2383144 +AR,under18,1991,626212 +AR,under18,1992,638269 +AR,total,1992,2415984 +AR,under18,1994,653842 +AR,total,1994,2494019 +AR,total,1993,2456303 +AR,under18,1993,643474 +AR,under18,1995,667671 +AR,total,1995,2535399 +AR,under18,1996,677912 +AR,total,1996,2572109 +AR,under18,1998,683637 +AR,total,1997,2601091 +AR,under18,1997,680203 +AR,total,1998,2626289 +AR,total,2000,2678588 +AR,under18,2000,680378 +AR,under18,1999,681940 +AR,total,1999,2651860 +AR,total,2002,2705927 +AR,under18,2002,678798 +AR,total,2001,2691571 +AR,under18,2001,679606 +AR,total,2004,2749686 +AR,under18,2004,683166 +AR,total,2003,2724816 +AR,under18,2003,679579 +AR,total,2006,2821761 +AR,under18,2006,697842 +AR,total,2005,2781097 +AR,under18,2005,689787 +AR,total,2008,2874554 +AR,under18,2008,705725 +AR,total,2007,2848650 +AR,under18,2007,702737 +AR,total,2009,2896843 +AR,under18,2009,707886 +AR,under18,2013,709866 +AR,total,2013,2959373 +AR,under18,2011,710576 +AR,total,2011,2938506 +AR,under18,2010,711947 +AR,total,2010,2922280 +AR,under18,2012,710471 +AR,total,2012,2949828 +CA,under18,2012,9209007 +CA,total,2012,37999878 +CA,under18,2011,9252336 +CA,total,2011,37668681 +CA,under18,2010,9284094 +CA,total,2010,37333601 +CA,under18,2013,9174877 +CA,total,2013,38332521 +CA,total,2009,36961229 +CA,under18,2009,9294501 +CA,total,2007,36250311 +CA,under18,2007,9335620 +CA,total,2008,36604337 +CA,under18,2008,9321621 +CA,total,2005,35827943 +CA,under18,2005,9405565 +CA,total,2006,36021202 +CA,under18,2006,9370884 +CA,total,2003,35253159 +CA,under18,2003,9404594 +CA,total,2004,35574576 +CA,under18,2004,9418497 +CA,total,2001,34479458 +CA,under18,2001,9325466 +CA,total,2002,34871843 +CA,under18,2002,9365142 +CA,under18,1999,9207878 +CA,total,1999,33499204 +CA,total,2000,33987977 +CA,under18,2000,9267089 +CA,under18,1998,9163238 +CA,total,1998,32987675 +CA,under18,1997,9135359 +CA,total,1997,32486010 +CA,under18,1996,9079519 +CA,total,1996,32018834 +CA,total,1995,31696582 +CA,under18,1995,8920578 +CA,total,1993,31274928 +CA,under18,1993,8624810 +CA,under18,1994,8790058 +CA,total,1994,31484435 +CA,total,1991,30470736 +CA,under18,1991,8245605 +CA,under18,1992,8439647 +CA,total,1992,30974659 +CA,under18,1990,7980501 +CA,total,1990,29959515 +CO,total,1990,3307618 +CO,under18,1990,881640 +CO,total,1992,3495939 +CO,under18,1992,925577 +CO,under18,1991,896537 +CO,total,1991,3387119 +CO,total,1994,3724168 +CO,under18,1994,966412 +CO,under18,1993,947806 +CO,total,1993,3613734 +CO,under18,1995,984310 +CO,total,1995,3826653 +CO,total,1996,3919972 +CO,under18,1996,1003946 +CO,under18,1997,1030557 +CO,total,1997,4018293 +CO,total,1998,4116639 +CO,under18,1998,1060066 +CO,total,2000,4326921 +CO,under18,2000,1106676 +CO,total,1999,4226018 +CO,under18,1999,1083938 +CO,total,2002,4490406 +CO,under18,2002,1138273 +CO,total,2001,4425687 +CO,under18,2001,1126647 +CO,total,2004,4575013 +CO,under18,2004,1146369 +CO,total,2003,4528732 +CO,under18,2003,1144597 +CO,total,2006,4720423 +CO,under18,2006,1171832 +CO,total,2005,4631888 +CO,under18,2005,1156399 +CO,total,2008,4889730 +CO,under18,2008,1203289 +CO,total,2007,4803868 +CO,under18,2007,1189434 +CO,total,2009,4972195 +CO,under18,2009,1217213 +CO,under18,2013,1237932 +CO,total,2013,5268367 +CO,under18,2010,1226619 +CO,total,2010,5048196 +CO,under18,2011,1230178 +CO,total,2011,5118400 +CO,under18,2012,1232864 +CO,total,2012,5189458 +CT,under18,2012,794959 +CT,total,2012,3591765 +CT,under18,2011,805109 +CT,total,2011,3588948 +CT,under18,2010,814187 +CT,total,2010,3579210 +CT,under18,2013,785566 +CT,total,2013,3596080 +CT,total,2009,3561807 +CT,under18,2009,820839 +CT,total,2007,3527270 +CT,under18,2007,833484 +CT,total,2008,3545579 +CT,under18,2008,826626 +CT,total,2005,3506956 +CT,under18,2005,844034 +CT,total,2006,3517460 +CT,under18,2006,839372 +CT,total,2003,3484336 +CT,under18,2003,851115 +CT,total,2004,3496094 +CT,under18,2004,848979 +CT,total,2001,3432835 +CT,under18,2001,845850 +CT,total,2002,3458749 +CT,under18,2002,848877 +CT,total,1999,3386401 +CT,under18,1999,834654 +CT,total,2000,3411777 +CT,under18,2000,842242 +CT,under18,1998,824600 +CT,total,1998,3365352 +CT,total,1997,3349348 +CT,under18,1997,814373 +CT,under18,1996,811855 +CT,total,1996,3336685 +CT,total,1995,3324144 +CT,under18,1995,808623 +CT,total,1993,3309175 +CT,under18,1993,790749 +CT,under18,1994,801231 +CT,total,1994,3316121 +CT,under18,1991,766304 +CT,total,1991,3302895 +CT,under18,1992,777264 +CT,total,1992,3300712 +CT,total,1990,3291967 +CT,under18,1990,752666 +DE,under18,1990,165628 +DE,total,1990,669567 +DE,under18,1992,174166 +DE,total,1992,694927 +DE,total,1991,683080 +DE,under18,1991,169910 +DE,total,1994,717545 +DE,under18,1994,180833 +DE,total,1993,706378 +DE,under18,1993,176916 +DE,under18,1995,181736 +DE,total,1995,729735 +DE,total,1996,740978 +DE,under18,1996,184021 +DE,under18,1997,186607 +DE,total,1997,751487 +DE,total,1998,763335 +DE,under18,1998,189302 +DE,total,2000,786373 +DE,under18,2000,194914 +DE,total,1999,774990 +DE,under18,1999,192510 +DE,total,2002,806169 +DE,under18,2002,196946 +DE,total,2001,795699 +DE,under18,2001,196038 +DE,total,2004,830803 +DE,under18,2004,199631 +DE,total,2003,818003 +DE,under18,2003,198045 +DE,total,2006,859268 +DE,under18,2006,203729 +DE,total,2005,845150 +DE,under18,2005,201988 +DE,total,2008,883874 +DE,under18,2008,206116 +DE,total,2007,871749 +DE,under18,2007,205155 +DE,under18,2013,203558 +DE,total,2013,925749 +DE,total,2009,891730 +DE,under18,2009,206213 +DE,under18,2010,205478 +DE,total,2010,899711 +DE,under18,2011,204801 +DE,total,2011,907985 +DE,under18,2012,204586 +DE,total,2012,917053 +DC,under18,2012,107642 +DC,total,2012,633427 +DC,under18,2011,103906 +DC,total,2011,619624 +DC,under18,2010,101309 +DC,total,2010,605125 +DC,under18,2013,111474 +DC,total,2013,646449 +DC,total,2009,592228 +DC,under18,2009,102098 +DC,total,2007,574404 +DC,under18,2007,104126 +DC,total,2008,580236 +DC,under18,2008,102257 +DC,total,2005,567136 +DC,under18,2005,107187 +DC,total,2006,570681 +DC,under18,2006,105651 +DC,total,2003,568502 +DC,under18,2003,111403 +DC,total,2004,567754 +DC,under18,2004,109756 +DC,total,2001,574504 +DC,under18,2001,114625 +DC,total,2002,573158 +DC,under18,2002,113822 +DC,total,1999,570220 +DC,under18,1999,115003 +DC,total,2000,572046 +DC,under18,2000,114503 +DC,under18,1998,113839 +DC,total,1998,565232 +DC,under18,1997,119531 +DC,total,1997,567739 +DC,under18,1996,121210 +DC,total,1996,572379 +DC,total,1995,580519 +DC,under18,1995,123620 +DC,total,1993,595302 +DC,under18,1993,120471 +DC,under18,1994,122170 +DC,total,1994,589240 +DC,total,1991,600870 +DC,under18,1991,116825 +DC,under18,1992,118636 +DC,total,1992,597567 +DC,under18,1990,112632 +DC,total,1990,605321 +FL,total,1990,13033307 +FL,under18,1990,2988807 +FL,under18,1991,3045638 +FL,total,1991,13369798 +FL,total,1994,14239444 +FL,under18,1994,3299887 +FL,under18,1993,3214066 +FL,total,1993,13927185 +FL,total,1992,13650553 +FL,under18,1992,3120439 +FL,under18,1995,3366468 +FL,total,1995,14537875 +FL,total,1996,14853360 +FL,under18,1996,3431695 +FL,under18,1998,3557561 +FL,under18,1997,3502269 +FL,total,1997,15186304 +FL,total,1998,15486559 +FL,total,1999,15759421 +FL,under18,1999,3611711 +FL,total,2000,16047515 +FL,under18,2000,3654880 +FL,total,2001,16356966 +FL,under18,2001,3714439 +FL,total,2002,16689370 +FL,under18,2002,3774624 +FL,total,2003,17004085 +FL,under18,2003,3820876 +FL,total,2004,17415318 +FL,under18,2004,3890734 +FL,total,2005,17842038 +FL,under18,2005,3968178 +FL,total,2006,18166990 +FL,under18,2006,4022912 +FL,total,2007,18367842 +FL,under18,2007,4031098 +FL,total,2008,18527305 +FL,under18,2008,4018372 +FL,total,2009,18652644 +FL,under18,2009,3997283 +FL,under18,2013,4026674 +FL,total,2013,19552860 +FL,under18,2010,3999532 +FL,total,2010,18846054 +FL,under18,2011,4002550 +FL,total,2011,19083482 +FL,under18,2012,4012421 +FL,total,2012,19320749 +GA,total,2012,9915646 +GA,under18,2012,2487831 +GA,under18,2011,2488898 +GA,total,2011,9810181 +GA,under18,2010,2490884 +GA,total,2010,9713248 +GA,total,2013,9992167 +GA,total,2009,9620846 +GA,under18,2009,2485781 +GA,under18,2013,2489709 +GA,total,2007,9349988 +GA,under18,2007,2456249 +GA,total,2008,9504843 +GA,under18,2008,2479097 +GA,total,2005,8925922 +GA,under18,2005,2353604 +GA,total,2006,9155813 +GA,under18,2006,2406014 +GA,total,2003,8622793 +GA,under18,2003,2278710 +GA,total,2004,8769252 +GA,under18,2004,2308855 +GA,total,2001,8377038 +GA,under18,2001,2215390 +GA,total,2002,8508256 +GA,under18,2002,2249784 +GA,total,1999,8045965 +GA,under18,1999,2130698 +GA,total,2000,8227303 +GA,under18,2000,2176576 +GA,total,1997,7685099 +GA,under18,1997,2034163 +GA,under18,1998,2078998 +GA,total,1998,7863536 +GA,under18,1996,1993171 +GA,total,1996,7501069 +GA,total,1995,7328413 +GA,under18,1995,1949818 +GA,under18,1992,1817781 +GA,total,1992,6817203 +GA,total,1993,6978240 +GA,under18,1993,1865021 +GA,under18,1994,1906539 +GA,total,1994,7157165 +GA,total,1991,6653005 +GA,under18,1991,1773675 +GA,under18,1990,1747363 +GA,total,1990,6512602 +HI,under18,1990,279983 +HI,total,1990,1113491 +HI,total,1991,1136754 +HI,under18,1991,287871 +HI,under18,1994,307517 +HI,total,1994,1187536 +HI,total,1993,1172838 +HI,under18,1993,301473 +HI,under18,1992,295124 +HI,total,1992,1158613 +HI,total,1995,1196854 +HI,under18,1995,310325 +HI,under18,1996,311213 +HI,total,1996,1203755 +HI,under18,1998,304576 +HI,total,1998,1215233 +HI,total,1997,1211640 +HI,under18,1997,309465 +HI,total,2000,1213519 +HI,under18,2000,295352 +HI,total,1999,1210300 +HI,under18,1999,299680 +HI,total,2002,1239613 +HI,under18,2002,293600 +HI,total,2001,1225948 +HI,under18,2001,294133 +HI,total,2004,1273569 +HI,under18,2004,298103 +HI,total,2003,1251154 +HI,under18,2003,294519 +HI,total,2006,1309731 +HI,under18,2006,299313 +HI,total,2005,1292729 +HI,under18,2005,298497 +HI,total,2008,1332213 +HI,under18,2008,301094 +HI,total,2007,1315675 +HI,under18,2007,300207 +HI,under18,2013,307266 +HI,total,2009,1346717 +HI,under18,2009,302796 +HI,total,2013,1404054 +HI,total,2010,1363731 +HI,under18,2010,303812 +HI,total,2011,1376897 +HI,under18,2011,305396 +HI,under18,2012,305981 +HI,total,2012,1390090 +ID,total,2012,1595590 +ID,under18,2012,427177 +ID,under18,2011,428535 +ID,total,2011,1583930 +ID,under18,2010,428961 +ID,total,2010,1570718 +ID,total,2013,1612136 +ID,total,2009,1554439 +ID,under18,2009,426076 +ID,under18,2013,427781 +ID,total,2007,1505105 +ID,under18,2007,415024 +ID,total,2008,1534320 +ID,under18,2008,422347 +ID,total,2005,1428241 +ID,under18,2005,394651 +ID,total,2006,1468669 +ID,under18,2006,404753 +ID,total,2003,1363380 +ID,under18,2003,379241 +ID,total,2004,1391802 +ID,under18,2004,384692 +ID,total,2001,1319962 +ID,under18,2001,373145 +ID,total,2002,1340372 +ID,under18,2002,375986 +ID,total,1999,1275674 +ID,under18,1999,366689 +ID,total,2000,1299430 +ID,under18,2000,370430 +ID,total,1997,1228520 +ID,under18,1997,357779 +ID,under18,1998,362189 +ID,total,1998,1252330 +ID,under18,1996,353824 +ID,total,1996,1203083 +ID,total,1995,1177322 +ID,under18,1995,349248 +ID,under18,1992,324972 +ID,total,1992,1071685 +ID,total,1993,1108768 +ID,under18,1993,333838 +ID,under18,1994,344242 +ID,total,1994,1145140 +ID,total,1991,1041316 +ID,under18,1991,316732 +ID,under18,1990,313373 +ID,total,1990,1012384 +IL,under18,1990,2940837 +IL,total,1990,11453316 +IL,total,1991,11568964 +IL,under18,1991,2988715 +IL,under18,1994,3110938 +IL,total,1994,11912585 +IL,total,1993,11809579 +IL,under18,1993,3066541 +IL,under18,1992,3033427 +IL,total,1992,11694184 +IL,total,1995,12008437 +IL,under18,1995,3152984 +IL,under18,1996,3192916 +IL,total,1996,12101997 +IL,under18,1998,3225252 +IL,total,1998,12271847 +IL,total,1997,12185715 +IL,under18,1997,3222114 +IL,total,2000,12434161 +IL,under18,2000,3244944 +IL,total,1999,12359020 +IL,under18,1999,3240034 +IL,total,2002,12525556 +IL,under18,2002,3238362 +IL,total,2001,12488445 +IL,under18,2001,3243617 +IL,total,2004,12589773 +IL,under18,2004,3211599 +IL,total,2003,12556006 +IL,under18,2003,3225547 +IL,total,2006,12643955 +IL,under18,2006,3181246 +IL,total,2005,12609903 +IL,under18,2005,3197318 +IL,total,2008,12747038 +IL,under18,2008,3153401 +IL,total,2007,12695866 +IL,under18,2007,3170134 +IL,under18,2013,3023307 +IL,total,2009,12796778 +IL,under18,2009,3138406 +IL,total,2013,12882135 +IL,total,2010,12839695 +IL,under18,2010,3122092 +IL,total,2011,12855970 +IL,under18,2011,3089833 +IL,under18,2012,3057042 +IL,total,2012,12868192 +IN,total,2012,6537782 +IN,under18,2012,1589655 +IN,under18,2011,1598091 +IN,total,2011,6516336 +IN,under18,2010,1605883 +IN,total,2010,6489965 +IN,total,2013,6570902 +IN,total,2009,6459325 +IN,under18,2009,1609704 +IN,under18,2013,1586027 +IN,total,2007,6379599 +IN,under18,2007,1609494 +IN,total,2008,6424806 +IN,under18,2008,1611494 +IN,total,2005,6278616 +IN,under18,2005,1593898 +IN,total,2006,6332669 +IN,under18,2006,1603107 +IN,total,2003,6196638 +IN,under18,2003,1582560 +IN,total,2004,6233007 +IN,under18,2004,1586281 +IN,total,2001,6127760 +IN,under18,2001,1579527 +IN,total,2002,6155967 +IN,under18,2002,1580814 +IN,total,1999,6044970 +IN,under18,1999,1566079 +IN,total,2000,6091866 +IN,under18,2000,1574989 +IN,total,1997,5955267 +IN,under18,1997,1539270 +IN,under18,1998,1551960 +IN,total,1998,5998881 +IN,under18,1996,1517961 +IN,total,1996,5906013 +IN,total,1995,5851459 +IN,under18,1995,1507916 +IN,under18,1992,1461650 +IN,total,1992,5674547 +IN,total,1993,5739019 +IN,under18,1993,1473007 +IN,under18,1994,1491802 +IN,total,1994,5793526 +IN,total,1991,5616388 +IN,under18,1991,1450759 +IN,under18,1990,1437209 +IN,total,1990,5557798 +IA,under18,1990,719366 +IA,total,1990,2781018 +IA,total,1991,2797613 +IA,under18,1991,724446 +IA,under18,1994,728397 +IA,total,1994,2850746 +IA,total,1993,2836972 +IA,under18,1993,727751 +IA,under18,1992,724798 +IA,total,1992,2818401 +IA,total,1995,2867373 +IA,under18,1995,726961 +IA,under18,1996,729177 +IA,total,1996,2880001 +IA,under18,1998,729943 +IA,total,1998,2902872 +IA,total,1997,2891119 +IA,under18,1997,729806 +IA,total,2000,2929067 +IA,under18,2000,733337 +IA,total,1999,2917634 +IA,under18,1999,732671 +IA,total,2002,2934234 +IA,under18,2002,723685 +IA,total,2001,2931997 +IA,under18,2001,728601 +IA,total,2004,2953635 +IA,under18,2004,718708 +IA,total,2003,2941999 +IA,under18,2003,720102 +IA,total,2006,2982644 +IA,under18,2006,721703 +IA,total,2005,2964454 +IA,under18,2005,718488 +IA,total,2008,3016734 +IA,under18,2008,725658 +IA,total,2007,2999212 +IA,under18,2007,723632 +IA,under18,2013,724032 +IA,total,2009,3032870 +IA,under18,2009,726969 +IA,total,2013,3090416 +IA,total,2010,3050314 +IA,under18,2010,727717 +IA,total,2011,3064102 +IA,under18,2011,725522 +IA,under18,2012,723917 +IA,total,2012,3075039 +KS,total,2012,2885398 +KS,under18,2012,726668 +KS,under18,2011,726787 +KS,total,2011,2869548 +KS,under18,2010,727729 +KS,total,2010,2858910 +KS,total,2013,2893957 +KS,total,2009,2832704 +KS,under18,2009,721841 +KS,under18,2013,724092 +KS,total,2007,2783785 +KS,under18,2007,711005 +KS,total,2008,2808076 +KS,under18,2008,714689 +KS,total,2005,2745299 +KS,under18,2005,704689 +KS,total,2006,2762931 +KS,under18,2006,705277 +KS,total,2003,2723004 +KS,under18,2003,707847 +KS,total,2004,2734373 +KS,under18,2004,705456 +KS,total,2001,2702162 +KS,under18,2001,710923 +KS,total,2002,2713535 +KS,under18,2002,709416 +KS,total,1999,2678338 +KS,under18,1999,713022 +KS,total,2000,2693681 +KS,under18,2000,713887 +KS,total,1997,2635292 +KS,under18,1997,704001 +KS,under18,1998,710402 +KS,total,1998,2660598 +KS,under18,1996,696298 +KS,total,1996,2614554 +KS,total,1995,2601008 +KS,under18,1995,694124 +KS,under18,1992,680871 +KS,total,1992,2532395 +KS,total,1993,2556547 +KS,under18,1993,687262 +KS,under18,1994,693673 +KS,total,1994,2580513 +KS,total,1991,2498722 +KS,under18,1991,672033 +KS,under18,1990,662641 +KS,total,1990,2481349 +KY,under18,1990,945951 +KY,total,1990,3694048 +KY,total,1991,3722328 +KY,under18,1991,951512 +KY,under18,1994,981439 +KY,total,1994,3849088 +KY,total,1993,3812206 +KY,under18,1993,971134 +KY,under18,1992,963861 +KY,total,1992,3765469 +KY,total,1995,3887427 +KY,under18,1995,984486 +KY,under18,1996,987062 +KY,total,1996,3919536 +KY,under18,1998,997296 +KY,total,1998,3985391 +KY,total,1997,3952747 +KY,under18,1997,1002609 +KY,total,2000,4049021 +KY,under18,2000,994984 +KY,total,1999,4018053 +KY,under18,1999,996382 +KY,total,2002,4089875 +KY,under18,2002,995251 +KY,total,2001,4068132 +KY,under18,2001,994105 +KY,total,2004,4146101 +KY,under18,2004,998459 +KY,total,2003,4117170 +KY,under18,2003,998485 +KY,total,2006,4219239 +KY,under18,2006,1011295 +KY,total,2005,4182742 +KY,under18,2005,1004020 +KY,total,2008,4289878 +KY,under18,2008,1022001 +KY,total,2007,4256672 +KY,under18,2007,1016288 +KY,under18,2013,1014004 +KY,total,2009,4317074 +KY,under18,2009,1021710 +KY,total,2013,4395295 +KY,total,2010,4347698 +KY,under18,2010,1023679 +KY,total,2011,4366869 +KY,under18,2011,1021926 +KY,under18,2012,1017350 +KY,total,2012,4379730 +LA,total,2012,4602134 +LA,under18,2012,1114620 +LA,under18,2011,1116579 +LA,total,2011,4575197 +LA,under18,2010,1118576 +LA,total,2010,4545392 +LA,total,2013,4625470 +LA,total,2009,4491648 +LA,under18,2009,1114228 +LA,under18,2013,1112957 +LA,total,2007,4375581 +LA,under18,2007,1096642 +LA,total,2008,4435586 +LA,under18,2008,1108728 +LA,total,2005,4576628 +LA,under18,2005,1177954 +LA,total,2006,4302665 +LA,under18,2006,1078779 +LA,total,2003,4521042 +LA,under18,2003,1188070 +LA,total,2004,4552238 +LA,under18,2004,1182731 +LA,total,2001,4477875 +LA,under18,2001,1204187 +LA,total,2002,4497267 +LA,under18,2002,1194819 +LA,total,2000,4471885 +LA,under18,2000,1217670 +LA,total,1999,4460811 +LA,under18,1999,1227167 +LA,total,1997,4421072 +LA,under18,1997,1239665 +LA,under18,1998,1232984 +LA,total,1998,4440344 +LA,under18,1996,1244627 +LA,total,1996,4398877 +LA,total,1995,4378779 +LA,under18,1995,1250112 +LA,under18,1992,1237034 +LA,total,1992,4293003 +LA,total,1993,4316428 +LA,under18,1993,1239161 +LA,under18,1994,1247631 +LA,total,1994,4347481 +LA,total,1991,4253279 +LA,under18,1991,1222330 +LA,under18,1990,1205984 +LA,total,1990,4221532 +ME,under18,1990,308066 +ME,total,1990,1231719 +ME,total,1991,1237081 +ME,under18,1991,309871 +ME,under18,1994,311570 +ME,total,1994,1242662 +ME,total,1993,1242302 +ME,under18,1993,310966 +ME,under18,1992,310679 +ME,total,1992,1238508 +ME,total,1995,1243481 +ME,under18,1995,309173 +ME,under18,1996,307740 +ME,total,1996,1249060 +ME,under18,1998,304496 +ME,total,1998,1259127 +ME,total,1997,1254774 +ME,under18,1997,305097 +ME,total,1999,1266808 +ME,under18,1999,302321 +ME,total,2000,1277072 +ME,under18,2000,301407 +ME,total,2002,1295960 +ME,under18,2002,298595 +ME,total,2001,1285692 +ME,under18,2001,300088 +ME,total,2004,1313688 +ME,under18,2004,294791 +ME,total,2003,1306513 +ME,under18,2003,296786 +ME,total,2006,1323619 +ME,under18,2006,288945 +ME,total,2005,1318787 +ME,under18,2005,292039 +ME,total,2008,1330509 +ME,under18,2008,282204 +ME,total,2007,1327040 +ME,under18,2007,286185 +ME,under18,2013,261276 +ME,total,2009,1329590 +ME,under18,2009,277946 +ME,total,2013,1328302 +ME,total,2010,1327366 +ME,under18,2010,273061 +ME,total,2011,1327844 +ME,under18,2011,268737 +ME,under18,2012,264846 +ME,total,2012,1328501 +MD,total,2012,5884868 +MD,under18,2012,1346235 +MD,under18,2011,1348766 +MD,total,2011,5840241 +MD,under18,2010,1351983 +MD,total,2010,5787193 +MD,total,2013,5928814 +MD,total,2009,5730388 +MD,under18,2009,1353631 +MD,under18,2013,1344522 +MD,total,2007,5653408 +MD,under18,2007,1369563 +MD,total,2008,5684965 +MD,under18,2008,1359214 +MD,total,2005,5592379 +MD,under18,2005,1382966 +MD,total,2006,5627367 +MD,under18,2006,1377756 +MD,total,2003,5496269 +MD,under18,2003,1379641 +MD,total,2004,5546935 +MD,under18,2004,1383450 +MD,total,2001,5374691 +MD,under18,2001,1366552 +MD,total,2002,5440389 +MD,under18,2002,1375354 +MD,total,2000,5311034 +MD,under18,2000,1356961 +MD,total,1999,5254509 +MD,under18,1999,1348659 +MD,total,1997,5157328 +MD,under18,1997,1321306 +MD,under18,1998,1338727 +MD,total,1998,5204464 +MD,under18,1996,1303816 +MD,total,1996,5111986 +MD,total,1995,5070033 +MD,under18,1995,1300695 +MD,under18,1992,1235498 +MD,total,1992,4923369 +MD,total,1993,4971889 +MD,under18,1993,1261738 +MD,under18,1994,1280772 +MD,total,1994,5023060 +MD,total,1991,4867641 +MD,under18,1991,1208898 +MD,under18,1990,1180426 +MD,total,1990,4799770 +MA,under18,1990,1353806 +MA,total,1990,6022639 +MA,total,1991,6018470 +MA,under18,1991,1375110 +MA,under18,1994,1437069 +MA,total,1994,6095241 +MA,total,1993,6060569 +MA,under18,1993,1415724 +MA,under18,1992,1390188 +MA,total,1992,6028709 +MA,total,1995,6141445 +MA,under18,1995,1453489 +MA,under18,1996,1468614 +MA,total,1996,6179756 +MA,under18,1998,1491652 +MA,total,1998,6271838 +MA,total,1997,6226058 +MA,under18,1997,1478203 +MA,total,1999,6317345 +MA,under18,1999,1495818 +MA,total,2000,6361104 +MA,under18,2000,1501334 +MA,total,2001,6397634 +MA,under18,2001,1505028 +MA,total,2002,6417206 +MA,under18,2002,1502652 +MA,total,2004,6412281 +MA,under18,2004,1479541 +MA,total,2003,6422565 +MA,under18,2003,1493372 +MA,total,2006,6410084 +MA,under18,2006,1450202 +MA,total,2005,6403290 +MA,under18,2005,1464140 +MA,total,2008,6468967 +MA,under18,2008,1429727 +MA,total,2007,6431559 +MA,under18,2007,1439757 +MA,under18,2013,1393946 +MA,total,2009,6517613 +MA,under18,2009,1422935 +MA,total,2013,6692824 +MA,total,2010,6563263 +MA,under18,2010,1415962 +MA,total,2011,6606285 +MA,under18,2011,1407240 +MA,under18,2012,1399417 +MA,total,2012,6645303 +MI,total,2012,9882519 +MI,under18,2012,2269365 +MI,under18,2011,2299116 +MI,total,2011,9874589 +MI,under18,2010,2333121 +MI,total,2010,9876149 +MI,total,2013,9895622 +MI,total,2009,9901591 +MI,under18,2009,2372603 +MI,under18,2013,2245201 +MI,total,2007,10001284 +MI,under18,2007,2470063 +MI,total,2008,9946889 +MI,under18,2008,2418879 +MI,total,2005,10051137 +MI,under18,2005,2531839 +MI,total,2006,10036081 +MI,under18,2006,2503548 +MI,total,2003,10041152 +MI,under18,2003,2569080 +MI,total,2004,10055315 +MI,under18,2004,2553314 +MI,total,2002,10015710 +MI,under18,2002,2584310 +MI,total,2001,9991120 +MI,under18,2001,2593310 +MI,total,2000,9952450 +MI,under18,2000,2596114 +MI,total,1999,9897116 +MI,under18,1999,2591944 +MI,total,1997,9809051 +MI,under18,1997,2582270 +MI,under18,1998,2586343 +MI,total,1998,9847942 +MI,under18,1996,2569745 +MI,total,1996,9758645 +MI,total,1995,9676211 +MI,under18,1995,2556799 +MI,under18,1992,2501765 +MI,total,1992,9479065 +MI,total,1993,9540114 +MI,under18,1993,2522249 +MI,under18,1994,2535196 +MI,total,1994,9597737 +MI,total,1991,9400446 +MI,under18,1991,2484957 +MI,under18,1990,2459633 +MI,total,1990,9311319 +MN,under18,1990,1176680 +MN,total,1990,4389857 +MN,total,1991,4440859 +MN,under18,1991,1191207 +MN,under18,1994,1238949 +MN,total,1994,4610355 +MN,total,1993,4555956 +MN,under18,1993,1226723 +MN,under18,1992,1213068 +MN,total,1992,4495572 +MN,total,1995,4660180 +MN,under18,1995,1245932 +MN,under18,1996,1252722 +MN,total,1996,4712827 +MN,under18,1998,1275940 +MN,total,1998,4813412 +MN,total,1997,4763390 +MN,under18,1997,1264250 +MN,total,1999,4873481 +MN,under18,1999,1283102 +MN,total,2000,4933692 +MN,under18,2000,1289715 +MN,total,2001,4982796 +MN,under18,2001,1291261 +MN,total,2002,5018935 +MN,under18,2002,1288795 +MN,total,2004,5087713 +MN,under18,2004,1281946 +MN,total,2003,5053572 +MN,under18,2003,1283687 +MN,total,2006,5163555 +MN,under18,2006,1282381 +MN,total,2005,5119598 +MN,under18,2005,1280557 +MN,total,2008,5247018 +MN,under18,2008,1284179 +MN,total,2007,5207203 +MN,under18,2007,1285074 +MN,under18,2013,1279111 +MN,total,2009,5281203 +MN,under18,2009,1284103 +MN,total,2013,5420380 +MN,total,2010,5310337 +MN,under18,2010,1282693 +MN,total,2011,5347108 +MN,under18,2011,1280424 +MN,under18,2012,1278050 +MN,total,2012,5379646 +MS,total,2012,2986450 +MS,under18,2012,742941 +MS,under18,2011,747742 +MS,total,2011,2977886 +MS,under18,2010,754111 +MS,total,2010,2970047 +MS,total,2013,2991207 +MS,total,2009,2958774 +MS,under18,2009,758539 +MS,under18,2013,737432 +MS,total,2007,2928350 +MS,under18,2007,761171 +MS,total,2008,2947806 +MS,under18,2008,760572 +MS,total,2005,2905943 +MS,under18,2005,760870 +MS,total,2006,2904978 +MS,under18,2006,756990 +MS,total,2003,2868312 +MS,under18,2003,759447 +MS,total,2004,2889010 +MS,under18,2004,760410 +MS,total,2002,2858681 +MS,under18,2002,763148 +MS,total,2001,2852994 +MS,under18,2001,768418 +MS,total,2000,2848353 +MS,under18,2000,774353 +MS,total,1999,2828408 +MS,under18,1999,775662 +MS,total,1997,2777004 +MS,under18,1997,774832 +MS,under18,1998,773721 +MS,total,1998,2804834 +MS,under18,1996,769680 +MS,total,1996,2748085 +MS,total,1995,2722659 +MS,under18,1995,767892 +MS,under18,1992,750224 +MS,total,1992,2623734 +MS,total,1993,2655100 +MS,under18,1993,755820 +MS,under18,1994,763795 +MS,total,1994,2688992 +MS,total,1991,2598733 +MS,under18,1991,738911 +MS,under18,1990,733660 +MS,total,1990,2578897 +MO,under18,1990,1316423 +MO,total,1990,5128880 +MO,total,1991,5170800 +MO,under18,1991,1332306 +MO,under18,1994,1378700 +MO,total,1994,5324497 +MO,total,1993,5271175 +MO,under18,1993,1365903 +MO,under18,1992,1349729 +MO,total,1992,5217101 +MO,under18,1996,1408732 +MO,total,1996,5431553 +MO,total,1995,5378247 +MO,under18,1995,1393554 +MO,under18,1998,1428999 +MO,total,1998,5521765 +MO,total,1997,5481193 +MO,under18,1997,1419837 +MO,total,1999,5561948 +MO,under18,1999,1428047 +MO,total,2000,5607285 +MO,under18,2000,1428383 +MO,total,2001,5641142 +MO,under18,2001,1426575 +MO,total,2002,5674825 +MO,under18,2002,1424513 +MO,total,2004,5747741 +MO,under18,2004,1420956 +MO,total,2003,5709403 +MO,under18,2003,1421927 +MO,total,2006,5842704 +MO,under18,2006,1428324 +MO,total,2005,5790300 +MO,under18,2005,1422978 +MO,total,2008,5923916 +MO,under18,2008,1428945 +MO,total,2007,5887612 +MO,under18,2007,1431346 +MO,under18,2013,1397685 +MO,total,2009,5961088 +MO,under18,2009,1426603 +MO,total,2013,6044171 +MO,total,2010,5996063 +MO,under18,2010,1424042 +MO,total,2011,6010065 +MO,under18,2011,1414444 +MO,under18,2012,1405015 +MO,total,2012,6024522 +MT,total,2012,1005494 +MT,under18,2012,222905 +MT,under18,2011,222977 +MT,total,2011,997600 +MT,under18,2010,223292 +MT,total,2010,990527 +MT,total,2013,1015165 +MT,total,2009,983982 +MT,under18,2009,223675 +MT,under18,2013,223981 +MT,total,2007,964706 +MT,under18,2007,223135 +MT,total,2008,976415 +MT,under18,2008,223814 +MT,total,2005,940102 +MT,under18,2005,221685 +MT,total,2006,952692 +MT,under18,2006,221930 +MT,total,2003,919630 +MT,under18,2003,223012 +MT,total,2004,930009 +MT,under18,2004,221999 +MT,total,2002,911667 +MT,under18,2002,224772 +MT,total,2001,906961 +MT,under18,2001,227118 +MT,total,1999,897508 +MT,under18,1999,231133 +MT,total,2000,903773 +MT,under18,2000,230067 +MT,total,1997,889865 +MT,under18,1997,232813 +MT,under18,1998,231746 +MT,total,1998,892431 +MT,total,1995,876553 +MT,under18,1995,236583 +MT,under18,1996,235294 +MT,total,1996,886254 +MT,under18,1992,230868 +MT,total,1992,825770 +MT,total,1993,844761 +MT,under18,1993,234987 +MT,under18,1994,237289 +MT,total,1994,861306 +MT,total,1991,809680 +MT,under18,1991,225259 +MT,under18,1990,223677 +MT,total,1990,800204 +NE,under18,1990,430068 +NE,total,1990,1581660 +NE,total,1991,1595919 +NE,under18,1991,434525 +NE,under18,1994,442589 +NE,total,1994,1639041 +NE,total,1993,1625590 +NE,under18,1993,439313 +NE,under18,1992,436378 +NE,total,1992,1611687 +NE,under18,1996,446841 +NE,total,1996,1673740 +NE,total,1995,1656993 +NE,under18,1995,444418 +NE,under18,1998,451192 +NE,total,1998,1695817 +NE,total,1997,1686418 +NE,under18,1997,450076 +NE,total,1999,1704764 +NE,under18,1999,451047 +NE,total,2000,1713820 +NE,under18,2000,450380 +NE,total,2001,1719836 +NE,under18,2001,448307 +NE,total,2002,1728292 +NE,under18,2002,447714 +NE,total,2004,1749370 +NE,under18,2004,448360 +NE,total,2003,1738643 +NE,under18,2003,447444 +NE,total,2006,1772693 +NE,under18,2006,450098 +NE,total,2005,1761497 +NE,under18,2005,448918 +NE,total,2008,1796378 +NE,under18,2008,453787 +NE,total,2007,1783440 +NE,under18,2007,451946 +NE,under18,2013,464348 +NE,total,2009,1812683 +NE,under18,2009,456543 +NE,total,2013,1868516 +NE,total,2010,1829838 +NE,under18,2010,459621 +NE,total,2011,1841749 +NE,under18,2011,460872 +NE,under18,2012,462673 +NE,total,2012,1855350 +NV,total,2012,2754354 +NV,under18,2012,659655 +NV,under18,2011,659236 +NV,total,2011,2717951 +NV,under18,2010,663180 +NV,total,2010,2703230 +NV,total,2013,2790136 +NV,total,2009,2684665 +NV,under18,2009,666041 +NV,under18,2013,661605 +NV,total,2007,2601072 +NV,under18,2007,654053 +NV,total,2008,2653630 +NV,under18,2008,662621 +NV,total,2005,2432143 +NV,under18,2005,611595 +NV,total,2006,2522658 +NV,under18,2006,634403 +NV,total,2003,2248850 +NV,under18,2003,568963 +NV,total,2004,2346222 +NV,under18,2004,591314 +NV,total,2002,2173791 +NV,under18,2002,552816 +NV,total,2001,2098399 +NV,under18,2001,534708 +NV,total,1999,1934718 +NV,under18,1999,493701 +NV,total,2000,2018741 +NV,under18,2000,516018 +NV,total,1997,1764104 +NV,under18,1997,443626 +NV,under18,1998,469424 +NV,total,1998,1853192 +NV,total,1995,1581578 +NV,under18,1995,396223 +NV,under18,1996,419133 +NV,total,1996,1666320 +NV,under18,1992,337396 +NV,total,1992,1351367 +NV,total,1993,1411215 +NV,under18,1993,354990 +NV,under18,1994,376745 +NV,total,1994,1499298 +NV,total,1991,1296172 +NV,under18,1991,325033 +NV,under18,1990,316406 +NV,total,1990,1220695 +NH,under18,1990,277454 +NH,total,1990,1112384 +NH,total,1991,1109929 +NH,under18,1991,281127 +NH,under18,1994,295563 +NH,total,1994,1142561 +NH,total,1993,1129458 +NH,under18,1993,290409 +NH,under18,1992,286314 +NH,total,1992,1117785 +NH,under18,1996,300161 +NH,total,1996,1174719 +NH,total,1995,1157561 +NH,under18,1995,298246 +NH,under18,1998,307292 +NH,total,1998,1205941 +NH,total,1997,1189425 +NH,under18,1997,302834 +NH,total,2000,1239882 +NH,under18,2000,310352 +NH,total,1999,1222015 +NH,under18,1999,308423 +NH,total,2001,1255517 +NH,under18,2001,311877 +NH,total,2002,1269089 +NH,under18,2002,312743 +NH,total,2004,1290121 +NH,under18,2004,309243 +NH,total,2003,1279840 +NH,under18,2003,311412 +NH,total,2005,1298492 +NH,under18,2005,307403 +NH,total,2006,1308389 +NH,under18,2006,305169 +NH,total,2008,1315906 +NH,under18,2008,296029 +NH,total,2007,1312540 +NH,under18,2007,300918 +NH,under18,2013,271122 +NH,total,2009,1316102 +NH,under18,2009,290850 +NH,total,2013,1323459 +NH,total,2010,1316614 +NH,under18,2010,285702 +NH,total,2011,1318075 +NH,under18,2011,280486 +NH,under18,2012,275818 +NH,total,2012,1321617 +NJ,total,2012,8867749 +NJ,under18,2012,2035106 +NJ,under18,2011,2049453 +NJ,total,2011,8836639 +NJ,under18,2010,2062013 +NJ,total,2010,8802707 +NJ,total,2013,8899339 +NJ,total,2009,8755602 +NJ,under18,2009,2068684 +NJ,under18,2013,2022117 +NJ,total,2007,8677885 +NJ,under18,2007,2091023 +NJ,total,2008,8711090 +NJ,under18,2008,2076366 +NJ,total,2006,8661679 +NJ,under18,2006,2106403 +NJ,total,2005,8651974 +NJ,under18,2005,2121878 +NJ,total,2003,8601402 +NJ,under18,2003,2126014 +NJ,total,2004,8634561 +NJ,under18,2004,2129051 +NJ,total,2002,8552643 +NJ,under18,2002,2116591 +NJ,total,2001,8492671 +NJ,under18,2001,2102838 +NJ,total,1999,8359592 +NJ,under18,1999,2066678 +NJ,total,2000,8430621 +NJ,under18,2000,2088885 +NJ,total,1997,8218808 +NJ,under18,1997,2028349 +NJ,under18,1998,2042080 +NJ,total,1998,8287418 +NJ,total,1995,8083242 +NJ,under18,1995,1997187 +NJ,under18,1996,2016502 +NJ,total,1996,8149596 +NJ,under18,1992,1890108 +NJ,total,1992,7880508 +NJ,total,1993,7948915 +NJ,under18,1993,1928623 +NJ,under18,1994,1968232 +NJ,total,1994,8014306 +NJ,total,1991,7814676 +NJ,under18,1991,1849605 +NJ,under18,1990,1818187 +NJ,total,1990,7762963 +NM,total,1990,1521574 +NM,under18,1990,453538 +NM,under18,1991,461811 +NM,total,1991,1555305 +NM,under18,1994,497542 +NM,under18,1993,487742 +NM,total,1993,1636453 +NM,total,1992,1595442 +NM,under18,1992,473176 +NM,total,1994,1682398 +NM,under18,1996,508100 +NM,total,1995,1720394 +NM,under18,1995,504558 +NM,total,1996,1752326 +NM,under18,1998,512801 +NM,total,1998,1793484 +NM,total,1997,1774839 +NM,under18,1997,514500 +NM,under18,1999,511135 +NM,total,1999,1808082 +NM,total,2000,1821204 +NM,under18,2000,508132 +NM,total,2001,1831690 +NM,under18,2001,503404 +NM,total,2002,1855309 +NM,under18,2002,502779 +NM,total,2004,1903808 +NM,under18,2004,501184 +NM,total,2003,1877574 +NM,under18,2003,500777 +NM,total,2005,1932274 +NM,under18,2005,502612 +NM,total,2006,1962137 +NM,under18,2006,505125 +NM,total,2008,2010662 +NM,under18,2008,511214 +NM,total,2007,1990070 +NM,under18,2007,508725 +NM,under18,2013,507540 +NM,total,2013,2085287 +NM,total,2009,2036802 +NM,under18,2009,515470 +NM,total,2010,2064982 +NM,under18,2010,518763 +NM,under18,2011,516513 +NM,total,2011,2077919 +NM,under18,2012,512314 +NM,total,2012,2083540 +NY,total,2012,19576125 +NY,under18,2012,4264694 +NY,total,2011,19502728 +NY,under18,2011,4294555 +NY,under18,2010,4318033 +NY,total,2010,19398228 +NY,total,2009,19307066 +NY,under18,2009,4342926 +NY,total,2013,19651127 +NY,under18,2013,4239976 +NY,total,2007,19132335 +NY,under18,2007,4410949 +NY,total,2008,19212436 +NY,under18,2008,4372170 +NY,total,2006,19104631 +NY,under18,2006,4457777 +NY,total,2005,19132610 +NY,under18,2005,4514456 +NY,total,2003,19175939 +NY,under18,2003,4619506 +NY,total,2004,19171567 +NY,under18,2004,4574065 +NY,total,2002,19137800 +NY,under18,2002,4652232 +NY,total,2001,19082838 +NY,under18,2001,4672425 +NY,under18,1999,4672587 +NY,total,1999,18882725 +NY,total,2000,19001780 +NY,under18,2000,4687374 +NY,under18,1997,4670787 +NY,total,1997,18656546 +NY,total,1998,18755906 +NY,under18,1998,4652140 +NY,total,1996,18588460 +NY,under18,1995,4648419 +NY,total,1995,18524104 +NY,under18,1996,4667647 +NY,total,1994,18459470 +NY,under18,1992,4465539 +NY,total,1992,18246653 +NY,total,1993,18374954 +NY,under18,1993,4538171 +NY,under18,1994,4605284 +NY,total,1991,18122510 +NY,under18,1991,4372727 +NY,under18,1990,4281643 +NY,total,1990,18020784 +NC,under18,1990,1625804 +NC,total,1990,6664016 +NC,total,1991,6784280 +NC,under18,1991,1640394 +NC,total,1993,7042818 +NC,under18,1993,1710267 +NC,under18,1992,1674144 +NC,total,1992,6897214 +NC,under18,1994,1750754 +NC,total,1994,7187398 +NC,total,1995,7344674 +NC,under18,1995,1785150 +NC,under18,1996,1821506 +NC,total,1996,7500670 +NC,under18,1998,1894753 +NC,total,1998,7809122 +NC,total,1997,7656825 +NC,under18,1997,1861621 +NC,total,2000,8081614 +NC,under18,2000,1967626 +NC,total,1999,7949362 +NC,under18,1999,1932141 +NC,total,2001,8210122 +NC,under18,2001,2003782 +NC,total,2002,8326201 +NC,under18,2002,2034451 +NC,total,2004,8553152 +NC,under18,2004,2085165 +NC,total,2003,8422501 +NC,under18,2003,2060838 +NC,total,2005,8705407 +NC,under18,2005,2122485 +NC,total,2006,8917270 +NC,under18,2006,2166393 +NC,total,2008,9309449 +NC,under18,2008,2252101 +NC,total,2007,9118037 +NC,under18,2007,2219168 +NC,under18,2013,2285605 +NC,total,2013,9848060 +NC,total,2009,9449566 +NC,under18,2009,2272955 +NC,total,2010,9559533 +NC,under18,2010,2282288 +NC,under18,2011,2284238 +NC,total,2011,9651377 +NC,under18,2012,2284122 +NC,total,2012,9748364 +ND,total,2012,701345 +ND,under18,2012,156765 +ND,total,2011,684867 +ND,under18,2011,152357 +ND,under18,2010,150179 +ND,total,2010,674344 +ND,total,2009,664968 +ND,under18,2009,148674 +ND,total,2013,723393 +ND,under18,2013,162688 +ND,total,2007,652822 +ND,under18,2007,147263 +ND,total,2008,657569 +ND,under18,2008,147462 +ND,total,2006,649422 +ND,under18,2006,147331 +ND,total,2005,646089 +ND,under18,2005,148119 +ND,total,2003,638817 +ND,under18,2003,150406 +ND,total,2004,644705 +ND,under18,2004,149128 +ND,total,2002,638168 +ND,under18,2002,153097 +ND,total,2001,639062 +ND,under18,2001,156113 +ND,total,1999,644259 +ND,under18,1999,163056 +ND,total,2000,642023 +ND,under18,2000,160477 +ND,total,1997,649716 +ND,under18,1997,167475 +ND,under18,1998,165448 +ND,total,1998,647532 +ND,under18,1996,169257 +ND,total,1996,650382 +ND,total,1995,647832 +ND,under18,1995,171146 +ND,under18,1994,172160 +ND,total,1994,644806 +ND,under18,1992,172052 +ND,total,1992,638223 +ND,total,1993,641216 +ND,under18,1993,172168 +ND,total,1991,635753 +ND,under18,1991,171730 +ND,under18,1990,170920 +ND,total,1990,637685 +OH,under18,1990,2778491 +OH,total,1990,10864162 +OH,total,1991,10945762 +OH,under18,1991,2806959 +OH,total,1993,11101140 +OH,under18,1993,2855785 +OH,under18,1992,2839356 +OH,total,1992,11029431 +OH,under18,1994,2875397 +OH,total,1994,11152455 +OH,total,1995,11202751 +OH,under18,1995,2879930 +OH,under18,1996,2883443 +OH,total,1996,11242827 +OH,under18,1998,2896255 +OH,total,1998,11311536 +OH,total,1997,11277357 +OH,under18,1997,2897375 +OH,total,2000,11363543 +OH,under18,2000,2886585 +OH,total,1999,11335454 +OH,under18,1999,2893270 +OH,total,2001,11387404 +OH,under18,2001,2878123 +OH,total,2002,11407889 +OH,under18,2002,2865674 +OH,total,2004,11452251 +OH,under18,2004,2836068 +OH,total,2003,11434788 +OH,under18,2003,2849573 +OH,total,2005,11463320 +OH,under18,2005,2819794 +OH,total,2006,11481213 +OH,under18,2006,2804828 +OH,total,2008,11515391 +OH,under18,2008,2768968 +OH,total,2007,11500468 +OH,under18,2007,2790347 +OH,under18,2013,2649830 +OH,total,2013,11570808 +OH,total,2009,11528896 +OH,under18,2009,2748051 +OH,total,2010,11545435 +OH,under18,2010,2722589 +OH,under18,2011,2693469 +OH,total,2011,11549772 +OH,under18,2012,2668125 +OH,total,2012,11553031 +OK,total,2012,3815780 +OK,under18,2012,939911 +OK,total,2011,3785534 +OK,under18,2011,935714 +OK,under18,2010,931483 +OK,total,2010,3759263 +OK,total,2009,3717572 +OK,under18,2009,922711 +OK,total,2013,3850568 +OK,under18,2013,947027 +OK,total,2007,3634349 +OK,under18,2007,904328 +OK,total,2008,3668976 +OK,under18,2008,910617 +OK,total,2006,3594090 +OK,under18,2006,894761 +OK,total,2005,3548597 +OK,under18,2005,885316 +OK,total,2003,3504892 +OK,under18,2003,883959 +OK,total,2004,3525233 +OK,under18,2004,881606 +OK,total,2002,3489080 +OK,under18,2002,884961 +OK,total,2001,3467100 +OK,under18,2001,885218 +OK,total,1999,3437148 +OK,under18,1999,895678 +OK,total,2000,3454365 +OK,under18,2000,891847 +OK,total,1997,3372918 +OK,under18,1997,893835 +OK,under18,1998,898501 +OK,total,1998,3405194 +OK,under18,1996,887093 +OK,total,1996,3340129 +OK,total,1995,3308208 +OK,under18,1995,883667 +OK,under18,1994,877803 +OK,total,1994,3280940 +OK,under18,1992,862548 +OK,total,1992,3220517 +OK,total,1993,3252285 +OK,under18,1993,870137 +OK,total,1991,3175440 +OK,under18,1991,849639 +OK,under18,1990,841715 +OK,total,1990,3148825 +OR,under18,1990,742436 +OR,total,1990,2860375 +OR,total,1991,2928507 +OR,under18,1991,752442 +OR,total,1993,3060367 +OR,under18,1993,778973 +OR,under18,1992,770191 +OR,total,1992,2991755 +OR,under18,1994,793435 +OR,total,1994,3121264 +OR,total,1995,3184369 +OR,under18,1995,806512 +OR,under18,1996,816102 +OR,total,1996,3247111 +OR,under18,1998,837928 +OR,total,1998,3352449 +OR,total,1997,3304310 +OR,under18,1997,830002 +OR,total,2000,3429708 +OR,under18,2000,847511 +OR,total,1999,3393941 +OR,under18,1999,843484 +OR,total,2001,3467937 +OR,under18,2001,848663 +OR,total,2002,3513424 +OR,under18,2002,850733 +OR,total,2004,3569463 +OR,under18,2004,846786 +OR,total,2003,3547376 +OR,under18,2003,850251 +OR,total,2005,3613202 +OR,under18,2005,849323 +OR,total,2006,3670883 +OR,under18,2006,857003 +OR,total,2008,3768748 +OR,under18,2008,865664 +OR,total,2007,3722417 +OR,under18,2007,862161 +OR,under18,2013,857606 +OR,total,2013,3930065 +OR,total,2009,3808600 +OR,under18,2009,866194 +OR,total,2010,3837208 +OR,under18,2010,865129 +OR,under18,2011,862518 +OR,total,2011,3867937 +OR,under18,2012,859910 +OR,total,2012,3899801 +PA,total,2012,12764475 +PA,under18,2012,2737905 +PA,total,2011,12741310 +PA,under18,2011,2761343 +PA,under18,2010,2785316 +PA,total,2010,12710472 +PA,total,2009,12666858 +PA,under18,2009,2804929 +PA,total,2013,12773801 +PA,under18,2013,2715645 +PA,total,2007,12563937 +PA,under18,2007,2839574 +PA,total,2008,12612285 +PA,under18,2008,2821004 +PA,total,2006,12510809 +PA,under18,2006,2850778 +PA,total,2005,12449990 +PA,under18,2005,2859793 +PA,total,2003,12374658 +PA,under18,2003,2883270 +PA,total,2004,12410722 +PA,under18,2004,2873125 +PA,total,2002,12331031 +PA,under18,2002,2894935 +PA,total,2001,12298970 +PA,under18,2001,2905836 +PA,total,1999,12263805 +PA,under18,1999,2930193 +PA,total,2000,12284173 +PA,under18,2000,2918850 +PA,total,1997,12227814 +PA,under18,1997,2942240 +PA,under18,1998,2940285 +PA,total,1998,12245672 +PA,under18,1996,2937411 +PA,total,1996,12220464 +PA,total,1995,12198403 +PA,under18,1995,2941531 +PA,under18,1994,2932851 +PA,total,1994,12166050 +PA,under18,1992,2873013 +PA,total,1992,12049450 +PA,total,1993,12119724 +PA,under18,1993,2907351 +PA,total,1991,11982164 +PA,under18,1991,2830059 +PA,under18,1990,2799168 +PA,total,1990,11903299 +RI,under18,1990,225923 +RI,total,1990,1005995 +RI,total,1991,1010649 +RI,under18,1991,229448 +RI,total,1993,1015113 +RI,under18,1993,237218 +RI,under18,1992,232630 +RI,total,1992,1012581 +RI,under18,1994,239100 +RI,total,1994,1015960 +RI,total,1995,1017002 +RI,under18,1995,240553 +RI,under18,1996,240569 +RI,total,1996,1020893 +RI,under18,1998,241760 +RI,total,1998,1031155 +RI,total,1997,1025353 +RI,under18,1997,242079 +RI,total,2000,1050268 +RI,under18,2000,248065 +RI,total,1999,1040402 +RI,under18,1999,247014 +RI,total,2001,1057142 +RI,under18,2001,248296 +RI,total,2002,1065995 +RI,under18,2002,248690 +RI,total,2004,1074579 +RI,under18,2004,246228 +RI,total,2003,1071342 +RI,under18,2003,248075 +RI,total,2005,1067916 +RI,under18,2005,241932 +RI,total,2006,1063096 +RI,under18,2006,237348 +RI,total,2008,1055003 +RI,under18,2008,229798 +RI,total,2007,1057315 +RI,under18,2007,233655 +RI,under18,2013,213987 +RI,total,2013,1051511 +RI,total,2009,1053646 +RI,under18,2009,225902 +RI,total,2010,1052669 +RI,under18,2010,223088 +RI,under18,2011,219783 +RI,total,2011,1050350 +RI,under18,2012,216591 +RI,total,2012,1050304 +SC,total,2012,4723417 +SC,under18,2012,1077455 +SC,total,2011,4673509 +SC,under18,2011,1076524 +SC,under18,2010,1079978 +SC,total,2010,4636361 +SC,total,2009,4589872 +SC,under18,2009,1079729 +SC,total,2013,4774839 +SC,under18,2013,1079798 +SC,total,2007,4444110 +SC,under18,2007,1064190 +SC,total,2008,4528996 +SC,under18,2008,1074116 +SC,total,2006,4357847 +SC,under18,2006,1050042 +SC,total,2005,4270150 +SC,under18,2005,1036941 +SC,total,2003,4150297 +SC,under18,2003,1023785 +SC,total,2004,4210921 +SC,under18,2004,1029111 +SC,total,2002,4107795 +SC,under18,2002,1020531 +SC,total,2001,4064995 +SC,under18,2001,1016134 +SC,total,1999,3974682 +SC,under18,1999,1007050 +SC,total,2000,4024223 +SC,under18,2000,1010641 +SC,total,1997,3859696 +SC,under18,1997,1001681 +SC,under18,1998,1006371 +SC,total,1998,3919235 +SC,under18,1996,987576 +SC,total,1996,3796200 +SC,total,1995,3748582 +SC,under18,1995,975884 +SC,under18,1994,969766 +SC,total,1994,3705397 +SC,under18,1992,947868 +SC,total,1992,3620464 +SC,total,1993,3663314 +SC,under18,1993,956951 +SC,total,1991,3570404 +SC,under18,1991,936122 +SC,under18,1990,921041 +SC,total,1990,3501155 +SD,under18,1990,199453 +SD,total,1990,697101 +SD,total,1991,703669 +SD,under18,1991,201749 +SD,total,1993,722160 +SD,under18,1993,207975 +SD,under18,1992,206632 +SD,total,1992,712801 +SD,under18,1994,208443 +SD,total,1994,730790 +SD,total,1995,737926 +SD,under18,1995,207890 +SD,under18,1996,205780 +SD,total,1996,742214 +SD,under18,1998,204786 +SD,total,1998,746059 +SD,total,1997,744223 +SD,under18,1997,205978 +SD,total,2000,755844 +SD,under18,2000,202681 +SD,total,1999,750413 +SD,under18,1999,203737 +SD,total,2001,757972 +SD,under18,2001,200795 +SD,total,2002,760020 +SD,under18,2002,198694 +SD,total,2004,770396 +SD,under18,2004,196804 +SD,total,2003,763729 +SD,under18,2003,197326 +SD,total,2005,775493 +SD,under18,2005,196476 +SD,total,2006,783033 +SD,under18,2006,197332 +SD,total,2008,799124 +SD,under18,2008,199848 +SD,total,2007,791623 +SD,under18,2007,198847 +SD,under18,2013,207959 +SD,total,2013,844877 +SD,total,2009,807067 +SD,under18,2009,201204 +SD,total,2010,816211 +SD,under18,2010,203145 +SD,under18,2011,203948 +SD,total,2011,823772 +SD,under18,2012,205298 +SD,total,2012,834047 +TN,total,2012,6454914 +TN,under18,2012,1492689 +TN,total,2011,6398361 +TN,under18,2011,1491837 +TN,under18,2010,1495090 +TN,total,2010,6356683 +TN,total,2009,6306019 +TN,under18,2009,1494687 +TN,total,2013,6495978 +TN,under18,2013,1491577 +TN,total,2007,6175727 +TN,under18,2007,1482747 +TN,total,2008,6247411 +TN,under18,2008,1494354 +TN,total,2006,6088766 +TN,under18,2006,1470166 +TN,total,2005,5991057 +TN,under18,2005,1449326 +TN,total,2003,5847812 +TN,under18,2003,1424861 +TN,total,2004,5910809 +TN,under18,2004,1433343 +TN,total,2002,5795918 +TN,under18,2002,1414857 +TN,total,2001,5750789 +TN,under18,2001,1407578 +TN,total,1999,5638706 +TN,under18,1999,1385997 +TN,total,2000,5703719 +TN,under18,2000,1399685 +TN,total,1997,5499233 +TN,under18,1997,1359030 +TN,under18,1998,1369987 +TN,total,1998,5570045 +TN,under18,1996,1345723 +TN,total,1996,5416643 +TN,total,1995,5326936 +TN,under18,1995,1331616 +TN,under18,1994,1310988 +TN,total,1994,5231438 +TN,under18,1992,1259458 +TN,total,1992,5049742 +TN,total,1993,5137584 +TN,under18,1993,1285044 +TN,total,1991,4966587 +TN,under18,1991,1233260 +TN,under18,1990,1220200 +TN,total,1990,4894492 +TX,under18,1990,4906220 +TX,total,1990,17056755 +TX,total,1991,17398005 +TX,under18,1991,5000793 +TX,total,1993,18161612 +TX,under18,1993,5217899 +TX,under18,1992,5109805 +TX,total,1992,17759738 +TX,under18,1994,5331524 +TX,total,1994,18564062 +TX,total,1995,18958751 +TX,under18,1995,5421784 +TX,under18,1996,5551447 +TX,total,1996,19340342 +TX,under18,1998,5759054 +TX,total,1998,20157531 +TX,total,1997,19740317 +TX,under18,1997,5655482 +TX,total,2000,20944499 +TX,under18,2000,5906301 +TX,total,1999,20558220 +TX,under18,1999,5840211 +TX,total,2001,21319622 +TX,under18,2001,5980187 +TX,total,2002,21690325 +TX,under18,2002,6060372 +TX,total,2004,22394023 +TX,under18,2004,6208259 +TX,total,2003,22030931 +TX,under18,2003,6132980 +TX,total,2005,22778123 +TX,under18,2005,6290970 +TX,total,2006,23359580 +TX,under18,2006,6446798 +TX,total,2008,24309039 +TX,under18,2008,6675917 +TX,total,2007,23831983 +TX,under18,2007,6565872 +TX,under18,2013,7041986 +TX,total,2013,26448193 +TX,total,2009,24801761 +TX,under18,2009,6792907 +TX,total,2010,25245178 +TX,under18,2010,6879014 +TX,under18,2011,6931758 +TX,total,2011,25640909 +TX,under18,2012,6985807 +TX,total,2012,26060796 +UT,total,2012,2854871 +UT,under18,2012,888578 +UT,total,2011,2814784 +UT,under18,2011,881350 +UT,under18,2010,873019 +UT,total,2010,2774424 +UT,total,2009,2723421 +UT,under18,2009,857853 +UT,total,2013,2900872 +UT,under18,2013,896589 +UT,total,2007,2597746 +UT,under18,2007,815496 +UT,total,2008,2663029 +UT,under18,2008,837258 +UT,total,2006,2525507 +UT,under18,2006,789957 +UT,total,2005,2457719 +UT,under18,2005,767888 +UT,total,2003,2360137 +UT,under18,2003,740483 +UT,total,2004,2401580 +UT,under18,2004,751771 +UT,total,2002,2324815 +UT,under18,2002,733517 +UT,total,2001,2283715 +UT,under18,2001,726819 +UT,total,1999,2203482 +UT,under18,1999,715398 +UT,total,2000,2244502 +UT,under18,2000,721686 +UT,total,1997,2119784 +UT,under18,1997,699528 +UT,under18,1998,709386 +UT,total,1998,2165961 +UT,under18,1996,687078 +UT,total,1996,2067976 +UT,total,1995,2014179 +UT,under18,1995,679636 +UT,under18,1994,673935 +UT,total,1994,1960446 +UT,under18,1992,648725 +UT,total,1992,1836799 +UT,total,1993,1898404 +UT,under18,1993,662968 +UT,total,1991,1779780 +UT,under18,1991,637216 +UT,under18,1990,627122 +UT,total,1990,1731223 +VT,under18,1990,143296 +VT,total,1990,564798 +VT,total,1991,568606 +VT,under18,1991,145219 +VT,total,1993,577748 +VT,under18,1993,148705 +VT,under18,1992,146983 +VT,total,1992,572751 +VT,under18,1994,150794 +VT,total,1994,583836 +VT,total,1995,589003 +VT,under18,1995,151439 +VT,under18,1996,151490 +VT,total,1996,593701 +VT,under18,1998,148467 +VT,total,1998,600416 +VT,total,1997,597239 +VT,under18,1997,150040 +VT,total,2000,609618 +VT,under18,2000,147549 +VT,total,1999,604683 +VT,under18,1999,147859 +VT,total,2001,612223 +VT,under18,2001,146040 +VT,total,2002,615442 +VT,under18,2002,144441 +VT,total,2004,619920 +VT,under18,2004,141068 +VT,total,2003,617858 +VT,under18,2003,142718 +VT,total,2005,621215 +VT,under18,2005,138933 +VT,total,2006,622892 +VT,under18,2006,136731 +VT,total,2008,624151 +VT,under18,2008,132600 +VT,total,2007,623481 +VT,under18,2007,134695 +VT,under18,2013,122701 +VT,total,2013,626630 +VT,total,2009,624817 +VT,under18,2009,130450 +VT,total,2010,625793 +VT,under18,2010,128601 +VT,under18,2011,126500 +VT,total,2011,626320 +VT,under18,2012,124555 +VT,total,2012,625953 +VA,total,2012,8186628 +VA,under18,2012,1861323 +VA,total,2011,8105850 +VA,under18,2011,1857585 +VA,under18,2010,1855025 +VA,total,2010,8024417 +VA,total,2009,7925937 +VA,under18,2009,1845132 +VA,total,2013,8260405 +VA,under18,2013,1864535 +VA,total,2007,7751000 +VA,under18,2007,1834386 +VA,total,2008,7833496 +VA,under18,2008,1838361 +VA,total,2005,7577105 +VA,under18,2005,1816270 +VA,total,2006,7673725 +VA,under18,2006,1826368 +VA,total,2003,7366977 +VA,under18,2003,1782254 +VA,total,2004,7475575 +VA,under18,2004,1801958 +VA,total,2002,7286873 +VA,under18,2002,1771247 +VA,total,2001,7198362 +VA,under18,2001,1754549 +VA,total,1999,7000174 +VA,under18,1999,1723125 +VA,total,2000,7105817 +VA,under18,2000,1741420 +VA,total,1997,6829183 +VA,under18,1997,1683766 +VA,under18,1998,1706261 +VA,total,1998,6900918 +VA,under18,1996,1664147 +VA,total,1996,6750884 +VA,total,1995,6670693 +VA,under18,1995,1649005 +VA,under18,1994,1628711 +VA,total,1994,6593139 +VA,under18,1992,1581544 +VA,total,1992,6414307 +VA,total,1993,6509630 +VA,under18,1993,1604758 +VA,total,1991,6301217 +VA,under18,1991,1548258 +VA,under18,1990,1520670 +VA,total,1990,6216884 +WA,under18,1990,1301545 +WA,total,1990,4903043 +WA,total,1991,5025624 +WA,under18,1991,1326527 +WA,total,1993,5278842 +WA,under18,1993,1387716 +WA,under18,1992,1365480 +WA,total,1992,5160757 +WA,under18,1994,1409922 +WA,total,1994,5375161 +WA,total,1995,5481027 +WA,under18,1995,1429397 +WA,under18,1996,1449613 +WA,total,1996,5569753 +WA,under18,1998,1494784 +WA,total,1998,5769562 +WA,total,1997,5674747 +WA,under18,1997,1473646 +WA,total,2000,5910512 +WA,under18,2000,1516361 +WA,total,1999,5842564 +WA,under18,1999,1507824 +WA,total,2001,5985722 +WA,under18,2001,1517527 +WA,total,2002,6052349 +WA,under18,2002,1517655 +WA,total,2004,6178645 +WA,under18,2004,1520751 +WA,total,2003,6104115 +WA,under18,2003,1514877 +WA,total,2005,6257305 +WA,under18,2005,1523890 +WA,total,2006,6370753 +WA,under18,2006,1536926 +WA,total,2008,6562231 +WA,under18,2008,1560302 +WA,total,2007,6461587 +WA,under18,2007,1549582 +WA,under18,2013,1595795 +WA,total,2013,6971406 +WA,total,2009,6667426 +WA,under18,2009,1574403 +WA,total,2010,6742256 +WA,under18,2010,1581436 +WA,under18,2011,1584709 +WA,total,2011,6821481 +WA,under18,2012,1588451 +WA,total,2012,6895318 +WV,total,2012,1856680 +WV,under18,2012,384030 +WV,total,2011,1855184 +WV,under18,2011,385283 +WV,under18,2010,387224 +WV,total,2010,1854146 +WV,total,2009,1847775 +WV,under18,2009,389036 +WV,total,2013,1854304 +WV,under18,2013,381678 +WV,total,2007,1834052 +WV,under18,2007,390661 +WV,total,2008,1840310 +WV,under18,2008,390210 +WV,total,2006,1827912 +WV,under18,2006,390637 +WV,total,2005,1820492 +WV,under18,2005,390431 +WV,total,2003,1812295 +WV,under18,2003,392460 +WV,total,2004,1816438 +WV,under18,2004,391856 +WV,total,2002,1805414 +WV,under18,2002,393569 +WV,total,2001,1801481 +WV,under18,2001,395307 +WV,total,1999,1811799 +WV,under18,1999,406784 +WV,total,2000,1807021 +WV,under18,2000,401062 +WV,total,1997,1819113 +WV,under18,1997,418037 +WV,under18,1998,412793 +WV,total,1998,1815609 +WV,under18,1996,422831 +WV,total,1996,1822808 +WV,total,1995,1823700 +WV,under18,1995,428790 +WV,under18,1994,429128 +WV,total,1994,1820421 +WV,under18,1992,433116 +WV,total,1992,1806451 +WV,total,1993,1817539 +WV,under18,1993,432364 +WV,total,1991,1798735 +WV,under18,1991,433918 +WV,under18,1990,436797 +WV,total,1990,1792548 +WI,under18,1990,1302869 +WI,total,1990,4904562 +WI,total,1991,4964343 +WI,under18,1991,1314855 +WI,total,1993,5084889 +WI,under18,1993,1337334 +WI,under18,1992,1330555 +WI,total,1992,5025398 +WI,under18,1994,1348110 +WI,total,1994,5133678 +WI,total,1995,5184836 +WI,under18,1995,1351343 +WI,under18,1996,1352877 +WI,total,1996,5229986 +WI,under18,1998,1362907 +WI,total,1998,5297673 +WI,total,1997,5266213 +WI,under18,1997,1359712 +WI,total,1999,5332666 +WI,under18,1999,1367019 +WI,total,2000,5373999 +WI,under18,2000,1370440 +WI,total,2001,5406835 +WI,under18,2001,1367593 +WI,total,2002,5445162 +WI,under18,2002,1365315 +WI,total,2004,5514026 +WI,under18,2004,1354643 +WI,total,2003,5479203 +WI,under18,2003,1358505 +WI,total,2005,5546166 +WI,under18,2005,1349866 +WI,total,2006,5577655 +WI,under18,2006,1348785 +WI,total,2008,5640996 +WI,under18,2008,1345573 +WI,total,2007,5610775 +WI,under18,2007,1348901 +WI,under18,2013,1307776 +WI,total,2013,5742713 +WI,total,2009,5669264 +WI,under18,2009,1342411 +WI,total,2010,5689060 +WI,under18,2010,1336094 +WI,under18,2011,1325870 +WI,total,2011,5708785 +WI,under18,2012,1316113 +WI,total,2012,5724554 +WY,total,2012,576626 +WY,under18,2012,136526 +WY,total,2011,567329 +WY,under18,2011,135407 +WY,under18,2010,135351 +WY,total,2010,564222 +WY,total,2009,559851 +WY,under18,2009,134960 +WY,total,2013,582658 +WY,under18,2013,137679 +WY,total,2007,534876 +WY,under18,2007,128760 +WY,total,2008,546043 +WY,under18,2008,131511 +WY,total,2006,522667 +WY,under18,2006,125525 +WY,total,2005,514157 +WY,under18,2005,124022 +WY,total,2003,503453 +WY,under18,2003,124182 +WY,total,2004,509106 +WY,under18,2004,123974 +WY,total,2002,500017 +WY,under18,2002,125495 +WY,total,2001,494657 +WY,under18,2001,126212 +WY,total,2000,494300 +WY,under18,2000,128774 +WY,total,1999,491780 +WY,under18,1999,130793 +WY,total,1997,489452 +WY,under18,1997,134328 +WY,under18,1998,132602 +WY,total,1998,490787 +WY,under18,1996,135698 +WY,total,1996,488167 +WY,total,1995,485160 +WY,under18,1995,136785 +WY,under18,1994,137733 +WY,total,1994,480283 +WY,under18,1992,137308 +WY,total,1992,466251 +WY,total,1993,473081 +WY,under18,1993,137458 +WY,total,1991,459260 +WY,under18,1991,136720 +WY,under18,1990,136078 +WY,total,1990,453690 +PR,under18,1990,NaN +PR,total,1990,NaN +PR,total,1991,NaN +PR,under18,1991,NaN +PR,total,1993,NaN +PR,under18,1993,NaN +PR,under18,1992,NaN +PR,total,1992,NaN +PR,under18,1994,NaN +PR,total,1994,NaN +PR,total,1995,NaN +PR,under18,1995,NaN +PR,under18,1996,NaN +PR,total,1996,NaN +PR,under18,1998,NaN +PR,total,1998,NaN +PR,total,1997,NaN +PR,under18,1997,NaN +PR,total,1999,NaN +PR,under18,1999,NaN +PR,total,2000,3810605 +PR,under18,2000,1089063 +PR,total,2001,3818774 +PR,under18,2001,1077566 +PR,total,2002,3823701 +PR,under18,2002,1065051 +PR,total,2004,3826878 +PR,under18,2004,1035919 +PR,total,2003,3826095 +PR,under18,2003,1050615 +PR,total,2005,3821362 +PR,under18,2005,1019447 +PR,total,2006,3805214 +PR,under18,2006,998543 +PR,total,2007,3782995 +PR,under18,2007,973613 +PR,total,2008,3760866 +PR,under18,2008,945705 +PR,under18,2013,814068 +PR,total,2013,3615086 +PR,total,2009,3740410 +PR,under18,2009,920794 +PR,total,2010,3721208 +PR,under18,2010,896945 +PR,under18,2011,869327 +PR,total,2011,3686580 +PR,under18,2012,841740 +PR,total,2012,3651545 +USA,under18,1990,64218512 +USA,total,1990,249622814 +USA,total,1991,252980942 +USA,under18,1991,65313018 +USA,under18,1992,66509177 +USA,total,1992,256514231 +USA,total,1993,259918595 +USA,under18,1993,67594938 +USA,under18,1994,68640936 +USA,total,1994,263125826 +USA,under18,1995,69473140 +USA,under18,1996,70233512 +USA,total,1995,266278403 +USA,total,1996,269394291 +USA,total,1997,272646932 +USA,under18,1997,70920738 +USA,under18,1998,71431406 +USA,total,1998,275854116 +USA,under18,1999,71946051 +USA,total,2000,282162411 +USA,under18,2000,72376189 +USA,total,1999,279040181 +USA,total,2001,284968955 +USA,under18,2001,72671175 +USA,total,2002,287625193 +USA,under18,2002,72936457 +USA,total,2003,290107933 +USA,under18,2003,73100758 +USA,total,2004,292805298 +USA,under18,2004,73297735 +USA,total,2005,295516599 +USA,under18,2005,73523669 +USA,total,2006,298379912 +USA,under18,2006,73757714 +USA,total,2007,301231207 +USA,under18,2007,74019405 +USA,total,2008,304093966 +USA,under18,2008,74104602 +USA,under18,2013,73585872 +USA,total,2013,316128839 +USA,total,2009,306771529 +USA,under18,2009,74134167 +USA,under18,2010,74119556 +USA,total,2010,309326295 +USA,under18,2011,73902222 +USA,total,2011,311582564 +USA,under18,2012,73708179 +USA,total,2012,313873685 diff --git a/Day91-100/英语面试.md b/Day91-100/100.英语面试.md similarity index 100% rename from Day91-100/英语面试.md rename to Day91-100/100.英语面试.md diff --git a/Day91-100/团队项目开发.md b/Day91-100/91.团队项目开发准备.md similarity index 99% rename from Day91-100/团队项目开发.md rename to Day91-100/91.团队项目开发准备.md index d86e03b..86f0e5e 100644 --- a/Day91-100/团队项目开发.md +++ b/Day91-100/91.团队项目开发准备.md @@ -1,4 +1,4 @@ -## 团队项目开发 +## 团队项目开发准备 我们经常听到个人开发和团队开发这两个词,所谓个人开发就是一个人把控产品的所有内容;而团队开发则是由多个人组成团队并完成产品的开发。要实施团队开发以下几点是必不可少的: diff --git a/Day91-100/Docker简易上手指南.md b/Day91-100/92.Docker在项目中的应用.md similarity index 99% rename from Day91-100/Docker简易上手指南.md rename to Day91-100/92.Docker在项目中的应用.md index 4d4de42..ee47fb3 100644 --- a/Day91-100/Docker简易上手指南.md +++ b/Day91-100/92.Docker在项目中的应用.md @@ -1,4 +1,4 @@ -## Docker简易上手指南 +## Docker在项目中的应用 ### Docker简介 diff --git a/Day91-100/MySQL相关知识.md b/Day91-100/93.数据库设计和OOAD.md similarity index 98% rename from Day91-100/MySQL相关知识.md rename to Day91-100/93.数据库设计和OOAD.md index 8f78647..2281042 100644 --- a/Day91-100/MySQL相关知识.md +++ b/Day91-100/93.数据库设计和OOAD.md @@ -1,4 +1,4 @@ -## MySQL相关知识 +## 数据库设计和OOAD ### 存储引擎 diff --git a/Day91-100/网络API接口设计.md b/Day91-100/94.网络API接口设计.md similarity index 98% rename from Day91-100/网络API接口设计.md rename to Day91-100/94.网络API接口设计.md index e83a568..df05a3f 100644 --- a/Day91-100/网络API接口设计.md +++ b/Day91-100/94.网络API接口设计.md @@ -46,7 +46,7 @@ API接口返回的数据通常都是JSON或XML格式,我们这里不讨论后 | 10003 | 评论已被删除 | 查看评论时评论因不和谐因素已被删除 | | 10004 | …… | …… | -1. **GET** `/comments/{article-id}` +1. **GET** `/articles/{article-id}/comments/` 开发者:王大锤 @@ -95,7 +95,7 @@ API接口返回的数据通常都是JSON或XML格式,我们这里不讨论后 } ``` -2. **POST** `/comments/{article-id}` +2. **POST** `/articles/{article-id}/comments` 开发者:王大锤 diff --git a/Day91-100/Django知识点概述.md b/Day91-100/95.使用Django开发项目.md similarity index 99% rename from Day91-100/Django知识点概述.md rename to Day91-100/95.使用Django开发项目.md index 4ae84e5..3ee684f 100644 --- a/Day91-100/Django知识点概述.md +++ b/Day91-100/95.使用Django开发项目.md @@ -1,10 +1,12 @@ -## Django知识点概述 +## 使用Django开发项目 + +> 说明:本文的部分插图来自于《Python项目开发实战》和《精通Django》,这两本书中都包含了对Django框架精彩的讲解,有兴趣的读者可以自行购买阅读。 ### Web应用 问题1:描述一个Web应用的工作流程。 -![s](./res/web-application.png) +![](./res/web-application.png) 问题2:描述项目的物理架构。(上图中补充负载均衡(反向代理)服务器、数据库服务器、文件服务器、邮件服务器、缓存服务器、防火墙等,而且每个节点都有可能是多节点构成的集群,如下图所示,架构并不是一开始就是这样,而是逐步演进的) diff --git a/Day91-100/关于测试.md b/Day91-100/96.软件测试和自动化测试.md similarity index 99% rename from Day91-100/关于测试.md rename to Day91-100/96.软件测试和自动化测试.md index a71864b..c461b66 100644 --- a/Day91-100/关于测试.md +++ b/Day91-100/96.软件测试和自动化测试.md @@ -1,4 +1,4 @@ -## 关于测试 +## 软件测试和自动化测试 ### 软件测试概述 diff --git a/Day91-100/电商网站技术要点剖析.md b/Day91-100/97.电商网站技术要点剖析.md similarity index 99% rename from Day91-100/电商网站技术要点剖析.md rename to Day91-100/97.电商网站技术要点剖析.md index 71b43d0..8af2050 100644 --- a/Day91-100/电商网站技术要点剖析.md +++ b/Day91-100/97.电商网站技术要点剖析.md @@ -812,7 +812,7 @@ HAYSTACK_CONNECTIONS = { # 引擎配置 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', # 搜索引擎服务的URL - 'URL': 'http://1.2.3.4:9200', + 'URL': 'http://1.2.3.4:9200', # 索引库的名称 'INDEX_NAME': 'goods', }, diff --git a/Day91-100/项目部署上线指南.md b/Day91-100/98.项目部署上线和性能调优.md similarity index 100% rename from Day91-100/项目部署上线指南.md rename to Day91-100/98.项目部署上线和性能调优.md diff --git a/Day91-100/面试中的公共问题.md b/Day91-100/99.面试中的公共问题.md similarity index 89% rename from Day91-100/面试中的公共问题.md rename to Day91-100/99.面试中的公共问题.md index f05e9fa..ec5648d 100644 --- a/Day91-100/面试中的公共问题.md +++ b/Day91-100/99.面试中的公共问题.md @@ -23,6 +23,8 @@ 1. 开发中用过哪些标准库和三方库。 > 标准库:sys / os / re / math / random / logging / json / pickle / shelve / socket / datetime / hashlib / configparser / urllib / itertools / collections / functools / threading / multiprocess / timeit / atexit / abc / asyncio / base64 / concurrent.futures / copy / csv / operator / enum / heapq / http / profile / pstats / ssl / unitest / uuid + > + > 三方库:openpyxl / xlrd / xlwt / PyPDF2 / ReportLab / PyYAML / jieba / pillow / requests / urllib3 / responses / aiohttp / BeautifulSoup4 / lxml / pyquery / PyMySQL / psycopg2 / redis / PyMongo / Peewee / SQLAlchemy / alipay / PyJWT / itsdangerous / celery / flower / elasticsearch-dsl-py / PyCrypto / Paramiko / logbook / nose / pytest / coverage / Selenium / lineprofiler / memoryprofiler / matplotlib / pygal / OpenCV 2. 装饰器的作用、原理和实现。 diff --git a/Git上手指南.md b/Git上手指南.md new file mode 100644 index 0000000..15c1f49 --- /dev/null +++ b/Git上手指南.md @@ -0,0 +1,4 @@ +## Git上手指南 + +(敬请期待……) + diff --git a/PEP 8风格指南.md b/PEP8风格指南.md similarity index 95% rename from PEP 8风格指南.md rename to PEP8风格指南.md index 10a6121..b381dbe 100644 --- a/PEP 8风格指南.md +++ b/PEP8风格指南.md @@ -32,5 +32,5 @@ PEP 8倡导用不同的命名风格来命名Python中不同的标识符,以便 3. 就算`if`分支、`for`循环、`except`异常捕获等中只有一行代码,也不要将代码和`if`、`for`、`except`等写在一起,分开写才会让代码更清晰。 4. `import`语句总是放在文件开头的地方。 5. 引入模块的时候,`from math import sqrt`比`import math`更好。 -6. 如果有多个`import`语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。 +6. 如果有多个`import`语句,应该将其分为三部分,从上到下分别是Python**标准模块**、**第三方模块**和**自定义模块**,每个部分内部应该按照模块名称的**字母表顺序**来排列。 diff --git a/Python之禅.md b/Python之禅.md new file mode 100644 index 0000000..a5b968e --- /dev/null +++ b/Python之禅.md @@ -0,0 +1,21 @@ +## Zen of Python(Python之禅) + +Beautiful is better than ugly. (优美比丑陋好) +Explicit is better than implicit.(清晰比晦涩好) +Simple is better than complex.(简单比复杂好) +Complex is better than complicated.(复杂比错综复杂好) +Flat is better than nested.(扁平比嵌套好) +Sparse is better than dense.(稀疏比密集好) +Readability counts.(可读性很重要) +Special cases aren't special enough to break the rules.(特殊情况也不应该违反这些规则) +Although practicality beats purity.(但现实往往并不那么完美) +Errors should never pass silently.(异常不应该被静默处理) +Unless explicitly silenced.(除非你希望如此) +In the face of ambiguity, refuse the temptation to guess.(遇到模棱两可的地方,不要胡乱猜测) +There should be one-- and preferably only one --obvious way to do it.(肯定有一种通常也是唯一一种最佳的解决方案) +Although that way may not be obvious at first unless you're Dutch.(虽然这种方案并不是显而易见的,因为你不是那个荷兰人^这里指的是Python之父Guido^) +Now is better than never.(现在开始做比不做好) +Although never is often better than \*right\* now.(不做比盲目去做好^极限编程中的YAGNI原则^) +If the implementation is hard to explain, it's a bad idea.(如果一个实现方案难于理解,它就不是一个好的方案) +If the implementation is easy to explain, it may be a good idea.(如果一个实现方案易于理解,它很有可能是一个好的方案) +Namespaces are one honking great idea -- let's do more of those!(命名空间非常有用,我们应当多加利用) \ No newline at end of file diff --git a/Python惯例.md b/Python惯例.md index df875fa..54b0256 100644 --- a/Python惯例.md +++ b/Python惯例.md @@ -5,7 +5,6 @@ 1. 让代码既可以被导入又可以被执行。 ```Python - if __name__ == '__main__': ``` @@ -13,7 +12,6 @@ 2. 用下面的方式判断逻辑“真”或“假”。 ```Python - if x: if not x: ``` @@ -21,7 +19,6 @@ **好**的代码: ```Python - name = 'jackfrued' fruits = ['apple', 'orange', 'grape'] owners = {'1001': '骆昊', '1002': '王大锤'} @@ -32,7 +29,6 @@ **不好**的代码: ```Python - name = 'jackfrued' fruits = ['apple', 'orange', 'grape'] owners = {'1001': '骆昊', '1002': '王大锤'} @@ -43,7 +39,6 @@ 3. 善于使用in运算符。 ```Python - if x in items: # 包含 for x in items: # 迭代 ``` @@ -51,7 +46,6 @@ **好**的代码: ```Python - name = 'Hao LUO' if 'L' in name: print('The name has an L in it.') @@ -60,7 +54,6 @@ **不好**的代码: ```Python - name = 'Hao LUO' if name.find('L') != -1: print('This name has an L in it!') @@ -69,7 +62,6 @@ 4. 不使用临时变量交换两个值。 ```Python - a, b = b, a ``` @@ -78,7 +70,6 @@ **好**的代码: ```Python - chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd'] name = ''.join(chars) print(name) # jackfrued @@ -87,7 +78,6 @@ **不好**的代码: ```Python - chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd'] name = '' for char in chars: @@ -104,7 +94,6 @@ **好**的代码: ```Python - d = {'x': '5'} try: value = int(d['x']) @@ -116,7 +105,6 @@ **不好**的代码: ```Python - d = {'x': '5'} if 'x' in d and isinstance(d['x'], str) \ and d['x'].isdigit(): @@ -131,7 +119,6 @@ **好**的代码: ```Python - fruits = ['orange', 'grape', 'pitaya', 'blueberry'] for index, fruit in enumerate(fruits): print(index, ':', fruit) @@ -140,7 +127,6 @@ **不好**的代码: ```Python - fruits = ['orange', 'grape', 'pitaya', 'blueberry'] index = 0 for fruit in fruits: @@ -153,7 +139,6 @@ **好**的代码: ```Python - data = [7, 20, 3, 15, 11] result = [num * 3 for num in data if num > 10] print(result) # [60, 45, 33] @@ -162,7 +147,6 @@ **不好**的代码: ```Python - data = [7, 20, 3, 15, 11] result = [] for i in data: @@ -176,7 +160,6 @@ **好**的代码: ```Python - keys = ['1001', '1002', '1003'] values = ['骆昊', '王大锤', '白元芳'] d = dict(zip(keys, values)) @@ -186,7 +169,6 @@ **不好**的代码: ```Python - keys = ['1001', '1002', '1003'] values = ['骆昊', '王大锤', '白元芳'] d = {} diff --git a/README.md b/README.md index 68be96b..8ee11a7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ ## Python - 100天从新手到大师 > 作者:骆昊 +> +> 最近有很多想学习Python的小伙伴陆陆续续加入我们的交流群,目前我们的交流群人数已经超过一万人,光靠我自己已经无法及时处理小伙伴们的入群申请,更无法及时为大家解答问题。目前我的想法是分技术方向建立讨论群并安排专门的人来管理这些群,群管理者应该具备专业的知识并有相对充裕的时间,可以解答小伙伴们提出的问题。当然,我会向这些管理者支付报酬,如果有兴趣成为管理者的可以跟我私聊。希望通过这种方式,我们能汇聚更多优秀的Python开发者,一方面打造沟通和交流的平台,另一方面让新入行的开发者获得问道的途径并藉此迅速成长。我会继续努力做好线上公开课以及线下技术交流活动,也希望各位小伙伴一如既往的支持我们。创作不易,感谢大家的打赏支持,这些钱不会用于购买咖啡而是捐赠给支教组织([点击](./更新日志.md)了解捐赠情况)。感谢**北京千锋互联科技有限公司Python教学部**对[公开课](https://ke.qq.com/course/406954)提供的支持。 + +![](./res/python_qq_group.png) + +> **温馨提示**:中间的**Python100天交流群之初入江湖**为付费群,会安排专门的群管理者为大家解答问题;右侧的**Python后端开发讨论群**和**Python爬虫开发讨论群**为免费群,从事Web后端开发和爬虫开发的小伙伴可以加群交流,**萌新勿入**。 ### Python应用领域和就业形势分析 @@ -35,7 +41,7 @@ ![](./res/python-bj-salary.png) -![](./res/python-cd-salary.png) +![](./res/python-salary-chengdu.png) 给初学者的几个建议: @@ -47,15 +53,15 @@ ### Day01~15 - [Python语言基础](./Day01-15) -#### Day01 - [初识Python](./Day01-15/Day01/初识Python.md) +#### Day01 - [初识Python](./Day01-15/01.初识Python.md) - Python简介 - Python的历史 / Python的优缺点 / Python的应用领域 - 搭建编程环境 - Windows环境 / Linux环境 / MacOS环境 -- 从终端运行Python程序 - DOS命令 / Hello, world / print函数 / 运行程序 +- 从终端运行Python程序 - Hello, world / print函数 / 运行程序 - 使用IDLE - 交互式环境(REPL) / 编写多行代码 / 运行程序 / 退出IDLE - 注释 - 注释的作用 / 单行注释 / 多行注释 -#### Day02 - [语言元素](./Day01-15/Day02/语言元素.md) +#### Day02 - [语言元素](./Day01-15/02.语言元素.md) - 程序和进制 - 指令和程序 / 冯诺依曼机 / 二进制和十进制 / 八进制和十六进制 - 变量和类型 - 变量的命名 / 变量的使用 / input函数 / 检查变量类型 / 类型转换 @@ -63,25 +69,25 @@ - 运算符 - 数学运算符 / 赋值运算符 / 比较运算符 / 逻辑运算符 / 身份运算符 / 运算符的优先级 - 应用案例 - 华氏温度转换成摄氏温度 / 输入圆的半径计算周长和面积 / 输入年份判断是否是闰年 -#### Day03 - [分支结构](./Day01-15/Day03/分支结构.md) +#### Day03 - [分支结构](./Day01-15/03.分支结构.md) - 分支结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图 - if语句 - 简单的if / if-else结构 / if-elif-else结构 / 嵌套的if - 应用案例 - 用户身份验证 / 英制单位与公制单位互换 / 掷骰子决定做什么 / 百分制成绩转等级制 / 分段函数求值 / 输入三条边的长度如果能构成三角形就计算周长和面积 -#### Day04 - [循环结构](./Day01-15/Day04/循环结构.md) +#### Day04 - [循环结构](./Day01-15/04.循环结构.md) - 循环结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图 - while循环 - 基本结构 / break语句 / continue语句 - for循环 - 基本结构 / range类型 / 循环中的分支结构 / 嵌套的循环 / 提前结束程序 - 应用案例 - 1~100求和 / 判断素数 / 猜数字游戏 / 打印九九表 / 打印三角形图案 / 猴子吃桃 / 百钱百鸡 -#### Day05 - [总结和练习](./Day01-15/Day05/总结和练习.md) +#### Day05 - [构造程序逻辑](./Day01-15/05.构造程序逻辑.md) - 基础练习 - 水仙花数 / 完美数 / 五人分鱼 / Fibonacci数列 / 回文素数 - 综合练习 - Craps赌博游戏 -#### Day06 - [函数和模块的使用](./Day01-15/Day06/函数和模块的使用.md) +#### Day06 - [函数和模块的使用](./Day01-15/06.函数和模块的使用.md) - 函数的作用 - 代码的坏味道 / 用函数封装功能模块 - 定义函数 - def语句 / 函数名 / 参数列表 / return语句 / 调用自定义函数 @@ -91,7 +97,7 @@ - 作用域问题 - 局部作用域 / 嵌套作用域 / 全局作用域 / 内置作用域 / 和作用域相关的关键字 - 用模块管理函数 - 模块的概念 / 用自定义模块管理函数 / 命名冲突的时候会怎样(同一个模块和不同的模块) -#### Day07 - [字符串和常用数据结构](./Day01-15/Day07/字符串和常用数据结构.md) +#### Day07 - [字符串和常用数据结构](./Day01-15/07.字符串和常用数据结构.md) - 字符串的使用 - 计算长度 / 下标运算 / 切片 / 常用方法 - 列表基本用法 - 定义列表 / 用下表访问元素 / 下标越界 / 添加元素 / 删除元素 / 修改元素 / 切片 / 循环遍历 @@ -105,7 +111,7 @@ - 基础练习 - 跑马灯效果 / 列表找最大元素 / 统计考试成绩的平均分 / Fibonacci数列 / 杨辉三角 - 综合案例 - 双色球选号 / 井字棋 -#### Day08 - [面向对象编程基础](./Day01-15/Day08/面向对象编程基础.md) +#### Day08 - [面向对象编程基础](./Day01-15/08.面向对象编程基础.md) - 类和对象 - 什么是类 / 什么是对象 / 面向对象其他相关概念 - 定义类 - 基本结构 / 属性和方法 / 构造器 / 析构器 / \_\_str\_\_方法 @@ -113,7 +119,7 @@ - 面向对象的四大支柱 - 抽象 / 封装 / 继承 / 多态 - 基础练习 - 定义学生类 / 定义时钟类 / 定义图形类 / 定义汽车类 -#### Day09 - [面向对象进阶](./Day01-15/Day09/面向对象进阶.md) +#### Day09 - [面向对象进阶](./Day01-15/09.面向对象进阶.md) - 属性 - 类属性 / 实例属性 / 属性访问器 / 属性修改器 / 属性删除器 / 使用\_\_slots\_\_ - 类中的方法 - 实例方法 / 类方法 / 静态方法 @@ -122,54 +128,49 @@ - 继承和多态 - 什么是继承 / 继承的语法 / 调用父类方法 / 方法重写 / 类型判定 / 多重继承 / 菱形继承(钻石继承)和C3算法 - 综合案例 - 工资结算系统 / 图书自动折扣系统 / 自定义分数类 -#### Day10 - [图形用户界面和游戏开发](./Day01-15/Day10/图形用户界面和游戏开发.md) +#### Day10 - [图形用户界面和游戏开发](./Day01-15/10.图形用户界面和游戏开发.md) - 使用tkinter开发GUI - 使用pygame三方库开发游戏应用 - “大球吃小球”游戏 -#### Day11 - [文件和异常](./Day01-15/Day11/文件和异常.md) +#### Day11 - [文件和异常](./Day01-15/11.文件和异常.md) - 读文件 - 读取整个文件 / 逐行读取 / 文件路径 - 写文件 - 覆盖写入 / 追加写入 / 文本文件 / 二进制文件 - 异常处理 - 异常机制的重要性 / try-except代码块 / else代码块 / finally代码块 / 内置异常类型 / 异常栈 / raise语句 - 数据持久化 - CSV文件概述 / csv模块的应用 / JSON数据格式 / json模块的应用 -- 综合案例 - 歌词解析 -#### Day12 - [字符串和正则表达式](./Day01-15/Day12/字符串和正则表达式.md) +#### Day12 - [字符串和正则表达式](./Day01-15/12.字符串和正则表达式.md) -- 字符串高级操作 - 转义字符 \ 原始字符串 \ 多行字符串 \ in和 not in运算符 \ is开头的方法 \ join和split方法 \ strip相关方法 \ pyperclip模块 \ 不变字符串和可变字符串 \ StringIO的使用 -- 正则表达式入门 - 正则表达式的作用 \ 元字符 \ 转义 \ 量词 \ 分组 \ 零宽断言 \贪婪匹配与惰性匹配懒惰 \ 使用re模块实现正则表达式操作(匹配、搜索、替换、捕获) -- 使用正则表达式 - re模块 \ compile函数 \ group和groups方法 \ match方法 \ search方法 \ findall和finditer方法 \ sub和subn方法 \ split方法 +- 字符串高级操作 - 转义字符 / 原始字符串 / 多行字符串 / in和 not in运算符 / is开头的方法 / join和split方法 / strip相关方法 / pyperclip模块 / 不变字符串和可变字符串 / StringIO的使用 +- 正则表达式入门 - 正则表达式的作用 / 元字符 / 转义 / 量词 / 分组 / 零宽断言 /贪婪匹配与惰性匹配懒惰 / 使用re模块实现正则表达式操作(匹配、搜索、替换、捕获) +- 使用正则表达式 - re模块 / compile函数 / group和groups方法 / match方法 / search方法 / findall和finditer方法 / sub和subn方法 / split方法 - 应用案例 - 使用正则表达式验证输入的字符串 -#### Day13 - [进程和线程](./Day01-15/Day13/进程和线程.md) +#### Day13 - [进程和线程](./Day01-15/13.进程和线程.md) - 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景 - 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信 - 使用线程 - thread模块 / threading模块 / Thread类 / Lock类 / Condition类 / 线程池 -#### Day14-A - [网络编程入门](./Day01-15/Day14-A/网络编程入门.md) +#### Day14 - [网络编程入门和网络应用开发](./Day01-15/14.网络编程入门和网络应用开发.md) - 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念 -- 网络应用架构 - “客户端-服务器”架构 / “浏览器-服务器”架构 +- 网络应用模式 - “客户端-服务器”模式 / “浏览器-服务器”模式 +- 基于HTTP协议访问网络资源 - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据 - Python网络编程 - 套接字的概念 / socket模块 / socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块 - -#### Day14-B - [网络应用开发](./Day01-15/Day14-B/网络应用开发.md) - -- 访问网络API - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据 -- 文件传输 - FTP协议 / ftplib模块 / 交互式FTP应用 - 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块 -- 短信服务 - twilio模块 / 国内的短信服务 +- 短信服务 - 调用短信服务网关 -#### Day15 - [图像和文档处理](./Day01-15/Day15/图像和办公文档处理.md) +#### Day15 - [图像和文档处理](./Day01-15/15.图像和办公文档处理.md) - 用Pillow处理图片 - 图片读写 / 图片合成 / 几何变换 / 色彩转换 / 滤镜效果 - 读写Word文档 - 文本内容的处理 / 段落 / 页眉和页脚 / 样式的处理 - 读写Excel文件 - xlrd模块 / xlwt模块 - 生成PDF文件 - pypdf2模块 / reportlab模块 -### Day16~Day20 - [Python语言进阶 ](./Day16-20/Python语言进阶.md) +### Day16~Day20 - [Python语言进阶 ](./Day16-20/16.Python语言进阶.md) - 常用数据结构 - 函数的高级用法 - “一等公民” / 高阶函数 / Lambda函数 / 作用域和闭包 / 装饰器 @@ -177,7 +178,7 @@ - 迭代器和生成器 - 相关魔术方法 / 创建生成器的两种方式 / - 并发和异步编程 - 多线程 / 多进程 / 异步IO / async和await -### Day21~30 - [Web前端入门](./Day21-30/Web前端概述.md) +### Day21~30 - [Web前端入门](./Day21-30/21.Web前端概述.md) - 用HTML标签承载页面内容 - 用CSS渲染页面 @@ -187,7 +188,7 @@ - Element的使用 - Bootstrap的使用 -### Day31~35 - [玩转Linux操作系统](./Day31-35/玩转Linux操作系统.md) +### Day31~35 - [玩转Linux操作系统](./Day31-35/31.玩转Linux操作系统.md) - 操作系统发展史和Linux概述 - Linux基础命令 @@ -201,7 +202,7 @@ ### Day36~40 - [数据库基础和进阶](./Day36-40) -- [关系型数据库MySQL](./Day36-40/关系型数据库MySQL.md) +- [关系型数据库MySQL](./Day36-40/36.关系型数据库MySQL.md) - 关系型数据库概述 - MySQL的安装和使用 - SQL的使用 @@ -213,21 +214,21 @@ - 数据完整性 - 数据一致性 - 在Python中操作MySQL -- [NoSQL入门](./Day36-40/NoSQL入门.md) +- [NoSQL入门](./Day36-40/39.NoSQL入门.md) - NoSQL概述 - Redis概述 - Mongo概述 ### Day41~55 - [实战Django](./Day41-55) -#### Day41 - [快速上手](./Day41-55/01.快速上手.md) +#### Day41 - [快速上手](./Day41-55/41.快速上手.md) - Web应用工作原理和HTTP协议 - Django框架概述 - 5分钟快速上手 - 使用视图模板 -#### Day42 - [深入模型](./Day41-55/02.深入模型.md) +#### Day42 - [深入模型](./Day41-55/42.深入模型.md) - 关系型数据库配置 - 管理后台的使用 @@ -235,80 +236,126 @@ - Django模型最佳实践 - 模型定义参考 -#### Day43 - [静态资源和Ajax请求](./Day41-55/03.静态资源和Ajax请求.md) +#### Day43 - [静态资源和Ajax请求](./Day41-55/43.静态资源和Ajax请求.md) - 加载静态资源 - 用Ajax请求获取数据 -#### Day44 - [表单的应用](./Day41-55/04.表单的应用.md) +#### Day44 - [表单的应用](./Day41-55/44.表单的应用.md) -#### Day45 - [Cookie和Session](./Day41-55/05.Cookie和Session.md) +- 表单和表单控件 +- 跨站请求伪造和CSRF令牌 +- Form和ModelForm +- 表单验证 -#### Day46 - [中间件的应用](./Day41-55/06.中间件的应用.md) +#### Day45 - [Cookie和Session](./Day41-55/45.Cookie和Session.md) -#### Day47 - [日志和缓存](./Day41-55/07.日志和缓存.md) +- 实现用户跟踪 +- cookie和session的关系 +- Django框架对session的支持 +- 视图函数中的cookie读写操作 -#### Day48 - [文件上传和富文本编辑](./Day41-55/08.文件上传.md) +#### Day46 - [报表和日志](./Day41-55/46.报表和日志.md) -#### Day49 - [文件下载和报表](./Day41-55/09.文件下载和报表.md) +- 通过HttpResponse修改响应头 +- 使用StreamingHttpResponse处理大文件 +- 使用xlwt生成Excel报表 +- 使用reportlab生成PDF报表 +- 使用ECharts生成前端图表 +- 配置日志和Django-Debug-Toolbar -#### Day50 - [RESTful架构和DRF入门](./Day41-55/10.RESTful架构和DRF入门.md) +#### Day47 - [中间件的应用](./Day41-55/47.中间件的应用.md) -#### Day51 - [RESTful架构和DRF进阶](./Day41-55/11.RESTful架构和DRF进阶.md) +- 什么是中间件 +- Django框架内置的中间件 +- 自定义中间件及其应用场景 -#### Day52 - [使用缓存](./Day41-55/12.使用缓存.md) +#### Day48 - [前后端分离开发入门](./Day41-55/48.前后端分离开发入门.md) -#### Day53 - [短信和邮件](./Day41-55/13.短信和邮件.md) +- 返回JSON格式的数据 +- 用Vue.js渲染页面 -#### Day54 - [异步任务和定时任务](./Day41-55/14.异步任务和定时任务.md) +#### Day49 - [RESTful架构和DRF入门](./Day41-55/49.RESTful架构和DRF入门.md) -#### Day55 - [单元测试和项目上线](./Day41-55/15.单元测试和项目上线.md) +#### Day50 - [RESTful架构和DRF进阶](./Day41-55/50.RESTful架构和DRF进阶.md) -- 项目开发流程和相关工具 -- 生成非HTML内容 -- 项目部署和测试 -- 项目性能初步调优 -- Web应用安全保护 +#### Day51 - [使用缓存](./Day41-55/51.使用缓存.md) + +- 网站优化第一定律 + +- 在Django项目中使用Redis提供缓存服务 +- 在视图函数中读写缓存 +- 使用装饰器实现页面缓存 +- 为数据接口提供缓存服务 + +#### Day52 - [文件上传和富文本编辑](./Day41-55/52.文件上传.md) + +- 文件上传表单控件和图片文件预览 +- 服务器端如何处理上传的文件 +- 富文本编辑器概述 +- wangEditor的使用 + +#### Day53 - [短信和邮件](./Day41-55/53.短信和邮件.md) + +- 常用短信网关平台介绍 +- 使用螺丝帽发送短信 +- Django框架对邮件服务的支持 + +#### Day54 - [异步任务和定时任务](./Day41-55/54.异步任务和定时任务.md) + +- 网站优化第二定律 +- 配置消息队列服务 +- 在项目中使用celery实现任务异步化 +- 在项目中使用celery实现定时任务 + +#### Day55 - [单元测试和项目上线](./Day41-55/55.单元测试和项目上线.md) + +- Python中的单元测试 +- Django框架对单元测试的支持 +- 使用版本控制系统 +- 配置和使用uWSGI +- 动静分离和Nginx配置 +- 配置HTTPS ### Day56~60 - [实战Flask](./Day56-65) -#### Day56 - [Flask入门](./Day56-60/01.Flask入门.md) +#### Day56 - [Flask入门](./Day56-60/56.Flask入门.md) -#### Day57 - [模板的使用](./Day56-60/02.模板的使用.md) +#### Day57 - [模板的使用](./Day56-60/57.模板的使用.md) -#### Day58 - [表单的处理](./Day56-60/03.表单的处理.md) +#### Day58 - [表单的处理](./Day56-60/58.表单的处理.md) -#### Day59 - [数据库操作](./Day56-60/04.数据库操作.md) +#### Day59 - [数据库操作](./Day56-60/59.数据库操作.md) -#### Day60 - [项目实战](./Day56-60/05.项目实战.md) +#### Day60 - [项目实战](./Day56-60/60.项目实战.md) ### Day61~65 - [实战Tornado](./Day61-65) -#### Day61 - [预备知识](./Day61-65/01.预备知识.md) +#### Day61 - [预备知识](./Day61-65/61.预备知识.md) - 并发编程 - I/O模式和事件驱动 -#### Day62 - [Tornado入门](./Day61-65/02.Tornado入门.md) +#### Day62 - [Tornado入门](./Day61-65/62.Tornado入门.md) - Tornado概述 - 5分钟上手Tornado - 路由解析 - 请求处理器 -#### Day63 - [异步化](./Day61-65/03.异步化.md) +#### Day63 - [异步化](./Day61-65/63.异步化.md) - aiomysql和aioredis的使用 -#### Day64 - [WebSocket的应用](./Day61-65/04.WebSocket的应用.md) +#### Day64 - [WebSocket的应用](./Day61-65/64.WebSocket的应用.md) - WebSocket简介 - WebSocket服务器端编程 - WebSocket客户端编程 - 项目:Web聊天室 -#### Day65 - [项目实战](./Day61-65/05.项目实战.md) +#### Day65 - [项目实战](./Day61-65/65.项目实战.md) - 前后端分离开发和接口文档的撰写 - 使用Vue.js实现前端渲染 @@ -317,61 +364,100 @@ ### Day66~75 - [爬虫开发](./Day66-75) -#### Day66 - [网络爬虫和相关工具](./Day66-75/01.网络爬虫和相关工具.md) +#### Day66 - [网络爬虫和相关工具](./Day66-75/66.网络爬虫和相关工具.md) -#### Day67 - [数据采集和解析](./Day66-75/02.数据采集和解析.md) +- 网络爬虫的概念及其应用领域 +- 网络爬虫的合法性探讨 +- 开发网络爬虫的相关工具 +- 一个爬虫程序的构成 -#### Day68 - [存储数据](./Day66-75/03.存储数据.md) +#### Day67 - [数据采集和解析](./Day66-75/67.数据采集和解析.md) -#### Day69 - [并发下载](./Day66-75/04.并发下载.md) +- 数据采集的标准和三方库 +- 页面解析的三种方式:正则表达式解析 / XPath解析 / CSS选择器解析 -#### Day70 - [解析动态内容](./Day66-75/05.解析动态内容.md) +#### Day68 - [存储数据](./Day66-75/68.存储数据.md) -#### Day71 - [表单交互和验证码处理](./Day66-75/06.表单交互和验证码处理.md) +- 如何存储海量数据 +- 实现数据的缓存 -#### Day72 - [Scrapy入门](./Day66-75/07.Scrapy入门.md) +#### Day69 - [并发下载](./Day66-75/69.并发下载.md) -#### Day73 - [Scrapy高级应用](./Day66-75/08.Scrapy高级应用.md) +- 多线程和多进程 +- 异步I/O和协程 +- async和await关键字的使用 +- 三方库aiohttp的应用 -#### Day74 - [Scrapy分布式实现](./Day66-75/09.Scrapy分布式实现.md) +#### Day70 - [解析动态内容](./Day66-75/70.解析动态内容.md) -#### Day75 - [爬虫项目实战](./Day66-75/10.爬虫项目实战.md) +- JavaScript逆向工程 +- 使用Selenium获取动态内容 + +#### Day71 - [表单交互和验证码处理](./Day66-75/71.表单交互和验证码处理.md) + +- 自动提交表单 +- Cookie池的应用 +- 验证码处理 + +#### Day72 - [Scrapy入门](./Day66-75/72.Scrapy入门.md) + +- Scrapy爬虫框架概述 +- 安装和使用Scrapy + +#### Day73 - [Scrapy高级应用](./Day66-75/73.Scrapy高级应用.md) + +- Spider的用法 +- 中间件的应用:下载中间件 / 蜘蛛中间件 +- Scrapy对接Selenium抓取动态内容 +- Scrapy部署到Docker + +#### Day74 - [Scrapy分布式实现](./Day66-75/74.Scrapy分布式实现.md) + +- 分布式爬虫的原理 +- Scrapy分布式实现 +- 使用Scrapyd实现分布式部署 + +#### Day75 - [爬虫项目实战](./Day66-75/75.爬虫项目实战.md) + +- 爬取招聘网站数据 +- 爬取房地产行业数据 +- 爬取二手车交易平台数据 ### Day76~90 - [数据处理和机器学习](./Day76-90) -#### Day76 - [机器学习基础](./Day76-90/01.机器学习基础.md) +#### Day76 - [机器学习基础](./Day76-90/76.机器学习基础.md) -#### Day77 - [Pandas的应用](./Day76-90/02.Pandas的应用.md) +#### Day77 - [Pandas的应用](./Day76-90/77.Pandas的应用.md) -#### Day78 - [NumPy和SciPy的应用](./Day76-90/03.NumPy和SciPy的应用) +#### Day78 - [NumPy和SciPy的应用](./Day76-90/78.NumPy和SciPy的应用) -#### Day79 - [Matplotlib和数据可视化](./Day76-90/04.Matplotlib和数据可视化) +#### Day79 - [Matplotlib和数据可视化](./Day76-90/79.Matplotlib和数据可视化) -#### Day80 - [k最近邻(KNN)分类](./Day76-90/05.k最近邻分类.md) +#### Day80 - [k最近邻(KNN)分类](./Day76-90/80.k最近邻分类.md) -#### Day81 - [决策树](./Day76-90/06.决策树.md) +#### Day81 - [决策树](./Day76-90/81.决策树.md) -#### Day82 - [贝叶斯分类](./Day76-90/07.贝叶斯分类.md) +#### Day82 - [贝叶斯分类](./Day76-90/82.贝叶斯分类.md) -#### Day83 - [支持向量机(SVM)](./Day76-90/08.支持向量机.md) +#### Day83 - [支持向量机(SVM)](./Day76-90/83.支持向量机.md) -#### Day84 - [K-均值聚类](./Day76-90/09.K-均值聚类.md) +#### Day84 - [K-均值聚类](./Day76-90/84.K-均值聚类.md) -#### Day85 - [回归分析](./Day76-90/10.回归分析.md) +#### Day85 - [回归分析](./Day76-90/85.回归分析.md) -#### Day86 - [大数据分析入门](./Day76-90/11.大数据分析入门.md) +#### Day86 - [大数据分析入门](./Day76-90/86.大数据分析入门.md) -#### Day87 - [大数据分析进阶](./Day76-90/12.大数据分析进阶.md) +#### Day87 - [大数据分析进阶](./Day76-90/87.大数据分析进阶.md) -#### Day88 - [Tensorflow入门](./Day76-90/13.Tensorflow入门.md) +#### Day88 - [Tensorflow入门](./Day76-90/88.Tensorflow入门.md) -#### Day89 - [Tensorflow实战](./Day76-90/14.Tensorflow实战.md) +#### Day89 - [Tensorflow实战](./Day76-90/89.Tensorflow实战.md) -#### Day90 - [推荐系统](./Day76-90/15.推荐系统.md) +#### Day90 - [推荐系统](./Day76-90/90.推荐系统.md) ### Day91~100 - [团队项目开发](./Day91-100) -#### 第91天:团队开发和项目选题 +#### 第91天:[团队项目开发准备](./Day91-100/91.团队项目开发准备.md) 1. 软件过程模型 - 经典过程模型(瀑布模型) @@ -395,15 +481,15 @@ > - **客户合作** 高于 合同谈判 > - **响应变化** 高于 遵循计划 - ![](./res/the-daily-scrum-in-the-sprint-cycle.png) + ![](./res/agile-scrum-sprint-cycle.png) - > 角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员)。 - > - > 准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队。 - > - > 敏捷团队通常人数为8-10人。 - > - > 工作量估算:将开发任务量化,包括原型、Logo设计、UI设计、前端开发等,尽量把每个工作分解到最小任务量,最小任务量标准为工作时间不能超过两天,然后估算总体项目时间。把每个任务都贴在白板上面,白板上分三部分:to do(待完成)、in progress(进行中)和done(已完成)。 + > 角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员)。 + + > 准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队。 + + > 敏捷团队通常人数为8-10人。 + + > 工作量估算:将开发任务量化,包括原型、Logo设计、UI设计、前端开发等,尽量把每个工作分解到最小任务量,最小任务量标准为工作时间不能超过两天,然后估算总体项目时间。把每个任务都贴在白板上面,白板上分三部分:to do(待完成)、in progress(进行中)和done(已完成)。 2. 项目团队组建 @@ -460,7 +546,9 @@ | | 查看评论 | 白元芳 | 正在进行 | 20% | 4 | 2018/8/7 | | 2018/8/7 | | 需要进行代码审查 | | | 评论投票 | 白元芳 | 等待 | 0% | 4 | 2018/8/8 | | 2018/8/8 | | | -#### 第92天:数据库设计和OOAD +#### 第92天:[Docker的使用](./Day91-100/92.Docker在项目中的应用.md) + +#### 第93天:[数据库设计和OOAD](./Day91-100/93.数据库设计和OOAD.md) ##### 概念模型和正向工程 @@ -487,9 +575,9 @@ python manage.py inspectdb > app/models.py ``` -#### 第93-98天:使用Django开发项目 +#### 第94天:[网络API接口设计](./Day91-100/94.网络API接口设计.md) -> 说明:具体内容请参考[《Django知识点概述》](Day91-100/Django知识点概述.md) +#### 第95天:[使用Django开发项目](./Day91-100/95.使用Django开发项目.md) ##### 项目开发中的公共问题 @@ -505,7 +593,7 @@ - [理解RESTful架构](http://www.ruanyifeng.com/blog/2011/09/restful.html) - [RESTful API设计指南](http://www.ruanyifeng.com/blog/2014/05/restful_api.html) - [RESTful API最佳实践](http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html) -2. API接口文档的撰写([《网络API接口设计》](Day91-100/网络API接口设计.md)) +2. API接口文档的撰写 - [RAP2](http://rap2.taobao.org/) - [YAPI](http://yapi.demo.qunar.com/) 3. [django-REST-framework](https://www.django-rest-framework.org/)的应用 @@ -515,7 +603,7 @@ 1. 使用缓存缓解数据库压力 - Redis 2. 使用消息队列做解耦合和削峰 - Celery + RabbitMQ -#### 第99-100天:测试和部署 +#### 第96天:[软件测试和自动化测试](Day91-100/96.软件测试和自动化测试.md) ##### 单元测试 @@ -525,8 +613,6 @@ ##### 项目部署 -> 说明:请参考[《项目部署上线指南》](Day91-100/项目部署上线指南.md)。 - 1. 部署前的准备工作 - 关键设置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 缓存 / 数据库) - HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE @@ -543,8 +629,6 @@ ##### 性能测试 -> 说明:具体内容请参考[《Django知识点概述》](Day91-100/Django知识点概述.md)。 - 1. AB的使用 2. SQLslap的使用 3. sysbench的使用 @@ -558,35 +642,23 @@ - Selenium Remote Control 3. 测试工具Robot Framework介绍 -##### 项目性能调优 +#### 第97天:[电商网站技术要点剖析](./Day91-100/97.电商网站技术要点剖析.md) -1. 数据库性能调优 - 请参考[《MySQL相关知识》](Day91-100/MySQL相关知识.md) - - 软硬件优化 - - - SQL优化 - - - 架构优化 - - - 分表分库 - - - 主从复制,读写分离 - - 集群架构 +#### 第98天:[项目部署上线和性能调优](./Day91-100/98.项目部署上线和性能调优.md) +1. MySQL数据库调优 2. Web服务器性能优化 - - Nginx负载均衡配置 - - Keepalived实现高可用 - 3. 代码性能调优 - - 多线程 - 异步化 - 4. 静态资源访问优化 - - 云存储 - - CDN + - 云存储 + - CDN +#### 第99天:[面试中的公共问题](./Day91-100/99.面试中的公共问题.md) +#### 第100天:[英语面试](./Day91-100/100.英语面试.md) > 致谢:感谢的我的同事古晔、张旭、肖世荣、王海飞、荣佳伟、路丰坤等在技术上给予的指导和帮助。 \ No newline at end of file diff --git a/res/01.django_single_server.png b/res/01.django_single_server.png deleted file mode 100644 index 70d3bf3..0000000 Binary files a/res/01.django_single_server.png and /dev/null differ diff --git a/res/02.django_dedicated_db_server.png b/res/02.django_dedicated_db_server.png deleted file mode 100644 index 143eb6e..0000000 Binary files a/res/02.django_dedicated_db_server.png and /dev/null differ diff --git a/res/03.django_dedicated_static_server.png b/res/03.django_dedicated_static_server.png deleted file mode 100644 index f13a247..0000000 Binary files a/res/03.django_dedicated_static_server.png and /dev/null differ diff --git a/res/04.django_load_balance.png b/res/04.django_load_balance.png deleted file mode 100644 index 16e7515..0000000 Binary files a/res/04.django_load_balance.png and /dev/null differ diff --git a/res/05.django_massive_cluster.png b/res/05.django_massive_cluster.png deleted file mode 100644 index 9163fb2..0000000 Binary files a/res/05.django_massive_cluster.png and /dev/null differ diff --git a/res/Celery_RabitMQ.png b/res/Celery_RabitMQ.png deleted file mode 100644 index 4140130..0000000 Binary files a/res/Celery_RabitMQ.png and /dev/null differ diff --git a/res/Producer-Broker-Consumer-Arrangement.png b/res/Producer-Broker-Consumer-Arrangement.png deleted file mode 100644 index b073a60..0000000 Binary files a/res/Producer-Broker-Consumer-Arrangement.png and /dev/null differ diff --git a/res/abstraction-view.png b/res/abstraction-view.png deleted file mode 100644 index 39ca0a5..0000000 Binary files a/res/abstraction-view.png and /dev/null differ diff --git a/res/the-daily-scrum-in-the-sprint-cycle.png b/res/agile-scrum-sprint-cycle.png similarity index 100% rename from res/the-daily-scrum-in-the-sprint-cycle.png rename to res/agile-scrum-sprint-cycle.png diff --git a/res/algorithm_complexity_1.png b/res/algorithm_complexity_1.png deleted file mode 100644 index 952889d..0000000 Binary files a/res/algorithm_complexity_1.png and /dev/null differ diff --git a/res/algorithm_complexity_2.png b/res/algorithm_complexity_2.png deleted file mode 100644 index 4c14249..0000000 Binary files a/res/algorithm_complexity_2.png and /dev/null differ diff --git a/res/alipay_web_developer.png b/res/alipay_web_developer.png deleted file mode 100644 index 0716552..0000000 Binary files a/res/alipay_web_developer.png and /dev/null differ diff --git a/res/aliyun-certificate.png b/res/aliyun-certificate.png deleted file mode 100644 index c19a30b..0000000 Binary files a/res/aliyun-certificate.png and /dev/null differ diff --git a/res/aliyun-dnslist.png b/res/aliyun-dnslist.png deleted file mode 100644 index e6eda2f..0000000 Binary files a/res/aliyun-dnslist.png and /dev/null differ diff --git a/res/aliyun-domain.png b/res/aliyun-domain.png deleted file mode 100644 index 64a1f48..0000000 Binary files a/res/aliyun-domain.png and /dev/null differ diff --git a/res/aliyun-keeprecord.png b/res/aliyun-keeprecord.png deleted file mode 100644 index d9d39bc..0000000 Binary files a/res/aliyun-keeprecord.png and /dev/null differ diff --git a/res/aliyun-resolve-settings.png b/res/aliyun-resolve-settings.png deleted file mode 100644 index 3f9363a..0000000 Binary files a/res/aliyun-resolve-settings.png and /dev/null differ diff --git a/res/app_folder_arch.png b/res/app_folder_arch.png deleted file mode 100644 index 7d51e95..0000000 Binary files a/res/app_folder_arch.png and /dev/null differ diff --git a/res/builtin-middlewares.png b/res/builtin-middlewares.png deleted file mode 100644 index 59acb4b..0000000 Binary files a/res/builtin-middlewares.png and /dev/null differ diff --git a/res/celery.png b/res/celery.png deleted file mode 100644 index a8d5f7d..0000000 Binary files a/res/celery.png and /dev/null differ diff --git a/res/celery_architecture.png b/res/celery_architecture.png deleted file mode 100644 index d3118a0..0000000 Binary files a/res/celery_architecture.png and /dev/null differ diff --git a/res/class-and-object.png b/res/class-and-object.png deleted file mode 100644 index fa0f995..0000000 Binary files a/res/class-and-object.png and /dev/null differ diff --git a/res/click-jacking.png b/res/click-jacking.png deleted file mode 100644 index 9d92979..0000000 Binary files a/res/click-jacking.png and /dev/null differ diff --git a/res/concurrency.png b/res/concurrency.png deleted file mode 100644 index 3e47d97..0000000 Binary files a/res/concurrency.png and /dev/null differ diff --git a/res/create-new-repo.png b/res/create-new-repo.png new file mode 100644 index 0000000..d2f070f Binary files /dev/null and b/res/create-new-repo.png differ diff --git a/res/deployment_pipelines.png b/res/deployment_pipelines.png deleted file mode 100644 index 6db6c2d..0000000 Binary files a/res/deployment_pipelines.png and /dev/null differ diff --git a/res/django-middleware.png b/res/django-middleware.png deleted file mode 100644 index 9885582..0000000 Binary files a/res/django-middleware.png and /dev/null differ diff --git a/res/django-mtv.png b/res/django-mtv.png deleted file mode 100644 index 76f330e..0000000 Binary files a/res/django-mtv.png and /dev/null differ diff --git a/res/django_request_response_cycle.png b/res/django_request_response_cycle.png deleted file mode 100644 index 3423c9a..0000000 Binary files a/res/django_request_response_cycle.png and /dev/null differ diff --git a/res/dns-configuration.png b/res/dns-configuration.png new file mode 100644 index 0000000..eaa8ec3 Binary files /dev/null and b/res/dns-configuration.png differ diff --git a/res/docker_logo.png b/res/docker_logo.png deleted file mode 100644 index 19ff797..0000000 Binary files a/res/docker_logo.png and /dev/null differ diff --git a/res/docker_vs_vm.png b/res/docker_vs_vm.png deleted file mode 100644 index 0eb6fea..0000000 Binary files a/res/docker_vs_vm.png and /dev/null differ diff --git a/res/donation.png b/res/donation.png new file mode 100644 index 0000000..9c76603 Binary files /dev/null and b/res/donation.png differ diff --git a/res/encapsulation.png b/res/encapsulation.png deleted file mode 100644 index 437df0a..0000000 Binary files a/res/encapsulation.png and /dev/null differ diff --git a/res/er-graph.png b/res/er-graph.png deleted file mode 100644 index c8415be..0000000 Binary files a/res/er-graph.png and /dev/null differ diff --git a/res/git_logo.png b/res/git_logo.png deleted file mode 100644 index 04b0f00..0000000 Binary files a/res/git_logo.png and /dev/null differ diff --git a/res/git_repository.png b/res/git_repository.png deleted file mode 100644 index d85bdbd..0000000 Binary files a/res/git_repository.png and /dev/null differ diff --git a/res/gitignore_io.png b/res/gitignore_io.png deleted file mode 100644 index a305da6..0000000 Binary files a/res/gitignore_io.png and /dev/null differ diff --git a/res/greedy.png b/res/greedy.png deleted file mode 100644 index 376ceef..0000000 Binary files a/res/greedy.png and /dev/null differ diff --git a/res/hexo-default-index.png b/res/hexo-default-index.png new file mode 100644 index 0000000..51c4ae8 Binary files /dev/null and b/res/hexo-default-index.png differ diff --git a/res/http-request.png b/res/http-request.png deleted file mode 100644 index aca9287..0000000 Binary files a/res/http-request.png and /dev/null differ diff --git a/res/http-response.png b/res/http-response.png deleted file mode 100644 index f2b8ae3..0000000 Binary files a/res/http-response.png and /dev/null differ diff --git a/res/jenkins_new_project.png b/res/jenkins_new_project.png deleted file mode 100644 index 8019ada..0000000 Binary files a/res/jenkins_new_project.png and /dev/null differ diff --git a/res/modularity.png b/res/modularity.png deleted file mode 100644 index 25a6696..0000000 Binary files a/res/modularity.png and /dev/null differ diff --git a/res/multi-inheritance.png b/res/multi-inheritance.png deleted file mode 100644 index c2ae49b..0000000 Binary files a/res/multi-inheritance.png and /dev/null differ diff --git a/res/mvc.png b/res/mvc.png deleted file mode 100644 index 7ba14ba..0000000 Binary files a/res/mvc.png and /dev/null differ diff --git a/res/oauth2.png b/res/oauth2.png deleted file mode 100644 index 7a07bd3..0000000 Binary files a/res/oauth2.png and /dev/null differ diff --git a/res/object-roles.png b/res/object-roles.png deleted file mode 100644 index 41174cd..0000000 Binary files a/res/object-roles.png and /dev/null differ diff --git a/res/objects-collaborate.png b/res/objects-collaborate.png deleted file mode 100644 index bae06e8..0000000 Binary files a/res/objects-collaborate.png and /dev/null differ diff --git a/res/objects-lifetime.png b/res/objects-lifetime.png deleted file mode 100644 index 54207bb..0000000 Binary files a/res/objects-lifetime.png and /dev/null differ diff --git a/res/python-cd-salary.png b/res/python-cd-salary.png deleted file mode 100644 index f728255..0000000 Binary files a/res/python-cd-salary.png and /dev/null differ diff --git a/res/python-salary-hangzhou.png b/res/python-salary-hangzhou.png deleted file mode 100644 index fc901aa..0000000 Binary files a/res/python-salary-hangzhou.png and /dev/null differ diff --git a/res/python-salary-shanghai.png b/res/python-salary-shanghai.png deleted file mode 100644 index 9402051..0000000 Binary files a/res/python-salary-shanghai.png and /dev/null differ diff --git a/res/python-salary-shenzhen.png b/res/python-salary-shenzhen.png deleted file mode 100644 index 07b6f20..0000000 Binary files a/res/python-salary-shenzhen.png and /dev/null differ diff --git a/res/python-str-join.png b/res/python-str-join.png deleted file mode 100644 index b784ffb..0000000 Binary files a/res/python-str-join.png and /dev/null differ diff --git a/res/python_qq_group.png b/res/python_qq_group.png new file mode 100644 index 0000000..b496ccb Binary files /dev/null and b/res/python_qq_group.png differ diff --git a/res/python_salary_guangzhou.png b/res/python_salary_guangzhou.png deleted file mode 100644 index e7567e3..0000000 Binary files a/res/python_salary_guangzhou.png and /dev/null differ diff --git a/res/redmine_new_issue.png b/res/redmine_new_issue.png deleted file mode 100644 index 63971fc..0000000 Binary files a/res/redmine_new_issue.png and /dev/null differ diff --git a/res/selenium-ide.png b/res/selenium-ide.png deleted file mode 100644 index 52a4a4f..0000000 Binary files a/res/selenium-ide.png and /dev/null differ diff --git a/res/selenium_ide.png b/res/selenium_ide.png deleted file mode 100644 index 4d2f275..0000000 Binary files a/res/selenium_ide.png and /dev/null differ diff --git a/res/uml-graph.png b/res/uml-graph.png deleted file mode 100644 index def109b..0000000 Binary files a/res/uml-graph.png and /dev/null differ diff --git a/res/uml.png b/res/uml.png deleted file mode 100644 index 98168cb..0000000 Binary files a/res/uml.png and /dev/null differ diff --git a/res/wanwang.png b/res/wanwang.png new file mode 100644 index 0000000..59d988d Binary files /dev/null and b/res/wanwang.png differ diff --git a/res/web-application.png b/res/web-application.png deleted file mode 100644 index 89d2dec..0000000 Binary files a/res/web-application.png and /dev/null differ diff --git a/res/web-queue-worker-physical.png b/res/web-queue-worker-physical.png deleted file mode 100644 index 81da48d..0000000 Binary files a/res/web-queue-worker-physical.png and /dev/null differ diff --git a/使用Hexo搭建自己的博客.md b/使用Hexo搭建自己的博客.md new file mode 100644 index 0000000..efc94a2 --- /dev/null +++ b/使用Hexo搭建自己的博客.md @@ -0,0 +1,356 @@ +## 使用Hexo搭建自己的博客 + +对于一个程序员来说,搭建一个属于自己的博客平台是非常有意义的事情。首先,博客可以记录自己的成长历程,也是对自己一段时间学习和工作的总结和沉淀;其他,通过博客可以营销自己,增强自己在互联网或行业内的影响力,为将来更好的职业生涯打一个坚实的基础。前几年有一本名为《软技能 - 代码之外的生存指南》的畅销书,我记得书中有这么一段话:“流行乐队的音乐才华可能并不比夜店驻场乐队高多少,他们为什么就可以在全世界巡回演出,创造一个又一个白金记录?……你的营销做得越好,你的才华才能表现得淋漓尽致。” + +这里顺便啰嗦两句,在互联网如此发达的今天,我们应该如何营销自己呢?自我营销首先要从打造个人品牌做起,对于程序员来说,最容易去做好的一件事情还是搭建自己的博客。博客相当于是你在互联网上的一个基地,尤其是当你拥有了属于自己的独立博客后,你可以做很多自己想做的事情,既可以传达自己的思想,又可以提升自己的影响力,当然如果你的博客经营得非常好,你可以从中获利。当然,除了博客,直播、视频网站、投稿、写书、技术活动都是可选的自我营销方式。当然,做自我营销也需要持之以恒,三天打鱼两天晒网是很难有什么收获的。 + +### Hexo概述 + +Hexo是一个快速、简洁且高效的博客框架,它能够将[Markdown格式]()的文档渲染成漂亮的网页,这样我们就可以在很短的时间内迅速的创建出网站的静态内容,而Markdown格式对程序员来说相信并不陌生。要想使用Hexo来搭建自己的博客,我实在想不出有什么教程比[官方文档]()更好,强烈建议大家阅读官方文档来了解Hexo,下面我只做一个简要的使用说明。 + +> 说明:**Markdown**是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,同时也对图片、图表、数学公式提供了支持,可以用来书写电子书、软件文档等,同时也可以非常方便的转换为HTML页面或者是PDF文档。 + +要使用Hexo,首先得确保计算机上已经安装了[node.js]()环境和[git]()环境,前者是一个能够在服务器端运行JavaScript代码的环境,后者是版本控制工具。如果没有安装node.js和git的经验,建议参考官方文档上的讲解或者是我写的[《Git上手指南》](./Git上手指南.md),安装完成后,我们可以通过下面的命令来确认node.js环境以及它的包管理工具是否安装成功。 + +```Shell +node --version +npm --version +``` + +可以通过下面的命令来检查是否安装了git环境。 + +```Shell +git --version +``` + +我们可以使用npm来安装Hexo,npm是node.js的包管理工具,跟Python的pip工具作用一样,可以用它来安装依赖库和三方工具。在第一次使用npm的时候,我们可以先将npm的下载源更换为国内的淘宝镜像,这样下载的速度会有非常显著的提升。 + +```Shell +npm config set registry https://registry.npm.taobao.org +``` + +接下来我们就通过npm来安装Hexo,命令如下所示。 + +```Shell +npm install -g hexo-cli +``` + +安装成功后,就可以使用Hexo来创建属于自己的博客啦。 + +### 搭建博客 + +> 说明:以下内容基本上来自于Hexo的官方文档,推荐大家阅读官方文档。 + +我们先通过下面的命令来创建一个专门保存博客项目的文件夹,该命令会从github上克隆博客项目和默认的主题。 + +```Shell +hexo init blog +``` + +接下来我们进入这个文件夹并查看目录结构。 + +```Shell +cd blog +ls -lR +``` + +``` +total 232 +-rw-r--r-- 1 Hao staff 1768 8 8 01:15 _config.yml +drwxr-xr-x 274 Hao staff 8768 8 8 01:19 node_modules +-rw-r--r-- 1 Hao staff 109972 8 8 01:19 package-lock.json +-rw-r--r-- 1 Hao staff 443 8 8 01:15 package.json +drwxr-xr-x 5 Hao staff 160 8 8 01:15 scaffolds +drwxr-xr-x 3 Hao staff 96 8 8 01:15 source +drwxr-xr-x 3 Hao staff 96 8 8 01:15 themes +``` + +> 说明:Windows环境命令行提示符中可以使用dir命令查看目录结构。需要说明的是:`_config.yml`是博客项目的配置文件;`package.json`是项目的依赖项文件;`scaffolds`保存了Markdown文件的模板,也就是向新添加的Markdown文件中默认填充的内容;`source`目录下有一个名为`_post`的目录,我们稍后可以将编写好的Markdown文件放到该目录,这样就可以利用Hexo将Markdown文件处理成博客的静态页面,生成的静态页面将置于`public`目录下;`themes`文件夹保存了博客使用的主题。 + +然后我们通过下面的命令来安装项目所需的依赖项(`package.json`文件指明了这些依赖项)。 + +```Shell +npm install +``` + +做完上述的操作以后,我们已经可以直接通过下面的命令来生成博客。 + +```Shell +hexo generate +``` + +该命令也可以缩写为: + +```Shell +hexo g +``` + +之前我们在安装依赖项的时候包括了一个名为`hexo-server`的依赖项,该依赖项可以帮助我们启动一个基于node.js的服务器来运行我们的博客项目,使用下面的命令即可启动服务器。 + +```Shell +hexo server +``` + +该命令也可以缩写为: + +```Shell +hexo s +``` + +``` +INFO Start processing +INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop. +``` + +从运行命令的提示信息可以看到,服务器已经运转起并使用了4000端口,可以通过`Ctrl+C`来终止服务器的运行。如果要修改服务器使用的端口,可以在启动服务器的时候加上`-p`参数;如果希望服务器启动后,自动打开默认的浏览器访问服务器,可以使用`-o`参数,如下所示。 + +```Shell +hexo s -p 8000 -o +``` + +至此,我们已经可以看到Hexo在没有配置也没有加入自己的Markdown文件下生成的首页,如下图所示。 + +![](./res/hexo-default-index.png) + +接下来我们修改博客的配置文件。 + +```Shell +vim _config.yml +``` + +```YAML +# Hexo Configuration +## Docs: https://hexo.io/docs/configuration.html +## Source: https://github.com/hexojs/hexo/ + +# Site +title: 骆昊的技术专栏 +subtitle: 传道、授业、解惑,分享知识带来的快乐 +description: +keywords: +author: 骆昊 +language: zh +timezone: + +# URL +## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' +url: http://jackfrued.top +root: / +permalink: :year/:month/:day/:title/ +permalink_defaults: + +# Directory +source_dir: source +public_dir: public +tag_dir: tags +archive_dir: archives +category_dir: categories +code_dir: downloads/code +i18n_dir: :lang +skip_render: + +# Writing +new_post_name: :title.md # File name of new posts +default_layout: post +titlecase: false # Transform title into titlecase +external_link: true # Open external links in new tab +filename_case: 0 +render_drafts: false +post_asset_folder: false +relative_link: false +future: true +highlight: + enable: true + line_number: true + auto_detect: false + tab_replace: + +# Home page setting +# path: Root path for your blogs index page. (default = '') +# per_page: Posts displayed per page. (0 = disable pagination) +# order_by: Posts order. (Order by date descending by default) +index_generator: + path: '' + per_page: 10 + order_by: -date + +# Category & Tag +default_category: uncategorized +category_map: +tag_map: + +# Date / Time format +## Hexo uses Moment.js to parse and display date +## You can customize the date format as defined in +## http://momentjs.com/docs/#/displaying/format/ +date_format: YYYY-MM-DD +time_format: HH:mm:ss + +# Pagination +## Set per_page to 0 to disable pagination +per_page: 10 +pagination_dir: page + +# Extensions +## Plugins: https://hexo.io/plugins/ +## Themes: https://hexo.io/themes/ +theme: landscape + +# Deployment +## Docs: https://hexo.io/docs/deployment.html +deploy: + type: +``` + +下面是YAML文件中相关选项的说明。 + +| 参数 | 描述 | +| ------------------ | ------------------------------------------------------------ | +| `title` | 网站的标题 | +| `subtitle` | 网站的副标题 | +| `description` | 网站的描述 | +| `keywords` | 网站的关键词,可以用逗号分隔多个关键词 | +| `author` | 自己的名字 | +| `language` | 网站使用的语言 | +| `timezone` | 网站使用时区,默认使用电脑上设置的时区 | +| `url` | 网址 | +| `root` | 网站根目录 | +| `source_dir` | 资源文件夹,这个文件夹用来存放内容,默认source目录 | +| `public_dir` | 公共文件夹,这个文件夹用于存放生成的站点文件,默认public目录 | +| `tag_dir` | 标签文件夹,默认tags目录 | +| `archive_dir` | 归档文件夹,默认archives目录 | +| `category_dir` | 分类文件夹,默认categories目录 | +| `auto_spacing` | 在中文和英文之间加入空格,默认false | +| `titlecase` | 把标题转换为首字母大写,默认false | +| `external_link` | 在新标签中打开链接,默认true | +| `relative_link` | 把链接改为与根目录的相对位址,默认false | +| `default_category` | 默认分类 | +| `date_format` | 日期格式,默认YYYY-MM-DD | +| `time_format` | 时间格式,默认HH:mm:ss | +| `per_page` | 每页显示的文章数量 ,默认值10,0表示不使用分页 | +| `pagination_dir` | 分页目录,默认为page目录 | +| `theme` | 当前主题名称 | +| `deploy` | 部署部分的设置 | + +我们将编写好的Markdown文件可以拷贝到`source/_posts`目录,我们可以在每个Markdown文件的上方添加Front-matter来对文件的布局、标题、分类、标签、发布日期等信息加以说明。所谓Front-matter,就是每个Markdown文件最上方以`---`分隔的区域,可以在Front-matter中设置以下内容。 + +| 参数 | 描述 | 默认值 | +| ------------ | -------------------- | ------------ | +| `layout` | 布局 | | +| `title` | 标题 | | +| `date` | 建立日期 | 文件建立日期 | +| `updated` | 更新日期 | 文件更新日期 | +| `comments` | 开启文章的评论功能 | true | +| `tags` | 标签(不适用于分页) | | +| `categories` | 分类(不适用于分页) | | +| `permalink` | 覆盖文章网址 | | + +例如: + +```Markdown +--- +title: Python编程惯例 +category: Python基础 +date: 2019-8-1 +--- +## Python惯例 + +“惯例”这个词指的是“习惯的做法,常规的办法,一贯的做法”,与这个词对应的英文单词叫“idiom”。由于Python跟其他很多编程语言在语法和使用上还是有比较显著的差别,因此作为一个Python开发者如果不能掌握这些惯例,就无法写出“Pythonic”的代码。下面我们总结了一些在Python开发中的惯用的代码。 + +1. 让代码既可以被导入又可以被执行。 + + ```Python + if __name__ == '__main__': + ``` + + +2. 用下面的方式判断逻辑“真”或“假”。 + + ```Python + if x: + if not x: + ``` +``` + +在完成上述工作后,我们可以通过下面的命令先清理之前生成的内容。 + +```Shell +hexo clean +``` + +接下来我们就可以用之前讲过的命令重新生成并运行博客项目。 + +```Shell +hexo generate +hexo server -p 8000 -o +``` + +### 将博客托管到GitHub + +我们可以利用GitHub网站提供的[Pages服务]()来托管我们的博客。在GitHub Pages的首页上就有一个教程指导我们如何托管自己的网站,当然第一步得在GitHub上注册一个属于自己的账号,登录成功之后才能进行后续的操作。 + +1. 根据自己的用户名创建一个仓库,仓库**一定**要取名为“用户名.github.io”。例如:我在GitHub上的用户名是jackfrued,那么我的托管博客项目的仓库一定要命名为jackfrued.github.io。 + + ![](./res/create-new-repo.png) + +2. 修改博客项目的配置文件`_config.yml`,配置使用GitHub来部署该博客项目。 + + ```Shell + vim _config.yml + ``` + + ```YAML + # 省略上面的内容 + # Deployment + ## Docs: https://hexo.io/docs/deployment.html + deploy: + type: git + repo: https://github.com/jackfrued/jackfrued.github.io.git + branch: master + ``` + + 上面的配置中,type指定了使用git进行项目部署,repo指定了部署项目的git仓库的URL,我们这里使用的是HTTPS的地址,如果之前配置过密钥对也可以使用SSH的地址,branch指定了将代码同步到仓库中的哪一个分支,通常master分支就是发布项目最终工作成果的分支,也称为项目的主分支。 + +3. 安装名为`hexo-deployer-git`的部署器插件,通过该插件就能实现一键部署。 + + ```Shell + npm install hexo-deployer-git --save + ``` + +4. 可以使用下面的命令来实现一键部署到GitHub。 + + ```Shell + hexo deploy -g + ``` + + 或者 + + ```Shell + hexo generate -d + ``` + +5. 接下来在浏览器中输入[jackfrued.github.io](https://jackfrued.github.io)就能够看到自己的博客,现在全世界的人都可以通过这个URL来访问你的博客。大家是否注意到,访问你博客的这个URL就是刚才我们给仓库起的名字,因为你在GitHub上注册的用户名是独一无二的,所以这个域名也是全世界独一无二的。 + +### 将博客绑定到自己的域名 + +虽然我们已经通过GitHub提供的域名访问到了自己的博客,但是如果我们不愿意“寄人篱下”,我们在利用GitHub Pages提供的托管服务同时,也可以将博客绑定到自己专属的域名。如果暂时还没有购买域名,我们可以在提供域名购买服务的网站(如:[万网]()、[GoDaddy]())上进行购买。 + +![](./res/wanwang.png) + +> 说明:目前国内对域名的管理日趋严格,在购买域名时需要填写一大堆的个人信息,进行实名认证后才能获得域名,这一点相信大家能够理解。 + +比如说,我现在已经购买了一个名为“jackfrued.top”的域名,如何让它跟“jackfrued.github.io”这个域名做一个绑定呢,我们可以利用[阿里云控制台]()或者[DNSPod]()来做一个域名解析服务。在域名解析平台登录成功后,可以添加或选择自己的域名来配置域名解析。点击“添加记录”按钮,创建一个类型为CNAME的域名解析,CNAME类型的解析代表将一个域名解析到另一个域名,如下图所示。 + +![](./res/dns-configuration.png) + +完成这一步后,还不能马上通过自己的域名访问到博客项目,最后需要在博客项目的`source`目录下添加一个名为CNAME的文件(注意大小写哟),其内容如下所示。 + +```Shell +vim CNAME +``` + +``` +jackfrued.top +``` + +可以清理一下之前生成的内容,然后将项目重新生成并发布到GitHub,就大功告成了!希望大家在拥有自己的博客后可以利用它做些有意义的事情,加油吧! \ No newline at end of file diff --git a/公开课/文档/第04次公开课-好玩的Python/code/example01.py b/公开课/文档/第04次公开课-好玩的Python/code/example01.py new file mode 100644 index 0000000..73a6585 --- /dev/null +++ b/公开课/文档/第04次公开课-好玩的Python/code/example01.py @@ -0,0 +1,11 @@ +from PIL import Image, ImageFilter + + +chiling = Image.open('resources/chiling.jpg') +width, height = chiling.size +chiling.show() +chiling.transpose(Image.FLIP_LEFT_RIGHT).show() +chiling.filter(ImageFilter.GaussianBlur(4)).show() +chiling.filter(ImageFilter.EMBOSS).show() +chiling.thumbnail((width // 4, height // 4)) +chiling.show() diff --git a/公开课/文档/第04次公开课-好玩的Python/code/resources/chiling.jpg b/公开课/文档/第04次公开课-好玩的Python/code/resources/chiling.jpg new file mode 100644 index 0000000..dafd1f4 Binary files /dev/null and b/公开课/文档/第04次公开课-好玩的Python/code/resources/chiling.jpg differ diff --git a/公开课/文档/第04次公开课-好玩的Python/code/resources/frame.jpg b/公开课/文档/第04次公开课-好玩的Python/code/resources/frame.jpg new file mode 100644 index 0000000..6a8a808 Binary files /dev/null and b/公开课/文档/第04次公开课-好玩的Python/code/resources/frame.jpg differ diff --git a/公开课/文档/第04次公开课-好玩的Python/res/requests.png b/公开课/文档/第04次公开课-好玩的Python/res/requests.png new file mode 100644 index 0000000..585f41e Binary files /dev/null and b/公开课/文档/第04次公开课-好玩的Python/res/requests.png differ diff --git a/公开课/文档/第04次公开课-好玩的Python/好玩的Python.md b/公开课/文档/第04次公开课-好玩的Python/好玩的Python.md new file mode 100644 index 0000000..1c73f9c --- /dev/null +++ b/公开课/文档/第04次公开课-好玩的Python/好玩的Python.md @@ -0,0 +1,229 @@ +## 好玩的Python + +因为下面的代码都非常简单,简单到直接使用Python的交互式环境就能完成。当然,官方Python自带的交互式环境比较难用,推荐大家使用ipython,可以使用下面的命令来安装ipython,安装成功后键入ipython命令就能进入交互式环境。 + +```Shell +pip install ipython +``` + +或 + +```Shell +pip3 install ipython +``` + +ipython最直观的优点: + +1. 可以用?或者??来获取帮助。 +2. 可以用!调用系统命令。 +3. 可以使用Tab键自动补全。 +4. 可以使用魔法指令,如:%timeit。 + +### 没有工具用代码也能P图 + +1. 安装pillow三方库。 + + PIL(Python Imaging Library)是Python平台事实上的图像处理标准库了。PIL功能非常强大,而API却非常简单易用。但是PIL仅支持到Python 2.7,而且很多年都没有人维护了,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫[Pillow](https://github.com/python-pillow/Pillow),除了支持Python 3.x还加入了很多有用且有趣的新特性。 + + ```Shell + pip install pillow + ``` + + 或 + + ```Shell + pip3 install pillow + ``` + +2. 加载图片。 + + ```Python + from PIL import Image + + chiling = Image.open('chiling.jpg') + chiling.show() + ``` + +3. 使用滤镜。 + + ```Shell + from PIL import ImageFilter + + chiling.filter(ImageFilter.EMBOSS).show() + chiling.filter(ImageFilter.CONTOUR).show() + ``` + +4. 图像剪裁和粘贴。 + + ```Python + rect = 220, 690, 265, 740 + watch = chiling.crop(rect) + watch.show() + blured_watch = watch.filter(ImageFilter.GaussianBlur(4)) + chiling.paste(blured_watch, (220, 690)) + chiling.show() + ``` + +5. 生成镜像。 + + ```Python + chiling2 = chiling.transpose(Image.FLIP_LEFT_RIGHT) + chiling2.show() + ``` + +6. 生成缩略图。 + + ```Python + width, height = chiling.size + width, height = int(width * 0.4), int(height * 0.4) + chiling.thumbnail((width, height)) + ``` + +7. 合成图片。 + + ```Python + frame = Image.open('frame.jpg') + frame.show() + frame.paste(chiling, (210, 150)) + frame.paste(chiling2, (522, 150)) + frame.show() + ``` + +上面的知识在[Python-100-Days](https://github.com/jackfrued/Python-100-Days)项目的[第15天]()中也有对应的内容。 + +### 向微信好友群发祝福视频 + +1. 安装itchat三方库。 + + [itchat]()是一个开源的微信个人号接口,使用Python调用微信从未如此简单。 + + ```Shell + pip install itchat + ``` + + 或 + + ```Shell + pip3 install itchat + ``` + +2. 登录微信。 + + ```Python + import itchat + + itchat.auto_login() + ``` + + > 说明:用自己的微信扫描屏幕上出现的二维码就完成了登录操作,登录之后才能获取自己的好友信息以及发送消息给自己的好友。 + +3. 查找自己的朋友。 + + ```Python + friends_list = itchat.get_friends(update=True) + print(len(friends_list)) + luohao = friends_list[0] + props = ['NickName', 'Signature', 'Sex'] + for prop in props: + print(luohao[prop]) + ``` + + > 说明:friends_list相当于是一个列表,列表中的第一个元素是自己。 + +4. 随机选出5个朋友,获得他们的用户名、昵称、签名。 + + ```Python + lucky_friends = random.sample(friends_list[1:], 5) + props = ['NickName', 'Signature', 'City'] + for friend in lucky_friends: + for prop in props: + print(friend[prop] or '没有此项信息') + print('-' * 80) + ``` + +5. 给朋友发送文字消息。 + + ```Python + itchat.send_msg('急需一个红包来拯救堕落的灵魂!!!', toUserName='@8e06606db03f0e28d0ff884083f727e6') + ``` + +6. 群发视频给幸运的朋友们。 + + ```Python + lucky_friends = random.sample(friends_list[1:], 5) + for friend in lucky_friends: + username = friend['UserName'] + itchat.send_video('/Users/Hao/Desktop/my_test_video.mp4', toUserName=username) + ``` + +利用itchat还能做很多事情,比如有好友给自己发了消息又撤回了,如果想查看这些被撤回的消息,itchat就可以做到(注册一个接收消息的钩子函数,请参考[CSDN上的一篇文章]());再比如,有时候我们想知道某个好友有没有把我们删除或者拉入黑名单,也可以利用itchat封装的群聊功能,非好友和黑名单用户不会被拉入群聊,通过创建群聊函数的返回值就可以判定你和指定的人之间的关系。 + +### 不用客户端查看热点新闻 + +1. 安装requests库。(点击常看[官方文档]()) + + ![](./res/requests.png) + + ```Shell + pip install requests + ``` + + 或 + + ```Shell + pip3 install requests + ``` + +2. 爬取新闻数据或者通过API接口获取新闻数据。 + + ```Python + import requests + + resp = requests.get('http://api.tianapi.com/allnews/?key=请使用自己申请的Key&col=7&num=50') + ``` + + > 说明:上面使用了天行数据提供的数据接口,需要的话可以自行去[天行数据]()的网站注册开通,调用接口的时候要填写注册成功后系统分配给你的key。 + +3. 使用反序列化将JSON字符串解析为字典并获取新闻列表。 + + ```Python + import json + + newslist = json.loads(resp.text)['newslist'] + ``` + +4. 对新闻列表进行循环遍历,找到感兴趣的新闻,例如:华为。 + + ```Python + for news in newslist: + title = news['title'] + url = news['url'] + if '华为' in title: + print(title) + print(url) + ``` + +5. 调用短信网关发送短信到手机上,告知关注的新闻标题并给出链接。 + + ```Python + import re + + pattern = re.compile(r'https*:\/\/[^\/]*\/(?P.*)') + matcher = pattern.match(url) + + if matcher: + url = matcher.group('url') + resp = requests.post( + url='http://sms-api.luosimao.com/v1/send.json', + auth=('api', 'key-请使用你自己申请的Key'), + data={ + 'mobile': '13548041193', + 'message': f'发现一条您可能感兴趣的新闻 - {title},详情点击https://news.china.com/{url} 查看。【Python小课】' + }, + timeout=10, + verify=False + ) + ``` + + > 说明:上面的代码使用了[螺丝帽]()提供的短信网关服务,利用短信网关发送短信是需要支付费用的,但是一般的平台都会提供若干条免费的测试短信。发送短信必须遵守平台的规则,违规的短信是无法发送的。上面发短信时使用的短信模板(“发现一条您可能感兴趣的新闻 - ###,详情点击https://news.china.com/### 查看。”)和短信签名(“【Python小课】”)需要登录螺丝帽管理平台进行配置,如果不清楚如何配置,可以联系平台的客服人员进行咨询。 + diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/Python_Tricks_encrypted.pdf b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/Python_Tricks_encrypted.pdf new file mode 100644 index 0000000..40a97fa --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/Python_Tricks_encrypted.pdf @@ -0,0 +1,19809 @@ +%PDF-1.3 +1 0 obj +<< +/Type /Pages +/Count 299 +/Kids [ 3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R ] +>> +endobj +2 0 obj +<< +/Producer <027d09630fed> +>> +endobj +3 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /ImageC ] +/ExtGState 304 0 R +/XObject 306 0 R +>> +/Contents 312 0 R +/CropBox [ 0 0 432 648 ] +/ArtBox [ 0 0 432 648 ] +>> +endobj +4 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 313 0 R +/Font 314 0 R +>> +/Contents 322 0 R +>> +endobj +5 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 323 0 R +/Font 324 0 R +>> +/Annots [ 325 0 R 326 0 R 327 0 R 328 0 R ] +/Contents 329 0 R +>> +endobj +6 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 330 0 R +/Font 331 0 R +>> +/Contents 353 0 R +>> +endobj +7 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 354 0 R +/Font 355 0 R +>> +/Contents 356 0 R +>> +endobj +8 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 357 0 R +/Font 358 0 R +>> +/Contents 359 0 R +>> +endobj +9 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 360 0 R +/Font 361 0 R +>> +/Annots [ 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R ] +/Contents 389 0 R +>> +endobj +10 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 390 0 R +/Font 391 0 R +>> +/Annots [ 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R ] +/Contents 424 0 R +>> +endobj +11 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 425 0 R +/Font 426 0 R +>> +/Annots [ 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R ] +/Contents 434 0 R +>> +endobj +12 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 435 0 R +/Font 436 0 R +>> +/Contents 437 0 R +>> +endobj +13 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 438 0 R +/Font 439 0 R +>> +/Annots [ 440 0 R ] +/Contents 441 0 R +>> +endobj +14 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 442 0 R +/Font 443 0 R +>> +/Contents 444 0 R +>> +endobj +15 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 445 0 R +/Font 446 0 R +>> +/Annots [ 447 0 R ] +/Contents 448 0 R +>> +endobj +16 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 449 0 R +/Font 450 0 R +>> +/Contents 451 0 R +>> +endobj +17 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 452 0 R +/Font 453 0 R +>> +/Contents 454 0 R +>> +endobj +18 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 455 0 R +/Font 456 0 R +>> +/Contents 457 0 R +>> +endobj +19 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 458 0 R +/Font 459 0 R +>> +/Contents 467 0 R +>> +endobj +20 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 468 0 R +/Font 469 0 R +>> +/Contents 477 0 R +>> +endobj +21 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 478 0 R +/Font 479 0 R +>> +/Contents 480 0 R +>> +endobj +22 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 481 0 R +/Font 482 0 R +>> +/Annots [ 483 0 R 484 0 R ] +/Contents 485 0 R +>> +endobj +23 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 486 0 R +/Font 487 0 R +>> +/Annots [ 488 0 R 489 0 R 490 0 R 491 0 R ] +/Contents 492 0 R +>> +endobj +24 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 493 0 R +/Font 494 0 R +>> +/Contents 495 0 R +>> +endobj +25 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 496 0 R +/Font 497 0 R +>> +/Contents 498 0 R +>> +endobj +26 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 499 0 R +/Font 500 0 R +>> +/Annots [ 501 0 R 502 0 R ] +/Contents 503 0 R +>> +endobj +27 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 504 0 R +/Font 505 0 R +>> +/Contents 506 0 R +>> +endobj +28 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 507 0 R +/Font 508 0 R +>> +/Contents 509 0 R +>> +endobj +29 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 510 0 R +/Font 511 0 R +>> +/Annots [ 512 0 R 513 0 R ] +/Contents 514 0 R +>> +endobj +30 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 515 0 R +/Font 516 0 R +>> +/Contents 517 0 R +>> +endobj +31 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 518 0 R +/Font 519 0 R +>> +/Contents 520 0 R +>> +endobj +32 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 521 0 R +/Font 522 0 R +>> +/Contents 523 0 R +>> +endobj +33 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 524 0 R +/Font 525 0 R +>> +/Contents 526 0 R +>> +endobj +34 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 527 0 R +/Font 528 0 R +>> +/Annots [ 529 0 R 530 0 R ] +/Contents 531 0 R +>> +endobj +35 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 532 0 R +/Font 533 0 R +>> +/Annots [ 534 0 R 535 0 R ] +/Contents 536 0 R +>> +endobj +36 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 537 0 R +/Font 538 0 R +>> +/Annots [ 539 0 R 540 0 R ] +/Contents 541 0 R +>> +endobj +37 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 542 0 R +/Font 543 0 R +>> +/Contents 544 0 R +>> +endobj +38 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 545 0 R +/Font 546 0 R +>> +/Contents 547 0 R +>> +endobj +39 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 548 0 R +/Font 549 0 R +>> +/Annots [ 550 0 R 551 0 R ] +/Contents 552 0 R +>> +endobj +40 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 553 0 R +/Font 554 0 R +>> +/Contents 555 0 R +>> +endobj +41 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 556 0 R +/Font 557 0 R +>> +/Annots [ 558 0 R 559 0 R 560 0 R 561 0 R ] +/Contents 562 0 R +>> +endobj +42 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 563 0 R +/Font 564 0 R +>> +/Contents 565 0 R +>> +endobj +43 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 566 0 R +/Font 567 0 R +>> +/Contents 568 0 R +>> +endobj +44 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 569 0 R +/Font 570 0 R +>> +/Contents 571 0 R +>> +endobj +45 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 572 0 R +/Font 573 0 R +>> +/Contents 574 0 R +>> +endobj +46 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 575 0 R +/Font 576 0 R +>> +/Contents 577 0 R +>> +endobj +47 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 578 0 R +/Font 579 0 R +>> +/Contents 580 0 R +>> +endobj +48 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 581 0 R +/Font 582 0 R +>> +/Contents 583 0 R +>> +endobj +49 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 584 0 R +/Font 585 0 R +>> +/Contents 586 0 R +>> +endobj +50 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 587 0 R +/Font 588 0 R +>> +/Contents 589 0 R +>> +endobj +51 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 590 0 R +/Font 591 0 R +>> +/Contents 592 0 R +>> +endobj +52 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 593 0 R +/Font 594 0 R +>> +/Annots [ 595 0 R 596 0 R ] +/Contents 597 0 R +>> +endobj +53 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 598 0 R +/Font 599 0 R +>> +/Annots [ 600 0 R 601 0 R ] +/Contents 602 0 R +>> +endobj +54 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 603 0 R +/Font 604 0 R +>> +/Annots [ 605 0 R 606 0 R ] +/Contents 607 0 R +>> +endobj +55 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 608 0 R +/Font 609 0 R +>> +/Annots [ 610 0 R 611 0 R ] +/Contents 612 0 R +>> +endobj +56 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 613 0 R +/Font 614 0 R +>> +/Annots [ 615 0 R 616 0 R ] +/Contents 617 0 R +>> +endobj +57 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 618 0 R +/Font 619 0 R +>> +/Contents 620 0 R +>> +endobj +58 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 621 0 R +/Font 622 0 R +>> +/Contents 623 0 R +>> +endobj +59 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 624 0 R +/Font 625 0 R +>> +/Contents 626 0 R +>> +endobj +60 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 627 0 R +/Font 628 0 R +>> +/Contents 629 0 R +>> +endobj +61 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 630 0 R +/Font 631 0 R +>> +/Contents 632 0 R +>> +endobj +62 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 633 0 R +/Font 634 0 R +>> +/Annots [ 635 0 R 636 0 R ] +/Contents 637 0 R +>> +endobj +63 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 638 0 R +/Font 639 0 R +>> +/Annots [ 640 0 R 641 0 R ] +/Contents 642 0 R +>> +endobj +64 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 643 0 R +/Font 644 0 R +>> +/Contents 645 0 R +>> +endobj +65 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 646 0 R +/Font 647 0 R +>> +/Contents 648 0 R +>> +endobj +66 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 649 0 R +/Font 650 0 R +>> +/Contents 651 0 R +>> +endobj +67 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 652 0 R +/Font 653 0 R +>> +/Contents 654 0 R +>> +endobj +68 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 655 0 R +/Font 656 0 R +>> +/Contents 657 0 R +>> +endobj +69 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 658 0 R +/Font 659 0 R +>> +/Contents 660 0 R +>> +endobj +70 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 661 0 R +/Font 662 0 R +>> +/Contents 663 0 R +>> +endobj +71 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 664 0 R +/Font 665 0 R +>> +/Contents 666 0 R +>> +endobj +72 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 667 0 R +/Font 668 0 R +>> +/Contents 669 0 R +>> +endobj +73 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 670 0 R +/Font 671 0 R +>> +/Contents 672 0 R +>> +endobj +74 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 673 0 R +/Font 674 0 R +>> +/Contents 675 0 R +>> +endobj +75 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 676 0 R +/Font 677 0 R +>> +/Contents 678 0 R +>> +endobj +76 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 679 0 R +/Font 680 0 R +>> +/Contents 681 0 R +>> +endobj +77 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 682 0 R +/Font 683 0 R +>> +/Annots [ 684 0 R ] +/Contents 685 0 R +>> +endobj +78 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 686 0 R +/Font 687 0 R +>> +/Contents 688 0 R +>> +endobj +79 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 689 0 R +/Font 690 0 R +>> +/Contents 691 0 R +>> +endobj +80 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 692 0 R +/Font 693 0 R +>> +/Contents 694 0 R +>> +endobj +81 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 695 0 R +/Font 696 0 R +>> +/Contents 697 0 R +>> +endobj +82 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 698 0 R +/Font 699 0 R +>> +/Contents 700 0 R +>> +endobj +83 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 701 0 R +/Font 702 0 R +>> +/Contents 703 0 R +>> +endobj +84 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 704 0 R +/Font 705 0 R +>> +/Annots [ 706 0 R 707 0 R ] +/Contents 708 0 R +>> +endobj +85 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 709 0 R +/Font 710 0 R +>> +/Contents 711 0 R +>> +endobj +86 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 712 0 R +/Font 713 0 R +>> +/Annots [ 714 0 R 715 0 R ] +/Contents 716 0 R +>> +endobj +87 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 717 0 R +/Font 718 0 R +>> +/Contents 719 0 R +>> +endobj +88 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 720 0 R +/Font 721 0 R +>> +/Contents 722 0 R +>> +endobj +89 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 723 0 R +/Font 724 0 R +>> +/Contents 725 0 R +>> +endobj +90 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 726 0 R +/Font 727 0 R +>> +/Annots [ 728 0 R 729 0 R ] +/Contents 730 0 R +>> +endobj +91 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 731 0 R +/Font 732 0 R +>> +/Contents 733 0 R +>> +endobj +92 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 734 0 R +/Font 735 0 R +>> +/Contents 736 0 R +>> +endobj +93 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 737 0 R +/Font 738 0 R +>> +/Contents 739 0 R +>> +endobj +94 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 740 0 R +/Font 741 0 R +>> +/Contents 742 0 R +>> +endobj +95 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 743 0 R +/Font 744 0 R +>> +/Contents 745 0 R +>> +endobj +96 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 746 0 R +/Font 747 0 R +>> +/Contents 748 0 R +>> +endobj +97 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 749 0 R +/Font 750 0 R +>> +/Contents 751 0 R +>> +endobj +98 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 752 0 R +/Font 753 0 R +>> +/Contents 754 0 R +>> +endobj +99 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 755 0 R +/Font 756 0 R +>> +/Contents 757 0 R +>> +endobj +100 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 758 0 R +/Font 759 0 R +>> +/Contents 760 0 R +>> +endobj +101 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 761 0 R +/Font 762 0 R +>> +/Contents 763 0 R +>> +endobj +102 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 764 0 R +/Font 765 0 R +>> +/Contents 766 0 R +>> +endobj +103 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 767 0 R +/Font 768 0 R +>> +/Contents 769 0 R +>> +endobj +104 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 770 0 R +/Font 771 0 R +>> +/Contents 772 0 R +>> +endobj +105 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 773 0 R +/Font 774 0 R +>> +/Annots [ 775 0 R 776 0 R ] +/Contents 777 0 R +>> +endobj +106 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 778 0 R +/Font 779 0 R +>> +/Contents 780 0 R +>> +endobj +107 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 781 0 R +/Font 782 0 R +>> +/Contents 783 0 R +>> +endobj +108 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 784 0 R +/Font 785 0 R +>> +/Contents 786 0 R +>> +endobj +109 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 787 0 R +/Font 788 0 R +>> +/Contents 789 0 R +>> +endobj +110 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 790 0 R +/Font 791 0 R +>> +/Contents 792 0 R +>> +endobj +111 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 793 0 R +/Font 794 0 R +>> +/Annots [ 795 0 R 796 0 R ] +/Contents 797 0 R +>> +endobj +112 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 798 0 R +/Font 799 0 R +>> +/Contents 800 0 R +>> +endobj +113 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 801 0 R +/Font 802 0 R +>> +/Contents 803 0 R +>> +endobj +114 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 804 0 R +/Font 805 0 R +>> +/Contents 806 0 R +>> +endobj +115 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 807 0 R +/Font 808 0 R +>> +/Contents 809 0 R +>> +endobj +116 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 810 0 R +/Font 811 0 R +>> +/Contents 812 0 R +>> +endobj +117 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 813 0 R +/Font 814 0 R +>> +/Contents 815 0 R +>> +endobj +118 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 816 0 R +/Font 817 0 R +>> +/Contents 818 0 R +>> +endobj +119 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 819 0 R +/Font 820 0 R +>> +/Contents 821 0 R +>> +endobj +120 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 822 0 R +/Font 823 0 R +>> +/Contents 824 0 R +>> +endobj +121 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 825 0 R +/Font 826 0 R +>> +/Contents 827 0 R +>> +endobj +122 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 828 0 R +/Font 829 0 R +>> +/Contents 830 0 R +>> +endobj +123 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 831 0 R +/Font 832 0 R +>> +/Contents 833 0 R +>> +endobj +124 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 834 0 R +/Font 835 0 R +>> +/Contents 836 0 R +>> +endobj +125 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 837 0 R +/Font 838 0 R +>> +/Contents 839 0 R +>> +endobj +126 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 840 0 R +/Font 841 0 R +>> +/Annots [ 842 0 R 843 0 R ] +/Contents 844 0 R +>> +endobj +127 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 845 0 R +/Font 846 0 R +>> +/Contents 847 0 R +>> +endobj +128 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 848 0 R +/Font 849 0 R +>> +/Contents 850 0 R +>> +endobj +129 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 851 0 R +/Font 852 0 R +>> +/Annots [ 853 0 R 854 0 R ] +/Contents 855 0 R +>> +endobj +130 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 856 0 R +/Font 857 0 R +>> +/Contents 858 0 R +>> +endobj +131 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 859 0 R +/Font 860 0 R +>> +/Contents 861 0 R +>> +endobj +132 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 862 0 R +/Font 863 0 R +>> +/Contents 864 0 R +>> +endobj +133 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 865 0 R +/Font 866 0 R +>> +/Contents 867 0 R +>> +endobj +134 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 868 0 R +/Font 869 0 R +>> +/Contents 870 0 R +>> +endobj +135 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 871 0 R +/Font 872 0 R +>> +/Contents 873 0 R +>> +endobj +136 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 874 0 R +/Font 875 0 R +>> +/Contents 876 0 R +>> +endobj +137 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 877 0 R +/Font 878 0 R +>> +/Contents 879 0 R +>> +endobj +138 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 880 0 R +/Font 881 0 R +>> +/Contents 882 0 R +>> +endobj +139 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 883 0 R +/Font 884 0 R +>> +/Contents 885 0 R +>> +endobj +140 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 886 0 R +/Font 887 0 R +>> +/Contents 888 0 R +>> +endobj +141 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 889 0 R +/Font 890 0 R +>> +/Contents 891 0 R +>> +endobj +142 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 892 0 R +/Font 893 0 R +>> +/Contents 894 0 R +>> +endobj +143 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 895 0 R +/Font 896 0 R +>> +/Contents 897 0 R +>> +endobj +144 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 898 0 R +/Font 899 0 R +>> +/Contents 900 0 R +>> +endobj +145 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 901 0 R +/Font 902 0 R +>> +/Contents 903 0 R +>> +endobj +146 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 904 0 R +/Font 905 0 R +>> +/Contents 906 0 R +>> +endobj +147 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 907 0 R +/Font 908 0 R +>> +/Annots [ 909 0 R 910 0 R 911 0 R 912 0 R ] +/Contents 913 0 R +>> +endobj +148 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 914 0 R +/Font 915 0 R +>> +/Contents 916 0 R +>> +endobj +149 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 917 0 R +/Font 918 0 R +>> +/Contents 919 0 R +>> +endobj +150 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 920 0 R +/Font 921 0 R +>> +/Contents 922 0 R +>> +endobj +151 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 923 0 R +/Font 924 0 R +>> +/Annots [ 925 0 R 926 0 R ] +/Contents 927 0 R +>> +endobj +152 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 928 0 R +/Font 929 0 R +>> +/Annots [ 930 0 R 931 0 R ] +/Contents 932 0 R +>> +endobj +153 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 933 0 R +/Font 934 0 R +>> +/Contents 935 0 R +>> +endobj +154 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 936 0 R +/Font 937 0 R +>> +/Contents 938 0 R +>> +endobj +155 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 939 0 R +/Font 940 0 R +>> +/Contents 941 0 R +>> +endobj +156 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 942 0 R +/Font 943 0 R +>> +/Contents 944 0 R +>> +endobj +157 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 945 0 R +/Font 946 0 R +>> +/Contents 947 0 R +>> +endobj +158 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 948 0 R +/Font 949 0 R +>> +/Contents 950 0 R +>> +endobj +159 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 951 0 R +/Font 952 0 R +>> +/Contents 953 0 R +>> +endobj +160 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 954 0 R +/Font 955 0 R +>> +/Annots [ 956 0 R 957 0 R 958 0 R 959 0 R ] +/Contents 960 0 R +>> +endobj +161 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 961 0 R +/Font 962 0 R +>> +/Annots [ 963 0 R 964 0 R 965 0 R 966 0 R ] +/Contents 967 0 R +>> +endobj +162 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 968 0 R +/Font 969 0 R +>> +/Annots [ 970 0 R 971 0 R ] +/Contents 972 0 R +>> +endobj +163 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 973 0 R +/Font 974 0 R +>> +/Annots [ 975 0 R 976 0 R 977 0 R 978 0 R ] +/Contents 979 0 R +>> +endobj +164 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 980 0 R +/Font 981 0 R +>> +/Contents 982 0 R +>> +endobj +165 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 983 0 R +/Font 984 0 R +>> +/Contents 985 0 R +>> +endobj +166 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 986 0 R +/Font 987 0 R +>> +/Contents 988 0 R +>> +endobj +167 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 989 0 R +/Font 990 0 R +>> +/Annots [ 991 0 R 992 0 R ] +/Contents 993 0 R +>> +endobj +168 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 994 0 R +/Font 995 0 R +>> +/Annots [ 996 0 R 997 0 R ] +/Contents 998 0 R +>> +endobj +169 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 999 0 R +/Font 1000 0 R +>> +/Annots [ 1001 0 R 1002 0 R ] +/Contents 1003 0 R +>> +endobj +170 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1004 0 R +/Font 1005 0 R +>> +/Annots [ 1006 0 R 1007 0 R ] +/Contents 1008 0 R +>> +endobj +171 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1009 0 R +/Font 1010 0 R +>> +/Contents 1011 0 R +>> +endobj +172 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1012 0 R +/Font 1013 0 R +>> +/Annots [ 1014 0 R 1015 0 R ] +/Contents 1016 0 R +>> +endobj +173 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1017 0 R +/Font 1018 0 R +>> +/Annots [ 1019 0 R 1020 0 R ] +/Contents 1021 0 R +>> +endobj +174 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1022 0 R +/Font 1023 0 R +>> +/Annots [ 1024 0 R 1025 0 R ] +/Contents 1026 0 R +>> +endobj +175 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1027 0 R +/Font 1028 0 R +>> +/Contents 1029 0 R +>> +endobj +176 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1030 0 R +/Font 1031 0 R +>> +/Annots [ 1032 0 R 1033 0 R ] +/Contents 1034 0 R +>> +endobj +177 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1035 0 R +/Font 1036 0 R +>> +/Contents 1037 0 R +>> +endobj +178 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1038 0 R +/Font 1039 0 R +>> +/Annots [ 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R ] +/Contents 1045 0 R +>> +endobj +179 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1046 0 R +/Font 1047 0 R +>> +/Contents 1048 0 R +>> +endobj +180 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1049 0 R +/Font 1050 0 R +>> +/Annots [ 1051 0 R 1052 0 R 1053 0 R 1054 0 R ] +/Contents 1055 0 R +>> +endobj +181 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1056 0 R +/Font 1057 0 R +>> +/Annots [ 1058 0 R 1059 0 R ] +/Contents 1060 0 R +>> +endobj +182 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1061 0 R +/Font 1062 0 R +>> +/Contents 1063 0 R +>> +endobj +183 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1064 0 R +/Font 1065 0 R +>> +/Annots [ 1066 0 R 1067 0 R 1068 0 R 1069 0 R ] +/Contents 1070 0 R +>> +endobj +184 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1071 0 R +/Font 1072 0 R +>> +/Annots [ 1073 0 R 1074 0 R ] +/Contents 1075 0 R +>> +endobj +185 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1076 0 R +/Font 1077 0 R +>> +/Annots [ 1078 0 R 1079 0 R ] +/Contents 1080 0 R +>> +endobj +186 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1081 0 R +/Font 1082 0 R +>> +/Contents 1083 0 R +>> +endobj +187 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1084 0 R +/Font 1085 0 R +>> +/Contents 1086 0 R +>> +endobj +188 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1087 0 R +/Font 1088 0 R +>> +/Annots [ 1089 0 R 1090 0 R ] +/Contents 1091 0 R +>> +endobj +189 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1092 0 R +/Font 1093 0 R +>> +/Annots [ 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R ] +/Contents 1100 0 R +>> +endobj +190 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1101 0 R +/Font 1102 0 R +>> +/Annots [ 1103 0 R 1104 0 R ] +/Contents 1105 0 R +>> +endobj +191 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1106 0 R +/Font 1107 0 R +>> +/Contents 1108 0 R +>> +endobj +192 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1109 0 R +/Font 1110 0 R +>> +/Contents 1111 0 R +>> +endobj +193 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1112 0 R +/Font 1113 0 R +>> +/Annots [ 1114 0 R 1115 0 R ] +/Contents 1116 0 R +>> +endobj +194 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1117 0 R +/Font 1118 0 R +>> +/Annots [ 1119 0 R 1120 0 R 1121 0 R 1122 0 R ] +/Contents 1123 0 R +>> +endobj +195 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1124 0 R +/Font 1125 0 R +>> +/Annots [ 1126 0 R 1127 0 R ] +/Contents 1128 0 R +>> +endobj +196 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1129 0 R +/Font 1130 0 R +>> +/Contents 1131 0 R +>> +endobj +197 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1132 0 R +/Font 1133 0 R +>> +/Contents 1134 0 R +>> +endobj +198 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1135 0 R +/Font 1136 0 R +>> +/Contents 1137 0 R +>> +endobj +199 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1138 0 R +/Font 1139 0 R +>> +/Annots [ 1140 0 R 1141 0 R ] +/Contents 1142 0 R +>> +endobj +200 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1143 0 R +/Font 1144 0 R +>> +/Annots [ 1145 0 R 1146 0 R 1147 0 R 1148 0 R ] +/Contents 1149 0 R +>> +endobj +201 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1150 0 R +/Font 1151 0 R +>> +/Annots [ 1152 0 R 1153 0 R ] +/Contents 1154 0 R +>> +endobj +202 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1155 0 R +/Font 1156 0 R +>> +/Annots [ 1157 0 R 1158 0 R ] +/Contents 1159 0 R +>> +endobj +203 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1160 0 R +/Font 1161 0 R +>> +/Contents 1162 0 R +>> +endobj +204 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1163 0 R +/Font 1164 0 R +>> +/Annots [ 1165 0 R 1166 0 R ] +/Contents 1167 0 R +>> +endobj +205 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1168 0 R +/Font 1169 0 R +>> +/Annots [ 1170 0 R 1171 0 R ] +/Contents 1172 0 R +>> +endobj +206 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1173 0 R +/Font 1174 0 R +>> +/Annots [ 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R ] +/Contents 1181 0 R +>> +endobj +207 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1182 0 R +/Font 1183 0 R +>> +/Contents 1184 0 R +>> +endobj +208 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1185 0 R +/Font 1186 0 R +>> +/Contents 1187 0 R +>> +endobj +209 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1188 0 R +/Font 1189 0 R +>> +/Contents 1190 0 R +>> +endobj +210 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1191 0 R +/Font 1192 0 R +>> +/Annots [ 1193 0 R ] +/Contents 1194 0 R +>> +endobj +211 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1195 0 R +/Font 1196 0 R +>> +/Contents 1197 0 R +>> +endobj +212 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1198 0 R +/Font 1199 0 R +>> +/Contents 1200 0 R +>> +endobj +213 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1201 0 R +/Font 1202 0 R +>> +/Contents 1203 0 R +>> +endobj +214 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1204 0 R +/Font 1205 0 R +>> +/Contents 1206 0 R +>> +endobj +215 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1207 0 R +/Font 1208 0 R +>> +/Contents 1209 0 R +>> +endobj +216 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1210 0 R +/Font 1211 0 R +>> +/Contents 1212 0 R +>> +endobj +217 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1213 0 R +/Font 1214 0 R +>> +/Contents 1215 0 R +>> +endobj +218 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1216 0 R +/Font 1217 0 R +>> +/Contents 1218 0 R +>> +endobj +219 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1219 0 R +/Font 1220 0 R +>> +/Contents 1221 0 R +>> +endobj +220 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1222 0 R +/Font 1223 0 R +>> +/Contents 1224 0 R +>> +endobj +221 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1225 0 R +/Font 1226 0 R +>> +/Contents 1227 0 R +>> +endobj +222 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1228 0 R +/Font 1229 0 R +>> +/Contents 1230 0 R +>> +endobj +223 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1231 0 R +/Font 1232 0 R +>> +/Contents 1233 0 R +>> +endobj +224 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1234 0 R +/Font 1235 0 R +>> +/Contents 1236 0 R +>> +endobj +225 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1237 0 R +/Font 1238 0 R +>> +/Contents 1239 0 R +>> +endobj +226 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1240 0 R +/Font 1241 0 R +>> +/Contents 1242 0 R +>> +endobj +227 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1243 0 R +/Font 1244 0 R +>> +/Contents 1245 0 R +>> +endobj +228 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1246 0 R +/Font 1247 0 R +>> +/Contents 1248 0 R +>> +endobj +229 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1249 0 R +/Font 1250 0 R +>> +/Contents 1251 0 R +>> +endobj +230 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1252 0 R +/Font 1253 0 R +>> +/Contents 1254 0 R +>> +endobj +231 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1255 0 R +/Font 1256 0 R +>> +/Contents 1257 0 R +>> +endobj +232 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1258 0 R +/Font 1259 0 R +>> +/Contents 1260 0 R +>> +endobj +233 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1261 0 R +/Font 1262 0 R +>> +/Contents 1263 0 R +>> +endobj +234 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1264 0 R +/Font 1265 0 R +>> +/Contents 1266 0 R +>> +endobj +235 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1267 0 R +/Font 1268 0 R +>> +/Contents 1269 0 R +>> +endobj +236 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1270 0 R +/Font 1271 0 R +>> +/Contents 1272 0 R +>> +endobj +237 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1273 0 R +/Font 1274 0 R +>> +/Contents 1275 0 R +>> +endobj +238 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1276 0 R +/Font 1277 0 R +>> +/Contents 1278 0 R +>> +endobj +239 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1279 0 R +/Font 1280 0 R +>> +/Contents 1281 0 R +>> +endobj +240 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1282 0 R +/Font 1283 0 R +>> +/Contents 1284 0 R +>> +endobj +241 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1285 0 R +/Font 1286 0 R +>> +/Contents 1287 0 R +>> +endobj +242 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1288 0 R +/Font 1289 0 R +>> +/Contents 1290 0 R +>> +endobj +243 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1291 0 R +/Font 1292 0 R +>> +/Contents 1293 0 R +>> +endobj +244 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1294 0 R +/Font 1295 0 R +>> +/Contents 1296 0 R +>> +endobj +245 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1297 0 R +/Font 1298 0 R +>> +/Contents 1299 0 R +>> +endobj +246 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1300 0 R +/Font 1301 0 R +>> +/Contents 1302 0 R +>> +endobj +247 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1303 0 R +/Font 1304 0 R +>> +/Contents 1305 0 R +>> +endobj +248 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1306 0 R +/Font 1307 0 R +>> +/Contents 1308 0 R +>> +endobj +249 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1309 0 R +/Font 1310 0 R +>> +/Contents 1311 0 R +>> +endobj +250 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1312 0 R +/Font 1313 0 R +>> +/Contents 1314 0 R +>> +endobj +251 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1315 0 R +/Font 1316 0 R +>> +/Contents 1317 0 R +>> +endobj +252 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1318 0 R +/Font 1319 0 R +>> +/Contents 1320 0 R +>> +endobj +253 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1321 0 R +/Font 1322 0 R +>> +/Contents 1323 0 R +>> +endobj +254 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1324 0 R +/Font 1325 0 R +>> +/Contents 1326 0 R +>> +endobj +255 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1327 0 R +/Font 1328 0 R +>> +/Contents 1329 0 R +>> +endobj +256 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1330 0 R +/Font 1331 0 R +>> +/Annots [ 1332 0 R 1333 0 R 1334 0 R 1335 0 R ] +/Contents 1336 0 R +>> +endobj +257 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1337 0 R +/Font 1338 0 R +>> +/Contents 1339 0 R +>> +endobj +258 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1340 0 R +/Font 1341 0 R +>> +/Contents 1342 0 R +>> +endobj +259 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1343 0 R +/Font 1344 0 R +>> +/Contents 1345 0 R +>> +endobj +260 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1346 0 R +/Font 1347 0 R +>> +/Contents 1348 0 R +>> +endobj +261 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1349 0 R +/Font 1350 0 R +>> +/Contents 1351 0 R +>> +endobj +262 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1352 0 R +/Font 1353 0 R +>> +/Contents 1354 0 R +>> +endobj +263 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1355 0 R +/Font 1356 0 R +>> +/Contents 1357 0 R +>> +endobj +264 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1358 0 R +/Font 1359 0 R +>> +/Contents 1360 0 R +>> +endobj +265 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1361 0 R +/Font 1362 0 R +>> +/Contents 1363 0 R +>> +endobj +266 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1364 0 R +/Font 1365 0 R +>> +/Contents 1366 0 R +>> +endobj +267 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1367 0 R +/Font 1368 0 R +>> +/Contents 1369 0 R +>> +endobj +268 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1370 0 R +/Font 1371 0 R +>> +/Annots [ 1372 0 R 1373 0 R ] +/Contents 1374 0 R +>> +endobj +269 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1375 0 R +/Font 1376 0 R +>> +/Contents 1377 0 R +>> +endobj +270 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1378 0 R +/Font 1379 0 R +>> +/Contents 1380 0 R +>> +endobj +271 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1381 0 R +/Font 1382 0 R +>> +/Contents 1383 0 R +>> +endobj +272 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1384 0 R +/Font 1385 0 R +>> +/Contents 1386 0 R +>> +endobj +273 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1387 0 R +/Font 1388 0 R +>> +/Contents 1389 0 R +>> +endobj +274 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1390 0 R +/Font 1391 0 R +>> +/Contents 1392 0 R +>> +endobj +275 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1393 0 R +/Font 1394 0 R +>> +/Contents 1395 0 R +>> +endobj +276 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1396 0 R +/Font 1397 0 R +>> +/Annots [ 1398 0 R 1399 0 R ] +/Contents 1400 0 R +>> +endobj +277 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1401 0 R +/Font 1402 0 R +>> +/Contents 1403 0 R +>> +endobj +278 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1404 0 R +/Font 1405 0 R +>> +/Contents 1406 0 R +>> +endobj +279 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1407 0 R +/Font 1408 0 R +>> +/Contents 1409 0 R +>> +endobj +280 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1410 0 R +/Font 1411 0 R +>> +/Contents 1412 0 R +>> +endobj +281 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1413 0 R +/Font 1414 0 R +>> +/Contents 1415 0 R +>> +endobj +282 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1416 0 R +/Font 1417 0 R +>> +/Contents 1418 0 R +>> +endobj +283 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1419 0 R +/Font 1420 0 R +>> +/Contents 1421 0 R +>> +endobj +284 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1422 0 R +/Font 1423 0 R +>> +/Contents 1424 0 R +>> +endobj +285 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1425 0 R +/Font 1426 0 R +>> +/Contents 1427 0 R +>> +endobj +286 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1428 0 R +/Font 1429 0 R +>> +/Contents 1430 0 R +>> +endobj +287 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1431 0 R +/Font 1432 0 R +>> +/Annots [ 1433 0 R ] +/Contents 1434 0 R +>> +endobj +288 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1435 0 R +/Font 1436 0 R +>> +/Contents 1437 0 R +>> +endobj +289 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1438 0 R +/Font 1439 0 R +>> +/Annots [ 1440 0 R 1441 0 R ] +/Contents 1442 0 R +>> +endobj +290 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1443 0 R +/Font 1444 0 R +>> +/Contents 1445 0 R +>> +endobj +291 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1446 0 R +/Font 1447 0 R +>> +/Contents 1448 0 R +>> +endobj +292 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1449 0 R +/Font 1450 0 R +>> +/Contents 1451 0 R +>> +endobj +293 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1452 0 R +/Font 1453 0 R +>> +/Contents 1454 0 R +>> +endobj +294 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1455 0 R +/Font 1456 0 R +>> +/Contents 1457 0 R +>> +endobj +295 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1458 0 R +/Font 1459 0 R +>> +/Contents 1460 0 R +>> +endobj +296 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1461 0 R +/Font 1462 0 R +>> +/Contents 1463 0 R +>> +endobj +297 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1464 0 R +/Font 1465 0 R +>> +/Annots [ 1466 0 R 1467 0 R 1468 0 R ] +/Contents 1469 0 R +>> +endobj +298 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1470 0 R +/Font 1471 0 R +>> +/Annots [ 1472 0 R ] +/Contents 1473 0 R +>> +endobj +299 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1474 0 R +/Font 1475 0 R +>> +/Contents 1476 0 R +>> +endobj +300 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /ImageC /Text ] +/ExtGState 1477 0 R +/XObject 1479 0 R +/Font 1482 0 R +>> +/Annots [ 1483 0 R ] +/Contents 1484 0 R +>> +endobj +301 0 obj +<< +/Type /Page +/MediaBox [ 0 0 432 648 ] +/Parent 1 0 R +/Resources << +/ProcSet [ /PDF /Text ] +/ExtGState 1485 0 R +/Font 1486 0 R +>> +/Annots [ 1487 0 R ] +/Contents 1488 0 R +>> +endobj +302 0 obj +<< +/Filter /Standard +/V 2 +/Length 128 +/R 3 +/O <19f4d745456aa55dc714ae7e656fea6661b91c5941498dc56f7260077640a747> +/U +/P -1 +>> +endobj +303 0 obj +<< +/Type /Catalog +/Pages 1 0 R +>> +endobj +304 0 obj +<< +/R7 305 0 R +>> +endobj +305 0 obj +<< +/Type /ExtGState +/BM /Normal +/OPM 1 +/TK true +>> +endobj +306 0 obj +<< +/R12 307 0 R +/R11 308 0 R +/R10 309 0 R +/R9 310 0 R +/R8 311 0 R +>> +endobj +307 0 obj +<< +/Subtype /Image +/ColorSpace /DeviceRGB +/Width 1800 +/Height 2700 +/BitsPerComponent 8 +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1800 +/Colors 3 +>> +/Length 25843 +>> +stream +N/'MPڳYJm^:JFI*b -oH{]TZvU'4(S1|[p+`|UqX'ajNޗ $&K-pmd!GZ.[8Nq{%QttŏҖtsecB 0}bGW{d*Xf +&p~g4;s)ҵ% /|R=JQfՇ ljϪ]9TS1:EDi@+-Dp|D6=wg +~%uMnxSSOE:LP['s{AazB'v.Rhy>$ ѽs?P5]ޞzh ϵ*#ā6L }SIvI8 p[ѱ0HLK 9O;i2@؈ |똁[F4;>a5#nR(Apo^3FT}&4>|.Yc-c~0_lN&yp*f (cj i vbWkC4~ļ`D)@z*9CǗIäjk,8E%ɟ*Ne?/\~,pܓs6OcY)rغ̗[opmGXb93,h%뢌\ZfS'hnB$),[ s{0\u9͸M{Yrt]79.gN1SKYxPW\˃viXO]ՕR?m8sGO@x3h`:c E;Urێ/X{MN m џ& yq ѽtVqP]E|<;VF8tGnc9 њsEm둿|9ﵧHiU?#c+?HHKtwlp zEޏLaVp­/կULkP:+&q*<]R1cna] o=\tQjOz *j&AUޖ"JOXW_C5Xӳ;収gϤO y\':IH$ P/peBtӒԩ~xO`—qggqn-F:e( +܄CM@QSM?.Y$M.9Dp>i6#Tp IL|J]o-E(!l)9'R%k>5~0o!˨3QN([fŽ_D?F N4i [Ѳ4\hu+!-]~^mM6BF!:SEX%`[i?k5x&y3D۳m] +ӫ*=6!n9Qv'd݃kG0:63sKM&kwmԾד:)y&OU30(%S?D?=0~i6s #˩6SDVģe=]oBs{J%ŨtcXCڒN0AƧk\{pvJQȆh埠ZZHbC'qn9d ΞQx0+/ +==@hҮ,hNEG<+|"d4x@F,3) ا7wZUiB,~( +:5 s} +]KY+x9e2۾" -A>Kj~6Rt}>}i 9A:i.qRU~k"b,a_}{*}5-@f*@pBӧcPZUP"z+gSJCvdJK}Uja󰞔Aʍi꼾n:wHC*SK}w-o9sV6'sUGsw$ ȏL1G:0-xг^iRgr@ӉߙdgwGU{zׂpZս +žj3iAd3Gt8!uNRfU 6;heA, E^@TxsG,'<}glW +ttp*&xA-Zz:IHf ?X05HwrHn|?F-!glR-Й{rG~"Z8ƫykƮ&b}W( cy/T P䥕|[ /ًN@dNw,[ÏzY4߶Lv$`DB |zp:UKb*)%K5|f)DB5@J& 4b3c\>8Cݾ`\*`JAX C97~շS@2>CH>\~f k7([ dkW6Nt~u!K- dPCE=Pa[!_ِ#mJ%v,ί`d5{-@nU0ŊCӤl[7*C+T$#gL*h@ީ+ y{=NyN{f\gg039t@z\#)ח3-j(]o&wZU\꯳(!\4tՃhln"$D kKf)Jd,gHJ 6n`J?}e)2h>Ai:hoy:j(S]=q۶ʣMWܤ6^*Wi5"D3.#ƩE!_'bn-l)r͎*M{d .ޫ^pӣ<2_R0VD0+H` .}i\dj+NV^\XB(DnY@5ϕ+k!k|V&yEՄK\?ԏ@ޓqu5bk  ͐y4U aQ0 }h%=+?X;} w)oy*;56Sqt~7 Bv hVJXy`]) ِ\tV'>*ȏ+B֕Ey@/JSN$~@ai (lx9~a5ϏArE>*"JʊBEtu7C: ^QT]IO9 )[Ղ_"h#>Ljd&;SrCZO.jfׇH$ķ{nU&8A;CҐnn, !#Cvq-g^|gnOxo;̳hXPut/8O&UL7ML)@o3Ώ\Jn3ژHЖi[ 0['Vx(50|+6uݢZb4^<Q+q({ idu `4=XDk-@t:aZS6ho6КЪ>h. Za2cBjM#L+ um(I+zfRuP#g!C`@{`1s32#}S._1ZCk 2 Hh6Cv9l2}c=Okp|QsFHk@*Uy&T\K"vT$Zn, %Ѣ\:<-}qcs%^_.i +J~N B5M6V#ySFe,cE"hu [I95Xq.b\Ia<4n}KܥE}%{i| +繣1"8> 6iI#W=]eUE}dhuy˵J^G^u0> A (C,Vu!Qת(LMp;ҍ/MT,W\m^l%zw$a\0Ja#˻K? +wRQ r΋UVCkT Ϲ *"U>C1y:v{wHTR DQ>Z+/ۄv‚Xcm5Z ?Γc8~/\6[Hɰ@iXCuA!jl6B) pe2ѐ-iHYΨSqHJܘ0OA?^bj +dX!\qZ3@O"/p~MB2mV콞= +m}qY< -ku3W&mKZos ΍kO{kWJXFb\lɵ+UhF-Φܞ, F0P>D)(Ĝ{w’ۮR@!'JԄ_ ZO+M-9GzWп(۪y`X*Sibxm9QiQ1!nj\1Hгg\mޱQsD/]?y&ք ~\zYNS +2n11= ޓ&}X WPnԉw󤂾I~.⬿ Cypr4B.PRgiͼNP;M=ec!lf*(hȤ +JJH2yX%-'.tAp z4J#II9cj4R` Vѩ^󧄨( @z3!޴6gxwdG Yv8B°L 0B{L"BOCeXzt:/3#S% + l] +U,jjs¯G΅QȊOGN|7+h]kŌ%\${\*$BБ^L,9Trk-ȡ998JVBrt`=l1F蟿qɼʉ0`;]h;O=4FHKN%]j*:<&܍cևBZ;U/7p_GNֹ_K‘NMkBdinge3.gJ.xK{LSN(@=F z/t2]M1X%JU,xWƌ +^.t9mtfK$%›g/AХ(W./Y;tuAN7 Ӄ0ϻ*o!<]&(Llhv[,GR ҬMXt%$5WI{4@|l1*]=ALibG<8~!PW[yNr3g-t +ZU.΀U(E|uFv,6j%`0$75  &* ӄaoaJΔ]@TdChqI30<><ˢo|Z|#852 U%rCoBVՀ712ۛTb# ѴO2{;[v<+c[$5Y465 G$~`ttz@~R U0aȹ;:0hT&3~4t Ո#F" +q*0zL&F68⸺b[w=Ֆ;?R R4.vI[!r۷:m;AZ*,^ZME[^{d,Rr6,=$F,bEůhosơepI'ױS2e.s})?r߬0vZUuHU,EW =>p|x;EaÈj72+*r(4bąu9qm(1+Q'lPCaHюĆo>qɜYAEi-թ0ɂ8W̫ӳ(м@_f)iߒ-b*?ۗ=C&Uҟr3+ťZP1\ɿGA4Eo`uT5L7}]9k'ȳ?hg"1~48"&B0kNlB72{+mĨ6.YInj<v4Zj4:p^L] 9@5o{<]lݺ[,vyD4;FG~K}vqt'"~]ª<*jaoDND9<"w56\fw" +ZY;e[x9053͈_7RgAWi*Nh*O6=ϊ Cוm{휔5UBfqcU@eVFxj3Py:Yn,J +uwo?NN%n +{j0 @Sm~fW]x_fdn*z@:bH}@5cHR5;ZnYCSWW"kj $iލ& +lΏ7ښkF!LqՑ~p]su ҋrd3fG#i7SV2 +urDQse-.4[S:9™"֗W]mV0f/_Sҩzj`~6.V3 +2<#O}Ax=*2 _gG! &WƩL|n!A!q*_P +E~^6't9S!HEzel+ӰV0Qaj:>PFLBGAfg[q¦#,L{sśh/4 zN'x 6DF)0ww [hܟ5䏵9ɇ%EwXiV[JҹG^}+\@40q5?>;PP h+;mU7oP>S0W R: Hcf05$rw G7Oo>_U gvϲFB=xq +.,~QfiFMk|l|0޴Sf!.uAP?w +_XIhu/*)6ۦ^N9 +*jMB-qDF}BK6kŠ6)ao`Td>cn +̞ZQ%E-Z"їpx +ԑ5̠}?X ')P(`T뀑eTעnQC5|8du +[rmX{=[4K|% C^̞MkW3_hZE2!"34/5F4%aG>:*VhLboiA~:Q.u Og 9U W@ATjF!rblyWCJco2v*9kaAM֝>| v8b#dCׯb֗/ZEX Wߨkl +X,VdAk#-`O*;jhLc ϧy5HS۔zdG#^ؕҾhw栻b҄1=xI=D5'6`=BOs#YU7F\:]=f_ lZ(23iƳRɔ`ߢLZa$1+_o+?cy̑6>ltW9"֯ ) N.<UMhb!i"!''v_S;/X +ܑW5_QW(~+!We?\xxv!&xaaH֗I-juw"k"r)x*/ +tzqs|+hRnoښt!2ã8| +J|዁e\}Nc$v pj}9sc`ld)K10<GJnYKѧd=t%:7EG)c4Դ@K~I)w1 YH[B^yS%Яp @fZQSRՏ,4RԆepC(fՔV>X T %+Xk<dv#ni һ(<g|fO%u>2wk@߮ޙ1vNlִ_zHJh5^DM$P; Ǿ CD"tTK[yݶ5? B + +S?TgЉ02݇Vu*& +<-VHR(/2k94]+c72g@W%1[K.m h`?ʮ"| t,)gW ;$f0,/7ci;wUXW_ E/s բݙfď,%{h%cvRűϮG*9p#f63)pbY4xrZ6!tPBQ +W;}jG "B0zV iL1iy<,%SPY}2m%ś@{G؀KdmZGXRswtxrd2E2deaL7\Т.zQXHR"Yb0lU|>ќ$dٸOfJEJa(;b\dim_PL&{˩rе)J4q4 7͟/p4 NQnaorQQ13C: Z_wo + m զ^xH7G,_ުR/IJԱba<H؉3?C<37 )5 /yh'rqDJ:*95^l 2/HIl>Z֙m51[AZ|a} m*v ֵU:StyہGçEҥ݅a=iyOآZ_!a 8 +36g9Tqg iW'l@42@C盭FE؏8a.A v/\ j2Ӣ晷Ro#.4_ڞBX0hZBTuH"!+Ob-IȆaIԵRu.9jq`=bT S"BOυ66^*VaeZqH5ǶMQ㱞]N_ +ص>m+>sCuKBC׎)j"l=F2+1_W|ZϟDi2itUND{1DT6J9gkiZnJ[)PtY޽–L^aʢzDג3T^ DM `%XEo'r=1QM TjaSj+B̲t?ZU2>-kz& +^Ҝf b4)6],v/qPTN}mpӢA!Hx}Ov+Hzm|K4⩦tkd'_g{٣%6 +Wl9`dz^1z0mߡE<;p""+YK\+_6ⓝv2zJSS#/e~'{_X/"[[| +R9F˂MȧqhM1U +C~MȦH'Fh 5FԈx03̨zf`odըz7| e!~O:ՓdlBOM4xM| s#"~Hg~q0i,d/־]aCR< "f zޕ<ل3PU.+7uEuxP|Y7p>zBD吶`ms}]F_fEqX4enW gL. \Ól=ή^|r9%&|> EsV,q%}#nݹ +heSk& YJĔ0zIZbNQ|x 2nUdVݩ^ktp 7R>XFD5̌eˊW"̆wfwmg}f޷,}H1s)n/+TAp[)ʏEaDU^5D!!qb GfD}ݠ6dTDV[W ):Vm6 1iyQ(f`72PrئG1Vq~@^=tqԈ |T06l<ʴƸk7mx+l)K%|ztD(eESO;YG3=_d.Z[]NM쥷˅NײddZʡGH? "dyRnOo{snQ %p_ؘM Sit4 Ϧ˒ߡskA`|JA{n푛wvecH;jOG>bQQa&`[d&ګXlTyvBKJφiQke߷uXs +b9z z @E +p&3Up2Z5*[,ب]MML yr'hULW˺M-N\q!3mk˞dK(Nwn9LDhYؘBR %@P3nPϭK5j~zuλ͗kJ2_0#{uwRv, +.f_9EƏ5t.M* RPhp͂u"k9.jEI{78@MLV;y>qs}m\8Pe,6hf|ϕVԫaQ'ൌb~WG#)bB(XX]#"||'5 i6%'C`DD~,MgCG{U~}{ ~wZqg9Igj(uβ2H8v3Y 9U 62@E28Wk=hX'] F~50`;^1^뛼9r(}۩ %5zH8vd0xuovc>Dj˪uF"?!PY3R6j0x G|3UHy!Q-@ VmLu1gA^6{A +&@8 +$MM +-$;z=a!fy:ƮpiQ8;ePť6e(c㼾dx^u6@R 'R:γ^rxp)%Iy^[j= +溛NTsS%ڬW}Hi`D$@`!#w?UY(5J5JU%$d*XjA}DJ6"+`j@h%buyL +%L)-1)R;%0,& +!=QGX NHLPbϚMi=**?"׭uB3_-8s)Dd];MS!Xzҥl ڛrOynMq!) qc*_U NϚP @l.T7)2*|p K$|k݃bV!rYk]fU#SO|T̏#6z-k݊O"trxbZ4Y}{pT%`x< +N\g'oD +ʁgH80\OYF~ƻ}d=q KFP +g=T@ѕ_Y0$]mS-gJxG3W+#y8 h޺fiהF5U5֎RB2Lꃂ@*l7`닺Y.r8d?\_FB_ksq X>4PJ3s<2ޔFBw@hj? FC (_L ejeeۡ~^*oyщu HYj7!E(|?hpj`oޏ[|E=^@\)XԶCe d'pB ٪v({MֵA%ԱǓXv9>/Xfu<=Gꠥe‡sz9KR@F$i'DVJ boC5f MF~y~LIX}n!9<78 `I7+Z+KBnvt5?a7bD%46`u(!3N&=ysg ãϼ +˲F6B792yT'm1@|%)/Vy&m']Zm”dp6"ūoŒtiN]AĄ_#`&jX @'43^Vs,1kd)Ymdt4,V^;MPGOZR.; 9;ļk_wYQ"C6z$T/xrA ]YXhqɮŭ=rs}KFAgȽZEMͻT>qѯ%f[u}]qݭ"t<VcD 'g󰤆ˁ4]84=bO-x-L-#7uZQDB]zp3:aC9eNxH*G_!X۱[ r4+:6Z)9-Wcr[@{%8AhVER\ͨrfc#͉G3^}I+LQi~ )-mOqOz_`zpށ]xag}w[SfhqS"SE0h7wF@^Y02G.,fNJ~\<~Z,p rAs?rc.ns߉i=Ё@o%Kqvjn!DV{T'n*wi2&?S|R񯰽( +JLOuTavjw @6̓&$DB%8(᳷ B,6dxDo=NM#)UR'/L+ICCWŽ & JE L*\{K ;g#<=&e0;]7kي-7al q^kKE#t^Dk>]^}ectaSk$7 `ql$B_Gܲd4BQu&=7^7t"xt8l9paUs+gX>N:%G{uRq0y O-bjBeLF*r% PHp*`dz׺ Gy8$ f͚y)MZ:6i9&,1 }qd[+S>X,ac bao? +֭т#U<`wwĺVI0f5Lhǽ; +7@{$bzV5e[-}CrԢ݇C689ImIXuk #)w~>]ۨ4ύiv~KOϞZΏ+saV|Rw66t.5c\ UhYmV ӄ/mC].D wIjqvހ?"&~ςKw?<(NLp>z>*a'@ΔE9$2Wݢr&|=V:x3i+R4 37zDd&`P* h$nX6|!HBZT: 8NN@hK+9#JIo9?$(3<S?LG6? ݦI侏ݻNJ)e* +0=G+hhRMU3f~wqi擕W@4g(!5F_eקXß)OВm)>-) |q&@b +?B%%q-h{TZ$KZw +~*QVu6h5,ڝz+Re"b8hcnQ^QI5 ?C6,LLQ)%^_y:Sh']`=D>EU`WBք*"ՠPGU[dj= ^w"QTX nDJ;ePhHj.I=U2\JdWC[5)$UmaSjԧ )`r&WCMshOUɬ}~tA;ڮ/7?YL{jH5k M|_%qgzW =kLXn/{E{g#˷m1~D"4eT҃tRd3#dHRj8%ʸ>m sa-oNd}NZ`tzxE3,KS>tV-)Ts hDyrI$^yKIvG9Ntx Rk[#i D^жVWUg'e)4ӴR=H=q(+IZ)Ȼ :{t-uxJg9=QlF:f9HF !Z?RK7rL1&K4q*FPڵ5j )9 &J_Tmu_Զn\LmVRm3)c%:knd~:B[7--?wIs)L0gz*>[Dy+1H?7,  KT_kT^ȡocĞt}R(>[+:gbB0Ӆ'9yDEhwĉOB3igK=B| ԋ8c!&z.vJ8B@.R̚3PzCR/8,jr"w"R]q3os pj agEcm39fϺ.ʟGB?LfMtcU!=ek8*4DjWb;We?ZYvdQjpo 6a{S}9߄¼.¥t +DtTOGmR?Pf#9<8qsƽCsm>VD&ǠMB>vwݟ9Я9%tz /;&W%%ؼ@>LVH`2Qاȯ)ݓN,G|{$%0' SnQt`$Av5;jiB!_zOG]5J98tRm H:?̐y@&k.g53>,+,SÜ/y ϮƚRT n&tBXP}+o UA޹\d2KKUf5++68gwZg(T ̫`^Ҙ@4{Xhm$ܢe]m#Ipy.J3Z5Sc>_ +YW; +R[".hmŅ)TTiX[vfyDž-&|يHCjejiO\N#Ww4 pY֭"2EVH԰zu T50%{S@C`t1Q{3]V"gK%P&K%o:M⻬@Pn V\g`:TeߝL@lKؿuRowEqmak)NuV 2YlBG[S؆Dzm@7XMt]Vi4X]g?|Rz qUg+<)~J¿%#> ,1lNcSbG%b]\ZuWaD3Jcö'jn +-yB ;e@f_~6tcL7~N9Iy[uQ:K."Rj 4;bMdK6\*Q^6 ,3#&ݓW=*+hz+pGL膌CUlGUyˑd1eǪN/ + +}jFmy~Edtѩ|BBw[/h׌1YIľz..NAB~sԻ%6?f$# ʾk=$8:X/(ǨicwӃI&)ϫe&.Ȇpg>1gtdTx45$s6>Nu/{ +pT<>QF^Z8S\RbYQ% %ѳQ9G(0/:ި]88RJ7qܾhVJkGg K+()^m;4oEkwDPC;p5HD]QcxK:T{μR$U.aS, [:1en1X67muH8{iBdNeA+Od$FϞ1nV9ʯG +1˾lGRM7t"@FQp2ļࢪF,Z s1%i<2WbLN[1inkQd[<(5{F"xsx3_ЗxsD6D/Ƭqy൩JY) zR9!㡘wq=ݻ SI$ +g!uDE~W &zLFp8_=V߂Rt`&Zi߀,υd+' 4E]6z)+vr\5dK"m][BL +Yv@)ۃ"Y\!J+7fni֩ݮl|2x90YDB]@lwN"XJz"6I[aN$IiC$@gJꊖaO.:RU7Gڮ_ޞT- +Wh%k1A lI^ϵNlV':,nB% =?\,.`INJ2rOѴ-vN/ ]%KbBF:j^WL¤0NB_V{{W q>CcO臀лN whH%U7TY0|+(_}.QD7kJ#{6Tu +aϗAd->JBlaRu=bDqmz򴢇f;W+u t/cP6}Bf/M/dhDeEKR7! +{W ơ(^~7@`C~1jc_iZ ‰-܍(%5Td`IV !ЈZ6#]2LELTl$:%CBZpk͏k+VU*,lR53Z|@ӽ橘zrA:TeXRs)ߠ3}ĵk^3^;e}tFE>\S _w?]_+1|PȌ7:ϵtFv/z/[T9mjhTJJ+3 LiwW r:i&i@ieuX{~1XY*9h|l҉7(+?_ c`A dڒ/p_s;TW<Óylk +f]);4=;_m' VQ)ڤ Cեdг)(z +endstream +endobj +308 0 obj +<< +/Subtype /Image +/ColorSpace /DeviceRGB +/Width 1800 +/Height 2700 +/BitsPerComponent 8 +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1800 +/Colors 3 +>> +/Length 19980 +>> +stream + ".o"A{RTrL|nft`tfޑ__"~캥f&o +߫`H5]^q"V%,̫x,w(7"C^$'dw/Ti祒 ߇mB +H*3fH%c1[l~`A +-^{04X": Πef. êj(_ֶkS9IAZfLs7.Yפ/3!Xs|<=kMͭ*Ԭ^Xp5^.Ie|--bpڣD,T88-OΔ 8!zkI2 K8Չ^%<_TKn?KbtGlU\B_7Z=ߌ +JBIl<3pn/75̦CPN 5DaǓ飈] @큻n8Xi!Xq}ސc ,JFN=` +|gt} /kXҦWNٳCnjw͹oك;gLOa04E: ^ͅ^VSurQxk|0Pf6i$+貽B=4@"b8*wE4:m'uy=D?Ї[%oJ^㿖L q_o ]jp&|T7Vɳ ?X %^#RcY$=LJUD nqmdۆFų՘A!$W5=EJ#FP}DFfpzXAec׿$xZc[%.O9Y5NgG5ޙ$~5#Oo8 B7Oj`vj_C'D? D oD[7ksDxK}^>hUN. 7L h !4P#4R?"Jz}~y|_q۫$m4`Bl8glok3Tg5\vf3fh藊-QE-{X_Uk่-$ Χ*h;Vv׹WXpo,H2 <ȞMN#9bi#)`HQ{BoTyk]%rn{iBwg.#^&`> ; Ggjm`gBu{&CFSijM0 +Յڧ2h" +X)ԥKPgLbv;~x:"1(SkWndDF *]\LjtΠwop%9k>~FnS$GZZpm?s- jup|k,.tw(zWYNhڜ$b% %іܪ/?lJطLj2&[PO5qUKя1U\*q˘"fM>ѦfyK5Owq\7~BeKWkR%M B7f+exϑN{zFY AYmH#܂rwdyzJ&ed^yߥT ~ٷJκd_CvDҘ#] +.g!2=)`XCa٩*G7KVz)@; |iZM4}ƅqe\Lw,sLl;ZyU}. "| g|2?t*Хd %۫bf#假}Dxhx݁1Ŋ8I֯={ ̜]W'{mfcNRĸQxvmC}?Q|Mw#I{aҞ>՚mu2qYc~Π_*^}_T&P [ZBNjzCTF[mM1k83v"3MO)՟o\i;T[\"ܑ dݓt)JZ2t;Lc\7r_J7 -fG_J͓ț븤{ RP-Bz,"U[s_/;R +ԟX𘉒ތާJdSv Vg@YH5R!.KgU"]dV8j7BQP.bݟij#| + +3J>ܵ8j;-\n᳤}^m갣)UyY +-Qռ0HWj ֣zHqGZ| #BE*N)#?蜯&]H\3)$j<[k$#CPl\> R0 ݲDǃDHǂxж6}#A}75@qǠR@HJz2-Cv ,.pB>7"ՙNWica"'ra{o4H UPýs䲿%yX]FzN5SCDxz$1TT@2z<ajBʉh{Ycm w% <Բ70)Əa6{у8Ġ-H_E+wh?NٯO}Lv +{1/+hf9 )x] mR [tx'YaFd_+:<ݳY}֘ąтdG =>X"²/0/ >cܬn.\Κ* ˌdaё1([9LIu;ʇSVXM7k|\12(ֶ|w<Z2@<{Ƌ_z qz x=e,U}`G*9ޓK=gԩ 6maC]m4q:wbI &OCϨ~Ћ{}KCQ{QH,ѯG.}И(ȃjg܂1n]!N.XArø<{rsf0My+ V`Ì?vk c+*>:f)3-vw~t$L# +S*B$lb!|ui.) ~T释\G%tXKh-;'D\)n#IF=? ;) hdڱyr(,=ٶOfR x) yd(ݔ/Ub x[KWNx'B`CzwB5Xi"ό>?u*'#aMO.a2Ymc>9^.|YQ櫯eﵡPtmQ*0!)ioNd[ zlܲr~>ɞA#<J@ir^r4J I KkSߞmqOږۛu>55e*PUߏ%J_q@/^%CYck3ZEs^A#%â0щٛYƼ+w20zYE{+m׼(2Lp:m,$Acl0uNc"rmX+RƓ5{:IbCS221;59yԒi1L*L4_𷁅[Rbw"`p*YDH ZyxMEÙ}TN׫s ^|rZiY 0nae˿nu޵Qi^/YZ ZSVgyatxCsMg{~%>EP B:h)綴4ʀwfL݉+k& \o(_@oϏ4~Բm.anq$-(sͼSgʷ#AZ4Ȼ$0\5 ρn(ڝbzuS悵w~J hQ$YtgK JC +q =ʮ7[Y >dg3/+.I`Z+yAÁoF̞QyZx::W]ܢ~df30[z"N4xW<.0o9PWfvƳ8Ğ$Ks q$7QBD2BC'ޢ<$6`Zz+AFs"ִ#awEPbxG1|sWO[c=JjG-̙dhOv(5٤LQq8>l-hUScD 14"k6rм"D?>(6*ZtYf#[=&hzOF)J0#ljWW0;Wxw%t \poPfɶ_EiɄK}袪2M 6I: \Os}l݇ռQ;G;q w[v_N ks +^© :g^뭗<- ڄSU<+U V-0'r 0A6ZKjctipjf 8${" OG" VA&d65;BLcp}Bri,KEȄTv: Wj-*:ŘNF@-]MO"=I[^M y\ ] +==VC ޗ_K<,g}UobI-z]>Ό qKs0SXtox Eߐ[h_(b2E~*Wƻm%uK渀6?d1.< HqM6־:T9ze-RZ [LB)Yu:sC ?S1UY=xu{z7/'Y|& YQCE&>A/f|jkOԗg!e~D}PA[0`@x+7Xa~<,I SvC<.aًnmT::ZD2Y4?tu7,=ǧMJִ4΍)YCgh%49x8g3t8 }kpO|jU }˸ >4B66s]-O0aY7lھy*hnVC< el5WK9_~b2C(+'\͋x֋ +C^KߢMj{R>=肸 O8p$AE<80u1# +Ƒs^f-9(tVEV f{ :.9<z;=FS6w| +NNm u RPks aʼn14Q D$@.eWu@r|_U:;4h\njN-_c6ioSB)Jj76E>2jZTR˽D jĀKp/fWK8 ĎTcp֒oԖil2a-N=/1Ɍ]1^F&A=ߵZ‚6[e'@<=nvi UGh g`/tXR~✲\r]ga1 u =0(zhfFYL#?VtqN& a  +#/~\l.v>& +5±Ү60J 3w[Ƣ%ԚU {&qV鼈YDž>vt7M~7paAVg>;tk\mD$<=/k .ڌ4־6Dz `d +(4}.>}Lx:Wc;jӲ]VuH(o7%XP+&sTQoc6M8 KXՉ^&13rD)\KI k +ۈbGIiыK/ H(\ < n"R +.Jns~îTsy۔j- ̊A;Ԕ7߼MkيI|3pTݝ +@N 9kj?_YVOpR{{Mt 'ړ< X{m + +q1tI`O~_v*_ĂY:L$ȩ#Jjϊ6=N|φGț%,܁F /\et8-{[Cm,y0S@vY=ܢDK8"6}eĴoyY;:/.)=I'wJHi~#uw +rTH8IaYk$tHi$  (TV}U\qӇ7"7t%ά2#$@#Ajђt.M'kPqj P C*hg{?i}Тg"ڹLex?V*3J[PY_нH'y53,kIgb=#{F~e$}ׄJ1OOrOo$+AtT(`޵l+54YY,u%\_K=@)Z+`<gZ![Rȵ:F u}Ěulͅ}cЁi`6oPxTl6&3+ l뷸#_>y)ZOS5 N). +!+"]WbVVSQLm s-$..biD"j^@b`I%Z[TAx͢$զx-g8%e;t'-g51˷T +D9D@J< 9,Q]/VDɄhXYB79HsX',}&P?+L$ 9ĩ)Ol>,sQe3ȩg D2Zyӝ13_W&.-)-U1tlcsek<;~o2+#yF7c!Eø,!6(hk۱F(Ф З-qڀ0٨@~& ,t{c=&/WKp4їQf'NDl>]Cqut^A%ﹴ 堟eV䳂oIr{/>+2 ۬Nj4ݏnPLˌ=5'SH!.҄ZTF5k8!<$EVY)& +-%[VUaQXuY7qoD +e@!Ô#hKitG_BePfHr^Tu$ؼG$\"]憫ˌ1uqv s yXnF]]Z$ i~t:J)GH.OYuzxauA +4TǗ9.>}|<\67Ī\48z6HA7emh"g}'BN^3BxCt &KXg sQTaA,FÍTF 6Cҗn֘+C-ͧNR7hvAE+pLqSqf+Eɾ?Б{\i!Zth%kSoEO֜P␠*6Rᳪ%!=^!iWX>1Hnbl~}D7|,za d&5$'#embs[CR0?u"v+Hl-u~]Xw)41{bu/7܍c=UAY(^mx 8" Nu2ES[jn&* r&(mL)١K#\Tɯ!+xrViAEnDt'}_,7]7R;q]U}y@XU`,݀g&}=aiQұRe1 r`JcZAz:N[dՔFB߃qs>u^wt(r2yP@ֵdCwF,=1ZLԒq[Hg$>ahuPWYݫh bϡUz[ $B)}R.骫uސDF/e"̖̀_C+XVt6|[n&Vd3, /\"wuF%cp׎Ǿ2{_,ّ.j T>B9O{GŌ]Il|CixF]C.މ;5CVt08fk a*em2A%r\gdl4C!e{JhJLC%gJ'<zlY6֢?ePApщ" U|&J;;saxpGBRv$,hJ״u@݅0h*`1q؞8ᇕm[Pn +aW`Hkeqzd +7ϊnqr"ci/|F<'!Mzi-w2)M2@˷Ģ ҒⷩP^+!N9_7yA@x`M$*DIKJԼ{G[liTt,VgFNf|۔a*TLjt>j8ehC!f=NvYx{ {{v.[d@Э[@)I^>e z2:a2Ccɀyڄ}"EоPјgwwLz):(IԽ .Q?hjATyj/ɓ$t:,#P;mE"LfM#i BttA%K)$zf?aVUr9S ;󨛹C[sB iQӥ'AkX-6 +1pֽfy෍}!X!J\1C Qvr8]<vRR,uq˶A/#mB8=Ԛ%oiD˚3e ߆b_Zd $ +vE@K5AaVSAR;.TR- 3 mH?j֊HEiY +/-ˀ,rbN9e2 pv}H' U0:k+AC-@uSoY" ;+wxoe>@)$3x]d:"ߤ$%:sn"4F}2\M2` xeL;Eß蚩3٬|;p@oe34Z-Y"%`>)uTDnT-5!9\R֖Na/K.*&#q¾% EEH4r{\sSj$Ŧy%C+ ,nn*,\ڟ:ȅ[P1y9|ҍj$)DWRN^ "<xS[dߏW"Yv"InvE\\XԜ`ũ{Í T ݾ6|ЛxӴ)p|%;A]=\'MBZ|O\=]^ `~:8N Ip+谂fҟ"9m{lVJԒƉ0, TuA`XsQWj ųCLjKA3oBj<9dE6 rh8##J`|{#0+]r +jq^v.(֢u={.VJ~ K v'$L.@r-R2Ao6v2grK@,%+YQ6'+80֧/Nk+JǕe.[sGay'x޻]6 'LL-Yb#FꐾupES ׉}K՘g$'xjݓJ@?~h/ 1 +>D)ڴ@}>2GcbޣfLMӇةtGo٪%QJ,𕇅Z*O[w/@;wY'~_Ti +|-%Ʉ>yAw3w Kg < kM*żj_|9ݑ~4r/H(5D 3,# +UzysڻX݊=!ܷ\+j1|_$~>Oo%3#)VULy;y iʰ.FZ1Ʃ"˕Vg50m?]aجȕ}D$"EYU5c +!IkB~xǸrU={*؂*} O +U&h;XW +/3Df|r\X F>b@ `NS$P>6g*֣X@{ =4r +D'PQG0pRVI(egn2z25Ur OJЛjڊm5e+&yY ?Ije'>.Ъ\,[{f0p-dA0Ap {b2əP7q9k2# ENK۟ꆝ]=Yj2&I_)R0~ piq~Rϙ9]pS,F)K>OJ76OQ>n֊ h27- IT͸f_ Rk6.[lg@`$ʀv'p]yl:ˆF)ŕU&Cdr<99HF .P1q!(w< +#myv wI.n@tJ|u>ًܔ?`Z bxly!3$ 0SM>n\W cp-?ORnCy,WS`*,G[zPa!"X e[?8's͆!>ԪY|@W[X (f&k>MlJY%Rh{6TL!IMQ>b;ZNJn[(si &W>Do0Jkϯ HF[l@|Ӿ1E~RoZcc'8D%!Cq{:koMUoY} )Ժ~dZhHI;\vFީ/`B&lBƩE4("~,*yZ,I"[`t H8uS._wd Q^2$MA{&%.8@i$Y˛A\N +벫I :%wSQ[[(GL];y/)!8|8W-c+Ǧ!h +{  qGߐ-hs5¯- gb9YbF,*[-imYJHw#`3jZjl&e*(mhE\sFHG(P&cv|ݧU/rD"f|k}hhb+9L+rC'- 2݈9' _ IrYLfpmv\uXf!?6:zhSgpzB`,/ 딃#- tda^"T֚([ޫzXIZC!l\hҗ/5e6(qU؎̤uK,7?1a*[n^?mICzP`4HgdVP|f,S`GlPJ$Y|W8,em߹,@ iϓMI]w;#'p]7bqOsM/#5y 6 +UJrsxΉw6/{3 QU˗zC+wCL0"EuV\>(^2%!F>B34!ezտ}avW="!IT> Ie橿4 [׷2g[ c{ H6[.R*o%* 6i[$݀>[_D'CGk +j%R]@ b0n-C&Q*U`慐3!ω&yr=! U<}sL0x*QLX/9?UPqFM2*NBtȱE8dU8Z@AC|iFv c~|$#|]fc?Ɋ?luǑZd(E DYB`n۰LW:3vU,&. +툙Eu}ac*2 4N{P%h:g c0u(n9ho n +zȬЛ…Cc.-$ş,X<2`_y9?,oNFyePZb6q}9?vO0Adֻl!tJHx7$@'r/Ol)AX+Oʝ Vo 1)%lhl=O!FxGm-ץu8eT%*LeQ缑_c{#7JZpz| +v +N9n^zV{]%ZgZURy,)EI#]\ʊуwףY$PJ(3u]'2XtA> *f,؎t?Z $TxbcC5&)'zX3|sxʳ*5{L"̌#5;HϪ/fV/gp~el3m x=U=W+vaR HI~a[.SAޜb`O^%{$cIKYۼhѬuN(+<mF"fWά ?\;-FeJʉk2o1`'X8+=[b#@evN"+;'M#yQsS31SվJLg]X̩YkZ Vb0[4pKNd]PqȞ!2q&,SbDg$p}]wXο;ZdcODnӺ^ط/KL:OJjÊ~@]ډ%+ԉw!J Mq +E ,~.c9@5a|T, +8DPRY9UUzټQ mٗQ#"#Sk>CH,r )^#'P:YDtms7O>* J,EJ@"|`P'Ke;_[̒Xr|7ZR*ύb5C<b'v's*N=6c^Ÿ8L `bC{&b"cQ VO?j@JIQm +\ +j)H'P~AU #IVvIRkˡUWgdz V t,)G +xq!V,]B@SA|?n]}QAJ>%nl&H vD&c_$JҩJeDj~( [ v.~9!Nz" ˯1]tܕ?,a֣^'zTH;n&FFTpdo')Ԝg F_y΅x.Kwϙ宥)(덿3;9K>$|J( $2dK8wԷ+T/5U'eNVC-Vx%ѨRЁßMvRk\`RؒG]^Gi(nLJmυ dc3v[<᳍8S_%x;ͯAd/MN7]dZf1̓y L?\=&_QN'wAzc^K͎Z¸$$$QoBhkӵF)ZB2yLNjK]I/Z>D!}lX;XJJr𬞭-=Qlwd~ӽr^jUFluRoRs[d +;5:OR Coö@wZ|emz4E=ܕjKj| m"'Ef7H)VMGۤ*$[p㞬[jܳy)w(y >Mk= EIdاKm(1¬t[$ -P.k5: +!S|K2T x)@Nq5[rrb_)>»xsA}G#l[|.e Ru&n#n:`ZGA-QI1s_T=ًyE\Fq#mK:L{PgΏp-zjV\sw8YsNɝwZ zgM3kQ@wW=. +᧭?KEF#r2,x)Q%[_5)J2[s_:9dIB ߭~`ZW:62L:$:fVtwtXi +endstream +endobj +309 0 obj +<< +/Subtype /Image +/ColorSpace /DeviceRGB +/Width 1800 +/Height 2700 +/BitsPerComponent 8 +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1800 +/Colors 3 +>> +/Length 21056 +>> +stream +* +{b+[ΏP@7F"]Rdȹ\x;@dz4׵d]@4$}Jq!h~M?Ļԭ5pq wM5۴[ +fp,#>bY'k`uЃ)GKx)% %;7tfסAO!cWݕO9iRR7t2bj9ʳ;2dWpۆ>{p\wWJ4ΞR ++BjUJC-YTQD&!ؗ;` u¼p)7<Ft>@ŻwKoga@dԬі`w%ñJ?r6M}ԟw~LT,_حpR@mQko9 rBJݢ)G;dG +A+%_v>H\!غ +69Pv_xģ٠Cr"Qb@K@dUNe VKЦ D:DyLbڽ?j!3@& !6+u>u9hv-!zv&IK;{1R%LX3A&_W=$ T)֨Vy2)&(cb3H- !Ax{~POa8vy.WyRP]6 +Lۣ`Pg&>GV`sި.@ML6_lE94ލN֦@Vu=ʺ({-*iie spWT_=@zbsK(9;:qp>7Rr|DdR/¡IkZO ~nNȆ74W?_ӥc A;sHQ!vһP{o^'zPAv.! 81_ +hI-.6 {a5ߣ<=n>-7m>hdg9v]GGHD(+b*J0*oDsᒀПmA\g#rrG"L@^ ^f!k,oPhiQm<*q(GĠ=z9{]="`y;i="㴨=l)*s,-̬u质(7JJh&ȟ&)dtsqO)8ȴ/LuF|~rBՑ,kl&uQt߲Wfn#6䴨JEH"w|mA鍯Q.MnA&yzOTGvWܚB"bcZJCA.|# BM^EȬ +2̢2)a}_]eވ5YM1GL?F]DvQU{WxfA{)ܵjy)d2/d{3.| A˽E:)}ba+t0hj2,Ha<{iy>z8Vcd "D$PլƶU[0'8csH%xeSE8I^_Ѣp!}K-:O SI$JDidxX,.[MI2G2g~̼+1)pٯ@WdST+?DmaGFܣbM?^64MmJOq` n|P%?45|K{=cqs˵SŮ/̞__ è!-oZlZх*@zꟑIm<}fTx+Daja/6Z +AY} S 'WkKRl4歼U[P*ڗ?닳 +sn-QUnm}_c/)́+z'MVZ['+26J}xFJR~~0/ щ,Z-mQ?dJ )vtqJsxXY AKSRud$5L7ni^sɩ}։0=Ry"xQEqZ=M}.bJPJ+}gqĽ6jfs=(纍~,m %t9NysMȩ[[kkh3D& צH"ڣwXb:#eX*wCv.35jXHFۮ%ɫ_p\vߜL5BB*AOPQ1`.SL_C6;;ʼn zf#|:`M&j +K:Bǧ4@5=%Hl`D^ιxUAF)OtͿ!J~P R8Hs賋DrƱ7H3XZD,r5HhHntJSݚ.SKM]Z؎v2"|}t|z? x,hw]/Sz{8SP}75뀢&at&sM]pH~ѭMi{0֔Z̋x +0T(JOJ.=SRdOe98H4z"AQ˜HZ ӱ9t#Q[^T~m'KHIyDdtg{F{Q9* +nPb¡>(*TB:^ݰ]-@>m sF>Vo#'{ 1sXUܿUuUzt>@2JĺΊԦ:Gm_Z%О#{)=6AC;x/AC%_D(j_l]NG;c-DͦXUto.<|N+uʜlYB:N%7°nXե=4Gat?y@ia8I *I5"_(NǺ7uLkdIy߯"u#>9۞ȦF]NY>SRs|<|q!d|y@YKej 6u@]Y/@Gqݧ,k:r8[yK,Tw4J?4_!{vkdi\y&6X +]&[=+fdy)Mxm ;WIlSg!&Z PLbYX8ĮC' +mZY Tp_d !Gb(MI'Q%=JC2̓(iSr93on."վK3ȅݨlW"\pl +k$BJ5EbMQ +K3G)ΠK=qB2b}SKdg&qxLEoGlx _m^VCpOgr oWEP/@9zW=@^dwW}"0fFkv4T*7*,c3zHbb$SxyFRRm7+mJV)^nT]3mA5a=IM>qw*ar)6[sw"'D E[jT1gȑP)/,;sA ZpUiZbtєZ.6ՔQ%x^CהRcwl=Z +lA9pw抹}m +w$FtǙI$.+'vHL% +!VN1bF.#`/9HZQ09GauZaYb}J 367i`, + `8EU,'սF>*e`6U~?qNPd幀x4}r! +xf/3{'%珶 `]PyQ|)0$L +ggBY10EȩI8@EZ +COQ-LJ]?AiNw=@eJ7[g!ԟ<ӐVȡf\>F/ q{#ֶ]Vŷ#8Wڈ9'nFjcMVfk5SCFNcUL"Zqmi}_`g- [w3 VDcsHNy;_r0SeJY50iT&\" " L;l1Wgnu)vgEQ7 ~1({]0j6e+P] r]-dMGǍ:y|,.ilGT`mM+uJ~D0xk$W$~Jù'nWÆ=&O(+4 r`c7kJ.;Saj#hs<ދЖcq7_bFˋRT,M u`"dPt] 9ErK#-y[LX0*L/'kKWeM +RBEFsQ.Fe1_kdsyCYBP@'XtdL9uZARUƅ'fk:ţ,rT3<d*R -֍Md'I-j'玼vȧw3ZtuP0?sMsԌȀjOxҌIhr|YUW)E`~.ei;4i0!Z#9߃2FE}{ē.XϕsW]jmLd;K |)nsNu6?z-VTR\O-%$nzC @KBgVKl:AI YϿb'24ϭV?z9X}bD j]C̢KrQpEI26@]F-f\FxGcjKP#{7]ph:')8{3P|lFLk1z.ndY46¼/8Co|\4wS,PWVce|g׮/M< /ƚ Ԕܺ*=- jb1 +oW2cޡ>•QZB(|}2β9vȥ@woXB!^ipoMsIyﰵ 1W.Eqx,tLW+UhZ:]rDMO0|g2 &SS 3ؑ cFBB LjavQ&/0pB0n)\BknKv}S9ޑzM=^OƵ# 7 >ȃl@wz +i$:H|*u.h6l-J=; ri#ssؐQEr$nsUQ(b"OA eBΊ F9:,|>NK&A7bD Odz X|9ڌa0}elQ3E 3^5dB.3 +iG>+6)Fm:5 pKx;tOU|~-ڟ/gD%%DeTK rNJ}o!)MI 7yțaBM0_["T8*sWShC> wVQl;b_s)(Q0J؎8y etxO3aW$<[rPm4LZv IXn#xpQR v_(3d`?>kjԟv[Ε1'YO^$!sJ 2)X ?Kϴ ` ꡤF"nt 88hDbrp59fxv/s.$HT5ҳazIiޛfK)[!7\,2&r)>1Cf=j㬴 ?f475E')^K>z'ri'ھ5wɜ2͓,ޡhJRzX^S}V3~nz%qA0[V: Fa/6g86oG+g/jQ-X٠ + sLD/h}&Gr; S+^Sz7ckyq^A\ɘ Y'Dg70sQ)z+Tb f6aN-=d4 +oR|JITwFk0?`y.)baۡ<̒^L3nrGLdިUg&X_qbg:V$!A#ߢW*rvV!(y bHbO^fZKDMD0x8 !p,HrM!uuCt*?M'@R-JlvF}Wl)) +% LH$mwxl9n吼sFtn@x7$+4zePOj +T[a ^dG5Cǧ7j:!@H UY|Tu0Oa!t#1`IKd3Q)xduۻI > z^KN0Ja +؏c,.Bg͟^'h%yiaEn @ؘV-wTn/ T഍yUy{2~;66EUwb_zjYULV ?K?!Fe}9U ?"~ E}֗ ќ :-0 (Xr7-8 d%X^ZnBl?==DX!O(YGoӳ ?R,M:IԐbNk:X/{Aڤ ` *t_'zmW\򋜴'XM o(±7?^1]uaeyqJ>L +UU[Dxw_}G,,cTm)% `֚c +_v@|ۨmot _'/mѥ|0]VDH>zf*x5z}lM}~6@1zŤdi}DO:kA5!55[C8'?j{EUOG"£FCvDcC +1yB7-}jHAOXhfcf2pUdϽ)JYu8D|]wBoeU5ִ>_ JU>g*&V/Foػv]k nʉP.X ^P,yr/>mQr~DžJxgƃ$ +FV͂)+J|<Vy񦵿_ +CҊLCXM8D}tu"r?<$-Z sA>̢ iu܄4R),fkIBw)`6?JƿK ޡb 6:ݜ']) j_%v@8  Yag %lrVcJ#5 + ,$[ҝhru5N^F L +gG1qd,v:6/h"^JbNw;5Y?)vT:/h"{dv/qo:$ Kc(h~*/أ[a^?4lXriH^nF)4WEΘXC@1oL'?#\n.x"io%$L3Kdr=t>$ssjNg^f!2 ~{m?&cAsM eD9)dqk^HX˼ +u t@']Rû1OC7+YYswm#EXcF<| +<k=-2nQ$cl3Kw]|P^&aȮ^v) +BRKMBQapeHrg !s1wCrD&i Ÿd:$N2)B\hp@2I)DjTj_hDʢrO7,e7d؀HA/u50" K[zWE˰)-G|p6u-f@ZP_C(l8>8 $vSRsߋ!)Im +@װ,RdgWl A~ +(! +9eJj5#]ND <>>〕҈N+8q&bBj-=wn7lX\rӷeC3NTC.i$46||˼[KW1إE Lq}N1kcV eFª>%<3R 4qd5b2tYTֵ0nd9:HE#n_6E)b;DX7]4H@9% vr #Onuy2Qhzٻ Z3U9;d~lӃ޸<xZ[m6:4>R9VNJ5 xULS+Bc1sT6f^aGcjoƛ |GpgMEZ{?Q9$~c-\-v8\flPk=OAS^BP{:H=mݓQ(pQ1PRB#kT=Y[mdg?8epXkePíDKVkT μ"7jGQ\^X6d4*W& +B|C[fњ,0VH'v<4ɝPW"NKof?g|}L^?}+#I kn>x($'\e1 ,_־]QКu7y"FCz]e0f1%]^_u/Fr}/ )v{R2. "tomr^0Q E\0e.nɖ&(Izv)c|Vn hUuN򘪫AdOFl:!M=99<)*{݄HE㌀J3. &gM6Ϳs34-G>8#pΪi nF_ط +ShvPH5 gm /6w٣S_ߍkw?IBNEVkpW)Hd*r0v“^JIVk0ζA!*)*Ьg,+}v2%fdoֳ +p.&XK46\~/PI1>%3 mzC11Z9ͻt,gOO~Ăa{jYZiaPSB+kʕ'4۞c2oTnVُu3&ip$r!iomT@~\x"YYI"o +7%zMujK78EdBmEu=,XÇO ODqʺŊVexS+B".E,iD`4.'W +ͤb%/FOx"~8X| +8K._!`#?SSG1 fG5Ӫ熫vt7b|/^SpEm e$`ƭN#eĤlcnsSeR˼E|Xz c̰K2-QAq _>V95)D +E(b8 jkz +v\ː]9ջ]J/ZIv\|n?&(WAZ6{-ng)B{v!U>THl>PYk]zÎ+0K=~xtGڶ,[T`mߧ JVpqEMNQ0@E EoY90zhB^yyhv)v1{>?e31VgN+Ur7W;sAqDx(YϰhS'f LgxХwǤ.R+'/syV%ੰJbEQǐI5WC-(8F5U_F0[b`D4Q͘ؤvj1CW;=ST&lCIS)t 9 +n_r\gw_giͩik" w8>`ՃBX/p#-E-[kuMPFUs>$$dН5ltw083*!BdBFд!ޛ ݮE=r;ErDJ=:=_-qUۙl a0:)2T8d /ӿxb~eځ&CB>ŬZm0X{Pxlw V"HYW͋j~8n`W<0kRϢYY!9].H7A $`T% YX0ljw`V=ca^5g cnJvx%ix4ƿlˑ/Z9fk;Vh4H9`1s 37?H=mgY##)>uUwdULC@5 %I# %ɸU<( k[8_W"[pIG-K s'-^-GL,:cAe s{>bgby4äd(ܭ˞Ϥ ˻:v&o@Iu G!jry C\qhU*6; +O#<1R~?.o) :[EM%] 8|  [.:{dWz0f es|]B~n< jisFƁJϷKMv ;--D +a:Z@p+@X^VǝC~\v'a;u^3O39MIK~~͏y0 Jò(ж\&'3n|0*u#q8\P,t`}u#)\KU9Y8ˣeD"(`;J$pJN겙5 +endstream +endobj +310 0 obj +<< +/Subtype /Image +/ColorSpace /DeviceRGB +/Width 1800 +/Height 2700 +/BitsPerComponent 8 +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1800 +/Colors 3 +>> +/Length 20036 +>> +stream +M< "DJ74E]eJt jޚʍc}!QC |0hM-`me*ɸb]Dq-+]%zL}=FrF땄 $ +a.J Bk΂I=ݮKw*zX1JJ90Y'*m|"ojC^9ް7N|'On09U s]]_!ǁ9Ъ`Yw4x? q~73&҇#2ʅ~9(}.yx%ݜm 3!7{[}S5Lͨwoً+TGHLҨk(q4.B[d;WuQ#,;HyN qrn.VNNNH:.0$qJc%է %&smZ%\0kv*nJ.TO) +2F}x +>_FO# (YSĹzGY=zjdW1dKFqxQC +u@`}ϝx歮FbW)$g굎 כW.REػc{_;9镴 1[M[v xzPb*^96U1f >Epζ54ҍi^t$0:60=h^, tI>'}r{o&V~p1\½_H&ٟ c/g' qL 8n=SNBMЃl7/DiR&+)O5\IXۄ}|4um5On!!KE]"/\)Rf5X XvB~w^:7DfF0=41gK\̻$ s+ %(u,uq϶m &#ZM'-`'z_O!dT̳*nQv3o(j6 T +wb #.FOmTKYv' EzyB^IIRs L)'n Jg8|}kZjmjY-\o+Wi3\4l<-+h(da~7Q&EȤZm>JhE&+I3 + +tnX; g6[gZ;x,|?e۲9aQPDm9 PV\KRř;XQ۾t)L=+3v꺟 +,}c]5r{Ɇrg +P x$ {>Ih=|GྑU|ZٸCK';;86M e_G$dR08Fy4rn cג7`9b fgW1NN1]Y@*DLB eH:'6LYuoʣr(*,Z̫E@5 ȁ l: |LNIӂMĤԨZeYe;PhCC\ zV +i5˳nnv 8>Lu&#\rMndy'Q#W`:Zxa #FSq+ \ X nss"H|{'(RbgH)@$cIƷ{J@X> |"gE/d4ԝ|0Q2rz\A+( "<Y +^F(SHp13(2"[&mTY{z&>dbbҚχ0[;܏_ٸf|QA!da9Q]'a!+ 8ٶ] p3흕NZX^8@@φ8 4ko~؛2t1^af'3AG/m/x&|}WqͶeA Ln0%{Y*:v=s|ϡMUxG|#E3##"=]N捆]QI=yC +N܊Js +Kn Ic#c#ctR7O_EVVL> KކDZb]$`{~ +~y, s.kFŁkh죳{4>*|>,ԯ2WEҩ+:1gcCx,'6T/5݆LQj,doXT#֕l1FZy <2ؿT^+!).7G%KdbԮu;`g*9.'mW;дWPKeiRB"X{kߥ!G2IoPu3`pΕ1RSnYlW8N=c-HRj ob$x^y2l[d⯠qO2z;q;X` qUZpi-pWG}K$ń~̣7"=eqp/l NAGR 3!Udؔ: ID61} "3Lv̉bc"Ps{sgGj.E?oM (ErxP60QqdKM vsS!{!e*D Tw!T9a}ub6#6 )\J4%.9 }2q.(>6JrqL!\ηF;D#ɟ&zEkAZo +4|,1},"?T!\_B>v}0"m, + (h"aeR^l^L" +N[v_1zQU]oaPͿDM _аRü*Xתj% VJ-݃ {irOWקgW?Ssta$qKb-.)^ְ)7SHAK`mgJ6l0e +p{zy a` d0riq܈^7 G\[hSC6 +@ȵnT<{CлA-~<D{{~ +Ksye"XGP$g@w)RSDj̜;%Uuy+pk;4mP7Twrl a09NLm$$̭<5ߙĚZo,&C,ځVs?rW,BhW?>'mwwqBL 6\bϨΛc>XOA22ؽHg?TA/4Heː':T/ח{ãZWbվ.S2ƅdG^V9ٗ*8EpQjFt<걍 !p-W9 L o 0xD_nqtι<ʀ&!<5݈ZgԿ5Ix|FQO< ~5n a}`#6NK'A!|ZNiۉ7G/0w~{A݄V/bJfze;qᔁH*\ 1Or9 hуY1Y9 u^Qp^kPK2Y/oM #ld\1_T_2!#Bw' F)2rz3tL[ތ u:: `@ 07ףWisRWUIt9ǖ?)US5#6ʌZq[ĕL L%-M}2bkpw'4+G~|xZ)ʁFH:hp/_2Wnc<±aaJw)gUOF=ſ`Z޺8|38 X/E䓄C Ƿ 21])vfxiY} 6AZ*&zƤxM27w.귚axRkzg}`}*;x`h>MfP\0k;!8FŲ~H: >v.)nG:' dfo=ֵ y*0{?Ҋ]$@yC.xR(ZPE^+ U`IJQ\$NAn6.XVJ8"/ro?_Oۀk5QV1WE@n +f$Q]\ +;FY#15Yr8I|1c-Zh[4g>27|yp;w9*u쌴XlTűJn'+!ף|t&1EG2Z[&P|O7qHX.."n6=o{}nѮXL+nmQ)*j^O4*tt"+(:B=tTt)nwf= ]^)kv9OW]d,qO[C/Z G4 X=xk`/l77=WS:xٴt`";m\kW0[{z\uiU**֞ +cyd˾LP¿e3 ģK`^@H.8( au53Iɨj_٠倻 e~$k`zrY)HG~#P&=nw00=2UCeSq=[z?}^$w"|Ҳ=P a^[i1FfreYfZ`Fwd/we;ƩU؎y=`@yar*Gd=.F fJUFq 1R : =Wo:_7d*D6kEoW8/j65cN&3e"8UIo׵M"#!XkqD4Qp-~MN>q4F ^v/m#2W%W|{DQhT8i$f̭}1d0:^>A~~ݡMron\I^(DAi).YV,Y؆fKs8XҠ4|#X'qeH2-لhӳok(6׺ \|MN%)WH-OU4L3ꇋCY(x5LJ4!/:3{*+3;F',v?^c8)}]C it)|xjS[s ߅qWA>Zc>SJlߦfJW`8%?QIoKpDzA.5v#}]abBW24αV*ubGCCe͙nQn6;.N$;Hۜ=Kx;Bx4p2%+' +TRfYD`y)甬-_2>oj?vP:~h-e`o^ yGG'p}jϔ<3o\d1(/>ntr uk@ 0z'%N߯\]7LeTFo)Yw>a+7D˞@Dõ&3ƪ˙3 +'4]>:ƙL7e0?niYx!a* aҐ0߯(bW.sKRn~duaZ[̰;V/UnppAn*NC0*a=]4Bsז߸b^X梛ĹF2PRلnB!u^hy&J.goxGE!pIoK8tIOޢVcFz>ӑgh$F; z OE.C$DgQ# 1ַ&'rrj8ҶfDNSw1:#A'`46LJ9L,aϢ(evS:{wBGz_9믑&[h'w%x(|1nЧ!cڙ`*ׂ1$ `5,H-{`dUֿ'ȰVLr*"X=*b_ɡfؑB%sd3|菁s92vգBY@I*jbA')n_~x샠pE6N{nk > +U 1 evܕKVpb⴫A NN nX1cGGIy37ƇP_Tlrf3;^&B$A9ݳuLDvӲqUPQtFQƻ5eMOJ>s7*{' 1X:Dq2Z/*S(WgwщZkNږQŐrv?QHliAm}2:I'3v" QP!±l` +sԈ4.">(<#0B*}r!ԄMR">GN7-a!Gؙy6;h&h]?J"*I 07>n BLL +ʤiķU={_Y| SA)Xۖ9e7f1fG-E@+<bbS/ɉCDž~-z5W;KCbQ2lK-fP#ȧ%n֯}'*gnaN^A;ԋk"<^$Woڅg T:٬Z;L&[0Еǩ*T9oBНG3ݏ׏ IZrP0@ͼY!-:`=[4v.yfS>In+<\͉WXHՇ0{ί4?{?2UPR5\{5a.@ )C93v—vpS]-Zsej)?5{Y-솆acۋI e+wxg#WԳɢI$goɭP [p}g_yCU:> +i{y;6~OA66kq1lFE"(/2x: hզ{W֪LL= h=+u9$"f +7|LCQ X1{@;rE7؉qIpU? 6:,{Ȑ b>z#+E^sn5=M'CW;˿ߖw`F.\D!T?`3Si+@U$=*u*OO=Ψg/9L/UeD #|*{6XEa*W6/ &笆1~1V>@{,rEn2ыXI +xYdD6*+" FO>̪-&&?%K-HL9=)RHnCf;xH<?"1ͨ VL2YwPr"8W{Oа†%@֬[%`\Ne1q+S +şI'bgQGEe5wK> )o"U$6FU#v=bH-^n&ظ(=k +֊5i $)(Uu1w{YFIIHӧ 9bQG҅?$CYS& ֱG7<>򴐸 %vµZ5^ln_w.ٌL]gMKg:6S lZ5m蠍, (dk;Koڳ5Q~}$@yi⃜{Htq 6k#.޿\I,}TbBIWz56o6܏} ?&iF&胐t<0BڿFX +&fVB}пF~K2CG:;j-ESAg9bꁠ8}BP)l`zw1o|,UE"3Uil=%deg DӫTY U!,Q6C%iԁ!>D]@5 D;/O/,Lp[[t%_n<\ZׇòR,·cf  qefcZv#Bg)BחZ[Hp$T¡ᬋ;7"fg@NrM5$ r|,rMws,5̪(YSt!H$ܥM[ȅ9^KY~ygn.f7j.6Ff9ү2^'_y#ǀWOX*Pߟߦէ&du{?ZM+-u=mD bLмr@cf{UY1D0ŕD7LOadw%=6Mf^,²$@T).O(v2*@tgH%.ibdT1ڸ-0Q ?7f|k!a|ťz ZA2~vNqx 4PX&ܞ `evy z`{ɵe1k6l4g kZEit̄Lrtfn|xP Qq\{K7ٵ-tUT'TܼWպ3}Ynʔ u301(A](ULڢ plboDKR+hdM`.2.Qq6TEE@^˵r8{/2d;xZTHT"fH +}Fΰ0a[K1Ԕ eM:9 }Cu ,1Csl p>$*єU1IG n 꿋ݡA=(u}x T(AXR13^RZ@)aJaHXaGD<ˆs62IuTD[5<*:~j ɯmmǝ8sӡU5+)ꈇM )CaДPx}'@4$Q lBt(6O𥲜5!P:[Ś\έXBCfP$ +Kޢ1![=%+s>Sy[K_S8*P,ʾiU9 + ֚}#P-ܢx#vsy RNb-Dena4 _'S +`a(G!\/ZF"oKcȚi +A3qYmY+bˊKnOfx]/جgOkKQK ++w zqj&уI,/i)Apwd{g;+pʣp(%`u9s(v,\v!5#$jPMK6 .2# &qaL0bhNTH`I9"q |"߉dYÄ0<ϳ4iDQuѿ۴8)}+ɍhVtnꘉhTa7/Z?[uxf8>K{ +0a%Qpje G*{o.pKޮd`[.J&ʵ..S5/< NtR dWu6A bBy vKl4Ͼ^eY{ Z` ?|jrE_Eڞ|=aC|7QбNry l +ߐ1hbycZ:0Rh4Ԏ8 ={=.$NAu5G0f_{ &sަ@Iڏ+#kxg~V3 o.-G4oR^n6U|LO"#'WS?M6c>~S8dkpNEiT[5ni"CBGܷpi%$܏S]"oWqV:i~'&Kno33jdʊ hw}Du[Ewn~8LS)*izV\Y@aaK$ӻM5r$2!I)1'5)BMI"Cv۩V,bJ@p)NMm;|@VǓtr=~w +3z'Ka6r3um@saQښdu7dt CC֨"G6b=Ox/b GgQ[{wo6dra|K-,^\6T-IJ~):d(e0uGϡ]-I"Iحhٴu#h("ne,$L#0e+IA2sƋ)y"ΰ2oB`&&GYYW)-P!=cl8_ +Mz;,-Yz`lfwft܀vL뗋A^}8^6y* >f.Al7/~<6ع+zlԝ,m!pў ac%*,ެ` TB[9UdKpVOTI* D[~LAT1o$ܯF1~{vDEV%^Wf VQ64 n|zc˜_Z׺ʚ!d?h|MBG=ć:&S2|d5DTZҴcg:8}oAo-cJU@TF@Ve0VI:>,uu-+mmP--GA+WXi]_>x].K}6o Y =4H6,ʯwsm~%gPQ@&M\䗍(H=5I*]Ap N6Z.Oґ;AT`DzPv&R\N=i(q9Ϊq}PrfvGJ +b]XĀJ}6jI=zƪ q0<- PV~ҥ]Mr]ANc%w=uFF{8̭_g_KƆte8&^^)~_biǏ ݟj + %ܴ5nwsMH~rp {Żs/ݟ=2ÞV*Oj},'y@|WMN3Ky5RUsFwN^2*ERq* OT$kN :dkeqUejsg̛~JБ9!tʫ4s!9F&9ufVKdя$:&V(UB@Hr-N o +C f%t(Hb+] ܶrPk1#@|%@gȿ<BG:R/KX"|FFQV!:en G w2dsigQ|m&g砓/I%4XP`ek?6|r͵κ?zmLrF+ht\rm:2 ]J +RNU&bӦ/CEn{y+rQY2Hc 2=oHIEEAaFߠں+M{Xx;({$_*v<ͶZ=ي vk٬˛n&k%ڋ6J ]۾M宝ڐ)UK.^KQ;0Z7/l{i܈.6̚qTxsfĜ%|V3*>V]}]I"A~C7u=ywM%uUb+/dE>/NV"FunT0Cb4faN[dopq^`Б;USM5M;5񂨴=1KTX"_\i3edczzOm$34wq r~KGz$͡BP +uńLYlqt -3@'Q]W}1ֿj4$&!9I&+p8xZN tP1_obL>aUUws3(SuXaOffs9n/'fD>+eR +CjjXHc圊mę +ܱm_ tϖq@ +endstream +endobj +311 0 obj +<< +/Subtype /Image +/ColorSpace /DeviceRGB +/Width 1800 +/Height 2700 +/BitsPerComponent 8 +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1800 +/Colors 3 +>> +/Length 155908 +>> +stream +6G/>EpLY(=aRj9L,23%:e>O1q +S $f3ݿ}BӚc);ێ쟾AR53j&)n';=i\b$ f..LEpmޓQ!tpRGyTJ;O+O00'٫wߔb4}nLnE_V㫎RԴ#f˙?y5pd͠]Z]}=5], +D8 Pe 1kQXsD%YrCEQV +Jњ/rCjS*kZRAQtѓ+DΖXgqW{jkt>;/K,~Ru9i}fź + v9,ab*0q*B>\ԺhKh5*I\QEiUSga)e[_gsvq#%^.P`ѪOdKiF#u&h~=V&}QsT4㺑P?OΆ6DBVV 5T!u@WmeߡzȥԪLdyD ;E56Ti2^<d/gVGHT* O90̈́ɉhMn\[(/5sv6Κ}~ōB(v'Of{w܇JHH]/-Q)> L/~K +WSzXm.ׯ-6*3o "] aa:CQ d.5DŽZlddŃO +ueCHw|watחւ{p.7aR8IsOM%y+X9 +OEj#O7;Ep`fE&C1UM9.ya-9Y0_{Ì| tr![DTa~ ;4T[}?ڈg6zJ]\s1< .B{K):@|2^6PgoEoDv%ڧ*܊e:>cݞ +Yvrjn"h"wXQ{_2gy[J?޲ošCQz F|l[C8O!iX bH G.,/aTQjV5bs"c v^]"w608JM>pbiOdZoFLR-蒋6X~`2qxW>+$(3ҕM߯7:XnCxvx bò[6蔢 +b:͏)=A]P DyD\J?=V`6EJҋgqZ$uCˆ + qy/էԅsRpR+w#DPML Is8)O Y7eJž($"m +3f :o}#z  w*{`w.߳ 1V 4[BɬZŦv IRC`w5㝑Y{^ҵu@7d3_xӡxպRc5Ln$Өɠ?KFĸXI2бyR/8{j;ar8(ލ^m$'dj8V(7v0)]rDb|vcTek$Ӽ2'!TSi@(6RXnexe / 0 + hV K ^g3!x;٤cF8>.KXn 4qv +Z\v&ǩȬpS>{Pi~B51pMh?m#3 +LƸ Gd,r6K('V,SV7'YRȎ2}gѬtj} /1Y57kNzAk|cc9CTHG4n۞۩PR Ύ`| 8ifr՗wkX|y(عHHTA~NK÷PZݰN(=\1v4ubWtiʫE4~S!L|WP+]}6n$s`.w:Ew%ٗ|Z"e_ +VeYܙ4#܍;9>slqj܋rdD][DZnko*1$ 1XP1$`,O'm +HurTe׫߄ CB@F20W +>pnWo6W1Q dCGK<3+%B~/2 +b=_I^OW#NW AtbR,Hrw@*k <m`gGtlMo6Sr7mmFMKLcRQffe=P_G/x ;ʖb;(1 WAY.tԷT{tX!gm^9JPl❵sap=lFh\i>[i0k/I:I9?$W+6;'`iÆUKZJ,<yʨYbAoCƷhx%=E_VH3:lpTDG~(^]?,pz1:/vqnf8%;͟g"- +SᲕX/HH+{zrג"u9kGL:4(},&bX.ݬA< `ol)L U{czR#NA7P|`]x^NiZu()86'"U>rb/..tGR]ֳL֒\9: Um̎!Yl^sqL>H7uʈOe4}eG]V$E%`K1vmP xl᜞4^ D58'~euO􎎕y?ܐΟa|XB%*u?%Q꠼K$h!ZBT#'P3|˟:c16Q;q~ +Fye'dO*Y#љ1{C=8󏺺~OC=-ޑGCvLz`+%OޡXC|9)hWG\,4]'63׍_ LǮ{8YV\r@5:Us;ajCAi,VGᢋ;HWQ:vܲ0q&xjN>~Baݝ޴n3\xCn%Пi\|ON +jstyU5ģPg! Fϣ{!<ɂ**$+ >-qZg[> i&!$:fzưX1ƌڿ(<^WHֶٖ#M%v4^ˊ3TǏr1T|V6`s9o_(ʣsL'@yZݟtny`\b$cҨB{c4?&PEO*gϪP\V@g$3 …s!y3O3S]16% +EITu8[K։idabZivC,sNKљSeXxbs:ŪRVQYҚC`^ѾuviE=Rw&Ck2@d$$XgiS SQ%+ofʖK"q57K7aTz%ʕ_6uZEܑcƟgu [) z+2,u;G6NA9b'XWʅ"6vZ<]M2+6Š7vLKb_KiЀhI)YC6M'#J$ǙeآDVP,hb%f[[SFiNσ48lE 3Ӥ~˱\s!AJUH*V/wo` u]S:hP}P%|O{RaIwm0)SlB9hHQPО-H:f9_/TAҚ *Lme0aT)L^I0KqdҖpAI6I +nF.,aLg\)*D]AFJ:8dJPM@tu4!ـMj7fpNJXDNï0#kEtLWӅV,WxPc9ٿ՜}\d9mb?cDD&x\5 \p*jF\ĸmؽnK&G#gP`-e pŦ^D[*jOۂ܈WmzE 2t8/UEy]8Eh.3qd#yOX%ϞKLLz yO9ν쮱eImtqo#Å={@7e1XdHCu6Lt +K>ѩz̽GUgZVԐx9r #Ş/;(UYiv^MR;S38Rq!ߧ V'jLh#?""]eK>Y9`n!p5Z\Ae'(ٹ3Ӑ\C}l%EJԍt9IF1/*<K:c#f7D+_Yu:vIe[͆aθJ1j^!jS1žZVDPt,2|%{ (-42.Êah$:Mԩ +I_""x^37I]?Pԩ *Гm}x!Fʚ'Vgr5aAk4U'V@9S?fv /eءOǘtVpnx<\9?[i/y] +1xIgSXuc/ӎMP_*f8ܗ[/sl,`~G%9aB=ڐD+o3t50T܆|~)wy:H(Q&ٷAN͇_jYgNijK©/#a{_˿7FSݍFȱ{mPG>N53فFOSo*61}|WZ]㈄\K,Hȱo]jӉh=~#.U@ 8Vugfjf*X;ut嵚h -Tg/@r+_7Ey\wmx"Jac|E~=e$E,@xR+Z@ѫjȃϥt *ᵴf+Kޞ}x/D>A-ԑ%+8 y+/\k2XF zE!WD4aH #qӷ"򽷞0WzIv[S +kGf@71IBDGZqhO tU|㣹T2UKuJs.v`ī▓"")7lKk10čyvh@Ւd+(1gCu* P)K6ϞK{͐E-,tzF(H7 F 0]U5_*3{Z:hl!)Z<=cyX$/fƮG|g]ss>M)pȌ?‚Vh n6g:ٮ,k  -ICc:xXnab=1_jޮ9v pe5xZ-4!BX, bBǒ=$/;+"sARPSx(K4AkQ1l=r qyٖ]YT +k?4wDF(enj-I"P-dn~+X'lN}_ѫ.7)tJ,LrrE\U+$d@LpzJg\'|Rj7a6/B󻽷e wɍ!Ae_d."3 MFDg"J`,Fx.āfbH|00Z2Y)SXϗ(ҵ 썶iHr,ۮלs9a?A=IMw5h#qEESp+ +a.Tr:;DZ%!~n: +l~MɁCl8PM!kEٵS_ JNLbh(^bv/ Y +H#cѡpFHQ3:2-d`k;%')k}Lx8?%9 uf_6nS}>6x3R*@ 5є3V l,Wf9T8yiJ=D[;~asY2D$7kʟʓ/ +"0Oy#7"yNF[>ZKձn`!fE'5ֳdѨy, e^b~dE*ɇBn񼇑{*SX u)?6v!{;X?% =|L8_ʉ:jE(E_41~W'4uԩ/YGw(YxxzqYJ(ܝTӖVwj|.\"%<5&=n׶ @(hC*MV?j0cVXfa02A4krnȘ9~G->!Py,F +_xpGGp8 D{m@aNW4BKVר)Lek" 'T+XF%XTy@ + W4ݯSG~b{BpΪ+.Jpa^l_`Bc4E1pǢp[_^ ;M&c†ɚuc*׵(t%Y޷ lй& +.o$|-+*)@v"ky\{ʠV2i"0=+~H63=="&CL~t] +}5b'm;uOc'e^`mKmВky9Gr<L{MVw<8xWm Xv9?21ۚTAVMy $ hegL: #U,i ~>g`cj OJ@U?lmu@QKZzox7}HVr۟K[lWeq>Ys,pWJ0v J(֡4&yoLx|HC;< bO'[<1dzp~xxL9gB8J]>j<*9ЛJ·ITȮG]NT9{j܊ެ?guSҵ+}M6jeэP\S⹑,S4H~ͺWW:^_S 6,ȋ{Žd-2j #s 6M9mDЅ7Pn c!8 Ln#P=]4,֜%AXHR]VgGNZǼ>։4+B # v='@74, Nk;Ugs*0srN0uS.׭BL%#VMCjsС-M4e=^GX1yAw[} 0LZptn5/Ӄ`GBLa1fR5w#{?uͺKl̖uR)FgU\;krAeYIuWl'7BUQVc/G0;'5FcKG9\WpT. $ +΍if>J~%لC 7~QZf[ ~H205g'3MKsJQ}N7gJ\Z#q,8DII#v?ְP c6DxՒӵcy}w[FS);Вn~W9Sc7淛o讍-Ǚw#ɍY;q ճ^Ua,k JK*WZYNdE8De$JqghLX58prDΈ? zfOd/oNo~$H'o;k탢ђ}ۛN@Cgչ1}/_ E&lk=a`,,2_ .tl; +*9t6cVL\?\6s\}e) _pzoLϱS >[oa&U(,IUd~x8ɗp$o^,>Txki|kc@~mЦՖӮl +Xj5E!I s:_-F2Yok^nW#'㢆tѕ@0˸ZVb!?1%w,HSъ!Tp*,TSQԧ&cmqJeW͹N$GpA|9}>!h9ݜ*6FݙלYXX~nş؂EX}|ފmwy nb>sz'Z1Wc}"ٌTb?[Ӑb $s0l-1#ş k8$pGoB <ǐiɔ1.`lFa) pL;i1Cvw67ewwzZ8kвn(W +^I)v=ۑWʝ)z`7@P00Z& ,l +K~x$7}C(H!?=b&b +(`62Čbop+m2M`N%s]d$ u5z*Ni =\Mr4%aۧ +:f_11d#.EҺ}0<=]lM".8콜OͿ&,#`M4DşvS[$N FN@ک1 AY*t +D% DIΓW`emWUetذQ뼊*ٴ 3*f[Y ^'9ѕ-ʓ#L̡eW7 +n;.r +Ьq@ugVAuħo~ +n}h +/oR\WQՋT\qsLZ}TQȎ9CRB~o&<ܕ,au\ӷz_%@t4)dm ա nDbZƐK:#y:W ;WӦ˭o1_*-f85cv6Zbt{(yƧJ?viͣ Y +Ief#P1RZGb[ `TXcZfSqp uO};VqcF +*!HA*/^%PGis0u>~-Ce*kLHm}0̯YyK"q7DH* Y+?`> E Z4e ydgx^yPھ@8?BzYjƒ`/@ + q6}P7?yDPsίbǺuL*kE_-#Rt%<\P#DZdZZiĬ0ʂ<]Da!pr<,6ꗋ"w<11ON/2ՊC*t8֛8)a]7" +(^??OZt6pazDOcLUrgV..7:@`'&Ԧ/2K*j\C IEs&CC5fw[TVwuW8Y$8 vZ f]CR9Ewt/7cێ`D9#djV>Z/aV?$%nU5Vig|3#hBÇxoOE}DؕmVe3/Eں!H0:+`Grg0S4\jF.Ղ2r'Y9ɭeӳk^ +WOJr ?PKGc! F؋Na[w5K'bK lB5lLt1Nzxre9Hr +ԪX*RKW%_tɐASŒh!Yd÷V~f2bxyM_́CUPO@,6뻨M:Cz߃73BK J6"WͼpARmh;100%#[ kdGa%|A,^S]#+j)Zz1RUTGPw!/)q啄 `.> ].7|j~KALEL\DH^ jv۔85>e;m!0lO0IeGĥ1 m9ԤW:ݣ]y^ܦٳ<,\-ϥA=ۣ< Ydo}0j| $lF{sԠ6D(s'헞t +e֥}͖"QLb)"3ne a=,, NlO཈qΒ$Sߨ'ߕpܪGC3ڮ k_9RhpMC;Χ")FHJ. q.<ݗh(2"j(UKj;T"ЩFQชiZ5w + FhkSM@VkC-R|}p_vq pHuEeub:ltpW.ZߪSX ֌Oa+=~Xs:"r8 +"J1 h2Y'a8mqtb݁~2ZW XrC첀\.U`<90~Um +buFl[N"[hm{<[!Z2vCxٓ-%=9RhPSkk]t  +^Yq 3 %VeLr[-nC>vA;aaT$З|NQ73AAI<`62cb|T7{sJ:o-E-܀AM¤,{?dW-؛}mtz/-BYoF ^Ol3PUv2Q`ň8T2L1#3ht`ꬤCxst$e"7d!t(e! {'~hB2C5蛅&XEҲ^/R*cD=m@FN,RX(tْw>?yyZ>; *n(6N"H\`AU/)utK,'C=Sr6SjI!OSv;5 <[;  FΌsc_N_ܘ`֘A=oTf2`*7?+Ϙ|*7snndL n&f_J +2Y_tZ=p6&8$ߟAgO;T6DxH]Wy]Qt)NC0Fx♝{←Zygp@_ΐ6,qw}{063q!IIW =Zj~C$ZeM87O ;Zɔ ^º:kח?ghuf=O^;MqoPn1de&>99T'uĈv?31&ϙF7رZ0[=:d~xDwF{ #җiC,Q-:(<3T~PNy SīM+Q~d`/A*1!FʢvTDZYEvz=ū{=TT՗1.]Ϣm=BK|z@S^>$|!w"YƆae2 dl-ݎnBb+xVwIǠHUX~q{l̇~KZ{#G\aV[ĈSq),S=bܮ74}eaPRio1ǕWҊ{o yl=Zk[ +uHDLR3=Oq _`F{jj5g\- \(ru̘t*7?%ȨVO̡io ވ?t]m5҃e +AmoS ޠGJbdk +!VS;d[HZVH]3P wYGb2Yuw,Xۚc剟hx:LR&cD0ysJT*2\GIS);PS D~3䟸=h_ p,]\=$ +4|k+UUvLهu}$j/<;_x9P;v +%f~C蒈Y|Oʼ=jW(d#!%09`r֑EhO r,z)8(]g޾Ro /!}@{OK}%͉2h0qr{l72t43Gt<0J ;j(V5c!p}S +H +fkFX|Hb$J=]iARNJ#w9[MlB] 1oxs5 9W慢i >@Pچ1}j*ܞ8fYj ZZdS۵.)Bq/=l9ɽ?[o9m'R1 xHQi&~ )soX@H9xhkyJs&5g\|KxF}3\X;H"7Y1rwzؠYA173Ǿb.)ȏ +[!7s`>*G(>Y; :ar{ +v=< N*{hgsVRɍ1pwg0#4GG,=uŲ[98љMjE)b8xwUxCEZ'ai[fyam/ܶ3n][Ann4gnט>z 0!nPbBbh,+$  HpL\t.xeAP񥍶 4>\DE:GiYD,>^'wZ : ٴWWEYPo2R!+(Mg +Ik n `֖!]kw[H<~C7g1pEh-V^db:dk~ lU#wZ>0μsG#>ApSa3^Z*O?'ܯ-gzH^;FxB5 vrѶ+_4ܳ6::'QBHSkVtSZvr7At9GUv(?"B>0yZ}{f6YW`,edP1*?ḡT>v DK6)NPN=_E{QCˇa^ZUfg._PEZ4 ۟Fxi?hjHaPܑNr4𽱝[~d InǏ/ҥ4kK`A5 +eN{ `Atcą 봦zSd1G-&~N]bK!6UD{6iWсY޻)_ܞLC|+֤GcX@F4 gY +@jjg ǍPD&*96DB!ިeIq=EE D$s[S3q?A% +(Nn>&¥;P-ȍ,EQR8C*4J(lٯE§(s_B?m rS<ڏ!8"EVe4q3_ܴ濬47MLZȵ59 m:Th["\3.~beY +X"<'?egcʭ9[X$@ ǘ ^7_csV\+OGm|όAlyu[ #@;@K1O CBǫZ]EP:'90-ZQ1'_f·uZԎG27#Š"~F7/7dypp)Cţy +&VMܐ>yGDSCb#~)K:IC)R/jI6I<(;ydqCD(k &|X@KuAỐ-C^?TTAznCޏD*ӷQom6'#)DUI 3~I#9 }Ǒ-S\r|{o5 VP)1S-rǔ¥b%3"4>9ȧU&ox}WRYSAl?O*w'[vA~+E!cDe.덐wI7kPI6i( +J!7OJ^"+#}-o.TZҚckߒc߂nw2 +O^L7\b:t5%hf)d4}CU,Wa%B0ke!R0m3΀}$_kXL+n-rupv\:Ty:zT'_e+ޏ&<)g?̟P^ FM@{DFj[R%#f1){kw?(/ H3v*~2@cQDF,(2qX:kcH +2.nW},)Lj(>Qm{t{0Fc@ BdS9sǂpq$ @!o.O,<2٥t nx.JKWéNuŽL6̩#19{fW?Cݸ%o+Źw"OW*$L|[^([5r/`sI$ydOHQyMzRE3:.*/8WY +C>g-IlBvYr( 5]Y5y.Yz0B@ Keqզ^) Kyi*+E:䐎+qz.&$1GZ͜?M <_\,rxUjeX ="m/Ye/6E*o#2N SüO\|>&F{[iIi?!m],sWe#1ioCuM6,Nh)d[XșG5xAD972!7a!.x͖&Peleḷoʠ3)sM!ky"H:x! 0%uZuO_C\Fn,m]K/$RE >qԇ5OY1o_`IL3e-7[ղNDz ?:kV{BJ;, }/;}@^e".V<ۨZ 4[F֭E]yTqf)JOLm7p!IbsJSTVt7c(y]lc,މ# \PhԖ4Xd=orpXlGEx*fR;MѺ7bAnc,7˟7lɿyR?x{墫7V{rGracާ{T͛ZAJ:hW/{@Fo9('[(J~Dسb'h ]sVϹlEJ\o%2/sLZϾ9dȀZ) IF,VR$f5R?w[Kì%(Z TY3#kf7ܥ2I<)v5qr%^/ bC3RuBT$NWtߵrdq;HG&zW2}<=|5IC%y^ْ6ءŀuV6\V += +8fC|3h)DU-n` +s){~- WD*u} 4ٽs5o L93sj%n)$Yʹ"qX9pg.Sv)ÒZDtXR-mW_;kan׿&Wĉ{%&hK{8Ƚjjyc yzMW}8KVGM!0q;+l2O~`jF1 +92MiAdں-}Sm_(K6M܊L90C* KսQk&Pwk]y +&O)=C}bC$_|^-"=@RC kb#hh +5*Fq* Cyn7lޚMwH!v3=q}/JI Գz[6?u +Emp LCX 9EIYa`[9pl2(#'d!=+Oo'two('oe2Mvه!H- ~0UV|l2SC?',x cMZ!Ϙ9ӯCgmNX-89 +;!qø_qG#QS $blfSv~[[dptdߠN:#}3+Xv}Eѓ8@[+7r-ݒr6qinsee= &ZĺWqܧ^ݒxJiqX7߫i@̦m8.:YT__BlOWbvPU1B\Ç[hlR=1|0Z NB_-JK<=!Ytak6cc֪qiC) +2!tID湵-j2Iwnqe<c#:j/0dÔ-h^Ln1ixxT._6>7vK/MkĢ܋%{h]Wl).kDCo mP@[Jjv@',T'6eT= !ܟS@ sI\HZ{%9\fmM+4P{"Ɛߴ{¡$j +7skHfᱳHp|. [`Fk+CZKHz`˽KQ&3'ىc{mj%t +ͱ^2T[,wUǨI\@`kS [qq H~R300 N*u +_xYG4wVe˒ ŏnܟoo:OlV(j'; +i7Ya(kֽ-|]EQM6WVdZ K)`B+G2+OgSNCV1JBxY#hGPSxgz ,.r|ؒjV e`B !_;|RB[#A,C8\vEm+14!4' t,D#ԪneR0u^t˜䇕H54MQFl@s9I= =R1eD.d7%vPit%Z}' +h>?eKuX+u ,<吟6۸1Xn^c(w&8ۑ) f<"%mDT NN*/ڦ8Ukgy*hNZCgy>nLrhP"bţ{Ep7I؋u[%fnk9OlcF5E8I=S}9i*w'#%nJ|fr|%O~fuޔxە?i 缨ʰ >Y:F]"MI:Ć!!dD~K'lz]NΑM'Ȃf ḋ%Xl8GIvFkSm +jɴ\> d&@-<(btVٲR82tyg$gp5&έoa٤4NsCLȌFobqbV"!S1RYD~8ƳU]-Qq a||yO2 }E;lNv^1՘d4nt}W0 m2z֛ ~"xN)֮ +O4o6rNYiB}5f^R L}JnHdc? >MWo6ۯJG jt@*=jpo~._|[&>H\X8`-K-FbGw0G݆t$~fިHm-;VdD<?Z2Po UBeJQ6R'2g F3@mxg!FcQDQ<4E';q҉2FHbxI4 *\̃0ڛlFRJ|7+;\wй)inL51E+|a>ڎ7o_qQ9}%/ԨX&< +_usW}*>\w26<]a *\ګ M k@&>μN #49ۊӥƇǛ>tm@Cĝ]c[#}H)j6D)jBKb5sB8r 1}I͸,Yx iQ﷜yگxks_{YD)8hEL`|wJsa5C cu*xSIOnJ&8L..3kb$$WdfT| ͇_.Us mz H/Q^R۾ʞRQ7e"^ GA\dE{^# DA*R!Y1Ϭ]YBv/*g(T`@a.1OLsZaڥש7{!VW=Wb.16%ΖeIYBӫKdO!qs|KMS:b`O56r͢E!;M $X?rG~C6o\y! a' +s B+1NgwF)4--;@R# A, +DxfUCԽ>.YW7* +,ޔĨahVQk+Y';+95cK?jG:r_ES} |[/ۙ^e^ &]2WsVh܃oևwSSU.ǐQ :e;ئiX `YkbYe*)6gtWq8M0KX sX÷Yrq u }fUm%R#iVj>%8GDB?)$=5?}|6#Ftb aRhQ6S@7NW p[.Z eMD(9ôRSnbYڥ"/ \4l_͈PĿ|u_(v]*x @zJ׋b/CaS?Ϗ;|.uLwOm%3otZ@IGfKUm^DCJ͠ +7g qgB6 EYCZKg 䫈$S3էw[41v[cX0kʔB)CpfbI}14pN5ue2H$~sQ_7Viؙt(`syH&\#:S,3VSxh0 TU8CK!&+|,NZrK!qH!M"R@aYVc}΋4hպ*=Oˍ &Y]aeLj_zY[f$ZA&&ʛs>k2>)bN;ОP{`OvUp0gWoo}!}z +Xf7%О20:KBf~)ӯqhyNN6!<\{6H@$A܊8aX b-4l,))pe$CpqYd'QN@/`޺~ b5gK +yѹ=M(noF LmZnQW3wP]~sw}~qhxIR" 6R g K0vҘIHK21)Љ:Uk@$°& n۩/"0VyGh*3m щԜ.+dȷ/ꊽv3>^pw48NDR|䌁@L J.mmDwwV8`N1:ב^8.]ط녧"AƐkc,(p)v;B?Шw/FqWZD<-ZJyTaF\de.!Eszq*˕;1jw`I{֓ + QFDxom'6 *t0p־"cpXQ7Ġ2GCnʅ-8i$@Fm{:!ydn򴎾O@e3'Հ=IfE%vuAM^O(pMIBm ˁȼMܶ~ +lZ_qSU ڸؚ`2&.L%o^Sߪ =P>!&#PgǏlUN^UB@W֟ +@r3!Hܴ4?"F`qʱF/n"^Ojr!F~z-:ZFԹ6[R C9I ⾓Q'מFh]psaO/SZ!=6ޙlug˴>w[^Ш: D[-i"Y&dI m&YX9#?G-4kSrVO:R-_es�]܉ + M5׫b#*QF+z/{+-mmwK.3S#SphtA[Kj[۳ܘޕ-)e2=.18ј8%NTR/ Ϲ8E0zb +n8f /ع)t00_0qnI]ue}ܸm#.D,7ߏ3*9FO0SVTgkGc@oSZŒv842l#W*dbW1ӧ/Z‰Oŀ7^"T)H㷰Z)K#vM,t4>':@FRaVt-p#B PŃV`jC;>b-^ghhs1D&<$܀#4/vTsS䣒y!=`*?#m 9L_*Ur鮋 g ,}H ,?&(ŹK8I9.Nmƾ.p>A%HrXfcǑ2~;6;&xbpȒ.2m/*\!(UBcrx Oi|* H*C$_fCjCNйd +s)c/{wxv'7(.P@XcfVVh@ 1"g£/{~[|zPYݳ1`rZk~ڧ^|pu)*"JL1ᶇ:&X_ ̾]6 0fh↋GLӑBi)\h4L{F&[ʮĶ.#܊(z.%?*ᄨJr/,eNiH;L]t@UM77ՕN(%'q`p*[3|HLF@D +r]9KxSpV +9yh#ODȸA6Z,2]ִM#d)iQۗd#@Yk+3?K\sךJZl#2"H J$rdx8᪲ہjL%;~AO{Aq}M14zX|NJ(-5k{2t''D4.e*sZφ@Ғf&鄡I=Ƅ +3܈V-U (޸"v-{W#՝âG>[?g-~J]{ -G$%e>W]sRfi >> 9ȝq/+\yjCbO-ե;&+]*sVtŔ_( N@p`/>( (BoH؀ 2<"=VC-:tѴ'Y9'J3rm@_uGw QѝpхT~ʦ>[\4EAt` ,F!H[ׇCw W9y!Zt6Nyuҿ iMr4i./}BdP:P(إߦT3תő;?ng mŧ^}\ቚ.ե ۸kΣ\NbMfur" mU$G;QG|x XrOt[u8W/+@kSB{Y)l< 5`;5wKYZb%KŻZ-11N kGd32ᝨoHt ڑLqfZF$f1-`,A"d4Rmi!Ғ1BwVEO`1.pZ+o׫:Ra%4ݟPcc*t1je,P-+iqsp'hE5D"Pp|'#c8v]Σ ~oe +1egB޳=fgBǘg>㊃ϯ2a7(":ZTfU 4>VʘD-M嚉1a[">,B-v!tGtgۜn~Q8U_UQ.kZܩ'zHE`bKq,Rv22QhBbQ+cP|Ӣ6=-̼FGH/r..DM+}~Tmd6Q3ǵҧX\>i[$(z:JL"5𛆶\02wǃg=`Tuf>DiT,a%y*kY*j/J"q +g+$o`qN+k@huJ1pow9)ehWZ0-BNL+jW޳&ぢ$oy K !;g` < 1Z:dI]>KL{b":v +\:㜎W 7-hV^^heɲB+wSX9XUQlG-Jh, x9$zLhYs.T^mKv`0$ OhC]Z") 9XRc-SCMO+lÍ0L) +ɢrɎ u뵇rQ+ߔ )yCۥ)Ty*]2 V-v!9|8 `Һ~؟AIr˰^w@6R' +{)ے>ӎirb<"bqf ,/?`_Rd5N_T0Sdbyi_fie.1"bR6M\pg +;UUVu%#׺ rK`UVU'u=֘_k$9%aiFkCKKQ4ߕCpJrR GCB?nQisڡĸBq'fO[8BΒppL!D(U+^P^vUA2Ԫ ^ +_OLgfk2f.iI >6HPJ*@#X\gZ'b8:؃D1 +*Q^l, +'U4"S`GWj*"C5蟜vަ;05R^4;#1XnP &yސ\7[ +>p)SD5's,H\dsxES|.c?'X> |IтF6l3ڀ@+|D8[.7߳7,4+vx2T?tikMGQX;ScsmMhAӰůÎ`@t,BXz+{jh%⫊mtvDkyY9ENQŨ&GUD]g0,` 2qgtζw1k&$2_#cP%¸KK%oi0$x{g'ᢇ !g7^=]D\.ē(@a/nv^z +Aپ&_ѬKfbgKϣtVllK\ 3Vp#'0n+ՂR-%kCA NW!ye±u "Li聊3ϙò +|ΐ{kfGŽyڶA>k$MK-? +tN>{&̆?,H^c ,v;t dn𴋃^]ё[3.mr^фBD9f$kaCX٪nG@9#-Ib묃`5G!s-WK`p#:~Z1VIB;uT)76.Mcu}Ot];tWw1O1|]wJ. T-[WDareߟ+Rh#4j*}ׇm+z|X ?Ny5VʲBLn!+`~Ҵh%"&~JWM۔>q_0c /|LԿX̑ 'tQu@db*F )J?Nfq7=' x'\bJ7qV JďD*EBA!^yM1Mit1ek?\%}7[FHgӓZFwk7N7U%QpuנۋƩQhrGPOSC+SU+2->XL8Zc1u;kz>49Ŏ 0A8^g0(!݄[:uHQ#]ݚ9h00eK痤- P!(֤fm GkErAlBU%tF=β{27dCYY{avmYnKY+}^zA"c-?qܰUE|@:MX\).J,7ƒ^3}ҾosIyl2&;IL!r4刦}epSt)XRBW C6!6@ngs4ʗ[ IP  m`jP^scʄkbj-Aj7=5- yUiɎVL/{\ myMuj|C8rE}s;9)9<>'JzI zLZnJShָI"K0j~$J-/tdi *{kwE-ކy[aIfY?+XA&b[W9AJUw)?p%|)| ޚ⃑ V3>:_nXO9"v\6Ex477S.=2j_jlqۘݟDƗ¨%QKLiaˊ̮]tiwk;f9]q^Uj\7&Xk uSdF#UB.Mp/zѳYK`&ˆ((#1>CROYNNNOh"Öac;Q FG1s0Ι_#kOfg9Vj9X=)P%JQMii + RB㬯X"jhn߸e%`'@2'/DTG3B +}8B=c+KDyS>N2Ӯ*]rㅙ]$k(cx7`{hI5s|hbO)؞ѐMc* nCsvoBtf~wGn FCտAĐ/1d"21}_zwI0)7l|-y'=J1T6k)z&g3>TSʬ#︖WQ(@ +<9ྫྷz }Љi@X AG\yAz*̆|s鶝lłG9Rolͨ- o1K|^d6Ҋ2NA駨<Ў⸰ݰ)e_ w|9c?+85'_: +I}c^iUXenJͥ"jx(lcņIMZ/JD9o>Jln&kvwKL~3ə%ԉv;v:jN{\,r 6"$Y +L zn3sjzb^Z+tbe"ph)=*jTJt}N7E#,HXKt)tbhdl)[hGOrn3۰,n8ّ%i4ܾ[ kǚulX6Ui(M)ќ h`2WЅPJ|KA7 <>L +*ʿD 'h=1j*~3C߀1Vm>nCGPEXCeEɅ/s8:VKkV+uY!WR ۔7.VJE^ܾh)9 ja^Xgvk t,Np.wQV9q%*H3 h`jAuw*}p̢8j\q_-/9 ꡣE)cD\`1> e[b%!)ѬN 6mF8wb7^4+Tv7zo ܻIm2D c,4gUpdIML~r(`&Ѫyh'V+P\ӻSOr2&?k Ypp}>٭L__$-dDsv6$ 9`fdvʖAyz٦OxBYFif_J}[F~ON_2Eۚ+YCSm%BO^o]Yv~ޤEe3p68`s34=NpnB"ww.ٱ)UTibS&m蓗 !~㕕zY5Y =vg9~ 2|F]6{v,e(q.xFBwA^13Wix/E'A!$XY*gÞ>E$1֒B3EYz2Z/>dA0 YƳC=!GAӍJUPa& +(rڍΘk U=XU,M:הU*xg]E܈@nmO/p!v6d됈:=<, 8ؑބ+i]1w!iZu*QfrWG3V?!JKWvxOu#ZWd(V.\Ǎl=.5yψu?Ewַ&2'iQBؿwd\{ҁRI7|AQYOG +IO!!jbckf*7ٲWVuYLŌe'>@ݭs}? +G'U'g7qlrM0RofbQ1Bn7gC"|OZwq02yy.^9 k)w`: ?N-b;+ӯ3sVÓ#  lL4}2,VqPIξV;E!bcdTFn>>W N~tNes?nAڋ"B +_4Lh<Rl+AB h>UiBx5^d2AgCpUXI~ + ˁ,Aqfд(/ӥJ$mҤ/>;nhG{52+Jf9~?%q aZjQ\6o(Ar򗸈iLE?S.CƢwұ+oqbݲzQg]ZSGwI m~9}'j T je%+ض~{}2A@gzd}#AB$Olph)ѦP!q319/>̭AO-h+FyaY<~OA?!MV[bmLS|<Ն@8kmMW#@}޺mCrâH`nQ#\H&,rtI!?zkzsE`<FB},5lw\SuW|I'I6R&!%2}yn,e>AcDXsg|Uʞ'0fKoօb"!.{{R[cp릔iZy~9r/z.hcqg[gNef̳[7./ܽ6|Ϻn")FYP;,w%P]*/rg^Ӟ0 ei +΃ߊ-NlƑ9s:Bz850[dDk]vlDi=M`,qY${$B!Ez p-7xFm P$:'V]w_HZ^75Lji@!Ps QNg{OO G( +β +T?.q9-7lbe "7mR-w]7'S|Ҭ3W̚EA_7Bj'EM5?vMp֗J 5'ET-={çL $z'p@(:MG!─h +i5^f.ZFϮFxQ~@FV]ک؛O?Mwfv 3$ETcq RnfFt,XeIڮ/ޜY'D1Zg ,z +y(j)yʰ +&x'?I>>SwOU<[y`ln^kꁨY#*3u^9@&qnbPjomzG +3uceÚ8XҦE@ui&.B{.s<]nМd*qzCm޿-/yH-Tn$vlфLb!q!;~!gAp8}Sj0/[N{ACiy`՛¹m]ƘgTe +.?u,=$ q~>K]hś`JMF6pa5.29TsY5xO:m*C4h\.gzM&q|NJ96!ϱ7`Q +M ˸\;1"T!f~t.&>/s)k-h/HnN.B# +obt(i~XR\歋:XT2 }7k{(N u؈qϽ6Wf;LQܨǃlEXj/t1RѸZ=SՌUDa`SRsMs5,$ X4NmڻVޑ[ңzB>k@ { :%,1d&%ty]x +рxNcdr!A_ѓ]C:`ٖX.7@Sgwi>yCJ 9@oO9La9=wNjcx*%phKKo` +\.b# aG+e^'Kwc[,N#i;:)+/¡ ɭu4(^@W\q8搙A I#<#LNϤ9 PRYXNi7܄ՠ)uTpS7[ ׋ ԩi++1$f7#ia劆>U}*$Cyɛnb-{f#)^dU&g GX$UCGD &ҟXh jzў* mxfdX[dk[߸L#cdn>a6<vwWIJSaΈ_Q#%кgK2"}_2RֆPU/7DYD߭BV?)ʩj$@uS +Cj5|U2JkiN Ht S,';i]N.SqtV)oW<ﳾXo?dIj\p7H=7r+?I <;.k:kV8 !ÐVچSG<~ܜAaȈz˭'p1C\د-q))*`a +B2}U…&Acri QK ^ּr]{oRNV !~-_uQ,Y[;X- )-'2:Ӗzp )~[v- +ES-DwgR@Ǥm%WhǚW60 E41\ +魧ѽ7Jtzi|9McVwG*?L6 45Rf%(3ћLK8!XձfN?{9WǦpWvNJJ|D|fFT=1[ x"v)gUX~ oo/W a.9{AKW gĀB!.Q%D0Ubȳ(\k4[1I/#. L-` +=ـzEvcuR1rNF9. )P JbR\DM<3Jtt b)3aUr῭6>7C6">VYH80 M-h6 xAۻ*mǹAXANi 8n2FOTm䐃ٛѕ"9N'wik𦸔@Z29 +ĹQVqI6UO} ~9TD'ƭAeQDL:͟!rc|"CCv޷:ZUBz߆Ai4Z;-eAK"18xT%![c ǀ5EـȲ;5PkHr1@6˃ Ɓa>q7hRXE9mfⷅRo_5\fkϷbۏN:V0[G18E尋!ZEVWom,O/涽W A&;v[(d%쀅UR @+#gqt4 P;:zM +;u$ whgޔ!躨HH{\euj=+7-g+b +{]%!y!R6 $04U^ Կמ`.E {r}f\cn&NF_*Q{$&È>q`C_=j>jO9;y V:rUt< y">u;5mgYWQ@ƌڔثYwL 6F^o+TR)E479hq}G䞂->BqJeU(99ĦsxhHsRb*7l +Swq\+cp8*0= T1}]cYVP|BloMC[ e⡜8SHPuҗA/`[g.<siXd3pZ+NրSfVWȋL< 3T&`={1<d1̛ z,9?>nV6Ѐ/vS{*);$ +|w.L t]G5`8x +򟃜BN;D(^QtM/V?`&bE>EV&o1U\@Ha&݃!hطM슞V݆zLă։P g\H._?<܊ b-;ˬ}=rH$X:P64N+4 +)<*פၥOHJ)IEt+fʳxz#B\5Z7J + d=}Y'bq:(xs#JW*EV}XZ}9_؋qZg ۗp88J7f޹اiov).YOA7w\מ@yECŗ"}AqCKJ +rAgnVCbO lWht` ڠ65a)hV=Ց v37.r or]. tϕɚg0"H,Yw".?8V^$QW +G[4h@$Ntx \hΏS'ƇrH)vO~ڗYisUB8T*S2`aNStpnWAS/"8tz8Nu_]@ˬ56D*t:pY3zh$R!? Pro\ [) e']+98c`;Ky}"ZQLšf*__l@KU%kT6vR5&G8c:뺸." !B38w'< XGͽW3+'"p;Q;K"2&2I̕GcZ18a.3Kj&v@Ŭ ыpuMN;{[ڤ<$Q 'V=ߒZuo?fdx)duAq o-Aq8ߧ9.V'$zLNe=hFJ0R}5twUI#?I=a~Xx$:J4F `*_@DFBI>i,zO?f'c!#>s:7Ogqsh)dJه9q +WGD8+L*85 wwߙJZ7SN(w 0GȹWf\BBb\W 9$&.ĬAܟwT.`&e `?Z.薑t?kPWlQ+:``"d|\%}֓Qy7tl"WdPxL42kMr:4"/GX-POJ=ذd,+F-n? #=ͼ4#v٠,vC}o2ۯH <q'VBΫao4*hoR9BPNZ:?QXj/\`53C + B!LNhWd!vDz1L",w?S7a\LyWZ3v)Cgv/ +`$ ̩@F 01LO<ܦThti^T NVbʹejv\Y<<Ѡ4((qDSf0+2o ++ӝ%}2\Gc^5:cՂ9fXSBS;1hؖuڅ󙯗52?5r׎O\ j7Sjx$ɯ%Z[/n! aP!n"\*D-#DZACZ mOWLn+ Z].=gV xxW஽vTb$\rw`^_?h"miQ֠YÒV'@c.X +ADbfok$İ||=}"cu:`UmdwCe(8~'_T)>c+ HM4bl܀xz"?z +fa!byId&cx&&EW95XoRՋG;b9X1y( /89 +Z;҃J&r7V +[/%xpfB ?iwnD̀q!<ʧ&q1f#э !kfD"SM5V9Yt-vc7(υN+yε4⚢DYJ7l$0?,Jj|eh7ۧˮյ74Gx$3"|9e8<0x,[gnr}8d>tekzQ#6>~I~/)A~6^yi1r`3z6CS/ 7[[{}Ul¤aI @a1ԆF V(.HC\-dp5@)ƽ{a9m/A!_.`򌉛Duψ9 &T b=[c*qh"74qIڅ(ʌ+W_ӚAS`HZϹ)85:wlvzPQX)PRJ@\+C}04*XU]J,"Kn%Vz@8'rE'T/(ڴn.ގa)ov*ITTϭ>'d~ bZ؉&@Ig5}IUEPٴ]MYCZ=8&/ )],xn@<j3~$Y󤅵.&Ʈè|b6(M'er:FuM~:ؖgdh_cw +ʵ6Y,}Ҧj)fRsr{w2LS^ ؊o`Jqr|؎L.qWR`+C7K73lOo]KNR WS%C߁`cfcrh&@=pȭ%9Vu +)L_Q9\JR/ 3,HCHkykr\0 +FW2dj^w![Z)QiIۻ8ZTf\?@O;naZ3X.X dNrJ$] ڣ Q!z4tioѿаG7D ߁V; +b6 +NFbi-23Fj#L϶`:`R`ǽ(34߁ݽ FԫwV%wAj4G]iG4c]X 8Z'Az2yGjgKRocD.b׭M um!w9wJy2Ӊ]R%ieEwR~gcRA&] Zd9?w;Iq;v: ][#ѫ@U+Z>\!4Wք߳vAdQvZQ *O;6o$mCP\7GPdZóQ&*J!a0kD}A! 0; +qݍ*;})v5e/+D*NXD./F0c6qO +JX^ô39i]dLʤ/`&vuqJ}QqUed49?2/R\DLR|~`L2&坡L.VHʣpx_s0Uw1O+oԺQɗC6 Ki8V`OiwɄń+plB]>2}6$c<)XZ`L>x Gu`!~0ݹT^i9,'?G@_.a|̿ueNΆ_ړ[<«2(ݚS_XOK%bBG)F@"!H kh&flMw-|"b5ƊP֤o%.K}的Bi%9*vVkSgLPSQeLdk,+9H|q8%Fx^z6pQ>w !϶J.AAƌ6jAij/^ǙN`-NP3= TuĊ\P(̱[L(D kf܃(Ys)AyaG>r7sJqa]5;,ܲ|2,t;!'|E^ {=^%M@J'"t赣2U"ʋ X>|׷Z{N|Au{%dה:Y3e]\vW@6RIym hjXğ4>SlHMٳK{0HEUG6UPfs=80+cE苨6L}H6gzss6Vr'RGkʴIWuOuC0LEQjԹ)[|OUq98(*6hX)%㰐jҚ.)>FI[ru #bgX`i*sWzrRc8cR*CPa^5 $ F0}2i7*ވx5)>M]QbQqJRKWxZ.eUHAolBcG[1Fv^" r@ɰ! !az vg$[2U1Wxla.)wrE¸/} dg壃M&CPIFYB b) ˭,= (8>sSsx/sАnco}uj@4=.@J;-<-~qr-c zmba G=\8j{p +LoeDIZX簽[ + Ix޷{|xBǝ/R(6lpWwz^X7,2@ ]ґU}6}xiL^u3]Y9SezU'j7M@i.Z휰2?UvGM$nJ@8d_)b +4_JՙW_HٹS]ꃁkXjyW +0vv6*%#|Ya|ӻx.ԯ |:k">f:RHCOјl";[%hB0:\G鄤Njc|ou.z-=y^޺7" ڪk"A3)U4XW\>ɻ{ᅥtӺ "N;_[ aAӓC'Y y5QITŶc^dobA,q&oI}b>,߿F-R%lr(q)dհ;a׹ɟH'x~[ާ欿w:Ig4JMu"Ḍkw׹!֗HuOJ_M}2.лwZ=rjnw += יVɄ I* JN&i;4c{4y&24dWG%V$ot{32Scғb+(}a(Zj:g2Z̽P|ޢ +0=8f%rSu}a9 +޽'jKO~_,6aigH} iу~]%_ , p:L%`!̾L>鿤B_}4#s^'R_# Hy/P4X?^JβMx@Jh[dBT3VqUN3ʤ_B1&aujcg8jiPhuL}09| vgT'ӠyPyTxS+2afR z^#)ydK܏*RT'ԍŬE)T5qqAK S6YX*6ie#8r\ 4YET^l~zdHi<"JB'F:r1; nJW ZuD,Eq2֦0(u`yYQ 7mCt;Bi),þ` O^8 O7P9!ECWj=,t>"6N DB89 8j%[Upۡ*}Q2Z/xMv'_ĬL1IٖNvqw4u֭p+S'*y&]K>vg? 2ܱgfQTS1=H MJ֯,ƶ37'CzZ_*j_#QAFq~a5_Ү W4oQVH.Vd*5yPZFg"H +Ran:P@bk\9jQXDD'Pq0?3%]-ʟ + ,ۚ>mJ81)#h>kcn +0[6^r^U3G$ LCh~xg-{mv9 C +d L)m6D˦)kwfu.|Eš.j !I/R,(*#7ESGr=|QO+ae$uXWf#IGz^ Gs`tGjzR~K7" ҵ`dw{.5(ND[X˞>*;zȄX {N]C +jR,.^γD^"v(0uv +hmy:54EЗ-@Ng"μяKXʔvO'7 VqJvˬlɇkMEv3jk|:J=JSw2IKI Ɵ{uig|#a*5ҿ3QtHbb]KT֔JTKkmg)*BbJkB$ʥNQȡCR;`vAP!<;019A B\U]%w} +s*dDH|6uzƉQ{Y ga͈h4/M%S>8P]g"3{w1뎰^0 X.sOUXx/˙H}oOoGҁT~/ڈsnLk;zeWEPHg w6dC4k"jY,{70zY7S:m7˃?ЇJ"}h!\]sݟN,vO5.@ނH_ޱl)cgoFY-;1tev9꿰F .(zQ[9>xnj,yZ.Jd0Yj OBիpɻn9_ySq(X!byB7f` xuӧвqSSv͜?>AR.pXd&sGt!];IN*hc 5i:[iB] +,-T7R߽vzͧU d*1 ԇ9i]^7и r4.SX!prK|-ś$Yd@ZV%'"v<-EkZ^)"Y:G@7X3^l|&ssl:1 ^26JOF qMmA~|Br7o=FjQX֪ c:bɾ_Ήºdn# BJ n4\TKN/n4qlAw\qYNgh(o +1i:Ko{V.!ںYiX1I$u*D/B./k-CsUapmrUi mےpXa)__dE[-xD35e+/X>]^%̧ȓicT3? [O%u>/< ^J%]kkl 0)/_SOHG"rht|e`T*?UlI ɵ)}rj6DWWS|~m]Hjt;/p3ׇg~eF%Hb(2 =}g:(G3Nq&ɒmབྷ/TLSw +I-'$y/;"o@81m\i$p%[` gEZ#`/ƢcL^wCމ`a0{D5^'hJCINMgGq}t"E ޚR`-YqRi%ftʯXuT$UPF:AS_U ́gH.OQ͑xX[$?lL,k,uZ#~hs Dlm%Vq.8aϩcOk17&Xsn00AnEQ2Uk +p'UrSo-Ff3P0nL7Lawgݲz9 GA2ht}b +f\p@> L)XՐiU>7beCo?UDF6RakRemA0斸Wj9ssԔQpaz)FۛS*$,זC]GSP-ⵅ&F BG^p  Y$ /n^%L'rvdZ`Hܗq]Ml[ٺyHʅ&*ʎwu…B|EV r3[& m!?Э7ʏeLϼ44r)t63WħyDRVoDZ^ѱYIwhT:LBt9\- Xzb6ߢ A7w{=ِ.(xB5'u2G-A#qanI8[Ǎ@~l]p_ɲw(-YԜ`j(츩>1)<)}fz"BS3BLF.`Pe"M_i$ܔ ՚tkM!vPl6$XFknƶIׇTzDID"KD] /S~@$4$V62:qkls=LsMAyAk|+m| +> X%vѤx|E ƅj@)N^񸮱)"Q^IS"`чY԰swOFWJcZ, HbXIbXХb + ˧@pHm0@G펏\Z='! ﺵX:lo9?hJ|trNLATi3e e=T3~VqV J ! zu7"$U$qULnvS$2RP_ nTϢvNY={E:'XE68ƣz\U&0I)VBݧ7XRm̮P4Ltb%5'$Xt~{O3gIU\lKRE !Xc&' بf8Ʈd]Z&g_Ԋ'2zݻ)\̥µ;Q.. RT,x8C[ت橡hu{&yhV%߬*9;n"}5o-X5IQof,--:@G +>2JlЗٙKȖ${k29(~&uNr! d>97%aۀOm {=s$,=̈́ XUz!zj@e)+C]/u +NAwv~ kjEϯB39m +k~l v D ZN@危K \Z,^蜅FJUz(1Ex8_̼+GGUl&h*s9;S@(c<(ʥm/=bSZ͡/B5`Z=u^ ]m`cXgZfrdQr, +{ۇGGs<26Lt_L^[Y^lFl}8(x¶AFS_CxZ€KTóJ;6l,SRy2;d`1<,:Юk|foց0~*ȶ౟.Z|)={vyH I5kS{啾+O?ӦL~ T尸?lz/͌dM60Q"sg /ћ%L11/֏Ѐ2v@WOR@!Xa7ݫm-Ll"!CrUNY$TJ8zٲwtP滞3(tz0$Hߨp's+82),O<:p=8os6Dh:TDñy:[5r0R~S=XýH7`U_"/ιWU!@C*?[jK|T?Bo nFcJçLK礪 CRcCTqwk\CݪD1GߙR|,}Oٵiix d7qM5.lJ tB~ +ϯ#8þ0@ XwMse^! I"^I,T*n(T/@7`GflH0a*O޼Ic ]*ÕߣR= 7ϔm`,(urO`] R7|3 A$P`|)hƼZKȨ~Pݖ\$gPj\_z5ţIY>V5nңMh]uuj&Iy)u—r % {[#} tnR:[ +ZIsRIAt32PtCƮ(iU`Tk!GRur!Wa"\4Y~=v›Dz ZM-&r|~y )P@&%~5 z͇A=T Hz@#YM st0X"c)W 2B"jR-tYaW%]bW[qCg=wXCH*T9SX@ށ[m3h)L}1Ь駫pђxBս!( Vq/+Y7\ǟhk ptKZ.Õoɿ-e[2B ي0Xsݫ Guz,f2BP!bxJu3ũ}1f6{c u&[2[K(n@TfkANwP)44E^j*E}B+o vX8Z܆9 +㉋v[J }}oqQi@}k*I,(4Z`Gk@Fr]Sz-xq&Ou<"NC^:2.ON8J/.gQl7gCad4+>5W#.]ilז :K`yZ͕]QmÒ:E(ǸW(xoæ9m+׽vV@}No]J\tiҬnj2z?{ +x-OW,iU0K7/H5K/Ź3{>a];0>S^܀,ևzzF5`pJ߱2+ dɼw~Q9i$ XZ v@YkdGPς絙FN̠޵E_@#P#sDј/ͧVhHo)uW,KyO~ kšH~ZBQ{1zV+VluyY4FwXW+xaW?;u߸=q#("XQz6dقZұ L׃gl3>ifw%'>6ȹ 0[H ksX"%vɷ%z+M9Q<#he&t@Y%굑|`E~o< ؠAf#K*+_m:S}a3dww thjM H-{ s \C@,c Zp8X|իj M6r*GB +XPdǏDsR$b|#M7(XGQyyV$ ѮkD"֫ЫXk!ZB՞_VNn8]\$6x+Ou{ +WI_'먹q·1TS\ʙZqƸޏ=jP>dۄI(1 {R P.nݡ@;qX3MqN͏'YZ&p>XhPŽ?$ˎ^ ` BbSwBK_7z;aM3TB6F._&(} v<\H3mlw{R#ɉFWnKǾ @ܘ9Jeo*ӦшfOA~pDxi"bzB1(U a)hYjDķD.})zo%?`DKAk~8=-qv WoH5vEp$CbhY֕o_ ?79!O~4<]?Yz$sHv@zzYg Bhͦa tO+_%mZFœX5b 0eMKl6"eM(EA'" 6*_.!=E'.]]YԼ&qjMĸDqr։4˲.$+`e$Vyg?+0H6&V%$ɀyBwGC6?;r~Ft4E]CmRv{4V5DJUېۇi=نu^yڻ'c?Un,N +2Xs ƕk1}4/ U8CxZDT{J7 #AR-u1'"Yh J'jU)Ї:-RͰ t !%Hg&)$1<&{ K:"oMX1 #UlV%dvB$ӫk"qi A,M8%,轭Ds 5`PE Wy:** NLpV *<2N&SSf9[\15}̃Yi"wgByE5%_VW$)gJGeEۨ>8R~L>o9 +hTDP{;$xtpE4,KۙuxZKYu;^;cK~@A$qw/#|(`L.䶹6-۝tAg&:D%:[=9~ P^l⥄CX>Ep{#'ޏqxAPGJeD5D訔]٢btpd6Vݙ۩lg@bW9.MF݋of|[NںY쵪3qba[CϠܚWT߶S3x'FZ\)JhFGUei293)ퟚ[v^DLD*/ۍSQ M<~vZxs C'Az+nupYo8O ,kf1շTB!^ V +O >~%֧Rf*mս9PJ}f*87*;'Q=,I ̀TqΪ1}$ +჆|a[Źu⚡ǹ4%0@V/ID0sp~w\Ҷԣx,M'aN[6% (.zuy M/0#3@,[P"Tq)I(J7(4-?Pk@m.'.R=G$#q.Wxp) zׂt~.` JnRט@QvWY$A+noGo8kʺ@ֶYoUO k +͋* fRV&pPٜ̋R <`WQco:?|Ūsz f " x GⵞuFh0誧H.)%-=hO%+t6yHdZBih슛mtO,ǝ3fp#*ҭZƔBV<H"ib2`A%aճOwV;YqAY*e +JZ eF}H No`_IJVD`UO1}Q@pݕ:"ACF`.63Y~;B'a,4$i+aU]+ĈБF~t|n]m4pmסκ<'WSN/(t}s5>SZP+]9 鮯p1FCBڧAjgY?Gk\GLz+}IDn6 CGus30'ީߴV@Mq"U] ";.8Yk1ldǵUOS&;&sjE=ѹ[wYK2-t {{] oejo)]փCY罗˟r2j0en#i$MS dZpC-k#i3' %waŎήu'fqr; ڞ(r29x+v U>{5Xo"M=-.[Aa3C _v%ܞ|Gv;M_X٭(cn\cLbO։⬫3 kZi!S /AQ5/:[^s|ȃedI(znnL\᛫Zo +ܕ{]uӕy FT71ynlT/Du9}՜u*̃3}DL~Vr-۳T+=< +(=?*vSBhJC`"~K;j<$Bj0R(㽾cGR?ßHO!Zel>vkDkWt#ŴRUWMӒwy"{W7!K u+=76Bv>EZRhAl,@k<%%/ꛡԓM܋DҞÄ/2&O?]4E{]*sA $^[ q,m;35//EgFq"6~0D~^_9y״{uI=:I>]emvrӱ򸠘ZsK^"뗧c>P6KB>,@_l\H +sSַaN4LQ.Khv8tE%_Y=m,0uʋec1q&fE:~^(7Zy2>MBH$tdFb< }b s{;: ޅFuG$bi x݀Qf^(仺uYpcuKmPѠi`SV;8bd^a5CNqh.XpkU/P8sƧ*bՀDϺ+Prఝ%e ^Rw;,B/*vP,"]N.2>SfgEC_L6EoU(֚7|o/vNS)Ev޳/KI@֓^wŖ+_1y`MEc59$oJ*SskӤl/6q`nyO,rv#AZK=N'Th_6_:11u ʔMTJ[=(Z$g(Y1X Ϡ"v AFYXLA?L¼*)X + +JG$Uсط|x\TtO颦z] lhv|@^m]Gy&Zs–_M"CNo5ff LַDְ:6/CJ:P袹2AEm z`hV x٩?$u[=V`D9Fp"c0 "]TzKXD +B?x +pzoY)UI8nMy/MojýՑɣ? ?aA;`LDx,m3/P ᾁȺMd;*/*G?@mԇaE +(~uhD_kAH߯J&Tigܒyw|f. cO`ܥ7(3sZ$8"I6#%L(D諔wkg;OƦ<捅!y>,Abl_/LedAzU+v"yt\ y._%h^_A(Uh+|-󹫮̡T=oJA9{]3 VCTQBa9Wkb^nϛ:zF0gL O"M66Ҕ@i +pԁ|X2T4:>FEve[Bx'],@ɽgPi#EYSR8I#CΨ։1aA*#NKv*3ijO;N5] +7$ϭq ]^p:|DR +ufv3{apmNh4cnvCÞXj[:e-0]leOPH/& ^yH7f0 +حPȥ͙b=|rѲsV.f"*h×Hb4|n)wp9y z}L*UYnR g?4x%=]Nl + E򹧣c]/?S1} V ^$yxH:ZVp/~bB#?0}*ل9L}&KaSKq_YCW!7:tHW`n`u[5T B`)t TᬀPPL&'3c_vԌ~[􌦋U[@ U} Eԕ65Hr>^L޻*TaEfRY6Grɵ[KAy϶?W;iu|9*jj˗.Lδ*XĖF ,kXDEA!C҂J"/C`LeCCUJ5npQUYM4BhQ@OV*#Ҫ'Xc*:.~S9`0`{Mx.de,%cHM[=R3D+fɧ' +$8="{<}b k& +pRI0*sN!YjQ[\{Yg]8[:70\۝5e3*ʦT~<^scT8i"a3ΐ9zt뵳Rm|k%4Ue}vtVmAhՁnq&2 pE`o aj\P\_Ypp;PXYGQpժ{,Жbㅴz+[';h0bJLVd#7"2|X.v]tܝg9`7卺(ؔY9L@2eKu Ԕqؿbꄛ0?FZ- + v|+6GKRg%GR7.EJ1'q׏wtT)ߥe}d8 Ě+J*b\ "ǂ/qbhke`Cх)g rS3=xQ.o ٿ$(o{qCeusӔYݼʰGB ]cxǺzn%2ڍ sy]5!CԱ,Œlj {@ԒGr@(–(Mo)vJ#+ ݬn3SkLYSuL(ܰɝ~8ò#?:'sRQgT4׏XhDV!5.c<.C{!Ma_WN`P=>&=T$㡂q(vwzؽOJ{P8Θ3^ q[ܘDd`9ɔ`-e<-c^ܟsϭ /b֜[O\rMԑsk(\qSWY_ڬ F}HqX>ʽ*rjB;'SEky0f[392+&.ئ +HVl3;47̩3g҅x#_ |mE8/"˓(zhҶN: +l4U26Pߩl#ŠmLݦWq]0؉`d.vm>ݜ@!"ήUJ"8r4O"ya#ՎҲ/><' +m%i(U DF] eїa^4Q&> +\ }kx6e:wiavJ>+6z`AvNIG'Yx(q=v Hsu03,%!ɷ Z o-}: "P"/> 껎y ~vh$2%sƞڲ8/!ƃ=BE(r-?0+-j@^|PK훃 +7shLr UGvE*릂lfFaHkJ+FXbëktpN sFO ++yļ'-ԑJ&q6υ:4;n:q}1@ȁtӰgȝ륇ȫlgz#2*t AΓ9<m8(0cwEMz:ByD.ڜP'`K<Ξk 1w$֚%,gDI<IbY8#rN{5 V܋\s&lilz`4I=*#9?EٶF[s^1S<=ͫY&)B~z8+WE'n 7A0P>dT=2,R^!pI%XM{1Q==`q@" {n'TAbZZcrzb}q̉@01=Ue%ԀuvcݜɪB{ |Ղa?ٜN hv4HuϗIꭊS!Zj!} ijczEw+ +>6F1-Wނץ *+t}ʀ1ZЏu/wLCkh YO.R@{1g׆ԧS̀UN $Ӣ(tҭMcLg|3aYcK[*dP'Tղq≀.y -l3\1Yd黰hUF!T~EF''-7,BNl.>:tħIzX<\F~F6uoGp$Р +.W 2il (MߧIĆDF/mvPluLȵ$i{z1eCAO$fY;P[VJSFiuh(Uu"ܤ_VJq + tMZ^אVvuthoQlʚ^[ cu( )-`D&؉mwY$cn!Xޜ GKbWB|Py-)\H؇[RWWlO L~k ٘_0ޖR Vq7.ar,|Z{'^nnD&]R@Y %lruHy`rx_y˱]5$tD1}\- +y<^Edd3th8U.lVC +,}φ iS@;`x3'uCb nl=@GG Jy2qE6+Ⱦc$Jm]Z!%f)NfƩ+I: F9u[Ҏ>"J}THӻ*jtHt4`C#\rKoU{f#!N+ &BERG00+@ǴFeF7^({{1eM]/|dE$gbSg+[t6 )}>~$}xj6- c!6j[AFÕ*20I's|tuIs8Ho7jaT7@o H &Gc#ʼEոR#HuHxrg)o9њwnȴ|oP +ٿZ|cq Bc{h<:Q44O]B}`"KnEzAblYSn5rR>ZEU^(  8d/KEt'IsnJc ѮPJnE8'z W%Npb +B()͊F˿Z=]BKbϐRpk8Kc*8Ǘv6ɳ \03תUeZ'Ybi-Ճbno3M֕s'&PVSEm~ju ]`eVCCǶ幽tn䅞RH-'sp xY*[:uJ@c';4%lxڴzI|72/rqA,@4۾(|~o*!{Ix]ַޤ[M)'lӛ^ _x+R֤LCikZk9 e|}Ĉ˕gOxS9Iw_I5)zaD삕ww4E?Lqb׻`"bZE08*MxmS0o36jy4$פ~?ՈYrE%YS ̳OIuwϪI>,}m1Bq>;*6 ~ҹӺy# +ke\BHs}yF.;ʙ%p*!IPOBB 6$/bnWKyڙP407\) uDҍK6K WS$f ZtYzr: RXD% r%"<^lǷoe@wc\ Yzqtn1_| G |ghJM< .181)$w h6'Kp8;U^ŸxeSոZ? {u*8U_+No__" +/orl*; &zګqЪ / Io;棞e.J!OGeU?[7$Ҫ-upq;^Xs./Y?rP]0 OوUPy ?]YMWP,$=W#6)(W5"/um":>^f2S-+j4 +,bM )NxlE._WYOc⛼zaA> cso7bHryA"5vWha!Ƃ|`r~G3AnbNPo]U`3We >`7~^X *O&fC(#- z CAv[,a6TD0Zh]A>+9,e52[ Hq H#|*X0-0fyf߄Lsݭ)fN{{n * -m! %c&̐6n?$xl (بEm2j&}VWno0iFH!!B^bŒvs H2vULg& ]Iw`jޛzJzƏgdX+LwKiԫܢެ ^teF⇹TY"MoQzl&B\ϭ觾mf _=nf7{8桝޿WnXō_q}tjfJ|aHkV YgW 9=NM :J-1:pA;D ;?,wtBY7zFYD \ñWṛ.fH?<(FOmy zsRoEtݤWc_j|X vۦ]5 qdXG_jsa2+5kNq&=}$P; tgJ]e`p@&7)Tw`$d +ε ;d' % b w64 w%]eX.bm}|ȟE@߶ŗhNcmq8)@~ֶq?AT8]BOXt/xLq`9{.޲o.Gr2ǵy7o] Wf$<`2wɷj6gp2˧^q cRQ3U[6?XZaG` 0beq a?@71ƊqIPڔZj1/oڲWY m 䅓FgkzM] ܁*{TF<*tI|czSlp&'^i3(c:h qx!Db?QIѵ(K3@Z1tf Ԝ0fH%KtSZzqhUn~ZҋoH$Al}Eށ1LfnuVjCc ժk37op-h&OV .mrm7*?S!CHlB~C3S};IY猠WYO^`D H ҿ#N`B͓e1Z?W۞`k GRgE\X@BòU%,?ܤ3գLM.VV: +[zގ^ R#m8S*+%h,#*}C?S=$RnR~L?7E2(䉗&yB +tzxxvC) & J?8_E-'\2jB~f 9·}^+LH2BkcI&bю/K଍ci +'<ٌs'99E\?G؃֋Tcv2G%Pu7^}A-'LiQ]ECRnKGC`LT|Ec(\x̕K:L!˒2*Y8~;AgݲyPL~ >e1Lxq`u(Y. +7=5H.K\d-&ڨ֠@ݏmPWBOh>ggڑ:NQ9KqPEh4^cϯ+Q-eq=ٞof J%nJM;Qb=ow~y];g{̪sRjwXeۉ.HD+oI]-\d{UP0>oA?o{Z/L's/'z474U.S1_Fe$]HgHX*3 Qo5pAZ +58}S0|F.<@U<^4,@ꩫyԡEc;Nѩ@obD/b8B1jbpP7m>bb$~f' PyZ#EEryX=1od?ѺE5{?^>I`B_|aBRfY]Sk?2Q25l. @j,/>%ySTht +~8-if5XSGdo.DKW8r[UBcFW:@֟3ѲTv7\M&sYx4B9.z/[XJ ^(MU/r*?9䵫wZM|wiywJ]Ddn[Z:=cLߤBEAR]u6Ɩ&G'K>Ad-r͐<3pH([oT_EMCY`WYC5PЦL uX,4]%C??7g~TM.r_oQSf}͝7zTQ\ejwo<WmxnǝLP 4VF?"n2KCL-5s[_[%(e;5KLpa\m0Y-[TO2'5d޵kqgc=˵`u9%jXj B>EWvz”D x, ֤4lήBڟF"fq4)̉5#*o$gmliYU9S} .#:!ycӤyK`cg; "0ίq 0F `ɀ|Fa*/}lP}M- y)G\4Fl}Ư@9)M; nEªf4LIc#4"+ӿ-SIݦC3]_-pfMv8耑Z + O^ؠ#!@.%tv龔>p t޽@@}Kpxc/~7M +E?/LT@yqi +-O@0yYd3f8UҺԞܮ{6چiKOf20k{KX)mC//~5oZ2tbDK6PokDJe,h_ +Ae'A؃sK3]:߱FBʹMx|l/HNbLn]kC2oh*3e _ut*2{lZ]v 4oE?0wHy@ɱT NŲdv:$f6P_xB*z!Jȇ| *I׃$k&pq|OnuAS:%{Gi^C|@;ۍ ٧>}l3;ҊRي83ss#헹mr/ |%>Q΋moɛ;< }fhn{ȴ80)NdbI? ˣ3.#lbs&̤Z0tgv~4 )fc$J0fգMcmYi4xvڳv)ꢀh"]Iw+Þ}/UawUY`5{/>QӛFHKL򶦍vy5\ǰX5XL 1!25&\x#K|TfUJ2ܐrbM2[0NN^(mY1ހ_3؛rGz{1 FlZ'Z 7e͐Z>1Z{f0U +TWN]GDb'sΑɒ s8 }>~꿉:1 5y'v&:R=2# +;Z*уZ9j@\ȿ&$cJDoNU)3@b[pq35au25n@ڞt(t=dGL"A[n1qޏ=qҊz| q*,`f }9Fإ$Y,ɱQrd2kYDF1J'lxl3&w?Ͳ.I%Qo'XoWTN=*iCk=O55kQM otI8!8iuyu,2=5=y0&ڬfaZT馬\È͖FU8CZĺXi)]5W[nγ +V1# g*"OַU7-9:]ɧg'#M(f[W$TtV*1'm9I@^ \W{iicWx"U#eDv6cHMPXB3J;42=v9XYdwDŽUx@Â3ZkY Q;b4^3w4j/53Q_ɤշ)'jo^V  +o8`{ok3ز/QNgq+5cYI'~]lb-=˹D} cvs;!~o>'HթOc٧UЍYuPVPKVt|!}FG.p}?ae"| p QY3KL"bI!m@'x"0]>aL (y{˓ij]b}jE'QU|m:q.F.R/=:NTA_rܶ\F?[ #Ff܌]nWvcMO l.!jr7MXSy*zdy"[x",ئ ԓx ?V i."7z~9NA!Nlͨ!z%ߒHFln6(XS[FQŪq|h2BHd fQ5pp@SZj f6&J/0ʨqXnz/mbpՖ>[tCMU }H +ܰ-om4;#d .z%o}]Mz;{m傗tgɤz/D{ZlZ*Xnt{D'VWCT&F3 hJװ>ҷK7cDvWD=#UQX&#Hуb!޷C'Dze^![.%y*RpODٿtyXyo JAs2(z٨Y5|[Lnz{} Rjj;(hM6gE#79Z5<g@gvY8\jrFA@HvI{?9V:c7DqI+!݄\OȬ$1m9҉.RK+e|ETNA67Z˟?ck"ƺ?u\[sWSȃf^XF#kؽ!Vbs&=G Pǟn$A3s^ڳVlE85K9 ?<*amREDd0GB SV Ҭu'Dtr_|,/.U*/㹢Nlrp&3>Z%UCܸV] lBIF륉ۺ *Wglz;:%Q̥c,яpGWxDy/΂Y?p7[}<3*sߩ|8jzXҺA"Nw(#XV~DqWUdW~GhPy>=?i/\>b8Jʲ1ȝ`>e˻BmjkHR|U_uK`tzAOy_EjMX~Gď |i߉9j>󼘯-ߑ\!7lqTj.4ș`C'kJ&&1es'[j!uG$|PKw$!Pڱ9͈oV.m]*!N m!l1 ;OM+̔)ߺAe'Ӿy-lKzYco%=/9=j LX3T@HjͳXQ{IwK҈Y[82tZE⢓0y|3K/cYX_0*OK\TJ`1R'>W7n^K C-%ɞ2GfR:߅f~W#9rJrAj(b`=g޴&JL`㫌ܳV!=x|sAߣzPQH#uqV9S]ET~=s j'udKk^_og 2 ݎ^暡F:ͨx!:GnǁGnm =t 'pq'y- +{@'yCn1K"'K&u0 k_zFW+)I-촘J0 &0gHw] |nIR<qVxqX!8G"a| jRMHFV2nJ<]+ѧ'WIG$e [I^mFmي oܝ^ʟ)D03g :5Q2R&%M9#-H*+C ѽ_1gJ,q0n мnv&eoDqa}JWʀ<>qr:Vԧ&@ư}0,BFV|D6vA"bϓx)t k:i׿(uSVHET5ǗRkk0M;]W}8խ!CE{0n jw̽h<; qazg2; uVRs :;6gKİ$R9gߋ^uvרւm}[L!?ɡ4 BY{`<(+AHuXs9)e){GeMZ)_c9`M+6@(LYyH"*hJ[<[ErnSv~ڼJ.j|ۊR9 +#:_WmPO=? _ʘ3 x*3khpR5ܟ0EsF:0q_ˊ;%y-}TιC +wst"r)aו=;O$sn\ؑv10TS7_n˂ϩmRs YJי~e(htԣ?<ڊÅެ W}>oi)/P?޵2;-ki\-: zfęUw%Hp&aOE0<ƐĂ2PULB@zA,$ pbBcz?+VK;;l:,n?60$1hm3wtQ]S5$(X۷%!eg^A) X6J;0tj∣&r;K!qrk +J)-Tk^Vԩ$ku]Μ(5Db,7fh8J(Uw@{d_x.FwtΓ*jik?7Y9F7] j 7Gf $^zZNf υwa=n̏[ AzG@Ω)cMxe)eʱ^>L%e2b&n&{H8ɹAph.]J]9{%4b]Ѽ5"?նI;E"^eT +JmEDëW.@9ֲ5I6d&:۵a;NZ1OSM?F8;߅_Z%NcӮOg4K$N):>2Q5áц,h񞐃,!`Q)%/'nEpяkgmLZė^#N&~bk?[Tld-s|S|ؙ]A,k ?D?kOA^yRh~:N +|fyė˯ed T?taQFa1-03adS\pۡxXߎZXby48Po5BܻRd``Wv%dJ6]lAQ ÁrsJCnte톢{h(H#/ !F꩐ r +w?o^T'9z41O򓵜]^/uj 5KILv~WUyFs;Vne@wKƶ ?XiX +֢ɷڲʉT#"Y2m92&4[IapBeB:Il EQ/a-Q *I%5AQ0iu[ Ix[:MUmH?Ju:~6r% +5qo 8Wklm_q5"4Hzb\=ޝ@]nH}Oa ) c,& A[R]c~ oG;1\!o6^B*XqS7"6('[<KɓN3 t/ +"GPsv:J#$)8b']S^XzQzZrj$к7 ^M}UХ  ;Zp-{ծHQsEm8F+ZEL)OgJ}[7P  ɝܶU}}TKBȒ\Z`l"54N TJ=+ .n@b'0_6ƒpr=KoIG브/YtٞhEU= VN.jVoMd=ؓGإ9@T}%1RG6%b/x ]^ͥoȀ娮>@Xm数 p{h {֓0hBHn3ف.F5Ч0#= zE\{-FL(Ź/gkrer6y0J)y"X Q4Si`b>Am| x#ΕU.sJH-)8ۊ44i+dM\:(5hdͤ`hOzNXQ`zey@(#X y-kf/;a`οɶR ߌF+~{8a|-66 ?g[lX}eO `/{; + F{x^?HW\O + +';F\w}׿<@M(ElN*NPֆܒ + +`)(.vZQc1v4f`q!`/hrlL9# fLcjXʁ5ۈqf]kd#Skh *2G.${*xy<,`DCvʛkW3 +̜zZ(_cINH pԃh@B2uq2҈y>Oly'G`13}hLy=#L5NwK䡰ZBmky O7v'Esm>Ƨ뵞8h++it^ +J7ޚUlxVz$H_bvP"y,TraO`n.ٱ9Y1 ڟwb1LHĺŞ&YbZ>* Q[jG5Ll-0T56T8d-"_v5z`6WW$Pi-6!,(z}k(%*IJ*ů$,8}T R<0rqy@e«~Dx3Kit&ȹ-4j))eK|,ҷ2}4|[M-'Ž{f!"L#p.ٜlMi@qE5 z(yK[ h'ξ=F&lTܽbqe5Ae<Ec$׃?29 ohS +V$cZx- ,} d]~ q '@lTNOx@uw +SV0Ho–6j,HE~2۪32/ϣ8.31{Abt.i{ȼ }X2Hڎ c+bp[]#xH yw Y<}fw!lC#UQfIv\aoK&vp:Ubvbfxҵ?./Uk q9A4SurR ٸ"?GZQ|VnF6d9.D%[{kܬ()W9 Y Pmn3|꘳Inurԉϔ_a؈n3È@C9_M6@u[wۤha߮-(RnҙziD)pطY.uGQΏ +|,FspbJ a5UOof,Hu=s`O!^ʋn`)7/֌{*\l~ГHhg؅һw<ܥJUt]Z x0bvY?3O+>jˌ/:<$u AjN +S㯿Rmy,Pzb0K3|;NXdE}M,GF[ 5V0<I#bčlYψ*Л~c?SLĥ|FmفzA;z/ +DA 9N݄]bV/y]y'E/9FڈH7V5N %?-)/# \GbTc47lj]jJ?+avjK<@}Ye=b#ϯ"@lZ +e?x_y`:3%CZغ-X/E7wd,NF߽DM*{j ȸ~$umڢ wߠ/miDz`R%!:GS{wx-3SER# ;áLת*tp3Qm)b| W+oTwpſvGFI4zO4Jx?B ثDD%p{V{ { ݹ&cDvQ0Nn8+E8/_s}1 /oCD &?4}kfSfӀ<6q>4f5F7fd:}TFr5*1j9)yMJ\hVvI|SB<{p <.PЂ̯+e3ѡg'ݡT +='O֣ x:|-د}bp=E';G`tRֿ̠FW!UjI^[FPIg'icO%uf[c ^FF^ĽSk=4DK%0qַ><kF皑u> +="w$.pt WJmt֐9`)(24$gQԥ[Qx" ":K?Tpb@ɯ҂@[Ԉǐ؋RB>o4lj>Mr>MXM҅]2:`8e a I!qoc90aO5e LNb$C̝湶7璏tV~ʘJ:'4=. +ɿ|AB`Ggܻ(+[ R"])3wn7Q?wwGN3  /G/;0$R}Yq8NmeE0G=:* ye;nњAq̆b@| Sa(" {=v 23FgNs`T υw~^bg*¤9W21-UT42H2RQ 4zF"ۄxxHi<hVv's۽b o|~UxhGjdGMx?&ʙT'ZqƳ$;LY@^''nGEu(IG +"wmQ$|ܩ fI [Xz˝941+5U4O?aAϤN ԇ3 OG#;pH*|[x8H\N.&$~N.yypůD([.Qf!C= _׳UI+wp);<3V|[ Zfn> W\YYH)%;xdX#4 +CZ6W=GM/#r&]m|ˌE6hK@.bvRFՇ[dn_[@nYm/0<WU_zʊ`s{ʫ6R},d3Z֨O \㝺71#~TEYCL . 9j[*<<75E>O]~ ~# mD üR0im +Ȉܰe -W9:Z##.5s+>ϰakMW?Q6}}3~ؾY\:)d5Աq?+en}9naKw +śk֖Lٜj偵o_щxN`}k ~+h[)~7"e-/7[KV~b"A +z)en0s8gVءω )k:Z$BٴC sMT>a>y!3O5CDs*]ΡJgms ';WQҞFU +{uLJVEi$iȦ8$ke",%ݞ:X $aqP+SٙE(;cPx)5Zmb32P5aO; +jpCյh&OfN {3r٬YlşR`C|m^M=Q{oŵpCn܃ayh.ZU +k~i02e%u˰+RA+kN6f( @\/6o +T֝l6؋HX{%:? BUы)BI9ϛ'_ aLP_ۿ3xoCjÂܟ"Z/8tTȎ$p%pa\R8N_ %h =6N6:Kb.iA9S6Rūy,}'sZ~pOզBzvN,߃5!Xt \ǘɲMPC6XnUkrS0!VDrXX#W3jf"̯a.O֜]֝B`1b(+P^te)1H +Ix'?8=. . l*A1ck.m>{8\ +ﺬ~ 2 +jiuZ#y#%҇^N?*wi:/SSaֳ0I'T$'\r!*BM +ŕpE!s8l5p[L?P%1L$Wk)煆S] hIA4H`IR@J#R lFb(Q̈3I_x6#ըv3& oIZZ2@ 4!Ȭ^/cZe2cI\#6 "Tq6Qݐx)&2@_x6ܑH.YߧTuOy5tC>ZCoD>/ƏJSph.Iq[8.Ԋ P>۟;p?bqu׆lv!#abe+dyz‹|&OC½7L{F5 V.[Y/:xn#B$qS͵wr<|FdQw0WHrX6#vU8PH%h@ĨYۃy:OP8 +z3 +>br=Lw"ǰ|^#,8mnΠ<דAgM;:+[rC~z48I.,OJS JkfPN&1cjn[@*NB"sќh\vI1Ŵ7 _Z[GfiK7 QZ8E/jɾFax9M#]5{4_)(P I&ě;"wU': +~UB$^vkeZpjvhR a qT;>GL!Y?]wH7OdҚL4 e?S`3"XK/Wx}EBqt妃6نj_RuaΟJ{`K Eu͐AY'2Ҵ(AϮ+fGV<CzY3+5Vd{;p+ ~AIOz!(o T</BMxiU {ff: 0J qF3y9Mѫ܇G~]b `o8QĊQEĻ͡a*a#य़!~y2vH)*ysQb:L"SxE&gW +MJ3 ^PIfT|_t[Q8.ORazdw h\xYZIx ,L{c*5K{\kONP}zߚo -rxLER }=Tcr*AR_YB?9 cw?G6f1h,E55ZcHt݀S/q.U's\%o/͓^mY͡ز@k.`Y4Ad:?P}WTo",$RR1ps/Rg>tNs&YT0fR.W7`m`9gQ9˙)A7Q.WY wqVܪUdY BR2g~܎a3jRɲgt?P dm[x1T %P|pl`r@ uƓ>GyAE]*~g)e?uF >~F߈mj]M؁MQ +2ΥPYANW+o+"f'n< +}&]d-Fq6W(KCr$?(= B@=D\Sm+'cPbhGUWF>prz$J "Y}oX ِ)*Il&q~- +a 63oPTnl?j&t">'|Ԧ,7뛩6KwjS*~KuX{P' U]5jM*.<g(*5|Z;Wgyz_PKg$ۡSډ^j7'_}ub T7k3C< +ΔY\H :A'%4#a`d +D!Gfa!{zI >33"H[l]e8YN*gp6v(r?|8~  +^G^9 *6^<.!0 +`D0#grVʍ7n,3wqBcܥ^SP|$P!+|nm[KKeyT6<ʂ`vnڭeA+NO`/EY>c.l8Zz2pQ.>\lOr}%b3[apfY=c LK۫3IN>*]w 0kE&'}%NBR + `627(7SzG[|VjySjs~ƇɯvC k]ɵ_Q/+GR95DcBے.yv ƙ]K{q&|0] > }9KRߋC3W>,h&y;=$Pc,FDcugx 6Cҕx|3ʡEFipCUIS&4L@*7SLPAQRY~SA_;L}|;i:|'|,-Dy N6͉Pwهz;"?OX؅_(7Q}xђHfRK_f83oEЀH{X۳RkP~`&=BJuem(_d\1/Nu< O];(ٲ@SM88-%|}5ȟ3;N@*~}1iW2)BLICb̅2XvG>bˑ4ߔ.JfqN /51af+-$ߪnٺ$ +iYBi'߆$Nc!% YS SMQ->41}mQ;[ x/}t&x|⮇tXHG^}vu@OxfFȣ{ZW1?߱obؾӄ?t{ZbD" 6bDO"ANE;g^ᦵ=%QhCO'm<9Z„z0:mx#`p˵;"h|_*t`.pqH{ܩۙÂaaᗫ@[,K^UadLa["Kn">C͸Lt ne I_~)a!#+yʺd?cIZ2Inh:.kW""6h[ɼ!)ݭ +4!*}z4VmA)5kGL.ſX/&VSCeN˦ՠק3T{'NPOʔ547dW9/y|$tU9ޕLtBUރvs\TtmM@GN:KI0_ b20 + be5_1 JmT2$dj>:9,9JRYss 6XV07,MϰwE=Tj+ _Is" ?ǮK<"#ȕHGxBZ9c1ޕC1\%o`XF|.Йbj#}V)PK^Ċ>ѣGI#|C:d`%is$8u +X/}:a}zqBIο#gney$\*{6M\w<_WVif d-qޒ5gEL2J]GF1T0[H$´@]|“==d =[hcKU\q\~njOd*9+N&G )h]`^#PH /=NV/PJ'Y#8ܸ;)B@ھqY z@>xOeUŰκp08!"Ĥ; AS?BdQE<&1[&d/΂vX<)- ]-Vi2$+98ȣ=N#y2Nxڻi7;*ևB.[gƀ!ʢ&I7//_RjuՒ9$;}~7H]"3>uf +' $#pCQrD{vtpѾi?}I:意 H|"#"rD+2s2Q4 + R(%mDél +Y,;qyr]nκ #Sot]4$z9guOOA]REO=\<*WM\\3f{BڶXϢ*QMl-匷mhqljr XE}  #7o)[ +ƿ1uܙ"wuҀ].&0`;{u,/8j(CtL.*\gё6b$A܂G1,>ﻔLs#kTiVڛѷV v`:#^g8̵;?oDkWwTy< ,6xP,.U]sft#7uY`*ʒtڬDl 1g:VӆR/9q hZ-8q-ηFÌOH8a)w3\kс|Eœct0kԨ2cCLmA8Q 0eS/Bo.icSf>3@.GJjlB`JT0-ѠO.?m^H]KDD$8+zj/Ƙ3j:[yp*d0ΒT09go5}A#uCKxlJ^,f<2v}bYx=M 3{fk263UHo -:Gp ϐ~tzrkW=mJjxBLZ)UqACߝ a՞vz:O3 㯴}ЇP"m[^/|ٔ,)`PRNn{ڃ.N`ؒ4fԩ+TaP O˰ pIcw^0}k n)zsO +"p^Jq)\ƚX//CwI;&M#~q k/U6.$"gW~dכԘ_J}'kڒRU-YX)ғ8{m`px̯UCTV2})8x,HͲ R9Z GcߟBtS<׾'[`t kyjr4 28yryL(z~ n6kz(JtT`)c?,APMk:hwPiӇ8{֚y:$Ĝ j/hᘥ`]`0 . -AT*KVeLx@/nCa:Q2yoaU<"vҥp;1+@lv j7/7o[~Tl7$P~FK;j?.J&O/ISǦG ?D?&d ,94bI}ua*G1ȻpqԼ̋Fu54܅eaMUDEƇm^, 9`aįMe.3v㣫m=n.VVUBյ aZ(@ MYix{Fq}KiθҌ9hgXaݸC~ryԂa2Rtvrci/4!}3.n +6Aϫ{պ\1LX*FД"$emtJ_=aruYxU,cm%`Bԏq*ykw~U].sɓ[fn3%N"} /uf [ldKVd?ڇ~y#s=l=ةY%e6"TPjgo)7pFQr)Nܤ(N(:FӡFRoc",!nR`o8"TÈ3rx,߷Bber >wuQ J5dh:[d"jc c ދ!Ϩ)O+W8"3r_7p%3KFWAK0҃$*iې7-=ctpUs&lS݊-ypӦB VqI2>4H0h)mG^8W{:)S Alj(S=0ړ Hiӷƻ| +[)DEZ@?4.l7{ +ikd@,t()"p IQ^<17uC*p1O5+|Lb%6MvA燇ȣS}i57TK pgvFd\+̼<J"z@C>gtzC\7Fؾ̐k:5*7+Vf@pąTN\6[/ aW||mG91ĈL>؄2\ +4j':. `<RhfմQQȿ9 +GɛƢ<^? 8Tjh:TM横ݰB'A4 + = }kO`Y4 ף\$Y~\c'Ň\EV3g7D}+2]m`86aNPNO)܌'N=w)ǿ95D9"/YX3|H+duq U|5tv=T'1 S z c3t3A~';U @W&[ /˯3)\C.+z]y+ps)b %q e.b N u&"#KN4pҨ=Gm (4MYmgF!z$&P@< +UDpHjt'Bg$!#4?L0DD&Sd~29SqQtm"GK!ތu #G +P;}[l` nD6&q;s(fB~BضhL0O_-o;hDe kIB hccFx:[rwIZݓoKwhh +dfkb%E{(>PhV +dIwP躧ZDTߍnGT RfG|줮5WKU'Gfu|Wa/z0e‰" *e.E ceZɮ/0=BRJ]>֞SNK΍!rAe|Af{v]cȊPdu@ 5Q'?+#\^K9Đ\3 s.|B|ZETÓ挧#8W<>G_ϟ̃uSgI,h*F]<~N)W)wJV󉦗kC&94?'"e0y1&Ch^;ΟʗWM kxu]K*Q}$[$BHo8"D$4BΑjs:1\dWq>:ZA:\>a9-:#rLU|~5S?gaGPkQddK`=YX&vv^/`V4u4!1qBo" ~Z h_Mv성eF蓫o'i▅Ȯywis4 y$B 1fKկn*#,8mk$w|ݷ7GhQ]p]-/#3Y~#SDp?1N~tb2(h!i?c4i򮽈|4yqX~bUɲn70a-t2mZ![3-4pЇjɡ+f_b9LE3Ksv޷;HOS9@[lQjKЉڢH}Dev{33L8{ۍiYNyS?46w@k6yaxAR26F7KG~P"&V:\B/W쉑w<8=3&4{Dc[/Ri$ ޗ85/.1jT$Z23F 8[S{Vz6i$B:ǸmEj͚T]=sb$jxI4E׽ ^k {k.'<$ӧa󏲦p=pHWY 4?0FBQ5YsǷWB<zF'/'lwxa",7ih +Oqc*`[<@RBU=Y{6x0oa` ɿ|ʪSnǏ@tP6r)osWb?a3ToQ0ֽAuQc}D22o&)+)le%לEi$[G"H5BҷST L +TJJk"Tyw\)[6~MpϜ bJJk2V0>2$zSɚp:er.En3fΎƾ>2.x+n'S޻.ՋgP܀)a pxM(Ȃl`}1oo[4˸>ϹmOH#4KKM0{z = + ~tltH01Dx'~ r`um#ZWN򈶵֨U\uck"TsҲ`Js 䫤d]raV|uV\`!ti?Cj|'f%mV/q#,59\ZVtj_ChiqrN~'A09h#%}:bw(g.>k^tzDAˌwncH Sp~!}jQ$jD9DmKVPnS}-CE~=RoD`\:OA1 {7yEEr01xMWCQL*8ba*5ݷf:b0Rԅ2`INLYql7CIҞzb41ͦY9EqIOXmd'R-SXZ6RYZчv}4ftdLɛ@+>?l,H{2T19Lݹ %NtQ6y1FxmԕxMe~j7o.L(77(gxnW6ZErOHFphۡ/8>/J dNx;7ZAyBvOx,Kzzn'ՙrdcr n̖9sVg+p VТ `ln'tRR &,7]Dٙd/'ж +3 hڨJT=\ QARhu^fhv6~u~e ? ìشLA}8┪!rĕX. +J {qA#ﻲצq;M-af݄֎*l= .KA\'xWշj&}aU|/+jS  3To՘g}h 3:wNFEg8K0~3CP*6 ©McصwSfsh&SRA1q6" fعe4[v6C3Qiޛ&V]`cL8"G*VQ,o̲FpSK[0]Hbd`5#)7 sH:%-=(cD"˄vof k_~5Qm@e#XFU)ԡp$Z-TwO('}$llP@rmEómX?vWw>I 9Ql% xok{TCribu4HE1t9r_ɗIprնUy~jl`c ;7CM淚QtS5YX`#flpn|k+YqF12rHm( Wu>}b@9 eU/8. iTVc v$USkC#-sBy,$yӻ`RǴed` +]bd蝪ǚ0R7`E؋˥Hu'6 ~ b~t%{*6H}.X +noz .XR<6"Q,Wؽi%`a[7pqwi[` = _ ?p+np=PH:E\!`a^_G8|o|Wps%V0Pu@C yyγ6Փ1A< |>-"B=JBƼ?Nrc>*ۭ\CNns)LHhfb=nAR/L?82q&( V +OxOv4KobF㻠6&+]HP>a8,JWtl[9ER%U< 6Y-h'G+5ɐ9tr)XL,xl¥5IǑV1gm$qMld>xUw +g޿roJC ݹGd +{g[3B&-`=<`;K,z^!X6>&iEaj_"OʡXU{JZ(xٌuD#Jcw_O4>_B?^^=1<_%Ԗ႕ڞLJ9fx gDx_\?g݉)ڼr]Df PnҾg*=np;ˈlE0"dhH%G7IǯQؽxD`_C?)\ h\栛˙1!)BmQ0Y+ P-pEd'~K3>+ A!V[@_ J8r͚ה *p!k_,wӥ!&SHJDjעza#z8^tZe8U:}wz:z\M=ő-8%ƋpPsh嗽{6j`xLut@" +缛]Ws: ݓ0^Z Q `g#셩 w:j+oc~ɨP?J}B9C[xNf8X׮A5k٤2rgjPmPqtDn;Kߦnع{ձq"l]0 TMt*ӜVv[9oS \wC57%ێFLІӼ*- ˭*Cx`H[fW:7G>_1Rif٫(S&Li/,7,E]fjßVs9DAm=&E#mϱ(fGn=TN sޝDikl\`rϯ{GB 7ð*2yk6sZaYGo˂*͎. Q=hz;!=(HQXfP~ =CR"EUrYtaerDY?Bh(Ţzͷ7P fLc:̒2y,&N &3]{akx +i6V!RJꯔ/:,ϕR 60~,O_[~ÿޒ/1H|+d듒ޙt3|nrkJ4o[Hg#R~C<ߧDÐRdHّ+xh? 5սrg<^BYgcѴޓ\?(4JP}@.`̷<S'߀0J 5 '[\q9pbtva$/<ڼ{0+?\Ny39ZGB^wO5>͵=a .R*PB'x u@@zdUs'*$S3̅TM?ՙ*͖_~3Rn?=su +s/k&AO< ?u\WW7oӪ4JcU, EExT܊]3;%¯NoI̮{5*JLx`7wXjr +%ja^ǖx b2V}XLDu{,|#UsӬ"TyMٶ[X+*7ji+sl(v'! S:_ɺh/jmޏRpG_٨[3oA_ :U78ãctKY7qӫHqq_72D>t DK,|}7H-}:8+ֈY1uzLkAĊxV@b[#Ql]V* cvv_1B{j~)ԉ0[OYYsR%U!W7;\ .!Aap'[*WbR,L.1 b`cNMaOhm@H9eyi`{B]Cj`4zMdRcQwiZ<3NZ3R>1 ?o" X> 5 +m~S"=3\gbPK+ngUA ǘ,]8׆ +jCIs[2\ӻ'-ܡg˨ns3[O;(jeO%v=ӞY0 +t_~+g~%"VQ#3>}Ҹ +lutGhR,Y ϧl/??Vf3(ݎ(C H+7TCOgF []? +2ch/(e5:R͒[ʳkliR`u o^lxwYyC?Q}!zw5Kض6*>AZ#ӟS:&gBjCqƱP #-$PWƕ^IRHL>N{Dc?M:M\ןp5 M|_sz%t (qѨeDsZavWTr2n>~vlz=6vJ .:؋QkKI\`4̟n)N?Dٜfy :Y~u"!eJxT*Z=m%ƷلE->6f0x4%m)7a!חV` Q (4`鸬L[cDx,kWTuƶrĚKKܣބ "TVJRIǖJhUh}VXMFM뎉a¢^H>j`v܄l`O68)lc.N8qrta_H/H&ZWFrԤEP8(zzBRlŝD3M[VY +'1k ela mp"a)λX3N۵Vg">D{JO)!>,mE^Zz\&!o7sfRLJZ_(hj5]gD~.=TvMw-9FSdU!Gt_^,nax0<6 )w,%mLfNq SZ&0KL_1l%+ڛ#g۔"w=&ic4R-&80ga1TyLbE/2_va'eܝQ@GB\ MVM̆!6єR;?'FŮ4-./I%Fz +nY7NFj8vLѮfiw? P ) +IQQߴ>*x(t>^]$EA6w]5[AhR7\R_1%jTyDzSRAH_̰h9[f`dB)2GD5Jy ƈ +zvhJEߠlvd'x\tgϫ&:`&}k +d1JKWBZ{LqӾ!G]MVx,OGg&,Y-KѢh2ɶmi+=Z\&.H5%b qQqb`IE-sHdE˫ڲvg^/X\]JYH٠hy0ҵD " *_maRl ™D2y@! 3l>3>[2QK,:'CBeYaNsërn70M>XZ;n 8Cc$Zp)|m -4euBJsQF,§ #X|U3{ %G{B*rU>(#!j`u:liaBzG-r[L:Fw&ՙlL]hHw@l; {xq)j@kXʟŘ`el2? Y}0a•T^Ӻ>ۣ@FПҏJgpDq8j2 l+mf NG-Nk.xCxl޲߃4粼Sp\J2`&r݃T|RF[7܄;ȼh +á%OyFBD@{8:ily }W+.BL_Wjݍ[[TO$ +]ɱ`=Y& *@K;/7rMi.~% }BUBqkT1 je3|Dߕi>$ $.zzg?8쎦Q&:g`/ S  `j?2/2%k3q`Tc n1`^y4f6HwCӕ]|c?|YJrC7mR;%a==6fAdeIdL>u?CS$&AA5-N;tuƠhPoTlWV@2P>֓dm…rT}y>̹w#Q'JO%  "KL<7؅!2f,.>p cz%t@VcA=;IڽzOHr荦+a!i\2_뻓GuU,a=2Wt^D 58$:viނ.Aٿ^u'}E\Kvva@ۀvTT-VaD?Ӌ~T*hDFz- "r/TDɝjmv:rEM'z=>Y(

a3C +\rWG{@9뫷qq-R\&I }%3%c7D ]nbi69f+d+]+Э큒jr[m| ;nRc qQ5D Q!Vf/aR\5"Db\@{:ak/ ʇA&iVdc^lrÏ o2jv#oq̒,brm˿P0Ou eč%@*նQklq4bdEXYBfZ>F`Qu{hKݢMn &wW5|VEy 晉4>SǢS8EA}hГ1)׈ڀѽ`YD18\݆jέ^^8g 9> 05}EkoƄ"(A3>G0  ll]U%{_,oIC .T[N{,.cA-b : amz7CI;Yqh5dQC'[YnFr70) f=lJUdO[0"S_q@C.1G03ho52,4KU$ƿ!{_V'LI%4XJ;!]J;s惡۟+ dCv(GԕSu(MvYG7 8$likxU\=ZU츧uSꘇ_νO4;-+;?Nb;$XtD,G5z-Z?>iPlP9ByjݢJELf]c4QP7k&~dYQ4?<\,}^+α3s`++xQpw qbsI!pK>?#`upۼ~cC|uxwz"[ q6 3574`uv/_7\F^Ycvͬ +ZKcRb9O"$i(6&ߚb _n!` >:Ua>= 3T{r8+#u7)w>| )M'&ko0Z=5]XˆDa}hLǯ寶;?Rhݧrdo=Ŵ{IQ<[2px'.'`Ųp> iLC0EyQij3[>fY>9AzybS["}oN-c@9,nw%fl ͦdynH )¤$Z \٘^>e<:_#Vd/D8m8D)UBԈ pb .Hq}.O$kun*kCZ i(c4CrE7cY}>A9٫_ k'Շ/ڧD֧Q3?nؙ' wEkD⠱gjjTWY][ +9b5b)^V3[7e3w M\х{g^@>P􀈥y:6lZ&0Tϑ6A"k4`<̠fG{䕜Xd2c4{et|*%fz5u +Q7:Qa~H`B+D[gǭnby_}r}GG1Z֍[T>/}5Z i Ҡҿv~pA hE&x+ZM6LƦC2t:5/S1?,%`/藄GOyTQ.4K1izS _;Sk7ʢ4Nf>CZo-vJ'}AۄJG^j@ E޲j$d:j O`=UЖ Cs.pao}vz,7F0ypenֲG w}%Cpǧ]|''#dqRg/ +G8~>~4&X9Ŵ-?nہVFRu#s{|*]i@o|i67T^RERwķrJc϶e ʮ]|f++Vya:pjjp.rFc6 AF̰&gP]| 7Á驚>al7"b} "bucKto1 +`tPN2Z'._W(`s2p:'Za奘ֺ)ө*'* ec$IϽ Fak)tA`?nR* ZK'Xѥ;ψh]0iKg%XΓrUyZdx_ \Yկ >bΕ-f+gSVms)5ȟ ւ+w:e < `+M%؉'P!czZ1Mf~N\kȗM 7iR*3y6&GOUl=i, qbE +ܗBۮ@IE9!Y5OX8X+fƯ3+K(S( '۩"<=bθNBCwW*+-{&za}V; ,v#g ^>:1ia }_jރmq *\Y¼I|\8hGt\U>?Վ7㠚ִxԚaEPxDU$OyF=m٢?"R`OYL`oʋOtyl>l`v葡1}@۱VL Û^%}H%_*hOzn=έ$qPX Cw b:Gl ֎txGD2Fg[vzNc:SJ?CjrBTܮ0|\'FA`W +U_e3cO&$ %)ty)bVPU qOXH9ЫrQY!lć±uX#GJf<h.^觫]׈^rIdke*#r (+iI|; әL1\[gm[:1y~ԩ"fx@^]?ѤAy«Pmq>U ~`?:>9[9se\,l_ ۛ %`n!@tK+4^\zbn D:]?Ow~m|ܡL/ +6yFI;l>q_kxåm0L#UY0+$XaS`: +_Z`#TU>z:zvslߪ)Xį rEIiy廓{ hSSJ L@}yt3& m٢@◼%vNy>ũoөNS8*gɑc`[ט=ARD rzM820 @6T2-_B,?V.LnL#64 =$ zjt9ZʦO4^e4 R`B6T vr_8m{0f6+eEC1l UR\8;^EArP^gؚ{fw&@t[DN-pwWǏZ"ͷYdHؗEfwdl`֮~ґh< r$_N!2;;3Agq~ ^3tTt,zy3בO*~[/-gEWvuLzbtZ'W,2njqL5 +E#Lt6 82fA BH±&vq4 6MQ_\asg"-Ey 39eIz֏I:Ȇ堒 v]Q* FGe*@I6)ӭ'L eҷW ~b1m2o'{ORw 7jBj9}.~ӑqso,þNsĩ+;KTB3ReQ.R JcP6?-e|jF"c:l\$:Oi}J͙OݗNՒV_hf;߮ 㨆QkӬ}l""UxG1NJuw~ptɌ~&ח=Yol&aRIl#* .ԵET2u7p OmM%ڶCQV^ d<\1s ,.m^}8Gn)ë5i=׶#%3g4vx+p"7Sٍ +M;l}Q,gOI<띝RRo~!G25 ,UשmI: Ë+>'*#K26fDg"Ț' !__Adwoj>;Xٶ:G}2E7Q"Œ j:,~)Zl9)cm=>d B;6 ݳa*}Bg0x %'oNX=T8 DR4/D;f;cx^f *;ZZ"px }-F HWJ<+Ekxsݚn%;m B52hՁxk}(Z$5b; $n&(PKȚfz^>SGH c <Ԗ5Ω[-s{FgD +Z} L*I5+pOXP'T$fS :0Ts}g0^h́DG݊P+q'#.z72T4K dfI]`$dOU.>-p_JX,\j Qb )3iY[YyŦbtԺOዦF̀_OD1DRH (mmʽk13D9#٧1%goG,Hbk9*zAZffB06͆+k<qta Dp JղF:ɛ͘ԎraFŎlxoZar6L_ )$lurjk[ڀTAU[LY{u6tTͻ5y؂nꉞ$r3Z39*:>0t0[x0iZ |^Z";1r]ޤD:`ow01)B?H>xTWfO&#NZ XfѱA)Ns.^&pmj2{21o~{m +۲\`;24`s}k'=/ѱW2ma쯔 dWcuN*gF:tfzJ%e)I( w7gMs6hø\E/gƌR 6/H ?*l۱ѨE\ИЉ?_wL>/OH4Y:#FZت6f48HՅcEJËlp]pI!Ny[`pog&S f]+>/'wP1u! OzUlv%,>x߅LTkFޞ>;}?Lu&ר_Jʫ„'@˒ѕ'[5/S[~܊OO<tQkJ5,)ⳀNPH|SkJs>-@pI;{9ަ'J\')fN|ol]*d^[M)NA pA&0k"$8E"9̨O"WeIzwnjqua>G-!zGhQQ^$`0@d5*c Rh ,s'f55wq_ JXr7=?f"<[:t:!фP'G9HT)X +0w.cJ r-͡i'Mw|e Da֮71)wd`R=EIkF/{` +JV3?YF;w:\kW[ZwdNaۤ5~ϵCrsR4Q܀O86:Wr:|dlˊӈ¾rdi+[}`&~k25=҆T u/|mwX}²9N{QYu,6k!<3?ַX㧗yY74]+LB4[ûG7:H3)~=(M'TbwÕZҖh_z4Z{_Υ35&T&8. V-NP-1&?16'x"biAjP8&>ݡ+~p4Kl6S(=MkyEFy"mQ;S]5"p`Tau&Tl[v}C`IY|f6|H~ДD w-&yD;X`MI!QZdLJ[ "U߼;ܥ 2F[ZPmo@ !O,V|{j>XThy'fMNҩjw:XW)*|']sF1K2[byG0p(a@XyCLdK"sZuߠ:ːmtlI! fFAve;/&5V 䉦xuBZ0K-cˌ@ᦃ@Jr$eQIIƄG*˖jKtM[)*@k_5mנrNٴ +WbqӒ}Y"> Py<]TsK}?1ڙ ȶQy]&_&}$8[d <(~&̑ڿ}a/=*4eiŢZ"U2b|G>y\fG}:eƃwMGfyωlZ-U,l;|&B,K%JJrxc x4Y8LgkQ&vu8]'b0p¼FOA$IP,ȧŶymˮ`!Cq ?j"㌤^CTȼAqvp 4& v,خm><8*gOWYz$g\0̃Bik 䴓Y~mą{k `pn9g12'y{I{;'|"+̸SaCcpŎF ͒HF/qZJ>G&Z7jwd$0+f=55Lr}dnzHƤ<'r2O5]''.5{Dp ٠4TcUUqMaD K&ɤ7gvmj^p7d32ӶBmEnkr#ԴuħxТr57*O 4򾸚AxM"50&+DZ WgTIŠ]7Gqi0gި 6^GKw˨`lde}amnf=#3plqn( E[9MG;'@'46뽨s#{/mU84֮wY2#_,MU1H=T >πHQiTnZP,+J*t;1UZc]bAJ8ͥKAq83-}-8j*;V#8R6 +bXm<{~ c"&L/L1O>7>Ec«Sչ^MJ;bXojV^-\/Z-HDkP*4|fv;I (b'k(zֈ<Q£@t|'[2GKm\+&zzhQP@1qF!'V1O'x7gUҍ I'şPk ޘxp^鿈V '.ԇQBaͶJ7;Z?Ht#PrkI%J`f +\>]W43˳gfhDžHG(M} +O ܸ蔍Gh;Hn*[IPgzZF>`%iL!ρ4/4)wS=RN՟!DK# {ޗg5hW4_Q{DPҬcHӤfEC&NGc(ژ0NBIJs%EdA)?ȍ]DO >y)pd +lA;\R`-\/bsW.زX7APy ,8ݙ$x_%Dp&qEJ =оOovlmwvcXA4@Ǿ@#_tbnzvthBGM ?oK4V' TkT`4A/Kc#PxB +./qF퍒<bQ*+t~ƌl؛iWCɇ}kσ +,CD`|{欲Eo7狁|!IrXa])Y巠_g^!zW&\jc+p7KƄLK + +^M5&۟7(ѿ7p 1IA"Q7ap5Yd1^${8|nv)|ۅR A!\BvhCL &O:ͯ٩KdU.*aN}VPLh0i۷Qk {)r~Gֻxۏh=V;hJ.F#飛)!s';Il'C7Gf%[,wWj`(噓iP-r B[KO_+n]` r]rM/0fu+V4k16('$%EA^1x& /bQS%aۍրtkHQT` 8)@nñ֜ +vg`osqCVW$ o5S/0À|E!#z\u <'|^! !4Qomy}¡E^^ Ms@IAVKfE&hK0hףWqnޓiAZ+JlGJWtUb\7Ad٧hRx7Bqk3m5FQʹ+z8"t-˜8.W:t݊53 ma3y=l+i< q)G$GM:?/ݹ$'s hJ3[{MbU*89"]Sϒ@\VũCo&x?+`] w5F3K @_59F%8d6ak۔yʩ`t.}~Cf{FYSBQL^̼ NH}a޻Û"4NUTjHn3BrGbX ȩu5 㢺0f/+D?>aBB+QJdN }/!p(ևUiOʡo?S9X/dnR[\湼jM<('[-ݞ&AiBb_WAНc XUl~#YEi6?>/d1O/ZF(Qk߇H'BK|>cwFF {:_ߢ zm;P6*Nk.nLGwqD`jj?[Bt--ʻ}m ,>Z:VM jˊ┢'r&"|OK[l8q_y芒ahkôT'a^4QpgyҎ N9עl=ߴDdeK$AۏL Bu0LJr͓ \G-+qť* " b Ƅ/ԡ1'ڇQIc4e*ܗ+"GaATy{E?VTG>\a3_GK+7R\$N]VpUܿxa'E9'3٨_L*AX,7,X+eS~e_x _aU$jfUx»{:y(q;TkuQX o;t[)wKdmx;˜aIÒ]3.ýI/CVC )ÓwO7W~s륚790RK$b)Gr֜QAG%1@=HVϺxWl0"Me쬭,J7nɿ}09 "u:>y[%b\6Âɛ)~ձs8Fޒ"njMP`u2Dr/A5ѩQV +iAkwh9QdɋӐ[eƺ+ܰBo`|6lh&=,@0 G)^u"OB!x1()^a9)5r*<9ffYL!TiBvRH286)!bm~)J@ cL}vBHP9hè?(acN˜s?wDqti3fIUylqxIH@_mBm$gV)|R8n]:8O>.vY1۠he&λ.z") @K#J?NKs(gp]{+uu3Zb}"el((LЫʭf5EѸ+E+.qJ"nWMڏ0 ̸o|zx +ƙLg) + Iu$!JjoAY_(t̹!ʦ4t0HE77lJJFꚆ4scH՚)X kX䬏3<&s}g`G NcY$ +4K/}؍lZ<5V(rY^˛;on-֌{SA8` xfIȼ#s˼8%;~oR9P f= nߘOY@ofbO+ⴜӁ_ &yz ],!ፔdjl #qbV) R!5'+V'4;l~. [,q9`7e%6ޅ.YN9XBkQ͟:ܖ]Tv0k05LSI Y\{+{B@%g[K,]r~"J\ .7[BG +knAicu6]~VG^kn,oT"PU* p;f:t甥+f;^>MR[I~b="wWW}e,LBTL`n̞%׌ ?(ALkD*V@a| sу–-zz_N749Ggt4wl42 鯊CU \Bp,ebXb?[h~Smhݻ7`yTq58˗KGX_c$:R`M}\K\C@$*(*:cQ"V5> Nv!\w04+5@=0e) +~-Sϧ|-@p㡏#8[9KZ~ntoOܶ"pDj#'3l_L؁lPU榓js[[OP>^,tu/I<1%4V1:wYɑ D#nGbv$&yΰxɄ" Id ( HDspcҴv\*zni KP4 +bfHW8kJ J + L=: e$AUGt_C4 o_jC>}4~*&vAvHL bBw:ai;>2Q9Jf&ymllG}]q0a-ɹo<ùC6nNW,bfmd>LN]@MbԐh0fh/ `z}u\D˩)k훾Kuwڮ Z +ʸCva29VCB^H-q]; KH!2Bh[{5+uLTX]:j{P"/q 򴀜ڏRcw-1>yVCu =rw*>&~A1F $z`Bl߽#b`݆ݬ4mAE%JK|WBPsAX/ݔ4l3]A?ph\l6X/YۂCZ?UaAÞㅬuW.vSCZOc>w h%JH]x' "@CD$65u-Hgj>M{q|^ۢVKسwD!%:3kލY89)QRnLޑ@N֮|3O bJw.0(ŃRp% I11xE{yw ִim~`HiA3D8 A?%Ȭ5Ŧnk>mo~S<-F՚(xHc lޫCHgD -ø6IencEoc0s #Cɬ:1Ijzۢz7ʣdw+XM*]o=9/bw+ߘJ9XeuH8db1y!y4sKIU3.2]V@>}74p4"?t (yG +$ٚ&/-j$'ƷF}KQk TV]f„O:_]HjfxR. +xZ덏)ZmOɃkl$XPꂆ[૜l,Ub/hW]\ wΉV0\]Pyߜs6RJD>][=W#;ڱ_ߡ5CgG#(ue+ *Rcɽ Q1́p=u&ײZ>“ΐȔߟ&=f^f*B'%BzϓZq.7+5|0OjqC4S,6\:`[mddGh1t73'qT\Yo +DUmۗ;;vͫ4W)[tr0 ߌL/4x,d6e?bG\J%ڑi\:o\:hX#2#򪰨fd׉#O^f_n8G q"4pt0VG}Ƽ|8F}m@d6RzGp 1.U:ADL宁&0ԵɡFg,Yl,%_\ _a c?w*b&\x'H606ךdeWq(ft e!u?L "Yz4Z#Bӊ@.,pO;69-Kidn>г"C +;՟^}{XK U< P巭bGnXmc< A D *&e\8ڭlϿ+|F:|L ib;TfY|S\51vh0@|} +D DK%[<-hg~6"٘EsćO3*Ҙ32 SvWFJhX9~/l͊z&k_ΒѨn2+q5-) +%`ǯ+1Ng9`wg.i|3];^h |WZ׎CB;;݅!\oMHW`qĉCdKpsR8xi=7Y+'ݷZ]rzzk5"l8O4ؤz~̋s)VC%wMüRCFI?+ȓ]yW]D~VJ< PX!tx5P:J_SC^ tmo#x +Vx+묘Dtn$) ’22vi÷ =۵_ $VGo?cY!u*CWtk3Y`Nq_WTNոxjF]f+7.;{+}'úZInC[>Ud䶡܎m|p^ɯTu+'3F V$! +廏T@g-Thh),ۦݱ2jENHE1vnu?nOM xfXoM[U/_d$MB}̤UW3w=nR%)0!h~|y-vJt yB@zxr0j(- ZD;}|̺{ wHg^y^5"my ;;:iG]-bHrQ5].96#>N{ ܶ].|kτ*I`V# &DqRCM 5‚= X\ "'=C!0 +yZY# 7ghy>p0"G(6-O*M݅R Y)7|>\F,.76XV&F' :'EVBM?8+:CפzOΡn,(W&Vゆ2+Lo?7}F 똫EpVƽ_:xSOrG:eaY~>$[|E\2!+ˑXa}vgI833Ef|FdoӰxowCE"kg+aRZȝiX>M6Z g +.mugB+JG57nZLlCSlmVKV#e6m vF>[^Aktv"?0S› Y2ɣA] +UI3C&\s:(S" i-M\xXBXuxa澼}X5}͛]XcuWa#:oŹ:T3iG?k<#yg\AcCѤ}90p~U8;s\' GymK-f<:$NF_K+8( hZ6Gsea_4{GԬQ %Ag(?anL;C>7.cݞc`/Zs9B&ȗʿsXo~x"|u9bC:?]W7Sz+$V)H509sISmn 3Qb-Yױի^L(|FAވ^ƅLV댸)rn7v?.]8z*yph鼛F3@7tF=bM%t{=f8DF-kL]*[ԏ9DzukC9Km3iF ]Y/]e3/$8!.<'2C:G#Nb[V&&]a +rN(< +vcg/BƖJ|ǁ=+/pqfdɏ꨽|ROD9 ;WocHV$BW&.ʇvfƚNplo›bv+Kޑp:޳TU[x'{"T7h1 +GkBغ>XhhySLIrѣy5BkaY9DzlqBml,|BlFã-oj9$8SzjNE fah"SHlb}2 w~D^tNZhP2W[>䁵,YbB1-h/a> bl`}f1*|8H-9s{]V 8 _@f7*PWjfK' + S^׬)(F?mp~g5 ]o/¿}Nh&%*hU#6N8{1U[chrgN}0kE$xZ)}S0*UCA g3G7K.T4w +yFUI3ͷl:YocY;ͩ69Wy46SA6hblŚ oIvEfhԧ+ -%k尒| !sIO8SԒr\pFOcr,:6S@N)<܊ /rm1>}iMh@ on{ac",oPGO@jU)(IʷYq}\A.1SY5KLFN"BLdf. הMf5(^77'A#tQkd^p")-\r,2aHs?ϢVHO5 '$'>*jbuPy_ڎdkw$6Eex +zo+ Y5/+͜&}ãj{%~R`zuDCd >VSt0r(WA-9Y/8ɸNFފm=B +Q˦<c?,z>dsϠ9gLҶ54:젏TFݲwH1rrZ +ONjRt-MtS[d1i~: C+'YVzAX%IԄ~vi,t泖vxy.)`F YE ̣n#sflF"WjX)-n Qf$Qy»aV3 &ʾI> [Ȅh&`N0x)RBIaހ,>I^þŇys b~ 6j*A'ěo?҇f#ǘ挍ojvՏv,}Ko0'Nѡ7g|&ݨϲwt.%P\2iQ,ѣ8_hDYqRľ!Ki!^u猒[u56ry0 cŸf ƾ#l1ŮC QM +u)?n(Q"_pWh7raX7to]!d nqH\,q pZ.Il=VNo|;=.hmG7Sű?c1A @<ݿ-r#P^U?ڇM O2zyĴHiSBሢ ř"FTߴ~f0VHduB}]ѕ5UƫՔ +yR5("٤+;9 StCCٌ+03FNKeTm̖t~ 4LE +?t \?3c6Erψ@!$l_R5 F(K:_H:1(Tb>DcsU*Y|WDݺGk\)kEuG{xQ G5"%Uc߽D\+FM>!I{v{@Î)SoY8M8x 1]sma^b8[;@e0B7V%*U0SI%bK6Xa8P8xNc֐=vK_8׍"[F 4/,U-+g:|KiR?0a7|ь +MۻߡsoWpg6ʒ9]SKz:#r&E M`GjTh$sQ6QqL gms h-Mk :$&"TEҽLt֌}K8 Dq(Jrtku6CDj+>8zV_#bCZ' Fz4М{OW!Ș]3:G 8rw&>\27jL摮S>FZ +^av֪u+*b~!Wcz/uύk*5OB1+P*k=&h8*C\(I1Eʊcw+V>HFTaOr-NE'&U#?bK0VN1csjo!@P +2 +d0K'&Sd1&<ٽ1mK[r`$DHk`4ܯX >變z:kQumO<Ƚ Y +0[>TL3Fa1eDJ:_/g̿fvb{cAM3 tʀ*L r*l,mrqV[CQFb ;!CK0fHm5C[.#fBfVθ9iA_|(N8 +%%tf(D/әH[lNYg7W a" +S + DE∽Ŭ1 Me~Ҝa;M*MQ ݞŧ9#'w!JQ*D߶\tK"(R~vPwT[⻽` 8EϮP!LJu#ec r#՜ ~\.>'yW.A{dGqt ط q14§2jVӘQ[N螓v7Yq^+Q2 򠔚8曠!{q`HOgrWl*؍=D9zXI9B"Ck#5dMJ(Fn{L|GY( dQ tR~Ӊj_&˾>4rMx!<nHBCk5?Bn/zޞN`o)0}J_'4"_agtcXl3Di..N: 1L9nrNܫc"IzNdou"ȣ#tî28`?&03ϓ}C꿓vcЩOX?l},`aXGVWjwn)4_80:<s28\4BdS^pt" |jwo #iǕ!0`|o~uOu=z'oe<"/ pf!>ur7kd;h`If7\kxARJw˭䊯JSK.m>4 V:`y1-4' x8ֳbMUQֈAN_I%P[T\rj"Q~aa4M8 r5"͇L~ 4:~'%+P*9a^C.QAVSUO"_4m[ziC ґ*!'6 g E*bcs+׉.[UHY,A%8XED)=B# 5Zٷq☍-ɱ&@Yl vrXf?H()9FEƠE0>EՋ~| ]iC|JÎ\ޝ{"Z +DB0R.sD=?; k;ʹcM<7^NڦjswC3Ѱ1H ?tr@0BR~3/D=.hqՂܱب*d-mdM=kr}r|1.f|j?Ϥ}&YJe&ΊoD oX+,к;SAԅSxk+7riVwny"y4QpsTbB]gDv:\ϒ}:VOYT?F?-?䶫=<>I_8)n0=_ ~X]dQ eMޱ2_w8o8 +'v^['EcAC26V)* 8 TVTbE92ܙQ͖6ihz7\p)Z ]$ 6jo1;B?u^#Hr;ht|Wx?3 B7_u.]m~Pzk- hNej8uHc[*t\~ekiwZ"z;wByҘOyI.؆&# T‹ft 뚎 FUa]MZ+&[dڭ[HJI&wzmombjwɏ=']c"\ˎl nӒ/jDwmZN_~ϳEq2E޺g9Jvs)W{j#\U!TY{fr߂4Eja$.whiaţUPBĘnn%OJWG){i7K`ey38ek|C\pLNDje )MH/A1^69c4H3jH1Y Brh ]y +~ +wg0z,Y !BszSvX@xN&.m$7PqZ,I(.) ٽ+yY9n>Cr xy+۱O"5=˪C.$/6,{*sYBtHq0i)迖z+-ʁ ϒ݂sP֣;xNL +ɦ=kHy܁?91bJ@NϬu>+ e7Y(yÿNul,W !X&Eel7mG1eSPhQ\W1DRc5ha87 +u n ;NAW|D7WE<3J4ǕdEcC7ʲ, 6 }k +^waa rq-gNh#(X4.!^fgΏ0k]CkbYVw6Z\Ukq%PN: bj|fQpm`I$6=OʬetkV@Ksud[4 ɉ_l`Q% ɪRdo=تQէxJFDol&N'G>ֳD KTzW2[I9m#7_ L0PjY3;?=mvL4 +-ɠ7hM yEq~w9CބReaԂf}=ϔJ9 @lablJya +3[ +endstream +endobj +312 0 obj +<< +/Filter /FlateDecode +/Length 11212 +>> +stream +(iFz/e)q^ Q9iaz!c2Y&FT  HͿ99 4"9 #*LZte@Yr 46H)۪ts]EA%,m9!czxrh3_RL:ԲP]]!^(`CM&<eJDj $OˏafUEŹ4dw@$K`ɮw^'{p?T}:X2HO԰#V:eڂ\tgp`]b'ՔS| y_,C4+AZ1:n]D.6 ؔwn[P ζ?ᒭh. 4P/UroV-lMA.dXIm4yu7\#yFt(mhn# ݴ𜊼ĀT9J3h҂M9u3ό)\$V\z߆Cl,DL %~j} i2;DҾ$s *-U36XKe?T+0 YXLJdUO=b@h1)]M^;m*VxSZ$NuMWPogm_<௪$&ܾPٵ&2QR*Q1Rd@Xq,˥_!V(=N!XL-jGǦNU6\Q$/>}Ӓ jN^4$"&6$P- XsO{gu9܉[Y’NnMP6s\Q/pJB4/7a{8R;cllQa΂10 p 1ܻIRdj ~~4m>AG_5[sيj&k08DZ_.~b¯U]:ڶr6 k {>̊[[iޡڵx"NQwő-:w&!Bl1{iUkN B(fhiFV̴_J +\hLT-qhOր-簿JMNXOONfKQO^Ctv_NI&M( 6D +_69oxqY;y8Ĩ,]W~X1\ Cf]4 SO4kbWInJ\ ۓK,> =W DF13Mp}jž5sbw, 'v9) 5=tɎϣ9ZuȀ-S[w@qs +A- ps!aWR7"xZspnO| 2HBMv{ϛv{st], /Z=3I#7N: "،tH ~j +ptS~o?;{5R#L/W`[iz1]a䯝#VVj` fUB*JY}r2$1%÷LY'~6IsQrf?|%O 9J73،n;ķ_kD/f&ٜȵCG'Lb_epM"~ϫ0'S9Sn~Wٹud"N!BXpKjdygW5Co:m1,Pulm6jDgx![񧏈sݞjѻx( yKDBsr3)y~yEO̚9hu G*ttI\i8Lw>kLj8wc0&howݖ =z*s 6]t%l)0 y=;@0XR`M/jX2QkԎ,3MƦiꈬ)6±FZ w:$ȩmLV7Q (wAI&R dd}xa!1kBdUZˤS]!Vt(~Lk({6T&~Y-'x}&xv5_Z*[5'%:-"n.){wxÎ[66V{%$Ȇa[LnUX[X?d?$y4 CFɿX&HcKqdU \KJfK1 += G+Rd.\L{x@=5 +q :09M8o;3Y;5F ;l*֖vƶ8~"kj"+[C%ެ#B': [vzr<*֋1t-'0Ad(B(yο.Q=쵶@G5ܛt1{B 7QQ?E*"2%DjY?R} ~Sݒ +3o2%hCMS!:sqp(G)%OKt<~<$@):PXsu^Y@~:[զ867,D{oٳoVYݾ`+bٞ Vi_![ҟrGrϧFvGqR b$w9᫒]&->lRZmڟ *YWI8,JܗBpOc +? 8Dn`fln="ײAjEg6X P6 +,$HDzܭ-AfZZ%=Ӻvg-F7ujQRP0|1C +L@\P +ͯs0| -}aRH˹PPUWh3}|.wr >u?&Շݳ.D폨p)xpBSBA*PjN7ҬU`cRb=PiA}KGhݱwg?{0F(F VHU%Jh0Ȯ +A/u[)Sٰf/uV CesyHcmTmWX&0c/jYpD@A*4ʼ2| pǩz:_ĝD38(B.׸ui6kԏL9*+HlV@&x]aFt !xy.qIWng+}5.h(bWYJKA}|՝h}vE`@|I"R<ۭ#1S4.Av?~`E̋X4 -L$VyF*,ѷpv(ha(V + 5^"-iN['y7T.KFz?UD$I +KYDt_ +p埰^ $ªÜ+o_^)+tN .ZkUPzDBw,uKD17ЛJi]c#sT1O9B%YkeI%kgT>U_W&񲓍๷ᨘe2 _l1=\~ .uʤ?XHs1"-ʬQͣT 6]`ڌ$TmЌr+Ƕ_7~ E|_K<${>7g 9 cVO߫99!1A$&^-R7TczP xIP~Oi%5'mS-z ;GQCF+vϪz1謚X!U4bw>rpzl F i/zdrZp(>C<>ES"_rFnf0\ J%M7J`h9u %AJ=|%lZ>νW,wvnЛhU=.8`ߠa? +PStx6mcb%~9/xp1bI(ާcaa'WT]_eHg(NYt"?ݸ &y<'ƹءY1E#YxC}Շ/*Pn&оk6,-̊pr_Y/DenOj.l5Ь6)_7ߓ[Z8L`.cz+Fl2KCħNTڎ? + aR0G Yc07QfZ㝳m'FIpAJ~[gj./C<`Upl 1ۈɢ>.֪AgXQDXT9) ,A)pIEf1%+E=>xi֓I9F|P,HhaH^_|AKID,o4'VSAK .'pq6ɣpLS2 l27}~`eSV_pmHU.3 Iu*AWc-"r^ƥ+mBpW3O&q.Y9Z> K17Ե( *(9P[j>lHު)Wa'*u<3)|>0|Z6Xc;{;u  ym\px_)I 'iSjw5(΀$њ 8ÐB@<¿Hia%-eƙƏ9u[2DS7 14ef!ZɹiX]65ۃUV[˕am5[7 K7;SDllvihwBJ _FY]ۗEW<=VmP +q&M=4ELG% 曜[rL""~6ᦤ^6G$ZC pcݔkH0'6kE8b2hz"mN0Q8?8_Y9v -tXMYe95`F5[˖]`;Y˯t@LGܦ*gg#~:GqYKgRFfi%xF:ǒ?JY='KHiwTZk|f)ב (b6v$hpm dcs%4)ɽ]j=saC +6MRE7K9_) wn.J3'BNjcI% W$`T(Ue=M13/j^3@yAW6_I版/34;3Q>M8Q sg2CSK9&,ke?`dbaB6>K1ٿ h4Z|oa|)P5*{ C޸O\ףH +Ret6p {A* +\k~&\Jcf\)<02% -^@{(WnOm="),Spcny<袍Yg R%hhb[D4Ֆ%CĈ/\;x[>TRT`02ӂ8 *MW:y]i!:OsĭH](_EK{sWXb;>f=0Y?X$] rġ=N.SOs}FjUe:lX=?zwpװ:*PKyu, + !Ӹ +a-I2/pVҌLNLTlKLTNaVd:ΠoN5 [ma.Ze,y3V0w+'Ј6a6Ęc֤sdfD$d-tBf+"K &ƴA7?]8ŮR<.ڸ'+.47yNh7@W?T>գE򇩄~b~0WwcL(_#oh&meQhђhgX7q8t&^d+"Bz +)pٵ;X(ǟCK5p̻k&wY䓝G{ ͙O  n8!??~r L~֏5Ht B#xcLxR2pN+'ss|7"/pТGa6**6xP=2c*i@K#DF$s={#nܣV[brځxy\h\TG{đqrK9vIM ^I9} c"t\s^O҅pp +5v\>BriJma:7+ӆ+jڱȇn!i!yT$*\* +*TYb~;C]FFP瑧%׶b *Σ2cJb|\WRZx?$' +~ɏŵO;tބ#NA4l@?-(jϽV7rQΕ);m0`vfA@NV=u`O]b@yr!>$}%g j$׎RT +, "kS w. s3PGVH+alQ"h鴿{(l|>tn뒛+<`GaJp%h4fFAy7 E{5G qD4Ew+,g,$EUCQZ@i`~,I=AV_Qnex@2 h>CH mU5Px3\phteD@c;j\l5 Bܢ"zƠki%NgF8g[4( BWݴǻ QI臂;#?qh͇`)ϴV. DEm$"~8op!&2;L5 @}ZɅhә`8ra,]ڼS-@%QOC;?<(d< FE4u\cCؒcȚt͋;KaC*g`L?ZS-rbǶ: !}^ܝDkh3;zXX?yN ʳ@[xNܐCB{1_E~mirCelAnyzڂY01SSPBmO:s,=6f-=n(9PΛ+~֋COo-"a?U7ڡnf2|/NcП>u>*J.Ğ@}'G?wꥰ uL$ݜQ)qNw:> [ygǁLOv/xY#@5}ϑt({5HER8JY`+8^JZqr,vPB͍ôt3Em&Ewo`3yw +VTְR]ۘ" ~{xv2gWZs<Cw ^7Uנ#W (2[›ܛBM)KM:'0ס:w+DI\){h$jɜ>@Z"}_.nu".ga={UMKl^+J*̢1%ՠ28ygtuW$l@]a;uxZtۃR`Kڗ:;3dքwyGB_Z7>c8TL~DlfSH VV?v,)sC/'8!P`M _N[kOS\q븂y}RylLX*hu6"=^_>iM:nCBoi>L- ++aԪn>1*z.8VL6@8EQaT ku]oU)ڞ!qkF!__,uN&$B>!+>:v،) ce[L+_9Fƹ OxQv + )Uo^H\H"@S\3Lvĕ2ιR@Te>/8_-aJ uj I?P`${ B{)8_ۇ:L,@rvc09Ooe2HR@]ҹa}S]iWt +\ ovfcRk +8kô2k  ԍ`؍;deBS-VK3' g7Tj*$gbv>̮T:w-6/cI5$IfNGEf/ gK)'C;OL݊fUWx}2M7[BSBKfy{m]cТqfM +*gN+.U_vf)t́wb@w3LbLhxq|9;g3EL>{5յA=*^Q{F|Q{2RdGۭJ$4lhOBfGSυnms!(1UT2~ +endstream +endobj +313 0 obj +<< +/R7 305 0 R +>> +endobj +314 0 obj +<< +/R137 315 0 R +>> +endobj +315 0 obj +<< +/BaseFont /UVHPUS+Georgia +/ToUnicode 316 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 317 0 R ] +/Subtype /Type0 +>> +endobj +316 0 obj +<< +/Filter /FlateDecode +/Length 648 +>> +stream +SaX,ˡ"VXlȜNPWaAl>%!eߘXm4 +΁x<2/T-x&/⧲hI P㧖+M-ivɃۛ&9jTm 3r)#=qF0fE$K6ByU p^id6{O F}';CH̄GtQ -P%+jG"$$;Ej(0gW2v4[ӬӰs{0į͙J@D23csX"CM.&tqe Ɨ_f%"; H :yQ=BHv˧4=^e+J^/64& +鴒p3EM!2FykFth{0[mvS藺kqyhzRC}C$ ZV=3zJANۘhBl0c53+b B8B +endstream +endobj +317 0 obj +<< +/BaseFont /UVHPUS+Georgia +/FontDescriptor 318 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 643 +/W [ 4 [ 331 ] 7 [ 610 817 710 ] 11 [ 375 375 472 643 270 374 270 469 614 430 559 552 565 528 566 502 596 566 313 313 643 643 ] 34 [ 479 929 671 654 642 749 653 599 725 815 390 518 694 604 927 767 744 610 744 702 561 619 756 667 976 ] 60 [ 615 602 ] 68 [ 504 560 454 574 483 325 509 582 293 292 536 286 881 591 539 571 560 410 432 345 575 497 737 505 492 444 ] 135 [ 393 ] 139 [ 942 ] 171 [ 807 ] 178 [ 857 410 410 227 227 ] 366 [ 539 ] ] +/CIDSystemInfo 321 0 R +/Subtype /CIDFontType2 +>> +endobj +318 0 obj +<< +/Type /FontDescriptor +/FontName /UVHPUS+Georgia +/FontBBox [ -490 -303 1796 1074 ] +/Flags 65568 +/Ascent 1074 +/CapHeight 1074 +/Descent -303 +/ItalicAngle 0 +/StemV 269 +/CIDSet 319 0 R +/FontFile2 320 0 R +>> +endobj +319 0 obj +<< +/Filter /FlateDecode +/Length 36 +>> +stream +Y#R{af ]`Lsy"5 +endstream +endobj +320 0 obj +<< +/Filter /FlateDecode +/Length 23277 +>> +stream +6\UK )3 !EA&фms:0azq' 8]RW)> +A@'" #m<[l[Ӷr?R V˱'#ӹF(r5/kc> +GhZEM*f*f⫗"j{xAT8u&垼ʷnal]O'#Z Ξt6ydf@ q`U0U!F`5 £&߈h.F Iobٚ*zS؇D +Ie a[ lyu ١q݃q"ǚM%MHÉv|E[[ +%}MAQl?Eۜs!+ "Ev|"a0j0OpARrERB.pȨԧ#\-ggwڰ3Ih 4ˊR "*R@zAz7-gm:T?~-dv`Va1ʻSy.J4,6;sD/(MU覮`.&rG_喁M:,Ƨ:< (bZW\:팄vqJfJs. €܄acK׈s7b| ūҁ述K[8]R>M +ZO[שA+9`7ǝ888|CLv c?P\~ 6&,P6O 6;f_?]/|PO༄ŕN+}1gvia`'Va`'gQ%`Y^q6[#jUiVC Kʠ='yFJwvJ4Br}42u='Xz'ǵRy6fzZD50-ZQY -},KZ6q/ѳE5p0;;7֋/Ș10jQ$]"870!'jXVN8[ +ry_OIVz"SgPr(^#*j`4'fY{ֱsLNI /jfY-"I,aOq#䠶ÊQ$]woUHP_o ǫeX#1dʔWB  +pBʘ5R|!]5w'ū[7t[+$۱CZGUh +֣٘`4&uH:;g/2+𽟤Dx8M;&xt!1Rp'8;%_@$tt+w 19.PאҌ +XuD oo6 QO#P{1ri =9@WMـc\r\?5\JM"8d-' Q/zۤe(!-Nv@jli:S*+e^_2Ngh){m>Z&`.O ws;CEv'&!DeyxA5ѝ SxDiD|tl݇%~SsM<5ҽ&=4s&!QaR_]r47Sq#(ޚ.HxK2gHP:+rDY}MMAid+bcn du%؋LvXq-M:Ҥ "$t.g*~)YsNΪx=w#%-&$~ ,.pLJ?)6e(~|H08s˗I|b\/Ԕ>ޢC|uBЮށ bSl?d1g9Ks7Go܁H.t0ڥa6SjY,|IGje`J*Hu2S],DV8:T3H 2ah7;H)WS",T +>OSQN?-*Y*g<:kv2.blYs +cnȦ'_!)"Gqɉ.,Wv};b Og1+bMu>偝3bJWNNh]kfLN ^%h?0|8YV&RH"!݄WMHZD>UĴڞ{Ь&u9{(J`Bx,<Q/x/i3;f3K\Y 7+zQ_ aaƼFUH:U` א%;y +U2qη"2JC+P֤.^QåtYӘ $,j d>\WU6)W:qm50&;=74HackKQՃO>L6 Ck#}xgk-#ovq{9JG^3D]$CUͽ.H(qہyE-jqJYI鑣YEZL}3dQkn ~S+WOgX$ aªOC;Żv>p ˋ㤅H'VB[p_>6?ȔVc +\tBp&.ʂq +k+LNzg 4 Ay Qi^Y5Pq8zGGp+K|Z*ZWoA:Qku΁: Ȧ+a]37\cwhٶoXSMےXO& I=5lekFّ0 &)ĈC:v>>+|shucCJaI \Zs/4X\m YL?m6Xf*, C +!iDa9ЁZ8eibP &ҏ=@ذ|bPҍ yҴƖuIVJ [i;^2=?rh*b)m5CDOB~?6HV1rրJ$AR/uT_o_Vz&{ޝ[\%cF ~>gbZ +&URI!R1׆9 Ӻ:=V.ߍ;8pwYtJ'.otn):$cEpdBLwt_WխpB%8@FV|h_sb޴uV+xw'| ΢%Z, SsoNi ia\E 'WQ6M*Ϥ3l>}{dfW _01bOz%{UByX4!@8GFG"ɅuJ e@.b`%~6g ºgvT"6RH(فo}"x%tB>\JuL;LBI#HfYI 0|TTھrzLʉ-);+xuرc)]>M~.͉TDWCV0]EoPoTt 윺\$U!5"@d +fshƺ0!Ȉ3#p^nyUZ{ᑺ 6ȍR8dosj/$(5ϡH gU=ͣb*QۧZuIh6/[g 8[z#L؎H0tQ#z/#ՌP;^|Iz;]#N%3A`!L@)*IZB휍x(Q}< >}d5y_P_>ŌWnpA­!I"f$x /ւ7h+>o"9/_ Kuq-2n l.$"[yl8 M•!"LU&޴XF'7~fݒkLK}߄Fb}0fhK!]QP<`<%J0hVva-!N=~Fm5P)˺|+i+L~foՠfIDb[5[GK/;_ ^ͥ/9SPsoJi}ek uuIxhj +e`t8JN+FHUMg <'Vg1vk7:R$^}Īy gzY14t2 63mLڰdͮTǽMƴZm I#'oŏGT|9N] +if8Mu@9) mn!X> IBӓf3] *btc D0~1zy{C.x^*0)K=np !2KA|H툂VyRˆks]c% +nC3 ԙ֋|bD0=^OLK#;_N`AÂoaP:QZZd$u!T[[:k#,E 8̱3ގf>JW)5bK2Q96mA]1CWJr7D7#,kvgA43k/>fk̓{fhs`VZoaut;2fvO7I.ҥڻhOÈb,&}r刄j lľq䐰Ξĥ=y{8=Q(M].@M(#-mRXtzL^4S fۿ>9Vj.eŇ<#牟׷d~7e\̌' z EVZB0/{mǏ`wDB8-^&teqmLLk6OϧT 9:D1FTf7[]43R2i<~[yl ~mBK[I!Oene3G]?EAF V=~DYy8Uړ)3Tk:l;34O ;lbatZVҵRS" LrV%2iY_z+HbmyWII%VѬlDZP,,cX hH6~]PDaxiWg&p{)zhs@pr꠱g6#\yJaav/bK|jHC!BaՐ4גJX9fEVSܦ]V̲0B>R.HyYUS!GrQfs@ 3*BJϪѯnEy +5rZ=( n#Hn :x« MK А_'kɤUl,k q*[׍U2xkov<|.oobmĉ5ѶH|{;M9*"D#IOe֍(W#M9);.C4np*)4m4(a=J*Q(7 yNg8+qġ@˺KSݞ +Եtwoi+#!KP1 + &JhOƟ&$xE>gf[>ib&'tj<2c2|qTiHw&*&ڻjBR>V^3E1I ثJ\{ kV?w=e\L +B/j~rh)tIO}9 H=Vڏ̳&0,7Ton{lB:+ 5ZXo~:ҫ8X"ԁDKj'|qWIWj+w0D: N>ޜwd㿒CHHzR# t.Z.'oN +4I\c`Đ?Xk!iv,95`Ьr<MƋA4Oݓ\[U =͙r$!Cw6Ej#Tj2ve}{4.mK#ˢ_4+)xz';sYpkq*m_Nw C [ 0; * f /l,f;@gs2ȕ/Єz#d?QBu,?\f#B F 〮TXŗH!z>XoM!GMrͲgP`⯼%i1%q穉 &1J^ȚM\g*Hm-㥌H^%7 %I7̖IoV.,vqpJ2 Q[]Jr,m+ʴ__(0J (7*tE'zE~@E~>D۸kG$ߩ$7,FM9( ;( EGRCSɋ\h+[5lIb]g^0U1JTLኡIqzBBH* WN803! `>rnsXS-a81k,E4䴳瞥C`u9}( U17BeA$|Be5.@IW=j7֍0c +bdJTarӋ5v.Z93j#eEK4Zw6Y[5o^?v siZr@"Y3 +%-5u_,jCm)O5MuZ<I,;~vMj v c|\(׍U+B!lq-З?s4mmH;)AdKD L^Tna198I@od댓xsn=\&ކN:fJAHW<"a#ձ!ĝg Gfkq?BO3wT=X+ϟ7F>s\[ky- &r%\!^ sG ׿@yטpZ^gJ&:ꞝ:Us ۻF. +=#L=PL + W@БX70tS`qp _<~͆N> j +6 g1s֢azl4.yv{}{|<5Gq!B(JB'*{#Abk U!8^)=/´_8>9|y!VįB`tdlBz+?1.JC4|Pnefػ\+GK>;,!c,3yO~Y]-S Z"4,OҚbb_+=E+Ɛ_ruFTk y RT,pN}rYML݇ڗpkz}CAIlx~]|x8! V=$7ӜpI&-2ɛ2靦oBnj]f `1'尀^@E[LE8wd'/0#cGVc\L^R1voUM)lvfYW1aBR;jWPQL'J\ƷpK(7Gƚ|1XF#lZf͋ +MTs>d8ڦX=A=쇝z&2krBo1W%+%Ȋfe^rkЙ-1}IBɊxkeVQQ,ۣlnf1kzmLڞ?U åfڹ~z"`5tcjVJ̟4*>ڣ2TCA;K:"5e EHEjY o~tnf&63M\7 \3--h2J%G.5YyT!FvPD]rQAͱOJ'M߆jO߶>Qq[I3bR |&RjLY.@ƿP^!2%$}TR=5\k<+!  iT/[sD}s3=Ia#X}X|>%d}# !͒:5>))4IsQ׺6HGſ{$%O1M@ڥH&^(mq8͚pB412" Dzχ>x8rli^$bQVyG$!;ur&UD 5uܼE-M:+VqA\ilxE`eY,Mq1״.v0jaip7/Zs 2)cqgKTà x|ײ**;ߡ<(Es8SW j|*@6p#W_kSn- F8-)vt85έn-C?6zkŮ[`4;< B#TPQGXv`|wK/o+ IGF,f\;& v݃zXC[u$H{Qt-J-u#Q"h o3oi>_k(JGQ-S*apnڧ+krsƩO:5cɀ5ޚ݃GkQt=r#z[ (=(xF( {ٴ$ℿ[}2/lx}8ϒ p!ZunjΟ 9ݳrKLvJ} +x/Qϕ^#2qO9!tJQ Ii,ܺu%6;O)bE=\ ʣ +ip, X0O59y&.3 ^n}BۘZu_.ݐR=(y/'P}쳚寸9Z0]eX@0HR_+^}ïP\:"2{TJC"7*ΧDn>0y~"Q!RACU +a75q,%>?ڽr;M~n 8} \N[=J܊йGR'j,Kp_lBjQZG+=N֡/_8pL5 J|TOLTaCdD-4Ο5?lZ +ۑ>[ʊJPR#kZЊ+ރ d e"5Ze(Ohk6PTk 6BIoB@g]}IyaaD] o"w`Ֆ%dBcѩR"# 쨃 =m]/&b%U5HN}uNi>V{Nac.L34s`o\!W-m:6#E3,!kJkG +ufə$X} p o-0t(n&TF\T2ˋ46` 3rXpQb>u%4*4@@SWPoϾ%Ck*RQISrN<\ 3@DT;e~wqU͌,GbY_D7d(UgIQZd 4|8hdBIB/*@!Q&/.f8e˭јg[uռ +\&1{XȨuT} Zmw.XZ7 ?[}Lye H#p52͇qZu=c؜R(ja]%l•8ܶx`vEϚ)3BJXCڳ5;{ꟕ @3nt-&}8IS{*:w>')ɝ_.[{5f!.؎;۵*v!&)rA rݭ V_@G] t)Bo}؝DFh/5GZ ݬtғ7fH)bv:ruLP~S؍QD$9Dڰx$Of ~/> U=}AbieFͰ61 Q#Mz$Z8&+KuxY+jݣ"d u8"d;"k9BytE +x ~ +':fhˆLs}pw@oՉI|gZw絇'?AGUVKaiN]i#"=]> |(o9y~"zU%tF[e,Ū7eQNCk8ю?Իz6?̐*$%Oh|iMRd43dG\C?"J'%<BTyU]4v'(N䛩ӥw ؤ,M0Cmź[G P]2|W6Ky@XPk mT|Yzy{w-{yr .,K}HX0Fӹ!X}GLZHZkdHɕӑ=lå>AERV2P2ih)^3VX$V|+LYuLH[ Ag\kr;Nܿ˿s.ܓu G3ꗄ(Y UPt(l , +YM8PC 5E҈=w<Np7wKwU( g yp_J/̔6d'2hs`CfR-벉 M<σ=ujAgII!’q'6>7e4-JC^7cHbGI uqz!YR6Sk`ma¨G6{U )! :b4-oao=Rk+[>X)4BԴh!,$롋4pfAQ*-1;#cB.]>hmʫ=U>YMt-M5|0@%E?!TdU(4k;m`[1)l EKeA)=_>9 )GݻT!Ov\ޤoK%Pج]~ju.4.L\lӤ{u+Пs'e„QسT,nr,žl.,&OQ#!J %.2@chh_7y%7_@ᘎauT 6Q%950; WqWb{DYAlm0c:{8oSa@5),=$xn*nnoϺH2~o@@uZ [~[ݭ-x.SD> NֶtE)|@N?a^Z~cDsgt;@[I^n}F͢c[G2,9'ժ4AKA IDDprBWzqE]]~$aA\;ҳznPsa`XMy c\=ʈ?p%74H㡳 [9(V5kk~+"bVe3lb׽Cv!M p =EݓiR_ dtvsH= K(fW̴j[pY"dqFX!JĻ {!'A& nѐ4U6BNE-C%/X(.˺9 a +#%\[]H5Jz9S3&N ۲Z@DFDPR26"7As:hiB\ٞ0?wQWT3(KÔ%<}฿mxŃؙ-&َ[H4,=Ho<8!2nt]%LpK8j~\:Q%6T" +zޢsBKhS+y ހFh +ύ3:/ʉ&cKkCv:q577p^{$FP^GQ,VX`"%9\5R86%-v~/ b32JɱOy.%N9UNֵټh|ɹd)Ƒ{)hBgRÁsh 2gڿDo26ka kzͽ8{`;tnXXgE@0kNp"×zvX7T +.ePa>{шLbۖeT{m6ϐEz~KSs!&:W@%/9EX=dnXGUYxmZXg=-.R8^M>E!߱4 ^sl{wz$lIcÀf|f/BPAYL4X!xp-_G P[%[_G2 +FXPR# +shzFf0ptJޢ?bTjx1!%|ޠG=.9>(!S&>E!XV.Ě' t$.eAͿBA!\O[E=kwY& 3i/T&~8}Uw/۲GI~!U\"P@ͥv)Z^E ?N]rByPM HnWX4Xt5sAw-r ?iB':>`Ѕ=\-٣Vjh=s8>j'pGi7g?Y?h̵d[V`~ d~166+߃k6k gOz˼&dP!`ʓJmG1W@#GGtfkud\˻(@]J>dtXk*H7: d\" b;9}S.3@Q]RSjPSg%EG&Զ+ru.QXk 0:j5 \<7@!A +o y +[WY8G੢Ƴ»ho?/wY_kNe5_6v3dUSSqc)-\$,%VLN9%0}-ͤS&ҟVb> +(.K)BsFj':=cUZ_dw%|1GZNgtsIUw43FAI>JNM>ź"ޠ;@VY +qD/}6q +?, كnb^":_~|{OW}~+TȘ֦LZ覵Ѧt]MH8UQ,.6 1bJ7h ?)]|\ +ӌpZYC>xCg $oK$?3[>|dO)aO}albAաSv9p%F3.#̧m X\h[ nQ-Mb6ntkiG%ANy%\2 3ṉ{Y|jJP2_l_tg%0bu!:ɟZICOM4Љv0jD&5N lP-3~yn/*QvW%zuk 1x+ق\Q̧Z2a}g Ĭ ~Z'1yŋˀok9Zrʘ~'\6wQ!Q l;BO>s- f<-޺/V(0#(6I +(r+& +o[AϮS $b^$ăfɔ' B b E8wb3N66"|r,Y`>JpIb(IJ~(2YwX(KQ4:֕L`Ԗa mm#rVO|Sa՗ nר:b0?=;@c kWC>>M7%a NJl- MҌ|kѳ8 }|W5%ˎ͍kH |~&8N]np'4! *p)$@FLA[,ĻL@)Ys*fo{c1H/7Qee@nK4kpQj[mt' &qO O(p oK7J{Zl.w3&E  <ܘ͍c*r&@vT]S_ՔPpk^R6WbxyV~[ *-# uS%!Ҫo9+__f]n 0wࡖh-EpWZX.5>_jp`QR9^/^hT)I/Xa% P#Enrq9"uH +C0w*cgκ$1h0¶n+z]*{"!{v]hpXrxh(UZ%,fZP/37U1҂WY|/f +e +'Ux?>t x/!^dC5MLn0@磒g'j/6A3П9dz'7T֝hߞ=؆,FM13[t .>  szPz~GpZ* +|L}^[fr^}Tz!B9nP +8erW{a5C9nbUwuS8@fZat9Pz4IP̩6(o~rmoѯڇ@&jeb]L0'"HHd̨A~[%'+{ 2q&i($X<`yqęM8-Y]EH~J@#oTOrgrb~8֓D*6Ii51xJX+OLJQ]7hZHDx)ToWFGO Mk{e)X=U:Dx a +/Ordering <83c7dcb40f041088> +/Supplement 0 +>> +endobj +322 0 obj +<< +/Filter /FlateDecode +/Length 241 +>> +stream +|lr3O,S=h7=y碏ZV]D+LG*`B-o:\ Q9 e<aTY f:AAKw5 { j]GLE7sVl]k +y> +endobj +324 0 obj +<< +/R137 315 0 R +>> +endobj +325 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 142.874 547.253 194.599 559.413 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <65c744bf4e814d2f4290a524414341ef7ea2ba> +>> +/Subtype /Link +>> +endobj +326 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 173.164 507.658 224.89 519.819 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +327 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 232.572 432.214 310.029 444.374 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <298202367b0924e1f500fafce6b160da282a61adff17> +>> +/Subtype /Link +>> +endobj +328 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 236.18 280.796 358.004 292.957 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +329 0 obj +<< +/Filter /FlateDecode +/Length 2313 +>> +stream +s}>C+*p4b~z`D8Q_3a ׁg_:?b\1|f"% wY,k)Oo2]EeډlTE2g6"KPw1e + w䜋ݝWamaE"Q}KqVgiݠ:=b"c7zw2'x<%_m=~&s{c$֓n-ϩtkHfҧZg+/Y]:-Y9Yi{-ZlDe_}g2^o\PNLS/kx =*!6{r('MY5 !#C񯟶wΎv/dȀWNNvWZwK`$c&^¨5m}"f.Xk;MUu38,NQv08%I׳kH~jVxhRF;(|>^љ` 8#UHJWImPǝ0 KR'ydzĽξ< ގBk\ԔlԿHN37;j9c+,T\kEW Wȳ[F3-# s<Huhe̴n<ڈEP d"̛ yc)6w¼'M t* EqnP_I3խx,G|ɣc32s#IuJpPIy(^2m]^ OTe].C]UˇoW"n s6^fNM)*L)!d=**a4 hKVs5+EPpfYMcZ͉ޮ#tbT 5[fJڃK<‡ P4,FeY.f4Be2 ]YAMmk0VЮ%|TDMPbP#)[sajZTYĞ]j)7>;/#Sc15Qٶi7Qt9a*˺a-ubгkB?Uƫ@ {KC =84"S8?!rGTwu*Әe8px(G?T_`K@"h ,#%,0*E݆e1zϐE[[9?60/:ą׀g(qN4~?ã㧖4B(*+&2B}ByaA)S"”.Qy\Xt cqghzߺت?  +\(hԙ.F>Z ԟ5X36Fa%K>m}Ϥ[TSmZElUB5~u:smN/Wd|FNBW18KҦ +sv4_דpyT꧇z7ڔYaQ&.>e*I5z:_C::^ib@֠ +endstream +endobj +330 0 obj +<< +/R7 305 0 R +>> +endobj +331 0 obj +<< +/R163 332 0 R +/R159 339 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +332 0 obj +<< +/BaseFont /RNZAWF+Georgia-Italic +/ToUnicode 333 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 334 0 R ] +/Subtype /Type0 +>> +endobj +333 0 obj +<< +/Filter /FlateDecode +/Length 563 +>> +stream +sno}rJHL +HJFB'xn0*c8gDzPB%#ֻZb2-HPKc^\;wIH.Pg)TI~5 X~ +VGp 4($Q񏽏ln\0H5a5UV`Lj ,>b!f bPqdSj&mZΖ~CP$z"*wA0}vՇBfNv_a`^Oxաizz$,}EVNy}t_5NCe?M2M}v\ԍ[\Akjׯ,Nv,DIb _69ɴɜ+Wk"Øϯh^ͯdo5a"ʣx?Q6 RW0S!rQ5">EenМvJ>ybZyA I::𯜥 i2!Ukct,".u WdS? +endstream +endobj +334 0 obj +<< +/BaseFont /RNZAWF+Georgia-Italic +/FontDescriptor 335 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 195 +/W [ 4 [ 331 ] 8 [ 817 ] 11 [ 375 375 ] 14 [ 643 270 374 270 469 614 430 559 552 ] 25 [ 566 ] 29 [ 384 ] 32 [ 643 ] 34 [ 479 ] 36 [ 671 654 642 749 653 599 ] 43 [ 815 390 518 694 604 927 767 730 610 ] 53 [ 702 561 619 756 667 976 710 615 602 ] 68 [ 573 554 454 575 472 329 573 563 297 291 528 285 879 590 537 578 555 461 431 347 575 538 822 501 560 444 ] 171 [ 807 ] 178 [ 857 386 386 195 195 ] 366 [ 537 ] ] +/CIDSystemInfo 338 0 R +/Subtype /CIDFontType2 +>> +endobj +335 0 obj +<< +/Type /FontDescriptor +/FontName /RNZAWF+Georgia-Italic +/FontBBox [ -514 -303 1895 1074 ] +/Flags 65568 +/Ascent 1074 +/CapHeight 1074 +/Descent -303 +/ItalicAngle 0 +/StemV 284 +/CIDSet 336 0 R +/FontFile2 337 0 R +>> +endobj +336 0 obj +<< +/Filter /FlateDecode +/Length 29 +>> +stream +iܬBf8+ y<~Dd +endstream +endobj +337 0 obj +<< +/Filter /FlateDecode +/Length 18136 +>> +stream + _0{ Qa ]2ݣ"+snԷa˼u`?S*w^Jd7jLvƦY+M+$G Xw36\B[hx%O7{SbB] + aa_,iĎʁ@B`|F %lx>F:Y [ +u9 lж\zd&nuvAS"(s:J/vYK/Nrq!ѝO.s'Ssmq&:}<~>]Z*SIFAB+LjC Ƹ>njc~[&}t!R[jE0U1NӋ' 'Z7R,VRjΣ#"i^kި>~If!X.<;VG N"(T4 +>z.})b台m=Mh3ɬ<.D{IIK'z}̓dE(?\;fZDkJDU)sVn,HN 1BP$#3ϬKz;{ْ#lkUκJd;9Y M]p4V5S7.+pǾB*ɓUj?L}P3 ' Tu%בg tNלm]q|~17_Ug癖G\+hqdXQԡ#V]n3Zj֗>d 9"9[AO!SeWϽNڑN#!qE=_O@_QlzxMfq\ g_([_SVbZiq:pcO/X56=}y>tN.L?5{\NPID|.iZߏ+g[R3y8"g+ 5P.y(ӿ8p~H }%'Cy̒-I3.-x +77*bP?T_1dauF2c,Y"}Gɾ)._Ӵ_)f+Y[,id` )0ZCqI$"VqB<afҠ(㮵IΙ$CQB8أd[uĩ1TpWCF~[]K =2oj;mҗt v :@MF3;,6y)Ym? !3`ݯKa7_. ☩뭗_k?y'Jb\(!OG蟱 %ZkuK UBo⛊Tﴄe8+ʢ}[JG#2%A[88Irh*#bfwx)O.+ (e +3C}3OuU7ƠF_)³&czd(U`<{S!1&&7:0> +"A$!D&["Is%Sk{L_`vv3@9evRJ7M} =Ld~_h"ǛÓ ^O|RӒ +9(-|Kd\-FF 8·a}4~+ژOP0{:hz$xV(Rn^¾=C^w|94+Y YqX,{qx_66K5d֪$WLW1*V$0θi6Ib2,7QhA`xXe3+I*/h;*w!Xg8?reJƍ{k\(Еd +%]%b+X6&Y-* i8dG: 's3hqb(Yz%\jSU6rg9X%koQGێ&fOV[ת<I B3IkHu&ͱ+DܧK%i-d0́}Psɏ藥75$ +ЗB@.)|AEŠxw3rM. $eE g|.`/}5z%'j93HNV M W-b('VmY,T98-0ʊ[B(4)K>xCr?D$CʪE@$ȈG(_0&torB0B|d Dͩ[H$l|^o<+g΢-ѱ{vⓡR6+5kXwY.x4+[s#gY!<&MdLGƁ l]#Wy@AX|@tqo^TfWd W_5ْNN Ykޅh#<xdXd /HӂHA@浒Uڿ(/jF<S4uyYU !j/_Nk,!5*\ n;ZDۻ]oHYj%| ƽT\et4u≫D0+g(\D3-Zdq6%W#͊$#nD~ˤ 7xJ!)6Ft>᠀:-C +u P+Q* '>M^ 7@#r]V'E*dLyYvo'b﷉?ך|ϋDNk K{?DE$UꚾB-@kٻ>L2L.djD)$B02>ë_'Sikf$Ex)_fy2(L1ak՘c8Puٺ 8>x +phdZ]Xɹ{[tm_*8A/,UDrimfmZ?g VcrC9B+H( D+P6-o!VvD4ŭf WR N_͞Ív;˙RzE8ףֹQufXg8[/ 0 +!b.q)ɼĉLaO^hȶ-O77fNLOn%X!GB%̢}ȮJ]0xV_ ]0-=>OCأ4H)?gLnÝYZc<6GdFt>{M,Xů4}^=LU(ԒȝGƈ}qe,;?Q s*5-))Ϊ21`4`7C٤,}\?JNDB_0y1pM;:%$"TY;INyb+^߉YT?Ɇ B>7>g<(3A.%"Ѣ'/->/s-~!kea)Q Z|$L DO|3w1yy^sN5:QH΀ZvFs~.%4t@쁲v:1OPCkGf^6"RڠOp@be5h/܀qCZH7]|Y'=x Y}Z;/ H'(1G!ٗ| +%p,D:a>a]."7:::e/<%XVK LZ&DshV[kN!(/!%4dN+C&;¼fH`?~He- 3;՟Yjc`9[ςݵ%~C .R#> k`Ǚ`XhLTlX-44.KqhG g7r +=V0WϘ* (h jkVm5AD(/eV?93 + (> .!e,:\|M$)l|Nsi{Wj`VLm y (mTϹ{hLYyp8.A Sdٍs)_m6|8 2+^2uۓ|ޕ9҃K)zM(X2fbpNS͑I踅[ԑt*G,*)<XT!JGF}n%'ջlI 5Ls*uxsoizpKwIEm +˗ mSkMO"E_E%3Ƣ`,) +I?&6Yͤ$_(;rp~خ R#Eqd` +XhOZ ^? Z,?B"FsЦï m- _t@Mr1hkNϔk^E}_`QWX*7o|Vu}CE*޽6? X*!LPsk4t`p )C̷8;X?zOydoQrj"􍈍"|7"A^ ؽfTJ*)Tł/:"IK^刮Պ'6Gҏ[$KxVh 56o͡T=avK3B5]wuᣣO>Ákk$M@u5`x<etŶx^yvP+^QKϯȷvFJ:|b 8UV-t/  62SA7  +I74`!J刁GEs"gDnύ04 =΢DUSJMP/WM q(Lۓ\ńh1!9b8fxn#uw-qg90~bmď#GB^ͅH| pgzmm_w‚AOL߮~ .n:5[/3?#z.[<^Y\X=X 塜 '$KN\ȄD +Cc{t-378b;Ϙ<#~TBRՄ9f '.Mrv@=ZGUJruܷ +Ҡ=hϝg;$2@Y|vp-}z؅3,h8}93kLdr<-4^7 r +mQd \Z1/M]0MdhEݍoGhGB chv[p'@'UeHpRL3!bYz:y;Yq 4 *wHT>r0Z bu5W7r 0 XW(t;M58TjoDvI.힦O[[p\G`ujWz9dC#n(zmK +~+9춮n뭗d`pvMBNh\Y!y^yҐpJ+?^As,JV 6.v||}$Ҫ-ryG"]j!.PL8&[h*@9aӐXC/D~A~zf =#Ha)%9o{8ҞǭD@G0sZ-S".7H; 2_ڶj'C!8LskF\(y!#Z>iˡAMWqug([h'<h1e@"+N1~ ,hPEYoAXP >!sw(ܕ!ysDdƟ*'CN@Tjl`hz?3j+f/MW{BcpΫw0#tKQYq垃Hɔ +LYI~*sl*Dz"eM|\s 8sK<ֆN.S\ $PKFihsS3Ag-mD]\B!xVlodľIi:<ٟ٤ GQr-FHRP=Q_IEY $XQ cL%v` j/ nP U,_cŝŵM~sTRڝVg 0;Msq@X,FPX6Jv|] vQ@L(&sU}+T c\l["!7Q5ݙ& zBl:4ַqs03& +Qa᤼6_1݋"MZ[r<@ 04ˋ]߮vOt7+^;PЧ^h +vʛo)}T$`#I83liӼS"Kh,JmkQ=FUl!ɷxfieKhU5!ckޫ̜{ o^ ꯐ|o#H7ig<쨂 />S4CJ抵/~r0F A#-c>(#yKz0\^ڎvQ[NsHQ=YYA6S0!u T,]FrLH& +K pI mqrXVӤgBkս:zx2$*8;W?( mz%{tߗ"H57lˈ8` +ah ,e}Ha",e xUm狾9EיQ Icч<&|z {v:D ޾ms,yȚ=YLjw/ijO1ǻA+꟨h<ȵ@hⓚ^p۩miB|v##:9ʅꇗEْRGP+{uw2Lhhx0^0B ]"tMS ,08@Vݙ;wV'ht&CȰ-A>/g ˳͠dAm`S1ՁdAALV;x~o󣼼ū#PK0 p{£B;"ޘjxG`wf|ȋ]1^e@{Y,Q}XyE42q6CVȤ/hFޫ V.)b>7O}߆eqn2g1Y5^0!٣;Ӄ\#~o^<@&C3:} p¢HD4wr^Mu?N5W +g ) +:זȐW]M|'0 OЋ\T6Uڗ';p +֞A*ne噌$RQڻmmg zfS:֒:cY^z5qۊ9=8L%(eWـP"po4p 3ŗxN5fo>VR#{^= ,Vurhl#Kn<%:Mr0~:K-VgvңYjG9m)@>}^U\5){j{{E;j!d$Q%)O椔\ldޡݍ\hq!d׵mP nifw'iaVaIO]2 1[Z |oh<{{dΘ9rZ滲:~@XRP}1|4.k;p`)ϾEL)̑ZDkq3.!Y]ņf0>DU;{Kp4i!,r;b AOʎ m|Q.Qj8 +Y>#eRiuGҦ,kSAE FeSXd-2M}>ufZw%׭%V#6ͫ⠛r: +P )Ȟy,?K"]N5lr|&EJ7};?m/Pņ3^~N9>$?[*4G^h{~7K'n[{"~ aZE))$F%*'b#d*Q'"{tո_ȊGi=^X9,x&Jې]dY[}L#kIY}wÞAVn2bY ˅:-ȵ] BR+f4ZQ' z]]F{KLJh։~@mz٣4}?*C~(oRĿXBSu>4ZZǩsM +FeoG=q#q ۏVj|Vx! `/Ju*Yq`Je AcaM ר/tji8!yB?S}j7گZ49rbHX#ef$$BIVb~]+k>mߜ%'۠T=ut:{>L\{[{hpwy˱Eç4ܔ6w gTu3bнFV}8K&#6Q ^k`ɀ&J7#f*%fխ sP?̣,mytKtQˉa5x?[ݸ=nLf^G5z\x1.I{`T (E$TIb\|P]"VM}# {i|gx4socx:<5@ +&6d| MCaxPw%7R"R:nziߑ#tw'w5cH0;.X=U@m! 3E" JOp>j.VE2hHpqϿ,םdwyvf=Gm~)Ђp5oKRȥ e/(57`s{a_JYTJ +l߫+1y+ؽX +Y0tQ#Br~y^w _57y%FJSSZ͗?ЅpJ-{Ti@klɻ]?IPPB=!6|w760lj9IX֯}k{;GO"A4coV`-9%,g +U_q\鑹`kJ0-ô2(PUQ HN7H؀NN@i/+XUHo,:bU’ؗ'i\MyNrSsL ϴr٘m/Y';UVA ]ϛg|j>m=s"Jh/#s\)n:3AfcH(Q/`kPD2Cp}POZK<'7I+!&Yhw0XFR x_?qŽXy\&-]3]mڸ̢}CAA6.1Ot XI* +[4~k:7"(@ֶD7^R"KP(l)TF@ p薬dJZ=XQ_\&df \V#ms0Y9K!}M]r>5rE9=dK-X #joWF[8|ɫ՗ɘja_ +VD'ѩ.#z%<@)=,X@ -ߜThF-LBQ p7{=wk*poa^n; 0h$;65ϡF((DS&™G4 7lL9zfw:4!nSKo,R ڮm/nSKR+m3Sܔ}Ӯm)5?Qy% + ԡ,(暝J Ҥi[z"N\\i\D){&kzbK{1J$Ô:wL,%1Չ5iGPSh;ơ|ccFh d[-övo70 +hVۓ_phyF,\ؙ%&FrA7/oqlϘ<91oּzy1upI۹+{m38^x]Arn<{@ fiuRM\i 8*lJů2odnC{xغGT Њ /F +=e9hש [_~.ȟOg| + " +FTi-w(0X vg\v~[YNސߡ*6_c`O+T eTcևŜWKq&ZjPUscր!XcYMaQnɡM9i~[.D]|=t u簵q[?*8VǾYMޭI~L@<뾧a|f;Ɵ҂i;ˀLxbVD/DHpf<4OiED4d3<([Rj{-B"g0)>ɴb+?95RM-ܞ5#l.Qg+X0MI +wꃚT-C16Z4,$^g^p\E3A?C12 4 )EdYAمڔUZ ȦEEc?qw1lK_bOk'E~{|Evl H`HWhT׉byj >h> +X͊8J=,To -n8(uh6{zՠa}R>5;A[ +歔/-ԋW(<#RKnO_/APwz_z;u:Z4R0*o#*{71Ͳʼq+2Nb,0]z +Hk¶7 ۠ {=#E&RhbY?{~LiGKJV.j_S%RPb^*e#cs3?{sfDM}  8+Y|"&3x;915]\xs`mVuIez%o k+XĐXVi2c)fWB_Zl* Ыϙ|5ċ,]lؤ',aiv$l\O1Q) ۮlAx&U Z[*D_Qna9aǣ㇨,~ ,cw+RtP_ RH/TvԆH9n(P/>_ +s TLס/8kJϖx3+" nr#?h_GFȊ1oq/ o/"dCqw'VOa:_w"0xy )Z>\&Gqw+,bH,[$EIXͳ>ϮfyR2c'UՔQAOfu7ɣwU\ou_VZJxD%*&Y\$;&FdvC>6)f>+4Z#tVXl7f',t-᷋wL]@0;XyiXDžBWA6e#,헗,ۆ/B.xuW +"c3ȯ6GuPFDlݥqZŕ}}-SRPѳfxP + + ޡ,l S 3bxO owk43h*\%>,c%3/Mu!jcfUbOLw3`m߹6:cf;CN3  8DRI&T:+?Bh!?a#Qgu0w~>(B!kp/oV\hЮU ևi0t'oS< Wj|3k9,FS/9(mx&g q8wfsG} ;rq}V'­V{E ʕGϙ ~G+NK?NM9>k@>Em>f,u 0*cbr> ~脒s0\mH= DG ɅRK~*6CqG^2.wiuKX.NipQdVoͮ]ÆzӖ1%qG;PR.2o"Я^3 %",x؜Vd^ zu.X׎TYB e_oI5{W *-6LRs:\ *Eɟ6pS17ݻ'{bʋƸG%ga{Tt&(W?cj!+2/&:Qu0U9#-W(=2eQXKeZ0:OѧͱVRERm ZFT%{v ]w2Xkk`!OUJe\S缝e+S& +(W4 Ei7h$݅k*+ ,>Bj/ =b;^ 5_s`2G^ *X4n?4!MR|&{pvVhUiH"DJ$hiK+#g72|IJP+cs۽ևg&/'HsAp1L@'BA#z.M?1sss;|ok7ѿ8ʼ^Tp"YA:Y"di'dqaiQ ,%ly +:NW(YXrSZ(/{*uf7vspybHM ."R1L3|'ZTrGάa αr՟dE)6Z. ]%B"KȾ4`Mfb5+[ +/Ordering <80a2f22949c2fa26> +/Supplement 0 +>> +endobj +339 0 obj +<< +/BaseFont /QPBFOF+Georgia-BoldItalic +/ToUnicode 340 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 341 0 R ] +/Subtype /Type0 +>> +endobj +340 0 obj +<< +/Filter /FlateDecode +/Length 270 +>> +stream +NRT"`)WDoCtˏqAT7YRU mW ų xav4`O]R}N_OU~ (Oh2Z{_̖Stp&yqƲrPE a^hH/"[q d =;F{bBA)#,T{:O}˽~LŠ Ϋ,\dq}QEw4wzy BiCf*Wq) +endstream +endobj +341 0 obj +<< +/BaseFont /QPBFOF+Georgia-BoldItalic +/FontDescriptor 342 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 366 +/W [ 16 [ 379 ] 29 [ 367 ] 37 [ 759 ] 51 [ 706 ] 55 [ 684 ] 70 [ 536 663 557 381 ] 75 [ 675 366 ] 78 [ 641 ] 81 [ 690 636 ] 85 [ 534 517 417 685 ] 92 [ 669 ] ] +/CIDSystemInfo 345 0 R +/Subtype /CIDFontType2 +>> +endobj +342 0 obj +<< +/Type /FontDescriptor +/FontName /QPBFOF+Georgia-BoldItalic +/FontBBox [ -573 -303 2177 1090 ] +/Flags 65568 +/Ascent 1090 +/CapHeight 1090 +/Descent -303 +/ItalicAngle 0 +/StemV 326 +/CIDSet 343 0 R +/FontFile2 344 0 R +>> +endobj +343 0 obj +<< +/Filter /FlateDecode +/Length 20 +>> +stream +9wH^w|@װڳ +endstream +endobj +344 0 obj +<< +/Filter /FlateDecode +/Length 6822 +>> +stream +^KO$5 +^z>f3igipHs6ۊ̶6/;!{Cۚœ~ 6{1%Ⲯ'[CW@TI7 n%蛔E?"/t{>dudĹ>蠨C*U +u\Vv#@>ah%9Fx0 h-ԧCMZUlK.,_&p䘻4h= pƿi,,s阧ʒZ<"9aҘkl1?YϽm/E)2]aWز#Q_B[5w]t i +qc`hH[=7`ϫ7JZҽ>1m)ˌߪQ`X㺹|$U/- "42Rm)qEӸSL; +s|v!GGzzG)xԌ6{0 ޵ +m}=Qdj)s;CNgVL](*XR;:}jYL ƕhc6v`oexy$J+WaHX #9q$e}h& `Ьs_s +8W oP? [h2=,T)3y|4GD#Rċm"2|f=G^:?GkŀVX;'yusDO'׻)bm?V8-qG]!V]yW ar'x薶ѻ_>VQx LEa_\r?lI=wĤ1x{ +kCJ-פBToxEõXE<"}(A(光;oPKYv& k:>ԕr.m`kyzBh6)T)v=*5' @8rR8 VKZpD+"IeBk4f.b bc,'=?/E2/_7c^|<4U=gwZߟ)LW +6F&ߣyg"J1B:ԩ,vN quv~ѷ *RU]E>R,q:dA,gﯥ{ 3oq*RzxlR)?2:CjP15{QbZ/Rkp&^UCrLs)$rdRA2@NVGv; VM|O9_z}OO@4̈Ӯ4IuO 6ir㯓3ȷ-‘ۆ%#ۥJb Ry"F͍, }_a" +6_56vD\k"n!VWPe)2!P+Q!(\%Z%lHD2m Bqh㥻j#6aJqJZ*]6F2[Rߕ60ۓhbLvؼb|u亟 :Pănh&WwݹCDyLT5(^Jb7lAe? (Zя*K,>/F%cu +0Pk`* rf΍61c $&-| +;N5PSx&+`,8FLoRJ_ +mT?XEܜ${n7v#8HHҙdҼyeK8=];^w-ʨ ¼o]aTd?+u.֜G( WΆyquGP=Fx$ G gU<9ҐaKIli[",Rm٩ YT8U@?;}Bx4w60c5"xj 4g_}O}[!q`I_96a Q'#9=p^iWB%jw=MTv;/ژ}ٴN+Xgҏb+c= + MGAܕ&t$cf s !,X`_$l(u=xvD֖[-gȗ=; Cc>&lCfwhNBWp,4!KAऩҽvx(_J-(&S$D (]0 +y]پO9@Yגg 0»,MI4>!f7,矡Sb&@Η;IAgw8fjm?gEYJU6uF Z + |ᄖJ ~3=6ͣsՊ6i0w VEPqԺnQL+E7\fM]{_k?N:[gjx&[X E:W뱀Z{qjEsZ>}r4X&&Ť 0Ģ˶5ofeLJ T}6 %Y!ӆh5:t*ì)Fȥ !%,T$M~y 0X@EwSʶPڙc"Vɚv9ٯL+- ;<E|6mo9u؄ Rlka֭S6׃U>O@X10p^ `i/y%śx7@0 ^ԌHk^eiE,_ᗗGUb怈w'j4+hփY);3Bo XtӶr +q,7:u~υ[hUs )kaI~@ \h-y>Aa骇_ƐH [$;ž)Q##v9k'[ 5-E 8''+eA*׻L:jjʋ1uZ-lTc>fD_Xqcv}OȘ"K#F1[+,Y߅~Cv),&Yw40yd8'NŖy8(p!t%<͆.Q2߬Z<.TGv$czm}qsܸ6Rۿ1i@*oGc K5kAQ}yX%1#Fl@5rI"Vě縷WT1+;ho8Gi+*-kg_6 n3BAtR{H?Ts7\fЗ>/xTQjӂrT[x$*2iȨoO#wɯ0TBۅYVǜq[Q1;RO u~٪nLlq@!,)\Zvё! {(&YڇOdyF}긛[10'0|D1 +7o, @@[}fw0.|?3[\x:em\31 9Iۚ,d b)#2+/> VՎUB {p$TD'N +7TGlQx's8Imu<3"(j>nJ[0 +[[lp(Q_,Da +I=onn +{uǡ?1jZΰ_?| Kve~ } BX6 hV{%Ʈ#,mDZjޘe#VH2%C+"_Rr,yP/G>Qݘօh}5$@sS1!UGR?l5>7vXr{\3j"-CY`͂[JKVOGV}N.? =0Ct$JiBN4B3\c+锡U"iWP^2$_3N:Ͼ[ `e[mKv<-pzj͓;d_TP Im7Rj;b'#>rdCm 8.ϱWtIױ1B >]\UkO4 ? +ngOk;k4NmFVxUy[4ar50 QUOx̌ [Y(e2n("RS_j˙ &{i|J^e7 %-k8S锶ˤq&9FAU4V +iK"kBѶ.SBȞ^qW'ĩ֗Y]Z ͮ:"{n!d zH`q5A +\x@'fje?FBba_%#?m͡8zAO KTdہR!)h`X.tspݤ)@&}ǐҧ6;0guozڴ`%N:#,n!^Y"Y{0Zd)+۷!)!+)ZbEIdBQ~%Snͱ| k5\, ۣG++?eZ?,)@Idbܟn*UJhx\Zh57aOg791摾ϵ?|_pw/Ul~KM߲{ׇ9o5!.,dDߖ[ii\2(3C8Ca]>IU|)Qzԅ;A@ʜW@Vkpz9ByXp$,5NksT(dі6 Yu:wN|Xut2ei;sgOz2[SK p=R.Yf^TݎeQ=mIو6KCY>S*E"oqvhsgȋ3S i@qσ>n R"Yo 4 X VA7K-^/G^|@҈\ +{P5 +k9*-h +\i +$; ]M_0鱭 ҞZ,A\ r +iؽS0H9_gJSjU ͎hʹ *a_h/ M=WOZ7&r*n.g'vx"'HOiv~1&Яuw +endstream +endobj +345 0 obj +<< +/Registry +/Ordering +/Supplement 0 +>> +endobj +346 0 obj +<< +/BaseFont /WDNBBF+Georgia-Bold +/ToUnicode 347 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 348 0 R ] +/Subtype /Type0 +>> +endobj +347 0 obj +<< +/Filter /FlateDecode +/Length 591 +>> +stream +YW+3\4**P;^aA$]2~iOOM$8>ᄏ`ϤEVy LRJ؞60)YKu jiڡQHkaZzD Q0˗HQlLc ޷[O;41 :=9 Ph r|Dyﳸ;/Fp=R[gJG6&c4ʯפQ1P~ZwyCG{csdQ:or5r!:a$\n-V 0h=tLM2wD#C])DI*F`CNPtX5|B^W(n瓹4 ɀ71ڃH4+jKtZb/^*4񎻋MtӼUҷgwGËqYYU{p`qtX1Aw18>DSPw8- LC=Q'_,oQ7Ͼ$zYLٸ0lGL{ւ\j9\* +endstream +endobj +348 0 obj +<< +/BaseFont /WDNBBF+Georgia-Bold +/FontDescriptor 349 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 703 +/W [ 4 [ 376 ] 9 [ 799 ] 11 [ 447 447 482 703 328 379 328 472 701 490 626 625 649 599 648 554 676 648 367 ] 34 [ 548 ] 36 [ 758 757 715 834 721 671 807 913 446 595 817 686 1023 839 820 701 820 797 649 684 833 762 1126 ] 60 [ 732 689 ] 68 [ 596 646 531 663 572 393 577 680 354 346 632 344 1016 690 636 658 648 520 513 397 677 567 863 588 562 525 ] 171 [ 942 ] 178 [ 928 519 519 ] 182 [ 269 ] ] +/CIDSystemInfo 352 0 R +/Subtype /CIDFontType2 +>> +endobj +349 0 obj +<< +/Type /FontDescriptor +/FontName /WDNBBF+Georgia-Bold +/FontBBox [ -549 -303 2068 1099 ] +/Flags 65568 +/Ascent 1099 +/CapHeight 1099 +/Descent -303 +/ItalicAngle 0 +/StemV 310 +/CIDSet 350 0 R +/FontFile2 351 0 R +>> +endobj +350 0 obj +<< +/Filter /FlateDecode +/Length 25 +>> +stream +k9ZN52`!Hy)C0 +endstream +endobj +351 0 obj +<< +/Filter /FlateDecode +/Length 17787 +>> +stream + {,b ~DF$ TzJ(b78>Ij>R1Vjb1ᷗW\Y߫WFETd&;}5P-ybUq}F.M7.R 3 ßHa7tڕQFD  +"=:`Wx5Qڡ57"3{-ֲӦۿ~Ə'\_3%Zv(p +/ّp~ /J"h]O(#Ð6NI cNEoͽu"調E+@aBn*T`', NR/j_ ;Nq%u(_Zz_ +YgRsz}B`%$T-?T.*"}2\ +nD96a:\alzqC1+$rJ;cyAa;VW G\Ģ|F6r,znfii@0n]<|Y~:I!w`Gݥ?33[:U9?80ii|@nn^ERTG}'zdnXd|6+Yw[u=$ +~3\ mtKQZx/y1}IG=Tj ɠI`hKeyEޕl4S_I։6q7-a3 I-Ưgb2ԗKmtGpߒfkD+w$FN +30fhP2ؒ m)nlK(~!9 +OZy`k=DhZWUcӥ %u?:'_ Z[IwR֊/<$%1E$D.jW ߱2wQȿ֥7zX MxnB7eN>㤋ƆJ;2I$3g.ޤs +cGN%,tHϲ} Jd*MRUn?^1ĶV3S-[7ηWl4U +p;BV81o/͔GG'wNViW]g' uDzYsB]D%d(I@vBM~~ aoZ5eu;xfXBD__qx?}sVKZR^ +V#MW 4WOV])7g4 Y/w>V6!RFMaFKNqH#s_/U5|2hs.{/)K u@~-|'(y'yc˴XDo©}bI_)[wwd[ǯ$'c-/=V!2p iZTz˰ʍfq=$xK |_5>QGh'Hv ŷYN$A> $֗${Eʴw<,Э♜Nk&Q ]}rTǫ 9%bm(*}2#=f߲t`D"Ķ#9},JN{ |w>J\g2bPef]̘GX/Gd`XtO\r 3Q(_zy -@1~0IWEͬZ +"d0s:ٳF_BW8dbJ@3ZqPnXe#.[{,B'i۫(?è8y'DO6) U 64Fs9Xcj '_aC ~݁J2 +5 +x #9LBd"{!Q>+P'A 7}Ǩ[>\ ƅwai/ayWOyemM)9J&K*4~-Ep_x˄ l_A'vah>tc&o=;K{>,7~5v^`}^(ެ. 2E&!]-+*fpt@GV3S2k 6i$|"=:=N4iܯɹL0S<+ :@=s&+I֡>3y Ѿ/P7,uUIsw\B &!xͱ(%~jz>TAJGD"Q5ΡZt?oBFVm7#nyKWLjy$|7c|`ayn}s{9II[նJHSK%3phx{tfftկŊ1zJ} zQaߣ!:1m"o6}u^asn{^S +Э-2sNS ;m6'` N?+u%lI'dWv|g ]@ ZKq0 z?F 5 +qEc}7g=MoDl;˧FEu#8̹/:^2R5q ugo_s&C$*跂 24EN|c߸)gcD^cw"ŅEcb5W۴x)\=e+jc[@,DQQŸYyw&1GԸ^i݇dLT޷#p k7^q-C2Ȋ|h, LzX|b\[Yn * +K2# Zʄowdq0e9m~ng^RZCnq_ QKjh \pSaPjZ:p4ƠwT<0{,j[~s!LV[Q^jf#'Y?<]zVbϹ)[ْaGg2 ̷N**t&F`w'`z@0Ǫla*`fDg{ԂƎ${yɈи?ɐza/A ['=ң$ ]K|D-A˛t?M^zsGgHx*lņƍ/Tx]u#_=9o I7g260?y %'+蕷ln.'@x E1q0"(uG+Ω=sYYI&v&:0Dbcl15<0H2%OFm搔RuV0,:Fo 7\;1b.5)&뙍)9icB9]fnwJI2}!X>v?2$8:/MW)xX ;?gw~5% /`Nܣ_I{Q%Iiv@X9p&Sn} 5Aљ`ŀyغTYjFŬ~O2'W׸u@L7Tgڪ#k欤:h#Hs%q}gqa"7ج{ؔot`)~L)sidH}]'=]/IB9UIct])\W(O$r|`gkrAcf1?@n<kB"&FdD0mY_ͼ~Ɋ0AKL{ˀ!Bjȯ}=l4*&~*D7^/$>cNKѪ}>BI#!zXޫAohOR?oԴs;7NcM.+-/"z`]nSZSά'}>D}MlL&"i+ + }FBiR$|pk,axD[y>ʊIހW8VZL;8;}l 89?-Д]Dk#1C;d{"OXS[;鈥< Foѣ2U["~0Ԗ*G7A&Zhlm}v~bvkίrVkӔ'lX82ƒ5N@Vwn@&tf: a 6du薎5?51a!"zIAq/ b.˺#8Ǿ=tUæ(^ℵY#'IIE*S#my,68V/*z8wOfVhW & MؓqY~z$j 1&¦\x5* +Ϻ}1.#Ȁo˶\~Ux +g5(t̽88PvCphgO/`> u ߒޯ='z {~bp2b&, +4|MA3 1 &D-fh& D^F#?P:eU{8i +_€  LJW324YUѕ F`ю0P@[?&PЖx/s8.u]u9}0dV`AU&9A۵O煂pGD[,B/jDRV/M~Ob# dװ,p<@nsLָmOEFn a+"HS0ވiRWW'LWsQ@v +Q٫yZ1v)=ض]Uv'9PQ?sKy8*`ߔtV! 7Y[úةWKxj*V s(^zZVho'l?MǕqߜRoaQY5i,~4>z|Vl ɽ=' ~@~RǮP"/[ߓgG:ҪD,0Ge:EXbmf@1 7o&I5]i'i^v 9V Yrf)hi &QŸ}Cͮ栤E٠.] <1c$]Ā?}z@v]g*}iIJ3oG*+bË( R҃@Q: aGP|+h.kBrl׼OtRؙʪ?bp$ڀOURv Q<k$u2;#xg$_+mfҲ"i0V}A%q^O7&$~yrݫu}e9Zl@ۣ {63#9\4x]N}v.Z)Tڍ kf-C\Zd|`Ugsr.E T ﵶ)cx1 Ym_BbY ׈$1IvUV;z0No'(p)uLx*IN}<9д2 utȊή3Ўj6<] +.gJ&-x=+!KHnJUO﹭XfZ[t$gUjp^Gw\ xM21u쉰CAXCptL0u>?Xį8Σ8ef#%rxTA~&|an;A>D344FJ[I.0?Qsxm/25B_ݸaKswCCvPtV<`ؠo^ˍPNh1ٲceei\[DH]g7ΔT?I&IZ7j,he}F2 +CBS4m2f O}FL3lurWvf,,%fyB}iSCcq_516BXD]Ȍ~tޡQ<<Drl9Qa9ZQ BV*M1H^u(HPEwϟrPɏbO@@LX e6$)}bsUgN(F+s `N!0<п:T8DйͲ,J~TuCt\N"7BQx:u[dVVb"ko͹a*t#OAM&/v܆X?2esuT**]& +V9< 1phOzTZ ‚IR~T5.G &G=տj7)ұrps0k؜|JB7e. T/z"6]$v<s'X]~\;=jz W4!;3|+~h -eb۬g皒UCב>=.7޿ m)D{F%O!ʐSO<\d +Lij&ϴDc Bh9S%iFt)qgkn4kU{\Ҧr{*zge_+'>)pj%@(_tK1Wuף +Zп_"Үm{XOKs/=ptS7{ ؒhsŐ)QyQ$)\"'XoVs̱u.J5ffi+[Z9aGn"1aNR@ՇMc.cdOZv Bn܆W`r2 D51~;HD33W5XGç+kݽ׶`/m{('--wxd!,&jPpoYKa275zaN'~-5= 9Bʊ;IR(ir3AN+ojeX?V }&wiS>lP)l67ݥ:Sb ߗvC_KaR C!\1@<mވ^|RE5Qx2@ˮ^!(=aIC,z#hiET; ]cO2?}٤p^I~]z~ +R7uEdgzy2jj*Ht{$;`D(i<1<bOqLA̒]?qp _r KDoW l[/o$Q-U󹽞>gN9?NYꦹ dz@O&ϜC.Pj{KYǡ\ʠ:0gXNZ߾Ǐ-iTP~n,O VLXVky<)e-)U r: Ks_~#uFX"@ypȍ$X'^xle&ћo{Аx s ^_]nd<ȽロS5艿<[G\ˋ=V"1dCbC$wg )%㐵=9#WsɭԒxsaՌ>3(GV,_Y[q7@{~%ƼguM Lghro[6c<ʇa`EarCۧKd='kp፣ck" Sur2`QJJ|2|q$pnOh5A\?yCey?o)4KFIxG|\i{iJH?wZ/3X,] +4%mZg{aRЏܐ[LҡTWՌH Qxm By;PFNU@!#\v\qe;~]ӑ:\"2)d04>L#ؔ~_k, LJ6\GRyW!(0Y^!F >x$GqQJ +̾u$EV^f"INikDm6w4OECeVwG6U7he[)H5gj[v {D!ˢNc۞Nf[.R|ć3`vym yᠩgA 0ȎgtbpcDq\ѿTmQ- 7^jF{ByQ3ğ\_Ǐxm?nHv@g]'5g$Z)Qu|pm{>eDOQ SWP}|OH0ۋJ7!pK8qѥ}s9 +4sˀ@C8*ԭKcD0P+-*gMb~PD!<ߥcv+qiU"21VWAj `ҩ)Vm/'D'O VYm: jQN!X5iOt /R2\D'K Ə%«6,vY9Vh +*X6]C%}XOZQ{5* ~iՖG:hY1l6d| 5:B7ҭiPG6!N|^҄t F  +RBS*ڮc nV<>b]MX8k\ArEݼp>69X ^N Cv +,vWs2vqDBWS+{o{-39d=j-8J6Lܖ-BT RyQsl̴r{ +^*13GHR2.'3l2}ra4 9bYMgAa\[9AhD7;lq~ .ur*D]|KQmK-k:Yr^Zf>]\t8/w 6;W=2/b@7p﷡A1m"cJt.ɏA6;וA#"`: 3]J9c?vytDµǘA@æ$qۏNj4.P +@hn("w\r>6. 0n𓕼όI/^nQbFYăfac҂P Rxq,Y;L}>PV2*T?\8Wuߕo'ЬvVa]Q )hi\Bx"߄%eC<9D3^tR + +!-3oV7QԵ㨌͈Z丱n_j>0I>9,0|k&淺4S(VMxٺ{q:~2f[=`U6A[C}eCGqpj:ν1 GF99nL`XڅUGeXl w%JgHBH}qn0&k8(3{^v#""9InxY‹H7Jqc&d> ]q)_{ jKTYwM>8-ݭtt(]'[QyTks$;mNc)e3 +؈`оi7)_%-BUZ/jFgOYLlliODcm.)Ќ,Ll!L1k>Rv̵||i0%Al:%y?{F,i'P xM4m(ZӐ ҩlYgkCF4^>q*lC YzIHi&]FB :c巧~Pg̸Hf Ey+0)xo&Fg>'ߒN։Ĝ/K5'z7 Mg(YK-#A>2eF/*7AvN!kZ!8NKDӓ>DiCz\Sjݠ_JWA{3^riĬ#o1F7BX7a9]oh0L4FbSX̵LA)I8RK`!ui{8>cjS;O**JΉ_ǜv-UcP,ŧ/>=d܀H&»oVSsp.jrIo1%Q p$>*y0 N; MK J"I ]w҈ҝ_ l|,7$5!58xDT g23oRW3Z·I)U^trQ 'Dޚ_Ƅ{Un{Rpd=Ξtos[9~nto`u t~ VjLRJD\n%­7oC۵;Q@t"ni(a;(1DClV66[|e_ExNP 4y42\d ; ȦT>H{Fl[5 zZh˵v> }AipGH#&š?XA2X} -Y*dbBG?҂=8|?оZֆ?R~s( bd@Sn/wMTuZSq +uJ-'lXrKR6s';)FK69 + pg7jcD۫D1h**"ra3Ո#p3wF-k3r9ɶM+`__.§5c> Q\CqCHEL^Wx!+r* ՄT 2Z*e%7,GbJB\܍enMȚA +D7q0A_ki #4GacSq[p#S@G܁q}HKRëߗONkqq`Z_?8{E*(C8a$ul/~0p̥4p^6pzk(>A W &A$곏494IIIk <ӝVrxv|Pn;d$ΪM!Ne #׵_ϭÊa..k޶=H6öCwks@9Hɨ /<ƒq=Zɀ7^K&n,0apψfybߡiث*B +pf]s;%ERy)V,rL_l\un=tU4)#d$)˦:%"oxQ6EBsQj*gŒxH9cXj ^-J2|V!kBvW /W8O_X ]Onϲ!=(B,NRlk'&+rh_L&c,H]$KZZ:0mƨAKvSf𠪞"1I8ucTɀ4 >vLrJ ]kA 6q-cYHS⇐eڛ~r .ជ@ +OmRcbYT2H]'H0!_Zijt9hY_&]2ţ#Mn=FT„ 9`/+/w|Gz BޥrԠJ`d-23憒wӀ"{I799h3i{{I|q; L}U ?xHGqՇbxq3pY h^kH‰4 g$Z=y,>?FlX.,J.Ȯ;P:.(17N.<̈́QѕM^KJH+<oaf(cf +Gm+ׂeu ,p:^Dfng,"D6gX4ԣV(lK(.t W 7>y;lQc[%dЉtz%j"`Tdd+b+tp.or8d!BZNQPc/_g +CbPi80z*~D6Q7x kG^]&JiWs''=`nOW)$KF`yyBA+gxZ3&cTm<)!KeEYϵ_TI?-:=U=>i*@9:TfGydV-+ϕ\ m3FOjPh +ΐ /#uDMoQMz p KRfG+ u +endstream +endobj +352 0 obj +<< +/Registry +/Ordering +/Supplement 0 +>> +endobj +353 0 obj +<< +/Filter /FlateDecode +/Length 2346 +>> +stream +~Qw'dL.ˢKM[ Y㈰jjW^IA\`J(K&j.EZqRc禴6A&aT4F[Y|Us h^*5+o -ʬFP T7w/V;JR+BI:\^׎a[">= D +˚1^׾GnoZHz`-v'n^*tA_qѱSQw8=uyم>FS_쟈g\x~2Sg2b3 Q>jy7Q:+[ G+A|D=pLUB8f3YM) tE< +yo|l$O aI.gv1V]>)D?QBZflA=!5]\)t.Bf\66_н >dw;/fwy]!m@Σ.w$}͜|.@}$dޒ'l}*-ϖ=emft̩cHm󥷓-'xw^{[F9@beS:yD8` L + +~.C,,\gi_y8!-k"]B|%R4W숤 I5+,lelM5ps%|W㸟L,b}4xw\ٵɒ5CnF&HOG;#QV>ja8}9ocq6,Ubd?~(PΨ꼏 ,gŹ +!$?B1 1=d|ڹVW@Eq l]- ۄ81sǀ(o'n2us ;*ѓ,9rԺ '5Ų#RԻ){ 0g.ʻKP)9RڵK|PwsHn0 Tꫝ҇2pE8KU+#OE_).@T?D+*4t{'HM֢1yI$=PA و_viUr8!LVG}Mv]GފE8v&Ӿz +a)Ψ}LDS[RwzyE'.(<Xq3"fTD"tbymAs"yZIbYV¨`=Yڃ'9 @NPSC;]uݭF aaU-6d rA,mv'󸇼56SYG|Q"=R4=&8~8tBE_tnA4"!OnJ:o\5Cs2Rº_k@3 ޹8YJ8כK<@iM=x2^MdO>\3ԆtPqYnyw2&L u|i$oS's1|ɟhG[= p{PoԅN9)'+Wǯ$w'qC<!ftDvoyP_E6OP:kl?qnAt?D14d|s ̚PO84o&vz64Z-]ܔ_gQ*)1 {sWOË`GZ3ŭ &+ u鐇en&q+BR䆅)$M.r1~bs8ۈ\O=#$b"M ?Eҿ.wOGk f](H IuvD!kqM.0th_.,?eCrO"w[?×Wm%GvAN"قզLVzCDγnb#K_H-G)Ђ=0/u 4;鼔py74nAtG2Ce>#Q +-o7M $rޚ=cCr?:(LoIɒ&> +endobj +355 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +356 0 obj +<< +/Filter /FlateDecode +/Length 2485 +>> +stream +z4D'>e͹?a[ӅU܊*WP"ܮ3Ǖۏ-LB]:Eg4Kc֪ѣCV?+Ar cJDKM3%+_lN'8&aF#ƱXG%=cu{yҔD?b'CG;F橻 1eF|"-EWPǬڰC5[&T؜LDYX5^նZ!f@~Eop.J:oa֋G:THaI3R/,bfYŔc,D :&%ߕ :h ˠW-:9SPRDxbpoEG$ o^_$Uir4nN^VS%ΌEV^~A;LWBfl%p CaKۉ`l7)a.i&|v[i +(Z:ԶT&3L;,U4^2@w^t%ly^eQ$i'<鷶M` +G-=Qg'&}f/,s팂bN*?zv[,̬vs V\bm;&Saeŗ4ؙ&N!m^(]@b.t{RsL;iS(*_9Dg^ _^XD5W$2@)d _ ʔ + Nx!:5\5)~%6\)!e'?VM˩:Gof,=@TgćV)KQ(KCxh̵wdfKIu˘=eg{',P[eR.ᤤx䶖';` zNF1oj +"^%%nZN.y 꾮8 @MW#RoN_iB `˰/sj?x.pzmy<}mҰD[?iA +3)ZP]♡>Gd{?z><&NR + +{&{GXNխST +%6iR&D]_YCEǻDC{s?VV3P=KrZ@XH NB6MPeP+x;6gU~h40umT47Wp8)E8CL̑`+ +$}6M3n|UR +ͤ8 7Ȃam +endstream +endobj +357 0 obj +<< +/R7 305 0 R +>> +endobj +358 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +359 0 obj +<< +/Filter /FlateDecode +/Length 1335 +>> +stream +9/ζk#Hrq \%gw<JM@$ M=nye_.r :PE|T'+8]քMO @ APʺؔǩhs+y=If툝sFު.V pt."I)EQ}:$t jWG<1iFӮ K%}܍)qA۵)KZl@B6 +;[n.?]V7o ,  w[>"8nn.$%0Ljp dF<'#:J$cwt')kn; ՜]붌c3܅v҄^4ui Qd)b+dӱ{Y~owܱ='綃tx gQSIc_-f5, { N@Hq>Vn˴8Zou熿_>b;ʛiofZ+YVPBSHs0>zhm#u&|> +F[AVd56rCtrd!]ͪ7Q4&i2a7EB6~bI%N'ipΗ9|<3RM ewga?chD e ~_rʼ6s{O]Źս1pJ;*ˣLY+=݌ ΏJ#7I!F mD"/-kbpkө¡tE#|̑B}sM֩*/ \"21k7uRAg3h!+(N]P1 v^j+8908(HN \m화 lTExqzMYV5*w;0]m?d:6˜t2(N?ۘ]*%2 +endstream +endobj +360 0 obj +<< +/R7 305 0 R +>> +endobj +361 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +362 0 obj +<< +/BaseFont /OFUUCY+LuxiMono +/ToUnicode 363 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 364 0 R ] +/Subtype /Type0 +>> +endobj +363 0 obj +<< +/Filter /FlateDecode +/Length 607 +>> +stream +>+:D%Sy"B06?[[D7$^4 o!qP%-ƀfpᱱ6~,c0;0#aUWTH!xX1iInR!oIcaKOa"UH#MZ tFZkr7J ^O|Cm8] +.͒B +&0^;'KC6aBLx:EUq(4ˌ.fA+h{I"CFԖ [wGbGvHuNs%ᰐ }^'v,//4p3 +tSͅ$U I?dN.Gt6{~/fb˯mls2Iq<˲Y~tjv~j1I5AO +8]/S6֟`_$pe!ޕ.ܔ"0aH.:X⺙y@^NjKҮ%SGG +endstream +endobj +364 0 obj +<< +/BaseFont /OFUUCY+LuxiMono +/FontDescriptor 365 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 600 +/CIDSystemInfo 368 0 R +/Subtype /CIDFontType2 +>> +endobj +365 0 obj +<< +/Type /FontDescriptor +/FontName /OFUUCY+LuxiMono +/FontBBox [ 0 -210 600 992 ] +/Flags 65568 +/Ascent 992 +/CapHeight 992 +/Descent -210 +/ItalicAngle 0 +/StemV 90 +/CIDSet 366 0 R +/FontFile2 367 0 R +>> +endobj +366 0 obj +<< +/Filter /FlateDecode +/Length 21 +>> +stream +UT{i-bMcqZ +endstream +endobj +367 0 obj +<< +/Filter /FlateDecode +/Length 10183 +>> +stream +q MygH #ҵJ>l,#4(6Ӱ=gڑk "S7TW^؈ͅ.~&UkoQoo9vDЁ8zϸ>ifmr + ʎSTm3aJ?D~^¦nczElNk"9SC-m9oYorGiSk@덏EYƔJ#c7B~Ǖ@p&UpC?&g&17N(qgUEtl:'4U +0 +dv~-ۯT8x'?!m}W+Wh*`&;K1ߞF>F/pq +2~/=`yy$z[ZjE{ Ajt{ h\Ǯ('pBd7e& 1h-wPgL~)[/ +_ȑa6c5K>ݟojXxM?7ƀTIjp:Gݛ!6#TDQ,SλMɁܹdfyA V# 6-5(Xfdżgh U b$}`=cdpB2"%# +TNrocc3PВpTSkdEDyʯ-Q>͗0ׇNÈP:SɄK엵rG5h3(|.HCy+D qoCQl/",օSz#(:boS/DG6 䜰 +%~ZO[* p9Lp<~kdLr}6`0 j4^BHKfLHyTOVO 98_E )w+#5OJ.ʼnۙŦtaL m?JHjR'Ƙy30rM,PyQOT)*6 JrWnS)8xNٞ ,F Úmu&{a~p"WbËj;2$̷|<_7ͤЈܹ +zMy:Mfw$/G:q x-!EwhZڪ–/K蓫J +)k2pib|۝nu#7cjN*L*ު}j¹TKSJoׄ}_3U2J8h0-i9,֔q.E#=PG輿AFıT Hˮs |l:neDZHV[#؀WSƠdt3O>ImA +> VGzIrg@1h.ĈŀnHm$Sxn +ިY@I]RqoQ] D u^9Fp5L"Y7xŹk4ZBu +TRmز}^5|V΢*:r`^-5rcH*GG S!)1(a+yjGj%T\7Pzu;;g?2,˥O9ɖ!2#},9jImo+e L!iÆ@ dd k+0&{9q\ mOIضFEH3'@rF"nUΈ$,wX +٘fɉ_C!xR[rD0TΏ +]v HXkvu S=dy?+1 2Kjs/% gn$͋ߵ 6goK<@'~; a;J_b9,r'uaSO%@c_9ʋۙCk e}zwU yYj!߇8>XE K0ҙZq=FhY h37gŔ_ӢXGWaI!7 (9ik3IЛ>5+3 $Pؗ3쿫_0C 1Kxni)!,;KGu[m98tIc;hOJHXITg^3Heiѝ*ZUӦs]klQpmt޷1bpC4tgm {D!|wyjB)ض^¤(;wft28^y4B!~mQwTfѡ빴jϵ$T?m K +O׭yu:.An{ ALB.'&S4F9U͇^X/#8"nR%b_Nyl`6uDs~>6S@8r?9fu8ݎgrU;ݛ)2NvS?i CS?{1hue%1 cbyd]XFXKi/ܘQ 8Uqs +%w8FیE|Dv]""5̹(θGpo'e@PדGS; >3!z!U+o2@AJqHHW?jU恡XRlmħ4K=A3੥F1cY|NlGVߨ*I h0kԵN 2P"Bslm'sȆ?9s$O -%-+x|~H$',*=}v6I/9&K Ǹ8C^vԙ+ ¸D^'2 cme4Nov&s}n d = ŸdSm:PvGWzLgڜl}k /?'Il|Veâ[[F 0S4~5oQf.4yCT7yiA5:$n9-n?Fs;Cz60l* +#|'DO<`;Gj7*">ťױ#Ȳa"}Jw /Aa@!{D ?Xd[٩Weq hb8y T!mx1z0xb>[ž_}W5ЉEyB̫f?0ɱb0P[$=e/b2vb%&Мs'3:?DΚi;eKǯr7 >ueݴr'-9dmAU0 [wA))M33/7`޾EbdGՠ][ 3[xWtJ}3S1GCBЃG]'DURe=֥0[ )D5?!blu8HTWP`Jo59 +ݺag~ɇd=SxT_${j&}5eY2<uPjl h{h ^Y-EKA,z7c~LsBӰ Ћ^&;)?PTL9ɰCĊ+pyFTa:G*ȇ%9xAg.M7-[,PeD]\[ C+;&\Ӌ*{@EİSv!6U,d\RO0 /[Y0۽Xrd`g3 F W{Wņ㐨U5K׉XJWyFbT<σO(}Ȁ2g xmr#ʘ]tΉ vm +,M Xt,6 ݁rFzs +~?Vխ4~&-eVUO`U&x(W%"/g[Sm=1g '~3ʅjj>vlp +m$r$"KC`KoLa ҃: z9OKO}A^gsyh3I& r]EFl~E{kQ0_t2gu"GW4 mve;d+!_o_r 1w]& E.1Wq +v1'z ]!CaWHI-SyCVܧֹg[qCv-Sh G j5zE%(X{o Fn 3ݙ\!I^nO^x(.(ZI;uQC4uwwY8mtnB#ao&JIfS?cM2PYZ0wڮjbSfn+f̕ +ka9CSSWkTC}R +! 䦁yG߾(M85nL8g&: 0h=:,-N3̵2ࢀaj g#qzRBesSlm7O Tbڈ|&]^/"o;0')-z<<˗F J rn/.Т%' }S$Cg":Ӎuc }k6UeEF/:K`?WR_b\q}l4aV&IM1b;Cҋ?^L0Վt-QjUK|Ur⶿ρ L; +!QX0t !8 ]0cYj2Rv\1Q&0ztU|Tes- SSCsr:Ol 2tssJxf҆k-;9!AWh8{ ~n=x$ !4>Y!2.}jcvd.uk&&%˺]^Sch3c aER|1!`3ǡy`D8%k1tDo/MaM_>j0+?M~6B ltN~euSP:c +vF@5u_?Aa-(ܧ L,4~;`z_o/ՓO@.t +[wk6|>JיBܕ3k +.iNC /3F4٧ׇePd/L5BfbMhK`ܝ!y>( X(a? ^qo8:poEgdi!=at"7k;Rr45"-\ֵW`Eނok )޿J5BE!ofWC8#|4l==٘,F3)k r8)@ x8oi2Ulҙx@V\7NeOqֽ̫M?˃^4bY7])%W@hJA_[;9 5__ts Ƥy8u 2f؏נxGv_o uk TaqՊ~?IpeA~4idst鋤 3\Oxa+ߢsh/?udoDj|Ӯ2¥Qf_^ԃi"bƴ1W Ob*CvpPH|0u-|7uK_ҔzP Ō[MzZ(snw "@ ؆Ԁ^Y$bʭ1uE((aw>x.gZ,PZ# z)Z4;Rd ((|"zڄA/L2,llZy35h3_o pZiɕݙn2?547 g_T&)V{ln6n%$]x/I:!,0Qbc1# +U-moBƯp/4J*ǙW P=3}Pkm8rn=]+jS"l~]觚Ԟ]zxn`rnK#('}j{!"(ES$A=敞fmvӅ_g&%$/$S:칽J{}q$fҒ(\dWN^/ +S/6F_#f< zAdBkMNKxzpPD`Wf,sZ̡jRj!`zg~v-Rr.Sy'J:}ɤr9XIsĮ1n[D&`[mEAWLcCTYК:55S(_}<^.ۦK6sD|J[Yknyxp;Af' §/A5 +#C<~\uX*e<_ xO0{ZKNDO9JOדL=yт 6cm +&H_7 ?^D^z;J F/ SkwΠo;l>$x }n~PuFʼnEVfٌ®lනu˘1!4(KE6VYHʩqf=CHIjA86jD8UGu̇Ә242ֈ-k,obZ/s{3}}g_z,rDoU~1G.疑u]_r Ya.y'Y'9k Q t`j>[!5kٗ.z!(;ߍ}( X__O|OHdR7ʏ;A/Jpނu@ͬD,D >4<^ԥ-8ŸnY[ޯP @MR@^/q{phkMpbU{5`9k.b+]Gw +FCnX oΙ0\g?U +n* {dlW1Z2U8F bT$&JfwU1ԦR#ZdU +xRdlaߺhѦARF REѠ)(ˡɐyp񴈆ӂnڑڸ+%'hw٦k%ފ.bnk<VnMnϽ> ?*p4ϖ7n+9l$VlRfu+UCEI 4 +//!1:h@J{ImT㟅t$&r&F ᯡaձ42~inʳBLJUwp/yo[Pi1BQVԿ;΢fN?h$OTlh.,JH:A +n07{V"v$Zw4|>9AX}O1ZI`h`. a_a`թН >^Tpb] ?)M\X(+ ܕpfS{LĹA \B\4(D8?IY[A.!W.zHL7s^NH1:ap-6!ˁ?h1y<5\Vdoж'RcOcЉ-ڏ s8;#zAQl_xT ^yIM k1{vK _MVNwPe4ڡ+Y/L*e[vwk!o1uy<|%ׄԳ{"!2*O'diZj@OU59K@ E)8& + +NMY,i 3ݠW00{T7- + _?{zi|5oH.Cׅ2/It}bF?{vEB-W$!.Nڪ U7Dnʑm0Ek0bGZTN/JRHŞu<Έ! r \(5A^~o - I >m&hF >GEo<$}گRF蠉{nG%*ԃsw)z^y\:15]`Tae8"Tߪg$"?Unp;5RtFzy[в83( v?X2LUVwrh)B2 QBy?:%kcsʄ$뢋HsZrrhm{rBOQb@* 1P&T-&G1g~+ЪL)3YHx?G(;%h@ĞmG,!G* YJx  NlHpVA)-ѫneӇ}vQgoKorJD`b(%]y^ ؾAE&/J.{(绱k:LaW'rX +endstream +endobj +368 0 obj +<< +/Registry <643b99ea5e> +/Ordering <6c3b93e64f496c81> +/Supplement 0 +>> +endobj +369 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 418.08 103.044 430.167 ] +/Border [ 0 0 0 ] +/Dest [ 9 0 R /XYZ 54 446.4 null ] +/Subtype /Link +>> +endobj +370 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 391.679 108.051 403.766 ] +/Border [ 0 0 0 ] +/Dest [ 12 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +371 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 365.278 142.532 377.365 ] +/Border [ 0 0 0 ] +/Dest [ 14 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +372 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 350.818 209.041 362.979 ] +/Border [ 0 0 0 ] +/Dest [ 14 0 R /XYZ 54 394.34 null ] +/Subtype /Link +>> +endobj +373 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 336.372 251.187 348.533 ] +/Border [ 0 0 0 ] +/Dest [ 16 0 R /XYZ 54 395.9 null ] +/Subtype /Link +>> +endobj +374 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 321.927 210.703 334.087 ] +/Border [ 0 0 0 ] +/Dest [ 17 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +375 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 295.54 224.814 307.627 ] +/Border [ 0 0 0 ] +/Dest [ 18 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +376 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 281.08 265.396 293.24 ] +/Border [ 0 0 0 ] +/Dest [ 19 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +377 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 266.634 247.806 278.794 ] +/Border [ 0 0 0 ] +/Dest [ 28 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +378 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 252.188 300.379 264.349 ] +/Border [ 0 0 0 ] +/Dest [ 32 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +379 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 237.742 256.439 249.903 ] +/Border [ 0 0 0 ] +/Dest [ 39 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +380 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 223.296 301.58 235.457 ] +/Border [ 0 0 0 ] +/Dest [ 51 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +381 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 208.851 248.292 221.011 ] +/Border [ 0 0 0 ] +/Dest [ 59 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +382 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 182.464 177.38 194.551 ] +/Border [ 0 0 0 ] +/Dest [ 60 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +383 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 168.004 262.904 180.164 ] +/Border [ 0 0 0 ] +/Dest [ 61 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +384 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 153.558 300.347 165.718 ] +/Border [ 0 0 0 ] +/Dest [ 71 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +385 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 139.112 216.263 151.273 ] +/Border [ 0 0 0 ] +/Dest [ 76 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +386 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 124.666 244.432 136.827 ] +/Border [ 0 0 0 ] +/Dest [ 89 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +387 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 110.22 246.484 122.381 ] +/Border [ 0 0 0 ] +/Dest [ 94 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +388 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 95.775 212.145 107.935 ] +/Border [ 0 0 0 ] +/Dest [ 97 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +389 0 obj +<< +/Filter /FlateDecode +/Length 1690 +>> +stream +霃HEU~}A/JK7o(m[җeCEo359ɾ}C@ݟ(w6w%ԝt"x%8rKAn(KId] +jV_#<?1I1蝛afoaBk$͈ cԆY9`Րsp|"YGzV{+?q9j$(,"Fg~p]ΪL /V(I#` +qJ"*diǗS\:LdnlIC1w*Ҹ*F3t}xxJosQ#|g2}3WKZO%q3O".ɴvwD9A^d=`Ƶ#Sz4я$ͧ l/>iAfh.]na "Bz1/_Hod2 [Ii0wSoc3l 9,NBʟ=f8m5j]4J-.B[\Nq"qw@;0L%oiqs21P^?1Y:otVܸ,DTGxrb# SiĉAySظTs-NOWY*m+Cfֱ1h=P$a{lf>h3u=Y{/}سiS;.U8jqX#E0iA 8 /p.ݓ"6淴/#d)Ҝg0g\q 9A;c{\,- ,Md3j/Þ:wlVƒD NH}Nvm30 _T.ԡ.sn0NglJ^> +endobj +391 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +392 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 561.713 150.791 573.8 ] +/Border [ 0 0 0 ] +/Dest [ 100 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +393 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 547.253 256.234 559.413 ] +/Border [ 0 0 0 ] +/Dest [ 101 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +394 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 532.807 337.87 544.967 ] +/Border [ 0 0 0 ] +/Dest [ 104 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +395 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 518.361 277.709 530.521 ] +/Border [ 0 0 0 ] +/Dest [ 114 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +396 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 503.915 262.089 516.076 ] +/Border [ 0 0 0 ] +/Dest [ 119 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +397 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 489.469 328.389 501.63 ] +/Border [ 0 0 0 ] +/Dest [ 127 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +398 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 475.023 257.438 487.184 ] +/Border [ 0 0 0 ] +/Dest [ 131 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +399 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 460.578 257.485 472.738 ] +/Border [ 0 0 0 ] +/Dest [ 139 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +400 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 446.132 326.727 458.292 ] +/Border [ 0 0 0 ] +/Dest [ 146 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +401 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 419.745 266.7 431.832 ] +/Border [ 0 0 0 ] +/Dest [ 156 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +402 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 405.285 267.419 417.445 ] +/Border [ 0 0 0 ] +/Dest [ 159 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +403 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 390.839 202.833 403 ] +/Border [ 0 0 0 ] +/Dest [ 166 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +404 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 376.393 306.174 388.554 ] +/Border [ 0 0 0 ] +/Dest [ 176 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +405 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 361.948 186.042 374.108 ] +/Border [ 0 0 0 ] +/Dest [ 188 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +406 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 347.502 169.978 359.662 ] +/Border [ 0 0 0 ] +/Dest [ 192 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +407 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 333.056 174.87 345.216 ] +/Border [ 0 0 0 ] +/Dest [ 198 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +408 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 318.61 173.558 330.771 ] +/Border [ 0 0 0 ] +/Dest [ 204 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +409 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 292.223 179.899 304.31 ] +/Border [ 0 0 0 ] +/Dest [ 208 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +410 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 277.763 211.701 289.924 ] +/Border [ 0 0 0 ] +/Dest [ 209 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +411 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 263.317 258.478 275.478 ] +/Border [ 0 0 0 ] +/Dest [ 213 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +412 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 248.872 296.15 261.032 ] +/Border [ 0 0 0 ] +/Dest [ 217 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +413 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 234.426 186.549 246.586 ] +/Border [ 0 0 0 ] +/Dest [ 221 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +414 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 219.98 266.698 232.14 ] +/Border [ 0 0 0 ] +/Dest [ 234 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +415 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 205.534 207.238 217.695 ] +/Border [ 0 0 0 ] +/Dest [ 242 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +416 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 191.088 171.253 203.249 ] +/Border [ 0 0 0 ] +/Dest [ 249 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +417 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 164.701 167.252 176.788 ] +/Border [ 0 0 0 ] +/Dest [ 253 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +418 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 150.241 221.092 162.402 ] +/Border [ 0 0 0 ] +/Dest [ 254 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +419 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 135.796 282.124 147.956 ] +/Border [ 0 0 0 ] +/Dest [ 258 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +420 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 121.35 319.322 133.51 ] +/Border [ 0 0 0 ] +/Dest [ 262 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +421 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 106.904 291.714 119.064 ] +/Border [ 0 0 0 ] +/Dest [ 267 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +422 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 92.458 273.962 104.619 ] +/Border [ 0 0 0 ] +/Dest [ 274 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +423 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 78.012 223.71 90.173 ] +/Border [ 0 0 0 ] +/Dest [ 277 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +424 0 obj +<< +/Filter /FlateDecode +/Length 2504 +>> +stream +)vVͦv]"{\BK F ؁X5=3M 2dS,BjTioˉo;) J;tOl@੻Ol]BM"k\P;{U1U-JY٩KyDxNE IZ|@_ jSٓ5/L18q)1HwlCqkŸ[eMeP?!\ +Üp6'siibvBcdZU(Cѳ5#HYiXڜYK2Oc;,?БwՅF7 "iHKv-;*apm#q1A ,"oxP; (8c|oDŽF P,޷HOX54a2Mܤ*ˢnl +%hG@@Se!Wl-`*tzFw4)U$`I0Yx#áp VfH}^en~Uc,#md91'>,kiw> ::k@^AaAƂ|? C"Q.gK==rlJԼ,_m.;m(qoҥRG޼r0O+#q9t2ض8e w>Rӫ? +uM7ǧS$+h4h/᡼!)-{(wftך{S~a{!5S*)b> := J{}dh=8 4493b5 *HK>Aeykpmc]XNQehgpvJl] + :FFrmn9:> 1r@0 > +endobj +426 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +427 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 561.713 256.363 573.8 ] +/Border [ 0 0 0 ] +/Dest [ 280 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +428 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 547.253 284.356 559.413 ] +/Border [ 0 0 0 ] +/Dest [ 281 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +429 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 532.807 324.422 544.967 ] +/Border [ 0 0 0 ] +/Dest [ 285 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +430 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 518.361 275.414 530.521 ] +/Border [ 0 0 0 ] +/Dest [ 291 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +431 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 491.974 166.872 504.061 ] +/Border [ 0 0 0 ] +/Dest [ 296 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +432 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 477.514 289.08 489.675 ] +/Border [ 0 0 0 ] +/Dest [ 298 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +433 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 71.933 463.068 351.626 475.229 ] +/Border [ 0 0 0 ] +/Dest [ 299 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +434 0 obj +<< +/Filter /FlateDecode +/Length 986 +>> +stream +ji@"TX td|AZ <^r-K37b9M +/u@*V%{|ҧ4cLo{J_^r%Ux'syH\wo/jCVg #YUiIRa 0Dݻ5CxlV$DžO`r0BN#gFjDZ6UUwN"Bٴ8i6޸$(<:Ygvnp=]MLPjVs]k:@GyO3Bf䬋)/>~ וMn +N툏˕3߲.Eeߛv^-bB @`ߋws.}5C,(Q#+~Lۤ%s67|[(1bBd5&&5Hx̯2uY D ˠ݃a`ȏ+ŗ-BR/J {O9s BG@(?;$̟KJƧ[p+2"5q6HCͼ$ps7{~xU]nmS[*+>ϥd%6&r*:Ю9+*_Ce"f@D鸼5ڷ(v簽P5хyLaW',N"Ԥ`Dg24 3fs!MAu 4(3p*QΒ\~'v\iQ-ڱ#ˮ!@-LmC9T*E> +endobj +436 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +437 0 obj +<< +/Filter /FlateDecode +/Length 2538 +>> +stream +Dw֭&om}~-z1~ 40>/ThX& iT.{y-8WWa잭rmzZ)#`li}tQA!$mQmS-4,NN4,Dے07|:ArzDWonQZ"{G:(  teaBKMJjM|Of[ӽ{MjI9#wV8v ؃Ÿ0`Dm^Sh'z o_x*.!b/o0E"ղd#I»XDl BIW?z}@q,$@ق;;Qy;*]'W;r0ZLؖ&6D/Dt R6ЬZ#vJrQ1K$6Rv>G?<@Ut%Ͼyx<خ0ujD*bEOvx_>sDzi"?v1U&9jec/ljNۮ +vHJ*xR8LϿ V'3ib9N˟x'g[spe)(vZt'7]Ǯ< 6;z[5$Mc3[}}06?m-\a:3>0\<̶CնM^"WȌR",g3CoCv7rRr%4OᏩH`*PyJQ? (%M^&$bk{|pR, ֮@iý~!gvK%͔MiU|(Hr@:OcwV q6;%X4NF??NpYΗLAح\d")J^LVc+E +oQD&^SHP!6S ˔q ڮht +[[2F;E &職÷eMk됷ޚU9>t׿Rt֮ƾ8^"0S\1<ҥ7< :PGVo$0$g\ \! ~8" +w==\(e8;b35+d-P[~ԸŬCDR;@4)xpKi-Dx\F<-S3+]V:UnkY= +ƒz,:QF$5Q9 +NNsq,?SWOn룜+8<bcK3F9~*Ĝ:FZ`H)pKmpXʍ, Pt+º&;kսS`kʢMhK找TM{[֊|r.xF@:xQS9*t3^-Ila4m`;DN JL@:R =9.RibG<&} D/v|%ŃLg,22a_ʑMU9Nu0@҉}A'ʰ[ɦH.LU%gvu.Q[ Yl-o徶,;CF\IF> +endobj +439 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +440 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 274.215 96.744 327.869 108.904 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +441 0 obj +<< +/Filter /FlateDecode +/Length 2988 +>> +stream +ϴUDƔ !nHq{`Tb[ JbP Ktqly$~ k_VZ~ oC·>i 7%.1#&t;DA$M.|.@\J7ܲa[7\5ir(Һ'3u`ucNO?h<!PX}p>q*Z{a E!g` yw@TWkԗc-\;.~MD8i5fC&3(i0KPZp2'I0v 48r|hcoԪtzVd6,_t?yͲql*PJ*h W >a _bZʫ[4qRV;_rbQ\;$?1=iǍ<8`uZVL"pf:Fl zרe{47|PJ0j5 ^tT661JR}L)AlΘ(Uy:7񈦮˜_>R(_ĩu6l-OT\@YYCt-ɐ9,Yo~sK);XO(rN}#2)C:Wpq rDD35jQiҝM"_wJzzZmUk"` 6яVVjOLQU* ?ӼĿw +Xk}iA`6bD3fR,D$Da)zM(}}+%xy2w_UI@ц8Hl^UM=qLPV &FB@hr|`eU1w>3 "p.l4~r!PH#Ӯ" [ajNdxl:eE\ cwVw84Q vD"'v4AcXsgF% /T +.̲Id'0d bk{ӷԏa`2j㯁1 J%J'\n)IA]eO3?hkk{),l'Q)]m n 30I\F>/$LG&ѽEugB{[J Ir';[8t2p,6IvL¯ +KK|#_0c=#176=,ڣVGжЗ%d.^wY&4D&b|btP doڛv3p+f]R[S Mwض%Np-*@8<63ywJ*R` ͅ)͎_Rա#7#K%e^//_]A=!ylnz$X[:T-"ʪTЎ0Z fP(&ط Eݕ&~727~7ᄐcAPb E:̲mӾTP^[\SSI!?K؝n ECK6] RcekL/,r!Om)َː6O`>y&SEK#  h't,.:kYo'`Upo^6ŵ+`v*|$w0rLvcpȶ{lj6؜4S3W"#Nxha%)nxnZ<>$D6ø}Bԉ{GYyh(cƏm>oC2vm1P&tO{=P5Аp<=&0Mn2|!:#q* lw H_'`H}|.cU.Ak7V>JsD/9f&#.h'e0cmXgY?svb^,b1ޔMխ3X881|a[}S?&#qS] OQ8pL+` P ɮl}Gx ["1k|Vy";^umwpd8UKtsdzM" LqX+M;}(:TfTҦQd뮚Tb`k#om%q-mpGnCOL&ȝA37V(A:\c%!8:jYI }՞ }d Sci4,KQ!p+d6_QOUS y+m MdTJ Js)eN ~KU+Df6NZxdV `6TVĻ& OӺu3ɸ:X}&6eq?sh}4ZOKg- x3鹥b^L}Xy41"ylYa_tF gBXeNzjP:`},|D}dPWJd;!2%hYJNK E F3Ҳ/0(??i l;R.t |, +endstream +endobj +442 0 obj +<< +/R7 305 0 R +>> +endobj +443 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +444 0 obj +<< +/Filter /FlateDecode +/Length 2191 +>> +stream +_߁=,wŷ}xiZ'0-e.Oonv`$ Շ3өU<w {s= +Y *ۄ&1bV> yfdV񙻷<Ӽf ;f0z66K1PxX4 a eEچkWw|-bhA(Ɉlz|Xi" |` ]fcgwWOsy$iA{]|=1S)Y6dsYL^2I0p& GYЪ;D}%:{l~/eʾ+ [A(\Ē<{.EM 7R؏54Ƣ܁L]ꀞZE(aʛwS$!n8hܩ@q(an <e^/̥*z1D0/~#Aքa:l<X rj2-:HS}y"~A3|ZC cHbR{L r9/DbEA7v2{$'JjF. 2ht4f\*6st_6m'`hKvq| dLr]f-)0h^}ZPn&2eзRQ- /F8 hbȲs_qtS\عi &I9oxԦ,.Ol'}bl􋉂C@a> _،"GHD䁃0>%TG>]9k0m +V(a$~F@4 +pžvTWA K+T +fFVY]7{?\E*'[S &&jkRvHa'[ }Pup$xu QN{a-`zP8 +187~"܃+⣁XS3qp\ +@,toߛЫ>Khrz![4` ׹!gmxQ͜AN'uFZ:2Z\SmFwH@rvpo<* +6DYo{m]0b:eN$- 3"(sPBPXHXS{n%!x[iv!>O Uѣ?>%{|1*̽efnO +T)5bӟ?ȓE~Jt> +endobj +446 0 obj +<< +/R163 332 0 R +/R137 315 0 R +>> +endobj +447 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 121.71 157.743 173.435 169.903 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +448 0 obj +<< +/Filter /FlateDecode +/Length 3312 +>> +stream +{N)'ZH\e?bJ? + +lܶU7ݶ3C@z |U`0 2&Wq50BKy-jx,ʻ.6}o|1>S4.f_~Ģ" ȅ̩Rٵ+"Kt}M^)΀W16f#x,J8V-=vRj"q6 b/;_o&QbVE@aZ%.DD0un\(3(Ԣ}Iٶ1U-OxEQ)Ub4/Ѫґ +gVӠETҪ ! +=MvNCt!qbf Tŷb4o +Ȟʘ>+EDOv~?[y/_q*O&tĉF>J/W%O[eZ=2[",UĶei o՜R=l~+` 4x!HȦʧ멚MǚT: l;*+J}dUAF}ڻqdcG3p觡w/)H' T!xq -i,mCaf2 +Vׁ\ݐs<'c1aXTFֿ>5_AݩS9kؓWxGb " Vбپ}4x1#MQ#oFfm<<]D:g3p3B܉l ar3[qg&=;6˄5RނbV'Ex~|om7qZB.%kzpVJq{rhM[Fȅufs]Rfr:b/y8 [s`_vn{ƘR^d3Q#2)~aWkɬe 1Tϟڃ`JJ\dÜrr;>Pv`6RGNb\ <gӔsIȓj(Ӑ*c>‚}di݃nG*Kz]XM@WUP:離S\x! /?.( KeVblHֽ)C87Ї8PޔT#T}j@^;O~$pEsEB (uNv>lfYQ=I]YZe +.C$nEe̔)`[V +t$0c&#Uh(}UvCs,ݽیR3?9K%.&Ə36Cy{Si]:A|(w?.\ $l +x9Fʊc yU FF{1Jy| nh IdC^MG&&Y$uP܁7sfBz8x ` k𤋍5h'> *ޖzC.oNP#8h-.͆}ˬ7ݮ.Bu$=p4Пd&krRW ߌs2z$"(166*g4IOֳ7M)n41LY~cf*ka2$qz8.*vvKк/0/XXI;ت~S}:7o"@A_ } !s6a:%EZm<QnM +[G-Is#jMt_RmCs"r 5/# iRFcUJ+͂\n//&9k2d+4 +endstream +endobj +449 0 obj +<< +/R7 305 0 R +>> +endobj +450 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +451 0 obj +<< +/Filter /FlateDecode +/Length 3093 +>> +stream +uD bw>8~\#&yd:=5͝@d{+Z)S',} +W*6-#m#ԛV1B8 'e,0JR첋O+/PE^p .tI*UȉF\,Su?*aɴ' +w\zvP{nkߵU1'\]#@xeN &?2~e&8CI+_SU,2:~ IDiLsdko']vj&.qQ-~H_zWCga55}* *f16{. oo1LcB,}~ lv0O iV5< o쨐 SQPRx?Kc6j3קA^WjÈYxZc)%g*l#U4H)o#KS1b{gkT 9%< >drpV5{ohE(F?n jU0; +N07oT?oqEIk'X!r\䉭R~rd+ qR ;e3rgixïEiYt+1Ü Xt}ONHsB3#4ҺG=zd8u`7'KgwZ~TP2>0&zfbLHHIlOG=ѶfRoj|?aHٷTs7'̮ u}{o2.>d,5:wm<ѳ0&$  2lb4759<-L&1WT2H4y\Ɛ|^vIDLh.=UcobBbDЄC풲a| pL쪫z-2@(}0{"|èff5NGY I +ҶB2XbHs\OFqRK],=!3 +p1F8{YjFmE`dY4!Lx͒aʵe\vyx#5FqcbZ;ݒ[j LAyv]D![YYGu9EB@$[t/͡ +GsŃOA8{8Xp 'r%WIH(s63,A[`: [4Pv +ׄ3Θ+Sh4ecyW(:#Y+wD$4eMIwUNhp͑ +7-J*nWྞjH(ôi6&eit"oL=,Dqh!)=(Zr}StF L@?2_ZHu">XZwk~2|btc<4hЏ[x,1T6x2wbmtݡ~(N )E}?!ii V2}rzkE$+[[lk}ZAf/1`MI.š1]x4 +}>,BĔú-=˖(tAWoGB:"iEuዊ=Zż`A;URf&ys_Ҕ7YKrG/ǠЄl +\1Z>͔5cN<: k* (ˇx~q_2"eT]R)).:Ob-œCx_qp:_ +X8̫~ N? {ʎBڛ.n)}:*Q#R"Jj zF[>."51+orkpgɽҤ$ͳ~ٟ5l.%mJ@\^rybe8R aFG5s XuŪSjeQ冡n1wMс~2@&S?Db@,ꏠӣUx!$RiGXG2/DYheLp\]{ȝ^uP{idzK O ȷ[j]kTw~jB 󣫼BN mKëG 3Ư>[[MTG[Y/f45jYk$";, b2( 4 V GdowqQ E+"Ʉuk04dv3pKD= wu'CFqٝ}LEw#ON ^PT]v{atdS%S]0B6! MB^Jˆ-' +x3=@æq؁w{iI WYz[ƅG8ΡzAeG W+< +א~G,#1 ߵT"zlP83OP鉽2> +endobj +453 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +454 0 obj +<< +/Filter /FlateDecode +/Length 2243 +>> +stream +xnbk +Q5 կ/rfK6B0A.U^opTɟ2W˗hP^m&Wˤ;M>Q`)hǞ8.1|Z_V6⊶ ;A}_UMIW ]5HGy(-Jt/rqCE)JֻTDa4Sp $I9-7Y[Rݕtȳⲁ)!)!:ԓ!#_1%Σ*4yM& K2Z2 +Jr6~T"HvlY,Ezy1 IE ŕ<]իZS"0E@E'6d??ɮIy^r *W4 + o2‰J z">R/~v-!b7LZiP?`Ef1Jh*>HƈD_H\<6~u"47Y6?#!ΐEQE,;] Cׯd5:圳Rv\6PЌg4Mzq%ɟN#hZ[ +89XBcI7M +huz#hܧRAz^Esq 6S"c&:z.Z]@MvczYqFbUwP3y('-A6?YZ qXhQC4 ,ӗ!xzMoBŷ~WrXuf= Qi!I. ?r4փt&]#b^Gu&fC/gEH: +fĦ; Qu pK:uXoݍ tG{eJA"QG 0*tؔN`vh{Ẓ;!MP ;Ip0+Fڰ3Uo*M=[,ƹ4mU%.MFX5p(@p = +/APaQ&zg6G&/އbc/ы%V%a*nTZ&mp+_~:ѫ bs3B1o{/Cn0hƞPtne Is{T w~usʂ +-8tJ4~f5Fƚ +V\MrY/~:Gos,!7:ZUS9IYWqnkJg)<*$~hAh*:J80Ao{\}kK0kʵJ &O'ʝ61 ">$HU`bimꩥm6Kw.>'d@ vubSRWy +-/9`N8g4R zIx&#f!>mR6.\#rt:J~ZgtEc0"$Ia6 4w=VɎS3XpU?&[WX9V| k!x(c+,ҝXUGFOUŌh] pp)]I*ZeJ|KbvWDP +qR?2ְˣA4L]wr;'aWfW}ćjS'3)H,w܂it=F?ٙx<8^-bO!fTW`oY؝m`gu }7+΢i;*T'o=C +A[ٝ6w,j k'U?IxJ.eLτ +`7|=yRJ?-]+R +x?ũt@GM0 =}(AdwA9^\Z((IIkI6`uyIǏc +[oZ5(B^-vzΤKr* +nz^a)>~R3Tf +2`cXz-&UGE؝h\/Y۽sc0-44^qg}!jw5 :Qh߫>(8JA`J +endstream +endobj +455 0 obj +<< +/R7 305 0 R +>> +endobj +456 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +457 0 obj +<< +/Filter /FlateDecode +/Length 260 +>> +stream +̶{iD@gᨙp4"Љp1{26פQ8b]s%%+=:\1t*h H!^ "'ƕZ":AL|82w|jhi~XWsAE`E#2kU1V=(,59n:`BV3'ɑ\ئ9.R9{*Tk!L`HX|8"|% p綦, +endstream +endobj +458 0 obj +<< +/R7 305 0 R +>> +endobj +459 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +460 0 obj +<< +/BaseFont /GXUZVR+LuxiMono-Bold +/ToUnicode 461 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 462 0 R ] +/Subtype /Type0 +>> +endobj +461 0 obj +<< +/Filter /FlateDecode +/Length 444 +>> +stream +8(ԁ#S黜=63aޡUU"b>$ȿ)ISϚGlVԣH!;͒ `5L"-oI6$JB6QxD™ͩ̐u/Yӎ{fh[ak WBNl."Hًj*YGi#"i1D+,LRu +ԇ]3O,vRrV;M]jR-%W72 }qF}IÅ38ՆDkF`,E,h{ u} {Ni(?Q6ꌗ];ѻTd/qK!eR +D+/F6@g!"Qurtˉ^94\(p(KMd(*1cj4Y5xEmJ +: t&c[\$*q@czHe&˞ k +endstream +endobj +462 0 obj +<< +/BaseFont /GXUZVR+LuxiMono-Bold +/FontDescriptor 463 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 600 +/CIDSystemInfo 466 0 R +/Subtype /CIDFontType2 +>> +endobj +463 0 obj +<< +/Type /FontDescriptor +/FontName /GXUZVR+LuxiMono-Bold +/FontBBox [ 0 -210 713 1012 ] +/Flags 65568 +/Ascent 1012 +/CapHeight 1012 +/Descent -210 +/ItalicAngle 0 +/StemV 106 +/CIDSet 464 0 R +/FontFile2 465 0 R +>> +endobj +464 0 obj +<< +/Filter /FlateDecode +/Length 22 +>> +stream + cޝJ{ +endstream +endobj +465 0 obj +<< +/Filter /FlateDecode +/Length 6358 +>> +stream +˽p'Z4лXg:E,‡Ãq ,&\p5.-Q k'm!3Q@0]hb ǪūEb6_PuɆVRĤʼnYN@<; ̅0Q=p}|Ae+},b- g'Idj.ZJr7$ڂH7CV@S +ҾYWkk!k+wh,#'4IP"*,M8]\-GK p|V%@E8`fC?N:0^ϳ/P(~ixCmN+Ҩ1E|jҜ~9NS]u (pYفB`@?,9;7E 4*9|HNn0˳76\핲=lFJ% +CW ([nBw痵B 6q`8di;&c%d҅OG ӫ ]:(a `&X< )gLeI-5R%W82&͗=Lu4)c]#3T]Q  *#ǦoU*_#?Q2o@0U.وPx>JG䔃Nv%w=>.ɑ3rGhn?DW#v4jG͓ 1:X\ـzR|~q{=qR9;'SbmQ ܂*_J-.,?g{V 靉:'bMxy"2z:y!/~L]M6eSG~fTslN߇LH9L>(!n-߃$Ϡ3Q$k2cXc ։w/Pe暼nݼjqwuNJ![CΑhJS7{ ל$-ذg"y H'x9^d~D*@rf:$8{QbNd+sɤ[ +[%*SRd|)8/ +xTaƋ,bR>B9: g19#+)VblGĻN<~c!F[z@1?xwP^} j=#= Wz%6{X a`B~Oq}*4/ڶeh$"#qAXW'v:R?qށ`B)1E]S ; ye!|ǥ(bcs,x?2OTU`w&wfZ{*^w;x 0Rz=^s`.@*pnI1oxߟ k>jsܚ0F@VQe GI0[ RKR_/Rb4t1 G U'pn0%C2̢l! ICXgҁPL ";|ϺQŔr!{GCǴ\}u2$q~Q?d!Q}#ˋːp6^"'*+ͮi#:d~o9\lCsDs.rP]O}OPn_'6tEI"/^1*^h%ߣJD^FB܆KȭX:AP&G-jTv8V.i1Ub1jݞW7j8RoQƄ7?RuRj)p)]#zY @GL]+eIIB\ʟȐ[r|T:r|~&*X޸z(F3[-7ʽ]#h[h~{///#o-p /UP >܇￷tKu4`y_HupCV8R(GF}Ŏ8#'_r,ϒ\A](Sfii軇@+*ݷ)* <5Ի/Uq 2WCzm>p#=fw)pƆFP$*F]7.$yVs8 n`p^tU?EGHʩ:;qp:u]JRQ:x9(1}EPI(9Kl.%|ѝ0\E+KKiL`82/ilnnv&lc;? +HQ{BDaY =8 %6{  T&NE +# D vF,%}+AVCUIvSRg]>0tKk0u{8b PPFH*-$b?[jt)#,{do, ͦm=M$XbF#Ձ wTeS75w +Y4"Gw.PrE4"Ŏ,aexm.';O䶆x""lh $^M˶ Te2ϓaM=+\th݀Ɔ ԌɄ1E{00ػ2xNچqȺб#. #OX3q., ~Q^N< +γ;HM+(?#Ko ͑V50ɴ"ۖpvh+qw;IVNi"…uU^+˽9&9P3jXӴU>L*Q 8< [' {hʩsO ȽN0;'"68#׼F7U2* w{OG[tvQF ɑɮ\2M^/5~6$6eJ\u-_T`>4b2E6)+|+o[*f쿃e8 TG%=e oVR8='Ho=E}-QOI.%#r-#4 AnYvˠ=bw+ZRr=v:!>>nw#@_Z?_ԈN@rMiҞOj}_4; 솕1wΛo!J Sd䐂n@hk(_u^a٨:T0P Ɣ;hDgd|BR`vI_d}9ccӦ +/\Q{KBb: 4Bb(w<dAjL~zmGi+0]3{;Yn5#Afӣ7V$$c.D\ZcfyhhE,!,:yBY%u)%su:}="R&kkW7XM-2V,Sqť]oήsxPm?ׂR;z?ScVHZ+W ^i#!҈eTx{i]fM0`i*\j1o3X +>~a&{3 f5׏X=#_&ne{+Ի:pͪ>[>|( %4,-WC(oc 1zDqǒ:B,EO?̓NMeVod;w=/0WN-<HР4Z80ڛ?Ʃ0/:AXME`|X^qg}`~ݎ? NwFit ʅ@׼4FZʬi'ǻGϟ-Av + tV:|&u>46ţ/ Sˊd4FKGhyڴ:D, a; 1LPpŖHi|d\ܹ0ZI,\ճGV ܇!~ 61QC7EPA,6{k#5.oUV ^|Т3Қnۂi)gΝg1:d暇,~7>޹xٍ{`rAy`כ ?ˣ h^|MJN?$* 5Ȑs>S*)OIyǮj[uVkY@ğtG+؆GqdT?8zF!^f4@HLn +Xka,W<)qH~mB[J;gq +2$M:/XLN1ٱ̧D' jg=W^[C>7k<ܷ7 BhTIea_*ܻoJeSE"|y/0Eo,tdIhpRx%X +I ث^u3_8ItR$xFt%jSH"kI]SG历x CiA1mVW1@].+ɡH,KW@_o?Y[dyEL g8?L Q;i.IU5AV(t)=L+v|{Gn@qڸŸPB93ÊAۊ+g0Kkg*# +Z9Qrcfs?:AǬ2e.cYmpi|ZN8>O4> 0RP9oPt ;Z(ĥ@b xM" %(.&ty={UO<_&WJPe],{2X*TkL-U]'V$1= &5鍤 +Rd P;ʸBo lVT8 /ZTjʴƘ6嘨Qe%vbȆRiqgDɜgP46x_<\TuF0|m_XyUVSA7Q{lss63l#\m\mۂc7ѩ.-(I-ĤG9xU Wf˺82ZK85Lyr@jgzU4M0M`(Rf-;!5lX6@׃>y{  X"aE"rj%6EE<hM},M#+|(%Z]w7(;s)"dZXt~x(# ֆ]9}x[i<+A.g_.O%Z WQn!r÷VL*)0JR]aľnkVh۷Xy~:+ċ=T j?wDt2krk?I)K/ūEbyӁ4xSOkW~|qƴL }Ǔ^>jFj#EqDxJ}aËb͋ҒA?9So'VP;S\pОIJ* mO^M"tABxB#wx9 wċ췀t%}A Wy.yM ;wB߄m:|% #;sAiy "@Ze*nGja&ޯU7>Yy*ۮF +endstream +endobj +466 0 obj +<< +/Registry <6423b185f5> +/Ordering <6c23bb89e4611726> +/Supplement 0 +>> +endobj +467 0 obj +<< +/Filter /FlateDecode +/Length 3297 +>> +stream +DH;iJOⰶdH. horH#Ɏؽ>}\Y=L)^nŏ#Q7{ܘc5A?c u5Ɇ_X2+>}d +{@.F8(?rn n)TBG4~4`Ƽ2b:u҈@&O2**ғ3JG3aaªWCWQۡzA𴫂$ E2 A+o7y$4ܐ0d԰KP2:Yv숞B@3.} 0 Zя֮ˣ %BVE}1x@AF3Ad/U*']zњ`j{n9l-u(D+LItjf±G jlJ fu爅2ZK//5vD웪e8 hHg->G6_2`RӻxZ'(ఇ=`OpTqz!X? cV {DPc9擟 %WGjj]CcT>I^^I*52:s";LEDc +pY&20nZsgSָ,_QN{{]n\/zK/UYӻ#ڵY#ܾ'W$-XZ̰v6o0C1kk2d}rw/%.*lQ{Nc 4Ouyoy?E MqYWW(E@ثjd'_NrQo#bt?8]Р0N7l'{cEiz3?=d~$ +A@ET" rL\9Enּ͇UM:JDl/"DJl+g *[Vb*ϧ4aܠ{/?$/|ao&0q>?2y8qGVV^+eI\&ji .wb8=^?E36 +,=0q2LJاe)jj.̶ybtˬ2MI| ?}s>e +aT;eHvP"O |SXkYtN< ;g)".WHP#_WN)NѾKMp54_Dp'PNơd7K#jSͳWoqLj;V +vSd{"O?sʊ=~1K6Nw]ؿްIz?2 /1bIJKmCr^PVð㊛'O|_/&y)@M-GY<9y'*UK!RRY&r%N;tݮ<8D~PFS-sc ۰kf:zbn +CF&x'-plFr_8 +wPl(#˸"#rJw&)ٙ~ K3Nw b {fGu(BΟm3&U/`"J!&j۝ҫ;Msez2R-9IZ8TXǑjh<"ǡJ'30Kx!&ݨMvvbW%D` EjDayCe2:*Cۆ  SW<V?I?/[BӊU|xG{V-i + +;RrO4SAI])35Rfa (B֠V, "IzAqRp,ۘw*N'Q2Xi '3jj!fPȩ|䏣u-KS j f PQ$^h98Fu y=UդmK۞6CC|s- vBM8 Xo4,QTboH_zdW_D1q}e:0g!r[v\kkб֫ba޳zϗB_ogLd;7o=tڂ +JV-H7:X+H P&Pdo:jpv5 Ktbiajp?MIK/(L +xh +endstream +endobj +468 0 obj +<< +/R7 305 0 R +>> +endobj +469 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +470 0 obj +<< +/BaseFont /ASAHIA+LuxiMono-Oblique +/ToUnicode 471 0 R +/Type /Font +/Encoding /Identity-H +/DescendantFonts [ 472 0 R ] +/Subtype /Type0 +>> +endobj +471 0 obj +<< +/Filter /FlateDecode +/Length 563 +>> +stream +)&p 𖙨M͛BHz_it%G!wP)\ ؤ!'6 tm9d>)z5ho@ŗ|qx!{L0d0TMq.+ M<[z6M"e@pg`^ů7 +?V µjCCETāX{n"D%i4~ ++yZ4Nc |Αhw1E?՜; l~OV(t/|BgS@EÕ>wlw|9nhsdkعeڸ{uZ $.tz6!p- hB2wZ;U䵡tbX3~Bm TYNjfex5-`##ZQbF"Dkիƹu 'y+eHSC'?,UjР `.(nTYW\An ݄[+ FɁ~JiQB:I<\~)Dдܒk'нI`' _5- +endstream +endobj +472 0 obj +<< +/BaseFont /ASAHIA+LuxiMono-Oblique +/FontDescriptor 473 0 R +/Type /Font +/CIDToGIDMap /Identity +/DW 600 +/CIDSystemInfo 476 0 R +/Subtype /CIDFontType2 +>> +endobj +473 0 obj +<< +/Type /FontDescriptor +/FontName /ASAHIA+LuxiMono-Oblique +/FontBBox [ -14 -210 757 992 ] +/Flags 65568 +/Ascent 992 +/CapHeight 992 +/Descent -210 +/ItalicAngle 0 +/StemV 113 +/CIDSet 474 0 R +/FontFile2 475 0 R +>> +endobj +474 0 obj +<< +/Filter /FlateDecode +/Length 22 +>> +stream +zJꉾX,}[*u +endstream +endobj +475 0 obj +<< +/Filter /FlateDecode +/Length 8518 +>> +stream +A̶ٓ%bU)vKLT3 Ya0);xIv3P'cV:~7Y,?{8: +7#-\9z?RRt%Fr}Y>ʂ‡\=Ϸ:}\HŷNjF! "V`whZWSkf)U>t: +9(Q>z.E<cC? {gԺ91V% iUJMem+ii P5v mnHWjg2]ᒧˏ.D/ GV?x҂$-wd>SNu~]åOiO[*) gu3\"w&f|ggg?}̲\ TOO*_ Pb;x~fMNc)m]{q~wJ]"nkT"l${!pO^#vovb Bhc?øgHoRuwe2Zd ia7or&1ֲ*'p̩ VޘSAWw@ѻs!`::^kLw\ [o8gQm)gCQ[X~[gy9KH08]2<h=0N5L`{AC6T\EeDoxjy;L515~;R|yʭnd ++T~W2@$ (jxmh/H5x=fJnD1cIBſЗiIcUy5VGUdX~p-qY"je&JwGmDރhsN27.͔\I_rꇗN{7lϕ5`LNjNefw9y`noaV+-{GjEpr=yXz(+$|:Ax(*T~,JTYTR b aP8.3v~K Bn8 \onnޏH= +%g2uWSKn?E{c%-}v&o8x`abgӆ?4hǠ #Z mSu }.dJxs70#*#URZ-P$@o^MTiM/e6ϯ@@z4ߜ՜bm̭{I)0Ȟ?rZԼNJ1h DN10Le9/co~7b@r +(_?5&4oM +It~v29GۼrMHS +d@!%b1ҧ~Gp[H2EyPSŔ 7$޼`FE%:R~ӛͶ W +AC6yfG4D$)-7No2r~"Rc1#ǩ(*8a9 wsiơ|gp(]ނTOxq%֬-*Osq1382 .-QX_3S5Q#ݸ7z*ޣ[ŮF"X! QX%~%$.sAT8scprsTGWS"%1t#19E;\XP&l଎Xxa ]Dhg:-wK8%u"эҌmQi{ʀ1~ v9e3;w3:\)J +PVLlsd+q/%,jܑ{8LZMHl]ɤFo:#H(l#~k=@T}d,U/3E< _9pOm:l8-w!XHay 0UFP3 ={~!4jTI4wWafgRi!n E42diRt,۹RAS,zu-)h WQCYr7 Q~5/ZQ~rv)^cxcN'ʹEYhkX! +`x)uR6-DRbTXkԻ,*eǮӠtt.QE +\'g }#6q>y o]+<C½@oԗX`Yg(WHӂbTi#B;"6=*~X+G~^nƈ5YlZqBk!h5r*2R!-+_/(_댔Ζ#hDD"(9+P`ٱ\~6c7p +_9c+ U>ylfrH]#?q 2l"ᛆHͩj,!oe۪РH0qM ֆ]dV $\i<5yНr&uFGH6럁+ K&%do +n_jgܨbE^4 +{@dYJKA]KHDqc3jԄ)x8j@wD &֋|WhgO8CH +dCr%eę]˯5zYc\_! 3֣ǥm30qsb=zFe np0Yj謱R;< Qs/%1ٳ;O\,\g]xVP$) !'`a`(qT5Q2q(IUvCeQޥ5UvKF['Ǥ)SŹ4tKQ +nKxgKXn,gĵԟ37@{zdlӢZhՄx7{<4ȶ3wł)aM~Z{ͥVu=P%< +Pre)ج99JkIПgHjͪoF=@K0U}ԅ@xT96T.shVh7e̿VΩ} o@@ 59zD]߉T0n"g Vнr)[Bz\YV\B"ߧ'l} 9.кAf` y72ZD{>;Se)k) N'x1s*X&.f% +N$≿T-dd)'尌ӝWj0Af'h44Y&6pB-Au;LǴS:ࡖc^c"i5JשbM `J ٻtWàMXh SԇqdSs jL7؟oӒ´mWe:H3I()JxNmPȁٟ "ȆnCiirX~6w|\|$Д0GE&] ~l IHYY$Zaʬ.(w/)OK'=lںº :cI,k0 #&rcy*Y1Y-ĉUOf7o:-6o6`L͹~f)ψ}P o\nB]{0vX.̃!T=򾕔"翸8jU_2[_S퍹` +`C0h5"9fr2z%J0E 29a*Nl04YϨwټ}(AS.l>ڝksQZksyӪfTBU1KG0+gV_3s"5oi-2'Յ0!l#T!?{&V]w:j;Ɵ e5a_h)JٍWx#R#$P?VԹ͖ځ{hA)auLmc$ʙL=4܉|"ݐrj%@Gg=U# mk\!U߻mW()Qd}WV7Ocw +SS\XʝL(bDDos-!ocZ<㏲C  Ufuq[])'2+k>cp1=|%f|~` +9`\0gÿFk5eyY)QTaSWBŗ~ 4ߺ%j +FeYڵu@4g#El?Ъvl fŪfXB5c§Hfs+ ތמ!یﺱh /bs}$aN\oT&n'2B4 j.Fƭ>]8)[WU-V+M*C&aX5l 'm[S U]S fWTF[w(VCrE JL*uNe)6] @@`jܖix=7͂+̦ݺH7<RG_X<,O?Z2Χ_,* N.lǥF9K +1ɢVo\@|b>d__6cK.D +hc93yi[oߥ~I7rb(&AtļX~s@e5(Wr;Ap"8/ ^jO&& +Œ<{ }U,Eb +ӂze!4>E`K}rYs*Ԏ$}Zjn:Vvb~n'{6-:ݠ +Ax29]uvy~D"nؑS2E6BW+Msu\RzqV}W-3w{nTfN>I@R3To|~{!ZbBTe+!:AK&uJ1 >h݃q؛)6T+H{CFx jx0t$;Mb+WfB/t~ أ=J`\N RBi@$'b99X FAzoAIfcC0f$١J6B$PpCM?y{r "(5DʠK14Ϝ Z Gg,L$ee814n̝L@#U"g*Ÿ^pdb@O\HɰE_Ybe _Öo'TJ/[^$&B#eЈde i1cQ]dQ[(y#&Tq 13m+!4PMg'*5_߉C^Fѯg3ܩ@w_*jjɁ9^s`wQyEVw(F0hMYt67R \A̗## =YPHeuI}ߜi̇27&}ON\?=S +@8 {Xhԃ}AI?eyuYWO5^vԠ2ݴ`:~4o*%T>"+x#^ ɐܱ~TT(;wN2~71S&=扉Q?ǯ3TBT\ Tv4;s+t&v.u +>_>ɘ i+BW{0?Ύ%ZCD*VM%T^kip§c$OKN~^SG #"=8G,z@X+;б㵺 q %i&P]<$Yvg^c9*22yk78iƢ(ݡL{4hޏxS_5~Ъ{8p.W{HuP= ? GL] 4hw?T].;/7Q1/Daa&8vV,3PaZ*yД|Jlטvɔ:GߊqČP 8Ndх/uKU`Kf_Q˗mƀV,ݓ!D |/!&FH&$X~'4+0a&o!\PPP}GنE>cΉ$%`&++ښ{ @n@慡NtVaSdnU^ܥ-gUᲳ)zo~Ls_|74.|S3s"\@ӐԘ>ڋï`cG nh!p>ۡ2%)ISʔfRbD_[ϗ>V!H)tMZ#`pzjwLoZ&tj8X`5])Y0wE +h2;Ǝqw QnX([808) {bKUEvD)a[L82?!ov$;t;9H]vA-Y?|o*bϲ/S]^:wz|. ]z}+vѯR ໫R(#Yfg Nk^yyسN.mkhW`vo9QfI ç&喋RW>LpauW PRL^2Y*3JYN Y<@e-kQ +6;~P+Ղ5#k#PyQ^ދ^ ;4[>|;Yا@JUɿ5pT(arW;$%Xj4GO{hn|3@UYM`NBuN_JcD@HyyQrShH/hU^s4:q\P}&N9fʣ2UG*QʤN> +?ongpw,Uh6ѤԱz*0N^j"evP NeoӾZ +Edz)c!=C<'%"{Ra.ELv[?L&t2jGh8$3יԎMlp5%8jLS3{}MDbti:9j{t$C|23e'^h[o E{Yo$eEO MMVHyVJ,D%^ik'4Jq)zT(IN ].ԉK/xU%|&@ [C4yHkD;YEC1 +q  s_,"#́UtQ9YJv#[`Hn,#x"OL7;KS7: L{# )AS`EFc)˺'{fB'p7@L!sY6=ys9s}b2[Jk~%RL2!vEsoi$r) +k^'Hi\g#~F+! +K1+Qlgc X ҢQ˘8*ԥ :.n"9˖cduH,H}?%rHB) f.R +endstream +endobj +476 0 obj +<< +/Registry <86ac5754bf> +/Ordering <8eac5d58aed0bc5d> +/Supplement 0 +>> +endobj +477 0 obj +<< +/Filter /FlateDecode +/Length 3315 +>> +stream +hʀiąܴ H~Ev |F̓^ 5,*j}s& N^;;!r]zm*1*'=}OrDi)5U wX܈b\/^.@'}zjI^M癋{PoޚGo.-9§%a1<,5s%3z{f)?8ps僵VȻ5pra~g jLMg]8T!3ogb*(&.Bv;͠#. +,^Mȩ5zX^c^HKH"艰^G:<(a;3ic6*Cq$Ō rR7ru` 9膤Vx>`eτ_$y o zrN#LiK(pg{vu*yvtD@$,a*e. ʓmrI!Lvzs晉9ul-a\F#cvFxjPt-c>dpz4Ju-:}jW*"#-_S)λDZ> +wVu.<:Ut[/#d=k?s݌j#V{R""fu1X9N<:DЮzhbn -[ݍhjbຖb9z 5ŧrԵR3)?GU=~ -;s8\IZkV21pbe t+0\+VIDDڣAr˦M.1p~9!%F"ʈs +bBkZ2 +dm +C_)O{7A][RiYLԸR_䄓2xD5MHv½ޱ+= T=5(^`\l-h2 ^{|u2 ^="l ` +qVS9(*/~RMCNK֠2;M"*0*[Ӕ$ ]k:fN:7 ->-pҐzZ>2o@ ~hk(-:BӌԂ< :qRr'ȡ|1aX( 3 eluh` +gT +RgH!4"] "4A`yFi5$ kOUL(Em*Qu#A)Ħ1͹tAˢQC% T@bM WK +J +QLvRx8624>̜o©Ty3<מ*~GϹ } A >cnIܥ=:֤?jT@{?"4;툇2|Mř0u^0-3%@|ժҨ F&Λ5Y.ڊ}0j'Ma5+f.ǭ[eRfckjk{J&rHYgܿ-ꑌ؏(ږV68<?A]/b] tv1(Jeȭg$;eJHr8FȆ% \m0BE21k +t'k43œ6aLOH\+_Sx]-=#F/6VZ7 'FU~}?ۇ[T*bIw!yw3=ZŐ9D^ڪMy_^pݺbwJ,'b'ăS=>'@ft ]r^xkڕZgKz帹SZ!}.9̣ΙS9uwkٕMY yRj&5Í^RO8Ն ²VZճ;%g2gЩ|RMpR?DFeLׅQz7@@q>b~qDG7u,ZA|s T@%=]#TQ{٨yL_w WF)ǡA*YL6 +P` i+P=o4s&|3 +_KʌsY{Hb0W7~@kFv/#`pCJւRa3*2{dpLYɸnSZk'RvtMޚX"Anhch0<5Q ۞^\rNz"Ljѕor˪D[7{[fwsиy9^ɨժﰧ+Q!jv5E +=3fMG#dq'tZ*3c3tJX2<:5GQiK10<B$a l)-@ž8^g1F*`)^߂z:Q@=0j(xsI T>] ~r ^LJbG7cˁ"jT"_(HMZvlt`߳nյ|2w %$10v[xbR "63 f;H)_$uц3 +endstream +endobj +478 0 obj +<< +/R7 305 0 R +>> +endobj +479 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +480 0 obj +<< +/Filter /FlateDecode +/Length 3196 +>> +stream +Gxc!7Do/5X2X$77G\k)ݙ& j<Ӎm$/AiWض2EADsꧮ9soę(#*D]"GxB cGC$|th1:xòTC9ӟ/DS9R0pTARI`#m:\piII #hxKRkԷ"\xƻ|eA֔1ehznrT ~:\ɩ }G*atnI9ӛB^Ծ&0?s + v +avUIw!BEvCq) * #VgW~(QΣ<(k-3O*O\Shr;!wkM<4FKkOenDgVlcI[ÃSX +@+`U&(:FU]gNqݔQ_S98^l {&:FLۘ,F+@Ѧc0KtA/u<>C_yuE.+n>Jr TrP¨8݀J0MV[+v;d\{ +E;+TCqe4m }蘾DMu"Kn|dN˩y.i⟓G{k1#E%EM5 !Nt #'#[S0EM!H.f#CU7`L$/x&MT+5LH`PD0K6 įD"(v>O%m bANOvk,U&XRN;ڈ$zEhz{/d] @t JӤqfA1  P,K +N&#(g8>V2 +d@htMׇ\XoU\oȔS+9 P@SR_,?Ǖt926Fw`CXҺD#Y"{Q/ eR{(EFB,Q6O+?.>i,Agh#`q+2@_׶ 7|/[%m;$@̡oX M5K5wtT6ۻHgh U,Hd$ZI`!Ҧ|*.e=woY +G:$K lϨ/7w 1FyNOICu䏬थG#I0|0q[_FG7R6ߴ@YKժ˶,pBd6ET~Xn:_$#>|n!C*j/bGYBxPy^fF4J>sޞ T%+pձ +endstream +endobj +481 0 obj +<< +/R7 305 0 R +>> +endobj +482 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +483 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 115.137 452.182 118.203 460.289 ] +/Border [ 0 0 0 ] +/Dest [ 22 0 R /XYZ 75.52 62.68 null ] +/Subtype /Link +>> +endobj +484 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 48.774 234.257 58.908 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <58f6aab858b1cc85c3324e3ef85452d72129b7cdbb7a1f749f619d8de653f6fdd079a34467f0f18d6d0d0d95f9170c15c9f734e1f39f7064eb3f1c93fcf41de4b5ff5aa2cd1418ae0af3> +>> +/Subtype /Link +>> +endobj +485 0 obj +<< +/Filter /FlateDecode +/Length 3206 +>> +stream +1C*nǜ]u.'pُi_Vk ,}QlV߈yMĬ/:Π{KzhDZD/d_ OT}mV܉ @ 'p]LW&hWT(!Ro +\W^jDsbGPs gpD{SX ؊rsǢJQX ) TPLU6;A~6ZrbE1)ʅ\0uEZQyJFV#nd{cZߗ-BQ×no*03V+;ogRNl_GpZyЇ&IcxY(k샋%Ѩ5P(\\Hi |n`wʄFvGxf9\8{pM"&xAvVU[Hѝ=)"CmDnAB#iOpbқlG^h湪hr -׿(]~./UhB ~&Dg䚮'}X!)/z'#p z~q79.dl+YSq86=q)Q#=ut$ Z0T?fE5U?:rZ57s&8|9|},FBRc#' {-Q9x)Al'qp?_VL/NqCv, + r<瞓]s<\@NB}z6摁wc匤n"fѪj[,\N/'Q(@"cj8R<:%:_X} pQ%y +a C"vEcHv(p:Z1ƒ xBa6n)k!yG,j\9 u6O" 5e'+P]MB6 7XFSg^}VO@b2A3k*}?nEoN2äԠp[uXh!̺/bTr3}cҳcbZ#K9\51rfza2-H[cG9؁8Zs@tf.ztvP/0гS{gƛ3ݱ*^ˍdFU;te[!s-\x9 + 0h/Q|_S!hN%zzQU!}^@fT>=ΩQ?@xc_-e_[ u@i6DH_S5۬ k\gK8aUY`n[)?\r2BU(3cQ->_qڏ=YvH2;J '+FN!Zkf&gsG:;EZHRzf7b-S`Hvh?+Ӓ +)P̨%zͰ zYKA.OLOLښ4Wv;[ +"~ :2 ;2Y+@0IQ3Rƴjٯ,,.&aИ+Rlx5'A.\s3^']7Iy +gKVԣztZi?B$/|sXݠ][a~u)=@ 3|c?50! )nu BWm!wޮ] `bz7DqGfm1HD&[8vGϐ]P"R)f"X@ޓω?4>T,`)glי +d=w#b6`ow"D;ۺ~NbL<}i<0n4왇\AVxy9t(-PNs3,Ru- Obqv{jgl3#>"f_ڀlF래*^@V:/;{?JV*+xgٛ#f*pb&;./ zE67~~nR2a\J TG#GK+fg_y&\ 4硍0 + +9E. ܷ['-BW +endstream +endobj +486 0 obj +<< +/R7 305 0 R +>> +endobj +487 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +488 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 204.849 407.62 208.834 415.727 ] +/Border [ 0 0 0 ] +/Dest [ 23 0 R /XYZ 75.52 91.76 null ] +/Subtype /Link +>> +endobj +489 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 147.519 171.387 151.456 179.494 ] +/Border [ 0 0 0 ] +/Dest [ 23 0 R /XYZ 75.52 79.8 null ] +/Subtype /Link +>> +endobj +490 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 77.848 175.314 87.981 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +491 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 65.893 240.937 76.026 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <4c3ea87c4878fd934291611ac09fa842b8aeff26f765b5d00235e18732999a5768183394bd8c66e021be2883b31ce103cbaf6770a6dae27758a0> +>> +/Subtype /Link +>> +endobj +492 0 obj +<< +/Filter /FlateDecode +/Length 3259 +>> +stream +UWԤfOE\=1m9d',u{ 2IP(=O&82B<<Vֆl&S]k:T'5Z{KR@8po0_H*p;C % +6 7 ctvW'XH-բm%(#Z ;WDx՘4͛uGX'H,W +$- vg޷,d5TTZ"aFg@ZZu! !;y'TyErZOE@%rg1\좑M֡qRcY5؈ #]Wĸt&G`]_ϫ+Љ:ȇs^y"Cޝc)9u$v +oN=Տ"~Vy,1Bimbqa©+`tY(9rKΗ7ԦF {4 Nsrx_i̪kzR +~geдA- +&ȴ_4yȩpyۆtgY$̯guLuLKי)S7OE~f _ywԈ05QCynz*!4OG2B>̷\,&x?5>]Kc ؕilР&&zɲ44F|(qܽL`]6Kj~OH2aEӘKDr +}]WՋyyslVvMV_!kQaXZ[1amU] +2HM"ROE|o8mY'=5&wk2cӴ5I +pت]yCk/2PZgj|ؖ5zTyxLiΈeKAwܥF"?#'ה1f/I\Y'i8j]okε'sSA AO8b ^Z ٯ3kt|n:sT4KW̄aeX}b%T$d& i$Uro(VCG K@?XgA4\tUhNl1ĮGԂLKpaRϴ`SxLI̦B׋hW ɗ  +P]'!:Yq 󃸎v6#r(虁mԁ+)yV)ȓMq +=4;r7ŤtP`D:l-pl3eG4ióBJ?_@h6Ө>z8sɡbnWPBNs.en,Jzթ$ÒNJ0zX;?m?Ij;Ms+` 'ZEdͰD p& Cd5nD=yBfR2T%!Q#q0 +lIw%@[vhᚽw{,U}u$j.~7 avĢ5b=*=X畩/ۮrYlqTK#lo٣bS7vڔfIa# <:.N-;עqDc6Pۅ +Ԏx3}SSs0F8 q"kt9)O$awY!d5E#B +sF ?eKoٴlh}1Vjw8A 1}]!U_C5iEvE#DFyOT{yVE' =$˜%ۢ)ns!fرf;9`x|F-['Ӷ5K5[w"kgG9 %q*ٮ7ttDy +趪ǿ-}[: ݊ZPU9o淃FT6wtNgJVt9I޵6EkLF]rkُ5lp,+=wGslV/lGh;rP`-."5!7Uigo&\_˫m#Ab22j݆}ednֵYBȴ|gm)=k/1SRVTe +xA@8s.8ȃ}?v6khU!٪nq`ƚA|i#m%1QzyK$##r/7O8xnN>W8N ,IF$DhES~4|P1w[yR'9~RۚiD+=xf΃iɗJN!u\Ci$.uQo¡La#oc~AE::^& _%2 wZnC +a癘:L"{[mgX\uHrή +endstream +endobj +493 0 obj +<< +/R7 305 0 R +>> +endobj +494 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +495 0 obj +<< +/Filter /FlateDecode +/Length 3283 +>> +stream +XۮOw%}͕B$k@'Tgȼcw 4M  27_M}_yXe |Y/-ލj 4!P|Rj"SdHZ.g,d=eҒXa2`ᱏ:Kr7MGrz0O[M#AKd¡'Jv` }ByW4c,sܠYUܮ#7'~$+;qWSDĖ;dCٽg5ߺr\f/ 58]4޶B +5qqTZ!nl!5>6=>j^^k:4-~|qܠ`y~b3ӌ+^$Ƥ${;߳ +$Vc 57IHەu=1̪y-gHbݨ&FG_꺙ߣGM<_[b`KVNҺ4صGַTκ')U#hF16Hq NglҤ=fO~6{A'@\w +Go*7. oPK˅(Yڱdk +3Xk]Ry/w@q3y!&A*3Bw[ɫO8ORr5iQy3X+ +?|x{sB*yZȽ;WT8ȡ +[`HL%D;4&L 2) ofPƶsD"3σ!1taM͟G?%3>rԡ#u0!S Xz"#^Ms.ޛo:P+H4kԆq\\q֖*t/ՠ$`rAڜ4L\dr-5X2} 5n$|;x-~ +)T W$T !M} dSs {VI rrȖeK9zCi-|@o~1[>R WcFt PƊXb~)#$a9<$*/Y' >Tٕ14(ʔ9˱`).LY xV8-ٻA]Ih}P2ybDnYDӇl@Eњ؟Wy!O5jLeII~I:3ŝVsw݁[z4S faYe w Aٺ|^oHivE2,i֦:Hym41%#h#.\5j;N~ +t66n <:Q,(N8tUڻ|S3 8.[B.+f' t3XO k| J?Fa%g7+faE WFغ1T[s Uy5VhD8W#v eد1Xm@DQC!hq#aZjǰe:8Ι$ijWcVƁ2NP(F>zenwn_8Ĵg'u`'agK}V"SM9<ޒ!>"e<byGuD{MsomW ?(?8u'ÿn·{l漨;As$( Qxxc/Xufx{䒅l7L8ugT2Ui u) s+uڏ/걻-hBz+z=/ Np2FxTZX)!n` #.iZQYyLOtȶ)|;՟WץӂCyOph9"L#W#= 'SNteќi~[4^śp@fh!;j~85<\Ġ֣TrEA×&'U9{ż%28SNV%mYe_Eh lspЗ5/z Kp>;%Y|FKe^Yfu |r = GD.3<M% 5).馝2\\1$.uB( ;!*3]r.s3QDZL4i +}Fhԍ~44(IZԾaoxAU`]|hEIGrpoܶ碣EzӕB R0gx)9"ӭAXO _$-ϧ=S= \#Nh Xm]PBE3PК=}5\`TS㊼u#tߎ2|`'-VP@u~H;{ѻ]Lu;_Tl +ݷ#yLhkdlJvIK!PY)#zFuMOzk +Rs eRŔg@J +r g;S<V6cz<.5?d;2qB@ݫjCuRW!J [>T`*i +Qz>ל.zC("(Bں';ċ)z7Ի+@r7 +d^LT +! cm,׉n!r'?xwOU17oZ8 +endstream +endobj +496 0 obj +<< +/R7 305 0 R +>> +endobj +497 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +498 0 obj +<< +/Filter /FlateDecode +/Length 3364 +>> +stream +PT%wҌuQ?c!9CKI4wWP5xž2N=6B >.f0m-;7%׼(r{bl+=@O4"bo94=˩`yee|b,w>h驹6SnںU~!ĺ)L=QPpoaZQ͂N5p^)ƅQkyXF'~gGaAǤZKx޻;_0&poUhp0GC{tMvzt b~'gfVE0e +W~u?eʀXdoVOC[)dGRQ¡oPF @?V%ơ vTMK#PyT$Us `PW&$@([1F&C45TlA$Q<4m:-&9f89:n֢yր:.6՘ٴX_j9_'@K0pkܽqaQnYn>:MϚf?ʵ7?eDbzIj%91G.gKϷh |'*m]Q-/¼N$A= bᙜAQz"[GZj[d|G;(OVprO&?@X>q̤Yiz.<Ȁ/kஹi3zJu P ްa>LJ|j 4aDk+OCڂ[}3H-1v+ +J`?Y3 +A阴 eKZ 6.w% ւ=/2ǂfB[UJSN^?Ymld#^YZwΫ8$Ϩ<(6V_f4 !8Q)"5Rcyb,ijɍ%?S129gP2 fBfS~Й2Nx.Vfܲ9̢s˩6v(BUjѺxQaJ 5xP q"<[ _Jԗ +;60r\I7pjƠfҝ(h^ ;U WtZkߣ5J<[b>'+xvkH('w` >o2W HC@#k-L4y/~W5ӝt[\PEs|ܥ%w^I.MiȠMA:X<w,')>a4RJbr304PijT#M\刂B(I +Ǎȳ%HۺbI}(ȷ#%&K{*ˇxQ*NJTu@<ÉqxPA' a(+ȁ>YiPسB> 5;Ob2J3VnBRBM?nާb8.dLt JD [Quh' +߉<9Zm^a^KzF8jLT&ub ٝ|p KИ;tf@-d<3*pxpqmnDpc82ΎG"z +n'/cg͹|xabiޒTfOM!Fr>^! d&gv5h:R>_$ǸxE:;67o[t'Or7g#Q._[o7"/6@ou^+SSpB +NSk8{Mk]aG DbP_S/)Ŕ DWjwTM;U8H=-3B Q +`N?UaE{3$O?eTzѹ}m4o +@qU!|4B%31]lBMD/I~¿u"p.&@'|P&A]pt!=2^`80_07 TܓK'PD C u_i W=Zp#6%8< e.[*\ S$~51K"QT5Ǽ)V<1z3d^rITX-t 2#/GMGDj{+&ɹ>) Ѽ31<(B:q'xZbpLDH8.፝qykp& K!{ѝ=Y@Ikmj-E]M\&dG+;-/{A%.N4vl_C8XW{AnVlC%q8I,^樗Y)At^3y;]SxSdiG:Q6QYoW1W6zw3SKRG^X=_RR,z׈)e\=TJ,zpe# ٴ'A[Zڞ[> +endobj +500 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +501 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 297.836 178.863 301.867 186.97 ] +/Border [ 0 0 0 ] +/Dest [ 26 0 R /XYZ 75.52 99.23 null ] +/Subtype /Link +>> +endobj +502 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 118.986 73.368 308.905 83.502 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +503 0 obj +<< +/Filter /FlateDecode +/Length 3420 +>> +stream +6MX=*ϟ!e1'BE6qd) 8h==YTE8j/Kps\=p)6niKUq0-;6ݚ5ԓ104,]%TK [<5{JJ5{)$2p3yAu-&NE;bь ^8Hw9l_V7$`i09@]:CQV[:7HֈXhR;'[]z_Cc + @MUN'r.Ah>SzGΩA"Yn7 +ikOE0ΆN4 +a3aHo. Ktinz ɟHq ߒmøޯc>iΖ߸ aaADnG6?'&xn7et?y@a8F, ~qo'/%s*ˣR3%)I:j9uS۔kgzy3^*6E;`Ik֚fJsp@b]=Ό|I2m.~辘4T^@|,g`q0FLoccU&wK[R8xFZd:寜<~1G~tcg? wo ԍ8U+!p1&쵳+ 1hXx=6@K}V,$^մbk>T͚VF.aF^H0/FUt<׿-5DIKXd\2x7]FAqݘʘ`qT;<70D68B:cHV'n~ӓVsywABJLnN&^;"ur^eoq.Ӳ'q/o"x"A٧`QU{< bOc J<(!d+o37#Cy5|QYؾdL,.JK_E@L`YDNтׁYQjQ{g3d 1x?G};pi,;y!u%L6;&>c6bRc"qcYq3MSl0E y7E[e>\ NR\'e#$6j~p6K?i=jH둑"\}~Q-ZWU:1Vc9O.>+O^"|[xEhΎ#r.+} k5xU98.xXE璼(W]vsphH S#6ҾjKԊ[8c + '^exoMcͻ_n~THpv*bƭXRţ!ң33"7%;L ~VQBϰt8v̧ 8m20Uwj]2ZF݀ +jP2= ^Ui=!x@zQoT38U0G[BCv\R2?=l)S;Z!1F#+Dqtp$>]i cYZ$ =g1<=3͚x~iz\sH3yv47+ptA:puۙ.jC`iiVMl趝 aP3(1^Hn^`_m$S+< N!.?*R\.@[؋IE7;q*m51d?T>S-JpE?^9eU4d@d":{*kxq؏Tة$;=$~/Yo,#u0m P^OЖځ8=볒הI>J}H>WSA6WZOm2Xܨ]3U[B9Øl~K,oYNP ,iXނSKjnDp2}_䦺m=₷vւY l'Z!k_wB#SXB}B|qyfիo فBԯGUf(0Ї& Ȝ%/ՖstdGj.J!~Y꼡+v38Qv؍0 +hBHn6lw'UӣgV0?K";ݺ{]\5/|$=$'dMV1XBARY|†`!'4ioEB n΅ڋ!A|@6y}g,<7L5)+2Vԥc<)Ŋ6jTw jW,w*qxB˝:R ")H +!E\V/i [r ArЯXݪnO,ڴ_):X@;`fZWv@4pE8(jP;svRZ`"' +endstream +endobj +504 0 obj +<< +/R7 305 0 R +>> +endobj +505 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +506 0 obj +<< +/Filter /FlateDecode +/Length 1614 +>> +stream +9xzPj]$?jHYP>O"*3?;Z1rx}IjA!<λHeDeGJ7/s3$+$d\d܈n#(@1Ȅ`hQW4+I5 C#tpli +$21v +Wǂ(Wcphr.ūΧ;V]Xk{ N7Wy+PS'6Cr+p =&xMfle *a;""}e*q":N#k(pvT^@&NzӫBǾn))͍q|ذ΄4Խ+/A:74R5O;@)N$m63!Zfy( AkWʼ'Q`^#=p?\p%3 Wp@X'j\xK.*|~<}uqp àW,-*p Cݍ$eWpA&b཯#`HO̯ MVT! uuOϗՉ!J6ɏ8?haV~q Bn$t xPk_0|Yg7F;!\\#+rD[ +!irխFt=6W,Txv&rWg9ǜ +!Wz *Vv2Ag\2i8'2_ͼ8wd i tfp"A [ g;\{esaٽʊJbk(ղdF[湛0,Ch2} +4oSɡ/kdqޝCKэ@"~s +Ȏ?S_ɡ\e)6FYӛsaپ ,VM4 C[ֳ?;oXiFx7$g6B[F'{S<݉ +endstream +endobj +507 0 obj +<< +/R7 305 0 R +>> +endobj +508 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +509 0 obj +<< +/Filter /FlateDecode +/Length 2771 +>> +stream +J-暈M]UI0N+ J]fc +pK7G0E-]oQs+ƗuM d}@` yWuecۧcgū<"}O+y"rĸwݮVڂTβ'NUg(2bn~@ÊU4 {d7ܥ1!hMUtAQ@̊E;CV|AW-{8@U48F:$DM龏iqQa(b;uXT[(SIדKR *һ&%.K #5tbvd?KA`K't7PH#I# g^T{G.hf̗EFtkD6'_eW"9.7= +l-}TkTG)~/3{VC?2J)pGs'p]],zv*SX#㙡lfiK%oJTƕl5/'FXs :qLl]nX`SQֺ{ +'%rA[jAv5{QNXd>4|CjHXEfi\*Aٿ ,5-GI$Kn$?[I bTYA7ء뤏12 Fna WخQgff=dfA&_O%/+kFЛΘT_ܕWF0i]_\Bs^jp:z:IP1 L/|:lCx7u Xkre~ ');&rYJ'Ag/#>qyh Wu#w@Lw0yJLќ#`r2ǛA1rV^y Lfj Y9a H)s XHQIg)=*e0 gcV'Bb(e!qxL[n S(.Zg7$W7uRx&6] } 6JcU[z f|2[5qjݟ4~%%"]'YVwɞ".n"! aSA!k*wxZpI)M}3¨\B`O(|)R.Q2-V~iW"vU J=M^?v, +=4<_̞Ngq8=͛fc"N8t\+=.Z~~U֜^2QtZϻ +/;o$Q#dn@ X}^쟺`6*F!% Fʴٖ2:#UP<^YެXC +l\ψtϷZpJEbrFjo ~a.W]ȤD\M-Ӽg#$,n)tO\7pzj]FFqJ_ +_G5j .tÐ_Kq^.z|yaeð'YzZLXXjۣdVǣo7$jxb,wp͚p09-G)<%؇XulV3q5;MפCD(PPbHqrq;M!\# ;6WZjIfI j6L61/41ecnpҸ_Sӏ$mmw⮼f*,J9?.L5xM oB$#nb O0[{רO!fڿjK'Ac?*YNTBp'\s2}ҡkYyʩf>l4HyQ}kqYD}mG;AjMl˂2O|?, -H A%m-$_xm#t$e2n*~Q9EF1ı|/ TD9I;V8bt/4ƉRsB]kpH1u;uawknF\d{gL )PA蜀}'TrGDyɪϰNWd +endstream +endobj +510 0 obj +<< +/R7 305 0 R +>> +endobj +511 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +512 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 183.074 178.769 186.844 186.876 ] +/Border [ 0 0 0 ] +/Dest [ 29 0 R /XYZ 75.52 82.97 null ] +/Subtype /Link +>> +endobj +513 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 69.056 257.028 79.19 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +514 0 obj +<< +/Filter /FlateDecode +/Length 2726 +>> +stream +|egdґ; ?*(50;n8K;To ftb +K9GZ\&a`=F c>:'M)&q,,]K2!` +?Qg`X ȃqo7C0}EN-W%!cԻ'$;ïh0lx +cvCzYF656?gzST`X~ + VjM8co9! +̊ %'Xo~bg6/# Dw=ʠ"Nz{]$=spͅ|x7P.ÈB4(HԷ\4q5: @c~kk7~3 _D5}g} k->OL9@"dg٧Kb4s&7Rď1G~x8eoW9Z "}qfY #Ji-p hYm4u GW䆽i$s7pB.4k Tj(~a `rRol]7Q߱|ᐾ#CqSgc2g^[0`%F5jF,'QiVA_g د(7JQ-t-bϰXְl5UT!+VIvԽ gK-MҊe$ײϤH<~u,Tx$x= 늦RNLI%UAr+|1/!|df*}P,NΊ gaNڼ^GŜ +647.ZjS\\b yڏ 2>I75圢x2!*byjk+5,䥭CQƻĸBy3 k\{]X*dihX = .݃,[ﶈ 3:ez?0OyR( "ߓF>TswOڍHSqϕ >g> n`IOb; Pӈ?A{LʜJ[ WæW D )s-ݴs QBrۆj뤵Day 8 gЋ-\8[ _uYbن© +bSkӕDBg HfZ`%ձ&侵@ !P HnYRS%}N<1 G$4lP>f[>M>M(B9iu. aL!sXƆǦfC:,@XeI9jďsJ{ţRdɎR33 ̲ HM hl-C /Yƽ%zU3)C%}?3q]X(Fbnzzq[6an]kH@J[pPk5>)/ΒUY~l<'#=0-`XAAGQ?" ?`}EϹ\Ww6[՗t{'7\ kOD ++ :~g0 P?V%ǐXG^KJԻSd'f[[KڿE*r, ғ ?36g6XXS 0{4Av8@)Y"J/pHy^HugkR ] ,ԣn$ dw2M{kN5 7[Y:5=}5Q#4?p\~ S@ˈm1eĵ#[NDh<>W86j,[<&)a3u5 5%L84\yu)Mcj_kݘ|BU 'U ?`>rY.ĐDdOu,jUr!]nLjhBZ=e@ޔJej)gn\x0lB}) u|JTy cT@3YeqA,Y0{͍bN/$:A(17[N^>)ĎIydRj滖x' 4 RIYq?ɹF'4`pXJYiӘgOiry?wq1Ӛ˼Ýϋ\ljzSACht\U}+G %|9to$a[lj8T2^KNCm K +endstream +endobj +515 0 obj +<< +/R7 305 0 R +>> +endobj +516 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +517 0 obj +<< +/Filter /FlateDecode +/Length 2696 +>> +stream +Րe{ FOO)! o(CvKk*3/ӝ%jZ O6CE]:tXZ1αVYr\E5,Aql[{*+4/TQCCuY!UTLk%sEp}6V|&tQ-ηEj0r,x]VJ@u8/{'y`Z)>UX-"kY iw~g`E?TzRĢ)4DE'67~藉d.kplhȤ)PjCQ|ᇌGo+pZX1v[`'+_L)M=E7a`"du-r0QoXVlDK.NX\cE/?6OP9[P\8ǖ&a{ k=,t%aCc!{T\.>srtzvmZXc,6 +rP,7+1,Q*]sk#= ` @5ov SjA0Is%` k}Ts `v*,מV5w܆0vf i/;ҷQ+Mi^dj ?ObJ=tm٠G~c 1.}e]Xµ^YᲿ (}Қ}z둂:pD|"zT90\`F9qI/f@ti]l1ߙUByl.|K%^WT`[#?BZ OvX[R hsPlhƞ F萂m&z4 ̍0_m@ +L=N٦Bȋ]eRȰC9 +_rM;: kӷ{+7\jgou'xϓ[Xܕ!+98)^2na-Lm;^`-> !y +t+|?\ImRFDުFK~|4!lP[Z$L;K#J"}u7喁Êt*̚ v!iDD]+ąfw}~u3RP/ȸ]3 49ͽ->eۗ5E]@LK8:%&dK0A @19%kcX**ʾʃa{/Ds iї{m%75FH 3N(uVG/ qꝡ=2*ŇƎ*F~"eܷ˳ؓF̂ΧͰ5y(L£az}`Pw0K|G X G~&7kpN#e}kHΈYHdg^:]5E 1 jB ^U&.D002Ȃ4?1v]T)07̸EL|UE7HE@_$K`'TB/n͢+NP FOeop)@%!gm6L\|^g^{짏bVu'N6;Tʍ;H8}Q+6KeC"ykM-cHOƴ[u@LMmD_ ?_NאD&%z#Q h8k]ElKSo=Ye8x$Q`$m8#M,P۳]A%'aq3L*+3b/Eީ,;~ #el]dX3BvnM-nͻnx*dP6ļ3W6n7P|so4__ +ܫjTf P|N?FƂZIgaAzp37D4 +vRZba9R6PKZPc~A(D&lص4#Hnr 3zɍx̚`Q) 8̾S#P=:~Q"zTsm웴~k|y8.<.Ʀwu%ѫbjߕ?I ƃ6%XQ/ġjp|/:;sD"MLHal 4?Ӌ^8r0#5m?86)tĞx9d;Q*K]Z싑RJBLz~$V 6]lt>~Iʮ%?M@*>gɦP=H 1+<3VlT!!X7qk65q{n.'+wwk:' W$@ZV~aCA6@; j.Mj?lubY"Q +endstream +endobj +518 0 obj +<< +/R7 305 0 R +>> +endobj +519 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +520 0 obj +<< +/Filter /FlateDecode +/Length 1459 +>> +stream +UpmH3S\J$%_%E4xX(\J3xN!,_r2GHPmoxM%I?#i!LBYIߋV=>!j#X[O'n#6wB݅ ԵObJj.cNQF>Fx5XIsˆRH<ǪW)BÒ(0t`Rr?$QwŹJg}C>͂w08rхشT'VaFsDl}RtU4rflXݞ}y83w-.ΈA;_ܐB<:b@OǑث7!WTSXIO1氝ÕY~HiR|fibsBp`pRͧ >KSaorl>jF`pUs5Y-$K&C^𭲉3YZ-I[]B 䤱JaV[S^qt.]s%CG1ǘ1 +'nzVN<|8;t1jU.4IkU})>M@~ `WhR 핬cm;&'UQmK4U)q75WaX h{7uLǭNT:9 +|[lJ%^][EQT4}8&sy./_낀Q0ҼΣVG<Azc?7l;{-N>45b k 60oOtQJеcJ}6vy{$OO~9)sZmPdXxܪp Ot^ +{Aʑ~Ps2iYJY"X*iv߹rU_@ݦݷŢ2RASYXZ:ݔXq렊XmJjQbwț9֏'#,+e\|x i4tOj|`#Č66h {wXzW-ϓ8水ϏϪͰIE1LIC%k ӗ\- Ahӝ\Gɹ ->A2L<;M#Bk)J^ȩ$猢. +endstream +endobj +521 0 obj +<< +/R7 305 0 R +>> +endobj +522 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +523 0 obj +<< +/Filter /FlateDecode +/Length 2891 +>> +stream +GNnUD9 K$ SG6ߓ eyu1v&17p Ţwysjٚ6]^&,8•?,ύT}e?_1qm$]aT[t:MM[:YUoXݿ%R=L}u}L #"S&/~kdv'ϼ6wd9dJС8ⅇsG3gEڐyBzϫ?9}iP5AP;߇srR}DUS;[yğJQ˘d!f<)KV .v(3C}ų‚D7zglmj>U,DZ9, +WQEL!~NiprNv0Q,}2oug:HIVPK> moi{@s\3} +1#T r-t̜/HLM"KL π^&v+ZYSdleΎK$1 .n^F6g_+ 8eHk2Y\Aenb(Pҝ>y_זM@PaVL#U;nm}.ɻ/Wa) ^ϴd +l#a#=}L +I_-_{Ws?j0 F66s۟_QY5xUm6*cﯲ5NA%ޛV~Pu)GhR&۪nJ~{,{)_|GSe\74~~0uAvVR׼VtB(z)'ش"Ơ`6U<{Oz~C4{ۛ(aXYWhQ߂̘XF|S*=͓1!D`)GsS5.G-Z"il?͝~NL'~R +ex͜/*g⯲T|T7P+GV!_<&\LmX.Fdk~=sY u& "+l. 'f`A(o_a,sO'EpwD H_QӳEtMN܁3M"Ȍ{uF81$+mkdAØĤYނ8JNa.ҎR\ԘΣ+,s#\縧L8`kpVBESc ̈65t}fxULPX6ZFb@kt39*)8ۑeG-J«K;WEQ :9 "zK%v_X[+ X) ۉ uzuO.7Vmȫځl!;ndaqmM/JTo>2aSR" #@DO '* (Y!û;2Bv,XU}ISGixD;` QVW9evo.3$6Eszd-?HY:+rVk ϙty-hGdCeWAFR h +endstream +endobj +524 0 obj +<< +/R7 305 0 R +>> +endobj +525 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +526 0 obj +<< +/Filter /FlateDecode +/Length 2624 +>> +stream +J^^Hv^,:4Z$(~E{ _w~h$w푰*fTsg R:d{W-{yknfKv F՝_Xk?Lhfŀ NtG]/joQ>`|IcDY̴i3'J| =KxQ7﯀*!R,BXA3d29oytzWNIms76v*eMx +!,V/m߭ƟG}6i4pH^ +t/u!΁xrض *E8Ìg4@q-boa"| }3D) bĹhdE1h!ëdW&#M4o!lb4Ao(୺AMTҪwGcŀƈfoxf`@U!|wNnWVyN{=et:0|7dlΫcl2/qBelVID: +a:K߃Gb轑C?t(ب:!~4W9~ +Z']7E NMp?Վ1}]u13}/B31vM|M}ij*^;/LKl~ n0*XOd(1_z%,WkQn8l4]vh+ϚWR-ͶajzMu\SY2k$./0-v;lCS(AMGHo%e=e MаzroH򏵬ۜd7%?^xT[pDl_ON7p  ;̍֠ӨF#)y|ۍq W mEkg[ґ ߮ a .1SeХNNKiٿ 8/ Γ;XBvt` GUnȸ ~G3[3Ae!i.sM\ԆGlCFDcmG eDh>xJXDkw|i;\$k7h $hw3ssjưuMPxZ_W7S3#5h#2FJ1w u|{nɖ@`(Ooq9xKλ`kV &Щ0LaD)=d˵BZlFCۍB;LJ^rJ `(yTckB1RL8>.]I(N5l9) lYn0.*kFM}t60<2&B:j5>_$SKts\\ݻt:j[b ԛSY]rYTґ&gW x6Qe"N<ƛg?: C9 +CP.LU.@Ƙ %z&$\MfN#Hej)_jEMuHZ3T24 P6"Fj?D17H<6͵[,npԶw4%l_iT% +M@IH[< =# 5dt2Âi,"a^ Z_En#'r6+N/MEG׀slp^uU~mLgo y_cб{>lxYIPO7j=+<nW=JN;/i`@ KRjYTbݿaJ>X*6j݌*a+ޱU~s^M[ȅ|I`~7R +!~l + ]JX[o&a 8:29? +شZğ%045U>r諸Ƭ!-h_ѡzI?Cn`<"o*Bz6bif21X-6aĈgQ6mG%hmQ[n.[^y+= lF->ZA1k4OX˹U-[ߚmTl-at$:;#(<)wLI].rv3ە-}mx|*-E2mH1A2wh,bc;/PdC~h('ϯî{'|]oz-G.,,vdg]yq +zNJ )%eJhZptGqf]U?2&F +endstream +endobj +527 0 obj +<< +/R7 305 0 R +>> +endobj +528 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +529 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 370.856 501.307 374.894 509.414 ] +/Border [ 0 0 0 ] +/Dest [ 34 0 R /XYZ 75.52 79.7 null ] +/Subtype /Link +>> +endobj +530 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 65.794 285.901 75.928 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +531 0 obj +<< +/Filter /FlateDecode +/Length 3174 +>> +stream + 7I_˭ʬÏ YS"9h:nZgT7IBSn_wu";{DV.y1CXqLHÞ|6A| +aoa+TsҩHl`/ɥ_Qێuo33-2K&OF6т%H #\4ͱ";V?,B)a궐w1g{HayuyM4dDX1F&Z͸)pȭCy&lia^EԈdt{ye%nf iMr=[;R&حɇX5=W+^˗YwEԜ5٥>O P!׶ eMl/k/\[',u06kgrH$`x-5WowlE?n{)}yNTX.fO!50^!ـ7 AcILNb={KO"5ˇpq`6}ޚoN Xh𴕺 o-lE W*#:t6ƺMZz'ά~AN(Fpf'+ByZ8Gsk% +:;ź)ރxcyCBm },:%Jy.i{# fn:u3 dz;<9 Lv?9 '[ؿo'AzO{.T_*dű{\ Kys2Ђf"+CUj_ +ZBDdo$TopJ#M8YMPYZÇ-&K@eФ1uOpռ@J9H۱ .T?ǭ/ZdGqqF ɬL-<( b؆_8񀇮2M٪Uuq7Lg.Jeit\h7uu0fi`B EkY"?/;;vZzH{HÞ0u:W83%ÇL×^_DA%[d% /!?id9ݹ%5 >9 /,TMcȌ-dR)T&o4?w +a%,LEt+=67p5aO1dz6S!_ldɸ_0Fɀ#DE t~iT _T^.F^ Df{GRe6Hm6LXBPЙ>wsu5ft::)o ]/!d#IIY(3u-a4bDv%oWC1X: :b }WSY9;{8ŒJA ؜[?|h0C 2F>Ev +^*~XX˺;ՠ%u$CuDNhhAمL6`hXip_0U2wHXŲbG8?} +v<誄  H_AXc@6Zō67tjJHhoN/es#H 2O8Ee=q~E3y٩WTlq\8E3h>|uCGl뷄/ښŖyf1O h;.:cx㹙kM,,|  zu١Jܲ·^ $L/jij-)q: eC&x%^b=.S-j(}8 >Oc呚"u/n}& "tÂ[wSPH%LE}C+LF PDS3.8DDPm&퀣UR+zA{t3edWK\MIYV/aHX =<(OHbN*̗.-EQ+<$59\ Wq1b֙޼* K? hRN{紦], P3|rW$Z8s{"u u"4,ߢX(Ĕea`6[BMBReB+xZklPPt) +ϓfA`h +';]7n?iKu}KayD:Îm~Tj~_y+޳FR_⠮ | oq5byg^#Hޞآf/5 b(d>Z +endstream +endobj +532 0 obj +<< +/R7 305 0 R +>> +endobj +533 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +534 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 275.943 410.902 279.528 419.009 ] +/Border [ 0 0 0 ] +/Dest [ 35 0 R /XYZ 75.52 66.75 null ] +/Subtype /Link +>> +endobj +535 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 52.839 188.975 62.973 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <51044692c4818b49feac05852690778e878b1067718858dbc8afbb43383d7611978d29ac492d7072867a577cf61dc6037b> +>> +/Subtype /Link +>> +endobj +536 0 obj +<< +/Filter /FlateDecode +/Length 3043 +>> +stream +8~(};\;YI +aq AVJ Tx@[4Y%/׮ǐSkiҐ=TøN⡿pcwSh2mmaDXo\5(8,"3bJ\R y]LX2{ |iw>zYJjR.̑ tԹqXU1{D&V^ xҵۛH}fT[IuoVLa 2s!&[d;7ꭺ/_75Dz }L`m'}-5n",)"wYQP:s^50?S^MKhײoyS:RW_(IY& ɗwlkX0Цaj=̛/!YWƪEⲳ@(rN2?&z4+1APNAزkֶwT,=" ۍLR!N|'uDс7/$Kܢ=egr_5$ kV3;{5dDl2rZDUʃ}/5thcdYϰc jB3LC7fv][yeQo{ jS&53F݋92aSZۣQ["|LdߍLta6t(ժv1 +ӊiɶ1ch64 +.ŌEq]j˸F[.KƾS~"1X,f^X0߽-(aUn X%&GؽQUyEp2(yS`JtxGh)[RD#qge% 0sA=P`@ٗpAEۘ-8/<0cN>=_(Eo[𻧛уh6ڌ~rGM<}rikzd 3SZ8 +N +d Ei'"e,D flT9Kg;Ѱ>-$NfXw7<~N.JꭕSxv^eN+kjZ"g`9vT@Y)B'1náv%]y t+'Qj|Ff>0"QrH- OO p)-DJO%4/Q&*[SѸF|/0ޣHL?Ȟc[Px.U͋z[*蘍P6N3q@O8 )|5D8ԥlsr;R¸.f,a/!5?W5Us*?y1p2$E,67= +YZ|K:'g2#o>6 r;3-rQ(zn7z7y['Erbt'뀩,ߋiiʤxN"nj`-dPd)L;pEAuW-XИLƁZ|pXYcȘPP:ػV0fn\NKKW$]u{I_D]꾦 ~0[ ߵT`A().>wc 2ҪlN?$j)SJk]sOΦt g#EN%#vz?4dNЏS,Q䯎NDOա|"z)14d(]Xf fEokrr5H㴑؏e<%SZk0tU|tXH_&wz ´g]y$iB #k!^H<5 gAZBimͩΟm[%ᮛg4sNA(D(o h(_=sC4^#f >={v[Vs~4j6P4XFM%3 r£ +C8iWl!ArK$H98r "9mB ^VT9ܿ })Hv^H黮bL]4;__7hmoMNcOAy>Qc;ElÇ.|YHa~pzsnF^s旣 ^O,^6e&InMs!!l]溶ӟS +endstream +endobj +537 0 obj +<< +/R7 305 0 R +>> +endobj +538 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +539 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 54 381.389 104.199 393.55 ] +/Border [ 0 0 0 ] +/Dest [ 76 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +540 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 127.589 381.389 177.961 393.55 ] +/Border [ 0 0 0 ] +/Dest [ 234 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +541 0 obj +<< +/Filter /FlateDecode +/Length 3076 +>> +stream +cjJ>r>*i*@tA]eX*P[&x`&{GdJP 67e| [4 [E0Qwx<b*'!*b>P{[·&G'p{hfr4Ď0$z)fL`~R˂/!ղ!*nn^8N/Jc\QMu}jU!Жͤ~HVN1g'ONǎa+ '(ʆphrPtװ۲w3;mC1[D $ɞ[+,J'Vt'VDVЍJqG"UݫQSuF0=)*P7F!?o [薹 ZNzaGo&fڹ%DLu[DU݆0K4}Xlԏe.z'f)nS5Pa=̢Pn7 )7.RܨTߚdE1oZ<'KQp28FZ֠7%> YJ[jSvJ@5%M*[h+{"oIngljMޛj_fY|m#8Ah8왳g™gg|bOb+Y!OHx9]%-i8E+eA\QP'DhU*\6CB '0bN8MD:P_wM$L^>OڶL׵<Xp~ f[5?S(ܫYBYtڅN(O7CXyJ|l*i>M<-]˺0 ٵ?Zhق}ڨ78$եIɦY;y^X`F/ȿ0m8v>f:|QN +$B8bycС]b3d)s$|Bsgl*]|Aب`nQDP~,wzӯ,=ʈg\69 !~rZven㩅t@Ykvc668.&qihzr'!`Խ] XvŘ4on@VjT24]+ |^ ĻdF&'Z +FGql$C mA^釯ߚck^N.c𽌐\RJmvM9Z;ܷK.) V;9y ƲE̬M <6[Z& c\jȌRy󻵓~J7g1RLK'gFSpRn&juI4 EdnG$x +s肇F>Om1m.]H# ,#7%AM;:ӂ/.G;*,㖌Fke7 'Wt%vԕH)FYB +Fܱ-ΜK0h' +a*( o.ʻ(g[oЅ+lTP=d _wH9L /hR +a16 ).7xѰ$$Mצ- ReRa8jw8qdV->L37DJ$~~v!Sȣ+Li]JaTdmA F1#j)Dt 7Y-o,(MB'6h4SŃp f Ê9_.ӭ&n.8IIFJlNQ\ 3^IDl@;#ĖՇq/R-\e;U0pô&#‰qI /[Ol H;Vͅ: +O'㤅 ap1F:JsYGer3MFUJ~m=]+f +ercjnwY$U_i-oTI;upY *(#k"dFg +sj T GWk@@Gl.oUuI _'rO)5,\VbROvtyF1,'GW4?`kt'3C8ꗅ#"9^f:hN z ljgjN xR8ℜk.6)3?9Z#(φ|x";:!2rTDk'KUk-c~}kQwpKxd@N&!K FJjυr5j'O)b&➴\vXrqZY%6 bF܆FbJ/ۇX'z/NJȀ*c#&uDh6G] '-?aFFS\oKr>RKz#?F[`e΅q[84}ŋBkFr( VA?Y*f8)hͩeQQdSrJ(kYv+<{>ʈ0^ +ApqI|zjP_ I$e3%i2vö}F㽳{Hc7p^R"p#u't'J'o yX˸D\B~-b Uc\֛!M룾n3}k1J.{5 (+UG:B٢մy@.짅(»N@$;l$e#~Bmlkrgi0x#]y*=s$R (i `c*JQ'eMċ+ +t>0wO +endstream +endobj +542 0 obj +<< +/R7 305 0 R +>> +endobj +543 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +544 0 obj +<< +/Filter /FlateDecode +/Length 2419 +>> +stream +M]:k +uU]uf=p pmFJOXɁMheBo9*`l8feMTj+kmjqݖzm4DJKy1Su$jމ u?I;B y,.ǜ8g=⍈za4[6Ҷ?)OtCP;D +QkWs'AwI4Z] %L= +ӠפCh8< @gxݷ6+8v,XuG6(6:-]4Y#fMt kHَqߵeY7xxg_*L2"}ZDU=;CN#10&} 0qۏgTEͨƣMj$pLt|]HcsZkG55x$*/R z>6Lup*/VxNFمˠCZ٦fbjS!h3=*$'ߛ٬ANorOuV+krݲMR8o6%a;_Hz 62ƪsQ^.nt*G;ÅwP;fPD}?U9?p_.Ҍ낽FhGTAqڏ>DjmQe|:4Դ[áEIM0jRt0MhBl2  T'yVx.@waQn LzQOtTokE+.gx#lvU,=jH/ "fR;=3cQ2o}˱IwWc@0( +\hUp)_cd>o=qHvZr_DK`)voiUC^p9 ]sE10~ 6dB==,jW!/sv½8l[:y +w 8W[O}}4 +: S4EoBq &˕ E%NF?*_0 j|rRzކn]3)ȍwX +5 ~\O1 L~v'*MzJ$16? y"DW>dTv Qgm8tt=2)UY.sõ*ReWۣa\vw6F_kdH%:^^(&".3',;"\pU=Jj#3Ǩ0 Xʋ.pb@S8gkq* flzn8>qm3~҄ؐr-‹:kiCF A = +Tj|2p;=MA]e%GpjYbɻد MHN?;5ӻ%2Q(>mM7ٍ`_R#" cX߬$ 3lo^YzȂ2|~݁b VAU@}ނe=g8+p_.{J1Z0yv^ELˋ@#VlsS5IϢE/Eif(2Hx zS%g +Q!er["eݼ d1_/VT- Ivx,QyF,M@ +*Mb3۠I5A9PshG6=R nEAs)S-r3+B6+;0'ᬧHc6Qϵ_UߴNť59+y]rVo}$@:Lz#A}xznWQ%ƫy{Tle.䵣\;%. o^\ :eFJ,̝Kc`5MFL2R4ݛ*_͝=pę@+.Viv%bjr~@x icuW$/\DZR hr幬ݾ-%jUW0s==Kuoe,G4 -C(mP@"{Sie),PL-+7Ӗ,ldAlI$ +endstream +endobj +545 0 obj +<< +/R7 305 0 R +>> +endobj +546 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +547 0 obj +<< +/Filter /FlateDecode +/Length 2133 +>> +stream +De,\C"v/E֦ +E"Pt7I;'ֵ:|t] ^7E#Zb!CʽE.gOetOrH V*[^MAYR۬Y(aqX9V %n󈧅%`qv#.;z_ַ{9eǝ!H Kِn3۩\Ɉ/BQ/K߂/SZBobΊ81u?RȎvj[»` +6+mb={Ii"Jl"qw\GVm¶Wҡk}eG6qMI pc)_Ή }QƨѼRrQp*GTya Ϯ +w0lbvc׶ڕ>2{Re{%iGۯlrch::Y^ru0\ #u X r +uU +(S5:+۵dL,G hxO? AT AIjr?ѝ tT;Xx;KVaJ%eJ)&0p^38tRO3*A 1ↀXy:6kh42,`r1q|(>~#55fmtX?(pʂ+Ƽ.RסyEvEPk +DΛ )~]t`/^n"ǵ`Pܭ\ ! t)8[G"'v锛hsKp#}&+|cpF;W"/2ٮOkď49ˀwP^H +8v@J\hlP wlAoRhi4~: PJQ+Y$YHٯ٠y8!B}ړҐN;\dxoԙaWl*ʡ,Cp6ɨFgrC$㑋EƾZ^k!bljgdҼ҈z +!b 95ᡨ @ut\x[p}:Ffohwo␅qĿBP*Yf! cG +\K2/"-;Ia+X2`yg(DA#>V5s +#C[wWъUe|+qf"ɏqk7QZ0z}e.{iS._]=t +j߅fp[j@sVߠPi <<۔#k4D{ shi>4Xb?AyC{!T^>ق`v+cf}q{(Γ\K^Jv_y,Z2^TU4j1^-(_fVBQ',k 'DҳbaO <}DXvf"UF H;Ja#bnAlIEB8"dqwjLl\ +endstream +endobj +548 0 obj +<< +/R7 305 0 R +>> +endobj +549 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +550 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 225.386 150.124 229.64 158.231 ] +/Border [ 0 0 0 ] +/Dest [ 39 0 R /XYZ 75.52 70.5 null ] +/Subtype /Link +>> +endobj +551 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 56.585 235.258 66.719 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +552 0 obj +<< +/Filter /FlateDecode +/Length 3088 +>> +stream +<_^h‘@m,4ӂ!)i<;6{.;!~PD͟1RM4&z\T9fdXئG;n'5%򀅨*\/HEwO~M4*~ϥ0נa o弙=h`oQB9-kD&dqEJ,i8Oqa[]w6*nsSy̕\- r]^l!e[fpgMg{|`ŋmN5J ?I1,u;S͞'VmlZƒW\uQr`1R$ +X A*Lպ|@7qK+4tǮNxxeɒJ}qWb(q ĭCyM_3W2UuW]}BEѶħ ^tr.ksMަR]n٥ Cfvt6U'?y<$x՜,&*ǥ&;pB ^>oH[ݢ^,vbcݹ@s)Xު{,VfEVQxS$\'iງbHg 3b \|3_hn1ћ:zyvZY<tL}LhoY¾1 \W>ܳ$~my[M^ut{>K(Zt<:LzJ>lgU>ew @3(p7ޖ 1B16 ޞ9`:0QΝB*9w$]RLcb{C} +MCŵ\_qI%nX+r^0+}-]*5g<? P3]_;+`o| [:ۀH`Y(߃T3ǧ &O̦%BR,2.Mf-izɝN qlȨEґۚ{l oFN]7F݀ j(κ}ԒKc|P<<J4$TűTmQl|it.fܝ-gJۭvh<."ҠjZW{mOMqGA)DC .M'VaN FW6Zof+(Qmd^×tw`@kbz* |:Ttea`cp*JYQ*@ v5D#N |fҍbJ?ḁW E*r[3Vdb0&H`1(-m;˼Q/`M}2ߩK_ U6ɣsl_ډ +eugnPֻ ޟG=\~;LiA.Qx+?bIe߸t;ז sodu)W:K ;3ٙT ̜~.8kR-3ƢNU7>8^E@u'w _ZC)dCp[C%pBW6؀`||YߞItx!º@y)R謮HHŸ-LfZ} bS;`}F=Jrgw6`@"R4O,zxĀjI,k0M) "%9-``'GuF4bb.nA}ROAۭWz' hUQI?};[U50y*jZW E9:;sG(vyRkS9\@! FC㬐_[OL!xԥZ8~xrpSxrTij7Xe `F*Gv _a HkcDaI]#ea0c }F@M\a/HDHƇ=_[Y6dZJՄ9sCX.ʰ9Ĉ7]JGA=>|5;A:zv3ړX g+Jkڟ6٩i~[rkJO2ߥتʃmы_U[%GpFO9SeT+ػOl땩xq5ո:6w >ˣD ,$F/xɁ a'AiԉĂ =G/i2_ +̣p|~v?s`Ϥ=GΟѕ4F`<̉˕SM9xXg}:Jƛ/WO[zՙnQ,ؔxgC G0:~m|I=$.ū&wS~_2-&ϺA+t*(mǗ~@l&.h8O=C TFkS%W˄:xd叁fo#Yh/B9ߝԢ/t +\iyܗ!B|r7IE_ؿLPu|,}ٸLed6M 6SW$Ǿz y/7 $ɑ+qTNX݂.!<ۢRꔑKrUzMp L?Фԇ\IK!(p@z.8A9ףk/_A A4ZW(upps!3]I= 5aN^߆b]'{S=Xx՟qj'iQF'ks ٧ Ja jK<\8\%6ZIGX +0íe45PE}JKUG;Gah禯#Al#ٱ;qaAijEj娒pK~R23m[:6H'*&hd MN^l`kgE ez/DK3t:gf1 V`p?)Ǭi~+]Be84 5yx"vc/㻜` ]0-#m-A*PM*fҏ>KBH,7_:q . +endstream +endobj +553 0 obj +<< +/R7 305 0 R +>> +endobj +554 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +555 0 obj +<< +/Filter /FlateDecode +/Length 2442 +>> +stream +SͅO5 Ī"H1;`XƎv3TʓQ~.z raWօd` ,~Vu'.=>Ba鸛8h:@q',yb&{_K^ |e.qP _|f:;2?aQw` VY3k `{:glimzؿitTVf|.$c}}^Y,s@ݝ#*GWbH)@׫QeVL,NKe(Y~f3HE}ҁhA\)xrm[Ҫz9)my\IQ0BA6rRj5Xӂr9}* aC棊)o?' e%:a1,n%?gҶ' ӠVCjfDL*S %Bj{}{ЫI#uFx>TZUb/0&t3@:A*=d[mhG,HТ}v{'B?ysT?[s.ޞqm_-QCgصQ(_E\´vr0M4hDV na`>-PuYNlLJw& FgүQKɓbT<.`t˾ܹfZ5wDQS`ꮱpI`)=+:JXaF!X$( y)sI( QHXhَ /j BS5ODLҽr3ޭ@ #ŀFVp*_c+P/Zxz goG$+3/j*EPnBc?ЉЎ`v<e{̦m|J۳|?: @K_퉽̸y6b4P1k~L,Q0,-UVgcXݠe) )|5И%w(*NR`jpsVys`?‰xQėgT+>/hu]o$M G/PFs)*2;4_c}֌-*$[џu/nD삦X$Ѯ{t;I:nNվA%4Uڕt89/Vj,ړB^fotH!3D^sÞ(Ui Mc +>q%{E rQg +!+sGf +d<-ΑYy%$YDvzVu@aZp1 5)Ya *3  { +.1L f)Yz<+3#0MӻB:lNMXB&?thf*Nj7 +ɤ/GC'߯Т1t4&q TuC^Z i @%5&;Ҡ.f;| ^mS T37DrlqD7Hͳd˾:7Kk "CY:OX 9  +mg'0-j@V^GNIy6o3TIUrOlyD*)-ՍC"jljaǒ +$!>?V ELA-wM# qv엹iIipܢ4ϑZgj*y5K梦ȦNde;q9\Ⱦ<#ϩ| +xPE?0z )@J㹳nEO1 e7Ju!Hm%%C}=O:*رI#_^5; ¦R𢑼Ahk46ZRMhnYYr^M4[gH,1d Pǘ> +IJ:s3.MWq`ՇT}ayРk8T$SY+u#8-"|T$ 3ybD̍ĺ]LӾwywH?<1s7 `ŋ'vC8%%:kATE=>*WZJɪ<[7&ReY7eT[#FK1DsrGXAq=C4?wHQfuG=a#%B 1/ZCTu1K~\+KґZW?5Ԡf3ߠj1$ +endstream +endobj +556 0 obj +<< +/R7 305 0 R +>> +endobj +557 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +558 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 367.776 481.112 371.813 489.219 ] +/Border [ 0 0 0 ] +/Dest [ 41 0 R /XYZ 75.52 80.45 null ] +/Subtype /Link +>> +endobj +559 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 284.607 341.863 292.052 349.97 ] +/Border [ 0 0 0 ] +/Dest [ 41 0 R /XYZ 75.52 68.5 null ] +/Subtype /Link +>> +endobj +560 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 66.544 261.187 76.678 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +561 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 54.589 155.991 64.723 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +562 0 obj +<< +/Filter /FlateDecode +/Length 2857 +>> +stream +8PRN'U x^XnTqr=)s})_07iv ’-ƌMdڠu8*UFvGF'd4L LS@W+' mI%c"jZ>H`#{10AIJ<-ӫ*ID +|t %&'^ĝiȞ$zbm1]W;3CpVñMsIq>'BbAI$sR=t5@T`ȣ:jfxX,{ 뀀6,y}Yb„k0F":nSKЂ(b-"EmKj_XZ%uc(4&;YfDH!0!ȂLyKY7Sq~j{\ZGEFan,R$_@09|"D2Ϫ2\6+fR|7K"ח5n^t+nJ\ho9)A,i1D%Ty dc +~l%">̑v(7"^i02D0$BXLH,VES}4,DXBـoA#֮Ԩw_[-|Sʱ'E&-,B?UZK5T}!ns  YhSĉdhrrћ)e(lJYFp]*@9lॱr`@N)(M5ʁFZdEI2`V"v%ӯ}g_g6_}0u o|_dGe?Oԩwڜ% +W)Ǒr5g`0(kGhiAcSkj2 +@Qq=5<6.9ݸAUͥv~/"~ u{3!$ap²8T;0pM?N7[ш@s3^wA~bی W-m Je9ӡ/ o퇤4iYt_po)"me79 Gi72T( v)T P{^܋ O){765 .ML齶GNT;hy5%20Yŗ|$&=s>@zN!/ܼ./]vapVX=Q|jgeR{:~}Ĝ. o2E,u32i8fb9VX,Ι)pӲߴЏt&#Ѿ)<q~J.U܌O6o%ikeB\Qyc~=ڵ[X'F>MExٓ7o;pd=3P *B8 +>:Yy/V#Xu +0U ڠb +)o:ֹ=uɱ-1S{wrX׺ ~IQΌ -7#^cL{sAQ[xW(y㨄 2Q~AJi)oV)'=ど@7&;̖sdZXnKEJ/"!:upZЗz/E|*ϢҨ4=wЫL)k y][YM;/z/WuҠi.*VN'DNZmh"^I_>Lf>S$M&TWn[- 殺DpNHZAo\rsjii+Q +endstream +endobj +563 0 obj +<< +/R7 305 0 R +>> +endobj +564 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +565 0 obj +<< +/Filter /FlateDecode +/Length 2954 +>> +stream +΂/Lɫ;0RJNZv;`\CNQ\/JZֵclVFGPD뢌yYB3䷕k|_y1p5a\^R6U@>a76?6 +H"`^ƊBtVt h3ܞ"[!S"G!,UB) |M8lbg7"(\w>!>-opB^bD,QltzqV3PclW&֡O^d"W=:( ]ʣ2\sOksӌ#q# afR{X_&T׏hO'ćOXkS ut\a00?WU}ԷxSlWʧQI }7p5G6gGܿ UKgm1&i BkњI_Ĥ'^BԘ) 3Aϓ3.g1%`.c kŴW?@Va7$#њ!h&@G*g̈́mC J~n#+a&c3q0m.f,o DOO.+Uep nlpTq)?n 8ڡ:i|0q×wp":ڿ7sy>?pƀd\HT`;(&Ueؙeҩ{xI+qTѽ71QtN?@PZRbtsE qWM)`t| b~ + +I]_U:'%_՚&GV&hSǼzx]tM葄z$}y[0K_=^C%`56Sr3Џr)V̴*֯yl gˌMNeۢK! +ps,S 2%&5"UCuzuJ7;d^N#GN3&dQiƕCxԐ 0k-0DEa竏'/?]zBW$ܜ=x*Q=)=gFx+D}(Zȉ';Xord%º36(3i몈My.mPGWvlU\\>)4w`^H0hkCmY%Iҵlu`+IF҇gcINo9a:U;y߅e2MOǘg:X#eG˭*Xi坌Mx=#MX(={?R mD)RH7"c[!%[y 7 +sP+^5,d&]EA @N 3HGZy#bZp'%2:s2W`zU̇,/UE^?BHF@LBBP7㝤Nnjǜ&*fZ|"ZʺhK-gѵ:AxT΁0yo +x"2AGɝƸ[ށ.As=?jg؈g~5WۡuNfќYE#m_GL.H\KMο(ϓuGg,b\8A@nyᑁQOt#7btA+&R|!$OJQ0ф7# ti,UQ~G#AhH-ho|;6 +^FUw 1 P3xKL>?#qG] +Sf%Xݝ[Y +sënIU㴨̶n_l._}Fzg0P@j"UnJ ;kN/V6v\Lxկ#$@`4w@8ԏlhŝޅ17%T03-PZ]|3wS1s!f4 *)RrܣRA>q,2n&+@Op?=3-μĔw*fIڧnxbug TsX E]۱ >r -۰R& N5{Ӫާ\9P {/%TT'[ ( +e,_Zfzu=Y| [Cm0սG?/wFq H aYkF?^\QXPC<_Wocm 8y0ty,Zk|Z.цf#8o|B<ò%iU' vB9 "z" :ojT0O-; S^n3l['?6XNwXvz8ߩa8Uvo !F!}%^r} p'qH0QjGQ(_\UMA_"k̖${Bžb(- +endstream +endobj +566 0 obj +<< +/R7 305 0 R +>> +endobj +567 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +568 0 obj +<< +/Filter /FlateDecode +/Length 3264 +>> +stream +X71UυK;TchHїP$ J:kHJlhkb<\V/mE=')!wv-%!'h%#'VY6@-x( /]1U0+tyYȥbW%7|g4DX3#πډg|]4ϕeM)Bc Na㖝~/|ite̩F.#Ϭ"$BSxx֣N]B>a- k$NpX'coVrѲJGHbQ$qjIP`Jw{㽢5U{!'YPC}ޕJ.5;hX0@+"Bi<l\󳅶K2:Ji'Ե1ɞ('lQ1XiV+_U +$<;ZYRW +._&{+zv;5>k}$p]W@wYeל;xLWeM+^z*.UnM|ovQƌ.ZԀ~2%x dBb[y:ZAe&:&Lm8Kd7 e\F=aàukRQjue:/&>kZvqN[1bkw fՓwT쌗ojJ>k4,*r,B&X[:#z?\DkyRnNzþ[LVʔt网2Gc:Y[O;zv*Kɡ|)y"B3ʖG~ln_S/"fj(F_-ge HyT9.eAhxaqݾѺt B2QU"rL.%%MD#3L+$V䕆ű~ǭ6B(E ?0uBnmp,ͧ5M_z"~W4n 5`OA 殺|榑5kU!ak1I*!/>@CW}eѵyGiSnguv&u$d.<i ?(edm Z~Z~夂B9PhMx2nu-XWVٿ&#|`lejY'z!_Z# :kA&(VKSz!;A ݓi]GMZ :S|ߞGUM#Lb'sAhX'&\D. ;*֧v̘@գ# *,Ri ;wYb60 +Gg;Q R(J^wݸ+v Ñғ~Xd17Re*Ϲ\Na{e PLBboo<ݕ`/.w!0eeCÓTh)2~ ν,iR7 +6IVj\.N^b1zu-ӖjWIcMMD3BkBh.߂ĿyY'W֥Mesl֬s;Q[Y̜_#ek\uϷΥPNnIճΑRade";\B&6%8! ,s2_~n\"Avc,IHo|;Q\F"L1;ۭ*gqI=lg tt ԢlW:=.5eC&RVMb&3(!r`le*`(ve-c'vC`X:[Oƺ06"lPaޭvtu\>}'>nolDrv!pKE4״L aj+3+<;̲I]ݨR!S7cy)Jocb'XcPX&% \pSKEsudPEdY 4ܐpVN=[^ !]j{^6@r6LP28Nq(|#wm(Ͷ'mίTӳjN|؁۷Ż +lidj\L)QD +endstream +endobj +569 0 obj +<< +/R7 305 0 R +>> +endobj +570 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +571 0 obj +<< +/Filter /FlateDecode +/Length 2987 +>> +stream +/]I +/eu3a &vūE0m.ޡǂx_U;)=z{! #U'8)ڿ j^Q>~dh!nW/L5gZk2M[RBs&82x̕*gt!NA0X#{ cSӃ > +V@/VBpܱ gAVl{eJ +@~ՊDgmF2F A@*m|@AVzyl"4AQ}_@Oa2u絗_ݰږQK=k^ML\^55"{%tM;H?QVM$ɰy9f"&.G`cܲXɏFFh1 4=iģSV0aJNYo!_M3X=(хgR;DjI#+FRȬ2>Ws?ridsaLmŸBկÓzDny=(kRW=#Fބ! l5jkz"XrMit|CueФ|&IKNLBѷUA yq]C!¶}@[sY%( Obo JQS2@T6s /Ku̍}bh#Mʓ#'wvٷ&_g^ĜM]ܓ>fSԕz'%b#mt-0x8\3ss3ibrz42|Eۂ.)~^ C(?Qh;Ø[(Vbǫ~hjM7<_c+%ZL*كAqX*FɿXыEfrT^ b/ X)1lZ=o.A8ZgZרd+~(41~rs +0! +w0y=rqԭvc #.ζv[(CRÔ|1%Ό+VGA_fe8A d`o*v{0}Hܾ\UeN(BPE/:Rev$+D|9xR[;*9B޽Y,G^#&xsm\Apr 2caēV^+a1 +L;IkQl9Mlp$Z=(hhOQM3K]q/ !CAKtS2Z!iƥ<Ɏg߽rO$٨4#$ +g3vtCNC] 4 [/W9P9DmIu~KK&ܠ!LϛUT7~׍J;>GC8㼫bh`Y̛}M8VI Ӡ^|ux[ƙaT`%$r?k> +endobj +573 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +574 0 obj +<< +/Filter /FlateDecode +/Length 2276 +>> +stream +{Yb5"A$ԯy}ڇ6O} a.O5 oS>mCYf>*͠vo46ʙX~U92L#] n+*pUB;i6 IRtNǶthrPڬZ/q]3 %SYZW"i¼sĎ F}ݗccqEh(zpg39o ΠQqQK5ą &}SoW~1g *Go%tUE'&@O +y!>}[DJkcb--DCKCSƆ[ js,(nO$AqDmkѶ 6=J#$':me6&KL~`n^{dxD] +c↤!tj P+#zjrLT# ;ycM G127kdzCuIܒ9@{>anb{\u"TB \kU\.Jq|^3HO@'J?!rS&K\F_:P`h}<̚ɇDL?t_nݭg+GƬ?Q (\2r&ŏm \IW\4k@BFCOOeYwٮZn{([tqS.VL @х1UgNRl[L%I1i"!i;ݝOEm˙Fw.H:M0%.N7Id$R!"ǡ +endstream +endobj +575 0 obj +<< +/R7 305 0 R +>> +endobj +576 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +577 0 obj +<< +/Filter /FlateDecode +/Length 2593 +>> +stream +uft22yʤdA a``U19َ;L*bL9iiY]ځIȞ%-@,'ۨ Q81%&gBN%XCwI.(MZxwȥxH˾^S,./8cSj Z8#bD:K#3暦-+vX1 iiwH z2FU6aCUCagvvR%y3gǵrՍԓWi}vYc'6.:xg"]Ry6mєB5.ϩ'ב\Sf^76G+%AhIKYpol>)Ż`4}~<ݾߚ ߋX7ɶ:|_U=/z/wZځ'ToIrpgw^i˻:e~,X> klk՜>:<7{3(ySYIٍM}f=E-}uZӑeUi*% +9C"M_(yKO^eQ=Vũ"*:dR?W"w7>cMQdȾSZ v `/dܡmO\*iDv}}e "SgY DNEOT,sJ5.Q=B0ba~åe 4)˱DZ=`d/k88A2믯6u pbI{{6F7(dZRڬDrb{79ͧA 15F{Wd <}@ /1fv@UԀ'oM !{9<8?iY]06rи1{^ NuG/&j:Vb@ԩ;ԁ#CRePNp,kPvD{5m4ʊdlm%ԣ&9Ԟ.0imģ+áC&i0.XߔK'R'^j-y9t<6PX"׈_(L ?PBƁM#/Cؙ݂.M ֭2Ӈl-DTd!ݱ$\b`ǔ3Hwc:o$E?g>ȑwEfU D9/+< +֬D6=VH{Һ2>4/y<_lJ_+/ζ|17K{Zn +endstream +endobj +578 0 obj +<< +/R7 305 0 R +>> +endobj +579 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R159 339 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +580 0 obj +<< +/Filter /FlateDecode +/Length 3131 +>> +stream +isXDn`|3YJ:J"1[ <4\ 8cDqѨQ|`?\PѰ.hNz\+,?cU7͌mR0]_?=&KhqIifM_ %B}Wq2D |>ghۅJY-3[bi ׭ tzceQqouٹ%^O.g/O)Ls ':2Zif-,'EԤf29u\@ /<ߘV{W$\#ܿedȼ\gM\ +b4 gUlC~HhȪc&zR\\ktDʪr8~uKġ:+zPE (W-?Y;i?xyɔ BeZ<3- ˲ps%fȌ77<~).V ^Bw9ssbhlP2M x::JQ')Yy幋[o8cX3@QPsLfVtҩc5w罞iґ<$!+uNH0xĺTT׶_/!ګ>!a}Jѣ_ F#=qY=I +f9aVUZ]řEoM칃uySaL  +\u- ^m&B‘%K5P4[hJ_ݢY/:J i7zsfPz? $4Rn/+E9qäΫ2\8]%BåN^ !qt Wg^`y'EZ<:ZPdF]cDXQh#Ci4`J=qmx­{}ɮd򶧑+|z;u7NT +oQtAȣu5)1U Y6Rnsj!; Bۍ?[aY.봸u5y#Ytٍ1,98wBƄ{zŖKq*aof)bgA')/;ߵ+%1;ޭj ur`%f~i؇fB{WGLc[K1hf<Hz1lƞ/.Mp]ؐǬdspq҆8d\D~TWFtdQNsjDH=װ\z2 NM|;DvEҵ:M37ॱ nوa/{ .܎f: a^O!oQ|$scϣa8;V5fsFobi٦ȹWD %?VۻJChث0P}42v" ߀4+[GY [Nv%ziE;m`%'s+-N + ŹD˥(0* $D3ڽ죀H2t/V5ETR-XE)Uo\! L"_%@*(K7?a暃@b XUGh(ȱrPKlTJwl9սiEdLgbY-0.9'2s~2ݼ"sųcR`UŀIaZwyd&ݵ8TbynsGj#3rpRC8CJ1:?=- >ȓ`^GrE Bwh,!E= x.·?KSM-aꑻ@I ߷^ +j ].&)Ms޷!mE3V@ۣ^!lQK]#~_G=@frir;K-6s<5f)-+4iNY.+?Q9!)Wo4$\E-q u4fk\ fCuyEs)f⼞ \{mwػHWO󆙜&\ ޜ9Dmu͂|;hJ_쫬p2<pRToCnrRLEakӫFS Z깂fΣf~B +UmToho)~$t~9}0˩ƀMݘ̽xߩp;6XVew Y2tg<4O=8UǤXPUTBK5PD+m(y4 +٨~Gq0{cin!o:0*:zM+I?qt'Oa>!q};3N+[LJqINʊ؎5wm=xT;>'YM=0[SM#s",@`^<0+{24[bcLxݶR-Vlfg JNOKN჉6 a EJRj2IaOvM$J.֡ yJ}:1B##2/CSy/%`2z1C"w2%˝3S4!'v' 0z&-Q8UE) 1cN*CrV&̚m6l9boLẛ +endstream +endobj +581 0 obj +<< +/R7 305 0 R +>> +endobj +582 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +583 0 obj +<< +/Filter /FlateDecode +/Length 2997 +>> +stream +UG=v 술H*ȇu <9Mﭶ54qu6'0[ 5p eBfpAyj].-4} p&:KG6cFذrN~5U,v1j` TD2>1d ,͞ie{Ҭ ޱ{xWwa,B0."$FК&-2/P.u-lW.mPXrGi|fDU[}Q%bxeZK#(w$Kq_ضh.)'E~ ' ]zW=ydag*ʱvw%*GK_<+$R1̇ ^|Q'w2bcuCaTZ\I+'ж_Ceӛtq8 "߄P5UDO^Mo]*W.cTe7A:Av(`@@ KZUXuc!]b0MD'%^ډGbi78T}_GܛK|JD:[#$l lJ'dEo:@oApߺu8fD(MP|=?j׼e? +^0 `>ѝxnUH6]"OhXGg%bVY or .H*xjJYv?߅oQ HDL|Wf:S]DMWkWc[P DuHπpI *F}EfSN_K?QuW: fC?u7ޕ.ejH΀˨yؒȣ6 Lr=Q'yJe>&ۻؽeіZ, _WYUhL!3,Tv-܂oByVH#d>wY"q?F}E $[f6y&YR\U0! xjM,[g~ c2 FNs-#*55ImihZ?eaœ0lFKnwd84xm**8`NLeEx5rj$:{ !MۅW_TwnN3a7ڊԽ ??Mןn)|EUuya6Q1uM, h{{y˰Yؗ=H9޷;d ȫ$(-T+=1P;k^G~@jmZJf +A9V"!?[i4 i$-D,$"YZJpOFB[K8brpmpN1T.Qfo pṫbd 2-RI+YMd r ?$[Cd¿Ӽ<8[^Y8neH#_фM-]ѝ;߼m;'em7lpv}B1,u ïaܳ$]^^?VȀN&!)W@_aPp.S0͕yb{cUT4,0GVtk '͏ 2~|G KO:ozAjY&>U+ Pdγ\掵r~ +Y r6- DsR5ox1kCD]'}I5=طQFRO6N嗟|,UGt:)1ՙtoJӂJa$h9Cs +:(A)K^P?H:XJd:Ns˘d]݃vzF04x'K ; "We9N<32bqNf#;'E*LJ[S}?u.R*A\{"Rm@+עm&t6amSGnqяdd20'tr3T; +BZ7ѧ%;h?vpv(nN +endstream +endobj +584 0 obj +<< +/R7 305 0 R +>> +endobj +585 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +586 0 obj +<< +/Filter /FlateDecode +/Length 2594 +>> +stream +̚FY:ZTf((zljuj $=mjHn2 t.fv1!3Yhe_D]}jOjdyRAEݜH/ȄA鯤1:03Nz%"͘/x{_){W>- ɸseF@$2$QO V=9,N=uD%q#^p~ RyD|PiQ`tD>%&d.X5d!G K XDN/kBNP)k_9n\\E5}9&en.aɷtNjBCgpM.}j`Oqg4Q5`*ñԊGpN,qPq^zsΌu[42~t0Y91 E(ӳҡW\0ԌM= I ˈnHK9sbL S_4>*eyᱝezc`n$To;b(tVDǻE>U"׋ >(l!C+ƣGNLw/ɆYY#"82o X㫟 S\Jr{_e>un{,4n1(.l+!m2i螿9)yVSDb#w;O 5˱=F9b[aEO!9!~e,`a%a9$. 6=R"$0i Rz+KJȗv\-vqFrDc+@ȮO+uuZ[ze?d{?= !.=Ϝ>&hIdԂ'mzpTJ%mN +Eyzϛj?WO(_`%,p< ~/QJMD'Vh-91~aAf'Zf-xY?QN{J$3nszp1BS()q4tp؞<5V9NBF2՞ݕ_/] v(bs# !)?[VbtD JpʮE9#@8& v2O%蜁YE7 #OqgbBi4bZh8=<@^B4gN8PR+ (mW5VJf`q@~σ/ET3=Ƒ4 t +@o()#9=e=}dfW n&{3z?8CjȚ6 *cRj\ك@>)JxicõKb oǟӡ]-y~cV7//| +wfR'|{8ok"*rNv d]ӦROS瑠L{i:Zpgzrdl~0[0 nieOu!WITj4$O/Sip9k޿w;9t_TloCGp-?x~ z BWAS[e$?9́ +eJ|Tڜ?ExV+ Է$| e$|1M fWEnN6DyIiarA}j׶U nB(j5yQuX ++$^IGC'&KtV88X4.,hk'Dmu.U^f, +Σ8ν8` L"w_VR/xð O%Tr!tܭrN:APZ BAp +endstream +endobj +587 0 obj +<< +/R7 305 0 R +>> +endobj +588 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +589 0 obj +<< +/Filter /FlateDecode +/Length 2149 +>> +stream +zzY,eS!cz'̐T9O7b](*hĝ5! +>SSrOZd +h{mS)rMv5 O.ss!Se 靍V汑wqS 03l*\ur)ImqўZ)@m6)Dtxun3g~@F՛Ax9 *ۚz]i<#Bhr'X<4W0]f3(Anט7_Q3]Bt)' KB o?ZP3% ]jHQSuGɋ!%+5~,9B~~̩>[5_+vs|=]lE-3]sFf_`Q0>ȚV\Y)Z8;\ F/i[@#0l>𛪰HKV>(D2Zzʷs;9AjJO2p}qD5ɫW&Pؘ毂VTL|nm6ywR8SGAkѰA""dޅ(Q,0,h,p +m݀&>%C4wj%0}_/$Ղ;&vI4&CbkxTS +JSXfۨ /jGLƈ6͐yO:;PU$VSR-o~i'U.: JDRjb' e䙲hPɶ"$4j +#f3I\<:E=t<] rr1"ՙQM)I?6!6A4;T*,䪤%7WK#H.فY0*(=`ZVǫJ`NOj͆61Z9¿X[W\9&BXiHk{!'d~UOL| x lO]Goe:.3%eC]+UH뿫F΂&Zu>bM;߸䆛UzpvVFnCM{c .RUlmR]ƸMaK&#AOW(A=OrW<꽜m0WGZLauTX3qo"tLj#G WHH?!*|߻̥o-n~MT!)q`(LÝ2QgL{L]㹮 x Y!1ԧ=rcS +G)u4r_)r_{ G@'/9A:RD'y FZqʆtbMs%>,/ƒd;ot,Ĵ.P~- ؎'RMnQSf7o>Z`𗅍۞]Ql'^ƫeRHOS%A4Q`Ĭ4[~'M /|'c-?KmaoT "W i~3lO ];# 0=Tk:MG1Im8d,/VSj|S`Ufl%e%-2/Y)LGm5CuQC}a^<ĥn,th;mRHW<6EJE:R{`(KRJnxj'F;l>]mSqOǵ =PiC_嶏8=+T՗ΓhAadmPtF&ptV4b8VXVNZ9|{ )\d%e!6'@!r3'FFݨ! 0oZ%JiЛ.ޘMYT .q#?ט[ @< yB T8?I!)+Φx>aB-~v jo~"2~+<*Ww/lb^ꍙL6 k(:: y}5!%4~V't*'YYc綯JZ+%)U̟/48g" SI-\S>4NIWYcfﰁžd6I|*κ:@$}o*ϵa|)2-NC]hUDo⯊=Ƹ r1)1ID734Fm0ԕ5_~ +endstream +endobj +590 0 obj +<< +/R7 305 0 R +>> +endobj +591 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +592 0 obj +<< +/Filter /FlateDecode +/Length 2935 +>> +stream ++A9A=b)e8tT uFdԵ3SE+э`#p`i% +>(~t״SR<ণ(΢kV,״d3q ?J@cq-{{~WE'O\ް@< c(my,`SV4^~Mg)w[dҖnq݄iѲt8fT^Gt'ȉ?^xY5e̞s;wXOxkBa[hqlkW&%xc%Gw'nH`:,v h=zVl)׌d3$xï; --yŭvן IX+r;/v{3[mLd:R;{#)DQ2iaYO7~*Nn֦K "7}|XÔSDPȠ TM6{ +C9ZpsnqaL/,“t%U^|ʊĕE]ks}nXq KoO'!kUveފs|l B|7Yvɵv.KEL `AĆ {j|z y<: =Cro,:aD\Hv}LsP.A.:Γ)[Z;a}@5z- +_>ٓO#G/ T54@[}t"%e2vuF`l[X&|S!b;GH֥H$1.5"Y .۫ ȺpkrB?(h3rnOjJp3K'羨x$Iڇ|mA"_w҆m`ϣt?`^@!r'm̈́i9M6X)Kh_'PZ7EX$" ֳjUpu1F_WꐝxIBH +7OCOxb{s5[-~pAlŞbt{ty+븝X){32!yrHlNgSj`{3ɨT=kGkcߩFJ&ex$ӥAoAv91&? 2wW98VE<5[,r~ʪ=DZ,%b R0nd!xkx{*+HO9 EXf;D! ŕU- ɓZ@)s788C?Q>j:arʕ/_1rI$D)X2,lgם(ɽ3z?oR an=:ewC&.^4^t# ݶ JX}Ѽr=t61'J,c0YO"!j'< g.ȁ/3е4 ;~@O&D'ùN{p1#Lѯ;9\hfRBfmRm.|µҲiu@5ЌY]IR~m.;YADRfnqN5/x5%UNQFI qhΒ*T:,O ,ޢF +@jw^/`(nek! n}qΙRtr`w{K0{%uæ7BCWA;8&v[S׈6uyCjoG|AG#OK&Չ ? b1$gGJ{A;8G +$V;ezu GQ2(j/ͧ&myg,\_Eqy+(,ZIRsV´F\ucfMn q)$9%XSJcL,nꭉs.}p(rK>FCuQ>$Q,Ԏ w -+fi秗 4O+4(Ly"jUv#ݍhO08.;F~jS<4d$--L0t|qu}vn~V*P~Fccw.=e:j#WT.;6,55{M˪,q+b&HfV*ׂbGwu򈻇ʫR`%("Ƙ̓ИВPa+| 1h(kS5KnD,iElgvyo{q!f$kT ?_%dLFAIU_p>- ۴wsxZ7D"fL-\7(WM.\`c<O[МAxsU)qt> 0+!gBd ht@Kly)p 2;ބjz7B,#\6G;(>wfu3!`bZ+G> +endobj +594 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +595 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 318.829 411.364 324.961 419.47 ] +/Border [ 0 0 0 ] +/Dest [ 52 0 R /XYZ 75.52 77.35 null ] +/Subtype /Link +>> +endobj +596 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 63.435 267.049 73.569 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +597 0 obj +<< +/Filter /FlateDecode +/Length 2879 +>> +stream +t9N0(!E@KD4ݯ_s-M5c!2E$Xhw9imZ@#"o4-L`xěhX9xdЈ:w+*_s;=|Z O9B+:gD9q!)lY0^0u ^QDJ $CpU7._bBs3=;4]C,.,rG\"'Ep?00HMUF.x6jWieOLj*0љH./m&7j$ VN]"T1y$14EAj'd6@im#~\J [#U.jnUa?[q+ +WϦyf# vnV^NrrEP?|ќ5WEײp]`z u8{ć錀sjґhkxJ#8Vn*?oI# L18_DT@z;|d<#>6گ-:Iٞw2:6ZJMػY§s%}Y%qBوdTf\(DQ8Ay0>ʗS7(KJ}"hx-ٕaKڷwL/v[}d?`b_*ZpQ)Ԗ80弧TLUP6ygnw,X{HRS CKӕ"E0L=,Jޡݫ!Q'?8&* >V=U!k]b!˒6lD#jcߐ,uwΦ#1ӱ<y߃en ; + ڙE#M @S C:S'0ynh@+oeI8]9cX@WxcX _&ͩ,8ݷ:= {$gu.bp~c{t dJЄݢy`%@9Lbc$a9B0+:F|[\p|8AeOzcT*u-NJ?${K3 +L&[D@cp.$=Z~25攢uMޣ~^8 m6t@R 1~HwnWJir߲N)LD!jBf@9P{_pyBOd0/%c·RF5Ƕhi UZ;PLQ0^L^ $m%p垫NVNK-k*-%_$_Z@o^iJ<ݐ,{zԯfKd,bߋu4W1s`/q- H]?n\K88C +t?CU_azk ѱB\@~mLIkW4ԁ*%yqcBC'DpbI+ ?양hE1|fŅ;I)W +Ow.HXO9?@c'WQ`䇟Tٱ'|mdL:͚Nߪ|a([. ΡwGw-P$n[bppk9ml(ӭpU]9 wniDK tN4L?REB!? :/֥Ae!rnֳ,2JQ al[QWJwT'UW#=F]< =ndXɢY wLzwFv !m&fc_[#+?E̢)2?偡t-˳):앧 [i4t0im9xݪb.eNQ5+<ҋ7%>l? +]Ѵ6eO6)dX䓹-&RL|Ŝ]9;y4$`5S§p< T: lko萰's1L?!p^ *:r b 6x400q<og-:͢@{HgZ%g ;eEdkſ`@m& D]N> +endobj +599 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +600 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 254.527 297.021 261.578 305.128 ] +/Border [ 0 0 0 ] +/Dest [ 53 0 R /XYZ 75.52 58.39 null ] +/Subtype /Link +>> +endobj +601 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 44.482 196.186 54.616 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <130434af40c695f91fc3b63a141ec0c9779edb7b098f1c8ed11012168a6a082faff4f9707a0e4f53fdb4f919cebb7d8ff99fdc21779afcd8bfb4> +>> +/Subtype /Link +>> +endobj +602 0 obj +<< +/Filter /FlateDecode +/Length 3413 +>> +stream +9i1%j=Fzʲ\Xꍐ j_,$PqBr@A. HQËL9U3.hďȧ?mNz{6YK삒amA䷞&apg/Ȍܚ' [2ǀR3_PO8uռ8%Ff(ĂZi@:v,1(mC,_g,+Ho#"_n“"~0L'~-gf-Xq7%\_\I .) l;ZE/hMyYCWJu$fN}pmM#~;.X0!J_ob?yqPx$ھV=X&Mo +>pvl61`('hD1&oYP֨<>IvN`I+y+2!fUk*%*-Mc39Y̓!h1c1c,nAk*yJqwf;F94 eo#Ȗ!+OQ^7"vGh8x/FWu*ZM#Y+LcBi_j=6optFi?^ںHlFwǻ!eG1SHr/ uF9lKOnxB>\BLl5z)/mt^_8o`9a$GMcOWb6<;R$X\Y馣 *t"lV^5O)1bBlQ)m,]uue^a܎-2)gݽo& ' fQWl \} +>ќaK,W"rݿi``,* }s_DEWNx$ OXߵW*>i6g^ފ>~ m1а%pY MT?9;^W82$\ĂW$ֱUgD-ܘ{˴;ݟG ?Y+vގQ"5xB&ڀg $JdnwْX毴L}{%/ +*NJWw7;;~ [H@f@)%tIiXIҨɐ3C%,-в`Ϻs! +o83CRg[ 'P$.Xq|껚ȕa>eͬ,.aM F4oN e$Z$C)h(Ǖ +èM +{e-mP㑘"qE>ƑٯS"Wh&qm/\;樦nc#*"BEg}@ ֚C(Rvmg5DiFTRk~b֭ + f]SKv0L^RUf|<1h Tz3}e +Qg*NU6Oƺe=vuʷ8{AX;iu="OxtpOf6YOO͞i05ZV3 pPyqآ} 2qN{ǫkoG!{> _bv8slgoh*pd]H̹V%|L., J+x4|h9o"Ir_TtP|s]@ғ~F\~< 5EUif]zF|d7ѷ"\#LEW1#ՌdgHa#e4j_(UXUvU) dڮz gJ6Z>Fn>&1nh(bdp-{܄ٗ'FaA6[h/ȡnsPE+iԶƎ uu'F |@g<-GF v~ ty"W⒪:[Dd`B\>l:+nFv7u₭'N:BG'n{8ysң/5x?uxXֵV5F^o犆 +Ǘ V u+/$J= 2`Tt'mnhT_"Sp>k*A1'R/y!ʩ.ً"YE+}qY@Me. ĦB?8~0}{ߞ$>^t9*ktNkR?\y?\ڲ$) rkˋ/5ҏfӞHYi#˃K\{@5B_ڶw`}#{'>iLMpPk6°j8ִٗ()Mć-y-=?{xdOvFTbƖ'd'B}Zr?bAjfNϨ>:5&to#Qb)jE28(FhזHQ^KT# SԝsN' 5'-05.*yo%sc?pnn=Q$`he!ﶒ#/GUW'}| (0LJ85yBmn-*g +%KKa+OJߪE !ьb$Ĉ|:oaAo!PْLheU3k M'egКvs^ۇ?3߳{.2pBVsJm6= .q$8خU& v+}(ĢBm\ġ41OEsY~M ˘mv`gtbsogi:9n@GCRzve&LZ>goL,`d:HmUǺ}m~58g.uhBTSLD.*1@>@q?S Ktu1=>2% +endstream +endobj +603 0 obj +<< +/R7 305 0 R +>> +endobj +604 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +605 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 321.123 483.887 328.126 491.994 ] +/Border [ 0 0 0 ] +/Dest [ 54 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +606 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 234.152 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <6cfa111544ea2f380367c689bc4ade55f73a9255b01de7713573c221022bffb5c11df4d4cbf945ca389293a1cff1862f67cea9bf3242b5990cff35218827f9> +>> +/Subtype /Link +>> +endobj +607 0 obj +<< +/Filter /FlateDecode +/Length 3249 +>> +stream +1olLBn,;F!c>/G*; )H\NbAxH%mp%{),GI(% :,^!(:rxI  .\"hՖw`'İ# N$0Ck>s ܀JCZ]SMd9z6j}B,N9Ǝ Chl[f]@o |KH!e[`⽭ft(`Ӝ5/Qn+*;INArI^UKߜɭYX{_2~BG凭GoU1ա 欑xD!Y +,ޤyB0y ^Z.%Û(ck0:[!hI>>GU7bzHwj[ttQEmuEz%,w~5I?)LmaC@_/چQY$''-7ReŏXbKm !Һ/.$PcyeQh !Sw7Q[KX:#ZaF_ &:R@ '`+::&'J:H:oMTN&EkWHAVj@*q='c4l$ߘЩܑ T%ܿ 9i$tө f P8:ZS>Pe~Rliz\T Whe e_R5ɫ] 5;s$̆|BׂTLE '%?G7'<23lZ< }o틿5nixF*0/}a +-NUz}U:F}BI![Lf0{ɸju,x=;Ls(}*x1.3i !!Dp dD )APV.ժ qIVB_*>Q4*u(=+iHŧ}䝺jUVU3(*V%nzvRdz4CzJ %E+.a|o%UQgޞ[ulYh>]JK34#.3}\t*|)#KN4n?eo1b5Smvjzٜ0)xw%n|mC#ĵl%iaAoH|#Ñ +R?>۰JlA׽%`,(T6 Pdie?1t/`\\OTq5Yޱ~7(CÒXpW*XF_vCÿsV :/7`)4' +fQì/$n i*&ļ 9Tɢk>91@+j´2E?rYn<@G_Tj0u_Oҹ3Oz,9i`AXZ LyXbOm/x!~"%i)\ ޱyCVH VO&N]u 3@i!{O2qE WOShљiz90b 32s])^"_;7`,uy7„g +GY76Wm9hd1sRW%(-u؄C)UeuٕZϵH J,7Z;dـigɗ,JO.ęxJ'S0BXԿD $=  ;BwM-^_H!'V*Z{;(FIeވmVDߪju*N쵙IG}#tngYlOi8琜Q*oσVI&p˫} +'Pdd6W7*Ou2tfxewطMEɇ} +mi}h-iL~X +s +endstream +endobj +608 0 obj +<< +/R7 305 0 R +>> +endobj +609 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +610 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 253.721 271.458 260.817 279.565 ] +/Border [ 0 0 0 ] +/Dest [ 55 0 R /XYZ 75.52 69.29 null ] +/Subtype /Link +>> +endobj +611 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 55.377 224.982 65.51 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <6b11389e0291a06feae77db419c73bea9f4cd21e10a2f668b6d7c6e08e565961ef6a> +>> +/Subtype /Link +>> +endobj +612 0 obj +<< +/Filter /FlateDecode +/Length 2703 +>> +stream +<ˎ eq:KׇbϞܔlB4xg4B2vg^Fe:gg\iI9[f0K̐!]Pė QZo͡H[7 ])D^dc<66`HV K-+ĐQU(8a!D%rXq +}cYo(oK]~Wri!PE`eԏFϼ -vQؐ mMUΰ EO7.ܟum,&"(0/~=bəT B^4^'V4Js,?PlH38E,8VOSo_+ݾzWg=XZ +1<3鉟̪Ci6[# :=\L"2*jFL'UTi 0 +}>{Bpڸ+P_<#5f6*!5[A} [O:JQX,)$xU_֋yEAB(R%#|Cb2!k}gZyuJ0+ӝ7*|nճ<.p.^X;U/'kd\ay .om4LOcшX[Xo# +q8,& RP22泭~l]탕<4V`] $dq£mcdzh !)봵 +UpR+ l.ǯUţHx+MxSXDCv æTzQmu3Zs/7cJ*7>d?j]0(Cq=Dl J:nD +M|F s+h+ Nt{ӳ + E4 w,nE7+xhe4`fLw *-nɜt3 +MW:.O: W`*e)Gh<3iI\e}|OI?o} &0.vSUr%3Q@"ˢr5NH.نS95`p5 ŕ W]~a9+Q?&. dm0vj=Vtz;qˀA(ޞT}K kCW_j cMG:j6'XBK>*gj{܁Y ut.>Зn0aHDXD;^>Na9sr1r}D#/jr ަ&#e ժrSev8 voH[2ՌAˊGء%c_9ZshL1Ǹhѓ/E:g8)`;BV$_cvS/q$XتwSYUK˃:GG$Qt km]"}j0NzĂeۆbZuvwƌv;>a-CPӯ@ؾ/͸1F?< Zs^zV*sWW[̈'9kZ~> +endobj +614 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +615 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 268.269 397.528 275.104 405.635 ] +/Border [ 0 0 0 ] +/Dest [ 56 0 R /XYZ 75.52 81.05 null ] +/Subtype /Link +>> +endobj +616 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 67.141 245.884 77.275 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +617 0 obj +<< +/Filter /FlateDecode +/Length 3213 +>> +stream +wI9y&]9|-=ҕxIos;=`_0J\b#e5r{nR}\vq&_;5/W uKA1e2ƫ'/Y` + P$dxvZr;Lr_efܭ5HQ ؇PӼ wX/XggLU WèbG+*`%^O.Lއ.j\1w`ڶ$ Q&+Ա"݅&:uޢFЧ; v|"*#)@neN"tP٪NB%ۑ~=Dl}Y$jO:n#`T>gT.\|=f♓!\{ X$쓺g{־:^4l4% ;g'&UƥôW g+Q)w&kڇ6 2=1d_$3S]C`e͙as)1@m }GDw u-"MoHmܒ%Da9͢3trL ^W" +X> }fp(ߩ@b6TFf3N#f[g +& +mO:7$0cxVvh?i7&j#xs,;xb!kwGvȽ:K$_PhoO\s {GA 犓k$ER[fbw9.i{rҴn3;ܟ)9CyБ:`9ϚIe FMD@q2U6T$z!ʐ`:r:R @JN<>$#2?-`i@uV +F\XyB7)D;<6$uz<%;3tK=C(eT3] ñ f.YZJ>Uy Y,y26B0gn)=H+-PX@a՝#Y>R:*  +I6";d8^$ES<#,03/ ccbRp XV7 +'gH@B.zl=9iJXx-'YiįW~Ek]NiU )ꬉ%<*@7Hx//{D_uj[ E'wЛЉͳ{tt>NgLRщZ دڮs:PDts{9qRm8 A[(~>C[{|ëH-JptރP3TO)eaî{6&CPR܅#@]W-e!/E N4ng'Ȩd.R%UJ4i% kwmVRp3|ͩEԸ2A2^-(Q']u4pr#(ԭ@5n3Bv¿F JwQ/jCP3?UwL>)Ĵy0 c C^ &Ğ~ 4?MWOCG`.B`յ+rb~%Yh xд 7$u:cRo}ݽ#U^\iqS,&^etmN!<͜Mۇb,[yEi`96gʤIFR`_ٯ PH92' PrP{fhB8&%#J"~Z_{'d9|3y2hŪ(67̏Hqc.ߚ8{C8}-@ת`^zj$;q-HoaAKr?P^ ڣ#F.yωPrf:Lp3a]N9Pr')[X5]81XZ[[i0!nZ|T|da4Gwpt _w)P^phP#6${38t`EC;@e6VPhg4naFT#U`vUk!.F.C.r4فIuC>8g[6܊ݜEz +endstream +endobj +618 0 obj +<< +/R7 305 0 R +>> +endobj +619 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +620 0 obj +<< +/Filter /FlateDecode +/Length 3117 +>> +stream +qdìÁ'CO#%u,!X&`{GQUa"B,}ӔB C \DiA>lR杗R#VB۴Fb=7/0S +s1~ڐZhّ+RF([!lC3s5 ]ьzgK7i0}0MRG%,#BuE9clՆ}cm7_;k&6o*_6q(2ad\1[ۤ-U^.-eM.\8Ip[^V/ݵsYR#z!OK)©V;i|[#[+,I^GPl|EO2_}^Wgi;y +f*~dH$ qwe4*p~ hO?$o l'aljvL+| Ŋw +3YV"ڎWzd .ؕH7 w] <"Հ#cuV&] %pEdXg @H>jixjmo'Ey-?h?*FNsW3"{'f4\4H5?$Jι2BhotjqTyAШ dDV%EⰅ>:C4@40C9`kzmieWܧmy-,/5Ӕ/3C[.575<'X{%^+d^馈j^*kEP3 /uI|߾Z6< 䟄Fz~CB{T>-ЀNҠȞIDȅ}ߗ[ʈr@o$ p:w\:Xَŏ?5 +4"ignuA_^_\GI4 ="ӺZsFhq +'aOw_̐`li9^15|P5=RUݣn +LE[a;(  v=;H٣scACWLeS>ZsV~!/ +VHn !BZ4>`ԄuſN8|!ANlY7Te~Пۊ0Ьqwr}+4m%ju?Y0 (y-\A(T}AM{g16BzGK"Mҡ ╔gnd8ޖW;;-Ry(lDM3OT9̟4/JŢ<##5i:}~DoaĤ7D&xB$z.8 V5ښi]GhkAE'eKNGIrҹms@R8ESsR52 WdVu5_oq3\@H@PTAW[ ft,'=`"<(t`,57kpgoT$ E{vӍ琉wZ.H͡" 4c_ Ktя<͸6 {K:tn!;378@k;dwFvˢk;<Һ#"p98 sCn1pw}#1 $pVP`*VBV:u̚$UEqhC +P|A\@>s(&zXӇțg'RL"5^@GBz,ham]_ie]\'SyRO*2k!Ox݌:4p\N9wuPK5NM\džyi*@륇o#F2!Ʒ4D|fܽ-o)tP. S%o|lB!נ]ZS&;2c\h_O.|QL\tݐH +@ .ee΢qox{cOZ%Vϣg-$5 +aOw@;&5W{Wl_OSeڨ ++ Nn_:R:q^47d'@G!$=݉41* M_ۏӰTeTSǬLD;};Е0Ƥ8X)9 ;6Rlݱ ꝣ2A.O~)[FhoD>f- Fbfb{XV]V"^<1N'!b 1?ը%T<U^BXIhmxH&HC>ՌwwY)苢U B!_rckc zF 6$BEK\Z%uuj Dqkyč}Q0w{!R%%HI +Jz=m~u/ O E>$6Ϝ>閙锼}_|]0V-\qUr o +%~3'oI\CС) er2 [?"_aWR DI9x4F̒f(4uz5ĞwtLš,cu1 c.˚3$o|O5J\'an?~J"1&[ +aJK^K> +endobj +622 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +623 0 obj +<< +/Filter /FlateDecode +/Length 2938 +>> +stream +a9Y?Qf1_lEډG͐BdeB9kړ QcNsؒ$lQ@]qHGN/f6[F3(tbFkG7I61lXf$RĜgvQ +kD,.26yK/Ƽ3G||% Ν2R"y_5Ǧ\z~τo1(Zd>C(7eG?+qVR%0k7 P(*b@`(GgyMPvQtOH5!L923K&tV V{7]h&h5hys|֊cSNg`P_OY?yU8|6l>]XI`Ac{n 6j%ga?P_y48v=ߴ$(;i$SO_'|LP_0=/J6y~nF)[ky՘&{ۙИrd"4ڥpgR}F=emx$@GaČjsʥiD?9'eNmZ֤(pǀrB !1hD3vjZx;d(P_Sa!ntH 6)&Pvň--.AL–WG#q]V,FT6m'OѽuX:F&LssgTIǦ_N6U@N?ah٘ᠶV4¼mUn3-~}"4DS.y,YwL r)Fn++YQ͊8s^)1HM Ya0jC㭞x`1>c{ ጋk9 'gEu !9P 9w |Xg$S潼%E #+Φ{껡}KԄ8/O,zlh SHh7 ,6U|͠;]ٕ@.%c?*?|w:OX2"{hO(OߝHO@ZgQ +˛1rWYLƅO`/fP|/Q-x}.Q#ҳdlCڦ[Yp1za/VS7[L16<ǚKI%nKVvgPHڿ"IKSqqC%, / !fhTS~F"|yCOx1iUT]WJR|#O OkZ 2 ƳSVڄfLȑ)@2}+G x껶' +|yp<P DK +=#B^=;ە41MP5 +9`9z[Aib ̏״pT|"yoN 襰rl4qgs + ^Y$[rR1BSV? }0˅ Ǧ܈3lv1bBė`xgp @F\2 $;б}|GԺ]TU,c;a oji\tx*fP0\$"pivr1F(] ׽.O3&mD];*isۛM]j=F+pe1 Σi씋^GЩLݧ^+t7:weJ=0jb{SeXΤ.])h* AϚ Q@ZeT͜-zWx -0Z- +@1F/.6)`K EƷ#g, +&kji#͂O {vB%zޟKT*ؔBY vl*v,1+-eCdǂTQ\;+l(|JPv~Z~MShTAzsJ:3 yhl${P"1am\k{/yS SbgS|v9Asv^&&[.þZ0#&Ń +d w[RxJ?$o<<߶ӏ Wj.c>hE+gڍHYoڒvjJ{׹ѧ[3aXELQk^ 3Çykm +5tiɤ~E6CYП0Rf~g}B_jBZ,!/k@> XP\,yIa $ +endstream +endobj +624 0 obj +<< +/R7 305 0 R +>> +endobj +625 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +626 0 obj +<< +/Filter /FlateDecode +/Length 2376 +>> +stream +mVaH0gozکz(DKwoU#h Ϲ0탙A*>tqqhRe<S\ja 6s;lQkt9ınR' Fک[t'xtQOh/)de/苅ŧR@ +_IfKPDKt)OLNk .jz!Y*\fty;lB\;HAFVw'Űrm>VLۨjB}uP-J3Y(+ܾp] 1 +^5$譽c0*Owd>f}[mFBJ|鷍62jM{ #7tdfM!bFƲ$>$6S91a2:?Gu#RX>f ~9Ԧ$k~nN~! $1!X4+$(UIv%V[`jWג2DZ9;>HPt]6'5@LOi 0Ҍk>/Zex%sIv +cǔv{UO(,A㔢yeepv5RLk6\\Uѥh-`V"|WIԻBKS3m֐# W擃 $TmnC +Y65ZMueUβ)r?S9T^rqsy`w[J 1GF:1 mh1?RH22t^=%fxߥ:SG[rƐVrlB[0C$}%Y<lT=yf[LJw۔gǿ8 X[us4jtRz=gV\q~˻ (.KM4꿁|!4A`Zȑ;>T"3$وUrgE\{ƓǴ'x tبxQdM性'duA_Ne=2v(?t-z[>ѤʔBIε>a,S<{O'UTA +C*vee5$eY+.*(J[;nS/5_^:^WOa͎ $O 7 hv*ʝm;1ʥa8k :UiC(LPBpy[%朙%pi;& +$#BK93I kt/QBy`<7s vwB\A{x'Abei&&3jBƽ37IرgUT7X#CĢ P|6`&Sr-YE~þ*V*|lh}=FiԼ^%zAj2ަGGUPD ,{dsrɏyyX{#ێ/@!eo]h7>ZBg{l6>} YdL2|zqtF8=o~e_t\>qDpch;0#Ϟ #[gX!PSh3\_oFC]@}oXtd_id#t4ׇ9p9[F@V%n̈́G P/n$ń!vm'פҸomEYzٟPFkV!@>#Nkhji?[ȄE,hn?GW4c(q/Eyg cRnҲ`KlSQRC][Oe] DG05뀰3넲o5ȈO[ M6F'5F?ALԹ6*aM:k2 GM +C)r?$z1sRy AEgsV!HET> +endobj +628 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +629 0 obj +<< +/Filter /FlateDecode +/Length 232 +>> +stream +4]/pi jxХ#~Bo3.n! +;'-C(_Yl8| OḩC.t@!H9ES(T#@I/8?,+   +endstream +endobj +630 0 obj +<< +/R7 305 0 R +>> +endobj +631 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +632 0 obj +<< +/Filter /FlateDecode +/Length 2699 +>> +stream +R.y_x:IdxBݡ"uD4# +mOYD>:5g1bJGZ*A^V;z1iBj+^qVW'm^Ů뗓Ѹu::__1ʟ姞L/ P BV^]n=FD~g-+vw xH"oEU&_t!Q mEf\ORGQ3>>-*7o "% +hYFow~E$2oM0=hp2p̋]$/\i#GGo^h_7Kizu=Nu50!B6E1"jLIJ{xoz6υN`A!6=/O8!"9 ǟ6 zq~] gૈn3eI˃}Y/:@̒G95 /. m=M=iBxZS=~|YN so/Jg7۶<6 Y buPA(DѼ'H۽@/9k>\֐EhO;9ݛ/VQ%u@#KXf-!KфI("A. faʪ+s"KWxA^쟩l%Kq#@6|JEdJ]75^ n 5"mҨTQ>F'* uY:d )KRo)<jՂ-aul1đjR4',Y1ih#ƨ*VS0el6ʒ%=?*ǼiSŅf[᮹FvmRNg᥃3c +¿EL^,/~nq1jK5vQ$V3G=l _5ag(k+ V(ڝ.GDU%Sq>YaԻQ~WnDU..C0U&-M(?YH@"nxB7H1D>Ih|Ϡ[WxӺǶF Guq߁3o&L۝}~JqI x`32qˣ ܁sДa?vf\b^Ν^4pjiVEcb{hѠL{sQ^x_ISffyaj}iNKi:Rc_(Sjz#%BQ0 D3f?[5XY/"+cTSKD`CvxO059.$iܪ$6V#Ɔ+M)-JD'ItΦUs]퐨Nb0$9u&)z*9 "E~(&ﭜh6cRqZ%wCx.WŋbjNJ6>V"R"K9onģ,( R$wCR40N^/R? D& +;%M3,c0-ᇪxŠF3uPAX ^}qQ[GR4r\U Z둣n {yڿP6oNH(qnN"#@> +endobj +634 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +635 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 133.179 530.198 136.245 538.305 ] +/Border [ 0 0 0 ] +/Dest [ 62 0 R /XYZ 75.52 96.78 null ] +/Subtype /Link +>> +endobj +636 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 82.873 248.488 93.007 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <73c76eb749410b58dc0df4499fe42440f99e2a5be855322a290cdfa791ec6de6720f3e03ccf0cb21e4cf164ca5572cbd4832d925e89ffc06c7a7b3da93eb423019518f93593e75261ccef1> +>> +/Subtype /Link +>> +endobj +637 0 obj +<< +/Filter /FlateDecode +/Length 2633 +>> +stream +/Z<{m0eYK>=dy$F1ǽUB_ $ +!Jq8`X}۬)XU1oZ]WK Nv-!ȕ{z(\0l4:`$k> +@KvEV +/M"L?a~yVgOaڜr.H.|̚,3w]b:xh"I8YVKMux, 7>m#:_lm摝߁R'4}UdyLWZ-ցg%y<,|fS4CzEuZ9>U]>v?NjZƵQ%|"MM$P$x(`wzmqGs}Um I0"75E' ,ldm*S3VQq:Da%LC.2][OyQՙf.pԤHBhr)\M=ʮz33~2uܲ"}O{RcvgF^>3 LQ-vNҜǼ)xfʪTRQamk:VVbZ*FI2w/]J暋ޝe0":E$Sޙ +xr f(կk%QVV +9,AP%5a,O{2^I!03M*$I=@$a^tyRϣ $&OYŽ5$B?f67u=)/mPwb ~H8H9~J@{ 0IPXrEd,U\pD=`>;@V*5}maaq7FzDfll;:5'\klUiE8~NHlS-IXp9N2 ԁCFvqw6DxMvxH6z |= !eifnsSa}*a +KZ9MSO\VU*$oCZ{se$[x]S=}AKxGQC : t׫lZR[ *fG߄ԃk2/hstd3lx/Y+@+<]'C3\qn߅"WrV VTqa_u Xp(gN'7KĊ +ؓ1vek kd L{N%ҔJ$OJ +D0C:ۯ`SݼxQ"^< h䳿gV]C9 iI^K Wc꬚af)Ztj9yEp1bu}٪zR, p <^w7dr8Zpʖ@޻rX*}vՁl~1(M}޴3ZFF_ҹIqX%Se"|֊D{8 ؓ{G->6^% dn%)bF4YvhpvtԸTdT^dkajmG Yj +޴ +pb% +NfcVn0H+ !ny'r୲rze|",F +*ܹ"xUPBݶV"Raj 4<Z#ː ze =N&mj_ONLHc@ڻjEstf#]]_4<<쑞 +endstream +endobj +638 0 obj +<< +/R7 305 0 R +>> +endobj +639 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +640 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 234.632 537.927 238.618 546.034 ] +/Border [ 0 0 0 ] +/Dest [ 63 0 R /XYZ 75.52 83.4 null ] +/Subtype /Link +>> +endobj +641 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 57.006 45.574 105.545 55.708 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <26575d3dc238c5242ff8689eaa0d066e9ccc733b3139e4cbcecefbbddffcbaab8cec15a3926fba0063> +>> +/Subtype /Link +>> +endobj +642 0 obj +<< +/Filter /FlateDecode +/Length 3558 +>> +stream +tlUv{NnLg ȳ04XB"iOrGlzЃ8Ux;&bpΜ-Z&j](NAtoV>u+y:$ic]F" s g8DAc_qAg-m5.od=陖th` D #?.~ ܕٺ % J p"!`s0?gU* +Hu!@q-. Ũ{nL;A x#>R~aТRd"~ ʈwZHbϼ$+J ||s{+d%Bp^Ud_=í#vr(ܘצ'.]~&pSU+7uK|Ѳ?70wtzjmx?\̚ߴu}2I'`Ɲ>$; 9v]ȿ'7\tIpn],ӬDAUE1k+ ?#ZF2\6jok:廙zex}OklKD0wbirl[cntwJD>cH{1="a~9V}vѮ^\x"NO؟B2VІ,> 51}C%AE)'N"k>S;qyY^ P"0r524ּNRWԸe1e ܧЄmP-WVs5|B+{C%+v3R*`%L SBT?9DơC4"{"f ?흂$KiEޯd*0v5f|r=cAٚa;}1{4"غ?jhϙ~`Z7/%UgXlPv.jzе*[VD?7Bʒ\5;R~Hdz @nls߾v 3L{.%Z*>*}Ω<$w)1"T'1'=/vXϏoޜǼU64\{(2M4ӌ/,ڦR{O ^GѠp5ϠCr)+c+90`gc5StJNa ~=n$A~rij!->9 `];?С\Gw&E' Fߣ߰Js{C̕!(ؤb^ i֔RX"V?~]Y*/ ˜=kg"m>>T9+ٷ6E]uT]iS6\)`U:NׯeEߥm^Ib鄬#ۋPxL'; .k Hdxt>`oj*|>M:@K'6/D&bC"hmPn{ o(5Iա9t@4c PM۫{?1>4wJv&|ƯCp/,jCgW`}1%\EHrhnܭ1*N"H ݕ#b~C%%qp"p*׼CsL){e}c +KY5i`@vDEVa\s_jI{p;34Pn#ذ ] AdV +ILᱩ˗ZnƟߒg@coM|Rq}yHhӳU8]FCo9Z,aﶄKoMٝ~ȃ؂ fY ?GG3zrd@W$.YA0jۘ"BQhtdTYfjNb[tNmw7˹0PS6dp00HmAIkKH &2u "G+!0qx r pw,&yl'[hB[ B"Rq9nA[תyYgq+ٟi}X/uw&\y,]mnNq8^+~g&fd7#|! ?,eEwAn'eZ6yd[3vobÆ=OHQI%4RU >Ϯ6)Slq Y'8s(&:-lZwfN~s#%w;@8çة­rjV4^|,$ԤZW:R|usQd<-,G;T kL^@ %PD%1[OZB,1[Ɯ?AD7oyRݻV@f z%oꋫ +%]Ø=d,}+ ùBz'> +endobj +644 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +645 0 obj +<< +/Filter /FlateDecode +/Length 2716 +>> +stream +%jR烛/=]Peqk½;J tXAA"0ҡX%ѹ{#fNv^c< }ZbVuS?0`+?Cs:qN_)=j$-3Avn!&\ds5~tH(85hPQg S-kTX\)ȣ!.bHeϻRSI58byq"~@.RD; UmCO2ɜ"9ːX?_aŻO7zv H׃t0u@--u?OVlXBgO%߇ÂN^+SIDd<+K8cV=$~+;[u, A:w>YNM`00dPRuNX@g:8QdQgOrG Ӿ +Y=BW}OƆ52+߂Bp{4Ѹt pv>DL8p>;}Fֺ$!~~t;?+,_rvyGJ79|4^OW2hAO^}v<5t +1$V,6ucuNJU{K̩ƲmxQ= oNvZORA,Ӧj!ש[fnQy$>qsԾjxR[ba@Ո7֢P}.K;͎҄C&7M;"sB +Ҡ7604W2X+jTyIr&YiQF]Y_p^)l9b38`%<`'B.ۢBd)K{9WTː~MAt:]ҽ@Ԫ6C',$aUc7d,;P0y, 5n"u&XajB7ͅ(p[msG}_]9D-VB넛(&ctW&yܥ]cA@k3c7+v3b!m[5@|Fwb!:ToAUTP43߬'bn:ѓu' +[>=v_ mnOū^OW^ĘP o+wY$cK4!KH[ۮMq"N}Q8fܡfZx;V&u4K5y)ݏbirՕ0$)ZC o-=Xj T,s 5| [L+dHfal4hRFHZ/}Մ_EXJ㉟j9@I{8F7'jRM.eMz.j18ʷ&p%s,8=f>*ZNW?52BVt=f8kZR }2^IGζ8ܯNӟtM]s")cJ̐8#>xH*X,]^5J1l@uf~7RriSgw<9v(\"3LӚR#覚@A5Qo.2p%v³Ccsܩc +Z|t-f OuvW ]%ړ@Ic:i #2`>VotaDk΄;OV!;>ۖmela1c p0}~몛f$нI$dF)hc*߅ +BwO> ,b t6 51-e;Q:ԹQO5Y!# 0~[CWX0e"l [2%iWCL$AVfO)K91ȮwWj/3yW @O{6gm>b<6sm]v"d#&>#zf{o +EY3qu2lM۾Xr7mXnX3Vr9.'/v&suQ1@ f1\LwP³&gn]hwڝ K%"ݔLesgQa08ẈVh,BۛQKu[jr`e̕`h\\%rE#BB"u×wP{Q8|~mij5YA"VR=Sbc R7a|5ې`ܐy֝C` bBN4̏~mq3 !ko +endstream +endobj +646 0 obj +<< +/R7 305 0 R +>> +endobj +647 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +648 0 obj +<< +/Filter /FlateDecode +/Length 3093 +>> +stream +ƵUƻԸfH(|;p_`h$BڥIFǷ z$!6H|<U*A\˞"ݨp #ѻ5HIX6S0 +Bb`@QxͯPg{䄳hM %Eh;(ՂBOL=s6ґ ߺ_pT4o2>zRK|Sm:1dIn{ N XFXPs- -1>{X$ַDzcHk=ڈ(Fr;Hzj5>MEqQ~ٜ*U/mBIm ɜն?I^Q#N`ㅒY~d3㼍DB57v,\@.6@ +~WG?qm.g*8FH͕$F7 SUgG4nhmT60?)Kunt]̀^`ѓg|%EȖ =`H_Հt0]$AsrY%-(7|wɧPkQt'8% [a!\T?m{@7C3ŧNEҋ<ښk!?5m^3C@ȅ{&)zRqOjvM0_"еd6nXӇ)[ĴcRz|:RD?#VpQE$oZM#X 2%?h<=mcgN??>ʁoL%]I} +F#x~thZ 郤P}OZA:8j:5B_8~IKl/r)L)ALPzmZVVGJumøljc5zɇ ʷ7D <(,/8T5,#yٞQxDkW?!~aDﲙFnҵ$. 6H;ŗ=3w;V +[%@ep/lW=SyǗ򰠢Fʒ-θXM~;F >sZဓz3?%NΚ]/݉UIDqo4#)Kho).]q|'Sx.00D,UZOmȢkp4cZ&q+93–lW |{F8B:M0+dz%tw[sF 2&Vr7<%k}h4b 6;4Qqєӑ{_x=f(S'8uQKL],hF8ΟR坥 7bS>}8d .UE4^Ճ$S.ɦj +|i4P^JD*_)ΤfoᑎIwtv˷z&̜|~j#@8턭I1PzIߔB5B)[L5/=FmmNejIgOJ C>.TXy"4X6Fwkw9ʹ99Tkօ8Gaz:xwߢQqTq[خ׎ r% Z #j\+ zcuQe;Bon>9[M$=ѥS7/}~=[Da3}! u-'-_4@Uj&ǵUťcl%_hhq"MYaErK>AbU{٢|)׳1wSn/Wh6UkQׄƿ3ٌ29iG0*=`p"ᚉc#vTmR B%4>yn4M WtهQ y"<&HSS\x8r(K9-D )s.Q)TM.: ծ|o%j/d#,oaOٚ!]q%* jAFٽ Vg/ԇf W@x%'4C³7 l >̤=EZRJ>YH6ˁ ;4ʡ%b:4<_|hXm}Oq.'ww9:N6Rp &7a$%/hFsW˝W@ +endstream +endobj +649 0 obj +<< +/R7 305 0 R +>> +endobj +650 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +651 0 obj +<< +/Filter /FlateDecode +/Length 2881 +>> +stream +XfI{mh6["7z..dj*cW1%NkZGF>uyLyh[ +K4uN3zaN7WR?iQ:AtFSL"=|BhMNӏp/R[״cudkO",@  m>kLnSggkOvWp%v+G}fv'wC(=r.FJU" ke +R_yAp 0.KX$Ǥk+Шf3AZ)>]/G7[w9MOu612x TQ}V4&~b~G;/%-!|z{ OGaf Om3MkhBYk@xŠ>It@k +9mX]0K6ba3^Tgrn.uc :4v/GȘeRH6ÖA,tnՐL\B.5=7UAYPm'ziiph8w'j$nCVX0P?5UfqcdZQNrΕhtYVΞ5,9{h2 @*#!#@E0*pAƲ؞Ў~Gy6ۄ.^ymqŒ/չּ4jx^%>,Gbܷ̽{ +0PE +wkf7쬗9L5Xu򁨃xYb~lQ8e]s[go +_g0Y,patY"o۵"C~k RԺK δE'DAm߭|>_[+Cz$̭|Y5~.{xzc k6/6Ydջ"| +c]ƾ*u-7) UP׍;2PH^\pѧEGc0s~  =޵B$RS}5&PEDUި3.kg{6Bʙ?޽Ӝn63 Kߗ+_Ju7 I`.q>Yuu6]DB{}WN ;Բx`L%v14>C܂Ij$IH,9M͔M&h~†B:Zs e#ng1BpApWD>ҚѬwߝ +I- 2zT "JVmD%]*1i/k۬T#pE9ciKTqym]jƷlE=9UlO Lҍ."űm2i&B +tX^17Z8{䱫#c,A,򠸱z(>$oGV,q@@TѤ,'Dc_t0ƶ<|ʔe(8jb&z\@U(xOGuZڠfx ,˩qr<-fqr~\َ߯Wf1&Qoy$c]lJ> +)舵( i(V~R8*r?` >Mzks85>/Kg}":zMAհ][NE1w^'Hvi= ho:DWcV)%[ӖPM75JF164Bn(%eO0[`ltzUpkJ# l/ c( 3R/y˗/jrp/DBm_Ð*IhAO]ydlƾ8!X_;n/1wwӾa4^ipeE?m3VRRkCK>PXlkIg>/{s80"SOxX &5\~it}5R 1%c-{MCq Yf&ϒA0 X`$S(ٱuJGup")`* Jn$ +A`쁷+ҠLA)]gɚ1n%_su;|J0LL;OU&g1m0z%m[m0EI>aO=tAwJkY~:JlΦg4-(ָSc/jgq} o +H8+oL rY6-"l1'ǍD%H_8u- 1t9&!HͅK36ڡcîl\ Q*2X>NE$Pl8v{>}6\.9:j`C?, WUwVF5]؏.t PBj]ϋI{* 5k&FQEī{fᔿa§fx%@%鹋"Eme+˪`1iY82*KT&\h5/e9pz +U!d +A,jIMMS O-NA,ݩ>iVGD@uow옹]g^e$ +,4kؐR5' +#ʎ&WR *(Kt&}K߰0wZvS[ +endstream +endobj +652 0 obj +<< +/R7 305 0 R +>> +endobj +653 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +654 0 obj +<< +/Filter /FlateDecode +/Length 2850 +>> +stream +[jUrn]T1CEm'ߣM) L7@0y1 $\lck*\NU_DW ,Lni ɸi%ѿPTdP@븡xc3TM +/!ĭ~o,Ktn x[dHnE_mmu6$)\$Dq2aD'_K3OiIdw R2NMi"ߕ[Е YF*\(lvQ\Ǝ%tT1?ohce6Ĵ 9}js?&<#f4,1E.(O1T0af)mG`Pv"1dg^'xT0?ۖ!\^(x!h@|n+oBwKIE6DLTShyIح $K&?5oQ!I.xb:ȏB".U1ھa دA8F0ÓGP&ũzWqUWȲjT6 ri3KwɗNJ8[M?!Nb:3p=c1fAcoqUaO"qq6O& N)3]7O;4~aե +>pݣ4Ds.˾B53#5:q|n+26\2Ԑ)laԾ}WZg]׏3pǠ6#v~d!qosEnٿ}PˇbDs^/vWE&pkxnLE=X+u!('OrTCg+>ȗ88j IL2a1BFC3iwe[mZ0 N2WX/JjF~->d<2f1gڽe8W*n;҄Iϔ>g^^Bx&WA=_! _X8 C eA;œL iCK&;|gS^'j ϵiͻB't՞VXH^_XN#zswMM1ڻUEAXr6!9*B8TD!zI_~F՛"EaUO'dSɛX ܓp${GbWEp ~6@o<@Xg,p)d@%En>z(CST2-:~ހó*^& +x<]`e=RiFƐN'ϼ2xVYC.f|wN;ȕ&bckZʃy39ӉM)ހj^zy < ÅIj^?"F +endstream +endobj +655 0 obj +<< +/R7 305 0 R +>> +endobj +656 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +657 0 obj +<< +/Filter /FlateDecode +/Length 2935 +>> +stream +zFՅY,3b WE1bY!5V0 + T?g˖Lr{;ħy\#3c'_zֽIR$k F99N9.k@u!c+'ӻ>x%QLg ]&j&N8Q{ld6-+~7g1Ńtk[6x eSŎч3,of +O *Oa H]DdI;;z?Qen1uwd9,^cY16GQ7RaK uH~_l܎}ᘻmdxD' 䲊5QM0|mkJN)Rb?x_\LU@c`o "𽆴<=V^w +rx/cLV[߰ )b_ ljNjaS @B8JeG]JF) 9NJ i85] 2Tgj\$a>ʑ'R8 Q{-ZsyO PaQ#$i<0x垸'mBbh7N{-av;I?d! z=K@AF7S#]0bC 5nG|o/1rڕLOP=А +* +NDيrwlbNdqqKS RǺ٪dS;ѩxg(i\G<Ցzu>iDXT(Cx^1t uvmmqW9G]CEDNl@vmC$lWJQJF!3Tdwӗ5Ù+ HpYHLG f>-j~9_1h1M:B$q2J뷁KЗW:**(TS[0E';UP\[T7B Č@dv29KA*(%zP:c1eP*{3>T'E&M7n%zsx +22}.Ȫӧbjjɿ{$bW2!ؽ}ZtZ^(IeJ_p(i>F,oL})*\[p' ++rxq7[nH22ӳUI1W> ES @Ƣ7ͤ\SJ;[_O?g +*.r1g@d r{>w) _ OwޮH+hP6lC^wāTnaKeHrczp{:"YaxL|/,҈tmUTZѭW{٧lԝS O7]򊵿yJ30?Fz~i*tBZߡ>˟\?Μ:52p`=zvV FԔ&׷;J۩(=DUm3h +f\i@EXjRfp;όOX:ΙWڣ]x% Hꅕ$msM;2S2l2yW,(q;!CwI/dOsϿl *Yv҉K;3aU@R ,AGg6cDK0Ai}Pg*=H4Ue0]NC2@,Ao/~ਞ\q f)!k}ZW6j0Ti{ +l> 5i[_]7Tsn8[*)#<2t#B?]kfQsªxe+ ad'ژӹ-xz2$cJOL:^\&}n?^kk27eBX|xBi>Z]~4}jU%9d=h?m՛.:oM H oA+:sҎ }CP!/`#rE<{RzY/QoRZ} ;O)Q-l!j[,Җ27%\9 .aGjwfL!}^:՛ϧ#0-K<1k Y:>}כYa?]^wAxY]s +kʚS?/F1&zq|-/u'G槶*a`FPsױD6Cp˻܈%Տ:4]gKq_Yw`|iR}8C 5iQ`)g> +endobj +659 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +660 0 obj +<< +/Filter /FlateDecode +/Length 2590 +>> +stream +aB-ˋ3K"6[BX"w R&?;Kf('ZYĝ͠ĵCE?Xw 8jݎ˔\kj{Mf~7NXbDuFG׵)='. WLi,OcF0QTlgh +2 B\R R(q@w\ *+s,(]r1A~\=pcyq +x Nkl +'7ZRk૞:0e&b%F}| H>vgUPM,)j%̊l{^qз~p(7YQ6]&༤&Ev9h TAwn_lS#%zv&+sIJy$-vj: ~}2|qimNTx2Y+ibZ;v\?ԑx=A +endstream +endobj +661 0 obj +<< +/R7 305 0 R +>> +endobj +662 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +663 0 obj +<< +/Filter /FlateDecode +/Length 1778 +>> +stream +M*5%pnߎd~UL= WX('Fi5S[l)M@m@NE*B5.h>a{ji*]"{=6r+RAz<:F? +A\Rz2Ŀ(_#-|y!=l5R5a8+F% yjp#%aSےcSΣ:҉4~/u`-@&|xɈSn}sfyg'5uގ8}ab ,B<$5HY! ~'SvkآrwFhY/ ӽ+R Cs/Vdn W~]U(|#%WM'3"''Z-c}j6bv{!vS"0VQ}=pX@l9C/Ak~X{`3܎\DW e+bc03:rr)Ծ`hΕZ"v^O8Dk,¯4"Uɱb&ٳνm){oraX7V|ˈj`:ltQC{11-~s?[;52vS3UjUM"jCe{<4 3Gě%67BWyXtEسp k-8` |8H;R; E;] t0#%}#W=gڐ\Qj)1?ICwV-Бc,l> ἜKYHo KTX,\l3IG taς.uL +&!M>|r1aoja&% +Nx&ϩ^vQ :MF\nowRXFSR\P⭏N`0JʺI~g^,`E*qh+~Cw!r^v j0"W_C_哰q~\H|0O`]uϛfr[ϧ+kY6iGIv7T8=qb|Д;3]r.27ք'ԃAĂN`CQ WCy-*:N2:b6$R@)7Fq.F𘅮ܵ+̬venPԃ: +:7Oڇlݐm"4&/Qq뭡_>]2KװOD"ХvTGyy#\Ąy2p& ;XR}N xL\+$`@<03zdcޖrH!cC5eavh xu'8|LIt +\p,UIc?~t_h5s{Tf޻gO1,hoIq- #:<U'yς +w*4˦s٪5Ir߹: Y]C_d*@5Y+b&!R.Bs) ϭ՚8q \7Mvl:fߛ5y\Jmro "@\(}۝ fES&-t{,p?0zŎC\~v0 rA?ڲRLXvU߾?i +̼3Rߏ,oMQS#Xm&no6-@ Cr6>gy +endstream +endobj +664 0 obj +<< +/R7 305 0 R +>> +endobj +665 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +666 0 obj +<< +/Filter /FlateDecode +/Length 2732 +>> +stream +@PT.ٳXc\aqسPL9KBO ('mUn]WV'e?3FM}tz|a?fkJWXAx=+ +>QG+Hg֡\{J7a ] +;@Dl\MbԂ&6E>8lb֙T TUl݅P0{ F;`9,{]TN]?ť W0?LxB9-8YؿSj%kGtۭ??.9pS;l/иfʈ诌&$urlj3ޥPAs`V"cONc)6g2@T"6lcb+J (bDh |=7<3xP +uKo쥎)rHMQIj$uf(t^}Ki@Hu!ْN kylW_/=aKziy"߃$HsĨ_тt4[vEJkXBv$ +]?;r75N&i?տT `FdsWBq3gc DPh"vE ?$UQV!Ƚ +@c+ ;ͭL {#F4CE8q  O8=A7j4Kv{51vh:|De +̗ʙgAK!{rDM•9e \͈\\"zx_]ѶHY_ݻnz'FˠZ.ŠQE(_UC U[8R^˖dn)`&ho=P޵l߭;e9V$CׇN|)!N%Yr1X͖B9ՔpZ~I7]!ۚovc%Ax*V*O`^lG:^?e#fBU\@mxcue XL|CT%!g* dF{cSX6}WW^Žٷd +endstream +endobj +667 0 obj +<< +/R7 305 0 R +>> +endobj +668 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +669 0 obj +<< +/Filter /FlateDecode +/Length 3752 +>> +stream + ,$RC_Tάra$j0</ +Xe%E~c_Uo_,vULMB )W1 Dn*8WV>ŻJ˜i L{!{<+O%Qc`B/V&THQO"QoUɗUH]VֆW4 dWg:T.R&ZQ72AL9;3UCeZ2?)"4Ko$NpG l5ЛNVYڗ`0؁hrd9FI5D42!/b_fTc-JvO S 78;tT={hƥ4~&0&pnEOo #FU[- "ޜןmE_j%.j= z"_4Se+?d Sld)/\ex9l!'o\T_&N8 5^ <N G[ر6a!-ﳼ=8O (S.zG:URf>W-;Yv +@<1h?IO`|߻ä%u菴i`"|#`$,?6BV||T2+cKRҁH !sIKl{ɭxxy>FJ pʕ ْF:ZSKnm`!ۻn8]YW0uhJ6YˠxnØGd[¡]1r3;ju6/ܯC{N 4 QDB.'˩A{&}yaOQ"`Vz}ya="Uο%D\14ַ4"t<51JPV/:Ȩ8ip:a_k^j$tH 3{AX0 #n.J Ceh+BR>{U_tn(=Ib(ǥ 2dscqim+ۉצ(t\{qD?4- +29;Bm߼so3v<6mg aXӽU<~_Qas;(.1m" +J"oe{,VLI!Yzei< T-FǢbܲoo3^ d)$K.7ni=l Id* ϱf{Nf])!qy$`u ǀh +.np*xs4D)>f_O{I#*G#=:!gE|UM:P2dܱnZw2j`$zv+Q}qdldr݄shI䒛CFiM\6}D]}_\D{m&}ߎ°|3 Z`κ3`"=-_@hDž{3J-[F  pf2~Xq->aDA8?BƇg_(t4Ov4ȶe (PAOPuDk5ѩ7󂧺A++aѳ混mjw?s"4XO%maqp~ɵ<ҩ($OLL '*Я7A03C(]uz6fA(w@-3 C2Ʃ;d,FQ*Ysܿ&'-esLD:)/oo@)enG$ 0:/%^ٻyK.GDFdt)r=RyG_#:zi@MDv))4 ɣlTt1,zxN\ՅaSK ހ+'Q`+}(7xz5 clDᑽ(RŌʷ-w⸂ÍD6F%VX3,dM-ᕎ"#Kf%SL '1&{3XTw*F)=w,X6ϑ H>m! +)?\""JKww<# ͗n~x^mꬸuN1>?tίn*mj:Fg]P'='Y4<̀R A*w諑 2f Ʊ=~|$ެH!.~&֤$ŮDގw ++*dGwɅ)\_Sk,8G?V[+'j¼/懎z8=}-x+꒼s2v&1ոg]"H9u1e{}}'Ci^AIR2QUwA|r/dݵj4_khzٴ)F􍷱qQ?nܺS֘Dʅ2 fݎj=z}T5yt6;ؐ@q46X*H1&#  I[F bzN*HoC9.DVf1m@]ձayϽ;_Pؙ. voTn > oy6 ymW/p$Yr L +/S/[fU&s׀8T,lM1@^\Ҡ0JmK{2jn\SVϛШ¬l= hU3*&U@y TaS CW uV]EClOR̘gb+ 9kI! ;v|J8274*UXK: Jx0T?:*6Z +endstream +endobj +670 0 obj +<< +/R7 305 0 R +>> +endobj +671 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +672 0 obj +<< +/Filter /FlateDecode +/Length 2908 +>> +stream +߿;,]_]`qW\d\5Gr)^-cW8, zz-v26 +~;i NG@h9l¨91*]6f)1{"JSgݢ0Jvu!$zՖuvˇxQrz'WVSr$^_ow?5TمX1{lFH GhOA|W 7NŪ!8tc_^lJu_1&d D <"qU"~ 9Ωq +zGcxW?2@pE8FmG_D`9"6HKϺ lM1`2hAtz^?h>\]/㱉 +wDj_-x(cƏ2*wPz&vMؒ&-wlY ]=^SSl/ks3>SlHN` W[@Z=Ng{F1>k +lC/ܡ~fh7Wʳ:=$?:^7׉2tDPH.k:>^?>{-` K4*_I(MCɲGR*- }:mЏ!>6hx6 + +=?SM|=6' ])ߧOy E@IQ[L! (%y f8XluҢ +8>,gi%Ƿg; s {RխsdT=FK|,"ܯ hRr\Пմ༽w틩b^; g Vqgg*Rkƹ*5oeZ359I +=IxYHi]'<`9K+}Eo\b%  +ڄ2|lB~Y2dQRwpEWeNLERKe;I5K  +Ue4`z~!C$3f:YC{~V+D7D)"+ph)P|?{<[)uynԢ=r]+TdMj!Q69(  J{92mi@mp_Yp,1nGunSΧ q엑/pZW?W^"T|P=6='wqУӣBBg>+h%7=?9Q@#[a6ŷb%VH + Pڵ:MhLcdѳ;eKD[I?jbKMxX)kPw4LytVE}%CI]sG̤;)k'E} ~ԛ\dEǭfhhd!N%Lad%ERd'iE+1.> +endobj +674 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +675 0 obj +<< +/Filter /FlateDecode +/Length 3141 +>> +stream +^y6G +-Jφɰ?:+V/i4-yN//xٜ .8GcreiB1eidE:0D YL/N@5EtDh/ +cԱXS"e/ՏcGq|$fGaaUy=FC\bf G+w +g)NASLH4~6D`"ZBM-zS +(FTwl!"`Ȟ |ʬjSe|V^54~R0ׯlAרjϮ)j`;TDhf*D9QP< g1#tx&#> +MFk wu+mkhLpYBG ~",ÓB9SG򍟕< ZLUdPy$6Pw2$K\JU6"v! T69a''UCYxkl^SeE绳%L0VT&wҵ>ch:E;+#.MF +JALz"T$r!?>? R2i=]-ְޫȎ3>SdmPu(]-YNt '8㿎TQ~ߏtL+~;|ҨA昙?l'؉D*Jh6BDNC Usf[&+ MiHTRl%A/ePlW}hᥱ<R/ٴe}!cW*\4-x l:H\O%AZ()>"+GAS]LL DH;/{5ʓKC~uЪ8K}ceH:<`\XVVTaw +cD-BzCXJ*Rr=S ZKTW-qn%&H}"e렭giM{0OM?3p|7h[ZL_)Mw<䲑,L&EDX0K%ԮyDX]6Fqr{} !Oi}KX k +by͠^ nyj@wMZ45d^Z$Rv]/&[z\ uH~vݗ@AV"DPk1M \7k'PvDcgOT?֎84b)9lGw}xZPo!Mf+IDy[ /uӌOM(FܞW٢(Zʗli*k,:~kRcVN] K/ア˸D}|NC="e3~Dg}Z\C!aP~V߆Nc qG]E>glZhiz$bI&ֶ:*y;F k!l3Rorg]}뎯戡U|rBsSbU1p(- P\DX̵DsD0gϱmjj.Me`ذR@XY5{BB%i1CeH +K&&TCe[/rIg[<3]PE˽ 傛ȮT :l yn#_o}R%r5~neb ҹc/Fag{GD,kC9Xn]f(Nq+f @%M $ƽJ#*M8Mr*&a"qf)."B&[IsHF"_]>`M[̏|{|Nu0,2ou} t4[l +S ӹ^rGoKΣ]km|:ޣ:Lݻ8QqgSꣶkl#d1YhֽTM7L~YiĶޢa| Ր4`>g29}Rx_g2 +F= @6˗L||`*eh=TSAfZH dHDΏ. w9 ٹ#CQʮ쉅r0 +endstream +endobj +676 0 obj +<< +/R7 305 0 R +>> +endobj +677 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +678 0 obj +<< +/Filter /FlateDecode +/Length 2692 +>> +stream + +$3m?jb)FkF91ns3& {BrfQE悆'98؆u5T"p%V(_LDx.M,| V+~\#֩wiZ͎M71d;]֓<5fN% >@^JGU~u &D訂(edp7Odxv/]WqoBxUkInԂL$9B),-rӲ Qonf~ +𧃫sԱjzxsj%=oMpt dV/YѳYw 7XղC4<1PqÑC%Ûқ㚬н7*7z'*"l1MÀԊyǁv,pb@eA}m F6Ki*ڦxC;2#-T*UG -ZIQaD` I*S̟F_H#L,l^錰W[;)=\?S-˙D80)#:|8r +H=¢j! u5\B$~:}kEഖ?52jT6t.O-xt"7 6/R_n&*dB mڀ +laWC}͍^fj[]UX ?z-5M?fYЙJ% =ng4kр:LP^@2<1L$Ӂ,E)TNݹY|c)w9@Z5@?|E4/+\`ҢOq%D_N `ݱkR†$Db>yߤþFQn=rȅ[kMv1I7:k`[B}X*]؜J'1҆"?BplpDNR+m*)mPy!$cHhUjL)$kj`챚SQ]lb@h^ 8ǿ#&D+}1M]KTwhe@0\/Zp`:&u\6-?!J`.hGA3ap@\E HՀ dc%iIl>M-YL?px0VLLj8I߃fv2iQ@l7rֱ S=TSf[t{Ł0&;@oZ7۩@`N\ :w:As%"KaVBZfVV}) 0AF?9`GasJIEBa爑`Y7`Qn +3_ewa&Kp/{?`BT]:_'c] Z\ g\7<0 v>=9pk˦]֤&~NŘTgnH@6^u sd$)op%pCN.7:Qh /<졬0Z^%'^T\1M}w=̷| +ڙQ:ՀT,w6%G'3eKFL.b.p!XTLw$XWn7pyUsrX[YDWVO~RF^|+ꦓ1@񛚥yدNPU{DuD@/½5PI`̻`6AaDzXYp$)?U.K0'prVXkdG}-?'ueR;[n~LPz[ +莱X-DM.v7ax拭c"m[ O w(38"2aT/t!%MLx~|mHj|{MnR8qI[zHE, N݂&}`v|K(Zx5(@H¥G砭CC'lcplWZWg}>j*X3 ,9.e6p HRW +i(7M9k1!|MB) +RHi!#'(zYŮӕ#ǣvK*i1dZ庚 Ǹe;&t"zf7B`FOq[ZA1CrDYhzr|%6 %aECױ>pt;d˪-Ѿ(X"Fߡj .d +u)@')hUz{C,L$ (<=Rw>{eFݜB\\$N]Klí7Uy +vch2 +8oWp6 @k2@d3&U +!.;11bЪ<ųoXͪ+|2VϣW'㰈/k(&q_,iDroMl`=Up sdgU[0,f3+gkH;lPP 5\gbM_,$}M"Pjva;ɒxhG%ׂ/X*e@εZd +endstream +endobj +679 0 obj +<< +/R7 305 0 R +>> +endobj +680 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +681 0 obj +<< +/Filter /FlateDecode +/Length 2947 +>> +stream +JDRgS^ XA/`K ap$҃aA]mUCFJعK[zxd>{6Z6Rȉg5^h^~lo.x"7-zf LZS`BF` Oum#qF G쓟rTPq23 %{Fcq/ 4: *HuJA懲([<^+%v1N2{岎)tpwH TAf30$ݐequ`?Szj Mȭ Z 8+- +_RVv81!9㳒3d8ҒI;r͎7eL{X '_VrUت7¦;6Խx}SYYYX_ ]umяȊ}iLAáU7߽`!^G~.B2 +?VKRD52h< elH<\S>WӳQjMj$2U>:s2ˮk)TEE6m=I `v,屑モS߶DXqEF\!_b58e0;A[KWpY_kQl|D O!yY?t~n]@Gjq)bI|dF8C_&6C^CUOc-9S@R-rQ%s9Bʇ!dktķ]kYS}#B#=+ Px4EFń`W8(tںv*NA (ҎĘ盕ٴy[\Qr, +FJm):@ sk/J@!]Z߰W3V!Q)Xo%9 tehv:)QEcL3̌ |ޅ Lv(A#uYtKtO<"Mxa?ƞ:M9| +qUd1)"`]c`j.b6(+*tϣ,4ޞ<j ܹ. &BA#yHtz8b*Ts~w$ShW 1c+Tq6O4 `n 1et8C'Q Mw)qZֿ@gܙZS^ur xKF_h8U1AMeH>$gbc43IuyPxW l^qNVp"HͤVPp9KGxDލQ]lXh´:J&X߶_WO$ԝA cџsHCV=;^}߆F塢X&&FQs8'Oukx)vֿ߈]'3/Ux~;0Ho~:f~"mgWʇvS77/ڳwE(l0ҭw֨=-5Ch fEa 9JjyѩuSDcjي &xZުP+XTE#ǶiY>/E;gaoc4{D4"Vh0d +}_]S}O=Zp +D#aΈ[NZo5˷1g8u)8ׅv~ dْpd}82Gg%h2q13e ">Ӎ_8QuxhkpI8r :x4O'# L6h'cv-@ &PG8Կgf3> A z;v:4r:Kp J;&ݥJYx֔0ܠ"o` Էsʼn:=T&9DEj8>OMbR[]QdwEF?suA5*B\'$`٪0֦zٌ*i&@+G"t+1jj91w/f홃ܯ쁇 N1~̬(V]x_`8|h~fWrtRJ&;}ƒ;7-qhl`ӏЈ9K8t[_ 2{F+&WC(f#1Q"MH5k' +Ώ6I0|/ RN:E +Sdkfvg7ѵ bJ NC]8o(Gx0)+=G£ٮ.aRU +11gߒ"1=⏷Bx0fH吼MHç,2_/2,.uQe­QK.c43zaUBp˱zH︑[f/՟gc#TsXڡMV>YكO zV@7'5\-Vm߯@C#rJ/#Ġ*ݴvݍ WR[å4_~i!^db3łp{`q,DTl!sOSg3$꽣zIΚn̩!BJoUbUoa^)`Cmԯl K +endstream +endobj +682 0 obj +<< +/R7 305 0 R +>> +endobj +683 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +684 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 98.636 204.824 233.868 216.984 ] +/Border [ 0 0 0 ] +/Dest [ 61 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +685 0 obj +<< +/Filter /FlateDecode +/Length 3506 +>> +stream +^׹ v9#9)fd2bt 뱨U0TXz#]L__N<\ Hv^qA+)r`&r$яfU5% xv>| X0I#p]LjϦ2L~m$翹piAqΌi?kCX"FzFJo5?Nj^uIOpn0J #gnpTݷ,vсy<ٕ +. &L' -#)߸c`جO͔)լaФe3YU>2 4C8 KSAmIŋs +إfAlטgGsmܰpPX&. q+´›5A^ T' IpqRˆ.7N-]0d#+]4czBaӞk,|4?=uMJcSHNb[N/n0pjmBr{M7+?lz'KM ~?J@̢ U,D%s@q0:ԒoQ ;L袽G$rY_701=YSN*7>y1,d9Tkxri|aLv LygU#[|mL(Do°)Eu0#oYXQ®B5x.|Vz=&|.I^~ z(h' 87P:|H{o0lE-"ьn'.TT57& tJ/v,0D[tR{( oG1}l dJRG+v 2iU_ 0.f~'# +CoĤH";lb Ƙ|AB8Ui3Ep0?4VVʂm|H&!H+I_g@&lٜDZ}L;-Œ٫?b.)!C뼚PbKZ+x,z"6 b}!Cn쵕< LWczhXyru s\|ʛY ܥdG;D0$$5MR|`@mj<&CCL:K07~҅uӡvԁgp_E%&,r޷^ B',Sx?qoJ~( wThb*sػKJ `h.IŞE|]^:y&۲7L ½ _ q) @ g%d2 ,[1>5ش C h}Z>cpSؾ-+%pbXb ;l$‚{-#S+d;"FQ9?hD&AU\Dj'.xh4%M!DL^r6D}3íyDo7lG: ȓ +eў/֤X?ILx}կixDu&M)RѤ )DUwh 7gA_yak(0^~fFS2Rr<"3pX*^y8:}ksr;Sá_fN18*[1Y}|2IpJ1m(8LtjFT]-P봫..gaRS~Lȯ{v-Eu #3虐1gWɺq\;@B\y\FIRϪ2.cL\_裈׺W\k_IW:^fJxOa d )]MMG}0X_ȣbeϞXG*DWlU'ȺFP;VBuHz|602U`6pa[kVQho]~3J50*܏Dup,=*Kީر/ +N"45c'FR? E\zAa/sRHa!t ;M4ܨ0yz-a+dc4Z'EPКmWZƎn}+ecmeY8b}j+n>$^~"xzr`ZUЉCLͳuH 0q7[]dw3 |D?Ox4zPikbqR3Ox~u!Ƣ~{7~u8ozT{Wze܈gS/ڱ=UNwEҵN;O\MԤ2n(N6yԷ]*a:ҬŦ8\(26^6*4e0ll%ЉT C̬ogS C`!5BALheodzWa9_&*N&K!)u3C=ۍŤ +N9w +}^+1T4_||% ̼/ĸ +B~)VXre(T~2 ;pYUj)&iyNRk{ftzY8l܂0}'Mǡbh?J:D} t>:)b흦s'aHT LJuQ^, br:v?jrg79LؘO_`FH MZf-#9_Q\qީKХ*~`I#\mĠ̯ Ëh .nz1im^&e- )|M/*{%4wfoB}퉝Sfj5eH|W˞{R,q3d<}>^ZeOZH'1JsKnNE)R +ɀ1P6[֕1|WG6)$;0Uh +endstream +endobj +686 0 obj +<< +/R7 305 0 R +>> +endobj +687 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +688 0 obj +<< +/Filter /FlateDecode +/Length 2696 +>> +stream +WuM}cۛqؼp,|! 3r`u!hZz KT18TO`BCCKb N mx73gކU;kssyVTՊ;4j%^&>(MXfB2~+2 mFH UF^\a9^k7 7f I_V)1}4C۬%nlpU*@` eSkGdWZ6LY_B-]8EAޅS̥R<alL:zvh;%Jі~Q ܥ= +,U܌Ip?c!xџҝl cV:ҫ"Bq P9p{m#s/oZ@L`b.2Ke@7 ڒvV^(+C7Ii`)@e}CBq7H[*3H^uDзӚ+ [acF+ /3Fkp0K2$wsՅY@HnjwO qPf~,B{rIA<Equ+8~9 p-5S9i'(& ( +ۺUm7r +_!@wZڅeФ"*ٵJt7 qOh U>)kUѥ~Sl]j׸Ak))n.&p?!SӨݽYshj .PldO31b؈o7"s$IS8>?#XlByO6AjxjZcPsKX6>`au4M51R0r}Mئ 𹙎C 1yNTrZHnn҆432Iښ S erRj M;TQr?r +AOh)9}vZ9^W^d'ia>U\k:MNOL]a35o}_S@&u_YlR /aĦ خ4}]'+i)W 5 +sp*qeTI)A /dR:sF<@3d_5A(졤>˫%|\&*MZl;BSi^4NϭJ؋)(3.ڞMGET8b ?!i/dտLB7t -|+_>Xp6#"Ϥ 4I)Ex$q'uW,EMZ}IqH ᑅsyHBNC}‰2tY߈vWygȀS\YvpS40uz8@4)Ҕ3=Fl2.$w}a;ěZS%:)nfE<+_ĨXeKk'HXK.)EjEk^`ե4Կ"M4ojA4㤒;Y1}9?7KϞ5WdЏd#2ec)tRCi/.꥕K+hݯ3!Li-:mY[F HvY> ilU<-;Xb0)bePoZp_)]6JV==ߍc>  |c%)%?M^څ_SA/nU=~L;z,ң>E!T~HG9f"Xjo) @)u*ؒCWۘFV T4μA(Җ WGoOzo<=5%[^}1T9m2&$YEF{)p,3R&6yq2Dbc1GK-yzU/].^;< Ƭ/hDZRrGFϩVCkrP+':%!&bԸi|6tRRօ+裀`@yF'&Jٷ3 A +[bqa&hn64:Uox=z!w:n> +endobj +690 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +691 0 obj +<< +/Filter /FlateDecode +/Length 2817 +>> +stream ++eݖJzUJWh:$|YNg,W- +]Sor!!+kՊf3~3mhȍdlΓ *i?#!9~P6Oa}e>)'֦ݾ4.Ad3y婔M(KKԉ7Ąա]W  h| +/'Y#(!#$A;$BAeǛA+0]]è-8]{Wfڰi~v[_y2*ATCƊyh̝bS̿ckWmui3((dh;o3!+f;̲{YxfCD~SIh2++]C+228U +Abg53<سl`#ob[sj9;StFeͿR[jP:͕nd0NЪ93iP"Bk?TܻmC~hp֞[|18'CkwOYT w2ameZRwlC)p\7>x&IEܬ}xZJ$W-^ `M14ه +Lk}][i4`ѣkjϐԊKAO򛼡̷TOt!S tzH"ykpmTU]L+܇w)d}WC?ud鴾b,>@1QEMGm--\\!A[zlaţn),x{MUMΫً"`d:uO&|R`sH<)& +h\_q^2)q0A$`#{d$KavEIt]o];2/yn1{ĸ*8 }SOg8)HKZgиu %Anу9_ťP^KT;Bz Wt嬿 ׷&T&ԂGKKOW-iFO-_k~M(܅l:lL%/-2FgځAlһMa|bI>8Dl7% +dĮO'~ 扬7e^9ZGu"; ܴAlWʖvmdm)~3]6do7ȸSSCߎuo~9V lF(~t bPAFƬ{_ 9?4@72]v_gD1[I &<\?6Y7\kTao:\j3Ͱs4MDIk OlT6s=7M rxͺ4!1Kԇ @Ģ{;+ui(RQf!\ 4Ĝ;h##yPm# 48R^ݓa+$*Wہ2h"f„3gRU1Ꝏ>gۦ>'fC9u7o-v]b.^ 8ix\֡h$5 +@6dٟnДFEBgpqUL 6\4_#'dDFIE\ývw]D-lz^/pRD'#"4h`侎c+Q loIu+-ǹɞYzr] P 7ZeDթjWٔyü9Q/֔-4! wp*.Rٰo0iIf9ž]\tm@_{!\:y0x4QN1Y$B.[*HiYnDpjlbX |OzҔ,`TN޴`DXNSR{گi[Hx)Nf[~͟XYV:r\\ FN,y8;FdU 7LA-ߺՉjU"T^eQyF'A9`ya'q V~ԅGd2 +endstream +endobj +692 0 obj +<< +/R7 305 0 R +>> +endobj +693 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +694 0 obj +<< +/Filter /FlateDecode +/Length 2640 +>> +stream +svaJZDtOo-jHwdL/ٰ̌Pȑdc<~Ԃ]T۵^)hu@,qGML?\":DyzZK=ozK7C'VQd|$G1u4:_Ը\l~ %H^%wu?) gGkZs$!]u$Î`&屬oo~^l$bg`b>rP=RrR<*B>P=5g>kz1IlLH1ЉvX[rg7mhO񹱜7ZY~xy"ӯdrW k]žbX팵D 'T;RMФpԍX6tT;cXDm),kk/U2 ZM:70FX {mE*w?[eW-x9B۸pp&~ J0lxۑtE-(T1=- v30M2X.-j,K>8rqq4nŪ`M'\'/^ A<91*- +h٠%!KŅS"8b6`*]7 Z^^ +KXV̚} +ȥ|)zuĚSٟ92:?}3rO.dEͷv +q`$i`I35NY!L1woc'UkKMDC)6M]8pu7cV+$F_vhj'&Up`F($|yߎL"JrOa96ZV͠)ʤ)d"Ha{ +pb(!&JfLJrm]sr`FdNh8]4nNK'WZ9Tz}4tH2Dɦ9?)ոߏ2iMbjvR"Z\v(z2z8]AH(; 7!)F.mUVW5zk,|}ٸjGMf"{۩5f R dTT2.̦|3fG%#q-Ņ'\Ć}IDvh.nzv)0}up nqP|"̤6bpd]S[ڀnsb.A؞N8ݱV\>dPńtO+fľT-pCP=j:?nEŮJPNjbvo폨.Iq;C:G(x~EzvuqT9 տ8L_3Dv2`'cB#hZp5G2h I%,%vfbl2e/URƭ! zux5G~IX3]"E-\&ԓsV'Ykwb'/iQ+o8^ҏe %K͘YF PT" N:Zx(۠VN.qTx<45k5&:N>(IFts %^cu</D>؝32¥e$_>z$_(Fu6:Vo j(+Ϩ_=/؝ daqԻPe S3TBY$nʔ xNz<l|A #gNu./T@+È*@۫Cs|f}ߪn\< +bp-A>.3ɩfw%L{69:X8@VV,sTbrOG +e]~$+kd yeAW%IOg)HK:n_ +endstream +endobj +695 0 obj +<< +/R7 305 0 R +>> +endobj +696 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +697 0 obj +<< +/Filter /FlateDecode +/Length 3155 +>> +stream +CQcVh)? D_G+Jjv.ý"8/ g; 1\/Ν +l\ΘZ4yz(.YhFD fػ}q.[$n<Ӹ^u_ՓBA]ϭZ=ӏuF{|M| Jq6~N0+,rcY:IUW iLYik~#*Ni=K)ѨW{%$ӓ Tw^FŠ맘G>c"6E/u멒 w"ǎFUv֭yqm)3|C5OؗFe 9ӏ<*oMÖsqiA^DKoCJ9Pn^ai,*R,]3|@ƒ,FȞ +*+ԘN42 vjDPoGJL5za:d~H* MXiՄUa^C]1xYlڷ9<&2^0!˩Q= ; WGm'"b]h} yCkil֡,o>9*A"mFY,Auj5M_},\^{5-{@BtԸ8I'sW`SF')_8h >,:ɣE'If.Ӥ͊@.<]LL++ /ms/kY M7<|ᶙDZJYQWKO,Uꉟ.imL7N/z-Qkh#PT=*Ba&WXl4|F! Grl-\mk.@}Ie'ڮVE6/ YW0(:S\7u(((D2&XryU2:v^ w0J1gy`Wjp#f`qfjzm6 wTP@Ƅ-漖g) 0w̞Zx/vbP(o9]aglcD}R3<^gPq'+Z g\"O2hH4k /06o|x2dC$M@lσ=u| Lx7Oe0B$d-"ýWq:o~ +ݐe1UA<$EΡZİ Zx +y0'5'A{.q{d(Kbbڄ-nRY{crJB1e$}~kkg$2Bt[ vwlN +"nb¹H?U)kύ}Oa, }[4ߋ"Tub훲m;FFE$ t0}[BJc>]A7J5ƫpcoQ׋u<~qKr|spnm9a^ Zsܪ_YR=HMם 6 \ Śѯ_Q +[,_#vjb;VDŽ@sS)X*&Ls;a3fDTIr+/ѫ8ٜQܐegxkUk3MT#;Ebr2.L\+-k_%W>xN_hHm;.=sN3Tf&ƆJ;6xX>&;[NqS^dTg47*Nl{ng-*'M'] +ZDCYϘ1e"Np"@PEciDCS 78^R*<_l_\u/҆  +A}`~Ob?νQ$aJYf@bi/C(U`gми1Y&?U=y30IslPW+!|'ɢ}0ҲlO5^u;HTP? gJ2(`c-н}|vgU¼rC2 ܏OTR3Dvv |U8Q&jÙVffXAƙepԉ\z/1aV7 #uȖB:r'?J[,,B~z!_' +endstream +endobj +698 0 obj +<< +/R7 305 0 R +>> +endobj +699 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +700 0 obj +<< +/Filter /FlateDecode +/Length 2559 +>> +stream +w@rd"}RdM#>Q!D%ЂQYdm-{|V84^NM猖8|t υ(07s+/P7<^pCķ({0_Tj2R`ݡ3jC:2^6od9UFu fVzWpL#/1ē\_MG4$p$v5w?K6z<m;NsD\jumA<Ȼ8Q9;MR`B[c^=Jc_^+)RHl-ixV7 D6 'JSd|S>[|R~\4N1mZP%yF tc>O{KRÔ?l;  \v,G bfݭ@K)9R ]."~e__.l8|qR5ÉrF"3"dT =I׼w%P} !O&{q0x\GV;gx!Ҳ[ptJHk2i.=_y=dytuG [i/-/9 yN4"-k;*!WP,ڇ`ڂo"QcZEl~gvZXV>G,Ivc=fdȅ22?Z*/fktѰ7kzDW_R' +nV֖eAc{sśi"rSN]v}zxi=:T7ϙt 6+1KƉEAm 5b9=|4jL4fԦm&Uo`’ L⏼ h8BkX#۽5==r_W7 bQֲ4 4= +ǯDWw,&/Q{飽⸈; ɔc'i19V8PePy0ճ/LJb7]nC!&k\ +]\\\Gk[˲g4Xpؗ{zŢ8OdU{s6 GPC/! uꮧ.1L8ոW>w3t hT YW@b7T8,L*B`zi;i{BY@s~"J|G,/XÐ:+_{_ 0[! sσU13n# TYJgNB aRn ٟfLڨ֮u.W1AMTw"1-^Gju]6ox@Mz.WTn,tk/5U2yeuW n(~+1{3'8ͧ&Υ$ t|n{gҨTT!-dϻfPп=4wVdLԿ.av8sNJLvn{zܯi瞱j$8 ~:TQLv<w^pM]HZlhE×9]A=ʊy.LAFɭ7*#&@)آ42*1R ٥RἝ1n" oNY(i`L*14Ŝ$y: b6(+zbo)Jmg.dhm} . \Ɏ0;Q Ձ @? /DP>llj/ j(٢_ Jxr"f&6'Tvf\. j2MAK+8/_cކ, E ShuÑ4eEmK̼gtsxa!?40]JZ;QХ̅P^MKYUCwv>W\Qm%EVP*jօF!r#aj,93/FEtP#dbsYsdv9e_) Vn@+Qvc.2 m{²ܡ b`9ˆcg"ez~)w'M9\<~0YrʿgL /nc'7qJG_b\(5)y\+ ++ TJyNk<qϘ'A/lIUϤ!1t8u^b1-~Rtg͉̈bºOR\;+tԪ3Ug>Y +endstream +endobj +701 0 obj +<< +/R7 305 0 R +>> +endobj +702 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +703 0 obj +<< +/Filter /FlateDecode +/Length 2900 +>> +stream +3,zV ΠEّ~l$7ħe` E !(muADK-P%*E@(t(9p +"T{\$jiXpvW^kdRq2-1x d)w,RCoUTgu1MM֊~t +c!&̷x:ngL̊0>cT؞0 5»nX~g&-q`j1l_>;Y+}>;u|`*=7YNnXd%';:G3 @AFphQ*q!T8۠qF#I-?[VZ;CύRf֌AKqVJ3z=tKA}]HЭvvQ.%<.*L ш [UFY[edջ’aY#q +d%!r6ՌiwJd/cK!<_+d' z<-%g&"=&; ^zL+@^>'|dʚN4 |)(VHt+}CD]kAs؄QPQop IAr;ܶJ ^_y߳Gŧ m0%˾`ڛp*3˘yn8CQ}n=6f]3="O|qԼFTopډbUfvX12w4֘ϛ- bH2܆zbxqT1hy>x?N1 +Қ̰#P f1h]0vV4[63$1h)-_}&W1M\KnGuo;+~l!1V-כf%<6s.5DˈuH1?g^`B:|q#<{Fj[ I?@eB\.\f2b|y1A:_s<;Frw)pZ +p@O9>ViHwYAhl XoMish~44Y?Gm'^9 (- q[, I-R U"DF-ہ8O2A,hA|^JnÆf &Nv0j:.c 櫀g>r.T40[CnPSuY +gyY3,^hMDrzЌMcyǼ^غ"g.’Y* cٞI5T7G0#`X'` B>gbkdR(5k12fiE+δy/w\\BCN25uvjz+OWe'COzd^NwK. +D8fn9atC", tNg n$?9+Gۘeo&rƅ%uPQȣ5x(Ƹxjρ( j'HdX&qڲ߸SaصTSꕰ[ 0qOWH/ +Lq$9 jJ֤lU:\6w s/Oqh,1mPT" !}@ -6"Wׁ~H6 +endstream +endobj +704 0 obj +<< +/R7 305 0 R +>> +endobj +705 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +706 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 296.262 422.118 300.198 430.225 ] +/Border [ 0 0 0 ] +/Dest [ 84 0 R /XYZ 75.52 84.49 null ] +/Subtype /Link +>> +endobj +707 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 75.519 70.578 242.975 80.712 ] +/Border [ 0 0 0 ] +/Dest [ 89 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +708 0 obj +<< +/Filter /FlateDecode +/Length 3001 +>> +stream +PxL>~d(0w/ĉ䫮ͰXVG%T|'.MCb+j~5zFG;qweIn*qyz%7J&& c[9t0󽸷6 g^xh*4 57M"tƜ pgL025( w‚#G-Z1+}m 3*`]sۼ.JWXDUI;яR[A/_T!-Z|18 +aW>Lj5Ŀ5s8A+!Q48WμFn?C* ?β# +J=>h$ʖUP}X۷# HpاLbFP@ax1343"5nc + 2K3OXOL7*cDה=ɹ4ҽZ˩>،{>:DAxY +nz})D{3o'{yG֏eQ5 c <,o*N5uC77yqBe_w3ebDPų (#.=6bf tlxjJ*/ %b9%~òUNWt"+ @6%`YQfuI1h FI="u=[)r WW@sw1f@B{ +2>mg$uXxk? + +n 8!y822|1-sNL{~C HьŒZ<`(h aIV+Xy(pn\*3īV ǽ_r7g ~)?p6Q ?Xf{. ~WZZ4%O!=!qV5C(.́Ip\^`:߮YtqTt!'8%utCL +,kLfHRqTO +ZagsDMTd(KyX"."b{]*e>ts1u)Ư(Ȁ]bRAwsP!\ʼn4d#:mNImaN{Q}k+6Z_ 77jА)))kw,o3È\ң,Žvbd<7syxmSy1g"}GK!K?Kyy(iSo4ks1[zTtQM0I$Qzq8 Xd#~kOsw(G;uT䯐m4U%+aT:aPa/BpМ4ɮbL*W_qI( +*F-0G͔YP|3'LOL^jz[C +reۤA +oS^z|?Z٪@_A1BDd'|܊,*HB=ۨՁy)v\ T%V^޶a+P+ZES]W /x}sDhXW!Pp(W)ds}gicnUObE)VYL.,es}7Pw^}p[v0 Bsz@:8cH_z_New dŒs;THӚg]A!uM>N̞` q fcpucBKGdu?eaUeny`E8t)Y%? 6}ΛCHsa;{bK~8k ]NW:E p.0!@z H6"Z-8c[cu-!y!\)oW +_$zV6^ż?boTLOJIFus RQK RDQ/j4pT˜׷?l&Rt +iS{vk-f?*Mwrh 84Y'Y6**&=%݇H΂ f -kt|R,GB)7u}x%;;;C{;+AX߇@ +J/a_:eLt!VnPYuGv ` +endstream +endobj +709 0 obj +<< +/R7 305 0 R +>> +endobj +710 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +711 0 obj +<< +/Filter /FlateDecode +/Length 2750 +>> +stream +B|͡z[x̔P ?}$m"SϽ$B~mA!:0㽇(h)r C嚫 [[K;7W\̢`L]{Pzo' xKn׉zJs%+5EW' ;[1j,7ΜMih?ClL] dn6*H{A c@>3kbcwtm*o"xusGfi(06Vb4uGҽF?N7  +ͤia0(k&;N7gWY>X,:n //mQ}_*- MߣJʚ]ÌFij7,Npֶ{2IC+qq3IлD6[)1JNk CbǰusgF_-]H  +{5xpU3EÆkƐΌBP2ѫ'\::/юy,]q7cf&*]48͘{ UC ؊<V36{ok,: |=}#UV@vo0cy/1Ţ K`VR$9LK̷?⯍&Z,5?#lG5XhA5U\{=J$&'b 9 +c޼0eEl2F\a'H .mD "ӷ& 9)@['&}N-?VʪGb6}g#hđW dҒ,n,Ԃ.CGf`$tUjn5g8R{ȁ)SZ!ȇsZr<p8oׄXC}Q: c9O&`}(#5U< +y]z{m9G

?O+H>V"=E6PeKxؘۨd<%VTuŲγ=RKcd=XG+ؠcϜpI:ՀRUKͪ6j;zP5bÖ(V2rU۾ jb2A,qpRy[Qy&n!\丨JS-.q7}PUF G(bquXpբĪJ,yC[o5Gup?|eSYV/:S1K!d`C\/pbF+( W>  +%Ԫ^8Re.0HcK21E>&|IgɆ6y%IE*4z \Ecͤ8,p^QDsJKjXM(Z׵ \H5V\޼@ O&Bv2Ѻ"GzSj\MYIHF'nڒ5Eze4!O[HG2@Qtwh (K zLf嵆9`e+|T䆤* R +}8SXb7 +L +̓uC^q"EU:J~$_!h-i6~Kw<up.q,:O~zkE؝l?}JN(î+s0~v9~V:}U31cl,W܍8%ېT 8'T})#V ]Ѻj:ı^WUg5NHVi[z3xE^Ygkh=/yJ)>B /⭚K\%f#׀â8vE#i +nAur0ę#D5 ֌}[\>v08WI-nc ͡0=( OgUJ~U!wN +Lc2\F-)EBJˑG> +endobj +713 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +714 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 368.892 126.005 372.922 134.112 ] +/Border [ 0 0 0 ] +/Dest [ 86 0 R /XYZ 75.52 60.82 null ] +/Subtype /Link +>> +endobj +715 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 46.912 212.243 57.046 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <31d5cfd1c3046d5ad3dad2a75f002d0a6a5550b64ad569412ae5c12e5f91e1f6423a49f96df8792ae595783622f87471b51ba75afa7e4c141e9a5e88f1bf0164> +>> +/Subtype /Link +>> +endobj +716 0 obj +<< +/Filter /FlateDecode +/Length 2627 +>> +stream +Ʀ.;NюgneM=WQޛ#LG=6,V4 +SUwgZ;KomOq\ {b ] +ȟMƋz+׉OYzyzr.UdR{8G'7T@^пh} +MޗtqOa#HTxPtF=}> +gB&:#EPs [4ys#4 +@G 2{ ZI[䑲Wb3/HnQY|&4]j|n){H[qSS +o[A'd #'Қ"{ӟ{nCҢ L!w8]#uW՝oByH5(w;Z'.YE hQ@Y学&zsM{y-t&LjF'Fc6/96wS4OS)[㔦o ܅y#&OڳLP w +cTQsn7tQϟpƨWTJ &;iLx|a eVZ<ժꄆvI efkD3yR5lb [%Bl$Ʈ"0=/E +OgSvʼnnmφӇY؇>+$w-PΜn!%*;kWGҰV-,/{ 90e֋_OcXJueQglitܡO_I5Y嗥5fB0ɀ1ɍyWªcX &S9NGt*Y2#Nt]0@&hl@ItRU bwݩ4 !p)ȹDi걱ҨcOnUql%KS*ȃb_ }Cf5$TCLq8#dg +dH˲ycB-vM2\"اY*d6GA6qJRMS%%oPH9iwW|14(EPۓ.؝T +=RI2G)z$2%}ڶ ͺ>C*/.\wNiy?t4Ba{yv" +?k F;EB3kT6M(:%i?{~@y;ׄ#͍j<HU?A= ;kOLaQiq7 wζ!WmC:oZ*"*М-AG!/2Ee?j 9" +D#CCfR" +u⑤ywF'*Ť`m(yO36}Fxcz+{'q< +ׅϳ>FXu#H/d_ZXiQJzW젵;7:@. ‰K.͗Y+JN9li*gKk: +_z ^f}EZaޝT=y +Nhv,UlFCZ(T@tɷ`4Nl;Ǹfϡ]+V@E7׮; +f0k(*,ml'9$[A 6]p+Et 3~d'ЖOvS3js6p +/Y,&6xiw-E&MW[f- +5Lxbn2^2&Bd#Vs~FQ +DBY}tV z&wufZ_m + {0?ۜT}'i,G+!or=b 7"ue9ct2M8y |5CF>Yl5H=ЕIݧQtrb ?-` q M}Ƙ5>S TK/JK<{-ac:Pa__"3<.n<7z0[ǹ1vh1!`O3A (ADOAmvhZI1uA谹 ZƸj7dFZd{EvN:]KNC"p1Mm rZQ.e:)@GS11^deH +endstream +endobj +717 0 obj +<< +/R7 305 0 R +>> +endobj +718 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +719 0 obj +<< +/Filter /FlateDecode +/Length 2359 +>> +stream +_.,fgp{IH8Q"T]np`^`e]dRkV}XL:PS.zT_'a9rP_n\(W|Uq h{w44 VBi,ټKtbL"MXP*L{;hMeÍ@U>$xS|ǥrhW󆰬T h(GiFdiw|δl ,ȯ?EQ;\Xu~ؽ%/W_0B + |9d)^şW-Zc^9a&q\dZ =ѕ\)=,5[ 99rtg[Jq wȭjȥnX{*UH$ b \_&wbJTG0-A#F +{fpoosc BHu/%w( hף%0~`rLsxUY4,T&Nf7iaQ[V;"ixA09>."9NLklYOCл9A.1l 1X8@ta5ݸ̩EIFRG)m-;j@WNR~7%ũOcBѧzB"+hJTBx:rZT*b´W62lw^Z:^G ICR}K m cJFISȫcz*r63 wJc#JZ.8ހdZ=Prq;22/,S:\yq.RyZ^E9.I-$b鵛C?j +te@UHfPeUFH4b1>u6& LU 01Urpɯ̹p~9uO/@~r!( ›0EdW=W"/)*)Q%z%"tXsA>[lP uO|6cPxa ̻I,_̔xX t(Pu &IVVÀh#zoglܢĖjO(dbhS)N{n -qp3Ѱ_\2Xťlh5zAfadWADGĉ7P4]kJPLt3-% s)\>!A&uÀHU9,LE Js$|ecFj~e[;e#w!أ',@\莺~jӄTk +^Ä q"ho&,k^~p"Օh* ]2USgp-x)n^}uw IzQJO +pK qP°*{ R_G56M5uniI5c`!ZQWq9\TFJ (Aj au$`FW,*:( JɊp[zPr~8=sᵸZ?[o|;Q`!e6Af2Y{TJgiP;. 4 ǧ +c7]5"goB"U0{Ոm*3@*y'y :? +#8QdM/UjziUQkv(śSg,'0%"bRuUs8IA +3-5`2b^oPA bLB7A}仅Fd{+HzL"c$IW{?:d tm4l%,]K+S5IX(fmgAK[8WohvCprOocpI1 "`Ya$ָ1q|Οau >FL2ӊ1Eaֺ4,G}eB +KyǬ "ЯEϬ3~ +~Z=MO{`¬c IA +endstream +endobj +720 0 obj +<< +/R7 305 0 R +>> +endobj +721 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +722 0 obj +<< +/Filter /FlateDecode +/Length 1475 +>> +stream +f6x(N ,3՚lGU1rjC4H3 wU?^.C~S}P5 '3@w>rpx |-7T$ m6c69P9.D@s[FN'"#&+*Θ|յW +rbIҬػ+eʮ^#W3Z{ +"dvK]9"pYM"A+aC ࡟%_H/) +C>P6qxTRA`Wdpd"kU{]x;mb .;³as=Aad)7#nn_҄#fkBJuSQȣv:o`.$).I׍MA` Q}:\|)#yd"I, c +L:S Ť*IVw4i)8z)SH1Xa5<}F!.c@a?{6u=\US,q'eQ䢻ơ|9O&}^x8oqTt♰-o'NX (g`|)O7NnI6aeW[*t5#j{Yy%y,ȹHali=hQ.c+o'TH~'ɡ?4,͢DJ4@>~Ie!t("4!D=زVuH|[=v95.ءV:=ݕ:B-/CgoXw_L(%[%?- n9xċ\wkds CX$ls\͕VjmH9/dOWkF&a;Q(b' `FUK + Vb5t*gUOۀ5:'az:T.$<tr ^E!_//6ť=K#y,Qyzݟ/-е. +9?ŋ87i/XqSr3rm +endstream +endobj +723 0 obj +<< +/R7 305 0 R +>> +endobj +724 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +725 0 obj +<< +/Filter /FlateDecode +/Length 2955 +>> +stream +; .j$BH<;5E4@^,/x@'}C]Qǒ Eθp3(򄳤fE}@ K5G7k-bECY;n3gq TwaG(r2)U&UדX4^n "4]QU{)X14g2ĭҙ)o6U[(E~1Y'!VU?r +CX-81hTc25&Azn w7zg `/oO0QVoSצR K9S+~\cY!FJإf4!Oc}]KtxwFg\x0 <Ɏy}!ܔ奇o5źZWKY N_ZIJ4n1`gACYR\3A|k[$I[VZŴ.ucK} @[MG4),Ϥ"O'$RlEDS3#CZxyt߱IA, +oÑI' +ýzv+u|y { p.i i|h8iv ERb`*KݹU8vr%jfG҄"TQ #3%Zmu-l>iE M$ #}2SmCSUOI'9\,)[|wmlJU_7O^#}UJw}wXL6+/[.H=qA  E 3Ln>w.޿֒h.$4،oN{W!,yU~_\WevmY~6L_<$DKƊb]gq)4G025 +ۙچncQ 9vćz\Qu. /eS^;Ѹ5uT i.,(~aցWf?1dO̸˿4{1Dso2^`>mobofiiBOm#X3{d> +1[l0DSa26QzO`{ri٠X>MNUcz ^9x\͑CvؖXtIGq;bVk +=I}/.a|+.fj*TNodn* +q, d C-'[sEյjKCf{F݉ oK6nd~>h_>9+ 6hDtGic'Sb0=Aώ^W.5\*sO d+aQxU n)X=-EI1Sf:w&\ E$UTF-=.aSF 1@h}똉 e*"wVG9⠭5kn?n:Ӷ>0zQQ\  $'8FJA'OA5fBd&W5?&!9d)R .%vgdӌ,|M%@R0$kH%oQ1x[cCөZьxz6F@6fCkcY៾%8Ý{B|<;]=1r1oq^yۿ7+zWS΀P̐tmS鄠<$wcg9PQj+toHJj[ߛXWCHw݈BрUM+w+l K!}'P[@Ur:=üEDPU 荒*Ua&: UbScYmp`AkNÓQxX:Զ}/4-ZfEpv@K;xJe)e3s$%ט {TuànQ!+.gT{pyB#Us.Jq"2pN@vpL6 +C/ևa6^Mvp1^ھCڜ}A7$%[9yS9<: %ọmߺp@X˅La_ 6" {ha3yr{%os0>!N -af*>@kJ|AއRm;rae]* qv As.r,e5g2#ڃ&=f2,׹cU1i<ď.GH: 6{> l#9B5u:fɟޕb^$)& zaY|֯腱܉KE'ʽtsM:#0rʷ,%1.C|d*ss= +endstream +endobj +726 0 obj +<< +/R7 305 0 R +>> +endobj +727 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +728 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 98.174 98.838 101.943 106.945 ] +/Border [ 0 0 0 ] +/Dest [ 90 0 R /XYZ 75.52 87.7 null ] +/Subtype /Link +>> +endobj +729 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 75.519 73.785 249.629 83.919 ] +/Border [ 0 0 0 ] +/Dest [ 94 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +730 0 obj +<< +/Filter /FlateDecode +/Length 2920 +>> +stream +tܿa'Q:s[_Tns2~QK7ѩ7Xpha(Se >V [[5w2[d[`Fr7GeŮ!r6FPvS㞌 q7QisfL0ѭڍ~ae[䒂=LoIO>bZ~eN>n?0aC㵐~-#5khbp? ‰%A܋@^s@ +kցC`/D|i)c>^YOT +:s}ۢ!TaFNN)Lnd:mW ^3d i{S6 }#}zm=t6rը`O#.h 3<|NNy7\eT6%YM2iNe:iv]~N[wz=|!<9bٚŚ bz/] Y#TsE*"],: >F %rv138׉UWPa-T;#{J3\71jpks%hKߧ%׺̩ˆLunZ{9qX$K?յZ''HFÒ^n~h0 ,73Gޒ0gWjK};s]6ht-ws^@ 8\vK8,ia %5y VT<@q2w62fdw2QbCH^`^fŮ䕚VnG9hi!E3|201r|ՆVt2g G=]AIU"vٝUکgQ9^NizB=T׿j55lӴqք1/,?,yba wֹuIvC@%(54KeZ,CQ X\_Rc<-DpO9s,-a]I8Xhh9<]ͥI2Idg D\rl)C ǖť!̟_.)r6*$n"*-]TIh`)JxqgD O8A.))aMKጶu-tp2qɅ 7)ߛ\ƲJ!tyT,>ғu^A0c]|FJ[)>ІS5S]usȓT)$F)YLJ'@ps7R0(X,]$L2:?Iܹ@ށVySV268-Nۣ;С)NQ~ q]ۘ Lc\\ftSD 3mU!qZW=R븨z + NP-uax2]p*C׹^]<8JQcp/CH;e.w=e&]H_:퍸q[GhJE[?.eiU KM:lscܴ4_ه@4"h? svB!ڧM˼[)Cs-~;0|l*?}m[/XAq-w [ilFmX8*(HA2u2^NfzbkLDqy&s'ɛ2 /-^7<kg{[^ۯ݌C8>ʪOӽb%8˜ĚĵfPІnX1+܍ݕ.ьҳ)6f߼l3߫N4֖-OXvTQ2P(wOj{/`: [~z !g23vj Z{shV^LOS¡vO-ӭjM[ +qA~飞|Hfxf~76![G^梨f2woׂ{'8;"DmWykhJƒj<;8."G`Qqh(RmoHuyqJrNy4f&o +b2W +endstream +endobj +731 0 obj +<< +/R7 305 0 R +>> +endobj +732 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +733 0 obj +<< +/Filter /FlateDecode +/Length 3046 +>> +stream +M9\HK{t8dV/s Z*!{}HI3]K0MU|-S:=\؜C'%LO%M;8"dT}gP"TAϬI(U2:IBB]gGJ'㑒39*`j؇H~H-=ںѵҎ!nysTcLN<wE&{zS̈jER"EEC(aiO9.$s i&kI"A6ۦKT;/tK}ig6MS?,e?ǦSC{-۝oSb`-F:6/eƟ!haϢۙO*њZkT*و_)FJ|4j=ep!Ŵ cwhe&rWh[|g!)ӵO|eݙ"adT&tg="w:RI& C/[^ <=9ڐe2{8;u)0zW|@Г8$(poFirIط4k-Qdx_\9ycN0G%U@nCT Vcj^WSa\7.I,ىւ$ɉ!~dX]f7D%s 2W[%N39$w3$v"3)4l +vslAƉNgl]#k'+DE;kR`'YDX1q&hJC?'k~M:|1V`3>Um\<}]U*h Ee7'EI<1n.[[a<.FĂ ^$NQLg5LV0ieoERk3p[\vlV=APa[jqݯ w bt L=BG8d(&7f9*J/W;,r]Y\1Pg 5&ۥ9/?*{q Um~uudvӧ8Ր`ܿE޸Ӣ&8:~wM^1,GV [w7/Sr3GdSPčT&豣"hg1iDǫArF2.1%s#rEROut d=`)'}]jcmj: Ru Okd.#|4fUX==ÐfJ=؃FFn OIFd; +z)SuI Y"5͝TKy=Emm ז=h 1R_zg% rjmkO/ur;/0^"U$P<6 u}""XtoaKYYfo5RϺfgpcƏz, XA;@1 %"~hs x;-@+<{e" [U^C>_SpqsٖPij63 G0ڗOa:R6j' e}e M"1/ +Y?[|G\H* 8vц()- O.! +endstream +endobj +734 0 obj +<< +/R7 305 0 R +>> +endobj +735 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +736 0 obj +<< +/Filter /FlateDecode +/Length 3185 +>> +stream +U@҆7,d* $T%1.IN^(GJ/@9:T +^ßѪfS>Km7~I{D,@iK~5ᤐN8 2t +է1KN?NTh_;Ɓ1xaa _Ԥ] p6wN偨93^y~@Y)y@=UѠt ׹{:u>8]G9hv(5"oPKbPgQ>?,-PLJ6mzN뚐#dPUnP^!<&Џ&C}(O\+ +ӍLUoِ + `dŵ-v$G[ Tk#q_6#u0={8Q'nUpqwmxσ2L/, BXSM" +WB="x.&FE\ WEņ} MJXC-!8zRxCEVnTair, B^DÇYDyU*yPl#p7fb~mXW^ɚ}~uSK>u(~m4# +vԇ!Aؒ9@v^[X08f_p'6KH3 ))R KUwQ`זT:H Õ?Y ̧!|{3{HyEe[ +|0 >44Ked^E&5)jEܡcR}1'8g1t\2S#go^[=N?5]E55ND5[[;]_rStIJ+"`PvNW`:y^^%JT7À~RJF[{b[<<%nA[`Eo\I_HLoϊi%z -(*'%סhIGqwXf]JfDIoUtg0^6/iROx:d=kp'x Nua6O~6%n)X&As +u=xT~V +@끉i'iyv W-"Џ:KET!b>$?ߺS$d@Kolav8o4ީbt!u3vKdl^PCĉA#N6S{ۋ'ukxPt̯9~W:X µ˞WYx>nwP*r?2BeTor&a4J j+C)QM ZZV)sBIIM鈠m|[ez/;m%? @'H,"W`ӂaehEJ4owU\KkDV^>6i ӮKDTRM2:u&ʕ5uQGc75d\Y yB~NTa`勣d@5O <1^q3ʛV["wyz ?Y% 7,.H~YV1v|Izڌ78IH귰f R ^K2J{&\`q gʟtl馚?0E9ZkiYVoKiiVKa +Wj}Jc" !L}m( y;NTḭ=,rTAʳq Ө]/3dTZEP!h/ekotiR̢J)5 +%E&3e<,3Ī2" 颏f4 6&^;EHm7pKMAh)=*vN>Kphw/4%9JEIf[㍜r:0TA@ N0Gv/{ɰ6RpRJbl ˱5Xw8VSVXuQ9# M s$3up5{^K(]odLŹa_f8l*sRHm9NT1&ZL˘^繦9UR's67%9"2XLmJoe"7Hk^d|&vڤjwi\/q@rw-<)M@&f$SI. s"Ym6EFʐUL*-{U~X9)I?qIIN\G_m +⠼IhX0J/޲f>yׯ=5uka]^Ʈ.Zu얳*Vp)mS$5{ZF;dREnZѸ۸bWׂX)S)u>2qmwLMj~肅zn+ь30ݥ|t}'VŏgM8VMԃ5RnBXVhىH,PJߺ{luZ;,W% 0sZL,Z=h4z+Bay_Nju蝺:ןMiz}ZTI= nCv*P|S<FV=8aVЩ/?R87|D~{{eE$nk Qy6.}<+B/N*,+1قD*$y%xQ,j˗DBqtzA&\ +h tV=EQ>A=uU.­]vpR*@ކʔ =f:PGݸ1#{5((D~꣩sejb#sfSX{Z~#yO'3yaG\=΄ 0 C%QQj,}H,Z`*^:6vb@v"~=P2SnR$J}Vڭ=4DeeVKbﱏϳ{ T$;q*?G凖&o7e ucaq4FiE]߳tPgĵGdaiyW=߼~.TuЭ@NID|8U5Ns?Ӽ?-i}CS0t+YvzWs)N5Ҽ>]kKj}q=|4OjN8mxSUI{5|RJ8g5Ų \D#բ4{pC30%)U佶!TU^mBej!e!:3 2ҡ(vWF X{ ZpΉ L,1][ICAV'#y9} +lo{S}cc;0I +endstream +endobj +740 0 obj +<< +/R7 305 0 R +>> +endobj +741 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +742 0 obj +<< +/Filter /FlateDecode +/Length 2982 +>> +stream +`@M3K7Qb@-o<\_Y?3M/kFZmN>fYkJY{(aP˜_O,F0b ޏ|Q9ے]cFhLY`Kv'Rt'7 '44p*Ӧx m0'M$[: B-&Fkl8pq°#TWXeSegNb.IgT9=SEd!s#O.* fhN^DO1gɤhR`އv|H=?&׺ۭf, +½^D +C+pd)}F@R M}[z/kl7)W,Ka ʘ 2˱04od]BeBd`rl̪Ƥ RP}OSzc Sĩ倁T y& =8ഄZYd[|V;G2&w%vp%»*j!9dϓĀq1&;eQr>p9KGï9Q!cndM[:M(އ錁| (=qׇ|@hɕA&4 :~Z=_ZWjzd$39k̆c Ҹ%wb&_]Ŗ[v-2Q 5t/6A[H\mx޴Dˈo[N MF/Z&&i+(Ydxw}B]Zn^{C4g43p,Uh +Rhb@a?|1ihyB$qGRoe!erЗ~q>˚6G‹ B6 J,bNpwVWh\ N1"@9ytK'Q/_-)VP1o;!̧0^Mp.)խ"LW 8z{]h"FqXȖ*_#bSql^]-mq(QbBɱvq=̺vtv"NV #E- xxqx&7=e88|.Bt#'Zu8lms|%խ-n +Wӿm$.g:+rͼ3X嘥*)[<q_a#c_vBVZ4wJR'N‚` + WX( Jk'*Z} [5~:A:R!k'95Nsnd LT%6: M@ !Ƙ M^@ʒHO ~&cP^wI#1-!}Ƥ3JhHFN䩍=ɦs.m?%d"׸ ^Qs + =QMvU0@485MPb}BNgᗉ]Vc ҙcoFJ*\r%b8U˥8"&2ܻ74!Иo_ҤRE^ ڤ`9"q)2`Xl٤H2ЕYQ}DOahɼK?7j;i=#0o6_J=MX ' KԆ7X.Mqnnr9L~}Kvw)a6}&a[^ {4>AGء [ +^=*VV +endstream +endobj +743 0 obj +<< +/R7 305 0 R +>> +endobj +744 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +745 0 obj +<< +/Filter /FlateDecode +/Length 2965 +>> +stream +T`]'J۞ = +0 +$35H i{rZ!֘란]cT"X^4EK룠)Gu + Cď2l4T*;|L4*~f5&!4=J| y9ovN1BĞ4dC13Tտ2>ɨxȍ!IUh'LU[Gٴ)ߨԃ#7mP\o!aZ# z lkudd#ב0QsYNɨk#5q !I@jJ[|E%04@a:ӵ$q Etѧ-:@05%K5D3S1˨[H ޛM'E AlH -1>$Py/ ;Uޢ0 匧g&Nxhj>&q|rZqߦ$i0^ʥ| D:W#h9Vѯ4?Ȇj.qJ;NQk''{GNHR91 KčmU KŢ$jE2%;g9*INJjsb~Eb-m&! ,[9ςVЎA$y\/}V։c&ӏ +Կ 'W4Ra֓٣g6w,'Nգ?m܄x~ +bրv/`c 8+ ڎMm$[8o/?xD׹^US41_ԝ'f+~XJ?x˓Nx6Mڌ;Xg)[X0?hjQᱡAT8/R4GPڬpݑ2pJwq;fnK}ĵăJdFIKw๛E!G$yFDH϶O\RPS%V@lA3|,0Yha*T > +t}[Ýot}0x㥱AyYB )9 Xv.H$`$$_(hH /,pƗT| : !QŶjï]T.=tgsa"0YQ1EئMngFp`@W8'2&?iz ou՞OU\e ˆK Ӂ"ZU~im :b 3vR|e |D^JBny.kd;Yǿ. +^;c^@Y.{@Cĕ- |Qv^eF +18'B :0 6P $e +0rl:[!wZɻE5.OR̰!.?lcEN d"'oڹM"8GgmDMYA#J4~W vUARpɟ" +Eɕ[r#&IE*}N 3RU$L,th*٭=x㠗/K6y^oCcSR_7krN{Ͷg׷{g3T+FObpQe$TTKZ؄: kdlq E >QWuז4(XȜ> +ÜN}EN+e.Kr-4˵.OVGܗTU?.O3 Sl4?ˤ8<ĸ`JQ4wQAaQFZ. +cs/ECQճ|`׻ȥy3]z-'~rie1 j./F$p__kX1e!hxX;vA7\%69i8jJRAl W: @NJ,: NY\=M'؍wɶI^%uɤip_.QvCUKsz\W E̽l;HjlIF*PeB rJ_^;;}' LlCٗf%b;g\.֒}nd)rBS滂;@ +r$I~ ԅ[667> +endobj +747 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +748 0 obj +<< +/Filter /FlateDecode +/Length 2094 +>> +stream +sPyTsBji9tH6V/oǞ7 FX٠h}_p0R0>1O0 GgY$4w!SALr}/g:e4nK">l;-jմ_M)SF`v8q~`seF)JLަM'6Ʀ:=EF/ +֏,Wh׬\64Nӳ!|o?,6%'߁~b/֑[~'Z8wɅG g~B7=9Zڔ;G̗9?Khz>@s):tG-܉ FM%ŋҽdE C +X _Щ, @Ƨyb4gWhIcgWek'#ZOߎO52RiÝL&L.`,48Uz/B&*JTe@"FГ^ђyQwma aebN`@KP(QB(Ќ1sۋ]IίC@AK("7Cjٯ{ZZujV-lnŪ؀ xV5|4K1dH>3u2 +:}:rzL aȴ:?HҗF6D  oF^+ [O1!a)^S:և섻/zfIAl`G⳵<_&g:xT"*lE'-g^ 7V=&Rj)I0ۂ4v\d'해 L"ɽTH2ȚsjM R%xgXTE4+e|45Ih/2w*kqX)蘛Q?~7^\aWfzRE;VկZtZrgקtH +Nx}R8&x%ii:S3־ȕ+@MOʹ4p*qC$kT]]$p{R iY̆,2⧇(XPMŇ5U%m59lOKɾpi)ftT_X>|3zn!y||O$:IVgiV{U)A,kF~ \eJ |AS䊑꒙49&,5/8ɼ2)cΧ#`y\ɻ+u5ۊvCltbWukK6( +f0_ 3.z\=g-,!t⭾}٭Ӭ䐘h~9[WاE`ՉN``B(?&Bb}-I]/X +BrrO܅UxKcO u :"[yX]yz\Ifb Z s7#=P>~* ݫhMJ+(F{Mdgm2 `'CEsg@1a +endstream +endobj +749 0 obj +<< +/R7 305 0 R +>> +endobj +750 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +751 0 obj +<< +/Filter /FlateDecode +/Length 2020 +>> +stream +fz0{>%I3u߳ޱ8gx6A +}Dk!&58mƮs*("uw" +P3u,@ ȆgxH#%Fjq_tҞ0qÌhwbQwDZu N,97,L{ X +/f5+OF3F?.b烂G4ڿƳV0+i@-^ ý\|t=<$rj]}ޚX L_=CB2:sݰJֱhg҅}QuX_bBb~(S̄&f~ 97xqpZ-xԌA7v%7Je5⟦Y9>+ "5rrWWF#f^=0ou!7dZƵ 㝯?͙VS}FT +t.{1 ,hLDnt_NXc{Ӝ;q\qsB5M+hb%2PHkW2*z=h"L";}AvhEFyƞ ݓ5wo糜3'-SfeEw{qLvJE!iV%.%nW4p=}yġy/Y3~Գ>7=6a VJ^vϸćdH/jYhh}, Y V^d2׮p;U2˨ M&L"Ql>tg拴Kz6(AvOܘ>) +ҴZX)07Wa~AƑ&}xLa!@$u +!!;jGؕ;/ݥhYv@1&W +*9FB@ܒo7(>Ⱥ?V[c(r-/6*,էݥs܏w ij\Yb1+@La|{ t +םE)9tD-Y)tޗlNHd[bS($yq#U1,gA.Cc_tδqx=2V`tF9).o6&xK +kP"G* m񘮊C(?84N!푐:R_, +2Nת+HlHVb\fpeK‚&(@2o g}K5Z fLGFzڬ4h#( bsc8 pc毡KC9~2WMފ+1\ؒ{^ppH \V.j0O,ly9]ɏõ\# 8 e]P}Miآ[Ign(;ג`.u3#6K. `rfy`!C}AgocB6Gi8$e#6:ì(la=p=C')9{Ir28`v3&V@e%iukHKkL;p7#E +endstream +endobj +752 0 obj +<< +/R7 305 0 R +>> +endobj +753 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +754 0 obj +<< +/Filter /FlateDecode +/Length 3362 +>> +stream +()3(N!.Ԝ->0::92+)\=LgfzF8ާQBNQudM3W7uhէt;Louz5uxH!4cNS^9yT&O&{^kxT+ie9VcOzĒZ`̡i=j;튊-Xo)rZl ҹClܭm~TG 1ٟ0w:0VJv&TG?7SK|}JIr?hVlT<'IQOu ۷Өa+{gdE׷it$ !GF;15mc9O-e DPP vt=XnmW0OeT]])CvK)K~쎄Q i~!f=?~<(D ;W]˅X!_~yuSCnHvPiQ`eT+쏮찛-y#җA@+lr3oL_pXU"#kb#@hI4>oaζX-?u`yt՟!U>P 6gPR>͍WxK}~B#')6Tz:m\D-wb%grvÞ6Aо R|޾T Uc &L +h/$*: c,e"ewA] m <#Ҳ4-/to wY2ecR\R@h|GF~lI?L{l)W_q4`h,c{uQՍ. +n(R_]V@=GE]z}~5] 3E6x-L +Aͳ-13) XԾxMitJZ,_.b7%d(mDU/#X, 1 +i/\}5ՁeEw %VXÎ.Bj s1hKxE TX`* 8S3'ι# wR8ɡ;ꌋpEL<)Ft5*]TƗ+u3:g;^ءi*TgIIެ`MjWu*`+JEƷ2TT!98u +f5lsS迧=X ERmqīmQQD3 +ӂ'@^,IJ]%/~5\Yp.ٮsl=*&%Z򦛴ͧZ㱭Ke_ tIrPӍy%J- p=\e&zlNfTKgvjHMa!Y` epv v_'98'ue~?WL˫U"Cj2A{VsPZ[b9mxYh7zfO B{|+zAw8-ޞȖM֌[5ia$; k }%2 }ڡ,|W.0}-ɾRY[E6r[@cp0 E vXQQ7N!0h]l] @*8Q,ҩk@'2 iZPEWE_,lt8c̽s{0NV3n:+ d-Dy̲'uS?C/Y,"$R:~ڄ4@UX:-< M@4CS̰p#ϡ +sT'Hau,񦏦qd%1Qx;zDmҴwtVޝG-ܼ|*a?NN@caf;3Yܮc,z:n4mW TDp+1r_h@lpǓҒY?5TjPt࢈hsi#_R0Pľ [$Bˌ8p:n[pIyC\*Ty^Rv&J>wm޸EN俛*4$"pq#Df2Л+dƽ)Mh\x2_.Cx{hG%e"$e{>wݣdYPT5Wq!:5F>i49eqL2"z33-J2pNЙ[_GmdE0d^`H G|8k}. gn<ኩQi@ߝd1 .&h~8a[t|uV5DK/'3C4/&+fĹ񘵆B|+A[@]{R2 rhVW޾׬Э.c z$I_iMІ^W@OƖMm*MKYQY -cwOu`!M +endstream +endobj +755 0 obj +<< +/R7 305 0 R +>> +endobj +756 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +757 0 obj +<< +/Filter /FlateDecode +/Length 1730 +>> +stream +Zh4^k 2C`K&!1V5̬/.9^OZ$ Y#'Л +A=[œ`E@fŲ\.\Mj3.s qRj2ԚofJ=Zyggs0\#跌^FZk9(J%:WsUr͖xXLs eր|qBW*t(U'ܭJ-RY*e\~pVw|T? C=5=6rkKcf7>_,?=r-1]+LJUEX]~[FWRtc6/lO:tKhV24G酕ENjuNQNO n_"$%0 v* "eR?Z䒬Ij`hp@wK#?<,fx-ϺuؿtrŮ,7Us׿BUJcc hkAp5PRYR/s=;<ũ[*|#px3;\ "Hy1dj1ZO<(\gP.NJ_ rBQVJ/2`r{^!omgeA^ Iy9Nvw^Dh+;EG[{djS،?jhW8k&gY$/9 ; S\en4A9V >b" {c# 6gv\ DPoP>iֳXJ%Jȃd[o'pr_/,-mJ^;b玏|ROq?sH[mQQ@,fH26f _ uBb)Vt<4~"4M;nnہmxS9xԾ|<:JP:P"#mq Yp0BX،'ٰ18C!( +X,^WY#g3dyau=Ř?di5eu^`xa}7#]Zz꣩c5.Hao(rx d> +endobj +759 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +760 0 obj +<< +/Filter /FlateDecode +/Length 227 +>> +stream +Q4鞥8މԕ1+^90+xA8^TAMD Ua~̯ {+"̆Ƃa1̺ z>K"ilqS#'LƑi$%]VZąՃ#͎6ґro4A?دXH3Z'%pG:,6l"`"PdݧRN*?3_-P~Gb +endstream +endobj +761 0 obj +<< +/R7 305 0 R +>> +endobj +762 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +763 0 obj +<< +/Filter /FlateDecode +/Length 2854 +>> +stream +`(Sz#J /PGk KΩ>˥Q1vKz;T2옔T:B̸(k"|88Ҿv[u8{Oh\o}mQ: f>0&^#).g뽻ӏٲ^,A y&E-2Vq%* m}D,mTŗ:*u@g ]^U*b]#MBd% -hM.%J̤eI%$ܱC*,^: w٧ 4(-3B16ڃu=i經wyI;5kpt#[?ʚ@u>U+^K'ǚƱe2i3oSP +㜹> j !31#Lҿ c&;F8]S-<@13hfڞa,#}0$Pcz#FttDԔUN v@H[E>~vK,p͵]׺}:`ڠhHod_T}t*0a<̳eQ; $Iw& p9ʙ*vA7ߝ>t6~0Q4Kg(-&;v H.T5\˲Q-ͦ3 UZntT? "H>ւZSg9nb.6E-h(D:oרUjؕ0OKGNV.]<;EVMl̫*7Zj^~pFաŴ;汬 _CUǼ('.^~h*1m#D,fA90?!:ԑGI%ev(p[eqzN 88(wY)bUz5N?aK,0f 2aw>JS0jv^ HEG.PR+'[-yvbX rE5;+GR h"Snoqrf[A(v[s&F| qYt\^{)ҝF1үݵqظ +qYdYӫ +wdWs2}Eӳ~ .ƱvBg$iQlxW 20%tߟR-}աLkjq"pB-6`2իh{li利x|0q^1 ؐ5+ZhJUS w<ϥ3^Ȁ;Z#t9ϣ܁sP\SQ0bM4hU`揺ԎPm@0qCNQ5|C">މdV,inANOHɎ–ʿ MO C [~V/w~ gX) qTȓwyHky.Vc wM>yBz}9 <Ƅ9ѻ;V.%F"Xc =:5VT%ZlՁ6lT~Y?ARxQ "-U%YDaša7GE"޾nn:">@.x CXk_(вjܹuq0aZ`6& m.9p4C]~'NjI:m+?B;7A5 'UFlrP͐}q{}3c.lej2)#P#9lnAf6aZ)Y'SB;=2 +endstream +endobj +764 0 obj +<< +/R7 305 0 R +>> +endobj +765 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +766 0 obj +<< +/Filter /FlateDecode +/Length 2365 +>> +stream +3FUc%|?ÕQ*qEϝeˢ\5ߑo`RB/Nx4 + +v|^3Bl[vaڕ AX:gtK>^6" KEZ. +<ס2KLTmegZ]{Z߂uZEӼQzƝ|ƚI <ճUpxG5v4A%6=m p >0S][C՚Ii3ȡÜ4ٵ 6k 4CyZ(/MpdL E059Ӏ7EBVL:$;b6Ye Hmۧ}*m`Ko +9fCtdP=kt뫙猱AAM +EmCeI1R1N{bޫ@XJOju;cTE|YX!U[tHP퇅Teb5 gP#F@w~Bϓ@O4)g,-َK)EtZ>2"Pib]߫]Ps0F57Y!-H%ŎX(;&ۭ/1X駯0Neo-2`5S6$_Զ(0Gpfs>uoz}XhS("' bf.7GUް7̚O|$XTxY96n> %n&ذkE_i{}ݒ!יfm'Y?@3CݼCJ81Eܫ}‡uM[JcOebrue@$&Ш:æX"STEie _QPo)%S;_1\ DGs'z@Vckդ;h ~D؅|JםAaH}mɖ'P I.`nzaYw k EvBq#C&C_fx6F 1]bAB2EM~E^.VZk5CU+tDkQj'tVݡu ,~VH_pzv:r1ate\-ZJWFYb1"ˆٮЍIRE{VΘgOpL{:P1lxĺ2M0ŊP׾ sv(o7֒4hߞ6 ,O"f}'WgNco9A]py(#x;F yha`-e:*kmEM]n4:"FP b=%ƙ- o*;E8P uCsw1"<#ݭ[`m8ܣfjXrZb ݞ#SSxW-跥|V!.xc*,|6Rx}Cz2TΌeVm).;5Kaϳ K\V)"U/ !S^-]WWK#NՂwymnt?#+x~}0d +endstream +endobj +767 0 obj +<< +/R7 305 0 R +>> +endobj +768 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +769 0 obj +<< +/Filter /FlateDecode +/Length 2035 +>> +stream +즞7>(87b 9닭2I^:EOg byڬW_3P{yH~r=/@C@͓otu5hߕ+=)WW26`k d> X|H0 =yD %m۾tgܳ:=$?<6a%#~EmbtvkՎ8Z. +D1&UcbN-%j)K1n1<ءSX3qj];F <<&))A !R"Zo}p%;֞eP?ђ1 ̭i)g:X`w߷V`z߭$:-1Q.Y3 +ƴ`u}}յa)miKE)N@Z4dn +kEgHڶLlctv}&ƵGUAt>Pj])^!vl q3!>)%6b .' Տq}~ڔ)YH Stn[o"pcdp@]WL}JL:>@鿳PW,F#ذ NmBft|QБ7803v 3kJa{3@쵩 ba+{z,bwq`oЗ\M0\BT{TKN0DGTpN~@JװfJMUlB8m6,8ХqՈi$'twd$Vvj{c26 cXA7=|W_)&G_ +y1wf0/cgQ/6JxB^U8_F$S85g匇N"Hny9Ԋjb*k`C!u]O`2)յR} LMT 2_ԼJꜜNR^< UT3О=A5 8'c|/J=7{ka4D]yD<@dI7,3R2m L!kU:_|r)5k0؞ tFoح:Wbҳs'MWAzcҎd pą{bظm5Rdǻ2P?h#ܩf[o@_TY^pLXׂ)3+ט=o,ʱsYL:.go[,ұc<%Վjڥ'!1+,sjaٯMfw˴?} +#w6{QI1A >-$zw[9owpo8} +hUTmMXn@6$ k]oM33X#NLSjC^kĊr`4|P @k+qƘd8(F0֯744H<5?HJ??ɭb j0!v"Zj +endstream +endobj +770 0 obj +<< +/R7 305 0 R +>> +endobj +771 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +772 0 obj +<< +/Filter /FlateDecode +/Length 3091 +>> +stream +ܜL @-qf^!n+K䳄 J {(~I~~t"i$4~~ǣM|btƒ,i%<3Ƒ.uoijއ#NBHzEyBq[dNae!ΆH>0Ý|a'=6RQ6C>"W7é\3ѢOYLr?௖S^p"&gOjv!>z r)[ȗduɯ*v2%e 6jcκ9y R_6N69a0zQ@񂓮~3V43Eh2NqG' R϶kP" ٳ*A;ԃeyW@}?Z;'o̵n` ^NfE+5"Lnxo?oA򷰊6B| 'ӁAݽ31A)8pI,btq4\gzg TD.OCQr81ڈ8o)"&-W~Ӵdq^{{٬fa;Ʉ'2+~uVJfƎI8vKC)M~Ma +1!f;N`!"% {&KG+@Y8e1hZ-N_d0#o޳k3%)iWɩikT 0ȹ"YZz.V-S#)j!h[#gg((+(xwsdTX6W0xp\ciVjzwyS"ݤj$bu0^'ǟu|BBܬF t>m%B ,hC9Ar>>GGho3@a,"<_%]d^R~ma f]{AaLF񐸀!X*W0CZvߌR[n?͇5ƤLˏ4'Zq?~DàP6\(it%&?ыoMKV]*=_JQi ,E橪idm)%*%;]R ;=dj*'Vlbr66kVw߷#/-eSq-^{#τUɽ7sÀ]$OClSIғOO?bxWT1F| sJW]߬gW")ݔAԚ%>m!jT*H^ñfco}gfCDxA#d`%-JL#c(%ԋOg4Ϳ"q+@nViPZd"0][TF[َ Nf}'= a~4<)>>zFDE$"b23"df$^9~6[04EC&X<Dž4mxb5%6}ڹ_EHˀßv+?b!v!h.vOP ;Hu.ǝoe^sqf!x)τ6N կ_orApBK"vO"~,謔AZZN?VVے/֯v^LUWx +mһO +sJ:Kԍ^1{]!_J˸/Q#̓`Ҹk(,8gJ.^ +}Ïd{"IûWy8x]-jYf_cAsxatMԄ?ɚDXמi\n.9} (!a{KB5QaRk"^`īw,,r BB2J^TxQwwA$_{Ra G,\QJjN =b+ vOTOH;D@y]J4fzc% +\UM|ts:͠+NcE%@NgQG>J QaX9Ј QNOMU\ +MHRz :K؋Ǣ'Pm!ꠑ:)Mb#!3/6Z]2KNgc w!GEl=Ys aG zUk;PYl<+ͅޣ9ԾXC- +endstream +endobj +773 0 obj +<< +/R7 305 0 R +>> +endobj +774 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +775 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 238.115 552.373 241.181 560.48 ] +/Border [ 0 0 0 ] +/Dest [ 105 0 R /XYZ 75.52 63.6 null ] +/Subtype /Link +>> +endobj +776 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 49.685 243.175 59.819 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +777 0 obj +<< +/Filter /FlateDecode +/Length 2941 +>> +stream +M`ua KgL8/K)1eZ9i`쾞0SNtlFТ~ nFS"aE7i,aVEbΨpSl>+A:vцkx$#=T_&)RE\Jj/(CE5J,8Eײʏ(=L|fȡBj"¿iZb's\f}*KoJK6hkX矟`7C؆N9gܺfF^oS-?R$T7LTZY3'20It|`=b3bpb1{ \ .ݐ\1ȡ[:?K"`l`jw SAg.eDXV.݀ aj)̭tAp$ʻo&(x5y}D@lvJn#!Ke2h1ް Ac.v_wJXPKkb@(AK^ 'y6UK> +zTܻϥ׋q+r\ZB*fۚs>xQgR2|z*DR6d[ZJy36^l(c&t2;- _Go6%jfe%DEMv),'G crYPp/Ե'2TUɕߢC0=~ + S>UR=R,z20? D N塂{[0r'0T/za]ʦ4~n '-VWAilq3W|$ VKEĖ`?>%?wU _2F^EĀ5jbzA_@B/Y쩰JK`D, |<`Sh!@0{_ XrxyoPRWW^3#Qh|x䧥_2t[nDr$Vnqru iE ʰ(:9 tIENr-X'Œe$V`tͪ;hkRi^1ZoG\ dn`UO1,+ Ms>_P瘽y)];p[N@IYwר7mo in8$ziiv7}P_n*1]b#4jaz$XÓʽ?-e;LNGy:V9`0w뭥}hDHE1}R*ltϓ%T26ZH&*W%>qHm,'rz*ƇBK1\Ah]c- JۺJ;cE4jr+!pVĽs a>J4Ɨ7*|nmĘj/ntZTWu_RPx"i~4 ߨ;W2v Z#*WR%p/q +ڷ\5Ņ-R&LYNS&lchrp7Y8F.zUܨRL`ۛkY{3Z? 5_ڬ<{jHO{c_G{IA (܁[ڂwv\RDA0~5GL%s1vSdTy&l5og2ĺG D1yɨ!}N|| <ס_I5Glٌ3k`3~=>_`J*1gFPPX:HwVzdop 20[ogvo\7;ISvs*]evD +rVkC-7RgaŽف4vuo#]sjwmkE,a7iB%0j6{Qi_y)!X:aRUnȄ@O5:LIJ5=j(+1;`eP礨t"QZНNBz}-LѪ/sׄ"%:IJf MO?YTbA\N$ \B3DBkV 2Cms4,:,ofi?JWGMNhE^, !1% 8O.I1 +UygyeNfpBK$i¡ůS#.77A+xWZDLƶX_Nf{Ɗ3!/Ќ.qw*aDnb)w'#0w3 ZS0=YE1OyPssP.[a#C | QM*SHN/Ҳt4zGi Т$`҉)).uQ(/kCtb@l1 6,m%bd.(~ZP+\ɵ 9BnzK;.cUMBy*}1T Gki| ˛iRXTY}?6g9GtC\\<> +endobj +779 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +780 0 obj +<< +/Filter /FlateDecode +/Length 3401 +>> +stream +>;?%*<:uW"W 6A;^'F8&JI\D0`;!9sC+Nhn,2 lr̼_RؠHpdw'Cˇ %p?`&qޖzmjщfV2Uvj.NFfL) ~S"Dʳg^Fe1 6M~\lAhFQ gBZM]\dhLm$2 :mqQ8GҝT>|\p|N7مAy,Vل.qT'&dʴvm.tz[e-rv\^2qt8?Vo|9f5tfdbHCQ +*EHQ KWOQ8-6G孰*sQn5*@<:mj +zjYbAá)iHϑW}śE)1O[s8oY$|V~qHvz (:F ж8pY;S /$7'0q[BSo5 cEul{O*/0j9&y !Š3,^oX2\мs*k;ݗSN>W ~B~jN۞wG,\/,IgQZV) &4o#kg V0Vvkak'p.\/ Ȟ"+bV)\6*&b/A?qu 486ZWo[]j#4}Z;O}UI<|MMW 8_ Jy< z؎ +WLL J5}+ir갿$^biJe8B$k%JZ!ZK`/W۷{Bq{e N&"=qܷJҔLshgݕ^\c!PS^z Apʐk5g"gQ)+z{^{[VSceP"J(?l i  ˨h0QLyȱ1<_}tY`]-)$VjV9C (,y"7Bf!O͞EC4X·z WwtgHqMIVNSAvBJ#b0_ٵH ix3(| UE"=H)Iga(i=f'gY"_mι`2p5̾ Di2q$ +}^sU[gIv ~>[j)';R 0)[X_ɺk^ӑ 3ڙX^:#ylYh0o3,Ϩ%7'NaXS:ާ!:^3MyP ꁒɯ 5۠zУ S=)hF_j#,XDFPVbD)Qi.a6 w WYn+\̾q1[F}i@7 k=,}ޖz8Q}0ݱk,gu'eū#,ix6e,7 pSP_Qݷ"ğ\72v~S3ȈJ=4gH* +%Y{ۼ<29XxRT((ץRlB3|.DCtJ +Xr YXiU,p'[R..&Oӛ ePf"Zh##?J ʾ,78UiKQ@˫\9vR}xn^L@u<5znM#N< +ԋTNF4()1)KNUz^b*ųrZ2OLXNabIe-]n[oX-Q7[H|1k(q'%{t ;2`a*o. + @&g"'sGwJ @ QbG ۺk_#VmP4cFz7'p۫YUv 4\\&cf:[U|íjQ*3 M;'z5o8Z| U.Zl=9y^r:Axѯ.7g@-СqN3FdxѣhȴRgjNIѕa~&@'bRP=V aSN[C[2α;HqǷb*Qb `;pqz~]"Y#H j}]m~2N0; ++uɝky-_,8n6386ID)ؔ/A(KT4U. *ZӦLKRL^2t-&:X0{YD~0\= +uO#?p1 Mp+T[$h"yvgZs_QE{jpe^wMnǦw^e;07(N$w9M9B"4~<=g2ʯ<}ū%Uc"4R߁W;vn4dNGh6GVdr }?k3ϵY"؆}\3%^3;9g "DZJTO,hsmt35єw(sKgI)> +endstream +endobj +781 0 obj +<< +/R7 305 0 R +>> +endobj +782 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +783 0 obj +<< +/Filter /FlateDecode +/Length 2629 +>> +stream +BwIMhqWKڱFt_܈,eG>5@QE?IU)Qti01t,m))BL K-5#fQmOb{ݙ l}KQ)uM_n9̾HqN:-t)׮~CC+ Y9mKW94;J J6L  +eb&(:bAǥ 1EUX`vI^(TxX<ă\tuʈipډxvVPf5@ߢhm&ssXiT8tSR, +(h享4cfCGМ%+PNȺWjHj!dO蓞ia>g'hmK.t +tGՋX{ɢ䃲Azѽvo5Csl.R;XL<^[a#˴NjuiRH=:y^f8,iC@uwZ][^y8.GZ6I*[tQ7fp/ޙF.bi§Ж3‡`8qyڣjY$#0cԽXٳ!nuljXjO\i,~GAQ +iQO\d<#+όf +M@Of9<(yC@"vo<<)( WfӼ0y$jLnfMDXnTZk$|9r(社.[ӻ|'4,w<%|K.C ͡c':<3̲nktB<%N J{YvMvI >1r__qֆWId}|M> tĞ +M|r B z}kHG˗ c 1 Kh`9xbt[l){ oxR0D!!$al ǷFbȹR6 ߟ/,#{< +dD,垨쎉ڡC)9- )fp$|Hu)`iq%d7UNr,X?¶PZ +P S.o9Dfَwn_Z =CT!b1:㨺ݭ[N뢋˻Nݧd)T)Hɿ L?Ę4C1%=Bigt1 G܊M7de *=R@5'EX[:XD//Z`Wuퟞ])}BW2t"^т`IŲc-_)ex}ZOlg=$ ~tj_&1<&選 M#E0IЂ3gVN~qM2Q[ztoy;7oYjCf>TԛtPf#׾{@V#cW^Ôtd)6e/D"Ƅ}u:%8w=@xXPw)t[|yHV=$땦Mԩ,Fd^+yi>v/Dmml#'?B^ۨ޽ جNSqǯ|H4AL ZH:n1%P#C/ 6ݜ"#'o΁f0`ۙ_WcFG~Y=WXWa`/n^VQFQGr Pawf]-[Aװ$(f$ZTǦ֬Fs`;%bp=7Ǜ6JLlAvWвs6(b4bI4tc +G;ȭOZ+÷2,&7joXQ ʖJJe*+ xY:M)nÑ +We!8ǝ>Ku<@*Dd/QFwѯ:! {@_wdT륂3(ã ac_&~ZJMw݋T]hOZ|eœ4I{yo SglhYau)!iE{TΖV[0,Y7N?j ӀfdXx[> |%rIOg"^ ]hjuMգ{DD6G41h7Bj*H!iƝ ζV2$UWLOI\sg&0AYws.lH'Xb~^, s7 K)Ey'"b}Ǡ>pwf3}AmnǔqO>`$l~2xSb!>5Y-c& +ʁwt +endstream +endobj +784 0 obj +<< +/R7 305 0 R +>> +endobj +785 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +786 0 obj +<< +/Filter /FlateDecode +/Length 3074 +>> +stream +[?6G)WΩZ3% +-^' mblejZ2r_uD_&r(R!Kr͡hI,Gvc? +-Bb.Ap1nV t$R*v3?r +- +81CN"db*ӈT:ryjo; 0T:|!/ea +N!zw}j7VLyRѲGl(uP2*7,{NkEw6Wm$:X3~fn7FooDP +{jog7짬CvΞm/vT$A-+.*p p&dvlݢqW&h|p!0YQa1~[4w {uΌbp[U6K㡴? DJ;_iA.[KfuDf9M zݍV|Nc0!B.8S75[Z2X^=瘇ow7t%֯:yF|~O*V _n ]NИX&ɚj ј ,oV>)CZt GaT͝3ء.:dK 8_gJ~ sVT8ٴ4ѭ~ @-P~B(VnSdn] 9LX3( +v,pSD>AO#C0D0msǡ,꼌M6W1)x܋ҌN DB\3?&Ktb> tPӁT-iBt5U:z\'Zml]/rTGt`PgwCxųU~!M ou9Y)!.Gq}~!TwIjnKanV폧]]:N&hMitʹپV3#m.[J%6ԊX&OԽWPqc *Jl[RQտ}f5FSIƏf lt']} 4 Ϋ #U*L,rx K@fbH9f ޞA;$rU$Lʵl9i*HUcO bߜn*]MijX&#*~xr;&ˌ;c0@nF'뵆()ǜKe2h- tɊ7RXedvX<7{XO\ nK0G  ؁P8'~Crbg8k'6|$gi e+gm 0 =A{"v`xXB&i3o߈Ї',762Y8#thek۟ +~P"lġ>뛶j`]_;N3<16Wzj8pa{|_u>=iI^)Y&w{rO TG68YY%x>H;6Xzqý)DA/~Ms"y(_ =o8IA* +lԬLuىCƆeGMҦ);^-lBI :uNvB{n%эT]Uc,$I#l!;IЍ\˚ocBUC>p*vt#4Y$y5j45V8Gmۗ +tgkHIQ -K{!5;ÞE8=FM$1C2-nP~VpvM)-d3ÂGbI: M" +$odQkߕg0~1VQ6\ O>a4۰Jh+uڬ`T g[$ncE kįy4ae- +mW(JגAi'-X=_V\ipjvY.[Dz]a+vn<(h˝ |v +|.jdfh){K7ku,nF}s[$TewkS Yj*"CMZܺvgPjw&p0ۭX~G 20W_Gv]eQg\$w$Wa\m`Ҟ9 /qo=WEhzRFsx+!{D`Ӟ*>q…;ny(42*xpЫwn "~( f+DL݉h2'9$۰8l-Z+Y"+]~ܐDn*ro7zXO?/lBՖ +endstream +endobj +787 0 obj +<< +/R7 305 0 R +>> +endobj +788 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +789 0 obj +<< +/Filter /FlateDecode +/Length 3411 +>> +stream +-o ޚFdCqk)_ E=/lWTʷ=LruJOqjE%o noWc(S}㔖5}[xX| |=Ƭ(V&3PK?d+1!^;f},2toÙ_>MC%3,?Lk3P4KjK{![.޾Lh~Q+5Fv6򜲈?]Uklj|Zu#39~Lكtǹ!%3$d/WseIc+l'"uIS~hso i,JfџY[44 +QX`_H!dxn䲊.}<(R+c*4EgT42 +\4^U(E UcV> 28 TfQڥImMH.x߶Ʋo"$x!{R!tsn|i-{Hp4 5xΔlD{ϩC=sRl^ J.3#M'Tic^ +-\;yڇjx70mɇ[Is8x@{Giwzn%S +59jsMl'f'삭-wQI[EufAX_f#1C.$Wzw*VqR($@=wL*Sm71,Z,T= nyr4ة;kDK<,lb@Xxp!(O@ +ΟGS76ڞo N>,%j4Z#0i +Vq5D`[fRjc{[!b]j O*@+ VwDdbl-JnV#j[o/@^}Fӵ#}imqYתnT™r)9GI(ǫ]\g}hܙ^{/aKx344xv΁:eCYH=(;02|+D˂qp0G-VQ&`7!`Fm{]ɻٯJngTWqmo;0#o޷H>fbLjѷ-DRtX;혳_)G= 2@7I*K qΪ@~'7ZΑDArZ01I68wNf`M)g[H x+iC@,i*}s sz2[A~Q9Y]y*B9Mɞ!>U=_eM?SFNs@l:015 9LSz5 +ZNnWC`R$!! Nx;z7M: @р %R 9:dJU[_oPTKnDxY>!CCX7F4"LbXԞo(U$.2i6uMۋ07 -(Z[i^촞HfZ?d:~Mָe /#9iy%5)a=<30Ritb=$]L¯%,Mŵ Pe`8^l lM(K3eԥTBP`{&m-ɸ/lc?U#~v'`zK8(O5i`^UtcKHm-x)9ۨy=q`9V/g 3n_+Tv@ޣ Vq[faPz כwO뀤9ұF+rT={2u5ÎHnVgl~1Q%b9 _WIJNٮ3а!h()` ffTWLjF| 88FzO832.PE|eJJ};k 㡒Hd:.gK +endstream +endobj +790 0 obj +<< +/R7 305 0 R +>> +endobj +791 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +792 0 obj +<< +/Filter /FlateDecode +/Length 3003 +>> +stream +P`WzOS>EkzK={CBCӡOiBX8nJOcؽ>AYP"gSDMh1+p2sU^~Ffq剀 塛5ol]* o;uW;tCʩXvnZߠʓeXܾ 4_f|ˑNggA+aEObZVNto h<#.qSyGCPTGs'׽ܫ& Btl##h9Ts|gtQOV/UgiVvP*C WB,xyi>u G"l.XPuԳ; 3»I=v{PWD FQ=AwɎȄX-oXвw{U+BׯC) E1Uål; YGz,i`ZUM2+$MX&'eb}Ɔ[of\ 8+3CiX>jG#1࿠Ƈwkʅ2LK Gpdr3w2'Wrq64=<@ٛ"E`& B|>ٝ58hzGzhd~ mkv$%sp螝ݰQhK%Gštwh AǠ73u E}]ݜ@}.0)sth'$^]/ ,ʃަ某 ڧ8D#F 1 + Zƪvr [13N' Eή[ץK̩^?W?f njTH?T؋a'ɼ35Kx)hsqT u W^l(` |pcS{^VZ[~L-Ssg#G!0\Q0\0dtՂ2g FEgC ;ܬkQPcQ"aIBa6@u~_/YX?XU܋A4CxAq$']cSkf;;߯:@++WFzuӼ&$x70Svs E5 f}Ӆj뽺#fxTRFJ})07!\P$2Ѥ3Ξ/?nEQ +nJz::nOԡQ̑@PQb"9/M&c*:sSy5o%v Qa<'CmhYyz{&BI@Fx4a"DPeWJ =m'}i%7ZO $c3U#k SL@fH1R6!Y*W9o6҇~5?xؘ{RbLuy_c^Y@> ui=%a&i}F4CUMh8Öeo!x ?l~x;Hσf<0.')#yT'RE[q31 xNq~?^(T75I* +ѸV'w``ޱQpv﫹LYJI{t> +endobj +794 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +795 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 298.728 302.731 302.713 310.838 ] +/Border [ 0 0 0 ] +/Dest [ 111 0 R /XYZ 75.52 60.98 null ] +/Subtype /Link +>> +endobj +796 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 47.072 202.81 57.205 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <6751dca51b80730b03ce885a09056ebe187d2c43ea7c090214c19d1d52315de96f742aa340e0b50ace3c59ca2c8592b7cbfe> +>> +/Subtype /Link +>> +endobj +797 0 obj +<< +/Filter /FlateDecode +/Length 3491 +>> +stream +k4}a8' .`acf 䓂TLRFLab}Ҹ2˰F:@4/C$lŌ97$89pa9Zpo]Eq8k=Ge_Κe0!v"ZJ> /2T$y*s}g(rf1mS +Ւ,$/~ut_GSGAmD4N6MТ%nP8VCP?%uM%{:e751><%:-|]eFʩULFvCBT6u0KkHdz_xԩdA+J"Y[Zqc(9͓ȯhgfR}hB*!l@|r&64J&{ެE 45SBM.5tpQK(u{-*Ӑ&`@݈[1*B"f!LɁ9"}6H0jQGk/moV{*cLZL^eT<=ԍ Bxdܒ{]5rȟu47M't c}P&0:W;Z"֓~x +Paؔ;R /2E{F<+Y'o.Yםdސ@Dڵxbr-#⃍C h k +1W]\LddB=gg,x0]&]V, ,_qdji m7db̈wQ~s|rS֗^sM+wȺ^`j$\Z8tqv^]" +Z3<i rW(Ѵc?K;`/9ZQ&w#(?pӋ7AE9 #Jd3gX^\s]}pl 6D͖>MS&UzonDq3b=IqOEp큥ND}IgFq]bc  ۳AƦp0qV|1nbPj4ge֫x]mQݟ6r_|2  _I30M9mӚO*B1ḭ̄}`),ӼH<O:(6vZ'u#}g߽& LC|Z4 oDMic?T7_qȜeyocܖk^V7H|KGʡҼ?u6ޛ{ʫ Y>)g2*)Ii5URpY9b dž;FIOh` ƠW$ExC9#[D9w[~ڭ 0oSZ̿IZKPِA˿A)BKE}a2t.%U"/!d"3RdWh/밖?4[~}OW|.r\&ÝтH?i=JZ0c:w(<UMF3s }@U5L>,?ABs' ƾ8$E۸vo<&^.\+-E\ÖzD99ҽߗ3qKdpqmu*n ӏSEZNt#"k8!l$[ӂ;Q)ܨCQ9ݑ衪](Vl|:A<=AG("QXX>/tndeslS@8Sgy糡*ms-gW%2V<^% 903x3Q6p5uBǎ 'ϧzZ[I.{Ur6[N6vo)g= !|UTQ(əc /Ɉ%̈́kۢf.ZNa0";Y@Ca0eʹr5_?yopc S(UFwtvD@ϤI [oqY > +endobj +799 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +800 0 obj +<< +/Filter /FlateDecode +/Length 3065 +>> +stream +or+hx[q% s1L6M{pR_.,locr`x/Ddk@Agtyn3s~7M6r/h͛[oeQS8_x5Rt;QzWI0c?֘ "rePx٧p.j ;;q20|9ѓ]ƌ\W9HHʅ.}wOmZshlsB|M%ak]#w}!-j3^P\r[T +0ot3DT<'vY'GQ5SϛM|AA379r,! +7֋VȗVdVFOnMe"I@Y<]fO/^}R\S,w".'ZA)e*W$^gaZw34z3Ց ^]a)Fl-?> J J担Eϟ>b/x*I,,Uu׎Xruè} +.k52ȌZ/)*jyG"B-c`[HGaްTAɒt;X:'fJ7f0j+rrg'r3e9|3Mz-,6BHyFJf+0܂x\lV!b(\FcĂ^/=bj4gi$327Ӱ_uk8iAg#! Np/B`M`bQ^mQ(Rv/X`֜xj_hoZD~"-#Y +DՈPd:hG: >zВL\o˟8e,V'ӷEot\U*'-r;Y&-51=s|nc? i ka$?ٴ3B[}s/Ş]kNX+|0;Àchʩ.W +JbI2|4L'=6MȪލ2彋`mډ @0nYzNuAJ&y* S%%i+p[ضRSqAlA`e%Wip?ET >`G:DءqKiQ:s<6\<} lQA4[}'`U*mIz2"B߿^[O)\FOVdөsy@5e0D:+j/&Sdm_rTO.sTc5%cD2'<ᴒFyob9pe$3jŸuD:h[-ݿ\]w_,}/_^l<^ò- ]ZHa4Dk5GV~%lERhmRS'! Dt3>.,6dϫVʨ9}^P]#+H|JjmK(憞CC^,('U^rTa1 {s*S v^i "x#9'\d] +7X4D7W'[.]wdteDs|/M pTz$"]<)tU| ut+:A@߼~VC 9/cfjWzߥv+Pp5ӷ+$A +`,14m΢_̠(#`aMYw=c p'԰i$xCVsϱ&s7ߘ^ARy`3w#)aF0>:`o44}őJw(%7=fyNR3C4QpSf;ɜG3F,ӑc7m{}8Zdp$w<~e->e"zc&_ *yPA% P:aU+#"6@Xr CE(am9xq5EwgTvQ~#D>T.KXҡm8Ob=h߀) +1"[$9_,lnH%~ɟ?M$Y]60D@Y3@= +4#0> +endobj +802 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +803 0 obj +<< +/Filter /FlateDecode +/Length 1436 +>> +stream +5&-бs懋m8z\NR]C +7h*hZ2aMn)\FoE FE[򺥥J%UO2c0?CgdfN̓ .:W(ҋ܍J bC>qc!_.,^V +Et**e{8Kpد&.&lκBѲ%zz{H1BE݀ALgǠHIM 7:~F{e5g{CyoznR:P%E[xleRU2_iC做51Y=<#z +IVY* V.$* +k4Ia'kA XgTM1ɢ~Qn{63Z-Z1Ĉ>tc øvZPKO9G |)-~A2WzF2WcqX&Oc<}w2ZaTco̲N0t" +.@`_82dBA#c$H6MՁ#^gۑŠ=&1`S)ѻ?_~FHLո~R ՑBЃ˩<@\E 2 ]eO!ArQoݱέ^ 9>=i&o(ٳ;JM{Urp?D7v]'ғƺRB̤Ż/V!kJbpw#]l_3PIԶg0llo(V``ކ-ϛ:]?r.q*DuakFE$r{I1]lNmCT1)g:JAX)HY.ӒA;o.줫&f6cB:6.Knآ=Tavrr]KY1q}c+/s0r /Ǜ +A3cK +_8Z X^²yX7}k~.QS [ʖ$sd(,W`9YSۮeQIS6:c`tHIo[r$mx g{εd@8U.G3\/*Ý1zbi:% vTbپ*D0x4Tsm-o"Nz/2!f*g]YLBI6S+ϸoBr]J~.%k7 : \.aMH<[ܒ#2$Jɠw oM3'ETA-p f_9)} n3N4L*◷kTvd")N2=Y ݢv +endstream +endobj +804 0 obj +<< +/R7 305 0 R +>> +endobj +805 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +806 0 obj +<< +/Filter /FlateDecode +/Length 3198 +>> +stream + gŜ_xΒ'6qaOո|᣻7 Hsz7~޾k.hHl뵓W̶ϏB'QJ)?(g b80}_H>V"{HpeMUŔx"Qw{7Kt%Fw.(]mjzUPo=,\{yLM̾!@%F0fOQf,D1UAcTwUFk8F 7t6Op(8#S/*>whGP/WU̾Ykx%OH٧HSBEܤկ.v0Mhk&A}BWS?>, +x,LFEtOM1.X}&T9JtM9N{yh)z W̔opI]fCS\eJ;<,)Gn4A n]i}z='g^ZfJCjz:隽 k.cS>ڂ\|V''S`SP7%^!#b9U~C`Il 2*]"Tm<|HI5bcOt ĉR)5(qEby)NI + ? Ukc?KI]Fg"`4L (607=mZ:u +!ewsQ@Wl}3 3˖Ym!~Upv8L PFSoeuVn?fyRa"ݡe&ݎh!öۈ,mu) ا < ϵh^GNRlM[leSU$O] &.(Lzن;m.mJOO5oC 1U0q葖"jWw0cl +o\F{MZlha ,\{Xh{zgA]0Oo_..)v BQ|JH~DKٷu @"qFIkLw,̊75J>jW9 j(@3f 1#ޅ`wf3 g&޸D*H4WЊb55 uZC B$4Q^ƯNFoX!w;ۢ8A~L:%7qq>ޙ*P;z +'oPa7PnxH +%CO&-3G8Kfζy=|h`R ¬h"_P!_o:cp:Y3<:cPc@iJ;{˙k{BXJ!VxTtUD-OmqY9kڪ7u{Eש&w)Q2K/f]\ Kj,Lx)LL N|1SxxߩNʟg).vA?^:bG|)&fuRɖE3c[mOz _ߢBz=h y [F轤(7?R_ǿY2Vo=} PLɴZĽa&ruRKg!UlӢ8wC]5 #0UC2&eQMB&"Y ; И1M eCPbBc<PDb顽Yt6>d!KЖrGCՙGt7LFb2d)eIO5‹ J2EH (p(X륺)ꔈ\\ `W: l^J:=z +DTB2ҟԊ/תH|:Ac((%?Q^te!ញB %|N#c1c,ĭ40)ûdSת+3x|[!.yQϰ13Ivd\(*P1p"TZ#6B9iǏqOY45H?X]42 +lb$r;T*+>Kw']h=oPѷ=5м)'hSՉjB*n4߬@ v=\uR0t!A#|VFhZk(S^2k"OhQpmKXßvz<%SuX60|wz*USR:pi`܈JٹcٷI$u X%ݹ&63NO7~8_\UpM:Y%}|jj.X2 Ն1nŽ*< +bEur@_C3> +endobj +808 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +809 0 obj +<< +/Filter /FlateDecode +/Length 3098 +>> +stream +lzo* xN@-9eSsF8Qqj,~m8oMؽ!+OώP^N쓝f0\w}uOB:P^!إW~WsF:y"juB"{7l@>ۙEܥAF *ddj٬o)t"Rt.&k9+>&7ddޏIY)rqr}ns{]Sͷ{nr͌$ԲZzb4(V5r2qjj3+[e+39zYsT 监{[u Bqpm",l`4HmfJu QnL׬$ 6͏}-*`J]#o&]zX)eNWzӏF,h@fW>D;aaNGe>'N>\}f*1m;x{IHUcUҪz 9vW/=ME⬉ +tw C: ! +70H_>R%'P!0dN^O(U3KcN( 5Ac]N m1 /tyW4'|JZ~$;^Gt˅DC`Dc Tl_%cњGG6g2K& 2GśHpQBBZo[xE} +\Sr;iq)(bh=ו&N݉aW_+=SjhrǓeUSN{ogb5q Ži5̌V-69c[%ofF'X lz!Sli.EaU휻Keho)UON"PW8KItHaQ25U*Zh⨳nL bPVJ&,܀D:=":t_|N#I,֤Dz`6\uVֱI;J_>:mgJh +=e܅)r?Ct2[ {=Ofd>Mȸq*U~t4r73VVcqv[]Mgg5/;V֢}G7Hьd?O\!P?8ᱻ8<;#;7O\9ÌM$Eqewsܭ$@uc= +i2.ke֙_.y7ǢA ZdR2pjl o-*@9l`"DYүG5!Lu`7mU{)^U\8}jSՀdf۾g9*`5s6Dφ~(W) +t1u{Vc{8 ԥ~H Pcsऱ>lыN=` ^>`\_Ep8Yo#onȧczViq*<(.$I!WHd sc!bN;1;KgH d_?_Ye*F` + Q-}Uw2"'MWd,0v]X8EVB&u;Yxy[wCcXJa7/NA`}N(mkRr]V4&mdۉv1CbbHPNÀBJ*x7~ao2$R7ȋp;;ȰSToa$ #5i (-lqh@ >/^mmsAZPrR!**:kNF\X)ɸ,,v_ɡ_BXQg4|9mR{Ay\DDU@\gq?$}tY#p^177ɥ]my;[J:b]dX[1$P,w,I}T0垆'LS90EӤG +yQu. +H#{Q*o0`$\ HiTX]beH5j.*a9Ә-wWPy=w"iKx$۸!)B1n;SdSCbAP}!w|uri<[v$=c ;h<TP $dڣS, A"U=F,,Hqg[6YRd$bl"!)V;h!Fy'82:߯1&Ӓy=pd$ϫEus䡱PsH,v_&I87pO4XHsvrEZ-}gEPX%a^o>WlߺrfH;"O<,}Bݤ7z?pO 2"2`ijmF5pm]ݩOm'}V=YF(HəstwW`܌|g*coX_"r| `l:ZNvHsc@toISڲ BJ9L'qbO 4.Y]*G))N)rFW8T'8ֈTtMtu~Rg1u! Ø#ysJAyxkgI^/sTklB(&k"`fy"/g';.Xd;eJy ͹WN>"76N +endstream +endobj +810 0 obj +<< +/R7 305 0 R +>> +endobj +811 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +812 0 obj +<< +/Filter /FlateDecode +/Length 2968 +>> +stream +|N!m_aŃE?9Ұ;Q:j;7'Mi:CȆ . Hnxǩg_@7uCceuj=3otE$5f5|Y7w7V}YL*&Pjs9$,0zEGeYN`(1crIP ǜq2O>|)ഒ @= VƷ,j^M_Y˽B48f?I;h1P\-Nl URJ1=e4[ANʻeJOo&t-r0UntލܢO*m+ +oB(n7n/GޜNKń9v-[`אqԩH43ޓPs9YPS@}s$o:$Vgih߹#9(;| V׈.G'N]~?Njf;diqXz;vqn$1 +I:.'/\ Xhbf:KE{ĉ-#;^u|2p/;q^Bcf8z՞-<®͆}ʽ]t(ÖX3 B!Ւg13DbѲywdkD"Vc +RP+{9z4WvD5~ctXY2ﳾq_x]7.5TC_rS7\dz/gLn{kň%hYT &^$=t:< J3Ru+s:N&jFݗY@*Wna6M辸&bZtq1n\=}"!1`MfT"W ./ka1+ \UM21J73.Ofs趛H 9eߧlB)̾GEȲQ`\^3;Q8=4E(;l.zĭ6@GY5nȄ%m@ND-%6 + P\eՍ3_%F eD J* r.^)oS ]Ev.bZRCx߃/NņKh;|O~`"Uj^WZȟ苀hPV@DEaB ybx&&0}1PZA2nuoPMP3^;$+Q\R}8>-v;e{N2Ǥ*/@?3*?К<]B/9=9vbŶ[nw/z*2=ʠ\I5{B" ;s =ErG5~?eL +AA݀(gonLoqdV0X]-þk VsTCgJeIFN; 0O~mHiju/mY{Z51L 0*MڨF(Cc1]JE#Yr1KCb& +"ӓjk$bCꥫ&F^A +kݏzfFr9bceSj r| +E~:x٢9ku8׈BNjyfv0=R&f{"ks/qR❈;R[&ۙS\ww Ap (hKṶ'3xqn%AXI(gkZpc{C1x5+f{YlXgNQ5lY8&^/b̰R 7G @dOSi5ʹFzYa岫 1k>ڔ0|)*ڙ@33dԨԭO˻Bn#r#oB%:,{~ѱגiQ5KMK5e1 k,T "֓b`]$b狖$xM@ ڈ,e&?q#2!ߠ@Z VbUփ0*ӓO4zLy: 8Z3OrJv- RΝUl 0ƼIYW ]P =ɯcw:OL+$<6]|LEd= onRFO%6U|;6!*Eɗ __RzYdL- p?Ǻk4?cKeCUbbo4J ZOfM 70*\LٹhmgyTfTsuC@ ;-̶GKؘ7o+UZ)vG[;ssf*a^t$U1~k5."b+IAHwk[S;dN8ZoZe̻WFmN\m0TAе3Pfrh@ tXr=٧= o;:Cybzl`Y^-{lcc\d+aHeEu% +^UOҨ (|J":$$dVxZd +endstream +endobj +813 0 obj +<< +/R7 305 0 R +>> +endobj +814 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +815 0 obj +<< +/Filter /FlateDecode +/Length 2683 +>> +stream +#}b%q6lIԣ-ΊTsH %ٗ:ώKd]W$_-α/ҐDX&X8 +f/P/M/s`?WqK˰ *{2`gl>Z*Kc5Dr:K^]P.~ihR+ٹT1ST"|r/9Wlh4YHJ͘3$>‘f7;I',Y,L8-$xOAq;{^}&.n zO<ްXް ei mt7D|'0'w-%"iAs v[™-Zպn9 3}N?X#AKo 73uƀԷ]c W|N1J=,{:ROے:)bPyn/: ruWHʊѹriP*W!-YdN#JBSяAax<DKQ69|Lਰm0ˍgo- +.']<Ұ Ԍ 4vac1?K\+,mխ7Fz RIg؋a1 #r\Ln5[l}ӧǥh [D_WZv]#EDN@hSCuy3&A99*eQGkߟG[)Ycy:R{͛^ڽE0# +%sy1ƽDA+=,K=/,tv,Ce2[ S's] +@F!~?鹄䣦1U*~!@ +c4.*}gQrOh82z9T9sm[I0@2uz +S0;_B]&Ԏ{2V;`TYGPXlOq۲6n֟C'@ "(y(_-$siX3s- )qZ>GSa㵱<\i~͆%%]9h>t].7g@xT8qz[Q&''dw7+'YYH;Mu~0{YPX5o +[ JMG¦mXY܋êfA9ULn8lLw`+bďm0w&_r-3K y8Qczˑ[c@8S~W),]ʁ5C􅳾G +|5Y *$3=[ALmtk\ +om 8TfhSVgA}-'agZ'a,|@d/O5Sz+NU o$ 7D=?VŮc6<%CJ䈕%Jgjd;{LMjr6QhYJ_ +m/^C#Ѽ$QǙ<5) ģJj{ҦHi~re3) g3&*rzxDPG?5a|ˇ fT鹲AR %¶ GoM̺4Nq +endstream +endobj +816 0 obj +<< +/R7 305 0 R +>> +endobj +817 0 obj +<< +/R201 362 0 R +/R137 315 0 R +>> +endobj +818 0 obj +<< +/Filter /FlateDecode +/Length 818 +>> +stream +mzw]:vpSyfC[87?:ȏf6h%e7Ɋ] iU-fWBS;4. +wpPAddxu+`$netɫf lT],Co_[@S;e$y sV5;N7$MR7C04q0ش"qYh%"Z#O4vqcLylo]t>ڞSmlnBoECBA6scMl{hUJ@I+Y1÷nd 3}VjzOs.Mvʂ~ +0VyլqiPo*(~%-`eZU Ÿ|&4FYNЀ}Lp G4fU +|wo p:x +yO@ [$g1w +endstream +endobj +819 0 obj +<< +/R7 305 0 R +>> +endobj +820 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +821 0 obj +<< +/Filter /FlateDecode +/Length 3208 +>> +stream +Q_Z_ptս(Ozz=N#,sk +]΍xլ<5 ŮbeA}gZ+S +L0Yh&7]Tq{S?1:=TimsoN);"2L{E˩k6:Gst|R<SNiiǣW:u1CíN`d2x=NZSXvxf 8Z}ڀPCNӒdK'ʃ$2q yPcĀupȣ9yk Y'Ѝ Ce_r-6\"hS/ 88m9 {VpRW@)"yLb>d=Ķ/z<yhޖ/'ۇ3gBfM:C +*/lU呪dizobac&EbeĤ@f^@$;gb0m=ыw.VbLY+*se}`q1?6_LscU'ON~̹Ļ Vd:ZVއ΢UN <s_>Ԓ/~~0tN#ּ,o;(ThTÀl3sY5 Z3;Z8%v +d}Q6'3وs,Uk}1]D$=},:zf`%YQ{Q"&g B{FhJ o -b8;2)FýHP'݀`M?Ngk/@wHSHl pKH-1lF_b3Z$X^?yC'`)6_\^ivwt:z-Vura􀐚Zǜ\S&61BY1D1z,Z[؂8IT շuRrSUsST>k\_Rzu|G%JlG<#lvŢ@GBx 4QDe3:G0=?ϯZ2qsV\yf[( yʿM?BmgErTs{zIoғx9SmjǪգg4* q"ČÊE[BMx }F.kjJ%rLλ4Wnr~vASxE>VY۽ջNt2wϓGrgB q﮳._~r,Zÿ૲=RH IUlnFe^.y\J˛3ey˵皯o5)_64Q=&B@fW>G/Jp59>`,rāszoN^Cefȝ`7硊|]i",m10xk|@Hu q>9h=# ]FP}B#,YWbLnOw[^pzV@K](E \w?}Sj78KÌS/\!K +|Ba,YuqY; apn"+7mD,z8=fTI伜#!F2RUێcQDuH)e[ %;"ɶt\;}ޕ9]v#É3V(^BIEjt/znYv],Wj5 g> +endobj +823 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +824 0 obj +<< +/Filter /FlateDecode +/Length 3141 +>> +stream +" > N6AtE/"5 +$!Fmyc"1"u!!GT/^bc-r;bi[:G[ex {uA7otT*賟mRѺ Sk\T\FƖIyW-t,{kQ]8{D wnʄG \Q_X-%zBIhN{2a) gư)]Q3I@^X,s_8z;:@sDE"n + B hP8R5f:zvd24-];loǓPX +FȹxX[^7Q ^%:Ȧؖm };;Cv{),uj LȎ@ sQVEDL_ ?>#lIWAt.OQ^vLz*(|V,˺lc]o3In#f!8Bq_O8ݖ$;1V},aAA@ws1Q9٩# &כLV)ryP!q4Lk@u=|̦LlhGr^Ȅ6|&u*z!쿋D'N9e$`g"NRo&7OfO$=V5ښ]' ̬e֟‘P}P}O d+z Q7d9D"!"ȧ޾uJT= pi +X>kuIpw/}TeV)&.c1)*UF&֭PњDʶT%ZjJ<ڶ>ff_Ä4dIhWo9'3ywU/x)cESk&8}Хcfg(9,sFn0΄2ߋeH߂-4A谤nȦD=a>DM:[:O1hWF*j>˿KdzjT- 1D/rh,8,)R A4J*aSmEi/ !'%'Hh9Kx8r;6L 7#K? syT[MPY1n,"Wg0vL} O-+C@FʳSYP +X8iۺ˕XryK²2"@*k"(8'v`Bс˛RşQ ܵ !S̻^.ZPXԣH8yE' ]*.*Ž[=(%B GngJd?\Ђ5n"m,0@lC&.4h]9fl%{oOg+0[Mꑘlۄ|U'{' +D, DYuWyȰ)]**X`]La  rO3,/JŌG}nJfc=F1=Ԏ|'T*Ji~|3S[iVa& Nj]$xPEЗ}({ GԏY䲮(L#@\ ֞Is#}c&W[ߑw%؂F^VB8..m;œtdU[@@p<ʮWmUmiЩ3#qR*%b+jѝ +(;S5`7})6C 7?sVE*Βl}x쑎e(阗p#0mAWid˼͚2\.W3ܳGyGD^XQfê4i[4Elwc ʸ8'd_Nd<7Os!!piHB'% 9 2r& v&0+!+4nZٗ ],Ǣog82Igf/{QK_@I:T`U'It bo ;;QXH9Ii +вlv\;giY7c PFhKpҋr9UnP񹦁>'z%ģg4rbyL27XL~%Ii֝QdA Lvz/EZ(/S8 9(YO$ + + k\ISX] f!m{!+Ĝ[fp20 6Ug@ݧqMԺR,<"zw|0*%ܗKG0jp 1Yv4^Ė,).)L숊h>J!x4=k񵧊wF{vh5wzkXΧzo%=MO9mb>]" !jڵ}E@V|-+JS3~RqA-`3ֹ݁3 +/>w)r"<5U6"WʥxXjK#}C*mQXyέNGWs:$&}v> +endobj +826 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +827 0 obj +<< +/Filter /FlateDecode +/Length 3351 +>> +stream +LA9+y퍼(I;$MKyyO^"3Y[nVk 4rᤤZ7yEnV~cE˝R ,[x-Ҹœv *Vؓ,Yrv|C2A:KTئ)ZRX$U5 +̺] |MwwmSUF:?Kpݖ#F,EE͊_Ym{ŏHcMSFTܦɖ5˰tzsj SQb<x-TR)TF"#B]Dl 1j0`V[w ,y3`UC0홤.EP^[ڿ+44.%W>{du.tW5' 1֕^GC:6yyVuo*. 0v7g`|@rQ"kBrxP3|oKpy:Jɘa||]kԒI)G{9v-'!w(oerz]2*蕲tʴ:` c 2S/NcHXO!Fu rfHfb + (.5yd 3TkC͕A]_,:̻b—(J/7++pUH͍,%Oc_x}G6yÉԠFQZþn>HkgƊu)9,/m"mF)H֭ZNKd2L-$^*M loo" |F]FtƏ<,2+v +h l4p21ua:f X1 V1/ +dhۋZMFxowT:/emgRHK,ŸW_t3BdB,;\T*G^?ğ$\.RtdR9h85NSgee(:ҕK+y"|5"nz%0i!Wņd`{ZCq|*[N\dWq3f=XU@ b4@G|*ȝ&4Akirt:O5pq7S(|7 jֲ{WGCu2(;fI5W1B]2,q,"Eqw _M}D@m̰hzKo8gb<ڏ+3;Gd9G4$/AvC,{: c "ACRC * l@&/*Zh%8=Hдi\ƍ$?Upã(j m7]t?%mf'Xx5ڗ:bhh*Mz ΗF G'akYh-r9n#R16z#(9+|p +}MPP.H.m]0'R ;1ږ ρpr0Y @JGB6&TDZqypάð'e?t+* +݅ʇUs*om5U-s(Ƅ4@˰s֢"@?4 J Ou eŻo]zĚDNvd\bl$D#'{uᰈus݆]S: :BS YHwW)2F T6-rvSaʅ'yC *dr V9<-( Y+3YݿMT 1=QxKꎥ[5׆X-%P3jO9KފGݮ*4 ZoDB?p»zR2 +I5 cGЕ*mf7$=\NSR+&E;I`hfzմ-诽s{3 +Tkga4ˤ"g >g2-Y?lw+_Wٸ-0]$-M ~2H9k>ДjYp_̛s̮>ڙO[y6^c[{"NGNU["fԈ ΅ɜ\!g)!!QlLzUrPW30/i ӑJn 7&D9hMe+X~wD%QߓޞkWm)dȦ,mG+2ĉ2pdyϓ5Q;*x3ir +endstream +endobj +828 0 obj +<< +/R7 305 0 R +>> +endobj +829 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +830 0 obj +<< +/Filter /FlateDecode +/Length 3155 +>> +stream +0G ֻ<|D>uLٗ2lTs9qrOr%ߢlX  N #9> pυOvYRIq0Z/ȞHQmGqIС=hȓEfZ#:ay#>clҜ&5(YlۺLQk;$axJ>ޚ +HMO- ݈&-/Ո@Mܒ">X kT0:i7n!ݧGCe)G82ցZP֙Gj#_峣ir#qbY1!thR:.+&*4_>vBZfY,,\lkEx}7W>(D{K A6],TYOFpayŇA36x\(L;[ѕʉ O)p=(%XCk> FÀ2^OF-wƄܺT<G_0gu[6|d$kVgG%U^߮ nQiB^+b<6'))-q0j]:_vpA&Y\\yIv 5.Ow >C:Xw3i=b瞿 ؘS}wuCV]kOmv$Ϋ0Akо +iw$:]y m9Ýw Eak nš* rv!&zC"cQECc EG*TP2^LrH+n?=7Smy)5q Owt iwޕb" _ y&?|sz}ų S6L$XNݎhXkIDZ.}dQ>KSJ{Tnc6q*THjZn{&U]ㄸ$xw&y/>ƽ!jhw=T G~3U`ufx&~dEƈc +W .G[%A5qIFGxsj}A8| \ ,QG !K?Yr6U_Z$2E#r\`GYz#\W'6ɇfRțS3̦[ avmXz5xCwx/Nv͑Yxul*S1+~=:g]t~@N-+,ϚpGY;}Otƙ0OٌKL$'kI^n;R3NM_> #y0p>{g$DW L7a!{FW\8ۄA2p%ýяrjL32QCgRQc -E=< csރAϬ?B~g=; +5z\/O9$HS2{J@d)xPy`& DQn#VW-39GWZ /ۙShleu+~6)=a1_QSlwæ;xj#" FE-LnaPE}huW?Ic/Fib ؜OGakJ87q-Vɑ;Y +vOP"r7GW!Φ V#k\ょoN-֗퇵F5].,|aK'w6<8Gj)[6lztZ?6I%Hy*UCfs y*yD{>U8N]/-8jzܙr]/pX@u +endstream +endobj +831 0 obj +<< +/R7 305 0 R +>> +endobj +832 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +833 0 obj +<< +/Filter /FlateDecode +/Length 3030 +>> +stream +S9iK0BV4\%jO.YcC2$u"7.ږ*b>s/"bIe(%d4[|QQ幗6t0R[@>m'S2_֋k4h\08 1.vRt_YI''#z5byAI+ m@. [jKԘF]sS h*+ x@r#$`ɧ-6'`cۤZ%މ٨ 󭕸@W|zǸ{_? FC-ʫE5q7.jz%6tn}zb#Ft{MU{grE<[u +VgŁR AW7M)->†(%-+#&"CNl"Mc:-=AS4PD(y\}[mb/%,.1_5;IxhqG!OD-l}6VCz +fX XAY|R ] ?si;$ /+e&΃nh`j:DhM^J̇k yt8{+.QI+_NDbgwc~,2Y] " swJu/M6s);Y!Xn64W'KE0-wqa9EK?0({~MCZM[g uAkIa}ڑ>*B1a';%<,(8m +j1,jFeᝍ|sk>yE +6,Tu1}?vQ;^Y$AoP6u4^uHm̧01i{ 9D|:v +2qWEM;-I +Z,qaKM·UC.ձ)\2}Ѝt?3;5c)2gPa>G;S%Ot 4@y,mA5]"{6prmSv4aZy~&@y1-XȕhpHtPT0?7car!YWWO|H\Mv'8:C^E`^`ӓv*!}W|]8fՐJNxb^:A?m̷<@I^_d@[yflP/}̯B~5URvJ~fvn<ͫ +%ErKƯv|hxt0&hNY#ǭ38? ++@56MtKjQ0? ȍ3֗+w+ # Ki'*bɬ8yuAp4J #,MO`z:E{ AM Vነ!#URX%q%~LjO=dKEf< 5LyU:z\|p4rVhĆسR|Cݹ7=?n2^H/'a8~̅PY{ +ؔqb f2ޛhd` ]Nk@L?NI+RsXڹF.'[b#$9tgX奙t N7ʣ^gW?AuwV 8L~~Bk H}Tbδ}-rJ4IJOcJKwg1,teLւ{ dshBpɈHS4G][^[" 68 Rɹ"JVxg +!s>NHK ]E͞{R/=X3Q鯋j~*Hbf+zc>0g$jrW$nh ] 4  ¦h-9t8LL5Eh>M $ZTf$!J=)/@q42&,4y4 hTAErͳ#%eqښo^  6$[iy +/%YA)0-1;H!M՘{슮FfF_ e;R(Wq@!)x&~֨"?ij\fZa`{jwk63`B?0`cԔb@3> +Ci|\FO0.i>/s†i[Bcµsն@eK40L[Jj<'>#+Pr"SMm(j9tK A +?HIT}RETdS\ +0<~E=Pb27G!}/8FY!hiH` fff7g5Lzy/h e&H*+v"cugGB,"hqlAO_$c@x j>(|=#)΍  G?X3Pn$F[@mkAAJ~"uɜawHJ|ShG9'}#fܟϊ-Q&"J>j6>&%}Զ0pq~s'M1Zt@FvU$͓(N~F9 S7r#M^.n-ˉ3lY2">p&P$'xN+ +Ɉ*Wž4NQΜnuD$i8GXOѾs > +endobj +835 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +836 0 obj +<< +/Filter /FlateDecode +/Length 2603 +>> +stream +#J8eN#P̴>R+IXYMy6AN{hh:NftGEh'^GRd(_WCz– VDbDpyT^Q2(JlΎṞa"1Uh* FnK& Tpȋ_4 +@. V~qc[~-|(d +H~$d1,Q%lu,&ppn"| &QBe1Q]XCq'6Ѐq`I/09%CX\KAʘ +}eEÒH#ߗNwadȏoM*bub-ECvk3VAˑ)+ǀnwCP< yb|w ބVTPv#D1A:ߦw|D2}qRzXdKk+SĚV9c~: %JC9c~rrgq S*kW[Fp,1B.tt> +o e>L[us(G 5]ajYtF,pvl rEXY2Y3RV" ݺ1 +1n(~N g^c&u-1g oZ(/l\)q@:3 KtwLJ$aMʋA*#>&9) +muys XWxxLfz)5x[i7TM$G E * +0p)rYڑ2_Rս:̴0 5鯄j>b=-*N&&@NjN%{ǐ,$CScI>9D  UVFF~IgX]|xWId`gEXZ* —0Z;rg9D|M.!N(z= `BKM}ztu̒F~\YȠ׌"1@բـ*`@1ƣۑSB5b h7_ {!OWa36w?f ;Cuf:MW&/pѧlW6`B]sRG?BaaK2s|UZ*Fj.';I5fwꗛ PHT1`ʥ7grM2#{7pL*mPp٠g`ni&Om Y``N|/GU_;S/?5'KP׮8hjA]Q3*Y b8\%%Bg}p +4 %k? fRYgu! Z$< xp\hM&E{B:\<0a|{,#y<*3wҭ,=bŰЃ<3QO 2xj8° ?iLm%DS=*ɜ8t%ܤg_'*G[շyva{~vJтNgS6]4M? `%Vq NȓoОN]4T>x>!-n7Y(aTf#Q5/fx;y6]Pͳ!kWCpD~JUJbnk,0JD+8`p&KXG!=mQV*KK $G(ʷ +endstream +endobj +837 0 obj +<< +/R7 305 0 R +>> +endobj +838 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +839 0 obj +<< +/Filter /FlateDecode +/Length 2525 +>> +stream + O3A[tU\rYS%(4(gǮU'aT3jyĵy=W=Q2ۆTXvs}ػ*xct{&r[uxccY@aM0L, fv}qF*iTlk6v LbkSZNF+"W[IPf-W83?g`ǟ1?y9z +nV\u3.%Z~>;UbV"@o˵[;֗l]PZA=l:-EiQWـLCkoob肰(jHFE]01kmq9#|q^luzF Z0"Ɗ_3Cԁ$V)`2h֖oD9a C Arn[ٻU `.qL]ѨdmWֽ[Cl\óm ;=pdu^'n'ݯ¿ 9濜W +lHŏZʩL]S[#FP")KIq,)&0{*mgR"9MM]LB[%Q-j~k4A0Iߵ29<( L ofΥW 1 ?r516B=Vt#FJ+7J,5};eqIgϕlNc4j4~a{QQ \\Gzbp?3DL,8 $a$x +']P:z~.f9ޟ<_aܞv6OfMe5W"jY2}>kC[j@TV=>T!˩a6BiH/эSu$qns{B|h +4mm 6y[JIgX< -qFgx' n²+ FUHͺ̰rO (8}_%2 x]^|jTnZյ-0v'W*9 ]S]ywBVWԪ7{CI`NtjoʷHLbd`TӠ96gs\iΏv=˩ShދX4( +?u2-ۜ]UusÕ5 XlO~WnL|0{s䀩oJnCIsֹf:ѠFSh~'{ܹ'lh@qNU)g +׹ >5e!9~Q]2T2b>cBzgK+TNHl xt_%Y14vߟx=I+ź8'(7 +m7 Z&fQgI,g]J [Ze961d`~S{qD^Wsm{ݲbD|! xJͼaMMGJj9nAl =h GGsٶK;yw==!7ϧl.PY}`]dok^:1TKg˧tm#eP9F΍? O[U5 gufVc6Z6<;!42Hnݶ/SG@uo0%0AehS7ԑo|GIPsG0%cI5vV~kG)gw4NT ++bp2RF +:(QR{]J1=!J8F-겍}в4KHU]_|߆.sӜ +iJ\UO Rf@EJ7ScF_mY nuA2c8Ȏ.52NPNB +endstream +endobj +840 0 obj +<< +/R7 305 0 R +>> +endobj +841 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +842 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 212.189 400.2 216.126 408.307 ] +/Border [ 0 0 0 ] +/Dest [ 126 0 R /XYZ 75.52 202.28 null ] +/Subtype /Link +>> +endobj +843 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 188.365 281.99 198.499 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <4986a49c95fc3966383a16e4665c5dfbdd95e1de341fe7dad603fc063cdd7a21a22b57bd40f4e023a64113> +>> +/Subtype /Link +>> +endobj +844 0 obj +<< +/Filter /FlateDecode +/Length 2483 +>> +stream +@2C,nzdUkN@'?62w?_(& +YAD;Ӄ;($#7<xR$ sd OKM駱BeL^*Sgt:5p4zpmB#oS!,[iV5s\QlͶhV$ % +A8Ͷ|;֜BMϮtf~S/DM̿6a-PP/J$y!bջe K aUy8)sg\TCW$zґoPHV:6}`F7|u\Zr0]۪G/*ɯl!21p MuF FwOTm-xsOJC;b5Lz vܺ>3:en?~wX +Ĕr6#ݘ0eNǷ24$HWNcZO +m ӓIvy WC-1ZU]nA@[g!DϚw;I_~52N|'0ҹM:!ڼXiv +qAfuzZ-&8͡.caQU6fQ+sAXswΈ)jq^2̴-VAӌ$p6V`}}gCѸ& 0!&pq-3ēd$UY3krZCQXn o$V4~XUpb÷LFCJ}ҷ7e la?bEPX8#<7/ !:r\*3;\!*iVw 0PX +jA33c ќ.-;,#j ߌ'հ>X~h}@v9@HiA*S +a: F۞>Ө%ncj%}r}W:jySk5ѹ.5F@?`t2k*Um=}.ǻntΩ[#Gy8(QSs{5>\iԒa'dHc.%5wx刜MoO|̱["Rq5Ibf_ \u6 T mz(=I88 +mLҍUnsԟ~/8k/(Ԡ\TEesȘŻ0zPC~r<dޭYӺ-ת*KBTSDkq-OgXH4-(^S>ɬ7HhG ("? ܸ(xܺb*J/=sjS! +Z{+&> +endobj +846 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +847 0 obj +<< +/Filter /FlateDecode +/Length 3092 +>> +stream +.2[lrY& +w#5 +P4!a gx{.I֑UGJKcg +f(kd8"ˏ +F%ԡ%^M! oCa2ͮG)teόw[g *^ hL/9}M6!㕤ā נk\gS0?ZGᰴgKFu"B: &# Cz! mbUߊdU~V2b8L)/V\ҧ9'ȏ(M}Ϡ@! 7v"–|a,9+њL:5Yap߮;۠䛎88XGE (VvA M\ZH8:W fmEXwH0+ Y32hw۴{u\)Lsk_- PΚvWix8>ajم(|"&hH[znײ[u<VpvOoy̤5Li`D]jG2ejwQ3lGA }?vDQUuGGLnuu&Pb,Q+ǻuV)_$ B>“ә{{Tx@hnѹ9kdn.@qʇYвiѪf>Xb}";8Wo#yG\XQnAK#S0HR&;{꩔!@oQh׼MfC܊'7*x$:Kf]t1]9 7\lj gtϋ9S'þe'"o&n/g<%V%A@ R&OS`.m {W&UzM6QEIKhBF1~-NI=ZѮԘ x(ԌAJ".1h]L½;IfV툕Aʳ/hPWa d$d:rnKȋt]aCI[վ73&D*E-F0KyJv>Gw&Q4c]F땇@4^ab朥rLE֕?;;*}LyJ[hX^Pr )z:Wc.:} +ZW<ō2DbNް2)Tq&Uw5K~ +${('w*Dr1qQY +g|ԋ &}8C"'9>;+]GPZ +|Z4L3H!\zitճȇ|EԂG%Ff16 s)+@70OMP-3NGhhኦ"@NGP% Om)jVO:q(< +@1[SXO\;=% +vB(S5lu&KgwߌF Ii߲Y[> +endobj +849 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +850 0 obj +<< +/Filter /FlateDecode +/Length 2151 +>> +stream +t_a{+vɞ\:llQ+*hG>npUMmm  S(~2ClC2A,YVC;DGJ:1!|\`_3Rت7DSk/8fD:-pF,2Y,cBz DQ +фK"&P.:FSc-rhpx$Ht[my1&jM]Φ256pG׭NN +YQEڡ>R?2=wM~׊Y"ba<عp$_IVb3i:0.hn,x0jr^(PaկOh,\_9>1Ez P&ky_`?HC=`(|& jń,yuMa;I+ BS jD+VG)`]%!XaK2?CZPC)˕oU [V):};ϓ#d +:rx"ɛ/rBr{Ө@m;k![=k FZ%d" ijRzf׃`@SؔƊ3aLs";/`ISlgTtќ40!|3rvJsr_cb @R=eSt /EHl@A p{l6- :W3+(GM 3Gg9ǂM`n6Y>GO4[]OU/jAM7txL3Jw,=nLa0&v[<)6Ȼ8ax#/ E9;8_aX_M5ɞ +F2;~I^!JK e?c7{akSnݰ BHG_oo\f1{B΄muTF޸5C".P_o1Tx YYf R-|kуi"jLӟvH*~A,z[豣&\\Ąn+"!ޡ;R'!\9ZV ^+yNT~2ξ8x1RΣ#mqT6;7I'N0 ڵE Gv;!YISDϳe[kT*o55Xf!ܟ*İ̤X=-F-"S5I6Жd; >p"[; /eW, Ju=Q0]be9B>fˌQԿ01gQjPvZ](jk^ٵ?SCO_?\w.5 rP|:~`(M_ :`C#HqPԇŠNfo>]= hFY=qןaK7ϕ`ҳzӜy'`x(f#aSEL(&9[1]șB۳-9J(DHa*:˜SO̸L${D on5{)Xx"pNÀԵ0E(HpEluJ[a 3M8vdp`r`a=ZZ{;mIiCRqsa|(?,`A9%&!=m^}\!Va  Z歖Wj׸l7vzT֎ N!b2 ,)]p٬znv*"(V +몐X X7ucrK45,o}lc8{pqE wjg'ts+^ mY4 ƴ/#+Qk@em +\ğ4)/S&F^nENEVX̨ ʯҕ ĘOY-$@k,{$ Yn}"S(z_Qּ`BXX൳( +/L7a!]tXqnÞi,_ +endstream +endobj +851 0 obj +<< +/R7 305 0 R +>> +endobj +852 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +853 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 323.325 514.705 327.356 522.812 ] +/Border [ 0 0 0 ] +/Dest [ 129 0 R /XYZ 75.52 78.65 null ] +/Subtype /Link +>> +endobj +854 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 64.739 188.645 74.873 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +855 0 obj +<< +/Filter /FlateDecode +/Length 2526 +>> +stream +D=91֢D"yG6pl`MXHL?˪H$"@.9 @9M"[r-F&$kEhxԁrQua|Y O:xܾ yUN<WtbNs #je#d1ߢݞ"9M!,y[n-@ +̹Ʃ@"@Ρ 0YZS2^ +؟ϙ}0gGt.xcgF-}K1Ƈ>}i.Fpo;2t7/0ڑq=,p'f^n"B;KU+: - kk(杄^5^.ZmdsyZ4;p>-n.ur%<17 a!mLBf.!&Z(cO>q F]I0!{4,9zɲwJcN񫾩l:{cǚUfgp|z^<&NAYƇ[=`\wuOC [cu6{ԉS~*Č)beCmfثS$h +Bޑh|]EL!(tr߂ ,;CEhEpmI|-"%uf {T.ãCQ_Iamv#u,G¸zoT. IdLYƱ"TPÈo-teTvs&xnn I4TCL"EsP+N)e>{8_Is@MH-䯣[ܰUmEGoGu)@OsP&GyL@8JDMI -t.E54#1ɴ!z5e>sH9;q7n^ +~bfmA$vB-?-/Zef>A1о̰EͬzeQkMd{67b0+^B

!X ~l7]~VNp. 춾Saڔ:,ų6S`o$z,$ ҘjŲ׏~֞p@ +xC,-lNvAP-w]6͊TzO[X"57?}0|М_PpZL4/B?ޤ?V FrӶ)Ӵnm +endstream +endobj +856 0 obj +<< +/R7 305 0 R +>> +endobj +857 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +858 0 obj +<< +/Filter /FlateDecode +/Length 2465 +>> +stream +dK +ڃS KvV#ZF}ByGcvaKf$l@Sf{vm 1OI:TNq(c,hWMF١6`qhQ:[mݭawT +s{?ɏ +LK)ѧČ͵Oƒc]YΡhSwHjOĚ7(IC1~3_, J{l7' !̢1r\d=S]]JэS]!`~uJy%<r ͵„D +*ִުQ\-mO\[X9+TEA!fP[}M6zgԓ&ݤl1w4XxJ;%,_/NxPqas BYLI 7?-Iv?_.9%tȆeۃ|8R7%0ǪY=.#hX@g]d.v  "L!aX+2?]$QF;$Lj H- c8e֬;RM5q?upo^^a&}X-ȿIϧQ1<ǩ/$HhҀD*41˔tFR/L 8}+ 0VlRIpAE#맒x1-0ZtS%~J$DK_r(kv yr5XaX C{% ?r9=XqrBMwiJKw3,'wEb=8 + :'>1ȾV ?Wc3hY3"Bѳml!BN:M `y;ERDc5BVIs2|s;-F8`ٹgB!ezHJK*R8(mcEo&Y ]MpM2orݺh_A gd" {+hc̈́hH7g٫=Ib>~quЮ~_WQPmi*v{3#AXʄ#6/V6h.sW÷YES9q%*sڙdv+P!+lI |>Ȯ7 c$?O/k r=ka$ujɿx;txyj8zi6ilG#| g +Lq〘t0JolFϬOrn>Ė4Ηx_x2&r H0v|g3]l?W)ZAU_'+c{/=SVP{QkU%C4Im#Q,MͤqX foG@EUx4ARF+Y*HMW?]KIT yW +s^DG]y ӏyn\]+7H*^jAOw/GJ,Jl(M/=O{dXnjZgscüi(6Ys/P }ؒòCp}K&jPNݲ}NĒe{=pn1"^4|'EpɂHWP瘯'y]܂ʹNFۢ>p^3y a|%$؏,\m^9聢.TmIX_`Hnnɭ" #1J:`[5";gKȗE!NCIs/ +-}%r31q {kWN:% @:?ǢgW>x+%K1EF(uoĬ0{+bP% ~^p71r,MW <]źGxJW'py{w0AfB_IJOpkIO-|Y6CQ*Zp(Πe(q$y6d}T`śSptY @E]zhUؿJ#:"Jv4!RM2xk +U.ҽ|.VkL#׾,`oOӭ4ŲǷmdfB҈Zi +VmB"wda:z8h2бņ]cu$O]؋`d١JjEdX6z jP̏6FkMh,P6݁bM-=𿎵r,JqN#7ջZ[V\.}qdu9?0P/xBN"MfMteR.z޴·Rrʛ,=5c-ֳޅg d.%#uӢ +*U diMuJt7ktpE7xtZ 8)D_b1O|ܚ;H_ Q +endstream +endobj +859 0 obj +<< +/R7 305 0 R +>> +endobj +860 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +861 0 obj +<< +/Filter /FlateDecode +/Length 3017 +>> +stream +20>-L[.?wؔtnжh̓~3ҟ~ b 2KqG<0 E#؄d–]WO{a?_s.ҾU!hwkdin!#nph2 +Z5a +FC~߅;q^l]bt4PUm0"a5{Ou_]戋0ŲrDgrq"<(>^j!n"1FX!-B&fQ/ANr ,nV.p2u}㝹YpV(N>З%W'[g-72~9{W]Y:!<> +})љ=ߞ6A7rb-R` }_~nmo4d`F:s+ާ٥8.~Vla,w ;R^an?dk`URK$7n]M[n5t;Զat/| MAnN>M jeDA8vpڪ6[jcJe!Ka% V ?'%]C@F&M1}e28-C3@"XcMD`wD=kڕ6]## oR~(_]{؃ ˽rhl7N&0VKJBy 蓼8~> +x"q9+qQ֐,b ~O|h77E3՞(%"็Bwq*ow d07Wy?N?lce=+;1@[M?GoS^{.!VO"L)Y`)MP~="(JrPaf?k9A7syL0E1KvҲ7_o|ⷳػo+s1!QA~5*`jDr[skoxtXfm)N*o 7Z;Xv ˇk Zٯ6,eDEw!Ʀ; _v., ECoB%/A7$rl'ޟ›Z}>*ǩ(=!IKw74yv.2(Csx8Q~Rg߿uas`Yd?(RuN$=nJIG E:yvjR4Y}Ǟ(o#.8•Kg[2clzNܚʙfe;Gu;HL,^AjQ6|"Su>V};G7rM}>G~nk<%'fPJs4@Ŷ +3L@#45$Vm J#Uvwx蔡߇,Ce*=h]>Ix|Hii6"N=䮛 E +T}Dd"jiF%A \g +z~v}-+,Eaur9a8A㾅7ʋ,lCO@}&_,(t}jq-;Mg)t#EƚͮI!˶ֿt0 ߻ffקRZZE>"Nt4jL]]7zJ 7$XqW7յ29 cٔCx+!fH"\xVFI:T!V5 [ o;C2+pΕ 1(䢚GVWJ]@* 'tQfXQi;S:?S߳zUz w.Ɠ׊B5 ̳c> {}^ +O߹Ja Ɖ|BNj lVUa~?Q#H(_5َ+tZjZp8#*] ef=urO{iU2]ar ߛT\ڐȈԅqEyD)wVrd՚sN ^T l{Y`z}^ҰЙNSLgq?7.0BP`E̮Oyxnī +Iԇne5%Ftwk + {?g I>SķTa3b$t/d ?rk=X/Y8?Gn*eRv k˩>* ̓&4 /e<ր|2Fii{[ctkiIIXz* |Th!kNBТ;";>v? (w)x܈"7v,'lo5%;6ɺHcLك_ṮZ`-BD6Thslzs@HKv=oers04mv\2 Q'm]~P&Ľmҥg~ +~(@bW|GsԢݻ切=]; Jbvv%7 WK؎L>U&GYar5 tzǜ$ySY<9/㽁Թ>$ KD> +endobj +863 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +864 0 obj +<< +/Filter /FlateDecode +/Length 3193 +>> +stream +ə}G!2JwmQ;'T@=IEn+AcևUn=h8+ټh7bSC.I#'njs:I$/7u;,`r֛Ժ( y)>=A}׾VH! v1CەHIC[/ jLRՎ:ەQ(nu[]KO ݣ.qz&ܓ xqI`{Mig2Zu-aeo'뤭i +I*fsVIA 84˓ia@<}=M-j_8?}6dʠ4E7.\=|(sXs%`T1?99vFY--nM59NqǼL, hŹߥm<hmkPb$|W_h`ɥ>q(Ի/?n/1 U&2SY/Џ +fvᶙyVw(ѧ:oN&hmovv2Q]̽!BLP .K2~w2!I *P!<˻k,,/ *+<}`mcc_-BK6++ۜy s ̬mG^Nz;7;ly/%2hNhP~Jf֮;&E)Ր~U 䜎@mqHFX7pY(҂ @PרH +y'Dwƃ=yCGKDI0b+?яulMM5drhsܴ9f7V5"M>嵽UYq:+rQ>n|y}Fo!}=#O<͙N:C9x=G&-plRff2w}6{rD5NoA݂`iE#! L"{[ MmeBG-J1C`fA;W }4ҜnÓv)<15 c'DPz5۲7.&iXFx:)DL a +IUA_n T^e NiA0$+maf˽%+xͷЍu⳩Hnu Ȑ(AyY`PA6 + oeHvi7ڗE)G?MMz;09yCIѿ Hq((4E#joNZC|ul{[7t6'_02Y*u51ѥ:s%/6#dFqo#GKI& +/K`||X9萲_[\l]&:VFn^|Z,@ _-+9BC ͔,?r~EG W h﹒>*GJe%dٍ2+JK#-#7#->&7Ցku +†$6qRA)j52G~\wlApym84 bfcfE|0e)ߑ@6=Q?v:r2R_c74ry;g)}@'FCIxִ'[UX1Yr->ʪk\vQPvy.yB9)<Z ^rF/mt~d8PmL ^OPbO]#2N>VM+:R$cYUEv[ M;_fɉ8wls >[W4GݨQ 0QfYEIi((MPO_.*VdCZ eu]+*&3 -*8^-[{&J"slHˢ6RY% &:1u=h.WQO$)qB5}{7e `pF VU.T,G +)# [}I|Z8K ]4yamB] WbJ|0~JQ$%;n9$+Ӳ7/gmDVv:2}sgL׍cFE]%jbusLm + C[<|Lڀz>"h2xJP%I,g{-I L {DJ=fN,ڣ/w2:> +endobj +866 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +867 0 obj +<< +/Filter /FlateDecode +/Length 2878 +>> +stream +xžE;]@n3_E1Bf1\O(dkSdq9uck#,܏t5B5@zcTYާ'.DQ *mO'3`Kߕj26AA?= +{Őq:!WCD2=|oÑomPg^o`3qOpDY^7dq̾9&i0:Ԭp<\%:Zv<)k  i}CPiUUйEMI(NKijmE;?.wN ˸AƄj+΃ ISto 8Q$]լ ~ײĤ֏dft*1luk RƹbbcؔLD?r%Mm(qnrˏOGAHfo&V)i$vU;X w.*vkPR&ON5#rx?q}[ǚWQEv氟1TA&:aE1CىoC%nFA KԢ>^/E&)l|Ht1 +8ѷc".Ń[Rju&>@mmnq%ܑ#;%",oDx:z]1takVU]XC5XQu4B|Ffc/}[g*ҕ&p!R7GbTDR?Lr)~^e*`Ν;@$I +},PFV`~z;>Yo[Mktdc?zǴԼs*ת(b\Boa;C>Ⱥ" i#"yCH^?%~(* {skxçplϢLuQX*02}=S`(%j&gPXL 7Crb7 +pLPnTg_^r>R7ͣF]~_ L:d|nlV#Ahް+*pERO\43UB<8v*tTޛأUT3ߠUguU7iL +xOvN1rKǍUӁO]."(/ZeZ<Pu3J+َ -&ThOFM!ϷTP9է6٬+~Ay1ʹWc!vq/2E Mk_'Ě_J\SH(s8bizGS&;1eq2MVF\Ȕ6;ӇfV66׸oa)n o(Ř鼒టRr)y̏xx*7.Und,!0y,;/:d/;{),J4 ~ 6pfcN\~HCؒRU\{ +q9% +^[$ɕ>ݩrDfH*WԪ6D /wsꙖr,"͜+.ԡ )UC30nsE/RSBmktbeTlfj K% 8?E;͙YCUD?UՒ(VubB@fIWr.nlo|+q.VHJ| Q57<,aJcmgȥꤟ̔/oCoVUZ`Jh#9'}av?]pܟRX[yɱܼWϊOb-?Pr xԢqx= h3 qWCvǣ?4ׅC05%/ޟ0Jȗ*@qF% ~̞qʝY2D +LZ/ Dh ,XS,0X4r,^ a>^y=8DzǞՔ?.e/|"J2xBeCtjPs= əp$isbM;FMz=x)|;H}<K6GUԿqĐZB!hϏ(5#AuN$߮$`.6' f~=>{jjnyB= ":%~㬰.,\}l +Lw("&"qoTnm.׊]e3oҋd1Mn~EՆT16vɒ|a}?G`:d' –m륆d}Iptn?v[V'D&HiTϴ]s\,Zu]uNod{5FSǏ9$mI$͏A{Y b4Zhp|vj2};{Dg<#Q7Mtc*VӪ+#(2ݰx(uI0SݧI)å0_'t8\FP(m@_CS]nq\虡yф,nzp=D:һh?a12VOVBS33x_Sv,sd;Z%j6Bemtb^|}0xQ +UpvU &19x #JBljl$>fCyjIzwv!njvbW `Z Tg{0kykO+eUJ1FxRltF´wKT,}C +endstream +endobj +868 0 obj +<< +/R7 305 0 R +>> +endobj +869 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +870 0 obj +<< +/Filter /FlateDecode +/Length 2565 +>> +stream +ڏbu +beQbM w0֯z1?A. 1 xі\1j %az^GNgM"d5v2}(W>LޚăO" 9fۅ J.07$I4=`K$?C)ʈjӨWgN^9vқq@IYoBeXjop7҅7m :w⏈s-fwg&{ɹK^mWY +aY2 +"8nJ͛~kA.96Ƞ:ɲa^w"7\́|Gf-¥:w{+hJ#9c _ְwwF8ቝ-,5E!v!SQtmX\:[d`vs$=*4/]Ui~D +4a2v8kX0qB:r͊\&\(&f(n|oK({92U$@>H~ jc;n27~;ua|};3; 0Hcemә&=r_;ceK 'Aiai>۵",/2 cPvH@/i+Upp(Ny9&hX# SpsDۻ+7rFݚMqiQS(M&X ^hL6TGaLln6A2?D 2'릲z;NY䅎ɸ;Xo".;4RHoP?h7}uOINr}WZJ1(.:8zgc!{8EyZ}LoۢM];:ǧ=T @e[w5dv$mJ= +qGP"SVXnya٢5 `ؙclԙގSEټ +0,-y{*#MFA(jz f϶e Ak Y {$A;`PQ +03%>R2G-ȃDWM`[K6Xtl,L`GUf%Uq e 6~b]vu)->Ci"»^G('{&ViRCkk::F"]D#;C+ ֚N ɇ\mo^,#+{VJPE|] }-r+j49R#A)Wam`:6{ ٹLt(uxKQdi +)AGHP|;a{VnVJ.$~$pB —w/1:ݪ󤫪Inm>1QǵWgt& +DBQ 󤎒Pn]c_{5 ab(?1~E!\?)]hUYWJņ7hְUv`#uI(`^UX2Lچ7PEULg0#Pd!"㔹ѕd]hw%zxx$YUƥ}NjBGdCf$]odpJ0|QMH'٘DF^%@^wTEy k& Jsϸؒ}O}m܁8E3|\)F픠NVSfJXb:+6hˈ&62e +bv XNm^C|D89S7):|x)Bh U.9v +Ł8'*3&¶DveO|~5c缩f苅xgf/,8O@7Q -4slBRG7F/Yf> ƍE7N4E,O*{Be9V "r8tz¤|]6X|B0ږqE5Ο v#p|{x b3>`*:]ݩT+X@T4-NuAdK*\iQ4jBTS}i.?pvDEuӆd[l-cܾ3+渄[0gӭHẇ vܓjNf.P wuVie6.?IR m,pɫV<˺J9Pkb+sa*[u*2ȃVQgR ++r +fD'MέCIyj^{Q|D/'2 ĎLh/׻\"s ߯ +endstream +endobj +871 0 obj +<< +/R7 305 0 R +>> +endobj +872 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +873 0 obj +<< +/Filter /FlateDecode +/Length 2855 +>> +stream +թ b8%YcgNtdF4<>&rͣpX^"sY8Sx|"$U&aMXq'rw: |;c?3o+p,$*  NekeJvrS<]~^ևn4&Lg R +mÿ#U2n; +By|qۋml{ڱc^odT+Y{_2iAɠi~>b&$P x(JzQd}KoBΎOfmn\1Jטe KS7Dw@J4}FR <НHٶ{3ym]4a#&6=zc +b\dzb\M56fA`\S1p5$ ÌJ+g,n7^ ʮdm=Gn1žEIZ+[4UxI6T&J\HԹX?ӌFS{xPŴ{0^/yL;VfG%b?U 霴t}P#/wݥ+MZN¡?zZAjVt. **$ϸЁވMqә<RJZp iV~]?н]{5򒹝NDRϦNGj)H&OBphm=_?bH0C~cl󒔪c, G8!MXmi aɱ?K/Q|]tN KܴfxgηCXjK2?]2X;۬/e%H"__ϩ_w;;czw*t;=r"vy\Ke* Jb?!Gwf +ՄjY5[4ی޳I2&';}zr\v :ܗiG9bl];ljacڠq*4\:&jAV_gp)lgyD\jfF۟Ky5b)=*Vd3PkL]ݠ|eDXE_m Q_#Ghʯh4PKQUls2ͲA @]} ۓ /$q0$d/Pϧ;Oy-mVa4̭s,aER :zlYĮJۉ#ӓU:CE;zįhFKH:Xb$h1KLgnɄ 7k\mҤs}y`n 9,5WUѮNѽ4.X$@0˝r]^ɽFfzbu^eӐHPt7'U=޻9j@[,tˣ“rɸWy`J|8x%S/Uٔ+n4iE驑Ӻؓŵo'mPߐ$sH=I*riB BDFz4R/ ʊ;Х:H EHY#۲V+%O_yGݠ9~7%*Ax%ykM|2Ӌ3%˨:[Yq{vh3nd;hg_uflQXʂsFw&_iG FRQڡMvq1rҲ&^`JE?/ր_ߏ?jRbv" OKəQ:hvyFjŏSe(7w&mr=~KOJ|'vhE[4hSKN(͘2 5 EH4%JH+.nO=̗C yYG%N07KSx˪p-_N *HD$;boB%r)嶫"Vv,QX j1ݑ G[_? bf8`Uy!-Jҿ\ ?Zt_qꚷco'bIx}=) v%ջ]g؇vRf+Ai'6SOFi^)(x7(ŒN멶(da\ L'px[F=2 8e_E8>㨷(HB^lŝ[|^h k7ui#}[5Hj,sL|*Y$"㡜s0'/aKkl$nxf@mTL>@|C ۏ;@ U~ o fEUo1Ga>%᭘j$ Wƽ}A} FvRU +9v96!b+$o82 ΋9u4κ31WPw<1H(<`ZZ\ >QQl83P㬗hp`l:3 +>QrU=w/IE6|C)iA=81Ƒ m3I)$̦G%OQIdqMcbCl{9Eͨ7,0n :w]SyKfG$\j zvkۚ#fXÙXA'{h_vຄbCG?ou Ъf-7ThAAߘHEϾ(QVһj` 9&`WBjynBokgDb. `<ޕi&A/TZ+{V9xAۍ4jcx_X{Ni> +endobj +875 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +876 0 obj +<< +/Filter /FlateDecode +/Length 3065 +>> +stream +B ˡNA1 +Qe%Nr'`c*x$n*ZIޡ6ou*lI.dN{yG%y/)I_ [ )2^$eS*.l@_qqpl G٪#QܜKH6 QVc\R6vFb/ %X3`xi?rI>޳ӠL9"Iz/kpAZ@k.9D-Y8$>S%|քѩw rIbB*s[Ɏӽ=8@sF' M?aЭ{[sSZVeuΥ<;{ߞR{qUqES9>eKu t$Zqڌ{=/  sҌFoy g"B#gi1ۀۂ [':ľJmrj~h%ɑ>!Qub(7>sJɹ[ h{  buOJz3IqvM_}"z`KX,GȲqIɎNkG{Y͘w{LBgX:g S3ֽhv ~xm|"|b-Wļy0ZpP*l։Ziɲӹ6bni'mQֻ[v3&R'fڜdb~vh^?_4VZ$]842& uʧZD3/EhM@D0O\WBR6`u+))UdhuRRXQ='N\Kfl|X>)]ڗ̊-`2fWMeɪv:jo)&T{Sh%^ %y+PO~__y4q{x\)D٥%Rʒoi̹̠h8f0k(P06{nqV[] fm &^Cxɢ&D>-KBǡq <&.qVS`rci;0f6W2()RxjZ,w9ata{8IBݻ[TtPK+BX=pl/:7|;+%/ Z_{Y@} rɱ3 id6,90WYG|>)=]}̕d <4X(ۼf;CT莡 +8@|;G,)rk|!bʹzD!tR5җ&^Ig6X9nj$cgLI`/nxi!0'‚B'q,AA`4-  `Ip yjpyfo_㼘*_u!O&'r >OUdGHQYo;6Cɜ +(9ѥdsIQ4fԞ扳Bk{,0z(~ZH-W%p`u:^H y,,ap:^,,G(> җѸMSQN)=#wCŵGS;LM~@ԍqVg̾454ljA `W>/ $O~~lƏYmډ>+PPh4ROgBjj۴[O^fOh&VmXOgpv'j +y'n,Z+1y1j#{e-\s +貙r`bX%^Ri!$vI#M ">zW09'`j8QYۚ+` ;.VRH7{?,BRiP@3 m\ +s݆ޖUq*TCg2,j#1Z rFP_u P97,k2 PVykY-┋ +>RN˿.@4;d;Smd0]ŃcWt)|pܳWAqF{זm;}x~i`Ղ,H<+!ZXjH^=y_Mj<2༾ДL4}lsjA2TXh^lS;MLiߑ8>[+pz/Z{$_ 5p"F @_#bHhrzsV~`@PZ\]ydp^,-`e!K?3>Պ2(O!IĄ&CԀmBw,~neA1ŗ{ >"1iޗ-dsH~ElEqrޯOkL_²ZeiWaYeauӸs~9)G3C(9> +endobj +878 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +879 0 obj +<< +/Filter /FlateDecode +/Length 2970 +>> +stream +FX>{E.":Ӽ{#T]Nni!u/LB )&x xog~6\-O%1ik0+7ܘu?QGHn >in'Q/@ 1(#n݇ix^lL\'L( cApV|6Z_!-2ˆ<2Y+XA%<揔P(AvX'p1kw0 ۆyGSpMM\U`b>G7=xJsҐ^-:w `oP+ޏcG.YG@Z;uõ ^ow T"mÔB=ZͪIgD' +M %gHr|$÷ƒx k)}JЭ9MA|vy Uю}Z1*QF?cyx:h$OӤ5>6᭵ms$(3b$u7M0i\3DK>\Zr]O;9X8G2dRrzO/`:7'l`YD1lӵQ>9S"hg`z6W)žU&ђ=𨻇]iʮFN ӤޜnvmӚCYq0(;~ Z5"CkV$\T3Voq=LfRUsϞ@-dp9?mMƆrxʐ+UtM:p׿M5RXR(SC[sl2V?[aFꁞA@7 +SpX|y,ȞX\z SPQ2?P /AVo>yކ WAD徺B_0d,o Psy>A!W{+Jy™)7>4@[$F/QEW I7!썶 fh4j0.CalzO*ٳ+6K T+~5IkS>,ıl :r,!)vB4z{c> ޚ1 ~-~*&!CM))ߙfvTGzj".'FmcOgx'LOjY!0x=0߼YF`-mȳ֠Y}JkrrJӵq _^\|;n@jP;)W%cq6̄7shaȃԳ=iP<9QtlҀφ@7n;ZVO-vp u3̤11R&qcK`~~E8>_ΝM %JZ~<.nPr/UqMo&,q\|?0~妓 "H^u{0 '6W.|xX%.͠wp 6Wx{Dx7)Ɗ3ʕ>fv񒵌TBH8MmPQ 51ܮ>+q'NTvk ) he)J\nkCZ tmCx +5.. @[Hev\Ү̾L]$1E:F0xҙ?wrQ+CcQsy/WrhfnmLtԪ=',8?Ơx-nB \co=I+03hD+^' F`"nݪU3E%H_F3!aE>$Rvz(5@6Nrb}GP󜵀+6<FPsMX OuX S%GSy}+wHsCF-.ds2c_a`VEKuSX}^;RN~x3n: +endstream +endobj +880 0 obj +<< +/R7 305 0 R +>> +endobj +881 0 obj +<< +/R137 315 0 R +>> +endobj +882 0 obj +<< +/Filter /FlateDecode +/Length 605 +>> +stream +ZOt澚pVӊEL13Cߜ㥥N({KA|CtyUyk%ZٱVJ)ܸf$hÄϚ&N ި}1noVSݎ#zd>-Xke)Z6mx3}BLYY>U"7JMĥriFO6WP +n|av~_)R_h/FX +k0xW:@H@>sßU23gέi Ҽ5y_ZZOGE]MŦnˎn@ z+ѿXh~(k}*>}r2(AʂY,n&~w`#," 0gQL>:q1F%LwcT0"h }[":6"z +6ZXrӗA ~6+)ƿ[p=H$9҄g3d/3+[GN>JpOb]C[ MMmA>ξTS^ /iT#b$@A0g6ɺR%x2j?ٌ~/́{ +endstream +endobj +883 0 obj +<< +/R7 305 0 R +>> +endobj +884 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +885 0 obj +<< +/Filter /FlateDecode +/Length 3135 +>> +stream +py4'|¹8OGpDZJCͮp4,ygUzKS9w% +*i WVƚDT9,tƘ23 竭nq@*샆Pe0Jgi‹6Wan"Na*@e#"H.%Ih= w"Ke*9"s4V>&JciNWhkA{"|} \cw`7w7C $Ą)Iq77,i]-\b +_*d-a +7`خ4th/v@{a!EjEiJ):$$|xkf{VBd \8*ZXm@sIa&}}|V(.O6u@Y٦'=|fۍuA<0@S\?µ>P#ro"GI2m3_]qRZ0E3p%9@C_i b6W3P@jS G.V Dyڟb{1^2fO264P[%8su$N{~W"B$gV%eWXkK}N6r*bϴ{{ `#̐PnF&ؠ`.nB= 1tvof0 >-eSx[QiZ0jďTnE4__Bd +1KF}-W}}@w6I0,x(UfsVpSa9&:Jg :Jh# JN Ȩ4#dudRVX!JYz}NZ7:*ѧҜ2j1_c/0LVhGfWp rT{V_,|}z ZS PU#Ƹ. u;ogovkA?9BHz[iقkj*{1|+چ?LC3<9RsmSpeMqmy9y_ ݷ5^D宬$VWY>Au.v A3rWҴʓ7f;ᄐ-%Up 4‰f4x'o3 +%fIf-/bغt=^0UKS9Ӌ;) 8c " +*Ou_¡qM޿ &ӵkpaF[czi;:J_`46QGQQO޺vWRd Lˉac<*+ЎRjup8eB*V:}euf7n +H(kygWH*ܙu MjfOǍ-pgXgk 5O3o00Ov}F. 31ht*ٓ%,k^#(񠎴̬'gESIg׊8[KlD,1;N;Z`lȞ>Jh-`_}HP1UC"vKϸ\x|7=eha\󶧹6ttUC6kV<fTSGzT(0\TUe0-МLXVuV +{uPeu8jnٓ9inoO +*d?æǕmx/S癡dUiʸlQ$0w,=BIس0𰴼7^HV*"7 HKiTTkǤ&HQc +b(Kz +ΚkSLI*~Y>ߚ@5̻BQɛHD` y Tw(;gטπ +tc{e ޡUd<aHh6@%Ɠd WETYF56쨡z_Mӄs: }̐83)ўb&MI8@a$2zy19Ƕ[ d羸x|-0qT6UoP_B1oy'k-LuTRH[ٳ>Nt}q r0B.Z +Br;p|gyo| +endstream +endobj +886 0 obj +<< +/R7 305 0 R +>> +endobj +887 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +888 0 obj +<< +/Filter /FlateDecode +/Length 2757 +>> +stream +ߖB%#t>N?./v|7EasW::qvD/Ě`db"ptCfvTRv9THJ%lꣵ# A$~,׳[M '-7ʱY.fCqm֜[r2 ,/ p]4τ ` +=JkgrXC۩qLWߢIdivi"p>ƺ#(X{{߈NZA+p”=֑u׳ 66_CggÜn޴#bK1f8|rgWkhfbw]Zz@qN&.bKӚWUV G_ޠ钪;* |WݗGƇ"eC{ ]e1]lth ȸ`πnUâ-ሑ+w*{`]+S3D@w}k;0ssc͢,6lvStmH f(C󨆛m%y 4 +hgjiŏFEtTU1UމT_F{o;RqBs DϳXnuFZmGD3Gñdד2,d~pj74.NǪϕߴH=n)o/dε?j@ܿ29, Hx6t5*:ڹy$zxZK]0_JZOezECn5宯mp(>ޚE{R`ԗCVc- N]{T5ǮO\7zA#0nZhK&E-{SD*`iz>a}U&xŏnr&җbڍ%fc*%?%j`1BQplo=Z4!( +^:,@oBbN1Xg>+bJO;<QA7}%o$H:l6ͻZK=D7gI%pSƱt;,8慚CVb?ih@u,tGZz¤ѱIL&寋f$!{.DBmzsjv{XYJQۇaPːCΨ w 8RlNe:7Cm:Mes摆ZQ0,mÜZ!Çv,)@ ^;*3/"g@Ϛ7sFu wq/y 1ݻlv X6ƏYWgEY r +7QRB1FmBR-V +8m=dmiS[ k; vrvHAXYjB[`XdI(_6`]ٟ:@$&p!!QV]f.kㆃّptB:c݃UNukz֭~B3*W4v@blW))|)40m`XدHףg'$nz"cNO)~H7 +B*(( V[zIP{7P|,$Jc$ +1 kTAr%!@5M:_%E*\2*eN'2[d'L[r> +endobj +890 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +891 0 obj +<< +/Filter /FlateDecode +/Length 2780 +>> +stream +bX8؞umdDa0N)KI#ee ^~ UnL;Dcn |p#vHnih+F "2غiV"ؗx>HfbQ$  %QKdHK^0a@A ++YS:!M1˂Af 5RJ+/ ,nW[ yr*Yie8v.H@JFZ2RK h΋>%o҈V83Z} gK^=ds_#4k2=`+_R!jkxH Bh%/`)_ۿRuvnV*m/ٶۆ޼貜ifMKVם)c>!bE/Д$aa:}Y> IApE?ߍ +i4@9x]? /qjeS[kB| QUuP +m4G>".bA=Auk X7')+'ڇɩ)wH{'@%\#t$ y&"I;8c.ٝ5(6+D0: z a,bUAt8؟^ BD]?HMr8 K(%+fI~Vr˰? Xj`V?I]1rӽ6+Jo)XG$ˌؼu_!6ɲXEojVtGiuH0|ɷ_)A`Q'S"`s(>7h?I=RòA%XȆPޏuUQd%8W/okVw a얊)/QzſLJ%.0`Nxւ)fgpq~\G)%.:[ꇒtbw9;6; uz] Mk: `RXS`> :]k}(NaORa)`̆HJJmΘ' +ȼ{x q֔P7C?I4c w2sW4G6f]:p# w7X7H{3F*?7&e\Lc**y@'W1Pk0a`&oj_ Zu +*|4 +ʱh#UX FR9B]N^{sl9ݪ>-fČEi:Yd/Wƒt/m,!eɚ_J#r6y甍){gd*o2ٲՆGTyWI]F6/ ,n 2/`CE]g02"j@9)NŘ)'l}](.!Su΋wUPdu;zWIL=WFt*刀%n(@鵔w>ϯze3IC}ި<%O][k1yhBvVC@_6觃O>LgLv҄˒C9$T#fQzwX0edt4d #s2Ci_(8u: Ζ +C/nІDfVZӄ[ +xJ6-7bojBs6DlJ䦒tF  +=~NV/-C>~"z؞;;mD5^dۉ棟ESK)E-2dO7a7&D -]B?~z]O׷HUndg8W=7}(aMUMI8Cq\Cy)ƨUѦX}m)%nFV#>f|wF}ڔ{^ܣ ̼Y^ QQߨ_% `QIDF1A)͇@& ÿm 7Tx>"o"TWHe[PxCL5- 1M>DP(,$NR ۂ^ +qSҶ @.̬\$3f9L[f#07B%OBG._ҽ+8N_/z®fPIPdF[5[-A4@ ª*LZm Ra+H/E {IV!n ]䣯L}6F m@nRzLCR# S7FQDsV|OZ!;|͐Y(ԺI`'~aO$--LuONx(OGeZhqf +kρN03~0B=S9M%mRK> L^ +Jѷ֜>=ڳXLmPA8UX,|#`~K.rc3=^ج4.<5/qpji2! +endstream +endobj +892 0 obj +<< +/R7 305 0 R +>> +endobj +893 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +894 0 obj +<< +/Filter /FlateDecode +/Length 3114 +>> +stream +5(Kض{\n>|Ĵu7NkhŊGMVx Mcڐ@_`@ 5л%6@;Y}QFbE*rIN߫eūhhlMCT vG@s#X56 E?.2a݊XMYc!^NhtLvckX +z!oYos妩\JצExB7Ǻ `I>*"+`,cAG:{: 2bWةg@gZUAwׅ[hwBW(p@7}]l#m`o= +{g4 -/&2?׋z7-(_fDDL}A y2ܭ:'$C9+c3+LD ΥOp/mD: 1y^l#F<XeS&;_.Ce"H^"JnϷXX\Cܡ+2IFdX_j(# JTS$OOnE Gsȝ?PǷF9M}dKΝ㈝\Dx 9e#=1R7 +덽t 0[YaZcqzPKB3!`\ #1WBNY΍(mX('m59jyMι0 xb/`ѹs=iy~?&H{zw)dWޜDDPvÎ`Pנ VOp0z}^Ţ0")4*opZ.F;3+fu2FΟ;>)fs\]D6 RMI̬ʨ Y0@]ܛ"B^dŻ#mPc5'I>7?E,ofqm}';#+>v5)3`Os)"="#`Apr_Zb>H&jYyQ +T94+:.Y+1ĭ*)4TߐFO܊DGBb~ X9)"ɟBj0 pv处>{lq2[kljK֠|o g*cG cFN&iơU% rd7:N94e{ +\Pn瞃tWP"bZ>CnPmtMl4YxFQ'`hn;9'Ks(ǜOi[P_Tu??Є9qDk N)ai "hJceX{j`տy`*0a7_u[ʼn~מݔD.PmmH 08j #W +?<Jw×jMeQ@EK#r| fOTo-dR~ujphujۢJ\߉GӞՑ&rۨxqJ uʼn–kL1&õߧ΅v)3d0ѬL~H +[}k$Cw/]?)lǞG#!w,J؄w'}p,q:yufs8(yE9YD]+VwBX-Fc-")ɸ0uXh>rE{yYu[~LDybЈ=Prlt%$R(djj ɂw*jYs&tcE4hىsoslidu CnǓr,)XE0KO-"TQ\;l2 [> +endobj +896 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +897 0 obj +<< +/Filter /FlateDecode +/Length 2276 +>> +stream +@pN)|'Mo}bvmnEH!;ULo:"̀!Ƃ(eI䤁!6W 8#Xm:|G~ZaԾ^9sEpM]ӕK骼w]>Jr5O:[&k"/.*Zs?l_.XOeU_Ķ%V?O T_ E6M@{`fqqnEF[ FKU{Mġ\@ +r򨯁+F94?z3mVCakH:..|;g/E9ѕSz<5FpmXD|$J =GJ5tZ? N62e'BnVeR@DLܱ +ޫq tf'ggN-hLN'y͵[ +*<ُEHS?~])hxi)q)=+ 4g q*wJmS*ZPc :@,תgᐍJiv=!~]/^%OLRf B|id\Z,ߪ}:CϦVo+<<@Ê2M/Z);0Dg~O·zcV-*=[~ Pt$x|nO<* &E %`,r}#HݵЕVE1"-_K ӥ=Юvx?08axh[H3_VWi>g0MU/9.e9}~/MAyߝ.ׅpLmR#SСqVs.LR!|tK]rNN2AWDȟYh_;a9 Qd2=oL˺Q;НeiÆ5*dq޳[6zxvBȨ"D&< +V(p4Ջ3 :A|Fĵ0 qAWHEBN(3h g;'~YX7?+x6+=d BJ.X@|"87@M& dŧBle{Dܻ* [Mܛ(_j]tC^ɨ ǿKΨ_ {6 V^C3$1Dؐ±R]YY> CIgd^7~ "טmdZF3?%(,U ؞eTPFk2!,w-TJ@G􎼬,7 VDY%@v/JdhM6VuߎՀ;<eA;YxmevQ;7{1`AS덤a\cKt^INFb?TqY})t +Q+3q# $D"~,VX x8_etQEX# 0M)!~>BFG;!Aն3_!DePt +~C ]/tr`~+Sjw'ؽV &*"^n&^YxX=ْVP#r[ ̖=MmwʋL9'6B*qJU6{[/75|zƏ OX[-&׷> +endobj +899 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +900 0 obj +<< +/Filter /FlateDecode +/Length 2554 +>> +stream +ީn^ * S!cY㶧 Ŏѧ -h)A1 o +$2v*=;}$p{YeӢH 5(pK؅]a<9d֫#&Fw#XlP]AoDjC`#޽ȆR8znnVb.~ވ8Űκ%+ :T8N=6YOqE7/ tЉ4{|]#Kg-yߨq?Bx 7 Pgg2Q5ҿ:|<@l2=\=/ш]<؇l\â'0yj?M{dpyg,VP>F'hQ{ ȋNP(եډIK31KjɓԶtqz3$c#{,+ه2Fvx(ݲՙ ͯ栘 +GڹΣlFb[h+0=grNC Y Hk-\N WP\K3{`~|LAҫ Cie^*`ER\@GHAϩ`apQN"W2;cB&pL:,We #fC$x.-c͑-nPgz1gfyp6em^A'c/i *1׳dPHe~i&zRs]GU>R]F8[pa:nM׉TRY 'jJ +ɃqۋrpLŇKejIUIKNGؚ|K<qƜRC7\(:)ƾ?D\Ws椏dT;?@l}pmF>{Q]G?,Z|Ol= > +bN)obZڅ2` kyU-KUhBJ@vO\LMa&sG"Wy +\EqmqŚ2pKkc GuS/$cl4<Ϯ+{ +Q3cTJ7`f| q\5([zk]Ox-X C3diTyF K>NRҘL'Lp"Z>͕ .6j8 =tךGs # [c #+v 7Moӕ=w^QĖ3afMj1UxְWVbjlVW +1tˁ1T7AnV[PCbtTäuEb^xs9]Y +endstream +endobj +901 0 obj +<< +/R7 305 0 R +>> +endobj +902 0 obj +<< +/R137 315 0 R +>> +endobj +903 0 obj +<< +/Filter /FlateDecode +/Length 1079 +>> +stream +Hvnh9}h2r9EPyf<Ȥ +!vG-a`ZqА۟\E` 4J,BH|9iPrS["bxlKHYgol̈ɨVB , o-2NS朗{)Wb^'cΎڹ'2AK7fɣKيO/c䗜Ų1d֙ Kc(ScX:~hΞ0Qo؃_8FfAǡʧ Â~I!/]0M|RS'޴TI`rԷ>0p,. 8WNd/vDϝ։zeF'N}vKUΎN"ʍʠkbJq*ĵTo]hf{" *Cg8bmIDKfA_ W=n%x}ߘ$`Wja0@^C/j)L8&T+l{fAŒ.<Ѩ9ymj5 >vX#axi!: LkW4mgRLlGra ϴ +Tǁ' V.{4M-dOEoIozqR4UM?wh& ; z76 / ێ u݌2:!!}w +L=jCED䤔E$(ru^SV~*e\&`I=`,].Ѓg8ݒwMF +endstream +endobj +904 0 obj +<< +/R7 305 0 R +>> +endobj +905 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +906 0 obj +<< +/Filter /FlateDecode +/Length 3036 +>> +stream +kyEp>n/d94Vhq$SFǷ}fujXO("mͥ^Ibu:$q(A­#MacqsX3yyu*f}H07VPӆ5NYhe;i坞tsV) ̉2V̋.#˲;#]SMkr8FIMdha(rـ ~$l`3 Vmq#q4 {RDj98b1` `*$:ggPF]老)}h? Ds7nPħEkK.[0IS#؂f=}^IǴ2[h*$"H^c=7@%0&ݪmsځHqW8P >a"eOy?jhP0_w3EAH TlY8i1Ǯi-﫽tɯgDG"+k"[cH[4-m$ݐ^3GyC`Lب D㷽NsR#^HJ[|wU/&BS"~{h!$0b2|]$h,$bY3.}E!1*E%I/-8G罋|[OaUş2wG: s@ؕM'ݢw'@oh\lMf՟-J8,KAu7*>!V ҹ/6H9:&B٬ R@,B: ,e@+GjlhTtkׂ$r'U~e秐ɑՕ^lmX"l' #[XHKwrJ LmOlu-O,~}v{3k/ӛ̕ˍxcpNHW7, "4a t&Q"#G2G +oAMt|Ǵ;ӽ,!;5nVV::-[\QJf d0!U1%SPGR#gN[쾫ؘ,uu _w+JTmPQjeRr!"4{a1n +jwEg9ھOqRgyP\k+٢%cm5䅅hTmCGkQ\bfU7N vWua>xVxYWq=B0˦(@X̯<5ܾr9MFaB|4qEW?U 5cke-G=*VʳhI@Zݑ؞H&&M4E\g:+S^@q)KUFE-̵v(wk:P ;x:,ouEؚv * TN!旉z_LYkW:̑ᆜnwL@opN dr@:FWT lꄓ87PNGNv٫(Fvħ!̱zѭX[֩"]4 n Q #^!iv+&P7VO{-Qd6όG|13c$Nڇ +ZۓC2HA369hYlXUX1ph7 {-о,M~0ҬxBctsN +endstream +endobj +907 0 obj +<< +/R7 305 0 R +>> +endobj +908 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +909 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 257.453 372.994 261.222 381.101 ] +/Border [ 0 0 0 ] +/Dest [ 147 0 R /XYZ 75.52 99.54 null ] +/Subtype /Link +>> +endobj +910 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 128.443 164.722 132.481 172.829 ] +/Border [ 0 0 0 ] +/Dest [ 147 0 R /XYZ 75.52 87.58 null ] +/Subtype /Link +>> +endobj +911 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 85.629 207.169 95.763 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +912 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 73.674 209.534 83.808 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <953c7a9f2b5c1517da7162e7119abf4a082805db212eb7877e86e89349243e94c3266a3fe41bd9ae84cafef856e82689a3ecba9ab9a340fe2b0a1431fc> +>> +/Subtype /Link +>> +endobj +913 0 obj +<< +/Filter /FlateDecode +/Length 2898 +>> +stream +[H;+z=L#AÅ 1In ٱcb-QEtR𰗦e" @=Zg=J':މ}!N8Y~8ߞ,mo迃]/ ,F=44~!nn)䇰xu;94i N1m#X2`ăiI3sEa,`|۞ c HhdۀRIik]._iSUEa^\'خg;|W"TB),Pg}n 9< + i[A)9[]cܞ1PT]QyvE}_]t^]!=ǬғSLs ڌ]ò&Tq7A0\DpcN`qJ;%u NU)iN^kUS)&uS{Y7NY. O8X>a@Q2^yZq6m~ĔN=Z#Utcñ"O6 V=bhw_xoZ<ûmE{>͠,yV n!)(({?dD4' v3u鴌ܘ#]Yլ&Bk `:2:YGuT, +S*X-)d(=P󒅶br9DMH1Ւ.U/bJC0&׽ӉF}havjNn)-.r$ʒ|-|>,HyW;,Aom}:UYTө5/Y`k쮄hO;S82>1';bz^m˽qUzߓ(vρ n*] p{ ͤQifI}y *~5j lXM<˜1b 7$.A bkU=8%o""9$y<ӝ6<Hmrm88Ofl ;o!vdb[9;R::{g{@_Y(4-pXA97\Mڐ7T|Gv;cx`? u 2A[?F ?Ql 2lMD%ˎ`yQFh3Vt@3#;Ey>&t"6[Fӣ(FrcWr2Bz`CByT +?1 +^PX<`Nә)ѱIxGt2Ma2(.P{KG_,sgT/-J{TJ^0G˴jHJ%'9qzoM^4ʸ1C[mV}@g晧> +*$ata#!JaH=3N.RtX٣j|_';oU-0zJ?P1๺ q +@n&3I vqWwPיe:J^[7Y-ݐw&9D [ N6 *R)?dio2(Ʃa Pk`M M20\w:tؑ?Oh:PxBL6yB$ é4ϸ +IzA1I2,DvR]b[Ŏ.9ɰg0b\ABGy zK+N4t1d/2|SwTCk@";W|\x +endstream +endobj +914 0 obj +<< +/R7 305 0 R +>> +endobj +915 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +916 0 obj +<< +/Filter /FlateDecode +/Length 3197 +>> +stream +-59(?j'*8UWʭNd;ŭ~DInqQƞ[\J .ri޽5foU>ӓ!mHbjƀ5O'Tz 2/<5cL9jScɒjb~Fbͅ ?n$ AiڲCp%Lh tr76=t\jHA8KJ5|Qs|qg?SV 2\R3%:fFdw,Fo+4ܧ'p%%mr&9bџ3bReOycp3 ~>Đ]j,}`TRG't b2.J W{+8Wm* +qs)jwb#@Znh~H[fv4 T[M#'ٟP~0ofi"X\GZ\`E#% M5StaD7ӎ7D߆[=(c8P6 +ȕ31!'嵅Q!٫1=H=c,0@=nm|M1avY%:Zo4\C|#ܛy\7Pl"{VlkZ9R9hKcS&A9 Hp. *v dwRVz+D<#5sVRSWfBC4/L5UBhũ md5LbqQJK(ʷsvl@ *S"\x20J +VDE-"ȼW^g?VP=裶ɇX*upL1sXkKrg2r;_8l# +,ZVE#Ri،й +n:,!T 4X9bV"˫Yfy)e$dUx:{*S :kѰ_i嬫aƘrGZx#\!@_v\-㆔̘4PJ3F #W% +,y`+21B8.{->`B8"Kx>;}gUdN]ܼ^C͗I ؚ&H Eyx +8v0g4]jB簲Ќ`+p |5N<$xa2d4Fν>[+=` +-}*yzIbCǬyM xXn '6s%X%: +񄋙}gT'yoBw9<\bx1@?~̂TK$Y1-0!@_B%jfW7bOnh2YLKZnR|JCU ]ԮʵlդHi++ulja dwt>}7҃OL n.fu0ͱO6$SkK6/vU@gDz4<;_G-G}2&!ɠߍ@w > +endobj +918 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +919 0 obj +<< +/Filter /FlateDecode +/Length 3448 +>> +stream +]@,owz, H낯Qdz(w-8gZ'2Ua $]l-{ +Ʒ4!e0gߕ4F&u-W^V+ޫ2 ҥj wt$VfX)u_h sc#BƧ+W¾9'K,=Z;_H)R\$SM$tN&ͶOqb8k +i+; g"_4ȈTwI4vu]:jAtɆ}_jXa'?R;JM؂S>WjL{8N,`p$h`S5 mg&YE,M}rV'#ch5y-VGI4DYdAxWK8/jJCJ%Wqӡ̈́0)W=[{!K/sg\sB GC貄!|r*xP`&W٬Oޠ،׋ʪ']絷BEd +r6S0U@"0T1LDvo`"x8+9(-#ߓvM QIvƢ#K4"Cܝ."gp^O#RA2rW5zTQ,]UP~EAIo@\}M/KCP$Hv*4VjMi!k1&kZ4ơr*ԑ/-:h%Β"&?䛮}ZEvc G9*yS' &}42|nSE8A݆g>8A" =p[',ܸezelP +(u*BbV6@` Am +p~i4n?Xqtn.|boz],iZ7)Ƞc *juL\ +&ɓC2JA:^pDX޻p){4tQ%+NJ>rjmdtTY݃Ǎk8"c81aXwUw.A8LYmL g8:Қ ~n៱(# +5 -k*^<wzr,s{ψ{F#o#j0OhߌlECHmOHCoDu '>v\ù#6le.6; \aenTI8GK;"G_CcN}N*Jhb4*50)|r` )B3LU^$#4ƜT#߬H|U=Oo߸)g(JDTD6 M2L TzGok~CAbͻF_IāWj. 7Fa2W[Aʢm3U=I Q=0HD*6jX +oŲe b@3c姎p j+~\SeY xjJ,l)\`]b7]I4i ߝG$PoBCaaK')671 MUxണ8ʵ _= :xO |ÛŌTL9 ]{Ȭ.kAOZC:d\M9q1\z!! `>GP + ŻrƚX %ĉ?.snW0x価"qwX6MzUr$ˁVmy`g,d½W-sR؊NhNγ|09LH[ſu命}tn~~Z1NmjHZq 1IYl)$XvYF(#wz[=8rRp51jM&O͚$1ygJGOBBuBgf -B#؄!8YLmմn +2tMO*a~7i' "\ͺ&nE=J_/b +{ z _0Δdv> +endobj +921 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +922 0 obj +<< +/Filter /FlateDecode +/Length 2895 +>> +stream +k6k?Ën~2}Yx5 s?f[WW9s?fk~9VNŗp^O,*)_ ,fꇽ=`!@!#j$'=84KYT7 J$'0W@12IWQ)ba6jD\ώv< )|֋ '#geX琙?s&țtlJrT>=wfEj|p}lk8rD#Umה7 fi;ʽ,nV"= b쒕<]?lF9dbvhd6f ywT~t>'TQ Tc(S5&qM#bpgC<;̅-7`IxTq"_O7a~.e>_} d<V2E VN<ދϨ4FpsC Lyyn2b Ɛj|#j,4s" ^ANu;ۙn~ +zXNғ8hdqYh4cMl˶ s.Ve|f s͉ƴЧqȬԔ!bUzy$m.fzk%,߆'q] #xaj[ΨaZE缍">ܗ84\@B k{b* >q̾MR2 9U;\UbO +h*mճ +qR;_ƕZ[s*:Ja-ᢞ~'Ymp7)B9#m\(ǪZ~Oi=,8I7rS^rMG[MmG6H_1DX&e1cu}RšiNR`gɟ`*|aEԙ%rh{1 (yp)M#K`B8zGeBAZCm. 'k_Ҍ 듾C_5s^::C5&l˔剛ړdWy%-u +ˊX!$zє˖oG .:miƩɔީ"dwQ\2nЕsGsSŤxdg;n#居jvÎyܶŪ9>T+WW2mv<@>UOx跉ٞy>| +X%0PJI#SK_jMI\hbWocxNg2O$ MqRBZIvXb?`|y*ךJZ[KYIyn{bDu-YjPTDf]'ho8 _E[*Iņv.ܲ*;4g ( +Q!V`ǻAEnڦyqQ۬j3ixvOry ys"HtĊ'/(Ĭ c76gZc{;~1ɞ]zT H.'*|&]\wf}@SiH窄v1E}sϛHy_pǃlf:]>%"#bNp¢yFO.,˚%G4e +<fk_[0s+RP[s_叻٨\G\I=. +*+WJk, g[8Nq2SqM5l?WۇC @&Ts) _+˟v? T\3SK-a\t1лP[5]iiDq>hsY,5':9I p` U,Z7"+!oRP`_%> Ju-Y2#3ϯA-ZragZ^ś{BWc+.7sG'7;_s;rs"us,M]?rx͓Xw9=n:uQ*ShZYs,{)ZIs6as! !Xq{ۣ(-tثc 4DI0CGlgt]҅SH]x: B HP=(0ԒKZl=zq E.!!xB~;TEBU&s6ResxS + +U{.Z[w=]q#3u\-+M;! +endstream +endobj +923 0 obj +<< +/R7 305 0 R +>> +endobj +924 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +925 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 97.402 191.684 100.987 199.791 ] +/Border [ 0 0 0 ] +/Dest [ 151 0 R /XYZ 75.52 62.43 null ] +/Subtype /Link +>> +endobj +926 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 48.522 295.878 58.655 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <858f6c7e5c18f51cee2046a37a0dfdd159cd0f35e5889977db924163823611f55f58bf8489a4211ae742ead8ae24c7256e22be33e837419ebd3fbf836f84ef7540a06c> +>> +/Subtype /Link +>> +endobj +927 0 obj +<< +/Filter /FlateDecode +/Length 2856 +>> +stream +ؐRtbi'a=F + +@Q=OT|e0' u`Ix7G:[7-JP?꾤oh_4Y4Bg1C"65`' Hv26ޏe;alV]K,09xGgQ#5W.9PVz_`UaK5>[B.G "7 C}OLG wrH!RQ`co^cb𵛆h{=dP_燜RuYHUc2PV1a]ޑTeot{{}D((wQ)NiN_BC犖{ZYJ9OSYg4= +^cE25&Na~xQp% + fs4̺FmKh-gbcL># >ξ0x !=]>*@m9G#(9$ uw +)o/ffE~aݔʷ-ywk5(9߯{sV4Mf&tw :Q.ƭca1[;n̋U6eqDs12[ꏼ˯P_IxߣD9 \,{UaspLd2-(^s 18s<$cLq +ܺrsă& ,M4]ĪIz) Z"(#Fzwݳ XJ'13p&L!'< ǿ ݻHy$i]VD DtZNI~)Mel_zxMҸBU#Ku{KUafܬ3?D!ܔ^ٿCilf8tx&:_'^3y~{0:?JZ˽~/ȥwBIϒpZICNx7U|ݣOk&ޖ"3+H 5kW;˿k'PyL{ ݨQFz@⁊)Ť܇>[WEGGRG֎K8ڬ<ŠIQ>IL)?!7L?vC\*IġeMx,E2N^s!ׄq$̳+wP?#|HLE!I͏OF%zhMrOxۉ^D#▭k)pdD2R+~+\CSɚ>2XDzOC8@jIOl5ԧD`)\:Jh0uH ڎ4pX 5ar/3y⛾>w3^GaSlzӡ'?n`j`R&x-_qp:ow?_:pBBWHУ4$fa[ xb_SS ?BIxO;h@+&t6,J `A?l`JmN +endstream +endobj +928 0 obj +<< +/R7 305 0 R +>> +endobj +929 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +930 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 373.248 382.958 377.502 391.065 ] +/Border [ 0 0 0 ] +/Dest [ 152 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +931 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 223.038 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +932 0 obj +<< +/Filter /FlateDecode +/Length 3021 +>> +stream +@γ}O1ؼ=rX M+Zrp#@v7 o aCN3#˜3/ wIЫ\*JadA:~MO}Yv"?0/l|ɦD}ip>NJS|0YY&7:F#V7>U u/00Mv2 8BtKõ'/QoF<*jF}/UQGqM4z,o8l_nQtÅ boJ\UKt cWanLGAyLɰ؉t d*wMujXnsE6#oIs%Z݋`튎8L틻v[v>q av4G|L% }lTS7cŝ7 N1^>rE +7NuVQQx俓Eej!:Qbk=յ'7) +T\|qɄXUBv؟uPU;5LٝmAr!S+dJ1c/azmί+2O箁Bz+#%!VqWG %gi *w?4i _nbI "3*@p5p8\{X4Tu@,Uؠ=TѼR늢ӆ1~Chthtǵ%-P"Mohu $D?ͥy=Q3Vx }pHouTB/ۿwV"  l-WyPgvGL%oؼ7u{rː, ˄2Qڂ>rڱA]P3RgI{SVuv䭪E.8duqQRqMwMJFCI52}]kG=Jfu.R7\Ad(6Zu|cV4՗?3 @a/A‰h'bT‡HZYkf[_/,II}I%D +ҷ^[!<و5PGH;VLk9LK]_ENcff S#~=HKEZ`c춽.33~X" ȡ'T~>Be[Cpqe ]e!evmy!"B +W9F;gAj~+y(-c,9v6䄯7wjh5PѭOrlOܟUx >f΁A܇e@zߠ@B2p~J,MUkyJQ(^y`lR}Oc&ȅ\L!ڬ*}S('T%$&2r,%KYQ!qcN#E"Ԉʙ`J1Ko*\5uӌfceMOSI[3w9PALE,7I^QEY? +C|`m W6 3 $(}|C26% nx^.VOM:0j53q6EA7GN8F +P[wI%e#x>5,W&yngTcq ӱg^Jg.By}QSMI<^(}+`cD96GiZjG'Q}T "I&jA\*0Nw?y⼚di#- V-4&I<)~ Ҭ&w\6b70 S@? aa +26#k_\`hrI2?Nڧ+:l+N aǑk$ni]Ju_Hӓxp vxa*е?bDG +5E3٫hOGr^ <ƣؕz=@?F/)BpQ +83wpesJv-}j 6a3-ws~ÎV ~6Ȼ'2reI8׳H/k3֋C;_3[Bj*q*_[G" 7)3eˇxj#!oaW:qsB/wDLxФ +P?e0W=LJPhzo*û!}DT#/ ~M-ӎt-&3-wO2wahq5o8(yy4i&$Qg-y@2ttqH3@5{[8^łt7l}p'f/r9j(Ԫs)% z\h劌q6j. iItL[Ynac \ x΃&5j7l 5~9Oa$t,N[k @'R Vk+`︐03(VWdX* {!6<ЅΞ1yŮT\8^L}-cM3Tdbh<7csVC PL[_3\Sli蝍~婬eC>[҈^ ekw>9/P;'w(0@gPu(+-L re wt><\G3las/5 b f=P_DO/Td`z+M @]nB#{5qt ~[RᬠIm.IMYsH&c_J4޴[YhsֲD8a\?L%u))=YTqj1`cJ3'SN5-\l\Q2 2ᠺ +&1aٚ +o{d0U.129Ձ^ 84Mm1.yZ4A\su)gX,> +endobj +934 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +935 0 obj +<< +/Filter /FlateDecode +/Length 2585 +>> +stream +ýH`& ܷ{?x fyHF,/|I0x:jfyd!DN:M$6P:Ӗ f3)' Ys|Mh K0'A`rm,Y.یfr9癙?鸐.)߉/Qay=]sNu,<'{&#2>[|%l9/VZtJTμ@6Vn ;=U{]5B~tƢ,.V+q/6Qݞ1\y*i#} }DJ1Y;xЧ8܋1K{ٮjelLwy\.<-" )|Ͷ2I h4׌/D:D I^ m\ :.ҁ\ i8VlkN{XN+,zx_"s~, 9pFU-aqX]_j]%t?kN%??pTϾNOUEܟ4~YK'P`"MnF˅'7 {0*-N] L&%ggm 1̋d$鄌i ,}̀ru֤xġu+okSv Ki҂A5.2, r!ՠ)rs%>E F`3pzuzG;^Nbb#i&^UK|5ῠ>ig7/<*gNd zrW_Gk{ f s2l+=s +S7^G acIPLlǝ^,P Dz*j Ew]H~O;'7ml7P2:A[`uEښeB,-U+˰/G{>8,ff +$cE x~߀WPm?P@tbVbbɿ*;}Yld=oqDݵU㩮FJm̯Hd|vjkeI%P͞C,keN#i#RSota/HbmsYt "'K1pwNUqE+es B? qIRA'x-ЫWLA9+'plw*iġzC1gd-74bp.Ғ6[dA6yt]حc?MVt#GIH^f*pm0?l&}Q̼k|ʧzPQ%[=?|b @LS
@ޒ ?Z3&%e 䲆6),@A2+|F.I7$@D`Z_2Df(S_9> ye$)vu4P 78/Y<4|\޸.z`fHo0aJ%Q ¾RwHdZ3N}wӅ>v~Ű䥢a5.c45w +\Aw`B]41e$MJz Oz3oόX FZ֠L#V}rpm /U'2l̃(i3PgT]Mp>dVNf$w|2 ӈMoW2FҬ5yb &#Gk(X삱DˢB-tU-@pL9L M;!0kiߛx^3,iеZ=le Ccdd=FrWB:J)eqgiG/Ke񀳙}q-oF=Q/V1^!DyMJ0PԒ:4+<[vaӯN!{hD{j^Y0#)Ι)4ѡ8b΃ChRgbL)LGmͥBJd|0k&c1f*Owj% }|YpBGÊg%*Yxes?p61?X'vݸIeaɃp2Ņ90jM9 iC0*. +endstream +endobj +936 0 obj +<< +/R7 305 0 R +>> +endobj +937 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +938 0 obj +<< +/Filter /FlateDecode +/Length 3091 +>> +stream +t7U.(T RS[l LPc&g|t> !tg܌mT{^| &:mb\'l7|l>KDb׫TJB0C!yEf@65WT\`Q)c.Ř$Ç[\5l83\ xjEq_#{KّZHA( +U YjvnBJB14E< ;@ +Wp&*`%d(02VwwyX]!et󃭡g/D|UvZ]dRr$mNfIoF@ᇜi/N(;Y#tl6ZHh5@d_֗x%ټ? շ_@2Td!lBvnAvB `Cm&G`/}'e/ѧKIaSF6N9聠Hi_@J DU<_Y:=ڷij"L&%dQf(Ǖ=k+?H;?W{j%cn56\u< )DNsdNn]JM܅{ʹ^=HĽ# ylx/HՐ=m5CEb&f№kqhPE8(|Ü8"-Χp-w6BN2T`x2MܤD`N5oi]WC4EFI)H#/iupљ%#(|!F&֧}4X 6~@GpI~ZňpcP#BKy5zs'5Uu4vi&rt|`m *vEƩo\bL[/qSRͫv $U`Fi`WN~YɔvMBm{rmIu& eWD~J&4z^l5*L (#Cu ?nK4fYpm_rM488A_ETlI` RZPL3e.~50f-q p {\J7+W=Ѷvb)1;, +xge{AzqN|ĉSckFJYt=e3sB0냒# j$z<t5bֹȍ#l)`q2 +`d$vYurKdaz_ QLjyM)) ۸bNDإ庱s5-]|U59t%{vb"$p&2zVV痁3|l.w~f=DJ TECPުN?թ*6۩O{cB%Oh1R%"X-ny<lFͦOff8򄐖BǛz`!4NUd3xԳG&R gmaP|?&K2o7 +?v 34?*"ls\]U'g)(HW& w_n]$-ķ-HZT,B)( 61hn QM7T u٫eQ׏p7w.⩈r=Ϩ=>PvI6{?Toҕq,b@ b4avś4͓"NDؖݪ |]I0!mt^ՠZ@lxS_#H5DXO.!tm-TIK|u%bӝ:{D1S  %(dK D1фX&tDe?{Tc9ARoŕB2L&ӏ0x§Wpl-)az ZEke/XѺ>#Cwj;tv!PLŁCG~rkdr[XQ@1 F1- a4=wؼ+ȭcg7X|'4C=#FGj|d$|.K2rY([>ltD]ϵfQ ɃvjMw=-SBی1t#JH$_qN#ZF`1&դڙ@NI#LWHrvҽ{,VL(P3qÕ]-\-5*S+(3>'ø$zMeDblyϑYCN d.l#;3PG&HƁi]V)w:8 IĦ #:Pa\CE-tl8@ _qeng3#`}]<<ԛf+@]68>A˔PG_$!ZcYH<Fa&`."жTaN07 [VG _" 8X?'2Rrm䪊D*-j2 Zƙ!3p=LΦ 鶇//OH_F#ilμI0p xm-솺II[EdZSrЋ. .v{Ike1D(Jalʝ|MFE1wګY@9Ow@T)@?,k5w2̇z''U=1eeyRB c +endstream +endobj +939 0 obj +<< +/R7 305 0 R +>> +endobj +940 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +941 0 obj +<< +/Filter /FlateDecode +/Length 2559 +>> +stream +zF"`2"w!ja6p-%db* b8눱F܆R?RLuD G?ԁ\/A{ڳaҳ6ApۧoLN^'eI"gv=P)oG!8i3@f ;\v+E@ [y)}BÜ/)],oÔT*z%qq6֛Q,i HG|CvjS#Q $h-M7OE_x^aP̪%9@L|ݺvn7[rdT1gȺNt_%' +3;e2&uYU]Vܝ*2 +Sy>ՌlZ/iɸjf@5( s#kc*C$Nd5 a"[;P"$iY$!_9A +e`^ 'L`Q,9qu{p; ,-,|!5GlU +۔s{ř)/:-VφLJ>N_꒨P޵< K 9cp"Cᾞ; 4.f$ҪkvO.=閶Ul +izfjlTEia)Ib8|^#7b>3)bw.p6$!FŻޞ]XwլGyX5 /1نeNRo6+\%hMOeg-H#~Bj\q2@uRu7Rƀ>#Cv +W``BO.MEMIِxkw@WgymaZ(6؃D;zqO9q~ CI*̊c':]?gAMk](6.rXyĐPf~U<$$ +M)ctzWr=BM/_dͩ [!^R69#3aזŮv0 r Nwu΋Ξ_f֪#o#h7SfrU[dmjjνzK◔[034<3M7"j]:C z224cUj"gO"J: ZTٷdt)plC7Գ*aB|GI;վ{+y ph±P%?%*ܵap-.hbwLp#uGpDV>Q=21̏)/h ).ǂ!]dž?qhV^Dc f2^̋FV_C~lKE( u4h(R2GB +y0nD:r{VRҏخdk..8 KNo-zs  CPϼ8T5{x2=͂0W> e,Fyqe1I Aq\),:h'VNB@ đ*"alEs C)LAH@D;:&,NU!%aTg5#(0KFcg44YmŘNJRO/29iۻwÁz0:UkQzK +l} C5ʴAr+IնnXgC'kPʝ_178fγlAP[q*|)Α:K;aJ: +j[kajU } +MncI; ܈, +\zfeH췣ǢLMAED ]!/BT|0M+Ȼ~N-x3VŦtVH7q3;- `ۨuV[T>? 2<٧J1a +endstream +endobj +942 0 obj +<< +/R7 305 0 R +>> +endobj +943 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +944 0 obj +<< +/Filter /FlateDecode +/Length 1941 +>> +stream +Rq8}&ɥSdԁmQ:f]CՇM}>$66W{6Ҩ`U[7M3:c-M@ENسtY qVw7y A$8׽tsoqtkډi4,foBX~7}t[`lA~XfyvJ uOntr+ =^r˞bM1O}#]LW4owgeL7Pl&dxZ3j(eE* +j$ޭ^`(7s,jQo8)7D¯{\_U4V^ PEHr!<y#__Sv?P36J P!b*H"Z.:k2 Dx+SY} ( +wYx/C%?;┱_rsIιᄛS> K !?z(G藑_dogJp_yqWz#"?< .[wgNFulS"-Of,oAȁl$Q}'NI{:ҞDLT* +:{qGz>AK<l^ Knb ^bWhBAO5#2-yHԭR>(.:,h+NUO+n8WԎ0F,߫ޯ;'sMeD{4|Ȫ]Mc1Za_q:8qe菃//*mc7ϑԙؐd(@W?upO|M%L0W_8) +F$?P꼆'HWxc-#X$)b'gk3|mlnyu;=5 ޛovT yR*e 9?t>sW(b%. +ʾ6܄9^ќ^d`%LO61NCza0i-OF +6$ǫPëK+~,ac_o xk;"q̞Rآ +2󫪙1"*6]g*fjdA!A. + f\Qˍ1"!X-8U߈1N0KJ"Gã\^FKmOz9dLw48տg?o4Pmt'ċ),L|)q5Jk$ז rT9hC+Y +endstream +endobj +945 0 obj +<< +/R7 305 0 R +>> +endobj +946 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +947 0 obj +<< +/Filter /FlateDecode +/Length 3211 +>> +stream +]x!@o4#Uз7ܫH7,82B I =%+R}B 댿˲o Lb ABguBZ⥗Yb.T|ADO XBɓqorǙ3|Pj2.˨qmފH6y[4qOY"2_&PGVX )VF(${/)0G %J DAMȩ7-[w^`LursŜg|=\rՂ`YϓS{Hʾ Dn}ȾG.x̓q [uC2'8R(`zrY=x2vS|!Hۀ>:Tꢲ LxDߵ5Itq$AͨOʷX]?*6XBS[ge`Wth_dd(8hgn*Әў6ecNN~K^ Qǃ?ÈH#i$u'I%]#{u`Ho/|<\wdqwPBw_ڹ{9y2zx?J@ t]/-m:O8|9LqLҮg +c/:XQa`xPJܝ#|qZ6O \𺥁mB6#)C'uIePe_zYޗN!R4~<ȉKV%M(ALYONޘ XE'b +e#_ɞ>}1d0OFuI }K_T}?;bB (d:ZbD]DgG_I$飐⒊kחc_EHp!` +B%WSo.?GtV=rdt+ȏ11Ih$'Є^|&xdJ&1to @}0_&4*cISJ u1 +J 霉OHLuTiVI;x0ʐwpk6X+5/oW9Fz7dZU׽_v:rٻqKvxv)x`[=ḟubڞdzsRsvoL#E+ QRg6 HsaRQ9]-t aAªɓP5v3#JL잌!^W;CwǐW! +%sՊԵrAn=#ivfayCPdE$Β^- ĺ߳rfehAM`kCq)}+⫘wʪɒzc&gu"%7H&֨\u!k6ҏ>敯+8FxNJ"<cOϼ#.Z|T]J4PN ! #aEgs1GK/_3 +_@K б`Tgr? +FDxӓ|;S{\(/l*컫(L CFPkUշ O +y#j[djΒ!1Ef_ ,>_E 5߻xD + %bڀJ?a=?y :OLd$+Vn>ctOpgyюTqq;X:(xs/ |(K&㗪{Uխ gӋjho ד4Ӷ&/خГ DJ׎fMw=sk\hڪqw]힨sޅ<\I-,©%O ] [Æ}2 ˻r\jKԳ/Nl"V}[ lM!0ݬ]ŭ1Y!64ji cN!PA\tnVjH9^S֟ܶ|=tXB;Ued \̫=#_#,OSGps{g -4]F(ȏh|&v‘B5_/xcdjGWz9QLƟ ߄)~Xp}5oRHaLLv?Ho ,H:cy;_Ml8ʋ٠&'6]ɓw%0^fg?`~K #Hܔ`i9xKءλN\.ko ?usPO -7J:jH-0p DwܡoeVKCYŧ.k+&A#Uxq1UHh&FEz* +| `;wD6xЄN)0k'[ꕋ,pz_z}s? b(S\:@ +endstream +endobj +948 0 obj +<< +/R7 305 0 R +>> +endobj +949 0 obj +<< +/R137 315 0 R +>> +endobj +950 0 obj +<< +/Filter /FlateDecode +/Length 408 +>> +stream +mN қLAMoqQ^Вդ($ũt iT&Fc,< BX/`"R[C=$ZN?",*JD@; Hd'Zz{qoBAi"^a5Mk!c罕 +KcٞGpaObM@yv~ 4V:C+uTY¸.뫱Agl:ܻLG {OtXf;.+t#gb9ɷT[{ |odƇ jA+sΙ@Pմ<]~-w8+}~/w/x숌A'X~E|Lڗz1h4\{$*RqYBz pzBVs\TUCf֍T +endstream +endobj +951 0 obj +<< +/R7 305 0 R +>> +endobj +952 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +953 0 obj +<< +/Filter /FlateDecode +/Length 3053 +>> +stream + D@U1q∟? a@r \V/I0vNHrZn8ssլԳش;Pug^l"_t.m~1zq7C(t² +lFC<ߌ@'Z(5c.0r{W=+Mc]FYZa+&{gK Ѯ'd ^٫m( ʷpa.ηƪ +sBtX,ߢ~ kHq"̓eId]Cp0-סw-l1٘5S%PڒU;y^5 +%aE"W|(y`A7K60*@+M/3YIyqC }o{@0˅/ߗ{Qd(E!pFuɷkkWڲ$aQBhiIaC:o1.oC('CappĘg#˿䯉H4ZuN:`qĕo9`.ۅh%;y +Qѷ{&I#׫b*j9E, y!P :y4 &(D+K /)E&,r:rFFDOʵE; +oEr ߹H.9F掵^y.yľ>BLI  -Dne%͟%#Ay%7)g5GzG;["#3SOEn;0̺_g?L 6˯ޞ^RZXM`*}&>SBo69≰J3):PٚIb9ķb)C W2Gs#?ܜknG[Z%QɟaErMVwU˚r@4:PrX!Mp\̀i 4>rQ +AO^ n[G+ǐvRA%.-"(]ʑ8ƥ6Qo]2othԛw Ӈ84eZ;5/$0Φ@7'I8O@}+7 'W \&ow~ 쪄( +sgzqDkρ>"OVHӑ70d3oü.+YoS=8Q1"9l*=4lxs,cA0ˠ-4)LUNʪ[?ߏ]J1i"G'ge5I %;?>0tk asv'l'uʵVA27հR׊@coC7NL ה+(S1?ױâj0bO3SD dp:ߍ97 jH΍ZXWѽ_:y+#PdX")&r CD#VTf=HO?*bÉ^nO!3TtRjAv5Mm&y]N,6{S0s#l1\%ɷ5=Ѭ5l1xJ&7X5@-Vsz}do( Y?!gLhO=q Uҭ$nc3ip#z~#9%n2&'OdPJ$(a "EYȁɬ;[f¸|nV;5fBGiI op*r|U  +۪&s핗Uo(qj)n[*@PGѷ˿x$)b$^U[!&6;Fb,> +endobj +955 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +956 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 100.343 566.819 103.408 574.926 ] +/Border [ 0 0 0 ] +/Dest [ 160 0 R /XYZ 75.52 69.57 null ] +/Subtype /Link +>> +endobj +957 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 74.25 217.68 78.236 225.787 ] +/Border [ 0 0 0 ] +/Dest [ 160 0 R /XYZ 75.52 57.61 null ] +/Subtype /Link +>> +endobj +958 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 55.655 237.222 65.789 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +959 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.7 223.099 53.834 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <8bc3ad9703b31269d52195c66d23c84176a1c82a25124f44bca572dee3006888a7feb76d6227aafb4e4170016433b3f62a74c24f19> +>> +/Subtype /Link +>> +endobj +960 0 obj +<< +/Filter /FlateDecode +/Length 3143 +>> +stream +Ms2 e< %{I鳞7EƼšÖ‰Cf+q#6qXk:l3 T4砃< +GWصR'n59W-*s!`~k&0dX-eK&rK e-O,{MkdT"EUypǏ وdt\jM^_WܽՒﯡܢ\x=}ܰ +Óϝ)qe?TrP}1O_ay+$UHـ0Z'HϨ iQ.};,@')&2Hٕ ƂEhBGɓ R~EЍpѹt+ k4κ3෼b3ofEU++wQ=)y zDs +Msڗ/Lj|^#C*o,u4jc"{kE{ +g kAHa"\C<8lzg) h7%,Ḣ7Z6Qޒ>VLe+`6Pw#rg=Qqx4】pF9y@(皓G>ozvSiI5N:o9!E}!,pV9BRJVY~dh˜]9=˲=fntBƲOLVa}_+8Vx=a,XClgJ{R>1u<ճ[mnv_#@nR8](8h;m gוB唡unZ ӵ6-̯ 9 p 94>:D8HGɞαKA]UNa2s˟@|҇J/GQm%,} A 2Fѷq5*[fH!."'zؠٚO@>rtBx%j%KM氶,P񛓃LgA) A!-ss!=^b5'.q;\nv^d3f8!J|ebT9b$iE'nxCɫ/$qh83r +da@/ἴ<򘕟6I$q0[B`_s b xjmc#cKO UwhT%ǔB ?"qsO~1kkR + ngZNXkeaw/_ky h\{ Ȉ)H6Ξ3bLJ--…60\OG"e(h#|P@Csc4xۥ,AiGfpA!p9΢Gd(#7SETh'oqt\'|B:ȐQ +ӇRFJR3`a _Jք.ۓ?;voaoi\ (%gsw ')S+3a2"8ajznD(lDZop< v/Fu!ZIסGRlr!#2ysƞSÎs Y~l-]v7=gy"CQZH5PqS5i54Li_J)?2,lFmLK˳ԳE y1Ojk1!9M6R–ϭRV,BiyhmL4w\܌GOpc~ ( y|ٖbdũn,@ BtL=, STv +M!0 +#bǏOAl>=l>_\HHO) Q;9z%†8>5F?JzCPf"ƼqJ$(Z< e*7dBdIoZ;fTEW`ougx?<_l3J.#9Kvp&L9/.]>vL- +2( %j6T,y85z hg#=0+yMs.,H繕{!t +/ozeftT2={,@"DL -Z&f$GP2=[n0f=9.+@5,V:ZE J[ nL6q{o\[< T#OŅijxa5+L4[ؐ?;Kh^@X%]LYV:"B'9M#L\l6൱?y]OWֈ>)`g!R;=C~I +@}Wer*g6QmHR(ׁv$i8i+Yv:B/V9ݳd!q<Е3OVIt{3hˆ/ftDrZ(\&* TW]:Uhp +ސF[B$if YY1P-v;o*;;7"J[ +*$^9$ĵ͕";Pn̤ B.v>(_BEI\5[DR +endstream +endobj +961 0 obj +<< +/R7 305 0 R +>> +endobj +962 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +963 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 330.994 218.089 334.931 226.196 ] +/Border [ 0 0 0 ] +/Dest [ 161 0 R /XYZ 75.52 69.97 null ] +/Subtype /Link +>> +endobj +964 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 295.683 164.049 299.713 172.156 ] +/Border [ 0 0 0 ] +/Dest [ 161 0 R /XYZ 75.52 58.02 null ] +/Subtype /Link +>> +endobj +965 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 56.064 243.297 66.198 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <34e77a2319c9d061fc09f40317496c46b66153717bdd73bbd4f84d48032f4152426f0e9d40b948c31eb3607b4406749589a3137f4fe128ead32c3ec9493ee7704d4f9d09e367ed4d7971> +>> +/Subtype /Link +>> +endobj +966 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 44.109 167.267 54.243 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <56ba13ea5448f4600f76f512b5d9be5d4c8944eb56eb17c1bcd8e6538d21b53368805093b2ca467d5fe6d35fa575a968deda583dfa1d72921543b6b5fe4cd76a12a257c7349d31> +>> +/Subtype /Link +>> +endobj +967 0 obj +<< +/Filter /FlateDecode +/Length 3347 +>> +stream +4p3E + )Il_@pl<+wר+$Yrƀ1,Xœ w$WNյlMbKEGSZgqs|A4,CK\1*hC0!mnF׶s )|B\b[ &P] Sǘ#Puj$az6S2M@55H(MU}:lJ΢?z1ꬣDd HoWw]7.HQ[㲞>1*O 'mC⟄@ $⟍sm!JXD2H5lmBMC!ԱiOz"&.l?I&p ُ$se/+ |7N֣ QGaEd?ဃޮG*惽kϿv0aY%bۢ:U-˄},G^V/r#>&kk6.S Ԋ5k44Y3qus{ %Sl9t@'Oj1:"m iuSMj?8ssuU::Č3rKx6eZ<)JL35rK}0!.+U`nĠݕ)AhSFH~ XX"pz%2/|Cϔn,?EaQ~=|9~j8&FZ[ TŸՐ[6U_@P*pHoK[u&N-bp/* "R>MXR``(o,W<*̮КV*@Ad(Dm>t!?gmYuq8œZQ}4-ԔNTM2^[_v +K pu+Qvr8P|2CO/𭅸[:.Q.- HjyIR>4$qn\Ip:e||&(bbņ(MÐ >?}~urf$M` * 񇺚b_);-X?|\!Yq[1L2b} h+:KOG(v/9nLxSBs$%bqXIf"S-BI4W90/H>v8:wc3 }9KQu#QM(0]l=GvjҞRj@ޡf_q l\f)|RwJJ;n CoXV> ÚsBv {)^\X@U"~Lchم,~[VITkNA.{o + O@FVk̻l78 W{g:1MoR}Lλʊ7q\7t;2'4qLKSI(T~t A:S˻i|5^6ȋۏUź|ۥ,í$ګ:)_olJ}#=*l56+BjA3WG[_U۟vC~ AnZV?P*Ɍ:NSތXStr1൧ii۷u!/j/v?EvGnBE \}t\N PsB9zyCuF Dg\v" Y#jb}_aQbF$kȯ -q9ýawM}6|l|c#Vx[.Ѵ\ln˸-0j;rJiEu+Rrm;| +Ў9d*FWz㵃3c#$@]N:|n,P: W.Lꄨz={~㳅 +ѠީcB~/c\pGfV˦wa!~ha}eLέ* +1z%0Hի*[ӂMf63M!b6+@n}BC0f@JObJ'3DЊBb&h -6ks}rIIa--^vJu$ypm!u3#ٻ ;V|"ig6X(6 '3BG˄:oFg|):v\&ettYż 2"4$#(J!3(H:AC@uHO0ĮLt C&K>~`diHO -*p6 w?Nʨg.lX@: `\:5bL_\6蜹 q=W&%W) +›?!~X FΖ +h+6Da9Nlyc, +endstream +endobj +968 0 obj +<< +/R7 305 0 R +>> +endobj +969 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +970 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 201.305 280.593 205.075 288.7 ] +/Border [ 0 0 0 ] +/Dest [ 162 0 R /XYZ 75.52 66.34 null ] +/Subtype /Link +>> +endobj +971 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 52.426 236.517 62.56 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <90a588330697edc2e48ef3565d2e2eeb967b5875acaefdd77d4ac937ab5c6453000ff6c827d8eac18376db571d4d6257baf561d000741f852b4e65099d191a805d955a3ed4d1641eaedf> +>> +/Subtype /Link +>> +endobj +972 0 obj +<< +/Filter /FlateDecode +/Length 2971 +>> +stream +-nZPI\)bF.l-HN76DPYgƆ3{0A#720 + h̋*Nhx$m;&'ux1gG"8bGaExl/ _lIҬ>RUy> + ZnW#Lt>L{3þ=è ߰z,HhW|,,J*qtF=\2K@oO ?Mtu bX.FE&/wA'HC>@I& D$P򡸠@% +EU yeJrNXm~jisr*tNrH:tAIcy;k6k>e/ƛ4$5b\Hڄʵg|>OitX*nc¶y99re&%~g3 +<봍rѽ3\xנbܟ[p&o|#*kX4ʿN Bhyˁ}=TV}*.0d-,L=I}qTE;*#'P_SJM! q2Joţ+=[a}{֌g]; +h3ȗc[@R_ T;xd2 C Rm :+C!ZEj |dzNt:T{hV`Ѱ%0:0T'Ֆ7[ʎ^&hZȀsԪAdIŔ1x ^+<ր 7V5VJrĜ +]zWksUc΢ Jɖ`YElv5f{`u`WMPi].{2)nG\2*q!hӲ97Ibu'ԏ卪}Z2 hg50b! K"w1)jx3RAbntULT030b9am8>:\煲aS%̗m +F܇A8 +٠˥ӓhj<\l+oԗz6J>(D#>S`Ku1z]3Sjj [W8@ (i }8WRÕ'*7n樂V%"%f +dsvqb8eh3Ԫr5Q3Ҵk9L-z=j_5bypVO7P.~"d\H*Ƅ$YfLyB08o +)C넹 5j #%"o JWCqku&,rn˪ eé CEyiw7${TàpsȷH=sAkZbhЭ$wL0k+Ѽuwy[{XeJC' ƤR2?XdV +Tbb ױ60;_kqoA&2#0sa_Onb"ߓ3ZUP7ɷ?^$cAs=@%|&2S݊7FFۜ\5S93bKk"_/7.U4Z5nX|b&dI9[;-WY=o4T\ٖO|YnCH`>r tJQj?R A% (SBJAMNޱ\sD*$FQ̇QS.kv +af{*%ܐ۽' B@qvni7N`)`щ侯Eq@6Q!SJjQVޚ&?3OpW/w% e+ ItsDgΜe8M>#|>9I7S"r+\wtEy9<81t9kOkA_ፑ/p U +x7zOOn&cB30͠ŐgNt}@{HLw3{j(ϦƱy?hdo7{"D8Ig@ѥ䬻q`IuW16nL"9+PMQF%ꮬ]Krs= +endstream +endobj +973 0 obj +<< +/R7 305 0 R +>> +endobj +974 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +975 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 174.594 447.335 178.632 455.442 ] +/Border [ 0 0 0 ] +/Dest [ 163 0 R /XYZ 75.52 68.91 null ] +/Subtype /Link +>> +endobj +976 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 347.624 79.53 351.209 87.637 ] +/Border [ 0 0 0 ] +/Dest [ 163 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +977 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 55 235.219 65.134 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <746a0e26051169814f55031fcaed970216ba787d564570760e743965e26df92aed54c95e401c47f9e7333f5bd848c76ef94d62bb68b78c7e2e8e41709ce8672159921c10d20c84> +>> +/Subtype /Link +>> +endobj +978 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 250.335 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +979 0 obj +<< +/Filter /FlateDecode +/Length 3062 +>> +stream +/CeY_e"Iu2bfh W'Nݧ%<'jz\'wQ[h+GF(K*k;XRqJLli B72E`$⎅N@,Aۈ֊&|ǰ @H0dWws#X OFY|noQ,q%Ԧ(,;E` :V@d`bңۨ3{Ro +!;aҩ /D.J5;h޾R:: ߁pԳiv~I)€zÁ.%BbOV&lӖ| mkɩGXq9?)ZBOm~Hpz'm}v#ɱ}~"kO桄ZP4stVĦE# BIJs[ ivLt]Tzxi +8 ?O,{,##a9aƢ't;Z (8/?{&zPRKo4+lM:,h\W4O aC׳0x H?|SvY+:ȷ괈 +yndtI~]e:;)=tZ?k]f:_m^;o3PP˦JL~Wxkf̓@dsgt:$҄U@u w}y4J}US49.1/-2gm ō*^%CjKmEfֵMTG܈bR@`8Zr"ϥף5&Q VܙF8Zn~l^'ܳ_ {0frF9"&PĆ9~}bA)_wiڰ#H^.΄~oP6ձ6:B\„c94xKnYlD6VEἩ2)>׀׶vSXNK&+@LGa5:i-ӷO|Dg {$Y^[6-uDR-)a[+F{ѧ8Zl)2ċ +ϱ984GIc9~/r]d\9j^q;`FS7erDtNaτ0la@Ayt*ȰբQuU J]>VUfH=B!7KUT޴g9x~$^Q+ ǹַ=w?mbYgpCtҠ:3j 7/c冉ZVՐ:D,ЇÖc<<'\{Gcj/LT;2u(/O%ۼsbd-Xo<۷v%H:<_~ӗN~1MqEeO}oEɋq|JV/.E8ՈqZ2$eIvזN +>{i=_3y]{)rvbDWuo98(D?:"LE%oZ}¯QC,$os1$qf&:(ˋ3e˚Q"x~m؏SY#x1 ArO %dMʳ8JEVioWe7q+T> +endobj +981 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +982 0 obj +<< +/Filter /FlateDecode +/Length 3145 +>> +stream +`ݿ X1C\w5Dmu;̵0 qUW>u`Ѡu- efӊu977j I脹b5QJ;A;7j{jshQh2–|.A| |4EVQ4+BȁfաZyi^}L9 7].6DŽpV%8qMD7<}=#OY )Bp83`"xyL=zHwfp"pFB π1K[$}ht oqe6:4Vu&˼ +H(OɬrwbIgjP^­ +Ji5>?%ZV "at2.w4׉[mom7Q{OAm2\Uj:] = +|.1j3 {rPq'C:$0P׉FskXg7yet|ǝp?#Y:~X"brnF)otWC;퓓y(zMH@3MlJ)j29v bNF5AǗ!#e^F>l-hdPNa?=zTyNks <5crhyV nz:1esHj7~]_FXhaD Mu%=1 +/m;=>\udFX,*Y +UF dSr2~v 7(n>R;$W(su!N|Mfr s'N#ܯs1BCs|Pbx^5_YAЁ}lbg!h΢(Rn8F`Ctؿ {ͫ@MKGĉ"1[t@Dd]}ܾb +93h9H,+"#lqxvmO(pbM7w_*j*oVfN-ߖ&d1U2=&'N]8*)0bVʡ&/AS1vO#6e?žZ%`u +IAZR%7vYʊu02Q,Fah[o#W>' rjB91N~}&78z/YCoh dsǨDBBP D: U-asL3+wZ!DZ 8'tQ$^FE˂0xߊ +WcܥCnfa_h'^f{MT͏f0t+sjrȍ4n\zQbBYSbcê A[J +gv'Ƨ f/P }*[Evskp)lקգͲi1&`ȹ0yf5KУK32aQo[M۱ ЬiHΉɁGe`-0UB48 eC|2"&e%X,@+1T;)}&{LP<_)e@Bs`6h뱱7콺y<8*AZ_t=[QE_ x=)DH{!/sDX>B/b=H!0,mi04k3ێj ù0_Ȃas'Ku%`6/wQͰn/jju#ns=붨m9cS0xTj$5)\*ѦrAI4ß +"T%z;?O8Oɖ. +ˀțp?޶JH6ɼRyH3LR 4LUލkM,l(eck.),M!en4> +/oŖAQ`SG9";7EtzIʈ0 :闕$p- ̤|I,}ktF͐=]I +hb4iE]w5 =ȍ<`N~<#6?@ Y k҂ťGHYw<9#!ZFxY>`p}\HOѢ4۬WzFatƃ\L*Pbl~k +Zy%H! ~Ut5y}^W&  +hry^Z Y0QAڤJto-qwE܋H{Ք545ټ'Q>=, fNɝ_up˴k#m:nKAuf1V`<ƞ=w +eP0^QSEw[p4k; kw꾂jxῄH,~2@@#, R$!mrn"~ >`a֝w!?G.I +F0Mj 0$Kw]2gj 4 k{Id)kSd3)1d$ě:T_dP&,لiiUqӤ +endstream +endobj +983 0 obj +<< +/R7 305 0 R +>> +endobj +984 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +985 0 obj +<< +/Filter /FlateDecode +/Length 1227 +>> +stream +[t kULs +E~,(=U֦ԚwWfYu7JKZ4Lo-,+Refu-f@愈(c&Y$vlAqݣʐ|߹]H'&˸cH|:}Xn04b'뤈h8 0̵)U瘧+y#GmxA\80m_/Y#)+}Hԭ M4)epan:W6f@O}|A);'o{L='ac]C 8)|Ƙd˚ܫA03˜  _H>L=UPpM:HaG@3џ#^/8|RĹ:eY"r%۶‡s xЎg`<-6smgr۝>7s=picZ{ߎ/ld3gp@Egxt^=SJŕ?dE#/ۓȫ: + 8T>ceF!lr o.B9l6b3(.Mwct하QYIy& +MY=f l'¹Oux97Q5O%6BD FAJ1و*P3ơi66иRzacK?I7[6j< 쬘wKRCzoό 6U3xEٱ"žgyV2M ("mq^{?LƻUJޢUtJ*q?=m/uS+iK ̞O2P1:uѧbk2562OX\#|][^+5p_Q"3uO}ͱVIܴ4BJ:Yگ$U Zxw>?wz9p>] "Tq ( ԇ`ԻRs--vuq(iWP\N0h>ᘟ[2?R\ ~5wB?Ԅl!:#rbx~_xm +endstream +endobj +986 0 obj +<< +/R7 305 0 R +>> +endobj +987 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +988 0 obj +<< +/Filter /FlateDecode +/Length 2725 +>> +stream +5Z.&@!b~ZtAr$෉3k2Y) 2^!}Clj7T.qqZ6Gw['?i~Bv)DA+Wo3EgErgj^ 40ul?T4"ROp)| XH&ޑ>W`j]+5R{fxBbԅLduZ?WFqEFH'c;mNL| k"Y0X=]Yt-r +VMdㄉ&)x?{HtׄDwX ujk31q:Y}-[bqNQqN`ױiN낥7}dLkkg74 9/C3hrt>dK*ޙ"B0 +{^05(Lte^CwOOK>d]GvPjت/>ly5V1{/"a2_9$WҎɜaT~QJBxMaSko ~N5M(tSR6Ҍ AG>qy)Qk`;78tRb?GDB|4S \'/Uv{+U>MZt^qΦF`r,^Kň^ѳࢁ6Jt5 e'8y`F;ωUnzINwSA; n_NS`hN\j@#軸zz~SDwN@xE*=稝z#n0gf)5Imw6XHtS m`:BiQTʄ$ɜoEURnTz_ڛaмyh7Tۢg82@*%?֙>-;=Gc?o{q#&#)lOw.Uk&L ˬFAyZݡ~hg!I4RWHcKL B$T7^F㻠I$cث{@Q^amuf RnzJ +UEչ@m 1{n>l9dlȇڸֵ.8vBw nA:kdo}@ +§c䮃Rz!u*VW@k d ,P1pcʵ} MDY#MW.k>Vݸ"HƽE3.Ey簍5[teP==d)(a$1)N d5ݸH{X^Iհ4ZpEƩ 8xڕ \U\زHv&'(BGcq)sx)dYL޸QDa4 +iDmq ͊=F|boQ؄]3^xKpWOK8Έd/pBiGEX3'pt.)Y\U&G~^Gyx ꘋ7o8Y㍿1BaG=_կPV2st7Jj0WusgԤX3%G($3+!5ߠ"`E+H Us)*@`'.XX2/6ˠb)J>KT$7{̡L0k'!-" lz8כdM&&)v{;q61(IU-`, pwA#B뮉T]ȴx~''J%dMm4]qL N⧇2L-тyO_/q7tAC7p=[q|1 տS;tg#DQYĊ/n侳$?DŽ"Oc:ٲL4#grc5T |; , SB(#5@0 Cg_<&| {P^`H(S҃IJ֋tdhsEJr^acN{Ar#2\8{jw_)E&uh oWi9HfL.iJ/MҞ9E0>$5ӒSV2΄r،K,-NZLq>WM}@ؗ[ w⓰hn ӊiB`{0g6G`07op`fu岽Fk"z`sVq"2`ћAXԕ<OEfDXRc\Jב;]o 1Dkz2РeĻ'4xWoО &UW0 9i&&/݀IPfM 6b಺},HM +endstream +endobj +989 0 obj +<< +/R7 305 0 R +>> +endobj +990 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +991 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 271.574 360.473 275.827 368.58 ] +/Border [ 0 0 0 ] +/Dest [ 167 0 R /XYZ 75.52 65.24 null ] +/Subtype /Link +>> +endobj +992 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 51.331 161.814 61.465 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +993 0 obj +<< +/Filter /FlateDecode +/Length 2991 +>> +stream +<+,τ} Qo:3^.?h-2Ȁ<Q$`|c|ûpcʕ\>&f.T֑E%O*W^k!ZhQ/ʄTE7`K bB uD\w,7\6WB#Ӆd7W[96: +PޚflԠUÝI( DW]Vgܨ5բL@Ӻ]緀'|>?plc>%m"վDžZ﹨V围I{(RbdNrH8h `K +uϺ;1bDO8X86Gl-joeD;m\tS:eִЯKF^aU5ZvGpp.oJ<V|Tρlt5պ\}:^ $yǖuOJH23b&G[ _!hZ@/HShOֱܖKPϯc3\WjFyFb[|?F  (_!֌(P9uO jL^4plb=-ޘ ɛ(a<92ے\a,eњV{Y=)0[N n;w2=[9M]\5%uǥ+ϼbd_q:U(nvЙCXV4Z( Po +zE`dSSa8qEUPm;02|Z2e +(Jd+ xA`.Lإ 92gDF`OK,E/o>mAK3erD8)򿰒`9"AGd%%p*X!J2g}&Yo=o椆~JJ֤7׽?x~q[2u0"Mog!bɐje)JhdZٸ77C^*ŏT>]"!!w{39h%d?d7T +r!n-~BKO56=bm2{9K%R3QyQcqz;ki`28tbeD976ȜTtMk>߬ kqytPIԚF-c-D.=SGwi xQ{kқO6\>Am#|)~]؅vttR܍ 8n] SjuR>2 kFm<ea| AZS7NA]  )Po]v +'M(8hg6^H#,1>j}Nyrq:qytA꘹I$s8##ZF%I2_0'{,eװ*jFT7UF`[vRዟ|p:A2BxK@x0XiT0|Q{=Q 20Ƣ@ؐl`ͽ; +Qh|u9oo;]Hte{־L Džk `DE<&8׾d̋3#ءal{[|t;MR0x&20u(U`gϾ=9kLy.1:ŁWq25=DqsBpZqpuX }fO|"wꯊ:#ADyKW4\pTQ]$f0*d6:QmgISsX@M9AG]:e\-k@%xi+Js0k-7r)3.lQ /"Ką-.,Y=xsLU-20کРi/?5٧C$n?䯼5EX<"aĚVG#JH̉S>^Ӽ0[]jMv{y OLaj3p8N- +0=DK_ ʭ+5):Y n<A~T!SZY `v8dQ> +endstream +endobj +994 0 obj +<< +/R7 305 0 R +>> +endobj +995 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +996 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 353.643 298.871 357.681 306.978 ] +/Border [ 0 0 0 ] +/Dest [ 168 0 R /XYZ 75.52 57.8 null ] +/Subtype /Link +>> +endobj +997 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.885 169.883 54.019 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +998 0 obj +<< +/Filter /FlateDecode +/Length 2441 +>> +stream + +XrGjg.|'[G)j݃@OTY?PkĪwC/mc5 +ljG%>fMYm)h팱 _plKS婒mso~fS !n`SbеjŨqn?ǂF۳N;K*ɒA*yH,~oCdZc^ّY.G Cyo4-@ 8]Ɩ1/3 CS&3@a{ݬ5Kj"i!tpB,Ϊw޺ɪQ"eq, +fuz 2%s +pXs:D߂sh[B$s8nP̬흮WfuްW"ZA\X s2_]5!4AVL6UK> N_@"AN P{12}Vs _r/.N(|'v +SфND(V4m/ڡVڏ R\SiA +0Dlg= cIWN">ሓ0i%9юl/XyKl=e[YT'e ,|;U5gc{dѐAY[LLoiA V~Ff41Г"{a`ǜĒ#jNy24) j/6 q% nYyvgi35,"@;m1,rZaC& KS9-YWby3L 2$43{?vM.; [b,|y5(\.OVnep-տG mDfYTwL>nxghPn6 tpQrjfM`^E*4,ҭ1I3х9'9}f⸰v)'sl+2d;4/fWHk#E3;k(YydYvN_1}؊Um'lϣ+<3.}KvB:5 ~Yv +},889/ږ ;g)co`J/)E Ql^^GuII3IK :݉bF.-2 lBV]xا]S#ELX_[0Y'N5ZN|4.նG&uz5.'#[C÷ +#i IhY40XVg=Uèᥴ<1TP/ё63sIwH49,Ip'{dJwlXKciTkV?et>>g@[KZ*6%)rd=hqboQ dTy?:)^]9*u0tYFFqCҍEwD_ +MaJA-yIxn#~Nm*+ZC~($1*'0._fƁq̻38[heW+Гln 8ѤH~\U<& }${}TRx/i^/K >vsc J޸ס\VVvzW,/?Sޓ n8HY?@EU)0b|jy7=b@ʨt'\ӊ"^DAK ` pBM5s2 +0P}Ywzd?_xpOs߯4L%ToBmZ%Ϸ8K_i\^Ce +zݧ] R%PDdy&s^;SF/β*U0)/JV*笳0aN\NўDѝ4Qxz쁑8! g+:\f;JNH y],$vƾ,Ed%V!])`"9i sehU|$Åc,sy!)Սw:9iv\*ybA!GOkJHEXZ :O~.E/a`Z)J_fR{*KÇsPxW(T1F0}ۼ4eį;F:KzpV0{+:}19q{] d.,2VՂPƗ +,͟DD[G:7EbA +endstream +endobj +999 0 obj +<< +/R7 305 0 R +>> +endobj +1000 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1001 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 245.542 244.831 252.987 252.938 ] +/Border [ 0 0 0 ] +/Dest [ 169 0 R /XYZ 75.52 63.44 null ] +/Subtype /Link +>> +endobj +1002 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 49.531 193.491 59.665 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <480c62e26db9f026b4a4a603e6a7a8a384fc8934f1a411617e9786ab0fb610a68825328230f842be76a1d48b> +>> +/Subtype /Link +>> +endobj +1003 0 obj +<< +/Filter /FlateDecode +/Length 3046 +>> +stream +Ր0͂C+&dvGk i4Vi*E7hdc8,%-  +G#5+Y> W2O,M9ѶJ5s] #d283N 7O'S…ԭ6[j4uO)d?-V|WȪ#E'*,jK:|,}<ՏD"#bg^Z$rQQ':pd/z^+92o;d'/rb=0̇]={C 7H_tJaZevV9Px&$i%,oͅ]ުoP>&[Vyʓh~0}Ӥ[}R5W s"CñrU5a7M8u>Db؆g苂,(P;""a=.{Yﺄk&tu \ 'goVW 8DѾMa9fKB@A+11mM|F5ZD4Āem{5!73*]"iS^57'b_9Xv4j jRv>|dAȉ+67O]E4TjTbW}zvȦ*#H>T<Ԟ@:uY;ui?l)O"KQ]0@IJ$1*lx32rc_ +g`O"&JeȻ l0RQKt)W~E +ʨ +~A?0?+%Qqb q,r2AlULOsFn.umkPvjkÖ<`[.wk{=Ǹs&:\!ЕW:,Pr:OmO{) p1RZ!gtb%1y% L2h]0?!lv_/W 0φ)eנΆ\ّn+u}qS$="5Ji~f};d2v'#TPΎްQF x䌡\沧w08S{w9!d]:dc\J/zH#"ϛ??\qH9AVkK$M/]әzg=˜Esc.?þA\7x=?@gxI6`%;nVҪ:Mg-;[]_a$ൢatS[m^ē?l!vL,]TT^!bH!䬡e}^قbT;0uʲC{K/- w㕛^W|in2=W1H>xmBzvᤳ:??>i 7̏W. m9hLwi8)w5po sVKBaL\dUo(',"{e +*MM sq|{Dm+Aѐ-f%Gl+^wXzXN'̡*Rɻo]xeyR1G+K~1n>}T5@(Rq f[4×6)|J N%i]8M4 SH;![~{ϘPv= aIhKſ{+)nB;c҂p,c)М(n +, >YGU +%U]&xDKo'P +(* .cDѼޝ5m/yf-k [<~tmk ` }llGnåAp)fZ{pܥRPExAT +endstream +endobj +1004 0 obj +<< +/R7 305 0 R +>> +endobj +1005 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1006 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 202.758 168.514 208.889 176.621 ] +/Border [ 0 0 0 ] +/Dest [ 170 0 R /XYZ 75.52 59.99 null ] +/Subtype /Link +>> +endobj +1007 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 46.083 160.302 56.217 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <93f3984a56ee076ccad77eef8f8959ed365fda1675b732e6cb9ed47f049976a86ba4352a6ca11171665faa82af4bd6051c98f43dc836504338f5703521404e5a9738017717c9> +>> +/Subtype /Link +>> +endobj +1008 0 obj +<< +/Filter /FlateDecode +/Length 2606 +>> +stream +9SJ ^Ou AW\|zw!64ww]"'Xqy[k&Wm7gIw5®i$y8|}:X@t#܌`}Yju$Bm&GTCrgiR *{Ll/|뛿yvvdl(e"nEh'IYgvCx4QA XFos)"t7F3Ibڦh[cJ͓tQ%vqi|)o[8q?^oboF [?-#ZvPhΒ |`-c--ՈlU \}Kڏ'(-c&>F->ݼ3xoHX¸>co/@wpCSLjؿ'T F1 +c{ ;NI|g1)|q{<"] }&_fQT6)j?x7-Sk='3Ky%{/d_gyzKjLԬ]F + +"#] jf-#F|CA KNZ3Y6ބ[)NM}ˡ]RsxL|t-9{H.1?//Ww@xM;au0è n5B!a}lT]Iz&>QWj MpP3&{; 6yejRipqSӨ_{=q6SW?샯)'[Ұ"=|?Ųԙ@?.ߓPy H +Grp ụM*NMLo/z=ۙxA2OyUٛv[Aޢ9MPgH랆;%S@t0A w]xE^eWPAM6ʖ#ey+x0/f+Xy q׸h],ʨu [7㝝c[o-,']ʀh0^&\ OHg VlQ|/tūF0Zߏ;]T@K@.[bYAbm] +څa+[bVR@ nYV6)b B9JgUvye8uLje3##7}>Xz?W2 +NHT؎eŷ{/E&YG/TNN(1}|QM+8wy7{ʧw0/b}W r{wF=+j:@wp΂Jj٥DHw qˊwj@qh?gUin;9\hW[`E "6mmH_*a]T8=P q7Tpt^Rs&~;k󦣾C]`ayʄ X0m SΖ[;L|=4:_0 o +endstream +endobj +1009 0 obj +<< +/R7 305 0 R +>> +endobj +1010 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1011 0 obj +<< +/Filter /FlateDecode +/Length 1762 +>> +stream +Cbz6[۴7tx%?3hV ο~?(F]lDn]Fv#@I $7[C#逎 6d PI)7G˚_zG +X$h7>YkϤŢYO7^ OTc47uv_m<;C%:))acqVhQt^`OH 7,jhU8urL;ߐNT0U)'ҕRK?*՛w>c1t񫎩8R9=p_C2˜=S*3,t^U>)_ķFM:)~b)!Neo~Ĕ~z/E"{d)WR$5@} M?!mi8 8q|N w$fW^!He`Y\F<6A۲J{ǂ3q{v3!#g7D$E xwâ.nl84sLpsblB()h1%Pv>:ϛk@m \{QKH镈B!XDi?BS1 3FMsu|iu3QS +@ n1IBۄ3r O츹 +~yQHLqɕ< AzZ$~\bjY +t* RhB,>*ugyaRrm1i`Q'5<7,҇}֌T욱D27ZѵуL؈N"اVa @oTti3~Nq< ;!rUG_]!$.0 .|g?\vF `x0{-gyJ[|Il#/F=?6ޤx],Bӹ'AFJy0rZHOlM0ç?}6w yQ^=Ңx;/_Rs7ɔ[ I͖Az3m(pзum*5ppGQ;(b/&L R _H+Ʉe>G=p5f&vabCD։q yޭ16xu9rQCU jujKA4G/gSpTdPLt;oPǺۙ7(#<h#+@6  ERQk +_Oqdk:~B#E9:7eÿ4S1cO! +سT`)7 `27‹vVB nrj:{:л񌀙 G4р.Xo$7Z6N4Xƿ"u˜5X:3vC!t>KybJ%̣>^Wx¶3c`@wR8z {7z$xr VcvI`DRh.S$'h4=68e\G-*B;\{g5 +endstream +endobj +1012 0 obj +<< +/R7 305 0 R +>> +endobj +1013 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1014 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 165.638 530.198 172.689 538.305 ] +/Border [ 0 0 0 ] +/Dest [ 172 0 R /XYZ 75.52 99.37 null ] +/Subtype /Link +>> +endobj +1015 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 85.46 170.345 95.594 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <5c738d60ff8a9f07679e3ef97d9f4cde09c403058228712fd8460d7096aeb2656dd6b30e7faaab6d3f6c5f7ce73dc33b0a5221c97b6fb9227cad105e9a> +>> +/Subtype /Link +>> +endobj +1016 0 obj +<< +/Filter /FlateDecode +/Length 2730 +>> +stream +҂7,C`2*aٚ8ʚ]%1r- ': q3vtwmH΂MG2/ ha+ 4ȎUު_q|L7<]Owhh Ѓ!4DOE̘^ QtL!3=?`75[|@2 ?(q@ǥP)XR ԙpDr<_q:ꀕu :&ʯ~S|3oO<ɺX+piwm៣,_9U2hNN`֔{9ޞD0]}2":;#/F CD1>@K:k NMtZzw ɮIg533mLB?&D*ЦCJDCg͠M/kP<_hP*Ivd &ɮǡx>e"Y=zbiSBoa.̻'a6.J [8f|'@25Oo[uêxo]chVTDzsƨ +|n9;W}D)v0ڔAy0;} sy:jWst ++핚t\ O%:*{p@ĕPg;L d@A`eBҔT9_2=ԙfpDsk!y*KGp['/NEɁԱv+66 <[-\E ib6Sht#%PI7mj"ҥ`Iلr &>$G/mQmx9f86NVY]y.gCJhq/'euySs~dQx2A^}4ȫp䩵ם8 )&T)tSq|CAƕaanLŕ}s6|EI;M9(`N:q:/X [Ci}QTPRZj 1@a}l(+p&Qe>&Jw1 |0?_ѯ cNX޷ m"G6ze@T5CC=}r5y99yWm1m7l2er~>m=@ wsxBRf Xg4l>""VKsÈ "q؞D`vЈrצ̞Pdbf%>\ըi`B*VBgïf> r]V?P 2#S;M>DG;RM*LwyHZl!o=ͭNvяL;_{G< ÍU'!#<1 ]DAק?& JiCNe98)_Β]BPa0nsD,iB{f욺buk +endstream +endobj +1017 0 obj +<< +/R7 305 0 R +>> +endobj +1018 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1019 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 128.994 530.198 135.997 538.305 ] +/Border [ 0 0 0 ] +/Dest [ 173 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +1020 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 187.176 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <95b0669761286ba28fe315e288ce5e50b256998412a7c66f31b5c222a5b0fca487d9e1680af8b8d3cfc464cd24c2dac081f1480ee67448b08001d3b7> +>> +/Subtype /Link +>> +endobj +1021 0 obj +<< +/Filter /FlateDecode +/Length 2489 +>> +stream +~"ӉZ ]QzpUv}m6طK]RG)۞k %ȃiFA.H: ^D}8#ږtb$Zt1(Z§9oÀ~gcڟC8CDIj h[1[qee$qN""I@Ve ~\Y>!2)`j@*_~ ]&w$\P ̋ +2Kh}GR>ŭ#J`Zc:կh<6އt&l-WKKUȝ:4Vnwk+$}cvr|ׂWk1x"wBsh/ivb{߻:M>妊CbyZm9)_X$\{/DEoPʖƥN ,MW%7#zE#NÑW-A,ulUQ7)M3Ԣ sbw̴: +0JëX-OKwb=pXYU;m6{f9u7MLKͣA(5*ND~E@ :`*;ii?mw_`KB~2$Қp N/Ԗ}#-2T{ЏVgR +((nD.sY`}j(9Bݏ IiI!h>A1Ɋn;p4f%ֈk0>FѦ(,.[8ɫD Qx=ϻۥWAt~R&Vlt}/P(9'+C\BQ rvj&R>j$u{C32QȿzwnBGgn,{+y_AACY6r HmoH񷧱?G|;uOk^ Do$`Ycݬ MSƆ6an `?s^*ms+0%~|?7}Bs0nIy13^GS>rAP7 j-|OK#4~ :C~8= +E˿$'%;-m8h=.A9d }-:^Dq.V3K?/Q$`KԎD<1י$"b&D=tYTPjdNwΠIҩDHOn@~E1E> { =`BM L4"ZBi . qXG[}Y`3. Xuo9vE`VgGY&x:…J# KӪXU0QD"11nt >4$љgbd;q/rF;lnHN0-.e`Bk|WTh6۟\(j- #aOn +YD'6&HJ7*> +endobj +1023 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1024 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 156.142 253.511 163.239 261.618 ] +/Border [ 0 0 0 ] +/Dest [ 174 0 R /XYZ 75.52 65.8 null ] +/Subtype /Link +>> +endobj +1025 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 51.892 140.799 62.026 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1026 0 obj +<< +/Filter /FlateDecode +/Length 3128 +>> +stream +6{Iꕫg a.;trp\#ӏ8p9$?9l!xdw[gm?84k?0 '3|s擈y]fK;Ž5CU3&%-fQk:C5 Mҳ"-(s"^tP&[g΃ 3RrtKEd]{VZ v6]Ej* _;5i.Pք^ NeV ˿m3\4;ĢH7a6V(SPR*!> '/De~%j\C6lNWAppt3}ĄԎ[Ж%jE|#b̑)k"BJn+V(?4P~䭲ath6[+fG0'yɫQ^bz[V9Bଡ଼ ^d#*S)9JwPVˁ#,-]NwVyK^}_G3 u +\:N<]l-HL9$ UU"<;șW_39i$c 56Bl Y',]}kO$j>|-P~i%jNt^L t>e0|2(_GGݑev}n "8@:_*z\xsƟX'ahCهh[#.Û?(\wW[~MGx |}N}. m^7D6lEf>]r<{ XI}G^3Pq*Vcyzِ{Hh͑-g }nĭMmT:QlGtHX*!M,)"$ ԫ[!ۃ0-Ar':,F/'f^s|lu:. G]Mʓl5B*}Ԡܒ7rگjQ(/gk|EA#2=i qU(%C6^|nHۜ +flaM(gW\;p!$ i]&8b ^L4=eowK?|Ëzz>;wQޑ1-g_OIfz(Z̘rPT2Ki]z(DV@?g Q䵆D4Kg/tfu[Z0} M̄œ +OuS;aytu{$* +{sLH6BQ3``R7fb{o3vm%A0meL9\8%,]ӞK3ݒ rI:h]VWzjςq1bNO2S'-: +|×Mh <3* ,Ka~}_ZC2`N83@I+ EKH/ \)<c$]#`vڝPk(dfO95R8Pŵ}D(2k_LHz>-= AMz$hg4@mF ]"XQ$=icqH6[(pŘ<\} :U]F{WVTntEYasce=S݆p;HL|˜~LJC32y!7t0>~FRFlc4J8G^p.ˀzH5 +aWCk%/GR<\XMb|vc +׃PuZkX|ЦE{2z,h<}(8%XCtj >f,bhΤYߘBN}!XЧjRk8$=,Ҏh֫ϥ7o>`Qʭik. L57Q IYCP #k{_/t->w1)~z"$ +>lW9m] *?z"L zûнeɋ 0IVj{ZQsC=a4a0m +OE\Cp)A L?am[?Ţ%mF=^}`d %؃|110i\;a xr3 FPzUz|_XOdɌ2|SeI&C_ɇHR +aR%o 0#хZ3hR *ԟwtt_o̹mRr8,9?o5~8f8mAy|ţ€*u?.CJޙ.,_g!cAlkTHRhG}¦5H}kV_KTy)m]gQB[AA@=\Y(:(>>6.~'WF~1%8,2BqrK&Ŝbv K|BRR!@4qknmնET., bΕ2W/Bi{B%ԧw* +endstream +endobj +1027 0 obj +<< +/R7 305 0 R +>> +endobj +1028 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1029 0 obj +<< +/Filter /FlateDecode +/Length 1768 +>> +stream +.t޳+K9T4eA{!Ӂ*~Se+ PŸױ^ѬOQܒhF1h} 㸞K `ج $y%xXOX8 YLe_q>q ћ/FUipwUDdE2UWFF*  gp#Rj3>vfcowEZ9w 4‚Lŝ%}DiqeܗG"y&SΜQ|WِyGt;]o:p!u- +tA|Iy3ќ|sXUgU-,fǾES&CV\T\ 碑HD rJTLmq}JDq珠ZVn!%NEcWqsǐVA.\r`Cr/(Eӵ ؚ&Ap^dIp,pxQ#i %Miq3uDSTzoݕ^9?Z@yh{d$Zz鰲qm;F < %o_ih8+v>P0bG9½wiʻD>ɠt$bs5͋Bf,`==p)A" A=EPT&cZ(O\L+2 +l,;2(0ru8k5-5΅)Lfwq: kFz vNO{hez +tYJzNE =ݳk xZ.^mKUlR'<9mwxtݬ!>M)˓K Ҁ!*Չ]܃[ӥPۑ@+Wq?R_qnblvԲI|>MeE[}+%͒4Od9^1>פ,T7UE#f.g8"O-;}/Tb5~TFSR^DՖӱz sX 2)nؾHLSVrקOHbd 7A|էU5r̓[(3j};J(+'_~[ouqy^wxFdpEelP?͵C jG҂_]6R \m%!b8z+aߔdrl~= `^LUܕt^xɿ## +endstream +endobj +1030 0 obj +<< +/R7 305 0 R +>> +endobj +1031 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1032 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 162.27 187.807 169.105 195.914 ] +/Border [ 0 0 0 ] +/Dest [ 176 0 R /XYZ 75.52 79.29 null ] +/Subtype /Link +>> +endobj +1033 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 75.519 65.377 267.075 75.51 ] +/Border [ 0 0 0 ] +/Dest [ 159 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +1034 0 obj +<< +/Filter /FlateDecode +/Length 3165 +>> +stream +i'/~C؎%W=78=(lݤQjG>CM$+2 1ԐH2T82Z<3o'0"4j{ )\?,v2AoiX&s:F򀉀{ 8-&/k]8`Ij>LӂU697 Oν4Dcl WCce>}o XޛСi!~6v^ldaAE ~%r$_W,.ּ3uɕڡ}`Y$, Frz%Az@r9<e .y^Õ0_jgVe Q7 j[*|O-^k2<TX+y֓=-юI-}*OrRtVQ&0" 7_ :3zET}ǟ/F\dJp͐UM i_-VA|鎩\B\!$ޯ;ZMj+ %j.;̼wHc_ H_nلU& oؿxH^Y;$ sA[`#vĕa~e6Jma99O $L.~ANsJZEl k1=  +~ dޜטּN0J]6HOt][h-x|UR:lO-0 +;攚uT:>x|IF aѵ\gWeu%ucios!^Zu t +vucv^F8܃]DqG9!ܙA|HG2VN\^+IQ>r괮oH4 ),C&bOXϢfl14S#wq0CrPR%P5q\zsoS[pZ&d6wyS<3d_BڟԃK3mbM96LI~OVQw5숒 +TK>amu^}D(ܓG"x6hk>Uu +]ؔm- R +6UqG)ly +]M״?݄ˀ4?a[ Ԁx7hxx^6D9*-[}0CÚ sU`l#o [c*mT(t+` O kD[&#i6BD1wX6\:\TlV&xzJΨaFIoHƌ7*z 96<~5.F#Z=P4!vu5Yd~/^E)'Z_&|/2ϣYvɬ+w&y@`F,V6Tp#$LK1aBګ" +(`C +ԃ1M&w1D4 g>N'^vrp啷'ƔU 6f^ +T$h?ؚ#Ujpo꤂R^fEWcSvH+OuJGS0YAױ-k +Z ug]I+)ԄIfn2?y; +[2- pVE#a16)prq%9Ӧa NmԌwYRs^f%n)V?1Bh(ysi~3GۅMW٣TjDcVN,n:S'ٙ㐷 F<W`ß9:|uZ4 +d?w;|n8ǭ#c,vJdЬ j&\J*T;UY7Vk yO@U<4uE2F*'k]6!/ XhIEyGN!h%5׬RIqŚ.4:d4)qwn%a ΈÂ~ ; ;"8"/8P +={/utS/tNIqҨm!Lk$iIb}?Ǟ Է`.C>¶M$Op\z{"]iNhr{X0G4,xGu]uL*}Elo~Œp58" +OAedb e-vp'AQG!HS*Di3D{&j^F˸/n0:vtȢƤkCx'E*Tj-"z=CN(C84sC̠I&rymRLt9eNa|{{wq[ˌOFvUi)zٟO 6g24ZSg}TK$?.D!1qv>j،'H9 b\ +->*|OFs_$wS:_%p޹%\E(W$y~:Vl2.=B"kD ^#7GA@^)aXVyӹ8`6SZ)VYpd; [\ g!-ԦJT)t Hrƃ Y|pO;7&ַOYݪe˛D'EmN$GPs4yҩA65.gfva20k`V@RDdf 6&Gc:u67HSr_ؒR{{t"׸ɧj-D2qDY! `N29q11.\9٧YZw'ʍKнE}9$j;8̷@)gZn%1 */!5᧱"⯨0G Fnf#̦n ]c:): LNj%L_M 9#:zKed KNۙn +endstream +endobj +1035 0 obj +<< +/R7 305 0 R +>> +endobj +1036 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1037 0 obj +<< +/Filter /FlateDecode +/Length 2376 +>> +stream +&=3Jk Bߦ3ovLJ$F&:(@]uq4;+JW=h1F?6uֈћa9zcT xsXƎO#.yk.ud.=LrѮ""T_lVm`,kwmRXmك+X2mxbrF0"H4x݋a/X5hw]CCq5Ub`/dl=e8q3uMc³Y UEi.KțB=D)}7jGZDs)(РWjdΧ?wd,k6ѯ*k6qLkQ*؃yebLӹk_[1{lW:Grxb)?4jR)[]I")@v״E@\xh:.\dg;MHX!h谭TM|*Aגt r8ޑ&[g %  aO$v0#m?ծΩ]g(DJ=,oSI5"Rϔ4!<C[g&?O<:ֹ](R FM;+>-`FLVn _WZ:;))E3__̌*W^'@Xu,_\º0vvsiduqJYl3pV3LO3Ƴ9Fv&3ē»cX'v0GP(XmNnd5L*(w^ Gό Fǹ++ܹk!1K>cxTC2KF.ͽ[G2a8.֋У[1!34`_ѳ;ҭ/F zŒ[YA(anOP;EVdZYt) OϼpQچUj9wı1B@$#E)Ju+5lvn4aHPOlRG݇=, Ffrޮλ'9l{͠5Z$W +[1DgDlA=F?U35pqIٳ%,"ڇ"2gx~TwX$xY%h_o"ƾhS90Ś v* +iZIC m{y q̳KmO!AYb;("T*4zfno?I\"DC[$xy 1FR[V/:TҁInsw rG-'dkm%+{~S( q!C;bk`6AXa\Ug˜S#/ޗ%>AQ+"tُOW7bK+QI& LaV7QCG8f>#U+%м<:c|(;w|NF ,VftQB5b-GU]>j󭪳d_*0{̇זu3@B [IC +endstream +endobj +1038 0 obj +<< +/R7 305 0 R +>> +endobj +1039 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1040 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 78.363 457.891 85.466 465.998 ] +/Border [ 0 0 0 ] +/Dest [ 178 0 R /XYZ 75.52 69.52 null ] +/Subtype /Link +>> +endobj +1041 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 97.568 403.851 104.218 411.958 ] +/Border [ 0 0 0 ] +/Dest [ 178 0 R /XYZ 75.52 57.57 null ] +/Subtype /Link +>> +endobj +1042 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 55.614 169.883 65.747 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <37c51295ebfbc3baa74ddad3426d3ca43350c84ac5c04191dbe2cd4b2e6d1a47a5efb07f021e7f82697c08fe21de513cbf160a31d2> +>> +/Subtype /Link +>> +endobj +1043 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 123.079 43.658 173.547 53.792 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1044 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 192.735 43.658 235.133 53.792 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <4330ab9226f26f7404871fba31816abdf45a4cea5349f6bcf2436091b3c4be1412b8c312c23ff5778caa8d0064db6906da7b1a082ea0ccad5abb504032bdd68bbe4847c79c9375b64ee9523cfd69d858baeba320c1e55c10384ae293b805d333e71d0d08eee9e87320bc10> +>> +/Subtype /Link +>> +endobj +1045 0 obj +<< +/Filter /FlateDecode +/Length 3093 +>> +stream +ΎF:"h~,dcX]Բ{.fLRߟD $}rvLt^t}qx:riuO; g2oD3<H!X(Vz"ٹ(xZOAfùo="L=\dB9m!EfLܴsL(W +:l Zr2ui&{iů ~?8{trB7˭#G1+UTh/L%{n3S8(M 6:ߔ]j0ԏ Tr9 ++-:`U^zOC_iFE˵r%ij4N쩂 MfWVJ s NE~MUvl9 +AV1uѫnQEN4kQ靅zȺ&Z 0]wA4x> +H6_)>`Sd ~4+P6ۥ;%t}PѶK`>a8~]eU3_ڠ*Xl-)#h-eDn qKZDȭ>q ʱ=ާw7 %&6NI5ڐ=`BmI[qdۂFcv?U)"uHsiڼA1q=6m/uǦUM5iB\+A׮ҭ0vs(vX'C#FFm+pP̛s]d .FGrGsߧ2wӈ%y᷵ʕ$>OvCh0NG%'Ғpg7N[:ȝDat7O:`R&3L*etz4ex8p( iL-D"ꇻ%BTL ] ؇AK*Adx䈬|jY: +HXO^`j: pL: H6oaA] 'U㱖 +m3mscd( +OCf^qݪ0G>BI_GhG=57{fUctA +:*]n'`:,9 ŗ @bk#bUxܜ`0CU!} )xH}M0}_o(^~]YgJzTe|p) ZOe.=aσli  +^C9:+)+ n$ bG)}F%Qe[ i Ci}D/ +5W-=;QeȯD DPw}esZ,1TFLkkЕfŻ(Gh4.|[O1ZŽm7 +7(Ge2k| +)ye3rP_` Qg}pכ ՟J8Xy^`Ë>Kjc1F) =Cj'&԰AS/lފNŶWHՐNm| 7(`@JӣCm,xFuH0^53=@$j ƷB(zRH/nS!K׬D"yFs$$:L r,Ϧ# 79&&wasމwuGruo |qTR&Cf?EjhVٗF(<~NrbA^CB#-E}n2'G4? +@|[e;wK 2 ={x .t{Pӻor/}-f+tV!T Bk ?4]e,i,=kl1NUTfw +C7ŸA)Hmk'<-lsjdZdLZ[գY bIҺNIUP(O t\I{ϗ +>;_+gm4/sń+ ҥa_jg*vPQ\}2@ >&b~pca[50.5^d QO(SlRѨ-!!3*eaOHy1-5d *!?aq {^ v!$ZZRhhItV0, +A-M1mXI|pA> xu6+ BT!;0WEBIĦX.eBJ=M\Ϊ1?-=a>4,B>E2~C ʙj +w7w8Yn +ccghJ@g]X0}[5xtot *,םZ"5`A(=]NCm䣹%o8~t@N`#ɶ5{ oe8U|zv|862hƁd,bR%e(D>l$hN;to"S|["s)ѺMCD3{d!raIA^83^|nl&j?y TN?j)Cّ! +h^oܫRHuN#=8zO8KZ8/rQyi#ɯa嶃QB!WCD~T[kI3>f21`7T#Fa@0y(#Xco3< +D'<>jfM4S7jH:oW_Z*bz';3ntGٸJp[-lgx\X#K +endstream +endobj +1046 0 obj +<< +/R7 305 0 R +>> +endobj +1047 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1048 0 obj +<< +/Filter /FlateDecode +/Length 2679 +>> +stream +yz,ڎ{wq!z,1U&r賣5D՜gt\!%5tʒ!wFLgcΈ3 YBG~N[:wָϺӋ[i*m}}< ft'+|G`' 2 "UHeaIP֮3 0ʍrm7t.xb$Yd F00)yc@yXl|V{MUF8[V7!B3#5uREk ݠk=lf a0>ңeK\v xߖڢ| WڑU u r;i(pADJ@սn*?Dwǂz  9,:@j{ɍ/Ug1͡b1|&64.ܑe6M!#B6jCe`?!kp.d/zaw[Ma6M/8S&'09S zoDzB%UǠщΩ EاM%V0@eVEor8<>!ژȀ)cX|2t㫱sEO(%fTNV|f4>kѫsk!W]x4A'TZd=u4}ijis+j`T^y=5XӐuGꈹIXk'J|u&EHy~_+e:PA;yhh +)ˆ@L;vrJjtC>3IMr +^HF[Q]$gOn|)"hcz/i> R zQˉJ _f޿mj>{yg3Rlq$UκnAf% i٩pF L-~p?`Jف7 +_&DEj1 +endstream +endobj +1049 0 obj +<< +/R7 305 0 R +>> +endobj +1050 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1051 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 191.732 389.74 199.051 397.847 ] +/Border [ 0 0 0 ] +/Dest [ 180 0 R /XYZ 75.52 80.18 null ] +/Subtype /Link +>> +endobj +1052 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 86.28 306.808 93.384 314.915 ] +/Border [ 0 0 0 ] +/Dest [ 180 0 R /XYZ 75.52 68.22 null ] +/Subtype /Link +>> +endobj +1053 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 75.519 66.268 325.784 76.402 ] +/Border [ 0 0 0 ] +/Dest [ 104 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +1054 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 54.313 183.801 64.447 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1055 0 obj +<< +/Filter /FlateDecode +/Length 3503 +>> +stream +`qu62{Z+pH,-h":~$o2 ?7K8SwAϵ֛2$m#rJzx84A,I'2xzvQu&hU3JC+PxinQJ +ywυf"4)޷kꅓ pbi5<`OR:ߝTCp-eZl#Ó8adP:RC?,О_}ZPD4X*ԦiY1SXލ=5.H{Rq zm !y84zӲ'+6ڲRШch4O&`?/=@=ZW@4tzr3VKX }8,TQL.0<֌dનn}IH̸&emb?',m?`%![.^IU9pK586iKWX<Ix^eN>nd)HZsjǥE Keu~J }hr˦jw +T+!dgm{FIz9Zkg(Y 1Z$7OE=I4 ӀW #xa1p>Yy7SsۂRESEB[+o eAfRS`&K1S4?alQ GY% ,H`YV"0$pG +K~.unck;-.//mX"צ wCӝq8XԓC)"%y30Ļyײ ^'2T@7c#Ue3xATH0ŅvP -Juq1 "_E=K.-fJSs:2Z[ Fn7#GR-w׮rT#1 XYI@m M윴dm^Bʅ2S!1>~ GݏAϽ +..OH2jcnXr+e@G OQ| +վKݦDUNZH5~%,e9),5O(9j(tZK1k㐇;L˾1^(Et-*ber5= 5,Xa3HڀXݖzoLQ lQI>s1!®mYU!:sl;-U7_^>ŗeRӕ0ÞXy'/ 5gO?-;i~kȻu҉Iy{ S6 t8$(׫a.eE1')aόR%TsuOr|``I7ex/B ƗGzhΤ۴=+-<|[|r#yKilU1h&w⿼th6 |G#<3I?1hD5 G*j68IU)u DXǛB_Ҍ˷?U );w}YmED -tY"7r* KV_pU/q{+@O\y4ѳ_RϻGOP]!(CD5jmNF r$pq֞H>wuNdcvflܦ{8 n5Ӥ@d*Y!߲sH@R1xC ~2씗X[jj[GcHwdM +)ZSk13kyD<۳ИvDiZʜTj*#}z~ 1kqTz_԰=su&$|UCܳQ4rz8kHf`~OvC_ A$JɳwjãI|MEqu +?;USQHbx_5#ѱng9mHpإ5cp>H!gpz}0,pvǪSq#Hb޻63%2olHlO$ԂmaSL)#;>D#C4LEo#-G$vX{K `N{Zٶ^l+ ګui1h!K% Ղie^a _ZbmFSYrꡛ:G ƍ l@,x%\/fLDVc5I9Opd1Ȩ_jNf6KRv6?,W-lpv)I?2ٜ_ +E2Z#.U[Lt{nc,:04[/%*R8qv))CK7y*zp'ʶ čklmpb +-Iy0HA%n8 H4u`EBUE3eMnA҅/*GL I̴͕U4y Qھ`)Y@45"Ia07g|/ 7|A2V}nzN SXjn3.o6BrBrgN yL'kK(CDw(~ )xX u}B +endstream +endobj +1056 0 obj +<< +/R7 305 0 R +>> +endobj +1057 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1058 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 201.664 309.368 210.029 317.475 ] +/Border [ 0 0 0 ] +/Dest [ 181 0 R /XYZ 75.52 78.32 null ] +/Subtype /Link +>> +endobj +1059 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 75.519 64.412 258.757 74.546 ] +/Border [ 0 0 0 ] +/Dest [ 131 0 R /XYZ 54 576 null ] +/Subtype /Link +>> +endobj +1060 0 obj +<< +/Filter /FlateDecode +/Length 2927 +>> +stream +?Lv$R?Q3`L0Tߨ}9ڊGDBvE'Wl 0+H%uM$V.2`d=L;a!mӻ*W7F"$GP6^#)cb02!g܊B *VjrEmf$y4FXjY[7m RH(Q z{t3 +~XyK k78&c||eV6oq4%y] W`?!lDeBǣ=ꩋdj=3ꑟ'vw倣f\[ m/2돗Ax^k8t|<3d€bhuQ}gt-!YR'֘?vW $Z]J1LSSڻ[L8-{>+w"ꗨ`#Y=o iD9b ۰q(nJR +W_ɹB=4AW魝:["{`!R7܏)hKR5}#4_찲7S/u4.~m1#&'yBùX?/iyEzU(VeeH!I$nR<#%殔~3c%8Gg]uܴ_9ڽNsw 58X&&b*"6PWgyP#ĀE`#H-{ThNjfدxˇ<&~s + (e6/}Ȼ$`#x/N@˼! %7p6]Q&I7A5%x EZ,{ù٥v] $! +Ip1Ӓ\ ,p]WEʷPf0A@oyCM+Vysl = 䯊(阞Fnd5]ުդRўoːL7k R'-HU\ڤ-4KA|#\*|v`-i\\a}S4Fڊh0])t#^}7A#yVr>@y֊HWVݡ%\y + AyCj𐌨oq#8 RW_ޝ$rxjc@ܹ0i-)Ҍ$πaU !ǎ I' #o&UtN+c^Pn3p^|.PsBZ7*R6%88p!5emā[d&-Td5 ' ZW:X,5qR.|zgW. +tP%O]:DezFy&ΒM3>f(R͏箎cϿ.[UE&4x6Enitn\دiQa=3L|"^g^ӎis[CJk}Nq{7_gZTwfeÎmsfo"%{%@oxRu qU?q+ +R 'l1jyH͜T^Y&"ƪE峎 +R$ KJӎ'0y l#2;kݏu=߄NV7!zS1dQF|!90llO\!ݕ4hhиt &H0ale?0% NL13ppt<cDڞK rY'S2to28 -W'8 b8 \e lNaZ9RshD@b#:95d/u`2zRc;Gk,1B/,zߔ7* Nvê]2> +6d Ծu!^ںm]PfˬtM_>P)YT^4R}.g +|<-CK\3ӖBgA1RvhݽڸPbfTha* NOdi+;mS‡UVLHX}L\PvgŴ~K|0MvL@qE,CmRItNyok&ѥ"J\Jɐ́ ̓|QP  -2ߒZug 4G ëw,X:0>@6GD-EP?u`*BJ\`%DX&S8LFYiWZMrhmBa`b# rv]/ݜ=tȸձ5yTJݎ4a0uBJIs X&":/NiFQ~ +endstream +endobj +1061 0 obj +<< +/R7 305 0 R +>> +endobj +1062 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1063 0 obj +<< +/Filter /FlateDecode +/Length 2591 +>> +stream +=4M7-~PpfKe B?Z5vI2bH{"[jǫ,d,Go*6M)t1?AJ FAJrǡqD־W6NKBV_'x&N1qM.#O>FJi:g:K5iC#-y1R< d<K==AϗMRF$+.طaQaK `<XZT &B)H=N*<Nsa`A<`AL5AƲx/F9W,]jH+9߼81|V +]e LÚ=X/sfRn^\d4p^)f/ry9dXK{ ZTg8 +_J)ڢy:K"yn)zhnd|  (ßڗDw_@.VA^Ŵ@!%gV4PYeF_ MB:"=jT]1PC'kC9&dP9!?oC]vu4'oೌd>a9G=%Фtݿ=9[l7"$H(id^O:raufq&_eC V~/]mi Jտ\/FB)qO#]w\S'uˍ pCCbH +vF,5nہ:Iv,@2 ?imsYb86 ļd?i@!QbPu5>nD\(2R*{yH!ڸx|WbUU]=A,i &]ky{Psa זT\߮?\%ĭF'=,Q[S=HM)}:pS2ܮx+,ː}^Ue~Dk{_'}"zuBu;=$+qbLi/9'Hn f_7hd_:Z:Y0%nN^S5*=eqr1.P,{ S)YUU-MosUxLP .eZ+@uW'?2Z^P^1x bIx=}Y F)TPQ>''Nm1qH)qԋ7ȁ  IERР +RXLxlp|tۈ&@s>lw$`U19λI%l@Q F#9D+mji(> +endobj +1065 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1066 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 285.753 428.422 292.804 436.529 ] +/Border [ 0 0 0 ] +/Dest [ 183 0 R /XYZ 75.52 71.49 null ] +/Subtype /Link +>> +endobj +1067 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 194.768 359.936 202.739 368.043 ] +/Border [ 0 0 0 ] +/Dest [ 183 0 R /XYZ 75.52 59.54 null ] +/Subtype /Link +>> +endobj +1068 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 57.581 228.338 67.715 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <9585d4caf08de227dda8e4d7f43168cb83dabc7ec84ec04ddaa7b6608dca1de0c3e1c40108e51e8d2aa957043783b212917b5f7b5df933a0f0d46fabb56d03> +>> +/Subtype /Link +>> +endobj +1069 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 45.626 132.851 55.759 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <2d1a0cbb738fc4747805d4119fafe30978a7898ed3> +>> +/Subtype /Link +>> +endobj +1070 0 obj +<< +/Filter /FlateDecode +/Length 2949 +>> +stream +TFWiEq|z&$ ,Omŵ 8ڪ%*@c^ѸyDR~MoJ<@akg݉^56~E4۩pűdDXZiI]*uW,{tC^[,[JH9|*收>lK"J2| :vAE$r2T(B\~Q hK ]r;HiC"ϖSޅ8Cv&|>1U;w4Ax7e7Z^xAccC*ڛް \{@S:s[S%$wÆ% z ÎUO夝kf~HfkHhbºXqQy$ h=d3|f)bKd[ʾ't=^Hu#HW(.6c8)wU N\*UԳɎT'ӶB7/CYfGřhNڶ`op?P͎q/ls |#UvOc.00s9 Ķcu@_W1_ݰؓ7 8eAY| +pϊXj[946!p|c3At13F?jN[l!:5-%Bwʿ~AH2=EےiKolv%NO\ænΦ]zK h3dy(SAܩUMfke98?`^%7/e{zԦߜi OϜ +v;{ + !{4!Q1ZUʅif[17z)دvoˤf"nLA>U4z"sxI?ƊM$+smN:aul!&\8Iz͟Z%&| ) +I_I[yho}TAWb7@qO22T~ {#j&^*-Bט +r0ե}dNɜ%! ˪̚y )*` +dr@uq@=ڹOCɔ +` `qevd9mkXb_hr|hDD!+D1i(aD'tڥbD/IHۄ`i_#h۲Rڿ!} ܁rH55mwRdWou4!jtA< +O>Q +_,DAX5.wxfAL36YJӎ.jp %eo9_mY]K%!@H.˧YзV<Y=)IfId#/FրH ̥~I1v0^t Gv?zB~UN|k6j7Z'+KG$g4)+\Wޢ,ߠ7Yg[1~I{(rp8;Az##h#a1ƈgB"'}~.wkA@W`o + Q> +endobj +1072 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1073 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 176.961 349.258 184.883 357.365 ] +/Border [ 0 0 0 ] +/Dest [ 184 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +1074 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 198.96 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <0da778d9058d7689fca7eb4797a72fbe329d82a2746c0a7ca60b27b7a6f11da01dcaa56e88a882806469a002228fcae81b48e04166bf7e34766457> +>> +/Subtype /Link +>> +endobj +1075 0 obj +<< +/Filter /FlateDecode +/Length 3548 +>> +stream +u lܣ8t'EBt$螜дq`m)4iXV#.t-IIe'Uo%s9%jO1H_Fb&|r㡄`d{H٭&vZy.l϶rAÅEPቨbPŀ-~S@3ӗd~xzb>-A5-K?,h^*h5BS(Fj,)r8~|ƩxJKAI9X'achPL`E!D3Y]/EaY YcW/=" +wѣMI9ܸe9!߿CcX~r;Iƽ%jږAEF6xdXa*.:+Eg!y̙uDqpɺEq m-MW@u?eK3;@T@| O&覷vmۢړtھg{re3KC៹k.!-O9`'mMhȤOV a|QSٯ9j8@Nʽ%RjMneJ^ŭC@92GYO>fn'lܯ; \#,WEԔP +2N YNH-"j1E\swK|(1l`&DE$U܃-b;!͞5#X39kc"B3-K GrS4Z8:J._=Eo8k ^1&Aenռo;EԏgkQa58f@Op(*zis*ә4u (TFH‚.,vE9w[5 5O4>+@sC<Է@0Uqyk\-1Opp"PK1V%QZ;aBe1ǹMrdxrO߿mfc}.x+ڗu+z+D5tDn~ǐ&{0✮gnJkC\Wߐ?s4n)S7ȝn`A6hfT'sYIzvˏU@I *~M +PV8-j Fr[$`bݥLᥐޯΦ,Lh%r'q(Cﮔ̞}IWҸ\+,S *_5e +V1< S'gu E  _8S`Rs ufZ4~xr1daE\%hhgx:KDE=` 1΍DR]In_7G(IQ feXLK uxQω##_uآ8h6c,K?w%B>q09ev=i7((atd ʹ`b~ԫ`:q:2\-sGX?ƶdT3㾐Xw/EP[u`\` +}K;?_Êm8 =Fưs(X!_} Rig=^w|ڌ9[]4_|M*S( ;kIE}&%YT)-Um"Jr^tK|oA[=4?~*!> VE5!Iy*)r`8Wa0W`Рm0Gە_QT(_A'yC^LrZ5fh/D~^Ǔ-ɶ H<}X:U3ޮIť&b54| +HW- xaK䗂?#CKV cvʙ:#TOe֧j{e,9ԳiM(tw ߻''GFFĄ_ަ_*Z; +D)]u`$ +endstream +endobj +1076 0 obj +<< +/R7 305 0 R +>> +endobj +1077 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1078 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 218.145 392.903 226.162 401.01 ] +/Border [ 0 0 0 ] +/Dest [ 185 0 R /XYZ 75.52 66.94 null ] +/Subtype /Link +>> +endobj +1079 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 53.029 245.588 63.163 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1080 0 obj +<< +/Filter /FlateDecode +/Length 3224 +>> +stream +Rq{_k/̜w9:[~V 24aBX#sCjoNۇ)>28`ך|cyXhyJ/毿s1G|)5B‘Ν8Aj̟= )UY'~' U#\ ߱Eؿ&̮;bO{ӭz?g2S5i-7FJWFL0r푑2:X0?<KTd6 cV@4eC[oq%USF塥KdX)`6 [~z9 ncC%Nfr?{ְ: +歎eU>#<Tx̱i͍3+t`4}bj<56|\ܧ=گ!hajE@lJ7ESde!8"JAai] D ښ;fT_"/V~У&?3) }`a) k4K _Z}j-8fRJm ݒڴ^PUɦf gPUYleDؘU#"mKp uk +ȗUy98roό r!C?jw]K"7 o!g}}DŽ"܌pO`_bZXAa^}:;Zޏ$@?-Hk)6b/f,5{j8GpsܠxwsQƖIj +#D 񬿄ȡcz<4h5?2`X֡Lj%)=i:f~l q }6@盺iSꕏnU9rߵPKԂRז+7]3'!Bfe=vlQhku{_"`#p$7HG-PBϣK>ނ-3Hi* u2u6MH?Se_,0 ps5['B.L {df4SfOtorKh$,c7I)reEW_ꄅht \+ mdhXw̱Z YS߂qP=,U*g1'PNBe(.QZ}kse<%ˁ\rO=TnkJa\eQ'ca u\ˀq#9C)[R:Oys;gݑ +4)L]x!9\\ +n6U6y%ΔhJt0.;s󬫌 p e^ϭR& TyfQ,!WM+4H#b⬏Uz)SOKY3| +ǵ,h2\,qE%Iz:Dwl;9nWᇊ -˸SKӫD Ww&J]?;ߙѫ%2|C“PQ={Ab^زs,xd )>:c_.^k)ˡ_6S*I W98u=3v,V K#MtJ yexnXcBw'+)л0: Aw4#gzH» PW Zgq )1/~1`{$p9vHY(q.~}5 )aF\w$ fV i*ŮV W)в/~I쵅pM7* +SX6  +ɨ [2mT\&TmpaJ@W=~6fO\]R)Zl#NeV +'^3MrM ῴ>Z򵑧VP_ݜ%L +I:uگXsrJ6Q5Wy7depc{q&"DQWByQf -v/}|\N-3b ?W=Tp:&A+O7,<Ƨ *^7!5[bm;6еm/x汌74AWYԚ5={%Aw`̓b N 5}U; ioU``r` +.E T1 !pIDW䠑zĠȟ%!=wcl#buM5Ȣ t{+08B<1K iLw;C;=CDhzPbUײ'qȎaǨ ARB,@ 焕A HxWI|NRR$tz1 +oGAH3d9P>o|$ t#v#{G!ɓmGFx< BmN{<'U2[Qn}ɭ v-kw+;@?fcC9=_fl>@Y^Im{0Nڔ;N7`r\a-yQ/{(}eɯܤ8 cS^!?F*8O;0Rh1)> +endobj +1082 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1083 0 obj +<< +/Filter /FlateDecode +/Length 3380 +>> +stream +EhVqY@)Rxѥe 6Hm}1Z&Mq0rN=PǍ~Gdzg T.Pa]1b#a\m<Idu;%N]9Az~| )Ya|QԾD룲 .++)ɪO!9Ŵ]ѫc屬X%ZGc(W7k7WE\.7~?jPtm(ءK7FKL#/*RIKRfo995)BhE.f-@e+LOفv'Sy-ILffoJK;RSl.rV)࿋%嫦 9 ѪR Lg/5؝v멟HvH'$Tɍ{4gAX/W}xyqP|hI~}=ȳW:S[*)@`]|.ʼn93*NJHMG7KtK˅Bݥ "qa#NK6 +R#Б 2UG/@IP^7 hH݈.7'Ds4iУ g. fߢ"Z&0KV3K;/)B Z +Z&y߫RsOC?Hfc&(c-&yKd~ef-",z]\6})vX`2Qo%ȷ ey*A!# #^nBha{_ds.SQ]J e.j<7k 1(ObIn -&I)<]͙6#e5woh8װ(m^mצZ4(#IZq謄ɁT(AJŐ %k +{ ǩ!QU'gb2C +Z`J6s&Tq>0E׭Oy)ԏ.l!VRX4E1K>;}͡j#`@':D`LRʧkLi#YNa*\p&ojޢ[N(z%ɒ`߲!՜2(0 dip4z5@@Յ!ˑr%oke0%(Siײ4ZP\rj*aWʷFh$2 >8ȼBJx &eD1J[URnl4+va\ Jv +`>A[$譃%Êv,4}Qh ֽAy0#oO>m +R-2s:[z`/uId?Y諣eݴOmhz<S.ǿ3zHzyNDu:|%tANk;e\<&ʉE< j{}![ˉʏx[* qׂ/ti40>cʻZet16h_q4ODp:#`w9$sVzU9s]̚+,4MK4Q#rn3_1kW^| pÌ|c"vý+>(DGM7SY[ROlX f/ΛL%*K]UsdCm=!}٨;d^~F@V_`54aݫțD"P r/5_[pef= TNC.`bhrQFR)ôIbM8[Tf |EzOJ{IoT_{k ,U~<3l<|Pl q"7w #ٳ*iJW suxȹ,v>(*oCe(Y@ϯu0iѽY'W&nXXq/xRv- +׷ȐUgD~qIPؒ5]$y!|Q]q9:8 +endstream +endobj +1084 0 obj +<< +/R7 305 0 R +>> +endobj +1085 0 obj +<< +/R201 362 0 R +/R137 315 0 R +>> +endobj +1086 0 obj +<< +/Filter /FlateDecode +/Length 928 +>> +stream + \%lZhDܡz#i [0'dd7f5D<HT/@5;ؖ"Xe6YBU<! +9O#ubJ\ 5'[l)8sʯo^J|7͡OXC6xEKV4yI$0[AȆߘxŊ!ף44ߎ>"Kβ V]Y<{)$c+;NJGirAPA=vD~ :]%c2NG"w0L#\2ϥtS"x9wbSzy8N6ehE~`>!ǝΑR.r_>gkx&I,'׆X >M}/Q?G 3%D +~C[@'CQ2Im1y +ݙ$6Dp>=U"P!L݉~³qTX`<0{2&obSlã/͑qE$*xdX=FaB8L_7nsnRȝ;g-P%Q) 92!0w>H{o%үGܽll~F/X5 Y ~\%0b,ǘ} TeJU(lb PlS19/R!W3~}R0"e .7>6+*r2 _jsAy +RO#>IYQy+Ў񴨭7`5}k})PһetfvMs,(Wѐх0Ts>`YSJ?l9rRwVρVlRpٱ+ANR&;2=asH6aj +j`?;’8@EI߫wGS +endstream +endobj +1087 0 obj +<< +/R7 305 0 R +>> +endobj +1088 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1089 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 104.466 345.767 112.221 353.874 ] +/Border [ 0 0 0 ] +/Dest [ 188 0 R /XYZ 75.52 115.04 null ] +/Subtype /Link +>> +endobj +1090 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 101.126 243.386 111.26 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1091 0 obj +<< +/Filter /FlateDecode +/Length 3207 +>> +stream +iu0kh;ZL+CHݬpO2 y.$N}S&rrs::x%MRC8ptfhPjyƕm4 tk-`j[$rwƹLh@ ϝiC&QtBcj68AHuqJNpò_gh dDvMT}G8́I' uo}CNRMoJ 쓣(s~ 22a㼺6퐏z6,}'"iNeYoE=2 8Qy1V@Ԝ]MqqpζS׍5(5zq%26%K <[`a %rD /E~;y}KpPd>E^e)>p'}ڔsIE^M:V5 "<%wD5Tː>+W0YTny{%:#ѱ3It6aRv[H(:5ԝEte}׳ \SY^?5#q#yP2/вYR%s}ܤsܭJ( k{'1*<.ece}˄q\.fjăxfFg7ݴs$. ޢ#Ϻ 5 b43aoZr};٦}#OdHZNDۮ'@ǡ_q1Tx +E 3xHolt’ܓsCKw3V0:a\>-J\p~Fy0:9㜇'"1.@0y=CEԋc'|2gQZaMKd$c|0q +.}=v(e|8wWd꫗/=o`~Ahtvv]TF2^vO&R}"=8syrn';-%cȸVN sP :GtlA}5[j)kPeq d>|zyZ4NEj((HWɮ[wotLč$ٜ{[D"ٸO]Qͻ93]ԩ?M@P>OA$_ZxXud{'=6+)ߣA)@OXTr`}nۛS^J#%LuG9N65sZhWLI]^9?l&!Yw=@xݢ26ھc%xݵ^laaW{#wء#-ȘzhB|m˩a> p9d"_OJB_U۔wb6'R'A4Tkyݯ;Vxp:%TFWlcu*!BҕՀe_vI1˭2=T,EK .vsGr3W0ևg9As֒o m'ji»{HI]9M' x1 -E9? 0~5P;Ф=U;mUɄKo*䗠wQ<XFc0ܢB'ѡ@}{!(ѣ[MVy&?H͚Xsmk-T{5\;ѥf(L`9/LJzH.D!5yvq{Nɍ`;ҫga"!;_tXYKNYn[2/Qi~,} | [R+'H?~ܘ9<m|䒅D$),g!)Wt?Y &;B^GLBV>󹅍F#L_5Rr5&+S=/DխF~-McCz~GOTB| %( Sh3 : +[u*;B}!فPi\{ 畴]6Zenjs[$I"^ +֓P` fhDҏ.H>#H Ttu"3SEf|'up__!>wg~\'AqĿ3ǭ1y3[rXb) %[۠8qM( yhs2 'HܝN+vI\W^hv-Zpv~MBVt.vr:ɀʫ$#?a^qSf[R }*5'f< .x]JLF[Q""9[ 6^ +endstream +endobj +1092 0 obj +<< +/R7 305 0 R +>> +endobj +1093 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1094 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 297.415 544.644 305.438 552.751 ] +/Border [ 0 0 0 ] +/Dest [ 189 0 R /XYZ 75.52 102.08 null ] +/Subtype /Link +>> +endobj +1095 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 70.378 461.713 77.948 469.82 ] +/Border [ 0 0 0 ] +/Dest [ 189 0 R /XYZ 75.52 90.13 null ] +/Subtype /Link +>> +endobj +1096 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 291.633 171.011 299.872 179.118 ] +/Border [ 0 0 0 ] +/Dest [ 189 0 R /XYZ 75.52 78.17 null ] +/Subtype /Link +>> +endobj +1097 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 88.174 160.96 98.308 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <768f0bb42ea552bdb6a9ab39f9debf9a4ac13441a6e3bf0c3a51bab6b3544389ef3bb4aad18d561b0b912b118e1f3281d4b1a26a685b498b3fab13af6dc0887bb58bcbfd90ae05> +>> +/Subtype /Link +>> +endobj +1098 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 76.219 184.799 86.353 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <6bc2d1e08eea5db3aabb8b2a6855f6afff16f3efe2329d518adc069b0bdf3c9a736c38d662e2e74a16b2326f5d2ed35bf3a763a0ba> +>> +/Subtype /Link +>> +endobj +1099 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 64.264 185.861 74.397 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1100 0 obj +<< +/Filter /FlateDecode +/Length 2821 +>> +stream +<7ːUS$5Ӣ Ja0 +Bj4y7Dy-ģ$(B=anUfɐ_sLzgqu#b7Is0-Q:_AV !k݋|2 +6XkDGlF ؠlb]s[^->C%X$i  koW]L#EcILN7Y'v wz5;ݧboFi2=F%.Cъ#ߦ$zAdiD5pL8 +Vդn9ىN*G02qU]% %EicM~A&Z$e5SYi˅ :zj]>s{Uak1|XY]u˻$3>ZyX=-U[4 R"Vm<ձYiy7 jf-R#kҬ)>i !!E2'Fk?@M+~ӹ yNvͦkGt̖,O c*S1ǯ?Vƾ !VkyL7M)ePX=ګG;-)fq+mVQsRDS +Y&R1$tvyD.?¬:ptNCqX3l =֨2t+:x7!{:bd1KͥX\Ihe\E=pțY^]BJZD,.~Fd8/ aڝwiqfkĬ3hrro %`IeOB/GY_+XZς]?##+0bJT>ᔒsZ>$1N[ ݡK422̚Ê4},] BJ'O7g!0OASܠM5ɚ?u>Ig\  /xLPMڄs53!I^Tx e ry;oЂ:ȍTa>g`M伝DG CF5 ;d0ׂeҠ1#4Ư]д2 +55VGP߹}hP$V/J *Jض)/wC|Rp8Ծh0 8_2}MPФ b[5lȤC*/ o a`>i$ A`wPUUOW1;)Fb'N +62˽_7;M_L*} +_4ה`zҏvyݴv5ad;:r@U䔽8UG?Qz(tB2\7x{yOܠ;bQl` )˻ZuZrSCkyE?fXSCL8CC;d6~w܉Sݢ-y J, 9FO XDe=6,3I̩6+λ.@3Z|csn^z]ҰY(gjh6ϵt *45iKi +3 p;^#حǏ}?YzHh7[MxI %5;E+ 58NA,A!LEQ狰bOgn)o07p{]r<%ʩif:U)ކ!D2h2IW0q:jJl~ΈL&{7lrYn˗([pB◃IvP.jRaPP`#:U~Efމ:Vt 7x1ϺNq2Da}đLȕd♫TVYtゞab)X_l߈SDŽ5+i9T&O]enPO)+%c鹱vYvbq( '=[ +(]WS/r Z&#Mܝwb= )s3$4(aI~uyϟ)nQjcD^4V1vYk;N$*ZW^A5)ĭ"wA쿁&S_bY],4i:r^N; ssx 9G◐mCT/nKV^аV%D^)8pJ + ӛ@+pQ|0!v#_L'O^G)4+Zp6VFn秷P M0 vd[sV¡"fIVLrR~Պ}Ͻ! S{Q{L}"k\<b'Mz"+5C HAFAQ@}]?^IAI >5 +endstream +endobj +1101 0 obj +<< +/R7 305 0 R +>> +endobj +1102 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1103 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 204.927 344.019 212.95 352.126 ] +/Border [ 0 0 0 ] +/Dest [ 190 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +1104 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 226.043 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <85dde615a6a0e34fc4c763048b798e5c1886bc0fef9951d9dcc657289b7351115eaa1a2ef8d6056f32cbc15bd70d355d19e00fa24a4565f4b8709b7c4078cb9c485f1da43b47> +>> +/Subtype /Link +>> +endobj +1105 0 obj +<< +/Filter /FlateDecode +/Length 3154 +>> +stream +6frKHͤz+z/v: es:SfEbTg-N}U@a.;'raQFH!UTUƝF@w>VH@$_p/cVH + unEq Hn S-HEZ]߁"oN-=:\=a(wQ1`ؗݐ/{󳬶KV _8A9'~Bc܏qH8̿ fwSC&dfU@@l&OAj2XZC]'rcZLc1NZJWFԶKsd4v@qw-y +J6ONLȳ%ADžXKS^DBF]UI6 &OՃ.C,#K_3/I?:K,ܘn ]6OuCWE>ǥ@^ ,`s}rh =Z.N+4 ;k̐3 ͋xekwv %/w-@(!aMȱ~fh.{{ȏ}= +X5ʵS<2L:Jok~OУɭ Q) +~SeJܰt{%%c-١z_(j@G̢_h7'FzVt[hmʳ up7U擉3GPYCI 㟁tߨ"(c?hbZbPniCEEˎdxSD ٔ7{Yy(M.iYF#:irڠyo=,(N7YM+l 'XDv>Lwukv{n:5<ʧl';$p!k@a ɜ)i7㯈1tlڴPTbi6Y2I]l {$ 2="zz Utwɂ]xۮL&=%k ])BcfҨ JWat,ʖXSVn@:iSphHYhߝH'yH &'k=9s{|5W1 #Iå'LH{-BC^vb.:Ҟ6m, +<|fo] f V/'bϗ֕10t!ƞu)|6-N^]o̺5)N:IH:lm>-8jQM;X`6QHU]+@L >7q3 E։\;DI;/b4@>hts.7i>K-Aӎ@P$~f@^_zf9Z=^Y=PX8cqghkB?O;yV} j^gɜ3 +L,܁At,s +K,~KYO\v`ȓcOaeh7RqY}"h-خ$$˿VAX`] M& ''ɼo[Ot~~j\{~.BC9&wcD|{BI MC%W/ڋcnM1/Z)? ,c e!E5!)sn%|m}G#pB+{a -g]cV/0nn0Si'K% 7Usz _?^MAcSl;m2{⁶>^Bl:BKŐCC> #B 8"L=Gy`vR fXڈ|B/Ě+UW%xr16B.<+)ek+.t1dANTՎd| cWd1@z"D"(J"a#CCcWF a å )6k#Dĭ-XY_KRu_kě%qإ:%fB +Ftoox)7FYӏT ^MQyG&d9&}qQZmg{Ν(?ɔgJ\Ì# ^cC_?Yħ=ouT4Ay +36U TXq``[dٻ%u"]:lSjv{^? ]4Ea*?^b kgC4Ӵs7KJ/̏ +endstream +endobj +1106 0 obj +<< +/R7 305 0 R +>> +endobj +1107 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1108 0 obj +<< +/Filter /FlateDecode +/Length 1522 +>> +stream + 5.@lܪF3yc"&Nz*r³aJЅ&5̤lTR6,k\ȧXyĐ\"f0BuS3|cqnlɐw&`r|ԶBY!mV4s>8'"0Xݭ`h#c;#!}ؾ3DH8fP$RQ8Cb vxIYvch0 T]EFcV+UF,KK+f pp'Zg> 's&!t:6ר^ّyBmG%q?9vXl?خj{/P*vJ5 XeR84Yk `=eԎ`IlK(15 vZ-iE*EJi1<`_~lZ&Mַz"CGT⚰rlGFͲp5Y/׉'HsQYx6s>Ʌ^X&8~.=tnw:-RHRDξ~*;/ܰ/H +od+uUKV0)6TU$ +)/X"~7̏éY@<&׸v 3VM^d׾Ec4Qy{3Gva/)a l7Ty2߂0Dv,^Ivڅ`I-SN c`}maZ\3[8]h;RDr&; l1$E9!L'@-&4cO VFfgmUf'>O(Kj8YDMRF%&I˿LxDVjV!mټNxxM,62 ⑓ +1#nN1Pݨ + > \A.$oFV;-j`>?Ĵ``^^gwC}uҎrJѵSY>ۗ~Q6БŠ:x(9\d'c&K(_wZ1Ȓ\Ъ^ 漣LCD}PKU{BHܣ3F$aGe>u^-3J", + ~k;,zuMC[\˙rËu#%a 5xpw3.^sZp#}0Ԧ7}qgb7xTtWy-|S@2-uOnH@\rw7'ڊF·3J);w`~6Q_R/cPJ>5o@N+o\,+=09xUÁ6EP{+;K);hкYmՙ>sUy$ҟbxfZNYxU +endstream +endobj +1109 0 obj +<< +/R7 305 0 R +>> +endobj +1110 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1111 0 obj +<< +/Filter /FlateDecode +/Length 2874 +>> +stream +N13IiHipO +-oZj4scsόDMzj? 066I.^@G;$RC>8ZWAIX@МfY߽VW#kHMh?/4zVN2~`#+o",l?_wU@Q; +I$-q$7Bk +1&I_4|9Tp0 8(jtoyaT3/)Lu45>@9=KJWd=n!|}7 _fgƀBH[@&R l(`㰡N7?X?tsZ57IS:Ұp8+tQSU$)ss~ئ;̪қsH/ <>將5m߃ rSTq+}_V##n?D<-Wp>az||e74f`Ȉ{ hk> u 5;*7tA?^H)B+j^j(uQߖ/8xw Fgv. +A&G%IK)a4|y&örܿiq?4NN(鱂!PKYbUG\X)WY%! eYo^EG@:tбU;9eBAUAwk%v bc ,RKp84R~nvU_ tz}7.h1+٬)԰HKF>WX65!3d 7׾a//(44l>v>o@U᱇O)ۦE.) oٿ]\>ޅxCr"dg'0Vcӳop$f P5 wIZrtidwN˳s؅ÊJu¼pIBuQ2ж +uHLBgv;!'[} 5_b CRshMKPd=zaW".!ʗ5]:bs&XQ(m%hg #J`dG}J찻o IC=6X_c=Թs]*방 sCj3{wxN\Qv&T?4;E 53wJ]$jf3koz‘UoK|ʛwݙSYU]7H7pqӷ:Z#m_N_Mҙ *EѧQl^䵣]XN`ZC"[OL8AuPhauĹ͚e5\ n' 0L_¾E)qu.~5zl,{vclj/aXgFE ?/(,F4Pt1 I;2}a1I}%Eê{ahL!pΪ6(*KQkͶ26: /Oo9@RyOLi~A,=&l]K1gVi[arX^@gꅋY56:a a)\ Md<h%T -d!:U&1ҫÄ鼎}/źGQey|\vi3is/}yk"TM| |k_D⚹dWd{qz߁hUڄ> eS0#ЙNŊE)ҩ1G#*K=ZO?Y)$Ws4 -r_r, ~Xoi|7*'Z€hG׈#᫲?A"v~KC̦Bǘ$ Q֞CG|ѓRS=#8Fyd&$n^N!V +Eޙst߮ѩ;81i^_ї$nA=!Ռ+Γ֓M_=`eʢKȑͣև %'"`[X06AyR P`)?$p܍)n559W`Ι *drJ8A_74ýa +լ^g(1R=Ŋ<=٦GP:Yh#o~G`qtOPt0Xξ)i1vN4HzЂa6^Dyt\P V:€w1 +endstream +endobj +1112 0 obj +<< +/R7 305 0 R +>> +endobj +1113 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1114 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 327.127 530.198 335.443 538.305 ] +/Border [ 0 0 0 ] +/Dest [ 193 0 R /XYZ 75.52 58.52 null ] +/Subtype /Link +>> +endobj +1115 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 44.607 227.602 54.741 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <38689cecb4341fdb3ffbfec982c13f7ba07a1af7a27b469c348adcef23cd79c7d7c1e5fa94e6c4104096f1686b36dc3789edc819cd85d802a7316b0749e0b1cb070e9a4c6201ed033eeb721b> +>> +/Subtype /Link +>> +endobj +1116 0 obj +<< +/Filter /FlateDecode +/Length 3314 +>> +stream +> ~v!]YdYuu|T@P,%%e=h~iI \;%*|Nql_7r]naX|gM͇MNuv[f 3[! -=?w5O?m- +k!y! WSH4ŖNK>"c L_E/P b-C!AfkoH'LK 8B**9:}f'b^K*3qҼ-c:pP41!5@'[3V3a֎P[~iŅv4#e٩6313vvxSµLD~U٦桭k=$N)FehIOb`ϼR8|ah $0)ź]EըхSa0vQm{u '< +F} PX >U6}?#ifklOCVT2{hOl C&4A`}똫Q:C#OO7.W**lB?m7n4Ňj!#t[D8xĒQ{6R-9(UvID,y@zQ%UkGnv[B$j{JAF"PIM7oZ)|)UHv:om $q/2Z펂4L<%DTߵ ]$0'Yq$k6j}@5અL{b/R!&SJxq $sƎE<ݔLjJM*<׭Ds[l>_{n /_ J7c?Ҳ +viNԯ]X]O "Xь[ҍ7:hgKwu~B C~M5CcU4%ٳ^9J]ҒCqlpuA.=`׼G,* !USV3Q(!fWIr{.kÝG1NbKK<6.`H #jŨ壀_#DDn +I +-NQr7ԔbZR@s|An2D1_2TSd+l[ax!ȷ l.ŋAh-)JY5r2PH*P04\(Bgcn҈jGtѴfmZPݘ/:6jD3uQ%f7(ѵD.wfS r7H:I?ۉNТIb+טqJo'_8hf:ˢ\psOdx1G[AhY9Cnm[[ Ӹ^B{Kˏzbq/v s-fE@Hҕ,^MޑN&;-5 +_d$q{P/\jY$bQ:m:B̄g +dVELRH~TTo4]pӶ+_h zCȪoxd4}5 ͎h{J9nA!=r +vO\ 2aWB RrE-%JXRR_dXY:c?9¯>ӟo= c+}gZ }4U]F.f~HgO .& qn?Ҫ15.f9D(珍NdPOn..\E +endstream +endobj +1117 0 obj +<< +/R7 305 0 R +>> +endobj +1118 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1119 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 85.815 285.688 92.817 293.795 ] +/Border [ 0 0 0 ] +/Dest [ 194 0 R /XYZ 75.52 75.29 null ] +/Subtype /Link +>> +endobj +1120 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 211.621 217.202 219.544 225.309 ] +/Border [ 0 0 0 ] +/Dest [ 194 0 R /XYZ 75.52 63.34 null ] +/Subtype /Link +>> +endobj +1121 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 61.38 217.93 71.514 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <7d81c45aa7e0142e4043781e817e18c6a33ac0be7892126cec00fc407a1e9d2e0ee28de96842a883767a44065a64da057fb5b74b8f3f64bfe33435b8dcda29b3842cff54> +>> +/Subtype /Link +>> +endobj +1122 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 123.079 49.425 206.992 59.559 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <1dd3e285af039728c604fde41ef61cc2717e6207d10cced283dd107276a002a585874098586eebc0b5bfd8c46d3e7517ba99c56ba702717bda0d60360c3f54299fa3f58ac67ebc422bc3fabbe788802a372eff78f03298334c713c1c058e6fb7c919bfb82a35031ec7eaaf18318662fc9afe1139> +>> +/Subtype /Link +>> +endobj +1123 0 obj +<< +/Filter /FlateDecode +/Length 2705 +>> +stream +"Pyш4Gq Cȯnv_bE#k^l3t)讲oCDݪ~{*Lz%q(V~=&̢ۆ립6LpJ`k:dFc3HfR.eaD?U&I!?nF|4# zi?a}3^>WM cQD0mcOP-g{XQ@(Ƴz1f9r0/G%n9cD`Q+U}-o38TT:Gq +R&}d"v*6r8.f_ǫT$ 8bԔ4!( |9V 3bs6xRPZ%x>+6\v28Nύ51_FΔmD h -R^VVj|ks-1~х.?]G\L # +M|l!:SW|fTTovu7-4gNo?]joo.+4 +2Èt'wSU`1u9,}QHqW.n혨fS%V c{+ ު_ӊ3j,Ē4K[}[lw݊ΉߥF|f ,+3?IA.=`\M˯%O4Rq~"?6+z>\>}>9 mCuјHf,-Y}dGߐy$KHrv;MMM; +h! +j\6Z@<6[;vca4Oy.kSԆ!ovTC +K?n㦐ٙ\%Cm@`:-"3;s^U;Ʈ>Fofj)~D)=} v {4\yV/$aoozIЪmTmV87aKu>9 L+^y _܎F #s9Ċ {:^sR f0|nbf|hG2Iʎ>) p%;/ 衈3[zI oi+蠮e?}rN7C3cFE< 4N +o{]V1-Z`:L12V€[7OM|a*?b<>{% C'.r`ljl/Bv>@C6H1|9'0QUY[ LÄ%*}ebҌ'Q;iW1ЙbI^eC|k覊) -(J [ZmD-ܻ=2#=N5b_`< tTS|E6qU #oo7ҡӡ,'fMhx]o'SɝXk0%1iW>OHrOx2ƣ8ėÏ8/+(Q{wBH bvn5TfF +׬i@kqY).4jT~@ LVf'@ D.B(U8ؚ +TUj(D5bhronT@àyY7$͓ +։RH6EBe +Lh`KMr+7n;$ ]Z3+?'viWBsS>N A@~F[gڮt1`q&8Y _mcKGপ׹t@P<+&i+ Wi2\+g]{4[_܍dZyo*IW&m-Ĝ@J D)-HJJdV,Kz`ۭ)nszqh(=17C~EvQv (DxKaN!`Q,d-[ &­b!oEBlY#dXCU=;댎Bj +endstream +endobj +1124 0 obj +<< +/R7 305 0 R +>> +endobj +1125 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1126 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 178.866 266.304 186.739 274.411 ] +/Border [ 0 0 0 ] +/Dest [ 195 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +1127 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 217.216 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <5fbbf1e1c72b84101f2ba880819c131fab664785a1ab07bc8fc449dab72d86481ad6a843f033a06d2fa168e3006e788001adf644aab282946077da77> +>> +/Subtype /Link +>> +endobj +1128 0 obj +<< +/Filter /FlateDecode +/Length 2468 +>> +stream +OA1A3Rq_,25hgd+21δaIҾ$ov kٽ%g +X%+L!Jgr^2 Pdgb|%^UM #)J9l *(C6$A!!(GZn+=#T61- )F1hԒ҂S㟫]y’ ,߹EdV 3]dV hncClŰɠrmVМ +<:rӰ,5 "Zok=Ɖ3%'U*y1lU;7ǙW fG_,mn >]@lad+r!+ce]Ɵ.R bZkhfdž`^E2lܟ~Uw/YD>/r=Aj-#\cm +OYSUu.=yh-9TVp< _%bJٽ[/=>L2"LO5xi\&N"v 96W?LV#)$j!׳Ł0d!ˆDCS sp=?o8iɕdK3bW  Mv+~M@cy {?rvlfEК]ioegi<̗N`PLB$OS\YY!0.5М7}&ɋ*}XdV-0a`z24 ^~ d 'Br=h +p t]KPe +k{i<)F$da#j WSM\Epꇵn$2}ō]mCc +4:^O,(UAzm"&W f}0@hP۔p,Z>uԣ;g9O?be3uP7v{ɿCn סp߳3p!s٨(/뱔8+uWBUY c=WIvaUusgZ0g+mAd[vY5Yp0g +@#guk~KYqTG"4A(?PʩD-FTQ]BxYdދil0Y 6% ,TI*}?OATpQYr'Y6)rv %AV I lM~քZc> +endobj +1130 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1131 0 obj +<< +/Filter /FlateDecode +/Length 2674 +>> +stream +˚)ǩe> U}WboW_.Q`#\_t&[AuTڍiIP_3exy"+$0 u7-{d/~;P_Z^튓XWZ4f:iSr*"3Cʺ~,k3yl!P &DE}[dyPct%~襥u}BBw6Ǜ,C/]GLIIږZYyPwfM=ϙU_[?JD#xECu()nL?^0کN8/=$F􎏫/HcYѫB*v;cTid4΅|Ɲn#UEr(sfbOEj?غfe>0?p=+N7 ?[byKXBP(-VZN +QE  k*=zmfM؋иm1{ߥ١deuҸ%%C[Wi{~RMnX9aZ:{MU[[됟jwhrI'1PSeu&ȕSCeFw}Ī+yd|ׁ̹W7pD]ygnԇZEO<ˇҊ9yAe&Hobmlqxԯy!FUz6ƫD@Ɖ@מ;]1’veK{x# );!hA. #l1DUb--%Tk%} b#9~H:?s!?*՟-;6'N 0{CaDKL+JX>O"Ogj,lqųQ9tƶP]i*$1..G T `7{{o#|eR4׋`BE-鱩t + K#fE31nۿ7Q +kE=(n?(faTBR9_.faOzACߏ7DLz^o!)LѿҬ6tOOjpv4A>͍jws8c<@=b]AٌE +uAmw@%´,t.P)*rB݋ B1F3CwidpMBl=insJ %"g } #g*"R,y]&i 絫\! +R~n~[DaָDDx +oűJ@]/5 +cc6j8 -:d,%*+^fBUqOIkDnTQs!rB_AOhѢs xk=D.QKpnD*x'+p*M>b+I"_edk93#{4$u$Ty(n&%^" GT.PM7b/$x!Ԃt7gYqR'UݜmKS&~ɖܸʷ>6AmE޺5h]hE ]m?$7GoiHV92ll%hS[_ư GûU ?4C?txET:l_&#WE +ó;B&_!"4齩7aK1M9|7 ӚN週m &4!> +endobj +1133 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1134 0 obj +<< +/Filter /FlateDecode +/Length 1866 +>> +stream +[=e̶/E~lǞl+z?n!8\b 6 ߎ! )`U g\r9uc| Q3i^؇x r:Ϗ"g ogn:@Ԛa\!8[8RQ qJ))I=pY4ϾOܒMiLZNe:v@cI Dz׳LVRkbޥ|Yo.ɏM:&TuM}?\*ʜF| Bhn-HS Isz]j+5OLI ϮGDž>E:j%7ztc8f_CO18lMR<ޠ? vSʓFOuB TP'CGm"&w>F?GӮ  1vC"|H| !> +endobj +1136 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1137 0 obj +<< +/Filter /FlateDecode +/Length 2917 +>> +stream +-opbG2U^5ic(ǿ6EWPB,K;axr\,hHU%VfUU],]\J]mpv ?lDr[pocMj[oC/gq+‰M*νY󐖽V c^316yFJ*:lFgɽuXI^ԜDsӂFl/ү+a]UxW X@wr@ut^ cAEzD)y?$) -4آ „kZm!ۺ[ |/$߉W2D*.w&sM˹mUQF bk]2_ +d)* +d-C1a4A[ef PS?;j&ICZh+ÅRG2GސX9X ѾoL񞿶g +. 5Na>QT +DZxjq` + ןIʧ#u WPr=8G)wLsTؑ\G^ZDrּl[Xp m괼_̝SfƺD͈xQE68fjMz1D:lԐX XcRHj|)/;)`bjJYVJeqS7Yp*kbH(HhE KŨB7xJ]y/A؀$ۥCt˵6^6ߦx9}&T:@t0oUJo5o_)yC4;KS+LҭGCĆ'P8p͈\(4ǬY~ u=Y)xKa20 Sv 0wm~f1[Zu!$;Oxk5\gcEk{tbV^7"2`/P}ut\SہsZ}dLFUX&C[B| =2Ɠ~P_ii 0UCB?hۙnРmUVj{]}s*F\=y۫Z(3Jw *RLP>]j%CCNؗ]EtL8y9Ž2;=9/JPU t(h\ϻ @Z~tm +UJ[5cKk`6s)Zi +N/YJ(g P~n'rWmH^6R6yO}&|IzD_ uƈ~1&a[im6GVf&MEIV%gE`<hQuT4]&k>~SU*_ ~Q0 lb*G딮&RA֗vdN<3WLAh.eR#%|[ !'P7%3-kh% NeqVtcOg2[JZHkZW#Oo_3Xb3;%28H`n&j;Werכř?9H׽DCE)vʏ˗w0XVB[?HA(%8yuZU}KdpsZG'OhG`{%*ꅖDd2k+<7/hEcRM1$g5C-q_p!ݵۧ7̳Pkԧ|ët|_(~hpe!L8n>k댛Z7]^yzmφ3rlYw Qi%25ԵE0nIE!ØgkVEvDպ|CyƋMőNypLE F$fۤk_$yߤ(I|Mr!7B@ dYibx-~iA*Ģwk + o`ֶ0Mͺf7krI|-)_(K-PG_c..'$\%b:un{ P,O/`ڷb̰T}BSt9Bjsi.A7m ޱsZ,emXb&u}E3Shc5>>=љ\yPe ݼTS댾Zw㸦K1$+`C` k+jѭF$TKQH0.>T$JK +GҊ5=Ocƿo RD55LLx7+9 + QǮdtɴKϩvݫSF-%'Sm ',:Yd4.8\d"T= 1\XH|#iL\#9NMt j?-R`*6r2<7l p%P1VZ;qEy,ضg RZrrЫ66&~ B۬ZRwH%&scy܎!e91)>P`lGy=> +endobj +1139 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1140 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 181.775 138.645 189.743 146.752 ] +/Border [ 0 0 0 ] +/Dest [ 199 0 R /XYZ 75.52 59.02 null ] +/Subtype /Link +>> +endobj +1141 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 45.106 231.221 55.239 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1142 0 obj +<< +/Filter /FlateDecode +/Length 3515 +>> +stream +_Je}axAoNmEr7C`ME(I'E] >cn)ppԍ`lx D>wd,:znU])aiSOeOVQŌwHѼ~¼<>pGAU$@ fѪsIIb>Si|&ؾޮ{F!nL ~Gw|'}{ɗ"W$Ko_4\3!u>rMD96Ds,Hj]͌֋am4!cq|<<{FÑ>&d7?tb4ZL9xTPkuj̤-#ڰ< ٚpF3 q3ϖgb 3\<F4DѣF2[|MK1?}M7=N]m)!?SNEO/ɸoLJonds~& +hQ :}$ +3z㣊Ȋ`F;lJ2m+}/̀:/,а}+f%<7:3%}tW?>KkLkL aw9ѶL^!~5Mi.rw"wP[J&p}xK2; (|;{xvSaﱤYUk+fk` +VsiәIwI2X#4[ҫ"mbFYJ@mC\b=J)Ъ9du]o蠈5$RG2α~xDx >h{Ȳ&y؟F+fc,"O O߱90KcG^,@arc +~%x ?fJ&1LuS:DnM${#UO8 k%pf'rKV/ԡ=K2!g¾j}|U,ɤ`~ (ޟs7iAbĩ$ ֵE /"Xn@_薯nl 1_|[cՅk% ? QWQfa;X!=a1,ڂ_u(h3Ԏ [[&͝!gb8iN˺ShJㅈV*ҁ1lvG>924"e4693(8z21\e={up2E @+`yЦ~$'6LL7F?m1LCym + 9;畍᫢7/rGF0da-yND?F|&]D|>;E&cnL*C%!X67B!6W\d;;ҍiBRƒ# =J?2w"36Af%)[_Ku:e &XGI)D)gMd;.,^LUg˃ %&[?r{;5&IWfZYYug;lߖLtm&k=Pf?HԺ5R7lԪZ( @}+ėLeFL3vkFlwwav E[ +endstream +endobj +1143 0 obj +<< +/R7 305 0 R +>> +endobj +1144 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1145 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 85.815 276.173 93.521 284.28 ] +/Border [ 0 0 0 ] +/Dest [ 200 0 R /XYZ 75.52 80.22 null ] +/Subtype /Link +>> +endobj +1146 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 345.709 251.025 353.683 259.132 ] +/Border [ 0 0 0 ] +/Dest [ 200 0 R /XYZ 75.52 68.27 null ] +/Subtype /Link +>> +endobj +1147 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 66.311 217.93 76.445 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <25ee63b449ee2e54123b70305f698a6ac967c8968e6c5b6f2a4bea51144fd28f9d9cb16ef98a475d817a35d25db9f6dad061103d7eb906545d7653af26ad2426bd163a38> +>> +/Subtype /Link +>> +endobj +1148 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 123.079 54.356 206.992 64.49 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <1151139346f0481d2ff43a756d42e5f4afa1beacff3ca1b7eae574997146b18981ec7743b9b521eda7bb563885b7f8a344d2371cd559b601a419b2811d808ef2d20a5236e19836ba9eabbbd2f5c7cf73469e3b9eb17970d8803028ed3fa44dee9b1319b9a3a966d08bd9018615d4ceb09137b8b1> +>> +/Subtype /Link +>> +endobj +1149 0 obj +<< +/Filter /FlateDecode +/Length 2649 +>> +stream +=h"=%mj-Ad_Raa-|)/hz|?`6]Q`pJAȘ +Td |ߛObd9ep3:6+-QF^kZ1$6%:73 MR#f" *Lzm12Q8kAl9J{Ja!QaUJ4\;԰O$sb߶pc Cx͘UvjLl}HIy+n9bi<UT]؀g%:;[t3k8^N +j-DxXK82\,M7I',:KFŒhj+w"믙6BroP*A ;Q7 էGN6_k=q~-L|aar8ah׵7}5 ~~ʬP5Upy_Z ~q cڳAiv*a0564b]&K!DXbV7G;͑r7 +r&$>+Ro $l]8W{'ժ{Qy|ˁHN\y.UMQ̉3c =Z*C{WĠ.xW8wAubYqq{AcP/7Q6OBА뜫9|dr@YI~}5#t%n& 3lͻ{A$|=ĶТٗe9RaП_uMyHBZKC[J/ruN~[zD\EY#r=mg?7n-crV44^ӏLTIQۆ'@/;+xK<6k_p9EEL΀D3te O1 >X5 ac&fێYևB:EBGAIe?/hЯQ"A>@:ZƉN4CD6D=P& +lr"xUg{7I'Y֧b&N(8!{(%l^fxAu? ¯- +} M[{V̶MJ~ G3uEh'ߑ5 \tLٶl4ЍOq)e5,4n幤e=+)mUO;̿Y"Yxrsϯ,ixKi['`fHŚqpCL{^h?;8H؅cp{kB+*-MiH('T.D=cC+\%;5W!ǔYpcB杭yO1I/$BI,šK~T0g)=m> +endobj +1151 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1152 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 178.866 266.304 186.387 274.411 ] +/Border [ 0 0 0 ] +/Dest [ 201 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +1153 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 201.512 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <53f6139ca6f86aeda650d980ca066c1a39c9a3e9c1f4d4ed71fcd8337a927cead1088447858c45bceebee14fb9563944e51244633e4f206c> +>> +/Subtype /Link +>> +endobj +1154 0 obj +<< +/Filter /FlateDecode +/Length 2359 +>> +stream +oޞEXBboj,<|4?}NUθ QOKF6N{(qM/:ivỳFP85쮢sq6@eԕmЏU ry +%FbyjBP#sa(xw_i! RuO3Xk>|r6Ps > fA)rrGK%JpՊ-ydXH6q8s)8JP;,9bI՞l(}A:7~\F++UQJ?$fQe%J)E7~oGB#.\sAUpKaNK2֟5@֢JPQ75\^l-sy:&V[ihV7ԩDGԁE^FZdI3" +ss KXff󙆯a=@A+Q#[ +o]DɬPHZ $9Jnz(AS %dȹ!5Iq%BM|~ 9/#L<bq{pUݞ4MmHJyvIڥF +mF#Z,a#zKzpR1P_pW7UG0W Գ%D]Hn//ٝ(rweF)\6룰"X62 +$YbZ"$A"2imOSRoErΒL8ͤp?{xy?NpV)a);( $'ܕ'6SpVޔiPkl&>r;JOvTʑ`ˏ^~X3Ud̸ނ3tGH>[bo_$9zP@!<)* zRKho^8S?tU7 +`G +A3 ,aS:EaLf2 E?G`Ef໾iN)cRyXf52~VRsndgYEB J1C5I ,j +)뀵*%Q>tgLܫIB)o^MsC /~gu ~WGd=~nɺ^^&Ioi"Bݿ&X}. Z[ϵT Dd~ +Jg:8K!b@GVBxU02ˬ z!o=MY@O񅤝{!78A?!.1s jTGkOV!.|~DǟwoDLVxE'{6/Gh&%Y@?t.'7-rYtSwhfkL54H{$9}$7+|T0 =tߛcN‘PMQeoC?uJ ԫnx޲}[?RguXyY@+X" A-\`>⽜<w9~Qqv Vif՗#kbm@eǮ|JbV{[b@~Y&_ãe^6 9$PW"?kk: QtQ JХh"`"ϫ ^c߈415PPI:**j?iRC"&Xx%i^{ +IIe2*xok" :Sj?wg%DP3 RoeY,Pju0(-(Yl*A1:ּ_P25_GLSyGaލV$gz!.FEͥq8]1 1#_eн`&Z{"Y.D엋b=$3\ݯr +w<a0,3PZl+(J') /m4E{7jXOW I7Qi5Om ּM8BkRE!n_^Oso%:[|tQմn O59\Q!a+']DC׍ 0-3TSXVg +Q"mxA6LÑ8fLU&nP+3ɗht$&h}o,jx y\h^YE/p

  • > +endobj +1156 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1157 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 328.032 277.453 336.223 285.56 ] +/Border [ 0 0 0 ] +/Dest [ 202 0 R /XYZ 75.52 63.31 null ] +/Subtype /Link +>> +endobj +1158 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 49.402 240.919 59.536 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1159 0 obj +<< +/Filter /FlateDecode +/Length 2479 +>> +stream +ލl]PR9P  Žϸ .L|0REr\Fp#?_q ) y?B>~S9uWvf}2:Y8Xq-MERXW˙V^0|ʦKEJŽ:H˚٢*_Lr/fH}a;u "pSp3XNngtiI6R K>߅\J>@n(%`6D3}YdW84d5`-+Ut2\{j$U+IR]=+v9[p\,.fPD '+u "*ckg\!g}w$ DI4*74QO&A!5IJ /[&j@_俉ֹr68X@+'qgDK}[nzrQB2!qWzh*MYnlXRIR~)hx<$;\uUf$c!UGEmU.TYgXkuNY{V0Tz_oL26!-|<0ь萨6 _Hc)s{q`|ieJu0V_^$eKW"HPw: xe9Zo/d&a^9ՠbZt-xm&uвzBw ӳN*6 , vʷ BaMWe[ t;F±IvG,J}!a&5hjp7͏0c*堪 . 䁓O}H `eRlkЄ fZk]s>=-&>cm1 =MoEG5#IňgR.VsOy buzzbk|0,$MxY7: A9W¼CT!Mo;zApexfIyjSA %gK8s XapvxHf!PWo we8 [8FHj]Ԣ@PNķh k }4%%u}6ԃ]JzZg2S!g +ЉW +=7H)ra X';+KGCwiါ% J JHX`=m/*_U QQ?&k3nf 9|, +endstream +endobj +1160 0 obj +<< +/R7 305 0 R +>> +endobj +1161 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1162 0 obj +<< +/Filter /FlateDecode +/Length 1891 +>> +stream +aĵj<})(G.G(l%mY7£J{ho7e}"o$rS1Z@-dny}c>˂VG رtyEM׾i|q})1}#eQoDX^'z^F` M@TU1:ͱhF5L* -F&d 8y/vIk ւ7疐c49|[5ɈNJ}HC6Ԋ#.αanm%_Sh_aLq [H7^SPVZO_:{ԖHg\uf}S }8f07IbEi~3Uq(jQؔY1 S+%N.5F$VeM;8 䏅wJ6Evۊ E+F%0*>H Zogo McXm}̢!rHH>JU F {wIŦʭ9X $OZfkٵYeV۔@}HP@H%\n7\u;`XwV{rwVmwI +j$Et~929Z~p$EDVjĭ*<[EJ_+b1,^ي]V+8hD&b&pPD< )?![hNY.y˜ОGeJT1L$;{r9ӣO64]u2*sH·~7)1h&OqjlbAz?G+9CЗ*Fv v'mPVw(z:'J2!e%B0LbǡV]<~Iv}. ^vb""E\3;f~Z)*YKX~)|Ψ +endstream +endobj +1163 0 obj +<< +/R7 305 0 R +>> +endobj +1164 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1165 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 188.853 526.076 196.828 534.183 ] +/Border [ 0 0 0 ] +/Dest [ 204 0 R /XYZ 75.52 56.96 null ] +/Subtype /Link +>> +endobj +1166 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 43.045 180.981 53.178 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <768e2c1d74e2a7dab335dbd79994350894f175b82383c00dadb4887db146d19bdee78606c8b8252392> +>> +/Subtype /Link +>> +endobj +1167 0 obj +<< +/Filter /FlateDecode +/Length 3230 +>> +stream +>MFmaDvasTx뽈 +0nf +Q3 +,=So*Ƣ|9ҜxIg[԰p~mw*]j/)ǹM\Jǃ]cRJZu*;e6aC"X3X KҳI$R.|vϭO')( +< ;@#Oi@21I,^J-AB;xSl:vXfdyezJJ )h?j3c|6W?]ʚ9vУE% ֭9U=% xnPZ]Hca.p{p25UpV0JuqГl vFEHlE$nDZUq)OUo_{Fsr$;/ A6J]fh|& [? x2VBqEKТ| 6tAyaSIG1pZqUg5-3RpYkHK_Q|Yaã݁2uLÛB2Wy־v<"sas w<_1KK~GZ +N j-5jF> ڶ#ʁ ΀"4%A3-<.XHG*!ckθi0JWw3FKoE݄}vPK eOɖ3 +LP׫*o>{9멶JtGT_4P;%\w\X눀O?;#.SE]ȭ*UO/"EH~'y[X69m_y}{0HWdvoWNK*y{ygfn+W}Ń={d\9c$qVWm5])D Rni:y \_?l8 9<¤ͨYM|?pvݛO6&ī$ÔCږjS`iD"{gLϮG iԓu?y%q;⢬[Jmpg>vEe7s<]{fv$ڋ52?k}l߷$h.b9BX; i,e dni GJ }ů!xt鲎_LڗE5` I\FP8f|љ,YBGmAY 0\J8ۚhi,.9cNF g}֤35o6ToK_mLj<[@%̎IG{TMR@ی" =5"gJ{E֊h@m20b房ie5*9WԸ43ҁE* YZ.?=G]/u|2R0}b3J)1%"A;CuE'\!n4NM'zWOo^9JytSkQ) G]+-WY +M)Gv =J\JV{9~IkO6roU=eSj^pd;PGDn}Ff:ǭ]cִqP݋,5osmra,E;dop<3}nB g^PL2(XŚ \mm +endstream +endobj +1168 0 obj +<< +/R7 305 0 R +>> +endobj +1169 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1170 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 128.443 527.225 136.853 535.332 ] +/Border [ 0 0 0 ] +/Dest [ 205 0 R /XYZ 75.52 85.81 null ] +/Subtype /Link +>> +endobj +1171 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 71.901 198.299 82.034 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <1f292a4c160120f1ab521f07dcea77d624b00c50e96bd29967f4763f9da91b4caebc3b2b985cbdcb024c4d8b66f216de2d1dd2a43bc58c23b2b512> +>> +/Subtype /Link +>> +endobj +1172 0 obj +<< +/Filter /FlateDecode +/Length 2503 +>> +stream +uK{TT.`"VeIQp }\)Hϴ(D4&,/ok.u1.tJ}Ĩ3Z^+uUUlWѼ~v@] +T乷x+wt5CH&@Im}! ?]$Wçi[Ǻ#Ywq&%?}MzݤCdȏc0$U./+87Uq EP"FYsY8E[Wmf* h4M3(ER_%ֱmך&˾>WOq~`+尀[*'hRL-Ͳj񰯞:mi֨ +zc)#~Gj: TqiWP%ar'E$ESb(MAH(#; v"d[GwwN&eچB?aYzihlXHGp>Rd-ApU0T#(*oUUGeUcfLx^P +U8kZcYo + ("<˶ ư\xuqtѫ:X)dҚא{]uMѳU˄Qk饏&F٘9rXAVUf!8~&] u&H* u=G-VF&Wk +1 +e(])moZ5`V=s٥ +Xb2P/A*vCxo%p +>ף': ɽ Kyi: lq5BcQc|^e\=E|>hsKؘܞ\0tqշr2uR{Fg4SR$jPG,M,MdN| M2q"&u݇}ahՂ&Q@Sƀ%=t>FߋpSLK=Cr(RF$t!gA2:.9i~_xv7&B@I"Pk6|{!.'ӽቤ9)`~du +o!uIvO{ؾjUwc3w.!:`ܬ!ƴj#K tv[pDE3wzI{(=x]9BG6ګu.^BǍDPUaLD tK)lBPS|񎨀\i|7@QdP66xĭE*GG/_Xa̶ D#;/u +endstream +endobj +1173 0 obj +<< +/R7 305 0 R +>> +endobj +1174 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1175 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 119.662 515.753 126.759 523.859 ] +/Border [ 0 0 0 ] +/Dest [ 206 0 R /XYZ 75.52 114.86 null ] +/Subtype /Link +>> +endobj +1176 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 337.297 447.267 345.313 455.374 ] +/Border [ 0 0 0 ] +/Dest [ 206 0 R /XYZ 75.52 102.91 null ] +/Subtype /Link +>> +endobj +1177 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 234.542 126.005 242.509 134.112 ] +/Border [ 0 0 0 ] +/Dest [ 206 0 R /XYZ 75.52 90.95 null ] +/Subtype /Link +>> +endobj +1178 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 100.952 173.798 111.086 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <38cf33da8eed1a93ac002c91504bfac8e3e6b6fffc4930f70c1f0227676e73dec2dcf154abf5142df611ef51> +>> +/Subtype /Link +>> +endobj +1179 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 88.997 328.94 99.13 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <88d6c405c8cdb1cc59b3fc835bfda647a902437262ceb5c0d4908a48beb7248208c68d03cc5fc8fcdaf94f55320c20f11f94b7a6a6d43423314e4bd492bbc899b63a8730befe455e1aefd2bfcf4942e3> +>> +/Subtype /Link +>> +endobj +1180 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 77.041 231.761 87.175 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <5c08f942443f3f97aa3fd04bc97e2e7faee357c4fd784df85f8b16007e0db9a67c264187d40cd3856ff7360c3bf68f42711b4552ebaf2128b540a2b3c8631a63> +>> +/Subtype /Link +>> +endobj +1181 0 obj +<< +/Filter /FlateDecode +/Length 2586 +>> +stream +9[?3)6zJyu’/ }rtš"FayʰҀwqZS6(sH,apDS Ʌ 9Ug^x "^Uxms/aW|WcHG vFL/i˅SQE6ja?D.ߓE)!f )Q𯕍LfD\@Ï^E@qeX@c +Isϻ]q=fM1Extj%Ʒ=gvxe$\aj`:a{n7 >1c|`A*9gTC(2Ii-7ߧshN>5#oF +a^s5C.9K僱QIbؾߖb/]⭴<[g,i]3zs/wwuI|?gC`Ŀ>$l-y +P6$.Te*C)}ǴCznHd?e,=VDrƊ_K +Y!"Ь_Νo(eSg >E,]JopMmR'5gfE${*ԄxSH03#G Cv8h˃!%Z7SagnZXP/w$,|\u8JLӏ5q8 ?dS6ML4ԉ*&J#t͉Qn1o.hɬ#<.fW;W~For_`_Ђmpe1ct#">ŕoS$zE +|G +:r;=jf/7R^ᛈтuBU:8(g].L2A!(ZMlS7 +JȀ $kJ,Qӈ B}ֆ2q;:cmv_Xm`lMEp)$kk/#D ;d5}@ 0LZBp5nh ]镉 t'v@ kH.#F]2 ݁IhtVJg cت]ŢgnC78)] j%B7mp\ Neg%\y ,lǴi`#2O(7֟ez@D,; P3HÞwdᐃ}cGva=[Iydwo K4zv>sSĸ% t:eљ9^yoLV8pbRϲ-S2rdz+5;)4FDz @ZD|h'lc+\×?7<];7ț gIf"H19I v@MG^#rgdru5of= ٞyoN)匎#3H;?J:bȓ%< (<)HblSW]̈́~uMZS7:hW+pw?~yc<9wmM{eJ$"Gř 8 +7b&hQc+;h|3/Ak8'{b:ԮI(wi2a~ҨĵYqWūx\i;I3]y>/ R[1nH"bKk#X[YbnHrzPgd5:&Db&{uYh$2ٻ kpE+tjuIɒ +<-yN2)v&.i +9A΅$uv.z~=NϬ1|R[j +;Cǻy ,/`ݙ J_䌿΄Hg4eݿMpYT{_SFv-MCC^X"L .gM y޸[v}e@bAa$d1 .b#:ЯDΖYYȩjWf6d'0)BO_?La;j Vb|+ae62B* @Jy*&+aNãٮ{lcI.{z=g8 s>({M'A-8&ܿR6ØRH XynIhPRM;>6쾿~Ǝ.iAFppiPz¯Zmɨ0d(`FHoSϡ57ZΑAȼ^g3d +endstream +endobj +1182 0 obj +<< +/R7 305 0 R +>> +endobj +1183 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1184 0 obj +<< +/Filter /FlateDecode +/Length 2461 +>> +stream +ꙦfmW"Mḍ6գ@Sԇ܀8x |Iu[^Jb~·<&!p +x޸Ֆ{xipC<; +'sԉ{̱j('v`H4]<+J!;ui ]kX53CFl].a0] l.YÚT :wpdTVOMdž(ı t?l eKN(jU + P@+Z ϶J ԷA>́Lkh Zvl.ht} 5abqMjJ^Q^&bSd_DNyk+u$l?-C#2 ϶>Z%wZӋ`+rEb4 2TpO(HsTV.wphFR[[g2]BطoN}?⮷&PO`$!=ᤃ|"-fۓ=?X^X +(K#勆13ZYN Rt"D.ZO&wyzu;5Nd:We~lQ %p#R&oƳsH[ VER3vk ݆o<r(΃μw8`w\t[#ýkr.o<G§9uEU+-+>C)c9V~{#Ě-w$km _UV G4B-Zzc";m;tiQ, +e] 5/d';`?!.OVurtxSq{YD%Q}t +"| w1m|b*QN ['S~GΩiXZ+S_0ūQwCI^A,mͪ(ԝxu2WϞEzeAi5 t~!3Bhg),zBxbd}$xx.]qf"=x+RT2ܧI}N{nTEBzlF{6{kߴf'h;_!0] ZVCah2"Rv %^JHy`Q%GɉV \P/P&T*=zFBO% ]$b O} Cbϯ|k@YAN%u89dN #L4?jr h =7jf^l4JbZ(b2"fLx۱͈ m2FP#BݰC2+Ax/ -em}#&6I]NB@""9˸py15lPN?LDՖLNnQ Pf\dꎭ yI+hĥIA:ƚa%{HY/ +6~Џ{Y:gv|Ynho>ۺeQ|ek~8Sd'˕9+%Q +| J,NoF{"w5Qנβdb}@6?0b]VQ`wкwk7T3CZ1[xW0AKfWTnxu*< be%\wuo>Z]gt. kݠV%6j2k23h!.Ujl Dj.0a1#I'XïPљ3/:_OtQΠ~M]{;z .L$)/$ɩ*Q'ѝ%yu+ (![4` 2C_y]7o +endstream +endobj +1185 0 obj +<< +/R7 305 0 R +>> +endobj +1186 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +1187 0 obj +<< +/Filter /FlateDecode +/Length 243 +>> +stream +:ϬNB{F4n'0)<;7wM]+,50?<hGGj0k0 + +9!,rv>3DP9SƻHp{SL?\ t~cW=W<Ơ$sSI, /{OaYɞ/|;͊_ϝ}\X^h=>t8}8eA[R@.i NsJ@! +endstream +endobj +1188 0 obj +<< +/R7 305 0 R +>> +endobj +1189 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1190 0 obj +<< +/Filter /FlateDecode +/Length 2971 +>> +stream + VO̜d4Sf +ꊪ+tu1&_9`Ydmo/O\g˘q+qo8S=B3QʟD>;1JAu-Jbl0Ti%헣<[@W{#T@,!dh8 +{InqT1nDz/~7 +)PpMֈa6ihyt4ec}WkpFViIzeE6-sUTt3b5~̨ a`u)-@ @ _\U Ed[J(J%TP;O-2Q(f9_JSsG (1<ݰѥv4"m|*{-jn)K0%4Jfw&%9#| +UԁR5!mrٖt/?B`DzMM8`,澄IQ:O@1'R]BAU;X|+}Ma_ƺ a=m~jG!TxKn"5iµUC@+z5!0Wf{}=Ԛ&nr*o.$t^%>gIK%(#L dASR#ΣϟBґ&SzҐkOwԑN%o[߰.áy]{LphtPrVH B:5 d|rm1†0ג ѦITIe`eTsnVOfuu;3 +iC:G`HXFQ:~%z̰g0=fG̋sUJH+_.> +1=z^ s- Ls&u%% Ēh^J4r@k|88j< &s( +T?ŜfvZQ󊕳#ǫU{XOЗ2f Rp8T-j3Njj +:ƫyI}!@MIe(:⏳%~6{$1A2yuoU=cԧJZHQ "HvQIc[tշ4RfKD|C(xX0mPȈkvzPR4|_jU +̆{Cs&0! +"xr ̠ +kA$Ӭ +I + +U֏#|.|v:xU46w=(~ǻY?"M+1P7d5dA \=}h[ @Y;粍9k= ǰ4k3 tƒŪx:DFKea(CdUۿR7l~烒x9Ehr U9඀x8י2C6Nu%(T^o3.>F//s4`gB RF{]48pl5RIО%H+5 z}֗5SabD ˞ƃ w]fHMj:nElKJĚDl fyeMV}#EԪQ&QPJO(R+/^e:Ch$rv=%}P5fZ!]Lҙ,#K1"z/:_u}G鈡A˖R'G#\oyRU4kxrO ޿sl!O4 9cgOL-:A)@*wK|N(ђқАxc$?z_HUdS"O nVՖFNyi $Cy%j۱:@ܹN6a7L"vNBәB׍iozU0^mCuz#02HR2<%iR vxWYng/"pw;$,,+ +txšaS2N1 ܍\N<(?Ue=gP +]@2kzR@;>(>ǻ߭&ֲ̔%c8ʭ1C>* Xռt y8#3^Sz&Š{SLjǏcP +-h5?R*:eGNiz3q%B!"<2֏2[6qfVD(2d^<9Ppbڅʋ17c:q& +endstream +endobj +1191 0 obj +<< +/R7 305 0 R +>> +endobj +1192 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1193 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 304.604 443.869 307.67 451.976 ] +/Border [ 0 0 0 ] +/Dest [ 210 0 R /XYZ 75.52 72.74 null ] +/Subtype /Link +>> +endobj +1194 0 obj +<< +/Filter /FlateDecode +/Length 3213 +>> +stream +M^nߗǻ-j-U&9\H&QSTmҩ w /<@X_./UL0Pl(i dQGCW ⪞CH +gQ @ g.܂:,(VH\9O| `CrV28{ֽؒL$)u]^oVʐJ'Wd>8֣G|$6 sK'kO1T`5e2Ao)+Woy(lKc{^5s Fc{h=c챴K]Zs'|' %n,U0R)gV'mvB25z>07 3ABJ&^~f4DSє2?^X08 O~?D42+)Rcfۜ*{Q]{Thx +KA$?%zخF"Dozʄ2Ъ,®#RJQN, m6_8WbC[|0}[2p!5qy|^frYݜ X:հ+|4M̟bTzCg61,OL%6p24K*7 \'Wҩ z4.D !3J,M9 a{qldmYPx*!y$ A\0R0FAԠ61f.I$(R@ф<%ʼnx^²@T+ftCOln>)@ecWHBں;QfA?U tYv??7T̓-: a9SIF|*'uYYqF1{uvh1&3bTsutMGS̗U_dq; 4NuTkƨ^0("쓻CVsĊSHD%;3ܢf <.Jصy {1BnӦ)NS֔"ibCۣԼ@dCT+( +Fj/?=1Bs[ iI1.8hBa}qZ8Gi Hd)9A[;%,FQ[-;ƾ@U)fʅչP>9(Lܷ.H>;59H$7uo +7G1Om0kf@^Cmۈ]B8g>9Ao^˜de@.t?Պ\/0K @-Y^.LW:܎+6#ޤDg`0 5;vݞVǨAQӕ/ ^ֈk*Ќ*ֈq^xVҨP. 0p(,V7C"i|aB֕x+d[pR6ZC>DE/#7eShcOcДjKB&U'N[ͧ1M>LWnEc+x:R`|EhG?fRsq 1Yf|NLӨpB\b F |jێ ,9EoFhצQNq,U, ⱌWŕ,+#tbKHEa=DMNeZv*>B1ձ3B˲u֜]5C; w}${ >qUSp;FE} BN˰J.ɜVvy.\qc81n\b5>R@fS:q 5LW uSN +Uc^&퐑VqX @uNނ]Rix,aTh@*B|n}G齑IbQGnƼ@g5yjV NJ6O)(݇rOlj9?'jg Y}Re=9<~"LrqG YȂgJj!zGIhcO|vK3={auHD4f}A=!_\i‚aԋrf'/{~^CNk}%wǙ*faNfvt>>_{"b6Y)ޒJŹ`?ZNdÄLw?[zu)t^ o 'HĶ̲y+yjf`u{$_z"QZ({9=(0'rll3C=.,MpH +P&sH9CFx5>Ŝ&SBV#S`(">a}v\2t*]kBوeM9a(F~q(,áhglD->`> +endobj +1196 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1197 0 obj +<< +/Filter /FlateDecode +/Length 2938 +>> +stream +W(IkXlH-r҂Z5Yq6p_FC2+/4hV)UTȯS5-8]O}G4rg>6^ϝ]lModc(Z&;⍆1ʞ"zt6+ S̾cSfS:ť?WVQs sPΣc"Hϱ̗l= 5SS&|X9,rLkIP6Yj!/B{FodBI_lR;cS5#*Iތ+WF*ʍV1: fG7\2V(GPSz +wԙARέQ0IZNWGtC҅BE۱P?,etEFy + C!o=aJcKh{5.Tˈۥ!l,BP6݄v +jy}" Y)BM Յ +5TW@  ,Pۑ4|F #]rۏkh#u!Aam8PHO\ G'ͦPgI<ڟ\0㎞8iH[eut&aG<ϠruWʶoʾSnxϬ1p:NSӼzZQ<&חv e{fGmRq}|, CŜci-37n{Vwz>p޾ fHE#$^>s*8yQBþ2]Vrr^|Kȟ8}}ѤGafjܿnWC+p-@cܵufo+ {hh oOs{eg +Q& Ô. QP&^,+R6{乪Cmm0~~ֱ@oU둪Uˉ9$Xf(+$W H1?fvӇ[v0=*~hX[.F}"f6n!$KGߤUzdM"aA`q!H`<7'IA@H紓5X=w*1?3ĕz03LF , ++eu_/#9u0`6vjO/e[1Ink (<m *dp.z%Aܞed/`|E kTw`[uIweO { rў꼃FfN> 뇕ut};\7 T&&N|? ?t_!l`SHHi+ϖ\G}W*1 ~ 4(~ u7'u/F)槤İ$UcXyI5{_);̂~j}D`̂Ռqj\5cm7R+iv gAсaP|.,{HhOc~3yr@Љ.`G1& cޣ||RNd6|!20saIwZ$FhmI#v8]ͨ yňj-O= e!f5cKmIP&A4aA4FrWbT⎇I9jo(O$/υ1d U1+$V`O~P KF6vá</iut?o=B*C +fȇj 98^!j!;TWlU\r?fF1IMΐI]=tirUXI $C S`/zU IE&G;v68g4E"FoǶn]Q7; "ge%[ M+[hO =!D,R(~B?k4pݴȒg +endstream +endobj +1198 0 obj +<< +/R7 305 0 R +>> +endobj +1199 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1200 0 obj +<< +/Filter /FlateDecode +/Length 2218 +>> +stream +Gw ner`.Zv?y?CF5w|J^6ܤ*(%~: +uLV +8бk,3̲oyސkA`mE#7۱tɕAMb\G%@E jNBtO)`O>vNP)̐! cRw*_Ͽiގ"eimQ3fM뚰G?ny 悲b/ԄeSםsYq*1xE{d-R局* bL$? u\xe s4i^%:;ɊMS;z`V"ReݯE][$-H@o_})r A}oX6* K#ϯ?U]>'|-^m^s$gtXA'Ji-jNƔ[JTcMNUCX%+@&eq4m ωG#'!lGlQ;7)Sx]E%z #ao{Cz31yq;HT3*\|PN 2"VXX;%U`vT_xV| o s"3"ޛQe'f$FAt9AG0.F^V[#\>S$clvADwDZ?3X!3iGTh nC,pXin=^d&tQ5׹BrV]jB_}qmo#@Q"K+m:}߷4.6lI(:~=%|u0Cbp®\'Ko?̯hڨi]f%VWJ_".Z㻶wr!^卷K] +/oK2s Rw~2]>1D{&φl)743xxolO\L%8҂rL]/Cl]2޶{𷴌`, +{ql" \xjm+eH`[k/7b}@rg ?(;#ݢΨ/QK{ĥ?2#u$f.VI`Ggdž[^hf|͇fbI $]1f@*(˄:;oaQ4}(, +"«#x]]6bhI,%U_B.Uμ.O`%ZhщtJX!4h%ZV/I/=B'x-R=a-}®AL+ch 8A-u7S%A9O%$ 8OǗ&B6-j 緶X짟\75m Jϸ-h?V> +endobj +1202 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1203 0 obj +<< +/Filter /FlateDecode +/Length 2893 +>> +stream +A& ϨMs5ajev*ҥ3d-d7]0Ӷ)e!lak5,v#P[l#J ԫ@M2xv<s% J?bLbUJ]0h\` u{cn'D~64iay/q9qxlpA.k}x! yriQ/?%zLO5=hza@#<ʷWk۸'!)c71~}À=o#AzGsz,9%X+ f\GZtmFSXP)Trln]xY9 +cy6p"_N\߃*ō5h|=v! +c9"atQ|:1N$}@k+[ǧ`{XW="A} @+_L-fO5~eӝL؟e=1h5 0hatkr4E`o}CKEŧ4LL);c\Cݑ\ˤȃopJ۳:;~3{PBgdRL{i=*/1wm bD{H2KMTp*U0u gxyM[k4y FVanCFC zz ͐|V.Y? a&( aJI^+6U5%]":iC;k̲`5a%ˆta- !@b)adfL87m, w-^; ^3Q{ +(<vj +?QΈ>{KUkAϼ_WR/@$ 'VjRrYnUF,: #ݯ}NVb^ӛbr' kYUfQKMn>E 9aUD@h^=`s_E2"}ɔi[pNP&|ReO+y[@DJEKg)ΰFoNT \QJB"S(3V + tCRj<3k3W"1x_E,]Nm?-1M/vT֦] ;$NՍ%zta sg+0V82`@GU(nxa};)I$sZ觕tϿ!xҾ;M 䕡'y=(T)fjhd]{ib)78! !mqyXpIeLDo1Ogq Y+!E6rwBFG|D>k`* w#{1йe#qvƁU~YrB&Sm.f; iɏ']" ,HJvl4$R}ʌԪSј$pԈHzY`wgezm>g܂[q1NJ /0[y ;k{TQPlף7x*3jz]Ɯ`J<ϻ5yCf1Sܟ1Y'zr=ɀHc,%]O54'ѓ7OtddwY2*_Ddr17̠x W =<=F㚦m1"7Qb+94}SA5N1t,̹xaYL6T<2s;U,#ŧݣ*Ab̸w39?"9{< -c4|:œ]KCS9rvq)ɷB\Oʙ\]7)gUr8.y]NrA't| V .sIUv\Id7y=*SYjRoՈ7n+,b=cJ0'EeXtc$Q6Q·moRw' Hzc1\ *OE(sp( 0+!2M{(+Gd׃IU¡< ǡҰYKr8g>Yy3_Ŕ + +V CҨ^rQ9&"9a/۬hlhUn◓ޣ8ONW2./o *B¸_6Tup{I8%i aVoWb?~\E DLJ3s`zL͞БLF Smc_ uΘ:Tgj''$JUKkQTb3ۗcgت/ sHh%,T/&͑8ϓW$.PH\yYeCi,^'[E=ބWJ&>PҴ&Q|4M*3Tb3(Z㌑R`ژ"?aUc4  +endstream +endobj +1204 0 obj +<< +/R7 305 0 R +>> +endobj +1205 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1206 0 obj +<< +/Filter /FlateDecode +/Length 2991 +>> +stream +^Q'4/pkpiz<8u=B (]s3h ZE 1 PyvWM?im"XLn[DRx"Y\[xA|F1|ӰX׉GLT90 + ɰ.FCˤHu 2jNlmg_"3e)n;')YK?XBBgވZ':9jm݄p3] q%,̳"Z,/ +uu gdo] p),"!QAE݁Bco򽰚j<4cڿ")`k0GUji +W& icX $' -xfHй%\A/1-U]ښӖ +RLoTwR)8}(gzoU?dqU`ڥ?ьΞe#݌R$m8u8Ь=nIT;UT`h&iሲ \cW1A;Tg )=q]*Ejv]YV%i?v.@}-~{re.ln󳦚=!gEvܸhH9D S;yI) =:0Ձ>\0e=L 2Mxs.c,=YF6&f8] A~ؓ!T%7eb0xg789 +շ@!"Ӂ$ֈc1e1 ?YiDߪ7 0}ӿݽ/6a산X㞏5@2OT?3̌ι7ގ[' yG/ʀ;::ZB)VV 0*k_LNH,P<0m1 _χz`KEba1Whk˞ Xx]@֚6H>8@8"(rݏ{{oI7idz7`EeIs6MAyTգ /N='!ZE0ZtH(GOQ1=1|GY8q(d3 ٖڅ%'SS{F?lg3MV KxC&a%'CuL2H OĆA/P<ٻ8x:wG ʞo-Ẏ qN.r.3" /?]1+Ik + v a(AHݦ Lpb'k,ޭJRŚh89t͐_VT y0qXlr@au#xC ädlWj~9[%1Fcɔ9+&sm's% w-wI]<(Cj zy%hT90 7- y܂\*y;k7j]CbJT _}jo.<ڄ3`^!] +ӥ['Oz`v$>T;- Bɨg"hxх{8"-oIĥVaN˯۫$n9Z͉9Ul[˶JS +w !xm$K72WtoKG-|V + +xIW@& Ď5z _m s5d|1BaGD ߚ-=N 4\1aPlH| ?Ft%`ݩ:nL^Iu%uMk̸?U)kv`"*gMS]#&]9KKlSC+>F,-i[YEƦյL1 +jYmZcc8 E li7t0KSzu1֣uǛSNx%(54_K.JnZ,|V.4X[sG2> $5''}~3 e SZ ⚍Ťdi$X ⨂љZjt`Z{OU?Zc2OO # + :[D7: '؈G6aм"a(QKpL +VTS,WLs 3diMS L@,yrSb49k5'"Il"yg4G$f(hmD;$ vOvPm*V~?Do[X ,Ub%] /vf^*rA esK:MեB:[?gt8j +WR|B5|;c2K OmRE \/NZAhR4<7.%mm\UvMM#~ n>N7p4NA:G;N^ +endstream +endobj +1207 0 obj +<< +/R7 305 0 R +>> +endobj +1208 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1209 0 obj +<< +/Filter /FlateDecode +/Length 2755 +>> +stream +=9UVr K1&{ɢ-+I=l3; +ߌp )2"V^` mm  ow1ˉOo[ZcL+"+iG$Θʮ 5Ξw'qY ^[m!1iow٦hlX@R[8&0b^~yÿ)LzsUA?F*qٵ?ast_>FU腑Kz 7reY/='t%UaS*Q'\˝I KpiBÇ)qK|\~6V+Edع@-KX, raI/YYNF$HM$ѡeاpaߛĥ.Mg3uNئ[QȎO`#U{dI|h@O$eBtx|˅U +Dg\g#G|KāiVE ̿ƿWv։i5 ZZ|C2Kb S7 X4vR՛ٱ7+n/3gcUCݣkV҅T)N, N\5>DSY F Ϳ쑗-X& LI(-y<0sIu皴w%~^%JГ6M pY-l]m9ʱ=Cp(68@:lֱZ Vi^n0 of=Nl\8W" 3^&kg+Ƿk@05~d܃-0N|'/εS;_ GJЄ%_Q]!Q nqz]ܕ{t0k6RM;FFhO$?=Cߌ1 ;ֶ6(Dn$g(S P7:;O.JLVx7Nq`O\xZ`%N:tA}<i,ke1>3)a9]htN/s) m"g4$w?3ɍv..]i(>c!c~.΂W\;LWlP^W=͒`#­.)x+32&exx4#0B{tR# ċRV*@XH4Y\ĦԂQ&и4ehiHKOn{v)[, Rma)7dOk*ZU}mA¡Iи YvX_R J12Wu?г.z89> +endobj +1211 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1212 0 obj +<< +/Filter /FlateDecode +/Length 3068 +>> +stream +qPh }o&>1$^8Tۀ]i߫0TCCtqd + x +“Aj0*qL~zc1xX=UR'g7.8/Ndvs!E#LO$~D֐ MH12PHZnؠmk[:)g?.HԞMN maf2K0o6Zc 7D[Jhx&zc[RzQ[^칇)mR5,x.#.$>EeeUBۈVGO4 2 ]qO,{z,"\p9vz*_ hF EV"sc3]Ω0';X)H J\ȮeR@f:"esgmFAN.<#L_#{W7vȭ/ǒ lŤ@=&ReI*cm@oNxla~2yvIjMkPY4_QÐamQ敔>" [횬+{*5mJ*Ο4ZU<$aK;kwf3QKfrp[@FL|@Xs&";5gnEؾX22NL tЊQ6%,9 Ui0ri>r$4|8جzQv+- Nj5 ;Z/Wͻ$pBi +н|KpP-2~yjé[pOMq1-dv?~&OeG!*n nz9R6{0oEDlК{.P_cahkLHzbY'qQqlJC|2EB[8~%Ysq6NDWn $uǻȭS38(1?FE|eD﯒#*/oػng~x?F!WkeKi۬w[uCEl4ZMEּo\LO#N&W8WD\3ZJseG\,qm2as} -aW HlCT*;m:s~3g +gX ++["w>}+8"PmiE ^)=o7-OspT؉H%\Mcf08]Nt.].і'.fIA#{l]--IhŚ! @Oe8H?M;"x^ Ǚ³qUP{]{bl5=}3̊SG"%lI/WkH/2B%D- 5,?A-LBEQl<`UрbUO(6+Zj|9z@V>kHV*'<*Qw'/ _wKMySB/GEat?0 ˿1+&ak`Z4C3ި`P/Ͳ1QEdfuEP',T-rq;AEv=o S"8%fGbGs\tb +s{ +$eP\A[KC +tEbRRg)B#{m'ؙtz=[i7pm rr +#4r׺_h-b )Π֩[(L|9懃w)O?w/11[h`mK$YRF8)LxE* cqTB`On=S%^ +*udD蒘[fX dunRh>E +glIs ~}sG߭;5oGV$8i#ug@}S~ +Gv_OOU 5b/'P? Ot!ǧ4e +<7f;EHxjgP2YqB r0Tx=r + 8C\MS/u1Zzn_M:_ˍyyh0y3wR=Eΐ2u&h5( ?~*7?y 4hnK7 +ܖ7~v[н1Tym=%% o &$sg ~ۨ,_KюKϒ9 @Dutůc+ֲ"QI4xOQ6~3aH שB ^2= +endstream +endobj +1213 0 obj +<< +/R7 305 0 R +>> +endobj +1214 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1215 0 obj +<< +/Filter /FlateDecode +/Length 2869 +>> +stream +0p%-@׌MQ20l +:r<H`}G[oF "V=!UkY?!xXFu}{(muR2 Rx6-!T[q'r?o\J`pʊxr,=Np.f8u + -BqTxjowJٹ=|0T=up8sR!ybf&7Y)W7zQ +t^%I:`:~x\6}=;>uJ+ǜ&>Uqi^0 QϩG4 FJ/y\du&-5M@=R&!9_C@"ڏ˿59 cyjC4?y?{{/ U%vt&Djf ,4gqoX7tY9;8-0hB"fLI x[6\Dt_۳y#,g-ԏ c{_ű`kH;ZSomsnT +-r6ag z{ f5W:o'A/~w|Ї-N1k;ŋ=1IHzpkT BbƇ]=m-x7|(Gڑ^"M>F{zd7V;H{&y݂1A2&ZZVY ~P$Uss02A.7hq2)L[MZC'l{ +&6Z `HF,G=?NS ۾bnp$PZ=T TrW-BE`z@.7aZ@jd|Y ImXKbf}$`4*bGbtQ] W|$ű7s{?ۖନi 7 it}i +Sctj9J Po+ nl\9 oXe~*od&&&p b~C6xh0< )(2;S`(6B"w6WJ,&ۂn@[HsJCUu!lumd}RQIe,y[D<¥T~5O\>k95#!>w Nb"|B^CsS =Ch6C(YeԏB\Dq:eܼl͖|XXX+;Q%h8a8j=1^Y!xzI$Nώdtuvz9Y5vBo $R.m&^ȣ](R t6(4R3C;MH]:ougq7:96 Vv[jAwǏtXU_` 6;q`BHAjCoqOMB2KCu Myw]?Ѽ/QFX-1 w"i6y#iTZC5P J:|Le[ɗ%7v61f`N} ފsrl\ƀ| IMuB}Ѵ@̲/US^z"f+ ܛDd e^3L P̟Di[f{ { %w#3>֘hapNSI6<6n6LّSN"(_k|M^I0}p]([MsXo>3MP|^Cmb Vy +Mn\Z>!BHA݅)l` jiUԶo5#4N`K}pmaWjb)b4Gb}(rQ"(hX=,v|_Ґc# }>iYl `{{~Gt;!/w/YV@U^svow城;9oNSDbzKIn[Hdc&hus~f9fEև(!{-WuSIBJejLQJ +<JD&cݳ#Y]ˑ-oGSɤM:VZ>D[r/U >D\=lȇ]f=%C-, ɠ]κd>bH ;˪xv$!k^Dj<;<唛s`˝^J+bbsWI=yRV2[IՊIcν|՘R_o[x8l3.…'gbX̳ 9'IIKt؋n nU8q&0;SiÅw/z5$q,8D@,Ηpr8 G0*@ 1yn0w!CO1mUܲt 9vNG;Sqkb CoJУkn%XQO?~te֥\ +endstream +endobj +1216 0 obj +<< +/R7 305 0 R +>> +endobj +1217 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1218 0 obj +<< +/Filter /FlateDecode +/Length 3403 +>> +stream +;xx5Om˸b5Q9'B/=f$ymk?E +%ӯ%97mZιDKv0sb꽕$- 2|Wo% X |>cܯ(lq={""}ÿ߽?OcP̖A[7lV?=7s=?p53pD_$/̙L^+@kШN4{1ͳ-: Cf2PLp!̞ː^0ON.6Қow+ ϽK>_IK{%`(uaS0:Lztˡ8 CZ#HL+ƀ9Fҡ"fsA-s6Eu*ג!2%3dly< + 管X&YƘvGZ$?9Ъv犨R;׃z &ρ-:mh`^K-!e8: $ 跧*:*s߯E?r ^ۃP jQGNYND=@dyE4J!e0D!Hp/ǧBWo0Z2Ne+74D'^2 ? &C a(RDP[@_l-ug"94D=Ib\Gc2\ًzZ*En'HNZ}wn} +З"3h I p* +>Y*.O+  +c)uKW7-`=>Oqe-LMpXQU?H'dpZ\ZmKc]_%oޡd!EFTO.gh=$m]"q {Q\g@Of,Ճ"@VS[m74%!ƟFʡÏӢ, aD0h?PP>#fI//5g6 l2]*I,:pR[2U yɗcsXi!ıX[T5,6i}Ԯ-tN+ZgQ:L ZD_w_^Q" hN?t*vciWsewklz=ؙD DD7!fs%<y}fDM +la s:vM` ZaZ#ad k`ׄ3˽ÿvB),r\V龄fH}smAK>6~y_#]R.nNz%z,G' % S- ~ +f{8E)LX޼iY=VQ9f8b,|IO)T וȆ_cqy`W}/7fFzL(BE>w zeOiAw4#!|%(97ii\!ç)FDC8G?`MAڤ=4Z{߁'Q j^ h ׺7C-ͅs@:h=AQa ,`I0D<}c2|ho@ +|=RGS]yyD~[#U;dVx*qy26r;:jHOxd#iz5ъhd9BN1(M-yg胭3`O+篰r :ű&- ~㘔†Ѹ_~k])T{CzJ9/ASAldkCq'[GK.719f{4[kӧ6G3ZQ! 0rd,͌_~fIp!!o ɯ7gQQ8#0PB+PYiKUy @D\`IPOXJᬔ. +o׉^%#;<,k.hGYVt&,h2RȨ ~^rΓ0}ws>+sj[ѓvٴ44[w!9Q4.Ҍ8t`6T))"] +{ 2(k@Thf݁lb4I`R'&ȯ[%4a ;.Ymb;ťR*c EM]bJ=0BFr/wqE;fZuj(pci4/1F8\ChO<I0,E;GBlm$Cclbev`I6lY@v!a*ZsgFWL~ww)1Fo &썂zYӷ}*=h +6tdՌкy"&kP02l7T=s)P<=7+Er,xr5dE%g;yDPgo#7~_}8QYV==JJ/~XU/K?K ѭvë<5S؍9+|U:ώT"|/`4Q]Ѳln(wM''X^ǘ=y +? .LehBO-FYkAbv(Ә9|M2^A-MSSi<<K\xLAߕC 'zֵiHvى);Kx.V(Bbn\Z/2٨K*C`~Ls$5Ԇ1eu* l=ELlJ2g2n)+tONNaU DoQbPI |!>#[p>~}{t0K-V|橠.AŊmIj,$HqO~)M֑l/A 5) :͎> +endobj +1220 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1221 0 obj +<< +/Filter /FlateDecode +/Length 2755 +>> +stream +rhPeh% Ϊ"`N緖m+۠ۥkD ...>3ѤqimF=rT2Y4D٘j>2*r[WTɂ9Ey\gƺ5EXgQT5{Y `i${=MX(︯yd[#^;jxp^4-~ ^&U + +Ny'Up5PN}-LAvA3]o&|ͺe ++_7M#ڛeԎT=0]hf. J+׸k45'.(zCb^s(y1>¨Hsqz/ky>D5L{M@[ 1V0ΡB?zAɱTo"\= C h7Ùn7滪}[]"iuDYM&"s?G"xU PQҔ uKn_^2dۆ%%~._eAcK9ivf@Fz3 +/Bq$s>؞2]{6vBJWrҹ[38RX׫Su?K?A;i6NҔS )%TKXܫmJǴeݺz3npMKO6?v}Q=w 8gJM֖ +K_v(S/C,x\X| US"S]z N@nI15]tX[2jPc|/ +:/3 4mh1;,I)y0xXC+Ӥ;rJ L٭dtę:h+Erb!جٷl`ԉR _调MV+BaGY[::,E7"[%sSx*$v,(b8`5_`{P_%{vŲ{\od+lύCsh)Fau)wReBҮO/b%g +Մ Zޕ4[Vena%Ct;H^ Fd=59gpY`ZVƂ~.8L +t?N?,;@C`sRn˱sa3"70Sµ&ݤs#kNRSdbClL:'kչ'I ^o%y;cZBC Z+.^rm Ay+P$M>ч5fD"F4Qռ*R~~ +t&S^78=-@j/B.Gѯ$CJ rXҩ9HNC "Ҵ5IzOQ@Ǻ3|Ξ삳_v8;CYp W^DhMl8U c)l셆!'߹?ϸcVaC /9~\K197WVKV` aQq.#@r%[6xz šO bH8Ĩ~pKuj2]77K_3u_Vozy2I]^0{m+TERSB~*_ ̓y_YTr8>%Hr +P\1o?x8PD +[r)c +f9HN!XGʹ~k ϝO6"GK%R{'G_cښ.yjuȟn9cF{ec%'i|'< +endstream +endobj +1222 0 obj +<< +/R7 305 0 R +>> +endobj +1223 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1224 0 obj +<< +/Filter /FlateDecode +/Length 985 +>> +stream +$'ô@ofr no̸&6[Վ >\ 4Iɻ7'}3P`;amm!Wmgz&tD-aJ S5aLۥIP,ͥ6Х iU9&ŋD}GO[Axpk1dz|t \g WWISCBMa;[bJƓIPUQ<(iIݰr/H.s9dآzq7yY=~|^N$v(ܞ'Yd)hq o7v⾷&+@1NtUR0C<9j '+pI|V 8{`s>ֽ4Ozc+2Q'p 1r\u#:|lL\t 8!S- !ˏm?ȷc@S H'avYR~"rGT#J\/$Hܴ?PJ.e{wYwIBT&?']STjjrFL7p16P+\rƆbLmoe2h*n:9ʀ-~0WGs$'hqE!vbyC^XiRϢ"GWP 6!MSQSZ )OC +%fU⨼2h \^eʜ>M+AF +%$ +endstream +endobj +1225 0 obj +<< +/R7 305 0 R +>> +endobj +1226 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1227 0 obj +<< +/Filter /FlateDecode +/Length 3143 +>> +stream +l{br 0076RS)żYr3e#rՈ|VmFREew/%=@;H} +E)@)&YL@JoH{Pa<.={hr =1YYwQ!E\RǏFL}5og0 @>ONC,aο\ÿsS%&Ⱥء;LP>Qz+ ׁwJCZEND3g -J|o:e#vlt_G:lV]WK3wyý8(ImC4%aDWJ.1>d+]$Cs>2#jSԥO ja PnB66y΂RL'1 DzMa0s6$OY B~>+\UR.nmcCM)ui 膥 OL)3CbNQiujk㒻uǐ9#oᄌadPOQ8P%}W)q`f;65}_*Mr Яar:DQB$j`BVH4%]Ioc 0~7xϨiK¹&CwAشwrbO_YvFSݟ).ݷmw3WGn0ɪtޗy=]\Blm8<ܿ: >=f(`\K ?n\8Rab{/ .fa$"s-d֒"4bBP9VD ^/ƂTQ#{B&6zsAD_שBKww1Tr O|cG)-J@_#7i,kO-~-+E!).xor N!PlZ k;IZYKe 5qDmE }VrTf&4Y[SO'zu.~z~dKDaی61 #*Bl~D7F6+eؤmoUs*͛$jjt^TY [ _ AYf6J`LFO'K:rl- + +GaT"SlI˅`XPvSK(617 +[sϚ" cy?7]QFhɬ0lņΌu~PPw?3nJ]+=5w9T4hX)OXX.0AGn:5#l?_.- +-b剉*zXl%QuŒho6w}cEdpk^ d‰ &hQ-E6CE]3~ 9f>JP +&K 3(voQx(ʺ9yT*ƴTG|a8䀻k|hZ?F#A %唲g[*$aB-f KNV MQ` 7xvy@s(Ͼ_]eY&bU,]AGlq/.D[0j֧ZZ[0O }9=u`goT'C+5ok4 O㮊1JJLVr?fn'v>Ԍ;|#Ʒ~URMҟ*2( ?&[pf~SVtab0JoBŠtKI +sFQGiѳk>aًR>j |U&Eˈ$5*%0kSu^hGO0'ʦc ݅紅f̽.۰ =⚊8y6yb`ZYڪIq L|=ǃ24O=7_n FG}7—y-F{ ~h&4 +$k3zzYjX|x!R3g0 GJb5Ykg24rOv,q3nHY^ 6;ft/-XQ&Ǔ +0hYS4;^g;6ʈ3ݸ N:428Bbr ?Ity1hlCs8eSMYؚ 9XF;Am+8!2p0vԘnMzcmhWl:׳h+R\HK;U.WOnT'] %@RnNXI Eي4M+:cWb;8Um< ^gfTr*eǍ_.YoUFJyt`!DDhiw#^w3uX{~Fa63}JO۾ڙ/nX<úrDrY']m%>]Eh\|g4i'X[ԳsN- +4W3\⫍μ ix,$P U!JU e:iY*[  _cG; fdZBmyPT xyOAQBrBv0{4=HÚ{>FyBH +endstream +endobj +1228 0 obj +<< +/R7 305 0 R +>> +endobj +1229 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1230 0 obj +<< +/Filter /FlateDecode +/Length 2837 +>> +stream +|AD9mxYtf+8HXp$doM:+)s$/?qcJ 8ݫNKmCWsv/SS-/"@wx+5|ewv[SzbcDp\PS=yֵ6JRꤷUA_΀X +}>e& !`w͖Z4UEuQ0DdPso7`&߉kjG"$@2,ӥ5>}hgGOMKyc/\.l̨cPMoqfqbF_P3u갦ye)"сl$"s㣜hk|Urwu _&qy>;@( k[B&[|37Kvs;F<<[Xu^ip5)gVA^Ȩ?ɸ7@L`v, 3'-=+ܫ02Gu|';!?^|,:nsx:MÔwW|nZ2UjҊfUu|6j[uY$+;J1Bxrٛ-l7>D83!@)@ +V@.Wh$VPA9W7aWa T'V;V>#6o/?6K[UNJL^Hυs +_?Q [ӶLnY|Ķfa(F sWY$Y+ :=$piJI+؛ωVwKng uJU۟>xXrk,aɋWzPxi,um 054ax)%Pϑ}zukP!*Ɉ1bujWqLZx.N0ES_;ƈq(itX?n,nlAizDNuOMvd?[B%}yo}"̢B]HXq//{s=ך/e4T5>GY{-rTxf50Ouo_F~G>e h~&nA*-]v;oWbfו&mX<9E^<2kL(Gk>)7/n|DŲmfOisl%ML\3HHAAdxaկ爗 ViB_Ad$xk`EQ*:&⷟f:\}uD w֣蛒wrJg-XgD哀.774FZ?G,*JF~_sYQ8-\%:]GTqq^=ڮy:EDk|W)=hǁa{dLaXMmWшIJE0BDi)U BЦeGVE|r-Kvt--ɲ$yg_ &vCd{d݈ T2#iB.ɻR5 O>jvgP;+T}t+ ԎFUZ=w(';v"H:#A[o@F|@S@A^flǜ;^X lt=nms#bU"@2y--#Ds<"mGl: PR6 7'4㤿c&Iڭ\"aTV+=NaOľ?S5(@m +3u!ASb8m[><@)J,%}5#L?H؉_XqnVJiiʕ ;PrC,v5W]h@Y3jbptY."B*;v0J$q#?a4%b.Z.a`y*#*blDM8~}ȱj'Ɔj}pJǏFW7XqdsЋnO5CKiC-h}-fv^{B[=6# T ?/ZAkyM "dZk+rg]畼*|"/ "k䚍(Z@NJ_Mf_fobʉ + +PP*Tjmbt{Ye/oӼ`s;Q$FUGhuK +8hj5.f4 +F<_}lDQ=E%nx)βͬUdJ.N]A +Nf߳ET$YiRF\19E*tƌ~'xy /a[ѧTXHePt\.P-Y¼IzT<u ?AXrQ MBz6AYj߅gLL&VJBr3QwaMN! +0I/]`3תVw QVSH?oG}F]ҜcD{J}?ddzY|o~LpG@fVPh_w`u-)c^:B_!]!1L{z +endstream +endobj +1231 0 obj +<< +/R7 305 0 R +>> +endobj +1232 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1233 0 obj +<< +/Filter /FlateDecode +/Length 2979 +>> +stream +Ut( 3?c5sׁԡ?&yN{s5<>_cD6½pu@-0zaܫhJQdf]PFXݝ0.HxkEO6rJ8H$L9kyf k.gdt@'e9Hću}u}&I&=ueO>ȔY?u^qmEYV9_*M-g/& 5Q@kChy%°dwÖo2w1!kxMsƌ.?nT$ݴ~ ~ُI@c͖ӉɅ2kD^`>m-\X\"^i]Nҟ7ihjo^ h< +fEᑖׄ)çLSR,\ܖsE{aTOWi4 zR aT +hEʹC9Z :zRϜn"Īey˂Etty]Xd$J ZGkY[+ +#܃ҪNjA|z +yg +sm'Zv:*0F5'[z?۹NTFS[YLar\Xf:TU[=q?*{WV +V"=CvY$𿼝07 LF:sStHBvdJ^1LN?a Gf4ɖLQN8H`Y7EZj;[o"h}Xʇ+>/'H{g<O:W_)Iͭ=r,,+"Vp*ktˑ\{|o ,+EPŽhDi;D@M(]`ի)NcέAhMF.7syų_g<-jq7R2K}iU ̝&:$iO_L]mj]T7ܷ9E`, %#L/Kmh0twdNj.j+-W ^ȉ/vOP4}8@[œ݊kӳ'?cke6~^V϶fޖSIC+ޠ +&p ,1IAEmMm㎎7K?,ZxHYwbUe4*c6NR3Y=fz sͮq 4̩;ΪY[h'־+Nk,~ tK*lu*j̯(xμn>^A=QB;8ރQXX _w^ws%Æ=]-a6k%'X4"~ Uߜ3OQ޺'8j`aPъs*I|K[ &K3R Â~qڛL3[ވ^s+;)z( 4G3Dljx?15_nJs4'$&IlbI#b nS^=Fp_eMR(U:oTzۯn6Z\BaJTg28դ?Q"(|HLpJ4z9de:I1y#L(e}cԡV4ECg(qJKi1u2[j{^>ǒ,f1s^8T@(hƺo;-sMEY:EW\j.ag +=du$&")ťhOpD ]wCIDTb޿XkKR$Fvmıi?Ǧ7׫ܺQ^e$!ڃs3% q,MLՔÁ!Pu٨FL(f@4W&"p4ϺU\ 9ZB/RGʠt +RT` +ۅFaWb=jom@B϶er*% \.Rqk3;ЅG|k81Sb@;/)8hI? \XRۘZD@ETc]S?:TRӴ (O#o:Ӱ_Rܬ<,8\{< x2u%؆\y&2, +;KgȔԩ +Sۯh4*vi>"^1mwRv6F8-XHnz%GVaއrg5=.UռEYC<,ߥle\ 4 u +ZN*d$(n7[?LT=XR V׺"j}nq$OSC;Xer5~8,}14ݖCO9ѳ^~^S)Z֍A@Ey @nT< t[i)́Ĉ ?Q6(8f+sƁC¦R9 +endstream +endobj +1234 0 obj +<< +/R7 305 0 R +>> +endobj +1235 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R159 339 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1236 0 obj +<< +/Filter /FlateDecode +/Length 2448 +>> +stream +O5B>Se6A^cWTJ9Q5x*܇iKP= P 掀_j;vkop†jd d.$vohذ7==HD7t2ɼ [WBi2`'h,%eF'r3 tFW2﫷E ٴ!?Ӽl3f[:Rvd%[tMM&?.=c")B֑T$ۥጕMs D[?L$+A|wAǎ)"9ZH +se23O3Lv}/ll_V>#웵thFw *f\o`y|K|QKD'kH{@93!t955;BzzWJQ&sYO2U'YD>T[5V'A<Đ^34 긇lopgKpD+6`3 m`ȵ4v2dЖ$iH`|g#T5Ip{J0|'-jDV4hOeA)t*5'DV`k)Ty CeR`#k .>XSs1kH1g]6ZL{m-S۫W ?38#ױխ*V(v0ӁY2dX`Q@͵H ]DD @EHbB<szo#rem5$b%KPGe xgMuАFZg\3I+9| +>!r%R|x2Q5'w}vs"S^#Ieϳ<(ogњY +54x(ߠtPTo2}RT)o>W_y$~M!K5m<^zH"CC9<2n!Eu Jި*HKcXú'Տ +]L:AT (e0;)F`F%f1Y9v p)\ztȋoYK: -{_cc9YL53=͖-%G䳱Z02+%v(V[7|7#xپp~b}gYSSo1sh~3Әɀ9^@B+,ϝ<-gh*EٽGZWp.f>˻>tMwڢ{Qfؐf~0T}nܫZɬ~a"n./1|RD-]WQòS,Ji!(TF#ZO]ZAiw *>X4J&SYt2h>2]#b<_* D "etCEV8*:lP .VokIz[JY ظE}݊يr5'TGZHRc9%}(YlxY9]PPUv] +;h1)tEic?SeűENqNy#71G-j G %_0GZՈk&3Ɗky Y,.@ydĊ]X:c ^F\JbI%bvnT̈́2ed|Qgi*7]_nb)uiItԁ.uk]%GʞPƩQ:Rv۱!o֝ۧ +endstream +endobj +1237 0 obj +<< +/R7 305 0 R +>> +endobj +1238 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1239 0 obj +<< +/Filter /FlateDecode +/Length 3139 +>> +stream +W;) +}/v~fz[7On2Wf&63QUO|b`q6.[#@@po;hV /2 zV^- ٠7pkSnw_DV;$# O+X}(g(9d{gu#$ӫw<~VR qzìll- `yh6 ӝa}v?b"jyrU"E/O ϳ\栟XN2Uy.r,./&7t +ڢ$3 Ŏ8u0.u$^@`[I?Is~snHh0l$&4K/^yhA֝COO_vOmԖtDAUL4'[,^/ج)/Jgj͓z<$-ͺ\EfWovX|LP'׊&ܔCs/IHj q)Wö'i6Y2j2`+T vgwPR-`ԗ:}uZ+PΪ H y`\"p9?V1,d$S£?YW:y:ڳ +,Pq+ mOXyJ0я.Ȧ!cT}oxTO|r0(Ǹ+3 ^A$vznt\.׍[Ȍ>QvԺ&!]l2H)߉Wi<9;q/4rd5ŀoXVHNoMÚ皐f >ն4ikOmV+'AMbd Ed'T5rqԒ>f7m@1%TAsq@ +>.V +e׍" .n+BK#,?R-G#*؂ܡ:Sy67pI~ψ񼏪]9sI9Gʏk.L(>&L~ЁhnKYcxaٟ9!q]wl54b4 +6 58jԴb;'&X޸;srkbyFe hpTڬ#6z@<ꇖM#&2~ظ*6Cs&!捡DFv&Wm@]mopo,&oCg<+GmL] d۶ FR0_29ﻎ0]r5|??MƉ.#V'ofKn՝ LI5ɢʽ)W1^A/tIB +)m?Q+HL'ME;(yov*_]R@tNR %T-fu:`,K 99MlŔr'WY; `/8b8$* .a\-c6rnY*ȫlA׷eaEZ~hBdh[| +^(nV­LNn>z6WY]5eznZR[B(pghv&b}`{YE[ͼ + snx>8 Pձ@aY]1a7Vϵ/1ݕwʼGqXZٯBUG5]߽瘝zv#sܓ7Zo Sl',p}\P\PC`bzЈ9;Q&9-K䇥 T P{5&ͧJ]~ړm$/u͈^ROC:Of4'0.;DnK=ǃV'/ f +Ts1H +[' +9ؠ\cBn9[|L|wW""zW}<)). l 9G_Yg1A}S3=1ܧdO65 +Dr5AaZGԛcC\ L[:XvZY5TFeOv`)G@^<ʓɲ{~0O~2Mw)@_$,dվ d.ߟph/ٗ˭m~Pj\tD,  47Z`\Ȕ4>;4/Oz[x:,'nP&Gi^WT䏛5FfvT|R\$Sqo^vUi>ƙ%@ewFG3A/a7M9$c6Qr`33ťRJeGwr" X +{Dc `VMIEW<]ۦ#XSci:M?& +Ӌa<}f7PiFViE PA[Ut,L(]xmM/"\2~uͭ0isd<ՠ}8ܢp/'oHZg ";sk9"=P fI:E %H]+{U.(eeʔdiN'@غ4DzqwϑE~E> -aw8i;иQ{ ׎h*Clw{=vFR!RS f2C"Q0nkmCd9?vFWkk17 +endstream +endobj +1240 0 obj +<< +/R7 305 0 R +>> +endobj +1241 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1242 0 obj +<< +/Filter /FlateDecode +/Length 2954 +>> +stream +-9B*hK@M=WN9R)R?j&3 B%SU +iqmC䘄̬j6깸x#x1qʧ9o˓bz|]%(o-2]xH,:bj:ffob>q@}#Zt89nӼ|':jj$ո( [\QEEJ'vraz6W +7kYVRJ\=rLIcf9ۯ( y;QFd|; w"ޓ lG! EݷLmCч)'_ 6$@-W`DrP.Avv8ZdG-8NJ=KA= nĘ i]u%>Ԗɴhs[{[Ј,1߼0i))CT]US1`}i}B&8Q_:c}ՠ_غ:Z7$yFooݯw[;mȰ<;(*Q}|t-.Ǵ 0⑊3R~E,1x{ҽuwh?Ժ F +Nzyg2?5?P)7 PuaND௶`JL?jkBmMoi}TwWk +a*ɽKK"Ѕ,6 iR/C89L0E 3p}}z9!x|iZ=+?a3GO/}'F YI)FKeR"=(绊{F8\u X̍RͽEc79%TZ΀RB5ZXiEڣ8R,0'M9ܷR)6_Ʈ&UTNp%9@U27Dk?U`xB=YfwJR4-c$ %O @,sa&Řd6XC^1-L =N;yǓ!4swءgNjF9g;wԷȃ +ˁFgx 7H ŴG{R-C4nY 31l.ϳza=wP~0f60 ovcxC[̡G,iDX֘fb83Xĺ*0 cKހҋ<3h4(`uN *>C:L͗opWT8?&!]?;\(#/az$TBE6׽Si8oWfʵ]QY#~c֤WΜ]_yVg<|cܫx[*1~J#).;pz]n`0}EܻM>Wu@dg +$Cy/:P#{PP-J [(#pU#Kdں\0AhÀTGp 9aDЖ 3J9;H禩`?KWMSfy1?R0mC2C!|_ +<4ŤR^J?zZq"\:v$jz˗A|u I u^7@6S!ϧҜ,d:Y75bFa͇QqD1Up;h9ۙag0dQK``ۢd>Rd̫#t:Wк%s`Mz71ey+,ybm7R k{Noo5#vGk\2p $G㘯s;?k +myM72<*<~h,>(B D(7vz&62\06QS4zC\&lvfpUsF0~;.-xk'AOl,Ray;U<3kwa{VV3 YJ,<N1@OUb"-LxU~J_7GM¹=骫PX0P+–,d\$&cď rCBΘ_9> jClHkpd cG@z_3&q.Ū*rQ%PZoכ^.W8DDuNx廹E[=p`wez*7u ^'*Y3"鋭.ӆDFo IXuHfp^{):pآ~Еrv'QpE3%tA*FU2 + ۬aPlMQ@ n4ň6=: +|7P" F`-Aa.&]ɂVɋyz ';pqEH:167v\' +&h<" ډ"wPKiJP8//s\{m)]ݼ\BN;SZa&t"G\0#Lq XTX&lzf,yڱ󷎲;<׉_Y!LwR᱊qHA|M.`Jw J"jR4, +endstream +endobj +1243 0 obj +<< +/R7 305 0 R +>> +endobj +1244 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1245 0 obj +<< +/Filter /FlateDecode +/Length 3251 +>> +stream +>>kAK3U`^o-Iby gO`b3<NyL=NqwŽyNQ@BlW5ʵgH;.XgǮѷAŒ| @Lcr/!0\bGV ]T_R,졒W;zTB^W,_0V(zJ]}%NRev?;P~q,-SZry/t5iUΗM*OLf*qlec,a' 2ɖm֨Bn\Oohn9{:XcP?N7.\oeL&VLޟ69Agnܺ2oDWjtWg2Yn+|fpjΎz?; ' qf $&Z ~eB? +R !DF<"3bn9`^){:z&QL-g$Xo ~Fp~j&b+|NjV J7!f"rRv2(tҳ + %7H;}DOiS brit?YK%HGtɣB|j +QbJ_;z׻#1Lz(>nRMXh#naJ|$cihLL ą WN>#"vpK\ o0k<"zDEּYͷXAKAeNƊH~Qo}丁()6t'2qa=s%X  zWϢPΨqX 2g!E;1\ItmCH$iP)vLLV I9:uO96յ# +̬f[{4}Y0<#-ګMUolӌ%{H0h;-'ö /ZIT»@oF)JЪmN$JͿV]m OIi*lմeش*/$'!uZ3jz䂡9o換kMԕT&n~A/;IN铚oz +, :m[YRhZ+][.t<)X911@pTp}2}w2a4&[P }88OV$RXΕ3m]0C< v0jpLd~ +8+3Y{l69ڟןzT\SAS1la7Kz"\1BH܄!q1֋]I +!=F3~ѝLn}w&WI_#"R)kX46yۿ \_w+iDvoIֈo5ؗUCq->ϔnjlz䯟Bs>^Q;/$bC L +c p_؃O ΍&S +L#&'+_jn.J*7Zgs~GhF|q 2vF4PgJ񯧇ߝljvbG)RDUFOg_qB\/~li>Ux̆ 9t["~kqma_Ji;gO~GC(mCv9v r:i^=-ZbEjX~8 ~/vgYS[7}r~Y7tX5B>$}[>&c/&@>w2{%:XKF$jh \~521׸ z6خ]`X +1>uXe/a(sjvf_=g4.% rդ&.!q'5W~ƕچm:DU,ё.Gm$ۛ6ߡ=}5ªfDgnH!eAlw\>*s}||B<ƠeRwl)?Ƌ̭qmLvLQ4o<;QЬ_p'\J'O~g[͎ +p^0N +<5vq!HǬL7JqtLL!9{fr_i@~yVHV/ Ǘ7~8Ӄ({:7D+} w6Xf {F.-8\4lbLX_ VA礮a+aբƠ$rR/(0,F6MCSTt7~` r)w_)LQ,)qORZ7`v)ì{Lҥ ( ߥRO}^(פ/xk * anjVwK>1,havhJ7u4Hd_-Zl+TcҪ,}dh)q#vC1>Ԉwߙʯm7eB@2`di If²bqοfD*n5gp +endstream +endobj +1246 0 obj +<< +/R7 305 0 R +>> +endobj +1247 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1248 0 obj +<< +/Filter /FlateDecode +/Length 2224 +>> +stream +sLB(>@ϼ9 ґe +8l/w^$Y),Z rJRʢRDa~qpIF_:I5Wzj~}8{LFǟHl|,0iO6(Oy +="tqrJM]eL762} 6J{-a,j'9t sGJ{U(ǪԷ02`ZnOkS&%2Ei>^dAҬ"1L B. -!jUf(:*{ȓ]!4lчo/T`䖹^C?(AޮcdO\ٵhkrYzQd@jew .Fc-A;U:wH|`TC4U"Mf8^{ ;j (gFᚙn(՟s0or A"-Pr|ЂfMKLjbEUb3m(LI@NEãaC{%ߚn\޼w*raeY mP^hj0ᝇO,&I*EAD'  &`+G܂,5v 2h%5hݽo͗/hBG"יVhZ!K?mGS$mºG=QR^ OPnr| 6H:-}7dy;vׁ9>C^I'(FyZYF28 7B'-'iLBk$x'NtQ IWHf2EDcpqڞRCeL6D8fo/3K6`kU0F?!DIG"=oȧ?}#wLUpNnCJߎtP2`-AlPsYbwD "UtnSeѱNT 1.k +endstream +endobj +1249 0 obj +<< +/R7 305 0 R +>> +endobj +1250 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1251 0 obj +<< +/Filter /FlateDecode +/Length 3366 +>> +stream +(DD5Wr {׋ 3J!v.\XOCr 4dAd!Qa̞T"М:N'nVjtseAvc*}G"4S9-cwhF%'10+$* +)r_DW::lH9tl ff"^0>Ղ x,0i;s'ד듈!^bSr遪va'6_X|BEkIDiײ,HN +a6\!/ɨRf~uxkVx2}r5#}3$-hrюۦE+CM\ ;q +FUiNg̸7Wxx1K@}3'"g|qsA o̖^(L2|t9Wz@'[(*UqiVRN~'-':y1*KE#.\ }% p盪R+g^뜩w~[W YZTK&4FN =})3p +Ʀ+mLPz`fr7i| ++wYXHAEt +6ϵm1P NdІ6ҒzB,p* QHcMj/ K}uؔ5ⓥg/gWվ +J-YDqO{ʎr B')FgPpZU:=?<' 7//tun{1mcȓRR06jgS/_I SFG92G!fYᄾeGpN=GkSXh5 -6Q$?b"`zƥdA>ć<6kHUKY4 !Q~uZMK^U<_FK# +B˃i'bhotJ`L(=뿮%C0FMUwIQ7d5;c!Zc}uvuW\ii7/D=%bIsȢ00t6:9Y⬟kYqC<5.nMLK9ڲt";;!Њa[%>^Yqvڦ]Z5l+"-D_oI5 Q]@PevqnTS s@M0x)fu#jl4^]tyZƫwߵ[ +'~~;f]Jl +1A1gOӸDFW7I/*qꝮo:D≮n7d0-xmK'lJ7e#fRRY 8YIҴqm䯟6[~ =ҷjOw_%a;(wɟC? ErV(noϝ\XC"̊!(xfL{Sh}Ң3(RiT#\z_E8_ ]}9ZIk'Oםc]Ppi97<%R7=/dίXxfճ ߏM!CV:K-EaTY8O , VF(o%JEL¢i”C5}),J&binޣMU&MUcΔuqNN'Eлlfm[ "SKbnz[[A8zT4yJ"@mH8dxsXRr-!JH|qOa!*I X1Ja@,3~#> +endobj +1253 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1254 0 obj +<< +/Filter /FlateDecode +/Length 2036 +>> +stream ++U*If +*NP~OeMba-B}`hxx)j]1s詃T06џSY 䉾$oj@q + !$*.%WIHE?5LJL㡬q @J#حMR$n`@Bvwց_ΠpY&Ty^ܦ8,ʭ*C8~>мCdM<찺:zb0/]E!_bje1\kvT*ѱ.yHg+OikM!=GRgZu` +C42d-ߦ.u/I:'Nhٚ!g{k<} n6OiRAݿ\5Tv$څʬcKZ)CiS'hJ@ߩOPsj(j (H[]aΡБ==[L ͙-<ɏo?uz~Hk DIs, f)=QM}0T1.Gmw6y!'vM6-} D$>fi{%ioYl"HCNH#W/KB\g0 WAԙ!yyfoӷeT`L_Lw,7]2 2ۑA(B'g|yaťԼ8WN ҋaoڊݽdm a"yv}^;6?vᤆE5K>:#RëgqbVn%#'%bھQPu87p֐ZbX1~AĒĻw=R;l?Tm_PhjQG8OIYP4Ȇ'+n H_݈_O⼊"|B]3bk̿N_)Wܿ1Az-Qw@bv,xQ'8 $KS9ǂI|q_֖[[ĥdxܑ>yoEv0~+4qcVZd41+79GT`x+TkuJ _Wʂ,> ԔUO +0e>i|y +l[;{(]Si8%1YB71YWQ̈́4>P߽i)ҫBiA]W!$"ܫcaA:w1U繡*HkBٔS* e8ƉoExHV56[aPkj@}{qx͡Տ,Sji=)7ѻ\l&xl n-?s8d7 B-Zγ Gھ6ˮ0b"zS-(^}@Tʴt_f")ֹ1rёcw85tgfEP3(x|X%_Eyu7CG@gL 3]WcVv{[L/C0M˓k6WD :!¯OU؂A$=rmL~|$r[өP?ӟ)l|Kr^(:y3۫}KoѲ%|UKsT%{,lM 4=9YVtOa聒ODUIFesCw.JsdD)ԋ'6GSC=M +zn.7hN$BQ51ԟ5wQ0S +endstream +endobj +1255 0 obj +<< +/R7 305 0 R +>> +endobj +1256 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1257 0 obj +<< +/Filter /FlateDecode +/Length 2310 +>> +stream +/H9BH$$SӸpTDBQ0Va^O#Yc Qvʜ}ʵ[ j:f. <%463\ݴ/|:.iľ[7Q{aT+w޳>d`\7 ثպ];E?Qx6ma , b1 @jALVUq4@[i/x$h=k~9sy%ZvCN<qqMdZɛEew~r{Rz.gXeTU6߷$p>LS11&k=K'T!ޙđ}9?eq喀+2Ygljdi|qo?b)cPؒF+mɿ^ 93Ƨ` 9-m_08-ADi&,dM'i 1M!vն,[2ٙqnE`8"_0ٲQRFARp6Ūs?6PءfXU?*({HfQ FHk +Yr4xr9#6,H@l<[ć"ʅ<5ѳ Yބaw Gϒ;)A $QO k]_[ORkOQOT2z\PXznDu0E4u5dvs0ہ'^0Ykz@Jrʺbq]SPZ-Y8pLHv6B8д߉*2rSП[]鬀I:R{OFY6&⪼3[m'sq?.w})xϘGトicd 8B`t✣j0Hv]RMWޮ@PQnLFDJ-`@ ~SNalE`/?dDם1E_U)g/D-`P+ޯUޕyr|@âLJ5w+vpI1X$z S8;S |2 ӎ4n1hS]XY;?L.Gip=k?8,?7NN 'uA8b;jݯAkB +ЕRaq20f~ +3m}Nfi-*䀫51h!u9Xj1#τc1Z*(~ZEN/,o&WC>æPFj6v%|>`qx76BVi<x{4I߀1dvtFmZmCc "0AC@>bI|,Mҙ$x\Y}9'u=/2 +4f׆efC9pWՓ]* }ڽ'kplMpGzO@`zthAq^(b ٟBH"orh, F|Dv/4203vξdouu! +Ot=-7}[cvϱNOhQݞ,*TuꌺqynB"IE5R^* +!l7Jb݅brܕx +vB A{\TG{|~A2:VJ-2cl@k>.[d}>S bFSt#Wo +endstream +endobj +1258 0 obj +<< +/R7 305 0 R +>> +endobj +1259 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1260 0 obj +<< +/Filter /FlateDecode +/Length 2766 +>> +stream +Z1\֩ ۩HtaF'`Ub=ctu4TdCG>DGD}Dɯ6R,vz} ޗqVXHA5 jѰl<f>́p M񡲧kmetz 1AI1'ШreJi4iE +x,:ċ"/HabLKق/y# iOwRte^ +[$Y84P% )Z}SQR#;.n7a=lmeJ1RkS3KS^rm˞rbّmhT$dl&vi dX/::G53[4&ۮY2V3*2g+]Ǜ`ŐLv-u9BAE7NsQ+c_[ u/C`%(~ _{G*NAPQ⛫ܭ]Tbsv1Ń`ŢE ;T +vٍM3wҚ#91-="妈Ө|ƀ*"Нu 3HUpM$t#@EqKj)"n'FryI{'bS*Dɟ1QȲS/ԑJFm<]@i(1VKTc^CaV-g%`#̹;kl5r]LDpnb2b> +endobj +1262 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1263 0 obj +<< +/Filter /FlateDecode +/Length 2712 +>> +stream +Yje)n2Cq0vͣ>h_ߠ/HSAgFD_B^lևXgrsM7|ixA1]IK 3 嬘Х[!|WTs[qeWCj>։8{9ctP4EPj<8N.AT{:ED%[WbNksjLs;|U%e \?Ūqpxpk&h` tٲ +f(oJ𛕥13 i$]tԫu/.4TAF;CG^ k;[(jлA,R_x6kX\TJJ--RGh&96y<%*?u|np({8/-$O31-t@PTpb(]gT/vqp}‰mB +*YWw&M|dmJDb^9rbhz&'H^cũC w7 uW6'[OYȧz;J~鞟?}_Hz_40A!7A` Ȱ*GwAnfEtRvP6 )/ +{d`}piwТg4y + ,FKvni)npG^D"D:Ҧ=揶~< ï\~J0o < +nrAmV!+"#~޲EwJ\&U텓RC֗kiePS_jffL]i-D3Ss8RUnwiq!|O2;8NUu~T8Z&Dx#}Hڣ{YN($]IE'ḶmKkC\EcJݒ%jA= .ww,V&Jk.* [Q9sS]70sks_A齽d9'd BVu#a8M]m:vyQ +1 uxZ6j$_bm#(&s9 +)( +M=x<=;l!6^QQ#yq)50`E}=CTvCZ>ᘲTxq_ t:T@DЈ~i(~ՏiEtUy:ojËtLpb2cQҝ%S^Y\Bh:Z.agZ)H*W(LhZQM SDE_֘[4>KĕvB3ZI4uy8Bƛֱ Qq=)b~Bo9M| J_Sm-3.p,ɟoФ&pLAfm + ż9ҐJ]MJNtcѹۥ.Q1ėrY׵羡o&i:uNnX Gz]$~EDuḻg+3޳76KH9u${d,Oret* g!6Oߎ} JRQxsD/Q +݋KmjB!w6$\$0<ȞLM?v_Au/ H'i#j¬hC28!EY@' ح|qu0u,'fSC4;^iq&C.z˹3F6\iC#.[5K-KuG H1ؔ(S +덶-&Ṛu6:%@&!mWknC;W]$2+} $/@ظj C|!%){R(9Үtk-jPZ{v s6܈?SUʅ\>\]6%]/!)ٝL!IѢ+n;7<eoJb__9tB/mm Isp#"DIp=PdfD/V$S0Ro"N6,:Rӗ'v;k3MHЍ 42LUe8y }f|]!c4Ī 'YhDFx070WQޠÑ`Nk,Wdg}ޛDq})`%o9+~ΎYHBϑG%Em~fQFANS@5Ȏ wȐfV +4Yd +SzɿMΐϖ DyF鶆Q? cQu{.iRY1UdPs +b>niު@jkDߚI_վ8rMJ88v- ʂhѝkf\v`D4|u&rښ1>Ta\c38:`֊1N8c!+ŮQ^(ɹ +endstream +endobj +1264 0 obj +<< +/R7 305 0 R +>> +endobj +1265 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1266 0 obj +<< +/Filter /FlateDecode +/Length 3062 +>> +stream +ubIkG*RBzEJE7tY+ٌVRi"Td!xG/D& =bo nҽ$"`biqd(ZR "S?P#qJTA5H;0CC~F7 /20R)ӅY(Z5C B;.R0#llƂq)VVj;5kE/>#|@RD5)UxKdAq5L$7 .}H N$PVgMmHϗ@cKOGt#2+fmRm'/LnrV/B',)"ȟ> `Ѡ +eg3e%8 zֻrE )&8γ?h&iWI5Z:GkҰB.5_[Rl18 DA.u]8O %n2Ҋ^[xS{ ΎJ@iKs!q7R+2ξbǂNڼAjO5>YI-N,-!-5,(]{HqP.ġhab;j59w G&}]叩8@^]#qo,>kEP_tvVYNeΔ@D;-Ӊ4΋¢J>qWPg ˙ <˚xȘXQއ&:-9.'֣lUUƟW V>I|]qfY/8 U +8dA +1m|>R Q؃Xh[]pp:)aiٕ6 F uI a@zؚ9?~cHHR vIzlOgx +䚉 %z*:Vlic(ZҺ(؏IyE0ͰJS6wD8l@EpN"0wJq9!ԂOY⛟Mf?W-ጮpol!} [쮂N_CW9](>2Ջxx>*7LJLQ IC!sz]}B?s#Pֳ+ߥJGRS ܖCMZk!o/n:0 vk)nZW#Jjk~yq'vb"18)p蚯P9+E[2IJN[v9jv#_aԱ +h8 +cP)̃ɉ15'DHA]AB!=r@[0&n#, +TկZ?]e>/G>tm nrJ|yjnf߈cZtnO<.|vI;n^KpD(MATŷ#VwpE6

    mBNʥ>v3͊< xd&9C<)obl6 FT: +`W$̮5A ȉ!`~'[Y$0M +&g;8< DsЀ&o)!앁EJycN#>̓ +#hvK<);SS2<5WRυAgD=lAg?O#h~M8e"ToP,dѯ`286I"ULu0z02ř &fcID.fUo,\{.DH;. vB{OËUl^.+zLY込N"tSmo QM:ksI:ꩄVU~*CYHaBcd,񕐧ᷝγoǴW $<a&BW$A_Ǥ_աȁfq4p9"YZL0= #QS{;HqU oA@{EWx=C^k`[[ Kxz* /sw* <R;FzQ EU%肌FMс*;9!<57p RN+1z>Pi,Ei2Vb)}墲M[:X1$sz@4Q;y'g}ѭxwS6lDoE^T}o3v46\?8B"t$9-q)oFFS +#Y&Tu/9fyqۗٿ+mex f>$lDgN)_A0YЪZ\c3XY`xV,i|OCi//pš얖X^K'KAhܽiK{Ì~.h'5کMk}I"~R b(teHצ {d`['Ҋ=v Q_XXgi?>1`nz {beZI,miU@N^1H$fx< B.Qj^kLB |1F*k)D޼Y[#zRZg=>K(G<CBś/k=aLUT}gFHA +endstream +endobj +1267 0 obj +<< +/R7 305 0 R +>> +endobj +1268 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1269 0 obj +<< +/Filter /FlateDecode +/Length 2657 +>> +stream +CUA|)}f8kW63mn%fqsJq6D_$,?7B(tTk!5Sq!>( ߗq-p)sD$r0F&[fʵ'1/y}+Wwi2Lg/DCj ~|NT+@m8?͘!l.FG~(©'l+%$N}j8;\6KٗXV05|3 8L{8 +&yW:N# (1uiY0њ)w#@$b `s ]F0fK3$ApB,ҷѱ(B9[3'ufMjk>s̘ƲOZ6tW.=Z cⴤ2"@l?G"M}آƁd)f +WʟbdAM{Bp@}xWϰ70Y@uQ]7l 91$Py'IËh!sIG,Dr*KZ.(-Y]& ^2%nL^6\s,v=bDJC;>jaFrub}ِÓ,;MfM v">3b>xQ,X__ #=A[D;̌ȝ#!yLE7lۢf?&\M8awM ,`)>}-bBO^ЁY! yO0cR/p;F E9Y˫y3ic3%@-ұ@ˬ7YH-sDzr*3)|LB6bt0n]$[7b|oc|SN: qyo{$eSol aK<02 ; V!mdw&mEawREwIO쿺= +QE>%PX i)bA)'"DsL9AfTC" ⰝR +ŋW̘?7g(ذߴ XOa$m}uM glyU0Mȸ`9ayX39]* MGu/@ՍjY +'6]XJ!lhV㹬vO<΢w Eꋠ8N40&[<'SHQ7N<]QA&&ً{EYEV;!҅=[=+el?ݓ8hYE.Zb h.gvvæ4yI>s ܽ `՚_qU3Y8,*z%~2CL Pyr->km!:N"m&#OXOV=TkwnjuT]r\ª:=on?J6ΛzI[z\WE41PuTC4%+Ez牄EToCal!"D?f 0d &" k3QG,C.,KJp3M +HE +e;@6_Fzl +< C X3tA:ij 6tKuzƒ&.a_BqHK +)? C]c1h 8z8)[yˈ!3 DV[ d =>u>T7cz_f!F$R='7u!3"MA % ,XzL=I`?h5Z>%P^ǫf\Q5.d$jN]|MzI"`}nçz2PEY\uF2NJڽRcfɹC\gHFvjҊ6+˷2"wf# RA]}7 sa'aspJ$ 7 +endstream +endobj +1270 0 obj +<< +/R7 305 0 R +>> +endobj +1271 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1272 0 obj +<< +/Filter /FlateDecode +/Length 2842 +>> +stream +ơ1b(M\EKu/ 𓨾:A c}(ur$lA#JS-v^s`E(X+.<21:rIE8v\Fn  @B;' ], Q~L ;@c:@ێ%}fAKϖVG4]͞4kAN S>=jt&دJDT#+<̝,!ۖ!T4TYsψHkAo rk.1u m܈<"wNAQaU Y@&(nJ~iρx"]u[7*v(0$pp>X .WUl}\FBtY , a6jDںvq{)N+[M\u!c̖7mu٥43qsakqD+{x[& rP;Mv^{^1h3)lxA9ܳqY[EH";ӎ~21Y!bZ҂8V"R yo0'˭O㢒\aoR) E @32۳bB Y9=E AY[Ow9(<a%$y(<ڊQ@*KxMm5^4:݁4[]iKa'P+"^Z`_uiUp" {=˾U+O\ G&zh#Bgg.fK`THGHtd.4IilBW#1z%OQJ>nh)ˆ7>flCQH=Ӆrcl +кMX8Nο DN鈷]7g9ҾD(X ܸ 0˨u%/Ll 2Fc;*gQ$2Qnd?k/!zdHξS h3gic7#CG)zOmV'`^)|hz1y{Qd`U^1[&v3E_hQw |yW?[nb[q* '+DۃKUve+iحphMeKRFIOn,Y/P}6F:a70/HF +Uӽ}\<pk ä#&\z<mmW +i)&e7>k%G)|| iS1SsEajy3x{Κu#ޝ| hκ)B'sJt3AGR)w2$bjܡ}lΫ)#J$eioQG!(%A5 lkv#95a= bؖJK{ϑՓA5XQm3FPkQȔ?گ4ZPA~wPG~hr*@ +̧hk~joɬLjgXw xn1shs4U>~lhJyr--`Jqu%&*+#.QReW BBg2uD +)FS-@Ģ p>Xp oz/Yq$߄ {NuRf~q-~sͦB O ٛLO~9ߋP1H+L܄ʁ~Ĵ{ K={h)$5ːvi 7T/-Ӱ꣮(B> +endobj +1274 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1275 0 obj +<< +/Filter /FlateDecode +/Length 2653 +>> +stream +yzQ:s":}ͫ"f>#usW2|7- 2Y#cGYry +v.oӹ48OՋ8*)\vi-=5yW׹JsG늰̐u!Hy"%ݺ[{+4 +v$hYVi0"gj<=ZUa/ϗ1j3q`kWs|gP9r|_'cUFgm-+upe&DN=ˆxL(³IiL +>!yy ǴA~PZms~̝ +"YM Ps0z!,\:_\حX#ēWC lKh6繬95{bYC_uΘ5%]TEF]cSE28pw$$>x1!10P^)24%U(wc25FopS9*5M00u5ӭΠWI;⊟DPxmZgb{ڱL@r=NWY|»+mKx/;}=AÃ).^v'4#9ѵަVnFb1'"Jܧ !(@0(683tFiொr<+I +M:oX7 Lw&3tW1d(]W"cd+|Q*-bh tjsy_JiJ#s$44jfex|c{ID$ٵk>9|!Q6g%$:or8!oO9,WDMAK/L|A[(O<4ߣ&K mՄ]}&`0_M'RupD+LOPÏElG iFVt}R/?!m;6 ̬g)C0' + J/!Z:SܗU 6 ,ilrpx{Rf,@n+ bX=u͈84kIJiQ, +WDZymjEBmV"* MieMpXΐ'f.c);':$6GعE!ev&hmq1*W8;X9E޳oLNl q9Wdd<3gÏ_'6{xh;umK[._ޝݨ +)ᖕ K/kUH:~nz&YdԸVil1 +`1XA&tɝWt%B^,OHO^,حUh`Do|,cWyΎ@_Z]8хZzP +mL&ٚC.rUCg?КbSB7\p8EސOЇH %i=Eu18>nDWs7sPeP7Pشc7蜵9~5~\qG'ؘSmC wdː +endstream +endobj +1276 0 obj +<< +/R7 305 0 R +>> +endobj +1277 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1278 0 obj +<< +/Filter /FlateDecode +/Length 2595 +>> +stream +N#jJ8hGQ? $3iE2l^Y-R}O^mwL麕zff ?bk\cf͙:jq0a[*~f46Xxì8EEPЂ`Rdp<3NDfOQOJ /+c:ǎPBS%7@]N%TB&ӂ!'1NL6IT>A%6cb_p)^ +Hƫy,mk.(@\= +^H6h+AG i2^ $;TjiIx$.9 )zcIݕMU,U[̷\%^r:@1:L# >n&z>%rPvt WSetRǮyA=8aMnm6 +%ֿJhN`NBy2TP bsYKۯ5I5SLslgT:GVg}? %!~v07s/aSl`__9ȢEkf0]q?e2{]2Ix?K ̰=5SJ!ɟ1&I_tZb:' +IBGç{X +oȗ=rFfrm| ?MmξyJk(?mVmƉtKrz4e$?>l\b$`l?/GhZN1 +:_C:~Nv1u<~Bnڪ@͵6VcK\*e"l$_R +uM +j>gtq~%(ʎz\Ө;+}I MYUf2:dZ)V[p[5&θՆO!'_g|ȡ8UOV)#@o!W-JU"]C {xXJ +?l3)P9EvheeK#%c;8c=Ecny*H:஢Rkg,)<ˈ]FpdD]^PMޘtTLGssD)ī*5{,,0fxI |%=֍2Xe0 J:}T! Р2U8OLƋD-GI:d|d*׷pWsDk;XJo.Hn~e$Ǧ~6-M] ^!!ʓ]ũ8r+k^DBVZ?eh?-l70<8?.! 夁/us kl +EwWAs\ٳ{)ij ~+f` +endstream +endobj +1279 0 obj +<< +/R7 305 0 R +>> +endobj +1280 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1281 0 obj +<< +/Filter /FlateDecode +/Length 2494 +>> +stream +_f<Ð`1?]]}Xv;mdȒPɃ0+)LiӪ7J˗bBU/U՘-"2ۃXJl*?gW1&3%H9TBއN8VQ$`di`t-eEyښ+~*} S:4BW_"p}(P#]$llMN‚,+Npp9crspx7pEU&u*A0|b{LYc͈R]n׮LV(߱1(B"x!/VZ?Jm +2&9,]0Ejy?+WVb'YO#%n7s4UNlrwAK:tS + +YɮؕRʃJ( +ٓ5Z8 "&19X9l,66pDx鄡3jOG6T%Q=x/u%k֘}Wr4cS{ syOl3- +q*f׵9lj)ghFU%4'=Yh +O8r~cWacVlf :l'jT靐id #aܢkÕu\qM,=) zbL;W_QXbξH=k=.Q$˂$<êdHH*Fҿ])3{夯Ay۟Dq9FG=Ҍ9tGؠ%=Ẓ[d{JtS`n.?a+ H|s=-.HBBiWQ!axBmVL_m B.+JU=etd`hq]6Q#oS Ad6|F s3"AH.$sao9ycţNۇ5Du"hh4Ҭ+1 CO!2zIU/DDR}箽4 TMy5x3q+%89Iлx #ԅ9B7e=->c41l0.+ )cr;0\;oXs Ո @Wtpl:YK7{7F2Y4˰v v1.tR^hT,f!s&;/a2IR M p"!kz'!-b8IoTĖ!4"Sn*Sר/8kڦT!oV \Z/Ps $_]݊;\ +L@Ϡz\PZ%b(x;pd۞No$NT¤3D'"gHXR3tAWqD +ȡn:ۥcƘ~;RԘ_N)nIF#&%ghx!c05AGn~Kxͻrp|Wjov\v?|3OlНrؔ8X^Unt%)gqޘ)ϐ#ibtOTf@LM"`&; +ZxU5LA +^|!-u௸#:49t";mDPT-^am̚S8%rXNa 6Ѳ$QRÛ{/yV +g(!oW4dZwH';Xs' +CpYQ9Uqrq?uˊxǥyGK[j +endstream +endobj +1282 0 obj +<< +/R7 305 0 R +>> +endobj +1283 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1284 0 obj +<< +/Filter /FlateDecode +/Length 2872 +>> +stream + ']E+&vz{TX-^W +NQn纰7oL,[ZµfT6=: +WݲW3ex*\15/Ds'|s:Lؚګ؆2sjWGD0:5!?65SFBS \cU.%fԶƤm20`ԍ.[5[jˠfwU[^Nu4nmJ})\9Zv5AE"<3ݜ_Yf,ׯfD~/k9@+@_awIx+IWekx IaPfmiy0)Ɠ@l^>9< L0a6cz3=Iu?c|&2a6˄ps0V<2t,:s?%!-ϵn[u+=GE-.AXO9`^.HxoQ,Cm4zO=[CoiRvhC)-e8Q >X4z\t~UA fP_QW~YN^bP fAW$R~pHwPzH_( ZLl.Q/)~`nmP޹;?$^ը8aMٝ\vMZocs[eɶ3ٰ@ď%x秘]zB:/#=7I[.L~\#nn?V8Ou}6_ n՛|ԼNf5j +cLi.&JhGˁ|stU'[3Gm(* ٝk̽ZkC>H~/ QÛ6-taGD :]0zij>(,wN"TEuIr8cYݲu̓=)`+5H8=Pf%j3d6d!*ɾlƃc +a +c+,6*cwDl a)R (N2dʵoŠ@pfdGh(c980W3kꂖ_g!IXVUf=Иe-O0,q˼\@6p}Y3 /8 ߐa?T-fۚkx(d[jawn ^'rHW 1t-}fJ ?=!ϖ<9;]Vԁ Oਬyr6ӍB0! ?nS1sn%y񂶭z%pK#U<`?s/yiGRlʓ kF*und<+avZ +&.˹JQ +ʌ?9gBf\IKx,8\p|F,U.k^w~f)Ьo&LdZ_C/ +R*:gª@X;Եrg=&v @X4ݨVE2KvmRnx$u^ m61Vai>`ǀLj5a||)W ƌ:azmQtMb טgw +N.ȸW:鑏XIE G̤nom7 \Z=&Hf xrhX<N];CUchQm/y}#nE+?0qmoPu&v,NL0aԠlNxGj;0l5 Dƕuo7|3HzC'> +endobj +1286 0 obj +<< +/R201 362 0 R +/R137 315 0 R +>> +endobj +1287 0 obj +<< +/Filter /FlateDecode +/Length 971 +>> +stream +n&˧sبTK{L/|$3"+pHHd F+Z~Y JwUϺ @;K~MV/Ss')r05 [B\"/"hEygr: ElCve  ֯PYԝ6l'97#]X P[Akz $įI?@ @\]Ƽ8U+46p9%Ċx1U)E6rPvGV:؝S2j{FsH;8kR`'‡m)7x~o6$kݙ>6^C`{Q2I> {|k24:IMKκ܎=Ѳ0źgHzO.Kn6ſHpAONںݨT垘1&ѲI$?0@UU19+ +_] N '~ j?9=͘!J5QԎ%}|u b}^xrN|H& +S;u2࿉O 5tmb ma6ގ,,G5*r%̴<^(P*D.O>,=2b=pL}U9!Q'`O֦4s4gQ~b.TtsY!!^R[lyD@[US v?Jv{"K |+Ƃq'0/J̰ {&#a6FWA$4E+k((YahpV'@&қ|&X^ ܴX;9\ޕַNz%]k~nEfUBsbBu"1Pk1/Ү&s +endstream +endobj +1288 0 obj +<< +/R7 305 0 R +>> +endobj +1289 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1290 0 obj +<< +/Filter /FlateDecode +/Length 3042 +>> +stream +&/QYٍBnlR9Q*q%l1q K;}PIQ,h=[]z7JШxЏN⑀%IK} U#C6>:{N4^tʆ'=Yw&ATPh1Gj8;][žy);|Cݷok/ P>5|P`s evP&j񞇿+:<QanrY3'b4Pު"IuVpp I$kA/kk + [PtIeEO߸&͉"+gX6Lݥ8'Ke勤B.׭BXp/MX +>\9xnuW±NAy.I o# RL`L +<6"˗[©Ghh?{<}EÇ&5.?^1p3<ۛwS(Yޜͯqث$MBN%vD|g|;Nubs!a[ NH>p}בoo$i,\O ̌SfM1nԦ E[EɆU,'ܴ9O_UEOs~ĭ+ڳ3ɑo` o^y{`e~+]I%I!U T.Nr0@~gAo>J:Dyx¶~.vųðJ<3Q@*aO~ `>$HJqҷY;"R3sqӉ K<Jl(C_W2 5[YѠQS?bT=r赪]q@gg*B>`dx 5ZŘ]k89cB{;(H| :BLdfy =:EK Uʿ鯒("3V!lu5Sf= '6Gt鳛\-"QTAOȊ62oOo I^[tb(/;. Cx[a(]h.^ C6#H3먜k_17) -&(ᣓƆa8/k[ +S7|$lϠd'L? +-ϐs;gK&cb:]I =p% ++|]6U[Io,9G-A~v7w|Fΐc 2aw":\c@S#'I/{^;jC4Qbݔh_&@ ?dz?e/$j +!6b^4k y{B}QQCu{Z6 mMJ6 4b ^ KI?" VL2~3Y(QX [6W$ێE7T)FP#L!P.gt0d:J K=uvx .@O W,͏UY1*RZ+gRMTnY4q DUb6*JrvI66KEaH!/xb?xM4VH )}$衩fA䞿칁T,g`"p?P/d +<#@-|\g/z{*=H]<ʵ;FlK%w6Lp$? zÚ~a Z `k(8 FQ gW`dJVӢ+`ֳdx 4L+!FSL +MEnq-mѴpD8LhUOȡ2`@`KTC(~S >0yqlg"MS C%h{F9NZ+͊#5W@= ?efmNL?7D8mcRDeLRT%PS Jejף)#|֒ZEeO ϥA`QN9 [{? FKN +/b)bK~ɑW$]#H:Y!F5-~U;Gqgr,tzJaTx80YT8Dd!(BCt %6BWZDRc&v`3Ot.1tm4ۄ0> 5ou+.7+UҬ'lMݗxu$ k a&>Mnid[#@aKw:rG?hAkHZeGƛ^q`1!NeP Nˠly&'L2h`Q| +vŽ',^!] d>jhc4 -d>戒f Fyh) ƚ6}XEYmEc X$ϴf婢PaI/+Vz eCwsnZ`W*iV bP˷A܅ۅ;0hOZ6XgjdBjYdݬrS;['F wJeӚ<0~ϥ)*M`caNUZ&9 >bŗbB[f)lP)̂Jo]ܢPihp~mأo=3Ƹ0ӵ4ڬ}HˢMx=Oi4#kak"y(ތ=CpY'0_ׅ7|B^ +endstream +endobj +1291 0 obj +<< +/R7 305 0 R +>> +endobj +1292 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1293 0 obj +<< +/Filter /FlateDecode +/Length 2711 +>> +stream +jJ(,sqdFq+q1CzikzU#g=ڕן8nzC;*hDt:@qŦj dCC_F N_buf.͟vP~[xVaJ/6=tס9 +tJTdMnCGw_&ޑA2Q3% H_; 0v[` R'9+AePVrHetlVQ/BpQ@f%is$%=7(Vp&BsnW'9.up0>(9=vAӢm>_Tm> B!`ygxglB<_T_ԉx&Ftdi= RW>hhinyXQ8d>~2`An16S0 +O( p_2G7 I +&& tw/HXu@*1G!Xh,Jg` ۿY1NY?5 S$5izym1:1#4^?%ZU/)4u8s6=Ҙ$3|_#&Ȍ#O&^{ {׭+l!68 +:N54ufwYGųBNR)COݸŗВ`(J!Pw!a%E[ۺFmc[#B{U=c1R Zhb_оr'Θ?cUES~z]Z>7 +QIN֚^r&ӅK>t& Ȍ +#ͦbeDF7n9iK+d~bIh svJ]+/kM}S|| mVgOOy4z^h64F`_Kr;eܶ`_10!GPN՟ N9(DKUwTHj0PTf|ô% Bٹwo" +n6dqT41GQZ9}p|FB"1(sF$zvmߜXmQdD*=0zJ1G۪xU\_z:jn*x8͑yC_E"@,JG8s܌cSZ@?L?K 6 DH;%T*n:S~|1,&7 HwqN|igFM'E6f5N +r>F}rS63VWw} :C +p2mDd12^WZu[Ճt9)}Ȏsݟ3M*~J)RFc|sȅxH;fJ@G.k~P (:yq$?2vG' v +ͅC**D5=NQt=S?R:@^7 7:]5WIh[GPᶇ |VT2l2Lɣ?J,t3X;%q.<2HO_ S&#'aSV]vV0.*Tp +UT?3/oahxIedbB~n]n܁U +#ZGN_~~o}s\}f+Q~ ,c8DN! ^L +[ T35 }{rwf6$3>I1.}OE5fez,y"NY{XP6Ve^9upurGOf #:ԇ)?VXDA[g")] +1c\gX7O: 2Ò(r;#}B+-kUΕk~Gqr}kVdX a^]02KR[Ipo6[Q :QHT}\VJ'vS3< Q{clf5cmꎀן~X.|N}“*ڻ|b1e҂û&ΖzdB$U2 D!W@ _LK5-]px.3 KB]h>B/lؖV&lK +[L;~MAG +[x.DhfBr^|NkS +FAU^lnJ!QOk'Օv m]7Y (Lzm(/STN?p<9z=>L&u8d@5V|BwoYY ^aԶvG* ?ʦsR +w◬O GU+TRY_7'fdrQPOTWv+<_6eU߯ Y> +endobj +1295 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1296 0 obj +<< +/Filter /FlateDecode +/Length 2282 +>> +stream +v|nЌL^F!rݖ! !E>XCsKXr/!8Οi"~ +z*֓[ Wx?L&+ '‡-ULOn~ӥzv;"=iܾ^6YgHwgGsl ʘf)0 dd_`KJC:W;+ѦaHA&H(R9<Ă +ޏ'\YŪˈ乽(5%~[p?MP_F,[qɍNM2T^AΣ>nW 16!W`(r*Je=}Htp E4;̠y3"zn e qgثbݴdB,%5K9f')?_ 9m !/u9F5Le Rit@nfGRWD3VYB-%a. F`{}vt? w!Ņ[?jm¯\N/+NzFʖ +tQrZ)C:Gp>@0Z=` ճU5՗U,2#|M6HQ\FD. :>6\tQN"Byn/+4`z.pxC"P"0;sNGj[mנHVi@:c/=CFyoZ!"˝@ :v-*nx1*\F6 0i~]GhkwoJnW<IRu S^s~cSNGl~ {qo7;B$\KU:gÂe_uĻ対`okK ϕon _4 AFL-0VK$jOwɴ[=4NM̟kǓ.<.p2lB&ӌT}\`ӎ*6RUk1r=-ۅ+NLi\qBӳ4GXЃH=AsSY9}]8Yb9_=Ң 'z%G϶ ӏP68< GԾCHG l=&~lB6Bh\3o@v#e,5V&6Ÿ[kjߘ%%چd! zLVRL[/ +0.U >Q3|w.Y&?G2-:'yXqw?Y΢ ?e*ͮLѩlm()X"|B5֏އL|zV6[6v0$v]ˍR,?qFn0^1./_. ±3}fHI1CNhP-+2k{1\{Gƍ .\i?14ޓ lI$qHb[&rUΰ8 ޲SJKϒIghW|fD%PIɫt9ztܝIәE!PlqׇOLoyv[b_)KLx@UG \\mlaU'1*@ 9V7~;xۇVzs{b"왂 +p[j^nT Kdb4'18耨[ufjTb4u+llBEYmbB6a@l\î{\-p>xO%BPšQIcd Ӗ(G|aG +endstream +endobj +1297 0 obj +<< +/R7 305 0 R +>> +endobj +1298 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1299 0 obj +<< +/Filter /FlateDecode +/Length 2745 +>> +stream +Sz;Kt?~Z*B! =>Y0~>֣Z@oqCp!MO *)d味4uSѮcIfzy'Q~lk\=RO7p?m +gʏF2xįzQ㎾Zc~+qn'}nAt4L_ߋ`=c.@&aԲԞP. i_k +nwnϖNtSVZx`2K.xqȰJMIm{Aw)_ET:}PyIͦ^,Ubw$xhM$~-f?jViL'(eu91D2D;Ohch0j-8\7(>0R4%3}@dUcrhyh=EG,$ML$/Ŭ?v* SH >;dFRphM3#7D;E %0],n fT|9,M\`cWN歨9,EQ^ᱲ[C2EDgeNykS!)ƸHT_M /ڻH4K0;ie.-`~*aҞq +WOõ/ >hoB}{^vz4i]m ղ. xfF9Ziwcpj*6A9;A&to_Z2r蚷UktȊsxk^h[E=Тn4R3 ]ds muXMwG]v8eRRyx!ViƷ+K5!M M:(SKv'S=>Hf]NO{AWL@ziwF=D?#s r =fq%1a @dMЧu1ɠZ3~Ԧ|aMω)|}nOqg>$([Qq4SJ@1D ?f;)('-_ܵeԱz PW" +=뫭Zx(2T2d",! S6˜"ByC.Hgm|36 M&ȝ/BR x5xβV:bgj\թޯ%_nq1_BI u'uV!T=^XSDOa4*b^.ZT(W=D?/Ct  +9Hi{;3 נ-?*:\?wx_]FR'v1} va7%jކ!hX$yeaS'd@#CgiK٢I/?FCڪКFjRkzPVwO!?COhVH/7=GWlE9!:wV9iMpW{CVAT1 EJu'[Afe˚D' 4)s +ۻ~^DTWv5|6M鱹LB"ǹ8,Ʃ5x"JNނFbXCȮF̩Y&<+l82e0x*d=O15ih԰=?v.Σ7ApkLH@~`f2S (\'we\blF\t\f[$PQT73/!XL3DHJvo5*bz4Bnm_Jɢ6LOD A,ZV<37B z)ghI;fn~=yP +ṶEΚ}7S@6 :3bIw)iRր-L-p1YژΛtCUVԏEf9;mrŻ(Q`1/n{C ;ۤD=jY+N>'hOHT+TFH%Dž g Fht4~ًnj)`U>0a?.w;Gڈa"6UGţغ|0\a1}PϞ\nJD9@n:w p{纍Ş?yrPt=qܘ RyY_wXˎiwՄi'`t0iP Y%W~ɩ=̐gS> wܟ \@ik6m!w=Jxum*.!17-`\bɟQԌpm`̒8y~'|AgJ_t ߃p>DLUNmwS%XLD(x%N9`H&ѱ4=ނ]_dőpo~s椶U=6f9lW[C. ۋZ +endstream +endobj +1300 0 obj +<< +/R7 305 0 R +>> +endobj +1301 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1302 0 obj +<< +/Filter /FlateDecode +/Length 2457 +>> +stream +u$`O뫹L:I+C0,!iYvSk2Yrzi:Ί{} +VRC+IB_ECqӁos/S# yV%⫙+$_Q&ɫ 3 }|䧄TRP":fO+ ]#C=7ZYxMP5cA-S +`Jzdm|s !,ג)Ņ(*兢?@sda-6`G{Kqidk6˔İpV}TQLƓ F`AW=V|;ZP8g>e5tS+w!S=dZh6(q(7PẠ4tMlH6UiEqe.GXEpMJB^ߤU%0[B8t[xd@yv+  SlfE ~,)Ttx|0j]GlJ&piϹ瓻o(:D(լDJIHbɁl_RBɣ\Z|zA(jצy¬vMUS4MZ,GOڸo!&ov= U 7O_!{P X Q\gёlpK|堊^yk/0{߫f8=!%e +bPޞKSe/Rʲ |vvijR@*XU\eVi=H}0 !Y+{:#A.9uFOn^z(EA`O)Ks6Qৗ_}Ϗ!ԭÆ9I%v 7cU[K8Ht2l \H)o4FaVf}WR f'pJxGվW$8w[Y-ڭ :t1/*u[-])?hU-ț:9S #B:UB4-KDdG:ۡL_=ُdDmaoC^홟s %Wq~!H5D7iMj5뢎B!@Yϙ ^vhbnM2>2h9! |ii1|Fz +endstream +endobj +1303 0 obj +<< +/R7 305 0 R +>> +endobj +1304 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1305 0 obj +<< +/Filter /FlateDecode +/Length 2274 +>> +stream +$Zz4 uF7{Fvlgem9D,]7͋v`.zȨT2 Ե谨Wr'w@ٷ!7I&2Ƅ9 dfI˧^2=Bwth&{J.7eR{Pdt?@(oq jBݡڥ^`ٴ q[402Gll~rb?/l6])]QclLG{"^.M.KhY$fC|}@*a[X@u5~C,{K4+<( 񢬞7S7#;sc㍵`/8yÒpJWxK\rm`eVCOaԙAQj4\`wxT50[{\'R!C L Kkj z.$,+CjSӺL` T27|dOCM@'C%BD`v n +?rVz#ZΫ\,(+pMX"'3V#ټqj)W܄vA+EbEa6͊z*7vpC-{3ͅޯC1ʁNVRG*auo,!%%s#EZ1dFndtLbT2]nXMcri'/z/ D +qD5p׶vb5euݤO'hGg;bFڕ2W]S6ԐFG ;Qj *C'{"hhwj2&PGUq\9aױiFpZ0w1"^XۗnA+u0nU`9/rz GOt4җAFH 8[ߖNx9yR㰅23 > gLA~/` ;TE~ ֨C4+r~/'RgtPa(ۑ/yDn?ߧ(=8b]Xk @^5\Z)vi*}jwǚ:S.|P#:DLFzUBWS3(@2F?:kZ*m=fH,[!iRb@eVlT*:o$0>RwoU)Pf] +!CsL8Xb<~eRB&!] ^:%d}ZQVBB8rajɿ|[-_ţqJ%ݲwb\3&7 ~Q!*=\bm3*@:0`w9[~x|{z&p[<'J;jJVP#ta=5-5EƂrpQFAsG2 Μ{MR&OFeC~#nO=>at(x B}'dUxt $hL8pT}tJEz[]t-m͛s-vn0EZCR=eN6I4P4@B]Q)B݀h"d}w]# qxS>` {&*3u(1ZϹIl8!ӍK=ݴGKw])퍮'ƃ(`B 3[dhYݨ㝖x4c{LYrOvv" +)H +ࣉcA&nf$l + O2HW'h:VҜZ4z%F(bUY0nWPpmP ڴuC2.k (y!BM珂g[8p|sPX9;~xbIqő-ّ<8iWst#ir8٩s65 +"R-VzW2".XS)zXBkd49[_An?:Lt9=SMS24[*u_b<0Z2AȄhiqAM6hjޓd>ȇE#,Axr7Fqg".C%dx! ~4Ee i/%)r/cp0hP+ܣm[׭D +S(_8,tyeHkЬL0O)z/w@i{v,:_,.{+ju:vGT7, Rіo45{( {׷ O u)Io 9ouADi +endstream +endobj +1306 0 obj +<< +/R7 305 0 R +>> +endobj +1307 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1308 0 obj +<< +/Filter /FlateDecode +/Length 2669 +>> +stream +:cDhot\bɽOp_E -.2nP:; jm5Õ+Kkq{Y +v,FwTJj{AAOJ#N9ʏ>ebn|ua$V\Gq\W Y;RhS[íƻ:h rF!:TyGK%XJd ZL&ӁzĂ/O(5:-O}= ++VѼ[,1 y}C=VDirX 2D<]l`Z>j)|IF9ެgK oÂ_"K|%#bmӡ!x%=]KU4Wݮ?v{|8 9;O||ԪZg +Y_^m # @{t֯Ի psc2.ZUIUG"J|T $؋?f_m9/x]=)ɚ#=[{%M&,2"6Q'h*Be&Yī.97"⩧( :ٗQ楶SwvnJa{N9* 'Ak5)Uݒ :U'Y/vm1){g >]az/ߑVmm7{k0BNeṆ^kN]LKE$Ƃ%: ~\V!|E7Ol/3taE)H{O݆Qcɺ dOOM{{\@`tlcB:iѶirhzsGb{!b6(Pf&8o*Apl# }}s +Q0녱[VW2qduRIoR4H%DJnܴG>M7Έ!\ᅂ?4L, H +m1ʯP9FˍSPdG/ 95K<,3)^ppb, +{ɣ]`@3ǪLyjf9R ymСxcͪl(Plr*ѩ_ !$؉D6M'q<8{~H먭0`c8`3R5;' ~d}4ɔ +9[gLgP/;pɇPT725ջ8twIU7B``4ݯ1`!y}S%ř}USI+M0mL.۽?I_1}ig3*t݄tFT +~+\p]xl3cLK-JK@L$,'xY5Wx{XQ;A :A@(̉G7W$X d6islLmy6S +oɉnXb;gZ] +\HS_>$ǯN>'(y'f})ld:izN\Ž;-b`  pރ$QZ_{:j@1~sBL'Jt R â \s3'8)VѿRYiBU @L6[g'Ab8hQX( UQMc"7 ִĊ:'v*n+8+0؟m@e2Û=.sisp[{r3 +miJ<5݈%n6 "}Wh;uʢQP4 : l@<ܮh'B6Cj׉y j.Ⱥ4/!YsTA  +j-]y8M7%._8O!`XO2hP xHISL+ q;wdDpsiw[<jbLjUQ^HilsOq=Q9<-ToNyPAג"U6'T4PlJjرy&1QW\4ldW1iYּ>siQ{GrIFb- Z#Yo6݌0l7izr;k3_ys3 0W@/,*j-`/Ԉg1reml_8?ӳMGVF=9r;n]| +2?2Yn?i_. _Dhj/Ess>F_Khs<k\f' +Fx]ǃl ݦy~7{TfFZqZ9@;9V߻n.G7Hxpܽ=?lAȐC HwĖFAH^m/BT]܎)4)3jkmOEz:rc8փL6m&"'ՠzBSgZK+7TQ +Uub%v,WA3paS rb̤IAT$ Xb_Rw_hB[Ί(NSRdVWn"% + \#%6c lU?hO,o3h`9W'0> +endobj +1310 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1311 0 obj +<< +/Filter /FlateDecode +/Length 3118 +>> +stream +|WNZu5 Hl䗕_죓D8>y8|xrD$ۥďdҾ_F'(>c[|II &(# fFMoヺmt=/SQD`鈶ǒ&,8Na3t#Vd%`p(wJ)0;e~c~X]%L_.)It`Ӻ +;ߩs/9pe54F:.Azc JL\k ) `n][ V ='ش.ѺHkաBQ}8[3^*l욚9G|'{wz{TXrUx6s)R~ᒲ}zyjr)wXvy' +VXwR8b{ `(y yݛzb1ź7އ9y.U}tv\c@R7jo(űa}??%p|r)"|+T~Idpů{*P@xX@ +P\?5$T((.qs,~ +gA$ִ2roC!%y7Z_u +js ac[&\ЌWŐe ,( %o4wp߽\g+,>U} MWNI.@4g+Tϭ &7ɣ@1e9~7&@LnaN {ļuXT̏@Wz{J8}I7}%Az;9 f^m\HbsgLMu?P]d~&eCV8GAʀw!]ׅ[.yb3Ű48_¡lv +.f'zJj-[2K gb!}PCĖ [dU :TZHL +𳀗^7 IŽL$Ƚ!d $Cp@-]m*Y/4pqNh.ՏaW"Gcxf5נv7GC ^wN9/$Z6gu3!ku#κhc嫎blW+x-j et=9'B74FS*+݀@Bpb۷eȑ,/X(+M1G*7+}.!M a8Qxc̯a'+c;!a?9PidfC)r* @h=?h{"MzyrEPт85esP(NO%׿}/gyFhl1\8)z:N5)nm^!!ol&8/? F5)H.4>B3+ć ¯)At紧<*n߰8z 1eSg+DĘyUY`f;E-)*]1*!?&eq@hɥ:p_MO*~iV pqQ`FA*33euNaۜnA:TZk5#HjvJ& 1ADA"6ZueWxOzpf}#Xs]zS*E;9)zKDPxz&Ps*[eą &0Xo&ro5"w"J.%3)d\ҷVNB{ta807N+{W/<46 B>Vy3^5MM/HY:&ԌixeGϓֺ lU7jw*TUN]~.ۿ!bnaކBm~|z[Z +endstream +endobj +1312 0 obj +<< +/R7 305 0 R +>> +endobj +1313 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1314 0 obj +<< +/Filter /FlateDecode +/Length 2618 +>> +stream +V` +7":==L!W8r(eE\˿/3?9(BYJU%!km&w*y9 +k`tU +Bgz@iDc!@&dNo ]'ra|AGb  dSBn딟)SRH(Yctx #nWDW_s`z:n9z3+Vm?+<3XM9c|~M8Y7,HabJ.R}ua d?O>=&E^bxM]op>f%?RG*A^v y) `Rp@W"P ߋU{֯.R/iXi ɨяu6%}ʨvW,.C|#\I$x4$Vjoi\̎dUa#6;&;Xؚ#8+}o=J/uܗR"& ra>O"Bu3m.+)]:&YAeSD;)G{%^^m> +#0nٍnrv|2d)&IH8}/@r+{fg} +]!UʙEqt"Hu "2-F|G=y":yC>z[(6JT|\F~H+NȥRZ#~3*`? QWUkxWuGb27#~sPkǂ=HQJc2 +n&*`T[PՆMMc3ֆ!pц 6-.?Gzcbh,Dթ#YVÓv? rkdZ/8ɮ?rF8U@x_mw^ Fz44]#جŕ{wIz쀢4t(jd4u7Ze4'YPm; | 6yv*H;9~9O/_ IqAX,iUg#PnV50Zo}"O)V˙rtx@HDyZÀbN-&桭m:s^U IhPeɛHtEp?)alR!~98ɥmRh3׈i&n(V$.'v zi;wMw8^z6Ɣ0h\pM.r54,aDɋT-odd?AM(*NV!jN;  +Xn~:;Jλm[SǑpZE񈪰T#ć 9+ޓbk'lH p~+{p@qjy@2}DN0bamrtF#ۼ瑖jNSeP"GJJ_1-vQBPI'i7U5xb2]?ғzԍ:x#_lpj *G6omPZ.AtБEl7jqˢ$bThaw*8r Z,`!l&U4mx Vr{܂M.;G29C0 %QONP3e TaG=~ F3[WG0scձgFaRN?,d!>lR.,ra ~+`^8&*~beѺ dKGVBnd'2Ο"Z2b( 90$;ǟ(BPp$vA*I8*sCNP!-m'4އ.(TKhb cf6Vr%e}f-GxVZD(LT}_(\6RfLU +mD&eD/SpV濵f2]~dEN_oLaԿuX.Le+.mStrmH3H,|]<'(U3)UYkK;D1c'iKka 28zHC0Lo ^zZK?~JxxjE삹g##,>\Hf♷Eos'K:4Ϭ@1}fC3&U%uקۮIq' +endstream +endobj +1315 0 obj +<< +/R7 305 0 R +>> +endobj +1316 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1317 0 obj +<< +/Filter /FlateDecode +/Length 3076 +>> +stream + JfUce1I.k-&i7?TؔlrzG"CLvOޖt2sVrDW1LcuyJ)- +e/]ϕڞ1X@hE.+rÏ BU17VY]VȑIŽNpi#q7-.q_g!6K6eOä ?f +J+'0\P2vLNYq"G4mPnw/ Q=+ `'s|zM[Kb:&2԰d3-FqduR'XɅYNMS#1Rd-wy3g%U˗BJ80Swa1%B?uGo|I&@G-fsG2hîH5@} R?b35/#g4R=xX\*GZma}ZPҺeGmnENʤ6,g=ilVr(5'&ؓ]#*BN@!]HTP6V8bv k)8o!v i h'9* I 2aSeeaGw +JJaL F`ljKja8AR qi_A_B [26ᶳVP !8uk{+Pf6×4?mb +H-ڠy^du?0=hjz7n0k\y=,5Qw: ڛ%!Xe-mJ֪TKꡆNïʖ 68 w8L}?~zyo*|FB- FwJCC-wad28>vq? +tm;ѣhӈ+qڠ0e# Ht,#ho|x2f/Lװӵ^,KըMC_gźMzJ$5kRϿ.dݘ0xo?z*'h"%nR4^+Js͌˙q/P"()lx4ڋw. t̥-("\>cep"bA- +~)Fb߉=+6^* wy}*UB6WYUd.JML`U(rmdl>(I< [rlƸQ~'SErB;ި=Cne^_ 3Gfq31yڑz,'?x*}O3*GAb?i0<#D~ig ӑ3!'wVF".,az":LS>$Udsl䱺@òT^zay<'t'`(K`XΣ ȍ4[œ:j!.[OH(3K?0_Eql!0]]U-ڲyw=R2<ڨBlJ7R]IL +K,1GӰ$.d,N5f.Fe䪸Or0J ?Wh}X^0zQdrOk363%E >o@$Vo}}V(Wm5')H$Jxꄍ˯_ {Q3Y|rx&S:{Y9&ѲvdyБRp)PG #Wڐ`prW/߂Wi73ݒ.qX]*dshlY +K9EЁ,InW>~me TõASy~vnz(@0ur,+bPL#wcg:dݖ_ WC0_H$_#a+XyV*y kGhD/}Q- v?l Qӵ3Xlm|i3~1myCqA=S,g4/E'O¤m̟vVbvTN/KBW#:Hh|s+i[j8^dOiGS#C@K{9_5ELi+z _Og'܈rvPd f7Hs랩j{'} +JN f}N6;%a!Fj3sjj) vO/ Ƭ` ' 0J@P4J LJll:l퉶u5fE`TR1!MXlGW" 4'_Y I@wrT;}HͰ,Vzb8!Zmt˜~?Tv)%{?qәcC@ +>_N(sI:)mCUW H.?2A|>nP8$e\N}ҋ)F꤫5r2q# fujV!CيX5]> +endobj +1319 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1320 0 obj +<< +/Filter /FlateDecode +/Length 1978 +>> +stream +q\W$Kh% c4-fL q>d{˅NTP478+_Ox VyC|=ZoI{b$QS_X&rr%C+eKo!pL.ddxfGC +fT<0EYS/mU_g]?6LBNVo'. Y_h-E=GP1gzޘ{}xݝ@vzooXI>O7nh;jXRNT\"ͮ+@/K8G%!􊟭nT$M&r8~nס_Pi}*_.ruѝwCg̳5\C-^KX d/we_g?E4=ى7O e)aZNI +'a{;B!IX¡QNqB|?[c#i{m7$"c7=BHgU(mFz m8)T]Vo5N&y,.|,va{x +.kYfeA(l1N8M_(Nz[3gqě!*1xfk|7.jֿ̑[UMNJQ q3?T#WXCWKh=4b9",QT_05.r+ڃW +\z'9Un@gvש}o|/J@O]i|L7gm, );ͭW9E:Ked //4/9{[YZit$ xD2gm@`sMWK3k#:Ⱥ[׃VH-Vt7zTWɹpE,w޴K rW2S?*YqFqf?7Kk+l_K(>3^C5}7Q[#A-ac?vAY_ +D55k2u#?x-y]uAANs0k_Fg>5}!<#[׈C-+&YlcMe0[АLD%V>`ZRB%y!K]5PcH\~,ل02 +NQ&~)&?~W9 䛦0Ljv#ZnóϋL1Jq˄pdoiMs/O%_!+<pFqurQw+? zH)gl$+r +TOt,_k(yޒYs`bhf2,!~.@Wp6nvh ws)zL|ηJlR tE(0$,D;ĹZΖ.Rf7'*!3KP{^Ɗo)+璂HK}3 s*+y jMOtUQaͲϹp$HNAcY/ML\W)0*U#VQ͙Q~>[PE^z?uRZK=3ڥb\{]UOq遞ȣd7r3v:$\#aɧ[u:5|3mW4ӣriß!u뚥)>`;6ቺ~hrRˣ/?7V,\8˜rf[,ѻ5bOoU{D*Ɓmxr"Xd{̅> +endobj +1322 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +1323 0 obj +<< +/Filter /FlateDecode +/Length 234 +>> +stream +t5V.,?kT,Q?9r'k8OOР_"07_ +ڥ" *p(1ŽϢP 暻CMW|!&ӿU)< st˓u4yyV֔,7B4'ŖRC V<9%87s&56qMRӐ8~ٵr%Qd1Y{cp_[X̰ϊ§KD"ڑq: +endstream +endobj +1324 0 obj +<< +/R7 305 0 R +>> +endobj +1325 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1326 0 obj +<< +/Filter /FlateDecode +/Length 2826 +>> +stream +S$jiNvH4A3lj'ソJȞ!G-N'xoM"D=NxIQrĒ#˸;GMFS`4U6)RO4E<&XP\Y<>ϖUtjTy`d61Jcdzx~`%S`\@? ޓ/1c@F1ǘtF4%;?>a+LCˤdz>|Cc*߅Kk^X玸""a|nZ{f %@,=iϼl/zO,/9+B%eAMBIHc 9=@B;O}S 2~β7)l_%̑Oook.k _뼬ZX+y@ -P$}Î&oCjDZvԨ!418bԈ(9Bʷ:=A FHVEE}AG&~ГsPWhpOeF*gFDff(U/V>!Z4RF5N4} DƾC7n0 uΚwfR_9sU.;O4 _16Vnu!5iЛ_&7YeW 3/;c}uNAQ͇}lrNNQՋRJ(F2،7S Nj$ِj:b+HͯJ0+jTl̃"@GlR j:Q.eyڤAz2jƨuh>F: rE;<1A_+}b6.59 +!fDOKu\ H.k)?9RBquKH?ݢ+CO!9 H!h=sb^dNNbvyO:lX<;ƒ;q,KЉLi4aM?kC^E X GwEqj7~vRL"3KY*D*@ +V%ܑo\`/{ 3huu$}5G+2@஬cF ),ϩ6vs(r28፭ؗQELS| ƻEB+ҞJi!J<1?QO볽pI؜Uځzo;m[# ԞP*? ]rL F x"RaQ %NTf.r:ŕl087%uoir{NiVec/k$r\/;P7USg+{H:GjJ6vCctV(Fuިw;ٿ<Ζļk}gJd  %D]ðSU&qS pԤT"8GFhG>3_U\]Fp1rcMLylq 5[ՌQJ䖐khwenTw[sx Bӏ;ks"!ɾk҄ZO~U{VCJ5|V.3pu_h̻`]v12oBG|^oj:7m5׉-i̼ "N2 ]D7.B0D Զr*uԂ¯\ 7R@L?1ؑg*q謂uY l|NFMV* nr&ӌVX_]6D\「Y6ّ.P#ge`)Fwf$^zoa@I-sie;R9(4?r7GgUY+RH/oORJ2C]6W v03_5[ ҜS"w-a-b¢q;"}1ɖ)zND<gWbN~MqyL8{etZ\>9GJAe޲% JJŊ['>(P}.zR&/Z(=3Ӈq˕{;8$\uE{,=WJbi(?aMkgY !O'Qz.H6 ["|p5QFlDAư DT;Sډy:M<' nCeK1O]?^9LYj#&`SMJ12UCwCκVBL+"÷22|H.uJ$=DPzZ&*-|xCqz!ΜƢ-l=ĘV9epF'HѰ!|N7aM 8Vp_?/Ҡ(5iT&2ڑXx__$>y徣KBTRVҌM =x +—C?i1HZ #%[d9J|MUԈ-k1:KTV o 2[N-TuB@ [̅-܆+}HΖ:kG;^ ]y~Ę2uF1v4i|q> +endobj +1328 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1329 0 obj +<< +/Filter /FlateDecode +/Length 2635 +>> +stream +Ԫ)g)5}e{v꼭S'j sOIL0jJi{1) + 60Z-SiK(c{y?׶,w %)It8D +Qt* +9=B/@0K)D60 eӐMjf$HXZ1b'-2M>a0NLi:˕Nt.83 {^!f% P3]sW`)]6f0=0Cm&S-܋/ߟ;b̥fk1 x7VUWn;GϔS]cףգw +s@OBIγ1ɾ$[CMṠ _;^~l)6ũ ^Vo< >iTu/6"d\ y =Ux5!;Ձuա!2'-?e, s?ɱ8.â(4dʱخ]̔ږr{7a e470=59tY9|,"?`>E_(D[%ڍ%`J34 + p y_ V+_dPb:Z4gszUt4C m$ +${j킅~@RW:H%4 C`)Lz:ʍ.1sNc\Qp"vpC'9! t[o`G@Stʪh?>4ݿ0#f9ùoqǗM>x0FQ)`~ٖ+NMꝳ2/!k+.^8BA8dU4.T-}jMFlb32+٪Ď8\QgjUV],zˍ| %h&7B;bwz$5ﮗiCiW%;F4ث090K=<ֵ2jg7oƯ9j;fn(do=/;}I_'f@S$8'ѓY9ҁ?)z- Qt s="pD&㝑qJ+"GtjDHriʠ g앵ц$.S as\-eRsw芒 h۸O(xFXX!5sў kmJحfPlxy(SU7fEUmT*#1#߲~cW!hȄǘ&҉,_^̇;p~޻;kO}7SB'9,yCt!-'G2_61R|D\Yvgkj逜9mDJS1/Y!%*ZK Bu=!÷tsN"t#H <)| њGz_ffi*ΣПLaS3i^}18qHg\`,EhVB|,7DFD|\6(o 0p'v|Z(ni4ގ‡Vbo+@cd@Y&p`T*]lw Wd5m ^Y[>CB!Uj *\Uw|1Qux˃!3w) /~+R* G)f3I \ tO"3k0f0q +[ +`4\5la Y11:毚gu\?9zy^P+ZZ7L"" ISeHY= 2ƒzy6.hMTy0yh ^)S1;嘪pC~b1pGٷgH:sMfCɲ-vo= d6l t; }n\.'/HD^qE8<_|"~GKv(fg3{U4zdmn O|M`zÎܹ1ۆ.Ra6YB+s=s0g=i'P'f%@p$PؤN^f~6 lJV3aKc(u ,_&(Emވ_9ceBx"lvK|Xq,D#ʺz(o_}e쁠<~DwcΛ06Z嫏̼XwP PM&J =ky>Ϩp%>×kHK[$t Zds%Y(; KU +y0{ AZsq_'94gGzKݺVfsfTLc0LB<2cȫ\زyټdvh_ĩu/YgB{\(RݽJT9.Q5N9gp!`EPsiw4x 3jS|Wŏ]Q~oR8oX?ǝa6Fy@JA)8{p"Rh{CO۱(?:?%*vir{@}wvhN-tvV +endstream +endobj +1330 0 obj +<< +/R7 305 0 R +>> +endobj +1331 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1332 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 231.58 537.927 234.646 546.034 ] +/Border [ 0 0 0 ] +/Dest [ 256 0 R /XYZ 75.52 81.46 null ] +/Subtype /Link +>> +endobj +1333 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 353.089 278.652 357.075 286.759 ] +/Border [ 0 0 0 ] +/Dest [ 256 0 R /XYZ 75.52 69.5 null ] +/Subtype /Link +>> +endobj +1334 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 67.547 186.989 77.681 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <1f43b13cee1a31b72be4fe4936b07cf6438764eb45efd4a629793134f5429351f67b9c9d75e805> +>> +/Subtype /Link +>> +endobj +1335 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 55.592 222.637 65.726 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <3e8424b2edc58af992bafca228e62429d6f9d7207f233a0060c0b1d0822bd225d5b72a277c80edd3a91ecde29ed96bdd9bc7d57fc1f2ae53> +>> +/Subtype /Link +>> +endobj +1336 0 obj +<< +/Filter /FlateDecode +/Length 3037 +>> +stream +`óӳjB OwT껧jݺv#7*H| +݈L2VsrC`Y֜srH3Y/Ze+k NDu!ВgZ!9Sg  F_xmM^𗩼-ۥsL0]MʤN >_K/5.0߅o3&CX&z3l낲mLH]F}6͒,e#”q` d$0kã}\{d,I 0uÀ0v1- "t wBa_). |gd,|2+k?8g;Uuuvz1iuM.EQ[?lD4dIn/{%b":cPPܫcOSJHgnaR"EB +"'5)D> +wS9(i(j_M-8ʓ%b)5/pO21_6&EvDz(Dg Ãc;3r d+Jh]]liw-.dNp֓8&诂^F_2٦kL} TlKT"6^T8+~OA Mol~P#!ٻ\ ܰs8JO8u!ɈY406Ӌ\ [Yql4B&(h,L NZogd*SiBxtZ aNTzjqgHUu`J}at@X;$Xft7A丹zK ]/mjp6rqvrxS;l_ ?ݾT,Yu12P<9G54]l u?woAAv0Oikp:@չ;Ė&eZCAAPF08!p dsM]X woNPٌПnFtR[·J$ϡcٗژz; Dp^2 3уl؝ f<'G d~ IuKjE;6W1-n3 _U:Ǻ=i$k$ۀ#8 t<\cb=TKb=5ã*SG2Kۭ]~*k6G,]7uZ={/ɉG{=Z\U$g2كtpoLXEn>&Q2Ld4GndMCA' l}{Iq(ME?)9FW]oqCyZx;k7@Zr}8"/o;үdAR ^셟E9 +l8ouEm6_0fv$kO`6nkM;Hx@w^x~:}#P/i]VÒuL8RxfqpF< +ch^s;\HnVD܆/>>2UFӚ@˹3(~%Gs:>QEMkQS"H"^! (F&l=QOw6S꓅Tbl5u8jsON;C{5gj}{|ziEvщ8eOZb'z6,ǭe;B(y0F +zo6Y6~/ tp!D2Z.f?ht_ r b|!O4f<%pp7*Q0{K. .1lp"aF-H:allUF\ 6[PQSM|oWҦibgсpBA۽%63$}gb +endstream +endobj +1337 0 obj +<< +/R7 305 0 R +>> +endobj +1338 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1339 0 obj +<< +/Filter /FlateDecode +/Length 1466 +>> +stream +$L =xi֋^nGi^idD]тeROW{T24eT&0‹D |ު%/A~qRAN"3HZn;!}sf,.{F&;ι"9<`G 9Rg~R  +iL@ Y43+ܱEw_.zy,D+!Yq,Q2~pՋ +N7҂ %v@1)8uG8:D-&HXj̕C)WFq(;UĿ$4PCX% 2lj [25]DJHڭM={e U&@( +{m Ͻi#|>8S]H +pH.נr8ɾ,tWke?27c +=`}-R*ghZ"2?VN}+,FJv3E~yE.K +@,/`,Wzޭ2R^&Y`@ttZ` *zOc%N5cK//dl:+ +ӭfٛ0Nj8e$3m%ꁥOBA+uѼ> +endobj +1341 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1342 0 obj +<< +/Filter /FlateDecode +/Length 3171 +>> +stream +%? v@FoyKsW |Bs嬺S>FGS1JGnFܧ(: +TfHyfue@ZǶ:Ef_e~z2:1D:/ Ov>8>'joX}̵&hS]_nXVwvLCN?C͆By෇S2k}\c3ޖTQd0K9ÜlW +HΣz\3{,ӟif.rbbqFz:S}|v?oʙzहJ+QB9BrowLFUƔH [\&MLpkJ(<PXD 4`*óu#Z^Vx +7!|tB:SҤ&l6+fO,m.J],F"b9v T}i?^Dmg=rӧᶜ ӠU,?͌\$S߾Əh9͂4 qg#rETx5+2XE1G^k*8$Nv$pDjep@zCig:ja^vUQmGɺ i "` 8$,rjw7R?S'd}Cgz0D3{h`\]UwZ.y I% x$2XΫKa^G+$RpMh_ǟ0\^jؗ|/TjbKXm=U-/a鲿ݖ#>*ToѺ88$ k6l7܆Q~ j6="ѿl +4(s +T Nޕ5F!"He&Е +L׆,=tyQ14 gͱ|gZjC(}=SI'IQ >t:I!wF O:9N2 Ic6ۍ50W|@`o 8WK=~˲)46ZP`jBpB^*Y2:.A޿L]|<۰Rג/hi7-0MxxM(B`H# tx($ esfɾ|o3 ="bq귑N9u]soVnIr1^`.sa~imQbɼBYR衢j`b%*<'L[ WYNӒ*yOSUk掘+osf~@\(7 |!>p2^aZy <M>ߛ+JV㍼ *g#莣4JYPBIo䃽F|ħz/3YGÃ6MM{T`[+[ Bg^U, {fߨ +r۟g/[4Qoo6pD=T@Rס?ZÚ04}zšO٭NO/3fK\9$BɎz'+n,MƧC8D22zAP]d5wv hnVtr /ZTa$]H*tL_".S\|O?Xa.7ѠCzV;9U_KK u qopF{vzv[Ql+6cT12Зkؾu?XC)Ьծ@ŔY>GF6ޗ"!9"Q?Fa5}- ~-38ydAm(@$` ή{0 cG.qרtYz.K¯W1 JnVd>yu0qURڙ?i9+^qʨRteM켖ࡔ`dcddWq~QoJ=j+֢$ Ek+jfik0aTG  [+q=}ei Zf`e v4E2gyn9L̆7r ԠSpf +i91bbh;li['c +r4!qχB %plfbB|/nk8wcP'FZƳs\lch#"(r $Q]l(Q*Nr}kp1;pz^tUSr.}O !lL8:d:Zϛ)_eX+)""r>Bm h1&:` +k/ы4\crci=lxdsgI>!% XScߋuޕt'w[zrvA*‚y]|=D'4D#,egV,Vβ:JgeIT[3Q0|B1u`v 4z,ȑz}(`^GC}UVv@0E]u1A*.U> +endobj +1344 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1345 0 obj +<< +/Filter /FlateDecode +/Length 3478 +>> +stream +ŕ'g;0]Y$|h#Hꂬ r^6֥ٚmT`.'NE"?ԤWZĎ>+]wCSGOYK^;)+-Kf/Jְ@hds̯鳿dH[d[F j6BOQ[qgi`"ULq!pJ /{V,I3 GԐqLHk5&fYj*7\VGԉ#zS-a%7&%ZO(x4\0+LbvN(]PPw7lm7 %Du.)RC*ȬIJyaZ`EMa'K\j$j[WiI1d: Z5kc9(&`711EFk9|qiIPHtd# A{NDя48b4[xP˞W۞PGUAȽJ"_18zz*1lwA-W뵺kyA gWpAA_`~c)/#)*Y2]S|Q eGGݴf+ ]Wυ`ƚo2/~=?e 6a +RMj +߽nOvKۧǧ饃~ \EAP7I/%~2G4·0tI;8fx#5BJI3`iΤt![D8W`YI9~390;B-z| ZSNY1s&Ί@uiw;2jLNҠmɵBR$F`Y3 +,1G@5OM%$EDEq!һm0ūuwX?35LG2?+B4MG>RbN+Rt$4t`P' I;Ų5fVeH}I4)L/JVKip)w&Jg5jґ凬'ӆGsZEW4͘IbV}tLje)f`J E >*8EL̐L{vʤ"_JeU_# _[ja_8DQj9SmRük{=/t"ecqG^/v9 +eka/2A;Xr8QF9c8:u2ɡVCkb;Տ k u1O,:OnmJ_JtxDd]>*E}?Jn@5,2ͅ3a פVSs (UU*}S Fg{\W%E傡Epi(W3pTfD}əݬ̿jP%<8>[fƪ|\kl2莆 㱤_DNg>Om*f!Mى {Oȏ +icJ[VY;a:]fSڈOt,oYRG+u +K*~+v3y29<Rv9¦-䀀<`}!msElL] wetE*ʶ!Owfmy⋫K@'iSȶiv{'d4#=)Ō{g +*)^,W+P=3urJNh3Q٢d18"t􁹴P9 Yl'X>`1 6)zk! 9!51ӟ#_6^+e@-UD>wdy% svlkK*NA"vw O\uf$gU @:.ȫƺe/ɇ +IѢ U}\*\Y*Xʁn3RJv4p/\8Je+={xo_K1np?>6e ɆJ$Mjh,h(HE$|4jҔXd;3"Rb0 q:! ;LL<'aOͥHv_~N'Z|&x|P*ܜ<-1ǀs? +CaM|J/ZAYs!](Cmm:y,\qrF|gsE[Uip&E{|P"K*- ~%)-l` +Tv$V1Hѭm>0 A}z@DNwM7ҝ_T r[,:C͚(+e8PLYrC1Tg4V% hdžX +᳛MRC;l~a]L㍳*`$izxa&X P(4F@1HaLZivڣTJxr3Քk8uwd;H8NFS<=GG?`/X7T+* fLB-g5OfŔBp +_Sv3dr;iY,ʃFRmj!sKWo6 ֆC۽dCo[˳ +,O$~/_=-}PF9Q8BztJ鑳_P 73fsUHxnܠť2cP5jFLj`0'V]hZpf9 +endstream +endobj +1346 0 obj +<< +/R7 305 0 R +>> +endobj +1347 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1348 0 obj +<< +/Filter /FlateDecode +/Length 3109 +>> +stream +ްOBуwvD]XG0,9pˆޝfZXzvd[>A%}t +[^KL#홈7ϥW_zKZ(#3P8i_! yoǼw1{pksF__#wt'- +?S+|zKS)}mDAx,íZŵ7>C\ ץc V eXKǃAcq*:;>Cw==vΎyXbxk[u"y-H0!Cu(b<55i[*vrI}o鵃ӲXR._4џÅpłQɢH~sXM!@=O&whM9{V_8Pq`bX) +C=-k( B5dU/jw.`1Z=kPڭN@^;OF~kEyF)sz{6Z +>/[ +9E܋.U$K +AodD^)3[CH컪wYUd%+((鴲{fc.7ܹOʍJ:}Եd#"iL(Mݐ6ߪ]vc>~ U-h$F:m).DŸ$DJ}G`xA\^]RKU$6ZD\Q/r%.vj)}4şdr @ԜŧxCQir\:yogذog0 /5F;k9wK5QF!TѨVhs/ah`Cdq>T*K:C;QfnZ##i T8u)A_P8kޟi2!?Eq拂0`m__̚+kL;3R0gΘ[꥖g?c'dsutcɤe۔WƊ%K!)!LJu939Y; nRT(׆Z{6ru!B)ώ&bަiRk5ElSş~8\0:"R1Ωf>f{=`&jx״8|_h9'y`!%EQRZ%j{h!C&n1"Uw8:9-W`X//VF['@vm` W7߉~RpqCOݷa8EiAiMpEGƁG}ϑiސ=u:߹`r=A㤊SKX8=f, ?}Kohrd, H•O$jv4xԦ$P-3#GywN}v6(<:J_¸=US?opą.ʸ;Su{]/ +)2洃r^nٿDn0r]tHח M| JӢY3F*uCoPkQ^4^ j*iGF +q6(gX@2pCV<&)yoy:"'?4Ʃ%(C;Ij>XKmV%h0QQ CBXѪ '߮pmgߨ;ϐlA3n w06'@B(iVwDPBEefa') ƢJ ?TwvխYE(v[$,,B#7b 1!w |zŊt\<ٙLV@jPSiPʆ,VAp +נ+sl:., hLE@f%'+JxS|p Ч5Ö=y@8 U7pA@ Vl$(>y)54(}ܿa}QT=cd;:m:ytS{!ѫr3Ry~p >}i5❉HVxfV)SP@`@]STM C.#{xa+xWMKR]~wDe$Z]m[oK"P ʫ)c+E Kn_)Nfb +endstream +endobj +1349 0 obj +<< +/R7 305 0 R +>> +endobj +1350 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1351 0 obj +<< +/Filter /FlateDecode +/Length 866 +>> +stream + i6dG䔲;|r-֗>3ƗWH~;'vFqRܺTatʂlJHݵyG&^u|V07b!gh+Y<ܳrOPBݵ%a]i_TjWIKy?ȼU9=va%T~ ETf@64fSn_-<_|#89 ^ɫjM!fόK<=Gh{NtL:7*N^ +%}^3=.7bœWgڦ>SÔiie$WDwru +D8|c0Lr;n)WnBEȚ 2D$0*Q.mLO1< IF/h%0D%|/×d>)q٬%ⷀ=B[oXnLe[$rBvz7 iT9נ'Ǿ Ƿ5q Ŋj:G ҋP|;o GcAvzwHwR ip )"ñ +endstream +endobj +1352 0 obj +<< +/R7 305 0 R +>> +endobj +1353 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1354 0 obj +<< +/Filter /FlateDecode +/Length 2855 +>> +stream +y7vj +urMa~3i*u7cU9NoXj9=hb|ow)p**^*暈`)Ɩ2Y6WFV~ IFN}<|o/V:!e8F@hE.}}3Fv,-u Y+ }A ZCFy .^SgnɑTA)&]2cE'j1ꆫcT$ILAdI+Ki4\Zj;ƅ[ιN]Oa^1W ^ M/9_)NaܤvE2}9?T"ƅ˙uX\x{nEx=/YnK.BdGՅ;tQ$wŽX'?:($bEh4WK_Cql^ %ʆ>b^'TN^ENGWnjd:ϟ5R!y`]'=dqdkӑ;Ĝ͐˲7//?90j}}=I%zͲ F' Y%nķCtBCHvxfYH +4a$/_\sW swqXV3#]} \LԢi40ՓAYz\-^d儇_? |I`+glls8 +=}T1Ukzo~)s".jSv#g;\e^oA@ +x??2)p͜%'hCu~{d:fnfuaT׿lu6@'.a|, +8 +I y3\m*yrpܫ8#~hZ)n=_2lS$3ւl.CRIa7S*H03 6 1/Muc_l`q֯nUX̰7x@Ld-SPK{Jb~WL-Č>k: 7eN+׉+Ɉ \}VJJJʴ>Tvߧ{kS' f x0FM*Zko4d> +endobj +1356 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1357 0 obj +<< +/Filter /FlateDecode +/Length 2586 +>> +stream +T~؀ +9#ayfr+X̑GėcGoGE/:rt޼x{9k%}BާS;aB6~kT 7'ED0U|<,I剙4sԮ joFqTn/,oGxb̛|Y+ɺęgy,{%TQx*ܚ@"^UΪ+}[>EN On\;~@nyn0aAhػל-V۶C;s(*%##Gv3?&PYE$D(Jq/ZRk +`fnP2; m@msv?x uOҿe {F +1ms  NiB"4<|MgYm 3z"]QTxwHBuaEU-j /%3ׄl\{9 +l,{(=^.Uox=)#ӺMzUDWfeo5-zztȳNvP*7unm)K%AY9c +da$L]|{"_9aM<DRSY#hY[6:n ok袛;+Y \30m2bjwkPewW@~OЁ'4S=fAS4+K'j&N%Kԗ!zhlV Z3݆0gR␙ѠYM ч6+@kl#gBS w$9S|WHɾ3(&6o& vo+'% ],"k[btl]O󄏯̠b`g8JEet~.LǓ P8ŧdHd2:4&\Ԗ`F)zTb& &In~{MqIZo(^ew8Ȁx]3z|Xopv) H=&\I+D(r~d9NDidLFaj:g#%/hz),|v:2[2,5s,9bQ?si[11I.w:奱b}Ygk4>NTUK{4vney&$`0V6jӀ6Y"(T'/b\d? +|0~-r}X#2qğ"ǂF;ga*NzNQL`K^:0O~ ;Na* +T<"X#eqUkO+o4P+w4oÿ->dh&QL*+@,b,kbFdw& iC<,ˤ`ARng9UNtrPpN?׈0?pN" m'q eBU~?Z䳦C2wlA-Wc'CGafY'_0f'H#D,!J+3TCVSCɾ䫭> _ޖ/Q[XK7QV56(.RuxOljϠ∠%LJɯ%tISVsׂ'3`;|j/2`3Mp5Cg'~re. SV}lBnW"iW-aQ|@zşGY =[_Hl]iTf"8g8dž?RVkt';B[ؒj 4}q[K׋Z-}u.uYYLʪeO(z*^,^K{=q:yHސ͊ʹĘ zv|͗ؕOy:J)WR\YeCF/~10>LkԂm-)MHk1&2^n ˣ řIs?_1ӘȦ,BIzq=NjMT611Zu>`<E%" ^G5wť-dlHٖ {#-X9I.Sፊ *.>[Y} п y: +Ӯb5 +endstream +endobj +1358 0 obj +<< +/R7 305 0 R +>> +endobj +1359 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1360 0 obj +<< +/Filter /FlateDecode +/Length 3408 +>> +stream +=r-]vzP$<\|$O{6 tTQ +M.G$ݹzLoa $*!+E%5&C$.::`dh]kQUmX@ׄ +BbWE Qҋ1fəWH4fnjSQ|UtAuJOr]~Pד_Cso8ٱ|\G40P8Zo2uۢ6\bi9XERE4 E@lb) c+NN %[_f7a 8/BȺ'dA^eo, +t5}ae׼fuXޚgȼU|3 b(-2qD4O){Wmtt:}f_YzLX,K3i|[L@%f`ːhwēŗțQPMk"h86xڥH Hv~ߥOeEW}pWFT_܊)dPpclvj A(@*!WR3c:yQ%TYa޿iPqhz2OESE[_`sd"c_')CY &ښUI‘v(}6JL'=vvBEh1U}\uYSlpTe=Lr}ןI><^?38 >7BZBw"-.M75ĮmlDKC$IqX(xXN[u=˓EVT7g􌐓'RY69ʮts[K<#'_Qi6ORI 'P⏠D}JK7;[Yv4]8'GC-}I$zM`f"6DrTrH]Q…$ +F3cL l@ s,d'ʷ$"1`_3hSU cFs97(1׻/EV~HYs8%qϒ6pGG{/ ׎!@nK\UOͿZP ƿg8ՒTVR1Ħ8F)1p}q;:aR=rg13َYଷ;qȍH1yǠL ^z5ŸkjgUY{@ 'OjƴEGtHCpI~PIsoqwΈc cf:Q Ns T&"4 /ncr&! DDWcW}˓hne|ť' žo\2H|̲Aæ?! @Y}Ѽ:C/ ϑdG3r3)b }E3դev?imͼ0fi|?jV5uEZ~%}`x5C8xpe$9ժ{ˋ I97Ik\s8߅"D[J`mҲԂ\kl$>WIH!ԤܝJTSυx.lgrqH ?ǛC-\Sm x4%˶Njo~rPw_v}uXIni͡@~?^ :Up8NB?u&z vY$%HYo+0z˛(4>8%:<$[ !r1EbUD+%e)GX͓k_8뵑 ϸ%E hRLp=lFQ,L_| ևg[9RK5c{)ep\d>LJ6f4y ݉N}NmZ҆v qJ[8\-g+9X^ FΊcЎFVڈL)P#(">&}5? Y!Zg-(!VBL`SHVvqAy>6aFA}Pc|sn53hn]3I +6~zdhl'!h'my_w`>0癀0o )TcO@a ?k\AOsӞ'YRЋMHP8,·bz@*]s>5߫ +endstream +endobj +1361 0 obj +<< +/R7 305 0 R +>> +endobj +1362 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1363 0 obj +<< +/Filter /FlateDecode +/Length 2718 +>> +stream +KKO0S(Q[OʭKŁK,誏!W{9M N)R$"p(-om^czDI~lDv)jyb0E>5 <^HQخ'L[)gJ>SpG6b%_ / (ڮ(jZ4siEnXM!o/Eb@..GP!qDA8`+[ ?3(;Otf7/q0y-4{/ѮytF6aW9"gԘ]{ TQ*3Ԅ)S'vlbM2%It!\;|znp=2 +͎M&asj@Ϳ\$AlQE%X?R|,vgrfPM|fPR([xu3g51iHi%-+h8PqeaTmgJ?bQ'm݄BjbiDC +4DO5/4t.T=EyT"KhZFwM'0eŸ]e(x*L1JYuoehjsVΧSwb.k싶QRLi +cr~lUJ (xSlX/zʧ8 +jT@ڦ-!cJNG?DHֲ:GJg)ƀ@c{W"sb}FU3_t tG!ͭ-M +^,ln3Js>wkX Fv7FnLRcʬSQcۑmvZG>@7dPע/DZ1[@|tS<˓9'`ڬ& @9H. 8%@yF.hOl^t =/.u jqyBȏ~L/_='hϺ3hJiݠBXqv4LމP^1KF(W-bPҶÈUj Eq{>Tz|^P4DAz.t֦I\+։xYՓ9vMqԚZM/)f2؏0 o]ZriiA-8Z}r11W[)=сR 0ߍ_KiS=a`aMu0Ikj[Bw 0h*yN᳇Et}S1c_ԅbjnւB;Jnk0V-.0G\);u2G[fc_\q8x6SMU[9|PAXck$e8|«I#C%<[JcQ +VG ֙tSҞazCх`\3(l.)yThm^ij.h>&ԗ/Mj"x;W\^έHi/b P xh $,Uxw&a̭ -{;Rڎ5~ w2ҪiQcy͍?nXHC[J'RYԫO1{/+ƸO(1gIyw8|r?84vj)g.7ek֬DE(Q{mEy:`2Wi6.>\ly886ΎHb#9~=5sJz`W令v,=vA n_"Ub`F$i6?ŕ `ܕq5@q> +9I0@%k!"MN;ٲqAWZ +endstream +endobj +1364 0 obj +<< +/R7 305 0 R +>> +endobj +1365 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1366 0 obj +<< +/Filter /FlateDecode +/Length 3002 +>> +stream +jy;Ϧ1ul=@Z|'bA%s2*k+QCi5B(5ztk`g"AHM@S˺J;4gLeh .hsW^-t頣70P5[~8g"U zPIp)v~Ӛӄ(Zo]H;y,@,_LSE~ +.QXb},_-\{NۃeSYwoeh^NE7[Iݏ0엾cZsi~Yhc&&TCwtz]#utw^m<)8k %虮깆\E ZLZ#ifI_@./mʼ-+H +-u|X1a\XmJfqpڤ*ߍˑ֥xQA:va"@ώqܼC&Ė%1UU=wxhno#j -73fugDT{v'0-ܧV D/L9ƹԴdkmx=IVw+HR~o&͠״\ 0xW>_%l;*#<[:x6X14H> uOu`4ky V2*D%/C4%,c0C_%m5z}Q1~D0peiGo3w6W1[.(5[Tr1.ܚ^{]YZJdq꣙}D#2ShI tHv +EPRXzu#:\V'#%hD2̱ mϭ"`w%c ڤ:Dy}GPn!&(F}MX!htQwD"{ +>_gFKyG ]V&Ш^\ч1{9J[ӏew(HhX6[]npݹav'l/ͪ ,;ų3I\ +E?D.FUMH|/6;Ҏ#0t(2 py^ZoA]ZfnElf%]l ILj|:d됮vV߽>9ׁ_$n^1 *ޚipP䱔d& /M$$UKmR֟6Stb@zt@S nVRD*y=FͲ5Ij΀D"#Bӑ$EihXQ}"&~-TޞVV@w?w%!d JTq/j#F)ܹ`tNߣkoR\Ќ8&ɯF"v?7JXl9&qH'g敀AKǟ@Sq(b[h_8*pdCDL._9(Ap $je1/*c]ƣɡ6gW\k7SS{۾0fY)Y +И)'{SCKfxv=*D`oTVA<YHf8,鉑;łT=#CH!j7JF \e!K>2> +endstream +endobj +1367 0 obj +<< +/R7 305 0 R +>> +endobj +1368 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1369 0 obj +<< +/Filter /FlateDecode +/Length 2944 +>> +stream +.IFnFJYp5A8rQje] + "Ȉ. 3)}ucQRV!h-uO 7mkƿ:Nk0ZI@A.V 0L[)&֨uSuN2Xw>hKǹ`Wz'dЁ:J8֧鉑˻zj{lTbgÈ\{Dž:=?oȸF?#f[.aUg* ܋,A+He@ ejXHX_&`3qlots8>Z`4/%QdtD2@jPo{|' MCvkF0ţRbmlU7ihfzLp0Fܽ C '+<]vF1NTmnn+o{VL dJd{>yRFh+_uS' 8 ZQN.lTg S\l)*r-jl 3kZmc^흚lrGWKrDIp Y䯂J]?VV}zdІfWK<╪M_\a9VX( +-qMRRv."ٻeдk|ӍKVrlh-rDbC`]xp֢ͦ|:^qiɏpZTtbr$88{nj2?nZ-A#|Sj \d!b@(13iwPK =`on?ʴ$ȟ2NKQB3t)f=a6;Rۈ\ B'YqI u|HFa2\妃OEjۘSu.!`D/"GgHBT(rs$~ 1<xx +o؍1P{dn<Wt`F\k;A%"9VC!0d!y ؔ*fo%64:wĻJZq`A.8j]3]ܢy8-.šdFNm0^6[iSs"b;C1 L37C9l֏B3qFl G=Ām$Tr BAKX&]Zw4JHf6-cvu] ;q(ƌ$1qPpؗ) + YZtZm@E3ޥ,Nw[O=fKOzUNgs] * @揳Mi;iS|~SXIjiUv9:ޗٟsxg2tSPPG'RG"aBAQ}l݁zwe~[O6'QX4N*G?:UН\7tJS'nhnY %Gh#uz (Z_A7LTlsS? RY:ÑD&/nnKzeBi tտ|asaS;icNɽ$51WF9^SU~SB$-w΢=-?yEցNՌ#.'ix|I"Uӗ~bv/q?x +>:3rY -/CʋkaBDebE }GtlUe]1s>6 Udm"E6Fc77~e+uW HFdOZ`DZZ+Veb^H-UBS?b c+6.CpRRv_ZL9Xr/r,^VT9-t/Hsԣ^E45jxNz#uH5I~+Sr3L̦"O-gZ- +PYzvocN82YRjq]~)J 7 +endstream +endobj +1370 0 obj +<< +/R7 305 0 R +>> +endobj +1371 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1372 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 211.576 74.032 215.512 82.139 ] +/Border [ 0 0 0 ] +/Dest [ 268 0 R /XYZ 75.52 62.89 null ] +/Subtype /Link +>> +endobj +1373 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 48.978 266.365 59.112 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <328076e0d03cc39ec5f4a110bfd30fd11ad3b7afb160353be5b96c9960d152d88651a3566d5d4eee0c919a8cbf6e22ddf8a408b59293c6bddb5ae471a3e84e9baed9e87fc43838a27202b0a36a20> +>> +/Subtype /Link +>> +endobj +1374 0 obj +<< +/Filter /FlateDecode +/Length 3000 +>> +stream + u;7, $z3gXL9S"6Lk&qP*.(K^G) SG9_\0L }K>'k@8u1S{ܤrI)_XSb6<Έ3F7 ]CRnt9X(ZpQ Ԏ$cB7 <`Κ6޽Ł98wH/,=l<6NnCm/*p"B{(N)IhGY~Yhbv(>M,ʶjV!?QXcDq=mXT(y鼏c<f<%SV g#`jW4׏52ܽYJƎ˵)YEN&͘xЁag@;vwXnj BRXLȄ &^~D8mb]vz*?#rU7fzIw?9N4lUɦphNƌA\A083EU[2`1_mLN=_(x}x` y:5>FЙ] ]&?HƐ rRy(ߡԕ͸A;Xٝ ӽAS=|aσTkW/s% +6iw;A^17+*Iz̀8T~gBV'PRB0/FJq|#zp`Br} sE;KШ^۟N&)aw $ \ju ' +bL l7 U@xn%qL-Ha)i!?*04jKk$a_&z(8SrqQ0؃M p Nϔm uEs8)t8;x:V","\*og+Vw]5"'_=@_qX>K>n&K-U8%v$o$pLG=pΔٮ-?]6Jw1l&"'>rnα+l;8a_Z:dnVM H Vs4f"TOrwXGs,Fٽ Wh> +ߎ"ʭHewYM͈W46RH,$'l!K^lKDfWbU=eiVrƜ.]HhqEږss@*E9S pO8 +c/)wor2!?4]jaaAPtyu(k}_L>j`5݊ouYg<^?-lHٔ >D>5ſ[B{8ZSb#e̷6 b + rf@D!jJ1;n*Sx +rDRuj`10*wk5Ƕ8&ҷ[3aI>=tplÖP7goK&"ݦw݂UK(Ifº0Ḁ̆]z\XMS-@E6@(ƀ'-FS@ͫkd5 TܹE9UKU5Ix68>r;;:̱GϨ&ڧy{Ӑ7v1_|o+͢KCS Д3le +6Cʱ@ct1?0Yy30܇֣40Un:!wN4 w@TuهtX8 y`!45L.p͇$f7g UE{ֳќ؃Rjnl>wSºzg  @ܠkĒ1C;-e nLeHNXO fR>)։wqPhLNqI +(L 8 pgJKgW?[Ƕ0Րmw9;U7M.0p=n ?:ln0k②28mت ʎǜ hzR~Uh{lǵB2}}!$JOsQlB-i'`q~Hug$Mz tMnf+LnKȦRw +.ժ5,/tuNmĈ3 }| +ܭӲ7i-cG0,-q)y9TL}\S9 M> +endobj +1376 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1377 0 obj +<< +/Filter /FlateDecode +/Length 2979 +>> +stream +\"˨ +M$Pk +rD 8$cwPq& IUFǨ8> h~C7t Q|rQ_MpE4lmhq/žQf6ehJaת?;b8A፣taX7yG;C WBJKv?ɢ%Gfi?QtFz`Sp%SJmNl$)˙NS:WY vl +Go yRnHCݟz?NkOx.# +Hܾ +yM}D5\) ԘS]ѭ* R\j"Fm;^nİDBe!·Lg7+WQX e"k ^3׮n'8765<27&XC'\X\9P,:걉6!Ni*Y/kV01ɭUT'MARDTUf+2ߺnj좪<< +8TF{,8;wэB֊C[ ۤeU&%{{A;gz:N14 + s6BC\PlBXgǚr(C]t<íPP8緈35=@P06<(x#4;a>n 㐇 2ϼѵj`Xvz>paQ!dgvGuU획Ԡw2ޣ{<-e#ޚ9mdd^Ci]n >st>ih U2zyΦٰN#:'P]ojHu+)cJQ K=[ƃV2/nv;sj6j}$hL#Q&]H8~~:*n@Yg륤ڸnzZO\5nwVAlXxBr  CzM-&RO@u d5@ʍf{?W[Nid5y Q>6HʈUQ"ˆ,aؙ'/vY8Ҩnmԟmo\vI Bnm>[JO@˶4Gdr*ͽN{_Ze}uN=8b +o- P^DʟTu3WASPm𕧫i_8B4@Ұ<:qo]` h8 A ٛe'AƎ8%Pb۩9|o<y5p .*`]>ҍgu:L)Oꦭ\FJXBrX$3b%sW̏*m.c z, Uq\?3Z}\W`,Q3H,DɨilJq6yF9=OQϕ GwB_7+o\>ȴIϔk@قZ N(~/b1Fo4]^`?hPKN +u%Qޠcܨa/ 3ꁗyy`/ :z3I.Ȏʎ}F x-&݁I F#u 2k"/@Z)T9IHա]Y{A6Jwݱ\Dž~NyRfm "7~!MN3Zu5q_]>e baW`㌉y¼E$GK2$H[_vO mR]r~՝X ?/ Zj产J) +w3n;b[< +\((NvbbOVA׭Ej4w.]rJҚʿk ;Iorl=#0wR_ ĕ z"f^n1w$ƋTP_ɤsφ_ErcX0ݭ.!Z} ,>h)y~tWA9h]:&.ӚZp/>pom]b ë_a]S4p@d0)<-Q5-?E8^[C,#Ǯt BlWڜ׎G9 O4_2hυFS5<2Dnʑ~<khӕ UTQRx׻;~,Գ)<;BKpg.kck P]PznWz IF],0!j +kAGz?<#mOH}\lhws⊬:lR|/>ţ(45&b\Xڹ CeHXQWX]R|Z_ z|%?(Hb_jxʕ'lzc=7~FP[o, jqH&-|`cRuu pTn|ɘQ2,W,Ila> +endobj +1379 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1380 0 obj +<< +/Filter /FlateDecode +/Length 3015 +>> +stream +rMjHoSg&Z3,>IE^AW=sbnhqGG;U +#}V5I)/Rk6-+G ʩf %r-&< ltv9;AC)+,B )J&*+Jsf9JXR~81)Xq4O1 SeDLVq).ˆ3UH$7%@Ez 1%@1. _C~nw6K#&eϋbQ1.;쫰1 |IB|>T}2Dt3uvE/&=$!{Bo#F4ӬIlHn Z 1>Mg[K^K"dB4R#:: Q] "C'3K5:8s؍X>?QG0o8Zf̐U3^c'~9˝3SɇgK$H6b "t$˛lH{czf(> +z'@Al\6Fq==)9@t?&n ʞsC89[zO>)e_^F@e{eCp韤1~c`6쵵'lJ:dW; l p~M7 b,4YzP?nCч\^,1 ͡6ʷʫqjl_.YME 3mNԛ*IcjY4gA(gY+h7}Շ1[=ڋqZ~k&lD}`-A2d"eVXTZ"&&L# ܨL,3α6dEևOʺ@nNsTztmfD=<.s&4{k|seǬ41=H;dA1WE/Z;-gHi]4+t&ԩWd!\$|8e[sveـGet<'K`D\{QșDqdH[N;d\&YHF1tk:mi{sn} pW("{BS%De4s;J,#A)y fX x;鼚($VD -Ħ!iSXDRyV hL '5T㷎 p|;j(<:Ɨ5Wzopq@*G_ύTrּoU _O/ODejc!_P8F)Ŕ!;ޠ]w3n:WϬ|g=ín{˾ʁ|0 X2on)2 &Y9[Y8fB3)ld+4«IOU"&LLiؚ)/E/9A;WSc+C+F{͓}h2;`GWe^.C2$Di]tXrG25y=oVĹ K^'F`Hq;E +endstream +endobj +1381 0 obj +<< +/R7 305 0 R +>> +endobj +1382 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1383 0 obj +<< +/Filter /FlateDecode +/Length 2555 +>> +stream +ˋg?ݬQΦ˕v>kγoBN/^[11AWkpjzZ4/։" $:;{@}Q+A%{n5+N0z*ijЉC-k8^~scX1]Q0.EQJ&%ܵW^z +Yꡘ :[*v֟ ;b^M&y'!~"'"* DGj%q$/4< #Gd@#p,={,M[mJfNG$zzF[-KhV^Ʌp8-L^pӄD) )Ϛf__Oqc +u9YmXUʑ-%$TM]AJf=e6+B >_38ko+ +%":~8.5Xƨ{n&FOB{ sB *;K12: |+͵dz|~OY?|(^MK%W'rj: JQ>=:@ 3Q>Bt@+&*IAY屫4Gr:B +w;-8emj:揚rHIh3SIG3qx~OlJX=-7.+gV5sÔ~ +بNx'q}dN/8'4 (l`IpVneţk~Aޗex]~_Sm$-.CWбua zPQ"}9=TtB9սYJV'YOȥ 28. +_i 5x@|aw& Jj\P%2x KɸlݮUMvK- Gi$OAe/!ɤ%KKPa*N) b jXÚP3G= +{CJGw7DcU]YNx:l-Nmacե ޸ڸy%'7ӮٴHknr-|L}Cns.bPkP'P* +Alat/yL7['ee5`=dta#-F~wa`$B;79*ӽ%{آc4@"?< WM)Sվ'9y>,nw9B (өK\ {N?X857 9;ƠܗYV M0Ծ,)q 7. +ǜ0T3,72Э:4T6qb>D2hN8BoVHmp%3d7,l-CmCuPj} }?VY9!1I|^ zl7۟1+*ґF O$1)6Ws!Un=d)stOu훅ր8Fd +5ngLX vA>gU}LqUcKe%BG8|R.n ԓBy80OidFmƲ%DL*MJ4h[q&UL>U4$Zf})Ѻ +endstream +endobj +1384 0 obj +<< +/R7 305 0 R +>> +endobj +1385 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1386 0 obj +<< +/Filter /FlateDecode +/Length 2680 +>> +stream +r}.<ߋQ-E]q]䌭0SឱC \I?Ux70xrV*_,:MW3mޫiV7ǰA/cPMZGYЍY]j$~ )w[ G]!2'5&Ao/GCHd!r/SEǻ{\aY=A?Dɿ;G*,M>M*yގf`L4J2GKkT caVMS1B4|31- aq],yKbhQŐ/%3 XBr'8!4 `m߻_*{Yo ŠFbXؿjH2 +a|飮RolߋDg{5n$K%pt=ےr"_O  +Yuf8Ԗ ^ (`㏗آl>j Q}`k꧉9#dPOD m5=?qW A:h~'yBhx?!Fd6^9 W m=x_D f1^;S׏<u䘡`N2`)jѸrZ4qp.Oݝ6ANpLZ + ++ TMаX[$*I[Ln8u1fy{ņr;7a`%ᢔ+;F{Vn/zB1rqz>m}l1h~f '1QKas3NmTS oMtYO܊;Bo]V>Uth~Yia'ƋREpOFά쯚ɹUvWMN1CR b )x8SA?3Bi);96__3C#'JطEvrB1b84-R4b5SӪ{V>EGo٘2! +dbk1z*KaszN>@P/b.UBJi ‡=H"88꺚FIKrV;*N1(q=Sbid2ZZgz;!G9c^A2/{LXwD ٲȁȻ⧬B݌1YJo ]"/>K2fWG9F!%YD2Pj,.o@tsQھLt^ak> * D;4E0\IbNsլ^^,AlJx)FL*nuuR nX3BlEҜR*znWv5"!}U؃F)w~q4M k6O>y#.uK'\>ZL-I\I]17SQ;+II->XI:)5 1( fpծoobIc܊-W]G~Qb#oub]c~r&B>axs7ѱGi=+FPp={ɮRKͳwgFq*8nS ({SG8&˞#΀ +![IԎRo{ *6dꠡI:&^Ofx/ENX_26MzrizmZovozaꌺyTߐڍ tQE+J MBY +GAZs9AHLj +8 +r3G@:T\kG"_bw B#lqOJ[{7U E9fM B=⮎C0 +endstream +endobj +1387 0 obj +<< +/R7 305 0 R +>> +endobj +1388 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1389 0 obj +<< +/Filter /FlateDecode +/Length 2955 +>> +stream +}k gT@*[ڹ 9F^*,B!t.ccd@eQ3`mF + [ىn +GU%R\XnQ~u-L ,֮nUu>z8!f;zm-5KNV5'A_=O^оmAһ/Pk4|2U@)MMֿo^~4^V^VP1D# 狘w[GJ7FQt71\ۍSlN8D()>KXq{x~2_FQǾM ڙ?hzza,3`FZcg=C~9ke`p]ir.8U5@/UnWwuN4ǚjZ??a#Jռ|^ĂDm +ZPd ) +٥'I,fDdZjKg$ԅWP?!/3 *П=du*"Xtw[o#C!0Jq{S ]퀤Ae-;&Yiܛ2Ҁ XF#O,ΩI 5Mېh[(6Ϯ( jYꈈy ip2؆c 73ˬU)D>J l]wt,AX&Z+LvNlOv۽8äO7/+/PlD[Ưb5?H{Pg=P(b#\XƊ(!C@Xڧ9שMNrnQ&s^@OuYr@0ވ#}}vnO WcOdkd.!WGu~ (,XA3g.9*" :3ݽcdwט/ +x罐 +h)o.cF3+Ho-{V`OG: $p$ODW}*/ 4#F{6)0elԟqg7<ۊzEz\mr1H`BxG |͠R%Ud#]J0O +=59pڎ>VvN~o\sVObkMrUE@ͬ`T/Q]0XԳS,jȬ:]KB?S +L%Q5?̪A__l?s2Z #ӓ.;)-f`N$?ͨ0g\-` ?ݰv^|/?K駋>Xfw]ڝDݖV. +[HKσqDϷNy gqb +Ԝ}FVb1[x xկ{>= flqZa5HYԪcD?B҇ߩLZ5=Rg9[`?xxDTEHeb,9CUq9LM{U/K/TGX 6-Vg6o_Gh"VzpD]xdʧQM:] ]Yt5c',UD6pz& ݫ{|CP]C##Кۅ6 -ldn;S݃|.ڬʧDY&ذ{Cv %2ʦ lnvMY'|5#y.w ,VQ0\J 0Čؠ`qgnN6~c~\"s!ܭ:yy1hW(x>pr Zw \> 'M=Ҙ?4OKN׽|X݉E⼆  {Hžn2Szvj5_*ѡ? x^Gw_POv͍`JZEl,@v8x]v~zEi׃/%%Ѻ,ax8ia*LUb2%b|UFDpH8uC72ʜQYV+s6>"=#٭!0 gghURן2Zu}\M*ΉQТne[sw%<[Iy>VM M|>6߽g/Pud"u:P@#Es8=]BIwp{(_} $xӭph\>MYՁzpnto7 ފ'N'E[:*Heo֬4Wblj(E5!Β@!z5 +0 3hZ? >Cb,3>y,P[OVQVY.sWE)mU9k]L| F_;Z V> TL1/HMm&*.\p͓oƮP(0Β |'u 0W5ʷK~~NQO#/Bsd<[ [r^<@#-@_{[aDžO?ogM/q%<3 \+7:B +endstream +endobj +1390 0 obj +<< +/R7 305 0 R +>> +endobj +1391 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1392 0 obj +<< +/Filter /FlateDecode +/Length 3145 +>> +stream +\$9?_ m8xY7p17n˧O>6u+}Y:z1 O9leh?:V2:"b?\qD.B1GX{"Kk47HFWjFi=JV~:T}q|Cnt3DYl*7ӳ|f +_gO!y2#~}sنd|f <.(Sx_/ShY^uN;atkL**'z+!k H%ǂT^g%Pg=,w=Oq>$C?>|O۹oDU fZu/丑ӹ[mu̡VUd ܮxޏ3gy3XP9"dٕɕ9^}qRoNcA@#M u* G<^"#VֿEbkDz +QBoGSBh.|J, =h۸HBx~'E;AopQ:Mhg3$uJs Wo6uc3ƶ>GjBeay̑@Xw#pR&;i)=[i+ӚvqL}- +^xAhM7c_q n,EZFb6<]\\ 6sYkפ+$%M@oINWk.*LTVefPbfPw`a~x#wؿ V>E5t/{$Lڒstm<Zu;q.~$ӧ *3%U>$)y?>="wZ*FYeIEU8x*{W)hPՈ +#Y,V1-EPܵ4a\qWݒF2 WhrHu9畍۩_z1{Kw"x sp + X%dJdٲihI8|٧uz9yѧVDi~L7{]R{3ZtW4mƌA^.aѐ'|.yqq/ +̓[/[/EN!cuct +endstream +endobj +1393 0 obj +<< +/R7 305 0 R +>> +endobj +1394 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1395 0 obj +<< +/Filter /FlateDecode +/Length 3129 +>> +stream +Tk +Ʒpyz=8i~Mq*.k' +3lje,%u3-VDѨcY.v,vo.ӡpP(TqĎDiv>l;/J`xS/m+1>J<3JɄd`^uI^YT$-p~^9t&X) *d%| -DHjPgd!lڍz%6;?g)+v˳l,ȲGD3Pvx*Nȫ|E0I0Nd /*Vh;_c~6 byޜF]:DSVfBQώOH) ?E1Ji7%j?-,/$-HLt(QӠ09ݟ'K7Fu7 1/-?nA}? (*5,aGȈ#Jw9.Ek ѦT+V-Wn퐑QuZ7F9lڬVҭi"V?'!(!F ~R(+* .7a<,TI;i C`O;1˚$H@Iy'vF(,)߁G&ڌJ =aיzw.b6ao}̙^DKj(")hPGJCm ,uCjhR-Os"QUAjdz l H@_EV9&<´-d/5[=ͽg1)AWԀds'fYaF!,!h#7i, !E' +}+)Ӹk:SnQ@VPl< _-f,6->]0Yƒ:I\#RPK3Ts3L 7Y-[eq`Cю/W69" LTH~p:G nn:%pEseoyk]wuI{VOC빱Ѥ\ytwR9N>gQ=k%OKO3+}Wd #J}NeMxIy*_3M(4 n7ak?Iyp sw|{ّ já *_09DG&R(cZK М$MLG}ڸ,G 7;)=StSX}t#H1מ2%{ j?U>\7xr]0ѾCv!=O|ecJ訽#PrsV xCtx&QHT3TGg;DW֣eэO [AZfGSWϤ?Z(bC(ۯSnJI͚b+8$rrق@oĠm:YB% 1(n{fp oo(]րyFR5EC6RGǜOZ%"/g^@4 'RSnT>a};D_) ׂF$O&gnaԵq1)`+h2‡;)^LqL)r0]#Srr'JA%8 oCk7w2kVH2olEOK&D"SO[Z`ˠin ZN'Ov;IK=~y~e>ByODZU|9'N.ŢYsI]>Z^Xj +!R`=^{%LiS!|jEfx' *ۆTAf " ^7eiNA +sK{+KsV9L>Һ6N @ _ku h`]*A/w b.!”$: +rHv#*0H~19MߣwaȌЫZw▩Nn_ ͒ҽPUo @eV $9f*yHiIi>~ȤCܫb~Y)W?ȘNkeE%FZX#ӠJ"18_iY`-;e[hcސcHk  @`Ă^ĩmSD76wdUifeje^W쮺F RHrkACYyVQ,#s*)%i +/ohLf"CV 4F̻/6Z+jdZȣ*x.Kɣ "n~b9j>Ź;j׆Qou7 s\ +N'u̔th/>^䙸60I!7FZ=69u Mk9xq1Y0im^~ut@(?e'1dU^u~x^ .E5d=kˉU0Wd¦qsQFJDž1f7s$!+}&l]+ㅘnzXP6`:݅@(VUX2qe>E-e_-"?4ʘ2cXwu fb +T;<f@&"}}U5db qs.w\!E +#x`VOE*!) =dӷW]  A}9E r,- ~63!w}clAOśoܳ20]GjRӄ;X-YI/$y td^TӰа+h4@.5&=G(iSXsnbt r9b _]"_'3Xa'HMģzTgzdTeq91 Ŵ(=R +aE +endstream +endobj +1396 0 obj +<< +/R7 305 0 R +>> +endobj +1397 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1398 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 357.175 566.819 361.206 574.926 ] +/Border [ 0 0 0 ] +/Dest [ 276 0 R /XYZ 75.52 79.1 null ] +/Subtype /Link +>> +endobj +1399 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 75.519 65.189 284.808 75.322 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1400 0 obj +<< +/Filter /FlateDecode +/Length 3120 +>> +stream +>ȭN{C{]Ԟ@pNbgehu{qj`~YoreB9Rkwcvdz'U/J.i4+Z³č&6Q.m4f>eXڀV7̨F +)uºGW˔m7R cTinRX)HzYN7x2Z݌XY6)K%XMK_^o8=?G4,zbd&0F.#b0;ͷ%D n԰Q%duvV&`G5KMB  (>J 2\̋(h};XLSք*׵'jԽ}Ѫ$ƛ:T,=Fi{Eˋ=?Ƌ^a%T@ꡥ|C2PBKsðQ{c;zeX|*)G,ZC`OUP, w<;o ȈQ;<ڎPs9gU׾+EXOi"@glj#)'! Kב8{*[u:6\PĹY@IOԍ?Ky!m/w3w9۟+e$ud wWHVaas4LVe4YZxg<:ZI^L%=v_YơnCrU~U7wm+2;pۙzb[Bȓ'ú6TFnA1sCYsVt@h4֢u{rs90lO<J߹[+V]& ufE^Jv懩ڂrX0z@@x0Gnwoekd)e,BuQEPMr +04L!SQUӚ4)kz˟1KV mEWX ɐW[wU;ֺG<0P +N>ndpaNR>پh᯹L%-:nP}6>_Z:QZaA$"RYm+2G# k'q98)߮YsO) M߂w᝵ +iC:&is"n7˦Xvps +^mZ3 ?Q8[Bzazq> +|Nf$["iJX%k N{Uxqk%fVÝ3gCI#΅l _2P=sm=[fќK+nF8/(*l 4OF!jqdXqX{t1\Ґ_RjW9 +N&լyyFz(֠hWCAf``%jtukz+`tz"ac4#̩.%8[2>W0&zF8ۭnn+&K_fD99$U l,jo g8c l!ccȇN0OeWBjPtNqLƠE +2Ӗ.}l83aqh#sZO3.䨛-_È>ny~Xn#dmQ-YFW)6Vd;szG}e~(2{YO1}(BefxfWe?W'd #!b2#>/;gJc/l#e}_7liGq+f;/ g6&#oX v[V3 ؁70IQ7uydX)H'c;$ 3q8{)LBO5Vʂ-%_sɇLlL\^G9hsyjÔ!"j?04cXMd.RkLbg~> +endobj +1402 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1403 0 obj +<< +/Filter /FlateDecode +/Length 3159 +>> +stream +Zf>WM\dlfHng`!!ʔTaY@plȁ%=k7Y,[5=? w{hn)4b X;uUVC<(Qčh}Pvճ$?Glp'TRc48tPYWΉ|{ ',9>/\+*P/Xm=W" c[vrʕoZH[n/DsL;m䚴-,jzc +65vCSC/Upy=0VrE>[J9i!S0L1WU{[p#m7w}`sdu⪶A"^^kWĬd5 +#l ,mqMgzST +B-JzC'THgf@HoS eY~r,~ +N\sb؉pF<}&agSk1 ܮy]U=OUDλÛMu)VJXr:P߯w|ipȨVn'Q&c>'#̏|Oz%'a>œDZKb HV%7αsbp76ֆh,=p8'"=(Ë@®v"s6{\3`9i?HBvM>~q =>+R|zXz.uNEEJ)di:vt~/(`엻Si}j'wb-*D&H2 :^Ҍ~\YTTdǍSW|7iƉ F\{R:/RmqOnZkr??VD`9fNx6(xpQb;=>mzs,<Cm!0MC^=^̦i_Io̱::6@t/k͇grG6=@x te Bm&ɤa3]BrNE0)3\U> ~EU<19荌P% +uS˪_ {{Y{&CkQhaduE]GK _!z$0Epltg?)>A=xosБpc{h;! E paq k)Wa@_ctLLeP̩-nKEߒ]kmh*Ši,?rŢ됑χ&%s5o~R(@uKo`-_uVVWGURz2Mw],;[w}Nc ؏c3[thF"TUnt6]X^gW,C4٠N(DxR +8b&'0PY;68q~o#4teZhiޓ;'g3}@saB$C*~Cu<=8'--V4S[E/k!OZ_,rAT^_ Oyz4R!޵F{x#L|garPIRi4r&6>9y5g#x;{.Y%@P$)+<6jJkgUL~>,Lŏ{M&N,9|H>jfH[CMcH +G| Yj?)]-%$kpTλGIcw[1wϬdsLH Z}Y :NSO'GVewA35%D)$epE"vxɎ0?34; ~!÷Evn/)萕R(H}dt5Exű- ~z>D$?Bi- t>b;+*d<hr>Y4 IORt;Ṵ> +endobj +1405 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1406 0 obj +<< +/Filter /FlateDecode +/Length 3335 +>> +stream +Mp@3^ct-G\X&0"utNAIydW u3Z=ka+\R=ӷ?:PϹ(5<9 9(?33}!R`aSR۶D or'>j$>Dyt+FŐ3L>!J0îv ("uðE~n{tOS!9xdV̿ +x5*[6_sq]0{5EFB(ѴH?w Vc̾{\mrnNWXA:R=,K]If]jJVB&^ro&Vjmm$Ea, evٿFAz/{u MbyMR" `8eRu*sGrWn\c~Fc'>jT;"(oB%{1ix6Q H6d)CVJ֨o|Xld^w=i*]7" Zl_( +=2whUҊ`)X?DqPGy%1oPAm~AC4Ј wbr@E3^9 ~]A9CɊ𓨑X#3vio l>wTvBȼR^X6$!utl!PlK-/P@vmyG]'$R.3gO7ЙF._[I dIk>4bk?՗NEcK>ųC*BEְv"(L0~MHP9<}\;xCvޢƘ;ȓj{m>h+1As6`y\N,FP4n4T`@ SA=T-LEs^"CYG/pWX}t|%|]N lyŶbz \\w|?eۉdK#e1$d}i%<>oq\fοbrۮDX'/ld0c!卌$0#rpq⧜g]~ dý%5#ZU7NrΚr01wqG7Xr"Ԍs:-S /{,~ZYS],;3ʼna벵mPo&iv'`b_K_,,P=X;oh5&~:]:&dJv A1H=F\ıO+;Q(p- X@B3 9ep^HW6T霻ˊʒ46Ei@ee9$^30Sa},_xIqX*[sKee^^x^B`ŲYU'v-%0BL\b^w5Q~MN*adFTrn0*1ҧ0Yr#erm:4pN] 7DzPw9(v 􀈐MOdiVz FSS«:߬=N/5?3#"- U3<I['9eМخb~yt1F(ekܟgx7_]l$)_OO T&kUlpyU r?(806'n*pDbiboW?ԀLlg<|^骇BAEeǷ +muw:=Cn/xSI}VU퓨(_'+t]/f]!O> XA2 99h6lׅ%5"w茖ɋax$4[9.̭9\}2 |!?o}zNCm&? F|O,^'F'gf`}R#st~9@ ;V[Kߩqh=m}MYTnܗx]c{2xf.hX!pg7Ѳrk :IWf4 aũgA +`lysLlDL\Ŧub>їٹp̰WF9磅gծ\Gfٜc~dH8u]ïTf4)02 ),(rWlDe58fb,z*d^7,R˼ +~T\vsj{쬵va;]fdn_ԑz ,ab#q䶠N=> +endobj +1408 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1409 0 obj +<< +/Filter /FlateDecode +/Length 996 +>> +stream +g%zJ- +ZA)VvjNxEgYO>w!('}(^.0H?0lN <**⡭5Z/elUN)P[ֈũ;TX"kPd?F/sC+ `E +ς_e?NI73,H~p +(b9R'u>U<,S!Ω=D][)g?*wY<" )fnKA~0J*#Ln!Qݏd +>l'`B).49x(*uV@QRXu8\Y5ˆcO}gzE)8Զ+9@f'8wr>ck50 υh"+pǫv@ %<yD#L,P Zȋ]v1V>NLoU*S;]N-ew>'&>fX"^Ӄ攳M~ff) 6#G>VN7lO`71'wh DYWwq#$c_Va{?*$zu +[&WKnT}l/%/d|[D\|L8p^QMi? EB=f9}5 ӊF@q<\oٓ yq)pD R7ʘ4;}U yv> +endobj +1411 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +1412 0 obj +<< +/Filter /FlateDecode +/Length 269 +>> +stream +KEfpĄwd0ggc ؁ì_TtH Agx C֗Ա6k;Vt_]ȋ>B.N_ũr2EHKV,:`ʃʕO+(nWZO#:⏞N;a"(Y@Ltr~|IJ2i2޲Oh!^6\0HgD2hRė)Ń 'Fq6ѿ"|5zO6CpcHCb +endstream +endobj +1413 0 obj +<< +/R7 305 0 R +>> +endobj +1414 0 obj +<< +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1415 0 obj +<< +/Filter /FlateDecode +/Length 2965 +>> +stream +*+<<n-^.ȗ[|\|ö$ц"Zy`Pp +2oDA:֗m #{xh6v073K`\ yE16a_E;rq3,'0àqWlΗ/R@F6vCj́TɡaU޾BRD5|= 1m 諓UAɕ|!gꅱ6߲Xj8C*(xўr)vcXIP?6n@φbcܾNѡ اߦDJ]RD 9wm4HHF G#<#Av[+ N`b~ta 7W@cyMU\0)\HjRG*_p`%BD'$RPò42O[CJ6 zAzaG>h *5%|pMFXmU`Ś<5I tƵBfڻȊĊ͆ t)aeq3/p[RɃռ*2I\4.w~T5[usX$\r_#To#ŰE^!csxa X{I N:0YQbiNryʤP3+ՈDGgH> IԇHP^zG U1,wׂP|up!L XUg鉪#6-|NX%l0.V,1黰Gn|w ~<'9DYlt,n%DOMʲS~9Ò#Td`BXzP8D NCZGfk X kNobMJ_EaX[}x0h}Y㘎S=g{ )L +" *+KKQQoŀJb"ݐ, 44ZvPI򈫋8υ^.IA!53QvuF~ {DFdLc^gG/EMGZ(oF!Uo`hs;V~ l!NV+2+P2|y$D<(?rPP;;2h*a:*jgq.78FmAx=z4DeI.3KX%uFoƒYCm,.=A]gxV Eah˒E^dG(y뉻-^S>VAJhYnj8 !6zƖ`a<<4GÄ7"U#k)r[熎NC`L4 SN% U)}ەvi*nߧ@KNQ 5?=xuiړ,נ-DYv1WyYiN\5} \f !b"SHVO&uV6?u '"9K&*%c4-ݞ|`~wĢ%@XCdk#t>qց)%iW>c? ӶVL-]Vňå<;=&nB1u빆lrq/E (߼֚b=kd%h~V?B>vI J8`-\f "V Dz|FZՎ-=-.gܷ.h >̖WHnUMdJJ9^a.,@A3l Ҝ2O}J*UN;hah4;";7euiWh٘ђ;~9Ee hZSM_pf:h4 h1 qZ­EP;5"!xg)iRQ&$) 5z8Ɨk?GAw`+k=ek?_OS|,d6`';avd'BPxdjsDT +<+`ƁȭP_g迥##AA W،cXB?s5. +/ +qoKHjqZY#dF%\@N-O{接5|uBCtLB"iyW~@29d b5@LD4 BL;Iqק30?F^"+ZuJTU e'p4&%}^ɝf|u+ ĤĠ#֞Y3 Nn}:}떱G%H +^l:O +Db +D]yM75܋y4(qވR +n:T+kX'6Om1;( +endstream +endobj +1416 0 obj +<< +/R7 305 0 R +>> +endobj +1417 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1418 0 obj +<< +/Filter /FlateDecode +/Length 3711 +>> +stream +*Ɇ }nÝi}~*b.8Ǻw(ǜyc@#s ZU5.xᙆ-x5΀$a[u4AJ˟錰BqB)3ltR1$*nQלAG|Ha4+*zTj?ݔbL; s&u`9OQRjwmf$8 dS>φ]~xK IJ" rQϬP@TRհf "#KG^PbG?ݭ?û3,wdPRh65<'D<-^ +* sÆ%7I sN|-2gj sztS<87o_OiuQdTוFa +NA2_2JUVPT&lT64 +A@HWlGNQiaƎ$ݙ{qBG@DqiSRok@DxSa͌4 drPK!y)kpe]xbW1өsJZK%:k$1PVlj^B䞽W.Q.1_mi bHݽj潞5aHxhX:2b=[@#ޞ)\'Kp~=x3aKZq;Vgpy>@_\ݫG']``,o2_+]#{]HӮrsrmlkgD,ī# yl]]I( x}k*tT% iC=c +=_Fp/0ot۽]kZGv\J4 +'kZE,udS*Vm?5ji-!qSTp;Y@Cqг|lPniw)ƳhݗxQ-\' p֖*Gl2[S|ӹ[QyW%kۜGiig8y&Lͣ|q Rn/0-8E +ayKUM;A}E&#XiLc6нȍp,"eC&<.l;;bW:r6b…8rcX3DuW2ΓJpG=+b1cڮܸ% +O&f`5+!9Ү +D*:j6:#:!kZЫʽyD +Z23 +!_v#7x]aLvC)f0v:jL,DY=:Z4;"`/0xk߽%GV>J]Jj7] f0:Fz`^ [3dI 6$EP%H@{ #p2bCUYHҏM)>+a~-0O;2FdvړrN;$h#vU$`&7Hs"5Ca H!}A44ht"f8F\h3|2A:9Ax#Ϻ4Г]A`7 ތY l 4VgϬڧ"?ݻp..@C?pPWc(EtzFT~EpG1teTdD} FW{ GyRPʅދ߲[ B!vX'WF +Zw]Ibl>c|_=h54w%N ҉m0;y |,Uq^'?,"'P1CNb!zjhdz˨mobˆ0W5Rr]_"qh*(cVHywAS) +dEra#P)s5{G ~KrQԪJ-o +O~KFNl]#mbEQ+b19K^RP<:;dSgޞG֌!~OSv<2Up@˞W>`:@.@sN?L*C6C_|xZ#)l!a?%Gn"ʒG 1brs/[EI6*> +endobj +1420 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1421 0 obj +<< +/Filter /FlateDecode +/Length 2815 +>> +stream +>+;w0 RP:YEoMxS_46e%6H}Yo_Y4LZ0nf}$1 +2EB2fg* 2sl55ԒZӰw#=3$4@CTNh$wt@9@ +*=پ7Wc!( }lS*$veoR"v-R8D6IppiS{\ǟNa[z+;\л'ܒ4)1%=VyBFߩ~{D 'A Ww쇦_X'℆Z y +q`̇1KyȌ|Wt>5NF;>zKAhJi2k5U7yV ,MvzUA^AK>jG%*VԸNT KytzB,{լuݤKrXm[}z)">.>LZK0 5^Y9&H|,Լ9Ud%r:iXJq7rJra1p }fzjc _tbpQ*iHzKgH痒[qvcI-VDa"}NXtRoDg)MK.cMmQ%vBk%_܏| +M *:<}e 45ָ\cǚÈ|<ܒ\u|?`GWF}vfFᶋ~IK$b5{B82p{,%V`aj*^_YMsz NOgJs +@a57p2*(4@`CN bA[z£a,;"RY 7D3͛ʰv JѺ-+&KfP/7Ib$emP|0.छlƼn-TU]h$l?:eQ}CZ*}3HlOXm-9勡1{f〨F٫lছ'LB3sZ2g"geONWibM">Q;?‚&L>6J5\<ޛzX?{ \Z4!;v q/L`@Ɛw*oVq!mZxdܺL ~}d?*[ӮZN.Ġ9Dfnҭ"w7($ёwM\:Q+cHY)Qq6chqAd¶[-PdH kEb'^%5сm$jK["GfÎVI`ʉQk虈XJ:6^":&j*{cbHMh+e$c7i6"y9-0c~/~xT6g64ܬ] 1M>{ˬgfڜ:N*kV~\ްE(E%f|q#:|rbђ +e)\w?5V}jfDؖoP#삉(TUD ˱yZ X{>$,gApXIxvӔa&i$I mEy} gaI +V)0(P Tuq iy p3e" Ɩ9;YKRiO +Z < LDIb$P4MD' P ̉B?2䛖q..C[T"y閺r4)ZIzaT܄V*Cdr"D(YY#f?7uT!><>3Vtno7~ģ}: T9aa],LVJd\&d/*@BUzJ#'6GiȇD~SWqEP(WtG9b]1٦2`i,Ri6˓s4J3x#Ѷ,WY4Qq~{dx~CeVe85&l}+ A+/d H1-'gGR0H(s^dks3 Eڲ,94w&="`PZz!98a,r3ۭ[8yԴf()hN +endstream +endobj +1422 0 obj +<< +/R7 305 0 R +>> +endobj +1423 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1424 0 obj +<< +/Filter /FlateDecode +/Length 2433 +>> +stream +cRB/*+wfQIc v'FE9N z5D^pA۫f'd(?n4M77Rx3hQc|\OGiq}R)!SHeC"nbxTb }:c18 .%Py4sA(kblY;K]YON !_ZCvh4]/|T=ln,3DŽ^`1B+3oݺ8p׭>ť.ͦa8zURYwtaMEr5>2BQV͓ U-n 9IY4,oZ&1Eހ)& v#eH.c҄Rd`AȚx,uy?qx}Jt LAƳlnıdQOO#5C~u=]}ٙ* -lN-D\.Hz!n1@Kݩk0]rğ*jSS*`ݫuZs*%:JCs_"bK2[k=ΨKO*(I4&|@GN@hqfSnO~[ʻjPXJEg$Zؖ"婿LyE+S_ gDPq,`W|jm8tġ4?JSCE2CߪF|,thh5v{+ 1sd8]DX/Ov߅&[\PP2Ήn ݶ߄s-83r;"6HKno+/elv~:iAxW*s]w}_S~n@9gˤΡp5^X&9 R2fȏw<^G*SyhFrF;xc"x)]9:Si3o8'uK)4Rƅ;JhD>Z"r||6!28vhu߱~Ŋf^WDX=-iOHUG3a¿Bﯾ?7i=BR5Hީa%g9殥mY#O?,CwzT5գf<<={*y+M6gP"N&i$TZVߌͫD~IVW PdnMF8iX9ls7C_$`\w= B,ٴ{\]8o;7 ц"Qz1>`g7"l $b|KCt,bhf"7&+Se%C_G Mbכb{LywOڒ/4!(y몜q^_`9jINoM=wN^]#WMN 3\OG(]4 +<(nRWm3d 3$= %azqA{ҼKe3; 1dIU, mqǼQBe {I5TM"&> +endobj +1426 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1427 0 obj +<< +/Filter /FlateDecode +/Length 3063 +>> +stream +'FsTM]tؼQ"S +h>:43$ ( x`z ++15dިzjMz%jO`"mGPD΂dLZ;eOo7cօKMQFh*g,i `WTD̿ ahRRI-Z}ƼSP,#3rϘ eI<U2) mƢ81fSYP`S IwR1؀5.]ػ\[/#2G O2}1ִH`+bj.apSdH{ %3 &%\fRZڗjyzM ;5t4Bu%ZJ<,6z=S^_3.o%:![Pԧ'ΧCE[1ҳ%}K&4i?:( زnY U7X-+_t+V/c>?GRSjc?厌b>7R9P$L%{vDSc\ v7q,̓;Tcϳx8jWLM=MA_Ü Ll'arE~[F +|WDK60]>!cU 󟗬tPur@'#qJ>Xb[+wO~l:?U]'?yWؤN-yc3P?(z|!t\'aq!Qf9M 5{Ra}%fIsu bcCS*5p W,_MU4QQ']{d4^oyi]5yHђ<(jz6Bq6R5lCXž"$ݠ_RJMMD6Y37 +HJ$]Il  Ip&ۆE&d.*m' *kUk#.C 8;詴MB.s91%6+C:E;~m < tΚLp ݄ʑv򁡧;*_`SMJbτ+  Kw3R:oKg\퐪4$35e?1+9'%i04\ѷO񾦹RBuи_ldSM_Pܨh@Gi }1 xun騞3:s s W_\MoY` rXҁmr ϚA 6:|D-Lt7nTKeTB" `ҷ>wPZB_(j a9+;47o8`9ȳjЫ.M軭:BEȊ ]K^fU=tMT_"vQ14mZ2P*pP8 c0sQkB"_BLH% ԼH]AU< +vtde[!;`=zb`>Q?… z j!ezGͷ;Äl1>yqΛ\6V QYs1D|c0L?p9uԝݴ(UCQ꒢CYαPMٱۦvO b{hn_8{At|hoVb:˾˒>cB$z\S0]:̱g7k,@lHQ46>ܸ\4NUß"U);i1ޮ|F~b QVHi󁥜 Ho0}2Tvwy"`wtIe@mTn|_[Z~ WsVpwNNcSX]Al?v0c\{Kߗ"5#h @c]g&6ZY:~* 6%?=,iAEϵYUpܬySgjy57QK e4E(BCYNKFtq +L"{$-Upe{m^fN7)g¹uqyQuC0:?`Nag-l"Qv]EC}|t +N?{J``Gd W0 vÂX2) g`BO9_[ |lqwֈ `GS:-*VUQ7N-1O=R_w|y^Jеk%oTM*D #U Qu\b_h.vw躥l/6 + }$H dÜ(}`ܕ&_=.;E'k5~Q5Y$_gEI:-cQm b,j D;FppVۏ-xRHG } $+5P\ |4Av}_ա;%M1Ϻ =0w#}*ftHf2]c5dxQQ9QtX|*q#@F`DJykGpt;X!r;lMo;|RO!j,Uwq?&Yw1"2`EL lCEpL>"KM ]#ђal c\46[w0 +endstream +endobj +1428 0 obj +<< +/R7 305 0 R +>> +endobj +1429 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1430 0 obj +<< +/Filter /FlateDecode +/Length 2967 +>> +stream +*13T΃d?K@^]*(4[_Ƥ;"oG1mbڲ&W/JX߄l+&gG~rr$//B..LMf8sgx"6JTjNv]g%x\K2x}8F3x/jiUe4 Wy|J 5Oj3d6vt% c iH8!V"7S[ ؛l"c֠b>G98DŠm2d݅I#"7}J>#fmLę|ϊp6?䂠W X+C¥FCgAycqY%0fd'J_ +ʴ?einI/?3}n(>12'^uWȻK.'v{7Zuƺ|؀N+0Jrj܀+_^w#$pZVBN:w4|nEIư>Jo rd&^!!Rnt>s/~Pg^`n-KvqU%iT@huf(pBa͒ +g{>M3kX6ph5`:V]YL6 Σ|TńžG-tN/R}krSn@55>:uY,v6s +7&/2sh,cy' 2g]5"ZPVbG}{~^3ޝױ |7jh3ˏjpxI(-fp6SW o `c^'fZ[IOL7{Lnj?mN1*DQϐӷ-ɏŖ::|c{7tP#2}eP^s_z[PeE}g/P%ZpjjN*3uZ02RBNd==>sKgw0H=B_ i8}fEyʣ4!pXZZu)_56,wבSt[ȥtH3nՠHEIm&:C[!Y_`N0~/ů3de|toVȬNsܪ ?C: N\sܧOxԵRv߾6s#Iz@0rEpjL[=U4 ઋvsWF2~ C#"a/iԚHه[oدUpSXU*h|As@ʧg;{g#]o7:!Q:6o]RJ D([i |ʯ$ǘ`*<MÛ߻9s8bZ_e ZCQUp0@{QL-8ik3EZolq vn@x0抸IJ g gimCѲE1Ə&}ЌYOb 'Hע*ɶ)_i=7i7Upg'*R +\mbC:畾X)Ys +"TY&/VBEb ԔS;Im s`SdGZhO 3\,tfLb4!DZ N]:!lhxYox&-GX}ROb7;=5*D˼W߶[+Lo/ vg 0N\mI1ngt"8` +endstream +endobj +1431 0 obj +<< +/R7 305 0 R +>> +endobj +1432 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1433 0 obj +<< +/Type /Annot +/C [ 1 0 0 ] +/Rect [ 118.575 242.271 121.641 250.378 ] +/Border [ 0 0 0 ] +/Dest [ 287 0 R /XYZ 75.52 79.91 null ] +/Subtype /Link +>> +endobj +1434 0 obj +<< +/Filter /FlateDecode +/Length 2844 +>> +stream +#X4B\〹w}c6=˲۰h%0,U,֜. %݀&q9Yl22eh-[ͭW2~ɏSŗfm"EHafܪ%KsǛJ2Jt7_(S%ZS]DȆyf]/cOXk!^aRe"{3"AvFG^Ui?gHCcdlG⋹-K4n` +˹X sB _XD%yƂ%[_dpZ{m˚`~jРo}̏="L dpE92/LOq0za7㧫4i(+[:9ʳ NzHAh%i_TjLMbKs)<}31cM9n gjɛ?/I5t#AlZ7@g\Y|15FV[A6?lae Rn""sJQ/+l;]sήqZJ V>S~n:Xf7r9n3v/ d=6^y ׎u 8$hOH%%Q%rh1t\պ;[B$SS]rz''3Vfr_ڃcO!`-N[eHgYZމhYo]S/ھ:M,Đc=:{._gd4l1 Cݞ9؆ 5ga;p8@4Ik+#ωDEw +e,vΘPƕ™rU7}%]ΟbsJ4R˅~9QiEd,qun>{Cp«9m) r'_vE)5 {vB'pOuR >pd)95΂oڹD*֒fS1~/<}`hPƀm#ۻD2шFcvB:"wBhT)W;%jvx` >ZZ^I,W֘*r*>pΑ',ZQi:em r5+ $t5jUNlYӖR94?,_.1Y旣{7UQd'*9Rb HM0Ai!xoY'l!C. a8KanjܟeVnNWf7TR{M +87ufϥ`YC=Xjwt2cIJlC]yU ^$&,br:P cתZB+kr/-DŽgҁhɴ$P!.}e7 t|/tr1J{$:Qx/`+LRk?0*qRu~s; :|)?`i4I7rUnBf0^:" +V.&eWTO_*l>{ߪsO``>KE:VP6\/Q؃'dRZ_.5I56Ui~rrY00G^BCL8Oa.;a|NT܈n4`KJA~Z:/$DH Qxzj_{>'Ȝov#R;y72 Z9E81/&֦GD5Blo·>"urKnNT|[V:|%! +)1.b()|s0*,( 8_ z_Uf -[51YXd9Tq;]> +endobj +1436 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1437 0 obj +<< +/Filter /FlateDecode +/Length 2737 +>> +stream +^|0x1UJ(&֝5v4Bh}FX;Cmm{6r>#dGvr,uc;LWA|;ޟm e,/%P=ZpA"!Z .VN4& +Tksn +TiIچ`Je \1u<o_JċVL-XS|IENn Λ阘씚P`)ڣ)'hnVό]e/:UV2uR‡F}'`.ά`,^19ϟEF˼= #vgd**I9ga7npE0^uɳ]{5ݽs.N q[Q(ޥjo|T߫:- JazV!ߪZG6qޣHJ0j eO߈ 2럟(f3Z"OnS |13yn &L;K*Fgӧy"3+GZ&Lw(J0LV?89]u|u]È|`HsQ42?^Z@QRkY]7v%nGs$toZZ;u:5j1䑀q=`mrCEPJt>`1 Z-HEPDA{_AJ:('K +Pb\WCPQ58C; Dd/ud82vā'2?' 1xWHkgMx2`JNq|w6A9] GR*" +g!OsLlR,+q+$cnp~e+ +e[&tbrUo&3>\[f9.yj=>3D8Ǧ60< _N̚)?.z$ ETDX L;[VWDZA˒{# 4@"Xtm9EFgˮ 0}Z ̲Qߢ)v];buvSۮRJ_޳7q4c9NYyջ8Zխ24 sqwYq?R PGsxO]k'Ns[ۡgjޟ %!gN[#tPo?Pjy+Ą] w0F}!0S'K=&6mTR> +endobj +1439 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R137 315 0 R +>> +endobj +1440 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 223.853 65.201 378 77.361 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <3d07a534107b7cdffbff0ff8c9d2a92995448728cde7f69e310cec5778236e27be736ced57f8574bb98ebaf7674edc2ec1b8206d128a068483f0b0300834d094e2bb67ee2ad4393310d161263c43d2fa9f557e3a21ee262b5357b6db298ac0091398449d79f284720133513f51dadc83b68fb65f67e98a918ae4ed6dc588f225c3> +>> +/Subtype /Link +>> +endobj +1441 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 54 50.755 198.452 62.915 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <4d45fe0de2ca23afdfbd6194132d80a6534b207cb02a155248320ffcb3027c4020446e224f727bdf5b0e4224f0bfd69f932d15707c4d23ae593fa8430ce7ff535462b1b95f258b39ce9fe5e40292302f6767f934ff7877c56b9ae3740a62220acca14323b306fb95c8069f8c2f3d8ad3786a900103d119a355b98a093d3ab206ee> +>> +/Subtype /Link +>> +endobj +1442 0 obj +<< +/Filter /FlateDecode +/Length 2868 +>> +stream +L}RF#Ġz (!+cžp;BB#'Ҙ"dgԒ"_\PHR3VR_'ȂG (6W)ui! "epX=hc>9=~]i,C} •f¼*|BdXk}fJWط#4p*D0z{16bꝥ"G T̽X%+Դ|H]j?Dy)&׏߿/X{kҋ\9Öb́^{9gf aeO.côrvͤUl +`.#5jr>'6- _ZR.4’g" OqWHCDq+ %~<FA@O[ꈦ ^x{O" %hK_X<8R67,I-^[ e¿4{꺑\|Q)M7r]zOvȜ;7 ʾcWnXt,uq41f?*,7DRkiTVLސ`%,ϼmGl(QʧS҇%2[( +ć0n.h8=R,UL"vY\a[/v OQ$n1F7CZ N+edlGZ)zדisO#SAw'gH*{hhGtI7l;=u5ıeǕ4ieyq8ds5BNv*n{y0$љ8J{uX|UN-ҒG^Td(D["J bl4EΜYNgUc]h>d2ϐӯ8d53C_s_ŭ y;zQ"O>=lv$8sTYٽc,:#a*v{Kmt@7OGɅcuj3nPzo2cn:6Vޮ{D71 U2}-\9ЀX&R[]P\7oT﫨zN=p+ +Q~('ư/WЪyG1ϒ)mlhw]A'LGUa`B{E-iΤV-.^_8PK?:/myK_G&D|yJH{[&>k7&E==eK,3zNhH^>i݂1>a =نo6>0:e_X%Q}+pǓ:xl@pM]&t_*:2b~U^l^M:'1i<5 ]W Jb,n%3{J]lHY˽rAcWë]!NJsz U +ۖ#EɁ376{G@\9 7z d6(&Uw +P=`Y2d r iYK{:, cbMx [~^V'cٍi sd#!&XpMZ{"z~Ԗ `as7qUfD]F90ԋfSo +Fs&'VB6P?zCq(;~@ஜ$bqƃ$(o#߮IUpJ8#O߾fnmk:%Ztdz枍cB{TNkMdnW=|E{-t%ʨϞv9Xֱ8X t׿y%ӭN?!qӷ[}cj +endstream +endobj +1443 0 obj +<< +/R7 305 0 R +>> +endobj +1444 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +1445 0 obj +<< +/Filter /FlateDecode +/Length 885 +>> +stream ++vQc͹Y*$ݐ>.vMّeȇeD=NcwHP3T=Y@8o ?l5M?\&cp +DZ"řs +\fُilotmӊ[:3 &=3PRhoҖ}> +)>aX4LLSm`btxHe!j}峥o- c4Lwث 8S// jnXc1~NMjۑQXU;([zYZ(vZ[Is޵WUD3KήzJVsEvA(#B(k/XP㧨Ug𭬻Mb"?~ +pHhȭ8'-> $bȗ +endstream +endobj +1446 0 obj +<< +/R7 305 0 R +>> +endobj +1447 0 obj +<< +/R299 470 0 R +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1448 0 obj +<< +/Filter /FlateDecode +/Length 3131 +>> +stream +GKf+ftEPS8 %'n: '4.%?SȩC-h2?GYG+"Pc Qoc4:h0VC`4"/H#TA[HJLQ济#\ Zp9 2LpEd?biaԹ3{͗"!ڰQJNj-(N$$3{pPAn[ڊaIWǡ |S6@$1{R!ĬM'ZTFM\_ _2=&fn'[XxSKRpF0E<3ʄRkJʴuC`ˆ\Joq6ELȓL[ gNAvkU0MJ*A3kĢ5\4d5 ,-:m=<Л S~MS+wQ=`bۯ3BN4"1ޏS-?_[AƏ`VCd! +7J1^{ vQ>;wzl!duTjQ #μTCaC`uUnW릚8'd읰pn.hlpWUl7WR*S,P^4=:(F +K!oXIF~o,4fF]~i}ۛlkJ{zR'7Tj|m۶]1sm_h @/h^b0;JOcp&*o2>Тb0ZӆqM* OGYYڡ@4M4α+7aGo7-U]YT-#ktFyD>qc#k4,s&\ +gboYZ6yΐ97~kR$TZ@ 3BO:Cjw]k\ 0ܑJ aBu=`7H+6yKy1  Ux &H#/N 7 h!)o@1 ǭ,nOrbČ@b:Ȳ2)ǷΤl^ >T<᾵cLGD^PbjFJfDz3#..b#?UjP-]6 gJ>r@w]ϡQ6;rM3o(Ы?'3*lB V[0}&n:jqWhV ,~&]hYst.|k$x3߿gB\?S(e|џ pWw7TCYFETupɦ) oſ 1 ^{5Rޢs@1[QdȟL+@^ +.09#5a^K|fmdNgQer`j)M,_v0-cux=EHt+CDk?ݧ`.\s%]HJE! 釉0QC;Wa.P}"W+ 4EN.?ϛ$Blx \Gv]?]nkg@Y†8i j/CD 0GWc>Sݦx143HS"C, ~2s" ?( +xWWrnu:suhv}5Ax]1Ұa$ +N +Z]OBX oID=ǕˣdD 7Ks _q@E0)1.OTBQcj'QG)d/IZ1W.%vL*BUUC +nI{% +;ȶ=t4oq3fNzٔ\:L[{ǙVNڨ%#x?QWkb?@ˊ#BҝȎ_n;NrڂP-ZЮ^V*wGlZB2LvWM'f+3)d^~7r~/l#TI-vUi1V[IK8~\qd1׺4!f=mхkoeL&)\z$=Ik"$OIA 7ʞI\Ɠ?VR\O.- 6UW= +eFQ)r$}KzA~PM +4[ZKՋٰڜ zٙ8aӨ]|ʷ }_꛷ĆЭ'a$_>h!fs0vqkg:ELIwTKd4/4OYi҇G;- n89U,zyEV -n:lBy_|jfq6sj*T˵ӇBrjiVI4'HV^r 0()g 4]A[fY`!Z}vTŖ +1^D<2E O'[5j jaЧuW]?kD' X}(:l]M;'kɋҡ)?cTW|=Wz 6vh pd:ߙׄ+c ,B%uaڲ2llwZ{%R8^NN{Qi+uKmO/m+S j{v@31E $r#~訯a37 }46$N ]xk$XâH 0^7Ϸ%#N2|"!lL\kdjTh*`Fytj4y4 +endstream +endobj +1449 0 obj +<< +/R7 305 0 R +>> +endobj +1450 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1451 0 obj +<< +/Filter /FlateDecode +/Length 3097 +>> +stream +Qr90b ; fhU W8(>XXh2{d'>է0!'Xo:Z\/U6!EeO'VC%+s.U0KzЊPhAkCMc hG]1!f.. o_!0:G!Z,f=񟬴`?Y ?;iiXSYar̎ &Dl}%M}$>R/.אt]<8[J3m:ixk~ZhXFj) OΌ1Q \~L;cѺ198ǨҒ&[t2R/_VI=]cvKVlB6rXH]42o8]v%Vu!~Ӎڙ>QhN7a.Fmdknc nIf2 +]9GLjrvWYl~? +LuGgj6eoV3꾀( 8%8EA۹,T۝ڼWfϋ2wOifF< +Z&CP&P6PR|n. ]n{!i5Q u*"fb<=dlAa ؋$'!b"jצ+@DR)k _Ðǜ)[ݶѴλrb&:H_GKKlhP)@ HI߇'Dcsmx`g'=ܵRpY}ySڃPx3/LVVVEoWtD|>GbZS̉rCZў+EB(h+`i˿z *"OEԍ{_3(JIa^P (<5'ȎU Lj=|d +ە~/G}b]477xR)yR +ם'phbNKK\Nf.;FYp(jWr%F+sEDx Z4TTbgOC\PMi4|/#IBc/S'n2+`V$4+@湃s/3ǖ {OpFH\i&p)n浐#ZJNVbƁ=qˮGݯż[PCc.P"~\@Z)I.=GF!, +FYV8ZSКiH4nf_ɥ^-rI]g k􋤾xea>У|>e\mLh+boX;lL0YsܼXC\rbyKb݋_eTEEuw[c=o;p~oD'j7饀@NQ}ߟ.{Z`_w[2È7-+5 +O4"kA|uBg3ϧbUOQD&f&4h̐C +,$PFsF]9kFOH*[0Iw•lfue} 0sV,Mqn3V$%&&拧 2,rEmt(={6+`#z0-pВ(:d]GNn Xإcmb+gV k!i'H'yy]FvFF=,Ě4"pR(s(?&7'13FMEGG5^jӉ2 ԇ8qF5q\L0Wg;cѫq=)L>y L]`%y;uI:Y_rᮎL[1 u +[`]CuAȆGF$q6tQ}[HwҳJ&&p͉2πǂ +mxp 7$m/O5.,)2nTԛRhJ-{;$ߏC.#675=wKd2|B|W޺+@ZS5ypW)S;y3Ku #| ߖnyr +>`r} m;W`>3 Cy>:Cc9Tk3y!)F<쟶h:Z;hȡiUǦSmDw8/7U6VXYǸ_M?=SYs.1Zb;0w+8Sx|U#hgjY +endstream +endobj +1452 0 obj +<< +/R7 305 0 R +>> +endobj +1453 0 obj +<< +/R290 460 0 R +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1454 0 obj +<< +/Filter /FlateDecode +/Length 3256 +>> +stream +|٫dr#Hf8%/?a85ݚ)}cXu\pޕѺ\AIkB/B{҃uVlH7Du>-S!}$(1C `1>V23pO&nWr @*D4lUc+1b.̲rc+cbǷ >Ĥ5aDzjqZM`7 aUi + m4n7шy3/f9[-VQ\0 ܠfӡJu3p*_q%w4z>,'9}@ΙRcauT/_`XMS~z_-Ԏ?d?x))Ttr0puB1dpVc%{;KYS@N +׃+Ĺq#٫}S 3Ғto;[3 +whWh8H# B}yn-JKAhr-H硘ؔh F ϭ۠oWaTb|,FQQ*Qx /C'ݧ6j7jWmʑ&LvQqK X]=3k6 ݜ,͘?d Hg + kZͬX0KAX]?k 56Ϡ;СmX<<K /S=Fx( U.SW{$6U\/WKuFi)$b2G7LJk ]˃L N3O̰2*E7Z}2Qv#YY*}͢TL'4E6A+ഷF2 +ROBIΦtbX$|E-S@h[wL~VLI+)v'9Uz-qcqOVb\-MݗT$un%}!͎D\aWL&bow Y զk_c7FnotB$>uJ AGaXqT+S:TΙA:tdC$:Zѓ}eyi dL4 y3;%ԫZDR62꠯cmDqj-w!|BkyuJ$LЧӡЅNU''p{z(;J h34xX@3GڊO!txx5e_/P74[ ]PR)RK"'!1yIN\>jiWX~ԦX.9jtjO+vӄXIm0%36_bsĩ/#푕PXEZ­CSpr Ј_oh]GDzH~~`7V21~G*6r,(c )U\bLӄ`t&2б`I#^_&ݭF&{8/=$mN?!F0a:7 *j<^ΈD=HCǝ.{۵IQ677F/.A*#8<i3~Q\NSͧ@Kcx&u +֒YFAJG0PbׄwƘz熪c) QO>VAlܛl oOw]<47;ZX2(B<|UXBAP%A$,EKW[кȊr&ke&1iTWVl/H_΁e%u*jḙ}F,􂰜oȹcTm*XĸL9dyݒ[1 ?]8X_m_O% tͰJH3c  +> +A*:Y>ȌMo0e!wzCȴYwÌU+}Ey~4]=AbV^0L76vXV#.cn]Lx9n#W d.p@k,,喊 UXnTlfUS'ylЏو 1uM~,/M~nd@QWQQsQ1ŗwzGsNF^c?3Kz]Ew6EWL bD] bζ"'pFcqkZ2J{=*56&P9da^ccxR7 = UA~_^{2>5s;wo/_#E2aB9p{4;"HI{'ֽI*,΁kr_!QAB%ߪ,v&J?@Z*ܔ5=5-,-:{#NA"Ϣj(-7(>|S@S;6I`D?łWDWT& l"S0"<2@l|MWyikMx1.~}^)R ?W|Zׄ(q(^jIh3 Q*&x%ɹ챍B\PՌقǦv^eWwa] (gU%;oe<:*[qqG4M9ITW \I*"tWC$#\Y$k_ =1qE##|b=es™V7>vhCumD58R,f|ڪ[n,T ݘ)T{3 ,Aomʈ}c< +endstream +endobj +1455 0 obj +<< +/R7 305 0 R +>> +endobj +1456 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R137 315 0 R +>> +endobj +1457 0 obj +<< +/Filter /FlateDecode +/Length 2573 +>> +stream +\dٳ3f4ӹujEFZPfRˡ/u.|=x +,bD2JGpŸTrcH\[<{R9UƓ8an.U8{J0'wAEyt48?ODr;Db +/7V@&ȰFaB|+R`YzO.9o˼PSOGտ!u6"=5Λ4CgӺ:wBa%mjd 2IlߦC#`\u +;xk!s`Cof7*knD]:Z7,ĘloXx_8sKMXeN.kQQxlsW NO4j<6+ z8\u҈TZcƺnJSr۝ +:B.}Ɏ +M,R.3"D7;͖ Aد9<+!o85U +$~{%[>0~tnaog.h^Wb1 3Dsϛq>D#V'W_M\M^jfK`jUVaNAO 微V}٬wW*;G#ᙦʼnk5Z}L$EsfsBt}; a,& Oc2"1epKoz}W_ci5cr|yY}'Co8X,rc[MT !K(1 .{ =A@/n}z3vdޖeRg +ɯ*vZ3Mz +*Lmi8-[Y+ZG +x ifHE50]v/hz2B$r_?]sջݝ iI2U%\NIuc\A~IhV8d\^eڪE:n>(rNh_(82`R_jt&&p?̷aF= m`hC$8\35T ;bMp @N]r^z7GH[qA)!hvswlffh_#uL,3U*hǩ1tcYa_*F"Ngf"x붒Uk!͒DjWhϢ>޼NH#:*}hNƵ+4 ^.XR +(`빠]t9X*+X%ٮPYXF9| 8ZnXs8p}ĒJdT0+ 8WᥜaO{Gb+=/LVe,SEdJ ίK'2GzvE>(&5${ZLUԠЋɊ:?J(oWq΢<~c],MXՅ^dyGT]'q~88m,` +5AƦ>s,bq0YY![lv8b|J6%۸J7֕EGP d7aϾK]WZPi[CcМ*}-fXw*H"\(ls/;L62t{).Xw> +endobj +1459 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1460 0 obj +<< +/Filter /FlateDecode +/Length 2352 +>> +stream +{o)Ho/xm\9.;"Lu Sesv\nγ9ޗE]z.s +!i?ۀF-}?:UhI?;^FBI *-N +ˣڭvOW s]ytt,0߿G h'ښ=8a|*w''B}nn̠v/ '2:K>K`jw^8^ȣVu1cbUh=,*{x0F>','v?֍)~pcJM^gRA@hШVb<X.U_4&vf/xؙa6 gc +93 l}H;o@IcлW`kLc9KQh4ܤ 0Oe+K`E$eƇ?>]l4,|}VLgW=AvEqZ.I[`J@Ōq.E'=g fe^btd[|0"N^ [I;7sW,> n7.,>@|Q7F]d;Rvk v7 D!{}$SrfΒ<99̓t㬛aU8Gppj2eWG .h1@U*6XAt%O8 ]@>M/f~O^~PqN%[b҆BNZ]pQΣDQ-, y͍Wy9Xն7hWxeEQ瘼_ kiKd&[ Eˌb}ocilu<#RڼfMYvkGC("Ky71sRvI3Ql*>N:,hܜu@v9]Je~H6 +˅%q VI[{fL𗓶?'"F7Z)7pN-M)7nsBޘգ:;,Wwoߒ:4fMw#{*B-0#Hu~X˲(s; 5lox݆@(y) +|yU/9n2ʜ{G,=cB?j RzqZ?xN}Z(hwAI;eHxg5~F$C|p|D|tQ)7yc>iz|"H{t%T}{R  #BstѤCZ7 p̡LuzhFBihlnH4(RL;2FˉG_1j1v4C:KJsT Ղ) +KW'AiC6M&'V y\ C GrH17Q_0i6Ē)nWxMW{_έ{t4ztѵ:6uy{7Q-HV}B7kvjQ_/\g!wb> + d/ןY?!%ċr}AE nzءOD'V>Yai h^PG~Rx[úB&7:>͌uq{猣Z_(2]"߇yHtP!XynbXh2 AO`$ʜm oS#6epzA91ӱ+w/4RaAG$Y\,`b낄5xhGRAO#Tp=Gl'}l8#qJ |$Hc94E ^;:fZv,&te9|;pi̬OfeXMMb`>ͬUd'vK+tGKz(zS| aʸ7 ~M7DBϝ̍EM4+E  z3dTh13qv ?=Ѱ:vS HY8sĐiIY7:{olUGSi# 8ۆ?Q,S +}^'fICQ`?l. `BYpG8nWm/K1ޣw+וGQޫ6$Ikx268q1:pd=Gc_J +endstream +endobj +1461 0 obj +<< +/R7 305 0 R +>> +endobj +1462 0 obj +<< +/R201 362 0 R +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1463 0 obj +<< +/Filter /FlateDecode +/Length 2427 +>> +stream +]ޝZXTӤ/sfكvKtfx=i +y,L~@D_֠%Xo;D55ö\yyj\n[Y|}мv?jNPz$1BrgU-ϝH9 ] aXzO>Ja|z{Zqso ͌CIWr*I2vLpzq9ށ̇p$8L>H +-CWxU>g;^7ljj ;ϯ Xfs!𝯕K &B泩vԇ2^&5p[iKzk% PI#-< Bk6m'=o5u>hRQOs~TvW&-=D4zjAoC(ĚžZI w낱*褀32D%ϩ: +Fmu|D]pT\(BA S)^CeNLi ҮDHC,eB菔s6{xVCWs5?2t:;A5d8n'].Ajo5e~aʛۨ<5.% Abr ~HLl,L+aD#*W0%L?BlOATi5^r…orq 30 {N6ϛқڸ +pgrQOJ2,,J=8i畐b Zf'ˀu!'\b&:O[P;>s|ap:T#}Bvq/l}ZQ0Fzy|Zm< _zA א?緲bb(YTsƋZYkIynJa0H{! @6T7 zCuZ OL5mD5l+II䧑E@D#<v 4oq5_DtPSs h˵pC98gԣH~Q@jIw(LF/'㑩'gv>.7~* \Ϙ,b%>RS2 +y5J}_^a;WRݻ#…AaLBT{o[Gft lP@DbbH`jh:Ŀ)A("K3J?{n+ސI#[~^_lLx&i!Zj{mm4wC>0dc<6 +~ c;ìLRP1ϖE֏ 5~`%{i Oe: l'J9)Y0??@179]vӈt :rD~M l ld6*U|v_и픊͕K%fA"7 R+D8\ZJ I-SyERr؆Q +endstream +endobj +1464 0 obj +<< +/R7 305 0 R +>> +endobj +1465 0 obj +<< +/R163 332 0 R +/R137 315 0 R +>> +endobj +1466 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 167.75 435.429 250.433 447.59 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <0703c7e2a5f56d479ff6338b8276bba8c93fcabf5fa3> +>> +/Subtype /Link +>> +endobj +1467 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 54 345.539 105.725 357.699 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1468 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 160.701 345.539 243.102 357.699 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI +>> +/Subtype /Link +>> +endobj +1469 0 obj +<< +/Filter /FlateDecode +/Length 1591 +>> +stream +ߨ?p71A\D#|*;CDD"`3r> h/(\&KS#_5ZLZTN:M`IccQU"JnX!E:W5 0`tj9Uw|ph૾yj H`yJeu|X[(T+"N~?%=~l, sY븀%$wJT')e(@:Cʹ}Hn(10 Ow 6D-hr *E$dXY `YP%c'6{A5Y.a g0vAzŦzWuI= }\jw!A[Ă#F Gֿ 8uWuc^dEZ@QYYYTA9-I-b3iQ"hBaH;&ZFU•| xu=j4aD2t:IV7\E95(O2̓ F[fϭ Y=TI5׎KS_" 8Hҏ>$k:SΈAPQ+0dS5 ӀdE`Z3$8כxZLn#[w\b72*[ MdG +p׆>=^] vWbT%#_ 0T KV#$DB&[Ske/_wwQ3\n#(%Ҋ>iC-Akm4‚\RٝQ&xe{.G郤"k> xH?,8M&(*rsJ %,d;5~_}NBuw]D B=)($Svft {nrm )R7Oa++o=tӢuU§.Z J>Oq="D&ȓŃYdu3}4ֆ ]AE- 羡:F)'1J+#L%XzR3m >s4%ϬˆLfTte1wJ̣;'-)|^I/ CcΓʽ +endstream +endobj +1470 0 obj +<< +/R7 305 0 R +>> +endobj +1471 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +1472 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 54 376.512 159.938 388.673 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <5d0db2ae25ab97aa8e406c3ff40762d921a9d7c79665e67df376d0e87a5a52d96c2be56f7df2d40c24736cdb547a677bb81a068fe755462d2c8e83b1d92b557142fcc4ddda61c93e907a555dfa0254d10cbf87ad4545608d2c9d52425fe50ddcbbcc2dfbbd> +>> +/Subtype /Link +>> +endobj +1473 0 obj +<< +/Filter /FlateDecode +/Length 1533 +>> +stream +:Da&49# |9I&L^ "RUJ^-Mv'(s}vQv]blZ5d 爙Rr u]控ZAM6E?Hw|{z Q KG:> KCE7g%N$% +RE=R1~¤JO#&-vOAhtU&d_'{ X=ɥO?M>MoLk7%HoqWрٕDزKy3]lj4'>%Nql}D[eZu+`1J <ܱm_It! s\PG)fzU5Bϫ~հDft-vKK@3PJ`6j`l7'إ-UVUdRJ Ep#T,f&[p}: MF%F"բ +"UIam/dCkkxr?[)@(D:&+@:Bf!z DERb湗pUz @)8!`;*8lVwc? JmXWέ;۲|<8x fچ ~I +~2<"Y+͛ZZ;%2>M0-1d]?O}y=!h#ڰPp˙bO7?tL[]eT{h +~Cߌ3G'IRZSC}ECNP@heq?nhYop5n8 {(di p:j1 ԣ5鞈u\['0+r3U9֣S7הN:^O\ǏB˺""BMN>y3#V!{mP%BgLyٹ<(LI#ȭ xhV aܿ(_ +{Ym4>fc7H/w{넃LOxw!1e6U2>|/"^bxNٷnj%ƻ֔AU + d A?t$i'$j`f +~q_Qafΐnޔ|7m1NP, 4+^1jHDͷ鷥po@tAL60O7!J^uu{%,<@i|HuɻmPWk0O{ۧ'失 +'T"z0ȀᓦS BG BiNGH +endstream +endobj +1474 0 obj +<< +/R7 305 0 R +>> +endobj +1475 0 obj +<< +/R163 332 0 R +/R156 346 0 R +/R137 315 0 R +>> +endobj +1476 0 obj +<< +/Filter /FlateDecode +/Length 3173 +>> +stream +qW]/aG}{x4)7fR}*k; /0'| +\E ":(= @S!.T;(D]S p޿ڸ=E@i%>H(B#oMD 0%8ҺiI4p7)$^hn +K̳ݭI%y_X_,G6Wt.(&@XTd{u1ߣ4I|o r(CAcPܺ=}p0 ]p=.;sw)L^ `j)+LjbI ܝEȪnbTE{[ _>~0jYjF` \8>^S/yuվ+MZO|}"MHɑ*Dds4ZS,pfWE*\q jw([Blͣx-K Qv2f#%(5Ő£nn.WBN +7CC# 6c%[\ K{%& 0҉)8SOt':8<*ASޕ7|ІӲ8\vCEuoyϊZC;ɂWeGQ =xv闫Р4[qIkQhSˉ\K}:#G8vc<BrV-Ld5f[JS͝Ń^.9II1 85y m_5Rl(K1+$ KEWC$xRMtB72 2 ROELC'U5ֽ7RgMd3 @ts<:ܻw`V@}"wZi֡5-u.IqM6gyF@;hrnma5=ѭ%T + B]lyA.d,)CO[Trd +1ޝ $BI"gGi%^ͻ(iR{ϩYADYHtp2s -P^ɚ5pd+gviF2FYdx(Un(H ˊ'_RDN/ڎ;|PsDt7Iho`po(y7i8vg:lJʆWIV:?HzzWS+CwR&3ᕇ+,U[*#D{QQ(b6>$!}V(@Lj&_m,(0fRS~9"nkqV.WFOR^{]&_U qBo3;̘F1H +`.T sRgN +_3fxg,5;j'fAˢCc2"pwA1JxXeOX5&t|L&4wny}wO`, ;y&^2Mt awUt>82"YL")W3kW9E@/Lɐ1ؠ; :#&iW0gvemH 0sWaYSW#sc8 kPߪ@$,'^X$Ys30Si>l3)^3@*곺7 u'wNtTa!xI`Muhbv_ 칹CEJQ(?Ĕoq~FA  \nKYa,F D['XQshĜ"R=4-1أ7Q@Êf&djѶ:' rWH\:!~'/eY3s>UʩkBozg+ /.K4ȳ7N&@W>OQӶ1} z,zx.0*h$6Hך90#=aa+>u*tw+?S>YGxCRV*gÔbjC9ٿox&(s ?XR=Lj\J3Aad$S;H6uj y?XIX03q0zf-e4KxAw +MN(hY seCW+ +U;ۯT l(A35̎.s> +endobj +1478 0 obj +<< +/Type /ExtGState +/TR /Identity +>> +endobj +1479 0 obj +<< +/R1816 1480 0 R +/R1815 1481 0 R +>> +endobj +1480 0 obj +<< +/Subtype /Image +/ColorSpace /DeviceRGB +/Width 1095 +/Height 144 +/BitsPerComponent 8 +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1095 +/Colors 3 +>> +/SMask 1481 0 R +/Length 3644 +>> +stream +"sW -H;$x~fMDꄟh^Pb\BAs+ԮAHY- + =Euv0*:]XNe9 R¶#[hY8Q**}@zJV ӰlHf y+'V$EyY4`$PrieC៊ZYB*v=4ك×_ ʂTG7*@{ +-2;u&PXG`s5@xr_Ɏӟ (Fk.,+7!$с#E ++یN@$7rhiHI(Z\1rzna_$D7\r"ͳ &yɊ4k  2|eyʇ}].]jMX"1@HȎc6)vBdU7AJ#tŵID@4aarGHx!s@ +!@:Ӂs^*ʤRw6f-'6xry#bŕ4IRX@TF[9c}]@ٗl׍ +c>吵9cF'lDy烁#цMvzh&U:D-euk$p66oAlN69!%Z:ït=UIh^At(N,]AK0}\1Zo*9ԡ=JM2uc& 3yzdy bИL_|Z^T+7Z~7狅ŽOw1SEDn{pK '7C)_FxZ5$'s[C 0z05:ɪRloƷXw'C'9BM'F}!;zQA ع_u`t:Wʣ)^v\@, AT? +)IZm[S,+eU/Trg%B~j0Y`-¨뽏~l9ï[G$Y9Y!F+ +C_/ E`?pղQ״\=׹Xx\QYXۯa.M[K,٭j!-ӡ=D?ߟ`Fnۯd՞of#2VTp%յkAKJ*jAce(kwWukғH*eO؀\C⍃JO@ i~ EkPGr`oiQT+(MU#Y[.55! ba[FG^NCRªp.oKd"gS]q[ĘuW1~C^~SΡ&i KkdXFμTLhލ;ezB@(M= ':0/[jVrfu0cUy؄e0z+]a-jkAt +u٥¶0%5-A9W7)+: dTМ9ߩu T<@ic={=@) SdH?m1泛+fopNF*"'dw5,y8& -(4UY(dF 1MJYv')XBn~HkQ,vC b7\]q-#? Pl%Z?J`@HLe>6dž%QJ M/AONMݛͱHE~AǛ} 0Bv3,(%:lH&}QJ+vdQDFT6jqsfLst&A`|@0ONbDIJ"n3(+8d#5>"ٶ587 %1J ՈF\Ή!p!Z5AdƝ50O`4d|@"1U$/Y>ϕ#Ô+;+xbى2V^1KYs!<#`|I@ru7jm"r`R؎{'cA3c s\O7Iҝ }3Ju L[1vW皎T]="OÇD?;Ty޶|+Q +[K)o訃mg˱IVqTm}(5b8ϨsԊ!XZ>UA%B!g\ Tts`kf8(ANPl秽V;tF[ > +/Length 7872 +>> +stream +]6 }ݜߒ+'%KSKiN0PvFB2VX* ꯿$a4 XJ*{' +!ibL;[7| 5rcp)w1[[bFT1 +(m#Ygg~]!H/#pR|Rb~K4rVɩu-ت>J $ +ex (S$Hl5!z8}Lz ZݑeԫN+?l%)hL +VP4QOF92"?@5U6ehR< +pu{ʴlɃ (13&%8L౜ }u,N +8MT?tv! yw8x`++RVnu_rΨ9G`^Y3/^_ʵR›ޱ={3$/RM;V=!#:ECΦ:&?}% QN +)n`b],D+mbui)ꈭ^g=|f:pTVW_m7Y}$'%ć9Nl;4b1SH a,Z^pc2y.:CUe7 tS @S6E5}\feU3 ;?1]D |b{HKo.}Zc]ʈIOũ}ΒZQD`ж5UlNP̟p@6㈏/!9^07Gs8r:C?Xʦd8$鱐<S+qKd}]S@YSѵM5VsܖԹSLJB,Mۢh?3w*pq*Q'?!FP"82ff7plPl ҔCZjZTIF|&ℿWBY#jl($haGwssݣ0u]ԩL:r0pTQR7R\yK |RŻK UOS&\ 1NL dK6p;Rʢ?lvGzrݜV6ɍZ\{f(@Is!io;s< m\gZaf1I |NBdhR"UۭӴtx/Q$(k@'fOQ`f+EhȻܿ/aTb[o; vPHvLL@/aΒP酖OH9|Q7G5PH{mFmaU5Ѫ C5ү͐-=!W5F%r|ټk[X +.Y0^)FuzI1Mn(K%翑T{4E{gɽwb PiW5Nd fEs(й>jz ?VJi xAb0^)~)/}}'z9u>>lh{UBچwA QK2zl/rtͭU2:msyWquh.V3׬~\kẹPzMΆAXiDT01``4Dy{b0dA§6NKϑ @1l>tLL2~hb 23;R.HJ!hq >kO;c]j~kq75E$Y[DO?o{ Ty˙:,ꎈrTCئNmzP1T{drLH+J~`7ΘD6y. bVA8\.\YT9 +y1"~K>hϿ8@r`\tI( ʉo3#/[SbNӧWg oN;:G ̀;.DoMmby#ocIwRc".9/8g/~BX#|WzXue>+8ZR[z]{ o~Џilǝyw$eB W~VCmjaC,c5Drj[ 8/L_"ć4$je#Gʡdp(wkTMzdLjEj᳡nI.̽Qy] ` +^9%r>;gbjbqTdyTdۉi ]1|vv\yǁ1G_Ijgsgҵl/ \F'lyJLEo֫Ž\3_C !:g]#r'/Md#̤\EPdn<4JV*u:y&/z>!@[}B%+v $-2$"1rjIJWZ)]{ s7M5'u_.|s;8i!;R0 s +#:#qqjb:E4.w0%6iƈΒu'gp.eU>VbkFFC! +&X'^NI`?| sME?k#Z>,+m_rkRat)WlSe^C\MzEIHɖuBEYhF7>*MS9r4Yn~l=xF1^旙 :.V Aq<2_^j, OȜH0c@] 尹JWx=A$"JT=, $V}:MqlR/IjN}JU(r"EF9)4՛㌆76{ত[o=E d`ՉD .Ga6y,C x%PT)RC=EY vnppH`?&x&SvOՃ*]|hVlDyL7pF֥ލq#ֽ.$=3'i{Oo).W@{ gݡ,d uB5- h[M<xE:ZDg}Lv_ pT@k\XteORZ52{6^vt<UXI\m8<lo|رH 80 Al:7W@ab3:FpF$Ӛ <~޼ڻg^1{s~wNU،ㅤՓ'~W ݑ\@6m 7l_N(-;~\Ӷ-_džnTjBƩ(h5AHaD+_4/$_tO̸[, cl3hzv.$S]t1j2P`wI_3!EC4)O6yKw\[>~KtydbѴ*zB׷ER}H !*Mo?ԴóXǐa!޼et 8~`6ئeN|O`Ay$rЪ%.+07N",Π oOV`3Xzl{VlV!&xҡ!f .N^̨3[ғ=DGNztYup>&zxnW)Rk +_Qrs*Uj_SϯicFHZ6f*v/á?䉚ȶzAiSr+w,81KֿgCHPzg3=XNH|͘[QYLxXgOTvobcg :]?)e(= #k=[oˍ[Ņ偔dg(|~QqG- 5D ʶL6rc^wEOCR`܍D ?2&@_츃g. =Ȥ*d PJS[a.6d{G&kj.qm#z˼fUp{@Ș^7y)BW{D>FႡ P6Lt{OV6HzIأr59x~Fӿ>! ~a+htg͌P҇z>z6mkz Ńc0L{H/Zn]P=ME +>1>,;$=3( 4I?Ƒ:chy:<*(ǎHU%ġ˷l}J{Yo;0[D0xH$yr;4qgz + ETќ/YwH횒Gn-PjU@珴:1>32( MBbIU:Kz60 < "LxNBǾ$zAa7T0w| hW3u? άfdn&>$H Ϋ6xB}D; {[Q9a7|uNǛKѥˁan>aIA fOBԃLA3" k|Q0ji߀7}Bgv,u &_a eB\pnu2$IF.m Q9oNմsC}Ь@<]1mnr'+n$.V 8Dn4sD^ltUo9R٨4k0΄!%/Cjf`\^j8dFrڶvhy]` 0sTtQ"ö.Fi_Ijl*D6y!EdWY@{X#Y+pdv?͸Ǎ,$~&M6]hO\AT(}5/d;ph5^JQϸ-.,jBgoA|3gH,]4BI ov 5 }N×}P ,_|-FT2k!z'IrI 2҇1F q܆~c ]o+)t}n y}%VYʩE~GzW[Vg]u > +endobj +1483 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 128.865 316.975 200.443 329.136 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <50343d63eb5ce210e8f51ddf80c880ac4b049c7314b3a62e75a7b5cda2e3577efc4b7dc9ba353271c134e67987e2e187ede62ce6b5af420a7b44176f97c3ea80bc31f249f7cb201b6733511472aafa7101a62dbbb1a74ce3691cf9bbbbf9c9c2f99bfd792161> +>> +/Subtype /Link +>> +endobj +1484 0 obj +<< +/Filter /FlateDecode +/Length 2719 +>> +stream +DFU_YAZY^Bή!1\) XHΎ߽ȉTeF9G{_9t3jR&Ž.G=gp ] H8Y7<"?.kPǴԇEcV:d|Ksxgӟp$9:5XlлZ87EW}v"EN<7K`Wɸ1WNpC% +c+1!c;gѽJA3MJgYM1xe3WdR̅\bv3NAkJ9ڎcm{>@7KD;+NQdl LDdKǬ.[d(YX\pZ >eK_ jȫ&S Ʒ +M[C-oOkw +CY-fԃy?b\VPTdP6|Q@Zi%&W0s'@Pf)򇶗R[P]4oo l?|omujԬSvQuQ.̺M@V-J,2OYwLd؍p" +۞gH7Ց83aEؚ65&>ۖT\Z_rHumTH~"y7l"o6L'򅁄n֡pa#9JsL(ͩVoLI+Q ̚u|eYXDNK@Ë+wg\ ԍи:S(D- u3$lA!f3ZVɔ_ ~D$҂'kesxSfWX'YE[5ʧ%%J+)}_hBT^td/ +d^BqM@j3Pa;D_.5ZB>^B-&uT(I to,^( y +t߄SdσoBzIՁF7D@~ M&pyg U~BQG(n|ř=Ɵ?7zeۺZ8 37ښ?BLAf-lgWن0У&GO'&{#]A59^PC'0r +ѡE}r.mIA<,3s[SF@ƀi |V5`7FO% eTݢ~d#1BZ(1tVSB4AΗT-ҧ>|$6Uة1&E-T"IM*_)dȁa]^y`&w\(a { zML{ G ZPv1~'uG0G=Qz;1&7<=6_ XH"{Dv\Dk YYנ,gMˈPb*3Pr P\u]QJϦ10uNn?la)Z݃-Z{wW+Rhva + #> $DCQG̘zwõC=o:8:C{CnE1پ-1|RÝ W(h7u8qt ) xar/=4.&Y|Л.>̯qQg א &&@Pu-qe+1a˞#$قU+c +؄;ř Oޗgf:{pMz#55q(A-[[~u7d7Hy*ڌBM)'P?Ѡ >9 ={omqLR +"61tbߢ6ϙ63aѻ<qnՓC%%Pa.LѾMVyMZF]DX"GjK6]ӓ>zQ;kfm6"iEpr8l@?NDk¯V1D?1@Id|Cdr%ag\:*9vpBYO7pq7g|ܔP5\wVNE:];lѾH41ZiaN\!ym 9nf7';/%yk>ʌC7PzʭEr7w-vz>ٛBh >GP> +endobj +1486 0 obj +<< +/R156 346 0 R +/R137 315 0 R +>> +endobj +1487 0 obj +<< +/Type /Annot +/C [ 0 1 1 ] +/Rect [ 162.379 356.255 300.696 368.342 ] +/Border [ 0 0 0 ] +/A << +/S /URI +/URI <861fdaba646a51a277ca752c011aaa7e9db2b461c7d47821fac992f3c6c28f3d16387cf37a85c62b347fafedc69627d3506c2887125f5f579b6ef0bac6f62830e25c6839938aa7008d93d75d46cfce02d0b6863cd94a5701a47ad126ad65e18a5017df370f6a> +>> +/Subtype /Link +>> +endobj +1488 0 obj +<< +/Filter /FlateDecode +/Length 1756 +>> +stream +y1؁3#ϴVi4/$E%mxC>bqAI.MAbcb뻹RHWD:y1wIS\&LJx Ps~rO3ׄz|׾hc/bqu瞵pVϒ"^3+g@''q(sr_۩\3d⻰`BFm@} +ʡw >W2N` $@2k@ +*aGތ>iV/r.# ɝ(85Xgi%b~- )W\Rpg.Ȍ2S=sOҜ!_F:fتk;(s\ nXi1 +,dfohOlQ*n'Iօy|?zNXim)?E1ANi  e߻@W"et'B0 )E.,h4P+X +4,0Wd=S+Bg q 9'=Ve̚8ET,|{ !H4i˻eSzs?s(2iudI]F!&;%bAٸ=0`sUfoSiRjKxf'&s0OBx,[au9sLZ&yÿf~c%1\)JhH!ϙ 38)`j6Fu`='*vI;Fop ].//ߠx>2ș}'emEL6%M5@5B@9lGIOO=o7NgG潧XQMeuU 'u/No C=u޽w$*+Ҏ=e6 dWk/4 MNMHRFRjk_^uH4fvW*it"/fJJ85lKAHq.Y <38587d0060b717bcd207ebec4c66bd60> ] +/Encrypt 302 0 R +>> +startxref +1320654 +%%EOF diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/dictionary.txt b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/dictionary.txt new file mode 100644 index 0000000..6132ba4 --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/dictionary.txt @@ -0,0 +1,45333 @@ +AARHUS +AARON +ABABA +ABACK +ABAFT +ABANDON +ABANDONED +ABANDONING +ABANDONMENT +ABANDONS +ABASE +ABASED +ABASEMENT +ABASEMENTS +ABASES +ABASH +ABASHED +ABASHES +ABASHING +ABASING +ABATE +ABATED +ABATEMENT +ABATEMENTS +ABATER +ABATES +ABATING +ABBA +ABBE +ABBEY +ABBEYS +ABBOT +ABBOTS +ABBOTT +ABBREVIATE +ABBREVIATED +ABBREVIATES +ABBREVIATING +ABBREVIATION +ABBREVIATIONS +ABBY +ABDOMEN +ABDOMENS +ABDOMINAL +ABDUCT +ABDUCTED +ABDUCTION +ABDUCTIONS +ABDUCTOR +ABDUCTORS +ABDUCTS +ABE +ABED +ABEL +ABELIAN +ABELSON +ABERDEEN +ABERNATHY +ABERRANT +ABERRATION +ABERRATIONS +ABET +ABETS +ABETTED +ABETTER +ABETTING +ABEYANCE +ABHOR +ABHORRED +ABHORRENT +ABHORRER +ABHORRING +ABHORS +ABIDE +ABIDED +ABIDES +ABIDING +ABIDJAN +ABIGAIL +ABILENE +ABILITIES +ABILITY +ABJECT +ABJECTION +ABJECTIONS +ABJECTLY +ABJECTNESS +ABJURE +ABJURED +ABJURES +ABJURING +ABLATE +ABLATED +ABLATES +ABLATING +ABLATION +ABLATIVE +ABLAZE +ABLE +ABLER +ABLEST +ABLY +ABNER +ABNORMAL +ABNORMALITIES +ABNORMALITY +ABNORMALLY +ABO +ABOARD +ABODE +ABODES +ABOLISH +ABOLISHED +ABOLISHER +ABOLISHERS +ABOLISHES +ABOLISHING +ABOLISHMENT +ABOLISHMENTS +ABOLITION +ABOLITIONIST +ABOLITIONISTS +ABOMINABLE +ABOMINATE +ABORIGINAL +ABORIGINE +ABORIGINES +ABORT +ABORTED +ABORTING +ABORTION +ABORTIONS +ABORTIVE +ABORTIVELY +ABORTS +ABOS +ABOUND +ABOUNDED +ABOUNDING +ABOUNDS +ABOUT +ABOVE +ABOVEBOARD +ABOVEGROUND +ABOVEMENTIONED +ABRADE +ABRADED +ABRADES +ABRADING +ABRAHAM +ABRAM +ABRAMS +ABRAMSON +ABRASION +ABRASIONS +ABRASIVE +ABREACTION +ABREACTIONS +ABREAST +ABRIDGE +ABRIDGED +ABRIDGES +ABRIDGING +ABRIDGMENT +ABROAD +ABROGATE +ABROGATED +ABROGATES +ABROGATING +ABRUPT +ABRUPTLY +ABRUPTNESS +ABSCESS +ABSCESSED +ABSCESSES +ABSCISSA +ABSCISSAS +ABSCOND +ABSCONDED +ABSCONDING +ABSCONDS +ABSENCE +ABSENCES +ABSENT +ABSENTED +ABSENTEE +ABSENTEEISM +ABSENTEES +ABSENTIA +ABSENTING +ABSENTLY +ABSENTMINDED +ABSENTS +ABSINTHE +ABSOLUTE +ABSOLUTELY +ABSOLUTENESS +ABSOLUTES +ABSOLUTION +ABSOLVE +ABSOLVED +ABSOLVES +ABSOLVING +ABSORB +ABSORBED +ABSORBENCY +ABSORBENT +ABSORBER +ABSORBING +ABSORBS +ABSORPTION +ABSORPTIONS +ABSORPTIVE +ABSTAIN +ABSTAINED +ABSTAINER +ABSTAINING +ABSTAINS +ABSTENTION +ABSTENTIONS +ABSTINENCE +ABSTRACT +ABSTRACTED +ABSTRACTING +ABSTRACTION +ABSTRACTIONISM +ABSTRACTIONIST +ABSTRACTIONS +ABSTRACTLY +ABSTRACTNESS +ABSTRACTOR +ABSTRACTORS +ABSTRACTS +ABSTRUSE +ABSTRUSENESS +ABSURD +ABSURDITIES +ABSURDITY +ABSURDLY +ABU +ABUNDANCE +ABUNDANT +ABUNDANTLY +ABUSE +ABUSED +ABUSES +ABUSING +ABUSIVE +ABUT +ABUTMENT +ABUTS +ABUTTED +ABUTTER +ABUTTERS +ABUTTING +ABYSMAL +ABYSMALLY +ABYSS +ABYSSES +ABYSSINIA +ABYSSINIAN +ABYSSINIANS +ACACIA +ACADEMIA +ACADEMIC +ACADEMICALLY +ACADEMICS +ACADEMIES +ACADEMY +ACADIA +ACAPULCO +ACCEDE +ACCEDED +ACCEDES +ACCELERATE +ACCELERATED +ACCELERATES +ACCELERATING +ACCELERATION +ACCELERATIONS +ACCELERATOR +ACCELERATORS +ACCELEROMETER +ACCELEROMETERS +ACCENT +ACCENTED +ACCENTING +ACCENTS +ACCENTUAL +ACCENTUATE +ACCENTUATED +ACCENTUATES +ACCENTUATING +ACCENTUATION +ACCEPT +ACCEPTABILITY +ACCEPTABLE +ACCEPTABLY +ACCEPTANCE +ACCEPTANCES +ACCEPTED +ACCEPTER +ACCEPTERS +ACCEPTING +ACCEPTOR +ACCEPTORS +ACCEPTS +ACCESS +ACCESSED +ACCESSES +ACCESSIBILITY +ACCESSIBLE +ACCESSIBLY +ACCESSING +ACCESSION +ACCESSIONS +ACCESSORIES +ACCESSORS +ACCESSORY +ACCIDENT +ACCIDENTAL +ACCIDENTALLY +ACCIDENTLY +ACCIDENTS +ACCLAIM +ACCLAIMED +ACCLAIMING +ACCLAIMS +ACCLAMATION +ACCLIMATE +ACCLIMATED +ACCLIMATES +ACCLIMATING +ACCLIMATIZATION +ACCLIMATIZED +ACCOLADE +ACCOLADES +ACCOMMODATE +ACCOMMODATED +ACCOMMODATES +ACCOMMODATING +ACCOMMODATION +ACCOMMODATIONS +ACCOMPANIED +ACCOMPANIES +ACCOMPANIMENT +ACCOMPANIMENTS +ACCOMPANIST +ACCOMPANISTS +ACCOMPANY +ACCOMPANYING +ACCOMPLICE +ACCOMPLICES +ACCOMPLISH +ACCOMPLISHED +ACCOMPLISHER +ACCOMPLISHERS +ACCOMPLISHES +ACCOMPLISHING +ACCOMPLISHMENT +ACCOMPLISHMENTS +ACCORD +ACCORDANCE +ACCORDED +ACCORDER +ACCORDERS +ACCORDING +ACCORDINGLY +ACCORDION +ACCORDIONS +ACCORDS +ACCOST +ACCOSTED +ACCOSTING +ACCOSTS +ACCOUNT +ACCOUNTABILITY +ACCOUNTABLE +ACCOUNTABLY +ACCOUNTANCY +ACCOUNTANT +ACCOUNTANTS +ACCOUNTED +ACCOUNTING +ACCOUNTS +ACCRA +ACCREDIT +ACCREDITATION +ACCREDITATIONS +ACCREDITED +ACCRETION +ACCRETIONS +ACCRUE +ACCRUED +ACCRUES +ACCRUING +ACCULTURATE +ACCULTURATED +ACCULTURATES +ACCULTURATING +ACCULTURATION +ACCUMULATE +ACCUMULATED +ACCUMULATES +ACCUMULATING +ACCUMULATION +ACCUMULATIONS +ACCUMULATOR +ACCUMULATORS +ACCURACIES +ACCURACY +ACCURATE +ACCURATELY +ACCURATENESS +ACCURSED +ACCUSAL +ACCUSATION +ACCUSATIONS +ACCUSATIVE +ACCUSE +ACCUSED +ACCUSER +ACCUSES +ACCUSING +ACCUSINGLY +ACCUSTOM +ACCUSTOMED +ACCUSTOMING +ACCUSTOMS +ACE +ACES +ACETATE +ACETONE +ACETYLENE +ACHAEAN +ACHAEANS +ACHE +ACHED +ACHES +ACHIEVABLE +ACHIEVE +ACHIEVED +ACHIEVEMENT +ACHIEVEMENTS +ACHIEVER +ACHIEVERS +ACHIEVES +ACHIEVING +ACHILLES +ACHING +ACID +ACIDIC +ACIDITIES +ACIDITY +ACIDLY +ACIDS +ACIDULOUS +ACKERMAN +ACKLEY +ACKNOWLEDGE +ACKNOWLEDGEABLE +ACKNOWLEDGED +ACKNOWLEDGEMENT +ACKNOWLEDGEMENTS +ACKNOWLEDGER +ACKNOWLEDGERS +ACKNOWLEDGES +ACKNOWLEDGING +ACKNOWLEDGMENT +ACKNOWLEDGMENTS +ACME +ACNE +ACOLYTE +ACOLYTES +ACORN +ACORNS +ACOUSTIC +ACOUSTICAL +ACOUSTICALLY +ACOUSTICIAN +ACOUSTICS +ACQUAINT +ACQUAINTANCE +ACQUAINTANCES +ACQUAINTED +ACQUAINTING +ACQUAINTS +ACQUIESCE +ACQUIESCED +ACQUIESCENCE +ACQUIESCENT +ACQUIESCES +ACQUIESCING +ACQUIRABLE +ACQUIRE +ACQUIRED +ACQUIRES +ACQUIRING +ACQUISITION +ACQUISITIONS +ACQUISITIVE +ACQUISITIVENESS +ACQUIT +ACQUITS +ACQUITTAL +ACQUITTED +ACQUITTER +ACQUITTING +ACRE +ACREAGE +ACRES +ACRID +ACRIMONIOUS +ACRIMONY +ACROBAT +ACROBATIC +ACROBATICS +ACROBATS +ACRONYM +ACRONYMS +ACROPOLIS +ACROSS +ACRYLIC +ACT +ACTA +ACTAEON +ACTED +ACTING +ACTINIUM +ACTINOMETER +ACTINOMETERS +ACTION +ACTIONS +ACTIVATE +ACTIVATED +ACTIVATES +ACTIVATING +ACTIVATION +ACTIVATIONS +ACTIVATOR +ACTIVATORS +ACTIVE +ACTIVELY +ACTIVISM +ACTIVIST +ACTIVISTS +ACTIVITIES +ACTIVITY +ACTON +ACTOR +ACTORS +ACTRESS +ACTRESSES +ACTS +ACTUAL +ACTUALITIES +ACTUALITY +ACTUALIZATION +ACTUALLY +ACTUALS +ACTUARIAL +ACTUARIALLY +ACTUATE +ACTUATED +ACTUATES +ACTUATING +ACTUATOR +ACTUATORS +ACUITY +ACUMEN +ACUTE +ACUTELY +ACUTENESS +ACYCLIC +ACYCLICALLY +ADA +ADAGE +ADAGES +ADAGIO +ADAGIOS +ADAIR +ADAM +ADAMANT +ADAMANTLY +ADAMS +ADAMSON +ADAPT +ADAPTABILITY +ADAPTABLE +ADAPTATION +ADAPTATIONS +ADAPTED +ADAPTER +ADAPTERS +ADAPTING +ADAPTIVE +ADAPTIVELY +ADAPTOR +ADAPTORS +ADAPTS +ADD +ADDED +ADDEND +ADDENDA +ADDENDUM +ADDER +ADDERS +ADDICT +ADDICTED +ADDICTING +ADDICTION +ADDICTIONS +ADDICTS +ADDING +ADDIS +ADDISON +ADDITION +ADDITIONAL +ADDITIONALLY +ADDITIONS +ADDITIVE +ADDITIVES +ADDITIVITY +ADDRESS +ADDRESSABILITY +ADDRESSABLE +ADDRESSED +ADDRESSEE +ADDRESSEES +ADDRESSER +ADDRESSERS +ADDRESSES +ADDRESSING +ADDRESSOGRAPH +ADDS +ADDUCE +ADDUCED +ADDUCES +ADDUCIBLE +ADDUCING +ADDUCT +ADDUCTED +ADDUCTING +ADDUCTION +ADDUCTOR +ADDUCTS +ADELAIDE +ADELE +ADELIA +ADEN +ADEPT +ADEQUACIES +ADEQUACY +ADEQUATE +ADEQUATELY +ADHERE +ADHERED +ADHERENCE +ADHERENT +ADHERENTS +ADHERER +ADHERERS +ADHERES +ADHERING +ADHESION +ADHESIONS +ADHESIVE +ADHESIVES +ADIABATIC +ADIABATICALLY +ADIEU +ADIRONDACK +ADIRONDACKS +ADJACENCY +ADJACENT +ADJECTIVE +ADJECTIVES +ADJOIN +ADJOINED +ADJOINING +ADJOINS +ADJOURN +ADJOURNED +ADJOURNING +ADJOURNMENT +ADJOURNS +ADJUDGE +ADJUDGED +ADJUDGES +ADJUDGING +ADJUDICATE +ADJUDICATED +ADJUDICATES +ADJUDICATING +ADJUDICATION +ADJUDICATIONS +ADJUNCT +ADJUNCTS +ADJURE +ADJURED +ADJURES +ADJURING +ADJUST +ADJUSTABLE +ADJUSTABLY +ADJUSTED +ADJUSTER +ADJUSTERS +ADJUSTING +ADJUSTMENT +ADJUSTMENTS +ADJUSTOR +ADJUSTORS +ADJUSTS +ADJUTANT +ADJUTANTS +ADKINS +ADLER +ADLERIAN +ADMINISTER +ADMINISTERED +ADMINISTERING +ADMINISTERINGS +ADMINISTERS +ADMINISTRABLE +ADMINISTRATE +ADMINISTRATION +ADMINISTRATIONS +ADMINISTRATIVE +ADMINISTRATIVELY +ADMINISTRATOR +ADMINISTRATORS +ADMIRABLE +ADMIRABLY +ADMIRAL +ADMIRALS +ADMIRALTY +ADMIRATION +ADMIRATIONS +ADMIRE +ADMIRED +ADMIRER +ADMIRERS +ADMIRES +ADMIRING +ADMIRINGLY +ADMISSIBILITY +ADMISSIBLE +ADMISSION +ADMISSIONS +ADMIT +ADMITS +ADMITTANCE +ADMITTED +ADMITTEDLY +ADMITTER +ADMITTERS +ADMITTING +ADMIX +ADMIXED +ADMIXES +ADMIXTURE +ADMONISH +ADMONISHED +ADMONISHES +ADMONISHING +ADMONISHMENT +ADMONISHMENTS +ADMONITION +ADMONITIONS +ADO +ADOBE +ADOLESCENCE +ADOLESCENT +ADOLESCENTS +ADOLPH +ADOLPHUS +ADONIS +ADOPT +ADOPTED +ADOPTER +ADOPTERS +ADOPTING +ADOPTION +ADOPTIONS +ADOPTIVE +ADOPTS +ADORABLE +ADORATION +ADORE +ADORED +ADORES +ADORN +ADORNED +ADORNMENT +ADORNMENTS +ADORNS +ADRENAL +ADRENALINE +ADRIAN +ADRIATIC +ADRIENNE +ADRIFT +ADROIT +ADROITNESS +ADS +ADSORB +ADSORBED +ADSORBING +ADSORBS +ADSORPTION +ADULATE +ADULATING +ADULATION +ADULT +ADULTERATE +ADULTERATED +ADULTERATES +ADULTERATING +ADULTERER +ADULTERERS +ADULTEROUS +ADULTEROUSLY +ADULTERY +ADULTHOOD +ADULTS +ADUMBRATE +ADUMBRATED +ADUMBRATES +ADUMBRATING +ADUMBRATION +ADVANCE +ADVANCED +ADVANCEMENT +ADVANCEMENTS +ADVANCES +ADVANCING +ADVANTAGE +ADVANTAGED +ADVANTAGEOUS +ADVANTAGEOUSLY +ADVANTAGES +ADVENT +ADVENTIST +ADVENTISTS +ADVENTITIOUS +ADVENTURE +ADVENTURED +ADVENTURER +ADVENTURERS +ADVENTURES +ADVENTURING +ADVENTUROUS +ADVERB +ADVERBIAL +ADVERBS +ADVERSARIES +ADVERSARY +ADVERSE +ADVERSELY +ADVERSITIES +ADVERSITY +ADVERT +ADVERTISE +ADVERTISED +ADVERTISEMENT +ADVERTISEMENTS +ADVERTISER +ADVERTISERS +ADVERTISES +ADVERTISING +ADVICE +ADVISABILITY +ADVISABLE +ADVISABLY +ADVISE +ADVISED +ADVISEDLY +ADVISEE +ADVISEES +ADVISEMENT +ADVISEMENTS +ADVISER +ADVISERS +ADVISES +ADVISING +ADVISOR +ADVISORS +ADVISORY +ADVOCACY +ADVOCATE +ADVOCATED +ADVOCATES +ADVOCATING +AEGEAN +AEGIS +AENEAS +AENEID +AEOLUS +AERATE +AERATED +AERATES +AERATING +AERATION +AERATOR +AERATORS +AERIAL +AERIALS +AEROACOUSTIC +AEROBACTER +AEROBIC +AEROBICS +AERODYNAMIC +AERODYNAMICS +AERONAUTIC +AERONAUTICAL +AERONAUTICS +AEROSOL +AEROSOLIZE +AEROSOLS +AEROSPACE +AESCHYLUS +AESOP +AESTHETIC +AESTHETICALLY +AESTHETICS +AFAR +AFFABLE +AFFAIR +AFFAIRS +AFFECT +AFFECTATION +AFFECTATIONS +AFFECTED +AFFECTING +AFFECTINGLY +AFFECTION +AFFECTIONATE +AFFECTIONATELY +AFFECTIONS +AFFECTIVE +AFFECTS +AFFERENT +AFFIANCED +AFFIDAVIT +AFFIDAVITS +AFFILIATE +AFFILIATED +AFFILIATES +AFFILIATING +AFFILIATION +AFFILIATIONS +AFFINITIES +AFFINITY +AFFIRM +AFFIRMATION +AFFIRMATIONS +AFFIRMATIVE +AFFIRMATIVELY +AFFIRMED +AFFIRMING +AFFIRMS +AFFIX +AFFIXED +AFFIXES +AFFIXING +AFFLICT +AFFLICTED +AFFLICTING +AFFLICTION +AFFLICTIONS +AFFLICTIVE +AFFLICTS +AFFLUENCE +AFFLUENT +AFFORD +AFFORDABLE +AFFORDED +AFFORDING +AFFORDS +AFFRICATE +AFFRICATES +AFFRIGHT +AFFRONT +AFFRONTED +AFFRONTING +AFFRONTS +AFGHAN +AFGHANISTAN +AFGHANS +AFICIONADO +AFIELD +AFIRE +AFLAME +AFLOAT +AFOOT +AFORE +AFOREMENTIONED +AFORESAID +AFORETHOUGHT +AFOUL +AFRAID +AFRESH +AFRICA +AFRICAN +AFRICANIZATION +AFRICANIZATIONS +AFRICANIZE +AFRICANIZED +AFRICANIZES +AFRICANIZING +AFRICANS +AFRIKAANS +AFRIKANER +AFRIKANERS +AFT +AFTER +AFTEREFFECT +AFTERGLOW +AFTERIMAGE +AFTERLIFE +AFTERMATH +AFTERMOST +AFTERNOON +AFTERNOONS +AFTERSHOCK +AFTERSHOCKS +AFTERTHOUGHT +AFTERTHOUGHTS +AFTERWARD +AFTERWARDS +AGAIN +AGAINST +AGAMEMNON +AGAPE +AGAR +AGATE +AGATES +AGATHA +AGE +AGED +AGEE +AGELESS +AGENCIES +AGENCY +AGENDA +AGENDAS +AGENT +AGENTS +AGER +AGERS +AGES +AGGIE +AGGIES +AGGLOMERATE +AGGLOMERATED +AGGLOMERATES +AGGLOMERATION +AGGLUTINATE +AGGLUTINATED +AGGLUTINATES +AGGLUTINATING +AGGLUTINATION +AGGLUTININ +AGGLUTININS +AGGRANDIZE +AGGRAVATE +AGGRAVATED +AGGRAVATES +AGGRAVATION +AGGREGATE +AGGREGATED +AGGREGATELY +AGGREGATES +AGGREGATING +AGGREGATION +AGGREGATIONS +AGGRESSION +AGGRESSIONS +AGGRESSIVE +AGGRESSIVELY +AGGRESSIVENESS +AGGRESSOR +AGGRESSORS +AGGRIEVE +AGGRIEVED +AGGRIEVES +AGGRIEVING +AGHAST +AGILE +AGILELY +AGILITY +AGING +AGITATE +AGITATED +AGITATES +AGITATING +AGITATION +AGITATIONS +AGITATOR +AGITATORS +AGLEAM +AGLOW +AGNES +AGNEW +AGNOSTIC +AGNOSTICS +AGO +AGOG +AGONIES +AGONIZE +AGONIZED +AGONIZES +AGONIZING +AGONIZINGLY +AGONY +AGRARIAN +AGREE +AGREEABLE +AGREEABLY +AGREED +AGREEING +AGREEMENT +AGREEMENTS +AGREER +AGREERS +AGREES +AGRICOLA +AGRICULTURAL +AGRICULTURALLY +AGRICULTURE +AGUE +AGWAY +AHEAD +AHMADABAD +AHMEDABAD +AID +AIDA +AIDE +AIDED +AIDES +AIDING +AIDS +AIKEN +AIL +AILEEN +AILERON +AILERONS +AILING +AILMENT +AILMENTS +AIM +AIMED +AIMER +AIMERS +AIMING +AIMLESS +AIMLESSLY +AIMS +AINU +AINUS +AIR +AIRBAG +AIRBAGS +AIRBORNE +AIRBUS +AIRCRAFT +AIRDROP +AIRDROPS +AIRED +AIREDALE +AIRER +AIRERS +AIRES +AIRFARE +AIRFIELD +AIRFIELDS +AIRFLOW +AIRFOIL +AIRFOILS +AIRFRAME +AIRFRAMES +AIRILY +AIRING +AIRINGS +AIRLESS +AIRLIFT +AIRLIFTS +AIRLINE +AIRLINER +AIRLINES +AIRLOCK +AIRLOCKS +AIRMAIL +AIRMAILS +AIRMAN +AIRMEN +AIRPLANE +AIRPLANES +AIRPORT +AIRPORTS +AIRS +AIRSHIP +AIRSHIPS +AIRSPACE +AIRSPEED +AIRSTRIP +AIRSTRIPS +AIRTIGHT +AIRWAY +AIRWAYS +AIRY +AISLE +AITKEN +AJAR +AJAX +AKERS +AKIMBO +AKIN +AKRON +ALABAMA +ALABAMANS +ALABAMIAN +ALABASTER +ALACRITY +ALADDIN +ALAMEDA +ALAMO +ALAMOS +ALAN +ALAR +ALARM +ALARMED +ALARMING +ALARMINGLY +ALARMIST +ALARMS +ALAS +ALASKA +ALASKAN +ALASTAIR +ALBA +ALBACORE +ALBANIA +ALBANIAN +ALBANIANS +ALBANY +ALBATROSS +ALBEIT +ALBERICH +ALBERT +ALBERTA +ALBERTO +ALBRECHT +ALBRIGHT +ALBUM +ALBUMIN +ALBUMS +ALBUQUERQUE +ALCESTIS +ALCHEMY +ALCIBIADES +ALCMENA +ALCOA +ALCOHOL +ALCOHOLIC +ALCOHOLICS +ALCOHOLISM +ALCOHOLS +ALCOTT +ALCOVE +ALCOVES +ALDEBARAN +ALDEN +ALDER +ALDERMAN +ALDERMEN +ALDRICH +ALE +ALEC +ALECK +ALEE +ALERT +ALERTED +ALERTEDLY +ALERTER +ALERTERS +ALERTING +ALERTLY +ALERTNESS +ALERTS +ALEUT +ALEUTIAN +ALEX +ALEXANDER +ALEXANDRA +ALEXANDRE +ALEXANDRIA +ALEXANDRINE +ALEXEI +ALEXIS +ALFA +ALFALFA +ALFONSO +ALFRED +ALFREDO +ALFRESCO +ALGA +ALGAE +ALGAECIDE +ALGEBRA +ALGEBRAIC +ALGEBRAICALLY +ALGEBRAS +ALGENIB +ALGER +ALGERIA +ALGERIAN +ALGIERS +ALGINATE +ALGOL +ALGOL +ALGONQUIAN +ALGONQUIN +ALGORITHM +ALGORITHMIC +ALGORITHMICALLY +ALGORITHMS +ALHAMBRA +ALI +ALIAS +ALIASED +ALIASES +ALIASING +ALIBI +ALIBIS +ALICE +ALICIA +ALIEN +ALIENATE +ALIENATED +ALIENATES +ALIENATING +ALIENATION +ALIENS +ALIGHT +ALIGN +ALIGNED +ALIGNING +ALIGNMENT +ALIGNMENTS +ALIGNS +ALIKE +ALIMENT +ALIMENTS +ALIMONY +ALISON +ALISTAIR +ALIVE +ALKALI +ALKALINE +ALKALIS +ALKALOID +ALKALOIDS +ALKYL +ALL +ALLAH +ALLAN +ALLAY +ALLAYED +ALLAYING +ALLAYS +ALLEGATION +ALLEGATIONS +ALLEGE +ALLEGED +ALLEGEDLY +ALLEGES +ALLEGHENIES +ALLEGHENY +ALLEGIANCE +ALLEGIANCES +ALLEGING +ALLEGORIC +ALLEGORICAL +ALLEGORICALLY +ALLEGORIES +ALLEGORY +ALLEGRA +ALLEGRETTO +ALLEGRETTOS +ALLELE +ALLELES +ALLEMANDE +ALLEN +ALLENDALE +ALLENTOWN +ALLERGIC +ALLERGIES +ALLERGY +ALLEVIATE +ALLEVIATED +ALLEVIATES +ALLEVIATING +ALLEVIATION +ALLEY +ALLEYS +ALLEYWAY +ALLEYWAYS +ALLIANCE +ALLIANCES +ALLIED +ALLIES +ALLIGATOR +ALLIGATORS +ALLIS +ALLISON +ALLITERATION +ALLITERATIONS +ALLITERATIVE +ALLOCATABLE +ALLOCATE +ALLOCATED +ALLOCATES +ALLOCATING +ALLOCATION +ALLOCATIONS +ALLOCATOR +ALLOCATORS +ALLOPHONE +ALLOPHONES +ALLOPHONIC +ALLOT +ALLOTMENT +ALLOTMENTS +ALLOTS +ALLOTTED +ALLOTTER +ALLOTTING +ALLOW +ALLOWABLE +ALLOWABLY +ALLOWANCE +ALLOWANCES +ALLOWED +ALLOWING +ALLOWS +ALLOY +ALLOYS +ALLSTATE +ALLUDE +ALLUDED +ALLUDES +ALLUDING +ALLURE +ALLUREMENT +ALLURING +ALLUSION +ALLUSIONS +ALLUSIVE +ALLUSIVENESS +ALLY +ALLYING +ALLYN +ALMA +ALMADEN +ALMANAC +ALMANACS +ALMIGHTY +ALMOND +ALMONDS +ALMONER +ALMOST +ALMS +ALMSMAN +ALNICO +ALOE +ALOES +ALOFT +ALOHA +ALONE +ALONENESS +ALONG +ALONGSIDE +ALOOF +ALOOFNESS +ALOUD +ALPERT +ALPHA +ALPHABET +ALPHABETIC +ALPHABETICAL +ALPHABETICALLY +ALPHABETICS +ALPHABETIZE +ALPHABETIZED +ALPHABETIZES +ALPHABETIZING +ALPHABETS +ALPHANUMERIC +ALPHERATZ +ALPHONSE +ALPINE +ALPS +ALREADY +ALSATIAN +ALSATIANS +ALSO +ALSOP +ALTAIR +ALTAR +ALTARS +ALTER +ALTERABLE +ALTERATION +ALTERATIONS +ALTERCATION +ALTERCATIONS +ALTERED +ALTERER +ALTERERS +ALTERING +ALTERNATE +ALTERNATED +ALTERNATELY +ALTERNATES +ALTERNATING +ALTERNATION +ALTERNATIONS +ALTERNATIVE +ALTERNATIVELY +ALTERNATIVES +ALTERNATOR +ALTERNATORS +ALTERS +ALTHAEA +ALTHOUGH +ALTITUDE +ALTITUDES +ALTOGETHER +ALTON +ALTOS +ALTRUISM +ALTRUIST +ALTRUISTIC +ALTRUISTICALLY +ALUM +ALUMINUM +ALUMNA +ALUMNAE +ALUMNI +ALUMNUS +ALUNDUM +ALVA +ALVAREZ +ALVEOLAR +ALVEOLI +ALVEOLUS +ALVIN +ALWAYS +ALYSSA +AMADEUS +AMAIN +AMALGAM +AMALGAMATE +AMALGAMATED +AMALGAMATES +AMALGAMATING +AMALGAMATION +AMALGAMS +AMANDA +AMANUENSIS +AMARETTO +AMARILLO +AMASS +AMASSED +AMASSES +AMASSING +AMATEUR +AMATEURISH +AMATEURISHNESS +AMATEURISM +AMATEURS +AMATORY +AMAZE +AMAZED +AMAZEDLY +AMAZEMENT +AMAZER +AMAZERS +AMAZES +AMAZING +AMAZINGLY +AMAZON +AMAZONS +AMBASSADOR +AMBASSADORS +AMBER +AMBIANCE +AMBIDEXTROUS +AMBIDEXTROUSLY +AMBIENT +AMBIGUITIES +AMBIGUITY +AMBIGUOUS +AMBIGUOUSLY +AMBITION +AMBITIONS +AMBITIOUS +AMBITIOUSLY +AMBIVALENCE +AMBIVALENT +AMBIVALENTLY +AMBLE +AMBLED +AMBLER +AMBLES +AMBLING +AMBROSIAL +AMBULANCE +AMBULANCES +AMBULATORY +AMBUSCADE +AMBUSH +AMBUSHED +AMBUSHES +AMDAHL +AMELIA +AMELIORATE +AMELIORATED +AMELIORATING +AMELIORATION +AMEN +AMENABLE +AMEND +AMENDED +AMENDING +AMENDMENT +AMENDMENTS +AMENDS +AMENITIES +AMENITY +AMENORRHEA +AMERADA +AMERICA +AMERICAN +AMERICANA +AMERICANISM +AMERICANIZATION +AMERICANIZATIONS +AMERICANIZE +AMERICANIZER +AMERICANIZERS +AMERICANIZES +AMERICANS +AMERICAS +AMERICIUM +AMES +AMHARIC +AMHERST +AMIABLE +AMICABLE +AMICABLY +AMID +AMIDE +AMIDST +AMIGA +AMIGO +AMINO +AMISS +AMITY +AMMAN +AMMERMAN +AMMO +AMMONIA +AMMONIAC +AMMONIUM +AMMUNITION +AMNESTY +AMOCO +AMOEBA +AMOEBAE +AMOEBAS +AMOK +AMONG +AMONGST +AMONTILLADO +AMORAL +AMORALITY +AMORIST +AMOROUS +AMORPHOUS +AMORPHOUSLY +AMORTIZE +AMORTIZED +AMORTIZES +AMORTIZING +AMOS +AMOUNT +AMOUNTED +AMOUNTER +AMOUNTERS +AMOUNTING +AMOUNTS +AMOUR +AMPERAGE +AMPERE +AMPERES +AMPERSAND +AMPERSANDS +AMPEX +AMPHETAMINE +AMPHETAMINES +AMPHIBIAN +AMPHIBIANS +AMPHIBIOUS +AMPHIBIOUSLY +AMPHIBOLOGY +AMPHITHEATER +AMPHITHEATERS +AMPLE +AMPLIFICATION +AMPLIFIED +AMPLIFIER +AMPLIFIERS +AMPLIFIES +AMPLIFY +AMPLIFYING +AMPLITUDE +AMPLITUDES +AMPLY +AMPOULE +AMPOULES +AMPUTATE +AMPUTATED +AMPUTATES +AMPUTATING +AMSTERDAM +AMTRAK +AMULET +AMULETS +AMUSE +AMUSED +AMUSEDLY +AMUSEMENT +AMUSEMENTS +AMUSER +AMUSERS +AMUSES +AMUSING +AMUSINGLY +AMY +AMYL +ANABAPTIST +ANABAPTISTS +ANABEL +ANACHRONISM +ANACHRONISMS +ANACHRONISTICALLY +ANACONDA +ANACONDAS +ANACREON +ANAEROBIC +ANAGRAM +ANAGRAMS +ANAHEIM +ANAL +ANALECTS +ANALOG +ANALOGICAL +ANALOGIES +ANALOGOUS +ANALOGOUSLY +ANALOGUE +ANALOGUES +ANALOGY +ANALYSES +ANALYSIS +ANALYST +ANALYSTS +ANALYTIC +ANALYTICAL +ANALYTICALLY +ANALYTICITIES +ANALYTICITY +ANALYZABLE +ANALYZE +ANALYZED +ANALYZER +ANALYZERS +ANALYZES +ANALYZING +ANAPHORA +ANAPHORIC +ANAPHORICALLY +ANAPLASMOSIS +ANARCHIC +ANARCHICAL +ANARCHISM +ANARCHIST +ANARCHISTS +ANARCHY +ANASTASIA +ANASTOMOSES +ANASTOMOSIS +ANASTOMOTIC +ANATHEMA +ANATOLE +ANATOLIA +ANATOLIAN +ANATOMIC +ANATOMICAL +ANATOMICALLY +ANATOMY +ANCESTOR +ANCESTORS +ANCESTRAL +ANCESTRY +ANCHOR +ANCHORAGE +ANCHORAGES +ANCHORED +ANCHORING +ANCHORITE +ANCHORITISM +ANCHORS +ANCHOVIES +ANCHOVY +ANCIENT +ANCIENTLY +ANCIENTS +ANCILLARY +AND +ANDALUSIA +ANDALUSIAN +ANDALUSIANS +ANDEAN +ANDERS +ANDERSEN +ANDERSON +ANDES +ANDING +ANDORRA +ANDOVER +ANDRE +ANDREA +ANDREI +ANDREW +ANDREWS +ANDROMACHE +ANDROMEDA +ANDY +ANECDOTAL +ANECDOTE +ANECDOTES +ANECHOIC +ANEMIA +ANEMIC +ANEMOMETER +ANEMOMETERS +ANEMOMETRY +ANEMONE +ANESTHESIA +ANESTHETIC +ANESTHETICALLY +ANESTHETICS +ANESTHETIZE +ANESTHETIZED +ANESTHETIZES +ANESTHETIZING +ANEW +ANGEL +ANGELA +ANGELENO +ANGELENOS +ANGELES +ANGELIC +ANGELICA +ANGELINA +ANGELINE +ANGELO +ANGELS +ANGER +ANGERED +ANGERING +ANGERS +ANGIE +ANGIOGRAPHY +ANGLE +ANGLED +ANGLER +ANGLERS +ANGLES +ANGLIA +ANGLICAN +ANGLICANISM +ANGLICANIZE +ANGLICANIZES +ANGLICANS +ANGLING +ANGLO +ANGLOPHILIA +ANGLOPHOBIA +ANGOLA +ANGORA +ANGRIER +ANGRIEST +ANGRILY +ANGRY +ANGST +ANGSTROM +ANGUISH +ANGUISHED +ANGULAR +ANGULARLY +ANGUS +ANHEUSER +ANHYDROUS +ANHYDROUSLY +ANILINE +ANIMAL +ANIMALS +ANIMATE +ANIMATED +ANIMATEDLY +ANIMATELY +ANIMATENESS +ANIMATES +ANIMATING +ANIMATION +ANIMATIONS +ANIMATOR +ANIMATORS +ANIMISM +ANIMIZED +ANIMOSITY +ANION +ANIONIC +ANIONS +ANISE +ANISEIKONIC +ANISOTROPIC +ANISOTROPY +ANITA +ANKARA +ANKLE +ANKLES +ANN +ANNA +ANNAL +ANNALIST +ANNALISTIC +ANNALS +ANNAPOLIS +ANNE +ANNETTE +ANNEX +ANNEXATION +ANNEXED +ANNEXES +ANNEXING +ANNIE +ANNIHILATE +ANNIHILATED +ANNIHILATES +ANNIHILATING +ANNIHILATION +ANNIVERSARIES +ANNIVERSARY +ANNOTATE +ANNOTATED +ANNOTATES +ANNOTATING +ANNOTATION +ANNOTATIONS +ANNOUNCE +ANNOUNCED +ANNOUNCEMENT +ANNOUNCEMENTS +ANNOUNCER +ANNOUNCERS +ANNOUNCES +ANNOUNCING +ANNOY +ANNOYANCE +ANNOYANCES +ANNOYED +ANNOYER +ANNOYERS +ANNOYING +ANNOYINGLY +ANNOYS +ANNUAL +ANNUALLY +ANNUALS +ANNUITY +ANNUL +ANNULAR +ANNULI +ANNULLED +ANNULLING +ANNULMENT +ANNULMENTS +ANNULS +ANNULUS +ANNUM +ANNUNCIATE +ANNUNCIATED +ANNUNCIATES +ANNUNCIATING +ANNUNCIATOR +ANNUNCIATORS +ANODE +ANODES +ANODIZE +ANODIZED +ANODIZES +ANOINT +ANOINTED +ANOINTING +ANOINTS +ANOMALIES +ANOMALOUS +ANOMALOUSLY +ANOMALY +ANOMIC +ANOMIE +ANON +ANONYMITY +ANONYMOUS +ANONYMOUSLY +ANOREXIA +ANOTHER +ANSELM +ANSELMO +ANSI +ANSWER +ANSWERABLE +ANSWERED +ANSWERER +ANSWERERS +ANSWERING +ANSWERS +ANT +ANTAEUS +ANTAGONISM +ANTAGONISMS +ANTAGONIST +ANTAGONISTIC +ANTAGONISTICALLY +ANTAGONISTS +ANTAGONIZE +ANTAGONIZED +ANTAGONIZES +ANTAGONIZING +ANTARCTIC +ANTARCTICA +ANTARES +ANTE +ANTEATER +ANTEATERS +ANTECEDENT +ANTECEDENTS +ANTEDATE +ANTELOPE +ANTELOPES +ANTENNA +ANTENNAE +ANTENNAS +ANTERIOR +ANTHEM +ANTHEMS +ANTHER +ANTHOLOGIES +ANTHOLOGY +ANTHONY +ANTHRACITE +ANTHROPOLOGICAL +ANTHROPOLOGICALLY +ANTHROPOLOGIST +ANTHROPOLOGISTS +ANTHROPOLOGY +ANTHROPOMORPHIC +ANTHROPOMORPHICALLY +ANTI +ANTIBACTERIAL +ANTIBIOTIC +ANTIBIOTICS +ANTIBODIES +ANTIBODY +ANTIC +ANTICIPATE +ANTICIPATED +ANTICIPATES +ANTICIPATING +ANTICIPATION +ANTICIPATIONS +ANTICIPATORY +ANTICOAGULATION +ANTICOMPETITIVE +ANTICS +ANTIDISESTABLISHMENTARIANISM +ANTIDOTE +ANTIDOTES +ANTIETAM +ANTIFORMANT +ANTIFUNDAMENTALIST +ANTIGEN +ANTIGENS +ANTIGONE +ANTIHISTORICAL +ANTILLES +ANTIMICROBIAL +ANTIMONY +ANTINOMIAN +ANTINOMY +ANTIOCH +ANTIPATHY +ANTIPHONAL +ANTIPODE +ANTIPODES +ANTIQUARIAN +ANTIQUARIANS +ANTIQUATE +ANTIQUATED +ANTIQUE +ANTIQUES +ANTIQUITIES +ANTIQUITY +ANTIREDEPOSITION +ANTIRESONANCE +ANTIRESONATOR +ANTISEMITIC +ANTISEMITISM +ANTISEPTIC +ANTISERA +ANTISERUM +ANTISLAVERY +ANTISOCIAL +ANTISUBMARINE +ANTISYMMETRIC +ANTISYMMETRY +ANTITHESIS +ANTITHETICAL +ANTITHYROID +ANTITOXIN +ANTITOXINS +ANTITRUST +ANTLER +ANTLERED +ANTOINE +ANTOINETTE +ANTON +ANTONIO +ANTONOVICS +ANTONY +ANTS +ANTWERP +ANUS +ANVIL +ANVILS +ANXIETIES +ANXIETY +ANXIOUS +ANXIOUSLY +ANY +ANYBODY +ANYHOW +ANYMORE +ANYONE +ANYPLACE +ANYTHING +ANYTIME +ANYWAY +ANYWHERE +AORTA +APACE +APACHES +APALACHICOLA +APART +APARTMENT +APARTMENTS +APATHETIC +APATHY +APE +APED +APERIODIC +APERIODICITY +APERTURE +APES +APETALOUS +APEX +APHASIA +APHASIC +APHELION +APHID +APHIDS +APHONIC +APHORISM +APHORISMS +APHRODITE +APIARIES +APIARY +APICAL +APIECE +APING +APISH +APLENTY +APLOMB +APOCALYPSE +APOCALYPTIC +APOCRYPHA +APOCRYPHAL +APOGEE +APOGEES +APOLLINAIRE +APOLLO +APOLLONIAN +APOLOGETIC +APOLOGETICALLY +APOLOGIA +APOLOGIES +APOLOGIST +APOLOGISTS +APOLOGIZE +APOLOGIZED +APOLOGIZES +APOLOGIZING +APOLOGY +APOSTATE +APOSTLE +APOSTLES +APOSTOLIC +APOSTROPHE +APOSTROPHES +APOTHECARY +APOTHEGM +APOTHEOSES +APOTHEOSIS +APPALACHIA +APPALACHIAN +APPALACHIANS +APPALL +APPALLED +APPALLING +APPALLINGLY +APPALOOSAS +APPANAGE +APPARATUS +APPAREL +APPARELED +APPARENT +APPARENTLY +APPARITION +APPARITIONS +APPEAL +APPEALED +APPEALER +APPEALERS +APPEALING +APPEALINGLY +APPEALS +APPEAR +APPEARANCE +APPEARANCES +APPEARED +APPEARER +APPEARERS +APPEARING +APPEARS +APPEASE +APPEASED +APPEASEMENT +APPEASES +APPEASING +APPELLANT +APPELLANTS +APPELLATE +APPELLATION +APPEND +APPENDAGE +APPENDAGES +APPENDED +APPENDER +APPENDERS +APPENDICES +APPENDICITIS +APPENDING +APPENDIX +APPENDIXES +APPENDS +APPERTAIN +APPERTAINS +APPETITE +APPETITES +APPETIZER +APPETIZING +APPIA +APPIAN +APPLAUD +APPLAUDED +APPLAUDING +APPLAUDS +APPLAUSE +APPLE +APPLEBY +APPLEJACK +APPLES +APPLETON +APPLIANCE +APPLIANCES +APPLICABILITY +APPLICABLE +APPLICANT +APPLICANTS +APPLICATION +APPLICATIONS +APPLICATIVE +APPLICATIVELY +APPLICATOR +APPLICATORS +APPLIED +APPLIER +APPLIERS +APPLIES +APPLIQUE +APPLY +APPLYING +APPOINT +APPOINTED +APPOINTEE +APPOINTEES +APPOINTER +APPOINTERS +APPOINTING +APPOINTIVE +APPOINTMENT +APPOINTMENTS +APPOINTS +APPOMATTOX +APPORTION +APPORTIONED +APPORTIONING +APPORTIONMENT +APPORTIONMENTS +APPORTIONS +APPOSITE +APPRAISAL +APPRAISALS +APPRAISE +APPRAISED +APPRAISER +APPRAISERS +APPRAISES +APPRAISING +APPRAISINGLY +APPRECIABLE +APPRECIABLY +APPRECIATE +APPRECIATED +APPRECIATES +APPRECIATING +APPRECIATION +APPRECIATIONS +APPRECIATIVE +APPRECIATIVELY +APPREHEND +APPREHENDED +APPREHENSIBLE +APPREHENSION +APPREHENSIONS +APPREHENSIVE +APPREHENSIVELY +APPREHENSIVENESS +APPRENTICE +APPRENTICED +APPRENTICES +APPRENTICESHIP +APPRISE +APPRISED +APPRISES +APPRISING +APPROACH +APPROACHABILITY +APPROACHABLE +APPROACHED +APPROACHER +APPROACHERS +APPROACHES +APPROACHING +APPROBATE +APPROBATION +APPROPRIATE +APPROPRIATED +APPROPRIATELY +APPROPRIATENESS +APPROPRIATES +APPROPRIATING +APPROPRIATION +APPROPRIATIONS +APPROPRIATOR +APPROPRIATORS +APPROVAL +APPROVALS +APPROVE +APPROVED +APPROVER +APPROVERS +APPROVES +APPROVING +APPROVINGLY +APPROXIMATE +APPROXIMATED +APPROXIMATELY +APPROXIMATES +APPROXIMATING +APPROXIMATION +APPROXIMATIONS +APPURTENANCE +APPURTENANCES +APRICOT +APRICOTS +APRIL +APRILS +APRON +APRONS +APROPOS +APSE +APSIS +APT +APTITUDE +APTITUDES +APTLY +APTNESS +AQUA +AQUARIA +AQUARIUM +AQUARIUS +AQUATIC +AQUEDUCT +AQUEDUCTS +AQUEOUS +AQUIFER +AQUIFERS +AQUILA +AQUINAS +ARAB +ARABESQUE +ARABIA +ARABIAN +ARABIANIZE +ARABIANIZES +ARABIANS +ARABIC +ARABICIZE +ARABICIZES +ARABLE +ARABS +ARABY +ARACHNE +ARACHNID +ARACHNIDS +ARAMCO +ARAPAHO +ARBITER +ARBITERS +ARBITRARILY +ARBITRARINESS +ARBITRARY +ARBITRATE +ARBITRATED +ARBITRATES +ARBITRATING +ARBITRATION +ARBITRATOR +ARBITRATORS +ARBOR +ARBOREAL +ARBORS +ARC +ARCADE +ARCADED +ARCADES +ARCADIA +ARCADIAN +ARCANE +ARCED +ARCH +ARCHAIC +ARCHAICALLY +ARCHAICNESS +ARCHAISM +ARCHAIZE +ARCHANGEL +ARCHANGELS +ARCHBISHOP +ARCHDIOCESE +ARCHDIOCESES +ARCHED +ARCHENEMY +ARCHEOLOGICAL +ARCHEOLOGIST +ARCHEOLOGY +ARCHER +ARCHERS +ARCHERY +ARCHES +ARCHETYPE +ARCHFOOL +ARCHIBALD +ARCHIE +ARCHIMEDES +ARCHING +ARCHIPELAGO +ARCHIPELAGOES +ARCHITECT +ARCHITECTONIC +ARCHITECTS +ARCHITECTURAL +ARCHITECTURALLY +ARCHITECTURE +ARCHITECTURES +ARCHIVAL +ARCHIVE +ARCHIVED +ARCHIVER +ARCHIVERS +ARCHIVES +ARCHIVING +ARCHIVIST +ARCHLY +ARCING +ARCLIKE +ARCO +ARCS +ARCSINE +ARCTANGENT +ARCTIC +ARCTURUS +ARDEN +ARDENT +ARDENTLY +ARDOR +ARDUOUS +ARDUOUSLY +ARDUOUSNESS +ARE +AREA +AREAS +ARENA +ARENAS +AREQUIPA +ARES +ARGENTINA +ARGENTINIAN +ARGIVE +ARGO +ARGON +ARGONAUT +ARGONAUTS +ARGONNE +ARGOS +ARGOT +ARGUABLE +ARGUABLY +ARGUE +ARGUED +ARGUER +ARGUERS +ARGUES +ARGUING +ARGUMENT +ARGUMENTATION +ARGUMENTATIVE +ARGUMENTS +ARGUS +ARIADNE +ARIANISM +ARIANIST +ARIANISTS +ARID +ARIDITY +ARIES +ARIGHT +ARISE +ARISEN +ARISER +ARISES +ARISING +ARISINGS +ARISTOCRACY +ARISTOCRAT +ARISTOCRATIC +ARISTOCRATICALLY +ARISTOCRATS +ARISTOTELIAN +ARISTOTLE +ARITHMETIC +ARITHMETICAL +ARITHMETICALLY +ARITHMETICS +ARITHMETIZE +ARITHMETIZED +ARITHMETIZES +ARIZONA +ARK +ARKANSAN +ARKANSAS +ARLEN +ARLENE +ARLINGTON +ARM +ARMADA +ARMADILLO +ARMADILLOS +ARMAGEDDON +ARMAGNAC +ARMAMENT +ARMAMENTS +ARMATA +ARMCHAIR +ARMCHAIRS +ARMCO +ARMED +ARMENIA +ARMENIAN +ARMER +ARMERS +ARMFUL +ARMHOLE +ARMIES +ARMING +ARMISTICE +ARMLOAD +ARMONK +ARMOR +ARMORED +ARMORER +ARMORY +ARMOUR +ARMPIT +ARMPITS +ARMS +ARMSTRONG +ARMY +ARNOLD +AROMA +AROMAS +AROMATIC +AROSE +AROUND +AROUSAL +AROUSE +AROUSED +AROUSES +AROUSING +ARPA +ARPANET +ARPANET +ARPEGGIO +ARPEGGIOS +ARRACK +ARRAGON +ARRAIGN +ARRAIGNED +ARRAIGNING +ARRAIGNMENT +ARRAIGNMENTS +ARRAIGNS +ARRANGE +ARRANGED +ARRANGEMENT +ARRANGEMENTS +ARRANGER +ARRANGERS +ARRANGES +ARRANGING +ARRANT +ARRAY +ARRAYED +ARRAYS +ARREARS +ARREST +ARRESTED +ARRESTER +ARRESTERS +ARRESTING +ARRESTINGLY +ARRESTOR +ARRESTORS +ARRESTS +ARRHENIUS +ARRIVAL +ARRIVALS +ARRIVE +ARRIVED +ARRIVES +ARRIVING +ARROGANCE +ARROGANT +ARROGANTLY +ARROGATE +ARROGATED +ARROGATES +ARROGATING +ARROGATION +ARROW +ARROWED +ARROWHEAD +ARROWHEADS +ARROWS +ARROYO +ARROYOS +ARSENAL +ARSENALS +ARSENIC +ARSINE +ARSON +ART +ARTEMIA +ARTEMIS +ARTERIAL +ARTERIES +ARTERIOLAR +ARTERIOLE +ARTERIOLES +ARTERIOSCLEROSIS +ARTERY +ARTFUL +ARTFULLY +ARTFULNESS +ARTHRITIS +ARTHROPOD +ARTHROPODS +ARTHUR +ARTICHOKE +ARTICHOKES +ARTICLE +ARTICLES +ARTICULATE +ARTICULATED +ARTICULATELY +ARTICULATENESS +ARTICULATES +ARTICULATING +ARTICULATION +ARTICULATIONS +ARTICULATOR +ARTICULATORS +ARTICULATORY +ARTIE +ARTIFACT +ARTIFACTS +ARTIFICE +ARTIFICER +ARTIFICES +ARTIFICIAL +ARTIFICIALITIES +ARTIFICIALITY +ARTIFICIALLY +ARTIFICIALNESS +ARTILLERIST +ARTILLERY +ARTISAN +ARTISANS +ARTIST +ARTISTIC +ARTISTICALLY +ARTISTRY +ARTISTS +ARTLESS +ARTS +ARTURO +ARTWORK +ARUBA +ARYAN +ARYANS +ASBESTOS +ASCEND +ASCENDANCY +ASCENDANT +ASCENDED +ASCENDENCY +ASCENDENT +ASCENDER +ASCENDERS +ASCENDING +ASCENDS +ASCENSION +ASCENSIONS +ASCENT +ASCERTAIN +ASCERTAINABLE +ASCERTAINED +ASCERTAINING +ASCERTAINS +ASCETIC +ASCETICISM +ASCETICS +ASCII +ASCOT +ASCRIBABLE +ASCRIBE +ASCRIBED +ASCRIBES +ASCRIBING +ASCRIPTION +ASEPTIC +ASH +ASHAMED +ASHAMEDLY +ASHEN +ASHER +ASHES +ASHEVILLE +ASHLAND +ASHLEY +ASHMAN +ASHMOLEAN +ASHORE +ASHTRAY +ASHTRAYS +ASIA +ASIAN +ASIANS +ASIATIC +ASIATICIZATION +ASIATICIZATIONS +ASIATICIZE +ASIATICIZES +ASIATICS +ASIDE +ASILOMAR +ASININE +ASK +ASKANCE +ASKED +ASKER +ASKERS +ASKEW +ASKING +ASKS +ASLEEP +ASOCIAL +ASP +ASPARAGUS +ASPECT +ASPECTS +ASPEN +ASPERSION +ASPERSIONS +ASPHALT +ASPHYXIA +ASPIC +ASPIRANT +ASPIRANTS +ASPIRATE +ASPIRATED +ASPIRATES +ASPIRATING +ASPIRATION +ASPIRATIONS +ASPIRATOR +ASPIRATORS +ASPIRE +ASPIRED +ASPIRES +ASPIRIN +ASPIRING +ASPIRINS +ASS +ASSAIL +ASSAILANT +ASSAILANTS +ASSAILED +ASSAILING +ASSAILS +ASSAM +ASSASSIN +ASSASSINATE +ASSASSINATED +ASSASSINATES +ASSASSINATING +ASSASSINATION +ASSASSINATIONS +ASSASSINS +ASSAULT +ASSAULTED +ASSAULTING +ASSAULTS +ASSAY +ASSAYED +ASSAYING +ASSEMBLAGE +ASSEMBLAGES +ASSEMBLE +ASSEMBLED +ASSEMBLER +ASSEMBLERS +ASSEMBLES +ASSEMBLIES +ASSEMBLING +ASSEMBLY +ASSENT +ASSENTED +ASSENTER +ASSENTING +ASSENTS +ASSERT +ASSERTED +ASSERTER +ASSERTERS +ASSERTING +ASSERTION +ASSERTIONS +ASSERTIVE +ASSERTIVELY +ASSERTIVENESS +ASSERTS +ASSES +ASSESS +ASSESSED +ASSESSES +ASSESSING +ASSESSMENT +ASSESSMENTS +ASSESSOR +ASSESSORS +ASSET +ASSETS +ASSIDUITY +ASSIDUOUS +ASSIDUOUSLY +ASSIGN +ASSIGNABLE +ASSIGNED +ASSIGNEE +ASSIGNEES +ASSIGNER +ASSIGNERS +ASSIGNING +ASSIGNMENT +ASSIGNMENTS +ASSIGNS +ASSIMILATE +ASSIMILATED +ASSIMILATES +ASSIMILATING +ASSIMILATION +ASSIMILATIONS +ASSIST +ASSISTANCE +ASSISTANCES +ASSISTANT +ASSISTANTS +ASSISTANTSHIP +ASSISTANTSHIPS +ASSISTED +ASSISTING +ASSISTS +ASSOCIATE +ASSOCIATED +ASSOCIATES +ASSOCIATING +ASSOCIATION +ASSOCIATIONAL +ASSOCIATIONS +ASSOCIATIVE +ASSOCIATIVELY +ASSOCIATIVITY +ASSOCIATOR +ASSOCIATORS +ASSONANCE +ASSONANT +ASSORT +ASSORTED +ASSORTMENT +ASSORTMENTS +ASSORTS +ASSUAGE +ASSUAGED +ASSUAGES +ASSUME +ASSUMED +ASSUMES +ASSUMING +ASSUMPTION +ASSUMPTIONS +ASSURANCE +ASSURANCES +ASSURE +ASSURED +ASSUREDLY +ASSURER +ASSURERS +ASSURES +ASSURING +ASSURINGLY +ASSYRIA +ASSYRIAN +ASSYRIANIZE +ASSYRIANIZES +ASSYRIOLOGY +ASTAIRE +ASTAIRES +ASTARTE +ASTATINE +ASTER +ASTERISK +ASTERISKS +ASTEROID +ASTEROIDAL +ASTEROIDS +ASTERS +ASTHMA +ASTON +ASTONISH +ASTONISHED +ASTONISHES +ASTONISHING +ASTONISHINGLY +ASTONISHMENT +ASTOR +ASTORIA +ASTOUND +ASTOUNDED +ASTOUNDING +ASTOUNDS +ASTRAL +ASTRAY +ASTRIDE +ASTRINGENCY +ASTRINGENT +ASTROLOGY +ASTRONAUT +ASTRONAUTICS +ASTRONAUTS +ASTRONOMER +ASTRONOMERS +ASTRONOMICAL +ASTRONOMICALLY +ASTRONOMY +ASTROPHYSICAL +ASTROPHYSICS +ASTUTE +ASTUTELY +ASTUTENESS +ASUNCION +ASUNDER +ASYLUM +ASYMMETRIC +ASYMMETRICALLY +ASYMMETRY +ASYMPTOMATICALLY +ASYMPTOTE +ASYMPTOTES +ASYMPTOTIC +ASYMPTOTICALLY +ASYNCHRONISM +ASYNCHRONOUS +ASYNCHRONOUSLY +ASYNCHRONY +ATALANTA +ATARI +ATAVISTIC +ATCHISON +ATE +ATEMPORAL +ATHABASCAN +ATHEISM +ATHEIST +ATHEISTIC +ATHEISTS +ATHENA +ATHENIAN +ATHENIANS +ATHENS +ATHEROSCLEROSIS +ATHLETE +ATHLETES +ATHLETIC +ATHLETICISM +ATHLETICS +ATKINS +ATKINSON +ATLANTA +ATLANTIC +ATLANTICA +ATLANTIS +ATLAS +ATMOSPHERE +ATMOSPHERES +ATMOSPHERIC +ATOLL +ATOLLS +ATOM +ATOMIC +ATOMICALLY +ATOMICS +ATOMIZATION +ATOMIZE +ATOMIZED +ATOMIZES +ATOMIZING +ATOMS +ATONAL +ATONALLY +ATONE +ATONED +ATONEMENT +ATONES +ATOP +ATREUS +ATROCIOUS +ATROCIOUSLY +ATROCITIES +ATROCITY +ATROPHIC +ATROPHIED +ATROPHIES +ATROPHY +ATROPHYING +ATROPOS +ATTACH +ATTACHE +ATTACHED +ATTACHER +ATTACHERS +ATTACHES +ATTACHING +ATTACHMENT +ATTACHMENTS +ATTACK +ATTACKABLE +ATTACKED +ATTACKER +ATTACKERS +ATTACKING +ATTACKS +ATTAIN +ATTAINABLE +ATTAINABLY +ATTAINED +ATTAINER +ATTAINERS +ATTAINING +ATTAINMENT +ATTAINMENTS +ATTAINS +ATTEMPT +ATTEMPTED +ATTEMPTER +ATTEMPTERS +ATTEMPTING +ATTEMPTS +ATTEND +ATTENDANCE +ATTENDANCES +ATTENDANT +ATTENDANTS +ATTENDED +ATTENDEE +ATTENDEES +ATTENDER +ATTENDERS +ATTENDING +ATTENDS +ATTENTION +ATTENTIONAL +ATTENTIONALITY +ATTENTIONS +ATTENTIVE +ATTENTIVELY +ATTENTIVENESS +ATTENUATE +ATTENUATED +ATTENUATES +ATTENUATING +ATTENUATION +ATTENUATOR +ATTENUATORS +ATTEST +ATTESTED +ATTESTING +ATTESTS +ATTIC +ATTICA +ATTICS +ATTIRE +ATTIRED +ATTIRES +ATTIRING +ATTITUDE +ATTITUDES +ATTITUDINAL +ATTLEE +ATTORNEY +ATTORNEYS +ATTRACT +ATTRACTED +ATTRACTING +ATTRACTION +ATTRACTIONS +ATTRACTIVE +ATTRACTIVELY +ATTRACTIVENESS +ATTRACTOR +ATTRACTORS +ATTRACTS +ATTRIBUTABLE +ATTRIBUTE +ATTRIBUTED +ATTRIBUTES +ATTRIBUTING +ATTRIBUTION +ATTRIBUTIONS +ATTRIBUTIVE +ATTRIBUTIVELY +ATTRITION +ATTUNE +ATTUNED +ATTUNES +ATTUNING +ATWATER +ATWOOD +ATYPICAL +ATYPICALLY +AUBERGE +AUBREY +AUBURN +AUCKLAND +AUCTION +AUCTIONEER +AUCTIONEERS +AUDACIOUS +AUDACIOUSLY +AUDACIOUSNESS +AUDACITY +AUDIBLE +AUDIBLY +AUDIENCE +AUDIENCES +AUDIO +AUDIOGRAM +AUDIOGRAMS +AUDIOLOGICAL +AUDIOLOGIST +AUDIOLOGISTS +AUDIOLOGY +AUDIOMETER +AUDIOMETERS +AUDIOMETRIC +AUDIOMETRY +AUDIT +AUDITED +AUDITING +AUDITION +AUDITIONED +AUDITIONING +AUDITIONS +AUDITOR +AUDITORIUM +AUDITORS +AUDITORY +AUDITS +AUDREY +AUDUBON +AUERBACH +AUGEAN +AUGER +AUGERS +AUGHT +AUGMENT +AUGMENTATION +AUGMENTED +AUGMENTING +AUGMENTS +AUGUR +AUGURS +AUGUST +AUGUSTA +AUGUSTAN +AUGUSTINE +AUGUSTLY +AUGUSTNESS +AUGUSTUS +AUNT +AUNTS +AURA +AURAL +AURALLY +AURAS +AURELIUS +AUREOLE +AUREOMYCIN +AURIGA +AURORA +AUSCHWITZ +AUSCULTATE +AUSCULTATED +AUSCULTATES +AUSCULTATING +AUSCULTATION +AUSCULTATIONS +AUSPICE +AUSPICES +AUSPICIOUS +AUSPICIOUSLY +AUSTERE +AUSTERELY +AUSTERITY +AUSTIN +AUSTRALIA +AUSTRALIAN +AUSTRALIANIZE +AUSTRALIANIZES +AUSTRALIS +AUSTRIA +AUSTRIAN +AUSTRIANIZE +AUSTRIANIZES +AUTHENTIC +AUTHENTICALLY +AUTHENTICATE +AUTHENTICATED +AUTHENTICATES +AUTHENTICATING +AUTHENTICATION +AUTHENTICATIONS +AUTHENTICATOR +AUTHENTICATORS +AUTHENTICITY +AUTHOR +AUTHORED +AUTHORING +AUTHORITARIAN +AUTHORITARIANISM +AUTHORITATIVE +AUTHORITATIVELY +AUTHORITIES +AUTHORITY +AUTHORIZATION +AUTHORIZATIONS +AUTHORIZE +AUTHORIZED +AUTHORIZER +AUTHORIZERS +AUTHORIZES +AUTHORIZING +AUTHORS +AUTHORSHIP +AUTISM +AUTISTIC +AUTO +AUTOBIOGRAPHIC +AUTOBIOGRAPHICAL +AUTOBIOGRAPHIES +AUTOBIOGRAPHY +AUTOCOLLIMATOR +AUTOCORRELATE +AUTOCORRELATION +AUTOCRACIES +AUTOCRACY +AUTOCRAT +AUTOCRATIC +AUTOCRATICALLY +AUTOCRATS +AUTODECREMENT +AUTODECREMENTED +AUTODECREMENTS +AUTODIALER +AUTOFLUORESCENCE +AUTOGRAPH +AUTOGRAPHED +AUTOGRAPHING +AUTOGRAPHS +AUTOINCREMENT +AUTOINCREMENTED +AUTOINCREMENTS +AUTOINDEX +AUTOINDEXING +AUTOMATA +AUTOMATE +AUTOMATED +AUTOMATES +AUTOMATIC +AUTOMATICALLY +AUTOMATING +AUTOMATION +AUTOMATON +AUTOMOBILE +AUTOMOBILES +AUTOMOTIVE +AUTONAVIGATOR +AUTONAVIGATORS +AUTONOMIC +AUTONOMOUS +AUTONOMOUSLY +AUTONOMY +AUTOPILOT +AUTOPILOTS +AUTOPSIED +AUTOPSIES +AUTOPSY +AUTOREGRESSIVE +AUTOS +AUTOSUGGESTIBILITY +AUTOTRANSFORMER +AUTUMN +AUTUMNAL +AUTUMNS +AUXILIARIES +AUXILIARY +AVAIL +AVAILABILITIES +AVAILABILITY +AVAILABLE +AVAILABLY +AVAILED +AVAILER +AVAILERS +AVAILING +AVAILS +AVALANCHE +AVALANCHED +AVALANCHES +AVALANCHING +AVANT +AVARICE +AVARICIOUS +AVARICIOUSLY +AVENGE +AVENGED +AVENGER +AVENGES +AVENGING +AVENTINE +AVENTINO +AVENUE +AVENUES +AVER +AVERAGE +AVERAGED +AVERAGES +AVERAGING +AVERNUS +AVERRED +AVERRER +AVERRING +AVERS +AVERSE +AVERSION +AVERSIONS +AVERT +AVERTED +AVERTING +AVERTS +AVERY +AVESTA +AVIAN +AVIARIES +AVIARY +AVIATION +AVIATOR +AVIATORS +AVID +AVIDITY +AVIDLY +AVIGNON +AVIONIC +AVIONICS +AVIS +AVIV +AVOCADO +AVOCADOS +AVOCATION +AVOCATIONS +AVOGADRO +AVOID +AVOIDABLE +AVOIDABLY +AVOIDANCE +AVOIDED +AVOIDER +AVOIDERS +AVOIDING +AVOIDS +AVON +AVOUCH +AVOW +AVOWAL +AVOWED +AVOWS +AWAIT +AWAITED +AWAITING +AWAITS +AWAKE +AWAKEN +AWAKENED +AWAKENING +AWAKENS +AWAKES +AWAKING +AWARD +AWARDED +AWARDER +AWARDERS +AWARDING +AWARDS +AWARE +AWARENESS +AWASH +AWAY +AWE +AWED +AWESOME +AWFUL +AWFULLY +AWFULNESS +AWHILE +AWKWARD +AWKWARDLY +AWKWARDNESS +AWL +AWLS +AWNING +AWNINGS +AWOKE +AWRY +AXED +AXEL +AXER +AXERS +AXES +AXIAL +AXIALLY +AXING +AXIOLOGICAL +AXIOM +AXIOMATIC +AXIOMATICALLY +AXIOMATIZATION +AXIOMATIZATIONS +AXIOMATIZE +AXIOMATIZED +AXIOMATIZES +AXIOMATIZING +AXIOMS +AXIS +AXLE +AXLES +AXOLOTL +AXOLOTLS +AXON +AXONS +AYE +AYERS +AYES +AYLESBURY +AZALEA +AZALEAS +AZERBAIJAN +AZIMUTH +AZIMUTHS +AZORES +AZTEC +AZTECAN +AZURE +BABBAGE +BABBLE +BABBLED +BABBLES +BABBLING +BABCOCK +BABE +BABEL +BABELIZE +BABELIZES +BABES +BABIED +BABIES +BABKA +BABOON +BABOONS +BABUL +BABY +BABYHOOD +BABYING +BABYISH +BABYLON +BABYLONIAN +BABYLONIANS +BABYLONIZE +BABYLONIZES +BABYSIT +BABYSITTING +BACCALAUREATE +BACCHUS +BACH +BACHELOR +BACHELORS +BACILLI +BACILLUS +BACK +BACKACHE +BACKACHES +BACKARROW +BACKBEND +BACKBENDS +BACKBOARD +BACKBONE +BACKBONES +BACKDROP +BACKDROPS +BACKED +BACKER +BACKERS +BACKFILL +BACKFIRING +BACKGROUND +BACKGROUNDS +BACKHAND +BACKING +BACKLASH +BACKLOG +BACKLOGGED +BACKLOGS +BACKORDER +BACKPACK +BACKPACKS +BACKPLANE +BACKPLANES +BACKPLATE +BACKS +BACKSCATTER +BACKSCATTERED +BACKSCATTERING +BACKSCATTERS +BACKSIDE +BACKSLASH +BACKSLASHES +BACKSPACE +BACKSPACED +BACKSPACES +BACKSPACING +BACKSTAGE +BACKSTAIRS +BACKSTITCH +BACKSTITCHED +BACKSTITCHES +BACKSTITCHING +BACKSTOP +BACKTRACK +BACKTRACKED +BACKTRACKER +BACKTRACKERS +BACKTRACKING +BACKTRACKS +BACKUP +BACKUPS +BACKUS +BACKWARD +BACKWARDNESS +BACKWARDS +BACKWATER +BACKWATERS +BACKWOODS +BACKYARD +BACKYARDS +BACON +BACTERIA +BACTERIAL +BACTERIUM +BAD +BADE +BADEN +BADGE +BADGER +BADGERED +BADGERING +BADGERS +BADGES +BADLANDS +BADLY +BADMINTON +BADNESS +BAFFIN +BAFFLE +BAFFLED +BAFFLER +BAFFLERS +BAFFLING +BAG +BAGATELLE +BAGATELLES +BAGEL +BAGELS +BAGGAGE +BAGGED +BAGGER +BAGGERS +BAGGING +BAGGY +BAGHDAD +BAGLEY +BAGPIPE +BAGPIPES +BAGRODIA +BAGRODIAS +BAGS +BAH +BAHAMA +BAHAMAS +BAHREIN +BAIL +BAILEY +BAILEYS +BAILIFF +BAILIFFS +BAILING +BAIRD +BAIRDI +BAIRN +BAIT +BAITED +BAITER +BAITING +BAITS +BAJA +BAKE +BAKED +BAKELITE +BAKER +BAKERIES +BAKERS +BAKERSFIELD +BAKERY +BAKES +BAKHTIARI +BAKING +BAKLAVA +BAKU +BALALAIKA +BALALAIKAS +BALANCE +BALANCED +BALANCER +BALANCERS +BALANCES +BALANCING +BALBOA +BALCONIES +BALCONY +BALD +BALDING +BALDLY +BALDNESS +BALDWIN +BALE +BALEFUL +BALER +BALES +BALFOUR +BALI +BALINESE +BALK +BALKAN +BALKANIZATION +BALKANIZATIONS +BALKANIZE +BALKANIZED +BALKANIZES +BALKANIZING +BALKANS +BALKED +BALKINESS +BALKING +BALKS +BALKY +BALL +BALLAD +BALLADS +BALLARD +BALLARDS +BALLAST +BALLASTS +BALLED +BALLER +BALLERINA +BALLERINAS +BALLERS +BALLET +BALLETS +BALLGOWN +BALLING +BALLISTIC +BALLISTICS +BALLOON +BALLOONED +BALLOONER +BALLOONERS +BALLOONING +BALLOONS +BALLOT +BALLOTS +BALLPARK +BALLPARKS +BALLPLAYER +BALLPLAYERS +BALLROOM +BALLROOMS +BALLS +BALLYHOO +BALM +BALMS +BALMY +BALSA +BALSAM +BALTIC +BALTIMORE +BALTIMOREAN +BALUSTRADE +BALUSTRADES +BALZAC +BAMAKO +BAMBERGER +BAMBI +BAMBOO +BAN +BANACH +BANAL +BANALLY +BANANA +BANANAS +BANBURY +BANCROFT +BAND +BANDAGE +BANDAGED +BANDAGES +BANDAGING +BANDED +BANDIED +BANDIES +BANDING +BANDIT +BANDITS +BANDPASS +BANDS +BANDSTAND +BANDSTANDS +BANDWAGON +BANDWAGONS +BANDWIDTH +BANDWIDTHS +BANDY +BANDYING +BANE +BANEFUL +BANG +BANGED +BANGING +BANGLADESH +BANGLE +BANGLES +BANGOR +BANGS +BANGUI +BANISH +BANISHED +BANISHES +BANISHING +BANISHMENT +BANISTER +BANISTERS +BANJO +BANJOS +BANK +BANKED +BANKER +BANKERS +BANKING +BANKRUPT +BANKRUPTCIES +BANKRUPTCY +BANKRUPTED +BANKRUPTING +BANKRUPTS +BANKS +BANNED +BANNER +BANNERS +BANNING +BANQUET +BANQUETING +BANQUETINGS +BANQUETS +BANS +BANSHEE +BANSHEES +BANTAM +BANTER +BANTERED +BANTERING +BANTERS +BANTU +BANTUS +BAPTISM +BAPTISMAL +BAPTISMS +BAPTIST +BAPTISTE +BAPTISTERY +BAPTISTRIES +BAPTISTRY +BAPTISTS +BAPTIZE +BAPTIZED +BAPTIZES +BAPTIZING +BAR +BARB +BARBADOS +BARBARA +BARBARIAN +BARBARIANS +BARBARIC +BARBARISM +BARBARITIES +BARBARITY +BARBAROUS +BARBAROUSLY +BARBECUE +BARBECUED +BARBECUES +BARBED +BARBELL +BARBELLS +BARBER +BARBITAL +BARBITURATE +BARBITURATES +BARBOUR +BARBS +BARCELONA +BARCLAY +BARD +BARDS +BARE +BARED +BAREFACED +BAREFOOT +BAREFOOTED +BARELY +BARENESS +BARER +BARES +BAREST +BARFLIES +BARFLY +BARGAIN +BARGAINED +BARGAINING +BARGAINS +BARGE +BARGES +BARGING +BARHOP +BARING +BARITONE +BARITONES +BARIUM +BARK +BARKED +BARKER +BARKERS +BARKING +BARKS +BARLEY +BARLOW +BARN +BARNABAS +BARNARD +BARNES +BARNET +BARNETT +BARNEY +BARNHARD +BARNS +BARNSTORM +BARNSTORMED +BARNSTORMING +BARNSTORMS +BARNUM +BARNYARD +BARNYARDS +BAROMETER +BAROMETERS +BAROMETRIC +BARON +BARONESS +BARONIAL +BARONIES +BARONS +BARONY +BAROQUE +BAROQUENESS +BARR +BARRACK +BARRACKS +BARRAGE +BARRAGES +BARRED +BARREL +BARRELLED +BARRELLING +BARRELS +BARREN +BARRENNESS +BARRETT +BARRICADE +BARRICADES +BARRIER +BARRIERS +BARRING +BARRINGER +BARRINGTON +BARRON +BARROW +BARRY +BARRYMORE +BARRYMORES +BARS +BARSTOW +BART +BARTENDER +BARTENDERS +BARTER +BARTERED +BARTERING +BARTERS +BARTH +BARTHOLOMEW +BARTLETT +BARTOK +BARTON +BASAL +BASALT +BASCOM +BASE +BASEBALL +BASEBALLS +BASEBAND +BASEBOARD +BASEBOARDS +BASED +BASEL +BASELESS +BASELINE +BASELINES +BASELY +BASEMAN +BASEMENT +BASEMENTS +BASENESS +BASER +BASES +BASH +BASHED +BASHES +BASHFUL +BASHFULNESS +BASHING +BASIC +BASIC +BASIC +BASICALLY +BASICS +BASIE +BASIL +BASIN +BASING +BASINS +BASIS +BASK +BASKED +BASKET +BASKETBALL +BASKETBALLS +BASKETS +BASKING +BASQUE +BASS +BASSES +BASSET +BASSETT +BASSINET +BASSINETS +BASTARD +BASTARDS +BASTE +BASTED +BASTES +BASTING +BASTION +BASTIONS +BAT +BATAVIA +BATCH +BATCHED +BATCHELDER +BATCHES +BATEMAN +BATES +BATH +BATHE +BATHED +BATHER +BATHERS +BATHES +BATHING +BATHOS +BATHROBE +BATHROBES +BATHROOM +BATHROOMS +BATHS +BATHTUB +BATHTUBS +BATHURST +BATISTA +BATON +BATONS +BATOR +BATS +BATTALION +BATTALIONS +BATTED +BATTELLE +BATTEN +BATTENS +BATTER +BATTERED +BATTERIES +BATTERING +BATTERS +BATTERY +BATTING +BATTLE +BATTLED +BATTLEFIELD +BATTLEFIELDS +BATTLEFRONT +BATTLEFRONTS +BATTLEGROUND +BATTLEGROUNDS +BATTLEMENT +BATTLEMENTS +BATTLER +BATTLERS +BATTLES +BATTLESHIP +BATTLESHIPS +BATTLING +BAUBLE +BAUBLES +BAUD +BAUDELAIRE +BAUER +BAUHAUS +BAUSCH +BAUXITE +BAVARIA +BAVARIAN +BAWDY +BAWL +BAWLED +BAWLING +BAWLS +BAXTER +BAY +BAYDA +BAYED +BAYES +BAYESIAN +BAYING +BAYLOR +BAYONET +BAYONETS +BAYONNE +BAYOU +BAYOUS +BAYPORT +BAYREUTH +BAYS +BAZAAR +BAZAARS +BEACH +BEACHED +BEACHES +BEACHHEAD +BEACHHEADS +BEACHING +BEACON +BEACONS +BEAD +BEADED +BEADING +BEADLE +BEADLES +BEADS +BEADY +BEAGLE +BEAGLES +BEAK +BEAKED +BEAKER +BEAKERS +BEAKS +BEAM +BEAMED +BEAMER +BEAMERS +BEAMING +BEAMS +BEAN +BEANBAG +BEANED +BEANER +BEANERS +BEANING +BEANS +BEAR +BEARABLE +BEARABLY +BEARD +BEARDED +BEARDLESS +BEARDS +BEARDSLEY +BEARER +BEARERS +BEARING +BEARINGS +BEARISH +BEARS +BEAST +BEASTLY +BEASTS +BEAT +BEATABLE +BEATABLY +BEATEN +BEATER +BEATERS +BEATIFIC +BEATIFICATION +BEATIFY +BEATING +BEATINGS +BEATITUDE +BEATITUDES +BEATNIK +BEATNIKS +BEATRICE +BEATS +BEAU +BEAUCHAMPS +BEAUJOLAIS +BEAUMONT +BEAUREGARD +BEAUS +BEAUTEOUS +BEAUTEOUSLY +BEAUTIES +BEAUTIFICATIONS +BEAUTIFIED +BEAUTIFIER +BEAUTIFIERS +BEAUTIFIES +BEAUTIFUL +BEAUTIFULLY +BEAUTIFY +BEAUTIFYING +BEAUTY +BEAVER +BEAVERS +BEAVERTON +BECALM +BECALMED +BECALMING +BECALMS +BECAME +BECAUSE +BECHTEL +BECK +BECKER +BECKMAN +BECKON +BECKONED +BECKONING +BECKONS +BECKY +BECOME +BECOMES +BECOMING +BECOMINGLY +BED +BEDAZZLE +BEDAZZLED +BEDAZZLEMENT +BEDAZZLES +BEDAZZLING +BEDBUG +BEDBUGS +BEDDED +BEDDER +BEDDERS +BEDDING +BEDEVIL +BEDEVILED +BEDEVILING +BEDEVILS +BEDFAST +BEDFORD +BEDLAM +BEDPOST +BEDPOSTS +BEDRAGGLE +BEDRAGGLED +BEDRIDDEN +BEDROCK +BEDROOM +BEDROOMS +BEDS +BEDSIDE +BEDSPREAD +BEDSPREADS +BEDSPRING +BEDSPRINGS +BEDSTEAD +BEDSTEADS +BEDTIME +BEE +BEEBE +BEECH +BEECHAM +BEECHEN +BEECHER +BEEF +BEEFED +BEEFER +BEEFERS +BEEFING +BEEFS +BEEFSTEAK +BEEFY +BEEHIVE +BEEHIVES +BEEN +BEEP +BEEPS +BEER +BEERS +BEES +BEET +BEETHOVEN +BEETLE +BEETLED +BEETLES +BEETLING +BEETS +BEFALL +BEFALLEN +BEFALLING +BEFALLS +BEFELL +BEFIT +BEFITS +BEFITTED +BEFITTING +BEFOG +BEFOGGED +BEFOGGING +BEFORE +BEFOREHAND +BEFOUL +BEFOULED +BEFOULING +BEFOULS +BEFRIEND +BEFRIENDED +BEFRIENDING +BEFRIENDS +BEFUDDLE +BEFUDDLED +BEFUDDLES +BEFUDDLING +BEG +BEGAN +BEGET +BEGETS +BEGETTING +BEGGAR +BEGGARLY +BEGGARS +BEGGARY +BEGGED +BEGGING +BEGIN +BEGINNER +BEGINNERS +BEGINNING +BEGINNINGS +BEGINS +BEGOT +BEGOTTEN +BEGRUDGE +BEGRUDGED +BEGRUDGES +BEGRUDGING +BEGRUDGINGLY +BEGS +BEGUILE +BEGUILED +BEGUILES +BEGUILING +BEGUN +BEHALF +BEHAVE +BEHAVED +BEHAVES +BEHAVING +BEHAVIOR +BEHAVIORAL +BEHAVIORALLY +BEHAVIORISM +BEHAVIORISTIC +BEHAVIORS +BEHEAD +BEHEADING +BEHELD +BEHEMOTH +BEHEMOTHS +BEHEST +BEHIND +BEHOLD +BEHOLDEN +BEHOLDER +BEHOLDERS +BEHOLDING +BEHOLDS +BEHOOVE +BEHOOVES +BEIGE +BEIJING +BEING +BEINGS +BEIRUT +BELA +BELABOR +BELABORED +BELABORING +BELABORS +BELATED +BELATEDLY +BELAY +BELAYED +BELAYING +BELAYS +BELCH +BELCHED +BELCHES +BELCHING +BELFAST +BELFRIES +BELFRY +BELGIAN +BELGIANS +BELGIUM +BELGRADE +BELIE +BELIED +BELIEF +BELIEFS +BELIES +BELIEVABLE +BELIEVABLY +BELIEVE +BELIEVED +BELIEVER +BELIEVERS +BELIEVES +BELIEVING +BELITTLE +BELITTLED +BELITTLES +BELITTLING +BELIZE +BELL +BELLA +BELLAMY +BELLATRIX +BELLBOY +BELLBOYS +BELLE +BELLES +BELLEVILLE +BELLHOP +BELLHOPS +BELLICOSE +BELLICOSITY +BELLIES +BELLIGERENCE +BELLIGERENT +BELLIGERENTLY +BELLIGERENTS +BELLINGHAM +BELLINI +BELLMAN +BELLMEN +BELLOVIN +BELLOW +BELLOWED +BELLOWING +BELLOWS +BELLS +BELLUM +BELLWETHER +BELLWETHERS +BELLWOOD +BELLY +BELLYACHE +BELLYFULL +BELMONT +BELOIT +BELONG +BELONGED +BELONGING +BELONGINGS +BELONGS +BELOVED +BELOW +BELSHAZZAR +BELT +BELTED +BELTING +BELTON +BELTS +BELTSVILLE +BELUSHI +BELY +BELYING +BEMOAN +BEMOANED +BEMOANING +BEMOANS +BEN +BENARES +BENCH +BENCHED +BENCHES +BENCHMARK +BENCHMARKING +BENCHMARKS +BEND +BENDABLE +BENDER +BENDERS +BENDING +BENDIX +BENDS +BENEATH +BENEDICT +BENEDICTINE +BENEDICTION +BENEDICTIONS +BENEDIKT +BENEFACTOR +BENEFACTORS +BENEFICENCE +BENEFICENCES +BENEFICENT +BENEFICIAL +BENEFICIALLY +BENEFICIARIES +BENEFICIARY +BENEFIT +BENEFITED +BENEFITING +BENEFITS +BENEFITTED +BENEFITTING +BENELUX +BENEVOLENCE +BENEVOLENT +BENGAL +BENGALI +BENIGHTED +BENIGN +BENIGNLY +BENJAMIN +BENNETT +BENNINGTON +BENNY +BENSON +BENT +BENTHAM +BENTLEY +BENTLEYS +BENTON +BENZ +BENZEDRINE +BENZENE +BEOGRAD +BEOWULF +BEQUEATH +BEQUEATHAL +BEQUEATHED +BEQUEATHING +BEQUEATHS +BEQUEST +BEQUESTS +BERATE +BERATED +BERATES +BERATING +BEREA +BEREAVE +BEREAVED +BEREAVEMENT +BEREAVEMENTS +BEREAVES +BEREAVING +BEREFT +BERENICES +BERESFORD +BERET +BERETS +BERGEN +BERGLAND +BERGLUND +BERGMAN +BERGSON +BERGSTEN +BERGSTROM +BERIBBONED +BERIBERI +BERINGER +BERKELEY +BERKELIUM +BERKOWITZ +BERKSHIRE +BERKSHIRES +BERLIN +BERLINER +BERLINERS +BERLINIZE +BERLINIZES +BERLIOZ +BERLITZ +BERMAN +BERMUDA +BERN +BERNADINE +BERNARD +BERNARDINE +BERNARDINO +BERNARDO +BERNE +BERNET +BERNHARD +BERNICE +BERNIE +BERNIECE +BERNINI +BERNOULLI +BERNSTEIN +BERRA +BERRIES +BERRY +BERSERK +BERT +BERTH +BERTHA +BERTHS +BERTIE +BERTRAM +BERTRAND +BERWICK +BERYL +BERYLLIUM +BESEECH +BESEECHES +BESEECHING +BESET +BESETS +BESETTING +BESIDE +BESIDES +BESIEGE +BESIEGED +BESIEGER +BESIEGERS +BESIEGING +BESMIRCH +BESMIRCHED +BESMIRCHES +BESMIRCHING +BESOTTED +BESOTTER +BESOTTING +BESOUGHT +BESPEAK +BESPEAKS +BESPECTACLED +BESPOKE +BESS +BESSEL +BESSEMER +BESSEMERIZE +BESSEMERIZES +BESSIE +BEST +BESTED +BESTIAL +BESTING +BESTIR +BESTIRRING +BESTOW +BESTOWAL +BESTOWED +BESTS +BESTSELLER +BESTSELLERS +BESTSELLING +BET +BETA +BETATRON +BETEL +BETELGEUSE +BETHESDA +BETHLEHEM +BETIDE +BETRAY +BETRAYAL +BETRAYED +BETRAYER +BETRAYING +BETRAYS +BETROTH +BETROTHAL +BETROTHED +BETS +BETSEY +BETSY +BETTE +BETTER +BETTERED +BETTERING +BETTERMENT +BETTERMENTS +BETTERS +BETTIES +BETTING +BETTY +BETWEEN +BETWIXT +BEVEL +BEVELED +BEVELING +BEVELS +BEVERAGE +BEVERAGES +BEVERLY +BEVY +BEWAIL +BEWAILED +BEWAILING +BEWAILS +BEWARE +BEWHISKERED +BEWILDER +BEWILDERED +BEWILDERING +BEWILDERINGLY +BEWILDERMENT +BEWILDERS +BEWITCH +BEWITCHED +BEWITCHES +BEWITCHING +BEYOND +BHUTAN +BIALYSTOK +BIANCO +BIANNUAL +BIAS +BIASED +BIASES +BIASING +BIB +BIBBED +BIBBING +BIBLE +BIBLES +BIBLICAL +BIBLICALLY +BIBLIOGRAPHIC +BIBLIOGRAPHICAL +BIBLIOGRAPHIES +BIBLIOGRAPHY +BIBLIOPHILE +BIBS +BICAMERAL +BICARBONATE +BICENTENNIAL +BICEP +BICEPS +BICKER +BICKERED +BICKERING +BICKERS +BICONCAVE +BICONNECTED +BICONVEX +BICYCLE +BICYCLED +BICYCLER +BICYCLERS +BICYCLES +BICYCLING +BID +BIDDABLE +BIDDEN +BIDDER +BIDDERS +BIDDIES +BIDDING +BIDDLE +BIDDY +BIDE +BIDIRECTIONAL +BIDS +BIEN +BIENNIAL +BIENNIUM +BIENVILLE +BIER +BIERCE +BIFOCAL +BIFOCALS +BIFURCATE +BIG +BIGELOW +BIGGER +BIGGEST +BIGGS +BIGHT +BIGHTS +BIGNESS +BIGOT +BIGOTED +BIGOTRY +BIGOTS +BIHARMONIC +BIJECTION +BIJECTIONS +BIJECTIVE +BIJECTIVELY +BIKE +BIKES +BIKING +BIKINI +BIKINIS +BILABIAL +BILATERAL +BILATERALLY +BILBAO +BILBO +BILE +BILGE +BILGES +BILINEAR +BILINGUAL +BILK +BILKED +BILKING +BILKS +BILL +BILLBOARD +BILLBOARDS +BILLED +BILLER +BILLERS +BILLET +BILLETED +BILLETING +BILLETS +BILLIARD +BILLIARDS +BILLIE +BILLIKEN +BILLIKENS +BILLING +BILLINGS +BILLION +BILLIONS +BILLIONTH +BILLOW +BILLOWED +BILLOWS +BILLS +BILTMORE +BIMETALLIC +BIMETALLISM +BIMINI +BIMODAL +BIMOLECULAR +BIMONTHLIES +BIMONTHLY +BIN +BINARIES +BINARY +BINAURAL +BIND +BINDER +BINDERS +BINDING +BINDINGS +BINDS +BING +BINGE +BINGES +BINGHAM +BINGHAMTON +BINGO +BINI +BINOCULAR +BINOCULARS +BINOMIAL +BINS +BINUCLEAR +BIOCHEMICAL +BIOCHEMIST +BIOCHEMISTRY +BIOFEEDBACK +BIOGRAPHER +BIOGRAPHERS +BIOGRAPHIC +BIOGRAPHICAL +BIOGRAPHICALLY +BIOGRAPHIES +BIOGRAPHY +BIOLOGICAL +BIOLOGICALLY +BIOLOGIST +BIOLOGISTS +BIOLOGY +BIOMEDICAL +BIOMEDICINE +BIOPHYSICAL +BIOPHYSICIST +BIOPHYSICS +BIOPSIES +BIOPSY +BIOSCIENCE +BIOSPHERE +BIOSTATISTIC +BIOSYNTHESIZE +BIOTA +BIOTIC +BIPARTISAN +BIPARTITE +BIPED +BIPEDS +BIPLANE +BIPLANES +BIPOLAR +BIRACIAL +BIRCH +BIRCHEN +BIRCHES +BIRD +BIRDBATH +BIRDBATHS +BIRDIE +BIRDIED +BIRDIES +BIRDLIKE +BIRDS +BIREFRINGENCE +BIREFRINGENT +BIRGIT +BIRMINGHAM +BIRMINGHAMIZE +BIRMINGHAMIZES +BIRTH +BIRTHDAY +BIRTHDAYS +BIRTHED +BIRTHPLACE +BIRTHPLACES +BIRTHRIGHT +BIRTHRIGHTS +BIRTHS +BISCAYNE +BISCUIT +BISCUITS +BISECT +BISECTED +BISECTING +BISECTION +BISECTIONS +BISECTOR +BISECTORS +BISECTS +BISHOP +BISHOPS +BISMARCK +BISMARK +BISMUTH +BISON +BISONS +BISQUE +BISQUES +BISSAU +BISTABLE +BISTATE +BIT +BITCH +BITCHES +BITE +BITER +BITERS +BITES +BITING +BITINGLY +BITMAP +BITNET +BITS +BITTEN +BITTER +BITTERER +BITTEREST +BITTERLY +BITTERNESS +BITTERNUT +BITTERROOT +BITTERS +BITTERSWEET +BITUMEN +BITUMINOUS +BITWISE +BIVALVE +BIVALVES +BIVARIATE +BIVOUAC +BIVOUACS +BIWEEKLY +BIZARRE +BIZET +BLAB +BLABBED +BLABBERMOUTH +BLABBERMOUTHS +BLABBING +BLABS +BLACK +BLACKBERRIES +BLACKBERRY +BLACKBIRD +BLACKBIRDS +BLACKBOARD +BLACKBOARDS +BLACKBURN +BLACKED +BLACKEN +BLACKENED +BLACKENING +BLACKENS +BLACKER +BLACKEST +BLACKFEET +BLACKFOOT +BLACKFOOTS +BLACKING +BLACKJACK +BLACKJACKS +BLACKLIST +BLACKLISTED +BLACKLISTING +BLACKLISTS +BLACKLY +BLACKMAIL +BLACKMAILED +BLACKMAILER +BLACKMAILERS +BLACKMAILING +BLACKMAILS +BLACKMAN +BLACKMER +BLACKNESS +BLACKOUT +BLACKOUTS +BLACKS +BLACKSMITH +BLACKSMITHS +BLACKSTONE +BLACKWELL +BLACKWELLS +BLADDER +BLADDERS +BLADE +BLADES +BLAINE +BLAIR +BLAKE +BLAKEY +BLAMABLE +BLAME +BLAMED +BLAMELESS +BLAMELESSNESS +BLAMER +BLAMERS +BLAMES +BLAMEWORTHY +BLAMING +BLANCH +BLANCHARD +BLANCHE +BLANCHED +BLANCHES +BLANCHING +BLAND +BLANDLY +BLANDNESS +BLANK +BLANKED +BLANKER +BLANKEST +BLANKET +BLANKETED +BLANKETER +BLANKETERS +BLANKETING +BLANKETS +BLANKING +BLANKLY +BLANKNESS +BLANKS +BLANTON +BLARE +BLARED +BLARES +BLARING +BLASE +BLASPHEME +BLASPHEMED +BLASPHEMES +BLASPHEMIES +BLASPHEMING +BLASPHEMOUS +BLASPHEMOUSLY +BLASPHEMOUSNESS +BLASPHEMY +BLAST +BLASTED +BLASTER +BLASTERS +BLASTING +BLASTS +BLATANT +BLATANTLY +BLATZ +BLAZE +BLAZED +BLAZER +BLAZERS +BLAZES +BLAZING +BLEACH +BLEACHED +BLEACHER +BLEACHERS +BLEACHES +BLEACHING +BLEAK +BLEAKER +BLEAKLY +BLEAKNESS +BLEAR +BLEARY +BLEAT +BLEATING +BLEATS +BLED +BLEED +BLEEDER +BLEEDING +BLEEDINGS +BLEEDS +BLEEKER +BLEMISH +BLEMISHES +BLEND +BLENDED +BLENDER +BLENDING +BLENDS +BLENHEIM +BLESS +BLESSED +BLESSING +BLESSINGS +BLEW +BLIGHT +BLIGHTED +BLIMP +BLIMPS +BLIND +BLINDED +BLINDER +BLINDERS +BLINDFOLD +BLINDFOLDED +BLINDFOLDING +BLINDFOLDS +BLINDING +BLINDINGLY +BLINDLY +BLINDNESS +BLINDS +BLINK +BLINKED +BLINKER +BLINKERS +BLINKING +BLINKS +BLINN +BLIP +BLIPS +BLISS +BLISSFUL +BLISSFULLY +BLISTER +BLISTERED +BLISTERING +BLISTERS +BLITHE +BLITHELY +BLITZ +BLITZES +BLITZKRIEG +BLIZZARD +BLIZZARDS +BLOAT +BLOATED +BLOATER +BLOATING +BLOATS +BLOB +BLOBS +BLOC +BLOCH +BLOCK +BLOCKADE +BLOCKADED +BLOCKADES +BLOCKADING +BLOCKAGE +BLOCKAGES +BLOCKED +BLOCKER +BLOCKERS +BLOCKHOUSE +BLOCKHOUSES +BLOCKING +BLOCKS +BLOCS +BLOKE +BLOKES +BLOMBERG +BLOMQUIST +BLOND +BLONDE +BLONDES +BLONDS +BLOOD +BLOODBATH +BLOODED +BLOODHOUND +BLOODHOUNDS +BLOODIED +BLOODIEST +BLOODLESS +BLOODS +BLOODSHED +BLOODSHOT +BLOODSTAIN +BLOODSTAINED +BLOODSTAINS +BLOODSTREAM +BLOODY +BLOOM +BLOOMED +BLOOMERS +BLOOMFIELD +BLOOMING +BLOOMINGTON +BLOOMS +BLOOPER +BLOSSOM +BLOSSOMED +BLOSSOMS +BLOT +BLOTS +BLOTTED +BLOTTING +BLOUSE +BLOUSES +BLOW +BLOWER +BLOWERS +BLOWFISH +BLOWING +BLOWN +BLOWOUT +BLOWS +BLOWUP +BLUBBER +BLUDGEON +BLUDGEONED +BLUDGEONING +BLUDGEONS +BLUE +BLUEBERRIES +BLUEBERRY +BLUEBIRD +BLUEBIRDS +BLUEBONNET +BLUEBONNETS +BLUEFISH +BLUENESS +BLUEPRINT +BLUEPRINTS +BLUER +BLUES +BLUEST +BLUESTOCKING +BLUFF +BLUFFING +BLUFFS +BLUING +BLUISH +BLUM +BLUMENTHAL +BLUNDER +BLUNDERBUSS +BLUNDERED +BLUNDERING +BLUNDERINGS +BLUNDERS +BLUNT +BLUNTED +BLUNTER +BLUNTEST +BLUNTING +BLUNTLY +BLUNTNESS +BLUNTS +BLUR +BLURB +BLURRED +BLURRING +BLURRY +BLURS +BLURT +BLURTED +BLURTING +BLURTS +BLUSH +BLUSHED +BLUSHES +BLUSHING +BLUSTER +BLUSTERED +BLUSTERING +BLUSTERS +BLUSTERY +BLYTHE +BOA +BOAR +BOARD +BOARDED +BOARDER +BOARDERS +BOARDING +BOARDINGHOUSE +BOARDINGHOUSES +BOARDS +BOARSH +BOAST +BOASTED +BOASTER +BOASTERS +BOASTFUL +BOASTFULLY +BOASTING +BOASTINGS +BOASTS +BOAT +BOATER +BOATERS +BOATHOUSE +BOATHOUSES +BOATING +BOATLOAD +BOATLOADS +BOATMAN +BOATMEN +BOATS +BOATSMAN +BOATSMEN +BOATSWAIN +BOATSWAINS +BOATYARD +BOATYARDS +BOB +BOBBED +BOBBIE +BOBBIN +BOBBING +BOBBINS +BOBBSEY +BOBBY +BOBOLINK +BOBOLINKS +BOBROW +BOBS +BOBWHITE +BOBWHITES +BOCA +BODE +BODENHEIM +BODES +BODICE +BODIED +BODIES +BODILY +BODLEIAN +BODY +BODYBUILDER +BODYBUILDERS +BODYBUILDING +BODYGUARD +BODYGUARDS +BODYWEIGHT +BOEING +BOEOTIA +BOEOTIAN +BOER +BOERS +BOG +BOGART +BOGARTIAN +BOGEYMEN +BOGGED +BOGGLE +BOGGLED +BOGGLES +BOGGLING +BOGOTA +BOGS +BOGUS +BOHEME +BOHEMIA +BOHEMIAN +BOHEMIANISM +BOHR +BOIL +BOILED +BOILER +BOILERPLATE +BOILERS +BOILING +BOILS +BOIS +BOISE +BOISTEROUS +BOISTEROUSLY +BOLD +BOLDER +BOLDEST +BOLDFACE +BOLDLY +BOLDNESS +BOLIVIA +BOLIVIAN +BOLL +BOLOGNA +BOLSHEVIK +BOLSHEVIKS +BOLSHEVISM +BOLSHEVIST +BOLSHEVISTIC +BOLSHOI +BOLSTER +BOLSTERED +BOLSTERING +BOLSTERS +BOLT +BOLTED +BOLTING +BOLTON +BOLTS +BOLTZMANN +BOMB +BOMBARD +BOMBARDED +BOMBARDING +BOMBARDMENT +BOMBARDS +BOMBAST +BOMBASTIC +BOMBAY +BOMBED +BOMBER +BOMBERS +BOMBING +BOMBINGS +BOMBPROOF +BOMBS +BONANZA +BONANZAS +BONAPARTE +BONAVENTURE +BOND +BONDAGE +BONDED +BONDER +BONDERS +BONDING +BONDS +BONDSMAN +BONDSMEN +BONE +BONED +BONER +BONERS +BONES +BONFIRE +BONFIRES +BONG +BONHAM +BONIFACE +BONING +BONN +BONNET +BONNETED +BONNETS +BONNEVILLE +BONNIE +BONNY +BONTEMPO +BONUS +BONUSES +BONY +BOO +BOOB +BOOBOO +BOOBY +BOOK +BOOKCASE +BOOKCASES +BOOKED +BOOKER +BOOKERS +BOOKIE +BOOKIES +BOOKING +BOOKINGS +BOOKISH +BOOKKEEPER +BOOKKEEPERS +BOOKKEEPING +BOOKLET +BOOKLETS +BOOKMARK +BOOKS +BOOKSELLER +BOOKSELLERS +BOOKSHELF +BOOKSHELVES +BOOKSTORE +BOOKSTORES +BOOKWORM +BOOLEAN +BOOLEANS +BOOM +BOOMED +BOOMERANG +BOOMERANGS +BOOMING +BOOMS +BOON +BOONE +BOONTON +BOOR +BOORISH +BOORS +BOOS +BOOST +BOOSTED +BOOSTER +BOOSTING +BOOSTS +BOOT +BOOTABLE +BOOTED +BOOTES +BOOTH +BOOTHS +BOOTING +BOOTLE +BOOTLEG +BOOTLEGGED +BOOTLEGGER +BOOTLEGGERS +BOOTLEGGING +BOOTLEGS +BOOTS +BOOTSTRAP +BOOTSTRAPPED +BOOTSTRAPPING +BOOTSTRAPS +BOOTY +BOOZE +BORATE +BORATES +BORAX +BORDEAUX +BORDELLO +BORDELLOS +BORDEN +BORDER +BORDERED +BORDERING +BORDERINGS +BORDERLAND +BORDERLANDS +BORDERLINE +BORDERS +BORE +BOREALIS +BOREAS +BORED +BOREDOM +BORER +BORES +BORG +BORIC +BORING +BORIS +BORN +BORNE +BORNEO +BORON +BOROUGH +BOROUGHS +BORROUGHS +BORROW +BORROWED +BORROWER +BORROWERS +BORROWING +BORROWS +BOSCH +BOSE +BOSOM +BOSOMS +BOSPORUS +BOSS +BOSSED +BOSSES +BOSTITCH +BOSTON +BOSTONIAN +BOSTONIANS +BOSUN +BOSWELL +BOSWELLIZE +BOSWELLIZES +BOTANICAL +BOTANIST +BOTANISTS +BOTANY +BOTCH +BOTCHED +BOTCHER +BOTCHERS +BOTCHES +BOTCHING +BOTH +BOTHER +BOTHERED +BOTHERING +BOTHERS +BOTHERSOME +BOTSWANA +BOTTLE +BOTTLED +BOTTLENECK +BOTTLENECKS +BOTTLER +BOTTLERS +BOTTLES +BOTTLING +BOTTOM +BOTTOMED +BOTTOMING +BOTTOMLESS +BOTTOMS +BOTULINUS +BOTULISM +BOUCHER +BOUFFANT +BOUGH +BOUGHS +BOUGHT +BOULDER +BOULDERS +BOULEVARD +BOULEVARDS +BOUNCE +BOUNCED +BOUNCER +BOUNCES +BOUNCING +BOUNCY +BOUND +BOUNDARIES +BOUNDARY +BOUNDED +BOUNDEN +BOUNDING +BOUNDLESS +BOUNDLESSNESS +BOUNDS +BOUNTEOUS +BOUNTEOUSLY +BOUNTIES +BOUNTIFUL +BOUNTY +BOUQUET +BOUQUETS +BOURBAKI +BOURBON +BOURGEOIS +BOURGEOISIE +BOURNE +BOUSTROPHEDON +BOUSTROPHEDONIC +BOUT +BOUTIQUE +BOUTS +BOUVIER +BOVINE +BOVINES +BOW +BOWDITCH +BOWDLERIZE +BOWDLERIZED +BOWDLERIZES +BOWDLERIZING +BOWDOIN +BOWED +BOWEL +BOWELS +BOWEN +BOWER +BOWERS +BOWES +BOWING +BOWL +BOWLED +BOWLER +BOWLERS +BOWLINE +BOWLINES +BOWLING +BOWLS +BOWMAN +BOWS +BOWSTRING +BOWSTRINGS +BOX +BOXCAR +BOXCARS +BOXED +BOXER +BOXERS +BOXES +BOXFORD +BOXING +BOXTOP +BOXTOPS +BOXWOOD +BOY +BOYCE +BOYCOTT +BOYCOTTED +BOYCOTTS +BOYD +BOYFRIEND +BOYFRIENDS +BOYHOOD +BOYISH +BOYISHNESS +BOYLE +BOYLSTON +BOYS +BRA +BRACE +BRACED +BRACELET +BRACELETS +BRACES +BRACING +BRACKET +BRACKETED +BRACKETING +BRACKETS +BRACKISH +BRADBURY +BRADFORD +BRADLEY +BRADSHAW +BRADY +BRAE +BRAES +BRAG +BRAGG +BRAGGED +BRAGGER +BRAGGING +BRAGS +BRAHMAPUTRA +BRAHMS +BRAHMSIAN +BRAID +BRAIDED +BRAIDING +BRAIDS +BRAILLE +BRAIN +BRAINARD +BRAINARDS +BRAINCHILD +BRAINED +BRAINING +BRAINS +BRAINSTEM +BRAINSTEMS +BRAINSTORM +BRAINSTORMS +BRAINWASH +BRAINWASHED +BRAINWASHES +BRAINWASHING +BRAINY +BRAKE +BRAKED +BRAKEMAN +BRAKES +BRAKING +BRAMBLE +BRAMBLES +BRAMBLY +BRAN +BRANCH +BRANCHED +BRANCHES +BRANCHING +BRANCHINGS +BRANCHVILLE +BRAND +BRANDED +BRANDEIS +BRANDEL +BRANDENBURG +BRANDING +BRANDISH +BRANDISHES +BRANDISHING +BRANDON +BRANDS +BRANDT +BRANDY +BRANDYWINE +BRANIFF +BRANNON +BRAS +BRASH +BRASHLY +BRASHNESS +BRASILIA +BRASS +BRASSES +BRASSIERE +BRASSTOWN +BRASSY +BRAT +BRATS +BRAUN +BRAVADO +BRAVE +BRAVED +BRAVELY +BRAVENESS +BRAVER +BRAVERY +BRAVES +BRAVEST +BRAVING +BRAVO +BRAVOS +BRAWL +BRAWLER +BRAWLING +BRAWN +BRAY +BRAYED +BRAYER +BRAYING +BRAYS +BRAZE +BRAZED +BRAZEN +BRAZENLY +BRAZENNESS +BRAZES +BRAZIER +BRAZIERS +BRAZIL +BRAZILIAN +BRAZING +BRAZZAVILLE +BREACH +BREACHED +BREACHER +BREACHERS +BREACHES +BREACHING +BREAD +BREADBOARD +BREADBOARDS +BREADBOX +BREADBOXES +BREADED +BREADING +BREADS +BREADTH +BREADWINNER +BREADWINNERS +BREAK +BREAKABLE +BREAKABLES +BREAKAGE +BREAKAWAY +BREAKDOWN +BREAKDOWNS +BREAKER +BREAKERS +BREAKFAST +BREAKFASTED +BREAKFASTER +BREAKFASTERS +BREAKFASTING +BREAKFASTS +BREAKING +BREAKPOINT +BREAKPOINTS +BREAKS +BREAKTHROUGH +BREAKTHROUGHES +BREAKTHROUGHS +BREAKUP +BREAKWATER +BREAKWATERS +BREAST +BREASTED +BREASTS +BREASTWORK +BREASTWORKS +BREATH +BREATHABLE +BREATHE +BREATHED +BREATHER +BREATHERS +BREATHES +BREATHING +BREATHLESS +BREATHLESSLY +BREATHS +BREATHTAKING +BREATHTAKINGLY +BREATHY +BRED +BREECH +BREECHES +BREED +BREEDER +BREEDING +BREEDS +BREEZE +BREEZES +BREEZILY +BREEZY +BREMEN +BREMSSTRAHLUNG +BRENDA +BRENDAN +BRENNAN +BRENNER +BRENT +BRESENHAM +BREST +BRETHREN +BRETON +BRETONS +BRETT +BREVE +BREVET +BREVETED +BREVETING +BREVETS +BREVITY +BREW +BREWED +BREWER +BREWERIES +BREWERS +BREWERY +BREWING +BREWS +BREWSTER +BRIAN +BRIAR +BRIARS +BRIBE +BRIBED +BRIBER +BRIBERS +BRIBERY +BRIBES +BRIBING +BRICE +BRICK +BRICKBAT +BRICKED +BRICKER +BRICKLAYER +BRICKLAYERS +BRICKLAYING +BRICKS +BRIDAL +BRIDE +BRIDEGROOM +BRIDES +BRIDESMAID +BRIDESMAIDS +BRIDEWELL +BRIDGE +BRIDGEABLE +BRIDGED +BRIDGEHEAD +BRIDGEHEADS +BRIDGEPORT +BRIDGES +BRIDGET +BRIDGETOWN +BRIDGEWATER +BRIDGEWORK +BRIDGING +BRIDLE +BRIDLED +BRIDLES +BRIDLING +BRIE +BRIEF +BRIEFCASE +BRIEFCASES +BRIEFED +BRIEFER +BRIEFEST +BRIEFING +BRIEFINGS +BRIEFLY +BRIEFNESS +BRIEFS +BRIEN +BRIER +BRIG +BRIGADE +BRIGADES +BRIGADIER +BRIGADIERS +BRIGADOON +BRIGANTINE +BRIGGS +BRIGHAM +BRIGHT +BRIGHTEN +BRIGHTENED +BRIGHTENER +BRIGHTENERS +BRIGHTENING +BRIGHTENS +BRIGHTER +BRIGHTEST +BRIGHTLY +BRIGHTNESS +BRIGHTON +BRIGS +BRILLIANCE +BRILLIANCY +BRILLIANT +BRILLIANTLY +BRILLOUIN +BRIM +BRIMFUL +BRIMMED +BRIMMING +BRIMSTONE +BRINDISI +BRINDLE +BRINDLED +BRINE +BRING +BRINGER +BRINGERS +BRINGING +BRINGS +BRINK +BRINKLEY +BRINKMANSHIP +BRINY +BRISBANE +BRISK +BRISKER +BRISKLY +BRISKNESS +BRISTLE +BRISTLED +BRISTLES +BRISTLING +BRISTOL +BRITAIN +BRITANNIC +BRITANNICA +BRITCHES +BRITISH +BRITISHER +BRITISHLY +BRITON +BRITONS +BRITTANY +BRITTEN +BRITTLE +BRITTLENESS +BROACH +BROACHED +BROACHES +BROACHING +BROAD +BROADBAND +BROADCAST +BROADCASTED +BROADCASTER +BROADCASTERS +BROADCASTING +BROADCASTINGS +BROADCASTS +BROADEN +BROADENED +BROADENER +BROADENERS +BROADENING +BROADENINGS +BROADENS +BROADER +BROADEST +BROADLY +BROADNESS +BROADSIDE +BROADWAY +BROCADE +BROCADED +BROCCOLI +BROCHURE +BROCHURES +BROCK +BROGLIE +BROIL +BROILED +BROILER +BROILERS +BROILING +BROILS +BROKE +BROKEN +BROKENLY +BROKENNESS +BROKER +BROKERAGE +BROKERS +BROMFIELD +BROMIDE +BROMIDES +BROMINE +BROMLEY +BRONCHI +BRONCHIAL +BRONCHIOLE +BRONCHIOLES +BRONCHITIS +BRONCHUS +BRONTOSAURUS +BRONX +BRONZE +BRONZED +BRONZES +BROOCH +BROOCHES +BROOD +BROODER +BROODING +BROODS +BROOK +BROOKDALE +BROOKE +BROOKED +BROOKFIELD +BROOKHAVEN +BROOKLINE +BROOKLYN +BROOKMONT +BROOKS +BROOM +BROOMS +BROOMSTICK +BROOMSTICKS +BROTH +BROTHEL +BROTHELS +BROTHER +BROTHERHOOD +BROTHERLINESS +BROTHERLY +BROTHERS +BROUGHT +BROW +BROWBEAT +BROWBEATEN +BROWBEATING +BROWBEATS +BROWN +BROWNE +BROWNED +BROWNELL +BROWNER +BROWNEST +BROWNIAN +BROWNIE +BROWNIES +BROWNING +BROWNISH +BROWNNESS +BROWNS +BROWS +BROWSE +BROWSING +BRUCE +BRUCKNER +BRUEGEL +BRUISE +BRUISED +BRUISES +BRUISING +BRUMIDI +BRUNCH +BRUNCHES +BRUNETTE +BRUNHILDE +BRUNO +BRUNSWICK +BRUNT +BRUSH +BRUSHED +BRUSHES +BRUSHFIRE +BRUSHFIRES +BRUSHING +BRUSHLIKE +BRUSHY +BRUSQUE +BRUSQUELY +BRUSSELS +BRUTAL +BRUTALITIES +BRUTALITY +BRUTALIZE +BRUTALIZED +BRUTALIZES +BRUTALIZING +BRUTALLY +BRUTE +BRUTES +BRUTISH +BRUXELLES +BRYAN +BRYANT +BRYCE +BRYN +BUBBLE +BUBBLED +BUBBLES +BUBBLING +BUBBLY +BUCHANAN +BUCHAREST +BUCHENWALD +BUCHWALD +BUCK +BUCKBOARD +BUCKBOARDS +BUCKED +BUCKET +BUCKETS +BUCKING +BUCKLE +BUCKLED +BUCKLER +BUCKLES +BUCKLEY +BUCKLING +BUCKNELL +BUCKS +BUCKSHOT +BUCKSKIN +BUCKSKINS +BUCKWHEAT +BUCKY +BUCOLIC +BUD +BUDAPEST +BUDD +BUDDED +BUDDHA +BUDDHISM +BUDDHIST +BUDDHISTS +BUDDIES +BUDDING +BUDDY +BUDGE +BUDGED +BUDGES +BUDGET +BUDGETARY +BUDGETED +BUDGETER +BUDGETERS +BUDGETING +BUDGETS +BUDGING +BUDS +BUDWEISER +BUDWEISERS +BUEHRING +BUENA +BUENOS +BUFF +BUFFALO +BUFFALOES +BUFFER +BUFFERED +BUFFERING +BUFFERS +BUFFET +BUFFETED +BUFFETING +BUFFETINGS +BUFFETS +BUFFOON +BUFFOONS +BUFFS +BUG +BUGABOO +BUGATTI +BUGEYED +BUGGED +BUGGER +BUGGERS +BUGGIES +BUGGING +BUGGY +BUGLE +BUGLED +BUGLER +BUGLES +BUGLING +BUGS +BUICK +BUILD +BUILDER +BUILDERS +BUILDING +BUILDINGS +BUILDS +BUILDUP +BUILDUPS +BUILT +BUILTIN +BUJUMBURA +BULB +BULBA +BULBS +BULGARIA +BULGARIAN +BULGE +BULGED +BULGING +BULK +BULKED +BULKHEAD +BULKHEADS +BULKS +BULKY +BULL +BULLDOG +BULLDOGS +BULLDOZE +BULLDOZED +BULLDOZER +BULLDOZES +BULLDOZING +BULLED +BULLET +BULLETIN +BULLETINS +BULLETS +BULLFROG +BULLIED +BULLIES +BULLING +BULLION +BULLISH +BULLOCK +BULLS +BULLSEYE +BULLY +BULLYING +BULWARK +BUM +BUMBLE +BUMBLEBEE +BUMBLEBEES +BUMBLED +BUMBLER +BUMBLERS +BUMBLES +BUMBLING +BUMBRY +BUMMED +BUMMING +BUMP +BUMPED +BUMPER +BUMPERS +BUMPING +BUMPS +BUMPTIOUS +BUMPTIOUSLY +BUMPTIOUSNESS +BUMS +BUN +BUNCH +BUNCHED +BUNCHES +BUNCHING +BUNDESTAG +BUNDLE +BUNDLED +BUNDLES +BUNDLING +BUNDOORA +BUNDY +BUNGALOW +BUNGALOWS +BUNGLE +BUNGLED +BUNGLER +BUNGLERS +BUNGLES +BUNGLING +BUNION +BUNIONS +BUNK +BUNKER +BUNKERED +BUNKERS +BUNKHOUSE +BUNKHOUSES +BUNKMATE +BUNKMATES +BUNKS +BUNNIES +BUNNY +BUNS +BUNSEN +BUNT +BUNTED +BUNTER +BUNTERS +BUNTING +BUNTS +BUNYAN +BUOY +BUOYANCY +BUOYANT +BUOYED +BUOYS +BURBANK +BURCH +BURDEN +BURDENED +BURDENING +BURDENS +BURDENSOME +BUREAU +BUREAUCRACIES +BUREAUCRACY +BUREAUCRAT +BUREAUCRATIC +BUREAUCRATS +BUREAUS +BURGEON +BURGEONED +BURGEONING +BURGESS +BURGESSES +BURGHER +BURGHERS +BURGLAR +BURGLARIES +BURGLARIZE +BURGLARIZED +BURGLARIZES +BURGLARIZING +BURGLARPROOF +BURGLARPROOFED +BURGLARPROOFING +BURGLARPROOFS +BURGLARS +BURGLARY +BURGUNDIAN +BURGUNDIES +BURGUNDY +BURIAL +BURIED +BURIES +BURKE +BURKES +BURL +BURLESQUE +BURLESQUES +BURLINGAME +BURLINGTON +BURLY +BURMA +BURMESE +BURN +BURNE +BURNED +BURNER +BURNERS +BURNES +BURNETT +BURNHAM +BURNING +BURNINGLY +BURNINGS +BURNISH +BURNISHED +BURNISHES +BURNISHING +BURNS +BURNSIDE +BURNSIDES +BURNT +BURNTLY +BURNTNESS +BURP +BURPED +BURPING +BURPS +BURR +BURROUGHS +BURROW +BURROWED +BURROWER +BURROWING +BURROWS +BURRS +BURSA +BURSITIS +BURST +BURSTINESS +BURSTING +BURSTS +BURSTY +BURT +BURTON +BURTT +BURUNDI +BURY +BURYING +BUS +BUSBOY +BUSBOYS +BUSCH +BUSED +BUSES +BUSH +BUSHEL +BUSHELS +BUSHES +BUSHING +BUSHNELL +BUSHWHACK +BUSHWHACKED +BUSHWHACKING +BUSHWHACKS +BUSHY +BUSIED +BUSIER +BUSIEST +BUSILY +BUSINESS +BUSINESSES +BUSINESSLIKE +BUSINESSMAN +BUSINESSMEN +BUSING +BUSS +BUSSED +BUSSES +BUSSING +BUST +BUSTARD +BUSTARDS +BUSTED +BUSTER +BUSTLE +BUSTLING +BUSTS +BUSY +BUT +BUTANE +BUTCHER +BUTCHERED +BUTCHERS +BUTCHERY +BUTLER +BUTLERS +BUTT +BUTTE +BUTTED +BUTTER +BUTTERBALL +BUTTERCUP +BUTTERED +BUTTERER +BUTTERERS +BUTTERFAT +BUTTERFIELD +BUTTERFLIES +BUTTERFLY +BUTTERING +BUTTERMILK +BUTTERNUT +BUTTERS +BUTTERY +BUTTES +BUTTING +BUTTOCK +BUTTOCKS +BUTTON +BUTTONED +BUTTONHOLE +BUTTONHOLES +BUTTONING +BUTTONS +BUTTRESS +BUTTRESSED +BUTTRESSES +BUTTRESSING +BUTTRICK +BUTTS +BUTYL +BUTYRATE +BUXOM +BUXTEHUDE +BUXTON +BUY +BUYER +BUYERS +BUYING +BUYS +BUZZ +BUZZARD +BUZZARDS +BUZZED +BUZZER +BUZZES +BUZZING +BUZZWORD +BUZZWORDS +BUZZY +BYE +BYERS +BYGONE +BYLAW +BYLAWS +BYLINE +BYLINES +BYPASS +BYPASSED +BYPASSES +BYPASSING +BYPRODUCT +BYPRODUCTS +BYRD +BYRNE +BYRON +BYRONIC +BYRONISM +BYRONIZE +BYRONIZES +BYSTANDER +BYSTANDERS +BYTE +BYTES +BYWAY +BYWAYS +BYWORD +BYWORDS +BYZANTINE +BYZANTINIZE +BYZANTINIZES +BYZANTIUM +CAB +CABAL +CABANA +CABARET +CABBAGE +CABBAGES +CABDRIVER +CABIN +CABINET +CABINETS +CABINS +CABLE +CABLED +CABLES +CABLING +CABOOSE +CABOT +CABS +CACHE +CACHED +CACHES +CACHING +CACKLE +CACKLED +CACKLER +CACKLES +CACKLING +CACTI +CACTUS +CADAVER +CADENCE +CADENCED +CADILLAC +CADILLACS +CADRES +CADY +CAESAR +CAESARIAN +CAESARIZE +CAESARIZES +CAFE +CAFES +CAFETERIA +CAGE +CAGED +CAGER +CAGERS +CAGES +CAGING +CAHILL +CAIMAN +CAIN +CAINE +CAIRN +CAIRO +CAJOLE +CAJOLED +CAJOLES +CAJOLING +CAJUN +CAJUNS +CAKE +CAKED +CAKES +CAKING +CALAIS +CALAMITIES +CALAMITOUS +CALAMITY +CALCEOLARIA +CALCIFY +CALCIUM +CALCOMP +CALCOMP +CALCOMP +CALCULATE +CALCULATED +CALCULATES +CALCULATING +CALCULATION +CALCULATIONS +CALCULATIVE +CALCULATOR +CALCULATORS +CALCULI +CALCULUS +CALCUTTA +CALDER +CALDERA +CALDWELL +CALEB +CALENDAR +CALENDARS +CALF +CALFSKIN +CALGARY +CALHOUN +CALIBER +CALIBERS +CALIBRATE +CALIBRATED +CALIBRATES +CALIBRATING +CALIBRATION +CALIBRATIONS +CALICO +CALIFORNIA +CALIFORNIAN +CALIFORNIANS +CALIGULA +CALIPH +CALIPHS +CALKINS +CALL +CALLABLE +CALLAGHAN +CALLAHAN +CALLAN +CALLED +CALLER +CALLERS +CALLING +CALLIOPE +CALLISTO +CALLOUS +CALLOUSED +CALLOUSLY +CALLOUSNESS +CALLS +CALLUS +CALM +CALMED +CALMER +CALMEST +CALMING +CALMINGLY +CALMLY +CALMNESS +CALMS +CALORIC +CALORIE +CALORIES +CALORIMETER +CALORIMETRIC +CALORIMETRY +CALTECH +CALUMNY +CALVARY +CALVE +CALVERT +CALVES +CALVIN +CALVINIST +CALVINIZE +CALVINIZES +CALYPSO +CAM +CAMBODIA +CAMBRIAN +CAMBRIDGE +CAMDEN +CAME +CAMEL +CAMELOT +CAMELS +CAMEMBERT +CAMERA +CAMERAMAN +CAMERAMEN +CAMERAS +CAMERON +CAMEROON +CAMEROUN +CAMILLA +CAMILLE +CAMINO +CAMOUFLAGE +CAMOUFLAGED +CAMOUFLAGES +CAMOUFLAGING +CAMP +CAMPAIGN +CAMPAIGNED +CAMPAIGNER +CAMPAIGNERS +CAMPAIGNING +CAMPAIGNS +CAMPBELL +CAMPBELLSPORT +CAMPED +CAMPER +CAMPERS +CAMPFIRE +CAMPGROUND +CAMPING +CAMPS +CAMPSITE +CAMPUS +CAMPUSES +CAN +CANAAN +CANADA +CANADIAN +CANADIANIZATION +CANADIANIZATIONS +CANADIANIZE +CANADIANIZES +CANADIANS +CANAL +CANALS +CANARIES +CANARY +CANAVERAL +CANBERRA +CANCEL +CANCELED +CANCELING +CANCELLATION +CANCELLATIONS +CANCELS +CANCER +CANCEROUS +CANCERS +CANDACE +CANDID +CANDIDACY +CANDIDATE +CANDIDATES +CANDIDE +CANDIDLY +CANDIDNESS +CANDIED +CANDIES +CANDLE +CANDLELIGHT +CANDLER +CANDLES +CANDLESTICK +CANDLESTICKS +CANDLEWICK +CANDOR +CANDY +CANE +CANER +CANFIELD +CANINE +CANIS +CANISTER +CANKER +CANKERWORM +CANNABIS +CANNED +CANNEL +CANNER +CANNERS +CANNERY +CANNIBAL +CANNIBALIZE +CANNIBALIZED +CANNIBALIZES +CANNIBALIZING +CANNIBALS +CANNING +CANNISTER +CANNISTERS +CANNON +CANNONBALL +CANNONS +CANNOT +CANNY +CANOE +CANOES +CANOGA +CANON +CANONIC +CANONICAL +CANONICALIZATION +CANONICALIZE +CANONICALIZED +CANONICALIZES +CANONICALIZING +CANONICALLY +CANONICALS +CANONS +CANOPUS +CANOPY +CANS +CANT +CANTABRIGIAN +CANTALOUPE +CANTANKEROUS +CANTANKEROUSLY +CANTEEN +CANTERBURY +CANTILEVER +CANTO +CANTON +CANTONESE +CANTONS +CANTOR +CANTORS +CANUTE +CANVAS +CANVASES +CANVASS +CANVASSED +CANVASSER +CANVASSERS +CANVASSES +CANVASSING +CANYON +CANYONS +CAP +CAPABILITIES +CAPABILITY +CAPABLE +CAPABLY +CAPACIOUS +CAPACIOUSLY +CAPACIOUSNESS +CAPACITANCE +CAPACITANCES +CAPACITIES +CAPACITIVE +CAPACITOR +CAPACITORS +CAPACITY +CAPE +CAPER +CAPERS +CAPES +CAPET +CAPETOWN +CAPILLARY +CAPISTRANO +CAPITA +CAPITAL +CAPITALISM +CAPITALIST +CAPITALISTS +CAPITALIZATION +CAPITALIZATIONS +CAPITALIZE +CAPITALIZED +CAPITALIZER +CAPITALIZERS +CAPITALIZES +CAPITALIZING +CAPITALLY +CAPITALS +CAPITAN +CAPITOL +CAPITOLINE +CAPITOLS +CAPPED +CAPPING +CAPPY +CAPRICE +CAPRICIOUS +CAPRICIOUSLY +CAPRICIOUSNESS +CAPRICORN +CAPS +CAPSICUM +CAPSTAN +CAPSTONE +CAPSULE +CAPTAIN +CAPTAINED +CAPTAINING +CAPTAINS +CAPTION +CAPTIONS +CAPTIVATE +CAPTIVATED +CAPTIVATES +CAPTIVATING +CAPTIVATION +CAPTIVE +CAPTIVES +CAPTIVITY +CAPTOR +CAPTORS +CAPTURE +CAPTURED +CAPTURER +CAPTURERS +CAPTURES +CAPTURING +CAPUTO +CAPYBARA +CAR +CARACAS +CARAMEL +CARAVAN +CARAVANS +CARAWAY +CARBOHYDRATE +CARBOLIC +CARBOLOY +CARBON +CARBONATE +CARBONATES +CARBONATION +CARBONDALE +CARBONE +CARBONES +CARBONIC +CARBONIZATION +CARBONIZE +CARBONIZED +CARBONIZER +CARBONIZERS +CARBONIZES +CARBONIZING +CARBONS +CARBORUNDUM +CARBUNCLE +CARCASS +CARCASSES +CARCINOGEN +CARCINOGENIC +CARCINOMA +CARD +CARDBOARD +CARDER +CARDIAC +CARDIFF +CARDINAL +CARDINALITIES +CARDINALITY +CARDINALLY +CARDINALS +CARDIOD +CARDIOLOGY +CARDIOVASCULAR +CARDS +CARE +CARED +CAREEN +CAREER +CAREERS +CAREFREE +CAREFUL +CAREFULLY +CAREFULNESS +CARELESS +CARELESSLY +CARELESSNESS +CARES +CARESS +CARESSED +CARESSER +CARESSES +CARESSING +CARET +CARETAKER +CAREY +CARGILL +CARGO +CARGOES +CARIB +CARIBBEAN +CARIBOU +CARICATURE +CARING +CARL +CARLA +CARLETON +CARLETONIAN +CARLIN +CARLISLE +CARLO +CARLOAD +CARLSBAD +CARLSBADS +CARLSON +CARLTON +CARLYLE +CARMELA +CARMEN +CARMICHAEL +CARNAGE +CARNAL +CARNATION +CARNEGIE +CARNIVAL +CARNIVALS +CARNIVOROUS +CARNIVOROUSLY +CAROL +CAROLINA +CAROLINAS +CAROLINE +CAROLINGIAN +CAROLINIAN +CAROLINIANS +CAROLS +CAROLYN +CARP +CARPATHIA +CARPATHIANS +CARPENTER +CARPENTERS +CARPENTRY +CARPET +CARPETED +CARPETING +CARPETS +CARPORT +CARR +CARRARA +CARRIAGE +CARRIAGES +CARRIE +CARRIED +CARRIER +CARRIERS +CARRIES +CARRION +CARROLL +CARROT +CARROTS +CARRUTHERS +CARRY +CARRYING +CARRYOVER +CARRYOVERS +CARS +CARSON +CART +CARTED +CARTEL +CARTER +CARTERS +CARTESIAN +CARTHAGE +CARTHAGINIAN +CARTILAGE +CARTING +CARTOGRAPHER +CARTOGRAPHIC +CARTOGRAPHY +CARTON +CARTONS +CARTOON +CARTOONS +CARTRIDGE +CARTRIDGES +CARTS +CARTWHEEL +CARTY +CARUSO +CARVE +CARVED +CARVER +CARVES +CARVING +CARVINGS +CASANOVA +CASCADABLE +CASCADE +CASCADED +CASCADES +CASCADING +CASE +CASED +CASEMENT +CASEMENTS +CASES +CASEWORK +CASEY +CASH +CASHED +CASHER +CASHERS +CASHES +CASHEW +CASHIER +CASHIERS +CASHING +CASHMERE +CASING +CASINGS +CASINO +CASK +CASKET +CASKETS +CASKS +CASPIAN +CASSANDRA +CASSEROLE +CASSEROLES +CASSETTE +CASSIOPEIA +CASSITE +CASSITES +CASSIUS +CASSOCK +CAST +CASTE +CASTER +CASTERS +CASTES +CASTIGATE +CASTILLO +CASTING +CASTLE +CASTLED +CASTLES +CASTOR +CASTRO +CASTROISM +CASTS +CASUAL +CASUALLY +CASUALNESS +CASUALS +CASUALTIES +CASUALTY +CAT +CATACLYSMIC +CATALAN +CATALINA +CATALOG +CATALOGED +CATALOGER +CATALOGING +CATALOGS +CATALONIA +CATALYST +CATALYSTS +CATALYTIC +CATAPULT +CATARACT +CATASTROPHE +CATASTROPHES +CATASTROPHIC +CATAWBA +CATCH +CATCHABLE +CATCHER +CATCHERS +CATCHES +CATCHING +CATEGORICAL +CATEGORICALLY +CATEGORIES +CATEGORIZATION +CATEGORIZE +CATEGORIZED +CATEGORIZER +CATEGORIZERS +CATEGORIZES +CATEGORIZING +CATEGORY +CATER +CATERED +CATERER +CATERING +CATERPILLAR +CATERPILLARS +CATERS +CATHEDRAL +CATHEDRALS +CATHERINE +CATHERWOOD +CATHETER +CATHETERS +CATHODE +CATHODES +CATHOLIC +CATHOLICISM +CATHOLICISMS +CATHOLICS +CATHY +CATLIKE +CATNIP +CATS +CATSKILL +CATSKILLS +CATSUP +CATTAIL +CATTLE +CATTLEMAN +CATTLEMEN +CAUCASIAN +CAUCASIANS +CAUCASUS +CAUCHY +CAUCUS +CAUGHT +CAULDRON +CAULDRONS +CAULIFLOWER +CAULK +CAUSAL +CAUSALITY +CAUSALLY +CAUSATION +CAUSATIONS +CAUSE +CAUSED +CAUSER +CAUSES +CAUSEWAY +CAUSEWAYS +CAUSING +CAUSTIC +CAUSTICLY +CAUSTICS +CAUTION +CAUTIONED +CAUTIONER +CAUTIONERS +CAUTIONING +CAUTIONINGS +CAUTIONS +CAUTIOUS +CAUTIOUSLY +CAUTIOUSNESS +CAVALIER +CAVALIERLY +CAVALIERNESS +CAVALRY +CAVE +CAVEAT +CAVEATS +CAVED +CAVEMAN +CAVEMEN +CAVENDISH +CAVERN +CAVERNOUS +CAVERNS +CAVES +CAVIAR +CAVIL +CAVINESS +CAVING +CAVITIES +CAVITY +CAW +CAWING +CAYLEY +CAYUGA +CEASE +CEASED +CEASELESS +CEASELESSLY +CEASELESSNESS +CEASES +CEASING +CECIL +CECILIA +CECROPIA +CEDAR +CEDE +CEDED +CEDING +CEDRIC +CEILING +CEILINGS +CELANESE +CELEBES +CELEBRATE +CELEBRATED +CELEBRATES +CELEBRATING +CELEBRATION +CELEBRATIONS +CELEBRITIES +CELEBRITY +CELERITY +CELERY +CELESTE +CELESTIAL +CELESTIALLY +CELIA +CELL +CELLAR +CELLARS +CELLED +CELLIST +CELLISTS +CELLOPHANE +CELLS +CELLULAR +CELLULOSE +CELSIUS +CELT +CELTIC +CELTICIZE +CELTICIZES +CEMENT +CEMENTED +CEMENTING +CEMENTS +CEMETERIES +CEMETERY +CENOZOIC +CENSOR +CENSORED +CENSORING +CENSORS +CENSORSHIP +CENSURE +CENSURED +CENSURER +CENSURES +CENSUS +CENSUSES +CENT +CENTAUR +CENTENARY +CENTENNIAL +CENTER +CENTERED +CENTERING +CENTERPIECE +CENTERPIECES +CENTERS +CENTIGRADE +CENTIMETER +CENTIMETERS +CENTIPEDE +CENTIPEDES +CENTRAL +CENTRALIA +CENTRALISM +CENTRALIST +CENTRALIZATION +CENTRALIZE +CENTRALIZED +CENTRALIZES +CENTRALIZING +CENTRALLY +CENTREX +CENTREX +CENTRIFUGAL +CENTRIFUGE +CENTRIPETAL +CENTRIST +CENTROID +CENTS +CENTURIES +CENTURY +CEPHEUS +CERAMIC +CERBERUS +CEREAL +CEREALS +CEREBELLUM +CEREBRAL +CEREMONIAL +CEREMONIALLY +CEREMONIALNESS +CEREMONIES +CEREMONY +CERES +CERN +CERTAIN +CERTAINLY +CERTAINTIES +CERTAINTY +CERTIFIABLE +CERTIFICATE +CERTIFICATES +CERTIFICATION +CERTIFICATIONS +CERTIFIED +CERTIFIER +CERTIFIERS +CERTIFIES +CERTIFY +CERTIFYING +CERVANTES +CESARE +CESSATION +CESSATIONS +CESSNA +CETUS +CEYLON +CEZANNE +CEZANNES +CHABLIS +CHABLISES +CHAD +CHADWICK +CHAFE +CHAFER +CHAFF +CHAFFER +CHAFFEY +CHAFFING +CHAFING +CHAGRIN +CHAIN +CHAINED +CHAINING +CHAINS +CHAIR +CHAIRED +CHAIRING +CHAIRLADY +CHAIRMAN +CHAIRMEN +CHAIRPERSON +CHAIRPERSONS +CHAIRS +CHAIRWOMAN +CHAIRWOMEN +CHALICE +CHALICES +CHALK +CHALKED +CHALKING +CHALKS +CHALLENGE +CHALLENGED +CHALLENGER +CHALLENGERS +CHALLENGES +CHALLENGING +CHALMERS +CHAMBER +CHAMBERED +CHAMBERLAIN +CHAMBERLAINS +CHAMBERMAID +CHAMBERS +CHAMELEON +CHAMPAGNE +CHAMPAIGN +CHAMPION +CHAMPIONED +CHAMPIONING +CHAMPIONS +CHAMPIONSHIP +CHAMPIONSHIPS +CHAMPLAIN +CHANCE +CHANCED +CHANCELLOR +CHANCELLORSVILLE +CHANCERY +CHANCES +CHANCING +CHANDELIER +CHANDELIERS +CHANDIGARH +CHANG +CHANGE +CHANGEABILITY +CHANGEABLE +CHANGEABLY +CHANGED +CHANGEOVER +CHANGER +CHANGERS +CHANGES +CHANGING +CHANNEL +CHANNELED +CHANNELING +CHANNELLED +CHANNELLER +CHANNELLERS +CHANNELLING +CHANNELS +CHANNING +CHANT +CHANTED +CHANTER +CHANTICLEER +CHANTICLEERS +CHANTILLY +CHANTING +CHANTS +CHAO +CHAOS +CHAOTIC +CHAP +CHAPEL +CHAPELS +CHAPERON +CHAPERONE +CHAPERONED +CHAPLAIN +CHAPLAINS +CHAPLIN +CHAPMAN +CHAPS +CHAPTER +CHAPTERS +CHAR +CHARACTER +CHARACTERISTIC +CHARACTERISTICALLY +CHARACTERISTICS +CHARACTERIZABLE +CHARACTERIZATION +CHARACTERIZATIONS +CHARACTERIZE +CHARACTERIZED +CHARACTERIZER +CHARACTERIZERS +CHARACTERIZES +CHARACTERIZING +CHARACTERS +CHARCOAL +CHARCOALED +CHARGE +CHARGEABLE +CHARGED +CHARGER +CHARGERS +CHARGES +CHARGING +CHARIOT +CHARIOTS +CHARISMA +CHARISMATIC +CHARITABLE +CHARITABLENESS +CHARITIES +CHARITY +CHARLEMAGNE +CHARLEMAGNES +CHARLES +CHARLESTON +CHARLEY +CHARLIE +CHARLOTTE +CHARLOTTESVILLE +CHARM +CHARMED +CHARMER +CHARMERS +CHARMING +CHARMINGLY +CHARMS +CHARON +CHARS +CHART +CHARTA +CHARTABLE +CHARTED +CHARTER +CHARTERED +CHARTERING +CHARTERS +CHARTING +CHARTINGS +CHARTRES +CHARTREUSE +CHARTS +CHARYBDIS +CHASE +CHASED +CHASER +CHASERS +CHASES +CHASING +CHASM +CHASMS +CHASSIS +CHASTE +CHASTELY +CHASTENESS +CHASTISE +CHASTISED +CHASTISER +CHASTISERS +CHASTISES +CHASTISING +CHASTITY +CHAT +CHATEAU +CHATEAUS +CHATHAM +CHATTAHOOCHEE +CHATTANOOGA +CHATTEL +CHATTER +CHATTERED +CHATTERER +CHATTERING +CHATTERS +CHATTING +CHATTY +CHAUCER +CHAUFFEUR +CHAUFFEURED +CHAUNCEY +CHAUTAUQUA +CHEAP +CHEAPEN +CHEAPENED +CHEAPENING +CHEAPENS +CHEAPER +CHEAPEST +CHEAPLY +CHEAPNESS +CHEAT +CHEATED +CHEATER +CHEATERS +CHEATING +CHEATS +CHECK +CHECKABLE +CHECKBOOK +CHECKBOOKS +CHECKED +CHECKER +CHECKERBOARD +CHECKERBOARDED +CHECKERBOARDING +CHECKERS +CHECKING +CHECKLIST +CHECKOUT +CHECKPOINT +CHECKPOINTS +CHECKS +CHECKSUM +CHECKSUMMED +CHECKSUMMING +CHECKSUMS +CHECKUP +CHEEK +CHEEKBONE +CHEEKS +CHEEKY +CHEER +CHEERED +CHEERER +CHEERFUL +CHEERFULLY +CHEERFULNESS +CHEERILY +CHEERINESS +CHEERING +CHEERLEADER +CHEERLESS +CHEERLESSLY +CHEERLESSNESS +CHEERS +CHEERY +CHEESE +CHEESECLOTH +CHEESES +CHEESY +CHEETAH +CHEF +CHEFS +CHEKHOV +CHELSEA +CHEMICAL +CHEMICALLY +CHEMICALS +CHEMISE +CHEMIST +CHEMISTRIES +CHEMISTRY +CHEMISTS +CHEN +CHENEY +CHENG +CHERISH +CHERISHED +CHERISHES +CHERISHING +CHERITON +CHEROKEE +CHEROKEES +CHERRIES +CHERRY +CHERUB +CHERUBIM +CHERUBS +CHERYL +CHESAPEAKE +CHESHIRE +CHESS +CHEST +CHESTER +CHESTERFIELD +CHESTERTON +CHESTNUT +CHESTNUTS +CHESTS +CHEVROLET +CHEVY +CHEW +CHEWED +CHEWER +CHEWERS +CHEWING +CHEWS +CHEYENNE +CHEYENNES +CHIANG +CHIC +CHICAGO +CHICAGOAN +CHICAGOANS +CHICANA +CHICANAS +CHICANERY +CHICANO +CHICANOS +CHICK +CHICKADEE +CHICKADEES +CHICKASAWS +CHICKEN +CHICKENS +CHICKS +CHIDE +CHIDED +CHIDES +CHIDING +CHIEF +CHIEFLY +CHIEFS +CHIEFTAIN +CHIEFTAINS +CHIFFON +CHILD +CHILDBIRTH +CHILDHOOD +CHILDISH +CHILDISHLY +CHILDISHNESS +CHILDLIKE +CHILDREN +CHILE +CHILEAN +CHILES +CHILI +CHILL +CHILLED +CHILLER +CHILLERS +CHILLIER +CHILLINESS +CHILLING +CHILLINGLY +CHILLS +CHILLY +CHIME +CHIMERA +CHIMES +CHIMNEY +CHIMNEYS +CHIMPANZEE +CHIN +CHINA +CHINAMAN +CHINAMEN +CHINAS +CHINATOWN +CHINESE +CHING +CHINK +CHINKED +CHINKS +CHINNED +CHINNER +CHINNERS +CHINNING +CHINOOK +CHINS +CHINTZ +CHIP +CHIPMUNK +CHIPMUNKS +CHIPPENDALE +CHIPPEWA +CHIPS +CHIROPRACTOR +CHIRP +CHIRPED +CHIRPING +CHIRPS +CHISEL +CHISELED +CHISELER +CHISELS +CHISHOLM +CHIT +CHIVALROUS +CHIVALROUSLY +CHIVALROUSNESS +CHIVALRY +CHLOE +CHLORINE +CHLOROFORM +CHLOROPHYLL +CHLOROPLAST +CHLOROPLASTS +CHOCK +CHOCKS +CHOCOLATE +CHOCOLATES +CHOCTAW +CHOCTAWS +CHOICE +CHOICES +CHOICEST +CHOIR +CHOIRS +CHOKE +CHOKED +CHOKER +CHOKERS +CHOKES +CHOKING +CHOLERA +CHOMSKY +CHOOSE +CHOOSER +CHOOSERS +CHOOSES +CHOOSING +CHOP +CHOPIN +CHOPPED +CHOPPER +CHOPPERS +CHOPPING +CHOPPY +CHOPS +CHORAL +CHORD +CHORDATE +CHORDED +CHORDING +CHORDS +CHORE +CHOREOGRAPH +CHOREOGRAPHY +CHORES +CHORING +CHORTLE +CHORUS +CHORUSED +CHORUSES +CHOSE +CHOSEN +CHOU +CHOWDER +CHRIS +CHRIST +CHRISTEN +CHRISTENDOM +CHRISTENED +CHRISTENING +CHRISTENS +CHRISTENSEN +CHRISTENSON +CHRISTIAN +CHRISTIANA +CHRISTIANITY +CHRISTIANIZATION +CHRISTIANIZATIONS +CHRISTIANIZE +CHRISTIANIZER +CHRISTIANIZERS +CHRISTIANIZES +CHRISTIANIZING +CHRISTIANS +CHRISTIANSEN +CHRISTIANSON +CHRISTIE +CHRISTINA +CHRISTINE +CHRISTLIKE +CHRISTMAS +CHRISTOFFEL +CHRISTOPH +CHRISTOPHER +CHRISTY +CHROMATOGRAM +CHROMATOGRAPH +CHROMATOGRAPHY +CHROME +CHROMIUM +CHROMOSPHERE +CHRONIC +CHRONICLE +CHRONICLED +CHRONICLER +CHRONICLERS +CHRONICLES +CHRONOGRAPH +CHRONOGRAPHY +CHRONOLOGICAL +CHRONOLOGICALLY +CHRONOLOGIES +CHRONOLOGY +CHRYSANTHEMUM +CHRYSLER +CHUBBIER +CHUBBIEST +CHUBBINESS +CHUBBY +CHUCK +CHUCKLE +CHUCKLED +CHUCKLES +CHUCKS +CHUM +CHUNGKING +CHUNK +CHUNKS +CHUNKY +CHURCH +CHURCHES +CHURCHGOER +CHURCHGOING +CHURCHILL +CHURCHILLIAN +CHURCHLY +CHURCHMAN +CHURCHMEN +CHURCHWOMAN +CHURCHWOMEN +CHURCHYARD +CHURCHYARDS +CHURN +CHURNED +CHURNING +CHURNS +CHUTE +CHUTES +CHUTZPAH +CICADA +CICERO +CICERONIAN +CICERONIANIZE +CICERONIANIZES +CIDER +CIGAR +CIGARETTE +CIGARETTES +CIGARS +CILIA +CINCINNATI +CINDER +CINDERELLA +CINDERS +CINDY +CINEMA +CINEMATIC +CINERAMA +CINNAMON +CIPHER +CIPHERS +CIPHERTEXT +CIPHERTEXTS +CIRCA +CIRCE +CIRCLE +CIRCLED +CIRCLES +CIRCLET +CIRCLING +CIRCUIT +CIRCUITOUS +CIRCUITOUSLY +CIRCUITRY +CIRCUITS +CIRCULANT +CIRCULAR +CIRCULARITY +CIRCULARLY +CIRCULATE +CIRCULATED +CIRCULATES +CIRCULATING +CIRCULATION +CIRCUMCISE +CIRCUMCISION +CIRCUMFERENCE +CIRCUMFLEX +CIRCUMLOCUTION +CIRCUMLOCUTIONS +CIRCUMNAVIGATE +CIRCUMNAVIGATED +CIRCUMNAVIGATES +CIRCUMPOLAR +CIRCUMSCRIBE +CIRCUMSCRIBED +CIRCUMSCRIBING +CIRCUMSCRIPTION +CIRCUMSPECT +CIRCUMSPECTION +CIRCUMSPECTLY +CIRCUMSTANCE +CIRCUMSTANCED +CIRCUMSTANCES +CIRCUMSTANTIAL +CIRCUMSTANTIALLY +CIRCUMVENT +CIRCUMVENTABLE +CIRCUMVENTED +CIRCUMVENTING +CIRCUMVENTS +CIRCUS +CIRCUSES +CISTERN +CISTERNS +CITADEL +CITADELS +CITATION +CITATIONS +CITE +CITED +CITES +CITIES +CITING +CITIZEN +CITIZENS +CITIZENSHIP +CITROEN +CITRUS +CITY +CITYSCAPE +CITYWIDE +CIVET +CIVIC +CIVICS +CIVIL +CIVILIAN +CIVILIANS +CIVILITY +CIVILIZATION +CIVILIZATIONS +CIVILIZE +CIVILIZED +CIVILIZES +CIVILIZING +CIVILLY +CLAD +CLADDING +CLAIM +CLAIMABLE +CLAIMANT +CLAIMANTS +CLAIMED +CLAIMING +CLAIMS +CLAIRE +CLAIRVOYANT +CLAIRVOYANTLY +CLAM +CLAMBER +CLAMBERED +CLAMBERING +CLAMBERS +CLAMOR +CLAMORED +CLAMORING +CLAMOROUS +CLAMORS +CLAMP +CLAMPED +CLAMPING +CLAMPS +CLAMS +CLAN +CLANDESTINE +CLANG +CLANGED +CLANGING +CLANGS +CLANK +CLANNISH +CLAP +CLAPBOARD +CLAPEYRON +CLAPPING +CLAPS +CLARA +CLARE +CLAREMONT +CLARENCE +CLARENDON +CLARIFICATION +CLARIFICATIONS +CLARIFIED +CLARIFIES +CLARIFY +CLARIFYING +CLARINET +CLARITY +CLARK +CLARKE +CLARRIDGE +CLASH +CLASHED +CLASHES +CLASHING +CLASP +CLASPED +CLASPING +CLASPS +CLASS +CLASSED +CLASSES +CLASSIC +CLASSICAL +CLASSICALLY +CLASSICS +CLASSIFIABLE +CLASSIFICATION +CLASSIFICATIONS +CLASSIFIED +CLASSIFIER +CLASSIFIERS +CLASSIFIES +CLASSIFY +CLASSIFYING +CLASSMATE +CLASSMATES +CLASSROOM +CLASSROOMS +CLASSY +CLATTER +CLATTERED +CLATTERING +CLAUDE +CLAUDIA +CLAUDIO +CLAUS +CLAUSE +CLAUSEN +CLAUSES +CLAUSIUS +CLAUSTROPHOBIA +CLAUSTROPHOBIC +CLAW +CLAWED +CLAWING +CLAWS +CLAY +CLAYS +CLAYTON +CLEAN +CLEANED +CLEANER +CLEANERS +CLEANEST +CLEANING +CLEANLINESS +CLEANLY +CLEANNESS +CLEANS +CLEANSE +CLEANSED +CLEANSER +CLEANSERS +CLEANSES +CLEANSING +CLEANUP +CLEAR +CLEARANCE +CLEARANCES +CLEARED +CLEARER +CLEAREST +CLEARING +CLEARINGS +CLEARLY +CLEARNESS +CLEARS +CLEARWATER +CLEAVAGE +CLEAVE +CLEAVED +CLEAVER +CLEAVERS +CLEAVES +CLEAVING +CLEFT +CLEFTS +CLEMENCY +CLEMENS +CLEMENT +CLEMENTE +CLEMSON +CLENCH +CLENCHED +CLENCHES +CLERGY +CLERGYMAN +CLERGYMEN +CLERICAL +CLERK +CLERKED +CLERKING +CLERKS +CLEVELAND +CLEVER +CLEVERER +CLEVEREST +CLEVERLY +CLEVERNESS +CLICHE +CLICHES +CLICK +CLICKED +CLICKING +CLICKS +CLIENT +CLIENTELE +CLIENTS +CLIFF +CLIFFORD +CLIFFS +CLIFTON +CLIMATE +CLIMATES +CLIMATIC +CLIMATICALLY +CLIMATOLOGY +CLIMAX +CLIMAXED +CLIMAXES +CLIMB +CLIMBED +CLIMBER +CLIMBERS +CLIMBING +CLIMBS +CLIME +CLIMES +CLINCH +CLINCHED +CLINCHER +CLINCHES +CLING +CLINGING +CLINGS +CLINIC +CLINICAL +CLINICALLY +CLINICIAN +CLINICS +CLINK +CLINKED +CLINKER +CLINT +CLINTON +CLIO +CLIP +CLIPBOARD +CLIPPED +CLIPPER +CLIPPERS +CLIPPING +CLIPPINGS +CLIPS +CLIQUE +CLIQUES +CLITORIS +CLIVE +CLOAK +CLOAKROOM +CLOAKS +CLOBBER +CLOBBERED +CLOBBERING +CLOBBERS +CLOCK +CLOCKED +CLOCKER +CLOCKERS +CLOCKING +CLOCKINGS +CLOCKS +CLOCKWATCHER +CLOCKWISE +CLOCKWORK +CLOD +CLODS +CLOG +CLOGGED +CLOGGING +CLOGS +CLOISTER +CLOISTERS +CLONE +CLONED +CLONES +CLONING +CLOSE +CLOSED +CLOSELY +CLOSENESS +CLOSENESSES +CLOSER +CLOSERS +CLOSES +CLOSEST +CLOSET +CLOSETED +CLOSETS +CLOSEUP +CLOSING +CLOSURE +CLOSURES +CLOT +CLOTH +CLOTHE +CLOTHED +CLOTHES +CLOTHESHORSE +CLOTHESLINE +CLOTHING +CLOTHO +CLOTTING +CLOTURE +CLOUD +CLOUDBURST +CLOUDED +CLOUDIER +CLOUDIEST +CLOUDINESS +CLOUDING +CLOUDLESS +CLOUDS +CLOUDY +CLOUT +CLOVE +CLOVER +CLOVES +CLOWN +CLOWNING +CLOWNS +CLUB +CLUBBED +CLUBBING +CLUBHOUSE +CLUBROOM +CLUBS +CLUCK +CLUCKED +CLUCKING +CLUCKS +CLUE +CLUES +CLUJ +CLUMP +CLUMPED +CLUMPING +CLUMPS +CLUMSILY +CLUMSINESS +CLUMSY +CLUNG +CLUSTER +CLUSTERED +CLUSTERING +CLUSTERINGS +CLUSTERS +CLUTCH +CLUTCHED +CLUTCHES +CLUTCHING +CLUTTER +CLUTTERED +CLUTTERING +CLUTTERS +CLYDE +CLYTEMNESTRA +COACH +COACHED +COACHER +COACHES +COACHING +COACHMAN +COACHMEN +COAGULATE +COAL +COALESCE +COALESCED +COALESCES +COALESCING +COALITION +COALS +COARSE +COARSELY +COARSEN +COARSENED +COARSENESS +COARSER +COARSEST +COAST +COASTAL +COASTED +COASTER +COASTERS +COASTING +COASTLINE +COASTS +COAT +COATED +COATES +COATING +COATINGS +COATS +COATTAIL +COAUTHOR +COAX +COAXED +COAXER +COAXES +COAXIAL +COAXING +COBALT +COBB +COBBLE +COBBLER +COBBLERS +COBBLESTONE +COBOL +COBOL +COBRA +COBWEB +COBWEBS +COCA +COCAINE +COCHISE +COCHRAN +COCHRANE +COCK +COCKED +COCKING +COCKPIT +COCKROACH +COCKS +COCKTAIL +COCKTAILS +COCKY +COCO +COCOA +COCONUT +COCONUTS +COCOON +COCOONS +COD +CODDINGTON +CODDLE +CODE +CODED +CODEINE +CODER +CODERS +CODES +CODEWORD +CODEWORDS +CODFISH +CODICIL +CODIFICATION +CODIFICATIONS +CODIFIED +CODIFIER +CODIFIERS +CODIFIES +CODIFY +CODIFYING +CODING +CODINGS +CODPIECE +CODY +COED +COEDITOR +COEDUCATION +COEFFICIENT +COEFFICIENTS +COEQUAL +COERCE +COERCED +COERCES +COERCIBLE +COERCING +COERCION +COERCIVE +COEXIST +COEXISTED +COEXISTENCE +COEXISTING +COEXISTS +COFACTOR +COFFEE +COFFEECUP +COFFEEPOT +COFFEES +COFFER +COFFERS +COFFEY +COFFIN +COFFINS +COFFMAN +COG +COGENT +COGENTLY +COGITATE +COGITATED +COGITATES +COGITATING +COGITATION +COGNAC +COGNITION +COGNITIVE +COGNITIVELY +COGNIZANCE +COGNIZANT +COGS +COHABITATION +COHABITATIONS +COHEN +COHERE +COHERED +COHERENCE +COHERENT +COHERENTLY +COHERES +COHERING +COHESION +COHESIVE +COHESIVELY +COHESIVENESS +COHN +COHORT +COIL +COILED +COILING +COILS +COIN +COINAGE +COINCIDE +COINCIDED +COINCIDENCE +COINCIDENCES +COINCIDENT +COINCIDENTAL +COINCIDES +COINCIDING +COINED +COINER +COINING +COINS +COKE +COKES +COLANDER +COLBY +COLD +COLDER +COLDEST +COLDLY +COLDNESS +COLDS +COLE +COLEMAN +COLERIDGE +COLETTE +COLGATE +COLICKY +COLIFORM +COLISEUM +COLLABORATE +COLLABORATED +COLLABORATES +COLLABORATING +COLLABORATION +COLLABORATIONS +COLLABORATIVE +COLLABORATOR +COLLABORATORS +COLLAGEN +COLLAPSE +COLLAPSED +COLLAPSES +COLLAPSIBLE +COLLAPSING +COLLAR +COLLARBONE +COLLARED +COLLARING +COLLARS +COLLATE +COLLATERAL +COLLEAGUE +COLLEAGUES +COLLECT +COLLECTED +COLLECTIBLE +COLLECTING +COLLECTION +COLLECTIONS +COLLECTIVE +COLLECTIVELY +COLLECTIVES +COLLECTOR +COLLECTORS +COLLECTS +COLLEGE +COLLEGES +COLLEGIAN +COLLEGIATE +COLLIDE +COLLIDED +COLLIDES +COLLIDING +COLLIE +COLLIER +COLLIES +COLLINS +COLLISION +COLLISIONS +COLLOIDAL +COLLOQUIA +COLLOQUIAL +COLLOQUIUM +COLLOQUY +COLLUSION +COLOGNE +COLOMBIA +COLOMBIAN +COLOMBIANS +COLOMBO +COLON +COLONEL +COLONELS +COLONIAL +COLONIALLY +COLONIALS +COLONIES +COLONIST +COLONISTS +COLONIZATION +COLONIZE +COLONIZED +COLONIZER +COLONIZERS +COLONIZES +COLONIZING +COLONS +COLONY +COLOR +COLORADO +COLORED +COLORER +COLORERS +COLORFUL +COLORING +COLORINGS +COLORLESS +COLORS +COLOSSAL +COLOSSEUM +COLT +COLTS +COLUMBIA +COLUMBIAN +COLUMBUS +COLUMN +COLUMNIZE +COLUMNIZED +COLUMNIZES +COLUMNIZING +COLUMNS +COMANCHE +COMB +COMBAT +COMBATANT +COMBATANTS +COMBATED +COMBATING +COMBATIVE +COMBATS +COMBED +COMBER +COMBERS +COMBINATION +COMBINATIONAL +COMBINATIONS +COMBINATOR +COMBINATORIAL +COMBINATORIALLY +COMBINATORIC +COMBINATORICS +COMBINATORS +COMBINE +COMBINED +COMBINES +COMBING +COMBINGS +COMBINING +COMBS +COMBUSTIBLE +COMBUSTION +COMDEX +COME +COMEBACK +COMEDIAN +COMEDIANS +COMEDIC +COMEDIES +COMEDY +COMELINESS +COMELY +COMER +COMERS +COMES +COMESTIBLE +COMET +COMETARY +COMETS +COMFORT +COMFORTABILITIES +COMFORTABILITY +COMFORTABLE +COMFORTABLY +COMFORTED +COMFORTER +COMFORTERS +COMFORTING +COMFORTINGLY +COMFORTS +COMIC +COMICAL +COMICALLY +COMICS +COMINFORM +COMING +COMINGS +COMMA +COMMAND +COMMANDANT +COMMANDANTS +COMMANDED +COMMANDEER +COMMANDER +COMMANDERS +COMMANDING +COMMANDINGLY +COMMANDMENT +COMMANDMENTS +COMMANDO +COMMANDS +COMMAS +COMMEMORATE +COMMEMORATED +COMMEMORATES +COMMEMORATING +COMMEMORATION +COMMEMORATIVE +COMMENCE +COMMENCED +COMMENCEMENT +COMMENCEMENTS +COMMENCES +COMMENCING +COMMEND +COMMENDATION +COMMENDATIONS +COMMENDED +COMMENDING +COMMENDS +COMMENSURATE +COMMENT +COMMENTARIES +COMMENTARY +COMMENTATOR +COMMENTATORS +COMMENTED +COMMENTING +COMMENTS +COMMERCE +COMMERCIAL +COMMERCIALLY +COMMERCIALNESS +COMMERCIALS +COMMISSION +COMMISSIONED +COMMISSIONER +COMMISSIONERS +COMMISSIONING +COMMISSIONS +COMMIT +COMMITMENT +COMMITMENTS +COMMITS +COMMITTED +COMMITTEE +COMMITTEEMAN +COMMITTEEMEN +COMMITTEES +COMMITTEEWOMAN +COMMITTEEWOMEN +COMMITTING +COMMODITIES +COMMODITY +COMMODORE +COMMODORES +COMMON +COMMONALITIES +COMMONALITY +COMMONER +COMMONERS +COMMONEST +COMMONLY +COMMONNESS +COMMONPLACE +COMMONPLACES +COMMONS +COMMONWEALTH +COMMONWEALTHS +COMMOTION +COMMUNAL +COMMUNALLY +COMMUNE +COMMUNES +COMMUNICANT +COMMUNICANTS +COMMUNICATE +COMMUNICATED +COMMUNICATES +COMMUNICATING +COMMUNICATION +COMMUNICATIONS +COMMUNICATIVE +COMMUNICATOR +COMMUNICATORS +COMMUNION +COMMUNIST +COMMUNISTS +COMMUNITIES +COMMUNITY +COMMUTATIVE +COMMUTATIVITY +COMMUTE +COMMUTED +COMMUTER +COMMUTERS +COMMUTES +COMMUTING +COMPACT +COMPACTED +COMPACTER +COMPACTEST +COMPACTING +COMPACTION +COMPACTLY +COMPACTNESS +COMPACTOR +COMPACTORS +COMPACTS +COMPANIES +COMPANION +COMPANIONABLE +COMPANIONS +COMPANIONSHIP +COMPANY +COMPARABILITY +COMPARABLE +COMPARABLY +COMPARATIVE +COMPARATIVELY +COMPARATIVES +COMPARATOR +COMPARATORS +COMPARE +COMPARED +COMPARES +COMPARING +COMPARISON +COMPARISONS +COMPARTMENT +COMPARTMENTALIZE +COMPARTMENTALIZED +COMPARTMENTALIZES +COMPARTMENTALIZING +COMPARTMENTED +COMPARTMENTS +COMPASS +COMPASSION +COMPASSIONATE +COMPASSIONATELY +COMPATIBILITIES +COMPATIBILITY +COMPATIBLE +COMPATIBLES +COMPATIBLY +COMPEL +COMPELLED +COMPELLING +COMPELLINGLY +COMPELS +COMPENDIUM +COMPENSATE +COMPENSATED +COMPENSATES +COMPENSATING +COMPENSATION +COMPENSATIONS +COMPENSATORY +COMPETE +COMPETED +COMPETENCE +COMPETENCY +COMPETENT +COMPETENTLY +COMPETES +COMPETING +COMPETITION +COMPETITIONS +COMPETITIVE +COMPETITIVELY +COMPETITOR +COMPETITORS +COMPILATION +COMPILATIONS +COMPILE +COMPILED +COMPILER +COMPILERS +COMPILES +COMPILING +COMPLACENCY +COMPLAIN +COMPLAINED +COMPLAINER +COMPLAINERS +COMPLAINING +COMPLAINS +COMPLAINT +COMPLAINTS +COMPLEMENT +COMPLEMENTARY +COMPLEMENTED +COMPLEMENTER +COMPLEMENTERS +COMPLEMENTING +COMPLEMENTS +COMPLETE +COMPLETED +COMPLETELY +COMPLETENESS +COMPLETES +COMPLETING +COMPLETION +COMPLETIONS +COMPLEX +COMPLEXES +COMPLEXION +COMPLEXITIES +COMPLEXITY +COMPLEXLY +COMPLIANCE +COMPLIANT +COMPLICATE +COMPLICATED +COMPLICATES +COMPLICATING +COMPLICATION +COMPLICATIONS +COMPLICATOR +COMPLICATORS +COMPLICITY +COMPLIED +COMPLIMENT +COMPLIMENTARY +COMPLIMENTED +COMPLIMENTER +COMPLIMENTERS +COMPLIMENTING +COMPLIMENTS +COMPLY +COMPLYING +COMPONENT +COMPONENTRY +COMPONENTS +COMPONENTWISE +COMPOSE +COMPOSED +COMPOSEDLY +COMPOSER +COMPOSERS +COMPOSES +COMPOSING +COMPOSITE +COMPOSITES +COMPOSITION +COMPOSITIONAL +COMPOSITIONS +COMPOST +COMPOSURE +COMPOUND +COMPOUNDED +COMPOUNDING +COMPOUNDS +COMPREHEND +COMPREHENDED +COMPREHENDING +COMPREHENDS +COMPREHENSIBILITY +COMPREHENSIBLE +COMPREHENSION +COMPREHENSIVE +COMPREHENSIVELY +COMPRESS +COMPRESSED +COMPRESSES +COMPRESSIBLE +COMPRESSING +COMPRESSION +COMPRESSIVE +COMPRESSOR +COMPRISE +COMPRISED +COMPRISES +COMPRISING +COMPROMISE +COMPROMISED +COMPROMISER +COMPROMISERS +COMPROMISES +COMPROMISING +COMPROMISINGLY +COMPTON +COMPTROLLER +COMPTROLLERS +COMPULSION +COMPULSIONS +COMPULSIVE +COMPULSORY +COMPUNCTION +COMPUSERVE +COMPUTABILITY +COMPUTABLE +COMPUTATION +COMPUTATIONAL +COMPUTATIONALLY +COMPUTATIONS +COMPUTE +COMPUTED +COMPUTER +COMPUTERIZE +COMPUTERIZED +COMPUTERIZES +COMPUTERIZING +COMPUTERS +COMPUTES +COMPUTING +COMRADE +COMRADELY +COMRADES +COMRADESHIP +CON +CONAKRY +CONANT +CONCATENATE +CONCATENATED +CONCATENATES +CONCATENATING +CONCATENATION +CONCATENATIONS +CONCAVE +CONCEAL +CONCEALED +CONCEALER +CONCEALERS +CONCEALING +CONCEALMENT +CONCEALS +CONCEDE +CONCEDED +CONCEDES +CONCEDING +CONCEIT +CONCEITED +CONCEITS +CONCEIVABLE +CONCEIVABLY +CONCEIVE +CONCEIVED +CONCEIVES +CONCEIVING +CONCENTRATE +CONCENTRATED +CONCENTRATES +CONCENTRATING +CONCENTRATION +CONCENTRATIONS +CONCENTRATOR +CONCENTRATORS +CONCENTRIC +CONCEPT +CONCEPTION +CONCEPTIONS +CONCEPTS +CONCEPTUAL +CONCEPTUALIZATION +CONCEPTUALIZATIONS +CONCEPTUALIZE +CONCEPTUALIZED +CONCEPTUALIZES +CONCEPTUALIZING +CONCEPTUALLY +CONCERN +CONCERNED +CONCERNEDLY +CONCERNING +CONCERNS +CONCERT +CONCERTED +CONCERTMASTER +CONCERTO +CONCERTS +CONCESSION +CONCESSIONS +CONCILIATE +CONCILIATORY +CONCISE +CONCISELY +CONCISENESS +CONCLAVE +CONCLUDE +CONCLUDED +CONCLUDES +CONCLUDING +CONCLUSION +CONCLUSIONS +CONCLUSIVE +CONCLUSIVELY +CONCOCT +CONCOMITANT +CONCORD +CONCORDANT +CONCORDE +CONCORDIA +CONCOURSE +CONCRETE +CONCRETELY +CONCRETENESS +CONCRETES +CONCRETION +CONCUBINE +CONCUR +CONCURRED +CONCURRENCE +CONCURRENCIES +CONCURRENCY +CONCURRENT +CONCURRENTLY +CONCURRING +CONCURS +CONCUSSION +CONDEMN +CONDEMNATION +CONDEMNATIONS +CONDEMNED +CONDEMNER +CONDEMNERS +CONDEMNING +CONDEMNS +CONDENSATION +CONDENSE +CONDENSED +CONDENSER +CONDENSES +CONDENSING +CONDESCEND +CONDESCENDING +CONDITION +CONDITIONAL +CONDITIONALLY +CONDITIONALS +CONDITIONED +CONDITIONER +CONDITIONERS +CONDITIONING +CONDITIONS +CONDOM +CONDONE +CONDONED +CONDONES +CONDONING +CONDUCE +CONDUCIVE +CONDUCIVENESS +CONDUCT +CONDUCTANCE +CONDUCTED +CONDUCTING +CONDUCTION +CONDUCTIVE +CONDUCTIVITY +CONDUCTOR +CONDUCTORS +CONDUCTS +CONDUIT +CONE +CONES +CONESTOGA +CONFECTIONERY +CONFEDERACY +CONFEDERATE +CONFEDERATES +CONFEDERATION +CONFEDERATIONS +CONFER +CONFEREE +CONFERENCE +CONFERENCES +CONFERRED +CONFERRER +CONFERRERS +CONFERRING +CONFERS +CONFESS +CONFESSED +CONFESSES +CONFESSING +CONFESSION +CONFESSIONS +CONFESSOR +CONFESSORS +CONFIDANT +CONFIDANTS +CONFIDE +CONFIDED +CONFIDENCE +CONFIDENCES +CONFIDENT +CONFIDENTIAL +CONFIDENTIALITY +CONFIDENTIALLY +CONFIDENTLY +CONFIDES +CONFIDING +CONFIDINGLY +CONFIGURABLE +CONFIGURATION +CONFIGURATIONS +CONFIGURE +CONFIGURED +CONFIGURES +CONFIGURING +CONFINE +CONFINED +CONFINEMENT +CONFINEMENTS +CONFINER +CONFINES +CONFINING +CONFIRM +CONFIRMATION +CONFIRMATIONS +CONFIRMATORY +CONFIRMED +CONFIRMING +CONFIRMS +CONFISCATE +CONFISCATED +CONFISCATES +CONFISCATING +CONFISCATION +CONFISCATIONS +CONFLAGRATION +CONFLICT +CONFLICTED +CONFLICTING +CONFLICTS +CONFLUENT +CONFOCAL +CONFORM +CONFORMAL +CONFORMANCE +CONFORMED +CONFORMING +CONFORMITY +CONFORMS +CONFOUND +CONFOUNDED +CONFOUNDING +CONFOUNDS +CONFRONT +CONFRONTATION +CONFRONTATIONS +CONFRONTED +CONFRONTER +CONFRONTERS +CONFRONTING +CONFRONTS +CONFUCIAN +CONFUCIANISM +CONFUCIUS +CONFUSE +CONFUSED +CONFUSER +CONFUSERS +CONFUSES +CONFUSING +CONFUSINGLY +CONFUSION +CONFUSIONS +CONGENIAL +CONGENIALLY +CONGENITAL +CONGEST +CONGESTED +CONGESTION +CONGESTIVE +CONGLOMERATE +CONGO +CONGOLESE +CONGRATULATE +CONGRATULATED +CONGRATULATION +CONGRATULATIONS +CONGRATULATORY +CONGREGATE +CONGREGATED +CONGREGATES +CONGREGATING +CONGREGATION +CONGREGATIONS +CONGRESS +CONGRESSES +CONGRESSIONAL +CONGRESSIONALLY +CONGRESSMAN +CONGRESSMEN +CONGRESSWOMAN +CONGRESSWOMEN +CONGRUENCE +CONGRUENT +CONIC +CONIFER +CONIFEROUS +CONJECTURE +CONJECTURED +CONJECTURES +CONJECTURING +CONJOINED +CONJUGAL +CONJUGATE +CONJUNCT +CONJUNCTED +CONJUNCTION +CONJUNCTIONS +CONJUNCTIVE +CONJUNCTIVELY +CONJUNCTS +CONJUNCTURE +CONJURE +CONJURED +CONJURER +CONJURES +CONJURING +CONKLIN +CONLEY +CONNALLY +CONNECT +CONNECTED +CONNECTEDNESS +CONNECTICUT +CONNECTING +CONNECTION +CONNECTIONLESS +CONNECTIONS +CONNECTIVE +CONNECTIVES +CONNECTIVITY +CONNECTOR +CONNECTORS +CONNECTS +CONNELLY +CONNER +CONNIE +CONNIVANCE +CONNIVE +CONNOISSEUR +CONNOISSEURS +CONNORS +CONNOTATION +CONNOTATIVE +CONNOTE +CONNOTED +CONNOTES +CONNOTING +CONNUBIAL +CONQUER +CONQUERABLE +CONQUERED +CONQUERER +CONQUERERS +CONQUERING +CONQUEROR +CONQUERORS +CONQUERS +CONQUEST +CONQUESTS +CONRAD +CONRAIL +CONSCIENCE +CONSCIENCES +CONSCIENTIOUS +CONSCIENTIOUSLY +CONSCIOUS +CONSCIOUSLY +CONSCIOUSNESS +CONSCRIPT +CONSCRIPTION +CONSECRATE +CONSECRATION +CONSECUTIVE +CONSECUTIVELY +CONSENSUAL +CONSENSUS +CONSENT +CONSENTED +CONSENTER +CONSENTERS +CONSENTING +CONSENTS +CONSEQUENCE +CONSEQUENCES +CONSEQUENT +CONSEQUENTIAL +CONSEQUENTIALITIES +CONSEQUENTIALITY +CONSEQUENTLY +CONSEQUENTS +CONSERVATION +CONSERVATIONIST +CONSERVATIONISTS +CONSERVATIONS +CONSERVATISM +CONSERVATIVE +CONSERVATIVELY +CONSERVATIVES +CONSERVATOR +CONSERVE +CONSERVED +CONSERVES +CONSERVING +CONSIDER +CONSIDERABLE +CONSIDERABLY +CONSIDERATE +CONSIDERATELY +CONSIDERATION +CONSIDERATIONS +CONSIDERED +CONSIDERING +CONSIDERS +CONSIGN +CONSIGNED +CONSIGNING +CONSIGNS +CONSIST +CONSISTED +CONSISTENCY +CONSISTENT +CONSISTENTLY +CONSISTING +CONSISTS +CONSOLABLE +CONSOLATION +CONSOLATIONS +CONSOLE +CONSOLED +CONSOLER +CONSOLERS +CONSOLES +CONSOLIDATE +CONSOLIDATED +CONSOLIDATES +CONSOLIDATING +CONSOLIDATION +CONSOLING +CONSOLINGLY +CONSONANT +CONSONANTS +CONSORT +CONSORTED +CONSORTING +CONSORTIUM +CONSORTS +CONSPICUOUS +CONSPICUOUSLY +CONSPIRACIES +CONSPIRACY +CONSPIRATOR +CONSPIRATORS +CONSPIRE +CONSPIRED +CONSPIRES +CONSPIRING +CONSTABLE +CONSTABLES +CONSTANCE +CONSTANCY +CONSTANT +CONSTANTINE +CONSTANTINOPLE +CONSTANTLY +CONSTANTS +CONSTELLATION +CONSTELLATIONS +CONSTERNATION +CONSTITUENCIES +CONSTITUENCY +CONSTITUENT +CONSTITUENTS +CONSTITUTE +CONSTITUTED +CONSTITUTES +CONSTITUTING +CONSTITUTION +CONSTITUTIONAL +CONSTITUTIONALITY +CONSTITUTIONALLY +CONSTITUTIONS +CONSTITUTIVE +CONSTRAIN +CONSTRAINED +CONSTRAINING +CONSTRAINS +CONSTRAINT +CONSTRAINTS +CONSTRICT +CONSTRUCT +CONSTRUCTED +CONSTRUCTIBILITY +CONSTRUCTIBLE +CONSTRUCTING +CONSTRUCTION +CONSTRUCTIONS +CONSTRUCTIVE +CONSTRUCTIVELY +CONSTRUCTOR +CONSTRUCTORS +CONSTRUCTS +CONSTRUE +CONSTRUED +CONSTRUING +CONSUL +CONSULAR +CONSULATE +CONSULATES +CONSULS +CONSULT +CONSULTANT +CONSULTANTS +CONSULTATION +CONSULTATIONS +CONSULTATIVE +CONSULTED +CONSULTING +CONSULTS +CONSUMABLE +CONSUME +CONSUMED +CONSUMER +CONSUMERS +CONSUMES +CONSUMING +CONSUMMATE +CONSUMMATED +CONSUMMATELY +CONSUMMATION +CONSUMPTION +CONSUMPTIONS +CONSUMPTIVE +CONSUMPTIVELY +CONTACT +CONTACTED +CONTACTING +CONTACTS +CONTAGION +CONTAGIOUS +CONTAGIOUSLY +CONTAIN +CONTAINABLE +CONTAINED +CONTAINER +CONTAINERS +CONTAINING +CONTAINMENT +CONTAINMENTS +CONTAINS +CONTAMINATE +CONTAMINATED +CONTAMINATES +CONTAMINATING +CONTAMINATION +CONTEMPLATE +CONTEMPLATED +CONTEMPLATES +CONTEMPLATING +CONTEMPLATION +CONTEMPLATIONS +CONTEMPLATIVE +CONTEMPORARIES +CONTEMPORARINESS +CONTEMPORARY +CONTEMPT +CONTEMPTIBLE +CONTEMPTUOUS +CONTEMPTUOUSLY +CONTEND +CONTENDED +CONTENDER +CONTENDERS +CONTENDING +CONTENDS +CONTENT +CONTENTED +CONTENTING +CONTENTION +CONTENTIONS +CONTENTLY +CONTENTMENT +CONTENTS +CONTEST +CONTESTABLE +CONTESTANT +CONTESTED +CONTESTER +CONTESTERS +CONTESTING +CONTESTS +CONTEXT +CONTEXTS +CONTEXTUAL +CONTEXTUALLY +CONTIGUITY +CONTIGUOUS +CONTIGUOUSLY +CONTINENT +CONTINENTAL +CONTINENTALLY +CONTINENTS +CONTINGENCIES +CONTINGENCY +CONTINGENT +CONTINGENTS +CONTINUAL +CONTINUALLY +CONTINUANCE +CONTINUANCES +CONTINUATION +CONTINUATIONS +CONTINUE +CONTINUED +CONTINUES +CONTINUING +CONTINUITIES +CONTINUITY +CONTINUOUS +CONTINUOUSLY +CONTINUUM +CONTORTIONS +CONTOUR +CONTOURED +CONTOURING +CONTOURS +CONTRABAND +CONTRACEPTION +CONTRACEPTIVE +CONTRACT +CONTRACTED +CONTRACTING +CONTRACTION +CONTRACTIONS +CONTRACTOR +CONTRACTORS +CONTRACTS +CONTRACTUAL +CONTRACTUALLY +CONTRADICT +CONTRADICTED +CONTRADICTING +CONTRADICTION +CONTRADICTIONS +CONTRADICTORY +CONTRADICTS +CONTRADISTINCTION +CONTRADISTINCTIONS +CONTRAPOSITIVE +CONTRAPOSITIVES +CONTRAPTION +CONTRAPTIONS +CONTRARINESS +CONTRARY +CONTRAST +CONTRASTED +CONTRASTER +CONTRASTERS +CONTRASTING +CONTRASTINGLY +CONTRASTS +CONTRIBUTE +CONTRIBUTED +CONTRIBUTES +CONTRIBUTING +CONTRIBUTION +CONTRIBUTIONS +CONTRIBUTOR +CONTRIBUTORILY +CONTRIBUTORS +CONTRIBUTORY +CONTRITE +CONTRITION +CONTRIVANCE +CONTRIVANCES +CONTRIVE +CONTRIVED +CONTRIVER +CONTRIVES +CONTRIVING +CONTROL +CONTROLLABILITY +CONTROLLABLE +CONTROLLABLY +CONTROLLED +CONTROLLER +CONTROLLERS +CONTROLLING +CONTROLS +CONTROVERSIAL +CONTROVERSIES +CONTROVERSY +CONTROVERTIBLE +CONTUMACIOUS +CONTUMACY +CONUNDRUM +CONUNDRUMS +CONVAIR +CONVALESCENT +CONVECT +CONVENE +CONVENED +CONVENES +CONVENIENCE +CONVENIENCES +CONVENIENT +CONVENIENTLY +CONVENING +CONVENT +CONVENTION +CONVENTIONAL +CONVENTIONALLY +CONVENTIONS +CONVENTS +CONVERGE +CONVERGED +CONVERGENCE +CONVERGENT +CONVERGES +CONVERGING +CONVERSANT +CONVERSANTLY +CONVERSATION +CONVERSATIONAL +CONVERSATIONALLY +CONVERSATIONS +CONVERSE +CONVERSED +CONVERSELY +CONVERSES +CONVERSING +CONVERSION +CONVERSIONS +CONVERT +CONVERTED +CONVERTER +CONVERTERS +CONVERTIBILITY +CONVERTIBLE +CONVERTING +CONVERTS +CONVEX +CONVEY +CONVEYANCE +CONVEYANCES +CONVEYED +CONVEYER +CONVEYERS +CONVEYING +CONVEYOR +CONVEYS +CONVICT +CONVICTED +CONVICTING +CONVICTION +CONVICTIONS +CONVICTS +CONVINCE +CONVINCED +CONVINCER +CONVINCERS +CONVINCES +CONVINCING +CONVINCINGLY +CONVIVIAL +CONVOKE +CONVOLUTED +CONVOLUTION +CONVOY +CONVOYED +CONVOYING +CONVOYS +CONVULSE +CONVULSION +CONVULSIONS +CONWAY +COO +COOING +COOK +COOKBOOK +COOKE +COOKED +COOKERY +COOKIE +COOKIES +COOKING +COOKS +COOKY +COOL +COOLED +COOLER +COOLERS +COOLEST +COOLEY +COOLIDGE +COOLIE +COOLIES +COOLING +COOLLY +COOLNESS +COOLS +COON +COONS +COOP +COOPED +COOPER +COOPERATE +COOPERATED +COOPERATES +COOPERATING +COOPERATION +COOPERATIONS +COOPERATIVE +COOPERATIVELY +COOPERATIVES +COOPERATOR +COOPERATORS +COOPERS +COOPS +COORDINATE +COORDINATED +COORDINATES +COORDINATING +COORDINATION +COORDINATIONS +COORDINATOR +COORDINATORS +COORS +COP +COPE +COPED +COPELAND +COPENHAGEN +COPERNICAN +COPERNICUS +COPES +COPIED +COPIER +COPIERS +COPIES +COPING +COPINGS +COPIOUS +COPIOUSLY +COPIOUSNESS +COPLANAR +COPPER +COPPERFIELD +COPPERHEAD +COPPERS +COPRA +COPROCESSOR +COPS +COPSE +COPY +COPYING +COPYRIGHT +COPYRIGHTABLE +COPYRIGHTED +COPYRIGHTS +COPYWRITER +COQUETTE +CORAL +CORBETT +CORCORAN +CORD +CORDED +CORDER +CORDIAL +CORDIALITY +CORDIALLY +CORDS +CORE +CORED +CORER +CORERS +CORES +COREY +CORIANDER +CORING +CORINTH +CORINTHIAN +CORINTHIANIZE +CORINTHIANIZES +CORINTHIANS +CORIOLANUS +CORK +CORKED +CORKER +CORKERS +CORKING +CORKS +CORKSCREW +CORMORANT +CORN +CORNEA +CORNELIA +CORNELIAN +CORNELIUS +CORNELL +CORNER +CORNERED +CORNERS +CORNERSTONE +CORNERSTONES +CORNET +CORNFIELD +CORNFIELDS +CORNING +CORNISH +CORNMEAL +CORNS +CORNSTARCH +CORNUCOPIA +CORNWALL +CORNWALLIS +CORNY +COROLLARIES +COROLLARY +CORONADO +CORONARIES +CORONARY +CORONATION +CORONER +CORONET +CORONETS +COROUTINE +COROUTINES +CORPORAL +CORPORALS +CORPORATE +CORPORATELY +CORPORATION +CORPORATIONS +CORPS +CORPSE +CORPSES +CORPULENT +CORPUS +CORPUSCULAR +CORRAL +CORRECT +CORRECTABLE +CORRECTED +CORRECTING +CORRECTION +CORRECTIONS +CORRECTIVE +CORRECTIVELY +CORRECTIVES +CORRECTLY +CORRECTNESS +CORRECTOR +CORRECTS +CORRELATE +CORRELATED +CORRELATES +CORRELATING +CORRELATION +CORRELATIONS +CORRELATIVE +CORRESPOND +CORRESPONDED +CORRESPONDENCE +CORRESPONDENCES +CORRESPONDENT +CORRESPONDENTS +CORRESPONDING +CORRESPONDINGLY +CORRESPONDS +CORRIDOR +CORRIDORS +CORRIGENDA +CORRIGENDUM +CORRIGIBLE +CORROBORATE +CORROBORATED +CORROBORATES +CORROBORATING +CORROBORATION +CORROBORATIONS +CORROBORATIVE +CORRODE +CORROSION +CORROSIVE +CORRUGATE +CORRUPT +CORRUPTED +CORRUPTER +CORRUPTIBLE +CORRUPTING +CORRUPTION +CORRUPTIONS +CORRUPTS +CORSET +CORSICA +CORSICAN +CORTEX +CORTEZ +CORTICAL +CORTLAND +CORVALLIS +CORVUS +CORYDORAS +COSGROVE +COSINE +COSINES +COSMETIC +COSMETICS +COSMIC +COSMOLOGY +COSMOPOLITAN +COSMOS +COSPONSOR +COSSACK +COST +COSTA +COSTED +COSTELLO +COSTING +COSTLY +COSTS +COSTUME +COSTUMED +COSTUMER +COSTUMES +COSTUMING +COSY +COT +COTANGENT +COTILLION +COTS +COTTAGE +COTTAGER +COTTAGES +COTTON +COTTONMOUTH +COTTONS +COTTONSEED +COTTONWOOD +COTTRELL +COTYLEDON +COTYLEDONS +COUCH +COUCHED +COUCHES +COUCHING +COUGAR +COUGH +COUGHED +COUGHING +COUGHS +COULD +COULOMB +COULTER +COUNCIL +COUNCILLOR +COUNCILLORS +COUNCILMAN +COUNCILMEN +COUNCILS +COUNCILWOMAN +COUNCILWOMEN +COUNSEL +COUNSELED +COUNSELING +COUNSELLED +COUNSELLING +COUNSELLOR +COUNSELLORS +COUNSELOR +COUNSELORS +COUNSELS +COUNT +COUNTABLE +COUNTABLY +COUNTED +COUNTENANCE +COUNTER +COUNTERACT +COUNTERACTED +COUNTERACTING +COUNTERACTIVE +COUNTERARGUMENT +COUNTERATTACK +COUNTERBALANCE +COUNTERCLOCKWISE +COUNTERED +COUNTEREXAMPLE +COUNTEREXAMPLES +COUNTERFEIT +COUNTERFEITED +COUNTERFEITER +COUNTERFEITING +COUNTERFLOW +COUNTERING +COUNTERINTUITIVE +COUNTERMAN +COUNTERMEASURE +COUNTERMEASURES +COUNTERMEN +COUNTERPART +COUNTERPARTS +COUNTERPOINT +COUNTERPOINTING +COUNTERPOISE +COUNTERPRODUCTIVE +COUNTERPROPOSAL +COUNTERREVOLUTION +COUNTERS +COUNTERSINK +COUNTERSUNK +COUNTESS +COUNTIES +COUNTING +COUNTLESS +COUNTRIES +COUNTRY +COUNTRYMAN +COUNTRYMEN +COUNTRYSIDE +COUNTRYWIDE +COUNTS +COUNTY +COUNTYWIDE +COUPLE +COUPLED +COUPLER +COUPLERS +COUPLES +COUPLING +COUPLINGS +COUPON +COUPONS +COURAGE +COURAGEOUS +COURAGEOUSLY +COURIER +COURIERS +COURSE +COURSED +COURSER +COURSES +COURSING +COURT +COURTED +COURTEOUS +COURTEOUSLY +COURTER +COURTERS +COURTESAN +COURTESIES +COURTESY +COURTHOUSE +COURTHOUSES +COURTIER +COURTIERS +COURTING +COURTLY +COURTNEY +COURTROOM +COURTROOMS +COURTS +COURTSHIP +COURTYARD +COURTYARDS +COUSIN +COUSINS +COVALENT +COVARIANT +COVE +COVENANT +COVENANTS +COVENT +COVENTRY +COVER +COVERABLE +COVERAGE +COVERED +COVERING +COVERINGS +COVERLET +COVERLETS +COVERS +COVERT +COVERTLY +COVES +COVET +COVETED +COVETING +COVETOUS +COVETOUSNESS +COVETS +COW +COWAN +COWARD +COWARDICE +COWARDLY +COWBOY +COWBOYS +COWED +COWER +COWERED +COWERER +COWERERS +COWERING +COWERINGLY +COWERS +COWHERD +COWHIDE +COWING +COWL +COWLICK +COWLING +COWLS +COWORKER +COWS +COWSLIP +COWSLIPS +COYOTE +COYOTES +COYPU +COZIER +COZINESS +COZY +CRAB +CRABAPPLE +CRABS +CRACK +CRACKED +CRACKER +CRACKERS +CRACKING +CRACKLE +CRACKLED +CRACKLES +CRACKLING +CRACKPOT +CRACKS +CRADLE +CRADLED +CRADLES +CRAFT +CRAFTED +CRAFTER +CRAFTINESS +CRAFTING +CRAFTS +CRAFTSMAN +CRAFTSMEN +CRAFTSPEOPLE +CRAFTSPERSON +CRAFTY +CRAG +CRAGGY +CRAGS +CRAIG +CRAM +CRAMER +CRAMMING +CRAMP +CRAMPS +CRAMS +CRANBERRIES +CRANBERRY +CRANDALL +CRANE +CRANES +CRANFORD +CRANIA +CRANIUM +CRANK +CRANKCASE +CRANKED +CRANKIER +CRANKIEST +CRANKILY +CRANKING +CRANKS +CRANKSHAFT +CRANKY +CRANNY +CRANSTON +CRASH +CRASHED +CRASHER +CRASHERS +CRASHES +CRASHING +CRASS +CRATE +CRATER +CRATERS +CRATES +CRAVAT +CRAVATS +CRAVE +CRAVED +CRAVEN +CRAVES +CRAVING +CRAWFORD +CRAWL +CRAWLED +CRAWLER +CRAWLERS +CRAWLING +CRAWLS +CRAY +CRAYON +CRAYS +CRAZE +CRAZED +CRAZES +CRAZIER +CRAZIEST +CRAZILY +CRAZINESS +CRAZING +CRAZY +CREAK +CREAKED +CREAKING +CREAKS +CREAKY +CREAM +CREAMED +CREAMER +CREAMERS +CREAMERY +CREAMING +CREAMS +CREAMY +CREASE +CREASED +CREASES +CREASING +CREATE +CREATED +CREATES +CREATING +CREATION +CREATIONS +CREATIVE +CREATIVELY +CREATIVENESS +CREATIVITY +CREATOR +CREATORS +CREATURE +CREATURES +CREDENCE +CREDENTIAL +CREDIBILITY +CREDIBLE +CREDIBLY +CREDIT +CREDITABLE +CREDITABLY +CREDITED +CREDITING +CREDITOR +CREDITORS +CREDITS +CREDULITY +CREDULOUS +CREDULOUSNESS +CREE +CREED +CREEDS +CREEK +CREEKS +CREEP +CREEPER +CREEPERS +CREEPING +CREEPS +CREEPY +CREIGHTON +CREMATE +CREMATED +CREMATES +CREMATING +CREMATION +CREMATIONS +CREMATORY +CREOLE +CREON +CREPE +CREPT +CRESCENT +CRESCENTS +CREST +CRESTED +CRESTFALLEN +CRESTS +CRESTVIEW +CRETACEOUS +CRETACEOUSLY +CRETAN +CRETE +CRETIN +CREVICE +CREVICES +CREW +CREWCUT +CREWED +CREWING +CREWS +CRIB +CRIBS +CRICKET +CRICKETS +CRIED +CRIER +CRIERS +CRIES +CRIME +CRIMEA +CRIMEAN +CRIMES +CRIMINAL +CRIMINALLY +CRIMINALS +CRIMINATE +CRIMSON +CRIMSONING +CRINGE +CRINGED +CRINGES +CRINGING +CRIPPLE +CRIPPLED +CRIPPLES +CRIPPLING +CRISES +CRISIS +CRISP +CRISPIN +CRISPLY +CRISPNESS +CRISSCROSS +CRITERIA +CRITERION +CRITIC +CRITICAL +CRITICALLY +CRITICISM +CRITICISMS +CRITICIZE +CRITICIZED +CRITICIZES +CRITICIZING +CRITICS +CRITIQUE +CRITIQUES +CRITIQUING +CRITTER +CROAK +CROAKED +CROAKING +CROAKS +CROATIA +CROATIAN +CROCHET +CROCHETS +CROCK +CROCKERY +CROCKETT +CROCKS +CROCODILE +CROCUS +CROFT +CROIX +CROMWELL +CROMWELLIAN +CROOK +CROOKED +CROOKS +CROP +CROPPED +CROPPER +CROPPERS +CROPPING +CROPS +CROSBY +CROSS +CROSSABLE +CROSSBAR +CROSSBARS +CROSSED +CROSSER +CROSSERS +CROSSES +CROSSING +CROSSINGS +CROSSLY +CROSSOVER +CROSSOVERS +CROSSPOINT +CROSSROAD +CROSSTALK +CROSSWALK +CROSSWORD +CROSSWORDS +CROTCH +CROTCHETY +CROUCH +CROUCHED +CROUCHING +CROW +CROWD +CROWDED +CROWDER +CROWDING +CROWDS +CROWED +CROWING +CROWLEY +CROWN +CROWNED +CROWNING +CROWNS +CROWS +CROYDON +CRUCIAL +CRUCIALLY +CRUCIBLE +CRUCIFIED +CRUCIFIES +CRUCIFIX +CRUCIFIXION +CRUCIFY +CRUCIFYING +CRUD +CRUDDY +CRUDE +CRUDELY +CRUDENESS +CRUDER +CRUDEST +CRUEL +CRUELER +CRUELEST +CRUELLY +CRUELTY +CRUICKSHANK +CRUISE +CRUISER +CRUISERS +CRUISES +CRUISING +CRUMB +CRUMBLE +CRUMBLED +CRUMBLES +CRUMBLING +CRUMBLY +CRUMBS +CRUMMY +CRUMPLE +CRUMPLED +CRUMPLES +CRUMPLING +CRUNCH +CRUNCHED +CRUNCHES +CRUNCHIER +CRUNCHIEST +CRUNCHING +CRUNCHY +CRUSADE +CRUSADER +CRUSADERS +CRUSADES +CRUSADING +CRUSH +CRUSHABLE +CRUSHED +CRUSHER +CRUSHERS +CRUSHES +CRUSHING +CRUSHINGLY +CRUSOE +CRUST +CRUSTACEAN +CRUSTACEANS +CRUSTS +CRUTCH +CRUTCHES +CRUX +CRUXES +CRUZ +CRY +CRYING +CRYOGENIC +CRYPT +CRYPTANALYSIS +CRYPTANALYST +CRYPTANALYTIC +CRYPTIC +CRYPTOGRAM +CRYPTOGRAPHER +CRYPTOGRAPHIC +CRYPTOGRAPHICALLY +CRYPTOGRAPHY +CRYPTOLOGIST +CRYPTOLOGY +CRYSTAL +CRYSTALLINE +CRYSTALLIZE +CRYSTALLIZED +CRYSTALLIZES +CRYSTALLIZING +CRYSTALS +CUB +CUBA +CUBAN +CUBANIZE +CUBANIZES +CUBANS +CUBBYHOLE +CUBE +CUBED +CUBES +CUBIC +CUBS +CUCKOO +CUCKOOS +CUCUMBER +CUCUMBERS +CUDDLE +CUDDLED +CUDDLY +CUDGEL +CUDGELS +CUE +CUED +CUES +CUFF +CUFFLINK +CUFFS +CUISINE +CULBERTSON +CULINARY +CULL +CULLED +CULLER +CULLING +CULLS +CULMINATE +CULMINATED +CULMINATES +CULMINATING +CULMINATION +CULPA +CULPABLE +CULPRIT +CULPRITS +CULT +CULTIVABLE +CULTIVATE +CULTIVATED +CULTIVATES +CULTIVATING +CULTIVATION +CULTIVATIONS +CULTIVATOR +CULTIVATORS +CULTS +CULTURAL +CULTURALLY +CULTURE +CULTURED +CULTURES +CULTURING +CULVER +CULVERS +CUMBERLAND +CUMBERSOME +CUMMINGS +CUMMINS +CUMULATIVE +CUMULATIVELY +CUNARD +CUNNILINGUS +CUNNING +CUNNINGHAM +CUNNINGLY +CUP +CUPBOARD +CUPBOARDS +CUPERTINO +CUPFUL +CUPID +CUPPED +CUPPING +CUPS +CURABLE +CURABLY +CURB +CURBING +CURBS +CURD +CURDLE +CURE +CURED +CURES +CURFEW +CURFEWS +CURING +CURIOSITIES +CURIOSITY +CURIOUS +CURIOUSER +CURIOUSEST +CURIOUSLY +CURL +CURLED +CURLER +CURLERS +CURLICUE +CURLING +CURLS +CURLY +CURRAN +CURRANT +CURRANTS +CURRENCIES +CURRENCY +CURRENT +CURRENTLY +CURRENTNESS +CURRENTS +CURRICULAR +CURRICULUM +CURRICULUMS +CURRIED +CURRIES +CURRY +CURRYING +CURS +CURSE +CURSED +CURSES +CURSING +CURSIVE +CURSOR +CURSORILY +CURSORS +CURSORY +CURT +CURTAIL +CURTAILED +CURTAILS +CURTAIN +CURTAINED +CURTAINS +CURTATE +CURTIS +CURTLY +CURTNESS +CURTSIES +CURTSY +CURVACEOUS +CURVATURE +CURVE +CURVED +CURVES +CURVILINEAR +CURVING +CUSHING +CUSHION +CUSHIONED +CUSHIONING +CUSHIONS +CUSHMAN +CUSP +CUSPS +CUSTARD +CUSTER +CUSTODIAL +CUSTODIAN +CUSTODIANS +CUSTODY +CUSTOM +CUSTOMARILY +CUSTOMARY +CUSTOMER +CUSTOMERS +CUSTOMIZABLE +CUSTOMIZATION +CUSTOMIZATIONS +CUSTOMIZE +CUSTOMIZED +CUSTOMIZER +CUSTOMIZERS +CUSTOMIZES +CUSTOMIZING +CUSTOMS +CUT +CUTANEOUS +CUTBACK +CUTE +CUTEST +CUTLASS +CUTLET +CUTOFF +CUTOUT +CUTOVER +CUTS +CUTTER +CUTTERS +CUTTHROAT +CUTTING +CUTTINGLY +CUTTINGS +CUTTLEFISH +CUVIER +CUZCO +CYANAMID +CYANIDE +CYBERNETIC +CYBERNETICS +CYBERSPACE +CYCLADES +CYCLE +CYCLED +CYCLES +CYCLIC +CYCLICALLY +CYCLING +CYCLOID +CYCLOIDAL +CYCLOIDS +CYCLONE +CYCLONES +CYCLOPS +CYCLOTRON +CYCLOTRONS +CYGNUS +CYLINDER +CYLINDERS +CYLINDRICAL +CYMBAL +CYMBALS +CYNIC +CYNICAL +CYNICALLY +CYNTHIA +CYPRESS +CYPRIAN +CYPRIOT +CYPRUS +CYRIL +CYRILLIC +CYRUS +CYST +CYSTS +CYTOLOGY +CYTOPLASM +CZAR +CZECH +CZECHIZATION +CZECHIZATIONS +CZECHOSLOVAKIA +CZERNIAK +DABBLE +DABBLED +DABBLER +DABBLES +DABBLING +DACCA +DACRON +DACTYL +DACTYLIC +DAD +DADA +DADAISM +DADAIST +DADAISTIC +DADDY +DADE +DADS +DAEDALUS +DAEMON +DAEMONS +DAFFODIL +DAFFODILS +DAGGER +DAHL +DAHLIA +DAHOMEY +DAILEY +DAILIES +DAILY +DAIMLER +DAINTILY +DAINTINESS +DAINTY +DAIRY +DAIRYLEA +DAISIES +DAISY +DAKAR +DAKOTA +DALE +DALES +DALEY +DALHOUSIE +DALI +DALLAS +DALTON +DALY +DALZELL +DAM +DAMAGE +DAMAGED +DAMAGER +DAMAGERS +DAMAGES +DAMAGING +DAMASCUS +DAMASK +DAME +DAMMING +DAMN +DAMNATION +DAMNED +DAMNING +DAMNS +DAMOCLES +DAMON +DAMP +DAMPEN +DAMPENS +DAMPER +DAMPING +DAMPNESS +DAMS +DAMSEL +DAMSELS +DAN +DANA +DANBURY +DANCE +DANCED +DANCER +DANCERS +DANCES +DANCING +DANDELION +DANDELIONS +DANDY +DANE +DANES +DANGER +DANGEROUS +DANGEROUSLY +DANGERS +DANGLE +DANGLED +DANGLES +DANGLING +DANIEL +DANIELS +DANIELSON +DANISH +DANIZATION +DANIZATIONS +DANIZE +DANIZES +DANNY +DANTE +DANUBE +DANUBIAN +DANVILLE +DANZIG +DAPHNE +DAR +DARE +DARED +DARER +DARERS +DARES +DARESAY +DARING +DARINGLY +DARIUS +DARK +DARKEN +DARKER +DARKEST +DARKLY +DARKNESS +DARKROOM +DARLENE +DARLING +DARLINGS +DARLINGTON +DARN +DARNED +DARNER +DARNING +DARNS +DARPA +DARRELL +DARROW +DARRY +DART +DARTED +DARTER +DARTING +DARTMOUTH +DARTS +DARWIN +DARWINIAN +DARWINISM +DARWINISTIC +DARWINIZE +DARWINIZES +DASH +DASHBOARD +DASHED +DASHER +DASHERS +DASHES +DASHING +DASHINGLY +DATA +DATABASE +DATABASES +DATAGRAM +DATAGRAMS +DATAMATION +DATAMEDIA +DATE +DATED +DATELINE +DATER +DATES +DATING +DATIVE +DATSUN +DATUM +DAUGHERTY +DAUGHTER +DAUGHTERLY +DAUGHTERS +DAUNT +DAUNTED +DAUNTLESS +DAVE +DAVID +DAVIDSON +DAVIE +DAVIES +DAVINICH +DAVIS +DAVISON +DAVY +DAWN +DAWNED +DAWNING +DAWNS +DAWSON +DAY +DAYBREAK +DAYDREAM +DAYDREAMING +DAYDREAMS +DAYLIGHT +DAYLIGHTS +DAYS +DAYTIME +DAYTON +DAYTONA +DAZE +DAZED +DAZZLE +DAZZLED +DAZZLER +DAZZLES +DAZZLING +DAZZLINGLY +DEACON +DEACONS +DEACTIVATE +DEAD +DEADEN +DEADLINE +DEADLINES +DEADLOCK +DEADLOCKED +DEADLOCKING +DEADLOCKS +DEADLY +DEADNESS +DEADWOOD +DEAF +DEAFEN +DEAFER +DEAFEST +DEAFNESS +DEAL +DEALER +DEALERS +DEALERSHIP +DEALING +DEALINGS +DEALLOCATE +DEALLOCATED +DEALLOCATING +DEALLOCATION +DEALLOCATIONS +DEALS +DEALT +DEAN +DEANE +DEANNA +DEANS +DEAR +DEARBORN +DEARER +DEAREST +DEARLY +DEARNESS +DEARTH +DEARTHS +DEATH +DEATHBED +DEATHLY +DEATHS +DEBACLE +DEBAR +DEBASE +DEBATABLE +DEBATE +DEBATED +DEBATER +DEBATERS +DEBATES +DEBATING +DEBAUCH +DEBAUCHERY +DEBBIE +DEBBY +DEBILITATE +DEBILITATED +DEBILITATES +DEBILITATING +DEBILITY +DEBIT +DEBITED +DEBORAH +DEBRA +DEBRIEF +DEBRIS +DEBT +DEBTOR +DEBTS +DEBUG +DEBUGGED +DEBUGGER +DEBUGGERS +DEBUGGING +DEBUGS +DEBUNK +DEBUSSY +DEBUTANTE +DEC +DECADE +DECADENCE +DECADENT +DECADENTLY +DECADES +DECAL +DECATHLON +DECATUR +DECAY +DECAYED +DECAYING +DECAYS +DECCA +DECEASE +DECEASED +DECEASES +DECEASING +DECEDENT +DECEIT +DECEITFUL +DECEITFULLY +DECEITFULNESS +DECEIVE +DECEIVED +DECEIVER +DECEIVERS +DECEIVES +DECEIVING +DECELERATE +DECELERATED +DECELERATES +DECELERATING +DECELERATION +DECEMBER +DECEMBERS +DECENCIES +DECENCY +DECENNIAL +DECENT +DECENTLY +DECENTRALIZATION +DECENTRALIZED +DECEPTION +DECEPTIONS +DECEPTIVE +DECEPTIVELY +DECERTIFY +DECIBEL +DECIDABILITY +DECIDABLE +DECIDE +DECIDED +DECIDEDLY +DECIDES +DECIDING +DECIDUOUS +DECIMAL +DECIMALS +DECIMATE +DECIMATED +DECIMATES +DECIMATING +DECIMATION +DECIPHER +DECIPHERED +DECIPHERER +DECIPHERING +DECIPHERS +DECISION +DECISIONS +DECISIVE +DECISIVELY +DECISIVENESS +DECK +DECKED +DECKER +DECKING +DECKINGS +DECKS +DECLARATION +DECLARATIONS +DECLARATIVE +DECLARATIVELY +DECLARATIVES +DECLARATOR +DECLARATORY +DECLARE +DECLARED +DECLARER +DECLARERS +DECLARES +DECLARING +DECLASSIFY +DECLINATION +DECLINATIONS +DECLINE +DECLINED +DECLINER +DECLINERS +DECLINES +DECLINING +DECNET +DECODE +DECODED +DECODER +DECODERS +DECODES +DECODING +DECODINGS +DECOLLETAGE +DECOLLIMATE +DECOMPILE +DECOMPOSABILITY +DECOMPOSABLE +DECOMPOSE +DECOMPOSED +DECOMPOSES +DECOMPOSING +DECOMPOSITION +DECOMPOSITIONS +DECOMPRESS +DECOMPRESSION +DECORATE +DECORATED +DECORATES +DECORATING +DECORATION +DECORATIONS +DECORATIVE +DECORUM +DECOUPLE +DECOUPLED +DECOUPLES +DECOUPLING +DECOY +DECOYS +DECREASE +DECREASED +DECREASES +DECREASING +DECREASINGLY +DECREE +DECREED +DECREEING +DECREES +DECREMENT +DECREMENTED +DECREMENTING +DECREMENTS +DECRYPT +DECRYPTED +DECRYPTING +DECRYPTION +DECRYPTS +DECSTATION +DECSYSTEM +DECTAPE +DEDICATE +DEDICATED +DEDICATES +DEDICATING +DEDICATION +DEDUCE +DEDUCED +DEDUCER +DEDUCES +DEDUCIBLE +DEDUCING +DEDUCT +DEDUCTED +DEDUCTIBLE +DEDUCTING +DEDUCTION +DEDUCTIONS +DEDUCTIVE +DEE +DEED +DEEDED +DEEDING +DEEDS +DEEM +DEEMED +DEEMING +DEEMPHASIZE +DEEMPHASIZED +DEEMPHASIZES +DEEMPHASIZING +DEEMS +DEEP +DEEPEN +DEEPENED +DEEPENING +DEEPENS +DEEPER +DEEPEST +DEEPLY +DEEPS +DEER +DEERE +DEFACE +DEFAULT +DEFAULTED +DEFAULTER +DEFAULTING +DEFAULTS +DEFEAT +DEFEATED +DEFEATING +DEFEATS +DEFECATE +DEFECT +DEFECTED +DEFECTING +DEFECTION +DEFECTIONS +DEFECTIVE +DEFECTS +DEFEND +DEFENDANT +DEFENDANTS +DEFENDED +DEFENDER +DEFENDERS +DEFENDING +DEFENDS +DEFENESTRATE +DEFENESTRATED +DEFENESTRATES +DEFENESTRATING +DEFENESTRATION +DEFENSE +DEFENSELESS +DEFENSES +DEFENSIBLE +DEFENSIVE +DEFER +DEFERENCE +DEFERMENT +DEFERMENTS +DEFERRABLE +DEFERRED +DEFERRER +DEFERRERS +DEFERRING +DEFERS +DEFIANCE +DEFIANT +DEFIANTLY +DEFICIENCIES +DEFICIENCY +DEFICIENT +DEFICIT +DEFICITS +DEFIED +DEFIES +DEFILE +DEFILING +DEFINABLE +DEFINE +DEFINED +DEFINER +DEFINES +DEFINING +DEFINITE +DEFINITELY +DEFINITENESS +DEFINITION +DEFINITIONAL +DEFINITIONS +DEFINITIVE +DEFLATE +DEFLATER +DEFLECT +DEFOCUS +DEFOE +DEFOREST +DEFORESTATION +DEFORM +DEFORMATION +DEFORMATIONS +DEFORMED +DEFORMITIES +DEFORMITY +DEFRAUD +DEFRAY +DEFROST +DEFTLY +DEFUNCT +DEFY +DEFYING +DEGENERACY +DEGENERATE +DEGENERATED +DEGENERATES +DEGENERATING +DEGENERATION +DEGENERATIVE +DEGRADABLE +DEGRADATION +DEGRADATIONS +DEGRADE +DEGRADED +DEGRADES +DEGRADING +DEGREE +DEGREES +DEHUMIDIFY +DEHYDRATE +DEIFY +DEIGN +DEIGNED +DEIGNING +DEIGNS +DEIMOS +DEIRDRE +DEIRDRES +DEITIES +DEITY +DEJECTED +DEJECTEDLY +DEKALB +DEKASTERE +DEL +DELANEY +DELANO +DELAWARE +DELAY +DELAYED +DELAYING +DELAYS +DELEGATE +DELEGATED +DELEGATES +DELEGATING +DELEGATION +DELEGATIONS +DELETE +DELETED +DELETER +DELETERIOUS +DELETES +DELETING +DELETION +DELETIONS +DELFT +DELHI +DELIA +DELIBERATE +DELIBERATED +DELIBERATELY +DELIBERATENESS +DELIBERATES +DELIBERATING +DELIBERATION +DELIBERATIONS +DELIBERATIVE +DELIBERATOR +DELIBERATORS +DELICACIES +DELICACY +DELICATE +DELICATELY +DELICATESSEN +DELICIOUS +DELICIOUSLY +DELIGHT +DELIGHTED +DELIGHTEDLY +DELIGHTFUL +DELIGHTFULLY +DELIGHTING +DELIGHTS +DELILAH +DELIMIT +DELIMITATION +DELIMITED +DELIMITER +DELIMITERS +DELIMITING +DELIMITS +DELINEAMENT +DELINEATE +DELINEATED +DELINEATES +DELINEATING +DELINEATION +DELINQUENCY +DELINQUENT +DELIRIOUS +DELIRIOUSLY +DELIRIUM +DELIVER +DELIVERABLE +DELIVERABLES +DELIVERANCE +DELIVERED +DELIVERER +DELIVERERS +DELIVERIES +DELIVERING +DELIVERS +DELIVERY +DELL +DELLA +DELLS +DELLWOOD +DELMARVA +DELPHI +DELPHIC +DELPHICALLY +DELPHINUS +DELTA +DELTAS +DELUDE +DELUDED +DELUDES +DELUDING +DELUGE +DELUGED +DELUGES +DELUSION +DELUSIONS +DELUXE +DELVE +DELVES +DELVING +DEMAGNIFY +DEMAGOGUE +DEMAND +DEMANDED +DEMANDER +DEMANDING +DEMANDINGLY +DEMANDS +DEMARCATE +DEMEANOR +DEMENTED +DEMERIT +DEMETER +DEMIGOD +DEMISE +DEMO +DEMOCRACIES +DEMOCRACY +DEMOCRAT +DEMOCRATIC +DEMOCRATICALLY +DEMOCRATS +DEMODULATE +DEMODULATOR +DEMOGRAPHIC +DEMOLISH +DEMOLISHED +DEMOLISHES +DEMOLITION +DEMON +DEMONIAC +DEMONIC +DEMONS +DEMONSTRABLE +DEMONSTRATE +DEMONSTRATED +DEMONSTRATES +DEMONSTRATING +DEMONSTRATION +DEMONSTRATIONS +DEMONSTRATIVE +DEMONSTRATIVELY +DEMONSTRATOR +DEMONSTRATORS +DEMORALIZE +DEMORALIZED +DEMORALIZES +DEMORALIZING +DEMORGAN +DEMOTE +DEMOUNTABLE +DEMPSEY +DEMULTIPLEX +DEMULTIPLEXED +DEMULTIPLEXER +DEMULTIPLEXERS +DEMULTIPLEXING +DEMUR +DEMYTHOLOGIZE +DEN +DENATURE +DENEB +DENEBOLA +DENEEN +DENIABLE +DENIAL +DENIALS +DENIED +DENIER +DENIES +DENIGRATE +DENIGRATED +DENIGRATES +DENIGRATING +DENIZEN +DENMARK +DENNIS +DENNY +DENOMINATE +DENOMINATION +DENOMINATIONS +DENOMINATOR +DENOMINATORS +DENOTABLE +DENOTATION +DENOTATIONAL +DENOTATIONALLY +DENOTATIONS +DENOTATIVE +DENOTE +DENOTED +DENOTES +DENOTING +DENOUNCE +DENOUNCED +DENOUNCES +DENOUNCING +DENS +DENSE +DENSELY +DENSENESS +DENSER +DENSEST +DENSITIES +DENSITY +DENT +DENTAL +DENTALLY +DENTED +DENTING +DENTIST +DENTISTRY +DENTISTS +DENTON +DENTS +DENTURE +DENUDE +DENUMERABLE +DENUNCIATE +DENUNCIATION +DENVER +DENY +DENYING +DEODORANT +DEOXYRIBONUCLEIC +DEPART +DEPARTED +DEPARTING +DEPARTMENT +DEPARTMENTAL +DEPARTMENTS +DEPARTS +DEPARTURE +DEPARTURES +DEPEND +DEPENDABILITY +DEPENDABLE +DEPENDABLY +DEPENDED +DEPENDENCE +DEPENDENCIES +DEPENDENCY +DEPENDENT +DEPENDENTLY +DEPENDENTS +DEPENDING +DEPENDS +DEPICT +DEPICTED +DEPICTING +DEPICTS +DEPLETE +DEPLETED +DEPLETES +DEPLETING +DEPLETION +DEPLETIONS +DEPLORABLE +DEPLORE +DEPLORED +DEPLORES +DEPLORING +DEPLOY +DEPLOYED +DEPLOYING +DEPLOYMENT +DEPLOYMENTS +DEPLOYS +DEPORT +DEPORTATION +DEPORTEE +DEPORTMENT +DEPOSE +DEPOSED +DEPOSES +DEPOSIT +DEPOSITARY +DEPOSITED +DEPOSITING +DEPOSITION +DEPOSITIONS +DEPOSITOR +DEPOSITORS +DEPOSITORY +DEPOSITS +DEPOT +DEPOTS +DEPRAVE +DEPRAVED +DEPRAVITY +DEPRECATE +DEPRECIATE +DEPRECIATED +DEPRECIATES +DEPRECIATION +DEPRESS +DEPRESSED +DEPRESSES +DEPRESSING +DEPRESSION +DEPRESSIONS +DEPRIVATION +DEPRIVATIONS +DEPRIVE +DEPRIVED +DEPRIVES +DEPRIVING +DEPTH +DEPTHS +DEPUTIES +DEPUTY +DEQUEUE +DEQUEUED +DEQUEUES +DEQUEUING +DERAIL +DERAILED +DERAILING +DERAILS +DERBY +DERBYSHIRE +DEREFERENCE +DEREGULATE +DEREGULATED +DEREK +DERIDE +DERISION +DERIVABLE +DERIVATION +DERIVATIONS +DERIVATIVE +DERIVATIVES +DERIVE +DERIVED +DERIVES +DERIVING +DEROGATORY +DERRICK +DERRIERE +DERVISH +DES +DESCARTES +DESCEND +DESCENDANT +DESCENDANTS +DESCENDED +DESCENDENT +DESCENDER +DESCENDERS +DESCENDING +DESCENDS +DESCENT +DESCENTS +DESCRIBABLE +DESCRIBE +DESCRIBED +DESCRIBER +DESCRIBES +DESCRIBING +DESCRIPTION +DESCRIPTIONS +DESCRIPTIVE +DESCRIPTIVELY +DESCRIPTIVES +DESCRIPTOR +DESCRIPTORS +DESCRY +DESECRATE +DESEGREGATE +DESERT +DESERTED +DESERTER +DESERTERS +DESERTING +DESERTION +DESERTIONS +DESERTS +DESERVE +DESERVED +DESERVES +DESERVING +DESERVINGLY +DESERVINGS +DESIDERATA +DESIDERATUM +DESIGN +DESIGNATE +DESIGNATED +DESIGNATES +DESIGNATING +DESIGNATION +DESIGNATIONS +DESIGNATOR +DESIGNATORS +DESIGNED +DESIGNER +DESIGNERS +DESIGNING +DESIGNS +DESIRABILITY +DESIRABLE +DESIRABLY +DESIRE +DESIRED +DESIRES +DESIRING +DESIROUS +DESIST +DESK +DESKS +DESKTOP +DESMOND +DESOLATE +DESOLATELY +DESOLATION +DESOLATIONS +DESPAIR +DESPAIRED +DESPAIRING +DESPAIRINGLY +DESPAIRS +DESPATCH +DESPATCHED +DESPERADO +DESPERATE +DESPERATELY +DESPERATION +DESPICABLE +DESPISE +DESPISED +DESPISES +DESPISING +DESPITE +DESPOIL +DESPONDENT +DESPOT +DESPOTIC +DESPOTISM +DESPOTS +DESSERT +DESSERTS +DESSICATE +DESTABILIZE +DESTINATION +DESTINATIONS +DESTINE +DESTINED +DESTINIES +DESTINY +DESTITUTE +DESTITUTION +DESTROY +DESTROYED +DESTROYER +DESTROYERS +DESTROYING +DESTROYS +DESTRUCT +DESTRUCTION +DESTRUCTIONS +DESTRUCTIVE +DESTRUCTIVELY +DESTRUCTIVENESS +DESTRUCTOR +DESTUFF +DESTUFFING +DESTUFFS +DESUETUDE +DESULTORY +DESYNCHRONIZE +DETACH +DETACHED +DETACHER +DETACHES +DETACHING +DETACHMENT +DETACHMENTS +DETAIL +DETAILED +DETAILING +DETAILS +DETAIN +DETAINED +DETAINING +DETAINS +DETECT +DETECTABLE +DETECTABLY +DETECTED +DETECTING +DETECTION +DETECTIONS +DETECTIVE +DETECTIVES +DETECTOR +DETECTORS +DETECTS +DETENTE +DETENTION +DETER +DETERGENT +DETERIORATE +DETERIORATED +DETERIORATES +DETERIORATING +DETERIORATION +DETERMINABLE +DETERMINACY +DETERMINANT +DETERMINANTS +DETERMINATE +DETERMINATELY +DETERMINATION +DETERMINATIONS +DETERMINATIVE +DETERMINE +DETERMINED +DETERMINER +DETERMINERS +DETERMINES +DETERMINING +DETERMINISM +DETERMINISTIC +DETERMINISTICALLY +DETERRED +DETERRENT +DETERRING +DETEST +DETESTABLE +DETESTED +DETOUR +DETRACT +DETRACTOR +DETRACTORS +DETRACTS +DETRIMENT +DETRIMENTAL +DETROIT +DEUCE +DEUS +DEUTERIUM +DEUTSCH +DEVASTATE +DEVASTATED +DEVASTATES +DEVASTATING +DEVASTATION +DEVELOP +DEVELOPED +DEVELOPER +DEVELOPERS +DEVELOPING +DEVELOPMENT +DEVELOPMENTAL +DEVELOPMENTS +DEVELOPS +DEVIANT +DEVIANTS +DEVIATE +DEVIATED +DEVIATES +DEVIATING +DEVIATION +DEVIATIONS +DEVICE +DEVICES +DEVIL +DEVILISH +DEVILISHLY +DEVILS +DEVIOUS +DEVISE +DEVISED +DEVISES +DEVISING +DEVISINGS +DEVOID +DEVOLVE +DEVON +DEVONSHIRE +DEVOTE +DEVOTED +DEVOTEDLY +DEVOTEE +DEVOTEES +DEVOTES +DEVOTING +DEVOTION +DEVOTIONS +DEVOUR +DEVOURED +DEVOURER +DEVOURS +DEVOUT +DEVOUTLY +DEVOUTNESS +DEW +DEWDROP +DEWDROPS +DEWEY +DEWITT +DEWY +DEXEDRINE +DEXTERITY +DHABI +DIABETES +DIABETIC +DIABOLIC +DIACHRONIC +DIACRITICAL +DIADEM +DIAGNOSABLE +DIAGNOSE +DIAGNOSED +DIAGNOSES +DIAGNOSING +DIAGNOSIS +DIAGNOSTIC +DIAGNOSTICIAN +DIAGNOSTICS +DIAGONAL +DIAGONALLY +DIAGONALS +DIAGRAM +DIAGRAMMABLE +DIAGRAMMATIC +DIAGRAMMATICALLY +DIAGRAMMED +DIAGRAMMER +DIAGRAMMERS +DIAGRAMMING +DIAGRAMS +DIAL +DIALECT +DIALECTIC +DIALECTS +DIALED +DIALER +DIALERS +DIALING +DIALOG +DIALOGS +DIALOGUE +DIALOGUES +DIALS +DIALUP +DIALYSIS +DIAMAGNETIC +DIAMETER +DIAMETERS +DIAMETRIC +DIAMETRICALLY +DIAMOND +DIAMONDS +DIANA +DIANE +DIANNE +DIAPER +DIAPERS +DIAPHRAGM +DIAPHRAGMS +DIARIES +DIARRHEA +DIARY +DIATRIBE +DIATRIBES +DIBBLE +DICE +DICHOTOMIZE +DICHOTOMY +DICKENS +DICKERSON +DICKINSON +DICKSON +DICKY +DICTATE +DICTATED +DICTATES +DICTATING +DICTATION +DICTATIONS +DICTATOR +DICTATORIAL +DICTATORS +DICTATORSHIP +DICTION +DICTIONARIES +DICTIONARY +DICTUM +DICTUMS +DID +DIDACTIC +DIDDLE +DIDO +DIE +DIEBOLD +DIED +DIEGO +DIEHARD +DIELECTRIC +DIELECTRICS +DIEM +DIES +DIESEL +DIET +DIETARY +DIETER +DIETERS +DIETETIC +DIETICIAN +DIETITIAN +DIETITIANS +DIETRICH +DIETS +DIETZ +DIFFER +DIFFERED +DIFFERENCE +DIFFERENCES +DIFFERENT +DIFFERENTIABLE +DIFFERENTIAL +DIFFERENTIALS +DIFFERENTIATE +DIFFERENTIATED +DIFFERENTIATES +DIFFERENTIATING +DIFFERENTIATION +DIFFERENTIATIONS +DIFFERENTIATORS +DIFFERENTLY +DIFFERER +DIFFERERS +DIFFERING +DIFFERS +DIFFICULT +DIFFICULTIES +DIFFICULTLY +DIFFICULTY +DIFFRACT +DIFFUSE +DIFFUSED +DIFFUSELY +DIFFUSER +DIFFUSERS +DIFFUSES +DIFFUSIBLE +DIFFUSING +DIFFUSION +DIFFUSIONS +DIFFUSIVE +DIG +DIGEST +DIGESTED +DIGESTIBLE +DIGESTING +DIGESTION +DIGESTIVE +DIGESTS +DIGGER +DIGGERS +DIGGING +DIGGINGS +DIGIT +DIGITAL +DIGITALIS +DIGITALLY +DIGITIZATION +DIGITIZE +DIGITIZED +DIGITIZES +DIGITIZING +DIGITS +DIGNIFIED +DIGNIFY +DIGNITARY +DIGNITIES +DIGNITY +DIGRAM +DIGRESS +DIGRESSED +DIGRESSES +DIGRESSING +DIGRESSION +DIGRESSIONS +DIGRESSIVE +DIGS +DIHEDRAL +DIJKSTRA +DIJON +DIKE +DIKES +DILAPIDATE +DILATATION +DILATE +DILATED +DILATES +DILATING +DILATION +DILDO +DILEMMA +DILEMMAS +DILIGENCE +DILIGENT +DILIGENTLY +DILL +DILLON +DILOGARITHM +DILUTE +DILUTED +DILUTES +DILUTING +DILUTION +DIM +DIMAGGIO +DIME +DIMENSION +DIMENSIONAL +DIMENSIONALITY +DIMENSIONALLY +DIMENSIONED +DIMENSIONING +DIMENSIONS +DIMES +DIMINISH +DIMINISHED +DIMINISHES +DIMINISHING +DIMINUTION +DIMINUTIVE +DIMLY +DIMMED +DIMMER +DIMMERS +DIMMEST +DIMMING +DIMNESS +DIMPLE +DIMS +DIN +DINAH +DINE +DINED +DINER +DINERS +DINES +DING +DINGHY +DINGINESS +DINGO +DINGY +DINING +DINNER +DINNERS +DINNERTIME +DINNERWARE +DINOSAUR +DINT +DIOCLETIAN +DIODE +DIODES +DIOGENES +DION +DIONYSIAN +DIONYSUS +DIOPHANTINE +DIOPTER +DIORAMA +DIOXIDE +DIP +DIPHTHERIA +DIPHTHONG +DIPLOMA +DIPLOMACY +DIPLOMAS +DIPLOMAT +DIPLOMATIC +DIPLOMATS +DIPOLE +DIPPED +DIPPER +DIPPERS +DIPPING +DIPPINGS +DIPS +DIRAC +DIRE +DIRECT +DIRECTED +DIRECTING +DIRECTION +DIRECTIONAL +DIRECTIONALITY +DIRECTIONALLY +DIRECTIONS +DIRECTIVE +DIRECTIVES +DIRECTLY +DIRECTNESS +DIRECTOR +DIRECTORATE +DIRECTORIES +DIRECTORS +DIRECTORY +DIRECTRICES +DIRECTRIX +DIRECTS +DIRGE +DIRGES +DIRICHLET +DIRT +DIRTIER +DIRTIEST +DIRTILY +DIRTINESS +DIRTS +DIRTY +DIS +DISABILITIES +DISABILITY +DISABLE +DISABLED +DISABLER +DISABLERS +DISABLES +DISABLING +DISADVANTAGE +DISADVANTAGEOUS +DISADVANTAGES +DISAFFECTED +DISAFFECTION +DISAGREE +DISAGREEABLE +DISAGREED +DISAGREEING +DISAGREEMENT +DISAGREEMENTS +DISAGREES +DISALLOW +DISALLOWED +DISALLOWING +DISALLOWS +DISAMBIGUATE +DISAMBIGUATED +DISAMBIGUATES +DISAMBIGUATING +DISAMBIGUATION +DISAMBIGUATIONS +DISAPPEAR +DISAPPEARANCE +DISAPPEARANCES +DISAPPEARED +DISAPPEARING +DISAPPEARS +DISAPPOINT +DISAPPOINTED +DISAPPOINTING +DISAPPOINTMENT +DISAPPOINTMENTS +DISAPPROVAL +DISAPPROVE +DISAPPROVED +DISAPPROVES +DISARM +DISARMAMENT +DISARMED +DISARMING +DISARMS +DISASSEMBLE +DISASSEMBLED +DISASSEMBLES +DISASSEMBLING +DISASSEMBLY +DISASTER +DISASTERS +DISASTROUS +DISASTROUSLY +DISBAND +DISBANDED +DISBANDING +DISBANDS +DISBURSE +DISBURSED +DISBURSEMENT +DISBURSEMENTS +DISBURSES +DISBURSING +DISC +DISCARD +DISCARDED +DISCARDING +DISCARDS +DISCERN +DISCERNED +DISCERNIBILITY +DISCERNIBLE +DISCERNIBLY +DISCERNING +DISCERNINGLY +DISCERNMENT +DISCERNS +DISCHARGE +DISCHARGED +DISCHARGES +DISCHARGING +DISCIPLE +DISCIPLES +DISCIPLINARY +DISCIPLINE +DISCIPLINED +DISCIPLINES +DISCIPLINING +DISCLAIM +DISCLAIMED +DISCLAIMER +DISCLAIMS +DISCLOSE +DISCLOSED +DISCLOSES +DISCLOSING +DISCLOSURE +DISCLOSURES +DISCOMFORT +DISCONCERT +DISCONCERTING +DISCONCERTINGLY +DISCONNECT +DISCONNECTED +DISCONNECTING +DISCONNECTION +DISCONNECTS +DISCONTENT +DISCONTENTED +DISCONTINUANCE +DISCONTINUE +DISCONTINUED +DISCONTINUES +DISCONTINUITIES +DISCONTINUITY +DISCONTINUOUS +DISCORD +DISCORDANT +DISCOUNT +DISCOUNTED +DISCOUNTING +DISCOUNTS +DISCOURAGE +DISCOURAGED +DISCOURAGEMENT +DISCOURAGES +DISCOURAGING +DISCOURSE +DISCOURSES +DISCOVER +DISCOVERED +DISCOVERER +DISCOVERERS +DISCOVERIES +DISCOVERING +DISCOVERS +DISCOVERY +DISCREDIT +DISCREDITED +DISCREET +DISCREETLY +DISCREPANCIES +DISCREPANCY +DISCRETE +DISCRETELY +DISCRETENESS +DISCRETION +DISCRETIONARY +DISCRIMINANT +DISCRIMINATE +DISCRIMINATED +DISCRIMINATES +DISCRIMINATING +DISCRIMINATION +DISCRIMINATORY +DISCS +DISCUSS +DISCUSSANT +DISCUSSED +DISCUSSES +DISCUSSING +DISCUSSION +DISCUSSIONS +DISDAIN +DISDAINING +DISDAINS +DISEASE +DISEASED +DISEASES +DISEMBOWEL +DISENGAGE +DISENGAGED +DISENGAGES +DISENGAGING +DISENTANGLE +DISENTANGLING +DISFIGURE +DISFIGURED +DISFIGURES +DISFIGURING +DISGORGE +DISGRACE +DISGRACED +DISGRACEFUL +DISGRACEFULLY +DISGRACES +DISGRUNTLE +DISGRUNTLED +DISGUISE +DISGUISED +DISGUISES +DISGUST +DISGUSTED +DISGUSTEDLY +DISGUSTFUL +DISGUSTING +DISGUSTINGLY +DISGUSTS +DISH +DISHEARTEN +DISHEARTENING +DISHED +DISHES +DISHEVEL +DISHING +DISHONEST +DISHONESTLY +DISHONESTY +DISHONOR +DISHONORABLE +DISHONORED +DISHONORING +DISHONORS +DISHWASHER +DISHWASHERS +DISHWASHING +DISHWATER +DISILLUSION +DISILLUSIONED +DISILLUSIONING +DISILLUSIONMENT +DISILLUSIONMENTS +DISINCLINED +DISINGENUOUS +DISINTERESTED +DISINTERESTEDNESS +DISJOINT +DISJOINTED +DISJOINTLY +DISJOINTNESS +DISJUNCT +DISJUNCTION +DISJUNCTIONS +DISJUNCTIVE +DISJUNCTIVELY +DISJUNCTS +DISK +DISKETTE +DISKETTES +DISKS +DISLIKE +DISLIKED +DISLIKES +DISLIKING +DISLOCATE +DISLOCATED +DISLOCATES +DISLOCATING +DISLOCATION +DISLOCATIONS +DISLODGE +DISLODGED +DISMAL +DISMALLY +DISMAY +DISMAYED +DISMAYING +DISMEMBER +DISMEMBERED +DISMEMBERMENT +DISMEMBERS +DISMISS +DISMISSAL +DISMISSALS +DISMISSED +DISMISSER +DISMISSERS +DISMISSES +DISMISSING +DISMOUNT +DISMOUNTED +DISMOUNTING +DISMOUNTS +DISNEY +DISNEYLAND +DISOBEDIENCE +DISOBEDIENT +DISOBEY +DISOBEYED +DISOBEYING +DISOBEYS +DISORDER +DISORDERED +DISORDERLY +DISORDERS +DISORGANIZED +DISOWN +DISOWNED +DISOWNING +DISOWNS +DISPARAGE +DISPARATE +DISPARITIES +DISPARITY +DISPASSIONATE +DISPATCH +DISPATCHED +DISPATCHER +DISPATCHERS +DISPATCHES +DISPATCHING +DISPEL +DISPELL +DISPELLED +DISPELLING +DISPELS +DISPENSARY +DISPENSATION +DISPENSE +DISPENSED +DISPENSER +DISPENSERS +DISPENSES +DISPENSING +DISPERSAL +DISPERSE +DISPERSED +DISPERSES +DISPERSING +DISPERSION +DISPERSIONS +DISPLACE +DISPLACED +DISPLACEMENT +DISPLACEMENTS +DISPLACES +DISPLACING +DISPLAY +DISPLAYABLE +DISPLAYED +DISPLAYER +DISPLAYING +DISPLAYS +DISPLEASE +DISPLEASED +DISPLEASES +DISPLEASING +DISPLEASURE +DISPOSABLE +DISPOSAL +DISPOSALS +DISPOSE +DISPOSED +DISPOSER +DISPOSES +DISPOSING +DISPOSITION +DISPOSITIONS +DISPOSSESSED +DISPROPORTIONATE +DISPROVE +DISPROVED +DISPROVES +DISPROVING +DISPUTE +DISPUTED +DISPUTER +DISPUTERS +DISPUTES +DISPUTING +DISQUALIFICATION +DISQUALIFIED +DISQUALIFIES +DISQUALIFY +DISQUALIFYING +DISQUIET +DISQUIETING +DISRAELI +DISREGARD +DISREGARDED +DISREGARDING +DISREGARDS +DISRESPECTFUL +DISRUPT +DISRUPTED +DISRUPTING +DISRUPTION +DISRUPTIONS +DISRUPTIVE +DISRUPTS +DISSATISFACTION +DISSATISFACTIONS +DISSATISFACTORY +DISSATISFIED +DISSECT +DISSECTS +DISSEMBLE +DISSEMINATE +DISSEMINATED +DISSEMINATES +DISSEMINATING +DISSEMINATION +DISSENSION +DISSENSIONS +DISSENT +DISSENTED +DISSENTER +DISSENTERS +DISSENTING +DISSENTS +DISSERTATION +DISSERTATIONS +DISSERVICE +DISSIDENT +DISSIDENTS +DISSIMILAR +DISSIMILARITIES +DISSIMILARITY +DISSIPATE +DISSIPATED +DISSIPATES +DISSIPATING +DISSIPATION +DISSOCIATE +DISSOCIATED +DISSOCIATES +DISSOCIATING +DISSOCIATION +DISSOLUTION +DISSOLUTIONS +DISSOLVE +DISSOLVED +DISSOLVES +DISSOLVING +DISSONANT +DISSUADE +DISTAFF +DISTAL +DISTALLY +DISTANCE +DISTANCES +DISTANT +DISTANTLY +DISTASTE +DISTASTEFUL +DISTASTEFULLY +DISTASTES +DISTEMPER +DISTEMPERED +DISTEMPERS +DISTILL +DISTILLATION +DISTILLED +DISTILLER +DISTILLERS +DISTILLERY +DISTILLING +DISTILLS +DISTINCT +DISTINCTION +DISTINCTIONS +DISTINCTIVE +DISTINCTIVELY +DISTINCTIVENESS +DISTINCTLY +DISTINCTNESS +DISTINGUISH +DISTINGUISHABLE +DISTINGUISHED +DISTINGUISHES +DISTINGUISHING +DISTORT +DISTORTED +DISTORTING +DISTORTION +DISTORTIONS +DISTORTS +DISTRACT +DISTRACTED +DISTRACTING +DISTRACTION +DISTRACTIONS +DISTRACTS +DISTRAUGHT +DISTRESS +DISTRESSED +DISTRESSES +DISTRESSING +DISTRIBUTE +DISTRIBUTED +DISTRIBUTES +DISTRIBUTING +DISTRIBUTION +DISTRIBUTIONAL +DISTRIBUTIONS +DISTRIBUTIVE +DISTRIBUTIVITY +DISTRIBUTOR +DISTRIBUTORS +DISTRICT +DISTRICTS +DISTRUST +DISTRUSTED +DISTURB +DISTURBANCE +DISTURBANCES +DISTURBED +DISTURBER +DISTURBING +DISTURBINGLY +DISTURBS +DISUSE +DITCH +DITCHES +DITHER +DITTO +DITTY +DITZEL +DIURNAL +DIVAN +DIVANS +DIVE +DIVED +DIVER +DIVERGE +DIVERGED +DIVERGENCE +DIVERGENCES +DIVERGENT +DIVERGES +DIVERGING +DIVERS +DIVERSE +DIVERSELY +DIVERSIFICATION +DIVERSIFIED +DIVERSIFIES +DIVERSIFY +DIVERSIFYING +DIVERSION +DIVERSIONARY +DIVERSIONS +DIVERSITIES +DIVERSITY +DIVERT +DIVERTED +DIVERTING +DIVERTS +DIVES +DIVEST +DIVESTED +DIVESTING +DIVESTITURE +DIVESTS +DIVIDE +DIVIDED +DIVIDEND +DIVIDENDS +DIVIDER +DIVIDERS +DIVIDES +DIVIDING +DIVINE +DIVINELY +DIVINER +DIVING +DIVINING +DIVINITIES +DIVINITY +DIVISIBILITY +DIVISIBLE +DIVISION +DIVISIONAL +DIVISIONS +DIVISIVE +DIVISOR +DIVISORS +DIVORCE +DIVORCED +DIVORCEE +DIVULGE +DIVULGED +DIVULGES +DIVULGING +DIXIE +DIXIECRATS +DIXIELAND +DIXON +DIZZINESS +DIZZY +DJAKARTA +DMITRI +DNIEPER +DOBBIN +DOBBS +DOBERMAN +DOC +DOCILE +DOCK +DOCKED +DOCKET +DOCKS +DOCKSIDE +DOCKYARD +DOCTOR +DOCTORAL +DOCTORATE +DOCTORATES +DOCTORED +DOCTORS +DOCTRINAIRE +DOCTRINAL +DOCTRINE +DOCTRINES +DOCUMENT +DOCUMENTARIES +DOCUMENTARY +DOCUMENTATION +DOCUMENTATIONS +DOCUMENTED +DOCUMENTER +DOCUMENTERS +DOCUMENTING +DOCUMENTS +DODD +DODECAHEDRA +DODECAHEDRAL +DODECAHEDRON +DODGE +DODGED +DODGER +DODGERS +DODGING +DODINGTON +DODSON +DOE +DOER +DOERS +DOES +DOG +DOGE +DOGGED +DOGGEDLY +DOGGEDNESS +DOGGING +DOGHOUSE +DOGMA +DOGMAS +DOGMATIC +DOGMATISM +DOGS +DOGTOWN +DOHERTY +DOING +DOINGS +DOLAN +DOLDRUM +DOLE +DOLED +DOLEFUL +DOLEFULLY +DOLES +DOLL +DOLLAR +DOLLARS +DOLLIES +DOLLS +DOLLY +DOLORES +DOLPHIN +DOLPHINS +DOMAIN +DOMAINS +DOME +DOMED +DOMENICO +DOMES +DOMESDAY +DOMESTIC +DOMESTICALLY +DOMESTICATE +DOMESTICATED +DOMESTICATES +DOMESTICATING +DOMESTICATION +DOMICILE +DOMINANCE +DOMINANT +DOMINANTLY +DOMINATE +DOMINATED +DOMINATES +DOMINATING +DOMINATION +DOMINEER +DOMINEERING +DOMINGO +DOMINIC +DOMINICAN +DOMINICANS +DOMINICK +DOMINION +DOMINIQUE +DOMINO +DON +DONAHUE +DONALD +DONALDSON +DONATE +DONATED +DONATES +DONATING +DONATION +DONE +DONECK +DONKEY +DONKEYS +DONNA +DONNELLY +DONNER +DONNYBROOK +DONOR +DONOVAN +DONS +DOODLE +DOOLEY +DOOLITTLE +DOOM +DOOMED +DOOMING +DOOMS +DOOMSDAY +DOOR +DOORBELL +DOORKEEPER +DOORMAN +DOORMEN +DOORS +DOORSTEP +DOORSTEPS +DOORWAY +DOORWAYS +DOPE +DOPED +DOPER +DOPERS +DOPES +DOPING +DOPPLER +DORA +DORADO +DORCAS +DORCHESTER +DOREEN +DORIA +DORIC +DORICIZE +DORICIZES +DORIS +DORMANT +DORMITORIES +DORMITORY +DOROTHEA +DOROTHY +DORSET +DORTMUND +DOSAGE +DOSE +DOSED +DOSES +DOSSIER +DOSSIERS +DOSTOEVSKY +DOT +DOTE +DOTED +DOTES +DOTING +DOTINGLY +DOTS +DOTTED +DOTTING +DOUBLE +DOUBLED +DOUBLEDAY +DOUBLEHEADER +DOUBLER +DOUBLERS +DOUBLES +DOUBLET +DOUBLETON +DOUBLETS +DOUBLING +DOUBLOON +DOUBLY +DOUBT +DOUBTABLE +DOUBTED +DOUBTER +DOUBTERS +DOUBTFUL +DOUBTFULLY +DOUBTING +DOUBTLESS +DOUBTLESSLY +DOUBTS +DOUG +DOUGH +DOUGHERTY +DOUGHNUT +DOUGHNUTS +DOUGLAS +DOUGLASS +DOVE +DOVER +DOVES +DOVETAIL +DOW +DOWAGER +DOWEL +DOWLING +DOWN +DOWNCAST +DOWNED +DOWNERS +DOWNEY +DOWNFALL +DOWNFALLEN +DOWNGRADE +DOWNHILL +DOWNING +DOWNLINK +DOWNLINKS +DOWNLOAD +DOWNLOADED +DOWNLOADING +DOWNLOADS +DOWNPLAY +DOWNPLAYED +DOWNPLAYING +DOWNPLAYS +DOWNPOUR +DOWNRIGHT +DOWNS +DOWNSIDE +DOWNSTAIRS +DOWNSTREAM +DOWNTOWN +DOWNTOWNS +DOWNTRODDEN +DOWNTURN +DOWNWARD +DOWNWARDS +DOWNY +DOWRY +DOYLE +DOZE +DOZED +DOZEN +DOZENS +DOZENTH +DOZES +DOZING +DRAB +DRACO +DRACONIAN +DRAFT +DRAFTED +DRAFTEE +DRAFTER +DRAFTERS +DRAFTING +DRAFTS +DRAFTSMAN +DRAFTSMEN +DRAFTY +DRAG +DRAGGED +DRAGGING +DRAGNET +DRAGON +DRAGONFLY +DRAGONHEAD +DRAGONS +DRAGOON +DRAGOONED +DRAGOONS +DRAGS +DRAIN +DRAINAGE +DRAINED +DRAINER +DRAINING +DRAINS +DRAKE +DRAM +DRAMA +DRAMAMINE +DRAMAS +DRAMATIC +DRAMATICALLY +DRAMATICS +DRAMATIST +DRAMATISTS +DRANK +DRAPE +DRAPED +DRAPER +DRAPERIES +DRAPERS +DRAPERY +DRAPES +DRASTIC +DRASTICALLY +DRAUGHT +DRAUGHTS +DRAVIDIAN +DRAW +DRAWBACK +DRAWBACKS +DRAWBRIDGE +DRAWBRIDGES +DRAWER +DRAWERS +DRAWING +DRAWINGS +DRAWL +DRAWLED +DRAWLING +DRAWLS +DRAWN +DRAWNLY +DRAWNNESS +DRAWS +DREAD +DREADED +DREADFUL +DREADFULLY +DREADING +DREADNOUGHT +DREADS +DREAM +DREAMBOAT +DREAMED +DREAMER +DREAMERS +DREAMILY +DREAMING +DREAMLIKE +DREAMS +DREAMT +DREAMY +DREARINESS +DREARY +DREDGE +DREGS +DRENCH +DRENCHED +DRENCHES +DRENCHING +DRESS +DRESSED +DRESSER +DRESSERS +DRESSES +DRESSING +DRESSINGS +DRESSMAKER +DRESSMAKERS +DREW +DREXEL +DREYFUSS +DRIED +DRIER +DRIERS +DRIES +DRIEST +DRIFT +DRIFTED +DRIFTER +DRIFTERS +DRIFTING +DRIFTS +DRILL +DRILLED +DRILLER +DRILLING +DRILLS +DRILY +DRINK +DRINKABLE +DRINKER +DRINKERS +DRINKING +DRINKS +DRIP +DRIPPING +DRIPPY +DRIPS +DRISCOLL +DRIVE +DRIVEN +DRIVER +DRIVERS +DRIVES +DRIVEWAY +DRIVEWAYS +DRIVING +DRIZZLE +DRIZZLY +DROLL +DROMEDARY +DRONE +DRONES +DROOL +DROOP +DROOPED +DROOPING +DROOPS +DROOPY +DROP +DROPLET +DROPOUT +DROPPED +DROPPER +DROPPERS +DROPPING +DROPPINGS +DROPS +DROSOPHILA +DROUGHT +DROUGHTS +DROVE +DROVER +DROVERS +DROVES +DROWN +DROWNED +DROWNING +DROWNINGS +DROWNS +DROWSINESS +DROWSY +DRUBBING +DRUDGE +DRUDGERY +DRUG +DRUGGIST +DRUGGISTS +DRUGS +DRUGSTORE +DRUM +DRUMHEAD +DRUMMED +DRUMMER +DRUMMERS +DRUMMING +DRUMMOND +DRUMS +DRUNK +DRUNKARD +DRUNKARDS +DRUNKEN +DRUNKENNESS +DRUNKER +DRUNKLY +DRUNKS +DRURY +DRY +DRYDEN +DRYING +DRYLY +DUAL +DUALISM +DUALITIES +DUALITY +DUANE +DUB +DUBBED +DUBHE +DUBIOUS +DUBIOUSLY +DUBIOUSNESS +DUBLIN +DUBS +DUBUQUE +DUCHESS +DUCHESSES +DUCHY +DUCK +DUCKED +DUCKING +DUCKLING +DUCKS +DUCT +DUCTS +DUD +DUDLEY +DUE +DUEL +DUELING +DUELS +DUES +DUET +DUFFY +DUG +DUGAN +DUKE +DUKES +DULL +DULLED +DULLER +DULLES +DULLEST +DULLING +DULLNESS +DULLS +DULLY +DULUTH +DULY +DUMB +DUMBBELL +DUMBBELLS +DUMBER +DUMBEST +DUMBLY +DUMBNESS +DUMMIES +DUMMY +DUMP +DUMPED +DUMPER +DUMPING +DUMPS +DUMPTY +DUNBAR +DUNCAN +DUNCE +DUNCES +DUNDEE +DUNE +DUNEDIN +DUNES +DUNG +DUNGEON +DUNGEONS +DUNHAM +DUNK +DUNKIRK +DUNLAP +DUNLOP +DUNN +DUNNE +DUPE +DUPLEX +DUPLICABLE +DUPLICATE +DUPLICATED +DUPLICATES +DUPLICATING +DUPLICATION +DUPLICATIONS +DUPLICATOR +DUPLICATORS +DUPLICITY +DUPONT +DUPONT +DUPONTS +DUPONTS +DUQUESNE +DURABILITIES +DURABILITY +DURABLE +DURABLY +DURANGO +DURATION +DURATIONS +DURER +DURERS +DURESS +DURHAM +DURING +DURKEE +DURKIN +DURRELL +DURWARD +DUSENBERG +DUSENBURY +DUSK +DUSKINESS +DUSKY +DUSSELDORF +DUST +DUSTBIN +DUSTED +DUSTER +DUSTERS +DUSTIER +DUSTIEST +DUSTIN +DUSTING +DUSTS +DUSTY +DUTCH +DUTCHESS +DUTCHMAN +DUTCHMEN +DUTIES +DUTIFUL +DUTIFULLY +DUTIFULNESS +DUTTON +DUTY +DVORAK +DWARF +DWARFED +DWARFS +DWARVES +DWELL +DWELLED +DWELLER +DWELLERS +DWELLING +DWELLINGS +DWELLS +DWELT +DWIGHT +DWINDLE +DWINDLED +DWINDLING +DWYER +DYAD +DYADIC +DYE +DYED +DYEING +DYER +DYERS +DYES +DYING +DYKE +DYLAN +DYNAMIC +DYNAMICALLY +DYNAMICS +DYNAMISM +DYNAMITE +DYNAMITED +DYNAMITES +DYNAMITING +DYNAMO +DYNASTIC +DYNASTIES +DYNASTY +DYNE +DYSENTERY +DYSPEPTIC +DYSTROPHY +EACH +EAGAN +EAGER +EAGERLY +EAGERNESS +EAGLE +EAGLES +EAR +EARDRUM +EARED +EARL +EARLIER +EARLIEST +EARLINESS +EARLS +EARLY +EARMARK +EARMARKED +EARMARKING +EARMARKINGS +EARMARKS +EARN +EARNED +EARNER +EARNERS +EARNEST +EARNESTLY +EARNESTNESS +EARNING +EARNINGS +EARNS +EARP +EARPHONE +EARRING +EARRINGS +EARS +EARSPLITTING +EARTH +EARTHEN +EARTHENWARE +EARTHLINESS +EARTHLING +EARTHLY +EARTHMAN +EARTHMEN +EARTHMOVER +EARTHQUAKE +EARTHQUAKES +EARTHS +EARTHWORM +EARTHWORMS +EARTHY +EASE +EASED +EASEL +EASEMENT +EASEMENTS +EASES +EASIER +EASIEST +EASILY +EASINESS +EASING +EAST +EASTBOUND +EASTER +EASTERN +EASTERNER +EASTERNERS +EASTERNMOST +EASTHAMPTON +EASTLAND +EASTMAN +EASTWARD +EASTWARDS +EASTWICK +EASTWOOD +EASY +EASYGOING +EAT +EATEN +EATER +EATERS +EATING +EATINGS +EATON +EATS +EAVES +EAVESDROP +EAVESDROPPED +EAVESDROPPER +EAVESDROPPERS +EAVESDROPPING +EAVESDROPS +EBB +EBBING +EBBS +EBEN +EBONY +ECCENTRIC +ECCENTRICITIES +ECCENTRICITY +ECCENTRICS +ECCLES +ECCLESIASTICAL +ECHELON +ECHO +ECHOED +ECHOES +ECHOING +ECLECTIC +ECLIPSE +ECLIPSED +ECLIPSES +ECLIPSING +ECLIPTIC +ECOLE +ECOLOGY +ECONOMETRIC +ECONOMETRICA +ECONOMIC +ECONOMICAL +ECONOMICALLY +ECONOMICS +ECONOMIES +ECONOMIST +ECONOMISTS +ECONOMIZE +ECONOMIZED +ECONOMIZER +ECONOMIZERS +ECONOMIZES +ECONOMIZING +ECONOMY +ECOSYSTEM +ECSTASY +ECSTATIC +ECUADOR +ECUADORIAN +EDDIE +EDDIES +EDDY +EDEN +EDENIZATION +EDENIZATIONS +EDENIZE +EDENIZES +EDGAR +EDGE +EDGED +EDGERTON +EDGES +EDGEWATER +EDGEWOOD +EDGING +EDIBLE +EDICT +EDICTS +EDIFICE +EDIFICES +EDINBURGH +EDISON +EDIT +EDITED +EDITH +EDITING +EDITION +EDITIONS +EDITOR +EDITORIAL +EDITORIALLY +EDITORIALS +EDITORS +EDITS +EDMONDS +EDMONDSON +EDMONTON +EDMUND +EDNA +EDSGER +EDUARD +EDUARDO +EDUCABLE +EDUCATE +EDUCATED +EDUCATES +EDUCATING +EDUCATION +EDUCATIONAL +EDUCATIONALLY +EDUCATIONS +EDUCATOR +EDUCATORS +EDWARD +EDWARDIAN +EDWARDINE +EDWARDS +EDWIN +EDWINA +EEL +EELGRASS +EELS +EERIE +EERILY +EFFECT +EFFECTED +EFFECTING +EFFECTIVE +EFFECTIVELY +EFFECTIVENESS +EFFECTOR +EFFECTORS +EFFECTS +EFFECTUALLY +EFFECTUATE +EFFEMINATE +EFFICACY +EFFICIENCIES +EFFICIENCY +EFFICIENT +EFFICIENTLY +EFFIE +EFFIGY +EFFORT +EFFORTLESS +EFFORTLESSLY +EFFORTLESSNESS +EFFORTS +EGALITARIAN +EGAN +EGG +EGGED +EGGHEAD +EGGING +EGGPLANT +EGGS +EGGSHELL +EGO +EGOCENTRIC +EGOS +EGOTISM +EGOTIST +EGYPT +EGYPTIAN +EGYPTIANIZATION +EGYPTIANIZATIONS +EGYPTIANIZE +EGYPTIANIZES +EGYPTIANS +EGYPTIZE +EGYPTIZES +EGYPTOLOGY +EHRLICH +EICHMANN +EIFFEL +EIGENFUNCTION +EIGENSTATE +EIGENVALUE +EIGENVALUES +EIGENVECTOR +EIGHT +EIGHTEEN +EIGHTEENS +EIGHTEENTH +EIGHTFOLD +EIGHTH +EIGHTHES +EIGHTIES +EIGHTIETH +EIGHTS +EIGHTY +EILEEN +EINSTEIN +EINSTEINIAN +EIRE +EISENHOWER +EISNER +EITHER +EJACULATE +EJACULATED +EJACULATES +EJACULATING +EJACULATION +EJACULATIONS +EJECT +EJECTED +EJECTING +EJECTS +EKBERG +EKE +EKED +EKES +EKSTROM +EKTACHROME +ELABORATE +ELABORATED +ELABORATELY +ELABORATENESS +ELABORATES +ELABORATING +ELABORATION +ELABORATIONS +ELABORATORS +ELAINE +ELAPSE +ELAPSED +ELAPSES +ELAPSING +ELASTIC +ELASTICALLY +ELASTICITY +ELBA +ELBOW +ELBOWING +ELBOWS +ELDER +ELDERLY +ELDERS +ELDEST +ELDON +ELEANOR +ELEAZAR +ELECT +ELECTED +ELECTING +ELECTION +ELECTIONS +ELECTIVE +ELECTIVES +ELECTOR +ELECTORAL +ELECTORATE +ELECTORS +ELECTRA +ELECTRIC +ELECTRICAL +ELECTRICALLY +ELECTRICALNESS +ELECTRICIAN +ELECTRICITY +ELECTRIFICATION +ELECTRIFY +ELECTRIFYING +ELECTRO +ELECTROCARDIOGRAM +ELECTROCARDIOGRAPH +ELECTROCUTE +ELECTROCUTED +ELECTROCUTES +ELECTROCUTING +ELECTROCUTION +ELECTROCUTIONS +ELECTRODE +ELECTRODES +ELECTROENCEPHALOGRAM +ELECTROENCEPHALOGRAPH +ELECTROENCEPHALOGRAPHY +ELECTROLYSIS +ELECTROLYTE +ELECTROLYTES +ELECTROLYTIC +ELECTROMAGNETIC +ELECTROMECHANICAL +ELECTRON +ELECTRONIC +ELECTRONICALLY +ELECTRONICS +ELECTRONS +ELECTROPHORESIS +ELECTROPHORUS +ELECTS +ELEGANCE +ELEGANT +ELEGANTLY +ELEGY +ELEMENT +ELEMENTAL +ELEMENTALS +ELEMENTARY +ELEMENTS +ELENA +ELEPHANT +ELEPHANTS +ELEVATE +ELEVATED +ELEVATES +ELEVATION +ELEVATOR +ELEVATORS +ELEVEN +ELEVENS +ELEVENTH +ELF +ELGIN +ELI +ELICIT +ELICITED +ELICITING +ELICITS +ELIDE +ELIGIBILITY +ELIGIBLE +ELIJAH +ELIMINATE +ELIMINATED +ELIMINATES +ELIMINATING +ELIMINATION +ELIMINATIONS +ELIMINATOR +ELIMINATORS +ELINOR +ELIOT +ELISABETH +ELISHA +ELISION +ELITE +ELITIST +ELIZABETH +ELIZABETHAN +ELIZABETHANIZE +ELIZABETHANIZES +ELIZABETHANS +ELK +ELKHART +ELKS +ELLA +ELLEN +ELLIE +ELLIOT +ELLIOTT +ELLIPSE +ELLIPSES +ELLIPSIS +ELLIPSOID +ELLIPSOIDAL +ELLIPSOIDS +ELLIPTIC +ELLIPTICAL +ELLIPTICALLY +ELLIS +ELLISON +ELLSWORTH +ELLWOOD +ELM +ELMER +ELMHURST +ELMIRA +ELMS +ELMSFORD +ELOISE +ELOPE +ELOQUENCE +ELOQUENT +ELOQUENTLY +ELROY +ELSE +ELSEVIER +ELSEWHERE +ELSIE +ELSINORE +ELTON +ELUCIDATE +ELUCIDATED +ELUCIDATES +ELUCIDATING +ELUCIDATION +ELUDE +ELUDED +ELUDES +ELUDING +ELUSIVE +ELUSIVELY +ELUSIVENESS +ELVES +ELVIS +ELY +ELYSEE +ELYSEES +ELYSIUM +EMACIATE +EMACIATED +EMACS +EMANATE +EMANATING +EMANCIPATE +EMANCIPATION +EMANUEL +EMASCULATE +EMBALM +EMBARGO +EMBARGOES +EMBARK +EMBARKED +EMBARKS +EMBARRASS +EMBARRASSED +EMBARRASSES +EMBARRASSING +EMBARRASSMENT +EMBASSIES +EMBASSY +EMBED +EMBEDDED +EMBEDDING +EMBEDS +EMBELLISH +EMBELLISHED +EMBELLISHES +EMBELLISHING +EMBELLISHMENT +EMBELLISHMENTS +EMBER +EMBEZZLE +EMBLEM +EMBODIED +EMBODIES +EMBODIMENT +EMBODIMENTS +EMBODY +EMBODYING +EMBOLDEN +EMBRACE +EMBRACED +EMBRACES +EMBRACING +EMBROIDER +EMBROIDERED +EMBROIDERIES +EMBROIDERS +EMBROIDERY +EMBROIL +EMBRYO +EMBRYOLOGY +EMBRYOS +EMERALD +EMERALDS +EMERGE +EMERGED +EMERGENCE +EMERGENCIES +EMERGENCY +EMERGENT +EMERGES +EMERGING +EMERITUS +EMERSON +EMERY +EMIGRANT +EMIGRANTS +EMIGRATE +EMIGRATED +EMIGRATES +EMIGRATING +EMIGRATION +EMIL +EMILE +EMILIO +EMILY +EMINENCE +EMINENT +EMINENTLY +EMISSARY +EMISSION +EMIT +EMITS +EMITTED +EMITTER +EMITTING +EMMA +EMMANUEL +EMMETT +EMORY +EMOTION +EMOTIONAL +EMOTIONALLY +EMOTIONS +EMPATHY +EMPEROR +EMPERORS +EMPHASES +EMPHASIS +EMPHASIZE +EMPHASIZED +EMPHASIZES +EMPHASIZING +EMPHATIC +EMPHATICALLY +EMPIRE +EMPIRES +EMPIRICAL +EMPIRICALLY +EMPIRICIST +EMPIRICISTS +EMPLOY +EMPLOYABLE +EMPLOYED +EMPLOYEE +EMPLOYEES +EMPLOYER +EMPLOYERS +EMPLOYING +EMPLOYMENT +EMPLOYMENTS +EMPLOYS +EMPORIUM +EMPOWER +EMPOWERED +EMPOWERING +EMPOWERS +EMPRESS +EMPTIED +EMPTIER +EMPTIES +EMPTIEST +EMPTILY +EMPTINESS +EMPTY +EMPTYING +EMULATE +EMULATED +EMULATES +EMULATING +EMULATION +EMULATIONS +EMULATOR +EMULATORS +ENABLE +ENABLED +ENABLER +ENABLERS +ENABLES +ENABLING +ENACT +ENACTED +ENACTING +ENACTMENT +ENACTS +ENAMEL +ENAMELED +ENAMELING +ENAMELS +ENCAMP +ENCAMPED +ENCAMPING +ENCAMPS +ENCAPSULATE +ENCAPSULATED +ENCAPSULATES +ENCAPSULATING +ENCAPSULATION +ENCASED +ENCHANT +ENCHANTED +ENCHANTER +ENCHANTING +ENCHANTMENT +ENCHANTRESS +ENCHANTS +ENCIPHER +ENCIPHERED +ENCIPHERING +ENCIPHERS +ENCIRCLE +ENCIRCLED +ENCIRCLES +ENCLOSE +ENCLOSED +ENCLOSES +ENCLOSING +ENCLOSURE +ENCLOSURES +ENCODE +ENCODED +ENCODER +ENCODERS +ENCODES +ENCODING +ENCODINGS +ENCOMPASS +ENCOMPASSED +ENCOMPASSES +ENCOMPASSING +ENCORE +ENCOUNTER +ENCOUNTERED +ENCOUNTERING +ENCOUNTERS +ENCOURAGE +ENCOURAGED +ENCOURAGEMENT +ENCOURAGEMENTS +ENCOURAGES +ENCOURAGING +ENCOURAGINGLY +ENCROACH +ENCRUST +ENCRYPT +ENCRYPTED +ENCRYPTING +ENCRYPTION +ENCRYPTIONS +ENCRYPTS +ENCUMBER +ENCUMBERED +ENCUMBERING +ENCUMBERS +ENCYCLOPEDIA +ENCYCLOPEDIAS +ENCYCLOPEDIC +END +ENDANGER +ENDANGERED +ENDANGERING +ENDANGERS +ENDEAR +ENDEARED +ENDEARING +ENDEARS +ENDEAVOR +ENDEAVORED +ENDEAVORING +ENDEAVORS +ENDED +ENDEMIC +ENDER +ENDERS +ENDGAME +ENDICOTT +ENDING +ENDINGS +ENDLESS +ENDLESSLY +ENDLESSNESS +ENDORSE +ENDORSED +ENDORSEMENT +ENDORSES +ENDORSING +ENDOW +ENDOWED +ENDOWING +ENDOWMENT +ENDOWMENTS +ENDOWS +ENDPOINT +ENDS +ENDURABLE +ENDURABLY +ENDURANCE +ENDURE +ENDURED +ENDURES +ENDURING +ENDURINGLY +ENEMA +ENEMAS +ENEMIES +ENEMY +ENERGETIC +ENERGIES +ENERGIZE +ENERGY +ENERVATE +ENFEEBLE +ENFIELD +ENFORCE +ENFORCEABLE +ENFORCED +ENFORCEMENT +ENFORCER +ENFORCERS +ENFORCES +ENFORCING +ENFRANCHISE +ENG +ENGAGE +ENGAGED +ENGAGEMENT +ENGAGEMENTS +ENGAGES +ENGAGING +ENGAGINGLY +ENGEL +ENGELS +ENGENDER +ENGENDERED +ENGENDERING +ENGENDERS +ENGINE +ENGINEER +ENGINEERED +ENGINEERING +ENGINEERS +ENGINES +ENGLAND +ENGLANDER +ENGLANDERS +ENGLE +ENGLEWOOD +ENGLISH +ENGLISHIZE +ENGLISHIZES +ENGLISHMAN +ENGLISHMEN +ENGRAVE +ENGRAVED +ENGRAVER +ENGRAVES +ENGRAVING +ENGRAVINGS +ENGROSS +ENGROSSED +ENGROSSING +ENGULF +ENHANCE +ENHANCED +ENHANCEMENT +ENHANCEMENTS +ENHANCES +ENHANCING +ENID +ENIGMA +ENIGMATIC +ENJOIN +ENJOINED +ENJOINING +ENJOINS +ENJOY +ENJOYABLE +ENJOYABLY +ENJOYED +ENJOYING +ENJOYMENT +ENJOYS +ENLARGE +ENLARGED +ENLARGEMENT +ENLARGEMENTS +ENLARGER +ENLARGERS +ENLARGES +ENLARGING +ENLIGHTEN +ENLIGHTENED +ENLIGHTENING +ENLIGHTENMENT +ENLIST +ENLISTED +ENLISTMENT +ENLISTS +ENLIVEN +ENLIVENED +ENLIVENING +ENLIVENS +ENMITIES +ENMITY +ENNOBLE +ENNOBLED +ENNOBLES +ENNOBLING +ENNUI +ENOCH +ENORMITIES +ENORMITY +ENORMOUS +ENORMOUSLY +ENOS +ENOUGH +ENQUEUE +ENQUEUED +ENQUEUES +ENQUIRE +ENQUIRED +ENQUIRER +ENQUIRES +ENQUIRY +ENRAGE +ENRAGED +ENRAGES +ENRAGING +ENRAPTURE +ENRICH +ENRICHED +ENRICHES +ENRICHING +ENRICO +ENROLL +ENROLLED +ENROLLING +ENROLLMENT +ENROLLMENTS +ENROLLS +ENSEMBLE +ENSEMBLES +ENSIGN +ENSIGNS +ENSLAVE +ENSLAVED +ENSLAVES +ENSLAVING +ENSNARE +ENSNARED +ENSNARES +ENSNARING +ENSOLITE +ENSUE +ENSUED +ENSUES +ENSUING +ENSURE +ENSURED +ENSURER +ENSURERS +ENSURES +ENSURING +ENTAIL +ENTAILED +ENTAILING +ENTAILS +ENTANGLE +ENTER +ENTERED +ENTERING +ENTERPRISE +ENTERPRISES +ENTERPRISING +ENTERS +ENTERTAIN +ENTERTAINED +ENTERTAINER +ENTERTAINERS +ENTERTAINING +ENTERTAININGLY +ENTERTAINMENT +ENTERTAINMENTS +ENTERTAINS +ENTHUSIASM +ENTHUSIASMS +ENTHUSIAST +ENTHUSIASTIC +ENTHUSIASTICALLY +ENTHUSIASTS +ENTICE +ENTICED +ENTICER +ENTICERS +ENTICES +ENTICING +ENTIRE +ENTIRELY +ENTIRETIES +ENTIRETY +ENTITIES +ENTITLE +ENTITLED +ENTITLES +ENTITLING +ENTITY +ENTOMB +ENTRANCE +ENTRANCED +ENTRANCES +ENTRAP +ENTREAT +ENTREATED +ENTREATY +ENTREE +ENTRENCH +ENTRENCHED +ENTRENCHES +ENTRENCHING +ENTREPRENEUR +ENTREPRENEURIAL +ENTREPRENEURS +ENTRIES +ENTROPY +ENTRUST +ENTRUSTED +ENTRUSTING +ENTRUSTS +ENTRY +ENUMERABLE +ENUMERATE +ENUMERATED +ENUMERATES +ENUMERATING +ENUMERATION +ENUMERATIVE +ENUMERATOR +ENUMERATORS +ENUNCIATION +ENVELOP +ENVELOPE +ENVELOPED +ENVELOPER +ENVELOPES +ENVELOPING +ENVELOPS +ENVIED +ENVIES +ENVIOUS +ENVIOUSLY +ENVIOUSNESS +ENVIRON +ENVIRONING +ENVIRONMENT +ENVIRONMENTAL +ENVIRONMENTS +ENVIRONS +ENVISAGE +ENVISAGED +ENVISAGES +ENVISION +ENVISIONED +ENVISIONING +ENVISIONS +ENVOY +ENVOYS +ENVY +ENZYME +EOCENE +EPAULET +EPAULETS +EPHEMERAL +EPHESIAN +EPHESIANS +EPHESUS +EPHRAIM +EPIC +EPICENTER +EPICS +EPICUREAN +EPICURIZE +EPICURIZES +EPICURUS +EPIDEMIC +EPIDEMICS +EPIDERMIS +EPIGRAM +EPILEPTIC +EPILOGUE +EPIPHANY +EPISCOPAL +EPISCOPALIAN +EPISCOPALIANIZE +EPISCOPALIANIZES +EPISODE +EPISODES +EPISTEMOLOGICAL +EPISTEMOLOGY +EPISTLE +EPISTLES +EPITAPH +EPITAPHS +EPITAXIAL +EPITAXIALLY +EPITHET +EPITHETS +EPITOMIZE +EPITOMIZED +EPITOMIZES +EPITOMIZING +EPOCH +EPOCHS +EPSILON +EPSOM +EPSTEIN +EQUAL +EQUALED +EQUALING +EQUALITIES +EQUALITY +EQUALIZATION +EQUALIZE +EQUALIZED +EQUALIZER +EQUALIZERS +EQUALIZES +EQUALIZING +EQUALLY +EQUALS +EQUATE +EQUATED +EQUATES +EQUATING +EQUATION +EQUATIONS +EQUATOR +EQUATORIAL +EQUATORS +EQUESTRIAN +EQUIDISTANT +EQUILATERAL +EQUILIBRATE +EQUILIBRIA +EQUILIBRIUM +EQUILIBRIUMS +EQUINOX +EQUIP +EQUIPMENT +EQUIPOISE +EQUIPPED +EQUIPPING +EQUIPS +EQUITABLE +EQUITABLY +EQUITY +EQUIVALENCE +EQUIVALENCES +EQUIVALENT +EQUIVALENTLY +EQUIVALENTS +EQUIVOCAL +EQUIVOCALLY +ERA +ERADICATE +ERADICATED +ERADICATES +ERADICATING +ERADICATION +ERAS +ERASABLE +ERASE +ERASED +ERASER +ERASERS +ERASES +ERASING +ERASMUS +ERASTUS +ERASURE +ERATO +ERATOSTHENES +ERE +ERECT +ERECTED +ERECTING +ERECTION +ERECTIONS +ERECTOR +ERECTORS +ERECTS +ERG +ERGO +ERGODIC +ERIC +ERICH +ERICKSON +ERICSSON +ERIE +ERIK +ERIKSON +ERIS +ERLANG +ERLENMEYER +ERLENMEYERS +ERMINE +ERMINES +ERNE +ERNEST +ERNESTINE +ERNIE +ERNST +ERODE +EROS +EROSION +EROTIC +EROTICA +ERR +ERRAND +ERRANT +ERRATA +ERRATIC +ERRATUM +ERRED +ERRING +ERRINGLY +ERROL +ERRONEOUS +ERRONEOUSLY +ERRONEOUSNESS +ERROR +ERRORS +ERRS +ERSATZ +ERSKINE +ERUDITE +ERUPT +ERUPTION +ERVIN +ERWIN +ESCALATE +ESCALATED +ESCALATES +ESCALATING +ESCALATION +ESCAPABLE +ESCAPADE +ESCAPADES +ESCAPE +ESCAPED +ESCAPEE +ESCAPEES +ESCAPES +ESCAPING +ESCHERICHIA +ESCHEW +ESCHEWED +ESCHEWING +ESCHEWS +ESCORT +ESCORTED +ESCORTING +ESCORTS +ESCROW +ESKIMO +ESKIMOIZED +ESKIMOIZEDS +ESKIMOS +ESMARK +ESOTERIC +ESPAGNOL +ESPECIAL +ESPECIALLY +ESPIONAGE +ESPOSITO +ESPOUSE +ESPOUSED +ESPOUSES +ESPOUSING +ESPRIT +ESPY +ESQUIRE +ESQUIRES +ESSAY +ESSAYED +ESSAYS +ESSEN +ESSENCE +ESSENCES +ESSENIZE +ESSENIZES +ESSENTIAL +ESSENTIALLY +ESSENTIALS +ESSEX +ESTABLISH +ESTABLISHED +ESTABLISHES +ESTABLISHING +ESTABLISHMENT +ESTABLISHMENTS +ESTATE +ESTATES +ESTEEM +ESTEEMED +ESTEEMING +ESTEEMS +ESTELLA +ESTES +ESTHER +ESTHETICS +ESTIMATE +ESTIMATED +ESTIMATES +ESTIMATING +ESTIMATION +ESTIMATIONS +ESTONIA +ESTONIAN +ETCH +ETCHING +ETERNAL +ETERNALLY +ETERNITIES +ETERNITY +ETHAN +ETHEL +ETHER +ETHEREAL +ETHEREALLY +ETHERNET +ETHERNETS +ETHERS +ETHIC +ETHICAL +ETHICALLY +ETHICS +ETHIOPIA +ETHIOPIANS +ETHNIC +ETIQUETTE +ETRURIA +ETRUSCAN +ETYMOLOGY +EUCALYPTUS +EUCHARIST +EUCLID +EUCLIDEAN +EUGENE +EUGENIA +EULER +EULERIAN +EUMENIDES +EUNICE +EUNUCH +EUNUCHS +EUPHEMISM +EUPHEMISMS +EUPHORIA +EUPHORIC +EUPHRATES +EURASIA +EURASIAN +EUREKA +EURIPIDES +EUROPA +EUROPE +EUROPEAN +EUROPEANIZATION +EUROPEANIZATIONS +EUROPEANIZE +EUROPEANIZED +EUROPEANIZES +EUROPEANS +EURYDICE +EUTERPE +EUTHANASIA +EVA +EVACUATE +EVACUATED +EVACUATION +EVADE +EVADED +EVADES +EVADING +EVALUATE +EVALUATED +EVALUATES +EVALUATING +EVALUATION +EVALUATIONS +EVALUATIVE +EVALUATOR +EVALUATORS +EVANGELINE +EVANS +EVANSTON +EVANSVILLE +EVAPORATE +EVAPORATED +EVAPORATING +EVAPORATION +EVAPORATIVE +EVASION +EVASIVE +EVE +EVELYN +EVEN +EVENED +EVENHANDED +EVENHANDEDLY +EVENHANDEDNESS +EVENING +EVENINGS +EVENLY +EVENNESS +EVENS +EVENSEN +EVENT +EVENTFUL +EVENTFULLY +EVENTS +EVENTUAL +EVENTUALITIES +EVENTUALITY +EVENTUALLY +EVER +EVEREADY +EVEREST +EVERETT +EVERGLADE +EVERGLADES +EVERGREEN +EVERHART +EVERLASTING +EVERLASTINGLY +EVERMORE +EVERY +EVERYBODY +EVERYDAY +EVERYONE +EVERYTHING +EVERYWHERE +EVICT +EVICTED +EVICTING +EVICTION +EVICTIONS +EVICTS +EVIDENCE +EVIDENCED +EVIDENCES +EVIDENCING +EVIDENT +EVIDENTLY +EVIL +EVILLER +EVILLY +EVILS +EVINCE +EVINCED +EVINCES +EVOKE +EVOKED +EVOKES +EVOKING +EVOLUTE +EVOLUTES +EVOLUTION +EVOLUTIONARY +EVOLUTIONS +EVOLVE +EVOLVED +EVOLVES +EVOLVING +EWE +EWEN +EWES +EWING +EXACERBATE +EXACERBATED +EXACERBATES +EXACERBATING +EXACERBATION +EXACERBATIONS +EXACT +EXACTED +EXACTING +EXACTINGLY +EXACTION +EXACTIONS +EXACTITUDE +EXACTLY +EXACTNESS +EXACTS +EXAGGERATE +EXAGGERATED +EXAGGERATES +EXAGGERATING +EXAGGERATION +EXAGGERATIONS +EXALT +EXALTATION +EXALTED +EXALTING +EXALTS +EXAM +EXAMINATION +EXAMINATIONS +EXAMINE +EXAMINED +EXAMINER +EXAMINERS +EXAMINES +EXAMINING +EXAMPLE +EXAMPLES +EXAMS +EXASPERATE +EXASPERATED +EXASPERATES +EXASPERATING +EXASPERATION +EXCAVATE +EXCAVATED +EXCAVATES +EXCAVATING +EXCAVATION +EXCAVATIONS +EXCEED +EXCEEDED +EXCEEDING +EXCEEDINGLY +EXCEEDS +EXCEL +EXCELLED +EXCELLENCE +EXCELLENCES +EXCELLENCY +EXCELLENT +EXCELLENTLY +EXCELLING +EXCELS +EXCEPT +EXCEPTED +EXCEPTING +EXCEPTION +EXCEPTIONABLE +EXCEPTIONAL +EXCEPTIONALLY +EXCEPTIONS +EXCEPTS +EXCERPT +EXCERPTED +EXCERPTS +EXCESS +EXCESSES +EXCESSIVE +EXCESSIVELY +EXCHANGE +EXCHANGEABLE +EXCHANGED +EXCHANGES +EXCHANGING +EXCHEQUER +EXCHEQUERS +EXCISE +EXCISED +EXCISES +EXCISING +EXCISION +EXCITABLE +EXCITATION +EXCITATIONS +EXCITE +EXCITED +EXCITEDLY +EXCITEMENT +EXCITES +EXCITING +EXCITINGLY +EXCITON +EXCLAIM +EXCLAIMED +EXCLAIMER +EXCLAIMERS +EXCLAIMING +EXCLAIMS +EXCLAMATION +EXCLAMATIONS +EXCLAMATORY +EXCLUDE +EXCLUDED +EXCLUDES +EXCLUDING +EXCLUSION +EXCLUSIONARY +EXCLUSIONS +EXCLUSIVE +EXCLUSIVELY +EXCLUSIVENESS +EXCLUSIVITY +EXCOMMUNICATE +EXCOMMUNICATED +EXCOMMUNICATES +EXCOMMUNICATING +EXCOMMUNICATION +EXCRETE +EXCRETED +EXCRETES +EXCRETING +EXCRETION +EXCRETIONS +EXCRETORY +EXCRUCIATE +EXCURSION +EXCURSIONS +EXCUSABLE +EXCUSABLY +EXCUSE +EXCUSED +EXCUSES +EXCUSING +EXEC +EXECUTABLE +EXECUTE +EXECUTED +EXECUTES +EXECUTING +EXECUTION +EXECUTIONAL +EXECUTIONER +EXECUTIONS +EXECUTIVE +EXECUTIVES +EXECUTOR +EXECUTORS +EXEMPLAR +EXEMPLARY +EXEMPLIFICATION +EXEMPLIFIED +EXEMPLIFIER +EXEMPLIFIERS +EXEMPLIFIES +EXEMPLIFY +EXEMPLIFYING +EXEMPT +EXEMPTED +EXEMPTING +EXEMPTION +EXEMPTS +EXERCISE +EXERCISED +EXERCISER +EXERCISERS +EXERCISES +EXERCISING +EXERT +EXERTED +EXERTING +EXERTION +EXERTIONS +EXERTS +EXETER +EXHALE +EXHALED +EXHALES +EXHALING +EXHAUST +EXHAUSTED +EXHAUSTEDLY +EXHAUSTING +EXHAUSTION +EXHAUSTIVE +EXHAUSTIVELY +EXHAUSTS +EXHIBIT +EXHIBITED +EXHIBITING +EXHIBITION +EXHIBITIONS +EXHIBITOR +EXHIBITORS +EXHIBITS +EXHILARATE +EXHORT +EXHORTATION +EXHORTATIONS +EXHUME +EXIGENCY +EXILE +EXILED +EXILES +EXILING +EXIST +EXISTED +EXISTENCE +EXISTENT +EXISTENTIAL +EXISTENTIALISM +EXISTENTIALIST +EXISTENTIALISTS +EXISTENTIALLY +EXISTING +EXISTS +EXIT +EXITED +EXITING +EXITS +EXODUS +EXORBITANT +EXORBITANTLY +EXORCISM +EXORCIST +EXOSKELETON +EXOTIC +EXPAND +EXPANDABLE +EXPANDED +EXPANDER +EXPANDERS +EXPANDING +EXPANDS +EXPANSE +EXPANSES +EXPANSIBLE +EXPANSION +EXPANSIONISM +EXPANSIONS +EXPANSIVE +EXPECT +EXPECTANCY +EXPECTANT +EXPECTANTLY +EXPECTATION +EXPECTATIONS +EXPECTED +EXPECTEDLY +EXPECTING +EXPECTINGLY +EXPECTS +EXPEDIENCY +EXPEDIENT +EXPEDIENTLY +EXPEDITE +EXPEDITED +EXPEDITES +EXPEDITING +EXPEDITION +EXPEDITIONS +EXPEDITIOUS +EXPEDITIOUSLY +EXPEL +EXPELLED +EXPELLING +EXPELS +EXPEND +EXPENDABLE +EXPENDED +EXPENDING +EXPENDITURE +EXPENDITURES +EXPENDS +EXPENSE +EXPENSES +EXPENSIVE +EXPENSIVELY +EXPERIENCE +EXPERIENCED +EXPERIENCES +EXPERIENCING +EXPERIMENT +EXPERIMENTAL +EXPERIMENTALLY +EXPERIMENTATION +EXPERIMENTATIONS +EXPERIMENTED +EXPERIMENTER +EXPERIMENTERS +EXPERIMENTING +EXPERIMENTS +EXPERT +EXPERTISE +EXPERTLY +EXPERTNESS +EXPERTS +EXPIRATION +EXPIRATIONS +EXPIRE +EXPIRED +EXPIRES +EXPIRING +EXPLAIN +EXPLAINABLE +EXPLAINED +EXPLAINER +EXPLAINERS +EXPLAINING +EXPLAINS +EXPLANATION +EXPLANATIONS +EXPLANATORY +EXPLETIVE +EXPLICIT +EXPLICITLY +EXPLICITNESS +EXPLODE +EXPLODED +EXPLODES +EXPLODING +EXPLOIT +EXPLOITABLE +EXPLOITATION +EXPLOITATIONS +EXPLOITED +EXPLOITER +EXPLOITERS +EXPLOITING +EXPLOITS +EXPLORATION +EXPLORATIONS +EXPLORATORY +EXPLORE +EXPLORED +EXPLORER +EXPLORERS +EXPLORES +EXPLORING +EXPLOSION +EXPLOSIONS +EXPLOSIVE +EXPLOSIVELY +EXPLOSIVES +EXPONENT +EXPONENTIAL +EXPONENTIALLY +EXPONENTIALS +EXPONENTIATE +EXPONENTIATED +EXPONENTIATES +EXPONENTIATING +EXPONENTIATION +EXPONENTIATIONS +EXPONENTS +EXPORT +EXPORTATION +EXPORTED +EXPORTER +EXPORTERS +EXPORTING +EXPORTS +EXPOSE +EXPOSED +EXPOSER +EXPOSERS +EXPOSES +EXPOSING +EXPOSITION +EXPOSITIONS +EXPOSITORY +EXPOSURE +EXPOSURES +EXPOUND +EXPOUNDED +EXPOUNDER +EXPOUNDING +EXPOUNDS +EXPRESS +EXPRESSED +EXPRESSES +EXPRESSIBILITY +EXPRESSIBLE +EXPRESSIBLY +EXPRESSING +EXPRESSION +EXPRESSIONS +EXPRESSIVE +EXPRESSIVELY +EXPRESSIVENESS +EXPRESSLY +EXPULSION +EXPUNGE +EXPUNGED +EXPUNGES +EXPUNGING +EXPURGATE +EXQUISITE +EXQUISITELY +EXQUISITENESS +EXTANT +EXTEMPORANEOUS +EXTEND +EXTENDABLE +EXTENDED +EXTENDING +EXTENDS +EXTENSIBILITY +EXTENSIBLE +EXTENSION +EXTENSIONS +EXTENSIVE +EXTENSIVELY +EXTENT +EXTENTS +EXTENUATE +EXTENUATED +EXTENUATING +EXTENUATION +EXTERIOR +EXTERIORS +EXTERMINATE +EXTERMINATED +EXTERMINATES +EXTERMINATING +EXTERMINATION +EXTERNAL +EXTERNALLY +EXTINCT +EXTINCTION +EXTINGUISH +EXTINGUISHED +EXTINGUISHER +EXTINGUISHES +EXTINGUISHING +EXTIRPATE +EXTOL +EXTORT +EXTORTED +EXTORTION +EXTRA +EXTRACT +EXTRACTED +EXTRACTING +EXTRACTION +EXTRACTIONS +EXTRACTOR +EXTRACTORS +EXTRACTS +EXTRACURRICULAR +EXTRAMARITAL +EXTRANEOUS +EXTRANEOUSLY +EXTRANEOUSNESS +EXTRAORDINARILY +EXTRAORDINARINESS +EXTRAORDINARY +EXTRAPOLATE +EXTRAPOLATED +EXTRAPOLATES +EXTRAPOLATING +EXTRAPOLATION +EXTRAPOLATIONS +EXTRAS +EXTRATERRESTRIAL +EXTRAVAGANCE +EXTRAVAGANT +EXTRAVAGANTLY +EXTRAVAGANZA +EXTREMAL +EXTREME +EXTREMELY +EXTREMES +EXTREMIST +EXTREMISTS +EXTREMITIES +EXTREMITY +EXTRICATE +EXTRINSIC +EXTROVERT +EXUBERANCE +EXULT +EXULTATION +EXXON +EYE +EYEBALL +EYEBROW +EYEBROWS +EYED +EYEFUL +EYEGLASS +EYEGLASSES +EYEING +EYELASH +EYELID +EYELIDS +EYEPIECE +EYEPIECES +EYER +EYERS +EYES +EYESIGHT +EYEWITNESS +EYEWITNESSES +EYING +EZEKIEL +EZRA +FABER +FABIAN +FABLE +FABLED +FABLES +FABRIC +FABRICATE +FABRICATED +FABRICATES +FABRICATING +FABRICATION +FABRICS +FABULOUS +FABULOUSLY +FACADE +FACADED +FACADES +FACE +FACED +FACES +FACET +FACETED +FACETS +FACIAL +FACILE +FACILELY +FACILITATE +FACILITATED +FACILITATES +FACILITATING +FACILITIES +FACILITY +FACING +FACINGS +FACSIMILE +FACSIMILES +FACT +FACTION +FACTIONS +FACTIOUS +FACTO +FACTOR +FACTORED +FACTORIAL +FACTORIES +FACTORING +FACTORIZATION +FACTORIZATIONS +FACTORS +FACTORY +FACTS +FACTUAL +FACTUALLY +FACULTIES +FACULTY +FADE +FADED +FADEOUT +FADER +FADERS +FADES +FADING +FAFNIR +FAG +FAGIN +FAGS +FAHEY +FAHRENHEIT +FAHRENHEITS +FAIL +FAILED +FAILING +FAILINGS +FAILS +FAILSOFT +FAILURE +FAILURES +FAIN +FAINT +FAINTED +FAINTER +FAINTEST +FAINTING +FAINTLY +FAINTNESS +FAINTS +FAIR +FAIRBANKS +FAIRCHILD +FAIRER +FAIREST +FAIRFAX +FAIRFIELD +FAIRIES +FAIRING +FAIRLY +FAIRMONT +FAIRNESS +FAIRPORT +FAIRS +FAIRVIEW +FAIRY +FAIRYLAND +FAITH +FAITHFUL +FAITHFULLY +FAITHFULNESS +FAITHLESS +FAITHLESSLY +FAITHLESSNESS +FAITHS +FAKE +FAKED +FAKER +FAKES +FAKING +FALCON +FALCONER +FALCONS +FALK +FALKLAND +FALKLANDS +FALL +FALLACIES +FALLACIOUS +FALLACY +FALLEN +FALLIBILITY +FALLIBLE +FALLING +FALLOPIAN +FALLOUT +FALLOW +FALLS +FALMOUTH +FALSE +FALSEHOOD +FALSEHOODS +FALSELY +FALSENESS +FALSIFICATION +FALSIFIED +FALSIFIES +FALSIFY +FALSIFYING +FALSITY +FALSTAFF +FALTER +FALTERED +FALTERS +FAME +FAMED +FAMES +FAMILIAL +FAMILIAR +FAMILIARITIES +FAMILIARITY +FAMILIARIZATION +FAMILIARIZE +FAMILIARIZED +FAMILIARIZES +FAMILIARIZING +FAMILIARLY +FAMILIARNESS +FAMILIES +FAMILISM +FAMILY +FAMINE +FAMINES +FAMISH +FAMOUS +FAMOUSLY +FAN +FANATIC +FANATICISM +FANATICS +FANCIED +FANCIER +FANCIERS +FANCIES +FANCIEST +FANCIFUL +FANCIFULLY +FANCILY +FANCINESS +FANCY +FANCYING +FANFARE +FANFOLD +FANG +FANGLED +FANGS +FANNED +FANNIES +FANNING +FANNY +FANOUT +FANS +FANTASIES +FANTASIZE +FANTASTIC +FANTASY +FAQ +FAR +FARAD +FARADAY +FARAWAY +FARBER +FARCE +FARCES +FARE +FARED +FARES +FAREWELL +FAREWELLS +FARFETCHED +FARGO +FARINA +FARING +FARKAS +FARLEY +FARM +FARMED +FARMER +FARMERS +FARMHOUSE +FARMHOUSES +FARMING +FARMINGTON +FARMLAND +FARMS +FARMYARD +FARMYARDS +FARNSWORTH +FARRELL +FARSIGHTED +FARTHER +FARTHEST +FARTHING +FASCICLE +FASCINATE +FASCINATED +FASCINATES +FASCINATING +FASCINATION +FASCISM +FASCIST +FASHION +FASHIONABLE +FASHIONABLY +FASHIONED +FASHIONING +FASHIONS +FAST +FASTED +FASTEN +FASTENED +FASTENER +FASTENERS +FASTENING +FASTENINGS +FASTENS +FASTER +FASTEST +FASTIDIOUS +FASTING +FASTNESS +FASTS +FAT +FATAL +FATALITIES +FATALITY +FATALLY +FATALS +FATE +FATED +FATEFUL +FATES +FATHER +FATHERED +FATHERLAND +FATHERLY +FATHERS +FATHOM +FATHOMED +FATHOMING +FATHOMS +FATIGUE +FATIGUED +FATIGUES +FATIGUING +FATIMA +FATNESS +FATS +FATTEN +FATTENED +FATTENER +FATTENERS +FATTENING +FATTENS +FATTER +FATTEST +FATTY +FAUCET +FAULKNER +FAULKNERIAN +FAULT +FAULTED +FAULTING +FAULTLESS +FAULTLESSLY +FAULTS +FAULTY +FAUN +FAUNA +FAUNTLEROY +FAUST +FAUSTIAN +FAUSTUS +FAVOR +FAVORABLE +FAVORABLY +FAVORED +FAVORER +FAVORING +FAVORITE +FAVORITES +FAVORITISM +FAVORS +FAWKES +FAWN +FAWNED +FAWNING +FAWNS +FAYETTE +FAYETTEVILLE +FAZE +FEAR +FEARED +FEARFUL +FEARFULLY +FEARING +FEARLESS +FEARLESSLY +FEARLESSNESS +FEARS +FEARSOME +FEASIBILITY +FEASIBLE +FEAST +FEASTED +FEASTING +FEASTS +FEAT +FEATHER +FEATHERBED +FEATHERBEDDING +FEATHERED +FEATHERER +FEATHERERS +FEATHERING +FEATHERMAN +FEATHERS +FEATHERWEIGHT +FEATHERY +FEATS +FEATURE +FEATURED +FEATURES +FEATURING +FEBRUARIES +FEBRUARY +FECUND +FED +FEDDERS +FEDERAL +FEDERALIST +FEDERALLY +FEDERALS +FEDERATION +FEDORA +FEE +FEEBLE +FEEBLENESS +FEEBLER +FEEBLEST +FEEBLY +FEED +FEEDBACK +FEEDER +FEEDERS +FEEDING +FEEDINGS +FEEDS +FEEL +FEELER +FEELERS +FEELING +FEELINGLY +FEELINGS +FEELS +FEENEY +FEES +FEET +FEIGN +FEIGNED +FEIGNING +FELDER +FELDMAN +FELICE +FELICIA +FELICITIES +FELICITY +FELINE +FELIX +FELL +FELLATIO +FELLED +FELLING +FELLINI +FELLOW +FELLOWS +FELLOWSHIP +FELLOWSHIPS +FELON +FELONIOUS +FELONY +FELT +FELTS +FEMALE +FEMALES +FEMININE +FEMININITY +FEMINISM +FEMINIST +FEMUR +FEMURS +FEN +FENCE +FENCED +FENCER +FENCERS +FENCES +FENCING +FEND +FENTON +FENWICK +FERBER +FERDINAND +FERDINANDO +FERGUSON +FERMAT +FERMENT +FERMENTATION +FERMENTATIONS +FERMENTED +FERMENTING +FERMENTS +FERMI +FERN +FERNANDO +FERNS +FEROCIOUS +FEROCIOUSLY +FEROCIOUSNESS +FEROCITY +FERREIRA +FERRER +FERRET +FERRIED +FERRIES +FERRITE +FERRY +FERTILE +FERTILELY +FERTILITY +FERTILIZATION +FERTILIZE +FERTILIZED +FERTILIZER +FERTILIZERS +FERTILIZES +FERTILIZING +FERVENT +FERVENTLY +FERVOR +FERVORS +FESS +FESTIVAL +FESTIVALS +FESTIVE +FESTIVELY +FESTIVITIES +FESTIVITY +FETAL +FETCH +FETCHED +FETCHES +FETCHING +FETCHINGLY +FETID +FETISH +FETTER +FETTERED +FETTERS +FETTLE +FETUS +FEUD +FEUDAL +FEUDALISM +FEUDS +FEVER +FEVERED +FEVERISH +FEVERISHLY +FEVERS +FEW +FEWER +FEWEST +FEWNESS +FIANCE +FIANCEE +FIASCO +FIAT +FIB +FIBBING +FIBER +FIBERGLAS +FIBERS +FIBONACCI +FIBROSITIES +FIBROSITY +FIBROUS +FIBROUSLY +FICKLE +FICKLENESS +FICTION +FICTIONAL +FICTIONALLY +FICTIONS +FICTITIOUS +FICTITIOUSLY +FIDDLE +FIDDLED +FIDDLER +FIDDLES +FIDDLESTICK +FIDDLESTICKS +FIDDLING +FIDEL +FIDELITY +FIDGET +FIDUCIAL +FIEF +FIEFDOM +FIELD +FIELDED +FIELDER +FIELDERS +FIELDING +FIELDS +FIELDWORK +FIEND +FIENDISH +FIERCE +FIERCELY +FIERCENESS +FIERCER +FIERCEST +FIERY +FIFE +FIFTEEN +FIFTEENS +FIFTEENTH +FIFTH +FIFTIES +FIFTIETH +FIFTY +FIG +FIGARO +FIGHT +FIGHTER +FIGHTERS +FIGHTING +FIGHTS +FIGS +FIGURATIVE +FIGURATIVELY +FIGURE +FIGURED +FIGURES +FIGURING +FIGURINGS +FIJI +FIJIAN +FIJIANS +FILAMENT +FILAMENTS +FILE +FILED +FILENAME +FILENAMES +FILER +FILES +FILIAL +FILIBUSTER +FILING +FILINGS +FILIPINO +FILIPINOS +FILIPPO +FILL +FILLABLE +FILLED +FILLER +FILLERS +FILLING +FILLINGS +FILLMORE +FILLS +FILLY +FILM +FILMED +FILMING +FILMS +FILTER +FILTERED +FILTERING +FILTERS +FILTH +FILTHIER +FILTHIEST +FILTHINESS +FILTHY +FIN +FINAL +FINALITY +FINALIZATION +FINALIZE +FINALIZED +FINALIZES +FINALIZING +FINALLY +FINALS +FINANCE +FINANCED +FINANCES +FINANCIAL +FINANCIALLY +FINANCIER +FINANCIERS +FINANCING +FIND +FINDER +FINDERS +FINDING +FINDINGS +FINDS +FINE +FINED +FINELY +FINENESS +FINER +FINES +FINESSE +FINESSED +FINESSING +FINEST +FINGER +FINGERED +FINGERING +FINGERINGS +FINGERNAIL +FINGERPRINT +FINGERPRINTS +FINGERS +FINGERTIP +FINICKY +FINING +FINISH +FINISHED +FINISHER +FINISHERS +FINISHES +FINISHING +FINITE +FINITELY +FINITENESS +FINK +FINLAND +FINLEY +FINN +FINNEGAN +FINNISH +FINNS +FINNY +FINS +FIORELLO +FIORI +FIR +FIRE +FIREARM +FIREARMS +FIREBOAT +FIREBREAK +FIREBUG +FIRECRACKER +FIRED +FIREFLIES +FIREFLY +FIREHOUSE +FIRELIGHT +FIREMAN +FIREMEN +FIREPLACE +FIREPLACES +FIREPOWER +FIREPROOF +FIRER +FIRERS +FIRES +FIRESIDE +FIRESTONE +FIREWALL +FIREWOOD +FIREWORKS +FIRING +FIRINGS +FIRM +FIRMAMENT +FIRMED +FIRMER +FIRMEST +FIRMING +FIRMLY +FIRMNESS +FIRMS +FIRMWARE +FIRST +FIRSTHAND +FIRSTLY +FIRSTS +FISCAL +FISCALLY +FISCHBEIN +FISCHER +FISH +FISHED +FISHER +FISHERMAN +FISHERMEN +FISHERS +FISHERY +FISHES +FISHING +FISHKILL +FISHMONGER +FISHPOND +FISHY +FISK +FISKE +FISSION +FISSURE +FISSURED +FIST +FISTED +FISTICUFF +FISTS +FIT +FITCH +FITCHBURG +FITFUL +FITFULLY +FITLY +FITNESS +FITS +FITTED +FITTER +FITTERS +FITTING +FITTINGLY +FITTINGS +FITZGERALD +FITZPATRICK +FITZROY +FIVE +FIVEFOLD +FIVES +FIX +FIXATE +FIXATED +FIXATES +FIXATING +FIXATION +FIXATIONS +FIXED +FIXEDLY +FIXEDNESS +FIXER +FIXERS +FIXES +FIXING +FIXINGS +FIXTURE +FIXTURES +FIZEAU +FIZZLE +FIZZLED +FLABBERGAST +FLABBERGASTED +FLACK +FLAG +FLAGELLATE +FLAGGED +FLAGGING +FLAGLER +FLAGPOLE +FLAGRANT +FLAGRANTLY +FLAGS +FLAGSTAFF +FLAIL +FLAIR +FLAK +FLAKE +FLAKED +FLAKES +FLAKING +FLAKY +FLAM +FLAMBOYANT +FLAME +FLAMED +FLAMER +FLAMERS +FLAMES +FLAMING +FLAMMABLE +FLANAGAN +FLANDERS +FLANK +FLANKED +FLANKER +FLANKING +FLANKS +FLANNEL +FLANNELS +FLAP +FLAPS +FLARE +FLARED +FLARES +FLARING +FLASH +FLASHBACK +FLASHED +FLASHER +FLASHERS +FLASHES +FLASHING +FLASHLIGHT +FLASHLIGHTS +FLASHY +FLASK +FLAT +FLATBED +FLATLY +FLATNESS +FLATS +FLATTEN +FLATTENED +FLATTENING +FLATTER +FLATTERED +FLATTERER +FLATTERING +FLATTERY +FLATTEST +FLATULENT +FLATUS +FLATWORM +FLAUNT +FLAUNTED +FLAUNTING +FLAUNTS +FLAVOR +FLAVORED +FLAVORING +FLAVORINGS +FLAVORS +FLAW +FLAWED +FLAWLESS +FLAWLESSLY +FLAWS +FLAX +FLAXEN +FLEA +FLEAS +FLED +FLEDERMAUS +FLEDGED +FLEDGLING +FLEDGLINGS +FLEE +FLEECE +FLEECES +FLEECY +FLEEING +FLEES +FLEET +FLEETEST +FLEETING +FLEETLY +FLEETNESS +FLEETS +FLEISCHMAN +FLEISHER +FLEMING +FLEMINGS +FLEMISH +FLEMISHED +FLEMISHES +FLEMISHING +FLESH +FLESHED +FLESHES +FLESHING +FLESHLY +FLESHY +FLETCHER +FLETCHERIZE +FLETCHERIZES +FLEW +FLEX +FLEXIBILITIES +FLEXIBILITY +FLEXIBLE +FLEXIBLY +FLICK +FLICKED +FLICKER +FLICKERING +FLICKING +FLICKS +FLIER +FLIERS +FLIES +FLIGHT +FLIGHTS +FLIMSY +FLINCH +FLINCHED +FLINCHES +FLINCHING +FLING +FLINGS +FLINT +FLINTY +FLIP +FLIPFLOP +FLIPPED +FLIPS +FLIRT +FLIRTATION +FLIRTATIOUS +FLIRTED +FLIRTING +FLIRTS +FLIT +FLITTING +FLO +FLOAT +FLOATED +FLOATER +FLOATING +FLOATS +FLOCK +FLOCKED +FLOCKING +FLOCKS +FLOG +FLOGGING +FLOOD +FLOODED +FLOODING +FLOODLIGHT +FLOODLIT +FLOODS +FLOOR +FLOORED +FLOORING +FLOORINGS +FLOORS +FLOP +FLOPPIES +FLOPPILY +FLOPPING +FLOPPY +FLOPS +FLORA +FLORAL +FLORENCE +FLORENTINE +FLORID +FLORIDA +FLORIDIAN +FLORIDIANS +FLORIN +FLORIST +FLOSS +FLOSSED +FLOSSES +FLOSSING +FLOTATION +FLOTILLA +FLOUNDER +FLOUNDERED +FLOUNDERING +FLOUNDERS +FLOUR +FLOURED +FLOURISH +FLOURISHED +FLOURISHES +FLOURISHING +FLOW +FLOWCHART +FLOWCHARTING +FLOWCHARTS +FLOWED +FLOWER +FLOWERED +FLOWERINESS +FLOWERING +FLOWERPOT +FLOWERS +FLOWERY +FLOWING +FLOWN +FLOWS +FLOYD +FLU +FLUCTUATE +FLUCTUATES +FLUCTUATING +FLUCTUATION +FLUCTUATIONS +FLUE +FLUENCY +FLUENT +FLUENTLY +FLUFF +FLUFFIER +FLUFFIEST +FLUFFY +FLUID +FLUIDITY +FLUIDLY +FLUIDS +FLUKE +FLUNG +FLUNKED +FLUORESCE +FLUORESCENT +FLURRIED +FLURRY +FLUSH +FLUSHED +FLUSHES +FLUSHING +FLUTE +FLUTED +FLUTING +FLUTTER +FLUTTERED +FLUTTERING +FLUTTERS +FLUX +FLY +FLYABLE +FLYER +FLYERS +FLYING +FLYNN +FOAL +FOAM +FOAMED +FOAMING +FOAMS +FOAMY +FOB +FOBBING +FOCAL +FOCALLY +FOCI +FOCUS +FOCUSED +FOCUSES +FOCUSING +FOCUSSED +FODDER +FOE +FOES +FOG +FOGARTY +FOGGED +FOGGIER +FOGGIEST +FOGGILY +FOGGING +FOGGY +FOGS +FOGY +FOIBLE +FOIL +FOILED +FOILING +FOILS +FOIST +FOLD +FOLDED +FOLDER +FOLDERS +FOLDING +FOLDOUT +FOLDS +FOLEY +FOLIAGE +FOLK +FOLKLORE +FOLKS +FOLKSONG +FOLKSY +FOLLIES +FOLLOW +FOLLOWED +FOLLOWER +FOLLOWERS +FOLLOWING +FOLLOWINGS +FOLLOWS +FOLLY +FOLSOM +FOMALHAUT +FOND +FONDER +FONDLE +FONDLED +FONDLES +FONDLING +FONDLY +FONDNESS +FONT +FONTAINE +FONTAINEBLEAU +FONTANA +FONTS +FOOD +FOODS +FOODSTUFF +FOODSTUFFS +FOOL +FOOLED +FOOLHARDY +FOOLING +FOOLISH +FOOLISHLY +FOOLISHNESS +FOOLPROOF +FOOLS +FOOT +FOOTAGE +FOOTBALL +FOOTBALLS +FOOTBRIDGE +FOOTE +FOOTED +FOOTER +FOOTERS +FOOTFALL +FOOTHILL +FOOTHOLD +FOOTING +FOOTMAN +FOOTNOTE +FOOTNOTES +FOOTPATH +FOOTPRINT +FOOTPRINTS +FOOTSTEP +FOOTSTEPS +FOR +FORAGE +FORAGED +FORAGES +FORAGING +FORAY +FORAYS +FORBADE +FORBEAR +FORBEARANCE +FORBEARS +FORBES +FORBID +FORBIDDEN +FORBIDDING +FORBIDS +FORCE +FORCED +FORCEFUL +FORCEFULLY +FORCEFULNESS +FORCER +FORCES +FORCIBLE +FORCIBLY +FORCING +FORD +FORDHAM +FORDS +FORE +FOREARM +FOREARMS +FOREBODING +FORECAST +FORECASTED +FORECASTER +FORECASTERS +FORECASTING +FORECASTLE +FORECASTS +FOREFATHER +FOREFATHERS +FOREFINGER +FOREFINGERS +FOREGO +FOREGOES +FOREGOING +FOREGONE +FOREGROUND +FOREHEAD +FOREHEADS +FOREIGN +FOREIGNER +FOREIGNERS +FOREIGNS +FOREMAN +FOREMOST +FORENOON +FORENSIC +FORERUNNERS +FORESEE +FORESEEABLE +FORESEEN +FORESEES +FORESIGHT +FORESIGHTED +FOREST +FORESTALL +FORESTALLED +FORESTALLING +FORESTALLMENT +FORESTALLS +FORESTED +FORESTER +FORESTERS +FORESTRY +FORESTS +FORETELL +FORETELLING +FORETELLS +FORETOLD +FOREVER +FOREWARN +FOREWARNED +FOREWARNING +FOREWARNINGS +FOREWARNS +FORFEIT +FORFEITED +FORFEITURE +FORGAVE +FORGE +FORGED +FORGER +FORGERIES +FORGERY +FORGES +FORGET +FORGETFUL +FORGETFULNESS +FORGETS +FORGETTABLE +FORGETTABLY +FORGETTING +FORGING +FORGIVABLE +FORGIVABLY +FORGIVE +FORGIVEN +FORGIVENESS +FORGIVES +FORGIVING +FORGIVINGLY +FORGOT +FORGOTTEN +FORK +FORKED +FORKING +FORKLIFT +FORKS +FORLORN +FORLORNLY +FORM +FORMAL +FORMALISM +FORMALISMS +FORMALITIES +FORMALITY +FORMALIZATION +FORMALIZATIONS +FORMALIZE +FORMALIZED +FORMALIZES +FORMALIZING +FORMALLY +FORMANT +FORMANTS +FORMAT +FORMATION +FORMATIONS +FORMATIVE +FORMATIVELY +FORMATS +FORMATTED +FORMATTER +FORMATTERS +FORMATTING +FORMED +FORMER +FORMERLY +FORMICA +FORMICAS +FORMIDABLE +FORMING +FORMOSA +FORMOSAN +FORMS +FORMULA +FORMULAE +FORMULAS +FORMULATE +FORMULATED +FORMULATES +FORMULATING +FORMULATION +FORMULATIONS +FORMULATOR +FORMULATORS +FORNICATION +FORREST +FORSAKE +FORSAKEN +FORSAKES +FORSAKING +FORSYTHE +FORT +FORTE +FORTESCUE +FORTH +FORTHCOMING +FORTHRIGHT +FORTHWITH +FORTIER +FORTIES +FORTIETH +FORTIFICATION +FORTIFICATIONS +FORTIFIED +FORTIFIES +FORTIFY +FORTIFYING +FORTIORI +FORTITUDE +FORTNIGHT +FORTNIGHTLY +FORTRAN +FORTRAN +FORTRESS +FORTRESSES +FORTS +FORTUITOUS +FORTUITOUSLY +FORTUNATE +FORTUNATELY +FORTUNE +FORTUNES +FORTY +FORUM +FORUMS +FORWARD +FORWARDED +FORWARDER +FORWARDING +FORWARDNESS +FORWARDS +FOSS +FOSSIL +FOSTER +FOSTERED +FOSTERING +FOSTERS +FOUGHT +FOUL +FOULED +FOULEST +FOULING +FOULLY +FOULMOUTH +FOULNESS +FOULS +FOUND +FOUNDATION +FOUNDATIONS +FOUNDED +FOUNDER +FOUNDERED +FOUNDERS +FOUNDING +FOUNDLING +FOUNDRIES +FOUNDRY +FOUNDS +FOUNT +FOUNTAIN +FOUNTAINS +FOUNTS +FOUR +FOURFOLD +FOURIER +FOURS +FOURSCORE +FOURSOME +FOURSQUARE +FOURTEEN +FOURTEENS +FOURTEENTH +FOURTH +FOWL +FOWLER +FOWLS +FOX +FOXES +FOXHALL +FRACTION +FRACTIONAL +FRACTIONALLY +FRACTIONS +FRACTURE +FRACTURED +FRACTURES +FRACTURING +FRAGILE +FRAGMENT +FRAGMENTARY +FRAGMENTATION +FRAGMENTED +FRAGMENTING +FRAGMENTS +FRAGRANCE +FRAGRANCES +FRAGRANT +FRAGRANTLY +FRAIL +FRAILEST +FRAILTY +FRAME +FRAMED +FRAMER +FRAMES +FRAMEWORK +FRAMEWORKS +FRAMING +FRAN +FRANC +FRANCAISE +FRANCE +FRANCES +FRANCESCA +FRANCESCO +FRANCHISE +FRANCHISES +FRANCIE +FRANCINE +FRANCIS +FRANCISCAN +FRANCISCANS +FRANCISCO +FRANCIZE +FRANCIZES +FRANCO +FRANCOIS +FRANCOISE +FRANCS +FRANK +FRANKED +FRANKEL +FRANKER +FRANKEST +FRANKFORT +FRANKFURT +FRANKIE +FRANKING +FRANKLINIZATION +FRANKLINIZATIONS +FRANKLY +FRANKNESS +FRANKS +FRANNY +FRANTIC +FRANTICALLY +FRANZ +FRASER +FRATERNAL +FRATERNALLY +FRATERNITIES +FRATERNITY +FRAU +FRAUD +FRAUDS +FRAUDULENT +FRAUGHT +FRAY +FRAYED +FRAYING +FRAYNE +FRAYS +FRAZIER +FRAZZLE +FREAK +FREAKISH +FREAKS +FRECKLE +FRECKLED +FRECKLES +FRED +FREDDIE +FREDDY +FREDERIC +FREDERICK +FREDERICKS +FREDERICKSBURG +FREDERICO +FREDERICTON +FREDHOLM +FREDRICK +FREDRICKSON +FREE +FREED +FREEDMAN +FREEDOM +FREEDOMS +FREEING +FREEINGS +FREELY +FREEMAN +FREEMASON +FREEMASONRY +FREEMASONS +FREENESS +FREEPORT +FREER +FREES +FREEST +FREESTYLE +FREETOWN +FREEWAY +FREEWHEEL +FREEZE +FREEZER +FREEZERS +FREEZES +FREEZING +FREIDA +FREIGHT +FREIGHTED +FREIGHTER +FREIGHTERS +FREIGHTING +FREIGHTS +FRENCH +FRENCHIZE +FRENCHIZES +FRENCHMAN +FRENCHMEN +FRENETIC +FRENZIED +FRENZY +FREON +FREQUENCIES +FREQUENCY +FREQUENT +FREQUENTED +FREQUENTER +FREQUENTERS +FREQUENTING +FREQUENTLY +FREQUENTS +FRESCO +FRESCOES +FRESH +FRESHEN +FRESHENED +FRESHENER +FRESHENERS +FRESHENING +FRESHENS +FRESHER +FRESHEST +FRESHLY +FRESHMAN +FRESHMEN +FRESHNESS +FRESHWATER +FRESNEL +FRESNO +FRET +FRETFUL +FRETFULLY +FRETFULNESS +FREUD +FREUDIAN +FREUDIANISM +FREUDIANISMS +FREUDIANS +FREY +FREYA +FRIAR +FRIARS +FRICATIVE +FRICATIVES +FRICK +FRICTION +FRICTIONLESS +FRICTIONS +FRIDAY +FRIDAYS +FRIED +FRIEDMAN +FRIEDRICH +FRIEND +FRIENDLESS +FRIENDLIER +FRIENDLIEST +FRIENDLINESS +FRIENDLY +FRIENDS +FRIENDSHIP +FRIENDSHIPS +FRIES +FRIESLAND +FRIEZE +FRIEZES +FRIGATE +FRIGATES +FRIGGA +FRIGHT +FRIGHTEN +FRIGHTENED +FRIGHTENING +FRIGHTENINGLY +FRIGHTENS +FRIGHTFUL +FRIGHTFULLY +FRIGHTFULNESS +FRIGID +FRIGIDAIRE +FRILL +FRILLS +FRINGE +FRINGED +FRISBEE +FRISIA +FRISIAN +FRISK +FRISKED +FRISKING +FRISKS +FRISKY +FRITO +FRITTER +FRITZ +FRIVOLITY +FRIVOLOUS +FRIVOLOUSLY +FRO +FROCK +FROCKS +FROG +FROGS +FROLIC +FROLICS +FROM +FRONT +FRONTAGE +FRONTAL +FRONTED +FRONTIER +FRONTIERS +FRONTIERSMAN +FRONTIERSMEN +FRONTING +FRONTS +FROST +FROSTBELT +FROSTBITE +FROSTBITTEN +FROSTED +FROSTING +FROSTS +FROSTY +FROTH +FROTHING +FROTHY +FROWN +FROWNED +FROWNING +FROWNS +FROZE +FROZEN +FROZENLY +FRUEHAUF +FRUGAL +FRUGALLY +FRUIT +FRUITFUL +FRUITFULLY +FRUITFULNESS +FRUITION +FRUITLESS +FRUITLESSLY +FRUITS +FRUSTRATE +FRUSTRATED +FRUSTRATES +FRUSTRATING +FRUSTRATION +FRUSTRATIONS +FRY +FRYE +FUCHS +FUCHSIA +FUDGE +FUEL +FUELED +FUELING +FUELS +FUGITIVE +FUGITIVES +FUGUE +FUJI +FUJITSU +FULBRIGHT +FULBRIGHTS +FULCRUM +FULFILL +FULFILLED +FULFILLING +FULFILLMENT +FULFILLMENTS +FULFILLS +FULL +FULLER +FULLERTON +FULLEST +FULLNESS +FULLY +FULMINATE +FULTON +FUMBLE +FUMBLED +FUMBLING +FUME +FUMED +FUMES +FUMING +FUN +FUNCTION +FUNCTIONAL +FUNCTIONALITIES +FUNCTIONALITY +FUNCTIONALLY +FUNCTIONALS +FUNCTIONARY +FUNCTIONED +FUNCTIONING +FUNCTIONS +FUNCTOR +FUNCTORS +FUND +FUNDAMENTAL +FUNDAMENTALLY +FUNDAMENTALS +FUNDED +FUNDER +FUNDERS +FUNDING +FUNDS +FUNERAL +FUNERALS +FUNEREAL +FUNGAL +FUNGI +FUNGIBLE +FUNGICIDE +FUNGUS +FUNK +FUNNEL +FUNNELED +FUNNELING +FUNNELS +FUNNIER +FUNNIEST +FUNNILY +FUNNINESS +FUNNY +FUR +FURIES +FURIOUS +FURIOUSER +FURIOUSLY +FURLONG +FURLOUGH +FURMAN +FURNACE +FURNACES +FURNISH +FURNISHED +FURNISHES +FURNISHING +FURNISHINGS +FURNITURE +FURRIER +FURROW +FURROWED +FURROWS +FURRY +FURS +FURTHER +FURTHERED +FURTHERING +FURTHERMORE +FURTHERMOST +FURTHERS +FURTHEST +FURTIVE +FURTIVELY +FURTIVENESS +FURY +FUSE +FUSED +FUSES +FUSING +FUSION +FUSS +FUSSING +FUSSY +FUTILE +FUTILITY +FUTURE +FUTURES +FUTURISTIC +FUZZ +FUZZIER +FUZZINESS +FUZZY +GAB +GABARDINE +GABBING +GABERONES +GABLE +GABLED +GABLER +GABLES +GABON +GABORONE +GABRIEL +GABRIELLE +GAD +GADFLY +GADGET +GADGETRY +GADGETS +GAELIC +GAELICIZATION +GAELICIZATIONS +GAELICIZE +GAELICIZES +GAG +GAGGED +GAGGING +GAGING +GAGS +GAIETIES +GAIETY +GAIL +GAILY +GAIN +GAINED +GAINER +GAINERS +GAINES +GAINESVILLE +GAINFUL +GAINING +GAINS +GAIT +GAITED +GAITER +GAITERS +GAITHERSBURG +GALACTIC +GALAHAD +GALAPAGOS +GALATEA +GALATEAN +GALATEANS +GALATIA +GALATIANS +GALAXIES +GALAXY +GALBREATH +GALE +GALEN +GALILEAN +GALILEE +GALILEO +GALL +GALLAGHER +GALLANT +GALLANTLY +GALLANTRY +GALLANTS +GALLED +GALLERIED +GALLERIES +GALLERY +GALLEY +GALLEYS +GALLING +GALLON +GALLONS +GALLOP +GALLOPED +GALLOPER +GALLOPING +GALLOPS +GALLOWAY +GALLOWS +GALLS +GALLSTONE +GALLUP +GALOIS +GALT +GALVESTON +GALVIN +GALWAY +GAMBIA +GAMBIT +GAMBLE +GAMBLED +GAMBLER +GAMBLERS +GAMBLES +GAMBLING +GAMBOL +GAME +GAMED +GAMELY +GAMENESS +GAMES +GAMING +GAMMA +GANDER +GANDHI +GANDHIAN +GANG +GANGES +GANGLAND +GANGLING +GANGPLANK +GANGRENE +GANGS +GANGSTER +GANGSTERS +GANNETT +GANTRY +GANYMEDE +GAP +GAPE +GAPED +GAPES +GAPING +GAPS +GARAGE +GARAGED +GARAGES +GARB +GARBAGE +GARBAGES +GARBED +GARBLE +GARBLED +GARCIA +GARDEN +GARDENED +GARDENER +GARDENERS +GARDENING +GARDENS +GARDNER +GARFIELD +GARFUNKEL +GARGANTUAN +GARGLE +GARGLED +GARGLES +GARGLING +GARIBALDI +GARLAND +GARLANDED +GARLIC +GARMENT +GARMENTS +GARNER +GARNERED +GARNETT +GARNISH +GARRETT +GARRISON +GARRISONED +GARRISONIAN +GARRY +GARTER +GARTERS +GARTH +GARVEY +GARY +GAS +GASCONY +GASEOUS +GASEOUSLY +GASES +GASH +GASHES +GASKET +GASLIGHT +GASOLINE +GASP +GASPED +GASPEE +GASPING +GASPS +GASSED +GASSER +GASSET +GASSING +GASSINGS +GASSY +GASTON +GASTRIC +GASTROINTESTINAL +GASTRONOME +GASTRONOMY +GATE +GATED +GATES +GATEWAY +GATEWAYS +GATHER +GATHERED +GATHERER +GATHERERS +GATHERING +GATHERINGS +GATHERS +GATING +GATLINBURG +GATOR +GATSBY +GAUCHE +GAUDINESS +GAUDY +GAUGE +GAUGED +GAUGES +GAUGUIN +GAUL +GAULLE +GAULS +GAUNT +GAUNTLEY +GAUNTNESS +GAUSSIAN +GAUTAMA +GAUZE +GAVE +GAVEL +GAVIN +GAWK +GAWKY +GAY +GAYER +GAYEST +GAYETY +GAYLOR +GAYLORD +GAYLY +GAYNESS +GAYNOR +GAZE +GAZED +GAZELLE +GAZER +GAZERS +GAZES +GAZETTE +GAZING +GEAR +GEARED +GEARING +GEARS +GEARY +GECKO +GEESE +GEHRIG +GEIGER +GEIGY +GEISHA +GEL +GELATIN +GELATINE +GELATINOUS +GELD +GELLED +GELLING +GELS +GEM +GEMINI +GEMINID +GEMMA +GEMS +GENDER +GENDERS +GENE +GENEALOGY +GENERAL +GENERALIST +GENERALISTS +GENERALITIES +GENERALITY +GENERALIZATION +GENERALIZATIONS +GENERALIZE +GENERALIZED +GENERALIZER +GENERALIZERS +GENERALIZES +GENERALIZING +GENERALLY +GENERALS +GENERATE +GENERATED +GENERATES +GENERATING +GENERATION +GENERATIONS +GENERATIVE +GENERATOR +GENERATORS +GENERIC +GENERICALLY +GENEROSITIES +GENEROSITY +GENEROUS +GENEROUSLY +GENEROUSNESS +GENES +GENESCO +GENESIS +GENETIC +GENETICALLY +GENEVA +GENEVIEVE +GENIAL +GENIALLY +GENIE +GENIUS +GENIUSES +GENOA +GENRE +GENRES +GENT +GENTEEL +GENTILE +GENTLE +GENTLEMAN +GENTLEMANLY +GENTLEMEN +GENTLENESS +GENTLER +GENTLEST +GENTLEWOMAN +GENTLY +GENTRY +GENUINE +GENUINELY +GENUINENESS +GENUS +GEOCENTRIC +GEODESIC +GEODESY +GEODETIC +GEOFF +GEOFFREY +GEOGRAPHER +GEOGRAPHIC +GEOGRAPHICAL +GEOGRAPHICALLY +GEOGRAPHY +GEOLOGICAL +GEOLOGIST +GEOLOGISTS +GEOLOGY +GEOMETRIC +GEOMETRICAL +GEOMETRICALLY +GEOMETRICIAN +GEOMETRIES +GEOMETRY +GEOPHYSICAL +GEOPHYSICS +GEORGE +GEORGES +GEORGETOWN +GEORGIA +GEORGIAN +GEORGIANS +GEOSYNCHRONOUS +GERALD +GERALDINE +GERANIUM +GERARD +GERBER +GERBIL +GERHARD +GERHARDT +GERIATRIC +GERM +GERMAN +GERMANE +GERMANIA +GERMANIC +GERMANS +GERMANTOWN +GERMANY +GERMICIDE +GERMINAL +GERMINATE +GERMINATED +GERMINATES +GERMINATING +GERMINATION +GERMS +GEROME +GERRY +GERSHWIN +GERSHWINS +GERTRUDE +GERUND +GESTAPO +GESTURE +GESTURED +GESTURES +GESTURING +GET +GETAWAY +GETS +GETTER +GETTERS +GETTING +GETTY +GETTYSBURG +GEYSER +GHANA +GHANIAN +GHASTLY +GHENT +GHETTO +GHOST +GHOSTED +GHOSTLY +GHOSTS +GIACOMO +GIANT +GIANTS +GIBBERISH +GIBBONS +GIBBS +GIBBY +GIBRALTAR +GIBSON +GIDDINESS +GIDDINGS +GIDDY +GIDEON +GIFFORD +GIFT +GIFTED +GIFTS +GIG +GIGABIT +GIGABITS +GIGABYTE +GIGABYTES +GIGACYCLE +GIGAHERTZ +GIGANTIC +GIGAVOLT +GIGAWATT +GIGGLE +GIGGLED +GIGGLES +GIGGLING +GIL +GILBERTSON +GILCHRIST +GILD +GILDED +GILDING +GILDS +GILEAD +GILES +GILKSON +GILL +GILLESPIE +GILLETTE +GILLIGAN +GILLS +GILMORE +GILT +GIMBEL +GIMMICK +GIMMICKS +GIN +GINA +GINGER +GINGERBREAD +GINGERLY +GINGHAM +GINGHAMS +GINN +GINO +GINS +GINSBERG +GINSBURG +GIOCONDA +GIORGIO +GIOVANNI +GIPSIES +GIPSY +GIRAFFE +GIRAFFES +GIRD +GIRDER +GIRDERS +GIRDLE +GIRL +GIRLFRIEND +GIRLIE +GIRLISH +GIRLS +GIRT +GIRTH +GIST +GIULIANO +GIUSEPPE +GIVE +GIVEAWAY +GIVEN +GIVER +GIVERS +GIVES +GIVING +GLACIAL +GLACIER +GLACIERS +GLAD +GLADDEN +GLADDER +GLADDEST +GLADE +GLADIATOR +GLADLY +GLADNESS +GLADSTONE +GLADYS +GLAMOR +GLAMOROUS +GLAMOUR +GLANCE +GLANCED +GLANCES +GLANCING +GLAND +GLANDS +GLANDULAR +GLARE +GLARED +GLARES +GLARING +GLARINGLY +GLASGOW +GLASS +GLASSED +GLASSES +GLASSY +GLASWEGIAN +GLAUCOMA +GLAZE +GLAZED +GLAZER +GLAZES +GLAZING +GLEAM +GLEAMED +GLEAMING +GLEAMS +GLEAN +GLEANED +GLEANER +GLEANING +GLEANINGS +GLEANS +GLEASON +GLEE +GLEEFUL +GLEEFULLY +GLEES +GLEN +GLENDA +GLENDALE +GLENN +GLENS +GLIDDEN +GLIDE +GLIDED +GLIDER +GLIDERS +GLIDES +GLIMMER +GLIMMERED +GLIMMERING +GLIMMERS +GLIMPSE +GLIMPSED +GLIMPSES +GLINT +GLINTED +GLINTING +GLINTS +GLISTEN +GLISTENED +GLISTENING +GLISTENS +GLITCH +GLITTER +GLITTERED +GLITTERING +GLITTERS +GLOAT +GLOBAL +GLOBALLY +GLOBE +GLOBES +GLOBULAR +GLOBULARITY +GLOOM +GLOOMILY +GLOOMY +GLORIA +GLORIANA +GLORIES +GLORIFICATION +GLORIFIED +GLORIFIES +GLORIFY +GLORIOUS +GLORIOUSLY +GLORY +GLORYING +GLOSS +GLOSSARIES +GLOSSARY +GLOSSED +GLOSSES +GLOSSING +GLOSSY +GLOTTAL +GLOUCESTER +GLOVE +GLOVED +GLOVER +GLOVERS +GLOVES +GLOVING +GLOW +GLOWED +GLOWER +GLOWERS +GLOWING +GLOWINGLY +GLOWS +GLUE +GLUED +GLUES +GLUING +GLUT +GLUTTON +GLYNN +GNASH +GNAT +GNATS +GNAW +GNAWED +GNAWING +GNAWS +GNOME +GNOMON +GNU +GOA +GOAD +GOADED +GOAL +GOALS +GOAT +GOATEE +GOATEES +GOATS +GOBBLE +GOBBLED +GOBBLER +GOBBLERS +GOBBLES +GOBI +GOBLET +GOBLETS +GOBLIN +GOBLINS +GOD +GODDARD +GODDESS +GODDESSES +GODFATHER +GODFREY +GODHEAD +GODLIKE +GODLY +GODMOTHER +GODMOTHERS +GODOT +GODPARENT +GODS +GODSEND +GODSON +GODWIN +GODZILLA +GOES +GOETHE +GOFF +GOGGLES +GOGH +GOING +GOINGS +GOLD +GOLDA +GOLDBERG +GOLDEN +GOLDENLY +GOLDENNESS +GOLDENROD +GOLDFIELD +GOLDFISH +GOLDING +GOLDMAN +GOLDS +GOLDSMITH +GOLDSTEIN +GOLDSTINE +GOLDWATER +GOLETA +GOLF +GOLFER +GOLFERS +GOLFING +GOLIATH +GOLLY +GOMEZ +GONDOLA +GONE +GONER +GONG +GONGS +GONZALES +GONZALEZ +GOOD +GOODBY +GOODBYE +GOODE +GOODIES +GOODLY +GOODMAN +GOODNESS +GOODRICH +GOODS +GOODWILL +GOODWIN +GOODY +GOODYEAR +GOOF +GOOFED +GOOFS +GOOFY +GOOSE +GOPHER +GORDIAN +GORDON +GORE +GOREN +GORGE +GORGEOUS +GORGEOUSLY +GORGES +GORGING +GORHAM +GORILLA +GORILLAS +GORKY +GORTON +GORY +GOSH +GOSPEL +GOSPELERS +GOSPELS +GOSSIP +GOSSIPED +GOSSIPING +GOSSIPS +GOT +GOTHAM +GOTHIC +GOTHICALLY +GOTHICISM +GOTHICIZE +GOTHICIZED +GOTHICIZER +GOTHICIZERS +GOTHICIZES +GOTHICIZING +GOTO +GOTOS +GOTTEN +GOTTFRIED +GOUCHER +GOUDA +GOUGE +GOUGED +GOUGES +GOUGING +GOULD +GOURD +GOURMET +GOUT +GOVERN +GOVERNANCE +GOVERNED +GOVERNESS +GOVERNING +GOVERNMENT +GOVERNMENTAL +GOVERNMENTALLY +GOVERNMENTS +GOVERNOR +GOVERNORS +GOVERNS +GOWN +GOWNED +GOWNS +GRAB +GRABBED +GRABBER +GRABBERS +GRABBING +GRABBINGS +GRABS +GRACE +GRACED +GRACEFUL +GRACEFULLY +GRACEFULNESS +GRACES +GRACIE +GRACING +GRACIOUS +GRACIOUSLY +GRACIOUSNESS +GRAD +GRADATION +GRADATIONS +GRADE +GRADED +GRADER +GRADERS +GRADES +GRADIENT +GRADIENTS +GRADING +GRADINGS +GRADUAL +GRADUALLY +GRADUATE +GRADUATED +GRADUATES +GRADUATING +GRADUATION +GRADUATIONS +GRADY +GRAFF +GRAFT +GRAFTED +GRAFTER +GRAFTING +GRAFTON +GRAFTS +GRAHAM +GRAHAMS +GRAIL +GRAIN +GRAINED +GRAINING +GRAINS +GRAM +GRAMMAR +GRAMMARIAN +GRAMMARS +GRAMMATIC +GRAMMATICAL +GRAMMATICALLY +GRAMS +GRANARIES +GRANARY +GRAND +GRANDCHILD +GRANDCHILDREN +GRANDDAUGHTER +GRANDER +GRANDEST +GRANDEUR +GRANDFATHER +GRANDFATHERS +GRANDIOSE +GRANDLY +GRANDMA +GRANDMOTHER +GRANDMOTHERS +GRANDNEPHEW +GRANDNESS +GRANDNIECE +GRANDPA +GRANDPARENT +GRANDS +GRANDSON +GRANDSONS +GRANDSTAND +GRANGE +GRANITE +GRANNY +GRANOLA +GRANT +GRANTED +GRANTEE +GRANTER +GRANTING +GRANTOR +GRANTS +GRANULARITY +GRANULATE +GRANULATED +GRANULATES +GRANULATING +GRANVILLE +GRAPE +GRAPEFRUIT +GRAPES +GRAPEVINE +GRAPH +GRAPHED +GRAPHIC +GRAPHICAL +GRAPHICALLY +GRAPHICS +GRAPHING +GRAPHITE +GRAPHS +GRAPPLE +GRAPPLED +GRAPPLING +GRASP +GRASPABLE +GRASPED +GRASPING +GRASPINGLY +GRASPS +GRASS +GRASSED +GRASSERS +GRASSES +GRASSIER +GRASSIEST +GRASSLAND +GRASSY +GRATE +GRATED +GRATEFUL +GRATEFULLY +GRATEFULNESS +GRATER +GRATES +GRATIFICATION +GRATIFIED +GRATIFY +GRATIFYING +GRATING +GRATINGS +GRATIS +GRATITUDE +GRATUITIES +GRATUITOUS +GRATUITOUSLY +GRATUITOUSNESS +GRATUITY +GRAVE +GRAVEL +GRAVELLY +GRAVELY +GRAVEN +GRAVENESS +GRAVER +GRAVES +GRAVEST +GRAVESTONE +GRAVEYARD +GRAVITATE +GRAVITATION +GRAVITATIONAL +GRAVITY +GRAVY +GRAY +GRAYED +GRAYER +GRAYEST +GRAYING +GRAYNESS +GRAYSON +GRAZE +GRAZED +GRAZER +GRAZING +GREASE +GREASED +GREASES +GREASY +GREAT +GREATER +GREATEST +GREATLY +GREATNESS +GRECIAN +GRECIANIZE +GRECIANIZES +GREECE +GREED +GREEDILY +GREEDINESS +GREEDY +GREEK +GREEKIZE +GREEKIZES +GREEKS +GREEN +GREENBELT +GREENBERG +GREENBLATT +GREENBRIAR +GREENE +GREENER +GREENERY +GREENEST +GREENFELD +GREENFIELD +GREENGROCER +GREENHOUSE +GREENHOUSES +GREENING +GREENISH +GREENLAND +GREENLY +GREENNESS +GREENS +GREENSBORO +GREENSVILLE +GREENTREE +GREENVILLE +GREENWARE +GREENWICH +GREER +GREET +GREETED +GREETER +GREETING +GREETINGS +GREETS +GREG +GREGARIOUS +GREGG +GREGORIAN +GREGORY +GRENADE +GRENADES +GRENDEL +GRENIER +GRENOBLE +GRENVILLE +GRESHAM +GRETA +GRETCHEN +GREW +GREY +GREYEST +GREYHOUND +GREYING +GRID +GRIDDLE +GRIDIRON +GRIDS +GRIEF +GRIEFS +GRIEVANCE +GRIEVANCES +GRIEVE +GRIEVED +GRIEVER +GRIEVERS +GRIEVES +GRIEVING +GRIEVINGLY +GRIEVOUS +GRIEVOUSLY +GRIFFITH +GRILL +GRILLED +GRILLING +GRILLS +GRIM +GRIMACE +GRIMALDI +GRIME +GRIMED +GRIMES +GRIMLY +GRIMM +GRIMNESS +GRIN +GRIND +GRINDER +GRINDERS +GRINDING +GRINDINGS +GRINDS +GRINDSTONE +GRINDSTONES +GRINNING +GRINS +GRIP +GRIPE +GRIPED +GRIPES +GRIPING +GRIPPED +GRIPPING +GRIPPINGLY +GRIPS +GRIS +GRISLY +GRIST +GRISWOLD +GRIT +GRITS +GRITTY +GRIZZLY +GROAN +GROANED +GROANER +GROANERS +GROANING +GROANS +GROCER +GROCERIES +GROCERS +GROCERY +GROGGY +GROIN +GROOM +GROOMED +GROOMING +GROOMS +GROOT +GROOVE +GROOVED +GROOVES +GROPE +GROPED +GROPES +GROPING +GROSS +GROSSED +GROSSER +GROSSES +GROSSEST +GROSSET +GROSSING +GROSSLY +GROSSMAN +GROSSNESS +GROSVENOR +GROTESQUE +GROTESQUELY +GROTESQUES +GROTON +GROTTO +GROTTOS +GROUND +GROUNDED +GROUNDER +GROUNDERS +GROUNDING +GROUNDS +GROUNDWORK +GROUP +GROUPED +GROUPING +GROUPINGS +GROUPS +GROUSE +GROVE +GROVEL +GROVELED +GROVELING +GROVELS +GROVER +GROVERS +GROVES +GROW +GROWER +GROWERS +GROWING +GROWL +GROWLED +GROWLING +GROWLS +GROWN +GROWNUP +GROWNUPS +GROWS +GROWTH +GROWTHS +GRUB +GRUBBY +GRUBS +GRUDGE +GRUDGES +GRUDGINGLY +GRUESOME +GRUFF +GRUFFLY +GRUMBLE +GRUMBLED +GRUMBLES +GRUMBLING +GRUMMAN +GRUNT +GRUNTED +GRUNTING +GRUNTS +GRUSKY +GRUYERE +GUADALUPE +GUAM +GUANO +GUARANTEE +GUARANTEED +GUARANTEEING +GUARANTEER +GUARANTEERS +GUARANTEES +GUARANTY +GUARD +GUARDED +GUARDEDLY +GUARDHOUSE +GUARDIA +GUARDIAN +GUARDIANS +GUARDIANSHIP +GUARDING +GUARDS +GUATEMALA +GUATEMALAN +GUBERNATORIAL +GUELPH +GUENTHER +GUERRILLA +GUERRILLAS +GUESS +GUESSED +GUESSES +GUESSING +GUESSWORK +GUEST +GUESTS +GUGGENHEIM +GUHLEMAN +GUIANA +GUIDANCE +GUIDE +GUIDEBOOK +GUIDEBOOKS +GUIDED +GUIDELINE +GUIDELINES +GUIDES +GUIDING +GUILD +GUILDER +GUILDERS +GUILE +GUILFORD +GUILT +GUILTIER +GUILTIEST +GUILTILY +GUILTINESS +GUILTLESS +GUILTLESSLY +GUILTY +GUINEA +GUINEVERE +GUISE +GUISES +GUITAR +GUITARS +GUJARAT +GUJARATI +GULCH +GULCHES +GULF +GULFS +GULL +GULLAH +GULLED +GULLIES +GULLING +GULLS +GULLY +GULP +GULPED +GULPS +GUM +GUMMING +GUMPTION +GUMS +GUN +GUNDERSON +GUNFIRE +GUNMAN +GUNMEN +GUNNAR +GUNNED +GUNNER +GUNNERS +GUNNERY +GUNNING +GUNNY +GUNPLAY +GUNPOWDER +GUNS +GUNSHOT +GUNTHER +GURGLE +GURKHA +GURU +GUS +GUSH +GUSHED +GUSHER +GUSHES +GUSHING +GUST +GUSTAFSON +GUSTAV +GUSTAVE +GUSTAVUS +GUSTO +GUSTS +GUSTY +GUT +GUTENBERG +GUTHRIE +GUTS +GUTSY +GUTTER +GUTTERED +GUTTERS +GUTTING +GUTTURAL +GUY +GUYANA +GUYED +GUYER +GUYERS +GUYING +GUYS +GWEN +GWYN +GYMNASIUM +GYMNASIUMS +GYMNAST +GYMNASTIC +GYMNASTICS +GYMNASTS +GYPSIES +GYPSY +GYRO +GYROCOMPASS +GYROSCOPE +GYROSCOPES +HAAG +HAAS +HABEAS +HABERMAN +HABIB +HABIT +HABITAT +HABITATION +HABITATIONS +HABITATS +HABITS +HABITUAL +HABITUALLY +HABITUALNESS +HACK +HACKED +HACKER +HACKERS +HACKETT +HACKING +HACKNEYED +HACKS +HACKSAW +HAD +HADAMARD +HADDAD +HADDOCK +HADES +HADLEY +HADRIAN +HAFIZ +HAG +HAGEN +HAGER +HAGGARD +HAGGARDLY +HAGGLE +HAGSTROM +HAGUE +HAHN +HAIFA +HAIL +HAILED +HAILING +HAILS +HAILSTONE +HAILSTORM +HAINES +HAIR +HAIRCUT +HAIRCUTS +HAIRIER +HAIRINESS +HAIRLESS +HAIRPIN +HAIRS +HAIRY +HAITI +HAITIAN +HAL +HALCYON +HALE +HALER +HALEY +HALF +HALFHEARTED +HALFWAY +HALIFAX +HALL +HALLEY +HALLINAN +HALLMARK +HALLMARKS +HALLOW +HALLOWED +HALLOWEEN +HALLS +HALLUCINATE +HALLWAY +HALLWAYS +HALOGEN +HALPERN +HALSEY +HALSTEAD +HALT +HALTED +HALTER +HALTERS +HALTING +HALTINGLY +HALTS +HALVE +HALVED +HALVERS +HALVERSON +HALVES +HALVING +HAM +HAMAL +HAMBURG +HAMBURGER +HAMBURGERS +HAMEY +HAMILTON +HAMILTONIAN +HAMILTONIANS +HAMLET +HAMLETS +HAMLIN +HAMMER +HAMMERED +HAMMERING +HAMMERS +HAMMETT +HAMMING +HAMMOCK +HAMMOCKS +HAMMOND +HAMPER +HAMPERED +HAMPERS +HAMPSHIRE +HAMPTON +HAMS +HAMSTER +HAN +HANCOCK +HAND +HANDBAG +HANDBAGS +HANDBOOK +HANDBOOKS +HANDCUFF +HANDCUFFED +HANDCUFFING +HANDCUFFS +HANDED +HANDEL +HANDFUL +HANDFULS +HANDGUN +HANDICAP +HANDICAPPED +HANDICAPS +HANDIER +HANDIEST +HANDILY +HANDINESS +HANDING +HANDIWORK +HANDKERCHIEF +HANDKERCHIEFS +HANDLE +HANDLED +HANDLER +HANDLERS +HANDLES +HANDLING +HANDMAID +HANDOUT +HANDS +HANDSHAKE +HANDSHAKES +HANDSHAKING +HANDSOME +HANDSOMELY +HANDSOMENESS +HANDSOMER +HANDSOMEST +HANDWRITING +HANDWRITTEN +HANDY +HANEY +HANFORD +HANG +HANGAR +HANGARS +HANGED +HANGER +HANGERS +HANGING +HANGMAN +HANGMEN +HANGOUT +HANGOVER +HANGOVERS +HANGS +HANKEL +HANLEY +HANLON +HANNA +HANNAH +HANNIBAL +HANOI +HANOVER +HANOVERIAN +HANOVERIANIZE +HANOVERIANIZES +HANOVERIZE +HANOVERIZES +HANS +HANSEL +HANSEN +HANSON +HANUKKAH +HAP +HAPGOOD +HAPHAZARD +HAPHAZARDLY +HAPHAZARDNESS +HAPLESS +HAPLESSLY +HAPLESSNESS +HAPLY +HAPPEN +HAPPENED +HAPPENING +HAPPENINGS +HAPPENS +HAPPIER +HAPPIEST +HAPPILY +HAPPINESS +HAPPY +HAPSBURG +HARASS +HARASSED +HARASSES +HARASSING +HARASSMENT +HARBIN +HARBINGER +HARBOR +HARBORED +HARBORING +HARBORS +HARCOURT +HARD +HARDBOILED +HARDCOPY +HARDEN +HARDER +HARDEST +HARDHAT +HARDIN +HARDINESS +HARDING +HARDLY +HARDNESS +HARDSCRABBLE +HARDSHIP +HARDSHIPS +HARDWARE +HARDWIRED +HARDWORKING +HARDY +HARE +HARELIP +HAREM +HARES +HARK +HARKEN +HARLAN +HARLEM +HARLEY +HARLOT +HARLOTS +HARM +HARMED +HARMFUL +HARMFULLY +HARMFULNESS +HARMING +HARMLESS +HARMLESSLY +HARMLESSNESS +HARMON +HARMONIC +HARMONICS +HARMONIES +HARMONIOUS +HARMONIOUSLY +HARMONIOUSNESS +HARMONIST +HARMONISTIC +HARMONISTICALLY +HARMONIZE +HARMONY +HARMS +HARNESS +HARNESSED +HARNESSING +HAROLD +HARP +HARPER +HARPERS +HARPING +HARPY +HARRIED +HARRIER +HARRIET +HARRIMAN +HARRINGTON +HARRIS +HARRISBURG +HARRISON +HARRISONBURG +HARROW +HARROWED +HARROWING +HARROWS +HARRY +HARSH +HARSHER +HARSHLY +HARSHNESS +HART +HARTFORD +HARTLEY +HARTMAN +HARVARD +HARVARDIZE +HARVARDIZES +HARVEST +HARVESTED +HARVESTER +HARVESTING +HARVESTS +HARVEY +HARVEYIZE +HARVEYIZES +HARVEYS +HAS +HASH +HASHED +HASHER +HASHES +HASHING +HASHISH +HASKELL +HASKINS +HASSLE +HASTE +HASTEN +HASTENED +HASTENING +HASTENS +HASTILY +HASTINESS +HASTINGS +HASTY +HAT +HATCH +HATCHED +HATCHET +HATCHETS +HATCHING +HATCHURE +HATE +HATED +HATEFUL +HATEFULLY +HATEFULNESS +HATER +HATES +HATFIELD +HATHAWAY +HATING +HATRED +HATS +HATTERAS +HATTIE +HATTIESBURG +HATTIZE +HATTIZES +HAUGEN +HAUGHTILY +HAUGHTINESS +HAUGHTY +HAUL +HAULED +HAULER +HAULING +HAULS +HAUNCH +HAUNCHES +HAUNT +HAUNTED +HAUNTER +HAUNTING +HAUNTS +HAUSA +HAUSDORFF +HAUSER +HAVANA +HAVE +HAVEN +HAVENS +HAVES +HAVILLAND +HAVING +HAVOC +HAWAII +HAWAIIAN +HAWK +HAWKED +HAWKER +HAWKERS +HAWKINS +HAWKS +HAWLEY +HAWTHORNE +HAY +HAYDEN +HAYDN +HAYES +HAYING +HAYNES +HAYS +HAYSTACK +HAYWARD +HAYWOOD +HAZARD +HAZARDOUS +HAZARDS +HAZE +HAZEL +HAZES +HAZINESS +HAZY +HEAD +HEADACHE +HEADACHES +HEADED +HEADER +HEADERS +HEADGEAR +HEADING +HEADINGS +HEADLAND +HEADLANDS +HEADLIGHT +HEADLINE +HEADLINED +HEADLINES +HEADLINING +HEADLONG +HEADMASTER +HEADPHONE +HEADQUARTERS +HEADROOM +HEADS +HEADSET +HEADWAY +HEAL +HEALED +HEALER +HEALERS +HEALEY +HEALING +HEALS +HEALTH +HEALTHFUL +HEALTHFULLY +HEALTHFULNESS +HEALTHIER +HEALTHIEST +HEALTHILY +HEALTHINESS +HEALTHY +HEALY +HEAP +HEAPED +HEAPING +HEAPS +HEAR +HEARD +HEARER +HEARERS +HEARING +HEARINGS +HEARKEN +HEARS +HEARSAY +HEARST +HEART +HEARTBEAT +HEARTBREAK +HEARTEN +HEARTIEST +HEARTILY +HEARTINESS +HEARTLESS +HEARTS +HEARTWOOD +HEARTY +HEAT +HEATABLE +HEATED +HEATEDLY +HEATER +HEATERS +HEATH +HEATHEN +HEATHER +HEATHKIT +HEATHMAN +HEATING +HEATS +HEAVE +HEAVED +HEAVEN +HEAVENLY +HEAVENS +HEAVER +HEAVERS +HEAVES +HEAVIER +HEAVIEST +HEAVILY +HEAVINESS +HEAVING +HEAVY +HEAVYWEIGHT +HEBE +HEBRAIC +HEBRAICIZE +HEBRAICIZES +HEBREW +HEBREWS +HEBRIDES +HECATE +HECK +HECKLE +HECKMAN +HECTIC +HECUBA +HEDDA +HEDGE +HEDGED +HEDGEHOG +HEDGEHOGS +HEDGES +HEDONISM +HEDONIST +HEED +HEEDED +HEEDLESS +HEEDLESSLY +HEEDLESSNESS +HEEDS +HEEL +HEELED +HEELERS +HEELING +HEELS +HEFTY +HEGEL +HEGELIAN +HEGELIANIZE +HEGELIANIZES +HEGEMONY +HEIDEGGER +HEIDELBERG +HEIFER +HEIGHT +HEIGHTEN +HEIGHTENED +HEIGHTENING +HEIGHTENS +HEIGHTS +HEINE +HEINLEIN +HEINOUS +HEINOUSLY +HEINRICH +HEINZ +HEINZE +HEIR +HEIRESS +HEIRESSES +HEIRS +HEISENBERG +HEISER +HELD +HELEN +HELENA +HELENE +HELGA +HELICAL +HELICOPTER +HELIOCENTRIC +HELIOPOLIS +HELIUM +HELIX +HELL +HELLENIC +HELLENIZATION +HELLENIZATIONS +HELLENIZE +HELLENIZED +HELLENIZES +HELLENIZING +HELLESPONT +HELLFIRE +HELLISH +HELLMAN +HELLO +HELLS +HELM +HELMET +HELMETS +HELMHOLTZ +HELMSMAN +HELMUT +HELP +HELPED +HELPER +HELPERS +HELPFUL +HELPFULLY +HELPFULNESS +HELPING +HELPLESS +HELPLESSLY +HELPLESSNESS +HELPMATE +HELPS +HELSINKI +HELVETICA +HEM +HEMINGWAY +HEMISPHERE +HEMISPHERES +HEMLOCK +HEMLOCKS +HEMOGLOBIN +HEMORRHOID +HEMOSTAT +HEMOSTATS +HEMP +HEMPEN +HEMPSTEAD +HEMS +HEN +HENCE +HENCEFORTH +HENCHMAN +HENCHMEN +HENDERSON +HENDRICK +HENDRICKS +HENDRICKSON +HENDRIX +HENLEY +HENNESSEY +HENNESSY +HENNING +HENPECK +HENRI +HENRIETTA +HENS +HEPATITIS +HEPBURN +HER +HERA +HERACLITUS +HERALD +HERALDED +HERALDING +HERALDS +HERB +HERBERT +HERBIVORE +HERBIVOROUS +HERBS +HERCULEAN +HERCULES +HERD +HERDED +HERDER +HERDING +HERDS +HERE +HEREABOUT +HEREABOUTS +HEREAFTER +HEREBY +HEREDITARY +HEREDITY +HEREFORD +HEREIN +HEREINAFTER +HEREOF +HERES +HERESY +HERETIC +HERETICS +HERETO +HERETOFORE +HEREUNDER +HEREWITH +HERITAGE +HERITAGES +HERKIMER +HERMAN +HERMANN +HERMES +HERMETIC +HERMETICALLY +HERMIT +HERMITE +HERMITIAN +HERMITS +HERMOSA +HERNANDEZ +HERO +HERODOTUS +HEROES +HEROIC +HEROICALLY +HEROICS +HEROIN +HEROINE +HEROINES +HEROISM +HERON +HERONS +HERPES +HERR +HERRING +HERRINGS +HERRINGTON +HERS +HERSCHEL +HERSELF +HERSEY +HERSHEL +HERSHEY +HERTZ +HERTZOG +HESITANT +HESITANTLY +HESITATE +HESITATED +HESITATES +HESITATING +HESITATINGLY +HESITATION +HESITATIONS +HESPERUS +HESS +HESSE +HESSIAN +HESSIANS +HESTER +HETEROGENEITY +HETEROGENEOUS +HETEROGENEOUSLY +HETEROGENEOUSNESS +HETEROGENOUS +HETEROSEXUAL +HETMAN +HETTIE +HETTY +HEUBLEIN +HEURISTIC +HEURISTICALLY +HEURISTICS +HEUSEN +HEUSER +HEW +HEWED +HEWER +HEWETT +HEWITT +HEWLETT +HEWS +HEX +HEXADECIMAL +HEXAGON +HEXAGONAL +HEXAGONALLY +HEXAGONS +HEY +HEYWOOD +HIATT +HIAWATHA +HIBBARD +HIBERNATE +HIBERNIA +HICK +HICKEY +HICKEYS +HICKMAN +HICKOK +HICKORY +HICKS +HID +HIDDEN +HIDE +HIDEOUS +HIDEOUSLY +HIDEOUSNESS +HIDEOUT +HIDEOUTS +HIDES +HIDING +HIERARCHAL +HIERARCHIC +HIERARCHICAL +HIERARCHICALLY +HIERARCHIES +HIERARCHY +HIERONYMUS +HIGGINS +HIGH +HIGHER +HIGHEST +HIGHFIELD +HIGHLAND +HIGHLANDER +HIGHLANDS +HIGHLIGHT +HIGHLIGHTED +HIGHLIGHTING +HIGHLIGHTS +HIGHLY +HIGHNESS +HIGHNESSES +HIGHWAY +HIGHWAYMAN +HIGHWAYMEN +HIGHWAYS +HIJACK +HIJACKED +HIKE +HIKED +HIKER +HIKES +HIKING +HILARIOUS +HILARIOUSLY +HILARITY +HILBERT +HILDEBRAND +HILL +HILLARY +HILLBILLY +HILLCREST +HILLEL +HILLOCK +HILLS +HILLSBORO +HILLSDALE +HILLSIDE +HILLSIDES +HILLTOP +HILLTOPS +HILT +HILTON +HILTS +HIM +HIMALAYA +HIMALAYAS +HIMMLER +HIMSELF +HIND +HINDER +HINDERED +HINDERING +HINDERS +HINDI +HINDRANCE +HINDRANCES +HINDSIGHT +HINDU +HINDUISM +HINDUS +HINDUSTAN +HINES +HINGE +HINGED +HINGES +HINKLE +HINMAN +HINSDALE +HINT +HINTED +HINTING +HINTS +HIP +HIPPO +HIPPOCRATES +HIPPOCRATIC +HIPPOPOTAMUS +HIPS +HIRAM +HIRE +HIRED +HIRER +HIRERS +HIRES +HIREY +HIRING +HIRINGS +HIROSHI +HIROSHIMA +HIRSCH +HIS +HISPANIC +HISPANICIZE +HISPANICIZES +HISPANICS +HISS +HISSED +HISSES +HISSING +HISTOGRAM +HISTOGRAMS +HISTORIAN +HISTORIANS +HISTORIC +HISTORICAL +HISTORICALLY +HISTORIES +HISTORY +HIT +HITACHI +HITCH +HITCHCOCK +HITCHED +HITCHHIKE +HITCHHIKED +HITCHHIKER +HITCHHIKERS +HITCHHIKES +HITCHHIKING +HITCHING +HITHER +HITHERTO +HITLER +HITLERIAN +HITLERISM +HITLERITE +HITLERITES +HITS +HITTER +HITTERS +HITTING +HIVE +HOAGLAND +HOAR +HOARD +HOARDER +HOARDING +HOARINESS +HOARSE +HOARSELY +HOARSENESS +HOARY +HOBART +HOBBES +HOBBIES +HOBBLE +HOBBLED +HOBBLES +HOBBLING +HOBBS +HOBBY +HOBBYHORSE +HOBBYIST +HOBBYISTS +HOBDAY +HOBOKEN +HOCKEY +HODGEPODGE +HODGES +HODGKIN +HOE +HOES +HOFF +HOFFMAN +HOG +HOGGING +HOGS +HOIST +HOISTED +HOISTING +HOISTS +HOKAN +HOLBROOK +HOLCOMB +HOLD +HOLDEN +HOLDER +HOLDERS +HOLDING +HOLDINGS +HOLDS +HOLE +HOLED +HOLES +HOLIDAY +HOLIDAYS +HOLIES +HOLINESS +HOLISTIC +HOLLAND +HOLLANDAISE +HOLLANDER +HOLLERITH +HOLLINGSWORTH +HOLLISTER +HOLLOW +HOLLOWAY +HOLLOWED +HOLLOWING +HOLLOWLY +HOLLOWNESS +HOLLOWS +HOLLY +HOLLYWOOD +HOLLYWOODIZE +HOLLYWOODIZES +HOLM +HOLMAN +HOLMDEL +HOLMES +HOLOCAUST +HOLOCENE +HOLOGRAM +HOLOGRAMS +HOLST +HOLSTEIN +HOLY +HOLYOKE +HOLZMAN +HOM +HOMAGE +HOME +HOMED +HOMELESS +HOMELY +HOMEMADE +HOMEMAKER +HOMEMAKERS +HOMEOMORPHIC +HOMEOMORPHISM +HOMEOMORPHISMS +HOMEOPATH +HOMEOWNER +HOMER +HOMERIC +HOMERS +HOMES +HOMESICK +HOMESICKNESS +HOMESPUN +HOMESTEAD +HOMESTEADER +HOMESTEADERS +HOMESTEADS +HOMEWARD +HOMEWARDS +HOMEWORK +HOMICIDAL +HOMICIDE +HOMING +HOMO +HOMOGENEITIES +HOMOGENEITY +HOMOGENEOUS +HOMOGENEOUSLY +HOMOGENEOUSNESS +HOMOMORPHIC +HOMOMORPHISM +HOMOMORPHISMS +HOMOSEXUAL +HONDA +HONDO +HONDURAS +HONE +HONED +HONER +HONES +HONEST +HONESTLY +HONESTY +HONEY +HONEYBEE +HONEYCOMB +HONEYCOMBED +HONEYDEW +HONEYMOON +HONEYMOONED +HONEYMOONER +HONEYMOONERS +HONEYMOONING +HONEYMOONS +HONEYSUCKLE +HONEYWELL +HONING +HONOLULU +HONOR +HONORABLE +HONORABLENESS +HONORABLY +HONORARIES +HONORARIUM +HONORARY +HONORED +HONORER +HONORING +HONORS +HONSHU +HOOD +HOODED +HOODLUM +HOODS +HOODWINK +HOODWINKED +HOODWINKING +HOODWINKS +HOOF +HOOFS +HOOK +HOOKED +HOOKER +HOOKERS +HOOKING +HOOKS +HOOKUP +HOOKUPS +HOOP +HOOPER +HOOPS +HOOSIER +HOOSIERIZE +HOOSIERIZES +HOOT +HOOTED +HOOTER +HOOTING +HOOTS +HOOVER +HOOVERIZE +HOOVERIZES +HOOVES +HOP +HOPE +HOPED +HOPEFUL +HOPEFULLY +HOPEFULNESS +HOPEFULS +HOPELESS +HOPELESSLY +HOPELESSNESS +HOPES +HOPI +HOPING +HOPKINS +HOPKINSIAN +HOPPER +HOPPERS +HOPPING +HOPS +HORACE +HORATIO +HORDE +HORDES +HORIZON +HORIZONS +HORIZONTAL +HORIZONTALLY +HORMONE +HORMONES +HORN +HORNBLOWER +HORNED +HORNET +HORNETS +HORNS +HORNY +HOROWITZ +HORRENDOUS +HORRENDOUSLY +HORRIBLE +HORRIBLENESS +HORRIBLY +HORRID +HORRIDLY +HORRIFIED +HORRIFIES +HORRIFY +HORRIFYING +HORROR +HORRORS +HORSE +HORSEBACK +HORSEFLESH +HORSEFLY +HORSEMAN +HORSEPLAY +HORSEPOWER +HORSES +HORSESHOE +HORSESHOER +HORTICULTURE +HORTON +HORUS +HOSE +HOSES +HOSPITABLE +HOSPITABLY +HOSPITAL +HOSPITALITY +HOSPITALIZE +HOSPITALIZED +HOSPITALIZES +HOSPITALIZING +HOSPITALS +HOST +HOSTAGE +HOSTAGES +HOSTED +HOSTESS +HOSTESSES +HOSTILE +HOSTILELY +HOSTILITIES +HOSTILITY +HOSTING +HOSTS +HOT +HOTEL +HOTELS +HOTLY +HOTNESS +HOTTENTOT +HOTTER +HOTTEST +HOUDAILLE +HOUDINI +HOUGHTON +HOUND +HOUNDED +HOUNDING +HOUNDS +HOUR +HOURGLASS +HOURLY +HOURS +HOUSE +HOUSEBOAT +HOUSEBROKEN +HOUSED +HOUSEFLIES +HOUSEFLY +HOUSEHOLD +HOUSEHOLDER +HOUSEHOLDERS +HOUSEHOLDS +HOUSEKEEPER +HOUSEKEEPERS +HOUSEKEEPING +HOUSES +HOUSETOP +HOUSETOPS +HOUSEWIFE +HOUSEWIFELY +HOUSEWIVES +HOUSEWORK +HOUSING +HOUSTON +HOVEL +HOVELS +HOVER +HOVERED +HOVERING +HOVERS +HOW +HOWARD +HOWE +HOWELL +HOWEVER +HOWL +HOWLED +HOWLER +HOWLING +HOWLS +HOYT +HROTHGAR +HUB +HUBBARD +HUBBELL +HUBER +HUBERT +HUBRIS +HUBS +HUCK +HUDDLE +HUDDLED +HUDDLING +HUDSON +HUE +HUES +HUEY +HUFFMAN +HUG +HUGE +HUGELY +HUGENESS +HUGGING +HUGGINS +HUGH +HUGHES +HUGO +HUH +HULL +HULLS +HUM +HUMAN +HUMANE +HUMANELY +HUMANENESS +HUMANITARIAN +HUMANITIES +HUMANITY +HUMANLY +HUMANNESS +HUMANS +HUMBLE +HUMBLED +HUMBLENESS +HUMBLER +HUMBLEST +HUMBLING +HUMBLY +HUMBOLDT +HUMBUG +HUME +HUMERUS +HUMID +HUMIDIFICATION +HUMIDIFIED +HUMIDIFIER +HUMIDIFIERS +HUMIDIFIES +HUMIDIFY +HUMIDIFYING +HUMIDITY +HUMIDLY +HUMILIATE +HUMILIATED +HUMILIATES +HUMILIATING +HUMILIATION +HUMILIATIONS +HUMILITY +HUMMED +HUMMEL +HUMMING +HUMMINGBIRD +HUMOR +HUMORED +HUMORER +HUMORERS +HUMORING +HUMOROUS +HUMOROUSLY +HUMOROUSNESS +HUMORS +HUMP +HUMPBACK +HUMPED +HUMPHREY +HUMPTY +HUMS +HUN +HUNCH +HUNCHED +HUNCHES +HUNDRED +HUNDREDFOLD +HUNDREDS +HUNDREDTH +HUNG +HUNGARIAN +HUNGARY +HUNGER +HUNGERED +HUNGERING +HUNGERS +HUNGRIER +HUNGRIEST +HUNGRILY +HUNGRY +HUNK +HUNKS +HUNS +HUNT +HUNTED +HUNTER +HUNTERS +HUNTING +HUNTINGTON +HUNTLEY +HUNTS +HUNTSMAN +HUNTSVILLE +HURD +HURDLE +HURL +HURLED +HURLER +HURLERS +HURLING +HURON +HURONS +HURRAH +HURRICANE +HURRICANES +HURRIED +HURRIEDLY +HURRIES +HURRY +HURRYING +HURST +HURT +HURTING +HURTLE +HURTLING +HURTS +HURWITZ +HUSBAND +HUSBANDRY +HUSBANDS +HUSH +HUSHED +HUSHES +HUSHING +HUSK +HUSKED +HUSKER +HUSKINESS +HUSKING +HUSKS +HUSKY +HUSTLE +HUSTLED +HUSTLER +HUSTLES +HUSTLING +HUSTON +HUT +HUTCH +HUTCHINS +HUTCHINSON +HUTCHISON +HUTS +HUXLEY +HUXTABLE +HYACINTH +HYADES +HYANNIS +HYBRID +HYDE +HYDRA +HYDRANT +HYDRAULIC +HYDRO +HYDRODYNAMIC +HYDRODYNAMICS +HYDROGEN +HYDROGENS +HYENA +HYGIENE +HYMAN +HYMEN +HYMN +HYMNS +HYPER +HYPERBOLA +HYPERBOLIC +HYPERTEXT +HYPHEN +HYPHENATE +HYPHENS +HYPNOSIS +HYPNOTIC +HYPOCRISIES +HYPOCRISY +HYPOCRITE +HYPOCRITES +HYPODERMIC +HYPODERMICS +HYPOTHESES +HYPOTHESIS +HYPOTHESIZE +HYPOTHESIZED +HYPOTHESIZER +HYPOTHESIZES +HYPOTHESIZING +HYPOTHETICAL +HYPOTHETICALLY +HYSTERESIS +HYSTERICAL +HYSTERICALLY +IAN +IBERIA +IBERIAN +IBEX +IBID +IBIS +IBN +IBSEN +ICARUS +ICE +ICEBERG +ICEBERGS +ICEBOX +ICED +ICELAND +ICELANDIC +ICES +ICICLE +ICINESS +ICING +ICINGS +ICON +ICONOCLASM +ICONOCLAST +ICONS +ICOSAHEDRA +ICOSAHEDRAL +ICOSAHEDRON +ICY +IDA +IDAHO +IDEA +IDEAL +IDEALISM +IDEALISTIC +IDEALIZATION +IDEALIZATIONS +IDEALIZE +IDEALIZED +IDEALIZES +IDEALIZING +IDEALLY +IDEALS +IDEAS +IDEM +IDEMPOTENCY +IDEMPOTENT +IDENTICAL +IDENTICALLY +IDENTIFIABLE +IDENTIFIABLY +IDENTIFICATION +IDENTIFICATIONS +IDENTIFIED +IDENTIFIER +IDENTIFIERS +IDENTIFIES +IDENTIFY +IDENTIFYING +IDENTITIES +IDENTITY +IDEOLOGICAL +IDEOLOGICALLY +IDEOLOGY +IDIOCY +IDIOM +IDIOSYNCRASIES +IDIOSYNCRASY +IDIOSYNCRATIC +IDIOT +IDIOTIC +IDIOTS +IDLE +IDLED +IDLENESS +IDLER +IDLERS +IDLES +IDLEST +IDLING +IDLY +IDOL +IDOLATRY +IDOLS +IFNI +IGLOO +IGNITE +IGNITION +IGNOBLE +IGNOMINIOUS +IGNORAMUS +IGNORANCE +IGNORANT +IGNORANTLY +IGNORE +IGNORED +IGNORES +IGNORING +IGOR +IKE +ILIAD +ILIADIZE +ILIADIZES +ILL +ILLEGAL +ILLEGALITIES +ILLEGALITY +ILLEGALLY +ILLEGITIMATE +ILLICIT +ILLICITLY +ILLINOIS +ILLITERACY +ILLITERATE +ILLNESS +ILLNESSES +ILLOGICAL +ILLOGICALLY +ILLS +ILLUMINATE +ILLUMINATED +ILLUMINATES +ILLUMINATING +ILLUMINATION +ILLUMINATIONS +ILLUSION +ILLUSIONS +ILLUSIVE +ILLUSIVELY +ILLUSORY +ILLUSTRATE +ILLUSTRATED +ILLUSTRATES +ILLUSTRATING +ILLUSTRATION +ILLUSTRATIONS +ILLUSTRATIVE +ILLUSTRATIVELY +ILLUSTRATOR +ILLUSTRATORS +ILLUSTRIOUS +ILLUSTRIOUSNESS +ILLY +ILONA +ILYUSHIN +IMAGE +IMAGEN +IMAGERY +IMAGES +IMAGINABLE +IMAGINABLY +IMAGINARY +IMAGINATION +IMAGINATIONS +IMAGINATIVE +IMAGINATIVELY +IMAGINE +IMAGINED +IMAGINES +IMAGING +IMAGINING +IMAGININGS +IMBALANCE +IMBALANCES +IMBECILE +IMBIBE +IMBRIUM +IMITATE +IMITATED +IMITATES +IMITATING +IMITATION +IMITATIONS +IMITATIVE +IMMACULATE +IMMACULATELY +IMMATERIAL +IMMATERIALLY +IMMATURE +IMMATURITY +IMMEDIACIES +IMMEDIACY +IMMEDIATE +IMMEDIATELY +IMMEMORIAL +IMMENSE +IMMENSELY +IMMERSE +IMMERSED +IMMERSES +IMMERSION +IMMIGRANT +IMMIGRANTS +IMMIGRATE +IMMIGRATED +IMMIGRATES +IMMIGRATING +IMMIGRATION +IMMINENT +IMMINENTLY +IMMODERATE +IMMODEST +IMMORAL +IMMORTAL +IMMORTALITY +IMMORTALLY +IMMOVABILITY +IMMOVABLE +IMMOVABLY +IMMUNE +IMMUNITIES +IMMUNITY +IMMUNIZATION +IMMUTABLE +IMP +IMPACT +IMPACTED +IMPACTING +IMPACTION +IMPACTOR +IMPACTORS +IMPACTS +IMPAIR +IMPAIRED +IMPAIRING +IMPAIRS +IMPALE +IMPART +IMPARTED +IMPARTIAL +IMPARTIALLY +IMPARTS +IMPASSE +IMPASSIVE +IMPATIENCE +IMPATIENT +IMPATIENTLY +IMPEACH +IMPEACHABLE +IMPEACHED +IMPEACHMENT +IMPECCABLE +IMPEDANCE +IMPEDANCES +IMPEDE +IMPEDED +IMPEDES +IMPEDIMENT +IMPEDIMENTS +IMPEDING +IMPEL +IMPELLED +IMPELLING +IMPEND +IMPENDING +IMPENETRABILITY +IMPENETRABLE +IMPENETRABLY +IMPERATIVE +IMPERATIVELY +IMPERATIVES +IMPERCEIVABLE +IMPERCEPTIBLE +IMPERFECT +IMPERFECTION +IMPERFECTIONS +IMPERFECTLY +IMPERIAL +IMPERIALISM +IMPERIALIST +IMPERIALISTS +IMPERIL +IMPERILED +IMPERIOUS +IMPERIOUSLY +IMPERMANENCE +IMPERMANENT +IMPERMEABLE +IMPERMISSIBLE +IMPERSONAL +IMPERSONALLY +IMPERSONATE +IMPERSONATED +IMPERSONATES +IMPERSONATING +IMPERSONATION +IMPERSONATIONS +IMPERTINENT +IMPERTINENTLY +IMPERVIOUS +IMPERVIOUSLY +IMPETUOUS +IMPETUOUSLY +IMPETUS +IMPINGE +IMPINGED +IMPINGES +IMPINGING +IMPIOUS +IMPLACABLE +IMPLANT +IMPLANTED +IMPLANTING +IMPLANTS +IMPLAUSIBLE +IMPLEMENT +IMPLEMENTABLE +IMPLEMENTATION +IMPLEMENTATIONS +IMPLEMENTED +IMPLEMENTER +IMPLEMENTING +IMPLEMENTOR +IMPLEMENTORS +IMPLEMENTS +IMPLICANT +IMPLICANTS +IMPLICATE +IMPLICATED +IMPLICATES +IMPLICATING +IMPLICATION +IMPLICATIONS +IMPLICIT +IMPLICITLY +IMPLICITNESS +IMPLIED +IMPLIES +IMPLORE +IMPLORED +IMPLORING +IMPLY +IMPLYING +IMPOLITE +IMPORT +IMPORTANCE +IMPORTANT +IMPORTANTLY +IMPORTATION +IMPORTED +IMPORTER +IMPORTERS +IMPORTING +IMPORTS +IMPOSE +IMPOSED +IMPOSES +IMPOSING +IMPOSITION +IMPOSITIONS +IMPOSSIBILITIES +IMPOSSIBILITY +IMPOSSIBLE +IMPOSSIBLY +IMPOSTOR +IMPOSTORS +IMPOTENCE +IMPOTENCY +IMPOTENT +IMPOUND +IMPOVERISH +IMPOVERISHED +IMPOVERISHMENT +IMPRACTICABLE +IMPRACTICAL +IMPRACTICALITY +IMPRACTICALLY +IMPRECISE +IMPRECISELY +IMPRECISION +IMPREGNABLE +IMPREGNATE +IMPRESS +IMPRESSED +IMPRESSER +IMPRESSES +IMPRESSIBLE +IMPRESSING +IMPRESSION +IMPRESSIONABLE +IMPRESSIONIST +IMPRESSIONISTIC +IMPRESSIONS +IMPRESSIVE +IMPRESSIVELY +IMPRESSIVENESS +IMPRESSMENT +IMPRIMATUR +IMPRINT +IMPRINTED +IMPRINTING +IMPRINTS +IMPRISON +IMPRISONED +IMPRISONING +IMPRISONMENT +IMPRISONMENTS +IMPRISONS +IMPROBABILITY +IMPROBABLE +IMPROMPTU +IMPROPER +IMPROPERLY +IMPROPRIETY +IMPROVE +IMPROVED +IMPROVEMENT +IMPROVEMENTS +IMPROVES +IMPROVING +IMPROVISATION +IMPROVISATIONAL +IMPROVISATIONS +IMPROVISE +IMPROVISED +IMPROVISER +IMPROVISERS +IMPROVISES +IMPROVISING +IMPRUDENT +IMPS +IMPUDENT +IMPUDENTLY +IMPUGN +IMPULSE +IMPULSES +IMPULSION +IMPULSIVE +IMPUNITY +IMPURE +IMPURITIES +IMPURITY +IMPUTE +IMPUTED +INABILITY +INACCESSIBLE +INACCURACIES +INACCURACY +INACCURATE +INACTION +INACTIVATE +INACTIVE +INACTIVITY +INADEQUACIES +INADEQUACY +INADEQUATE +INADEQUATELY +INADEQUATENESS +INADMISSIBILITY +INADMISSIBLE +INADVERTENT +INADVERTENTLY +INADVISABLE +INALIENABLE +INALTERABLE +INANE +INANIMATE +INANIMATELY +INANNA +INAPPLICABLE +INAPPROACHABLE +INAPPROPRIATE +INAPPROPRIATENESS +INASMUCH +INATTENTION +INAUDIBLE +INAUGURAL +INAUGURATE +INAUGURATED +INAUGURATING +INAUGURATION +INAUSPICIOUS +INBOARD +INBOUND +INBREED +INCA +INCALCULABLE +INCANDESCENT +INCANTATION +INCAPABLE +INCAPACITATE +INCAPACITATING +INCARCERATE +INCARNATION +INCARNATIONS +INCAS +INCENDIARIES +INCENDIARY +INCENSE +INCENSED +INCENSES +INCENTIVE +INCENTIVES +INCEPTION +INCESSANT +INCESSANTLY +INCEST +INCESTUOUS +INCH +INCHED +INCHES +INCHING +INCIDENCE +INCIDENT +INCIDENTAL +INCIDENTALLY +INCIDENTALS +INCIDENTS +INCINERATE +INCIPIENT +INCISIVE +INCITE +INCITED +INCITEMENT +INCITES +INCITING +INCLEMENT +INCLINATION +INCLINATIONS +INCLINE +INCLINED +INCLINES +INCLINING +INCLOSE +INCLOSED +INCLOSES +INCLOSING +INCLUDE +INCLUDED +INCLUDES +INCLUDING +INCLUSION +INCLUSIONS +INCLUSIVE +INCLUSIVELY +INCLUSIVENESS +INCOHERENCE +INCOHERENT +INCOHERENTLY +INCOME +INCOMES +INCOMING +INCOMMENSURABLE +INCOMMENSURATE +INCOMMUNICABLE +INCOMPARABLE +INCOMPARABLY +INCOMPATIBILITIES +INCOMPATIBILITY +INCOMPATIBLE +INCOMPATIBLY +INCOMPETENCE +INCOMPETENT +INCOMPETENTS +INCOMPLETE +INCOMPLETELY +INCOMPLETENESS +INCOMPREHENSIBILITY +INCOMPREHENSIBLE +INCOMPREHENSIBLY +INCOMPREHENSION +INCOMPRESSIBLE +INCOMPUTABLE +INCONCEIVABLE +INCONCLUSIVE +INCONGRUITY +INCONGRUOUS +INCONSEQUENTIAL +INCONSEQUENTIALLY +INCONSIDERABLE +INCONSIDERATE +INCONSIDERATELY +INCONSIDERATENESS +INCONSISTENCIES +INCONSISTENCY +INCONSISTENT +INCONSISTENTLY +INCONSPICUOUS +INCONTESTABLE +INCONTROVERTIBLE +INCONTROVERTIBLY +INCONVENIENCE +INCONVENIENCED +INCONVENIENCES +INCONVENIENCING +INCONVENIENT +INCONVENIENTLY +INCONVERTIBLE +INCORPORATE +INCORPORATED +INCORPORATES +INCORPORATING +INCORPORATION +INCORRECT +INCORRECTLY +INCORRECTNESS +INCORRIGIBLE +INCREASE +INCREASED +INCREASES +INCREASING +INCREASINGLY +INCREDIBLE +INCREDIBLY +INCREDULITY +INCREDULOUS +INCREDULOUSLY +INCREMENT +INCREMENTAL +INCREMENTALLY +INCREMENTED +INCREMENTER +INCREMENTING +INCREMENTS +INCRIMINATE +INCUBATE +INCUBATED +INCUBATES +INCUBATING +INCUBATION +INCUBATOR +INCUBATORS +INCULCATE +INCUMBENT +INCUR +INCURABLE +INCURRED +INCURRING +INCURS +INCURSION +INDEBTED +INDEBTEDNESS +INDECENT +INDECIPHERABLE +INDECISION +INDECISIVE +INDEED +INDEFATIGABLE +INDEFENSIBLE +INDEFINITE +INDEFINITELY +INDEFINITENESS +INDELIBLE +INDEMNIFY +INDEMNITY +INDENT +INDENTATION +INDENTATIONS +INDENTED +INDENTING +INDENTS +INDENTURE +INDEPENDENCE +INDEPENDENT +INDEPENDENTLY +INDESCRIBABLE +INDESTRUCTIBLE +INDETERMINACIES +INDETERMINACY +INDETERMINATE +INDETERMINATELY +INDEX +INDEXABLE +INDEXED +INDEXES +INDEXING +INDIA +INDIAN +INDIANA +INDIANAPOLIS +INDIANS +INDICATE +INDICATED +INDICATES +INDICATING +INDICATION +INDICATIONS +INDICATIVE +INDICATOR +INDICATORS +INDICES +INDICT +INDICTMENT +INDICTMENTS +INDIES +INDIFFERENCE +INDIFFERENT +INDIFFERENTLY +INDIGENOUS +INDIGENOUSLY +INDIGENOUSNESS +INDIGESTIBLE +INDIGESTION +INDIGNANT +INDIGNANTLY +INDIGNATION +INDIGNITIES +INDIGNITY +INDIGO +INDIRA +INDIRECT +INDIRECTED +INDIRECTING +INDIRECTION +INDIRECTIONS +INDIRECTLY +INDIRECTS +INDISCREET +INDISCRETION +INDISCRIMINATE +INDISCRIMINATELY +INDISPENSABILITY +INDISPENSABLE +INDISPENSABLY +INDISPUTABLE +INDISTINCT +INDISTINGUISHABLE +INDIVIDUAL +INDIVIDUALISM +INDIVIDUALISTIC +INDIVIDUALITY +INDIVIDUALIZE +INDIVIDUALIZED +INDIVIDUALIZES +INDIVIDUALIZING +INDIVIDUALLY +INDIVIDUALS +INDIVISIBILITY +INDIVISIBLE +INDO +INDOCHINA +INDOCHINESE +INDOCTRINATE +INDOCTRINATED +INDOCTRINATES +INDOCTRINATING +INDOCTRINATION +INDOEUROPEAN +INDOLENT +INDOLENTLY +INDOMITABLE +INDONESIA +INDONESIAN +INDOOR +INDOORS +INDUBITABLE +INDUCE +INDUCED +INDUCEMENT +INDUCEMENTS +INDUCER +INDUCES +INDUCING +INDUCT +INDUCTANCE +INDUCTANCES +INDUCTED +INDUCTEE +INDUCTING +INDUCTION +INDUCTIONS +INDUCTIVE +INDUCTIVELY +INDUCTOR +INDUCTORS +INDUCTS +INDULGE +INDULGED +INDULGENCE +INDULGENCES +INDULGENT +INDULGING +INDUS +INDUSTRIAL +INDUSTRIALISM +INDUSTRIALIST +INDUSTRIALISTS +INDUSTRIALIZATION +INDUSTRIALIZED +INDUSTRIALLY +INDUSTRIALS +INDUSTRIES +INDUSTRIOUS +INDUSTRIOUSLY +INDUSTRIOUSNESS +INDUSTRY +INDY +INEFFECTIVE +INEFFECTIVELY +INEFFECTIVENESS +INEFFECTUAL +INEFFICIENCIES +INEFFICIENCY +INEFFICIENT +INEFFICIENTLY +INELEGANT +INELIGIBLE +INEPT +INEQUALITIES +INEQUALITY +INEQUITABLE +INEQUITY +INERT +INERTIA +INERTIAL +INERTLY +INERTNESS +INESCAPABLE +INESCAPABLY +INESSENTIAL +INESTIMABLE +INEVITABILITIES +INEVITABILITY +INEVITABLE +INEVITABLY +INEXACT +INEXCUSABLE +INEXCUSABLY +INEXHAUSTIBLE +INEXORABLE +INEXORABLY +INEXPENSIVE +INEXPENSIVELY +INEXPERIENCE +INEXPERIENCED +INEXPLICABLE +INFALLIBILITY +INFALLIBLE +INFALLIBLY +INFAMOUS +INFAMOUSLY +INFAMY +INFANCY +INFANT +INFANTILE +INFANTRY +INFANTRYMAN +INFANTRYMEN +INFANTS +INFARCT +INFATUATE +INFEASIBLE +INFECT +INFECTED +INFECTING +INFECTION +INFECTIONS +INFECTIOUS +INFECTIOUSLY +INFECTIVE +INFECTS +INFER +INFERENCE +INFERENCES +INFERENTIAL +INFERIOR +INFERIORITY +INFERIORS +INFERNAL +INFERNALLY +INFERNO +INFERNOS +INFERRED +INFERRING +INFERS +INFERTILE +INFEST +INFESTED +INFESTING +INFESTS +INFIDEL +INFIDELITY +INFIDELS +INFIGHTING +INFILTRATE +INFINITE +INFINITELY +INFINITENESS +INFINITESIMAL +INFINITIVE +INFINITIVES +INFINITUDE +INFINITUM +INFINITY +INFIRM +INFIRMARY +INFIRMITY +INFIX +INFLAME +INFLAMED +INFLAMMABLE +INFLAMMATION +INFLAMMATORY +INFLATABLE +INFLATE +INFLATED +INFLATER +INFLATES +INFLATING +INFLATION +INFLATIONARY +INFLEXIBILITY +INFLEXIBLE +INFLICT +INFLICTED +INFLICTING +INFLICTS +INFLOW +INFLUENCE +INFLUENCED +INFLUENCES +INFLUENCING +INFLUENTIAL +INFLUENTIALLY +INFLUENZA +INFORM +INFORMAL +INFORMALITY +INFORMALLY +INFORMANT +INFORMANTS +INFORMATICA +INFORMATION +INFORMATIONAL +INFORMATIVE +INFORMATIVELY +INFORMED +INFORMER +INFORMERS +INFORMING +INFORMS +INFRA +INFRARED +INFRASTRUCTURE +INFREQUENT +INFREQUENTLY +INFRINGE +INFRINGED +INFRINGEMENT +INFRINGEMENTS +INFRINGES +INFRINGING +INFURIATE +INFURIATED +INFURIATES +INFURIATING +INFURIATION +INFUSE +INFUSED +INFUSES +INFUSING +INFUSION +INFUSIONS +INGENIOUS +INGENIOUSLY +INGENIOUSNESS +INGENUITY +INGENUOUS +INGERSOLL +INGEST +INGESTION +INGLORIOUS +INGOT +INGRAM +INGRATE +INGRATIATE +INGRATITUDE +INGREDIENT +INGREDIENTS +INGROWN +INHABIT +INHABITABLE +INHABITANCE +INHABITANT +INHABITANTS +INHABITED +INHABITING +INHABITS +INHALE +INHALED +INHALER +INHALES +INHALING +INHERE +INHERENT +INHERENTLY +INHERES +INHERIT +INHERITABLE +INHERITANCE +INHERITANCES +INHERITED +INHERITING +INHERITOR +INHERITORS +INHERITRESS +INHERITRESSES +INHERITRICES +INHERITRIX +INHERITS +INHIBIT +INHIBITED +INHIBITING +INHIBITION +INHIBITIONS +INHIBITOR +INHIBITORS +INHIBITORY +INHIBITS +INHOMOGENEITIES +INHOMOGENEITY +INHOMOGENEOUS +INHOSPITABLE +INHUMAN +INHUMANE +INIMICAL +INIMITABLE +INIQUITIES +INIQUITY +INITIAL +INITIALED +INITIALING +INITIALIZATION +INITIALIZATIONS +INITIALIZE +INITIALIZED +INITIALIZER +INITIALIZERS +INITIALIZES +INITIALIZING +INITIALLY +INITIALS +INITIATE +INITIATED +INITIATES +INITIATING +INITIATION +INITIATIONS +INITIATIVE +INITIATIVES +INITIATOR +INITIATORS +INJECT +INJECTED +INJECTING +INJECTION +INJECTIONS +INJECTIVE +INJECTS +INJUDICIOUS +INJUN +INJUNCTION +INJUNCTIONS +INJUNS +INJURE +INJURED +INJURES +INJURIES +INJURING +INJURIOUS +INJURY +INJUSTICE +INJUSTICES +INK +INKED +INKER +INKERS +INKING +INKINGS +INKLING +INKLINGS +INKS +INLAID +INLAND +INLAY +INLET +INLETS +INLINE +INMAN +INMATE +INMATES +INN +INNARDS +INNATE +INNATELY +INNER +INNERMOST +INNING +INNINGS +INNOCENCE +INNOCENT +INNOCENTLY +INNOCENTS +INNOCUOUS +INNOCUOUSLY +INNOCUOUSNESS +INNOVATE +INNOVATION +INNOVATIONS +INNOVATIVE +INNS +INNUENDO +INNUMERABILITY +INNUMERABLE +INNUMERABLY +INOCULATE +INOPERABLE +INOPERATIVE +INOPPORTUNE +INORDINATE +INORDINATELY +INORGANIC +INPUT +INPUTS +INQUEST +INQUIRE +INQUIRED +INQUIRER +INQUIRERS +INQUIRES +INQUIRIES +INQUIRING +INQUIRY +INQUISITION +INQUISITIONS +INQUISITIVE +INQUISITIVELY +INQUISITIVENESS +INROAD +INROADS +INSANE +INSANELY +INSANITY +INSATIABLE +INSCRIBE +INSCRIBED +INSCRIBES +INSCRIBING +INSCRIPTION +INSCRIPTIONS +INSCRUTABLE +INSECT +INSECTICIDE +INSECTS +INSECURE +INSECURELY +INSEMINATE +INSENSIBLE +INSENSITIVE +INSENSITIVELY +INSENSITIVITY +INSEPARABLE +INSERT +INSERTED +INSERTING +INSERTION +INSERTIONS +INSERTS +INSET +INSIDE +INSIDER +INSIDERS +INSIDES +INSIDIOUS +INSIDIOUSLY +INSIDIOUSNESS +INSIGHT +INSIGHTFUL +INSIGHTS +INSIGNIA +INSIGNIFICANCE +INSIGNIFICANT +INSINCERE +INSINCERITY +INSINUATE +INSINUATED +INSINUATES +INSINUATING +INSINUATION +INSINUATIONS +INSIPID +INSIST +INSISTED +INSISTENCE +INSISTENT +INSISTENTLY +INSISTING +INSISTS +INSOFAR +INSOLENCE +INSOLENT +INSOLENTLY +INSOLUBLE +INSOLVABLE +INSOLVENT +INSOMNIA +INSOMNIAC +INSPECT +INSPECTED +INSPECTING +INSPECTION +INSPECTIONS +INSPECTOR +INSPECTORS +INSPECTS +INSPIRATION +INSPIRATIONS +INSPIRE +INSPIRED +INSPIRER +INSPIRES +INSPIRING +INSTABILITIES +INSTABILITY +INSTALL +INSTALLATION +INSTALLATIONS +INSTALLED +INSTALLER +INSTALLERS +INSTALLING +INSTALLMENT +INSTALLMENTS +INSTALLS +INSTANCE +INSTANCES +INSTANT +INSTANTANEOUS +INSTANTANEOUSLY +INSTANTER +INSTANTIATE +INSTANTIATED +INSTANTIATES +INSTANTIATING +INSTANTIATION +INSTANTIATIONS +INSTANTLY +INSTANTS +INSTEAD +INSTIGATE +INSTIGATED +INSTIGATES +INSTIGATING +INSTIGATOR +INSTIGATORS +INSTILL +INSTINCT +INSTINCTIVE +INSTINCTIVELY +INSTINCTS +INSTINCTUAL +INSTITUTE +INSTITUTED +INSTITUTER +INSTITUTERS +INSTITUTES +INSTITUTING +INSTITUTION +INSTITUTIONAL +INSTITUTIONALIZE +INSTITUTIONALIZED +INSTITUTIONALIZES +INSTITUTIONALIZING +INSTITUTIONALLY +INSTITUTIONS +INSTRUCT +INSTRUCTED +INSTRUCTING +INSTRUCTION +INSTRUCTIONAL +INSTRUCTIONS +INSTRUCTIVE +INSTRUCTIVELY +INSTRUCTOR +INSTRUCTORS +INSTRUCTS +INSTRUMENT +INSTRUMENTAL +INSTRUMENTALIST +INSTRUMENTALISTS +INSTRUMENTALLY +INSTRUMENTALS +INSTRUMENTATION +INSTRUMENTED +INSTRUMENTING +INSTRUMENTS +INSUBORDINATE +INSUFFERABLE +INSUFFICIENT +INSUFFICIENTLY +INSULAR +INSULATE +INSULATED +INSULATES +INSULATING +INSULATION +INSULATOR +INSULATORS +INSULIN +INSULT +INSULTED +INSULTING +INSULTS +INSUPERABLE +INSUPPORTABLE +INSURANCE +INSURE +INSURED +INSURER +INSURERS +INSURES +INSURGENT +INSURGENTS +INSURING +INSURMOUNTABLE +INSURRECTION +INSURRECTIONS +INTACT +INTANGIBLE +INTANGIBLES +INTEGER +INTEGERS +INTEGRABLE +INTEGRAL +INTEGRALS +INTEGRAND +INTEGRATE +INTEGRATED +INTEGRATES +INTEGRATING +INTEGRATION +INTEGRATIONS +INTEGRATIVE +INTEGRITY +INTEL +INTELLECT +INTELLECTS +INTELLECTUAL +INTELLECTUALLY +INTELLECTUALS +INTELLIGENCE +INTELLIGENT +INTELLIGENTLY +INTELLIGENTSIA +INTELLIGIBILITY +INTELLIGIBLE +INTELLIGIBLY +INTELSAT +INTEMPERATE +INTEND +INTENDED +INTENDING +INTENDS +INTENSE +INTENSELY +INTENSIFICATION +INTENSIFIED +INTENSIFIER +INTENSIFIERS +INTENSIFIES +INTENSIFY +INTENSIFYING +INTENSITIES +INTENSITY +INTENSIVE +INTENSIVELY +INTENT +INTENTION +INTENTIONAL +INTENTIONALLY +INTENTIONED +INTENTIONS +INTENTLY +INTENTNESS +INTENTS +INTER +INTERACT +INTERACTED +INTERACTING +INTERACTION +INTERACTIONS +INTERACTIVE +INTERACTIVELY +INTERACTIVITY +INTERACTS +INTERCEPT +INTERCEPTED +INTERCEPTING +INTERCEPTION +INTERCEPTOR +INTERCEPTS +INTERCHANGE +INTERCHANGEABILITY +INTERCHANGEABLE +INTERCHANGEABLY +INTERCHANGED +INTERCHANGER +INTERCHANGES +INTERCHANGING +INTERCHANGINGS +INTERCHANNEL +INTERCITY +INTERCOM +INTERCOMMUNICATE +INTERCOMMUNICATED +INTERCOMMUNICATES +INTERCOMMUNICATING +INTERCOMMUNICATION +INTERCONNECT +INTERCONNECTED +INTERCONNECTING +INTERCONNECTION +INTERCONNECTIONS +INTERCONNECTS +INTERCONTINENTAL +INTERCOURSE +INTERDATA +INTERDEPENDENCE +INTERDEPENDENCIES +INTERDEPENDENCY +INTERDEPENDENT +INTERDICT +INTERDICTION +INTERDISCIPLINARY +INTEREST +INTERESTED +INTERESTING +INTERESTINGLY +INTERESTS +INTERFACE +INTERFACED +INTERFACER +INTERFACES +INTERFACING +INTERFERE +INTERFERED +INTERFERENCE +INTERFERENCES +INTERFERES +INTERFERING +INTERFERINGLY +INTERFEROMETER +INTERFEROMETRIC +INTERFEROMETRY +INTERFRAME +INTERGROUP +INTERIM +INTERIOR +INTERIORS +INTERJECT +INTERLACE +INTERLACED +INTERLACES +INTERLACING +INTERLEAVE +INTERLEAVED +INTERLEAVES +INTERLEAVING +INTERLINK +INTERLINKED +INTERLINKS +INTERLISP +INTERMEDIARY +INTERMEDIATE +INTERMEDIATES +INTERMINABLE +INTERMINGLE +INTERMINGLED +INTERMINGLES +INTERMINGLING +INTERMISSION +INTERMITTENT +INTERMITTENTLY +INTERMIX +INTERMIXED +INTERMODULE +INTERN +INTERNAL +INTERNALIZE +INTERNALIZED +INTERNALIZES +INTERNALIZING +INTERNALLY +INTERNALS +INTERNATIONAL +INTERNATIONALITY +INTERNATIONALLY +INTERNED +INTERNET +INTERNET +INTERNETWORK +INTERNING +INTERNS +INTERNSHIP +INTEROFFICE +INTERPERSONAL +INTERPLAY +INTERPOL +INTERPOLATE +INTERPOLATED +INTERPOLATES +INTERPOLATING +INTERPOLATION +INTERPOLATIONS +INTERPOSE +INTERPOSED +INTERPOSES +INTERPOSING +INTERPRET +INTERPRETABLE +INTERPRETATION +INTERPRETATIONS +INTERPRETED +INTERPRETER +INTERPRETERS +INTERPRETING +INTERPRETIVE +INTERPRETIVELY +INTERPRETS +INTERPROCESS +INTERRELATE +INTERRELATED +INTERRELATES +INTERRELATING +INTERRELATION +INTERRELATIONS +INTERRELATIONSHIP +INTERRELATIONSHIPS +INTERROGATE +INTERROGATED +INTERROGATES +INTERROGATING +INTERROGATION +INTERROGATIONS +INTERROGATIVE +INTERRUPT +INTERRUPTED +INTERRUPTIBLE +INTERRUPTING +INTERRUPTION +INTERRUPTIONS +INTERRUPTIVE +INTERRUPTS +INTERSECT +INTERSECTED +INTERSECTING +INTERSECTION +INTERSECTIONS +INTERSECTS +INTERSPERSE +INTERSPERSED +INTERSPERSES +INTERSPERSING +INTERSPERSION +INTERSTAGE +INTERSTATE +INTERTWINE +INTERTWINED +INTERTWINES +INTERTWINING +INTERVAL +INTERVALS +INTERVENE +INTERVENED +INTERVENES +INTERVENING +INTERVENTION +INTERVENTIONS +INTERVIEW +INTERVIEWED +INTERVIEWEE +INTERVIEWER +INTERVIEWERS +INTERVIEWING +INTERVIEWS +INTERWOVEN +INTESTATE +INTESTINAL +INTESTINE +INTESTINES +INTIMACY +INTIMATE +INTIMATED +INTIMATELY +INTIMATING +INTIMATION +INTIMATIONS +INTIMIDATE +INTIMIDATED +INTIMIDATES +INTIMIDATING +INTIMIDATION +INTO +INTOLERABLE +INTOLERABLY +INTOLERANCE +INTOLERANT +INTONATION +INTONATIONS +INTONE +INTOXICANT +INTOXICATE +INTOXICATED +INTOXICATING +INTOXICATION +INTRACTABILITY +INTRACTABLE +INTRACTABLY +INTRAGROUP +INTRALINE +INTRAMURAL +INTRAMUSCULAR +INTRANSIGENT +INTRANSITIVE +INTRANSITIVELY +INTRAOFFICE +INTRAPROCESS +INTRASTATE +INTRAVENOUS +INTREPID +INTRICACIES +INTRICACY +INTRICATE +INTRICATELY +INTRIGUE +INTRIGUED +INTRIGUES +INTRIGUING +INTRINSIC +INTRINSICALLY +INTRODUCE +INTRODUCED +INTRODUCES +INTRODUCING +INTRODUCTION +INTRODUCTIONS +INTRODUCTORY +INTROSPECT +INTROSPECTION +INTROSPECTIONS +INTROSPECTIVE +INTROVERT +INTROVERTED +INTRUDE +INTRUDED +INTRUDER +INTRUDERS +INTRUDES +INTRUDING +INTRUSION +INTRUSIONS +INTRUST +INTUBATE +INTUBATED +INTUBATES +INTUBATION +INTUITION +INTUITIONIST +INTUITIONS +INTUITIVE +INTUITIVELY +INUNDATE +INVADE +INVADED +INVADER +INVADERS +INVADES +INVADING +INVALID +INVALIDATE +INVALIDATED +INVALIDATES +INVALIDATING +INVALIDATION +INVALIDATIONS +INVALIDITIES +INVALIDITY +INVALIDLY +INVALIDS +INVALUABLE +INVARIABLE +INVARIABLY +INVARIANCE +INVARIANT +INVARIANTLY +INVARIANTS +INVASION +INVASIONS +INVECTIVE +INVENT +INVENTED +INVENTING +INVENTION +INVENTIONS +INVENTIVE +INVENTIVELY +INVENTIVENESS +INVENTOR +INVENTORIES +INVENTORS +INVENTORY +INVENTS +INVERNESS +INVERSE +INVERSELY +INVERSES +INVERSION +INVERSIONS +INVERT +INVERTEBRATE +INVERTEBRATES +INVERTED +INVERTER +INVERTERS +INVERTIBLE +INVERTING +INVERTS +INVEST +INVESTED +INVESTIGATE +INVESTIGATED +INVESTIGATES +INVESTIGATING +INVESTIGATION +INVESTIGATIONS +INVESTIGATIVE +INVESTIGATOR +INVESTIGATORS +INVESTIGATORY +INVESTING +INVESTMENT +INVESTMENTS +INVESTOR +INVESTORS +INVESTS +INVETERATE +INVIGORATE +INVINCIBLE +INVISIBILITY +INVISIBLE +INVISIBLY +INVITATION +INVITATIONS +INVITE +INVITED +INVITES +INVITING +INVOCABLE +INVOCATION +INVOCATIONS +INVOICE +INVOICED +INVOICES +INVOICING +INVOKE +INVOKED +INVOKER +INVOKES +INVOKING +INVOLUNTARILY +INVOLUNTARY +INVOLVE +INVOLVED +INVOLVEMENT +INVOLVEMENTS +INVOLVES +INVOLVING +INWARD +INWARDLY +INWARDNESS +INWARDS +IODINE +ION +IONIAN +IONIANS +IONICIZATION +IONICIZATIONS +IONICIZE +IONICIZES +IONOSPHERE +IONOSPHERIC +IONS +IOTA +IOWA +IRA +IRAN +IRANIAN +IRANIANS +IRANIZE +IRANIZES +IRAQ +IRAQI +IRAQIS +IRATE +IRATELY +IRATENESS +IRE +IRELAND +IRENE +IRES +IRIS +IRISH +IRISHIZE +IRISHIZES +IRISHMAN +IRISHMEN +IRK +IRKED +IRKING +IRKS +IRKSOME +IRMA +IRON +IRONED +IRONIC +IRONICAL +IRONICALLY +IRONIES +IRONING +IRONINGS +IRONS +IRONY +IROQUOIS +IRRADIATE +IRRATIONAL +IRRATIONALLY +IRRATIONALS +IRRAWADDY +IRRECONCILABLE +IRRECOVERABLE +IRREDUCIBLE +IRREDUCIBLY +IRREFLEXIVE +IRREFUTABLE +IRREGULAR +IRREGULARITIES +IRREGULARITY +IRREGULARLY +IRREGULARS +IRRELEVANCE +IRRELEVANCES +IRRELEVANT +IRRELEVANTLY +IRREPLACEABLE +IRREPRESSIBLE +IRREPRODUCIBILITY +IRREPRODUCIBLE +IRRESISTIBLE +IRRESPECTIVE +IRRESPECTIVELY +IRRESPONSIBLE +IRRESPONSIBLY +IRRETRIEVABLY +IRREVERENT +IRREVERSIBILITY +IRREVERSIBLE +IRREVERSIBLY +IRREVOCABLE +IRREVOCABLY +IRRIGATE +IRRIGATED +IRRIGATES +IRRIGATING +IRRIGATION +IRRITABLE +IRRITANT +IRRITATE +IRRITATED +IRRITATES +IRRITATING +IRRITATION +IRRITATIONS +IRVIN +IRVINE +IRVING +IRWIN +ISAAC +ISAACS +ISAACSON +ISABEL +ISABELLA +ISADORE +ISAIAH +ISFAHAN +ISING +ISIS +ISLAM +ISLAMABAD +ISLAMIC +ISLAMIZATION +ISLAMIZATIONS +ISLAMIZE +ISLAMIZES +ISLAND +ISLANDER +ISLANDERS +ISLANDIA +ISLANDS +ISLE +ISLES +ISLET +ISLETS +ISOLATE +ISOLATED +ISOLATES +ISOLATING +ISOLATION +ISOLATIONS +ISOLDE +ISOMETRIC +ISOMORPHIC +ISOMORPHICALLY +ISOMORPHISM +ISOMORPHISMS +ISOTOPE +ISOTOPES +ISRAEL +ISRAELI +ISRAELIS +ISRAELITE +ISRAELITES +ISRAELITIZE +ISRAELITIZES +ISSUANCE +ISSUE +ISSUED +ISSUER +ISSUERS +ISSUES +ISSUING +ISTANBUL +ISTHMUS +ISTVAN +ITALIAN +ITALIANIZATION +ITALIANIZATIONS +ITALIANIZE +ITALIANIZER +ITALIANIZERS +ITALIANIZES +ITALIANS +ITALIC +ITALICIZE +ITALICIZED +ITALICS +ITALY +ITCH +ITCHES +ITCHING +ITEL +ITEM +ITEMIZATION +ITEMIZATIONS +ITEMIZE +ITEMIZED +ITEMIZES +ITEMIZING +ITEMS +ITERATE +ITERATED +ITERATES +ITERATING +ITERATION +ITERATIONS +ITERATIVE +ITERATIVELY +ITERATOR +ITERATORS +ITHACA +ITHACAN +ITINERARIES +ITINERARY +ITO +ITS +ITSELF +IVAN +IVANHOE +IVERSON +IVIES +IVORY +IVY +IZAAK +IZVESTIA +JAB +JABBED +JABBING +JABLONSKY +JABS +JACK +JACKASS +JACKET +JACKETED +JACKETS +JACKIE +JACKING +JACKKNIFE +JACKMAN +JACKPOT +JACKSON +JACKSONIAN +JACKSONS +JACKSONVILLE +JACKY +JACOB +JACOBEAN +JACOBI +JACOBIAN +JACOBINIZE +JACOBITE +JACOBS +JACOBSEN +JACOBSON +JACOBUS +JACOBY +JACQUELINE +JACQUES +JADE +JADED +JAEGER +JAGUAR +JAIL +JAILED +JAILER +JAILERS +JAILING +JAILS +JAIME +JAKARTA +JAKE +JAKES +JAM +JAMAICA +JAMAICAN +JAMES +JAMESON +JAMESTOWN +JAMMED +JAMMING +JAMS +JANE +JANEIRO +JANESVILLE +JANET +JANICE +JANIS +JANITOR +JANITORS +JANOS +JANSEN +JANSENIST +JANUARIES +JANUARY +JANUS +JAPAN +JAPANESE +JAPANIZATION +JAPANIZATIONS +JAPANIZE +JAPANIZED +JAPANIZES +JAPANIZING +JAR +JARGON +JARRED +JARRING +JARRINGLY +JARS +JARVIN +JASON +JASTROW +JAUNDICE +JAUNT +JAUNTINESS +JAUNTS +JAUNTY +JAVA +JAVANESE +JAVELIN +JAVELINS +JAW +JAWBONE +JAWS +JAY +JAYCEE +JAYCEES +JAZZ +JAZZY +JEALOUS +JEALOUSIES +JEALOUSLY +JEALOUSY +JEAN +JEANNE +JEANNIE +JEANS +JED +JEEP +JEEPS +JEER +JEERS +JEFF +JEFFERSON +JEFFERSONIAN +JEFFERSONIANS +JEFFREY +JEHOVAH +JELLIES +JELLO +JELLY +JELLYFISH +JENKINS +JENNIE +JENNIFER +JENNINGS +JENNY +JENSEN +JEOPARDIZE +JEOPARDIZED +JEOPARDIZES +JEOPARDIZING +JEOPARDY +JEREMIAH +JEREMY +JERES +JERICHO +JERK +JERKED +JERKINESS +JERKING +JERKINGS +JERKS +JERKY +JEROBOAM +JEROME +JERRY +JERSEY +JERSEYS +JERUSALEM +JESSE +JESSICA +JESSIE +JESSY +JEST +JESTED +JESTER +JESTING +JESTS +JESUIT +JESUITISM +JESUITIZE +JESUITIZED +JESUITIZES +JESUITIZING +JESUITS +JESUS +JET +JETLINER +JETS +JETTED +JETTING +JEW +JEWEL +JEWELED +JEWELER +JEWELL +JEWELLED +JEWELRIES +JEWELRY +JEWELS +JEWETT +JEWISH +JEWISHNESS +JEWS +JIFFY +JIG +JIGS +JIGSAW +JILL +JIM +JIMENEZ +JIMMIE +JINGLE +JINGLED +JINGLING +JINNY +JITTER +JITTERBUG +JITTERY +JOAN +JOANNA +JOANNE +JOAQUIN +JOB +JOBREL +JOBS +JOCKEY +JOCKSTRAP +JOCUND +JODY +JOE +JOEL +JOES +JOG +JOGGING +JOGS +JOHANN +JOHANNA +JOHANNES +JOHANNESBURG +JOHANSEN +JOHANSON +JOHN +JOHNNIE +JOHNNY +JOHNS +JOHNSEN +JOHNSON +JOHNSTON +JOHNSTOWN +JOIN +JOINED +JOINER +JOINERS +JOINING +JOINS +JOINT +JOINTLY +JOINTS +JOKE +JOKED +JOKER +JOKERS +JOKES +JOKING +JOKINGLY +JOLIET +JOLLA +JOLLY +JOLT +JOLTED +JOLTING +JOLTS +JON +JONAS +JONATHAN +JONATHANIZATION +JONATHANIZATIONS +JONES +JONESES +JONQUIL +JOPLIN +JORDAN +JORDANIAN +JORGE +JORGENSEN +JORGENSON +JOSE +JOSEF +JOSEPH +JOSEPHINE +JOSEPHSON +JOSEPHUS +JOSHUA +JOSIAH +JOSTLE +JOSTLED +JOSTLES +JOSTLING +JOT +JOTS +JOTTED +JOTTING +JOULE +JOURNAL +JOURNALISM +JOURNALIST +JOURNALISTS +JOURNALIZE +JOURNALIZED +JOURNALIZES +JOURNALIZING +JOURNALS +JOURNEY +JOURNEYED +JOURNEYING +JOURNEYINGS +JOURNEYMAN +JOURNEYMEN +JOURNEYS +JOUST +JOUSTED +JOUSTING +JOUSTS +JOVANOVICH +JOVE +JOVIAL +JOVIAN +JOY +JOYCE +JOYFUL +JOYFULLY +JOYOUS +JOYOUSLY +JOYOUSNESS +JOYRIDE +JOYS +JOYSTICK +JUAN +JUANITA +JUBAL +JUBILEE +JUDAICA +JUDAISM +JUDAS +JUDD +JUDDER +JUDDERED +JUDDERING +JUDDERS +JUDE +JUDEA +JUDGE +JUDGED +JUDGES +JUDGING +JUDGMENT +JUDGMENTS +JUDICIAL +JUDICIARY +JUDICIOUS +JUDICIOUSLY +JUDITH +JUDO +JUDSON +JUDY +JUG +JUGGLE +JUGGLER +JUGGLERS +JUGGLES +JUGGLING +JUGOSLAVIA +JUGS +JUICE +JUICES +JUICIEST +JUICY +JUKES +JULES +JULIA +JULIAN +JULIE +JULIES +JULIET +JULIO +JULIUS +JULY +JUMBLE +JUMBLED +JUMBLES +JUMBO +JUMP +JUMPED +JUMPER +JUMPERS +JUMPING +JUMPS +JUMPY +JUNCTION +JUNCTIONS +JUNCTURE +JUNCTURES +JUNE +JUNEAU +JUNES +JUNG +JUNGIAN +JUNGLE +JUNGLES +JUNIOR +JUNIORS +JUNIPER +JUNK +JUNKER +JUNKERS +JUNKS +JUNKY +JUNO +JUNTA +JUPITER +JURA +JURAS +JURASSIC +JURE +JURIES +JURISDICTION +JURISDICTIONS +JURISPRUDENCE +JURIST +JUROR +JURORS +JURY +JUST +JUSTICE +JUSTICES +JUSTIFIABLE +JUSTIFIABLY +JUSTIFICATION +JUSTIFICATIONS +JUSTIFIED +JUSTIFIER +JUSTIFIERS +JUSTIFIES +JUSTIFY +JUSTIFYING +JUSTINE +JUSTINIAN +JUSTLY +JUSTNESS +JUT +JUTISH +JUTLAND +JUTTING +JUVENILE +JUVENILES +JUXTAPOSE +JUXTAPOSED +JUXTAPOSES +JUXTAPOSING +KABUKI +KABUL +KADDISH +KAFKA +KAFKAESQUE +KAHN +KAJAR +KALAMAZOO +KALI +KALMUK +KAMCHATKA +KAMIKAZE +KAMIKAZES +KAMPALA +KAMPUCHEA +KANARESE +KANE +KANGAROO +KANJI +KANKAKEE +KANNADA +KANSAS +KANT +KANTIAN +KAPLAN +KAPPA +KARACHI +KARAMAZOV +KARATE +KAREN +KARL +KAROL +KARP +KASHMIR +KASKASKIA +KATE +KATHARINE +KATHERINE +KATHLEEN +KATHY +KATIE +KATMANDU +KATOWICE +KATZ +KAUFFMAN +KAUFMAN +KAY +KEATON +KEATS +KEEGAN +KEEL +KEELED +KEELING +KEELS +KEEN +KEENAN +KEENER +KEENEST +KEENLY +KEENNESS +KEEP +KEEPER +KEEPERS +KEEPING +KEEPS +KEITH +KELLER +KELLEY +KELLOGG +KELLY +KELSEY +KELVIN +KEMP +KEN +KENDALL +KENILWORTH +KENNAN +KENNECOTT +KENNEDY +KENNEL +KENNELS +KENNETH +KENNEY +KENNING +KENNY +KENOSHA +KENSINGTON +KENT +KENTON +KENTUCKY +KENYA +KENYON +KEPLER +KEPT +KERCHIEF +KERCHIEFS +KERMIT +KERN +KERNEL +KERNELS +KERNIGHAN +KEROSENE +KEROUAC +KERR +KESSLER +KETCHUP +KETTERING +KETTLE +KETTLES +KEVIN +KEWASKUM +KEWAUNEE +KEY +KEYBOARD +KEYBOARDS +KEYED +KEYES +KEYHOLE +KEYING +KEYNES +KEYNESIAN +KEYNOTE +KEYPAD +KEYPADS +KEYS +KEYSTROKE +KEYSTROKES +KEYWORD +KEYWORDS +KHARTOUM +KHMER +KHRUSHCHEV +KHRUSHCHEVS +KICK +KICKAPOO +KICKED +KICKER +KICKERS +KICKING +KICKOFF +KICKS +KID +KIDDE +KIDDED +KIDDIE +KIDDING +KIDNAP +KIDNAPPER +KIDNAPPERS +KIDNAPPING +KIDNAPPINGS +KIDNAPS +KIDNEY +KIDNEYS +KIDS +KIEFFER +KIEL +KIEV +KIEWIT +KIGALI +KIKUYU +KILGORE +KILIMANJARO +KILL +KILLEBREW +KILLED +KILLER +KILLERS +KILLING +KILLINGLY +KILLINGS +KILLJOY +KILLS +KILOBIT +KILOBITS +KILOBLOCK +KILOBYTE +KILOBYTES +KILOGRAM +KILOGRAMS +KILOHERTZ +KILOHM +KILOJOULE +KILOMETER +KILOMETERS +KILOTON +KILOVOLT +KILOWATT +KILOWORD +KIM +KIMBALL +KIMBERLY +KIMONO +KIN +KIND +KINDER +KINDERGARTEN +KINDEST +KINDHEARTED +KINDLE +KINDLED +KINDLES +KINDLING +KINDLY +KINDNESS +KINDRED +KINDS +KINETIC +KING +KINGDOM +KINGDOMS +KINGLY +KINGPIN +KINGS +KINGSBURY +KINGSLEY +KINGSTON +KINGSTOWN +KINGWOOD +KINK +KINKY +KINNEY +KINNICKINNIC +KINSEY +KINSHASHA +KINSHIP +KINSMAN +KIOSK +KIOWA +KIPLING +KIRBY +KIRCHNER +KIRCHOFF +KIRK +KIRKLAND +KIRKPATRICK +KIRKWOOD +KIROV +KISS +KISSED +KISSER +KISSERS +KISSES +KISSING +KIT +KITAKYUSHU +KITCHEN +KITCHENETTE +KITCHENS +KITE +KITED +KITES +KITING +KITS +KITTEN +KITTENISH +KITTENS +KITTY +KIWANIS +KLAN +KLAUS +KLAXON +KLEIN +KLEINROCK +KLINE +KLUDGE +KLUDGES +KLUX +KLYSTRON +KNACK +KNAPP +KNAPSACK +KNAPSACKS +KNAUER +KNAVE +KNAVES +KNEAD +KNEADS +KNEE +KNEECAP +KNEED +KNEEING +KNEEL +KNEELED +KNEELING +KNEELS +KNEES +KNELL +KNELLS +KNELT +KNEW +KNICKERBOCKER +KNICKERBOCKERS +KNIFE +KNIFED +KNIFES +KNIFING +KNIGHT +KNIGHTED +KNIGHTHOOD +KNIGHTING +KNIGHTLY +KNIGHTS +KNIGHTSBRIDGE +KNIT +KNITS +KNIVES +KNOB +KNOBELOCH +KNOBS +KNOCK +KNOCKDOWN +KNOCKED +KNOCKER +KNOCKERS +KNOCKING +KNOCKOUT +KNOCKS +KNOLL +KNOLLS +KNOSSOS +KNOT +KNOTS +KNOTT +KNOTTED +KNOTTING +KNOW +KNOWABLE +KNOWER +KNOWHOW +KNOWING +KNOWINGLY +KNOWLEDGE +KNOWLEDGEABLE +KNOWLES +KNOWLTON +KNOWN +KNOWS +KNOX +KNOXVILLE +KNUCKLE +KNUCKLED +KNUCKLES +KNUDSEN +KNUDSON +KNUTH +KNUTSEN +KNUTSON +KOALA +KOBAYASHI +KOCH +KOCHAB +KODACHROME +KODAK +KODIAK +KOENIG +KOENIGSBERG +KOHLER +KONG +KONRAD +KOPPERS +KORAN +KOREA +KOREAN +KOREANS +KOSHER +KOVACS +KOWALEWSKI +KOWALSKI +KOWLOON +KOWTOW +KRAEMER +KRAKATOA +KRAKOW +KRAMER +KRAUSE +KREBS +KREMLIN +KRESGE +KRIEGER +KRISHNA +KRISTIN +KRONECKER +KRUEGER +KRUGER +KRUSE +KUALA +KUDO +KUENNING +KUHN +KUMAR +KURD +KURDISH +KURT +KUWAIT +KUWAITI +KYOTO +LAB +LABAN +LABEL +LABELED +LABELING +LABELLED +LABELLER +LABELLERS +LABELLING +LABELS +LABOR +LABORATORIES +LABORATORY +LABORED +LABORER +LABORERS +LABORING +LABORINGS +LABORIOUS +LABORIOUSLY +LABORS +LABRADOR +LABS +LABYRINTH +LABYRINTHS +LAC +LACE +LACED +LACERATE +LACERATED +LACERATES +LACERATING +LACERATION +LACERATIONS +LACERTA +LACES +LACEY +LACHESIS +LACING +LACK +LACKAWANNA +LACKED +LACKEY +LACKING +LACKS +LACQUER +LACQUERED +LACQUERS +LACROSSE +LACY +LAD +LADDER +LADEN +LADIES +LADING +LADLE +LADS +LADY +LADYLIKE +LAFAYETTE +LAG +LAGER +LAGERS +LAGOON +LAGOONS +LAGOS +LAGRANGE +LAGRANGIAN +LAGS +LAGUERRE +LAGUNA +LAHORE +LAID +LAIDLAW +LAIN +LAIR +LAIRS +LAISSEZ +LAKE +LAKEHURST +LAKES +LAKEWOOD +LAMAR +LAMARCK +LAMB +LAMBDA +LAMBDAS +LAMBERT +LAMBS +LAME +LAMED +LAMELY +LAMENESS +LAMENT +LAMENTABLE +LAMENTATION +LAMENTATIONS +LAMENTED +LAMENTING +LAMENTS +LAMES +LAMINAR +LAMING +LAMP +LAMPLIGHT +LAMPOON +LAMPORT +LAMPREY +LAMPS +LANA +LANCASHIRE +LANCASTER +LANCE +LANCED +LANCELOT +LANCER +LANCES +LAND +LANDED +LANDER +LANDERS +LANDFILL +LANDING +LANDINGS +LANDIS +LANDLADIES +LANDLADY +LANDLORD +LANDLORDS +LANDMARK +LANDMARKS +LANDOWNER +LANDOWNERS +LANDS +LANDSCAPE +LANDSCAPED +LANDSCAPES +LANDSCAPING +LANDSLIDE +LANDWEHR +LANE +LANES +LANG +LANGE +LANGELAND +LANGFORD +LANGLEY +LANGMUIR +LANGUAGE +LANGUAGES +LANGUID +LANGUIDLY +LANGUIDNESS +LANGUISH +LANGUISHED +LANGUISHES +LANGUISHING +LANKA +LANSING +LANTERN +LANTERNS +LAO +LAOCOON +LAOS +LAOTIAN +LAOTIANS +LAP +LAPEL +LAPELS +LAPLACE +LAPLACIAN +LAPPING +LAPS +LAPSE +LAPSED +LAPSES +LAPSING +LARAMIE +LARD +LARDER +LAREDO +LARES +LARGE +LARGELY +LARGENESS +LARGER +LARGEST +LARK +LARKIN +LARKS +LARRY +LARS +LARSEN +LARSON +LARVA +LARVAE +LARYNX +LASCIVIOUS +LASER +LASERS +LASH +LASHED +LASHES +LASHING +LASHINGS +LASS +LASSES +LASSO +LAST +LASTED +LASTING +LASTLY +LASTS +LASZLO +LATCH +LATCHED +LATCHES +LATCHING +LATE +LATELY +LATENCY +LATENESS +LATENT +LATER +LATERAL +LATERALLY +LATERAN +LATEST +LATEX +LATHE +LATHROP +LATIN +LATINATE +LATINITY +LATINIZATION +LATINIZATIONS +LATINIZE +LATINIZED +LATINIZER +LATINIZERS +LATINIZES +LATINIZING +LATITUDE +LATITUDES +LATRINE +LATRINES +LATROBE +LATTER +LATTERLY +LATTICE +LATTICES +LATTIMER +LATVIA +LAUDABLE +LAUDERDALE +LAUE +LAUGH +LAUGHABLE +LAUGHABLY +LAUGHED +LAUGHING +LAUGHINGLY +LAUGHINGSTOCK +LAUGHLIN +LAUGHS +LAUGHTER +LAUNCH +LAUNCHED +LAUNCHER +LAUNCHES +LAUNCHING +LAUNCHINGS +LAUNDER +LAUNDERED +LAUNDERER +LAUNDERING +LAUNDERINGS +LAUNDERS +LAUNDROMAT +LAUNDROMATS +LAUNDRY +LAUREATE +LAUREL +LAURELS +LAUREN +LAURENCE +LAURENT +LAURENTIAN +LAURIE +LAUSANNE +LAVA +LAVATORIES +LAVATORY +LAVENDER +LAVISH +LAVISHED +LAVISHING +LAVISHLY +LAVOISIER +LAW +LAWBREAKER +LAWFORD +LAWFUL +LAWFULLY +LAWGIVER +LAWLESS +LAWLESSNESS +LAWN +LAWNS +LAWRENCE +LAWRENCEVILLE +LAWS +LAWSON +LAWSUIT +LAWSUITS +LAWYER +LAWYERS +LAX +LAXATIVE +LAY +LAYER +LAYERED +LAYERING +LAYERS +LAYING +LAYMAN +LAYMEN +LAYOFF +LAYOFFS +LAYOUT +LAYOUTS +LAYS +LAYTON +LAZARUS +LAZED +LAZIER +LAZIEST +LAZILY +LAZINESS +LAZING +LAZY +LAZYBONES +LEAD +LEADED +LEADEN +LEADER +LEADERS +LEADERSHIP +LEADERSHIPS +LEADING +LEADINGS +LEADS +LEAF +LEAFED +LEAFIEST +LEAFING +LEAFLESS +LEAFLET +LEAFLETS +LEAFY +LEAGUE +LEAGUED +LEAGUER +LEAGUERS +LEAGUES +LEAK +LEAKAGE +LEAKAGES +LEAKED +LEAKING +LEAKS +LEAKY +LEAN +LEANDER +LEANED +LEANER +LEANEST +LEANING +LEANNESS +LEANS +LEAP +LEAPED +LEAPFROG +LEAPING +LEAPS +LEAPT +LEAR +LEARN +LEARNED +LEARNER +LEARNERS +LEARNING +LEARNS +LEARY +LEASE +LEASED +LEASES +LEASH +LEASHES +LEASING +LEAST +LEATHER +LEATHERED +LEATHERN +LEATHERNECK +LEATHERS +LEAVE +LEAVED +LEAVEN +LEAVENED +LEAVENING +LEAVENWORTH +LEAVES +LEAVING +LEAVINGS +LEBANESE +LEBANON +LEBESGUE +LECHERY +LECTURE +LECTURED +LECTURER +LECTURERS +LECTURES +LECTURING +LED +LEDGE +LEDGER +LEDGERS +LEDGES +LEE +LEECH +LEECHES +LEEDS +LEEK +LEER +LEERY +LEES +LEEUWENHOEK +LEEWARD +LEEWAY +LEFT +LEFTIST +LEFTISTS +LEFTMOST +LEFTOVER +LEFTOVERS +LEFTWARD +LEG +LEGACIES +LEGACY +LEGAL +LEGALITY +LEGALIZATION +LEGALIZE +LEGALIZED +LEGALIZES +LEGALIZING +LEGALLY +LEGEND +LEGENDARY +LEGENDRE +LEGENDS +LEGER +LEGERS +LEGGED +LEGGINGS +LEGIBILITY +LEGIBLE +LEGIBLY +LEGION +LEGIONS +LEGISLATE +LEGISLATED +LEGISLATES +LEGISLATING +LEGISLATION +LEGISLATIVE +LEGISLATOR +LEGISLATORS +LEGISLATURE +LEGISLATURES +LEGITIMACY +LEGITIMATE +LEGITIMATELY +LEGS +LEGUME +LEHIGH +LEHMAN +LEIBNIZ +LEIDEN +LEIGH +LEIGHTON +LEILA +LEIPZIG +LEISURE +LEISURELY +LELAND +LEMKE +LEMMA +LEMMAS +LEMMING +LEMMINGS +LEMON +LEMONADE +LEMONS +LEMUEL +LEN +LENA +LEND +LENDER +LENDERS +LENDING +LENDS +LENGTH +LENGTHEN +LENGTHENED +LENGTHENING +LENGTHENS +LENGTHLY +LENGTHS +LENGTHWISE +LENGTHY +LENIENCY +LENIENT +LENIENTLY +LENIN +LENINGRAD +LENINISM +LENINIST +LENNOX +LENNY +LENORE +LENS +LENSES +LENT +LENTEN +LENTIL +LENTILS +LEO +LEON +LEONA +LEONARD +LEONARDO +LEONE +LEONID +LEOPARD +LEOPARDS +LEOPOLD +LEOPOLDVILLE +LEPER +LEPROSY +LEROY +LESBIAN +LESBIANS +LESLIE +LESOTHO +LESS +LESSEN +LESSENED +LESSENING +LESSENS +LESSER +LESSON +LESSONS +LESSOR +LEST +LESTER +LET +LETHAL +LETHE +LETITIA +LETS +LETTER +LETTERED +LETTERER +LETTERHEAD +LETTERING +LETTERS +LETTING +LETTUCE +LEUKEMIA +LEV +LEVEE +LEVEES +LEVEL +LEVELED +LEVELER +LEVELING +LEVELLED +LEVELLER +LEVELLEST +LEVELLING +LEVELLY +LEVELNESS +LEVELS +LEVER +LEVERAGE +LEVERS +LEVI +LEVIABLE +LEVIED +LEVIES +LEVIN +LEVINE +LEVIS +LEVITICUS +LEVITT +LEVITY +LEVY +LEVYING +LEW +LEWD +LEWDLY +LEWDNESS +LEWELLYN +LEXICAL +LEXICALLY +LEXICOGRAPHIC +LEXICOGRAPHICAL +LEXICOGRAPHICALLY +LEXICON +LEXICONS +LEXINGTON +LEYDEN +LIABILITIES +LIABILITY +LIABLE +LIAISON +LIAISONS +LIAR +LIARS +LIBEL +LIBELOUS +LIBERACE +LIBERAL +LIBERALIZE +LIBERALIZED +LIBERALIZES +LIBERALIZING +LIBERALLY +LIBERALS +LIBERATE +LIBERATED +LIBERATES +LIBERATING +LIBERATION +LIBERATOR +LIBERATORS +LIBERIA +LIBERTARIAN +LIBERTIES +LIBERTY +LIBIDO +LIBRARIAN +LIBRARIANS +LIBRARIES +LIBRARY +LIBRETTO +LIBREVILLE +LIBYA +LIBYAN +LICE +LICENSE +LICENSED +LICENSEE +LICENSES +LICENSING +LICENSOR +LICENTIOUS +LICHEN +LICHENS +LICHTER +LICK +LICKED +LICKING +LICKS +LICORICE +LID +LIDS +LIE +LIEBERMAN +LIECHTENSTEIN +LIED +LIEGE +LIEN +LIENS +LIES +LIEU +LIEUTENANT +LIEUTENANTS +LIFE +LIFEBLOOD +LIFEBOAT +LIFEGUARD +LIFELESS +LIFELESSNESS +LIFELIKE +LIFELONG +LIFER +LIFESPAN +LIFESTYLE +LIFESTYLES +LIFETIME +LIFETIMES +LIFT +LIFTED +LIFTER +LIFTERS +LIFTING +LIFTS +LIGAMENT +LIGATURE +LIGGET +LIGGETT +LIGHT +LIGHTED +LIGHTEN +LIGHTENS +LIGHTER +LIGHTERS +LIGHTEST +LIGHTFACE +LIGHTHEARTED +LIGHTHOUSE +LIGHTHOUSES +LIGHTING +LIGHTLY +LIGHTNESS +LIGHTNING +LIGHTNINGS +LIGHTS +LIGHTWEIGHT +LIKE +LIKED +LIKELIER +LIKELIEST +LIKELIHOOD +LIKELIHOODS +LIKELINESS +LIKELY +LIKEN +LIKENED +LIKENESS +LIKENESSES +LIKENING +LIKENS +LIKES +LIKEWISE +LIKING +LILA +LILAC +LILACS +LILIAN +LILIES +LILLIAN +LILLIPUT +LILLIPUTIAN +LILLIPUTIANIZE +LILLIPUTIANIZES +LILLY +LILY +LIMA +LIMAN +LIMB +LIMBER +LIMBO +LIMBS +LIME +LIMELIGHT +LIMERICK +LIMES +LIMESTONE +LIMIT +LIMITABILITY +LIMITABLY +LIMITATION +LIMITATIONS +LIMITED +LIMITER +LIMITERS +LIMITING +LIMITLESS +LIMITS +LIMOUSINE +LIMP +LIMPED +LIMPING +LIMPLY +LIMPNESS +LIMPS +LIN +LINCOLN +LIND +LINDA +LINDBERG +LINDBERGH +LINDEN +LINDHOLM +LINDQUIST +LINDSAY +LINDSEY +LINDSTROM +LINDY +LINE +LINEAR +LINEARITIES +LINEARITY +LINEARIZABLE +LINEARIZE +LINEARIZED +LINEARIZES +LINEARIZING +LINEARLY +LINED +LINEN +LINENS +LINER +LINERS +LINES +LINEUP +LINGER +LINGERED +LINGERIE +LINGERING +LINGERS +LINGO +LINGUA +LINGUIST +LINGUISTIC +LINGUISTICALLY +LINGUISTICS +LINGUISTS +LINING +LININGS +LINK +LINKAGE +LINKAGES +LINKED +LINKER +LINKERS +LINKING +LINKS +LINNAEUS +LINOLEUM +LINOTYPE +LINSEED +LINT +LINTON +LINUS +LINUX +LION +LIONEL +LIONESS +LIONESSES +LIONS +LIP +LIPPINCOTT +LIPS +LIPSCHITZ +LIPSCOMB +LIPSTICK +LIPTON +LIQUID +LIQUIDATE +LIQUIDATION +LIQUIDATIONS +LIQUIDITY +LIQUIDS +LIQUOR +LIQUORS +LISA +LISBON +LISE +LISP +LISPED +LISPING +LISPS +LISS +LISSAJOUS +LIST +LISTED +LISTEN +LISTENED +LISTENER +LISTENERS +LISTENING +LISTENS +LISTER +LISTERIZE +LISTERIZES +LISTERS +LISTING +LISTINGS +LISTLESS +LISTON +LISTS +LIT +LITANY +LITER +LITERACY +LITERAL +LITERALLY +LITERALNESS +LITERALS +LITERARY +LITERATE +LITERATURE +LITERATURES +LITERS +LITHE +LITHOGRAPH +LITHOGRAPHY +LITHUANIA +LITHUANIAN +LITIGANT +LITIGATE +LITIGATION +LITIGIOUS +LITMUS +LITTER +LITTERBUG +LITTERED +LITTERING +LITTERS +LITTLE +LITTLENESS +LITTLER +LITTLEST +LITTLETON +LITTON +LIVABLE +LIVABLY +LIVE +LIVED +LIVELIHOOD +LIVELY +LIVENESS +LIVER +LIVERIED +LIVERMORE +LIVERPOOL +LIVERPUDLIAN +LIVERS +LIVERY +LIVES +LIVESTOCK +LIVID +LIVING +LIVINGSTON +LIZ +LIZARD +LIZARDS +LIZZIE +LIZZY +LLOYD +LOAD +LOADED +LOADER +LOADERS +LOADING +LOADINGS +LOADS +LOAF +LOAFED +LOAFER +LOAN +LOANED +LOANING +LOANS +LOATH +LOATHE +LOATHED +LOATHING +LOATHLY +LOATHSOME +LOAVES +LOBBIED +LOBBIES +LOBBY +LOBBYING +LOBE +LOBES +LOBSTER +LOBSTERS +LOCAL +LOCALITIES +LOCALITY +LOCALIZATION +LOCALIZE +LOCALIZED +LOCALIZES +LOCALIZING +LOCALLY +LOCALS +LOCATE +LOCATED +LOCATES +LOCATING +LOCATION +LOCATIONS +LOCATIVE +LOCATIVES +LOCATOR +LOCATORS +LOCI +LOCK +LOCKE +LOCKED +LOCKER +LOCKERS +LOCKHART +LOCKHEED +LOCKIAN +LOCKING +LOCKINGS +LOCKOUT +LOCKOUTS +LOCKS +LOCKSMITH +LOCKSTEP +LOCKUP +LOCKUPS +LOCKWOOD +LOCOMOTION +LOCOMOTIVE +LOCOMOTIVES +LOCUS +LOCUST +LOCUSTS +LODGE +LODGED +LODGER +LODGES +LODGING +LODGINGS +LODOWICK +LOEB +LOFT +LOFTINESS +LOFTS +LOFTY +LOGAN +LOGARITHM +LOGARITHMIC +LOGARITHMICALLY +LOGARITHMS +LOGGED +LOGGER +LOGGERS +LOGGING +LOGIC +LOGICAL +LOGICALLY +LOGICIAN +LOGICIANS +LOGICS +LOGIN +LOGINS +LOGISTIC +LOGISTICS +LOGJAM +LOGO +LOGS +LOIN +LOINCLOTH +LOINS +LOIRE +LOIS +LOITER +LOITERED +LOITERER +LOITERING +LOITERS +LOKI +LOLA +LOMB +LOMBARD +LOMBARDY +LOME +LONDON +LONDONDERRY +LONDONER +LONDONIZATION +LONDONIZATIONS +LONDONIZE +LONDONIZES +LONE +LONELIER +LONELIEST +LONELINESS +LONELY +LONER +LONERS +LONESOME +LONG +LONGED +LONGER +LONGEST +LONGEVITY +LONGFELLOW +LONGHAND +LONGING +LONGINGS +LONGITUDE +LONGITUDES +LONGS +LONGSTANDING +LONGSTREET +LOOK +LOOKAHEAD +LOOKED +LOOKER +LOOKERS +LOOKING +LOOKOUT +LOOKS +LOOKUP +LOOKUPS +LOOM +LOOMED +LOOMING +LOOMIS +LOOMS +LOON +LOOP +LOOPED +LOOPHOLE +LOOPHOLES +LOOPING +LOOPS +LOOSE +LOOSED +LOOSELEAF +LOOSELY +LOOSEN +LOOSENED +LOOSENESS +LOOSENING +LOOSENS +LOOSER +LOOSES +LOOSEST +LOOSING +LOOT +LOOTED +LOOTER +LOOTING +LOOTS +LOPEZ +LOPSIDED +LORD +LORDLY +LORDS +LORDSHIP +LORE +LORELEI +LOREN +LORENTZIAN +LORENZ +LORETTA +LORINDA +LORRAINE +LORRY +LOS +LOSE +LOSER +LOSERS +LOSES +LOSING +LOSS +LOSSES +LOSSIER +LOSSIEST +LOSSY +LOST +LOT +LOTHARIO +LOTION +LOTS +LOTTE +LOTTERY +LOTTIE +LOTUS +LOU +LOUD +LOUDER +LOUDEST +LOUDLY +LOUDNESS +LOUDSPEAKER +LOUDSPEAKERS +LOUIS +LOUISA +LOUISE +LOUISIANA +LOUISIANAN +LOUISVILLE +LOUNGE +LOUNGED +LOUNGES +LOUNGING +LOUNSBURY +LOURDES +LOUSE +LOUSY +LOUT +LOUVRE +LOVABLE +LOVABLY +LOVE +LOVED +LOVEJOY +LOVELACE +LOVELAND +LOVELIER +LOVELIES +LOVELIEST +LOVELINESS +LOVELORN +LOVELY +LOVER +LOVERS +LOVES +LOVING +LOVINGLY +LOW +LOWE +LOWELL +LOWER +LOWERED +LOWERING +LOWERS +LOWEST +LOWLAND +LOWLANDS +LOWLIEST +LOWLY +LOWNESS +LOWRY +LOWS +LOY +LOYAL +LOYALLY +LOYALTIES +LOYALTY +LOYOLA +LUBBOCK +LUBELL +LUBRICANT +LUBRICATE +LUBRICATION +LUCAS +LUCERNE +LUCIA +LUCIAN +LUCID +LUCIEN +LUCIFER +LUCILLE +LUCIUS +LUCK +LUCKED +LUCKIER +LUCKIEST +LUCKILY +LUCKLESS +LUCKS +LUCKY +LUCRATIVE +LUCRETIA +LUCRETIUS +LUCY +LUDICROUS +LUDICROUSLY +LUDICROUSNESS +LUDLOW +LUDMILLA +LUDWIG +LUFTHANSA +LUFTWAFFE +LUGGAGE +LUIS +LUKE +LUKEWARM +LULL +LULLABY +LULLED +LULLS +LUMBER +LUMBERED +LUMBERING +LUMINOUS +LUMINOUSLY +LUMMOX +LUMP +LUMPED +LUMPING +LUMPS +LUMPUR +LUMPY +LUNAR +LUNATIC +LUNCH +LUNCHED +LUNCHEON +LUNCHEONS +LUNCHES +LUNCHING +LUND +LUNDBERG +LUNDQUIST +LUNG +LUNGED +LUNGS +LURA +LURCH +LURCHED +LURCHES +LURCHING +LURE +LURED +LURES +LURING +LURK +LURKED +LURKING +LURKS +LUSAKA +LUSCIOUS +LUSCIOUSLY +LUSCIOUSNESS +LUSH +LUST +LUSTER +LUSTFUL +LUSTILY +LUSTINESS +LUSTROUS +LUSTS +LUSTY +LUTE +LUTES +LUTHER +LUTHERAN +LUTHERANIZE +LUTHERANIZER +LUTHERANIZERS +LUTHERANIZES +LUTZ +LUXEMBOURG +LUXEMBURG +LUXURIANT +LUXURIANTLY +LUXURIES +LUXURIOUS +LUXURIOUSLY +LUXURY +LUZON +LYDIA +LYING +LYKES +LYLE +LYMAN +LYMPH +LYNCH +LYNCHBURG +LYNCHED +LYNCHER +LYNCHES +LYNDON +LYNN +LYNX +LYNXES +LYON +LYONS +LYRA +LYRE +LYRIC +LYRICS +LYSENKO +MABEL +MAC +MACADAMIA +MACARTHUR +MACARTHUR +MACASSAR +MACAULAY +MACAULAYAN +MACAULAYISM +MACAULAYISMS +MACBETH +MACDONALD +MACDONALD +MACDOUGALL +MACDOUGALL +MACDRAW +MACE +MACED +MACEDON +MACEDONIA +MACEDONIAN +MACES +MACGREGOR +MACGREGOR +MACH +MACHIAVELLI +MACHIAVELLIAN +MACHINATION +MACHINE +MACHINED +MACHINELIKE +MACHINERY +MACHINES +MACHINING +MACHO +MACINTOSH +MACINTOSH +MACINTOSH +MACKENZIE +MACKENZIE +MACKEREL +MACKEY +MACKINAC +MACKINAW +MACMAHON +MACMILLAN +MACMILLAN +MACON +MACPAINT +MACRO +MACROECONOMICS +MACROMOLECULE +MACROMOLECULES +MACROPHAGE +MACROS +MACROSCOPIC +MAD +MADAGASCAR +MADAM +MADAME +MADAMES +MADDEN +MADDENING +MADDER +MADDEST +MADDOX +MADE +MADEIRA +MADELEINE +MADELINE +MADHOUSE +MADHYA +MADISON +MADLY +MADMAN +MADMEN +MADNESS +MADONNA +MADONNAS +MADRAS +MADRID +MADSEN +MAE +MAELSTROM +MAESTRO +MAFIA +MAFIOSI +MAGAZINE +MAGAZINES +MAGDALENE +MAGELLAN +MAGELLANIC +MAGENTA +MAGGIE +MAGGOT +MAGGOTS +MAGIC +MAGICAL +MAGICALLY +MAGICIAN +MAGICIANS +MAGILL +MAGISTRATE +MAGISTRATES +MAGNA +MAGNESIUM +MAGNET +MAGNETIC +MAGNETICALLY +MAGNETISM +MAGNETISMS +MAGNETIZABLE +MAGNETIZED +MAGNETO +MAGNIFICATION +MAGNIFICENCE +MAGNIFICENT +MAGNIFICENTLY +MAGNIFIED +MAGNIFIER +MAGNIFIES +MAGNIFY +MAGNIFYING +MAGNITUDE +MAGNITUDES +MAGNOLIA +MAGNUM +MAGNUSON +MAGOG +MAGPIE +MAGRUDER +MAGUIRE +MAGUIRES +MAHARASHTRA +MAHAYANA +MAHAYANIST +MAHOGANY +MAHONEY +MAID +MAIDEN +MAIDENS +MAIDS +MAIER +MAIL +MAILABLE +MAILBOX +MAILBOXES +MAILED +MAILER +MAILING +MAILINGS +MAILMAN +MAILMEN +MAILS +MAIM +MAIMED +MAIMING +MAIMS +MAIN +MAINE +MAINFRAME +MAINFRAMES +MAINLAND +MAINLINE +MAINLY +MAINS +MAINSTAY +MAINSTREAM +MAINTAIN +MAINTAINABILITY +MAINTAINABLE +MAINTAINED +MAINTAINER +MAINTAINERS +MAINTAINING +MAINTAINS +MAINTENANCE +MAINTENANCES +MAIZE +MAJESTIC +MAJESTIES +MAJESTY +MAJOR +MAJORCA +MAJORED +MAJORING +MAJORITIES +MAJORITY +MAJORS +MAKABLE +MAKE +MAKER +MAKERS +MAKES +MAKESHIFT +MAKEUP +MAKEUPS +MAKING +MAKINGS +MALABAR +MALADIES +MALADY +MALAGASY +MALAMUD +MALARIA +MALAWI +MALAY +MALAYIZE +MALAYIZES +MALAYSIA +MALAYSIAN +MALCOLM +MALCONTENT +MALDEN +MALDIVE +MALE +MALEFACTOR +MALEFACTORS +MALENESS +MALES +MALEVOLENT +MALFORMED +MALFUNCTION +MALFUNCTIONED +MALFUNCTIONING +MALFUNCTIONS +MALI +MALIBU +MALICE +MALICIOUS +MALICIOUSLY +MALICIOUSNESS +MALIGN +MALIGNANT +MALIGNANTLY +MALL +MALLARD +MALLET +MALLETS +MALLORY +MALNUTRITION +MALONE +MALONEY +MALPRACTICE +MALRAUX +MALT +MALTA +MALTED +MALTESE +MALTHUS +MALTHUSIAN +MALTON +MALTS +MAMA +MAMMA +MAMMAL +MAMMALIAN +MAMMALS +MAMMAS +MAMMOTH +MAN +MANAGE +MANAGEABLE +MANAGEABLENESS +MANAGED +MANAGEMENT +MANAGEMENTS +MANAGER +MANAGERIAL +MANAGERS +MANAGES +MANAGING +MANAGUA +MANAMA +MANCHESTER +MANCHURIA +MANDARIN +MANDATE +MANDATED +MANDATES +MANDATING +MANDATORY +MANDELBROT +MANDIBLE +MANE +MANES +MANEUVER +MANEUVERED +MANEUVERING +MANEUVERS +MANFRED +MANGER +MANGERS +MANGLE +MANGLED +MANGLER +MANGLES +MANGLING +MANHATTAN +MANHATTANIZE +MANHATTANIZES +MANHOLE +MANHOOD +MANIA +MANIAC +MANIACAL +MANIACS +MANIC +MANICURE +MANICURED +MANICURES +MANICURING +MANIFEST +MANIFESTATION +MANIFESTATIONS +MANIFESTED +MANIFESTING +MANIFESTLY +MANIFESTS +MANIFOLD +MANIFOLDS +MANILA +MANIPULABILITY +MANIPULABLE +MANIPULATABLE +MANIPULATE +MANIPULATED +MANIPULATES +MANIPULATING +MANIPULATION +MANIPULATIONS +MANIPULATIVE +MANIPULATOR +MANIPULATORS +MANIPULATORY +MANITOBA +MANITOWOC +MANKIND +MANKOWSKI +MANLEY +MANLY +MANN +MANNED +MANNER +MANNERED +MANNERLY +MANNERS +MANNING +MANOMETER +MANOMETERS +MANOR +MANORS +MANPOWER +MANS +MANSFIELD +MANSION +MANSIONS +MANSLAUGHTER +MANTEL +MANTELS +MANTIS +MANTISSA +MANTISSAS +MANTLE +MANTLEPIECE +MANTLES +MANUAL +MANUALLY +MANUALS +MANUEL +MANUFACTURE +MANUFACTURED +MANUFACTURER +MANUFACTURERS +MANUFACTURES +MANUFACTURING +MANURE +MANUSCRIPT +MANUSCRIPTS +MANVILLE +MANY +MAO +MAORI +MAP +MAPLE +MAPLECREST +MAPLES +MAPPABLE +MAPPED +MAPPING +MAPPINGS +MAPS +MARATHON +MARBLE +MARBLES +MARBLING +MARC +MARCEAU +MARCEL +MARCELLO +MARCH +MARCHED +MARCHER +MARCHES +MARCHING +MARCIA +MARCO +MARCOTTE +MARCUS +MARCY +MARDI +MARDIS +MARE +MARES +MARGARET +MARGARINE +MARGERY +MARGIN +MARGINAL +MARGINALLY +MARGINS +MARGO +MARGUERITE +MARIANNE +MARIE +MARIETTA +MARIGOLD +MARIJUANA +MARILYN +MARIN +MARINA +MARINADE +MARINATE +MARINE +MARINER +MARINES +MARINO +MARIO +MARION +MARIONETTE +MARITAL +MARITIME +MARJORIE +MARJORY +MARK +MARKABLE +MARKED +MARKEDLY +MARKER +MARKERS +MARKET +MARKETABILITY +MARKETABLE +MARKETED +MARKETING +MARKETINGS +MARKETPLACE +MARKETPLACES +MARKETS +MARKHAM +MARKING +MARKINGS +MARKISM +MARKOV +MARKOVIAN +MARKOVITZ +MARKS +MARLBORO +MARLBOROUGH +MARLENE +MARLOWE +MARMALADE +MARMOT +MAROON +MARQUETTE +MARQUIS +MARRIAGE +MARRIAGEABLE +MARRIAGES +MARRIED +MARRIES +MARRIOTT +MARROW +MARRY +MARRYING +MARS +MARSEILLES +MARSH +MARSHA +MARSHAL +MARSHALED +MARSHALING +MARSHALL +MARSHALLED +MARSHALLING +MARSHALS +MARSHES +MARSHMALLOW +MART +MARTEN +MARTHA +MARTIAL +MARTIAN +MARTIANS +MARTINEZ +MARTINGALE +MARTINI +MARTINIQUE +MARTINSON +MARTS +MARTY +MARTYR +MARTYRDOM +MARTYRS +MARVEL +MARVELED +MARVELLED +MARVELLING +MARVELOUS +MARVELOUSLY +MARVELOUSNESS +MARVELS +MARVIN +MARX +MARXIAN +MARXISM +MARXISMS +MARXIST +MARY +MARYLAND +MARYLANDERS +MASCARA +MASCULINE +MASCULINELY +MASCULINITY +MASERU +MASH +MASHED +MASHES +MASHING +MASK +MASKABLE +MASKED +MASKER +MASKING +MASKINGS +MASKS +MASOCHIST +MASOCHISTS +MASON +MASONIC +MASONITE +MASONRY +MASONS +MASQUERADE +MASQUERADER +MASQUERADES +MASQUERADING +MASS +MASSACHUSETTS +MASSACRE +MASSACRED +MASSACRES +MASSAGE +MASSAGES +MASSAGING +MASSED +MASSES +MASSEY +MASSING +MASSIVE +MAST +MASTED +MASTER +MASTERED +MASTERFUL +MASTERFULLY +MASTERING +MASTERINGS +MASTERLY +MASTERMIND +MASTERPIECE +MASTERPIECES +MASTERS +MASTERY +MASTODON +MASTS +MASTURBATE +MASTURBATED +MASTURBATES +MASTURBATING +MASTURBATION +MAT +MATCH +MATCHABLE +MATCHED +MATCHER +MATCHERS +MATCHES +MATCHING +MATCHINGS +MATCHLESS +MATE +MATED +MATEO +MATER +MATERIAL +MATERIALIST +MATERIALIZE +MATERIALIZED +MATERIALIZES +MATERIALIZING +MATERIALLY +MATERIALS +MATERNAL +MATERNALLY +MATERNITY +MATES +MATH +MATHEMATICA +MATHEMATICAL +MATHEMATICALLY +MATHEMATICIAN +MATHEMATICIANS +MATHEMATICS +MATHEMATIK +MATHEWSON +MATHIAS +MATHIEU +MATILDA +MATING +MATINGS +MATISSE +MATISSES +MATRIARCH +MATRIARCHAL +MATRICES +MATRICULATE +MATRICULATION +MATRIMONIAL +MATRIMONY +MATRIX +MATROID +MATRON +MATRONLY +MATS +MATSON +MATSUMOTO +MATT +MATTED +MATTER +MATTERED +MATTERS +MATTHEW +MATTHEWS +MATTIE +MATTRESS +MATTRESSES +MATTSON +MATURATION +MATURE +MATURED +MATURELY +MATURES +MATURING +MATURITIES +MATURITY +MAUDE +MAUL +MAUREEN +MAURICE +MAURICIO +MAURINE +MAURITANIA +MAURITIUS +MAUSOLEUM +MAVERICK +MAVIS +MAWR +MAX +MAXIM +MAXIMA +MAXIMAL +MAXIMALLY +MAXIMILIAN +MAXIMIZE +MAXIMIZED +MAXIMIZER +MAXIMIZERS +MAXIMIZES +MAXIMIZING +MAXIMS +MAXIMUM +MAXIMUMS +MAXINE +MAXTOR +MAXWELL +MAXWELLIAN +MAY +MAYA +MAYANS +MAYBE +MAYER +MAYFAIR +MAYFLOWER +MAYHAP +MAYHEM +MAYNARD +MAYO +MAYONNAISE +MAYOR +MAYORAL +MAYORS +MAZDA +MAZE +MAZES +MBABANE +MCADAM +MCADAMS +MCALLISTER +MCBRIDE +MCCABE +MCCALL +MCCALLUM +MCCANN +MCCARTHY +MCCARTY +MCCAULEY +MCCLAIN +MCCLELLAN +MCCLURE +MCCLUSKEY +MCCONNEL +MCCONNELL +MCCORMICK +MCCOY +MCCRACKEN +MCCULLOUGH +MCDANIEL +MCDERMOTT +MCDONALD +MCDONNELL +MCDOUGALL +MCDOWELL +MCELHANEY +MCELROY +MCFADDEN +MCFARLAND +MCGEE +MCGILL +MCGINNIS +MCGOVERN +MCGOWAN +MCGRATH +MCGRAW +MCGREGOR +MCGUIRE +MCHUGH +MCINTOSH +MCINTYRE +MCKAY +MCKEE +MCKENNA +MCKENZIE +MCKEON +MCKESSON +MCKINLEY +MCKINNEY +MCKNIGHT +MCLANAHAN +MCLAUGHLIN +MCLEAN +MCLEOD +MCMAHON +MCMARTIN +MCMILLAN +MCMULLEN +MCNALLY +MCNAUGHTON +MCNEIL +MCNULTY +MCPHERSON +MEAD +MEADOW +MEADOWS +MEAGER +MEAGERLY +MEAGERNESS +MEAL +MEALS +MEALTIME +MEALY +MEAN +MEANDER +MEANDERED +MEANDERING +MEANDERS +MEANER +MEANEST +MEANING +MEANINGFUL +MEANINGFULLY +MEANINGFULNESS +MEANINGLESS +MEANINGLESSLY +MEANINGLESSNESS +MEANINGS +MEANLY +MEANNESS +MEANS +MEANT +MEANTIME +MEANWHILE +MEASLE +MEASLES +MEASURABLE +MEASURABLY +MEASURE +MEASURED +MEASUREMENT +MEASUREMENTS +MEASURER +MEASURES +MEASURING +MEAT +MEATS +MEATY +MECCA +MECHANIC +MECHANICAL +MECHANICALLY +MECHANICS +MECHANISM +MECHANISMS +MECHANIZATION +MECHANIZATIONS +MECHANIZE +MECHANIZED +MECHANIZES +MECHANIZING +MEDAL +MEDALLION +MEDALLIONS +MEDALS +MEDDLE +MEDDLED +MEDDLER +MEDDLES +MEDDLING +MEDEA +MEDFIELD +MEDFORD +MEDIA +MEDIAN +MEDIANS +MEDIATE +MEDIATED +MEDIATES +MEDIATING +MEDIATION +MEDIATIONS +MEDIATOR +MEDIC +MEDICAID +MEDICAL +MEDICALLY +MEDICARE +MEDICI +MEDICINAL +MEDICINALLY +MEDICINE +MEDICINES +MEDICIS +MEDICS +MEDIEVAL +MEDIOCRE +MEDIOCRITY +MEDITATE +MEDITATED +MEDITATES +MEDITATING +MEDITATION +MEDITATIONS +MEDITATIVE +MEDITERRANEAN +MEDITERRANEANIZATION +MEDITERRANEANIZATIONS +MEDITERRANEANIZE +MEDITERRANEANIZES +MEDIUM +MEDIUMS +MEDLEY +MEDUSA +MEDUSAN +MEEK +MEEKER +MEEKEST +MEEKLY +MEEKNESS +MEET +MEETING +MEETINGHOUSE +MEETINGS +MEETS +MEG +MEGABAUD +MEGABIT +MEGABITS +MEGABYTE +MEGABYTES +MEGAHERTZ +MEGALOMANIA +MEGATON +MEGAVOLT +MEGAWATT +MEGAWORD +MEGAWORDS +MEGOHM +MEIER +MEIJI +MEISTER +MEISTERSINGER +MEKONG +MEL +MELAMPUS +MELANCHOLY +MELANESIA +MELANESIAN +MELANIE +MELBOURNE +MELCHER +MELINDA +MELISANDE +MELISSA +MELLON +MELLOW +MELLOWED +MELLOWING +MELLOWNESS +MELLOWS +MELODIES +MELODIOUS +MELODIOUSLY +MELODIOUSNESS +MELODRAMA +MELODRAMAS +MELODRAMATIC +MELODY +MELON +MELONS +MELPOMENE +MELT +MELTED +MELTING +MELTINGLY +MELTS +MELVILLE +MELVIN +MEMBER +MEMBERS +MEMBERSHIP +MEMBERSHIPS +MEMBRANE +MEMENTO +MEMO +MEMOIR +MEMOIRS +MEMORABILIA +MEMORABLE +MEMORABLENESS +MEMORANDA +MEMORANDUM +MEMORIAL +MEMORIALLY +MEMORIALS +MEMORIES +MEMORIZATION +MEMORIZE +MEMORIZED +MEMORIZER +MEMORIZES +MEMORIZING +MEMORY +MEMORYLESS +MEMOS +MEMPHIS +MEN +MENACE +MENACED +MENACING +MENAGERIE +MENARCHE +MENCKEN +MEND +MENDACIOUS +MENDACITY +MENDED +MENDEL +MENDELIAN +MENDELIZE +MENDELIZES +MENDELSSOHN +MENDER +MENDING +MENDOZA +MENDS +MENELAUS +MENIAL +MENIALS +MENLO +MENNONITE +MENNONITES +MENOMINEE +MENORCA +MENS +MENSCH +MENSTRUATE +MENSURABLE +MENSURATION +MENTAL +MENTALITIES +MENTALITY +MENTALLY +MENTION +MENTIONABLE +MENTIONED +MENTIONER +MENTIONERS +MENTIONING +MENTIONS +MENTOR +MENTORS +MENU +MENUS +MENZIES +MEPHISTOPHELES +MERCANTILE +MERCATOR +MERCEDES +MERCENARIES +MERCENARINESS +MERCENARY +MERCHANDISE +MERCHANDISER +MERCHANDISING +MERCHANT +MERCHANTS +MERCIFUL +MERCIFULLY +MERCILESS +MERCILESSLY +MERCK +MERCURIAL +MERCURY +MERCY +MERE +MEREDITH +MERELY +MEREST +MERGE +MERGED +MERGER +MERGERS +MERGES +MERGING +MERIDIAN +MERINGUE +MERIT +MERITED +MERITING +MERITORIOUS +MERITORIOUSLY +MERITORIOUSNESS +MERITS +MERIWETHER +MERLE +MERMAID +MERRIAM +MERRICK +MERRIEST +MERRILL +MERRILY +MERRIMAC +MERRIMACK +MERRIMENT +MERRITT +MERRY +MERRYMAKE +MERVIN +MESCALINE +MESH +MESON +MESOPOTAMIA +MESOZOIC +MESQUITE +MESS +MESSAGE +MESSAGES +MESSED +MESSENGER +MESSENGERS +MESSES +MESSIAH +MESSIAHS +MESSIER +MESSIEST +MESSILY +MESSINESS +MESSING +MESSY +MET +META +METABOLIC +METABOLISM +METACIRCULAR +METACIRCULARITY +METAL +METALANGUAGE +METALLIC +METALLIZATION +METALLIZATIONS +METALLURGY +METALS +METAMATHEMATICAL +METAMORPHOSIS +METAPHOR +METAPHORICAL +METAPHORICALLY +METAPHORS +METAPHYSICAL +METAPHYSICALLY +METAPHYSICS +METAVARIABLE +METCALF +METE +METED +METEOR +METEORIC +METEORITE +METEORITIC +METEOROLOGY +METEORS +METER +METERING +METERS +METES +METHANE +METHOD +METHODICAL +METHODICALLY +METHODICALNESS +METHODISM +METHODIST +METHODISTS +METHODOLOGICAL +METHODOLOGICALLY +METHODOLOGIES +METHODOLOGISTS +METHODOLOGY +METHODS +METHUEN +METHUSELAH +METHUSELAHS +METICULOUSLY +METING +METRECAL +METRIC +METRICAL +METRICS +METRO +METRONOME +METROPOLIS +METROPOLITAN +METS +METTLE +METTLESOME +METZLER +MEW +MEWED +MEWS +MEXICAN +MEXICANIZE +MEXICANIZES +MEXICANS +MEXICO +MEYER +MEYERS +MIAMI +MIASMA +MICA +MICE +MICHAEL +MICHAELS +MICHEL +MICHELANGELO +MICHELE +MICHELIN +MICHELSON +MICHIGAN +MICK +MICKEY +MICKIE +MICKY +MICRO +MICROARCHITECTS +MICROARCHITECTURE +MICROARCHITECTURES +MICROBIAL +MICROBICIDAL +MICROBICIDE +MICROCODE +MICROCODED +MICROCODES +MICROCODING +MICROCOMPUTER +MICROCOMPUTERS +MICROCOSM +MICROCYCLE +MICROCYCLES +MICROECONOMICS +MICROELECTRONICS +MICROFILM +MICROFILMS +MICROGRAMMING +MICROINSTRUCTION +MICROINSTRUCTIONS +MICROJUMP +MICROJUMPS +MICROLEVEL +MICRON +MICRONESIA +MICRONESIAN +MICROOPERATIONS +MICROPHONE +MICROPHONES +MICROPHONING +MICROPORT +MICROPROCEDURE +MICROPROCEDURES +MICROPROCESSING +MICROPROCESSOR +MICROPROCESSORS +MICROPROGRAM +MICROPROGRAMMABLE +MICROPROGRAMMED +MICROPROGRAMMER +MICROPROGRAMMING +MICROPROGRAMS +MICROS +MICROSCOPE +MICROSCOPES +MICROSCOPIC +MICROSCOPY +MICROSECOND +MICROSECONDS +MICROSOFT +MICROSTORE +MICROSYSTEMS +MICROVAX +MICROVAXES +MICROWAVE +MICROWAVES +MICROWORD +MICROWORDS +MID +MIDAS +MIDDAY +MIDDLE +MIDDLEBURY +MIDDLEMAN +MIDDLEMEN +MIDDLES +MIDDLESEX +MIDDLETON +MIDDLETOWN +MIDDLING +MIDGET +MIDLANDIZE +MIDLANDIZES +MIDNIGHT +MIDNIGHTS +MIDPOINT +MIDPOINTS +MIDRANGE +MIDSCALE +MIDSECTION +MIDSHIPMAN +MIDSHIPMEN +MIDST +MIDSTREAM +MIDSTS +MIDSUMMER +MIDWAY +MIDWEEK +MIDWEST +MIDWESTERN +MIDWESTERNER +MIDWESTERNERS +MIDWIFE +MIDWINTER +MIDWIVES +MIEN +MIGHT +MIGHTIER +MIGHTIEST +MIGHTILY +MIGHTINESS +MIGHTY +MIGRANT +MIGRATE +MIGRATED +MIGRATES +MIGRATING +MIGRATION +MIGRATIONS +MIGRATORY +MIGUEL +MIKE +MIKHAIL +MIKOYAN +MILAN +MILD +MILDER +MILDEST +MILDEW +MILDLY +MILDNESS +MILDRED +MILE +MILEAGE +MILES +MILESTONE +MILESTONES +MILITANT +MILITANTLY +MILITARILY +MILITARISM +MILITARY +MILITIA +MILK +MILKED +MILKER +MILKERS +MILKINESS +MILKING +MILKMAID +MILKMAIDS +MILKS +MILKY +MILL +MILLARD +MILLED +MILLENNIUM +MILLER +MILLET +MILLIAMMETER +MILLIAMPERE +MILLIE +MILLIJOULE +MILLIKAN +MILLIMETER +MILLIMETERS +MILLINERY +MILLING +MILLINGTON +MILLION +MILLIONAIRE +MILLIONAIRES +MILLIONS +MILLIONTH +MILLIPEDE +MILLIPEDES +MILLISECOND +MILLISECONDS +MILLIVOLT +MILLIVOLTMETER +MILLIWATT +MILLS +MILLSTONE +MILLSTONES +MILNE +MILQUETOAST +MILQUETOASTS +MILTON +MILTONIAN +MILTONIC +MILTONISM +MILTONIST +MILTONIZE +MILTONIZED +MILTONIZES +MILTONIZING +MILWAUKEE +MIMEOGRAPH +MIMI +MIMIC +MIMICKED +MIMICKING +MIMICS +MINARET +MINCE +MINCED +MINCEMEAT +MINCES +MINCING +MIND +MINDANAO +MINDED +MINDFUL +MINDFULLY +MINDFULNESS +MINDING +MINDLESS +MINDLESSLY +MINDS +MINE +MINED +MINEFIELD +MINER +MINERAL +MINERALS +MINERS +MINERVA +MINES +MINESWEEPER +MINGLE +MINGLED +MINGLES +MINGLING +MINI +MINIATURE +MINIATURES +MINIATURIZATION +MINIATURIZE +MINIATURIZED +MINIATURIZES +MINIATURIZING +MINICOMPUTER +MINICOMPUTERS +MINIMA +MINIMAL +MINIMALLY +MINIMAX +MINIMIZATION +MINIMIZATIONS +MINIMIZE +MINIMIZED +MINIMIZER +MINIMIZERS +MINIMIZES +MINIMIZING +MINIMUM +MINING +MINION +MINIS +MINISTER +MINISTERED +MINISTERING +MINISTERS +MINISTRIES +MINISTRY +MINK +MINKS +MINNEAPOLIS +MINNESOTA +MINNIE +MINNOW +MINNOWS +MINOAN +MINOR +MINORING +MINORITIES +MINORITY +MINORS +MINOS +MINOTAUR +MINSK +MINSKY +MINSTREL +MINSTRELS +MINT +MINTED +MINTER +MINTING +MINTS +MINUEND +MINUET +MINUS +MINUSCULE +MINUTE +MINUTELY +MINUTEMAN +MINUTEMEN +MINUTENESS +MINUTER +MINUTES +MIOCENE +MIPS +MIRA +MIRACLE +MIRACLES +MIRACULOUS +MIRACULOUSLY +MIRAGE +MIRANDA +MIRE +MIRED +MIRES +MIRFAK +MIRIAM +MIRROR +MIRRORED +MIRRORING +MIRRORS +MIRTH +MISANTHROPE +MISBEHAVING +MISCALCULATION +MISCALCULATIONS +MISCARRIAGE +MISCARRY +MISCEGENATION +MISCELLANEOUS +MISCELLANEOUSLY +MISCELLANEOUSNESS +MISCHIEF +MISCHIEVOUS +MISCHIEVOUSLY +MISCHIEVOUSNESS +MISCONCEPTION +MISCONCEPTIONS +MISCONDUCT +MISCONSTRUE +MISCONSTRUED +MISCONSTRUES +MISDEMEANORS +MISER +MISERABLE +MISERABLENESS +MISERABLY +MISERIES +MISERLY +MISERS +MISERY +MISFIT +MISFITS +MISFORTUNE +MISFORTUNES +MISGIVING +MISGIVINGS +MISGUIDED +MISHAP +MISHAPS +MISINFORMED +MISJUDGED +MISJUDGMENT +MISLEAD +MISLEADING +MISLEADS +MISLED +MISMANAGEMENT +MISMATCH +MISMATCHED +MISMATCHES +MISMATCHING +MISNOMER +MISPLACE +MISPLACED +MISPLACES +MISPLACING +MISPRONUNCIATION +MISREPRESENTATION +MISREPRESENTATIONS +MISS +MISSED +MISSES +MISSHAPEN +MISSILE +MISSILES +MISSING +MISSION +MISSIONARIES +MISSIONARY +MISSIONER +MISSIONS +MISSISSIPPI +MISSISSIPPIAN +MISSISSIPPIANS +MISSIVE +MISSOULA +MISSOURI +MISSPELL +MISSPELLED +MISSPELLING +MISSPELLINGS +MISSPELLS +MISSY +MIST +MISTAKABLE +MISTAKE +MISTAKEN +MISTAKENLY +MISTAKES +MISTAKING +MISTED +MISTER +MISTERS +MISTINESS +MISTING +MISTLETOE +MISTRESS +MISTRUST +MISTRUSTED +MISTS +MISTY +MISTYPE +MISTYPED +MISTYPES +MISTYPING +MISUNDERSTAND +MISUNDERSTANDER +MISUNDERSTANDERS +MISUNDERSTANDING +MISUNDERSTANDINGS +MISUNDERSTOOD +MISUSE +MISUSED +MISUSES +MISUSING +MITCH +MITCHELL +MITER +MITIGATE +MITIGATED +MITIGATES +MITIGATING +MITIGATION +MITIGATIVE +MITRE +MITRES +MITTEN +MITTENS +MIX +MIXED +MIXER +MIXERS +MIXES +MIXING +MIXTURE +MIXTURES +MIXUP +MIZAR +MNEMONIC +MNEMONICALLY +MNEMONICS +MOAN +MOANED +MOANS +MOAT +MOATS +MOB +MOBIL +MOBILE +MOBILITY +MOBS +MOBSTER +MOCCASIN +MOCCASINS +MOCK +MOCKED +MOCKER +MOCKERY +MOCKING +MOCKINGBIRD +MOCKS +MOCKUP +MODAL +MODALITIES +MODALITY +MODALLY +MODE +MODEL +MODELED +MODELING +MODELINGS +MODELS +MODEM +MODEMS +MODERATE +MODERATED +MODERATELY +MODERATENESS +MODERATES +MODERATING +MODERATION +MODERN +MODERNITY +MODERNIZE +MODERNIZED +MODERNIZER +MODERNIZING +MODERNLY +MODERNNESS +MODERNS +MODES +MODEST +MODESTLY +MODESTO +MODESTY +MODICUM +MODIFIABILITY +MODIFIABLE +MODIFICATION +MODIFICATIONS +MODIFIED +MODIFIER +MODIFIERS +MODIFIES +MODIFY +MODIFYING +MODULA +MODULAR +MODULARITY +MODULARIZATION +MODULARIZE +MODULARIZED +MODULARIZES +MODULARIZING +MODULARLY +MODULATE +MODULATED +MODULATES +MODULATING +MODULATION +MODULATIONS +MODULATOR +MODULATORS +MODULE +MODULES +MODULI +MODULO +MODULUS +MODUS +MOE +MOEN +MOGADISCIO +MOGADISHU +MOGHUL +MOHAMMED +MOHAMMEDAN +MOHAMMEDANISM +MOHAMMEDANIZATION +MOHAMMEDANIZATIONS +MOHAMMEDANIZE +MOHAMMEDANIZES +MOHAWK +MOHR +MOINES +MOISEYEV +MOIST +MOISTEN +MOISTLY +MOISTNESS +MOISTURE +MOLAR +MOLASSES +MOLD +MOLDAVIA +MOLDED +MOLDER +MOLDING +MOLDS +MOLE +MOLECULAR +MOLECULE +MOLECULES +MOLEHILL +MOLES +MOLEST +MOLESTED +MOLESTING +MOLESTS +MOLIERE +MOLINE +MOLL +MOLLIE +MOLLIFY +MOLLUSK +MOLLY +MOLLYCODDLE +MOLOCH +MOLOCHIZE +MOLOCHIZES +MOLOTOV +MOLTEN +MOLUCCAS +MOMENT +MOMENTARILY +MOMENTARINESS +MOMENTARY +MOMENTOUS +MOMENTOUSLY +MOMENTOUSNESS +MOMENTS +MOMENTUM +MOMMY +MONA +MONACO +MONADIC +MONARCH +MONARCHIES +MONARCHS +MONARCHY +MONASH +MONASTERIES +MONASTERY +MONASTIC +MONDAY +MONDAYS +MONET +MONETARISM +MONETARY +MONEY +MONEYED +MONEYS +MONFORT +MONGOLIA +MONGOLIAN +MONGOLIANISM +MONGOOSE +MONICA +MONITOR +MONITORED +MONITORING +MONITORS +MONK +MONKEY +MONKEYED +MONKEYING +MONKEYS +MONKISH +MONKS +MONMOUTH +MONOALPHABETIC +MONOCEROS +MONOCHROMATIC +MONOCHROME +MONOCOTYLEDON +MONOCULAR +MONOGAMOUS +MONOGAMY +MONOGRAM +MONOGRAMS +MONOGRAPH +MONOGRAPHES +MONOGRAPHS +MONOLITH +MONOLITHIC +MONOLOGUE +MONONGAHELA +MONOPOLIES +MONOPOLIZE +MONOPOLIZED +MONOPOLIZING +MONOPOLY +MONOPROGRAMMED +MONOPROGRAMMING +MONOSTABLE +MONOTHEISM +MONOTONE +MONOTONIC +MONOTONICALLY +MONOTONICITY +MONOTONOUS +MONOTONOUSLY +MONOTONOUSNESS +MONOTONY +MONROE +MONROVIA +MONSANTO +MONSOON +MONSTER +MONSTERS +MONSTROSITY +MONSTROUS +MONSTROUSLY +MONT +MONTAGUE +MONTAIGNE +MONTANA +MONTANAN +MONTCLAIR +MONTENEGRIN +MONTENEGRO +MONTEREY +MONTEVERDI +MONTEVIDEO +MONTGOMERY +MONTH +MONTHLY +MONTHS +MONTICELLO +MONTMARTRE +MONTPELIER +MONTRACHET +MONTREAL +MONTY +MONUMENT +MONUMENTAL +MONUMENTALLY +MONUMENTS +MOO +MOOD +MOODINESS +MOODS +MOODY +MOON +MOONED +MOONEY +MOONING +MOONLIGHT +MOONLIGHTER +MOONLIGHTING +MOONLIKE +MOONLIT +MOONS +MOONSHINE +MOOR +MOORE +MOORED +MOORING +MOORINGS +MOORISH +MOORS +MOOSE +MOOT +MOP +MOPED +MOPS +MORAINE +MORAL +MORALE +MORALITIES +MORALITY +MORALLY +MORALS +MORAN +MORASS +MORATORIUM +MORAVIA +MORAVIAN +MORAVIANIZED +MORAVIANIZEDS +MORBID +MORBIDLY +MORBIDNESS +MORE +MOREHOUSE +MORELAND +MOREOVER +MORES +MORESBY +MORGAN +MORIARTY +MORIBUND +MORLEY +MORMON +MORN +MORNING +MORNINGS +MOROCCAN +MOROCCO +MORON +MOROSE +MORPHINE +MORPHISM +MORPHISMS +MORPHOLOGICAL +MORPHOLOGY +MORRILL +MORRIS +MORRISON +MORRISSEY +MORRISTOWN +MORROW +MORSE +MORSEL +MORSELS +MORTAL +MORTALITY +MORTALLY +MORTALS +MORTAR +MORTARED +MORTARING +MORTARS +MORTEM +MORTGAGE +MORTGAGES +MORTICIAN +MORTIFICATION +MORTIFIED +MORTIFIES +MORTIFY +MORTIFYING +MORTIMER +MORTON +MOSAIC +MOSAICS +MOSCONE +MOSCOW +MOSER +MOSES +MOSLEM +MOSLEMIZE +MOSLEMIZES +MOSLEMS +MOSQUE +MOSQUITO +MOSQUITOES +MOSS +MOSSBERG +MOSSES +MOSSY +MOST +MOSTLY +MOTEL +MOTELS +MOTH +MOTHBALL +MOTHBALLS +MOTHER +MOTHERED +MOTHERER +MOTHERERS +MOTHERHOOD +MOTHERING +MOTHERLAND +MOTHERLY +MOTHERS +MOTIF +MOTIFS +MOTION +MOTIONED +MOTIONING +MOTIONLESS +MOTIONLESSLY +MOTIONLESSNESS +MOTIONS +MOTIVATE +MOTIVATED +MOTIVATES +MOTIVATING +MOTIVATION +MOTIVATIONS +MOTIVE +MOTIVES +MOTLEY +MOTOR +MOTORCAR +MOTORCARS +MOTORCYCLE +MOTORCYCLES +MOTORING +MOTORIST +MOTORISTS +MOTORIZE +MOTORIZED +MOTORIZES +MOTORIZING +MOTOROLA +MOTORS +MOTTO +MOTTOES +MOULD +MOULDING +MOULTON +MOUND +MOUNDED +MOUNDS +MOUNT +MOUNTABLE +MOUNTAIN +MOUNTAINEER +MOUNTAINEERING +MOUNTAINEERS +MOUNTAINOUS +MOUNTAINOUSLY +MOUNTAINS +MOUNTED +MOUNTER +MOUNTING +MOUNTINGS +MOUNTS +MOURN +MOURNED +MOURNER +MOURNERS +MOURNFUL +MOURNFULLY +MOURNFULNESS +MOURNING +MOURNS +MOUSE +MOUSER +MOUSES +MOUSETRAP +MOUSY +MOUTH +MOUTHE +MOUTHED +MOUTHES +MOUTHFUL +MOUTHING +MOUTHPIECE +MOUTHS +MOUTON +MOVABLE +MOVE +MOVED +MOVEMENT +MOVEMENTS +MOVER +MOVERS +MOVES +MOVIE +MOVIES +MOVING +MOVINGS +MOW +MOWED +MOWER +MOWS +MOYER +MOZART +MUCH +MUCK +MUCKER +MUCKING +MUCUS +MUD +MUDD +MUDDIED +MUDDINESS +MUDDLE +MUDDLED +MUDDLEHEAD +MUDDLER +MUDDLERS +MUDDLES +MUDDLING +MUDDY +MUELLER +MUENSTER +MUFF +MUFFIN +MUFFINS +MUFFLE +MUFFLED +MUFFLER +MUFFLES +MUFFLING +MUFFS +MUG +MUGGING +MUGS +MUHAMMAD +MUIR +MUKDEN +MULATTO +MULBERRIES +MULBERRY +MULE +MULES +MULL +MULLAH +MULLEN +MULTI +MULTIBIT +MULTIBUS +MULTIBYTE +MULTICAST +MULTICASTING +MULTICASTS +MULTICELLULAR +MULTICOMPUTER +MULTICS +MULTICS +MULTIDIMENSIONAL +MULTILATERAL +MULTILAYER +MULTILAYERED +MULTILEVEL +MULTIMEDIA +MULTINATIONAL +MULTIPLE +MULTIPLES +MULTIPLEX +MULTIPLEXED +MULTIPLEXER +MULTIPLEXERS +MULTIPLEXES +MULTIPLEXING +MULTIPLEXOR +MULTIPLEXORS +MULTIPLICAND +MULTIPLICANDS +MULTIPLICATION +MULTIPLICATIONS +MULTIPLICATIVE +MULTIPLICATIVES +MULTIPLICITY +MULTIPLIED +MULTIPLIER +MULTIPLIERS +MULTIPLIES +MULTIPLY +MULTIPLYING +MULTIPROCESS +MULTIPROCESSING +MULTIPROCESSOR +MULTIPROCESSORS +MULTIPROGRAM +MULTIPROGRAMMED +MULTIPROGRAMMING +MULTISTAGE +MULTITUDE +MULTITUDES +MULTIUSER +MULTIVARIATE +MULTIWORD +MUMBLE +MUMBLED +MUMBLER +MUMBLERS +MUMBLES +MUMBLING +MUMBLINGS +MUMFORD +MUMMIES +MUMMY +MUNCH +MUNCHED +MUNCHING +MUNCIE +MUNDANE +MUNDANELY +MUNDT +MUNG +MUNICH +MUNICIPAL +MUNICIPALITIES +MUNICIPALITY +MUNICIPALLY +MUNITION +MUNITIONS +MUNROE +MUNSEY +MUNSON +MUONG +MURAL +MURDER +MURDERED +MURDERER +MURDERERS +MURDERING +MURDEROUS +MURDEROUSLY +MURDERS +MURIEL +MURKY +MURMUR +MURMURED +MURMURER +MURMURING +MURMURS +MURPHY +MURRAY +MURROW +MUSCAT +MUSCLE +MUSCLED +MUSCLES +MUSCLING +MUSCOVITE +MUSCOVY +MUSCULAR +MUSCULATURE +MUSE +MUSED +MUSES +MUSEUM +MUSEUMS +MUSH +MUSHROOM +MUSHROOMED +MUSHROOMING +MUSHROOMS +MUSHY +MUSIC +MUSICAL +MUSICALLY +MUSICALS +MUSICIAN +MUSICIANLY +MUSICIANS +MUSICOLOGY +MUSING +MUSINGS +MUSK +MUSKEGON +MUSKET +MUSKETS +MUSKOX +MUSKOXEN +MUSKRAT +MUSKRATS +MUSKS +MUSLIM +MUSLIMS +MUSLIN +MUSSEL +MUSSELS +MUSSOLINI +MUSSOLINIS +MUSSORGSKY +MUST +MUSTACHE +MUSTACHED +MUSTACHES +MUSTARD +MUSTER +MUSTINESS +MUSTS +MUSTY +MUTABILITY +MUTABLE +MUTABLENESS +MUTANDIS +MUTANT +MUTATE +MUTATED +MUTATES +MUTATING +MUTATION +MUTATIONS +MUTATIS +MUTATIVE +MUTE +MUTED +MUTELY +MUTENESS +MUTILATE +MUTILATED +MUTILATES +MUTILATING +MUTILATION +MUTINIES +MUTINY +MUTT +MUTTER +MUTTERED +MUTTERER +MUTTERERS +MUTTERING +MUTTERS +MUTTON +MUTUAL +MUTUALLY +MUZAK +MUZO +MUZZLE +MUZZLES +MYCENAE +MYCENAEAN +MYERS +MYNHEER +MYRA +MYRIAD +MYRON +MYRTLE +MYSELF +MYSORE +MYSTERIES +MYSTERIOUS +MYSTERIOUSLY +MYSTERIOUSNESS +MYSTERY +MYSTIC +MYSTICAL +MYSTICS +MYSTIFY +MYTH +MYTHICAL +MYTHOLOGIES +MYTHOLOGY +NAB +NABISCO +NABLA +NABLAS +NADIA +NADINE +NADIR +NAG +NAGASAKI +NAGGED +NAGGING +NAGOYA +NAGS +NAGY +NAIL +NAILED +NAILING +NAILS +NAIR +NAIROBI +NAIVE +NAIVELY +NAIVENESS +NAIVETE +NAKAMURA +NAKAYAMA +NAKED +NAKEDLY +NAKEDNESS +NAKOMA +NAME +NAMEABLE +NAMED +NAMELESS +NAMELESSLY +NAMELY +NAMER +NAMERS +NAMES +NAMESAKE +NAMESAKES +NAMING +NAN +NANCY +NANETTE +NANKING +NANOINSTRUCTION +NANOINSTRUCTIONS +NANOOK +NANOPROGRAM +NANOPROGRAMMING +NANOSECOND +NANOSECONDS +NANOSTORE +NANOSTORES +NANTUCKET +NAOMI +NAP +NAPKIN +NAPKINS +NAPLES +NAPOLEON +NAPOLEONIC +NAPOLEONIZE +NAPOLEONIZES +NAPS +NARBONNE +NARCISSUS +NARCOTIC +NARCOTICS +NARRAGANSETT +NARRATE +NARRATION +NARRATIVE +NARRATIVES +NARROW +NARROWED +NARROWER +NARROWEST +NARROWING +NARROWLY +NARROWNESS +NARROWS +NARY +NASA +NASAL +NASALLY +NASAS +NASH +NASHUA +NASHVILLE +NASSAU +NASTIER +NASTIEST +NASTILY +NASTINESS +NASTY +NAT +NATAL +NATALIE +NATCHEZ +NATE +NATHAN +NATHANIEL +NATION +NATIONAL +NATIONALIST +NATIONALISTS +NATIONALITIES +NATIONALITY +NATIONALIZATION +NATIONALIZE +NATIONALIZED +NATIONALIZES +NATIONALIZING +NATIONALLY +NATIONALS +NATIONHOOD +NATIONS +NATIONWIDE +NATIVE +NATIVELY +NATIVES +NATIVITY +NATO +NATOS +NATURAL +NATURALISM +NATURALIST +NATURALIZATION +NATURALLY +NATURALNESS +NATURALS +NATURE +NATURED +NATURES +NAUGHT +NAUGHTIER +NAUGHTINESS +NAUGHTY +NAUR +NAUSEA +NAUSEATE +NAUSEUM +NAVAHO +NAVAJO +NAVAL +NAVALLY +NAVEL +NAVIES +NAVIGABLE +NAVIGATE +NAVIGATED +NAVIGATES +NAVIGATING +NAVIGATION +NAVIGATOR +NAVIGATORS +NAVONA +NAVY +NAY +NAZARENE +NAZARETH +NAZI +NAZIS +NAZISM +NDJAMENA +NEAL +NEANDERTHAL +NEAPOLITAN +NEAR +NEARBY +NEARED +NEARER +NEAREST +NEARING +NEARLY +NEARNESS +NEARS +NEARSIGHTED +NEAT +NEATER +NEATEST +NEATLY +NEATNESS +NEBRASKA +NEBRASKAN +NEBUCHADNEZZAR +NEBULA +NEBULAR +NEBULOUS +NECESSARIES +NECESSARILY +NECESSARY +NECESSITATE +NECESSITATED +NECESSITATES +NECESSITATING +NECESSITATION +NECESSITIES +NECESSITY +NECK +NECKING +NECKLACE +NECKLACES +NECKLINE +NECKS +NECKTIE +NECKTIES +NECROSIS +NECTAR +NED +NEED +NEEDED +NEEDFUL +NEEDHAM +NEEDING +NEEDLE +NEEDLED +NEEDLER +NEEDLERS +NEEDLES +NEEDLESS +NEEDLESSLY +NEEDLESSNESS +NEEDLEWORK +NEEDLING +NEEDS +NEEDY +NEFF +NEGATE +NEGATED +NEGATES +NEGATING +NEGATION +NEGATIONS +NEGATIVE +NEGATIVELY +NEGATIVES +NEGATOR +NEGATORS +NEGLECT +NEGLECTED +NEGLECTING +NEGLECTS +NEGLIGEE +NEGLIGENCE +NEGLIGENT +NEGLIGIBLE +NEGOTIABLE +NEGOTIATE +NEGOTIATED +NEGOTIATES +NEGOTIATING +NEGOTIATION +NEGOTIATIONS +NEGRO +NEGROES +NEGROID +NEGROIZATION +NEGROIZATIONS +NEGROIZE +NEGROIZES +NEHRU +NEIGH +NEIGHBOR +NEIGHBORHOOD +NEIGHBORHOODS +NEIGHBORING +NEIGHBORLY +NEIGHBORS +NEIL +NEITHER +NELL +NELLIE +NELSEN +NELSON +NEMESIS +NEOCLASSIC +NEON +NEONATAL +NEOPHYTE +NEOPHYTES +NEPAL +NEPALI +NEPHEW +NEPHEWS +NEPTUNE +NERO +NERVE +NERVES +NERVOUS +NERVOUSLY +NERVOUSNESS +NESS +NEST +NESTED +NESTER +NESTING +NESTLE +NESTLED +NESTLES +NESTLING +NESTOR +NESTS +NET +NETHER +NETHERLANDS +NETS +NETTED +NETTING +NETTLE +NETTLED +NETWORK +NETWORKED +NETWORKING +NETWORKS +NEUMANN +NEURAL +NEURITIS +NEUROLOGICAL +NEUROLOGISTS +NEURON +NEURONS +NEUROSES +NEUROSIS +NEUROTIC +NEUTER +NEUTRAL +NEUTRALITIES +NEUTRALITY +NEUTRALIZE +NEUTRALIZED +NEUTRALIZING +NEUTRALLY +NEUTRINO +NEUTRINOS +NEUTRON +NEVA +NEVADA +NEVER +NEVERTHELESS +NEVINS +NEW +NEWARK +NEWBOLD +NEWBORN +NEWBURY +NEWBURYPORT +NEWCASTLE +NEWCOMER +NEWCOMERS +NEWELL +NEWER +NEWEST +NEWFOUNDLAND +NEWLY +NEWLYWED +NEWMAN +NEWMANIZE +NEWMANIZES +NEWNESS +NEWPORT +NEWS +NEWSCAST +NEWSGROUP +NEWSLETTER +NEWSLETTERS +NEWSMAN +NEWSMEN +NEWSPAPER +NEWSPAPERS +NEWSSTAND +NEWSWEEK +NEWSWEEKLY +NEWT +NEWTON +NEWTONIAN +NEXT +NGUYEN +NIAGARA +NIAMEY +NIBBLE +NIBBLED +NIBBLER +NIBBLERS +NIBBLES +NIBBLING +NIBELUNG +NICARAGUA +NICCOLO +NICE +NICELY +NICENESS +NICER +NICEST +NICHE +NICHOLAS +NICHOLLS +NICHOLS +NICHOLSON +NICK +NICKED +NICKEL +NICKELS +NICKER +NICKING +NICKLAUS +NICKNAME +NICKNAMED +NICKNAMES +NICKS +NICODEMUS +NICOSIA +NICOTINE +NIECE +NIECES +NIELSEN +NIELSON +NIETZSCHE +NIFTY +NIGER +NIGERIA +NIGERIAN +NIGH +NIGHT +NIGHTCAP +NIGHTCLUB +NIGHTFALL +NIGHTGOWN +NIGHTINGALE +NIGHTINGALES +NIGHTLY +NIGHTMARE +NIGHTMARES +NIGHTMARISH +NIGHTS +NIGHTTIME +NIHILISM +NIJINSKY +NIKKO +NIKOLAI +NIL +NILE +NILSEN +NILSSON +NIMBLE +NIMBLENESS +NIMBLER +NIMBLY +NIMBUS +NINA +NINE +NINEFOLD +NINES +NINETEEN +NINETEENS +NINETEENTH +NINETIES +NINETIETH +NINETY +NINEVEH +NINTH +NIOBE +NIP +NIPPLE +NIPPON +NIPPONIZE +NIPPONIZES +NIPS +NITRIC +NITROGEN +NITROUS +NITTY +NIXON +NOAH +NOBEL +NOBILITY +NOBLE +NOBLEMAN +NOBLENESS +NOBLER +NOBLES +NOBLEST +NOBLY +NOBODY +NOCTURNAL +NOCTURNALLY +NOD +NODAL +NODDED +NODDING +NODE +NODES +NODS +NODULAR +NODULE +NOEL +NOETHERIAN +NOISE +NOISELESS +NOISELESSLY +NOISES +NOISIER +NOISILY +NOISINESS +NOISY +NOLAN +NOLL +NOMENCLATURE +NOMINAL +NOMINALLY +NOMINATE +NOMINATED +NOMINATING +NOMINATION +NOMINATIVE +NOMINEE +NON +NONADAPTIVE +NONBIODEGRADABLE +NONBLOCKING +NONCE +NONCHALANT +NONCOMMERCIAL +NONCOMMUNICATION +NONCONSECUTIVELY +NONCONSERVATIVE +NONCRITICAL +NONCYCLIC +NONDECREASING +NONDESCRIPT +NONDESCRIPTLY +NONDESTRUCTIVELY +NONDETERMINACY +NONDETERMINATE +NONDETERMINATELY +NONDETERMINISM +NONDETERMINISTIC +NONDETERMINISTICALLY +NONE +NONEMPTY +NONETHELESS +NONEXISTENCE +NONEXISTENT +NONEXTENSIBLE +NONFUNCTIONAL +NONGOVERNMENTAL +NONIDEMPOTENT +NONINTERACTING +NONINTERFERENCE +NONINTERLEAVED +NONINTRUSIVE +NONINTUITIVE +NONINVERTING +NONLINEAR +NONLINEARITIES +NONLINEARITY +NONLINEARLY +NONLOCAL +NONMASKABLE +NONMATHEMATICAL +NONMILITARY +NONNEGATIVE +NONNEGLIGIBLE +NONNUMERICAL +NONOGENARIAN +NONORTHOGONAL +NONORTHOGONALITY +NONPERISHABLE +NONPERSISTENT +NONPORTABLE +NONPROCEDURAL +NONPROCEDURALLY +NONPROFIT +NONPROGRAMMABLE +NONPROGRAMMER +NONSEGMENTED +NONSENSE +NONSENSICAL +NONSEQUENTIAL +NONSPECIALIST +NONSPECIALISTS +NONSTANDARD +NONSYNCHRONOUS +NONTECHNICAL +NONTERMINAL +NONTERMINALS +NONTERMINATING +NONTERMINATION +NONTHERMAL +NONTRANSPARENT +NONTRIVIAL +NONUNIFORM +NONUNIFORMITY +NONZERO +NOODLE +NOOK +NOOKS +NOON +NOONDAY +NOONS +NOONTIDE +NOONTIME +NOOSE +NOR +NORA +NORDHOFF +NORDIC +NORDSTROM +NOREEN +NORFOLK +NORM +NORMA +NORMAL +NORMALCY +NORMALITY +NORMALIZATION +NORMALIZE +NORMALIZED +NORMALIZES +NORMALIZING +NORMALLY +NORMALS +NORMAN +NORMANDY +NORMANIZATION +NORMANIZATIONS +NORMANIZE +NORMANIZER +NORMANIZERS +NORMANIZES +NORMATIVE +NORMS +NORRIS +NORRISTOWN +NORSE +NORTH +NORTHAMPTON +NORTHBOUND +NORTHEAST +NORTHEASTER +NORTHEASTERN +NORTHERLY +NORTHERN +NORTHERNER +NORTHERNERS +NORTHERNLY +NORTHFIELD +NORTHROP +NORTHRUP +NORTHUMBERLAND +NORTHWARD +NORTHWARDS +NORTHWEST +NORTHWESTERN +NORTON +NORWALK +NORWAY +NORWEGIAN +NORWICH +NOSE +NOSED +NOSES +NOSING +NOSTALGIA +NOSTALGIC +NOSTRADAMUS +NOSTRAND +NOSTRIL +NOSTRILS +NOT +NOTABLE +NOTABLES +NOTABLY +NOTARIZE +NOTARIZED +NOTARIZES +NOTARIZING +NOTARY +NOTATION +NOTATIONAL +NOTATIONS +NOTCH +NOTCHED +NOTCHES +NOTCHING +NOTE +NOTEBOOK +NOTEBOOKS +NOTED +NOTES +NOTEWORTHY +NOTHING +NOTHINGNESS +NOTHINGS +NOTICE +NOTICEABLE +NOTICEABLY +NOTICED +NOTICES +NOTICING +NOTIFICATION +NOTIFICATIONS +NOTIFIED +NOTIFIER +NOTIFIERS +NOTIFIES +NOTIFY +NOTIFYING +NOTING +NOTION +NOTIONS +NOTORIETY +NOTORIOUS +NOTORIOUSLY +NOTRE +NOTTINGHAM +NOTWITHSTANDING +NOUAKCHOTT +NOUN +NOUNS +NOURISH +NOURISHED +NOURISHES +NOURISHING +NOURISHMENT +NOVAK +NOVEL +NOVELIST +NOVELISTS +NOVELS +NOVELTIES +NOVELTY +NOVEMBER +NOVEMBERS +NOVICE +NOVICES +NOVOSIBIRSK +NOW +NOWADAYS +NOWHERE +NOXIOUS +NOYES +NOZZLE +NUANCE +NUANCES +NUBIA +NUBIAN +NUBILE +NUCLEAR +NUCLEI +NUCLEIC +NUCLEOTIDE +NUCLEOTIDES +NUCLEUS +NUCLIDE +NUDE +NUDGE +NUDGED +NUDITY +NUGENT +NUGGET +NUISANCE +NUISANCES +NULL +NULLARY +NULLED +NULLIFIED +NULLIFIERS +NULLIFIES +NULLIFY +NULLIFYING +NULLS +NUMB +NUMBED +NUMBER +NUMBERED +NUMBERER +NUMBERING +NUMBERLESS +NUMBERS +NUMBING +NUMBLY +NUMBNESS +NUMBS +NUMERABLE +NUMERAL +NUMERALS +NUMERATOR +NUMERATORS +NUMERIC +NUMERICAL +NUMERICALLY +NUMERICS +NUMEROUS +NUMISMATIC +NUMISMATIST +NUN +NUNS +NUPTIAL +NURSE +NURSED +NURSERIES +NURSERY +NURSES +NURSING +NURTURE +NURTURED +NURTURES +NURTURING +NUT +NUTATE +NUTRIA +NUTRIENT +NUTRITION +NUTRITIOUS +NUTS +NUTSHELL +NUTSHELLS +NUZZLE +NYLON +NYMPH +NYMPHOMANIA +NYMPHOMANIAC +NYMPHS +NYQUIST +OAF +OAK +OAKEN +OAKLAND +OAKLEY +OAKMONT +OAKS +OAR +OARS +OASES +OASIS +OAT +OATEN +OATH +OATHS +OATMEAL +OATS +OBEDIENCE +OBEDIENCES +OBEDIENT +OBEDIENTLY +OBELISK +OBERLIN +OBERON +OBESE +OBEY +OBEYED +OBEYING +OBEYS +OBFUSCATE +OBFUSCATORY +OBITUARY +OBJECT +OBJECTED +OBJECTING +OBJECTION +OBJECTIONABLE +OBJECTIONS +OBJECTIVE +OBJECTIVELY +OBJECTIVES +OBJECTOR +OBJECTORS +OBJECTS +OBLIGATED +OBLIGATION +OBLIGATIONS +OBLIGATORY +OBLIGE +OBLIGED +OBLIGES +OBLIGING +OBLIGINGLY +OBLIQUE +OBLIQUELY +OBLIQUENESS +OBLITERATE +OBLITERATED +OBLITERATES +OBLITERATING +OBLITERATION +OBLIVION +OBLIVIOUS +OBLIVIOUSLY +OBLIVIOUSNESS +OBLONG +OBNOXIOUS +OBOE +OBSCENE +OBSCURE +OBSCURED +OBSCURELY +OBSCURER +OBSCURES +OBSCURING +OBSCURITIES +OBSCURITY +OBSEQUIOUS +OBSERVABLE +OBSERVANCE +OBSERVANCES +OBSERVANT +OBSERVATION +OBSERVATIONS +OBSERVATORY +OBSERVE +OBSERVED +OBSERVER +OBSERVERS +OBSERVES +OBSERVING +OBSESSION +OBSESSIONS +OBSESSIVE +OBSOLESCENCE +OBSOLESCENT +OBSOLETE +OBSOLETED +OBSOLETES +OBSOLETING +OBSTACLE +OBSTACLES +OBSTINACY +OBSTINATE +OBSTINATELY +OBSTRUCT +OBSTRUCTED +OBSTRUCTING +OBSTRUCTION +OBSTRUCTIONS +OBSTRUCTIVE +OBTAIN +OBTAINABLE +OBTAINABLY +OBTAINED +OBTAINING +OBTAINS +OBVIATE +OBVIATED +OBVIATES +OBVIATING +OBVIATION +OBVIATIONS +OBVIOUS +OBVIOUSLY +OBVIOUSNESS +OCCAM +OCCASION +OCCASIONAL +OCCASIONALLY +OCCASIONED +OCCASIONING +OCCASIONINGS +OCCASIONS +OCCIDENT +OCCIDENTAL +OCCIDENTALIZATION +OCCIDENTALIZATIONS +OCCIDENTALIZE +OCCIDENTALIZED +OCCIDENTALIZES +OCCIDENTALIZING +OCCIDENTALS +OCCIPITAL +OCCLUDE +OCCLUDED +OCCLUDES +OCCLUSION +OCCLUSIONS +OCCULT +OCCUPANCIES +OCCUPANCY +OCCUPANT +OCCUPANTS +OCCUPATION +OCCUPATIONAL +OCCUPATIONALLY +OCCUPATIONS +OCCUPIED +OCCUPIER +OCCUPIES +OCCUPY +OCCUPYING +OCCUR +OCCURRED +OCCURRENCE +OCCURRENCES +OCCURRING +OCCURS +OCEAN +OCEANIA +OCEANIC +OCEANOGRAPHY +OCEANS +OCONOMOWOC +OCTAGON +OCTAGONAL +OCTAHEDRA +OCTAHEDRAL +OCTAHEDRON +OCTAL +OCTANE +OCTAVE +OCTAVES +OCTAVIA +OCTET +OCTETS +OCTOBER +OCTOBERS +OCTOGENARIAN +OCTOPUS +ODD +ODDER +ODDEST +ODDITIES +ODDITY +ODDLY +ODDNESS +ODDS +ODE +ODERBERG +ODERBERGS +ODES +ODESSA +ODIN +ODIOUS +ODIOUSLY +ODIOUSNESS +ODIUM +ODOR +ODOROUS +ODOROUSLY +ODOROUSNESS +ODORS +ODYSSEUS +ODYSSEY +OEDIPAL +OEDIPALLY +OEDIPUS +OFF +OFFENBACH +OFFEND +OFFENDED +OFFENDER +OFFENDERS +OFFENDING +OFFENDS +OFFENSE +OFFENSES +OFFENSIVE +OFFENSIVELY +OFFENSIVENESS +OFFER +OFFERED +OFFERER +OFFERERS +OFFERING +OFFERINGS +OFFERS +OFFHAND +OFFICE +OFFICEMATE +OFFICER +OFFICERS +OFFICES +OFFICIAL +OFFICIALDOM +OFFICIALLY +OFFICIALS +OFFICIATE +OFFICIO +OFFICIOUS +OFFICIOUSLY +OFFICIOUSNESS +OFFING +OFFLOAD +OFFS +OFFSET +OFFSETS +OFFSETTING +OFFSHORE +OFFSPRING +OFT +OFTEN +OFTENTIMES +OGDEN +OHIO +OHM +OHMMETER +OIL +OILCLOTH +OILED +OILER +OILERS +OILIER +OILIEST +OILING +OILS +OILY +OINTMENT +OJIBWA +OKAMOTO +OKAY +OKINAWA +OKLAHOMA +OKLAHOMAN +OLAF +OLAV +OLD +OLDEN +OLDENBURG +OLDER +OLDEST +OLDNESS +OLDSMOBILE +OLDUVAI +OLDY +OLEANDER +OLEG +OLEOMARGARINE +OLGA +OLIGARCHY +OLIGOCENE +OLIN +OLIVE +OLIVER +OLIVERS +OLIVES +OLIVETTI +OLIVIA +OLIVIER +OLSEN +OLSON +OLYMPIA +OLYMPIAN +OLYMPIANIZE +OLYMPIANIZES +OLYMPIC +OLYMPICS +OLYMPUS +OMAHA +OMAN +OMEGA +OMELET +OMEN +OMENS +OMICRON +OMINOUS +OMINOUSLY +OMINOUSNESS +OMISSION +OMISSIONS +OMIT +OMITS +OMITTED +OMITTING +OMNIBUS +OMNIDIRECTIONAL +OMNIPOTENT +OMNIPRESENT +OMNISCIENT +OMNISCIENTLY +OMNIVORE +ONANISM +ONCE +ONCOLOGY +ONE +ONEIDA +ONENESS +ONEROUS +ONES +ONESELF +ONETIME +ONGOING +ONION +ONIONS +ONLINE +ONLOOKER +ONLY +ONONDAGA +ONRUSH +ONSET +ONSETS +ONSLAUGHT +ONTARIO +ONTO +ONTOLOGY +ONUS +ONWARD +ONWARDS +ONYX +OOZE +OOZED +OPACITY +OPAL +OPALS +OPAQUE +OPAQUELY +OPAQUENESS +OPCODE +OPEC +OPEL +OPEN +OPENED +OPENER +OPENERS +OPENING +OPENINGS +OPENLY +OPENNESS +OPENS +OPERA +OPERABLE +OPERAND +OPERANDI +OPERANDS +OPERAS +OPERATE +OPERATED +OPERATES +OPERATING +OPERATION +OPERATIONAL +OPERATIONALLY +OPERATIONS +OPERATIVE +OPERATIVES +OPERATOR +OPERATORS +OPERETTA +OPHIUCHUS +OPHIUCUS +OPIATE +OPINION +OPINIONS +OPIUM +OPOSSUM +OPPENHEIMER +OPPONENT +OPPONENTS +OPPORTUNE +OPPORTUNELY +OPPORTUNISM +OPPORTUNISTIC +OPPORTUNITIES +OPPORTUNITY +OPPOSABLE +OPPOSE +OPPOSED +OPPOSES +OPPOSING +OPPOSITE +OPPOSITELY +OPPOSITENESS +OPPOSITES +OPPOSITION +OPPRESS +OPPRESSED +OPPRESSES +OPPRESSING +OPPRESSION +OPPRESSIVE +OPPRESSOR +OPPRESSORS +OPPROBRIUM +OPT +OPTED +OPTHALMIC +OPTIC +OPTICAL +OPTICALLY +OPTICS +OPTIMA +OPTIMAL +OPTIMALITY +OPTIMALLY +OPTIMISM +OPTIMIST +OPTIMISTIC +OPTIMISTICALLY +OPTIMIZATION +OPTIMIZATIONS +OPTIMIZE +OPTIMIZED +OPTIMIZER +OPTIMIZERS +OPTIMIZES +OPTIMIZING +OPTIMUM +OPTING +OPTION +OPTIONAL +OPTIONALLY +OPTIONS +OPTOACOUSTIC +OPTOMETRIST +OPTOMETRY +OPTS +OPULENCE +OPULENT +OPUS +ORACLE +ORACLES +ORAL +ORALLY +ORANGE +ORANGES +ORANGUTAN +ORATION +ORATIONS +ORATOR +ORATORIES +ORATORS +ORATORY +ORB +ORBIT +ORBITAL +ORBITALLY +ORBITED +ORBITER +ORBITERS +ORBITING +ORBITS +ORCHARD +ORCHARDS +ORCHESTRA +ORCHESTRAL +ORCHESTRAS +ORCHESTRATE +ORCHID +ORCHIDS +ORDAIN +ORDAINED +ORDAINING +ORDAINS +ORDEAL +ORDER +ORDERED +ORDERING +ORDERINGS +ORDERLIES +ORDERLY +ORDERS +ORDINAL +ORDINANCE +ORDINANCES +ORDINARILY +ORDINARINESS +ORDINARY +ORDINATE +ORDINATES +ORDINATION +ORE +OREGANO +OREGON +OREGONIANS +ORES +ORESTEIA +ORESTES +ORGAN +ORGANIC +ORGANISM +ORGANISMS +ORGANIST +ORGANISTS +ORGANIZABLE +ORGANIZATION +ORGANIZATIONAL +ORGANIZATIONALLY +ORGANIZATIONS +ORGANIZE +ORGANIZED +ORGANIZER +ORGANIZERS +ORGANIZES +ORGANIZING +ORGANS +ORGASM +ORGIASTIC +ORGIES +ORGY +ORIENT +ORIENTAL +ORIENTALIZATION +ORIENTALIZATIONS +ORIENTALIZE +ORIENTALIZED +ORIENTALIZES +ORIENTALIZING +ORIENTALS +ORIENTATION +ORIENTATIONS +ORIENTED +ORIENTING +ORIENTS +ORIFICE +ORIFICES +ORIGIN +ORIGINAL +ORIGINALITY +ORIGINALLY +ORIGINALS +ORIGINATE +ORIGINATED +ORIGINATES +ORIGINATING +ORIGINATION +ORIGINATOR +ORIGINATORS +ORIGINS +ORIN +ORINOCO +ORIOLE +ORION +ORKNEY +ORLANDO +ORLEANS +ORLICK +ORLY +ORNAMENT +ORNAMENTAL +ORNAMENTALLY +ORNAMENTATION +ORNAMENTED +ORNAMENTING +ORNAMENTS +ORNATE +ORNERY +ORONO +ORPHAN +ORPHANAGE +ORPHANED +ORPHANS +ORPHEUS +ORPHIC +ORPHICALLY +ORR +ORTEGA +ORTHANT +ORTHODONTIST +ORTHODOX +ORTHODOXY +ORTHOGONAL +ORTHOGONALITY +ORTHOGONALLY +ORTHOPEDIC +ORVILLE +ORWELL +ORWELLIAN +OSAKA +OSBERT +OSBORN +OSBORNE +OSCAR +OSCILLATE +OSCILLATED +OSCILLATES +OSCILLATING +OSCILLATION +OSCILLATIONS +OSCILLATOR +OSCILLATORS +OSCILLATORY +OSCILLOSCOPE +OSCILLOSCOPES +OSGOOD +OSHKOSH +OSIRIS +OSLO +OSMOSIS +OSMOTIC +OSSIFY +OSTENSIBLE +OSTENSIBLY +OSTENTATIOUS +OSTEOPATH +OSTEOPATHIC +OSTEOPATHY +OSTEOPOROSIS +OSTRACISM +OSTRANDER +OSTRICH +OSTRICHES +OSWALD +OTHELLO +OTHER +OTHERS +OTHERWISE +OTHERWORLDLY +OTIS +OTT +OTTAWA +OTTER +OTTERS +OTTO +OTTOMAN +OTTOMANIZATION +OTTOMANIZATIONS +OTTOMANIZE +OTTOMANIZES +OUAGADOUGOU +OUCH +OUGHT +OUNCE +OUNCES +OUR +OURS +OURSELF +OURSELVES +OUST +OUT +OUTBOUND +OUTBREAK +OUTBREAKS +OUTBURST +OUTBURSTS +OUTCAST +OUTCASTS +OUTCOME +OUTCOMES +OUTCRIES +OUTCRY +OUTDATED +OUTDO +OUTDOOR +OUTDOORS +OUTER +OUTERMOST +OUTFIT +OUTFITS +OUTFITTED +OUTGOING +OUTGREW +OUTGROW +OUTGROWING +OUTGROWN +OUTGROWS +OUTGROWTH +OUTING +OUTLANDISH +OUTLAST +OUTLASTS +OUTLAW +OUTLAWED +OUTLAWING +OUTLAWS +OUTLAY +OUTLAYS +OUTLET +OUTLETS +OUTLINE +OUTLINED +OUTLINES +OUTLINING +OUTLIVE +OUTLIVED +OUTLIVES +OUTLIVING +OUTLOOK +OUTLYING +OUTNUMBERED +OUTPERFORM +OUTPERFORMED +OUTPERFORMING +OUTPERFORMS +OUTPOST +OUTPOSTS +OUTPUT +OUTPUTS +OUTPUTTING +OUTRAGE +OUTRAGED +OUTRAGEOUS +OUTRAGEOUSLY +OUTRAGES +OUTRIGHT +OUTRUN +OUTRUNS +OUTS +OUTSET +OUTSIDE +OUTSIDER +OUTSIDERS +OUTSKIRTS +OUTSTANDING +OUTSTANDINGLY +OUTSTRETCHED +OUTSTRIP +OUTSTRIPPED +OUTSTRIPPING +OUTSTRIPS +OUTVOTE +OUTVOTED +OUTVOTES +OUTVOTING +OUTWARD +OUTWARDLY +OUTWEIGH +OUTWEIGHED +OUTWEIGHING +OUTWEIGHS +OUTWIT +OUTWITS +OUTWITTED +OUTWITTING +OVAL +OVALS +OVARIES +OVARY +OVEN +OVENS +OVER +OVERALL +OVERALLS +OVERBOARD +OVERCAME +OVERCOAT +OVERCOATS +OVERCOME +OVERCOMES +OVERCOMING +OVERCROWD +OVERCROWDED +OVERCROWDING +OVERCROWDS +OVERDONE +OVERDOSE +OVERDRAFT +OVERDRAFTS +OVERDUE +OVEREMPHASIS +OVEREMPHASIZED +OVERESTIMATE +OVERESTIMATED +OVERESTIMATES +OVERESTIMATING +OVERESTIMATION +OVERFLOW +OVERFLOWED +OVERFLOWING +OVERFLOWS +OVERGROWN +OVERHANG +OVERHANGING +OVERHANGS +OVERHAUL +OVERHAULING +OVERHEAD +OVERHEADS +OVERHEAR +OVERHEARD +OVERHEARING +OVERHEARS +OVERJOY +OVERJOYED +OVERKILL +OVERLAND +OVERLAP +OVERLAPPED +OVERLAPPING +OVERLAPS +OVERLAY +OVERLAYING +OVERLAYS +OVERLOAD +OVERLOADED +OVERLOADING +OVERLOADS +OVERLOOK +OVERLOOKED +OVERLOOKING +OVERLOOKS +OVERLY +OVERNIGHT +OVERNIGHTER +OVERNIGHTERS +OVERPOWER +OVERPOWERED +OVERPOWERING +OVERPOWERS +OVERPRINT +OVERPRINTED +OVERPRINTING +OVERPRINTS +OVERPRODUCTION +OVERRIDDEN +OVERRIDE +OVERRIDES +OVERRIDING +OVERRODE +OVERRULE +OVERRULED +OVERRULES +OVERRUN +OVERRUNNING +OVERRUNS +OVERSEAS +OVERSEE +OVERSEEING +OVERSEER +OVERSEERS +OVERSEES +OVERSHADOW +OVERSHADOWED +OVERSHADOWING +OVERSHADOWS +OVERSHOOT +OVERSHOT +OVERSIGHT +OVERSIGHTS +OVERSIMPLIFIED +OVERSIMPLIFIES +OVERSIMPLIFY +OVERSIMPLIFYING +OVERSIZED +OVERSTATE +OVERSTATED +OVERSTATEMENT +OVERSTATEMENTS +OVERSTATES +OVERSTATING +OVERSTOCKS +OVERSUBSCRIBED +OVERT +OVERTAKE +OVERTAKEN +OVERTAKER +OVERTAKERS +OVERTAKES +OVERTAKING +OVERTHREW +OVERTHROW +OVERTHROWN +OVERTIME +OVERTLY +OVERTONE +OVERTONES +OVERTOOK +OVERTURE +OVERTURES +OVERTURN +OVERTURNED +OVERTURNING +OVERTURNS +OVERUSE +OVERVIEW +OVERVIEWS +OVERWHELM +OVERWHELMED +OVERWHELMING +OVERWHELMINGLY +OVERWHELMS +OVERWORK +OVERWORKED +OVERWORKING +OVERWORKS +OVERWRITE +OVERWRITES +OVERWRITING +OVERWRITTEN +OVERZEALOUS +OVID +OWE +OWED +OWEN +OWENS +OWES +OWING +OWL +OWLS +OWN +OWNED +OWNER +OWNERS +OWNERSHIP +OWNERSHIPS +OWNING +OWNS +OXEN +OXFORD +OXIDE +OXIDES +OXIDIZE +OXIDIZED +OXNARD +OXONIAN +OXYGEN +OYSTER +OYSTERS +OZARK +OZARKS +OZONE +OZZIE +PABLO +PABST +PACE +PACED +PACEMAKER +PACER +PACERS +PACES +PACIFIC +PACIFICATION +PACIFIED +PACIFIER +PACIFIES +PACIFISM +PACIFIST +PACIFY +PACING +PACK +PACKAGE +PACKAGED +PACKAGER +PACKAGERS +PACKAGES +PACKAGING +PACKAGINGS +PACKARD +PACKARDS +PACKED +PACKER +PACKERS +PACKET +PACKETS +PACKING +PACKS +PACKWOOD +PACT +PACTS +PAD +PADDED +PADDING +PADDLE +PADDOCK +PADDY +PADLOCK +PADS +PAGAN +PAGANINI +PAGANS +PAGE +PAGEANT +PAGEANTRY +PAGEANTS +PAGED +PAGER +PAGERS +PAGES +PAGINATE +PAGINATED +PAGINATES +PAGINATING +PAGINATION +PAGING +PAGODA +PAID +PAIL +PAILS +PAIN +PAINE +PAINED +PAINFUL +PAINFULLY +PAINLESS +PAINS +PAINSTAKING +PAINSTAKINGLY +PAINT +PAINTED +PAINTER +PAINTERS +PAINTING +PAINTINGS +PAINTS +PAIR +PAIRED +PAIRING +PAIRINGS +PAIRS +PAIRWISE +PAJAMA +PAJAMAS +PAKISTAN +PAKISTANI +PAKISTANIS +PAL +PALACE +PALACES +PALATE +PALATES +PALATINE +PALE +PALED +PALELY +PALENESS +PALEOLITHIC +PALEOZOIC +PALER +PALERMO +PALES +PALEST +PALESTINE +PALESTINIAN +PALFREY +PALINDROME +PALINDROMIC +PALING +PALL +PALLADIAN +PALLADIUM +PALLIATE +PALLIATIVE +PALLID +PALM +PALMED +PALMER +PALMING +PALMOLIVE +PALMS +PALMYRA +PALO +PALOMAR +PALPABLE +PALS +PALSY +PAM +PAMELA +PAMPER +PAMPHLET +PAMPHLETS +PAN +PANACEA +PANACEAS +PANAMA +PANAMANIAN +PANCAKE +PANCAKES +PANCHO +PANDA +PANDANUS +PANDAS +PANDEMIC +PANDEMONIUM +PANDER +PANDORA +PANE +PANEL +PANELED +PANELING +PANELIST +PANELISTS +PANELS +PANES +PANG +PANGAEA +PANGS +PANIC +PANICKED +PANICKING +PANICKY +PANICS +PANNED +PANNING +PANORAMA +PANORAMIC +PANS +PANSIES +PANSY +PANT +PANTED +PANTHEISM +PANTHEIST +PANTHEON +PANTHER +PANTHERS +PANTIES +PANTING +PANTOMIME +PANTRIES +PANTRY +PANTS +PANTY +PANTYHOSE +PAOLI +PAPA +PAPAL +PAPER +PAPERBACK +PAPERBACKS +PAPERED +PAPERER +PAPERERS +PAPERING +PAPERINGS +PAPERS +PAPERWEIGHT +PAPERWORK +PAPOOSE +PAPPAS +PAPUA +PAPYRUS +PAR +PARABOLA +PARABOLIC +PARABOLOID +PARABOLOIDAL +PARACHUTE +PARACHUTED +PARACHUTES +PARADE +PARADED +PARADES +PARADIGM +PARADIGMS +PARADING +PARADISE +PARADOX +PARADOXES +PARADOXICAL +PARADOXICALLY +PARAFFIN +PARAGON +PARAGONS +PARAGRAPH +PARAGRAPHING +PARAGRAPHS +PARAGUAY +PARAGUAYAN +PARAGUAYANS +PARAKEET +PARALLAX +PARALLEL +PARALLELED +PARALLELING +PARALLELISM +PARALLELIZE +PARALLELIZED +PARALLELIZES +PARALLELIZING +PARALLELOGRAM +PARALLELOGRAMS +PARALLELS +PARALYSIS +PARALYZE +PARALYZED +PARALYZES +PARALYZING +PARAMETER +PARAMETERIZABLE +PARAMETERIZATION +PARAMETERIZATIONS +PARAMETERIZE +PARAMETERIZED +PARAMETERIZES +PARAMETERIZING +PARAMETERLESS +PARAMETERS +PARAMETRIC +PARAMETRIZED +PARAMILITARY +PARAMOUNT +PARAMUS +PARANOIA +PARANOIAC +PARANOID +PARANORMAL +PARAPET +PARAPETS +PARAPHERNALIA +PARAPHRASE +PARAPHRASED +PARAPHRASES +PARAPHRASING +PARAPSYCHOLOGY +PARASITE +PARASITES +PARASITIC +PARASITICS +PARASOL +PARBOIL +PARC +PARCEL +PARCELED +PARCELING +PARCELS +PARCH +PARCHED +PARCHMENT +PARDON +PARDONABLE +PARDONABLY +PARDONED +PARDONER +PARDONERS +PARDONING +PARDONS +PARE +PAREGORIC +PARENT +PARENTAGE +PARENTAL +PARENTHESES +PARENTHESIS +PARENTHESIZED +PARENTHESIZES +PARENTHESIZING +PARENTHETIC +PARENTHETICAL +PARENTHETICALLY +PARENTHOOD +PARENTS +PARES +PARETO +PARIAH +PARIMUTUEL +PARING +PARINGS +PARIS +PARISH +PARISHES +PARISHIONER +PARISIAN +PARISIANIZATION +PARISIANIZATIONS +PARISIANIZE +PARISIANIZES +PARITY +PARK +PARKE +PARKED +PARKER +PARKERS +PARKERSBURG +PARKHOUSE +PARKING +PARKINSON +PARKINSONIAN +PARKLAND +PARKLIKE +PARKS +PARKWAY +PARLAY +PARLEY +PARLIAMENT +PARLIAMENTARIAN +PARLIAMENTARY +PARLIAMENTS +PARLOR +PARLORS +PARMESAN +PAROCHIAL +PARODY +PAROLE +PAROLED +PAROLES +PAROLING +PARR +PARRIED +PARRISH +PARROT +PARROTING +PARROTS +PARRS +PARRY +PARS +PARSE +PARSED +PARSER +PARSERS +PARSES +PARSI +PARSIFAL +PARSIMONY +PARSING +PARSINGS +PARSLEY +PARSON +PARSONS +PART +PARTAKE +PARTAKER +PARTAKES +PARTAKING +PARTED +PARTER +PARTERS +PARTHENON +PARTHIA +PARTIAL +PARTIALITY +PARTIALLY +PARTICIPANT +PARTICIPANTS +PARTICIPATE +PARTICIPATED +PARTICIPATES +PARTICIPATING +PARTICIPATION +PARTICIPLE +PARTICLE +PARTICLES +PARTICULAR +PARTICULARLY +PARTICULARS +PARTICULATE +PARTIES +PARTING +PARTINGS +PARTISAN +PARTISANS +PARTITION +PARTITIONED +PARTITIONING +PARTITIONS +PARTLY +PARTNER +PARTNERED +PARTNERS +PARTNERSHIP +PARTOOK +PARTRIDGE +PARTRIDGES +PARTS +PARTY +PASADENA +PASCAL +PASCAL +PASO +PASS +PASSAGE +PASSAGES +PASSAGEWAY +PASSAIC +PASSE +PASSED +PASSENGER +PASSENGERS +PASSER +PASSERS +PASSES +PASSING +PASSION +PASSIONATE +PASSIONATELY +PASSIONS +PASSIVATE +PASSIVE +PASSIVELY +PASSIVENESS +PASSIVITY +PASSOVER +PASSPORT +PASSPORTS +PASSWORD +PASSWORDS +PAST +PASTE +PASTED +PASTEL +PASTERNAK +PASTES +PASTEUR +PASTIME +PASTIMES +PASTING +PASTNESS +PASTOR +PASTORAL +PASTORS +PASTRY +PASTS +PASTURE +PASTURES +PAT +PATAGONIA +PATAGONIANS +PATCH +PATCHED +PATCHES +PATCHING +PATCHWORK +PATCHY +PATE +PATEN +PATENT +PATENTABLE +PATENTED +PATENTER +PATENTERS +PATENTING +PATENTLY +PATENTS +PATERNAL +PATERNALLY +PATERNOSTER +PATERSON +PATH +PATHETIC +PATHNAME +PATHNAMES +PATHOGEN +PATHOGENESIS +PATHOLOGICAL +PATHOLOGY +PATHOS +PATHS +PATHWAY +PATHWAYS +PATIENCE +PATIENT +PATIENTLY +PATIENTS +PATINA +PATIO +PATRIARCH +PATRIARCHAL +PATRIARCHS +PATRIARCHY +PATRICE +PATRICIA +PATRICIAN +PATRICIANS +PATRICK +PATRIMONIAL +PATRIMONY +PATRIOT +PATRIOTIC +PATRIOTISM +PATRIOTS +PATROL +PATROLLED +PATROLLING +PATROLMAN +PATROLMEN +PATROLS +PATRON +PATRONAGE +PATRONIZE +PATRONIZED +PATRONIZES +PATRONIZING +PATRONS +PATS +PATSIES +PATSY +PATTER +PATTERED +PATTERING +PATTERINGS +PATTERN +PATTERNED +PATTERNING +PATTERNS +PATTERS +PATTERSON +PATTI +PATTIES +PATTON +PATTY +PAUCITY +PAUL +PAULA +PAULETTE +PAULI +PAULINE +PAULING +PAULINIZE +PAULINIZES +PAULO +PAULSEN +PAULSON +PAULUS +PAUNCH +PAUNCHY +PAUPER +PAUSE +PAUSED +PAUSES +PAUSING +PAVE +PAVED +PAVEMENT +PAVEMENTS +PAVES +PAVILION +PAVILIONS +PAVING +PAVLOV +PAVLOVIAN +PAW +PAWING +PAWN +PAWNS +PAWNSHOP +PAWS +PAWTUCKET +PAY +PAYABLE +PAYCHECK +PAYCHECKS +PAYED +PAYER +PAYERS +PAYING +PAYMENT +PAYMENTS +PAYNE +PAYNES +PAYNIZE +PAYNIZES +PAYOFF +PAYOFFS +PAYROLL +PAYS +PAYSON +PAZ +PEA +PEABODY +PEACE +PEACEABLE +PEACEFUL +PEACEFULLY +PEACEFULNESS +PEACETIME +PEACH +PEACHES +PEACHTREE +PEACOCK +PEACOCKS +PEAK +PEAKED +PEAKS +PEAL +PEALE +PEALED +PEALING +PEALS +PEANUT +PEANUTS +PEAR +PEARCE +PEARL +PEARLS +PEARLY +PEARS +PEARSON +PEAS +PEASANT +PEASANTRY +PEASANTS +PEASE +PEAT +PEBBLE +PEBBLES +PECCARY +PECK +PECKED +PECKING +PECKS +PECOS +PECTORAL +PECULIAR +PECULIARITIES +PECULIARITY +PECULIARLY +PECUNIARY +PEDAGOGIC +PEDAGOGICAL +PEDAGOGICALLY +PEDAGOGY +PEDAL +PEDANT +PEDANTIC +PEDANTRY +PEDDLE +PEDDLER +PEDDLERS +PEDESTAL +PEDESTRIAN +PEDESTRIANS +PEDIATRIC +PEDIATRICIAN +PEDIATRICS +PEDIGREE +PEDRO +PEEK +PEEKED +PEEKING +PEEKS +PEEL +PEELED +PEELING +PEELS +PEEP +PEEPED +PEEPER +PEEPHOLE +PEEPING +PEEPS +PEER +PEERED +PEERING +PEERLESS +PEERS +PEG +PEGASUS +PEGBOARD +PEGGY +PEGS +PEIPING +PEJORATIVE +PEKING +PELHAM +PELICAN +PELLAGRA +PELOPONNESE +PELT +PELTING +PELTS +PELVIC +PELVIS +PEMBROKE +PEN +PENAL +PENALIZE +PENALIZED +PENALIZES +PENALIZING +PENALTIES +PENALTY +PENANCE +PENCE +PENCHANT +PENCIL +PENCILED +PENCILS +PEND +PENDANT +PENDED +PENDING +PENDLETON +PENDS +PENDULUM +PENDULUMS +PENELOPE +PENETRABLE +PENETRATE +PENETRATED +PENETRATES +PENETRATING +PENETRATINGLY +PENETRATION +PENETRATIONS +PENETRATIVE +PENETRATOR +PENETRATORS +PENGUIN +PENGUINS +PENH +PENICILLIN +PENINSULA +PENINSULAS +PENIS +PENISES +PENITENT +PENITENTIARY +PENN +PENNED +PENNIES +PENNILESS +PENNING +PENNSYLVANIA +PENNY +PENROSE +PENS +PENSACOLA +PENSION +PENSIONER +PENSIONS +PENSIVE +PENT +PENTAGON +PENTAGONS +PENTATEUCH +PENTECOST +PENTECOSTAL +PENTHOUSE +PENULTIMATE +PENUMBRA +PEONY +PEOPLE +PEOPLED +PEOPLES +PEORIA +PEP +PEPPER +PEPPERED +PEPPERING +PEPPERMINT +PEPPERONI +PEPPERS +PEPPERY +PEPPY +PEPSI +PEPSICO +PEPSICO +PEPTIDE +PER +PERCEIVABLE +PERCEIVABLY +PERCEIVE +PERCEIVED +PERCEIVER +PERCEIVERS +PERCEIVES +PERCEIVING +PERCENT +PERCENTAGE +PERCENTAGES +PERCENTILE +PERCENTILES +PERCENTS +PERCEPTIBLE +PERCEPTIBLY +PERCEPTION +PERCEPTIONS +PERCEPTIVE +PERCEPTIVELY +PERCEPTUAL +PERCEPTUALLY +PERCH +PERCHANCE +PERCHED +PERCHES +PERCHING +PERCIVAL +PERCUSSION +PERCUTANEOUS +PERCY +PEREMPTORY +PERENNIAL +PERENNIALLY +PEREZ +PERFECT +PERFECTED +PERFECTIBLE +PERFECTING +PERFECTION +PERFECTIONIST +PERFECTIONISTS +PERFECTLY +PERFECTNESS +PERFECTS +PERFORCE +PERFORM +PERFORMANCE +PERFORMANCES +PERFORMED +PERFORMER +PERFORMERS +PERFORMING +PERFORMS +PERFUME +PERFUMED +PERFUMES +PERFUMING +PERFUNCTORY +PERGAMON +PERHAPS +PERICLEAN +PERICLES +PERIHELION +PERIL +PERILLA +PERILOUS +PERILOUSLY +PERILS +PERIMETER +PERIOD +PERIODIC +PERIODICAL +PERIODICALLY +PERIODICALS +PERIODS +PERIPHERAL +PERIPHERALLY +PERIPHERALS +PERIPHERIES +PERIPHERY +PERISCOPE +PERISH +PERISHABLE +PERISHABLES +PERISHED +PERISHER +PERISHERS +PERISHES +PERISHING +PERJURE +PERJURY +PERK +PERKINS +PERKY +PERLE +PERMANENCE +PERMANENT +PERMANENTLY +PERMEABLE +PERMEATE +PERMEATED +PERMEATES +PERMEATING +PERMEATION +PERMIAN +PERMISSIBILITY +PERMISSIBLE +PERMISSIBLY +PERMISSION +PERMISSIONS +PERMISSIVE +PERMISSIVELY +PERMIT +PERMITS +PERMITTED +PERMITTING +PERMUTATION +PERMUTATIONS +PERMUTE +PERMUTED +PERMUTES +PERMUTING +PERNICIOUS +PERNOD +PEROXIDE +PERPENDICULAR +PERPENDICULARLY +PERPENDICULARS +PERPETRATE +PERPETRATED +PERPETRATES +PERPETRATING +PERPETRATION +PERPETRATIONS +PERPETRATOR +PERPETRATORS +PERPETUAL +PERPETUALLY +PERPETUATE +PERPETUATED +PERPETUATES +PERPETUATING +PERPETUATION +PERPETUITY +PERPLEX +PERPLEXED +PERPLEXING +PERPLEXITY +PERRY +PERSECUTE +PERSECUTED +PERSECUTES +PERSECUTING +PERSECUTION +PERSECUTOR +PERSECUTORS +PERSEID +PERSEPHONE +PERSEUS +PERSEVERANCE +PERSEVERE +PERSEVERED +PERSEVERES +PERSEVERING +PERSHING +PERSIA +PERSIAN +PERSIANIZATION +PERSIANIZATIONS +PERSIANIZE +PERSIANIZES +PERSIANS +PERSIST +PERSISTED +PERSISTENCE +PERSISTENT +PERSISTENTLY +PERSISTING +PERSISTS +PERSON +PERSONAGE +PERSONAGES +PERSONAL +PERSONALITIES +PERSONALITY +PERSONALIZATION +PERSONALIZE +PERSONALIZED +PERSONALIZES +PERSONALIZING +PERSONALLY +PERSONIFICATION +PERSONIFIED +PERSONIFIES +PERSONIFY +PERSONIFYING +PERSONNEL +PERSONS +PERSPECTIVE +PERSPECTIVES +PERSPICUOUS +PERSPICUOUSLY +PERSPIRATION +PERSPIRE +PERSUADABLE +PERSUADE +PERSUADED +PERSUADER +PERSUADERS +PERSUADES +PERSUADING +PERSUASION +PERSUASIONS +PERSUASIVE +PERSUASIVELY +PERSUASIVENESS +PERTAIN +PERTAINED +PERTAINING +PERTAINS +PERTH +PERTINENT +PERTURB +PERTURBATION +PERTURBATIONS +PERTURBED +PERU +PERUSAL +PERUSE +PERUSED +PERUSER +PERUSERS +PERUSES +PERUSING +PERUVIAN +PERUVIANIZE +PERUVIANIZES +PERUVIANS +PERVADE +PERVADED +PERVADES +PERVADING +PERVASIVE +PERVASIVELY +PERVERSION +PERVERT +PERVERTED +PERVERTS +PESSIMISM +PESSIMIST +PESSIMISTIC +PEST +PESTER +PESTICIDE +PESTILENCE +PESTILENT +PESTS +PET +PETAL +PETALS +PETE +PETER +PETERS +PETERSBURG +PETERSEN +PETERSON +PETITION +PETITIONED +PETITIONER +PETITIONING +PETITIONS +PETKIEWICZ +PETRI +PETROLEUM +PETS +PETTED +PETTER +PETTERS +PETTIBONE +PETTICOAT +PETTICOATS +PETTINESS +PETTING +PETTY +PETULANCE +PETULANT +PEUGEOT +PEW +PEWAUKEE +PEWS +PEWTER +PFIZER +PHAEDRA +PHANTOM +PHANTOMS +PHARMACEUTIC +PHARMACIST +PHARMACOLOGY +PHARMACOPOEIA +PHARMACY +PHASE +PHASED +PHASER +PHASERS +PHASES +PHASING +PHEASANT +PHEASANTS +PHELPS +PHENOMENA +PHENOMENAL +PHENOMENALLY +PHENOMENOLOGICAL +PHENOMENOLOGICALLY +PHENOMENOLOGIES +PHENOMENOLOGY +PHENOMENON +PHI +PHIGS +PHIL +PHILADELPHIA +PHILANTHROPY +PHILCO +PHILHARMONIC +PHILIP +PHILIPPE +PHILIPPIANS +PHILIPPINE +PHILIPPINES +PHILISTINE +PHILISTINES +PHILISTINIZE +PHILISTINIZES +PHILLIES +PHILLIP +PHILLIPS +PHILLY +PHILOSOPHER +PHILOSOPHERS +PHILOSOPHIC +PHILOSOPHICAL +PHILOSOPHICALLY +PHILOSOPHIES +PHILOSOPHIZE +PHILOSOPHIZED +PHILOSOPHIZER +PHILOSOPHIZERS +PHILOSOPHIZES +PHILOSOPHIZING +PHILOSOPHY +PHIPPS +PHOBOS +PHOENICIA +PHOENIX +PHONE +PHONED +PHONEME +PHONEMES +PHONEMIC +PHONES +PHONETIC +PHONETICS +PHONING +PHONOGRAPH +PHONOGRAPHS +PHONY +PHOSGENE +PHOSPHATE +PHOSPHATES +PHOSPHOR +PHOSPHORESCENT +PHOSPHORIC +PHOSPHORUS +PHOTO +PHOTOCOPIED +PHOTOCOPIER +PHOTOCOPIERS +PHOTOCOPIES +PHOTOCOPY +PHOTOCOPYING +PHOTODIODE +PHOTODIODES +PHOTOGENIC +PHOTOGRAPH +PHOTOGRAPHED +PHOTOGRAPHER +PHOTOGRAPHERS +PHOTOGRAPHIC +PHOTOGRAPHING +PHOTOGRAPHS +PHOTOGRAPHY +PHOTON +PHOTOS +PHOTOSENSITIVE +PHOTOTYPESETTER +PHOTOTYPESETTERS +PHRASE +PHRASED +PHRASEOLOGY +PHRASES +PHRASING +PHRASINGS +PHYLA +PHYLLIS +PHYLUM +PHYSIC +PHYSICAL +PHYSICALLY +PHYSICALNESS +PHYSICALS +PHYSICIAN +PHYSICIANS +PHYSICIST +PHYSICISTS +PHYSICS +PHYSIOLOGICAL +PHYSIOLOGICALLY +PHYSIOLOGY +PHYSIOTHERAPIST +PHYSIOTHERAPY +PHYSIQUE +PHYTOPLANKTON +PIANIST +PIANO +PIANOS +PICA +PICAS +PICASSO +PICAYUNE +PICCADILLY +PICCOLO +PICK +PICKAXE +PICKED +PICKER +PICKERING +PICKERS +PICKET +PICKETED +PICKETER +PICKETERS +PICKETING +PICKETS +PICKETT +PICKFORD +PICKING +PICKINGS +PICKLE +PICKLED +PICKLES +PICKLING +PICKMAN +PICKS +PICKUP +PICKUPS +PICKY +PICNIC +PICNICKED +PICNICKING +PICNICS +PICOFARAD +PICOJOULE +PICOSECOND +PICT +PICTORIAL +PICTORIALLY +PICTURE +PICTURED +PICTURES +PICTURESQUE +PICTURESQUENESS +PICTURING +PIDDLE +PIDGIN +PIE +PIECE +PIECED +PIECEMEAL +PIECES +PIECEWISE +PIECING +PIEDFORT +PIEDMONT +PIER +PIERCE +PIERCED +PIERCES +PIERCING +PIERRE +PIERS +PIERSON +PIES +PIETY +PIEZOELECTRIC +PIG +PIGEON +PIGEONHOLE +PIGEONS +PIGGISH +PIGGY +PIGGYBACK +PIGGYBACKED +PIGGYBACKING +PIGGYBACKS +PIGMENT +PIGMENTATION +PIGMENTED +PIGMENTS +PIGPEN +PIGS +PIGSKIN +PIGTAIL +PIKE +PIKER +PIKES +PILATE +PILE +PILED +PILERS +PILES +PILFER +PILFERAGE +PILGRIM +PILGRIMAGE +PILGRIMAGES +PILGRIMS +PILING +PILINGS +PILL +PILLAGE +PILLAGED +PILLAR +PILLARED +PILLARS +PILLORY +PILLOW +PILLOWS +PILLS +PILLSBURY +PILOT +PILOTING +PILOTS +PIMP +PIMPLE +PIN +PINAFORE +PINBALL +PINCH +PINCHED +PINCHES +PINCHING +PINCUSHION +PINE +PINEAPPLE +PINEAPPLES +PINED +PINEHURST +PINES +PING +PINHEAD +PINHOLE +PINING +PINION +PINK +PINKER +PINKEST +PINKIE +PINKISH +PINKLY +PINKNESS +PINKS +PINNACLE +PINNACLES +PINNED +PINNING +PINNINGS +PINOCHLE +PINPOINT +PINPOINTING +PINPOINTS +PINS +PINSCHER +PINSKY +PINT +PINTO +PINTS +PINWHEEL +PION +PIONEER +PIONEERED +PIONEERING +PIONEERS +PIOTR +PIOUS +PIOUSLY +PIP +PIPE +PIPED +PIPELINE +PIPELINED +PIPELINES +PIPELINING +PIPER +PIPERS +PIPES +PIPESTONE +PIPETTE +PIPING +PIQUE +PIRACY +PIRAEUS +PIRATE +PIRATES +PISA +PISCATAWAY +PISCES +PISS +PISTACHIO +PISTIL +PISTILS +PISTOL +PISTOLS +PISTON +PISTONS +PIT +PITCH +PITCHED +PITCHER +PITCHERS +PITCHES +PITCHFORK +PITCHING +PITEOUS +PITEOUSLY +PITFALL +PITFALLS +PITH +PITHED +PITHES +PITHIER +PITHIEST +PITHINESS +PITHING +PITHY +PITIABLE +PITIED +PITIER +PITIERS +PITIES +PITIFUL +PITIFULLY +PITILESS +PITILESSLY +PITNEY +PITS +PITT +PITTED +PITTSBURGH +PITTSBURGHERS +PITTSFIELD +PITTSTON +PITUITARY +PITY +PITYING +PITYINGLY +PIUS +PIVOT +PIVOTAL +PIVOTING +PIVOTS +PIXEL +PIXELS +PIZARRO +PIZZA +PLACARD +PLACARDS +PLACATE +PLACE +PLACEBO +PLACED +PLACEHOLDER +PLACEMENT +PLACEMENTS +PLACENTA +PLACENTAL +PLACER +PLACES +PLACID +PLACIDLY +PLACING +PLAGIARISM +PLAGIARIST +PLAGUE +PLAGUED +PLAGUES +PLAGUING +PLAID +PLAIDS +PLAIN +PLAINER +PLAINEST +PLAINFIELD +PLAINLY +PLAINNESS +PLAINS +PLAINTEXT +PLAINTEXTS +PLAINTIFF +PLAINTIFFS +PLAINTIVE +PLAINTIVELY +PLAINTIVENESS +PLAINVIEW +PLAIT +PLAITS +PLAN +PLANAR +PLANARITY +PLANCK +PLANE +PLANED +PLANELOAD +PLANER +PLANERS +PLANES +PLANET +PLANETARIA +PLANETARIUM +PLANETARY +PLANETESIMAL +PLANETOID +PLANETS +PLANING +PLANK +PLANKING +PLANKS +PLANKTON +PLANNED +PLANNER +PLANNERS +PLANNING +PLANOCONCAVE +PLANOCONVEX +PLANS +PLANT +PLANTATION +PLANTATIONS +PLANTED +PLANTER +PLANTERS +PLANTING +PLANTINGS +PLANTS +PLAQUE +PLASMA +PLASTER +PLASTERED +PLASTERER +PLASTERING +PLASTERS +PLASTIC +PLASTICITY +PLASTICS +PLATE +PLATEAU +PLATEAUS +PLATED +PLATELET +PLATELETS +PLATEN +PLATENS +PLATES +PLATFORM +PLATFORMS +PLATING +PLATINUM +PLATITUDE +PLATO +PLATONIC +PLATONISM +PLATONIST +PLATOON +PLATTE +PLATTER +PLATTERS +PLATTEVILLE +PLAUSIBILITY +PLAUSIBLE +PLAY +PLAYABLE +PLAYBACK +PLAYBOY +PLAYED +PLAYER +PLAYERS +PLAYFUL +PLAYFULLY +PLAYFULNESS +PLAYGROUND +PLAYGROUNDS +PLAYHOUSE +PLAYING +PLAYMATE +PLAYMATES +PLAYOFF +PLAYROOM +PLAYS +PLAYTHING +PLAYTHINGS +PLAYTIME +PLAYWRIGHT +PLAYWRIGHTS +PLAYWRITING +PLAZA +PLEA +PLEAD +PLEADED +PLEADER +PLEADING +PLEADS +PLEAS +PLEASANT +PLEASANTLY +PLEASANTNESS +PLEASE +PLEASED +PLEASES +PLEASING +PLEASINGLY +PLEASURE +PLEASURES +PLEAT +PLEBEIAN +PLEBIAN +PLEBISCITE +PLEBISCITES +PLEDGE +PLEDGED +PLEDGES +PLEIADES +PLEISTOCENE +PLENARY +PLENIPOTENTIARY +PLENTEOUS +PLENTIFUL +PLENTIFULLY +PLENTY +PLETHORA +PLEURISY +PLEXIGLAS +PLIABLE +PLIANT +PLIED +PLIERS +PLIES +PLIGHT +PLINY +PLIOCENE +PLOD +PLODDING +PLOT +PLOTS +PLOTTED +PLOTTER +PLOTTERS +PLOTTING +PLOW +PLOWED +PLOWER +PLOWING +PLOWMAN +PLOWS +PLOWSHARE +PLOY +PLOYS +PLUCK +PLUCKED +PLUCKING +PLUCKS +PLUCKY +PLUG +PLUGGABLE +PLUGGED +PLUGGING +PLUGS +PLUM +PLUMAGE +PLUMB +PLUMBED +PLUMBING +PLUMBS +PLUME +PLUMED +PLUMES +PLUMMET +PLUMMETING +PLUMP +PLUMPED +PLUMPNESS +PLUMS +PLUNDER +PLUNDERED +PLUNDERER +PLUNDERERS +PLUNDERING +PLUNDERS +PLUNGE +PLUNGED +PLUNGER +PLUNGERS +PLUNGES +PLUNGING +PLUNK +PLURAL +PLURALITY +PLURALS +PLUS +PLUSES +PLUSH +PLUTARCH +PLUTO +PLUTONIUM +PLY +PLYMOUTH +PLYWOOD +PNEUMATIC +PNEUMONIA +POACH +POACHER +POACHES +POCAHONTAS +POCKET +POCKETBOOK +POCKETBOOKS +POCKETED +POCKETFUL +POCKETING +POCKETS +POCONO +POCONOS +POD +PODIA +PODIUM +PODS +PODUNK +POE +POEM +POEMS +POET +POETIC +POETICAL +POETICALLY +POETICS +POETRIES +POETRY +POETS +POGO +POGROM +POIGNANCY +POIGNANT +POINCARE +POINDEXTER +POINT +POINTED +POINTEDLY +POINTER +POINTERS +POINTING +POINTLESS +POINTS +POINTY +POISE +POISED +POISES +POISON +POISONED +POISONER +POISONING +POISONOUS +POISONOUSNESS +POISONS +POISSON +POKE +POKED +POKER +POKERFACE +POKES +POKING +POLAND +POLAR +POLARIS +POLARITIES +POLARITY +POLAROID +POLE +POLECAT +POLED +POLEMIC +POLEMICS +POLES +POLICE +POLICED +POLICEMAN +POLICEMEN +POLICES +POLICIES +POLICING +POLICY +POLING +POLIO +POLISH +POLISHED +POLISHER +POLISHERS +POLISHES +POLISHING +POLITBURO +POLITE +POLITELY +POLITENESS +POLITER +POLITEST +POLITIC +POLITICAL +POLITICALLY +POLITICIAN +POLITICIANS +POLITICKING +POLITICS +POLK +POLKA +POLL +POLLARD +POLLED +POLLEN +POLLING +POLLOI +POLLS +POLLUTANT +POLLUTE +POLLUTED +POLLUTES +POLLUTING +POLLUTION +POLLUX +POLO +POLYALPHABETIC +POLYGON +POLYGONS +POLYHYMNIA +POLYMER +POLYMERS +POLYMORPHIC +POLYNESIA +POLYNESIAN +POLYNOMIAL +POLYNOMIALS +POLYPHEMUS +POLYTECHNIC +POLYTHEIST +POMERANIA +POMERANIAN +POMONA +POMP +POMPADOUR +POMPEII +POMPEY +POMPOSITY +POMPOUS +POMPOUSLY +POMPOUSNESS +PONCE +PONCHARTRAIN +PONCHO +POND +PONDER +PONDERED +PONDERING +PONDEROUS +PONDERS +PONDS +PONG +PONIES +PONTIAC +PONTIFF +PONTIFIC +PONTIFICATE +PONY +POOCH +POODLE +POOL +POOLE +POOLED +POOLING +POOLS +POOR +POORER +POOREST +POORLY +POORNESS +POP +POPCORN +POPE +POPEK +POPEKS +POPISH +POPLAR +POPLIN +POPPED +POPPIES +POPPING +POPPY +POPS +POPSICLE +POPSICLES +POPULACE +POPULAR +POPULARITY +POPULARIZATION +POPULARIZE +POPULARIZED +POPULARIZES +POPULARIZING +POPULARLY +POPULATE +POPULATED +POPULATES +POPULATING +POPULATION +POPULATIONS +POPULOUS +POPULOUSNESS +PORCELAIN +PORCH +PORCHES +PORCINE +PORCUPINE +PORCUPINES +PORE +PORED +PORES +PORING +PORK +PORKER +PORNOGRAPHER +PORNOGRAPHIC +PORNOGRAPHY +POROUS +PORPOISE +PORRIDGE +PORT +PORTABILITY +PORTABLE +PORTAGE +PORTAL +PORTALS +PORTE +PORTED +PORTEND +PORTENDED +PORTENDING +PORTENDS +PORTENT +PORTENTOUS +PORTER +PORTERHOUSE +PORTERS +PORTFOLIO +PORTFOLIOS +PORTIA +PORTICO +PORTING +PORTION +PORTIONS +PORTLAND +PORTLY +PORTMANTEAU +PORTO +PORTRAIT +PORTRAITS +PORTRAY +PORTRAYAL +PORTRAYED +PORTRAYING +PORTRAYS +PORTS +PORTSMOUTH +PORTUGAL +PORTUGUESE +POSE +POSED +POSEIDON +POSER +POSERS +POSES +POSH +POSING +POSIT +POSITED +POSITING +POSITION +POSITIONAL +POSITIONED +POSITIONING +POSITIONS +POSITIVE +POSITIVELY +POSITIVENESS +POSITIVES +POSITRON +POSITS +POSNER +POSSE +POSSESS +POSSESSED +POSSESSES +POSSESSING +POSSESSION +POSSESSIONAL +POSSESSIONS +POSSESSIVE +POSSESSIVELY +POSSESSIVENESS +POSSESSOR +POSSESSORS +POSSIBILITIES +POSSIBILITY +POSSIBLE +POSSIBLY +POSSUM +POSSUMS +POST +POSTAGE +POSTAL +POSTCARD +POSTCONDITION +POSTDOCTORAL +POSTED +POSTER +POSTERIOR +POSTERIORI +POSTERITY +POSTERS +POSTFIX +POSTGRADUATE +POSTING +POSTLUDE +POSTMAN +POSTMARK +POSTMASTER +POSTMASTERS +POSTMORTEM +POSTOPERATIVE +POSTORDER +POSTPONE +POSTPONED +POSTPONING +POSTPROCESS +POSTPROCESSOR +POSTS +POSTSCRIPT +POSTSCRIPTS +POSTULATE +POSTULATED +POSTULATES +POSTULATING +POSTULATION +POSTULATIONS +POSTURE +POSTURES +POT +POTABLE +POTASH +POTASSIUM +POTATO +POTATOES +POTBELLY +POTEMKIN +POTENT +POTENTATE +POTENTATES +POTENTIAL +POTENTIALITIES +POTENTIALITY +POTENTIALLY +POTENTIALS +POTENTIATING +POTENTIOMETER +POTENTIOMETERS +POTHOLE +POTION +POTLATCH +POTOMAC +POTPOURRI +POTS +POTSDAM +POTTAWATOMIE +POTTED +POTTER +POTTERS +POTTERY +POTTING +POTTS +POUCH +POUCHES +POUGHKEEPSIE +POULTICE +POULTRY +POUNCE +POUNCED +POUNCES +POUNCING +POUND +POUNDED +POUNDER +POUNDERS +POUNDING +POUNDS +POUR +POURED +POURER +POURERS +POURING +POURS +POUSSIN +POUSSINS +POUT +POUTED +POUTING +POUTS +POVERTY +POWDER +POWDERED +POWDERING +POWDERPUFF +POWDERS +POWDERY +POWELL +POWER +POWERED +POWERFUL +POWERFULLY +POWERFULNESS +POWERING +POWERLESS +POWERLESSLY +POWERLESSNESS +POWERS +POX +POYNTING +PRACTICABLE +PRACTICABLY +PRACTICAL +PRACTICALITY +PRACTICALLY +PRACTICE +PRACTICED +PRACTICES +PRACTICING +PRACTITIONER +PRACTITIONERS +PRADESH +PRADO +PRAGMATIC +PRAGMATICALLY +PRAGMATICS +PRAGMATISM +PRAGMATIST +PRAGUE +PRAIRIE +PRAISE +PRAISED +PRAISER +PRAISERS +PRAISES +PRAISEWORTHY +PRAISING +PRAISINGLY +PRANCE +PRANCED +PRANCER +PRANCING +PRANK +PRANKS +PRATE +PRATT +PRATTVILLE +PRAVDA +PRAY +PRAYED +PRAYER +PRAYERS +PRAYING +PREACH +PREACHED +PREACHER +PREACHERS +PREACHES +PREACHING +PREALLOCATE +PREALLOCATED +PREALLOCATING +PREAMBLE +PREAMBLES +PREASSIGN +PREASSIGNED +PREASSIGNING +PREASSIGNS +PRECAMBRIAN +PRECARIOUS +PRECARIOUSLY +PRECARIOUSNESS +PRECAUTION +PRECAUTIONS +PRECEDE +PRECEDED +PRECEDENCE +PRECEDENCES +PRECEDENT +PRECEDENTED +PRECEDENTS +PRECEDES +PRECEDING +PRECEPT +PRECEPTS +PRECESS +PRECESSION +PRECINCT +PRECINCTS +PRECIOUS +PRECIOUSLY +PRECIOUSNESS +PRECIPICE +PRECIPITABLE +PRECIPITATE +PRECIPITATED +PRECIPITATELY +PRECIPITATENESS +PRECIPITATES +PRECIPITATING +PRECIPITATION +PRECIPITOUS +PRECIPITOUSLY +PRECISE +PRECISELY +PRECISENESS +PRECISION +PRECISIONS +PRECLUDE +PRECLUDED +PRECLUDES +PRECLUDING +PRECOCIOUS +PRECOCIOUSLY +PRECOCITY +PRECOMPUTE +PRECOMPUTED +PRECOMPUTING +PRECONCEIVE +PRECONCEIVED +PRECONCEPTION +PRECONCEPTIONS +PRECONDITION +PRECONDITIONED +PRECONDITIONS +PRECURSOR +PRECURSORS +PREDATE +PREDATED +PREDATES +PREDATING +PREDATORY +PREDECESSOR +PREDECESSORS +PREDEFINE +PREDEFINED +PREDEFINES +PREDEFINING +PREDEFINITION +PREDEFINITIONS +PREDETERMINATION +PREDETERMINE +PREDETERMINED +PREDETERMINES +PREDETERMINING +PREDICAMENT +PREDICATE +PREDICATED +PREDICATES +PREDICATING +PREDICATION +PREDICATIONS +PREDICT +PREDICTABILITY +PREDICTABLE +PREDICTABLY +PREDICTED +PREDICTING +PREDICTION +PREDICTIONS +PREDICTIVE +PREDICTOR +PREDICTS +PREDILECTION +PREDILECTIONS +PREDISPOSITION +PREDOMINANT +PREDOMINANTLY +PREDOMINATE +PREDOMINATED +PREDOMINATELY +PREDOMINATES +PREDOMINATING +PREDOMINATION +PREEMINENCE +PREEMINENT +PREEMPT +PREEMPTED +PREEMPTING +PREEMPTION +PREEMPTIVE +PREEMPTOR +PREEMPTS +PREEN +PREEXISTING +PREFAB +PREFABRICATE +PREFACE +PREFACED +PREFACES +PREFACING +PREFER +PREFERABLE +PREFERABLY +PREFERENCE +PREFERENCES +PREFERENTIAL +PREFERENTIALLY +PREFERRED +PREFERRING +PREFERS +PREFIX +PREFIXED +PREFIXES +PREFIXING +PREGNANCY +PREGNANT +PREHISTORIC +PREINITIALIZE +PREINITIALIZED +PREINITIALIZES +PREINITIALIZING +PREJUDGE +PREJUDGED +PREJUDICE +PREJUDICED +PREJUDICES +PREJUDICIAL +PRELATE +PRELIMINARIES +PRELIMINARY +PRELUDE +PRELUDES +PREMATURE +PREMATURELY +PREMATURITY +PREMEDITATED +PREMEDITATION +PREMIER +PREMIERS +PREMISE +PREMISES +PREMIUM +PREMIUMS +PREMONITION +PRENATAL +PRENTICE +PRENTICED +PRENTICING +PREOCCUPATION +PREOCCUPIED +PREOCCUPIES +PREOCCUPY +PREP +PREPARATION +PREPARATIONS +PREPARATIVE +PREPARATIVES +PREPARATORY +PREPARE +PREPARED +PREPARES +PREPARING +PREPEND +PREPENDED +PREPENDING +PREPOSITION +PREPOSITIONAL +PREPOSITIONS +PREPOSTEROUS +PREPOSTEROUSLY +PREPROCESSED +PREPROCESSING +PREPROCESSOR +PREPROCESSORS +PREPRODUCTION +PREPROGRAMMED +PREREQUISITE +PREREQUISITES +PREROGATIVE +PREROGATIVES +PRESBYTERIAN +PRESBYTERIANISM +PRESBYTERIANIZE +PRESBYTERIANIZES +PRESCOTT +PRESCRIBE +PRESCRIBED +PRESCRIBES +PRESCRIPTION +PRESCRIPTIONS +PRESCRIPTIVE +PRESELECT +PRESELECTED +PRESELECTING +PRESELECTS +PRESENCE +PRESENCES +PRESENT +PRESENTATION +PRESENTATIONS +PRESENTED +PRESENTER +PRESENTING +PRESENTLY +PRESENTNESS +PRESENTS +PRESERVATION +PRESERVATIONS +PRESERVE +PRESERVED +PRESERVER +PRESERVERS +PRESERVES +PRESERVING +PRESET +PRESIDE +PRESIDED +PRESIDENCY +PRESIDENT +PRESIDENTIAL +PRESIDENTS +PRESIDES +PRESIDING +PRESLEY +PRESS +PRESSED +PRESSER +PRESSES +PRESSING +PRESSINGS +PRESSURE +PRESSURED +PRESSURES +PRESSURING +PRESSURIZE +PRESSURIZED +PRESTIDIGITATE +PRESTIGE +PRESTIGIOUS +PRESTON +PRESUMABLY +PRESUME +PRESUMED +PRESUMES +PRESUMING +PRESUMPTION +PRESUMPTIONS +PRESUMPTIVE +PRESUMPTUOUS +PRESUMPTUOUSNESS +PRESUPPOSE +PRESUPPOSED +PRESUPPOSES +PRESUPPOSING +PRESUPPOSITION +PRETEND +PRETENDED +PRETENDER +PRETENDERS +PRETENDING +PRETENDS +PRETENSE +PRETENSES +PRETENSION +PRETENSIONS +PRETENTIOUS +PRETENTIOUSLY +PRETENTIOUSNESS +PRETEXT +PRETEXTS +PRETORIA +PRETORIAN +PRETTIER +PRETTIEST +PRETTILY +PRETTINESS +PRETTY +PREVAIL +PREVAILED +PREVAILING +PREVAILINGLY +PREVAILS +PREVALENCE +PREVALENT +PREVALENTLY +PREVENT +PREVENTABLE +PREVENTABLY +PREVENTED +PREVENTING +PREVENTION +PREVENTIVE +PREVENTIVES +PREVENTS +PREVIEW +PREVIEWED +PREVIEWING +PREVIEWS +PREVIOUS +PREVIOUSLY +PREY +PREYED +PREYING +PREYS +PRIAM +PRICE +PRICED +PRICELESS +PRICER +PRICERS +PRICES +PRICING +PRICK +PRICKED +PRICKING +PRICKLY +PRICKS +PRIDE +PRIDED +PRIDES +PRIDING +PRIEST +PRIESTLEY +PRIGGISH +PRIM +PRIMA +PRIMACY +PRIMAL +PRIMARIES +PRIMARILY +PRIMARY +PRIMATE +PRIME +PRIMED +PRIMENESS +PRIMER +PRIMERS +PRIMES +PRIMEVAL +PRIMING +PRIMITIVE +PRIMITIVELY +PRIMITIVENESS +PRIMITIVES +PRIMROSE +PRINCE +PRINCELY +PRINCES +PRINCESS +PRINCESSES +PRINCETON +PRINCIPAL +PRINCIPALITIES +PRINCIPALITY +PRINCIPALLY +PRINCIPALS +PRINCIPIA +PRINCIPLE +PRINCIPLED +PRINCIPLES +PRINT +PRINTABLE +PRINTABLY +PRINTED +PRINTER +PRINTERS +PRINTING +PRINTOUT +PRINTS +PRIOR +PRIORI +PRIORITIES +PRIORITY +PRIORY +PRISCILLA +PRISM +PRISMS +PRISON +PRISONER +PRISONERS +PRISONS +PRISTINE +PRITCHARD +PRIVACIES +PRIVACY +PRIVATE +PRIVATELY +PRIVATES +PRIVATION +PRIVATIONS +PRIVIES +PRIVILEGE +PRIVILEGED +PRIVILEGES +PRIVY +PRIZE +PRIZED +PRIZER +PRIZERS +PRIZES +PRIZEWINNING +PRIZING +PRO +PROBABILISTIC +PROBABILISTICALLY +PROBABILITIES +PROBABILITY +PROBABLE +PROBABLY +PROBATE +PROBATED +PROBATES +PROBATING +PROBATION +PROBATIVE +PROBE +PROBED +PROBES +PROBING +PROBINGS +PROBITY +PROBLEM +PROBLEMATIC +PROBLEMATICAL +PROBLEMATICALLY +PROBLEMS +PROCAINE +PROCEDURAL +PROCEDURALLY +PROCEDURE +PROCEDURES +PROCEED +PROCEEDED +PROCEEDING +PROCEEDINGS +PROCEEDS +PROCESS +PROCESSED +PROCESSES +PROCESSING +PROCESSION +PROCESSOR +PROCESSORS +PROCLAIM +PROCLAIMED +PROCLAIMER +PROCLAIMERS +PROCLAIMING +PROCLAIMS +PROCLAMATION +PROCLAMATIONS +PROCLIVITIES +PROCLIVITY +PROCOTOLS +PROCRASTINATE +PROCRASTINATED +PROCRASTINATES +PROCRASTINATING +PROCRASTINATION +PROCREATE +PROCRUSTEAN +PROCRUSTEANIZE +PROCRUSTEANIZES +PROCRUSTES +PROCTER +PROCURE +PROCURED +PROCUREMENT +PROCUREMENTS +PROCURER +PROCURERS +PROCURES +PROCURING +PROCYON +PROD +PRODIGAL +PRODIGALLY +PRODIGIOUS +PRODIGY +PRODUCE +PRODUCED +PRODUCER +PRODUCERS +PRODUCES +PRODUCIBLE +PRODUCING +PRODUCT +PRODUCTION +PRODUCTIONS +PRODUCTIVE +PRODUCTIVELY +PRODUCTIVITY +PRODUCTS +PROFANE +PROFANELY +PROFESS +PROFESSED +PROFESSES +PROFESSING +PROFESSION +PROFESSIONAL +PROFESSIONALISM +PROFESSIONALLY +PROFESSIONALS +PROFESSIONS +PROFESSOR +PROFESSORIAL +PROFESSORS +PROFFER +PROFFERED +PROFFERS +PROFICIENCY +PROFICIENT +PROFICIENTLY +PROFILE +PROFILED +PROFILES +PROFILING +PROFIT +PROFITABILITY +PROFITABLE +PROFITABLY +PROFITED +PROFITEER +PROFITEERS +PROFITING +PROFITS +PROFITTED +PROFLIGATE +PROFOUND +PROFOUNDEST +PROFOUNDLY +PROFUNDITY +PROFUSE +PROFUSION +PROGENITOR +PROGENY +PROGNOSIS +PROGNOSTICATE +PROGRAM +PROGRAMMABILITY +PROGRAMMABLE +PROGRAMMED +PROGRAMMER +PROGRAMMERS +PROGRAMMING +PROGRAMS +PROGRESS +PROGRESSED +PROGRESSES +PROGRESSING +PROGRESSION +PROGRESSIONS +PROGRESSIVE +PROGRESSIVELY +PROHIBIT +PROHIBITED +PROHIBITING +PROHIBITION +PROHIBITIONS +PROHIBITIVE +PROHIBITIVELY +PROHIBITORY +PROHIBITS +PROJECT +PROJECTED +PROJECTILE +PROJECTING +PROJECTION +PROJECTIONS +PROJECTIVE +PROJECTIVELY +PROJECTOR +PROJECTORS +PROJECTS +PROKOFIEFF +PROKOFIEV +PROLATE +PROLEGOMENA +PROLETARIAT +PROLIFERATE +PROLIFERATED +PROLIFERATES +PROLIFERATING +PROLIFERATION +PROLIFIC +PROLIX +PROLOG +PROLOGUE +PROLONG +PROLONGATE +PROLONGED +PROLONGING +PROLONGS +PROMENADE +PROMENADES +PROMETHEAN +PROMETHEUS +PROMINENCE +PROMINENT +PROMINENTLY +PROMISCUOUS +PROMISE +PROMISED +PROMISES +PROMISING +PROMONTORY +PROMOTE +PROMOTED +PROMOTER +PROMOTERS +PROMOTES +PROMOTING +PROMOTION +PROMOTIONAL +PROMOTIONS +PROMPT +PROMPTED +PROMPTER +PROMPTEST +PROMPTING +PROMPTINGS +PROMPTLY +PROMPTNESS +PROMPTS +PROMULGATE +PROMULGATED +PROMULGATES +PROMULGATING +PROMULGATION +PRONE +PRONENESS +PRONG +PRONGED +PRONGS +PRONOUN +PRONOUNCE +PRONOUNCEABLE +PRONOUNCED +PRONOUNCEMENT +PRONOUNCEMENTS +PRONOUNCES +PRONOUNCING +PRONOUNS +PRONUNCIATION +PRONUNCIATIONS +PROOF +PROOFREAD +PROOFREADER +PROOFS +PROP +PROPAGANDA +PROPAGANDIST +PROPAGATE +PROPAGATED +PROPAGATES +PROPAGATING +PROPAGATION +PROPAGATIONS +PROPANE +PROPEL +PROPELLANT +PROPELLED +PROPELLER +PROPELLERS +PROPELLING +PROPELS +PROPENSITY +PROPER +PROPERLY +PROPERNESS +PROPERTIED +PROPERTIES +PROPERTY +PROPHECIES +PROPHECY +PROPHESIED +PROPHESIER +PROPHESIES +PROPHESY +PROPHET +PROPHETIC +PROPHETS +PROPITIOUS +PROPONENT +PROPONENTS +PROPORTION +PROPORTIONAL +PROPORTIONALLY +PROPORTIONATELY +PROPORTIONED +PROPORTIONING +PROPORTIONMENT +PROPORTIONS +PROPOS +PROPOSAL +PROPOSALS +PROPOSE +PROPOSED +PROPOSER +PROPOSES +PROPOSING +PROPOSITION +PROPOSITIONAL +PROPOSITIONALLY +PROPOSITIONED +PROPOSITIONING +PROPOSITIONS +PROPOUND +PROPOUNDED +PROPOUNDING +PROPOUNDS +PROPRIETARY +PROPRIETOR +PROPRIETORS +PROPRIETY +PROPS +PROPULSION +PROPULSIONS +PRORATE +PRORATED +PRORATES +PROS +PROSCENIUM +PROSCRIBE +PROSCRIPTION +PROSE +PROSECUTE +PROSECUTED +PROSECUTES +PROSECUTING +PROSECUTION +PROSECUTIONS +PROSECUTOR +PROSELYTIZE +PROSELYTIZED +PROSELYTIZES +PROSELYTIZING +PROSERPINE +PROSODIC +PROSODICS +PROSPECT +PROSPECTED +PROSPECTING +PROSPECTION +PROSPECTIONS +PROSPECTIVE +PROSPECTIVELY +PROSPECTIVES +PROSPECTOR +PROSPECTORS +PROSPECTS +PROSPECTUS +PROSPER +PROSPERED +PROSPERING +PROSPERITY +PROSPEROUS +PROSPERS +PROSTATE +PROSTHETIC +PROSTITUTE +PROSTITUTION +PROSTRATE +PROSTRATION +PROTAGONIST +PROTEAN +PROTECT +PROTECTED +PROTECTING +PROTECTION +PROTECTIONS +PROTECTIVE +PROTECTIVELY +PROTECTIVENESS +PROTECTOR +PROTECTORATE +PROTECTORS +PROTECTS +PROTEGE +PROTEGES +PROTEIN +PROTEINS +PROTEST +PROTESTANT +PROTESTANTISM +PROTESTANTIZE +PROTESTANTIZES +PROTESTATION +PROTESTATIONS +PROTESTED +PROTESTING +PROTESTINGLY +PROTESTOR +PROTESTS +PROTISTA +PROTOCOL +PROTOCOLS +PROTON +PROTONS +PROTOPHYTA +PROTOPLASM +PROTOTYPE +PROTOTYPED +PROTOTYPES +PROTOTYPICAL +PROTOTYPICALLY +PROTOTYPING +PROTOZOA +PROTOZOAN +PROTRACT +PROTRUDE +PROTRUDED +PROTRUDES +PROTRUDING +PROTRUSION +PROTRUSIONS +PROTUBERANT +PROUD +PROUDER +PROUDEST +PROUDLY +PROUST +PROVABILITY +PROVABLE +PROVABLY +PROVE +PROVED +PROVEN +PROVENANCE +PROVENCE +PROVER +PROVERB +PROVERBIAL +PROVERBS +PROVERS +PROVES +PROVIDE +PROVIDED +PROVIDENCE +PROVIDENT +PROVIDER +PROVIDERS +PROVIDES +PROVIDING +PROVINCE +PROVINCES +PROVINCIAL +PROVING +PROVISION +PROVISIONAL +PROVISIONALLY +PROVISIONED +PROVISIONING +PROVISIONS +PROVISO +PROVOCATION +PROVOKE +PROVOKED +PROVOKES +PROVOST +PROW +PROWESS +PROWL +PROWLED +PROWLER +PROWLERS +PROWLING +PROWS +PROXIMAL +PROXIMATE +PROXIMITY +PROXMIRE +PROXY +PRUDENCE +PRUDENT +PRUDENTIAL +PRUDENTLY +PRUNE +PRUNED +PRUNER +PRUNERS +PRUNES +PRUNING +PRURIENT +PRUSSIA +PRUSSIAN +PRUSSIANIZATION +PRUSSIANIZATIONS +PRUSSIANIZE +PRUSSIANIZER +PRUSSIANIZERS +PRUSSIANIZES +PRY +PRYING +PSALM +PSALMS +PSEUDO +PSEUDOFILES +PSEUDOINSTRUCTION +PSEUDOINSTRUCTIONS +PSEUDONYM +PSEUDOPARALLELISM +PSILOCYBIN +PSYCH +PSYCHE +PSYCHEDELIC +PSYCHES +PSYCHIATRIC +PSYCHIATRIST +PSYCHIATRISTS +PSYCHIATRY +PSYCHIC +PSYCHO +PSYCHOANALYSIS +PSYCHOANALYST +PSYCHOANALYTIC +PSYCHOBIOLOGY +PSYCHOLOGICAL +PSYCHOLOGICALLY +PSYCHOLOGIST +PSYCHOLOGISTS +PSYCHOLOGY +PSYCHOPATH +PSYCHOPATHIC +PSYCHOPHYSIC +PSYCHOSES +PSYCHOSIS +PSYCHOSOCIAL +PSYCHOSOMATIC +PSYCHOTHERAPEUTIC +PSYCHOTHERAPIST +PSYCHOTHERAPY +PSYCHOTIC +PTOLEMAIC +PTOLEMAISTS +PTOLEMY +PUB +PUBERTY +PUBLIC +PUBLICATION +PUBLICATIONS +PUBLICITY +PUBLICIZE +PUBLICIZED +PUBLICIZES +PUBLICIZING +PUBLICLY +PUBLISH +PUBLISHED +PUBLISHER +PUBLISHERS +PUBLISHES +PUBLISHING +PUBS +PUCCINI +PUCKER +PUCKERED +PUCKERING +PUCKERS +PUDDING +PUDDINGS +PUDDLE +PUDDLES +PUDDLING +PUERTO +PUFF +PUFFED +PUFFIN +PUFFING +PUFFS +PUGH +PUKE +PULASKI +PULITZER +PULL +PULLED +PULLER +PULLEY +PULLEYS +PULLING +PULLINGS +PULLMAN +PULLMANIZE +PULLMANIZES +PULLMANS +PULLOVER +PULLS +PULMONARY +PULP +PULPING +PULPIT +PULPITS +PULSAR +PULSATE +PULSATION +PULSATIONS +PULSE +PULSED +PULSES +PULSING +PUMA +PUMICE +PUMMEL +PUMP +PUMPED +PUMPING +PUMPKIN +PUMPKINS +PUMPS +PUN +PUNCH +PUNCHED +PUNCHER +PUNCHES +PUNCHING +PUNCTUAL +PUNCTUALLY +PUNCTUATION +PUNCTURE +PUNCTURED +PUNCTURES +PUNCTURING +PUNDIT +PUNGENT +PUNIC +PUNISH +PUNISHABLE +PUNISHED +PUNISHES +PUNISHING +PUNISHMENT +PUNISHMENTS +PUNITIVE +PUNJAB +PUNJABI +PUNS +PUNT +PUNTED +PUNTING +PUNTS +PUNY +PUP +PUPA +PUPIL +PUPILS +PUPPET +PUPPETEER +PUPPETS +PUPPIES +PUPPY +PUPS +PURCELL +PURCHASE +PURCHASED +PURCHASER +PURCHASERS +PURCHASES +PURCHASING +PURDUE +PURE +PURELY +PURER +PUREST +PURGATORY +PURGE +PURGED +PURGES +PURGING +PURIFICATION +PURIFICATIONS +PURIFIED +PURIFIER +PURIFIERS +PURIFIES +PURIFY +PURIFYING +PURINA +PURIST +PURITAN +PURITANIC +PURITANIZE +PURITANIZER +PURITANIZERS +PURITANIZES +PURITY +PURPLE +PURPLER +PURPLEST +PURPORT +PURPORTED +PURPORTEDLY +PURPORTER +PURPORTERS +PURPORTING +PURPORTS +PURPOSE +PURPOSED +PURPOSEFUL +PURPOSEFULLY +PURPOSELY +PURPOSES +PURPOSIVE +PURR +PURRED +PURRING +PURRS +PURSE +PURSED +PURSER +PURSES +PURSUANT +PURSUE +PURSUED +PURSUER +PURSUERS +PURSUES +PURSUING +PURSUIT +PURSUITS +PURVEYOR +PURVIEW +PUS +PUSAN +PUSEY +PUSH +PUSHBUTTON +PUSHDOWN +PUSHED +PUSHER +PUSHERS +PUSHES +PUSHING +PUSS +PUSSY +PUSSYCAT +PUT +PUTNAM +PUTS +PUTT +PUTTER +PUTTERING +PUTTERS +PUTTING +PUTTY +PUZZLE +PUZZLED +PUZZLEMENT +PUZZLER +PUZZLERS +PUZZLES +PUZZLING +PUZZLINGS +PYGMALION +PYGMIES +PYGMY +PYLE +PYONGYANG +PYOTR +PYRAMID +PYRAMIDS +PYRE +PYREX +PYRRHIC +PYTHAGORAS +PYTHAGOREAN +PYTHAGOREANIZE +PYTHAGOREANIZES +PYTHAGOREANS +PYTHON +QATAR +QUA +QUACK +QUACKED +QUACKERY +QUACKS +QUAD +QUADRANGLE +QUADRANGULAR +QUADRANT +QUADRANTS +QUADRATIC +QUADRATICAL +QUADRATICALLY +QUADRATICS +QUADRATURE +QUADRATURES +QUADRENNIAL +QUADRILATERAL +QUADRILLION +QUADRUPLE +QUADRUPLED +QUADRUPLES +QUADRUPLING +QUADRUPOLE +QUAFF +QUAGMIRE +QUAGMIRES +QUAHOG +QUAIL +QUAILS +QUAINT +QUAINTLY +QUAINTNESS +QUAKE +QUAKED +QUAKER +QUAKERESS +QUAKERIZATION +QUAKERIZATIONS +QUAKERIZE +QUAKERIZES +QUAKERS +QUAKES +QUAKING +QUALIFICATION +QUALIFICATIONS +QUALIFIED +QUALIFIER +QUALIFIERS +QUALIFIES +QUALIFY +QUALIFYING +QUALITATIVE +QUALITATIVELY +QUALITIES +QUALITY +QUALM +QUANDARIES +QUANDARY +QUANTA +QUANTICO +QUANTIFIABLE +QUANTIFICATION +QUANTIFICATIONS +QUANTIFIED +QUANTIFIER +QUANTIFIERS +QUANTIFIES +QUANTIFY +QUANTIFYING +QUANTILE +QUANTITATIVE +QUANTITATIVELY +QUANTITIES +QUANTITY +QUANTIZATION +QUANTIZE +QUANTIZED +QUANTIZES +QUANTIZING +QUANTUM +QUARANTINE +QUARANTINES +QUARANTINING +QUARK +QUARREL +QUARRELED +QUARRELING +QUARRELS +QUARRELSOME +QUARRIES +QUARRY +QUART +QUARTER +QUARTERBACK +QUARTERED +QUARTERING +QUARTERLY +QUARTERMASTER +QUARTERS +QUARTET +QUARTETS +QUARTILE +QUARTS +QUARTZ +QUARTZITE +QUASAR +QUASH +QUASHED +QUASHES +QUASHING +QUASI +QUASIMODO +QUATERNARY +QUAVER +QUAVERED +QUAVERING +QUAVERS +QUAY +QUEASY +QUEBEC +QUEEN +QUEENLY +QUEENS +QUEENSLAND +QUEER +QUEERER +QUEEREST +QUEERLY +QUEERNESS +QUELL +QUELLING +QUENCH +QUENCHED +QUENCHES +QUENCHING +QUERIED +QUERIES +QUERY +QUERYING +QUEST +QUESTED +QUESTER +QUESTERS +QUESTING +QUESTION +QUESTIONABLE +QUESTIONABLY +QUESTIONED +QUESTIONER +QUESTIONERS +QUESTIONING +QUESTIONINGLY +QUESTIONINGS +QUESTIONNAIRE +QUESTIONNAIRES +QUESTIONS +QUESTS +QUEUE +QUEUED +QUEUEING +QUEUER +QUEUERS +QUEUES +QUEUING +QUEZON +QUIBBLE +QUICHUA +QUICK +QUICKEN +QUICKENED +QUICKENING +QUICKENS +QUICKER +QUICKEST +QUICKIE +QUICKLIME +QUICKLY +QUICKNESS +QUICKSAND +QUICKSILVER +QUIESCENT +QUIET +QUIETED +QUIETER +QUIETEST +QUIETING +QUIETLY +QUIETNESS +QUIETS +QUIETUDE +QUILL +QUILT +QUILTED +QUILTING +QUILTS +QUINCE +QUININE +QUINN +QUINT +QUINTET +QUINTILLION +QUIP +QUIRINAL +QUIRK +QUIRKY +QUIT +QUITE +QUITO +QUITS +QUITTER +QUITTERS +QUITTING +QUIVER +QUIVERED +QUIVERING +QUIVERS +QUIXOTE +QUIXOTIC +QUIXOTISM +QUIZ +QUIZZED +QUIZZES +QUIZZICAL +QUIZZING +QUO +QUONSET +QUORUM +QUOTA +QUOTAS +QUOTATION +QUOTATIONS +QUOTE +QUOTED +QUOTES +QUOTH +QUOTIENT +QUOTIENTS +QUOTING +RABAT +RABBI +RABBIT +RABBITS +RABBLE +RABID +RABIES +RABIN +RACCOON +RACCOONS +RACE +RACED +RACER +RACERS +RACES +RACETRACK +RACHEL +RACHMANINOFF +RACIAL +RACIALLY +RACINE +RACING +RACK +RACKED +RACKET +RACKETEER +RACKETEERING +RACKETEERS +RACKETS +RACKING +RACKS +RADAR +RADARS +RADCLIFFE +RADIAL +RADIALLY +RADIAN +RADIANCE +RADIANT +RADIANTLY +RADIATE +RADIATED +RADIATES +RADIATING +RADIATION +RADIATIONS +RADIATOR +RADIATORS +RADICAL +RADICALLY +RADICALS +RADICES +RADII +RADIO +RADIOACTIVE +RADIOASTRONOMY +RADIOED +RADIOGRAPHY +RADIOING +RADIOLOGY +RADIOS +RADISH +RADISHES +RADIUM +RADIUS +RADIX +RADON +RAE +RAFAEL +RAFFERTY +RAFT +RAFTER +RAFTERS +RAFTS +RAG +RAGE +RAGED +RAGES +RAGGED +RAGGEDLY +RAGGEDNESS +RAGING +RAGS +RAGUSAN +RAGWEED +RAID +RAIDED +RAIDER +RAIDERS +RAIDING +RAIDS +RAIL +RAILED +RAILER +RAILERS +RAILING +RAILROAD +RAILROADED +RAILROADER +RAILROADERS +RAILROADING +RAILROADS +RAILS +RAILWAY +RAILWAYS +RAIMENT +RAIN +RAINBOW +RAINCOAT +RAINCOATS +RAINDROP +RAINDROPS +RAINED +RAINFALL +RAINIER +RAINIEST +RAINING +RAINS +RAINSTORM +RAINY +RAISE +RAISED +RAISER +RAISERS +RAISES +RAISIN +RAISING +RAKE +RAKED +RAKES +RAKING +RALEIGH +RALLIED +RALLIES +RALLY +RALLYING +RALPH +RALSTON +RAM +RAMADA +RAMAN +RAMBLE +RAMBLER +RAMBLES +RAMBLING +RAMBLINGS +RAMIFICATION +RAMIFICATIONS +RAMIREZ +RAMO +RAMONA +RAMP +RAMPAGE +RAMPANT +RAMPART +RAMPS +RAMROD +RAMS +RAMSEY +RAN +RANCH +RANCHED +RANCHER +RANCHERS +RANCHES +RANCHING +RANCID +RAND +RANDALL +RANDOLPH +RANDOM +RANDOMIZATION +RANDOMIZE +RANDOMIZED +RANDOMIZES +RANDOMLY +RANDOMNESS +RANDY +RANG +RANGE +RANGED +RANGELAND +RANGER +RANGERS +RANGES +RANGING +RANGOON +RANGY +RANIER +RANK +RANKED +RANKER +RANKERS +RANKEST +RANKIN +RANKINE +RANKING +RANKINGS +RANKLE +RANKLY +RANKNESS +RANKS +RANSACK +RANSACKED +RANSACKING +RANSACKS +RANSOM +RANSOMER +RANSOMING +RANSOMS +RANT +RANTED +RANTER +RANTERS +RANTING +RANTS +RAOUL +RAP +RAPACIOUS +RAPE +RAPED +RAPER +RAPES +RAPHAEL +RAPID +RAPIDITY +RAPIDLY +RAPIDS +RAPIER +RAPING +RAPPORT +RAPPROCHEMENT +RAPS +RAPT +RAPTLY +RAPTURE +RAPTURES +RAPTUROUS +RAPUNZEL +RARE +RARELY +RARENESS +RARER +RAREST +RARITAN +RARITY +RASCAL +RASCALLY +RASCALS +RASH +RASHER +RASHLY +RASHNESS +RASMUSSEN +RASP +RASPBERRY +RASPED +RASPING +RASPS +RASTER +RASTUS +RAT +RATE +RATED +RATER +RATERS +RATES +RATFOR +RATHER +RATIFICATION +RATIFIED +RATIFIES +RATIFY +RATIFYING +RATING +RATINGS +RATIO +RATION +RATIONAL +RATIONALE +RATIONALES +RATIONALITIES +RATIONALITY +RATIONALIZATION +RATIONALIZATIONS +RATIONALIZE +RATIONALIZED +RATIONALIZES +RATIONALIZING +RATIONALLY +RATIONALS +RATIONING +RATIONS +RATIOS +RATS +RATTLE +RATTLED +RATTLER +RATTLERS +RATTLES +RATTLESNAKE +RATTLESNAKES +RATTLING +RAUCOUS +RAUL +RAVAGE +RAVAGED +RAVAGER +RAVAGERS +RAVAGES +RAVAGING +RAVE +RAVED +RAVEN +RAVENING +RAVENOUS +RAVENOUSLY +RAVENS +RAVES +RAVINE +RAVINES +RAVING +RAVINGS +RAW +RAWER +RAWEST +RAWLINGS +RAWLINS +RAWLINSON +RAWLY +RAWNESS +RAWSON +RAY +RAYBURN +RAYLEIGH +RAYMOND +RAYMONDVILLE +RAYS +RAYTHEON +RAZE +RAZOR +RAZORS +REABBREVIATE +REABBREVIATED +REABBREVIATES +REABBREVIATING +REACH +REACHABILITY +REACHABLE +REACHABLY +REACHED +REACHER +REACHES +REACHING +REACQUIRED +REACT +REACTED +REACTING +REACTION +REACTIONARIES +REACTIONARY +REACTIONS +REACTIVATE +REACTIVATED +REACTIVATES +REACTIVATING +REACTIVATION +REACTIVE +REACTIVELY +REACTIVITY +REACTOR +REACTORS +REACTS +READ +READABILITY +READABLE +READER +READERS +READIED +READIER +READIES +READIEST +READILY +READINESS +READING +READINGS +READJUSTED +READOUT +READOUTS +READS +READY +READYING +REAGAN +REAL +REALEST +REALIGN +REALIGNED +REALIGNING +REALIGNS +REALISM +REALIST +REALISTIC +REALISTICALLY +REALISTS +REALITIES +REALITY +REALIZABLE +REALIZABLY +REALIZATION +REALIZATIONS +REALIZE +REALIZED +REALIZES +REALIZING +REALLOCATE +REALLY +REALM +REALMS +REALNESS +REALS +REALTOR +REAM +REANALYZE +REANALYZES +REANALYZING +REAP +REAPED +REAPER +REAPING +REAPPEAR +REAPPEARED +REAPPEARING +REAPPEARS +REAPPRAISAL +REAPPRAISALS +REAPS +REAR +REARED +REARING +REARRANGE +REARRANGEABLE +REARRANGED +REARRANGEMENT +REARRANGEMENTS +REARRANGES +REARRANGING +REARREST +REARRESTED +REARS +REASON +REASONABLE +REASONABLENESS +REASONABLY +REASONED +REASONER +REASONING +REASONINGS +REASONS +REASSEMBLE +REASSEMBLED +REASSEMBLES +REASSEMBLING +REASSEMBLY +REASSESSMENT +REASSESSMENTS +REASSIGN +REASSIGNED +REASSIGNING +REASSIGNMENT +REASSIGNMENTS +REASSIGNS +REASSURE +REASSURED +REASSURES +REASSURING +REAWAKEN +REAWAKENED +REAWAKENING +REAWAKENS +REBATE +REBATES +REBECCA +REBEL +REBELLED +REBELLING +REBELLION +REBELLIONS +REBELLIOUS +REBELLIOUSLY +REBELLIOUSNESS +REBELS +REBIND +REBINDING +REBINDS +REBOOT +REBOOTED +REBOOTING +REBOOTS +REBOUND +REBOUNDED +REBOUNDING +REBOUNDS +REBROADCAST +REBROADCASTING +REBROADCASTS +REBUFF +REBUFFED +REBUILD +REBUILDING +REBUILDS +REBUILT +REBUKE +REBUKED +REBUKES +REBUKING +REBUTTAL +REBUTTED +REBUTTING +RECALCITRANT +RECALCULATE +RECALCULATED +RECALCULATES +RECALCULATING +RECALCULATION +RECALCULATIONS +RECALIBRATE +RECALIBRATED +RECALIBRATES +RECALIBRATING +RECALL +RECALLED +RECALLING +RECALLS +RECANT +RECAPITULATE +RECAPITULATED +RECAPITULATES +RECAPITULATION +RECAPTURE +RECAPTURED +RECAPTURES +RECAPTURING +RECAST +RECASTING +RECASTS +RECEDE +RECEDED +RECEDES +RECEDING +RECEIPT +RECEIPTS +RECEIVABLE +RECEIVE +RECEIVED +RECEIVER +RECEIVERS +RECEIVES +RECEIVING +RECENT +RECENTLY +RECENTNESS +RECEPTACLE +RECEPTACLES +RECEPTION +RECEPTIONIST +RECEPTIONS +RECEPTIVE +RECEPTIVELY +RECEPTIVENESS +RECEPTIVITY +RECEPTOR +RECESS +RECESSED +RECESSES +RECESSION +RECESSIVE +RECIFE +RECIPE +RECIPES +RECIPIENT +RECIPIENTS +RECIPROCAL +RECIPROCALLY +RECIPROCATE +RECIPROCATED +RECIPROCATES +RECIPROCATING +RECIPROCATION +RECIPROCITY +RECIRCULATE +RECIRCULATED +RECIRCULATES +RECIRCULATING +RECITAL +RECITALS +RECITATION +RECITATIONS +RECITE +RECITED +RECITER +RECITES +RECITING +RECKLESS +RECKLESSLY +RECKLESSNESS +RECKON +RECKONED +RECKONER +RECKONING +RECKONINGS +RECKONS +RECLAIM +RECLAIMABLE +RECLAIMED +RECLAIMER +RECLAIMERS +RECLAIMING +RECLAIMS +RECLAMATION +RECLAMATIONS +RECLASSIFICATION +RECLASSIFIED +RECLASSIFIES +RECLASSIFY +RECLASSIFYING +RECLINE +RECLINING +RECODE +RECODED +RECODES +RECODING +RECOGNITION +RECOGNITIONS +RECOGNIZABILITY +RECOGNIZABLE +RECOGNIZABLY +RECOGNIZE +RECOGNIZED +RECOGNIZER +RECOGNIZERS +RECOGNIZES +RECOGNIZING +RECOIL +RECOILED +RECOILING +RECOILS +RECOLLECT +RECOLLECTED +RECOLLECTING +RECOLLECTION +RECOLLECTIONS +RECOMBINATION +RECOMBINE +RECOMBINED +RECOMBINES +RECOMBINING +RECOMMEND +RECOMMENDATION +RECOMMENDATIONS +RECOMMENDED +RECOMMENDER +RECOMMENDING +RECOMMENDS +RECOMPENSE +RECOMPILE +RECOMPILED +RECOMPILES +RECOMPILING +RECOMPUTE +RECOMPUTED +RECOMPUTES +RECOMPUTING +RECONCILE +RECONCILED +RECONCILER +RECONCILES +RECONCILIATION +RECONCILING +RECONFIGURABLE +RECONFIGURATION +RECONFIGURATIONS +RECONFIGURE +RECONFIGURED +RECONFIGURER +RECONFIGURES +RECONFIGURING +RECONNECT +RECONNECTED +RECONNECTING +RECONNECTION +RECONNECTS +RECONSIDER +RECONSIDERATION +RECONSIDERED +RECONSIDERING +RECONSIDERS +RECONSTITUTED +RECONSTRUCT +RECONSTRUCTED +RECONSTRUCTING +RECONSTRUCTION +RECONSTRUCTS +RECONVERTED +RECONVERTS +RECORD +RECORDED +RECORDER +RECORDERS +RECORDING +RECORDINGS +RECORDS +RECOUNT +RECOUNTED +RECOUNTING +RECOUNTS +RECOURSE +RECOVER +RECOVERABLE +RECOVERED +RECOVERIES +RECOVERING +RECOVERS +RECOVERY +RECREATE +RECREATED +RECREATES +RECREATING +RECREATION +RECREATIONAL +RECREATIONS +RECREATIVE +RECRUIT +RECRUITED +RECRUITER +RECRUITING +RECRUITS +RECTA +RECTANGLE +RECTANGLES +RECTANGULAR +RECTIFY +RECTOR +RECTORS +RECTUM +RECTUMS +RECUPERATE +RECUR +RECURRENCE +RECURRENCES +RECURRENT +RECURRENTLY +RECURRING +RECURS +RECURSE +RECURSED +RECURSES +RECURSING +RECURSION +RECURSIONS +RECURSIVE +RECURSIVELY +RECYCLABLE +RECYCLE +RECYCLED +RECYCLES +RECYCLING +RED +REDBREAST +REDCOAT +REDDEN +REDDENED +REDDER +REDDEST +REDDISH +REDDISHNESS +REDECLARE +REDECLARED +REDECLARES +REDECLARING +REDEEM +REDEEMED +REDEEMER +REDEEMERS +REDEEMING +REDEEMS +REDEFINE +REDEFINED +REDEFINES +REDEFINING +REDEFINITION +REDEFINITIONS +REDEMPTION +REDESIGN +REDESIGNED +REDESIGNING +REDESIGNS +REDEVELOPMENT +REDFORD +REDHEAD +REDHOOK +REDIRECT +REDIRECTED +REDIRECTING +REDIRECTION +REDIRECTIONS +REDISPLAY +REDISPLAYED +REDISPLAYING +REDISPLAYS +REDISTRIBUTE +REDISTRIBUTED +REDISTRIBUTES +REDISTRIBUTING +REDLY +REDMOND +REDNECK +REDNESS +REDO +REDONE +REDOUBLE +REDOUBLED +REDRAW +REDRAWN +REDRESS +REDRESSED +REDRESSES +REDRESSING +REDS +REDSTONE +REDUCE +REDUCED +REDUCER +REDUCERS +REDUCES +REDUCIBILITY +REDUCIBLE +REDUCIBLY +REDUCING +REDUCTION +REDUCTIONS +REDUNDANCIES +REDUNDANCY +REDUNDANT +REDUNDANTLY +REDWOOD +REED +REEDS +REEDUCATION +REEDVILLE +REEF +REEFER +REEFS +REEL +REELECT +REELECTED +REELECTING +REELECTS +REELED +REELER +REELING +REELS +REEMPHASIZE +REEMPHASIZED +REEMPHASIZES +REEMPHASIZING +REENABLED +REENFORCEMENT +REENTER +REENTERED +REENTERING +REENTERS +REENTRANT +REESE +REESTABLISH +REESTABLISHED +REESTABLISHES +REESTABLISHING +REEVALUATE +REEVALUATED +REEVALUATES +REEVALUATING +REEVALUATION +REEVES +REEXAMINE +REEXAMINED +REEXAMINES +REEXAMINING +REEXECUTED +REFER +REFEREE +REFEREED +REFEREEING +REFEREES +REFERENCE +REFERENCED +REFERENCER +REFERENCES +REFERENCING +REFERENDA +REFERENDUM +REFERENDUMS +REFERENT +REFERENTIAL +REFERENTIALITY +REFERENTIALLY +REFERENTS +REFERRAL +REFERRALS +REFERRED +REFERRING +REFERS +REFILL +REFILLABLE +REFILLED +REFILLING +REFILLS +REFINE +REFINED +REFINEMENT +REFINEMENTS +REFINER +REFINERY +REFINES +REFINING +REFLECT +REFLECTED +REFLECTING +REFLECTION +REFLECTIONS +REFLECTIVE +REFLECTIVELY +REFLECTIVITY +REFLECTOR +REFLECTORS +REFLECTS +REFLEX +REFLEXES +REFLEXIVE +REFLEXIVELY +REFLEXIVENESS +REFLEXIVITY +REFORESTATION +REFORM +REFORMABLE +REFORMAT +REFORMATION +REFORMATORY +REFORMATS +REFORMATTED +REFORMATTING +REFORMED +REFORMER +REFORMERS +REFORMING +REFORMS +REFORMULATE +REFORMULATED +REFORMULATES +REFORMULATING +REFORMULATION +REFRACT +REFRACTED +REFRACTION +REFRACTORY +REFRAGMENT +REFRAIN +REFRAINED +REFRAINING +REFRAINS +REFRESH +REFRESHED +REFRESHER +REFRESHERS +REFRESHES +REFRESHING +REFRESHINGLY +REFRESHMENT +REFRESHMENTS +REFRIGERATE +REFRIGERATOR +REFRIGERATORS +REFUEL +REFUELED +REFUELING +REFUELS +REFUGE +REFUGEE +REFUGEES +REFUSAL +REFUSE +REFUSED +REFUSES +REFUSING +REFUTABLE +REFUTATION +REFUTE +REFUTED +REFUTER +REFUTES +REFUTING +REGAIN +REGAINED +REGAINING +REGAINS +REGAL +REGALED +REGALLY +REGARD +REGARDED +REGARDING +REGARDLESS +REGARDS +REGATTA +REGENERATE +REGENERATED +REGENERATES +REGENERATING +REGENERATION +REGENERATIVE +REGENERATOR +REGENERATORS +REGENT +REGENTS +REGIME +REGIMEN +REGIMENT +REGIMENTATION +REGIMENTED +REGIMENTS +REGIMES +REGINA +REGINALD +REGION +REGIONAL +REGIONALLY +REGIONS +REGIS +REGISTER +REGISTERED +REGISTERING +REGISTERS +REGISTRAR +REGISTRATION +REGISTRATIONS +REGISTRY +REGRESS +REGRESSED +REGRESSES +REGRESSING +REGRESSION +REGRESSIONS +REGRESSIVE +REGRET +REGRETFUL +REGRETFULLY +REGRETS +REGRETTABLE +REGRETTABLY +REGRETTED +REGRETTING +REGROUP +REGROUPED +REGROUPING +REGULAR +REGULARITIES +REGULARITY +REGULARLY +REGULARS +REGULATE +REGULATED +REGULATES +REGULATING +REGULATION +REGULATIONS +REGULATIVE +REGULATOR +REGULATORS +REGULATORY +REGULUS +REHABILITATE +REHEARSAL +REHEARSALS +REHEARSE +REHEARSED +REHEARSER +REHEARSES +REHEARSING +REICH +REICHENBERG +REICHSTAG +REID +REIGN +REIGNED +REIGNING +REIGNS +REILLY +REIMBURSABLE +REIMBURSE +REIMBURSED +REIMBURSEMENT +REIMBURSEMENTS +REIN +REINCARNATE +REINCARNATED +REINCARNATION +REINDEER +REINED +REINFORCE +REINFORCED +REINFORCEMENT +REINFORCEMENTS +REINFORCER +REINFORCES +REINFORCING +REINHARD +REINHARDT +REINHOLD +REINITIALIZE +REINITIALIZED +REINITIALIZING +REINS +REINSERT +REINSERTED +REINSERTING +REINSERTS +REINSTATE +REINSTATED +REINSTATEMENT +REINSTATES +REINSTATING +REINTERPRET +REINTERPRETED +REINTERPRETING +REINTERPRETS +REINTRODUCE +REINTRODUCED +REINTRODUCES +REINTRODUCING +REINVENT +REINVENTED +REINVENTING +REINVENTS +REITERATE +REITERATED +REITERATES +REITERATING +REITERATION +REJECT +REJECTED +REJECTING +REJECTION +REJECTIONS +REJECTOR +REJECTORS +REJECTS +REJOICE +REJOICED +REJOICER +REJOICES +REJOICING +REJOIN +REJOINDER +REJOINED +REJOINING +REJOINS +RELABEL +RELABELED +RELABELING +RELABELLED +RELABELLING +RELABELS +RELAPSE +RELATE +RELATED +RELATER +RELATES +RELATING +RELATION +RELATIONAL +RELATIONALLY +RELATIONS +RELATIONSHIP +RELATIONSHIPS +RELATIVE +RELATIVELY +RELATIVENESS +RELATIVES +RELATIVISM +RELATIVISTIC +RELATIVISTICALLY +RELATIVITY +RELAX +RELAXATION +RELAXATIONS +RELAXED +RELAXER +RELAXES +RELAXING +RELAY +RELAYED +RELAYING +RELAYS +RELEASE +RELEASED +RELEASES +RELEASING +RELEGATE +RELEGATED +RELEGATES +RELEGATING +RELENT +RELENTED +RELENTING +RELENTLESS +RELENTLESSLY +RELENTLESSNESS +RELENTS +RELEVANCE +RELEVANCES +RELEVANT +RELEVANTLY +RELIABILITY +RELIABLE +RELIABLY +RELIANCE +RELIANT +RELIC +RELICS +RELIED +RELIEF +RELIES +RELIEVE +RELIEVED +RELIEVER +RELIEVERS +RELIEVES +RELIEVING +RELIGION +RELIGIONS +RELIGIOUS +RELIGIOUSLY +RELIGIOUSNESS +RELINK +RELINQUISH +RELINQUISHED +RELINQUISHES +RELINQUISHING +RELISH +RELISHED +RELISHES +RELISHING +RELIVE +RELIVES +RELIVING +RELOAD +RELOADED +RELOADER +RELOADING +RELOADS +RELOCATABLE +RELOCATE +RELOCATED +RELOCATES +RELOCATING +RELOCATION +RELOCATIONS +RELUCTANCE +RELUCTANT +RELUCTANTLY +RELY +RELYING +REMAIN +REMAINDER +REMAINDERS +REMAINED +REMAINING +REMAINS +REMARK +REMARKABLE +REMARKABLENESS +REMARKABLY +REMARKED +REMARKING +REMARKS +REMBRANDT +REMEDIAL +REMEDIED +REMEDIES +REMEDY +REMEDYING +REMEMBER +REMEMBERED +REMEMBERING +REMEMBERS +REMEMBRANCE +REMEMBRANCES +REMIND +REMINDED +REMINDER +REMINDERS +REMINDING +REMINDS +REMINGTON +REMINISCENCE +REMINISCENCES +REMINISCENT +REMINISCENTLY +REMISS +REMISSION +REMIT +REMITTANCE +REMNANT +REMNANTS +REMODEL +REMODELED +REMODELING +REMODELS +REMONSTRATE +REMONSTRATED +REMONSTRATES +REMONSTRATING +REMONSTRATION +REMONSTRATIVE +REMORSE +REMORSEFUL +REMOTE +REMOTELY +REMOTENESS +REMOTEST +REMOVABLE +REMOVAL +REMOVALS +REMOVE +REMOVED +REMOVER +REMOVES +REMOVING +REMUNERATE +REMUNERATION +REMUS +REMY +RENA +RENAISSANCE +RENAL +RENAME +RENAMED +RENAMES +RENAMING +RENAULT +RENAULTS +REND +RENDER +RENDERED +RENDERING +RENDERINGS +RENDERS +RENDEZVOUS +RENDING +RENDITION +RENDITIONS +RENDS +RENE +RENEE +RENEGADE +RENEGOTIABLE +RENEW +RENEWABLE +RENEWAL +RENEWED +RENEWER +RENEWING +RENEWS +RENO +RENOIR +RENOUNCE +RENOUNCES +RENOUNCING +RENOVATE +RENOVATED +RENOVATION +RENOWN +RENOWNED +RENSSELAER +RENT +RENTAL +RENTALS +RENTED +RENTING +RENTS +RENUMBER +RENUMBERING +RENUMBERS +RENUNCIATE +RENUNCIATION +RENVILLE +REOCCUR +REOPEN +REOPENED +REOPENING +REOPENS +REORDER +REORDERED +REORDERING +REORDERS +REORGANIZATION +REORGANIZATIONS +REORGANIZE +REORGANIZED +REORGANIZES +REORGANIZING +REPACKAGE +REPAID +REPAIR +REPAIRED +REPAIRER +REPAIRING +REPAIRMAN +REPAIRMEN +REPAIRS +REPARATION +REPARATIONS +REPARTEE +REPARTITION +REPAST +REPASTS +REPAY +REPAYING +REPAYS +REPEAL +REPEALED +REPEALER +REPEALING +REPEALS +REPEAT +REPEATABLE +REPEATED +REPEATEDLY +REPEATER +REPEATERS +REPEATING +REPEATS +REPEL +REPELLED +REPELLENT +REPELS +REPENT +REPENTANCE +REPENTED +REPENTING +REPENTS +REPERCUSSION +REPERCUSSIONS +REPERTOIRE +REPERTORY +REPETITION +REPETITIONS +REPETITIOUS +REPETITIVE +REPETITIVELY +REPETITIVENESS +REPHRASE +REPHRASED +REPHRASES +REPHRASING +REPINE +REPLACE +REPLACEABLE +REPLACED +REPLACEMENT +REPLACEMENTS +REPLACER +REPLACES +REPLACING +REPLAY +REPLAYED +REPLAYING +REPLAYS +REPLENISH +REPLENISHED +REPLENISHES +REPLENISHING +REPLETE +REPLETENESS +REPLETION +REPLICA +REPLICAS +REPLICATE +REPLICATED +REPLICATES +REPLICATING +REPLICATION +REPLICATIONS +REPLIED +REPLIES +REPLY +REPLYING +REPORT +REPORTED +REPORTEDLY +REPORTER +REPORTERS +REPORTING +REPORTS +REPOSE +REPOSED +REPOSES +REPOSING +REPOSITION +REPOSITIONED +REPOSITIONING +REPOSITIONS +REPOSITORIES +REPOSITORY +REPREHENSIBLE +REPRESENT +REPRESENTABLE +REPRESENTABLY +REPRESENTATION +REPRESENTATIONAL +REPRESENTATIONALLY +REPRESENTATIONS +REPRESENTATIVE +REPRESENTATIVELY +REPRESENTATIVENESS +REPRESENTATIVES +REPRESENTED +REPRESENTING +REPRESENTS +REPRESS +REPRESSED +REPRESSES +REPRESSING +REPRESSION +REPRESSIONS +REPRESSIVE +REPRIEVE +REPRIEVED +REPRIEVES +REPRIEVING +REPRIMAND +REPRINT +REPRINTED +REPRINTING +REPRINTS +REPRISAL +REPRISALS +REPROACH +REPROACHED +REPROACHES +REPROACHING +REPROBATE +REPRODUCE +REPRODUCED +REPRODUCER +REPRODUCERS +REPRODUCES +REPRODUCIBILITIES +REPRODUCIBILITY +REPRODUCIBLE +REPRODUCIBLY +REPRODUCING +REPRODUCTION +REPRODUCTIONS +REPROGRAM +REPROGRAMMED +REPROGRAMMING +REPROGRAMS +REPROOF +REPROVE +REPROVER +REPTILE +REPTILES +REPTILIAN +REPUBLIC +REPUBLICAN +REPUBLICANS +REPUBLICS +REPUDIATE +REPUDIATED +REPUDIATES +REPUDIATING +REPUDIATION +REPUDIATIONS +REPUGNANT +REPULSE +REPULSED +REPULSES +REPULSING +REPULSION +REPULSIONS +REPULSIVE +REPUTABLE +REPUTABLY +REPUTATION +REPUTATIONS +REPUTE +REPUTED +REPUTEDLY +REPUTES +REQUEST +REQUESTED +REQUESTER +REQUESTERS +REQUESTING +REQUESTS +REQUIRE +REQUIRED +REQUIREMENT +REQUIREMENTS +REQUIRES +REQUIRING +REQUISITE +REQUISITES +REQUISITION +REQUISITIONED +REQUISITIONING +REQUISITIONS +REREAD +REREGISTER +REROUTE +REROUTED +REROUTES +REROUTING +RERUN +RERUNS +RESCHEDULE +RESCIND +RESCUE +RESCUED +RESCUER +RESCUERS +RESCUES +RESCUING +RESEARCH +RESEARCHED +RESEARCHER +RESEARCHERS +RESEARCHES +RESEARCHING +RESELECT +RESELECTED +RESELECTING +RESELECTS +RESELL +RESELLING +RESEMBLANCE +RESEMBLANCES +RESEMBLE +RESEMBLED +RESEMBLES +RESEMBLING +RESENT +RESENTED +RESENTFUL +RESENTFULLY +RESENTING +RESENTMENT +RESENTS +RESERPINE +RESERVATION +RESERVATIONS +RESERVE +RESERVED +RESERVER +RESERVES +RESERVING +RESERVOIR +RESERVOIRS +RESET +RESETS +RESETTING +RESETTINGS +RESIDE +RESIDED +RESIDENCE +RESIDENCES +RESIDENT +RESIDENTIAL +RESIDENTIALLY +RESIDENTS +RESIDES +RESIDING +RESIDUAL +RESIDUE +RESIDUES +RESIGN +RESIGNATION +RESIGNATIONS +RESIGNED +RESIGNING +RESIGNS +RESILIENT +RESIN +RESINS +RESIST +RESISTABLE +RESISTANCE +RESISTANCES +RESISTANT +RESISTANTLY +RESISTED +RESISTIBLE +RESISTING +RESISTIVE +RESISTIVITY +RESISTOR +RESISTORS +RESISTS +RESOLUTE +RESOLUTELY +RESOLUTENESS +RESOLUTION +RESOLUTIONS +RESOLVABLE +RESOLVE +RESOLVED +RESOLVER +RESOLVERS +RESOLVES +RESOLVING +RESONANCE +RESONANCES +RESONANT +RESONATE +RESORT +RESORTED +RESORTING +RESORTS +RESOUND +RESOUNDING +RESOUNDS +RESOURCE +RESOURCEFUL +RESOURCEFULLY +RESOURCEFULNESS +RESOURCES +RESPECT +RESPECTABILITY +RESPECTABLE +RESPECTABLY +RESPECTED +RESPECTER +RESPECTFUL +RESPECTFULLY +RESPECTFULNESS +RESPECTING +RESPECTIVE +RESPECTIVELY +RESPECTS +RESPIRATION +RESPIRATOR +RESPIRATORY +RESPITE +RESPLENDENT +RESPLENDENTLY +RESPOND +RESPONDED +RESPONDENT +RESPONDENTS +RESPONDER +RESPONDING +RESPONDS +RESPONSE +RESPONSES +RESPONSIBILITIES +RESPONSIBILITY +RESPONSIBLE +RESPONSIBLENESS +RESPONSIBLY +RESPONSIVE +RESPONSIVELY +RESPONSIVENESS +REST +RESTART +RESTARTED +RESTARTING +RESTARTS +RESTATE +RESTATED +RESTATEMENT +RESTATES +RESTATING +RESTAURANT +RESTAURANTS +RESTAURATEUR +RESTED +RESTFUL +RESTFULLY +RESTFULNESS +RESTING +RESTITUTION +RESTIVE +RESTLESS +RESTLESSLY +RESTLESSNESS +RESTORATION +RESTORATIONS +RESTORE +RESTORED +RESTORER +RESTORERS +RESTORES +RESTORING +RESTRAIN +RESTRAINED +RESTRAINER +RESTRAINERS +RESTRAINING +RESTRAINS +RESTRAINT +RESTRAINTS +RESTRICT +RESTRICTED +RESTRICTING +RESTRICTION +RESTRICTIONS +RESTRICTIVE +RESTRICTIVELY +RESTRICTS +RESTROOM +RESTRUCTURE +RESTRUCTURED +RESTRUCTURES +RESTRUCTURING +RESTS +RESULT +RESULTANT +RESULTANTLY +RESULTANTS +RESULTED +RESULTING +RESULTS +RESUMABLE +RESUME +RESUMED +RESUMES +RESUMING +RESUMPTION +RESUMPTIONS +RESURGENT +RESURRECT +RESURRECTED +RESURRECTING +RESURRECTION +RESURRECTIONS +RESURRECTOR +RESURRECTORS +RESURRECTS +RESUSCITATE +RESYNCHRONIZATION +RESYNCHRONIZE +RESYNCHRONIZED +RESYNCHRONIZING +RETAIL +RETAILER +RETAILERS +RETAILING +RETAIN +RETAINED +RETAINER +RETAINERS +RETAINING +RETAINMENT +RETAINS +RETALIATE +RETALIATION +RETALIATORY +RETARD +RETARDED +RETARDER +RETARDING +RETCH +RETENTION +RETENTIONS +RETENTIVE +RETENTIVELY +RETENTIVENESS +RETICLE +RETICLES +RETICULAR +RETICULATE +RETICULATED +RETICULATELY +RETICULATES +RETICULATING +RETICULATION +RETINA +RETINAL +RETINAS +RETINUE +RETIRE +RETIRED +RETIREE +RETIREMENT +RETIREMENTS +RETIRES +RETIRING +RETORT +RETORTED +RETORTS +RETRACE +RETRACED +RETRACES +RETRACING +RETRACT +RETRACTED +RETRACTING +RETRACTION +RETRACTIONS +RETRACTS +RETRAIN +RETRAINED +RETRAINING +RETRAINS +RETRANSLATE +RETRANSLATED +RETRANSMISSION +RETRANSMISSIONS +RETRANSMIT +RETRANSMITS +RETRANSMITTED +RETRANSMITTING +RETREAT +RETREATED +RETREATING +RETREATS +RETRIBUTION +RETRIED +RETRIER +RETRIERS +RETRIES +RETRIEVABLE +RETRIEVAL +RETRIEVALS +RETRIEVE +RETRIEVED +RETRIEVER +RETRIEVERS +RETRIEVES +RETRIEVING +RETROACTIVE +RETROACTIVELY +RETROFIT +RETROFITTING +RETROGRADE +RETROSPECT +RETROSPECTION +RETROSPECTIVE +RETRY +RETRYING +RETURN +RETURNABLE +RETURNED +RETURNER +RETURNING +RETURNS +RETYPE +RETYPED +RETYPES +RETYPING +REUB +REUBEN +REUNION +REUNIONS +REUNITE +REUNITED +REUNITING +REUSABLE +REUSE +REUSED +REUSES +REUSING +REUTERS +REUTHER +REVAMP +REVAMPED +REVAMPING +REVAMPS +REVEAL +REVEALED +REVEALING +REVEALS +REVEL +REVELATION +REVELATIONS +REVELED +REVELER +REVELING +REVELRY +REVELS +REVENGE +REVENGER +REVENUE +REVENUERS +REVENUES +REVERBERATE +REVERE +REVERED +REVERENCE +REVEREND +REVERENDS +REVERENT +REVERENTLY +REVERES +REVERIE +REVERIFIED +REVERIFIES +REVERIFY +REVERIFYING +REVERING +REVERSAL +REVERSALS +REVERSE +REVERSED +REVERSELY +REVERSER +REVERSES +REVERSIBLE +REVERSING +REVERSION +REVERT +REVERTED +REVERTING +REVERTS +REVIEW +REVIEWED +REVIEWER +REVIEWERS +REVIEWING +REVIEWS +REVILE +REVILED +REVILER +REVILING +REVISE +REVISED +REVISER +REVISES +REVISING +REVISION +REVISIONARY +REVISIONS +REVISIT +REVISITED +REVISITING +REVISITS +REVIVAL +REVIVALS +REVIVE +REVIVED +REVIVER +REVIVES +REVIVING +REVOCABLE +REVOCATION +REVOKE +REVOKED +REVOKER +REVOKES +REVOKING +REVOLT +REVOLTED +REVOLTER +REVOLTING +REVOLTINGLY +REVOLTS +REVOLUTION +REVOLUTIONARIES +REVOLUTIONARY +REVOLUTIONIZE +REVOLUTIONIZED +REVOLUTIONIZER +REVOLUTIONS +REVOLVE +REVOLVED +REVOLVER +REVOLVERS +REVOLVES +REVOLVING +REVULSION +REWARD +REWARDED +REWARDING +REWARDINGLY +REWARDS +REWIND +REWINDING +REWINDS +REWIRE +REWORK +REWORKED +REWORKING +REWORKS +REWOUND +REWRITE +REWRITES +REWRITING +REWRITTEN +REX +REYKJAVIK +REYNOLDS +RHAPSODY +RHEA +RHEIMS +RHEINHOLDT +RHENISH +RHESUS +RHETORIC +RHEUMATIC +RHEUMATISM +RHINE +RHINESTONE +RHINO +RHINOCEROS +RHO +RHODA +RHODE +RHODES +RHODESIA +RHODODENDRON +RHOMBIC +RHOMBUS +RHUBARB +RHYME +RHYMED +RHYMES +RHYMING +RHYTHM +RHYTHMIC +RHYTHMICALLY +RHYTHMS +RIB +RIBALD +RIBBED +RIBBING +RIBBON +RIBBONS +RIBOFLAVIN +RIBONUCLEIC +RIBS +RICA +RICAN +RICANISM +RICANS +RICE +RICH +RICHARD +RICHARDS +RICHARDSON +RICHER +RICHES +RICHEST +RICHEY +RICHFIELD +RICHLAND +RICHLY +RICHMOND +RICHNESS +RICHTER +RICK +RICKENBAUGH +RICKETS +RICKETTSIA +RICKETY +RICKSHAW +RICKSHAWS +RICO +RICOCHET +RID +RIDDANCE +RIDDEN +RIDDING +RIDDLE +RIDDLED +RIDDLES +RIDDLING +RIDE +RIDER +RIDERS +RIDES +RIDGE +RIDGEFIELD +RIDGEPOLE +RIDGES +RIDGWAY +RIDICULE +RIDICULED +RIDICULES +RIDICULING +RIDICULOUS +RIDICULOUSLY +RIDICULOUSNESS +RIDING +RIDS +RIEMANN +RIEMANNIAN +RIFLE +RIFLED +RIFLEMAN +RIFLER +RIFLES +RIFLING +RIFT +RIG +RIGA +RIGEL +RIGGING +RIGGS +RIGHT +RIGHTED +RIGHTEOUS +RIGHTEOUSLY +RIGHTEOUSNESS +RIGHTER +RIGHTFUL +RIGHTFULLY +RIGHTFULNESS +RIGHTING +RIGHTLY +RIGHTMOST +RIGHTNESS +RIGHTS +RIGHTWARD +RIGID +RIGIDITY +RIGIDLY +RIGOR +RIGOROUS +RIGOROUSLY +RIGORS +RIGS +RILEY +RILKE +RILL +RIM +RIME +RIMS +RIND +RINDS +RINEHART +RING +RINGED +RINGER +RINGERS +RINGING +RINGINGLY +RINGINGS +RINGS +RINGSIDE +RINK +RINSE +RINSED +RINSER +RINSES +RINSING +RIO +RIORDAN +RIOT +RIOTED +RIOTER +RIOTERS +RIOTING +RIOTOUS +RIOTS +RIP +RIPE +RIPELY +RIPEN +RIPENESS +RIPLEY +RIPOFF +RIPPED +RIPPING +RIPPLE +RIPPLED +RIPPLES +RIPPLING +RIPS +RISC +RISE +RISEN +RISER +RISERS +RISES +RISING +RISINGS +RISK +RISKED +RISKING +RISKS +RISKY +RITCHIE +RITE +RITES +RITTER +RITUAL +RITUALLY +RITUALS +RITZ +RIVAL +RIVALED +RIVALLED +RIVALLING +RIVALRIES +RIVALRY +RIVALS +RIVER +RIVERBANK +RIVERFRONT +RIVERS +RIVERSIDE +RIVERVIEW +RIVET +RIVETER +RIVETS +RIVIERA +RIVULET +RIVULETS +RIYADH +ROACH +ROAD +ROADBED +ROADBLOCK +ROADS +ROADSIDE +ROADSTER +ROADSTERS +ROADWAY +ROADWAYS +ROAM +ROAMED +ROAMING +ROAMS +ROAR +ROARED +ROARER +ROARING +ROARS +ROAST +ROASTED +ROASTER +ROASTING +ROASTS +ROB +ROBBED +ROBBER +ROBBERIES +ROBBERS +ROBBERY +ROBBIE +ROBBIN +ROBBING +ROBBINS +ROBE +ROBED +ROBERT +ROBERTA +ROBERTO +ROBERTS +ROBERTSON +ROBERTSONS +ROBES +ROBIN +ROBING +ROBINS +ROBINSON +ROBINSONVILLE +ROBOT +ROBOTIC +ROBOTICS +ROBOTS +ROBS +ROBUST +ROBUSTLY +ROBUSTNESS +ROCCO +ROCHESTER +ROCHFORD +ROCK +ROCKABYE +ROCKAWAY +ROCKAWAYS +ROCKED +ROCKEFELLER +ROCKER +ROCKERS +ROCKET +ROCKETED +ROCKETING +ROCKETS +ROCKFORD +ROCKIES +ROCKING +ROCKLAND +ROCKS +ROCKVILLE +ROCKWELL +ROCKY +ROD +RODE +RODENT +RODENTS +RODEO +RODGERS +RODNEY +RODRIGUEZ +RODS +ROE +ROENTGEN +ROGER +ROGERS +ROGUE +ROGUES +ROLAND +ROLE +ROLES +ROLL +ROLLBACK +ROLLED +ROLLER +ROLLERS +ROLLIE +ROLLING +ROLLINS +ROLLS +ROMAN +ROMANCE +ROMANCER +ROMANCERS +ROMANCES +ROMANCING +ROMANESQUE +ROMANIA +ROMANIZATIONS +ROMANIZER +ROMANIZERS +ROMANIZES +ROMANO +ROMANS +ROMANTIC +ROMANTICS +ROME +ROMELDALE +ROMEO +ROMP +ROMPED +ROMPER +ROMPING +ROMPS +ROMULUS +RON +RONALD +RONNIE +ROOF +ROOFED +ROOFER +ROOFING +ROOFS +ROOFTOP +ROOK +ROOKIE +ROOM +ROOMED +ROOMER +ROOMERS +ROOMFUL +ROOMING +ROOMMATE +ROOMS +ROOMY +ROONEY +ROOSEVELT +ROOSEVELTIAN +ROOST +ROOSTER +ROOSTERS +ROOT +ROOTED +ROOTER +ROOTING +ROOTS +ROPE +ROPED +ROPER +ROPERS +ROPES +ROPING +ROQUEMORE +RORSCHACH +ROSA +ROSABELLE +ROSALIE +ROSARY +ROSE +ROSEBUD +ROSEBUDS +ROSEBUSH +ROSELAND +ROSELLA +ROSEMARY +ROSEN +ROSENBERG +ROSENBLUM +ROSENTHAL +ROSENZWEIG +ROSES +ROSETTA +ROSETTE +ROSIE +ROSINESS +ROSS +ROSSI +ROSTER +ROSTRUM +ROSWELL +ROSY +ROT +ROTARIAN +ROTARIANS +ROTARY +ROTATE +ROTATED +ROTATES +ROTATING +ROTATION +ROTATIONAL +ROTATIONS +ROTATOR +ROTH +ROTHSCHILD +ROTOR +ROTS +ROTTEN +ROTTENNESS +ROTTERDAM +ROTTING +ROTUND +ROTUNDA +ROUGE +ROUGH +ROUGHED +ROUGHEN +ROUGHER +ROUGHEST +ROUGHLY +ROUGHNECK +ROUGHNESS +ROULETTE +ROUND +ROUNDABOUT +ROUNDED +ROUNDEDNESS +ROUNDER +ROUNDEST +ROUNDHEAD +ROUNDHOUSE +ROUNDING +ROUNDLY +ROUNDNESS +ROUNDOFF +ROUNDS +ROUNDTABLE +ROUNDUP +ROUNDWORM +ROURKE +ROUSE +ROUSED +ROUSES +ROUSING +ROUSSEAU +ROUSTABOUT +ROUT +ROUTE +ROUTED +ROUTER +ROUTERS +ROUTES +ROUTINE +ROUTINELY +ROUTINES +ROUTING +ROUTINGS +ROVE +ROVED +ROVER +ROVES +ROVING +ROW +ROWBOAT +ROWDY +ROWE +ROWED +ROWENA +ROWER +ROWING +ROWLAND +ROWLEY +ROWS +ROXBURY +ROXY +ROY +ROYAL +ROYALIST +ROYALISTS +ROYALLY +ROYALTIES +ROYALTY +ROYCE +ROZELLE +RUANDA +RUB +RUBAIYAT +RUBBED +RUBBER +RUBBERS +RUBBERY +RUBBING +RUBBISH +RUBBLE +RUBDOWN +RUBE +RUBEN +RUBENS +RUBIES +RUBIN +RUBLE +RUBLES +RUBOUT +RUBS +RUBY +RUDDER +RUDDERS +RUDDINESS +RUDDY +RUDE +RUDELY +RUDENESS +RUDIMENT +RUDIMENTARY +RUDIMENTS +RUDOLF +RUDOLPH +RUDY +RUDYARD +RUE +RUEFULLY +RUFFIAN +RUFFIANLY +RUFFIANS +RUFFLE +RUFFLED +RUFFLES +RUFUS +RUG +RUGGED +RUGGEDLY +RUGGEDNESS +RUGS +RUIN +RUINATION +RUINATIONS +RUINED +RUINING +RUINOUS +RUINOUSLY +RUINS +RULE +RULED +RULER +RULERS +RULES +RULING +RULINGS +RUM +RUMANIA +RUMANIAN +RUMANIANS +RUMBLE +RUMBLED +RUMBLER +RUMBLES +RUMBLING +RUMEN +RUMFORD +RUMMAGE +RUMMEL +RUMMY +RUMOR +RUMORED +RUMORS +RUMP +RUMPLE +RUMPLED +RUMPLY +RUMPUS +RUN +RUNAWAY +RUNDOWN +RUNG +RUNGE +RUNGS +RUNNABLE +RUNNER +RUNNERS +RUNNING +RUNNYMEDE +RUNOFF +RUNS +RUNT +RUNTIME +RUNYON +RUPEE +RUPPERT +RUPTURE +RUPTURED +RUPTURES +RUPTURING +RURAL +RURALLY +RUSH +RUSHED +RUSHER +RUSHES +RUSHING +RUSHMORE +RUSS +RUSSELL +RUSSET +RUSSIA +RUSSIAN +RUSSIANIZATIONS +RUSSIANIZES +RUSSIANS +RUSSO +RUST +RUSTED +RUSTIC +RUSTICATE +RUSTICATED +RUSTICATES +RUSTICATING +RUSTICATION +RUSTING +RUSTLE +RUSTLED +RUSTLER +RUSTLERS +RUSTLING +RUSTS +RUSTY +RUT +RUTGERS +RUTH +RUTHERFORD +RUTHLESS +RUTHLESSLY +RUTHLESSNESS +RUTLAND +RUTLEDGE +RUTS +RWANDA +RYAN +RYDBERG +RYDER +RYE +SABBATH +SABBATHIZE +SABBATHIZES +SABBATICAL +SABER +SABERS +SABINA +SABINE +SABLE +SABLES +SABOTAGE +SACHS +SACK +SACKER +SACKING +SACKS +SACRAMENT +SACRAMENTO +SACRED +SACREDLY +SACREDNESS +SACRIFICE +SACRIFICED +SACRIFICER +SACRIFICERS +SACRIFICES +SACRIFICIAL +SACRIFICIALLY +SACRIFICING +SACRILEGE +SACRILEGIOUS +SACROSANCT +SAD +SADDEN +SADDENED +SADDENS +SADDER +SADDEST +SADDLE +SADDLEBAG +SADDLED +SADDLES +SADIE +SADISM +SADIST +SADISTIC +SADISTICALLY +SADISTS +SADLER +SADLY +SADNESS +SAFARI +SAFE +SAFEGUARD +SAFEGUARDED +SAFEGUARDING +SAFEGUARDS +SAFEKEEPING +SAFELY +SAFENESS +SAFER +SAFES +SAFEST +SAFETIES +SAFETY +SAFFRON +SAG +SAGA +SAGACIOUS +SAGACITY +SAGE +SAGEBRUSH +SAGELY +SAGES +SAGGING +SAGINAW +SAGITTAL +SAGITTARIUS +SAGS +SAGUARO +SAHARA +SAID +SAIGON +SAIL +SAILBOAT +SAILED +SAILFISH +SAILING +SAILOR +SAILORLY +SAILORS +SAILS +SAINT +SAINTED +SAINTHOOD +SAINTLY +SAINTS +SAKE +SAKES +SAL +SALAAM +SALABLE +SALAD +SALADS +SALAMANDER +SALAMI +SALARIED +SALARIES +SALARY +SALE +SALEM +SALERNO +SALES +SALESGIRL +SALESIAN +SALESLADY +SALESMAN +SALESMEN +SALESPERSON +SALIENT +SALINA +SALINE +SALISBURY +SALISH +SALIVA +SALIVARY +SALIVATE +SALK +SALLE +SALLIES +SALLOW +SALLY +SALLYING +SALMON +SALON +SALONS +SALOON +SALOONS +SALT +SALTED +SALTER +SALTERS +SALTIER +SALTIEST +SALTINESS +SALTING +SALTON +SALTS +SALTY +SALUTARY +SALUTATION +SALUTATIONS +SALUTE +SALUTED +SALUTES +SALUTING +SALVADOR +SALVADORAN +SALVAGE +SALVAGED +SALVAGER +SALVAGES +SALVAGING +SALVATION +SALVATORE +SALVE +SALVER +SALVES +SALZ +SAM +SAMARITAN +SAME +SAMENESS +SAMMY +SAMOA +SAMOAN +SAMPLE +SAMPLED +SAMPLER +SAMPLERS +SAMPLES +SAMPLING +SAMPLINGS +SAMPSON +SAMSON +SAMUEL +SAMUELS +SAMUELSON +SAN +SANA +SANATORIA +SANATORIUM +SANBORN +SANCHEZ +SANCHO +SANCTIFICATION +SANCTIFIED +SANCTIFY +SANCTIMONIOUS +SANCTION +SANCTIONED +SANCTIONING +SANCTIONS +SANCTITY +SANCTUARIES +SANCTUARY +SANCTUM +SAND +SANDAL +SANDALS +SANDBAG +SANDBURG +SANDED +SANDER +SANDERLING +SANDERS +SANDERSON +SANDIA +SANDING +SANDMAN +SANDPAPER +SANDRA +SANDS +SANDSTONE +SANDUSKY +SANDWICH +SANDWICHES +SANDY +SANE +SANELY +SANER +SANEST +SANFORD +SANG +SANGUINE +SANHEDRIN +SANITARIUM +SANITARY +SANITATION +SANITY +SANK +SANSKRIT +SANSKRITIC +SANSKRITIZE +SANTA +SANTAYANA +SANTIAGO +SANTO +SAO +SAP +SAPIENS +SAPLING +SAPLINGS +SAPPHIRE +SAPPHO +SAPS +SAPSUCKER +SARA +SARACEN +SARACENS +SARAH +SARAN +SARASOTA +SARATOGA +SARCASM +SARCASMS +SARCASTIC +SARDINE +SARDINIA +SARDONIC +SARGENT +SARI +SARTRE +SASH +SASKATCHEWAN +SASKATOON +SAT +SATAN +SATANIC +SATANISM +SATANIST +SATCHEL +SATCHELS +SATE +SATED +SATELLITE +SATELLITES +SATES +SATIN +SATING +SATIRE +SATIRES +SATIRIC +SATISFACTION +SATISFACTIONS +SATISFACTORILY +SATISFACTORY +SATISFIABILITY +SATISFIABLE +SATISFIED +SATISFIES +SATISFY +SATISFYING +SATURATE +SATURATED +SATURATES +SATURATING +SATURATION +SATURDAY +SATURDAYS +SATURN +SATURNALIA +SATURNISM +SATYR +SAUCE +SAUCEPAN +SAUCEPANS +SAUCER +SAUCERS +SAUCES +SAUCY +SAUD +SAUDI +SAUKVILLE +SAUL +SAULT +SAUNDERS +SAUNTER +SAUSAGE +SAUSAGES +SAVAGE +SAVAGED +SAVAGELY +SAVAGENESS +SAVAGER +SAVAGERS +SAVAGES +SAVAGING +SAVANNAH +SAVE +SAVED +SAVER +SAVERS +SAVES +SAVING +SAVINGS +SAVIOR +SAVIORS +SAVIOUR +SAVONAROLA +SAVOR +SAVORED +SAVORING +SAVORS +SAVORY +SAVOY +SAVOYARD +SAVOYARDS +SAW +SAWDUST +SAWED +SAWFISH +SAWING +SAWMILL +SAWMILLS +SAWS +SAWTOOTH +SAX +SAXON +SAXONIZATION +SAXONIZATIONS +SAXONIZE +SAXONIZES +SAXONS +SAXONY +SAXOPHONE +SAXTON +SAY +SAYER +SAYERS +SAYING +SAYINGS +SAYS +SCAB +SCABBARD +SCABBARDS +SCABROUS +SCAFFOLD +SCAFFOLDING +SCAFFOLDINGS +SCAFFOLDS +SCALA +SCALABLE +SCALAR +SCALARS +SCALD +SCALDED +SCALDING +SCALE +SCALED +SCALES +SCALING +SCALINGS +SCALLOP +SCALLOPED +SCALLOPS +SCALP +SCALPS +SCALY +SCAMPER +SCAMPERING +SCAMPERS +SCAN +SCANDAL +SCANDALOUS +SCANDALS +SCANDINAVIA +SCANDINAVIAN +SCANDINAVIANS +SCANNED +SCANNER +SCANNERS +SCANNING +SCANS +SCANT +SCANTIER +SCANTIEST +SCANTILY +SCANTINESS +SCANTLY +SCANTY +SCAPEGOAT +SCAR +SCARBOROUGH +SCARCE +SCARCELY +SCARCENESS +SCARCER +SCARCITY +SCARE +SCARECROW +SCARED +SCARES +SCARF +SCARING +SCARLATTI +SCARLET +SCARS +SCARSDALE +SCARVES +SCARY +SCATTER +SCATTERBRAIN +SCATTERED +SCATTERING +SCATTERS +SCENARIO +SCENARIOS +SCENE +SCENERY +SCENES +SCENIC +SCENT +SCENTED +SCENTS +SCEPTER +SCEPTERS +SCHAEFER +SCHAEFFER +SCHAFER +SCHAFFNER +SCHANTZ +SCHAPIRO +SCHEDULABLE +SCHEDULE +SCHEDULED +SCHEDULER +SCHEDULERS +SCHEDULES +SCHEDULING +SCHEHERAZADE +SCHELLING +SCHEMA +SCHEMAS +SCHEMATA +SCHEMATIC +SCHEMATICALLY +SCHEMATICS +SCHEME +SCHEMED +SCHEMER +SCHEMERS +SCHEMES +SCHEMING +SCHILLER +SCHISM +SCHIZOPHRENIA +SCHLESINGER +SCHLITZ +SCHLOSS +SCHMIDT +SCHMITT +SCHNABEL +SCHNEIDER +SCHOENBERG +SCHOFIELD +SCHOLAR +SCHOLARLY +SCHOLARS +SCHOLARSHIP +SCHOLARSHIPS +SCHOLASTIC +SCHOLASTICALLY +SCHOLASTICS +SCHOOL +SCHOOLBOY +SCHOOLBOYS +SCHOOLED +SCHOOLER +SCHOOLERS +SCHOOLHOUSE +SCHOOLHOUSES +SCHOOLING +SCHOOLMASTER +SCHOOLMASTERS +SCHOOLROOM +SCHOOLROOMS +SCHOOLS +SCHOONER +SCHOPENHAUER +SCHOTTKY +SCHROEDER +SCHROEDINGER +SCHUBERT +SCHULTZ +SCHULZ +SCHUMACHER +SCHUMAN +SCHUMANN +SCHUSTER +SCHUYLER +SCHUYLKILL +SCHWAB +SCHWARTZ +SCHWEITZER +SCIENCE +SCIENCES +SCIENTIFIC +SCIENTIFICALLY +SCIENTIST +SCIENTISTS +SCISSOR +SCISSORED +SCISSORING +SCISSORS +SCLEROSIS +SCLEROTIC +SCOFF +SCOFFED +SCOFFER +SCOFFING +SCOFFS +SCOLD +SCOLDED +SCOLDING +SCOLDS +SCOOP +SCOOPED +SCOOPING +SCOOPS +SCOOT +SCOPE +SCOPED +SCOPES +SCOPING +SCORCH +SCORCHED +SCORCHER +SCORCHES +SCORCHING +SCORE +SCOREBOARD +SCORECARD +SCORED +SCORER +SCORERS +SCORES +SCORING +SCORINGS +SCORN +SCORNED +SCORNER +SCORNFUL +SCORNFULLY +SCORNING +SCORNS +SCORPIO +SCORPION +SCORPIONS +SCOT +SCOTCH +SCOTCHGARD +SCOTCHMAN +SCOTIA +SCOTIAN +SCOTLAND +SCOTS +SCOTSMAN +SCOTSMEN +SCOTT +SCOTTISH +SCOTTSDALE +SCOTTY +SCOUNDREL +SCOUNDRELS +SCOUR +SCOURED +SCOURGE +SCOURING +SCOURS +SCOUT +SCOUTED +SCOUTING +SCOUTS +SCOW +SCOWL +SCOWLED +SCOWLING +SCOWLS +SCRAM +SCRAMBLE +SCRAMBLED +SCRAMBLER +SCRAMBLES +SCRAMBLING +SCRANTON +SCRAP +SCRAPE +SCRAPED +SCRAPER +SCRAPERS +SCRAPES +SCRAPING +SCRAPINGS +SCRAPPED +SCRAPS +SCRATCH +SCRATCHED +SCRATCHER +SCRATCHERS +SCRATCHES +SCRATCHING +SCRATCHY +SCRAWL +SCRAWLED +SCRAWLING +SCRAWLS +SCRAWNY +SCREAM +SCREAMED +SCREAMER +SCREAMERS +SCREAMING +SCREAMS +SCREECH +SCREECHED +SCREECHES +SCREECHING +SCREEN +SCREENED +SCREENING +SCREENINGS +SCREENPLAY +SCREENS +SCREW +SCREWBALL +SCREWDRIVER +SCREWED +SCREWING +SCREWS +SCRIBBLE +SCRIBBLED +SCRIBBLER +SCRIBBLES +SCRIBE +SCRIBES +SCRIBING +SCRIBNERS +SCRIMMAGE +SCRIPPS +SCRIPT +SCRIPTS +SCRIPTURE +SCRIPTURES +SCROLL +SCROLLED +SCROLLING +SCROLLS +SCROOGE +SCROUNGE +SCRUB +SCRUMPTIOUS +SCRUPLE +SCRUPULOUS +SCRUPULOUSLY +SCRUTINIZE +SCRUTINIZED +SCRUTINIZING +SCRUTINY +SCUBA +SCUD +SCUFFLE +SCUFFLED +SCUFFLES +SCUFFLING +SCULPT +SCULPTED +SCULPTOR +SCULPTORS +SCULPTS +SCULPTURE +SCULPTURED +SCULPTURES +SCURRIED +SCURRY +SCURVY +SCUTTLE +SCUTTLED +SCUTTLES +SCUTTLING +SCYLLA +SCYTHE +SCYTHES +SCYTHIA +SEA +SEABOARD +SEABORG +SEABROOK +SEACOAST +SEACOASTS +SEAFOOD +SEAGATE +SEAGRAM +SEAGULL +SEAHORSE +SEAL +SEALED +SEALER +SEALING +SEALS +SEALY +SEAM +SEAMAN +SEAMED +SEAMEN +SEAMING +SEAMS +SEAMY +SEAN +SEAPORT +SEAPORTS +SEAQUARIUM +SEAR +SEARCH +SEARCHED +SEARCHER +SEARCHERS +SEARCHES +SEARCHING +SEARCHINGLY +SEARCHINGS +SEARCHLIGHT +SEARED +SEARING +SEARINGLY +SEARS +SEAS +SEASHORE +SEASHORES +SEASIDE +SEASON +SEASONABLE +SEASONABLY +SEASONAL +SEASONALLY +SEASONED +SEASONER +SEASONERS +SEASONING +SEASONINGS +SEASONS +SEAT +SEATED +SEATING +SEATS +SEATTLE +SEAWARD +SEAWEED +SEBASTIAN +SECANT +SECEDE +SECEDED +SECEDES +SECEDING +SECESSION +SECLUDE +SECLUDED +SECLUSION +SECOND +SECONDARIES +SECONDARILY +SECONDARY +SECONDED +SECONDER +SECONDERS +SECONDHAND +SECONDING +SECONDLY +SECONDS +SECRECY +SECRET +SECRETARIAL +SECRETARIAT +SECRETARIES +SECRETARY +SECRETE +SECRETED +SECRETES +SECRETING +SECRETION +SECRETIONS +SECRETIVE +SECRETIVELY +SECRETLY +SECRETS +SECT +SECTARIAN +SECTION +SECTIONAL +SECTIONED +SECTIONING +SECTIONS +SECTOR +SECTORS +SECTS +SECULAR +SECURE +SECURED +SECURELY +SECURES +SECURING +SECURINGS +SECURITIES +SECURITY +SEDAN +SEDATE +SEDGE +SEDGWICK +SEDIMENT +SEDIMENTARY +SEDIMENTS +SEDITION +SEDITIOUS +SEDUCE +SEDUCED +SEDUCER +SEDUCERS +SEDUCES +SEDUCING +SEDUCTION +SEDUCTIVE +SEE +SEED +SEEDED +SEEDER +SEEDERS +SEEDING +SEEDINGS +SEEDLING +SEEDLINGS +SEEDS +SEEDY +SEEING +SEEK +SEEKER +SEEKERS +SEEKING +SEEKS +SEELEY +SEEM +SEEMED +SEEMING +SEEMINGLY +SEEMLY +SEEMS +SEEN +SEEP +SEEPAGE +SEEPED +SEEPING +SEEPS +SEER +SEERS +SEERSUCKER +SEES +SEETHE +SEETHED +SEETHES +SEETHING +SEGMENT +SEGMENTATION +SEGMENTATIONS +SEGMENTED +SEGMENTING +SEGMENTS +SEGOVIA +SEGREGATE +SEGREGATED +SEGREGATES +SEGREGATING +SEGREGATION +SEGUNDO +SEIDEL +SEISMIC +SEISMOGRAPH +SEISMOLOGY +SEIZE +SEIZED +SEIZES +SEIZING +SEIZURE +SEIZURES +SELDOM +SELECT +SELECTED +SELECTING +SELECTION +SELECTIONS +SELECTIVE +SELECTIVELY +SELECTIVITY +SELECTMAN +SELECTMEN +SELECTOR +SELECTORS +SELECTRIC +SELECTS +SELENA +SELENIUM +SELF +SELFISH +SELFISHLY +SELFISHNESS +SELFRIDGE +SELFSAME +SELKIRK +SELL +SELLER +SELLERS +SELLING +SELLOUT +SELLS +SELMA +SELTZER +SELVES +SELWYN +SEMANTIC +SEMANTICAL +SEMANTICALLY +SEMANTICIST +SEMANTICISTS +SEMANTICS +SEMAPHORE +SEMAPHORES +SEMBLANCE +SEMESTER +SEMESTERS +SEMI +SEMIAUTOMATED +SEMICOLON +SEMICOLONS +SEMICONDUCTOR +SEMICONDUCTORS +SEMINAL +SEMINAR +SEMINARIAN +SEMINARIES +SEMINARS +SEMINARY +SEMINOLE +SEMIPERMANENT +SEMIPERMANENTLY +SEMIRAMIS +SEMITE +SEMITIC +SEMITICIZE +SEMITICIZES +SEMITIZATION +SEMITIZATIONS +SEMITIZE +SEMITIZES +SENATE +SENATES +SENATOR +SENATORIAL +SENATORS +SEND +SENDER +SENDERS +SENDING +SENDS +SENECA +SENEGAL +SENILE +SENIOR +SENIORITY +SENIORS +SENSATION +SENSATIONAL +SENSATIONALLY +SENSATIONS +SENSE +SENSED +SENSELESS +SENSELESSLY +SENSELESSNESS +SENSES +SENSIBILITIES +SENSIBILITY +SENSIBLE +SENSIBLY +SENSING +SENSITIVE +SENSITIVELY +SENSITIVENESS +SENSITIVES +SENSITIVITIES +SENSITIVITY +SENSOR +SENSORS +SENSORY +SENSUAL +SENSUOUS +SENT +SENTENCE +SENTENCED +SENTENCES +SENTENCING +SENTENTIAL +SENTIMENT +SENTIMENTAL +SENTIMENTALLY +SENTIMENTS +SENTINEL +SENTINELS +SENTRIES +SENTRY +SEOUL +SEPARABLE +SEPARATE +SEPARATED +SEPARATELY +SEPARATENESS +SEPARATES +SEPARATING +SEPARATION +SEPARATIONS +SEPARATOR +SEPARATORS +SEPIA +SEPOY +SEPT +SEPTEMBER +SEPTEMBERS +SEPULCHER +SEPULCHERS +SEQUEL +SEQUELS +SEQUENCE +SEQUENCED +SEQUENCER +SEQUENCERS +SEQUENCES +SEQUENCING +SEQUENCINGS +SEQUENTIAL +SEQUENTIALITY +SEQUENTIALIZE +SEQUENTIALIZED +SEQUENTIALIZES +SEQUENTIALIZING +SEQUENTIALLY +SEQUESTER +SEQUOIA +SERAFIN +SERBIA +SERBIAN +SERBIANS +SERENDIPITOUS +SERENDIPITY +SERENE +SERENELY +SERENITY +SERF +SERFS +SERGEANT +SERGEANTS +SERGEI +SERIAL +SERIALIZABILITY +SERIALIZABLE +SERIALIZATION +SERIALIZATIONS +SERIALIZE +SERIALIZED +SERIALIZES +SERIALIZING +SERIALLY +SERIALS +SERIES +SERIF +SERIOUS +SERIOUSLY +SERIOUSNESS +SERMON +SERMONS +SERPENS +SERPENT +SERPENTINE +SERPENTS +SERRA +SERUM +SERUMS +SERVANT +SERVANTS +SERVE +SERVED +SERVER +SERVERS +SERVES +SERVICE +SERVICEABILITY +SERVICEABLE +SERVICED +SERVICEMAN +SERVICEMEN +SERVICES +SERVICING +SERVILE +SERVING +SERVINGS +SERVITUDE +SERVO +SERVOMECHANISM +SESAME +SESSION +SESSIONS +SET +SETBACK +SETH +SETS +SETTABLE +SETTER +SETTERS +SETTING +SETTINGS +SETTLE +SETTLED +SETTLEMENT +SETTLEMENTS +SETTLER +SETTLERS +SETTLES +SETTLING +SETUP +SETUPS +SEVEN +SEVENFOLD +SEVENS +SEVENTEEN +SEVENTEENS +SEVENTEENTH +SEVENTH +SEVENTIES +SEVENTIETH +SEVENTY +SEVER +SEVERAL +SEVERALFOLD +SEVERALLY +SEVERANCE +SEVERE +SEVERED +SEVERELY +SEVERER +SEVEREST +SEVERING +SEVERITIES +SEVERITY +SEVERN +SEVERS +SEVILLE +SEW +SEWAGE +SEWARD +SEWED +SEWER +SEWERS +SEWING +SEWS +SEX +SEXED +SEXES +SEXIST +SEXTANS +SEXTET +SEXTILLION +SEXTON +SEXTUPLE +SEXTUPLET +SEXUAL +SEXUALITY +SEXUALLY +SEXY +SEYCHELLES +SEYMOUR +SHABBY +SHACK +SHACKED +SHACKLE +SHACKLED +SHACKLES +SHACKLING +SHACKS +SHADE +SHADED +SHADES +SHADIER +SHADIEST +SHADILY +SHADINESS +SHADING +SHADINGS +SHADOW +SHADOWED +SHADOWING +SHADOWS +SHADOWY +SHADY +SHAFER +SHAFFER +SHAFT +SHAFTS +SHAGGY +SHAKABLE +SHAKABLY +SHAKE +SHAKEDOWN +SHAKEN +SHAKER +SHAKERS +SHAKES +SHAKESPEARE +SHAKESPEAREAN +SHAKESPEARIAN +SHAKESPEARIZE +SHAKESPEARIZES +SHAKINESS +SHAKING +SHAKY +SHALE +SHALL +SHALLOW +SHALLOWER +SHALLOWLY +SHALLOWNESS +SHAM +SHAMBLES +SHAME +SHAMED +SHAMEFUL +SHAMEFULLY +SHAMELESS +SHAMELESSLY +SHAMES +SHAMING +SHAMPOO +SHAMROCK +SHAMS +SHANGHAI +SHANGHAIED +SHANGHAIING +SHANGHAIINGS +SHANGHAIS +SHANNON +SHANTIES +SHANTUNG +SHANTY +SHAPE +SHAPED +SHAPELESS +SHAPELESSLY +SHAPELESSNESS +SHAPELY +SHAPER +SHAPERS +SHAPES +SHAPING +SHAPIRO +SHARABLE +SHARD +SHARE +SHAREABLE +SHARECROPPER +SHARECROPPERS +SHARED +SHAREHOLDER +SHAREHOLDERS +SHARER +SHARERS +SHARES +SHARI +SHARING +SHARK +SHARKS +SHARON +SHARP +SHARPE +SHARPEN +SHARPENED +SHARPENING +SHARPENS +SHARPER +SHARPEST +SHARPLY +SHARPNESS +SHARPSHOOT +SHASTA +SHATTER +SHATTERED +SHATTERING +SHATTERPROOF +SHATTERS +SHATTUCK +SHAVE +SHAVED +SHAVEN +SHAVES +SHAVING +SHAVINGS +SHAWANO +SHAWL +SHAWLS +SHAWNEE +SHE +SHEA +SHEAF +SHEAR +SHEARED +SHEARER +SHEARING +SHEARS +SHEATH +SHEATHING +SHEATHS +SHEAVES +SHEBOYGAN +SHED +SHEDDING +SHEDIR +SHEDS +SHEEHAN +SHEEN +SHEEP +SHEEPSKIN +SHEER +SHEERED +SHEET +SHEETED +SHEETING +SHEETS +SHEFFIELD +SHEIK +SHEILA +SHELBY +SHELDON +SHELF +SHELL +SHELLED +SHELLER +SHELLEY +SHELLING +SHELLS +SHELTER +SHELTERED +SHELTERING +SHELTERS +SHELTON +SHELVE +SHELVED +SHELVES +SHELVING +SHENANDOAH +SHENANIGAN +SHEPARD +SHEPHERD +SHEPHERDS +SHEPPARD +SHERATON +SHERBET +SHERIDAN +SHERIFF +SHERIFFS +SHERLOCK +SHERMAN +SHERRILL +SHERRY +SHERWIN +SHERWOOD +SHIBBOLETH +SHIED +SHIELD +SHIELDED +SHIELDING +SHIELDS +SHIES +SHIFT +SHIFTED +SHIFTER +SHIFTERS +SHIFTIER +SHIFTIEST +SHIFTILY +SHIFTINESS +SHIFTING +SHIFTS +SHIFTY +SHIITE +SHIITES +SHILL +SHILLING +SHILLINGS +SHILLONG +SHILOH +SHIMMER +SHIMMERING +SHIN +SHINBONE +SHINE +SHINED +SHINER +SHINERS +SHINES +SHINGLE +SHINGLES +SHINING +SHININGLY +SHINTO +SHINTOISM +SHINTOIZE +SHINTOIZES +SHINY +SHIP +SHIPBOARD +SHIPBUILDING +SHIPLEY +SHIPMATE +SHIPMENT +SHIPMENTS +SHIPPED +SHIPPER +SHIPPERS +SHIPPING +SHIPS +SHIPSHAPE +SHIPWRECK +SHIPWRECKED +SHIPWRECKS +SHIPYARD +SHIRE +SHIRK +SHIRKER +SHIRKING +SHIRKS +SHIRLEY +SHIRT +SHIRTING +SHIRTS +SHIT +SHIVA +SHIVER +SHIVERED +SHIVERER +SHIVERING +SHIVERS +SHMUEL +SHOAL +SHOALS +SHOCK +SHOCKED +SHOCKER +SHOCKERS +SHOCKING +SHOCKINGLY +SHOCKLEY +SHOCKS +SHOD +SHODDY +SHOE +SHOED +SHOEHORN +SHOEING +SHOELACE +SHOEMAKER +SHOES +SHOESTRING +SHOJI +SHONE +SHOOK +SHOOT +SHOOTER +SHOOTERS +SHOOTING +SHOOTINGS +SHOOTS +SHOP +SHOPKEEPER +SHOPKEEPERS +SHOPPED +SHOPPER +SHOPPERS +SHOPPING +SHOPS +SHOPWORN +SHORE +SHORELINE +SHORES +SHOREWOOD +SHORN +SHORT +SHORTAGE +SHORTAGES +SHORTCOMING +SHORTCOMINGS +SHORTCUT +SHORTCUTS +SHORTED +SHORTEN +SHORTENED +SHORTENING +SHORTENS +SHORTER +SHORTEST +SHORTFALL +SHORTHAND +SHORTHANDED +SHORTING +SHORTISH +SHORTLY +SHORTNESS +SHORTS +SHORTSIGHTED +SHORTSTOP +SHOSHONE +SHOT +SHOTGUN +SHOTGUNS +SHOTS +SHOULD +SHOULDER +SHOULDERED +SHOULDERING +SHOULDERS +SHOUT +SHOUTED +SHOUTER +SHOUTERS +SHOUTING +SHOUTS +SHOVE +SHOVED +SHOVEL +SHOVELED +SHOVELS +SHOVES +SHOVING +SHOW +SHOWBOAT +SHOWCASE +SHOWDOWN +SHOWED +SHOWER +SHOWERED +SHOWERING +SHOWERS +SHOWING +SHOWINGS +SHOWN +SHOWPIECE +SHOWROOM +SHOWS +SHOWY +SHRANK +SHRAPNEL +SHRED +SHREDDER +SHREDDING +SHREDS +SHREVEPORT +SHREW +SHREWD +SHREWDEST +SHREWDLY +SHREWDNESS +SHREWS +SHRIEK +SHRIEKED +SHRIEKING +SHRIEKS +SHRILL +SHRILLED +SHRILLING +SHRILLNESS +SHRILLY +SHRIMP +SHRINE +SHRINES +SHRINK +SHRINKABLE +SHRINKAGE +SHRINKING +SHRINKS +SHRIVEL +SHRIVELED +SHROUD +SHROUDED +SHRUB +SHRUBBERY +SHRUBS +SHRUG +SHRUGS +SHRUNK +SHRUNKEN +SHU +SHUDDER +SHUDDERED +SHUDDERING +SHUDDERS +SHUFFLE +SHUFFLEBOARD +SHUFFLED +SHUFFLES +SHUFFLING +SHULMAN +SHUN +SHUNS +SHUNT +SHUT +SHUTDOWN +SHUTDOWNS +SHUTOFF +SHUTOUT +SHUTS +SHUTTER +SHUTTERED +SHUTTERS +SHUTTING +SHUTTLE +SHUTTLECOCK +SHUTTLED +SHUTTLES +SHUTTLING +SHY +SHYLOCK +SHYLOCKIAN +SHYLY +SHYNESS +SIAM +SIAMESE +SIAN +SIBERIA +SIBERIAN +SIBLEY +SIBLING +SIBLINGS +SICILIAN +SICILIANA +SICILIANS +SICILY +SICK +SICKEN +SICKER +SICKEST +SICKLE +SICKLY +SICKNESS +SICKNESSES +SICKROOM +SIDE +SIDEARM +SIDEBAND +SIDEBOARD +SIDEBOARDS +SIDEBURNS +SIDECAR +SIDED +SIDELIGHT +SIDELIGHTS +SIDELINE +SIDEREAL +SIDES +SIDESADDLE +SIDESHOW +SIDESTEP +SIDETRACK +SIDEWALK +SIDEWALKS +SIDEWAYS +SIDEWISE +SIDING +SIDINGS +SIDNEY +SIEGE +SIEGEL +SIEGES +SIEGFRIED +SIEGLINDA +SIEGMUND +SIEMENS +SIENA +SIERRA +SIEVE +SIEVES +SIFFORD +SIFT +SIFTED +SIFTER +SIFTING +SIGGRAPH +SIGH +SIGHED +SIGHING +SIGHS +SIGHT +SIGHTED +SIGHTING +SIGHTINGS +SIGHTLY +SIGHTS +SIGHTSEEING +SIGMA +SIGMUND +SIGN +SIGNAL +SIGNALED +SIGNALING +SIGNALLED +SIGNALLING +SIGNALLY +SIGNALS +SIGNATURE +SIGNATURES +SIGNED +SIGNER +SIGNERS +SIGNET +SIGNIFICANCE +SIGNIFICANT +SIGNIFICANTLY +SIGNIFICANTS +SIGNIFICATION +SIGNIFIED +SIGNIFIES +SIGNIFY +SIGNIFYING +SIGNING +SIGNS +SIKH +SIKHES +SIKHS +SIKKIM +SIKKIMESE +SIKORSKY +SILAS +SILENCE +SILENCED +SILENCER +SILENCERS +SILENCES +SILENCING +SILENT +SILENTLY +SILHOUETTE +SILHOUETTED +SILHOUETTES +SILICA +SILICATE +SILICON +SILICONE +SILK +SILKEN +SILKIER +SILKIEST +SILKILY +SILKINE +SILKS +SILKY +SILL +SILLIEST +SILLINESS +SILLS +SILLY +SILO +SILT +SILTED +SILTING +SILTS +SILVER +SILVERED +SILVERING +SILVERMAN +SILVERS +SILVERSMITH +SILVERSTEIN +SILVERWARE +SILVERY +SIMILAR +SIMILARITIES +SIMILARITY +SIMILARLY +SIMILE +SIMILITUDE +SIMLA +SIMMER +SIMMERED +SIMMERING +SIMMERS +SIMMONS +SIMMONSVILLE +SIMMS +SIMON +SIMONS +SIMONSON +SIMPLE +SIMPLEMINDED +SIMPLENESS +SIMPLER +SIMPLEST +SIMPLETON +SIMPLEX +SIMPLICITIES +SIMPLICITY +SIMPLIFICATION +SIMPLIFICATIONS +SIMPLIFIED +SIMPLIFIER +SIMPLIFIERS +SIMPLIFIES +SIMPLIFY +SIMPLIFYING +SIMPLISTIC +SIMPLY +SIMPSON +SIMS +SIMULA +SIMULA +SIMULATE +SIMULATED +SIMULATES +SIMULATING +SIMULATION +SIMULATIONS +SIMULATOR +SIMULATORS +SIMULCAST +SIMULTANEITY +SIMULTANEOUS +SIMULTANEOUSLY +SINAI +SINATRA +SINBAD +SINCE +SINCERE +SINCERELY +SINCEREST +SINCERITY +SINCLAIR +SINE +SINES +SINEW +SINEWS +SINEWY +SINFUL +SINFULLY +SINFULNESS +SING +SINGABLE +SINGAPORE +SINGBORG +SINGE +SINGED +SINGER +SINGERS +SINGING +SINGINGLY +SINGLE +SINGLED +SINGLEHANDED +SINGLENESS +SINGLES +SINGLET +SINGLETON +SINGLETONS +SINGLING +SINGLY +SINGS +SINGSONG +SINGULAR +SINGULARITIES +SINGULARITY +SINGULARLY +SINISTER +SINK +SINKED +SINKER +SINKERS +SINKHOLE +SINKING +SINKS +SINNED +SINNER +SINNERS +SINNING +SINS +SINUOUS +SINUS +SINUSOID +SINUSOIDAL +SINUSOIDS +SIOUX +SIP +SIPHON +SIPHONING +SIPPING +SIPS +SIR +SIRE +SIRED +SIREN +SIRENS +SIRES +SIRIUS +SIRS +SIRUP +SISTER +SISTERLY +SISTERS +SISTINE +SISYPHEAN +SISYPHUS +SIT +SITE +SITED +SITES +SITING +SITS +SITTER +SITTERS +SITTING +SITTINGS +SITU +SITUATE +SITUATED +SITUATES +SITUATING +SITUATION +SITUATIONAL +SITUATIONALLY +SITUATIONS +SIVA +SIX +SIXES +SIXFOLD +SIXGUN +SIXPENCE +SIXTEEN +SIXTEENS +SIXTEENTH +SIXTH +SIXTIES +SIXTIETH +SIXTY +SIZABLE +SIZE +SIZED +SIZES +SIZING +SIZINGS +SIZZLE +SKATE +SKATED +SKATER +SKATERS +SKATES +SKATING +SKELETAL +SKELETON +SKELETONS +SKEPTIC +SKEPTICAL +SKEPTICALLY +SKEPTICISM +SKEPTICS +SKETCH +SKETCHBOOK +SKETCHED +SKETCHES +SKETCHILY +SKETCHING +SKETCHPAD +SKETCHY +SKEW +SKEWED +SKEWER +SKEWERS +SKEWING +SKEWS +SKI +SKID +SKIDDING +SKIED +SKIES +SKIFF +SKIING +SKILL +SKILLED +SKILLET +SKILLFUL +SKILLFULLY +SKILLFULNESS +SKILLS +SKIM +SKIMMED +SKIMMING +SKIMP +SKIMPED +SKIMPING +SKIMPS +SKIMPY +SKIMS +SKIN +SKINDIVE +SKINNED +SKINNER +SKINNERS +SKINNING +SKINNY +SKINS +SKIP +SKIPPED +SKIPPER +SKIPPERS +SKIPPING +SKIPPY +SKIPS +SKIRMISH +SKIRMISHED +SKIRMISHER +SKIRMISHERS +SKIRMISHES +SKIRMISHING +SKIRT +SKIRTED +SKIRTING +SKIRTS +SKIS +SKIT +SKOPJE +SKULK +SKULKED +SKULKER +SKULKING +SKULKS +SKULL +SKULLCAP +SKULLDUGGERY +SKULLS +SKUNK +SKUNKS +SKY +SKYE +SKYHOOK +SKYJACK +SKYLARK +SKYLARKING +SKYLARKS +SKYLIGHT +SKYLIGHTS +SKYLINE +SKYROCKETS +SKYSCRAPER +SKYSCRAPERS +SLAB +SLACK +SLACKEN +SLACKER +SLACKING +SLACKLY +SLACKNESS +SLACKS +SLAIN +SLAM +SLAMMED +SLAMMING +SLAMS +SLANDER +SLANDERER +SLANDEROUS +SLANDERS +SLANG +SLANT +SLANTED +SLANTING +SLANTS +SLAP +SLAPPED +SLAPPING +SLAPS +SLAPSTICK +SLASH +SLASHED +SLASHES +SLASHING +SLAT +SLATE +SLATED +SLATER +SLATES +SLATS +SLAUGHTER +SLAUGHTERED +SLAUGHTERHOUSE +SLAUGHTERING +SLAUGHTERS +SLAV +SLAVE +SLAVER +SLAVERY +SLAVES +SLAVIC +SLAVICIZE +SLAVICIZES +SLAVISH +SLAVIZATION +SLAVIZATIONS +SLAVIZE +SLAVIZES +SLAVONIC +SLAVONICIZE +SLAVONICIZES +SLAVS +SLAY +SLAYER +SLAYERS +SLAYING +SLAYS +SLED +SLEDDING +SLEDGE +SLEDGEHAMMER +SLEDGES +SLEDS +SLEEK +SLEEP +SLEEPER +SLEEPERS +SLEEPILY +SLEEPINESS +SLEEPING +SLEEPLESS +SLEEPLESSLY +SLEEPLESSNESS +SLEEPS +SLEEPWALK +SLEEPY +SLEET +SLEEVE +SLEEVES +SLEIGH +SLEIGHS +SLEIGHT +SLENDER +SLENDERER +SLEPT +SLESINGER +SLEUTH +SLEW +SLEWING +SLICE +SLICED +SLICER +SLICERS +SLICES +SLICING +SLICK +SLICKER +SLICKERS +SLICKS +SLID +SLIDE +SLIDER +SLIDERS +SLIDES +SLIDING +SLIGHT +SLIGHTED +SLIGHTER +SLIGHTEST +SLIGHTING +SLIGHTLY +SLIGHTNESS +SLIGHTS +SLIM +SLIME +SLIMED +SLIMLY +SLIMY +SLING +SLINGING +SLINGS +SLINGSHOT +SLIP +SLIPPAGE +SLIPPED +SLIPPER +SLIPPERINESS +SLIPPERS +SLIPPERY +SLIPPING +SLIPS +SLIT +SLITHER +SLITS +SLIVER +SLOAN +SLOANE +SLOB +SLOCUM +SLOGAN +SLOGANS +SLOOP +SLOP +SLOPE +SLOPED +SLOPER +SLOPERS +SLOPES +SLOPING +SLOPPED +SLOPPINESS +SLOPPING +SLOPPY +SLOPS +SLOT +SLOTH +SLOTHFUL +SLOTHS +SLOTS +SLOTTED +SLOTTING +SLOUCH +SLOUCHED +SLOUCHES +SLOUCHING +SLOVAKIA +SLOVENIA +SLOW +SLOWDOWN +SLOWED +SLOWER +SLOWEST +SLOWING +SLOWLY +SLOWNESS +SLOWS +SLUDGE +SLUG +SLUGGISH +SLUGGISHLY +SLUGGISHNESS +SLUGS +SLUICE +SLUM +SLUMBER +SLUMBERED +SLUMMING +SLUMP +SLUMPED +SLUMPS +SLUMS +SLUNG +SLUR +SLURP +SLURRING +SLURRY +SLURS +SLY +SLYLY +SMACK +SMACKED +SMACKING +SMACKS +SMALL +SMALLER +SMALLEST +SMALLEY +SMALLISH +SMALLNESS +SMALLPOX +SMALLTIME +SMALLWOOD +SMART +SMARTED +SMARTER +SMARTEST +SMARTLY +SMARTNESS +SMASH +SMASHED +SMASHER +SMASHERS +SMASHES +SMASHING +SMASHINGLY +SMATTERING +SMEAR +SMEARED +SMEARING +SMEARS +SMELL +SMELLED +SMELLING +SMELLS +SMELLY +SMELT +SMELTER +SMELTS +SMILE +SMILED +SMILES +SMILING +SMILINGLY +SMIRK +SMITE +SMITH +SMITHEREENS +SMITHFIELD +SMITHS +SMITHSON +SMITHSONIAN +SMITHTOWN +SMITHY +SMITTEN +SMOCK +SMOCKING +SMOCKS +SMOG +SMOKABLE +SMOKE +SMOKED +SMOKER +SMOKERS +SMOKES +SMOKESCREEN +SMOKESTACK +SMOKIES +SMOKING +SMOKY +SMOLDER +SMOLDERED +SMOLDERING +SMOLDERS +SMOOCH +SMOOTH +SMOOTHBORE +SMOOTHED +SMOOTHER +SMOOTHES +SMOOTHEST +SMOOTHING +SMOOTHLY +SMOOTHNESS +SMOTE +SMOTHER +SMOTHERED +SMOTHERING +SMOTHERS +SMUCKER +SMUDGE +SMUG +SMUGGLE +SMUGGLED +SMUGGLER +SMUGGLERS +SMUGGLES +SMUGGLING +SMUT +SMUTTY +SMYRNA +SMYTHE +SNACK +SNAFU +SNAG +SNAIL +SNAILS +SNAKE +SNAKED +SNAKELIKE +SNAKES +SNAP +SNAPDRAGON +SNAPPED +SNAPPER +SNAPPERS +SNAPPILY +SNAPPING +SNAPPY +SNAPS +SNAPSHOT +SNAPSHOTS +SNARE +SNARED +SNARES +SNARING +SNARK +SNARL +SNARLED +SNARLING +SNATCH +SNATCHED +SNATCHES +SNATCHING +SNAZZY +SNEAD +SNEAK +SNEAKED +SNEAKER +SNEAKERS +SNEAKIER +SNEAKIEST +SNEAKILY +SNEAKINESS +SNEAKING +SNEAKS +SNEAKY +SNEED +SNEER +SNEERED +SNEERING +SNEERS +SNEEZE +SNEEZED +SNEEZES +SNEEZING +SNIDER +SNIFF +SNIFFED +SNIFFING +SNIFFLE +SNIFFS +SNIFTER +SNIGGER +SNIP +SNIPE +SNIPPET +SNIVEL +SNOB +SNOBBERY +SNOBBISH +SNODGRASS +SNOOP +SNOOPED +SNOOPING +SNOOPS +SNOOPY +SNORE +SNORED +SNORES +SNORING +SNORKEL +SNORT +SNORTED +SNORTING +SNORTS +SNOTTY +SNOUT +SNOUTS +SNOW +SNOWBALL +SNOWBELT +SNOWED +SNOWFALL +SNOWFLAKE +SNOWIER +SNOWIEST +SNOWILY +SNOWING +SNOWMAN +SNOWMEN +SNOWS +SNOWSHOE +SNOWSHOES +SNOWSTORM +SNOWY +SNUB +SNUFF +SNUFFED +SNUFFER +SNUFFING +SNUFFS +SNUG +SNUGGLE +SNUGGLED +SNUGGLES +SNUGGLING +SNUGLY +SNUGNESS +SNYDER +SOAK +SOAKED +SOAKING +SOAKS +SOAP +SOAPED +SOAPING +SOAPS +SOAPY +SOAR +SOARED +SOARING +SOARS +SOB +SOBBING +SOBER +SOBERED +SOBERING +SOBERLY +SOBERNESS +SOBERS +SOBRIETY +SOBS +SOCCER +SOCIABILITY +SOCIABLE +SOCIABLY +SOCIAL +SOCIALISM +SOCIALIST +SOCIALISTS +SOCIALIZE +SOCIALIZED +SOCIALIZES +SOCIALIZING +SOCIALLY +SOCIETAL +SOCIETIES +SOCIETY +SOCIOECONOMIC +SOCIOLOGICAL +SOCIOLOGICALLY +SOCIOLOGIST +SOCIOLOGISTS +SOCIOLOGY +SOCK +SOCKED +SOCKET +SOCKETS +SOCKING +SOCKS +SOCRATES +SOCRATIC +SOD +SODA +SODDY +SODIUM +SODOMY +SODS +SOFA +SOFAS +SOFIA +SOFT +SOFTBALL +SOFTEN +SOFTENED +SOFTENING +SOFTENS +SOFTER +SOFTEST +SOFTLY +SOFTNESS +SOFTWARE +SOFTWARES +SOGGY +SOIL +SOILED +SOILING +SOILS +SOIREE +SOJOURN +SOJOURNER +SOJOURNERS +SOL +SOLACE +SOLACED +SOLAR +SOLD +SOLDER +SOLDERED +SOLDIER +SOLDIERING +SOLDIERLY +SOLDIERS +SOLE +SOLELY +SOLEMN +SOLEMNITY +SOLEMNLY +SOLEMNNESS +SOLENOID +SOLES +SOLICIT +SOLICITATION +SOLICITED +SOLICITING +SOLICITOR +SOLICITOUS +SOLICITS +SOLICITUDE +SOLID +SOLIDARITY +SOLIDIFICATION +SOLIDIFIED +SOLIDIFIES +SOLIDIFY +SOLIDIFYING +SOLIDITY +SOLIDLY +SOLIDNESS +SOLIDS +SOLILOQUY +SOLITAIRE +SOLITARY +SOLITUDE +SOLITUDES +SOLLY +SOLO +SOLOMON +SOLON +SOLOS +SOLOVIEV +SOLSTICE +SOLUBILITY +SOLUBLE +SOLUTION +SOLUTIONS +SOLVABLE +SOLVE +SOLVED +SOLVENT +SOLVENTS +SOLVER +SOLVERS +SOLVES +SOLVING +SOMALI +SOMALIA +SOMALIS +SOMATIC +SOMBER +SOMBERLY +SOME +SOMEBODY +SOMEDAY +SOMEHOW +SOMEONE +SOMEPLACE +SOMERS +SOMERSAULT +SOMERSET +SOMERVILLE +SOMETHING +SOMETIME +SOMETIMES +SOMEWHAT +SOMEWHERE +SOMMELIER +SOMMERFELD +SOMNOLENT +SON +SONAR +SONATA +SONENBERG +SONG +SONGBOOK +SONGS +SONIC +SONNET +SONNETS +SONNY +SONOMA +SONORA +SONS +SONY +SOON +SOONER +SOONEST +SOOT +SOOTH +SOOTHE +SOOTHED +SOOTHER +SOOTHES +SOOTHING +SOOTHSAYER +SOPHIA +SOPHIAS +SOPHIE +SOPHISTICATED +SOPHISTICATION +SOPHISTRY +SOPHOCLEAN +SOPHOCLES +SOPHOMORE +SOPHOMORES +SOPRANO +SORCERER +SORCERERS +SORCERY +SORDID +SORDIDLY +SORDIDNESS +SORE +SORELY +SORENESS +SORENSEN +SORENSON +SORER +SORES +SOREST +SORGHUM +SORORITY +SORREL +SORRENTINE +SORRIER +SORRIEST +SORROW +SORROWFUL +SORROWFULLY +SORROWS +SORRY +SORT +SORTED +SORTER +SORTERS +SORTIE +SORTING +SORTS +SOUGHT +SOUL +SOULFUL +SOULS +SOUND +SOUNDED +SOUNDER +SOUNDEST +SOUNDING +SOUNDINGS +SOUNDLY +SOUNDNESS +SOUNDPROOF +SOUNDS +SOUP +SOUPED +SOUPS +SOUR +SOURCE +SOURCES +SOURDOUGH +SOURED +SOURER +SOUREST +SOURING +SOURLY +SOURNESS +SOURS +SOUSA +SOUTH +SOUTHAMPTON +SOUTHBOUND +SOUTHEAST +SOUTHEASTERN +SOUTHERN +SOUTHERNER +SOUTHERNERS +SOUTHERNMOST +SOUTHERNWOOD +SOUTHEY +SOUTHFIELD +SOUTHLAND +SOUTHPAW +SOUTHWARD +SOUTHWEST +SOUTHWESTERN +SOUVENIR +SOVEREIGN +SOVEREIGNS +SOVEREIGNTY +SOVIET +SOVIETS +SOW +SOWN +SOY +SOYA +SOYBEAN +SPA +SPACE +SPACECRAFT +SPACED +SPACER +SPACERS +SPACES +SPACESHIP +SPACESHIPS +SPACESUIT +SPACEWAR +SPACING +SPACINGS +SPACIOUS +SPADED +SPADES +SPADING +SPAFFORD +SPAHN +SPAIN +SPALDING +SPAN +SPANDREL +SPANIARD +SPANIARDIZATION +SPANIARDIZATIONS +SPANIARDIZE +SPANIARDIZES +SPANIARDS +SPANIEL +SPANISH +SPANISHIZE +SPANISHIZES +SPANK +SPANKED +SPANKING +SPANKS +SPANNED +SPANNER +SPANNERS +SPANNING +SPANS +SPARC +SPARCSTATION +SPARE +SPARED +SPARELY +SPARENESS +SPARER +SPARES +SPAREST +SPARING +SPARINGLY +SPARK +SPARKED +SPARKING +SPARKLE +SPARKLING +SPARKMAN +SPARKS +SPARRING +SPARROW +SPARROWS +SPARSE +SPARSELY +SPARSENESS +SPARSER +SPARSEST +SPARTA +SPARTAN +SPARTANIZE +SPARTANIZES +SPASM +SPASTIC +SPAT +SPATE +SPATES +SPATIAL +SPATIALLY +SPATTER +SPATTERED +SPATULA +SPAULDING +SPAWN +SPAWNED +SPAWNING +SPAWNS +SPAYED +SPEAK +SPEAKABLE +SPEAKEASY +SPEAKER +SPEAKERPHONE +SPEAKERPHONES +SPEAKERS +SPEAKING +SPEAKS +SPEAR +SPEARED +SPEARMINT +SPEARS +SPEC +SPECIAL +SPECIALIST +SPECIALISTS +SPECIALIZATION +SPECIALIZATIONS +SPECIALIZE +SPECIALIZED +SPECIALIZES +SPECIALIZING +SPECIALLY +SPECIALS +SPECIALTIES +SPECIALTY +SPECIE +SPECIES +SPECIFIABLE +SPECIFIC +SPECIFICALLY +SPECIFICATION +SPECIFICATIONS +SPECIFICITY +SPECIFICS +SPECIFIED +SPECIFIER +SPECIFIERS +SPECIFIES +SPECIFY +SPECIFYING +SPECIMEN +SPECIMENS +SPECIOUS +SPECK +SPECKLE +SPECKLED +SPECKLES +SPECKS +SPECTACLE +SPECTACLED +SPECTACLES +SPECTACULAR +SPECTACULARLY +SPECTATOR +SPECTATORS +SPECTER +SPECTERS +SPECTOR +SPECTRA +SPECTRAL +SPECTROGRAM +SPECTROGRAMS +SPECTROGRAPH +SPECTROGRAPHIC +SPECTROGRAPHY +SPECTROMETER +SPECTROPHOTOMETER +SPECTROPHOTOMETRY +SPECTROSCOPE +SPECTROSCOPIC +SPECTROSCOPY +SPECTRUM +SPECULATE +SPECULATED +SPECULATES +SPECULATING +SPECULATION +SPECULATIONS +SPECULATIVE +SPECULATOR +SPECULATORS +SPED +SPEECH +SPEECHES +SPEECHLESS +SPEECHLESSNESS +SPEED +SPEEDBOAT +SPEEDED +SPEEDER +SPEEDERS +SPEEDILY +SPEEDING +SPEEDOMETER +SPEEDS +SPEEDUP +SPEEDUPS +SPEEDY +SPELL +SPELLBOUND +SPELLED +SPELLER +SPELLERS +SPELLING +SPELLINGS +SPELLS +SPENCER +SPENCERIAN +SPEND +SPENDER +SPENDERS +SPENDING +SPENDS +SPENGLERIAN +SPENT +SPERM +SPERRY +SPHERE +SPHERES +SPHERICAL +SPHERICALLY +SPHEROID +SPHEROIDAL +SPHINX +SPICA +SPICE +SPICED +SPICES +SPICINESS +SPICY +SPIDER +SPIDERS +SPIDERY +SPIEGEL +SPIES +SPIGOT +SPIKE +SPIKED +SPIKES +SPILL +SPILLED +SPILLER +SPILLING +SPILLS +SPILT +SPIN +SPINACH +SPINAL +SPINALLY +SPINDLE +SPINDLED +SPINDLING +SPINE +SPINNAKER +SPINNER +SPINNERS +SPINNING +SPINOFF +SPINS +SPINSTER +SPINY +SPIRAL +SPIRALED +SPIRALING +SPIRALLY +SPIRE +SPIRES +SPIRIT +SPIRITED +SPIRITEDLY +SPIRITING +SPIRITS +SPIRITUAL +SPIRITUALLY +SPIRITUALS +SPIRO +SPIT +SPITE +SPITED +SPITEFUL +SPITEFULLY +SPITEFULNESS +SPITES +SPITFIRE +SPITING +SPITS +SPITTING +SPITTLE +SPITZ +SPLASH +SPLASHED +SPLASHES +SPLASHING +SPLASHY +SPLEEN +SPLENDID +SPLENDIDLY +SPLENDOR +SPLENETIC +SPLICE +SPLICED +SPLICER +SPLICERS +SPLICES +SPLICING +SPLICINGS +SPLINE +SPLINES +SPLINT +SPLINTER +SPLINTERED +SPLINTERS +SPLINTERY +SPLIT +SPLITS +SPLITTER +SPLITTERS +SPLITTING +SPLURGE +SPOIL +SPOILAGE +SPOILED +SPOILER +SPOILERS +SPOILING +SPOILS +SPOKANE +SPOKE +SPOKED +SPOKEN +SPOKES +SPOKESMAN +SPOKESMEN +SPONGE +SPONGED +SPONGER +SPONGERS +SPONGES +SPONGING +SPONGY +SPONSOR +SPONSORED +SPONSORING +SPONSORS +SPONSORSHIP +SPONTANEITY +SPONTANEOUS +SPONTANEOUSLY +SPOOF +SPOOK +SPOOKY +SPOOL +SPOOLED +SPOOLER +SPOOLERS +SPOOLING +SPOOLS +SPOON +SPOONED +SPOONFUL +SPOONING +SPOONS +SPORADIC +SPORE +SPORES +SPORT +SPORTED +SPORTING +SPORTINGLY +SPORTIVE +SPORTS +SPORTSMAN +SPORTSMEN +SPORTSWEAR +SPORTSWRITER +SPORTSWRITING +SPORTY +SPOSATO +SPOT +SPOTLESS +SPOTLESSLY +SPOTLIGHT +SPOTS +SPOTTED +SPOTTER +SPOTTERS +SPOTTING +SPOTTY +SPOUSE +SPOUSES +SPOUT +SPOUTED +SPOUTING +SPOUTS +SPRAGUE +SPRAIN +SPRANG +SPRAWL +SPRAWLED +SPRAWLING +SPRAWLS +SPRAY +SPRAYED +SPRAYER +SPRAYING +SPRAYS +SPREAD +SPREADER +SPREADERS +SPREADING +SPREADINGS +SPREADS +SPREADSHEET +SPREE +SPREES +SPRIG +SPRIGHTLY +SPRING +SPRINGBOARD +SPRINGER +SPRINGERS +SPRINGFIELD +SPRINGIER +SPRINGIEST +SPRINGINESS +SPRINGING +SPRINGS +SPRINGTIME +SPRINGY +SPRINKLE +SPRINKLED +SPRINKLER +SPRINKLES +SPRINKLING +SPRINT +SPRINTED +SPRINTER +SPRINTERS +SPRINTING +SPRINTS +SPRITE +SPROCKET +SPROUL +SPROUT +SPROUTED +SPROUTING +SPRUCE +SPRUCED +SPRUNG +SPUDS +SPUN +SPUNK +SPUR +SPURIOUS +SPURN +SPURNED +SPURNING +SPURNS +SPURS +SPURT +SPURTED +SPURTING +SPURTS +SPUTTER +SPUTTERED +SPY +SPYGLASS +SPYING +SQUABBLE +SQUABBLED +SQUABBLES +SQUABBLING +SQUAD +SQUADRON +SQUADRONS +SQUADS +SQUALID +SQUALL +SQUALLS +SQUANDER +SQUARE +SQUARED +SQUARELY +SQUARENESS +SQUARER +SQUARES +SQUAREST +SQUARESVILLE +SQUARING +SQUASH +SQUASHED +SQUASHING +SQUAT +SQUATS +SQUATTING +SQUAW +SQUAWK +SQUAWKED +SQUAWKING +SQUAWKS +SQUEAK +SQUEAKED +SQUEAKING +SQUEAKS +SQUEAKY +SQUEAL +SQUEALED +SQUEALING +SQUEALS +SQUEAMISH +SQUEEZE +SQUEEZED +SQUEEZER +SQUEEZES +SQUEEZING +SQUELCH +SQUIBB +SQUID +SQUINT +SQUINTED +SQUINTING +SQUIRE +SQUIRES +SQUIRM +SQUIRMED +SQUIRMS +SQUIRMY +SQUIRREL +SQUIRRELED +SQUIRRELING +SQUIRRELS +SQUIRT +SQUISHY +SRI +STAB +STABBED +STABBING +STABILE +STABILITIES +STABILITY +STABILIZE +STABILIZED +STABILIZER +STABILIZERS +STABILIZES +STABILIZING +STABLE +STABLED +STABLER +STABLES +STABLING +STABLY +STABS +STACK +STACKED +STACKING +STACKS +STACY +STADIA +STADIUM +STAFF +STAFFED +STAFFER +STAFFERS +STAFFING +STAFFORD +STAFFORDSHIRE +STAFFS +STAG +STAGE +STAGECOACH +STAGECOACHES +STAGED +STAGER +STAGERS +STAGES +STAGGER +STAGGERED +STAGGERING +STAGGERS +STAGING +STAGNANT +STAGNATE +STAGNATION +STAGS +STAHL +STAID +STAIN +STAINED +STAINING +STAINLESS +STAINS +STAIR +STAIRCASE +STAIRCASES +STAIRS +STAIRWAY +STAIRWAYS +STAIRWELL +STAKE +STAKED +STAKES +STALACTITE +STALE +STALEMATE +STALEY +STALIN +STALINIST +STALINS +STALK +STALKED +STALKING +STALL +STALLED +STALLING +STALLINGS +STALLION +STALLS +STALWART +STALWARTLY +STAMEN +STAMENS +STAMFORD +STAMINA +STAMMER +STAMMERED +STAMMERER +STAMMERING +STAMMERS +STAMP +STAMPED +STAMPEDE +STAMPEDED +STAMPEDES +STAMPEDING +STAMPER +STAMPERS +STAMPING +STAMPS +STAN +STANCH +STANCHEST +STANCHION +STAND +STANDARD +STANDARDIZATION +STANDARDIZE +STANDARDIZED +STANDARDIZES +STANDARDIZING +STANDARDLY +STANDARDS +STANDBY +STANDING +STANDINGS +STANDISH +STANDOFF +STANDPOINT +STANDPOINTS +STANDS +STANDSTILL +STANFORD +STANHOPE +STANLEY +STANS +STANTON +STANZA +STANZAS +STAPHYLOCOCCUS +STAPLE +STAPLER +STAPLES +STAPLETON +STAPLING +STAR +STARBOARD +STARCH +STARCHED +STARDOM +STARE +STARED +STARER +STARES +STARFISH +STARGATE +STARING +STARK +STARKEY +STARKLY +STARLET +STARLIGHT +STARLING +STARR +STARRED +STARRING +STARRY +STARS +START +STARTED +STARTER +STARTERS +STARTING +STARTLE +STARTLED +STARTLES +STARTLING +STARTS +STARTUP +STARTUPS +STARVATION +STARVE +STARVED +STARVES +STARVING +STATE +STATED +STATELY +STATEMENT +STATEMENTS +STATEN +STATES +STATESMAN +STATESMANLIKE +STATESMEN +STATEWIDE +STATIC +STATICALLY +STATING +STATION +STATIONARY +STATIONED +STATIONER +STATIONERY +STATIONING +STATIONMASTER +STATIONS +STATISTIC +STATISTICAL +STATISTICALLY +STATISTICIAN +STATISTICIANS +STATISTICS +STATLER +STATUE +STATUES +STATUESQUE +STATUESQUELY +STATUESQUENESS +STATUETTE +STATURE +STATUS +STATUSES +STATUTE +STATUTES +STATUTORILY +STATUTORINESS +STATUTORY +STAUFFER +STAUNCH +STAUNCHEST +STAUNCHLY +STAUNTON +STAVE +STAVED +STAVES +STAY +STAYED +STAYING +STAYS +STEAD +STEADFAST +STEADFASTLY +STEADFASTNESS +STEADIED +STEADIER +STEADIES +STEADIEST +STEADILY +STEADINESS +STEADY +STEADYING +STEAK +STEAKS +STEAL +STEALER +STEALING +STEALS +STEALTH +STEALTHILY +STEALTHY +STEAM +STEAMBOAT +STEAMBOATS +STEAMED +STEAMER +STEAMERS +STEAMING +STEAMS +STEAMSHIP +STEAMSHIPS +STEAMY +STEARNS +STEED +STEEL +STEELE +STEELED +STEELERS +STEELING +STEELMAKER +STEELS +STEELY +STEEN +STEEP +STEEPED +STEEPER +STEEPEST +STEEPING +STEEPLE +STEEPLES +STEEPLY +STEEPNESS +STEEPS +STEER +STEERABLE +STEERED +STEERING +STEERS +STEFAN +STEGOSAURUS +STEINBECK +STEINBERG +STEINER +STELLA +STELLAR +STEM +STEMMED +STEMMING +STEMS +STENCH +STENCHES +STENCIL +STENCILS +STENDHAL +STENDLER +STENOGRAPHER +STENOGRAPHERS +STENOTYPE +STEP +STEPCHILD +STEPHAN +STEPHANIE +STEPHEN +STEPHENS +STEPHENSON +STEPMOTHER +STEPMOTHERS +STEPPED +STEPPER +STEPPING +STEPS +STEPSON +STEPWISE +STEREO +STEREOS +STEREOSCOPIC +STEREOTYPE +STEREOTYPED +STEREOTYPES +STEREOTYPICAL +STERILE +STERILIZATION +STERILIZATIONS +STERILIZE +STERILIZED +STERILIZER +STERILIZES +STERILIZING +STERLING +STERN +STERNBERG +STERNLY +STERNNESS +STERNO +STERNS +STETHOSCOPE +STETSON +STETSONS +STEUBEN +STEVE +STEVEDORE +STEVEN +STEVENS +STEVENSON +STEVIE +STEW +STEWARD +STEWARDESS +STEWARDS +STEWART +STEWED +STEWS +STICK +STICKER +STICKERS +STICKIER +STICKIEST +STICKILY +STICKINESS +STICKING +STICKLEBACK +STICKS +STICKY +STIFF +STIFFEN +STIFFENS +STIFFER +STIFFEST +STIFFLY +STIFFNESS +STIFFS +STIFLE +STIFLED +STIFLES +STIFLING +STIGMA +STIGMATA +STILE +STILES +STILETTO +STILL +STILLBIRTH +STILLBORN +STILLED +STILLER +STILLEST +STILLING +STILLNESS +STILLS +STILLWELL +STILT +STILTS +STIMSON +STIMULANT +STIMULANTS +STIMULATE +STIMULATED +STIMULATES +STIMULATING +STIMULATION +STIMULATIONS +STIMULATIVE +STIMULI +STIMULUS +STING +STINGING +STINGS +STINGY +STINK +STINKER +STINKERS +STINKING +STINKS +STINT +STIPEND +STIPENDS +STIPULATE +STIPULATED +STIPULATES +STIPULATING +STIPULATION +STIPULATIONS +STIR +STIRLING +STIRRED +STIRRER +STIRRERS +STIRRING +STIRRINGLY +STIRRINGS +STIRRUP +STIRS +STITCH +STITCHED +STITCHES +STITCHING +STOCHASTIC +STOCHASTICALLY +STOCK +STOCKADE +STOCKADES +STOCKBROKER +STOCKED +STOCKER +STOCKERS +STOCKHOLDER +STOCKHOLDERS +STOCKHOLM +STOCKING +STOCKINGS +STOCKPILE +STOCKROOM +STOCKS +STOCKTON +STOCKY +STODGY +STOICHIOMETRY +STOKE +STOKES +STOLE +STOLEN +STOLES +STOLID +STOMACH +STOMACHED +STOMACHER +STOMACHES +STOMACHING +STOMP +STONE +STONED +STONEHENGE +STONES +STONING +STONY +STOOD +STOOGE +STOOL +STOOP +STOOPED +STOOPING +STOOPS +STOP +STOPCOCK +STOPCOCKS +STOPGAP +STOPOVER +STOPPABLE +STOPPAGE +STOPPED +STOPPER +STOPPERS +STOPPING +STOPS +STOPWATCH +STORAGE +STORAGES +STORE +STORED +STOREHOUSE +STOREHOUSES +STOREKEEPER +STOREROOM +STORES +STOREY +STOREYED +STOREYS +STORIED +STORIES +STORING +STORK +STORKS +STORM +STORMED +STORMIER +STORMIEST +STORMINESS +STORMING +STORMS +STORMY +STORY +STORYBOARD +STORYTELLER +STOUFFER +STOUT +STOUTER +STOUTEST +STOUTLY +STOUTNESS +STOVE +STOVES +STOW +STOWE +STOWED +STRADDLE +STRAFE +STRAGGLE +STRAGGLED +STRAGGLER +STRAGGLERS +STRAGGLES +STRAGGLING +STRAIGHT +STRAIGHTAWAY +STRAIGHTEN +STRAIGHTENED +STRAIGHTENS +STRAIGHTER +STRAIGHTEST +STRAIGHTFORWARD +STRAIGHTFORWARDLY +STRAIGHTFORWARDNESS +STRAIGHTNESS +STRAIGHTWAY +STRAIN +STRAINED +STRAINER +STRAINERS +STRAINING +STRAINS +STRAIT +STRAITEN +STRAITS +STRAND +STRANDED +STRANDING +STRANDS +STRANGE +STRANGELY +STRANGENESS +STRANGER +STRANGERS +STRANGEST +STRANGLE +STRANGLED +STRANGLER +STRANGLERS +STRANGLES +STRANGLING +STRANGLINGS +STRANGULATION +STRANGULATIONS +STRAP +STRAPS +STRASBOURG +STRATAGEM +STRATAGEMS +STRATEGIC +STRATEGIES +STRATEGIST +STRATEGY +STRATFORD +STRATIFICATION +STRATIFICATIONS +STRATIFIED +STRATIFIES +STRATIFY +STRATOSPHERE +STRATOSPHERIC +STRATTON +STRATUM +STRAUSS +STRAVINSKY +STRAW +STRAWBERRIES +STRAWBERRY +STRAWS +STRAY +STRAYED +STRAYS +STREAK +STREAKED +STREAKS +STREAM +STREAMED +STREAMER +STREAMERS +STREAMING +STREAMLINE +STREAMLINED +STREAMLINER +STREAMLINES +STREAMLINING +STREAMS +STREET +STREETCAR +STREETCARS +STREETERS +STREETS +STRENGTH +STRENGTHEN +STRENGTHENED +STRENGTHENER +STRENGTHENING +STRENGTHENS +STRENGTHS +STRENUOUS +STRENUOUSLY +STREPTOCOCCUS +STRESS +STRESSED +STRESSES +STRESSFUL +STRESSING +STRETCH +STRETCHED +STRETCHER +STRETCHERS +STRETCHES +STRETCHING +STREW +STREWN +STREWS +STRICKEN +STRICKLAND +STRICT +STRICTER +STRICTEST +STRICTLY +STRICTNESS +STRICTURE +STRIDE +STRIDER +STRIDES +STRIDING +STRIFE +STRIKE +STRIKEBREAKER +STRIKER +STRIKERS +STRIKES +STRIKING +STRIKINGLY +STRINDBERG +STRING +STRINGED +STRINGENT +STRINGENTLY +STRINGER +STRINGERS +STRINGIER +STRINGIEST +STRINGINESS +STRINGING +STRINGS +STRINGY +STRIP +STRIPE +STRIPED +STRIPES +STRIPPED +STRIPPER +STRIPPERS +STRIPPING +STRIPS +STRIPTEASE +STRIVE +STRIVEN +STRIVES +STRIVING +STRIVINGS +STROBE +STROBED +STROBES +STROBOSCOPIC +STRODE +STROKE +STROKED +STROKER +STROKERS +STROKES +STROKING +STROLL +STROLLED +STROLLER +STROLLING +STROLLS +STROM +STROMBERG +STRONG +STRONGER +STRONGEST +STRONGHEART +STRONGHOLD +STRONGLY +STRONTIUM +STROVE +STRUCK +STRUCTURAL +STRUCTURALLY +STRUCTURE +STRUCTURED +STRUCTURER +STRUCTURES +STRUCTURING +STRUGGLE +STRUGGLED +STRUGGLES +STRUGGLING +STRUNG +STRUT +STRUTS +STRUTTING +STRYCHNINE +STU +STUART +STUB +STUBBLE +STUBBLEFIELD +STUBBLEFIELDS +STUBBORN +STUBBORNLY +STUBBORNNESS +STUBBY +STUBS +STUCCO +STUCK +STUD +STUDEBAKER +STUDENT +STUDENTS +STUDIED +STUDIES +STUDIO +STUDIOS +STUDIOUS +STUDIOUSLY +STUDS +STUDY +STUDYING +STUFF +STUFFED +STUFFIER +STUFFIEST +STUFFING +STUFFS +STUFFY +STUMBLE +STUMBLED +STUMBLES +STUMBLING +STUMP +STUMPED +STUMPING +STUMPS +STUN +STUNG +STUNNING +STUNNINGLY +STUNT +STUNTS +STUPEFY +STUPEFYING +STUPENDOUS +STUPENDOUSLY +STUPID +STUPIDEST +STUPIDITIES +STUPIDITY +STUPIDLY +STUPOR +STURBRIDGE +STURDINESS +STURDY +STURGEON +STURM +STUTTER +STUTTGART +STUYVESANT +STYGIAN +STYLE +STYLED +STYLER +STYLERS +STYLES +STYLI +STYLING +STYLISH +STYLISHLY +STYLISHNESS +STYLISTIC +STYLISTICALLY +STYLIZED +STYLUS +STYROFOAM +STYX +SUAVE +SUB +SUBATOMIC +SUBCHANNEL +SUBCHANNELS +SUBCLASS +SUBCLASSES +SUBCOMMITTEES +SUBCOMPONENT +SUBCOMPONENTS +SUBCOMPUTATION +SUBCOMPUTATIONS +SUBCONSCIOUS +SUBCONSCIOUSLY +SUBCULTURE +SUBCULTURES +SUBCYCLE +SUBCYCLES +SUBDIRECTORIES +SUBDIRECTORY +SUBDIVIDE +SUBDIVIDED +SUBDIVIDES +SUBDIVIDING +SUBDIVISION +SUBDIVISIONS +SUBDOMAINS +SUBDUE +SUBDUED +SUBDUES +SUBDUING +SUBEXPRESSION +SUBEXPRESSIONS +SUBFIELD +SUBFIELDS +SUBFILE +SUBFILES +SUBGOAL +SUBGOALS +SUBGRAPH +SUBGRAPHS +SUBGROUP +SUBGROUPS +SUBINTERVAL +SUBINTERVALS +SUBJECT +SUBJECTED +SUBJECTING +SUBJECTION +SUBJECTIVE +SUBJECTIVELY +SUBJECTIVITY +SUBJECTS +SUBLANGUAGE +SUBLANGUAGES +SUBLAYER +SUBLAYERS +SUBLIMATION +SUBLIMATIONS +SUBLIME +SUBLIMED +SUBLIST +SUBLISTS +SUBMARINE +SUBMARINER +SUBMARINERS +SUBMARINES +SUBMERGE +SUBMERGED +SUBMERGES +SUBMERGING +SUBMISSION +SUBMISSIONS +SUBMISSIVE +SUBMIT +SUBMITS +SUBMITTAL +SUBMITTED +SUBMITTING +SUBMODE +SUBMODES +SUBMODULE +SUBMODULES +SUBMULTIPLEXED +SUBNET +SUBNETS +SUBNETWORK +SUBNETWORKS +SUBOPTIMAL +SUBORDINATE +SUBORDINATED +SUBORDINATES +SUBORDINATION +SUBPARTS +SUBPHASES +SUBPOENA +SUBPROBLEM +SUBPROBLEMS +SUBPROCESSES +SUBPROGRAM +SUBPROGRAMS +SUBPROJECT +SUBPROOF +SUBPROOFS +SUBRANGE +SUBRANGES +SUBROUTINE +SUBROUTINES +SUBS +SUBSCHEMA +SUBSCHEMAS +SUBSCRIBE +SUBSCRIBED +SUBSCRIBER +SUBSCRIBERS +SUBSCRIBES +SUBSCRIBING +SUBSCRIPT +SUBSCRIPTED +SUBSCRIPTING +SUBSCRIPTION +SUBSCRIPTIONS +SUBSCRIPTS +SUBSECTION +SUBSECTIONS +SUBSEGMENT +SUBSEGMENTS +SUBSEQUENCE +SUBSEQUENCES +SUBSEQUENT +SUBSEQUENTLY +SUBSERVIENT +SUBSET +SUBSETS +SUBSIDE +SUBSIDED +SUBSIDES +SUBSIDIARIES +SUBSIDIARY +SUBSIDIES +SUBSIDING +SUBSIDIZE +SUBSIDIZED +SUBSIDIZES +SUBSIDIZING +SUBSIDY +SUBSIST +SUBSISTED +SUBSISTENCE +SUBSISTENT +SUBSISTING +SUBSISTS +SUBSLOT +SUBSLOTS +SUBSPACE +SUBSPACES +SUBSTANCE +SUBSTANCES +SUBSTANTIAL +SUBSTANTIALLY +SUBSTANTIATE +SUBSTANTIATED +SUBSTANTIATES +SUBSTANTIATING +SUBSTANTIATION +SUBSTANTIATIONS +SUBSTANTIVE +SUBSTANTIVELY +SUBSTANTIVITY +SUBSTATION +SUBSTATIONS +SUBSTITUTABILITY +SUBSTITUTABLE +SUBSTITUTE +SUBSTITUTED +SUBSTITUTES +SUBSTITUTING +SUBSTITUTION +SUBSTITUTIONS +SUBSTRATE +SUBSTRATES +SUBSTRING +SUBSTRINGS +SUBSTRUCTURE +SUBSTRUCTURES +SUBSUME +SUBSUMED +SUBSUMES +SUBSUMING +SUBSYSTEM +SUBSYSTEMS +SUBTASK +SUBTASKS +SUBTERFUGE +SUBTERRANEAN +SUBTITLE +SUBTITLED +SUBTITLES +SUBTLE +SUBTLENESS +SUBTLER +SUBTLEST +SUBTLETIES +SUBTLETY +SUBTLY +SUBTOTAL +SUBTRACT +SUBTRACTED +SUBTRACTING +SUBTRACTION +SUBTRACTIONS +SUBTRACTOR +SUBTRACTORS +SUBTRACTS +SUBTRAHEND +SUBTRAHENDS +SUBTREE +SUBTREES +SUBUNIT +SUBUNITS +SUBURB +SUBURBAN +SUBURBIA +SUBURBS +SUBVERSION +SUBVERSIVE +SUBVERT +SUBVERTED +SUBVERTER +SUBVERTING +SUBVERTS +SUBWAY +SUBWAYS +SUCCEED +SUCCEEDED +SUCCEEDING +SUCCEEDS +SUCCESS +SUCCESSES +SUCCESSFUL +SUCCESSFULLY +SUCCESSION +SUCCESSIONS +SUCCESSIVE +SUCCESSIVELY +SUCCESSOR +SUCCESSORS +SUCCINCT +SUCCINCTLY +SUCCINCTNESS +SUCCOR +SUCCUMB +SUCCUMBED +SUCCUMBING +SUCCUMBS +SUCH +SUCK +SUCKED +SUCKER +SUCKERS +SUCKING +SUCKLE +SUCKLING +SUCKS +SUCTION +SUDAN +SUDANESE +SUDANIC +SUDDEN +SUDDENLY +SUDDENNESS +SUDS +SUDSING +SUE +SUED +SUES +SUEZ +SUFFER +SUFFERANCE +SUFFERED +SUFFERER +SUFFERERS +SUFFERING +SUFFERINGS +SUFFERS +SUFFICE +SUFFICED +SUFFICES +SUFFICIENCY +SUFFICIENT +SUFFICIENTLY +SUFFICING +SUFFIX +SUFFIXED +SUFFIXER +SUFFIXES +SUFFIXING +SUFFOCATE +SUFFOCATED +SUFFOCATES +SUFFOCATING +SUFFOCATION +SUFFOLK +SUFFRAGE +SUFFRAGETTE +SUGAR +SUGARED +SUGARING +SUGARINGS +SUGARS +SUGGEST +SUGGESTED +SUGGESTIBLE +SUGGESTING +SUGGESTION +SUGGESTIONS +SUGGESTIVE +SUGGESTIVELY +SUGGESTS +SUICIDAL +SUICIDALLY +SUICIDE +SUICIDES +SUING +SUIT +SUITABILITY +SUITABLE +SUITABLENESS +SUITABLY +SUITCASE +SUITCASES +SUITE +SUITED +SUITERS +SUITES +SUITING +SUITOR +SUITORS +SUITS +SUKARNO +SULFA +SULFUR +SULFURIC +SULFUROUS +SULK +SULKED +SULKINESS +SULKING +SULKS +SULKY +SULLEN +SULLENLY +SULLENNESS +SULLIVAN +SULPHATE +SULPHUR +SULPHURED +SULPHURIC +SULTAN +SULTANS +SULTRY +SULZBERGER +SUM +SUMAC +SUMATRA +SUMERIA +SUMERIAN +SUMMAND +SUMMANDS +SUMMARIES +SUMMARILY +SUMMARIZATION +SUMMARIZATIONS +SUMMARIZE +SUMMARIZED +SUMMARIZES +SUMMARIZING +SUMMARY +SUMMATION +SUMMATIONS +SUMMED +SUMMER +SUMMERDALE +SUMMERS +SUMMERTIME +SUMMING +SUMMIT +SUMMITRY +SUMMON +SUMMONED +SUMMONER +SUMMONERS +SUMMONING +SUMMONS +SUMMONSES +SUMNER +SUMPTUOUS +SUMS +SUMTER +SUN +SUNBEAM +SUNBEAMS +SUNBELT +SUNBONNET +SUNBURN +SUNBURNT +SUNDAY +SUNDAYS +SUNDER +SUNDIAL +SUNDOWN +SUNDRIES +SUNDRY +SUNFLOWER +SUNG +SUNGLASS +SUNGLASSES +SUNK +SUNKEN +SUNLIGHT +SUNLIT +SUNNED +SUNNING +SUNNY +SUNNYVALE +SUNRISE +SUNS +SUNSET +SUNSHINE +SUNSPOT +SUNTAN +SUNTANNED +SUNTANNING +SUPER +SUPERB +SUPERBLOCK +SUPERBLY +SUPERCOMPUTER +SUPERCOMPUTERS +SUPEREGO +SUPEREGOS +SUPERFICIAL +SUPERFICIALLY +SUPERFLUITIES +SUPERFLUITY +SUPERFLUOUS +SUPERFLUOUSLY +SUPERGROUP +SUPERGROUPS +SUPERHUMAN +SUPERHUMANLY +SUPERIMPOSE +SUPERIMPOSED +SUPERIMPOSES +SUPERIMPOSING +SUPERINTEND +SUPERINTENDENT +SUPERINTENDENTS +SUPERIOR +SUPERIORITY +SUPERIORS +SUPERLATIVE +SUPERLATIVELY +SUPERLATIVES +SUPERMARKET +SUPERMARKETS +SUPERMINI +SUPERMINIS +SUPERNATURAL +SUPERPOSE +SUPERPOSED +SUPERPOSES +SUPERPOSING +SUPERPOSITION +SUPERSCRIPT +SUPERSCRIPTED +SUPERSCRIPTING +SUPERSCRIPTS +SUPERSEDE +SUPERSEDED +SUPERSEDES +SUPERSEDING +SUPERSET +SUPERSETS +SUPERSTITION +SUPERSTITIONS +SUPERSTITIOUS +SUPERUSER +SUPERVISE +SUPERVISED +SUPERVISES +SUPERVISING +SUPERVISION +SUPERVISOR +SUPERVISORS +SUPERVISORY +SUPINE +SUPPER +SUPPERS +SUPPLANT +SUPPLANTED +SUPPLANTING +SUPPLANTS +SUPPLE +SUPPLEMENT +SUPPLEMENTAL +SUPPLEMENTARY +SUPPLEMENTED +SUPPLEMENTING +SUPPLEMENTS +SUPPLENESS +SUPPLICATION +SUPPLIED +SUPPLIER +SUPPLIERS +SUPPLIES +SUPPLY +SUPPLYING +SUPPORT +SUPPORTABLE +SUPPORTED +SUPPORTER +SUPPORTERS +SUPPORTING +SUPPORTINGLY +SUPPORTIVE +SUPPORTIVELY +SUPPORTS +SUPPOSE +SUPPOSED +SUPPOSEDLY +SUPPOSES +SUPPOSING +SUPPOSITION +SUPPOSITIONS +SUPPRESS +SUPPRESSED +SUPPRESSES +SUPPRESSING +SUPPRESSION +SUPPRESSOR +SUPPRESSORS +SUPRANATIONAL +SUPREMACY +SUPREME +SUPREMELY +SURCHARGE +SURE +SURELY +SURENESS +SURETIES +SURETY +SURF +SURFACE +SURFACED +SURFACENESS +SURFACES +SURFACING +SURGE +SURGED +SURGEON +SURGEONS +SURGERY +SURGES +SURGICAL +SURGICALLY +SURGING +SURLINESS +SURLY +SURMISE +SURMISED +SURMISES +SURMOUNT +SURMOUNTED +SURMOUNTING +SURMOUNTS +SURNAME +SURNAMES +SURPASS +SURPASSED +SURPASSES +SURPASSING +SURPLUS +SURPLUSES +SURPRISE +SURPRISED +SURPRISES +SURPRISING +SURPRISINGLY +SURREAL +SURRENDER +SURRENDERED +SURRENDERING +SURRENDERS +SURREPTITIOUS +SURREY +SURROGATE +SURROGATES +SURROUND +SURROUNDED +SURROUNDING +SURROUNDINGS +SURROUNDS +SURTAX +SURVEY +SURVEYED +SURVEYING +SURVEYOR +SURVEYORS +SURVEYS +SURVIVAL +SURVIVALS +SURVIVE +SURVIVED +SURVIVES +SURVIVING +SURVIVOR +SURVIVORS +SUS +SUSAN +SUSANNE +SUSCEPTIBLE +SUSIE +SUSPECT +SUSPECTED +SUSPECTING +SUSPECTS +SUSPEND +SUSPENDED +SUSPENDER +SUSPENDERS +SUSPENDING +SUSPENDS +SUSPENSE +SUSPENSES +SUSPENSION +SUSPENSIONS +SUSPICION +SUSPICIONS +SUSPICIOUS +SUSPICIOUSLY +SUSQUEHANNA +SUSSEX +SUSTAIN +SUSTAINED +SUSTAINING +SUSTAINS +SUSTENANCE +SUTHERLAND +SUTTON +SUTURE +SUTURES +SUWANEE +SUZANNE +SUZERAINTY +SUZUKI +SVELTE +SVETLANA +SWAB +SWABBING +SWAGGER +SWAGGERED +SWAGGERING +SWAHILI +SWAIN +SWAINS +SWALLOW +SWALLOWED +SWALLOWING +SWALLOWS +SWALLOWTAIL +SWAM +SWAMI +SWAMP +SWAMPED +SWAMPING +SWAMPS +SWAMPY +SWAN +SWANK +SWANKY +SWANLIKE +SWANS +SWANSEA +SWANSON +SWAP +SWAPPED +SWAPPING +SWAPS +SWARM +SWARMED +SWARMING +SWARMS +SWARTHMORE +SWARTHOUT +SWARTHY +SWARTZ +SWASTIKA +SWAT +SWATTED +SWAY +SWAYED +SWAYING +SWAZILAND +SWEAR +SWEARER +SWEARING +SWEARS +SWEAT +SWEATED +SWEATER +SWEATERS +SWEATING +SWEATS +SWEATSHIRT +SWEATY +SWEDE +SWEDEN +SWEDES +SWEDISH +SWEENEY +SWEENEYS +SWEEP +SWEEPER +SWEEPERS +SWEEPING +SWEEPINGS +SWEEPS +SWEEPSTAKES +SWEET +SWEETEN +SWEETENED +SWEETENER +SWEETENERS +SWEETENING +SWEETENINGS +SWEETENS +SWEETER +SWEETEST +SWEETHEART +SWEETHEARTS +SWEETISH +SWEETLY +SWEETNESS +SWEETS +SWELL +SWELLED +SWELLING +SWELLINGS +SWELLS +SWELTER +SWENSON +SWEPT +SWERVE +SWERVED +SWERVES +SWERVING +SWIFT +SWIFTER +SWIFTEST +SWIFTLY +SWIFTNESS +SWIM +SWIMMER +SWIMMERS +SWIMMING +SWIMMINGLY +SWIMS +SWIMSUIT +SWINBURNE +SWINDLE +SWINE +SWING +SWINGER +SWINGERS +SWINGING +SWINGS +SWINK +SWIPE +SWIRL +SWIRLED +SWIRLING +SWISH +SWISHED +SWISS +SWITCH +SWITCHBLADE +SWITCHBOARD +SWITCHBOARDS +SWITCHED +SWITCHER +SWITCHERS +SWITCHES +SWITCHING +SWITCHINGS +SWITCHMAN +SWITZER +SWITZERLAND +SWIVEL +SWIZZLE +SWOLLEN +SWOON +SWOOP +SWOOPED +SWOOPING +SWOOPS +SWORD +SWORDFISH +SWORDS +SWORE +SWORN +SWUM +SWUNG +SYBIL +SYCAMORE +SYCOPHANT +SYCOPHANTIC +SYDNEY +SYKES +SYLLABLE +SYLLABLES +SYLLOGISM +SYLLOGISMS +SYLLOGISTIC +SYLOW +SYLVAN +SYLVANIA +SYLVESTER +SYLVIA +SYLVIE +SYMBIOSIS +SYMBIOTIC +SYMBOL +SYMBOLIC +SYMBOLICALLY +SYMBOLICS +SYMBOLISM +SYMBOLIZATION +SYMBOLIZE +SYMBOLIZED +SYMBOLIZES +SYMBOLIZING +SYMBOLS +SYMINGTON +SYMMETRIC +SYMMETRICAL +SYMMETRICALLY +SYMMETRIES +SYMMETRY +SYMPATHETIC +SYMPATHIES +SYMPATHIZE +SYMPATHIZED +SYMPATHIZER +SYMPATHIZERS +SYMPATHIZES +SYMPATHIZING +SYMPATHIZINGLY +SYMPATHY +SYMPHONIC +SYMPHONIES +SYMPHONY +SYMPOSIA +SYMPOSIUM +SYMPOSIUMS +SYMPTOM +SYMPTOMATIC +SYMPTOMS +SYNAGOGUE +SYNAPSE +SYNAPSES +SYNAPTIC +SYNCHRONISM +SYNCHRONIZATION +SYNCHRONIZE +SYNCHRONIZED +SYNCHRONIZER +SYNCHRONIZERS +SYNCHRONIZES +SYNCHRONIZING +SYNCHRONOUS +SYNCHRONOUSLY +SYNCHRONY +SYNCHROTRON +SYNCOPATE +SYNDICATE +SYNDICATED +SYNDICATES +SYNDICATION +SYNDROME +SYNDROMES +SYNERGISM +SYNERGISTIC +SYNERGY +SYNGE +SYNOD +SYNONYM +SYNONYMOUS +SYNONYMOUSLY +SYNONYMS +SYNOPSES +SYNOPSIS +SYNTACTIC +SYNTACTICAL +SYNTACTICALLY +SYNTAX +SYNTAXES +SYNTHESIS +SYNTHESIZE +SYNTHESIZED +SYNTHESIZER +SYNTHESIZERS +SYNTHESIZES +SYNTHESIZING +SYNTHETIC +SYNTHETICS +SYRACUSE +SYRIA +SYRIAN +SYRIANIZE +SYRIANIZES +SYRIANS +SYRINGE +SYRINGES +SYRUP +SYRUPY +SYSTEM +SYSTEMATIC +SYSTEMATICALLY +SYSTEMATIZE +SYSTEMATIZED +SYSTEMATIZES +SYSTEMATIZING +SYSTEMIC +SYSTEMS +SYSTEMWIDE +SZILARD +TAB +TABERNACLE +TABERNACLES +TABLE +TABLEAU +TABLEAUS +TABLECLOTH +TABLECLOTHS +TABLED +TABLES +TABLESPOON +TABLESPOONFUL +TABLESPOONFULS +TABLESPOONS +TABLET +TABLETS +TABLING +TABOO +TABOOS +TABS +TABULAR +TABULATE +TABULATED +TABULATES +TABULATING +TABULATION +TABULATIONS +TABULATOR +TABULATORS +TACHOMETER +TACHOMETERS +TACIT +TACITLY +TACITUS +TACK +TACKED +TACKING +TACKLE +TACKLES +TACOMA +TACT +TACTIC +TACTICS +TACTILE +TAFT +TAG +TAGGED +TAGGING +TAGS +TAHITI +TAHOE +TAIL +TAILED +TAILING +TAILOR +TAILORED +TAILORING +TAILORS +TAILS +TAINT +TAINTED +TAIPEI +TAIWAN +TAIWANESE +TAKE +TAKEN +TAKER +TAKERS +TAKES +TAKING +TAKINGS +TALE +TALENT +TALENTED +TALENTS +TALES +TALK +TALKATIVE +TALKATIVELY +TALKATIVENESS +TALKED +TALKER +TALKERS +TALKIE +TALKING +TALKS +TALL +TALLADEGA +TALLAHASSEE +TALLAHATCHIE +TALLAHOOSA +TALLCHIEF +TALLER +TALLEST +TALLEYRAND +TALLNESS +TALLOW +TALLY +TALMUD +TALMUDISM +TALMUDIZATION +TALMUDIZATIONS +TALMUDIZE +TALMUDIZES +TAME +TAMED +TAMELY +TAMENESS +TAMER +TAMES +TAMIL +TAMING +TAMMANY +TAMMANYIZE +TAMMANYIZES +TAMPA +TAMPER +TAMPERED +TAMPERING +TAMPERS +TAN +TANAKA +TANANARIVE +TANDEM +TANG +TANGANYIKA +TANGENT +TANGENTIAL +TANGENTS +TANGIBLE +TANGIBLY +TANGLE +TANGLED +TANGY +TANK +TANKER +TANKERS +TANKS +TANNENBAUM +TANNER +TANNERS +TANTALIZING +TANTALIZINGLY +TANTALUS +TANTAMOUNT +TANTRUM +TANTRUMS +TANYA +TANZANIA +TAOISM +TAOIST +TAOS +TAP +TAPE +TAPED +TAPER +TAPERED +TAPERING +TAPERS +TAPES +TAPESTRIES +TAPESTRY +TAPING +TAPINGS +TAPPED +TAPPER +TAPPERS +TAPPING +TAPROOT +TAPROOTS +TAPS +TAR +TARA +TARBELL +TARDINESS +TARDY +TARGET +TARGETED +TARGETING +TARGETS +TARIFF +TARIFFS +TARRY +TARRYTOWN +TART +TARTARY +TARTLY +TARTNESS +TARTUFFE +TARZAN +TASK +TASKED +TASKING +TASKS +TASMANIA +TASS +TASSEL +TASSELS +TASTE +TASTED +TASTEFUL +TASTEFULLY +TASTEFULNESS +TASTELESS +TASTELESSLY +TASTER +TASTERS +TASTES +TASTING +TATE +TATTER +TATTERED +TATTOO +TATTOOED +TATTOOS +TAU +TAUGHT +TAUNT +TAUNTED +TAUNTER +TAUNTING +TAUNTS +TAURUS +TAUT +TAUTLY +TAUTNESS +TAUTOLOGICAL +TAUTOLOGICALLY +TAUTOLOGIES +TAUTOLOGY +TAVERN +TAVERNS +TAWNEY +TAWNY +TAX +TAXABLE +TAXATION +TAXED +TAXES +TAXI +TAXICAB +TAXICABS +TAXIED +TAXIING +TAXING +TAXIS +TAXONOMIC +TAXONOMICALLY +TAXONOMY +TAXPAYER +TAXPAYERS +TAYLOR +TAYLORIZE +TAYLORIZES +TAYLORS +TCHAIKOVSKY +TEA +TEACH +TEACHABLE +TEACHER +TEACHERS +TEACHES +TEACHING +TEACHINGS +TEACUP +TEAM +TEAMED +TEAMING +TEAMS +TEAR +TEARED +TEARFUL +TEARFULLY +TEARING +TEARS +TEAS +TEASE +TEASED +TEASES +TEASING +TEASPOON +TEASPOONFUL +TEASPOONFULS +TEASPOONS +TECHNICAL +TECHNICALITIES +TECHNICALITY +TECHNICALLY +TECHNICIAN +TECHNICIANS +TECHNION +TECHNIQUE +TECHNIQUES +TECHNOLOGICAL +TECHNOLOGICALLY +TECHNOLOGIES +TECHNOLOGIST +TECHNOLOGISTS +TECHNOLOGY +TED +TEDDY +TEDIOUS +TEDIOUSLY +TEDIOUSNESS +TEDIUM +TEEM +TEEMED +TEEMING +TEEMS +TEEN +TEENAGE +TEENAGED +TEENAGER +TEENAGERS +TEENS +TEETH +TEETHE +TEETHED +TEETHES +TEETHING +TEFLON +TEGUCIGALPA +TEHERAN +TEHRAN +TEKTRONIX +TELECOMMUNICATION +TELECOMMUNICATIONS +TELEDYNE +TELEFUNKEN +TELEGRAM +TELEGRAMS +TELEGRAPH +TELEGRAPHED +TELEGRAPHER +TELEGRAPHERS +TELEGRAPHIC +TELEGRAPHING +TELEGRAPHS +TELEMANN +TELEMETRY +TELEOLOGICAL +TELEOLOGICALLY +TELEOLOGY +TELEPATHY +TELEPHONE +TELEPHONED +TELEPHONER +TELEPHONERS +TELEPHONES +TELEPHONIC +TELEPHONING +TELEPHONY +TELEPROCESSING +TELESCOPE +TELESCOPED +TELESCOPES +TELESCOPING +TELETEX +TELETEXT +TELETYPE +TELETYPES +TELEVISE +TELEVISED +TELEVISES +TELEVISING +TELEVISION +TELEVISIONS +TELEVISOR +TELEVISORS +TELEX +TELL +TELLER +TELLERS +TELLING +TELLS +TELNET +TELNET +TEMPER +TEMPERAMENT +TEMPERAMENTAL +TEMPERAMENTS +TEMPERANCE +TEMPERATE +TEMPERATELY +TEMPERATENESS +TEMPERATURE +TEMPERATURES +TEMPERED +TEMPERING +TEMPERS +TEMPEST +TEMPESTUOUS +TEMPESTUOUSLY +TEMPLATE +TEMPLATES +TEMPLE +TEMPLEMAN +TEMPLES +TEMPLETON +TEMPORAL +TEMPORALLY +TEMPORARIES +TEMPORARILY +TEMPORARY +TEMPT +TEMPTATION +TEMPTATIONS +TEMPTED +TEMPTER +TEMPTERS +TEMPTING +TEMPTINGLY +TEMPTS +TEN +TENACIOUS +TENACIOUSLY +TENANT +TENANTS +TEND +TENDED +TENDENCIES +TENDENCY +TENDER +TENDERLY +TENDERNESS +TENDERS +TENDING +TENDS +TENEMENT +TENEMENTS +TENEX +TENEX +TENFOLD +TENNECO +TENNESSEE +TENNEY +TENNIS +TENNYSON +TENOR +TENORS +TENS +TENSE +TENSED +TENSELY +TENSENESS +TENSER +TENSES +TENSEST +TENSING +TENSION +TENSIONS +TENT +TENTACLE +TENTACLED +TENTACLES +TENTATIVE +TENTATIVELY +TENTED +TENTH +TENTING +TENTS +TENURE +TERESA +TERM +TERMED +TERMINAL +TERMINALLY +TERMINALS +TERMINATE +TERMINATED +TERMINATES +TERMINATING +TERMINATION +TERMINATIONS +TERMINATOR +TERMINATORS +TERMING +TERMINOLOGIES +TERMINOLOGY +TERMINUS +TERMS +TERMWISE +TERNARY +TERPSICHORE +TERRA +TERRACE +TERRACED +TERRACES +TERRAIN +TERRAINS +TERRAN +TERRE +TERRESTRIAL +TERRESTRIALS +TERRIBLE +TERRIBLY +TERRIER +TERRIERS +TERRIFIC +TERRIFIED +TERRIFIES +TERRIFY +TERRIFYING +TERRITORIAL +TERRITORIES +TERRITORY +TERROR +TERRORISM +TERRORIST +TERRORISTIC +TERRORISTS +TERRORIZE +TERRORIZED +TERRORIZES +TERRORIZING +TERRORS +TERTIARY +TESS +TESSIE +TEST +TESTABILITY +TESTABLE +TESTAMENT +TESTAMENTS +TESTED +TESTER +TESTERS +TESTICLE +TESTICLES +TESTIFIED +TESTIFIER +TESTIFIERS +TESTIFIES +TESTIFY +TESTIFYING +TESTIMONIES +TESTIMONY +TESTING +TESTINGS +TESTS +TEUTONIC +TEX +TEX +TEXACO +TEXAN +TEXANS +TEXAS +TEXASES +TEXT +TEXTBOOK +TEXTBOOKS +TEXTILE +TEXTILES +TEXTRON +TEXTS +TEXTUAL +TEXTUALLY +TEXTURE +TEXTURED +TEXTURES +THAI +THAILAND +THALIA +THAMES +THAN +THANK +THANKED +THANKFUL +THANKFULLY +THANKFULNESS +THANKING +THANKLESS +THANKLESSLY +THANKLESSNESS +THANKS +THANKSGIVING +THANKSGIVINGS +THAT +THATCH +THATCHES +THATS +THAW +THAWED +THAWING +THAWS +THAYER +THE +THEA +THEATER +THEATERS +THEATRICAL +THEATRICALLY +THEATRICALS +THEBES +THEFT +THEFTS +THEIR +THEIRS +THELMA +THEM +THEMATIC +THEME +THEMES +THEMSELVES +THEN +THENCE +THENCEFORTH +THEODORE +THEODOSIAN +THEODOSIUS +THEOLOGICAL +THEOLOGY +THEOREM +THEOREMS +THEORETIC +THEORETICAL +THEORETICALLY +THEORETICIANS +THEORIES +THEORIST +THEORISTS +THEORIZATION +THEORIZATIONS +THEORIZE +THEORIZED +THEORIZER +THEORIZERS +THEORIZES +THEORIZING +THEORY +THERAPEUTIC +THERAPIES +THERAPIST +THERAPISTS +THERAPY +THERE +THEREABOUTS +THEREAFTER +THEREBY +THEREFORE +THEREIN +THEREOF +THEREON +THERESA +THERETO +THEREUPON +THEREWITH +THERMAL +THERMODYNAMIC +THERMODYNAMICS +THERMOFAX +THERMOMETER +THERMOMETERS +THERMOSTAT +THERMOSTATS +THESE +THESES +THESEUS +THESIS +THESSALONIAN +THESSALY +THETIS +THEY +THICK +THICKEN +THICKENS +THICKER +THICKEST +THICKET +THICKETS +THICKLY +THICKNESS +THIEF +THIENSVILLE +THIEVE +THIEVES +THIEVING +THIGH +THIGHS +THIMBLE +THIMBLES +THIMBU +THIN +THING +THINGS +THINK +THINKABLE +THINKABLY +THINKER +THINKERS +THINKING +THINKS +THINLY +THINNER +THINNESS +THINNEST +THIRD +THIRDLY +THIRDS +THIRST +THIRSTED +THIRSTS +THIRSTY +THIRTEEN +THIRTEENS +THIRTEENTH +THIRTIES +THIRTIETH +THIRTY +THIS +THISTLE +THOMAS +THOMISTIC +THOMPSON +THOMSON +THONG +THOR +THOREAU +THORN +THORNBURG +THORNS +THORNTON +THORNY +THOROUGH +THOROUGHFARE +THOROUGHFARES +THOROUGHLY +THOROUGHNESS +THORPE +THORSTEIN +THOSE +THOUGH +THOUGHT +THOUGHTFUL +THOUGHTFULLY +THOUGHTFULNESS +THOUGHTLESS +THOUGHTLESSLY +THOUGHTLESSNESS +THOUGHTS +THOUSAND +THOUSANDS +THOUSANDTH +THRACE +THRACIAN +THRASH +THRASHED +THRASHER +THRASHES +THRASHING +THREAD +THREADED +THREADER +THREADERS +THREADING +THREADS +THREAT +THREATEN +THREATENED +THREATENING +THREATENS +THREATS +THREE +THREEFOLD +THREES +THREESCORE +THRESHOLD +THRESHOLDS +THREW +THRICE +THRIFT +THRIFTY +THRILL +THRILLED +THRILLER +THRILLERS +THRILLING +THRILLINGLY +THRILLS +THRIVE +THRIVED +THRIVES +THRIVING +THROAT +THROATED +THROATS +THROB +THROBBED +THROBBING +THROBS +THRONE +THRONEBERRY +THRONES +THRONG +THRONGS +THROTTLE +THROTTLED +THROTTLES +THROTTLING +THROUGH +THROUGHOUT +THROUGHPUT +THROW +THROWER +THROWING +THROWN +THROWS +THRUSH +THRUST +THRUSTER +THRUSTERS +THRUSTING +THRUSTS +THUBAN +THUD +THUDS +THUG +THUGS +THULE +THUMB +THUMBED +THUMBING +THUMBS +THUMP +THUMPED +THUMPING +THUNDER +THUNDERBOLT +THUNDERBOLTS +THUNDERED +THUNDERER +THUNDERERS +THUNDERING +THUNDERS +THUNDERSTORM +THUNDERSTORMS +THURBER +THURMAN +THURSDAY +THURSDAYS +THUS +THUSLY +THWART +THWARTED +THWARTING +THWARTS +THYSELF +TIBER +TIBET +TIBETAN +TIBURON +TICK +TICKED +TICKER +TICKERS +TICKET +TICKETS +TICKING +TICKLE +TICKLED +TICKLES +TICKLING +TICKLISH +TICKS +TICONDEROGA +TIDAL +TIDALLY +TIDE +TIDED +TIDES +TIDIED +TIDINESS +TIDING +TIDINGS +TIDY +TIDYING +TIE +TIECK +TIED +TIENTSIN +TIER +TIERS +TIES +TIFFANY +TIGER +TIGERS +TIGHT +TIGHTEN +TIGHTENED +TIGHTENER +TIGHTENERS +TIGHTENING +TIGHTENINGS +TIGHTENS +TIGHTER +TIGHTEST +TIGHTLY +TIGHTNESS +TIGRIS +TIJUANA +TILDE +TILE +TILED +TILES +TILING +TILL +TILLABLE +TILLED +TILLER +TILLERS +TILLICH +TILLIE +TILLING +TILLS +TILT +TILTED +TILTING +TILTS +TIM +TIMBER +TIMBERED +TIMBERING +TIMBERS +TIME +TIMED +TIMELESS +TIMELESSLY +TIMELESSNESS +TIMELY +TIMEOUT +TIMEOUTS +TIMER +TIMERS +TIMES +TIMESHARE +TIMESHARES +TIMESHARING +TIMESTAMP +TIMESTAMPS +TIMETABLE +TIMETABLES +TIMEX +TIMID +TIMIDITY +TIMIDLY +TIMING +TIMINGS +TIMMY +TIMON +TIMONIZE +TIMONIZES +TIMS +TIN +TINA +TINCTURE +TINGE +TINGED +TINGLE +TINGLED +TINGLES +TINGLING +TINIER +TINIEST +TINILY +TININESS +TINKER +TINKERED +TINKERING +TINKERS +TINKLE +TINKLED +TINKLES +TINKLING +TINNIER +TINNIEST +TINNILY +TINNINESS +TINNY +TINS +TINSELTOWN +TINT +TINTED +TINTING +TINTS +TINY +TIOGA +TIP +TIPPECANOE +TIPPED +TIPPER +TIPPERARY +TIPPERS +TIPPING +TIPS +TIPTOE +TIRANA +TIRE +TIRED +TIREDLY +TIRELESS +TIRELESSLY +TIRELESSNESS +TIRES +TIRESOME +TIRESOMELY +TIRESOMENESS +TIRING +TISSUE +TISSUES +TIT +TITAN +TITHE +TITHER +TITHES +TITHING +TITLE +TITLED +TITLES +TITO +TITS +TITTER +TITTERS +TITUS +TOAD +TOADS +TOAST +TOASTED +TOASTER +TOASTING +TOASTS +TOBACCO +TOBAGO +TOBY +TODAY +TODAYS +TODD +TOE +TOES +TOGETHER +TOGETHERNESS +TOGGLE +TOGGLED +TOGGLES +TOGGLING +TOGO +TOIL +TOILED +TOILER +TOILET +TOILETS +TOILING +TOILS +TOKEN +TOKENS +TOKYO +TOLAND +TOLD +TOLEDO +TOLERABILITY +TOLERABLE +TOLERABLY +TOLERANCE +TOLERANCES +TOLERANT +TOLERANTLY +TOLERATE +TOLERATED +TOLERATES +TOLERATING +TOLERATION +TOLL +TOLLED +TOLLEY +TOLLS +TOLSTOY +TOM +TOMAHAWK +TOMAHAWKS +TOMATO +TOMATOES +TOMB +TOMBIGBEE +TOMBS +TOMLINSON +TOMMIE +TOMOGRAPHY +TOMORROW +TOMORROWS +TOMPKINS +TON +TONE +TONED +TONER +TONES +TONGS +TONGUE +TONGUED +TONGUES +TONI +TONIC +TONICS +TONIGHT +TONING +TONIO +TONNAGE +TONS +TONSIL +TOO +TOOK +TOOL +TOOLED +TOOLER +TOOLERS +TOOLING +TOOLS +TOOMEY +TOOTH +TOOTHBRUSH +TOOTHBRUSHES +TOOTHPASTE +TOOTHPICK +TOOTHPICKS +TOP +TOPEKA +TOPER +TOPIC +TOPICAL +TOPICALLY +TOPICS +TOPMOST +TOPOGRAPHY +TOPOLOGICAL +TOPOLOGIES +TOPOLOGY +TOPPLE +TOPPLED +TOPPLES +TOPPLING +TOPS +TOPSY +TORAH +TORCH +TORCHES +TORE +TORIES +TORMENT +TORMENTED +TORMENTER +TORMENTERS +TORMENTING +TORN +TORNADO +TORNADOES +TORONTO +TORPEDO +TORPEDOES +TORQUE +TORQUEMADA +TORRANCE +TORRENT +TORRENTS +TORRID +TORTOISE +TORTOISES +TORTURE +TORTURED +TORTURER +TORTURERS +TORTURES +TORTURING +TORUS +TORUSES +TORY +TORYIZE +TORYIZES +TOSCA +TOSCANINI +TOSHIBA +TOSS +TOSSED +TOSSES +TOSSING +TOTAL +TOTALED +TOTALING +TOTALITIES +TOTALITY +TOTALLED +TOTALLER +TOTALLERS +TOTALLING +TOTALLY +TOTALS +TOTO +TOTTER +TOTTERED +TOTTERING +TOTTERS +TOUCH +TOUCHABLE +TOUCHED +TOUCHES +TOUCHIER +TOUCHIEST +TOUCHILY +TOUCHINESS +TOUCHING +TOUCHINGLY +TOUCHY +TOUGH +TOUGHEN +TOUGHER +TOUGHEST +TOUGHLY +TOUGHNESS +TOULOUSE +TOUR +TOURED +TOURING +TOURIST +TOURISTS +TOURNAMENT +TOURNAMENTS +TOURS +TOW +TOWARD +TOWARDS +TOWED +TOWEL +TOWELING +TOWELLED +TOWELLING +TOWELS +TOWER +TOWERED +TOWERING +TOWERS +TOWN +TOWNLEY +TOWNS +TOWNSEND +TOWNSHIP +TOWNSHIPS +TOWSLEY +TOY +TOYED +TOYING +TOYNBEE +TOYOTA +TOYS +TRACE +TRACEABLE +TRACED +TRACER +TRACERS +TRACES +TRACING +TRACINGS +TRACK +TRACKED +TRACKER +TRACKERS +TRACKING +TRACKS +TRACT +TRACTABILITY +TRACTABLE +TRACTARIANS +TRACTIVE +TRACTOR +TRACTORS +TRACTS +TRACY +TRADE +TRADED +TRADEMARK +TRADEMARKS +TRADEOFF +TRADEOFFS +TRADER +TRADERS +TRADES +TRADESMAN +TRADING +TRADITION +TRADITIONAL +TRADITIONALLY +TRADITIONS +TRAFFIC +TRAFFICKED +TRAFFICKER +TRAFFICKERS +TRAFFICKING +TRAFFICS +TRAGEDIES +TRAGEDY +TRAGIC +TRAGICALLY +TRAIL +TRAILED +TRAILER +TRAILERS +TRAILING +TRAILINGS +TRAILS +TRAIN +TRAINED +TRAINEE +TRAINEES +TRAINER +TRAINERS +TRAINING +TRAINS +TRAIT +TRAITOR +TRAITORS +TRAITS +TRAJECTORIES +TRAJECTORY +TRAMP +TRAMPED +TRAMPING +TRAMPLE +TRAMPLED +TRAMPLER +TRAMPLES +TRAMPLING +TRAMPS +TRANCE +TRANCES +TRANQUIL +TRANQUILITY +TRANQUILLY +TRANSACT +TRANSACTION +TRANSACTIONS +TRANSATLANTIC +TRANSCEIVE +TRANSCEIVER +TRANSCEIVERS +TRANSCEND +TRANSCENDED +TRANSCENDENT +TRANSCENDING +TRANSCENDS +TRANSCONTINENTAL +TRANSCRIBE +TRANSCRIBED +TRANSCRIBER +TRANSCRIBERS +TRANSCRIBES +TRANSCRIBING +TRANSCRIPT +TRANSCRIPTION +TRANSCRIPTIONS +TRANSCRIPTS +TRANSFER +TRANSFERABILITY +TRANSFERABLE +TRANSFERAL +TRANSFERALS +TRANSFERENCE +TRANSFERRED +TRANSFERRER +TRANSFERRERS +TRANSFERRING +TRANSFERS +TRANSFINITE +TRANSFORM +TRANSFORMABLE +TRANSFORMATION +TRANSFORMATIONAL +TRANSFORMATIONS +TRANSFORMED +TRANSFORMER +TRANSFORMERS +TRANSFORMING +TRANSFORMS +TRANSGRESS +TRANSGRESSED +TRANSGRESSION +TRANSGRESSIONS +TRANSIENCE +TRANSIENCY +TRANSIENT +TRANSIENTLY +TRANSIENTS +TRANSISTOR +TRANSISTORIZE +TRANSISTORIZED +TRANSISTORIZING +TRANSISTORS +TRANSIT +TRANSITE +TRANSITION +TRANSITIONAL +TRANSITIONED +TRANSITIONS +TRANSITIVE +TRANSITIVELY +TRANSITIVENESS +TRANSITIVITY +TRANSITORY +TRANSLATABILITY +TRANSLATABLE +TRANSLATE +TRANSLATED +TRANSLATES +TRANSLATING +TRANSLATION +TRANSLATIONAL +TRANSLATIONS +TRANSLATOR +TRANSLATORS +TRANSLUCENT +TRANSMISSION +TRANSMISSIONS +TRANSMIT +TRANSMITS +TRANSMITTAL +TRANSMITTED +TRANSMITTER +TRANSMITTERS +TRANSMITTING +TRANSMOGRIFICATION +TRANSMOGRIFY +TRANSPACIFIC +TRANSPARENCIES +TRANSPARENCY +TRANSPARENT +TRANSPARENTLY +TRANSPIRE +TRANSPIRED +TRANSPIRES +TRANSPIRING +TRANSPLANT +TRANSPLANTED +TRANSPLANTING +TRANSPLANTS +TRANSPONDER +TRANSPONDERS +TRANSPORT +TRANSPORTABILITY +TRANSPORTATION +TRANSPORTED +TRANSPORTER +TRANSPORTERS +TRANSPORTING +TRANSPORTS +TRANSPOSE +TRANSPOSED +TRANSPOSES +TRANSPOSING +TRANSPOSITION +TRANSPUTER +TRANSVAAL +TRANSYLVANIA +TRAP +TRAPEZOID +TRAPEZOIDAL +TRAPEZOIDS +TRAPPED +TRAPPER +TRAPPERS +TRAPPING +TRAPPINGS +TRAPS +TRASH +TRASTEVERE +TRAUMA +TRAUMATIC +TRAVAIL +TRAVEL +TRAVELED +TRAVELER +TRAVELERS +TRAVELING +TRAVELINGS +TRAVELS +TRAVERSAL +TRAVERSALS +TRAVERSE +TRAVERSED +TRAVERSES +TRAVERSING +TRAVESTIES +TRAVESTY +TRAVIS +TRAY +TRAYS +TREACHERIES +TREACHEROUS +TREACHEROUSLY +TREACHERY +TREAD +TREADING +TREADS +TREADWELL +TREASON +TREASURE +TREASURED +TREASURER +TREASURES +TREASURIES +TREASURING +TREASURY +TREAT +TREATED +TREATIES +TREATING +TREATISE +TREATISES +TREATMENT +TREATMENTS +TREATS +TREATY +TREBLE +TREE +TREES +TREETOP +TREETOPS +TREK +TREKS +TREMBLE +TREMBLED +TREMBLES +TREMBLING +TREMENDOUS +TREMENDOUSLY +TREMOR +TREMORS +TRENCH +TRENCHER +TRENCHES +TREND +TRENDING +TRENDS +TRENTON +TRESPASS +TRESPASSED +TRESPASSER +TRESPASSERS +TRESPASSES +TRESS +TRESSES +TREVELYAN +TRIAL +TRIALS +TRIANGLE +TRIANGLES +TRIANGULAR +TRIANGULARLY +TRIANGULUM +TRIANON +TRIASSIC +TRIBAL +TRIBE +TRIBES +TRIBUNAL +TRIBUNALS +TRIBUNE +TRIBUNES +TRIBUTARY +TRIBUTE +TRIBUTES +TRICERATOPS +TRICHINELLA +TRICHOTOMY +TRICK +TRICKED +TRICKIER +TRICKIEST +TRICKINESS +TRICKING +TRICKLE +TRICKLED +TRICKLES +TRICKLING +TRICKS +TRICKY +TRIED +TRIER +TRIERS +TRIES +TRIFLE +TRIFLER +TRIFLES +TRIFLING +TRIGGER +TRIGGERED +TRIGGERING +TRIGGERS +TRIGONOMETRIC +TRIGONOMETRY +TRIGRAM +TRIGRAMS +TRIHEDRAL +TRILATERAL +TRILL +TRILLED +TRILLION +TRILLIONS +TRILLIONTH +TRIM +TRIMBLE +TRIMLY +TRIMMED +TRIMMER +TRIMMEST +TRIMMING +TRIMMINGS +TRIMNESS +TRIMS +TRINIDAD +TRINKET +TRINKETS +TRIO +TRIP +TRIPLE +TRIPLED +TRIPLES +TRIPLET +TRIPLETS +TRIPLETT +TRIPLING +TRIPOD +TRIPS +TRISTAN +TRIUMPH +TRIUMPHAL +TRIUMPHANT +TRIUMPHANTLY +TRIUMPHED +TRIUMPHING +TRIUMPHS +TRIVIA +TRIVIAL +TRIVIALITIES +TRIVIALITY +TRIVIALLY +TROBRIAND +TROD +TROJAN +TROLL +TROLLEY +TROLLEYS +TROLLS +TROOP +TROOPER +TROOPERS +TROOPS +TROPEZ +TROPHIES +TROPHY +TROPIC +TROPICAL +TROPICS +TROT +TROTS +TROTSKY +TROUBLE +TROUBLED +TROUBLEMAKER +TROUBLEMAKERS +TROUBLES +TROUBLESHOOT +TROUBLESHOOTER +TROUBLESHOOTERS +TROUBLESHOOTING +TROUBLESHOOTS +TROUBLESOME +TROUBLESOMELY +TROUBLING +TROUGH +TROUSER +TROUSERS +TROUT +TROUTMAN +TROWEL +TROWELS +TROY +TRUANT +TRUANTS +TRUCE +TRUCK +TRUCKED +TRUCKEE +TRUCKER +TRUCKERS +TRUCKING +TRUCKS +TRUDEAU +TRUDGE +TRUDGED +TRUDY +TRUE +TRUED +TRUER +TRUES +TRUEST +TRUING +TRUISM +TRUISMS +TRUJILLO +TRUK +TRULY +TRUMAN +TRUMBULL +TRUMP +TRUMPED +TRUMPET +TRUMPETER +TRUMPS +TRUNCATE +TRUNCATED +TRUNCATES +TRUNCATING +TRUNCATION +TRUNCATIONS +TRUNK +TRUNKS +TRUST +TRUSTED +TRUSTEE +TRUSTEES +TRUSTFUL +TRUSTFULLY +TRUSTFULNESS +TRUSTING +TRUSTINGLY +TRUSTS +TRUSTWORTHINESS +TRUSTWORTHY +TRUSTY +TRUTH +TRUTHFUL +TRUTHFULLY +TRUTHFULNESS +TRUTHS +TRY +TRYING +TSUNEMATSU +TUB +TUBE +TUBER +TUBERCULOSIS +TUBERS +TUBES +TUBING +TUBS +TUCK +TUCKED +TUCKER +TUCKING +TUCKS +TUCSON +TUDOR +TUESDAY +TUESDAYS +TUFT +TUFTS +TUG +TUGS +TUITION +TULANE +TULIP +TULIPS +TULSA +TUMBLE +TUMBLED +TUMBLER +TUMBLERS +TUMBLES +TUMBLING +TUMOR +TUMORS +TUMULT +TUMULTS +TUMULTUOUS +TUNABLE +TUNE +TUNED +TUNER +TUNERS +TUNES +TUNIC +TUNICS +TUNING +TUNIS +TUNISIA +TUNISIAN +TUNNEL +TUNNELED +TUNNELS +TUPLE +TUPLES +TURBAN +TURBANS +TURBULENCE +TURBULENT +TURBULENTLY +TURF +TURGID +TURGIDLY +TURIN +TURING +TURKEY +TURKEYS +TURKISH +TURKIZE +TURKIZES +TURMOIL +TURMOILS +TURN +TURNABLE +TURNAROUND +TURNED +TURNER +TURNERS +TURNING +TURNINGS +TURNIP +TURNIPS +TURNOVER +TURNS +TURPENTINE +TURQUOISE +TURRET +TURRETS +TURTLE +TURTLENECK +TURTLES +TUSCALOOSA +TUSCAN +TUSCANIZE +TUSCANIZES +TUSCANY +TUSCARORA +TUSKEGEE +TUTANKHAMEN +TUTANKHAMON +TUTANKHAMUN +TUTENKHAMON +TUTOR +TUTORED +TUTORIAL +TUTORIALS +TUTORING +TUTORS +TUTTLE +TWAIN +TWANG +TWAS +TWEED +TWELFTH +TWELVE +TWELVES +TWENTIES +TWENTIETH +TWENTY +TWICE +TWIG +TWIGS +TWILIGHT +TWILIGHTS +TWILL +TWIN +TWINE +TWINED +TWINER +TWINKLE +TWINKLED +TWINKLER +TWINKLES +TWINKLING +TWINS +TWIRL +TWIRLED +TWIRLER +TWIRLING +TWIRLS +TWIST +TWISTED +TWISTER +TWISTERS +TWISTING +TWISTS +TWITCH +TWITCHED +TWITCHING +TWITTER +TWITTERED +TWITTERING +TWO +TWOFOLD +TWOMBLY +TWOS +TYBURN +TYING +TYLER +TYLERIZE +TYLERIZES +TYNDALL +TYPE +TYPED +TYPEOUT +TYPES +TYPESETTER +TYPEWRITER +TYPEWRITERS +TYPHOID +TYPHON +TYPICAL +TYPICALLY +TYPICALNESS +TYPIFIED +TYPIFIES +TYPIFY +TYPIFYING +TYPING +TYPIST +TYPISTS +TYPO +TYPOGRAPHIC +TYPOGRAPHICAL +TYPOGRAPHICALLY +TYPOGRAPHY +TYRANNICAL +TYRANNOSAURUS +TYRANNY +TYRANT +TYRANTS +TYSON +TZELTAL +UBIQUITOUS +UBIQUITOUSLY +UBIQUITY +UDALL +UGANDA +UGH +UGLIER +UGLIEST +UGLINESS +UGLY +UKRAINE +UKRAINIAN +UKRAINIANS +ULAN +ULCER +ULCERS +ULLMAN +ULSTER +ULTIMATE +ULTIMATELY +ULTRA +ULTRASONIC +ULTRIX +ULTRIX +ULYSSES +UMBRAGE +UMBRELLA +UMBRELLAS +UMPIRE +UMPIRES +UNABATED +UNABBREVIATED +UNABLE +UNACCEPTABILITY +UNACCEPTABLE +UNACCEPTABLY +UNACCOUNTABLE +UNACCUSTOMED +UNACHIEVABLE +UNACKNOWLEDGED +UNADULTERATED +UNAESTHETICALLY +UNAFFECTED +UNAFFECTEDLY +UNAFFECTEDNESS +UNAIDED +UNALIENABILITY +UNALIENABLE +UNALTERABLY +UNALTERED +UNAMBIGUOUS +UNAMBIGUOUSLY +UNAMBITIOUS +UNANALYZABLE +UNANIMITY +UNANIMOUS +UNANIMOUSLY +UNANSWERABLE +UNANSWERED +UNANTICIPATED +UNARMED +UNARY +UNASSAILABLE +UNASSIGNED +UNASSISTED +UNATTAINABILITY +UNATTAINABLE +UNATTENDED +UNATTRACTIVE +UNATTRACTIVELY +UNAUTHORIZED +UNAVAILABILITY +UNAVAILABLE +UNAVOIDABLE +UNAVOIDABLY +UNAWARE +UNAWARENESS +UNAWARES +UNBALANCED +UNBEARABLE +UNBECOMING +UNBELIEVABLE +UNBIASED +UNBIND +UNBLOCK +UNBLOCKED +UNBLOCKING +UNBLOCKS +UNBORN +UNBOUND +UNBOUNDED +UNBREAKABLE +UNBRIDLED +UNBROKEN +UNBUFFERED +UNCANCELLED +UNCANNY +UNCAPITALIZED +UNCAUGHT +UNCERTAIN +UNCERTAINLY +UNCERTAINTIES +UNCERTAINTY +UNCHANGEABLE +UNCHANGED +UNCHANGING +UNCLAIMED +UNCLASSIFIED +UNCLE +UNCLEAN +UNCLEANLY +UNCLEANNESS +UNCLEAR +UNCLEARED +UNCLES +UNCLOSED +UNCOMFORTABLE +UNCOMFORTABLY +UNCOMMITTED +UNCOMMON +UNCOMMONLY +UNCOMPROMISING +UNCOMPUTABLE +UNCONCERNED +UNCONCERNEDLY +UNCONDITIONAL +UNCONDITIONALLY +UNCONNECTED +UNCONSCIONABLE +UNCONSCIOUS +UNCONSCIOUSLY +UNCONSCIOUSNESS +UNCONSTITUTIONAL +UNCONSTRAINED +UNCONTROLLABILITY +UNCONTROLLABLE +UNCONTROLLABLY +UNCONTROLLED +UNCONVENTIONAL +UNCONVENTIONALLY +UNCONVINCED +UNCONVINCING +UNCOORDINATED +UNCORRECTABLE +UNCORRECTED +UNCOUNTABLE +UNCOUNTABLY +UNCOUTH +UNCOVER +UNCOVERED +UNCOVERING +UNCOVERS +UNDAMAGED +UNDAUNTED +UNDAUNTEDLY +UNDECIDABLE +UNDECIDED +UNDECLARED +UNDECOMPOSABLE +UNDEFINABILITY +UNDEFINED +UNDELETED +UNDENIABLE +UNDENIABLY +UNDER +UNDERBRUSH +UNDERDONE +UNDERESTIMATE +UNDERESTIMATED +UNDERESTIMATES +UNDERESTIMATING +UNDERESTIMATION +UNDERFLOW +UNDERFLOWED +UNDERFLOWING +UNDERFLOWS +UNDERFOOT +UNDERGO +UNDERGOES +UNDERGOING +UNDERGONE +UNDERGRADUATE +UNDERGRADUATES +UNDERGROUND +UNDERLIE +UNDERLIES +UNDERLINE +UNDERLINED +UNDERLINES +UNDERLING +UNDERLINGS +UNDERLINING +UNDERLININGS +UNDERLOADED +UNDERLYING +UNDERMINE +UNDERMINED +UNDERMINES +UNDERMINING +UNDERNEATH +UNDERPINNING +UNDERPINNINGS +UNDERPLAY +UNDERPLAYED +UNDERPLAYING +UNDERPLAYS +UNDERSCORE +UNDERSCORED +UNDERSCORES +UNDERSTAND +UNDERSTANDABILITY +UNDERSTANDABLE +UNDERSTANDABLY +UNDERSTANDING +UNDERSTANDINGLY +UNDERSTANDINGS +UNDERSTANDS +UNDERSTATED +UNDERSTOOD +UNDERTAKE +UNDERTAKEN +UNDERTAKER +UNDERTAKERS +UNDERTAKES +UNDERTAKING +UNDERTAKINGS +UNDERTOOK +UNDERWATER +UNDERWAY +UNDERWEAR +UNDERWENT +UNDERWORLD +UNDERWRITE +UNDERWRITER +UNDERWRITERS +UNDERWRITES +UNDERWRITING +UNDESIRABILITY +UNDESIRABLE +UNDETECTABLE +UNDETECTED +UNDETERMINED +UNDEVELOPED +UNDID +UNDIMINISHED +UNDIRECTED +UNDISCIPLINED +UNDISCOVERED +UNDISTURBED +UNDIVIDED +UNDO +UNDOCUMENTED +UNDOES +UNDOING +UNDOINGS +UNDONE +UNDOUBTEDLY +UNDRESS +UNDRESSED +UNDRESSES +UNDRESSING +UNDUE +UNDULY +UNEASILY +UNEASINESS +UNEASY +UNECONOMIC +UNECONOMICAL +UNEMBELLISHED +UNEMPLOYED +UNEMPLOYMENT +UNENCRYPTED +UNENDING +UNENLIGHTENING +UNEQUAL +UNEQUALED +UNEQUALLY +UNEQUIVOCAL +UNEQUIVOCALLY +UNESCO +UNESSENTIAL +UNEVALUATED +UNEVEN +UNEVENLY +UNEVENNESS +UNEVENTFUL +UNEXCUSED +UNEXPANDED +UNEXPECTED +UNEXPECTEDLY +UNEXPLAINED +UNEXPLORED +UNEXTENDED +UNFAIR +UNFAIRLY +UNFAIRNESS +UNFAITHFUL +UNFAITHFULLY +UNFAITHFULNESS +UNFAMILIAR +UNFAMILIARITY +UNFAMILIARLY +UNFAVORABLE +UNFETTERED +UNFINISHED +UNFIT +UNFITNESS +UNFLAGGING +UNFOLD +UNFOLDED +UNFOLDING +UNFOLDS +UNFORESEEN +UNFORGEABLE +UNFORGIVING +UNFORMATTED +UNFORTUNATE +UNFORTUNATELY +UNFORTUNATES +UNFOUNDED +UNFRIENDLINESS +UNFRIENDLY +UNFULFILLED +UNGRAMMATICAL +UNGRATEFUL +UNGRATEFULLY +UNGRATEFULNESS +UNGROUNDED +UNGUARDED +UNGUIDED +UNHAPPIER +UNHAPPIEST +UNHAPPILY +UNHAPPINESS +UNHAPPY +UNHARMED +UNHEALTHY +UNHEARD +UNHEEDED +UNIBUS +UNICORN +UNICORNS +UNICYCLE +UNIDENTIFIED +UNIDIRECTIONAL +UNIDIRECTIONALITY +UNIDIRECTIONALLY +UNIFICATION +UNIFICATIONS +UNIFIED +UNIFIER +UNIFIERS +UNIFIES +UNIFORM +UNIFORMED +UNIFORMITY +UNIFORMLY +UNIFORMS +UNIFY +UNIFYING +UNILLUMINATING +UNIMAGINABLE +UNIMPEDED +UNIMPLEMENTED +UNIMPORTANT +UNINDENTED +UNINITIALIZED +UNINSULATED +UNINTELLIGIBLE +UNINTENDED +UNINTENTIONAL +UNINTENTIONALLY +UNINTERESTING +UNINTERESTINGLY +UNINTERPRETED +UNINTERRUPTED +UNINTERRUPTEDLY +UNION +UNIONIZATION +UNIONIZE +UNIONIZED +UNIONIZER +UNIONIZERS +UNIONIZES +UNIONIZING +UNIONS +UNIPLUS +UNIPROCESSOR +UNIQUE +UNIQUELY +UNIQUENESS +UNIROYAL +UNISOFT +UNISON +UNIT +UNITARIAN +UNITARIANIZE +UNITARIANIZES +UNITARIANS +UNITE +UNITED +UNITES +UNITIES +UNITING +UNITS +UNITY +UNIVAC +UNIVALVE +UNIVALVES +UNIVERSAL +UNIVERSALITY +UNIVERSALLY +UNIVERSALS +UNIVERSE +UNIVERSES +UNIVERSITIES +UNIVERSITY +UNIX +UNIX +UNJUST +UNJUSTIFIABLE +UNJUSTIFIED +UNJUSTLY +UNKIND +UNKINDLY +UNKINDNESS +UNKNOWABLE +UNKNOWING +UNKNOWINGLY +UNKNOWN +UNKNOWNS +UNLABELLED +UNLAWFUL +UNLAWFULLY +UNLEASH +UNLEASHED +UNLEASHES +UNLEASHING +UNLESS +UNLIKE +UNLIKELY +UNLIKENESS +UNLIMITED +UNLINK +UNLINKED +UNLINKING +UNLINKS +UNLOAD +UNLOADED +UNLOADING +UNLOADS +UNLOCK +UNLOCKED +UNLOCKING +UNLOCKS +UNLUCKY +UNMANAGEABLE +UNMANAGEABLY +UNMANNED +UNMARKED +UNMARRIED +UNMASK +UNMASKED +UNMATCHED +UNMENTIONABLE +UNMERCIFUL +UNMERCIFULLY +UNMISTAKABLE +UNMISTAKABLY +UNMODIFIED +UNMOVED +UNNAMED +UNNATURAL +UNNATURALLY +UNNATURALNESS +UNNECESSARILY +UNNECESSARY +UNNEEDED +UNNERVE +UNNERVED +UNNERVES +UNNERVING +UNNOTICED +UNOBSERVABLE +UNOBSERVED +UNOBTAINABLE +UNOCCUPIED +UNOFFICIAL +UNOFFICIALLY +UNOPENED +UNORDERED +UNPACK +UNPACKED +UNPACKING +UNPACKS +UNPAID +UNPARALLELED +UNPARSED +UNPLANNED +UNPLEASANT +UNPLEASANTLY +UNPLEASANTNESS +UNPLUG +UNPOPULAR +UNPOPULARITY +UNPRECEDENTED +UNPREDICTABLE +UNPREDICTABLY +UNPRESCRIBED +UNPRESERVED +UNPRIMED +UNPROFITABLE +UNPROJECTED +UNPROTECTED +UNPROVABILITY +UNPROVABLE +UNPROVEN +UNPUBLISHED +UNQUALIFIED +UNQUALIFIEDLY +UNQUESTIONABLY +UNQUESTIONED +UNQUOTED +UNRAVEL +UNRAVELED +UNRAVELING +UNRAVELS +UNREACHABLE +UNREAL +UNREALISTIC +UNREALISTICALLY +UNREASONABLE +UNREASONABLENESS +UNREASONABLY +UNRECOGNIZABLE +UNRECOGNIZED +UNREGULATED +UNRELATED +UNRELIABILITY +UNRELIABLE +UNREPORTED +UNREPRESENTABLE +UNRESOLVED +UNRESPONSIVE +UNREST +UNRESTRAINED +UNRESTRICTED +UNRESTRICTEDLY +UNRESTRICTIVE +UNROLL +UNROLLED +UNROLLING +UNROLLS +UNRULY +UNSAFE +UNSAFELY +UNSANITARY +UNSATISFACTORY +UNSATISFIABILITY +UNSATISFIABLE +UNSATISFIED +UNSATISFYING +UNSCRUPULOUS +UNSEEDED +UNSEEN +UNSELECTED +UNSELFISH +UNSELFISHLY +UNSELFISHNESS +UNSENT +UNSETTLED +UNSETTLING +UNSHAKEN +UNSHARED +UNSIGNED +UNSKILLED +UNSLOTTED +UNSOLVABLE +UNSOLVED +UNSOPHISTICATED +UNSOUND +UNSPEAKABLE +UNSPECIFIED +UNSTABLE +UNSTEADINESS +UNSTEADY +UNSTRUCTURED +UNSUCCESSFUL +UNSUCCESSFULLY +UNSUITABLE +UNSUITED +UNSUPPORTED +UNSURE +UNSURPRISING +UNSURPRISINGLY +UNSYNCHRONIZED +UNTAGGED +UNTAPPED +UNTENABLE +UNTERMINATED +UNTESTED +UNTHINKABLE +UNTHINKING +UNTIDINESS +UNTIDY +UNTIE +UNTIED +UNTIES +UNTIL +UNTIMELY +UNTO +UNTOLD +UNTOUCHABLE +UNTOUCHABLES +UNTOUCHED +UNTOWARD +UNTRAINED +UNTRANSLATED +UNTREATED +UNTRIED +UNTRUE +UNTRUTHFUL +UNTRUTHFULNESS +UNTYING +UNUSABLE +UNUSED +UNUSUAL +UNUSUALLY +UNVARYING +UNVEIL +UNVEILED +UNVEILING +UNVEILS +UNWANTED +UNWELCOME +UNWHOLESOME +UNWIELDINESS +UNWIELDY +UNWILLING +UNWILLINGLY +UNWILLINGNESS +UNWIND +UNWINDER +UNWINDERS +UNWINDING +UNWINDS +UNWISE +UNWISELY +UNWISER +UNWISEST +UNWITTING +UNWITTINGLY +UNWORTHINESS +UNWORTHY +UNWOUND +UNWRAP +UNWRAPPED +UNWRAPPING +UNWRAPS +UNWRITTEN +UPBRAID +UPCOMING +UPDATE +UPDATED +UPDATER +UPDATES +UPDATING +UPGRADE +UPGRADED +UPGRADES +UPGRADING +UPHELD +UPHILL +UPHOLD +UPHOLDER +UPHOLDERS +UPHOLDING +UPHOLDS +UPHOLSTER +UPHOLSTERED +UPHOLSTERER +UPHOLSTERING +UPHOLSTERS +UPKEEP +UPLAND +UPLANDS +UPLIFT +UPLINK +UPLINKS +UPLOAD +UPON +UPPER +UPPERMOST +UPRIGHT +UPRIGHTLY +UPRIGHTNESS +UPRISING +UPRISINGS +UPROAR +UPROOT +UPROOTED +UPROOTING +UPROOTS +UPSET +UPSETS +UPSHOT +UPSHOTS +UPSIDE +UPSTAIRS +UPSTREAM +UPTON +UPTURN +UPTURNED +UPTURNING +UPTURNS +UPWARD +UPWARDS +URANIA +URANUS +URBAN +URBANA +URCHIN +URCHINS +URDU +URGE +URGED +URGENT +URGENTLY +URGES +URGING +URGINGS +URI +URINATE +URINATED +URINATES +URINATING +URINATION +URINE +URIS +URN +URNS +URQUHART +URSA +URSULA +URSULINE +URUGUAY +URUGUAYAN +URUGUAYANS +USABILITY +USABLE +USABLY +USAGE +USAGES +USE +USED +USEFUL +USEFULLY +USEFULNESS +USELESS +USELESSLY +USELESSNESS +USENET +USENIX +USER +USERS +USES +USHER +USHERED +USHERING +USHERS +USING +USUAL +USUALLY +USURP +USURPED +USURPER +UTAH +UTENSIL +UTENSILS +UTICA +UTILITIES +UTILITY +UTILIZATION +UTILIZATIONS +UTILIZE +UTILIZED +UTILIZES +UTILIZING +UTMOST +UTOPIA +UTOPIAN +UTOPIANIZE +UTOPIANIZES +UTOPIANS +UTRECHT +UTTER +UTTERANCE +UTTERANCES +UTTERED +UTTERING +UTTERLY +UTTERMOST +UTTERS +UZI +VACANCIES +VACANCY +VACANT +VACANTLY +VACATE +VACATED +VACATES +VACATING +VACATION +VACATIONED +VACATIONER +VACATIONERS +VACATIONING +VACATIONS +VACUO +VACUOUS +VACUOUSLY +VACUUM +VACUUMED +VACUUMING +VADUZ +VAGABOND +VAGABONDS +VAGARIES +VAGARY +VAGINA +VAGINAS +VAGRANT +VAGRANTLY +VAGUE +VAGUELY +VAGUENESS +VAGUER +VAGUEST +VAIL +VAIN +VAINLY +VALE +VALENCE +VALENCES +VALENTINE +VALENTINES +VALERIE +VALERY +VALES +VALET +VALETS +VALHALLA +VALIANT +VALIANTLY +VALID +VALIDATE +VALIDATED +VALIDATES +VALIDATING +VALIDATION +VALIDITY +VALIDLY +VALIDNESS +VALKYRIE +VALLETTA +VALLEY +VALLEYS +VALOIS +VALOR +VALPARAISO +VALUABLE +VALUABLES +VALUABLY +VALUATION +VALUATIONS +VALUE +VALUED +VALUER +VALUERS +VALUES +VALUING +VALVE +VALVES +VAMPIRE +VAN +VANCE +VANCEMENT +VANCOUVER +VANDALIZE +VANDALIZED +VANDALIZES +VANDALIZING +VANDENBERG +VANDERBILT +VANDERBURGH +VANDERPOEL +VANE +VANES +VANESSA +VANGUARD +VANILLA +VANISH +VANISHED +VANISHER +VANISHES +VANISHING +VANISHINGLY +VANITIES +VANITY +VANQUISH +VANQUISHED +VANQUISHES +VANQUISHING +VANS +VANTAGE +VAPOR +VAPORING +VAPORS +VARIABILITY +VARIABLE +VARIABLENESS +VARIABLES +VARIABLY +VARIAN +VARIANCE +VARIANCES +VARIANT +VARIANTLY +VARIANTS +VARIATION +VARIATIONS +VARIED +VARIES +VARIETIES +VARIETY +VARIOUS +VARIOUSLY +VARITYPE +VARITYPING +VARNISH +VARNISHES +VARY +VARYING +VARYINGS +VASE +VASES +VASQUEZ +VASSAL +VASSAR +VAST +VASTER +VASTEST +VASTLY +VASTNESS +VAT +VATICAN +VATICANIZATION +VATICANIZATIONS +VATICANIZE +VATICANIZES +VATS +VAUDEVILLE +VAUDOIS +VAUGHAN +VAUGHN +VAULT +VAULTED +VAULTER +VAULTING +VAULTS +VAUNT +VAUNTED +VAX +VAXES +VEAL +VECTOR +VECTORIZATION +VECTORIZING +VECTORS +VEDA +VEER +VEERED +VEERING +VEERS +VEGA +VEGANISM +VEGAS +VEGETABLE +VEGETABLES +VEGETARIAN +VEGETARIANS +VEGETATE +VEGETATED +VEGETATES +VEGETATING +VEGETATION +VEGETATIVE +VEHEMENCE +VEHEMENT +VEHEMENTLY +VEHICLE +VEHICLES +VEHICULAR +VEIL +VEILED +VEILING +VEILS +VEIN +VEINED +VEINING +VEINS +VELA +VELASQUEZ +VELLA +VELOCITIES +VELOCITY +VELVET +VENDOR +VENDORS +VENERABLE +VENERATION +VENETIAN +VENETO +VENEZUELA +VENEZUELAN +VENGEANCE +VENIAL +VENICE +VENISON +VENN +VENOM +VENOMOUS +VENOMOUSLY +VENT +VENTED +VENTILATE +VENTILATED +VENTILATES +VENTILATING +VENTILATION +VENTRICLE +VENTRICLES +VENTS +VENTURA +VENTURE +VENTURED +VENTURER +VENTURERS +VENTURES +VENTURING +VENTURINGS +VENUS +VENUSIAN +VENUSIANS +VERA +VERACITY +VERANDA +VERANDAS +VERB +VERBAL +VERBALIZE +VERBALIZED +VERBALIZES +VERBALIZING +VERBALLY +VERBOSE +VERBS +VERDE +VERDERER +VERDI +VERDICT +VERDURE +VERGE +VERGER +VERGES +VERGIL +VERIFIABILITY +VERIFIABLE +VERIFICATION +VERIFICATIONS +VERIFIED +VERIFIER +VERIFIERS +VERIFIES +VERIFY +VERIFYING +VERILY +VERITABLE +VERLAG +VERMIN +VERMONT +VERN +VERNA +VERNACULAR +VERNE +VERNON +VERONA +VERONICA +VERSA +VERSAILLES +VERSATEC +VERSATILE +VERSATILITY +VERSE +VERSED +VERSES +VERSING +VERSION +VERSIONS +VERSUS +VERTEBRATE +VERTEBRATES +VERTEX +VERTICAL +VERTICALLY +VERTICALNESS +VERTICES +VERY +VESSEL +VESSELS +VEST +VESTED +VESTIGE +VESTIGES +VESTIGIAL +VESTS +VESUVIUS +VETERAN +VETERANS +VETERINARIAN +VETERINARIANS +VETERINARY +VETO +VETOED +VETOER +VETOES +VEX +VEXATION +VEXED +VEXES +VEXING +VIA +VIABILITY +VIABLE +VIABLY +VIAL +VIALS +VIBRATE +VIBRATED +VIBRATING +VIBRATION +VIBRATIONS +VIBRATOR +VIC +VICE +VICEROY +VICES +VICHY +VICINITY +VICIOUS +VICIOUSLY +VICIOUSNESS +VICISSITUDE +VICISSITUDES +VICKERS +VICKSBURG +VICKY +VICTIM +VICTIMIZE +VICTIMIZED +VICTIMIZER +VICTIMIZERS +VICTIMIZES +VICTIMIZING +VICTIMS +VICTOR +VICTORIA +VICTORIAN +VICTORIANIZE +VICTORIANIZES +VICTORIANS +VICTORIES +VICTORIOUS +VICTORIOUSLY +VICTORS +VICTORY +VICTROLA +VICTUAL +VICTUALER +VICTUALS +VIDA +VIDAL +VIDEO +VIDEOTAPE +VIDEOTAPES +VIDEOTEX +VIE +VIED +VIENNA +VIENNESE +VIENTIANE +VIER +VIES +VIET +VIETNAM +VIETNAMESE +VIEW +VIEWABLE +VIEWED +VIEWER +VIEWERS +VIEWING +VIEWPOINT +VIEWPOINTS +VIEWS +VIGILANCE +VIGILANT +VIGILANTE +VIGILANTES +VIGILANTLY +VIGNETTE +VIGNETTES +VIGOR +VIGOROUS +VIGOROUSLY +VIKING +VIKINGS +VIKRAM +VILE +VILELY +VILENESS +VILIFICATION +VILIFICATIONS +VILIFIED +VILIFIES +VILIFY +VILIFYING +VILLA +VILLAGE +VILLAGER +VILLAGERS +VILLAGES +VILLAIN +VILLAINOUS +VILLAINOUSLY +VILLAINOUSNESS +VILLAINS +VILLAINY +VILLAS +VINCE +VINCENT +VINCI +VINDICATE +VINDICATED +VINDICATION +VINDICTIVE +VINDICTIVELY +VINDICTIVENESS +VINE +VINEGAR +VINES +VINEYARD +VINEYARDS +VINSON +VINTAGE +VIOLATE +VIOLATED +VIOLATES +VIOLATING +VIOLATION +VIOLATIONS +VIOLATOR +VIOLATORS +VIOLENCE +VIOLENT +VIOLENTLY +VIOLET +VIOLETS +VIOLIN +VIOLINIST +VIOLINISTS +VIOLINS +VIPER +VIPERS +VIRGIL +VIRGIN +VIRGINIA +VIRGINIAN +VIRGINIANS +VIRGINITY +VIRGINS +VIRGO +VIRTUAL +VIRTUALLY +VIRTUE +VIRTUES +VIRTUOSO +VIRTUOSOS +VIRTUOUS +VIRTUOUSLY +VIRULENT +VIRUS +VIRUSES +VISA +VISAGE +VISAS +VISCOUNT +VISCOUNTS +VISCOUS +VISHNU +VISIBILITY +VISIBLE +VISIBLY +VISIGOTH +VISIGOTHS +VISION +VISIONARY +VISIONS +VISIT +VISITATION +VISITATIONS +VISITED +VISITING +VISITOR +VISITORS +VISITS +VISOR +VISORS +VISTA +VISTAS +VISUAL +VISUALIZE +VISUALIZED +VISUALIZER +VISUALIZES +VISUALIZING +VISUALLY +VITA +VITAE +VITAL +VITALITY +VITALLY +VITALS +VITO +VITUS +VIVALDI +VIVIAN +VIVID +VIVIDLY +VIVIDNESS +VIZIER +VLADIMIR +VLADIVOSTOK +VOCABULARIES +VOCABULARY +VOCAL +VOCALLY +VOCALS +VOCATION +VOCATIONAL +VOCATIONALLY +VOCATIONS +VOGEL +VOGUE +VOICE +VOICED +VOICER +VOICERS +VOICES +VOICING +VOID +VOIDED +VOIDER +VOIDING +VOIDS +VOLATILE +VOLATILITIES +VOLATILITY +VOLCANIC +VOLCANO +VOLCANOS +VOLITION +VOLKSWAGEN +VOLKSWAGENS +VOLLEY +VOLLEYBALL +VOLLEYBALLS +VOLSTEAD +VOLT +VOLTA +VOLTAGE +VOLTAGES +VOLTAIRE +VOLTERRA +VOLTS +VOLUME +VOLUMES +VOLUNTARILY +VOLUNTARY +VOLUNTEER +VOLUNTEERED +VOLUNTEERING +VOLUNTEERS +VOLVO +VOMIT +VOMITED +VOMITING +VOMITS +VORTEX +VOSS +VOTE +VOTED +VOTER +VOTERS +VOTES +VOTING +VOTIVE +VOUCH +VOUCHER +VOUCHERS +VOUCHES +VOUCHING +VOUGHT +VOW +VOWED +VOWEL +VOWELS +VOWER +VOWING +VOWS +VOYAGE +VOYAGED +VOYAGER +VOYAGERS +VOYAGES +VOYAGING +VOYAGINGS +VREELAND +VULCAN +VULCANISM +VULGAR +VULGARLY +VULNERABILITIES +VULNERABILITY +VULNERABLE +VULTURE +VULTURES +WAALS +WABASH +WACKE +WACKY +WACO +WADE +WADED +WADER +WADES +WADING +WADSWORTH +WAFER +WAFERS +WAFFLE +WAFFLES +WAFT +WAG +WAGE +WAGED +WAGER +WAGERS +WAGES +WAGING +WAGNER +WAGNERIAN +WAGNERIZE +WAGNERIZES +WAGON +WAGONER +WAGONS +WAGS +WAHL +WAIL +WAILED +WAILING +WAILS +WAINWRIGHT +WAIST +WAISTCOAT +WAISTCOATS +WAISTS +WAIT +WAITE +WAITED +WAITER +WAITERS +WAITING +WAITRESS +WAITRESSES +WAITS +WAIVE +WAIVED +WAIVER +WAIVERABLE +WAIVES +WAIVING +WAKE +WAKED +WAKEFIELD +WAKEN +WAKENED +WAKENING +WAKES +WAKEUP +WAKING +WALBRIDGE +WALCOTT +WALDEN +WALDENSIAN +WALDO +WALDORF +WALDRON +WALES +WALFORD +WALGREEN +WALK +WALKED +WALKER +WALKERS +WALKING +WALKS +WALL +WALLACE +WALLED +WALLENSTEIN +WALLER +WALLET +WALLETS +WALLING +WALLIS +WALLOW +WALLOWED +WALLOWING +WALLOWS +WALLS +WALNUT +WALNUTS +WALPOLE +WALRUS +WALRUSES +WALSH +WALT +WALTER +WALTERS +WALTHAM +WALTON +WALTZ +WALTZED +WALTZES +WALTZING +WALWORTH +WAN +WAND +WANDER +WANDERED +WANDERER +WANDERERS +WANDERING +WANDERINGS +WANDERS +WANE +WANED +WANES +WANG +WANING +WANLY +WANSEE +WANSLEY +WANT +WANTED +WANTING +WANTON +WANTONLY +WANTONNESS +WANTS +WAPATO +WAPPINGER +WAR +WARBLE +WARBLED +WARBLER +WARBLES +WARBLING +WARBURTON +WARD +WARDEN +WARDENS +WARDER +WARDROBE +WARDROBES +WARDS +WARE +WAREHOUSE +WAREHOUSES +WAREHOUSING +WARES +WARFARE +WARFIELD +WARILY +WARINESS +WARING +WARLIKE +WARM +WARMED +WARMER +WARMERS +WARMEST +WARMING +WARMLY +WARMS +WARMTH +WARN +WARNED +WARNER +WARNING +WARNINGLY +WARNINGS +WARNOCK +WARNS +WARP +WARPED +WARPING +WARPS +WARRANT +WARRANTED +WARRANTIES +WARRANTING +WARRANTS +WARRANTY +WARRED +WARRING +WARRIOR +WARRIORS +WARS +WARSAW +WARSHIP +WARSHIPS +WART +WARTIME +WARTS +WARWICK +WARY +WAS +WASH +WASHBURN +WASHED +WASHER +WASHERS +WASHES +WASHING +WASHINGS +WASHINGTON +WASHOE +WASP +WASPS +WASSERMAN +WASTE +WASTED +WASTEFUL +WASTEFULLY +WASTEFULNESS +WASTES +WASTING +WATANABE +WATCH +WATCHED +WATCHER +WATCHERS +WATCHES +WATCHFUL +WATCHFULLY +WATCHFULNESS +WATCHING +WATCHINGS +WATCHMAN +WATCHWORD +WATCHWORDS +WATER +WATERBURY +WATERED +WATERFALL +WATERFALLS +WATERGATE +WATERHOUSE +WATERING +WATERINGS +WATERLOO +WATERMAN +WATERPROOF +WATERPROOFING +WATERS +WATERTOWN +WATERWAY +WATERWAYS +WATERY +WATKINS +WATSON +WATTENBERG +WATTERSON +WATTS +WAUKESHA +WAUNONA +WAUPACA +WAUPUN +WAUSAU +WAUWATOSA +WAVE +WAVED +WAVEFORM +WAVEFORMS +WAVEFRONT +WAVEFRONTS +WAVEGUIDES +WAVELAND +WAVELENGTH +WAVELENGTHS +WAVER +WAVERS +WAVES +WAVING +WAX +WAXED +WAXEN +WAXER +WAXERS +WAXES +WAXING +WAXY +WAY +WAYNE +WAYNESBORO +WAYS +WAYSIDE +WAYWARD +WEAK +WEAKEN +WEAKENED +WEAKENING +WEAKENS +WEAKER +WEAKEST +WEAKLY +WEAKNESS +WEAKNESSES +WEALTH +WEALTHIEST +WEALTHS +WEALTHY +WEAN +WEANED +WEANING +WEAPON +WEAPONS +WEAR +WEARABLE +WEARER +WEARIED +WEARIER +WEARIEST +WEARILY +WEARINESS +WEARING +WEARISOME +WEARISOMELY +WEARS +WEARY +WEARYING +WEASEL +WEASELS +WEATHER +WEATHERCOCK +WEATHERCOCKS +WEATHERED +WEATHERFORD +WEATHERING +WEATHERS +WEAVE +WEAVER +WEAVES +WEAVING +WEB +WEBB +WEBBER +WEBS +WEBSTER +WEBSTERVILLE +WEDDED +WEDDING +WEDDINGS +WEDGE +WEDGED +WEDGES +WEDGING +WEDLOCK +WEDNESDAY +WEDNESDAYS +WEDS +WEE +WEED +WEEDS +WEEK +WEEKEND +WEEKENDS +WEEKLY +WEEKS +WEEP +WEEPER +WEEPING +WEEPS +WEHR +WEI +WEIBULL +WEIDER +WEIDMAN +WEIERSTRASS +WEIGH +WEIGHED +WEIGHING +WEIGHINGS +WEIGHS +WEIGHT +WEIGHTED +WEIGHTING +WEIGHTS +WEIGHTY +WEINBERG +WEINER +WEINSTEIN +WEIRD +WEIRDLY +WEISENHEIMER +WEISS +WEISSMAN +WEISSMULLER +WELCH +WELCHER +WELCHES +WELCOME +WELCOMED +WELCOMES +WELCOMING +WELD +WELDED +WELDER +WELDING +WELDON +WELDS +WELDWOOD +WELFARE +WELL +WELLED +WELLER +WELLES +WELLESLEY +WELLING +WELLINGTON +WELLMAN +WELLS +WELLSVILLE +WELMERS +WELSH +WELTON +WENCH +WENCHES +WENDELL +WENDY +WENT +WENTWORTH +WEPT +WERE +WERNER +WERTHER +WESLEY +WESLEYAN +WESSON +WEST +WESTBOUND +WESTBROOK +WESTCHESTER +WESTERN +WESTERNER +WESTERNERS +WESTFIELD +WESTHAMPTON +WESTINGHOUSE +WESTMINSTER +WESTMORE +WESTON +WESTPHALIA +WESTPORT +WESTWARD +WESTWARDS +WESTWOOD +WET +WETLY +WETNESS +WETS +WETTED +WETTER +WETTEST +WETTING +WEYERHAUSER +WHACK +WHACKED +WHACKING +WHACKS +WHALE +WHALEN +WHALER +WHALES +WHALING +WHARF +WHARTON +WHARVES +WHAT +WHATEVER +WHATLEY +WHATSOEVER +WHEAT +WHEATEN +WHEATLAND +WHEATON +WHEATSTONE +WHEEL +WHEELED +WHEELER +WHEELERS +WHEELING +WHEELINGS +WHEELOCK +WHEELS +WHELAN +WHELLER +WHELP +WHEN +WHENCE +WHENEVER +WHERE +WHEREABOUTS +WHEREAS +WHEREBY +WHEREIN +WHEREUPON +WHEREVER +WHETHER +WHICH +WHICHEVER +WHILE +WHIM +WHIMPER +WHIMPERED +WHIMPERING +WHIMPERS +WHIMS +WHIMSICAL +WHIMSICALLY +WHIMSIES +WHIMSY +WHINE +WHINED +WHINES +WHINING +WHIP +WHIPPANY +WHIPPED +WHIPPER +WHIPPERS +WHIPPING +WHIPPINGS +WHIPPLE +WHIPS +WHIRL +WHIRLED +WHIRLING +WHIRLPOOL +WHIRLPOOLS +WHIRLS +WHIRLWIND +WHIRR +WHIRRING +WHISK +WHISKED +WHISKER +WHISKERS +WHISKEY +WHISKING +WHISKS +WHISPER +WHISPERED +WHISPERING +WHISPERINGS +WHISPERS +WHISTLE +WHISTLED +WHISTLER +WHISTLERS +WHISTLES +WHISTLING +WHIT +WHITAKER +WHITCOMB +WHITE +WHITEHALL +WHITEHORSE +WHITELEAF +WHITELEY +WHITELY +WHITEN +WHITENED +WHITENER +WHITENERS +WHITENESS +WHITENING +WHITENS +WHITER +WHITES +WHITESPACE +WHITEST +WHITEWASH +WHITEWASHED +WHITEWATER +WHITFIELD +WHITING +WHITLOCK +WHITMAN +WHITMANIZE +WHITMANIZES +WHITNEY +WHITTAKER +WHITTIER +WHITTLE +WHITTLED +WHITTLES +WHITTLING +WHIZ +WHIZZED +WHIZZES +WHIZZING +WHO +WHOEVER +WHOLE +WHOLEHEARTED +WHOLEHEARTEDLY +WHOLENESS +WHOLES +WHOLESALE +WHOLESALER +WHOLESALERS +WHOLESOME +WHOLESOMENESS +WHOLLY +WHOM +WHOMEVER +WHOOP +WHOOPED +WHOOPING +WHOOPS +WHORE +WHORES +WHORL +WHORLS +WHOSE +WHY +WICHITA +WICK +WICKED +WICKEDLY +WICKEDNESS +WICKER +WICKS +WIDE +WIDEBAND +WIDELY +WIDEN +WIDENED +WIDENER +WIDENING +WIDENS +WIDER +WIDESPREAD +WIDEST +WIDGET +WIDOW +WIDOWED +WIDOWER +WIDOWERS +WIDOWS +WIDTH +WIDTHS +WIELAND +WIELD +WIELDED +WIELDER +WIELDING +WIELDS +WIER +WIFE +WIFELY +WIG +WIGGINS +WIGHTMAN +WIGS +WIGWAM +WILBUR +WILCOX +WILD +WILDCAT +WILDCATS +WILDER +WILDERNESS +WILDEST +WILDLY +WILDNESS +WILE +WILES +WILEY +WILFRED +WILHELM +WILHELMINA +WILINESS +WILKES +WILKIE +WILKINS +WILKINSON +WILL +WILLA +WILLAMETTE +WILLARD +WILLCOX +WILLED +WILLEM +WILLFUL +WILLFULLY +WILLIAM +WILLIAMS +WILLIAMSBURG +WILLIAMSON +WILLIE +WILLIED +WILLIES +WILLING +WILLINGLY +WILLINGNESS +WILLIS +WILLISSON +WILLOUGHBY +WILLOW +WILLOWS +WILLS +WILLY +WILMA +WILMETTE +WILMINGTON +WILSHIRE +WILSON +WILSONIAN +WILT +WILTED +WILTING +WILTS +WILTSHIRE +WILY +WIN +WINCE +WINCED +WINCES +WINCHELL +WINCHESTER +WINCING +WIND +WINDED +WINDER +WINDERS +WINDING +WINDMILL +WINDMILLS +WINDOW +WINDOWS +WINDS +WINDSOR +WINDY +WINE +WINED +WINEHEAD +WINER +WINERS +WINES +WINFIELD +WING +WINGED +WINGING +WINGS +WINIFRED +WINING +WINK +WINKED +WINKER +WINKING +WINKS +WINNEBAGO +WINNER +WINNERS +WINNETKA +WINNIE +WINNING +WINNINGLY +WINNINGS +WINNIPEG +WINNIPESAUKEE +WINOGRAD +WINOOSKI +WINS +WINSBOROUGH +WINSETT +WINSLOW +WINSTON +WINTER +WINTERED +WINTERING +WINTERS +WINTHROP +WINTRY +WIPE +WIPED +WIPER +WIPERS +WIPES +WIPING +WIRE +WIRED +WIRELESS +WIRES +WIRETAP +WIRETAPPERS +WIRETAPPING +WIRETAPS +WIRINESS +WIRING +WIRY +WISCONSIN +WISDOM +WISDOMS +WISE +WISED +WISELY +WISENHEIMER +WISER +WISEST +WISH +WISHED +WISHER +WISHERS +WISHES +WISHFUL +WISHING +WISP +WISPS +WISTFUL +WISTFULLY +WISTFULNESS +WIT +WITCH +WITCHCRAFT +WITCHES +WITCHING +WITH +WITHAL +WITHDRAW +WITHDRAWAL +WITHDRAWALS +WITHDRAWING +WITHDRAWN +WITHDRAWS +WITHDREW +WITHER +WITHERS +WITHERSPOON +WITHHELD +WITHHOLD +WITHHOLDER +WITHHOLDERS +WITHHOLDING +WITHHOLDINGS +WITHHOLDS +WITHIN +WITHOUT +WITHSTAND +WITHSTANDING +WITHSTANDS +WITHSTOOD +WITNESS +WITNESSED +WITNESSES +WITNESSING +WITS +WITT +WITTGENSTEIN +WITTY +WIVES +WIZARD +WIZARDS +WOE +WOEFUL +WOEFULLY +WOKE +WOLCOTT +WOLF +WOLFE +WOLFF +WOLFGANG +WOLVERTON +WOLVES +WOMAN +WOMANHOOD +WOMANLY +WOMB +WOMBS +WOMEN +WON +WONDER +WONDERED +WONDERFUL +WONDERFULLY +WONDERFULNESS +WONDERING +WONDERINGLY +WONDERMENT +WONDERS +WONDROUS +WONDROUSLY +WONG +WONT +WONTED +WOO +WOOD +WOODARD +WOODBERRY +WOODBURY +WOODCHUCK +WOODCHUCKS +WOODCOCK +WOODCOCKS +WOODED +WOODEN +WOODENLY +WOODENNESS +WOODLAND +WOODLAWN +WOODMAN +WOODPECKER +WOODPECKERS +WOODROW +WOODS +WOODSTOCK +WOODWARD +WOODWARDS +WOODWORK +WOODWORKING +WOODY +WOOED +WOOER +WOOF +WOOFED +WOOFER +WOOFERS +WOOFING +WOOFS +WOOING +WOOL +WOOLEN +WOOLLY +WOOLS +WOOLWORTH +WOONSOCKET +WOOS +WOOSTER +WORCESTER +WORCESTERSHIRE +WORD +WORDED +WORDILY +WORDINESS +WORDING +WORDS +WORDSWORTH +WORDY +WORE +WORK +WORKABLE +WORKABLY +WORKBENCH +WORKBENCHES +WORKBOOK +WORKBOOKS +WORKED +WORKER +WORKERS +WORKHORSE +WORKHORSES +WORKING +WORKINGMAN +WORKINGS +WORKLOAD +WORKMAN +WORKMANSHIP +WORKMEN +WORKS +WORKSHOP +WORKSHOPS +WORKSPACE +WORKSTATION +WORKSTATIONS +WORLD +WORLDLINESS +WORLDLY +WORLDS +WORLDWIDE +WORM +WORMED +WORMING +WORMS +WORN +WORRIED +WORRIER +WORRIERS +WORRIES +WORRISOME +WORRY +WORRYING +WORRYINGLY +WORSE +WORSHIP +WORSHIPED +WORSHIPER +WORSHIPFUL +WORSHIPING +WORSHIPS +WORST +WORSTED +WORTH +WORTHIEST +WORTHINESS +WORTHINGTON +WORTHLESS +WORTHLESSNESS +WORTHS +WORTHWHILE +WORTHWHILENESS +WORTHY +WOTAN +WOULD +WOUND +WOUNDED +WOUNDING +WOUNDS +WOVE +WOVEN +WRANGLE +WRANGLED +WRANGLER +WRAP +WRAPAROUND +WRAPPED +WRAPPER +WRAPPERS +WRAPPING +WRAPPINGS +WRAPS +WRATH +WREAK +WREAKS +WREATH +WREATHED +WREATHES +WRECK +WRECKAGE +WRECKED +WRECKER +WRECKERS +WRECKING +WRECKS +WREN +WRENCH +WRENCHED +WRENCHES +WRENCHING +WRENS +WREST +WRESTLE +WRESTLER +WRESTLES +WRESTLING +WRESTLINGS +WRETCH +WRETCHED +WRETCHEDNESS +WRETCHES +WRIGGLE +WRIGGLED +WRIGGLER +WRIGGLES +WRIGGLING +WRIGLEY +WRING +WRINGER +WRINGS +WRINKLE +WRINKLED +WRINKLES +WRIST +WRISTS +WRISTWATCH +WRISTWATCHES +WRIT +WRITABLE +WRITE +WRITER +WRITERS +WRITES +WRITHE +WRITHED +WRITHES +WRITHING +WRITING +WRITINGS +WRITS +WRITTEN +WRONG +WRONGED +WRONGING +WRONGLY +WRONGS +WRONSKIAN +WROTE +WROUGHT +WRUNG +WUHAN +WYANDOTTE +WYATT +WYETH +WYLIE +WYMAN +WYNER +WYNN +WYOMING +XANTHUS +XAVIER +XEBEC +XENAKIS +XENIA +XENIX +XEROX +XEROXED +XEROXES +XEROXING +XERXES +XHOSA +YAGI +YAKIMA +YALE +YALIES +YALTA +YAMAHA +YANK +YANKED +YANKEE +YANKEES +YANKING +YANKS +YANKTON +YAOUNDE +YAQUI +YARD +YARDS +YARDSTICK +YARDSTICKS +YARMOUTH +YARN +YARNS +YATES +YAUNDE +YAWN +YAWNER +YAWNING +YEA +YEAGER +YEAR +YEARLY +YEARN +YEARNED +YEARNING +YEARNINGS +YEARS +YEAS +YEAST +YEASTS +YEATS +YELL +YELLED +YELLER +YELLING +YELLOW +YELLOWED +YELLOWER +YELLOWEST +YELLOWING +YELLOWISH +YELLOWKNIFE +YELLOWNESS +YELLOWS +YELLOWSTONE +YELP +YELPED +YELPING +YELPS +YEMEN +YENTL +YEOMAN +YEOMEN +YERKES +YES +YESTERDAY +YESTERDAYS +YET +YIDDISH +YIELD +YIELDED +YIELDING +YIELDS +YODER +YOKE +YOKES +YOKNAPATAWPHA +YOKOHAMA +YOKUTS +YON +YONDER +YONKERS +YORICK +YORK +YORKER +YORKERS +YORKSHIRE +YORKTOWN +YOSEMITE +YOST +YOU +YOUNG +YOUNGER +YOUNGEST +YOUNGLY +YOUNGSTER +YOUNGSTERS +YOUNGSTOWN +YOUR +YOURS +YOURSELF +YOURSELVES +YOUTH +YOUTHES +YOUTHFUL +YOUTHFULLY +YOUTHFULNESS +YPSILANTI +YUBA +YUCATAN +YUGOSLAV +YUGOSLAVIA +YUGOSLAVIAN +YUGOSLAVIANS +YUH +YUKI +YUKON +YURI +YVES +YVETTE +ZACHARY +ZAGREB +ZAIRE +ZAMBIA +ZAN +ZANZIBAR +ZEAL +ZEALAND +ZEALOUS +ZEALOUSLY +ZEALOUSNESS +ZEBRA +ZEBRAS +ZEFFIRELLI +ZEISS +ZELLERBACH +ZEN +ZENITH +ZENNIST +ZERO +ZEROED +ZEROES +ZEROING +ZEROS +ZEROTH +ZEST +ZEUS +ZIEGFELD +ZIEGFELDS +ZIEGLER +ZIGGY +ZIGZAG +ZILLIONS +ZIMMERMAN +ZINC +ZION +ZIONISM +ZIONIST +ZIONISTS +ZIONS +ZODIAC +ZOE +ZOMBA +ZONAL +ZONALLY +ZONE +ZONED +ZONES +ZONING +ZOO +ZOOLOGICAL +ZOOLOGICALLY +ZOOM +ZOOMS +ZOOS +ZORN +ZOROASTER +ZOROASTRIAN +ZULU +ZULUS +ZURICH \ No newline at end of file diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example01.py b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example01.py new file mode 100644 index 0000000..a4626b1 --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example01.py @@ -0,0 +1,5 @@ +nums = [] +for i in range(100000): + nums.append(i) +nums.reverse() +print(nums) diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example02.py b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example02.py new file mode 100644 index 0000000..4fb84b4 --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example02.py @@ -0,0 +1,4 @@ +nums = [] +for i in range(100000): + nums.insert(0, i) +print(nums) diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example03.py b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example03.py new file mode 100644 index 0000000..1ce532f --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example03.py @@ -0,0 +1,5 @@ +a, b = 0, 1 +for num in range(1, 101): + a, b = b, a + b + print(f'{num}: {a}') + diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example04.py b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example04.py new file mode 100644 index 0000000..c6b622e --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example04.py @@ -0,0 +1,12 @@ +from functools import lru_cache + + +@lru_cache() +def fib(num): + if num in (1, 2): + return 1 + return fib(num - 1) + fib(num - 2) + + +for num in range(1, 101): + print(f'{num}: {fib(num)}') diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example05.py b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example05.py new file mode 100644 index 0000000..fafdd56 --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example05.py @@ -0,0 +1,9 @@ +""" +公鸡5元一只,母鸡3元一只,小鸡1元三只,用100元买一百只鸡,问公鸡、母鸡、小鸡各有多少只? +""" +for x in range(21): + for y in range(34): + z = 100 - x - y + if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100: + print(x, y, z) + diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example06.py b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example06.py new file mode 100644 index 0000000..993ea08 --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/code/example06.py @@ -0,0 +1,14 @@ +import re + +import PyPDF2 + +with open('Python_Tricks_encrypted.pdf', 'rb') as pdf_file_stream: + reader = PyPDF2.PdfFileReader(pdf_file_stream) + with open('dictionary.txt', 'r') as txt_file_stream: + file_iter = iter(lambda: txt_file_stream.readline(), '') + for word in file_iter: + word = re.sub(r'\s', '', word) + if reader.decrypt(word): + print(word) + break + diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/算法入门系列1-周而复始.key b/公开课/文档/第05次公开课-算法入门系列1-周而复始/算法入门系列1-周而复始.key new file mode 100644 index 0000000..cf16463 Binary files /dev/null and b/公开课/文档/第05次公开课-算法入门系列1-周而复始/算法入门系列1-周而复始.key differ diff --git a/公开课/文档/第05次公开课-算法入门系列1-周而复始/算法入门系列1-周而复始.md b/公开课/文档/第05次公开课-算法入门系列1-周而复始/算法入门系列1-周而复始.md new file mode 100644 index 0000000..b9dcb3f --- /dev/null +++ b/公开课/文档/第05次公开课-算法入门系列1-周而复始/算法入门系列1-周而复始.md @@ -0,0 +1,158 @@ +## 算法入门系列课程1 - 周而复始 + +### 算法概述 + +1. 什么是算法? + + 解决问题的正确方法和具体的实施步骤。 + + 例子1:如何在两栋相距50m的大楼的两个房间牵一条线(两个房间都有窗)? + + - 养一只鸟(如鸽子),将线送过去 + - 用很长的杆子将线递过去 + - 用无人机(遥控飞行器)将线送过去 + + 如何评价这些方法的好坏?**少花钱,不费事**! + + 例子2:大教室里坐了几百名学生一起听课,如何快速的统计学生人数? + + 例子3:向列表容器中**逆向**插入100000个元素。 + + - 方法1: + + ```Python + nums = [] + for i in range(100000): + nums.append(i) + nums.reverse() + ``` + + - 方法2: + + ```Python + nums = [] + for i in range(100000): + nums.insert(0, i) + ``` + + 例子3:生成Fibonacci数列(前100个Fibonacci数)。 + + - 方法1 - 递推: + + ```Python + a, b = 0, 1 + for num in range(1, 101): + a, b = b, a + b + print(f'{num}: {a}') + ``` + + - 方法2 - 递归: + + ```Python + def fib(num): + if num in (1, 2): + return 1 + return fib(num - 1) + fib(num - 2) + + + for num in range(1, 101): + print(f'{num}: {fib(num)}') + ``` + + - 方法3 - 改进的递归: + + ```Python + def fib(num, temp={}): + if num in (1, 2): + return 1 + elif num not in temp: + temp[num] = fib(num - 1) + fib(num - 2) + return temp[num] + ``` + + - 方法4 - 改进的递归: + + ```Python + from functools import lru_cache + + + @lru_cache() + def fib(num): + if num in (1, 2): + return 1 + return fib(num - 1) + fib(num - 2) + ``` + +2. 如何评价算法的好坏? + + [渐近时间复杂度]()和渐近空间复杂度。 + +3. 大***O***符号的意义? + + 表示一个函数相对于输入规模的增长速度,也可以称之为函数的数量级。 + + | 大*O*符号 | 说明 | 例子 | + | --------------- | ------------------ | -------------------------------------------- | + | $$O(c)$$ | 常量时间复杂度 | 布隆过滤器 / 哈希存储 | + | $$O(log_2n)$$ | 对数时间复杂度 | 二分查找(折半查找) | + | $$O(n)$$ | 线性时间复杂度 | 顺序查找 / 桶排序 | + | $$O(n*log_2n)$$ | 对数线性时间复杂度 | 高级排序算法(归并排序、快速排序) | + | $$O(n^2)$$ | 平方时间复杂度 | 简单排序算法(选择排序、插入排序、冒泡排序) | + | $$O(n^3)$$ | 立方时间复杂度 | Floyd算法 / 矩阵乘法运算 | + | $$O(2^n)$$ | 几何级数时间复杂度 | 汉诺塔 | + | $$O(n!)$$ | 阶乘时间复杂度 | 旅行经销商问题 | + +### 穷举法 + +在计算机科学中,**穷举法**或者**暴力搜索法**是一个非常非常直观的解决问题的方法,这种方法通过一项一项的列举解决方案所有可能的候选项以及检查每个候选项是否符合问题的描述,最终得到问题的解。 + +虽然暴力搜索很容易实现,并且如果解决方案存在它就一定能够找到,但是它的代价是和候选方案的数量成比例的,由于这一点,在很多实际问题中,消耗的代价会随着问题规模的增加而快速地增长。因此,当问题规模有限或当存在可用于将候选解决方案的集合减少到可管理大小时,就可以使用暴力搜索。另外,当实现方法的简单度比速度更重要的时候,也可以考虑使用这种方法。 + +### 经典例子 + +1. **百钱百鸡**问题:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100元买一百只鸡,问公鸡、母鸡、小鸡各有多少只? + + ```Python + for x in range(21): + for y in range(34): + z = 100 - x - y + if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100: + print(x, y, z) + ``` + +2. **五人分鱼**问题:ABCDE五人在某天夜里合伙捕鱼,最后疲惫不堪各自睡觉。第二天A第一个醒来,他将鱼分为5份,扔掉多余的1条,拿走了属于自己的一份;B第二个醒来,也将鱼分为5份,扔掉多余的1条,拿走属于自己的一份;然后C、D、E依次醒来,也按同样的方式分鱼,问他们至少捕了多少条鱼? + + ```Python + fish = 6 + while True: + total = fish + enough = True + for _ in range(5): + if (total - 1) % 5 == 0: + total = (total - 1) // 5 * 4 + else: + enough = False + break + if enough: + print(fish) + break + fish += 5 + ``` + +3. **暴力破解口令**: + + ```Python + import re + + import PyPDF2 + + with open('Python_Tricks_encrypted.pdf', 'rb') as pdf_file_stream: + reader = PyPDF2.PdfFileReader(pdf_file_stream) + with open('dictionary.txt', 'r') as txt_file_stream: + file_iter = iter(lambda: txt_file_stream.readline(), '') + for word in file_iter: + word = re.sub(r'\s', '', word) + if reader.decrypt(word): + print(word) + break + ``` \ No newline at end of file diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example01.py b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example01.py new file mode 100644 index 0000000..cd41c9a --- /dev/null +++ b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example01.py @@ -0,0 +1,19 @@ +import sys + + +def fac(num): + if num == 0: + return 1 + return num * fac(num - 1) + + +def main(): + print(fac(59996)) + + +if __name__ == '__main__': + sys.setrecursionlimit(60000) + main() +# for i in range(1000): +# print(f'{i}:'.rjust(3), fac(i)) + diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example02.py b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example02.py new file mode 100644 index 0000000..b52c0e6 --- /dev/null +++ b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example02.py @@ -0,0 +1,14 @@ +def climb(num): + a, b, c = 1, 2, 4 + for _ in range(num - 1): + a, b, c = b, c, a + b + c + return a + + +def main(): + n = int(input('台阶数量: ')) + print(climb(n)) + + +if __name__ == '__main__': + main() diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example03.py b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example03.py new file mode 100644 index 0000000..000c764 --- /dev/null +++ b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example03.py @@ -0,0 +1,61 @@ +""" +迷宫寻路 +""" +import random +import sys + +WALL = -1 +ROAD = 0 + +ROWS = 10 +COLS = 10 + + +def find_way(maze, i=0, j=0, step=1): + """走迷宫""" + if 0 <= i < ROWS and 0 <= j < COLS and maze[i][j] == 0: + maze[i][j] = step + if i == ROWS - 1 and j == COLS - 1: + print('=' * 20) + display(maze) + sys.exit(0) + find_way(maze, i + 1, j, step + 1) + find_way(maze, i, j + 1, step + 1) + find_way(maze, i - 1, j, step + 1) + find_way(maze, i, j - 1, step + 1) + maze[i][j] = ROAD + + +def reset(maze): + """重置迷宫""" + for i in range(ROWS): + for j in range(COLS): + num = random.randint(1, 10) + maze[i][j] = WALL if num > 7 else ROAD + maze[0][0] = maze[ROWS - 1][COLS - 1] = ROAD + + +def display(maze): + """显示迷宫""" + for row in maze: + for col in row: + if col == -1: + print('■', end=' ') + elif col == 0: + print('□', end=' ') + else: + print(f'{col}'.ljust(2), end='') + print() + + +def main(): + """主函数""" + maze = [[0] * COLS for _ in range(ROWS)] + reset(maze) + display(maze) + find_way(maze) + print('没有出路!!!') + + +if __name__ == '__main__': + main() diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example04.py b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example04.py new file mode 100644 index 0000000..204c12a --- /dev/null +++ b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example04.py @@ -0,0 +1,42 @@ +""" +骑士巡逻 +""" +import sys + +SIZE = 8 + + +def display(board): + """显示棋盘""" + for row in board: + for col in row: + print(f'{col}'.rjust(2, '0'), end=' ') + print() + + +def patrol(board, i=0, j=0, step=1): + """巡逻""" + if 0 <= i < SIZE and 0 <= j < SIZE and board[i][j] == 0: + board[i][j] = step + if step == SIZE * SIZE: + display(board) + sys.exit(0) + patrol(board, i + 1, j + 2, step + 1) + patrol(board, i + 2, j + 1, step + 1) + patrol(board, i + 2, j - 1, step + 1) + patrol(board, i + 1, j - 2, step + 1) + patrol(board, i - 1, j - 2, step + 1) + patrol(board, i - 2, j - 1, step + 1) + patrol(board, i - 2, j + 1, step + 1) + patrol(board, i - 1, j + 2, step + 1) + board[i][j] = 0 + + +def main(): + """主函数""" + board = [[0] * SIZE for _ in range(SIZE)] + patrol(board) + + +if __name__ == '__main__': + main() diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example05.py b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example05.py new file mode 100644 index 0000000..932fc57 --- /dev/null +++ b/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example05.py @@ -0,0 +1,10 @@ +size = 25 + +for i in range(size): + for j in range(size): + if i % 2 == 1 or j % 2 == 1: + print('■', end='') + else: + print('□', end='') + print() + diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/droste.png b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/droste.png new file mode 100644 index 0000000..5d4d71a Binary files /dev/null and b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/droste.png differ diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/eight_queen.png b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/eight_queen.png new file mode 100644 index 0000000..84ed539 Binary files /dev/null and b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/eight_queen.png differ diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/knight_tour.gif b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/knight_tour.gif new file mode 100644 index 0000000..95e3ee8 Binary files /dev/null and b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/knight_tour.gif differ diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/maze.png b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/maze.png new file mode 100644 index 0000000..82bf4c4 Binary files /dev/null and b/公开课/文档/第06次公开课-算法入门系列2-在水一方/res/maze.png differ diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/算法入门系列2 - 在水一方.md b/公开课/文档/第06次公开课-算法入门系列2-在水一方/算法入门系列2 - 在水一方.md new file mode 100644 index 0000000..459d5d0 --- /dev/null +++ b/公开课/文档/第06次公开课-算法入门系列2-在水一方/算法入门系列2 - 在水一方.md @@ -0,0 +1,212 @@ +## 算法入门系列2 - 在水一方 + +在第一次的公开课中,我们讲到了穷举法。穷举法也被称为暴力搜索法,今天我们要讲的回溯法就是暴力搜索法的一种。接下来我们讲到的很多算法跟“递归”这个概念有或多或少的关系,所以我们先说说“递归”。 + +### 现实中的递归 + +从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?…… + +野比大雄在房间里,用时光电视看着未来的情况。电视画面中,野比大雄在房间里,用时光电视看着未来的情况。电视画面中,野比大雄在房间里,用时光电视看着未来的情况…… + +阶乘的递归定义:$$0! = 1$$,$$n!=n*(n-1)!$$ ,使用被定义对象的自身来为其下定义称为递归定义。 + +[德罗斯特效应](https://zh.wikipedia.org/wiki/%E5%BE%B7%E7%BD%97%E6%96%AF%E7%89%B9%E6%95%88%E5%BA%94)是递归的一种视觉形式。图中女性手持的物体中有一幅她本人手持同一物体的小图片,进而小图片中还有更小的一幅她手持同一物体的图片…… + +![](./res/droste.png) + +### 递归的应用 + +在程序中,一个函数如果直接或者间接的调用了自身,我们就称之为递归函数。 + +写递归函数有两个要点: + +1. 收敛条件 - 什么时候结束递归。 +2. 递归公式 - 每一项与前一项(前*N*项)的关系。 + +例子1:求阶乘。 + +```Python +def fac(num): + if num == 0: + return 1 + return num * fac(num - 1) +``` + +Python对递归的深度加以了限制(默认1000层函数调用),如果想突破这个限制,可以使用下面的方法。 + +```Python +import sys + +sys.setrecursionlimit(10000) +``` + +例子2:爬楼梯 - 楼梯有*n*个台阶,一步可以走1阶、2阶或3阶,走完*n*个台阶共有多少种不同的走法。 + +```Python +def climb(num): + if num == 0: + return 1 + elif num < 0: + return 0 + return climb(num - 1) + climb(num - 2) + climb(num - 3) +``` + +**注意**:上面的递归函数性能会非常的差,因为时间复杂度是几何级数级的。 + +优化后的代码。 + +```Python +from functools import lru_cache + + +@lru_cache() +def climb(num): + if num == 0: + return 1 + elif num < 0: + return 0 + return climb(num - 1) + climb(num - 2) + climb(num - 3) +``` + +不使用的递归的代码。 + +```Python +def climb(num): + a, b, c = 1, 2, 4 + for _ in range(num - 1): + a, b, c = b, c, a + b + c + return a +``` + +**重点**:有更好的办法的时候,请不要考虑递归。 + +### 回溯法 + +**回溯法**是[暴力搜索法](https://zh.wikipedia.org/wiki/%E6%9A%B4%E5%8A%9B%E6%90%9C%E5%B0%8B%E6%B3%95)中的一种。对于某些计算问题而言,回溯法是一种可以找出所有(或一部分)解的一般性算法,尤其适用于约束满足问题(在解决约束满足问题时,我们逐步构造更多的候选解,并且在确定某一部分候选解不可能补全成正确解之后放弃继续搜索这个部分候选解本身及其可以拓展出的子候选解,转而测试其他的部分候选解)。 + +### 经典案例 + +例子1:**迷宫寻路**。 + +![](./res/maze.png) + +```Python +""" +迷宫寻路 +""" +import random +import sys + +WALL = -1 +ROAD = 0 + +ROWS = 10 +COLS = 10 + + +def find_way(maze, i=0, j=0, step=1): + """走迷宫""" + if 0 <= i < ROWS and 0 <= j < COLS and maze[i][j] == 0: + maze[i][j] = step + if i == ROWS - 1 and j == COLS - 1: + print('=' * 20) + display(maze) + sys.exit(0) + find_way(maze, i + 1, j, step + 1) + find_way(maze, i, j + 1, step + 1) + find_way(maze, i - 1, j, step + 1) + find_way(maze, i, j - 1, step + 1) + maze[i][j] = ROAD + + +def reset(maze): + """重置迷宫""" + for i in range(ROWS): + for j in range(COLS): + num = random.randint(1, 10) + maze[i][j] = WALL if num > 7 else ROAD + maze[0][0] = maze[ROWS - 1][COLS - 1] = ROAD + + +def display(maze): + """显示迷宫""" + for row in maze: + for col in row: + if col == -1: + print('■', end=' ') + elif col == 0: + print('□', end=' ') + else: + print(f'{col}'.ljust(2), end='') + print() + + +def main(): + """主函数""" + maze = [[0] * COLS for _ in range(ROWS)] + reset(maze) + display(maze) + find_way(maze) + print('没有出路!!!') + + +if __name__ == '__main__': + main() +``` + +**说明:**上面的代码用随机放置围墙的方式来生成迷宫,更好的生成迷宫的方式请参考[《简单的使用回溯法生成 Tile Based 迷宫》]()一文。 + +例子2:**骑士巡逻** - 国际象棋中的骑士(马),按照骑士的移动规则走遍整个棋盘的每一个方格,而且每个方格只能够经过一次。 + +![](./res/knight_tour.gif) + +```Python +""" +骑士巡逻 +""" +import sys + +SIZE = 8 + + +def display(board): + """显示棋盘""" + for row in board: + for col in row: + print(f'{col}'.rjust(2, '0'), end=' ') + print() + + +def patrol(board, i=0, j=0, step=1): + """巡逻""" + if 0 <= i < SIZE and 0 <= j < SIZE and board[i][j] == 0: + board[i][j] = step + if step == SIZE * SIZE: + display(board) + sys.exit(0) + patrol(board, i + 1, j + 2, step + 1) + patrol(board, i + 2, j + 1, step + 1) + patrol(board, i + 2, j - 1, step + 1) + patrol(board, i + 1, j - 2, step + 1) + patrol(board, i - 1, j - 2, step + 1) + patrol(board, i - 2, j - 1, step + 1) + patrol(board, i - 2, j + 1, step + 1) + patrol(board, i - 1, j + 2, step + 1) + board[i][j] = 0 + + +def main(): + """主函数""" + board = [[0] * SIZE for _ in range(SIZE)] + patrol(board) + + +if __name__ == '__main__': + main() +``` + +例子3:**八皇后** - 如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 + +![](./res/eight_queen.png) + +**说明**:这个问题太经典了,网上有大把的答案,留给大家自己搞定。 \ No newline at end of file diff --git a/公开课/文档/第06次公开课-算法入门系列2-在水一方/算法入门系列2-在水一方.key b/公开课/文档/第06次公开课-算法入门系列2-在水一方/算法入门系列2-在水一方.key new file mode 100755 index 0000000..838f8de Binary files /dev/null and b/公开课/文档/第06次公开课-算法入门系列2-在水一方/算法入门系列2-在水一方.key differ diff --git a/公开课/视频/视频链接.txt b/公开课/视频/视频链接.txt new file mode 100644 index 0000000..c043bcf --- /dev/null +++ b/公开课/视频/视频链接.txt @@ -0,0 +1 @@ +链接:https://pan.baidu.com/s/1PuevYD_A0c1DgJbyeAycHA 密码:l2nd \ No newline at end of file diff --git a/Day66-75/常见反爬策略及应对方案.md b/常见反爬策略及应对方案.md similarity index 100% rename from Day66-75/常见反爬策略及应对方案.md rename to 常见反爬策略及应对方案.md diff --git a/更新日志.md b/更新日志.md new file mode 100644 index 0000000..8b9d720 --- /dev/null +++ b/更新日志.md @@ -0,0 +1,41 @@ +## 更新日志 + +### 2019年8月8日 + +1. 最近公司给安排了很多任务,所以好久都没有更新这个项目,今天终于把一直计划更新的《关系型数据库MySQL》更新完了。 +2. 那天微信收款提示我已经连续有48收到了打赏,非常感谢大家持续的支持。 +3. 最近一直在计划为这个项目录制一个配套的视频,当然这个工作量的巨大是可想而知的,但是我还是决定要在年底之前开始做这件事情,这样才能不辜负那么多希望通过这个项目学习和了解Python的人。 + +### 2019年7月11日 + +1. 今天终于结束了出差的日子,回来先把最近收到的打赏全部捐赠给了绿之叶,总共捐出了111笔打赏。 + + ![](./res/donation.png) + +### 2019年7月9日 + +1. 最近出差,项目一直处于停更状态。交流群的很多初学者反馈从第8天开始内容就有一定难度,最近本来也打算把语言基础部分和爬虫的部门重新整理一次,这次争取将文字和案例做得更加通俗易懂,而且更具实用性,这个事情从今天已然开始了,最终的目标是要将这部分的内容整理成一本书,希望大家到时候能够一如既往的支持。 +2. 最近1周多的时间一共收到60笔以上的打赏,最多的一天收到了14笔打赏,还是要再次谢谢大家为知识付费的行为,当然加交流群是不用付费的,您支付的费用会用于支持山区儿童教育。 +3. 今天重新翻译了*Zen of Python*,这次的版本我自己都比较喜欢,所以也分享给大家。 + +### 2019年6月30日 + +1. 最近2天一共收到11笔打赏。 +2. 终于将第48天《前后端分离开发》一文更新完,但是自己都感觉有点凑数的嫌疑,文字描述没怎么花心思去写,大家可以参考项目的代码来了解前后端分离开发。项目中使用了Vue.js,但是没有使用脚手架工具,也没有配置前端路由,仅仅使用了Vue.js来渲染页面,毕竟我自己也不是专业的前端。 + +### 2019年6月27日 + +1. 最近3天一共收到35笔打赏,感谢大家持续关注。 +2. 近期事情较多,更新速度可能会放缓,请大家谅解。 +3. 今晚公开课相关的资料已经更新到公开课目录中。 + +### 2019年6月23日 + +1. 最近几天一共收到25笔打赏,感谢大家的支持。 +2. 更新了QQ交流群,重新创建了一个2000人群。 + +### 2019年6月18日 + +1. 在朋友的建议下,给首页加了一个打赏的二维码,看看有多少愿意为知识付费。今天一共收到了7位小伙伴的打赏,在此表示感谢。打赏获得的收入将全部捐赠给**绿之叶公益**([点击了解]())。之前每年都会试着为这个公益组织做一些自己能做的事情,这次当然也不能例外。 +2. Django部分(第41天到第55天)更新到第47天,最新上线的部分包括报表、日志、ORM查询优化以及中间件相关的内容,并将投票应用的完成代码同步到github。 + diff --git a/玩转PyCharm.md b/玩转PyCharm.md index b40f819..cf74f5d 100644 --- a/玩转PyCharm.md +++ b/玩转PyCharm.md @@ -1,6 +1,6 @@ ## 玩转PyCharm -PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境,它最大的优点是能够大大提升Python开发者的工作效率,为开发者集成了很多用起来非常顺手的功能,包括代码调试、高亮语法、代码跳转、智能提示、自动补全、单元测试、版本控制等等。此外,PyCharm还提供了对一些高级功能的支持,包括支持基于Django框架的Web开发、。 +PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境,它最大的优点是能够大大提升Python开发者的工作效率,为开发者集成了很多用起来非常顺手的功能,包括代码调试、高亮语法、代码跳转、智能提示、自动补全、单元测试、版本控制等等。此外,PyCharm还提供了对一些高级功能的支持,包括支持基于Django框架的Web开发。 ### PyCharm的安装 @@ -66,7 +66,7 @@ PyCharm社区版只能创建Python项目,如果项目中需要Django的支持 ![](./res/pycharm-comm-django-1.png) -创建好Python项目之后,可以打开屏幕下方的终端(Terminal),并通过`pip install`安装Django项目的依赖项。 +创建好Python项目之后,可以打开屏幕下方的终端(Terminal),并通过`pip install`安装Django项目的依赖项,可以通过`-i https://pypi.doubanio.com/simple`来指定下载依赖库的镜像仓库。 ![](./res/pycharm-comm-django-2.png) @@ -74,6 +74,8 @@ PyCharm社区版只能创建Python项目,如果项目中需要Django的支持 ![](./res/pycharm-comm-django-7.png) +下面是搜索依赖项的界面,可以通过点击“Install Package”按钮来安装指定的依赖项;也可以通过点击“Manage Repositories”按钮来指定下载依赖项的仓库,国内用户推荐使用豆瓣镜像。 + ![](./res/pycharm-comm-django-8.png) 接下来可以在终端中输入`django-amdin startproject`指令来创建项目。 @@ -84,7 +86,7 @@ PyCharm社区版只能创建Python项目,如果项目中需要Django的支持 ![](./res/pycharm-comm-django-4.png) -在配置窗口的右侧,指定要执行的脚本路径(Django项目的manage.py文件的位置)和运行参数(runserver)。 +在配置窗口的右侧,指定要执行的脚本路径(Django项目的manage.py文件的位置)和运行参数(runserver),运行参数的后面还可以跟IP地址和端口。 ![](./res/pycharm-comm-django-5.png) diff --git a/用函数还是用复杂的表达式.md b/用函数还是用复杂的表达式.md index b84d8cf..b084543 100644 --- a/用函数还是用复杂的表达式.md +++ b/用函数还是用复杂的表达式.md @@ -1,6 +1,6 @@ ## 要不要使用复杂表达式 -Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主动的去完成一些你还没有提出的工作,去优化自己的代码让它更有效率,能够3秒钟完成的任务,我们绝不能容忍1分钟的等待。最后,自负会促使程序员写出可靠无误的代码,我们写代码不是为了接受批评和指责,而是为了让其他人来膜拜。 +Perl语言的原作者*Larry Wall*曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主动的去完成一些你还没有提出的工作,去优化自己的代码让它更有效率,能够3秒钟完成的任务,我们绝不能容忍1分钟的等待。最后,自负会促使程序员写出可靠无误的代码,我们写代码不是为了接受批评和指责,而是为了让其他人来膜拜。 那么接下来就有一个很有意思的问题值得探讨一下,我们需要一个程序从输入的三个数中找出最大的那个数。这个程序对任何会编程的人来说都是小菜一碟,甚至不会编程的人经过10分钟的学习也能搞定。下面是用来解决这个问题的Python代码。 @@ -15,7 +15,6 @@ else: if c > the_max: the_max = c print('The max is:', the_max) - ``` 但是我们刚才说了,程序员都是懒惰的,很多程序员都会使用三元条件运算符来改写上面的代码。 @@ -27,7 +26,6 @@ c = int(input('c = ')) the_max = a if a > b else b the_max = c if c > the_max else the_max print('The max is:', the_max) - ``` 需要说明的是,Python在2.5版本以前是没有上面代码第4行和第5行中使用的三元条件运算符的,究其原因是Guido van Rossum(Python之父)认为三元条件运算符并不能帮助 Python变得更加简洁,于是那些习惯了在C/C++或Java中使用三元条件运算符(在这些语言中,三元条件运算符也称为“Elvis运算符”,因为`?:`放在一起很像著名摇滚歌手猫王Elvis的大背头)的程序员试着用`and`和`or`运算符的短路特性来模拟出三元操作符,于是在那个年代,上面的代码是这样写的。 @@ -39,7 +37,6 @@ c = int(input('c = ')) the_max = a > b and a or b the_max = c > the_max and c or the_max print('The max is:', the_max) - ``` 但是这种做法在某些场景下是不能成立的,且看下面的代码。 @@ -60,7 +57,6 @@ a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) print('The max is:', (a if a > b else b) if (a if a > b else b) > c else c) - ``` 但是,这样做真的好吗?如此复杂的表达式是不是让代码变得晦涩了很多呢?我们发现,在实际开发中很多开发者都喜欢过度的使用某种语言的特性或语法糖,于是简单的多行代码变成了复杂的单行表达式,这样做真的好吗?这个问题我也不止一次的问过自己,现在我能给出的答案是下面的代码,使用辅助函数。 @@ -74,7 +70,6 @@ a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) print('The max is:', the_max(the_max(a, b), c)) - ``` 上面的代码中,我定义了一个辅助函数`the_max`用来找出参数传入的两个值中较大的那一个,于是下面的输出语句可以通过两次调用`the_max`函数来找出三个数中的最大值,现在代码的可读性是不是好了很多。用辅助函数来替代复杂的表达式真的是一个不错的选择,关键是比较大小的逻辑转移到这个辅助函数后不仅可以反复调用它,而且还可以进行级联操作。 @@ -86,6 +81,5 @@ a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) print('The max is:', max(a, b, c)) - ``` diff --git a/知乎问题回答.md b/知乎问题回答.md index 68bc00d..2d96658 100644 --- a/知乎问题回答.md +++ b/知乎问题回答.md @@ -94,4 +94,4 @@ - 《Scrum敏捷软件开发》(*Software Development using Scrum*) - 《高效团队开发 - 工具与方法》 -当然学习编程,最重要的通过项目实战来提升自己的综合能力,Github上有大量的优质开源项目,其中不乏优质的Python项目。有一个名为[“awesome-python-applications”](https://github.com/mahmoud/awesome-python-applications)的项目对这些优质的资源进行了归类并提供了传送门,大家可以了解下。除此之外,还要为大家推荐一个名为[“Python-100-Days”](https://github.com/jackfrued/Python-100-Days)的项目,上面有大量优质的Python学习资料(包括文档、代码和相关资源)。如果自学能力不是那么强,可以通过网络上免费或者付费的视频课程来学习对应的知识;如果自律性没有那么强,那就只能建议花钱参加培训班了,因为花钱在有人监督的环境下学习对很多人来说确实是一个捷径,但是要记得:“师傅领进门,修行靠各人”。选择自己热爱的东西并全力以赴,不要盲目的跟风学习,这一点算是过来人的忠告吧。记得我自己刚开始进入软件开发这个行业时,有人跟我说过这么一句话,现在也分享出来与诸君共勉:“浮躁的人有两种:只观望而不学习的人,只学习而不坚持的人;浮躁的人都不是高手。” \ No newline at end of file +当然学习编程,最重要的通过项目实战来提升自己的综合能力,Github上有大量的优质开源项目,其中不乏优质的Python项目。有一个名为[“awesome-python-applications”](https://github.com/mahmoud/awesome-python-applications)的项目对这些优质的资源进行了归类并提供了传送门,大家可以了解下。如果自学能力不是那么强,可以通过网络上免费或者付费的视频课程来学习对应的知识;如果自律性没有那么强,那就只能建议花钱参加培训班了,因为花钱在有人监督的环境下学习对很多人来说确实是一个捷径,但是要记得:“师傅领进门,修行靠各人”。选择自己热爱的东西并全力以赴,不要盲目的跟风学习,这一点算是过来人的忠告吧。记得我自己刚开始进入软件开发这个行业时,有人跟我说过这么一句话,现在也分享出来与诸君共勉:“浮躁的人有两种:只观望而不学习的人,只学习而不坚持的人;浮躁的人都不是高手。” \ No newline at end of file diff --git a/那些年我们踩过的那些坑.md b/那些年我们踩过的那些坑.md index 3be7d4f..f9cd50d 100644 --- a/那些年我们踩过的那些坑.md +++ b/那些年我们踩过的那些坑.md @@ -34,7 +34,6 @@ def main(): if __name__ == '__main__': main() - ``` 上面代码的部分运行结果如下图所示,出现这个结果的原因是Python出于对性能的考虑所做的一项优化。对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫`small_ints`的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把频繁使用的整数对象的值定在[-5, 256]这个区间,如果需要这个范围的整数,就直接从`small_ints`中获取引用而不是临时创建新的对象。因为大于256或小于-5的整数不在该范围之内,所以就算两个整数的值是一样,但它们是不同的对象。 @@ -44,7 +43,6 @@ if __name__ == '__main__': 当然仅仅如此这个坑就不值一提了,如果你理解了上面的规则,我们就再看看下面的代码。 ```Python -import dis a = 257 @@ -58,17 +56,15 @@ def main(): if __name__ == "__main__": main() - ``` 程序的执行结果已经用注释写在代码上了。够坑吧!看上去`a`、`b`和`c`的值都是一样的,但是`is`运算的结果却不一样。为什么会出现这样的结果,首先我们来说说Python程序中的代码块。所谓代码块是程序的一个最小的基本执行单位,一个模块文件、一个函数体、一个类、交互式命令中的单行代码都叫做一个代码块。上面的代码由两个代码块构成,`a = 257`是一个代码块,`main`函数是另外一个代码块。Python内部为了进一步提高性能,凡是在一个代码块中创建的整数对象,如果值不在`small_ints`缓存范围之内,但在同一个代码块中已经存在一个值与其相同的整数对象了,那么就直接引用该对象,否则创建一个新的对象出来,这条规则对不在`small_ints`范围的负数并不适用,对负数值浮点数也不适用,但对非负浮点数和字符串都是适用的,这一点读者可以自行证明。所以 `b is c`返回了`True`,而`a`和`b`不在同一个代码块中,虽然值都是257,但却是两个不同的对象,`is`运算的结果自然是`False`了。 为了验证刚刚的结论,我们可以借用`dis`模块(听名字就知道是进行反汇编的模块)从字节码的角度来看看这段代码。如果不理解什么是字节码,可以先看看[《谈谈 Python 程序的运行原理》]((http://www.cnblogs.com/restran/p/4903056.html))这篇文章。可以先用`import dis`导入`dis`模块并按照如下所示的方式修改代码。 ```Python -if __name__ == "__main__": - main() - dis.dis(main) +import dis +dis.dis(main) ``` 代码的执行结果如下图所示。可以看出代码第6行和第7行,也就是`main`函数中的257是从同一个位置加载的,因此是同一个对象;而代码第9行的`a`明显是从不同的地方加载的,因此引用的是不同的对象。 @@ -82,20 +78,14 @@ if __name__ == "__main__": Python中有一种内置的数据类型叫列表,它是一种容器,可以用来承载其他的对象(准确的说是其他对象的引用),列表中的对象可以称为列表的元素,很明显我们可以把列表作为列表中的元素,这就是所谓的嵌套列表。嵌套列表可以模拟出现实中的表格、矩阵、2D游戏的地图(如植物大战僵尸的花园)、棋盘(如国际象棋、黑白棋)等。但是在使用嵌套的列表时要小心,否则很可能遭遇非常尴尬的情况,下面是一个小例子。 ```Python -def main(): - names = ['关羽', '张飞', '赵云', '马超', '黄忠'] - subjs = ['语文', '数学', '英语'] - scores = [[0] * 3] * 5 - for row, name in enumerate(names): - print('请输入%s的成绩' % name) - for col, subj in enumerate(subjs): - scores[row][col] = float(input(subj + ': ')) - print(scores) - - -if __name__ == '__main__': - main() - +names = ['关羽', '张飞', '赵云', '马超', '黄忠'] +subjs = ['语文', '数学', '英语'] +scores = [[0] * 3] * 5 +for row, name in enumerate(names): + print('请输入%s的成绩' % name) + for col, subj in enumerate(subjs): + scores[row][col] = float(input(subj + ': ')) + print(scores) ``` 我们希望录入5个学生3门课程的成绩,于是定义了一个有5个元素的列表,而列表中的每个元素又是一个由3个元素构成的列表,这样一个列表的列表刚好跟一个表格是一致的,相当于有5行3列,接下来我们通过嵌套的for-in循环输入每个学生3门课程的成绩。程序执行完成后我们发现,每个学生3门课程的成绩是一模一样的,而且就是最后录入的那个学生的成绩。 @@ -110,41 +100,29 @@ b = ['apple', 'pitaya', 'grape'] 知道了这一点,我们可以回过头看看刚才的程序,我们对列表进行`[[0] * 3] * 5`操作时,仅仅是将`[0, 0, 0]`这个列表的地址进行了复制,并没有创建新的列表对象,所以容器中虽然有5个元素,但是这5个元素引用了同一个列表对象,这一点可以通过`id`函数检查`scores[0]`和`scores[1]`的地址得到证实。所以正确的代码应该按照如下的方式进行修改。 ```Python -def main(): - names = ['关羽', '张飞', '赵云', '马超', '黄忠'] - subjs = ['语文', '数学', '英语'] - scores = [[]] * 5 - for row, name in enumerate(names): - print('请输入%s的成绩' % name) - scores[row] = [0] * 3 - for col, subj in enumerate(subjs): - scores[row][col] = float(input(subj + ': ')) - print(scores) - - -if __name__ == '__main__': - main() - +names = ['关羽', '张飞', '赵云', '马超', '黄忠'] +subjs = ['语文', '数学', '英语'] +scores = [[]] * 5 +for row, name in enumerate(names): + print('请输入%s的成绩' % name) + scores[row] = [0] * 3 + for col, subj in enumerate(subjs): + scores[row][col] = float(input(subj + ': ')) + print(scores) ``` 或者 ```Python -def main(): - names = ['关羽', '张飞', '赵云', '马超', '黄忠'] - subjs = ['语文', '数学', '英语'] - scores = [[0] * 3 for _ in range(5)] - for row, name in enumerate(names): - print('请输入%s的成绩' % name) - scores[row] = [0] * 3 - for col, subj in enumerate(subjs): - scores[row][col] = float(input(subj + ': ')) - print(scores) - - -if __name__ == '__main__': - main() - +names = ['关羽', '张飞', '赵云', '马超', '黄忠'] +subjs = ['语文', '数学', '英语'] +scores = [[0] * 3 for _ in range(5)] +for row, name in enumerate(names): + print('请输入%s的成绩' % name) + scores[row] = [0] * 3 + for col, subj in enumerate(subjs): + scores[row][col] = float(input(subj + ': ')) + print(scores) ``` 如果对内存的使用不是很理解,可以看看[PythonTutor网站](http://www.pythontutor.com/)上提供的代码可视化执行功能,通过可视化执行,我们可以看到内存是如何分配的,从而避免在使用嵌套列表或者复制对象时可能遇到的坑。 @@ -168,18 +146,9 @@ class Student(object): return self.__name + ': ' + str(self.__age) -def main(): - stu = Student('骆昊', 38) - # 'Student' object has no attribute '__name' - # print(stu.__name) - # 用下面的方式照样可以访问类中的私有成员 - print(stu._Student__name) - print(stu._Student__age) - - -if __name__ == '__main__': - main() - +stu = Student('骆昊', 38) +print(stu._Student__name) +print(stu._Student__age) ``` Python为什么要做出这样的设定呢?用一句广为流传的格言来解释这个问题:“We are all consenting adults here”(我们都是成年人)。这句话表达了很多Python程序员的一个共同观点,那就是开放比封闭要好,我们应该自己对自己的行为负责而不是从语言层面来限制对数据或方法的访问。