{ "cells": [ { "cell_type": "markdown", "source": [ "# Basic Programming in Python:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Up to now, most of our effort has been spent on using specialized packages like NumPy and Pandas, but at some point, you will need to do something those packages don't make particularly easy. Even when doing simple things, you will need to speak some basic Python. \n", "\n", "Today, we're going to cover the basics of data types in Python and use simple programming structures to repeat an analysis on multiple data sets. Lastly, we will learn about refactoring our code to make it easier to read and more reusable." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "To illustrate these features, we'll be examining data from a comparative study of cognitive ability between macaques and lemurs [link](https://www.researchgate.net/publication/257075016_Lemurs_and_macaques_show_similar_numerical_sensitivity). Data are available [here](http://www.duke.edu/~jmp33/dibs/primates.tar.gz). We will (in a code cell below) download these data into a subdirectory ```data/primates``` inside the working directory." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "# Part 1: The Python data Model:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Quick review:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "We've already worked with a few types of data in Python:\n", "\n", "- Pandas data frames are like spreadsheets\n", " - they have named rows and columns\n", " - they can contain data of different types\n", " - they have lots of high-level methods for aggregating, analyzing, and plotting data\n", "- NumPy arrays are for efficiently storing lots of data of the same type\n", " - can be more than 2d (remember the MRI image)\n", " - all data must be of the same type\n", " - can use advanced indexing/slicing methods to get subset of data\n", " - fast numerical computations\n", "- lists are for general ordered collections\n", " - a list of objects of any type\n", " - can add or delete elements\n", " - elements are ordered starting from 0\n", " - use the square bracket (```[ ]```) notation both to make a list and retrieve elements\n", " " ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Other data types:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "In addition to these, there are lots of other types of variables in Python. In fact, you can even define your own!\n", "\n", "One of the key features of Python, is that lots of different types of variables behave similarly. So learning a few key types of commands will carry us a long way." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Tuples" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "For example, let's take a look at **tuples**, which look a lot like lists without the square brackets:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 1, "source": [ "mylist = ['a', 'b', 'c', 'd', 'e']\n", "mytup = 'a', 'b', 'c', 'd', 'e'\n", "\n", "print(mylist)\n", "print(mytup)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['a', 'b', 'c', 'd', 'e']\n", "('a', 'b', 'c', 'd', 'e')\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "You can see that tuples are printed with parentheses, which are not required, but make the syntax easier to read. In fact, we will often define tuples this way:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 2, "source": [ "another_tup = (1, 2, 3)\n", "one_element_tuple = 'a',\n", "\n", "print(another_tup)\n", "print(one_element_tuple)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(1, 2, 3)\n", "('a',)\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Lists and tuples behave a lot alike:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 3, "source": [ "print(len(mylist))\n", "print(len(mytup))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "5\n", "5\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 4, "source": [ "print(mylist[1])\n", "print(mytup[1])\n", "\n", "mylist[1] == mytup[1]" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "b\n", "b\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "True" ] }, "metadata": {}, "execution_count": 4 } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 5, "source": [ "print(mylist[2:])\n", "print(mytup[2:])" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['c', 'd', 'e']\n", "('c', 'd', 'e')\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "But there is one important way in which tuples and lists differ: **tuples are immutable**. This means that you cannot add to, delete from, or change a tuple. Once created, its contents cannot be altered." ], "metadata": {} }, { "cell_type": "code", "execution_count": 6, "source": [ "mylist[-1] = 'egg'\n", "print(mylist)\n", "\n", "mytup[-1] = 'egg'\n", "print(mytup)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['a', 'b', 'c', 'd', 'egg']\n" ] }, { "output_type": "error", "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmylist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mmytup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'egg'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmytup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Among other things, this means that tuples cannot be sorted or reversed, though using the ```+``` operator still works, since it creates a new tuple:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 7, "source": [ "print(mylist + ['f', 'g', 'h'])\n", "print(mytup + ['f', 'g', 'h'])" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['a', 'b', 'c', 'd', 'egg', 'f', 'g', 'h']\n" ] }, { "output_type": "error", "ename": "TypeError", "evalue": "can only concatenate tuple (not \"list\") to tuple", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmylist\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'f'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'g'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'h'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmytup\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'f'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'g'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'h'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: can only concatenate tuple (not \"list\") to tuple" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Of course, we can't add lists and tuples! Python wouldn't know what we wanted the result to be. But since lists and tuples are so similar, we can convert them to one another using their *constructors*:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 8, "source": [ "print(list(mytup))\n", "print(tuple(mylist))\n", "\n", "print(mytup + tuple(['f', 'g', 'h']))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['a', 'b', 'c', 'd', 'e']\n", "('a', 'b', 'c', 'd', 'egg')\n", "('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "This will often be handy when we have some type of data that are a *sequence* (an ordered collection that we can iterate over (more on that below))." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Strings" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Believe it or not, strings are also sequences in Python. They are a lot like both lists and tuples:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 9, "source": [ "mystr = 'like a sir'\n", "print(mystr)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "like a sir\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 10, "source": [ "print(mystr[5:])\n", "print(list(mystr))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a sir\n", "['l', 'i', 'k', 'e', ' ', 'a', ' ', 's', 'i', 'r']\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "In fact, we can think of a string as just like a list or tuple with some special functions attached that are particularly useful for strings:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 11, "source": [ "print(mystr.upper())\n", "print(mystr.capitalize())\n", "print(mystr.split(' ')) # that is, split the string on the spaces" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "LIKE A SIR\n", "Like a sir\n", "['like', 'a', 'sir']\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "But strings, like tuples, are immutable." ], "metadata": {} }, { "cell_type": "code", "execution_count": 12, "source": [ "mystr[-1] = 'n'" ], "outputs": [ { "output_type": "error", "ename": "TypeError", "evalue": "'str' object does not support item assignment", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmystr\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'n'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Even so, operations like reversing and sorting are supported (they just return a new string, leaving the old alone):" ], "metadata": {} }, { "cell_type": "code", "execution_count": 13, "source": [ "print(mystr[::-1])\n", "print(sorted(mystr))\n", "print(''.join(sorted(mystr)))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "ris a ekil\n", "[' ', ' ', 'a', 'e', 'i', 'i', 'k', 'l', 'r', 's']\n", " aeiiklrs\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "*Digression*: If the ```join``` syntax looks funky to you, you're not alone. We might like to write\n", "\n", "```python\n", "print(sorted(mystr).join(''))\n", "```\n", "\n", "meaning we want to join the elements of the list with no space in between, but remember that we called \n", "\n", "```python\n", "mystr.split(' ')\n", "```\n", "\n", "and since ```split``` a thing we do to strings, ```join``` must be a thing we do to strings, not lists. As a result, the pattern for merging a list of strings is to call ```join``` on the string we want *in between* the elements of the list:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 14, "source": [ "print('-'.join(['trick', 'or', 'treaters']))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "trick-or-treaters\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Go figure." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Dictionaries" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "There are times when we might want to store a collection of variables together, but there is no natural ordering for the variables. For instance, a row in a data frame might be converted to a list, but it would be more helpful to have the column name associated with each variable than to get the entries in any particular order. We would much prefer to get the value by the column name than by an index.\n", "\n", "This concept of storing not just values (as in a list or tuple), but as key-value *pairs* is realized by the Python dictionary variable type. Dictionaries in Python are the basis for objects, and so they are very efficient. As opposed to lists, **dicts** use curly braces:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 15, "source": [ "mydict = {'a': 5, 'b': 7}\n", "print(mydict)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "{'b': 7, 'a': 5}\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Unlike lists or tuples, we get elements from a dictionary by providing a *key*, which returns the corresponding *value*:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 16, "source": [ "print(mydict['a'])\n", "print(mydict['b'])" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "5\n", "7\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Like lists, we can add to dictionaries. A dictionary key can be any object that cannot change (technically it must be \"hashable\"), and its corresponding value can be anything:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 17, "source": [ "# we can add a key, value pair \n", "mydict[101] = ['a', 0.1, [4, 5, 7]]\n", "mydict[(1, 2)] = 10\n", "print(mydict)\n", "print(len(mydict))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "{(1, 2): 10, 'b': 7, 101: ['a', 0.1, [4, 5, 7]], 'a': 5}\n", "4\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "And because dicts are key, value pairs, we can make dicts from a tuple or list of 2-tuples:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 18, "source": [ "print(dict([('a', 0), ('b', 1), ('last', 'foo')]))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "{'last': 'foo', 'b': 1, 'a': 0}\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "### However:\n", "- **Dicts are not ordered**\n", "- as a result, dicts can't be sliced, and we can't get an element by index\n", "- we can iterate over a dict (see below), but there are no guarantees about which keys come first or last" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Containers and Iteration" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Among the most important commonalities that lists, strings, tuples, and dicts all have (and share with data frames and numpy arrays) are *containment* and *iteration*. This is one of the best examples of how very different data types in Python can behave very similarly, lessening our need to learn unique syntax for every type of data. " ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Containment\n", "In Python, we can check whether an element is in a collection with the ```in``` keyword:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 19, "source": [ "print(mytup)\n", "print(mylist)\n", "print(mystr)\n", "print(mydict)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "('a', 'b', 'c', 'd', 'e')\n", "['a', 'b', 'c', 'd', 'egg']\n", "like a sir\n", "{(1, 2): 10, 'b': 7, 101: ['a', 0.1, [4, 5, 7]], 'a': 5}\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 20, "source": [ "print('b' in mytup)\n", "print('egg' in mylist)\n", "print('sir' in mystr)\n", "print('ik' in mystr)\n", "print(101 in mydict)\n", "print('a' in mydict)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "True\n", "True\n", "True\n", "True\n", "True\n", "True\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Note that for dicts, containment checks for *keys* not values. That is, we can find out whether an entry is in the dictionary, but not its value." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Iteration\n", "\n", "In many cases, we want to perform some logic for every element in a collection. To do so, we need a way of stepping through that collection, looking at one element at a time. In Python, this is done with the ```for``` keyword:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 21, "source": [ "for elem in mylist: # note: this line must end in a colon\n", " print(elem) # this line must be indented" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a\n", "b\n", "c\n", "d\n", "egg\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 22, "source": [ "for char in mystr: # char is the variable name we give to each element as we step through\n", " print(char + '-letter')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "l-letter\n", "i-letter\n", "k-letter\n", "e-letter\n", " -letter\n", "a-letter\n", " -letter\n", "s-letter\n", "i-letter\n", "r-letter\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 23, "source": [ "for key in mydict: # note: iterating over a dict gives us keys\n", " print(mydict[key]) # every indented line gets repeated\n", " print('--------')\n", "print(len(mydict)) # this line is not indented, so doesn't get repeated" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "10\n", "--------\n", "7\n", "--------\n", "['a', 0.1, [4, 5, 7]]\n", "--------\n", "5\n", "--------\n", "4\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Almost every data structure in Python can be iterated over, and the ability to do this will allow us to repeat a block of code for each element of a collection. This ability to build code that works for a single element of a collection and easily repeat it is part of the essence of programming." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Using Logic:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "It's pretty typical that we might want to decide whether or not to run a block of code based on some logical condition. The most basic conditional in Python is the ```if``` statement:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 24, "source": [ "if len(mylist) > 2:\n", " print(mylist[2])" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "c\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 25, "source": [ "testvar = mytup\n", "\n", "if isinstance(testvar, list):\n", " print(\"variable is a list\")\n", "elif isinstance(testvar, tuple):\n", " print(\"variable is a tuple\")\n", "else:\n", " print(\"variable is neither list nor tuple\")" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "variable is a tuple\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "And we can combine conditions with logical operations:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 26, "source": [ "vowels = 'aeiou'\n", "sentence = 'it was the best of times, it was the worst of times'.split(' ')\n", "print(sentence)\n", "\n", "for word in sentence:\n", " firstletter = word[0]\n", " if firstletter in vowels or (len(word) > 4):\n", " print(word.upper())" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['it', 'was', 'the', 'best', 'of', 'times,', 'it', 'was', 'the', 'worst', 'of', 'times']\n", "IT\n", "OF\n", "TIMES,\n", "IT\n", "WORST\n", "OF\n", "TIMES\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "# Handling multiple data sets:" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "import os\n", "my_dir = os.getcwd() # get current working directory\n", "\n", "!mkdir data/primates/ # make directory called \"primates\" under \"data\"\n", "target_dir = os.path.join(my_dir, 'data/primates/')\n", "!wget -P \"$target_dir\" \"https://people.duke.edu/~jmp33/dibs/primates.tar.gz\" # download csv to folder\n", "\n", "# if this doesn't work, manually download `primates.tar.gz` from https://people.duke.edu/~jmp33/dibs/ \n", "# to your local machine, and upload it to `data/primates` folder" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "!tar -xvzf data/primates/primates.tar.gz -C data/primates/ # extract csv files from tar.gz" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "!rm data/primates/primates.tar.gz # remove tar.gz" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "Normally, we could just use the `%ls` magic to get the list of files in a given directory:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 27, "source": [ "%ls data/primates" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Black.csv Macaque.csv trained_Macaque.csv\n", "Catta.csv Mongoose.csv\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "But if we want to eventually moved over to pure Python, we need to use the `os` library, which gives us operating system commands." ], "metadata": {} }, { "cell_type": "code", "execution_count": 28, "source": [ "import os\n", "pathparts = ('data', 'primates')\n", "\n", "# this command will work on both Windows and Mac/Unix\n", "# the * expands the tuple, so it's as if we'd written os.path.join('data', 'primates')\n", "fullpath = os.path.join(*pathparts)\n", "\n", "print(fullpath)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "data/primates\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 29, "source": [ "datfiles = os.listdir(fullpath)\n", "print(datfiles)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['Black.csv', 'Catta.csv', 'Macaque.csv', 'Mongoose.csv', 'trained_Macaque.csv']\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Our first order of business is to figure out our analysis from a single dataset:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 30, "source": [ "fname = os.path.join(fullpath, datfiles[0])\n", "\n", "import pandas as pd\n", "# df is short for dataframe\n", "# in code with a lot of dataframes, we would choose a more descriptive name\n", "df = pd.read_csv(fname, index_col=0) # index_col=0 says the first column of the file is row names\n", "\n", "df.head()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Sub Species Date Block (approx 72 trials) Trial NumA NumB \\\n", "0 hopkins Black 9/3/08 1.0 1 7 8 \n", "1 hopkins Black 9/3/08 1.0 2 4 9 \n", "2 hopkins Black 9/3/08 1.0 3 3 9 \n", "3 hopkins Black 9/3/08 1.0 4 1 8 \n", "4 hopkins Black 9/3/08 1.0 5 7 9 \n", "\n", " Accuracy RT Surface Area \n", "0 0 1.317 equal \n", "1 1 0.583 equal \n", "2 1 0.700 equal \n", "3 1 1.717 congruent \n", "4 0 0.800 equal " ], "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", "
SubSpeciesDateBlock (approx 72 trials)TrialNumANumBAccuracyRTSurface Area
0hopkinsBlack9/3/081.017801.317equal
1hopkinsBlack9/3/081.024910.583equal
2hopkinsBlack9/3/081.033910.700equal
3hopkinsBlack9/3/081.041811.717congruent
4hopkinsBlack9/3/081.057900.800equal
\n", "
" ] }, "metadata": {}, "execution_count": 30 } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "We can find out some interesting things:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 31, "source": [ "df['Sub'].unique()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['hopkins', 'quinn', 'redford', 'tarantino'], dtype=object)" ] }, "metadata": {}, "execution_count": 31 } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 32, "source": [ "df['Species'].unique(), df['Date'].unique()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(array(['Black'], dtype=object),\n", " array(['9/3/08', '9/4/08', '9/8/08', '9/9/08', '9/10/08', '9/11/08',\n", " '9/12/08', '9/16/08', '9/17/08', '9/18/08', '9/19/08', '9/22/08',\n", " '9/23/08', '9/30/08', '10/1/08', '9/7/10', '9/8/10', '9/9/10',\n", " '9/10/10', '9/13/10', '9/14/10', '9/15/10', '9/16/10', '9/20/10',\n", " '9/22/10', '9/23/10', '9/24/10', '9/27/10', '9/28/10', '9/29/10',\n", " '1/5/10', '1/6/10', '1/7/10', '1/8/10', '1/11/10', '1/12/10',\n", " '1/13/10', '1/14/10', '1/15/10', '1/19/10', '1/20/10', '1/22/10',\n", " '1/23/10', '1/25/10', '1/26/10', '10/2/08', '10/3/08', '10/8/08'], dtype=object))" ] }, "metadata": {}, "execution_count": 32 } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "## Groupby: Split-Apply-Combine:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "It's pretty typical in a dataset like this that we want to do some analysis for each subset of the data, however that subset is defined. Pandas makes this very easy:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 33, "source": [ "df.groupby('Sub')[['Accuracy', 'RT']].mean()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Accuracy RT\n", "Sub \n", "hopkins 0.700803 2.023438\n", "quinn 0.749074 1.345008\n", "redford 0.597222 1.260423\n", "tarantino 0.725096 1.687411" ], "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", "
AccuracyRT
Sub
hopkins0.7008032.023438
quinn0.7490741.345008
redford0.5972221.260423
tarantino0.7250961.687411
\n", "
" ] }, "metadata": {}, "execution_count": 33 } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 34, "source": [ "df.groupby(['Sub', 'Surface Area'])[['Accuracy', 'RT']].mean()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Accuracy RT\n", "Sub Surface Area \n", "hopkins congruent 0.700803 1.988470\n", " equal 0.700803 2.058406\n", "quinn congruent 0.757407 1.280183\n", " equal 0.740741 1.409833\n", "redford congruent 0.609259 1.235722\n", " equal 0.585185 1.285124\n", "tarantino congruent 0.727969 1.757307\n", " equal 0.722222 1.617515" ], "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", "
AccuracyRT
SubSurface Area
hopkinscongruent0.7008031.988470
equal0.7008032.058406
quinncongruent0.7574071.280183
equal0.7407411.409833
redfordcongruent0.6092591.235722
equal0.5851851.285124
tarantinocongruent0.7279691.757307
equal0.7222221.617515
\n", "
" ] }, "metadata": {}, "execution_count": 34 } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Groupby has much more sophisticated behavior than this (if you want to group by something other than a specific set of columns, you can supply your own criterion), which you can read about [here](http://pandas.pydata.org/pandas-docs/dev/groupby.html).\n", "\n", "In addition, we can plot things like reaction time distributions:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 35, "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "df[['Sub', 'RT']].boxplot(by='Sub');" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEaCAYAAAAboUz3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+cHXV97/HXO0n5YQPZBMqPBk3EXH/0lrrgj2sLmrXWXlqpoKJWLbK01+ttjYLYXtH+SOLDa9Fau17R1qqFQK8Vi0UFvYA8yC6CjfJrA7XINZVEQBPAYAgggSSf+8fMOUw2++Ps7szOme95Px+PTWZmZ+Z89nvmfOZ7vvOd7ygiMDOz9MyrOwAzM6uGE7yZWaKc4M3MEuUEb2aWKCd4M7NEOcGbmSXKCd46ImmPpFsljUq6WdJLKniNnVP8fpmkN5X9ulWTdKakT4yzfLWkc2e4T0n6uKQ7JN0u6duSlk2xzYWSXjuT17NmWlB3ANYYj0bECQCSfhM4Hxgo+TWmuinjmcCbgX+a6QtImhcRe2e6/SyUfcPJG4GjI+I4AEm/CDxa8mtYw7kGb51SYXoRsL39C+mv8prkRklvyJedJunafPpoSXdJOiKvzX5Z0vp82V+M+2L77vP1+eK/BE7Kv0mcPWZ9SfqUpH+XdLWkr7Vqq5LulnS+pJuB0yU9X9K/5t9GviRpUb7eekmtk9hhku7OpyeMWdJb8trzrZL+VpLy5Wfl624ATpykXPslfStf9w/ybddJenXhNf5R0u+M2e5o4MetmYj4UUTsyNffWdj2dZIuLGz3Skk3SfqepFdNEpelICL8458pf4DdwK3AncBDwPH58tcCV+fTRwBbgCPz+YuBdwBXAG/Il50J3Af0AQcBdwAn5L97OP//dePtE1gJfHWC+F4HXJlPH0l2AnptPn838MeFdTcCJ+XTa4GP5dPrC7EcBvxgspiB5wJfBebn630S+D3gqDzmJWTfkm8A/vc4Ma8GbgMOyF/vh/m2LwMuz9c5FPgPYN6YbZfmf9etwEeB/sLvHh5TLv+QT18IfD2fXgHcAxxQ97Hln+p+XIO3Tj0WESdExPOA3wIuyZefRN5kEhH3A8PAi/LfvQt4H/B4RHyxsK9vRMRPI+Jx4F/yfRSdOMk+J3IS8M/5NtvIknXRpQCSDgUWRcQN+fJ1ZAl1KsWYv5S/3iuAFwA3SboN+HXgWOC/AOsjYntE7G699gS+EhFPRMRPgOuAF0fE9cAKSYcBbwK+FGOalSLiPuDZZOW7F7hW0svzXxe/bY31xXz7TWQnjud28LdbQ7kN3qYtIjZIOlzS4eP8uphcnk6WfI4cu4sp5ifb50x10j69m6eaLQ8a87tijCrMXxQRf1pcUdKpdB7zRPu9GDgD+F1gcNwNI54ErgaulrQNOI3sxFbcZ6d/hyXINXjrVDthSXou2bHzE+CbwBslzZP0C8BLge9IWgB8jixB3SnpPYV9vVJSn6SDyZLSDWNeY9x9AjuBQyaI70bgdXlb/JFMcAE4Ih4GHpLUahc/AxjJpzcDL8ynXz9m07Ex30hW4z49jxFJiyU9A/g28LJ8/ufG2VfRqZIOyGvrK4Gb8uXrgHOykON7YzeSdLyko/PpecCv5PEDbJX0nHz5a8Zs+vq8jJ5FdtH6rklis4ZzDd46dZCkW3kqCb81IgK4XFmXyY1ktfU/iYj7Jf05cH1EfEvS7WRJ/8p82++QNc0sBS6JiNvy5QEQERPtczuwN28OuSgiPl6I70tkTSTfJWtbvgXYUdxvwZnAp/Nk/QPgrHz5R4EvSnob8LUx24yN+VYASX8GXJMn0yeAd0TEdyStATaQXa8YnaRcbydrgjoM+EBEbM3L4H5JdwKXT7DdEcBnJB1QiO+T+fT78vjvB24GFha2+2G+7iHA2yPiiUlis4ZT9hk1mxuSzgReEBHvqmDfPx8Rj0paQlaLPjFvw5/tfiuLeZLXfBrZCe6EiJj0/gCzibgGbym5UlIf8HNkteEJk7ukzWS14N3AI8BVwDvJLtS+lKzWf1D+/15gnqQFEfFHlf4FWWyvIGve+msnd5sN1+CtJ+V93H8/ItZLOgK4BrgiIv68sM6FwD0RMW5ffbNu54us1ssE7a6YVwP99YZjVi4neOt5ko4h69v//bpjMSuTE7z1si9LepisZ8k2YE294ZiVywneetmpEXEoWf/z5wLj3bhl1lhO8NbLWm3w3yS7seiv6w3HrFxO8GaZIbK7VY+rOxCzsjjBW6/ap39wRDxIVov/i4nWMWuajvvB57di3wzcGxGvlrSYbJS8ZWRjYLwh8vGozcysftOpwZ8N/Hth/jzg2oh4DtmgS+8rMzAzM5udjhJ83k/4t4HPFhafSvaVlvz/08oNzczMZqPTGvzfAH/Cvm2SR+YPViAfAe+IkmMzM7NZmDLB589t3BYRo0z+EANfkDIz6yKdjCZ5IvBqSb8NHAwcIukSsocKHBkR2yQdRTb29H4kOfGbmVUsIvargE9Zg4+I90fEMyLiWLKn81wXEWeQPUh5MF/tTOArk+yjET+rV6+uPYZUf1y2Ltcm/TStXCcym37w55PdGHIX2cOHz5/FvszMrGTTeuBHRIyQP78yIrYDv1FFUHXZvHlz3SEky2VbDZdrNVIpV9/JWtDf7+HAq+KyrYbLtRqplGvlT3SSFFW/hplZL5NEzOQiq5mZNZMTfMHw8HDdISTLZVsNl2s1UilXJ3gzs0S5Dd7MrOHcBm9m1mOc4AtSaXfrRi7barhcq5FKuTrBm5klym3wZmYN5zZ4M7Me4wRfkEq7Wzdy2VbD5VqNVMrVCd7MLFFugzczazi3wZuZ9Rgn+IJU2t26kcu2GkNDQ3WHkKRUjlcneLMGGx0drTsE62JO8AUDAwN1h5Asl201li9fXncISUrleJ3ykX2SDgSuBw7I178sItZKWg28Dbg/X/X9EXFVZZGaGZA1H7SaENauXdtePjAwkExisnJ01ItG0tMi4jFJ84EbgXcBvwXsjIiPTbFtY3rRDA8P+wNSEZdtNQYHB7nooovqDiM5TTteZ9WLJiIeyycPJKvFtzL2fjs0M7Pu0GkNfh5wC/As4JMR8b68iWYQ2AHcDLwnInaMs21javBmTdO0mqZVY6Ia/LRudJJ0KHA58E7gAeDBiAhJHwSOjog/GGcbJ3gzswpNlOCnvMhaFBEPSxoGTh7T9v4Z4IqJthscHGxf7e/r66O/v79d62hdLOqG+WLf126IJ6X51rJuiSeV+aGhoa79PDV5vrWsW+IZL77h4WE2b97MZKaswUs6HHgyInZIOhi4GjgfuDUitubrvBt4UUS8eZztG1ODH/bX3cq4bKvhcq1G08p1xk00ko4D1pFdkJ0HXBoR/0vSxUA/sBfYDLw9IraNs31jEryZWROV0gY/wxd2gjczq5AHG+tAsX3LyuWyrYbLtRqplKsTvJlZotxEY2bWcG6iMTPrMU7wBam0u3Ujl201XK7VSKVcneDNzBLlNngzs4ZzG7yZWY9xgi9Ipd2tG7lsq+FyrUYq5eoEb2aWKLfBm5k1nNvgzcx6jBN8QSrtbt3IZVsNl2s1UilXJ3gzs0S5Dd7MrOHcBm9m1mOc4AtSaXfrRi7barhcq5FKuTrBm5klqpNnsh4IXA8cACwALouItZIWA5cCy8ieyfqGiNgxzvZugzczq9Csnskq6WkR8Zik+cCNwLuA1wE/iYiPSHovsDgizhtnWyd4M7MKzeoia0Q8lk8eSFaLD+BUYF2+fB1wWglx1iqVdrdu5LKthsu1GqmUa0cJXtI8SbcBW4FvRMRNwJERsQ0gIrYCR1QXppmZTde0+sFLOhS4nKyJ5psRsaTwu59ExGHjbOMmGjOzCk3URLNgOjuJiIclDQMnA9skHRkR2yQdBdw/0XaDg4MsX74cgL6+Pvr7+xkYGACe+irkec973vOe72y+Nb1582Ym00kvmsOBJyNih6SDgauB84GVwPaI+HAqF1mHh4fbBWnlctlWw+VajaaV62xq8EcD6yTNI2uzvzQivi5pA/BFSb8PbAHeUGrEZmY2Kx6Lxsys4TwWjZlZj3GCLyhewLByuWyr4XKtRirl6gRvZpYot8GbmTWc2+DNzHqME3xBKu1u3chlWw2XazVSKVcneDOzRLkN3sys4dwGb2bWY5zgC1Jpd+tGLttquFyrkUq5OsGbmSXKbfBmZg3nNngzsx7jBF+QSrtbN3LZVmNoaKjuEJKUyvHqBG/WYKOjo3WHYF3MCb6gSU9waRqXbTVaj8K0cqVyvE7rmaxmVr/h4eF2E8LatWvbywcGBpJJTFYO96IpaNpzGJvEZVuNwcFBLrroorrDSE7TjtcZ96KRdIyk6yR9V9Idkt6ZL18t6V5Jt+Y/J1cRuJmZzcyUNXhJRwFHRcSopIXALcCpwBuBnRHxsSm2b0wN3qxpmlbTtGpMVIOfsg0+IrYCW/PpRyTdCSxt7bfUKM1sWpzcbTLT6kUjaTnQD3w7X7RK0qikz0paVHJscy6Vvq/dyGVbDZdrNVIp144TfN48cxlwdkQ8AnwKODYi+slq+JM21ZiZ2dzqqJukpAVkyf2SiPgKQEQ8UFjlM8AVE20/ODjY7q/b19dHf39/+6tl60zpec97fvrzrWXdEo/n52a+Nb1582Ym01E3SUkXAw9GxLmFZUfl7fNIejfwooh48zjbNuYiq7ucmVkTzaab5InAW4Bfl3RboUvkRyTdLmkUWAm8u/So55hv+65OseZh5XG5ViOVcu2kF82NwPxxfnVV+eHMveHCXYEbN25kzZo1gO8KNLPm81g0Nid8sqyGy7UaqZSrhyooGBgYSOarmZn1Dj/wowMHHXRQ3SEkyyfOarhcq5FKuTrBF5x8sofTMbN0uInGzKzh3ERjZtZjnOALUml360Yu22q4XKuRSrk6wZuZJcpt8GZmDec2eDOzHuMEX5BKu1s3ctlWw+VajVTK1QnezCxRboM3M2s4t8GbmfUYJ/iCVNrdupHLthou12qkUq5O8GZmiXIbvJlZw7kN3ixBqTQlWDU6eSbrMZKuk/RdSXdIele+fLGkayTdJelqSYuqD7da/rBUx2VbDT8kvhqpHK+d1OB3A+dGxH8GfhV4h6TnAucB10bEc4DrgPdVF6aZmU3XtNvgJX0ZuCD/WRkR2yQdBQxHxHPHWd9t8GYlKj4ofu3ataxevRrwg+J72URt8AumuZPlQD+wATgyIrYBRMRWSUeUEKeZTWFsIl+zZk1tsVh36/giq6SFwGXA2RHxCDC2Wt74anoq7W7dyGVbjc2bN9cdQpJSOV47qsFLWkCW3C+JiK/ki7dJOrLQRHP/RNsPDg6yfPlyAPr6+ujv72/XQFoF6fm051u6JZ5U5hcuXMjw8HDXxJPKfEu3xDNefMPDw1Oe4Dtqg5d0MfBgRJxbWPZhYHtEfFjSe4HFEXHeONu6Dd7MrEITtcFPmeAlnQhcD9xB1gwTwPuB7wBfBJ4ObAHeEBE/HWd7J3gzswrN+EaniLgxIuZHRH9EHB8RJ0TEVRGxPSJ+IyKeExG/OV5yb5qxX8+sPC7barhcq5FKufpOVjOzRHksmoLixSozs6bwWDQdSOVrmZkZOMHvw32Kq+OTZzVcrtVIpVyndSdrioYLt32vW7eu3V9/wLd9WwOMjo76OLUJ9XyCH5vIfdt3NZyEqvHTnza+85pVyE00ZmZjuIkmQX19fXWHkCz3UCpPsVlx7dq17eVuVixPKtfjnOAL+vv76w7BbErFRL5582Y3K5YkxetxTvAFTX0Tm8BlW41WErLZS/F6nNvgzRrMJ06bjBN8QSoXVrqRy9aaJJXrcU7wZmZjpHI9zmPRmJk1nMeiMTPrMU7wBW4nrs7Q0FDdISTJx2w1UilXJ3ibE6Ojo3WHkCSXq03GCb7AXc6q4/7a1fBYNDaZKW90kvQ54BRgW0T8Sr5sNfA24P58tfdHxFWVRWmN5FvqralSGVqjkztZLwQ+AVw8ZvnHIuJj5YdUn1Te1G7hW+qr4RNn9XpmLJqIuEHSsnF+tV+XHDOrnk+c1fBYNPtaJekM4GbgPRGxo6SYatPUN7EJBgcH6w7BbFIei+YpnwKOjYh+YCuQVFONlc8nT2uSnmmiGU9EPFCY/QxwxWTrDw4Otr/u9PX10d/f3/7At74SdcP80NBQ+xblbognpfnWsm6JJ5X5rVu37nPtqO54UpnfunVrV8Uz3udpeHh4yhNRR0MVSFoOXBERx+XzR0XE1nz63cCLIuLNE2zbmKEKBgcHueiii+oOI0lDQ0Occ845dYeRhOExF1lXr14NNLutuNs0LRdMNFRBJ90kPw8MAIdJ+iGwGni5pH5gL7AZeHup0dbEfbWrc9VVVznBl2RsIk+hrbgbFE+cPXORdYKa+YUVxFKLsbWhlia/qd3Id1xatyt+5lPpndTzT3Qqvqlf+MIXknhTu0Xx5Llt27Z22frkWZ4HH3yw7hCSlEqFpOcTfNG9995bdwhJGR0d3e+iEGQX2p3gy/HII4/UHUKSjjrqqLpDKIUTfMHChQvrDiEp/f397bFSRkZG2kk9lYcpdANfNypP8Rvn1VdfncQ3zp5/4MeqVau48sorAdiyZQvLlmU37Z5yyilccMEFdYaWlIULF7q2WRL3oqleKr1oej7BFzkJVWfp0qXcd999dYeRnBUrVrBp06a6w0hOf39/o9rhZ9xNspfs2bOn7hCSUqxp/uhHP0riK2+3cYWkGm6DT0QxCT3++ONOQiVyf+1quHdSNVJsg+/5BF9884aHh52EzHpUihWSnk/wxbP2yMhIEmftbtTX11d3CMkoHpt/93d/l0Qi6jY9PdhYSooflg0bNvjDUhF3jSyPm2iql8rx6l40BWvWrHGCt0ZpWnc+q8ZEvWjm1RFMt3Ltx8xS4gRvc6I4ZIGVpzVuuZUrlePVCd7mRJNuGjFL5Xjt+YusRW6iqU4qH5hukGJ/7W7TGkOp6ZzgbU6k0u2sG/jeDeuUE3zBcOHZljZ7vsegGi7XaqT48B8neLOG8b0b1ejJJzpJ+hxwCrAtIn4lX7YYuBRYRvZM1jdExI4K45wTTT1Ldys3JVTvJS95Sd0hJCmVcfY76UVzIfBfxyw7D7g2Ip4DXAe8r+zALC2pfGC6jYeAqEYq5Tplgo+IG4CHxiw+FViXT68DTis5rloMDQ3VHUKyUrn1u9u4d1I1UinXmfaDPyIitgFExFbgiPJCqk8qb2o3coI3m3tlXWRtxmAzU3AzQnV8faM8xd4e69atax+3Te7t0Q1SLNeZJvhtko6MiG2SjgLun2zlwcHBdmH19fXR39+/z8U3oLb5oaEhRkdHWb58OWvXrm331x4cHGRgYKD2+Dzv+fHmWxesN2zYsN/F7G6Ir4nzrWUAF110EWvWrGn/vqVb4m1NT3V/SUejSUpaDlwREcfl8x8GtkfEhyW9F1gcEedNsG1jRpP0M1mrMzQ0xDnnnFN3GMnxM1mrsWTJErZv3153GB2b8WiSkj4PfAt4tqQfSjoLOB94paS7gFfk8433xBNP1B1Csq666qq6QzCb1NDQULsm/9BDD7Wnm9z5oufHg1+1ahVXXnklAFu2bGHZsmUAnHLKKVxwwQV1hpaUgUJzl83O8Jg7LlevXg00u6242xxwwAGNqvBNVIPv+TtZL7jggnYiP+iggzxmSomKici31Fu3Kx6vTz75ZBLHa88n+KGhIb785S8DsGvXrvYbedppp7nN2LpSMeF86EMf8h3CJRkdHd3vIiZkHUOamuB7vommaNGiRezY0fgRF7rSIYccws6dO+sOIwnFSsnIyAgrV64EXCmZrSY3fbmJpgN79+6tO4SkFD8wjzzySBJfebtBf39/e7zykZGRdln6ZjIbyzX4gqZdWGmSgw8+mJ/97Gd1h5Gcgw46iMcff7zuMJLgGnyCUryw0i2KTQmPP/64r2+UpHjM7tq1y8dsSS677LJ2jzrIbnYCePDBBxtbrj2f4FN8U7uFmxKsSU4//XQOP/xwIKvBDw4OAs0eZqPnm2ia/LWs27lsq+e7r6uRN3nUHUbH3EQzgY9//OOsX7++Pd+6a23jxo1OQtb1fM2oPMWbHuGpwQebfNNjzyf4s88+m+c///lAVststQ07uVu3Kl7bePLJJ31toyTFmx7nzZuXxE2PPZ/grTop3jjSDXxtoxrFE2dEJHHi7Pk2+Ne85jXtJpodO3awaNEiAF7+8pdz+eWX1xlaUhYsWMDu3bvrDiMJvtGpek07Xt0GPwE30VSneJF1z5497s5XEtfgq1E8ce7ZsyeJGnzPJ3g3I1jT+JitxjnnnNNO5JKSGP205xP8ZZddxs0339ye37BhAwC7d+9u7Fnb0uYafDWK3ziBJL5x9nyC/+AHP7hPX+3zzsseTNXUN9TMZibFLtM9n+D9dbc6LttqFGuUa9eu9XDBJSl2qpDU/pbUZD2f4Ddt2rRPf9fWtJ9zOXtuSqhG8WIgkMTFwG5Q7FEHWUUEmt2jblYJXtJmYAewF3gyIl5cRlBz6b777tvnTN2avu++++oKKRke56caPnFWI8UedbOtwe8FBiLioTKCqcPSpUvbZ+odO3a0p5cuXVpnWElYsWJF+3bvLVu2tKdXrFhRX1AJSLGtuBuk2PQ12wQvYF4ZgdTFSag67qFUjRRrmt3AvWj2F8A3JO0B/j4iPlNCTHNqZGSE0dHR9nxrevHixU5Cs+QeStVIsaZp1ZjVUAWSjo6IH0v6BeAbwKqIuGHMOh6qoEeddNJJ7Rr8rl27OPDAAwF44QtfyA033DDZpjYJD1VQjeOOO44777wTyO5knT9/PgDPe97zuOOOO+oMbUqVDFUQET/O/39A0uXAi4H9PrmDg4Ptpo++vj76+/vbNZBWDa+u+U2bNvHYY48xb17W0vTYY48B8MADD3RFfE2fH/uc27179+7zYPO642v6/MjICMuXL2f58uX09/fXHk+T51esWMHdd98NwKOPPsrChQvZvXt3u9JXd3zF+db0VCNezrgGL+lpwLyIeETSzwPXAGsj4pox63V1Dd61zOr421E1iuOWb9myhWXLlgHNHre8GzS5XKuowR8JXC4p8v38n7HJvVtI+/3dE9q1axcAN95446TbdfNJq1usXLmShx7KOliNjIy0u/G1mhRsZtwxoBqf//zn28crZGXbWt7tCX4iM07wEXE30IiOt50m46Y9pqvb+QJ2Ndw7qRpLly7l4YcfBvZtg29yl+mev5O16NBDD607hKS4O581ycqVK9m5cyeQ1d6POeaY9vKm6vkHfhQNDQ25BlSiZz7zme2vuRHRbvJatmxZ+2KWTZ970VRjwYIF7NmzZ7/l8+fP7/qHf/iBHx3wrd7letWrXrXPRatnPOMZ7eU2cx4/qRof/ehHJzxxNpVr8AXDw8NuPiiReyhVz9eNpm86nS460Q3lP1ENvtHDDJRteHig7hCSsmPHDnbv3t3+etuaLvaDt+lbtWpVu+870J5etWpVvYE1RERM+dPpet2Q3CfjJpqCtWvBd32XZ8WKFdxzzz1AluwXLlzYXm4zd/rpp3P44YcD2cXrwcFBwBevy9TqQdN0TvD7GAYGao4hHe4HX42zzjqrffEa4AMf+AAA69at88Xrkjzvec+rO4RSOMFbZXwxsBq+eF29F7zgE3WHUAon+H0M1B1AUnzHZTVGRka499572/Ot6ZGRkbpCSs66dQPkz6dpNPeiKZCgIaE2gnvRVGPJkiX73FLfsnjxYrZv315DROlpWi5IthfNkiXZm1HGDwyXti8pi62Xbdq0iV27drXH92lNu4lmdsZL7pMtt5kYrjuAUjS+ieahh8o70w4PQ5kdEUrubtuVZtKneNu2bRNu15Rve3WaP3/+hHdcmhU1vommm79KdXNsc8035ExP2TfjgE+e09G0z66HKjBrEI+AOn1LlmTf6MtS5jl28WKo4/JI49vgy1R8WoqVbWHdAVjiWs21ZfysXz9c2r4iyj3xTIcTvM2RK+oOIFFud7eJNb4NvuuvZDb063PZX3fLVNfX3W7UtLbiKnVzWVQd20Rt8I1P8L38plapm2Pv5tg60a0nz8afOHu4sldJP3hJJ0v6nqT/J+m9s9nX7OIo66fcfvCLF9dVIrMXlFgQEsMl7ivo8g/yFLq1rbgbTzrTIcprNB9ev768Nykii60GM+5FI2kecAHwCuBHwE2SvhIR3ysruE6UeVKURokYKG+HDVb+ATkElPO0ocWLockVzezkWc6+RilvgI0o/NtU5VXiyyzZ+ip7s+km+WLg+xGxBUDSF4BTgTlN8OX6ad0BdI2yv01KP210s0qZyj15ruHdrCllT40/cZZa2UvjeJ1Ngl8K3FOYv5cs6ZvZJMpNRM2+HmHV8o1O+9hcdwCNM507LqW1U67jm3YyZZcruGxbOi3bFMp1Ngn+PuAZhflj8mX7qeK266pI6+oOoac16VhpGpdtNbq5XGfcTVLSfOAusousPwa+A7wpIu4sLzwzM5upGdfgI2KPpFXANWTdLT/n5G5m1j0qv9HJzMzqkcRYNJKWSbqjhP2slnTuOMvXSvr12e6/F0l6gaShuuNIgaSVkq7Ipw+Q9A1Jt0p6/Qz3V8rnpk6SFkn6wzl4nZWSfrUw/3ZJv1f1685WSr1oKvsqEhGrq9p36iLiFuCWuuPodup8TI/WOicAEREnTOM15kXE3gn211SLgT8C/rbTDaZR1kUDwCPAvwJExKenuX0tkqjB5xZI+ntJ/ybpKkkHSuqX9K+SRiV9SdIiAEnrJQ1Juk3S7ZJeOHZnkt4m6Wv5fi6U9Np8+d2S1ki6RdJGSc/Ol78s39+t+e9+fm7//Lkj6U8l3SXpekmfl/SevExPyH9/mKS78+lirXO1pM/l626S9M58+TJJ/z72/avvL6xe/jd/T9K6vBZ9hqRvSbpZ0qWSnpavd7KkOyXdDLSOwV8ALgFelB9vz5T0inx6o6TPSvq5fN27JZ2fb3+6pBPyz8NtwDvq+etL9ZfAs/K//a8lXZuX4UZJr4Zxy/oYSZ+S9B1Jd0hqV+DG+3xLWgb8D+Cc/HVOLH7bz4/n8yV9O3+dE/PlB0r6hzy1NCFLAAAFqUlEQVTH3CJpYM5LJyIa/wMsA54EjsvnvwC8BdgInJQvWwt8LJ9eD3w6n34pcEc+vRp4D9mBfzmwIF9+IfDafPpu4I/y6T8E/j6f/irwq/n004B5dZdLRWV9Ql6uBwKHAN8HzgWuA07I1zkM+EE+vRL4aqF8byD75ngY8CDZeLfLgCcK79+lwJvr/lvn4JjdDbwoL4sR4OD8d/8T+LO8jH8IHFsol1ZZFsu1td6z8vl1wLsKx+sfF153I3BiPv0R4Pa6y6KEcrw9n54HLCwcg98fW9aF7foK26wHfrlQXuN9vlcD5xa2b8/n2/9VPv1bwDfy6XOBz+bTzwG2AAfMZfmkVIP/QUS02hNvBZ4FLIqIG/Jl64CXFdb/J4CI+CZwiKRD8+VvBU4GTo+I3RO81uX5/7cAy/PpG4G/yWuli2P/r8KpeClweUTsioidwFeY3sgqX4uI3RHxE2AbcGS+/O7C+1cs15RtiYibgJcAvwTcmNes30qWlJ5Ldlz/IF//HyfYz3Py9f4jnx97rF8KWXs12Wfixnz5JaX9Jd1hHvCXkjYC1wK/KOmI/Hetsm75XUm3ALeRlf0vFX433ud7Kv9S2GZZPn0S+XsWEXeR3Un57E7/mDKklOB3Fab3AH1TrD+2Da41fzvZm/r0Dl5rD/l1jIj4MPAHwMFkH9Q5fSNr1Eruu3nqeDpokvWL79NenroONPb9S+n60EQezf8XcE1EnBARx0fEL0fE2wq/68Rk6z06ye9S8hbgcOD4iDgeuJ+njsV2GUhaTvZN/eUR8Xzg6+x7zO73+e5AJ9vM+R1RKSX4sYW3A3io1R4GnEH2NbjljQCSTgJ25LVRyM7obwe+Kumojl9cOjYivhsRHwFuIqt9peh64LS8ffEQ4HfITo6bgda1jJn06uje2wGr0/qbNwAnSnoWgKSnSfpPZAP3LZP0zHy9N02wn7vy9Y7N588AhseuFBE7gJ9K+rV80Vtm/yfUbidZUyHAIuD+iNgr6eU8VZOGfY+vQ8kumO6UdCRZs0onr3PolGvt65vkZZxX+J5O9l7NmZRqSePVyM8EPi3pYOAHwFmF3z8u6VayMjhrnw0jviXpj4GvSXrlmH1PdPX9nPyg2gN8F/i/M/5LulhE3CbpUrJvOtvI7mAG+Cjwz5LeBnyt091NMN0rAiAiHpQ0CPxTfnE5gD+LiO9LejvwdUmPkiWM/R5uGxG7JJ0FXKbsDvObgE8XX6Pg94F/kLSX7CbFRouI7ZJulHQ7ecUqb6K5GSjeeBmFbW6XNJr//h6y60L7rTfGFWTl+2rgnXR27H4K+Ns8tieBMyPiyc7/utnryRudJK0H3hMRt9YdS9PlPRB2RsTH6o7FzPaVUhPNdPTeWc3Mek5P1uDNzHpBr9bgzcyS5wRvZpYoJ3gzs0Q5wZuZJcoJ3swsUU7wlrR8JMGf5Te1tUbC/Ld8pMBbJb1oiu0nekbAscpGD324qtjNZiulO1nNJvL9iDhB0kuA3wb6I2K3pCXAATPZYT4A2PFO8NbNXIO3XnI08GBrlNCI2B4RW6E9DviSfPoF+d3OLf35WO13Sfpvcx+22cw4wVsvuQZ4Rv5Qhk9KKg6pO9HoogDHkT3R59eAv5jOIHRmdXKCt54REY+SPbDkvwMPAF+Q9Nb815ONZvmViHgiH8P+OuDF1UZqVg63wVtPiWxsjuuB6/PHt70VuJjJx7Mv1uaFxzKyhnAN3npG/nzNFYVF/WSPUYPsUW0vyKdfN2bTUyUdIOkwskfl3YRZA7gGb71kIfCJ/NF1u4FNZM01AB8APidpB/s/LOP2fNlhwAdaF2bNup1Hk7SkSVoGXBkRx1W0/50RccjUa5rNPTfRWOr2AItaNzqVpXWjE/DjMvdrVibX4M3MEuUavJlZopzgzcwS5QRvZpYoJ3gzs0Q5wZuZJer/A0uIyuU/h/xyAAAAAElFTkSuQmCC" }, "metadata": {} } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 36, "source": [ "df['RT'].hist(by=df['Sub'], bins=100);" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEGCAYAAABlxeIAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu8XFV9///XO4lEbkKAkgNEEihSKYKBAmqxEqxIFAv8bEXEFoGvfttagR/wUy5++wu2VRJatVTL96FcUkLljtwUIUQM1gs3IUAkIBUSrjnIxWBMvzQhn+8faw3ZZzLnnJkze8+ZM+f9fDzmcfbsvWftNXNmzdrrrojAzMxswmhHwMzMuoMzBDMzA5whmJlZ5gzBzMwAZwhmZpY5QzAzM8AZQqkkPSHpvSWH+QlJ/zHIsWMk3VLm9cy6laT/Lenzox2PXjZptCNgTWk4WCQiLgMu63BczEZFRPz1aMeh17mEYGZmgDOEKuwj6QFJL0u6XNImAJI+JekxSS9Iul7SDrUXSFov6URJv5T0vKRzBwtc0j9K+qGkLeurk3I4fynpF5JekvT1wrHflbRY0q/zNS6v6gMwG4qkfST9TNIqSVfkdPL3japH83d617w9X9Lf5e2DJD0l6VRJ/ZKekXRc4XXzJX1d0nckvSLpp5J26egbHYOcIZTvI8D7gV2AtwPHSToY+BLwZ8AOwJPAFXWvOxLYNz+OkHRC8aCSC4C3AYdExG/yofrqpMOAP8jXPkrS+/P+vwdujYitgWnA19p9o2atkvQG4DrgEmAb4GrgT9nwPa7/Pg81t04fsCWwI/BJ4F8lbVU4/lFgDrA18Evgi+3Gv9c5QyjfeRHRHxG/Bm4C9gE+DlwUEQ9ExFrgTOBdknYuvG5uRKyKiKeBfwY+Vji2CXA56Yv9JxHx6hDXPycifhMRTwE/AGbm/WuB6ZJ2ioj/joiflPFmzVr0TmBSRPxLRLwWEdcC9wxxvoY49t/A3+dwvgesBn6vcPy6iPhZRKwHvsWGtGCDcIZQvv7C9hpgC1KpYEVtZ0T8FngR2Klw7tOF7RWku56a3YDDgS9ExLoRXB/gs6T/992SHpJ0/PBvxax0OwLP1O1b0ejEJryYf+xrit93gJVDHLMGnCFUL4BngRm1HZI2B7ZlYCbw5sL2zvk1NQ8DxwO3SNp9RJGIeD4i/mdE7AT8FXB+rW7WrIOeY+CNEKTvO8Bvgc1qOyX1dSpSljhD6IzLSW0Je0uaTGpPuDNX69R8VtLWkt4MnExdG0NEXAmcBSwayQ+5pD+TVEuIvwbW54dZJ/0UWJc7UUyS9GHggHzsAWDPQjqZw9BtCFYyZwjlGmy8wO3A3wLfJhWXdwGOrjvtBuBnwH2ktoeLG4SzAPg74Pt17Q9DXj/bH7hL0ivA9cBJEbF8qDdjVrbchvZhUon3RVInjGvzscdInR++D/wCaDggc6jgy4vp+KThFsiRNA1YAEwl3VFeEBH/ImkKcCUwHVgOHBURq/JrzgROANYBJ0fEwsreQQ+QtB7YLSIeH+242ODyXesPSY38k4BrIuILkuYAnwKez6eeFRG35Nc4LQxD0nzgqYj4/0c7LuNdMyOV1wGnRsQSSVsAP5O0kJTDL4qIcyWdTuo5c4ak3weOAvYgdW9cJOkt4aXZbIyLiFclHRwRayRNBH4s6Xv58Fci4ivF8yXtgdOCjSHDVhlFxMqIWJK3VwPLSF/uI0h9icl/j8zbhwNXRMS6XCXxGBvqCK0x/0CMERGxJm9OJt1Q1f53jbpHHoHTQjP8/e8SLbUhSJpB6st7JzA1IvohZRrA9vm0nYBiY+kzbNyrwAoiYqKri8YGSRMk3U/q0nhbRNT60H9G0hJJFxYGRzktNCEiTnB1UXdoOkPI1UXXkOpBV9PaiEKznhAR6yNiH1Ip+YBcRXo+sGtEzCRlFF8ezTiajVRTs51KmkTKDC6NiBvy7n5JUyOiP/cXrjWoPcPAPvXT2HggCpKcgVhlImKoEa5lhP+KpMXA7Lq2gwtIvcSgybQATg9WnVbSQrMlhIuBhyPivMK+G4Hj8vYnSN0ma/uPlrRJnkxqN+DuQSLa8cecOXN83R6/dlUkbVerDpK0KXAI8EjdAKoPA0tbTQtQTnoo8zN3WGM7ThGtp4VhSwiSDiTNxfNQrjsN0gCpecBVeRK2FaTeFETEw5KuIo2uXQt8OkYSM7PuswNwiaQJpJupKyPiZkkLJM0kdcteDvwlOC3Y2DNshhARPwYmDnL4fYO85hzgnDbiZdZ1IuIh0my09fuPHeI1Tgs2Zoy7kcqzZs3ydcfBtcerMj9zh9X5cMoOq1XDjlSu7MKSS89WCUlExY3KZXN6sCq0mhbGXQnBzMwa66oMoa9vBn19M0Y7GmZdw2nCOqmrqoykVLJx0dnaUVWV0RCT27U90eNgVUZOE9aOVtOCMwTrOVW2IUjaLAqT2wEnkdYEfjE2TPQ4JSJqEz1+izT1+DRgEdBwcjtnCFYFtyGYVSgaT27niR6tJzhDMGvBIJPbeaJH6wlNzWVkZkmkRd33kfQm4DpJe1LSRI9nn33269uzZs3yOA5r2eLFi1m8ePGIX+82BOs5nRqHIOlvgTXAJ4FZsWGixx9ExB6SzgAiIubl828B5kTEXQ3CchuClc5tCGYVGWRyu2WUMNGjWTdwlZFZ8wab3O5OPNGj9QBXGVnP6aWpK5wmrB2lVxlJukhSv6QHC/vmSHpa0n35Mbtw7ExJj0laJun9rb8FMzMbDc20IcwHDm2w/ysRsW9+3AIgaQ9ScXkP4APA+ard4piZWVcbNkOIiB8BLzc41OiH/gg8EMfMbExqp5fRZyQtkXRhrecFHohjPUzSNEm3S/q5pIcknZj3uwrVesJIM4TzgV0jYiZpxOaXy4uSWddaB5waEXsC7yLdFL01H3MVqo15I+p2GhG/Kjy9ALgpbz8DvLlwbFre11D9yEyzkWh3dGaz8rQUK/P2aknL2FACHrIKFVguqVaFutHANLNu0FS3U0kzgJsiYq/8vC8nDiSdAuwfEccUZnd8Bymh3EYLszu6i52VoRPdTnOaWAy8DTiNNDBtFXAvcFpErJL0NeCnEXFZfs2FwM0R8e0G4bnbqZWuim6nlwE/AXaX9KSk44FzJT0oaQlwEHAKpIE4QG0gzs14II71IElbANeQ1jdYjatQrUcMW2UUEcc02D1/iPPPAc5pJ1Jm3UrSJFJmcGlE3ADVVaG6GtVa5cntzOpUvEDOAuCFiDi1sK+SKtTaewGnCRuZVtOC5zIya5KkA4GPAw/lNRECOAs4RtJMYD1pCc2/BM9lZGOPSwjWczyXkVnSA9NfT0YSfX0zRjsiZmbjSleWEFJJXL4rshFxCcEs6YESgpmZjQZnCGZNajCX0Ul5/xRJCyU9KunWwtxensvIxhRXGVnPqarKKK+X3BcRS/LgtJ+Rpqc4HngxIs6VdDowJSLOKHQ73Z80BmER7nZqHeQqI7OKRMTKiFiSt1eT1lOeRsoULsmnXQIcmbcPx9PB2xjiDMFsBPJcRjOBO4GpEdEPr0+At30+zdPB25jiDMGsRQ3mMqqvz3H9jo1JHqls1oJGcxkB/ZKmRkR/bmd4Pu/3XEbWUZXPZSTpIuBDQH9E7J33TQGuBKaThuofFRGr8rEzgRNIi4mcHBELBwnXjcpWiVGYy2ge8FJEzBukUdlzGdmoqKJReT5waN2+M4BFEfF7wO3Amfniv09pK0RN9mhl6yqFuYzeK+n+wnKZ84BDJD0K/DEwFzwdvI09zS6QM520QE6thPAIcFChiLw4It4q6QwgImJePu97wNkRsdEKUc2UEMB3RtY6j1Q2SzrV7XR796owM+stZfUyauv2pa9vBiOuWTLrQU4TNhpG2suo1F4V/f0rgB8AB48wOjaetduzohulNLGh6tSsE5ptQ5hBakPYKz8vtVdFuhMqfvndhmAj1wttCPVpwunARqL0NgRJlwE/AXaX9KSk40m9KNyrwsYdSRdJ6pf0YGHfHElP515HtZ5HtWOe3M7GjK6Y3M4lBCtTxeMQ3g2sBhYUet3NAX4TEV+pO3cP4DJGMLmdSwhWBk9uZ1ahiPgR8HKDQ40S3RF4cjsbQ5whmJXjM5KWSLqwsB6Cu2HbmOK5jMzadz7wdxERkv4B+DLwyVYDKc5lNFBaZ3zq1OmsXLl85LG0nlf5XEZVcRuCVaXqXkb1I/cHO9Zg5P4twJxmRu4PliacHqwVbkMwq54otBnksTg1HwaW5u0bgaMlbSJpF2A34O6OxdKsRa4yMmtB7oY9C9hW0pPAHOBgSTOB9aTZf/8SUjdsSbVu2GtxN2zrcq4ysp7TiwPTXGVkI+EqIzMzGxFnCGZmBjhDMDOzzBmCWQsGmctoiqSFkh6VdGthYJrnMrIxxRmCWWtGaUlZs+o5QzBrwSBzGR0BXJK3LwGOzNuH47mMbAxpK0OQtFzSA3nB8bvzvkGLz61LQ/b7+ma0E02zqnlJWesJ7ZYQ1gOzImKfiKjd+TQsPo/Mq0DQ37/SmYKNJR4sYGNSuyOVxcaZyhHAQXn7EmAxKZNow6t5SUGzrlTqkrJmIzWqk9tJehz4NfAa8I2IuFDSyxExpXDOSxGxTYPXNjVS2aOWrVUdmNxuBhUuKVt7Dx6pbO1qNS20W0I4MCKek/Q7wMK8pGb9N9bfYOsZg8xlNBe4WtIJwApSzyLPZWRjTlsZQkQ8l//+StL1pB4UgxWfNzKwiLy4najYONZuMbkVEXHMIIfeN8j55wDnVBcjs/KMuMpI0mbAhIhYLWlzYCHwBeCPaVB8bvB6VxlZJXp3crs3MnVqnxfJsaa1mhbayRB2Aa4jfVMnAd+KiLmStgGuIjWmrQCOiohfN3i9MwSrRO9mCE4H1pqOZQjtaj1DmAy86mUEbVi9nSE4HVjzejhD2LDtOyQbymhlCJKWA6tI43PWRsQBkqYAVwLTSYvnHBURqxq8tukSgtOBNcvrIZiNnooHappVyxmCWXkGG6jZaJ4js67jDMGsPAHcJukeSZ/M+6YOMs+RWddpd2Ba21qfo2gyEyduzvr1a5g6dToA/f0r3Mhm3cADNW1MG/UMofU5il5l/XpIk969kQ0T4I2pTiXWg8odqDmcyfT1zfBNkA0wqnMZtaPWq2LDeiHN9zIabNu9LgxGp5dRmQM183M8Nsfa1em5jMwsmQpcJ6k4UHOhpHuBq+rnOTLrRi4hWM/p7YFpA7f9nbeheBxC1tc3w4vqWI/zioJWrp4tIdTC9R3U+DOeSgguHdtQxnUJwaUCG58m+3tvpeihEkKtC2oqFbiEMH6NxxICTPbU2LaRrikhSJot6RFJv8jd7Sr2av47uZDJbFzH2qmFVOqNt+uO9rW7SWfSQlp3vMzP3GF1Ppyyw2pVJRmCpAnA14FDgT2Bj0l6a/1599xzTwVXTwPVitv9/StfzxQ+9KEjR6V47QxhfGo2LZRjMgcffDATJ25eyne8W3/kujGsbozTSFRVQjgAeCwiVkTEWuAK0iRfA/zRH32wosvXe5X+/pVI4re/XTVgdHRf34yWemq4ncJa1FRaKBr59+tVYA7r1695/fvu76q1oqoMYSfgqcLzp/O+gRefcFhFl2+kWHJIVUkTJ26eM4dUipg4cfPXE1Eto5g4cfMB+/v7VzSV2FrNaEaiE9ewtjWVFgBuuOEGvvvd745gOpdGaqXjFcN+T4o3OcXtf/qnfx7wmmI4g6WP+vNsbKmkUVnSnwKHRsT/zM//HDggIk4qnOPWXqtMtzQqN5MW8n6nB6tEN0xd8Qywc+H5tLzvdd2SYM0qNmxaAKcH6w5VVRndA+wmabqkTYCjgRsrupZZN3NasDGjkhJCRLwm6TOkGR8nABdFxLIqrmXWzZwWbCwZtYFpZmbWXXpq6gozMxu5jq2HkAfjHMGGLnfPADd2svgs6d2kfuFLI2Jhp65rVlRmWshh7QTcFRGrC/tnR8QtbcZzQUQcO4LXvQNYFhGvSNoUOAPYF3gY+FJErGoynFqby7MRsUjSMcAfAsuAb+ZxHVaijpQQ8nD9K0iTrtydHwIul7TR6lElXvfuwvanSCNGtwTmVHnd8UbSVpLm5ukZXpL0oqRled/WFV53dl0cLpL0oKTLJE2t6rrtKDMtSDoJuAE4EVgqqTjg7UsthnVj3eMm4MO1562EBVwMrMnb5wFbAfPyvvkthDMfOAw4WdKlwEeAu4D9gQtbjNOYIWn7EsPatqUXRETlD+AXwBsa7N+ENIqzquveX9i+B/idvL058FDF73krYC7wCPAS8CLpzmYusHWF151dF4eLgAeBy4CpFV3zVuB0oK+wry/vW1jhe72vsH0h8A/AdOAU4Poq/79txLm0tAA8BGyRt2cA9wIn5+f3txjWfcC/A7OAg/Lf5/L2QS2GtazR/yg/X9JCOA/mv5OAfmBifq7asRbjVUqaBN4EnANcChxTd+z8FuO0Td1jW2A5MAXYpsWw5gLb5e39gMeB/ySt1NfU/7BTbQjrgR0b7N8hH6vKBElTci45MSJ+BRARvwXWVXhdgKuAl4FZEbFNRGwLHJz3XVXhdYt3hl8mJeo/IWWI36jomjMiYl5ErKztiIiVETGP9APdCftFxP+KNEXEV0k/kN2ozLQwIXI1UUQsJ/2If0DSV9gwHWqz9gN+BnweWBURi4H/iog7IuKOFsNaKun4vP2ApP0AJO0OtFLNMyFXG20JbEb6QQeYDLyhxThBeWlyPunzvRY4WtK1kibnY+9sMU4vkD732uNeUhXgfXm7FYdFxAt5+x+Bj0bEbsAhpN+C4bWay47kAcwm5VTfA76ZH7fkfbMrvO5yUi75RP67Q96/BS3cqYzw2o+O5FgJ1y3eNS+pO1bJeyZ1qfwchRIIaY3h04FFFb7Xp4FTgdPy/1iFYy3fQXbiUWZaAG4HZtbtmwQsAF4bYfymAVeTqlefHGEYWwH/BvySVMWzNqe/O4C3txDOKfl1K4CTgO8DF5BKRnNGEK9S0mSDdPV54Meku/v7WozTafn/v1dh3xMj/NyXAZPy9p11x5qqEelYt9M86+MBDGxIuyciXutIBAbGZTPSj9cTFV5jIbAIuCQi+vO+qcBxwCER8b6Krvs0ULtD/Aywa+R/sqQHI2LvCq45hdRweAQpIwhSEf9GYF5EvFT2NfN159TtOj8ifiWpDzg3RtAg2gllpQVJ04B1USiZFY4dGBE/biOOhwEHRsRZbYTxJmAXUib1dC0dtBjGjgAR8Wxuj3ofKaO6e+hXNgyrlDQpaRmwZ0SsL+w7DvgsqQqvpVJx/j9+lTTn1RzggYjYtZUwcjgnkmoD5gLvIVU7fRt4L+l34C+GDaNTGcJ4U/cjWWskqv1Izo2Ilyu67qj8SObeLtNIdyal9nZp4rqV9LKx3lJWmpR0LqltbFHd/tnA1yLiLSOM3+HAWaQq2L4RhjEL+Gtgd1JG/BRwPXBxRAxbTe4MYRRIOj4iWult0dXXzb1d/oZUZJ1Jati8IR+7LyL2LfuaOewTSaWgjl7Xek9ZaaPdcHI33d+NiKVlptdmw3KGMAokPRkROw9/5ti4rqSHgHdFxGpJM4BrgEsj4jxJ90fEPmVfczSva72nrLRRZhobjbA6NjBtvJH04GCHSPXsvXTdAb1dcrH1GknTab23y1i4ro1BZaWNMtNYt4XlDKE6U0nLJtbXSwr4SY9dt1/SzIhYApDv2D9EGqC0V0XXHM3r2thUVtooM411VVjOEKrzHVKPgyX1ByQt7rHrHkvduI7cgHWspKrGPozmdW1sKittlJnGuiostyGYmRng2U7NzCxzhmBmZoAzBDMzy5whmJkZ4AzBzMwyZwhmZgY4QzAzs8wZgpmZAc4QzMwsc4ZgZmaAM4SuI+kgSU8Vnu8u6X5JqyR9poTwp0tan1ftMutJkm6WNOwKYTaQJ7frTsUJpj4H3F7y3P6ewMpKJekJ4H9ExO2jcO05pEVlXl8NMCI+2Ol49ALfJVZM0sQ2g5gO/HyUrm1WOZdWu4f/ERWQ9ISkz0l6AFgt6c2SrpX0vKRf5qUfa+e+UdK/SXpJ0lJg/8Kx7wMHA/8q6RVJu0l6k6QFOawnJH2+cP4nJP1I0lckvQDMkTRB0j9J+pWk/wQO69wnYeOBpAXAzsB38vf0/5N0laTnJL0sabGk3y+cP1/S+ZK+K+k3wCxJH5R0X64aXVFcG7xQzXlsPva8pLPysUNJ6xB/VNJvJN2f9/9A0gl5+xOS/kPSP+Z09su8/nEt/B0k3SDpRUm/kPTJjnxw3Sgi/Cj5ATwB3AfsCGwK3At8HpgIzAD+EzgknzsXuAPYirRY/EPAk4WwfgCcUHi+ALgO2IxUengUOD4f+wSwFvg0KbOfDPwV8HCOy9bA7cBrpNXGRv2z8qM3Hvk7f3Dh+XH5O/oG4CvA/YVj80mLuLwzP98EeA+wZ37+NuA54PD8fDqwHvhGPndv4P8Av5ePzwEW1MXn9XST08WrwAmkxWL+CnimcO4Pga/luL4deB6YNdqf6Wg8XEKoznkR8Szpy7tdRHwxIl6LiOXAhcDR+byPAP8QEasi4hngXwYLMBetPwqcERFrImIF8GWg2Hj2TEScHxHrI+LVHP4/R8SzEfFr4Jyy36hZ9vqypRHxb/k7uhb4O+DtkrYsnHtDRNyZz/3viPhhRPw8P18KXAEcVDg/gLPzuQ8CD5B+vJu1IiIujpQDXALsIGl7SdOAdwGnR8TaiHiAlD6PHSqwXuVG5eo8nf/uDOwk6aX8XKS79x/m5zsWzgVYMUSY25H+Z0/Wnb9T4flTDLRj3b6hwjdrW75x+RLwZ6TvbOTHdsBv8mlP1b3mAFJp+W2kUsAmwNV1QfcXttcAW7QQrZW1jYj4L0nk128HvBQRawrnrgD+oIWwe4ZLCNWp9eR5Cng8IrbJjykRsVVE/Ek+/izw5sLrpg8R5gukKqHiOdOBZxpct+a5FsI3G6ni9+4Y4E+A90bE1qRqUlEoQbDx9/Qy4Hpgp/yab9Sd3+y1W/UssI2kzQv7dmZgmho3nCFU727gN7mR+Y2SJkraU9J++fjVwJmSts7F10HHGkTEeuAq4IuStpA0HTgFuHSI618FnCRpJ0lTgNNLeVdmA/UDu+btLUl19i/nH9pzGP5Hewvg5YhYm0sLx9QdHypz6AdmKN/2tyIiniYtQH+OpMmS9gb+B0OnqZ7lDKEar3/584/4h4CZpIa354ELgDflU75AqgJ6AriF1GjcMKzsJFJx+XFStdO/R8T8IeJyAXArqc71XuDa1t+O2bDOAf42V41OIVW7PAMsJf3gDufTwN9LWgX8L+DKuuP16aD4/GpShvGipHsHOb9e8fjHgF1IpYVrgb+NiB80Eeeeo9zKPvRJ0nJgFamlf21EHJDvNq8kVUEsB46KiFX5/DNJLfrrgJMjYmElsTfrMEkXkTL4/ojYu7D/RNKP2jrguxFxRt7vtGBjRrMZwuPAH0TEy4V984AXI+JcSacDUyLijNzf+Fuk/vTTgEXAW6KZC5l1OUnvBlaTujnunffNIvWF/2BErJO0XUS8IGkPUt2404KNCc1WGdV6xhQdQeq+Rf57ZN4+HLgiItblLpaPAQe0GU+zrhARPyL1oS/6a2BuRKzL57yQ9x+B04KNIc1mCAHcJumewii+qRHRDxARK4Ht8/6dGNil7BkGdos06zW7A++RdGceIVvrsui0YGNKs+MQDoyI5yT9DrBQ0qMM3chjNp5MIlWZvlPS/qRGzl2HeY1Z12kqQ4iI5/LfX0m6nlTs7Zc0NSL6JfWRes9Augsq9nufRoM+vZKcgVhlIqLlLohteAr4dr7uPZJek7Qt6Xu/c+G8hmkBnB6sOq2khWGrjCRtJmmLvL058H7SfDs3kuYrgTRXyA15+0bgaEmbSNoF2I3UF79RREt5zJkzp6fD6sY4dXNYHVA/yOp64L2Q1q8ANomIF0lp4aPNpAVoLz2U8fl1QxjdEIduCaOMOLSqmRLCVOC6fAczCfhWRCzM/X2vyjMKrgCOyl/qhyVdRZpQbS3w6RhJzMy6kKTLgFnAtpKeJE2sdjEwX9JDpAFZx4LTgo09w2YIEfEEaVBV/f6XgPcN8ppzaHIStb6+GQCsXLm8mdPNRlVE1I+grWm4OlcracFstI365Hb9/e3PtTZr1qz2I9LFYXVjnLo5rPGojM+vG8Lohjh0SxijkSaaGphWyYWliAhq04+4JG1lkUR0tlG5bbX0YFamVtOC5zIya4GkiyT1S3qwwbHT8spe2xT2nSnpMUnLJL2/s7E1a40zBLPWzAcOrd+ZZ6o9hMJ6E3nqiqOAPYAPAOePZEZOs05xhmDWgmg8dQXAV4HP1u3z1BU2pjhDMGuTpMOBpyLiobpDbU1d0dc34/VeeGadMOq9jMzGMkmbkmY6PaTdsM4+++zXt2fNmlVKDzwbXxYvXszixYtH/Hr3MrKeU3Uvo7xS3U0Rsbekt5GmtV5DGr1cm57iANI6CETE3Py6W4A5EXFXgzA36mXktGHtqqyXkaQJku6TdGN+PkXSQkmPSrpV0laFc92zwnrZ61NXRMTSiOiLiF0jYhfgaWCfiHieFqeuMBttrbQhnEwagl9zBrAoIn4PuB04EyAvkOOeFdaT8tQVPwF2l/SkpOPrTgk2ZBYPk9a0fhi4GU9dYV2u2RXTppG6230RODUiDpf0CHBQbJjtdHFEvFXSGUBExLz82u8BZ9cXk11lZFXplYFpThvWrqqqjGpd6orfTC+QY2bWQ5qZ/vow0oLiSxg45W8938ZYz2s0UlnSubm9bImkayW9qXDM7Wk2ZjTT7fRA4HBJHwQ2BbaUdCmwsp0FcmBgN7vFixd7gjMbkXa72rVoPvA1YEFh30LgjIhYL2kuqT3tzLr2tGnAIklvcTuCdauWup1KOgg4LbchnAu8GBHzJJ1OWkLwjJwIvgW8g1RVdBuwUSJwG4JVpZPdThscOxL404j4i2bb0/IxtyFY6VpNC+0MTJuLF8gxq3cCcHne3gn4aeFY0+1pHqFso6GlDCEi7gDuyNulLJBj1iskfR5YGxGXD3vyMDaMUp6MJKZOne5FpKxynrrCrASSjgONdwrYAAAPnUlEQVQ+SF5bOWu6PQ0Gtqlt8CoQ9PePqV60Nko8dYVZnQ60IcwgtSHslZ/PBr4MvCciXiyc11R7Wj53wO6BYznTWDenEWtVJ9sQzMadPFJ5FrCtpCeBOaTJ7TYBbss/5HdGxKfdnmZjjUsI1nN6YaSySwhWBi+haWZmI+IMwczMAGcIZi0ZZOoKTwVvPcEZgllr5gOH1u3zVPDWE5qZ3G6ypLsk3S/pIUlz8n7fFdm4ExE/Al6u230EcEnevgQ4Mm8fDlwREesiYjnwGGklNbOuNGyGEBGvAgdHxD7ATOADkg7Ad0VmNdt7KnjrBU1VGUXEmrw5mTR2IfBdkdlg3D/UxqSmBqZJmgD8DPhd4F8j4p7a1NeQ7ookFe+KRjShl9kY1d/uVPAw2NQVZs3r6NQVeeGP64CTgP+IiG0Kx16MiG0lfQ34aURclvdfCNwcEd+uC8sD06wSozB1xTzgpZFOBZ/D8MA0K12lU1dExCuSFgOzKeGuyAvkWBk6uUDOIFNXzAWu9lTwNtYNW0KQtB1pSt9VkjYFbiUlgINo467IJQSriqeuMEuqKCHsAFyS2xEmAFdGxM2S7sQL5JiZ9QxPbmc9pzdLCG9k6tQ+L5JjLfHkdmajRNIpkpZKelDStyRtMtQAzta8WlhFzawazhDMSiBpR+BEYN+I2JtUHfsxBhnAadaNnCGYlWcisLmkScCmpN51gw3gNOs6zhDMShARz5KW0XySlBGsiohFwIABnGyY1sKs6zhDMCuBpK1JpYHpwI6kksLH2XgaC/eesK7lNZXNyvE+4PGIeAlA0nXAHzL4AM6NeOoKa1dHp64ok7udWlVGo9tpngH4ImB/4FXSugn3ADvTYABng9cPOzANnE6sNZVOXWFmjUXE3ZKuAe4nDci8H/gmsCUNBnCadaNRLSEsW7aMPfbYA/Cdj5WnNwemuYRgrSt9YJqkaZJul/TzvGLaSXl/2yum7bXX/s3G08yYjCT6+maMdkSsRzUzuV0f0BcRSyRtQVoX4QjgeODFiDh3kMnt9ifNdLqIQSa3g48CVwK+87Hy9HIJwRPdWStKLyFExMqIWJK3VwPLSD/0XjHNrEDSVpKuziXjn0t6R3lTVxRNdinBKtHSOIS8MMhM4E4GH3DjdWRtvDqPtBjUHsDbgUeoZOoKz2tk1Wi6l1GuLroGODkiVqcqnwFGUIZd+vqWF8ixkerkAjmDyasJ/lFEHAcQEeuAVZKOIK0dAqkkvZiUSZh1naZ6GeW5Wb4DfC8izsv7lgGzCgNufhARe0g6A4iImJfPuwWYExF31YXpNgSrxCiNQ3g7qZvpw6TSwb3A/ws8ExFTCue9VFx6trC/pTYEcJqx4VU1/fXFwMO1zCC7ETgub38CuKGw/+g89e8uwG7A3c1GyGyMmgTsC/xrROwL/JZUEvDUFTZmDFtlJOlA4OPAQ5LuJ32hzwLm4RXTzGqeBp6KiHvz82tJGYKnrrCOGdNTV7jKyKowWt1OJd0BfCoifiFpDrBZPlTa1BWuMrJWeOoKs9FzEvAtSW8AHieN1ZmIp66wMcIZgllJIuIB0oDMeu/rdFzMRsLrIZiZGeAMwWyM8rxGVj5nCGYlkTRB0n2SbszPK5i2ouZVIDxi2UrlDMGsPCeTulvXVDBthVl1uiRDcPHXxjZJ04APAhcWdg82AeSg+vpm1HU5NeucLskQXPy1Me+rwGcZOBJ5sAkgB5XSQCvjCzzzqZWnmZHKFwEfAvojYu+8bwppRNl0YDlwVESsysfOBE4A1pEmwltYTdTNuoOkw0jpY4mkWUOcOuQv/YaRymcPcVY9z3xqG1Q+UlnSu4HVwIJChjCPNhbHyWEMGKnshT+sLJ0eqSzpS8Cfk26CNiWto3wdsB8NJoAcJIyIiFxdVByZDIONVPaoZRtOFQvk/Ah4uW63F8cxyyLirIjYOSJ2BY4Gbo+IvwBuovEEkGZdaaRtCNt7cRyzYc0FDpH0KPDH+XkF3CnDylHW1BUur5oBEXEHcEfefomOTFtR65Th3knWnpFmCINN6fsM8ObCedPyvkEsLWwvHmFUbLzrhhXTzHpBsyumzQBuioi98vN5NJjSt9Co/A5SVdFtuFHZOmyUVkybBiwApgLrgQsi4l+G6pFX9/q2GpXT9huZOrWPlSuXl/nWbAwrvVFZ0mXAT4DdJT0p6XgGqRuNiIeB2uI4N+PFcWz8WAecGhF7Au8C/kbSW+noaGV3QbX2dM0COS4hWFlGa4GcujhcD3w9Pw4qVK8ujoi3Nji/hBKCu6DaQFWtqWxmTcpVrDOBOxnBaGWz0eIMwaxEkrYAriGN0l/Nxj3wKr59T11QJ07c3N1QrWVeMc2sJJImkTKDSyOiNghtsB55GxnZ1BX1UhfU9etFf/9KJDF16nQ3NI8TlU9dURW3IVhVRqsNQdIC4IWIOLWwr2GPvAavLa0NodG209X4NMbbEDxzo41Nkg4EPg68V9L9eaGc2cA8mhytfOKJp3UmsmaD6LoSAkx2X2prSzf0MmpVSg+zSAM0yy4heHzCeDXGSwjgvtQ2flU1D6TTlDWnCzMEM6tabWW2YhVtX98MV9mOc5VlCJJmS3pE0i9yY5rZuNRNaaH2o19bma1YcujvX+GSxDhXSYYgaQJphOahwJ7Ax/Iw/ia11pe6zInNujGsboxTN4fVTdpPC81a3NRZ6Ud/ZVPnNipFDBuLNv+PZXwPeiWM0UgTVZUQDgAei4gVEbEWuIK0qE6Tan2p1zR1x9KtP0zOEEYnrC7TZlpo1uJhjk/OXVohpa8N+xv94A8sRax8/ZzhqpW64UewV8LopQyhfqGcpxnxQjmNSwuu77QxosS00I50k9Vof20AW9HAG7EN57RSrdRKCaM+PTt9j45RblR+pIlzBpYWal+yWtHXXyLrHXeP0nWLmcXkjTKHwc6pT2t9fTP4whe++PqxRu0Ug6XR+oym/nkxcxlJVZY1p5JxCJLeCZwdEbPz8zOAiIh5hXM8dNIq0y3jEJpJC3m/04NVopW0UFWGMBGojcx8jnTr87GIWFb6xcy6mNOCjSWVTG4XEa9J+gywkFQtdZETgI1HTgs2loza1BVmZtZdPFLZzMwAZwhmZpZ1bIGcPDrzCDb0wX4GuLHd+lRJ7yYN/lkaEQvbi6VZ9cpICzmMnYC78spstf2zI+KWEcRpQUQc2+Jr3gEsi4hXJG0KnAHsCzwMfCkiVg3z+k2Ao4FnI2KRpGOAPwSWAd/MA/msgzpSQsjzt1xBmpP37vwQcHnuhtdKWHcXtj9FmhZgS2BOq2F1I0lbSZqb5755SdKLkpblfVu3GNbsunAvkvSgpMskTR3r8SozTp1SRlqQdBJwA3AisFRSceTzl5p4/Y11j5uAD9eet/B2LgbW5O3zgK1I6z+sAeY38fr5wGHAyZIuBT4C3AXsD1zYQjy6kqS21s+WtG1ZcWlaRFT+AH4BvKHB/k1Iw/pbCev+wvY9wO/k7c2Bh1oMayvSgiWPAC8BL5LuTuYCW7cY1uy6cC8CHgQuIy203mw4twKnA32FfX1538IW43RfYftC4B+A6cApwPUthtV18SozTp16lJEWgIeALfL2DOBe0hrOA9LHUJ8/8O+kBRgOyn+fy9sHtfBeljX6n+bnS5p4/YP57ySgH5iYn6t2rIkw2k7DwJuAc4BLgWPqjp3fZBjb1D22BZYDU4Btmnj9XGC7vL0f8Djwn8CKZv8n+XU/yP/bNwO3AatIv5P7NBVGFV/6BhF9BJjeYP904NEWw3ogf8jbNvgSDpsY6s7vxh+5QT+PEXxWxTgtqTs2bILt9niVGadOPcpIC8DP655vAdwCfKXJH+IJ+Xt5GzAz73t8BO/lauD4vD0f2C9v7w7c08Trl5IywinAb2o/nMAbKWQ2w4TRdhoGrs0/yEcCN+bnk+u/q8OEsR54ou6xNv8d9rOlcDObf9T3L3yW9zYZh7uBDwAfI02X8md5/x8DP20qjDK/7ENEdDYpt/se8M38uCXvm91iWMtJuecT+e8Oef8WPfIjtxD4HIVSBTA1f8EXtRinp4FTgdPy56XCsabuwLo5XmXGqVOPMtICcDv5h7ywbxKwAHithbhMI/2ofx14cgTvZSvg34Bfkqp61uY0eQfw9iZef0o+fwVwEvB94AJSCWhOk3FoOw03SK+fB35Mg5vOIcI4Lf8f9yrse6KFz3IZMClv31l3rKmaDwbWnjw52LGhHh1pVI6IWyTtTmr8LTak3RMRr7UY1oxBDq0H/p8Wo7ZC0ueASyKiHyDXYR/HwAnJmrG9pFNJxd2tVFs1PWmlreajpMa5O3JcglScvhE4qsU4XUBqX4GUcLcDfiWpD1jSYljdGK/6OAGsBG4aQZw6oqS0cCywri7cdcCxkr7RQlyeBj4i6TDglWZfV3j9KuA4SW8CdiFlSk/X0lITr/+qpCvz9rOSFgDvAy6IiGYndiojDU+WNCEi1ue4fFHSM8APSTeazbyXL+f38lVJTwFzaDyb4GDOB26WNBe4RdJ5wLeB99J8mvg/kt5PyqhD0pERcb2kg4CmvlvjemCapCmkH5QjgFoDUO1Hbm5EvNxCWHPqdp0fEbUfuXOjhR4cuQfJNNKdQls9SMrsjSLpANI8PPdI2pN0t7ssIm5uJZwGYf1+DuuRkYRVF+6lEfEX7YRhY0cZaVjSuaTqpUV1+2cDX4uIt7QYp8OBs4AZEdHXwutmAX9NqiaaRMrQrgcuzhn+cK9/O3Au6eb4lBzWJ0g3HJ+KiJ8MG8Z4zhCGIun4iJjf6bByD5K/IRUhZ5IaC2/Ix+6LiH1buO6JwGdKCmsOqX5yEqnu+QDSJPyHALdGxBc7HdYgPWLeS6pSISIObzZO1nvKSMMjDSN3w/3diFjabjw6+T6cIQxC0pMRsXOnw5L0EPCuiFgtaQZwDXBpRJwn6f6I2KeF65Yd1kxgMqlaZlps6H9+V0Ts3emwJN1H6vN+Ial4LuByUt92IuKOZuNkvaeMNNwNYXQyDh0bmNaNJD042CFS4+RohDWhVrUTEctzMfIaSdNzWK0oM6x1uY57jaRfRsQrOdz/krR+lMLaDziZ1Aj42YhYIum/nBGMH2Wku24IoxviAOM8QyB9SIcC9fWMAoatb6sorH5JMyNiCUC+u/8QaRDQXi3Gqcyw/lvSZhGxBviD2k5JW5HqLDseVm4E/Kqkq/PffvydHm/KSHfdEEY3xGHcJ57vkAb4bNSKL2nxKIVVSg+SCsJ6T0S8msMo/mi/gdRwNVphtd1bxsa0MtJdN4TRDXFwG4KZmSWe7dTMzABnCGZmljlDMDMzwBmCmZllzhDMzAyA/wuQ+uOA7xifCwAAAABJRU5ErkJggg==" }, "metadata": {} } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Pandas plotting is sort of lame if we want to plot on the same axis. It's best for quick and dirty plots; if we want to do better, we need to dive more into Matplotlib or Seaborn.\n", "\n", "But we can plot all on the same axis if we simply tell Pandas which axis to plot into.\n", "\n", "So here's our strategy:\n", "- create an axis object to plot into (`gca` = get current axis)\n", "- split the RT portion of the dataframe into groups using `groubpy`\n", "- iterate over these groups (the iterator gives us a name and a dataframe for each group\n", "- call plot on each dataframe, passing the name as the label and the axis we want to reuse" ], "metadata": {} }, { "cell_type": "code", "execution_count": 37, "source": [ "ax = plt.figure().gca()\n", "\n", "for name, grp in df.groupby('Sub'):\n", " grp['RT'].plot(kind='density', ax=ax, label=name.capitalize());\n", "\n", "plt.legend(); # draw plot legend\n", "\n", "# adjust x limits of plot\n", "plt.xlim(-1, 10); " ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "image/png": "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" }, "metadata": {} } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "So we've seen that we can do some neat things with this individual dataset. In fact, we'd like to do these analyses and *aggregate* across all datasets.\n", "\n", "Here's the plan:\n", " - load each datset in turn\n", " - get the average RT and Accuracy for each animal, store it in a dataframe\n", " - plot the RT curve for each animal\n", " - load the next dataset, repeat" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Multiple datasets: pulling it together:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Let's try to combine the above code into a single chunk of code. We'll iterate over data files and simply repeat the same code each time. (Note how we made a good decision in encoding the file name in a variable we can change instead of hard coding it.)" ], "metadata": {} }, { "cell_type": "code", "execution_count": 38, "source": [ "# make an empty piece to hold each dataframe\n", "df_pieces = []\n", "\n", "ax = plt.figure().gca() # make a figure and get its current axis object\n", "\n", "# iterate over datfiles\n", "for f in datfiles:\n", " fname = os.path.join(fullpath, f)\n", " \n", " df = pd.read_csv(fname, index_col=0)\n", "\n", " mean_data = df.groupby('Sub')[['Accuracy', 'RT']].mean()\n", " \n", " df_pieces.append(mean_data)\n", " \n", " for name, grp in df.groupby('Sub'):\n", " grp['RT'].plot(kind='density', ax=ax, label=name.capitalize());\n", " \n", "plt.xlim(0, 6)\n", "\n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.);\n", "\n", "combined_data = pd.concat(df_pieces)\n", "\n", "combined_data.head()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Accuracy RT\n", "Sub \n", "hopkins 0.700803 2.023438\n", "quinn 0.749074 1.345008\n", "redford 0.597222 1.260423\n", "tarantino 0.725096 1.687411\n", "agathon 0.725000 3.105548" ], "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", "
AccuracyRT
Sub
hopkins0.7008032.023438
quinn0.7490741.345008
redford0.5972221.260423
tarantino0.7250961.687411
agathon0.7250003.105548
\n", "
" ] }, "metadata": {}, "execution_count": 38 }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "image/png": "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TJs2jSeffNKTnp6ezh133HFO9/+VpiAvIiKX5XKCc1Pp3Lkz8fHx/POf/2Tx4sUNHut0Olm6dCn33Xcff//73+nXrx8Abdq04cSJE57jioqKzltG27ZtSUtLIy0tjV27dpGYmMiPf/xjEhMTAXjxxRd59tln+cUvfsFzzz3XBFfYOOquFxERv7B48WLef/99rr32WuD8Xe0AAwcO5PXXXyc1NZXPPvsMgF69evH555+zY8cOKisreeqpp87bG5Cdnc3+/fsBCAkJISAggFatWnnSQ0JCWL16NevXr2f27NlNdYmXTEFeRER81tlBOD4+nptvvrnetPrceeedLFq0iHvuuYdt27bRrVs35s6dS1JSEgkJCQ12tf/nP//hzjvvJCQkhP79+/PTn/6UgQMH1jlvaGgoa9euZfXq1fz2t7+9qDo1NdPQLx0RERFjjFWsaLmMMVhr6/31oJa8iIiIn1KQFxER8VMK8iIiIn5KQV5ERMRPKciLiIj4KQV5ERERP6UgLyIi4qcU5EVERPyUgryIiFx1rvS67merb9365qIgLyIiPm3jxo3079+fdu3aERERwYABA9iyZYu3q9WgKzW9rVahExERn1VeXk5KSgrp6encd999VFVVsWHDBoKCgprsHNXV1XUWn/Emt9uNw3Hx7XO15EVExGfl5uZijGH06NEYYwgKCuLOO++kR48eALz88svceOONhIaG0qNHD7Zt2+bJ+69//YtevXoRHh7O2LFjqaqqAiAnJweXy8Uf//hHoqKimDJliqesbt26ERERwb333suRI0c8Ze3Zs4chQ4bQvn17unfvzooVKzxppaWl3HPPPYSFhdG3b1/P6nUXk3fy5Mk8+uijjBgxgpCQENatW3dpH5C1Vps2bdq0aTvvVhMqWqaysjIbERFhJ06caP/5z3/aY8eOedLefPNNGxMTY7ds2WKttXb//v320KFD1lpr4+LibJ8+fWxRUZE9duyY7d69u01PT7fWWrtu3TobEBBgZ8+ebauqquy3335r33vvPRsREWG3bdtmq6qq7M9//nM7cOBAa62133zzjXW5XDYjI8O63W67bds2GxERYXfv3m2ttXbMmDF2zJgx9uTJk3bnzp22U6dOdsCAAReVd9KkSbZdu3b2448/ttZaW1lZec5nUPv91P/dnS9BmzZt2rRps7ZlB3lrrd2zZ4+dPHmydblcNiAgwI4cOdJ++eWX9u6777YLFy6sN09cXJx94403PPu//OUv7SOPPGKtrQnyQUFBtqqqypM+depU++STT3r2Kyoq7DXXXGPz8vLs8uXLPQH/jIcfftg+/fTTtrq62gYGBtrc3FxP2pw5czxBvqG81tYE+YkTJzZ4/Q0Fed2TFxGRy7LOrGuScgbZQY3Kd8MNN7B48WKgpvt+/PjxzJgxg8OHD9OlS5fz5ouMjPS8Dg4OrtP93qFDBwIDAz37hYWF3HLLLZ79Nm3a4HQ6KSgoIC8vj02bNuF0OoGaxnN1dTUTJkyguLiY06dPExMT48kbGxvLhg0bABrMe4bL5WrU5wIaeCciIpepscG5OSQkJDBx4kTS09NxuVzs27evUeV8f/R7dHQ0eXl5nv1vvvmGkpISOnXqhMvlYtCgQbz77rvnlON2uwkMDCQ/P5+EhAQADh065ElvKO/56nIpNPBORER81t69e3nuuecoKCgAID8/n8zMTG677Tb+67/+iwULFrB161YA9u/fT35+fqPOM3bsWJYsWcKOHTuorKxkzpw59O3bl86dO5OcnExubi5Lly7l9OnTnDp1is2bN7N3714cDgejRo1i3rx5nDx5kl27dpGRkeEpt6G8TUFBXkREfFZISAiffPIJffr0ISQkhH79+tGzZ08WLFhAamoqv/rVrxg3bhyhoaH85Cc/obS0FLj01nFSUhLPPPMMo0aNolOnThw8eJBly5YB0LZtW9asWcOyZcuIjo4mOjqaWbNmUVlZCcALL7xAeXm5Z6T+mdH6F5P3cpmae/YiIiL1M8ZYxYqWyxiDtbbeXy1qyYuIiPgpBXkRERE/pSAvIiLipxTkRURE/JSCvIiIiJ9SkBcREfFTCvIiIiJ+StPaiohIg1q3bv2lMSbywkeKN7Ru3frL86VpMhwRERE/pe56ERERP6UgLyIi4qcU5EVERPyUgryIiIifUpAXERHxU/8fN1nSUCMvK6wAAAAASUVORK5CYII=" }, "metadata": {} } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Note that we basically just copied over the code from before. (For the slick arguments to `legend` that put the box outside and to the right, see example [here](http://matplotlib.org/users/legend_guide.html)." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "# Building code that lasts" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "The above chunk of code is pretty nifty. It works, it produces good output, it's something we can back and run in six months to produce that figure.\n", "\n", "But how well will you understand that code in six months. What if you need to change it? What if we'd like to reuse the code elsewhere. Typically, researchers use a few approaches:\n", "- generate plots interactively when needed; don't bother with a script\n", "- modify this script as needed to produce new output\n", "- cut and paste from this script when you need to do something similar\n", "\n", "The first of these is a terrible idea. The others less so, but they have disadvantages:\n", "- if you modify this script, you need to remember what you modified and where so that you can produce the original figure again\n", "- if you cut and paste, and you later improve the code or find a bug, you need to remember all the places you cut and pasted, correct the code, and re-run\n", "- if you cut and paste, your code will contain lots of repetition; it will be harder to see how what you're doing differs across scripts\n", " \n", "The strategy that good coders use to surmount these difficulties is *code reuse*. There are lots of ways to reuse code, but the oldest and arguably best is to modularize our code by writing functions. Modular code is built up from smaller subunits. Originally, these units were scripts, but over time, the preferred method is to create functions. Functions are like scripts in that they are named sections of code, but they have a few advantages over scripts, as we will see." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Modularization: strategy" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "For scientists, the path to modularization generally takes this form:\n", "- start by exploring data interactively in the console or a notebook\n", "- tidy up the code in a notebook that illustrates a particular analysis\n", "- when you start to see chunks of code that do a single (non-obvious) task, collect those chunks into functions\n", "- rewrite the analysis to call the functions\n", "- remove the functions from the notebook and put them into modules that can be imported\n", "\n", "The emphasis here is first on deciding what we want to do (exploring analyses), getting it working (illustrating in a notebook), and only lastly on making our code cleaner and more reusable. The same goes for making our code faster, which comes as a last step. As you become a better programmer, you will develop the ability to think about reuse and speed from the early stages, but even very good coders can be bad guessers at how best to design things early on." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Making functions" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Functions are named blocks of code with inputs and a single output (though we can get around this restriction). To define a function, we can use the `def` keyword:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 39, "source": [ "def myfunc(x):\n", " print(x + 1)\n", " return 2 * x\n", "\n", "print(myfunc(4))\n", "y = myfunc(-7)\n", "print(y)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "5\n", "8\n", "-6\n", "-14\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Here, `def` says we are about to define a function. This keyword is followed by the name of the function and a list of its *arguments* in parentheses. Python has several neat features in the way arguments are defined, including the ability to take arguments by name, to leave the number of arguments unspecified, and to give default values to certain arguments. \n", "\n", "Finally, the `return` keyword specifies the output of the function. Note that, like `for`, the line defining the function ends in a colon and the entire function body is indented." ], "metadata": {} }, { "cell_type": "code", "execution_count": 40, "source": [ "def anotherfunc(x, y=2): # y has the default value 2\n", " z = x ** y # x to the power y\n", " return z / 2.0\n", "\n", "print(anotherfunc(4, 0.5)) # here we specify both x and y\n", "print(anotherfunc(4)) # here we specify only x, so y = 2" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1.0\n", "8.0\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "### Very important:\n", "\n", "Functions are like *black boxes*. The information that gets passed into them is bound to the input variable name, but this variable only exists while the function is running. This is a tricky topic that goes under the name of *variable scoping*, but the following examples illustrate that you have to be careful about what information is and isn't being passed into a function." ], "metadata": {} }, { "cell_type": "code", "execution_count": 41, "source": [ "x = 'foo'\n", "print('x = ' + x)\n", "\n", "def reverser(x, appender=''): # appending an empty string seems like a sensible default\n", " \"\"\"\n", " This is a docstring. It tells us what the function does. \n", " This function reverses its input and appends its second argument to the end.\n", " \"\"\"\n", " print('x = ' + x)\n", " return x[::-1] + appender\n", "\n", "print(help(reverser))\n", "\n", "print(reverser('bar'))\n", "print(reverser('elephant', ' monkey'))\n", "\n", "print('x = ' + x)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "x = foo\n", "Help on function reverser in module __main__:\n", "\n", "reverser(x, appender='')\n", " This is a docstring. It tells us what the function does. \n", " This function reverses its input and appends its second argument to the end.\n", "\n", "None\n", "x = bar\n", "rab\n", "x = elephant\n", "tnahpele monkey\n", "x = foo\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Note that the value of `x` inside the function had nothing to do with the value of `x` outside the function. Within the function, `x` took on the value of whatever we passed in as the first argument of reverser. When the function returned, x was restored to its original value.\n", "\n", "This may seem confusing, but we actually want this behavior. The fact that variables defined within the function live and die inside the function means that we can use functions without worrying that they will overwrite variables we ourselves define. Imagine if you used a function that had an argument `x` or defined a variable `data`. You may well have these variables running around in your own code, and scoping makes sure that you don't need to worry about someone else's function overwriting them.\n", "\n", "Functions take inputs, perform their work, and return outputs. You don't have to know what they are doing under the hood, and your own functions should play nice in the same way." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### What makes a good function?" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Some things to consider:\n", "- functions do *one thing*\n", "- functions give us the chance to replace confusing behavior with clearly named behavior\n", "- functions allow us to obey the DRY principle (don't repeat yourself)\n", "- functions can call other functions\n", "\n", "So how about we rewrite some parts of the above code?" ], "metadata": {} }, { "cell_type": "code", "execution_count": 42, "source": [ "def get_data_files(pathparts):\n", " \"\"\"\n", " This function takes an iterable of path parts (directories), \n", " finds all files in that directory, and returns a list of those files.\n", " \"\"\"\n", " \n", " import os\n", " \n", " # here, we call tuple so that \n", " fullpath = os.path.join(*pathparts)\n", "\n", " datfiles = os.listdir(fullpath)\n", " \n", " # now add the fullpath to each of these file names so\n", " # we output a list of absolute paths\n", " \n", " output_list = [os.path.join(fullpath, f) for f in datfiles] # whoa!\n", " \n", " return output_list" ], "outputs": [], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 43, "source": [ "print(get_data_files(pathparts)) # should work as before\n", "\n", "print(get_data_files(list(pathparts))) # even works if the input is a list" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['data/primates/Black.csv', 'data/primates/Catta.csv', 'data/primates/Macaque.csv', 'data/primates/Mongoose.csv', 'data/primates/trained_Macaque.csv']\n", "['data/primates/Black.csv', 'data/primates/Catta.csv', 'data/primates/Macaque.csv', 'data/primates/Mongoose.csv', 'data/primates/trained_Macaque.csv']\n" ] } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "Note that Python is smart enough to use a list, since the `*` operator will convert any iterable object (one that can be stepped through) with a tuple and then unpack as normal.\n", "\n", "Also, we used a fancy trick inside called a [list comprehension](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions) that makes it easy to do some operations where we would normally have to iterate (i.e., use a `for` loop).\n", "\n", "And we can define a couple of other functions:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 44, "source": [ "def extract_data(df):\n", " \"\"\"\n", " Calculate the mean RT and Accuracy per subject for the dataframe df. \n", " Return result as a data frame.\n", " \"\"\"\n", " \n", " groupvar = 'Sub'\n", " colvars = ['Accuracy', 'RT']\n", " \n", " return df.groupby(groupvar)[colvars].mean()" ], "outputs": [], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 45, "source": [ "def plot_RT_dist(df, ax):\n", " \"\"\"\n", " Given a file name and axis object, plot the RT distribution for \n", " each animal in the file into the axis object.\n", " \"\"\"\n", " \n", " groupvar = 'Sub'\n", " colvar = 'RT'\n", " \n", " for name, grp in df.groupby(groupvar):\n", " grp[colvar].plot(kind='density', ax=ax, label=name.capitalize());\n", " \n", " return ax" ], "outputs": [], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 46, "source": [ "def do_all_analysis(files):\n", " \"\"\"\n", " This function plots the reaction time density for each subject in each file\n", " contained in the iterable files. It also calculates the mean accuracy and \n", " reaction time for each subject and returns these in a data frame.\n", " Files should be full file paths.\n", " \"\"\"\n", " import matplotlib.pyplot as plt\n", " import pandas as pd\n", " \n", " df_pieces = []\n", " ax = plt.figure().gca()\n", " \n", " for f in files:\n", " # read in data\n", " df = pd.read_csv(f, index_col=0)\n", " \n", " # process summary data from df\n", " summary_data = extract_data(df)\n", " df_pieces.append(summary_data)\n", " \n", " # plot Reaction Time distribution\n", " plot_RT_dist(df, ax)\n", " \n", " # add legend to figure\n", " plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.);\n", " \n", " # get figure corresponding to axis\n", " fig = ax.get_figure() \n", " \n", " # concatenate all extracted dataframe pieces into one\n", " combined_data = pd.concat(df_pieces)\n", " \n", " # now return a tuple with the combined data frame and the figure object\n", " return combined_data, fig " ], "outputs": [], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 47, "source": [ "flist = get_data_files(pathparts)\n", "\n", "summary_data, fig = do_all_analysis(flist)\n", "\n", "plt.xlim(0, 6);\n", "\n", "summary_data" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Accuracy RT\n", "Sub \n", "hopkins 0.700803 2.023438\n", "quinn 0.749074 1.345008\n", "redford 0.597222 1.260423\n", "tarantino 0.725096 1.687411\n", "agathon 0.725000 3.105548\n", "berisades 0.727778 0.798131\n", "capnlee 0.664193 0.826445\n", "licinius 0.704630 1.454208\n", "broome 0.751622 0.825900\n", "huxley 0.738889 2.045129\n", "solly 0.733333 1.271243\n", "yerkes 0.636905 0.770189\n", "eduardo 0.766854 3.534282\n", "felipe 0.593519 1.147807\n", "pedro 0.763109 1.454616\n", "sancho 0.661111 1.890181\n", "feinstein 0.910185 0.843286\n", "mikulski 0.846296 0.583694\n", "schroeder 0.726852 0.978447" ], "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", "
AccuracyRT
Sub
hopkins0.7008032.023438
quinn0.7490741.345008
redford0.5972221.260423
tarantino0.7250961.687411
agathon0.7250003.105548
berisades0.7277780.798131
capnlee0.6641930.826445
licinius0.7046301.454208
broome0.7516220.825900
huxley0.7388892.045129
solly0.7333331.271243
yerkes0.6369050.770189
eduardo0.7668543.534282
felipe0.5935191.147807
pedro0.7631091.454616
sancho0.6611111.890181
feinstein0.9101850.843286
mikulski0.8462960.583694
schroeder0.7268520.978447
\n", "
" ] }, "metadata": {}, "execution_count": 47 }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "image/png": "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TJs2jSeffNKTnp6ezh133HFO9/+VpiAvIiKX5XKCc1Pp3Lkz8fHx/POf/2Tx4sUNHut0Olm6dCn33Xcff//73+nXrx8Abdq04cSJE57jioqKzltG27ZtSUtLIy0tjV27dpGYmMiPf/xjEhMTAXjxxRd59tln+cUvfsFzzz3XBFfYOOquFxERv7B48WLef/99rr32WuD8Xe0AAwcO5PXXXyc1NZXPPvsMgF69evH555+zY8cOKisreeqpp87bG5Cdnc3+/fsBCAkJISAggFatWnnSQ0JCWL16NevXr2f27NlNdYmXTEFeRER81tlBOD4+nptvvrnetPrceeedLFq0iHvuuYdt27bRrVs35s6dS1JSEgkJCQ12tf/nP//hzjvvJCQkhP79+/PTn/6UgQMH1jlvaGgoa9euZfXq1fz2t7+9qDo1NdPQLx0RERFjjFWsaLmMMVhr6/31oJa8iIiIn1KQFxER8VMK8iIiIn5KQV5ERMRPKciLiIj4KQV5ERERP6UgLyIi4qcU5EVERPyUgryIiFx1rvS67merb9365qIgLyIiPm3jxo3079+fdu3aERERwYABA9iyZYu3q9WgKzW9rVahExERn1VeXk5KSgrp6encd999VFVVsWHDBoKCgprsHNXV1XUWn/Emt9uNw3Hx7XO15EVExGfl5uZijGH06NEYYwgKCuLOO++kR48eALz88svceOONhIaG0qNHD7Zt2+bJ+69//YtevXoRHh7O2LFjqaqqAiAnJweXy8Uf//hHoqKimDJliqesbt26ERERwb333suRI0c8Ze3Zs4chQ4bQvn17unfvzooVKzxppaWl3HPPPYSFhdG3b1/P6nUXk3fy5Mk8+uijjBgxgpCQENatW3dpH5C1Vps2bdq0aTvvVhMqWqaysjIbERFhJ06caP/5z3/aY8eOedLefPNNGxMTY7ds2WKttXb//v320KFD1lpr4+LibJ8+fWxRUZE9duyY7d69u01PT7fWWrtu3TobEBBgZ8+ebauqquy3335r33vvPRsREWG3bdtmq6qq7M9//nM7cOBAa62133zzjXW5XDYjI8O63W67bds2GxERYXfv3m2ttXbMmDF2zJgx9uTJk3bnzp22U6dOdsCAAReVd9KkSbZdu3b2448/ttZaW1lZec5nUPv91P/dnS9BmzZt2rRps7ZlB3lrrd2zZ4+dPHmydblcNiAgwI4cOdJ++eWX9u6777YLFy6sN09cXJx94403PPu//OUv7SOPPGKtrQnyQUFBtqqqypM+depU++STT3r2Kyoq7DXXXGPz8vLs8uXLPQH/jIcfftg+/fTTtrq62gYGBtrc3FxP2pw5czxBvqG81tYE+YkTJzZ4/Q0Fed2TFxGRy7LOrGuScgbZQY3Kd8MNN7B48WKgpvt+/PjxzJgxg8OHD9OlS5fz5ouMjPS8Dg4OrtP93qFDBwIDAz37hYWF3HLLLZ79Nm3a4HQ6KSgoIC8vj02bNuF0OoGaxnN1dTUTJkyguLiY06dPExMT48kbGxvLhg0bABrMe4bL5WrU5wIaeCciIpepscG5OSQkJDBx4kTS09NxuVzs27evUeV8f/R7dHQ0eXl5nv1vvvmGkpISOnXqhMvlYtCgQbz77rvnlON2uwkMDCQ/P5+EhAQADh065ElvKO/56nIpNPBORER81t69e3nuuecoKCgAID8/n8zMTG677Tb+67/+iwULFrB161YA9u/fT35+fqPOM3bsWJYsWcKOHTuorKxkzpw59O3bl86dO5OcnExubi5Lly7l9OnTnDp1is2bN7N3714cDgejRo1i3rx5nDx5kl27dpGRkeEpt6G8TUFBXkREfFZISAiffPIJffr0ISQkhH79+tGzZ08WLFhAamoqv/rVrxg3bhyhoaH85Cc/obS0FLj01nFSUhLPPPMMo0aNolOnThw8eJBly5YB0LZtW9asWcOyZcuIjo4mOjqaWbNmUVlZCcALL7xAeXm5Z6T+mdH6F5P3cpmae/YiIiL1M8ZYxYqWyxiDtbbeXy1qyYuIiPgpBXkRERE/pSAvIiLipxTkRURE/JSCvIiIiJ9SkBcREfFTCvIiIiJ+StPaiohIg1q3bv2lMSbywkeKN7Ru3frL86VpMhwRERE/pe56ERERP6UgLyIi4qcU5EVERPyUgryIiIifUpAXERHxU/8fN1nSUCMvK6wAAAAASUVORK5CYII=" }, "metadata": {} } ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "# Writing your own modules:" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "In `lemurs.py`, I've extracted this code into its own standalone module. That is, I've excerpted the functions into their own file. There are at least three ways we can use this separate code file:\n", "\n", "1. Because the file has a line\n", "\n", " ~~~python\n", " if __name__ == '__main__':\n", " ~~~\n", " \n", " the code will check to see if it is being run as a standalone module from the command line. In that case, the special variable `__name__` has the value `'__main__'`, and the code following the colon will execute. In that case, we can simply type\n", " \n", " ~~~\n", " python lemurs.py\n", " ~~~\n", " \n", " at the command line to load the module and run all the code that follows the `if` statement above.\n", "\n", "1. Similarly, we can use the `%run` magic function in the IPython notebook:\n", "\n", " ~~~\n", " %run lemurs\n", " ~~~\n", " \n", " This will have the same effect, except we will be able to carry on at the end of the code with all the variables still intact. This is great if we want to pull part of our analysis into a separate file but try out new ideas in the notebook from the place the code left off.\n", " \n", "1. Finally, if we just want to make use of some function in the module we can do\n", " \n", " ~~~python\n", " import lemurs\n", " ~~~\n", " \n", " which loads all of the definitions from the module into memory where we can call them. This is *exactly* what we did in importing pandas or numpy, but this time with our own code!" ], "metadata": {} }, { "cell_type": "code", "execution_count": 48, "source": [ "%run lemurs" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfkAAAGACAYAAACumxvtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYVdX6wPHvOoDIQUAGAUEEHMMySy1FxQt2c0gt6zY4ZGbdbBCvZnmzwVJvmdmov7RsQKXMIUvNtNQ0LNM0pxzAAU1QnFCQQeZz1u8P8ASKzIdB3s/z7Mdz9l5773dzfM571lp7r6W01gghhBDi+mOo6QCEEEIIYR2S5IUQQojrlCR5IYQQ4jolSV4IIYS4TkmSF0IIIa5TkuSFEEKI61S1JHmllEEptUsp9d01ts9SSh1RSu1RSt1SHTEJIYQQ17vqqsmPBaKL26CU6ge01Fq3Bp4EPq6mmIQQQojrmtWTvFKqGXAX8Nk1itwDRAJorbcBLkopL2vHJYQQQlzvqqMm/z4wAbjW0Hq+wIlC7xMK1gkhhBCiEqya5JVS/YGzWus9gCpYhBBCCFENbK18/O7A3UqpuwAHwEkpFam1fqRQmQTAr9D7ZgXrilBKySD7QghRAVrrSlWwHBwczmRlZUk3ai3VsGHDs5mZmd7FbbNqTV5r/ZLWurnWugUwGNh4RYIH+A54BEAp1RW4qLU+e43jXbfLa6+9VuMxyPXJ9dW3a6sP11cVsrKyvGr6OmS59lLSDzBr1+SLpZR6EtBa60+01muUUncppWKBS8DImohJCCGEuN5UW5LXWm8CNhW8nnvFtvDqikMIIYSoL2TEu1oiNDS0pkOwKrm+uut6vja4/q9P1G+qqvpsrE0ppetKrEIIUVsopdCVvPGuvn7/GgwGYmNjadGixVXbnJyc2LdvHwEBAdUf2BVK+oylJi+EEKLOCgwMZOPGjUXWLViwgJCQkEofW6lr/zZKS0urFQm+NJLkhRBCXHdKStBldT20XkiSF0IIcd2KiYkhLCwMV1dX2rdvz6pVqyzbRo4cydNPP03v3r1xdnYmLCyM+Pj4Yo+zefNmmjdvzi+//ALkN+UfO3bMcpzw8HAGDBiAs7MzwcHB/PXXX5Z9n332Wby8vHBxcaFDhw5ERxc7lYtVSJIXQghxXblcA8/Ly+Puu++mb9++JCYmMmvWLIYNG8aRI0csZb/66itee+01Lly4QIcOHRg2bNhVx/vxxx8ZNmwYy5cvp2fPnsDVLQVLlixhypQpXLx4kZYtW/Lyyy8DsG7dOjZv3kxsbCwpKSksXboUd3d3a136VSTJCyGEqNMGDRqEm5sbbm5uuLq6Eh6e/1T277//zqVLl3jhhRewtbUlLCyMAQMGsGjRIsu+/fv3p3v37tjZ2fHGG2+wdetWEhL+HnR16dKlPP300/z444906tTJsv7Kpvx7772XTp06YTAYGDZsGHv27AHAzs6OtLQ0oqOj0VrTtm1bvLyqb/BASfJCCCEqRamqWSpq5cqVJCUlkZSURHJyMrNnzwbg1KlT+Pn5FSnr7+9fJIkX3u7o6IibmxunTp2yrJs5cyYPPvggQUFBJcbg7f33qLJGo5H09HQAwsLCCA8PZ/To0Xh5efHUU09ZtlUHSfJCCCEqReuqWSp+/uJ39vHxuaqPPT4+Hl/fvyc6PXHi70lQ09PTSUpKsmxXSvH111+zfPlyZs2aVeH4wsPD2bFjB9HR0Rw6dIi33367wscqL0nyQgghrktdu3bF0dGRGTNmkJeXR1RUFN9//z1DhgyxlFmzZg1btmwhJyeHSZMmERwcjI+PD5D/48HHx4cNGzYwa9YsPv7443LHsGPHDrZv305eXh4ODg40bNgQg6H6Uq8keSGEEHVWSY/K2dra8t1337FmzRo8PDwIDw/niy++oHXr1pYyQ4cOZfLkybi7u7N7926+/PLLq47t5+fHTz/9xFtvvUVERESp5y0sNTWVJ554Ajc3NwIDA/Hw8GDChAkVudQKkRHvhBDiOiYj3l3byJEj8fPzY+rUqTUdSqXIiHdCCCFEPSRJXgghRL1UFaPi1XbSXC+EENcxaa6//klzfRnlms1sT02t6TCEEEKIKiFJvpCFZ8/SZdcu/srMrOlQhBBCiEqTJF/IrykpAPxW8K8QQghRl0mSL+RgRgb93NzYe+lSTYcihBBCVJpVk7xSyl4ptU0ptVsptU8p9VoxZf6hlLqolNpVsLxizZhKkpCdTXcXF+KzsmoqBCGEEKLK2Frz4FrrbKVUmNY6QyllA/ymlPpBa739iqK/aK3vtmYspTFrzamcHLo4ObHmwoWaDEUIIYSoElZvrtdaZxS8tCf/R0Vxz2HU+MOKibm5ONvY0NpoJD47u6bDEUIIUU1uuukmfvnll5oOwyqsnuSVUgal1G7gDLBea/1HMcWClVJ7lFKrlVLtrB1TcRKys/G1t8enQQPO5uSQZzbXRBhCCCEqYP78+dx88804Ojri4+PD6NGjSS3jI9H79++nZ8+eVo6wZlRHTd6stb4VaAZ0KSaJ7wSaa61vAT4EVlg7puKcz83Fs0ED7AwGGtvaciEvrybCEEIIUU7vvvsuL774Iu+++y6pqan8/vvvHD9+nN69e2MymWo6vBpl1T75wrTWqUqpn4G+QHSh9emFXv+glJqjlHLTWiddeYzJkydbXoeGhhIaGlpl8SXn5dHYNv/P4WFnx/ncXLwaNKiy4wshRHWIiooiKiqqpsOoNmlpaUyePJn58+dz5513AtC8eXOWLl1KixYtWLhwIT///HORiWg2bdrEww8/bJlLPjAwkM8//5xevXoxZcoUoqOjadiwIcuXL8ff358FCxbQsWNHS9nw8HAiIyOJj4+nb9++LFiwgAa1NF9YNckrpTyAXK11ilLKAbgTmH5FGS+t9dmC17eTP9TuVQkeiib5qnYxLw/XK5K8EELUNVdWgKZMmVJzwVSDLVu2kJ2dzb333ltkvaOjI/369WPdunXFJuCSxq1ftWoVy5cvZ/78+bz88suMHj2arVu3WrZ//fXXrFu3Dnt7e7p168b8+fMZNWpU1V1UFbJ2Tb4psEApZSC/a2CJ1nqNUupJQGutPwHuV0o9DeQCmcBDVo6pWMm5uZYk725nxwVJ8kIIUSZqStXcO61fK//4+OfPn8fDwwOD4ere56ZNm7J79258fHzKdcwePXrQp08fAIYPH87MmTOLbB87dixeXl4ADBw4kD179pQ77upi7Ufo9gEdi1k/t9Dr2cBsa8ZRFsU11wshhChdRZJzVfHw8OD8+fOYzearEv3p06fx8PAo9zG9vb0tr41GI1lZWUWOfznBX95++vTpCkZvfTLiXQFprhdCiLonODgYe3t7vv322yLr09PT+eGHHwgNDcVoNJKRkWHZVpuTclWTJF8gOS8PVzs7ANxtbaW5Xggh6gBnZ2deffVVxowZw9q1a8nLy+P48eM89NBDeHp6MmzYMG655RbWrFlDcnIyZ86cuar5vTR1eZpdSfIFpLleCCHqpgkTJjBt2jSef/55nJycaNGiBZmZmaxfvx4HBweGDx/OzTffTEBAAH379mXw4MFF9i/pJrwrt5dWtrZRdeUXilJKWzPWrjt38n6rVgS7uPD9+fN8dOoUq2++2WrnE0KI6qCUQmtdqcxk7e/fqrZgwQJeffVVfvvtN5o1a1bT4VhdSZ9xtT0nX9ulm0w0srEBwNXOjmQZDEcIIeqkESNGYGtry5YtW3jwwQdrOpwaJUm+QOEk72JjQ4okeSGEqLOGDRtW0yHUCtInX+CS2Yzj5SRvaytJXgghRJ0nSb5AkZq8rS0p9Xy8YyGEEHWfJHnApDU5ZjMOBQMdNLKxIcNkwlSHbjQRQgghriRJHrhkMuFoY2N5NMKgFE42NqRKk70QQog6TJI8+U31l/vjL5N+eSGEEHWdJHmK9sdf1lj65YUQol4xGAwcO3YMgKysLAYOHEjjxo156KGqmTctMDCQjRs3VsmxykoeoSO/uf7KJC81eSGEqP0CAgI4d+4ctra2NGrUiD59+jB79myMRmO5j1V4NLtly5aRmJhIcnJynRvlrjCpyVPQXH/F7EUutrZclCQvhBC1mlKK1atXk5qayp49e9i9ezdvvvlmhY5VeFS/uLg42rRpU6EEb6pFrcCS5Cm+uV4GxBFCiLrhcnL29PSkT58+lvndc3JyeP755/H396dp06Y888wzZGdnW/Z7++238fHxoVmzZsybN8+S0CdPnszUqVNZvHgxzs7OzJs3D601r7/+OgEBAXh7e/Poo4+SmpoK5P8gMBgMRERE4O/vzx133AHAF198QUBAAE2aNGHatGnV+SexkCSPNNcLIcT14OTJk/zwww+0bt0agBdeeIHY2Fj27t1LbGwsCQkJTJ06FYAff/yR9957jw0bNnDkyBF++ukny3EmT57MSy+9xODBg0lNTWXkyJHMmzePyMhINm3axLFjx0hLSyM8PLzI+X/55RcOHjzI2rVriYmJ4ZlnnmHhwoWcOnWKCxcukJCQUH1/jAKS5Cnh7vpa1OQihBCieIMGDcLZ2ZnmzZvj5eXF5MmTAfj00095//33cXFxwdHRkYkTJ7Jo0SIAvv76a0aOHElQUBAODg6Wfa7lq6++Yvz48fj7+2M0GnnzzTdZvHgxZrMZyO82mDJlCg4ODtjb27Ns2TIGDhxI9+7dsbOz43//+1+N9O3LjXdco7le5pQXQoiyqarkVcEByFauXElYWBi//PILw4YN4/z582RnZ5ORkUGnTp0s5cxms6Vp/9SpU3Tu3Nmyzd/fv8R540+dOoW/v3+R8nl5eZw9e9ayrvCMd6dOncLPz8/y3mg04u7uXqHrqwypyQMZZjNG6ZMXQoiK0bpqlgqfPn/fnj17MmLECJ5//nk8PDwwGo0cOHCApKQkkpKSuHjxIikpKQA0bdqUEydOWI4RFxdXYk3bx8eHuLi4IuXt7Ozw8vKyrCu8/5XHz8jI4MKFCxW+xoqyapJXStkrpbYppXYrpfYppV67RrlZSqkjSqk9SqlbrBlTcTILDWl7mfTJCyFE3TNu3DjWr1/Pvn37eOKJJxg3bhyJiYkAJCQksG7dOgAefPBB5s+fT0xMDBkZGZa++msZMmQI77//PsePHyc9PZ2XX36ZwYMHYyjIHVe2Atx///18//33bNmyhdzcXF599dUSWwqsxapJXmudDYRprW8FbgH6KaVuL1xGKdUPaKm1bg08CXxszZiKk2U207C4JC998kIIUatdWfv28PDgkUce4X//+x9vvfUWrVq1omvXrjRu3JjevXtz+PBhAPr27cu4cePo1asXbdq0sdwRfy2PPfYYw4cPp2fPnrRs2RKj0cisWbOuGUe7du2YPXs2Q4YMwcfHB3d39yLN+dVFVdcvC6WUEfgFeFpr/Ueh9R8DP2utlxS8jwFCtdZnr9hfWyvWZ2Nj8bO3Z3yh/pPfUlKYcPQoWzp2tMo5hRCiOiil0FpXqtPcmt+/ovJK+oyt3ievlDIopXYDZ4D1hRN8AV/gRKH3CQXrqk1Wcc31MkGNEEKIOs7qSV5rbS5orm8GdFFKtbP2OctLmuuFEEJcj6rtETqtdapS6megLxBdaFMC4FfofbOCdVcp/BxjaGgooaGhVRJbcUne2dZWavJCiDonKiqKqKiomg5D1BJW7ZNXSnkAuVrrFKWUA7AWmK61XlOozF3AaK11f6VUV+ADrXXXYo5ltT6he/fv5xEvL+5t0sSyzqQ1DTZtIvcf/8BQhycnEELUb9Inf/0r6TO2dk2+KbBAKWUgv2tgidZ6jVLqSUBrrT8peH+XUioWuASMtHJMVymuJm+jFI42NqSbTDjbyphBQggh6h6rZi+t9T7gqtvTtdZzr3gffmWZ6pRpMl2V5AGcC26+kyQvhBCiLpIR7yi+Jg8F/fJy850QQog6SpI8107yMuqdEEKIukySPCXU5G1spCYvhBCiQo4cOYKbm1uNxiBJnuIHwwF5jE4IIWozJycnnJ2dcXZ2xsbGBqPRaFl3eUrZ6tS0aVO2bNlied+6dWuSkpKqPY7C5I4ySq7JS3O9EELUTmlpaZbXLVq04PPPPycsLKxCxzKZTNhcMRvp9UBq8pTcJy/N9UIIUftpra+a5W3Lli107doVV1dXmjVrxvjx4zGbzQBkZ2djMBj4+OOPadWqFe3btwfgmWeewc/PDxcXF7p27cq2bdssx3vxxRd5+OGHGTp0KM7Oztxyyy3s3bsXyJ/V7ty5c/Tu3RtnZ2c+/PBDDh06hJ2dnWX/4OBgpk6dSnBwMC4uLgwYMMAy9S3AN998w4033oibmxu9e/cmNja20n8XSfKU0icvNXkhhKiTGjRowOzZs0lOTubXX3/l+++/57PPPitSZvXq1ezatYvdu3cD0K1bN8sc9Pfccw8PPPAApkKVvRUrVvDvf/+blJQUevXqxdixYwFYunQpnp6erF+/ntTUVMLD858Mv3J2ukWLFrFo0SLOnDlDcnIyM2fOBGDfvn2MHDmSjz/+mHPnztGzZ0/uuecey4+Siqr3SV5rTY7W2MsjdEIIcV3p3LkznTp1AiAwMJDHH3+cTZs2FSnzyiuv4OzsjL29PQAPP/ywpY9/4sSJXLhwgWPHjlnK9+rVi169eqGUYvjw4fz5559FjlfayIBPPPEEAQEBODg4cP/997Nnzx4AlixZwn333UdISAi2tra89NJLJCYmsmPHjkr9Dep9n3yW2UwDpa76tQX5zfUHLl2qgaiEEKLuUFU0Vr6uovlILouJieG5555j165dZGZmYjKZ6N69e5EyV87x/uabb7JgwQLOns2f7Tw7O5vz58/TunVrALy9vS1ljUYj6enp5YrpWvufOnUKf39/yzaDwYCvry8JCcVO5VJmkuSv0VQP8gidEEKURVUn56ryxBNPEBYWxjfffIODgwNvvfUWGzZsKFKmcAXvp59+4sMPP2Tjxo20bdsWrTVOTk6l1s6LO1Z5+fj4EBcXZ3lvNptJSEjA17dyM6/X++b6EpO8PEInhBB1Vnp6Oi4uLjg4OHDgwAE+/fTTEsunpaXRoEED3N3dyc7OZtKkSWRnZ5e4T+EfAN7e3kWa9q/cXpKHHnqI5cuXs3nzZvLy8njzzTfx8PCgc+fOZdr/WiTJl5DkXeQROiGEqBOKq0W///77fPrppzg7OzNmzBgGDx5c4j4DBw4kJCSEli1b0qpVKzw9PWlSaHbS0s770ksv8dJLL+Hm5sacOXOu2l5STb99+/Z8/vnnjBo1Ck9PT37++WdWrlyJ4Rr5qaysOtVsVbLWVIcxly5x34EDxNx++1Xboi9d4v4DB4guZpsQQtQFMtXs9a+kz1hq8qX1yUtNXgghRB0lSb6k5npbW1LkxjshhBB1lCT5EpK8o40NGSYTJmmmEkIIUQfV+ySfWUKSNyhFIxsb0qU2L4QQog6q90m+pJo85D9GJ3fYCyGEqIskyZeS5F3k5jshhBB1lFWTvFKqmVJqo1LqgFJqn1LqP8WU+YdS6qJSalfB8oo1Y7pSWWryMuqdEEKIusjaw9rmAeO11nuUUo2AnUqpdVrrg1eU+0VrfbeVYylWltmMQ0lJXgbEEUIIUUdZtSavtT6jtd5T8DodiAGKG4i3UgM1VEapzfVSkxdCCAGEhYURERFR02GUS7X1ySulAoBbgG3FbA5WSu1RSq1WSrWrrpigjM31UpMXQohaLTQ0FDc3N3Jzc6vkeFOmTOGRRx6pkmPVpGpJ8gVN9cuAsQU1+sJ2As211rcAHwIrqiOmy0pN8jITnRBC1GpxcXFs3rwZg8HAd999V9Ph1CpWT/JKKVvyE/wXWuuVV27XWqdrrTMKXv8A2Cml3Io71uTJky1LVBXNX1yW5nrpkxdC1BVRUVFFvivrg8jISIKDg3n00UeZP3++ZX1SUhIDBw7ExcWFLl26MGnSJEJCQizbx40bR/PmzXFxceG2225j8+bNAKxdu5Zp06axZMkSnJycuPXWWy37HD9+nB49euDs7Ezfvn1JSkqybPvuu++46aabcHNzo1evXhw8+PftZ4GBgbz77rt06NABV1dXhgwZQk5OjhX/KgW01lZdgEjgvRK2exV6fTtw/BrltDWEHz6sZ544cc3t78fH67GHD1vl3EIIYW0F352V/R6v9rjLo1WrVvrjjz/WO3fu1HZ2dvrcuXNaa60feughPWTIEJ2VlaWjo6O1n5+fDgkJsey3cOFCnZycrE0mk37vvfe0t7e3zs7O1lprPXnyZD18+PAi5wkNDdWtWrXSsbGxOisrS4eGhuoXX3xRa631oUOHtKOjo96wYYPOy8vTM2bM0K1atdK5ublaa60DAgJ0ly5d9JkzZ3RycrIOCgrSc+fOrZLrL+kztvYjdN2BYUAvpdTugkfk+iqlnlRKjSoodr9Sar9SajfwAfCQNWO6kjxCJ4QQddfmzZuJj4/nwQcfpGPHjrRq1YqvvvoKs9nMt99+y9SpU7G3tycoKIgRI0YU2Xfo0KE0btwYg8HAs88+S3Z2NocOHSrxfCNHjqRly5bY29vz4IMPsmfPHgCWLl3KgAED6NWrFzY2Njz//PNkZmayZcsWy75jx47Fy8uLxo0bM3DgQMu+1mTVR+i01r8BNqWUmQ3MtmYcJZHmeiGEqJwoFVUlxwnVoeXeJzIykt69e+Pq6grAkCFDWLBgAYMHDyYvL49mzZpZyvr5+RXZ95133iEiIoLTp08DkJaWxvnz50s8n7e3t+W10WgkPT3/NrNTp07h7+9v2aaUws/Pj4SEBMs6Ly+vIvtePq81Wfs5+VpPbrwTQojKqUhyrgpZWVksXboUs9lM06ZNAcjOziYlJYWzZ89iZ2fHyZMnadWqFQAnTpyw7Pvrr7/y9ttv8/PPP9OuXf5DXW5ubpe7J1CqfE92+/j4sH///iLrTpw4UeRHRk2QYW1LGwxHHqETQohaafny5dja2hITE8Off/7Jn3/+ycGDBwkJCSEyMpL77ruP1157jczMTA4ePEhkZKRl3/T0dOzs7HB3dycnJ4epU6eSlpZm2e7l5cXx48ctSb80Dz74IKtXr+bnn38mLy+Pd955h4YNGxIcHFzl110ekuTLUJOX5nohhKh9IiMjeeyxx/D19cXT09OyjB49mq+++ooPP/yQlJQUmjZtyogRIxg6dCj29vYA9OnThz59+tCmTRsCAwMxGo1FmvMfeOABtNa4u7vTuXNnoOTafZs2bfjyyy8JDw+nSZMmrF69mlWrVmFra1vqvtakyvorpaYppbQ1Yg3ZvZtpgYGENG5c7PZT2dl03rmTU926Vfm5hRDC2pRSaK0rlWGs9f1b3SZOnMjZs2eZN29eTYdSpUr6jKUmX5Y+eanJCyFEnXPo0CH27dsHwPbt2/n888+57777ajiq6iU33pWS5B1tbMgym8kzm7EtoZwQQojaJS0tjSFDhnD69Gm8vLyYMGECAwcOrOmwqlW9T/KZJlOJSV4phZOtLWkmE66S5IUQos7o3LkzR44cqekwalSZspZS6lulVH+l1HWX5UqryYM8RieEEKJuKmvSngMMBY4opaYrpdpaMaZqVaYkLwPiCCGEqIPKlOS11j9prYcBHYHjwE9KqS1KqZFKKTtrBmhtpT0nD+AiN98JIYSog8rc/K6UcgceBf4N7AZmkp/011slsmpS1pq8NNcLIYSoa8p0451SajnQFvgCGKi1vjzg7hKl1A5rBWdteWYzQKl3zctjdEIIIeqistbkP9Vat9Nav3k5wSul7AG01p2tFp2VlaUWDwWT1EhNXgghrmubN28mKCioyo8bFhZGRERElR+3LMqa5F8vZt3WqgykJpQ1ycv49UIIUTsFBARgNBpxdnbG3d2dgQMHFpn5rTx69OhBTExMFUdYs0rMcEopb6VUJ8BBKXWrUqpjwRIKGKslQivKLGuSl0fohBCiVlJKsXr1alJTUzl9+jSenp6MGTOm3McxXaff8aVluD7AO0Az4D3g3YJlPPCSdUOzvvLU5OUROiGEqJ0uj6vfoEED7r//fqKjowHIycnh+eefx9/fn6ZNm/LMM8+QnZ0NwKZNm/Dz82PGjBk0bdqUxx57zLLusrfeeotmzZrh7OxMUFAQP//8MwB//PEH3bp1w9XVFV9fX8aMGUNeoRyxfv16goKCcHV1ZcyYMVfNZBcREUG7du1wd3enX79+xMfHW7Y9++yzeHl54eLiQocOHSzXUlElZjit9QKtdRjwqNY6rNByt9b620qduRYoc5+83HgnhBC1XkZGBkuWLLFM7/rCCy8QGxvL3r17iY2NJSEhgalTp1rKnzlzhosXLxIfH88nn3wC/D1b3OHDh5k9ezY7d+4kNTWVtWvXEhAQAICNjQ0ffPABSUlJbN26lY0bNzJnzhwALly4wL/+9S+mTZvG+fPnadmyJb/99pvlnCtXrmT69OmsWLGCxMREQkJCGDJkCADr1q1j8+bNxMbGkpKSwtKlS3F3d6/cH0Vrfc0FeLjg3+fIr70XWUrat6qX/FCr1vaUFN3pjz9KLffNuXP63n37qvz8QghhbQXfnbXu+7eqBAQEaCcnJ+3q6qrt7Oy0r6+v3r9/v9Zaa0dHR33s2DFL2S1btujAwECttdZRUVHa3t5e5+TkWLZHRUVpPz8/rbXWsbGx2svLS//00086Nze3xBg++OADfd9992mttY6MjNTBwcFFtjdr1kx//vnnWmut+/XrpyMiIizbTCaTNhqNOj4+Xm/cuFG3bdtW//7779psNpf5b1DSZ1zaI3SOBf82qtxPidopy2zGwcam1HIyp7wQQlxbVFTVzJUeGlqx6WxXrlxJWFgYWmtWrFhBz5492bNnDxkZGXTq1MlSzmw2F2k6b9KkCXZ2xY/n1rJlSz744AMmT55MdHQ0ffr04d1336Vp06YcOXKE8ePHs2PHDjIzM8nLy7Oc59SpU0Wa/IEi7+Pi4hg7dizPPfcckF/RVkqRkJBAWFgY4eHhjB49mvj4eO677z7eeecdGjWqeAouMclrrecW/DulIgdXSjUDIgEvwEz+o3iziik3C+gHXCK/a2BPRc5XXmVtrne1s+OiJHk+Tu3lAAAgAElEQVQhhChWRZNzVbmcuJVS3HvvvTz55JP8/vvvGI1GDhw4QNOmTYvd73LT/LUMHjyYwYMHk56ezqhRo5g4cSILFizg6aefpmPHjixZsgSj0cjMmTP55ptvAGjatGmRPnaAEydOWF77+fnxyiuvWJrorxQeHk54eDjnz5/ngQce4O2332bKlAqlYKDsE9TMUEo5K6XslFIblFKJSqmHy7BrHvnN+jcCwcBopdQNVxy7H9BSa90aeBL4uJzXUGFlTfJutrYkSZIXQohab+XKlVy8eJGbbrqJJ554gnHjxpGYmAhAQkIC69atK9NxDh8+zM8//0xOTg4NGjTAwcEBm4KW37S0NJydnTEajRw8eJCPPvrIsl///v2Jjo5mxYoVmEwmZs6cyZkzZyzbn3rqKaZNm2a5oS4lJYVly5YBsGPHDrZv305eXh4ODg40bNgQQyVnPy3r3r211qnAAPLHrm8FTChtJ631mcu1cq11OhAD+F5R7B7ya/torbcBLkoprzLGVSllTvJ2dlzIza2GiIQQQpTXwIEDcXZ2xsXFhUmTJhEZGUlQUBDTp0+nVatWdO3alcaNG9O7d28OHz5cpmNmZ2czceJEmjRpgo+PD4mJiUybNg2Ad955h4ULF+Ls7MyTTz7J4MGDLfu5u7vz9ddf88ILL+Dh4cHRo0fp0aOHZfugQYOYOHEigwcPpnHjxtx88838+OOPAKSmpvLEE0/g5uZGYGAgHh4eTJhQaqotkSrcP3HNQkrt11rfpJT6DFimtf5RKfWn1rpDmU+kVAAQBdxUkPAvr18FvKm13lLw/ifgv1rrXVfsr8sSa3l8ceYM65KT+aKUEY601jT45RcyQkKwkznlhRB1iFIKrXWlOs2t8f0rqk5Jn3FZM9b3SqmDQCdgg1KqCZBVjgAaAcuAsYUTfE0r62A4SilcpcleCCFEHVOmCWq01hOVUjOAFK21SSl1ifxm9lIppWzJT/BfaK1XFlMkASh8K2KzgnVXmTx5suV1aGgooaGhZQnhmsraXA8F/fK5uXg1aFCpcwohhDVFRUURFRVV02GIWqJMzfUASqluQACFfhhorSPLsF8kcF5rPf4a2+8CRmut+yulugIfaK27FlOuypuLZsTHk5iby9stW5ZatvuuXcxo2ZLuLi5VGoMQQliTNNdf/0r6jMs61ewXQEtgD3B5gF9NwQ1zJezXHRgG7FNK7S7Y5yXAn/yH9z/RWq9RSt2llIol/xG6kWWJqSqUqyYvN98JIYSoY8qU5IHOQLvy/pTTWv8GlDrajNY6vDzHrSpZZjONyjAYDvzdXC+EEELUFWW98W4/4G3NQGpCeWry7nZ2cuOdEEKIOqWsNXkPIFoptR3IvrxSa323VaKqJuW98U6a64UQQtQlZU3yk60ZRE0pb5/8vkuXrByREEIIUXXKlOG01pvIH+nOruD1H8CuEneqA8rdXC81eSGEEAXCwsKIiIio6TBKVNax658g/1n3uQWrfIEV1gqqupR1MByQ5nohhKjNvvrqK2677TacnJzw9fWlf//+ReZxr6/KeuPdaKA7kAqgtT4CeForqOpS3uZ6ufFOCCFqn/fee4/x48fzyiuvcO7cOeLj4xk9ejSrVq2q6dBqXFmTfLbWOufym4JR7Or8yAjlaq6XR+iEEKLWSU1N5bXXXmPOnDncc889ltni7rrrLqZPn84ff/xBt27dcHV1xdfXlzFjxpBXqMJmMBj4v//7P1q2bImnpyf//e9/LdsWLFhASEgIEyZMwM3NjZYtW1omkylOREQE7dq1w93dnX79+hWZcvbgwYP07t0bd3d3goKC+Prrr63zB7lCWZP8JqXUS4CDUupO4Gugzv9EyjKbcSjPYDhSkxdCiFpl69atZGdnM2jQoGK329jY8MEHH5CUlMTWrVvZuHEjc+bMKVJmxYoV7Nq1i127drFy5coi/ezbt28nKCiICxcuMGHCBB5//PFiz7Ny5UqmT5/OihUrSExMJCQkxDJnfEZGBr179+bhhx/m/PnzLF68mNGjR3Pw4MEq+itcW1mT/EQgEdhH/pzva4BXrBVUdSlPTd7JxoYcs5ksk6n0wkIIIarFhQsX8PDwuOa86x07duT2229HKUXz5s0ZNWoUmzZtKlJm4sSJuLi40KxZM8aNG8eiRYss2/z9/XnsscdQSjFixAhOnz7NuXPnrjrP3LlzefHFF2nTpg0Gg4GJEyeyZ88eTpw4wffff09gYCCPPPIISik6dOjAfffdVy21+bJOUGNWSq0AVmitE60cU7UpT5JXStHEzo5zubk0L+MoeUIIUR8oVamh8S0qMj6+u7s758+fx2w2F5vojxw5wvjx49mxYweZmZnk5eXRqVOnImWaNWtmee3v78+pU6cs7729/x4HzsHBAYD09HQ8PYvelhYXF8fYsWN57rnnLNeilCIhIYG4uDh+//133NzcLNtMJhPDhw8v9/WWV4kZTuWbrJQ6DxwCDimlEpVSr1o9smpQniQP4NWgAedyckovKIQQ9YjWukqWiggODsbe3p4VK4p/4Ovpp58mKCiIo0ePcvHiRd54442rznXixAnL6/j4eHx8fModh5+fH3PnziUpKYmkpCSSk5NJT0+na9eu+Pn5ERoaWmRbamoqs2fPLvd5yqu0DPcs+XfV36a1dtNauwFdgO5KqWetHp2VVSTJn5Wb74QQotZwdnZmypQpjB49mpUrV1pq6z/++CMvvPAC6enpODs7YzQaOXjwIB999NFVx3j77be5ePEiJ06cYObMmQwePLjccTz11FNMmzaN6OhoAFJSUli2bBkAAwYM4PDhw3z55Zfk5eWRm5vLjh07akWf/HBgiNb6r8srtNbHgIeBR6wZWHXINJnKleQ97eykJi+EELXM+PHjee+993j99dfx9PSkefPmzJ49m3vvvZd33nmHhQsX4uzszJNPPllsAr/nnnvo1KkTHTt2ZODAgTz22GPXPFfhronCrwcNGsTEiRMZPHgwjRs35uabb7bcid+oUSPWrVvH4sWL8fHxwcfHh4kTJ5JTDfmkxPnklVL7tdY3lXebNVhjPuOGmzaR3KMHDmXsY3/h6FFcbW2Z6O9fpXEIIYS1yHzyJTMYDMTGxtKiRYuaDqXCSvqMS6vGlvQzo05XabXWZGuNfWk1+WPHYNEiuHQJT2muF0IIUYeUluQ7KKVSi1nSgPbVEaC1ZJvNNFAKQ0l3he7aBV27wuefQ+fOeJlM0lwvhBDXkap6MqC2KjHJa61ttNbOxSxOWmu76grSGkodCEdrePxxeP99+Okn6N4drwULOCtJXgghrhsmk6lON9WXpux3nV1nMs3mkpvqv/8+/9+hQ/P/nT4dz5UrOZeRYf3ghBBCiCpQb5N8qTX5efNgzBi43JTj4YHXP//J2bS06glQCCGEqCSrJnml1OdKqbNKqb3X2P4PpdRFpdSugqXahsrNNJuvfVf9xYuwYQPcd1+R1R5DhpBkY4NJhrYVQghRB1i7Jj8P6FNKmV+01h0LltetHI9FiTX5tWshJAQaNy6y2vaWW3DPyODc779XQ4RCCCFE5Vg1yWutNwPJpRSrkVsbM0sa7W7tWujb9+r1StFMa07+9pt1gxNCCCGqQG3okw9WSu1RSq1WSrWrrpNmmkzF1+S1hnXroE/xDRC+Li4kHDhg5eiEEEJU1ObNmwkKCiq13FdffUXf4ip0lSxbm9R0kt8JNNda3wJ8CBQ/w4AVXHPc+uPHwWyGVq2K3a+Ztzcnc3OhmKkGhRBCVK/AwEA2btxYZF2PHj2IiYkpdd+hQ4dahp6tyrK1SZmmmrUWrXV6odc/KKXmKKXctNZJxZWfPHmy5XVoaCihoaEVPnfmtfrkt22DLl3+vqv+Cs0cHDjZsWN+k341TBMohBDlERUVRVRUVE2HIWqJ6qjJK67R766U8ir0+nbyx9IvNsFDfpK/vFQmwUMJd9dfTvLX0MzenpNt2sAPP1Tq/EIIYQ2hoaFFvivro02bNuHn52d5f/LkSf71r3/h6elJkyZN+M9//gPAggULCAkJsZQzGAzMnTuXNm3a4ObmRnh4uGVb4bJxcXEYDAbMZrNle1hYGBEREQAcPXqU0NBQGjdujKenJ0OGDLHq9ZbE2o/QfQVsAdoopeKVUiOVUk8qpUYVFLlfKbVfKbUb+AB4yJrxFHbN5vqyJPkmTeDnn/P774UQQtQ6l4erNZvNDBgwgMDAQOLj40lISCgyE92Vw9quXr2anTt38ueff7J06VLWrVtXbNmShsOdNGkSffr04eLFi5w8eZIxY8ZU1WWVm1Wb67XWQ0vZPhuYbc0YrqXY5vqcHPjzT+jc+Zr7NbO356RSYGOTP3lNy5ZWjlQIIURFbdu2jdOnTzNjxgwMBd/53bp1u2b5F198EScnJ5ycnAgLC2PPnj307t27XOe0s7MjLi6OhIQEfH19SzyftdX0jXc1pti76/fuhRYtwMnpmvv52tuTkJOD7tEDfv3VylEKIUTtp1TVLNZw8uRJ/P39LQm+NF5ell5kjEYj6enpJZQu3ttvv43ZbOb222+nffv2zJs3r9zHqCr1NskX21xfSlM9gNHGBqPBwPnQUNi82XoBCiFEHaF11SzW4OfnR3x8fJH+88pydHQEIKPQXCZnzpyxvPb09OSTTz4hISGBjz/+mGeeeYZjx45V2fnLo94m+WKb63fuLLGp/rKAhg05ftttkuSFEKIWyMnJITs727Lk5uZatt1+++00bdqUiRMnkpGRQXZ2Nlu2bKnU+Tw8PPD19eXLL7/EbDYTERHB0aNHLduXLVtGQkICAI0bN8ZgMJS5JaGq1dskn1Xc3fXR0XDjjaXu28LBgaM+PnDmDCQmWilCIYQQZdG/f3+MRqNlmTp1quXGOIPBwKpVqzhy5AjNmzfHz8+PpUuXFnuc8swt/+mnnzJjxgw8PDyIiYmhe/fulm1//PEHXbp0wdnZmUGDBjFr1iwCAgIqdY0VpXQduUNcKaWrMtZRhw7RycmJJ3188ldonT9W/bFj4O5+Vfn4lHi+jfkWZ3tn/rC/FT9HN1566ikYNQruvbfK4hJCiKqklEJrXake76r+/hVVq6TPuN7W5K9qrj99Guztr0rwWmte/flVbvn4Fvaf28/Gvzbyxba3WHF8G7pbN6hks48QQghhLTU64l1NuurGu5gYKGas4+mbp7P84HIOhR+iiWMTAL6Ij2b0/i18an+AUVtPVlfIQgghRLnU35r8lY/QRUdfleQ3HNvARzs+Yu3Day0JHqB7k0AaNw7iU9s95Oz6I//5eiGEEKKWqb9J/srm+pgYaPf3JHi5plz+8+N/mNVvFj5OPkX29bO352xuHl+OWMPhxiaOblhWXWELIYQQZVZvk3xpzfUf7fgIXydf7ml7z1X72hkMNLO3Rzl4Y9OtB9/Om0CuKfeqckIIIURNqrdJ/qoJagol+VxTLjN+m8Fb/3zrmo9U3GA0EpORwQ0DR3JbnIm5O+dWR9hCCCFEmdXvJH+5Jp+UBBkZ4OsLwLcx39LKrRW3Nr31mvu3c3Qk5tIlVLdudEtQ/O+X/5GcmVwdoQshhBBlUm+TfJHm+pgYuOEGy+DJM7fNZGyXsSXuH2Q0Ep2RAa1a0SA7j5Eed/LGr29YO2whhBCizOptki9yd32hm+72nNlDQloCA9sOLHH/dgXN9SgFwcH81xBCxO4IzqaftXboQgghRJnU2yR/VU2+oD9+4d6FDL95OLaGkocQCCporjdrDcHBuO05xMM3P8zbW962duhCCCEKBAQEYDQacXZ2xt3dnYEDB1rGjRf1OMkX6ZMvSPJmbWbxgcUMuWlIqfu72NriYmvLiexsCA6GrVt5ofsLROyOIPGSjGcvhBDVQSnF6tWrSU1N5fTp03h6ejJmzJhiy1blTHR1Rb1M8iatydUa+yuS/Ob4zbg2dOVGz9InqYGCfvlLl+C222DvXnwbuHN/u/v5aMdHVoxeCCFEYZfH1W/QoAH3338/0dHRAIwcOZJnnnmG/v374+TkRFRUFKmpqTzyyCN4enoSGBjIG2+8UeQ4r7/+OgEBAXh7e/Poo4+SmpoKQFxcHAaDgfnz59O8eXPc3d2ZO3cuO3bsoEOHDri5uV314yIiIoJ27drh7u5Ov379iI+Pr6a/yN/qZZLPNpuxNxjyH4+7dCl/NrnAQBbtW8TQ9kPLfJz2jRqx/9IlcHTMv3Fv1y6e7fosc/6YQ1ZelhWvQAghxJUyMjJYsmQJwcHBlnWLFi1i0qRJpKWl0b17d8LDw0lLS+P48eNERUURGRnJvHnzAJg3bx6RkZFs2rSJY8eOkZaWRnh4eJFzbN++ndjYWJYsWcK4ceOYNm0aGzduZP/+/SxdupRff/0VgJUrVzJ9+nRWrFhBYmIiISEhDBlSeitxldNa14klP9SqcT4nR7v++mv+m507tW7fXpvMJu39jrc+fP5wmY8z//RpPeTAgfw3o0dr/c47Wmut71p4l/5s52dVFq8QQlRUwXdnrfn+rWoBAQHayclJu7q6ajs7O+3r66v379+vtdb60Ucf1SNGjLCUNZlMukGDBvrgwYOWdXPnztVhYWFaa63vuOMO/dFHH1m2HTp0SNvZ2WmTyaSPHz+uDQaDPn36tGW7u7u7Xrp0qeX9v/71Lz1z5kyttdb9+vXTERERRc5tNBp1fHx81f4BdMmfsVUnqFFKfQ4MAM5qrW++RplZQD/gEvCo1nqPNWOCYu6sDwpi56mduNi70Nq9taWcyZRFaupWcnJOAxonp844OLRGqfx9b23UiOmXm1+Cg2H5cgDGdx3Pf378D4/d+li55icWQoi6SE2pmu85/VrFprNduXIlYWFhaK1ZsWIFPXv2JCYmBgA/Pz9LufPnz5OXl0fz5s0t6/z9/S036p06dQp/f/8i2/Ly8jh79u+npjw9PS2vHRwc8PLyKvI+PT0dyG/eHzt2LM8991z+tWmNUoqEhIQiMVmbtWehmwf8HxBZ3EalVD+gpda6tVKqC/Ax0NXKMRV7092qw6sY2Cb/sbnc3CTi4t7g7NlIHBxaYW/vD5g4duxllLLB3/8VvLweJshoJC4ri0smE47BwfDf/4LW9ArshZ3BjrVH19K3VV9rX44QQtSoiibnKjt/QZ+8Uop7772XJ598ks2bN1vWXebh4YGdnR1xcXHccMMNQH4y9i0YCM3Hx4e4uDhL+bi4OOzs7PDy8uLEiRPlisnPz49XXnmlZproC7Fqn7zWejNQ0jBw91DwA0BrvQ1wUUp5lVC+SlwymXC8PKRtwTPyqw6vYmDbgSQnb2THjlswmzPo2HEbHTtu5cYbF3PjjV8THHycG26Yx9mzkeza1ZW87DiCjEb2padDYCDk5UF8PEopxgeP592t71517pS8PGaePMmgffsI2b2bBw4cYE5CAsm5Mva9EEJU1sqVK7l48SJBxUwdbjAYePDBB3n55ZdJT08nLi6O999/n+HDhwMwZMgQ3n//fY4fP056ejovv/wygwcPxlBQKbz8Y6IsnnrqKaZNm2a5CTAlJYVly6p/MrOavvHOFyj88yihYJ1VZZjNGC8n+ehozvi5Ep8STwu7Y8TEDKNt209p0+YjHBxaXLVv48Y96dBhI97eI9i1qyvt7FLZnZ6ePyhOt26wdSsAg28aTHRiNPvO7rPsu/TcOVpv28b21FSGennxRmAggzw8+DUlhbbbtzM7IYG8eviIhxBCVMbAgQNxdnbGxcWFSZMmERkZWWySB5g1axZGo5EWLVrQs2dPHn74YUaOHAnAY489xvDhw+nZsyctW7bEaDQya9Ysy75Xdr+W9H7QoEFMnDiRwYMH07hxY26++WZ+/PHHqrrkMlPl+WVSoRMo5Q+sKq5PXim1CnhTa72l4P1PwH+11ruKKaurKtb1SUm8FR/PTzfeCE5ORES9z6rYSCa0iKdDh59wdCz+P8eVLl78lal7P+FC4xEsuPmfMGMGJCTAzJkAvP7L68RdjOPTuz/lzbg4Pj19mq9vvJFOTk5XHWt/ejpjYmPJNZv59qab8GzQoEquVQhRvyml0FpXqtO8Kr9/RdUr6TO2dp98aRKAwncgNCtYV6zJkydbXoeGhhIaGlqhk1qa62Njwc+PVceWEmQfTYcOv5c5wQM0bhxCn5aKZ2MPkpy8EdfgYCi4yQJgVKdRtP2wLW3aT2D+uWR+u/VWmtrbF3usmxo1YkOHDkw5fpzbd+5kVfv2tG/UqELXJ4Sov6KiooiKiqrpMEQtUR01+QDya/Lti9l2FzBaa91fKdUV+EBrXeyNd1X5S3Lh2bOsvnCBrw4eJO/zOXh038jmhxdxU/OHyn2stLw8vLf8yhrDUG4LWovRrytcuAAODgD0//6//NLon+zpEkLLgnWlWXT2LM/GxrK+QwdJ9EKISpGa/PWvpM/Yqn3ySqmvgC1AG6VUvFJqpFLqSaXUKACt9RrgL6VULDAXeMaa8Vx2uSZvjt7PQac9eDp6VijBAzjZ2tLM3kie75vsi30A803tYNs2ADJMJva6DsD+2Bz87e3KfMwhXl7MbN2a3nv3EnPpUoXiEkIIIazaXK+1LnX4OK11eGllqlqGyYSjwUDmjm/Y42tDv7YVS/CXdXJy4kTDPnRz/YMLN2/A46efUKGhvBUfT/fG7pxSSSyPWc4DNz5Q5mM+5OlJltlM/3372NqxI17SRy+EEKKcavru+hpxyWzG1pSEjjnAZjdPerfoXanjdXZyYmd6Oi1avMN+r0skLv6Mt+fO5b2lSxkNjLl9DLO2zyr1OFca4e3NcC8v7tm3j0yTqVIxCiGEqH9q+sa7GpGel0fGhW8xnrDhO8NfvO3fs1LHa6M17x44wPe9e2Nv1uw6eZaI5cvwzsxh6Icf4uDgwLnW59h4+0Z63dirXMeeHBDA4cxMnj58mHk33CAj6AkhhCizelmTT0zbh1N6NjkuLvg3b4+T/dWPtJWF2Wxm1qxZjOjenXONGvHtypXEHD9B1u030PEfXfhzw3ri4+OJjIykFa3o360/c+bMwVSOWrlSik/btOGPtDQizpypUJxCCCHqp3qX5HNzkzmbsovmubdx0teJsICwCh0nOTmZe++9l0WLFrF53TpaOTtj06IFSinW3nYno/5cy4XTc1BK0bVrV9YtW4fdSDu+WPgFd955Z5GxkEvTyNaWZTfeyMRjx9iTllaheIUQQtQ/9S7JHz8+GRq2xPVcNrtdM8uV5NPS0tizZw+ffPIJHTp0wM/Pj02bNhEUFESnRo3YkZbGoYwM5rdvT/c/LxIX9zqZmccAcHNwY/Adg+n7v750796dTp06sX379jKfO8jRkf9r1Yr7DxwgJS+vvJcthBCiHC7PH2+u46OQ1qskn5UVx9mzX0LDG7GP+4vNxgt0b979muVPnz7NxIkT6dGjB97e3nh7e/PQQw8xbtw4zGYzERERdO7cmUcffZSsvXvZeuEC0+Pj6XHHHdgmp9FC/5tDh56wjHf8ny7/Ye7uuUyaPIk5c+YwYMAA1q9fX+b4B3t50dvNjVGHDpVrDGUhhLheBQYGsnHjxiLrFixYQEhISKWPfT3cA1Wvknxc3Ov4+DxFprZFHY7GHNQWo53xqnJ//fUXTz/9NDfeeCMZGRm88cYb7Nq1i0OHDpGVlcW7777LyZMnSU5OZt68eXTr1o3k339n3vbtLD5xguEuLjBwIN5/eGAypXL69GcA3OR5E0FNglgWvYy7776bb775hmHDhvHdd9+V+RrebdmSmIwMPj99usr+LkIIcb25HhJ0Vag3ST4jI5bExOX4+T3PJZOJxkf/wrfLnUXK/PXXXwwfPpzOnTvj5ubGwYMHmTVrFv/4xz9o1KgRAwYM4KmnnuLpp58GwN7enk6dOjFq1ChWvvMOqkULfI8d47YbbmBxRgbm5Stp2zaCv/56iezsUwCM7TKWmdvyx7YPCQlhzZo1/Pvf/y5zjd7BxoYl7drx4l9/ES0D5QghRIkMBgPHjh2zvB85ciSvvvoqADNmzKBr166WJvmPPvqI9u3bk5OTc9VxUlNT+fe//42Pjw9+fn5MmjQJrTW5ubm4u7tz4MABS9nExEQcHR25cOGCla+udPUmycfFTaFZs7HY2blyKScHu8xLdLllgGX7qlWr6NKlC61bt+bYsWO88cYbeHp6AmAymXjooYfo2rUrEydOLPb4DQ0GUIrXBw3it99+Y73WZPz2G9t+OEjTpqOIjX0WgP6t+3M+4zxbTmwBoHPnznz77bcMHTqULVu2lOlaghwdmd6iBYOjo+X5eSGEuEJZuzMnTJhAw4YNef3114mNjeXll19m4cKFNChm8LERI0bQoEEDjh07xu7du1m/fj2fffYZdnZ2DBkyhC+//NJSdtGiRfzzn//E3d29yq6pwrTWdWLJD7Vi0tMP6M2bm+jc3BSttdYtNm7Qi29vpjNzM3Vubq5+8cUXdbNmzfSWLVuK3f+VV17RoaGhOjc395rn+PbcOe2xebP+NCHBsi6xRw89ztVVT5gwXv/6a6A+f/4HrbXWc7bP0f0X9i+y/5o1a7S3t7c+evRoma7JbDbrh/bv188cOlSm8kKI+qngu7PGvn+tLSAgQDs5OWlXV1fLYjQadUhIiNZaa6VUke/VRx99VE+aNMny/vjx49rNzU0HBQXpt956q8h6g8GgTSaTPnPmjLa3t9dZWVmW7YsWLdJhYWFaa623bdummzdvbtnWuXNn/fXXX1vtmq9U0mdcL2ryx4+/hp/f89jaOgOQmpNNhpczqUmp9OnTh+3bt7Nz506Cg4Ov2vf7779n/vz5LF68GFvba48d9NGpU/R1c2NnerplnceYMbzVvj3798cwfnxDfv31SUymTEbeOpLdZ3az+/RuS9l+/frx8ssvM2DAAC5evFjqNSmlmNu2LT8kJfFtYmJ5/hxCCFG1lKqapYJWrlxJUicVomcAACAASURBVFKSZZkzZ06Z9/X39ycsLIy4uDieeab46VPi4+PJzc2ladOmuLm54erqylNPPcX58+cBuP3223F0dGTTpk0cOnSIo0ePcvfdd1f4eqrSdZ/k09L2kJKyGV/f0ZZ1GSjwbkqnTp0IDg5m7dq1lqb5wk6cOMHjjz/O4sWL8fLyuuY54rKy2JWWRh+jmQ2JJ/joj4+Y8dsM3vU4gvnPnYz77/30GnA3jz9+lnnzRtDQtiHPBz/PG7++YTlGejrceWc4bds+TY8ec5kzx8SqVbB7N5w7B8U9xeFia8uidu14+vBh4rOyKveHEkKIitK6apYKn/7a+xqNRjIyMizvz1wxqNjq1avZunUrd9xxB88//3yxx/Dz86Nhw4ZcuHCBpKQkkpOTuXjxInv37rWUGTFiBF988QVffPEF999/f7FN/jXhuk/yx4+/SvPmL2Jj4wjk/2fItrX7f/bOO0qKKv/bT1V17pnpyREmMDDkLEFAQCUKyKIoiAKCaY27a0TXtGYEA+6qqIA5SxAEVATJCJJzGpjARCZ37q6q+/7RMIAEdX+LYd5+zrnn3rqh+lbVTH2+Nxazl//ICy+8wFNPPYWiKKeV0zSNcePGcdddd9Gz55mX2QW0AAv2LeDy71/FW7yI++deTq5fZ1Ppdsrd5ZSqNWzo3pgjrz/HR5EfYRtrYtKkz7npn1dwVcvRLP1eZezNlWRlQWIiDB0KVVV3UFXVlX//ex3Tpwuuvx5atYKoKBg+HGbOhJP30ekWFcXdjRszZvdu1D/5es4wYcKE+V/ToUMHPvroI3Rd5+uvv2bFihX1aRUVFdx0003MmjWLd955h6+++orFixfXpx83HpKTkxkwYAD/+Mc/cDqdCCE4dOgQK1eurM977bXXMnfuXD788EPGjRv3213gz3G2fvw/muO/GBOqrf1BrF3bSKiqtz5u8dplwrp4sZj95uvnLPvss8+K3r17C1VVT0ur9laLJ1c8KVKmpoiesy4Sccu/EfOL9gpd10Xr9evFprq6E5nXrBGiRQshdF0U1haKx/59s7DY3hAYy4St8R6Rc+UHYvt2IXT95HrXirZt24qXX365Pq6yUogPPxRi1CghoqOF6N5diJkzhfD7hdB0XfTfulU8cujQr75HYcKEadjQwMfks7KyxNKlS0+Je+edd+rH5Ddu3Chat24toqKixLhx48SYMWPqx+SvuOIKcdttt9WXW7x4sUhLSxNVVVWnjMkLIURdXZ249dZbRaNGjUR0dLTo1KmT+PTTT0/53X79+omsrKzzebln5FzP+HcX71/q/ps/sq1b+4uiojfqjzdt2iSy+jQSiXNmn7Pc9u3bRXx8vMjPzz8l3hf0icmrJ4v45+PF+LnjxfbS7WJZVZVou2GD0I+p9Pjdu8UbJ02+E7ouRJs2ovjdb8XEiULExeniuuteF9nNuovOIzoL6XFJDP1wqNh7dO8pv3Xo0CGRlJQkvvvuu9Pq5/cLsXixEP37C9G4sRDTpgmRW+UTKWvWiGVVVb/2NoUJE6YB09BF/o/ExIkTT5nU91txrmfcYLvra2pW4vUeJDl5AgCbN29m8ODB9O/WGnvw9DWQxwkGg1x//fU899xzpKen18cvz1tO++ntWVWwilUTVvHOX96hbVJb3i4tZUJycv3GC50jI9l00v7yRysk3om7h703TCE1FQ4ckHjttS689p+DRFbbaF7SnMPVh+n1di8mfDmBUldovCgrK4uPP/6Ya6+99pQ1ngAmEwwaBN9+C7Nnw/LlcGELM5d/357rduyl4gxrPMOECRMmzPkjLy+PuXPncsMNN/zeVTmFBinyQggOH36YzMzHkGUju3btYvDgwUyfPh2ltpoo+eyXPWXKFOLj45k4cSIAQS3Ig989yJjZY3iu33MsuGYBLeJbAFCnqsyvqOC6kyblXRAZycZjIv/559C2LexqP4beCbt5cuQ2YmIgMrIzWVljmDatCS2qWnCg6ADvDX2PRFsi7V5vx/SN09GFzsUXX8zDDz/M8OHDcZ00a/9kunSBOXNg2TI4tMJO4OZODP+k8Lj1HSZMmDBhzjOPPvoo7dq14/777ycjI+P3rs6pnK2J/0dz/IruosrKb8UPPzQXmhYURUVFIj09Xbz//vsivyZfTLqmm7j4qwVnLLdz585Tuulzq3JF17e6ikEfDBJlrrLT8r9ZVCRG7NhxSpxbVYV1+Qpx5WhNNG8uxLp1xxKef16IkSPr8wWDtWLNmjRx9Ogy0eXWLiL679HC5XKJ7aXbRY+ZPUT3Gd3FjrIdQtd1MXHiRHHFFVfUjw2dDV0X4sOPNWFM9Ituo1zi6NFffMvChAnTQCHcXd/gOdczbnAteXGsFZ+V9S88Hh9Dhw7l5ptv5rrrrmPpoaU0UmNx2CNOK6eqKhMmTODpp58mPT2dBfsW0G1GN0a3Hs3CMQtJtJ++xO54V/3JLFusEMy3Ym3tYssW6N79WMIdd8CGDbB6NQAGQxRNm77MoUN3sOKlpWCF7hO7kx2ZzaoJq5jQYQIXv3sxL/3wEv959T8UFxfz9NNPcy4kCcaMlvlxu8Y2UUuL1jrz5v139zFMmDBhwjQAzqb+/ysHDAL2AvuBB86Q3geoATYfcw+f5Ty/yKI5enSB2LChrQgE/GLw4MHixhtvrJ8Ud+1no8WMoUPEuG3bTiv33HPPiX79+glN08TUNVNFytQU8UPhD2f9nT0ul0hes0YEj7WuVVWIhx8OTYS7bPkeMf3kyXfH+fBDIS64QIhjZXRdF9u2XSby8p4RS3OXCts/baL3pb2Fy+USQoR6EnrN6iX6vtNXbNi7QTRq1EjMmzfvF92Hj0tLRaM3d4rMJrq48UYhnM5fVCxMmDANDMIt+QbPuZ6xJM7j2K0kSfIxcb8UKAZ+BEYLIfaelKcPcI8Q4pzbA0mSJH6urkLobNrUmfT0R3n44cUUFhYyf/58jEYjQgh635/AldXDyX1gEv9u1ixURhdsW7GNS/9yKV89+BWbN22mqqyKIa2GEGWNQKqrRq4qR3LXIflcSB4nhkAF7/ZqjDPFxzNb1lClO7h2y714lUg+vW8jX7SOZ0t0NDPatftpBaFXLxg9Gu68EwCv9zCbNnWhc+cNTPjqIXat3UXcljgWLlyI3W5H0zWmrp3KC+te4K5GdzHtrmksX76c1q1b/+z9v2HvXlxOsL3WnFWrJD78ELp1+9liYcKEaUBIkoQQ4v/0SbZf8v4N8/txrmd8vkW+O/CYEGLwseNJhCyOySfl6QPcK4QY9jPn+tk/svLyLygoeI5vv72Czz//nJUrVxIZGQnAzvKdfHj7UCzZN1KWPZhbvzLhzfXiznVzh3YHwxoPIyMxBTvF9CEGpbAEvawSER2HSExFRMUgLBEIiw1/wM66IgNN8yDfauOfnrYMSCrk8RZf4xAHOGgrZdSoKzjw2GOhmXEXXAAXXwwdOsDBg9CjB6xYEdrlBsjPf47a2hUkZr1N+zfa0/VAV+r21rFw4UIiIkJDC5tLNnPN7GtIPJhIyVclbNiwgdjY2HPeD7em0WfLFobFx9N6Yya33w533w333QfnmHsYJkyYBkRY5Bs+v6fIXwkMFELcfOz4OqCrEOKuk/L0AWYDR4Ai4D4hxO4znOucf2RCaPz4Y1s2bx7Ks89+yrp160hOSKZuXR1VX1exd/ZeWh1+myn39cfRvDv/iEjB2tTKa+8+xaI5nzBNqqB5iR9T337IAwfChRdCmzZgt5/2W/MrKphcUMADhR25YSI8M8HJgLhq3LvcuHe68Rz2MuJjwdebrbSz7cdycC189x04naG1byYTrFkD69ZBZCS6HmDjxo5kZj7GNyV+pq6dSseNHTl04BCLFi2qF3pXwMXfFv+NOS/PobnenNVLV59zP32AUr+fHlu28EhGBv3UFEaNgpgYeO89+CN8IClMmDDnl7DIN3zO9YzPrRC/DZuAdCGER5KkwcA8IOdMGR9//PH6cN++fenbt2/9cVnZh2zdqvDSP7/ki9u/oOr2KnK/z8Xa1ErsoFjmj55P56/3ol18C+kZVhKWzWHPU28wZetWHr7AwdoRA2n39w+QrNafrfCskhIyv87mr/+RWLgYunaNAqLq04M1Qbqv28ZcVeB6JgN/YhNKB9xI6QUqFbYC1PzDjFq7lviuXfl6yhSiO3QgOeVF9h4YxxWdtjBv3zxirooh54scBg8ezKJFi4iMjCTCFMHM4TPpl9mP8VeNp+/ovqz4bAWKfPq2vMdJNptZ1LYtfbZu5b2WZlasiOXBB6FTJ/jkk5AtEyZMmIbD8uXLWb58+e9djT88+fn5ZGVloaoqsixz8cUXM3bs2Prl0w2F36K7/nEhxKBjx6d115+hzGGgsxCi6ifxZ7Ukg143Cx66hrzX+tDR3Imky5OIGxxHTP8YTIkm/KqfpCmJVD0nuO6FFxk6fz5Xm0x03bqZkg5ObrvzLh7u/XD9hjbnosjjJ3tCBRnbU/l6kURWFjhVlRU1NWxwOtnkdLLR6cSlaZhlmYsiomi3R6LZKpX4pR6MVTp1/e1UXQaXPH89R00mXhsyhOJWrWif9BUJ5PKW/BglP1zPiO5PUjVjJdW5uSz5+uv6oQeA7fnbubDXhaT1TGPljJUkRySfo9awpraWETt38nGrVlwaE8P8+XDTTXD//aEu/P/DB6DChAnzB+b/h5b86tWreeCBB9i1axcGg4GWLVvy8ssv07lz57OWyc/Pp0mTJgSDwT+9yP+eLfkfgaaSJGUAJcBo4JqfVC5JCFF2LNyVkOFRddqZzoB7r5vSmaUcmXWQMld/Miak0vvF3ii2k1q2QrDysylcckggu9zUxsYS9dJL3P/2q+ze8RWT753M37r/7RddjLNC45orPXSuMPDiQyUsW1HHxq9c7PF6yLFZaWmzcas9gmbWRFQEt5Qe5KP+zbD8xYRyTahO3sNejn5+lJInS6iWX6GD50He3rwTRdfR71/Gpmdr6W/9nEX9pvPstxNpNXE62198n8SePbnm7bcZ3LgxfaOjaZfRjj3r9tDugna0uLEFHz35EZc1u+ysde/pcDC7dWuu3LWLD1q25PLLY2nXDkaNgpUr4Z13Qt34YcKECfNnwul0MmzYMN544w2uuuoqAoEAq1atwmw2/95V+0NwXlvyAJIkDQKmEdpdb6YQ4jlJkm4h1KJ/U5Kk24FbgSDgBf4hhFh/hvMIIQSaW6P883JKZ5biOeAhepSVv84fwSXjRvCvf718ooCuw7x58NRT/K11ARdZmjPySBTdn3qKYXUFPDLsSqZ+PpW7B98NhGbZ+/J9uHe58ezy4DngIVgeJFAeIFgexF8WIOAVVJsVvBk6NQ5BvNVEosFInMGIIWRJhX5bADpsK6olvU5BOqoim2VMSSaMiUaURAV/tJ9KvZKC0v30WD+TmsQ6Xru1IzUcpETsQhTKVEXbKZd9tEhowZHCElx1bqKat6fWGEWMNY420ankaBY+fGIaxguNXDvsWp7v/zwWg+Wsz2N1TQ1X7NrFOy1acFlcHIFAqDX/5Zfw2WeheYJhwoRpODT0lvymTZvo378/VVWntw2FEDz99NPMmDEDn8/HoEGDeOWVV4iKijprS37s2LEkJyezcuXK+lVMR48eJTMzk4KCAuL+gJOZfreJd/9LJEkSuQ/mUvxmMVHdo0i5MYWoAVEMvKwFCQlWPvtsV6i7XQj44gt44gkwmRCPPELTgntYt783iYlZNLqkN/7b/sZd7UYyvt340GS5XW48ez0YY4zYWtmwt7ZjzbFiSjZhSjTxTWmA2++0U9OvHMsNhXzaqiUDYmMx/MwU9afz8tjnrGSEUsDOQzs5dOAQxYeLUctVsrQssp3ZpJenE1cQi7VaxigVURZjQ2vtQu+6jIwjEq9pn7OjWRQvD3yZ6YsWsWbjGu586G/k6i42VRWxt7YI79EDqJUHkCIljIqR7mnd6Jnek47JHemQ3IHs2Gxk6URd19XWcsWuXfwzPZ07GjUCQlvj/vWv8PDDodV94e77MGEaBg1d5J1OJ02aNGHIkCGMHj2a7t27Ex0dDcCsWbN47rnnWLJkCQkJCYwdOxa73c577713zu76O+64g8jISJ599lkAXnnlFZYuXcqXX375e17qWWkwIr/vtn00vrsx1mwrQgjGjRtJbu4Cliw5hN3eKLQs7b77QFXhqadg8GD2VOxl/AvjmffFhRxOvYi8g7FEV/hodHEa9tZ27K3tIWFvZcfgODF6oeo6sysq+Ne8avZPyuLqh10wqJSOERHcd9KHa05GFzo7ynawMn8lqwpWsax0P9UtHmPA0Vm0dLQl2t8BUdIez5GmlJcqlJaGvg1fWgre8gBPai/Slz3sZCyJsoSQoE4zcSBjLe6YH+m5L4JHbCZ2eJYxfPh3tG2bSWYmSBke5m/7jC8e+wfSP29FOPLoYPSTrKjsKNtGlbeKjikd6dm4Jz0b96RH4x5UY2Hojh1cEh3Ny02bYpBlDh2Cq66CrKzQd+sdjt/o4YYJE+a80dBFHmDfvn1MnjyZ7777jpKSEoYMGcKbb77JmDFjGDlyJH/9618B2L9/P23atMHn81FYWHhWkd+wYQNXXXUV+fn5AHTp0oUHHniAkSNH/p6XeVYajMifXNdJkybx9dcz+Pjj22ipj4JJk2DnTsSTT+PMGULNylpqV9dSuqKUgMlPZuV6nr1wP2uuv5kV/XNIT298xt/RhOCjsjIey8vD9F0yJdPS+fxjiU69gzTbsIGD3boRZzTW5y93l/P1wa9ZdGAR3+Z+S4I9ga5JvYl1XoRnT29mt6mG+WkEv02kVSto3RqysyE5+YRLSoKEhNDKOuntWfDgg3gnP8ePazcgzb0aQ6yV3fJuYo9GEl9lp9JwgK/ZTXz/v3LI1p5DhTJ5eVBX9w1BdSyZNzxFwUAJLTKdy6KTuDrRjsN7kI1FP7C6cDUbijaQ4cigR3pvNhlbYIntzEdtO5NhseD3wz33wNdfh7rvO3U63082TJgw55PfQuSl/9FsfnHSiqn/lv3793PdddfRtGlTtm3bxtSpUxk8eDAAfr8fq9VKUVERgUDgnBPvWrVqxeuvv05ycjIXXnghpaWlmEym/3P9zgd/9CV0v5qXXnqJuXM/4eUXFXJezkef05/qEU9SmfI8FQ9Uo0TuJbZ/LEljkvh7j79zrTWTtGff5dvKJviypDMKvBCCBZWV/PPwYaJkhUsWtOe7D62sXR4S5skFpYyIjyfWYGBn+U5m757NwgML2V+5n15pl5LmvoxhhS+yaXkqXxaE9rvp1QtuTbLz9b2F/Ph54i/bgGbiRGjZEuuoUXQd0YuNn1xL44IlGP7TlkJDIeuu2cnY5FYwq5SKRevpZ6og7pJ4Yq5LwHDhRXyy6lMeeeRqLil4m80Z37OgRSnfRFyPSIugrWcUVze9g09GRJJXt4Nlh5dx4OBc1m58iGbrmnNFzmAmdRjJv//dns8/lxg0CB5/HG69Ndx9HyZMmLPzvxDn/xU5OTmMHz+eN954g9TU1PrWOIRm1BuNRpKSkigsLDznecaPH8/7779PcnIyI0eO/MMK/M/xp2vJf/TRR0x64H5evc9A87fbEvBcS3VpKhHtIom7PI74y+OxNbcBcLj6MB2md+CeVRqtdjr4asKN/HDZZez9yd6uK2pqePDQIVyaxr/Sspj/zzh27JBYsABSUkJd942/+4Ah+k7W5C7AHXDTN+lKzHmXs3NRT/bsNNGnD/TpA717hza2O75HjarrtP7xR6Y1bcqgXzNho6ICrrsOX/V+9j1uo3X/H6ha42H2fbPJ2pNF5k2ZHDR/w50vPMk0pSs5OddRVZaObDfgb+dn8rLJ3PLGLSgdTUyYN5H21r/i8Y1nR3QNrlQn8blx9BYJjG0RS7cuXj4tXMQTWz4nULkBKz4GZw+kvX0g7zw6gKzEBN56K9TjECZMmD8XDb27ft++fSxcuJBRo0aRlpZGYWEh11xzDa1bt6Zbt25MnjyZb775hvj4eCZMmIDNZuPdd9/92XXyR44coX379kRFRfH+++/Tq1ev3/lKz06Dacl/8+ZCvrtrMe9G3I80qSmB3vHEjW5MzpA4TAmnW1n3LbkPVaiMPJTCByYYf+edHCgoqE/f4nTy0OHD7PN4eDIri8GmRK6+SsJmCw3vVwTzeXrlB7y25W2q/V78ydfSMe9d1s/twvKAxOWXw+OPQN++cLbVGgZZZkp2Nvfk5nJJTAymX7qfbHw8LFqE+amnaD3uOYof6k/jv69hwtoJ3DnjTtLnpdP3x76833sej215mP6WV7jfuxdPz5uoyh7NpOJJuMe4UZuprLhhKVPkKayxDuDL/tPJjO7FNOtR5tcW8SV7YXoM6fl9GBU3HHefUubL66nU97G88jMK/3I71d6WNJ0wjKfGDeOuUW1+0X4CYcKECfNbEBkZyfr163nxxRepra0lOjqaYcOG8fzzz2O32ykuLqZ37974/f762fXHOfld9tP3WqNGjejUqRO5ubl/aIH/Of5ULfk5fEF06j6UO5fR6aZXiYhrfsa8QgieXf0s/1rxLx5odB9/m/gMnrVr2ZSdzazSUl7IzuaRw4dZWVvLwxkZ3JiSQt5BmeHDoXf/OrqM/4IPdrzHzvKd9Eu5imVyd6QFg4jeksTo0XDFFdCu3S/vwhZC8JedO2lmtTK1adNffe366uUErhtMsE0Gke+sRo+L5ZFlj/Dl5i95X38fz3QPh8oOUdAxl3v66FhmvgHdu3No5HU8/M+59LP1o3l1c3wOH4syFiH1k7j31ntJjkqmMhhkTkkF7xyqYJNaQ0R+FM5V0Vg6OVGb1XFFMIkBKQeYv2MR83YvwGKFay8YxpVthtEnsw8m5c/ZhRUmzP8vNPSW/PnkhhtuIC0tjSeeeOL3rso5aTAT71a/9BL2vguIjR1AevoDZ8yn6Rp3Lb6LpYeXUllRSc83jbxnMBBVUMDUggLeKimhSlX5R6NG/K1RI+yKwvyvVMY9/h3Nr36PvfpCeqZcQkLJODZ/ehmlcV60v+/jm5SuXNBJ+q/HpquCQTpv2sSD6encnJr6q8sH64qouLUdiUuCKJOnwfjxzNg6i4eWPsSMoTPotLMTS29bSmxdLFm3p5GTvBHTm89TFx3NBIOBI6rO+//8AP0Hnf2f7kev1An2CdJrYi8SByai2BWcqsrXVVV8UV7B4ooqIt0WnG6Byxggfnlj+vuSOVi8jz36ApL7zOeo2Ef/Jv25vPnlDG46mDjbH2/9aJgw/78TFvn/jry8PDp16sSWLVvIyMj4vatzThqMyB858iqlpe/RseNqZPn0kQZv0MuYOWNw+p3kOHJY8PAC3nVkcGG3bjx+2238u6iI9nY7C9u1I9ZoZGvJNu546z3WuT+ieVI6vaLGUbBoFOu/j2fECBg/Hp6J3sZVCQnceJIw6zrU1UF1NdTUhNzJ4UAAgsHQSr7jLhiECrOHORdto8XBFNpsyUBTpfq0n+bVNDAawWIBqzXkG40uEvKe5+ZdX2KRDSy/bArrc6y87x9Fj4jrGJ34L9a+/yWx3x+lr9IS86VJ2FsUE7v0P3x4aA3TVA+vvPACo2+5hd2bdvPZK5+RuC6RFsUtiO8bT/yweOKGxWFONePXdZZWVzO3ooLZR48SUAV+XSf+cCx1z2QTLLSRmFVGr4kLqUqYzw9ly+iQ3IHLm1/OsJxhNI8/cy9LmDBhflvCIv/refTRR3n55Zd56KGHmDRp0u9dnZ+lwYj86tXxdOiwEru95Wnpxc5iRnw6gqaxTXljyBsk9EygR1IvPigo5a+33EJK//54dZ0ck8BStpi3t7zHoeJqbAfH0kkZy4ZFLUhODn0VtkkTcLvhoOzk2z476DatO3WVcr2Q19VBRARER4e2gj3Zj44Ojc8bDCFnNJ4adlv8vN1oN6qsM6Y2m1a6A6NBOiXfcRcMgtcLPt8JV1t7lMOH3qJHgWDgD+/hMscxt+MdTG0zE1XotD/0LjX5EeRv28dIs52BPheFio0vtDTWqrnoXIfd2JJWzSaT2qIlPmMxeyq+o2OdzvBADo1yBUojK/Z+cSSOiCPloggUA2xxufi0rIyPysspDgSICZqImJlDybw4zEYJR7yXnIHLUJssYK9YQLTNXi/4PdN7YjiDURYmTJjzT1jkGz4NRuSLi2eQknLDaWk/HPmBkZ+N5PYutzOp1yRG3HQFi5csIfvOj1j/2FhemXKA7VXfsSDHTaB0NhGbUqlbNQ6R1xsJmfh4yMmBxo1PEusYwTutt9NDj2e0Je0UMY+KOjF7/r9BF4IPysp4Ii+PCEXhptRUrklMJPak9ffnwuM5yLZtl9Io5Q4ab8iAZ55BaBrfXZrFbTFreXzENPol9eP666/HXePmtatfw/e+D9WpofzFypvLH+Gzzd/wF3sXul7yINUtLmJDaRmr9u5GdkfT05tJ20o/beoqUXTBJlMce+PiqcmMJrmxTGRagB05RexuXIq71IDyRlOMR+x0HekhXrOwY6mZI+pmEnsvwNt4Ph5jPgOzBzOy7TAGZA8gxhreJD9MmN+KsMg3fBqMyOu6DkhUV8Phw5CXB5+v+ZH5GzdxQeQwhDOVrTun4NIfh8wX+Ls7l4vFbK4aU0Oq6EZlp7ux/KcDFd8n0qkTPPYYXHYZKGf4UuvXlZX87eBBdnbpgvGXzoj/lehCsLS6mlmlpSyurGRgbCyPZmbS+gzfsP8pPl8h27cPJDb2MrKbTEZasRLeegt14QIWN5fZeUkbxt39Ph+9O5vJkyfz0IMPMb7zeEr+XULN8hrc/V1M3v4oR0sO8nIwwCW9eyPGXMOXzeGZra9Q56/j7m53c4VhJJXz3FQuqCB4wI2vVQwlTeLZHxNLXrWJfaKO/S1KcBsC8HpT8CoYk32kZevE2wxYPSaOlpeRa1iI0mo+asoqUoytuCitRkqxHwAAIABJREFUP6O79GdgqwvDk/fChDmPhEW+4dNgRL5tW0FeXmhWe0amRo1lG07bDib2GYQn0cyHy57Bs+ctTCNVEmJi+fCtKgoGXM4a01S+eCeFo6+tJWtqJ+bPsHDsuwNnRBOCDhs38lRWFsPj449FaqHB+OPup8dnigtV/IR/svtJXLWu83ZtLc+WlzM2Lo4nMjOJMJs51w46wWAVO3eOQFEiadXqQwwGB1RUEPjgPYrefpmYA0co73MBtiFjuW32HAqqq5k+fTodUjtQ+l4ppe+U8r33e97yvUlytInH4hwM2LcPhgxhd++WPGZey8qKTYxrP46bO99MppZJ5aJKKhdUUv1dNRHtIogbGkfMwBhEKwtv51fw0nt+CmYkY4lVierspNYlEJVmbNVWgmUm3DVBjE3WITK/I5i+BOL2EVHVi2ypP5dk9mNU3zZ07iz9n3pKwoQJc4KwyDd8GozI71xwiEaxHo5UbeCZbx6mS0xbWqdezofFW1l15BsKHEdwWBQu86VzxZ4uXPbtHD42T2Bd1AA+c1+Kc+4mPC++gNF/bKA7GDzdBQK80q8fc7p04ftJk5COx0OoyS/LJ9xPj0+OO3kavhCnujPFCQG6zlGbjXsmTmRV69a8/uKLDNq4MTQ2oCinD9obDAizmQBVqLIHc0RTZEsMGIwIoxmnr5aSI9uJr/ET5xZ47VFs9bjxNcqiQ9/hWBzxOI/GUbY7htm7NvKB9AFRdgt353RhULWKUlCMt3lzNjW28pn1MNGJ6fTN7EvXRl2xSBbcO924NrtwbXWhuTUiOkYQ2TGSyvZmntutsPjTaDSTTo9RFfS5wIPi09nt9bLjqEqEO5J4byRqRZBC53pKjMtxJi5FV7xw+FIMRT2Jqu1BI1NrmjY10LZtaJOhzMzQsEpsbHgXvjBhfglhkW/4NBiR1zMzOCo8HNFrKM3K4LN0H8tSq6jWA5j3KjwquuOv+hF1y98ZHL2ZCIOXocG5NE9xcuet27gj28Zevz80Vd1sDs2EO9mZTBwUgu5FRaxt2pSciIgTaWfq0z8DekBHc2vonpB/StijobtPCnt1dN9J7qTj1Uk+nrzETbsCmTu/VEgsUxG+ILoviPAHEYEgUlCFYABJCyB3WYt85SfIK/qirOuDQRLIiookB9iTuI0NiUvpVmyle5Edu6sQXQSpMziw2jKRjLEgoMaXzec++EBfSymFjJGSuE2U0wwnIKFhQpVN+GUDmtGKbIxEMUYhFAtekURdMAdnoAkuXxoGgw+rvYbV0fG85OnMkUA00qASLswupH9RgA47jBhqDfiCOmpAR1MFJh0qI0rYmrqFbcm72Zu2kzp7JXFF7bEXdoXCHviKLqTKl4SKRLwSIMkUJMUaIDUiSGqESkqkSopDJTVOI8ohI9tkFJuCbJORrSfCP+tbFSQlbEWE+fMTFvmGT4MR+bRpLfFZUqmpO4RRc9MvYygHZuymZlcEHs/nyDcM5S8ZE7nzwvE0vqQpN9g/5YY3uvKXv8CXFRW8VVzMV+3a1Z9T6ALNpaHWqmhOjWCdymDvPob4orixIhrNqaG5NDSnhupU68Mnx2su7RQxB5DtIbFQ7EoobFdC4nE8bD8hJLJVRrac2Xkt8KKpnHeo5FpLHPdEp5FiNyObZCSThGSUQmGDhCRL+Hz57Nt3E4FAOTk503E4utdfq1/189qPr/HcmufontaN25V+1Lz0MQkbN9JDlpE6d8Y0dCgMGoQ/sSVr3ljHzPdmsrBwIc1jmzPi0mGM6ZVJ+t51aEuXoOfnczDVwo+xXsjJoXGLbrSPaUmsZkTUOnHul6jaF0V1fjzOqjgkcx3bJTtz/G3Iy/JRfIWTTnHrGbpvE4P376ddbS0+u50am40Ki4Vii4V8k4l8G5THeCixVpFnKOGQOEKCnkS6swO24i548jpTcaAzzuoIZLOErsj4dBmnX8FkECTaVVKjVBpFBUmLCJJiDpBoCJAo+4kXfhTfMYPLo5/mSyYp9Nx+oXGgRCooEaf7hkjDqXF2BUkOGxBhfhvCIv/LyM3NpVmzZujHh1r/RDQYkZcmN6JVWj/6amM48IGFpd+NJTNpGPeP+xee5nOYvv8LOqydjW3DAh6zvEDt9Z9i9gbR6jRmNHdSatT4+8cGtLpjwu7SQi/nKAVDlIHXrlbZlaUzY24UxkhD6OV8/MV8rhf3cTG3Kcim//0kvVK/n2cLCni/rIwH09O5t3Hjs24tK4SgvPxjcnPvx+HoSVbWU9hszerTPUEP72x9h6lrp5IamcrIrJEc+HAbRz/9glsyM+nhdGLxepH694dBg3B16MGnM79nzpw5rCxYSbOoZgy5aAjDruzDBZF1+L7/Bu/Sr4k4XMSeBDiQ5UC64AIaXzKCNpeMxm6PRvNpODc4qV1VS+X3NdSsqaNCMfNjwMGRZiZ2XOqhcmAVl0XoXOb10q+mBkdtLdTV4a2poaaqCld1Nb6aGnzOGg5KR9ltr2JfrIf9MUH2xwrSXDKtqs20rIukWV0cGTUpmKtTKPdGU+JxUOp1UKk68JmicMoOqnUHRwMOVLsDY7yDiOQIGqXLZGZC06bQqJEgJUGQFK0RY9HRvWc2BI73yGgu7YQ7ZvypTvV0g9AZMipkq3xmA+BcxsE50mTj+ZkcGubPT0MW+bFjx2I0Gpk1a1Z93IoVK7jyyivZtWsXSb/igxu5ubnk5OSgadr5qOp5pcGI/Of2dahuD/OYxbcs4l77fVySeDGbIr3co+Rh3DWGcc2qmVp0ETUDHiTYqV9IwB0Gbk8s5hJTFOOikzA4DCiO0IvyeJfs2yUlPJ2fzw+dOhH/B/3aUL7Px8hdu2hutTKzRQvM55iUp2kejhx5iSNHXiY6+lIaN/4HkZFd640DVVeZv28+b256k43FGxneZDiGvQaWvL2EHJOZ+9q35yKXC9Pq1aGNAwYOxNerL3N/KGXe7EWsPrAan+ajR1oP+vbqy8WX96RtWpAjK+dRs3opjh37STrq5XAjO7Wtm2Lv2JWMrgOI6dAdPSkV1zYXJd/UkjunFm13HcKnUxBlJz/bwObOPiyXK/RuF8fguDja2u2nGTVBXeewz8c+j4fc2ip2H97EwZItlFTtpdKVi1stQsVLIz2ebDWapn4bOW4L2RUGsoshvsyLVFeHwV2LxV+LSfPikiKpxUGNcFAnhVytCB17TA6CVgd6pAM5xoE12UFkIweJzRw0buMgvZ2D6EaRSMrPi63QBZrnJ8J/smFwlh6jsxkNqlNFUqRfbxycLT0i1DsR/kZBw6Ahi3xVVRVt2rTh/fff59JLL8Xv99OuXTsefvhhxo4d+4vPo2kaeXl5YZH/PZEkSUy68UM+/fYRLujSmSkvTGP9+hRefVXnh21V9Bqxl0+e70XCJ/+GOXNg2bJTZma1WL+ez1q3pl1ExGnn/qK8nNsPHGBFhw60+AXL135PvJrGtXv2UKeqzGnThqifmYauqk6Ki9+guHg6smwmOfl6kpKuw2xOqc+TV5PHu1vf5dNdn+IKuOga2ZWq9VVsnLORizp3Z2KrVlyqqkT/8AMcOBD6Is8ll5BniuXLdXksWbeezfmbcatu2sW344IOF9Cxd0fa9GiCfnQT1au/JbhrB468YnIqBBEBiZr0REROM6LadSGibWdqTE3Y+EMih9dAcJeTVKcTDHAgwURBM4juZabzpTH06ZJETMS5jTAhBEeDQbbVlLCqaAs7KvZxuDqXsrp8apwF+D1HEEJgtqcRFZFOYlQmGZEZNDXG0kJ20EyPJLnKhLHER6DYiauoFldRLYGjtYjaWozuWsy+WqzBOiL0WqJELQ5qsePGRQROKQqX7MBtdOAzOQjaHOhRDuRoB6YEB7YUB450B1GNHdhTHZgTHUjRDnA4Qpsw/ML5Hydfr+7Xf95o+KnxcLZ0l4bu10NDS2cwBE42Bs6U9lODob634Tz0coX5eRqyyAN88cUXPPDAA+zYsYMnn3yS7du3s3DhwtA3TJ59llmzZlFXV0e/fv14/fXXcTgc9V3zs2bN4rHHHqNZs2a88cYbp4j8Z599xoMPPsjChQtp0aIFa9as4d5772Xv3r1kZWUxbdo0LrroIgBmzpzJU089RWVlJYmJiTzzzDNcffXVv9k9+F1FXpKkQcDLgAzMFEJMPkOeV4DBgBu4Xgix9Qx5RKtWzbjqqkc5cuQiFixIomkzJ/E9XiGzy1L+2fceDIdKiB7yENVzH0fNSQV0QHA0CBceSmFX03yMkkAIvT5tRXUV31RVcGtqMmlm8ylpx8MhX/yP0gRwwp24/z+NOzX+5HKagKddPdkWTGK64yviZc8vKhcMVuL3FxIIlKAokRiN8RiN8ShKJCABAlfASbm7jEpPJe6AC6tsRfZLeKu9mCUTKYqDzIMyiXuDRBzwYjnoRo0z4W1qozbKwCGfzs7aIDurg+yqCHLQGcSRZqFJlp0m2TaSGhuITlSJjfQSaXQj+3xYg2DVJEwqKLqOMBqpCyZzcN+lHN3eA9+hbCzl0aRpAVKEjzqbhjupDim7HHurQuI7HiIiqxI50n+O1ueJeCEEVYEgh51u8j1eClw+ijxeKnx+qvwBqv1BvKpGpMmAw2Qi2mwkxmwmzmIm1mwixmQmxmwmxmwizmwhzmzGIhnQ/BIBp8DvVAm4VVSviuZT6ydJSkEVRQ9i0IIYRBCTCGLkmC8C9ceaMBCUTGiSCU02oStmhNGEZDIjmY/7ZmRLyClWM4rNjMFmwWAzg8WCJCvHrvl4i/yECx3LSJJ8kn9qHEJCBATCL6H7j/sg/KD7BMIHuh90L6GwT6B7Rcj3hOJ1jwj5Xh3dA+gSsklBNhmQzQZks3zMNyCbFWSLAcWsIFkUFIsBxWwIha1GFIuCbFGQrUYUqwHFZgjltx0LWw3IBgOSJCNJyrFrOeGHrks5LT0U37Bp6CIPcNVVVxEIBFi7di3btm0jNTWVF154gXnz5vH5558TGxvLHXfcgc/n47333qsX+QkTJvDqq68iSRJHjhypF/kZM2YwZcoUvv32WzIyMjhy5AgdOnTgk08+oV+/fnz77bdce+217N+/H4PBQOPGjdm8eTNNmjShrKyM6upqWrRo8Ztd/+8m8lLoP2g/cClQDPwIjBZC7D0pz2DgDiHEEEmSugHThBDdz3AuER1dTUrKUS69dDUXX7qKOutigrpK17TumJw6WeNWUTUmm+rRzTjxcpNZ6GvKYn82r0Yvq3+J+XTBmjonlarGZbHxRBmMJ730fvLCQ/ofpf30RXvCrV27j549W5whD2csJ4TESxURfFJr5fkUJz1sQYyShFuXcQkZgyRIUKjPf+L3QNcDuN27cLm24HJtIRiswmbLwWptWu9MphQ8qo+tJdvYWPIjO8t2UVhXhEN3IFXJ1ByqxRaw0y6tNT1j0mmhGUgNSkRVu5AKy5BLKpCqaqGiBsnj4xtZob1solYX1AiNaqFSKwTCYgG7DTXChD9KxmdTUWUfmvBgloLEG8wkYCROVjD4HBypzWavpxtlwfbonjQcHivJAY0UyYcmQ4VVpjoKnLEq/hQVkR7E0DxAdCud+EydaBtYFQWbLGOTFWyKfCwso5w0/OFXA5S5K8lzHiW3rox851GKXJWUeaqo9tXh9Dtx+d14gi78QS9SvoI5JwKD0YrFaMdqtIScwYzdaMVuNBNpshJptBBpMuMwWYnAikW1ovhs4LQSqDXirQW1zo9wesDrQ/Z5UAJeDKoHk+7BrHuxyl5skheL5MWKF4vkw4wXCz4skheL5EeVFAKymaBkRDWYUBUzmmJEN5rQjSaE0YhuNCJMIYfJACYjktmAZDaAyYBsUZBMRrbtK+eCro1QzDKKQaAoOooS8kPGq34OI/ckY1fXEKqOrmkILRQWuo7Q9NCxrh07DuVFHEsXof0nhDh2bnH6uRE6KDooAuRQWJJFKE7SEXLI57gv6SCHWmxbt0h0aG9A4tj/KjJIyim+JCsh40CSkSQDknw87szGwwkj4ucNjfOdNz397gYv8uXl5WRnZ/Pss89yxx13AJCTk8PMmTPrW9uFhYXk5OTg9Xrrx98LCgpIS0sDTky8mzJlCu+++y5LliypH9N/5plnyM3NZebMmfW/2a9fP2644QaGDh1KRkYGb7/9NoMGDcJ8tu+On0d+z+/JdwUOCCHyj1XkE2A4sPekPMOB9wCEEOslSXJIkpQkhCj76cm2bIkmMzOaFXnF3LpwCj0aD+E/l/0HS2EJXDccRt5K6pOT+ek33u7dvp1xKQm0TBlHVTDIa0VF/LuoiHHJyTyRmYn1V3aPng927nyckSNP37L3XExOhi7l5TxXUMDWAhc6EKEoRCoKPl3HIsuMSkzkuqQkOkZE/KSVO7I+5PeX4HRuxOXagtO5mbKyDwkESrBY0km3ZNM8OwtTy66oUgx7a13srCpnW9s8dpTsZ0bNRt7SfsTkNBEoC6DX6CRHJJPeJZ2s+AtontKc1mk5LJm3kAtvvplEXUc/UkdgfxWuA6VUHMqjrriYQFUVamENQrjBaESSjEi6D0UEMeheArqGLGpoIuXTmmVYAAtgPfbeqcRABck4fNk4fZl4yzNQ96Qii3jMeiQ2jASQqcTIQdlIlaJQaYJKM1TYoNoucEdqBCI0glE6VpuFCKsDR0QzYqOMxEabaRZro0ecjcQsK4lRRlIiDSRGGLBaBU88/SC33HgT5Z6j5DvLKfFUUeqtpdpXS43fSa2/jiMeJ65AFe6AE1/AhS/owh90EVQ9aKobIXRkxQZ2MyLChJBNoJiRZTOKYsGgHPOFBYMei6LZkIM2lKAV/DYknw3hs6G7bCh1CqYaGaMbzB4Vs1vD6tWxeIPYfAGitAAOyY9DeIkRXqKEl0jJTYRwYRM12IUbu+7CpruZr5YxAbAKLx7Jhkey48ROyMSw4pdDLiBb8ct2ggY7mtGGarSiGq1oJiua2YputqGbrQhLyGENOclmRbLbkO1WZLsVJSLkzFYZs5lTnOUnx8edySQwSQLJr6F7TixbPb4sVfNqpy5TPSl+zncvclnBX9H9Kro/1PuiB9RjxxpaIIAeUBF+DT2oogW00LGqgkkgW0C2CiQLyFYJyawjm4BjvmQSSEaBZBZgFEgmgWwEjDoYQTLqCJNAMggwhOKEQUcyCjAIhKKD8ZjBYgj54pgvKcfiZTVkuCjHDRgBkobgt5kpvlxa/j85T1/R978ql5iYSHx8PK1ataqPKygoYNiwYcjHjHchBLIsU15eXp/nuMCfzNSpU3niiSdOmbSXn5/PRx99xNy5c+vPpaoqgwcPJjIyko8//pipU6dy/fXXc9FFF/HCCy/QrFmz0879e3C+RT4NKDzp+Agh4T9XnqJjcaeJ/CbPbG754E32Vezj+f7Pc3XSJfD4UzB9Ojz6KNx552kVWF5dzUank6GxsQzfsYPlNTVckZDA8g4daPkHH3//JYxMTGRkYiJCiFNEXAjBfq+XD8rKGLlrF0ZJ4sKoKGKNxvoOfRmINxrJtFjItPQmM2UA6RkmZElC1/14vYfx+XLx+fIIBErR/NvJkMpIiSylj7mMYFIFmuajTo+g2G+h1BdJiUvicIWPEtcuDgY2M7s4gLdMRRyG1798F+EFRZUxagpmuxFLRxPWrmasJgs2k4UEPZmU2lQSXIlEu2OIckcT6YzCVheBucaKXi3we/y4o9y4bW58Vi9+kxNJqkCiAoNejVHdgSW4BnvQTUTQS0TAT4w/SHTQRqQWh67HUy0ScGpJeLyJBKoT0HAgRBQydoxYCaLhRsWFTi0StSjUYeQARrZhwo0JNxY8WHBjIR/Bl5OT8JNAgJYEZY2ApBOQdTRZRVJ0JEVDUjRkRUNWdGSjjlHRsRh0jEYdo8mHweLGaPFitPgwmf0YLX6M5gAGSwDJHEA1B9CMfjSDH1Xxocp+VKUCTfGjRfjQIv2IRD9ByYePABpBdALoBNFFEE2EfF2oCBFE10PHoCFhBExIwgjCCMIEmgl9hZUXe6aCZkJWDRhUGUVVMAQVFFXGoIJBVTFqToxqHUYVTJrAKHRMQsMsdMyomHUNs9Cw6CoWj4rFpWLVVKx6EKsWDIW1IFY1iFULIAkFHQNuyYgTA5pkRJWMaJKCKhlRMaIRigsSOlYlI5psJCgZ0WQT2jFfV475BhO6bERTzOiKEaEY2VK2G9fhRUiKEWEwoBgMYDMgRRlRjEYkgwHZYEQ2mlAUC7LJiKIYMRlNGCQzZtmIBStmScYiZExCxqBLGISEQZMxHO9k0EDRBLIXJKeOrOlImkBSdSRVQFBH0kJhKajDsThUHYLHwkGBCOoQ1BFBAQE9NKyihdKFJhBBgVBDfohp5/099N+K8/mkcePGfPTRR3Tp0uW0NKfTecYykiSxZMkSBgwYQGJiIsOHD68/18SJE3n11VfPWG7gwIEMHDgQv9/PpEmTuOWWW1i2bNn/7mL+D/ypNg/9eO4SLpA6M7q6LREPfsD6w0+yp2dPln/6KRUJCQS2bUMFArpOtapS5PdTq2mkmUysratjZEIC77RoQcwv/BDMn4mfjkVLkkRzm40ns7J4IjOTzS4XW10ualS1fnRaF4LyYJCtFRUc9vnI9/mo0zTSzeZjwm8h09KGTMsFZEZYiDEYsEgSdklCkST8uo5TDSAHXchBF/aAm7igh7SgD7fmxyYFiJb8RMl+vqr8jCuv7UHAV83RmiqO1tZQWefE6fbi8nhwevx4/AHy/EfYL+Xjt2oEzTrBaIGmC4K6QBMhJ2sGItQoIvUIIjU7EWoEEVoEEUE79mAS9kAEdtWGSbVg0SyYg2bMqgVrwIIlaMEakLBrQSS5ElmqRZEqiXXtwR6swijVYtRrMYogkjAAJoSwhgRPmNGwESCCgBRJQLKjYkPFzlv6Hq6X5yCECZ1jAqmbQDMCEgIVTQqioaJJKkHUkPxKGgF0/JKOX0hoUmjOhYZAFwIN0IUBTRjQsSEQ6EjHZlmEnqQg1FI5aVDnJ2GBfFIcgIYBHQUNBQ1DyJek/9fe/UdVVeX/H3/uK4ShgFwxBLkCqTQ2Ls1qRtM0kTJ/QDay0jTz58f61MykzScndWYcqxnXNIP1XbZmTVRqNBaaTTPkB8f0U4laWamjjvmD8UeIIElgAmmg3P39A7xJIiqCl3t9PdY6q3vuPnuffe5N3nfvs8/eVJtqqh2ncTtOU+2oxu04zZZTf6PnzmROGzfuVtVUt6r2pOE4jXWcqu0CPw2mGkw1xlFd0x1uqjG172HcnKKaKkc15Y5qcLixtV3pbofFBlZTHWTBUU21ww2mGreDmjRjcWPBYak2Nfs1ecGe6X4HMKewVIKxUHvMmdfmTKvWuL/LY+Bo4JfsDDpSm2Zrgmu1harvxrdYh/u7dM7utnZjPeeqOfZMuZbv3jNQc5znH6j9bhhOzcGYVgbjAAINtK79ps7qgTVnvj1b+93a71Jq3vsuvc57y879e3E1ePjhh5k9ezZLlizB5XJx9OhRPvnkE1JSUgCo7/aDtZYePXqQnZ3N8OHDCQwMZPjw4Tz44IPcdttt/OQnP2Hw4MFUVVWxadMmz333zZs3k5SUxDXXXEObNm1o1QJ6hz1q7nM1zwb0BVaftT8LePJ7x7wIjDlrfw8QWU9ZVps2bdq0XfrWBH/LbUsXHx9v33vvPc++2+22aWlptlu3bjY0NNR269bNzp0711pr7b59+6zD4aiT//vvffrppzYyMtKuXbvWWmvtpk2b7MCBA63T6bSRkZE2JSXFFhQU2MOHD9uBAwfadu3a2fDwcDt48GC7d+/eK3DF32noO27ugXetgL3UDLw7AnwKjLXW7j7rmOHAT23NwLu+wP+z9Qy8ExER72jpA++udl4beGetrTbG/AxYw3eP0O02xjxck2xfstauMsYMN8bso+YRusnNWScREZGrhc9MhiMiIt6hlnzL1lBL3idmgjDGDDXG7DHG5BpjnvR2fZqSMWaRMeZLY8wOb9elqRljYowx7xtjPjfG/NsY85i369SUjDFBxphPjDH/qr2+33q7Ts3BGOMwxmw1xrzj7bo0NWPMF8aY7bXf4aferk9Tq30keYUxZnftv8M+3q6TXFktviV/MRPq+DJjzO1ABfCatbbnhY73JcaYjkBHa+02Y0xbYAsw0l++OwBjTLC19kTt+JMPgcestX4VLIwxjwO3AKHW2nu8XZ+mZIw5ANxirT3m7bo0B2PMq0COtXaJMSYACLbWljWiHLXkWzBfb8l7JtSx1p6i5oGQkV6uU5Ox1m4E/PIPjLW2yNZOUWytrQB2UzMHgt+w1p6ofRlEzRgXv/pLaIyJAYYDr3i7Ls2kZppKP2SMCQUGWGuXAFhrTzcmwItv84X/ueubUMevAsXVwBgTB9wEfOLdmjSt2q7sfwFFwFpr7WferlMTex6YiZ/9eDmLBdYaYz4zxkzzdmWaWDzwlTFmSe3tlpeMMdd6u1JyZflCkBcfV9tV/xYwvbZF7zestW5rbW8gBuhjjLnxQnl8hTFmBPBlbW/M2XPp+JP+1tqbqemt+Gnt7TN/EQDcDPy59hpPUDNXiVxFfCHIFwCdz9qPqX1PfEDtfcC3gL9aa7O8XZ/mUtsN+gEw1Nt1aUL9gXtq71tnAonGmNe8XKcmZa09UvvfYuDvnDvtti87DORbazfX7r9FTdCXq4gvBPnPgK7GmFhjzDXA/YC/jfL111YSwGJgl7W2+SfQvsKMMRHGmLDa19cCd1F38SWfZq2dY63tbK29npp/d+9bayd4u15NxRgTXNvLhDGmDTAE2OndWjUdW7PIV74xJqH2rSRglxer5FV5eXk4HA7c7iuzaE9GRoZnBTxvavFB3lpbDZyZUOdzYNnZM+b5OmPMG8BHQIIx5pAxxm8mAzLG9AceAAbXPqK01RjjTy3dKOADY8w2asYavGutXeXlOsnFiwQ21o6p2ASstNYQqik4AAAZl0lEQVSu8XKdmtpjwOu1/4/2AuZ7uT5NLi4ujuDgYEJDQwkJCSE0NJTHHqv/ad3vr/HR3K70+erjEwvUWGtXAzd4ux7NwVo7ztt1aC7W2g+BFrRSQ9Oy1v6bq6T701qbA+R4ux5NyVp7kJrBoH7LWrsdOHcZNj9ijCE7O5vExESv1cHtdnuWtG1pWmatRERELlJ9z/C73W6eeOIJOnToQNeuXcnOzq6THh8fX2c52KeeeooHH3zQsz969GiioqIIDw9n0KBB7Nr13Z2OyZMn8+ijjzJixAhCQkJYt24dpaWl3HPPPYSFhdG3b1/2799f53wfffQRP/7xjwkPD6dPnz58/PHHTXX5DVKQFxERv/PSSy+xatUqtm/fzubNm3nrrbcumOfs7vXhw4ezf/9+jh49ys0338wDDzxQ59jMzEx+85vfUF5eTv/+/Xn00UcJDg7myy+/ZNGiRSxevNhz7LFjx0hOTmbGjBmUlJTw+OOPM2LECI4da/4pUhTkRUTEp9177704nU7Cw8NxOp0sWrSIFStWMGPGDKKjo2nXrh2zZ8++pDInTZpEcHAwgYGBzJ07l+3bt1NeXu5JHzlyJH371iyYGhgYyNtvv80zzzxD69at+eEPf8jEiRM9x2ZnZ5OQkMC4ceNwOBzcf//9/OAHP2DlypVN8wE0wCfuyYuISMu1bl3TDDAbNKhxcy5lZWWdc08+LS0Nl8vl2Y+Njb3o8txuN3PmzOGtt97iq6++whiDMYavvvqKkJAQgDplFxcXU11dTUxMTJ3zbdiwAYDCwsJzzh8bG0tBQfM/Da4gLyIil6Wxwbmp1HdPPioqivz87yZLzcvLq5Pepk0bTpw44dkvKiryvH799ddZuXIl77//Pp07d+b48eOEh4fXOc/ZXfsdOnQgICCA/Px8EhJqnlg8dOiQJz06Opq//e1vdc5/6NAhhg0bdqmXesnUXS8iIn5n9OjRLFy4kIKCAo4dO8azzz5bJ/2mm25i2bJlnD59+px79hUVFQQFBREeHs4333zD7NmzG3wczuFwMGrUKObNm8fJkyfZtWsXGRkZnvThw4fzn//8h2XLllFdXc3y5cvZvXs3ycnJTX/h369bs59BRESkGaWkpBAaGurZUlNTeeihhxgyZAi9evXi1ltvJTU1tU6eZ555hn379uF0OnnqqafqDKybMGECnTt3plOnTvTo0YN+/fpdsA4vvPAC5eXlREVFMWXKFKZMmeJJczqd/O///i9paWlERESQlpZGdnY2Tqez6T6E82jxS82KiIh3aanZls3Xl5oVERGRRlCQFxER8VMK8iIiIn5KQV5ERMRPKciLiIj4KQV5ERERP6UgLyIi4qcU5EVERPyUgryIiFxVEhMTPUvBvvHGGwwdOtTLNWo+CvIiIuKz4uLiCA4OJjQ0lJCQEEJDQ+ssNnMh48aNY/Xq1c1YQ+9SkBcREZ9ljCE7O5uysjLKy8spKyujY8eO3q5Wi6EgLyIiPq2+efU3bdpE//79CQ8Pp3fv3uTk5NSbNyMjgwEDBnj2HQ4HL7zwAl26dOG6667jl7/8ZZ3jFy9ezI033kj79u0ZNmxYnSVlWyIFeRER8SuFhYUkJyczd+5cjh07RlpaGqmpqZSUlNR7/PeXkf3HP/7B1q1b2bp1K1lZWZ7791lZWfzhD3/gH//4B8XFxQwYMICxY8c2+/VcDgV5ERHxaffeey9OpxOn08moUaNYunQpI0aM4O677wYgKSmJW2+9lVWrVl1UebNmzSIsLIyYmBhmzJhBZmYmAOnp6cyePZuEhAQcDgezZs1i27Zt5OfnN9u1XS4FeRERuSzGmCbZGisrK4vS0lJKS0t5++23ycvL48033/QE/vDwcD788MOLHpAXExPjeR0bG0thYSEAeXl5TJ8+3VNu+/btMcZQUFDQ6Lo3twBvV0BERHybt9ea//75XS4XEyZMID09vVHl5efn0717d6AmsEdHR3vK/fWvf93iu+jPppa8iIj4lfHjx7Ny5UrWrFmD2+3m22+/JScnx9Miv5A//elPfP311+Tn57Nw4ULuv/9+AP77v/+b+fPns2vXLgCOHz/OW2+91WzX0RQU5EVExGfV180fExNDVlYW8+fPp0OHDsTGxpKWlobb7T5vnrONHDmSW265hZtvvpmUlBSmTJkC1Nz7nzVrFvfffz/t2rWjZ8+eLf4Ze+PtbhYREWnZjDH2aokVDoeDffv2cf3113u7KhfNGIO1tt5fLmrJi4iI+CkFeRERkVqXM8q/JdLoehERkVrV1dXerkKTUkteRETETynIi4iI+CkFeRERET+lIC8iIuKnFORFRET8lIK8iIhc1fLy8nA4HJ4Z8fyJgryIiPisuLg4goODCQ0NJSoqismTJ3PixIlLLsffno8/Q0FeRER8ljGG7OxsysrK2Lp1K5s3b+Z3v/tdk57Dl6f0VZAXERGfdiYIR0VFMWzYMHbu3ElZWRlTp04lOjoal8vFb37zG89xbrebJ554gg4dOtC1a1eys7PrlJeYmMivf/1rbr/9dtq0acPBgwc5cuQII0eOpH379iQkJPDKK69c8etsDM14JyIifiE/P59Vq1aRmprKpEmT6NixIwcOHKCiooLk5GQ6d+7MtGnTeOmll1i1ahXbt28nODiYUaNGnVPW0qVLWb16NQkJCbjdbpKSkujZsydFRUXs2rWLu+66i65duzJo0KArf6GXQKvQiYhIg1ryKnTx8fGUlJQQEBBAWFgYycnJzJw5k4SEBI4fP05QUBAAy5Yt4+WXX+a9994jKSmJMWPG8NBDDwGwdu1ahg4dyqlTp3A4HCQmJnLHHXcwb948AA4fPkx8fDzHjx8nODgYgDlz5lBUVMTixYu9ct1na2gVOrXkRUTksjTVmLXG/o7IysoiMTHRs//ZZ59x6tQpoqKiasu1WGvp3LkzAIWFhbhcLs/xsbGx55R5dnphYSFOp9MT4M/k2bJlS+MqfAUpyIuIyGXxdiP/+70MLpeL1q1bU1JSUu+o+aioKPLz8z37eXl55xxzdr7o6GhKS0v55ptvaNOmDQCHDh2iU6dOTXUJzUYD70RExK907NiRIUOG8Pjjj1NeXo61lgMHDrB+/XoARo8ezcKFCykoKODYsWM8++yzDZYXExNDv379mD17NpWVlezYsYNFixbx4IMPXonLuSwK8iIi4rPO93z7a6+9RlVVFTfeeCNOp5P77ruPoqIiAKZNm8bdd99Nr169uPXWW0lNTb1gmZmZmRw8eJDo6GhSU1N55pln6twiaKk08E5ERBrUkgfeScMD79SSFxER8VMK8iIiIn5KQV5ERMRPKciLiIj4KQV5ERERP6UgLyIi4qcU5EVERPyUgryIiIifUpAXERG5BImJiS1i9bmLoSAvIiI+bePGjfTv35927doRERHBgAEDfGKFuCtBq9CJiIjPKi8vJyUlhfT0dO677z6qqqrYsGGDZx35q51a8iIi4rNyc3MxxjB69GiMMQQFBXHnnXfSo0cPDhw4QFJSEhEREVx33XWMHz+esrIyT974+HgWLFhAr169CA8PZ+zYsVRVVXnSs7Ky6N27N2FhYXTr1o01a9Z40r744gtuv/12QkNDGTp0KKWlpZ60d955hx49euB0Ohk8eDB79uy5Mh9GPRTkRUTEZyUkJNCqVSsmTZrE6tWr+frrrz1p1lrmzJlDUVERu3fv5vDhw8ybN69O/hUrVrBmzRoOHjzI9u3befXVVwH49NNPmThxIgsWLOD48eOsX7+euLg4T77MzEwyMjIoLi6msrKStLQ0oOZHx7hx41i4cCHFxcUMGzaMlJQUTp8+3dwfRb0U5EVExGeFhISwceNGHA4HDz30ENdddx0jR46kuLiYLl26kJSUREBAAO3bt+fxxx8nJyenTv7p06cTGRlJu3btSElJYdu2bQAsXryYqVOnMnjwYACioqJISEjw5Js8eTJdunQhKCiI0aNHe/K9+eabJCcnM3jwYFq1asUTTzzByZMn+eijj67QJ1KX7smLiMhlMU/Vv6b7pbK/bdxytjfccINntHtubi4PPPAAM2bM4Pnnn+exxx5j48aNVFRUUF1djdPprJM3MjLS8zo4OJgjR44AkJ+fz4gRI857zo4dO9bJV1FRAUBhYSGxsbGeNGMMLpeLgoKCRl3b5VKQFxGRy9LY4NwcEhISmDRpEunp6cyZM4dWrVrx+eefExYWRlZWFj//+c8vqhyXy8X+/fsv+fzR0dHs3Lmzznv5+fl06tTpkstqCuquFxERn7V3716ee+45T0s5Pz+fzMxMbrvtNioqKmjbti0hISEUFBTwpz/96aLLnTp1KkuWLOGDDz7AWkthYSG5ubkXzDd69Giys7P54IMPOH36NGlpabRu3Zp+/fo1+hovh4K8iIj4rJCQED755BP69OlDSEgI/fr1o2fPnixYsIC5c+eyZcsWz/321NTUOnmNOf9thh/96EcsWbKEGTNmEBYWxqBBg8jLy7tgvoSEBJYuXcrPfvYzOnToQHZ2NitXriQgwDsd58baltPNIiIiLY8xxipWtFzGGKy19f7yUEteRETETynIi4iI+CkFeRERET+lIC8iIuKnFORFRET8lIK8iIiIn1KQFxER8VMK8iIiIn5KQV5ERK4qw4cP569//esVPefGjRvp3r37FT0naMY7ERG5gJY8411cXBxHjx4lICAAay3GGHJzc+usEtccMjIyeOWVV9iwYUOznudiaMY7ERHxS8YYsrOzKSsro7y8nLKysmYP8IDnB0VLpyAvIiI+rb5ehk2bNtG/f3/Cw8Pp3bs3OTk5nrTExETP+vMZGRkMGDCAmTNn4nQ66dKlC6tXr/Yc++qrr9KlSxdCQ0Pp0qULmZmZ7Nmzh0ceeYSPP/6YkJAQzxr1VVVVPPHEE8TGxhIVFcWjjz5KZWUlADk5ObhcLk+58fHxLFiwgF69ehEeHs7YsWOpqqpq8s9GQV5ERPxKYWEhycnJzJ07l2PHjpGWlkZqaiolJSX1Hv/pp5/SvXt3SkpKmDlzJlOnTgXgxIkTTJ8+nXfffZeysjI++ugjbrrpJn7wgx/w4osvctttt1FeXk5paSkATz75JPv27WPHjh3s27ePgoICnn76ac95vt/yX7FiBWvWrOHgwYNs376dV199tck/CwV5ERHxaffeey9OpxOn08moUaNYunQpI0aM4O677wYgKSmJW2+9lVWrVtWbPzY2lilTpmCMYeLEiRw5coSjR48C0KpVK/7973/z7bffEhkZ2eDguZdffpnnn3+esLAw2rRpw6xZs8jMzDzv8dOnTycyMtKzFO62bdsu41Oon4K8iIhcHmOaZmukrKwsSktLKS0t5e233yYvL48333zTE/jDw8P58MMPKSoqqjf/2ffwr732WgAqKioIDg5m+fLl/OUvfyEqKoqUlBT27t1bbxnFxcWcOHGCW265xXPeYcOGnbf3ACAyMtLzOjg4mIqKisZcfoO8s4q9iIj4Dy+PvP/+PXmXy8WECRNIT0+/7LLvuusu7rrrLiorK/nVr37FQw89RE5Ozjld7xEREQQHB/P5558TFRV12edtKmrJi4iIXxk/fjwrV65kzZo1uN1uvv32W3JycigsLLykco4ePco777zDiRMnCAwMpG3btjgcNWEzMjKSw4cPc+rUKaDmfvu0adOYMWMGxcXFABQUFLBmzZqmvbhLpCAvIiI+q77H2GJiYsjKymL+/Pl06NCB2NhY0tLScLvd581TX5lut5vnnnuOTp06ERERwfr16/nLX/4CwODBg/nhD39Ix44due666wD4wx/+QNeuXenbty/t2rVjyJAh5ObmXnS9m4MmwxERkQa15MlwRJPhiIiIXJUU5EVERPyUgryIiIifUpAXERHxUwryIiIifkpBXkRExE8pyIuIiPgpBXkRERE/pSAvIiJ+7ZFHHuH3v/89cO667pdi8uTJzJ0794LHxcfH8/7779eb1qNHD9avX9+o8zeGFqgRERGfFRcXR1FREYWFhTidTs/7vXv3Zvv27XzxxReeqWjPuFJTytZn586dV/R8asmLiIjPMsYQHx9fZ932nTt3cvLkSa8G85ZCQV5ERHzagw8+SEZGhmc/IyODiRMnevYb6mZfuHAhPXr0oLCwkIyMDAYMGFAn3eFwcODAgXPylZSUkJKSQnh4OO3bt+eOO+6ot/zdu3dz/fXXs3z5cqDhrvzmoCAvIiI+rW/fvpSXl7N3717cbjfLly9n/PjxF8z39NNP89prr7F+/Xqio6OBc7vyz9cbsGDBAlwuFyUlJRw9epT58+efc8zWrVsZOnQof/7znxkzZkwjruzyKciLiIjPO9OaX7t2Ld27dyc6OprzrZzndrv5n//5H/7v//6PdevW1bmX/33nKyMwMJAjR45w8OBBWrVqRf/+/eukr1+/npEjR7J06VKGDRvW+Au7TBp4JyIil8WsW9ck5dhBgxqdd/z48QwcOJCDBw8yYcKEmnqdpxX+9ddf8/LLL7N8+XLatm3bqPPNnDmTefPmMWTIEIwxTJs2jSeffNKTnp6ezh133HFO9/+VpiAvIiKX5XKCc1Pp3Lkz8fHx/POf/2Tx4sUNHut0Olm6dCn33Xcff//73+nXrx8Abdq04cSJE57jioqKzltG27ZtSUtLIy0tjV27dpGYmMiPf/xjEhMTAXjxxRd59tln+cUvfsFzzz3XBFfYOOquFxERv7B48WLef/99rr32WuD8Xe0AAwcO5PXXXyc1NZXPPvsMgF69evH555+zY8cOKisreeqpp87bG5Cdnc3+/fsBCAkJISAggFatWnnSQ0JCWL16NevXr2f27NlNdYmXTEFeRER81tlBOD4+nptvvrnetPrceeedLFq0iHvuuYdt27bRrVs35s6dS1JSEgkJCQ12tf/nP//hzjvvJCQkhP79+/PTn/6UgQMH1jlvaGgoa9euZfXq1fz2t7+9qDo1NdPQLx0RERFjjFWsaLmMMVhr6/31oJa8iIiIn1KQFxER8VMK8iIiIn5KQV5ERMRPKciLiIj4KQV5ERERP6UgLyIi4qcU5EVERPyUgryIiFx1rvS67merb9365qIgLyIiPm3jxo3079+fdu3aERERwYABA9iyZYu3q9WgKzW9rVahExERn1VeXk5KSgrp6encd999VFVVsWHDBoKCgprsHNXV1XUWn/Emt9uNw3Hx7XO15EVExGfl5uZijGH06NEYYwgKCuLOO++kR48eALz88svceOONhIaG0qNHD7Zt2+bJ+69//YtevXoRHh7O2LFjqaqqAiAnJweXy8Uf//hHoqKimDJliqesbt26ERERwb333suRI0c8Ze3Zs4chQ4bQvn17unfvzooVKzxppaWl3HPPPYSFhdG3b1/P6nUXk3fy5Mk8+uijjBgxgpCQENatW3dpH5C1Vps2bdq0aTvvVhMqWqaysjIbERFhJ06caP/5z3/aY8eOedLefPNNGxMTY7ds2WKttXb//v320KFD1lpr4+LibJ8+fWxRUZE9duyY7d69u01PT7fWWrtu3TobEBBgZ8+ebauqquy3335r33vvPRsREWG3bdtmq6qq7M9//nM7cOBAa62133zzjXW5XDYjI8O63W67bds2GxERYXfv3m2ttXbMmDF2zJgx9uTJk3bnzp22U6dOdsCAAReVd9KkSbZdu3b2448/ttZaW1lZec5nUPv91P/dnS9BmzZt2rRps7ZlB3lrrd2zZ4+dPHmydblcNiAgwI4cOdJ++eWX9u6777YLFy6sN09cXJx94403PPu//OUv7SOPPGKtrQnyQUFBtqqqypM+depU++STT3r2Kyoq7DXXXGPz8vLs8uXLPQH/jIcfftg+/fTTtrq62gYGBtrc3FxP2pw5czxBvqG81tYE+YkTJzZ4/Q0Fed2TFxGRy7LOrGuScgbZQY3Kd8MNN7B48WKgpvt+/PjxzJgxg8OHD9OlS5fz5ouMjPS8Dg4OrtP93qFDBwIDAz37hYWF3HLLLZ79Nm3a4HQ6KSgoIC8vj02bNuF0OoGaxnN1dTUTJkyguLiY06dPExMT48kbGxvLhg0bABrMe4bL5WrU5wIaeCciIpepscG5OSQkJDBx4kTS09NxuVzs27evUeV8f/R7dHQ0eXl5nv1vvvmGkpISOnXqhMvlYtCgQbz77rvnlON2uwkMDCQ/P5+EhAQADh065ElvKO/56nIpNPBORER81t69e3nuuecoKCgAID8/n8zMTG677Tb+67/+iwULFrB161YA9u/fT35+fqPOM3bsWJYsWcKOHTuorKxkzpw59O3bl86dO5OcnExubi5Lly7l9OnTnDp1is2bN7N3714cDgejRo1i3rx5nDx5kl27dpGRkeEpt6G8TUFBXkREfFZISAiffPIJffr0ISQkhH79+tGzZ08WLFhAamoqv/rVrxg3bhyhoaH85Cc/obS0FLj01nFSUhLPPPMMo0aNolOnThw8eJBly5YB0LZtW9asWcOyZcuIjo4mOjqaWbNmUVlZCcALL7xAeXm5Z6T+mdH6F5P3cpmae/YiIiL1M8ZYxYqWyxiDtbbeXy1qyYuIiPgpBXkRERE/pSAvIiLipxTkRURE/JSCvIiIiJ9SkBcREfFTCvIiIiJ+StPaiohIg1q3bv2lMSbywkeKN7Ru3frL86VpMhwRERE/pe56ERERP6UgLyIi4qcU5EVERPyUgryIiIifUpAXERHxU/8fN1nSUCMvK6wAAAAASUVORK5CYII=" }, "metadata": {} } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 49, "source": [ "import lemurs\n", "\n", "dir(lemurs)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['__builtins__',\n", " '__cached__',\n", " '__doc__',\n", " '__file__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " 'do_all_analysis',\n", " 'extract_data',\n", " 'get_data_files',\n", " 'os',\n", " 'pd',\n", " 'plot_RT_dist',\n", " 'plt']" ] }, "metadata": {}, "execution_count": 49 } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 50, "source": [ "lemurs.get_data_files(pathparts)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['data/primates/Black.csv',\n", " 'data/primates/Catta.csv',\n", " 'data/primates/Macaque.csv',\n", " 'data/primates/Mongoose.csv',\n", " 'data/primates/trained_Macaque.csv']" ] }, "metadata": {}, "execution_count": 50 } ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": null, "source": [], "outputs": [], "metadata": { "collapsed": false } } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }