Skip to content

Instantly share code, notes, and snippets.

@fayeip
Created September 10, 2014 15:38
Show Gist options
  • Save fayeip/55f84abf59df727b03ae to your computer and use it in GitHub Desktop.
Save fayeip/55f84abf59df727b03ae to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"worksheets": [
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "#Introduction\n\n(Be sure to start this notebook with the command \"ipython notebook --pylab inline\".)\n\nSection 1.1 of the NLTK book describes some pre-loaded books and pre-defined functions that come with them. Section 1.2 reviews fundamental concepts abßout python lists and strings -- if you need to brush up on these concepts, then study this subsection carefully. Be sure you know the difference between a *set* and a *list* and that you can work easily with python slices.\n\nThe part that I am most interested in having you focus on is Section 1.3, which introduces NLTK's frequency distribution data structure. You need to have the books loaded and accessible from section 1.1 for this part to work.\n\n##NLTK's Frequency Distribution Object\n\nThis data structure makes it easy to tally up frequencies across words and other items, and incorporate them into list comprehensions (and later we'll see the conditional frequency distribution as well).\n\nThe code below counts up all of the words in *Monty Python and the Holy Grail* (text6 in the nltk.book collection) and the final line shows the top 50 most frequent."
},
{
"metadata": {},
"cell_type": "code",
"input": "import nltk\nimport string\nfrom nltk.book import * # loads in pre-defined texts\nmp_freqdist = FreqDist(text6) # compute the frequency distribution\nmp_freqdist.items()[:50] # show the top 50 (word, frequency) pairs",
"prompt_number": 12,
"outputs": [
{
"text": "[(':', 1197),\n ('.', 816),\n ('!', 801),\n (',', 731),\n (\"'\", 421),\n ('[', 319),\n (']', 312),\n ('the', 299),\n ('I', 255),\n ('ARTHUR', 225),\n ('?', 207),\n ('you', 204),\n ('a', 188),\n ('of', 158),\n ('--', 148),\n ('to', 144),\n ('s', 141),\n ('and', 135),\n ('#', 127),\n ('...', 118),\n ('Oh', 110),\n ('it', 107),\n ('is', 106),\n ('-', 88),\n ('in', 86),\n ('that', 84),\n ('t', 77),\n ('1', 76),\n ('LAUNCELOT', 76),\n ('No', 76),\n ('your', 75),\n ('not', 70),\n ('GALAHAD', 69),\n ('KNIGHT', 68),\n ('What', 65),\n ('FATHER', 63),\n ('we', 62),\n ('BEDEVERE', 61),\n ('You', 61),\n ('We', 60),\n ('this', 59),\n ('no', 55),\n ('HEAD', 54),\n ('Well', 54),\n ('GUARD', 53),\n ('have', 53),\n ('Sir', 52),\n ('are', 52),\n ('A', 50),\n ('And', 50)]",
"output_type": "pyout",
"metadata": {},
"prompt_number": 12
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 1** Wow, those are some weird results. It might make some sense to look at the actual text itself. In the line below, write a line of code that pulls out the first 500 words of the text and shows them to you (hint: the text object is simply a list of strings)."
},
{
"metadata": {},
"cell_type": "code",
"input": "first500all = \" \".join(text6[0:500])",
"prompt_number": 10,
"outputs": [
{
"text": "\"SCENE 1 : [ wind ] [ clop clop clop ] KING ARTHUR : Whoa there ! [ clop clop clop ] SOLDIER # 1 : Halt ! Who goes there ? ARTHUR : It is I , Arthur , son of Uther Pendragon , from the castle of Camelot . King of the Britons , defeator of the Saxons , sovereign of all England ! SOLDIER # 1 : Pull the other one ! ARTHUR : I am , ... and this is my trusty servant Patsy . We have ridden the length and breadth of the land in search of knights who will join me in my court at Camelot . I must speak with your lord and master . SOLDIER # 1 : What ? Ridden on a horse ? ARTHUR : Yes ! SOLDIER # 1 : You ' re using coconuts ! ARTHUR : What ? SOLDIER # 1 : You ' ve got two empty halves of coconut and you ' re bangin ' ' em together . ARTHUR : So ? We have ridden since the snows of winter covered this land , through the kingdom of Mercea , through -- SOLDIER # 1 : Where ' d you get the coconuts ? ARTHUR : We found them . SOLDIER # 1 : Found them ? In Mercea ? The coconut ' s tropical ! ARTHUR : What do you mean ? SOLDIER # 1 : Well , this is a temperate zone . ARTHUR : The swallow may fly south with the sun or the house martin or the plover may seek warmer climes in winter , yet these are not strangers to our land ? SOLDIER # 1 : Are you suggesting coconuts migrate ? ARTHUR : Not at all . They could be carried . SOLDIER # 1 : What ? A swallow carrying a coconut ? ARTHUR : It could grip it by the husk ! SOLDIER # 1 : It ' s not a question of where he grips it ! It ' s a simple question of weight ratios ! A five ounce bird could not carry a one pound coconut . ARTHUR : Well , it doesn ' t matter . Will you go and tell your master that Arthur from the Court of Camelot is here . SOLDIER # 1 : Listen . In order to maintain air - speed velocity , a swallow needs to beat its wings forty - three times every second , right ? ARTHUR : Please ! SOLDIER # 1 : Am I right ? ARTHUR : I ' m not interested ! SOLDIER # 2 : It could be carried by an African swallow ! SOLDIER # 1 : Oh , yeah , an African swallow maybe , but not a European swallow . That ' s my point . SOLDIER # 2 : Oh , yeah , I agree with that . ARTHUR : Will you ask your\"",
"output_type": "pyout",
"metadata": {},
"prompt_number": 10
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 2** Now that you've looked at the text, what are two reasons for these strange results?\n* Answer 1: Each punctuation item is counted as a word (i.e. item in the list of strings)\n* Answer 2: The text is a play, so character names appear a lot and appear in all caps\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 3** Address one of the problems by modifying the text of Monty Python and rerunning the frequency distribution calculation. In the box below write your code to modify the text:"
},
{
"metadata": {},
"cell_type": "code",
"input": "first500_nopunt = [text6[i] for i in range(len(text6)) if text6[i] not in string.punctuation]\n\" \".join(first500_nopunt[:500])\n",
"prompt_number": 29,
"outputs": [
{
"text": "'SCENE 1 wind clop clop clop KING ARTHUR Whoa there clop clop clop SOLDIER 1 Halt Who goes there ARTHUR It is I Arthur son of Uther Pendragon from the castle of Camelot King of the Britons defeator of the Saxons sovereign of all England SOLDIER 1 Pull the other one ARTHUR I am ... and this is my trusty servant Patsy We have ridden the length and breadth of the land in search of knights who will join me in my court at Camelot I must speak with your lord and master SOLDIER 1 What Ridden on a horse ARTHUR Yes SOLDIER 1 You re using coconuts ARTHUR What SOLDIER 1 You ve got two empty halves of coconut and you re bangin em together ARTHUR So We have ridden since the snows of winter covered this land through the kingdom of Mercea through -- SOLDIER 1 Where d you get the coconuts ARTHUR We found them SOLDIER 1 Found them In Mercea The coconut s tropical ARTHUR What do you mean SOLDIER 1 Well this is a temperate zone ARTHUR The swallow may fly south with the sun or the house martin or the plover may seek warmer climes in winter yet these are not strangers to our land SOLDIER 1 Are you suggesting coconuts migrate ARTHUR Not at all They could be carried SOLDIER 1 What A swallow carrying a coconut ARTHUR It could grip it by the husk SOLDIER 1 It s not a question of where he grips it It s a simple question of weight ratios A five ounce bird could not carry a one pound coconut ARTHUR Well it doesn t matter Will you go and tell your master that Arthur from the Court of Camelot is here SOLDIER 1 Listen In order to maintain air speed velocity a swallow needs to beat its wings forty three times every second right ARTHUR Please SOLDIER 1 Am I right ARTHUR I m not interested SOLDIER 2 It could be carried by an African swallow SOLDIER 1 Oh yeah an African swallow maybe but not a European swallow That s my point SOLDIER 2 Oh yeah I agree with that ARTHUR Will you ask your master if he wants to join my court at Camelot ?! SOLDIER 1 But then of course a -- African swallows are non migratory SOLDIER 2 Oh yeah ... SOLDIER 1 So they couldn t bring a coconut back anyway ... clop clop clop SOLDIER 2 Wait a minute Supposing two swallows carried it together SOLDIER 1 No they d have to have it on a line SOLDIER 2 Well simple They d just use a strand of creeper SOLDIER 1 What held under the dorsal guiding feathers SOLDIER 2 Well why not SCENE 2 thud clang CART MASTER Bring out your dead clang Bring out your dead clang Bring out your dead clang Bring out your dead clang Bring out your dead cough cough ...] clang [... cough cough'",
"output_type": "pyout",
"metadata": {},
"prompt_number": 29
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 4** In the box below, show the output after applying this version of the text to a FreqDist."
},
{
"metadata": {},
"cell_type": "code",
"input": "mp_freqdist2 = FreqDist(first500_nopunt)\nmp_freqdist2.items()[:50]",
"prompt_number": 30,
"outputs": [
{
"text": "[('the', 299),\n ('I', 255),\n ('ARTHUR', 225),\n ('you', 204),\n ('a', 188),\n ('of', 158),\n ('--', 148),\n ('to', 144),\n ('s', 141),\n ('and', 135),\n ('...', 118),\n ('Oh', 110),\n ('it', 107),\n ('is', 106),\n ('in', 86),\n ('that', 84),\n ('t', 77),\n ('1', 76),\n ('LAUNCELOT', 76),\n ('No', 76),\n ('your', 75),\n ('not', 70),\n ('GALAHAD', 69),\n ('KNIGHT', 68),\n ('What', 65),\n ('FATHER', 63),\n ('we', 62),\n ('BEDEVERE', 61),\n ('You', 61),\n ('We', 60),\n ('this', 59),\n ('no', 55),\n ('HEAD', 54),\n ('Well', 54),\n ('GUARD', 53),\n ('have', 53),\n ('Sir', 52),\n ('are', 52),\n ('A', 50),\n ('And', 50),\n ('Ni', 47),\n ('VILLAGER', 47),\n ('on', 47),\n ('He', 46),\n ('me', 46),\n ('boom', 45),\n ('be', 43),\n ('he', 43),\n ('2', 42),\n ('Yes', 42)]",
"output_type": "pyout",
"metadata": {},
"prompt_number": 30
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 5** How if at all has the output changed?\n*Answer: The punctuation marks are not counted as words (but for now only the single punctuation marks)"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 6** Following the example from the book, show a cumulative frequency plot for the words in Monty Python as newly computed, in the box below."
},
{
"metadata": {},
"cell_type": "code",
"input": "mp_freqdist2.plot(50, cumulative=True)",
"prompt_number": 31,
"outputs": [
{
"png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAFACAYAAACm+Ov/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXeYFFX2v98BJEhwxIAouvgzoyAICq6g6K6KCXFN6Jp1\nDaiImEDXBVfXgLuG1RUDKJizfhdFRYUxAxIGUEQFAQXTiowy4EiY+v3xqbJreqp6ema6q6unz/s8\n/XRXOud2dfU9955z7r1gGIZhGIZhGIZhGIZhGIZhGIZhGIZhGIZhGIZhGIZhGAVJY2A2MMHdHgks\nc/fNBg7znTsc+BxYABzi298dmOceuzO7xTUMwzCiYijwGPBfd3uEuy+ZTkApsBHQEVgIFLnHpgP7\nuJ8nAv2yVFbDMAzDpVGW5XcADgfGkKjsi3yf/RwNPAGsA5YgA9ETaA+0RkYC4GFgQNZKbBiGYQDZ\nNxC3A1cAlb59DnAxMAcYCxS7+7dGriePZcA2AfuXu/sNwzCMLJJNA3Ek8D2KM/h7DKOB7YGuwDfA\nv7JYBsMwDKOONMmi7N8D/ZGLqTnQBrmHTvOdM4ZE8Ho5sK3vWAfUc1jufvbvXx6kcIcddnAWLVqU\nibIbhmEUCnNQgz1nHEDCELT37b8UeNz97AWpm6IexiISPY9pKB5RROogtRPEiBEjAvfX9VihyYtS\nV9zlRamr0ORFqSvu8jKpq7zccZ5/3nHOPTf4OuT2DySbPQg/Rb5CjAL2dLcXA+e5++cDT7vv64FB\nvmsGAeOAFshAvFob5RUVFRk9VmjyotQVd3lR6io0eVHqiru8+ur6/nt46SV48UV4/XWoqIA+fcKv\nCyMqA1HivgBOTXHeje4rmZlA58wWyTAMo+GwcCF8/DH06QPvvQeOr1/QqxdstlntZTbOXPFiwciR\nI0dW29mkSRM6duwYeEFdjhWavCh1xV1elLoKTV6UuuIuLx1djgMzZsDo0TB4MFx7LXz2WRO+/LIj\nTZvCIYfA5ZfD/ffDkCGw1VbB8q677jqA64LKEDQeIZ9xXWqGYRgNj7Vr4a235Dr6v/+D5b50nU02\ngcMPhwEDoF8/aNMmPZlFRUUQYguyPQ4iFpSVlWX0WKHJi1JX3OVFqavQ5EWpK+7y/MdWr4bnn4dT\nToEtt4QrryzjnntkHLbZBgYNgtdeU9zhnnvKOOGEYOOQSlcYUcUgDMMwjDRZuRImTYInn1Tl/8sv\niWPbbw9HHglHHw3du0ORr+2/Zk1my2EuJsMwjBjwzTdyHb3wAkyZAuvXJ4716gXHHKPXTjtlVm8q\nF5P1IAzDMHLEokUyCM8/D1OnJjKPGjeGP/xBBmHAALmScoHFIGLgb4y7vCh1xV1elLoKTV6UunIp\n79NP4YYboGtXOO64Mq64Aj74AJo2hf79Ydw4+O47ePbZMi68sLpxyMZ9D8N6EIZhGFnm00/hmWf0\nmjs3sf/3v4eTToI//UmZR61aJY7VoT7POBaDMAzDyAILF8JTT8HTT1c1CptsogDzCSfAH/8IzZrl\nroxgMQjDMIxIWLJEBuGpp2DWrMT+uBmFdLEYRJ75L3MhL0pdcZcXpa5CkxelrkzKW74cxowpo1cv\npaBedZWMQ+vWcOqpMHFiGd99B+PHwxFHVDUOuS57TVgPwjAMo5YoiKyewrvvwp57QmkpbLwxHHUU\nnHgiHHYYNG+uWEK+9BiSsRiEYRhGGvz4o9JRn3xS4xQq3XUymzXTFBcDB6qH0LJlbstZWywGYRiG\nUQfKyzXn0RNPaESzN3hto43UQxg4UKmp6c57lG9YDCIGPsC4y4tSV9zlRamr0ORFqSvVNd9/X8aL\nL8pNtOWWmgPp5Zc1iO3ss8sYO1Yuppde0rE2bfL7XqTCehCGYRQ869fLbfTEE/DZZ1pPwWO//TRW\n4fjjNZituDh35YyaKGIQjYEZaH3po4C2wFPA74AlwAmAZ9qGA2cBG4DBwCR3f3e0olxztKLcJSG6\nLAZhGEZaOI5GMD/xhFJTv/8+caxrVxmFE0+E3/0ud2WMglQxiCgMxFBUwbcG+qMlR39w368CNgWG\noTWpHwf2BrYB3gB2QsuOTgcuct8nAv8meNlRMxCGYYTiODBvnozCE0/A0qWJYzvtJKMwcCDstlvu\nyhg1uVwPogNwODDGV4D+wHj383hggPv5aOAJYB3qWSwEegLtkXGZ7p73sO+atIi7DzDu8qLUFXd5\nUeoqNHnZ1LVokeY/2mMPpaS++moZS5dqnqOhQ7Uy26efwnXXQfv2Dfte1IZsxyBuB64A/DH+dsB3\n7ufv3G2ArYGpvvOWoZ7EOvezx3J3v2EYRihffw0TJ8IDD8D06Yn9bdtqrMIdd2j95kYFkapTN7Lp\nYjoSOAy4EOgLXIZiECuRW8njRxSXuAsZiMfc/WOAV1Bv4mbgYHd/H+BKV1Yy5mIyjAJmzRqtqTB+\nPLzxRmKsQsuWmjb75JPh4IOVpmqIXI2D+D1yJx2OgsttgEdQr2Er4FvkPvJCQ8uBbX3Xd0A9h+Xu\nZ/9+30qsVRk2bBjNmzcHoEePHvTu3ZtiN+3A62LZtm3bdsPZbtOmmHffhddeK2PKFPjgAx3v0UPT\nX/TpU8yRR8LatTp/o43iVf6ot0tLSykpKaGiooK4cAAwwf3sBadBwemb3c+dgFKgKbA9sIiEVZuG\n4hFFKEjdL0SPE8TKlSsD99f1WKHJi1JX3OVFqavQ5NVW18KFjjNihOP067fSUfhZr549Hec//3Gc\nFSsK517U5xhKBAokynEQXiFuBp4GziaR5gow390/H1gPDPJdMwilubZABiIog8kwjAbOTz9pTYXx\n4zUHEigltUMHTYx32mmw666J8+sQlzV82FxMhmHEmg0b4PXXZRRefBE8z8jGG8Oxx8Lpp0Pfvlqm\n06g9NheTYRh5x6JF8OCDMgzLfVHHAw9UT+HYYzWltpE9CiLBK+55yHGXF6WuuMuLUlehyQP49tsy\nHnlEPYIdd4Qbb5RxOOKIMq6/XgvyTJ4MZ5yRMA5xKHs+P2epsB6EYRg5xXE0UG3sWI1yfv997W/R\nQvMfnX02dO4Mm26aWo6ReSwGYRhGTvjhB3jssYRh8NhnHxmFgQMb7jTaccJiEIZhxIINGzSAbexY\nrbOwdq32b765ps4++2xNh2HEA4tBxMAHGHd5UeqKu7wodTUkeUuXwsiRWrN52LAynnlGU2wfdpiW\n7ly+HG6/HTp0iF/ZcyEval1hWA/CMIyssHYtTJgAY8ZoNTbP+7vHHnDccUpP7dAhtQwjt1gMwjCM\njPLZZzIK48cn1lho2lRpqeecowwlmyAvPlgMwjCMrPLLL3IVjRkDb7+d2L/77vCXvyi+sNlmuSuf\nUTcKwo7H3QcYd3lR6oq7vCh15YO8OXPgoougfXsNXnv7bY1wHj68jA8+UHbSJZdUNQ5xKXuc5UWt\nKwzrQRiGUStWrYInn4Q334Snnkrs33tvuZAGDtQ024W0dnNDxWIQhmGkxaxZcP/9GrtQXq59xcVy\nH51zjlZqM/IPi0EYhlEnysu1dvP992u0s0fv3nDuucpGatEid+UzsovFIGLgA4y7vCh1xV1elLpy\nKW/WLDj/fMUW7rmnjBkzNNXFkCHw8cfwzjtw1FFlocahId2LXMiLWlcY1oMwDANIxBaSewudO8Nl\nlylN1XoLhYXFIAyjwJk9G+67r3ps4fTT5Ubq1Cm35TOyS6oYRDZdTM3RUqGlaJW4m9z9I9Fa07Pd\n12G+a4YDnwMLgEN8+7sD89xjd2axzIZREKxZAw89BD17wl57yUCUlyu28PDD8PXXcMcdZhwKnWwa\niArgQKAr0MX93BstI3ob0M19veKe3wk40X3vB9xDwqqNRkuU7uS+wtakDiTuPsC4y4tSV9zlRakr\nG/I++URxhG22gbPOgunT1Vu4/vqy32ILp55a1ZVk9zZ6eVHrCiPbMYg17ntToDGw0t0O6s4cDTwB\nrENrVS8EegJLgdbAdPe8h4EB2LrUhpEW69dr5tSXXoJx4xL7e/ZUIPqEEzRvko1bMJLJdgyiETAL\n2AH1Aq4ERgBnAj8BM4DLgDLgLmAq8Jh77RjUu1gC3Awc7O7v48o5KkCfxSAMw6WsTNNq33WXZlMF\naNkS/vxnGYZu3XJbPiMe5HIcRCVyMW0CvAb0RYbi7+7x64F/IfeRYRgZ4LPP4N//Vm9h9Wrt23FH\nGDxYgWdbhMdIl6jSXH8CXgZ6ACW+/WOACe7n5cC2vmMdUDB7ufvZv9+3hHlVhg0bRvPmzQHo0aMH\nvXv3BqC4uPg3H1yx25cuKyujvLycDu6cw8nHly1bRqtWraqc71FI8vyyCl1eqvubS3mOA1OmaJ2F\nqVOhtLSYrl3L6N4dBgwo5vDD4euvl1FZ2QqI5/dN9XsVmrxU97e+8kpLSykpKaGiooJcsjnekwgt\ngLeBPwBb+c65FHjc/dwJZTw1BbYHFpHo9kxD8YgiYCLhQWoniJUrVwbur+uxQpMXpa64y4tSVzrX\nVFQ4zrhxjtOli+NoxQXH2Xvvlc455zjO3Lm5L19cdcVdXpS6UOJQINmMQXQGxqM4RCPgEeBWFGTu\n6hZqMXAe8J17zdXAWcB64BLklgKluY5DhmYiMDhEp/t9DaNh88MPcO+98J//wLffal+7dppZ9bzz\nYIstcls+I39IFYOwgXKGkUd8+qmW5hw/HjwPQZcucOmlcNJJ0KxZbstn5B+5GigXG+Kehxx3eVHq\niru8KHV5+x1H4xOOPhp23VWD2nbdtYzDD4c33oDSUjjjjIRxsHub//Ki1hWGzcVkGDFlwwZ4+mn4\n1780oA1kBE49FS68ELp2zW35jIaPuZgMI2aUl8ODD8qVtGSJ9m22GQwaJMPQrl1Oi2c0MGw9CMPI\nA77+WoPa7r1Xg9xA4xeGDtX4hY03zm35jMLDYhAx8AHGXV6UuuIuLxu6Zs0q44wzoGNHuPlmGYf9\n9oP//reMBQvggguqG4c43It8uLf5Ki9qXWFYD8IwcoDjwOTJcOut8N13CjQ3aqQV2i67DHr1kqFo\n3DjXJTUKGYtBGEaErF8Pzz4Lo0ZpHQZQ7+CsszTL6g475LZ8RuFhMQjDyDGrVyvwfNtticDzlltq\nfqTzz1cQ2jDihsUgYuADjLu8KHXFXV5tdf3vfzBiBBx2WBmDB8s47LSTxjIsXQrXXAONG+fnvcj1\nvW3I8qLWFYb1IAwjCyxZovELY8fCL79ozELPnnDVVdC/v8UWjPzAYhCGkUHmzlV84cknNdAN4Igj\n4MoroU8fKGpo/zgj76lvDKIV8AuwAdjFfb2CVn4zDAN491246SaYOFHbjRvDKafIMHTunNuyGUZd\nSScG8TbQDNgGza56KppZNW+Iuw8w7vKi1BV3ef5jjgOTJsEBB6h38PXXZbRoARdfDAsXwiOPJIxD\nHMoed3lR6oq7vKh1hZFOD6IIrS19NnAPMAqYU2tNhtFAqKzUGs833AAzZmhfcbHmSDrtNNh889yW\nzzAyRToe0dnAIOB2ZCQ+Buah9R7ihsUgjKzhTZ53443w0Ufat8UWmgpj0CBbytPIT+obgxgCDAde\nQMZhB2BKpgpnGHFnwwZ46in4+9+1HgNAhw5wxRVwzjk2R5LRcEknBtEO6A/c4m4vAt5N47rmaKnQ\nUmA+cJO7vy3wOvAZMInEsqQgQ/Q5sAA4xLe/O+q1fA7cmYbuKsTdBxh3eVHqipO8ykplI3XuDH/+\ns4zD9tvDo4+WsXChBrn5jUOcyp6P8qLUFXd5UesKIx0DMTzNfclUAAei5UW7uJ97A8OQgdgZeNPd\nBq1JfaL73g/FO7xuz2jk3trJfYWtSW0Y9aayEqZMkWE46ST45BNNpDdmjIzEEUfYym1GYZAqBnEY\ncDiqtJ/0ndsaVeL71ELPxsBbwBnAc8ABaB3qrYASYFdkdCpJ9FReBUYCS4HJwG7u/oFAX+D8AD0W\ngzDqjOPACy9o5LMXY9huO/jrXzXddtOmuS2fYWSDusYgvgZmAke7756An4FL09TdCJiF4hajUQyj\nHTIOuO/e8idbA1N91y5DqbXr3M8ey939hpERHAdefhn+9rfEBHrbbqtpMM480wyDUbikMhBz3Ndj\n1H1QXCVyMW2CxlAcmHTccV8ZY9iwYTRv3hyAHj160Lt3bwCKi4t/88EVFyvsUVZWRnl5OR06dPht\n23982bJltGrVqsr5HoUkzy+rIcn76qtlLFjQimuvLWbaNOjatYyDDoI//amY448vo2lTWLMGmjZN\n7/7WpXwmL73fq9Dkpbq/9ZVXWlpKSUkJFRUVZILeKGbwObDYfX1RBznXApejAPRW7r727jYoFjHM\nd/6rQE/33E98+08C7g3R4QSxcuXKwP11PVZo8qLUFZW8KVMc59RTVzrqPzjOlls6zu23O86aNZnX\nZfLipyvu8qLURYpGejrjID5Fqa6z0HQbHj/UcN3mwHqgDGiBehDXAYcCK1CsYRjKYhqG4hqPo9jG\nNsAbwI5u4acBg4HpwMvAv5EBScb9voYRzLRpiim88Ya2N9tM02FceCG0bJnbshlGLqjvOIgyNPdS\nbWkPjEdxiEbAIyhraTbwNMpKWgKc4J4/390/HxmWQSQs2yA0vUcLYCLBxsEwQpkzB669FiZM0PYm\nm2jltiFDoHXr3JbNMPKZm4FbgX2BvXyvOBJJl6zQ5EWpK9Py5sxZ6ZxwgvObK2njjR1n+HDHWbEi\n/mUvNHlR6oq7vCh1kcLFlE4PopcroEfS/uSAs2HEhm++UbrqjBnKTGrWDC64AIYP10puAHUYN2QY\nBUVDm53eNYhGobJ6tRbqGTVKnxs3hrPPVtxh221zXTrDiB/1jUGMQD2IIqp2Rf5e75IZRobYsAHG\nj5ch+OYb7RswAG6+GXbZJbdlM4x8JZ2pNla7r3I0ruFwoGMWy5Rx4j4XStzlRamrLte8/jqccEIZ\nZ58t49CjB7z1lkZFt2tXWPcin+VFqSvu8qLWFUY6PYh/Jm3fiibZM4ycMn8+XH45vPKK1nzebjut\n6jZwIDRKp+ljGEZK6hKDaIvGI+yY4bJkAotBFAD/+58C0PffL9dSmzZw9dVwySXgDqI3DCNN6huD\nmOf73AjYEos/GDmgogL+/W/4xz/g55/VS7jgAhg5MpGZZBhG5kinI36U+zoSrdGwNXBXNguVaeLu\nA4y7vCh1Be13HHjmGTjmmDKuukrG4bDDYO5cuOceGYdCuRcNWV6UuuIuL2pdYaRjIJag6TD6A8eg\nKTEMIxKmTYPeveGEE+Dbb2H33eHVV2HiRH02DCN7pBODuAT4C/C8e/4A4AE0H1LcsBhEA+HLLzWo\n7fHHtb3FFlry85xzoEk6jlHDMNIiVQwiHQMxD42mXu1ut0TrNnTOROEyjBmIPGfVKo1duO02xRya\nNYNLL5WxaNMm16UzjIZHKgORbjJgZcjnvCDuPsC4y4tC14YN8MADcPTRZdx4o4zDwIGwYIFSV9u0\nKZx7UajyotQVd3lR6wojnc76Q2i6bb+L6cFaazKMEN54A4YOhXnzNJ6hZ0+4/XbYd99cl8wwCpt0\nx0F0RwsHOcA7aMruOGIupjzik0/giiu03CfA736XGOhW1NBmCTOMmFLXGMQ+aNGfiUn7D0drSc/M\nROEyjBmIPOCHHzR24d575Vpq3VrrP9tAN8OInrrGIG5Bi/ckM5/q02+EsS0wBfgY+AitCgcwEliG\neiKzgcN81wxHy5suQOMuPLqjgPnnwJ1p6gfi7wOMu7xM6Vq7VsHnHXeE994rw3Hg/PNh4UK46ioZ\nh0K5FyYvt7riLi9qXWGkikG0RmMgklmCehbpsA64FCgFWqFex+vIVXWb+/LTCTjRffeWHd3JPX80\nWoVuOurV9MNWlssLHEcruV12mYwBaEK9Rx6BPfbIbdkMwwgnlYtpIeHzLaU6looXgbuB/dDssP9K\nOj4cZUnd4m6/inobS4HJwG7u/oFAX+D8pOvNxRQz5s5VAPrNN7W9667qRRx2WOrrDMOIhrq6mN4E\n/pF0YSPgelRZ15aOQDc0hgLgYmAOMBaN1AZN47HMd80y1JNI3r/c3W/ElO+/l/uoWzcZh0031TxK\nc+eacTCMfCGVgbgM2AFYhFJcn0f+/53dY7WhFfAsGpVdjtxF2wNdgW+o3pPIKHH3AcZdXm10VVYq\n+LzzzjBtWhlFRTB4sFxLF18MG20Ubdnz2TdcaPKi1BV3eVHrCiNVDKIcuXJ2AHZHcYD5yGDUho2A\n54BHkYsJ4Hvf8THABPfzchTY9uiAeg7L3c/+/cuDlA0bNozmbipMjx496N2792/HvBtUXFz823Z5\neXmVbf/x8vLyauf7KRR5qbb98mbOLOO22+Dxx7V95JHljBsHe+5ZN3mZLl8m5KW6vyavfvJq+r0K\nTV62/t+lpaWUlJRQUVFBTWQ727wIGA+sQMFqj/ao54C7f2/gZBScfhyl2HpB6h2RcZqGsqCmAy+j\nuaCSg9QWg8gBq1fDddcptrBhA7RvL3fSscfaeAbDiDv1XQ+iPuwHnALMJTG47mrgJORecoDFwHnu\nsfnA0+77emAQiXWwBwHjgBYoi8kymGLASy/BRRfB0qUyBhddBDfcAJtskuuSGYZhVMUJYuXKlYH7\n63qs0OQFHfv6a8c57jjH6dp1pQOO062b40yfXn9d+XgvTF7+6Yq7vCh1kWiEVyPdyfr6AGe6n7dA\nAWajAKms1FKfu+0Gzz6rwW233w7Tp8Pee+e6dIZhZJJ0PMQj0SjmXVAG0zbIDbRf9opVZ1yDaGSD\nTz+Fc8+Ft9/W9hFHaEW37bbLbbkMw6g79Z3u+xjgaBLrQSxHo6yNAmHtWsUVunSRcdhyS3jySY2O\nNuNgGA2XdAzEr1RdA6JllsqSNeKehxxneXPnQvfu8NxzZaxdC2edpVlYTzxRQek4lz0b8qLUVWjy\notQVd3lR6wojHQPxDHAfGu18LhphPabWmoy847HHoFcv+Ogj2HprjYgeOxbats11yQzDiIJ0s9QP\nITGz6mtowr04YjGIDLB2LVx+Odx1l7ZPP12xho03zm25DMPIPPVdk/oy4ElCRi7HDDMQ9eSbb+D4\n4+G99zQtxr//DeedZwPeDKOhUt8gdWtgEvAucBHQLmMli4i4+wDjIu+dd8rYay8Zh222UUD6/PNT\nxxriUvaG6BsuNHlR6oq7vKh1hZGOgRiJ5mK6EE2R8TaKQxgNBMeRO+nSS+Hbb+GAA2DmTMUfDMMo\nXGrjOGgPHIemyWgFdMlKieqHuZhqyZo16iU88oi2hw6FW26BJtmehMUwjFhQ3xjEIOAEYEuU0fQU\nwUuRxgEzELVgyRI45hgoLVUA+sEHlb5qGEbhUN8YxHbAEDTT6gjiaxxCibsPMBfyXn9d4xtKS2GH\nHWDaNDj00Pwoey7lRamr0ORFqSvu8qLWFUYqA9HGfb8V+BJom/Qy8hDHkQupXz/48Uc4/HCYMcPW\nhjYMozqpXEwvA0cASwie7S+OE/aZiykFq1ZpJPSzz2r7b3+DESOgUbpTNhqG0eCobwwinzADEcKi\nRXD00fDxx9CmjYLS/fvnulSGYeSa+sYgglJa8yrNNe4+wGzLe+MNTcX98cfQv38Z06cHG4c4lj1u\n8qLUVWjyotQVd3lR6wojlYFoAWyG1n/wxx46oim/02FbYArwMfARWjIUV87rwGdoEF6x75rhwOfA\nAhLTe4CmHJ/nHrszTf0FjePAHXfAoYfCypVw1FGaMmOXXXJdMsMw8oFULqYhwCXA1sDXvv2rgPuB\nu9OQv5X7KkVjJ2YCA9DiQz8Ao4CrgE2BYSTWpN6bxJrUO6EYyHQ0kns6WnLU1qROQUUFXHABjBun\n7auvhuuvt3iDYRhVqW8MYjCqjDPBi8iw3A0cAHyHDEgJsCvqPVQCt7jnv4pGci8FJgO7ufsHAn2B\n85Pkm4FA8ykdc4xSV1u0gIcesvENhmEEU98YxL+BPdBgudN8r9rSEegGTEPzOX3n7v+OxPxOWwPL\nfNcsQz2J5P3LSd/NFXsfYCblzZgBp55axrRpWszn/ferGoc4lz0f5EWpq9DkRakr7vKi1hVGunMx\n3YVa/Qcit1Bt819aAc8hl9WqpGMpF8020mfCBM2jtGIF9OkDH34IXbvmulSGYeQr6cy4cxywJzAL\nxQ7aAY/VQsdGyDg8glxMkHAtfYvmePre3b8cBbY9OqCew3L3s39/4PTjw4YNo3nz5gD06NGD3r17\nU1ysGLhnQZO3PZKPe/tquj4O8kaPhgceKGPnnaFLl2IeeADWrCmjrCwz5SsuLs7o981neWHbJq9+\n8lL9XoUmz78v0/JKS0spKSmhoqKCmkgnBvEhChrPBA4CfkYZRunkwhQB44EVwKW+/aPcfbeg4HQx\nVYPU+5AIUu+IehjTUDxkOhrEZ0FqoLIShg+HUaO0PWKEXrZ+g2EY6VDfGMSHKMvoAWAGMBt4P03d\n+wGnINfUbPfVD7gZOBiluR7kboPmeXrafX8FTRTo1fiD0FKnnwMLqW4cQom7D7Cu8r7/voyTT5Zx\naNJEk+2NHAk//ZTZ8qU6VmjyotRVaPKi1BV3eVHrCiMdF9Mg9/1etNxoG2BOmvLfJdwI/TFk/43u\nK5mZQOc09TZ4fvxRy4I+9RS0bq3pMw45pObrDMMw0iWVI6I7qYPHszJclkxQEC6mZcvgj3+ETz/V\nym8vvwx77pnrUhmGkY/UdRxECakNxIF1L1LWaPAGYtkyOPBAWLgQOneGiROhQ4earzMMwwiirjGI\nvsgIhL3yhrj7ANO9xm8cunWDl14qCzQO+ewPjbu8KHUVmrwodcVdXtS6wkgnBnE6wT2Jh2utzagz\nycbhjTds2gzDMLJLOsmQd5MwEC1Q1tEsND4ibjRIF1OQcWhrSzYZhpEBMr0eRDFal/rQepQpWzQ4\nA2HGwTCMbFLfcRDJrCGeq8mFEncfYNj+Zcvg/PPLQo1DQ/SHxl1elLoKTV6UuuIuL2pdYaQTg5jg\n+9wIjXZ+utaajFrxzTdw0EHQsqX1HAzDyA3puJj6+j6vR1Nvf5WV0tSfBuFi+uEHTbo3f74m23vz\nTTMOhmEql3yIAAAgAElEQVRkh0zFINpQtcfxYz3KlC3y3kCUlannMHs2dOoEb70Fm2+e61IZhtFQ\nqW8M4jw06+o8NN3FTDQnU94Qdx+gt7+8HA4/XMZhxx3lVmrSJPfli1JX3OVFqavQ5EWpK+7yotYV\nRjoxiCvQgkE/1Fq6kTa//AL9+8MHH2ihnzffhPbt1aMwDMPIBem4mCYBxwCrs1yWTJCXLqZff9US\noa+8IqPwzjuwww65LpVhGIVAfWMQewHjgA+Ate4+B63NEDfyzkCsX68lQZ9/XrGGt95S7MEwDCMK\n6huDuB8t3DMVxR68OETeEFcfYGUlnHkmfPFFGcXF8Prr1Y1DXHyU+erLtXuRP/Ki1BV3eVHrCiOd\nGERjYGitJRspcRwYPBgefRT23RdefdXWjzYMI16k42K6EY19+C/wq29/OmmuDwJHoDWnvcV+RgLn\nAP9zt69Gq8cBDAfOAjYgF9Ykd3935OZqDkwELgnRlzcupmuugRtvhGbNFHs4MK/mxzUMo6FQ3xjE\nEoJnc01nuo0+QDma+dUzECOAVcBtSed661HvTWI96p1c3dOBi9z3iQSvRw15YiBGjYKrroLGjRV7\n6N8/1yUyDKNQqW8MoiMyBsmvdHgHWBlUpoB9RwNPAOuQUVoI9ATaA62RcQAZmwFp6gfi5QO8/34Z\nh6IiGD9exiFO5cu1rrjLi1JXocmLUlfc5UWtK4xcrQdxMXAaCnpfBpQBW6NAuMcy1JNY5372WO7u\nzzsmT4bzz9fnu++GP/85t+UxDMNIRRTrQXREE/55LqYtScQfrkc9hLOBu5CBeMw9NgbFJpYANwMH\nu/v7AFcCRwXoiq2L6eWXYcAApbXeeCMMH57rEhmGYaR2MaXTg7goabsYrQdRV773fR5DYrbY5cC2\nvmMdUM9hufvZv395mPBhw4bRvHlzAHr06EHv3r0pLi4GEl2sqLfnzSvmuONgjz3KGDgQrrwyt+Wx\nbdu27cLdLi0tpaSkhIqKCrJBU+CzWpzfEc3j5NHe9/lSFJgGBalLXfnbA4tIWLVpKB5RhILU/UJ0\nOUGsXLkycH9dj9XmmjlzHGeTTRwHHOevf13pVFbGq3xx0xV3eVHqKjR5UeqKu7wodREcQgCyvx7E\nE8ABwOZoivARaPrwrm6hFqPJAAHmu3Lno2nFB/kKPgilubZABiIogyl2LF4Mhx4KP/0Exx4LQ4Yo\nOG0YhpEP1GU9iCVUDRrHCdcg5p7vv4f99tNSoQceqLEOzZrlulSGYRhVqWsMYiegHVCStL830Ay5\ngIwAfv4ZDjsssY70iy+acTAMI/9INQ7iDuDngP0/u8fyhijzkL//voxjjoFZszQj6yuvQJs2dZcX\nlzzpfC273Yv8kRelrrjLi1pXGKkMRDtgbsD+uaQ/UK6g2LBBKayTJ8NWW8GkSdCuXa5LZRiGUTdS\nxSAWAjvW4VguyVkMwnHgwgth9Gj1GN5+G/bcMydFMQzDSJu6TrUxAzg3YP9fyLPpvqPgn/+UcWjW\nDCZMMONgGEb+k8pADAHOBN5CE+vd5n4+2z2WN2TbB/j885pfCeDJJ8vYf//6yct0+fJJV9zlRamr\n0ORFqSvu8qLWFUaqLKZvgd8DB6I1qR3gJWByrbU0YD78EE45RS6mm26Cvn1zXSLDMIzM0NCGbUUa\ng/jyS+jZE779Fs46C8aMsYFwhmHkF/VdDyKfiMxA/Pwz9O4N8+ZpINyrr0LTppGoNgzDyBj1XQ8i\n78m0z27FijJOPFHGYZdd4LnnEsYhDj7FfPaHxl1elLoKTV6UuuIuL2pdYRSEgcgkjgN33aUew+ab\naxrvTTfNdakMwzAyj7mYasndd8PFF6vHMHmy5lsyDMPIVywGkSFmz1ZQet06eOwxOPnkrKkyDMOI\nBItBZMBnt3q1DMK6dfC3v5WFGoc4+BTz2R8ad3lR6io0eVHqiru8qHWFURAGIhMMHQoLFkCnTnDB\nBbkujWEYRvYxF1MaPP+8Fvxp1gymT4cuXTKuwjAMIyfk0sX0IPAdVZccbQu8jpYtnYTWuPYYDnwO\nLAAO8e3v7sr4HLgzi+WtxrJlcM45+jxqlBkHwzAKh2wbiIeovn70MGQgdgbedLdBS5me6L73A+4h\nYdVGozmgdnJfYWtSB1JXv9yKFWWcdhqsXKkFgC6+uH7yzB+a//Ki1FVo8qLUFXd5UesKI9sG4h1g\nZdK+/sB49/N4YID7+Wi0hvU6tKzpQqAn0B5oDUx3z3vYd01WeeopmDJFazqMG2fTaBiGUVhEUeV1\nBCYAnd3tlYA3tKwI+NHdvguYCjzmHhsDvIKMxc3Awe7+PsCVwFEBujIWg5g+XWMc1q/XqnD9atVn\nMQzDyA/inObquK9YsWqVUlrXr4chQ8w4GIZRmKSa7jtbfAdshaYTbw987+5fDmzrO68DsMzd3yFp\n//Iw4cOGDaN58+YA9OjRg969ewNQXFz8mw+uuFhx8bKyMsrLy+nQocNv25JRzKJFMHjwMoYPb4UX\nR/f78Gojzzu+bNkyWrVqVeX8fJDnl1Xo8lLdX5NXP3mpfq9Ck5fq/tZXXmlpKSUlJVRUVBAHOlI1\ni2kU4C6vwzDkPgIFp0uBpmjN60Ukuj3TUDyiCJhIeJDaCWLlypWB+4OOvfGG44DjbLSR48yaFXxd\nbeSlcyzu8qLUFXd5UeoqNHlR6oq7vCh1kcKLk+0YxBPAAcDmqOfwN+D/gKeB7VB84QTAM41XA2cB\n64FLgNfc/d2BcUALZCAGh+hzv2/dKC+Hzp1hyRK4/nr461/rLMowDCMvsLmY0uSii+A//4Fu3WDa\nNNhoowyWzDAMI4bEOUgdCenkBr/1loxDkybw0EMyDvmaQ53POdlxlxelrkKTF6WuuMuLWlcYBWEg\namL1ai0ZCnDNNbDnnrktj2EYRhwwFxNKZb3zTk2j8eGHtnSoYRiFg8UgUvDuu7D//tCokQbH7bVX\nlkpmGIYRQywGEeJ7W7MGbr65DMeB4cOrG4d89V/msz807vKi1FVo8qLUFXd5UesKoyAMRBjXXgvL\nl8Puu1tKq2EYRjIF62KaORP23luupalToUePLJfMMAwjhhS8iymZykq48EJwHLjkEjMOhmEYQRSE\ngUj2vT30kAbCbb01XHZZ7n2AcZcXpa64y4tSV6HJi1JX3OVFrSuMgjAQfn78Ea5yZ4L65z9h441z\nWx7DMIy4UnAxiEGDYPRo6NsXJk+2RYAMwyhsbByEixeYbtwYSkuVvWQYhlHIFHyQuqysrFpg2jMO\ncfABxl1elLriLi9KXYUmL0pdcZcXta4wCsJAQNXA9IgRuS6NYRhG/CkIF9OPP8LOO8OKFfD443DS\nSTkomWEYRgwpeBfTNdfIOPTtCwMH5ro0hmEY+UEuDcQSYC4wG5ju7msLvA58BkzCWwxaDAc+BxYA\nh6SrZOZMmDq1jCZN4O67q2ctxcEHGHd5UeqKu7wodRWavCh1xV1e1LrCyKWBcIC+QDdgH3ffMGQg\ndgbedLdB61Wf6L73A+4hjbI7Dgx2Fyf1B6YNwzCMmsllDGIx0ANY4du3AK1h/R2wFVAC7Ip6D5XA\nLe55rwIjgalJMqvEIP77Xzj6aNhiC1i4ENq0yfyXMAzDyGfiGoNwgDeAGcBf3H3tkHHAfW/nft4a\nWOa7dhmwTSrhGzYo9gB6N+NgGIZRO5rkUPd+wDfAFsittCDpuOO+wgg8NmzYMJo3b86cOfDLLz04\n5JDebtZS8W8+uOJihTbKysooLy+nQ4cOv237jy9btoxWrVpVOd+juLhw5PllFbq8VPfX5NVPXqrf\nq9Dkpbq/9ZVXWlpKSUkJFRUV5AsjgMuQkdjK3deehNEYRiIeAXIx9QyQ4ziO4/z6q+N07Og44DgP\nPeQ4K1eudMKoy7FCkxelrrjLi1JXocmLUlfc5UWpixQN8VzFIDYGGgOrgJYoY+k64I8oJnELMgjF\n7nsn4HEUzN4GuaZ2pPoXcxzH4e674eKLoVMnmDtXU2sYhmEY1UkVg8iVi6kd8IKvDI8hIzEDeBo4\nG6XBnuCeM9/dPx9YDwwixOqVl8MNN+jzDTeYcTAMw6gruQpSLwa6uq89gJvc/T+iXsTOaKyDP3H3\nRtRr2BV4LUzwnXfCd9/BPvvAgAHaF/c85LjLi1JX3OVFqavQ5EWpK+7yotYVRoMbST1qlN5vusmm\n8jYMw6gPDa0KdcDh4INh0qRcF8UwDCP+FNR6EODw4Ye2zrRhGEY6xHWgXFY47rjqxiHuPsC4y4tS\nV9zlRamr0ORFqSvu8qLWFUaDMxDXX5/rEhiGYTQMGpyLyalhTWrDMAwjQUG5mAzDMIzMUBAGIu4+\nwLjLi1JX3OVFqavQ5EWpK+7yotYVRkEYCMMwDKP2WAzCMAyjgLEYhGEYhlFrCsJAxN0HGHd5UeqK\nu7wodRWavCh1xV1e1LrCKAgDYRiGYdQei0EYhmEUMBaDMAzDMGpNvhmIfmgZ0s+Bq9K9KO4+wLjL\ni1JX3OVFqavQ5EWpK+7yotYVRj4ZiMbA3chIdAJOAnZL58J33303o8cKTV6UuuIuL0pdhSYvSl1x\nlxe1rjDyyUDsAyxES5GuA54Ejk7nwhkzZmT0WKHJi1JX3OVFqavQ5EWpK+7yotYVRj4ZiG2Ar3zb\ny9x9hmEYRhbIJwNR5/SkioqKjB4rNHlR6oq7vCh1FZq8KHXFXV7UusLIpzTXXsBIFIMAGA5UArf4\nzlkI7BBtsQzDMPKaOUDXXBeivjQBFgEdgaZAKWkGqQ3DMIyGz2HAp6inMDzHZTEMwzAMwzCMwiOf\nYhC5pi2wE9DMt+/tHJXFMIx4sDGwJke6dwO2BqYB5b79/YBXM6GgoRmIcsKznRygTQ3Xnx5wDcgo\nDAY6oNhHL+AD4KC6FTMlJ6Af92fgWmAv4HpgVj1kboNiN43Rb+4g43YJcGfSud6+3ui7lgOnAt3c\n/UuB/Vx5TdxrHOBhoDmQnCrh7buF6qPfg/YBPAqcUsN32hb4t1tO3O8zBNgXeDrkmlTlC2I74MsU\nZaitvA4oPTuZO1DZofpvMg44wy1LEKnKl4piYASwv7tdAvwdaA+cC+zq7p8PvI/GH4VR07O5C3AP\nsBWwO9AF6A/ciP5L7wdc0wj4M7C9W67t3OunB5zbBxgIXBhw7FTgEeCygGMOcFsNZW8OHEv15/0N\nYAzQGj2LXdF9G+Ses7G7/9MQuW188gB+RN/vH+j/6g0I3hd4l+r370bUYP0E/TcvAV50Zc129+2I\nnrcK4ECgM/qf1n5IdZ6yFTCWhLXsBJxdBzn7uO93A3e5rweAL4BngY+AFqjCBP15vD/mENLj/qTt\nrYCjgCOBLX3757nvvdGf9khgA7Aq5PVziL7r3Pdb0J97IjDB9wI9SMl433EeMiZ7uuddCLyFKu/3\n0QN7l+8FwRWFty9I17yAfQBrQ/b7eQM4E9jIfZ0BvA7MTHFNWPl2RRXFRPf1T1SpBZU5HXndgePR\nnxlUUdxP4plpiYz/A+72fPQ7E6DT2/4I3a95aKqZ9cDH7rGw/8EQYBP0O451ZR3qnvM8ekb+H8r8\nG4met2/c/UcDx6DK+Vd0X6eEvM5wv/ca9zWDqo2tt4Gevu9S5Ct7KcHci56xBe52W1eux17ArajB\nUuLeF+/Z/q/v8xx3eyQyiN7L2w6jg/v+GvAUcCUyMt5rOjJa/t/L+079kWFY4m53c8sAcB7wrVvu\nxe7rC/fYq8CJwFx3eyP0uwfdvwqglbvdEd0bry7yzpuDjNCOwGfofk1M8Z0bHGE3NIhGqCVwJXC4\nu68HMInwh7QYPSDeg1mKWhSgP83Wru62wGbuu/dKxv8gnYAekIfd1xJUoXg6AG5GLSj/tTegFkob\n93UB6l0EcZT7/hlV3WKgaUomoJaE32iUAG8m6RwBnON+noVaLMk9z/aoUlyA/rjd3fe+6M8wD1Uc\n83yvta7+eQGvypDv5GdOyL6bgctRpez9FrulKN8SgivFbwhv/aX6vj+ge/QEyrr7F6oEhpB4dp5G\nPSevQpnj+z5hBiKZvVClD+H/A2/7UOAFYA+qVh7J/Ox+h2QOAF4JKcfprswD0f9lU9Szngmc5p7j\n/X/838V7zv8JHEf1Z2p20jvofo9E9/dt4GISRrev+7oTVehHoYr6CdRDC6MmYx5Wn3g9GX/5vHs6\nC90L/zFPzkJg8xCZYfcpaP8vSde2QnXV7STurXf+leheJcuokSY1nxJrNkcPwzB3ex1qWQVxP+qu\nTgf+ilpYuwLXkOiaJbPGveZj9OC/iFqpK9EP/SZqgQW1WrdP2v6f7/Nfgb2B793tLVxZzwDL3bIe\njCq75iQGNPZH3UuP0agSuDZAv9dLWITSgn/1HXsfVYBboD+o9+dcReIhXwVcjVw9fZB7yqt42gNf\n++QdglqR26AKEZ+My1EX+WZUKXq6pqOKa2VA2Re71wbhuQpXIPfB467MgahyHuie43c3tHLLHVS+\nlcClyDh6vIB+j0nIjZVcee2KjM4mAfJ+QS3GCmScvkKVzxLfeTugRsJAd7sI/cabofvc1re/cch9\nmIValRD+P/CuPQK5WfyV3S/od33H3e6Nft+SAF2bo+fuTwHHrkG/42LfvsmoMfYUagD9D7ViPY5D\nzx/A+cBQ1Ev2XHMOMgL+774F6tXt5erzKvCh7rtX7n+hSt+jG2q1Jz9nDvAH1HsvRc/ni+53vBO5\nlEH/lS4kjK3Hl8jVCvp/DXbLDLr/yW4cr9HzBdUrd49yqhqPXsBPqB5Kvn9rkFur1HftkajR4NUR\na4GTkaH2GowbhegOJN8NRDn6U3l4NzSIXujGVaJK91v0R13hO2eC73Mj1FX3WnuQ6Ia3Qa22taiS\nvg/5ch30hwvqkWzh+1xEVYOxgkQldALyP96KHrL2wBXusdWown7C3R5I1eCUnwmoUlrjludNEkbC\nQQ90r5BrQS3Sk4Gz0L3aDhmTM5FLZHqSvAPRg/tsiLyBSdsvoYo7qEWzkuBemJ+zkGvL8yG/75Yt\nlU8+qHyfEVwpvoWegZkk4jYeM93t1QHyZpOo6H5E7qAlSef8inzUHm3R8zHD1RXU4PD70BuhinK5\nux1WsSxGRu7/obTwNiQqqvOB8ail65U1uZweR6H/zFEBx7akqnHwWIL88wAXoUbPrqhhsZhE77hV\ntSvFKchQb4n87ceh52871Ht4FTWoko33xuh/vcjdboYMjf9/0hI1ELd1z09lzPug52oxVZ/3PyBD\nsg36HSaRaJR87H6/JihOMJhEnGUYil9+QMKV6v0fLwP+D/1e76Nn4ji37PchA/k1MjJHov+ln3Wo\nR+e5s89CxvEfbvm3Rw2FtMn3IHV3VEnsjn4U74YGdZ+9wE3YNiS61w5qgX1J1fmfgrgE+Avy6YJc\nFA+glmeY/luRb99r/XrugStr0LU9eih/726/5+pfEnDui+gPtjGJhsB6ZDCuAXYmOKhfUzC/b8j+\nEvf9SGRYm/uO/T2FvCCCfpt0OZ3gRIWHCQ7M/oHwUaRrqFqRB5H8fa9GvUwPfyvdQb3Ag1EvspN7\n7n6oBzYlhZ6RJL7XevSbb40MGci1sAdV/wfz0H1chBobm6EKbS6J4OsO6L78hJ6/sQTXCydSNVbm\nMQsZqyC8Y41RD6EVMm4/ox7YJyHXFrnl+xH9PqAGjtdCb4XcgSehhsnD6FmfhBpX95MwWh1R8Pg1\n9FwPRsbhaeRq7uzTW0r1Z+F3yHvQx91+BzVgloZ8Z5ABuhr1rHF1X48MzAxk4DxXqtf4GI/inBeh\nHtLPwFQS9YgXKG/rHnNI73+1MTKqC2o6MYh8NxCgLtMu7udPkRUN4hfkFvLwtzIcEt2yrZD7x0Gt\n5O9JzTzUYlvtbrdEP2znpPMGoaAbwCiUmtbb1fOuK6MmA1EbtkV+x7NItKq3Ax5CBiIsEPweqrDq\nYjzuQw/5QchIHo++Z20TB65BrZ4gwgKLXlm39H32yjILVZjPo99rPHr2T0Ut6/sI/i+cT+ouedD3\nXYoaAGFl9AL9c9EzuRg9Lz8EnL+dW74LfPu8Vvkq5E7Zl0RluxxVYDNQCzS58vUqo1mo0ipDvZUN\n7vEeVE+P9O6L416TnGVTSnisZgdUQX3pyn0KuZ8cdL/+gox0kEHflPSmf2iLftuBJLIKm6PeioMq\nxlbIjfhnZEzuQJX8T1RNVQ8y5skNwEHICM91z/E/N15PYG9kIDpSNfOpC6kbP8+gyv9RV+7JyI3Z\nhuq/FVR1bwbRHz2LzdyydEOxtv41XPcbDcFA+FMuvQft4YDzOtYgZwly79xKolW2P3LvPJPiunko\nC8rzK7ZAhiXZQPgJekjm1XANqPL7C9UfvLMCzl2MWl2XkvDnt0EP1Rr04NeGdAyH9x3moj9DK1Qx\n9Kb2HI66417w8CNkWHcL0O+5DDZ3P/spRhXToahnuWfS8S+pHsPx/he/o6rbMZnxVP++r6NKO4jf\nIQNyEKqMeiPf8ueoN9AIfc+h6LkbgHqMt5FIUfRcqv9DvaWPUAXQw9X7e1R5LwW+I7jyPdC9bo8U\n381PC+ReOotEA6MLiZjUoSHXOW45WqKe1kBktCagezaBRCzidNRKXop6S8OR4Xwu5Duk4veot90E\n9Xy6o3t4D1VjW31TyPCMeXID8Fz0vFyLKtu/UdWIjkduy8vRvfEnXCxB7rKlKKvJHxf8EbluOyWV\nY74rI93fys8s9KxNIVHf1OZ3z3tSpVzWhblU7UZvQfXgVDJD3XNGogdmDqqUg7iA4IyeJcBjaZTv\nA5S2egJqNR2H/lRBLCR4tt7GVO1JZRIvs2MqamU2r6Ouv6BW8EGoBbWJ+3k68ql6tEGumsXovgS5\nQJqiP6xXrj6+Y73RPQ2iBfozeamcq6ie3hn0ff1/+jepij/e0gRVPFe713yDWr1DUOv2Vqq66T5A\nFbtHXxJ+7WI0Dc31rs6ZqCJPxf1UTXhIpjEKbj+KDM1zpM5GSsZznSazKfKDOyTiTPuj738sytR7\nFjVEKpFHoKaUbj/JdYLnLq5NijjImIP+ny18+1uQSM8Oywh6L4XcJSTSW5PTXB+lauOiF7pXNf1W\nYUwLKGdN9VmDIijlMoxyqj8cX6DBLl6rzMv992hEeK6+n+6oRT6Y1L7zTVDr/0n0AHZ0X5uFXlGV\nsD9jEJ/V8Vh9uBZVAMeiANq3hKfhpuITgu/JZshlsBmqSBYjo7yp7xx/2u7LJIwHyGUxB7XglqI/\njr9HEVQpegRVBkHf99sU13jbbyKjcrt7bXIq5RdUJyiutgJVRq8if/RhVL0XoNa0l8nivUD3eB16\nFryGylxkeO5Dsbdn0X3w4jAlqJfmfY9eyCVzGaqQB6H/zDGo5evl/uPKHY1+j6epGjf7D2pgJX/X\ntihT6wDfqyZqUyf4f58wY56qARhmIA5BsZyT0O97LMEZYB7e/f8EGcWl6P44KIA+n+DfKoxXUA9q\nLHKrzUPB8rvQ+JK0yfcspqCUyzCCsiXaouDgvch//Crys/qDx2H5335mknqAlsdP7is5oyddXkIV\n2MtpnPsJ6raPT9p/KnUMWKWBZwyeQ2VsTt1Hba4I2bcFarl7rarkdFjPLxuUaLAAuan8gdmjUaV6\nEnJrTUO9jO2peQqFoO+bKtDsMRe5hPZADZU2qOX4K3ru1iJXTBEKUp6CKtZrUYuyCP3x1yP30uco\n/rCcqvf7UZQRU0pV3/XDyJgk8wHq0TyIKsbVrt7zkCG6kupZNl8i99cHJNKdK5BR8ho0S9zPTyHX\nWTn6726EKr4/IteNRxPUi6zL7AW1qRP8hGXN3YZcTV688AxqHktwOoqLNqGqi+l51KO9gETW41vI\noAal53dwz1kecCwVD6J67FHkoq1AmY9esDxt8jUG4fmFW6EWe3LKZdpBGBcvJjAYDU33fObvoOyI\nuFCOWnNrSQTjwwLHHdAD+QsJ49Xdvf4Ygqd8yAReTMifwx4UE0rFNFQpJfeY9nT3/UpwMoJ3L8IS\nDYICs9e65zyIniuvUkwexxIWXEz+vneg3k0RamneRuJ/dimJEbqggPMZyJ3UlETsy59Wu4V77FH3\ne3mpye+gVu1PqBLw4g+dkSGdiho9nUjfh38H+u/MQZX5BFThPk9wMPwJ1PL23B+Nkavod1TN9d+E\n6unn16DGzg8ooaI7qkx3QtOLbIJ+ww9Qz2835L8/pobvUOKen06d4P9N08lyhKoxuBZU/Z7e8/cp\niSB5MmOR4fAnSqwnMRg1U7RC8ZF+qFHhGSqHmqcX+Y187UF4rcRRqAXoN3SjailrIxJ/7nbISMxG\nFUZGJrzKIK1ITBrYvIZzl6Hu+UGoAnFQKze5K51JUrVYa4OXD/4QiXEI3VFluj+JTJMgkhMN7iaR\naLAN1QOq26LKw/OX+4PS/njWNlQdNOf50JO/7+ckMo3G+D4XkZha42LUS+mOjNFN7neaHPKdvD97\nb6r+2c9Ef/Z5yPD9hHokR6LffhK1a00PQT2HvqhH9U/U05qOssfWkQiG90WBZL9LawMyHskDwdai\n9M1OJPz5Dvqdt3LL6X2nInR/7vfJaY4Mk5etmIqRPvlF6HkJ67Fvgb5vUdJn71gQYeM2/LyPvuvH\nAcf2pmo84U2yExdYhxo7TVGZ05mdoBr5aiBK3PeNSFQEHi0I5liqp6VtiioGb7DTNahF6XWV70L+\n0rEkUmJzSW273Q56ALNpFPx0p3Yt1jDeRRXcheh3APlhexI+stgj1Sj1oFGxYZXiiaj17A16S3Yh\nOijLqi7ftzlq5MxCf+QrSRiH46maNXcj8n0H/dl7uq99USv0feQK2hNVTpsTPKgxVQ+70i3LZFff\noei+3INcc21IJA58jRpVfjdfC9+216J+BFXw/dzvcoq7HZQg4MXHvqL67AVLUpTbowS5505CjYXF\nKPYRhN+AhxnzurAv+n8mD67rgn6nHUkkb+xA+OwPdaUfajhMQPeizrPN5quL6QIUEPOPZQD9wO+R\nGJxAukYAAA58SURBVKXpZxxV/8gO6oqXUN2n3xW1zvqhP0ovNDncFeSWj6hbtzsqnkHB+tr6f2vD\nl4TPbApqTXch8Vs3Qi6TzqhS2pHgP66Hv1I8lNQJBEHf19/rCMuTTyaVq2MhaoFPQJWr/89+OzKm\nHySVoa/7Pgo9s8k97H0IJsgVBKosuyOjO93VN5XgaVKC8AageenAG5FoBKRDX6rOXhDELug3OxGl\nAD+DvnuqZyVbdAzZvwQN/HuIqgP5ziS891gX3kFjeIJ6MAVBfbOBwrgEtRQnodaHN0iqEfHoQQRN\nGjg/R2Xx42UNTUGujklUnVkzk9Q0sv1WV/8Z6I/3Kgm3Y8eQVxh/oOqspM+h7/gDaq0Hfd/Z7jVn\noGwU7/MZVJ9O3mN2yGeQz3t36kZtZtBNPt/f63wN9WDGodhQF1I3Llsi37rX8PLSgd9BhnoLgjO1\n6kMletb8BmFxyLkeeyAXtccdqPJ+kPDR4ZmgObqHXag+kWYmyFjDP19dTHXJBkqnZdcWpaMlD6Ov\nJHgemqipa7c722QyJlRfvkItXC/R4D4SiQZLAs73V5jJz8X2VG3l7kyisj8UucD8LVrv2hL3/RKq\nZ5HVls+pfUvQ38P2fz+vh50O/qyeQ5Hx8EZuD6VqMPxvqKI7gkTP63kSKZUPuPL+imJLXkwlk/zJ\n1Z1qnqZkbkbxH49DkIu5pVu+ARkuI6iHeh5Vp3u5l/AZIOpCfV28v5GvBqIueBOsFRE8AhJSzw8f\nh5a650oaSdVJA3NNiftem5hQKlINdixOcQxqn2jgN/wvo1RX77n4L1Ur54XoOToZBVefRhXwe+7r\nfTQitrb403X9Pnxvu7Y8jtKzk2fQXUVw+nC6BAXD90Ot9oPQc/AwcoOe4bvuERJzCXkGs109yhHE\ni+7Lm6fpUtRTGU1inqZk2lPVYK4iMfblvOqnZ4TRqN79D4ksptFkPospI+RrDKK+1GcyOKM6dYkJ\npeIMEka7KOBzTa3yRiQSDXqQfqJBkP9/x5BzF6EAtX+Ki31RBbpbiLy4s4xEWq4/RbcPup8/UDUY\n/j76ji8hn7cXB0lOEw5KL4aa5xKqL0HzNPn5DPUKg/gcZQtmGi8OU9O+WFBIPQgje2S6xTouxbF0\n5rOvRCOav0MV0qYoU622iQYLUCv5paT9R7nHWlA9qydVbyBszMpEdA9fJHz69igIy+pph3pTQ6me\ngOBlDL2FjOYzVM80C0ovjoIfUbps8mqOHl+jBJSpSfv3pfaD09Iliiwmo57UalUlI3Le9X1Onr++\npvWPa5to0J3EqnDJK8QdjVqZD6Hc/MHIeP3k6gia4qJWC7K4DEAJF/9DvZ1jkK86nyhC7qa70WC5\nV0iMjq7rXELZZh/U2xlBYgW6kShWlW6GVW35A8rEK0FG1Zu8MZYUkospnRGQRjyoywhXj+tQ7CE5\n0QDkEkqOJZUQ7M7yOAy5yLzBhh+jFvOmKO3YW/xlHomptOuaAdMSVVQDUSt2IhqtHOQ/zwZ1SdEN\nojGqCJ9ELfHGyF2TKr04V7QjMYgP9Pv+B/U+s0ELNEDwIOR2m4FceRWpLsoVhWQgvHlfjPhTHwOR\nSZoSnnffiOApLjqj4Gd92ZPEdOI1DQ7MFGeQOpEjKPbTnerji35A2WQda9C3pM4lzS59kJG+sKYT\n60DYmg/Hp7ooVxRSDGIa2c1tNjLHJihtscj3Gd92NilCrd+T0DiK1SHneb3O5KyedlSdsiH5mlTz\n4GxFYq3q9mg+pLCxE9lgnO9zuim6/6J6r6stMq4nUbsZiHOJF0s5Hhmu51KeXXd2p+qaD5OJR4Zk\nIIVkIAqpt5TvvE0i/dT/Gaqn0WaKfVEFMQBVcBehgHZQ2uolqNfwJVWzesaiuETrgGtScS4yCrui\niuly5LbKWD57Fukbsr8Hmrtq/5DjcSBo9HUjUi8kVF9moWfNm2akF+nNBJ0TCqnS9KfwJVOrGQ6N\nBsVNKEf/CxQgfhH9YZNnc/UTNsUF1M0F9iCKNUymahpoLsmEKy/uab6VKEPtIhLL8gbN5JsJvAGL\nTZBh+grVO9uh2V93C7kupxRSD6IxtW/ZGbnhMuS2GZO0/2z0G96RQV3nIIMwGmXe+GMOQcurgv43\ng6ldbGA71FINWq96ChoZD8oE8g/eughlBkVBciJHOim6YbSjjjOIRkhdRl/XlVQzMeRDT7HBY6mt\n+cMsgtM8m5LeCn+1oQnKVBqPWnWPoDEUQemqrdAMrosJH+Tlnw9sSxTofBf1UMKuSTUXU9yf27sC\nXo+ie1TbdVlyRSuUqfYSijmNRgMDC55C6kGkYh8SE4oZuacJwdlDa8l8C2896jm8giZROxItqrQM\nTVh3MpreYwgKGD+O/OthAwDXomygk9CAqBeRy2KbDJc7LnhT2Hh4syQPJTHletwpR2vCP0Zi9PUw\noksvNmJAW+RrvhLNtwP6o08ifzItCoV5KKMnmXZkvgcRRhvU+r+ZxHKf6WRQ/YJGHffy7atpVtF8\n7kEMQG4wj+no+35BTFM30+TpXBfAiJYxqEV4E8o6eQ4NisnGjI1G/TgNtUz7ophDa+BANKjojAjL\n4S0gPwLFRYa6797nIIaglOpZqBW6AzUbiF9ILEa/xvfZ244z71N1iu1S5GbbjsyucRA1NU0rXxAU\nkoupFxq5WYlcCd+iP299Zrc0ssPDKO3w7yTWQvgYteJfibAcq9A0G5DeUpOgAPod6NkaiFxM7dEc\nVS+QWDHNTywzWNKkKYkMIFCAfYX7apmTEhlGHci3rruRe1KtjBeWlRK0gllntPJfTbPJFqOpsvcm\n+wMCM0Wq75TpRYEyjTfnVvKrO2pAFjyFNA7iFxIzKELVqanjMi+MIfzrcvjnBPKCoX/PoK5Ua09c\nSLCL6Cy0+M3/C7jGn/v/HIp71UQztLDRAFdXEZqm4gW0LkHYdB9x4HE0n1XyjKnnAwegYH1cKSF1\niumBEZUjthSSiym5G+9VPNshX7ERH1ZT/Y/bEo2D2JzMGojkLBxIGKTbURLDESRcQ8NRSmQ6I4SD\nDEgQf0VptduSGHvQGrgHudWuTVNOLrgUudFOJjHT7l7IjRv3+F7fFMd6pThmNHD2QgOWlqBWxMW5\nLIyRkjaoAl0M3ILGFkRBCzQv0h9QT3MPFFt4n8TU3kGkykgK42OC/fWtyI+F5735qwaj/1Jsp6+u\nBV/WfIrRkNgFzfX+CRo5eTH2EMSZzYAbkGG4jtSVcqZojHoLj6Lpnr0J2/ZHQdf/opZxKjagXsAq\nNMZile/1c8g1c1PIiyqt16iKZTEVGJXoD+4PItaUfmjkhn+iVvtVZH96lCLkargPVQrPIuOwMRpA\n5VXu65Drq6bKvi7MReN0kl+bkdp4GNnDDASFFaQegAJmPUnMuzKWmuesN6KnEgVmg9bvyPTiTsvQ\ndMsPAhOQEcjWhG1hLCF1sDTKshQSE1Ic+wNqJBQ0hWQgPFqhpSRPQlkKD6NsERtWX5jcgeYMmoPW\nX5iAVoqzSrnh07eG4yURlMGIMW3RXPz5POKzIZLsatmU7DZmGqHA6gOoR1GOZl5Nd3BcfTnF93m/\npGMXYRg5ohB7EEb8WUJ1l0trNI3DOWR3qcqNgENRD/NQlFabbeKyxGqhkSoBwMZGUVjjIIz8oWPI\n/j8B9wL9MqhrANCBxJoL7wFbuJ/D5lsyGgZfobnZvMV7rMFsGHlOpqdIicNkc/k8m2s+MwStCrgU\nGIX11Awjr2lF5qdmn5G07V+9bVqGdYWRz7O5NgQ6otkUZqPlP0cAO+eyQHHBulRGHLksYN+mKNvo\nbqrP+1MfFqH5loL4gvSny6gPHWs4viSCMhiiG5rBtzO1W1K2QWIxCCOOtKb6KmXfoDmQMj2yeBrK\nZAuabC6qHsSSgH2bo9Hbtl5x9mmCFhEbiMY/TKHqhJGGYeQBLcj8KmXtkB+6BLjNfZUAUwle1S4b\n7OvqfB7NE/YRmm76f2i9bCM7HIIGSH6Hxr+cTHSpzYZhZICw+ZEySa4nm5uJKqvjgTISM4nuii2H\nm00mA39BY20Mw8gTUs2P1BDxG4FPko5ZFpORMywGYcSRr0jMjzSUxPxIDTWjxx9nqMhZKQwjCTMQ\nRhx5FmUsnehup5pUrSHQhcRCQS18n71twzAMw0eu50cyDMMw8oCmwFFo/eMfclwWwzAMI6YMz3UB\nDMMwjHhiK30ZRkQ0ynUBDMMwjHhiBsIwDMMIxNJcjThSTvgcRA11sJxhGIZhGIZhGIZhGIZhGIZh\nGIZhGIZRwFyD1mWYg2ZU3SeLukqA7lmUbxh1wrKYDKM6+6I1KLoB69B6Ac2yqM/BVo4zYoiNgzCM\n6myF5nxa527/iJY8vRaYjpY9vc93fglaie5DtJ7D3sALwGfA9e45HYEFaOGj+cAzBM/UegjwPlpE\n6Gmgpbv/ZuBj1KO5tV7fzjAMw6gzLZFb6VPgP8D+7v5Nfec8DBzpfp4C3OR+Hgx8jZYybYqmBtkU\nGYhK1DsBGAtc5rt+L7QO9VskDMdVyCi1RcbFo009vpthpI31IAyjOqtRTOBctC70U8DpaPrxqcBc\n93Mn3zX/dd8/cl/fAWuBL4Bt3WNfofWvQT2J3r7ri9BSo51QD2I2cBqwHfATWkhoLHAM8EtGvqVh\n1IDFIAwjmErUmn8LuZTOBzojw7EcGAE0953/q++6X337K0n8z/xxhiKC4w6vAycH7N8HrZt9HHCR\n+9kwsor1IAyjOjsDO/m2uyEXjwOsQIsWHV8HuduhXgLICLzjO+ag3sl+wA7uvpZuOVoCxcAraAnW\nPeug2zBqjfUgDKM6rYC7UKW8HvgcOA8oQ+6jb4FpIdemykj6FLgQrbX9MTA66fgPwBnAEySypq5B\nS5D+H+qxFAGX1vL7GIZhGDGmI3JVGUbeYC4mw4gOG+tgGIZhGIZhGIZhGIZhGIZhGIZhGIZhGIZh\nGIZhGIZhGIZRP/4/WXik0iO44CUAAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x105b7a990>",
"output_type": "display_data",
"metadata": {}
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 7** In the box below, write a list comprehension that users the FreqDist you computed above to find all words in *Monty Python* that are longer than 5 characters long and occur at least 5 times (hint: the text shows how to do a variation of this). \nShow the output sorted in alphabetical order."
},
{
"metadata": {},
"cell_type": "code",
"input": "long_words = [w for w in set(first500_nopunt) if len(w) > 5 and mp_freqdist2[w] >= 5]\nsorted(long_words)",
"prompt_number": 32,
"outputs": [
{
"text": "['ARTHUR',\n 'Aaaaugh',\n 'Arthur',\n 'BEDEVERE',\n 'BRIDGEKEEPER',\n 'Bedevere',\n 'Bridge',\n 'Britons',\n 'CARTOON',\n 'CHARACTER',\n 'CONCORDE',\n 'CUSTOMER',\n 'Camelot',\n 'Castle',\n 'Christ',\n 'Concorde',\n 'DENNIS',\n 'English',\n 'FATHER',\n 'FRENCH',\n 'Father',\n 'French',\n 'GALAHAD',\n 'GUARDS',\n 'GUESTS',\n 'Galahad',\n 'HERBERT',\n 'HISTORIAN',\n 'INSPECTOR',\n 'KNIGHT',\n 'KNIGHTS',\n 'Knight',\n 'Knights',\n 'LAUNCELOT',\n 'Launcelot',\n 'MASTER',\n 'MAYNARD',\n 'MIDDLE',\n 'MINSTREL',\n 'NARRATOR',\n 'OFFICER',\n 'PERSON',\n 'PIGLET',\n 'Please',\n 'RANDOM',\n 'SOLDIER',\n 'VILLAGER',\n 'afraid',\n 'angels',\n 'better',\n 'carried',\n 'castle',\n 'chanting',\n 'coconut',\n 'course',\n 'domine',\n 'dramatic',\n 'easily',\n 'escape',\n 'father',\n 'forest',\n 'giggle',\n 'killed',\n 'knight',\n 'knights',\n 'master',\n 'mumble',\n 'nothing',\n 'people',\n 'please',\n 'questions',\n 'rabbit',\n 'really',\n 'requiem',\n 'sacred',\n 'saying',\n 'second',\n 'shrubberies',\n 'shrubbery',\n 'simple',\n 'singing',\n 'spanking',\n 'squeak',\n 'swallow',\n 'swallows',\n 'taunting',\n 'through']",
"output_type": "pyout",
"metadata": {},
"prompt_number": 32
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
}
],
"metadata": {}
}
],
"metadata": {
"name": "",
"signature": "sha256:626ccdb14625ccd28fddfdf092d3ccaba3ebbf5f90b9bfdd6bbbd7163b2af08f"
},
"nbformat": 3
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment